@atproto/lex-schema 0.0.6 → 0.0.8

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.
Files changed (41) hide show
  1. package/CHANGELOG.md +20 -0
  2. package/dist/core/$type.d.ts +6 -3
  3. package/dist/core/$type.d.ts.map +1 -1
  4. package/dist/core/$type.js.map +1 -1
  5. package/dist/core/validation-issue.js +1 -1
  6. package/dist/core/validation-issue.js.map +1 -1
  7. package/dist/external.d.ts +1 -1
  8. package/dist/external.d.ts.map +1 -1
  9. package/dist/external.js +1 -1
  10. package/dist/external.js.map +1 -1
  11. package/dist/schema/blob.d.ts +2 -6
  12. package/dist/schema/blob.d.ts.map +1 -1
  13. package/dist/schema/blob.js.map +1 -1
  14. package/dist/schema/cid.d.ts +7 -16
  15. package/dist/schema/cid.d.ts.map +1 -1
  16. package/dist/schema/cid.js +1 -1
  17. package/dist/schema/cid.js.map +1 -1
  18. package/dist/schema/record.d.ts +9 -13
  19. package/dist/schema/record.d.ts.map +1 -1
  20. package/dist/schema/record.js +3 -1
  21. package/dist/schema/record.js.map +1 -1
  22. package/dist/schema/string.js +1 -1
  23. package/dist/schema/string.js.map +1 -1
  24. package/dist/schema/token.d.ts +1 -1
  25. package/dist/schema/token.d.ts.map +1 -1
  26. package/dist/schema/token.js.map +1 -1
  27. package/dist/schema/typed-object.d.ts +8 -12
  28. package/dist/schema/typed-object.d.ts.map +1 -1
  29. package/dist/schema/typed-object.js +3 -1
  30. package/dist/schema/typed-object.js.map +1 -1
  31. package/package.json +2 -2
  32. package/src/core/$type.ts +13 -2
  33. package/src/core/validation-issue.ts +2 -2
  34. package/src/external.ts +3 -3
  35. package/src/schema/blob.ts +2 -5
  36. package/src/schema/cid.test.ts +34 -65
  37. package/src/schema/cid.ts +9 -15
  38. package/src/schema/record.ts +7 -8
  39. package/src/schema/string.ts +2 -2
  40. package/src/schema/token.ts +1 -1
  41. package/src/schema/typed-object.ts +8 -5
package/CHANGELOG.md CHANGED
@@ -1,5 +1,25 @@
1
1
  # @atproto/lex-schema
2
2
 
3
+ ## 0.0.8
4
+
5
+ ### Patch Changes
6
+
7
+ - [#4512](https://github.com/bluesky-social/atproto/pull/4512) [`d78484f`](https://github.com/bluesky-social/atproto/commit/d78484f94d8ba1352ec66030115000d515c9dafe) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Add stricter validation rules for `CidSchema`
8
+
9
+ - [#4512](https://github.com/bluesky-social/atproto/pull/4512) [`d78484f`](https://github.com/bluesky-social/atproto/commit/d78484f94d8ba1352ec66030115000d515c9dafe) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Expose `tokenSchema` `value` as public property
10
+
11
+ - Updated dependencies [[`d78484f`](https://github.com/bluesky-social/atproto/commit/d78484f94d8ba1352ec66030115000d515c9dafe), [`d78484f`](https://github.com/bluesky-social/atproto/commit/d78484f94d8ba1352ec66030115000d515c9dafe), [`d78484f`](https://github.com/bluesky-social/atproto/commit/d78484f94d8ba1352ec66030115000d515c9dafe)]:
12
+ - @atproto/lex-data@0.0.7
13
+
14
+ ## 0.0.7
15
+
16
+ ### Patch Changes
17
+
18
+ - [#4501](https://github.com/bluesky-social/atproto/pull/4501) [`2f78893`](https://github.com/bluesky-social/atproto/commit/2f78893ace3bbf14d4bac36837820ddb46658c98) Thanks [@matthieusieben](https://github.com/matthieusieben)! - Export new `$TypedMaybe` type util
19
+
20
+ - Updated dependencies [[`2f78893`](https://github.com/bluesky-social/atproto/commit/2f78893ace3bbf14d4bac36837820ddb46658c98), [`2f78893`](https://github.com/bluesky-social/atproto/commit/2f78893ace3bbf14d4bac36837820ddb46658c98), [`2f78893`](https://github.com/bluesky-social/atproto/commit/2f78893ace3bbf14d4bac36837820ddb46658c98)]:
21
+ - @atproto/lex-data@0.0.6
22
+
3
23
  ## 0.0.6
4
24
 
5
25
  ### Patch Changes
@@ -1,13 +1,16 @@
1
1
  import { NsidString } from './string-format.js';
2
- import { OmitKey } from './types.js';
2
+ import { OmitKey, Simplify } from './types.js';
3
3
  export type $Type<N extends NsidString = NsidString, H extends string = string> = N extends NsidString ? string extends H ? N | `${N}#${string}` : H extends 'main' ? N : `${N}#${H}` : never;
4
4
  export type $TypeOf<O extends {
5
5
  $type?: string;
6
6
  }> = NonNullable<O['$type']>;
7
7
  export declare function $type<N extends NsidString, H extends string>(nsid: N, hash: H): $Type<N, H>;
8
- export type $Typed<V, T extends string = string> = V & {
8
+ export type $Typed<V, T extends string = string> = Simplify<V & {
9
9
  $type: T;
10
- };
10
+ }>;
11
+ export type $TypedMaybe<V, T extends string = string> = Simplify<V & {
12
+ $type?: T;
13
+ }>;
11
14
  export type Un$Typed<V extends {
12
15
  $type?: string;
13
16
  }> = OmitKey<V, '$type'>;
@@ -1 +1 @@
1
- {"version":3,"file":"$type.d.ts","sourceRoot":"","sources":["../../src/core/$type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,MAAM,YAAY,CAAA;AAEpC,MAAM,MAAM,KAAK,CACf,CAAC,SAAS,UAAU,GAAG,UAAU,EACjC,CAAC,SAAS,MAAM,GAAG,MAAM,IACvB,CAAC,SAAS,UAAU,GACpB,MAAM,SAAS,CAAC,GACd,CAAC,GAAG,GAAG,CAAC,IAAI,MAAM,EAAE,GACpB,CAAC,SAAS,MAAM,GACd,CAAC,GACD,GAAG,CAAC,IAAI,CAAC,EAAE,GACf,KAAK,CAAA;AAET,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,IAAI,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;AAG3E,wBAAgB,KAAK,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,MAAM,EAC1D,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,CAAC,GACN,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAEb;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,CAAC,GAAG;IAAE,KAAK,EAAE,CAAC,CAAA;CAAE,CAAA;AACnE,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,IAAI,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA"}
1
+ {"version":3,"file":"$type.d.ts","sourceRoot":"","sources":["../../src/core/$type.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAA;AAC/C,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAA;AAE9C,MAAM,MAAM,KAAK,CACf,CAAC,SAAS,UAAU,GAAG,UAAU,EACjC,CAAC,SAAS,MAAM,GAAG,MAAM,IACvB,CAAC,SAAS,UAAU,GACpB,MAAM,SAAS,CAAC,GACd,CAAC,GAAG,GAAG,CAAC,IAAI,MAAM,EAAE,GACpB,CAAC,SAAS,MAAM,GACd,CAAC,GACD,GAAG,CAAC,IAAI,CAAC,EAAE,GACf,KAAK,CAAA;AAET,MAAM,MAAM,OAAO,CAAC,CAAC,SAAS;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,IAAI,WAAW,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAA;AAG3E,wBAAgB,KAAK,CAAC,CAAC,SAAS,UAAU,EAAE,CAAC,SAAS,MAAM,EAC1D,IAAI,EAAE,CAAC,EACP,IAAI,EAAE,CAAC,GACN,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAEb;AAED,MAAM,MAAM,MAAM,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,CACzD,CAAC,GAAG;IACF,KAAK,EAAE,CAAC,CAAA;CACT,CACF,CAAA;AAED,MAAM,MAAM,WAAW,CAAC,CAAC,EAAE,CAAC,SAAS,MAAM,GAAG,MAAM,IAAI,QAAQ,CAC9D,CAAC,GAAG;IACF,KAAK,CAAC,EAAE,CAAC,CAAA;CACV,CACF,CAAA;AAED,MAAM,MAAM,QAAQ,CAAC,CAAC,SAAS;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,IAAI,OAAO,CAAC,CAAC,EAAE,OAAO,CAAC,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"$type.js","sourceRoot":"","sources":["../../src/core/$type.ts"],"names":[],"mappings":";;AAiBA,sBAKC;AAND,wBAAwB;AACxB,SAAgB,KAAK,CACnB,IAAO,EACP,IAAO;IAEP,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAgB,CAAA;AACpE,CAAC","sourcesContent":["import { NsidString } from './string-format.js'\nimport { OmitKey } from './types.js'\n\nexport type $Type<\n N extends NsidString = NsidString,\n H extends string = string,\n> = N extends NsidString\n ? string extends H\n ? N | `${N}#${string}`\n : H extends 'main'\n ? N\n : `${N}#${H}`\n : never\n\nexport type $TypeOf<O extends { $type?: string }> = NonNullable<O['$type']>\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function $type<N extends NsidString, H extends string>(\n nsid: N,\n hash: H,\n): $Type<N, H> {\n return (hash === 'main' ? nsid : `${nsid}#${hash}`) as $Type<N, H>\n}\n\nexport type $Typed<V, T extends string = string> = V & { $type: T }\nexport type Un$Typed<V extends { $type?: string }> = OmitKey<V, '$type'>\n"]}
1
+ {"version":3,"file":"$type.js","sourceRoot":"","sources":["../../src/core/$type.ts"],"names":[],"mappings":";;AAiBA,sBAKC;AAND,wBAAwB;AACxB,SAAgB,KAAK,CACnB,IAAO,EACP,IAAO;IAEP,OAAO,CAAC,IAAI,KAAK,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,IAAI,EAAE,CAAgB,CAAA;AACpE,CAAC","sourcesContent":["import { NsidString } from './string-format.js'\nimport { OmitKey, Simplify } from './types.js'\n\nexport type $Type<\n N extends NsidString = NsidString,\n H extends string = string,\n> = N extends NsidString\n ? string extends H\n ? N | `${N}#${string}`\n : H extends 'main'\n ? N\n : `${N}#${H}`\n : never\n\nexport type $TypeOf<O extends { $type?: string }> = NonNullable<O['$type']>\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function $type<N extends NsidString, H extends string>(\n nsid: N,\n hash: H,\n): $Type<N, H> {\n return (hash === 'main' ? nsid : `${nsid}#${hash}`) as $Type<N, H>\n}\n\nexport type $Typed<V, T extends string = string> = Simplify<\n V & {\n $type: T\n }\n>\n\nexport type $TypedMaybe<V, T extends string = string> = Simplify<\n V & {\n $type?: T\n }\n>\n\nexport type Un$Typed<V extends { $type?: string }> = OmitKey<V, '$type'>\n"]}
@@ -204,7 +204,7 @@ function stringifyType(value) {
204
204
  return 'null';
205
205
  if (Array.isArray(value))
206
206
  return 'array';
207
- if ((0, lex_data_1.asCid)(value))
207
+ if ((0, lex_data_1.ifCid)(value))
208
208
  return 'cid';
209
209
  if (value instanceof Date)
210
210
  return 'date';
@@ -1 +1 @@
1
- {"version":3,"file":"validation-issue.js","sourceRoot":"","sources":["../../src/core/validation-issue.ts"],"names":[],"mappings":"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","sourcesContent":["import { asCid, isPlainObject } from '@atproto/lex-data'\nimport { PropertyKey } from './property-key.js'\n\nexport abstract class Issue {\n constructor(\n readonly code: string,\n readonly path: readonly PropertyKey[],\n readonly input: unknown,\n ) {}\n\n abstract toString(): string\n\n toJSON() {\n return {\n code: this.code,\n path: this.path,\n message: this.toString(),\n }\n }\n}\n\nexport class IssueCustom extends Issue {\n constructor(\n readonly path: readonly PropertyKey[],\n readonly input: unknown,\n readonly message: string,\n ) {\n super('custom', path, input)\n }\n\n toString() {\n return `${this.message}${stringifyPath(this.path)}`\n }\n}\n\nexport class IssueInvalidFormat extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly format: string,\n readonly message?: string,\n ) {\n super('invalid_format', path, input)\n }\n\n toString() {\n return `Invalid ${this.formatDescription} format${this.message ? ` (${this.message})` : ''}${stringifyPath(this.path)} (got ${stringifyValue(this.input)})`\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n format: this.format,\n }\n }\n\n get formatDescription(): string {\n switch (this.format) {\n case 'at-identifier':\n return `AT identifier`\n case 'did':\n return `DID`\n case 'nsid':\n return `NSID`\n case 'cid':\n return `CID string`\n case 'tid':\n return `TID string`\n case 'record-key':\n return `record key`\n default:\n return this.format\n }\n }\n}\n\nexport class IssueInvalidType extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly expected: readonly string[],\n ) {\n super('invalid_type', path, input)\n }\n\n toString() {\n return `Expected ${oneOf(this.expected.map(stringifyExpectedType))} value type${stringifyPath(this.path)} (got ${stringifyType(this.input)})`\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n expected: this.expected,\n }\n }\n}\n\nexport class IssueInvalidValue extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly values: readonly unknown[],\n ) {\n super('invalid_value', path, input)\n }\n\n toString() {\n return `Expected ${oneOf(this.values.map(stringifyValue))}${stringifyPath(this.path)} (got ${stringifyValue(this.input)})`\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n values: this.values,\n }\n }\n}\n\nexport class IssueRequiredKey extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly key: PropertyKey,\n ) {\n super('required_key', path, input)\n }\n\n toString() {\n return `Missing required key \"${String(this.key)}\"${stringifyPath(this.path)}`\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n key: this.key,\n }\n }\n}\n\nexport type MeasurableType =\n | 'array'\n | 'string'\n | 'integer'\n | 'grapheme'\n | 'bytes'\n | 'blob'\n\nexport class IssueTooBig extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly maximum: number,\n readonly type: MeasurableType,\n readonly actual: number,\n ) {\n super('too_big', path, input)\n }\n\n toString() {\n return `${this.type} too big (maximum ${this.maximum})${stringifyPath(this.path)} (got ${this.actual})`\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n type: this.type,\n maximum: this.maximum,\n }\n }\n}\n\nexport class IssueTooSmall extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly minimum: number,\n readonly type: MeasurableType,\n readonly actual: number,\n ) {\n super('too_small', path, input)\n }\n\n toString() {\n return `${this.type} too small (minimum ${this.minimum})${stringifyPath(this.path)} (got ${this.actual})`\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n type: this.type,\n minimum: this.minimum,\n }\n }\n}\n\nfunction stringifyExpectedType(expected: string): string {\n if (expected === '$typed') {\n return 'an object or record which includes a \"$type\" property'\n }\n return expected\n}\n\nfunction stringifyPath(path: readonly PropertyKey[]) {\n return ` at ${buildJsonPath(path)}`\n}\n\nfunction buildJsonPath(path: readonly PropertyKey[]): string {\n return `$${path.map(toJsonPathSegment).join('')}`\n}\n\nfunction toJsonPathSegment(segment: PropertyKey): string {\n if (typeof segment === 'number') {\n return `[${segment}]`\n } else if (/^[a-zA-Z_$][a-zA-Z0-9_]*$/.test(segment as string)) {\n return `.${segment}`\n } else {\n return `[${JSON.stringify(segment)}]`\n }\n}\n\nfunction oneOf(arr: readonly string[]): string {\n if (arr.length === 0) return ''\n if (arr.length === 1) return arr[0]\n return `one of ${arr.slice(0, -1).join(', ')} or ${arr.at(-1)}`\n}\n\nfunction stringifyType(value: unknown): string {\n switch (typeof value) {\n case 'object':\n if (value === null) return 'null'\n if (Array.isArray(value)) return 'array'\n if (asCid(value)) return 'cid'\n if (value instanceof Date) return 'date'\n if (value instanceof RegExp) return 'regexp'\n if (value instanceof Map) return 'map'\n if (value instanceof Set) return 'set'\n return 'object'\n case 'number':\n if (Number.isInteger(value) && Number.isSafeInteger(value)) {\n return 'integer'\n }\n if (Number.isNaN(value)) {\n return 'NaN'\n }\n if (value === Infinity) {\n return 'Infinity'\n }\n if (value === -Infinity) {\n return '-Infinity'\n }\n return 'float'\n default:\n return typeof value\n }\n}\n\nfunction stringifyValue(value: unknown): string {\n switch (typeof value) {\n case 'bigint':\n return `${value}n`\n case 'number':\n case 'string':\n case 'boolean':\n return JSON.stringify(value)\n case 'object':\n if (Array.isArray(value)) {\n return `[${stringifyArray(value, stringifyValue)}]`\n }\n if (isPlainObject(value)) {\n return `{${stringifyArray(Object.entries(value), stringifyObjectEntry)}}`\n }\n // fallthrough\n default:\n return stringifyType(value)\n }\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nfunction stringifyObjectEntry([key, _value]: [PropertyKey, unknown]): string {\n return `${JSON.stringify(key)}: ...`\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nfunction stringifyArray<T>(\n arr: readonly T[],\n fn: (item: T) => string,\n n = 2,\n): string {\n return arr.slice(0, n).map(fn).join(', ') + (arr.length > n ? ', ...' : '')\n}\n"]}
1
+ {"version":3,"file":"validation-issue.js","sourceRoot":"","sources":["../../src/core/validation-issue.ts"],"names":[],"mappings":"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","sourcesContent":["import { ifCid, isPlainObject } from '@atproto/lex-data'\nimport { PropertyKey } from './property-key.js'\n\nexport abstract class Issue {\n constructor(\n readonly code: string,\n readonly path: readonly PropertyKey[],\n readonly input: unknown,\n ) {}\n\n abstract toString(): string\n\n toJSON() {\n return {\n code: this.code,\n path: this.path,\n message: this.toString(),\n }\n }\n}\n\nexport class IssueCustom extends Issue {\n constructor(\n readonly path: readonly PropertyKey[],\n readonly input: unknown,\n readonly message: string,\n ) {\n super('custom', path, input)\n }\n\n toString() {\n return `${this.message}${stringifyPath(this.path)}`\n }\n}\n\nexport class IssueInvalidFormat extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly format: string,\n readonly message?: string,\n ) {\n super('invalid_format', path, input)\n }\n\n toString() {\n return `Invalid ${this.formatDescription} format${this.message ? ` (${this.message})` : ''}${stringifyPath(this.path)} (got ${stringifyValue(this.input)})`\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n format: this.format,\n }\n }\n\n get formatDescription(): string {\n switch (this.format) {\n case 'at-identifier':\n return `AT identifier`\n case 'did':\n return `DID`\n case 'nsid':\n return `NSID`\n case 'cid':\n return `CID string`\n case 'tid':\n return `TID string`\n case 'record-key':\n return `record key`\n default:\n return this.format\n }\n }\n}\n\nexport class IssueInvalidType extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly expected: readonly string[],\n ) {\n super('invalid_type', path, input)\n }\n\n toString() {\n return `Expected ${oneOf(this.expected.map(stringifyExpectedType))} value type${stringifyPath(this.path)} (got ${stringifyType(this.input)})`\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n expected: this.expected,\n }\n }\n}\n\nexport class IssueInvalidValue extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly values: readonly unknown[],\n ) {\n super('invalid_value', path, input)\n }\n\n toString() {\n return `Expected ${oneOf(this.values.map(stringifyValue))}${stringifyPath(this.path)} (got ${stringifyValue(this.input)})`\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n values: this.values,\n }\n }\n}\n\nexport class IssueRequiredKey extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly key: PropertyKey,\n ) {\n super('required_key', path, input)\n }\n\n toString() {\n return `Missing required key \"${String(this.key)}\"${stringifyPath(this.path)}`\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n key: this.key,\n }\n }\n}\n\nexport type MeasurableType =\n | 'array'\n | 'string'\n | 'integer'\n | 'grapheme'\n | 'bytes'\n | 'blob'\n\nexport class IssueTooBig extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly maximum: number,\n readonly type: MeasurableType,\n readonly actual: number,\n ) {\n super('too_big', path, input)\n }\n\n toString() {\n return `${this.type} too big (maximum ${this.maximum})${stringifyPath(this.path)} (got ${this.actual})`\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n type: this.type,\n maximum: this.maximum,\n }\n }\n}\n\nexport class IssueTooSmall extends Issue {\n constructor(\n path: readonly PropertyKey[],\n input: unknown,\n readonly minimum: number,\n readonly type: MeasurableType,\n readonly actual: number,\n ) {\n super('too_small', path, input)\n }\n\n toString() {\n return `${this.type} too small (minimum ${this.minimum})${stringifyPath(this.path)} (got ${this.actual})`\n }\n\n toJSON() {\n return {\n ...super.toJSON(),\n type: this.type,\n minimum: this.minimum,\n }\n }\n}\n\nfunction stringifyExpectedType(expected: string): string {\n if (expected === '$typed') {\n return 'an object or record which includes a \"$type\" property'\n }\n return expected\n}\n\nfunction stringifyPath(path: readonly PropertyKey[]) {\n return ` at ${buildJsonPath(path)}`\n}\n\nfunction buildJsonPath(path: readonly PropertyKey[]): string {\n return `$${path.map(toJsonPathSegment).join('')}`\n}\n\nfunction toJsonPathSegment(segment: PropertyKey): string {\n if (typeof segment === 'number') {\n return `[${segment}]`\n } else if (/^[a-zA-Z_$][a-zA-Z0-9_]*$/.test(segment as string)) {\n return `.${segment}`\n } else {\n return `[${JSON.stringify(segment)}]`\n }\n}\n\nfunction oneOf(arr: readonly string[]): string {\n if (arr.length === 0) return ''\n if (arr.length === 1) return arr[0]\n return `one of ${arr.slice(0, -1).join(', ')} or ${arr.at(-1)}`\n}\n\nfunction stringifyType(value: unknown): string {\n switch (typeof value) {\n case 'object':\n if (value === null) return 'null'\n if (Array.isArray(value)) return 'array'\n if (ifCid(value)) return 'cid'\n if (value instanceof Date) return 'date'\n if (value instanceof RegExp) return 'regexp'\n if (value instanceof Map) return 'map'\n if (value instanceof Set) return 'set'\n return 'object'\n case 'number':\n if (Number.isInteger(value) && Number.isSafeInteger(value)) {\n return 'integer'\n }\n if (Number.isNaN(value)) {\n return 'NaN'\n }\n if (value === Infinity) {\n return 'Infinity'\n }\n if (value === -Infinity) {\n return '-Infinity'\n }\n return 'float'\n default:\n return typeof value\n }\n}\n\nfunction stringifyValue(value: unknown): string {\n switch (typeof value) {\n case 'bigint':\n return `${value}n`\n case 'number':\n case 'string':\n case 'boolean':\n return JSON.stringify(value)\n case 'object':\n if (Array.isArray(value)) {\n return `[${stringifyArray(value, stringifyValue)}]`\n }\n if (isPlainObject(value)) {\n return `{${stringifyArray(Object.entries(value), stringifyObjectEntry)}}`\n }\n // fallthrough\n default:\n return stringifyType(value)\n }\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nfunction stringifyObjectEntry([key, _value]: [PropertyKey, unknown]): string {\n return `${JSON.stringify(key)}: ...`\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nfunction stringifyArray<T>(\n arr: readonly T[],\n fn: (item: T) => string,\n n = 2,\n): string {\n return arr.slice(0, n).map(fn).join(', ') + (arr.length > n ? ', ...' : '')\n}\n"]}
@@ -12,7 +12,7 @@ export declare function _enum<const V extends null | string | number | boolean>(
12
12
  export { _enum as enum };
13
13
  export declare const boolean: (options?: BooleanSchemaOptions) => BooleanSchema;
14
14
  export declare const integer: (options?: IntegerSchemaOptions) => IntegerSchema;
15
- export declare const cidLink: (options?: CidSchemaOptions) => CidSchema;
15
+ export declare const cidLink: <O extends CidSchemaOptions = {}>(options?: O) => CidSchema<O>;
16
16
  export declare const bytes: (options?: BytesSchemaOptions) => BytesSchema;
17
17
  export declare const blob: <O extends BlobSchemaOptions = {}>(options?: O) => BlobSchema<O>;
18
18
  export declare const string: <const O extends StringSchemaOptions = {}>(options?: StringSchemaOptions & O) => StringSchema<O>;
@@ -1 +1 @@
1
- {"version":3,"file":"external.d.ts","sourceRoot":"","sources":["../src/external.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"external.d.ts","sourceRoot":"","sources":["../src/external.ts"],"names":[],"mappings":"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"}
package/dist/external.js CHANGED
@@ -61,7 +61,7 @@ exports.boolean = (0, memoize_js_1.memoizedOptions)(function (options) {
61
61
  exports.integer = (0, memoize_js_1.memoizedOptions)(function (options) {
62
62
  return new schema_js_1.IntegerSchema(options);
63
63
  });
64
- exports.cidLink = (0, memoize_js_1.memoizedOptions)(function (options) {
64
+ exports.cidLink = (0, memoize_js_1.memoizedOptions)(function (options = {}) {
65
65
  return new schema_js_1.CidSchema(options);
66
66
  });
67
67
  exports.bytes = (0, memoize_js_1.memoizedOptions)(function (options) {
@@ -1 +1 @@
1
- {"version":3,"file":"external.js","sourceRoot":"","sources":["../src/external.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n $Type,\n $TypeOf,\n $type,\n Infer,\n LexiconRecordKey,\n NsidString,\n PropertyKey,\n Schema,\n Validator,\n} from './core.js'\nimport {\n ArraySchema,\n ArraySchemaOptions,\n BlobSchema,\n BlobSchemaOptions,\n BooleanSchema,\n BooleanSchemaOptions,\n BytesSchema,\n BytesSchemaOptions,\n CidSchema,\n CidSchemaOptions,\n CustomAssertion,\n CustomSchema,\n DictSchema,\n DiscriminatedUnionSchema,\n DiscriminatedUnionVariants,\n EnumSchema,\n EnumSchemaOptions,\n IntegerSchema,\n IntegerSchemaOptions,\n IntersectionSchema,\n LiteralSchema,\n LiteralSchemaOptions,\n NeverSchema,\n NullSchema,\n NullableSchema,\n ObjectSchema,\n ObjectSchemaShape,\n OptionalSchema,\n ParamsSchema,\n ParamsSchemaShape,\n Payload,\n PayloadSchema,\n Permission,\n PermissionOptions,\n PermissionSet,\n PermissionSetOptions,\n Procedure,\n Query,\n RecordSchema,\n RefSchema,\n RefSchemaGetter,\n RegexpSchema,\n StringSchema,\n StringSchemaOptions,\n Subscription,\n TokenSchema,\n TypedObjectSchema,\n TypedRefGetter,\n TypedRefSchema,\n TypedUnionSchema,\n UnionSchema,\n UnionSchemaValidators,\n UnknownObjectOutput,\n UnknownObjectSchema,\n UnknownSchema,\n refine,\n} from './schema.js'\nimport { memoizedOptions, memoizedTransformer } from './util/memoize.js'\n\nexport * from './core.js'\nexport * from './helpers.js'\nexport * from './schema.js'\n\nexport { _null as null }\n\nexport const never = /*#__PURE__*/ memoizedOptions(function () {\n return new NeverSchema()\n})\n\nexport const unknown = /*#__PURE__*/ memoizedOptions(function () {\n return new UnknownSchema()\n})\n\nconst _null = /*#__PURE__*/ memoizedOptions(function () {\n return new NullSchema()\n})\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function literal<const V extends null | string | number | boolean>(\n value: V,\n options?: LiteralSchemaOptions<V>,\n) {\n return new LiteralSchema<V>(value, options)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function _enum<const V extends null | string | number | boolean>(\n value: readonly V[],\n options?: EnumSchemaOptions<V>,\n) {\n return new EnumSchema<V>(value, options)\n}\n\n// @NOTE \"enum\" is a reserved keyword in JS/TS\nexport { _enum as enum }\n\nexport const boolean = /*#__PURE__*/ memoizedOptions(\n function (options?: BooleanSchemaOptions) {\n return new BooleanSchema(options)\n },\n (options) => {\n const keys = Object.keys(options)\n if (keys.length === 1 && keys[0] === 'default') return options.default!\n },\n)\n\nexport const integer = /*#__PURE__*/ memoizedOptions(function (\n options?: IntegerSchemaOptions,\n) {\n return new IntegerSchema(options)\n})\n\nexport const cidLink = /*#__PURE__*/ memoizedOptions(function (\n options?: CidSchemaOptions,\n) {\n return new CidSchema(options)\n})\n\nexport const bytes = /*#__PURE__*/ memoizedOptions(function (\n options?: BytesSchemaOptions,\n) {\n return new BytesSchema(options)\n})\n\nexport const blob = /*#__PURE__*/ memoizedOptions(function <\n O extends BlobSchemaOptions = NonNullable<unknown>,\n>(options: O = {} as O) {\n return new BlobSchema(options)\n})\n\nexport const string = /*#__PURE__*/ memoizedOptions(function <\n const O extends StringSchemaOptions = NonNullable<unknown>,\n>(options: StringSchemaOptions & O = {} as O) {\n return new StringSchema<O>(options)\n})\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function regexp<T extends string = string>(pattern: RegExp) {\n return new RegexpSchema<T>(pattern)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function array<const S extends Validator>(\n items: S,\n options?: ArraySchemaOptions,\n): ArraySchema<S>\nexport function array<T, const S extends Validator<T> = Validator<T>>(\n items: S,\n options?: ArraySchemaOptions,\n): ArraySchema<S>\nexport function array<const S extends Validator>(\n items: S,\n options?: ArraySchemaOptions,\n) {\n return new ArraySchema<S>(items, options)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function object<const P extends ObjectSchemaShape>(properties: P) {\n return new ObjectSchema<P>(properties)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function dict<\n const K extends Validator<string>,\n const V extends Validator,\n>(key: K, value: V) {\n return new DictSchema<K, V>(key, value)\n}\n\n// Utility\nexport type { UnknownObjectOutput as UnknownObject }\n\nexport const unknownObject = /*#__PURE__*/ memoizedOptions(function () {\n return new UnknownObjectSchema()\n})\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function ref<T>(get: RefSchemaGetter<T>) {\n return new RefSchema<T>(get)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function custom<T>(\n assertion: CustomAssertion<T>,\n message: string,\n path?: PropertyKey | readonly PropertyKey[],\n) {\n return new CustomSchema<T>(assertion, message, path)\n}\n\nexport const nullable = /*#__PURE__*/ memoizedTransformer(function <\n const S extends Validator,\n>(schema: S) {\n return new NullableSchema<Infer<S>>(schema)\n})\n\nexport const optional = /*#__PURE__*/ memoizedTransformer(function <\n const S extends Validator,\n>(schema: S) {\n return new OptionalSchema<Infer<S>>(schema)\n})\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function union<const V extends UnionSchemaValidators>(validators: V) {\n return new UnionSchema<V>(validators)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function intersection<\n const Left extends ObjectSchema,\n const Right extends DictSchema,\n>(left: Left, right: Right) {\n return new IntersectionSchema<Left, Right>(left, right)\n}\n\nexport { refine }\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function discriminatedUnion<\n const Discriminator extends string,\n const Options extends DiscriminatedUnionVariants<Discriminator>,\n>(discriminator: Discriminator, variants: Options) {\n return new DiscriminatedUnionSchema<Discriminator, Options>(\n discriminator,\n variants,\n )\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function token<const N extends NsidString, const H extends string>(\n nsid: N,\n hash: H,\n) {\n return new TokenSchema($type(nsid, hash))\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function typedRef<const V extends { $type?: string }>(\n get: TypedRefGetter<V>,\n) {\n return new TypedRefSchema<V>(get)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function typedUnion<\n const R extends readonly TypedRefSchema[],\n const C extends boolean,\n>(refs: R, closed: C) {\n return new TypedUnionSchema<R, C>(refs, closed)\n}\n\n/**\n * This function offers two overloads:\n * - One that allows creating a {@link TypedObjectSchema}, and infer the output\n * type from the provided arguments, without requiring to specify any of the\n * generics. This is useful when you want to define a record without\n * explicitly defining its interface. This version does not support circular\n * references, as TypeScript cannot infer types in such cases.\n * - One allows creating a {@link TypedObjectSchema} with an explicitly defined\n * interface. This will typically be used by codegen (`lex build`) to generate\n * schemas that work even if they contain circular references.\n */\nexport function typedObject<\n const N extends NsidString,\n const H extends string,\n const S extends Validator<{ [k: string]: unknown }>,\n>(nsid: N, hash: H, schema: S): TypedObjectSchema<$Type<N, H>, S>\nexport function typedObject<V extends { $type?: $Type }>(\n nsid: V extends { $type?: infer T extends string }\n ? T extends `${infer N}#${string}`\n ? N\n : T // (T is a \"main\" type, so already an NSID)\n : never,\n hash: V extends { $type?: infer T extends string }\n ? T extends `${string}#${infer H}`\n ? H\n : 'main'\n : never,\n schema: Validator<Omit<V, '$type'>>,\n): TypedObjectSchema<$TypeOf<V>, Validator<Omit<V, '$type'>>>\n/*@__NO_SIDE_EFFECTS__*/\nexport function typedObject<\n const N extends NsidString,\n const H extends string,\n const S extends Validator<{ [k: string]: unknown }>,\n>(nsid: N, hash: H, schema: S) {\n return new TypedObjectSchema<$Type<N, H>, S>($type(nsid, hash), schema)\n}\n\n/**\n * Ensures that a `$type` used in a record is a valid NSID (i.e. no fragment).\n */\ntype AsNsid<T> = T extends `${string}#${string}` ? never : T\n\n/**\n * This function offers two overloads:\n * - One that allows creating a {@link RecordSchema}, and infer the output type\n * from the provided arguments, without requiring to specify any of the\n * generics. This is useful when you want to define a record without\n * explicitly defining its interface. This version does not support circular\n * references, as TypeScript cannot infer types in such cases.\n * - One allows creating a {@link RecordSchema} with an explicitly defined\n * interface. This will typically be used by codegen (`lex build`) to generate\n * schemas that work even if they contain circular references.\n */\nexport function record<\n const K extends LexiconRecordKey,\n const T extends NsidString,\n const S extends Validator<{ [k: string]: unknown }>,\n>(key: K, type: AsNsid<T>, schema: S): RecordSchema<K, T, S>\nexport function record<\n const K extends LexiconRecordKey,\n const V extends { $type: NsidString },\n>(\n key: K,\n type: AsNsid<V['$type']>,\n schema: Validator<Omit<V, '$type'>>,\n): RecordSchema<K, V['$type'], Validator<Omit<V, '$type'>>>\n/*@__NO_SIDE_EFFECTS__*/\nexport function record<\n const K extends LexiconRecordKey,\n const T extends NsidString,\n const S extends Validator<{ [k: string]: unknown }>,\n>(key: K, type: T, schema: S) {\n return new RecordSchema<K, T, S>(key, type, schema)\n}\n\nexport const params = /*#__PURE__*/ memoizedOptions(function <\n const P extends ParamsSchemaShape = NonNullable<unknown>,\n>(properties: P = {} as P) {\n return new ParamsSchema<P>(properties)\n})\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function payload<\n const E extends string | undefined = undefined,\n const S extends PayloadSchema<E> = undefined,\n>(encoding: E = undefined as E, schema: S = undefined as S) {\n return new Payload<E, S>(encoding, schema)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function jsonPayload<const P extends ObjectSchemaShape>(\n properties: P,\n): Payload<'application/json', ObjectSchema<P>> {\n return payload('application/json', object(properties))\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function query<\n const N extends NsidString,\n const P extends ParamsSchema,\n const O extends Payload,\n const E extends undefined | readonly string[] = undefined,\n>(nsid: N, parameters: P, output: O, errors: E = undefined as E) {\n return new Query<N, P, O, E>(nsid, parameters, output, errors)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function procedure<\n const N extends NsidString,\n const P extends ParamsSchema,\n const I extends Payload,\n const O extends Payload,\n const E extends undefined | readonly string[] = undefined,\n>(nsid: N, parameters: P, input: I, output: O, errors: E = undefined as E) {\n return new Procedure<N, P, I, O, E>(nsid, parameters, input, output, errors)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function subscription<\n const N extends NsidString,\n const P extends ParamsSchema,\n const M extends Schema,\n const E extends undefined | readonly string[] = undefined,\n>(nsid: N, parameters: P, message: M, errors: E = undefined as E) {\n return new Subscription<N, P, M, E>(nsid, parameters, message, errors)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function permission<\n const R extends string,\n const O extends PermissionOptions,\n>(resource: R, options: PermissionOptions & O = {} as O) {\n return new Permission<R, O>(resource, options)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function permissionSet<\n const N extends NsidString,\n const P extends readonly Permission[],\n>(nsid: N, permissions: P, options?: PermissionSetOptions) {\n return new PermissionSet<N, P>(nsid, permissions, options)\n}\n"]}
1
+ {"version":3,"file":"external.js","sourceRoot":"","sources":["../src/external.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n $Type,\n $TypeOf,\n $type,\n Infer,\n LexiconRecordKey,\n NsidString,\n PropertyKey,\n Schema,\n Validator,\n} from './core.js'\nimport {\n ArraySchema,\n ArraySchemaOptions,\n BlobSchema,\n BlobSchemaOptions,\n BooleanSchema,\n BooleanSchemaOptions,\n BytesSchema,\n BytesSchemaOptions,\n CidSchema,\n CidSchemaOptions,\n CustomAssertion,\n CustomSchema,\n DictSchema,\n DiscriminatedUnionSchema,\n DiscriminatedUnionVariants,\n EnumSchema,\n EnumSchemaOptions,\n IntegerSchema,\n IntegerSchemaOptions,\n IntersectionSchema,\n LiteralSchema,\n LiteralSchemaOptions,\n NeverSchema,\n NullSchema,\n NullableSchema,\n ObjectSchema,\n ObjectSchemaShape,\n OptionalSchema,\n ParamsSchema,\n ParamsSchemaShape,\n Payload,\n PayloadSchema,\n Permission,\n PermissionOptions,\n PermissionSet,\n PermissionSetOptions,\n Procedure,\n Query,\n RecordSchema,\n RefSchema,\n RefSchemaGetter,\n RegexpSchema,\n StringSchema,\n StringSchemaOptions,\n Subscription,\n TokenSchema,\n TypedObjectSchema,\n TypedRefGetter,\n TypedRefSchema,\n TypedUnionSchema,\n UnionSchema,\n UnionSchemaValidators,\n UnknownObjectOutput,\n UnknownObjectSchema,\n UnknownSchema,\n refine,\n} from './schema.js'\nimport { memoizedOptions, memoizedTransformer } from './util/memoize.js'\n\nexport * from './core.js'\nexport * from './helpers.js'\nexport * from './schema.js'\n\nexport { _null as null }\n\nexport const never = /*#__PURE__*/ memoizedOptions(function () {\n return new NeverSchema()\n})\n\nexport const unknown = /*#__PURE__*/ memoizedOptions(function () {\n return new UnknownSchema()\n})\n\nconst _null = /*#__PURE__*/ memoizedOptions(function () {\n return new NullSchema()\n})\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function literal<const V extends null | string | number | boolean>(\n value: V,\n options?: LiteralSchemaOptions<V>,\n) {\n return new LiteralSchema<V>(value, options)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function _enum<const V extends null | string | number | boolean>(\n value: readonly V[],\n options?: EnumSchemaOptions<V>,\n) {\n return new EnumSchema<V>(value, options)\n}\n\n// @NOTE \"enum\" is a reserved keyword in JS/TS\nexport { _enum as enum }\n\nexport const boolean = /*#__PURE__*/ memoizedOptions(\n function (options?: BooleanSchemaOptions) {\n return new BooleanSchema(options)\n },\n (options) => {\n const keys = Object.keys(options)\n if (keys.length === 1 && keys[0] === 'default') return options.default!\n },\n)\n\nexport const integer = /*#__PURE__*/ memoizedOptions(function (\n options?: IntegerSchemaOptions,\n) {\n return new IntegerSchema(options)\n})\n\nexport const cidLink = /*#__PURE__*/ memoizedOptions(function <\n O extends CidSchemaOptions = NonNullable<unknown>,\n>(options: O = {} as O) {\n return new CidSchema(options)\n})\n\nexport const bytes = /*#__PURE__*/ memoizedOptions(function (\n options?: BytesSchemaOptions,\n) {\n return new BytesSchema(options)\n})\n\nexport const blob = /*#__PURE__*/ memoizedOptions(function <\n O extends BlobSchemaOptions = NonNullable<unknown>,\n>(options: O = {} as O) {\n return new BlobSchema(options)\n})\n\nexport const string = /*#__PURE__*/ memoizedOptions(function <\n const O extends StringSchemaOptions = NonNullable<unknown>,\n>(options: StringSchemaOptions & O = {} as O) {\n return new StringSchema<O>(options)\n})\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function regexp<T extends string = string>(pattern: RegExp) {\n return new RegexpSchema<T>(pattern)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function array<const S extends Validator>(\n items: S,\n options?: ArraySchemaOptions,\n): ArraySchema<S>\nexport function array<T, const S extends Validator<T> = Validator<T>>(\n items: S,\n options?: ArraySchemaOptions,\n): ArraySchema<S>\nexport function array<const S extends Validator>(\n items: S,\n options?: ArraySchemaOptions,\n) {\n return new ArraySchema<S>(items, options)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function object<const P extends ObjectSchemaShape>(properties: P) {\n return new ObjectSchema<P>(properties)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function dict<\n const K extends Validator<string>,\n const V extends Validator,\n>(key: K, value: V) {\n return new DictSchema<K, V>(key, value)\n}\n\n// Utility\nexport type { UnknownObjectOutput as UnknownObject }\n\nexport const unknownObject = /*#__PURE__*/ memoizedOptions(function () {\n return new UnknownObjectSchema()\n})\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function ref<T>(get: RefSchemaGetter<T>) {\n return new RefSchema<T>(get)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function custom<T>(\n assertion: CustomAssertion<T>,\n message: string,\n path?: PropertyKey | readonly PropertyKey[],\n) {\n return new CustomSchema<T>(assertion, message, path)\n}\n\nexport const nullable = /*#__PURE__*/ memoizedTransformer(function <\n const S extends Validator,\n>(schema: S) {\n return new NullableSchema<Infer<S>>(schema)\n})\n\nexport const optional = /*#__PURE__*/ memoizedTransformer(function <\n const S extends Validator,\n>(schema: S) {\n return new OptionalSchema<Infer<S>>(schema)\n})\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function union<const V extends UnionSchemaValidators>(validators: V) {\n return new UnionSchema<V>(validators)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function intersection<\n const Left extends ObjectSchema,\n const Right extends DictSchema,\n>(left: Left, right: Right) {\n return new IntersectionSchema<Left, Right>(left, right)\n}\n\nexport { refine }\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function discriminatedUnion<\n const Discriminator extends string,\n const Options extends DiscriminatedUnionVariants<Discriminator>,\n>(discriminator: Discriminator, variants: Options) {\n return new DiscriminatedUnionSchema<Discriminator, Options>(\n discriminator,\n variants,\n )\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function token<const N extends NsidString, const H extends string>(\n nsid: N,\n hash: H,\n) {\n return new TokenSchema($type(nsid, hash))\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function typedRef<const V extends { $type?: string }>(\n get: TypedRefGetter<V>,\n) {\n return new TypedRefSchema<V>(get)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function typedUnion<\n const R extends readonly TypedRefSchema[],\n const C extends boolean,\n>(refs: R, closed: C) {\n return new TypedUnionSchema<R, C>(refs, closed)\n}\n\n/**\n * This function offers two overloads:\n * - One that allows creating a {@link TypedObjectSchema}, and infer the output\n * type from the provided arguments, without requiring to specify any of the\n * generics. This is useful when you want to define a record without\n * explicitly defining its interface. This version does not support circular\n * references, as TypeScript cannot infer types in such cases.\n * - One allows creating a {@link TypedObjectSchema} with an explicitly defined\n * interface. This will typically be used by codegen (`lex build`) to generate\n * schemas that work even if they contain circular references.\n */\nexport function typedObject<\n const N extends NsidString,\n const H extends string,\n const S extends Validator<{ [k: string]: unknown }>,\n>(nsid: N, hash: H, schema: S): TypedObjectSchema<$Type<N, H>, S>\nexport function typedObject<V extends { $type?: $Type }>(\n nsid: V extends { $type?: infer T extends string }\n ? T extends `${infer N}#${string}`\n ? N\n : T // (T is a \"main\" type, so already an NSID)\n : never,\n hash: V extends { $type?: infer T extends string }\n ? T extends `${string}#${infer H}`\n ? H\n : 'main'\n : never,\n schema: Validator<Omit<V, '$type'>>,\n): TypedObjectSchema<$TypeOf<V>, Validator<Omit<V, '$type'>>>\n/*@__NO_SIDE_EFFECTS__*/\nexport function typedObject<\n const N extends NsidString,\n const H extends string,\n const S extends Validator<{ [k: string]: unknown }>,\n>(nsid: N, hash: H, schema: S) {\n return new TypedObjectSchema<$Type<N, H>, S>($type(nsid, hash), schema)\n}\n\n/**\n * Ensures that a `$type` used in a record is a valid NSID (i.e. no fragment).\n */\ntype AsNsid<T> = T extends `${string}#${string}` ? never : T\n\n/**\n * This function offers two overloads:\n * - One that allows creating a {@link RecordSchema}, and infer the output type\n * from the provided arguments, without requiring to specify any of the\n * generics. This is useful when you want to define a record without\n * explicitly defining its interface. This version does not support circular\n * references, as TypeScript cannot infer types in such cases.\n * - One allows creating a {@link RecordSchema} with an explicitly defined\n * interface. This will typically be used by codegen (`lex build`) to generate\n * schemas that work even if they contain circular references.\n */\nexport function record<\n const K extends LexiconRecordKey,\n const T extends NsidString,\n const S extends Validator<{ [k: string]: unknown }>,\n>(key: K, type: AsNsid<T>, schema: S): RecordSchema<K, T, S>\nexport function record<\n const K extends LexiconRecordKey,\n const V extends { $type: NsidString },\n>(\n key: K,\n type: AsNsid<V['$type']>,\n schema: Validator<Omit<V, '$type'>>,\n): RecordSchema<K, V['$type'], Validator<Omit<V, '$type'>>>\n/*@__NO_SIDE_EFFECTS__*/\nexport function record<\n const K extends LexiconRecordKey,\n const T extends NsidString,\n const S extends Validator<{ [k: string]: unknown }>,\n>(key: K, type: T, schema: S) {\n return new RecordSchema<K, T, S>(key, type, schema)\n}\n\nexport const params = /*#__PURE__*/ memoizedOptions(function <\n const P extends ParamsSchemaShape = NonNullable<unknown>,\n>(properties: P = {} as P) {\n return new ParamsSchema<P>(properties)\n})\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function payload<\n const E extends string | undefined = undefined,\n const S extends PayloadSchema<E> = undefined,\n>(encoding: E = undefined as E, schema: S = undefined as S) {\n return new Payload<E, S>(encoding, schema)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function jsonPayload<const P extends ObjectSchemaShape>(\n properties: P,\n): Payload<'application/json', ObjectSchema<P>> {\n return payload('application/json', object(properties))\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function query<\n const N extends NsidString,\n const P extends ParamsSchema,\n const O extends Payload,\n const E extends undefined | readonly string[] = undefined,\n>(nsid: N, parameters: P, output: O, errors: E = undefined as E) {\n return new Query<N, P, O, E>(nsid, parameters, output, errors)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function procedure<\n const N extends NsidString,\n const P extends ParamsSchema,\n const I extends Payload,\n const O extends Payload,\n const E extends undefined | readonly string[] = undefined,\n>(nsid: N, parameters: P, input: I, output: O, errors: E = undefined as E) {\n return new Procedure<N, P, I, O, E>(nsid, parameters, input, output, errors)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function subscription<\n const N extends NsidString,\n const P extends ParamsSchema,\n const M extends Schema,\n const E extends undefined | readonly string[] = undefined,\n>(nsid: N, parameters: P, message: M, errors: E = undefined as E) {\n return new Subscription<N, P, M, E>(nsid, parameters, message, errors)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function permission<\n const R extends string,\n const O extends PermissionOptions,\n>(resource: R, options: PermissionOptions & O = {} as O) {\n return new Permission<R, O>(resource, options)\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function permissionSet<\n const N extends NsidString,\n const P extends readonly Permission[],\n>(nsid: N, permissions: P, options?: PermissionSetOptions) {\n return new PermissionSet<N, P>(nsid, permissions, options)\n}\n"]}
@@ -1,15 +1,11 @@
1
- import { BlobRef, LegacyBlobRef } from '@atproto/lex-data';
1
+ import { BlobRef, BlobRefCheckOptions, LegacyBlobRef } from '@atproto/lex-data';
2
2
  import { Schema, ValidationResult, ValidatorContext } from '../core.js';
3
- export type BlobSchemaOptions = {
3
+ export type BlobSchemaOptions = BlobRefCheckOptions & {
4
4
  /**
5
5
  * Whether to allow legacy blob references format
6
6
  * @see {@link LegacyBlobRef}
7
7
  */
8
8
  allowLegacy?: boolean;
9
- /**
10
- * Whether to enforce strict validation on the blob reference (CID version, codec, hash function)
11
- */
12
- strict?: boolean;
13
9
  /**
14
10
  * List of accepted mime types
15
11
  */
@@ -1 +1 @@
1
- {"version":3,"file":"blob.d.ts","sourceRoot":"","sources":["../../src/schema/blob.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,aAAa,EAGd,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAEvE,MAAM,MAAM,iBAAiB,GAAG;IAC9B;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;OAEG;IACH,MAAM,CAAC,EAAE,OAAO,CAAA;IAChB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,CAAA;AAEtC,MAAM,MAAM,gBAAgB,CAAC,OAAO,IAAI,OAAO,SAAS;IAAE,WAAW,EAAE,IAAI,CAAA;CAAE,GACzE,OAAO,GAAG,aAAa,GACvB,OAAO,CAAA;AAEX,qBAAa,UAAU,CAAC,CAAC,SAAS,iBAAiB,CAAE,SAAQ,MAAM,CACjE,gBAAgB,CAAC,CAAC,CAAC,CACpB;IACa,QAAQ,CAAC,OAAO,EAAE,CAAC;gBAAV,OAAO,EAAE,CAAC;IAI/B,iBAAiB,CACf,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IA2BxC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAKnC"}
1
+ {"version":3,"file":"blob.d.ts","sourceRoot":"","sources":["../../src/schema/blob.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,mBAAmB,EACnB,aAAa,EAGd,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAEvE,MAAM,MAAM,iBAAiB,GAAG,mBAAmB,GAAG;IACpD;;;OAGG;IACH,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB;;OAEG;IACH,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;IACjB;;OAEG;IACH,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB,CAAA;AAED,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,CAAA;AAEtC,MAAM,MAAM,gBAAgB,CAAC,OAAO,IAAI,OAAO,SAAS;IAAE,WAAW,EAAE,IAAI,CAAA;CAAE,GACzE,OAAO,GAAG,aAAa,GACvB,OAAO,CAAA;AAEX,qBAAa,UAAU,CAAC,CAAC,SAAS,iBAAiB,CAAE,SAAQ,MAAM,CACjE,gBAAgB,CAAC,CAAC,CAAC,CACpB;IACa,QAAQ,CAAC,OAAO,EAAE,CAAC;gBAAV,OAAO,EAAE,CAAC;IAI/B,iBAAiB,CACf,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC;IA2BxC,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;CAKnC"}
@@ -1 +1 @@
1
- {"version":3,"file":"blob.js","sourceRoot":"","sources":["../../src/schema/blob.ts"],"names":[],"mappings":";;;AAAA,gDAK0B;AAC1B,wCAAuE;AA4BvE,MAAa,UAAwC,SAAQ,gBAE5D;IACsB;IAArB,YAAqB,OAAU;QAC7B,KAAK,EAAE,CAAA;QADY,YAAO,GAAP,OAAO,CAAG;IAE/B,CAAC;IAED,iBAAiB,CACf,KAAc,EACd,GAAqB;QAErB,MAAM,IAAI,GACP,KAAa,EAAE,KAAK,KAAK,SAAS;YACjC,CAAC,CAAC,IAAA,oBAAS,EAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;gBAC9B,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,IAAI;YACR,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,IAAI,IAAI,IAAA,0BAAe,EAAC,KAAK,CAAC;gBAC3D,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,IAAI,CAAA;QAEZ,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAC5C,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QAC/B,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;YAClD,OAAO,GAAG,CAAC,yBAAyB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;QAChE,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QAChC,IAAI,OAAO,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC;YAC7D,OAAO,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1D,CAAC;QAED,OAAO,GAAG,CAAC,OAAO,CAAC,IAA2B,CAAC,CAAA;IACjD,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QAC/B,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QACxB,OAAO,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAClC,CAAC;CACF;AA1CD,gCA0CC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,QAAkB;IACnD,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACzC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACxC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC","sourcesContent":["import {\n BlobRef,\n LegacyBlobRef,\n isBlobRef,\n isLegacyBlobRef,\n} from '@atproto/lex-data'\nimport { Schema, ValidationResult, ValidatorContext } from '../core.js'\n\nexport type BlobSchemaOptions = {\n /**\n * Whether to allow legacy blob references format\n * @see {@link LegacyBlobRef}\n */\n allowLegacy?: boolean\n /**\n * Whether to enforce strict validation on the blob reference (CID version, codec, hash function)\n */\n strict?: boolean\n /**\n * List of accepted mime types\n */\n accept?: string[]\n /**\n * Maximum size in bytes\n */\n maxSize?: number\n}\n\nexport type { BlobRef, LegacyBlobRef }\n\nexport type BlobSchemaOutput<Options> = Options extends { allowLegacy: true }\n ? BlobRef | LegacyBlobRef\n : BlobRef\n\nexport class BlobSchema<O extends BlobSchemaOptions> extends Schema<\n BlobSchemaOutput<O>\n> {\n constructor(readonly options: O) {\n super()\n }\n\n validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n ): ValidationResult<BlobSchemaOutput<O>> {\n const blob: null | BlobRef | LegacyBlobRef =\n (input as any)?.$type !== undefined\n ? isBlobRef(input, this.options)\n ? input\n : null\n : this.options.allowLegacy === true && isLegacyBlobRef(input)\n ? input\n : null\n\n if (!blob) {\n return ctx.issueInvalidType(input, 'blob')\n }\n\n const { accept } = this.options\n if (accept && !matchesMime(blob.mimeType, accept)) {\n return ctx.issueInvalidPropertyValue(blob, 'mimeType', accept)\n }\n\n const { maxSize } = this.options\n if (maxSize != null && 'size' in blob && blob.size > maxSize) {\n return ctx.issueTooBig(blob, 'blob', maxSize, blob.size)\n }\n\n return ctx.success(blob as BlobSchemaOutput<O>)\n }\n\n matchesMime(mime: string): boolean {\n const { accept } = this.options\n if (!accept) return true\n return matchesMime(mime, accept)\n }\n}\n\nfunction matchesMime(mime: string, accepted: string[]): boolean {\n if (accepted.includes('*/*')) return true\n if (accepted.includes(mime)) return true\n for (const value of accepted) {\n if (value.endsWith('/*') && mime.startsWith(value.slice(0, -1))) {\n return true\n }\n }\n return false\n}\n"]}
1
+ {"version":3,"file":"blob.js","sourceRoot":"","sources":["../../src/schema/blob.ts"],"names":[],"mappings":";;;AAAA,gDAM0B;AAC1B,wCAAuE;AAwBvE,MAAa,UAAwC,SAAQ,gBAE5D;IACsB;IAArB,YAAqB,OAAU;QAC7B,KAAK,EAAE,CAAA;QADY,YAAO,GAAP,OAAO,CAAG;IAE/B,CAAC;IAED,iBAAiB,CACf,KAAc,EACd,GAAqB;QAErB,MAAM,IAAI,GACP,KAAa,EAAE,KAAK,KAAK,SAAS;YACjC,CAAC,CAAC,IAAA,oBAAS,EAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC;gBAC9B,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,IAAI;YACR,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,WAAW,KAAK,IAAI,IAAI,IAAA,0BAAe,EAAC,KAAK,CAAC;gBAC3D,CAAC,CAAC,KAAK;gBACP,CAAC,CAAC,IAAI,CAAA;QAEZ,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAA;QAC5C,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QAC/B,IAAI,MAAM,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE,CAAC;YAClD,OAAO,GAAG,CAAC,yBAAyB,CAAC,IAAI,EAAE,UAAU,EAAE,MAAM,CAAC,CAAA;QAChE,CAAC;QAED,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QAChC,IAAI,OAAO,IAAI,IAAI,IAAI,MAAM,IAAI,IAAI,IAAI,IAAI,CAAC,IAAI,GAAG,OAAO,EAAE,CAAC;YAC7D,OAAO,GAAG,CAAC,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,IAAI,CAAC,CAAA;QAC1D,CAAC;QAED,OAAO,GAAG,CAAC,OAAO,CAAC,IAA2B,CAAC,CAAA;IACjD,CAAC;IAED,WAAW,CAAC,IAAY;QACtB,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAA;QAC/B,IAAI,CAAC,MAAM;YAAE,OAAO,IAAI,CAAA;QACxB,OAAO,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IAClC,CAAC;CACF;AA1CD,gCA0CC;AAED,SAAS,WAAW,CAAC,IAAY,EAAE,QAAkB;IACnD,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,IAAI,CAAA;IACzC,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;QAAE,OAAO,IAAI,CAAA;IACxC,KAAK,MAAM,KAAK,IAAI,QAAQ,EAAE,CAAC;QAC7B,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAChE,OAAO,IAAI,CAAA;QACb,CAAC;IACH,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC","sourcesContent":["import {\n BlobRef,\n BlobRefCheckOptions,\n LegacyBlobRef,\n isBlobRef,\n isLegacyBlobRef,\n} from '@atproto/lex-data'\nimport { Schema, ValidationResult, ValidatorContext } from '../core.js'\n\nexport type BlobSchemaOptions = BlobRefCheckOptions & {\n /**\n * Whether to allow legacy blob references format\n * @see {@link LegacyBlobRef}\n */\n allowLegacy?: boolean\n /**\n * List of accepted mime types\n */\n accept?: string[]\n /**\n * Maximum size in bytes\n */\n maxSize?: number\n}\n\nexport type { BlobRef, LegacyBlobRef }\n\nexport type BlobSchemaOutput<Options> = Options extends { allowLegacy: true }\n ? BlobRef | LegacyBlobRef\n : BlobRef\n\nexport class BlobSchema<O extends BlobSchemaOptions> extends Schema<\n BlobSchemaOutput<O>\n> {\n constructor(readonly options: O) {\n super()\n }\n\n validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n ): ValidationResult<BlobSchemaOutput<O>> {\n const blob: null | BlobRef | LegacyBlobRef =\n (input as any)?.$type !== undefined\n ? isBlobRef(input, this.options)\n ? input\n : null\n : this.options.allowLegacy === true && isLegacyBlobRef(input)\n ? input\n : null\n\n if (!blob) {\n return ctx.issueInvalidType(input, 'blob')\n }\n\n const { accept } = this.options\n if (accept && !matchesMime(blob.mimeType, accept)) {\n return ctx.issueInvalidPropertyValue(blob, 'mimeType', accept)\n }\n\n const { maxSize } = this.options\n if (maxSize != null && 'size' in blob && blob.size > maxSize) {\n return ctx.issueTooBig(blob, 'blob', maxSize, blob.size)\n }\n\n return ctx.success(blob as BlobSchemaOutput<O>)\n }\n\n matchesMime(mime: string): boolean {\n const { accept } = this.options\n if (!accept) return true\n return matchesMime(mime, accept)\n }\n}\n\nfunction matchesMime(mime: string, accepted: string[]): boolean {\n if (accepted.includes('*/*')) return true\n if (accepted.includes(mime)) return true\n for (const value of accepted) {\n if (value.endsWith('/*') && mime.startsWith(value.slice(0, -1))) {\n return true\n }\n }\n return false\n}\n"]}
@@ -1,20 +1,11 @@
1
- import { Cid } from '@atproto/lex-data';
1
+ import { Cid, CidCheckOptions, InferCheckedCid } from '@atproto/lex-data';
2
2
  import { Schema, ValidationResult, ValidatorContext } from '../core.js';
3
3
  export type { Cid };
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
- */
13
- strict?: boolean;
14
- };
15
- export declare class CidSchema extends Schema<Cid> {
16
- readonly options: CidSchemaOptions;
17
- constructor(options?: CidSchemaOptions);
18
- validateInContext(input: unknown, ctx: ValidatorContext): ValidationResult<Cid>;
4
+ export type CidSchemaOptions = CidCheckOptions;
5
+ export type CidSchemaOutput<TOptions extends CidSchemaOptions> = InferCheckedCid<TOptions>;
6
+ export declare class CidSchema<TOptions extends CidSchemaOptions> extends Schema<CidSchemaOutput<TOptions>> {
7
+ readonly options: TOptions;
8
+ constructor(options: TOptions);
9
+ validateInContext(input: unknown, ctx: ValidatorContext): ValidationResult<CidSchemaOutput<TOptions>>;
19
10
  }
20
11
  //# sourceMappingURL=cid.d.ts.map
@@ -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,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAEvE,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"}
1
+ {"version":3,"file":"cid.d.ts","sourceRoot":"","sources":["../../src/schema/cid.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,eAAe,EAAE,eAAe,EAAS,MAAM,mBAAmB,CAAA;AAChF,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAEvE,YAAY,EAAE,GAAG,EAAE,CAAA;AAEnB,MAAM,MAAM,gBAAgB,GAAG,eAAe,CAAA;AAC9C,MAAM,MAAM,eAAe,CAAC,QAAQ,SAAS,gBAAgB,IAC3D,eAAe,CAAC,QAAQ,CAAC,CAAA;AAE3B,qBAAa,SAAS,CAAC,QAAQ,SAAS,gBAAgB,CAAE,SAAQ,MAAM,CACtE,eAAe,CAAC,QAAQ,CAAC,CAC1B;IACa,QAAQ,CAAC,OAAO,EAAE,QAAQ;gBAAjB,OAAO,EAAE,QAAQ;IAItC,iBAAiB,CACf,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAC;CAO/C"}
@@ -5,7 +5,7 @@ const lex_data_1 = require("@atproto/lex-data");
5
5
  const core_js_1 = require("../core.js");
6
6
  class CidSchema extends core_js_1.Schema {
7
7
  options;
8
- constructor(options = {}) {
8
+ constructor(options) {
9
9
  super();
10
10
  this.options = options;
11
11
  }
@@ -1 +1 @@
1
- {"version":3,"file":"cid.js","sourceRoot":"","sources":["../../src/schema/cid.ts"],"names":[],"mappings":";;;AAAA,gDAA8C;AAC9C,wCAAuE;AAgBvE,MAAa,SAAU,SAAQ,gBAAW;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 '../core.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"]}
1
+ {"version":3,"file":"cid.js","sourceRoot":"","sources":["../../src/schema/cid.ts"],"names":[],"mappings":";;;AAAA,gDAAgF;AAChF,wCAAuE;AAQvE,MAAa,SAA6C,SAAQ,gBAEjE;IACsB;IAArB,YAAqB,OAAiB;QACpC,KAAK,EAAE,CAAA;QADY,YAAO,GAAP,OAAO,CAAU;IAEtC,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;AAjBD,8BAiBC","sourcesContent":["import { Cid, CidCheckOptions, InferCheckedCid, isCid } from '@atproto/lex-data'\nimport { Schema, ValidationResult, ValidatorContext } from '../core.js'\n\nexport type { Cid }\n\nexport type CidSchemaOptions = CidCheckOptions\nexport type CidSchemaOutput<TOptions extends CidSchemaOptions> =\n InferCheckedCid<TOptions>\n\nexport class CidSchema<TOptions extends CidSchemaOptions> extends Schema<\n CidSchemaOutput<TOptions>\n> {\n constructor(readonly options: TOptions) {\n super()\n }\n\n validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n ): ValidationResult<CidSchemaOutput<TOptions>> {\n if (!isCid(input, this.options)) {\n return ctx.issueInvalidType(input, 'cid')\n }\n\n return ctx.success(input)\n }\n}\n"]}
@@ -1,11 +1,9 @@
1
- import { Infer, LexiconRecordKey, NsidString, Schema, Simplify, TidString, ValidationResult, Validator, ValidatorContext } from '../core.js';
1
+ import { $Typed, Infer, LexiconRecordKey, NsidString, Schema, TidString, ValidationResult, Validator, ValidatorContext } from '../core.js';
2
2
  import { TypedObject } from './typed-union.js';
3
3
  export type InferRecordKey<R extends RecordSchema> = R extends RecordSchema<infer K> ? RecordKeySchemaOutput<K> : never;
4
4
  export type RecordSchemaOutput<T extends NsidString, S extends Validator<{
5
5
  [k: string]: unknown;
6
- }>> = Simplify<{
7
- $type: T;
8
- } & Omit<Infer<S>, '$type'>>;
6
+ }>> = $Typed<Infer<S>, T>;
9
7
  export declare class RecordSchema<K extends LexiconRecordKey = any, T extends NsidString = any, S extends Validator<{
10
8
  [k: string]: unknown;
11
9
  }> = any> extends Schema<RecordSchemaOutput<T, S>> {
@@ -17,20 +15,18 @@ export declare class RecordSchema<K extends LexiconRecordKey = any, T extends Ns
17
15
  isTypeOf<X extends {
18
16
  $type?: unknown;
19
17
  }>(value: X): value is Exclude<X extends {
20
- $type?: T;
21
- } ? X : X & {
22
- $type?: T;
23
- }, TypedObject>;
24
- build<X extends Omit<Infer<S>, '$type'>>(input: X): Simplify<Omit<X, '$type'> & {
25
18
  $type: T;
26
- }>;
19
+ } ? X : $Typed<X, T>, TypedObject>;
20
+ build<X extends Omit<Infer<S>, '$type'>>(input: X): $Typed<Omit<X, '$type'>, T>;
27
21
  $isTypeOf<X extends {
28
22
  $type?: unknown;
29
23
  }>(value: X): value is Exclude<X extends {
30
- $type?: T;
24
+ $type: T;
31
25
  } ? X : X & {
32
- $type?: T;
33
- }, TypedObject>;
26
+ $type: T;
27
+ } extends infer T_1 ? { [K_1 in keyof T_1]: (X & {
28
+ $type: T;
29
+ })[K_1]; } : never, TypedObject>;
34
30
  $build<X extends Omit<Infer<S>, '$type'>>(input: X): Omit<X, "$type"> & {
35
31
  $type: T;
36
32
  } extends infer T_1 ? { [K_1 in keyof T_1]: (Omit<X, "$type"> & {
@@ -1 +1 @@
1
- {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/schema/record.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,KAAK,EACL,gBAAgB,EAChB,UAAU,EACV,MAAM,EACN,QAAQ,EACR,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EACjB,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,YAAY,IAC/C,CAAC,SAAS,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;AAEpE,MAAM,MAAM,kBAAkB,CAC5B,CAAC,SAAS,UAAU,EACpB,CAAC,SAAS,SAAS,CAAC;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,IAC3C,QAAQ,CAAC;IAAE,KAAK,EAAE,CAAC,CAAA;CAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC,CAAA;AAEpD,qBAAa,YAAY,CACvB,CAAC,SAAS,gBAAgB,GAAG,GAAG,EAChC,CAAC,SAAS,UAAU,GAAG,GAAG,EAC1B,CAAC,SAAS,SAAS,CAAC;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,GAAG,GAAG,CACnD,SAAQ,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAItC,QAAQ,CAAC,GAAG,EAAE,CAAC;IACf,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,MAAM,EAAE,CAAC;IALpB,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,CAAA;gBAGlB,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,CAAC;IAMpB,QAAQ,CAAC,CAAC,SAAS;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EACpC,KAAK,EAAE,CAAC,GACP,KAAK,IAAI,OAAO,CACjB,CAAC,SAAS;QAAE,KAAK,CAAC,EAAE,CAAC,CAAA;KAAE,GAAG,CAAC,GAAG,CAAC,GAAG;QAAE,KAAK,CAAC,EAAE,CAAC,CAAA;KAAE,EAC/C,WAAW,CACZ;IAID,KAAK,CAAC,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EACrC,KAAK,EAAE,CAAC,GACP,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG;QAAE,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC;IAI5C,SAAS,CAAC,CAAC,SAAS;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,KAAK,EAAE,CAAC;gBAZ3B,CAAC;;gBAAuB,CAAC;;IAgB/C,MAAM,CAAC,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;eARV,CAAC;;eAAD,CAAC;;IAYzC,iBAAiB,CACf,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAa9C;AAED,MAAM,MAAM,qBAAqB,CAAC,GAAG,SAAS,gBAAgB,IAC5D,GAAG,SAAS,KAAK,GACb,MAAM,GACN,GAAG,SAAS,KAAK,GACf,SAAS,GACT,GAAG,SAAS,MAAM,GAChB,UAAU,GACV,GAAG,SAAS,WAAW,MAAM,CAAC,SAAS,MAAM,EAAE,GAC7C,CAAC,GACD,KAAK,CAAA;AAEjB,MAAM,MAAM,eAAe,CAAC,GAAG,SAAS,gBAAgB,IAAI,MAAM,CAChE,qBAAqB,CAAC,GAAG,CAAC,CAC3B,CAAA"}
1
+ {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/schema/record.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,KAAK,EACL,gBAAgB,EAChB,UAAU,EACV,MAAM,EACN,SAAS,EACT,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EACjB,MAAM,YAAY,CAAA;AAGnB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,MAAM,MAAM,cAAc,CAAC,CAAC,SAAS,YAAY,IAC/C,CAAC,SAAS,YAAY,CAAC,MAAM,CAAC,CAAC,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAAG,KAAK,CAAA;AAEpE,MAAM,MAAM,kBAAkB,CAC5B,CAAC,SAAS,UAAU,EACpB,CAAC,SAAS,SAAS,CAAC;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,IAC3C,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAEvB,qBAAa,YAAY,CACvB,CAAC,SAAS,gBAAgB,GAAG,GAAG,EAChC,CAAC,SAAS,UAAU,GAAG,GAAG,EAC1B,CAAC,SAAS,SAAS,CAAC;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,GAAG,GAAG,CACnD,SAAQ,MAAM,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAItC,QAAQ,CAAC,GAAG,EAAE,CAAC;IACf,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,MAAM,EAAE,CAAC;IALpB,SAAS,EAAE,eAAe,CAAC,CAAC,CAAC,CAAA;gBAGlB,GAAG,EAAE,CAAC,EACN,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,CAAC;IAMpB,QAAQ,CAAC,CAAC,SAAS;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EACpC,KAAK,EAAE,CAAC,GACP,KAAK,IAAI,OAAO,CAAC,CAAC,SAAS;QAAE,KAAK,EAAE,CAAC,CAAA;KAAE,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,WAAW,CAAC;IAI3E,KAAK,CAAC,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EACrC,KAAK,EAAE,CAAC,GACP,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAM9B,SAAS,CAAC,CAAC,SAAS;QAAE,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,KAAK,EAAE,CAAC;eAZV,CAAC;;;;;;IAgBxC,MAAM,CAAC,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;;;;;IAIlD,iBAAiB,CACf,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,kBAAkB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAa9C;AAED,MAAM,MAAM,qBAAqB,CAAC,GAAG,SAAS,gBAAgB,IAC5D,GAAG,SAAS,KAAK,GACb,MAAM,GACN,GAAG,SAAS,KAAK,GACf,SAAS,GACT,GAAG,SAAS,MAAM,GAChB,UAAU,GACV,GAAG,SAAS,WAAW,MAAM,CAAC,SAAS,MAAM,EAAE,GAC7C,CAAC,GACD,KAAK,CAAA;AAEjB,MAAM,MAAM,eAAe,CAAC,GAAG,SAAS,gBAAgB,IAAI,MAAM,CAChE,qBAAqB,CAAC,GAAG,CAAC,CAC3B,CAAA"}
@@ -20,7 +20,9 @@ class RecordSchema extends core_js_1.Schema {
20
20
  return value.$type === this.$type;
21
21
  }
22
22
  build(input) {
23
- return { ...input, $type: this.$type };
23
+ return input.$type === this.$type
24
+ ? input
25
+ : { ...input, $type: this.$type };
24
26
  }
25
27
  $isTypeOf(value) {
26
28
  return this.isTypeOf(value);
@@ -1 +1 @@
1
- {"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/schema/record.ts"],"names":[],"mappings":";;;AAAA,wCAUmB;AACnB,6CAA4C;AAC5C,2CAA0C;AAW1C,MAAa,YAIX,SAAQ,gBAAgC;IAI7B;IACA;IACA;IALX,SAAS,CAAoB;IAE7B,YACW,GAAM,EACN,KAAQ,EACR,MAAS;QAElB,KAAK,EAAE,CAAA;QAJE,QAAG,GAAH,GAAG,CAAG;QACN,UAAK,GAAL,KAAK,CAAG;QACR,WAAM,GAAN,MAAM,CAAG;QAGlB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;IACjC,CAAC;IAED,QAAQ,CACN,KAAQ;QAKR,OAAO,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAA;IACnC,CAAC;IAED,KAAK,CACH,KAAQ;QAER,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAA;IACxC,CAAC;IAED,SAAS,CAAgC,KAAQ;QAC/C,OAAO,IAAI,CAAC,QAAQ,CAAI,KAAK,CAAC,CAAA;IAChC,CAAC;IAED,MAAM,CAAoC,KAAQ;QAChD,OAAO,IAAI,CAAC,KAAK,CAAI,KAAK,CAAC,CAAA;IAC7B,CAAC;IAED,iBAAiB,CACf,KAAc,EACd,GAAqB;QAErB,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAE/C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,MAAM,CAAA;QACf,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACtC,OAAO,GAAG,CAAC,yBAAyB,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QAC3E,CAAC;QAED,OAAO,MAAoD,CAAA;IAC7D,CAAC;CACF;AAvDD,oCAuDC;AAiBD,MAAM,SAAS,GAAG,IAAI,wBAAY,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAA;AACpD,MAAM,SAAS,GAAG,IAAI,wBAAY,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;AACrD,MAAM,UAAU,GAAG,IAAI,wBAAY,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;AACvD,MAAM,iBAAiB,GAAG,IAAI,0BAAa,CAAC,MAAM,CAAC,CAAA;AAEnD,SAAS,SAAS,CAChB,GAAQ;IAER,gDAAgD;IAChD,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,SAAgB,CAAA;IAC1C,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,SAAgB,CAAA;IAC1C,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,UAAiB,CAAA;IAC5C,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAA+B,CAAA;QACxD,IAAI,KAAK,KAAK,MAAM;YAAE,OAAO,iBAAwB,CAAA;QACrD,OAAO,IAAI,0BAAa,CAAC,KAAK,CAAC,CAAA;IACjC,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAA;AACxD,CAAC","sourcesContent":["import {\n Infer,\n LexiconRecordKey,\n NsidString,\n Schema,\n Simplify,\n TidString,\n ValidationResult,\n Validator,\n ValidatorContext,\n} from '../core.js'\nimport { LiteralSchema } from './literal.js'\nimport { StringSchema } from './string.js'\nimport { TypedObject } from './typed-union.js'\n\nexport type InferRecordKey<R extends RecordSchema> =\n R extends RecordSchema<infer K> ? RecordKeySchemaOutput<K> : never\n\nexport type RecordSchemaOutput<\n T extends NsidString,\n S extends Validator<{ [k: string]: unknown }>,\n> = Simplify<{ $type: T } & Omit<Infer<S>, '$type'>>\n\nexport class RecordSchema<\n K extends LexiconRecordKey = any,\n T extends NsidString = any,\n S extends Validator<{ [k: string]: unknown }> = any,\n> extends Schema<RecordSchemaOutput<T, S>> {\n keySchema: RecordKeySchema<K>\n\n constructor(\n readonly key: K,\n readonly $type: T,\n readonly schema: S,\n ) {\n super()\n this.keySchema = recordKey(key)\n }\n\n isTypeOf<X extends { $type?: unknown }>(\n value: X,\n ): value is Exclude<\n X extends { $type?: T } ? X : X & { $type?: T },\n TypedObject\n > {\n return value.$type === this.$type\n }\n\n build<X extends Omit<Infer<S>, '$type'>>(\n input: X,\n ): Simplify<Omit<X, '$type'> & { $type: T }> {\n return { ...input, $type: this.$type }\n }\n\n $isTypeOf<X extends { $type?: unknown }>(value: X) {\n return this.isTypeOf<X>(value)\n }\n\n $build<X extends Omit<Infer<S>, '$type'>>(input: X) {\n return this.build<X>(input)\n }\n\n validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n ): ValidationResult<RecordSchemaOutput<T, S>> {\n const result = ctx.validate(input, this.schema)\n\n if (!result.success) {\n return result\n }\n\n if (this.$type !== result.value.$type) {\n return ctx.issueInvalidPropertyValue(result.value, '$type', [this.$type])\n }\n\n return result as ValidationResult<RecordSchemaOutput<T, S>>\n }\n}\n\nexport type RecordKeySchemaOutput<Key extends LexiconRecordKey> =\n Key extends 'any'\n ? string\n : Key extends 'tid'\n ? TidString\n : Key extends 'nsid'\n ? NsidString\n : Key extends `literal:${infer L extends string}`\n ? L\n : never\n\nexport type RecordKeySchema<Key extends LexiconRecordKey> = Schema<\n RecordKeySchemaOutput<Key>\n>\n\nconst keySchema = new StringSchema({ minLength: 1 })\nconst tidSchema = new StringSchema({ format: 'tid' })\nconst nsidSchema = new StringSchema({ format: 'nsid' })\nconst selfLiteralSchema = new LiteralSchema('self')\n\nfunction recordKey<Key extends LexiconRecordKey>(\n key: Key,\n): RecordKeySchema<Key> {\n // @NOTE Use cached instances for common schemas\n if (key === 'any') return keySchema as any\n if (key === 'tid') return tidSchema as any\n if (key === 'nsid') return nsidSchema as any\n if (key.startsWith('literal:')) {\n const value = key.slice(8) as RecordKeySchemaOutput<Key>\n if (value === 'self') return selfLiteralSchema as any\n return new LiteralSchema(value)\n }\n\n throw new Error(`Unsupported record key type: ${key}`)\n}\n"]}
1
+ {"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/schema/record.ts"],"names":[],"mappings":";;;AAAA,wCAUmB;AACnB,6CAA4C;AAC5C,2CAA0C;AAW1C,MAAa,YAIX,SAAQ,gBAAgC;IAI7B;IACA;IACA;IALX,SAAS,CAAoB;IAE7B,YACW,GAAM,EACN,KAAQ,EACR,MAAS;QAElB,KAAK,EAAE,CAAA;QAJE,QAAG,GAAH,GAAG,CAAG;QACN,UAAK,GAAL,KAAK,CAAG;QACR,WAAM,GAAN,MAAM,CAAG;QAGlB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;IACjC,CAAC;IAED,QAAQ,CACN,KAAQ;QAER,OAAO,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAA;IACnC,CAAC;IAED,KAAK,CACH,KAAQ;QAER,OAAO,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;YAC/B,CAAC,CAAE,KAAsB;YACzB,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAA;IACrC,CAAC;IAED,SAAS,CAAgC,KAAQ;QAC/C,OAAO,IAAI,CAAC,QAAQ,CAAI,KAAK,CAAC,CAAA;IAChC,CAAC;IAED,MAAM,CAAoC,KAAQ;QAChD,OAAO,IAAI,CAAC,KAAK,CAAI,KAAK,CAAC,CAAA;IAC7B,CAAC;IAED,iBAAiB,CACf,KAAc,EACd,GAAqB;QAErB,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,CAAA;QAE/C,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;YACpB,OAAO,MAAM,CAAA;QACf,CAAC;QAED,IAAI,IAAI,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;YACtC,OAAO,GAAG,CAAC,yBAAyB,CAAC,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QAC3E,CAAC;QAED,OAAO,MAAoD,CAAA;IAC7D,CAAC;CACF;AAtDD,oCAsDC;AAiBD,MAAM,SAAS,GAAG,IAAI,wBAAY,CAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAA;AACpD,MAAM,SAAS,GAAG,IAAI,wBAAY,CAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;AACrD,MAAM,UAAU,GAAG,IAAI,wBAAY,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;AACvD,MAAM,iBAAiB,GAAG,IAAI,0BAAa,CAAC,MAAM,CAAC,CAAA;AAEnD,SAAS,SAAS,CAChB,GAAQ;IAER,gDAAgD;IAChD,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,SAAgB,CAAA;IAC1C,IAAI,GAAG,KAAK,KAAK;QAAE,OAAO,SAAgB,CAAA;IAC1C,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,UAAiB,CAAA;IAC5C,IAAI,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAA+B,CAAA;QACxD,IAAI,KAAK,KAAK,MAAM;YAAE,OAAO,iBAAwB,CAAA;QACrD,OAAO,IAAI,0BAAa,CAAC,KAAK,CAAC,CAAA;IACjC,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAA;AACxD,CAAC","sourcesContent":["import {\n $Typed,\n Infer,\n LexiconRecordKey,\n NsidString,\n Schema,\n TidString,\n ValidationResult,\n Validator,\n ValidatorContext,\n} from '../core.js'\nimport { LiteralSchema } from './literal.js'\nimport { StringSchema } from './string.js'\nimport { TypedObject } from './typed-union.js'\n\nexport type InferRecordKey<R extends RecordSchema> =\n R extends RecordSchema<infer K> ? RecordKeySchemaOutput<K> : never\n\nexport type RecordSchemaOutput<\n T extends NsidString,\n S extends Validator<{ [k: string]: unknown }>,\n> = $Typed<Infer<S>, T>\n\nexport class RecordSchema<\n K extends LexiconRecordKey = any,\n T extends NsidString = any,\n S extends Validator<{ [k: string]: unknown }> = any,\n> extends Schema<RecordSchemaOutput<T, S>> {\n keySchema: RecordKeySchema<K>\n\n constructor(\n readonly key: K,\n readonly $type: T,\n readonly schema: S,\n ) {\n super()\n this.keySchema = recordKey(key)\n }\n\n isTypeOf<X extends { $type?: unknown }>(\n value: X,\n ): value is Exclude<X extends { $type: T } ? X : $Typed<X, T>, TypedObject> {\n return value.$type === this.$type\n }\n\n build<X extends Omit<Infer<S>, '$type'>>(\n input: X,\n ): $Typed<Omit<X, '$type'>, T> {\n return input.$type === this.$type\n ? (input as $Typed<X, T>)\n : { ...input, $type: this.$type }\n }\n\n $isTypeOf<X extends { $type?: unknown }>(value: X) {\n return this.isTypeOf<X>(value)\n }\n\n $build<X extends Omit<Infer<S>, '$type'>>(input: X) {\n return this.build<X>(input)\n }\n\n validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n ): ValidationResult<RecordSchemaOutput<T, S>> {\n const result = ctx.validate(input, this.schema)\n\n if (!result.success) {\n return result\n }\n\n if (this.$type !== result.value.$type) {\n return ctx.issueInvalidPropertyValue(result.value, '$type', [this.$type])\n }\n\n return result as ValidationResult<RecordSchemaOutput<T, S>>\n }\n}\n\nexport type RecordKeySchemaOutput<Key extends LexiconRecordKey> =\n Key extends 'any'\n ? string\n : Key extends 'tid'\n ? TidString\n : Key extends 'nsid'\n ? NsidString\n : Key extends `literal:${infer L extends string}`\n ? L\n : never\n\nexport type RecordKeySchema<Key extends LexiconRecordKey> = Schema<\n RecordKeySchemaOutput<Key>\n>\n\nconst keySchema = new StringSchema({ minLength: 1 })\nconst tidSchema = new StringSchema({ format: 'tid' })\nconst nsidSchema = new StringSchema({ format: 'nsid' })\nconst selfLiteralSchema = new LiteralSchema('self')\n\nfunction recordKey<Key extends LexiconRecordKey>(\n key: Key,\n): RecordKeySchema<Key> {\n // @NOTE Use cached instances for common schemas\n if (key === 'any') return keySchema as any\n if (key === 'tid') return tidSchema as any\n if (key === 'nsid') return nsidSchema as any\n if (key.startsWith('literal:')) {\n const value = key.slice(8) as RecordKeySchemaOutput<Key>\n if (value === 'self') return selfLiteralSchema as any\n return new LiteralSchema(value)\n }\n\n throw new Error(`Unsupported record key type: ${key}`)\n}\n"]}
@@ -94,7 +94,7 @@ function coerceToString(input) {
94
94
  if (input instanceof URL) {
95
95
  return input.toString();
96
96
  }
97
- const cid = (0, lex_data_1.asCid)(input);
97
+ const cid = (0, lex_data_1.ifCid)(input);
98
98
  if (cid)
99
99
  return cid.toString();
100
100
  if (input instanceof String) {
@@ -1 +1 @@
1
- {"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/schema/string.ts"],"names":[],"mappings":"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","sourcesContent":["import { asCid, graphemeLen, utf8Len } from '@atproto/lex-data'\nimport {\n InferStringFormat,\n Schema,\n StringFormat,\n ValidationResult,\n ValidatorContext,\n assertStringFormat,\n} from '../core.js'\nimport { TokenSchema } from './token.js'\n\nexport type StringSchemaOptions = {\n default?: string\n format?: StringFormat\n minLength?: number\n maxLength?: number\n minGraphemes?: number\n maxGraphemes?: number\n}\n\nexport type StringSchemaOutput<Options> =\n //\n Options extends { format: infer F extends StringFormat }\n ? InferStringFormat<F>\n : string\n\nexport class StringSchema<\n const Options extends StringSchemaOptions = any,\n> extends Schema<StringSchemaOutput<Options>> {\n constructor(readonly options: Options) {\n super()\n }\n\n validateInContext(\n // @NOTE validation will be applied on the default value as well\n input: unknown = this.options.default,\n ctx: ValidatorContext,\n ): ValidationResult<StringSchemaOutput<Options>> {\n const { options } = this\n\n const str = coerceToString(input)\n if (str == null) {\n return ctx.issueInvalidType(input, 'string')\n }\n\n let lazyUtf8Len: number\n\n const { minLength } = options\n if (minLength != null) {\n if ((lazyUtf8Len ??= utf8Len(str)) < minLength) {\n return ctx.issueTooSmall(str, 'string', minLength, lazyUtf8Len)\n }\n }\n\n const { maxLength } = options\n if (maxLength != null) {\n // Optimization: we can avoid computing the UTF-8 length if the maximum\n // possible length, in bytes, of the input JS string is smaller than the\n // maxLength (in UTF-8 string bytes).\n if (str.length * 3 <= maxLength) {\n // Input string so small it can't possibly exceed maxLength\n } else if ((lazyUtf8Len ??= utf8Len(str)) > maxLength) {\n return ctx.issueTooBig(str, 'string', maxLength, lazyUtf8Len)\n }\n }\n\n let lazyGraphLen: number\n\n const { minGraphemes } = options\n if (minGraphemes != null) {\n // Optimization: avoid counting graphemes if the length check already fails\n if (str.length < minGraphemes) {\n return ctx.issueTooSmall(str, 'grapheme', minGraphemes, str.length)\n } else if ((lazyGraphLen ??= graphemeLen(str)) < minGraphemes) {\n return ctx.issueTooSmall(str, 'grapheme', minGraphemes, lazyGraphLen)\n }\n }\n\n const { maxGraphemes } = options\n if (maxGraphemes != null) {\n if ((lazyGraphLen ??= graphemeLen(str)) > maxGraphemes) {\n return ctx.issueTooBig(str, 'grapheme', maxGraphemes, lazyGraphLen)\n }\n }\n\n if (options.format !== undefined) {\n try {\n // @TODO optimize to avoid throw cost (requires re-writing utilities\n // from @atproto/syntax)\n assertStringFormat(str, options.format)\n } catch (err) {\n const message = err instanceof Error ? err.message : undefined\n return ctx.issueInvalidFormat(str, options.format, message)\n }\n }\n\n return ctx.success(str as StringSchemaOutput<Options>)\n }\n}\n\nexport function coerceToString(input: unknown): string | null {\n switch (typeof input) {\n // @NOTE We do *not* coerce numbers/booleans to strings because that can\n // lead to them being accepted as string instead of being coerced to\n // number/boolean when the input is a string and the expected result is\n // number/boolean (e.g. in params).\n case 'string':\n return input\n case 'object': {\n if (input == null) return null\n\n // @NOTE Allow using TokenSchema instances in places expecting strings,\n // converting them to their string value.\n if (input instanceof TokenSchema) {\n return input.toString()\n }\n\n if (input instanceof Date) {\n if (Number.isNaN(input.getTime())) return null\n return input.toISOString()\n }\n\n if (input instanceof URL) {\n return input.toString()\n }\n\n const cid = asCid(input)\n if (cid) return cid.toString()\n\n if (input instanceof String) {\n return input.valueOf()\n }\n }\n\n // falls through\n default:\n return null\n }\n}\n"]}
1
+ {"version":3,"file":"string.js","sourceRoot":"","sources":["../../src/schema/string.ts"],"names":[],"mappings":"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","sourcesContent":["import { graphemeLen, ifCid, utf8Len } from '@atproto/lex-data'\nimport {\n InferStringFormat,\n Schema,\n StringFormat,\n ValidationResult,\n ValidatorContext,\n assertStringFormat,\n} from '../core.js'\nimport { TokenSchema } from './token.js'\n\nexport type StringSchemaOptions = {\n default?: string\n format?: StringFormat\n minLength?: number\n maxLength?: number\n minGraphemes?: number\n maxGraphemes?: number\n}\n\nexport type StringSchemaOutput<Options> =\n //\n Options extends { format: infer F extends StringFormat }\n ? InferStringFormat<F>\n : string\n\nexport class StringSchema<\n const Options extends StringSchemaOptions = any,\n> extends Schema<StringSchemaOutput<Options>> {\n constructor(readonly options: Options) {\n super()\n }\n\n validateInContext(\n // @NOTE validation will be applied on the default value as well\n input: unknown = this.options.default,\n ctx: ValidatorContext,\n ): ValidationResult<StringSchemaOutput<Options>> {\n const { options } = this\n\n const str = coerceToString(input)\n if (str == null) {\n return ctx.issueInvalidType(input, 'string')\n }\n\n let lazyUtf8Len: number\n\n const { minLength } = options\n if (minLength != null) {\n if ((lazyUtf8Len ??= utf8Len(str)) < minLength) {\n return ctx.issueTooSmall(str, 'string', minLength, lazyUtf8Len)\n }\n }\n\n const { maxLength } = options\n if (maxLength != null) {\n // Optimization: we can avoid computing the UTF-8 length if the maximum\n // possible length, in bytes, of the input JS string is smaller than the\n // maxLength (in UTF-8 string bytes).\n if (str.length * 3 <= maxLength) {\n // Input string so small it can't possibly exceed maxLength\n } else if ((lazyUtf8Len ??= utf8Len(str)) > maxLength) {\n return ctx.issueTooBig(str, 'string', maxLength, lazyUtf8Len)\n }\n }\n\n let lazyGraphLen: number\n\n const { minGraphemes } = options\n if (minGraphemes != null) {\n // Optimization: avoid counting graphemes if the length check already fails\n if (str.length < minGraphemes) {\n return ctx.issueTooSmall(str, 'grapheme', minGraphemes, str.length)\n } else if ((lazyGraphLen ??= graphemeLen(str)) < minGraphemes) {\n return ctx.issueTooSmall(str, 'grapheme', minGraphemes, lazyGraphLen)\n }\n }\n\n const { maxGraphemes } = options\n if (maxGraphemes != null) {\n if ((lazyGraphLen ??= graphemeLen(str)) > maxGraphemes) {\n return ctx.issueTooBig(str, 'grapheme', maxGraphemes, lazyGraphLen)\n }\n }\n\n if (options.format !== undefined) {\n try {\n // @TODO optimize to avoid throw cost (requires re-writing utilities\n // from @atproto/syntax)\n assertStringFormat(str, options.format)\n } catch (err) {\n const message = err instanceof Error ? err.message : undefined\n return ctx.issueInvalidFormat(str, options.format, message)\n }\n }\n\n return ctx.success(str as StringSchemaOutput<Options>)\n }\n}\n\nexport function coerceToString(input: unknown): string | null {\n switch (typeof input) {\n // @NOTE We do *not* coerce numbers/booleans to strings because that can\n // lead to them being accepted as string instead of being coerced to\n // number/boolean when the input is a string and the expected result is\n // number/boolean (e.g. in params).\n case 'string':\n return input\n case 'object': {\n if (input == null) return null\n\n // @NOTE Allow using TokenSchema instances in places expecting strings,\n // converting them to their string value.\n if (input instanceof TokenSchema) {\n return input.toString()\n }\n\n if (input instanceof Date) {\n if (Number.isNaN(input.getTime())) return null\n return input.toISOString()\n }\n\n if (input instanceof URL) {\n return input.toString()\n }\n\n const cid = ifCid(input)\n if (cid) return cid.toString()\n\n if (input instanceof String) {\n return input.valueOf()\n }\n }\n\n // falls through\n default:\n return null\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  import { Schema, ValidationResult, ValidatorContext } from '../core.js';
2
2
  export declare class TokenSchema<V extends string = any> extends Schema<V> {
3
- protected readonly value: V;
3
+ readonly value: V;
4
4
  constructor(value: V);
5
5
  validateInContext(input: unknown, ctx: ValidatorContext): ValidationResult<V>;
6
6
  toJSON(): string;
@@ -1 +1 @@
1
- {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/schema/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAEvE,qBAAa,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,GAAG,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IACpD,SAAS,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAAR,KAAK,EAAE,CAAC;IAIvC,iBAAiB,CACf,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,CAAC,CAAC;IAqBtB,MAAM,IAAI,MAAM;IAIhB,QAAQ,IAAI,MAAM;CAGnB"}
1
+ {"version":3,"file":"token.d.ts","sourceRoot":"","sources":["../../src/schema/token.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAA;AAEvE,qBAAa,WAAW,CAAC,CAAC,SAAS,MAAM,GAAG,GAAG,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;IACpD,QAAQ,CAAC,KAAK,EAAE,CAAC;gBAAR,KAAK,EAAE,CAAC;IAI7B,iBAAiB,CACf,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,CAAC,CAAC;IAqBtB,MAAM,IAAI,MAAM;IAIhB,QAAQ,IAAI,MAAM;CAGnB"}
@@ -1 +1 @@
1
- {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/schema/token.ts"],"names":[],"mappings":";;;AAAA,wCAAuE;AAEvE,MAAa,WAAoC,SAAQ,gBAAS;IACjC;IAA/B,YAA+B,KAAQ;QACrC,KAAK,EAAE,CAAA;QADsB,UAAK,GAAL,KAAK,CAAG;IAEvC,CAAC;IAED,iBAAiB,CACf,KAAc,EACd,GAAqB;QAErB,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACzB,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAChC,CAAC;QAED,0EAA0E;QAC1E,eAAe;QACf,IAAI,KAAK,YAAY,WAAW,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/D,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAChC,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAC7C,CAAC;QAED,OAAO,GAAG,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IACnD,CAAC;IAED,yEAAyE;IACzE,cAAc;IAEd,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;CACF;AApCD,kCAoCC","sourcesContent":["import { Schema, ValidationResult, ValidatorContext } from '../core.js'\n\nexport class TokenSchema<V extends string = any> extends Schema<V> {\n constructor(protected readonly value: V) {\n super()\n }\n\n validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n ): ValidationResult<V> {\n if (input === this.value) {\n return ctx.success(this.value)\n }\n\n // @NOTE: allow using the token instance itself (but convert to the actual\n // token value)\n if (input instanceof TokenSchema && input.value === this.value) {\n return ctx.success(this.value)\n }\n\n if (typeof input !== 'string') {\n return ctx.issueInvalidType(input, 'token')\n }\n\n return ctx.issueInvalidValue(input, [this.value])\n }\n\n // When using the TokenSchema instance as data, let's serialize it to the\n // token value\n\n toJSON(): string {\n return this.value\n }\n\n toString(): string {\n return this.value\n }\n}\n"]}
1
+ {"version":3,"file":"token.js","sourceRoot":"","sources":["../../src/schema/token.ts"],"names":[],"mappings":";;;AAAA,wCAAuE;AAEvE,MAAa,WAAoC,SAAQ,gBAAS;IAC3C;IAArB,YAAqB,KAAQ;QAC3B,KAAK,EAAE,CAAA;QADY,UAAK,GAAL,KAAK,CAAG;IAE7B,CAAC;IAED,iBAAiB,CACf,KAAc,EACd,GAAqB;QAErB,IAAI,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YACzB,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAChC,CAAC;QAED,0EAA0E;QAC1E,eAAe;QACf,IAAI,KAAK,YAAY,WAAW,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAAE,CAAC;YAC/D,OAAO,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAA;QAChC,CAAC;QAED,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YAC9B,OAAO,GAAG,CAAC,gBAAgB,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;QAC7C,CAAC;QAED,OAAO,GAAG,CAAC,iBAAiB,CAAC,KAAK,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IACnD,CAAC;IAED,yEAAyE;IACzE,cAAc;IAEd,MAAM;QACJ,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;IAED,QAAQ;QACN,OAAO,IAAI,CAAC,KAAK,CAAA;IACnB,CAAC;CACF;AApCD,kCAoCC","sourcesContent":["import { Schema, ValidationResult, ValidatorContext } from '../core.js'\n\nexport class TokenSchema<V extends string = any> extends Schema<V> {\n constructor(readonly value: V) {\n super()\n }\n\n validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n ): ValidationResult<V> {\n if (input === this.value) {\n return ctx.success(this.value)\n }\n\n // @NOTE: allow using the token instance itself (but convert to the actual\n // token value)\n if (input instanceof TokenSchema && input.value === this.value) {\n return ctx.success(this.value)\n }\n\n if (typeof input !== 'string') {\n return ctx.issueInvalidType(input, 'token')\n }\n\n return ctx.issueInvalidValue(input, [this.value])\n }\n\n // When using the TokenSchema instance as data, let's serialize it to the\n // token value\n\n toJSON(): string {\n return this.value\n }\n\n toString(): string {\n return this.value\n }\n}\n"]}
@@ -1,10 +1,8 @@
1
- import { $Type, Infer, Schema, Simplify, ValidationResult, Validator, ValidatorContext } from '../core.js';
1
+ import { $Type, $Typed, $TypedMaybe, Infer, Schema, ValidationResult, Validator, ValidatorContext } from '../core.js';
2
2
  import { TypedObject } from './typed-union.js';
3
3
  export type TypedObjectSchemaOutput<T extends $Type, S extends Validator<{
4
4
  [k: string]: unknown;
5
- }>> = Simplify<Infer<S> & {
6
- $type?: T;
7
- }>;
5
+ }>> = $TypedMaybe<Infer<S>, T>;
8
6
  export declare class TypedObjectSchema<const T extends $Type = any, const S extends Validator<{
9
7
  [k: string]: unknown;
10
8
  }> = any> extends Schema<TypedObjectSchemaOutput<T, S>> {
@@ -13,17 +11,15 @@ export declare class TypedObjectSchema<const T extends $Type = any, const S exte
13
11
  constructor($type: T, schema: S);
14
12
  isTypeOf<X extends Record<string, unknown>>(value: X): value is Exclude<X extends {
15
13
  $type?: T;
16
- } ? X : X & {
17
- $type?: T;
18
- }, TypedObject>;
19
- build<X extends Omit<Infer<S>, '$type'>>(input: X): Simplify<Omit<X, '$type'> & {
20
- $type: T;
21
- }>;
14
+ } ? X : $TypedMaybe<X, T>, TypedObject>;
15
+ build<X extends Omit<Infer<S>, '$type'>>(input: X): $Typed<Omit<X, '$type'>, T>;
22
16
  $isTypeOf<X extends Record<string, unknown>>(value: X): value is Exclude<X extends {
23
17
  $type?: T;
24
18
  } ? X : X & {
25
- $type?: T;
26
- }, TypedObject>;
19
+ $type?: T | undefined;
20
+ } extends infer T_1 ? { [K in keyof T_1]: (X & {
21
+ $type?: T | undefined;
22
+ })[K]; } : never, TypedObject>;
27
23
  $build<X extends Omit<Infer<S>, '$type'>>(input: X): Omit<X, "$type"> & {
28
24
  $type: T;
29
25
  } extends infer T_1 ? { [K in keyof T_1]: (Omit<X, "$type"> & {
@@ -1 +1 @@
1
- {"version":3,"file":"typed-object.d.ts","sourceRoot":"","sources":["../../src/schema/typed-object.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,EACL,KAAK,EACL,MAAM,EACN,QAAQ,EACR,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EACjB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,MAAM,MAAM,uBAAuB,CACjC,CAAC,SAAS,KAAK,EACf,CAAC,SAAS,SAAS,CAAC;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,IAC3C,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG;IAAE,KAAK,CAAC,EAAE,CAAC,CAAA;CAAE,CAAC,CAAA;AAEtC,qBAAa,iBAAiB,CAC5B,KAAK,CAAC,CAAC,SAAS,KAAK,GAAG,GAAG,EAC3B,KAAK,CAAC,CAAC,SAAS,SAAS,CAAC;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,GAAG,GAAG,CACzD,SAAQ,MAAM,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE3C,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,MAAM,EAAE,CAAC;gBADT,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,CAAC;IAKpB,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxC,KAAK,EAAE,CAAC,GACP,KAAK,IAAI,OAAO,CACjB,CAAC,SAAS;QAAE,KAAK,CAAC,EAAE,CAAC,CAAA;KAAE,GAAG,CAAC,GAAG,CAAC,GAAG;QAAE,KAAK,CAAC,EAAE,CAAC,CAAA;KAAE,EAC/C,WAAW,CACZ;IAID,KAAK,CAAC,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EACrC,KAAK,EAAE,CAAC,GACP,QAAQ,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,GAAG;QAAE,KAAK,EAAE,CAAC,CAAA;KAAE,CAAC;IAI5C,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;gBAZ/B,CAAC;;gBAAuB,CAAC;;IAgB/C,MAAM,CAAC,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;eARV,CAAC;;eAAD,CAAC;;IAYzC,iBAAiB,CACf,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAiBnD"}
1
+ {"version":3,"file":"typed-object.d.ts","sourceRoot":"","sources":["../../src/schema/typed-object.ts"],"names":[],"mappings":"AACA,OAAO,EACL,KAAK,EACL,MAAM,EACN,WAAW,EACX,KAAK,EACL,MAAM,EACN,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EACjB,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAA;AAE9C,MAAM,MAAM,uBAAuB,CACjC,CAAC,SAAS,KAAK,EACf,CAAC,SAAS,SAAS,CAAC;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,IAC3C,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;AAE5B,qBAAa,iBAAiB,CAC5B,KAAK,CAAC,CAAC,SAAS,KAAK,GAAG,GAAG,EAC3B,KAAK,CAAC,CAAC,SAAS,SAAS,CAAC;IAAE,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;CAAE,CAAC,GAAG,GAAG,CACzD,SAAQ,MAAM,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE3C,QAAQ,CAAC,KAAK,EAAE,CAAC;IACjB,QAAQ,CAAC,MAAM,EAAE,CAAC;gBADT,KAAK,EAAE,CAAC,EACR,MAAM,EAAE,CAAC;IAKpB,QAAQ,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxC,KAAK,EAAE,CAAC,GACP,KAAK,IAAI,OAAO,CACjB,CAAC,SAAS;QAAE,KAAK,CAAC,EAAE,CAAC,CAAA;KAAE,GAAG,CAAC,GAAG,WAAW,CAAC,CAAC,EAAE,CAAC,CAAC,EAC/C,WAAW,CACZ;IAID,KAAK,CAAC,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EACrC,KAAK,EAAE,CAAC,GACP,MAAM,CAAC,IAAI,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,CAAC,CAAC;IAM9B,SAAS,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;gBAd/B,CAAC;;;;;;IAkBvB,MAAM,CAAC,CAAC,SAAS,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,EAAE,KAAK,EAAE,CAAC;;;;;IAIlD,iBAAiB,CACf,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,uBAAuB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CAiBnD"}
@@ -15,7 +15,9 @@ class TypedObjectSchema extends core_js_1.Schema {
15
15
  return value.$type === undefined || value.$type === this.$type;
16
16
  }
17
17
  build(input) {
18
- return { ...input, $type: this.$type };
18
+ return input.$type === this.$type
19
+ ? input
20
+ : { ...input, $type: this.$type };
19
21
  }
20
22
  $isTypeOf(value) {
21
23
  return this.isTypeOf(value);
@@ -1 +1 @@
1
- {"version":3,"file":"typed-object.js","sourceRoot":"","sources":["../../src/schema/typed-object.ts"],"names":[],"mappings":";;;AAAA,gDAAiD;AACjD,wCAQmB;AAQnB,MAAa,iBAGX,SAAQ,gBAAqC;IAElC;IACA;IAFX,YACW,KAAQ,EACR,MAAS;QAElB,KAAK,EAAE,CAAA;QAHE,UAAK,GAAL,KAAK,CAAG;QACR,WAAM,GAAN,MAAM,CAAG;IAGpB,CAAC;IAED,QAAQ,CACN,KAAQ;QAKR,OAAO,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAA;IAChE,CAAC;IAED,KAAK,CACH,KAAQ;QAER,OAAO,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAA;IACxC,CAAC;IAED,SAAS,CAAoC,KAAQ;QACnD,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7B,CAAC;IAED,MAAM,CAAoC,KAAQ;QAChD,OAAO,IAAI,CAAC,KAAK,CAAI,KAAK,CAAC,CAAA;IAC7B,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,IACE,OAAO,IAAI,KAAK;YAChB,KAAK,CAAC,KAAK,KAAK,SAAS;YACzB,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAC1B,CAAC;YACD,OAAO,GAAG,CAAC,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QACpE,CAAC;QAED,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAErC,CAAA;IACH,CAAC;CACF;AAtDD,8CAsDC","sourcesContent":["import { isPlainObject } from '@atproto/lex-data'\nimport {\n $Type,\n Infer,\n Schema,\n Simplify,\n ValidationResult,\n Validator,\n ValidatorContext,\n} from '../core.js'\nimport { TypedObject } from './typed-union.js'\n\nexport type TypedObjectSchemaOutput<\n T extends $Type,\n S extends Validator<{ [k: string]: unknown }>,\n> = Simplify<Infer<S> & { $type?: T }>\n\nexport class TypedObjectSchema<\n const T extends $Type = any,\n const S extends Validator<{ [k: string]: unknown }> = any,\n> extends Schema<TypedObjectSchemaOutput<T, S>> {\n constructor(\n readonly $type: T,\n readonly schema: S,\n ) {\n super()\n }\n\n isTypeOf<X extends Record<string, unknown>>(\n value: X,\n ): value is Exclude<\n X extends { $type?: T } ? X : X & { $type?: T },\n TypedObject\n > {\n return value.$type === undefined || value.$type === this.$type\n }\n\n build<X extends Omit<Infer<S>, '$type'>>(\n input: X,\n ): Simplify<Omit<X, '$type'> & { $type: T }> {\n return { ...input, $type: this.$type }\n }\n\n $isTypeOf<X extends Record<string, unknown>>(value: X) {\n return this.isTypeOf(value)\n }\n\n $build<X extends Omit<Infer<S>, '$type'>>(input: X) {\n return this.build<X>(input)\n }\n\n validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n ): ValidationResult<TypedObjectSchemaOutput<T, S>> {\n if (!isPlainObject(input)) {\n return ctx.issueInvalidType(input, 'object')\n }\n\n if (\n '$type' in input &&\n input.$type !== undefined &&\n input.$type !== this.$type\n ) {\n return ctx.issueInvalidPropertyValue(input, '$type', [this.$type])\n }\n\n return ctx.validate(input, this.schema) as ValidationResult<\n TypedObjectSchemaOutput<T, S>\n >\n }\n}\n"]}
1
+ {"version":3,"file":"typed-object.js","sourceRoot":"","sources":["../../src/schema/typed-object.ts"],"names":[],"mappings":";;;AAAA,gDAAiD;AACjD,wCASmB;AAQnB,MAAa,iBAGX,SAAQ,gBAAqC;IAElC;IACA;IAFX,YACW,KAAQ,EACR,MAAS;QAElB,KAAK,EAAE,CAAA;QAHE,UAAK,GAAL,KAAK,CAAG;QACR,WAAM,GAAN,MAAM,CAAG;IAGpB,CAAC;IAED,QAAQ,CACN,KAAQ;QAKR,OAAO,KAAK,CAAC,KAAK,KAAK,SAAS,IAAI,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAA;IAChE,CAAC;IAED,KAAK,CACH,KAAQ;QAER,OAAO,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK;YAC/B,CAAC,CAAE,KAAsB;YACzB,CAAC,CAAC,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAA;IACrC,CAAC;IAED,SAAS,CAAoC,KAAQ;QACnD,OAAO,IAAI,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAA;IAC7B,CAAC;IAED,MAAM,CAAoC,KAAQ;QAChD,OAAO,IAAI,CAAC,KAAK,CAAI,KAAK,CAAC,CAAA;IAC7B,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,IACE,OAAO,IAAI,KAAK;YAChB,KAAK,CAAC,KAAK,KAAK,SAAS;YACzB,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,EAC1B,CAAC;YACD,OAAO,GAAG,CAAC,yBAAyB,CAAC,KAAK,EAAE,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;QACpE,CAAC;QAED,OAAO,GAAG,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAErC,CAAA;IACH,CAAC;CACF;AAxDD,8CAwDC","sourcesContent":["import { isPlainObject } from '@atproto/lex-data'\nimport {\n $Type,\n $Typed,\n $TypedMaybe,\n Infer,\n Schema,\n ValidationResult,\n Validator,\n ValidatorContext,\n} from '../core.js'\nimport { TypedObject } from './typed-union.js'\n\nexport type TypedObjectSchemaOutput<\n T extends $Type,\n S extends Validator<{ [k: string]: unknown }>,\n> = $TypedMaybe<Infer<S>, T>\n\nexport class TypedObjectSchema<\n const T extends $Type = any,\n const S extends Validator<{ [k: string]: unknown }> = any,\n> extends Schema<TypedObjectSchemaOutput<T, S>> {\n constructor(\n readonly $type: T,\n readonly schema: S,\n ) {\n super()\n }\n\n isTypeOf<X extends Record<string, unknown>>(\n value: X,\n ): value is Exclude<\n X extends { $type?: T } ? X : $TypedMaybe<X, T>,\n TypedObject\n > {\n return value.$type === undefined || value.$type === this.$type\n }\n\n build<X extends Omit<Infer<S>, '$type'>>(\n input: X,\n ): $Typed<Omit<X, '$type'>, T> {\n return input.$type === this.$type\n ? (input as $Typed<X, T>)\n : { ...input, $type: this.$type }\n }\n\n $isTypeOf<X extends Record<string, unknown>>(value: X) {\n return this.isTypeOf(value)\n }\n\n $build<X extends Omit<Infer<S>, '$type'>>(input: X) {\n return this.build<X>(input)\n }\n\n validateInContext(\n input: unknown,\n ctx: ValidatorContext,\n ): ValidationResult<TypedObjectSchemaOutput<T, S>> {\n if (!isPlainObject(input)) {\n return ctx.issueInvalidType(input, 'object')\n }\n\n if (\n '$type' in input &&\n input.$type !== undefined &&\n input.$type !== this.$type\n ) {\n return ctx.issueInvalidPropertyValue(input, '$type', [this.$type])\n }\n\n return ctx.validate(input, this.schema) as ValidationResult<\n TypedObjectSchemaOutput<T, S>\n >\n }\n}\n"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@atproto/lex-schema",
3
- "version": "0.0.6",
3
+ "version": "0.0.8",
4
4
  "license": "MIT",
5
5
  "description": "Lexicon schema system for AT Lexicons",
6
6
  "keywords": [
@@ -37,7 +37,7 @@
37
37
  "dependencies": {
38
38
  "tslib": "^2.8.1",
39
39
  "@atproto/syntax": "0.4.2",
40
- "@atproto/lex-data": "0.0.5"
40
+ "@atproto/lex-data": "0.0.7"
41
41
  },
42
42
  "devDependencies": {
43
43
  "vitest": "^4.0.16"
package/src/core/$type.ts CHANGED
@@ -1,5 +1,5 @@
1
1
  import { NsidString } from './string-format.js'
2
- import { OmitKey } from './types.js'
2
+ import { OmitKey, Simplify } from './types.js'
3
3
 
4
4
  export type $Type<
5
5
  N extends NsidString = NsidString,
@@ -22,5 +22,16 @@ export function $type<N extends NsidString, H extends string>(
22
22
  return (hash === 'main' ? nsid : `${nsid}#${hash}`) as $Type<N, H>
23
23
  }
24
24
 
25
- export type $Typed<V, T extends string = string> = V & { $type: T }
25
+ export type $Typed<V, T extends string = string> = Simplify<
26
+ V & {
27
+ $type: T
28
+ }
29
+ >
30
+
31
+ export type $TypedMaybe<V, T extends string = string> = Simplify<
32
+ V & {
33
+ $type?: T
34
+ }
35
+ >
36
+
26
37
  export type Un$Typed<V extends { $type?: string }> = OmitKey<V, '$type'>
@@ -1,4 +1,4 @@
1
- import { asCid, isPlainObject } from '@atproto/lex-data'
1
+ import { ifCid, isPlainObject } from '@atproto/lex-data'
2
2
  import { PropertyKey } from './property-key.js'
3
3
 
4
4
  export abstract class Issue {
@@ -229,7 +229,7 @@ function stringifyType(value: unknown): string {
229
229
  case 'object':
230
230
  if (value === null) return 'null'
231
231
  if (Array.isArray(value)) return 'array'
232
- if (asCid(value)) return 'cid'
232
+ if (ifCid(value)) return 'cid'
233
233
  if (value instanceof Date) return 'date'
234
234
  if (value instanceof RegExp) return 'regexp'
235
235
  if (value instanceof Map) return 'map'
package/src/external.ts CHANGED
@@ -122,9 +122,9 @@ export const integer = /*#__PURE__*/ memoizedOptions(function (
122
122
  return new IntegerSchema(options)
123
123
  })
124
124
 
125
- export const cidLink = /*#__PURE__*/ memoizedOptions(function (
126
- options?: CidSchemaOptions,
127
- ) {
125
+ export const cidLink = /*#__PURE__*/ memoizedOptions(function <
126
+ O extends CidSchemaOptions = NonNullable<unknown>,
127
+ >(options: O = {} as O) {
128
128
  return new CidSchema(options)
129
129
  })
130
130
 
@@ -1,21 +1,18 @@
1
1
  import {
2
2
  BlobRef,
3
+ BlobRefCheckOptions,
3
4
  LegacyBlobRef,
4
5
  isBlobRef,
5
6
  isLegacyBlobRef,
6
7
  } from '@atproto/lex-data'
7
8
  import { Schema, ValidationResult, ValidatorContext } from '../core.js'
8
9
 
9
- export type BlobSchemaOptions = {
10
+ export type BlobSchemaOptions = BlobRefCheckOptions & {
10
11
  /**
11
12
  * Whether to allow legacy blob references format
12
13
  * @see {@link LegacyBlobRef}
13
14
  */
14
15
  allowLegacy?: boolean
15
- /**
16
- * Whether to enforce strict validation on the blob reference (CID version, codec, hash function)
17
- */
18
- strict?: boolean
19
16
  /**
20
17
  * List of accepted mime types
21
18
  */
@@ -2,55 +2,54 @@ import { describe, expect, it } from 'vitest'
2
2
  import { parseCid } from '@atproto/lex-data'
3
3
  import { CidSchema } from './cid.js'
4
4
 
5
+ const cborCid = parseCid(
6
+ 'bafyreidfayvfuwqa7qlnopdjiqrxzs6blmoeu4rujcjtnci5beludirz2a',
7
+ { flavor: 'cbor' },
8
+ )
9
+
10
+ const rawCid = parseCid(
11
+ 'bafkreifjjcie6lypi6ny7amxnfftagclbuxndqonfipmb64f2km2devei4',
12
+ { flavor: 'raw' },
13
+ )
14
+
15
+ const v0Cid = parseCid('QmPZ9gcCEpqKTo6aq61g2nXGUhM4iCL3ewB6LDXZCtioEB')
16
+
17
+ // Using git-raw codec (0x78) instead of DAG-CBOR or raw binary
18
+ const gitRawCid = parseCid(
19
+ 'bafybeigvgzoolc3drupxhlevdp2ugqcrbcsqfmcek2zxiw5wctk3xjpjwy',
20
+ )
21
+
22
+ // Using SHA-512 (0x13) instead of SHA-256
23
+ const sha512Cid = parseCid(
24
+ 'bafybgqfcn3rz4mdzywp2jb6mjvpdq24rxjvbmdcmizrjdgx2ujjpvj4kxf4d62ywrzm6njk44cxhha4pj3bkvqz2esfgrm7mdkdcqcxjibf7c',
25
+ )
26
+
5
27
  describe('CidSchema', () => {
6
28
  describe('default mode (non-strict)', () => {
7
- const schema = new CidSchema()
29
+ const schema = new CidSchema({})
8
30
 
9
31
  it('validates CID v1 with DAG-CBOR codec and SHA-256', () => {
10
- const cid = parseCid(
11
- 'bafyreidfayvfuwqa7qlnopdjiqrxzs6blmoeu4rujcjtnci5beludirz2a',
12
- )
13
- const result = schema.safeParse(cid)
32
+ const result = schema.safeParse(cborCid)
14
33
  expect(result.success).toBe(true)
15
34
  })
16
35
 
17
36
  it('validates CID v1 with raw binary codec', () => {
18
- const cid = parseCid(
19
- 'bafkreifjjcie6lypi6ny7amxnfftagclbuxndqonfipmb64f2km2devei4',
20
- )
21
- const result = schema.safeParse(cid)
37
+ const result = schema.safeParse(rawCid)
22
38
  expect(result.success).toBe(true)
23
39
  })
24
40
 
25
41
  it('validates CID v0', () => {
26
- const cid = parseCid('QmPZ9gcCEpqKTo6aq61g2nXGUhM4iCL3ewB6LDXZCtioEB')
27
- const result = schema.safeParse(cid)
42
+ const result = schema.safeParse(v0Cid)
28
43
  expect(result.success).toBe(true)
29
44
  })
30
45
 
31
- it('validates multiple different CIDs', () => {
32
- const cids = [
33
- parseCid('bafyreidfayvfuwqa7qlnopdjiqrxzs6blmoeu4rujcjtnci5beludirz2a'),
34
- parseCid('bafyreigoxt64qghytzkr6ik7qvtzc7lyytiq5xbbrokbxjows2wp7vmo6q'),
35
- parseCid('bafyreiaizynclnqiolq7byfpjjtgqzn4sfrsgn7z2hhf6bo4utdwkin7ke'),
36
- parseCid('bafyreifd4w4tcr5tluxz7osjtnofffvtsmgdqcfrfi6evjde4pl27lrjpy'),
37
- ]
38
-
39
- for (const cid of cids) {
40
- const result = schema.safeParse(cid)
41
- expect(result.success).toBe(true)
42
- }
43
- })
44
-
45
46
  it('rejects non-CID objects', () => {
46
47
  const result = schema.safeParse({ not: 'a cid' })
47
48
  expect(result.success).toBe(false)
48
49
  })
49
50
 
50
51
  it('rejects strings', () => {
51
- const result = schema.safeParse(
52
- 'bafyreidfayvfuwqa7qlnopdjiqrxzs6blmoeu4rujcjtnci5beludirz2a',
53
- )
52
+ const result = schema.safeParse(cborCid.toString())
54
53
  expect(result.success).toBe(false)
55
54
  })
56
55
 
@@ -81,45 +80,30 @@ describe('CidSchema', () => {
81
80
  })
82
81
 
83
82
  describe('strict mode', () => {
84
- const schema = new CidSchema({ strict: true })
83
+ const schema = new CidSchema({ flavor: 'dasl' })
85
84
 
86
85
  it('validates CID v1 with DAG-CBOR codec and SHA-256', () => {
87
- const cid = parseCid(
88
- 'bafyreidfayvfuwqa7qlnopdjiqrxzs6blmoeu4rujcjtnci5beludirz2a',
89
- )
90
- const result = schema.safeParse(cid)
86
+ const result = schema.safeParse(cborCid)
91
87
  expect(result.success).toBe(true)
92
88
  })
93
89
 
94
90
  it('validates CID v1 with raw binary codec and SHA-256', () => {
95
- const cid = parseCid(
96
- 'bafkreifjjcie6lypi6ny7amxnfftagclbuxndqonfipmb64f2km2devei4',
97
- )
98
- const result = schema.safeParse(cid)
91
+ const result = schema.safeParse(rawCid)
99
92
  expect(result.success).toBe(true)
100
93
  })
101
94
 
102
95
  it('rejects CID v0', () => {
103
- const cid = parseCid('QmPZ9gcCEpqKTo6aq61g2nXGUhM4iCL3ewB6LDXZCtioEB')
104
- const result = schema.safeParse(cid)
96
+ const result = schema.safeParse(v0Cid)
105
97
  expect(result.success).toBe(false)
106
98
  })
107
99
 
108
100
  it('rejects CID v1 with non-standard codec', () => {
109
- // Using git-raw codec (0x78) instead of DAG-CBOR or raw binary
110
- const cid = parseCid(
111
- 'bafybeigvgzoolc3drupxhlevdp2ugqcrbcsqfmcek2zxiw5wctk3xjpjwy',
112
- )
113
- const result = schema.safeParse(cid)
101
+ const result = schema.safeParse(gitRawCid)
114
102
  expect(result.success).toBe(false)
115
103
  })
116
104
 
117
105
  it('rejects CID v1 with non-SHA-256 hash', () => {
118
- // Using SHA-512 (0x13) instead of SHA-256
119
- const cid = parseCid(
120
- 'bafybgqfcn3rz4mdzywp2jb6mjvpdq24rxjvbmdcmizrjdgx2ujjpvj4kxf4d62ywrzm6njk44cxhha4pj3bkvqz2esfgrm7mdkdcqcxjibf7c',
121
- )
122
- const result = schema.safeParse(cid)
106
+ const result = schema.safeParse(sha512Cid)
123
107
  expect(result.success).toBe(false)
124
108
  })
125
109
 
@@ -129,9 +113,7 @@ describe('CidSchema', () => {
129
113
  })
130
114
 
131
115
  it('rejects strings', () => {
132
- const result = schema.safeParse(
133
- 'bafyreidfayvfuwqa7qlnopdjiqrxzs6blmoeu4rujcjtnci5beludirz2a',
134
- )
116
+ const result = schema.safeParse(cborCid.toString())
135
117
  expect(result.success).toBe(false)
136
118
  })
137
119
 
@@ -140,17 +122,4 @@ describe('CidSchema', () => {
140
122
  expect(result.success).toBe(false)
141
123
  })
142
124
  })
143
-
144
- describe('options', () => {
145
- it('stores the provided options', () => {
146
- const options = { strict: true }
147
- const schema = new CidSchema(options)
148
- expect(schema.options).toEqual(options)
149
- })
150
-
151
- it('defaults to empty options', () => {
152
- const schema = new CidSchema()
153
- expect(schema.options).toEqual({})
154
- })
155
- })
156
125
  })
package/src/schema/cid.ts CHANGED
@@ -1,29 +1,23 @@
1
- import { Cid, isCid } from '@atproto/lex-data'
1
+ import { Cid, CidCheckOptions, InferCheckedCid, isCid } from '@atproto/lex-data'
2
2
  import { Schema, ValidationResult, ValidatorContext } from '../core.js'
3
3
 
4
4
  export type { Cid }
5
5
 
6
- export type CidSchemaOptions = {
7
- /**
8
- * In strict mode, only CID with the following properties are accepted:
9
- * - version: 1
10
- * - codec: raw binary (0x55) or DAG-CBOR (0x71)
11
- * - hash function: SHA-256 (0x12)
12
- *
13
- * @default false
14
- */
15
- strict?: boolean
16
- }
6
+ export type CidSchemaOptions = CidCheckOptions
7
+ export type CidSchemaOutput<TOptions extends CidSchemaOptions> =
8
+ InferCheckedCid<TOptions>
17
9
 
18
- export class CidSchema extends Schema<Cid> {
19
- constructor(readonly options: CidSchemaOptions = {}) {
10
+ export class CidSchema<TOptions extends CidSchemaOptions> extends Schema<
11
+ CidSchemaOutput<TOptions>
12
+ > {
13
+ constructor(readonly options: TOptions) {
20
14
  super()
21
15
  }
22
16
 
23
17
  validateInContext(
24
18
  input: unknown,
25
19
  ctx: ValidatorContext,
26
- ): ValidationResult<Cid> {
20
+ ): ValidationResult<CidSchemaOutput<TOptions>> {
27
21
  if (!isCid(input, this.options)) {
28
22
  return ctx.issueInvalidType(input, 'cid')
29
23
  }
@@ -1,9 +1,9 @@
1
1
  import {
2
+ $Typed,
2
3
  Infer,
3
4
  LexiconRecordKey,
4
5
  NsidString,
5
6
  Schema,
6
- Simplify,
7
7
  TidString,
8
8
  ValidationResult,
9
9
  Validator,
@@ -19,7 +19,7 @@ export type InferRecordKey<R extends RecordSchema> =
19
19
  export type RecordSchemaOutput<
20
20
  T extends NsidString,
21
21
  S extends Validator<{ [k: string]: unknown }>,
22
- > = Simplify<{ $type: T } & Omit<Infer<S>, '$type'>>
22
+ > = $Typed<Infer<S>, T>
23
23
 
24
24
  export class RecordSchema<
25
25
  K extends LexiconRecordKey = any,
@@ -39,17 +39,16 @@ export class RecordSchema<
39
39
 
40
40
  isTypeOf<X extends { $type?: unknown }>(
41
41
  value: X,
42
- ): value is Exclude<
43
- X extends { $type?: T } ? X : X & { $type?: T },
44
- TypedObject
45
- > {
42
+ ): value is Exclude<X extends { $type: T } ? X : $Typed<X, T>, TypedObject> {
46
43
  return value.$type === this.$type
47
44
  }
48
45
 
49
46
  build<X extends Omit<Infer<S>, '$type'>>(
50
47
  input: X,
51
- ): Simplify<Omit<X, '$type'> & { $type: T }> {
52
- return { ...input, $type: this.$type }
48
+ ): $Typed<Omit<X, '$type'>, T> {
49
+ return input.$type === this.$type
50
+ ? (input as $Typed<X, T>)
51
+ : { ...input, $type: this.$type }
53
52
  }
54
53
 
55
54
  $isTypeOf<X extends { $type?: unknown }>(value: X) {
@@ -1,4 +1,4 @@
1
- import { asCid, graphemeLen, utf8Len } from '@atproto/lex-data'
1
+ import { graphemeLen, ifCid, utf8Len } from '@atproto/lex-data'
2
2
  import {
3
3
  InferStringFormat,
4
4
  Schema,
@@ -124,7 +124,7 @@ export function coerceToString(input: unknown): string | null {
124
124
  return input.toString()
125
125
  }
126
126
 
127
- const cid = asCid(input)
127
+ const cid = ifCid(input)
128
128
  if (cid) return cid.toString()
129
129
 
130
130
  if (input instanceof String) {
@@ -1,7 +1,7 @@
1
1
  import { Schema, ValidationResult, ValidatorContext } from '../core.js'
2
2
 
3
3
  export class TokenSchema<V extends string = any> extends Schema<V> {
4
- constructor(protected readonly value: V) {
4
+ constructor(readonly value: V) {
5
5
  super()
6
6
  }
7
7
 
@@ -1,9 +1,10 @@
1
1
  import { isPlainObject } from '@atproto/lex-data'
2
2
  import {
3
3
  $Type,
4
+ $Typed,
5
+ $TypedMaybe,
4
6
  Infer,
5
7
  Schema,
6
- Simplify,
7
8
  ValidationResult,
8
9
  Validator,
9
10
  ValidatorContext,
@@ -13,7 +14,7 @@ import { TypedObject } from './typed-union.js'
13
14
  export type TypedObjectSchemaOutput<
14
15
  T extends $Type,
15
16
  S extends Validator<{ [k: string]: unknown }>,
16
- > = Simplify<Infer<S> & { $type?: T }>
17
+ > = $TypedMaybe<Infer<S>, T>
17
18
 
18
19
  export class TypedObjectSchema<
19
20
  const T extends $Type = any,
@@ -29,7 +30,7 @@ export class TypedObjectSchema<
29
30
  isTypeOf<X extends Record<string, unknown>>(
30
31
  value: X,
31
32
  ): value is Exclude<
32
- X extends { $type?: T } ? X : X & { $type?: T },
33
+ X extends { $type?: T } ? X : $TypedMaybe<X, T>,
33
34
  TypedObject
34
35
  > {
35
36
  return value.$type === undefined || value.$type === this.$type
@@ -37,8 +38,10 @@ export class TypedObjectSchema<
37
38
 
38
39
  build<X extends Omit<Infer<S>, '$type'>>(
39
40
  input: X,
40
- ): Simplify<Omit<X, '$type'> & { $type: T }> {
41
- return { ...input, $type: this.$type }
41
+ ): $Typed<Omit<X, '$type'>, T> {
42
+ return input.$type === this.$type
43
+ ? (input as $Typed<X, T>)
44
+ : { ...input, $type: this.$type }
42
45
  }
43
46
 
44
47
  $isTypeOf<X extends Record<string, unknown>>(value: X) {