longshotlabs / simpl-schema

A JavaScript schema validation package that supports direct validation of MongoDB update modifier objects
https://www.npmjs.com/package/simpl-schema
MIT License
560 stars 114 forks source link

Inconsistency between documentation and actual behavior of `autoValue` #412

Open yurtsiv opened 3 years ago

yurtsiv commented 3 years ago

Hi, I'm trying to add some missing stuff to @types/simpl-schema and noticed, that there're some documented properties on autoValue's this which are not actually present at runtime.

Those are: genericKey, isInArrayItemObject, isInSubObject, obj, operator They're available in custom's this, not autoValue's

https://github.com/aldeed/simpl-schema/blob/main/package/lib/clean/AutoValueRunner.js#L49

Example:

const schema = new SimplSchema({
  array: {
    type: Array,
  },
  "array.$": {
    type: new SimplSchema({
      field: {
        type: String,
        autoValue() {
          console.log(this);
        },
      },
    }),
  },
});

const doc = { array: [{ field: "hello" }] };
schema.clean(doc);

console.log prints

{
  closestSubschemaFieldName: "array.$"
  field: ƒ field(fName)
  isModifier: false
  isSet: true
  isUpsert: false
  key: "array.0.field"
  operator: null
  parentField: ƒ parentField()
  siblingField: ƒ siblingField(fName)
  unset: ƒ unset()
  value: "hello"
}

Also isUpsert is not mentioned in the docs.

I would be more than happy to work on this, but I'm not sure whether the documentation or the code should be fixed.

Thanks!

github-actions[bot] commented 3 years ago

Thank you for submitting an issue!

If this is a bug report, please be sure to include, at minimum, example code showing a small schema and any necessary calls with all their arguments, which will reproduce the issue. Even better, you can link to a saved online code editor example, where anyone can immediately run the code and see the issue.

If you are requesting a feature, include a code example of how you imagine it working if it were implemented.

If you need to edit your issue description, click the [...] and choose Edit.

Be patient. This is a free and freely licensed package that I maintain in my spare time. You may get a response in a day, but it could also take a month. If you benefit from this package and would like to see more of my time devoted to it, you can help by sponsoring.

loichu commented 3 years ago

Same problem here ! It is very inconvenient because it makes it impossible to get a parent field value as parentField() doesn't work as expected (it doesn't work like field(), it takes no argument and just returns the full subschema) and field() returns undefined with whatever value I pass it through.