@astrale-os/kernel-dsl 1.0.0-beta.2 → 1.0.0-beta.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/v1/addressing/class-key.js +3 -3
- package/dist/v1/addressing/definition-ref.js +21 -37
- package/dist/v1/addressing/domain-dependency.d.ts +0 -6
- package/dist/v1/addressing/domain-dependency.js +1 -6
- package/dist/v1/addressing/key.d.ts +4 -1
- package/dist/v1/addressing/key.js +23 -3
- package/dist/v1/addressing/ordering.d.ts +2 -0
- package/dist/v1/addressing/ordering.js +4 -0
- package/dist/v1/addressing/patterns.d.ts +1 -1
- package/dist/v1/addressing/patterns.js +2 -6
- package/dist/v1/builder/callable/authoring.d.ts +11 -5
- package/dist/v1/builder/callable/authoring.js +2 -0
- package/dist/v1/builder/class/authoring.d.ts +94 -224
- package/dist/v1/builder/class/authoring.js +31 -33
- package/dist/v1/builder/class/handle.d.ts +27 -0
- package/dist/v1/builder/class/handle.js +1 -0
- package/dist/v1/builder/class/input.d.ts +159 -0
- package/dist/v1/builder/class/projection.d.ts +129 -0
- package/dist/v1/builder/class/projection.js +1 -0
- package/dist/v1/builder/class/property.d.ts +3 -9
- package/dist/v1/builder/class/property.js +1 -0
- package/dist/v1/builder/core/authoring.d.ts +1 -1
- package/dist/v1/builder/index.d.ts +5 -2
- package/dist/v1/builder/lowering/callable.js +1 -0
- package/dist/v1/builder/lowering/class.d.ts +9 -1
- package/dist/v1/builder/lowering/class.js +62 -17
- package/dist/v1/builder/lowering/policy.js +2 -0
- package/dist/v1/builder/lowering/property-keys.d.ts +27 -0
- package/dist/v1/builder/lowering/property-keys.js +108 -0
- package/dist/v1/builder/lowering/schema/compile.js +11 -6
- package/dist/v1/builder/lowering/schema/context.d.ts +9 -1
- package/dist/v1/builder/lowering/schema/context.js +36 -4
- package/dist/v1/builder/lowering/schema/lifetime.d.ts +11 -0
- package/dist/v1/builder/lowering/schema/lifetime.js +55 -0
- package/dist/v1/builder/lowering/value/path.d.ts +1 -1
- package/dist/v1/builder/lowering/value/path.js +2 -4
- package/dist/v1/builder/lowering/value/zod.js +1 -3
- package/dist/v1/builder/policy/authoring.d.ts +85 -5
- package/dist/v1/builder/policy/authoring.js +107 -68
- package/dist/v1/builder/schema/define.d.ts +0 -1
- package/dist/v1/builder/schema/diagnostic.d.ts +3 -2
- package/dist/v1/builder/schema/diagnostic.js +5 -10
- package/dist/v1/builder/schema/input.d.ts +1 -1
- package/dist/v1/builder/schema/projection/callable.d.ts +7 -5
- package/dist/v1/builder/schema/projection/class.d.ts +118 -15
- package/dist/v1/builder/schema/projection/core-input.d.ts +2 -1
- package/dist/v1/builder/schema/projection/identity.d.ts +2 -1
- package/dist/v1/builder/schema/projection/model.d.ts +4 -2
- package/dist/v1/builder/schema/projection/property.d.ts +1 -1
- package/dist/v1/builder/schema/projection/resolved-class.d.ts +2 -1
- package/dist/v1/builder/schema/projection.d.ts +1 -1
- package/dist/v1/builder/value/full-match.d.ts +0 -1
- package/dist/v1/builder/value/full-match.js +0 -1
- package/dist/v1/builder/value/path-metadata.d.ts +1 -1
- package/dist/v1/builder/value/path.d.ts +1 -1
- package/dist/v1/bundle/codec.js +11 -13
- package/dist/v1/bundle/diagnostic.d.ts +2 -0
- package/dist/v1/bundle/diagnostic.js +9 -7
- package/dist/v1/bundle/model.js +1 -1
- package/dist/v1/bundle/structure.js +4 -6
- package/dist/v1/compiled/admission/accept.js +4 -10
- package/dist/v1/compiled/admission/closure.js +2 -2
- package/dist/v1/compiled/admission/diagnostic.d.ts +1 -1
- package/dist/v1/compiled/admission/diagnostic.js +1 -3
- package/dist/v1/compiled/admission/revision.d.ts +9 -1
- package/dist/v1/compiled/admission/revision.js +6 -3
- package/dist/v1/compiled/admission/semantics/class.d.ts +4 -1
- package/dist/v1/compiled/admission/semantics/class.js +37 -12
- package/dist/v1/compiled/admission/semantics/core.d.ts +1 -24
- package/dist/v1/compiled/admission/semantics/core.js +56 -24
- package/dist/v1/compiled/admission/semantics/edge.d.ts +2 -4
- package/dist/v1/compiled/admission/semantics/edge.js +6 -65
- package/dist/v1/compiled/admission/semantics/policy/callable.js +0 -2
- package/dist/v1/compiled/admission/semantics/policy/contracts.d.ts +5 -20
- package/dist/v1/compiled/admission/semantics/policy/contracts.js +8 -21
- package/dist/v1/compiled/admission/semantics/policy/parity.js +40 -43
- package/dist/v1/compiled/admission/semantics/policy/pattern.d.ts +4 -1
- package/dist/v1/compiled/admission/semantics/policy/pattern.js +4 -16
- package/dist/v1/compiled/admission/semantics/policy/typing.d.ts +2 -24
- package/dist/v1/compiled/admission/semantics/policy/typing.js +19 -201
- package/dist/v1/compiled/admission/wire/callable.js +11 -1
- package/dist/v1/compiled/admission/wire/class.js +73 -21
- package/dist/v1/compiled/admission/wire/policy.d.ts +4 -3
- package/dist/v1/compiled/admission/wire/policy.js +8 -7
- package/dist/v1/compiled/compiler/compile.js +8 -8
- package/dist/v1/compiled/diagnostic.js +2 -3
- package/dist/v1/compiled/loader/load.d.ts +3 -2
- package/dist/v1/compiled/loader/load.js +11 -45
- package/dist/v1/domain/create.js +5 -6
- package/dist/v1/domain/model/domain.d.ts +2 -7
- package/dist/v1/domain/model/input.d.ts +2 -1
- package/dist/v1/domain/namespace/member-collection.js +4 -6
- package/dist/v1/domain/projection/classes.js +4 -1
- package/dist/v1/domain/validation/create.d.ts +6 -3
- package/dist/v1/domain/validation/create.js +21 -69
- package/dist/v1/index.d.ts +2 -1
- package/dist/v1/language/.spec/schemas/draft-2020-12.schema.json +462 -0
- package/dist/v1/language/.spec/schemas/value-schema.schema.json +22 -0
- package/dist/v1/language/callable/admission.d.ts +15 -0
- package/dist/v1/language/callable/admission.js +43 -0
- package/dist/v1/language/callable/model/callable.d.ts +10 -0
- package/dist/v1/language/callable/resolved.d.ts +16 -3
- package/dist/v1/language/class/inheritance.d.ts +36 -5
- package/dist/v1/language/class/inheritance.js +87 -1
- package/dist/v1/language/class/lifetime.d.ts +50 -11
- package/dist/v1/language/class/lifetime.js +89 -20
- package/dist/v1/language/class/model/class.d.ts +45 -9
- package/dist/v1/language/class/model/edge.d.ts +31 -2
- package/dist/v1/language/class/model/property.d.ts +16 -7
- package/dist/v1/language/class/property-values.js +2 -4
- package/dist/v1/language/class/unique.d.ts +143 -0
- package/dist/v1/language/class/unique.js +264 -0
- package/dist/v1/language/core/facts.d.ts +85 -0
- package/dist/v1/language/core/facts.js +116 -0
- package/dist/v1/language/definition/metadata.d.ts +5 -0
- package/dist/v1/language/definition/metadata.js +7 -0
- package/dist/v1/language/freeze.d.ts +5 -0
- package/dist/v1/{schema/canonical → language}/freeze.js +4 -0
- package/dist/v1/language/index.d.ts +7 -2
- package/dist/v1/language/index.js +5 -1
- package/dist/v1/language/limits.d.ts +64 -0
- package/dist/v1/language/limits.js +60 -0
- package/dist/v1/language/policy/analysis/branches.d.ts +8 -0
- package/dist/v1/language/policy/analysis/branches.js +2 -1
- package/dist/v1/language/policy/analysis/budgets.d.ts +45 -12
- package/dist/v1/language/policy/analysis/budgets.js +133 -19
- package/dist/v1/language/policy/analysis/checks.js +3 -2
- package/dist/v1/language/policy/analysis/typing.d.ts +51 -0
- package/dist/v1/language/policy/analysis/typing.js +455 -0
- package/dist/v1/language/policy/model/policy.d.ts +49 -9
- package/dist/v1/language/policy/model/policy.js +14 -0
- package/dist/v1/language/policy/normalization/normalize.d.ts +6 -6
- package/dist/v1/language/policy/normalization/normalize.js +22 -21
- package/dist/v1/language/validation/diagnostic.d.ts +15 -1
- package/dist/v1/language/validation/diagnostic.js +21 -0
- package/dist/v1/language/validation/rule.d.ts +45 -0
- package/dist/v1/language/validation/rule.js +109 -0
- package/dist/v1/language/value/compile/fields.js +4 -8
- package/dist/v1/language/value/evaluate/program.d.ts +2 -1
- package/dist/v1/language/value/evaluate/program.js +2 -2
- package/dist/v1/language/value/evaluate/validate.d.ts +2 -2
- package/dist/v1/language/value/evaluate/validate.js +6 -2
- package/dist/v1/language/value/evaluate/validity.optimization.d.ts +14 -0
- package/dist/v1/language/value/evaluate/validity.optimization.js +342 -0
- package/dist/v1/language/value/inclusion/arrays.d.ts +3 -0
- package/dist/v1/language/value/inclusion/arrays.js +85 -0
- package/dist/v1/language/value/inclusion/assertions.d.ts +18 -0
- package/dist/v1/language/value/inclusion/assertions.js +29 -0
- package/dist/v1/language/value/inclusion/combinators.d.ts +3 -0
- package/dist/v1/language/value/inclusion/combinators.js +67 -0
- package/dist/v1/language/value/inclusion/equivalence.d.ts +4 -0
- package/dist/v1/language/value/inclusion/equivalence.js +74 -0
- package/dist/v1/language/value/inclusion/evidence.d.ts +34 -0
- package/dist/v1/language/value/inclusion/evidence.js +138 -0
- package/dist/v1/language/value/inclusion/includes.d.ts +17 -0
- package/dist/v1/language/value/inclusion/includes.js +25 -719
- package/dist/v1/language/value/inclusion/keywords.d.ts +5 -0
- package/dist/v1/language/value/inclusion/keywords.js +31 -0
- package/dist/v1/language/value/inclusion/kinds.d.ts +17 -0
- package/dist/v1/language/value/inclusion/kinds.js +57 -0
- package/dist/v1/language/value/inclusion/location.d.ts +24 -0
- package/dist/v1/language/value/inclusion/location.js +63 -0
- package/dist/v1/language/value/inclusion/numbers.d.ts +3 -0
- package/dist/v1/language/value/inclusion/numbers.js +41 -0
- package/dist/v1/language/value/inclusion/objects.d.ts +3 -0
- package/dist/v1/language/value/inclusion/objects.js +190 -0
- package/dist/v1/language/value/inclusion/strings.d.ts +3 -0
- package/dist/v1/language/value/inclusion/strings.js +29 -0
- package/dist/v1/language/value/inclusion/types.d.ts +3 -0
- package/dist/v1/language/value/inclusion/types.js +11 -0
- package/dist/v1/language/value/ordering.d.ts +14 -0
- package/dist/v1/language/value/ordering.js +86 -9
- package/dist/v1/language/value/profile/canonicalize.js +6 -5
- package/dist/v1/language/value/profile/json.validate.d.ts +3 -1
- package/dist/v1/language/value/profile/json.validate.js +3 -2
- package/dist/v1/language/value/profile/meta-schema.compiled.js +4 -1
- package/dist/v1/language/value/profile/rules.js +17 -43
- package/dist/v1/language/value/profile/validate.js +1 -10
- package/dist/v1/language/value/profile/vocabulary.d.ts +35 -2
- package/dist/v1/language/value/profile/vocabulary.js +52 -5
- package/dist/v1/language/value/reference/closure.js +3 -4
- package/dist/v1/language/value/reference/recursion.js +2 -22
- package/dist/v1/language/value/reference/registry.index.d.ts +2 -0
- package/dist/v1/language/value/reference/registry.index.js +33 -16
- package/dist/v1/language/value/regexp/ast.js +6 -7
- package/dist/v1/language/value/regexp/compile.d.ts +5 -11
- package/dist/v1/language/value/regexp/compile.js +14 -12
- package/dist/v1/language/value/regexp/syntax.js +3 -2
- package/dist/v1/language/value/syntax/keywords.d.ts +3 -3
- package/dist/v1/language/value/syntax/keywords.js +4 -20
- package/dist/v1/language/value/syntax/node-path/validate.js +2 -3
- package/dist/v1/language/value/syntax/pointer.d.ts +2 -0
- package/dist/v1/language/value/syntax/pointer.js +5 -2
- package/dist/v1/language/value/syntax/walk.d.ts +2 -0
- package/dist/v1/language/value/syntax/walk.js +19 -20
- package/dist/v1/schema/.spec/schemas/domain-schema.schema.json +2519 -0
- package/dist/v1/schema/admission/accept.js +3 -14
- package/dist/v1/schema/admission/callable.d.ts +21 -0
- package/dist/v1/schema/admission/callable.js +96 -0
- package/dist/v1/schema/analysis/class.js +33 -15
- package/dist/v1/schema/canonical/revision.js +4 -4
- package/dist/v1/schema/compatibility/api.d.ts +2 -1
- package/dist/v1/schema/compatibility/api.js +1 -0
- package/dist/v1/schema/compatibility/comparators/callables.js +1 -1
- package/dist/v1/schema/compatibility/comparators/classes.d.ts +9 -4
- package/dist/v1/schema/compatibility/comparators/classes.js +29 -8
- package/dist/v1/schema/compatibility/comparators/index.d.ts +1 -1
- package/dist/v1/schema/compatibility/comparators/members.js +1 -1
- package/dist/v1/schema/compatibility/comparators/values.js +2 -2
- package/dist/v1/schema/compatibility/coordinate.js +3 -3
- package/dist/v1/schema/compatibility/diff.js +2 -4
- package/dist/v1/schema/compatibility/extension.d.ts +11 -0
- package/dist/v1/schema/compatibility/extension.js +22 -0
- package/dist/v1/schema/compatibility/fields.d.ts +20 -4
- package/dist/v1/schema/compatibility/fields.js +13 -3
- package/dist/v1/schema/compatibility/meaning/footprint.js +16 -50
- package/dist/v1/schema/compatibility/model.d.ts +17 -5
- package/dist/v1/schema/compatibility/report.js +1 -1
- package/dist/v1/schema/compatibility/scope.d.ts +2 -0
- package/dist/v1/schema/compatibility/scope.js +4 -1
- package/dist/v1/schema/compatibility/structure/index.js +6 -4
- package/dist/v1/schema/compatibility/structure/requirements.js +57 -58
- package/dist/v1/schema/compatibility/versioning/index.js +1 -1
- package/dist/v1/schema/compatibility/versioning/surface.d.ts +1 -1
- package/dist/v1/schema/compatibility/versioning/surface.js +30 -2
- package/dist/v1/schema/compatibility/walk.d.ts +17 -0
- package/dist/v1/schema/compatibility/walk.js +41 -0
- package/dist/v1/schema/diagnostic.d.ts +17 -3
- package/dist/v1/schema/diagnostic.js +14 -11
- package/dist/v1/schema/index.d.ts +10 -1
- package/dist/v1/schema/index.js +4 -0
- package/dist/v1/schema/model/schema.d.ts +20 -1
- package/dist/v1/schema/model/schema.js +1 -1
- package/dist/v1/schema/normalization/domain.d.ts +2 -0
- package/dist/v1/schema/normalization/domain.js +29 -9
- package/dist/v1/schema/resolution/closure.js +2 -1
- package/dist/v1/schema/resolution/context.js +13 -13
- package/dist/v1/schema/resolution/domain.d.ts +5 -0
- package/dist/v1/schema/resolution/domain.js +2 -2
- package/dist/v1/schema/resolution/origins.js +3 -2
- package/dist/v1/schema/rule.d.ts +26 -0
- package/dist/v1/schema/rule.js +440 -0
- package/dist/v1/schema/validation/callable.d.ts +35 -2
- package/dist/v1/schema/validation/callable.js +65 -9
- package/dist/v1/schema/validation/class.d.ts +6 -2
- package/dist/v1/schema/validation/class.js +127 -104
- package/dist/v1/schema/validation/core.js +90 -168
- package/dist/v1/schema/validation/domain.js +4 -13
- package/dist/v1/schema/validation/domain.json-schema.d.ts +15 -0
- package/dist/v1/schema/validation/domain.json-schema.js +197 -0
- package/dist/v1/schema/validation/domain.route.d.ts +6 -1
- package/dist/v1/schema/validation/domain.route.js +18 -0
- package/dist/v1/schema/validation/domain.structure.d.ts +7780 -0
- package/dist/v1/schema/validation/domain.structure.js +398 -147
- package/dist/v1/schema/validation/json.json-schema.d.ts +40 -0
- package/dist/v1/schema/validation/json.json-schema.js +46 -0
- package/dist/v1/schema/validation/policy/budgets.d.ts +33 -2
- package/dist/v1/schema/validation/policy/budgets.js +87 -121
- package/dist/v1/schema/validation/policy/context.d.ts +6 -5
- package/dist/v1/schema/validation/policy/context.js +7 -10
- package/dist/v1/schema/validation/policy/objects.d.ts +1 -1
- package/dist/v1/schema/validation/policy/objects.js +6 -14
- package/dist/v1/schema/validation/policy/references.js +11 -27
- package/dist/v1/schema/validation/policy/typing.d.ts +3 -18
- package/dist/v1/schema/validation/policy/typing.js +22 -356
- package/dist/v1/schema/validation/policy/uses.d.ts +40 -3
- package/dist/v1/schema/validation/policy/uses.js +66 -89
- package/dist/v1/schema/validation/policy/validate.js +5 -5
- package/dist/v1/schema/validation/value-api.d.ts +22 -0
- package/dist/v1/schema/validation/value-api.js +34 -1
- package/dist/v1/schema/validation/value.d.ts +3 -0
- package/dist/v1/schema/validation/value.js +9 -17
- package/dist/v1/schema/validation/value.json-schema.d.ts +49 -0
- package/dist/v1/schema/validation/value.json-schema.js +137 -0
- package/dist/v1/schema/validation/view.js +4 -8
- package/dist/value/canonical.d.ts +6 -0
- package/dist/value/canonical.js +36 -0
- package/dist/value/decode.d.ts +7 -0
- package/dist/value/decode.js +159 -9
- package/dist/value/index.d.ts +1 -1
- package/dist/value/json.d.ts +2 -2
- package/dist/value/json.js +2 -2
- package/dist/value/types.d.ts +6 -0
- package/dist/value/unicode.d.ts +2 -1
- package/dist/value/unicode.js +2 -0
- package/package.json +8 -1
- package/dist/v1/builder/lowering/core-properties.d.ts +0 -10
- package/dist/v1/builder/lowering/core-properties.js +0 -76
- package/dist/v1/compiled/admission/semantics/cardinality.d.ts +0 -5
- package/dist/v1/compiled/admission/semantics/cardinality.js +0 -113
- package/dist/v1/compiled/admission/semantics/policy/equality.d.ts +0 -8
- package/dist/v1/compiled/admission/semantics/policy/equality.js +0 -27
- package/dist/v1/compiled/admission/semantics/policy/measure.d.ts +0 -9
- package/dist/v1/compiled/admission/semantics/policy/measure.js +0 -81
- package/dist/v1/compiled/admission/semantics/policy/variants.d.ts +0 -10
- package/dist/v1/compiled/admission/semantics/policy/variants.js +0 -65
- package/dist/v1/language/class/index.d.ts +0 -8
- package/dist/v1/language/class/index.js +0 -1
- package/dist/v1/language/core/index.d.ts +0 -2
- package/dist/v1/language/value/index.d.ts +0 -11
- package/dist/v1/language/value/index.js +0 -8
- package/dist/v1/schema/canonical/domain.d.ts +0 -3
- package/dist/v1/schema/canonical/domain.digest.d.ts +0 -3
- package/dist/v1/schema/canonical/domain.digest.js +0 -5
- package/dist/v1/schema/canonical/domain.js +0 -5
- package/dist/v1/schema/canonical/freeze.d.ts +0 -1
- /package/dist/v1/{language/core/index.js → builder/class/input.js} +0 -0
|
@@ -10,11 +10,11 @@ export function ClassKey(input) {
|
|
|
10
10
|
/** Construction, admission, and structural-coordinate operations for exact Class keys. */
|
|
11
11
|
(function (ClassKey) {
|
|
12
12
|
function of(ref) {
|
|
13
|
-
const
|
|
14
|
-
if (
|
|
13
|
+
const key = Key.of(ref);
|
|
14
|
+
if (!key.slice(key.indexOf(':') + 1).startsWith('class.')) {
|
|
15
15
|
throw new TypeError(`Invalid ClassKey coordinate: ${JSON.stringify(ref)}.`);
|
|
16
16
|
}
|
|
17
|
-
return
|
|
17
|
+
return key;
|
|
18
18
|
}
|
|
19
19
|
ClassKey.of = of;
|
|
20
20
|
function is(input) {
|
|
@@ -8,55 +8,39 @@ const DEFINITION_KINDS = new Set([
|
|
|
8
8
|
]);
|
|
9
9
|
/** Admit and detach one canonical DefinitionRef from an untrusted value. */
|
|
10
10
|
export function acceptDefinitionRef(input) {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
11
|
+
return readDefinitionRef(input) ?? invalid(input);
|
|
12
|
+
}
|
|
13
|
+
/** Identify a canonical DefinitionRef-shaped value without retaining caller state. */
|
|
14
|
+
export function isDefinitionRef(input) {
|
|
15
|
+
return readDefinitionRef(input) !== undefined;
|
|
16
|
+
}
|
|
17
|
+
/** Compare exact Definition coordinates, independent of object identity. */
|
|
18
|
+
export function equalDefinitionRefs(left, right) {
|
|
19
|
+
return left.origin === right.origin && left.kind === right.kind && left.name === right.name;
|
|
20
|
+
}
|
|
21
|
+
function invalid(input) {
|
|
22
|
+
throw new TypeError(`Invalid DefinitionRef: ${JSON.stringify(input)}.`);
|
|
23
|
+
}
|
|
24
|
+
/** A detached copy of the canonical DefinitionRef `input` holds, reading each field once. */
|
|
25
|
+
function readDefinitionRef(input) {
|
|
26
|
+
if (input === null || typeof input !== 'object' || Array.isArray(input))
|
|
27
|
+
return undefined;
|
|
14
28
|
const value = input;
|
|
15
29
|
const keys = Reflect.ownKeys(value);
|
|
16
30
|
if (keys.length !== 3 ||
|
|
17
31
|
!keys.every((key) => key === 'origin' || key === 'kind' || key === 'name')) {
|
|
18
|
-
|
|
32
|
+
return undefined;
|
|
19
33
|
}
|
|
20
|
-
const origin = value
|
|
21
|
-
const kind = value.kind;
|
|
22
|
-
const name = value.name;
|
|
34
|
+
const { origin, kind, name } = value;
|
|
23
35
|
if (typeof origin !== 'string' ||
|
|
24
36
|
!DOMAIN_ORIGIN_PATTERN.test(origin) ||
|
|
25
37
|
typeof kind !== 'string' ||
|
|
26
38
|
!DEFINITION_KINDS.has(kind) ||
|
|
27
39
|
typeof name !== 'string' ||
|
|
28
40
|
!definitionNameMatches(kind, name)) {
|
|
29
|
-
|
|
41
|
+
return undefined;
|
|
30
42
|
}
|
|
31
|
-
return Object.freeze({
|
|
32
|
-
origin,
|
|
33
|
-
kind: kind,
|
|
34
|
-
name,
|
|
35
|
-
});
|
|
36
|
-
}
|
|
37
|
-
/** Identify a canonical DefinitionRef-shaped value without retaining caller state. */
|
|
38
|
-
export function isDefinitionRef(input) {
|
|
39
|
-
if (input === null || typeof input !== 'object' || Array.isArray(input))
|
|
40
|
-
return false;
|
|
41
|
-
const value = input;
|
|
42
|
-
const keys = Reflect.ownKeys(value);
|
|
43
|
-
if (keys.length !== 3 ||
|
|
44
|
-
!keys.every((key) => key === 'origin' || key === 'kind' || key === 'name')) {
|
|
45
|
-
return false;
|
|
46
|
-
}
|
|
47
|
-
return (typeof value.origin === 'string' &&
|
|
48
|
-
DOMAIN_ORIGIN_PATTERN.test(value.origin) &&
|
|
49
|
-
typeof value.kind === 'string' &&
|
|
50
|
-
DEFINITION_KINDS.has(value.kind) &&
|
|
51
|
-
typeof value.name === 'string' &&
|
|
52
|
-
definitionNameMatches(value.kind, value.name));
|
|
53
|
-
}
|
|
54
|
-
/** Compare exact Definition coordinates, independent of object identity. */
|
|
55
|
-
export function equalDefinitionRefs(left, right) {
|
|
56
|
-
return left.origin === right.origin && left.kind === right.kind && left.name === right.name;
|
|
57
|
-
}
|
|
58
|
-
function invalid(input) {
|
|
59
|
-
throw new TypeError(`Invalid DefinitionRef: ${JSON.stringify(input)}.`);
|
|
43
|
+
return Object.freeze({ origin, kind: kind, name });
|
|
60
44
|
}
|
|
61
45
|
function definitionNameMatches(kind, name) {
|
|
62
46
|
return kind === 'core' ? CORE_SLUG_PATTERN.test(name) : MEMBER_NAME_PATTERN.test(name);
|
|
@@ -10,9 +10,3 @@ export type DomainDependency = JsonObject & {
|
|
|
10
10
|
export type DependencyAlias = string;
|
|
11
11
|
/** Exact direct dependency pins keyed by their authored aliases. */
|
|
12
12
|
export type DomainDependencyMap = Readonly<Record<DependencyAlias, DomainDependency>>;
|
|
13
|
-
/** Representation-neutral admission budgets shared by source and compiled closures. */
|
|
14
|
-
export declare const dependencyLimits: Readonly<{
|
|
15
|
-
direct: 32;
|
|
16
|
-
closure: 256;
|
|
17
|
-
depth: 32;
|
|
18
|
-
}>;
|
|
@@ -12,7 +12,10 @@ export declare namespace Key {
|
|
|
12
12
|
type Definition<Kind extends DefinitionKind = DefinitionKind, Name extends string = string, Origin extends Key.Origin = Key.Origin> = DefinitionKey<Origin, Kind, Name>;
|
|
13
13
|
type Callable = DefinitionKey<Key.Origin, 'function'> | MethodKey;
|
|
14
14
|
type View = DefinitionKey<Key.Origin, 'view'>;
|
|
15
|
-
/**
|
|
15
|
+
/**
|
|
16
|
+
* Derive a canonical Definition key from its structured coordinate. A frozen coordinate of data
|
|
17
|
+
* fields cannot change, so its key is derived once and read back for every later call.
|
|
18
|
+
*/
|
|
16
19
|
function of<const Ref extends DefinitionRef>(ref: Ref): DefinitionKey<Ref['origin'], Ref['kind'], Ref['name']>;
|
|
17
20
|
function origin(input: Key): Key.Origin;
|
|
18
21
|
function is(input: unknown): input is Key;
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
import { acceptDefinitionRef, } from './definition-ref.js';
|
|
2
2
|
import { DOMAIN_ORIGIN_PATTERN } from './patterns.js';
|
|
3
3
|
const DEFINITION_KEY = /^(?:class|function|policy|view)\.([A-Za-z][A-Za-z0-9_]*)$/u;
|
|
4
|
-
|
|
4
|
+
// The slug is the whole rest of the coordinate, its own `.` included: no member follows a Core key.
|
|
5
|
+
const CORE_KEY = /^core\.((?=.{1,100}$)[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)*)$/u;
|
|
5
6
|
const MEMBER_KEY = /^class\.([A-Za-z][A-Za-z0-9_]*)\.(property|method)\.([A-Za-z][A-Za-z0-9_]*)$/u;
|
|
7
|
+
/** The keys of frozen Definition coordinates, derived once each. */
|
|
8
|
+
const derived = new WeakMap();
|
|
6
9
|
export function Key(input) {
|
|
7
10
|
if (typeof input !== 'string' || !isCanonicalKey(input)) {
|
|
8
11
|
throw new TypeError(`Invalid Key: ${JSON.stringify(input)}.`);
|
|
@@ -11,10 +14,22 @@ export function Key(input) {
|
|
|
11
14
|
}
|
|
12
15
|
/** Canonical origin-qualified address operations. */
|
|
13
16
|
(function (Key) {
|
|
14
|
-
/**
|
|
17
|
+
/**
|
|
18
|
+
* Derive a canonical Definition key from its structured coordinate. A frozen coordinate of data
|
|
19
|
+
* fields cannot change, so its key is derived once and read back for every later call.
|
|
20
|
+
*/
|
|
15
21
|
function of(ref) {
|
|
22
|
+
const object = typeof ref === 'object' && ref !== null;
|
|
23
|
+
const known = object ? derived.get(ref) : undefined;
|
|
24
|
+
if (known !== undefined)
|
|
25
|
+
return known;
|
|
26
|
+
// Decided before admission reads the fields: only then are the fields read the final ones.
|
|
27
|
+
const stable = object && immutable(ref);
|
|
16
28
|
const definition = acceptDefinitionRef(ref);
|
|
17
|
-
|
|
29
|
+
const key = Key(`${definition.origin}:${definition.kind}.${definition.name}`);
|
|
30
|
+
if (stable)
|
|
31
|
+
derived.set(ref, key);
|
|
32
|
+
return key;
|
|
18
33
|
}
|
|
19
34
|
Key.of = of;
|
|
20
35
|
function origin(input) {
|
|
@@ -37,3 +52,8 @@ function isCanonicalKey(input) {
|
|
|
37
52
|
function isCanonicalCoordinate(input) {
|
|
38
53
|
return DEFINITION_KEY.test(input) || CORE_KEY.test(input) || MEMBER_KEY.test(input);
|
|
39
54
|
}
|
|
55
|
+
/** A frozen object of data fields answers every read alike; a getter may not. */
|
|
56
|
+
function immutable(ref) {
|
|
57
|
+
return (Object.isFrozen(ref) &&
|
|
58
|
+
Reflect.ownKeys(ref).every((key) => 'value' in Reflect.getOwnPropertyDescriptor(ref, key)));
|
|
59
|
+
}
|
|
@@ -4,3 +4,5 @@ export declare function definitionRefIndex(ref: DefinitionRef): string;
|
|
|
4
4
|
export declare function compareDefinitionRefs(left: DefinitionRef, right: DefinitionRef): number;
|
|
5
5
|
/** Locale-independent Unicode code-point ordering for canonical DSL values. */
|
|
6
6
|
export declare function compareUnicode(left: string, right: string): number;
|
|
7
|
+
/** Order strings by UTF-16 code unit, the order `<` gives strings. */
|
|
8
|
+
export declare function compareCodeUnits(left: string, right: string): number;
|
|
@@ -18,3 +18,7 @@ export function compareUnicode(left, right) {
|
|
|
18
18
|
}
|
|
19
19
|
return a.length - b.length;
|
|
20
20
|
}
|
|
21
|
+
/** Order strings by UTF-16 code unit, the order `<` gives strings. */
|
|
22
|
+
export function compareCodeUnits(left, right) {
|
|
23
|
+
return left < right ? -1 : left > right ? 1 : 0;
|
|
24
|
+
}
|
|
@@ -3,6 +3,7 @@ export type DomainOrigin = string;
|
|
|
3
3
|
export declare const DOMAIN_ORIGIN_PATTERN: RegExp;
|
|
4
4
|
export declare const MEMBER_NAME_PATTERN: RegExp;
|
|
5
5
|
export declare const DEPENDENCY_ALIAS_PATTERN: RegExp;
|
|
6
|
+
/** Labels of `[a-z][a-z0-9-]*` joined by `.`, 100 code points at most: `graph.reader`. */
|
|
6
7
|
export declare const CORE_SLUG_PATTERN: RegExp;
|
|
7
8
|
export declare const DOMAIN_REVISION_PATTERN: RegExp;
|
|
8
9
|
export declare const PROPERTY_KEY_PATTERN: RegExp;
|
|
@@ -19,4 +20,3 @@ export declare const patterns: Readonly<{
|
|
|
19
20
|
revision: RegExp;
|
|
20
21
|
revisionFullMatch: "sha256:[0-9a-f]{64}";
|
|
21
22
|
}>;
|
|
22
|
-
export declare function assertMemberName(name: string): void;
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
export const DOMAIN_ORIGIN_PATTERN = /^(?:[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?\.)+[a-z0-9](?:[a-z0-9-]{0,61}[a-z0-9])?$/u;
|
|
2
2
|
export const MEMBER_NAME_PATTERN = /^[A-Za-z][A-Za-z0-9_]*$/u;
|
|
3
3
|
export const DEPENDENCY_ALIAS_PATTERN = /^[a-z][A-Za-z0-9]*$/u;
|
|
4
|
-
|
|
4
|
+
/** Labels of `[a-z][a-z0-9-]*` joined by `.`, 100 code points at most: `graph.reader`. */
|
|
5
|
+
export const CORE_SLUG_PATTERN = /^(?=.{1,100}$)[a-z][a-z0-9-]*(?:\.[a-z][a-z0-9-]*)*$/u;
|
|
5
6
|
export const DOMAIN_REVISION_PATTERN = /^sha256:[0-9a-f]{64}$/u;
|
|
6
7
|
const DOMAIN_REVISION_FULL_MATCH = 'sha256:[0-9a-f]{64}';
|
|
7
8
|
const DOMAIN_ORIGIN_FULL_MATCH = '([a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?\\.)+[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?';
|
|
@@ -22,8 +23,3 @@ export const patterns = Object.freeze({
|
|
|
22
23
|
revision: DOMAIN_REVISION_PATTERN,
|
|
23
24
|
revisionFullMatch: DOMAIN_REVISION_FULL_MATCH,
|
|
24
25
|
});
|
|
25
|
-
export function assertMemberName(name) {
|
|
26
|
-
if (!MEMBER_NAME_PATTERN.test(name)) {
|
|
27
|
-
throw new TypeError(`Invalid member name: ${JSON.stringify(name)}.`);
|
|
28
|
-
}
|
|
29
|
-
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import type { Value as PortableValue } from '@astrale-os/kernel-dsl/value';
|
|
2
2
|
import type { z } from 'zod';
|
|
3
3
|
import type { PolicyRef } from '../../addressing/index.js';
|
|
4
|
-
import type { BinaryInputProjection, CallableExecution, FunctionAuth } from '../../language/callable/model/callable.js';
|
|
4
|
+
import type { BinaryInputProjection, CallableAdmission, CallableExecution, FunctionAuth } from '../../language/callable/model/callable.js';
|
|
5
5
|
import type { PolicyCheckExpression, PolicyCheckObject, PolicyObjectRef } from '../../language/policy/model/policy.js';
|
|
6
|
-
import type { Class } from '../class/
|
|
6
|
+
import type { Class } from '../class/handle.js';
|
|
7
7
|
import type { ValueSchemaInput } from '../class/property.js';
|
|
8
8
|
import type { CoreNode } from '../core/authoring.js';
|
|
9
9
|
import type { Policy, PolicyInput } from '../policy/authoring.js';
|
|
@@ -62,6 +62,8 @@ export interface CallableInputBase<Input extends FunctionInputSchema = ValueSche
|
|
|
62
62
|
readonly output: CallableOutputInput;
|
|
63
63
|
/** `{ durable: true }` makes an invocation return an Execution reference. */
|
|
64
64
|
readonly execution?: CallableExecution;
|
|
65
|
+
/** `{ maxAge }`: how old, in seconds, the admission a call is served under may be. */
|
|
66
|
+
readonly admission?: CallableAdmission;
|
|
65
67
|
}
|
|
66
68
|
type ConcreteCallableInput<Input extends FunctionInputSchema = ValueSchemaInput> = CallableInputBase<Input> & ({
|
|
67
69
|
readonly auth: 'anonymous';
|
|
@@ -83,7 +85,7 @@ export type MethodInput = ConcreteCallableInput & {
|
|
|
83
85
|
readonly abstract?: boolean;
|
|
84
86
|
};
|
|
85
87
|
export type CallableInput = FunctionInput | MethodInput;
|
|
86
|
-
export interface CallableProjection<out Input = unknown, out Output = unknown, out Auth extends FunctionAuth = FunctionAuth, out Static extends boolean = boolean, out Abstract extends boolean = boolean, out Execution extends CallableExecution | undefined = CallableExecution | undefined> {
|
|
88
|
+
export interface CallableProjection<out Input = unknown, out Output = unknown, out Auth extends FunctionAuth = FunctionAuth, out Static extends boolean = boolean, out Abstract extends boolean = boolean, out Execution extends CallableExecution | undefined = CallableExecution | undefined, out Admission extends CallableAdmission | undefined = CallableAdmission | undefined> {
|
|
87
89
|
readonly [CALLABLE_PROJECTION_VALUE]: true;
|
|
88
90
|
readonly input: Input;
|
|
89
91
|
readonly output: Output;
|
|
@@ -91,6 +93,7 @@ export interface CallableProjection<out Input = unknown, out Output = unknown, o
|
|
|
91
93
|
readonly static: Static;
|
|
92
94
|
readonly abstract: Abstract;
|
|
93
95
|
readonly execution: Execution;
|
|
96
|
+
readonly admission: Admission;
|
|
94
97
|
}
|
|
95
98
|
type ValueInputOf<Schema> = Schema extends TypedValueSchema<infer Value> ? Value : Schema extends z.ZodType ? z.input<Schema> : PortableValue;
|
|
96
99
|
type FunctionInputOf<Schema> = Schema extends BinaryInputAuthoring<infer Metadata> ? BinaryInputProjection<ValueInputOf<Metadata>> : ValueInputOf<Schema>;
|
|
@@ -98,6 +101,9 @@ type ValueOutputOf<Schema> = Schema extends TypedValueSchema<infer Value> ? Valu
|
|
|
98
101
|
type ExecutionOfConfig<Config extends CallableInput> = Config extends {
|
|
99
102
|
readonly execution: infer Execution extends CallableExecution;
|
|
100
103
|
} ? Execution : undefined;
|
|
104
|
+
type AdmissionOfConfig<Config extends CallableInput> = Config extends {
|
|
105
|
+
readonly admission: infer Admission extends CallableAdmission;
|
|
106
|
+
} ? Admission : undefined;
|
|
101
107
|
type CallableOutputOf<Input extends CallableOutputInput> = Input extends StreamOutput<infer Item> ? {
|
|
102
108
|
readonly mode: 'stream';
|
|
103
109
|
readonly item: ValueOutputOf<Item>;
|
|
@@ -120,12 +126,12 @@ export type ProjectionOfCallable<Value extends Function | Method> = Value extend
|
|
|
120
126
|
export declare function callableConfiguration(value: Function | Method): CallableInput;
|
|
121
127
|
type PolicyObjectAuthoring = Class | Function | Method | Policy | View | CoreNode;
|
|
122
128
|
export type PolicyObjectInput = Lazy<PolicyObjectAuthoring | PolicyObjectRef>;
|
|
123
|
-
export declare function func<const Config extends FunctionInput, Input = FunctionInputOf<Config['input']>, Output = CallableOutputOf<Config['output']>, Auth extends FunctionAuth = Config['auth'], Execution extends CallableExecution | undefined = ExecutionOfConfig<Config>>(config: Config): Function<CallableProjection<Input, Output, Auth, false, false, Execution>>;
|
|
129
|
+
export declare function func<const Config extends FunctionInput, Input = FunctionInputOf<Config['input']>, Output = CallableOutputOf<Config['output']>, Auth extends FunctionAuth = Config['auth'], Execution extends CallableExecution | undefined = ExecutionOfConfig<Config>, Admission extends CallableAdmission | undefined = AdmissionOfConfig<Config>>(config: Config): Function<CallableProjection<Input, Output, Auth, false, false, Execution, Admission>>;
|
|
124
130
|
export declare function method<const Config extends MethodInput, Input = ValueInputOf<Config['input']>, Output = CallableOutputOf<Config['output']>, Auth extends FunctionAuth = Config['auth'], Static extends boolean = Config extends {
|
|
125
131
|
readonly static: true;
|
|
126
132
|
} ? true : false, Abstract extends boolean = Config extends {
|
|
127
133
|
readonly abstract: infer Value extends boolean;
|
|
128
|
-
} ? Value : false, Execution extends CallableExecution | undefined = ExecutionOfConfig<Config>>(config: Config): Method<CallableProjection<Input, Output, Auth, Static, Abstract, Execution>>;
|
|
134
|
+
} ? Value : false, Execution extends CallableExecution | undefined = ExecutionOfConfig<Config>, Admission extends CallableAdmission | undefined = AdmissionOfConfig<Config>>(config: Config): Method<CallableProjection<Input, Output, Auth, Static, Abstract, Execution, Admission>>;
|
|
129
135
|
export declare function callableInputField(name: string): Extract<PolicyCheckObject, {
|
|
130
136
|
readonly kind: 'input';
|
|
131
137
|
}>;
|
|
@@ -18,6 +18,7 @@ export function func(config) {
|
|
|
18
18
|
'static',
|
|
19
19
|
'abstract',
|
|
20
20
|
'execution',
|
|
21
|
+
'admission',
|
|
21
22
|
]);
|
|
22
23
|
const value = authoringValue('function', {});
|
|
23
24
|
callableInputs.set(value, { ...config });
|
|
@@ -33,6 +34,7 @@ export function method(config) {
|
|
|
33
34
|
'static',
|
|
34
35
|
'abstract',
|
|
35
36
|
'execution',
|
|
37
|
+
'admission',
|
|
36
38
|
]);
|
|
37
39
|
const value = authoringValue('method', {});
|
|
38
40
|
callableInputs.set(value, { ...config });
|