@bjornpagen/bumbledb 1.1.0 → 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 +114 -11
- package/README.md +52 -9
- 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 +26 -3
- package/dist/changes.d.ts.map +1 -1
- package/dist/changes.js +89 -44
- 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 +4 -9
- package/dist/codec.d.ts.map +1 -1
- package/dist/codec.js +108 -183
- package/dist/codec.js.map +1 -1
- package/dist/compile.d.ts +16 -16
- package/dist/compile.d.ts.map +1 -1
- package/dist/compile.js +36 -15
- package/dist/compile.js.map +1 -1
- package/dist/db-native.d.ts +39 -0
- 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 +28 -8
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +91 -38
- 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 +14 -10
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/internal/log.d.ts +2 -0
- package/dist/internal/log.d.ts.map +1 -1
- package/dist/internal/log.js +2 -0
- package/dist/internal/log.js.map +1 -1
- package/dist/law.d.ts +10 -10
- 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/native.d.ts +1 -1
- 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/rows.d.ts +7 -4
- package/dist/rows.d.ts.map +1 -1
- package/dist/rows.js +44 -198
- package/dist/rows.js.map +1 -1
- package/dist/runtime-errors.d.ts +26 -2
- package/dist/runtime-errors.d.ts.map +1 -1
- package/dist/runtime-errors.js +43 -3
- package/dist/runtime-errors.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 +183 -54
- package/src/closed.ts +161 -314
- package/src/codec.ts +116 -190
- package/src/compile.ts +56 -32
- package/src/db-native.ts +42 -0
- package/src/db.ts +134 -52
- 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 +34 -28
- package/src/internal/log.ts +2 -0
- package/src/law.ts +13 -13
- package/src/lower.ts +13 -10
- package/src/native.ts +2 -0
- 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/rows.ts +62 -205
- package/src/runtime-errors.ts +47 -3
- 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/closed.js
CHANGED
|
@@ -1,187 +1,129 @@
|
|
|
1
1
|
import { AuthoringError } from "#errors.ts";
|
|
2
|
-
import { assertDeclarationOrderKey, assertDeclarationRecord,
|
|
3
|
-
import {
|
|
2
|
+
import { assertDeclarationOrderKey, assertDeclarationRecord, ownHandles, signaturesAgree } from "#fields.ts";
|
|
3
|
+
import { descriptorCache } from "#immutable.ts";
|
|
4
|
+
import { ownFields, relationDescriptor, relationFields } from "#relation.ts";
|
|
5
|
+
import { fieldValue, recordValue } from "#values.ts";
|
|
4
6
|
function isClosedMember(member) {
|
|
5
|
-
return "
|
|
7
|
+
return member.kind === "closed";
|
|
6
8
|
}
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
return
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
const declared = sealedFieldsOf(member).find(function byName(candidate) {
|
|
15
|
-
return candidate.name === fieldName;
|
|
16
|
-
});
|
|
17
|
-
return declared?.field;
|
|
18
|
-
}
|
|
19
|
-
function isHandleTuple(shape) {
|
|
20
|
-
return (Array.isArray(shape) &&
|
|
21
|
-
shape.length > 0 &&
|
|
22
|
-
shape.every(function stringHandle(handle) {
|
|
23
|
-
return typeof handle === "string";
|
|
24
|
-
}));
|
|
25
|
-
}
|
|
26
|
-
/**
|
|
27
|
-
* The trusted seam of the payload tier: the handle tuple and the axioms
|
|
28
|
-
* record are the same finite set — every tuple name is an own key, and
|
|
29
|
-
* every own key is in the tuple.
|
|
30
|
-
*/
|
|
31
|
-
function handleKeysOwn(axioms, names) {
|
|
32
|
-
const listed = new Set(names);
|
|
33
|
-
return (names.every(function ownHandle(name) {
|
|
34
|
-
return Object.hasOwn(axioms, name);
|
|
35
|
-
}) &&
|
|
36
|
-
Object.keys(axioms).every(function listedHandle(name) {
|
|
37
|
-
return listed.has(name);
|
|
38
|
-
}));
|
|
39
|
-
}
|
|
40
|
-
/**
|
|
41
|
-
* The trusted seam of the axiom-readback mint: every handle carries an own
|
|
42
|
-
* frozen row and every row carries every declared column as an own
|
|
43
|
-
* property — verified before the record is admitted as the typed
|
|
44
|
-
* {@link Axioms} (the trusted-admission-seam pattern — its home is
|
|
45
|
-
* `isTypedScope` in query/lower.ts).
|
|
46
|
-
*/
|
|
47
|
-
function axiomsMinted(record, handles, cols) {
|
|
48
|
-
return handles.every(function rowMinted(handle) {
|
|
49
|
-
const row = record[handle];
|
|
50
|
-
return (row !== undefined &&
|
|
51
|
-
cols.every(function columnMinted(column) {
|
|
52
|
-
return Object.hasOwn(row, column.name);
|
|
53
|
-
}));
|
|
9
|
+
/** The synthetic id is an ordinary field descriptor, derived from the declared roster. */
|
|
10
|
+
function closedId(member) {
|
|
11
|
+
recordValue("closed relation", member, ["kind", "name", "handles", "columns", "axioms"]);
|
|
12
|
+
assertDeclarationOrderKey("closed relation", member.name);
|
|
13
|
+
return Object.freeze({
|
|
14
|
+
kind: "u64",
|
|
15
|
+
closed: Object.freeze({ name: member.name, handles: ownHandles(`closed relation ${member.name}`, member.handles) })
|
|
54
16
|
});
|
|
55
17
|
}
|
|
56
|
-
function
|
|
57
|
-
|
|
58
|
-
for (const handle of handles) {
|
|
59
|
-
const row = Object.freeze({ ...axioms[handle] });
|
|
60
|
-
Object.defineProperty(out, handle, { value: row, enumerable: true });
|
|
61
|
-
}
|
|
62
|
-
Object.freeze(out);
|
|
63
|
-
if (!axiomsMinted(out, handles, cols)) {
|
|
64
|
-
throw new AuthoringError({ message: `closed relation ${name}: axiom-row minting incomplete` });
|
|
65
|
-
}
|
|
66
|
-
return out;
|
|
18
|
+
function closedDescriptor(input) {
|
|
19
|
+
return checkedClosed(input);
|
|
67
20
|
}
|
|
68
|
-
|
|
69
|
-
|
|
21
|
+
const checkedClosed = descriptorCache((input) => {
|
|
22
|
+
const raw = recordValue("closed relation", input, ["kind", "name", "handles", "columns", "axioms"]);
|
|
23
|
+
if (raw.kind !== "closed" || typeof raw.name !== "string")
|
|
24
|
+
throw new AuthoringError({ message: "closed relation: expected a closed declaration" });
|
|
25
|
+
assertDeclarationOrderKey("closed relation", raw.name);
|
|
26
|
+
const handles = ownHandles(`closed relation ${raw.name}`, raw.handles);
|
|
27
|
+
const columns = ownFields(`closed relation ${raw.name} columns`, raw.columns);
|
|
28
|
+
if (Object.hasOwn(columns, "id"))
|
|
70
29
|
throw new AuthoringError({
|
|
71
|
-
message: `closed relation ${name}: payload
|
|
30
|
+
message: `closed relation ${raw.name}: payload column id collides with the synthetic id`
|
|
72
31
|
});
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
32
|
+
const axioms = recordValue(`closed relation ${raw.name} axioms`, raw.axioms, handles);
|
|
33
|
+
const names = Object.keys(columns);
|
|
34
|
+
const owned = Object.fromEntries(handles.map((handle) => {
|
|
35
|
+
const row = recordValue(`closed relation ${raw.name}.${handle}`, axioms[handle], names);
|
|
36
|
+
return [
|
|
37
|
+
handle,
|
|
38
|
+
Object.freeze(Object.fromEntries(Object.entries(columns).map(([name, field]) => [
|
|
39
|
+
name,
|
|
40
|
+
fieldValue(`closed relation ${raw.name}.${handle}.${name}`, field, row[name])
|
|
41
|
+
])))
|
|
42
|
+
];
|
|
43
|
+
}));
|
|
44
|
+
return Object.freeze({ kind: "closed", name: raw.name, handles, columns, axioms: Object.freeze(owned) });
|
|
45
|
+
});
|
|
46
|
+
function closed(name, handles, columns, axioms) {
|
|
47
|
+
if (columns === undefined && axioms === undefined) {
|
|
48
|
+
const roster = ownHandles(`closed relation ${name}`, handles);
|
|
49
|
+
return closedDescriptor({
|
|
50
|
+
kind: "closed",
|
|
51
|
+
name,
|
|
52
|
+
handles: roster,
|
|
53
|
+
columns: {},
|
|
54
|
+
axioms: Object.fromEntries(roster.map((handle) => [handle, {}]))
|
|
77
55
|
});
|
|
78
56
|
}
|
|
79
|
-
if (columns === undefined)
|
|
80
|
-
if (axioms !== undefined) {
|
|
81
|
-
throw new AuthoringError({
|
|
82
|
-
message: `closed relation ${name}: the bare tier declares no columns, so ground axioms are inadmissible`
|
|
83
|
-
});
|
|
84
|
-
}
|
|
85
|
-
return closedBare(name, handles);
|
|
86
|
-
}
|
|
87
|
-
if (axioms === undefined) {
|
|
57
|
+
if (columns === undefined || axioms === undefined)
|
|
88
58
|
throw new AuthoringError({
|
|
89
|
-
message: `closed relation ${name}: payload columns
|
|
59
|
+
message: `closed relation ${name}: payload columns and ground axioms must be supplied together`
|
|
90
60
|
});
|
|
91
|
-
}
|
|
92
|
-
return closedPayload(name, handles, columns, axioms);
|
|
61
|
+
return closedDescriptor({ kind: "closed", name, handles, columns, axioms });
|
|
93
62
|
}
|
|
94
|
-
function
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
}
|
|
102
|
-
Object.freeze(empty);
|
|
103
|
-
if (!axiomsMinted(empty, handles, [])) {
|
|
104
|
-
throw new AuthoringError({ message: `closed relation ${name}: bare-tier axiom-row minting incomplete` });
|
|
105
|
-
}
|
|
106
|
-
return mintClosed(name, handles, {}, empty);
|
|
63
|
+
function memberDescriptor(input) {
|
|
64
|
+
if (typeof input !== "object" || input === null)
|
|
65
|
+
throw new AuthoringError({ message: "relation: expected a declaration record" });
|
|
66
|
+
assertDeclarationRecord("relation", input);
|
|
67
|
+
if ("kind" in input && input.kind === "closed")
|
|
68
|
+
return closedDescriptor(input);
|
|
69
|
+
return relationDescriptor(input);
|
|
107
70
|
}
|
|
108
|
-
function
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
if (
|
|
118
|
-
|
|
71
|
+
function sealedFieldsOf(member) {
|
|
72
|
+
return isClosedMember(member)
|
|
73
|
+
? [
|
|
74
|
+
{ name: "id", field: closedId(member) },
|
|
75
|
+
...Object.entries(member.columns).map(([name, field]) => ({ name, field }))
|
|
76
|
+
]
|
|
77
|
+
: relationFields(member);
|
|
78
|
+
}
|
|
79
|
+
function sealedFieldOf(member, name) {
|
|
80
|
+
if (isClosedMember(member)) {
|
|
81
|
+
if (name === "id")
|
|
82
|
+
return closedId(member);
|
|
83
|
+
return Object.hasOwn(member.columns, name) ? member.columns[name] : undefined;
|
|
119
84
|
}
|
|
120
|
-
return
|
|
85
|
+
return Object.hasOwn(member.fields, name) ? member.fields[name] : undefined;
|
|
121
86
|
}
|
|
122
|
-
function
|
|
123
|
-
|
|
124
|
-
|
|
87
|
+
function sameValue(a, b) {
|
|
88
|
+
if (Object.is(a, b))
|
|
89
|
+
return true;
|
|
90
|
+
if (a instanceof Uint8Array && b instanceof Uint8Array)
|
|
91
|
+
return a.length === b.length && a.every((byte, i) => byte === b[i]);
|
|
92
|
+
if (typeof a === "object" &&
|
|
93
|
+
a !== null &&
|
|
94
|
+
typeof b === "object" &&
|
|
95
|
+
b !== null &&
|
|
96
|
+
"start" in a &&
|
|
97
|
+
"end" in a &&
|
|
98
|
+
"start" in b &&
|
|
99
|
+
"end" in b)
|
|
100
|
+
return Object.is(a.start, b.start) && Object.is(a.end, b.end);
|
|
101
|
+
return false;
|
|
125
102
|
}
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
const
|
|
137
|
-
const
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
const values = cols.map(function lowerAxiomLiteral(column) {
|
|
151
|
-
return Object.freeze(literalOf(column.field, row[column.name]));
|
|
152
|
-
});
|
|
153
|
-
return Object.freeze({ handle, values: Object.freeze(values) });
|
|
154
|
-
});
|
|
155
|
-
const data = Object.freeze({
|
|
156
|
-
name,
|
|
157
|
-
handles: roster.handles,
|
|
158
|
-
columns: cols,
|
|
159
|
-
rows: Object.freeze(rows)
|
|
160
|
-
});
|
|
161
|
-
const id = Object.freeze({ kind: "u64", closed: roster });
|
|
162
|
-
const axiomsOut = mintAxioms(name, handleList, cols, axioms);
|
|
163
|
-
const columnsOut = { ...columns };
|
|
164
|
-
Object.freeze(columnsOut);
|
|
165
|
-
const holder = { value: undefined };
|
|
166
|
-
function where(selection) {
|
|
167
|
-
const owner = holder.value;
|
|
168
|
-
if (owner === undefined) {
|
|
169
|
-
throw new AuthoringError({
|
|
170
|
-
message: `closed relation ${name}: self-reference read before construction completed`
|
|
171
|
-
});
|
|
172
|
-
}
|
|
173
|
-
return Object.freeze({
|
|
174
|
-
relation: owner,
|
|
175
|
-
selection: resolveSelection(name, cols, Object.entries(selection))
|
|
176
|
-
});
|
|
177
|
-
}
|
|
178
|
-
const core = { name, id, data, axioms: axiomsOut, columns: columnsOut };
|
|
179
|
-
const value = cols.length > 0 ? Object.freeze({ ...core, where }) : Object.freeze(core);
|
|
180
|
-
if (!surfaceMinted(value, cols)) {
|
|
181
|
-
throw new AuthoringError({ message: `closed relation ${name}: ergonomic-surface minting incomplete` });
|
|
182
|
-
}
|
|
183
|
-
holder.value = value;
|
|
184
|
-
return value;
|
|
103
|
+
/** Equal names must denote equal ordered declarations, never constructor identities. */
|
|
104
|
+
function membersAgree(left, right) {
|
|
105
|
+
if (left === undefined)
|
|
106
|
+
return false;
|
|
107
|
+
const a = memberDescriptor(left);
|
|
108
|
+
const b = memberDescriptor(right);
|
|
109
|
+
if (a === b)
|
|
110
|
+
return true;
|
|
111
|
+
if (a.kind !== b.kind || a.name !== b.name)
|
|
112
|
+
return false;
|
|
113
|
+
const af = sealedFieldsOf(a);
|
|
114
|
+
const bf = sealedFieldsOf(b);
|
|
115
|
+
if (af.length !== bf.length ||
|
|
116
|
+
!af.every((field, i) => {
|
|
117
|
+
const other = bf[i];
|
|
118
|
+
return other !== undefined && field.name === other.name && signaturesAgree(field.field, other.field);
|
|
119
|
+
}))
|
|
120
|
+
return false;
|
|
121
|
+
if (isClosedMember(a) && isClosedMember(b)) {
|
|
122
|
+
return (a.handles.length === b.handles.length &&
|
|
123
|
+
a.handles.every((handle, i) => handle === b.handles[i] &&
|
|
124
|
+
Object.keys(a.columns).every((name) => sameValue(a.axioms[handle]?.[name], b.axioms[handle]?.[name]))));
|
|
125
|
+
}
|
|
126
|
+
return true;
|
|
185
127
|
}
|
|
186
|
-
export { closed, isClosedMember, sealedFieldOf, sealedFieldsOf };
|
|
128
|
+
export { closed, closedDescriptor, closedId, isClosedMember, memberDescriptor, membersAgree, sealedFieldOf, sealedFieldsOf };
|
|
187
129
|
//# sourceMappingURL=closed.js.map
|
package/dist/closed.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"closed.js","sourceRoot":"","sources":["../src/closed.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,YAAY,CAAA;AAC3C,OAAO,
|
|
1
|
+
{"version":3,"file":"closed.js","sourceRoot":"","sources":["../src/closed.ts"],"names":[],"mappings":"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"}
|
package/dist/codec.d.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { Effect, Schema as EffectSchema, Result } from "effect";
|
|
2
|
-
import type
|
|
2
|
+
import { type AnyRelation, type Fact } from "./relation.js";
|
|
3
3
|
import { DbError } from "./runtime-errors.js";
|
|
4
4
|
import type { AnySchema } from "./schema.js";
|
|
5
5
|
import type { Rel } from "./shape.js";
|
|
@@ -30,16 +30,11 @@ interface RowShape<R extends AnyRelation> {
|
|
|
30
30
|
readonly relation: R;
|
|
31
31
|
}
|
|
32
32
|
declare function rowShape<S extends AnySchema, R extends Rel<S>>(schema: S, relation: R): RowShape<R>;
|
|
33
|
-
/** Pure schema-tagged JSON encoding of
|
|
33
|
+
/** Pure schema-tagged JSON encoding of complete rows. */
|
|
34
34
|
declare function encodeBoundaryRows<R extends AnyRelation>(relation: R, rows: Iterable<Fact<R>>): Result.Result<ReadonlyArray<Readonly<Record<string, unknown>>>, DbError>;
|
|
35
|
-
/** Pure strict decoding
|
|
35
|
+
/** Pure strict decoding; malformed records, getters and values fail as data. */
|
|
36
36
|
declare function decodeBoundaryRows<R extends AnyRelation>(relation: R, input: unknown): Result.Result<ReadonlyArray<Fact<R>>, DbError>;
|
|
37
|
-
/**
|
|
38
|
-
* An Effect Schema for one relation's typed row, DERIVED from the core
|
|
39
|
-
* descriptors (a validation-only declaration; the canonical `$f64`/decimal
|
|
40
|
-
* wire form stays this module's explicit codec — Effect Schema's generic
|
|
41
|
-
* JSON number encoding is not Bumbledb's `$f64` codec).
|
|
42
|
-
*/
|
|
37
|
+
/** An Effect Schema derived from the same complete-row value interpreter. */
|
|
43
38
|
declare function rowSchema<R extends AnyRelation>(relation: R): EffectSchema.declare<Fact<R>, Fact<R>>;
|
|
44
39
|
/**
|
|
45
40
|
* The canonical native row codec (chapter 35 roster): owned bytes
|
package/dist/codec.d.ts.map
CHANGED
|
@@ -1 +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;
|
|
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;AAO/D,OAAO,EAAE,KAAK,WAAW,EAAE,KAAK,IAAI,EAAsC,MAAM,cAAc,CAAA;AAI9F,OAAO,EAAiB,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAA;AAE3C,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,CAI5F;AAuHD,yDAAyD;AACzD,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,CAuB1E;AAED,gFAAgF;AAChF,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,CAsBhD;AAED,6EAA6E;AAC7E,iBAAS,SAAS,CAAC,CAAC,SAAS,WAAW,EAAE,QAAQ,EAAE,CAAC,0CAapD;AAED;;;;;;GAMG;AACH,QAAA,MAAM,UAAU,GAAsC,CAAC,SAAS,WAAW,0IAmBzE,CAAA;AAEF,QAAA,MAAM,UAAU,GAAsC,CAAC,SAAS,WAAW,4IAezE,CAAA;AAEF,YAAY,EAAE,QAAQ,EAAE,CAAA;AACxB,OAAO,EAAE,kBAAkB,EAAE,UAAU,EAAE,kBAAkB,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAA"}
|