@rindle/normalized 0.7.2 → 0.7.3-rc.1

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.
@@ -1 +1 @@
1
- {"version":3,"file":"agg-table.d.ts","sourceRoot":"","sources":["../src/agg-table.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAEV,GAAG,EAEH,kBAAkB,EAGlB,qBAAqB,EAEtB,MAAM,gBAAgB,CAAC;AAsCxB;;;;wEAIwE;AACxE,wBAAgB,YAAY,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAM5D;AA8FD;;6FAE6F;AAC7F,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,qBAAqB,EAAE,CAIvG;AAoBD;;;;;wFAKwF;AACxF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,GAAG,CAGrF"}
1
+ {"version":3,"file":"agg-table.d.ts","sourceRoot":"","sources":["../src/agg-table.ts"],"names":[],"mappings":"AAaA,OAAO,KAAK,EAEV,GAAG,EAEH,kBAAkB,EAGlB,qBAAqB,EAEtB,MAAM,gBAAgB,CAAC;AA2CxB;;;;wEAIwE;AACxE,wBAAgB,YAAY,CAAC,GAAG,EAAE,kBAAkB,GAAG,MAAM,CAM5D;AA0ID;;6FAE6F;AAC7F,wBAAgB,eAAe,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,qBAAqB,EAAE,CAIvG;AAoBD;;;;;wFAKwF;AACxF,wBAAgB,iBAAiB,CAAC,GAAG,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,OAAO,GAAG,GAAG,CAGrF"}
package/dist/agg-table.js CHANGED
@@ -42,6 +42,12 @@ class Fnv {
42
42
  for (const b of new Uint8Array(buf))
43
43
  this.byte(b);
44
44
  }
45
+ /** An `i64` little-endian (Rust `i.to_le_bytes()` — two's complement). */
46
+ i64(v) {
47
+ const u = BigInt.asUintN(64, v);
48
+ for (let shift = 0n; shift < 64n; shift += 8n)
49
+ this.byte(Number((u >> shift) & 0xffn));
50
+ }
45
51
  hex() {
46
52
  return this.h.toString(16).padStart(16, "0");
47
53
  }
@@ -134,6 +140,12 @@ function hashValuePosition(f, vp) {
134
140
  hashLit(f, vp.value);
135
141
  }
136
142
  }
143
+ // The serde boundary for a number literal (Rust `Lit`, untagged): an INTEGER-form JSON
144
+ // token in i64 range deserializes as `Lit::Int`; every other number falls through to
145
+ // `Number(f64)`.
146
+ const INTEGER_TOKEN = /^-?[0-9]+$/;
147
+ const I64_MIN = -(1n << 63n);
148
+ const I64_MAX = (1n << 63n) - 1n;
137
149
  function hashLit(f, lit) {
138
150
  if (lit === null)
139
151
  f.byte(0);
@@ -142,13 +154,51 @@ function hashLit(f, lit) {
142
154
  f.byte(lit ? 1 : 0);
143
155
  }
144
156
  else if (typeof lit === "number") {
145
- f.byte(2);
146
- f.f64(lit);
157
+ // The exact-int plane, mirroring serde's untagged rule for Rust `Lit` (design 226
158
+ // Stage B): what serde sees is the WIRE TOKEN, so hash the token, not the binary
159
+ // value. `String(lit)` is exactly the token `JSON.stringify` emits, and above 2^53
160
+ // the two diverge: JS serializes the SHORTEST decimal that round-trips (`2 ** 60` →
161
+ // "1152921504606847000", not ...846976), and serde parses that token as the i64.
162
+ // An integer-form token in i64 range → `Lit::Int` → tag 5 + exact i64 LE bytes;
163
+ // everything else (non-integral, exponent-form ≥ 1e21, out of i64 range) → tag 2 +
164
+ // f64 — where serde's parse also lands back on `lit`'s exact bits. Hashing either
165
+ // side differently would name a different synthetic table from the server's, and
166
+ // the aggregate rows would never route.
167
+ if (!Number.isFinite(lit)) {
168
+ // NaN/±Infinity have NO wire token — `JSON.stringify` emits `null`, so the
169
+ // server parses `Lit::Null` and hashes the null tag. Mirror that, not the
170
+ // binary f64 bits String() would suggest ("NaN" is not a JSON token).
171
+ f.byte(0);
172
+ return;
173
+ }
174
+ const token = String(lit);
175
+ let int = null;
176
+ if (INTEGER_TOKEN.test(token)) {
177
+ const parsed = BigInt(token);
178
+ if (parsed >= I64_MIN && parsed <= I64_MAX)
179
+ int = parsed;
180
+ }
181
+ if (int !== null) {
182
+ f.byte(5);
183
+ f.i64(int);
184
+ }
185
+ else {
186
+ f.byte(2);
187
+ f.f64(lit);
188
+ }
147
189
  }
148
190
  else if (typeof lit === "string") {
149
191
  f.byte(3);
150
192
  f.s(lit);
151
193
  }
194
+ else if (typeof lit === "bigint") {
195
+ // A bigint literal cannot reach the server at all — `JSON.stringify` throws on
196
+ // bigint, so no wire token exists to mirror. Refuse informatively here rather
197
+ // than fall into the array branch's `lit.length`/iteration TypeError.
198
+ throw new Error("bigint literals are not supported on the live-query wire until the browser " +
199
+ "bigint lane ships (design 226) — pass a number, or read exact int64 cells " +
200
+ "through the SQL plane");
201
+ }
152
202
  else {
153
203
  f.byte(4);
154
204
  f.u32(lit.length);
@@ -1 +1 @@
1
- {"version":3,"file":"agg-table.js","sourceRoot":"","sources":["../src/agg-table.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"agg-table.js","sourceRoot":"","sources":["../src/agg-table.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rindle/normalized",
3
- "version": "0.7.2",
3
+ "version": "0.7.3-rc.1",
4
4
  "license": "Apache-2.0",
5
5
  "repository": {
6
6
  "type": "git",
@@ -25,8 +25,8 @@
25
25
  "README.md"
26
26
  ],
27
27
  "dependencies": {
28
- "@rindle/wasm": "0.7.2",
29
- "@rindle/client": "0.7.2"
28
+ "@rindle/client": "0.7.3-rc.1",
29
+ "@rindle/wasm": "0.7.3-rc.1"
30
30
  },
31
31
  "devDependencies": {
32
32
  "@types/node": "^22.10.0",
package/src/agg-table.ts CHANGED
@@ -53,6 +53,11 @@ class Fnv {
53
53
  new DataView(buf).setFloat64(0, v, true);
54
54
  for (const b of new Uint8Array(buf)) this.byte(b);
55
55
  }
56
+ /** An `i64` little-endian (Rust `i.to_le_bytes()` — two's complement). */
57
+ i64(v: bigint): void {
58
+ const u = BigInt.asUintN(64, v);
59
+ for (let shift = 0n; shift < 64n; shift += 8n) this.byte(Number((u >> shift) & 0xffn));
60
+ }
56
61
  hex(): string {
57
62
  return this.h.toString(16).padStart(16, "0");
58
63
  }
@@ -145,17 +150,61 @@ function hashValuePosition(f: Fnv, vp: ValuePosition): void {
145
150
  }
146
151
  }
147
152
 
153
+ // The serde boundary for a number literal (Rust `Lit`, untagged): an INTEGER-form JSON
154
+ // token in i64 range deserializes as `Lit::Int`; every other number falls through to
155
+ // `Number(f64)`.
156
+ const INTEGER_TOKEN = /^-?[0-9]+$/;
157
+ const I64_MIN = -(1n << 63n);
158
+ const I64_MAX = (1n << 63n) - 1n;
159
+
148
160
  function hashLit(f: Fnv, lit: LitValue): void {
149
161
  if (lit === null) f.byte(0);
150
162
  else if (typeof lit === "boolean") {
151
163
  f.byte(1);
152
164
  f.byte(lit ? 1 : 0);
153
165
  } else if (typeof lit === "number") {
154
- f.byte(2);
155
- f.f64(lit);
166
+ // The exact-int plane, mirroring serde's untagged rule for Rust `Lit` (design 226
167
+ // Stage B): what serde sees is the WIRE TOKEN, so hash the token, not the binary
168
+ // value. `String(lit)` is exactly the token `JSON.stringify` emits, and above 2^53
169
+ // the two diverge: JS serializes the SHORTEST decimal that round-trips (`2 ** 60` →
170
+ // "1152921504606847000", not ...846976), and serde parses that token as the i64.
171
+ // An integer-form token in i64 range → `Lit::Int` → tag 5 + exact i64 LE bytes;
172
+ // everything else (non-integral, exponent-form ≥ 1e21, out of i64 range) → tag 2 +
173
+ // f64 — where serde's parse also lands back on `lit`'s exact bits. Hashing either
174
+ // side differently would name a different synthetic table from the server's, and
175
+ // the aggregate rows would never route.
176
+ if (!Number.isFinite(lit)) {
177
+ // NaN/±Infinity have NO wire token — `JSON.stringify` emits `null`, so the
178
+ // server parses `Lit::Null` and hashes the null tag. Mirror that, not the
179
+ // binary f64 bits String() would suggest ("NaN" is not a JSON token).
180
+ f.byte(0);
181
+ return;
182
+ }
183
+ const token = String(lit);
184
+ let int: bigint | null = null;
185
+ if (INTEGER_TOKEN.test(token)) {
186
+ const parsed = BigInt(token);
187
+ if (parsed >= I64_MIN && parsed <= I64_MAX) int = parsed;
188
+ }
189
+ if (int !== null) {
190
+ f.byte(5);
191
+ f.i64(int);
192
+ } else {
193
+ f.byte(2);
194
+ f.f64(lit);
195
+ }
156
196
  } else if (typeof lit === "string") {
157
197
  f.byte(3);
158
198
  f.s(lit);
199
+ } else if (typeof lit === "bigint") {
200
+ // A bigint literal cannot reach the server at all — `JSON.stringify` throws on
201
+ // bigint, so no wire token exists to mirror. Refuse informatively here rather
202
+ // than fall into the array branch's `lit.length`/iteration TypeError.
203
+ throw new Error(
204
+ "bigint literals are not supported on the live-query wire until the browser " +
205
+ "bigint lane ships (design 226) — pass a number, or read exact int64 cells " +
206
+ "through the SQL plane",
207
+ );
159
208
  } else {
160
209
  f.byte(4);
161
210
  f.u32(lit.length);