@manifesto-ai/core 2.6.0 → 2.7.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.
- package/README.md +4 -4
- package/dist/index.d.ts +1750 -19
- package/dist/index.js +18480 -36
- package/dist/index.js.map +1 -1
- package/package.json +5 -3
- package/dist/__tests__/apply.test.d.ts +0 -2
- package/dist/__tests__/apply.test.d.ts.map +0 -1
- package/dist/__tests__/apply.test.js +0 -320
- package/dist/__tests__/apply.test.js.map +0 -1
- package/dist/__tests__/defaults.test.d.ts +0 -2
- package/dist/__tests__/defaults.test.d.ts.map +0 -1
- package/dist/__tests__/defaults.test.js +0 -74
- package/dist/__tests__/defaults.test.js.map +0 -1
- package/dist/__tests__/jcs.test.d.ts +0 -2
- package/dist/__tests__/jcs.test.d.ts.map +0 -1
- package/dist/__tests__/jcs.test.js +0 -45
- package/dist/__tests__/jcs.test.js.map +0 -1
- package/dist/core/apply.d.ts +0 -17
- package/dist/core/apply.d.ts.map +0 -1
- package/dist/core/apply.js +0 -198
- package/dist/core/apply.js.map +0 -1
- package/dist/core/compute.d.ts +0 -17
- package/dist/core/compute.d.ts.map +0 -1
- package/dist/core/compute.js +0 -305
- package/dist/core/compute.js.map +0 -1
- package/dist/core/compute.test.d.ts +0 -2
- package/dist/core/compute.test.d.ts.map +0 -1
- package/dist/core/compute.test.js +0 -950
- package/dist/core/compute.test.js.map +0 -1
- package/dist/core/explain.d.ts +0 -14
- package/dist/core/explain.d.ts.map +0 -1
- package/dist/core/explain.js +0 -78
- package/dist/core/explain.js.map +0 -1
- package/dist/core/index.d.ts +0 -5
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -5
- package/dist/core/index.js.map +0 -1
- package/dist/core/validate.d.ts +0 -16
- package/dist/core/validate.d.ts.map +0 -1
- package/dist/core/validate.js +0 -361
- package/dist/core/validate.js.map +0 -1
- package/dist/core/validate.test.d.ts +0 -2
- package/dist/core/validate.test.d.ts.map +0 -1
- package/dist/core/validate.test.js +0 -719
- package/dist/core/validate.test.js.map +0 -1
- package/dist/core/validation-utils.d.ts +0 -20
- package/dist/core/validation-utils.d.ts.map +0 -1
- package/dist/core/validation-utils.js +0 -351
- package/dist/core/validation-utils.js.map +0 -1
- package/dist/errors.d.ts +0 -30
- package/dist/errors.d.ts.map +0 -1
- package/dist/errors.js +0 -51
- package/dist/errors.js.map +0 -1
- package/dist/evaluator/computed.d.ts +0 -14
- package/dist/evaluator/computed.d.ts.map +0 -1
- package/dist/evaluator/computed.js +0 -60
- package/dist/evaluator/computed.js.map +0 -1
- package/dist/evaluator/context.d.ts +0 -62
- package/dist/evaluator/context.d.ts.map +0 -1
- package/dist/evaluator/context.js +0 -44
- package/dist/evaluator/context.js.map +0 -1
- package/dist/evaluator/dag.d.ts +0 -30
- package/dist/evaluator/dag.d.ts.map +0 -1
- package/dist/evaluator/dag.js +0 -121
- package/dist/evaluator/dag.js.map +0 -1
- package/dist/evaluator/expr.d.ts +0 -11
- package/dist/evaluator/expr.d.ts.map +0 -1
- package/dist/evaluator/expr.js +0 -1030
- package/dist/evaluator/expr.js.map +0 -1
- package/dist/evaluator/expr.test.d.ts +0 -2
- package/dist/evaluator/expr.test.d.ts.map +0 -1
- package/dist/evaluator/expr.test.js +0 -1235
- package/dist/evaluator/expr.test.js.map +0 -1
- package/dist/evaluator/flow.d.ts +0 -36
- package/dist/evaluator/flow.d.ts.map +0 -1
- package/dist/evaluator/flow.js +0 -390
- package/dist/evaluator/flow.js.map +0 -1
- package/dist/evaluator/flow.test.d.ts +0 -2
- package/dist/evaluator/flow.test.d.ts.map +0 -1
- package/dist/evaluator/flow.test.js +0 -499
- package/dist/evaluator/flow.test.js.map +0 -1
- package/dist/evaluator/index.d.ts +0 -6
- package/dist/evaluator/index.d.ts.map +0 -1
- package/dist/evaluator/index.js +0 -6
- package/dist/evaluator/index.js.map +0 -1
- package/dist/factories.d.ts +0 -22
- package/dist/factories.d.ts.map +0 -1
- package/dist/factories.js +0 -44
- package/dist/factories.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.test.d.ts +0 -2
- package/dist/index.test.d.ts.map +0 -1
- package/dist/index.test.js +0 -14
- package/dist/index.test.js.map +0 -1
- package/dist/schema/action.d.ts +0 -14
- package/dist/schema/action.d.ts.map +0 -1
- package/dist/schema/action.js +0 -30
- package/dist/schema/action.js.map +0 -1
- package/dist/schema/common.d.ts +0 -37
- package/dist/schema/common.d.ts.map +0 -1
- package/dist/schema/common.js +0 -20
- package/dist/schema/common.js.map +0 -1
- package/dist/schema/computed.d.ts +0 -23
- package/dist/schema/computed.d.ts.map +0 -1
- package/dist/schema/computed.js +0 -34
- package/dist/schema/computed.js.map +0 -1
- package/dist/schema/defaults.d.ts +0 -12
- package/dist/schema/defaults.d.ts.map +0 -1
- package/dist/schema/defaults.js +0 -19
- package/dist/schema/defaults.js.map +0 -1
- package/dist/schema/domain.d.ts +0 -50
- package/dist/schema/domain.d.ts.map +0 -1
- package/dist/schema/domain.js +0 -60
- package/dist/schema/domain.js.map +0 -1
- package/dist/schema/expr.d.ts +0 -483
- package/dist/schema/expr.d.ts.map +0 -1
- package/dist/schema/expr.js +0 -445
- package/dist/schema/expr.js.map +0 -1
- package/dist/schema/field.d.ts +0 -48
- package/dist/schema/field.d.ts.map +0 -1
- package/dist/schema/field.js +0 -31
- package/dist/schema/field.js.map +0 -1
- package/dist/schema/flow.d.ts +0 -103
- package/dist/schema/flow.d.ts.map +0 -1
- package/dist/schema/flow.js +0 -82
- package/dist/schema/flow.js.map +0 -1
- package/dist/schema/host-context.d.ts +0 -12
- package/dist/schema/host-context.d.ts.map +0 -1
- package/dist/schema/host-context.js +0 -23
- package/dist/schema/host-context.js.map +0 -1
- package/dist/schema/index.d.ts +0 -15
- package/dist/schema/index.d.ts.map +0 -1
- package/dist/schema/index.js +0 -28
- package/dist/schema/index.js.map +0 -1
- package/dist/schema/patch.d.ts +0 -59
- package/dist/schema/patch.d.ts.map +0 -1
- package/dist/schema/patch.js +0 -60
- package/dist/schema/patch.js.map +0 -1
- package/dist/schema/result.d.ts +0 -142
- package/dist/schema/result.d.ts.map +0 -1
- package/dist/schema/result.js +0 -94
- package/dist/schema/result.js.map +0 -1
- package/dist/schema/snapshot.d.ts +0 -153
- package/dist/schema/snapshot.d.ts.map +0 -1
- package/dist/schema/snapshot.js +0 -160
- package/dist/schema/snapshot.js.map +0 -1
- package/dist/schema/trace.d.ts +0 -98
- package/dist/schema/trace.d.ts.map +0 -1
- package/dist/schema/trace.js +0 -90
- package/dist/schema/trace.js.map +0 -1
- package/dist/schema/type-spec.d.ts +0 -34
- package/dist/schema/type-spec.d.ts.map +0 -1
- package/dist/schema/type-spec.js +0 -40
- package/dist/schema/type-spec.js.map +0 -1
- package/dist/utils/canonical.d.ts +0 -37
- package/dist/utils/canonical.d.ts.map +0 -1
- package/dist/utils/canonical.js +0 -122
- package/dist/utils/canonical.js.map +0 -1
- package/dist/utils/canonical.test.d.ts +0 -2
- package/dist/utils/canonical.test.d.ts.map +0 -1
- package/dist/utils/canonical.test.js +0 -183
- package/dist/utils/canonical.test.js.map +0 -1
- package/dist/utils/hash.d.ts +0 -55
- package/dist/utils/hash.d.ts.map +0 -1
- package/dist/utils/hash.js +0 -183
- package/dist/utils/hash.js.map +0 -1
- package/dist/utils/hash.test.d.ts +0 -2
- package/dist/utils/hash.test.d.ts.map +0 -1
- package/dist/utils/hash.test.js +0 -253
- package/dist/utils/hash.test.js.map +0 -1
- package/dist/utils/index.d.ts +0 -4
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -4
- package/dist/utils/index.js.map +0 -1
- package/dist/utils/path.d.ts +0 -42
- package/dist/utils/path.d.ts.map +0 -1
- package/dist/utils/path.js +0 -170
- package/dist/utils/path.js.map +0 -1
- package/dist/utils/path.test.d.ts +0 -2
- package/dist/utils/path.test.d.ts.map +0 -1
- package/dist/utils/path.test.js +0 -248
- package/dist/utils/path.test.js.map +0 -1
package/dist/utils/canonical.js
DELETED
|
@@ -1,122 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Canonical form utilities for deterministic hashing
|
|
3
|
-
*
|
|
4
|
-
* Algorithm:
|
|
5
|
-
* 1. Sort all object keys alphabetically (recursive)
|
|
6
|
-
* 2. Remove all keys with undefined value
|
|
7
|
-
* 3. Preserve keys with null value
|
|
8
|
-
* 4. Serialize using JSON with no whitespace
|
|
9
|
-
*/
|
|
10
|
-
/**
|
|
11
|
-
* Recursively sort object keys alphabetically
|
|
12
|
-
*/
|
|
13
|
-
export function sortKeys(obj) {
|
|
14
|
-
if (obj === null || obj === undefined) {
|
|
15
|
-
return obj;
|
|
16
|
-
}
|
|
17
|
-
if (Array.isArray(obj)) {
|
|
18
|
-
return obj.map(sortKeys);
|
|
19
|
-
}
|
|
20
|
-
if (typeof obj === "object") {
|
|
21
|
-
const sorted = {};
|
|
22
|
-
const keys = Object.keys(obj).sort();
|
|
23
|
-
for (const key of keys) {
|
|
24
|
-
const value = obj[key];
|
|
25
|
-
// Remove undefined values
|
|
26
|
-
if (value !== undefined) {
|
|
27
|
-
sorted[key] = sortKeys(value);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
return sorted;
|
|
31
|
-
}
|
|
32
|
-
return obj;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Convert object to canonical JSON string
|
|
36
|
-
* - Keys are sorted alphabetically
|
|
37
|
-
* - Undefined values are removed
|
|
38
|
-
* - No whitespace
|
|
39
|
-
*/
|
|
40
|
-
export function toCanonical(obj) {
|
|
41
|
-
const sorted = sortKeys(obj);
|
|
42
|
-
return JSON.stringify(sorted);
|
|
43
|
-
}
|
|
44
|
-
/**
|
|
45
|
-
* Canonicalize JSON per RFC 8785 (JCS)
|
|
46
|
-
* - Objects: keys sorted by Unicode code points
|
|
47
|
-
* - Arrays: preserve order
|
|
48
|
-
* - Undefined/function/symbol: omitted in objects, null in arrays
|
|
49
|
-
* - Non-finite numbers: null
|
|
50
|
-
*/
|
|
51
|
-
export function toJcs(value) {
|
|
52
|
-
return serializeJcsValue(value);
|
|
53
|
-
}
|
|
54
|
-
function serializeJcsValue(value) {
|
|
55
|
-
if (value === null)
|
|
56
|
-
return "null";
|
|
57
|
-
const valueType = typeof value;
|
|
58
|
-
switch (valueType) {
|
|
59
|
-
case "string":
|
|
60
|
-
return JSON.stringify(value);
|
|
61
|
-
case "number":
|
|
62
|
-
return Number.isFinite(value) ? JSON.stringify(value) : "null";
|
|
63
|
-
case "boolean":
|
|
64
|
-
return value ? "true" : "false";
|
|
65
|
-
case "undefined":
|
|
66
|
-
return "null";
|
|
67
|
-
case "object":
|
|
68
|
-
if (Array.isArray(value)) {
|
|
69
|
-
return serializeJcsArray(value);
|
|
70
|
-
}
|
|
71
|
-
return serializeJcsObject(value);
|
|
72
|
-
default:
|
|
73
|
-
return "null";
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
function serializeJcsArray(values) {
|
|
77
|
-
const items = values.map((item) => {
|
|
78
|
-
if (item === undefined || typeof item === "function" || typeof item === "symbol") {
|
|
79
|
-
return "null";
|
|
80
|
-
}
|
|
81
|
-
return serializeJcsValue(item);
|
|
82
|
-
});
|
|
83
|
-
return `[${items.join(",")}]`;
|
|
84
|
-
}
|
|
85
|
-
function serializeJcsObject(obj) {
|
|
86
|
-
const keys = Object.keys(obj).sort(compareUnicodeCodePoints);
|
|
87
|
-
const parts = [];
|
|
88
|
-
for (const key of keys) {
|
|
89
|
-
const value = obj[key];
|
|
90
|
-
if (value === undefined || typeof value === "function" || typeof value === "symbol") {
|
|
91
|
-
continue;
|
|
92
|
-
}
|
|
93
|
-
parts.push(`${JSON.stringify(key)}:${serializeJcsValue(value)}`);
|
|
94
|
-
}
|
|
95
|
-
return `{${parts.join(",")}}`;
|
|
96
|
-
}
|
|
97
|
-
function compareUnicodeCodePoints(a, b) {
|
|
98
|
-
const aPoints = Array.from(a);
|
|
99
|
-
const bPoints = Array.from(b);
|
|
100
|
-
const length = Math.min(aPoints.length, bPoints.length);
|
|
101
|
-
for (let i = 0; i < length; i++) {
|
|
102
|
-
const aCode = aPoints[i].codePointAt(0) ?? 0;
|
|
103
|
-
const bCode = bPoints[i].codePointAt(0) ?? 0;
|
|
104
|
-
if (aCode !== bCode) {
|
|
105
|
-
return aCode - bCode;
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
return aPoints.length - bPoints.length;
|
|
109
|
-
}
|
|
110
|
-
/**
|
|
111
|
-
* Parse canonical JSON string
|
|
112
|
-
*/
|
|
113
|
-
export function fromCanonical(canonical) {
|
|
114
|
-
return JSON.parse(canonical);
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Check if two objects are equal in canonical form
|
|
118
|
-
*/
|
|
119
|
-
export function canonicalEqual(a, b) {
|
|
120
|
-
return toCanonical(a) === toCanonical(b);
|
|
121
|
-
}
|
|
122
|
-
//# sourceMappingURL=canonical.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"canonical.js","sourceRoot":"","sources":["../../src/utils/canonical.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH;;GAEG;AACH,MAAM,UAAU,QAAQ,CAAC,GAAY;IACnC,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QACtC,OAAO,GAAG,CAAC;IACb,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC;QACvB,OAAO,GAAG,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAC3B,CAAC;IAED,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,MAAM,GAA4B,EAAE,CAAC;QAC3C,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAA8B,CAAC,CAAC,IAAI,EAAE,CAAC;QAEhE,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;YACvB,MAAM,KAAK,GAAI,GAA+B,CAAC,GAAG,CAAC,CAAC;YACpD,0BAA0B;YAC1B,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxB,MAAM,CAAC,GAAG,CAAC,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;YAChC,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,OAAO,GAAG,CAAC;AACb,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,WAAW,CAAC,GAAY;IACtC,MAAM,MAAM,GAAG,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC7B,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAChC,CAAC;AAED;;;;;;GAMG;AACH,MAAM,UAAU,KAAK,CAAC,KAAc;IAClC,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAED,SAAS,iBAAiB,CAAC,KAAc;IACvC,IAAI,KAAK,KAAK,IAAI;QAAE,OAAO,MAAM,CAAC;IAElC,MAAM,SAAS,GAAG,OAAO,KAAK,CAAC;IAC/B,QAAQ,SAAS,EAAE,CAAC;QAClB,KAAK,QAAQ;YACX,OAAO,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;QAC/B,KAAK,QAAQ;YACX,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QACjE,KAAK,SAAS;YACZ,OAAO,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QAClC,KAAK,WAAW;YACd,OAAO,MAAM,CAAC;QAChB,KAAK,QAAQ;YACX,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;gBACzB,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC;YAClC,CAAC;YACD,OAAO,kBAAkB,CAAC,KAAgC,CAAC,CAAC;QAC9D;YACE,OAAO,MAAM,CAAC;IAClB,CAAC;AACH,CAAC;AAED,SAAS,iBAAiB,CAAC,MAAiB;IAC1C,MAAM,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE;QAChC,IAAI,IAAI,KAAK,SAAS,IAAI,OAAO,IAAI,KAAK,UAAU,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;YACjF,OAAO,MAAM,CAAC;QAChB,CAAC;QACD,OAAO,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACjC,CAAC,CAAC,CAAC;IACH,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAChC,CAAC;AAED,SAAS,kBAAkB,CAAC,GAA4B;IACtD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,wBAAwB,CAAC,CAAC;IAC7D,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,MAAM,GAAG,IAAI,IAAI,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,GAAG,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,KAAK,KAAK,SAAS,IAAI,OAAO,KAAK,KAAK,UAAU,IAAI,OAAO,KAAK,KAAK,QAAQ,EAAE,CAAC;YACpF,SAAS;QACX,CAAC;QACD,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;IACnE,CAAC;IAED,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC;AAChC,CAAC;AAED,SAAS,wBAAwB,CAAC,CAAS,EAAE,CAAS;IACpD,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;IAExD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAChC,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC7C,IAAI,KAAK,KAAK,KAAK,EAAE,CAAC;YACpB,OAAO,KAAK,GAAG,KAAK,CAAC;QACvB,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAI,SAAiB;IAChD,OAAO,IAAI,CAAC,KAAK,CAAC,SAAS,CAAM,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,CAAU,EAAE,CAAU;IACnD,OAAO,WAAW,CAAC,CAAC,CAAC,KAAK,WAAW,CAAC,CAAC,CAAC,CAAC;AAC3C,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"canonical.test.d.ts","sourceRoot":"","sources":["../../src/utils/canonical.test.ts"],"names":[],"mappings":""}
|
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
import { describe, it, expect } from "vitest";
|
|
2
|
-
import { sortKeys, toCanonical, toJcs, fromCanonical, canonicalEqual } from "./canonical.js";
|
|
3
|
-
describe("Canonical Utilities", () => {
|
|
4
|
-
describe("sortKeys", () => {
|
|
5
|
-
it("should sort object keys alphabetically", () => {
|
|
6
|
-
const obj = { c: 1, a: 2, b: 3 };
|
|
7
|
-
const result = sortKeys(obj);
|
|
8
|
-
expect(Object.keys(result)).toEqual(["a", "b", "c"]);
|
|
9
|
-
});
|
|
10
|
-
it("should sort nested object keys", () => {
|
|
11
|
-
const obj = { z: { c: 1, a: 2 }, a: { z: 1, a: 2 } };
|
|
12
|
-
const result = sortKeys(obj);
|
|
13
|
-
expect(Object.keys(result)).toEqual(["a", "z"]);
|
|
14
|
-
expect(Object.keys(result.z)).toEqual(["a", "c"]);
|
|
15
|
-
expect(Object.keys(result.a)).toEqual(["a", "z"]);
|
|
16
|
-
});
|
|
17
|
-
it("should remove undefined values", () => {
|
|
18
|
-
const obj = { a: 1, b: undefined, c: 3 };
|
|
19
|
-
const result = sortKeys(obj);
|
|
20
|
-
expect(result).toEqual({ a: 1, c: 3 });
|
|
21
|
-
});
|
|
22
|
-
it("should preserve null values", () => {
|
|
23
|
-
const obj = { a: 1, b: null, c: 3 };
|
|
24
|
-
const result = sortKeys(obj);
|
|
25
|
-
expect(result).toEqual({ a: 1, b: null, c: 3 });
|
|
26
|
-
});
|
|
27
|
-
it("should handle arrays", () => {
|
|
28
|
-
const obj = [{ b: 1, a: 2 }, { d: 3, c: 4 }];
|
|
29
|
-
const result = sortKeys(obj);
|
|
30
|
-
expect(result).toHaveLength(2);
|
|
31
|
-
expect(Object.keys(result[0])).toEqual(["a", "b"]);
|
|
32
|
-
expect(Object.keys(result[1])).toEqual(["c", "d"]);
|
|
33
|
-
});
|
|
34
|
-
it("should handle arrays inside objects", () => {
|
|
35
|
-
const obj = { items: [{ z: 1, a: 2 }] };
|
|
36
|
-
const result = sortKeys(obj);
|
|
37
|
-
expect(Object.keys(result.items[0])).toEqual(["a", "z"]);
|
|
38
|
-
});
|
|
39
|
-
it("should return null for null input", () => {
|
|
40
|
-
expect(sortKeys(null)).toBeNull();
|
|
41
|
-
});
|
|
42
|
-
it("should return undefined for undefined input", () => {
|
|
43
|
-
expect(sortKeys(undefined)).toBeUndefined();
|
|
44
|
-
});
|
|
45
|
-
it("should return primitives unchanged", () => {
|
|
46
|
-
expect(sortKeys(42)).toBe(42);
|
|
47
|
-
expect(sortKeys("hello")).toBe("hello");
|
|
48
|
-
expect(sortKeys(true)).toBe(true);
|
|
49
|
-
});
|
|
50
|
-
});
|
|
51
|
-
describe("toCanonical", () => {
|
|
52
|
-
it("should produce sorted JSON string", () => {
|
|
53
|
-
const obj = { c: 1, a: 2, b: 3 };
|
|
54
|
-
expect(toCanonical(obj)).toBe('{"a":2,"b":3,"c":1}');
|
|
55
|
-
});
|
|
56
|
-
it("should produce consistent output for same data", () => {
|
|
57
|
-
const obj1 = { a: 1, b: 2 };
|
|
58
|
-
const obj2 = { b: 2, a: 1 };
|
|
59
|
-
expect(toCanonical(obj1)).toBe(toCanonical(obj2));
|
|
60
|
-
});
|
|
61
|
-
it("should remove undefined values", () => {
|
|
62
|
-
const obj = { a: 1, b: undefined };
|
|
63
|
-
expect(toCanonical(obj)).toBe('{"a":1}');
|
|
64
|
-
});
|
|
65
|
-
it("should preserve null values", () => {
|
|
66
|
-
const obj = { a: null };
|
|
67
|
-
expect(toCanonical(obj)).toBe('{"a":null}');
|
|
68
|
-
});
|
|
69
|
-
it("should handle nested structures", () => {
|
|
70
|
-
const obj = { z: { b: 1, a: 2 }, a: 3 };
|
|
71
|
-
expect(toCanonical(obj)).toBe('{"a":3,"z":{"a":2,"b":1}}');
|
|
72
|
-
});
|
|
73
|
-
it("should handle arrays", () => {
|
|
74
|
-
const obj = [3, 1, 2];
|
|
75
|
-
expect(toCanonical(obj)).toBe("[3,1,2]"); // Arrays preserve order
|
|
76
|
-
});
|
|
77
|
-
it("should handle primitives", () => {
|
|
78
|
-
expect(toCanonical(42)).toBe("42");
|
|
79
|
-
expect(toCanonical("hello")).toBe('"hello"');
|
|
80
|
-
expect(toCanonical(true)).toBe("true");
|
|
81
|
-
expect(toCanonical(null)).toBe("null");
|
|
82
|
-
});
|
|
83
|
-
});
|
|
84
|
-
describe("toJcs", () => {
|
|
85
|
-
it("should sort object keys by code point order", () => {
|
|
86
|
-
const obj = { b: 1, a: 2 };
|
|
87
|
-
expect(toJcs(obj)).toBe('{"a":2,"b":1}');
|
|
88
|
-
});
|
|
89
|
-
it("should sort unicode keys by code point order", () => {
|
|
90
|
-
const obj = { b: 1, "\u00e4": 2, a: 3 };
|
|
91
|
-
expect(toJcs(obj)).toBe('{"a":3,"b":1,"\u00e4":2}');
|
|
92
|
-
});
|
|
93
|
-
it("should omit undefined object values", () => {
|
|
94
|
-
const obj = { a: 1, b: undefined };
|
|
95
|
-
expect(toJcs(obj)).toBe('{"a":1}');
|
|
96
|
-
});
|
|
97
|
-
it("should omit function object values", () => {
|
|
98
|
-
const obj = { a: 1, b: () => { } };
|
|
99
|
-
expect(toJcs(obj)).toBe('{"a":1}');
|
|
100
|
-
});
|
|
101
|
-
it("should convert undefined array items to null", () => {
|
|
102
|
-
const obj = [1, undefined, 2];
|
|
103
|
-
expect(toJcs(obj)).toBe("[1,null,2]");
|
|
104
|
-
});
|
|
105
|
-
it("should normalize non-finite numbers to null", () => {
|
|
106
|
-
const obj = { value: Infinity };
|
|
107
|
-
expect(toJcs(obj)).toBe('{"value":null}');
|
|
108
|
-
});
|
|
109
|
-
it("should normalize non-finite numbers in arrays to null", () => {
|
|
110
|
-
const obj = [NaN, Infinity, -Infinity, 1];
|
|
111
|
-
expect(toJcs(obj)).toBe("[null,null,null,1]");
|
|
112
|
-
});
|
|
113
|
-
});
|
|
114
|
-
describe("fromCanonical", () => {
|
|
115
|
-
it("should parse canonical JSON string", () => {
|
|
116
|
-
const canonical = '{"a":1,"b":2}';
|
|
117
|
-
expect(fromCanonical(canonical)).toEqual({ a: 1, b: 2 });
|
|
118
|
-
});
|
|
119
|
-
it("should handle arrays", () => {
|
|
120
|
-
const canonical = "[1,2,3]";
|
|
121
|
-
expect(fromCanonical(canonical)).toEqual([1, 2, 3]);
|
|
122
|
-
});
|
|
123
|
-
it("should handle primitives", () => {
|
|
124
|
-
expect(fromCanonical("42")).toBe(42);
|
|
125
|
-
expect(fromCanonical('"hello"')).toBe("hello");
|
|
126
|
-
expect(fromCanonical("true")).toBe(true);
|
|
127
|
-
expect(fromCanonical("null")).toBeNull();
|
|
128
|
-
});
|
|
129
|
-
});
|
|
130
|
-
describe("canonicalEqual", () => {
|
|
131
|
-
it("should return true for equal objects with different key order", () => {
|
|
132
|
-
const a = { x: 1, y: 2 };
|
|
133
|
-
const b = { y: 2, x: 1 };
|
|
134
|
-
expect(canonicalEqual(a, b)).toBe(true);
|
|
135
|
-
});
|
|
136
|
-
it("should return false for different objects", () => {
|
|
137
|
-
const a = { x: 1, y: 2 };
|
|
138
|
-
const b = { x: 1, y: 3 };
|
|
139
|
-
expect(canonicalEqual(a, b)).toBe(false);
|
|
140
|
-
});
|
|
141
|
-
it("should treat undefined as missing", () => {
|
|
142
|
-
const a = { x: 1 };
|
|
143
|
-
const b = { x: 1, y: undefined };
|
|
144
|
-
expect(canonicalEqual(a, b)).toBe(true);
|
|
145
|
-
});
|
|
146
|
-
it("should handle nested objects", () => {
|
|
147
|
-
const a = { outer: { b: 1, a: 2 } };
|
|
148
|
-
const b = { outer: { a: 2, b: 1 } };
|
|
149
|
-
expect(canonicalEqual(a, b)).toBe(true);
|
|
150
|
-
});
|
|
151
|
-
it("should distinguish null from undefined", () => {
|
|
152
|
-
const a = { x: null };
|
|
153
|
-
const b = { x: undefined };
|
|
154
|
-
expect(canonicalEqual(a, b)).toBe(false);
|
|
155
|
-
});
|
|
156
|
-
});
|
|
157
|
-
describe("Deterministic Hashing", () => {
|
|
158
|
-
it("should produce same canonical form regardless of property order", () => {
|
|
159
|
-
// Simulate objects created in different orders
|
|
160
|
-
const obj1 = {};
|
|
161
|
-
obj1.alpha = 1;
|
|
162
|
-
obj1.beta = 2;
|
|
163
|
-
obj1.gamma = 3;
|
|
164
|
-
const obj2 = {};
|
|
165
|
-
obj2.gamma = 3;
|
|
166
|
-
obj2.alpha = 1;
|
|
167
|
-
obj2.beta = 2;
|
|
168
|
-
expect(toCanonical(obj1)).toBe(toCanonical(obj2));
|
|
169
|
-
});
|
|
170
|
-
it("should handle deeply nested structures consistently", () => {
|
|
171
|
-
const obj1 = {
|
|
172
|
-
z: { y: { x: { w: 1 } } },
|
|
173
|
-
a: { b: { c: 2 } },
|
|
174
|
-
};
|
|
175
|
-
const obj2 = {
|
|
176
|
-
a: { b: { c: 2 } },
|
|
177
|
-
z: { y: { x: { w: 1 } } },
|
|
178
|
-
};
|
|
179
|
-
expect(toCanonical(obj1)).toBe(toCanonical(obj2));
|
|
180
|
-
});
|
|
181
|
-
});
|
|
182
|
-
});
|
|
183
|
-
//# sourceMappingURL=canonical.test.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"canonical.test.js","sourceRoot":"","sources":["../../src/utils/canonical.test.ts"],"names":[],"mappings":"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"}
|
package/dist/utils/hash.d.ts
DELETED
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
export type SchemaHashMode = "semantic" | "effective";
|
|
2
|
-
export type SchemaHashInput = {
|
|
3
|
-
id: string;
|
|
4
|
-
version: string;
|
|
5
|
-
types: Record<string, unknown>;
|
|
6
|
-
state: {
|
|
7
|
-
fields: Record<string, unknown>;
|
|
8
|
-
};
|
|
9
|
-
computed: {
|
|
10
|
-
fields: Record<string, {
|
|
11
|
-
deps: string[];
|
|
12
|
-
expr: unknown;
|
|
13
|
-
description?: string;
|
|
14
|
-
}>;
|
|
15
|
-
};
|
|
16
|
-
actions: Record<string, unknown>;
|
|
17
|
-
meta?: {
|
|
18
|
-
name?: string;
|
|
19
|
-
description?: string;
|
|
20
|
-
authors?: string[];
|
|
21
|
-
};
|
|
22
|
-
};
|
|
23
|
-
/**
|
|
24
|
-
* SHA-256 hash using Web Crypto API
|
|
25
|
-
* Works in both browser and Node.js
|
|
26
|
-
*/
|
|
27
|
-
export declare function sha256(message: string): Promise<string>;
|
|
28
|
-
/**
|
|
29
|
-
* SHA-256 hash using a synchronous pure JS implementation
|
|
30
|
-
*/
|
|
31
|
-
export declare function sha256Sync(message: string): string;
|
|
32
|
-
/**
|
|
33
|
-
* Hash a schema in canonical form
|
|
34
|
-
*/
|
|
35
|
-
export declare function hashSchema(schema: SchemaHashInput, mode?: SchemaHashMode): Promise<string>;
|
|
36
|
-
/**
|
|
37
|
-
* Hash a schema in canonical form (sync)
|
|
38
|
-
*/
|
|
39
|
-
export declare function hashSchemaSync(schema: SchemaHashInput, mode?: SchemaHashMode): string;
|
|
40
|
-
export declare function hashSchemaEffective(schema: SchemaHashInput): Promise<string>;
|
|
41
|
-
export declare function hashSchemaEffectiveSync(schema: SchemaHashInput): string;
|
|
42
|
-
/**
|
|
43
|
-
* Generate deterministic requirement ID
|
|
44
|
-
* Based on: schemaHash, intentId, actionId, flowNodePath
|
|
45
|
-
*/
|
|
46
|
-
export declare function generateRequirementId(schemaHash: string, intentId: string, actionId: string, flowNodePath: string): Promise<string>;
|
|
47
|
-
/**
|
|
48
|
-
* Generate deterministic requirement ID (sync)
|
|
49
|
-
*/
|
|
50
|
-
export declare function generateRequirementIdSync(schemaHash: string, intentId: string, actionId: string, flowNodePath: string): string;
|
|
51
|
-
/**
|
|
52
|
-
* Generate a trace node ID
|
|
53
|
-
*/
|
|
54
|
-
export declare function generateTraceId(index?: number): string;
|
|
55
|
-
//# sourceMappingURL=hash.d.ts.map
|
package/dist/utils/hash.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hash.d.ts","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"AAGA,MAAM,MAAM,cAAc,GAAG,UAAU,GAAG,WAAW,CAAC;AAEtD,MAAM,MAAM,eAAe,GAAG;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAC/B,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;KAAE,CAAC;IAC3C,QAAQ,EAAE;QACR,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE;YAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YAAC,IAAI,EAAE,OAAO,CAAC;YAAC,WAAW,CAAC,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACjF,CAAC;IACF,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACjC,IAAI,CAAC,EAAE;QACL,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH,CAAC;AAyBF;;;GAGG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAS7D;AA6GD;;GAEG;AACH,wBAAgB,UAAU,CAAC,OAAO,EAAE,MAAM,GAAG,MAAM,CAQlD;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,MAAM,EAAE,eAAe,EACvB,IAAI,GAAE,cAA2B,GAChC,OAAO,CAAC,MAAM,CAAC,CAIjB;AAED;;GAEG;AACH,wBAAgB,cAAc,CAC5B,MAAM,EAAE,eAAe,EACvB,IAAI,GAAE,cAA2B,GAChC,MAAM,CAGR;AAED,wBAAsB,mBAAmB,CACvC,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,MAAM,CAAC,CAEjB;AAED,wBAAgB,uBAAuB,CACrC,MAAM,EAAE,eAAe,GACtB,MAAM,CAER;AAED;;;GAGG;AACH,wBAAsB,qBAAqB,CACzC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,OAAO,CAAC,MAAM,CAAC,CAKjB;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CACvC,UAAU,EAAE,MAAM,EAClB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,YAAY,EAAE,MAAM,GACnB,MAAM,CAIR;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,KAAK,GAAE,MAAU,GAAG,MAAM,CAEzD"}
|
package/dist/utils/hash.js
DELETED
|
@@ -1,183 +0,0 @@
|
|
|
1
|
-
import { toCanonical } from "./canonical.js";
|
|
2
|
-
function normalizeSchemaForHash(schema, mode) {
|
|
3
|
-
if (mode === "effective") {
|
|
4
|
-
return schema;
|
|
5
|
-
}
|
|
6
|
-
const fields = schema.state?.fields ?? {};
|
|
7
|
-
const filteredEntries = Object.entries(fields).filter(([key]) => !key.startsWith("$"));
|
|
8
|
-
if (filteredEntries.length === Object.keys(fields).length) {
|
|
9
|
-
return schema;
|
|
10
|
-
}
|
|
11
|
-
return {
|
|
12
|
-
...schema,
|
|
13
|
-
state: {
|
|
14
|
-
...schema.state,
|
|
15
|
-
fields: Object.fromEntries(filteredEntries),
|
|
16
|
-
},
|
|
17
|
-
};
|
|
18
|
-
}
|
|
19
|
-
/**
|
|
20
|
-
* SHA-256 hash using Web Crypto API
|
|
21
|
-
* Works in both browser and Node.js
|
|
22
|
-
*/
|
|
23
|
-
export async function sha256(message) {
|
|
24
|
-
const msgBuffer = new TextEncoder().encode(message);
|
|
25
|
-
// Use Web Crypto API
|
|
26
|
-
const hashBuffer = await crypto.subtle.digest("SHA-256", msgBuffer);
|
|
27
|
-
// Convert to hex string
|
|
28
|
-
const hashArray = Array.from(new Uint8Array(hashBuffer));
|
|
29
|
-
return hashArray.map((b) => b.toString(16).padStart(2, "0")).join("");
|
|
30
|
-
}
|
|
31
|
-
const SHA256_K = new Uint32Array([
|
|
32
|
-
0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
|
|
33
|
-
0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
|
|
34
|
-
0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
|
|
35
|
-
0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
|
|
36
|
-
0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
|
|
37
|
-
0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
|
|
38
|
-
0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
|
|
39
|
-
0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
|
|
40
|
-
0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
|
|
41
|
-
0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
|
|
42
|
-
0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
|
|
43
|
-
0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
|
|
44
|
-
0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
|
|
45
|
-
0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
|
|
46
|
-
0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
|
|
47
|
-
0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2,
|
|
48
|
-
]);
|
|
49
|
-
const SHA256_INIT = new Uint32Array([
|
|
50
|
-
0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a,
|
|
51
|
-
0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,
|
|
52
|
-
]);
|
|
53
|
-
function sha256RotateRight(value, shift) {
|
|
54
|
-
return (value >>> shift) | (value << (32 - shift));
|
|
55
|
-
}
|
|
56
|
-
function sha256Bytes(data) {
|
|
57
|
-
const bitLen = data.length * 8;
|
|
58
|
-
const withOne = data.length + 1;
|
|
59
|
-
const padLen = withOne % 64 <= 56 ? 56 - (withOne % 64) : 120 - (withOne % 64);
|
|
60
|
-
const totalLen = withOne + padLen + 8;
|
|
61
|
-
const padded = new Uint8Array(totalLen);
|
|
62
|
-
padded.set(data);
|
|
63
|
-
padded[data.length] = 0x80;
|
|
64
|
-
const bitLenHi = Math.floor(bitLen / 0x100000000);
|
|
65
|
-
const bitLenLo = bitLen >>> 0;
|
|
66
|
-
padded[totalLen - 8] = (bitLenHi >>> 24) & 0xff;
|
|
67
|
-
padded[totalLen - 7] = (bitLenHi >>> 16) & 0xff;
|
|
68
|
-
padded[totalLen - 6] = (bitLenHi >>> 8) & 0xff;
|
|
69
|
-
padded[totalLen - 5] = bitLenHi & 0xff;
|
|
70
|
-
padded[totalLen - 4] = (bitLenLo >>> 24) & 0xff;
|
|
71
|
-
padded[totalLen - 3] = (bitLenLo >>> 16) & 0xff;
|
|
72
|
-
padded[totalLen - 2] = (bitLenLo >>> 8) & 0xff;
|
|
73
|
-
padded[totalLen - 1] = bitLenLo & 0xff;
|
|
74
|
-
const h = new Uint32Array(SHA256_INIT);
|
|
75
|
-
const view = new DataView(padded.buffer);
|
|
76
|
-
for (let offset = 0; offset < padded.length; offset += 64) {
|
|
77
|
-
const w = new Uint32Array(64);
|
|
78
|
-
for (let i = 0; i < 16; i++) {
|
|
79
|
-
w[i] = view.getUint32(offset + i * 4);
|
|
80
|
-
}
|
|
81
|
-
for (let i = 16; i < 64; i++) {
|
|
82
|
-
const s0 = sha256RotateRight(w[i - 15], 7) ^ sha256RotateRight(w[i - 15], 18) ^ (w[i - 15] >>> 3);
|
|
83
|
-
const s1 = sha256RotateRight(w[i - 2], 17) ^ sha256RotateRight(w[i - 2], 19) ^ (w[i - 2] >>> 10);
|
|
84
|
-
w[i] = (w[i - 16] + s0 + w[i - 7] + s1) >>> 0;
|
|
85
|
-
}
|
|
86
|
-
let a = h[0];
|
|
87
|
-
let b = h[1];
|
|
88
|
-
let c = h[2];
|
|
89
|
-
let d = h[3];
|
|
90
|
-
let e = h[4];
|
|
91
|
-
let f = h[5];
|
|
92
|
-
let g = h[6];
|
|
93
|
-
let hh = h[7];
|
|
94
|
-
for (let i = 0; i < 64; i++) {
|
|
95
|
-
const s1 = sha256RotateRight(e, 6) ^ sha256RotateRight(e, 11) ^ sha256RotateRight(e, 25);
|
|
96
|
-
const ch = (e & f) ^ (~e & g);
|
|
97
|
-
const t1 = (hh + s1 + ch + SHA256_K[i] + w[i]) >>> 0;
|
|
98
|
-
const s0 = sha256RotateRight(a, 2) ^ sha256RotateRight(a, 13) ^ sha256RotateRight(a, 22);
|
|
99
|
-
const maj = (a & b) ^ (a & c) ^ (b & c);
|
|
100
|
-
const t2 = (s0 + maj) >>> 0;
|
|
101
|
-
hh = g;
|
|
102
|
-
g = f;
|
|
103
|
-
f = e;
|
|
104
|
-
e = (d + t1) >>> 0;
|
|
105
|
-
d = c;
|
|
106
|
-
c = b;
|
|
107
|
-
b = a;
|
|
108
|
-
a = (t1 + t2) >>> 0;
|
|
109
|
-
}
|
|
110
|
-
h[0] = (h[0] + a) >>> 0;
|
|
111
|
-
h[1] = (h[1] + b) >>> 0;
|
|
112
|
-
h[2] = (h[2] + c) >>> 0;
|
|
113
|
-
h[3] = (h[3] + d) >>> 0;
|
|
114
|
-
h[4] = (h[4] + e) >>> 0;
|
|
115
|
-
h[5] = (h[5] + f) >>> 0;
|
|
116
|
-
h[6] = (h[6] + g) >>> 0;
|
|
117
|
-
h[7] = (h[7] + hh) >>> 0;
|
|
118
|
-
}
|
|
119
|
-
const out = new Uint8Array(32);
|
|
120
|
-
const outView = new DataView(out.buffer);
|
|
121
|
-
for (let i = 0; i < h.length; i++) {
|
|
122
|
-
outView.setUint32(i * 4, h[i]);
|
|
123
|
-
}
|
|
124
|
-
return out;
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* SHA-256 hash using a synchronous pure JS implementation
|
|
128
|
-
*/
|
|
129
|
-
export function sha256Sync(message) {
|
|
130
|
-
const data = new TextEncoder().encode(message);
|
|
131
|
-
const hash = sha256Bytes(data);
|
|
132
|
-
let hex = "";
|
|
133
|
-
for (const byte of hash) {
|
|
134
|
-
hex += byte.toString(16).padStart(2, "0");
|
|
135
|
-
}
|
|
136
|
-
return hex;
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Hash a schema in canonical form
|
|
140
|
-
*/
|
|
141
|
-
export async function hashSchema(schema, mode = "semantic") {
|
|
142
|
-
// Create canonical form without the hash field
|
|
143
|
-
const canonical = toCanonical(normalizeSchemaForHash(schema, mode));
|
|
144
|
-
return sha256(canonical);
|
|
145
|
-
}
|
|
146
|
-
/**
|
|
147
|
-
* Hash a schema in canonical form (sync)
|
|
148
|
-
*/
|
|
149
|
-
export function hashSchemaSync(schema, mode = "semantic") {
|
|
150
|
-
const canonical = toCanonical(normalizeSchemaForHash(schema, mode));
|
|
151
|
-
return sha256Sync(canonical);
|
|
152
|
-
}
|
|
153
|
-
export async function hashSchemaEffective(schema) {
|
|
154
|
-
return hashSchema(schema, "effective");
|
|
155
|
-
}
|
|
156
|
-
export function hashSchemaEffectiveSync(schema) {
|
|
157
|
-
return hashSchemaSync(schema, "effective");
|
|
158
|
-
}
|
|
159
|
-
/**
|
|
160
|
-
* Generate deterministic requirement ID
|
|
161
|
-
* Based on: schemaHash, intentId, actionId, flowNodePath
|
|
162
|
-
*/
|
|
163
|
-
export async function generateRequirementId(schemaHash, intentId, actionId, flowNodePath) {
|
|
164
|
-
const input = `${schemaHash}:${intentId}:${actionId}:${flowNodePath}`;
|
|
165
|
-
const hash = await sha256(input);
|
|
166
|
-
// Return first 16 characters for brevity
|
|
167
|
-
return `req-${hash.slice(0, 16)}`;
|
|
168
|
-
}
|
|
169
|
-
/**
|
|
170
|
-
* Generate deterministic requirement ID (sync)
|
|
171
|
-
*/
|
|
172
|
-
export function generateRequirementIdSync(schemaHash, intentId, actionId, flowNodePath) {
|
|
173
|
-
const input = `${schemaHash}:${intentId}:${actionId}:${flowNodePath}`;
|
|
174
|
-
const hash = sha256Sync(input);
|
|
175
|
-
return `req-${hash.slice(0, 16)}`;
|
|
176
|
-
}
|
|
177
|
-
/**
|
|
178
|
-
* Generate a trace node ID
|
|
179
|
-
*/
|
|
180
|
-
export function generateTraceId(index = 0) {
|
|
181
|
-
return `trace-${index}`;
|
|
182
|
-
}
|
|
183
|
-
//# sourceMappingURL=hash.js.map
|
package/dist/utils/hash.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hash.js","sourceRoot":"","sources":["../../src/utils/hash.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"hash.test.d.ts","sourceRoot":"","sources":["../../src/utils/hash.test.ts"],"names":[],"mappings":""}
|