@bjornpagen/bumbledb 0.3.0 → 0.5.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 +246 -92
- package/README.md +31 -16
- package/dist/closed.d.ts +80 -75
- package/dist/closed.d.ts.map +1 -1
- package/dist/closed.js +102 -127
- package/dist/closed.js.map +1 -1
- package/dist/db.d.ts +37 -7
- package/dist/db.d.ts.map +1 -1
- package/dist/db.js +95 -55
- package/dist/db.js.map +1 -1
- package/dist/exhume.d.ts.map +1 -1
- package/dist/exhume.js +1 -14
- package/dist/exhume.js.map +1 -1
- package/dist/face.d.ts +40 -40
- package/dist/face.d.ts.map +1 -1
- package/dist/face.js +9 -17
- package/dist/face.js.map +1 -1
- package/dist/fields.d.ts +46 -15
- package/dist/fields.d.ts.map +1 -1
- package/dist/fields.js +58 -29
- package/dist/fields.js.map +1 -1
- package/dist/index.d.ts +13 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -5
- package/dist/index.js.map +1 -1
- package/dist/law.d.ts +2 -1
- package/dist/law.d.ts.map +1 -1
- package/dist/law.js +15 -14
- package/dist/law.js.map +1 -1
- package/dist/lower.d.ts.map +1 -1
- package/dist/lower.js +1 -7
- package/dist/lower.js.map +1 -1
- package/dist/marshal.d.ts +33 -6
- package/dist/marshal.d.ts.map +1 -1
- package/dist/marshal.js +75 -26
- package/dist/marshal.js.map +1 -1
- package/dist/native.d.ts +21 -2
- package/dist/native.d.ts.map +1 -1
- package/dist/native.js +20 -3
- package/dist/native.js.map +1 -1
- package/dist/order.d.ts +36 -0
- package/dist/order.d.ts.map +1 -0
- package/dist/order.js +135 -0
- package/dist/order.js.map +1 -0
- package/dist/query/atom.d.ts +76 -28
- package/dist/query/atom.d.ts.map +1 -1
- package/dist/query/atom.js +12 -16
- package/dist/query/atom.js.map +1 -1
- package/dist/query/lower.d.ts +5 -8
- package/dist/query/lower.d.ts.map +1 -1
- package/dist/query/lower.js +308 -72
- package/dist/query/lower.js.map +1 -1
- package/dist/query/predicate.d.ts.map +1 -1
- package/dist/query/predicate.js +34 -2
- package/dist/query/predicate.js.map +1 -1
- package/dist/query/run.d.ts +15 -5
- package/dist/query/run.d.ts.map +1 -1
- package/dist/query/run.js +27 -8
- package/dist/query/run.js.map +1 -1
- package/dist/query/scope.d.ts +37 -29
- package/dist/query/scope.d.ts.map +1 -1
- package/dist/query/scope.js +19 -47
- package/dist/query/scope.js.map +1 -1
- package/dist/relation.d.ts +17 -29
- package/dist/relation.d.ts.map +1 -1
- package/dist/relation.js +41 -38
- package/dist/relation.js.map +1 -1
- package/dist/schema.d.ts.map +1 -1
- package/dist/schema.js +7 -31
- package/dist/schema.js.map +1 -1
- package/dist/spec.d.ts +3 -2
- package/dist/spec.d.ts.map +1 -1
- package/dist/spec.js.map +1 -1
- package/dist/statements.d.ts +13 -4
- package/dist/statements.d.ts.map +1 -1
- package/dist/statements.js +75 -8
- package/dist/statements.js.map +1 -1
- package/package.json +2 -5
- package/src/closed.ts +144 -206
- package/src/db.ts +143 -68
- package/src/exhume.ts +1 -15
- package/src/face.ts +38 -48
- package/src/fields.ts +103 -49
- package/src/index.ts +11 -10
- package/src/law.ts +15 -14
- package/src/lower.ts +2 -9
- package/src/marshal.ts +82 -31
- package/src/native.ts +22 -4
- package/src/order.ts +156 -0
- package/src/query/atom.ts +70 -35
- package/src/query/lower.ts +354 -82
- package/src/query/predicate.ts +39 -4
- package/src/query/run.ts +27 -9
- package/src/query/scope.ts +52 -70
- package/src/relation.ts +54 -68
- package/src/schema.ts +7 -33
- package/src/spec.ts +3 -2
- package/src/statements.ts +82 -8
package/dist/statements.js
CHANGED
|
@@ -8,10 +8,19 @@
|
|
|
8
8
|
* Every field reference is checked against the relation it names in the
|
|
9
9
|
* TYPE — existence through {@link FaceFields} (`on(R, "nope")` does not
|
|
10
10
|
* compile) and STRUCTURAL compatibility through {@link SameShapes}: the two
|
|
11
|
-
* faces' projected kind/width/element
|
|
12
|
-
* (the minimal kernel — descriptors are pure structure) and
|
|
13
|
-
* positionwise equal, so a u64 face against a str face, a
|
|
14
|
-
* mismatch,
|
|
11
|
+
* faces' projected kind/width/element/roster quadruples are read off the
|
|
12
|
+
* schema type (the minimal kernel — descriptors are pure structure) and
|
|
13
|
+
* constrained positionwise equal, so a u64 face against a str face, a
|
|
14
|
+
* bytes width mismatch, an interval element mismatch, or a bare column
|
|
15
|
+
* against a closed reference is a compile error. TWO of those walls carry
|
|
16
|
+
* construction-time runtime twins here for untyped callers: ARITY
|
|
17
|
+
* ({@link assertArityAgreement} — cleanup-0.5.0 ruling 9: an
|
|
18
|
+
* arity-mismatched pairing fails at the statement, never by silent
|
|
19
|
+
* truncation) and the ROSTER slot ({@link assertRosterAgreement} —
|
|
20
|
+
* roster IDENTITY, positionwise: a closed vocabulary's referencing column
|
|
21
|
+
* is spelled with the vocabulary's own id descriptor, the ONE spelling, so
|
|
22
|
+
* a plain u64 column can never alias a vocabulary through a declared law
|
|
23
|
+
* and the SDK's descriptor-keyed closed judgments stay sound). Domains are
|
|
15
24
|
* NOT compared here — there is no domain to compare at construction: the
|
|
16
25
|
* statements themselves are what define the equivalence classes, and the
|
|
17
26
|
* domain wall lives where they aggregate — `schema()` (the
|
|
@@ -25,8 +34,57 @@
|
|
|
25
34
|
* authority).
|
|
26
35
|
*/
|
|
27
36
|
import * as errors from "@superbuilders/errors";
|
|
37
|
+
import { isClosedMember, sealedFieldOf } from "#closed.ts";
|
|
28
38
|
import { renderFace } from "#face.ts";
|
|
39
|
+
import { rosterOf } from "#fields.ts";
|
|
29
40
|
import { renderWindow } from "#spec.ts";
|
|
41
|
+
/** Renders one face position's closedness for the roster-agreement diagnostics. */
|
|
42
|
+
function renderRosterSide(roster) {
|
|
43
|
+
return roster === undefined ? "a bare column" : `a ${roster.name} reference`;
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* The runtime twin of {@link SameArity} (cleanup-0.5.0 ruling 9): the two
|
|
47
|
+
* faces must project equally many fields, judged at CONSTRUCTION for
|
|
48
|
+
* untyped callers too — without it an arity-mismatched containment
|
|
49
|
+
* silently truncates to the shorter projection (this module's positionwise
|
|
50
|
+
* walk and `law.ts`'s `unionSlot` both skip unpaired positions) until
|
|
51
|
+
* `Db.create`'s colder engine refusal. The error carries the two faces'
|
|
52
|
+
* own facts: names, arities, and the rendered statement.
|
|
53
|
+
*/
|
|
54
|
+
function assertArityAgreement(source, target, statement) {
|
|
55
|
+
if (source.projection.length !== target.projection.length) {
|
|
56
|
+
throw errors.new(`${source.owner.name}(${source.projection.join(", ")}) and ${target.owner.name}(${target.projection.join(", ")}) project ${source.projection.length} vs ${target.projection.length} fields — positional pairing requires both faces to project equally many — ${renderStatement(statement)}`);
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* The runtime twin of {@link SameShapes}'s roster slot: the two faces'
|
|
61
|
+
* projected descriptors must agree POSITIONWISE on closedness — the same
|
|
62
|
+
* roster (value identity — vocabulary identity is value identity, the
|
|
63
|
+
* SDK's membership rule everywhere) or none. Without this wall a plain u64
|
|
64
|
+
* column could alias a closed vocabulary through a declared containment
|
|
65
|
+
* (`docs/architecture/10-data-model.md` spells the ENGINE encoding that
|
|
66
|
+
* way), and every descriptor-keyed closed judgment — the orderable ban,
|
|
67
|
+
* the name↔id marshal, answer decode — would silently miss it. The
|
|
68
|
+
* vocabulary's own descriptor (`Kind.id`) is the ONE spelling of a closed
|
|
69
|
+
* reference at this surface (the canonical-utterance law); the engine
|
|
70
|
+
* cannot backstop this one — the wire carries plain u64s, no rosters.
|
|
71
|
+
* Arity agreement ({@link assertArityAgreement}) runs first, so the
|
|
72
|
+
* positionwise walk here never sees an unpaired position from a well-typed
|
|
73
|
+
* OR an untyped caller.
|
|
74
|
+
*/
|
|
75
|
+
function assertRosterAgreement(source, target, statement) {
|
|
76
|
+
source.projection.forEach(function agreeAt(fieldName, position) {
|
|
77
|
+
const targetField = target.projection[position];
|
|
78
|
+
if (targetField === undefined) {
|
|
79
|
+
return;
|
|
80
|
+
}
|
|
81
|
+
const sourceRoster = rosterOf(sealedFieldOf(source.owner, fieldName));
|
|
82
|
+
const targetRoster = rosterOf(sealedFieldOf(target.owner, targetField));
|
|
83
|
+
if (sourceRoster !== targetRoster) {
|
|
84
|
+
throw errors.new(`${source.owner.name}.${fieldName} is ${renderRosterSide(sourceRoster)} but ${target.owner.name}.${targetField} is ${renderRosterSide(targetRoster)} — closedness rides the descriptor: a closed reference is spelled with the vocabulary's own id descriptor (one meaning, one spelling), so faces pair closed-with-closed through one roster or bare-with-bare, never across — ${renderStatement(statement)}`);
|
|
85
|
+
}
|
|
86
|
+
});
|
|
87
|
+
}
|
|
30
88
|
/**
|
|
31
89
|
* `R(X) -> R` — the FD key form, composite keys as tuples. No selection
|
|
32
90
|
* parameter exists (the FD-with-selection shape is unrepresentable, as in
|
|
@@ -39,7 +97,7 @@ import { renderWindow } from "#spec.ts";
|
|
|
39
97
|
* through the owner's schema type.
|
|
40
98
|
*/
|
|
41
99
|
function key(relation, fields) {
|
|
42
|
-
if (
|
|
100
|
+
if (isClosedMember(relation)) {
|
|
43
101
|
throw errors.new(`key(${relation.name}, ...): closedness already materializes ${relation.name}(id) -> ${relation.name} — an explicit key on a closed relation is rejected as a duplicate`);
|
|
44
102
|
}
|
|
45
103
|
const data = Object.freeze({
|
|
@@ -65,7 +123,10 @@ function contained(source, target) {
|
|
|
65
123
|
target: target.data,
|
|
66
124
|
bidirectional: false
|
|
67
125
|
});
|
|
68
|
-
|
|
126
|
+
const statement = Object.freeze({ data });
|
|
127
|
+
assertArityAgreement(data.source, data.target, statement);
|
|
128
|
+
assertRosterAgreement(data.source, data.target, statement);
|
|
129
|
+
return statement;
|
|
69
130
|
}
|
|
70
131
|
/**
|
|
71
132
|
* `A(X|φ) == B(Y|ψ)` — the bidirectional abbreviation, one utterance: the
|
|
@@ -83,7 +144,10 @@ function mirrors(source, target) {
|
|
|
83
144
|
target: target.data,
|
|
84
145
|
bidirectional: true
|
|
85
146
|
});
|
|
86
|
-
|
|
147
|
+
const statement = Object.freeze({ data });
|
|
148
|
+
assertArityAgreement(data.source, data.target, statement);
|
|
149
|
+
assertRosterAgreement(data.source, data.target, statement);
|
|
150
|
+
return statement;
|
|
87
151
|
}
|
|
88
152
|
/**
|
|
89
153
|
* `B(Y|ψ) <={window} A(X|φ)` — the cardinality window. READ CAREFULLY: the
|
|
@@ -102,7 +166,10 @@ function window(target, count, source) {
|
|
|
102
166
|
window: count.window,
|
|
103
167
|
source: source.data
|
|
104
168
|
});
|
|
105
|
-
|
|
169
|
+
const statement = Object.freeze({ data });
|
|
170
|
+
assertArityAgreement(data.source, data.target, statement);
|
|
171
|
+
assertRosterAgreement(data.source, data.target, statement);
|
|
172
|
+
return statement;
|
|
106
173
|
}
|
|
107
174
|
/**
|
|
108
175
|
* Renders one statement in the CANONICAL macro spelling
|
package/dist/statements.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statements.js","sourceRoot":"","sources":["../src/statements.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"statements.js","sourceRoot":"","sources":["../src/statements.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,10 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@bjornpagen/bumbledb",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Type-theoretic TypeScript SDK for the bumbledb embedded relational engine",
|
|
5
|
-
"module": "dist/index.js",
|
|
6
|
-
"main": "dist/index.js",
|
|
7
|
-
"types": "dist/index.d.ts",
|
|
8
5
|
"type": "module",
|
|
9
6
|
"exports": {
|
|
10
7
|
".": {
|
|
@@ -44,7 +41,7 @@
|
|
|
44
41
|
"@superbuilders/errors": "^4.0.2"
|
|
45
42
|
},
|
|
46
43
|
"optionalDependencies": {
|
|
47
|
-
"@bjornpagen/bumbledb-darwin-arm64": "0.
|
|
44
|
+
"@bjornpagen/bumbledb-darwin-arm64": "0.5.0"
|
|
48
45
|
},
|
|
49
46
|
"devDependencies": {
|
|
50
47
|
"@biomejs/biome": "^2.0.0-beta.5",
|