@bjornpagen/bumbledb 0.1.0 → 0.3.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.
Files changed (112) hide show
  1. package/COOKBOOK.md +1450 -0
  2. package/README.md +69 -30
  3. package/dist/closed.d.ts +157 -38
  4. package/dist/closed.d.ts.map +1 -1
  5. package/dist/closed.js +232 -47
  6. package/dist/closed.js.map +1 -1
  7. package/dist/count.d.ts +64 -17
  8. package/dist/count.d.ts.map +1 -1
  9. package/dist/count.js +37 -14
  10. package/dist/count.js.map +1 -1
  11. package/dist/db.d.ts +27 -8
  12. package/dist/db.d.ts.map +1 -1
  13. package/dist/db.js +33 -10
  14. package/dist/db.js.map +1 -1
  15. package/dist/exhume.d.ts +12 -11
  16. package/dist/exhume.d.ts.map +1 -1
  17. package/dist/exhume.js +7 -6
  18. package/dist/exhume.js.map +1 -1
  19. package/dist/face.d.ts +135 -30
  20. package/dist/face.d.ts.map +1 -1
  21. package/dist/face.js +44 -19
  22. package/dist/face.js.map +1 -1
  23. package/dist/fields.d.ts +130 -130
  24. package/dist/fields.d.ts.map +1 -1
  25. package/dist/fields.js +60 -94
  26. package/dist/fields.js.map +1 -1
  27. package/dist/index.d.ts +29 -24
  28. package/dist/index.d.ts.map +1 -1
  29. package/dist/index.js +19 -14
  30. package/dist/index.js.map +1 -1
  31. package/dist/law.d.ts +224 -0
  32. package/dist/law.d.ts.map +1 -0
  33. package/dist/law.js +224 -0
  34. package/dist/law.js.map +1 -0
  35. package/dist/lower.d.ts +17 -7
  36. package/dist/lower.d.ts.map +1 -1
  37. package/dist/lower.js +66 -24
  38. package/dist/lower.js.map +1 -1
  39. package/dist/marshal.d.ts +36 -21
  40. package/dist/marshal.d.ts.map +1 -1
  41. package/dist/marshal.js +41 -25
  42. package/dist/marshal.js.map +1 -1
  43. package/dist/native.d.ts +6 -2
  44. package/dist/native.d.ts.map +1 -1
  45. package/dist/native.js +2 -2
  46. package/dist/native.js.map +1 -1
  47. package/dist/query/atom.d.ts +370 -174
  48. package/dist/query/atom.d.ts.map +1 -1
  49. package/dist/query/atom.js +75 -172
  50. package/dist/query/atom.js.map +1 -1
  51. package/dist/query/lower.d.ts +312 -109
  52. package/dist/query/lower.d.ts.map +1 -1
  53. package/dist/query/lower.js +906 -387
  54. package/dist/query/lower.js.map +1 -1
  55. package/dist/query/predicate.d.ts +70 -88
  56. package/dist/query/predicate.d.ts.map +1 -1
  57. package/dist/query/predicate.js +118 -72
  58. package/dist/query/predicate.js.map +1 -1
  59. package/dist/query/run.d.ts +19 -16
  60. package/dist/query/run.d.ts.map +1 -1
  61. package/dist/query/run.js +31 -24
  62. package/dist/query/run.js.map +1 -1
  63. package/dist/query/scope.d.ts +178 -127
  64. package/dist/query/scope.d.ts.map +1 -1
  65. package/dist/query/scope.js +111 -108
  66. package/dist/query/scope.js.map +1 -1
  67. package/dist/query/select.d.ts +102 -80
  68. package/dist/query/select.d.ts.map +1 -1
  69. package/dist/query/select.js +39 -34
  70. package/dist/query/select.js.map +1 -1
  71. package/dist/relation.d.ts +48 -38
  72. package/dist/relation.d.ts.map +1 -1
  73. package/dist/relation.js +24 -19
  74. package/dist/relation.js.map +1 -1
  75. package/dist/schema.d.ts +41 -3
  76. package/dist/schema.d.ts.map +1 -1
  77. package/dist/schema.js +34 -9
  78. package/dist/schema.js.map +1 -1
  79. package/dist/spec.d.ts +7 -5
  80. package/dist/spec.d.ts.map +1 -1
  81. package/dist/spec.js.map +1 -1
  82. package/dist/statements.d.ts +91 -36
  83. package/dist/statements.d.ts.map +1 -1
  84. package/dist/statements.js +42 -12
  85. package/dist/statements.js.map +1 -1
  86. package/package.json +4 -3
  87. package/src/closed.ts +448 -95
  88. package/src/count.ts +112 -18
  89. package/src/db.ts +45 -17
  90. package/src/exhume.ts +12 -11
  91. package/src/face.ts +211 -41
  92. package/src/fields.ts +199 -234
  93. package/src/index.ts +78 -61
  94. package/src/law.ts +519 -0
  95. package/src/lower.ts +82 -27
  96. package/src/marshal.ts +48 -30
  97. package/src/native.ts +8 -4
  98. package/src/query/atom.ts +525 -374
  99. package/src/query/lower.ts +1469 -538
  100. package/src/query/predicate.ts +208 -161
  101. package/src/query/run.ts +35 -25
  102. package/src/query/scope.ts +264 -218
  103. package/src/query/select.ts +168 -93
  104. package/src/relation.ts +47 -47
  105. package/src/schema.ts +69 -18
  106. package/src/spec.ts +7 -5
  107. package/src/statements.ts +124 -41
  108. package/dist/brand.d.ts +0 -59
  109. package/dist/brand.d.ts.map +0 -1
  110. package/dist/brand.js +0 -47
  111. package/dist/brand.js.map +0 -1
  112. package/src/brand.ts +0 -82
package/dist/closed.js CHANGED
@@ -1,47 +1,197 @@
1
1
  /**
2
2
  * Closed relations (`docs/architecture/10-data-model.md` § closed
3
3
  * relations): a vocabulary whose extension is declared in the schema — two
4
- * tiers, one function. The emission per closed relation mirrors the macro's
5
- * (host-enum analog): handle CONSTANTS on the value (`Kind.Checking`, ids =
6
- * declaration order), the `fromId` weld, an `id` field constructor
7
- * pre-branded with the handle newtype for other relations' field blocks
8
- * (`kind: Kind.id`), and payload readback (`Kind.axioms`). No fact type and
9
- * no insert surface exist closed relations are unwritable by
10
- * construction: the value simply lacks the writable relation shape.
4
+ * tiers, one function. The emission per closed relation mirrors the
5
+ * macro's (host-enum analog): handle CONSTANTS on the value
6
+ * (`Kind.Checking`, ids = declaration order, each a BARE `bigint` no
7
+ * brand), the `fromId` weld, an `id` field descriptor carrying the CLOSED
8
+ * LINKAGE (the roster — pure structure, no declared domain: the laws type
9
+ * the columns, and `schema()` names the id's generator class `"Kind.id"`)
10
+ * for other relations' field blocks (`kind: Kind.id`), payload readback
11
+ * (`Kind.axioms`), and the declared payload column descriptors
12
+ * (`Kind.columns` — the runtime twin of the `Cols` type parameter, which
13
+ * the face layer's structural wall reads). Bare tier: `closed("Kind", ["Checking",
14
+ * "Savings"])`. Payload tier: `closed("Sev", { pages: bool }, { Critical:
15
+ * { pages: true }, ... })` — one call, three arguments (the curried tier-2
16
+ * spelling is DELETED — canonical utterance): the axioms record IS the
17
+ * handle declaration, every handle carrying every column exactly once
18
+ * (type-enforced). No fact type and no insert surface exist — closed
19
+ * relations are unwritable by construction: the value simply lacks the
20
+ * writable relation shape. Both tiers mint `match()` — exhaustive dispatch
21
+ * over the handle union (arms typed by the mapped type, so a missing or
22
+ * extra arm is a compile error; the payload tier's arm receives the typed
23
+ * axiom row). The payload tier additionally mints `where()` — the
24
+ * ψ-selection surface (`Kind.where({ mastered: true })` as a face source),
25
+ * resolved through the ONE selection machine
26
+ * (`relation.ts::resolveSelection`); the bare tier has no payload columns to
27
+ * select on, so `.where` is absent there, at the type AND on the value.
11
28
  */
12
29
  import * as errors from "@superbuilders/errors";
13
- import { assertDeclarationOrderKey, fieldData, literalOf } from "#fields.ts";
30
+ import { assertDeclarationOrderKey, literalOf } from "#fields.ts";
31
+ import { resolveSelection } from "#relation.ts";
14
32
  /**
15
33
  * The value-surface property names a handle may not shadow — the macro's
16
34
  * name-collision diagnostic, here over the closed value's own properties
17
35
  * (`relation`/`selection` are reserved so a closed value can never be
18
- * mistaken for a selected relation by `on()`'s discriminant).
36
+ * mistaken for a selected relation by `on()`'s discriminant; `where` is
37
+ * reserved because the payload tier mints the ψ-selection method under
38
+ * exactly that name; `match` because BOTH tiers mint the exhaustive
39
+ * dispatch under exactly that name).
19
40
  */
20
41
  const reservedHandleNames = Object.freeze([
21
42
  "name",
22
43
  "id",
23
44
  "data",
24
45
  "axioms",
46
+ "columns",
25
47
  "fromId",
48
+ "where",
49
+ "match",
26
50
  "relation",
27
51
  "selection"
28
52
  ]);
53
+ /** Narrows the two-tier second argument: a handle tuple (bare tier) or a column block (payload tier). */
54
+ function isHandleTuple(shape) {
55
+ return Array.isArray(shape);
56
+ }
57
+ /**
58
+ * The trusted seam of the payload tier's handle enumeration: the axioms
59
+ * record's own enumerable keys ARE its handle set (the type says so —
60
+ * {@link Axioms} is keyed by the handles), and this guard verifies exactly
61
+ * that checkable fact before the key list is admitted at the handle type.
62
+ */
63
+ function handleKeysOwn(axioms, names) {
64
+ return names.every(function ownHandle(name) {
65
+ return Object.hasOwn(axioms, name);
66
+ });
67
+ }
68
+ /**
69
+ * The trusted seam of the axiom-readback mint: every handle carries an own
70
+ * frozen row and every row carries every declared column as an own
71
+ * property — verified before the record is admitted as the typed
72
+ * {@link Axioms} (the `refsComplete` analog of `relation()`).
73
+ */
74
+ function axiomsMinted(record, handles, cols) {
75
+ return handles.every(function rowMinted(handle) {
76
+ const row = record[handle];
77
+ return (row !== undefined &&
78
+ cols.every(function columnMinted(column) {
79
+ return Object.hasOwn(row, column.name);
80
+ }));
81
+ });
82
+ }
29
83
  /**
30
- * Reads one handle's axiom row, refusing absence loudly: the payload tier's
31
- * overload types the record exhaustively, so a missing row is ill-typed
32
- * input, and the bare tier never reaches here (it declares no columns).
84
+ * The trusted seam of the handle-constant mint: every handle reads back as
85
+ * an own bigint — verified before the record is admitted at the constants
86
+ * type (a "__proto__"-named handle riding the object-protocol accessor
87
+ * would fail exactly this check).
33
88
  */
34
- function axiomRow(name, axioms, handle) {
89
+ function constantsMinted(record, handles) {
90
+ return handles.every(function constantMinted(handle) {
91
+ return typeof record[handle] === "bigint";
92
+ });
93
+ }
94
+ /**
95
+ * Reads one handle's ground axiom row for lowering. The typed payload
96
+ * surface makes absence unrepresentable ({@link Axioms} carries every
97
+ * handle's row); the refusal below guards the one ill-typed path — payload
98
+ * columns with the bare tier's absent axioms — which no public spelling
99
+ * reaches.
100
+ */
101
+ function groundRow(name, axioms, handle) {
35
102
  if (axioms === undefined) {
36
103
  throw errors.new(`closed relation ${name}: payload columns declared without ground axioms`);
37
104
  }
38
- const row = axioms[handle];
39
- if (row === undefined) {
40
- throw errors.new(`closed relation ${name}: no ground axiom for handle ${handle}`);
105
+ return axioms[handle];
106
+ }
107
+ /**
108
+ * Mints the axiom-readback record: one own frozen row per handle (the bare
109
+ * tier's rows are empty — it declares no columns), each row a fresh copy of
110
+ * its ground axiom.
111
+ */
112
+ function mintAxioms(name, handles, cols, axioms) {
113
+ const out = {};
114
+ for (const handle of handles) {
115
+ const row = axioms === undefined ? Object.freeze({}) : Object.freeze({ ...groundRow(name, axioms, handle) });
116
+ Object.defineProperty(out, handle, { value: row, enumerable: true });
117
+ }
118
+ Object.freeze(out);
119
+ if (!axiomsMinted(out, handles, cols)) {
120
+ throw errors.new(`closed relation ${name}: axiom-row minting incomplete`);
121
+ }
122
+ return out;
123
+ }
124
+ /** Mints the handle constants: one own bigint per handle, ids = declaration order. */
125
+ function mintHandleConstants(name, handles) {
126
+ const out = {};
127
+ handles.forEach(function mintHandleConstant(handle, index) {
128
+ Object.defineProperty(out, handle, { value: BigInt(index), enumerable: true });
129
+ });
130
+ Object.freeze(out);
131
+ if (!constantsMinted(out, handles)) {
132
+ throw errors.new(`closed relation ${name}: handle-constant minting incomplete`);
133
+ }
134
+ return out;
135
+ }
136
+ function closed(name, shape, axioms) {
137
+ if (isHandleTuple(shape)) {
138
+ if (axioms !== undefined) {
139
+ throw errors.new(`closed relation ${name}: the bare tier declares no columns, so ground axioms are inadmissible`);
140
+ }
141
+ return closedBare(name, shape);
41
142
  }
42
- return row;
143
+ if (axioms === undefined) {
144
+ throw errors.new(`closed relation ${name}: payload columns declared without ground axioms — the payload tier is spelled closed(name, columns, axioms) (the curried spelling is deleted)`);
145
+ }
146
+ return closedPayload(name, shape, axioms);
147
+ }
148
+ /** The bare tier's precisely-typed builder: no columns, no axioms. */
149
+ function closedBare(name, handles) {
150
+ return mintClosed(name, handles, {}, undefined);
43
151
  }
44
- function closed(name, handles, columns, axioms) {
152
+ /**
153
+ * The payload tier's precisely-typed builder: column names are judged
154
+ * first (the macro-expansion analog), then the handle set is read off the
155
+ * axioms record's own keys.
156
+ */
157
+ function closedPayload(name, columns, axioms) {
158
+ for (const columnName of Object.keys(columns)) {
159
+ assertDeclarationOrderKey(`closed relation ${name} column`, columnName);
160
+ }
161
+ const handles = Object.keys(axioms);
162
+ for (const handle of handles) {
163
+ assertDeclarationOrderKey(`closed relation ${name} handle`, handle);
164
+ }
165
+ if (!handleKeysOwn(axioms, handles)) {
166
+ throw errors.new(`closed relation ${name}: handle enumeration incomplete`);
167
+ }
168
+ return mintClosed(name, handles, columns, axioms);
169
+ }
170
+ /**
171
+ * The trusted seam of the ergonomic-surface mint: `match` reads back as an
172
+ * own function on BOTH tiers, and `where` exactly when payload columns
173
+ * exist — the runtime twin of the {@link Closed} type's conditional arm
174
+ * (`ClosedMatchBare` vs `ClosedSelectable & ClosedMatchPayload`), verified
175
+ * before the minted value is admitted at the conditional type.
176
+ */
177
+ function surfaceMinted(value, cols) {
178
+ const matchable = "match" in value && typeof value.match === "function";
179
+ const selectable = "where" in value && typeof value.where === "function";
180
+ return matchable && (cols.length > 0 ? selectable : !selectable);
181
+ }
182
+ /**
183
+ * Mints one closed relation value — the shared seam of both tiers, HONESTLY
184
+ * typed end to end (a wrong-shaped mint is a compile error here, not a
185
+ * laundered `unknown`): roster checks, eager axiom lowering, the
186
+ * roster-carrying `id` descriptor, the frozen `columns` carrier (the runtime
187
+ * twin of the `Cols` type parameter), the handle constants, the exhaustive
188
+ * `match()` on both tiers, and — on the payload tier only — the
189
+ * ψ-selection `where()`.
190
+ */
191
+ function mintClosed(name, handles, columns, axioms) {
192
+ if (handles.length === 0) {
193
+ throw errors.new(`closed relation ${name}: at least one handle is required (an empty vocabulary declares nothing)`);
194
+ }
45
195
  const seen = new Set();
46
196
  for (const handle of handles) {
47
197
  if (seen.has(handle)) {
@@ -52,17 +202,20 @@ function closed(name, handles, columns, axioms) {
52
202
  throw errors.new(`closed relation ${name}: handle ${handle} collides with the closed value's own surface (${reservedHandleNames.join(", ")})`);
53
203
  }
54
204
  }
55
- const roster = Object.freeze({ name, handles: Object.freeze([...handles]) });
205
+ const handleList = Object.freeze([...handles]);
206
+ const roster = Object.freeze({ name, handles: handleList });
56
207
  const cols = [];
57
- if (columns !== undefined) {
58
- for (const [columnName, field] of Object.entries(columns)) {
59
- assertDeclarationOrderKey(`closed relation ${name} column`, columnName);
60
- cols.push(Object.freeze({ name: columnName, field: field.data }));
208
+ for (const [columnName, field] of Object.entries(columns)) {
209
+ assertDeclarationOrderKey(`closed relation ${name} column`, columnName);
210
+ if (columnName === "id") {
211
+ throw errors.new(`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)`);
61
212
  }
213
+ cols.push(Object.freeze({ name: columnName, field }));
62
214
  }
63
- const rows = handles.map(function lowerRow(handle) {
215
+ Object.freeze(cols);
216
+ const rows = handleList.map(function lowerRow(handle) {
64
217
  const values = cols.map(function lowerAxiomLiteral(column) {
65
- const row = axiomRow(name, axioms, handle);
218
+ const row = groundRow(name, axioms, handle);
66
219
  return Object.freeze(literalOf(column.field, row[column.name]));
67
220
  });
68
221
  return Object.freeze({ handle, values: Object.freeze(values) });
@@ -70,38 +223,70 @@ function closed(name, handles, columns, axioms) {
70
223
  const data = Object.freeze({
71
224
  name,
72
225
  handles: roster.handles,
73
- columns: Object.freeze(cols),
226
+ columns: cols,
74
227
  rows: Object.freeze(rows)
75
228
  });
76
- const id = Object.freeze({
77
- data: fieldData({ kind: "u64" }, name, false, roster)
78
- });
229
+ const id = Object.freeze({ kind: "u64", closed: roster });
79
230
  /**
80
231
  * Handle names are arbitrary identifiers, so rows and constants are
81
- * minted with OWN-property definition, never assignment: a handle named
232
+ * minted with OWN-property definition (inside {@link mintAxioms} and
233
+ * {@link mintHandleConstants}), never assignment: a handle named
82
234
  * "__proto__" would otherwise ride the Object.prototype accessor —
83
235
  * silently swapping the record's prototype instead of creating the row,
84
236
  * and no-oping the constant (a primitive through the setter) — minting a
85
- * value whose type claims Brand<bigint, Name> but reads back an object.
237
+ * value whose type claims a bigint constant but reads back an object.
238
+ * (Object SPREAD is CreateDataProperty by spec, so the copies below are
239
+ * own-property safe for column names too.)
86
240
  */
87
- const axiomsOut = {};
88
- for (const handle of handles) {
89
- const row = axioms === undefined ? Object.freeze({}) : Object.freeze({ ...axiomRow(name, axioms, handle) });
90
- Object.defineProperty(axiomsOut, handle, { value: row, enumerable: true });
241
+ const axiomsOut = mintAxioms(name, handleList, cols, axioms);
242
+ const constants = mintHandleConstants(name, handleList);
243
+ const columnsOut = { ...columns };
244
+ Object.freeze(columnsOut);
245
+ function fromId(idValue) {
246
+ return handleList[Number(idValue)];
91
247
  }
92
- const value = {
93
- name,
94
- id,
95
- data,
96
- axioms: Object.freeze(axiomsOut),
97
- fromId(idValue) {
98
- return roster.handles[Number(idValue)];
248
+ const holder = { value: undefined };
249
+ /**
250
+ * The ψ selection: resolved against the declared payload columns through
251
+ * the ONE selection machine (`relation.ts::resolveSelection` — a
252
+ * `ClosedColumn` is structurally a `RelationField`), never pre-folded
253
+ * into an id set (the engine folds at validate).
254
+ */
255
+ function where(selection) {
256
+ const owner = holder.value;
257
+ if (owner === undefined) {
258
+ throw errors.new(`closed relation ${name}: self-reference read before construction completed`);
99
259
  }
100
- };
101
- handles.forEach(function mintHandleConstant(handle, index) {
102
- Object.defineProperty(value, handle, { value: BigInt(index), enumerable: true });
103
- });
104
- return Object.freeze(value);
260
+ return Object.freeze({
261
+ relation: owner,
262
+ selection: resolveSelection(name, cols, Object.entries(selection))
263
+ });
264
+ }
265
+ /**
266
+ * The exhaustive dispatch: the ROSTER judges the id (the structural type
267
+ * admits any bigint — a dishonest id is a THROW, never a misdispatch),
268
+ * and the chosen arm receives the handle's frozen axiom row (the bare
269
+ * tier's arms are typed to take nothing; the empty row rides along
270
+ * unread). One implementation serves both tiers — the conditional
271
+ * {@link Closed} arm claims the tier-exact arm signature and
272
+ * {@link surfaceMinted} is the trusted seam that admits it.
273
+ */
274
+ function match(idValue, arms) {
275
+ const handle = fromId(idValue);
276
+ if (handle === undefined) {
277
+ throw errors.new(`closed relation ${name}: match on id ${idValue} misses the roster (${handleList.join(", ")})`);
278
+ }
279
+ return arms[handle](axiomsOut[handle]);
280
+ }
281
+ const core = { name, id, data, axioms: axiomsOut, columns: columnsOut, fromId };
282
+ const value = cols.length > 0
283
+ ? Object.freeze({ ...constants, ...core, where, match })
284
+ : Object.freeze({ ...constants, ...core, match });
285
+ if (!surfaceMinted(value, cols)) {
286
+ throw errors.new(`closed relation ${name}: ergonomic-surface minting incomplete`);
287
+ }
288
+ holder.value = value;
289
+ return value;
105
290
  }
106
291
  export { closed };
107
292
  //# sourceMappingURL=closed.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"closed.js","sourceRoot":"","sources":["../src/closed.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"closed.js","sourceRoot":"","sources":["../src/closed.ts"],"names":[],"mappings":"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"}
package/dist/count.d.ts CHANGED
@@ -1,10 +1,22 @@
1
1
  /**
2
2
  * Cardinality-window counts — exactly five constructors, and nothing else
3
- * (`docs/architecture/70-api.md` § the canonical-utterance law). The ban
4
- * table is enforced REPRESENTATIONALLY, stronger than Rust's expansion
5
- * errors: `{1..*}`, `{n..n}`, `{0..0}`, `{0..*}`, and inverted windows have
6
- * NO constructor — the spellings that could produce them are construction
7
- * errors naming the canonical form, and no other spelling exists at all.
3
+ * (`docs/architecture/70-api.md` § the canonical-utterance law). The five
4
+ * constructors PARTITION the legal windows, and the ban table is enforced
5
+ * REPRESENTATIONALLY, stronger than Rust's expansion errors, in two tiers:
6
+ *
7
+ * - **The type tier**: a banned spelling written as a LITERAL does not
8
+ * compile — `exactly(0n)`, `between(n, n)`, `between(0n, hi)`,
9
+ * `atLeast(0n)`, `atLeast(1n)`, `atMost(0n)`, and every negative bound
10
+ * are type errors naming the canonical form (`{n..n}`, `{0..0}`,
11
+ * `{0..hi}`-via-between, `{0..*}`, `{1..*}` have NO argument shape that
12
+ * produces them), and no sixth constructor exists at all.
13
+ * - **The construction tier**: a bound the type level cannot judge — a
14
+ * COMPUTED `bigint`, whose literal identity is erased, or an inverted
15
+ * `between(lo, hi)` order, which type-level bigints cannot compare — is
16
+ * judged here at construction with the same canonical-naming errors; and
17
+ * past both tiers the engine's own spec validation remains the law for a
18
+ * hostile FFI caller (the standing two-tier ban enforcement).
19
+ *
8
20
  * Bounds are `bigint` (u64 crosses as bigint always, PRD-04's law).
9
21
  */
10
22
  import type { WindowSpec } from "#spec.ts";
@@ -26,30 +38,65 @@ interface Count {
26
38
  readonly window: WindowSpec;
27
39
  readonly [admitted]: true;
28
40
  }
41
+ /**
42
+ * The legible banned-spelling verdict: intersected into a count
43
+ * constructor's parameter when the LITERAL argument spells a banned window,
44
+ * naming the canonical form — the compile-time face of the ban table.
45
+ */
46
+ interface BannedWindow<Canonical extends string> {
47
+ readonly "banned window spelling — the canonical-utterance law names the one legal form": Canonical;
48
+ }
49
+ /** `true` exactly when the literal bigint `N` is negative (out of the u64 count domain). */
50
+ type IsNegative<N extends bigint> = `${N}` extends `-${string}` ? true : false;
51
+ /** The ban verdict on `exactly(n)`: negatives are out of domain; `{0}` is the exclusion, written `none`. */
52
+ type ExactlyBan<N extends bigint> = bigint extends N ? unknown : IsNegative<N> extends true ? BannedWindow<"window counts are u64 — a negative count is out of domain"> : N extends 0n ? BannedWindow<"`{0}` is the exclusion — write none"> : unknown;
53
+ /** The ban verdict on `atLeast(lo)`: `{0..*}` is vacuous; `{1..*}` is the bare containment respelled. */
54
+ type AtLeastBan<N extends bigint> = bigint extends N ? unknown : IsNegative<N> extends true ? BannedWindow<"window counts are u64 — a negative count is out of domain"> : N extends 0n ? BannedWindow<"`{0..*}` is vacuous — it provably says nothing; delete the statement"> : N extends 1n ? BannedWindow<"`{1..*}` says only what the bare containment says — write contained(source, target)"> : unknown;
55
+ /** The ban verdict on `atMost(hi)`: `{0..0}` is the exclusion, written `none`. */
56
+ type AtMostBan<N extends bigint> = bigint extends N ? unknown : IsNegative<N> extends true ? BannedWindow<"window counts are u64 — a negative count is out of domain"> : N extends 0n ? BannedWindow<"`{0..0}` — the exclusion is written `{0}`: use none"> : unknown;
57
+ /** The ban verdict on a `between` floor of zero: `{0..hi}` is the ceiling respelled (`atMost(hi)`). */
58
+ type BetweenFloorBan<Lo extends bigint> = Lo extends 0n ? BannedWindow<"`{0..hi}` — a ceiling is written atMost(hi)"> : unknown;
59
+ /**
60
+ * The ban verdict on `between(lo, hi)`, judged on the second bound once
61
+ * both literals are known: `{n..n}` is the exact count respelled
62
+ * (`exactly(n)`, or `none` at 0), and `{0..hi}` is the ceiling respelled
63
+ * (`atMost(hi)` — the five constructors PARTITION the legal windows, so
64
+ * the one ceiling window keeps its one spelling). Bound ORDER (`{hi..lo}`
65
+ * inverted) is not type-expressible — bigint literals have no type-level
66
+ * comparison — so inversion stays a construction error below.
67
+ */
68
+ type BetweenBan<Lo extends bigint, Hi extends bigint> = bigint extends Lo ? unknown : bigint extends Hi ? unknown : IsNegative<Lo> extends true ? BannedWindow<"window counts are u64 — a negative bound is out of domain"> : IsNegative<Hi> extends true ? BannedWindow<"window counts are u64 — a negative bound is out of domain"> : Lo extends Hi ? Hi extends Lo ? Lo extends 0n ? BannedWindow<"`{0..0}` — the exclusion is written `{0}`: use none"> : BannedWindow<"`{n..n}` — an exact count is written `{n}`: use exactly(n)"> : BetweenFloorBan<Lo> : BetweenFloorBan<Lo>;
29
69
  /**
30
70
  * `{n}` — THE exact-count spelling, n ≥ 1. `exactly(0)` is the exclusion
31
- * respelled and rejected naming `none`.
71
+ * respelled: unwritable as a literal ({@link ExactlyBan} names `none`),
72
+ * rejected at construction when computed.
32
73
  */
33
- declare function exactly(n: bigint): Count;
74
+ declare function exactly<const N extends bigint>(n: N & ExactlyBan<N>): Count;
34
75
  /** `{0}` — the exclusion: no source fact may pair with the target group. */
35
76
  declare const none: Count;
36
77
  /**
37
- * `{lo..hi}` — both bounds explicit, 0 ≤ lo < hi. `lo === hi` is the exact
38
- * count respelled (rejected naming `exactly(n)`, or `none` at 0); an
39
- * inverted window is unsatisfiable and rejected.
78
+ * `{lo..hi}` — both bounds explicit, 1 ≤ lo < hi. `lo === hi` is the exact
79
+ * count respelled and `lo === 0` is the ceiling respelled: unwritable as
80
+ * literals ({@link BetweenBan} names `exactly(n)`, `none` at `{0..0}`, or
81
+ * `atMost(hi)` at a zero floor — the five constructors PARTITION the legal
82
+ * windows), rejected at construction when computed; an inverted window is
83
+ * unsatisfiable and rejected at construction (bigint literals carry no
84
+ * type-level order).
40
85
  */
41
- declare function between(lo: bigint, hi: bigint): Count;
86
+ declare function between<const Lo extends bigint, const Hi extends bigint>(lo: Lo, hi: Hi & BetweenBan<Lo, Hi>): Count;
42
87
  /**
43
88
  * `{lo..*}` — a floor with no ceiling, lo ≥ 2: `atLeast(1)` says only what
44
- * the bare containment says (rejected naming `contained`), and
45
- * `atLeast(0)` is vacuous (rejected naming deletion).
89
+ * the bare containment says and `atLeast(0)` is vacuous — both unwritable
90
+ * as literals ({@link AtLeastBan} names the canonical form), rejected at
91
+ * construction when computed.
46
92
  */
47
- declare function atLeast(lo: bigint): Count;
93
+ declare function atLeast<const N extends bigint>(lo: N & AtLeastBan<N>): Count;
48
94
  /**
49
- * `{0..hi}` — a ceiling, hi ≥ 1: `atMost(0)` is the exclusion respelled
50
- * and rejected naming `none`.
95
+ * `{0..hi}` — a ceiling, hi ≥ 1: `atMost(0)` is the exclusion respelled
96
+ * unwritable as a literal ({@link AtMostBan} names `none`), rejected at
97
+ * construction when computed.
51
98
  */
52
- declare function atMost(hi: bigint): Count;
99
+ declare function atMost<const N extends bigint>(hi: N & AtMostBan<N>): Count;
53
100
  export type { Count };
54
101
  export { atLeast, atMost, between, exactly, none };
55
102
  //# sourceMappingURL=count.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"count.d.ts","sourceRoot":"","sources":["../src/count.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,UAAU,CAAA;AAK1C;;;;;;;GAOG;AACH,QAAA,MAAM,QAAQ,EAAE,OAAO,MAA0C,CAAA;AAEjE;;;;GAIG;AACH,UAAU,KAAK;IACd,QAAQ,CAAC,MAAM,EAAE,UAAU,CAAA;IAC3B,QAAQ,CAAC,CAAC,QAAQ,CAAC,EAAE,IAAI,CAAA;CACzB;AAOD;;;GAGG;AACH,iBAAS,OAAO,CAAC,CAAC,EAAE,MAAM,GAAG,KAAK,CAQjC;AAED,4EAA4E;AAC5E,QAAA,MAAM,IAAI,EAAE,KAAwB,CAAA;AAEpC;;;;GAIG;AACH,iBAAS,OAAO,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,KAAK,CAgB9C;AAED;;;;GAIG;AACH,iBAAS,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,CAalC;AAED;;;GAGG;AACH,iBAAS,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,KAAK,CAQjC;AAED,YAAY,EAAE,KAAK,EAAE,CAAA;AACrB,OAAO,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,CAAA"}
1
+ {"version":3,"file":"count.d.ts","sourceRoot":"","sources":["../src/count.ts"],"names":[],"mappings":"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"}
package/dist/count.js CHANGED
@@ -1,10 +1,22 @@
1
1
  /**
2
2
  * Cardinality-window counts — exactly five constructors, and nothing else
3
- * (`docs/architecture/70-api.md` § the canonical-utterance law). The ban
4
- * table is enforced REPRESENTATIONALLY, stronger than Rust's expansion
5
- * errors: `{1..*}`, `{n..n}`, `{0..0}`, `{0..*}`, and inverted windows have
6
- * NO constructor — the spellings that could produce them are construction
7
- * errors naming the canonical form, and no other spelling exists at all.
3
+ * (`docs/architecture/70-api.md` § the canonical-utterance law). The five
4
+ * constructors PARTITION the legal windows, and the ban table is enforced
5
+ * REPRESENTATIONALLY, stronger than Rust's expansion errors, in two tiers:
6
+ *
7
+ * - **The type tier**: a banned spelling written as a LITERAL does not
8
+ * compile — `exactly(0n)`, `between(n, n)`, `between(0n, hi)`,
9
+ * `atLeast(0n)`, `atLeast(1n)`, `atMost(0n)`, and every negative bound
10
+ * are type errors naming the canonical form (`{n..n}`, `{0..0}`,
11
+ * `{0..hi}`-via-between, `{0..*}`, `{1..*}` have NO argument shape that
12
+ * produces them), and no sixth constructor exists at all.
13
+ * - **The construction tier**: a bound the type level cannot judge — a
14
+ * COMPUTED `bigint`, whose literal identity is erased, or an inverted
15
+ * `between(lo, hi)` order, which type-level bigints cannot compare — is
16
+ * judged here at construction with the same canonical-naming errors; and
17
+ * past both tiers the engine's own spec validation remains the law for a
18
+ * hostile FFI caller (the standing two-tier ban enforcement).
19
+ *
8
20
  * Bounds are `bigint` (u64 crosses as bigint always, PRD-04's law).
9
21
  */
10
22
  import * as errors from "@superbuilders/errors";
@@ -21,11 +33,13 @@ const exclusion = Object.freeze({ kind: "exact", n: 0n });
21
33
  const admitted = Symbol("bumbledb.count.admitted");
22
34
  /** Stamps one admitted window as a frozen `Count` value. */
23
35
  function admit(window) {
24
- return Object.freeze({ window, [admitted]: true });
36
+ const count = { window, [admitted]: true };
37
+ return Object.freeze(count);
25
38
  }
26
39
  /**
27
40
  * `{n}` — THE exact-count spelling, n ≥ 1. `exactly(0)` is the exclusion
28
- * respelled and rejected naming `none`.
41
+ * respelled: unwritable as a literal ({@link ExactlyBan} names `none`),
42
+ * rejected at construction when computed.
29
43
  */
30
44
  function exactly(n) {
31
45
  if (n < 0n) {
@@ -39,9 +53,13 @@ function exactly(n) {
39
53
  /** `{0}` — the exclusion: no source fact may pair with the target group. */
40
54
  const none = admit(exclusion);
41
55
  /**
42
- * `{lo..hi}` — both bounds explicit, 0 ≤ lo < hi. `lo === hi` is the exact
43
- * count respelled (rejected naming `exactly(n)`, or `none` at 0); an
44
- * inverted window is unsatisfiable and rejected.
56
+ * `{lo..hi}` — both bounds explicit, 1 ≤ lo < hi. `lo === hi` is the exact
57
+ * count respelled and `lo === 0` is the ceiling respelled: unwritable as
58
+ * literals ({@link BetweenBan} names `exactly(n)`, `none` at `{0..0}`, or
59
+ * `atMost(hi)` at a zero floor — the five constructors PARTITION the legal
60
+ * windows), rejected at construction when computed; an inverted window is
61
+ * unsatisfiable and rejected at construction (bigint literals carry no
62
+ * type-level order).
45
63
  */
46
64
  function between(lo, hi) {
47
65
  if (lo < 0n || hi < 0n) {
@@ -56,12 +74,16 @@ function between(lo, hi) {
56
74
  }
57
75
  throw errors.new(`\`{${lo}..${lo}}\` — an exact count is written \`{${lo}}\`: use exactly(${lo})`);
58
76
  }
77
+ if (lo === 0n) {
78
+ throw errors.new(`\`{0..${hi}}\` — a ceiling is written atMost: use atMost(${hi})`);
79
+ }
59
80
  return admit(Object.freeze({ kind: "range", lo, hi }));
60
81
  }
61
82
  /**
62
83
  * `{lo..*}` — a floor with no ceiling, lo ≥ 2: `atLeast(1)` says only what
63
- * the bare containment says (rejected naming `contained`), and
64
- * `atLeast(0)` is vacuous (rejected naming deletion).
84
+ * the bare containment says and `atLeast(0)` is vacuous — both unwritable
85
+ * as literals ({@link AtLeastBan} names the canonical form), rejected at
86
+ * construction when computed.
65
87
  */
66
88
  function atLeast(lo) {
67
89
  if (lo < 0n) {
@@ -76,8 +98,9 @@ function atLeast(lo) {
76
98
  return admit(Object.freeze({ kind: "floor", lo }));
77
99
  }
78
100
  /**
79
- * `{0..hi}` — a ceiling, hi ≥ 1: `atMost(0)` is the exclusion respelled
80
- * and rejected naming `none`.
101
+ * `{0..hi}` — a ceiling, hi ≥ 1: `atMost(0)` is the exclusion respelled
102
+ * unwritable as a literal ({@link AtMostBan} names `none`), rejected at
103
+ * construction when computed.
81
104
  */
82
105
  function atMost(hi) {
83
106
  if (hi < 0n) {
package/dist/count.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"count.js","sourceRoot":"","sources":["../src/count.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"count.js","sourceRoot":"","sources":["../src/count.ts"],"names":[],"mappings":"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"}