xogroup / felicity

Javascript object constructors and sample data based on Joi schema.
Other
111 stars 9 forks source link

Remove extraneous non-enumerable in internals.skeleton #102

Closed WesTyler closed 7 years ago

WesTyler commented 7 years ago

Description

The non-enumerable property assignment in internals.skeleton was unneccesary and was triggering a bug in the V8 implementation of JSON.stringify in Node v4.x

Motivation and Context

Consumers of Felicity.entityFor that try to save new'd instances into elasticsearch in Node v4.5.0 would have the non-enumerable .schema property stringified into the documents erroneously.

const schema = Joi.object().keys({a: Joi.string(), b: Joi.object().keys({c: Joi.string()})})\
const Thing = Felicity.entityFor(schema)
const thing2 = new Thing({a: 'here', b: {c: 'here'}})

JSON.stringify(thing2);

// '{"a":"here","b":{"c":"here"}}'

JSON.stringify(thing2, undefined, undefined)
/*
'{"a":"here","b":{"c":"here"},"schema":{"isJoi":true,"_type":"object","_settings":null,"_valids":{"_set":[]},"_invalids":{"_set":[]},"_tests":[],"_refs":[],"_flags":{},"_description":null,"_unit":null,"_notes":[],"_tags":[],"_examples":[],"_meta":[],"_inner":{"children":[{"key":"a","schema":{"isJoi":true,"_type":"string","_settings":null,"_valids":{"_set":[]},"_invalids":{"_set":[""]},"_tests":[],"_refs":[],"_flags":{},"_description":null,"_unit":null,"_notes":[],"_tags":[],"_examples":[],"_meta":[],"_inner":{}}},{"key":"b","schema":{"isJoi":true,"_type":"object","_settings":null,"_valids":{"_set":[]},"_invalids":{"_set":[]},"_tests":[],"_refs":[],"_flags":{},"_description":null,"_unit":null,"_notes":[],"_tags":[],"_examples":[],"_meta":[],"_inner":{"children":[{"key":"c","schema":{"isJoi":true,"_type":"string","_settings":null,"_valids":{"_set":[]},"_invalids":{"_set":[""]},"_tests":[],"_refs":[],"_flags":{},"_description":null,"_unit":null,"_notes":[],"_tags":[],"_examples":[],"_meta":[],"_inner":{}}}],"renames":[],"dependencies":[],"patterns":[]}}}],"renames":[],"dependencies":[],"patterns":[]}}}'
*/

Types of changes

Checklist: