@atproto/lex-schema 0.0.9 → 0.0.10

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 (279) hide show
  1. package/CHANGELOG.md +34 -0
  2. package/LICENSE.txt +1 -1
  3. package/dist/core/$type.d.ts +11 -0
  4. package/dist/core/$type.d.ts.map +1 -1
  5. package/dist/core/$type.js +4 -0
  6. package/dist/core/$type.js.map +1 -1
  7. package/dist/core/schema.d.ts +31 -24
  8. package/dist/core/schema.d.ts.map +1 -1
  9. package/dist/core/schema.js +38 -8
  10. package/dist/core/schema.js.map +1 -1
  11. package/dist/core/string-format.d.ts +35 -35
  12. package/dist/core/string-format.d.ts.map +1 -1
  13. package/dist/core/string-format.js +49 -91
  14. package/dist/core/string-format.js.map +1 -1
  15. package/dist/core/validation-issue.js +1 -1
  16. package/dist/core/validation-issue.js.map +1 -1
  17. package/dist/core/validator.d.ts +53 -32
  18. package/dist/core/validator.d.ts.map +1 -1
  19. package/dist/core/validator.js +18 -22
  20. package/dist/core/validator.js.map +1 -1
  21. package/dist/external.d.ts +0 -85
  22. package/dist/external.d.ts.map +1 -1
  23. package/dist/external.js +0 -164
  24. package/dist/external.js.map +1 -1
  25. package/dist/helpers.d.ts +10 -5
  26. package/dist/helpers.d.ts.map +1 -1
  27. package/dist/helpers.js +3 -3
  28. package/dist/helpers.js.map +1 -1
  29. package/dist/schema/array.d.ts +9 -5
  30. package/dist/schema/array.d.ts.map +1 -1
  31. package/dist/schema/array.js +14 -5
  32. package/dist/schema/array.js.map +1 -1
  33. package/dist/schema/blob.d.ts +9 -7
  34. package/dist/schema/blob.d.ts.map +1 -1
  35. package/dist/schema/blob.js +9 -5
  36. package/dist/schema/blob.js.map +1 -1
  37. package/dist/schema/boolean.d.ts +3 -7
  38. package/dist/schema/boolean.d.ts.map +1 -1
  39. package/dist/schema/boolean.js +6 -7
  40. package/dist/schema/boolean.js.map +1 -1
  41. package/dist/schema/bytes.d.ts +3 -2
  42. package/dist/schema/bytes.d.ts.map +1 -1
  43. package/dist/schema/bytes.js +7 -3
  44. package/dist/schema/bytes.js.map +1 -1
  45. package/dist/schema/cid.d.ts +7 -7
  46. package/dist/schema/cid.d.ts.map +1 -1
  47. package/dist/schema/cid.js +5 -1
  48. package/dist/schema/cid.js.map +1 -1
  49. package/dist/schema/custom.d.ts +6 -5
  50. package/dist/schema/custom.d.ts.map +1 -1
  51. package/dist/schema/custom.js +10 -4
  52. package/dist/schema/custom.js.map +1 -1
  53. package/dist/schema/dict.d.ts +8 -8
  54. package/dist/schema/dict.d.ts.map +1 -1
  55. package/dist/schema/dict.js +11 -2
  56. package/dist/schema/dict.js.map +1 -1
  57. package/dist/schema/discriminated-union.d.ts +21 -14
  58. package/dist/schema/discriminated-union.d.ts.map +1 -1
  59. package/dist/schema/discriminated-union.js +7 -0
  60. package/dist/schema/discriminated-union.js.map +1 -1
  61. package/dist/schema/enum.d.ts +7 -9
  62. package/dist/schema/enum.d.ts.map +1 -1
  63. package/dist/schema/enum.js +8 -4
  64. package/dist/schema/enum.js.map +1 -1
  65. package/dist/schema/integer.d.ts +5 -5
  66. package/dist/schema/integer.d.ts.map +1 -1
  67. package/dist/schema/integer.js +9 -5
  68. package/dist/schema/integer.js.map +1 -1
  69. package/dist/schema/intersection.d.ts +4 -4
  70. package/dist/schema/intersection.d.ts.map +1 -1
  71. package/dist/schema/intersection.js +5 -0
  72. package/dist/schema/intersection.js.map +1 -1
  73. package/dist/schema/literal.d.ts +6 -9
  74. package/dist/schema/literal.d.ts.map +1 -1
  75. package/dist/schema/literal.js +7 -4
  76. package/dist/schema/literal.js.map +1 -1
  77. package/dist/schema/never.d.ts +3 -2
  78. package/dist/schema/never.d.ts.map +1 -1
  79. package/dist/schema/never.js +5 -1
  80. package/dist/schema/never.js.map +1 -1
  81. package/dist/schema/null.d.ts +4 -3
  82. package/dist/schema/null.d.ts.map +1 -1
  83. package/dist/schema/null.js +6 -4
  84. package/dist/schema/null.js.map +1 -1
  85. package/dist/schema/nullable.d.ts +6 -5
  86. package/dist/schema/nullable.d.ts.map +1 -1
  87. package/dist/schema/nullable.js +9 -5
  88. package/dist/schema/nullable.js.map +1 -1
  89. package/dist/schema/object.d.ts +10 -8
  90. package/dist/schema/object.d.ts.map +1 -1
  91. package/dist/schema/object.js +11 -3
  92. package/dist/schema/object.js.map +1 -1
  93. package/dist/schema/optional.d.ts +7 -5
  94. package/dist/schema/optional.d.ts.map +1 -1
  95. package/dist/schema/optional.js +14 -6
  96. package/dist/schema/optional.js.map +1 -1
  97. package/dist/schema/params.d.ts +24 -13
  98. package/dist/schema/params.d.ts.map +1 -1
  99. package/dist/schema/params.js +47 -25
  100. package/dist/schema/params.js.map +1 -1
  101. package/dist/schema/payload.d.ts +12 -9
  102. package/dist/schema/payload.d.ts.map +1 -1
  103. package/dist/schema/payload.js +11 -0
  104. package/dist/schema/payload.js.map +1 -1
  105. package/dist/schema/permission-set.d.ts +1 -0
  106. package/dist/schema/permission-set.d.ts.map +1 -1
  107. package/dist/schema/permission-set.js +5 -0
  108. package/dist/schema/permission-set.js.map +1 -1
  109. package/dist/schema/permission.d.ts +6 -5
  110. package/dist/schema/permission.d.ts.map +1 -1
  111. package/dist/schema/permission.js +5 -0
  112. package/dist/schema/permission.js.map +1 -1
  113. package/dist/schema/procedure.d.ts +2 -1
  114. package/dist/schema/procedure.d.ts.map +1 -1
  115. package/dist/schema/procedure.js +5 -0
  116. package/dist/schema/procedure.js.map +1 -1
  117. package/dist/schema/query.d.ts +2 -1
  118. package/dist/schema/query.d.ts.map +1 -1
  119. package/dist/schema/query.js +5 -0
  120. package/dist/schema/query.js.map +1 -1
  121. package/dist/schema/record.d.ts +48 -30
  122. package/dist/schema/record.d.ts.map +1 -1
  123. package/dist/schema/record.js +12 -9
  124. package/dist/schema/record.js.map +1 -1
  125. package/dist/schema/ref.d.ts +9 -6
  126. package/dist/schema/ref.d.ts.map +1 -1
  127. package/dist/schema/ref.js +9 -16
  128. package/dist/schema/ref.js.map +1 -1
  129. package/dist/schema/refine.d.ts +4 -4
  130. package/dist/schema/refine.d.ts.map +1 -1
  131. package/dist/schema/refine.js.map +1 -1
  132. package/dist/schema/regexp.d.ts +4 -3
  133. package/dist/schema/regexp.d.ts.map +1 -1
  134. package/dist/schema/regexp.js +5 -0
  135. package/dist/schema/regexp.js.map +1 -1
  136. package/dist/schema/string.d.ts +7 -8
  137. package/dist/schema/string.d.ts.map +1 -1
  138. package/dist/schema/string.js +13 -19
  139. package/dist/schema/string.js.map +1 -1
  140. package/dist/schema/subscription.d.ts +2 -1
  141. package/dist/schema/subscription.d.ts.map +1 -1
  142. package/dist/schema/subscription.js +5 -0
  143. package/dist/schema/subscription.js.map +1 -1
  144. package/dist/schema/token.d.ts +6 -5
  145. package/dist/schema/token.d.ts.map +1 -1
  146. package/dist/schema/token.js +5 -0
  147. package/dist/schema/token.js.map +1 -1
  148. package/dist/schema/typed-object.d.ts +43 -26
  149. package/dist/schema/typed-object.d.ts.map +1 -1
  150. package/dist/schema/typed-object.js +6 -3
  151. package/dist/schema/typed-object.js.map +1 -1
  152. package/dist/schema/typed-ref.d.ts +16 -25
  153. package/dist/schema/typed-ref.d.ts.map +1 -1
  154. package/dist/schema/typed-ref.js +7 -17
  155. package/dist/schema/typed-ref.js.map +1 -1
  156. package/dist/schema/typed-union.d.ts +9 -21
  157. package/dist/schema/typed-union.d.ts.map +1 -1
  158. package/dist/schema/typed-union.js +15 -11
  159. package/dist/schema/typed-union.js.map +1 -1
  160. package/dist/schema/union.d.ts +6 -6
  161. package/dist/schema/union.d.ts.map +1 -1
  162. package/dist/schema/union.js +7 -5
  163. package/dist/schema/union.js.map +1 -1
  164. package/dist/schema/unknown-object.d.ts +5 -4
  165. package/dist/schema/unknown-object.d.ts.map +1 -1
  166. package/dist/schema/unknown-object.js +5 -1
  167. package/dist/schema/unknown-object.js.map +1 -1
  168. package/dist/schema/unknown.d.ts +3 -2
  169. package/dist/schema/unknown.d.ts.map +1 -1
  170. package/dist/schema/unknown.js +5 -1
  171. package/dist/schema/unknown.js.map +1 -1
  172. package/dist/schema/with-default.d.ts +9 -0
  173. package/dist/schema/with-default.d.ts.map +1 -0
  174. package/dist/schema/with-default.js +27 -0
  175. package/dist/schema/with-default.js.map +1 -0
  176. package/dist/schema.d.ts +2 -2
  177. package/dist/schema.d.ts.map +1 -1
  178. package/dist/schema.js +2 -4
  179. package/dist/schema.js.map +1 -1
  180. package/dist/util/assertion-util.d.ts +0 -6
  181. package/dist/util/assertion-util.d.ts.map +1 -1
  182. package/dist/util/assertion-util.js +0 -28
  183. package/dist/util/assertion-util.js.map +1 -1
  184. package/dist/util/memoize.d.ts +2 -2
  185. package/dist/util/memoize.d.ts.map +1 -1
  186. package/dist/util/memoize.js +23 -39
  187. package/dist/util/memoize.js.map +1 -1
  188. package/package.json +3 -3
  189. package/src/core/$type.test.ts +20 -0
  190. package/src/core/$type.ts +30 -0
  191. package/src/core/schema.ts +86 -38
  192. package/src/core/string-format.ts +119 -158
  193. package/src/core/validation-issue.ts +1 -1
  194. package/src/core/validator.ts +93 -53
  195. package/src/external.ts +0 -404
  196. package/src/helpers.test.ts +22 -21
  197. package/src/helpers.ts +14 -14
  198. package/src/schema/array.test.ts +38 -40
  199. package/src/schema/array.ts +35 -13
  200. package/src/schema/blob.test.ts +21 -21
  201. package/src/schema/blob.ts +19 -17
  202. package/src/schema/boolean.test.ts +9 -8
  203. package/src/schema/boolean.ts +7 -13
  204. package/src/schema/bytes.test.ts +13 -13
  205. package/src/schema/bytes.ts +13 -8
  206. package/src/schema/cid.test.ts +3 -3
  207. package/src/schema/cid.ts +13 -12
  208. package/src/schema/custom.test.ts +26 -26
  209. package/src/schema/custom.ts +20 -13
  210. package/src/schema/dict.test.ts +21 -39
  211. package/src/schema/dict.ts +28 -19
  212. package/src/schema/discriminated-union.test.ts +128 -128
  213. package/src/schema/discriminated-union.ts +45 -26
  214. package/src/schema/enum.test.ts +17 -16
  215. package/src/schema/enum.ts +16 -16
  216. package/src/schema/integer.test.ts +22 -21
  217. package/src/schema/integer.ts +12 -9
  218. package/src/schema/intersection.test.ts +10 -10
  219. package/src/schema/intersection.ts +17 -14
  220. package/src/schema/literal.test.ts +35 -34
  221. package/src/schema/literal.ts +12 -15
  222. package/src/schema/never.test.ts +5 -5
  223. package/src/schema/never.ts +7 -2
  224. package/src/schema/null.test.ts +3 -3
  225. package/src/schema/null.ts +9 -9
  226. package/src/schema/nullable.test.ts +31 -42
  227. package/src/schema/nullable.ts +17 -9
  228. package/src/schema/object.test.ts +10 -12
  229. package/src/schema/object.ts +27 -18
  230. package/src/schema/optional.test.ts +21 -28
  231. package/src/schema/optional.ts +27 -10
  232. package/src/schema/params.test.ts +471 -47
  233. package/src/schema/params.ts +72 -38
  234. package/src/schema/payload.test.ts +150 -156
  235. package/src/schema/payload.ts +35 -19
  236. package/src/schema/permission-set.test.ts +206 -273
  237. package/src/schema/permission-set.ts +8 -0
  238. package/src/schema/permission.test.ts +177 -177
  239. package/src/schema/permission.ts +13 -5
  240. package/src/schema/procedure.test.ts +183 -242
  241. package/src/schema/procedure.ts +18 -5
  242. package/src/schema/query.test.ts +186 -200
  243. package/src/schema/query.ts +16 -4
  244. package/src/schema/record.test.ts +121 -101
  245. package/src/schema/record.ts +74 -40
  246. package/src/schema/ref.test.ts +101 -118
  247. package/src/schema/ref.ts +33 -28
  248. package/src/schema/refine.test.ts +28 -28
  249. package/src/schema/refine.ts +23 -20
  250. package/src/schema/regexp.test.ts +29 -33
  251. package/src/schema/regexp.ts +11 -7
  252. package/src/schema/string.test.ts +35 -35
  253. package/src/schema/string.ts +24 -33
  254. package/src/schema/subscription.test.ts +259 -387
  255. package/src/schema/subscription.ts +16 -4
  256. package/src/schema/token.test.ts +47 -324
  257. package/src/schema/token.ts +14 -7
  258. package/src/schema/typed-object.test.ts +98 -81
  259. package/src/schema/typed-object.ts +68 -33
  260. package/src/schema/typed-ref.test.ts +206 -234
  261. package/src/schema/typed-ref.ts +40 -42
  262. package/src/schema/typed-union.test.ts +40 -64
  263. package/src/schema/typed-union.ts +36 -58
  264. package/src/schema/union.test.ts +17 -27
  265. package/src/schema/union.ts +20 -16
  266. package/src/schema/unknown-object.test.ts +8 -8
  267. package/src/schema/unknown-object.ts +9 -7
  268. package/src/schema/unknown.test.ts +4 -4
  269. package/src/schema/unknown.ts +7 -5
  270. package/src/schema/with-default.ts +35 -0
  271. package/src/schema.ts +2 -6
  272. package/src/util/assertion-util.ts +0 -39
  273. package/src/util/memoize.ts +26 -46
  274. package/dist/schema/_parameters.d.ts +0 -17
  275. package/dist/schema/_parameters.d.ts.map +0 -1
  276. package/dist/schema/_parameters.js +0 -20
  277. package/dist/schema/_parameters.js.map +0 -1
  278. package/src/schema/_parameters.test.ts +0 -417
  279. package/src/schema/_parameters.ts +0 -26
@@ -1 +1 @@
1
- {"version":3,"file":"params.js","sourceRoot":"","sources":["../../src/schema/params.ts"],"names":[],"mappings":"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","sourcesContent":["import { isPlainObject } from '@atproto/lex-data'\nimport {\n Infer,\n Schema,\n ValidationResult,\n Validator,\n ValidatorContext,\n WithOptionalProperties,\n} from '../core.js'\nimport { lazyProperty } from '../util/lazy-property.js'\nimport { Param, ParamScalar, paramSchema } from './_parameters.js'\nimport { StringSchema } from './string.js'\n\nexport type ParamsSchemaShape = Record<string, Validator<Param | undefined>>\n\nexport type ParamsSchemaOutput<Shape extends ParamsSchemaShape> =\n WithOptionalProperties<{\n [K in keyof Shape]: Infer<Shape[K]>\n }>\n\nexport class ParamsSchema<\n const Shape extends ParamsSchemaShape = ParamsSchemaShape,\n> extends Schema<ParamsSchemaOutput<Shape>> {\n constructor(readonly validators: Shape) {\n super()\n }\n\n get validatorsMap(): Map<string, Validator<Param | undefined>> {\n const map = new Map(Object.entries(this.validators))\n\n return lazyProperty(this, 'validatorsMap', map)\n }\n\n validateInContext(\n input: unknown = {},\n ctx: ValidatorContext,\n ): ValidationResult<ParamsSchemaOutput<Shape>> {\n if (!isPlainObject(input)) {\n return ctx.issueInvalidType(input, 'object')\n }\n\n // Lazily copy value\n let copy: undefined | Record<string, unknown>\n\n // Ensure that non-specified params conform to param schema\n for (const key in input) {\n if (this.validatorsMap.has(key)) continue\n\n const result = ctx.validateChild(input, key, paramSchema)\n if (!result.success) return result\n\n if (result.value !== input[key]) {\n copy ??= { ...input }\n copy[key] = result.value\n }\n }\n\n for (const [key, propDef] of this.validatorsMap) {\n const result = ctx.validateChild(input, key, propDef)\n if (!result.success) {\n if (!(key in input)) {\n // Transform into \"required key\" issue\n return ctx.issueRequiredKey(input, key)\n }\n\n return result\n }\n\n // Skip copying if key is not present in input (and value is undefined)\n if (result.value === undefined && !(key in input)) {\n continue\n }\n\n if (result.value !== input[key]) {\n // Copy on write\n copy ??= { ...input }\n copy[key] = result.value\n }\n }\n\n return ctx.success((copy ?? input) as ParamsSchemaOutput<Shape>)\n }\n\n fromURLSearchParams(\n urlSearchParams: URLSearchParams,\n ): ParamsSchemaOutput<Shape> {\n const params: Record<string, Param> = {}\n\n for (const [key, value] of urlSearchParams.entries()) {\n const validator = this.validatorsMap.get(key)\n\n const coerced: ParamScalar =\n validator != null && validator instanceof StringSchema\n ? value\n : value === 'true'\n ? true\n : value === 'false'\n ? false\n : /^-?\\d+$/.test(value)\n ? Number(value)\n : value\n\n if (params[key] === undefined) {\n params[key] = coerced\n } else if (Array.isArray(params[key])) {\n params[key].push(coerced)\n } else {\n params[key] = [params[key] as ParamScalar, coerced]\n }\n }\n\n return this.parse(params)\n }\n\n toURLSearchParams(input: ParamsSchemaOutput<Shape>): URLSearchParams {\n const urlSearchParams = new URLSearchParams()\n\n if (input !== undefined) {\n for (const [key, value] of Object.entries(input)) {\n if (Array.isArray(value)) {\n for (const v of value) {\n urlSearchParams.append(key, String(v))\n }\n } else if (value !== undefined) {\n urlSearchParams.append(key, String(value))\n }\n }\n }\n\n return urlSearchParams\n }\n}\n"]}
1
+ {"version":3,"file":"params.js","sourceRoot":"","sources":["../../src/schema/params.ts"],"names":[],"mappings":"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","sourcesContent":["import { isPlainObject } from '@atproto/lex-data'\nimport {\n Infer,\n InferInput,\n InferOutput,\n Schema,\n ValidationContext,\n Validator,\n WithOptionalProperties,\n} from '../core.js'\nimport { lazyProperty } from '../util/lazy-property.js'\nimport { memoizedOptions } from '../util/memoize.js'\nimport { array } from './array.js'\nimport { boolean } from './boolean.js'\nimport { dict } from './dict.js'\nimport { integer } from './integer.js'\nimport { optional } from './optional.js'\nimport { StringSchema, string } from './string.js'\nimport { union } from './union.js'\n\nexport type ParamScalar = Infer<typeof paramScalarSchema>\nconst paramScalarSchema = union([boolean(), integer(), string()])\n\nexport type Param = Infer<typeof paramSchema>\nexport const paramSchema = union([paramScalarSchema, array(paramScalarSchema)])\n\nexport type Params = Infer<typeof paramsSchema>\nexport const paramsSchema = dict(string(), optional(paramSchema))\n\nexport type ParamsSchemaShape = {\n [x: string]: Validator<Param | undefined>\n}\n\nexport class ParamsSchema<\n const TShape extends ParamsSchemaShape = ParamsSchemaShape,\n> extends Schema<\n WithOptionalProperties<{\n [K in keyof TShape]: InferInput<TShape[K]>\n }>,\n WithOptionalProperties<{\n [K in keyof TShape]: InferOutput<TShape[K]>\n }>\n> {\n constructor(readonly shape: TShape) {\n super()\n }\n\n get shapeValidators(): Map<string, Validator<Param | undefined>> {\n const map = new Map(Object.entries(this.shape))\n\n return lazyProperty(this, 'shapeValidators', map)\n }\n\n validateInContext(input: unknown, ctx: ValidationContext) {\n // @TODO BETTER SUPPORT Input/Output\n if (!isPlainObject(input)) {\n return ctx.issueInvalidType(input, 'object')\n }\n\n // Lazily copy value\n let copy: undefined | Record<string, unknown>\n\n // Ensure that non-specified params conform to param schema\n for (const key in input) {\n if (this.shapeValidators.has(key)) continue\n\n const result = ctx.validateChild(input, key, paramSchema)\n if (!result.success) return result\n\n if (result.value !== input[key]) {\n if (ctx.options.mode === 'validate') {\n // In \"validate\" mode, we can't modify the input, so we issue an error\n return ctx.issueInvalidPropertyValue(input, key, [result.value])\n }\n\n copy ??= { ...input }\n copy[key] = result.value\n }\n }\n\n for (const [key, propDef] of this.shapeValidators) {\n const result = ctx.validateChild(input, key, propDef)\n if (!result.success) {\n if (!(key in input)) {\n // Transform into \"required key\" issue\n return ctx.issueRequiredKey(input, key)\n }\n\n return result\n }\n\n // Skip copying if key is not present in input (and value is undefined)\n if (result.value === undefined && !(key in input)) {\n continue\n }\n\n if (!Object.is(result.value, input[key])) {\n if (ctx.options.mode === 'validate') {\n // In \"validate\" mode, we can't modify the input, so we issue an error\n return ctx.issueInvalidPropertyValue(input, key, [result.value])\n }\n\n // Copy on write\n copy ??= { ...input }\n copy[key] = result.value\n }\n }\n\n return ctx.success(copy ?? input)\n }\n\n fromURLSearchParams(urlSearchParams: URLSearchParams): InferOutput<this> {\n const params: Record<string, Param> = {}\n\n for (const [key, value] of urlSearchParams.entries()) {\n const validator = this.shapeValidators.get(key)\n\n const coerced: ParamScalar =\n validator instanceof StringSchema\n ? value\n : value === 'true'\n ? true\n : value === 'false'\n ? false\n : /^-?\\d+$/.test(value)\n ? Number(value)\n : value\n\n if (params[key] === undefined) {\n params[key] = coerced\n } else if (Array.isArray(params[key])) {\n params[key].push(coerced)\n } else {\n params[key] = [params[key] as ParamScalar, coerced]\n }\n }\n\n return this.parse(params)\n }\n\n toURLSearchParams(input: InferInput<this>): URLSearchParams {\n const urlSearchParams = new URLSearchParams()\n\n // @NOTE We apply defaults here to ensure that server with different\n // defaults still receive all expected parameters.\n const params = this.parse(input)\n\n for (const [key, value] of Object.entries(params)) {\n if (Array.isArray(value)) {\n for (const v of value) {\n urlSearchParams.append(key, String(v))\n }\n } else if (value !== undefined) {\n urlSearchParams.append(key, String(value))\n }\n }\n\n return urlSearchParams\n }\n}\n\nexport const params = /*#__PURE__*/ memoizedOptions(function params<\n const TShape extends ParamsSchemaShape = NonNullable<unknown>,\n>(properties: TShape = {} as TShape) {\n return new ParamsSchema<TShape>(properties)\n})\n"]}
@@ -1,21 +1,24 @@
1
1
  import { LexValue } from '@atproto/lex-data';
2
2
  import { Infer, Schema } from '../core.js';
3
- export type InferPayload<P extends Payload, B> = P['encoding'] extends infer E extends string ? {
3
+ import { ObjectSchema, ObjectSchemaShape } from './object.js';
4
+ export type InferPayload<TPayload extends Payload, TBody> = TPayload['encoding'] extends infer E extends string ? {
4
5
  encoding: SchemaEncodingToDataEncoding<E>;
5
- body: InferPayloadBody<P, B>;
6
+ body: InferPayloadBody<TPayload, TBody>;
6
7
  } : void | undefined;
7
8
  export type SchemaEncodingToDataEncoding<E extends string> = E extends '*/*' ? `${string}/${string}` : E extends `${infer T extends string}/*` ? `${T}/${string}` : E;
8
- export type InferPayloadEncoding<P extends Payload> = P['encoding'] extends string ? SchemaEncodingToDataEncoding<P['encoding']> : undefined;
9
- export type InferPayloadBody<P extends Payload, B> = P['encoding'] extends undefined ? undefined : P['schema'] extends Schema ? Infer<P['schema']> : P['encoding'] extends `application/json` ? LexValue : B;
10
- export type PayloadSchema<E extends string | undefined> = E extends undefined ? undefined : Schema | undefined;
11
- export declare class Payload<const Encoding extends string | undefined = string | undefined, const Schema extends PayloadSchema<Encoding> = PayloadSchema<Encoding>> {
12
- readonly encoding: Encoding;
13
- readonly schema: Schema;
14
- constructor(encoding: Encoding, schema: Schema);
9
+ export type InferPayloadEncoding<TPayload extends Payload> = TPayload['encoding'] extends string ? SchemaEncodingToDataEncoding<TPayload['encoding']> : undefined;
10
+ export type InferPayloadBody<TPayload extends Payload, TBody> = TPayload['encoding'] extends undefined ? undefined : TPayload['schema'] extends Schema ? Infer<TPayload['schema']> : TPayload['encoding'] extends `application/json` ? LexValue : TBody;
11
+ export type PayloadShape<E extends string | undefined> = E extends undefined ? undefined : Schema | undefined;
12
+ export declare class Payload<const TEncoding extends string | undefined = string | undefined, const TPayload extends PayloadShape<TEncoding> = PayloadShape<TEncoding>> {
13
+ readonly encoding: TEncoding;
14
+ readonly schema: TPayload;
15
+ constructor(encoding: TEncoding, schema: TPayload);
15
16
  /**
16
17
  * Checks whether the given content-type matches the expected payload schema's
17
18
  * encoding.
18
19
  */
19
20
  matchesEncoding(contentType: string | undefined): boolean;
20
21
  }
22
+ export declare function payload<const E extends string | undefined = undefined, const S extends PayloadShape<E> = undefined>(encoding?: E, validator?: S): Payload<E, S>;
23
+ export declare function jsonPayload<const P extends ObjectSchemaShape>(properties: P): Payload<'application/json', ObjectSchema<P>>;
21
24
  //# sourceMappingURL=payload.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../src/schema/payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAE1C,MAAM,MAAM,YAAY,CACtB,CAAC,SAAS,OAAO,EACjB,CAAC,IACC,CAAC,CAAC,UAAU,CAAC,SAAS,MAAM,CAAC,SAAS,MAAM,GAC5C;IACE,QAAQ,EAAE,4BAA4B,CAAC,CAAC,CAAC,CAAA;IACzC,IAAI,EAAE,gBAAgB,CAAC,CAAC,EAAE,CAAC,CAAC,CAAA;CAC7B,GACD,IAAI,GAAG,SAAS,CAAA;AAEpB,MAAM,MAAM,4BAA4B,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,KAAK,GACxE,GAAG,MAAM,IAAI,MAAM,EAAE,GACrB,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,MAAM,IAAI,GACrC,GAAG,CAAC,IAAI,MAAM,EAAE,GAChB,CAAC,CAAA;AAEP,MAAM,MAAM,oBAAoB,CAAC,CAAC,SAAS,OAAO,IAChD,CAAC,CAAC,UAAU,CAAC,SAAS,MAAM,GACxB,4BAA4B,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,GAC3C,SAAS,CAAA;AAEf,MAAM,MAAM,gBAAgB,CAC1B,CAAC,SAAS,OAAO,EACjB,CAAC,IACC,CAAC,CAAC,UAAU,CAAC,SAAS,SAAS,GAC/B,SAAS,GACT,CAAC,CAAC,QAAQ,CAAC,SAAS,MAAM,GACxB,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,GAClB,CAAC,CAAC,UAAU,CAAC,SAAS,kBAAkB,GACtC,QAAQ,GACR,CAAC,CAAA;AAET,MAAM,MAAM,aAAa,CAAC,CAAC,SAAS,MAAM,GAAG,SAAS,IAAI,CAAC,SAAS,SAAS,GACzE,SAAS,GACT,MAAM,GAAG,SAAS,CAAA;AAEtB,qBAAa,OAAO,CAClB,KAAK,CAAC,QAAQ,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,EAC9D,KAAK,CAAC,MAAM,SAAS,aAAa,CAAC,QAAQ,CAAC,GAAG,aAAa,CAAC,QAAQ,CAAC;IAGpE,QAAQ,CAAC,QAAQ,EAAE,QAAQ;IAC3B,QAAQ,CAAC,MAAM,EAAE,MAAM;gBADd,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,MAAM;IAOzB;;;OAGG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO;CA6B1D"}
1
+ {"version":3,"file":"payload.d.ts","sourceRoot":"","sources":["../../src/schema/payload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,mBAAmB,CAAA;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,YAAY,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAU,MAAM,aAAa,CAAA;AAErE,MAAM,MAAM,YAAY,CACtB,QAAQ,SAAS,OAAO,EACxB,KAAK,IACH,QAAQ,CAAC,UAAU,CAAC,SAAS,MAAM,CAAC,SAAS,MAAM,GACnD;IACE,QAAQ,EAAE,4BAA4B,CAAC,CAAC,CAAC,CAAA;IACzC,IAAI,EAAE,gBAAgB,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAA;CACxC,GACD,IAAI,GAAG,SAAS,CAAA;AAEpB,MAAM,MAAM,4BAA4B,CAAC,CAAC,SAAS,MAAM,IAAI,CAAC,SAAS,KAAK,GACxE,GAAG,MAAM,IAAI,MAAM,EAAE,GACrB,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,MAAM,IAAI,GACrC,GAAG,CAAC,IAAI,MAAM,EAAE,GAChB,CAAC,CAAA;AAEP,MAAM,MAAM,oBAAoB,CAAC,QAAQ,SAAS,OAAO,IACvD,QAAQ,CAAC,UAAU,CAAC,SAAS,MAAM,GAC/B,4BAA4B,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC,GAClD,SAAS,CAAA;AAEf,MAAM,MAAM,gBAAgB,CAC1B,QAAQ,SAAS,OAAO,EACxB,KAAK,IACH,QAAQ,CAAC,UAAU,CAAC,SAAS,SAAS,GACtC,SAAS,GACT,QAAQ,CAAC,QAAQ,CAAC,SAAS,MAAM,GAC/B,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,GACzB,QAAQ,CAAC,UAAU,CAAC,SAAS,kBAAkB,GAC7C,QAAQ,GACR,KAAK,CAAA;AAEb,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,MAAM,GAAG,SAAS,IAAI,CAAC,SAAS,SAAS,GACxE,SAAS,GACT,MAAM,GAAG,SAAS,CAAA;AAEtB,qBAAa,OAAO,CAClB,KAAK,CAAC,SAAS,SAAS,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,EAC/D,KAAK,CAAC,QAAQ,SAAS,YAAY,CAAC,SAAS,CAAC,GAAG,YAAY,CAAC,SAAS,CAAC;IAGtE,QAAQ,CAAC,QAAQ,EAAE,SAAS;IAC5B,QAAQ,CAAC,MAAM,EAAE,QAAQ;gBADhB,QAAQ,EAAE,SAAS,EACnB,MAAM,EAAE,QAAQ;IAO3B;;;OAGG;IACH,eAAe,CAAC,WAAW,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO;CA6B1D;AAGD,wBAAgB,OAAO,CACrB,KAAK,CAAC,CAAC,SAAS,MAAM,GAAG,SAAS,GAAG,SAAS,EAC9C,KAAK,CAAC,CAAC,SAAS,YAAY,CAAC,CAAC,CAAC,GAAG,SAAS,EAC3C,QAAQ,GAAE,CAAkB,EAAE,SAAS,GAAE,CAAkB,iBAE5D;AAGD,wBAAgB,WAAW,CAAC,KAAK,CAAC,CAAC,SAAS,iBAAiB,EAC3D,UAAU,EAAE,CAAC,GACZ,OAAO,CAAC,kBAAkB,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC,CAE9C"}
@@ -1,6 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Payload = void 0;
4
+ exports.payload = payload;
5
+ exports.jsonPayload = jsonPayload;
6
+ const object_js_1 = require("./object.js");
4
7
  class Payload {
5
8
  encoding;
6
9
  schema;
@@ -41,4 +44,12 @@ class Payload {
41
44
  }
42
45
  }
43
46
  exports.Payload = Payload;
47
+ /*@__NO_SIDE_EFFECTS__*/
48
+ function payload(encoding = undefined, validator = undefined) {
49
+ return new Payload(encoding, validator);
50
+ }
51
+ /*@__NO_SIDE_EFFECTS__*/
52
+ function jsonPayload(properties) {
53
+ return payload('application/json', (0, object_js_1.object)(properties));
54
+ }
44
55
  //# sourceMappingURL=payload.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"payload.js","sourceRoot":"","sources":["../../src/schema/payload.ts"],"names":[],"mappings":";;;AAuCA,MAAa,OAAO;IAKP;IACA;IAFX,YACW,QAAkB,EAClB,MAAc;QADd,aAAQ,GAAR,QAAQ,CAAU;QAClB,WAAM,GAAN,MAAM,CAAQ;QAEvB,IAAI,QAAQ,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACnD,MAAM,IAAI,SAAS,CAAC,qDAAqD,CAAC,CAAA;QAC5E,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,WAA+B;QAC7C,MAAM,IAAI,GAAG,WAAW,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAEjD,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;QAEzB,yBAAyB;QACzB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,oBAAoB;YACpB,OAAO,IAAI,KAAK,SAAS,CAAA;QAC3B,CAAC;aAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,4CAA4C;YAC5C,OAAO,KAAK,CAAA;QACd,CAAC;QAED,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YACvB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/C,CAAC;QAED,gEAAgE;QAChE,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,QAAQ,KAAK,IAAI,CAAA;IAC1B,CAAC;CACF;AA9CD,0BA8CC","sourcesContent":["import { LexValue } from '@atproto/lex-data'\nimport { Infer, Schema } from '../core.js'\n\nexport type InferPayload<\n P extends Payload,\n B,\n> = P['encoding'] extends infer E extends string\n ? {\n encoding: SchemaEncodingToDataEncoding<E>\n body: InferPayloadBody<P, B>\n }\n : void | undefined\n\nexport type SchemaEncodingToDataEncoding<E extends string> = E extends '*/*'\n ? `${string}/${string}`\n : E extends `${infer T extends string}/*`\n ? `${T}/${string}`\n : E\n\nexport type InferPayloadEncoding<P extends Payload> =\n P['encoding'] extends string\n ? SchemaEncodingToDataEncoding<P['encoding']>\n : undefined\n\nexport type InferPayloadBody<\n P extends Payload,\n B,\n> = P['encoding'] extends undefined\n ? undefined // No encoding, no payload\n : P['schema'] extends Schema\n ? Infer<P['schema']>\n : P['encoding'] extends `application/json`\n ? LexValue\n : B\n\nexport type PayloadSchema<E extends string | undefined> = E extends undefined\n ? undefined\n : Schema | undefined\n\nexport class Payload<\n const Encoding extends string | undefined = string | undefined,\n const Schema extends PayloadSchema<Encoding> = PayloadSchema<Encoding>,\n> {\n constructor(\n readonly encoding: Encoding,\n readonly schema: Schema,\n ) {\n if (encoding === undefined && schema !== undefined) {\n throw new TypeError('schema cannot be defined when encoding is undefined')\n }\n }\n\n /**\n * Checks whether the given content-type matches the expected payload schema's\n * encoding.\n */\n matchesEncoding(contentType: string | undefined): boolean {\n const mime = contentType?.split(';', 1)[0].trim()\n\n const { encoding } = this\n\n // Handle undefined cases\n if (encoding === undefined) {\n // Expecting no body\n return mime === undefined\n } else if (mime === undefined) {\n // Expecting a body, but got no content-type\n return false\n }\n\n if (encoding === '*/*') {\n return true\n }\n\n if (encoding.endsWith('/*')) {\n return mime.startsWith(encoding.slice(0, -1))\n }\n\n // Invalid: Lexicon can only specify \"*/*\" or \"type/*\" wildcards\n if (encoding.includes('*')) {\n return false\n }\n\n return encoding === mime\n }\n}\n"]}
1
+ {"version":3,"file":"payload.js","sourceRoot":"","sources":["../../src/schema/payload.ts"],"names":[],"mappings":";;;AAyFA,0BAKC;AAGD,kCAIC;AAnGD,2CAAqE;AAsCrE,MAAa,OAAO;IAKP;IACA;IAFX,YACW,QAAmB,EACnB,MAAgB;QADhB,aAAQ,GAAR,QAAQ,CAAW;QACnB,WAAM,GAAN,MAAM,CAAU;QAEzB,IAAI,QAAQ,KAAK,SAAS,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;YACnD,MAAM,IAAI,SAAS,CAAC,qDAAqD,CAAC,CAAA;QAC5E,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,eAAe,CAAC,WAA+B;QAC7C,MAAM,IAAI,GAAG,WAAW,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAA;QAEjD,MAAM,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;QAEzB,yBAAyB;QACzB,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,oBAAoB;YACpB,OAAO,IAAI,KAAK,SAAS,CAAA;QAC3B,CAAC;aAAM,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;YAC9B,4CAA4C;YAC5C,OAAO,KAAK,CAAA;QACd,CAAC;QAED,IAAI,QAAQ,KAAK,KAAK,EAAE,CAAC;YACvB,OAAO,IAAI,CAAA;QACb,CAAC;QAED,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC5B,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC/C,CAAC;QAED,gEAAgE;QAChE,IAAI,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;YAC3B,OAAO,KAAK,CAAA;QACd,CAAC;QAED,OAAO,QAAQ,KAAK,IAAI,CAAA;IAC1B,CAAC;CACF;AA9CD,0BA8CC;AAED,wBAAwB;AACxB,SAAgB,OAAO,CAGrB,WAAc,SAAc,EAAE,YAAe,SAAc;IAC3D,OAAO,IAAI,OAAO,CAAO,QAAQ,EAAE,SAAS,CAAC,CAAA;AAC/C,CAAC;AAED,wBAAwB;AACxB,SAAgB,WAAW,CACzB,UAAa;IAEb,OAAO,OAAO,CAAC,kBAAkB,EAAE,IAAA,kBAAM,EAAC,UAAU,CAAC,CAAC,CAAA;AACxD,CAAC","sourcesContent":["import { LexValue } from '@atproto/lex-data'\nimport { Infer, Schema } from '../core.js'\nimport { ObjectSchema, ObjectSchemaShape, object } from './object.js'\n\nexport type InferPayload<\n TPayload extends Payload,\n TBody,\n> = TPayload['encoding'] extends infer E extends string\n ? {\n encoding: SchemaEncodingToDataEncoding<E>\n body: InferPayloadBody<TPayload, TBody>\n }\n : void | undefined\n\nexport type SchemaEncodingToDataEncoding<E extends string> = E extends '*/*'\n ? `${string}/${string}`\n : E extends `${infer T extends string}/*`\n ? `${T}/${string}`\n : E\n\nexport type InferPayloadEncoding<TPayload extends Payload> =\n TPayload['encoding'] extends string\n ? SchemaEncodingToDataEncoding<TPayload['encoding']>\n : undefined\n\nexport type InferPayloadBody<\n TPayload extends Payload,\n TBody,\n> = TPayload['encoding'] extends undefined\n ? undefined // No encoding, no payload\n : TPayload['schema'] extends Schema\n ? Infer<TPayload['schema']>\n : TPayload['encoding'] extends `application/json`\n ? LexValue\n : TBody\n\nexport type PayloadShape<E extends string | undefined> = E extends undefined\n ? undefined\n : Schema | undefined\n\nexport class Payload<\n const TEncoding extends string | undefined = string | undefined,\n const TPayload extends PayloadShape<TEncoding> = PayloadShape<TEncoding>,\n> {\n constructor(\n readonly encoding: TEncoding,\n readonly schema: TPayload,\n ) {\n if (encoding === undefined && schema !== undefined) {\n throw new TypeError('schema cannot be defined when encoding is undefined')\n }\n }\n\n /**\n * Checks whether the given content-type matches the expected payload schema's\n * encoding.\n */\n matchesEncoding(contentType: string | undefined): boolean {\n const mime = contentType?.split(';', 1)[0].trim()\n\n const { encoding } = this\n\n // Handle undefined cases\n if (encoding === undefined) {\n // Expecting no body\n return mime === undefined\n } else if (mime === undefined) {\n // Expecting a body, but got no content-type\n return false\n }\n\n if (encoding === '*/*') {\n return true\n }\n\n if (encoding.endsWith('/*')) {\n return mime.startsWith(encoding.slice(0, -1))\n }\n\n // Invalid: Lexicon can only specify \"*/*\" or \"type/*\" wildcards\n if (encoding.includes('*')) {\n return false\n }\n\n return encoding === mime\n }\n}\n\n/*@__NO_SIDE_EFFECTS__*/\nexport function payload<\n const E extends string | undefined = undefined,\n const S extends PayloadShape<E> = undefined,\n>(encoding: E = undefined as E, validator: S = undefined as S) {\n return new Payload<E, S>(encoding, validator)\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"]}
@@ -12,4 +12,5 @@ export declare class PermissionSet<const TNsid extends NsidString = any, const T
12
12
  readonly options: PermissionSetOptions;
13
13
  constructor(nsid: TNsid, permissions: TPermissions, options?: PermissionSetOptions);
14
14
  }
15
+ export declare function permissionSet<const N extends NsidString, const P extends readonly Permission[]>(nsid: N, permissions: P, options?: PermissionSetOptions): PermissionSet<N, P>;
15
16
  //# sourceMappingURL=permission-set.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"permission-set.d.ts","sourceRoot":"","sources":["../../src/schema/permission-set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,CAAA;IACjD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,CAAA;CACnD,CAAA;AAED,qBAAa,aAAa,CACxB,KAAK,CAAC,KAAK,SAAS,UAAU,GAAG,GAAG,EACpC,KAAK,CAAC,YAAY,SAAS,SAAS,UAAU,EAAE,GAAG,GAAG;IAGpD,QAAQ,CAAC,IAAI,EAAE,KAAK;IACpB,QAAQ,CAAC,WAAW,EAAE,YAAY;IAClC,QAAQ,CAAC,OAAO,EAAE,oBAAoB;gBAF7B,IAAI,EAAE,KAAK,EACX,WAAW,EAAE,YAAY,EACzB,OAAO,GAAE,oBAAyB;CAE9C"}
1
+ {"version":3,"file":"permission-set.d.ts","sourceRoot":"","sources":["../../src/schema/permission-set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAA;AAE5C,MAAM,MAAM,oBAAoB,GAAG;IACjC,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,CAAA;IACjD,MAAM,CAAC,EAAE,MAAM,CAAA;IACf,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,CAAA;CACnD,CAAA;AAED,qBAAa,aAAa,CACxB,KAAK,CAAC,KAAK,SAAS,UAAU,GAAG,GAAG,EACpC,KAAK,CAAC,YAAY,SAAS,SAAS,UAAU,EAAE,GAAG,GAAG;IAGpD,QAAQ,CAAC,IAAI,EAAE,KAAK;IACpB,QAAQ,CAAC,WAAW,EAAE,YAAY;IAClC,QAAQ,CAAC,OAAO,EAAE,oBAAoB;gBAF7B,IAAI,EAAE,KAAK,EACX,WAAW,EAAE,YAAY,EACzB,OAAO,GAAE,oBAAyB;CAE9C;AAGD,wBAAgB,aAAa,CAC3B,KAAK,CAAC,CAAC,SAAS,UAAU,EAC1B,KAAK,CAAC,CAAC,SAAS,SAAS,UAAU,EAAE,EACrC,IAAI,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE,OAAO,CAAC,EAAE,oBAAoB,uBAExD"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.PermissionSet = void 0;
4
+ exports.permissionSet = permissionSet;
4
5
  class PermissionSet {
5
6
  nsid;
6
7
  permissions;
@@ -12,4 +13,8 @@ class PermissionSet {
12
13
  }
13
14
  }
14
15
  exports.PermissionSet = PermissionSet;
16
+ /*@__NO_SIDE_EFFECTS__*/
17
+ function permissionSet(nsid, permissions, options) {
18
+ return new PermissionSet(nsid, permissions, options);
19
+ }
15
20
  //# sourceMappingURL=permission-set.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"permission-set.js","sourceRoot":"","sources":["../../src/schema/permission-set.ts"],"names":[],"mappings":";;;AAUA,MAAa,aAAa;IAKb;IACA;IACA;IAHX,YACW,IAAW,EACX,WAAyB,EACzB,UAAgC,EAAE;QAFlC,SAAI,GAAJ,IAAI,CAAO;QACX,gBAAW,GAAX,WAAW,CAAc;QACzB,YAAO,GAAP,OAAO,CAA2B;IAC1C,CAAC;CACL;AATD,sCASC","sourcesContent":["import { NsidString } from '../core.js'\nimport { Permission } from './permission.js'\n\nexport type PermissionSetOptions = {\n title?: string\n 'title:lang'?: Record<string, undefined | string>\n detail?: string\n 'detail:lang'?: Record<string, undefined | string>\n}\n\nexport class PermissionSet<\n const TNsid extends NsidString = any,\n const TPermissions extends readonly Permission[] = any,\n> {\n constructor(\n readonly nsid: TNsid,\n readonly permissions: TPermissions,\n readonly options: PermissionSetOptions = {},\n ) {}\n}\n"]}
1
+ {"version":3,"file":"permission-set.js","sourceRoot":"","sources":["../../src/schema/permission-set.ts"],"names":[],"mappings":";;;AAsBA,sCAKC;AAjBD,MAAa,aAAa;IAKb;IACA;IACA;IAHX,YACW,IAAW,EACX,WAAyB,EACzB,UAAgC,EAAE;QAFlC,SAAI,GAAJ,IAAI,CAAO;QACX,gBAAW,GAAX,WAAW,CAAc;QACzB,YAAO,GAAP,OAAO,CAA2B;IAC1C,CAAC;CACL;AATD,sCASC;AAED,wBAAwB;AACxB,SAAgB,aAAa,CAG3B,IAAO,EAAE,WAAc,EAAE,OAA8B;IACvD,OAAO,IAAI,aAAa,CAAO,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC,CAAA;AAC5D,CAAC","sourcesContent":["import { NsidString } from '../core.js'\nimport { Permission } from './permission.js'\n\nexport type PermissionSetOptions = {\n title?: string\n 'title:lang'?: Record<string, undefined | string>\n detail?: string\n 'detail:lang'?: Record<string, undefined | string>\n}\n\nexport class PermissionSet<\n const TNsid extends NsidString = any,\n const TPermissions extends readonly Permission[] = any,\n> {\n constructor(\n readonly nsid: TNsid,\n readonly permissions: TPermissions,\n readonly options: PermissionSetOptions = {},\n ) {}\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,8 +1,9 @@
1
- import { Params } from './_parameters.js';
1
+ import { Params } from './params.js';
2
2
  export type PermissionOptions = Params;
3
- export declare class Permission<const Resource extends string = any, const Options extends PermissionOptions = any> {
4
- readonly resource: Resource;
5
- readonly options: Options;
6
- constructor(resource: Resource, options: Options);
3
+ export declare class Permission<const TResource extends string = any, const TOptions extends PermissionOptions = any> {
4
+ readonly resource: TResource;
5
+ readonly options: TOptions;
6
+ constructor(resource: TResource, options: TOptions);
7
7
  }
8
+ export declare function permission<const R extends string, const O extends PermissionOptions>(resource: R, options?: PermissionOptions & O): Permission<R, O>;
8
9
  //# sourceMappingURL=permission.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"permission.d.ts","sourceRoot":"","sources":["../../src/schema/permission.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAA;AAEzC,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAA;AAEtC,qBAAa,UAAU,CACrB,KAAK,CAAC,QAAQ,SAAS,MAAM,GAAG,GAAG,EACnC,KAAK,CAAC,OAAO,SAAS,iBAAiB,GAAG,GAAG;IAG3C,QAAQ,CAAC,QAAQ,EAAE,QAAQ;IAC3B,QAAQ,CAAC,OAAO,EAAE,OAAO;gBADhB,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,OAAO;CAE5B"}
1
+ {"version":3,"file":"permission.d.ts","sourceRoot":"","sources":["../../src/schema/permission.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAA;AAEpC,MAAM,MAAM,iBAAiB,GAAG,MAAM,CAAA;AAEtC,qBAAa,UAAU,CACrB,KAAK,CAAC,SAAS,SAAS,MAAM,GAAG,GAAG,EACpC,KAAK,CAAC,QAAQ,SAAS,iBAAiB,GAAG,GAAG;IAG5C,QAAQ,CAAC,QAAQ,EAAE,SAAS;IAC5B,QAAQ,CAAC,OAAO,EAAE,QAAQ;gBADjB,QAAQ,EAAE,SAAS,EACnB,OAAO,EAAE,QAAQ;CAE7B;AAGD,wBAAgB,UAAU,CACxB,KAAK,CAAC,CAAC,SAAS,MAAM,EACtB,KAAK,CAAC,CAAC,SAAS,iBAAiB,EACjC,QAAQ,EAAE,CAAC,EAAE,OAAO,GAAE,iBAAiB,GAAG,CAAW,oBAEtD"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Permission = void 0;
4
+ exports.permission = permission;
4
5
  class Permission {
5
6
  resource;
6
7
  options;
@@ -10,4 +11,8 @@ class Permission {
10
11
  }
11
12
  }
12
13
  exports.Permission = Permission;
14
+ /*@__NO_SIDE_EFFECTS__*/
15
+ function permission(resource, options = {}) {
16
+ return new Permission(resource, options);
17
+ }
13
18
  //# sourceMappingURL=permission.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"permission.js","sourceRoot":"","sources":["../../src/schema/permission.ts"],"names":[],"mappings":";;;AAIA,MAAa,UAAU;IAKV;IACA;IAFX,YACW,QAAkB,EAClB,OAAgB;QADhB,aAAQ,GAAR,QAAQ,CAAU;QAClB,YAAO,GAAP,OAAO,CAAS;IACxB,CAAC;CACL;AARD,gCAQC","sourcesContent":["import { Params } from './_parameters.js'\n\nexport type PermissionOptions = Params\n\nexport class Permission<\n const Resource extends string = any,\n const Options extends PermissionOptions = any,\n> {\n constructor(\n readonly resource: Resource,\n readonly options: Options,\n ) {}\n}\n"]}
1
+ {"version":3,"file":"permission.js","sourceRoot":"","sources":["../../src/schema/permission.ts"],"names":[],"mappings":";;;AAeA,gCAKC;AAhBD,MAAa,UAAU;IAKV;IACA;IAFX,YACW,QAAmB,EACnB,OAAiB;QADjB,aAAQ,GAAR,QAAQ,CAAW;QACnB,YAAO,GAAP,OAAO,CAAU;IACzB,CAAC;CACL;AARD,gCAQC;AAED,wBAAwB;AACxB,SAAgB,UAAU,CAGxB,QAAW,EAAE,UAAiC,EAAO;IACrD,OAAO,IAAI,UAAU,CAAO,QAAQ,EAAE,OAAO,CAAC,CAAA;AAChD,CAAC","sourcesContent":["import { Params } from './params.js'\n\nexport type PermissionOptions = Params\n\nexport class Permission<\n const TResource extends string = any,\n const TOptions extends PermissionOptions = any,\n> {\n constructor(\n readonly resource: TResource,\n readonly options: TOptions,\n ) {}\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"]}
@@ -1,7 +1,7 @@
1
1
  import { NsidString } from '../core.js';
2
2
  import { ParamsSchema } from './params.js';
3
3
  import { Payload } from './payload.js';
4
- export declare class Procedure<TNsid extends NsidString = NsidString, TParameters extends ParamsSchema = ParamsSchema, TInputPayload extends Payload = Payload, TOutputPayload extends Payload = Payload, TErrors extends undefined | readonly string[] = undefined | readonly string[]> {
4
+ export declare class Procedure<const TNsid extends NsidString = NsidString, const TParameters extends ParamsSchema = ParamsSchema, const TInputPayload extends Payload = Payload, const TOutputPayload extends Payload = Payload, const TErrors extends undefined | readonly string[] = undefined | readonly string[]> {
5
5
  readonly nsid: TNsid;
6
6
  readonly parameters: TParameters;
7
7
  readonly input: TInputPayload;
@@ -10,4 +10,5 @@ export declare class Procedure<TNsid extends NsidString = NsidString, TParameter
10
10
  readonly type: "procedure";
11
11
  constructor(nsid: TNsid, parameters: TParameters, input: TInputPayload, output: TOutputPayload, errors: TErrors);
12
12
  }
13
+ export declare function procedure<const N extends NsidString, const P extends ParamsSchema, const I extends Payload, const O extends Payload, const E extends undefined | readonly string[] = undefined>(nsid: N, parameters: P, input: I, output: O, errors?: E): Procedure<N, P, I, O, E>;
13
14
  //# sourceMappingURL=procedure.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"procedure.d.ts","sourceRoot":"","sources":["../../src/schema/procedure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,qBAAa,SAAS,CACpB,KAAK,SAAS,UAAU,GAAG,UAAU,EACrC,WAAW,SAAS,YAAY,GAAG,YAAY,EAC/C,aAAa,SAAS,OAAO,GAAG,OAAO,EACvC,cAAc,SAAS,OAAO,GAAG,OAAO,EACxC,OAAO,SAAS,SAAS,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,GAAG,SAAS,MAAM,EAAE;IAK3E,QAAQ,CAAC,IAAI,EAAE,KAAK;IACpB,QAAQ,CAAC,UAAU,EAAE,WAAW;IAChC,QAAQ,CAAC,KAAK,EAAE,aAAa;IAC7B,QAAQ,CAAC,MAAM,EAAE,cAAc;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO;IAP1B,QAAQ,CAAC,IAAI,EAAG,WAAW,CAAS;gBAGzB,IAAI,EAAE,KAAK,EACX,UAAU,EAAE,WAAW,EACvB,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,OAAO;CAE3B"}
1
+ {"version":3,"file":"procedure.d.ts","sourceRoot":"","sources":["../../src/schema/procedure.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,qBAAa,SAAS,CACpB,KAAK,CAAC,KAAK,SAAS,UAAU,GAAG,UAAU,EAC3C,KAAK,CAAC,WAAW,SAAS,YAAY,GAAG,YAAY,EACrD,KAAK,CAAC,aAAa,SAAS,OAAO,GAAG,OAAO,EAC7C,KAAK,CAAC,cAAc,SAAS,OAAO,GAAG,OAAO,EAC9C,KAAK,CAAC,OAAO,SAAS,SAAS,GAAG,SAAS,MAAM,EAAE,GAC/C,SAAS,GACT,SAAS,MAAM,EAAE;IAKnB,QAAQ,CAAC,IAAI,EAAE,KAAK;IACpB,QAAQ,CAAC,UAAU,EAAE,WAAW;IAChC,QAAQ,CAAC,KAAK,EAAE,aAAa;IAC7B,QAAQ,CAAC,MAAM,EAAE,cAAc;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO;IAP1B,QAAQ,CAAC,IAAI,EAAG,WAAW,CAAS;gBAGzB,IAAI,EAAE,KAAK,EACX,UAAU,EAAE,WAAW,EACvB,KAAK,EAAE,aAAa,EACpB,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,OAAO;CAE3B;AAGD,wBAAgB,SAAS,CACvB,KAAK,CAAC,CAAC,SAAS,UAAU,EAC1B,KAAK,CAAC,CAAC,SAAS,YAAY,EAC5B,KAAK,CAAC,CAAC,SAAS,OAAO,EACvB,KAAK,CAAC,CAAC,SAAS,OAAO,EACvB,KAAK,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,EACzD,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAE,CAAkB,4BAExE"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Procedure = void 0;
4
+ exports.procedure = procedure;
4
5
  class Procedure {
5
6
  nsid;
6
7
  parameters;
@@ -17,4 +18,8 @@ class Procedure {
17
18
  }
18
19
  }
19
20
  exports.Procedure = Procedure;
21
+ /*@__NO_SIDE_EFFECTS__*/
22
+ function procedure(nsid, parameters, input, output, errors = undefined) {
23
+ return new Procedure(nsid, parameters, input, output, errors);
24
+ }
20
25
  //# sourceMappingURL=procedure.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"procedure.js","sourceRoot":"","sources":["../../src/schema/procedure.ts"],"names":[],"mappings":";;;AAIA,MAAa,SAAS;IAUT;IACA;IACA;IACA;IACA;IAPF,IAAI,GAAG,WAAoB,CAAA;IAEpC,YACW,IAAW,EACX,UAAuB,EACvB,KAAoB,EACpB,MAAsB,EACtB,MAAe;QAJf,SAAI,GAAJ,IAAI,CAAO;QACX,eAAU,GAAV,UAAU,CAAa;QACvB,UAAK,GAAL,KAAK,CAAe;QACpB,WAAM,GAAN,MAAM,CAAgB;QACtB,WAAM,GAAN,MAAM,CAAS;IACvB,CAAC;CACL;AAhBD,8BAgBC","sourcesContent":["import { NsidString } from '../core.js'\nimport { ParamsSchema } from './params.js'\nimport { Payload } from './payload.js'\n\nexport class Procedure<\n TNsid extends NsidString = NsidString,\n TParameters extends ParamsSchema = ParamsSchema,\n TInputPayload extends Payload = Payload,\n TOutputPayload extends Payload = Payload,\n TErrors extends undefined | readonly string[] = undefined | readonly string[],\n> {\n readonly type = 'procedure' as const\n\n constructor(\n readonly nsid: TNsid,\n readonly parameters: TParameters,\n readonly input: TInputPayload,\n readonly output: TOutputPayload,\n readonly errors: TErrors,\n ) {}\n}\n"]}
1
+ {"version":3,"file":"procedure.js","sourceRoot":"","sources":["../../src/schema/procedure.ts"],"names":[],"mappings":";;;AAyBA,8BAQC;AA7BD,MAAa,SAAS;IAYT;IACA;IACA;IACA;IACA;IAPF,IAAI,GAAG,WAAoB,CAAA;IAEpC,YACW,IAAW,EACX,UAAuB,EACvB,KAAoB,EACpB,MAAsB,EACtB,MAAe;QAJf,SAAI,GAAJ,IAAI,CAAO;QACX,eAAU,GAAV,UAAU,CAAa;QACvB,UAAK,GAAL,KAAK,CAAe;QACpB,WAAM,GAAN,MAAM,CAAgB;QACtB,WAAM,GAAN,MAAM,CAAS;IACvB,CAAC;CACL;AAlBD,8BAkBC;AAED,wBAAwB;AACxB,SAAgB,SAAS,CAMvB,IAAO,EAAE,UAAa,EAAE,KAAQ,EAAE,MAAS,EAAE,SAAY,SAAc;IACvE,OAAO,IAAI,SAAS,CAAgB,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAC9E,CAAC","sourcesContent":["import { NsidString } from '../core.js'\nimport { ParamsSchema } from './params.js'\nimport { Payload } from './payload.js'\n\nexport class Procedure<\n const TNsid extends NsidString = NsidString,\n const TParameters extends ParamsSchema = ParamsSchema,\n const TInputPayload extends Payload = Payload,\n const TOutputPayload extends Payload = Payload,\n const TErrors extends undefined | readonly string[] =\n | undefined\n | readonly string[],\n> {\n readonly type = 'procedure' as const\n\n constructor(\n readonly nsid: TNsid,\n readonly parameters: TParameters,\n readonly input: TInputPayload,\n readonly output: TOutputPayload,\n readonly errors: TErrors,\n ) {}\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"]}
@@ -1,7 +1,7 @@
1
1
  import { NsidString } from '../core.js';
2
2
  import { ParamsSchema } from './params.js';
3
3
  import { Payload } from './payload.js';
4
- export declare class Query<TNsid extends NsidString = NsidString, TParameters extends ParamsSchema = ParamsSchema, TOutputPayload extends Payload = Payload, TErrors extends undefined | readonly string[] = undefined | readonly string[]> {
4
+ export declare class Query<const TNsid extends NsidString = NsidString, const TParameters extends ParamsSchema = ParamsSchema, const TOutputPayload extends Payload = Payload, const TErrors extends undefined | readonly string[] = undefined | readonly string[]> {
5
5
  readonly nsid: TNsid;
6
6
  readonly parameters: TParameters;
7
7
  readonly output: TOutputPayload;
@@ -9,4 +9,5 @@ export declare class Query<TNsid extends NsidString = NsidString, TParameters ex
9
9
  readonly type: "query";
10
10
  constructor(nsid: TNsid, parameters: TParameters, output: TOutputPayload, errors: TErrors);
11
11
  }
12
+ export declare function query<const N extends NsidString, const P extends ParamsSchema, const O extends Payload, const E extends undefined | readonly string[] = undefined>(nsid: N, parameters: P, output: O, errors?: E): Query<N, P, O, E>;
12
13
  //# sourceMappingURL=query.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/schema/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,qBAAa,KAAK,CAChB,KAAK,SAAS,UAAU,GAAG,UAAU,EACrC,WAAW,SAAS,YAAY,GAAG,YAAY,EAC/C,cAAc,SAAS,OAAO,GAAG,OAAO,EACxC,OAAO,SAAS,SAAS,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,GAAG,SAAS,MAAM,EAAE;IAK3E,QAAQ,CAAC,IAAI,EAAE,KAAK;IACpB,QAAQ,CAAC,UAAU,EAAE,WAAW;IAChC,QAAQ,CAAC,MAAM,EAAE,cAAc;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO;IAN1B,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAS;gBAGrB,IAAI,EAAE,KAAK,EACX,UAAU,EAAE,WAAW,EACvB,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,OAAO;CAE3B"}
1
+ {"version":3,"file":"query.d.ts","sourceRoot":"","sources":["../../src/schema/query.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AACvC,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AAC1C,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAA;AAEtC,qBAAa,KAAK,CAChB,KAAK,CAAC,KAAK,SAAS,UAAU,GAAG,UAAU,EAC3C,KAAK,CAAC,WAAW,SAAS,YAAY,GAAG,YAAY,EACrD,KAAK,CAAC,cAAc,SAAS,OAAO,GAAG,OAAO,EAC9C,KAAK,CAAC,OAAO,SAAS,SAAS,GAAG,SAAS,MAAM,EAAE,GAC/C,SAAS,GACT,SAAS,MAAM,EAAE;IAKnB,QAAQ,CAAC,IAAI,EAAE,KAAK;IACpB,QAAQ,CAAC,UAAU,EAAE,WAAW;IAChC,QAAQ,CAAC,MAAM,EAAE,cAAc;IAC/B,QAAQ,CAAC,MAAM,EAAE,OAAO;IAN1B,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAS;gBAGrB,IAAI,EAAE,KAAK,EACX,UAAU,EAAE,WAAW,EACvB,MAAM,EAAE,cAAc,EACtB,MAAM,EAAE,OAAO;CAE3B;AAGD,wBAAgB,KAAK,CACnB,KAAK,CAAC,CAAC,SAAS,UAAU,EAC1B,KAAK,CAAC,CAAC,SAAS,YAAY,EAC5B,KAAK,CAAC,CAAC,SAAS,OAAO,EACvB,KAAK,CAAC,CAAC,SAAS,SAAS,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,EACzD,IAAI,EAAE,CAAC,EAAE,UAAU,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,MAAM,GAAE,CAAkB,qBAE9D"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.Query = void 0;
4
+ exports.query = query;
4
5
  class Query {
5
6
  nsid;
6
7
  parameters;
@@ -15,4 +16,8 @@ class Query {
15
16
  }
16
17
  }
17
18
  exports.Query = Query;
19
+ /*@__NO_SIDE_EFFECTS__*/
20
+ function query(nsid, parameters, output, errors = undefined) {
21
+ return new Query(nsid, parameters, output, errors);
22
+ }
18
23
  //# sourceMappingURL=query.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/schema/query.ts"],"names":[],"mappings":";;;AAIA,MAAa,KAAK;IASL;IACA;IACA;IACA;IANF,IAAI,GAAG,OAAgB,CAAA;IAEhC,YACW,IAAW,EACX,UAAuB,EACvB,MAAsB,EACtB,MAAe;QAHf,SAAI,GAAJ,IAAI,CAAO;QACX,eAAU,GAAV,UAAU,CAAa;QACvB,WAAM,GAAN,MAAM,CAAgB;QACtB,WAAM,GAAN,MAAM,CAAS;IACvB,CAAC;CACL;AAdD,sBAcC","sourcesContent":["import { NsidString } from '../core.js'\nimport { ParamsSchema } from './params.js'\nimport { Payload } from './payload.js'\n\nexport class Query<\n TNsid extends NsidString = NsidString,\n TParameters extends ParamsSchema = ParamsSchema,\n TOutputPayload extends Payload = Payload,\n TErrors extends undefined | readonly string[] = undefined | readonly string[],\n> {\n readonly type = 'query' as const\n\n constructor(\n readonly nsid: TNsid,\n readonly parameters: TParameters,\n readonly output: TOutputPayload,\n readonly errors: TErrors,\n ) {}\n}\n"]}
1
+ {"version":3,"file":"query.js","sourceRoot":"","sources":["../../src/schema/query.ts"],"names":[],"mappings":";;;AAuBA,sBAOC;AA1BD,MAAa,KAAK;IAWL;IACA;IACA;IACA;IANF,IAAI,GAAG,OAAgB,CAAA;IAEhC,YACW,IAAW,EACX,UAAuB,EACvB,MAAsB,EACtB,MAAe;QAHf,SAAI,GAAJ,IAAI,CAAO;QACX,eAAU,GAAV,UAAU,CAAa;QACvB,WAAM,GAAN,MAAM,CAAgB;QACtB,WAAM,GAAN,MAAM,CAAS;IACvB,CAAC;CACL;AAhBD,sBAgBC;AAED,wBAAwB;AACxB,SAAgB,KAAK,CAKnB,IAAO,EAAE,UAAa,EAAE,MAAS,EAAE,SAAY,SAAc;IAC7D,OAAO,IAAI,KAAK,CAAa,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,CAAA;AAChE,CAAC","sourcesContent":["import { NsidString } from '../core.js'\nimport { ParamsSchema } from './params.js'\nimport { Payload } from './payload.js'\n\nexport class Query<\n const TNsid extends NsidString = NsidString,\n const TParameters extends ParamsSchema = ParamsSchema,\n const TOutputPayload extends Payload = Payload,\n const TErrors extends undefined | readonly string[] =\n | undefined\n | readonly string[],\n> {\n readonly type = 'query' as const\n\n constructor(\n readonly nsid: TNsid,\n readonly parameters: TParameters,\n readonly output: TOutputPayload,\n readonly errors: TErrors,\n ) {}\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"]}
@@ -1,39 +1,57 @@
1
- import { $Typed, Infer, LexiconRecordKey, NsidString, Schema, TidString, ValidationResult, Validator, ValidatorContext } from '../core.js';
2
- import { TypedObject } from './typed-union.js';
3
- export type InferRecordKey<R extends RecordSchema> = R extends RecordSchema<infer K> ? RecordKeySchemaOutput<K> : never;
4
- export type RecordSchemaOutput<T extends NsidString, S extends Validator<{
1
+ import { $Typed, InferInput, InferOutput, LexiconRecordKey, NsidString, Schema, TidString, Unknown$TypedObject, ValidationContext, Validator } from '../core.js';
2
+ export type InferRecordKey<R extends RecordSchema> = R extends RecordSchema<infer TKey> ? RecordKeySchemaOutput<TKey> : never;
3
+ export declare class RecordSchema<const TKey extends LexiconRecordKey = any, const TType extends NsidString = any, const TShape extends Validator<{
5
4
  [k: string]: unknown;
6
- }>> = $Typed<Infer<S>, T>;
7
- export declare class RecordSchema<K extends LexiconRecordKey = any, T extends NsidString = any, S extends Validator<{
8
- [k: string]: unknown;
9
- }> = any> extends Schema<RecordSchemaOutput<T, S>> {
10
- readonly key: K;
11
- readonly $type: T;
12
- readonly schema: S;
13
- keySchema: RecordKeySchema<K>;
14
- constructor(key: K, $type: T, schema: S);
5
+ }> = any> extends Schema<$Typed<InferInput<TShape>, TType>, $Typed<InferOutput<TShape>, TType>> {
6
+ readonly key: TKey;
7
+ readonly $type: TType;
8
+ readonly schema: TShape;
9
+ keySchema: RecordKeySchema<TKey>;
10
+ constructor(key: TKey, $type: TType, schema: TShape);
15
11
  isTypeOf<X extends {
16
12
  $type?: unknown;
17
- }>(value: X): value is Exclude<X extends {
18
- $type: T;
19
- } ? X : $Typed<X, T>, TypedObject>;
20
- build<X extends Omit<Infer<S>, '$type'>>(input: X): $Typed<Omit<X, '$type'>, T>;
13
+ }>(value: X): value is X extends {
14
+ $type: TType;
15
+ } ? X : $Typed<Exclude<X, Unknown$TypedObject>, TType>;
16
+ build(input: Omit<InferInput<this>, '$type'>): $Typed<InferOutput<this>, TType>;
21
17
  $isTypeOf<X extends {
22
18
  $type?: unknown;
23
- }>(value: X): value is Exclude<X extends {
24
- $type: T;
25
- } ? X : X & {
26
- $type: T;
27
- } extends infer T_1 ? { [K_1 in keyof T_1]: (X & {
28
- $type: T;
29
- })[K_1]; } : never, TypedObject>;
30
- $build<X extends Omit<Infer<S>, '$type'>>(input: X): Omit<X, "$type"> & {
31
- $type: T;
32
- } extends infer T_1 ? { [K_1 in keyof T_1]: (Omit<X, "$type"> & {
33
- $type: T;
34
- })[K_1]; } : never;
35
- validateInContext(input: unknown, ctx: ValidatorContext): ValidationResult<RecordSchemaOutput<T, S>>;
19
+ }>(value: X): value is X extends {
20
+ $type: TType;
21
+ } ? X : Exclude<X, Unknown$TypedObject> & {
22
+ $type: TType;
23
+ } extends infer T ? { [K in keyof T]: (Exclude<X, Unknown$TypedObject> & {
24
+ $type: TType;
25
+ })[K]; } : never;
26
+ $build(input: Omit<InferInput<this>, '$type'>): InferOutput<this> & {
27
+ $type: TType;
28
+ } extends infer T ? { [K in keyof T]: (InferOutput<this> & {
29
+ $type: TType;
30
+ })[K]; } : never;
31
+ validateInContext(input: unknown, ctx: ValidationContext): import("../core.js").ValidationFailure | import("../core.js").ValidationSuccess<InferInput<TShape>>;
36
32
  }
37
33
  export type RecordKeySchemaOutput<Key extends LexiconRecordKey> = Key extends 'any' ? string : Key extends 'tid' ? TidString : Key extends 'nsid' ? NsidString : Key extends `literal:${infer L extends string}` ? L : never;
38
34
  export type RecordKeySchema<Key extends LexiconRecordKey> = Schema<RecordKeySchemaOutput<Key>>;
35
+ /**
36
+ * Ensures that a `$type` used in a record is a valid NSID (i.e. no fragment).
37
+ */
38
+ type AsNsid<T> = T extends `${string}#${string}` ? never : T;
39
+ /**
40
+ * This function offers two overloads:
41
+ * - One that allows creating a {@link RecordSchema}, and infer the output type
42
+ * from the provided arguments, without requiring to specify any of the
43
+ * generics. This is useful when you want to define a record without
44
+ * explicitly defining its interface. This version does not support circular
45
+ * references, as TypeScript cannot infer types in such cases.
46
+ * - One allows creating a {@link RecordSchema} with an explicitly defined
47
+ * interface. This will typically be used by codegen (`lex build`) to generate
48
+ * schemas that work even if they contain circular references.
49
+ */
50
+ export declare function record<const K extends LexiconRecordKey, const T extends NsidString, const S extends Validator<{
51
+ [k: string]: unknown;
52
+ }>>(key: K, type: AsNsid<T>, validator: S): RecordSchema<K, T, S>;
53
+ export declare function record<const K extends LexiconRecordKey, const V extends {
54
+ $type: NsidString;
55
+ }>(key: K, type: AsNsid<V['$type']>, validator: Validator<Omit<V, '$type'>>): RecordSchema<K, V['$type'], Validator<Omit<V, '$type'>>>;
56
+ export {};
39
57
  //# sourceMappingURL=record.d.ts.map
@@ -1 +1 @@
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"}
1
+ {"version":3,"file":"record.d.ts","sourceRoot":"","sources":["../../src/schema/record.ts"],"names":[],"mappings":"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"}
@@ -1,6 +1,7 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.RecordSchema = void 0;
4
+ exports.record = record;
4
5
  const core_js_1 = require("../core.js");
5
6
  const literal_js_1 = require("./literal.js");
6
7
  const string_js_1 = require("./string.js");
@@ -20,9 +21,7 @@ class RecordSchema extends core_js_1.Schema {
20
21
  return value.$type === this.$type;
21
22
  }
22
23
  build(input) {
23
- return input.$type === this.$type
24
- ? input
25
- : { ...input, $type: this.$type };
24
+ return this.parse((0, core_js_1.$typed)(input, this.$type));
26
25
  }
27
26
  $isTypeOf(value) {
28
27
  return this.isTypeOf(value);
@@ -35,17 +34,17 @@ class RecordSchema extends core_js_1.Schema {
35
34
  if (!result.success) {
36
35
  return result;
37
36
  }
38
- if (this.$type !== result.value.$type) {
37
+ if (result.value.$type !== this.$type) {
39
38
  return ctx.issueInvalidPropertyValue(result.value, '$type', [this.$type]);
40
39
  }
41
40
  return result;
42
41
  }
43
42
  }
44
43
  exports.RecordSchema = RecordSchema;
45
- const keySchema = new string_js_1.StringSchema({ minLength: 1 });
46
- const tidSchema = new string_js_1.StringSchema({ format: 'tid' });
47
- const nsidSchema = new string_js_1.StringSchema({ format: 'nsid' });
48
- const selfLiteralSchema = new literal_js_1.LiteralSchema('self');
44
+ const keySchema = (0, string_js_1.string)({ minLength: 1 });
45
+ const tidSchema = (0, string_js_1.string)({ format: 'tid' });
46
+ const nsidSchema = (0, string_js_1.string)({ format: 'nsid' });
47
+ const selfLiteralSchema = (0, literal_js_1.literal)('self');
49
48
  function recordKey(key) {
50
49
  // @NOTE Use cached instances for common schemas
51
50
  if (key === 'any')
@@ -58,8 +57,12 @@ function recordKey(key) {
58
57
  const value = key.slice(8);
59
58
  if (value === 'self')
60
59
  return selfLiteralSchema;
61
- return new literal_js_1.LiteralSchema(value);
60
+ return (0, literal_js_1.literal)(value);
62
61
  }
63
62
  throw new Error(`Unsupported record key type: ${key}`);
64
63
  }
64
+ /*@__NO_SIDE_EFFECTS__*/
65
+ function record(key, type, validator) {
66
+ return new RecordSchema(key, type, validator);
67
+ }
65
68
  //# sourceMappingURL=record.js.map
@@ -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;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"]}
1
+ {"version":3,"file":"record.js","sourceRoot":"","sources":["../../src/schema/record.ts"],"names":[],"mappings":";;;AA6IA,wBAMC;AAnJD,wCAYmB;AACnB,6CAAsC;AACtC,2CAAoC;AAKpC,MAAa,YAIX,SAAQ,gBAGT;IAIY;IACA;IACA;IALX,SAAS,CAAuB;IAEhC,YACW,GAAS,EACT,KAAY,EACZ,MAAc;QAEvB,KAAK,EAAE,CAAA;QAJE,QAAG,GAAH,GAAG,CAAM;QACT,UAAK,GAAL,KAAK,CAAO;QACZ,WAAM,GAAN,MAAM,CAAQ;QAGvB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,CAAA;IACjC,CAAC;IAED,QAAQ,CACN,KAAQ;QAIR,OAAO,KAAK,CAAC,KAAK,KAAK,IAAI,CAAC,KAAK,CAAA;IACnC,CAAC;IAED,KAAK,CACH,KAAsC;QAEtC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAA,gBAAM,EAAC,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAA;IAC9C,CAAC;IAED,SAAS,CAAgC,KAAQ;QAC/C,OAAO,IAAI,CAAC,QAAQ,CAAI,KAAK,CAAC,CAAA;IAChC,CAAC;IAED,MAAM,CAAC,KAAsC;QAC3C,OAAO,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;IAC1B,CAAC;IAED,iBAAiB,CAAC,KAAc,EAAE,GAAsB;QACtD,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,MAAM,CAAC,KAAK,CAAC,KAAK,KAAK,IAAI,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,MAAM,CAAA;IACf,CAAC;CACF;AAtDD,oCAsDC;AAiBD,MAAM,SAAS,GAAG,IAAA,kBAAM,EAAC,EAAE,SAAS,EAAE,CAAC,EAAE,CAAC,CAAA;AAC1C,MAAM,SAAS,GAAG,IAAA,kBAAM,EAAC,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,CAAA;AAC3C,MAAM,UAAU,GAAG,IAAA,kBAAM,EAAC,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAA;AAC7C,MAAM,iBAAiB,GAAG,IAAA,oBAAO,EAAC,MAAM,CAAC,CAAA;AAEzC,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,IAAA,oBAAO,EAAC,KAAK,CAAC,CAAA;IACvB,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,EAAE,CAAC,CAAA;AACxD,CAAC;AA+BD,wBAAwB;AACxB,SAAgB,MAAM,CAIpB,GAAM,EAAE,IAAO,EAAE,SAAY;IAC7B,OAAO,IAAI,YAAY,CAAU,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,CAAA;AACxD,CAAC","sourcesContent":["import {\n $Typed,\n $typed,\n InferInput,\n InferOutput,\n LexiconRecordKey,\n NsidString,\n Schema,\n TidString,\n Unknown$TypedObject,\n ValidationContext,\n Validator,\n} from '../core.js'\nimport { literal } from './literal.js'\nimport { string } from './string.js'\n\nexport type InferRecordKey<R extends RecordSchema> =\n R extends RecordSchema<infer TKey> ? RecordKeySchemaOutput<TKey> : never\n\nexport class RecordSchema<\n const TKey extends LexiconRecordKey = any,\n const TType extends NsidString = any,\n const TShape extends Validator<{ [k: string]: unknown }> = any,\n> extends Schema<\n $Typed<InferInput<TShape>, TType>,\n $Typed<InferOutput<TShape>, TType>\n> {\n keySchema: RecordKeySchema<TKey>\n\n constructor(\n readonly key: TKey,\n readonly $type: TType,\n readonly schema: TShape,\n ) {\n super()\n this.keySchema = recordKey(key)\n }\n\n isTypeOf<X extends { $type?: unknown }>(\n value: X,\n ): value is X extends { $type: TType }\n ? X\n : $Typed<Exclude<X, Unknown$TypedObject>, TType> {\n return value.$type === this.$type\n }\n\n build(\n input: Omit<InferInput<this>, '$type'>,\n ): $Typed<InferOutput<this>, TType> {\n return this.parse($typed(input, this.$type))\n }\n\n $isTypeOf<X extends { $type?: unknown }>(value: X) {\n return this.isTypeOf<X>(value)\n }\n\n $build(input: Omit<InferInput<this>, '$type'>) {\n return this.build(input)\n }\n\n validateInContext(input: unknown, ctx: ValidationContext) {\n const result = ctx.validate(input, this.schema)\n\n if (!result.success) {\n return result\n }\n\n if (result.value.$type !== this.$type) {\n return ctx.issueInvalidPropertyValue(result.value, '$type', [this.$type])\n }\n\n return result\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 = string({ minLength: 1 })\nconst tidSchema = string({ format: 'tid' })\nconst nsidSchema = string({ format: 'nsid' })\nconst selfLiteralSchema = literal('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 literal(value)\n }\n\n throw new Error(`Unsupported record key type: ${key}`)\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>, validator: 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 validator: 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, validator: S) {\n return new RecordSchema<K, T, S>(key, type, validator)\n}\n"]}
@@ -1,9 +1,12 @@
1
- import { Schema, ValidationResult, Validator, ValidatorContext } from '../core.js';
2
- export type RefSchemaGetter<V> = () => Validator<V>;
3
- export declare class RefSchema<V = any> extends Schema<V> {
1
+ import { InferInput, InferOutput, Schema, ValidationContext, Validator, WrappedValidator } from '../core.js';
2
+ export type RefSchemaGetter<out TValidator extends Validator> = () => TValidator;
3
+ export declare class RefSchema<const TValidator extends Validator> extends Schema<InferInput<TValidator>, InferOutput<TValidator>, TValidator['__lex']> implements WrappedValidator<TValidator> {
4
4
  #private;
5
- constructor(getter: RefSchemaGetter<V>);
6
- get schema(): Validator<V>;
7
- validateInContext(input: unknown, ctx: ValidatorContext): ValidationResult<V>;
5
+ constructor(getter: RefSchemaGetter<TValidator>);
6
+ get validator(): TValidator;
7
+ unwrap(): TValidator;
8
+ validateInContext(input: unknown, ctx: ValidationContext): import("../core.js").ValidationResult<InferInput<TValidator>>;
8
9
  }
10
+ export declare function ref<const TValidator extends Validator>(get: RefSchemaGetter<TValidator>): RefSchema<TValidator>;
11
+ export declare function ref<TInput, TOutput extends TInput = TInput>(get: RefSchemaGetter<Validator<TInput, TOutput>>): RefSchema<Validator<TInput, TOutput>>;
9
12
  //# sourceMappingURL=ref.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"ref.d.ts","sourceRoot":"","sources":["../../src/schema/ref.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,gBAAgB,EAChB,SAAS,EACT,gBAAgB,EACjB,MAAM,YAAY,CAAA;AAEnB,MAAM,MAAM,eAAe,CAAC,CAAC,IAAI,MAAM,SAAS,CAAC,CAAC,CAAC,CAAA;AAEnD,qBAAa,SAAS,CAAC,CAAC,GAAG,GAAG,CAAE,SAAQ,MAAM,CAAC,CAAC,CAAC;;gBAGnC,MAAM,EAAE,eAAe,CAAC,CAAC,CAAC;IAStC,IAAI,MAAM,IAAI,SAAS,CAAC,CAAC,CAAC,CAgBzB;IAED,iBAAiB,CACf,KAAK,EAAE,OAAO,EACd,GAAG,EAAE,gBAAgB,GACpB,gBAAgB,CAAC,CAAC,CAAC;CAGvB"}
1
+ {"version":3,"file":"ref.d.ts","sourceRoot":"","sources":["../../src/schema/ref.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,UAAU,EACV,WAAW,EACX,MAAM,EACN,iBAAiB,EACjB,SAAS,EACT,gBAAgB,EACjB,MAAM,YAAY,CAAA;AAEnB,MAAM,MAAM,eAAe,CAAC,GAAG,CAAC,UAAU,SAAS,SAAS,IAAI,MAAM,UAAU,CAAA;AAEhF,qBAAa,SAAS,CAAC,KAAK,CAAC,UAAU,SAAS,SAAS,CACvD,SAAQ,MAAM,CACZ,UAAU,CAAC,UAAU,CAAC,EACtB,WAAW,CAAC,UAAU,CAAC,EACvB,UAAU,CAAC,OAAO,CAAC,CAErB,YAAW,gBAAgB,CAAC,UAAU,CAAC;;gBAI3B,MAAM,EAAE,eAAe,CAAC,UAAU,CAAC;IAS/C,IAAI,SAAS,IAAI,UAAU,CAE1B;IAED,MAAM,IAAI,UAAU;IAIpB,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,iBAAiB;CAGzD;AAGD,wBAAgB,GAAG,CAAC,KAAK,CAAC,UAAU,SAAS,SAAS,EACpD,GAAG,EAAE,eAAe,CAAC,UAAU,CAAC,GAC/B,SAAS,CAAC,UAAU,CAAC,CAAA;AACxB,wBAAgB,GAAG,CAAC,MAAM,EAAE,OAAO,SAAS,MAAM,GAAG,MAAM,EACzD,GAAG,EAAE,eAAe,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAC/C,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAA"}