@bjornpagen/bumbledb 1.0.1 → 1.2.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/COOKBOOK.md +176 -36
- package/README.md +70 -26
- package/dist/capacity.d.ts +15 -55
- package/dist/capacity.d.ts.map +1 -1
- package/dist/capacity.js +63 -12
- package/dist/capacity.js.map +1 -1
- package/dist/changes.d.ts +28 -6
- package/dist/changes.d.ts.map +1 -1
- package/dist/changes.js +119 -71
- package/dist/changes.js.map +1 -1
- package/dist/closed.d.ts +23 -51
- package/dist/closed.d.ts.map +1 -1
- package/dist/closed.js +110 -168
- package/dist/closed.js.map +1 -1
- package/dist/codec.d.ts +8 -14
- package/dist/codec.d.ts.map +1 -1
- package/dist/codec.js +113 -188
- package/dist/codec.js.map +1 -1
- package/dist/compile.d.ts +17 -18
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +41 -20
- package/dist/compile.js.map +1 -1
- package/dist/db-native.d.ts +76 -41
- package/dist/db-native.d.ts.map +1 -1
- package/dist/db-native.js +8 -0
- package/dist/db-native.js.map +1 -1
- package/dist/db.d.ts +61 -26
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +152 -85
- package/dist/db.js.map +1 -1
- package/dist/errors.d.ts +11 -3
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +13 -1
- package/dist/errors.js.map +1 -1
- package/dist/face.d.ts +19 -25
- package/dist/face.d.ts.map +1 -1
- package/dist/face.js +30 -24
- package/dist/face.js.map +1 -1
- package/dist/fields.d.ts +13 -26
- package/dist/fields.d.ts.map +1 -1
- package/dist/fields.js +89 -116
- package/dist/fields.js.map +1 -1
- package/dist/immutable.d.ts +10 -0
- package/dist/immutable.d.ts.map +1 -0
- package/dist/immutable.js +75 -0
- package/dist/immutable.js.map +1 -0
- package/dist/index.d.ts +16 -12
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +6 -4
- package/dist/index.js.map +1 -1
- package/dist/internal/log.d.ts +6 -4
- package/dist/internal/log.d.ts.map +1 -1
- package/dist/internal/log.js +3 -1
- package/dist/internal/log.js.map +1 -1
- package/dist/law.d.ts +11 -11
- package/dist/law.d.ts.map +1 -1
- package/dist/law.js +1 -1
- package/dist/law.js.map +1 -1
- package/dist/lower.d.ts.map +1 -1
- package/dist/lower.js +11 -6
- package/dist/lower.js.map +1 -1
- package/dist/migration.d.ts +2 -3
- package/dist/migration.d.ts.map +1 -1
- package/dist/migration.js +5 -5
- package/dist/migration.js.map +1 -1
- package/dist/native.d.ts +2 -2
- package/dist/native.d.ts.map +1 -1
- package/dist/native.js.map +1 -1
- package/dist/query/atom.d.ts +1 -1
- package/dist/query/atom.d.ts.map +1 -1
- package/dist/query/atom.js.map +1 -1
- package/dist/query/description.d.ts +33 -0
- package/dist/query/description.d.ts.map +1 -0
- package/dist/query/description.js +302 -0
- package/dist/query/description.js.map +1 -0
- package/dist/query/lower.d.ts +60 -4
- package/dist/query/lower.d.ts.map +1 -1
- package/dist/query/lower.js +126 -161
- package/dist/query/lower.js.map +1 -1
- package/dist/query/parse-ir.d.ts +7 -2
- package/dist/query/parse-ir.d.ts.map +1 -1
- package/dist/query/parse-ir.js +240 -53
- package/dist/query/parse-ir.js.map +1 -1
- package/dist/query/run.d.ts.map +1 -1
- package/dist/query/run.js +8 -10
- package/dist/query/run.js.map +1 -1
- package/dist/query/scope.d.ts +3 -4
- package/dist/query/scope.d.ts.map +1 -1
- package/dist/query/scope.js +5 -10
- package/dist/query/scope.js.map +1 -1
- package/dist/relation.d.ts +22 -48
- package/dist/relation.d.ts.map +1 -1
- package/dist/relation.js +30 -82
- package/dist/relation.js.map +1 -1
- package/dist/result.d.ts +10 -25
- package/dist/result.d.ts.map +1 -1
- package/dist/result.js +7 -12
- package/dist/result.js.map +1 -1
- package/dist/rows.d.ts +11 -14
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +49 -237
- package/dist/rows.js.map +1 -1
- package/dist/runtime-codes.d.ts +1 -1
- package/dist/runtime-codes.d.ts.map +1 -1
- package/dist/runtime-codes.js +1 -2
- package/dist/runtime-codes.js.map +1 -1
- package/dist/runtime-errors.d.ts +27 -15
- package/dist/runtime-errors.d.ts.map +1 -1
- package/dist/runtime-errors.js +44 -8
- package/dist/runtime-errors.js.map +1 -1
- package/dist/runtime-native.d.ts +16 -34
- package/dist/runtime-native.d.ts.map +1 -1
- package/dist/runtime-native.js.map +1 -1
- package/dist/runtime.d.ts +11 -28
- package/dist/runtime.d.ts.map +1 -1
- package/dist/runtime.js +14 -54
- package/dist/runtime.js.map +1 -1
- package/dist/schema.d.ts +9 -1
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +85 -24
- package/dist/schema.js.map +1 -1
- package/dist/selection.d.ts +27 -0
- package/dist/selection.d.ts.map +1 -0
- package/dist/selection.js +104 -0
- package/dist/selection.js.map +1 -0
- package/dist/shape.d.ts +6 -9
- package/dist/shape.d.ts.map +1 -1
- package/dist/statements.d.ts +17 -52
- package/dist/statements.d.ts.map +1 -1
- package/dist/statements.js +92 -111
- package/dist/statements.js.map +1 -1
- package/dist/values.d.ts +25 -0
- package/dist/values.d.ts.map +1 -0
- package/dist/values.js +203 -0
- package/dist/values.js.map +1 -0
- package/pack-provenance.json +3 -3
- package/package.json +4 -4
- package/src/capacity.ts +86 -76
- package/src/changes.ts +225 -94
- package/src/closed.ts +161 -314
- package/src/codec.ts +123 -213
- package/src/compile.ts +61 -38
- package/src/db-native.ts +73 -68
- package/src/db.ts +268 -165
- package/src/errors.ts +16 -1
- package/src/face.ts +44 -74
- package/src/fields.ts +100 -146
- package/src/immutable.ts +76 -0
- package/src/index.ts +38 -31
- package/src/internal/log.ts +4 -5
- package/src/law.ts +14 -14
- package/src/lower.ts +13 -10
- package/src/migration.ts +5 -12
- package/src/native.ts +2 -1
- package/src/query/atom.ts +1 -0
- package/src/query/description.ts +394 -0
- package/src/query/lower.ts +139 -173
- package/src/query/parse-ir.ts +247 -54
- package/src/query/run.ts +15 -9
- package/src/query/scope.ts +10 -18
- package/src/relation.ts +58 -142
- package/src/result.ts +16 -45
- package/src/rows.ts +57 -250
- package/src/runtime-codes.ts +1 -2
- package/src/runtime-errors.ts +48 -8
- package/src/runtime-native.ts +13 -46
- package/src/runtime.ts +51 -119
- package/src/schema.ts +99 -29
- package/src/selection.ts +124 -0
- package/src/shape.ts +9 -9
- package/src/statements.ts +138 -189
- package/src/values.ts +223 -0
package/dist/face.js
CHANGED
|
@@ -1,41 +1,47 @@
|
|
|
1
|
+
import { memberDescriptor, sealedFieldOf } from "#closed.ts";
|
|
1
2
|
import { AuthoringError } from "#errors.ts";
|
|
3
|
+
import { assertDeclarationRecord } from "#fields.ts";
|
|
4
|
+
import { selectionBindings } from "#selection.ts";
|
|
2
5
|
import { renderLiteralSet } from "#spec.ts";
|
|
6
|
+
import { arrayValue, recordValue } from "#values.ts";
|
|
3
7
|
const emptySelection = Object.freeze([]);
|
|
4
8
|
function faceParts(source) {
|
|
9
|
+
assertDeclarationRecord("face source", source);
|
|
5
10
|
if ("relation" in source) {
|
|
11
|
+
recordValue("selected relation", source, ["relation", "selection"]);
|
|
6
12
|
return { owner: source.relation, selection: source.selection };
|
|
7
13
|
}
|
|
8
14
|
return { owner: source, selection: emptySelection };
|
|
9
15
|
}
|
|
10
16
|
function on(source, fields) {
|
|
11
|
-
const projection = Object.freeze(typeof fields === "string" ? [fields] : [...fields]);
|
|
12
17
|
const parts = faceParts(source);
|
|
13
|
-
|
|
18
|
+
return faceDescriptor({
|
|
14
19
|
owner: parts.owner,
|
|
15
|
-
projection,
|
|
20
|
+
projection: typeof fields === "string" ? [fields] : fields,
|
|
16
21
|
selection: parts.selection
|
|
17
22
|
});
|
|
18
|
-
const value = Object.freeze({ source, projection, data });
|
|
19
|
-
if (!faceMinted(value, source, projection)) {
|
|
20
|
-
throw new AuthoringError({ message: `face over ${parts.owner.name}: face construction incomplete` });
|
|
21
|
-
}
|
|
22
|
-
return value;
|
|
23
23
|
}
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
24
|
+
function faceDescriptor(raw) {
|
|
25
|
+
const input = recordValue("face", raw, ["owner", "projection", "selection"]);
|
|
26
|
+
const owner = memberDescriptor(input.owner);
|
|
27
|
+
const projection = arrayValue("face projection", input.projection, (_, value) => {
|
|
28
|
+
if (typeof value !== "string")
|
|
29
|
+
throw new AuthoringError({ message: "face: expected a field name" });
|
|
30
|
+
return value;
|
|
31
|
+
});
|
|
32
|
+
if (projection.length === 0) {
|
|
33
|
+
throw new AuthoringError({ message: "face: expected a nonempty projection" });
|
|
34
|
+
}
|
|
35
|
+
const projected = new Set();
|
|
36
|
+
for (const field of projection) {
|
|
37
|
+
if (typeof field !== "string" || sealedFieldOf(owner, field) === undefined)
|
|
38
|
+
throw new AuthoringError({ message: `face ${owner.name}: unknown field ${String(field)}` });
|
|
39
|
+
if (projected.has(field))
|
|
40
|
+
throw new AuthoringError({ message: `face ${owner.name}: duplicate field ${field}` });
|
|
41
|
+
projected.add(field);
|
|
42
|
+
}
|
|
43
|
+
const selection = selectionBindings(owner, input.selection);
|
|
44
|
+
return Object.freeze({ owner, projection, selection });
|
|
39
45
|
}
|
|
40
46
|
function renderFace(face) {
|
|
41
47
|
const projection = face.projection.join(", ");
|
|
@@ -49,5 +55,5 @@ function renderFace(face) {
|
|
|
49
55
|
.join(", ");
|
|
50
56
|
return `${face.owner.name}(${projection} | ${bindings})`;
|
|
51
57
|
}
|
|
52
|
-
export { on, renderFace };
|
|
58
|
+
export { faceDescriptor, on, renderFace };
|
|
53
59
|
//# sourceMappingURL=face.js.map
|
package/dist/face.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"face.js","sourceRoot":"","sources":["../src/face.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;
|
|
1
|
+
{"version":3,"file":"face.js","sourceRoot":"","sources":["../src/face.ts"],"names":[],"mappings":"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"}
|
package/dist/fields.d.ts
CHANGED
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
import { Result } from "effect";
|
|
2
|
-
import { DbError } from "./runtime-errors.js";
|
|
3
1
|
import type { LiteralSpec } from "./spec.js";
|
|
4
|
-
import { Uuid } from "./uuid.js";
|
|
2
|
+
import type { Uuid } from "./uuid.js";
|
|
5
3
|
/**
|
|
6
4
|
* A half-open integer interval `[start, end)` as a plain value object —
|
|
7
5
|
* the ONE discrete interval value type, whatever the field's element type
|
|
@@ -17,29 +15,14 @@ interface IntervalValue {
|
|
|
17
15
|
/**
|
|
18
16
|
* A half-open dense float interval `[start, end)` as a plain value object:
|
|
19
17
|
* two canonical binary64 bounds on the dense numeric line.
|
|
20
|
-
*
|
|
21
|
-
*
|
|
22
|
-
*
|
|
23
|
-
* denote a missing bound, not a member point.
|
|
18
|
+
* Field-directed validation rejects NaN endpoints and empty intervals and
|
|
19
|
+
* normalizes signed zero. Infinite bounds denote a missing bound, not a
|
|
20
|
+
* member point; a plain object alone is not evidence of validation.
|
|
24
21
|
*/
|
|
25
22
|
interface FloatIntervalValue {
|
|
26
23
|
readonly start: number;
|
|
27
24
|
readonly end: number;
|
|
28
25
|
}
|
|
29
|
-
/**
|
|
30
|
-
* Constructs a checked interval literal — the `start..end` spelling.
|
|
31
|
-
* Half-open and nonempty by construction. Fallible pure parsing
|
|
32
|
-
* returns `Result` (use `Effect.fromResult(span(...))` inside a generator),
|
|
33
|
-
* never hidden I/O and never a thrown domain outcome.
|
|
34
|
-
*
|
|
35
|
-
* Two element domains, selected by argument type: `span(0n, 60n)` is a
|
|
36
|
-
* discrete integer interval; `span(0.5, 1.5)` is a dense float interval
|
|
37
|
-
* with canonical endpoints (NaN refused, `-0` normalized to `+0`,
|
|
38
|
-
* `-Infinity` legal only as the lower bound and `+Infinity` only as the
|
|
39
|
-
* upper bound — both enforced by strict numeric `start < end`).
|
|
40
|
-
*/
|
|
41
|
-
declare function span(start: bigint, end: bigint): Result.Result<IntervalValue, DbError>;
|
|
42
|
-
declare function span(start: number, end: number): Result.Result<FloatIntervalValue, DbError>;
|
|
43
26
|
/**
|
|
44
27
|
* Nonempty declaration-order handle vector — the ONE roster carrier. The
|
|
45
28
|
* handle union is `Handles[number]`, the ordinal of a handle is its tuple
|
|
@@ -137,10 +120,8 @@ type Infer<F extends AnyField> = F extends {
|
|
|
137
120
|
readonly kind: "bytes";
|
|
138
121
|
} ? Uint8Array : F extends {
|
|
139
122
|
readonly kind: "interval";
|
|
140
|
-
readonly element:
|
|
141
|
-
} ? FloatIntervalValue :
|
|
142
|
-
readonly kind: "interval";
|
|
143
|
-
} ? IntervalValue : never;
|
|
123
|
+
readonly element: infer Element;
|
|
124
|
+
} ? Element extends "f64" ? FloatIntervalValue : IntervalValue : never;
|
|
144
125
|
/**
|
|
145
126
|
* The typed shape refusal shared by every literal machine — the selection
|
|
146
127
|
* lowering here, the row codec (`rows.ts`), and the query-literal
|
|
@@ -165,6 +146,12 @@ declare function isIntervalValue(value: unknown): value is IntervalValue;
|
|
|
165
146
|
declare function isFloatIntervalValue(value: unknown): value is FloatIntervalValue;
|
|
166
147
|
declare function assertDeclarationOrderKey(where: string, name: string): void;
|
|
167
148
|
declare function assertDeclarationRecord(where: string, record: object): void;
|
|
149
|
+
/** Own a checked roster; never freeze the caller's array. */
|
|
150
|
+
declare function ownHandles<const H extends ClosedHandleTuple>(context: string, handles: H): H;
|
|
151
|
+
declare function ownHandles(context: string, handles: unknown): ClosedHandleTuple;
|
|
152
|
+
/** Checked structural field descriptors, shared by declaration boundaries. */
|
|
153
|
+
declare function fieldDescriptor<F extends AnyField>(context: string, input: F): F;
|
|
154
|
+
declare function fieldDescriptor(context: string, input: unknown): AnyField;
|
|
168
155
|
declare const u64: U64Field;
|
|
169
156
|
declare const i64: I64Field;
|
|
170
157
|
/** Binary64. The native value boundary canonicalizes NaN and signed zero. */
|
|
@@ -178,5 +165,5 @@ declare function interval<Element extends U64Field | I64Field | F64Field>(elemen
|
|
|
178
165
|
declare function interval<Element extends U64Field | I64Field, const Width extends bigint>(element: Element, width: Width): IntervalField<Element["kind"], Width>;
|
|
179
166
|
declare function literalOf(field: AnyField, value: unknown): LiteralSpec;
|
|
180
167
|
export type { AnyClosedIdField, AnyClosedRoster, AnyField, BoolField, BytesField, ClosedHandleTuple, ClosedIdField, ClosedRoster, F64Field, FloatIntervalValue, I64Field, Infer, IntervalElementKind, IntervalField, IntervalValue, SignatureOf, StrField, U64Field, UuidField };
|
|
181
|
-
export { assertDeclarationOrderKey, assertDeclarationRecord, bool, bytes, f64, i64, interval, isFloatIntervalValue, isIntervalValue, literalOf, literalShapeError, rosterOf, rostersAgree, signaturesAgree,
|
|
168
|
+
export { assertDeclarationOrderKey, assertDeclarationRecord, bool, bytes, f64, fieldDescriptor, i64, interval, isFloatIntervalValue, isIntervalValue, literalOf, literalShapeError, ownHandles, rosterOf, rostersAgree, signaturesAgree, str, u64, uuid };
|
|
182
169
|
//# sourceMappingURL=fields.d.ts.map
|
package/dist/fields.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fields.d.ts","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"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"}
|
package/dist/fields.js
CHANGED
|
@@ -1,29 +1,7 @@
|
|
|
1
1
|
import { regex } from "arkregex";
|
|
2
|
-
import { Result } from "effect";
|
|
3
2
|
import { AuthoringError } from "#errors.ts";
|
|
4
|
-
import {
|
|
5
|
-
import { Uuid } from "#uuid.ts";
|
|
3
|
+
import { arrayValue, fieldValue, recordValue, taggedValueOf, U64_MAX } from "#values.ts";
|
|
6
4
|
const INTEGER_INDEX_NAME = regex("^(?:0|[1-9][0-9]*)$");
|
|
7
|
-
function span(start, end) {
|
|
8
|
-
if (typeof start === "bigint" && typeof end === "bigint") {
|
|
9
|
-
if (start >= end) {
|
|
10
|
-
return Result.fail(new DbError({ operation: "span", reason: { _tag: "InvalidArgument" } }));
|
|
11
|
-
}
|
|
12
|
-
return Result.succeed(Object.freeze({ start, end }));
|
|
13
|
-
}
|
|
14
|
-
if (typeof start === "number" && typeof end === "number") {
|
|
15
|
-
if (Number.isNaN(start) || Number.isNaN(end)) {
|
|
16
|
-
return Result.fail(new DbError({ operation: "span", reason: { _tag: "InvalidArgument" } }));
|
|
17
|
-
}
|
|
18
|
-
const lo = Object.is(start, -0) ? 0 : start;
|
|
19
|
-
const hi = Object.is(end, -0) ? 0 : end;
|
|
20
|
-
if (!(lo < hi)) {
|
|
21
|
-
return Result.fail(new DbError({ operation: "span", reason: { _tag: "InvalidArgument" } }));
|
|
22
|
-
}
|
|
23
|
-
return Result.succeed(Object.freeze({ start: lo, end: hi }));
|
|
24
|
-
}
|
|
25
|
-
return Result.fail(new DbError({ operation: "span", reason: { _tag: "InvalidArgument" } }));
|
|
26
|
-
}
|
|
27
5
|
/**
|
|
28
6
|
* The typed shape refusal shared by every literal machine — the selection
|
|
29
7
|
* lowering here, the row codec (`rows.ts`), and the query-literal
|
|
@@ -82,45 +60,10 @@ function isFloatIntervalValue(value) {
|
|
|
82
60
|
typeof value.start === "number" &&
|
|
83
61
|
typeof value.end === "number");
|
|
84
62
|
}
|
|
85
|
-
function handleLiteral(closed, value) {
|
|
86
|
-
if (typeof value !== "string") {
|
|
87
|
-
throw literalShapeError("selection literal", `a ${closed.name} handle name (string)`, value);
|
|
88
|
-
}
|
|
89
|
-
if (!closed.handles.includes(value)) {
|
|
90
|
-
throw new AuthoringError({
|
|
91
|
-
message: `"${value}" is not a handle of ${closed.name} — the roster is ${closed.handles.join(", ")}`
|
|
92
|
-
});
|
|
93
|
-
}
|
|
94
|
-
return { kind: "handle", handle: value };
|
|
95
|
-
}
|
|
96
|
-
function intervalLiteral(element, value) {
|
|
97
|
-
if (element === "f64") {
|
|
98
|
-
if (!isFloatIntervalValue(value)) {
|
|
99
|
-
throw literalShapeError("selection literal", "float interval ({ start, end } numbers)", value);
|
|
100
|
-
}
|
|
101
|
-
if (Number.isNaN(value.start) || Number.isNaN(value.end) || !(value.start < value.end)) {
|
|
102
|
-
throw new AuthoringError({
|
|
103
|
-
message: "selection literal: a float interval is half-open and nonempty with non-NaN canonical endpoints"
|
|
104
|
-
});
|
|
105
|
-
}
|
|
106
|
-
return {
|
|
107
|
-
kind: "value",
|
|
108
|
-
value: {
|
|
109
|
-
kind: "intervalF64",
|
|
110
|
-
start: Object.is(value.start, -0) ? 0 : value.start,
|
|
111
|
-
end: Object.is(value.end, -0) ? 0 : value.end
|
|
112
|
-
}
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
if (!isIntervalValue(value)) {
|
|
116
|
-
throw literalShapeError("selection literal", "interval ({ start, end } bigints)", value);
|
|
117
|
-
}
|
|
118
|
-
if (element === "u64") {
|
|
119
|
-
return { kind: "value", value: { kind: "intervalU64", start: value.start, end: value.end } };
|
|
120
|
-
}
|
|
121
|
-
return { kind: "value", value: { kind: "intervalI64", start: value.start, end: value.end } };
|
|
122
|
-
}
|
|
123
63
|
function assertDeclarationOrderKey(where, name) {
|
|
64
|
+
if (typeof name !== "string" || !name.isWellFormed()) {
|
|
65
|
+
throw new AuthoringError({ message: `${where}: expected a well-formed Unicode name` });
|
|
66
|
+
}
|
|
124
67
|
if (INTEGER_INDEX_NAME.test(name)) {
|
|
125
68
|
throw new AuthoringError({
|
|
126
69
|
message: `${where}: name ${name} is an integer index — JavaScript object keys re-order integer indices, breaking the declaration-order law; use a non-numeric name`
|
|
@@ -133,12 +76,91 @@ function assertDeclarationOrderKey(where, name) {
|
|
|
133
76
|
}
|
|
134
77
|
}
|
|
135
78
|
function assertDeclarationRecord(where, record) {
|
|
79
|
+
if (typeof record !== "object" || record === null) {
|
|
80
|
+
throw new AuthoringError({ message: `${where}: expected a plain declaration record` });
|
|
81
|
+
}
|
|
136
82
|
const proto = Object.getPrototypeOf(record);
|
|
137
83
|
if (proto !== Object.prototype && proto !== null) {
|
|
138
84
|
throw new AuthoringError({
|
|
139
85
|
message: `${where}: the declaration record's prototype was replaced — a plain \`__proto__: {...}\` entry is the prototype setter, so its key silently vanishes from the declaration; spell it computed (["__proto__"]: {...}) to declare it as data`
|
|
140
86
|
});
|
|
141
87
|
}
|
|
88
|
+
for (const key of Reflect.ownKeys(record)) {
|
|
89
|
+
const property = Object.getOwnPropertyDescriptor(record, key);
|
|
90
|
+
if (typeof key !== "string" || property?.enumerable !== true || !("value" in property)) {
|
|
91
|
+
throw new AuthoringError({ message: `${where}: declarations require enumerable own data fields` });
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
function ownHandles(context, handles) {
|
|
96
|
+
if (!Array.isArray(handles) || handles.length === 0) {
|
|
97
|
+
throw new AuthoringError({ message: `${context}: expected a nonempty handle tuple` });
|
|
98
|
+
}
|
|
99
|
+
const seen = new Set();
|
|
100
|
+
const values = arrayValue(context, handles, (_, handle) => {
|
|
101
|
+
if (typeof handle !== "string")
|
|
102
|
+
throw new AuthoringError({ message: `${context}: expected string handles` });
|
|
103
|
+
if (!handle.isWellFormed())
|
|
104
|
+
throw new AuthoringError({ message: `${context}: expected well-formed string handles` });
|
|
105
|
+
if (seen.has(handle))
|
|
106
|
+
throw new AuthoringError({ message: `${context}: duplicate handle ${handle}` });
|
|
107
|
+
seen.add(handle);
|
|
108
|
+
return handle;
|
|
109
|
+
});
|
|
110
|
+
const first = values[0];
|
|
111
|
+
if (first === undefined)
|
|
112
|
+
throw new AuthoringError({ message: `${context}: expected a nonempty handle tuple` });
|
|
113
|
+
return Object.freeze([first, ...values.slice(1)]);
|
|
114
|
+
}
|
|
115
|
+
function fieldDescriptor(context, input) {
|
|
116
|
+
if (typeof input !== "object" || input === null || !("kind" in input)) {
|
|
117
|
+
throw new AuthoringError({ message: `${context}: expected a field descriptor` });
|
|
118
|
+
}
|
|
119
|
+
assertDeclarationRecord(context, input);
|
|
120
|
+
switch (input.kind) {
|
|
121
|
+
case "bool":
|
|
122
|
+
case "str":
|
|
123
|
+
case "i64":
|
|
124
|
+
case "f64":
|
|
125
|
+
case "uuid":
|
|
126
|
+
recordValue(context, input, ["kind"]);
|
|
127
|
+
return Object.freeze({ kind: input.kind });
|
|
128
|
+
case "u64": {
|
|
129
|
+
if (!("closed" in input)) {
|
|
130
|
+
recordValue(context, input, ["kind"]);
|
|
131
|
+
return u64;
|
|
132
|
+
}
|
|
133
|
+
recordValue(context, input, ["kind", "closed"]);
|
|
134
|
+
const roster = recordValue(context, input.closed, ["name", "handles"]);
|
|
135
|
+
if (typeof roster.name !== "string")
|
|
136
|
+
throw new AuthoringError({ message: `${context}: expected a roster name` });
|
|
137
|
+
assertDeclarationOrderKey(context, roster.name);
|
|
138
|
+
return Object.freeze({
|
|
139
|
+
kind: "u64",
|
|
140
|
+
closed: Object.freeze({ name: roster.name, handles: ownHandles(context, roster.handles) })
|
|
141
|
+
});
|
|
142
|
+
}
|
|
143
|
+
case "bytes": {
|
|
144
|
+
const value = recordValue(context, input, ["kind", "width"]);
|
|
145
|
+
if (typeof value.width !== "number")
|
|
146
|
+
throw new AuthoringError({ message: `${context}: expected a bytes width` });
|
|
147
|
+
return bytes(value.width);
|
|
148
|
+
}
|
|
149
|
+
case "interval": {
|
|
150
|
+
const value = recordValue(context, input, ["kind", "element", "width"]);
|
|
151
|
+
if (value.element !== "u64" && value.element !== "i64" && value.element !== "f64") {
|
|
152
|
+
throw new AuthoringError({ message: `${context}: expected an interval element kind` });
|
|
153
|
+
}
|
|
154
|
+
if (value.width === undefined)
|
|
155
|
+
return interval({ kind: value.element });
|
|
156
|
+
if (value.element === "f64" || typeof value.width !== "bigint") {
|
|
157
|
+
throw new AuthoringError({ message: `${context}: only discrete intervals accept a bigint width` });
|
|
158
|
+
}
|
|
159
|
+
return interval({ kind: value.element }, value.width);
|
|
160
|
+
}
|
|
161
|
+
default:
|
|
162
|
+
throw new AuthoringError({ message: `${context}: unknown field kind` });
|
|
163
|
+
}
|
|
142
164
|
}
|
|
143
165
|
const u64 = Object.freeze({ kind: "u64" });
|
|
144
166
|
const i64 = Object.freeze({ kind: "i64" });
|
|
@@ -168,67 +190,18 @@ function interval(element, width) {
|
|
|
168
190
|
message: "interval(f64) takes no width — a fixed-width float interval is unrepresentable (rounded start + width is not an exact fixed length on the dense line); applications supply two checked bounds"
|
|
169
191
|
});
|
|
170
192
|
}
|
|
171
|
-
if (width !== undefined && width < 1n) {
|
|
193
|
+
if (width !== undefined && (typeof width !== "bigint" || width < 1n || width > U64_MAX)) {
|
|
172
194
|
throw new AuthoringError({
|
|
173
|
-
message:
|
|
195
|
+
message: "interval width must be a bigint in 1..=u64::MAX"
|
|
174
196
|
});
|
|
175
197
|
}
|
|
176
198
|
return Object.freeze({ kind: "interval", element: elementKind, width });
|
|
177
199
|
}
|
|
178
200
|
function literalOf(field, value) {
|
|
179
|
-
|
|
180
|
-
|
|
181
|
-
return handleLiteral(roster, value);
|
|
182
|
-
}
|
|
183
|
-
switch (field.kind) {
|
|
184
|
-
case "bool": {
|
|
185
|
-
if (typeof value !== "boolean") {
|
|
186
|
-
throw literalShapeError("selection literal", "boolean", value);
|
|
187
|
-
}
|
|
188
|
-
return { kind: "value", value: { kind: "bool", value } };
|
|
189
|
-
}
|
|
190
|
-
case "u64": {
|
|
191
|
-
if (typeof value !== "bigint") {
|
|
192
|
-
throw literalShapeError("selection literal", "bigint", value);
|
|
193
|
-
}
|
|
194
|
-
return { kind: "value", value: { kind: "u64", value } };
|
|
195
|
-
}
|
|
196
|
-
case "i64": {
|
|
197
|
-
if (typeof value !== "bigint") {
|
|
198
|
-
throw literalShapeError("selection literal", "bigint", value);
|
|
199
|
-
}
|
|
200
|
-
return { kind: "value", value: { kind: "i64", value } };
|
|
201
|
-
}
|
|
202
|
-
case "str": {
|
|
203
|
-
if (typeof value !== "string") {
|
|
204
|
-
throw literalShapeError("selection literal", "string", value);
|
|
205
|
-
}
|
|
206
|
-
if (!value.isWellFormed()) {
|
|
207
|
-
throw literalShapeError("selection literal", "well-formed string", value);
|
|
208
|
-
}
|
|
209
|
-
return { kind: "value", value: { kind: "string", value } };
|
|
210
|
-
}
|
|
211
|
-
case "f64": {
|
|
212
|
-
if (typeof value !== "number") {
|
|
213
|
-
throw literalShapeError("selection literal", "number", value);
|
|
214
|
-
}
|
|
215
|
-
return { kind: "value", value: { kind: "f64", value } };
|
|
216
|
-
}
|
|
217
|
-
case "uuid": {
|
|
218
|
-
if (!Uuid.isUuid(value)) {
|
|
219
|
-
throw literalShapeError("selection literal", "a UUID (canonical UUID text)", value);
|
|
220
|
-
}
|
|
221
|
-
return { kind: "value", value: { kind: "uuid", value } };
|
|
222
|
-
}
|
|
223
|
-
case "bytes": {
|
|
224
|
-
if (!(value instanceof Uint8Array)) {
|
|
225
|
-
throw literalShapeError("selection literal", "Uint8Array", value);
|
|
226
|
-
}
|
|
227
|
-
return { kind: "value", value: { kind: "fixedBytes", value } };
|
|
228
|
-
}
|
|
229
|
-
case "interval":
|
|
230
|
-
return intervalLiteral(field.element, value);
|
|
201
|
+
if ("closed" in field) {
|
|
202
|
+
return { kind: "handle", handle: fieldValue("selection literal", field, value) };
|
|
231
203
|
}
|
|
204
|
+
return { kind: "value", value: taggedValueOf("selection literal", field, value) };
|
|
232
205
|
}
|
|
233
|
-
export { assertDeclarationOrderKey, assertDeclarationRecord, bool, bytes, f64, i64, interval, isFloatIntervalValue, isIntervalValue, literalOf, literalShapeError, rosterOf, rostersAgree, signaturesAgree,
|
|
206
|
+
export { assertDeclarationOrderKey, assertDeclarationRecord, bool, bytes, f64, fieldDescriptor, i64, interval, isFloatIntervalValue, isIntervalValue, literalOf, literalShapeError, ownHandles, rosterOf, rostersAgree, signaturesAgree, str, u64, uuid };
|
|
234
207
|
//# sourceMappingURL=fields.js.map
|
package/dist/fields.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAA;AAChC,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"fields.js","sourceRoot":"","sources":["../src/fields.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
declare function isImmutable(input: unknown, visiting?: WeakSet<object>): boolean;
|
|
2
|
+
/** Validation is never skipped for a mutable structural input. Validated
|
|
3
|
+
* immutable outputs can be reused without requiring constructor identity. */
|
|
4
|
+
declare function descriptorCache<A extends object>(parse: (input: unknown) => A): (input: unknown) => A;
|
|
5
|
+
/** Detached inspection data: share proven immutable branches, copy byte
|
|
6
|
+
* buffers and their parents, and preserve references within one snapshot.
|
|
7
|
+
* This is for already checked internal data, not an input validator. */
|
|
8
|
+
declare function snapshotData<A>(input: A, onCopy?: (source: object, snapshot: object) => void): A;
|
|
9
|
+
export { descriptorCache, isImmutable, snapshotData };
|
|
10
|
+
//# sourceMappingURL=immutable.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"immutable.d.ts","sourceRoot":"","sources":["../src/immutable.ts"],"names":[],"mappings":"AAIA,iBAAS,WAAW,CAAC,KAAK,EAAE,OAAO,EAAE,QAAQ,kBAAwB,GAAG,OAAO,CAqB9E;AAED;6EAC6E;AAC7E,iBAAS,eAAe,CAAC,CAAC,SAAS,MAAM,EAAE,KAAK,EAAE,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,KAAK,CAAC,CAc9F;AAED;;wEAEwE;AACxE,iBAAS,YAAY,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,KAAK,IAAI,GAAG,CAAC,CAAA;AA2B1F,OAAO,EAAE,eAAe,EAAE,WAAW,EAAE,YAAY,EAAE,CAAA"}
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
/** Only frozen plain data graphs are stable cache keys. Typed-array contents
|
|
2
|
+
* remain mutable even behind a frozen parent, so they never qualify. */
|
|
3
|
+
const immutable = new WeakSet();
|
|
4
|
+
function isImmutable(input, visiting = new WeakSet()) {
|
|
5
|
+
if (typeof input !== "object" || input === null)
|
|
6
|
+
return typeof input !== "function";
|
|
7
|
+
if (immutable.has(input))
|
|
8
|
+
return true;
|
|
9
|
+
const prototype = Object.getPrototypeOf(input);
|
|
10
|
+
if ((prototype !== Object.prototype && prototype !== null && prototype !== Array.prototype) ||
|
|
11
|
+
!Object.isFrozen(input) ||
|
|
12
|
+
visiting.has(input))
|
|
13
|
+
return false;
|
|
14
|
+
visiting.add(input);
|
|
15
|
+
for (const name of Reflect.ownKeys(input)) {
|
|
16
|
+
const property = Object.getOwnPropertyDescriptor(input, name);
|
|
17
|
+
if (property === undefined || !("value" in property) || !isImmutable(property.value, visiting)) {
|
|
18
|
+
visiting.delete(input);
|
|
19
|
+
return false;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
visiting.delete(input);
|
|
23
|
+
immutable.add(input);
|
|
24
|
+
return true;
|
|
25
|
+
}
|
|
26
|
+
/** Validation is never skipped for a mutable structural input. Validated
|
|
27
|
+
* immutable outputs can be reused without requiring constructor identity. */
|
|
28
|
+
function descriptorCache(parse) {
|
|
29
|
+
const cache = new WeakMap();
|
|
30
|
+
return (input) => {
|
|
31
|
+
if (typeof input === "object" && input !== null) {
|
|
32
|
+
const found = cache.get(input);
|
|
33
|
+
if (found !== undefined)
|
|
34
|
+
return found;
|
|
35
|
+
}
|
|
36
|
+
const result = parse(input);
|
|
37
|
+
if (isImmutable(result)) {
|
|
38
|
+
cache.set(result, result);
|
|
39
|
+
if (typeof input === "object" && input !== null && isImmutable(input))
|
|
40
|
+
cache.set(input, result);
|
|
41
|
+
}
|
|
42
|
+
return result;
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
function snapshotData(input, onCopy) {
|
|
46
|
+
const copied = new WeakMap();
|
|
47
|
+
function visit(value) {
|
|
48
|
+
if (typeof value !== "object" || value === null || isImmutable(value))
|
|
49
|
+
return value;
|
|
50
|
+
const existing = copied.get(value);
|
|
51
|
+
if (existing !== undefined)
|
|
52
|
+
return existing;
|
|
53
|
+
if (value instanceof Uint8Array) {
|
|
54
|
+
const bytes = Uint8Array.from(value);
|
|
55
|
+
copied.set(value, bytes);
|
|
56
|
+
return bytes;
|
|
57
|
+
}
|
|
58
|
+
const result = Array.isArray(value) ? [] : Object.create(Object.getPrototypeOf(value));
|
|
59
|
+
copied.set(value, result);
|
|
60
|
+
for (const name of Reflect.ownKeys(value)) {
|
|
61
|
+
if (Array.isArray(value) && name === "length")
|
|
62
|
+
continue;
|
|
63
|
+
const property = Object.getOwnPropertyDescriptor(value, name);
|
|
64
|
+
if (property === undefined || !("value" in property))
|
|
65
|
+
throw new TypeError("snapshotData requires checked data");
|
|
66
|
+
Object.defineProperty(result, name, { value: visit(property.value), enumerable: property.enumerable === true });
|
|
67
|
+
}
|
|
68
|
+
Object.freeze(result);
|
|
69
|
+
onCopy?.(value, result);
|
|
70
|
+
return result;
|
|
71
|
+
}
|
|
72
|
+
return visit(input);
|
|
73
|
+
}
|
|
74
|
+
export { descriptorCache, isImmutable, snapshotData };
|
|
75
|
+
//# sourceMappingURL=immutable.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"immutable.js","sourceRoot":"","sources":["../src/immutable.ts"],"names":[],"mappings":"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"}
|