@atproto/lex-schema 0.0.2 → 0.0.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.
- package/CHANGELOG.md +75 -0
- package/dist/core/$type.d.ts +6 -3
- package/dist/core/$type.d.ts.map +1 -1
- package/dist/core/$type.js +1 -0
- package/dist/core/$type.js.map +1 -1
- package/dist/core/record-key.d.ts +3 -3
- package/dist/core/record-key.d.ts.map +1 -1
- package/dist/core/record-key.js +12 -6
- package/dist/core/record-key.js.map +1 -1
- package/dist/core/result.d.ts.map +1 -1
- package/dist/core/result.js +6 -0
- package/dist/core/result.js.map +1 -1
- package/dist/core/string-format.d.ts +30 -27
- package/dist/core/string-format.d.ts.map +1 -1
- package/dist/core/string-format.js +56 -42
- package/dist/core/string-format.js.map +1 -1
- package/dist/core/types.d.ts +9 -1
- package/dist/core/types.d.ts.map +1 -1
- package/dist/core/types.js.map +1 -1
- package/dist/external.d.ts +31 -28
- package/dist/external.d.ts.map +1 -1
- package/dist/external.js +33 -17
- package/dist/external.js.map +1 -1
- package/dist/schema/_parameters.d.ts +2 -2
- package/dist/schema/_parameters.d.ts.map +1 -1
- package/dist/schema/array.d.ts +5 -6
- package/dist/schema/array.d.ts.map +1 -1
- package/dist/schema/array.js +5 -6
- package/dist/schema/array.js.map +1 -1
- package/dist/schema/blob.d.ts +2 -3
- package/dist/schema/blob.d.ts.map +1 -1
- package/dist/schema/blob.js +1 -2
- package/dist/schema/blob.js.map +1 -1
- package/dist/schema/boolean.d.ts +4 -5
- package/dist/schema/boolean.d.ts.map +1 -1
- package/dist/schema/boolean.js +2 -3
- package/dist/schema/boolean.js.map +1 -1
- package/dist/schema/bytes.d.ts +3 -4
- package/dist/schema/bytes.d.ts.map +1 -1
- package/dist/schema/bytes.js +2 -3
- package/dist/schema/bytes.js.map +1 -1
- package/dist/schema/cid.d.ts +13 -6
- package/dist/schema/cid.d.ts.map +1 -1
- package/dist/schema/cid.js +2 -4
- package/dist/schema/cid.js.map +1 -1
- package/dist/schema/custom.d.ts +3 -4
- package/dist/schema/custom.d.ts.map +1 -1
- package/dist/schema/custom.js +4 -3
- package/dist/schema/custom.js.map +1 -1
- package/dist/schema/dict.d.ts +3 -3
- package/dist/schema/dict.d.ts.map +1 -1
- package/dist/schema/dict.js +1 -1
- package/dist/schema/dict.js.map +1 -1
- package/dist/schema/discriminated-union.d.ts +15 -24
- package/dist/schema/discriminated-union.d.ts.map +1 -1
- package/dist/schema/discriminated-union.js +40 -64
- package/dist/schema/discriminated-union.js.map +1 -1
- package/dist/schema/enum.d.ts +8 -4
- package/dist/schema/enum.d.ts.map +1 -1
- package/dist/schema/enum.js +5 -3
- package/dist/schema/enum.js.map +1 -1
- package/dist/schema/integer.d.ts +3 -4
- package/dist/schema/integer.d.ts.map +1 -1
- package/dist/schema/integer.js +3 -4
- package/dist/schema/integer.js.map +1 -1
- package/dist/schema/intersection.d.ts +22 -14
- package/dist/schema/intersection.d.ts.map +1 -1
- package/dist/schema/intersection.js +12 -22
- package/dist/schema/intersection.js.map +1 -1
- package/dist/schema/literal.d.ts +7 -3
- package/dist/schema/literal.d.ts.map +1 -1
- package/dist/schema/literal.js +5 -3
- package/dist/schema/literal.js.map +1 -1
- package/dist/schema/never.d.ts +2 -2
- package/dist/schema/never.d.ts.map +1 -1
- package/dist/schema/never.js +1 -1
- package/dist/schema/never.js.map +1 -1
- package/dist/schema/null.d.ts +2 -3
- package/dist/schema/null.d.ts.map +1 -1
- package/dist/schema/null.js +1 -2
- package/dist/schema/null.js.map +1 -1
- package/dist/schema/nullable.d.ts +7 -0
- package/dist/schema/nullable.d.ts.map +1 -0
- package/dist/schema/nullable.js +19 -0
- package/dist/schema/nullable.js.map +1 -0
- package/dist/schema/object.d.ts +10 -44
- package/dist/schema/object.d.ts.map +1 -1
- package/dist/schema/object.js +10 -46
- package/dist/schema/object.js.map +1 -1
- package/dist/schema/optional.d.ts +7 -0
- package/dist/schema/optional.d.ts.map +1 -0
- package/dist/schema/optional.js +25 -0
- package/dist/schema/optional.js.map +1 -0
- package/dist/schema/params.d.ts +14 -19
- package/dist/schema/params.d.ts.map +1 -1
- package/dist/schema/params.js +10 -24
- package/dist/schema/params.js.map +1 -1
- package/dist/schema/payload.d.ts +4 -4
- package/dist/schema/payload.d.ts.map +1 -1
- package/dist/schema/payload.js.map +1 -1
- package/dist/schema/permission-set.d.ts +6 -6
- package/dist/schema/permission-set.d.ts.map +1 -1
- package/dist/schema/permission-set.js +1 -2
- package/dist/schema/permission-set.js.map +1 -1
- package/dist/schema/permission.d.ts +0 -1
- package/dist/schema/permission.d.ts.map +1 -1
- package/dist/schema/permission.js +0 -1
- package/dist/schema/permission.js.map +1 -1
- package/dist/schema/procedure.d.ts +8 -9
- package/dist/schema/procedure.d.ts.map +1 -1
- package/dist/schema/procedure.js +0 -1
- package/dist/schema/procedure.js.map +1 -1
- package/dist/schema/query.d.ts +7 -8
- package/dist/schema/query.d.ts.map +1 -1
- package/dist/schema/query.js +0 -1
- package/dist/schema/query.js.map +1 -1
- package/dist/schema/record.d.ts +34 -28
- package/dist/schema/record.d.ts.map +1 -1
- package/dist/schema/record.js +1 -2
- package/dist/schema/record.js.map +1 -1
- package/dist/schema/ref.d.ts +2 -3
- package/dist/schema/ref.d.ts.map +1 -1
- package/dist/schema/ref.js +1 -2
- package/dist/schema/ref.js.map +1 -1
- package/dist/schema/refine.d.ts +18 -0
- package/dist/schema/refine.d.ts.map +1 -0
- package/dist/schema/refine.js +33 -0
- package/dist/schema/refine.js.map +1 -0
- package/dist/schema/regexp.d.ts +7 -0
- package/dist/schema/regexp.d.ts.map +1 -0
- package/dist/schema/regexp.js +22 -0
- package/dist/schema/regexp.js.map +1 -0
- package/dist/schema/string.d.ts +4 -8
- package/dist/schema/string.d.ts.map +1 -1
- package/dist/schema/string.js +6 -3
- package/dist/schema/string.js.map +1 -1
- package/dist/schema/subscription.d.ts +7 -6
- package/dist/schema/subscription.d.ts.map +1 -1
- package/dist/schema/subscription.js.map +1 -1
- package/dist/schema/token.d.ts +2 -3
- package/dist/schema/token.d.ts.map +1 -1
- package/dist/schema/token.js +1 -2
- package/dist/schema/token.js.map +1 -1
- package/dist/schema/typed-object.d.ts +29 -27
- package/dist/schema/typed-object.d.ts.map +1 -1
- package/dist/schema/typed-object.js +1 -2
- package/dist/schema/typed-object.js.map +1 -1
- package/dist/schema/typed-ref.d.ts +2 -2
- package/dist/schema/typed-ref.d.ts.map +1 -1
- package/dist/schema/typed-ref.js +1 -1
- package/dist/schema/typed-ref.js.map +1 -1
- package/dist/schema/typed-union.d.ts +3 -4
- package/dist/schema/typed-union.d.ts.map +1 -1
- package/dist/schema/typed-union.js +3 -10
- package/dist/schema/typed-union.js.map +1 -1
- package/dist/schema/union.d.ts +2 -2
- package/dist/schema/union.d.ts.map +1 -1
- package/dist/schema/union.js +1 -1
- package/dist/schema/union.js.map +1 -1
- package/dist/schema/unknown-object.d.ts +2 -3
- package/dist/schema/unknown-object.d.ts.map +1 -1
- package/dist/schema/unknown-object.js +1 -2
- package/dist/schema/unknown-object.js.map +1 -1
- package/dist/schema/unknown.d.ts +2 -2
- package/dist/schema/unknown.d.ts.map +1 -1
- package/dist/schema/unknown.js +1 -1
- package/dist/schema/unknown.js.map +1 -1
- package/dist/schema.d.ts +4 -0
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +6 -1
- package/dist/schema.js.map +1 -1
- package/dist/util/array-agg.d.ts.map +1 -1
- package/dist/util/array-agg.js +1 -0
- package/dist/util/array-agg.js.map +1 -1
- package/dist/util/lazy-property.d.ts +2 -0
- package/dist/util/lazy-property.d.ts.map +1 -0
- package/dist/util/lazy-property.js +14 -0
- package/dist/util/lazy-property.js.map +1 -0
- package/dist/validation/schema.d.ts +24 -0
- package/dist/validation/schema.d.ts.map +1 -0
- package/dist/validation/schema.js +57 -0
- package/dist/validation/schema.js.map +1 -0
- package/dist/validation/validation-error.d.ts +3 -3
- package/dist/validation/validation-error.d.ts.map +1 -1
- package/dist/validation/validation-error.js +32 -4
- package/dist/validation/validation-error.js.map +1 -1
- package/dist/validation/validation-issue.d.ts +32 -24
- package/dist/validation/validation-issue.d.ts.map +1 -1
- package/dist/validation/validation-issue.js +136 -92
- package/dist/validation/validation-issue.js.map +1 -1
- package/dist/validation/validator.d.ts +20 -50
- package/dist/validation/validator.d.ts.map +1 -1
- package/dist/validation/validator.js +40 -134
- package/dist/validation/validator.js.map +1 -1
- package/dist/validation.d.ts +1 -0
- package/dist/validation.d.ts.map +1 -1
- package/dist/validation.js +1 -0
- package/dist/validation.js.map +1 -1
- package/package.json +8 -4
- package/src/core/$type.ts +7 -4
- package/src/core/record-key.ts +12 -5
- package/src/core/result.ts +6 -0
- package/src/core/string-format.ts +97 -61
- package/src/core/types.ts +12 -6
- package/src/external.ts +92 -70
- package/src/schema/_parameters.test.ts +416 -0
- package/src/schema/array.test.ts +237 -0
- package/src/schema/array.ts +17 -11
- package/src/schema/blob.test.ts +506 -0
- package/src/schema/blob.ts +3 -5
- package/src/schema/boolean.test.ts +116 -0
- package/src/schema/boolean.ts +5 -7
- package/src/schema/bytes.test.ts +226 -0
- package/src/schema/bytes.ts +4 -6
- package/src/schema/cid.test.ts +155 -0
- package/src/schema/cid.ts +14 -8
- package/src/schema/custom.test.ts +413 -0
- package/src/schema/custom.ts +10 -8
- package/src/schema/dict.test.ts +198 -0
- package/src/schema/dict.ts +6 -8
- package/src/schema/discriminated-union.test.ts +675 -0
- package/src/schema/discriminated-union.ts +68 -95
- package/src/schema/enum.test.ts +396 -0
- package/src/schema/enum.ts +12 -5
- package/src/schema/integer.test.ts +312 -0
- package/src/schema/integer.ts +5 -7
- package/src/schema/intersection.test.ts +32 -0
- package/src/schema/intersection.ts +37 -40
- package/src/schema/literal.test.ts +531 -0
- package/src/schema/literal.ts +12 -5
- package/src/schema/never.test.ts +174 -0
- package/src/schema/never.ts +3 -10
- package/src/schema/null.test.ts +79 -0
- package/src/schema/null.ts +3 -5
- package/src/schema/nullable.test.ts +480 -0
- package/src/schema/nullable.ts +23 -0
- package/src/schema/object.test.ts +47 -115
- package/src/schema/object.ts +19 -123
- package/src/schema/optional.test.ts +485 -0
- package/src/schema/optional.ts +31 -0
- package/src/schema/params.test.ts +582 -0
- package/src/schema/params.ts +37 -55
- package/src/schema/payload.test.ts +345 -0
- package/src/schema/payload.ts +5 -5
- package/src/schema/permission-set.test.ts +679 -0
- package/src/schema/permission-set.ts +6 -8
- package/src/schema/permission.test.ts +536 -0
- package/src/schema/permission.ts +0 -2
- package/src/schema/procedure.test.ts +443 -0
- package/src/schema/procedure.ts +11 -13
- package/src/schema/query.test.ts +408 -0
- package/src/schema/query.ts +9 -11
- package/src/schema/record.test.ts +694 -0
- package/src/schema/record.ts +38 -36
- package/src/schema/ref.test.ts +365 -0
- package/src/schema/ref.ts +8 -5
- package/src/schema/refine.test.ts +578 -0
- package/src/schema/refine.ts +85 -0
- package/src/schema/regexp.test.ts +580 -0
- package/src/schema/regexp.ts +22 -0
- package/src/schema/string.test.ts +612 -0
- package/src/schema/string.ts +11 -17
- package/src/schema/subscription.test.ts +689 -0
- package/src/schema/subscription.ts +13 -8
- package/src/schema/token.test.ts +428 -0
- package/src/schema/token.ts +3 -5
- package/src/schema/typed-object.test.ts +612 -0
- package/src/schema/typed-object.ts +23 -20
- package/src/schema/typed-ref.test.ts +823 -0
- package/src/schema/typed-ref.ts +10 -5
- package/src/schema/typed-union.test.ts +378 -0
- package/src/schema/typed-union.ts +6 -15
- package/src/schema/union.test.ts +200 -0
- package/src/schema/union.ts +5 -4
- package/src/schema/unknown-object.test.ts +592 -0
- package/src/schema/unknown-object.ts +3 -5
- package/src/schema/unknown.test.ts +312 -0
- package/src/schema/unknown.ts +3 -3
- package/src/schema.ts +7 -1
- package/src/util/array-agg.ts +1 -0
- package/src/util/lazy-property.ts +14 -0
- package/src/validation/schema.ts +92 -0
- package/src/validation/validation-error.ts +60 -9
- package/src/validation/validation-issue.ts +141 -144
- package/src/validation/validator.ts +67 -206
- package/src/validation.ts +1 -0
- package/tsconfig.build.json +12 -0
- package/tsconfig.json +7 -0
- package/tsconfig.tests.json +9 -0
package/dist/schema/bytes.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../src/schema/bytes.ts"],"names":[],"mappings":";;;AAAA,gDAAgD;AAChD,
|
|
1
|
+
{"version":3,"file":"bytes.js","sourceRoot":"","sources":["../../src/schema/bytes.ts"],"names":[],"mappings":";;;AAAA,gDAAgD;AAChD,oDAA6E;AAO7E,MAAa,WAAY,SAAQ,sBAAkB;IAC5B;IAArB,YAAqB,UAA8B,EAAE;QACnD,KAAK,EAAE,CAAA;QADY,YAAO,GAAP,OAAO,CAAyB;IAErD,CAAC;IAED,iBAAiB,CACf,KAAc,EACd,GAAqB;QAErB,kDAAkD;QAClD,MAAM,KAAK,GAAG,IAAA,uBAAY,EAAC,KAAK,CAAC,CAAA;QACjC,IAAI,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAC7C,CAAC;QAED,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QAClC,IAAI,SAAS,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;YAClD,OAAO,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;QACnE,CAAC;QAED,MAAM,EAAE,SAAS,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QAClC,IAAI,SAAS,IAAI,IAAI,IAAI,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC;YAClD,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,KAAK,CAAC,MAAM,CAAC,CAAA;QACjE,CAAC;QAED,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC3B,CAAC;CACF;AA3BD,kCA2BC","sourcesContent":["import { asUint8Array } from '@atproto/lex-data'\nimport { Schema, ValidationResult, ValidatorContext } from '../validation.js'\n\nexport type BytesSchemaOptions = {\n minLength?: number\n maxLength?: number\n}\n\nexport class BytesSchema extends Schema<Uint8Array> {\n constructor(readonly options: BytesSchemaOptions = {}) {\n super()\n }\n\n validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n ): ValidationResult<Uint8Array> {\n // Coerce different binary formats into Uint8Array\n const bytes = asUint8Array(input)\n if (!bytes) {\n return ctx.issueInvalidType(input, 'bytes')\n }\n\n const { minLength } = this.options\n if (minLength != null && bytes.length < minLength) {\n return ctx.issueTooSmall(bytes, 'bytes', minLength, bytes.length)\n }\n\n const { maxLength } = this.options\n if (maxLength != null && bytes.length > maxLength) {\n return ctx.issueTooBig(bytes, 'bytes', maxLength, bytes.length)\n }\n\n return ctx.success(bytes)\n }\n}\n"]}
|
package/dist/schema/cid.d.ts
CHANGED
|
@@ -1,13 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
3
|
-
export {
|
|
1
|
+
import { Cid } from '@atproto/lex-data';
|
|
2
|
+
import { Schema, ValidationResult, ValidatorContext } from '../validation.js';
|
|
3
|
+
export type { Cid };
|
|
4
4
|
export type CidSchemaOptions = {
|
|
5
|
+
/**
|
|
6
|
+
* In strict mode, only CID with the following properties are accepted:
|
|
7
|
+
* - version: 1
|
|
8
|
+
* - codec: raw binary (0x55) or DAG-CBOR (0x71)
|
|
9
|
+
* - hash function: SHA-256 (0x12)
|
|
10
|
+
*
|
|
11
|
+
* @default false
|
|
12
|
+
*/
|
|
5
13
|
strict?: boolean;
|
|
6
14
|
};
|
|
7
|
-
export declare class CidSchema extends
|
|
15
|
+
export declare class CidSchema extends Schema<Cid> {
|
|
8
16
|
readonly options: CidSchemaOptions;
|
|
9
|
-
readonly lexiconType: "cid-link";
|
|
10
17
|
constructor(options?: CidSchemaOptions);
|
|
11
|
-
validateInContext(input: unknown, ctx: ValidatorContext): ValidationResult<
|
|
18
|
+
validateInContext(input: unknown, ctx: ValidatorContext): ValidationResult<Cid>;
|
|
12
19
|
}
|
|
13
20
|
//# sourceMappingURL=cid.d.ts.map
|
package/dist/schema/cid.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cid.d.ts","sourceRoot":"","sources":["../../src/schema/cid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAS,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cid.d.ts","sourceRoot":"","sources":["../../src/schema/cid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAS,MAAM,mBAAmB,CAAA;AAC9C,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAE7E,YAAY,EAAE,GAAG,EAAE,CAAA;AAEnB,MAAM,MAAM,gBAAgB,GAAG;IAC7B;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;CACjB,CAAA;AAED,qBAAa,SAAU,SAAQ,MAAM,CAAC,GAAG,CAAC;IAC5B,QAAQ,CAAC,OAAO,EAAE,gBAAgB;gBAAzB,OAAO,GAAE,gBAAqB;IAInD,iBAAiB,CACf,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,GAAG,CAAC;CAOzB"}
|
package/dist/schema/cid.js
CHANGED
|
@@ -1,12 +1,10 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.CidSchema =
|
|
3
|
+
exports.CidSchema = void 0;
|
|
4
4
|
const lex_data_1 = require("@atproto/lex-data");
|
|
5
|
-
Object.defineProperty(exports, "CID", { enumerable: true, get: function () { return lex_data_1.CID; } });
|
|
6
5
|
const validation_js_1 = require("../validation.js");
|
|
7
|
-
class CidSchema extends validation_js_1.
|
|
6
|
+
class CidSchema extends validation_js_1.Schema {
|
|
8
7
|
options;
|
|
9
|
-
lexiconType = 'cid-link';
|
|
10
8
|
constructor(options = {}) {
|
|
11
9
|
super();
|
|
12
10
|
this.options = options;
|
package/dist/schema/cid.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cid.js","sourceRoot":"","sources":["../../src/schema/cid.ts"],"names":[],"mappings":";;;AAAA,gDAA8C;
|
|
1
|
+
{"version":3,"file":"cid.js","sourceRoot":"","sources":["../../src/schema/cid.ts"],"names":[],"mappings":";;;AAAA,gDAA8C;AAC9C,oDAA6E;AAgB7E,MAAa,SAAU,SAAQ,sBAAW;IACnB;IAArB,YAAqB,UAA4B,EAAE;QACjD,KAAK,EAAE,CAAA;QADY,YAAO,GAAP,OAAO,CAAuB;IAEnD,CAAC;IAED,iBAAiB,CACf,KAAc,EACd,GAAqB;QAErB,IAAI,CAAC,IAAA,gBAAK,EAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;YAChC,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QAC3C,CAAC;QAED,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC3B,CAAC;CACF;AAfD,8BAeC","sourcesContent":["import { Cid, isCid } from '@atproto/lex-data'\nimport { Schema, ValidationResult, ValidatorContext } from '../validation.js'\n\nexport type { Cid }\n\nexport type CidSchemaOptions = {\n /**\n * In strict mode, only CID with the following properties are accepted:\n * - version: 1\n * - codec: raw binary (0x55) or DAG-CBOR (0x71)\n * - hash function: SHA-256 (0x12)\n *\n * @default false\n */\n strict?: boolean\n}\n\nexport class CidSchema extends Schema<Cid> {\n constructor(readonly options: CidSchemaOptions = {}) {\n super()\n }\n\n validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n ): ValidationResult<Cid> {\n if (!isCid(input, this.options)) {\n return ctx.issueInvalidType(input, 'cid')\n }\n\n return ctx.success(input)\n }\n}\n"]}
|
package/dist/schema/custom.d.ts
CHANGED
|
@@ -1,11 +1,10 @@
|
|
|
1
|
-
import { PropertyKey } from '../validation
|
|
2
|
-
import { ContextualIssue, ValidationResult, Validator, ValidatorContext } from '../validation/validator.js';
|
|
1
|
+
import { Issue, PropertyKey, Schema, ValidationResult, ValidatorContext } from '../validation.js';
|
|
3
2
|
export type CustomAssertionContext = {
|
|
4
3
|
path: PropertyKey[];
|
|
5
|
-
addIssue(issue:
|
|
4
|
+
addIssue(issue: Issue): void;
|
|
6
5
|
};
|
|
7
6
|
export type CustomAssertion<T = any> = (this: null, input: unknown, ctx: CustomAssertionContext) => input is T;
|
|
8
|
-
export declare class CustomSchema<T = unknown> extends
|
|
7
|
+
export declare class CustomSchema<T = unknown> extends Schema<T> {
|
|
9
8
|
private readonly assertion;
|
|
10
9
|
private readonly message;
|
|
11
10
|
private readonly path?;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../src/schema/custom.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"custom.d.ts","sourceRoot":"","sources":["../../src/schema/custom.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EAEL,WAAW,EACX,MAAM,EACN,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AAEzB,MAAM,MAAM,sBAAsB,GAAG;IACnC,IAAI,EAAE,WAAW,EAAE,CAAA;IACnB,QAAQ,CAAC,KAAK,EAAE,KAAK,GAAG,IAAI,CAAA;CAC7B,CAAA;AAED,MAAM,MAAM,eAAe,CAAC,CAAC,GAAG,GAAG,IAAI,CACrC,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,sBAAsB,KACxB,KAAK,IAAI,CAAC,CAAA;AAEf,qBAAa,YAAY,CAAC,CAAC,GAAG,OAAO,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IAEpD,OAAO,CAAC,QAAQ,CAAC,SAAS;IAC1B,OAAO,CAAC,QAAQ,CAAC,OAAO;IACxB,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAFL,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,EAC7B,OAAO,EAAE,MAAM,EACf,IAAI,CAAC,GAAE,WAAW,GAAG,SAAS,WAAW,EAAE,aAAA;IAK9D,iBAAiB,CACf,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,CAAC,CAAC;CAKvB"}
|
package/dist/schema/custom.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.CustomSchema = void 0;
|
|
4
|
-
const
|
|
5
|
-
class CustomSchema extends
|
|
4
|
+
const validation_js_1 = require("../validation.js");
|
|
5
|
+
class CustomSchema extends validation_js_1.Schema {
|
|
6
6
|
assertion;
|
|
7
7
|
message;
|
|
8
8
|
path;
|
|
@@ -15,7 +15,8 @@ class CustomSchema extends validator_js_1.Validator {
|
|
|
15
15
|
validateInContext(input, ctx) {
|
|
16
16
|
if (this.assertion.call(null, input, ctx))
|
|
17
17
|
return ctx.success(input);
|
|
18
|
-
|
|
18
|
+
const path = ctx.concatPath(this.path);
|
|
19
|
+
return ctx.failure(new validation_js_1.IssueCustom(path, input, this.message));
|
|
19
20
|
}
|
|
20
21
|
}
|
|
21
22
|
exports.CustomSchema = CustomSchema;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"custom.js","sourceRoot":"","sources":["../../src/schema/custom.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"custom.js","sourceRoot":"","sources":["../../src/schema/custom.ts"],"names":[],"mappings":";;;AAAA,oDAOyB;AAazB,MAAa,YAA0B,SAAQ,sBAAS;IAEnC;IACA;IACA;IAHnB,YACmB,SAA6B,EAC7B,OAAe,EACf,IAA2C;QAE5D,KAAK,EAAE,CAAA;QAJU,cAAS,GAAT,SAAS,CAAoB;QAC7B,YAAO,GAAP,OAAO,CAAQ;QACf,SAAI,GAAJ,IAAI,CAAuC;IAG9D,CAAC;IAED,iBAAiB,CACf,KAAc,EACd,GAAqB;QAErB,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,KAAK,EAAE,GAAG,CAAC;YAAE,OAAO,GAAG,CAAC,OAAO,CAAC,KAAU,CAAC,CAAA;QACzE,MAAM,IAAI,GAAG,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACtC,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,2BAAW,CAAC,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC,CAAA;IAChE,CAAC;CACF;AAjBD,oCAiBC","sourcesContent":["import {\n Issue,\n IssueCustom,\n PropertyKey,\n Schema,\n ValidationResult,\n ValidatorContext,\n} from '../validation.js'\n\nexport type CustomAssertionContext = {\n path: PropertyKey[]\n addIssue(issue: Issue): void\n}\n\nexport type CustomAssertion<T = any> = (\n this: null,\n input: unknown,\n ctx: CustomAssertionContext,\n) => input is T\n\nexport class CustomSchema<T = unknown> extends Schema<T> {\n constructor(\n private readonly assertion: CustomAssertion<T>,\n private readonly message: string,\n private readonly path?: PropertyKey | readonly PropertyKey[],\n ) {\n super()\n }\n\n validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n ): ValidationResult<T> {\n if (this.assertion.call(null, input, ctx)) return ctx.success(input as T)\n const path = ctx.concatPath(this.path)\n return ctx.failure(new IssueCustom(path, input, this.message))\n }\n}\n"]}
|
package/dist/schema/dict.d.ts
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { Infer, ValidationResult, Validator, ValidatorContext } from '../validation.js';
|
|
2
|
-
export type DictSchemaOutput<KeySchema extends Validator
|
|
1
|
+
import { Infer, Schema, ValidationResult, Validator, ValidatorContext } from '../validation.js';
|
|
2
|
+
export type DictSchemaOutput<KeySchema extends Validator<string>, ValueSchema extends Validator> = Record<Infer<KeySchema>, Infer<ValueSchema>>;
|
|
3
3
|
/**
|
|
4
4
|
* @note There is no dictionary in Lexicon schemas. This is a custom extension
|
|
5
5
|
* to allow map-like objects when using the lex library programmatically (i.e.
|
|
6
6
|
* not code generated from a lexicon schema).
|
|
7
7
|
*/
|
|
8
|
-
export declare class DictSchema<const KeySchema extends Validator = any, const ValueSchema extends Validator = any> extends
|
|
8
|
+
export declare class DictSchema<const KeySchema extends Validator<string> = any, const ValueSchema extends Validator = any> extends Schema<DictSchemaOutput<KeySchema, ValueSchema>> {
|
|
9
9
|
readonly keySchema: KeySchema;
|
|
10
10
|
readonly valueSchema: ValueSchema;
|
|
11
11
|
constructor(keySchema: KeySchema, valueSchema: ValueSchema);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dict.d.ts","sourceRoot":"","sources":["../../src/schema/dict.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,EACL,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AAEzB,MAAM,MAAM,gBAAgB,CAC1B,SAAS,SAAS,SAAS,
|
|
1
|
+
{"version":3,"file":"dict.d.ts","sourceRoot":"","sources":["../../src/schema/dict.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,EACL,MAAM,EACN,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AAEzB,MAAM,MAAM,gBAAgB,CAC1B,SAAS,SAAS,SAAS,CAAC,MAAM,CAAC,EACnC,WAAW,SAAS,SAAS,IAC3B,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,CAAC,CAAA;AAEhD;;;;GAIG;AACH,qBAAa,UAAU,CACrB,KAAK,CAAC,SAAS,SAAS,SAAS,CAAC,MAAM,CAAC,GAAG,GAAG,EAC/C,KAAK,CAAC,WAAW,SAAS,SAAS,GAAG,GAAG,CACzC,SAAQ,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IAEtD,QAAQ,CAAC,SAAS,EAAE,SAAS;IAC7B,QAAQ,CAAC,WAAW,EAAE,WAAW;gBADxB,SAAS,EAAE,SAAS,EACpB,WAAW,EAAE,WAAW;IAKnC,iBAAiB,CACf,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,EACrB,OAAO,CAAC,EAAE;QAAE,WAAW,CAAC,EAAE;YAAE,GAAG,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;SAAE,CAAA;KAAE,GACtD,gBAAgB,CAAC,gBAAgB,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;CAgC9D"}
|
package/dist/schema/dict.js
CHANGED
|
@@ -8,7 +8,7 @@ const validation_js_1 = require("../validation.js");
|
|
|
8
8
|
* to allow map-like objects when using the lex library programmatically (i.e.
|
|
9
9
|
* not code generated from a lexicon schema).
|
|
10
10
|
*/
|
|
11
|
-
class DictSchema extends validation_js_1.
|
|
11
|
+
class DictSchema extends validation_js_1.Schema {
|
|
12
12
|
keySchema;
|
|
13
13
|
valueSchema;
|
|
14
14
|
constructor(keySchema, valueSchema) {
|
package/dist/schema/dict.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dict.js","sourceRoot":"","sources":["../../src/schema/dict.ts"],"names":[],"mappings":";;;AAAA,gDAAiD;AACjD,
|
|
1
|
+
{"version":3,"file":"dict.js","sourceRoot":"","sources":["../../src/schema/dict.ts"],"names":[],"mappings":";;;AAAA,gDAAiD;AACjD,oDAMyB;AAOzB;;;;GAIG;AACH,MAAa,UAGX,SAAQ,sBAAgD;IAE7C;IACA;IAFX,YACW,SAAoB,EACpB,WAAwB;QAEjC,KAAK,EAAE,CAAA;QAHE,cAAS,GAAT,SAAS,CAAW;QACpB,gBAAW,GAAX,WAAW,CAAa;IAGnC,CAAC;IAED,iBAAiB,CACf,KAAc,EACd,GAAqB,EACrB,OAAuD;QAEvD,IAAI,CAAC,IAAA,wBAAa,EAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAC5C,CAAC;QAED,IAAI,IAAyC,CAAA;QAE7C,KAAK,MAAM,GAAG,IAAI,KAAK,EAAE,CAAC;YACxB,IAAI,OAAO,EAAE,WAAW,EAAE,GAAG,CAAC,GAAG,CAAC;gBAAE,SAAQ;YAE5C,MAAM,SAAS,GAAG,GAAG,CAAC,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,CAAA;YACnD,IAAI,CAAC,SAAS,CAAC,OAAO;gBAAE,OAAO,SAAS,CAAA;YACxC,IAAI,SAAS,CAAC,KAAK,KAAK,GAAG,EAAE,CAAC;gBAC5B,mEAAmE;gBACnE,uEAAuE;gBACvE,6DAA6D;gBAC7D,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;YACzC,CAAC;YAED,MAAM,WAAW,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,WAAW,CAAC,CAAA;YACnE,IAAI,CAAC,WAAW,CAAC,OAAO;gBAAE,OAAO,WAAW,CAAA;YAE5C,IAAI,WAAW,CAAC,KAAK,KAAK,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBACrC,IAAI,KAAK,EAAE,GAAG,KAAK,EAAE,CAAA;gBACrB,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,KAAK,CAAA;YAC/B,CAAC;QACH,CAAC;QAED,OAAO,GAAG,CAAC,OAAO,CAChB,CAAC,IAAI,IAAI,KAAK,CAA6C,CAC5D,CAAA;IACH,CAAC;CACF;AA/CD,gCA+CC","sourcesContent":["import { isPlainObject } from '@atproto/lex-data'\nimport {\n Infer,\n Schema,\n ValidationResult,\n Validator,\n ValidatorContext,\n} from '../validation.js'\n\nexport type DictSchemaOutput<\n KeySchema extends Validator<string>,\n ValueSchema extends Validator,\n> = Record<Infer<KeySchema>, Infer<ValueSchema>>\n\n/**\n * @note There is no dictionary in Lexicon schemas. This is a custom extension\n * to allow map-like objects when using the lex library programmatically (i.e.\n * not code generated from a lexicon schema).\n */\nexport class DictSchema<\n const KeySchema extends Validator<string> = any,\n const ValueSchema extends Validator = any,\n> extends Schema<DictSchemaOutput<KeySchema, ValueSchema>> {\n constructor(\n readonly keySchema: KeySchema,\n readonly valueSchema: ValueSchema,\n ) {\n super()\n }\n\n validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n options?: { ignoredKeys?: { has(k: string): boolean } },\n ): ValidationResult<DictSchemaOutput<KeySchema, ValueSchema>> {\n if (!isPlainObject(input)) {\n return ctx.issueInvalidType(input, 'dict')\n }\n\n let copy: undefined | Record<string, unknown>\n\n for (const key in input) {\n if (options?.ignoredKeys?.has(key)) continue\n\n const keyResult = ctx.validate(key, this.keySchema)\n if (!keyResult.success) return keyResult\n if (keyResult.value !== key) {\n // We can't safely \"move\" the key to a different name in the output\n // object (because there may already be something there), so we issue a\n // \"required key\" error if the key validation changes the key\n return ctx.issueRequiredKey(input, key)\n }\n\n const valueResult = ctx.validateChild(input, key, this.valueSchema)\n if (!valueResult.success) return valueResult\n\n if (valueResult.value !== input[key]) {\n copy ??= { ...input }\n copy[key] = valueResult.value\n }\n }\n\n return ctx.success(\n (copy ?? input) as DictSchemaOutput<KeySchema, ValueSchema>,\n )\n }\n}\n"]}
|
|
@@ -1,34 +1,25 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import {
|
|
1
|
+
import { Infer, Schema, ValidationResult, Validator, ValidatorContext } from '../validation.js';
|
|
2
|
+
import { EnumSchema } from './enum.js';
|
|
3
|
+
import { LiteralSchema } from './literal.js';
|
|
3
4
|
import { ObjectSchema } from './object.js';
|
|
4
|
-
export type
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
}>;
|
|
9
|
-
export type DiscriminatedUnionSchemaVariants<Discriminator extends string> = readonly [
|
|
10
|
-
DiscriminatedUnionSchemaVariant<Discriminator>,
|
|
11
|
-
...DiscriminatedUnionSchemaVariant<Discriminator>[]
|
|
5
|
+
export type DiscriminatedUnionVariant<Discriminator extends string> = ObjectSchema<Record<Discriminator, EnumSchema | LiteralSchema>>;
|
|
6
|
+
export type DiscriminatedUnionVariants<Discriminator extends string> = readonly [
|
|
7
|
+
DiscriminatedUnionVariant<Discriminator>,
|
|
8
|
+
...DiscriminatedUnionVariant<Discriminator>[]
|
|
12
9
|
];
|
|
13
|
-
export type DiscriminatedUnionSchemaOutput<
|
|
14
|
-
|
|
15
|
-
...infer Rest extends Validator[]
|
|
16
|
-
] ? V | DiscriminatedUnionSchemaOutput<Rest> : never;
|
|
10
|
+
export type DiscriminatedUnionSchemaOutput<Variants extends readonly Validator[]> = Variants extends readonly [
|
|
11
|
+
infer V extends Validator,
|
|
12
|
+
...infer Rest extends readonly Validator[]
|
|
13
|
+
] ? Infer<V> | DiscriminatedUnionSchemaOutput<Rest> : never;
|
|
17
14
|
/**
|
|
18
15
|
* @note There is no discriminated union in Lexicon schemas. This is a custom
|
|
19
16
|
* extension to allow optimized validation of union of objects when using the
|
|
20
17
|
* lex library programmatically (i.e. not code generated from a lexicon schema).
|
|
21
18
|
*/
|
|
22
|
-
export declare class DiscriminatedUnionSchema<const Discriminator extends string = any, const
|
|
19
|
+
export declare class DiscriminatedUnionSchema<const Discriminator extends string = any, const Variants extends DiscriminatedUnionVariants<Discriminator> = any> extends Schema<DiscriminatedUnionSchemaOutput<Variants>> {
|
|
23
20
|
readonly discriminator: Discriminator;
|
|
24
|
-
readonly
|
|
25
|
-
constructor(discriminator: Discriminator, variants:
|
|
26
|
-
|
|
27
|
-
* If all variants have a literal or enum for the discriminator property,
|
|
28
|
-
* and there are no overlapping values, returns a map of discriminator values
|
|
29
|
-
* to variants. Otherwise, returns null.
|
|
30
|
-
*/
|
|
31
|
-
protected get variantsMap(): Map<unknown, DiscriminatedUnionSchemaVariant<Discriminator>> | null;
|
|
32
|
-
validateInContext(input: unknown, ctx: ValidatorContext): ValidationResult<DiscriminatedUnionSchemaOutput<Options>>;
|
|
21
|
+
readonly variantsMap: Map<unknown, DiscriminatedUnionVariant<Discriminator>>;
|
|
22
|
+
constructor(discriminator: Discriminator, variants: Variants);
|
|
23
|
+
validateInContext(input: unknown, ctx: ValidatorContext): ValidationResult<DiscriminatedUnionSchemaOutput<Variants>>;
|
|
33
24
|
}
|
|
34
25
|
//# sourceMappingURL=discriminated-union.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discriminated-union.d.ts","sourceRoot":"","sources":["../../src/schema/discriminated-union.ts"],"names":[],"mappings":"AACA,OAAO,
|
|
1
|
+
{"version":3,"file":"discriminated-union.d.ts","sourceRoot":"","sources":["../../src/schema/discriminated-union.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,EACL,MAAM,EACN,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C,MAAM,MAAM,yBAAyB,CAAC,aAAa,SAAS,MAAM,IAChE,YAAY,CAAC,MAAM,CAAC,aAAa,EAAE,UAAU,GAAG,aAAa,CAAC,CAAC,CAAA;AAEjE,MAAM,MAAM,0BAA0B,CAAC,aAAa,SAAS,MAAM,IACjE,SAAS;IACP,yBAAyB,CAAC,aAAa,CAAC;IACxC,GAAG,yBAAyB,CAAC,aAAa,CAAC,EAAE;CAC9C,CAAA;AAEH,MAAM,MAAM,8BAA8B,CACxC,QAAQ,SAAS,SAAS,SAAS,EAAE,IACnC,QAAQ,SAAS,SAAS;IAC5B,MAAM,CAAC,SAAS,SAAS;IACzB,GAAG,MAAM,IAAI,SAAS,SAAS,SAAS,EAAE;CAC3C,GACG,KAAK,CAAC,CAAC,CAAC,GAAG,8BAA8B,CAAC,IAAI,CAAC,GAC/C,KAAK,CAAA;AAET;;;;GAIG;AACH,qBAAa,wBAAwB,CACnC,KAAK,CAAC,aAAa,SAAS,MAAM,GAAG,GAAG,EACxC,KAAK,CAAC,QAAQ,SAAS,0BAA0B,CAAC,aAAa,CAAC,GAAG,GAAG,CACtE,SAAQ,MAAM,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC;IAItD,QAAQ,CAAC,aAAa,EAAE,aAAa;IAHvC,QAAQ,CAAC,WAAW,EAAE,GAAG,CAAC,OAAO,EAAE,yBAAyB,CAAC,aAAa,CAAC,CAAC,CAAA;gBAGjE,aAAa,EAAE,aAAa,EACrC,QAAQ,EAAE,QAAQ;IAUpB,iBAAiB,CACf,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,8BAA8B,CAAC,QAAQ,CAAC,CAAC;CAwB9D"}
|
|
@@ -10,84 +10,60 @@ const literal_js_1 = require("./literal.js");
|
|
|
10
10
|
* extension to allow optimized validation of union of objects when using the
|
|
11
11
|
* lex library programmatically (i.e. not code generated from a lexicon schema).
|
|
12
12
|
*/
|
|
13
|
-
class DiscriminatedUnionSchema extends validation_js_1.
|
|
13
|
+
class DiscriminatedUnionSchema extends validation_js_1.Schema {
|
|
14
14
|
discriminator;
|
|
15
|
-
|
|
15
|
+
variantsMap;
|
|
16
16
|
constructor(discriminator, variants) {
|
|
17
17
|
super();
|
|
18
18
|
this.discriminator = discriminator;
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
* and there are no overlapping values, returns a map of discriminator values
|
|
24
|
-
* to variants. Otherwise, returns null.
|
|
25
|
-
*/
|
|
26
|
-
get variantsMap() {
|
|
27
|
-
const map = new Map();
|
|
28
|
-
for (const variant of this.variants) {
|
|
29
|
-
const schema = variant.validators[this.discriminator];
|
|
30
|
-
if (schema instanceof literal_js_1.LiteralSchema) {
|
|
31
|
-
if (map.has(schema.value))
|
|
32
|
-
return null; // overlapping value
|
|
33
|
-
map.set(schema.value, variant);
|
|
34
|
-
}
|
|
35
|
-
else if (schema instanceof enum_js_1.EnumSchema) {
|
|
36
|
-
for (const val of schema.values) {
|
|
37
|
-
if (map.has(val))
|
|
38
|
-
return null; // overlapping value
|
|
39
|
-
map.set(val, variant);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
else {
|
|
43
|
-
return null; // not a literal or enum
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
// Cache the map on the instance (to avoid re-computing)
|
|
47
|
-
Object.defineProperty(this, 'variantsMap', {
|
|
48
|
-
value: map,
|
|
49
|
-
writable: false,
|
|
50
|
-
enumerable: false,
|
|
51
|
-
configurable: true,
|
|
52
|
-
});
|
|
53
|
-
return map;
|
|
19
|
+
// Although we usually try to avoid initialization work in constructors,
|
|
20
|
+
// here it is necessary to ensure that invalid discriminated throw from the
|
|
21
|
+
// place of construction, rather than later during validation.
|
|
22
|
+
this.variantsMap = buildVariantsMap(discriminator, variants);
|
|
54
23
|
}
|
|
55
24
|
validateInContext(input, ctx) {
|
|
56
25
|
if (!(0, lex_data_1.isPlainObject)(input)) {
|
|
57
26
|
return ctx.issueInvalidType(input, 'object');
|
|
58
27
|
}
|
|
59
|
-
|
|
60
|
-
|
|
28
|
+
const { discriminator } = this;
|
|
29
|
+
if (!Object.hasOwn(input, discriminator)) {
|
|
30
|
+
return ctx.issueRequiredKey(input, discriminator);
|
|
61
31
|
}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
if (this.variantsMap) {
|
|
66
|
-
const variant = this.variantsMap.get(input[this.discriminator]);
|
|
67
|
-
if (!variant) {
|
|
68
|
-
return ctx.issueInvalidPropertyValue(input, this.discriminator, [
|
|
69
|
-
...this.variantsMap.keys(),
|
|
70
|
-
]);
|
|
71
|
-
}
|
|
32
|
+
const discriminatorValue = input[discriminator];
|
|
33
|
+
const variant = this.variantsMap.get(discriminatorValue);
|
|
34
|
+
if (variant) {
|
|
72
35
|
return ctx.validate(input, variant);
|
|
73
36
|
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
37
|
+
return ctx.issueInvalidPropertyValue(input, discriminator, [
|
|
38
|
+
...this.variantsMap.keys(),
|
|
39
|
+
]);
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
exports.DiscriminatedUnionSchema = DiscriminatedUnionSchema;
|
|
43
|
+
function buildVariantsMap(discriminator, variants) {
|
|
44
|
+
const variantsMap = new Map();
|
|
45
|
+
for (const variant of variants) {
|
|
46
|
+
const schema = variant.shape[discriminator];
|
|
47
|
+
if (schema instanceof literal_js_1.LiteralSchema) {
|
|
48
|
+
if (variantsMap.has(schema.value)) {
|
|
49
|
+
throw new TypeError(`Overlapping discriminator value: ${schema.value}`);
|
|
50
|
+
}
|
|
51
|
+
variantsMap.set(schema.value, variant);
|
|
52
|
+
}
|
|
53
|
+
else if (schema instanceof enum_js_1.EnumSchema) {
|
|
54
|
+
for (const val of schema.values) {
|
|
55
|
+
if (variantsMap.has(val)) {
|
|
56
|
+
throw new TypeError(`Overlapping discriminator value: ${val}`);
|
|
57
|
+
}
|
|
58
|
+
variantsMap.set(val, variant);
|
|
83
59
|
}
|
|
84
|
-
return ctx.validate(input, variant);
|
|
85
60
|
}
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
61
|
+
else {
|
|
62
|
+
// Only enumerable discriminator schemas are supported
|
|
63
|
+
// Should never happen if types are used correctly
|
|
64
|
+
throw new TypeError(`Discriminator schema must be a LiteralSchema or EnumSchema`);
|
|
65
|
+
}
|
|
90
66
|
}
|
|
67
|
+
return variantsMap;
|
|
91
68
|
}
|
|
92
|
-
exports.DiscriminatedUnionSchema = DiscriminatedUnionSchema;
|
|
93
69
|
//# sourceMappingURL=discriminated-union.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"discriminated-union.js","sourceRoot":"","sources":["../../src/schema/discriminated-union.ts"],"names":[],"mappings":";;;AAAA,gDAAiD;
|
|
1
|
+
{"version":3,"file":"discriminated-union.js","sourceRoot":"","sources":["../../src/schema/discriminated-union.ts"],"names":[],"mappings":";;;AAAA,gDAAiD;AACjD,oDAMyB;AACzB,uCAAsC;AACtC,6CAA4C;AAqB5C;;;;GAIG;AACH,MAAa,wBAGX,SAAQ,sBAAgD;IAI7C;IAHF,WAAW,CAAwD;IAE5E,YACW,aAA4B,EACrC,QAAkB;QAElB,KAAK,EAAE,CAAA;QAHE,kBAAa,GAAb,aAAa,CAAe;QAKrC,wEAAwE;QACxE,2EAA2E;QAC3E,8DAA8D;QAC9D,IAAI,CAAC,WAAW,GAAG,gBAAgB,CAAC,aAAa,EAAE,QAAQ,CAAC,CAAA;IAC9D,CAAC;IAED,iBAAiB,CACf,KAAc,EACd,GAAqB;QAErB,IAAI,CAAC,IAAA,wBAAa,EAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAA;QAC9C,CAAC;QAED,MAAM,EAAE,aAAa,EAAE,GAAG,IAAI,CAAA;QAE9B,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC;YACzC,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,EAAE,aAAa,CAAC,CAAA;QACnD,CAAC;QAED,MAAM,kBAAkB,GAAG,KAAK,CAAC,aAAa,CAAC,CAAA;QAE/C,MAAM,OAAO,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAA;QACxD,IAAI,OAAO,EAAE,CAAC;YACZ,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAEjC,CAAA;QACH,CAAC;QAED,OAAO,GAAG,CAAC,yBAAyB,CAAC,KAAK,EAAE,aAAa,EAAE;YACzD,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,EAAE;SAC3B,CAAC,CAAA;IACJ,CAAC;CACF;AA7CD,4DA6CC;AAED,SAAS,gBAAgB,CACvB,aAA4B,EAC5B,QAAmD;IAEnD,MAAM,WAAW,GAAG,IAAI,GAAG,EAGxB,CAAA;IAEH,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,aAAa,CAAC,CAAA;QAC3C,IAAI,MAAM,YAAY,0BAAa,EAAE,CAAC;YACpC,IAAI,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;gBAClC,MAAM,IAAI,SAAS,CAAC,oCAAoC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;YACzE,CAAC;YACD,WAAW,CAAC,GAAG,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QACxC,CAAC;aAAM,IAAI,MAAM,YAAY,oBAAU,EAAE,CAAC;YACxC,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;gBAChC,IAAI,WAAW,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;oBACzB,MAAM,IAAI,SAAS,CAAC,oCAAoC,GAAG,EAAE,CAAC,CAAA;gBAChE,CAAC;gBACD,WAAW,CAAC,GAAG,CAAC,GAAG,EAAE,OAAO,CAAC,CAAA;YAC/B,CAAC;QACH,CAAC;aAAM,CAAC;YACN,sDAAsD;YAEtD,kDAAkD;YAClD,MAAM,IAAI,SAAS,CACjB,4DAA4D,CAC7D,CAAA;QACH,CAAC;IACH,CAAC;IAED,OAAO,WAAW,CAAA;AACpB,CAAC","sourcesContent":["import { isPlainObject } from '@atproto/lex-data'\nimport {\n Infer,\n Schema,\n ValidationResult,\n Validator,\n ValidatorContext,\n} from '../validation.js'\nimport { EnumSchema } from './enum.js'\nimport { LiteralSchema } from './literal.js'\nimport { ObjectSchema } from './object.js'\n\nexport type DiscriminatedUnionVariant<Discriminator extends string> =\n ObjectSchema<Record<Discriminator, EnumSchema | LiteralSchema>>\n\nexport type DiscriminatedUnionVariants<Discriminator extends string> =\n readonly [\n DiscriminatedUnionVariant<Discriminator>,\n ...DiscriminatedUnionVariant<Discriminator>[],\n ]\n\nexport type DiscriminatedUnionSchemaOutput<\n Variants extends readonly Validator[],\n> = Variants extends readonly [\n infer V extends Validator,\n ...infer Rest extends readonly Validator[],\n]\n ? Infer<V> | DiscriminatedUnionSchemaOutput<Rest>\n : never\n\n/**\n * @note There is no discriminated union in Lexicon schemas. This is a custom\n * extension to allow optimized validation of union of objects when using the\n * lex library programmatically (i.e. not code generated from a lexicon schema).\n */\nexport class DiscriminatedUnionSchema<\n const Discriminator extends string = any,\n const Variants extends DiscriminatedUnionVariants<Discriminator> = any,\n> extends Schema<DiscriminatedUnionSchemaOutput<Variants>> {\n readonly variantsMap: Map<unknown, DiscriminatedUnionVariant<Discriminator>>\n\n constructor(\n readonly discriminator: Discriminator,\n variants: Variants,\n ) {\n super()\n\n // Although we usually try to avoid initialization work in constructors,\n // here it is necessary to ensure that invalid discriminated throw from the\n // place of construction, rather than later during validation.\n this.variantsMap = buildVariantsMap(discriminator, variants)\n }\n\n validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n ): ValidationResult<DiscriminatedUnionSchemaOutput<Variants>> {\n if (!isPlainObject(input)) {\n return ctx.issueInvalidType(input, 'object')\n }\n\n const { discriminator } = this\n\n if (!Object.hasOwn(input, discriminator)) {\n return ctx.issueRequiredKey(input, discriminator)\n }\n\n const discriminatorValue = input[discriminator]\n\n const variant = this.variantsMap.get(discriminatorValue)\n if (variant) {\n return ctx.validate(input, variant) as ValidationResult<\n DiscriminatedUnionSchemaOutput<Variants>\n >\n }\n\n return ctx.issueInvalidPropertyValue(input, discriminator, [\n ...this.variantsMap.keys(),\n ])\n }\n}\n\nfunction buildVariantsMap<Discriminator extends string>(\n discriminator: Discriminator,\n variants: DiscriminatedUnionVariants<Discriminator>,\n) {\n const variantsMap = new Map<\n unknown,\n DiscriminatedUnionVariant<Discriminator>\n >()\n\n for (const variant of variants) {\n const schema = variant.shape[discriminator]\n if (schema instanceof LiteralSchema) {\n if (variantsMap.has(schema.value)) {\n throw new TypeError(`Overlapping discriminator value: ${schema.value}`)\n }\n variantsMap.set(schema.value, variant)\n } else if (schema instanceof EnumSchema) {\n for (const val of schema.values) {\n if (variantsMap.has(val)) {\n throw new TypeError(`Overlapping discriminator value: ${val}`)\n }\n variantsMap.set(val, variant)\n }\n } else {\n // Only enumerable discriminator schemas are supported\n\n // Should never happen if types are used correctly\n throw new TypeError(\n `Discriminator schema must be a LiteralSchema or EnumSchema`,\n )\n }\n }\n\n return variantsMap\n}\n"]}
|
package/dist/schema/enum.d.ts
CHANGED
|
@@ -1,7 +1,11 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export
|
|
1
|
+
import { Schema, ValidationResult, ValidatorContext } from '../validation.js';
|
|
2
|
+
export type EnumSchemaOptions<T extends null | string | number | boolean> = {
|
|
3
|
+
default?: T;
|
|
4
|
+
};
|
|
5
|
+
export declare class EnumSchema<Output extends null | string | number | boolean = any> extends Schema<Output> {
|
|
3
6
|
readonly values: readonly Output[];
|
|
4
|
-
|
|
5
|
-
|
|
7
|
+
readonly options?: EnumSchemaOptions<Output> | undefined;
|
|
8
|
+
constructor(values: readonly Output[], options?: EnumSchemaOptions<Output> | undefined);
|
|
9
|
+
validateInContext(input: unknown | undefined, ctx: ValidatorContext): ValidationResult<Output>;
|
|
6
10
|
}
|
|
7
11
|
//# sourceMappingURL=enum.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../../src/schema/enum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"enum.d.ts","sourceRoot":"","sources":["../../src/schema/enum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAE7E,MAAM,MAAM,iBAAiB,CAAC,CAAC,SAAS,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,IAAI;IAC1E,OAAO,CAAC,EAAE,CAAC,CAAA;CACZ,CAAA;AAED,qBAAa,UAAU,CACrB,MAAM,SAAS,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,GAAG,CACrD,SAAQ,MAAM,CAAC,MAAM,CAAC;IAEpB,QAAQ,CAAC,MAAM,EAAE,SAAS,MAAM,EAAE;IAClC,QAAQ,CAAC,OAAO,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC;gBADnC,MAAM,EAAE,SAAS,MAAM,EAAE,EACzB,OAAO,CAAC,EAAE,iBAAiB,CAAC,MAAM,CAAC,YAAA;IAK9C,iBAAiB,CACf,KAAK,EAAE,OAAO,YAAwB,EACtC,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,MAAM,CAAC;CAO5B"}
|
package/dist/schema/enum.js
CHANGED
|
@@ -2,13 +2,15 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.EnumSchema = void 0;
|
|
4
4
|
const validation_js_1 = require("../validation.js");
|
|
5
|
-
class EnumSchema extends validation_js_1.
|
|
5
|
+
class EnumSchema extends validation_js_1.Schema {
|
|
6
6
|
values;
|
|
7
|
-
|
|
7
|
+
options;
|
|
8
|
+
constructor(values, options) {
|
|
8
9
|
super();
|
|
9
10
|
this.values = values;
|
|
11
|
+
this.options = options;
|
|
10
12
|
}
|
|
11
|
-
validateInContext(input, ctx) {
|
|
13
|
+
validateInContext(input = this.options?.default, ctx) {
|
|
12
14
|
if (!this.values.includes(input)) {
|
|
13
15
|
return ctx.issueInvalidValue(input, this.values);
|
|
14
16
|
}
|
package/dist/schema/enum.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"enum.js","sourceRoot":"","sources":["../../src/schema/enum.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"enum.js","sourceRoot":"","sources":["../../src/schema/enum.ts"],"names":[],"mappings":";;;AAAA,oDAA6E;AAM7E,MAAa,UAEX,SAAQ,sBAAc;IAEX;IACA;IAFX,YACW,MAAyB,EACzB,OAAmC;QAE5C,KAAK,EAAE,CAAA;QAHE,WAAM,GAAN,MAAM,CAAmB;QACzB,YAAO,GAAP,OAAO,CAA4B;IAG9C,CAAC;IAED,iBAAiB,CACf,QAAiB,IAAI,CAAC,OAAO,EAAE,OAAO,EACtC,GAAqB;QAErB,IAAI,CAAE,IAAI,CAAC,MAA6B,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;YACzD,OAAO,GAAG,CAAC,iBAAiB,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAClD,CAAC;QAED,OAAO,GAAG,CAAC,OAAO,CAAC,KAAe,CAAC,CAAA;IACrC,CAAC;CACF;AApBD,gCAoBC","sourcesContent":["import { Schema, ValidationResult, ValidatorContext } from '../validation.js'\n\nexport type EnumSchemaOptions<T extends null | string | number | boolean> = {\n default?: T\n}\n\nexport class EnumSchema<\n Output extends null | string | number | boolean = any,\n> extends Schema<Output> {\n constructor(\n readonly values: readonly Output[],\n readonly options?: EnumSchemaOptions<Output>,\n ) {\n super()\n }\n\n validateInContext(\n input: unknown = this.options?.default,\n ctx: ValidatorContext,\n ): ValidationResult<Output> {\n if (!(this.values as readonly unknown[]).includes(input)) {\n return ctx.issueInvalidValue(input, this.values)\n }\n\n return ctx.success(input as Output)\n }\n}\n"]}
|
package/dist/schema/integer.d.ts
CHANGED
|
@@ -1,13 +1,12 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { Schema, ValidationResult, ValidatorContext } from '../validation.js';
|
|
2
2
|
export type IntegerSchemaOptions = {
|
|
3
3
|
default?: number;
|
|
4
4
|
minimum?: number;
|
|
5
5
|
maximum?: number;
|
|
6
6
|
};
|
|
7
|
-
export declare class IntegerSchema extends
|
|
7
|
+
export declare class IntegerSchema extends Schema<number> {
|
|
8
8
|
readonly options: IntegerSchemaOptions;
|
|
9
|
-
|
|
10
|
-
constructor(options: IntegerSchemaOptions);
|
|
9
|
+
constructor(options?: IntegerSchemaOptions);
|
|
11
10
|
validateInContext(input: unknown | undefined, ctx: ValidatorContext): ValidationResult<number>;
|
|
12
11
|
}
|
|
13
12
|
//# sourceMappingURL=integer.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integer.d.ts","sourceRoot":"","sources":["../../src/schema/integer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"integer.d.ts","sourceRoot":"","sources":["../../src/schema/integer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAE7E,MAAM,MAAM,oBAAoB,GAAG;IACjC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,qBAAa,aAAc,SAAQ,MAAM,CAAC,MAAM,CAAC;IACnC,QAAQ,CAAC,OAAO,EAAE,oBAAoB;gBAA7B,OAAO,GAAE,oBAAyB;IAIvD,iBAAiB,CACf,KAAK,EAAE,OAAO,YAAwB,EACtC,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,MAAM,CAAC;CAe5B"}
|
package/dist/schema/integer.js
CHANGED
|
@@ -2,14 +2,13 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.IntegerSchema = void 0;
|
|
4
4
|
const validation_js_1 = require("../validation.js");
|
|
5
|
-
class IntegerSchema extends validation_js_1.
|
|
5
|
+
class IntegerSchema extends validation_js_1.Schema {
|
|
6
6
|
options;
|
|
7
|
-
|
|
8
|
-
constructor(options) {
|
|
7
|
+
constructor(options = {}) {
|
|
9
8
|
super();
|
|
10
9
|
this.options = options;
|
|
11
10
|
}
|
|
12
|
-
validateInContext(input = this.options
|
|
11
|
+
validateInContext(input = this.options?.default, ctx) {
|
|
13
12
|
if (!isInteger(input)) {
|
|
14
13
|
return ctx.issueInvalidType(input, 'integer');
|
|
15
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"integer.js","sourceRoot":"","sources":["../../src/schema/integer.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"integer.js","sourceRoot":"","sources":["../../src/schema/integer.ts"],"names":[],"mappings":";;;AAAA,oDAA6E;AAQ7E,MAAa,aAAc,SAAQ,sBAAc;IAC1B;IAArB,YAAqB,UAAgC,EAAE;QACrD,KAAK,EAAE,CAAA;QADY,YAAO,GAAP,OAAO,CAA2B;IAEvD,CAAC;IAED,iBAAiB,CACf,QAAiB,IAAI,CAAC,OAAO,EAAE,OAAO,EACtC,GAAqB;QAErB,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,EAAE,CAAC;YACtB,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAA;QAC/C,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACvE,OAAO,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACzE,CAAC;QAED,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,CAAC;YACvE,OAAO,GAAG,CAAC,WAAW,CAAC,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,KAAK,CAAC,CAAA;QACvE,CAAC;QAED,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,CAAC,CAAA;IAC3B,CAAC;CACF;AAvBD,sCAuBC;AAED;;GAEG;AACH,SAAS,SAAS,CAAC,KAAc;IAC/B,OAAO,MAAM,CAAC,SAAS,CAAC,KAAK,CAAC,CAAA;AAChC,CAAC","sourcesContent":["import { Schema, ValidationResult, ValidatorContext } from '../validation.js'\n\nexport type IntegerSchemaOptions = {\n default?: number\n minimum?: number\n maximum?: number\n}\n\nexport class IntegerSchema extends Schema<number> {\n constructor(readonly options: IntegerSchemaOptions = {}) {\n super()\n }\n\n validateInContext(\n input: unknown = this.options?.default,\n ctx: ValidatorContext,\n ): ValidationResult<number> {\n if (!isInteger(input)) {\n return ctx.issueInvalidType(input, 'integer')\n }\n\n if (this.options.minimum !== undefined && input < this.options.minimum) {\n return ctx.issueTooSmall(input, 'integer', this.options.minimum, input)\n }\n\n if (this.options.maximum !== undefined && input > this.options.maximum) {\n return ctx.issueTooBig(input, 'integer', this.options.maximum, input)\n }\n\n return ctx.success(input)\n }\n}\n\n/**\n * Simple wrapper around {@link Number.isInteger} that acts as a type guard.\n */\nfunction isInteger(input: unknown): input is number {\n return Number.isInteger(input)\n}\n"]}
|
|
@@ -1,16 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
1
|
+
import { Simplify } from '../core.js';
|
|
2
|
+
import { Infer, Schema, ValidationResult, ValidatorContext } from '../validation.js';
|
|
3
|
+
import { DictSchema } from './dict.js';
|
|
4
|
+
import { ObjectSchema } from './object.js';
|
|
5
|
+
/**
|
|
6
|
+
* Allows to more accurately represent the intersection of two object types
|
|
7
|
+
* where both types may share some keys, and one of them uses an index
|
|
8
|
+
* signature.
|
|
9
|
+
*
|
|
10
|
+
* @see {@link https://www.typescriptlang.org/play/?#code/C4TwDgpgBAglC8UDeUBmB7dAuKByARgIYBOuUAvlAGTJQDaA+lAJYB2UAzsMWwOYC6OVgFcAtvgjEKAKGkATCAGMANiWiL0rLlEI4YsjVuBQA1hBA4uPVrwRQARBnT2Dm7QDdCy4dESE6ZiD8UAD0IVAi4pJQABQcABbowspyUBIORMT2AJSyEAAeYOjExqCQUACSrMCSHErAzJoAPNJQsFAFNaxyHFAASkrFck1WfAA0UMKsJqzoAO6sAHxjrVAAQh35XT39g8TDozYTUzPzSyuLdqtwVKttMYHoqO00j88bnRDdvawQ7pJ3NpQAD860BbRwSHBQLadAA0ix2G91oJ1vDggAfWABcxPF5QOH8aFtci5aRlaAwVDMfIQVKIKo1Yh1RQNZq0Jw4AgkMjkCYoRiIzjcPioyISKTkRayBQqNRQQzaQgAMRpdL01NpclcRignm8EFVWrsKrVchxQVC4XF0SxmSAA Playground link}
|
|
11
|
+
*/
|
|
12
|
+
export type Intersect<A, B> = B[keyof B] extends never ? A : keyof A & keyof B extends never ? // If A and B don't overlap, just return A & B
|
|
13
|
+
A & B : // Otherwise, properly represent the fact that accessing using an
|
|
14
|
+
A & {
|
|
15
|
+
[K in keyof B]: B[K] | A[keyof A & K];
|
|
16
|
+
};
|
|
17
|
+
export type IntersectionSchemaOutput<Left extends ObjectSchema, Right extends DictSchema> = Simplify<Intersect<Infer<Left>, Infer<Right>>>;
|
|
18
|
+
export declare class IntersectionSchema<const Left extends ObjectSchema = any, const Right extends DictSchema = any> extends Schema<IntersectionSchemaOutput<Left, Right>> {
|
|
19
|
+
protected readonly left: Left;
|
|
20
|
+
protected readonly right: Right;
|
|
21
|
+
constructor(left: Left, right: Right);
|
|
22
|
+
validateInContext(input: unknown, ctx: ValidatorContext): ValidationResult<IntersectionSchemaOutput<Left, Right>>;
|
|
15
23
|
}
|
|
16
24
|
//# sourceMappingURL=intersection.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"intersection.d.ts","sourceRoot":"","sources":["../../src/schema/intersection.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,gBAAgB,EAChB,
|
|
1
|
+
{"version":3,"file":"intersection.d.ts","sourceRoot":"","sources":["../../src/schema/intersection.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AACrC,OAAO,EACL,KAAK,EACL,MAAM,EACN,gBAAgB,EAChB,gBAAgB,EACjB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAE1C;;;;;;GAMG;AACH,MAAM,MAAM,SAAS,CAAC,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,SAAS,KAAK,GAClD,CAAC,GACD,MAAM,CAAC,GAAG,MAAM,CAAC,SAAS,KAAK,GAE7B,AADA,8CAA8C;AAC9C,CAAC,GAAG,CAAC,GAGL,AAFA,iEAAiE;AAEjE,CAAC,GAAG;KAAG,CAAC,IAAI,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;CAAE,CAAA;AAEnD,MAAM,MAAM,wBAAwB,CAClC,IAAI,SAAS,YAAY,EACzB,KAAK,SAAS,UAAU,IACtB,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAElD,qBAAa,kBAAkB,CAC7B,KAAK,CAAC,IAAI,SAAS,YAAY,GAAG,GAAG,EACrC,KAAK,CAAC,KAAK,SAAS,UAAU,GAAG,GAAG,CACpC,SAAQ,MAAM,CAAC,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IAEnD,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI;IAC7B,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK;gBADZ,IAAI,EAAE,IAAI,EACV,KAAK,EAAE,KAAK;IAKjC,iBAAiB,CACf,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,wBAAwB,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;CAQ3D"}
|