@astrale-os/kernel-dsl 1.0.0-beta.2 → 1.0.0-beta.20

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 (307) hide show
  1. package/dist/v1/addressing/class-key.js +3 -3
  2. package/dist/v1/addressing/definition-ref.js +21 -37
  3. package/dist/v1/addressing/domain-dependency.d.ts +0 -6
  4. package/dist/v1/addressing/domain-dependency.js +1 -6
  5. package/dist/v1/addressing/key.d.ts +4 -1
  6. package/dist/v1/addressing/key.js +23 -3
  7. package/dist/v1/addressing/ordering.d.ts +2 -0
  8. package/dist/v1/addressing/ordering.js +4 -0
  9. package/dist/v1/addressing/patterns.d.ts +1 -1
  10. package/dist/v1/addressing/patterns.js +2 -6
  11. package/dist/v1/builder/callable/authoring.d.ts +11 -5
  12. package/dist/v1/builder/callable/authoring.js +2 -0
  13. package/dist/v1/builder/class/authoring.d.ts +94 -224
  14. package/dist/v1/builder/class/authoring.js +31 -33
  15. package/dist/v1/builder/class/handle.d.ts +27 -0
  16. package/dist/v1/builder/class/handle.js +1 -0
  17. package/dist/v1/builder/class/input.d.ts +159 -0
  18. package/dist/v1/builder/class/projection.d.ts +129 -0
  19. package/dist/v1/builder/class/projection.js +1 -0
  20. package/dist/v1/builder/class/property.d.ts +3 -9
  21. package/dist/v1/builder/class/property.js +1 -0
  22. package/dist/v1/builder/core/authoring.d.ts +1 -1
  23. package/dist/v1/builder/index.d.ts +5 -2
  24. package/dist/v1/builder/lowering/callable.js +1 -0
  25. package/dist/v1/builder/lowering/class.d.ts +9 -1
  26. package/dist/v1/builder/lowering/class.js +62 -17
  27. package/dist/v1/builder/lowering/policy.js +2 -0
  28. package/dist/v1/builder/lowering/property-keys.d.ts +27 -0
  29. package/dist/v1/builder/lowering/property-keys.js +108 -0
  30. package/dist/v1/builder/lowering/schema/compile.js +11 -6
  31. package/dist/v1/builder/lowering/schema/context.d.ts +9 -1
  32. package/dist/v1/builder/lowering/schema/context.js +36 -4
  33. package/dist/v1/builder/lowering/schema/lifetime.d.ts +11 -0
  34. package/dist/v1/builder/lowering/schema/lifetime.js +55 -0
  35. package/dist/v1/builder/lowering/value/path.d.ts +1 -1
  36. package/dist/v1/builder/lowering/value/path.js +2 -4
  37. package/dist/v1/builder/lowering/value/zod.js +1 -3
  38. package/dist/v1/builder/policy/authoring.d.ts +85 -5
  39. package/dist/v1/builder/policy/authoring.js +107 -68
  40. package/dist/v1/builder/schema/define.d.ts +0 -1
  41. package/dist/v1/builder/schema/diagnostic.d.ts +3 -2
  42. package/dist/v1/builder/schema/diagnostic.js +5 -10
  43. package/dist/v1/builder/schema/input.d.ts +1 -1
  44. package/dist/v1/builder/schema/projection/callable.d.ts +7 -5
  45. package/dist/v1/builder/schema/projection/class.d.ts +118 -15
  46. package/dist/v1/builder/schema/projection/core-input.d.ts +2 -1
  47. package/dist/v1/builder/schema/projection/identity.d.ts +2 -1
  48. package/dist/v1/builder/schema/projection/model.d.ts +4 -2
  49. package/dist/v1/builder/schema/projection/property.d.ts +1 -1
  50. package/dist/v1/builder/schema/projection/resolved-class.d.ts +2 -1
  51. package/dist/v1/builder/schema/projection.d.ts +1 -1
  52. package/dist/v1/builder/value/full-match.d.ts +0 -1
  53. package/dist/v1/builder/value/full-match.js +0 -1
  54. package/dist/v1/builder/value/path-metadata.d.ts +1 -1
  55. package/dist/v1/builder/value/path.d.ts +1 -1
  56. package/dist/v1/bundle/codec.js +11 -13
  57. package/dist/v1/bundle/diagnostic.d.ts +2 -0
  58. package/dist/v1/bundle/diagnostic.js +9 -7
  59. package/dist/v1/bundle/model.js +1 -1
  60. package/dist/v1/bundle/structure.js +4 -6
  61. package/dist/v1/compiled/admission/accept.js +4 -10
  62. package/dist/v1/compiled/admission/closure.js +2 -2
  63. package/dist/v1/compiled/admission/diagnostic.d.ts +1 -1
  64. package/dist/v1/compiled/admission/diagnostic.js +1 -3
  65. package/dist/v1/compiled/admission/revision.d.ts +9 -1
  66. package/dist/v1/compiled/admission/revision.js +6 -3
  67. package/dist/v1/compiled/admission/semantics/class.d.ts +4 -1
  68. package/dist/v1/compiled/admission/semantics/class.js +37 -12
  69. package/dist/v1/compiled/admission/semantics/core.d.ts +1 -24
  70. package/dist/v1/compiled/admission/semantics/core.js +56 -24
  71. package/dist/v1/compiled/admission/semantics/edge.d.ts +2 -4
  72. package/dist/v1/compiled/admission/semantics/edge.js +6 -65
  73. package/dist/v1/compiled/admission/semantics/policy/callable.js +0 -2
  74. package/dist/v1/compiled/admission/semantics/policy/contracts.d.ts +5 -20
  75. package/dist/v1/compiled/admission/semantics/policy/contracts.js +8 -21
  76. package/dist/v1/compiled/admission/semantics/policy/parity.js +40 -43
  77. package/dist/v1/compiled/admission/semantics/policy/pattern.d.ts +4 -1
  78. package/dist/v1/compiled/admission/semantics/policy/pattern.js +4 -16
  79. package/dist/v1/compiled/admission/semantics/policy/typing.d.ts +2 -24
  80. package/dist/v1/compiled/admission/semantics/policy/typing.js +19 -201
  81. package/dist/v1/compiled/admission/wire/callable.js +11 -1
  82. package/dist/v1/compiled/admission/wire/class.js +73 -21
  83. package/dist/v1/compiled/admission/wire/policy.d.ts +4 -3
  84. package/dist/v1/compiled/admission/wire/policy.js +8 -7
  85. package/dist/v1/compiled/compiler/compile.js +8 -8
  86. package/dist/v1/compiled/diagnostic.js +2 -3
  87. package/dist/v1/compiled/loader/load.d.ts +3 -2
  88. package/dist/v1/compiled/loader/load.js +11 -45
  89. package/dist/v1/domain/create.js +5 -6
  90. package/dist/v1/domain/model/domain.d.ts +2 -7
  91. package/dist/v1/domain/model/input.d.ts +2 -1
  92. package/dist/v1/domain/namespace/member-collection.js +4 -6
  93. package/dist/v1/domain/projection/classes.js +4 -1
  94. package/dist/v1/domain/validation/create.d.ts +6 -3
  95. package/dist/v1/domain/validation/create.js +21 -69
  96. package/dist/v1/index.d.ts +2 -1
  97. package/dist/v1/language/.spec/schemas/draft-2020-12.schema.json +462 -0
  98. package/dist/v1/language/.spec/schemas/value-schema.schema.json +22 -0
  99. package/dist/v1/language/callable/admission.d.ts +15 -0
  100. package/dist/v1/language/callable/admission.js +43 -0
  101. package/dist/v1/language/callable/model/callable.d.ts +10 -0
  102. package/dist/v1/language/callable/resolved.d.ts +16 -3
  103. package/dist/v1/language/class/inheritance.d.ts +36 -5
  104. package/dist/v1/language/class/inheritance.js +87 -1
  105. package/dist/v1/language/class/lifetime.d.ts +50 -11
  106. package/dist/v1/language/class/lifetime.js +89 -20
  107. package/dist/v1/language/class/model/class.d.ts +45 -9
  108. package/dist/v1/language/class/model/edge.d.ts +31 -2
  109. package/dist/v1/language/class/model/property.d.ts +16 -7
  110. package/dist/v1/language/class/property-values.js +2 -4
  111. package/dist/v1/language/class/unique.d.ts +143 -0
  112. package/dist/v1/language/class/unique.js +264 -0
  113. package/dist/v1/language/core/facts.d.ts +85 -0
  114. package/dist/v1/language/core/facts.js +116 -0
  115. package/dist/v1/language/definition/metadata.d.ts +5 -0
  116. package/dist/v1/language/definition/metadata.js +7 -0
  117. package/dist/v1/language/freeze.d.ts +5 -0
  118. package/dist/v1/{schema/canonical → language}/freeze.js +4 -0
  119. package/dist/v1/language/index.d.ts +7 -2
  120. package/dist/v1/language/index.js +5 -1
  121. package/dist/v1/language/limits.d.ts +64 -0
  122. package/dist/v1/language/limits.js +60 -0
  123. package/dist/v1/language/policy/analysis/branches.d.ts +8 -0
  124. package/dist/v1/language/policy/analysis/branches.js +2 -1
  125. package/dist/v1/language/policy/analysis/budgets.d.ts +45 -12
  126. package/dist/v1/language/policy/analysis/budgets.js +133 -19
  127. package/dist/v1/language/policy/analysis/checks.js +3 -2
  128. package/dist/v1/language/policy/analysis/typing.d.ts +51 -0
  129. package/dist/v1/language/policy/analysis/typing.js +455 -0
  130. package/dist/v1/language/policy/model/policy.d.ts +49 -9
  131. package/dist/v1/language/policy/model/policy.js +14 -0
  132. package/dist/v1/language/policy/normalization/normalize.d.ts +6 -6
  133. package/dist/v1/language/policy/normalization/normalize.js +22 -21
  134. package/dist/v1/language/validation/diagnostic.d.ts +15 -1
  135. package/dist/v1/language/validation/diagnostic.js +21 -0
  136. package/dist/v1/language/validation/rule.d.ts +45 -0
  137. package/dist/v1/language/validation/rule.js +109 -0
  138. package/dist/v1/language/value/compile/fields.js +4 -8
  139. package/dist/v1/language/value/evaluate/program.d.ts +2 -1
  140. package/dist/v1/language/value/evaluate/program.js +2 -2
  141. package/dist/v1/language/value/evaluate/validate.d.ts +2 -2
  142. package/dist/v1/language/value/evaluate/validate.js +6 -2
  143. package/dist/v1/language/value/evaluate/validity.optimization.d.ts +14 -0
  144. package/dist/v1/language/value/evaluate/validity.optimization.js +342 -0
  145. package/dist/v1/language/value/inclusion/arrays.d.ts +3 -0
  146. package/dist/v1/language/value/inclusion/arrays.js +85 -0
  147. package/dist/v1/language/value/inclusion/assertions.d.ts +18 -0
  148. package/dist/v1/language/value/inclusion/assertions.js +29 -0
  149. package/dist/v1/language/value/inclusion/combinators.d.ts +3 -0
  150. package/dist/v1/language/value/inclusion/combinators.js +67 -0
  151. package/dist/v1/language/value/inclusion/equivalence.d.ts +4 -0
  152. package/dist/v1/language/value/inclusion/equivalence.js +74 -0
  153. package/dist/v1/language/value/inclusion/evidence.d.ts +34 -0
  154. package/dist/v1/language/value/inclusion/evidence.js +138 -0
  155. package/dist/v1/language/value/inclusion/includes.d.ts +17 -0
  156. package/dist/v1/language/value/inclusion/includes.js +25 -719
  157. package/dist/v1/language/value/inclusion/keywords.d.ts +5 -0
  158. package/dist/v1/language/value/inclusion/keywords.js +31 -0
  159. package/dist/v1/language/value/inclusion/kinds.d.ts +17 -0
  160. package/dist/v1/language/value/inclusion/kinds.js +57 -0
  161. package/dist/v1/language/value/inclusion/location.d.ts +24 -0
  162. package/dist/v1/language/value/inclusion/location.js +63 -0
  163. package/dist/v1/language/value/inclusion/numbers.d.ts +3 -0
  164. package/dist/v1/language/value/inclusion/numbers.js +41 -0
  165. package/dist/v1/language/value/inclusion/objects.d.ts +3 -0
  166. package/dist/v1/language/value/inclusion/objects.js +190 -0
  167. package/dist/v1/language/value/inclusion/strings.d.ts +3 -0
  168. package/dist/v1/language/value/inclusion/strings.js +29 -0
  169. package/dist/v1/language/value/inclusion/types.d.ts +3 -0
  170. package/dist/v1/language/value/inclusion/types.js +11 -0
  171. package/dist/v1/language/value/ordering.d.ts +14 -0
  172. package/dist/v1/language/value/ordering.js +86 -9
  173. package/dist/v1/language/value/profile/canonicalize.js +6 -5
  174. package/dist/v1/language/value/profile/json.validate.d.ts +3 -1
  175. package/dist/v1/language/value/profile/json.validate.js +3 -2
  176. package/dist/v1/language/value/profile/meta-schema.compiled.js +4 -1
  177. package/dist/v1/language/value/profile/rules.js +17 -43
  178. package/dist/v1/language/value/profile/validate.js +1 -10
  179. package/dist/v1/language/value/profile/vocabulary.d.ts +35 -2
  180. package/dist/v1/language/value/profile/vocabulary.js +52 -5
  181. package/dist/v1/language/value/reference/closure.js +3 -4
  182. package/dist/v1/language/value/reference/recursion.js +2 -22
  183. package/dist/v1/language/value/reference/registry.index.d.ts +2 -0
  184. package/dist/v1/language/value/reference/registry.index.js +33 -16
  185. package/dist/v1/language/value/regexp/ast.js +6 -7
  186. package/dist/v1/language/value/regexp/compile.d.ts +5 -11
  187. package/dist/v1/language/value/regexp/compile.js +14 -12
  188. package/dist/v1/language/value/regexp/syntax.js +3 -2
  189. package/dist/v1/language/value/syntax/keywords.d.ts +3 -3
  190. package/dist/v1/language/value/syntax/keywords.js +4 -20
  191. package/dist/v1/language/value/syntax/node-path/validate.js +2 -3
  192. package/dist/v1/language/value/syntax/pointer.d.ts +2 -0
  193. package/dist/v1/language/value/syntax/pointer.js +5 -2
  194. package/dist/v1/language/value/syntax/walk.d.ts +2 -0
  195. package/dist/v1/language/value/syntax/walk.js +19 -20
  196. package/dist/v1/schema/.spec/schemas/domain-schema.schema.json +2519 -0
  197. package/dist/v1/schema/admission/accept.js +3 -14
  198. package/dist/v1/schema/admission/callable.d.ts +21 -0
  199. package/dist/v1/schema/admission/callable.js +96 -0
  200. package/dist/v1/schema/analysis/class.js +33 -15
  201. package/dist/v1/schema/canonical/revision.js +4 -4
  202. package/dist/v1/schema/compatibility/api.d.ts +2 -1
  203. package/dist/v1/schema/compatibility/api.js +1 -0
  204. package/dist/v1/schema/compatibility/comparators/callables.js +1 -1
  205. package/dist/v1/schema/compatibility/comparators/classes.d.ts +9 -4
  206. package/dist/v1/schema/compatibility/comparators/classes.js +29 -8
  207. package/dist/v1/schema/compatibility/comparators/index.d.ts +1 -1
  208. package/dist/v1/schema/compatibility/comparators/members.js +1 -1
  209. package/dist/v1/schema/compatibility/comparators/values.js +2 -2
  210. package/dist/v1/schema/compatibility/coordinate.js +3 -3
  211. package/dist/v1/schema/compatibility/diff.js +2 -4
  212. package/dist/v1/schema/compatibility/extension.d.ts +11 -0
  213. package/dist/v1/schema/compatibility/extension.js +22 -0
  214. package/dist/v1/schema/compatibility/fields.d.ts +20 -4
  215. package/dist/v1/schema/compatibility/fields.js +13 -3
  216. package/dist/v1/schema/compatibility/meaning/footprint.js +16 -50
  217. package/dist/v1/schema/compatibility/model.d.ts +17 -5
  218. package/dist/v1/schema/compatibility/report.js +1 -1
  219. package/dist/v1/schema/compatibility/scope.d.ts +2 -0
  220. package/dist/v1/schema/compatibility/scope.js +4 -1
  221. package/dist/v1/schema/compatibility/structure/index.js +6 -4
  222. package/dist/v1/schema/compatibility/structure/requirements.js +57 -58
  223. package/dist/v1/schema/compatibility/versioning/index.js +1 -1
  224. package/dist/v1/schema/compatibility/versioning/surface.d.ts +1 -1
  225. package/dist/v1/schema/compatibility/versioning/surface.js +30 -2
  226. package/dist/v1/schema/compatibility/walk.d.ts +17 -0
  227. package/dist/v1/schema/compatibility/walk.js +41 -0
  228. package/dist/v1/schema/diagnostic.d.ts +17 -3
  229. package/dist/v1/schema/diagnostic.js +14 -11
  230. package/dist/v1/schema/index.d.ts +10 -1
  231. package/dist/v1/schema/index.js +4 -0
  232. package/dist/v1/schema/model/schema.d.ts +20 -1
  233. package/dist/v1/schema/model/schema.js +1 -1
  234. package/dist/v1/schema/normalization/domain.d.ts +2 -0
  235. package/dist/v1/schema/normalization/domain.js +29 -9
  236. package/dist/v1/schema/resolution/closure.js +2 -1
  237. package/dist/v1/schema/resolution/context.js +13 -13
  238. package/dist/v1/schema/resolution/domain.d.ts +5 -0
  239. package/dist/v1/schema/resolution/domain.js +2 -2
  240. package/dist/v1/schema/resolution/origins.js +3 -2
  241. package/dist/v1/schema/rule.d.ts +26 -0
  242. package/dist/v1/schema/rule.js +440 -0
  243. package/dist/v1/schema/validation/callable.d.ts +35 -2
  244. package/dist/v1/schema/validation/callable.js +65 -9
  245. package/dist/v1/schema/validation/class.d.ts +6 -2
  246. package/dist/v1/schema/validation/class.js +127 -104
  247. package/dist/v1/schema/validation/core.js +90 -168
  248. package/dist/v1/schema/validation/domain.js +4 -13
  249. package/dist/v1/schema/validation/domain.json-schema.d.ts +15 -0
  250. package/dist/v1/schema/validation/domain.json-schema.js +197 -0
  251. package/dist/v1/schema/validation/domain.route.d.ts +6 -1
  252. package/dist/v1/schema/validation/domain.route.js +18 -0
  253. package/dist/v1/schema/validation/domain.structure.d.ts +7780 -0
  254. package/dist/v1/schema/validation/domain.structure.js +398 -147
  255. package/dist/v1/schema/validation/json.json-schema.d.ts +40 -0
  256. package/dist/v1/schema/validation/json.json-schema.js +46 -0
  257. package/dist/v1/schema/validation/policy/budgets.d.ts +33 -2
  258. package/dist/v1/schema/validation/policy/budgets.js +87 -121
  259. package/dist/v1/schema/validation/policy/context.d.ts +6 -5
  260. package/dist/v1/schema/validation/policy/context.js +7 -10
  261. package/dist/v1/schema/validation/policy/objects.d.ts +1 -1
  262. package/dist/v1/schema/validation/policy/objects.js +6 -14
  263. package/dist/v1/schema/validation/policy/references.js +11 -27
  264. package/dist/v1/schema/validation/policy/typing.d.ts +3 -18
  265. package/dist/v1/schema/validation/policy/typing.js +22 -356
  266. package/dist/v1/schema/validation/policy/uses.d.ts +40 -3
  267. package/dist/v1/schema/validation/policy/uses.js +66 -89
  268. package/dist/v1/schema/validation/policy/validate.js +5 -5
  269. package/dist/v1/schema/validation/value-api.d.ts +22 -0
  270. package/dist/v1/schema/validation/value-api.js +34 -1
  271. package/dist/v1/schema/validation/value.d.ts +3 -0
  272. package/dist/v1/schema/validation/value.js +9 -17
  273. package/dist/v1/schema/validation/value.json-schema.d.ts +49 -0
  274. package/dist/v1/schema/validation/value.json-schema.js +137 -0
  275. package/dist/v1/schema/validation/view.js +4 -8
  276. package/dist/value/canonical.d.ts +6 -0
  277. package/dist/value/canonical.js +36 -0
  278. package/dist/value/decode.d.ts +7 -0
  279. package/dist/value/decode.js +159 -9
  280. package/dist/value/index.d.ts +1 -1
  281. package/dist/value/json.d.ts +2 -2
  282. package/dist/value/json.js +2 -2
  283. package/dist/value/types.d.ts +6 -0
  284. package/dist/value/unicode.d.ts +2 -1
  285. package/dist/value/unicode.js +2 -0
  286. package/package.json +8 -1
  287. package/dist/v1/builder/lowering/core-properties.d.ts +0 -10
  288. package/dist/v1/builder/lowering/core-properties.js +0 -76
  289. package/dist/v1/compiled/admission/semantics/cardinality.d.ts +0 -5
  290. package/dist/v1/compiled/admission/semantics/cardinality.js +0 -113
  291. package/dist/v1/compiled/admission/semantics/policy/equality.d.ts +0 -8
  292. package/dist/v1/compiled/admission/semantics/policy/equality.js +0 -27
  293. package/dist/v1/compiled/admission/semantics/policy/measure.d.ts +0 -9
  294. package/dist/v1/compiled/admission/semantics/policy/measure.js +0 -81
  295. package/dist/v1/compiled/admission/semantics/policy/variants.d.ts +0 -10
  296. package/dist/v1/compiled/admission/semantics/policy/variants.js +0 -65
  297. package/dist/v1/language/class/index.d.ts +0 -8
  298. package/dist/v1/language/class/index.js +0 -1
  299. package/dist/v1/language/core/index.d.ts +0 -2
  300. package/dist/v1/language/value/index.d.ts +0 -11
  301. package/dist/v1/language/value/index.js +0 -8
  302. package/dist/v1/schema/canonical/domain.d.ts +0 -3
  303. package/dist/v1/schema/canonical/domain.digest.d.ts +0 -3
  304. package/dist/v1/schema/canonical/domain.digest.js +0 -5
  305. package/dist/v1/schema/canonical/domain.js +0 -5
  306. package/dist/v1/schema/canonical/freeze.d.ts +0 -1
  307. /package/dist/v1/{language/core/index.js → builder/class/input.js} +0 -0
@@ -10,11 +10,11 @@ export function ClassKey(input) {
10
10
  /** Construction, admission, and structural-coordinate operations for exact Class keys. */
11
11
  (function (ClassKey) {
12
12
  function of(ref) {
13
- const admitted = acceptDefinitionRef(ref);
14
- if (admitted.kind !== 'class') {
13
+ const key = Key.of(ref);
14
+ if (!key.slice(key.indexOf(':') + 1).startsWith('class.')) {
15
15
  throw new TypeError(`Invalid ClassKey coordinate: ${JSON.stringify(ref)}.`);
16
16
  }
17
- return Key.of(admitted);
17
+ return key;
18
18
  }
19
19
  ClassKey.of = of;
20
20
  function is(input) {
@@ -8,55 +8,39 @@ const DEFINITION_KINDS = new Set([
8
8
  ]);
9
9
  /** Admit and detach one canonical DefinitionRef from an untrusted value. */
10
10
  export function acceptDefinitionRef(input) {
11
- if (input === null || typeof input !== 'object' || Array.isArray(input)) {
12
- invalid(input);
13
- }
11
+ return readDefinitionRef(input) ?? invalid(input);
12
+ }
13
+ /** Identify a canonical DefinitionRef-shaped value without retaining caller state. */
14
+ export function isDefinitionRef(input) {
15
+ return readDefinitionRef(input) !== undefined;
16
+ }
17
+ /** Compare exact Definition coordinates, independent of object identity. */
18
+ export function equalDefinitionRefs(left, right) {
19
+ return left.origin === right.origin && left.kind === right.kind && left.name === right.name;
20
+ }
21
+ function invalid(input) {
22
+ throw new TypeError(`Invalid DefinitionRef: ${JSON.stringify(input)}.`);
23
+ }
24
+ /** A detached copy of the canonical DefinitionRef `input` holds, reading each field once. */
25
+ function readDefinitionRef(input) {
26
+ if (input === null || typeof input !== 'object' || Array.isArray(input))
27
+ return undefined;
14
28
  const value = input;
15
29
  const keys = Reflect.ownKeys(value);
16
30
  if (keys.length !== 3 ||
17
31
  !keys.every((key) => key === 'origin' || key === 'kind' || key === 'name')) {
18
- invalid(input);
32
+ return undefined;
19
33
  }
20
- const origin = value.origin;
21
- const kind = value.kind;
22
- const name = value.name;
34
+ const { origin, kind, name } = value;
23
35
  if (typeof origin !== 'string' ||
24
36
  !DOMAIN_ORIGIN_PATTERN.test(origin) ||
25
37
  typeof kind !== 'string' ||
26
38
  !DEFINITION_KINDS.has(kind) ||
27
39
  typeof name !== 'string' ||
28
40
  !definitionNameMatches(kind, name)) {
29
- invalid(input);
41
+ return undefined;
30
42
  }
31
- return Object.freeze({
32
- origin,
33
- kind: kind,
34
- name,
35
- });
36
- }
37
- /** Identify a canonical DefinitionRef-shaped value without retaining caller state. */
38
- export function isDefinitionRef(input) {
39
- if (input === null || typeof input !== 'object' || Array.isArray(input))
40
- return false;
41
- const value = input;
42
- const keys = Reflect.ownKeys(value);
43
- if (keys.length !== 3 ||
44
- !keys.every((key) => key === 'origin' || key === 'kind' || key === 'name')) {
45
- return false;
46
- }
47
- return (typeof value.origin === 'string' &&
48
- DOMAIN_ORIGIN_PATTERN.test(value.origin) &&
49
- typeof value.kind === 'string' &&
50
- DEFINITION_KINDS.has(value.kind) &&
51
- typeof value.name === 'string' &&
52
- definitionNameMatches(value.kind, value.name));
53
- }
54
- /** Compare exact Definition coordinates, independent of object identity. */
55
- export function equalDefinitionRefs(left, right) {
56
- return left.origin === right.origin && left.kind === right.kind && left.name === right.name;
57
- }
58
- function invalid(input) {
59
- throw new TypeError(`Invalid DefinitionRef: ${JSON.stringify(input)}.`);
43
+ return Object.freeze({ origin, kind: kind, name });
60
44
  }
61
45
  function definitionNameMatches(kind, name) {
62
46
  return kind === 'core' ? CORE_SLUG_PATTERN.test(name) : MEMBER_NAME_PATTERN.test(name);
@@ -10,9 +10,3 @@ export type DomainDependency = JsonObject & {
10
10
  export type DependencyAlias = string;
11
11
  /** Exact direct dependency pins keyed by their authored aliases. */
12
12
  export type DomainDependencyMap = Readonly<Record<DependencyAlias, DomainDependency>>;
13
- /** Representation-neutral admission budgets shared by source and compiled closures. */
14
- export declare const dependencyLimits: Readonly<{
15
- direct: 32;
16
- closure: 256;
17
- depth: 32;
18
- }>;
@@ -1,6 +1 @@
1
- /** Representation-neutral admission budgets shared by source and compiled closures. */
2
- export const dependencyLimits = Object.freeze({
3
- direct: 32,
4
- closure: 256,
5
- depth: 32,
6
- });
1
+ export {};
@@ -12,7 +12,10 @@ export declare namespace Key {
12
12
  type Definition<Kind extends DefinitionKind = DefinitionKind, Name extends string = string, Origin extends Key.Origin = Key.Origin> = DefinitionKey<Origin, Kind, Name>;
13
13
  type Callable = DefinitionKey<Key.Origin, 'function'> | MethodKey;
14
14
  type View = DefinitionKey<Key.Origin, 'view'>;
15
- /** Derive a canonical Definition key from its structured coordinate. */
15
+ /**
16
+ * Derive a canonical Definition key from its structured coordinate. A frozen coordinate of data
17
+ * fields cannot change, so its key is derived once and read back for every later call.
18
+ */
16
19
  function of<const Ref extends DefinitionRef>(ref: Ref): DefinitionKey<Ref['origin'], Ref['kind'], Ref['name']>;
17
20
  function origin(input: Key): Key.Origin;
18
21
  function is(input: unknown): input is Key;
@@ -1,8 +1,11 @@
1
1
  import { acceptDefinitionRef, } from './definition-ref.js';
2
2
  import { DOMAIN_ORIGIN_PATTERN } from './patterns.js';
3
3
  const DEFINITION_KEY = /^(?:class|function|policy|view)\.([A-Za-z][A-Za-z0-9_]*)$/u;
4
- const CORE_KEY = /^core\.([a-z][a-z0-9-]{0,99})$/u;
4
+ // The slug is the whole rest of the coordinate, its own `.` included: no member follows a Core key.
5
+ const CORE_KEY = /^core\.((?=.{1,100}$)[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)*)$/u;
5
6
  const MEMBER_KEY = /^class\.([A-Za-z][A-Za-z0-9_]*)\.(property|method)\.([A-Za-z][A-Za-z0-9_]*)$/u;
7
+ /** The keys of frozen Definition coordinates, derived once each. */
8
+ const derived = new WeakMap();
6
9
  export function Key(input) {
7
10
  if (typeof input !== 'string' || !isCanonicalKey(input)) {
8
11
  throw new TypeError(`Invalid Key: ${JSON.stringify(input)}.`);
@@ -11,10 +14,22 @@ export function Key(input) {
11
14
  }
12
15
  /** Canonical origin-qualified address operations. */
13
16
  (function (Key) {
14
- /** Derive a canonical Definition key from its structured coordinate. */
17
+ /**
18
+ * Derive a canonical Definition key from its structured coordinate. A frozen coordinate of data
19
+ * fields cannot change, so its key is derived once and read back for every later call.
20
+ */
15
21
  function of(ref) {
22
+ const object = typeof ref === 'object' && ref !== null;
23
+ const known = object ? derived.get(ref) : undefined;
24
+ if (known !== undefined)
25
+ return known;
26
+ // Decided before admission reads the fields: only then are the fields read the final ones.
27
+ const stable = object && immutable(ref);
16
28
  const definition = acceptDefinitionRef(ref);
17
- return Key(`${definition.origin}:${definition.kind}.${definition.name}`);
29
+ const key = Key(`${definition.origin}:${definition.kind}.${definition.name}`);
30
+ if (stable)
31
+ derived.set(ref, key);
32
+ return key;
18
33
  }
19
34
  Key.of = of;
20
35
  function origin(input) {
@@ -37,3 +52,8 @@ function isCanonicalKey(input) {
37
52
  function isCanonicalCoordinate(input) {
38
53
  return DEFINITION_KEY.test(input) || CORE_KEY.test(input) || MEMBER_KEY.test(input);
39
54
  }
55
+ /** A frozen object of data fields answers every read alike; a getter may not. */
56
+ function immutable(ref) {
57
+ return (Object.isFrozen(ref) &&
58
+ Reflect.ownKeys(ref).every((key) => 'value' in Reflect.getOwnPropertyDescriptor(ref, key)));
59
+ }
@@ -4,3 +4,5 @@ export declare function definitionRefIndex(ref: DefinitionRef): string;
4
4
  export declare function compareDefinitionRefs(left: DefinitionRef, right: DefinitionRef): number;
5
5
  /** Locale-independent Unicode code-point ordering for canonical DSL values. */
6
6
  export declare function compareUnicode(left: string, right: string): number;
7
+ /** Order strings by UTF-16 code unit, the order `<` gives strings. */
8
+ export declare function compareCodeUnits(left: string, right: string): number;
@@ -18,3 +18,7 @@ export function compareUnicode(left, right) {
18
18
  }
19
19
  return a.length - b.length;
20
20
  }
21
+ /** Order strings by UTF-16 code unit, the order `<` gives strings. */
22
+ export function compareCodeUnits(left, right) {
23
+ return left < right ? -1 : left > right ? 1 : 0;
24
+ }
@@ -3,6 +3,7 @@ export type DomainOrigin = string;
3
3
  export declare const DOMAIN_ORIGIN_PATTERN: RegExp;
4
4
  export declare const MEMBER_NAME_PATTERN: RegExp;
5
5
  export declare const DEPENDENCY_ALIAS_PATTERN: RegExp;
6
+ /** Labels of `[a-z][a-z0-9-]*` joined by `.`, 100 code points at most: `graph.reader`. */
6
7
  export declare const CORE_SLUG_PATTERN: RegExp;
7
8
  export declare const DOMAIN_REVISION_PATTERN: RegExp;
8
9
  export declare const PROPERTY_KEY_PATTERN: RegExp;
@@ -19,4 +20,3 @@ export declare const patterns: Readonly<{
19
20
  revision: RegExp;
20
21
  revisionFullMatch: "sha256:[0-9a-f]{64}";
21
22
  }>;
22
- export declare function assertMemberName(name: string): void;
@@ -1,7 +1,8 @@
1
1
  export const DOMAIN_ORIGIN_PATTERN = /^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/u;
2
2
  export const MEMBER_NAME_PATTERN = /^[A-Za-z][A-Za-z0-9_]*$/u;
3
3
  export const DEPENDENCY_ALIAS_PATTERN = /^[a-z][A-Za-z0-9]*$/u;
4
- export const CORE_SLUG_PATTERN = /^[a-z][a-z0-9-]{0,99}$/u;
4
+ /** Labels of `[a-z][a-z0-9-]*` joined by `.`, 100 code points at most: `graph.reader`. */
5
+ export const CORE_SLUG_PATTERN = /^(?=.{1,100}$)[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)*$/u;
5
6
  export const DOMAIN_REVISION_PATTERN = /^sha256:[0-9a-f]{64}$/u;
6
7
  const DOMAIN_REVISION_FULL_MATCH = 'sha256:[0-9a-f]{64}';
7
8
  const DOMAIN_ORIGIN_FULL_MATCH = '([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?';
@@ -22,8 +23,3 @@ export const patterns = Object.freeze({
22
23
  revision: DOMAIN_REVISION_PATTERN,
23
24
  revisionFullMatch: DOMAIN_REVISION_FULL_MATCH,
24
25
  });
25
- export function assertMemberName(name) {
26
- if (!MEMBER_NAME_PATTERN.test(name)) {
27
- throw new TypeError(`Invalid member name: ${JSON.stringify(name)}.`);
28
- }
29
- }
@@ -1,9 +1,9 @@
1
1
  import type { Value as PortableValue } from '@astrale-os/kernel-dsl/value';
2
2
  import type { z } from 'zod';
3
3
  import type { PolicyRef } from '../../addressing/index.js';
4
- import type { BinaryInputProjection, CallableExecution, FunctionAuth } from '../../language/callable/model/callable.js';
4
+ import type { BinaryInputProjection, CallableAdmission, CallableExecution, FunctionAuth } from '../../language/callable/model/callable.js';
5
5
  import type { PolicyCheckExpression, PolicyCheckObject, PolicyObjectRef } from '../../language/policy/model/policy.js';
6
- import type { Class } from '../class/authoring.js';
6
+ import type { Class } from '../class/handle.js';
7
7
  import type { ValueSchemaInput } from '../class/property.js';
8
8
  import type { CoreNode } from '../core/authoring.js';
9
9
  import type { Policy, PolicyInput } from '../policy/authoring.js';
@@ -62,6 +62,8 @@ export interface CallableInputBase<Input extends FunctionInputSchema = ValueSche
62
62
  readonly output: CallableOutputInput;
63
63
  /** `{ durable: true }` makes an invocation return an Execution reference. */
64
64
  readonly execution?: CallableExecution;
65
+ /** `{ maxAge }`: how old, in seconds, the admission a call is served under may be. */
66
+ readonly admission?: CallableAdmission;
65
67
  }
66
68
  type ConcreteCallableInput<Input extends FunctionInputSchema = ValueSchemaInput> = CallableInputBase<Input> & ({
67
69
  readonly auth: 'anonymous';
@@ -83,7 +85,7 @@ export type MethodInput = ConcreteCallableInput & {
83
85
  readonly abstract?: boolean;
84
86
  };
85
87
  export type CallableInput = FunctionInput | MethodInput;
86
- export interface CallableProjection<out Input = unknown, out Output = unknown, out Auth extends FunctionAuth = FunctionAuth, out Static extends boolean = boolean, out Abstract extends boolean = boolean, out Execution extends CallableExecution | undefined = CallableExecution | undefined> {
88
+ export interface CallableProjection<out Input = unknown, out Output = unknown, out Auth extends FunctionAuth = FunctionAuth, out Static extends boolean = boolean, out Abstract extends boolean = boolean, out Execution extends CallableExecution | undefined = CallableExecution | undefined, out Admission extends CallableAdmission | undefined = CallableAdmission | undefined> {
87
89
  readonly [CALLABLE_PROJECTION_VALUE]: true;
88
90
  readonly input: Input;
89
91
  readonly output: Output;
@@ -91,6 +93,7 @@ export interface CallableProjection<out Input = unknown, out Output = unknown, o
91
93
  readonly static: Static;
92
94
  readonly abstract: Abstract;
93
95
  readonly execution: Execution;
96
+ readonly admission: Admission;
94
97
  }
95
98
  type ValueInputOf<Schema> = Schema extends TypedValueSchema<infer Value> ? Value : Schema extends z.ZodType ? z.input<Schema> : PortableValue;
96
99
  type FunctionInputOf<Schema> = Schema extends BinaryInputAuthoring<infer Metadata> ? BinaryInputProjection<ValueInputOf<Metadata>> : ValueInputOf<Schema>;
@@ -98,6 +101,9 @@ type ValueOutputOf<Schema> = Schema extends TypedValueSchema<infer Value> ? Valu
98
101
  type ExecutionOfConfig<Config extends CallableInput> = Config extends {
99
102
  readonly execution: infer Execution extends CallableExecution;
100
103
  } ? Execution : undefined;
104
+ type AdmissionOfConfig<Config extends CallableInput> = Config extends {
105
+ readonly admission: infer Admission extends CallableAdmission;
106
+ } ? Admission : undefined;
101
107
  type CallableOutputOf<Input extends CallableOutputInput> = Input extends StreamOutput<infer Item> ? {
102
108
  readonly mode: 'stream';
103
109
  readonly item: ValueOutputOf<Item>;
@@ -120,12 +126,12 @@ export type ProjectionOfCallable<Value extends Function | Method> = Value extend
120
126
  export declare function callableConfiguration(value: Function | Method): CallableInput;
121
127
  type PolicyObjectAuthoring = Class | Function | Method | Policy | View | CoreNode;
122
128
  export type PolicyObjectInput = Lazy<PolicyObjectAuthoring | PolicyObjectRef>;
123
- export declare function func<const Config extends FunctionInput, Input = FunctionInputOf<Config['input']>, Output = CallableOutputOf<Config['output']>, Auth extends FunctionAuth = Config['auth'], Execution extends CallableExecution | undefined = ExecutionOfConfig<Config>>(config: Config): Function<CallableProjection<Input, Output, Auth, false, false, Execution>>;
129
+ export declare function func<const Config extends FunctionInput, Input = FunctionInputOf<Config['input']>, Output = CallableOutputOf<Config['output']>, Auth extends FunctionAuth = Config['auth'], Execution extends CallableExecution | undefined = ExecutionOfConfig<Config>, Admission extends CallableAdmission | undefined = AdmissionOfConfig<Config>>(config: Config): Function<CallableProjection<Input, Output, Auth, false, false, Execution, Admission>>;
124
130
  export declare function method<const Config extends MethodInput, Input = ValueInputOf<Config['input']>, Output = CallableOutputOf<Config['output']>, Auth extends FunctionAuth = Config['auth'], Static extends boolean = Config extends {
125
131
  readonly static: true;
126
132
  } ? true : false, Abstract extends boolean = Config extends {
127
133
  readonly abstract: infer Value extends boolean;
128
- } ? Value : false, Execution extends CallableExecution | undefined = ExecutionOfConfig<Config>>(config: Config): Method<CallableProjection<Input, Output, Auth, Static, Abstract, Execution>>;
134
+ } ? Value : false, Execution extends CallableExecution | undefined = ExecutionOfConfig<Config>, Admission extends CallableAdmission | undefined = AdmissionOfConfig<Config>>(config: Config): Method<CallableProjection<Input, Output, Auth, Static, Abstract, Execution, Admission>>;
129
135
  export declare function callableInputField(name: string): Extract<PolicyCheckObject, {
130
136
  readonly kind: 'input';
131
137
  }>;
@@ -18,6 +18,7 @@ export function func(config) {
18
18
  'static',
19
19
  'abstract',
20
20
  'execution',
21
+ 'admission',
21
22
  ]);
22
23
  const value = authoringValue('function', {});
23
24
  callableInputs.set(value, { ...config });
@@ -33,6 +34,7 @@ export function method(config) {
33
34
  'static',
34
35
  'abstract',
35
36
  'execution',
37
+ 'admission',
36
38
  ]);
37
39
  const value = authoringValue('method', {});
38
40
  callableInputs.set(value, { ...config });