@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.
Files changed (222) hide show
  1. package/README.md +17 -2
  2. package/dist/bytes-AuEkyxeU.js +19 -0
  3. package/dist/bytes-AuEkyxeU.js.map +1 -0
  4. package/dist/codec-BHAmGEIQ.js +62 -0
  5. package/dist/codec-BHAmGEIQ.js.map +1 -0
  6. package/dist/helper-CiacMqje.d.ts +14 -0
  7. package/dist/helper-CiacMqje.d.ts.map +1 -0
  8. package/dist/helper-wGbzz6zo.js +42 -0
  9. package/dist/helper-wGbzz6zo.js.map +1 -0
  10. package/dist/index-CaWMDqq0.d.ts +1754 -0
  11. package/dist/index-CaWMDqq0.d.ts.map +1 -0
  12. package/dist/mysql-Cxd4Uq5p.d.ts +104 -0
  13. package/dist/mysql-Cxd4Uq5p.d.ts.map +1 -0
  14. package/dist/mysql-bvnjYWvZ.js +570 -0
  15. package/dist/mysql-bvnjYWvZ.js.map +1 -0
  16. package/dist/overlap-checker-Ct_HP_iB.js +187 -0
  17. package/dist/overlap-checker-Ct_HP_iB.js.map +1 -0
  18. package/dist/postgres-B8u1YN8X.js +824 -0
  19. package/dist/postgres-B8u1YN8X.js.map +1 -0
  20. package/dist/postgres-Ck-xt72U.d.ts +108 -0
  21. package/dist/postgres-Ck-xt72U.d.ts.map +1 -0
  22. package/dist/procedure-DX87tyef.js +124 -0
  23. package/dist/procedure-DX87tyef.js.map +1 -0
  24. package/dist/query-Bh0RNxDz.js +673 -0
  25. package/dist/query-Bh0RNxDz.js.map +1 -0
  26. package/dist/realtime_db-DOCgqbwi.js +247 -0
  27. package/dist/realtime_db-DOCgqbwi.js.map +1 -0
  28. package/dist/router-DlTYWpop.js +81 -0
  29. package/dist/router-DlTYWpop.js.map +1 -0
  30. package/dist/schema-Dd7u0A1L.js +109 -0
  31. package/dist/schema-Dd7u0A1L.js.map +1 -0
  32. package/dist/src/client/index.d.ts +2 -17
  33. package/dist/src/client/index.js +1152 -18
  34. package/dist/src/client/index.js.map +1 -1
  35. package/dist/src/exports/mysql.d.ts +2 -2
  36. package/dist/src/exports/mysql.js +2 -2
  37. package/dist/src/exports/postgres.d.ts +2 -2
  38. package/dist/src/exports/postgres.js +2 -2
  39. package/dist/src/exports/procedure.d.ts +3 -5
  40. package/dist/src/exports/procedure.js +6 -5
  41. package/dist/src/exports/schema-sql.d.ts +18 -0
  42. package/dist/src/exports/schema-sql.d.ts.map +1 -0
  43. package/dist/src/exports/schema-sql.js +161 -0
  44. package/dist/src/exports/schema-sql.js.map +1 -0
  45. package/dist/src/exports/server.d.ts +368 -2
  46. package/dist/src/exports/server.d.ts.map +1 -1
  47. package/dist/src/exports/server.js +1346 -2
  48. package/dist/src/exports/server.js.map +1 -1
  49. package/dist/src/exports/subscription-manager-worker-entry.d.ts +1 -0
  50. package/dist/src/exports/subscription-manager-worker-entry.js +115 -0
  51. package/dist/src/exports/subscription-manager-worker-entry.js.map +1 -0
  52. package/dist/src/exports/types.d.ts +4 -6
  53. package/dist/src/exports/types.js +5 -6
  54. package/dist/subscription-worker-pahX0zxg.js +511 -0
  55. package/dist/subscription-worker-pahX0zxg.js.map +1 -0
  56. package/dist/types_client_rpc-CIsjQQGG.js +105 -0
  57. package/dist/types_client_rpc-CIsjQQGG.js.map +1 -0
  58. package/dist/types_db-DXj_l9n-.js +168 -0
  59. package/dist/types_db-DXj_l9n-.js.map +1 -0
  60. package/dist/types_server-Dk6o_B7N.js +24 -0
  61. package/dist/types_server-Dk6o_B7N.js.map +1 -0
  62. package/dist/types_server-TFo6SWDH.d.ts +216 -0
  63. package/dist/types_server-TFo6SWDH.d.ts.map +1 -0
  64. package/package.json +7 -3
  65. package/dist/src/client/caller_client.d.ts +0 -42
  66. package/dist/src/client/caller_client.d.ts.map +0 -1
  67. package/dist/src/client/caller_client.js +0 -77
  68. package/dist/src/client/caller_client.js.map +0 -1
  69. package/dist/src/client/client.d.ts +0 -149
  70. package/dist/src/client/client.d.ts.map +0 -1
  71. package/dist/src/client/client.js +0 -308
  72. package/dist/src/client/client.js.map +0 -1
  73. package/dist/src/client/index.d.ts.map +0 -1
  74. package/dist/src/client/sub_key.d.ts +0 -20
  75. package/dist/src/client/sub_key.d.ts.map +0 -1
  76. package/dist/src/client/sub_key.js +0 -37
  77. package/dist/src/client/sub_key.js.map +0 -1
  78. package/dist/src/client/ws_client_manager.d.ts +0 -268
  79. package/dist/src/client/ws_client_manager.d.ts.map +0 -1
  80. package/dist/src/client/ws_client_manager.js +0 -1013
  81. package/dist/src/client/ws_client_manager.js.map +0 -1
  82. package/dist/src/config.d.ts +0 -117
  83. package/dist/src/config.d.ts.map +0 -1
  84. package/dist/src/config.js +0 -2
  85. package/dist/src/config.js.map +0 -1
  86. package/dist/src/db/bytes.d.ts +0 -4
  87. package/dist/src/db/bytes.d.ts.map +0 -1
  88. package/dist/src/db/bytes.js +0 -24
  89. package/dist/src/db/bytes.js.map +0 -1
  90. package/dist/src/db/cache.d.ts +0 -30
  91. package/dist/src/db/cache.d.ts.map +0 -1
  92. package/dist/src/db/cache.js +0 -153
  93. package/dist/src/db/cache.js.map +0 -1
  94. package/dist/src/db/codec.d.ts +0 -10
  95. package/dist/src/db/codec.d.ts.map +0 -1
  96. package/dist/src/db/codec.js +0 -73
  97. package/dist/src/db/codec.js.map +0 -1
  98. package/dist/src/db/context.d.ts +0 -28
  99. package/dist/src/db/context.d.ts.map +0 -1
  100. package/dist/src/db/context.js +0 -147
  101. package/dist/src/db/context.js.map +0 -1
  102. package/dist/src/db/db.d.ts +0 -154
  103. package/dist/src/db/db.d.ts.map +0 -1
  104. package/dist/src/db/db.js +0 -23
  105. package/dist/src/db/db.js.map +0 -1
  106. package/dist/src/db/mysql.d.ts +0 -120
  107. package/dist/src/db/mysql.d.ts.map +0 -1
  108. package/dist/src/db/mysql.js +0 -708
  109. package/dist/src/db/mysql.js.map +0 -1
  110. package/dist/src/db/postgres.d.ts +0 -116
  111. package/dist/src/db/postgres.d.ts.map +0 -1
  112. package/dist/src/db/postgres.js +0 -998
  113. package/dist/src/db/postgres.js.map +0 -1
  114. package/dist/src/db/query.d.ts +0 -174
  115. package/dist/src/db/query.d.ts.map +0 -1
  116. package/dist/src/db/query.js +0 -790
  117. package/dist/src/db/query.js.map +0 -1
  118. package/dist/src/db/query_definition.d.ts +0 -54
  119. package/dist/src/db/query_definition.d.ts.map +0 -1
  120. package/dist/src/db/query_definition.js +0 -47
  121. package/dist/src/db/query_definition.js.map +0 -1
  122. package/dist/src/db/realtime_db.d.ts +0 -19
  123. package/dist/src/db/realtime_db.d.ts.map +0 -1
  124. package/dist/src/db/realtime_db.js +0 -98
  125. package/dist/src/db/realtime_db.js.map +0 -1
  126. package/dist/src/db/schema.d.ts +0 -110
  127. package/dist/src/db/schema.d.ts.map +0 -1
  128. package/dist/src/db/schema.js +0 -47
  129. package/dist/src/db/schema.js.map +0 -1
  130. package/dist/src/db/types_client_rpc.d.ts +0 -157
  131. package/dist/src/db/types_client_rpc.d.ts.map +0 -1
  132. package/dist/src/db/types_client_rpc.js +0 -106
  133. package/dist/src/db/types_client_rpc.js.map +0 -1
  134. package/dist/src/db/types_db.d.ts +0 -236
  135. package/dist/src/db/types_db.d.ts.map +0 -1
  136. package/dist/src/db/types_db.js +0 -188
  137. package/dist/src/db/types_db.js.map +0 -1
  138. package/dist/src/exports/mysql.d.ts.map +0 -1
  139. package/dist/src/exports/mysql.js.map +0 -1
  140. package/dist/src/exports/postgres.d.ts.map +0 -1
  141. package/dist/src/exports/postgres.js.map +0 -1
  142. package/dist/src/exports/procedure.d.ts.map +0 -1
  143. package/dist/src/exports/procedure.js.map +0 -1
  144. package/dist/src/exports/types.d.ts.map +0 -1
  145. package/dist/src/exports/types.js.map +0 -1
  146. package/dist/src/helper.d.ts +0 -11
  147. package/dist/src/helper.d.ts.map +0 -1
  148. package/dist/src/helper.js +0 -45
  149. package/dist/src/helper.js.map +0 -1
  150. package/dist/src/logger.d.ts +0 -7
  151. package/dist/src/logger.d.ts.map +0 -1
  152. package/dist/src/logger.js +0 -47
  153. package/dist/src/logger.js.map +0 -1
  154. package/dist/src/router/index.d.ts +0 -4
  155. package/dist/src/router/index.d.ts.map +0 -1
  156. package/dist/src/router/index.js +0 -4
  157. package/dist/src/router/index.js.map +0 -1
  158. package/dist/src/router/procedure.d.ts +0 -204
  159. package/dist/src/router/procedure.d.ts.map +0 -1
  160. package/dist/src/router/procedure.js +0 -122
  161. package/dist/src/router/procedure.js.map +0 -1
  162. package/dist/src/router/router.d.ts +0 -88
  163. package/dist/src/router/router.d.ts.map +0 -1
  164. package/dist/src/router/router.js +0 -88
  165. package/dist/src/router/router.js.map +0 -1
  166. package/dist/src/server/hash.d.ts +0 -12
  167. package/dist/src/server/hash.d.ts.map +0 -1
  168. package/dist/src/server/hash.js +0 -20
  169. package/dist/src/server/hash.js.map +0 -1
  170. package/dist/src/server/hash.test.d.ts +0 -2
  171. package/dist/src/server/hash.test.d.ts.map +0 -1
  172. package/dist/src/server/hash.test.js +0 -43
  173. package/dist/src/server/hash.test.js.map +0 -1
  174. package/dist/src/server/index.d.ts +0 -9
  175. package/dist/src/server/index.d.ts.map +0 -1
  176. package/dist/src/server/index.js +0 -8
  177. package/dist/src/server/index.js.map +0 -1
  178. package/dist/src/server/overlap-checker.d.ts +0 -18
  179. package/dist/src/server/overlap-checker.d.ts.map +0 -1
  180. package/dist/src/server/overlap-checker.js +0 -247
  181. package/dist/src/server/overlap-checker.js.map +0 -1
  182. package/dist/src/server/sub_hash.d.ts +0 -23
  183. package/dist/src/server/sub_hash.d.ts.map +0 -1
  184. package/dist/src/server/sub_hash.js +0 -38
  185. package/dist/src/server/sub_hash.js.map +0 -1
  186. package/dist/src/server/subscription-manager-client.d.ts +0 -120
  187. package/dist/src/server/subscription-manager-client.d.ts.map +0 -1
  188. package/dist/src/server/subscription-manager-client.js +0 -207
  189. package/dist/src/server/subscription-manager-client.js.map +0 -1
  190. package/dist/src/server/subscription-manager-types.d.ts +0 -168
  191. package/dist/src/server/subscription-manager-types.d.ts.map +0 -1
  192. package/dist/src/server/subscription-manager-types.js +0 -94
  193. package/dist/src/server/subscription-manager-types.js.map +0 -1
  194. package/dist/src/server/subscription-manager-worker-entry.d.ts +0 -2
  195. package/dist/src/server/subscription-manager-worker-entry.d.ts.map +0 -1
  196. package/dist/src/server/subscription-manager-worker-entry.js +0 -127
  197. package/dist/src/server/subscription-manager-worker-entry.js.map +0 -1
  198. package/dist/src/server/subscription-manager-worker-protocol.d.ts +0 -40
  199. package/dist/src/server/subscription-manager-worker-protocol.d.ts.map +0 -1
  200. package/dist/src/server/subscription-manager-worker-protocol.js +0 -20
  201. package/dist/src/server/subscription-manager-worker-protocol.js.map +0 -1
  202. package/dist/src/server/subscription-manager.d.ts +0 -32
  203. package/dist/src/server/subscription-manager.d.ts.map +0 -1
  204. package/dist/src/server/subscription-manager.js +0 -249
  205. package/dist/src/server/subscription-manager.js.map +0 -1
  206. package/dist/src/server/subscription-manager.test.d.ts +0 -2
  207. package/dist/src/server/subscription-manager.test.d.ts.map +0 -1
  208. package/dist/src/server/subscription-manager.test.js +0 -610
  209. package/dist/src/server/subscription-manager.test.js.map +0 -1
  210. package/dist/src/server/subscription-worker.d.ts +0 -32
  211. package/dist/src/server/subscription-worker.d.ts.map +0 -1
  212. package/dist/src/server/subscription-worker.js +0 -190
  213. package/dist/src/server/subscription-worker.js.map +0 -1
  214. package/dist/src/server/supalive-server.d.ts +0 -158
  215. package/dist/src/server/supalive-server.d.ts.map +0 -1
  216. package/dist/src/server/supalive-server.js +0 -1048
  217. package/dist/src/server/supalive-server.js.map +0 -1
  218. package/dist/src/server/types_server.d.ts +0 -96
  219. package/dist/src/server/types_server.d.ts.map +0 -1
  220. package/dist/src/server/types_server.js +0 -36
  221. package/dist/src/server/types_server.js.map +0 -1
  222. 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
- database: { type: "postgres", connectionString: process.env.DATABASE_URL! },
106
- upstash: { url: process.env.REDIS_URL!, token: "", redisUrl: process.env.REDIS_URL! },
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"}