@supalive/core 0.1.4 → 0.1.6
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/README.md +17 -2
- package/dist/bytes-AuEkyxeU.js +19 -0
- package/dist/bytes-AuEkyxeU.js.map +1 -0
- package/dist/codec-BHAmGEIQ.js +62 -0
- package/dist/codec-BHAmGEIQ.js.map +1 -0
- package/dist/helper-CiacMqje.d.ts +14 -0
- package/dist/helper-CiacMqje.d.ts.map +1 -0
- package/dist/helper-wGbzz6zo.js +42 -0
- package/dist/helper-wGbzz6zo.js.map +1 -0
- package/dist/index-CaWMDqq0.d.ts +1754 -0
- package/dist/index-CaWMDqq0.d.ts.map +1 -0
- package/dist/mysql-Cxd4Uq5p.d.ts +104 -0
- package/dist/mysql-Cxd4Uq5p.d.ts.map +1 -0
- package/dist/mysql-bvnjYWvZ.js +570 -0
- package/dist/mysql-bvnjYWvZ.js.map +1 -0
- package/dist/overlap-checker-Ct_HP_iB.js +187 -0
- package/dist/overlap-checker-Ct_HP_iB.js.map +1 -0
- package/dist/postgres-B8u1YN8X.js +824 -0
- package/dist/postgres-B8u1YN8X.js.map +1 -0
- package/dist/postgres-Ck-xt72U.d.ts +108 -0
- package/dist/postgres-Ck-xt72U.d.ts.map +1 -0
- package/dist/procedure-DX87tyef.js +124 -0
- package/dist/procedure-DX87tyef.js.map +1 -0
- package/dist/query-Bh0RNxDz.js +673 -0
- package/dist/query-Bh0RNxDz.js.map +1 -0
- package/dist/realtime_db-DOCgqbwi.js +247 -0
- package/dist/realtime_db-DOCgqbwi.js.map +1 -0
- package/dist/router-DlTYWpop.js +81 -0
- package/dist/router-DlTYWpop.js.map +1 -0
- package/dist/schema-Dd7u0A1L.js +109 -0
- package/dist/schema-Dd7u0A1L.js.map +1 -0
- package/dist/src/client/index.d.ts +2 -17
- package/dist/src/client/index.js +1152 -18
- package/dist/src/client/index.js.map +1 -1
- package/dist/src/exports/mysql.d.ts +2 -2
- package/dist/src/exports/mysql.js +2 -2
- package/dist/src/exports/postgres.d.ts +2 -2
- package/dist/src/exports/postgres.js +2 -2
- package/dist/src/exports/procedure.d.ts +3 -5
- package/dist/src/exports/procedure.js +6 -5
- package/dist/src/exports/schema-sql.d.ts +18 -0
- package/dist/src/exports/schema-sql.d.ts.map +1 -0
- package/dist/src/exports/schema-sql.js +161 -0
- package/dist/src/exports/schema-sql.js.map +1 -0
- package/dist/src/exports/server.d.ts +368 -2
- package/dist/src/exports/server.d.ts.map +1 -1
- package/dist/src/exports/server.js +1346 -2
- package/dist/src/exports/server.js.map +1 -1
- package/dist/src/exports/subscription-manager-worker-entry.d.ts +1 -0
- package/dist/src/exports/subscription-manager-worker-entry.js +115 -0
- package/dist/src/exports/subscription-manager-worker-entry.js.map +1 -0
- package/dist/src/exports/types.d.ts +4 -6
- package/dist/src/exports/types.js +5 -6
- package/dist/subscription-worker-pahX0zxg.js +511 -0
- package/dist/subscription-worker-pahX0zxg.js.map +1 -0
- package/dist/types_client_rpc-CIsjQQGG.js +105 -0
- package/dist/types_client_rpc-CIsjQQGG.js.map +1 -0
- package/dist/types_db-DXj_l9n-.js +168 -0
- package/dist/types_db-DXj_l9n-.js.map +1 -0
- package/dist/types_server-Dk6o_B7N.js +24 -0
- package/dist/types_server-Dk6o_B7N.js.map +1 -0
- package/dist/types_server-TFo6SWDH.d.ts +216 -0
- package/dist/types_server-TFo6SWDH.d.ts.map +1 -0
- package/package.json +7 -3
- package/dist/src/client/caller_client.d.ts +0 -42
- package/dist/src/client/caller_client.d.ts.map +0 -1
- package/dist/src/client/caller_client.js +0 -77
- package/dist/src/client/caller_client.js.map +0 -1
- package/dist/src/client/client.d.ts +0 -149
- package/dist/src/client/client.d.ts.map +0 -1
- package/dist/src/client/client.js +0 -308
- package/dist/src/client/client.js.map +0 -1
- package/dist/src/client/index.d.ts.map +0 -1
- package/dist/src/client/sub_key.d.ts +0 -20
- package/dist/src/client/sub_key.d.ts.map +0 -1
- package/dist/src/client/sub_key.js +0 -37
- package/dist/src/client/sub_key.js.map +0 -1
- package/dist/src/client/ws_client_manager.d.ts +0 -268
- package/dist/src/client/ws_client_manager.d.ts.map +0 -1
- package/dist/src/client/ws_client_manager.js +0 -1013
- package/dist/src/client/ws_client_manager.js.map +0 -1
- package/dist/src/config.d.ts +0 -117
- package/dist/src/config.d.ts.map +0 -1
- package/dist/src/config.js +0 -2
- package/dist/src/config.js.map +0 -1
- package/dist/src/db/bytes.d.ts +0 -4
- package/dist/src/db/bytes.d.ts.map +0 -1
- package/dist/src/db/bytes.js +0 -24
- package/dist/src/db/bytes.js.map +0 -1
- package/dist/src/db/cache.d.ts +0 -30
- package/dist/src/db/cache.d.ts.map +0 -1
- package/dist/src/db/cache.js +0 -153
- package/dist/src/db/cache.js.map +0 -1
- package/dist/src/db/codec.d.ts +0 -10
- package/dist/src/db/codec.d.ts.map +0 -1
- package/dist/src/db/codec.js +0 -73
- package/dist/src/db/codec.js.map +0 -1
- package/dist/src/db/context.d.ts +0 -28
- package/dist/src/db/context.d.ts.map +0 -1
- package/dist/src/db/context.js +0 -147
- package/dist/src/db/context.js.map +0 -1
- package/dist/src/db/db.d.ts +0 -154
- package/dist/src/db/db.d.ts.map +0 -1
- package/dist/src/db/db.js +0 -23
- package/dist/src/db/db.js.map +0 -1
- package/dist/src/db/mysql.d.ts +0 -120
- package/dist/src/db/mysql.d.ts.map +0 -1
- package/dist/src/db/mysql.js +0 -708
- package/dist/src/db/mysql.js.map +0 -1
- package/dist/src/db/postgres.d.ts +0 -116
- package/dist/src/db/postgres.d.ts.map +0 -1
- package/dist/src/db/postgres.js +0 -998
- package/dist/src/db/postgres.js.map +0 -1
- package/dist/src/db/query.d.ts +0 -174
- package/dist/src/db/query.d.ts.map +0 -1
- package/dist/src/db/query.js +0 -790
- package/dist/src/db/query.js.map +0 -1
- package/dist/src/db/query_definition.d.ts +0 -54
- package/dist/src/db/query_definition.d.ts.map +0 -1
- package/dist/src/db/query_definition.js +0 -47
- package/dist/src/db/query_definition.js.map +0 -1
- package/dist/src/db/realtime_db.d.ts +0 -19
- package/dist/src/db/realtime_db.d.ts.map +0 -1
- package/dist/src/db/realtime_db.js +0 -98
- package/dist/src/db/realtime_db.js.map +0 -1
- package/dist/src/db/schema.d.ts +0 -110
- package/dist/src/db/schema.d.ts.map +0 -1
- package/dist/src/db/schema.js +0 -47
- package/dist/src/db/schema.js.map +0 -1
- package/dist/src/db/types_client_rpc.d.ts +0 -157
- package/dist/src/db/types_client_rpc.d.ts.map +0 -1
- package/dist/src/db/types_client_rpc.js +0 -106
- package/dist/src/db/types_client_rpc.js.map +0 -1
- package/dist/src/db/types_db.d.ts +0 -236
- package/dist/src/db/types_db.d.ts.map +0 -1
- package/dist/src/db/types_db.js +0 -188
- package/dist/src/db/types_db.js.map +0 -1
- package/dist/src/exports/mysql.d.ts.map +0 -1
- package/dist/src/exports/mysql.js.map +0 -1
- package/dist/src/exports/postgres.d.ts.map +0 -1
- package/dist/src/exports/postgres.js.map +0 -1
- package/dist/src/exports/procedure.d.ts.map +0 -1
- package/dist/src/exports/procedure.js.map +0 -1
- package/dist/src/exports/types.d.ts.map +0 -1
- package/dist/src/exports/types.js.map +0 -1
- package/dist/src/helper.d.ts +0 -11
- package/dist/src/helper.d.ts.map +0 -1
- package/dist/src/helper.js +0 -45
- package/dist/src/helper.js.map +0 -1
- package/dist/src/logger.d.ts +0 -7
- package/dist/src/logger.d.ts.map +0 -1
- package/dist/src/logger.js +0 -47
- package/dist/src/logger.js.map +0 -1
- package/dist/src/router/index.d.ts +0 -4
- package/dist/src/router/index.d.ts.map +0 -1
- package/dist/src/router/index.js +0 -4
- package/dist/src/router/index.js.map +0 -1
- package/dist/src/router/procedure.d.ts +0 -204
- package/dist/src/router/procedure.d.ts.map +0 -1
- package/dist/src/router/procedure.js +0 -122
- package/dist/src/router/procedure.js.map +0 -1
- package/dist/src/router/router.d.ts +0 -88
- package/dist/src/router/router.d.ts.map +0 -1
- package/dist/src/router/router.js +0 -88
- package/dist/src/router/router.js.map +0 -1
- package/dist/src/server/hash.d.ts +0 -12
- package/dist/src/server/hash.d.ts.map +0 -1
- package/dist/src/server/hash.js +0 -20
- package/dist/src/server/hash.js.map +0 -1
- package/dist/src/server/hash.test.d.ts +0 -2
- package/dist/src/server/hash.test.d.ts.map +0 -1
- package/dist/src/server/hash.test.js +0 -43
- package/dist/src/server/hash.test.js.map +0 -1
- package/dist/src/server/index.d.ts +0 -9
- package/dist/src/server/index.d.ts.map +0 -1
- package/dist/src/server/index.js +0 -8
- package/dist/src/server/index.js.map +0 -1
- package/dist/src/server/overlap-checker.d.ts +0 -18
- package/dist/src/server/overlap-checker.d.ts.map +0 -1
- package/dist/src/server/overlap-checker.js +0 -247
- package/dist/src/server/overlap-checker.js.map +0 -1
- package/dist/src/server/sub_hash.d.ts +0 -23
- package/dist/src/server/sub_hash.d.ts.map +0 -1
- package/dist/src/server/sub_hash.js +0 -38
- package/dist/src/server/sub_hash.js.map +0 -1
- package/dist/src/server/subscription-manager-client.d.ts +0 -120
- package/dist/src/server/subscription-manager-client.d.ts.map +0 -1
- package/dist/src/server/subscription-manager-client.js +0 -207
- package/dist/src/server/subscription-manager-client.js.map +0 -1
- package/dist/src/server/subscription-manager-types.d.ts +0 -168
- package/dist/src/server/subscription-manager-types.d.ts.map +0 -1
- package/dist/src/server/subscription-manager-types.js +0 -94
- package/dist/src/server/subscription-manager-types.js.map +0 -1
- package/dist/src/server/subscription-manager-worker-entry.d.ts +0 -2
- package/dist/src/server/subscription-manager-worker-entry.d.ts.map +0 -1
- package/dist/src/server/subscription-manager-worker-entry.js +0 -127
- package/dist/src/server/subscription-manager-worker-entry.js.map +0 -1
- package/dist/src/server/subscription-manager-worker-protocol.d.ts +0 -40
- package/dist/src/server/subscription-manager-worker-protocol.d.ts.map +0 -1
- package/dist/src/server/subscription-manager-worker-protocol.js +0 -20
- package/dist/src/server/subscription-manager-worker-protocol.js.map +0 -1
- package/dist/src/server/subscription-manager.d.ts +0 -32
- package/dist/src/server/subscription-manager.d.ts.map +0 -1
- package/dist/src/server/subscription-manager.js +0 -249
- package/dist/src/server/subscription-manager.js.map +0 -1
- package/dist/src/server/subscription-manager.test.d.ts +0 -2
- package/dist/src/server/subscription-manager.test.d.ts.map +0 -1
- package/dist/src/server/subscription-manager.test.js +0 -610
- package/dist/src/server/subscription-manager.test.js.map +0 -1
- package/dist/src/server/subscription-worker.d.ts +0 -32
- package/dist/src/server/subscription-worker.d.ts.map +0 -1
- package/dist/src/server/subscription-worker.js +0 -190
- package/dist/src/server/subscription-worker.js.map +0 -1
- package/dist/src/server/supalive-server.d.ts +0 -158
- package/dist/src/server/supalive-server.d.ts.map +0 -1
- package/dist/src/server/supalive-server.js +0 -1048
- package/dist/src/server/supalive-server.js.map +0 -1
- package/dist/src/server/types_server.d.ts +0 -96
- package/dist/src/server/types_server.d.ts.map +0 -1
- package/dist/src/server/types_server.js +0 -36
- package/dist/src/server/types_server.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
package/README.md
CHANGED
|
@@ -100,10 +100,25 @@ export const appRouter = router({ procedures: { listItems, createItem } });
|
|
|
100
100
|
import { SupaliveWebSocketServer } from "@supalive/core/server";
|
|
101
101
|
import { appRouter } from "./procedures";
|
|
102
102
|
|
|
103
|
+
const { cacheLayer, redisSubClient } = initCacheLayer({
|
|
104
|
+
upstash: {
|
|
105
|
+
url: `https://${process.env.UPSTASH_REDIS_HOST}`,
|
|
106
|
+
token: process.env.UPSTASH_REDIS_TOKEN ?? "",
|
|
107
|
+
redisUrl: process.env.UPSTASH_REDIS_URL ?? ""
|
|
108
|
+
},
|
|
109
|
+
cacheTtlSeconds: 24 * 3600,
|
|
110
|
+
});
|
|
111
|
+
const db = await initDatabase({
|
|
112
|
+
DbConfig: { type: "postgres", connectionString: process.env.DATABASE_URL || '', },
|
|
113
|
+
CacheLayer: cacheLayer,
|
|
114
|
+
forceBootstrapReload: false,
|
|
115
|
+
});
|
|
116
|
+
|
|
103
117
|
const server = new SupaliveWebSocketServer({
|
|
104
118
|
port: 3000,
|
|
105
|
-
|
|
106
|
-
|
|
119
|
+
cacheLayer: cacheLayer,
|
|
120
|
+
redisSubClient: redisSubClient,
|
|
121
|
+
database: db,
|
|
107
122
|
subManagerUrl: process.env.SUB_MANAGER_URL!,
|
|
108
123
|
verifyAuth: async (data) => verifyJwt(data.token),
|
|
109
124
|
});
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
//#region src/db/bytes.ts
|
|
2
|
+
function bytesEqual(a, b) {
|
|
3
|
+
if (a === b) return true;
|
|
4
|
+
if (a.byteLength !== b.byteLength) return false;
|
|
5
|
+
for (let i = 0; i < a.byteLength; i++) if (a[i] !== b[i]) return false;
|
|
6
|
+
return true;
|
|
7
|
+
}
|
|
8
|
+
const _enc = new TextEncoder();
|
|
9
|
+
const _dec = new TextDecoder("utf-8");
|
|
10
|
+
function utf8Encode(s) {
|
|
11
|
+
return _enc.encode(s);
|
|
12
|
+
}
|
|
13
|
+
function utf8Decode(b) {
|
|
14
|
+
return _dec.decode(b);
|
|
15
|
+
}
|
|
16
|
+
//#endregion
|
|
17
|
+
export { utf8Decode as n, utf8Encode as r, bytesEqual as t };
|
|
18
|
+
|
|
19
|
+
//# sourceMappingURL=bytes-AuEkyxeU.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bytes-AuEkyxeU.js","names":[],"sources":["../src/db/bytes.ts"],"sourcesContent":["// Small helpers for byte arrays. We standardize on Uint8Array internally so\n// values survive structured clone (worker_threads postMessage) and stay\n// browser-safe. Buffer is a Uint8Array subclass, so values from pg/mysql\n// drivers satisfy Uint8Array fields automatically.\n\nexport function bytesEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a === b) return true;\n if (a.byteLength !== b.byteLength) return false;\n for (let i = 0; i < a.byteLength; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n}\n\nconst _enc = new TextEncoder();\nconst _dec = new TextDecoder(\"utf-8\");\n\nexport function utf8Encode(s: string): Uint8Array {\n return _enc.encode(s);\n}\n\nexport function utf8Decode(b: Uint8Array): string {\n return _dec.decode(b);\n}\n"],"mappings":";AAKA,SAAgB,WAAW,GAAe,GAAwB;CAChE,IAAI,MAAM,GAAG,OAAO;CACpB,IAAI,EAAE,eAAe,EAAE,YAAY,OAAO;CAC1C,KAAK,IAAI,IAAI,GAAG,IAAI,EAAE,YAAY,KAChC,IAAI,EAAE,OAAO,EAAE,IAAI,OAAO;CAE5B,OAAO;AACT;AAEA,MAAM,OAAO,IAAI,YAAY;AAC7B,MAAM,OAAO,IAAI,YAAY,OAAO;AAEpC,SAAgB,WAAW,GAAuB;CAChD,OAAO,KAAK,OAAO,CAAC;AACtB;AAEA,SAAgB,WAAW,GAAuB;CAChD,OAAO,KAAK,OAAO,CAAC;AACtB"}
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
import z from "zod";
|
|
2
|
+
//#region src/db/codec.ts
|
|
3
|
+
const commitTsCodec = {
|
|
4
|
+
encode: (value) => value,
|
|
5
|
+
decode: (value) => {
|
|
6
|
+
if (typeof value === "string") return BigInt(value);
|
|
7
|
+
switch (typeof value) {
|
|
8
|
+
case "string":
|
|
9
|
+
case "number":
|
|
10
|
+
case "boolean":
|
|
11
|
+
case "bigint": return BigInt(value);
|
|
12
|
+
default: throw new Error(`Unsupported commitTs type: ${typeof value}`);
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
};
|
|
16
|
+
const identityCodec = {
|
|
17
|
+
encode: (value) => value,
|
|
18
|
+
decode: (value) => value
|
|
19
|
+
};
|
|
20
|
+
const numberCodec = {
|
|
21
|
+
encode: (value) => value,
|
|
22
|
+
decode: (value) => typeof value === "string" ? Number(value) : value
|
|
23
|
+
};
|
|
24
|
+
const booleanCodec = {
|
|
25
|
+
encode: (value) => value,
|
|
26
|
+
decode: (value) => {
|
|
27
|
+
if (typeof value === "boolean") return value;
|
|
28
|
+
if (typeof value === "number") return value !== 0;
|
|
29
|
+
if (typeof value === "string") {
|
|
30
|
+
const normalized = value.toLowerCase();
|
|
31
|
+
return normalized === "t" || normalized === "1" || normalized === "true";
|
|
32
|
+
}
|
|
33
|
+
return Boolean(value);
|
|
34
|
+
}
|
|
35
|
+
};
|
|
36
|
+
const dateCodec = {
|
|
37
|
+
encode: (value) => value,
|
|
38
|
+
decode: (value) => value instanceof Date ? value : new Date(value)
|
|
39
|
+
};
|
|
40
|
+
function unwrapZodType(field) {
|
|
41
|
+
let current = field;
|
|
42
|
+
while (current instanceof z.ZodOptional || current instanceof z.ZodNullable || current instanceof z.ZodDefault || current instanceof z.ZodCatch || current instanceof z.ZodReadonly) current = current._def.innerType;
|
|
43
|
+
return current;
|
|
44
|
+
}
|
|
45
|
+
function getDefaultCodec(field) {
|
|
46
|
+
if (field instanceof z.ZodNumber) return numberCodec;
|
|
47
|
+
if (field instanceof z.ZodBoolean) return booleanCodec;
|
|
48
|
+
if (field instanceof z.ZodDate) return dateCodec;
|
|
49
|
+
return identityCodec;
|
|
50
|
+
}
|
|
51
|
+
function normalizeCodec(codec, zodField) {
|
|
52
|
+
const fallback = getDefaultCodec(zodField);
|
|
53
|
+
if (!codec) return fallback;
|
|
54
|
+
return {
|
|
55
|
+
encode: codec.encode ?? fallback.encode,
|
|
56
|
+
decode: codec.decode ?? fallback.decode
|
|
57
|
+
};
|
|
58
|
+
}
|
|
59
|
+
//#endregion
|
|
60
|
+
export { normalizeCodec as n, unwrapZodType as r, commitTsCodec as t };
|
|
61
|
+
|
|
62
|
+
//# sourceMappingURL=codec-BHAmGEIQ.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"codec-BHAmGEIQ.js","names":[],"sources":["../src/db/codec.ts"],"sourcesContent":["import z from \"zod\";\nimport { ColumnCodec } from \"./schema\";\n\nexport const commitTsCodec: ColumnCodec<bigint, unknown> = {\n encode: (value: bigint) => value,\n decode: (value: unknown) => {\n if (typeof value === \"string\") return BigInt(value);\n switch (typeof value) {\n case \"string\":\n case \"number\":\n case \"boolean\":\n case \"bigint\":\n return BigInt(value);\n default:\n throw new Error(`Unsupported commitTs type: ${typeof value}`);\n }\n },\n};\n\nexport const identityCodec: ColumnCodec<unknown, unknown> = {\n encode: (value) => value,\n decode: (value) => value,\n};\n\nexport const numberCodec: ColumnCodec<Number, unknown> = {\n encode: (value) => value,\n decode: (value) => (typeof value === \"string\" ? Number(value) : value as Number),\n};\n\nexport const booleanCodec: ColumnCodec<unknown, unknown> = {\n encode: (value) => value,\n decode: (value) => {\n if (typeof value === \"boolean\") return value;\n if (typeof value === \"number\") return value !== 0;\n if (typeof value === \"string\") {\n const normalized = value.toLowerCase();\n return normalized === \"t\" || normalized === \"1\" || normalized === \"true\";\n }\n return Boolean(value);\n },\n};\n\nexport const dateCodec: ColumnCodec<Date, unknown> = {\n encode: (value) => value,\n decode: (value) => (value instanceof Date ? value : new Date(value as string)),\n};\n\nexport function unwrapZodType(field: unknown): unknown {\n let current: unknown = field;\n while (\n current instanceof z.ZodOptional ||\n current instanceof z.ZodNullable ||\n current instanceof z.ZodDefault ||\n current instanceof z.ZodCatch ||\n current instanceof z.ZodReadonly\n ) {\n current = (current as any)._def.innerType;\n }\n return current;\n}\n\nexport function getDefaultCodec(field: unknown): ColumnCodec<any, unknown> {\n if (field instanceof z.ZodNumber) return numberCodec;\n if (field instanceof z.ZodBoolean) return booleanCodec;\n if (field instanceof z.ZodDate) return dateCodec;\n return identityCodec;\n}\n\nexport function normalizeCodec(\n codec: ColumnCodec<any, any> | undefined,\n zodField?: unknown\n): ColumnCodec<any, any> {\n const fallback = getDefaultCodec(zodField);\n if (!codec) return fallback;\n return {\n encode: codec.encode ?? fallback.encode,\n decode: codec.decode ?? fallback.decode,\n };\n}\n"],"mappings":";;AAGA,MAAa,gBAA8C;CACvD,SAAS,UAAkB;CAC3B,SAAS,UAAmB;EACxB,IAAI,OAAO,UAAU,UAAU,OAAO,OAAO,KAAK;EAClD,QAAQ,OAAO,OAAf;GACI,KAAK;GACL,KAAK;GACL,KAAK;GACL,KAAK,UACD,OAAO,OAAO,KAAK;GACvB,SACI,MAAM,IAAI,MAAM,8BAA8B,OAAO,OAAO;EACpE;CACJ;AACJ;AAEA,MAAa,gBAA+C;CACxD,SAAS,UAAU;CACnB,SAAS,UAAU;AACvB;AAEA,MAAa,cAA4C;CACrD,SAAS,UAAU;CACnB,SAAS,UAAW,OAAO,UAAU,WAAW,OAAO,KAAK,IAAI;AACpE;AAEA,MAAa,eAA8C;CACvD,SAAS,UAAU;CACnB,SAAS,UAAU;EACf,IAAI,OAAO,UAAU,WAAW,OAAO;EACvC,IAAI,OAAO,UAAU,UAAU,OAAO,UAAU;EAChD,IAAI,OAAO,UAAU,UAAU;GAC3B,MAAM,aAAa,MAAM,YAAY;GACrC,OAAO,eAAe,OAAO,eAAe,OAAO,eAAe;EACtE;EACA,OAAO,QAAQ,KAAK;CACxB;AACJ;AAEA,MAAa,YAAwC;CACjD,SAAS,UAAU;CACnB,SAAS,UAAW,iBAAiB,OAAO,QAAQ,IAAI,KAAK,KAAe;AAChF;AAEA,SAAgB,cAAc,OAAyB;CACnD,IAAI,UAAmB;CACvB,OACI,mBAAmB,EAAE,eACrB,mBAAmB,EAAE,eACrB,mBAAmB,EAAE,cACrB,mBAAmB,EAAE,YACrB,mBAAmB,EAAE,aAErB,UAAW,QAAgB,KAAK;CAEpC,OAAO;AACX;AAEA,SAAgB,gBAAgB,OAA2C;CACvE,IAAI,iBAAiB,EAAE,WAAW,OAAO;CACzC,IAAI,iBAAiB,EAAE,YAAY,OAAO;CAC1C,IAAI,iBAAiB,EAAE,SAAS,OAAO;CACvC,OAAO;AACX;AAEA,SAAgB,eACZ,OACA,UACqB;CACrB,MAAM,WAAW,gBAAgB,QAAQ;CACzC,IAAI,CAAC,OAAO,OAAO;CACnB,OAAO;EACH,QAAQ,MAAM,UAAU,SAAS;EACjC,QAAQ,MAAM,UAAU,SAAS;CACrC;AACJ"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
//#region src/helper.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* Synchronous deterministic JSON stringification.
|
|
4
|
+
* Keys are sorted; `undefined` values are dropped.
|
|
5
|
+
*
|
|
6
|
+
* Suitable for React `useEffect` dependency keys — calling this on the same
|
|
7
|
+
* logical input always produces the same string, regardless of property order.
|
|
8
|
+
*/
|
|
9
|
+
declare function stableStringify(input: unknown): string;
|
|
10
|
+
declare function supaliveStringify(input: unknown): string;
|
|
11
|
+
declare function groupByToMap<T, K>(items: Iterable<T>, getKey: (item: T) => K): Map<K, T[]>;
|
|
12
|
+
//#endregion
|
|
13
|
+
export { stableStringify as n, supaliveStringify as r, groupByToMap as t };
|
|
14
|
+
//# sourceMappingURL=helper-CiacMqje.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helper-CiacMqje.d.ts","names":[],"sources":["../src/helper.ts"],"mappings":";;AASA;;;;AAA8C;AAS9C;iBATgB,eAAA,CAAgB,KAAc;AAAA,iBAS9B,iBAAA,CAAkB,KAAc;AAAA,iBAchC,YAAA,OACd,KAAA,EAAO,QAAA,CAAS,CAAA,GAChB,MAAA,GAAS,IAAA,EAAM,CAAA,KAAM,CAAA,GACpB,GAAA,CAAI,CAAA,EAAG,CAAA"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import stableStringifyFn from "json-stable-stringify";
|
|
2
|
+
//#region src/helper.ts
|
|
3
|
+
/**
|
|
4
|
+
* Synchronous deterministic JSON stringification.
|
|
5
|
+
* Keys are sorted; `undefined` values are dropped.
|
|
6
|
+
*
|
|
7
|
+
* Suitable for React `useEffect` dependency keys — calling this on the same
|
|
8
|
+
* logical input always produces the same string, regardless of property order.
|
|
9
|
+
*/
|
|
10
|
+
function stableStringify(input) {
|
|
11
|
+
return stableStringifyFn(input, { replacer: (_, v) => {
|
|
12
|
+
if (typeof v === "bigint") return v.toString();
|
|
13
|
+
return v ?? void 0;
|
|
14
|
+
} }) ?? "";
|
|
15
|
+
}
|
|
16
|
+
function supaliveStringify(input) {
|
|
17
|
+
return JSON.stringify(input, (_, v) => {
|
|
18
|
+
if (typeof v === "bigint") return v.toString();
|
|
19
|
+
if (v instanceof Uint8Array) return {
|
|
20
|
+
type: "Buffer",
|
|
21
|
+
data: Array.from(v)
|
|
22
|
+
};
|
|
23
|
+
return v ?? void 0;
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
function groupByToMap(items, getKey) {
|
|
27
|
+
const map = /* @__PURE__ */ new Map();
|
|
28
|
+
for (const item of items) {
|
|
29
|
+
const key = getKey(item);
|
|
30
|
+
let group = map.get(key);
|
|
31
|
+
if (!group) {
|
|
32
|
+
group = [];
|
|
33
|
+
map.set(key, group);
|
|
34
|
+
}
|
|
35
|
+
group.push(item);
|
|
36
|
+
}
|
|
37
|
+
return map;
|
|
38
|
+
}
|
|
39
|
+
//#endregion
|
|
40
|
+
export { stableStringify as n, supaliveStringify as r, groupByToMap as t };
|
|
41
|
+
|
|
42
|
+
//# sourceMappingURL=helper-wGbzz6zo.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"helper-wGbzz6zo.js","names":[],"sources":["../src/helper.ts"],"sourcesContent":["import stableStringifyFn from \"json-stable-stringify\";\n\n/**\n * Synchronous deterministic JSON stringification.\n * Keys are sorted; `undefined` values are dropped.\n *\n * Suitable for React `useEffect` dependency keys — calling this on the same\n * logical input always produces the same string, regardless of property order.\n */\nexport function stableStringify(input: unknown): string {\n return stableStringifyFn(input, {\n replacer: (_, v) => {\n if (typeof v === \"bigint\") return v.toString();\n return v ?? undefined;\n }\n }) ?? \"\";\n}\n\nexport function supaliveStringify(input: unknown): string {\n return JSON.stringify(input, (_, v) => {\n if (typeof v === \"bigint\") return v.toString();\n // Emit a stable wire shape for byte arrays regardless of whether the\n // producer holds a Buffer or a plain Uint8Array (the latter is what\n // crosses worker_threads postMessage). The matching decoder lives in\n // `bytesFromJson` in db/types_db.ts.\n if (v instanceof Uint8Array) {\n return { type: \"Buffer\", data: Array.from(v) };\n }\n return v ?? undefined;\n });\n}\n\nexport function groupByToMap<T, K>(\n items: Iterable<T>,\n getKey: (item: T) => K,\n): Map<K, T[]> {\n const map = new Map<K, T[]>();\n\n for (const item of items) {\n const key = getKey(item);\n\n let group = map.get(key);\n if (!group) {\n group = [];\n map.set(key, group);\n }\n\n group.push(item);\n }\n\n return map;\n}\n"],"mappings":";;;;;;;;;AASA,SAAgB,gBAAgB,OAAwB;CACtD,OAAO,kBAAkB,OAAO,EAC9B,WAAW,GAAG,MAAM;EAClB,IAAI,OAAO,MAAM,UAAU,OAAO,EAAE,SAAS;EAC7C,OAAO,KAAK,KAAA;CACd,EACF,CAAC,KAAK;AACR;AAEA,SAAgB,kBAAkB,OAAwB;CACxD,OAAO,KAAK,UAAU,QAAQ,GAAG,MAAM;EACrC,IAAI,OAAO,MAAM,UAAU,OAAO,EAAE,SAAS;EAK7C,IAAI,aAAa,YACf,OAAO;GAAE,MAAM;GAAU,MAAM,MAAM,KAAK,CAAC;EAAE;EAE/C,OAAO,KAAK,KAAA;CACd,CAAC;AACH;AAEA,SAAgB,aACd,OACA,QACa;CACb,MAAM,sBAAM,IAAI,IAAY;CAE5B,KAAK,MAAM,QAAQ,OAAO;EACxB,MAAM,MAAM,OAAO,IAAI;EAEvB,IAAI,QAAQ,IAAI,IAAI,GAAG;EACvB,IAAI,CAAC,OAAO;GACV,QAAQ,CAAC;GACT,IAAI,IAAI,KAAK,KAAK;EACpB;EAEA,MAAM,KAAK,IAAI;CACjB;CAEA,OAAO;AACT"}
|