@bjornpagen/bumbledb 0.20.2 → 1.0.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 +283 -1611
- package/README.md +156 -118
- package/dist/capacity.d.ts +16 -12
- package/dist/capacity.d.ts.map +1 -1
- package/dist/capacity.js +16 -48
- package/dist/capacity.js.map +1 -1
- package/dist/changes.d.ts +54 -0
- package/dist/changes.d.ts.map +1 -0
- package/dist/changes.js +245 -0
- package/dist/changes.js.map +1 -0
- package/dist/close.d.ts +24 -0
- package/dist/close.d.ts.map +1 -0
- package/dist/close.js +34 -0
- package/dist/close.js.map +1 -0
- package/dist/closed.d.ts +1 -3
- package/dist/closed.d.ts.map +1 -1
- package/dist/closed.js +24 -12
- package/dist/closed.js.map +1 -1
- package/dist/codec.d.ts +56 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/codec.js +289 -0
- package/dist/codec.js.map +1 -0
- package/dist/compile.d.ts +68 -0
- package/dist/compile.d.ts.map +1 -0
- package/dist/compile.js +75 -0
- package/dist/compile.js.map +1 -0
- package/dist/db-native.d.ts +170 -0
- package/dist/db-native.d.ts.map +1 -0
- package/dist/db-native.js +5 -0
- package/dist/db-native.js.map +1 -0
- package/dist/db.d.ts +101 -233
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +232 -1084
- package/dist/db.js.map +1 -1
- package/dist/errors.d.ts +57 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +32 -0
- package/dist/errors.js.map +1 -0
- package/dist/face.d.ts.map +1 -1
- package/dist/face.js +2 -2
- package/dist/face.js.map +1 -1
- package/dist/fields.d.ts +65 -24
- package/dist/fields.d.ts.map +1 -1
- package/dist/fields.js +94 -24
- package/dist/fields.js.map +1 -1
- package/dist/index.d.ts +37 -32
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +17 -21
- package/dist/index.js.map +1 -1
- package/dist/internal/log.d.ts +24 -0
- package/dist/internal/log.d.ts.map +1 -0
- package/dist/internal/log.js +10 -0
- package/dist/internal/log.js.map +1 -0
- package/dist/law.d.ts +8 -13
- package/dist/law.d.ts.map +1 -1
- package/dist/law.js +6 -59
- package/dist/law.js.map +1 -1
- package/dist/lower.d.ts +0 -13
- package/dist/lower.d.ts.map +1 -1
- package/dist/lower.js +9 -17
- package/dist/lower.js.map +1 -1
- package/dist/migration.d.ts +33 -0
- package/dist/migration.d.ts.map +1 -0
- package/dist/migration.js +48 -0
- package/dist/migration.js.map +1 -0
- package/dist/native.d.ts +256 -301
- package/dist/native.d.ts.map +1 -1
- package/dist/native.js +65 -108
- package/dist/native.js.map +1 -1
- package/dist/query/atom.d.ts +24 -13
- package/dist/query/atom.d.ts.map +1 -1
- package/dist/query/atom.js +7 -3
- package/dist/query/atom.js.map +1 -1
- package/dist/query/compute.d.ts +68 -0
- package/dist/query/compute.d.ts.map +1 -0
- package/dist/query/compute.js +141 -0
- package/dist/query/compute.js.map +1 -0
- package/dist/query/find.d.ts +15 -8
- package/dist/query/find.d.ts.map +1 -1
- package/dist/query/find.js +6 -2
- package/dist/query/find.js.map +1 -1
- package/dist/query/lower.d.ts +23 -2
- package/dist/query/lower.d.ts.map +1 -1
- package/dist/query/lower.js +433 -80
- package/dist/query/lower.js.map +1 -1
- package/dist/query/parse-ir.d.ts.map +1 -1
- package/dist/query/parse-ir.js +17 -8
- package/dist/query/parse-ir.js.map +1 -1
- package/dist/query/run.d.ts +12 -2
- package/dist/query/run.d.ts.map +1 -1
- package/dist/query/run.js +26 -9
- package/dist/query/run.js.map +1 -1
- package/dist/query/scope.d.ts +47 -3
- package/dist/query/scope.d.ts.map +1 -1
- package/dist/query/scope.js +83 -19
- package/dist/query/scope.js.map +1 -1
- package/dist/relation.d.ts +3 -8
- package/dist/relation.d.ts.map +1 -1
- package/dist/relation.js +16 -10
- package/dist/relation.js.map +1 -1
- package/dist/result.d.ts +47 -0
- package/dist/result.d.ts.map +1 -0
- package/dist/result.js +50 -0
- package/dist/result.js.map +1 -0
- package/dist/rows.d.ts +69 -0
- package/dist/rows.d.ts.map +1 -0
- package/dist/rows.js +328 -0
- package/dist/rows.js.map +1 -0
- package/dist/runtime-codes.d.ts +2 -0
- package/dist/runtime-codes.d.ts.map +1 -0
- package/dist/runtime-codes.js +19 -0
- package/dist/runtime-codes.js.map +1 -0
- package/dist/runtime-errors.d.ts +106 -0
- package/dist/runtime-errors.d.ts.map +1 -0
- package/dist/runtime-errors.js +62 -0
- package/dist/runtime-errors.js.map +1 -0
- package/dist/runtime-native.d.ts +171 -0
- package/dist/runtime-native.d.ts.map +1 -0
- package/dist/runtime-native.js +5 -0
- package/dist/runtime-native.js.map +1 -0
- package/dist/runtime.d.ts +73 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +293 -0
- package/dist/runtime.js.map +1 -0
- package/dist/scalar.d.ts +165 -0
- package/dist/scalar.d.ts.map +1 -0
- package/dist/scalar.js +344 -0
- package/dist/scalar.js.map +1 -0
- package/dist/schema.d.ts +1 -1
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +34 -37
- package/dist/schema.js.map +1 -1
- package/dist/shape.d.ts +28 -0
- package/dist/shape.d.ts.map +1 -0
- package/dist/shape.js +2 -0
- package/dist/shape.js.map +1 -0
- package/dist/spec.d.ts +27 -3
- package/dist/spec.d.ts.map +1 -1
- package/dist/spec.js +22 -1
- package/dist/spec.js.map +1 -1
- package/dist/statements.d.ts +16 -3
- package/dist/statements.d.ts.map +1 -1
- package/dist/statements.js +54 -28
- package/dist/statements.js.map +1 -1
- package/dist/uuid.d.ts +23 -0
- package/dist/uuid.d.ts.map +1 -0
- package/dist/uuid.js +54 -0
- package/dist/uuid.js.map +1 -0
- package/pack-provenance.json +7 -0
- package/package.json +12 -16
- package/src/capacity.ts +34 -54
- package/src/changes.ts +361 -0
- package/src/close.ts +53 -0
- package/src/closed.ts +25 -19
- package/src/codec.ts +379 -0
- package/src/compile.ts +149 -0
- package/src/db-native.ts +247 -0
- package/src/db.ts +461 -1632
- package/src/errors.ts +50 -0
- package/src/face.ts +2 -2
- package/src/fields.ts +182 -55
- package/src/index.ts +62 -126
- package/src/internal/log.ts +51 -0
- package/src/law.ts +13 -28
- package/src/lower.ts +9 -4
- package/src/migration.ts +69 -0
- package/src/native.ts +326 -487
- package/src/query/atom.ts +61 -25
- package/src/query/compute.ts +237 -0
- package/src/query/find.ts +31 -12
- package/src/query/lower.ts +531 -143
- package/src/query/parse-ir.ts +18 -13
- package/src/query/run.ts +32 -16
- package/src/query/scope.ts +140 -8
- package/src/relation.ts +17 -21
- package/src/result.ts +130 -0
- package/src/rows.ts +404 -0
- package/src/runtime-codes.ts +18 -0
- package/src/runtime-errors.ts +69 -0
- package/src/runtime-native.ts +242 -0
- package/src/runtime.ts +440 -0
- package/src/scalar.ts +560 -0
- package/src/schema.ts +35 -37
- package/src/shape.ts +31 -0
- package/src/spec.ts +33 -3
- package/src/statements.ts +75 -68
- package/src/uuid.ts +69 -0
- package/dist/marshal.d.ts +0 -44
- package/dist/marshal.d.ts.map +0 -1
- package/dist/marshal.js +0 -165
- package/dist/marshal.js.map +0 -1
- package/src/marshal.ts +0 -200
package/dist/changes.js
ADDED
|
@@ -0,0 +1,245 @@
|
|
|
1
|
+
import { Effect, Exit } from "effect";
|
|
2
|
+
import { drainClose, releaseOwner } from "#close.ts";
|
|
3
|
+
import { Schema as CoreSchema, schemaTables } from "#compile.ts";
|
|
4
|
+
import { dbNative } from "#db-native.ts";
|
|
5
|
+
import { lower } from "#lower.ts";
|
|
6
|
+
import { assertHostCellFits, cellOf, recordOf } from "#rows.ts";
|
|
7
|
+
import { nativeOperationWith, policyWire, runtimeHandle } from "#runtime.ts";
|
|
8
|
+
import { DbError } from "#runtime-errors.ts";
|
|
9
|
+
/**
|
|
10
|
+
* Host-copy granularity: one bounded host-to-native message per chunk, so
|
|
11
|
+
* real event-loop turns happen between chunks (each chunk completes through
|
|
12
|
+
* a native callback, not a microtask chain). These are converter
|
|
13
|
+
* granularity bounds, not database-size policy — the draft's aggregate
|
|
14
|
+
* input/working/spill budget is charged natively and is CUMULATIVE across
|
|
15
|
+
* calls and chunks (chunks never reset it).
|
|
16
|
+
*/
|
|
17
|
+
const CHUNK_BYTES = 65536n;
|
|
18
|
+
const CHUNK_ROWS = 4096;
|
|
19
|
+
const changesInternals = new WeakMap();
|
|
20
|
+
/** Private cross-module accessor (db.apply retains the native ChangeSet). */
|
|
21
|
+
function internalChanges(value) {
|
|
22
|
+
return changesInternals.get(value);
|
|
23
|
+
}
|
|
24
|
+
function refusal(operation, reason) {
|
|
25
|
+
return new DbError({ operation, reason: { _tag: reason } });
|
|
26
|
+
}
|
|
27
|
+
function eventLoopTurn() {
|
|
28
|
+
return Effect.callback((resume) => {
|
|
29
|
+
const id = setImmediate(() => resume(Effect.void));
|
|
30
|
+
return Effect.sync(() => clearImmediate(id));
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
function hostFactCharge(relation, record) {
|
|
34
|
+
const data = relation.data;
|
|
35
|
+
let bytes = 0n;
|
|
36
|
+
for (const declared of data.fields) {
|
|
37
|
+
const value = record[declared.name];
|
|
38
|
+
if (value === undefined) {
|
|
39
|
+
throw refusal("ChangeDraft.ingest", "InvalidArgument");
|
|
40
|
+
}
|
|
41
|
+
bytes += assertHostCellFits(`relation ${data.name} field ${declared.name}`, value, CHUNK_BYTES);
|
|
42
|
+
}
|
|
43
|
+
return bytes;
|
|
44
|
+
}
|
|
45
|
+
function projectFact(relation, record) {
|
|
46
|
+
const data = relation.data;
|
|
47
|
+
const cells = [];
|
|
48
|
+
for (const declared of data.fields) {
|
|
49
|
+
const value = record[declared.name];
|
|
50
|
+
if (value === undefined) {
|
|
51
|
+
throw refusal("ChangeDraft.ingest", "InvalidArgument");
|
|
52
|
+
}
|
|
53
|
+
cells.push(cellOf(`relation ${data.name} field ${declared.name}`, declared.field, value));
|
|
54
|
+
}
|
|
55
|
+
return cells;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Pulls one bounded chunk off the caller's iterator. Host length is judged
|
|
59
|
+
* before any string scan or byte copy. A leftover fact that does not fit
|
|
60
|
+
* the current chunk is returned unconverted for the next turn.
|
|
61
|
+
*/
|
|
62
|
+
function pullChunk(relation, iterator, pending) {
|
|
63
|
+
const cells = [];
|
|
64
|
+
let rows = 0n;
|
|
65
|
+
let bytes = 0n;
|
|
66
|
+
let leftover;
|
|
67
|
+
let current = pending;
|
|
68
|
+
while (rows < BigInt(CHUNK_ROWS) && leftover === undefined) {
|
|
69
|
+
if (current === undefined) {
|
|
70
|
+
const next = iterator.next();
|
|
71
|
+
if (next.done === true) {
|
|
72
|
+
return { rows, cells, done: true, leftover: undefined };
|
|
73
|
+
}
|
|
74
|
+
current = next.value;
|
|
75
|
+
}
|
|
76
|
+
const record = recordOf(current);
|
|
77
|
+
const charge = hostFactCharge(relation, record);
|
|
78
|
+
if (rows > 0n && bytes + charge > CHUNK_BYTES) {
|
|
79
|
+
leftover = current;
|
|
80
|
+
break;
|
|
81
|
+
}
|
|
82
|
+
cells.push(...projectFact(relation, record));
|
|
83
|
+
bytes += charge;
|
|
84
|
+
rows += 1n;
|
|
85
|
+
current = undefined;
|
|
86
|
+
}
|
|
87
|
+
return { rows, cells, done: false, leftover };
|
|
88
|
+
}
|
|
89
|
+
function spendAndDrain(state, operation) {
|
|
90
|
+
return Effect.suspend(() => {
|
|
91
|
+
if (state.spent) {
|
|
92
|
+
return Effect.void;
|
|
93
|
+
}
|
|
94
|
+
state.spent = true;
|
|
95
|
+
// Tracked drain: join the native close transition; the report is
|
|
96
|
+
// diagnostic here (the ingestion failure itself is the caller's
|
|
97
|
+
// error), but native Closing accounting is never dropped.
|
|
98
|
+
return drainClose(operation, (callback) => dbNative.runtimeDraftClose(state.handle, callback)).pipe(Effect.asVoid);
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
function ingest(state, operation, relation, rows) {
|
|
102
|
+
const verb = operation === "ChangeDraft.insert" ? dbNative.runtimeDraftInsert : dbNative.runtimeDraftDelete;
|
|
103
|
+
return Effect.gen(function* () {
|
|
104
|
+
if (state.spent) {
|
|
105
|
+
return yield* Effect.fail(refusal(operation, "SpentHandle"));
|
|
106
|
+
}
|
|
107
|
+
if (state.inFlight) {
|
|
108
|
+
// Reentrant construction refuses AND spends/drains — there is
|
|
109
|
+
// no implicit queue (chapter 35).
|
|
110
|
+
yield* spendAndDrain(state, operation);
|
|
111
|
+
return yield* Effect.fail(refusal(operation, "SpentHandle"));
|
|
112
|
+
}
|
|
113
|
+
if (state.theory.relations[relation.name] !== relation) {
|
|
114
|
+
return yield* Effect.fail(refusal(operation, "InvalidArgument"));
|
|
115
|
+
}
|
|
116
|
+
const tables = schemaTables(state.theory);
|
|
117
|
+
const relationId = tables.relationIds.get(relation.name);
|
|
118
|
+
if (relationId === undefined) {
|
|
119
|
+
return yield* Effect.fail(refusal(operation, "InvalidArgument"));
|
|
120
|
+
}
|
|
121
|
+
state.inFlight = true;
|
|
122
|
+
const wire = yield* Effect.try({
|
|
123
|
+
try: () => policyWire(state.policy, operation),
|
|
124
|
+
catch: () => refusal(operation, "InvalidArgument")
|
|
125
|
+
});
|
|
126
|
+
const body = Effect.gen(function* () {
|
|
127
|
+
const iterator = rows[Symbol.iterator]();
|
|
128
|
+
let leftover;
|
|
129
|
+
let done = false;
|
|
130
|
+
while (!done) {
|
|
131
|
+
const chunk = yield* Effect.try({
|
|
132
|
+
try: () => pullChunk(relation, iterator, leftover),
|
|
133
|
+
catch: (cause) => (cause instanceof DbError ? cause : refusal(operation, "InvalidArgument"))
|
|
134
|
+
}).pipe(Effect.catch((error) => spendAndDrain(state, operation).pipe(Effect.andThen(Effect.fail(error)))));
|
|
135
|
+
leftover = chunk.leftover;
|
|
136
|
+
done = chunk.done && leftover === undefined;
|
|
137
|
+
if (chunk.rows === 0n) {
|
|
138
|
+
continue;
|
|
139
|
+
}
|
|
140
|
+
yield* eventLoopTurn();
|
|
141
|
+
yield* nativeOperationWith(operation, (callback) => verb(state.handle, wire, relationId, chunk.rows, chunk.cells, callback), dbNative.runtimeReportTake, () => undefined).pipe(Effect.catch((error) => Effect.sync(() => {
|
|
142
|
+
state.spent = true;
|
|
143
|
+
}).pipe(Effect.andThen(Effect.fail(error)))));
|
|
144
|
+
}
|
|
145
|
+
});
|
|
146
|
+
return yield* Effect.onExit(body, (exit) => {
|
|
147
|
+
state.inFlight = false;
|
|
148
|
+
if (state.spent || Exit.isSuccess(exit)) {
|
|
149
|
+
return Effect.void;
|
|
150
|
+
}
|
|
151
|
+
return spendAndDrain(state, operation);
|
|
152
|
+
});
|
|
153
|
+
});
|
|
154
|
+
}
|
|
155
|
+
function makeChangeSet(handle, schemaId) {
|
|
156
|
+
const value = {
|
|
157
|
+
schemaId,
|
|
158
|
+
close() {
|
|
159
|
+
return drainClose("ChangeSet.close", (callback) => dbNative.runtimeChangesClose(handle, callback));
|
|
160
|
+
}
|
|
161
|
+
};
|
|
162
|
+
Object.freeze(value);
|
|
163
|
+
changesInternals.set(value, { handle, schemaId, closed: false });
|
|
164
|
+
return value;
|
|
165
|
+
}
|
|
166
|
+
function makeDraft(state, schemaId) {
|
|
167
|
+
const draft = {
|
|
168
|
+
insert(relation, rows) {
|
|
169
|
+
return ingest(state, "ChangeDraft.insert", relation, rows);
|
|
170
|
+
},
|
|
171
|
+
delete(relation, rows) {
|
|
172
|
+
return ingest(state, "ChangeDraft.delete", relation, rows);
|
|
173
|
+
},
|
|
174
|
+
finish() {
|
|
175
|
+
return Effect.acquireRelease(Effect.gen(function* () {
|
|
176
|
+
if (state.spent) {
|
|
177
|
+
return yield* Effect.fail(refusal("ChangeDraft.finish", "SpentHandle"));
|
|
178
|
+
}
|
|
179
|
+
if (state.inFlight) {
|
|
180
|
+
yield* spendAndDrain(state, "ChangeDraft.finish");
|
|
181
|
+
return yield* Effect.fail(refusal("ChangeDraft.finish", "SpentHandle"));
|
|
182
|
+
}
|
|
183
|
+
// Finish CONSUMES the draft, success or failure.
|
|
184
|
+
state.spent = true;
|
|
185
|
+
const wire = yield* nativeOperationWith("ChangeDraft.finish", (callback) => dbNative.runtimeDraftFinish(state.handle, policyWire(state.policy, "ChangeDraft.finish"), callback), dbNative.runtimeChangesTake, (value) => value);
|
|
186
|
+
return makeChangeSet(wire.changes, schemaId);
|
|
187
|
+
}), (changes) => Effect.suspend(() => {
|
|
188
|
+
const internal = changesInternals.get(changes);
|
|
189
|
+
if (internal === undefined || internal.closed) {
|
|
190
|
+
return Effect.void;
|
|
191
|
+
}
|
|
192
|
+
internal.closed = true;
|
|
193
|
+
return releaseOwner("ChangeSet.close", (callback) => dbNative.runtimeChangesClose(internal.handle, callback));
|
|
194
|
+
}), { interruptible: true });
|
|
195
|
+
},
|
|
196
|
+
close() {
|
|
197
|
+
return Effect.suspend(() => {
|
|
198
|
+
state.spent = true;
|
|
199
|
+
return drainClose("ChangeDraft.close", (callback) => dbNative.runtimeDraftClose(state.handle, callback));
|
|
200
|
+
});
|
|
201
|
+
}
|
|
202
|
+
};
|
|
203
|
+
return Object.freeze(draft);
|
|
204
|
+
}
|
|
205
|
+
/**
|
|
206
|
+
* `ChangeSet.builder(schema, work)` — lazy scoped acquisition of a
|
|
207
|
+
* database-free draft (chapter 35 roster). Requires the acquired
|
|
208
|
+
* `NativeRuntime`; the draft's native resources release with its scope, and
|
|
209
|
+
* the scope finalizer surfaces incomplete/failed teardown as a
|
|
210
|
+
* `CloseFailure` defect.
|
|
211
|
+
*/
|
|
212
|
+
const builder = Effect.fn("ChangeSet.builder")(function* (schema, work) {
|
|
213
|
+
const handle = yield* runtimeHandle();
|
|
214
|
+
const compiled = yield* CoreSchema.compile(schema, work);
|
|
215
|
+
const spec = lower(schema);
|
|
216
|
+
return yield* Effect.acquireRelease(Effect.gen(function* () {
|
|
217
|
+
const draftHandle = yield* nativeOperationWith("ChangeSet.builder", (callback) => dbNative.runtimeDraftOpen(handle, policyWire(work, "ChangeSet.builder"), spec, callback), dbNative.runtimeDraftTake, (value) => value);
|
|
218
|
+
const state = {
|
|
219
|
+
handle: draftHandle,
|
|
220
|
+
policy: work,
|
|
221
|
+
theory: schema,
|
|
222
|
+
spent: false,
|
|
223
|
+
inFlight: false
|
|
224
|
+
};
|
|
225
|
+
const draft = makeDraft(state, compiled.schemaId);
|
|
226
|
+
draftStates.set(draft, state);
|
|
227
|
+
return draft;
|
|
228
|
+
}), (draft) => Effect.suspend(() => {
|
|
229
|
+
const state = draftStates.get(draft);
|
|
230
|
+
if (state === undefined) {
|
|
231
|
+
return Effect.void;
|
|
232
|
+
}
|
|
233
|
+
// Idempotent: repeated close joins the same native
|
|
234
|
+
// transition; the finalizer runs it unconditionally so an
|
|
235
|
+
// abandoned draft is always drained.
|
|
236
|
+
state.spent = true;
|
|
237
|
+
return releaseOwner("ChangeDraft.close", (callback) => dbNative.runtimeDraftClose(state.handle, callback));
|
|
238
|
+
}), { interruptible: true });
|
|
239
|
+
});
|
|
240
|
+
// The draft value → state registry lets the scope finalizer reach the
|
|
241
|
+
// native handle without exposing it on the public capability.
|
|
242
|
+
const draftStates = new WeakMap();
|
|
243
|
+
const ChangeSet = Object.freeze({ builder });
|
|
244
|
+
export { ChangeSet, internalChanges };
|
|
245
|
+
//# sourceMappingURL=changes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"changes.js","sourceRoot":"","sources":["../src/changes.ts"],"names":[],"mappings":"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"}
|
package/dist/close.d.ts
ADDED
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import type { CloseReport } from "./runtime-errors.js";
|
|
3
|
+
/**
|
|
4
|
+
* Shared close/drain adapters for scoped core owners (drafts, changes,
|
|
5
|
+
* snapshots, sessions, results, cursors, databases). One policy, chapter
|
|
6
|
+
* 35's: early `close()` starts/joins the native close transition and
|
|
7
|
+
* returns the honest {@link CloseReport}; a scope FINALIZER runs the same
|
|
8
|
+
* close and surfaces `incomplete`/`failed` as a structured `CloseFailure`
|
|
9
|
+
* DEFECT in the finalizer Cause — never catch-and-log, never false
|
|
10
|
+
* quiescence. Teardown uses the runtime's reserved cleanup envelope
|
|
11
|
+
* natively; repeated close joins the same stored transition (idempotent).
|
|
12
|
+
*/
|
|
13
|
+
import type { CloseWire } from "./runtime-native.js";
|
|
14
|
+
/**
|
|
15
|
+
* Adapts one native close verb to `Effect<CloseReport>`: registration is
|
|
16
|
+
* synchronous, completion resumes exactly once, and the whole wait is
|
|
17
|
+
* uninterruptible — a close is a bounded registration/drain handshake, not
|
|
18
|
+
* long maskable work (the native side owns the cleanup deadline).
|
|
19
|
+
*/
|
|
20
|
+
declare function drainClose(operation: string, start: (callback: (report: CloseWire) => void) => void): Effect.Effect<CloseReport>;
|
|
21
|
+
/** The finalizer policy: run the close, then die on incomplete/failed (E stays never). */
|
|
22
|
+
declare function releaseOwner(operation: string, start: (callback: (report: CloseWire) => void) => void): Effect.Effect<void>;
|
|
23
|
+
export { drainClose, releaseOwner };
|
|
24
|
+
//# sourceMappingURL=close.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"close.d.ts","sourceRoot":"","sources":["../src/close.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAA;AAErD;;;;;;;;;GASG;AACH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAA;AASnD;;;;;GAKG;AACH,iBAAS,UAAU,CAClB,SAAS,EAAE,MAAM,EACjB,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,KAAK,IAAI,GACpD,MAAM,CAAC,MAAM,CAAC,WAAW,CAAC,CAa5B;AAED,0FAA0F;AAC1F,iBAAS,YAAY,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,KAAK,IAAI,KAAK,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAEpH;AAED,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAA"}
|
package/dist/close.js
ADDED
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { Effect } from "effect";
|
|
2
|
+
import { finalizeClose } from "#runtime.ts";
|
|
3
|
+
import { DbError } from "#runtime-errors.ts";
|
|
4
|
+
function reportOf(operation, wire) {
|
|
5
|
+
if (wire.kind === "failed") {
|
|
6
|
+
return { kind: "failed", error: new DbError({ operation, reason: { _tag: "Internal" } }) };
|
|
7
|
+
}
|
|
8
|
+
return wire;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Adapts one native close verb to `Effect<CloseReport>`: registration is
|
|
12
|
+
* synchronous, completion resumes exactly once, and the whole wait is
|
|
13
|
+
* uninterruptible — a close is a bounded registration/drain handshake, not
|
|
14
|
+
* long maskable work (the native side owns the cleanup deadline).
|
|
15
|
+
*/
|
|
16
|
+
function drainClose(operation, start) {
|
|
17
|
+
return Effect.callback((resume) => {
|
|
18
|
+
try {
|
|
19
|
+
start((report) => resume(Effect.succeed(reportOf(operation, report))));
|
|
20
|
+
}
|
|
21
|
+
catch (cause) {
|
|
22
|
+
resume(Effect.succeed({
|
|
23
|
+
kind: "failed",
|
|
24
|
+
error: cause instanceof DbError ? cause : new DbError({ operation, reason: { _tag: "Internal" } })
|
|
25
|
+
}));
|
|
26
|
+
}
|
|
27
|
+
}).pipe(Effect.uninterruptible);
|
|
28
|
+
}
|
|
29
|
+
/** The finalizer policy: run the close, then die on incomplete/failed (E stays never). */
|
|
30
|
+
function releaseOwner(operation, start) {
|
|
31
|
+
return drainClose(operation, start).pipe(Effect.flatMap((report) => finalizeClose(operation, report)));
|
|
32
|
+
}
|
|
33
|
+
export { drainClose, releaseOwner };
|
|
34
|
+
//# sourceMappingURL=close.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"close.js","sourceRoot":"","sources":["../src/close.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAC/B,OAAO,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AAE3C,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAa5C,SAAS,QAAQ,CAAC,SAAiB,EAAE,IAAe;IACnD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC5B,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC,EAAE,CAAA;IAC3F,CAAC;IACD,OAAO,IAAI,CAAA;AACZ,CAAC;AAED;;;;;GAKG;AACH,SAAS,UAAU,CAClB,SAAiB,EACjB,KAAsD;IAEtD,OAAO,MAAM,CAAC,QAAQ,CAAc,CAAC,MAAM,EAAE,EAAE;QAC9C,IAAI,CAAC;YACJ,KAAK,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAA;QACvE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YAChB,MAAM,CACL,MAAM,CAAC,OAAO,CAAC;gBACd,IAAI,EAAE,QAAQ;gBACd,KAAK,EAAE,KAAK,YAAY,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,EAAE,SAAS,EAAE,MAAM,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,EAAE,CAAC;aAClG,CAAC,CACF,CAAA;QACF,CAAC;IACF,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,eAAe,CAAC,CAAA;AAChC,CAAC;AAED,0FAA0F;AAC1F,SAAS,YAAY,CAAC,SAAiB,EAAE,KAAsD;IAC9F,OAAO,UAAU,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,aAAa,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;AACvG,CAAC;AAED,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,CAAA"}
|
package/dist/closed.d.ts
CHANGED
|
@@ -2,9 +2,7 @@ import { type AnyClosedIdField, type AnyField, type ClosedHandleTuple, type Clos
|
|
|
2
2
|
import type { AnyRelation, RelationField } from "./relation.js";
|
|
3
3
|
import { type SelectionBinding, type SelectionInput } from "./relation.js";
|
|
4
4
|
import type { LiteralSpec } from "./spec.js";
|
|
5
|
-
type PayloadField =
|
|
6
|
-
readonly fresh: true;
|
|
7
|
-
}>;
|
|
5
|
+
type PayloadField = AnyField;
|
|
8
6
|
type PayloadColumns = Record<string, PayloadField> & {
|
|
9
7
|
readonly id?: never;
|
|
10
8
|
};
|
package/dist/closed.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"closed.d.ts","sourceRoot":"","sources":["../src/closed.ts"],"names":[],"mappings":"AACA,OAAO,EACN,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EAGb,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAElB,KAAK,KAAK,EAEV,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAoB,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAC3F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAE3C,KAAK,YAAY,GAAG,
|
|
1
|
+
{"version":3,"file":"closed.d.ts","sourceRoot":"","sources":["../src/closed.ts"],"names":[],"mappings":"AACA,OAAO,EACN,KAAK,gBAAgB,EACrB,KAAK,QAAQ,EAGb,KAAK,iBAAiB,EACtB,KAAK,aAAa,EAElB,KAAK,KAAK,EAEV,MAAM,YAAY,CAAA;AACnB,OAAO,KAAK,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,cAAc,CAAA;AAC9D,OAAO,EAAoB,KAAK,gBAAgB,EAAE,KAAK,cAAc,EAAE,MAAM,cAAc,CAAA;AAC3F,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,UAAU,CAAA;AAE3C,KAAK,YAAY,GAAG,QAAQ,CAAA;AAE5B,KAAK,cAAc,GAAG,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,GAAG;IAAE,QAAQ,CAAC,EAAE,CAAC,EAAE,KAAK,CAAA;CAAE,CAAA;AAE5E,UAAU,YAAY;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,YAAY,CAAA;CAC5B;AAED,UAAU,SAAS;IAClB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,MAAM,EAAE,SAAS,WAAW,EAAE,CAAA;CACvC;AAED,UAAU,UAAU;IACnB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAA;IACnC,QAAQ,CAAC,OAAO,EAAE,SAAS,YAAY,EAAE,CAAA;IACzC,QAAQ,CAAC,IAAI,EAAE,SAAS,SAAS,EAAE,CAAA;CACnC;AAED,KAAK,QAAQ,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI;IAAE,QAAQ,EAAE,CAAC,IAAI,MAAM,IAAI,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;CAAE,CAAA;AAEzG,KAAK,MAAM,CAAC,OAAO,SAAS,MAAM,EAAE,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI;IAChF,QAAQ,EAAE,CAAC,IAAI,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC;CACvC,CAAA;AAED,UAAU,UAAU,CACnB,IAAI,SAAS,MAAM,EACnB,OAAO,SAAS,iBAAiB,EACjC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;IAEzC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAA;IAEnB,QAAQ,CAAC,EAAE,EAAE,aAAa,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACzC,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IAEzB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,CAAA;IAE9C,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAA;CACtB;AAED,KAAK,oBAAoB,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAA;AAE3F,UAAU,cAAc,CACvB,IAAI,SAAS,MAAM,EACnB,OAAO,SAAS,iBAAiB,EACjC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;IAEzC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;IAC9C,QAAQ,CAAC,SAAS,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAC/C;AAED,UAAU,iBAAiB;IAC1B,QAAQ,CAAC,QAAQ,EAAE,SAAS,CAAA;IAC5B,QAAQ,CAAC,SAAS,EAAE,SAAS,gBAAgB,EAAE,CAAA;CAC/C;AAED,UAAU,gBAAgB,CACzB,IAAI,SAAS,MAAM,EACnB,OAAO,SAAS,iBAAiB,EACjC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC;IAEzC,KAAK,CAAC,SAAS,EAAE,oBAAoB,CAAC,IAAI,CAAC,GAAG,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;CACjF;AAED,KAAK,MAAM,CAAC,IAAI,SAAS,MAAM,EAAE,OAAO,SAAS,iBAAiB,EAAE,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI;IAChH,MAAM,IAAI;CACV,SAAS,CAAC,KAAK,CAAC,GACd,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,GAC/B,UAAU,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,GAAG,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;AAE1E,UAAU,SAAS;IAClB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,EAAE,EAAE,gBAAgB,CAAA;IAC7B,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAA;IACzB,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAA;IACjD,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC,CAAA;CACxD;AAED,iBAAS,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,MAAM,IAAI,SAAS,CAE5E;AAED,iBAAS,cAAc,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,GAAG,SAAS,aAAa,EAAE,CAKjF;AAED,iBAAS,aAAa,CAAC,MAAM,EAAE,WAAW,GAAG,SAAS,EAAE,SAAS,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS,CAK/F;AAyED,iBAAS,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,MAAM,EAAE,KAAK,CAAC,OAAO,SAAS,iBAAiB,EACjF,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,GACd,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,CAAA;AAE9C,iBAAS,MAAM,CAAC,KAAK,CAAC,IAAI,SAAS,MAAM,EAAE,KAAK,CAAC,OAAO,SAAS,iBAAiB,EAAE,KAAK,CAAC,IAAI,SAAS,cAAc,EACpH,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,OAAO,EAChB,OAAO,EAAE,IAAI,EACb,MAAM,EAAE,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,IAAI,CAAC,GACnC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,CAAA;AAyJ9B,YAAY,EACX,SAAS,EACT,iBAAiB,EACjB,QAAQ,EACR,MAAM,EACN,MAAM,EACN,YAAY,EACZ,UAAU,EACV,UAAU,EACV,SAAS,EACT,gBAAgB,EAChB,oBAAoB,EACpB,YAAY,EACZ,cAAc,EACd,CAAA;AACD,OAAO,EAAE,MAAM,EAAE,cAAc,EAAE,aAAa,EAAE,cAAc,EAAE,CAAA"}
|
package/dist/closed.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import
|
|
1
|
+
import { AuthoringError } from "#errors.ts";
|
|
2
2
|
import { assertDeclarationOrderKey, assertDeclarationRecord, literalOf } from "#fields.ts";
|
|
3
3
|
import { resolveSelection } from "#relation.ts";
|
|
4
4
|
function isClosedMember(member) {
|
|
@@ -61,25 +61,33 @@ function mintAxioms(name, handles, cols, axioms) {
|
|
|
61
61
|
}
|
|
62
62
|
Object.freeze(out);
|
|
63
63
|
if (!axiomsMinted(out, handles, cols)) {
|
|
64
|
-
throw
|
|
64
|
+
throw new AuthoringError({ message: `closed relation ${name}: axiom-row minting incomplete` });
|
|
65
65
|
}
|
|
66
66
|
return out;
|
|
67
67
|
}
|
|
68
68
|
function closed(name, handles, columns, axioms) {
|
|
69
69
|
if (!Array.isArray(handles)) {
|
|
70
|
-
throw
|
|
70
|
+
throw new AuthoringError({
|
|
71
|
+
message: `closed relation ${name}: payload columns declared without ground axioms — the payload tier is spelled closed(name, handles, columns, axioms)`
|
|
72
|
+
});
|
|
71
73
|
}
|
|
72
74
|
if (!isHandleTuple(handles)) {
|
|
73
|
-
throw
|
|
75
|
+
throw new AuthoringError({
|
|
76
|
+
message: `closed relation ${name}: at least one handle is required (an empty vocabulary declares nothing)`
|
|
77
|
+
});
|
|
74
78
|
}
|
|
75
79
|
if (columns === undefined) {
|
|
76
80
|
if (axioms !== undefined) {
|
|
77
|
-
throw
|
|
81
|
+
throw new AuthoringError({
|
|
82
|
+
message: `closed relation ${name}: the bare tier declares no columns, so ground axioms are inadmissible`
|
|
83
|
+
});
|
|
78
84
|
}
|
|
79
85
|
return closedBare(name, handles);
|
|
80
86
|
}
|
|
81
87
|
if (axioms === undefined) {
|
|
82
|
-
throw
|
|
88
|
+
throw new AuthoringError({
|
|
89
|
+
message: `closed relation ${name}: payload columns declared without ground axioms — the payload tier is spelled closed(name, handles, columns, axioms)`
|
|
90
|
+
});
|
|
83
91
|
}
|
|
84
92
|
return closedPayload(name, handles, columns, axioms);
|
|
85
93
|
}
|
|
@@ -93,7 +101,7 @@ function closedBare(name, handles) {
|
|
|
93
101
|
}
|
|
94
102
|
Object.freeze(empty);
|
|
95
103
|
if (!axiomsMinted(empty, handles, [])) {
|
|
96
|
-
throw
|
|
104
|
+
throw new AuthoringError({ message: `closed relation ${name}: bare-tier axiom-row minting incomplete` });
|
|
97
105
|
}
|
|
98
106
|
return mintClosed(name, handles, {}, empty);
|
|
99
107
|
}
|
|
@@ -107,7 +115,7 @@ function closedPayload(name, handles, columns, axioms) {
|
|
|
107
115
|
assertDeclarationOrderKey(`closed relation ${name} handle`, handle);
|
|
108
116
|
}
|
|
109
117
|
if (!handleKeysOwn(axioms, handles)) {
|
|
110
|
-
throw
|
|
118
|
+
throw new AuthoringError({ message: `closed relation ${name}: handle enumeration incomplete` });
|
|
111
119
|
}
|
|
112
120
|
return mintClosed(name, handles, columns, axioms);
|
|
113
121
|
}
|
|
@@ -120,7 +128,7 @@ function mintClosed(name, handles, columns, axioms) {
|
|
|
120
128
|
const seen = new Set();
|
|
121
129
|
for (const handle of handles) {
|
|
122
130
|
if (seen.has(handle)) {
|
|
123
|
-
throw
|
|
131
|
+
throw new AuthoringError({ message: `closed relation ${name}: duplicate handle ${handle}` });
|
|
124
132
|
}
|
|
125
133
|
seen.add(handle);
|
|
126
134
|
}
|
|
@@ -130,7 +138,9 @@ function mintClosed(name, handles, columns, axioms) {
|
|
|
130
138
|
for (const [columnName, field] of Object.entries(columns)) {
|
|
131
139
|
assertDeclarationOrderKey(`closed relation ${name} column`, columnName);
|
|
132
140
|
if (columnName === "id") {
|
|
133
|
-
throw
|
|
141
|
+
throw new AuthoringError({
|
|
142
|
+
message: `closed relation ${name}: the payload column id collides with the sealed shape's synthetic id (the relation mints its own id at ordinal 0; name the column something else)`
|
|
143
|
+
});
|
|
134
144
|
}
|
|
135
145
|
cols.push(Object.freeze({ name: columnName, field }));
|
|
136
146
|
}
|
|
@@ -156,7 +166,9 @@ function mintClosed(name, handles, columns, axioms) {
|
|
|
156
166
|
function where(selection) {
|
|
157
167
|
const owner = holder.value;
|
|
158
168
|
if (owner === undefined) {
|
|
159
|
-
throw
|
|
169
|
+
throw new AuthoringError({
|
|
170
|
+
message: `closed relation ${name}: self-reference read before construction completed`
|
|
171
|
+
});
|
|
160
172
|
}
|
|
161
173
|
return Object.freeze({
|
|
162
174
|
relation: owner,
|
|
@@ -166,7 +178,7 @@ function mintClosed(name, handles, columns, axioms) {
|
|
|
166
178
|
const core = { name, id, data, axioms: axiomsOut, columns: columnsOut };
|
|
167
179
|
const value = cols.length > 0 ? Object.freeze({ ...core, where }) : Object.freeze(core);
|
|
168
180
|
if (!surfaceMinted(value, cols)) {
|
|
169
|
-
throw
|
|
181
|
+
throw new AuthoringError({ message: `closed relation ${name}: ergonomic-surface minting incomplete` });
|
|
170
182
|
}
|
|
171
183
|
holder.value = value;
|
|
172
184
|
return value;
|
package/dist/closed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"closed.js","sourceRoot":"","sources":["../src/closed.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"closed.js","sourceRoot":"","sources":["../src/closed.ts"],"names":[],"mappings":"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"}
|
package/dist/codec.d.ts
ADDED
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
import { Effect, Schema as EffectSchema, Result } from "effect";
|
|
2
|
+
import type { AnyRelation, Fact } from "./relation.js";
|
|
3
|
+
import type { ExecutionPolicy } from "./runtime.js";
|
|
4
|
+
import { DbError } from "./runtime-errors.js";
|
|
5
|
+
import type { AnySchema } from "./schema.js";
|
|
6
|
+
import type { Rel } from "./shape.js";
|
|
7
|
+
/**
|
|
8
|
+
* Boundary row codecs, derived from the core relation descriptors — never a
|
|
9
|
+
* second hand-maintained field roster (chapter 35).
|
|
10
|
+
*
|
|
11
|
+
* Two layers:
|
|
12
|
+
*
|
|
13
|
+
* 1. The CANONICAL native row codec: `encodeRows`/`decodeRows` run the
|
|
14
|
+
* same charged native implementation the engine, log and migrations
|
|
15
|
+
* share (owned bytes in, owned typed rows out; untrusted input cannot
|
|
16
|
+
* inject native capabilities). Effect-only, `NativeRuntime` required.
|
|
17
|
+
* 2. The schema-tagged JSON VALUE form for HTTP/export boundaries
|
|
18
|
+
* (chapter 30): every `f64` — finite included — is
|
|
19
|
+
* `{"$f64":"<16 lowercase hex digits>"}` of canonical binary64 bits;
|
|
20
|
+
* integers are canonical decimal strings; `Uuid` is canonical UUID;
|
|
21
|
+
* bytes use ONE strict lowercase-hex encoding; intervals are
|
|
22
|
+
* `{start,end}` in their element encoding; closed references are handle
|
|
23
|
+
* names. `JSON.stringify` of raw numbers is NOT the database value
|
|
24
|
+
* wire codec — it loses infinities/NaN and cannot encode BigInt.
|
|
25
|
+
* Decoders reject malformed widths, unknown tags and noncanonical
|
|
26
|
+
* representations. These are pure bounded per-row functions.
|
|
27
|
+
*/
|
|
28
|
+
/** The typed row shape: a schema plus one of its relations. */
|
|
29
|
+
interface RowShape<R extends AnyRelation> {
|
|
30
|
+
readonly schema: AnySchema;
|
|
31
|
+
readonly relation: R;
|
|
32
|
+
}
|
|
33
|
+
declare function rowShape<S extends AnySchema, R extends Rel<S>>(schema: S, relation: R): RowShape<R>;
|
|
34
|
+
/** Pure schema-tagged JSON encoding of owned rows (bounded per call). */
|
|
35
|
+
declare function encodeBoundaryRows<R extends AnyRelation>(relation: R, rows: Iterable<Fact<R>>): Result.Result<ReadonlyArray<Readonly<Record<string, unknown>>>, DbError>;
|
|
36
|
+
/** Pure strict decoding of schema-tagged JSON rows; any refusal is typed. */
|
|
37
|
+
declare function decodeBoundaryRows<R extends AnyRelation>(relation: R, input: unknown): Result.Result<ReadonlyArray<Fact<R>>, DbError>;
|
|
38
|
+
/**
|
|
39
|
+
* An Effect Schema for one relation's typed row, DERIVED from the core
|
|
40
|
+
* descriptors (a validation-only declaration; the canonical `$f64`/decimal
|
|
41
|
+
* wire form stays this module's explicit codec — Effect Schema's generic
|
|
42
|
+
* JSON number encoding is not Bumbledb's `$f64` codec).
|
|
43
|
+
*/
|
|
44
|
+
declare function rowSchema<R extends AnyRelation>(relation: R): EffectSchema.declare<Fact<R>, Fact<R>>;
|
|
45
|
+
/**
|
|
46
|
+
* The charged CANONICAL native row codec (chapter 35 roster): owned bytes
|
|
47
|
+
* out, owned typed rows back in — the same implementation log sealing and
|
|
48
|
+
* migrations use. Binding parameters is ingestion: input must stay stable
|
|
49
|
+
* through execution, and no native work starts before the checked owned
|
|
50
|
+
* chunk exists.
|
|
51
|
+
*/
|
|
52
|
+
declare const encodeRows: <R extends AnyRelation>(shape: RowShape<R>, rows: Iterable<Fact<R>>, work: ExecutionPolicy) => Effect.Effect<Uint8Array<ArrayBufferLike>, DbError, import("./runtime.js").NativeRuntime>;
|
|
53
|
+
declare const decodeRows: <R extends AnyRelation>(shape: RowShape<R>, input: Uint8Array<ArrayBufferLike>, work: ExecutionPolicy) => Effect.Effect<readonly Fact<R>[], DbError, import("./runtime.js").NativeRuntime>;
|
|
54
|
+
export type { RowShape };
|
|
55
|
+
export { decodeBoundaryRows, decodeRows, encodeBoundaryRows, encodeRows, rowSchema, rowShape };
|
|
56
|
+
//# sourceMappingURL=codec.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec.d.ts","sourceRoot":"","sources":["../src/codec.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,IAAI,YAAY,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAM/D,OAAO,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,cAAc,CAAA;AAGrD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAElD,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC5C,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,WAAW,CAAA;AAIpC;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,+DAA+D;AAC/D,UAAU,QAAQ,CAAC,CAAC,SAAS,WAAW;IACvC,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAA;IAC1B,QAAQ,CAAC,QAAQ,EAAE,CAAC,CAAA;CACpB;AAED,iBAAS,QAAQ,CAAC,CAAC,SAAS,SAAS,EAAE,CAAC,SAAS,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAE5F;AAuLD,yEAAyE;AACzE,iBAAS,kBAAkB,CAAC,CAAC,SAAS,WAAW,EAChD,QAAQ,EAAE,CAAC,EACX,IAAI,EAAE,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,GACrB,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CAkB1E;AAED,6EAA6E;AAC7E,iBAAS,kBAAkB,CAAC,CAAC,SAAS,WAAW,EAChD,QAAQ,EAAE,CAAC,EACX,KAAK,EAAE,OAAO,GACZ,MAAM,CAAC,MAAM,CAAC,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,OAAO,CAAC,CA0BhD;AAED;;;;;GAKG;AACH,iBAAS,SAAS,CAAC,CAAC,SAAS,WAAW,EAAE,QAAQ,EAAE,CAAC,0CAmBpD;AAED;;;;;;GAMG;AACH,QAAA,MAAM,UAAU,GAAsC,CAAC,SAAS,WAAW,iKA+BzE,CAAA;AAEF,QAAA,MAAM,UAAU,GAAsC,CAAC,SAAS,WAAW,mKAsBzE,CAAA;AAEF,YAAY,EAAE,QAAQ,EAAE,CAAA;AACxB,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAA"}
|