@axiom-core/invariant-engine 0.1.0
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/dist/index.d.ts +14 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +9 -0
- package/dist/index.js.map +1 -0
- package/dist/invariants.d.ts +57 -0
- package/dist/invariants.d.ts.map +1 -0
- package/dist/invariants.js +589 -0
- package/dist/invariants.js.map +1 -0
- package/package.json +41 -0
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { Token } from '@axiom-core/token-schema';
|
|
2
|
+
export { assertNoPrimitiveLeak, assertNoRawHex, assertAllAxesRegistered, assertNoCyclicReferences, assertAllReferencesResolvable, assertAllReferencesResolvableShallow, assertAllReferencesResolvableDeep, validateTheme, InvariantLevel } from './invariants.js';
|
|
3
|
+
export declare const processToken: (t: Token) => {
|
|
4
|
+
processed: boolean;
|
|
5
|
+
tokenId: string;
|
|
6
|
+
};
|
|
7
|
+
export declare const checkInvariant: (t: Token) => {
|
|
8
|
+
invariantOk: boolean;
|
|
9
|
+
result: {
|
|
10
|
+
processed: boolean;
|
|
11
|
+
tokenId: string;
|
|
12
|
+
};
|
|
13
|
+
};
|
|
14
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,6BAA6B,EAAE,oCAAoC,EAAE,iCAAiC,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAElQ,eAAO,MAAM,YAAY,GAAI,GAAG,KAAK;;;CAEpC,CAAC;AAEF,eAAO,MAAM,cAAc,GAAI,GAAG,KAAK;;;;;;CAGtC,CAAC"}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export { assertNoPrimitiveLeak, assertNoRawHex, assertAllAxesRegistered, assertNoCyclicReferences, assertAllReferencesResolvable, assertAllReferencesResolvableShallow, assertAllReferencesResolvableDeep, validateTheme, InvariantLevel } from './invariants.js';
|
|
2
|
+
export const processToken = (t) => {
|
|
3
|
+
return { processed: true, tokenId: t.id };
|
|
4
|
+
};
|
|
5
|
+
export const checkInvariant = (t) => {
|
|
6
|
+
const res = processToken(t);
|
|
7
|
+
return { invariantOk: true, result: res };
|
|
8
|
+
};
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,qBAAqB,EAAE,cAAc,EAAE,uBAAuB,EAAE,wBAAwB,EAAE,6BAA6B,EAAE,oCAAoC,EAAE,iCAAiC,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAElQ,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAQ,EAAE,EAAE;IACvC,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AAC5C,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAQ,EAAE,EAAE;IACzC,MAAM,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC,CAAC;IAC5B,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,CAAC;AAC5C,CAAC,CAAC"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { PrimitiveTokens, SemanticTokens } from '@axiom-core/token-schema';
|
|
2
|
+
import type { AxisRegistry } from '@axiom-core/core-engine';
|
|
3
|
+
/**
|
|
4
|
+
* Invariant levels describe the scope and cost of checks performed.
|
|
5
|
+
* - `runtime`: inexpensive, fast checks that should run in production to catch common problems.
|
|
6
|
+
* - `ci`: expensive, deep-graph analysis and performance guards intended for CI jobs only.
|
|
7
|
+
*/
|
|
8
|
+
export type InvariantLevel = 'runtime' | 'ci';
|
|
9
|
+
export declare const InvariantLevel: {
|
|
10
|
+
readonly Runtime: InvariantLevel;
|
|
11
|
+
readonly CI: InvariantLevel;
|
|
12
|
+
};
|
|
13
|
+
export declare function assertNoPrimitiveLeak(semantic: SemanticTokens): void;
|
|
14
|
+
export declare function assertNoRawHex(semantic: SemanticTokens): void;
|
|
15
|
+
export declare function assertNoCyclicReferences(semantic: SemanticTokens, primitives: PrimitiveTokens): void;
|
|
16
|
+
export declare function assertAllReferencesResolvable(semantic: SemanticTokens, primitives: PrimitiveTokens): void;
|
|
17
|
+
export declare function assertAllReferencesResolvableShallow(semantic: SemanticTokens, primitives: PrimitiveTokens): void;
|
|
18
|
+
export declare function assertAllReferencesResolvableDeep(semantic: SemanticTokens, primitives: PrimitiveTokens): void;
|
|
19
|
+
export declare function assertAllAxesRegistered(expectedAxes: readonly string[], registry: AxisRegistry | Record<string, unknown>): void;
|
|
20
|
+
/**
|
|
21
|
+
* Runtime invariants:
|
|
22
|
+
* Must remain O(n).
|
|
23
|
+
* Safe for theme switching at runtime.
|
|
24
|
+
*/
|
|
25
|
+
export declare function runRuntimeInvariants(semantic: SemanticTokens, primitives: PrimitiveTokens, expectedAxes: readonly string[], registry: AxisRegistry | Record<string, unknown>): void;
|
|
26
|
+
/**
|
|
27
|
+
* Runtime single-pass semantic validator.
|
|
28
|
+
* Visits each leaf exactly once and enforces:
|
|
29
|
+
* - leaf must be a TokenReference
|
|
30
|
+
* - raw hex string leaves are rejected
|
|
31
|
+
* - token references are shallowly resolvable against `primitives`
|
|
32
|
+
*
|
|
33
|
+
* Complexity: O(n) where n is number of nodes in `semantic` (plus shallow path checks).
|
|
34
|
+
*/
|
|
35
|
+
export declare function validateRuntimeSemantic(semantic: SemanticTokens, primitives: PrimitiveTokens): void;
|
|
36
|
+
export declare function assertStateExhaustive(semantic: SemanticTokens): void;
|
|
37
|
+
export declare function assertTypographyExhaustive(semantic: SemanticTokens): void;
|
|
38
|
+
/**
|
|
39
|
+
* validateTheme runs configured invariants on the provided token graphs.
|
|
40
|
+
*
|
|
41
|
+
* Options:
|
|
42
|
+
* - `level` (default: `InvariantLevel.Runtime`) — selects check set:
|
|
43
|
+
* - `Compile`: documented-only; no runtime checks performed here. Intended to indicate TypeScript-enforced rules.
|
|
44
|
+
* - `Runtime`: lightweight checks suitable for production (no deep graph analysis).
|
|
45
|
+
* - `CI`: includes expensive deep-graph and performance checks intended for CI.
|
|
46
|
+
*/
|
|
47
|
+
export declare function validateTheme(semantic: SemanticTokens, primitives: PrimitiveTokens, expectedAxes: readonly string[], registry: AxisRegistry, options?: {
|
|
48
|
+
level?: InvariantLevel;
|
|
49
|
+
}): void;
|
|
50
|
+
/**
|
|
51
|
+
* CI invariants:
|
|
52
|
+
* Exhaustive validation.
|
|
53
|
+
* May be O(n + e).
|
|
54
|
+
* Intended for build/CI enforcement.
|
|
55
|
+
*/
|
|
56
|
+
export declare function runCIInvariants(semantic: SemanticTokens, primitives: PrimitiveTokens): void;
|
|
57
|
+
//# sourceMappingURL=invariants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invariants.d.ts","sourceRoot":"","sources":["../src/invariants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAChF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,yBAAyB,CAAC;AAG5D;;;;GAIG;AACH,MAAM,MAAM,cAAc,GAAG,SAAS,GAAG,IAAI,CAAC;AAG9C,eAAO,MAAM,cAAc;sBACH,cAAc;iBACxB,cAAc;CAClB,CAAC;AAuCX,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CA4BpE;AAID,wBAAgB,cAAc,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CAuB7D;AAqFD,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI,CAkEpG;AAGD,wBAAgB,6BAA6B,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI,CAazG;AAGD,wBAAgB,oCAAoC,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI,CAsDhH;AAGD,wBAAgB,iCAAiC,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI,CAa7G;AAGD,wBAAgB,uBAAuB,CAAC,YAAY,EAAE,SAAS,MAAM,EAAE,EAAE,QAAQ,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAK/H;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,cAAc,EACxB,UAAU,EAAE,eAAe,EAC3B,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,QAAQ,EAAE,YAAY,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,QAQjD;AAED;;;;;;;;GAQG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,GAAG,IAAI,CA8BnG;AAyED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CA4CpE;AAGD,wBAAgB,0BAA0B,CAAC,QAAQ,EAAE,cAAc,GAAG,IAAI,CA0DzE;AAED;;;;;;;;GAQG;AACH,wBAAgB,aAAa,CAC3B,QAAQ,EAAE,cAAc,EACxB,UAAU,EAAE,eAAe,EAC3B,YAAY,EAAE,SAAS,MAAM,EAAE,EAC/B,QAAQ,EAAE,YAAY,EACtB,OAAO,CAAC,EAAE;IAAE,KAAK,CAAC,EAAE,cAAc,CAAA;CAAE,GACnC,IAAI,CAYN;AAED;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,cAAc,EAAE,UAAU,EAAE,eAAe,QAiBpF"}
|
|
@@ -0,0 +1,589 @@
|
|
|
1
|
+
import { AxiomInvariantError } from '@axiom-core/internal-utils';
|
|
2
|
+
// Backwards-compatible runtime value object used by callers in the codebase.
|
|
3
|
+
export const InvariantLevel = {
|
|
4
|
+
Runtime: 'runtime',
|
|
5
|
+
CI: 'ci'
|
|
6
|
+
};
|
|
7
|
+
function isPlainObject(v) {
|
|
8
|
+
return typeof v === 'object' && v !== null && !Array.isArray(v) && (Object.getPrototypeOf(v) === Object.prototype || Object.getPrototypeOf(v) === null);
|
|
9
|
+
}
|
|
10
|
+
function isPrimitiveValue(v) {
|
|
11
|
+
return typeof v === 'string' || typeof v === 'number';
|
|
12
|
+
}
|
|
13
|
+
function isTokenReference(obj) {
|
|
14
|
+
return isPlainObject(obj) && typeof obj.ref === 'string';
|
|
15
|
+
}
|
|
16
|
+
function joinPath(path) {
|
|
17
|
+
return path.map(String).join('.');
|
|
18
|
+
}
|
|
19
|
+
// Traverse semantic tokens and call callback for each leaf value, providing path
|
|
20
|
+
function traverseSemantic(obj, cb, path = []) {
|
|
21
|
+
if (isTokenReference(obj)) {
|
|
22
|
+
cb(obj, path);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
if (isPlainObject(obj)) {
|
|
26
|
+
for (const [key, val] of Object.entries(obj)) {
|
|
27
|
+
traverseSemantic(val, cb, path.concat(key));
|
|
28
|
+
}
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
cb(obj, path);
|
|
32
|
+
}
|
|
33
|
+
// 1. assertNoPrimitiveLeak
|
|
34
|
+
export function assertNoPrimitiveLeak(semantic) {
|
|
35
|
+
// Ensure explicit checks for surface, elevation, and effect namespaces
|
|
36
|
+
const checkNamespaces = (nsObj) => {
|
|
37
|
+
if (nsObj !== undefined)
|
|
38
|
+
traverseSemantic(nsObj, (value, path) => {
|
|
39
|
+
if (isTokenReference(value))
|
|
40
|
+
return; // ok
|
|
41
|
+
if (value === undefined || value === null)
|
|
42
|
+
return;
|
|
43
|
+
if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
|
|
44
|
+
throw new AxiomInvariantError('invariant-engine', `Primitive leak detected at semantic.${joinPath(path)} — found primitive value (${String(value)}). Leaves must be TokenReference objects.`, { path: joinPath(path) });
|
|
45
|
+
}
|
|
46
|
+
});
|
|
47
|
+
};
|
|
48
|
+
// Check explicit namespaces first
|
|
49
|
+
checkNamespaces(semantic.surface);
|
|
50
|
+
checkNamespaces(semantic.elevation);
|
|
51
|
+
checkNamespaces(semantic.typography);
|
|
52
|
+
checkNamespaces(semantic.state);
|
|
53
|
+
checkNamespaces(semantic.effect);
|
|
54
|
+
// Fallback: traverse entire semantic object to catch any other primitive leaks
|
|
55
|
+
traverseSemantic(semantic, (value, path) => {
|
|
56
|
+
if (isTokenReference(value))
|
|
57
|
+
return; // ok
|
|
58
|
+
// if it's an object, it's nested map and was traversed; only primitives reach here
|
|
59
|
+
if (value === undefined || value === null)
|
|
60
|
+
return; // allow empty? treat as ok
|
|
61
|
+
if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {
|
|
62
|
+
throw new AxiomInvariantError('invariant-engine', `Primitive leak detected at semantic.${joinPath(path)} — found primitive value (${String(value)}). Leaves must be TokenReference objects.`, { path: joinPath(path) });
|
|
63
|
+
}
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
// 2. assertNoRawHex
|
|
67
|
+
const HEX_RE = /^#[0-9A-Fa-f]{3,8}$/;
|
|
68
|
+
export function assertNoRawHex(semantic) {
|
|
69
|
+
const checkNs = (nsObj) => {
|
|
70
|
+
if (nsObj === undefined)
|
|
71
|
+
return;
|
|
72
|
+
traverseSemantic(nsObj, (value, path) => {
|
|
73
|
+
if (typeof value === 'string' && HEX_RE.test(value)) {
|
|
74
|
+
throw new AxiomInvariantError('invariant-engine', `Raw hex value detected at semantic.${joinPath(path)} — found "${value}". Use TokenReference instead.`, { path: joinPath(path), value });
|
|
75
|
+
}
|
|
76
|
+
}, []);
|
|
77
|
+
};
|
|
78
|
+
// Explicit namespaces
|
|
79
|
+
checkNs(semantic.surface);
|
|
80
|
+
checkNs(semantic.elevation);
|
|
81
|
+
checkNs(semantic.typography);
|
|
82
|
+
checkNs(semantic.state);
|
|
83
|
+
checkNs(semantic.effect);
|
|
84
|
+
// Fallback full traverse
|
|
85
|
+
traverseSemantic(semantic, (value, path) => {
|
|
86
|
+
if (typeof value === 'string' && HEX_RE.test(value)) {
|
|
87
|
+
throw new AxiomInvariantError('invariant-engine', `Raw hex value detected at semantic.${joinPath(path)} — found "${value}". Use TokenReference instead.`, { path: joinPath(path), value });
|
|
88
|
+
}
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
// Helpers to collect primitive paths and map values
|
|
92
|
+
function collectPrimitiveMap(primitives) {
|
|
93
|
+
const map = new Map();
|
|
94
|
+
function walk(obj, parts) {
|
|
95
|
+
if (isPlainObject(obj)) {
|
|
96
|
+
for (const [k, v] of Object.entries(obj))
|
|
97
|
+
walk(v, parts.concat(k));
|
|
98
|
+
return;
|
|
99
|
+
}
|
|
100
|
+
if (isPrimitiveValue(obj) || isTokenReference(obj)) {
|
|
101
|
+
map.set(parts.join('.'), obj);
|
|
102
|
+
return;
|
|
103
|
+
}
|
|
104
|
+
if (obj === null || obj === undefined) {
|
|
105
|
+
// allow empty categories? treat as absent
|
|
106
|
+
return;
|
|
107
|
+
}
|
|
108
|
+
throw new AxiomInvariantError('invariant-engine', `collectPrimitiveMap: unsupported primitive value at ${parts.join('.')}: ${String(obj)}`, { path: parts.join('.') });
|
|
109
|
+
}
|
|
110
|
+
for (const [cat, val] of Object.entries(primitives)) {
|
|
111
|
+
walk(val, [cat]);
|
|
112
|
+
}
|
|
113
|
+
return map;
|
|
114
|
+
}
|
|
115
|
+
// Lightweight key set collector optimized for runtime validation.
|
|
116
|
+
// Builds a Set of primitive paths (e.g., 'color.gray.50') using an iterative
|
|
117
|
+
// traversal that minimizes intermediate array/string allocations.
|
|
118
|
+
function collectPrimitiveKeySet(primitives) {
|
|
119
|
+
const out = new Set();
|
|
120
|
+
const root = primitives;
|
|
121
|
+
const stack = [];
|
|
122
|
+
const path = [];
|
|
123
|
+
if (!isPlainObject(root))
|
|
124
|
+
return out;
|
|
125
|
+
stack.push({ node: root, keys: Object.keys(root), idx: 0 });
|
|
126
|
+
while (stack.length) {
|
|
127
|
+
const frame = stack[stack.length - 1];
|
|
128
|
+
if (frame.idx >= frame.keys.length) {
|
|
129
|
+
stack.pop();
|
|
130
|
+
if (path.length)
|
|
131
|
+
path.pop();
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
const key = frame.keys[frame.idx++];
|
|
135
|
+
const val = frame.node[key];
|
|
136
|
+
if (isPlainObject(val)) {
|
|
137
|
+
path.push(key);
|
|
138
|
+
stack.push({ node: val, keys: Object.keys(val), idx: 0 });
|
|
139
|
+
continue;
|
|
140
|
+
}
|
|
141
|
+
if (isPrimitiveValue(val) || isTokenReference(val)) {
|
|
142
|
+
const full = path.length ? path.concat(key).join('.') : key;
|
|
143
|
+
out.add(full);
|
|
144
|
+
continue;
|
|
145
|
+
}
|
|
146
|
+
// ignore null/undefined categories
|
|
147
|
+
if (val === null || val === undefined)
|
|
148
|
+
continue;
|
|
149
|
+
throw new AxiomInvariantError('invariant-engine', `collectPrimitiveKeySet: unsupported primitive value at ${path.concat(key).join('.')}: ${String(val)}`, { path: path.concat(key).join('.') });
|
|
150
|
+
}
|
|
151
|
+
return out;
|
|
152
|
+
}
|
|
153
|
+
// Module-scoped cache to avoid rebuilding the key set when `primitives`
|
|
154
|
+
// object identity is stable across calls (common at runtime).
|
|
155
|
+
const primitiveKeyCache = new WeakMap();
|
|
156
|
+
function getPrimitiveKeySet(primitives) {
|
|
157
|
+
const cached = primitiveKeyCache.get(primitives);
|
|
158
|
+
if (cached)
|
|
159
|
+
return cached;
|
|
160
|
+
const set = collectPrimitiveKeySet(primitives);
|
|
161
|
+
primitiveKeyCache.set(primitives, set);
|
|
162
|
+
return set;
|
|
163
|
+
}
|
|
164
|
+
// 4. assertNoCyclicReferences
|
|
165
|
+
export function assertNoCyclicReferences(semantic, primitives) {
|
|
166
|
+
const primMap = collectPrimitiveMap(primitives);
|
|
167
|
+
// Build graph edges for primitive refs only
|
|
168
|
+
const edges = new Map();
|
|
169
|
+
for (const [key, val] of primMap.entries()) {
|
|
170
|
+
if (isTokenReference(val)) {
|
|
171
|
+
const target = val.ref;
|
|
172
|
+
edges.set(key, [target]);
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
// DFS for cycles
|
|
176
|
+
const temp = new Set();
|
|
177
|
+
const perm = new Set();
|
|
178
|
+
function visit(n, stack) {
|
|
179
|
+
if (perm.has(n))
|
|
180
|
+
return;
|
|
181
|
+
if (temp.has(n)) {
|
|
182
|
+
const cycleStart = stack.indexOf(n);
|
|
183
|
+
const cycle = stack.slice(cycleStart).concat(n);
|
|
184
|
+
throw new AxiomInvariantError('invariant-engine', `Cyclic token reference detected: ${cycle.join(' -> ')}`, { cycle });
|
|
185
|
+
}
|
|
186
|
+
temp.add(n);
|
|
187
|
+
stack.push(n);
|
|
188
|
+
const nbrs = edges.get(n) || [];
|
|
189
|
+
for (const m of nbrs) {
|
|
190
|
+
visit(m, stack);
|
|
191
|
+
}
|
|
192
|
+
stack.pop();
|
|
193
|
+
temp.delete(n);
|
|
194
|
+
perm.add(n);
|
|
195
|
+
}
|
|
196
|
+
for (const n of edges.keys()) {
|
|
197
|
+
visit(n, []);
|
|
198
|
+
}
|
|
199
|
+
// Also check chains starting from semantic refs following primitive edges
|
|
200
|
+
const semanticRefs = new Set();
|
|
201
|
+
traverseSemantic(semantic, (value) => {
|
|
202
|
+
if (isTokenReference(value))
|
|
203
|
+
semanticRefs.add(value.ref);
|
|
204
|
+
});
|
|
205
|
+
for (const ref of semanticRefs) {
|
|
206
|
+
// follow chain until resolves to non-ref or detect cycle
|
|
207
|
+
const visited = new Set();
|
|
208
|
+
let current = ref;
|
|
209
|
+
const path = [];
|
|
210
|
+
while (true) {
|
|
211
|
+
if (visited.has(current)) {
|
|
212
|
+
const cycleStart = path.indexOf(current);
|
|
213
|
+
const cycle = path.slice(cycleStart).concat(current);
|
|
214
|
+
throw new AxiomInvariantError('invariant-engine', `Cyclic token reference chain detected starting from semantic ref ${ref}: ${cycle.join(' -> ')}`, { ref, cycle });
|
|
215
|
+
}
|
|
216
|
+
visited.add(current);
|
|
217
|
+
path.push(current);
|
|
218
|
+
const target = primMap.get(current);
|
|
219
|
+
if (target === undefined)
|
|
220
|
+
break; // unresolved handled elsewhere
|
|
221
|
+
if (isTokenReference(target)) {
|
|
222
|
+
current = target.ref;
|
|
223
|
+
continue;
|
|
224
|
+
}
|
|
225
|
+
break;
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
}
|
|
229
|
+
// 5. assertAllReferencesResolvable
|
|
230
|
+
export function assertAllReferencesResolvable(semantic, primitives) {
|
|
231
|
+
const primMap = collectPrimitiveMap(primitives);
|
|
232
|
+
const missing = [];
|
|
233
|
+
traverseSemantic(semantic, (value, path) => {
|
|
234
|
+
if (isTokenReference(value)) {
|
|
235
|
+
const ref = value.ref;
|
|
236
|
+
if (!primMap.has(ref))
|
|
237
|
+
missing.push(`semantic.${joinPath(path)} -> ${ref}`);
|
|
238
|
+
}
|
|
239
|
+
});
|
|
240
|
+
if (missing.length) {
|
|
241
|
+
throw new AxiomInvariantError('invariant-engine', `Unresolvable TokenReferences found:\n${missing.join('\n')}`, { missing });
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
// Shallow/resolved checks for runtime
|
|
245
|
+
export function assertAllReferencesResolvableShallow(semantic, primitives) {
|
|
246
|
+
const missing = [];
|
|
247
|
+
// shallow-check references in primary namespaces including surface/elevation/effect
|
|
248
|
+
const checkNs = (nsObj) => {
|
|
249
|
+
if (nsObj === undefined)
|
|
250
|
+
return;
|
|
251
|
+
traverseSemantic(nsObj, (value, path) => {
|
|
252
|
+
if (isTokenReference(value)) {
|
|
253
|
+
const ref = String(value.ref);
|
|
254
|
+
const parts = ref.split('.');
|
|
255
|
+
let node = primitives;
|
|
256
|
+
for (let i = 0; i < parts.length; i++) {
|
|
257
|
+
const p = parts[i];
|
|
258
|
+
if (node && typeof node === 'object' && p in node) {
|
|
259
|
+
node = node[p];
|
|
260
|
+
}
|
|
261
|
+
else {
|
|
262
|
+
missing.push(`semantic.${joinPath(path)} -> ${ref}`);
|
|
263
|
+
return;
|
|
264
|
+
}
|
|
265
|
+
}
|
|
266
|
+
if (node === undefined)
|
|
267
|
+
missing.push(`semantic.${joinPath(path)} -> ${ref}`);
|
|
268
|
+
}
|
|
269
|
+
});
|
|
270
|
+
};
|
|
271
|
+
checkNs(semantic.surface);
|
|
272
|
+
checkNs(semantic.elevation);
|
|
273
|
+
checkNs(semantic.typography);
|
|
274
|
+
checkNs(semantic.state);
|
|
275
|
+
checkNs(semantic.effect);
|
|
276
|
+
// fallback full traversal to catch any other namespaces
|
|
277
|
+
traverseSemantic(semantic, (value, path) => {
|
|
278
|
+
if (isTokenReference(value)) {
|
|
279
|
+
const ref = value.ref;
|
|
280
|
+
const parts = ref.split('.');
|
|
281
|
+
// walk primitives object shallowly to ensure path exists
|
|
282
|
+
let node = primitives;
|
|
283
|
+
for (let i = 0; i < parts.length; i++) {
|
|
284
|
+
const p = parts[i];
|
|
285
|
+
if (node && typeof node === 'object' && p in node) {
|
|
286
|
+
node = node[p];
|
|
287
|
+
}
|
|
288
|
+
else {
|
|
289
|
+
missing.push(`semantic.${joinPath(path)} -> ${ref}`);
|
|
290
|
+
break;
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// if we walked to the end and found undefined/null, treat as missing
|
|
294
|
+
if (node === undefined)
|
|
295
|
+
missing.push(`semantic.${joinPath(path)} -> ${ref}`);
|
|
296
|
+
}
|
|
297
|
+
});
|
|
298
|
+
if (missing.length) {
|
|
299
|
+
throw new AxiomInvariantError('invariant-engine', `Unresolvable TokenReferences found (shallow):\n${missing.join('\n')}`, { missing });
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
// Deep resolver retained for CI and callers expecting full primitive map behavior
|
|
303
|
+
export function assertAllReferencesResolvableDeep(semantic, primitives) {
|
|
304
|
+
// original behavior: build primitive map and check existence of exact ref keys
|
|
305
|
+
const primMap = collectPrimitiveMap(primitives);
|
|
306
|
+
const missing = [];
|
|
307
|
+
traverseSemantic(semantic, (value, path) => {
|
|
308
|
+
if (isTokenReference(value)) {
|
|
309
|
+
const ref = value.ref;
|
|
310
|
+
if (!primMap.has(ref))
|
|
311
|
+
missing.push(`semantic.${joinPath(path)} -> ${ref}`);
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
if (missing.length) {
|
|
315
|
+
throw new AxiomInvariantError('invariant-engine', `Unresolvable TokenReferences found (deep):\n${missing.join('\n')}`, { missing });
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
// 3. assertAllAxesRegistered
|
|
319
|
+
export function assertAllAxesRegistered(expectedAxes, registry) {
|
|
320
|
+
const missing = expectedAxes.filter(a => !(a in registry));
|
|
321
|
+
if (missing.length) {
|
|
322
|
+
throw new AxiomInvariantError('invariant-engine', `AxisRegistry missing handlers for axes: ${missing.join(', ')}`, { missing });
|
|
323
|
+
}
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Runtime invariants:
|
|
327
|
+
* Must remain O(n).
|
|
328
|
+
* Safe for theme switching at runtime.
|
|
329
|
+
*/
|
|
330
|
+
export function runRuntimeInvariants(semantic, primitives, expectedAxes, registry) {
|
|
331
|
+
// Single-pass runtime validation combining primitive leak, raw-hex detection,
|
|
332
|
+
// and shallow reference resolvability in one DFS to remain O(n).
|
|
333
|
+
validateRuntimeSemantic(semantic, primitives);
|
|
334
|
+
// Axis existence check is cheap
|
|
335
|
+
assertAllAxesRegistered(expectedAxes, registry);
|
|
336
|
+
}
|
|
337
|
+
/**
|
|
338
|
+
* Runtime single-pass semantic validator.
|
|
339
|
+
* Visits each leaf exactly once and enforces:
|
|
340
|
+
* - leaf must be a TokenReference
|
|
341
|
+
* - raw hex string leaves are rejected
|
|
342
|
+
* - token references are shallowly resolvable against `primitives`
|
|
343
|
+
*
|
|
344
|
+
* Complexity: O(n) where n is number of nodes in `semantic` (plus shallow path checks).
|
|
345
|
+
*/
|
|
346
|
+
export function validateRuntimeSemantic(semantic, primitives) {
|
|
347
|
+
// Precompute primitive key set once for O(n) shallow lookups (cached)
|
|
348
|
+
const primSet = getPrimitiveKeySet(primitives);
|
|
349
|
+
traverseSemantic(semantic, (value, path) => {
|
|
350
|
+
if (value === undefined || value === null)
|
|
351
|
+
return; // allow empty nodes
|
|
352
|
+
if (isTokenReference(value)) {
|
|
353
|
+
// shallow resolvability check using precomputed map
|
|
354
|
+
const ref = value.ref;
|
|
355
|
+
if (!primSet.has(ref)) {
|
|
356
|
+
throw new AxiomInvariantError('invariant-engine', `Unresolvable TokenReference found: semantic.${joinPath(path)} -> ${ref}`, { path: joinPath(path), ref });
|
|
357
|
+
}
|
|
358
|
+
return;
|
|
359
|
+
}
|
|
360
|
+
if (typeof value === 'string') {
|
|
361
|
+
if (HEX_RE.test(value)) {
|
|
362
|
+
throw new AxiomInvariantError('invariant-engine', `Raw hex value detected at semantic.${joinPath(path)} — found \"${value}\". Use TokenReference instead.`, { path: joinPath(path), value });
|
|
363
|
+
}
|
|
364
|
+
// any other string leaf is considered a primitive leak
|
|
365
|
+
throw new AxiomInvariantError('invariant-engine', `Primitive leak detected at semantic.${joinPath(path)} — found primitive value (${String(value)}). Leaves must be TokenReference objects.`, { path: joinPath(path) });
|
|
366
|
+
}
|
|
367
|
+
if (typeof value === 'number' || typeof value === 'boolean') {
|
|
368
|
+
throw new AxiomInvariantError('invariant-engine', `Primitive leak detected at semantic.${joinPath(path)} — found primitive value (${String(value)}). Leaves must be TokenReference objects.`, { path: joinPath(path) });
|
|
369
|
+
}
|
|
370
|
+
// other unexpected types are caught by original checks in full traversal
|
|
371
|
+
});
|
|
372
|
+
}
|
|
373
|
+
// CI-only expensive check: detect deep chains and very large resolution depth
|
|
374
|
+
function assertResolutionDepthWithinLimit(semantic, primitives, maxDepth = 1000) {
|
|
375
|
+
const primMap = collectPrimitiveMap(primitives);
|
|
376
|
+
// follow reference chains starting from every primitive and semantic ref
|
|
377
|
+
const startPoints = new Set();
|
|
378
|
+
for (const k of primMap.keys())
|
|
379
|
+
startPoints.add(k);
|
|
380
|
+
traverseSemantic(semantic, (value) => {
|
|
381
|
+
if (isTokenReference(value))
|
|
382
|
+
startPoints.add(value.ref);
|
|
383
|
+
});
|
|
384
|
+
const visitedGlobal = new Set();
|
|
385
|
+
function depthVisit(node, depth, stack) {
|
|
386
|
+
if (depth > maxDepth) {
|
|
387
|
+
throw new AxiomInvariantError('invariant-engine', `Resolution depth exceeded ${maxDepth} while following chain: ${stack.concat(node).join(' -> ')}`, { maxDepth, stack });
|
|
388
|
+
}
|
|
389
|
+
if (visitedGlobal.has(node))
|
|
390
|
+
return;
|
|
391
|
+
visitedGlobal.add(node);
|
|
392
|
+
const target = primMap.get(node);
|
|
393
|
+
if (!target)
|
|
394
|
+
return; // unresolved handled elsewhere
|
|
395
|
+
if (isTokenReference(target)) {
|
|
396
|
+
depthVisit(target.ref, depth + 1, stack.concat(node));
|
|
397
|
+
}
|
|
398
|
+
}
|
|
399
|
+
for (const s of startPoints) {
|
|
400
|
+
depthVisit(s, 0, []);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
// CI-only: run a more exhaustive cycle detection across the flattened graph.
|
|
404
|
+
function assertNoDeepGraphCycles(semantic, primitives) {
|
|
405
|
+
const primMap = collectPrimitiveMap(primitives);
|
|
406
|
+
const edges = new Map();
|
|
407
|
+
// Build edges for primitives where value is a reference
|
|
408
|
+
for (const [k, v] of primMap.entries()) {
|
|
409
|
+
if (isTokenReference(v)) {
|
|
410
|
+
edges.set(k, [v.ref]);
|
|
411
|
+
}
|
|
412
|
+
else {
|
|
413
|
+
edges.set(k, []);
|
|
414
|
+
}
|
|
415
|
+
}
|
|
416
|
+
// Standard DFS cycle detection across all nodes
|
|
417
|
+
const temp = new Set();
|
|
418
|
+
const perm = new Set();
|
|
419
|
+
function visit(n, stack) {
|
|
420
|
+
if (perm.has(n))
|
|
421
|
+
return;
|
|
422
|
+
if (temp.has(n)) {
|
|
423
|
+
const cycleStart = stack.indexOf(n);
|
|
424
|
+
const cycle = stack.slice(cycleStart).concat(n);
|
|
425
|
+
throw new AxiomInvariantError('invariant-engine', `CI Deep cycle detected: ${cycle.join(' -> ')}`, { cycle });
|
|
426
|
+
}
|
|
427
|
+
temp.add(n);
|
|
428
|
+
stack.push(n);
|
|
429
|
+
const nbrs = edges.get(n) || [];
|
|
430
|
+
for (const m of nbrs) {
|
|
431
|
+
visit(m, stack);
|
|
432
|
+
}
|
|
433
|
+
stack.pop();
|
|
434
|
+
temp.delete(n);
|
|
435
|
+
perm.add(n);
|
|
436
|
+
}
|
|
437
|
+
for (const n of edges.keys())
|
|
438
|
+
visit(n, []);
|
|
439
|
+
}
|
|
440
|
+
// CI-only: ensure state namespace contains required roles and no unexpected keys
|
|
441
|
+
export function assertStateExhaustive(semantic) {
|
|
442
|
+
const st = semantic?.state;
|
|
443
|
+
if (!isPlainObject(st)) {
|
|
444
|
+
throw new AxiomInvariantError('invariant-engine', 'Missing or invalid state namespace in semantic tokens', { path: 'state' });
|
|
445
|
+
}
|
|
446
|
+
const allowedTop = new Set(['hover', 'active', 'focus', 'disabled', 'selected']);
|
|
447
|
+
for (const k of Object.keys(st)) {
|
|
448
|
+
if (!allowedTop.has(k)) {
|
|
449
|
+
throw new AxiomInvariantError('invariant-engine', `Unexpected state namespace key: state.${k}`, { path: `state.${k}` });
|
|
450
|
+
}
|
|
451
|
+
}
|
|
452
|
+
// Expected structure
|
|
453
|
+
const expected = {
|
|
454
|
+
hover: ['overlay'],
|
|
455
|
+
active: ['overlay', 'elevation'],
|
|
456
|
+
focus: ['border'],
|
|
457
|
+
disabled: ['opacity'],
|
|
458
|
+
selected: ['overlay', 'border']
|
|
459
|
+
};
|
|
460
|
+
for (const [section, subs] of Object.entries(expected)) {
|
|
461
|
+
if (!(section in st)) {
|
|
462
|
+
throw new AxiomInvariantError('invariant-engine', `Missing state.${section} namespace`, { path: `state.${section}` });
|
|
463
|
+
}
|
|
464
|
+
const node = st[section];
|
|
465
|
+
if (!isPlainObject(node)) {
|
|
466
|
+
throw new AxiomInvariantError('invariant-engine', `state.${section} must be an object`, { path: `state.${section}` });
|
|
467
|
+
}
|
|
468
|
+
const foundKeys = Object.keys(node);
|
|
469
|
+
for (const want of subs) {
|
|
470
|
+
if (!(want in node)) {
|
|
471
|
+
throw new AxiomInvariantError('invariant-engine', `Missing state.${section}.${want}`, { path: `state.${section}.${want}` });
|
|
472
|
+
}
|
|
473
|
+
}
|
|
474
|
+
for (const found of foundKeys) {
|
|
475
|
+
if (!subs.includes(found)) {
|
|
476
|
+
throw new AxiomInvariantError('invariant-engine', `Unexpected state role found: state.${section}.${found}`, { path: `state.${section}.${found}` });
|
|
477
|
+
}
|
|
478
|
+
}
|
|
479
|
+
}
|
|
480
|
+
}
|
|
481
|
+
// CI-only: ensure typography namespace contains required roles and no unexpected keys
|
|
482
|
+
export function assertTypographyExhaustive(semantic) {
|
|
483
|
+
const ty = semantic?.typography;
|
|
484
|
+
if (!isPlainObject(ty)) {
|
|
485
|
+
throw new AxiomInvariantError('invariant-engine', 'Missing or invalid typography namespace in semantic tokens', { path: 'typography' });
|
|
486
|
+
}
|
|
487
|
+
const allowedTop = new Set(['display', 'heading', 'title', 'body', 'label', 'caption', 'overline']);
|
|
488
|
+
// no unknown top-level keys under typography
|
|
489
|
+
for (const k of Object.keys(ty)) {
|
|
490
|
+
if (!allowedTop.has(k)) {
|
|
491
|
+
throw new AxiomInvariantError('invariant-engine', `Unexpected typography namespace key: typography.${k}`, { path: `typography.${k}` });
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
const expected = {
|
|
495
|
+
display: ['xl', 'lg'],
|
|
496
|
+
heading: ['h1', 'h2', 'h3', 'h4'],
|
|
497
|
+
title: ['lg', 'md', 'sm'],
|
|
498
|
+
body: ['lg', 'md', 'sm'],
|
|
499
|
+
label: ['lg', 'md', 'sm'],
|
|
500
|
+
caption: null,
|
|
501
|
+
overline: null
|
|
502
|
+
};
|
|
503
|
+
for (const [section, subs] of Object.entries(expected)) {
|
|
504
|
+
if (!(section in ty)) {
|
|
505
|
+
throw new AxiomInvariantError('invariant-engine', `Missing typography.${section} namespace`, { path: `typography.${section}` });
|
|
506
|
+
}
|
|
507
|
+
const node = ty[section];
|
|
508
|
+
if (subs === null) {
|
|
509
|
+
// caption/overline should exist and be an object (leaf role definition)
|
|
510
|
+
if (!isPlainObject(node)) {
|
|
511
|
+
throw new AxiomInvariantError('invariant-engine', `Typography.${section} must be an object role definition`, { path: `typography.${section}` });
|
|
512
|
+
}
|
|
513
|
+
continue;
|
|
514
|
+
}
|
|
515
|
+
if (!isPlainObject(node)) {
|
|
516
|
+
throw new AxiomInvariantError('invariant-engine', `Typography.${section} must be an object containing roles`, { path: `typography.${section}` });
|
|
517
|
+
}
|
|
518
|
+
const foundKeys = Object.keys(node);
|
|
519
|
+
// ensure all expected roles present
|
|
520
|
+
for (const want of subs) {
|
|
521
|
+
if (!(want in node)) {
|
|
522
|
+
throw new AxiomInvariantError('invariant-engine', `Missing typography.${section}.${want}`, { path: `typography.${section}.${want}` });
|
|
523
|
+
}
|
|
524
|
+
}
|
|
525
|
+
// reject unexpected role keys
|
|
526
|
+
for (const found of foundKeys) {
|
|
527
|
+
if (!subs.includes(found)) {
|
|
528
|
+
throw new AxiomInvariantError('invariant-engine', `Unexpected typography role found: typography.${section}.${found}`, { path: `typography.${section}.${found}` });
|
|
529
|
+
}
|
|
530
|
+
}
|
|
531
|
+
}
|
|
532
|
+
}
|
|
533
|
+
/**
|
|
534
|
+
* validateTheme runs configured invariants on the provided token graphs.
|
|
535
|
+
*
|
|
536
|
+
* Options:
|
|
537
|
+
* - `level` (default: `InvariantLevel.Runtime`) — selects check set:
|
|
538
|
+
* - `Compile`: documented-only; no runtime checks performed here. Intended to indicate TypeScript-enforced rules.
|
|
539
|
+
* - `Runtime`: lightweight checks suitable for production (no deep graph analysis).
|
|
540
|
+
* - `CI`: includes expensive deep-graph and performance checks intended for CI.
|
|
541
|
+
*/
|
|
542
|
+
export function validateTheme(semantic, primitives, expectedAxes, registry, options) {
|
|
543
|
+
const level = options?.level ?? 'runtime';
|
|
544
|
+
// Route runtime-safe checks through a single helper that guarantees O(n) behavior.
|
|
545
|
+
if (level === 'runtime' || level === 'ci') {
|
|
546
|
+
runRuntimeInvariants(semantic, primitives, expectedAxes, registry);
|
|
547
|
+
}
|
|
548
|
+
// CI-only invariants (expensive, deep graph analysis)
|
|
549
|
+
if (level === 'ci') {
|
|
550
|
+
runCIInvariants(semantic, primitives);
|
|
551
|
+
}
|
|
552
|
+
}
|
|
553
|
+
/**
|
|
554
|
+
* CI invariants:
|
|
555
|
+
* Exhaustive validation.
|
|
556
|
+
* May be O(n + e).
|
|
557
|
+
* Intended for build/CI enforcement.
|
|
558
|
+
*/
|
|
559
|
+
export function runCIInvariants(semantic, primitives) {
|
|
560
|
+
// CI-only structural checks for specific namespaces
|
|
561
|
+
// Ensure typography namespace contains required roles and no unknown keys
|
|
562
|
+
assertTypographyExhaustive(semantic);
|
|
563
|
+
// Ensure state namespace contains required roles and no unknown keys
|
|
564
|
+
assertStateExhaustive(semantic);
|
|
565
|
+
// 1) Re-run cyclic checks that inspect primitive graphs and semantic->primitive chains
|
|
566
|
+
assertNoCyclicReferences(semantic, primitives);
|
|
567
|
+
// 2) Deep graph cycle detection across the flattened primitive graph (expensive)
|
|
568
|
+
assertNoDeepGraphCycles(semantic, primitives);
|
|
569
|
+
// 3) Performance guard: detect extremely long resolution chains
|
|
570
|
+
assertResolutionDepthWithinLimit(semantic, primitives, 1000);
|
|
571
|
+
// 4) Deep reference resolvability check
|
|
572
|
+
assertAllReferencesResolvableDeep(semantic, primitives);
|
|
573
|
+
}
|
|
574
|
+
// Example usage (no runtime resolution):
|
|
575
|
+
/*
|
|
576
|
+
import { validateTheme } from './invariants';
|
|
577
|
+
import type { SemanticTokens, PrimitiveTokens } from '@axiom-core/token-schema';
|
|
578
|
+
import type { ThemeAxis } from '@axiom-core/core-engine';
|
|
579
|
+
|
|
580
|
+
const primitives: PrimitiveTokens = { color: { gray100: '#f7f7f7' }, spacing: {}, radius: {}, typography: {} };
|
|
581
|
+
const semantic: SemanticTokens = {
|
|
582
|
+
surface: { card: { background: { ref: 'color.gray100' } } },
|
|
583
|
+
content: {}, border: {}, overlay: {}, elevation: {}, shadow: {}
|
|
584
|
+
};
|
|
585
|
+
const axes: ThemeAxis[] = ['mode','brand','density','contrast','material'];
|
|
586
|
+
const registry = { mode: {}, brand: {}, density: {}, contrast: {}, material: {} };
|
|
587
|
+
validateTheme(semantic, primitives, axes, registry);
|
|
588
|
+
*/
|
|
589
|
+
//# sourceMappingURL=invariants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invariants.js","sourceRoot":"","sources":["../src/invariants.ts"],"names":[],"mappings":"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"}
|
package/package.json
ADDED
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@axiom-core/invariant-engine",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Axiom Core — runtime invariant validation engine",
|
|
5
|
+
"private": false,
|
|
6
|
+
"type": "module",
|
|
7
|
+
"main": "./dist/index.js",
|
|
8
|
+
"module": "./dist/index.js",
|
|
9
|
+
"types": "./dist/index.d.ts",
|
|
10
|
+
"exports": {
|
|
11
|
+
".": {
|
|
12
|
+
"types": "./dist/index.d.ts",
|
|
13
|
+
"import": "./dist/index.js"
|
|
14
|
+
}
|
|
15
|
+
},
|
|
16
|
+
"files": [
|
|
17
|
+
"dist"
|
|
18
|
+
],
|
|
19
|
+
"sideEffects": false,
|
|
20
|
+
"dependencies": {
|
|
21
|
+
"@axiom-core/token-schema": "0.1.0",
|
|
22
|
+
"@axiom-core/core-engine": "0.1.0"
|
|
23
|
+
},
|
|
24
|
+
"license": "MIT",
|
|
25
|
+
"repository": {
|
|
26
|
+
"type": "git",
|
|
27
|
+
"url": "https://github.com/Haneefe/Axiom-Core.git"
|
|
28
|
+
},
|
|
29
|
+
"homepage": "https://github.com/Haneefe/Axiom-Core",
|
|
30
|
+
"bugs": {
|
|
31
|
+
"url": "https://github.com/Haneefe/Axiom-Core/issues"
|
|
32
|
+
},
|
|
33
|
+
"publishConfig": {
|
|
34
|
+
"access": "public"
|
|
35
|
+
},
|
|
36
|
+
"scripts": {
|
|
37
|
+
"build": "tsc -b",
|
|
38
|
+
"clean": "rimraf dist",
|
|
39
|
+
"dev": "tsc -w -p tsconfig.json"
|
|
40
|
+
}
|
|
41
|
+
}
|