node-machine / rttc

Runtime type-checking for JavaScript.
http://node-machine.org/
25 stars 4 forks source link

Cannot read properties of undefined (reading 'name') #11

Open xziy opened 1 year ago

xziy commented 1 year ago

Hi! 👋

TypeError: Cannot read properties of undefined (reading 'name')
    at Object.is (/prj/webresto_factory/backend/@webresto/graphql/test/fixture/node_modules/rttc/lib/helpers/types.js:469:42)
    at _validateRecursive (/prj/webresto_factory/backend/@webresto/graphql/test/fixture/node_modules/rttc/lib/helpers/validate-recursive.js:100:21)
    at Object.validate (/prj/webresto_factory/backend/@webresto/graphql/test/fixture/node_modules/rttc/lib/validate.js:22:16)
    at normalizeValueToSet (/prj/webresto_factory/backend/@webresto/graphql/test/fixture/node_modules/waterline/lib/waterline/utils/query/private/normalize-value-to-set.js:516:22)
    at /prj/webresto_factory/backend/@webresto/graphql/test/fixture/node_modules/waterline/lib/waterline/utils/query/private/normalize-new-record.js:181:37
    at arrayEach (/prj/webresto_factory/backend/@webresto/graphql/test/fixture/node_modules/@sailshq/lodash/lib/index.js:1470:13)
    at Function.<anonymous> (/prj/webresto_factory/backend/@webresto/graphql/test/fixture/node_modules/@sailshq/lodash/lib/index.js:3532:13)
    at normalizeNewRecord (/prj/webresto_factory/backend/@webresto/graphql/test/fixture/node_modules/waterline/lib/waterline/utils/query/private/normalize-new-record.js:176:5)
    at forgeStageTwoQuery (/prj/webresto_factory/backend/@webresto/graphql/test/fixture/node_modules/waterline/lib/waterline/utils/query/forge-stage-two-query.js:1250:25)
    at Deferred._.extend._WLModel [as _handleExec] (/prj/webresto_factory/backend/@webresto/graphql/test/fixture/node_modules/waterline/lib/waterline/methods/create.js:151:9)
    at Deferred.exec (/prj/webresto_factory/backend/@webresto/graphql/test/fixture/node_modules/parley/lib/private/Deferred.js:286:10)
    at Deferred.tryCatcher (/prj/webresto_factory/backend/@webresto/graphql/test/fixture/node_modules/bluebird/js/release/util.js:11:23)
    at ret (eval at makeNodePromisifiedEval (/prj/webresto_factory/backend/@webresto/graphql/test/fixture/node_modules/bluebird/js/release/promisify.js:184:12), <anonymous>:14:23)
    at Deferred.toPromise (/prj/webresto_factory/backend/@webresto/graphql/test/fixture/node_modules/parley/lib/private/Deferred.js:572:19)
    at Deferred.then (/prj/webresto_factory/backend/@webresto/graphql/test/fixture/node_modules/parley/lib/private/Deferred.js:431:22)
    1) Registration new user

I get it when pass JSON to model field

payload is

{
  firstName: 'test',
  phone: [Object: null prototype] { code: '+1', number: '123' },
  lastName: 'test'
}

next

await User.create({ firstName: payload.firstName, phone: payload.phone, lastName: payload.lastName }).fetch()

Here is the diff that solved my problem:

diff --git a/node_modules/rttc/lib/helpers/types.js b/node_modules/rttc/lib/helpers/types.js
index a11279d..1181562 100644
--- a/node_modules/rttc/lib/helpers/types.js
+++ b/node_modules/rttc/lib/helpers/types.js
@@ -460,9 +460,11 @@ var TYPES = {
       }
       // Reject RttcRefPlaceholders
       // (this is a special case so there is a placeholder value that ONLY validates against the "ref" type)
-      if (_.isObject(v) && v.constructor.name === 'RttcRefPlaceholder') {
+
+      if (_.isObject(v) &&  v.constructor  &&  v.constructor.name === 'RttcRefPlaceholder') {
         return false;
       }
+
       if (_.isString(v) || _.isNumber(v) || _.isBoolean(v) || _.isPlainObject(v) || _.isArray(v) || _.isNull(v)) {
         return true;
       }

Just added in sails patch module https://www.npmjs.com/package/dark-sails

sailsbot commented 1 year ago

@xziy Thanks for posting! We'll take a look as soon as possible.

In the mean time, there are a few ways you can help speed things along:

Please remember: never post in a public forum if you believe you've found a genuine security vulnerability. Instead, disclose it responsibly.

For help with questions about Sails, click here.