Skip to content

non-enumerable object properties are lost after passing an object to workerize. #34

Open

Description

@wujekbogdan

Here's a real life example:

// The main thread
import Worker from 'workerize-loader!./workers';
import getCompaniesFromFirebase from './getCompaniesFromFirebase';

const worker = Worker();

const {
  filterCompaniesByTypes
  // Other modules
} = worker;

(async () => {
  const companies = await getCompaniesFromFirebase();
  // typeof companies[0].id === "string" // true

  const companiesFiltered = await filterCompaniesByTypes(companies, ['company-type-1', 'company-type-2']);
  // typeof companiesFiltered[0].id === "string" // false
  // typeof companiesFiltered[0].id === "undefined" // true
})();
// The worker
import intersection from 'lodash/intersection';

export const filterCompaniesByTypes = (companies, typesToFilerBy) => {
  return companies.filter(({ types, id }) => {
    // typeof id === 'undefined' // true
    return intersection(types, typesToFilerBy).length > 0;
  });
};

In the given example the getCompaniesFromFirebase() function returns an array of objects. Each object has some properties, inluding the id property that is non-enumerable.

After executing the filterCompaniesByTypes() function (which is a web worker function) I receive a filtered array. All id properties are gone.


if it's the desired behaviour (or an unpleasant, but expected, side-effect) not a bug, then it would be good to mention it in the readme.

Activity

  1. philg-ygt commented on Nov 13, 2019

    @philg-ygt

    Pretty sure the structured clone algorithm doesn't include non-enumerable properties of Objects, so I wouldn't expect this to include them either.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions