@hyperscale0/udl 1.0.0-alpha.1

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 (97) hide show
  1. package/AUTHORS +8 -0
  2. package/CHANGELOG.md +36 -0
  3. package/LICENSE +661 -0
  4. package/LICENSING.md +51 -0
  5. package/README.md +163 -0
  6. package/SECURITY.md +42 -0
  7. package/TRADEMARKS.md +35 -0
  8. package/conformance/README.md +79 -0
  9. package/conformance/invalid/blank-title.expected.json +10 -0
  10. package/conformance/invalid/blank-title.udl +50 -0
  11. package/conformance/invalid/depth-budget.expected.json +10 -0
  12. package/conformance/invalid/depth-budget.udl +49 -0
  13. package/conformance/invalid/format-version.expected.json +10 -0
  14. package/conformance/invalid/format-version.udl +50 -0
  15. package/conformance/invalid/invalid-utf8.expected.json +10 -0
  16. package/conformance/invalid/invalid-utf8.udl +1 -0
  17. package/conformance/invalid/malformed-json.expected.json +10 -0
  18. package/conformance/invalid/malformed-json.udl +1 -0
  19. package/conformance/invalid/missing-create-verb.expected.json +10 -0
  20. package/conformance/invalid/missing-create-verb.udl +45 -0
  21. package/conformance/invalid/not-an-object.expected.json +10 -0
  22. package/conformance/invalid/not-an-object.udl +1 -0
  23. package/conformance/invalid/noun-id-not-snake-case.expected.json +10 -0
  24. package/conformance/invalid/noun-id-not-snake-case.udl +50 -0
  25. package/conformance/invalid/unknown-key.expected.json +10 -0
  26. package/conformance/invalid/unknown-key.udl +51 -0
  27. package/conformance/invalid/unreachable-state.expected.json +10 -0
  28. package/conformance/invalid/unreachable-state.udl +51 -0
  29. package/conformance/invalid/verb-without-transition.expected.json +10 -0
  30. package/conformance/invalid/verb-without-transition.udl +55 -0
  31. package/conformance/valid/cards.expected.json +5 -0
  32. package/conformance/valid/cards.udl +1092 -0
  33. package/conformance/valid/commerce-escrow.expected.json +5 -0
  34. package/conformance/valid/commerce-escrow.udl +1011 -0
  35. package/conformance/valid/hand-edited.expected.json +5 -0
  36. package/conformance/valid/hand-edited.udl +1 -0
  37. package/conformance/valid/insured-car-marketplace.expected.json +5 -0
  38. package/conformance/valid/insured-car-marketplace.udl +831 -0
  39. package/conformance/valid/insured-travel.expected.json +5 -0
  40. package/conformance/valid/insured-travel.udl +2621 -0
  41. package/conformance/valid/minimal.expected.json +5 -0
  42. package/conformance/valid/minimal.udl +50 -0
  43. package/conformance/valid/protection.expected.json +5 -0
  44. package/conformance/valid/protection.udl +1136 -0
  45. package/dist/canonical.d.ts +2 -0
  46. package/dist/canonical.d.ts.map +1 -0
  47. package/dist/canonical.js +35 -0
  48. package/dist/canonical.js.map +1 -0
  49. package/dist/cli.d.ts +3 -0
  50. package/dist/cli.d.ts.map +1 -0
  51. package/dist/cli.js +138 -0
  52. package/dist/cli.js.map +1 -0
  53. package/dist/duration.d.ts +3 -0
  54. package/dist/duration.d.ts.map +1 -0
  55. package/dist/duration.js +23 -0
  56. package/dist/duration.js.map +1 -0
  57. package/dist/evolution.d.ts +63 -0
  58. package/dist/evolution.d.ts.map +1 -0
  59. package/dist/evolution.js +345 -0
  60. package/dist/evolution.js.map +1 -0
  61. package/dist/finance.d.ts +53 -0
  62. package/dist/finance.d.ts.map +1 -0
  63. package/dist/finance.js +511 -0
  64. package/dist/finance.js.map +1 -0
  65. package/dist/index.d.ts +11 -0
  66. package/dist/index.d.ts.map +1 -0
  67. package/dist/index.js +8 -0
  68. package/dist/index.js.map +1 -0
  69. package/dist/limits.d.ts +33 -0
  70. package/dist/limits.d.ts.map +1 -0
  71. package/dist/limits.js +33 -0
  72. package/dist/limits.js.map +1 -0
  73. package/dist/parser.d.ts +4 -0
  74. package/dist/parser.d.ts.map +1 -0
  75. package/dist/parser.js +54 -0
  76. package/dist/parser.js.map +1 -0
  77. package/dist/schema.d.ts +757 -0
  78. package/dist/schema.d.ts.map +1 -0
  79. package/dist/schema.js +281 -0
  80. package/dist/schema.js.map +1 -0
  81. package/dist/validation.d.ts +64 -0
  82. package/dist/validation.d.ts.map +1 -0
  83. package/dist/validation.js +1323 -0
  84. package/dist/validation.js.map +1 -0
  85. package/package.json +84 -0
  86. package/spec/README.md +137 -0
  87. package/spec/udl.schema.json +1019 -0
  88. package/src/canonical.ts +41 -0
  89. package/src/cli.ts +148 -0
  90. package/src/duration.ts +26 -0
  91. package/src/evolution.ts +587 -0
  92. package/src/finance.ts +775 -0
  93. package/src/index.ts +59 -0
  94. package/src/limits.ts +32 -0
  95. package/src/parser.ts +61 -0
  96. package/src/schema.ts +339 -0
  97. package/src/validation.ts +2053 -0
@@ -0,0 +1,11 @@
1
+ export { canonicalizeUdl, parseUdl } from "./parser.js";
2
+ export { serializeUdl } from "./canonical.js";
3
+ export { fixedIsoDurationMs } from "./duration.js";
4
+ export { analyzeNounFinance, type FinanceIssue, type FinanceOptions, } from "./finance.js";
5
+ export { diffNounEvolution, diffUdlEvolution, snapshotUdlNoun, } from "./evolution.js";
6
+ export type { EvolutionFieldSnapshot, EvolutionMoveSnapshot, EvolutionStepSnapshot, EvolutionTransitionSnapshot, EvolutionVerbSnapshot, NounEvolutionSnapshot, } from "./evolution.js";
7
+ export { UDL_FORMAT_VERSION, udlDocumentSchema, udlKernelOperationSchema, } from "./schema.js";
8
+ export type { UdlAggregate, UdlAggregateCondition, UdlBinding, UdlDeclaredValuePolicy, UdlDecision, UdlDocument, UdlDue, UdlExample, UdlGate, UdlKernelOperation, UdlLifecycle, UdlLifecycleTransition, UdlNoun, UdlNounSubject, UdlStep, UdlSubject, UdlUnwind, UdlVerb, } from "./schema.js";
9
+ export { assertValidUdl, openReferenceShapeBudget, UdlError, validateUdl, validateUdlSchemaValue, } from "./validation.js";
10
+ export type { ReferenceShapeBudget, UdlIssue, UdlIssueCode, UdlValidationResult, } from "./validation.js";
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,kBAAkB,EAClB,KAAK,YAAY,EACjB,KAAK,cAAc,GACpB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AACxB,YAAY,EACV,sBAAsB,EACtB,qBAAqB,EACrB,qBAAqB,EACrB,2BAA2B,EAC3B,qBAAqB,EACrB,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AACxB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AACrB,YAAY,EACV,YAAY,EACZ,qBAAqB,EACrB,UAAU,EACV,sBAAsB,EACtB,WAAW,EACX,WAAW,EACX,MAAM,EACN,UAAU,EACV,OAAO,EACP,kBAAkB,EAClB,YAAY,EACZ,sBAAsB,EACtB,OAAO,EACP,cAAc,EACd,OAAO,EACP,UAAU,EACV,SAAS,EACT,OAAO,GACR,MAAM,aAAa,CAAC;AACrB,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,QAAQ,EACR,WAAW,EACX,sBAAsB,GACvB,MAAM,iBAAiB,CAAC;AACzB,YAAY,EACV,oBAAoB,EACpB,QAAQ,EACR,YAAY,EACZ,mBAAmB,GACpB,MAAM,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,8 @@
1
+ export { canonicalizeUdl, parseUdl } from "./parser.js";
2
+ export { serializeUdl } from "./canonical.js";
3
+ export { fixedIsoDurationMs } from "./duration.js";
4
+ export { analyzeNounFinance, } from "./finance.js";
5
+ export { diffNounEvolution, diffUdlEvolution, snapshotUdlNoun, } from "./evolution.js";
6
+ export { UDL_FORMAT_VERSION, udlDocumentSchema, udlKernelOperationSchema, } from "./schema.js";
7
+ export { assertValidUdl, openReferenceShapeBudget, UdlError, validateUdl, validateUdlSchemaValue, } from "./validation.js";
8
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACxD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC;AACnD,OAAO,EACL,kBAAkB,GAGnB,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,GAChB,MAAM,gBAAgB,CAAC;AASxB,OAAO,EACL,kBAAkB,EAClB,iBAAiB,EACjB,wBAAwB,GACzB,MAAM,aAAa,CAAC;AAqBrB,OAAO,EACL,cAAc,EACd,wBAAwB,EACxB,QAAQ,EACR,WAAW,EACX,sBAAsB,GACvB,MAAM,iBAAiB,CAAC"}
@@ -0,0 +1,33 @@
1
+ export declare const UDL_LIMITS: Readonly<{
2
+ financeAccounts: 16;
3
+ financeEffects: 128;
4
+ financePathVariants: 256;
5
+ financeStates: 32;
6
+ financeTransitionEdges: 128;
7
+ financeTransitions: 64;
8
+ financeVerbs: 64;
9
+ financeWork: 4096;
10
+ maxDepth: 24;
11
+ maxKeyLength: 128;
12
+ maxNodes: 10000;
13
+ maxPatternLength: 320;
14
+ /**
15
+ * Upper bound on the match attempts a document-authored `pattern` can force
16
+ * the backtracking engine to explore at its single anchored start position.
17
+ * Every admitted pattern's search space is multiplied out at admission
18
+ * (alternation branches x optional atoms x variable-quantifier spans), so
19
+ * worst-case matching cost is this budget times the pattern length, not an
20
+ * exponential in the document author's choice of grammar.
21
+ */
22
+ maxPatternPaths: 4096;
23
+ /**
24
+ * Reference-shape classifications one `ReferenceShapeBudget` may buy. Each
25
+ * one compiles a JSON Schema validator, and a document controls both factors
26
+ * of the nouns x gate-fields product that asks for them.
27
+ */
28
+ maxSchemaProbes: 2048;
29
+ maxSourceBytes: number;
30
+ maxStringLength: 2048;
31
+ maxTotalStringLength: number;
32
+ }>;
33
+ //# sourceMappingURL=limits.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limits.d.ts","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,UAAU;;;;;;;;;;;;;IAarB;;;;;;;OAOG;;IAEH;;;;OAIG;;;;;EAKH,CAAC"}
package/dist/limits.js ADDED
@@ -0,0 +1,33 @@
1
+ export const UDL_LIMITS = Object.freeze({
2
+ financeAccounts: 16,
3
+ financeEffects: 128,
4
+ financePathVariants: 256,
5
+ financeStates: 32,
6
+ financeTransitionEdges: 128,
7
+ financeTransitions: 64,
8
+ financeVerbs: 64,
9
+ financeWork: 4_096,
10
+ maxDepth: 24,
11
+ maxKeyLength: 128,
12
+ maxNodes: 10_000,
13
+ maxPatternLength: 320,
14
+ /**
15
+ * Upper bound on the match attempts a document-authored `pattern` can force
16
+ * the backtracking engine to explore at its single anchored start position.
17
+ * Every admitted pattern's search space is multiplied out at admission
18
+ * (alternation branches x optional atoms x variable-quantifier spans), so
19
+ * worst-case matching cost is this budget times the pattern length, not an
20
+ * exponential in the document author's choice of grammar.
21
+ */
22
+ maxPatternPaths: 4_096,
23
+ /**
24
+ * Reference-shape classifications one `ReferenceShapeBudget` may buy. Each
25
+ * one compiles a JSON Schema validator, and a document controls both factors
26
+ * of the nouns x gate-fields product that asks for them.
27
+ */
28
+ maxSchemaProbes: 2_048,
29
+ maxSourceBytes: 256 * 1_024,
30
+ maxStringLength: 2_048,
31
+ maxTotalStringLength: 256 * 1_024,
32
+ });
33
+ //# sourceMappingURL=limits.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"limits.js","sourceRoot":"","sources":["../src/limits.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC;IACtC,eAAe,EAAE,EAAE;IACnB,cAAc,EAAE,GAAG;IACnB,mBAAmB,EAAE,GAAG;IACxB,aAAa,EAAE,EAAE;IACjB,sBAAsB,EAAE,GAAG;IAC3B,kBAAkB,EAAE,EAAE;IACtB,YAAY,EAAE,EAAE;IAChB,WAAW,EAAE,KAAK;IAClB,QAAQ,EAAE,EAAE;IACZ,YAAY,EAAE,GAAG;IACjB,QAAQ,EAAE,MAAM;IAChB,gBAAgB,EAAE,GAAG;IACrB;;;;;;;OAOG;IACH,eAAe,EAAE,KAAK;IACtB;;;;OAIG;IACH,eAAe,EAAE,KAAK;IACtB,cAAc,EAAE,GAAG,GAAG,KAAK;IAC3B,eAAe,EAAE,KAAK;IACtB,oBAAoB,EAAE,GAAG,GAAG,KAAK;CAClC,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import type { UdlDocument } from "./schema.js";
2
+ export declare function parseUdl(source: string | Uint8Array): UdlDocument;
3
+ export declare function canonicalizeUdl(source: string | Uint8Array): string;
4
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAK/C,wBAAgB,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,WAAW,CAmBjE;AAmBD,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,UAAU,GAAG,MAAM,CAEnE"}
package/dist/parser.js ADDED
@@ -0,0 +1,54 @@
1
+ import { serializeUdl } from "./canonical.js";
2
+ import { UDL_LIMITS } from "./limits.js";
3
+ import { assertValidUdl, UdlError } from "./validation.js";
4
+ const utf8Decoder = new TextDecoder("utf-8", { fatal: true });
5
+ export function parseUdl(source) {
6
+ const sourceBytes = typeof source === "string"
7
+ ? source.length > UDL_LIMITS.maxSourceBytes
8
+ ? source.length
9
+ : new TextEncoder().encode(source).byteLength
10
+ : source.byteLength;
11
+ if (sourceBytes > UDL_LIMITS.maxSourceBytes) {
12
+ throw new UdlError([
13
+ {
14
+ code: "resource_limit",
15
+ message: `UDL source exceeds ${UDL_LIMITS.maxSourceBytes} bytes`,
16
+ path: "$",
17
+ },
18
+ ]);
19
+ }
20
+ return parseUdlText(typeof source === "string" ? source : decodeUdlBytes(source));
21
+ }
22
+ function parseUdlText(source) {
23
+ let value;
24
+ try {
25
+ value = JSON.parse(source);
26
+ }
27
+ catch (error) {
28
+ throw new UdlError([
29
+ {
30
+ code: "invalid_json",
31
+ message: error instanceof Error ? error.message : "could not parse JSON",
32
+ path: "$",
33
+ },
34
+ ]);
35
+ }
36
+ return assertValidUdl(value);
37
+ }
38
+ export function canonicalizeUdl(source) {
39
+ return serializeUdl(parseUdl(source));
40
+ }
41
+ function decodeUdlBytes(source) {
42
+ try {
43
+ return utf8Decoder.decode(source);
44
+ }
45
+ catch {
46
+ const issue = {
47
+ code: "invalid_utf8",
48
+ message: "UDL bytes must be valid UTF-8",
49
+ path: "$",
50
+ };
51
+ throw new UdlError([issue]);
52
+ }
53
+ }
54
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,cAAc,EAAE,QAAQ,EAAiB,MAAM,iBAAiB,CAAC;AAE1E,MAAM,WAAW,GAAG,IAAI,WAAW,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAE9D,MAAM,UAAU,QAAQ,CAAC,MAA2B;IAClD,MAAM,WAAW,GACf,OAAO,MAAM,KAAK,QAAQ;QACxB,CAAC,CAAC,MAAM,CAAC,MAAM,GAAG,UAAU,CAAC,cAAc;YACzC,CAAC,CAAC,MAAM,CAAC,MAAM;YACf,CAAC,CAAC,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,UAAU;QAC/C,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC;IACxB,IAAI,WAAW,GAAG,UAAU,CAAC,cAAc,EAAE,CAAC;QAC5C,MAAM,IAAI,QAAQ,CAAC;YACjB;gBACE,IAAI,EAAE,gBAAgB;gBACtB,OAAO,EAAE,sBAAsB,UAAU,CAAC,cAAc,QAAQ;gBAChE,IAAI,EAAE,GAAG;aACV;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,YAAY,CACjB,OAAO,MAAM,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,cAAc,CAAC,MAAM,CAAC,CAC7D,CAAC;AACJ,CAAC;AAED,SAAS,YAAY,CAAC,MAAc;IAClC,IAAI,KAAc,CAAC;IACnB,IAAI,CAAC;QACH,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAY,CAAC;IACxC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,QAAQ,CAAC;YACjB;gBACE,IAAI,EAAE,cAAc;gBACpB,OAAO,EACL,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,sBAAsB;gBACjE,IAAI,EAAE,GAAG;aACV;SACF,CAAC,CAAC;IACL,CAAC;IACD,OAAO,cAAc,CAAC,KAAK,CAAC,CAAC;AAC/B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,MAA2B;IACzD,OAAO,YAAY,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;AACxC,CAAC;AAED,SAAS,cAAc,CAAC,MAAkB;IACxC,IAAI,CAAC;QACH,OAAO,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,KAAK,GAAa;YACtB,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,+BAA+B;YACxC,IAAI,EAAE,GAAG;SACV,CAAC;QACF,MAAM,IAAI,QAAQ,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;IAC9B,CAAC;AACH,CAAC"}