@fireproof/core 0.18.0 → 0.19.4-dev

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 (67) hide show
  1. package/README.md +29 -15
  2. package/chunk-7OGPZSGT.js +39 -0
  3. package/chunk-7OGPZSGT.js.map +1 -0
  4. package/chunk-H3A2HMMM.js +164 -0
  5. package/chunk-H3A2HMMM.js.map +1 -0
  6. package/chunk-HCXR2M5B.js +202 -0
  7. package/chunk-HCXR2M5B.js.map +1 -0
  8. package/chunk-QHSXUST7.js +208 -0
  9. package/chunk-QHSXUST7.js.map +1 -0
  10. package/chunk-VZGT7ZYP.js +22 -0
  11. package/chunk-VZGT7ZYP.js.map +1 -0
  12. package/index.cjs +4649 -0
  13. package/index.cjs.map +1 -0
  14. package/index.d.cts +911 -0
  15. package/index.d.ts +911 -0
  16. package/index.js +2923 -0
  17. package/index.js.map +1 -0
  18. package/metafile-cjs.json +1 -0
  19. package/metafile-esm.json +1 -0
  20. package/node-sys-container-E7LADX2Z.js +29 -0
  21. package/node-sys-container-E7LADX2Z.js.map +1 -0
  22. package/package.json +19 -109
  23. package/sqlite-data-store-YS4U7AQ4.js +120 -0
  24. package/sqlite-data-store-YS4U7AQ4.js.map +1 -0
  25. package/sqlite-meta-store-FJZSZG4R.js +137 -0
  26. package/sqlite-meta-store-FJZSZG4R.js.map +1 -0
  27. package/sqlite-wal-store-6JZ4URNS.js +123 -0
  28. package/sqlite-wal-store-6JZ4URNS.js.map +1 -0
  29. package/store-file-HMHPQTUV.js +193 -0
  30. package/store-file-HMHPQTUV.js.map +1 -0
  31. package/store-indexdb-MRVZG4OG.js +20 -0
  32. package/store-indexdb-MRVZG4OG.js.map +1 -0
  33. package/store-sql-5XMJ5OWJ.js +406 -0
  34. package/store-sql-5XMJ5OWJ.js.map +1 -0
  35. package/dist/browser/fireproof.cjs +0 -1172
  36. package/dist/browser/fireproof.cjs.map +0 -1
  37. package/dist/browser/fireproof.d.cts +0 -268
  38. package/dist/browser/fireproof.d.ts +0 -268
  39. package/dist/browser/fireproof.global.js +0 -24178
  40. package/dist/browser/fireproof.global.js.map +0 -1
  41. package/dist/browser/fireproof.js +0 -1147
  42. package/dist/browser/fireproof.js.map +0 -1
  43. package/dist/browser/metafile-cjs.json +0 -1
  44. package/dist/browser/metafile-esm.json +0 -1
  45. package/dist/browser/metafile-iife.json +0 -1
  46. package/dist/memory/fireproof.cjs +0 -1172
  47. package/dist/memory/fireproof.cjs.map +0 -1
  48. package/dist/memory/fireproof.d.cts +0 -268
  49. package/dist/memory/fireproof.d.ts +0 -268
  50. package/dist/memory/fireproof.global.js +0 -24178
  51. package/dist/memory/fireproof.global.js.map +0 -1
  52. package/dist/memory/fireproof.js +0 -1147
  53. package/dist/memory/fireproof.js.map +0 -1
  54. package/dist/memory/metafile-cjs.json +0 -1
  55. package/dist/memory/metafile-esm.json +0 -1
  56. package/dist/memory/metafile-iife.json +0 -1
  57. package/dist/node/fireproof.cjs +0 -1172
  58. package/dist/node/fireproof.cjs.map +0 -1
  59. package/dist/node/fireproof.d.cts +0 -268
  60. package/dist/node/fireproof.d.ts +0 -268
  61. package/dist/node/fireproof.global.js +0 -38540
  62. package/dist/node/fireproof.global.js.map +0 -1
  63. package/dist/node/fireproof.js +0 -1138
  64. package/dist/node/fireproof.js.map +0 -1
  65. package/dist/node/metafile-cjs.json +0 -1
  66. package/dist/node/metafile-esm.json +0 -1
  67. package/dist/node/metafile-iife.json +0 -1
@@ -0,0 +1,208 @@
1
+ import {
2
+ NotFoundError
3
+ } from "./chunk-VZGT7ZYP.js";
4
+ import {
5
+ INDEXDB_VERSION,
6
+ ensureLogger,
7
+ exception2Result,
8
+ exceptionWrapper,
9
+ getKey,
10
+ getStore
11
+ } from "./chunk-HCXR2M5B.js";
12
+ import {
13
+ SysContainer
14
+ } from "./chunk-H3A2HMMM.js";
15
+
16
+ // src/runtime/store-indexdb.ts
17
+ import { openDB } from "idb";
18
+ import { KeyedResolvOnce, Result } from "@adviser/cement";
19
+ function ensureVersion(url) {
20
+ const ret = new URL(url.toString());
21
+ ret.searchParams.set("version", url.searchParams.get("version") || INDEXDB_VERSION);
22
+ return ret;
23
+ }
24
+ function guardVersion(url) {
25
+ if (!url.searchParams.has("version")) {
26
+ return Result.Err(`missing version: ${url.toString()}`);
27
+ }
28
+ return Result.Ok(url);
29
+ }
30
+ var onceIndexDB = new KeyedResolvOnce();
31
+ function sanitzeKey(key) {
32
+ if (key.length === 1) {
33
+ key = key[0];
34
+ }
35
+ return key;
36
+ }
37
+ async function connectIdb(url, logger) {
38
+ const dbName = getIndexDBName(url, logger);
39
+ const once = await onceIndexDB.get(dbName.fullDb).once(async () => {
40
+ const db = await openDB(dbName.fullDb, 1, {
41
+ upgrade(db2) {
42
+ ["version", "data", "wal", "meta", "idx.data", "idx.wal", "idx.meta"].map((store) => {
43
+ db2.createObjectStore(store, {
44
+ autoIncrement: false
45
+ });
46
+ });
47
+ }
48
+ });
49
+ const found = await db.get("version", "version");
50
+ const version = url.searchParams.get("version") || INDEXDB_VERSION;
51
+ if (!found) {
52
+ await db.put("version", { version }, "version");
53
+ } else if (found.version !== version) {
54
+ logger.Warn().Str("url", url.toString()).Str("version", version).Str("found", found.version).Msg("version mismatch");
55
+ }
56
+ return { db, dbName, version };
57
+ });
58
+ url.searchParams.set("version", once.version);
59
+ return once.db;
60
+ }
61
+ function joinDBName(...names) {
62
+ return names.map((i) => i.replace(/^[^a-zA-Z0-9]+/g, "").replace(/[^a-zA-Z0-9]+/g, "_")).filter((i) => i.length).join(".");
63
+ }
64
+ function getIndexDBName(iurl, logger) {
65
+ const url = ensureVersion(iurl);
66
+ const fullDb = url.pathname.replace(/^\/+/, "").replace(/\?.*$/, "");
67
+ const dbName = url.searchParams.get("name");
68
+ if (!dbName) throw logger.Error().Str("url", url.toString()).Msg(`name not found`).AsError();
69
+ const result = joinDBName(fullDb, dbName);
70
+ const objStore = getStore(url, logger, joinDBName);
71
+ const connectionKey = [result, objStore].join(":");
72
+ return {
73
+ fullDb: result,
74
+ objStore,
75
+ connectionKey,
76
+ dbName
77
+ };
78
+ }
79
+ var IndexDBGateway = class {
80
+ constructor(logger) {
81
+ this.db = {};
82
+ this.logger = logger;
83
+ }
84
+ idb() {
85
+ this.db;
86
+ }
87
+ async start(baseURL) {
88
+ return exception2Result(async () => {
89
+ this.logger.Debug().Url(baseURL).Msg("starting");
90
+ await SysContainer.start();
91
+ this.db = await connectIdb(baseURL, this.logger);
92
+ this.logger.Debug().Url(baseURL).Msg("started");
93
+ });
94
+ }
95
+ async close() {
96
+ return Result.Ok(void 0);
97
+ }
98
+ async destroy(baseUrl) {
99
+ return exception2Result(async () => {
100
+ const type = getStore(baseUrl, this.logger, joinDBName);
101
+ const idb = this.db;
102
+ const trans = idb.transaction(type, "readwrite");
103
+ const object_store = trans.objectStore(type);
104
+ const toDelete = [];
105
+ for (let cursor = await object_store.openCursor(); cursor; cursor = await cursor.continue()) {
106
+ toDelete.push(cursor.primaryKey);
107
+ }
108
+ for (const key of toDelete) {
109
+ await trans.db.delete(type, key);
110
+ }
111
+ await trans.done;
112
+ });
113
+ }
114
+ async get(url) {
115
+ return exceptionWrapper(async () => {
116
+ const key = getKey(url, this.logger);
117
+ const store = getStore(url, this.logger, joinDBName);
118
+ this.logger.Debug().Url(url).Str("key", key).Str("store", store).Msg("getting");
119
+ const tx = this.db.transaction([store], "readonly");
120
+ const bytes = await tx.objectStore(store).get(sanitzeKey(key));
121
+ await tx.done;
122
+ if (!bytes) {
123
+ return Result.Err(new NotFoundError(`missing ${key}`));
124
+ }
125
+ return Result.Ok(bytes);
126
+ });
127
+ }
128
+ async put(url, value) {
129
+ return exception2Result(async () => {
130
+ const key = getKey(url, this.logger);
131
+ const store = getStore(url, this.logger, joinDBName);
132
+ this.logger.Debug().Url(url).Str("key", key).Str("store", store).Msg("putting");
133
+ const tx = this.db.transaction([store], "readwrite");
134
+ await tx.objectStore(store).put(value, sanitzeKey(key));
135
+ await tx.done;
136
+ });
137
+ }
138
+ async delete(url) {
139
+ return exception2Result(async () => {
140
+ const key = getKey(url, this.logger);
141
+ const store = getStore(url, this.logger, joinDBName);
142
+ this.logger.Debug().Url(url).Str("key", key).Str("store", store).Msg("deleting");
143
+ const tx = this.db.transaction([store], "readwrite");
144
+ await tx.objectStore(store).delete(sanitzeKey(key));
145
+ await tx.done;
146
+ return Result.Ok(void 0);
147
+ });
148
+ }
149
+ };
150
+ var IndexDBDataGateway = class extends IndexDBGateway {
151
+ constructor(logger) {
152
+ super(ensureLogger(logger, "IndexDBDataGateway", {}));
153
+ }
154
+ buildUrl(baseUrl, key) {
155
+ const url = new URL(baseUrl.toString());
156
+ url.searchParams.set("key", key);
157
+ return Promise.resolve(Result.Ok(url));
158
+ }
159
+ };
160
+ var IndexDBWalGateway = class extends IndexDBGateway {
161
+ constructor(logger) {
162
+ super(ensureLogger(logger, "IndexDBWalGateway", {}));
163
+ }
164
+ buildUrl(baseUrl, key) {
165
+ const url = new URL(baseUrl.toString());
166
+ url.searchParams.set("key", key);
167
+ return Promise.resolve(Result.Ok(url));
168
+ }
169
+ };
170
+ var IndexDBMetaGateway = class extends IndexDBGateway {
171
+ constructor(logger) {
172
+ super(ensureLogger(logger, "IndexDBDataGateway", {}));
173
+ this.branches = /* @__PURE__ */ new Set();
174
+ }
175
+ async buildUrl(baseUrl, key) {
176
+ const url = new URL(baseUrl.toString());
177
+ this.branches.add(key);
178
+ url.searchParams.set("key", key);
179
+ return Result.Ok(url);
180
+ }
181
+ };
182
+ var txtEncoder = new TextEncoder();
183
+ var IndexDBTestStore = class {
184
+ constructor(logger) {
185
+ this.logger = ensureLogger(logger, "IndexDBTestStore", {});
186
+ }
187
+ async get(url, key) {
188
+ const db = await connectIdb(url, this.logger);
189
+ const store = getStore(url, this.logger, joinDBName);
190
+ this.logger.Debug().Str("key", key).Str("store", store).Msg("getting");
191
+ let bytes = await db.get(store, sanitzeKey(key));
192
+ this.logger.Debug().Str("key", key).Str("store", store).Int("len", bytes.length).Msg("got");
193
+ if (typeof bytes === "string") {
194
+ bytes = txtEncoder.encode(bytes);
195
+ }
196
+ return bytes;
197
+ }
198
+ };
199
+
200
+ export {
201
+ guardVersion,
202
+ getIndexDBName,
203
+ IndexDBDataGateway,
204
+ IndexDBWalGateway,
205
+ IndexDBMetaGateway,
206
+ IndexDBTestStore
207
+ };
208
+ //# sourceMappingURL=chunk-QHSXUST7.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/runtime/store-indexdb.ts"],"sourcesContent":["import { openDB, IDBPDatabase } from \"idb\";\nimport { KeyedResolvOnce, Logger, Result } from \"@adviser/cement\";\n\nimport { TestStore } from \"../blockstore/types.js\";\nimport { INDEXDB_VERSION } from \"./store-indexdb-version.js\";\nimport { ensureLogger, exception2Result, exceptionWrapper, getKey, getStore } from \"../utils.js\";\nimport { Gateway, NotFoundError } from \"../blockstore/gateway.js\";\nimport { SysContainer } from \"./sys-container.js\";\n\nfunction ensureVersion(url: URL): URL {\n const ret = new URL(url.toString());\n ret.searchParams.set(\"version\", url.searchParams.get(\"version\") || INDEXDB_VERSION);\n return ret;\n}\n\nexport function guardVersion(url: URL): Result<URL> {\n if (!url.searchParams.has(\"version\")) {\n return Result.Err(`missing version: ${url.toString()}`);\n }\n return Result.Ok(url);\n}\n\nconst onceIndexDB = new KeyedResolvOnce<{\n readonly db: IDBPDatabase<unknown>;\n readonly dbName: DbName;\n readonly version: string;\n}>();\n\nfunction sanitzeKey(key: string | string[]): string | string[] {\n if (key.length === 1) {\n key = key[0];\n }\n return key;\n}\n\nasync function connectIdb(url: URL, logger: Logger): Promise<IDBPDatabase<unknown>> {\n const dbName = getIndexDBName(url, logger); // `fp.${this.STORAGE_VERSION}.${this.name}`;\n // const urlStr = url.toString().replace(/\\?.*$/, \"\");\n // console.log(`get:${this.id}`);\n // console.log(`connectIdb:pre:`, dbName, url.toString());\n const once = await onceIndexDB.get(dbName.fullDb).once(async () => {\n // console.log(`connectIdb:once:`, dbName, url.toString());\n const db = await openDB(dbName.fullDb, 1, {\n upgrade(db) {\n // console.log('upgrade:', dbName);\n [\"version\", \"data\", \"wal\", \"meta\", \"idx.data\", \"idx.wal\", \"idx.meta\"].map((store) => {\n db.createObjectStore(store, {\n autoIncrement: false,\n });\n });\n },\n });\n const found = await db.get(\"version\", \"version\");\n const version = url.searchParams.get(\"version\") || INDEXDB_VERSION;\n if (!found) {\n await db.put(\"version\", { version }, \"version\");\n } else if (found.version !== version) {\n logger\n .Warn()\n .Str(\"url\", url.toString())\n // eslint-disable-next-line @typescript-eslint/no-non-null-assertion\n .Str(\"version\", version!)\n .Str(\"found\", found.version)\n .Msg(\"version mismatch\");\n }\n return { db, dbName, version };\n });\n url.searchParams.set(\"version\", once.version);\n return once.db;\n}\n\nexport interface DbName {\n readonly fullDb: string;\n readonly objStore: string;\n readonly connectionKey: string;\n // readonly version: number;\n // readonly type: \"data\" | \"meta\" | \"wal\";\n readonly dbName: string;\n}\n\nfunction joinDBName(...names: string[]): string {\n return names\n .map((i) => i.replace(/^[^a-zA-Z0-9]+/g, \"\").replace(/[^a-zA-Z0-9]+/g, \"_\"))\n .filter((i) => i.length)\n .join(\".\");\n}\n\n// const schemaVersion = new Map<string, number>();\nexport function getIndexDBName(iurl: URL, logger: Logger): DbName {\n const url = ensureVersion(iurl);\n const fullDb = url.pathname.replace(/^\\/+/, \"\").replace(/\\?.*$/, \"\"); // cut leading slashes\n // const type = getStore(url);\n // const storageVersion = url.searchParams.get(\"version\");\n // not nice but we need to pass the version to the db name\n // url.searchParams.set(\"version\", storageVersion);\n // console.log(\"getIndexDBName:\", url.toString(), { fullDb, type, branch });\n // const dbName = fullDb.replace(new RegExp(`^fp.${storageVersion}.`), \"\"); // cut fp prefix\n const dbName = url.searchParams.get(\"name\");\n if (!dbName) throw logger.Error().Str(\"url\", url.toString()).Msg(`name not found`).AsError();\n const result = joinDBName(fullDb, dbName);\n const objStore = getStore(url, logger, joinDBName);\n const connectionKey = [result, objStore].join(\":\");\n return {\n fullDb: result,\n objStore,\n connectionKey,\n dbName,\n };\n}\n\nabstract class IndexDBGateway implements Gateway {\n readonly logger: Logger;\n constructor(logger: Logger) {\n this.logger = logger;\n }\n db: IDBPDatabase<unknown> = {} as IDBPDatabase<unknown>;\n idb() {\n this.db;\n }\n\n async start(baseURL: URL): Promise<Result<void>> {\n return exception2Result(async () => {\n this.logger.Debug().Url(baseURL).Msg(\"starting\");\n await SysContainer.start();\n this.db = await connectIdb(baseURL, this.logger);\n this.logger.Debug().Url(baseURL).Msg(\"started\");\n });\n }\n async close(): Promise<Result<void>> {\n return Result.Ok(undefined);\n }\n async destroy(baseUrl: URL): Promise<Result<void>> {\n return exception2Result(async () => {\n // return deleteDB(getIndexDBName(this.url).fullDb);\n const type = getStore(baseUrl, this.logger, joinDBName);\n // console.log(\"IndexDBDataStore:destroy\", type);\n const idb = this.db;\n const trans = idb.transaction(type, \"readwrite\");\n const object_store = trans.objectStore(type);\n const toDelete = [];\n for (let cursor = await object_store.openCursor(); cursor; cursor = await cursor.continue()) {\n toDelete.push(cursor.primaryKey);\n }\n for (const key of toDelete) {\n await trans.db.delete(type, key);\n }\n await trans.done;\n });\n }\n\n abstract buildUrl(baseUrl: URL, key: string): Promise<Result<URL>>;\n\n async get(url: URL) {\n return exceptionWrapper(async () => {\n const key = getKey(url, this.logger);\n const store = getStore(url, this.logger, joinDBName);\n this.logger.Debug().Url(url).Str(\"key\", key).Str(\"store\", store).Msg(\"getting\");\n const tx = this.db.transaction([store], \"readonly\");\n const bytes = await tx.objectStore(store).get(sanitzeKey(key));\n await tx.done;\n if (!bytes) {\n return Result.Err(new NotFoundError(`missing ${key}`));\n }\n return Result.Ok(bytes as Uint8Array);\n });\n }\n async put(url: URL, value: Uint8Array) {\n return exception2Result(async () => {\n const key = getKey(url, this.logger);\n const store = getStore(url, this.logger, joinDBName);\n this.logger.Debug().Url(url).Str(\"key\", key).Str(\"store\", store).Msg(\"putting\");\n const tx = this.db.transaction([store], \"readwrite\");\n await tx.objectStore(store).put(value, sanitzeKey(key));\n await tx.done;\n });\n }\n async delete(url: URL) {\n return exception2Result(async () => {\n const key = getKey(url, this.logger);\n const store = getStore(url, this.logger, joinDBName);\n this.logger.Debug().Url(url).Str(\"key\", key).Str(\"store\", store).Msg(\"deleting\");\n const tx = this.db.transaction([store], \"readwrite\");\n await tx.objectStore(store).delete(sanitzeKey(key));\n await tx.done;\n return Result.Ok(undefined);\n });\n }\n}\n\nexport class IndexDBDataGateway extends IndexDBGateway {\n constructor(logger: Logger) {\n super(ensureLogger(logger, \"IndexDBDataGateway\", {}));\n }\n\n buildUrl(baseUrl: URL, key: string): Promise<Result<URL>> {\n const url = new URL(baseUrl.toString());\n url.searchParams.set(\"key\", key);\n return Promise.resolve(Result.Ok(url));\n }\n}\n\nexport class IndexDBWalGateway extends IndexDBGateway {\n constructor(logger: Logger) {\n super(ensureLogger(logger, \"IndexDBWalGateway\", {}));\n }\n buildUrl(baseUrl: URL, key: string): Promise<Result<URL>> {\n const url = new URL(baseUrl.toString());\n url.searchParams.set(\"key\", key);\n return Promise.resolve(Result.Ok(url));\n }\n}\nexport class IndexDBMetaGateway extends IndexDBGateway {\n constructor(logger: Logger) {\n super(ensureLogger(logger, \"IndexDBDataGateway\", {}));\n }\n\n readonly branches = new Set<string>();\n async buildUrl(baseUrl: URL, key: string): Promise<Result<URL>> {\n const url = new URL(baseUrl.toString());\n this.branches.add(key);\n url.searchParams.set(\"key\", key);\n return Result.Ok(url);\n }\n}\n\nconst txtEncoder = new TextEncoder();\nexport class IndexDBTestStore implements TestStore {\n readonly logger: Logger;\n constructor(logger: Logger) {\n this.logger = ensureLogger(logger, \"IndexDBTestStore\", {});\n }\n async get(url: URL, key: string) {\n const db = await connectIdb(url, this.logger);\n const store = getStore(url, this.logger, joinDBName);\n this.logger.Debug().Str(\"key\", key).Str(\"store\", store).Msg(\"getting\");\n let bytes = await db.get(store, sanitzeKey(key));\n this.logger.Debug().Str(\"key\", key).Str(\"store\", store).Int(\"len\", bytes.length).Msg(\"got\");\n if (typeof bytes === \"string\") {\n bytes = txtEncoder.encode(bytes);\n }\n return bytes as Uint8Array;\n }\n}\n"],"mappings":"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","names":["db"]}
@@ -0,0 +1,22 @@
1
+ // src/blockstore/gateway.ts
2
+ import { Result } from "@adviser/cement";
3
+ var NotFoundError = class extends Error {
4
+ constructor() {
5
+ super(...arguments);
6
+ this.code = "ENOENT";
7
+ }
8
+ };
9
+ function isNotFoundError(e) {
10
+ if (Result.Is(e)) {
11
+ if (e.isOk()) return false;
12
+ e = e.Err();
13
+ }
14
+ if (e.code === "ENOENT") return true;
15
+ return false;
16
+ }
17
+
18
+ export {
19
+ NotFoundError,
20
+ isNotFoundError
21
+ };
22
+ //# sourceMappingURL=chunk-VZGT7ZYP.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/blockstore/gateway.ts"],"sourcesContent":["import { Result } from \"@adviser/cement\";\n\nexport interface GatewayOpts {\n readonly gateway: Gateway;\n}\n\nexport class NotFoundError extends Error {\n readonly code = \"ENOENT\";\n}\n\nexport function isNotFoundError(e: Error | Result<unknown> | unknown): e is NotFoundError {\n if (Result.Is(e)) {\n if (e.isOk()) return false;\n e = e.Err();\n }\n if ((e as NotFoundError).code === \"ENOENT\") return true;\n return false;\n}\n\nexport type GetResult = Result<Uint8Array, NotFoundError | Error>;\nexport type VoidResult = Result<void>;\n\nexport interface Gateway {\n // all the methods never throw!\n // an error is reported as a Result\n buildUrl(baseUrl: URL, key: string): Promise<Result<URL>>;\n // start updates URL --> hate this side effect\n start(baseUrl: URL): Promise<VoidResult>;\n close(baseUrl: URL): Promise<VoidResult>;\n destroy(baseUrl: URL): Promise<VoidResult>;\n put(url: URL, body: Uint8Array): Promise<VoidResult>;\n // get could return a NotFoundError if the key is not found\n get(url: URL): Promise<GetResult>;\n delete(url: URL): Promise<VoidResult>;\n}\n"],"mappings":";AAAA,SAAS,cAAc;AAMhB,IAAM,gBAAN,cAA4B,MAAM;AAAA,EAAlC;AAAA;AACL,SAAS,OAAO;AAAA;AAClB;AAEO,SAAS,gBAAgB,GAA0D;AACxF,MAAI,OAAO,GAAG,CAAC,GAAG;AAChB,QAAI,EAAE,KAAK,EAAG,QAAO;AACrB,QAAI,EAAE,IAAI;AAAA,EACZ;AACA,MAAK,EAAoB,SAAS,SAAU,QAAO;AACnD,SAAO;AACT;","names":[]}