@seedprotocol/sdk 0.2.45 → 0.2.46

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 (80) hide show
  1. package/dist/{Db-BlgPVb_Z.js → Db-5C5VqRWb.js} +5 -2
  2. package/dist/Db-5C5VqRWb.js.map +1 -0
  3. package/dist/{Db-gw_uZA_e.js → Db-Dv890NJZ.js} +4 -3
  4. package/dist/{Db-gw_uZA_e.js.map → Db-Dv890NJZ.js.map} +1 -1
  5. package/dist/{FileManager-BNqJl6Bz.js → FileManager-AhAsy_F_.js} +20 -7
  6. package/dist/{FileManager-BNqJl6Bz.js.map → FileManager-AhAsy_F_.js.map} +1 -1
  7. package/dist/{Item-BO38NUjz.js → Item-BmPvgaG4.js} +4 -3
  8. package/dist/{Item-BO38NUjz.js.map → Item-BmPvgaG4.js.map} +1 -1
  9. package/dist/{ItemProperty-8H7B05zy.js → ItemProperty-BW4k1h0o.js} +4 -3
  10. package/dist/{ItemProperty-8H7B05zy.js.map → ItemProperty-BW4k1h0o.js.map} +1 -1
  11. package/dist/{index-CsbUKGXp.js → index-CGeSKilQ.js} +189 -144
  12. package/dist/index-CGeSKilQ.js.map +1 -0
  13. package/dist/{index-Km3L1_LR.js → index-CPxn1SR4.js} +4 -3
  14. package/dist/index-CPxn1SR4.js.map +1 -0
  15. package/dist/main.js +3 -2
  16. package/dist/main.js.map +1 -1
  17. package/dist/{seed.schema.config-Dn_1QbD7.js → seed.schema.config-BXWvwsZQ.js} +10 -9
  18. package/dist/seed.schema.config-BXWvwsZQ.js.map +1 -0
  19. package/dist/src/BaseItem.ts +1 -1
  20. package/dist/src/BaseItemProperty.ts +7 -6
  21. package/dist/src/actors.ts +1 -1
  22. package/dist/src/client.ts +12 -0
  23. package/dist/src/configureFs.ts +1 -1
  24. package/dist/src/createMetadata.ts +11 -4
  25. package/dist/src/download.ts +1 -1
  26. package/dist/src/files.ts +15 -4
  27. package/dist/src/getItemProperties.ts +9 -19
  28. package/dist/src/getPublishPayload.ts +15 -8
  29. package/dist/src/getPublishUploads.ts +1 -1
  30. package/dist/src/gql.ts +9 -4
  31. package/dist/src/graphql.ts +12 -4
  32. package/dist/src/helpers.ts +14 -3
  33. package/dist/src/hydrateFromDb.ts +1 -1
  34. package/dist/src/metadataLatest.ts +34 -0
  35. package/dist/src/migrate.ts +1 -1
  36. package/dist/src/property.ts +10 -7
  37. package/dist/src/resolveRelatedValue.ts +1 -1
  38. package/dist/src/resolveRemoteStorage.ts +1 -1
  39. package/dist/src/saveImageSrc.ts +2 -2
  40. package/dist/src/saveItemStorage.ts +1 -1
  41. package/dist/src/updateItemPropertyValue.ts +1 -1
  42. package/dist/src/validate.ts +1 -1
  43. package/dist/src/waitForDb.ts +12 -9
  44. package/dist/types/src/Item/queries.d.ts +2 -2
  45. package/dist/types/src/Item/queries.d.ts.map +1 -1
  46. package/dist/types/src/Item/service/actors/fetchDataFromEas.d.ts +1 -2
  47. package/dist/types/src/Item/service/actors/fetchDataFromEas.d.ts.map +1 -1
  48. package/dist/types/src/Item/service/actors/waitForDb.d.ts +3 -1
  49. package/dist/types/src/Item/service/actors/waitForDb.d.ts.map +1 -1
  50. package/dist/types/src/ItemProperty/BaseItemProperty.d.ts +1 -1
  51. package/dist/types/src/ItemProperty/BaseItemProperty.d.ts.map +1 -1
  52. package/dist/types/src/ItemProperty/service/actors/waitForDb.d.ts.map +1 -1
  53. package/dist/types/src/ItemProperty/service/propertyMachine.d.ts +6 -6
  54. package/dist/types/src/browser/db/Db.d.ts.map +1 -1
  55. package/dist/types/src/browser/helpers/FileManager.d.ts.map +1 -1
  56. package/dist/types/src/browser/react/property.d.ts +1 -1
  57. package/dist/types/src/browser/react/property.d.ts.map +1 -1
  58. package/dist/types/src/client.d.ts +1 -0
  59. package/dist/types/src/client.d.ts.map +1 -1
  60. package/dist/types/src/db/read/getItemProperties.d.ts.map +1 -1
  61. package/dist/types/src/db/read/getPublishPayload.d.ts.map +1 -1
  62. package/dist/types/src/db/read/subqueries/metadataLatest.d.ts +5 -0
  63. package/dist/types/src/db/read/subqueries/metadataLatest.d.ts.map +1 -0
  64. package/dist/types/src/db/write/createMetadata.d.ts.map +1 -1
  65. package/dist/types/src/graphql/gql/gql.d.ts +12 -5
  66. package/dist/types/src/graphql/gql/gql.d.ts.map +1 -1
  67. package/dist/types/src/graphql/gql/graphql.d.ts +31 -15
  68. package/dist/types/src/graphql/gql/graphql.d.ts.map +1 -1
  69. package/dist/types/src/helpers/files.d.ts.map +1 -1
  70. package/dist/types/src/schema/file/queries.d.ts.map +1 -1
  71. package/dist/types/src/schema/model/index.d.ts.map +1 -1
  72. package/dist/types/src/services/global/globalMachine.d.ts +90 -90
  73. package/dist/types/src/services/internal/helpers.d.ts.map +1 -1
  74. package/package.json +3 -3
  75. package/dist/Db-BlgPVb_Z.js.map +0 -1
  76. package/dist/index-CsbUKGXp.js.map +0 -1
  77. package/dist/index-Km3L1_LR.js.map +0 -1
  78. package/dist/seed.schema.config-Dn_1QbD7.js.map +0 -1
  79. package/dist/types/src/Item/service/actors/saveDataToDb.d.ts +0 -3
  80. package/dist/types/src/Item/service/actors/saveDataToDb.d.ts.map +0 -1
@@ -1,4 +1,4 @@
1
- import { b as BaseDb, w as waitForFile } from './index-CsbUKGXp.js';
1
+ import { b as BaseDb, w as waitForFile } from './index-CGeSKilQ.js';
2
2
  import { sql } from 'drizzle-orm';
3
3
  import debug from 'debug';
4
4
  import fs from '@zenfs/core';
@@ -21,6 +21,7 @@ import 'node:fs';
21
21
  import 'path';
22
22
  import 'arweave';
23
23
  import 'rxjs';
24
+ import 'drizzle-orm/casing';
24
25
  import '@ethereum-attestation-service/eas-sdk';
25
26
  import 'react';
26
27
  import 'use-immer';
@@ -265,6 +266,8 @@ class Db extends BaseDb {
265
266
  // logger: true,
266
267
  });
267
268
  try {
269
+ const filesInRoot = await fs.promises.readdir('/');
270
+ logger('filesInRoot', filesInRoot);
268
271
  const migrations = readMigrationFiles({
269
272
  migrationsFolder: pathToDbDir,
270
273
  });
@@ -378,4 +381,4 @@ class Db extends BaseDb {
378
381
  BaseDb.setPlatformClass(Db);
379
382
 
380
383
  export { Db, dbExec };
381
- //# sourceMappingURL=Db-BlgPVb_Z.js.map
384
+ //# sourceMappingURL=Db-5C5VqRWb.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Db-5C5VqRWb.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 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\n const filesInRoot = await fs.promises.readdir('/')\n logger('filesInRoot', filesInRoot)\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\n const queryMigrationsTable = await drizzleDb.run(\n sql.raw(\n `SELECT name \n FROM sqlite_master \n WHERE type='table' \n AND name='__drizzle_migrations';`,\n ),\n )\n\n logger('queryMigrationsTable', queryMigrationsTable)\n\n if (queryMigrationsTable && queryMigrationsTable.rows && queryMigrationsTable.rows.length > 0) {\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 }\n\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\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,4 +1,4 @@
1
- import { b as BaseDb } from './index-CsbUKGXp.js';
1
+ import { b as BaseDb } from './index-CGeSKilQ.js';
2
2
  import { defineConfig } from 'drizzle-kit';
3
3
  import dotenv from 'dotenv';
4
4
  import process from 'node:process';
@@ -11,6 +11,7 @@ import '@sinclair/typebox';
11
11
  import 'xstate';
12
12
  import './constants-Dgv-tSO3.js';
13
13
  import '@ethereum-attestation-service/eas-sdk';
14
+ import 'debug';
14
15
  import 'pluralize';
15
16
  import 'drizzle-orm/sqlite-core';
16
17
  import 'drizzle-orm';
@@ -18,12 +19,12 @@ import 'eventemitter3';
18
19
  import 'nanoid';
19
20
  import 'nanoid-dictionary';
20
21
  import '@zenfs/core';
21
- import 'debug';
22
22
  import 'lodash-es';
23
23
  import '@statelyai/inspect';
24
24
  import 'node:fs';
25
25
  import 'arweave';
26
26
  import 'rxjs';
27
+ import 'drizzle-orm/casing';
27
28
  import 'react';
28
29
  import 'use-immer';
29
30
  import '@xstate/react';
@@ -105,4 +106,4 @@ class Db extends BaseDb {
105
106
  BaseDb.setPlatformClass(Db);
106
107
 
107
108
  export { Db };
108
- //# sourceMappingURL=Db-gw_uZA_e.js.map
109
+ //# sourceMappingURL=Db-Dv890NJZ.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Db-gw_uZA_e.js","sources":["../../src/node/db/node.app.db.config.ts","../../src/node/db/Db.ts"],"sourcesContent":["import { defineConfig } from 'drizzle-kit'\nimport dotenv from 'dotenv'\nimport process from 'node:process'\nimport path from 'path'\nimport { DrizzleConfig } from 'drizzle-orm'\n\ndotenv.config()\n\nlet sdkRoot = './node_modules/@seedprotocol/sdk'\n\nif (process.env.IS_SEED_DEV) {\n sdkRoot = './src'\n}\n\nlet dotSeedDir = path.join(process.cwd(), '.seed')\n\nif (process.env.IS_SEED_DEV) {\n dotSeedDir = path.join(\n process.cwd(),\n '__tests__',\n '__mocks__',\n 'browser',\n 'project',\n '.seed',\n )\n}\n\nlet schemaDir = `${sdkRoot}/dist/seedSchema/*.ts`\n\nif (process.env.IS_SEED_DEV) {\n schemaDir = `${sdkRoot}/seedSchema/*.ts`\n}\n\nexport default defineConfig({\n schema: schemaDir,\n dialect: 'sqlite',\n out: `${dotSeedDir}/db`,\n dbCredentials: {\n url: `${dotSeedDir}/db/app_db.sqlite3`,\n },\n}) as DrizzleConfig\n","import { BaseDb } from \"@/db/Db/BaseDb\";\nimport { IDb } from \"@/interfaces\";\nimport nodeAppDbConfig from \"./node.app.db.config\";\nimport { drizzle } from \"drizzle-orm/better-sqlite3\";\nimport { defineConfig, } from \"drizzle-kit\";\nimport path from \"path\";\nimport { DrizzleConfig, } from \"drizzle-orm\";\nimport Database from \"better-sqlite3\";\n\nconst getConfig = (filesDir: string) => {\n\n const dotSeedDir = path.join(filesDir, '.seed')\n let schemaDir = `${dotSeedDir}/schema/*Schema.ts`\n\n const nodeDbConfig = defineConfig({\n schema: schemaDir,\n dialect: 'sqlite',\n out: `${dotSeedDir}/db`,\n dbCredentials: {\n url: `${dotSeedDir}/db/app_db.sqlite3`,\n }\n }) as DrizzleConfig & { dbCredentials: { url: string } }\n\n return nodeDbConfig\n}\n\nclass Db extends BaseDb implements IDb {\n constructor() {\n super()\n }\n\n static getAppDb() {\n return drizzle(nodeAppDbConfig)\n }\n\n static isAppDbReady() {\n return true\n }\n\n static async prepareDb(filesDir: string) {\n const nodeDbConfig = getConfig(filesDir)\n\n let db\n\n try {\n db = drizzle(nodeDbConfig)\n } catch (error) {\n console.error(error)\n }\n\n try {\n const client = new Database(nodeDbConfig.dbCredentials.url)\n db = drizzle({ client })\n } catch (error) {\n console.error(error)\n }\n\n return db\n }\n\n static async connectToDb(pathToDir: string, dbName: string) {\n\n const nodeDbConfig = getConfig(pathToDir)\n\n return {\n id: drizzle(nodeDbConfig).$client.name\n }\n }\n\n static async migrate(pathToDbDir: string, dbName: string, dbId: string) {\n const nodeDbConfig = getConfig(pathToDbDir)\n return drizzle(nodeDbConfig)\n }\n}\n\nBaseDb.setPlatformClass(Db)\n\nexport { Db }"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"Db-Dv890NJZ.js","sources":["../../src/node/db/node.app.db.config.ts","../../src/node/db/Db.ts"],"sourcesContent":["import { defineConfig } from 'drizzle-kit'\nimport dotenv from 'dotenv'\nimport process from 'node:process'\nimport path from 'path'\nimport { DrizzleConfig } from 'drizzle-orm'\n\ndotenv.config()\n\nlet sdkRoot = './node_modules/@seedprotocol/sdk'\n\nif (process.env.IS_SEED_DEV) {\n sdkRoot = './src'\n}\n\nlet dotSeedDir = path.join(process.cwd(), '.seed')\n\nif (process.env.IS_SEED_DEV) {\n dotSeedDir = path.join(\n process.cwd(),\n '__tests__',\n '__mocks__',\n 'browser',\n 'project',\n '.seed',\n )\n}\n\nlet schemaDir = `${sdkRoot}/dist/seedSchema/*.ts`\n\nif (process.env.IS_SEED_DEV) {\n schemaDir = `${sdkRoot}/seedSchema/*.ts`\n}\n\nexport default defineConfig({\n schema: schemaDir,\n dialect: 'sqlite',\n out: `${dotSeedDir}/db`,\n dbCredentials: {\n url: `${dotSeedDir}/db/app_db.sqlite3`,\n },\n}) as DrizzleConfig\n","import { BaseDb } from \"@/db/Db/BaseDb\";\nimport { IDb } from \"@/interfaces\";\nimport nodeAppDbConfig from \"./node.app.db.config\";\nimport { drizzle } from \"drizzle-orm/better-sqlite3\";\nimport { defineConfig, } from \"drizzle-kit\";\nimport path from \"path\";\nimport { DrizzleConfig, } from \"drizzle-orm\";\nimport Database from \"better-sqlite3\";\n\nconst getConfig = (filesDir: string) => {\n\n const dotSeedDir = path.join(filesDir, '.seed')\n let schemaDir = `${dotSeedDir}/schema/*Schema.ts`\n\n const nodeDbConfig = defineConfig({\n schema: schemaDir,\n dialect: 'sqlite',\n out: `${dotSeedDir}/db`,\n dbCredentials: {\n url: `${dotSeedDir}/db/app_db.sqlite3`,\n }\n }) as DrizzleConfig & { dbCredentials: { url: string } }\n\n return nodeDbConfig\n}\n\nclass Db extends BaseDb implements IDb {\n constructor() {\n super()\n }\n\n static getAppDb() {\n return drizzle(nodeAppDbConfig)\n }\n\n static isAppDbReady() {\n return true\n }\n\n static async prepareDb(filesDir: string) {\n const nodeDbConfig = getConfig(filesDir)\n\n let db\n\n try {\n db = drizzle(nodeDbConfig)\n } catch (error) {\n console.error(error)\n }\n\n try {\n const client = new Database(nodeDbConfig.dbCredentials.url)\n db = drizzle({ client })\n } catch (error) {\n console.error(error)\n }\n\n return db\n }\n\n static async connectToDb(pathToDir: string, dbName: string) {\n\n const nodeDbConfig = getConfig(pathToDir)\n\n return {\n id: drizzle(nodeDbConfig).$client.name\n }\n }\n\n static async migrate(pathToDbDir: string, dbName: string, dbId: string) {\n const nodeDbConfig = getConfig(pathToDbDir)\n return drizzle(nodeDbConfig)\n }\n}\n\nBaseDb.setPlatformClass(Db)\n\nexport { Db }"],"names":[],"mappings":"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"}
@@ -1,25 +1,25 @@
1
1
  import { c as BaseFileManager } from './constants-Dgv-tSO3.js';
2
- import fs, { fs as fs$1, configureSingle } from '@zenfs/core';
3
- import { s as saveAppState } from './index-CsbUKGXp.js';
4
- import { WebAccess } from '@zenfs/dom';
2
+ import { s as saveAppState } from './index-CGeSKilQ.js';
3
+ import fs from '@zenfs/core';
5
4
  import '@ethereum-attestation-service/eas-sdk';
6
5
  import 'immer';
7
6
  import 'reflect-metadata';
8
7
  import '@sinclair/typebox';
9
8
  import 'xstate';
9
+ import 'debug';
10
10
  import 'pluralize';
11
11
  import 'drizzle-orm/sqlite-core';
12
12
  import 'drizzle-orm';
13
13
  import 'eventemitter3';
14
14
  import 'nanoid';
15
15
  import 'nanoid-dictionary';
16
- import 'debug';
17
16
  import 'lodash-es';
18
17
  import '@statelyai/inspect';
19
18
  import 'node:fs';
20
19
  import 'path';
21
20
  import 'arweave';
22
21
  import 'rxjs';
22
+ import 'drizzle-orm/casing';
23
23
  import 'react';
24
24
  import 'use-immer';
25
25
  import '@xstate/react';
@@ -748,15 +748,28 @@ class FileManager extends BaseFileManager {
748
748
  });
749
749
  }
750
750
  static async getContentUrlFromPath(path) {
751
- const fileExists = await fs$1.promises.exists(path);
751
+ const fs = await import('@zenfs/core');
752
+ const fileExists = await fs.promises.exists(path);
752
753
  if (fileExists) {
753
- const fileContents = await fs$1.promises.readFile(path);
754
+ const fileContents = await fs.promises.readFile(path);
754
755
  const fileHandler = new File([fileContents], path);
755
756
  return URL.createObjectURL(fileHandler);
756
757
  }
757
758
  }
758
759
  static async initializeFileSystem() {
760
+ const { WebAccess } = await import('@zenfs/dom');
761
+ const { configureSingle } = await import('@zenfs/core');
759
762
  const handle = await navigator.storage.getDirectory();
763
+ // await configure({
764
+ // mounts: {
765
+ // '/': {
766
+ // backend: WebAccess,
767
+ // handle,
768
+ // },
769
+ // },
770
+ // disableUpdateOnRead: true,
771
+ // onlySyncOnClose: true,
772
+ // })
760
773
  await configureSingle({
761
774
  backend: WebAccess,
762
775
  handle,
@@ -778,4 +791,4 @@ class FileManager extends BaseFileManager {
778
791
  BaseFileManager.setPlatformClass(FileManager);
779
792
 
780
793
  export { FileManager };
781
- //# sourceMappingURL=FileManager-BNqJl6Bz.js.map
794
+ //# sourceMappingURL=FileManager-AhAsy_F_.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileManager-BNqJl6Bz.js","sources":["../../src/browser/workers/filesDownload.ts","../../src/browser/workers/FileDownloader.ts","../../src/browser/workers/imageResize.ts","../../src/browser/workers/ImageResizer.ts","../../src/browser/helpers/FileManager.ts"],"sourcesContent":["\nexport default `(\n ${\n function () {\n\nconst identifyString = (str: string) => {\n try {\n JSON.parse(str)\n return 'json'\n } catch (e) {\n // Not JSON\n }\n\n if (!str) {\n return\n }\n\n if (str.trim().startsWith('<') && str.trim().endsWith('>')) {\n return 'html'\n }\n\n // Simple markdown checks (very naive)\n if (/^#{1,6}\\s|^-{3,}|\\*{3,}|^-{1,2}\\s|\\*\\s/.test(str)) {\n return 'markdown'\n }\n\n if (/^data:image\\/[a-zA-Z]+;base64,[A-Za-z0-9+/]+={0,2}$/.test(str)) {\n return 'base64'\n }\n\n // Default to plain text if unsure\n return 'text'\n}\n\nconst getMimeType = (base64: string) => {\n if (!base64) {\n return null\n }\n const result = base64.match(/^data:([a-zA-Z0-9]+\\/[a-zA-Z0-9-.+]+).*,/)\n\n if (result && result.length > 1) {\n return result[1]\n } else {\n return null // MIME type could not be determined\n }\n}\n\nconst getDataTypeFromString = (\n data: string,\n): 'imageBase64' | 'base64' | 'url' | null => {\n const nonImageBase64Regex =\n /^(?!data:image\\/(?:jpeg|png|gif|bmp|webp);base64,)[A-Za-z0-9+/=]+$/\n\n if (nonImageBase64Regex.test(data)) {\n return 'base64'\n }\n\n // Regular expression for base64 (simple version, checking for base64 format)\n const imageBase64Regex = /^data:image\\/[a-zA-Z]+;base64,[A-Za-z0-9+/]+={0,2}$/\n\n if (imageBase64Regex.test(data)) {\n return 'imageBase64'\n }\n\n // Regular expression for URL (simple version, checking for common URL format)\n const urlRegex =\n /^(http:\\/\\/www\\.|https:\\/\\/www\\.|http:\\/\\/|https:\\/\\/)?[a-z0-9]+([\\-\\.]{1}[a-z0-9]+)*\\.[a-z]{2,5}(:[0-9]{1,5})?(\\/.*)?$/\n\n if (urlRegex.test(data)) {\n return 'url'\n }\n\n return null\n}\n\nconst isBinary = (arrayBuffer: ArrayBuffer): boolean => {\n const view = new Uint8Array(arrayBuffer);\n\n let nonTextCount = 0;\n const threshold = 0.2; // Adjust as needed (e.g., 20% non-text implies binary)\n\n for (let i = 0; i < view.length; i++) {\n const byte = view[i];\n\n // ASCII printable characters (32-126) and common whitespace (9, 10, 13)\n if (\n (byte >= 32 && byte <= 126) || // Printable ASCII\n byte === 9 || byte === 10 || byte === 13 // Tab, LF, CR\n ) {\n continue;\n }\n\n nonTextCount++;\n if (nonTextCount / view.length > threshold) {\n return true; // More than threshold are non-text bytes\n }\n }\n\n return false; // Fewer than threshold are non-text bytes\n}\n\nconst saveBufferToOPFS = async (filePath: string, buffer: Uint8Array): Promise<void> => {\n // Access the OPFS root directory\n const rootHandle = await navigator.storage.getDirectory();\n\n // Split the filePath into directory segments and file name\n const segments = filePath.split('/').filter(Boolean);\n const fileName = segments.pop(); // Extract the file name\n if (!fileName) {\n throw new Error('Invalid file path: No file name provided.');\n }\n\n // Traverse or create directories as needed\n let currentDirHandle = rootHandle;\n for (const segment of segments) {\n currentDirHandle = await currentDirHandle.getDirectoryHandle(segment, { create: true });\n }\n\n // Create or open the file in OPFS\n const fileHandleAsync = await currentDirHandle.getFileHandle(fileName, { create: true });\n const fileHandle = await fileHandleAsync.createSyncAccessHandle();\n // Write the buffer to the file\n fileHandle.write(buffer);\n fileHandle.flush();\n fileHandle.close();\n}\n\nconst downloadFiles = async ({\n transactionIds,\n arweaveHost,\n}: {\n transactionIds: string[],\n arweaveHost: string,\n}) => {\n\n let arrayBuffer: ArrayBuffer | undefined\n\n for (const transactionId of transactionIds) {\n try {\n const response = await fetch(`https://${arweaveHost}/raw/${transactionId}`);\n\n arrayBuffer = await response.arrayBuffer();\n } catch(error) {\n console.log(`[filesDownload] transaction ${transactionId} data not found`, error)\n globalThis.postMessage({\n message: 'excludeTransaction',\n transactionId,\n })\n continue\n }\n\n let dataString\n const isBinaryData = isBinary(arrayBuffer)\n\n if (!isBinaryData) {\n const decoder = new TextDecoder('utf-8')\n const text = decoder.decode(arrayBuffer)\n dataString = text\n }\n\n if (!dataString && !arrayBuffer) {\n console.log(\n `[filesDownload] transaction ${transactionId} data not found`,\n )\n }\n\n if (dataString && dataString.startsWith('===FILE_SEPARATOR===')) {\n const dataStringParts = dataString\n .split('===FILE_SEPARATOR===')\n .slice(1)\n\n if (dataStringParts.length % 2 !== 0) {\n throw new Error('Input array must have an even number of elements.')\n }\n\n for (let i = 0; i < dataStringParts.length; i += 2) {\n const contentType = dataStringParts[i]\n const content = dataStringParts[i + 1]\n const encoder = new TextEncoder()\n if (contentType === 'html') {\n const fileName = `${transactionId}.html`\n const buffer = encoder.encode(content)\n saveBufferToOPFS(`/files/html/${fileName}`, buffer)\n }\n if (contentType === 'json') {\n const fileName = `${transactionId}.json`\n const buffer = encoder.encode(content)\n saveBufferToOPFS(`/files/json/${fileName}`, buffer)\n }\n }\n\n continue\n }\n\n if (!dataString && arrayBuffer) {\n saveBufferToOPFS(\n `/files/images/${transactionId}`,\n new Uint8Array(arrayBuffer),\n )\n continue\n }\n\n if (!dataString) {\n continue\n }\n\n let contentType = identifyString(dataString)\n\n if (\n contentType !== 'json' &&\n contentType !== 'base64' &&\n contentType !== 'html'\n ) {\n const possibleImageType = getDataTypeFromString(dataString)\n if (!possibleImageType) {\n console.log(\n `[filesDownload] transaction ${transactionId} data not in expected format: ${possibleImageType}`,\n )\n continue\n }\n\n contentType = possibleImageType\n }\n\n if (contentType === 'url') {\n const url = dataString as string\n\n let buffer: ArrayBuffer | undefined\n\n try {\n const response = await fetch(url)\n \n buffer = await response.arrayBuffer()\n\n } catch(error) {\n console.log(`[filesDownload] transaction ${transactionId} value was url: ${dataString} but failed to fetch`, error)\n globalThis.postMessage({\n message: 'excludeTransaction',\n transactionId,\n })\n continue\n }\n\n const bufferUint8Array = new Uint8Array(buffer)\n\n // Extract the file extension from the URL\n const extensionMatch = url.match(/\\.(jpg|jpeg|png|gif|bmp|webp|svg)$/i)\n if (!extensionMatch) {\n throw new Error(\n 'Unable to determine the file extension from the URL.',\n )\n }\n const fileExtension = extensionMatch[0] // e.g., \".jpg\"\n\n // Set the file name (you can customize this)\n // const fileNameFromUrl = `${transactionId}${fileExtension}`\n\n await saveBufferToOPFS(\n `/files/images/${transactionId}`,\n bufferUint8Array,\n )\n\n continue\n }\n\n const mimeType = getMimeType(dataString as string)\n let fileExtension = mimeType\n\n if (fileExtension && fileExtension?.startsWith('image')) {\n fileExtension = fileExtension.replace('image/', '')\n }\n\n let fileName = transactionId\n\n if (contentType === 'base64') {\n if (fileExtension) {\n fileName += `.${fileExtension}`\n }\n\n // Remove the Base64 header if it exists (e.g., \"data:image/png;base64,\")\n const base64Data = dataString.split(',').pop() || ''\n\n // Decode the Base64 string to binary\n const binaryString = atob(base64Data)\n const length = binaryString.length\n const binaryData = new Uint8Array(length)\n\n for (let i = 0; i < length; i++) {\n binaryData[i] = binaryString.charCodeAt(i)\n }\n\n await saveBufferToOPFS(`/files/images/${fileName}`, binaryData)\n\n }\n\n if (contentType === 'html') {\n fileName += '.html'\n const encoder = new TextEncoder()\n const buffer = encoder.encode(dataString)\n await saveBufferToOPFS(`/files/html/${fileName}`, buffer)\n }\n\n if (contentType === 'json') {\n fileName += '.json'\n const encoder = new TextEncoder()\n const buffer = encoder.encode(dataString)\n await saveBufferToOPFS(`/files/json/${fileName}`, buffer)\n }\n }\n}\n\nonmessage = async (e) => {\n console.log({\n message: 'filesDownload onmessage',\n data: e.data,\n })\n await downloadFiles(e.data);\n globalThis.postMessage({\n message: 'filesDownload onmessage done',\n done: true,\n })\n \n}\n}.toString()\n}\n)()`","import { saveAppState } from '@/db/write/saveAppState.js';\nimport filesDownload from './filesDownload.js'\n\n\n\nexport class FileDownloader {\n private cores: number\n private workersArchive: Worker[] = []\n private workerBlobUrl: string\n\n constructor() {\n this.cores = Math.min(navigator.hardwareConcurrency || 4, 4);\n\n this.workerBlobUrl = globalThis.URL.createObjectURL(\n new Blob([filesDownload], { type: 'application/javascript' })\n )\n }\n\n public downloadAll = async ({transactionIds, arweaveHost, excludedTransactions}: DownloadAllFilesParams): Promise<void> => {\n\n if (this.workersArchive.length > 0) {\n for (let i = 0; i < this.workersArchive.length; i++) {\n this.workersArchive[i].terminate()\n delete this.workersArchive[i]\n }\n this.workersArchive = []\n }\n\n const worker = new Worker(this.workerBlobUrl);\n\n this.workersArchive.push(worker)\n\n const localExcludedTransactions = new Set(excludedTransactions)\n\n return new Promise((resolve, reject) => {\n worker.onmessage = (e) => {\n console.log('filesDownload main thread onmessage', e.data);\n\n if (e.data.message === 'excludeTransaction') {\n localExcludedTransactions.add(e.data.transactionId)\n }\n\n if (e.data.done) {\n saveAppState('excludedTransactions', JSON.stringify(Array.from(localExcludedTransactions)))\n .then(() => {\n resolve(e.data)\n })\n .catch((error) => {\n reject(error)\n })\n }\n if (e.data.error) {\n reject(e.data.error)\n }\n }\n \n worker.postMessage({\n transactionIds,\n arweaveHost,\n });\n })\n }\n}\n","import path from \"path\";\n\ntype BrowserImageResizerConfigBase = {\n\t/**\n\t * Algorithm used for downscaling\n\t * \n\t * * `null`: Just resize with `drawImage()`. The best quality and fastest.\n\t * * `bilinear`: Better quality, slower. Comes from upstream (ericnogralesbrowser-image-resizer).\n\t * * `hermite`: Worse quality, faster. Comes from [viliusle/Hermite-resize](https://github.com/viliusle/Hermite-resize). Will dispatch workers for better performance.\n\t * * `hermite_single`: Worse quality, faster. Single-threaded.\n\t * \n\t * default: null\n\t */\n\talgorithm: 'bilinear' | 'hermite' | 'hermite_single' | 'null' | null;\n\n\t/**\n\t * Whether to process downscaling by `drawImage(source, 0, 0, source.width / 2, source.height / 2)`\n\t * until the size is smaller than twice the target size.\n\t *\n\t * There seems to be no situation where it is necessary to change to false.\n\t * \n\t * default: true\n\t */\n\tprocessByHalf: boolean;\n\n\tmaxWidth: number;\n\tmaxHeight: number;\n\tmaxSize?: number; // ???\n\n\t/**\n\t * Scale ratio. Strictly limited to maxWidth.\n\t */\n\tscaleRatio?: number;\n\n\t/**\n\t * Output logs to console\n\t */\n\tdebug: boolean;\n}\n\n\ntype BrowserImageResizerConfigWithConvertedOutput = BrowserImageResizerConfigBase & {\n\tquality: number;\n\tmimeType: string;\n};\n\ntype BrowserImageResizerConfigWithOffscreenCanvasOutput = BrowserImageResizerConfigBase & {\n\tmimeType: null;\n}\n\ntype BrowserImageResizerConfig = BrowserImageResizerConfigWithConvertedOutput | BrowserImageResizerConfigWithOffscreenCanvasOutput;\n\ntype WorkerSouceData = {\n source: ImageData;\n startY: number;\n height: number;\n}\n\nexport default `(\n ${\n function () {\n\nasync function listFilesInDirectory(directoryHandle: FileSystemDirectoryHandle) {\n const entries: { name: string; kind: FileSystemHandleKind }[] = [];\n\n for await (const [name, handle] of directoryHandle.entries()) {\n entries.push({\n name,\n kind: handle.kind,\n })\n }\n\n return entries;\n}\n\nconst getFileHandle = async (path: string, rootHandle: FileSystemDirectoryHandle | null = null): Promise<FileSystemFileHandle> => {\n // Split the path into segments\n const segments = path.split('/').filter(Boolean);\n\n // Start from the root directory if not provided\n if (!rootHandle) {\n rootHandle = await navigator.storage.getDirectory();\n }\n\n let currentHandle = rootHandle;\n\n // Traverse the path segments\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const isLastSegment = i === segments.length - 1;\n\n try {\n\n for await (const [name, handle] of currentHandle.entries()) {\n if (name !== segment) {\n continue\n }\n\n if (isLastSegment) {\n if (handle.kind === 'file') {\n return handle as FileSystemFileHandle; // Return the file handle if found\n } else {\n throw new Error(`Path '${path}' refers to a directory, not a file.`);\n }\n } else if (handle.kind === 'directory') {\n currentHandle = handle as FileSystemDirectoryHandle; // Traverse into the directory\n } else {\n throw new Error(`Invalid path segment '${segment}'`);\n }\n }\n } catch (err) {\n if (err instanceof Error && err.name === 'NotFoundError') {\n throw new Error(`Path '${path}' does not exist.`);\n } else {\n throw err;\n }\n }\n }\n\n throw new Error(`Path '${path}' could not be resolved.`);\n}\n\nasync function getFileFromOPFS(path: string): Promise<File> {\n\n const fileHandleAsync = await getFileHandle(path);\n const file = await fileHandleAsync.getFile();\n return file;\n\n}\n\nconst DEFAULT_CONFIG = {\n\targorithm: 'null',\n\tprocessByHalf: true,\n\tquality: 0.5,\n\tmaxWidth: 800,\n\tmaxHeight: 600,\n\tdebug: false,\n\tmimeType: 'image/jpeg',\n} as const;\n\nfunction isIos() {\n\tif (typeof navigator === 'undefined') return false;\n\tif (!navigator.userAgent) return false;\n\treturn /iPad|iPhone|iPod/.test(navigator.userAgent);\n}\n\nconst getTargetHeight = (srcHeight: number, scale: number, config: BrowserImageResizerConfig) => {\n\treturn Math.min(Math.floor(srcHeight * scale), config.maxHeight);\n}\n\nconst findMaxWidth = (config: BrowserImageResizerConfig, canvas: { width: number; height: number }) => {\n\t//Let's find the max available width for scaled image\n\tconst ratio = canvas.width / canvas.height;\n\tlet mWidth = Math.min(\n\t\tcanvas.width,\n\t\tconfig.maxWidth,\n\t\tratio * config.maxHeight\n\t);\n\tif (\n\t\tconfig.maxSize &&\n\t\tconfig.maxSize > 0 &&\n\t\tconfig.maxSize < (canvas.width * canvas.height) / 1000\n\t)\n\t\tmWidth = Math.min(\n\t\t\tmWidth,\n\t\t\tMath.floor((config.maxSize * 1000) / canvas.height)\n\t\t);\n\tif (!!config.scaleRatio)\n\t\tmWidth = Math.min(mWidth, Math.floor(config.scaleRatio * canvas.width));\n\n\tconst rHeight = getTargetHeight(canvas.height, mWidth / canvas.width, config);\n\n // console.log(\n // 'browser-image-resizer: original image size = ' +\n // canvas.width +\n // ' px (width) X ' +\n // canvas.height +\n // ' px (height)'\n // );\n // console.log(\n // 'browser-image-resizer: scaled image size = ' +\n // mWidth +\n // ' px (width) X ' +\n // rHeight +\n // ' px (height)'\n // );\n\tif (mWidth <= 0) {\n\t\tmWidth = 1;\n\t\tconsole.warn(\"browser-image-resizer: image size is too small\");\n\t}\n\n\tif (isIos() && mWidth * rHeight > 167777216) {\n\t\tconsole.error(\"browser-image-resizer: image size is too large for iOS WebKit.\", mWidth, rHeight);\n\t\tthrow new Error(\"browser-image-resizer: image size is too large for iOS WebKit.\");\n\t}\n\n\treturn mWidth;\n}\n\n /**\n * Hermite resize, multicore version - fast image resize/resample using Hermite filter.\n */\n const resample = (srcCanvas: OffscreenCanvas, destCanvas: OffscreenCanvas, config: { debug?: boolean }) => {\n return new Promise<void>((resolve, reject) => {\n\n const ratio_h = srcCanvas.height / destCanvas.height;\n const cores = Math.min(navigator.hardwareConcurrency || 4, 4)\n\n //prepare source and target data for workers\n const ctx = srcCanvas.getContext('2d');\n if (!ctx) return reject('Canvas is empty (resample)');\n\n const data_part: WorkerSouceData[] = [];\n const block_height = Math.ceil(srcCanvas.height / cores / 2) * 2;\n let end_y = -1;\n for (let c = 0; c < cores; c++) {\n //source\n const offset_y = end_y + 1;\n if (offset_y >= srcCanvas.height) {\n //size too small, nothing left for this core\n continue;\n }\n\n end_y = Math.min(offset_y + block_height - 1, srcCanvas.height - 1);\n\n const current_block_height = Math.min(block_height, srcCanvas.height - offset_y);\n\n console.log('browser-image-resizer: source split: ', '#' + c, offset_y, end_y, 'height: ' + current_block_height);\n\n data_part.push({\n source: ctx.getImageData(0, offset_y, srcCanvas.width, block_height),\n startY: Math.ceil(offset_y / ratio_h),\n height: current_block_height\n });\n }\n\n //start\n const destCtx = destCanvas.getContext('2d');\n if (!destCtx) return reject('Canvas is empty (resample dest)');\n let workers_in_use = data_part.length;\n for (let c = 0; c < data_part.length; c++) {\n\n //draw\n const height_part = Math.ceil(data_part[c].height / ratio_h);\n const target = destCtx.createImageData(destCanvas.width, height_part);\n // target.data.set(event.data.target);\n destCtx.putImageData(target, 0, data_part[c].startY);\n\n }\n });\n};\n\n /**\n * Hermite resize - fast image resize/resample using Hermite filter. 1 cpu version!\n */\n const resampleSingle = (srcCanvasData: ImageData, destCanvasData: ImageData,) => {\n const ratio_w = srcCanvasData.width / destCanvasData.width;\n const ratio_h = srcCanvasData.height / destCanvasData.height;\n const ratio_w_half = Math.ceil(ratio_w / 2);\n const ratio_h_half = Math.ceil(ratio_h / 2);\n\n const data = srcCanvasData.data;\n const data2 = destCanvasData.data;\n\n for (let j = 0; j < destCanvasData.height; j++) {\n for (let i = 0; i < destCanvasData.width; i++) {\n const x2 = (i + j * destCanvasData.width) * 4;\n let weight = 0;\n let weights = 0;\n let weights_alpha = 0;\n let gx_r = 0;\n let gx_g = 0;\n let gx_b = 0;\n let gx_a = 0;\n const center_y = j * ratio_h;\n\n const xx_start = Math.floor(i * ratio_w);\n const xx_stop = Math.min(Math.ceil((i + 1) * ratio_w), srcCanvasData.width);\n const yy_start = Math.floor(j * ratio_h);\n const yy_stop = Math.min(Math.ceil((j + 1) * ratio_h), srcCanvasData.height);\n\n for (let yy = yy_start; yy < yy_stop; yy++) {\n let dy = Math.abs(center_y - yy) / ratio_h_half;\n let center_x = i * ratio_w;\n let w0 = dy * dy; //pre-calc part of w\n for (let xx = xx_start; xx < xx_stop; xx++) {\n let dx = Math.abs(center_x - xx) / ratio_w_half;\n let w = Math.sqrt(w0 + dx * dx);\n if (w >= 1) {\n //pixel too far\n continue;\n }\n //hermite filter\n weight = 2 * w * w * w - 3 * w * w + 1;\n let pos_x = 4 * (xx + yy * srcCanvasData.width);\n //alpha\n gx_a += weight * data[pos_x + 3];\n weights_alpha += weight;\n //colors\n if (data[pos_x + 3] < 255)\n weight = weight * data[pos_x + 3] / 250;\n gx_r += weight * data[pos_x];\n gx_g += weight * data[pos_x + 1];\n gx_b += weight * data[pos_x + 2];\n weights += weight;\n }\n }\n data2[x2] = gx_r / weights;\n data2[x2 + 1] = gx_g / weights;\n data2[x2 + 2] = gx_b / weights;\n data2[x2 + 3] = gx_a / weights_alpha;\n }\n }\n};\n\n /**\n * Hermite resize. Detect cpu count and use best option for user.\n */\n const resampleAuto = (srcCanvas: OffscreenCanvas, destCanvas: OffscreenCanvas, config: { debug?: boolean, argorithm?: string }) => {\n if (!!globalThis.Worker && navigator.hardwareConcurrency > 1 && config?.argorithm !== 'hermite_single') {\n //workers supported and we have at least 2 cpu cores - using multithreading\n return resample(srcCanvas, destCanvas, config);\n } else {\n //1 cpu version\n const { srcImgData, destImgData } = getImageData(srcCanvas, destCanvas);\n resampleSingle(srcImgData, destImgData, config);\n destCanvas.getContext('2d')!.putImageData(destImgData, 0, 0);\n return;\n }\n};\n\n\nasync function scaleCanvasWithAlgorithm(canvas: OffscreenCanvas, config: BrowserImageResizerConfig & { outputWidth: number }) {\n\tconst scale = config.outputWidth / canvas.width;\n\n\tconst scaled = new OffscreenCanvas(Math.floor(config.outputWidth), getTargetHeight(canvas.height, scale, config));\n\n\tswitch (config.algorithm) {\n\t\tcase 'hermite': {\n\t\t\tawait resampleAuto(canvas, scaled, config as BrowserImageResizerConfig & { algorithm: 'hermite' | 'hermite_single' });\n\t\t\tbreak;\n\t\t} case 'hermite_single': {\n\t\t\tconst { srcImgData, destImgData } = getImageData(canvas, scaled);\n\t\t\tresampleSingle(srcImgData, destImgData,);\n\t\t\tscaled?.getContext('2d')?.putImageData(destImgData, 0, 0);\n\t\t\tbreak;\n\t\t} case 'bilinear': {\n\t\t\t// const { srcImgData, destImgData } = getImageData(canvas, scaled);\n\t\t\t// bilinear(srcImgData, destImgData, scale);\n\t\t\t// scaled?.getContext('2d')?.putImageData(destImgData, 0, 0);\n\t\t\tbreak;\n\t\t} default: {\n\t\t\tscaled.getContext('2d')?.drawImage(canvas, 0, 0, scaled.width, scaled.height);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn scaled;\n}\n\nconst getHalfScaleCanvas = (src: OffscreenCanvas | HTMLCanvasElement) => {\n\tconst half = new OffscreenCanvas(src.width / 2, src.height / 2);\n\n\thalf\n\t\t?.getContext('2d')\n\t\t?.drawImage(src, 0, 0, half.width, half.height);\n\n\treturn half;\n}\n\nconst getImageData = (canvas: OffscreenCanvas, scaled: OffscreenCanvas) => {\n\tconst srcImgData = canvas\n\t\t?.getContext('2d')\n\t\t?.getImageData(0, 0, canvas.width, canvas.height);\n\tconst destImgData = scaled\n\t\t?.getContext('2d')\n\t\t?.createImageData(scaled.width, scaled.height);\n\n\tif (!srcImgData || !destImgData) throw Error('Canvas is empty (scaleCanvasWithAlgorithm). You should run this script after the document is ready.');\n\n\treturn { srcImgData, destImgData };\n}\n\nasync function saveBlobToOPFS(filePath: string, blob: Blob): Promise<void> {\n // Access the OPFS root directory\n const rootHandle = await navigator.storage.getDirectory();\n\n // Split the filePath into directory segments and file name\n const segments = filePath.split('/').filter(Boolean);\n const fileName = segments.pop(); // Extract the file name\n if (!fileName) {\n throw new Error('Invalid file path: No file name provided.');\n }\n\n // Traverse or create directories as needed\n let currentDirHandle = rootHandle;\n for (const segment of segments) {\n currentDirHandle = await currentDirHandle.getDirectoryHandle(segment, { create: true });\n }\n\n // Create or open the file in OPFS\n const fileHandle = await currentDirHandle.getFileHandle(fileName, { create: true });\n\n // Write the Blob to the file\n const writableStream = await fileHandle.createWritable();\n await writableStream.write(blob);\n await writableStream.close();\n}\n\n\nconst imageResize = async (filePath: string, width: number, height: number) => {\n\n console.log({filePath, width, height})\n\n const config = {\n ...DEFAULT_CONFIG,\n algorithm: 'hermite_single',\n mimeType: 'image/webp',\n maxWidth: width,\n maxHeight: height,\n }\n\n const rootHandle = await navigator.storage.getDirectory();\n\n // List files in the root directory\n const files = await listFilesInDirectory(rootHandle);\n console.log({\n message: 'listFilesInDirectory',\n files\n });\n\n const file = await getFileFromOPFS(filePath);\n\n const imageBitmap = await createImageBitmap(file);\n\n let converting: OffscreenCanvas\n\n if (isIos() && imageBitmap.width * imageBitmap.height > 16777216) {\n const scale = Math.sqrt(16777216 / (imageBitmap.width * imageBitmap.height));\n console.log(`browser-image-resizer: scale: Image is too large in iOS WebKit`);\n converting = new OffscreenCanvas(Math.floor(imageBitmap.width * scale), Math.floor(imageBitmap.height * scale));\n converting.getContext('2d')?.drawImage(imageBitmap, 0, 0, converting.width, converting.height);\n } else {\n converting = new OffscreenCanvas(imageBitmap.width, imageBitmap.height);\n converting.getContext('2d')?.drawImage(imageBitmap, 0, 0);\n }\n\n if (!converting?.getContext('2d')) {\n console.log('browser-image-resizer: Canvas Context is empty.')\n }\n\n const maxWidth = findMaxWidth(config, converting);\n\n\tif (!maxWidth){ \n throw Error(`browser-image-resizer: maxWidth is ${maxWidth}!!`)\n };\n\n\twhile (config.processByHalf && converting.width >= 2 * maxWidth) {\n\t\tif (config.debug) console.log(`browser-image-resizer: scale: Scaling canvas by half from ${converting.width}`);\n\t\tconverting = getHalfScaleCanvas(converting);\n\t}\n\n\tif (converting.width > maxWidth) {\n\t\tif (config.debug) console.log(`browser-image-resizer: scale: Scaling canvas by ${config.argorithm} from ${converting.width} to ${maxWidth}`);\n\t\tconverting = await scaleCanvasWithAlgorithm(\n\t\t\tconverting,\n\t\t\tObject.assign(config, { outputWidth: maxWidth }),\n\t\t);\n\t}\n\n\tif (config.mimeType === null) {\n\t\treturn converting;\n\t}\n\tconst resizedBlob = await converting.convertToBlob({ type: config.mimeType, quality: config.quality });\n\n const pathSegments = filePath.split('/');\n const fileName = pathSegments.pop();\n if (!fileName) {\n throw Error('Invalid file path: No file name provided.');\n }\n const newSegments = [\n ...pathSegments,\n width,\n ]\n const fileNameParts = fileName.split('.')\n const newFileName = `${fileNameParts[0]}.webp`\n const newDirPath = newSegments.join('/');\n const newFilePath = `${newDirPath}/${newFileName}`;\n\n // Save resized image to OPFS with new name\n await saveBlobToOPFS(newFilePath, resizedBlob)\n globalThis.postMessage({\n done: true,\n filePath: newFilePath,\n })\n\n}\n\nonmessage = async (e) => {\n console.log('[imageResize] onmessage', e.data)\n const { filePath, width, height } = e.data\n await imageResize(filePath, width, height)\n console.log(`[imageResize] Done`, filePath)\n}\n}.toString()\n}\n)()`\n","import fs from '@zenfs/core';\nimport imageResize from './imageResize'\n\n\n\nexport class ImageResizer {\n private cores: number\n private workersArchive: Map<string, Worker> = new Map()\n private workerBlobUrl: string\n\n constructor() {\n this.cores = Math.min(navigator.hardwareConcurrency || 4, 4);\n\n this.workerBlobUrl = globalThis.URL.createObjectURL(\n new Blob([imageResize], { type: 'application/javascript' })\n )\n }\n\n public async resize({filePath, width, height}: ResizeImageParams) {\n \n if (this.workersArchive.has(filePath)) {\n const savedWorker = this.workersArchive.get(filePath)\n savedWorker?.terminate()\n console.log('[ImageResizer.resize] Terminated worker for filePath due to incoming request', filePath)\n this.workersArchive.delete(filePath)\n }\n\n const worker = new Worker(this.workerBlobUrl);\n\n this.workersArchive.set(filePath, worker)\n\n return new Promise((resolve, reject) => {\n worker.onmessage = (e) => {\n console.log('[ImageResizer.resize] main thread onmessage', e.data);\n if (e.data.done) {\n const savedWorker = this.workersArchive.get(filePath)\n savedWorker?.terminate()\n console.log('[ImageResizer.resize] Terminated worker for filePath due to done', filePath)\n this.workersArchive.delete(filePath)\n resolve(e.data)\n }\n\n if (e.data.error) {\n reject(e.data.error)\n }\n }\n \n worker.postMessage({\n filePath,\n width,\n height,\n });\n })\n }\n\n public async resizeAll({width, height}: ResizeAllImagesParams) {\n\n const imageDir = '/files/images'\n let imageFilesStats = await fs.promises.readdir(imageDir, {\n withFileTypes: true\n })\n\n imageFilesStats = imageFilesStats.filter(file => file.isFile())\n\n const imageFiles = imageFilesStats.map(file => file.path)\n\n const widthDir = `${imageDir}/${width}`\n\n const widthDirExists = await fs.promises.exists(widthDir)\n\n if (!widthDirExists) {\n await fs.promises.mkdir(widthDir)\n }\n\n for (const imageFile of imageFiles) {\n const resizedImageExists = await fs.promises.exists(`${widthDir}/${imageFile}`)\n if (!resizedImageExists) {\n await this.resize({filePath: `${imageDir}/${imageFile}`, width, height})\n }\n }\n\n \n }\n}\n","import { BaseFileManager } from '@/helpers/FileManager/BaseFileManager'\nimport { configureSingle, fs } from '@zenfs/core'\nimport { FileDownloader } from '../workers/FileDownloader'\nimport { ImageResizer } from '../workers/ImageResizer'\nimport { WebAccess } from '@zenfs/dom'\n\nclass FileManager extends BaseFileManager {\n static async readFileAsBuffer( filePath: string ): Promise<Buffer> {\n return new Promise(( resolve, reject ) => {\n reject(new Error('Not implemented'))\n })\n }\n\n static async getContentUrlFromPath( path: string ): Promise<string | undefined> {\n const fileExists = await fs.promises.exists(\n path,\n )\n if ( fileExists ) {\n const fileContents = await fs.promises.readFile(\n path,\n )\n const fileHandler = new File([ fileContents ], path)\n return URL.createObjectURL(fileHandler)\n }\n }\n\n static async initializeFileSystem(): Promise<void> {\n const handle = await navigator.storage.getDirectory()\n await configureSingle({\n backend: WebAccess,\n handle,\n })\n }\n\n static async downloadAllFiles( {\n transactionIds,\n arweaveHost,\n excludedTransactions,\n }: DownloadAllFilesParams ): Promise<void> {\n const fileDownloader = new FileDownloader()\n await fileDownloader.downloadAll({ transactionIds, arweaveHost, excludedTransactions })\n }\n\n static async resizeImage( { filePath, width, height }: ResizeImageParams ): Promise<void> {\n const imageResizer = new ImageResizer()\n await imageResizer.resize({ filePath, width, height })\n }\n\n static async resizeAllImages( { width, height }: ResizeAllImagesParams ): Promise<void> {\n const imageResizer = new ImageResizer()\n await imageResizer.resizeAll({ width, height })\n }\n}\n\nBaseFileManager.setPlatformClass(FileManager)\n\nexport { FileManager }\n"],"names":["fs"],"mappings":"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"}
1
+ {"version":3,"file":"FileManager-AhAsy_F_.js","sources":["../../src/browser/workers/filesDownload.ts","../../src/browser/workers/FileDownloader.ts","../../src/browser/workers/imageResize.ts","../../src/browser/workers/ImageResizer.ts","../../src/browser/helpers/FileManager.ts"],"sourcesContent":["\nexport default `(\n ${\n function () {\n\nconst identifyString = (str: string) => {\n try {\n JSON.parse(str)\n return 'json'\n } catch (e) {\n // Not JSON\n }\n\n if (!str) {\n return\n }\n\n if (str.trim().startsWith('<') && str.trim().endsWith('>')) {\n return 'html'\n }\n\n // Simple markdown checks (very naive)\n if (/^#{1,6}\\s|^-{3,}|\\*{3,}|^-{1,2}\\s|\\*\\s/.test(str)) {\n return 'markdown'\n }\n\n if (/^data:image\\/[a-zA-Z]+;base64,[A-Za-z0-9+/]+={0,2}$/.test(str)) {\n return 'base64'\n }\n\n // Default to plain text if unsure\n return 'text'\n}\n\nconst getMimeType = (base64: string) => {\n if (!base64) {\n return null\n }\n const result = base64.match(/^data:([a-zA-Z0-9]+\\/[a-zA-Z0-9-.+]+).*,/)\n\n if (result && result.length > 1) {\n return result[1]\n } else {\n return null // MIME type could not be determined\n }\n}\n\nconst getDataTypeFromString = (\n data: string,\n): 'imageBase64' | 'base64' | 'url' | null => {\n const nonImageBase64Regex =\n /^(?!data:image\\/(?:jpeg|png|gif|bmp|webp);base64,)[A-Za-z0-9+/=]+$/\n\n if (nonImageBase64Regex.test(data)) {\n return 'base64'\n }\n\n // Regular expression for base64 (simple version, checking for base64 format)\n const imageBase64Regex = /^data:image\\/[a-zA-Z]+;base64,[A-Za-z0-9+/]+={0,2}$/\n\n if (imageBase64Regex.test(data)) {\n return 'imageBase64'\n }\n\n // Regular expression for URL (simple version, checking for common URL format)\n const urlRegex =\n /^(http:\\/\\/www\\.|https:\\/\\/www\\.|http:\\/\\/|https:\\/\\/)?[a-z0-9]+([\\-\\.]{1}[a-z0-9]+)*\\.[a-z]{2,5}(:[0-9]{1,5})?(\\/.*)?$/\n\n if (urlRegex.test(data)) {\n return 'url'\n }\n\n return null\n}\n\nconst isBinary = (arrayBuffer: ArrayBuffer): boolean => {\n const view = new Uint8Array(arrayBuffer);\n\n let nonTextCount = 0;\n const threshold = 0.2; // Adjust as needed (e.g., 20% non-text implies binary)\n\n for (let i = 0; i < view.length; i++) {\n const byte = view[i];\n\n // ASCII printable characters (32-126) and common whitespace (9, 10, 13)\n if (\n (byte >= 32 && byte <= 126) || // Printable ASCII\n byte === 9 || byte === 10 || byte === 13 // Tab, LF, CR\n ) {\n continue;\n }\n\n nonTextCount++;\n if (nonTextCount / view.length > threshold) {\n return true; // More than threshold are non-text bytes\n }\n }\n\n return false; // Fewer than threshold are non-text bytes\n}\n\nconst saveBufferToOPFS = async (filePath: string, buffer: Uint8Array): Promise<void> => {\n // Access the OPFS root directory\n const rootHandle = await navigator.storage.getDirectory();\n\n // Split the filePath into directory segments and file name\n const segments = filePath.split('/').filter(Boolean);\n const fileName = segments.pop(); // Extract the file name\n if (!fileName) {\n throw new Error('Invalid file path: No file name provided.');\n }\n\n // Traverse or create directories as needed\n let currentDirHandle = rootHandle;\n for (const segment of segments) {\n currentDirHandle = await currentDirHandle.getDirectoryHandle(segment, { create: true });\n }\n\n // Create or open the file in OPFS\n const fileHandleAsync = await currentDirHandle.getFileHandle(fileName, { create: true });\n const fileHandle = await fileHandleAsync.createSyncAccessHandle();\n // Write the buffer to the file\n fileHandle.write(buffer);\n fileHandle.flush();\n fileHandle.close();\n}\n\nconst downloadFiles = async ({\n transactionIds,\n arweaveHost,\n}: {\n transactionIds: string[],\n arweaveHost: string,\n}) => {\n\n let arrayBuffer: ArrayBuffer | undefined\n\n for (const transactionId of transactionIds) {\n try {\n const response = await fetch(`https://${arweaveHost}/raw/${transactionId}`);\n\n arrayBuffer = await response.arrayBuffer();\n } catch(error) {\n console.log(`[filesDownload] transaction ${transactionId} data not found`, error)\n globalThis.postMessage({\n message: 'excludeTransaction',\n transactionId,\n })\n continue\n }\n\n let dataString\n const isBinaryData = isBinary(arrayBuffer)\n\n if (!isBinaryData) {\n const decoder = new TextDecoder('utf-8')\n const text = decoder.decode(arrayBuffer)\n dataString = text\n }\n\n if (!dataString && !arrayBuffer) {\n console.log(\n `[filesDownload] transaction ${transactionId} data not found`,\n )\n }\n\n if (dataString && dataString.startsWith('===FILE_SEPARATOR===')) {\n const dataStringParts = dataString\n .split('===FILE_SEPARATOR===')\n .slice(1)\n\n if (dataStringParts.length % 2 !== 0) {\n throw new Error('Input array must have an even number of elements.')\n }\n\n for (let i = 0; i < dataStringParts.length; i += 2) {\n const contentType = dataStringParts[i]\n const content = dataStringParts[i + 1]\n const encoder = new TextEncoder()\n if (contentType === 'html') {\n const fileName = `${transactionId}.html`\n const buffer = encoder.encode(content)\n saveBufferToOPFS(`/files/html/${fileName}`, buffer)\n }\n if (contentType === 'json') {\n const fileName = `${transactionId}.json`\n const buffer = encoder.encode(content)\n saveBufferToOPFS(`/files/json/${fileName}`, buffer)\n }\n }\n\n continue\n }\n\n if (!dataString && arrayBuffer) {\n saveBufferToOPFS(\n `/files/images/${transactionId}`,\n new Uint8Array(arrayBuffer),\n )\n continue\n }\n\n if (!dataString) {\n continue\n }\n\n let contentType = identifyString(dataString)\n\n if (\n contentType !== 'json' &&\n contentType !== 'base64' &&\n contentType !== 'html'\n ) {\n const possibleImageType = getDataTypeFromString(dataString)\n if (!possibleImageType) {\n console.log(\n `[filesDownload] transaction ${transactionId} data not in expected format: ${possibleImageType}`,\n )\n continue\n }\n\n contentType = possibleImageType\n }\n\n if (contentType === 'url') {\n const url = dataString as string\n\n let buffer: ArrayBuffer | undefined\n\n try {\n const response = await fetch(url)\n \n buffer = await response.arrayBuffer()\n\n } catch(error) {\n console.log(`[filesDownload] transaction ${transactionId} value was url: ${dataString} but failed to fetch`, error)\n globalThis.postMessage({\n message: 'excludeTransaction',\n transactionId,\n })\n continue\n }\n\n const bufferUint8Array = new Uint8Array(buffer)\n\n // Extract the file extension from the URL\n const extensionMatch = url.match(/\\.(jpg|jpeg|png|gif|bmp|webp|svg)$/i)\n if (!extensionMatch) {\n throw new Error(\n 'Unable to determine the file extension from the URL.',\n )\n }\n const fileExtension = extensionMatch[0] // e.g., \".jpg\"\n\n // Set the file name (you can customize this)\n // const fileNameFromUrl = `${transactionId}${fileExtension}`\n\n await saveBufferToOPFS(\n `/files/images/${transactionId}`,\n bufferUint8Array,\n )\n\n continue\n }\n\n const mimeType = getMimeType(dataString as string)\n let fileExtension = mimeType\n\n if (fileExtension && fileExtension?.startsWith('image')) {\n fileExtension = fileExtension.replace('image/', '')\n }\n\n let fileName = transactionId\n\n if (contentType === 'base64') {\n if (fileExtension) {\n fileName += `.${fileExtension}`\n }\n\n // Remove the Base64 header if it exists (e.g., \"data:image/png;base64,\")\n const base64Data = dataString.split(',').pop() || ''\n\n // Decode the Base64 string to binary\n const binaryString = atob(base64Data)\n const length = binaryString.length\n const binaryData = new Uint8Array(length)\n\n for (let i = 0; i < length; i++) {\n binaryData[i] = binaryString.charCodeAt(i)\n }\n\n await saveBufferToOPFS(`/files/images/${fileName}`, binaryData)\n\n }\n\n if (contentType === 'html') {\n fileName += '.html'\n const encoder = new TextEncoder()\n const buffer = encoder.encode(dataString)\n await saveBufferToOPFS(`/files/html/${fileName}`, buffer)\n }\n\n if (contentType === 'json') {\n fileName += '.json'\n const encoder = new TextEncoder()\n const buffer = encoder.encode(dataString)\n await saveBufferToOPFS(`/files/json/${fileName}`, buffer)\n }\n }\n}\n\nonmessage = async (e) => {\n console.log({\n message: 'filesDownload onmessage',\n data: e.data,\n })\n await downloadFiles(e.data);\n globalThis.postMessage({\n message: 'filesDownload onmessage done',\n done: true,\n })\n \n}\n}.toString()\n}\n)()`","import { saveAppState } from '@/db/write/saveAppState.js';\nimport filesDownload from './filesDownload.js'\n\n\n\nexport class FileDownloader {\n private cores: number\n private workersArchive: Worker[] = []\n private workerBlobUrl: string\n\n constructor() {\n this.cores = Math.min(navigator.hardwareConcurrency || 4, 4);\n\n this.workerBlobUrl = globalThis.URL.createObjectURL(\n new Blob([filesDownload], { type: 'application/javascript' })\n )\n }\n\n public downloadAll = async ({transactionIds, arweaveHost, excludedTransactions}: DownloadAllFilesParams): Promise<void> => {\n\n if (this.workersArchive.length > 0) {\n for (let i = 0; i < this.workersArchive.length; i++) {\n this.workersArchive[i].terminate()\n delete this.workersArchive[i]\n }\n this.workersArchive = []\n }\n\n const worker = new Worker(this.workerBlobUrl);\n\n this.workersArchive.push(worker)\n\n const localExcludedTransactions = new Set(excludedTransactions)\n\n return new Promise((resolve, reject) => {\n worker.onmessage = (e) => {\n console.log('filesDownload main thread onmessage', e.data);\n\n if (e.data.message === 'excludeTransaction') {\n localExcludedTransactions.add(e.data.transactionId)\n }\n\n if (e.data.done) {\n saveAppState('excludedTransactions', JSON.stringify(Array.from(localExcludedTransactions)))\n .then(() => {\n resolve(e.data)\n })\n .catch((error) => {\n reject(error)\n })\n }\n if (e.data.error) {\n reject(e.data.error)\n }\n }\n \n worker.postMessage({\n transactionIds,\n arweaveHost,\n });\n })\n }\n}\n","import path from \"path\";\n\ntype BrowserImageResizerConfigBase = {\n\t/**\n\t * Algorithm used for downscaling\n\t * \n\t * * `null`: Just resize with `drawImage()`. The best quality and fastest.\n\t * * `bilinear`: Better quality, slower. Comes from upstream (ericnogralesbrowser-image-resizer).\n\t * * `hermite`: Worse quality, faster. Comes from [viliusle/Hermite-resize](https://github.com/viliusle/Hermite-resize). Will dispatch workers for better performance.\n\t * * `hermite_single`: Worse quality, faster. Single-threaded.\n\t * \n\t * default: null\n\t */\n\talgorithm: 'bilinear' | 'hermite' | 'hermite_single' | 'null' | null;\n\n\t/**\n\t * Whether to process downscaling by `drawImage(source, 0, 0, source.width / 2, source.height / 2)`\n\t * until the size is smaller than twice the target size.\n\t *\n\t * There seems to be no situation where it is necessary to change to false.\n\t * \n\t * default: true\n\t */\n\tprocessByHalf: boolean;\n\n\tmaxWidth: number;\n\tmaxHeight: number;\n\tmaxSize?: number; // ???\n\n\t/**\n\t * Scale ratio. Strictly limited to maxWidth.\n\t */\n\tscaleRatio?: number;\n\n\t/**\n\t * Output logs to console\n\t */\n\tdebug: boolean;\n}\n\n\ntype BrowserImageResizerConfigWithConvertedOutput = BrowserImageResizerConfigBase & {\n\tquality: number;\n\tmimeType: string;\n};\n\ntype BrowserImageResizerConfigWithOffscreenCanvasOutput = BrowserImageResizerConfigBase & {\n\tmimeType: null;\n}\n\ntype BrowserImageResizerConfig = BrowserImageResizerConfigWithConvertedOutput | BrowserImageResizerConfigWithOffscreenCanvasOutput;\n\ntype WorkerSouceData = {\n source: ImageData;\n startY: number;\n height: number;\n}\n\nexport default `(\n ${\n function () {\n\nasync function listFilesInDirectory(directoryHandle: FileSystemDirectoryHandle) {\n const entries: { name: string; kind: FileSystemHandleKind }[] = [];\n\n for await (const [name, handle] of directoryHandle.entries()) {\n entries.push({\n name,\n kind: handle.kind,\n })\n }\n\n return entries;\n}\n\nconst getFileHandle = async (path: string, rootHandle: FileSystemDirectoryHandle | null = null): Promise<FileSystemFileHandle> => {\n // Split the path into segments\n const segments = path.split('/').filter(Boolean);\n\n // Start from the root directory if not provided\n if (!rootHandle) {\n rootHandle = await navigator.storage.getDirectory();\n }\n\n let currentHandle = rootHandle;\n\n // Traverse the path segments\n for (let i = 0; i < segments.length; i++) {\n const segment = segments[i];\n const isLastSegment = i === segments.length - 1;\n\n try {\n\n for await (const [name, handle] of currentHandle.entries()) {\n if (name !== segment) {\n continue\n }\n\n if (isLastSegment) {\n if (handle.kind === 'file') {\n return handle as FileSystemFileHandle; // Return the file handle if found\n } else {\n throw new Error(`Path '${path}' refers to a directory, not a file.`);\n }\n } else if (handle.kind === 'directory') {\n currentHandle = handle as FileSystemDirectoryHandle; // Traverse into the directory\n } else {\n throw new Error(`Invalid path segment '${segment}'`);\n }\n }\n } catch (err) {\n if (err instanceof Error && err.name === 'NotFoundError') {\n throw new Error(`Path '${path}' does not exist.`);\n } else {\n throw err;\n }\n }\n }\n\n throw new Error(`Path '${path}' could not be resolved.`);\n}\n\nasync function getFileFromOPFS(path: string): Promise<File> {\n\n const fileHandleAsync = await getFileHandle(path);\n const file = await fileHandleAsync.getFile();\n return file;\n\n}\n\nconst DEFAULT_CONFIG = {\n\targorithm: 'null',\n\tprocessByHalf: true,\n\tquality: 0.5,\n\tmaxWidth: 800,\n\tmaxHeight: 600,\n\tdebug: false,\n\tmimeType: 'image/jpeg',\n} as const;\n\nfunction isIos() {\n\tif (typeof navigator === 'undefined') return false;\n\tif (!navigator.userAgent) return false;\n\treturn /iPad|iPhone|iPod/.test(navigator.userAgent);\n}\n\nconst getTargetHeight = (srcHeight: number, scale: number, config: BrowserImageResizerConfig) => {\n\treturn Math.min(Math.floor(srcHeight * scale), config.maxHeight);\n}\n\nconst findMaxWidth = (config: BrowserImageResizerConfig, canvas: { width: number; height: number }) => {\n\t//Let's find the max available width for scaled image\n\tconst ratio = canvas.width / canvas.height;\n\tlet mWidth = Math.min(\n\t\tcanvas.width,\n\t\tconfig.maxWidth,\n\t\tratio * config.maxHeight\n\t);\n\tif (\n\t\tconfig.maxSize &&\n\t\tconfig.maxSize > 0 &&\n\t\tconfig.maxSize < (canvas.width * canvas.height) / 1000\n\t)\n\t\tmWidth = Math.min(\n\t\t\tmWidth,\n\t\t\tMath.floor((config.maxSize * 1000) / canvas.height)\n\t\t);\n\tif (!!config.scaleRatio)\n\t\tmWidth = Math.min(mWidth, Math.floor(config.scaleRatio * canvas.width));\n\n\tconst rHeight = getTargetHeight(canvas.height, mWidth / canvas.width, config);\n\n // console.log(\n // 'browser-image-resizer: original image size = ' +\n // canvas.width +\n // ' px (width) X ' +\n // canvas.height +\n // ' px (height)'\n // );\n // console.log(\n // 'browser-image-resizer: scaled image size = ' +\n // mWidth +\n // ' px (width) X ' +\n // rHeight +\n // ' px (height)'\n // );\n\tif (mWidth <= 0) {\n\t\tmWidth = 1;\n\t\tconsole.warn(\"browser-image-resizer: image size is too small\");\n\t}\n\n\tif (isIos() && mWidth * rHeight > 167777216) {\n\t\tconsole.error(\"browser-image-resizer: image size is too large for iOS WebKit.\", mWidth, rHeight);\n\t\tthrow new Error(\"browser-image-resizer: image size is too large for iOS WebKit.\");\n\t}\n\n\treturn mWidth;\n}\n\n /**\n * Hermite resize, multicore version - fast image resize/resample using Hermite filter.\n */\n const resample = (srcCanvas: OffscreenCanvas, destCanvas: OffscreenCanvas, config: { debug?: boolean }) => {\n return new Promise<void>((resolve, reject) => {\n\n const ratio_h = srcCanvas.height / destCanvas.height;\n const cores = Math.min(navigator.hardwareConcurrency || 4, 4)\n\n //prepare source and target data for workers\n const ctx = srcCanvas.getContext('2d');\n if (!ctx) return reject('Canvas is empty (resample)');\n\n const data_part: WorkerSouceData[] = [];\n const block_height = Math.ceil(srcCanvas.height / cores / 2) * 2;\n let end_y = -1;\n for (let c = 0; c < cores; c++) {\n //source\n const offset_y = end_y + 1;\n if (offset_y >= srcCanvas.height) {\n //size too small, nothing left for this core\n continue;\n }\n\n end_y = Math.min(offset_y + block_height - 1, srcCanvas.height - 1);\n\n const current_block_height = Math.min(block_height, srcCanvas.height - offset_y);\n\n console.log('browser-image-resizer: source split: ', '#' + c, offset_y, end_y, 'height: ' + current_block_height);\n\n data_part.push({\n source: ctx.getImageData(0, offset_y, srcCanvas.width, block_height),\n startY: Math.ceil(offset_y / ratio_h),\n height: current_block_height\n });\n }\n\n //start\n const destCtx = destCanvas.getContext('2d');\n if (!destCtx) return reject('Canvas is empty (resample dest)');\n let workers_in_use = data_part.length;\n for (let c = 0; c < data_part.length; c++) {\n\n //draw\n const height_part = Math.ceil(data_part[c].height / ratio_h);\n const target = destCtx.createImageData(destCanvas.width, height_part);\n // target.data.set(event.data.target);\n destCtx.putImageData(target, 0, data_part[c].startY);\n\n }\n });\n};\n\n /**\n * Hermite resize - fast image resize/resample using Hermite filter. 1 cpu version!\n */\n const resampleSingle = (srcCanvasData: ImageData, destCanvasData: ImageData,) => {\n const ratio_w = srcCanvasData.width / destCanvasData.width;\n const ratio_h = srcCanvasData.height / destCanvasData.height;\n const ratio_w_half = Math.ceil(ratio_w / 2);\n const ratio_h_half = Math.ceil(ratio_h / 2);\n\n const data = srcCanvasData.data;\n const data2 = destCanvasData.data;\n\n for (let j = 0; j < destCanvasData.height; j++) {\n for (let i = 0; i < destCanvasData.width; i++) {\n const x2 = (i + j * destCanvasData.width) * 4;\n let weight = 0;\n let weights = 0;\n let weights_alpha = 0;\n let gx_r = 0;\n let gx_g = 0;\n let gx_b = 0;\n let gx_a = 0;\n const center_y = j * ratio_h;\n\n const xx_start = Math.floor(i * ratio_w);\n const xx_stop = Math.min(Math.ceil((i + 1) * ratio_w), srcCanvasData.width);\n const yy_start = Math.floor(j * ratio_h);\n const yy_stop = Math.min(Math.ceil((j + 1) * ratio_h), srcCanvasData.height);\n\n for (let yy = yy_start; yy < yy_stop; yy++) {\n let dy = Math.abs(center_y - yy) / ratio_h_half;\n let center_x = i * ratio_w;\n let w0 = dy * dy; //pre-calc part of w\n for (let xx = xx_start; xx < xx_stop; xx++) {\n let dx = Math.abs(center_x - xx) / ratio_w_half;\n let w = Math.sqrt(w0 + dx * dx);\n if (w >= 1) {\n //pixel too far\n continue;\n }\n //hermite filter\n weight = 2 * w * w * w - 3 * w * w + 1;\n let pos_x = 4 * (xx + yy * srcCanvasData.width);\n //alpha\n gx_a += weight * data[pos_x + 3];\n weights_alpha += weight;\n //colors\n if (data[pos_x + 3] < 255)\n weight = weight * data[pos_x + 3] / 250;\n gx_r += weight * data[pos_x];\n gx_g += weight * data[pos_x + 1];\n gx_b += weight * data[pos_x + 2];\n weights += weight;\n }\n }\n data2[x2] = gx_r / weights;\n data2[x2 + 1] = gx_g / weights;\n data2[x2 + 2] = gx_b / weights;\n data2[x2 + 3] = gx_a / weights_alpha;\n }\n }\n};\n\n /**\n * Hermite resize. Detect cpu count and use best option for user.\n */\n const resampleAuto = (srcCanvas: OffscreenCanvas, destCanvas: OffscreenCanvas, config: { debug?: boolean, argorithm?: string }) => {\n if (!!globalThis.Worker && navigator.hardwareConcurrency > 1 && config?.argorithm !== 'hermite_single') {\n //workers supported and we have at least 2 cpu cores - using multithreading\n return resample(srcCanvas, destCanvas, config);\n } else {\n //1 cpu version\n const { srcImgData, destImgData } = getImageData(srcCanvas, destCanvas);\n resampleSingle(srcImgData, destImgData, config);\n destCanvas.getContext('2d')!.putImageData(destImgData, 0, 0);\n return;\n }\n};\n\n\nasync function scaleCanvasWithAlgorithm(canvas: OffscreenCanvas, config: BrowserImageResizerConfig & { outputWidth: number }) {\n\tconst scale = config.outputWidth / canvas.width;\n\n\tconst scaled = new OffscreenCanvas(Math.floor(config.outputWidth), getTargetHeight(canvas.height, scale, config));\n\n\tswitch (config.algorithm) {\n\t\tcase 'hermite': {\n\t\t\tawait resampleAuto(canvas, scaled, config as BrowserImageResizerConfig & { algorithm: 'hermite' | 'hermite_single' });\n\t\t\tbreak;\n\t\t} case 'hermite_single': {\n\t\t\tconst { srcImgData, destImgData } = getImageData(canvas, scaled);\n\t\t\tresampleSingle(srcImgData, destImgData,);\n\t\t\tscaled?.getContext('2d')?.putImageData(destImgData, 0, 0);\n\t\t\tbreak;\n\t\t} case 'bilinear': {\n\t\t\t// const { srcImgData, destImgData } = getImageData(canvas, scaled);\n\t\t\t// bilinear(srcImgData, destImgData, scale);\n\t\t\t// scaled?.getContext('2d')?.putImageData(destImgData, 0, 0);\n\t\t\tbreak;\n\t\t} default: {\n\t\t\tscaled.getContext('2d')?.drawImage(canvas, 0, 0, scaled.width, scaled.height);\n\t\t\tbreak;\n\t\t}\n\t}\n\n\treturn scaled;\n}\n\nconst getHalfScaleCanvas = (src: OffscreenCanvas | HTMLCanvasElement) => {\n\tconst half = new OffscreenCanvas(src.width / 2, src.height / 2);\n\n\thalf\n\t\t?.getContext('2d')\n\t\t?.drawImage(src, 0, 0, half.width, half.height);\n\n\treturn half;\n}\n\nconst getImageData = (canvas: OffscreenCanvas, scaled: OffscreenCanvas) => {\n\tconst srcImgData = canvas\n\t\t?.getContext('2d')\n\t\t?.getImageData(0, 0, canvas.width, canvas.height);\n\tconst destImgData = scaled\n\t\t?.getContext('2d')\n\t\t?.createImageData(scaled.width, scaled.height);\n\n\tif (!srcImgData || !destImgData) throw Error('Canvas is empty (scaleCanvasWithAlgorithm). You should run this script after the document is ready.');\n\n\treturn { srcImgData, destImgData };\n}\n\nasync function saveBlobToOPFS(filePath: string, blob: Blob): Promise<void> {\n // Access the OPFS root directory\n const rootHandle = await navigator.storage.getDirectory();\n\n // Split the filePath into directory segments and file name\n const segments = filePath.split('/').filter(Boolean);\n const fileName = segments.pop(); // Extract the file name\n if (!fileName) {\n throw new Error('Invalid file path: No file name provided.');\n }\n\n // Traverse or create directories as needed\n let currentDirHandle = rootHandle;\n for (const segment of segments) {\n currentDirHandle = await currentDirHandle.getDirectoryHandle(segment, { create: true });\n }\n\n // Create or open the file in OPFS\n const fileHandle = await currentDirHandle.getFileHandle(fileName, { create: true });\n\n // Write the Blob to the file\n const writableStream = await fileHandle.createWritable();\n await writableStream.write(blob);\n await writableStream.close();\n}\n\n\nconst imageResize = async (filePath: string, width: number, height: number) => {\n\n console.log({filePath, width, height})\n\n const config = {\n ...DEFAULT_CONFIG,\n algorithm: 'hermite_single',\n mimeType: 'image/webp',\n maxWidth: width,\n maxHeight: height,\n }\n\n const rootHandle = await navigator.storage.getDirectory();\n\n // List files in the root directory\n const files = await listFilesInDirectory(rootHandle);\n console.log({\n message: 'listFilesInDirectory',\n files\n });\n\n const file = await getFileFromOPFS(filePath);\n\n const imageBitmap = await createImageBitmap(file);\n\n let converting: OffscreenCanvas\n\n if (isIos() && imageBitmap.width * imageBitmap.height > 16777216) {\n const scale = Math.sqrt(16777216 / (imageBitmap.width * imageBitmap.height));\n console.log(`browser-image-resizer: scale: Image is too large in iOS WebKit`);\n converting = new OffscreenCanvas(Math.floor(imageBitmap.width * scale), Math.floor(imageBitmap.height * scale));\n converting.getContext('2d')?.drawImage(imageBitmap, 0, 0, converting.width, converting.height);\n } else {\n converting = new OffscreenCanvas(imageBitmap.width, imageBitmap.height);\n converting.getContext('2d')?.drawImage(imageBitmap, 0, 0);\n }\n\n if (!converting?.getContext('2d')) {\n console.log('browser-image-resizer: Canvas Context is empty.')\n }\n\n const maxWidth = findMaxWidth(config, converting);\n\n\tif (!maxWidth){ \n throw Error(`browser-image-resizer: maxWidth is ${maxWidth}!!`)\n };\n\n\twhile (config.processByHalf && converting.width >= 2 * maxWidth) {\n\t\tif (config.debug) console.log(`browser-image-resizer: scale: Scaling canvas by half from ${converting.width}`);\n\t\tconverting = getHalfScaleCanvas(converting);\n\t}\n\n\tif (converting.width > maxWidth) {\n\t\tif (config.debug) console.log(`browser-image-resizer: scale: Scaling canvas by ${config.argorithm} from ${converting.width} to ${maxWidth}`);\n\t\tconverting = await scaleCanvasWithAlgorithm(\n\t\t\tconverting,\n\t\t\tObject.assign(config, { outputWidth: maxWidth }),\n\t\t);\n\t}\n\n\tif (config.mimeType === null) {\n\t\treturn converting;\n\t}\n\tconst resizedBlob = await converting.convertToBlob({ type: config.mimeType, quality: config.quality });\n\n const pathSegments = filePath.split('/');\n const fileName = pathSegments.pop();\n if (!fileName) {\n throw Error('Invalid file path: No file name provided.');\n }\n const newSegments = [\n ...pathSegments,\n width,\n ]\n const fileNameParts = fileName.split('.')\n const newFileName = `${fileNameParts[0]}.webp`\n const newDirPath = newSegments.join('/');\n const newFilePath = `${newDirPath}/${newFileName}`;\n\n // Save resized image to OPFS with new name\n await saveBlobToOPFS(newFilePath, resizedBlob)\n globalThis.postMessage({\n done: true,\n filePath: newFilePath,\n })\n\n}\n\nonmessage = async (e) => {\n console.log('[imageResize] onmessage', e.data)\n const { filePath, width, height } = e.data\n await imageResize(filePath, width, height)\n console.log(`[imageResize] Done`, filePath)\n}\n}.toString()\n}\n)()`\n","import fs from '@zenfs/core';\nimport imageResize from './imageResize'\n\n\n\nexport class ImageResizer {\n private cores: number\n private workersArchive: Map<string, Worker> = new Map()\n private workerBlobUrl: string\n\n constructor() {\n this.cores = Math.min(navigator.hardwareConcurrency || 4, 4);\n\n this.workerBlobUrl = globalThis.URL.createObjectURL(\n new Blob([imageResize], { type: 'application/javascript' })\n )\n }\n\n public async resize({filePath, width, height}: ResizeImageParams) {\n \n if (this.workersArchive.has(filePath)) {\n const savedWorker = this.workersArchive.get(filePath)\n savedWorker?.terminate()\n console.log('[ImageResizer.resize] Terminated worker for filePath due to incoming request', filePath)\n this.workersArchive.delete(filePath)\n }\n\n const worker = new Worker(this.workerBlobUrl);\n\n this.workersArchive.set(filePath, worker)\n\n return new Promise((resolve, reject) => {\n worker.onmessage = (e) => {\n console.log('[ImageResizer.resize] main thread onmessage', e.data);\n if (e.data.done) {\n const savedWorker = this.workersArchive.get(filePath)\n savedWorker?.terminate()\n console.log('[ImageResizer.resize] Terminated worker for filePath due to done', filePath)\n this.workersArchive.delete(filePath)\n resolve(e.data)\n }\n\n if (e.data.error) {\n reject(e.data.error)\n }\n }\n \n worker.postMessage({\n filePath,\n width,\n height,\n });\n })\n }\n\n public async resizeAll({width, height}: ResizeAllImagesParams) {\n\n const imageDir = '/files/images'\n let imageFilesStats = await fs.promises.readdir(imageDir, {\n withFileTypes: true\n })\n\n imageFilesStats = imageFilesStats.filter(file => file.isFile())\n\n const imageFiles = imageFilesStats.map(file => file.path)\n\n const widthDir = `${imageDir}/${width}`\n\n const widthDirExists = await fs.promises.exists(widthDir)\n\n if (!widthDirExists) {\n await fs.promises.mkdir(widthDir)\n }\n\n for (const imageFile of imageFiles) {\n const resizedImageExists = await fs.promises.exists(`${widthDir}/${imageFile}`)\n if (!resizedImageExists) {\n await this.resize({filePath: `${imageDir}/${imageFile}`, width, height})\n }\n }\n\n \n }\n}\n","import { BaseFileManager } from '@/helpers/FileManager/BaseFileManager'\nimport { FileDownloader } from '../workers/FileDownloader'\nimport { ImageResizer } from '../workers/ImageResizer'\n\nclass FileManager extends BaseFileManager {\n static async readFileAsBuffer( filePath: string ): Promise<Buffer> {\n return new Promise(( resolve, reject ) => {\n reject(new Error('Not implemented'))\n })\n }\n\n static async getContentUrlFromPath( path: string ): Promise<string | undefined> {\n\n const fs = await import('@zenfs/core')\n\n const fileExists = await fs.promises.exists(\n path,\n )\n if ( fileExists ) {\n const fileContents = await fs.promises.readFile(\n path,\n )\n const fileHandler = new File([ fileContents ], path)\n return URL.createObjectURL(fileHandler)\n }\n }\n\n static async initializeFileSystem(): Promise<void> {\n\n const {WebAccess} = await import('@zenfs/dom')\n const {configureSingle} = await import('@zenfs/core')\n\n const handle = await navigator.storage.getDirectory()\n // await configure({\n // mounts: {\n // '/': {\n // backend: WebAccess,\n // handle,\n // },\n // },\n // disableUpdateOnRead: true,\n // onlySyncOnClose: true,\n // })\n await configureSingle({\n backend: WebAccess,\n handle,\n })\n }\n\n static async downloadAllFiles( {\n transactionIds,\n arweaveHost,\n excludedTransactions,\n }: DownloadAllFilesParams ): Promise<void> {\n const fileDownloader = new FileDownloader()\n await fileDownloader.downloadAll({ transactionIds, arweaveHost, excludedTransactions })\n }\n\n static async resizeImage( { filePath, width, height }: ResizeImageParams ): Promise<void> {\n const imageResizer = new ImageResizer()\n await imageResizer.resize({ filePath, width, height })\n }\n\n static async resizeAllImages( { width, height }: ResizeAllImagesParams ): Promise<void> {\n const imageResizer = new ImageResizer()\n await imageResizer.resizeAll({ width, height })\n }\n}\n\nBaseFileManager.setPlatformClass(FileManager)\n\nexport { FileManager }\n"],"names":[],"mappings":"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"}
@@ -1,10 +1,11 @@
1
- import { B as BaseItem } from './index-CsbUKGXp.js';
1
+ import { B as BaseItem } from './index-CGeSKilQ.js';
2
2
  import 'immer';
3
3
  import 'reflect-metadata';
4
4
  import '@sinclair/typebox';
5
5
  import 'xstate';
6
6
  import './constants-Dgv-tSO3.js';
7
7
  import '@ethereum-attestation-service/eas-sdk';
8
+ import 'debug';
8
9
  import 'pluralize';
9
10
  import 'drizzle-orm/sqlite-core';
10
11
  import 'drizzle-orm';
@@ -12,13 +13,13 @@ import 'eventemitter3';
12
13
  import 'nanoid';
13
14
  import 'nanoid-dictionary';
14
15
  import '@zenfs/core';
15
- import 'debug';
16
16
  import 'lodash-es';
17
17
  import '@statelyai/inspect';
18
18
  import 'node:fs';
19
19
  import 'path';
20
20
  import 'arweave';
21
21
  import 'rxjs';
22
+ import 'drizzle-orm/casing';
22
23
  import 'react';
23
24
  import 'use-immer';
24
25
  import '@xstate/react';
@@ -31,4 +32,4 @@ class Item extends BaseItem {
31
32
  BaseItem.setPlatformClass(Item);
32
33
 
33
34
  export { Item };
34
- //# sourceMappingURL=Item-BO38NUjz.js.map
35
+ //# sourceMappingURL=Item-BmPvgaG4.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Item-BO38NUjz.js","sources":["../../src/node/Item/Item.ts"],"sourcesContent":["import { IItem } from '@/interfaces';\nimport { BaseItem } from '@/Item/BaseItem';\nimport { ModelSchema, ModelValues, NewItemProps } from '@/types';\n\nexport class Item<T extends ModelValues<ModelSchema>> extends BaseItem<T> implements IItem<T> {\n constructor(initialValues: NewItemProps<T>) {\n super(initialValues);\n }\n\n}\n\nBaseItem.setPlatformClass(Item)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIM,MAAO,IAAyC,SAAQ,QAAW,CAAA;AACvE,IAAA,WAAA,CAAY,aAA8B,EAAA;QACxC,KAAK,CAAC,aAAa,CAAC;;AAGvB;AAED,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC;;;;"}
1
+ {"version":3,"file":"Item-BmPvgaG4.js","sources":["../../src/node/Item/Item.ts"],"sourcesContent":["import { IItem } from '@/interfaces';\nimport { BaseItem } from '@/Item/BaseItem';\nimport { ModelSchema, ModelValues, NewItemProps } from '@/types';\n\nexport class Item<T extends ModelValues<ModelSchema>> extends BaseItem<T> implements IItem<T> {\n constructor(initialValues: NewItemProps<T>) {\n super(initialValues);\n }\n\n}\n\nBaseItem.setPlatformClass(Item)"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAIM,MAAO,IAAyC,SAAQ,QAAW,CAAA;AACvE,IAAA,WAAA,CAAY,aAA8B,EAAA;QACxC,KAAK,CAAC,aAAa,CAAC;;AAGvB;AAED,QAAQ,CAAC,gBAAgB,CAAC,IAAI,CAAC;;;;"}
@@ -1,10 +1,11 @@
1
- import { a as BaseItemProperty } from './index-CsbUKGXp.js';
1
+ import { a as BaseItemProperty } from './index-CGeSKilQ.js';
2
2
  import 'immer';
3
3
  import 'reflect-metadata';
4
4
  import '@sinclair/typebox';
5
5
  import 'xstate';
6
6
  import './constants-Dgv-tSO3.js';
7
7
  import '@ethereum-attestation-service/eas-sdk';
8
+ import 'debug';
8
9
  import 'pluralize';
9
10
  import 'drizzle-orm/sqlite-core';
10
11
  import 'drizzle-orm';
@@ -12,13 +13,13 @@ import 'eventemitter3';
12
13
  import 'nanoid';
13
14
  import 'nanoid-dictionary';
14
15
  import '@zenfs/core';
15
- import 'debug';
16
16
  import 'lodash-es';
17
17
  import '@statelyai/inspect';
18
18
  import 'node:fs';
19
19
  import 'path';
20
20
  import 'arweave';
21
21
  import 'rxjs';
22
+ import 'drizzle-orm/casing';
22
23
  import 'react';
23
24
  import 'use-immer';
24
25
  import '@xstate/react';
@@ -30,4 +31,4 @@ class ItemProperty extends BaseItemProperty {
30
31
  }
31
32
 
32
33
  export { ItemProperty };
33
- //# sourceMappingURL=ItemProperty-8H7B05zy.js.map
34
+ //# sourceMappingURL=ItemProperty-BW4k1h0o.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ItemProperty-8H7B05zy.js","sources":["../../src/node/ItemProperty/ItemProperty.ts"],"sourcesContent":["import { IItemProperty } from '@/interfaces'\nimport { BaseItemProperty } from '@/ItemProperty/BaseItemProperty'\nimport { CreatePropertyInstanceProps, ModelSchema, ModelValues, } from '@/types'\n\nexport class ItemProperty<PropertyType> extends BaseItemProperty<PropertyType> implements IItemProperty<PropertyType> {\n constructor(initialValues: Partial<CreatePropertyInstanceProps>) {\n super(initialValues)\n }\n}"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;AAIM,MAAO,YAA2B,SAAQ,gBAA8B,CAAA;AAC5E,IAAA,WAAA,CAAY,aAAmD,EAAA;QAC7D,KAAK,CAAC,aAAa,CAAC;;AAEvB;;;;"}
1
+ {"version":3,"file":"ItemProperty-BW4k1h0o.js","sources":["../../src/node/ItemProperty/ItemProperty.ts"],"sourcesContent":["import { IItemProperty } from '@/interfaces'\nimport { BaseItemProperty } from '@/ItemProperty/BaseItemProperty'\nimport { CreatePropertyInstanceProps, ModelSchema, ModelValues, } from '@/types'\n\nexport class ItemProperty<PropertyType> extends BaseItemProperty<PropertyType> implements IItemProperty<PropertyType> {\n constructor(initialValues: Partial<CreatePropertyInstanceProps>) {\n super(initialValues)\n }\n}"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;AAIM,MAAO,YAA2B,SAAQ,gBAA8B,CAAA;AAC5E,IAAA,WAAA,CAAY,aAAmD,EAAA;QAC7D,KAAK,CAAC,aAAa,CAAC;;AAEvB;;;;"}