@inventarch/language 0.0.0-stage → 1.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/LANGUAGE.md +56 -0
- package/LICENSE +202 -0
- package/NOTICE +4 -0
- package/README.md +33 -2
- package/SPEC.md +225 -0
- package/dist/ast.d.ts +114 -0
- package/dist/ast.d.ts.map +1 -0
- package/dist/ast.js +2 -0
- package/dist/ast.js.map +1 -0
- package/dist/compile/compile.d.ts +82 -0
- package/dist/compile/compile.d.ts.map +1 -0
- package/dist/compile/compile.js +249 -0
- package/dist/compile/compile.js.map +1 -0
- package/dist/compile/index.d.ts +6 -0
- package/dist/compile/index.d.ts.map +1 -0
- package/dist/compile/index.js +4 -0
- package/dist/compile/index.js.map +1 -0
- package/dist/compile/spellings.d.ts +7 -0
- package/dist/compile/spellings.d.ts.map +1 -0
- package/dist/compile/spellings.js +47 -0
- package/dist/compile/spellings.js.map +1 -0
- package/dist/compile/values.d.ts +32 -0
- package/dist/compile/values.d.ts.map +1 -0
- package/dist/compile/values.js +48 -0
- package/dist/compile/values.js.map +1 -0
- package/dist/diagnostics.d.ts +22 -0
- package/dist/diagnostics.d.ts.map +1 -0
- package/dist/diagnostics.js +71 -0
- package/dist/diagnostics.js.map +1 -0
- package/dist/editor/index.d.ts +49 -0
- package/dist/editor/index.d.ts.map +1 -0
- package/dist/editor/index.js +155 -0
- package/dist/editor/index.js.map +1 -0
- package/dist/fold.d.ts +8 -0
- package/dist/fold.d.ts.map +1 -0
- package/dist/fold.js +26 -0
- package/dist/fold.js.map +1 -0
- package/dist/formatter.d.ts +10 -0
- package/dist/formatter.d.ts.map +1 -0
- package/dist/formatter.js +108 -0
- package/dist/formatter.js.map +1 -0
- package/dist/identity.d.ts +31 -0
- package/dist/identity.d.ts.map +1 -0
- package/dist/identity.js +64 -0
- package/dist/identity.js.map +1 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +22 -0
- package/dist/index.js.map +1 -0
- package/dist/kernel.generated.d.ts +99 -0
- package/dist/kernel.generated.d.ts.map +1 -0
- package/dist/kernel.generated.js +422 -0
- package/dist/kernel.generated.js.map +1 -0
- package/dist/parser/index.d.ts +5 -0
- package/dist/parser/index.d.ts.map +1 -0
- package/dist/parser/index.js +3 -0
- package/dist/parser/index.js.map +1 -0
- package/dist/parser/parser.d.ts +11 -0
- package/dist/parser/parser.d.ts.map +1 -0
- package/dist/parser/parser.js +297 -0
- package/dist/parser/parser.js.map +1 -0
- package/dist/parser/values.d.ts +24 -0
- package/dist/parser/values.d.ts.map +1 -0
- package/dist/parser/values.js +284 -0
- package/dist/parser/values.js.map +1 -0
- package/dist/paths.d.ts +6 -0
- package/dist/paths.d.ts.map +1 -0
- package/dist/paths.js +21 -0
- package/dist/paths.js.map +1 -0
- package/dist/references.d.ts +15 -0
- package/dist/references.d.ts.map +1 -0
- package/dist/references.js +40 -0
- package/dist/references.js.map +1 -0
- package/dist/registry/consent.d.ts +11 -0
- package/dist/registry/consent.d.ts.map +1 -0
- package/dist/registry/consent.js +31 -0
- package/dist/registry/consent.js.map +1 -0
- package/dist/registry/extract.d.ts +11 -0
- package/dist/registry/extract.d.ts.map +1 -0
- package/dist/registry/extract.js +275 -0
- package/dist/registry/extract.js.map +1 -0
- package/dist/registry/fields.d.ts +14 -0
- package/dist/registry/fields.d.ts.map +1 -0
- package/dist/registry/fields.js +30 -0
- package/dist/registry/fields.js.map +1 -0
- package/dist/registry/floor.d.ts +17 -0
- package/dist/registry/floor.d.ts.map +1 -0
- package/dist/registry/floor.js +42 -0
- package/dist/registry/floor.js.map +1 -0
- package/dist/registry/index.d.ts +19 -0
- package/dist/registry/index.d.ts.map +1 -0
- package/dist/registry/index.js +80 -0
- package/dist/registry/index.js.map +1 -0
- package/dist/registry/merge.d.ts +32 -0
- package/dist/registry/merge.d.ts.map +1 -0
- package/dist/registry/merge.js +84 -0
- package/dist/registry/merge.js.map +1 -0
- package/dist/registry/order.d.ts +12 -0
- package/dist/registry/order.d.ts.map +1 -0
- package/dist/registry/order.js +134 -0
- package/dist/registry/order.js.map +1 -0
- package/dist/registry/records.d.ts +14 -0
- package/dist/registry/records.d.ts.map +1 -0
- package/dist/registry/records.js +64 -0
- package/dist/registry/records.js.map +1 -0
- package/dist/registry/schemas.d.ts +20 -0
- package/dist/registry/schemas.d.ts.map +1 -0
- package/dist/registry/schemas.js +282 -0
- package/dist/registry/schemas.js.map +1 -0
- package/dist/registry/types.d.ts +130 -0
- package/dist/registry/types.d.ts.map +1 -0
- package/dist/registry/types.js +2 -0
- package/dist/registry/types.js.map +1 -0
- package/dist/scanner/index.d.ts +16 -0
- package/dist/scanner/index.d.ts.map +1 -0
- package/dist/scanner/index.js +78 -0
- package/dist/scanner/index.js.map +1 -0
- package/dist/scanner/lines.d.ts +46 -0
- package/dist/scanner/lines.d.ts.map +1 -0
- package/dist/scanner/lines.js +210 -0
- package/dist/scanner/lines.js.map +1 -0
- package/dist/scanner/tokenize.d.ts +9 -0
- package/dist/scanner/tokenize.d.ts.map +1 -0
- package/dist/scanner/tokenize.js +125 -0
- package/dist/scanner/tokenize.js.map +1 -0
- package/dist/scanner/tokens.d.ts +52 -0
- package/dist/scanner/tokens.d.ts.map +1 -0
- package/dist/scanner/tokens.js +2 -0
- package/dist/scanner/tokens.js.map +1 -0
- package/dist/semantic/cases.d.ts +12 -0
- package/dist/semantic/cases.d.ts.map +1 -0
- package/dist/semantic/cases.js +81 -0
- package/dist/semantic/cases.js.map +1 -0
- package/dist/semantic/cells.d.ts +9 -0
- package/dist/semantic/cells.d.ts.map +1 -0
- package/dist/semantic/cells.js +120 -0
- package/dist/semantic/cells.js.map +1 -0
- package/dist/semantic/conditions.d.ts +22 -0
- package/dist/semantic/conditions.d.ts.map +1 -0
- package/dist/semantic/conditions.js +54 -0
- package/dist/semantic/conditions.js.map +1 -0
- package/dist/semantic/contracts.d.ts +11 -0
- package/dist/semantic/contracts.d.ts.map +1 -0
- package/dist/semantic/contracts.js +75 -0
- package/dist/semantic/contracts.js.map +1 -0
- package/dist/semantic/edges.d.ts +19 -0
- package/dist/semantic/edges.d.ts.map +1 -0
- package/dist/semantic/edges.js +129 -0
- package/dist/semantic/edges.js.map +1 -0
- package/dist/semantic/placement.d.ts +6 -0
- package/dist/semantic/placement.d.ts.map +1 -0
- package/dist/semantic/placement.js +47 -0
- package/dist/semantic/placement.js.map +1 -0
- package/dist/semantic/requirements.d.ts +14 -0
- package/dist/semantic/requirements.d.ts.map +1 -0
- package/dist/semantic/requirements.js +32 -0
- package/dist/semantic/requirements.js.map +1 -0
- package/dist/semantic/resolve.d.ts +23 -0
- package/dist/semantic/resolve.d.ts.map +1 -0
- package/dist/semantic/resolve.js +62 -0
- package/dist/semantic/resolve.js.map +1 -0
- package/dist/semantic/selectors.d.ts +10 -0
- package/dist/semantic/selectors.d.ts.map +1 -0
- package/dist/semantic/selectors.js +33 -0
- package/dist/semantic/selectors.js.map +1 -0
- package/dist/semantic/types.d.ts +56 -0
- package/dist/semantic/types.d.ts.map +1 -0
- package/dist/semantic/types.js +11 -0
- package/dist/semantic/types.js.map +1 -0
- package/dist/semantic/variants.d.ts +10 -0
- package/dist/semantic/variants.d.ts.map +1 -0
- package/dist/semantic/variants.js +63 -0
- package/dist/semantic/variants.js.map +1 -0
- package/dist/semantic/vocabulary.d.ts +12 -0
- package/dist/semantic/vocabulary.d.ts.map +1 -0
- package/dist/semantic/vocabulary.js +33 -0
- package/dist/semantic/vocabulary.js.map +1 -0
- package/dist/taxonomy.d.ts +51 -0
- package/dist/taxonomy.d.ts.map +1 -0
- package/dist/taxonomy.js +42 -0
- package/dist/taxonomy.js.map +1 -0
- package/package.json +221 -3
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { CompiledRecord } from '../compile/compile.js';
|
|
2
|
+
import type { FrozenRegistry } from '../registry/types.js';
|
|
3
|
+
import type { EdgeReference } from './types.js';
|
|
4
|
+
/** Identity discovery can resolve before the record's semantic arrays have been finalized. */
|
|
5
|
+
export type ResolutionCandidate = Pick<CompiledRecord, 'identity' | 'system' | 'kind' | 'facet' | 'name' | 'discriminator' | 'source'>;
|
|
6
|
+
export type Resolution<T extends ResolutionCandidate = ResolutionCandidate> = ({
|
|
7
|
+
readonly kind: 'missing';
|
|
8
|
+
} | {
|
|
9
|
+
readonly kind: 'resolved';
|
|
10
|
+
readonly target: T;
|
|
11
|
+
} | {
|
|
12
|
+
readonly kind: 'ambiguous';
|
|
13
|
+
readonly candidates: readonly T[];
|
|
14
|
+
}) & {
|
|
15
|
+
readonly fragment?: string;
|
|
16
|
+
};
|
|
17
|
+
/** Caller contract, not a source diagnostic. Deliberately does not select bands or deduplicate. */
|
|
18
|
+
export declare function validatePool(registry: FrozenRegistry, pool: readonly ResolutionCandidate[], excludedPath?: string): void;
|
|
19
|
+
/** Exact cardinality matching. Fragments are addresses whose existence belongs to compliance. */
|
|
20
|
+
export declare function resolveTarget<T extends ResolutionCandidate>(reference: EdgeReference, registry: FrozenRegistry, pool: readonly T[]): Resolution<T>;
|
|
21
|
+
/** Per-compilation index. Validate the complete pool once, preserving duplicates and exact cardinality. */
|
|
22
|
+
export declare function indexedResolver<T extends ResolutionCandidate>(registry: FrozenRegistry, pool: readonly T[]): (reference: EdgeReference) => Resolution<T>;
|
|
23
|
+
//# sourceMappingURL=resolve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/semantic/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAG5D,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,8FAA8F;AAC9F,MAAM,MAAM,mBAAmB,GAAG,IAAI,CACpC,cAAc,EACd,UAAU,GAAG,QAAQ,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,eAAe,GAAG,QAAQ,CAC/E,CAAC;AACF,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,mBAAmB,GAAG,mBAAmB,IAAI,CAC1E;IAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,CAAA;CAAE,GAC5B;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAA;CAAE,GACjD;IAAE,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC;IAAC,QAAQ,CAAC,UAAU,EAAE,SAAS,CAAC,EAAE,CAAA;CAAE,CACpE,GAAG;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEnC,mGAAmG;AACnG,wBAAgB,YAAY,CAC1B,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,SAAS,mBAAmB,EAAE,EACpC,YAAY,CAAC,EAAE,MAAM,GACpB,IAAI,CAmBN;AAED,iGAAiG;AACjG,wBAAgB,aAAa,CAAC,CAAC,SAAS,mBAAmB,EACzD,SAAS,EAAE,aAAa,EACxB,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,SAAS,CAAC,EAAE,GACjB,UAAU,CAAC,CAAC,CAAC,CAyBf;AAMD,2GAA2G;AAC3G,wBAAgB,eAAe,CAAC,CAAC,SAAS,mBAAmB,EAC3D,QAAQ,EAAE,cAAc,EACxB,IAAI,EAAE,SAAS,CAAC,EAAE,GACjB,CAAC,SAAS,EAAE,aAAa,KAAK,UAAU,CAAC,CAAC,CAAC,CAmB7C"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import { renderIdentity } from '../identity.js';
|
|
2
|
+
import { canonicalPath } from '../paths.js';
|
|
3
|
+
/** Caller contract, not a source diagnostic. Deliberately does not select bands or deduplicate. */
|
|
4
|
+
export function validatePool(registry, pool, excludedPath) {
|
|
5
|
+
for (const candidate of pool) {
|
|
6
|
+
const registration = registry.registrations.get(candidate.discriminator);
|
|
7
|
+
if (!registration ||
|
|
8
|
+
registry.blocked.has(candidate.discriminator) ||
|
|
9
|
+
registration.system !== candidate.system ||
|
|
10
|
+
registration.kind !== candidate.kind ||
|
|
11
|
+
!registration.facets.includes(candidate.facet) ||
|
|
12
|
+
!/^[a-z][a-z0-9-]*$/.test(candidate.name) ||
|
|
13
|
+
candidate.identity !== renderIdentity(candidate.system, candidate.kind, candidate.facet, candidate.name)) {
|
|
14
|
+
throw new TypeError(`Candidate ${candidate.identity} at ${candidate.source.path}:${candidate.source.line} is inconsistent with the registry or its identity slots.`);
|
|
15
|
+
}
|
|
16
|
+
if (excludedPath !== undefined && canonicalPath(candidate.source.path) === canonicalPath(excludedPath))
|
|
17
|
+
throw new TypeError(`The external pool must exclude current source ${excludedPath}.`);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
/** Exact cardinality matching. Fragments are addresses whose existence belongs to compliance. */
|
|
21
|
+
export function resolveTarget(reference, registry, pool) {
|
|
22
|
+
validatePool(registry, pool);
|
|
23
|
+
const fragment = reference.fragment === undefined ? {} : { fragment: reference.fragment };
|
|
24
|
+
const registration = reference.kind === 'ref' ? registry.registrations.get(reference.discriminator) : undefined;
|
|
25
|
+
const candidates = pool.filter((candidate) => reference.kind === 'identity'
|
|
26
|
+
? candidate.identity === reference.identity
|
|
27
|
+
: registration !== undefined &&
|
|
28
|
+
candidate.discriminator === reference.discriminator &&
|
|
29
|
+
candidate.system === registration.system &&
|
|
30
|
+
candidate.kind === registration.kind &&
|
|
31
|
+
candidate.facet === registration.facets[0] &&
|
|
32
|
+
candidate.name === reference.name.toLowerCase());
|
|
33
|
+
if (candidates.length === 0)
|
|
34
|
+
return { kind: 'missing', ...fragment };
|
|
35
|
+
if (candidates.length === 1)
|
|
36
|
+
return { kind: 'resolved', target: candidates[0], ...fragment };
|
|
37
|
+
candidates.sort((a, b) => compare(a.identity, b.identity) ||
|
|
38
|
+
compare(a.source.path, b.source.path) ||
|
|
39
|
+
a.source.line - b.source.line ||
|
|
40
|
+
compare(a.discriminator, b.discriminator) ||
|
|
41
|
+
a.source.endLine - b.source.endLine);
|
|
42
|
+
return { kind: 'ambiguous', candidates, ...fragment };
|
|
43
|
+
}
|
|
44
|
+
function compare(a, b) {
|
|
45
|
+
return a < b ? -1 : a > b ? 1 : 0;
|
|
46
|
+
}
|
|
47
|
+
/** Per-compilation index. Validate the complete pool once, preserving duplicates and exact cardinality. */
|
|
48
|
+
export function indexedResolver(registry, pool) {
|
|
49
|
+
validatePool(registry, pool);
|
|
50
|
+
const identities = new Map(), names = new Map();
|
|
51
|
+
for (const candidate of pool) {
|
|
52
|
+
const sameIdentity = identities.get(candidate.identity) ?? [];
|
|
53
|
+
sameIdentity.push(candidate);
|
|
54
|
+
identities.set(candidate.identity, sameIdentity);
|
|
55
|
+
const sameName = names.get(candidate.name) ?? [];
|
|
56
|
+
sameName.push(candidate);
|
|
57
|
+
names.set(candidate.name, sameName);
|
|
58
|
+
}
|
|
59
|
+
return (reference) => resolveTarget(reference, registry, (reference.kind === 'identity' ? identities.get(reference.identity) : names.get(reference.name.toLowerCase())) ??
|
|
60
|
+
[]);
|
|
61
|
+
}
|
|
62
|
+
//# sourceMappingURL=resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/semantic/resolve.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAC;AAe5C,mGAAmG;AACnG,MAAM,UAAU,YAAY,CAC1B,QAAwB,EACxB,IAAoC,EACpC,YAAqB;IAErB,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,YAAY,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC;QACzE,IACE,CAAC,YAAY;YACb,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC;YAC7C,YAAY,CAAC,MAAM,KAAK,SAAS,CAAC,MAAM;YACxC,YAAY,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI;YACpC,CAAC,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,SAAS,CAAC,KAAK,CAAC;YAC9C,CAAC,mBAAmB,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC;YACzC,SAAS,CAAC,QAAQ,KAAK,cAAc,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,IAAI,CAAC,EACxG,CAAC;YACD,MAAM,IAAI,SAAS,CACjB,aAAa,SAAS,CAAC,QAAQ,OAAO,SAAS,CAAC,MAAM,CAAC,IAAI,IAAI,SAAS,CAAC,MAAM,CAAC,IAAI,2DAA2D,CAChJ,CAAC;QACJ,CAAC;QACD,IAAI,YAAY,KAAK,SAAS,IAAI,aAAa,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,aAAa,CAAC,YAAY,CAAC;YACpG,MAAM,IAAI,SAAS,CAAC,iDAAiD,YAAY,GAAG,CAAC,CAAC;IAC1F,CAAC;AACH,CAAC;AAED,iGAAiG;AACjG,MAAM,UAAU,aAAa,CAC3B,SAAwB,EACxB,QAAwB,EACxB,IAAkB;IAElB,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC7B,MAAM,QAAQ,GAAG,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC;IAC1F,MAAM,YAAY,GAAG,SAAS,CAAC,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,SAAS,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAChH,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,EAAE,CAC3C,SAAS,CAAC,IAAI,KAAK,UAAU;QAC3B,CAAC,CAAC,SAAS,CAAC,QAAQ,KAAK,SAAS,CAAC,QAAQ;QAC3C,CAAC,CAAC,YAAY,KAAK,SAAS;YAC1B,SAAS,CAAC,aAAa,KAAK,SAAS,CAAC,aAAa;YACnD,SAAS,CAAC,MAAM,KAAK,YAAY,CAAC,MAAM;YACxC,SAAS,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI;YACpC,SAAS,CAAC,KAAK,KAAK,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC;YAC1C,SAAS,CAAC,IAAI,KAAK,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CACpD,CAAC;IACF,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,SAAS,EAAE,GAAG,QAAQ,EAAE,CAAC;IACrE,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC,CAAE,EAAE,GAAG,QAAQ,EAAE,CAAC;IAC9F,UAAU,CAAC,IAAI,CACb,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CACP,OAAO,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,QAAQ,CAAC;QAC/B,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC;QACrC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,MAAM,CAAC,IAAI;QAC7B,OAAO,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,aAAa,CAAC;QACzC,CAAC,CAAC,MAAM,CAAC,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CACtC,CAAC;IACF,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,GAAG,QAAQ,EAAE,CAAC;AACxD,CAAC;AAED,SAAS,OAAO,CAAC,CAAS,EAAE,CAAS;IACnC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED,2GAA2G;AAC3G,MAAM,UAAU,eAAe,CAC7B,QAAwB,EACxB,IAAkB;IAElB,YAAY,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC7B,MAAM,UAAU,GAAG,IAAI,GAAG,EAAe,EACvC,KAAK,GAAG,IAAI,GAAG,EAAe,CAAC;IACjC,KAAK,MAAM,SAAS,IAAI,IAAI,EAAE,CAAC;QAC7B,MAAM,YAAY,GAAG,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;QAC9D,YAAY,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC7B,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QACjD,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC;QACjD,QAAQ,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzB,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,CAAC,SAAS,EAAE,EAAE,CACnB,aAAa,CACX,SAAS,EACT,QAAQ,EACR,CAAC,SAAS,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,CAAC;QAC5G,EAAE,CACL,CAAC;AACN,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { RecordNode, Span } from '../ast.js';
|
|
2
|
+
import type { Diagnostic } from '../diagnostics.js';
|
|
3
|
+
import type { Selector } from './types.js';
|
|
4
|
+
export interface SelectorsResult {
|
|
5
|
+
readonly selectors: readonly Selector[];
|
|
6
|
+
readonly spans: readonly Span[];
|
|
7
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
8
|
+
}
|
|
9
|
+
export declare function readSelectors(record: RecordNode, path: string): SelectorsResult;
|
|
10
|
+
//# sourceMappingURL=selectors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectors.d.ts","sourceRoot":"","sources":["../../src/semantic/selectors.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAElD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAEpD,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAE3C,MAAM,WAAW,eAAe;IAC9B,QAAQ,CAAC,SAAS,EAAE,SAAS,QAAQ,EAAE,CAAC;IACxC,QAAQ,CAAC,KAAK,EAAE,SAAS,IAAI,EAAE,CAAC;IAChC,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;CAC7C;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,CAoC/E"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { diag } from '../diagnostics.js';
|
|
2
|
+
import { readTerms } from './conditions.js';
|
|
3
|
+
export function readSelectors(record, path) {
|
|
4
|
+
const selectors = [];
|
|
5
|
+
const spans = [];
|
|
6
|
+
const diagnostics = [];
|
|
7
|
+
for (const section of record.sections) {
|
|
8
|
+
if (section.name !== 'activation')
|
|
9
|
+
continue;
|
|
10
|
+
for (const child of section.children) {
|
|
11
|
+
if (child.kind === 'record')
|
|
12
|
+
continue;
|
|
13
|
+
if (child.kind !== 'field' ||
|
|
14
|
+
child.words.length !== 1 ||
|
|
15
|
+
child.words[0] !== 'activate' ||
|
|
16
|
+
child.value.kind !== 'none' ||
|
|
17
|
+
child.when === undefined ||
|
|
18
|
+
child.children.length > 0) {
|
|
19
|
+
diagnostics.push(diag('IA-LANG-SELECTOR-MALFORMED', path, child.span.line, 'Expected activate when <axis> is <value>, with no child block.', { endLine: child.span.endLine }));
|
|
20
|
+
continue;
|
|
21
|
+
}
|
|
22
|
+
const result = readTerms(child.when, 'selector', path, child.span);
|
|
23
|
+
if (!result.ok)
|
|
24
|
+
diagnostics.push(result.diagnostic);
|
|
25
|
+
else {
|
|
26
|
+
selectors.push(result.terms);
|
|
27
|
+
spans.push(child.span);
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
return { selectors, spans, diagnostics };
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=selectors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selectors.js","sourceRoot":"","sources":["../../src/semantic/selectors.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,IAAI,EAAE,MAAM,mBAAmB,CAAC;AAEzC,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAS5C,MAAM,UAAU,aAAa,CAAC,MAAkB,EAAE,IAAY;IAC5D,MAAM,SAAS,GAAe,EAAE,CAAC;IACjC,MAAM,KAAK,GAAW,EAAE,CAAC;IACzB,MAAM,WAAW,GAAiB,EAAE,CAAC;IACrC,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,OAAO,CAAC,IAAI,KAAK,YAAY;YAAE,SAAS;QAC5C,KAAK,MAAM,KAAK,IAAI,OAAO,CAAC,QAAQ,EAAE,CAAC;YACrC,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ;gBAAE,SAAS;YACtC,IACE,KAAK,CAAC,IAAI,KAAK,OAAO;gBACtB,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;gBACxB,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,UAAU;gBAC7B,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,MAAM;gBAC3B,KAAK,CAAC,IAAI,KAAK,SAAS;gBACxB,KAAK,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EACzB,CAAC;gBACD,WAAW,CAAC,IAAI,CACd,IAAI,CACF,4BAA4B,EAC5B,IAAI,EACJ,KAAK,CAAC,IAAI,CAAC,IAAI,EACf,gEAAgE,EAChE,EAAE,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,CAChC,CACF,CAAC;gBACF,SAAS;YACX,CAAC;YACD,MAAM,MAAM,GAAG,SAAS,CAAC,KAAK,CAAC,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;YACnE,IAAI,CAAC,MAAM,CAAC,EAAE;gBAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;iBAC/C,CAAC;gBACJ,SAAS,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;gBAC7B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YACzB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC;AAC3C,CAAC"}
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import type { Span } from '../ast.js';
|
|
2
|
+
import type { CompiledValue } from '../compile/values.js';
|
|
3
|
+
import type { Axis, Phase, Predicate, Primitive } from '../taxonomy.js';
|
|
4
|
+
export type ConditionAxis = Axis | 'severity' | 'provenance';
|
|
5
|
+
export interface Term {
|
|
6
|
+
readonly axis: ConditionAxis;
|
|
7
|
+
readonly value: string;
|
|
8
|
+
}
|
|
9
|
+
export interface SelectorTerm {
|
|
10
|
+
readonly axis: Axis;
|
|
11
|
+
readonly value: string;
|
|
12
|
+
}
|
|
13
|
+
export type Selector = readonly SelectorTerm[];
|
|
14
|
+
export type EdgeReference = {
|
|
15
|
+
readonly kind: 'ref';
|
|
16
|
+
readonly discriminator: string;
|
|
17
|
+
readonly name: string;
|
|
18
|
+
readonly fragment?: string;
|
|
19
|
+
} | {
|
|
20
|
+
readonly kind: 'identity';
|
|
21
|
+
readonly identity: string;
|
|
22
|
+
readonly fragment?: string;
|
|
23
|
+
};
|
|
24
|
+
export interface CompiledEdge {
|
|
25
|
+
readonly predicate: Predicate;
|
|
26
|
+
readonly direction: 'out' | 'in';
|
|
27
|
+
readonly reference: EdgeReference;
|
|
28
|
+
readonly target: string | null;
|
|
29
|
+
readonly fragment?: string;
|
|
30
|
+
readonly condition?: readonly Term[];
|
|
31
|
+
readonly span: Span;
|
|
32
|
+
}
|
|
33
|
+
export interface Cell {
|
|
34
|
+
readonly phase: Phase;
|
|
35
|
+
readonly primitive: Primitive;
|
|
36
|
+
readonly primary: boolean;
|
|
37
|
+
readonly text: string;
|
|
38
|
+
readonly condition?: readonly Term[];
|
|
39
|
+
readonly span: Span;
|
|
40
|
+
}
|
|
41
|
+
export interface Variant {
|
|
42
|
+
readonly key: string;
|
|
43
|
+
readonly value: CompiledValue;
|
|
44
|
+
readonly condition?: readonly Term[];
|
|
45
|
+
readonly span: Span;
|
|
46
|
+
}
|
|
47
|
+
export declare const REQUIREMENT_KINDS: readonly ["inputs", "outputs", "preconditions", "invariants", "failures", "authority", "context", "evolution"];
|
|
48
|
+
export type RequirementKind = (typeof REQUIREMENT_KINDS)[number];
|
|
49
|
+
export interface Requirement {
|
|
50
|
+
readonly id: string;
|
|
51
|
+
readonly kind: RequirementKind;
|
|
52
|
+
readonly text: string;
|
|
53
|
+
readonly condition?: readonly Term[];
|
|
54
|
+
readonly span: Span;
|
|
55
|
+
}
|
|
56
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/semantic/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAExE,MAAM,MAAM,aAAa,GAAG,IAAI,GAAG,UAAU,GAAG,YAAY,CAAC;AAC7D,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,IAAI,EAAE,aAAa,CAAC;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AACD,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AACD,MAAM,MAAM,QAAQ,GAAG,SAAS,YAAY,EAAE,CAAC;AAE/C,MAAM,MAAM,aAAa,GACrB;IAAE,QAAQ,CAAC,IAAI,EAAE,KAAK,CAAC;IAAC,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,GAC3G;IAAE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAAC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAEzF,MAAM,WAAW,YAAY;IAC3B,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,KAAK,GAAG,IAAI,CAAC;IACjC,QAAQ,CAAC,SAAS,EAAE,aAAa,CAAC;IAClC,QAAQ,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAC;IAC/B,QAAQ,CAAC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC;IACtB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC;IAC1B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;CACrB;AAED,MAAM,WAAW,OAAO;IACtB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,aAAa,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;CACrB;AAED,eAAO,MAAM,iBAAiB,gHASpB,CAAC;AACX,MAAM,MAAM,eAAe,GAAG,CAAC,OAAO,iBAAiB,CAAC,CAAC,MAAM,CAAC,CAAC;AACjE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,IAAI,EAAE,eAAe,CAAC;IAC/B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,SAAS,CAAC,EAAE,SAAS,IAAI,EAAE,CAAC;IACrC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;CACrB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/semantic/types.ts"],"names":[],"mappings":"AA6CA,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,QAAQ;IACR,SAAS;IACT,eAAe;IACf,YAAY;IACZ,UAAU;IACV,WAAW;IACX,SAAS;IACT,WAAW;CACH,CAAC"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { RecordNode } from '../ast.js';
|
|
2
|
+
import type { Spelling } from '../compile/values.js';
|
|
3
|
+
import type { Diagnostic } from '../diagnostics.js';
|
|
4
|
+
import type { Variant } from './types.js';
|
|
5
|
+
export interface VariantsResult {
|
|
6
|
+
readonly variants: readonly Variant[];
|
|
7
|
+
readonly diagnostics: readonly Diagnostic[];
|
|
8
|
+
}
|
|
9
|
+
export declare function readVariants(record: RecordNode, path: string, spellings: readonly Spelling[]): VariantsResult;
|
|
10
|
+
//# sourceMappingURL=variants.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variants.d.ts","sourceRoot":"","sources":["../../src/semantic/variants.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAGpD,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,YAAY,CAAC;AAE1C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,QAAQ,EAAE,SAAS,OAAO,EAAE,CAAC;IACtC,QAAQ,CAAC,WAAW,EAAE,SAAS,UAAU,EAAE,CAAC;CAC7C;AAED,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,QAAQ,EAAE,GAAG,cAAc,CA8D7G"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { resolveKey } from '../compile/values.js';
|
|
2
|
+
import { diag } from '../diagnostics.js';
|
|
3
|
+
import { conditionOf } from './conditions.js';
|
|
4
|
+
import { misplacedIn } from './placement.js';
|
|
5
|
+
export function readVariants(record, path, spellings) {
|
|
6
|
+
const variants = [];
|
|
7
|
+
const diagnostics = [];
|
|
8
|
+
for (const section of record.sections) {
|
|
9
|
+
if (section.name !== 'governance')
|
|
10
|
+
continue;
|
|
11
|
+
for (const field of section.children) {
|
|
12
|
+
if (field.kind !== 'field')
|
|
13
|
+
continue;
|
|
14
|
+
const { key, value } = resolveKey(field, spellings);
|
|
15
|
+
if (key === 'severity' || field.words[0] === 'when') {
|
|
16
|
+
const misplaced = misplacedIn([field], path)[0];
|
|
17
|
+
if (misplaced)
|
|
18
|
+
diagnostics.push(misplaced);
|
|
19
|
+
continue;
|
|
20
|
+
}
|
|
21
|
+
const condition = conditionOf(field, path);
|
|
22
|
+
if (!condition.ok) {
|
|
23
|
+
diagnostics.push(condition.diagnostic);
|
|
24
|
+
continue;
|
|
25
|
+
}
|
|
26
|
+
const misplaced = misplacedIn(field.children.filter((c) => !(c.kind === 'field' && c.words[0] === 'when')), path)[0];
|
|
27
|
+
if (misplaced) {
|
|
28
|
+
diagnostics.push(misplaced);
|
|
29
|
+
continue;
|
|
30
|
+
}
|
|
31
|
+
variants.push({
|
|
32
|
+
key,
|
|
33
|
+
value,
|
|
34
|
+
...(condition.condition === undefined ? {} : { condition: condition.condition }),
|
|
35
|
+
span: field.span,
|
|
36
|
+
});
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
const groups = new Map();
|
|
40
|
+
for (const variant of variants) {
|
|
41
|
+
const key = JSON.stringify([variant.key, variant.condition ?? []]);
|
|
42
|
+
const group = groups.get(key);
|
|
43
|
+
if (group)
|
|
44
|
+
group.push(variant);
|
|
45
|
+
else
|
|
46
|
+
groups.set(key, [variant]);
|
|
47
|
+
}
|
|
48
|
+
const refused = new Set();
|
|
49
|
+
for (const group of groups.values()) {
|
|
50
|
+
if (group.length < 2)
|
|
51
|
+
continue;
|
|
52
|
+
for (const variant of group) {
|
|
53
|
+
refused.add(variant);
|
|
54
|
+
diagnostics.push(diag('IA-LANG-VARIANT-DUPLICATE', path, variant.span.line, `Duplicate ${variant.key} condition; other occurrences at ${group
|
|
55
|
+
.filter((v) => v !== variant)
|
|
56
|
+
.map((v) => `${path}:${v.span.line}`)
|
|
57
|
+
.join(', ')}.`, { endLine: variant.span.endLine }));
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
diagnostics.sort((a, b) => a.line - b.line);
|
|
61
|
+
return { variants: variants.filter((v) => !refused.has(v)), diagnostics };
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=variants.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"variants.js","sourceRoot":"","sources":["../../src/semantic/variants.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Predicate } from '../taxonomy.js';
|
|
2
|
+
import type { ConditionAxis } from './types.js';
|
|
3
|
+
export declare const CONDITION_AXES: readonly ConditionAxis[];
|
|
4
|
+
export declare function valuesFor(axis: string): readonly string[] | undefined;
|
|
5
|
+
export declare function canonicalValue(axis: string, value: string): string | undefined;
|
|
6
|
+
export interface Verb {
|
|
7
|
+
readonly predicate: Predicate;
|
|
8
|
+
readonly direction: 'out' | 'in';
|
|
9
|
+
}
|
|
10
|
+
export declare const VERB_PHRASES: readonly string[];
|
|
11
|
+
export declare function verbOf(phrase: string): Verb | undefined;
|
|
12
|
+
//# sourceMappingURL=vocabulary.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vocabulary.d.ts","sourceRoot":"","sources":["../../src/semantic/vocabulary.ts"],"names":[],"mappings":"AAgBA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAChD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAEhD,eAAO,MAAM,cAAc,EAAE,SAAS,aAAa,EAAwC,CAAC;AAe5F,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,GAAG,SAAS,CAErE;AACD,wBAAgB,cAAc,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAE9E;AAED,MAAM,WAAW,IAAI;IACnB,QAAQ,CAAC,SAAS,EAAE,SAAS,CAAC;IAC9B,QAAQ,CAAC,SAAS,EAAE,KAAK,GAAG,IAAI,CAAC;CAClC;AAQD,eAAO,MAAM,YAAY,EAAE,SAAS,MAAM,EAAqC,CAAC;AAChF,wBAAgB,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAEvD"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { ARTIFACT_SETS, AXES, CATEGORIES, KINDS, LANES, MOVES, PHASES, PREDICATES, PREDICATE_PAIRS, PRESENT_PHRASES, PRIMITIVES, PROVENANCES, SEVERITIES, SHAPES, } from '../taxonomy.js';
|
|
2
|
+
export const CONDITION_AXES = [...AXES, 'severity', 'provenance'];
|
|
3
|
+
const values = new Map([
|
|
4
|
+
['shape', SHAPES],
|
|
5
|
+
['category', CATEGORIES],
|
|
6
|
+
['phase', PHASES],
|
|
7
|
+
['primitive', PRIMITIVES],
|
|
8
|
+
['move', MOVES],
|
|
9
|
+
['kind', KINDS],
|
|
10
|
+
['lane', LANES],
|
|
11
|
+
['predicate', PREDICATES],
|
|
12
|
+
['artifact-set', ARTIFACT_SETS],
|
|
13
|
+
['severity', SEVERITIES],
|
|
14
|
+
['provenance', PROVENANCES],
|
|
15
|
+
]);
|
|
16
|
+
export function valuesFor(axis) {
|
|
17
|
+
return values.get(axis);
|
|
18
|
+
}
|
|
19
|
+
export function canonicalValue(axis, value) {
|
|
20
|
+
return values.get(axis)?.find((candidate) => candidate.toLowerCase() === value.toLowerCase());
|
|
21
|
+
}
|
|
22
|
+
const verbs = new Map();
|
|
23
|
+
for (const [predicate, inverse] of PREDICATE_PAIRS) {
|
|
24
|
+
verbs.set(predicate, Object.freeze({ predicate, direction: 'out' }));
|
|
25
|
+
verbs.set(inverse, Object.freeze({ predicate, direction: 'in' }));
|
|
26
|
+
}
|
|
27
|
+
for (const [index, phrase] of PRESENT_PHRASES.entries())
|
|
28
|
+
verbs.set(phrase, Object.freeze({ predicate: PREDICATE_PAIRS[index][0], direction: 'out' }));
|
|
29
|
+
export const VERB_PHRASES = Object.freeze([...verbs.keys()]);
|
|
30
|
+
export function verbOf(phrase) {
|
|
31
|
+
return verbs.get(phrase);
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=vocabulary.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vocabulary.js","sourceRoot":"","sources":["../../src/semantic/vocabulary.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,aAAa,EACb,IAAI,EACJ,UAAU,EACV,KAAK,EACL,KAAK,EACL,KAAK,EACL,MAAM,EACN,UAAU,EACV,eAAe,EACf,eAAe,EACf,UAAU,EACV,WAAW,EACX,UAAU,EACV,MAAM,GACP,MAAM,gBAAgB,CAAC;AAIxB,MAAM,CAAC,MAAM,cAAc,GAA6B,CAAC,GAAG,IAAI,EAAE,UAAU,EAAE,YAAY,CAAC,CAAC;AAC5F,MAAM,MAAM,GAAG,IAAI,GAAG,CAA4B;IAChD,CAAC,OAAO,EAAE,MAAM,CAAC;IACjB,CAAC,UAAU,EAAE,UAAU,CAAC;IACxB,CAAC,OAAO,EAAE,MAAM,CAAC;IACjB,CAAC,WAAW,EAAE,UAAU,CAAC;IACzB,CAAC,MAAM,EAAE,KAAK,CAAC;IACf,CAAC,MAAM,EAAE,KAAK,CAAC;IACf,CAAC,MAAM,EAAE,KAAK,CAAC;IACf,CAAC,WAAW,EAAE,UAAU,CAAC;IACzB,CAAC,cAAc,EAAE,aAAa,CAAC;IAC/B,CAAC,UAAU,EAAE,UAAU,CAAC;IACxB,CAAC,YAAY,EAAE,WAAW,CAAC;CAC5B,CAAC,CAAC;AAEH,MAAM,UAAU,SAAS,CAAC,IAAY;IACpC,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AACD,MAAM,UAAU,cAAc,CAAC,IAAY,EAAE,KAAa;IACxD,OAAO,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC;AAChG,CAAC;AAMD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAgB,CAAC;AACtC,KAAK,MAAM,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,eAAe,EAAE,CAAC;IACnD,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IACrE,KAAK,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AACpE,CAAC;AACD,KAAK,MAAM,CAAC,KAAK,EAAE,MAAM,CAAC,IAAI,eAAe,CAAC,OAAO,EAAE;IACrD,KAAK,CAAC,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,SAAS,EAAE,eAAe,CAAC,KAAK,CAAE,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;AAChG,MAAM,CAAC,MAAM,YAAY,GAAsB,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AAChF,MAAM,UAAU,MAAM,CAAC,MAAc;IACnC,OAAO,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;AAC3B,CAAC"}
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
import { KINDS, CATEGORIES, PREDICATE_PAIRS, PHASES, PRIMITIVES, MOVES, AXES, LANES, SHAPES, ARTIFACT_SETS, SEVERITIES, PROVENANCES, BANDS, PLACEMENT_KINDS, VALUE_TYPES, CARDINALITIES } from './kernel.generated.js';
|
|
2
|
+
export { KINDS, CATEGORIES, PREDICATE_PAIRS, PHASES, PRIMITIVES, MOVES, AXES, LANES, SHAPES, ARTIFACT_SETS, SEVERITIES, PROVENANCES, BANDS, PLACEMENT_KINDS, VALUE_TYPES, CARDINALITIES, BAND_OF, PRESENT_PHRASES, DIMENSION_PATHS, KIND_LANES, PRIMITIVE_ANCHORS, SHAPE_ROWS, KERNEL_DIGEST, } from './kernel.generated.js';
|
|
3
|
+
export type Kind = (typeof KINDS)[number];
|
|
4
|
+
export type Category = (typeof CATEGORIES)[number];
|
|
5
|
+
/** The eighteen active predicates with their inverses; semantic/vocabulary adds exact present-tense phrases. */
|
|
6
|
+
export type Predicate = (typeof PREDICATE_PAIRS)[number][0];
|
|
7
|
+
export declare const PREDICATES: readonly Predicate[];
|
|
8
|
+
export declare const INVERSE_OF: ReadonlyMap<Predicate, string>;
|
|
9
|
+
export type Phase = (typeof PHASES)[number];
|
|
10
|
+
export type Primitive = (typeof PRIMITIVES)[number];
|
|
11
|
+
export type Move = (typeof MOVES)[number];
|
|
12
|
+
/** The nine routing axes a selector or condition may name (spec 5.3). */
|
|
13
|
+
export type Axis = (typeof AXES)[number];
|
|
14
|
+
export type Lane = (typeof LANES)[number];
|
|
15
|
+
export type Shape = (typeof SHAPES)[number];
|
|
16
|
+
export type ArtifactSet = (typeof ARTIFACT_SETS)[number];
|
|
17
|
+
export type Severity = (typeof SEVERITIES)[number];
|
|
18
|
+
export type Provenance = (typeof PROVENANCES)[number];
|
|
19
|
+
/** Authority bands (graph spec 3.3): the closed set and nothing else. */
|
|
20
|
+
export type Band = (typeof BANDS)[number];
|
|
21
|
+
export type PlacementKind = (typeof PLACEMENT_KINDS)[number];
|
|
22
|
+
/** The kernel's value types for schema fields (spec 4.3) and the edge cardinalities. */
|
|
23
|
+
export type ValueType = (typeof VALUE_TYPES)[number];
|
|
24
|
+
export type Cardinality = (typeof CARDINALITIES)[number];
|
|
25
|
+
/** A schema field type: a value type, or `list of` one. */
|
|
26
|
+
export type FieldType = ValueType | `list of ${ValueType}`;
|
|
27
|
+
/**
|
|
28
|
+
* The closed table of text forms a schema may require with `as text form <form>` (W0-L5). Language-owned, not a
|
|
29
|
+
* kernel value type: adding a form changes this table and the compliance predicate for it, never the kernel.
|
|
30
|
+
*/
|
|
31
|
+
export declare const TEXT_FORMS: readonly ["iso-date"];
|
|
32
|
+
export type TextForm = (typeof TEXT_FORMS)[number];
|
|
33
|
+
export declare const isKind: (x: string) => x is Kind;
|
|
34
|
+
export declare const isCategory: (x: string) => x is Category;
|
|
35
|
+
export declare const isPredicate: (x: string) => x is Predicate;
|
|
36
|
+
export declare const isPhase: (x: string) => x is Phase;
|
|
37
|
+
export declare const isPrimitive: (x: string) => x is Primitive;
|
|
38
|
+
export declare const isMove: (x: string) => x is Move;
|
|
39
|
+
export declare const isAxis: (x: string) => x is Axis;
|
|
40
|
+
export declare const isSeverity: (x: string) => x is Severity;
|
|
41
|
+
export declare const isProvenance: (x: string) => x is Provenance;
|
|
42
|
+
export declare const isPlacementKind: (x: string) => x is PlacementKind;
|
|
43
|
+
export declare const isValueType: (x: string) => x is ValueType;
|
|
44
|
+
export declare const isCardinality: (x: string) => x is Cardinality;
|
|
45
|
+
export declare const isTextForm: (x: string) => x is TextForm;
|
|
46
|
+
/** The `id` value rule (compliance C05): an ASCII letter, then letters, digits or hyphens. */
|
|
47
|
+
export declare const isId: (x: string) => boolean;
|
|
48
|
+
export declare function isBand(x: number): x is Band;
|
|
49
|
+
/** The field type spelled by a run of words: `text`, or `list of text`. */
|
|
50
|
+
export declare function fieldTypeOf(words: readonly string[]): FieldType | undefined;
|
|
51
|
+
//# sourceMappingURL=taxonomy.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taxonomy.d.ts","sourceRoot":"","sources":["../src/taxonomy.ts"],"names":[],"mappings":"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"}
|
package/dist/taxonomy.js
ADDED
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
// Closed constants are generated from schema-validated native kernel records.
|
|
2
|
+
import { KINDS, CATEGORIES, PREDICATE_PAIRS, PHASES, PRIMITIVES, MOVES, AXES, SEVERITIES, PROVENANCES, BANDS, PLACEMENT_KINDS, VALUE_TYPES, CARDINALITIES, } from './kernel.generated.js';
|
|
3
|
+
export { KINDS, CATEGORIES, PREDICATE_PAIRS, PHASES, PRIMITIVES, MOVES, AXES, LANES, SHAPES, ARTIFACT_SETS, SEVERITIES, PROVENANCES, BANDS, PLACEMENT_KINDS, VALUE_TYPES, CARDINALITIES, BAND_OF, PRESENT_PHRASES, DIMENSION_PATHS, KIND_LANES, PRIMITIVE_ANCHORS, SHAPE_ROWS, KERNEL_DIGEST, } from './kernel.generated.js';
|
|
4
|
+
export const PREDICATES = PREDICATE_PAIRS.map((pair) => pair[0]);
|
|
5
|
+
export const INVERSE_OF = new Map(PREDICATE_PAIRS.map((pair) => [pair[0], pair[1]]));
|
|
6
|
+
/**
|
|
7
|
+
* The closed table of text forms a schema may require with `as text form <form>` (W0-L5). Language-owned, not a
|
|
8
|
+
* kernel value type: adding a form changes this table and the compliance predicate for it, never the kernel.
|
|
9
|
+
*/
|
|
10
|
+
export const TEXT_FORMS = ['iso-date'];
|
|
11
|
+
function member(set) {
|
|
12
|
+
return (x) => set.includes(x);
|
|
13
|
+
}
|
|
14
|
+
export const isKind = member(KINDS);
|
|
15
|
+
export const isCategory = member(CATEGORIES);
|
|
16
|
+
export const isPredicate = member(PREDICATES);
|
|
17
|
+
export const isPhase = member(PHASES);
|
|
18
|
+
export const isPrimitive = member(PRIMITIVES);
|
|
19
|
+
export const isMove = member(MOVES);
|
|
20
|
+
export const isAxis = member(AXES);
|
|
21
|
+
export const isSeverity = member(SEVERITIES);
|
|
22
|
+
export const isProvenance = member(PROVENANCES);
|
|
23
|
+
export const isPlacementKind = member(PLACEMENT_KINDS);
|
|
24
|
+
export const isValueType = member(VALUE_TYPES);
|
|
25
|
+
export const isCardinality = member(CARDINALITIES);
|
|
26
|
+
export const isTextForm = member(TEXT_FORMS);
|
|
27
|
+
/** The `id` value rule (compliance C05): an ASCII letter, then letters, digits or hyphens. */
|
|
28
|
+
export const isId = (x) => /^[A-Za-z][A-Za-z0-9-]*$/.test(x);
|
|
29
|
+
export function isBand(x) {
|
|
30
|
+
return BANDS.includes(x);
|
|
31
|
+
}
|
|
32
|
+
/** The field type spelled by a run of words: `text`, or `list of text`. */
|
|
33
|
+
export function fieldTypeOf(words) {
|
|
34
|
+
const first = words[0];
|
|
35
|
+
const third = words[2];
|
|
36
|
+
if (words.length === 1 && first !== undefined && isValueType(first))
|
|
37
|
+
return first;
|
|
38
|
+
if (words.length === 3 && first === 'list' && words[1] === 'of' && third !== undefined && isValueType(third))
|
|
39
|
+
return `list of ${third}`;
|
|
40
|
+
return undefined;
|
|
41
|
+
}
|
|
42
|
+
//# sourceMappingURL=taxonomy.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"taxonomy.js","sourceRoot":"","sources":["../src/taxonomy.ts"],"names":[],"mappings":"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"}
|