@lucania/schema 3.1.2 → 3.1.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -11,6 +11,7 @@ import { NumberSchema, NumberSource } from "./schema/NumberSchema";
11
11
  import { ObjectSchema, ObjectSource, ObjectSubschema } from "./schema/ObjectSchema";
12
12
  import { OrSetSchema, OrSetSchemaSource } from "./schema/OrSetSchema";
13
13
  import { StringSchema, StringSource } from "./schema/StringSchema";
14
+ import { TupleSchema, TupleSource } from "./schema/TupleSchema";
14
15
  import { BaseSchemaAny } from "./typing/extended";
15
16
  import { DefaultValue, ModelValue, SourceValue } from "./typing/toolbox";
16
17
  /**
@@ -147,6 +148,9 @@ export declare namespace Schema {
147
148
  function Enumeration<Members extends string[]>(subschema: TypedMembers<Members>): EnumerationSchema<Members, true, undefined>;
148
149
  function Enumeration<Members extends string[], Required extends boolean>(subschema: TypedMembers<Members>, required: Required): EnumerationSchema<Members, Required, undefined>;
149
150
  function Enumeration<Members extends string[], Required extends boolean, Default extends DefaultValue<EnumerationSource<Members>>>(subschema: TypedMembers<Members>, required: Required, defaultValue: Default): EnumerationSchema<Members, Required, Default>;
151
+ function Tuple<Members extends BaseSchemaAny[]>(members: TypedMembers<Members>): TupleSchema<Members, true, undefined>;
152
+ function Tuple<Members extends BaseSchemaAny[], Required extends boolean>(members: TypedMembers<Members>, required: Required): TupleSchema<Members, Required, undefined>;
153
+ function Tuple<Members extends BaseSchemaAny[], Required extends boolean, Default extends DefaultValue<TupleSource<Members>>>(members: TypedMembers<Members>, required: Required, defaultValue: Default): TupleSchema<Members, Required, Default>;
150
154
  function OrSet<MemberSchemas extends BaseSchemaAny[]>(subschema: TypedMembers<MemberSchemas>): OrSetSchema<MemberSchemas, true, undefined>;
151
155
  function OrSet<MemberSchemas extends BaseSchemaAny[], Required extends boolean>(subschema: TypedMembers<MemberSchemas>, required: Required): OrSetSchema<MemberSchemas, Required, undefined>;
152
156
  function OrSet<MemberSchemas extends BaseSchemaAny[], Required extends boolean, Default extends DefaultValue<OrSetSchemaSource<MemberSchemas>>>(subschema: TypedMembers<MemberSchemas>, required: Required, defaultValue: Default): OrSetSchema<MemberSchemas, Required, Default>;
package/build/index.js CHANGED
@@ -262,6 +262,9 @@
262
262
  }
263
263
  const type = typeof value;
264
264
  if (type === "object") {
265
+ if (value.constructor === undefined) {
266
+ return type;
267
+ }
265
268
  const constructor = value.constructor.name;
266
269
  if (constructor === "Object") {
267
270
  return type;
@@ -707,7 +710,7 @@
707
710
  return output;
708
711
  }
709
712
  convert(value, pass) {
710
- pass.assert(typeof value === "object", `Unable to convert ${ObjectSchema.getType(value)} to object.`);
713
+ pass.assert(typeof value === "object" && value !== null, `Unable to convert ${ObjectSchema.getType(value)} to object.`);
711
714
  const model = {};
712
715
  for (const key in this.subschema) {
713
716
  const nestedSchema = this.subschema[key];
@@ -856,6 +859,30 @@
856
859
  }
857
860
  }
858
861
 
862
+ class TupleSchema extends BaseSchema {
863
+ subschema;
864
+ constructor(subschema, required, defaultValue, additionalValidationPasses) {
865
+ super(required, defaultValue, additionalValidationPasses);
866
+ this.subschema = subschema;
867
+ }
868
+ get type() { return "Tuple"; }
869
+ _validate(source, options, pass) {
870
+ return source;
871
+ }
872
+ convert(value, pass) {
873
+ return this.subschema.map((schema, i) => schema.validate(value[i]));
874
+ }
875
+ clone() {
876
+ return new TupleSchema(this.subschema, this._required, this._default, this._additionalValidationPasses);
877
+ }
878
+ getJsonSchema() {
879
+ return {
880
+ type: "Tuple",
881
+ description: this._getJsonSchemaDescription(),
882
+ };
883
+ }
884
+ }
885
+
859
886
  /**
860
887
  * A collection of helper functions used to create the standard set of schemas.
861
888
  */
@@ -901,6 +928,10 @@
901
928
  return new EnumerationSchema($members, required, defaultValue);
902
929
  }
903
930
  Schema.Enumeration = Enumeration;
931
+ function Tuple({ $members }, required = true, defaultValue = undefined) {
932
+ return new TupleSchema($members, required, defaultValue);
933
+ }
934
+ Schema.Tuple = Tuple;
904
935
  function OrSet({ $members }, required = true, defaultValue = undefined) {
905
936
  return new OrSetSchema($members, required, defaultValue);
906
937
  }
@@ -923,30 +954,6 @@
923
954
  Schema.Values = Values;
924
955
  })(exports.Schema || (exports.Schema = {}));
925
956
 
926
- class TupleSchema extends BaseSchema {
927
- subschema;
928
- constructor(subschema, required, defaultValue, additionalValidationPasses) {
929
- super(required, defaultValue, additionalValidationPasses);
930
- this.subschema = subschema;
931
- }
932
- get type() { return "Tuple"; }
933
- _validate(source, options, pass) {
934
- return source;
935
- }
936
- convert(value, pass) {
937
- return this.subschema.map((schema, i) => schema.validate(value[i]));
938
- }
939
- clone() {
940
- return new TupleSchema(this.subschema, this._required, this._default, this._additionalValidationPasses);
941
- }
942
- getJsonSchema() {
943
- return {
944
- type: "Tuple",
945
- description: this._getJsonSchemaDescription(),
946
- };
947
- }
948
- }
949
-
950
957
  exports.$ = exports.Schema;
951
958
  exports.AnySchema = AnySchema;
952
959
  exports.ArraySchema = ArraySchema;
@@ -9,7 +9,7 @@ export type SourceRequirement<Layout extends BaseSchemaAny> = (Layout extends Ba
9
9
  export type SourceValue<Source, Required extends boolean, Default extends DefaultValue<Source>> = (Required extends true ? (undefined extends Default ? (Source) : (Source | undefined)) : Source | undefined);
10
10
  export type ModelRequirement<Layout extends BaseSchemaAny> = (Layout extends BaseSchema<any, any, infer Required, infer Default> ? (Required extends true ? (true) : (Default extends undefined ? false : true)) : never);
11
11
  export type ModelValue<Source, Model, Required extends boolean, Default extends DefaultValue<Source>> = (Required extends true ? Model : Default extends undefined ? Model | undefined : Model);
12
- export type DefaultValue<Type> = undefined | Type | ((pass: ValidationPass) => Type);
12
+ export type DefaultValue<Source> = undefined | Source | ((pass: ValidationPass) => Source);
13
13
  export type AdditionalValidatorBeforeType = ("beforeAll" | "beforeDefault" | "afterDefault");
14
14
  export type AdditionalValidatorAfterType = ("beforeConversion" | "afterConversion" | "afterAll");
15
15
  /**
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lucania/schema",
3
- "version": "3.1.2",
3
+ "version": "3.1.4",
4
4
  "description": "A schema module for compile-time and runtime type checking.",
5
5
  "main": "./build/index.js",
6
6
  "types": "./build/index.d.ts",