@atproto/lex-schema 0.0.0 → 0.0.2
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/LICENSE.txt +7 -0
- package/dist/schema/literal.d.ts +1 -1
- package/dist/schema/literal.d.ts.map +1 -1
- package/dist/schema/literal.js +1 -1
- package/dist/schema/literal.js.map +1 -1
- package/dist/schema/object.d.ts.map +1 -1
- package/dist/schema/object.js +6 -13
- package/dist/schema/object.js.map +1 -1
- package/package.json +5 -5
- package/src/schema/literal.ts +1 -1
- package/src/schema/object.ts +7 -14
package/LICENSE.txt
ADDED
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
Dual MIT/Apache-2.0 License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2022-2025 Bluesky Social PBC, and Contributors
|
|
4
|
+
|
|
5
|
+
Except as otherwise noted in individual files, this software is licensed under the MIT license (<http://opensource.org/licenses/MIT>), or the Apache License, Version 2.0 (<http://www.apache.org/licenses/LICENSE-2.0>).
|
|
6
|
+
|
|
7
|
+
Downstream projects and end users may chose either license individually, or both together, at their discretion. The motivation for this dual-licensing is the additional software patent assurance provided by Apache 2.0.
|
package/dist/schema/literal.d.ts
CHANGED
|
@@ -2,6 +2,6 @@ import { ValidationResult, Validator, ValidatorContext } from '../validation.js'
|
|
|
2
2
|
export declare class LiteralSchema<Output extends null | string | number | boolean = any> extends Validator<Output> {
|
|
3
3
|
readonly value: Output;
|
|
4
4
|
constructor(value: Output);
|
|
5
|
-
validateInContext(input: unknown, ctx: ValidatorContext): ValidationResult<Output>;
|
|
5
|
+
validateInContext(input: unknown | undefined, ctx: ValidatorContext): ValidationResult<Output>;
|
|
6
6
|
}
|
|
7
7
|
//# sourceMappingURL=literal.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"literal.d.ts","sourceRoot":"","sources":["../../src/schema/literal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEhF,qBAAa,aAAa,CACxB,MAAM,SAAS,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,GAAG,CACrD,SAAQ,SAAS,CAAC,MAAM,CAAC;IACb,QAAQ,CAAC,KAAK,EAAE,MAAM;gBAAb,KAAK,EAAE,MAAM;IAIzB,iBAAiB,CACxB,KAAK,EAAE,OAAO,
|
|
1
|
+
{"version":3,"file":"literal.d.ts","sourceRoot":"","sources":["../../src/schema/literal.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,kBAAkB,CAAA;AAEhF,qBAAa,aAAa,CACxB,MAAM,SAAS,IAAI,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,GAAG,CACrD,SAAQ,SAAS,CAAC,MAAM,CAAC;IACb,QAAQ,CAAC,KAAK,EAAE,MAAM;gBAAb,KAAK,EAAE,MAAM;IAIzB,iBAAiB,CACxB,KAAK,EAAE,OAAO,YAAa,EAC3B,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,MAAM,CAAC;CAO5B"}
|
package/dist/schema/literal.js
CHANGED
|
@@ -8,7 +8,7 @@ class LiteralSchema extends validation_js_1.Validator {
|
|
|
8
8
|
super();
|
|
9
9
|
this.value = value;
|
|
10
10
|
}
|
|
11
|
-
validateInContext(input, ctx) {
|
|
11
|
+
validateInContext(input = this.value, ctx) {
|
|
12
12
|
if (input !== this.value) {
|
|
13
13
|
return ctx.issueInvalidValue(input, [this.value]);
|
|
14
14
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"literal.js","sourceRoot":"","sources":["../../src/schema/literal.ts"],"names":[],"mappings":";;;AAAA,oDAAgF;AAEhF,MAAa,aAEX,SAAQ,yBAAiB;IACJ;IAArB,YAAqB,KAAa;QAChC,KAAK,EAAE,CAAA;QADY,UAAK,GAAL,KAAK,CAAQ;IAElC,CAAC;IAEQ,iBAAiB,CACxB,
|
|
1
|
+
{"version":3,"file":"literal.js","sourceRoot":"","sources":["../../src/schema/literal.ts"],"names":[],"mappings":";;;AAAA,oDAAgF;AAEhF,MAAa,aAEX,SAAQ,yBAAiB;IACJ;IAArB,YAAqB,KAAa;QAChC,KAAK,EAAE,CAAA;QADY,UAAK,GAAL,KAAK,CAAQ;IAElC,CAAC;IAEQ,iBAAiB,CACxB,QAAiB,IAAI,CAAC,KAAK,EAC3B,GAAqB;QAErB,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACzB,OAAO,GAAG,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QACnD,CAAC;QAED,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;IAChC,CAAC;CACF;AAjBD,sCAiBC","sourcesContent":["import { ValidationResult, Validator, ValidatorContext } from '../validation.js'\n\nexport class LiteralSchema<\n Output extends null | string | number | boolean = any,\n> extends Validator<Output> {\n constructor(readonly value: Output) {\n super()\n }\n\n override validateInContext(\n input: unknown = this.value,\n ctx: ValidatorContext,\n ): ValidationResult<Output> {\n if (input !== this.value) {\n return ctx.issueInvalidValue(input, [this.value])\n }\n\n return ctx.success(this.value)\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/schema/object.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"object.d.ts","sourceRoot":"","sources":["../../src/schema/object.ts"],"names":[],"mappings":"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"}
|
package/dist/schema/object.js
CHANGED
|
@@ -47,20 +47,13 @@ class ObjectSchema extends validation_js_1.Validator {
|
|
|
47
47
|
}
|
|
48
48
|
return result;
|
|
49
49
|
}
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
//
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
// Input was missing the key (was "undefined")
|
|
56
|
-
if (this.options.required?.includes(key)) {
|
|
57
|
-
return ctx.issueRequiredKey(input, key);
|
|
58
|
-
}
|
|
59
|
-
// Ignore missing non-required key
|
|
60
|
-
continue;
|
|
50
|
+
// Skip copying if key is not present in input (and value is undefined)
|
|
51
|
+
if (result.value === undefined && !(key in input)) {
|
|
52
|
+
// Except if the key is required
|
|
53
|
+
if (this.options.required?.includes(key)) {
|
|
54
|
+
return ctx.issueRequiredKey(input, key);
|
|
61
55
|
}
|
|
62
|
-
|
|
63
|
-
// it as-is by continuing processing as if it was any other value.
|
|
56
|
+
continue;
|
|
64
57
|
}
|
|
65
58
|
if (result.value !== input[key]) {
|
|
66
59
|
copy ??= { ...input };
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"object.js","sourceRoot":"","sources":["../../src/schema/object.ts"],"names":[],"mappings":";;;AAAA,gDAAiD;AAEjD,oDAKyB;AAkEzB,MAAa,YAOX,SAAQ,yBAAiB;IAEd;IACA;IAFX,YACW,UAAsB,EACtB,OAAgB;QAEzB,KAAK,EAAE,CAAA;QAHE,eAAU,GAAV,UAAU,CAAY;QACtB,YAAO,GAAP,OAAO,CAAS;IAG3B,CAAC;IAED,IAAI,aAAa;QACf,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAA;QAEpD,0DAA0D;QAC1D,MAAM,CAAC,cAAc,CAAC,IAAI,EAAE,eAAe,EAAE;YAC3C,KAAK,EAAE,GAAG;YACV,QAAQ,EAAE,KAAK;YACf,UAAU,EAAE,KAAK;YACjB,YAAY,EAAE,IAAI;SACnB,CAAC,CAAA;QAEF,OAAO,GAAG,CAAA;IACZ,CAAC;IAEQ,iBAAiB,CACxB,KAAc,EACd,GAAqB;QAErB,IAAI,CAAC,IAAA,wBAAa,EAAC,KAAK,CAAC,EAAE,CAAC;YAC1B,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;QAChD,CAAC;QAED,oBAAoB;QACpB,IAAI,IAAyC,CAAA;QAE7C,KAAK,MAAM,CAAC,GAAG,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YAChD,IAAI,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;gBAChE,SAAQ;YACV,CAAC;YAED,MAAM,MAAM,GAAG,GAAG,CAAC,aAAa,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,CAAA;YACrD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;gBACpB,sEAAsE;gBACtE,sEAAsE;gBACtE,4DAA4D;gBAC5D,IAAI,CAAC,CAAC,GAAG,IAAI,KAAK,CAAC,EAAE,CAAC;oBACpB,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;wBACzC,sCAAsC;wBACtC,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,EAAE,GAAG,CAAC,CAAA;oBACzC,CAAC;oBAED,kCAAkC;oBAClC,SAAQ;gBACV,CAAC;gBAED,OAAO,MAAM,CAAA;YACf,CAAC;
|
|
1
|
+
{"version":3,"file":"object.js","sourceRoot":"","sources":["../../src/schema/object.ts"],"names":[],"mappings":"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","sourcesContent":["import { isPlainObject } from '@atproto/lex-data'\nimport { Simplify } from '../core.js'\nimport {\n Infer,\n ValidationResult,\n Validator,\n ValidatorContext,\n} from '../validation.js'\nimport { DictSchema } from './dict.js'\n\nexport type ObjectSchemaProperties = { [_ in string]: Validator<any> }\nexport type ObjectSchemaOptions = {\n required?: readonly string[]\n nullable?: readonly string[]\n unknownProperties?: 'strict' | DictSchema\n}\n\nexport type ObjectSchemaNullValue<\n O extends ObjectSchemaOptions,\n K extends string,\n> = O extends { nullable: readonly (infer N extends string)[] }\n ? K extends N\n ? null\n : never\n : never\n\nexport type ObjectSchemaPropertiesOutput<\n P extends ObjectSchemaProperties,\n O extends ObjectSchemaOptions,\n> = O extends { required: readonly (infer R extends string)[] }\n ? {\n -readonly [K in string & keyof P & R]-?:\n | Infer<P[K]>\n | ObjectSchemaNullValue<O, K>\n } & {\n -readonly [K in Exclude<string & keyof P, R>]?:\n | Infer<P[K]>\n | ObjectSchemaNullValue<O, K>\n }\n : {\n -readonly [K in string & keyof P]?:\n | Infer<P[K]>\n | ObjectSchemaNullValue<O, K>\n }\n\n/**\n * Allows to more accurately represent the intersection of two object types\n * where both types may share some keys, and one of them uses an index\n * signature.\n *\n * @see {@link https://www.typescriptlang.org/play/?#code/C4TwDgpgBAglC8UDeUBmB7dAuKByARgIYBOuUAvlAGTJQDaA+lAJYB2UAzsMWwOYC6OVgFcAtvgjEKAKGkATCAGMANiWiL0rLlEI4YsjVuBQA1hBA4uPVrwRQARBnT2Dm7QDdCy4dESE6ZiD8UAD0IVAi4pJQABQcABbowspyUBIORMT2AJSyEAAeYOjExqCQUACSrMCSHErAzJoAPNJQsFAFNaxyHFAASkrFck1WfAA0UMKsJqzoAO6sAHxjrVAAQh35XT39g8TDozYTUzPzSyuLdqtwVKttMYHoqO00j88bnRDdvawQ7pJ3NpQAD860BbRwSHBQLadAA0ix2G91oJ1vDggAfWABcxPF5QOH8aFtci5aRlaAwVDMfIQVKIKo1Yh1RQNZq0Jw4AgkMjkCYoRiIzjcPioyISKTkRayBQqNRQQzaQgAMRpdL01NpclcRignm8EFVWrsKrVchxQVC4XF0SxmSAA Playground link}\n */\ntype Intersect<\n A extends Record<string, unknown>,\n B extends Record<string, unknown>,\n> = B[keyof B] extends never\n ? A\n : keyof A & keyof B extends never\n ? // If A and B don't overlap, just return A & B\n A & B\n : // Otherwise, properly represent the fact that accessing using an\n // index signature could return a value from either A or B\n A & { [K in keyof B]: B[K] | A[keyof A & K] }\n\nexport type ObjectSchemaOutput<\n P extends ObjectSchemaProperties,\n O extends ObjectSchemaOptions,\n> = O extends {\n unknownProperties: Validator<infer D extends Record<string, unknown>>\n}\n ? Simplify<Intersect<ObjectSchemaPropertiesOutput<P, O>, D>>\n : Simplify<ObjectSchemaPropertiesOutput<P, O>>\n\nexport class ObjectSchema<\n const Validators extends ObjectSchemaProperties = any,\n const Options extends ObjectSchemaOptions = any,\n const Output extends ObjectSchemaOutput<\n Validators,\n Options\n > = ObjectSchemaOutput<Validators, Options>,\n> extends Validator<Output> {\n constructor(\n readonly validators: Validators,\n readonly options: Options,\n ) {\n super()\n }\n\n get validatorsMap(): Map<string, Validator> {\n const map = new Map(Object.entries(this.validators))\n\n // Cache the map on the instance (to avoid re-creating it)\n Object.defineProperty(this, 'validatorsMap', {\n value: map,\n writable: false,\n enumerable: false,\n configurable: true,\n })\n\n return map\n }\n\n override validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n ): ValidationResult<Output> {\n if (!isPlainObject(input)) {\n return ctx.issueInvalidType(input, ['object'])\n }\n\n // Lazily copy value\n let copy: undefined | Record<string, unknown>\n\n for (const [key, propDef] of this.validatorsMap) {\n if (input[key] === null && this.options.nullable?.includes(key)) {\n continue\n }\n\n const result = ctx.validateChild(input, key, propDef)\n if (!result.success) {\n // Because default values are provided by child validators, we need to\n // run the validator to get the default value and, in case of failure,\n // ignore validation error that were caused by missing keys.\n if (!(key in input)) {\n if (this.options.required?.includes(key)) {\n // Transform into \"required key\" issue\n return ctx.issueRequiredKey(input, key)\n }\n\n // Ignore missing non-required key\n continue\n }\n\n return result\n }\n\n // Skip copying if key is not present in input (and value is undefined)\n if (result.value === undefined && !(key in input)) {\n // Except if the key is required\n if (this.options.required?.includes(key)) {\n return ctx.issueRequiredKey(input, key)\n }\n\n continue\n }\n\n if (result.value !== input[key]) {\n copy ??= { ...input }\n copy[key] = result.value\n }\n }\n\n if (this.options.unknownProperties === 'strict') {\n for (const key of Object.keys(input)) {\n if (!this.validatorsMap.has(key)) {\n return ctx.issueInvalidPropertyType(input, key, 'undefined')\n }\n }\n } else if (this.options.unknownProperties) {\n const result = this.options.unknownProperties.validateInContext(\n copy ?? input,\n ctx,\n { ignoredKeys: this.validatorsMap },\n )\n if (!result.success) return result\n if (result.value !== input) copy = result.value\n }\n\n const output = (copy ?? input) as Output\n\n return ctx.success(output)\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@atproto/lex-schema",
|
|
3
|
-
"version": "0.0.
|
|
3
|
+
"version": "0.0.2",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"description": "Lexicon schema system for AT Lexicons",
|
|
6
6
|
"keywords": [
|
|
@@ -31,9 +31,9 @@
|
|
|
31
31
|
}
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"
|
|
35
|
-
"@atproto/
|
|
36
|
-
"
|
|
34
|
+
"tslib": "^2.8.1",
|
|
35
|
+
"@atproto/syntax": "0.4.1",
|
|
36
|
+
"@atproto/lex-data": "0.0.1"
|
|
37
37
|
},
|
|
38
38
|
"devDependencies": {
|
|
39
39
|
"jest": "^28.1.2"
|
|
@@ -42,4 +42,4 @@
|
|
|
42
42
|
"build": "tsc --build tsconfig.build.json",
|
|
43
43
|
"test": "jest"
|
|
44
44
|
}
|
|
45
|
-
}
|
|
45
|
+
}
|
package/src/schema/literal.ts
CHANGED
package/src/schema/object.ts
CHANGED
|
@@ -132,23 +132,16 @@ export class ObjectSchema<
|
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
return result
|
|
135
|
-
}
|
|
136
|
-
// Special case for validators that output "undefined" values (typically
|
|
137
|
-
// UnknownSchema) since they cannot differentiate between "missing key"
|
|
138
|
-
// and "key with undefined value"
|
|
139
|
-
|
|
140
|
-
if (!(key in input)) {
|
|
141
|
-
// Input was missing the key (was "undefined")
|
|
142
|
-
if (this.options.required?.includes(key)) {
|
|
143
|
-
return ctx.issueRequiredKey(input, key)
|
|
144
|
-
}
|
|
135
|
+
}
|
|
145
136
|
|
|
146
|
-
|
|
147
|
-
|
|
137
|
+
// Skip copying if key is not present in input (and value is undefined)
|
|
138
|
+
if (result.value === undefined && !(key in input)) {
|
|
139
|
+
// Except if the key is required
|
|
140
|
+
if (this.options.required?.includes(key)) {
|
|
141
|
+
return ctx.issueRequiredKey(input, key)
|
|
148
142
|
}
|
|
149
143
|
|
|
150
|
-
|
|
151
|
-
// it as-is by continuing processing as if it was any other value.
|
|
144
|
+
continue
|
|
152
145
|
}
|
|
153
146
|
|
|
154
147
|
if (result.value !== input[key]) {
|