@rindle/normalized 0.7.2 → 0.7.3
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/dist/agg-table.d.ts.map +1 -1
- package/dist/agg-table.js +52 -2
- package/dist/agg-table.js.map +1 -1
- package/package.json +3 -3
- package/src/agg-table.ts +51 -2
package/dist/agg-table.d.ts.map
CHANGED
|
@@ -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;
|
|
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
|
-
|
|
146
|
-
|
|
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);
|
package/dist/agg-table.js.map
CHANGED
|
@@ -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.
|
|
3
|
+
"version": "0.7.3",
|
|
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/
|
|
29
|
-
"@rindle/
|
|
28
|
+
"@rindle/client": "0.7.3",
|
|
29
|
+
"@rindle/wasm": "0.7.3"
|
|
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
|
-
|
|
155
|
-
|
|
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);
|