@seedprotocol/sdk 0.2.42 → 0.2.44
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/{ArweaveClient-BXD_aTsx.js → ArweaveClient-CA1Vsnow.js} +2 -2
- package/dist/{ArweaveClient-BXD_aTsx.js.map → ArweaveClient-CA1Vsnow.js.map} +1 -1
- package/dist/{ArweaveClient-CkcZD_QE.js → ArweaveClient-MgJXScYG.js} +2 -2
- package/dist/{ArweaveClient-CkcZD_QE.js.map → ArweaveClient-MgJXScYG.js.map} +1 -1
- package/dist/{Db-DFKHN8CX.js → Db-BEoczaGe.js} +156 -165
- package/dist/{Db-DFKHN8CX.js.map → Db-BEoczaGe.js.map} +1 -1
- package/dist/{Db-LQf3Azt5.js → Db-Y1GWsyNL.js} +34 -43
- package/dist/{Db-LQf3Azt5.js.map → Db-Y1GWsyNL.js.map} +1 -1
- package/dist/{EasClient-BNwSwDTO.js → EasClient-BjlbuffX.js} +2 -2
- package/dist/{EasClient-BNwSwDTO.js.map → EasClient-BjlbuffX.js.map} +1 -1
- package/dist/{EasClient-epqE9aWI.js → EasClient-Cg1q8lBu.js} +2 -2
- package/dist/{EasClient-epqE9aWI.js.map → EasClient-Cg1q8lBu.js.map} +1 -1
- package/dist/FileManager-D53H3aUS.js +781 -0
- package/dist/FileManager-D53H3aUS.js.map +1 -0
- package/dist/FileManager-t4zcT3NL.js +38 -0
- package/dist/FileManager-t4zcT3NL.js.map +1 -0
- package/dist/{Item-BixSOZAD.js → Item-BleJyiA2.js} +9 -12
- package/dist/{Item-BixSOZAD.js.map → Item-BleJyiA2.js.map} +1 -1
- package/dist/{ItemProperty-DpGkb0Zb.js → ItemProperty-CH7JmVg-.js} +9 -12
- package/dist/{ItemProperty-DpGkb0Zb.js.map → ItemProperty-CH7JmVg-.js.map} +1 -1
- package/dist/{QueryClient-Do0C7Jnt.js → QueryClient-BKjgZnSt.js} +2 -2
- package/dist/{QueryClient-Do0C7Jnt.js.map → QueryClient-BKjgZnSt.js.map} +1 -1
- package/dist/{QueryClient-Ckl99FYC.js → QueryClient-CDsEencG.js} +2 -2
- package/dist/{QueryClient-Ckl99FYC.js.map → QueryClient-CDsEencG.js.map} +1 -1
- package/dist/bin.js +28 -27
- package/dist/bin.js.map +1 -1
- package/dist/{constants-BakHTrB9.js → constants-BIdH8wc3.js} +66 -41
- package/dist/constants-BIdH8wc3.js.map +1 -0
- package/dist/{index-sqKT92c8.js → index-DanGFTTF.js} +1263 -1539
- package/dist/index-DanGFTTF.js.map +1 -0
- package/dist/{index-DV2gvrCh.js → index-Dk6K4W4n.js} +9 -12
- package/dist/index-Dk6K4W4n.js.map +1 -0
- package/dist/main.js +7 -10
- package/dist/main.js.map +1 -1
- package/dist/node/codegen/templates/index.njk +0 -4
- package/dist/{seed.schema.config-Ct1bu0Yc.js → seed.schema.config-DdCq87m_.js} +9 -11
- package/dist/seed.schema.config-DdCq87m_.js.map +1 -0
- package/dist/seedSchema/index.ts +0 -2
- package/dist/src/BaseFileManager.ts +22 -2
- package/dist/src/BaseItem.ts +4 -3
- package/dist/src/BaseItemProperty.ts +2 -2
- package/dist/src/FileDownloader.ts +63 -0
- package/dist/src/FileManager.ts +37 -6
- package/dist/src/ImageResizer.ts +84 -0
- package/dist/src/analyzeInput.ts +22 -2
- package/dist/src/constants.ts +67 -60
- package/dist/src/createMetadata.ts +27 -2
- package/dist/src/download.ts +45 -202
- package/dist/src/filesDownload.ts +326 -0
- package/dist/src/getItem.ts +5 -0
- package/dist/src/getPublishPayload.ts +15 -8
- package/dist/src/helpers.ts +0 -14
- package/dist/src/imageResize.ts +507 -0
- package/dist/src/model.ts +6 -5
- package/dist/src/saveImageSrc.ts +15 -1
- package/dist/src/syncDbWithEas.ts +0 -90
- package/dist/src/updateItemPropertyValue.ts +16 -3
- package/dist/types/src/Item/BaseItem.d.ts +2 -2
- package/dist/types/src/Item/BaseItem.d.ts.map +1 -1
- package/dist/types/src/ItemProperty/BaseItemProperty.d.ts +2 -2
- package/dist/types/src/ItemProperty/BaseItemProperty.d.ts.map +1 -1
- package/dist/types/src/ItemProperty/service/actors/saveValueToDb/analyzeInput.d.ts.map +1 -1
- package/dist/types/src/ItemProperty/service/actors/saveValueToDb/saveImageSrc.d.ts.map +1 -1
- package/dist/types/src/browser/helpers/FileManager.d.ts +5 -1
- package/dist/types/src/browser/helpers/FileManager.d.ts.map +1 -1
- package/dist/types/src/browser/workers/FileDownloader.d.ts +8 -0
- package/dist/types/src/browser/workers/FileDownloader.d.ts.map +1 -0
- package/dist/types/src/browser/workers/ImageResizer.d.ts +9 -0
- package/dist/types/src/browser/workers/ImageResizer.d.ts.map +1 -0
- package/dist/types/src/browser/workers/content-hash.d.ts.map +1 -0
- package/dist/types/src/browser/workers/filesDownload.d.ts +3 -0
- package/dist/types/src/browser/workers/filesDownload.d.ts.map +1 -0
- package/dist/types/src/browser/workers/imageResize.d.ts +3 -0
- package/dist/types/src/browser/workers/imageResize.d.ts.map +1 -0
- package/dist/types/src/db/read/getItem.d.ts.map +1 -1
- package/dist/types/src/db/read/getPublishPayload.d.ts.map +1 -1
- package/dist/types/src/db/write/createMetadata.d.ts.map +1 -1
- package/dist/types/src/db/write/updateItemPropertyValue.d.ts +5 -1
- package/dist/types/src/db/write/updateItemPropertyValue.d.ts.map +1 -1
- package/dist/types/src/events/files/download.d.ts.map +1 -1
- package/dist/types/src/events/files/index.d.ts.map +1 -1
- package/dist/types/src/events/item/syncDbWithEas.d.ts.map +1 -1
- package/dist/types/src/helpers/FileManager/BaseFileManager.d.ts +4 -0
- package/dist/types/src/helpers/FileManager/BaseFileManager.d.ts.map +1 -1
- package/dist/types/src/helpers/constants.d.ts +7 -0
- package/dist/types/src/helpers/constants.d.ts.map +1 -1
- package/dist/types/src/helpers/files.d.ts +1 -1
- package/dist/types/src/helpers/files.d.ts.map +1 -1
- package/dist/types/src/node/helpers/FileManager.d.ts +5 -0
- package/dist/types/src/node/helpers/FileManager.d.ts.map +1 -1
- package/dist/types/src/schema/model/index.d.ts +2 -2
- package/dist/types/src/schema/model/index.d.ts.map +1 -1
- package/dist/types/src/seedSchema/index.d.ts +0 -2
- package/dist/types/src/seedSchema/index.d.ts.map +1 -1
- package/dist/types/src/services/allItems/actors/initialize.d.ts.map +1 -1
- package/dist/types/src/services/internal/constants.d.ts +2 -2
- package/dist/types/src/services/internal/constants.d.ts.map +1 -1
- package/dist/types/src/services/internal/helpers.d.ts.map +1 -1
- package/dist/types/src/types/fileManager.d.ts +15 -0
- package/dist/types/src/types/fileManager.d.ts.map +1 -0
- package/dist/types/src/types/model.d.ts +6 -5
- package/dist/types/src/types/model.d.ts.map +1 -1
- package/package.json +5 -3
- package/dist/FileManager-CXk83EW5.js +0 -16
- package/dist/FileManager-CXk83EW5.js.map +0 -1
- package/dist/FileManager-DXi-X7r5.js +0 -28
- package/dist/FileManager-DXi-X7r5.js.map +0 -1
- package/dist/constants-BakHTrB9.js.map +0 -1
- package/dist/content-hash.js +0 -27
- package/dist/content-hash.js.map +0 -1
- package/dist/index-DV2gvrCh.js.map +0 -1
- package/dist/index-sqKT92c8.js.map +0 -1
- package/dist/seed.schema.config-Ct1bu0Yc.js.map +0 -1
- package/dist/types/__tests__/__mocks__/browser/project/schema.d.ts +0 -52
- package/dist/types/__tests__/__mocks__/browser/project/schema.d.ts.map +0 -1
- package/dist/types/__tests__/__mocks__/node/schema.d.ts +0 -52
- package/dist/types/__tests__/__mocks__/node/schema.d.ts.map +0 -1
- package/dist/types/__tests__/browser/db/drizzle.test.d.ts +0 -2
- package/dist/types/__tests__/browser/db/drizzle.test.d.ts.map +0 -1
- package/dist/types/__tests__/browser/property/propertyMachine.test.d.ts +0 -2
- package/dist/types/__tests__/browser/property/propertyMachine.test.d.ts.map +0 -1
- package/dist/types/__tests__/browser/react/index.test.d.ts +0 -2
- package/dist/types/__tests__/browser/react/index.test.d.ts.map +0 -1
- package/dist/types/__tests__/dist/exports.test.d.ts +0 -2
- package/dist/types/__tests__/dist/exports.test.d.ts.map +0 -1
- package/dist/types/__tests__/fs/index.test.d.ts +0 -2
- package/dist/types/__tests__/fs/index.test.d.ts.map +0 -1
- package/dist/types/__tests__/index.test.d.ts +0 -2
- package/dist/types/__tests__/index.test.d.ts.map +0 -1
- package/dist/types/__tests__/node/Item/Item.test.d.ts +0 -2
- package/dist/types/__tests__/node/Item/Item.test.d.ts.map +0 -1
- package/dist/types/__tests__/node/setup.d.ts +0 -2
- package/dist/types/__tests__/node/setup.d.ts.map +0 -1
- package/dist/types/__tests__/scripts/bin.test.d.ts +0 -2
- package/dist/types/__tests__/scripts/bin.test.d.ts.map +0 -1
- package/dist/types/__tests__/setup.d.ts +0 -2
- package/dist/types/__tests__/setup.d.ts.map +0 -1
- package/dist/types/src/workers/content-hash.d.ts.map +0 -1
- /package/dist/types/src/{workers → browser/workers}/content-hash.d.ts +0 -0
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { B as BaseArweaveClient, A as ARWEAVE_ENDPOINT } from './constants-
|
|
1
|
+
import { B as BaseArweaveClient, A as ARWEAVE_ENDPOINT } from './constants-BIdH8wc3.js';
|
|
2
2
|
import { GraphQLClient } from 'graphql-request';
|
|
3
3
|
import '@ethereum-attestation-service/eas-sdk';
|
|
4
4
|
|
|
@@ -10,4 +10,4 @@ class ArweaveClient extends BaseArweaveClient {
|
|
|
10
10
|
BaseArweaveClient.setPlatformClass(ArweaveClient);
|
|
11
11
|
|
|
12
12
|
export { ArweaveClient };
|
|
13
|
-
//# sourceMappingURL=ArweaveClient-
|
|
13
|
+
//# sourceMappingURL=ArweaveClient-CA1Vsnow.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArweaveClient-
|
|
1
|
+
{"version":3,"file":"ArweaveClient-CA1Vsnow.js","sources":["../../src/browser/helpers/ArweaveClient.ts"],"sourcesContent":["import { BaseArweaveClient } from \"@/helpers/ArweaveClient/BaseArweaveClient\";\nimport { ARWEAVE_ENDPOINT } from \"@/services/internal/constants\";\nimport { GraphQLClient } from \"graphql-request\";\n\nclass ArweaveClient extends BaseArweaveClient {\n static getArweaveClient(): GraphQLClient {\n return new GraphQLClient(ARWEAVE_ENDPOINT)\n }\n}\n\nBaseArweaveClient.setPlatformClass(ArweaveClient)\n\nexport { ArweaveClient }"],"names":[],"mappings":";;;;AAIA,MAAM,aAAc,SAAQ,iBAAiB,CAAA;AAC3C,IAAA,OAAO,gBAAgB,GAAA;AACrB,QAAA,OAAO,IAAI,aAAa,CAAC,gBAAgB,CAAC;;AAE7C;AAED,iBAAiB,CAAC,gBAAgB,CAAC,aAAa,CAAC;;;;"}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { B as BaseArweaveClient, A as ARWEAVE_ENDPOINT } from './constants-
|
|
1
|
+
import { B as BaseArweaveClient, A as ARWEAVE_ENDPOINT } from './constants-BIdH8wc3.js';
|
|
2
2
|
import { GraphQLClient } from 'graphql-request';
|
|
3
3
|
import '@ethereum-attestation-service/eas-sdk';
|
|
4
4
|
|
|
@@ -10,4 +10,4 @@ class ArweaveClient extends BaseArweaveClient {
|
|
|
10
10
|
BaseArweaveClient.setPlatformClass(ArweaveClient);
|
|
11
11
|
|
|
12
12
|
export { ArweaveClient };
|
|
13
|
-
//# sourceMappingURL=ArweaveClient-
|
|
13
|
+
//# sourceMappingURL=ArweaveClient-MgJXScYG.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ArweaveClient-
|
|
1
|
+
{"version":3,"file":"ArweaveClient-MgJXScYG.js","sources":["../../src/node/helpers/ArweaveClient.ts"],"sourcesContent":["import { BaseArweaveClient } from '@/helpers/ArweaveClient/BaseArweaveClient';\nimport { ARWEAVE_ENDPOINT } from '@/services/internal/constants';\nimport { GraphQLClient } from 'graphql-request';\n\nclass ArweaveClient extends BaseArweaveClient {\n static getArweaveClient(): GraphQLClient {\n return new GraphQLClient(ARWEAVE_ENDPOINT);\n }\n}\n\nBaseArweaveClient.setPlatformClass(ArweaveClient);\n\nexport { ArweaveClient }; "],"names":[],"mappings":";;;;AAIA,MAAM,aAAc,SAAQ,iBAAiB,CAAA;AAC3C,IAAA,OAAO,gBAAgB,GAAA;AACrB,QAAA,OAAO,IAAI,aAAa,CAAC,gBAAgB,CAAC;;AAE7C;AAED,iBAAiB,CAAC,gBAAgB,CAAC,aAAa,CAAC;;;;"}
|
|
@@ -1,38 +1,35 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { b as BaseDb, w as waitForFile } from './index-sqKT92c8.js';
|
|
1
|
+
import { b as BaseDb, w as waitForFile } from './index-DanGFTTF.js';
|
|
3
2
|
import { sql } from 'drizzle-orm';
|
|
4
3
|
import debug from 'debug';
|
|
5
4
|
import fs from '@zenfs/core';
|
|
6
5
|
import { readMigrationFiles } from 'drizzle-orm/migrator';
|
|
7
6
|
import { drizzle } from 'drizzle-orm/sqlite-proxy';
|
|
8
7
|
import { migrate } from 'drizzle-orm/sqlite-proxy/migrator';
|
|
9
|
-
import { d as BROWSER_FS_TOP_DIR } from './constants-
|
|
8
|
+
import { d as BROWSER_FS_TOP_DIR } from './constants-BIdH8wc3.js';
|
|
10
9
|
import 'immer';
|
|
11
10
|
import 'reflect-metadata';
|
|
12
11
|
import '@sinclair/typebox';
|
|
12
|
+
import 'xstate';
|
|
13
|
+
import 'pluralize';
|
|
14
|
+
import 'drizzle-orm/sqlite-core';
|
|
13
15
|
import 'eventemitter3';
|
|
14
|
-
import 'react';
|
|
15
16
|
import 'nanoid';
|
|
16
17
|
import 'nanoid-dictionary';
|
|
17
|
-
import 'drizzle-orm/sqlite-core';
|
|
18
|
-
import 'xstate';
|
|
19
|
-
import 'pluralize';
|
|
20
18
|
import 'lodash-es';
|
|
21
19
|
import '@statelyai/inspect';
|
|
22
20
|
import 'node:fs';
|
|
23
|
-
import '@zenfs/dom';
|
|
24
21
|
import 'path';
|
|
25
22
|
import 'arweave';
|
|
26
|
-
import 'threads';
|
|
27
23
|
import 'rxjs';
|
|
28
24
|
import '@ethereum-attestation-service/eas-sdk';
|
|
25
|
+
import 'react';
|
|
29
26
|
import 'use-immer';
|
|
30
27
|
import '@xstate/react';
|
|
31
28
|
|
|
32
29
|
let sqlite3InitModule;
|
|
33
30
|
let sqliteWasmClient;
|
|
34
31
|
let isPreparing = false;
|
|
35
|
-
const getSqliteWasmClient = () =>
|
|
32
|
+
const getSqliteWasmClient = async () => {
|
|
36
33
|
if (sqliteWasmClient) {
|
|
37
34
|
return sqliteWasmClient;
|
|
38
35
|
}
|
|
@@ -44,10 +41,10 @@ const getSqliteWasmClient = () => __awaiter(void 0, void 0, void 0, function* ()
|
|
|
44
41
|
}
|
|
45
42
|
isPreparing = true;
|
|
46
43
|
if (!sqlite3InitModule) {
|
|
47
|
-
sqlite3InitModule =
|
|
44
|
+
sqlite3InitModule = await import('@sqlite.org/sqlite-wasm');
|
|
48
45
|
}
|
|
49
46
|
if (!window.sqlite3Worker1Promiser) {
|
|
50
|
-
|
|
47
|
+
await sqlite3InitModule();
|
|
51
48
|
}
|
|
52
49
|
if (!window.sqlite3Worker1Promiser) {
|
|
53
50
|
console.error('window.sqlite3Worker1Promiser not found');
|
|
@@ -55,7 +52,7 @@ const getSqliteWasmClient = () => __awaiter(void 0, void 0, void 0, function* ()
|
|
|
55
52
|
return;
|
|
56
53
|
}
|
|
57
54
|
try {
|
|
58
|
-
sqliteWasmClient =
|
|
55
|
+
sqliteWasmClient = await window.sqlite3Worker1Promiser.v2().catch((err) => {
|
|
59
56
|
console.error('Error initializing sqliteWasmClient:', err);
|
|
60
57
|
isPreparing = false;
|
|
61
58
|
});
|
|
@@ -65,7 +62,7 @@ const getSqliteWasmClient = () => __awaiter(void 0, void 0, void 0, function* ()
|
|
|
65
62
|
isPreparing = false;
|
|
66
63
|
}
|
|
67
64
|
return sqliteWasmClient;
|
|
68
|
-
}
|
|
65
|
+
};
|
|
69
66
|
let appDb;
|
|
70
67
|
const setAppDb = (db) => {
|
|
71
68
|
appDb = db;
|
|
@@ -96,26 +93,22 @@ class SqliteConnectionManager {
|
|
|
96
93
|
this.closeConnection(dbName);
|
|
97
94
|
}, this.idleTimeout);
|
|
98
95
|
}
|
|
99
|
-
getConnection(dbName) {
|
|
100
|
-
|
|
101
|
-
if (this.databases[dbName]) {
|
|
102
|
-
this.resetIdleTimer(dbName);
|
|
103
|
-
return this.databases[dbName];
|
|
104
|
-
}
|
|
105
|
-
const db = new this.sqliteModule();
|
|
106
|
-
yield db.open(dbName);
|
|
107
|
-
this.databases[dbName] = db;
|
|
96
|
+
async getConnection(dbName) {
|
|
97
|
+
if (this.databases[dbName]) {
|
|
108
98
|
this.resetIdleTimer(dbName);
|
|
109
|
-
return
|
|
110
|
-
}
|
|
99
|
+
return this.databases[dbName];
|
|
100
|
+
}
|
|
101
|
+
const db = new this.sqliteModule();
|
|
102
|
+
await db.open(dbName);
|
|
103
|
+
this.databases[dbName] = db;
|
|
104
|
+
this.resetIdleTimer(dbName);
|
|
105
|
+
return db;
|
|
111
106
|
}
|
|
112
|
-
execute(
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
return result;
|
|
118
|
-
});
|
|
107
|
+
async execute(dbName, sql, params = []) {
|
|
108
|
+
const db = await this.getConnection(dbName);
|
|
109
|
+
const result = db.exec(sql, params);
|
|
110
|
+
this.resetIdleTimer(dbName);
|
|
111
|
+
return result;
|
|
119
112
|
}
|
|
120
113
|
closeConnection(dbName) {
|
|
121
114
|
if (this.databases[dbName]) {
|
|
@@ -130,12 +123,12 @@ class SqliteConnectionManager {
|
|
|
130
123
|
}
|
|
131
124
|
|
|
132
125
|
const logger = debug('app:browser:db:Db');
|
|
133
|
-
const dbExec =
|
|
126
|
+
const dbExec = async (dbId, params, sql, dbName, retries = 2) => {
|
|
134
127
|
const rowsToReturnRaw = [];
|
|
135
|
-
const sqliteWasmClient =
|
|
128
|
+
const sqliteWasmClient = await getSqliteWasmClient();
|
|
136
129
|
// For a single exec command, the callback potentially gets called several times -- once for each row.
|
|
137
130
|
// So we need to collect all rows into a final array to return (execResult).
|
|
138
|
-
const rowsToReturn =
|
|
131
|
+
const rowsToReturn = await new Promise((resolve, reject) => {
|
|
139
132
|
sqliteWasmClient('exec', {
|
|
140
133
|
dbId,
|
|
141
134
|
sql,
|
|
@@ -185,14 +178,14 @@ const dbExec = (dbId_1, params_1, sql_1, dbName_1, ...args_1) => __awaiter(void
|
|
|
185
178
|
rowsToReturnRaw.push(result);
|
|
186
179
|
}
|
|
187
180
|
},
|
|
188
|
-
}).catch((error) =>
|
|
181
|
+
}).catch(async (error) => {
|
|
189
182
|
reject(error);
|
|
190
|
-
})
|
|
183
|
+
});
|
|
191
184
|
});
|
|
192
185
|
// logger(`[db/actors] [dbExec] rowsToReturn`, rowsToReturn)
|
|
193
186
|
// logger(`[db/actors] [dbExec] rowsValues`, rowsValues)
|
|
194
187
|
return rowsToReturn || [];
|
|
195
|
-
}
|
|
188
|
+
};
|
|
196
189
|
class Db extends BaseDb {
|
|
197
190
|
constructor() {
|
|
198
191
|
super();
|
|
@@ -248,144 +241,142 @@ class Db extends BaseDb {
|
|
|
248
241
|
}, 500);
|
|
249
242
|
});
|
|
250
243
|
}
|
|
251
|
-
static migrate(pathToDbDir, dbName, dbId) {
|
|
252
|
-
|
|
253
|
-
|
|
254
|
-
|
|
244
|
+
static async migrate(pathToDbDir, dbName, dbId) {
|
|
245
|
+
const schemaGlobString = `${BROWSER_FS_TOP_DIR}/schema/*`;
|
|
246
|
+
const drizzleDb = drizzle(async (sql, params, method) => {
|
|
247
|
+
try {
|
|
248
|
+
// logger(
|
|
249
|
+
// `executing sql on ${dbName} with id: ${dbId} and method: ${method}`,
|
|
250
|
+
// sql,
|
|
251
|
+
// )
|
|
252
|
+
const finalResult = await dbExec(dbId, params, sql, dbName);
|
|
253
|
+
// logger(`finalResult with method: ${method}`, finalResult)
|
|
254
|
+
// Drizzle always waits for {rows: string[][]} or {rows: string[]} for the return value.
|
|
255
|
+
// When the method is get, you should return a value as {rows: string[]}.
|
|
256
|
+
// Otherwise, you should return {rows: string[][]}.
|
|
257
|
+
return { rows: finalResult };
|
|
258
|
+
}
|
|
259
|
+
catch (e) {
|
|
260
|
+
console.error('Error from sqlite proxy server: ', JSON.stringify(e));
|
|
261
|
+
return { rows: [] };
|
|
262
|
+
}
|
|
263
|
+
}, {
|
|
264
|
+
schema: schemaGlobString,
|
|
265
|
+
// logger: true,
|
|
266
|
+
});
|
|
267
|
+
try {
|
|
268
|
+
const migrations = readMigrationFiles({
|
|
269
|
+
migrationsFolder: pathToDbDir,
|
|
270
|
+
});
|
|
271
|
+
if (migrations.length > 0) {
|
|
272
|
+
const incomingMigrationHashes = migrations.map((migration) => migration.hash);
|
|
273
|
+
let existingMigrationHashes;
|
|
274
|
+
let rows = [];
|
|
255
275
|
try {
|
|
256
|
-
|
|
257
|
-
|
|
258
|
-
|
|
259
|
-
// )
|
|
260
|
-
const finalResult = yield dbExec(dbId, params, sql, dbName);
|
|
261
|
-
// logger(`finalResult with method: ${method}`, finalResult)
|
|
262
|
-
// Drizzle always waits for {rows: string[][]} or {rows: string[]} for the return value.
|
|
263
|
-
// When the method is get, you should return a value as {rows: string[]}.
|
|
264
|
-
// Otherwise, you should return {rows: string[][]}.
|
|
265
|
-
return { rows: finalResult };
|
|
276
|
+
const query = await drizzleDb.run(sql.raw(`SELECT hash, created_at
|
|
277
|
+
FROM main.__drizzle_migrations;`));
|
|
278
|
+
rows = query.rows;
|
|
266
279
|
}
|
|
267
280
|
catch (e) {
|
|
268
|
-
|
|
269
|
-
return { rows: [] };
|
|
281
|
+
rows = [];
|
|
270
282
|
}
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
const incomingMigrationHashes = migrations.map((migration) => migration.hash);
|
|
281
|
-
let existingMigrationHashes;
|
|
282
|
-
let rows = [];
|
|
283
|
-
try {
|
|
284
|
-
const query = yield drizzleDb.run(sql.raw(`SELECT hash, created_at
|
|
285
|
-
FROM main.__drizzle_migrations;`));
|
|
286
|
-
rows = query.rows;
|
|
287
|
-
}
|
|
288
|
-
catch (e) {
|
|
289
|
-
rows = [];
|
|
290
|
-
}
|
|
291
|
-
if (rows && rows.length > 0) {
|
|
292
|
-
existingMigrationHashes = rows.map((row) => row[0]);
|
|
293
|
-
}
|
|
294
|
-
if (existingMigrationHashes) {
|
|
295
|
-
let shouldRebuildDb = false;
|
|
296
|
-
for (const existingHash of existingMigrationHashes) {
|
|
297
|
-
if (!incomingMigrationHashes.includes(existingHash)) {
|
|
298
|
-
shouldRebuildDb = true;
|
|
299
|
-
break;
|
|
300
|
-
}
|
|
301
|
-
}
|
|
302
|
-
if (shouldRebuildDb) {
|
|
303
|
-
yield fs.promises.unlink(`${pathToDbDir}/${dbName}.sqlite3`);
|
|
283
|
+
if (rows && rows.length > 0) {
|
|
284
|
+
existingMigrationHashes = rows.map((row) => row[0]);
|
|
285
|
+
}
|
|
286
|
+
if (existingMigrationHashes) {
|
|
287
|
+
let shouldRebuildDb = false;
|
|
288
|
+
for (const existingHash of existingMigrationHashes) {
|
|
289
|
+
if (!incomingMigrationHashes.includes(existingHash)) {
|
|
290
|
+
shouldRebuildDb = true;
|
|
291
|
+
break;
|
|
304
292
|
}
|
|
305
293
|
}
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
// logger('queriesToRun', queriesToRun)
|
|
309
|
-
for (const query of queriesToRun) {
|
|
310
|
-
// logger('query', query)
|
|
311
|
-
yield drizzleDb.run(sql.raw(query));
|
|
294
|
+
if (shouldRebuildDb) {
|
|
295
|
+
await fs.promises.unlink(`${pathToDbDir}/${dbName}.sqlite3`);
|
|
312
296
|
}
|
|
313
|
-
}
|
|
314
|
-
migrationsFolder: pathToDbDir,
|
|
315
|
-
});
|
|
316
|
-
}
|
|
317
|
-
catch (error) {
|
|
318
|
-
// console.error('Error migrating database: ', error)
|
|
319
|
-
// window.location.reload()
|
|
320
|
-
// const handle = await navigator.storage.getDirectory()
|
|
321
|
-
//
|
|
322
|
-
// await configureSingle({
|
|
323
|
-
// backend: WebAccess,
|
|
324
|
-
// handle,
|
|
325
|
-
// })
|
|
326
|
-
yield waitForFile(`${pathToDbDir}/meta/_journal.json`);
|
|
327
|
-
yield this.migrate(pathToDbDir, dbName);
|
|
297
|
+
}
|
|
328
298
|
}
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
//
|
|
341
|
-
//
|
|
342
|
-
//
|
|
343
|
-
// FROM main.sqlite_master
|
|
344
|
-
// WHERE type = 'trigger';`,
|
|
345
|
-
// ),
|
|
346
|
-
// )
|
|
347
|
-
//
|
|
348
|
-
// logger('[db/actors] [migrate] triggersQuery', triggersQuery)
|
|
349
|
-
//
|
|
350
|
-
// const triggers = triggersQuery.rows.map((row) => row[0])
|
|
351
|
-
//
|
|
352
|
-
// const tablesQuery = await appDb.run(
|
|
353
|
-
// sql.raw(
|
|
354
|
-
// `SELECT name
|
|
355
|
-
// FROM main.sqlite_master
|
|
356
|
-
// WHERE type = 'table';`,
|
|
357
|
-
// ),
|
|
358
|
-
// )
|
|
359
|
-
//
|
|
360
|
-
// logger('[db/actors] [migrate] tablesQuery', tablesQuery)
|
|
361
|
-
//
|
|
362
|
-
// const tableNames = tablesQuery.rows.map((row) => row[0])
|
|
363
|
-
// logger('[db/actors] [migrate] tableNames', tableNames)
|
|
364
|
-
// for (const tableName of tableNames) {
|
|
365
|
-
// const triggerName = `after_insert_${tableName}`
|
|
366
|
-
// if (triggers.includes(triggerName)) {
|
|
367
|
-
// continue
|
|
368
|
-
// }
|
|
369
|
-
// const createTriggerQuery = await appDb.run(
|
|
370
|
-
// sql.raw(
|
|
371
|
-
// `CREATE TRIGGER after_insert_${tableName}
|
|
372
|
-
// AFTER INSERT ON ${tableName}
|
|
373
|
-
// BEGIN
|
|
374
|
-
// DELETE FROM temp_last_inserted_id;
|
|
375
|
-
// INSERT INTO temp_last_inserted_id (id) VALUES (new.id);
|
|
376
|
-
// END;`,
|
|
377
|
-
// ),
|
|
378
|
-
// )
|
|
299
|
+
await migrate(drizzleDb, async (queriesToRun) => {
|
|
300
|
+
// logger('queriesToRun', queriesToRun)
|
|
301
|
+
for (const query of queriesToRun) {
|
|
302
|
+
// logger('query', query)
|
|
303
|
+
await drizzleDb.run(sql.raw(query));
|
|
304
|
+
}
|
|
305
|
+
}, {
|
|
306
|
+
migrationsFolder: pathToDbDir,
|
|
307
|
+
});
|
|
308
|
+
}
|
|
309
|
+
catch (error) {
|
|
310
|
+
// console.error('Error migrating database: ', error)
|
|
311
|
+
// window.location.reload()
|
|
312
|
+
// const handle = await navigator.storage.getDirectory()
|
|
379
313
|
//
|
|
380
|
-
//
|
|
381
|
-
//
|
|
382
|
-
//
|
|
383
|
-
//
|
|
384
|
-
|
|
385
|
-
|
|
314
|
+
// await configureSingle({
|
|
315
|
+
// backend: WebAccess,
|
|
316
|
+
// handle,
|
|
317
|
+
// })
|
|
318
|
+
await waitForFile(`${pathToDbDir}/meta/_journal.json`);
|
|
319
|
+
await this.migrate(pathToDbDir, dbName);
|
|
320
|
+
}
|
|
321
|
+
setAppDb(drizzleDb);
|
|
322
|
+
// const createTempTableQuery = await appDb.run(
|
|
323
|
+
// sql.raw(
|
|
324
|
+
// `CREATE TEMP TABLE IF NOT EXISTS temp_last_inserted_id (id INTEGER, table TEXT);`,
|
|
325
|
+
// ),
|
|
326
|
+
// )
|
|
327
|
+
//
|
|
328
|
+
// logger(
|
|
329
|
+
// '[db/actors] [migrate] createTempTableQuery',
|
|
330
|
+
// createTempTableQuery,
|
|
331
|
+
// )
|
|
332
|
+
// const triggersQuery = await appDb.run(
|
|
333
|
+
// sql.raw(
|
|
334
|
+
// `SELECT name
|
|
335
|
+
// FROM main.sqlite_master
|
|
336
|
+
// WHERE type = 'trigger';`,
|
|
337
|
+
// ),
|
|
338
|
+
// )
|
|
339
|
+
//
|
|
340
|
+
// logger('[db/actors] [migrate] triggersQuery', triggersQuery)
|
|
341
|
+
//
|
|
342
|
+
// const triggers = triggersQuery.rows.map((row) => row[0])
|
|
343
|
+
//
|
|
344
|
+
// const tablesQuery = await appDb.run(
|
|
345
|
+
// sql.raw(
|
|
346
|
+
// `SELECT name
|
|
347
|
+
// FROM main.sqlite_master
|
|
348
|
+
// WHERE type = 'table';`,
|
|
349
|
+
// ),
|
|
350
|
+
// )
|
|
351
|
+
//
|
|
352
|
+
// logger('[db/actors] [migrate] tablesQuery', tablesQuery)
|
|
353
|
+
//
|
|
354
|
+
// const tableNames = tablesQuery.rows.map((row) => row[0])
|
|
355
|
+
// logger('[db/actors] [migrate] tableNames', tableNames)
|
|
356
|
+
// for (const tableName of tableNames) {
|
|
357
|
+
// const triggerName = `after_insert_${tableName}`
|
|
358
|
+
// if (triggers.includes(triggerName)) {
|
|
359
|
+
// continue
|
|
360
|
+
// }
|
|
361
|
+
// const createTriggerQuery = await appDb.run(
|
|
362
|
+
// sql.raw(
|
|
363
|
+
// `CREATE TRIGGER after_insert_${tableName}
|
|
364
|
+
// AFTER INSERT ON ${tableName}
|
|
365
|
+
// BEGIN
|
|
366
|
+
// DELETE FROM temp_last_inserted_id;
|
|
367
|
+
// INSERT INTO temp_last_inserted_id (id) VALUES (new.id);
|
|
368
|
+
// END;`,
|
|
369
|
+
// ),
|
|
370
|
+
// )
|
|
371
|
+
//
|
|
372
|
+
// logger(
|
|
373
|
+
// '[db/actors] [migrate] createTriggerQuery',
|
|
374
|
+
// createTriggerQuery,
|
|
375
|
+
// )
|
|
376
|
+
// }
|
|
386
377
|
}
|
|
387
378
|
}
|
|
388
379
|
BaseDb.setPlatformClass(Db);
|
|
389
380
|
|
|
390
381
|
export { Db, dbExec };
|
|
391
|
-
//# sourceMappingURL=Db-
|
|
382
|
+
//# sourceMappingURL=Db-BEoczaGe.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Db-DFKHN8CX.js","sources":["../../src/browser/db/sqlWasmClient.ts","../../src/services/db/connectionManager.ts","../../src/browser/db/Db.ts"],"sourcesContent":["import { SqliteConnectionManager } from '@/services/db'\nimport {\n SqliteRemoteDatabase,\n SqliteRemoteResult,\n} from 'drizzle-orm/sqlite-proxy'\nimport { sql } from 'drizzle-orm'\n\nlet sqlite3InitModule: any\nlet sqliteWasmClient: any\nlet manager: SqliteConnectionManager | undefined\nlet isPreparing = false\n\nexport const setSqliteWasmClient = (client: any) => {\n sqliteWasmClient = client\n}\n\nexport const getSqliteWasmClient = async () => {\n if (sqliteWasmClient) {\n return sqliteWasmClient\n }\n if (typeof window === 'undefined') {\n throw new Error('validateInput called from non-browser context')\n }\n\n if (isPreparing) {\n return\n }\n\n isPreparing = true\n\n if (!sqlite3InitModule) {\n sqlite3InitModule = await import('@sqlite.org/sqlite-wasm')\n }\n\n if (!window.sqlite3Worker1Promiser) {\n await sqlite3InitModule()\n }\n\n if (!window.sqlite3Worker1Promiser) {\n console.error('window.sqlite3Worker1Promiser not found')\n isPreparing = false\n return\n }\n\n try {\n sqliteWasmClient = await window.sqlite3Worker1Promiser.v2().catch((err) => {\n console.error('Error initializing sqliteWasmClient:', err)\n isPreparing = false\n })\n } catch (err) {\n console.error('Error initializing sqliteWasmClient:', err)\n isPreparing = false\n }\n return sqliteWasmClient\n}\n\nexport const getManager = () => {\n return manager\n}\n\nexport const setManager = (m: any) => {\n manager = m\n}\nlet appDb: SqliteRemoteDatabase<Record<string, unknown>> | undefined\nexport const setAppDb = (db: SqliteRemoteDatabase<Record<string, unknown>>) => {\n appDb = db\n}\nexport const getAppDb = () => {\n if (!appDb) {\n throw new Error('getAppDb: appDb is undefined')\n }\n\n return appDb\n}\nexport const isAppDbReady = () => {\n return !!appDb\n}\ntype RunQueryForStatement = (\n statement: string,\n) => Promise<SqliteRemoteResult<unknown>>\n\nexport const runQueryForStatement: RunQueryForStatement = async (\n statement: string,\n) => {\n const appDb = getAppDb()\n\n return appDb.run(sql.raw(statement))\n}\n","type SqliteDatabase = {\n open: (filename: string) => Promise<void>\n exec: (sql: string, params?: any[]) => any\n close: () => void\n}\n\nclass SqliteConnectionManager {\n private sqliteModule: SqliteDatabase\n private idleTimeout: number\n private databases: { [key: string]: SqliteDatabase }\n private idleTimers: { [key: string]: NodeJS.Timeout }\n\n constructor(sqliteModule: SqliteDatabase, idleTimeout: number = 300000) {\n // Default idle timeout: 5 minutes\n this.sqliteModule = sqliteModule\n this.idleTimeout = idleTimeout\n this.databases = {}\n this.idleTimers = {}\n }\n\n private resetIdleTimer(dbName: string): void {\n if (this.idleTimers[dbName]) {\n clearTimeout(this.idleTimers[dbName])\n }\n\n this.idleTimers[dbName] = setTimeout(() => {\n this.closeConnection(dbName)\n }, this.idleTimeout)\n }\n\n private async getConnection(dbName: string): Promise<SqliteDatabase> {\n if (this.databases[dbName]) {\n this.resetIdleTimer(dbName)\n return this.databases[dbName]\n }\n\n const db = new this.sqliteModule()\n await db.open(dbName)\n this.databases[dbName] = db\n this.resetIdleTimer(dbName)\n return db\n }\n\n public async execute(\n dbName: string,\n sql: string,\n params: any[] = [],\n ): Promise<any> {\n const db = await this.getConnection(dbName)\n const result = db.exec(sql, params)\n this.resetIdleTimer(dbName)\n return result\n }\n\n public closeConnection(dbName: string): void {\n if (this.databases[dbName]) {\n this.databases[dbName].close()\n delete this.databases[dbName]\n if (this.idleTimers[dbName]) {\n clearTimeout(this.idleTimers[dbName])\n delete this.idleTimers[dbName]\n }\n }\n }\n}\n\nexport { SqliteConnectionManager }\n","import { BaseDb } from \"@/db/Db/BaseDb\";\nimport { IDb } from \"@/interfaces/IDb\";\nimport { getAppDb, getSqliteWasmClient, isAppDbReady, setAppDb } from \"./sqlWasmClient\";\nimport { SqliteConnectionManager } from \"@/services/db\";\nimport debug from \"debug\";\nimport { waitForFile } from \"@/helpers/files\";\nimport fs from \"@zenfs/core\";\nimport { sql } from \"drizzle-orm\";\nimport { readMigrationFiles } from \"drizzle-orm/migrator\";\nimport { drizzle } from \"drizzle-orm/sqlite-proxy\";\nimport { migrate as drizzleMigrate } from \"drizzle-orm/sqlite-proxy/migrator\";\nimport { BROWSER_FS_TOP_DIR } from \"@/services/internal/constants\";\nconst logger = debug('app:browser:db:Db')\n\nexport const dbExec = async (dbId, params, sql, dbName, retries = 2) => {\n const rowsToReturnRaw: SqliteWasmResult[] = []\n const rowsValues: string[][] = []\n\n const sqliteWasmClient = await getSqliteWasmClient()\n\n // For a single exec command, the callback potentially gets called several times -- once for each row.\n // So we need to collect all rows into a final array to return (execResult).\n const rowsToReturn = await new Promise((resolve, reject) => {\n sqliteWasmClient('exec', {\n dbId,\n sql,\n bind: params,\n callback: (result) => {\n // Checks if this is the final callback of the query\n if (!result || !result.row || !result.rowNumber) {\n const returnResult = []\n // Before returning the array, we process it to match the expected output format\n // const rowsToReturnProcessed = rowsToReturnRaw.reduce((acc, curr) => {\n // if (\n // Array.isArray(curr.row) &&\n // curr.row?.length > 0 &&\n // curr.columnNames.length > 0\n // ) {\n // const returnObj: ReturnObj = {\n // database: dbName,\n // }\n //\n // const values = []\n //\n // curr.columnNames.forEach((colName, index: number) => {\n // if (curr.row && curr.row[index]) {\n // returnObj[colName] = curr.row[index]\n // values.push(curr.row[index])\n // }\n // })\n // // rowsValueStrings.push(`(${values.join(', ')})`)\n // acc.push(returnObj)\n // }\n // return acc\n // }, [] as string[])\n for (const currRow of rowsToReturnRaw) {\n // const values: string[] = []\n // currRow.columnNames.forEach((colName, index: number) => {\n // if (currRow.row) {\n // values.push(currRow.row[index])\n // }\n // })\n // logger(`[db/actors] [dbExec] currRow`, currRow)\n returnResult.push(currRow.row)\n }\n resolve(returnResult)\n } else {\n // If not the final response, add this row to the return array\n rowsToReturnRaw.push(result)\n }\n },\n }).catch(async (error) => {\n reject(error)\n })\n })\n\n // logger(`[db/actors] [dbExec] rowsToReturn`, rowsToReturn)\n // logger(`[db/actors] [dbExec] rowsValues`, rowsValues)\n\n return rowsToReturn || []\n}\n\nclass Db extends BaseDb implements IDb {\n constructor() {\n super()\n }\n\n static getAppDb() {\n return getAppDb()\n }\n\n static isAppDbReady() {\n return isAppDbReady()\n }\n\n static prepareDb(filesDir: string) {\n\n return new Promise((resolve, reject) => {\n let sqliteWasmClient\n const interval = setInterval(() => {\n // TODO: Add a timeout\n // TODO: Add a cancel token to the promise so we can prevent more loops starting while we're checking the successful outcome\n getSqliteWasmClient().then((sqliteWasmClient) => {\n\n if (sqliteWasmClient) {\n clearInterval(interval)\n const manager = new SqliteConnectionManager(sqliteWasmClient)\n resolve(manager)\n }\n })\n\n }, 200)\n })\n }\n\n static connectToDb(pathToDir: string, dbName: string) {\n\n return new Promise((resolve, reject) => {\n const interval = setInterval(() => {\n\n // TODO: Add a timeout\n // TODO: Add a cancel token to the promise so we can prevent more loops starting while we're checking the successful outcome\n getSqliteWasmClient().then((sqliteWasmClient) => {\n\n if (!sqliteWasmClient) {\n return\n }\n\n //@ts-ignore\n sqliteWasmClient('config-get', {}).then((response) => {\n logger(response)\n logger('Running SQLite3 version', response.result.version.libVersion)\n\n //@ts-ignore\n sqliteWasmClient('open', {\n filename: `file:${pathToDir}/db/${dbName}.sqlite3?vfs=opfs`,\n }).then((response: { dbId: string, result: { filename: string } }) => {\n\n logger(response)\n const dbId = response.dbId\n logger(\n 'OPFS is available, created persisted database at',\n response.result.filename.replace(/^file:(.*?)\\?vfs=opfs$/, '$1'),\n )\n\n if (dbId) {\n clearInterval(interval)\n resolve(dbId)\n }\n })\n })\n })\n }, 500)\n })\n }\n\n static async migrate(pathToDbDir: string, dbName: string, dbId: string): Promise<void> {\n\n const schemaGlobString = `${BROWSER_FS_TOP_DIR}/schema/*`\n\n const drizzleDb = drizzle(\n async (sql, params, method) => {\n try {\n // logger(\n // `executing sql on ${dbName} with id: ${dbId} and method: ${method}`,\n // sql,\n // )\n\n const finalResult = await dbExec(dbId, params, sql, dbName)\n\n // logger(`finalResult with method: ${method}`, finalResult)\n // Drizzle always waits for {rows: string[][]} or {rows: string[]} for the return value.\n\n // When the method is get, you should return a value as {rows: string[]}.\n // Otherwise, you should return {rows: string[][]}.\n\n return { rows: finalResult }\n } catch (e: any) {\n console.error('Error from sqlite proxy server: ', JSON.stringify(e))\n return { rows: [] }\n }\n },\n {\n schema: schemaGlobString,\n // logger: true,\n },\n )\n\n try {\n const migrations = readMigrationFiles({\n migrationsFolder: pathToDbDir,\n })\n\n if (migrations.length > 0) {\n const incomingMigrationHashes = migrations.map(\n (migration) => migration.hash,\n )\n\n let existingMigrationHashes\n let rows = []\n\n try {\n const query = await drizzleDb.run(\n sql.raw(\n `SELECT hash, created_at\n FROM main.__drizzle_migrations;`,\n ),\n )\n\n rows = query.rows\n } catch (e) {\n rows = []\n }\n\n if (rows && rows.length > 0) {\n existingMigrationHashes = rows.map((row) => row[0])\n }\n\n if (existingMigrationHashes) {\n let shouldRebuildDb = false\n for (const existingHash of existingMigrationHashes) {\n if (!incomingMigrationHashes.includes(existingHash)) {\n shouldRebuildDb = true\n break\n }\n }\n if (shouldRebuildDb) {\n await fs.promises.unlink(`${pathToDbDir}/${dbName}.sqlite3`)\n }\n }\n }\n\n await drizzleMigrate(\n drizzleDb,\n async (queriesToRun) => {\n // logger('queriesToRun', queriesToRun)\n for (const query of queriesToRun) {\n // logger('query', query)\n await drizzleDb.run(sql.raw(query))\n }\n },\n {\n migrationsFolder: pathToDbDir,\n },\n )\n } catch (error) {\n // console.error('Error migrating database: ', error)\n // window.location.reload()\n // const handle = await navigator.storage.getDirectory()\n //\n // await configureSingle({\n // backend: WebAccess,\n // handle,\n // })\n\n await waitForFile(`${pathToDbDir}/meta/_journal.json`)\n\n await this.migrate(pathToDbDir, dbName)\n\n }\n\n setAppDb(drizzleDb)\n // const createTempTableQuery = await appDb.run(\n // sql.raw(\n // `CREATE TEMP TABLE IF NOT EXISTS temp_last_inserted_id (id INTEGER, table TEXT);`,\n // ),\n // )\n //\n // logger(\n // '[db/actors] [migrate] createTempTableQuery',\n // createTempTableQuery,\n // )\n\n // const triggersQuery = await appDb.run(\n // sql.raw(\n // `SELECT name\n // FROM main.sqlite_master\n // WHERE type = 'trigger';`,\n // ),\n // )\n //\n // logger('[db/actors] [migrate] triggersQuery', triggersQuery)\n //\n // const triggers = triggersQuery.rows.map((row) => row[0])\n //\n // const tablesQuery = await appDb.run(\n // sql.raw(\n // `SELECT name\n // FROM main.sqlite_master\n // WHERE type = 'table';`,\n // ),\n // )\n //\n // logger('[db/actors] [migrate] tablesQuery', tablesQuery)\n //\n // const tableNames = tablesQuery.rows.map((row) => row[0])\n // logger('[db/actors] [migrate] tableNames', tableNames)\n // for (const tableName of tableNames) {\n // const triggerName = `after_insert_${tableName}`\n // if (triggers.includes(triggerName)) {\n // continue\n // }\n // const createTriggerQuery = await appDb.run(\n // sql.raw(\n // `CREATE TRIGGER after_insert_${tableName}\n // AFTER INSERT ON ${tableName}\n // BEGIN\n // DELETE FROM temp_last_inserted_id;\n // INSERT INTO temp_last_inserted_id (id) VALUES (new.id);\n // END;`,\n // ),\n // )\n //\n // logger(\n // '[db/actors] [migrate] createTriggerQuery',\n // createTriggerQuery,\n // )\n // }\n }\n}\n\nBaseDb.setPlatformClass(Db)\n\nexport { Db }"],"names":["drizzleMigrate"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"Db-BEoczaGe.js","sources":["../../src/browser/db/sqlWasmClient.ts","../../src/services/db/connectionManager.ts","../../src/browser/db/Db.ts"],"sourcesContent":["import { SqliteConnectionManager } from '@/services/db'\nimport {\n SqliteRemoteDatabase,\n SqliteRemoteResult,\n} from 'drizzle-orm/sqlite-proxy'\nimport { sql } from 'drizzle-orm'\n\nlet sqlite3InitModule: any\nlet sqliteWasmClient: any\nlet manager: SqliteConnectionManager | undefined\nlet isPreparing = false\n\nexport const setSqliteWasmClient = (client: any) => {\n sqliteWasmClient = client\n}\n\nexport const getSqliteWasmClient = async () => {\n if (sqliteWasmClient) {\n return sqliteWasmClient\n }\n if (typeof window === 'undefined') {\n throw new Error('validateInput called from non-browser context')\n }\n\n if (isPreparing) {\n return\n }\n\n isPreparing = true\n\n if (!sqlite3InitModule) {\n sqlite3InitModule = await import('@sqlite.org/sqlite-wasm')\n }\n\n if (!window.sqlite3Worker1Promiser) {\n await sqlite3InitModule()\n }\n\n if (!window.sqlite3Worker1Promiser) {\n console.error('window.sqlite3Worker1Promiser not found')\n isPreparing = false\n return\n }\n\n try {\n sqliteWasmClient = await window.sqlite3Worker1Promiser.v2().catch((err) => {\n console.error('Error initializing sqliteWasmClient:', err)\n isPreparing = false\n })\n } catch (err) {\n console.error('Error initializing sqliteWasmClient:', err)\n isPreparing = false\n }\n return sqliteWasmClient\n}\n\nexport const getManager = () => {\n return manager\n}\n\nexport const setManager = (m: any) => {\n manager = m\n}\nlet appDb: SqliteRemoteDatabase<Record<string, unknown>> | undefined\nexport const setAppDb = (db: SqliteRemoteDatabase<Record<string, unknown>>) => {\n appDb = db\n}\nexport const getAppDb = () => {\n if (!appDb) {\n throw new Error('getAppDb: appDb is undefined')\n }\n\n return appDb\n}\nexport const isAppDbReady = () => {\n return !!appDb\n}\ntype RunQueryForStatement = (\n statement: string,\n) => Promise<SqliteRemoteResult<unknown>>\n\nexport const runQueryForStatement: RunQueryForStatement = async (\n statement: string,\n) => {\n const appDb = getAppDb()\n\n return appDb.run(sql.raw(statement))\n}\n","type SqliteDatabase = {\n open: (filename: string) => Promise<void>\n exec: (sql: string, params?: any[]) => any\n close: () => void\n}\n\nclass SqliteConnectionManager {\n private sqliteModule: SqliteDatabase\n private idleTimeout: number\n private databases: { [key: string]: SqliteDatabase }\n private idleTimers: { [key: string]: NodeJS.Timeout }\n\n constructor(sqliteModule: SqliteDatabase, idleTimeout: number = 300000) {\n // Default idle timeout: 5 minutes\n this.sqliteModule = sqliteModule\n this.idleTimeout = idleTimeout\n this.databases = {}\n this.idleTimers = {}\n }\n\n private resetIdleTimer(dbName: string): void {\n if (this.idleTimers[dbName]) {\n clearTimeout(this.idleTimers[dbName])\n }\n\n this.idleTimers[dbName] = setTimeout(() => {\n this.closeConnection(dbName)\n }, this.idleTimeout)\n }\n\n private async getConnection(dbName: string): Promise<SqliteDatabase> {\n if (this.databases[dbName]) {\n this.resetIdleTimer(dbName)\n return this.databases[dbName]\n }\n\n const db = new this.sqliteModule()\n await db.open(dbName)\n this.databases[dbName] = db\n this.resetIdleTimer(dbName)\n return db\n }\n\n public async execute(\n dbName: string,\n sql: string,\n params: any[] = [],\n ): Promise<any> {\n const db = await this.getConnection(dbName)\n const result = db.exec(sql, params)\n this.resetIdleTimer(dbName)\n return result\n }\n\n public closeConnection(dbName: string): void {\n if (this.databases[dbName]) {\n this.databases[dbName].close()\n delete this.databases[dbName]\n if (this.idleTimers[dbName]) {\n clearTimeout(this.idleTimers[dbName])\n delete this.idleTimers[dbName]\n }\n }\n }\n}\n\nexport { SqliteConnectionManager }\n","import { BaseDb } from \"@/db/Db/BaseDb\";\nimport { IDb } from \"@/interfaces/IDb\";\nimport { getAppDb, getSqliteWasmClient, isAppDbReady, setAppDb } from \"./sqlWasmClient\";\nimport { SqliteConnectionManager } from \"@/services/db\";\nimport debug from \"debug\";\nimport { waitForFile } from \"@/helpers/files\";\nimport fs from \"@zenfs/core\";\nimport { sql } from \"drizzle-orm\";\nimport { readMigrationFiles } from \"drizzle-orm/migrator\";\nimport { drizzle } from \"drizzle-orm/sqlite-proxy\";\nimport { migrate as drizzleMigrate } from \"drizzle-orm/sqlite-proxy/migrator\";\nimport { BROWSER_FS_TOP_DIR } from \"@/services/internal/constants\";\nconst logger = debug('app:browser:db:Db')\n\nexport const dbExec = async (dbId, params, sql, dbName, retries = 2) => {\n const rowsToReturnRaw: SqliteWasmResult[] = []\n const rowsValues: string[][] = []\n\n const sqliteWasmClient = await getSqliteWasmClient()\n\n // For a single exec command, the callback potentially gets called several times -- once for each row.\n // So we need to collect all rows into a final array to return (execResult).\n const rowsToReturn = await new Promise((resolve, reject) => {\n sqliteWasmClient('exec', {\n dbId,\n sql,\n bind: params,\n callback: (result) => {\n // Checks if this is the final callback of the query\n if (!result || !result.row || !result.rowNumber) {\n const returnResult = []\n // Before returning the array, we process it to match the expected output format\n // const rowsToReturnProcessed = rowsToReturnRaw.reduce((acc, curr) => {\n // if (\n // Array.isArray(curr.row) &&\n // curr.row?.length > 0 &&\n // curr.columnNames.length > 0\n // ) {\n // const returnObj: ReturnObj = {\n // database: dbName,\n // }\n //\n // const values = []\n //\n // curr.columnNames.forEach((colName, index: number) => {\n // if (curr.row && curr.row[index]) {\n // returnObj[colName] = curr.row[index]\n // values.push(curr.row[index])\n // }\n // })\n // // rowsValueStrings.push(`(${values.join(', ')})`)\n // acc.push(returnObj)\n // }\n // return acc\n // }, [] as string[])\n for (const currRow of rowsToReturnRaw) {\n // const values: string[] = []\n // currRow.columnNames.forEach((colName, index: number) => {\n // if (currRow.row) {\n // values.push(currRow.row[index])\n // }\n // })\n // logger(`[db/actors] [dbExec] currRow`, currRow)\n returnResult.push(currRow.row)\n }\n resolve(returnResult)\n } else {\n // If not the final response, add this row to the return array\n rowsToReturnRaw.push(result)\n }\n },\n }).catch(async (error) => {\n reject(error)\n })\n })\n\n // logger(`[db/actors] [dbExec] rowsToReturn`, rowsToReturn)\n // logger(`[db/actors] [dbExec] rowsValues`, rowsValues)\n\n return rowsToReturn || []\n}\n\nclass Db extends BaseDb implements IDb {\n constructor() {\n super()\n }\n\n static getAppDb() {\n return getAppDb()\n }\n\n static isAppDbReady() {\n return isAppDbReady()\n }\n\n static prepareDb(filesDir: string) {\n\n return new Promise((resolve, reject) => {\n let sqliteWasmClient\n const interval = setInterval(() => {\n // TODO: Add a timeout\n // TODO: Add a cancel token to the promise so we can prevent more loops starting while we're checking the successful outcome\n getSqliteWasmClient().then((sqliteWasmClient) => {\n\n if (sqliteWasmClient) {\n clearInterval(interval)\n const manager = new SqliteConnectionManager(sqliteWasmClient)\n resolve(manager)\n }\n })\n\n }, 200)\n })\n }\n\n static connectToDb(pathToDir: string, dbName: string) {\n\n return new Promise((resolve, reject) => {\n const interval = setInterval(() => {\n\n // TODO: Add a timeout\n // TODO: Add a cancel token to the promise so we can prevent more loops starting while we're checking the successful outcome\n getSqliteWasmClient().then((sqliteWasmClient) => {\n\n if (!sqliteWasmClient) {\n return\n }\n\n //@ts-ignore\n sqliteWasmClient('config-get', {}).then((response) => {\n logger(response)\n logger('Running SQLite3 version', response.result.version.libVersion)\n\n //@ts-ignore\n sqliteWasmClient('open', {\n filename: `file:${pathToDir}/db/${dbName}.sqlite3?vfs=opfs`,\n }).then((response: { dbId: string, result: { filename: string } }) => {\n\n logger(response)\n const dbId = response.dbId\n logger(\n 'OPFS is available, created persisted database at',\n response.result.filename.replace(/^file:(.*?)\\?vfs=opfs$/, '$1'),\n )\n\n if (dbId) {\n clearInterval(interval)\n resolve(dbId)\n }\n })\n })\n })\n }, 500)\n })\n }\n\n static async migrate(pathToDbDir: string, dbName: string, dbId: string): Promise<void> {\n\n const schemaGlobString = `${BROWSER_FS_TOP_DIR}/schema/*`\n\n const drizzleDb = drizzle(\n async (sql, params, method) => {\n try {\n // logger(\n // `executing sql on ${dbName} with id: ${dbId} and method: ${method}`,\n // sql,\n // )\n\n const finalResult = await dbExec(dbId, params, sql, dbName)\n\n // logger(`finalResult with method: ${method}`, finalResult)\n // Drizzle always waits for {rows: string[][]} or {rows: string[]} for the return value.\n\n // When the method is get, you should return a value as {rows: string[]}.\n // Otherwise, you should return {rows: string[][]}.\n\n return { rows: finalResult }\n } catch (e: any) {\n console.error('Error from sqlite proxy server: ', JSON.stringify(e))\n return { rows: [] }\n }\n },\n {\n schema: schemaGlobString,\n // logger: true,\n },\n )\n\n try {\n const migrations = readMigrationFiles({\n migrationsFolder: pathToDbDir,\n })\n\n if (migrations.length > 0) {\n const incomingMigrationHashes = migrations.map(\n (migration) => migration.hash,\n )\n\n let existingMigrationHashes\n let rows = []\n\n try {\n const query = await drizzleDb.run(\n sql.raw(\n `SELECT hash, created_at\n FROM main.__drizzle_migrations;`,\n ),\n )\n\n rows = query.rows\n } catch (e) {\n rows = []\n }\n\n if (rows && rows.length > 0) {\n existingMigrationHashes = rows.map((row) => row[0])\n }\n\n if (existingMigrationHashes) {\n let shouldRebuildDb = false\n for (const existingHash of existingMigrationHashes) {\n if (!incomingMigrationHashes.includes(existingHash)) {\n shouldRebuildDb = true\n break\n }\n }\n if (shouldRebuildDb) {\n await fs.promises.unlink(`${pathToDbDir}/${dbName}.sqlite3`)\n }\n }\n }\n\n await drizzleMigrate(\n drizzleDb,\n async (queriesToRun) => {\n // logger('queriesToRun', queriesToRun)\n for (const query of queriesToRun) {\n // logger('query', query)\n await drizzleDb.run(sql.raw(query))\n }\n },\n {\n migrationsFolder: pathToDbDir,\n },\n )\n } catch (error) {\n // console.error('Error migrating database: ', error)\n // window.location.reload()\n // const handle = await navigator.storage.getDirectory()\n //\n // await configureSingle({\n // backend: WebAccess,\n // handle,\n // })\n\n await waitForFile(`${pathToDbDir}/meta/_journal.json`)\n\n await this.migrate(pathToDbDir, dbName)\n\n }\n\n setAppDb(drizzleDb)\n // const createTempTableQuery = await appDb.run(\n // sql.raw(\n // `CREATE TEMP TABLE IF NOT EXISTS temp_last_inserted_id (id INTEGER, table TEXT);`,\n // ),\n // )\n //\n // logger(\n // '[db/actors] [migrate] createTempTableQuery',\n // createTempTableQuery,\n // )\n\n // const triggersQuery = await appDb.run(\n // sql.raw(\n // `SELECT name\n // FROM main.sqlite_master\n // WHERE type = 'trigger';`,\n // ),\n // )\n //\n // logger('[db/actors] [migrate] triggersQuery', triggersQuery)\n //\n // const triggers = triggersQuery.rows.map((row) => row[0])\n //\n // const tablesQuery = await appDb.run(\n // sql.raw(\n // `SELECT name\n // FROM main.sqlite_master\n // WHERE type = 'table';`,\n // ),\n // )\n //\n // logger('[db/actors] [migrate] tablesQuery', tablesQuery)\n //\n // const tableNames = tablesQuery.rows.map((row) => row[0])\n // logger('[db/actors] [migrate] tableNames', tableNames)\n // for (const tableName of tableNames) {\n // const triggerName = `after_insert_${tableName}`\n // if (triggers.includes(triggerName)) {\n // continue\n // }\n // const createTriggerQuery = await appDb.run(\n // sql.raw(\n // `CREATE TRIGGER after_insert_${tableName}\n // AFTER INSERT ON ${tableName}\n // BEGIN\n // DELETE FROM temp_last_inserted_id;\n // INSERT INTO temp_last_inserted_id (id) VALUES (new.id);\n // END;`,\n // ),\n // )\n //\n // logger(\n // '[db/actors] [migrate] createTriggerQuery',\n // createTriggerQuery,\n // )\n // }\n }\n}\n\nBaseDb.setPlatformClass(Db)\n\nexport { Db }"],"names":["drizzleMigrate"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAOA,IAAI,iBAAsB;AAC1B,IAAI,gBAAqB;AAEzB,IAAI,WAAW,GAAG,KAAK;AAMhB,MAAM,mBAAmB,GAAG,YAAW;IAC5C,IAAI,gBAAgB,EAAE;AACpB,QAAA,OAAO,gBAAgB;;AAEzB,IAAA,IAAI,OAAO,MAAM,KAAK,WAAW,EAAE;AACjC,QAAA,MAAM,IAAI,KAAK,CAAC,+CAA+C,CAAC;;IAGlE,IAAI,WAAW,EAAE;QACf;;IAGF,WAAW,GAAG,IAAI;IAElB,IAAI,CAAC,iBAAiB,EAAE;AACtB,QAAA,iBAAiB,GAAG,MAAM,OAAO,yBAAyB,CAAC;;AAG7D,IAAA,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE;QAClC,MAAM,iBAAiB,EAAE;;AAG3B,IAAA,IAAI,CAAC,MAAM,CAAC,sBAAsB,EAAE;AAClC,QAAA,OAAO,CAAC,KAAK,CAAC,yCAAyC,CAAC;QACxD,WAAW,GAAG,KAAK;QACnB;;AAGF,IAAA,IAAI;AACF,QAAA,gBAAgB,GAAG,MAAM,MAAM,CAAC,sBAAsB,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,GAAG,KAAI;AACxE,YAAA,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC;YAC1D,WAAW,GAAG,KAAK;AACrB,SAAC,CAAC;;IACF,OAAO,GAAG,EAAE;AACZ,QAAA,OAAO,CAAC,KAAK,CAAC,sCAAsC,EAAE,GAAG,CAAC;QAC1D,WAAW,GAAG,KAAK;;AAErB,IAAA,OAAO,gBAAgB;AACzB,CAAC;AASD,IAAI,KAAgE;AAC7D,MAAM,QAAQ,GAAG,CAAC,EAAiD,KAAI;IAC5E,KAAK,GAAG,EAAE;AACZ,CAAC;AACM,MAAM,QAAQ,GAAG,MAAK;IAC3B,IAAI,CAAC,KAAK,EAAE;AACV,QAAA,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC;;AAGjD,IAAA,OAAO,KAAK;AACd,CAAC;AACM,MAAM,YAAY,GAAG,MAAK;IAC/B,OAAO,CAAC,CAAC,KAAK;AAChB,CAAC;;ACtED,MAAM,uBAAuB,CAAA;IAM3B,WAAY,CAAA,YAA4B,EAAE,WAAA,GAAsB,MAAM,EAAA;;AAEpE,QAAA,IAAI,CAAC,YAAY,GAAG,YAAY;AAChC,QAAA,IAAI,CAAC,WAAW,GAAG,WAAW;AAC9B,QAAA,IAAI,CAAC,SAAS,GAAG,EAAE;AACnB,QAAA,IAAI,CAAC,UAAU,GAAG,EAAE;;AAGd,IAAA,cAAc,CAAC,MAAc,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;YAC3B,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;;QAGvC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,GAAG,UAAU,CAAC,MAAK;AACxC,YAAA,IAAI,CAAC,eAAe,CAAC,MAAM,CAAC;AAC9B,SAAC,EAAE,IAAI,CAAC,WAAW,CAAC;;IAGd,MAAM,aAAa,CAAC,MAAc,EAAA;AACxC,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;AAC1B,YAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AAC3B,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;;AAG/B,QAAA,MAAM,EAAE,GAAG,IAAI,IAAI,CAAC,YAAY,EAAE;AAClC,QAAA,MAAM,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,GAAG,EAAE;AAC3B,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AAC3B,QAAA,OAAO,EAAE;;IAGJ,MAAM,OAAO,CAClB,MAAc,EACd,GAAW,EACX,SAAgB,EAAE,EAAA;QAElB,MAAM,EAAE,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC;QAC3C,MAAM,MAAM,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;AACnC,QAAA,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC;AAC3B,QAAA,OAAO,MAAM;;AAGR,IAAA,eAAe,CAAC,MAAc,EAAA;AACnC,QAAA,IAAI,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;YAC1B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE;AAC9B,YAAA,OAAO,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC;AAC7B,YAAA,IAAI,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE;gBAC3B,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;AACrC,gBAAA,OAAO,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC;;;;AAIrC;;ACpDD,MAAM,MAAM,GAAG,KAAK,CAAC,mBAAmB,CAAC;AAE5B,MAAA,MAAM,GAAG,OAAO,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,GAAG,CAAC,KAAI;IACrE,MAAM,eAAe,GAAuB,EAAE;AAG9C,IAAA,MAAM,gBAAgB,GAAG,MAAM,mBAAmB,EAAE;;;IAIpD,MAAM,YAAY,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;QACzD,gBAAgB,CAAC,MAAM,EAAE;YACvB,IAAI;YACJ,GAAG;AACH,YAAA,IAAI,EAAE,MAAM;AACZ,YAAA,QAAQ,EAAE,CAAC,MAAM,KAAI;;AAEnB,gBAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;oBAC/C,MAAM,YAAY,GAAG,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;AAyBvB,oBAAA,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE;;;;;;;;AAQrC,wBAAA,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;;oBAEhC,OAAO,CAAC,YAAY,CAAC;;qBAChB;;AAEL,oBAAA,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;;aAE/B;AACF,SAAA,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,KAAI;YACvB,MAAM,CAAC,KAAK,CAAC;AACf,SAAC,CAAC;AACJ,KAAC,CAAC;;;IAKF,OAAO,YAAY,IAAI,EAAE;AAC3B;AAEA,MAAM,EAAG,SAAQ,MAAM,CAAA;AACrB,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;;AAGT,IAAA,OAAO,QAAQ,GAAA;QACb,OAAO,QAAQ,EAAE;;AAGnB,IAAA,OAAO,YAAY,GAAA;QACjB,OAAO,YAAY,EAAE;;IAGvB,OAAO,SAAS,CAAC,QAAgB,EAAA;QAE/B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AAErC,YAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAK;;;AAGhC,gBAAA,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,gBAAgB,KAAI;oBAE9C,IAAI,gBAAgB,EAAE;wBACpB,aAAa,CAAC,QAAQ,CAAC;AACvB,wBAAA,MAAM,OAAO,GAAG,IAAI,uBAAuB,CAAC,gBAAgB,CAAC;wBAC7D,OAAO,CAAC,OAAO,CAAC;;AAEpB,iBAAC,CAAC;aAEH,EAAE,GAAG,CAAC;AACT,SAAC,CAAC;;AAGJ,IAAA,OAAO,WAAW,CAAC,SAAiB,EAAE,MAAc,EAAA;QAElD,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACrC,YAAA,MAAM,QAAQ,GAAG,WAAW,CAAC,MAAK;;;AAIhC,gBAAA,mBAAmB,EAAE,CAAC,IAAI,CAAC,CAAC,gBAAgB,KAAI;oBAE9C,IAAI,CAAC,gBAAgB,EAAE;wBACrB;;;oBAIF,gBAAgB,CAAC,YAAY,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,KAAI;wBACnD,MAAM,CAAC,QAAQ,CAAC;wBAChB,MAAM,CAAC,yBAAyB,EAAE,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;;wBAGrE,gBAAgB,CAAC,MAAM,EAAE;AACvB,4BAAA,QAAQ,EAAE,CAAA,KAAA,EAAQ,SAAS,CAAA,IAAA,EAAO,MAAM,CAAmB,iBAAA,CAAA;AAC5D,yBAAA,CAAC,CAAC,IAAI,CAAC,CAAC,QAAwD,KAAI;4BAEnE,MAAM,CAAC,QAAQ,CAAC;AAChB,4BAAA,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI;AAC1B,4BAAA,MAAM,CACJ,kDAAkD,EAClD,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,wBAAwB,EAAE,IAAI,CAAC,CACjE;4BAED,IAAI,IAAI,EAAE;gCACR,aAAa,CAAC,QAAQ,CAAC;gCACvB,OAAO,CAAC,IAAI,CAAC;;AAEjB,yBAAC,CAAC;AACJ,qBAAC,CAAC;AACJ,iBAAC,CAAC;aACH,EAAE,GAAG,CAAC;AACT,SAAC,CAAC;;IAGJ,aAAa,OAAO,CAAC,WAAmB,EAAE,MAAc,EAAE,IAAY,EAAA;AAEpE,QAAA,MAAM,gBAAgB,GAAG,CAAG,EAAA,kBAAkB,WAAW;AAEzD,QAAA,MAAM,SAAS,GAAG,OAAO,CACvB,OAAO,GAAG,EAAE,MAAM,EAAE,MAAM,KAAI;AAC5B,YAAA,IAAI;;;;;AAMF,gBAAA,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,CAAC;;;;;AAQ3D,gBAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE;;YAC5B,OAAO,CAAM,EAAE;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACpE,gBAAA,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;;AAEvB,SAAC,EACD;AACE,YAAA,MAAM,EAAE,gBAAgB;;AAEzB,SAAA,CACF;AAED,QAAA,IAAI;YACF,MAAM,UAAU,GAAG,kBAAkB,CAAC;AACpC,gBAAA,gBAAgB,EAAE,WAAW;AAC9B,aAAA,CAAC;AAEF,YAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,gBAAA,MAAM,uBAAuB,GAAG,UAAU,CAAC,GAAG,CAC5C,CAAC,SAAS,KAAK,SAAS,CAAC,IAAI,CAC9B;AAED,gBAAA,IAAI,uBAAuB;gBAC3B,IAAI,IAAI,GAAG,EAAE;AAEb,gBAAA,IAAI;oBACF,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,CAC/B,GAAG,CAAC,GAAG,CACL,CAAA;AACiC,8CAAA,CAAA,CAClC,CACF;AAED,oBAAA,IAAI,GAAG,KAAK,CAAC,IAAI;;gBACjB,OAAO,CAAC,EAAE;oBACV,IAAI,GAAG,EAAE;;gBAGX,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,oBAAA,uBAAuB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;;gBAGrD,IAAI,uBAAuB,EAAE;oBAC3B,IAAI,eAAe,GAAG,KAAK;AAC3B,oBAAA,KAAK,MAAM,YAAY,IAAI,uBAAuB,EAAE;wBAClD,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;4BACnD,eAAe,GAAG,IAAI;4BACtB;;;oBAGJ,IAAI,eAAe,EAAE;AACnB,wBAAA,MAAM,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAG,EAAA,WAAW,CAAI,CAAA,EAAA,MAAM,CAAU,QAAA,CAAA,CAAC;;;;YAKlE,MAAMA,OAAc,CAClB,SAAS,EACT,OAAO,YAAY,KAAI;;AAErB,gBAAA,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE;;oBAEhC,MAAM,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;;AAEvC,aAAC,EACD;AACE,gBAAA,gBAAgB,EAAE,WAAW;AAC9B,aAAA,CACF;;QACD,OAAO,KAAK,EAAE;;;;;;;;;AAUd,YAAA,MAAM,WAAW,CAAC,CAAA,EAAG,WAAW,CAAA,mBAAA,CAAqB,CAAC;YAEtD,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAC;;QAIzC,QAAQ,CAAC,SAAS,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA0DtB;AAED,MAAM,CAAC,gBAAgB,CAAC,EAAE,CAAC;;;;"}
|