@seedprotocol/sdk 0.2.49 → 0.2.50

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 (30) hide show
  1. package/dist/{Db-CMRjCZoY.js → Db-BwkMqaQe.js} +2 -2
  2. package/dist/{Db-CMRjCZoY.js.map → Db-BwkMqaQe.js.map} +1 -1
  3. package/dist/{Db-BjoRtCFg.js → Db-jJH2s0gO.js} +2 -2
  4. package/dist/{Db-BjoRtCFg.js.map → Db-jJH2s0gO.js.map} +1 -1
  5. package/dist/{Item-7vg6XRhw.js → Item-DI3FxVPV.js} +2 -2
  6. package/dist/{Item-7vg6XRhw.js.map → Item-DI3FxVPV.js.map} +1 -1
  7. package/dist/{ItemProperty-Bcht9WTV.js → ItemProperty-CxNUwVnR.js} +2 -2
  8. package/dist/{ItemProperty-Bcht9WTV.js.map → ItemProperty-CxNUwVnR.js.map} +1 -1
  9. package/dist/{index-D3Scq_ka.js → index-CKrLHw3B.js} +30 -23
  10. package/dist/{index-D3Scq_ka.js.map → index-CKrLHw3B.js.map} +1 -1
  11. package/dist/{index-Dp3GcggF.js → index-Dv8GeuSw.js} +2 -2
  12. package/dist/index-Dv8GeuSw.js.map +1 -0
  13. package/dist/main.js +1 -1
  14. package/dist/{seed.schema.config-CS6BvsTl.js → seed.schema.config-1s-iWHq_.js} +2 -2
  15. package/dist/{seed.schema.config-CS6BvsTl.js.map → seed.schema.config-1s-iWHq_.js.map} +1 -1
  16. package/dist/src/BaseItem.ts +1 -0
  17. package/dist/src/BaseItemProperty.ts +2 -2
  18. package/dist/src/createMetadata.ts +14 -9
  19. package/dist/src/createNewItem.ts +1 -1
  20. package/dist/src/saveImageSrc.ts +0 -4
  21. package/dist/src/saveItemStorage.ts +7 -1
  22. package/dist/src/updateMetadata.ts +41 -1
  23. package/dist/types/src/Item/BaseItem.d.ts.map +1 -1
  24. package/dist/types/src/ItemProperty/service/actors/saveValueToDb/saveImageSrc.d.ts.map +1 -1
  25. package/dist/types/src/ItemProperty/service/actors/saveValueToDb/saveItemStorage.d.ts.map +1 -1
  26. package/dist/types/src/db/write/createMetadata.d.ts.map +1 -1
  27. package/dist/types/src/db/write/updateMetadata.d.ts +2 -1
  28. package/dist/types/src/db/write/updateMetadata.d.ts.map +1 -1
  29. package/package.json +1 -1
  30. package/dist/index-Dp3GcggF.js.map +0 -1
@@ -1,4 +1,4 @@
1
- import { b as BaseDb, F as FileManager } from './index-D3Scq_ka.js';
1
+ import { b as BaseDb, F as FileManager } from './index-CKrLHw3B.js';
2
2
  import { sql } from 'drizzle-orm';
3
3
  import debug from 'debug';
4
4
  import { readMigrationFiles } from 'drizzle-orm/migrator';
@@ -381,4 +381,4 @@ class Db extends BaseDb {
381
381
  BaseDb.setPlatformClass(Db);
382
382
 
383
383
  export { Db, dbExec };
384
- //# sourceMappingURL=Db-CMRjCZoY.js.map
384
+ //# sourceMappingURL=Db-BwkMqaQe.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Db-CMRjCZoY.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 { 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\";\nimport { FileManager } from \"@/browser/helpers/FileManager\";\nconst logger = debug('app:browser:db:Db')\n\nexport const dbExec = async (dbId: string, params: any[], sql: string, dbName: string, 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 async connectToDb(pathToDir: string, dbName: string): Promise<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 fs = await import('@zenfs/core')\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 FileManager.waitForFile(`${pathToDbDir}/meta/_journal.json`)\n\n await this.migrate(pathToDbDir, dbName)\n\n }\n\n setAppDb(drizzleDb)\n // const createTempTableQuery = await appDb.run(\n // sql.raw(\n // `CREATE TEMP TABLE IF NOT EXISTS temp_last_inserted_id (id INTEGER, table TEXT);`,\n // ),\n // )\n //\n // logger(\n // '[db/actors] [migrate] createTempTableQuery',\n // createTempTableQuery,\n // )\n\n // const triggersQuery = await appDb.run(\n // sql.raw(\n // `SELECT name\n // FROM main.sqlite_master\n // WHERE type = 'trigger';`,\n // ),\n // )\n //\n // logger('[db/actors] [migrate] triggersQuery', triggersQuery)\n //\n // const triggers = triggersQuery.rows.map((row) => row[0])\n //\n // const tablesQuery = await appDb.run(\n // sql.raw(\n // `SELECT name\n // FROM main.sqlite_master\n // WHERE type = 'table';`,\n // ),\n // )\n //\n // logger('[db/actors] [migrate] tablesQuery', tablesQuery)\n //\n // const tableNames = tablesQuery.rows.map((row) => row[0])\n // logger('[db/actors] [migrate] tableNames', tableNames)\n // for (const tableName of tableNames) {\n // const triggerName = `after_insert_${tableName}`\n // if (triggers.includes(triggerName)) {\n // continue\n // }\n // const createTriggerQuery = await appDb.run(\n // sql.raw(\n // `CREATE TRIGGER after_insert_${tableName}\n // AFTER INSERT ON ${tableName}\n // BEGIN\n // DELETE FROM temp_last_inserted_id;\n // INSERT INTO temp_last_inserted_id (id) VALUES (new.id);\n // END;`,\n // ),\n // )\n //\n // logger(\n // '[db/actors] [migrate] createTriggerQuery',\n // createTriggerQuery,\n // )\n // }\n }\n}\n\nBaseDb.setPlatformClass(Db)\n\nexport { Db }"],"names":["drizzleMigrate"],"mappings":"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"}
1
+ {"version":3,"file":"Db-BwkMqaQe.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 { 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\";\nimport { FileManager } from \"@/browser/helpers/FileManager\";\nconst logger = debug('app:browser:db:Db')\n\nexport const dbExec = async (dbId: string, params: any[], sql: string, dbName: string, 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 async connectToDb(pathToDir: string, dbName: string): Promise<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 fs = await import('@zenfs/core')\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 FileManager.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-D3Scq_ka.js';
1
+ import { b as BaseDb } from './index-CKrLHw3B.js';
2
2
  import { defineConfig } from 'drizzle-kit';
3
3
  import dotenv from 'dotenv';
4
4
  import process from 'node:process';
@@ -105,4 +105,4 @@ class Db extends BaseDb {
105
105
  BaseDb.setPlatformClass(Db);
106
106
 
107
107
  export { Db };
108
- //# sourceMappingURL=Db-BjoRtCFg.js.map
108
+ //# sourceMappingURL=Db-jJH2s0gO.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Db-BjoRtCFg.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-jJH2s0gO.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,4 +1,4 @@
1
- import { B as BaseItem } from './index-D3Scq_ka.js';
1
+ import { B as BaseItem } from './index-CKrLHw3B.js';
2
2
  import 'immer';
3
3
  import 'reflect-metadata';
4
4
  import '@sinclair/typebox';
@@ -31,4 +31,4 @@ class Item extends BaseItem {
31
31
  BaseItem.setPlatformClass(Item);
32
32
 
33
33
  export { Item };
34
- //# sourceMappingURL=Item-7vg6XRhw.js.map
34
+ //# sourceMappingURL=Item-DI3FxVPV.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"Item-7vg6XRhw.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-DI3FxVPV.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,4 +1,4 @@
1
- import { a as BaseItemProperty } from './index-D3Scq_ka.js';
1
+ import { a as BaseItemProperty } from './index-CKrLHw3B.js';
2
2
  import 'immer';
3
3
  import 'reflect-metadata';
4
4
  import '@sinclair/typebox';
@@ -30,4 +30,4 @@ class ItemProperty extends BaseItemProperty {
30
30
  }
31
31
 
32
32
  export { ItemProperty };
33
- //# sourceMappingURL=ItemProperty-Bcht9WTV.js.map
33
+ //# sourceMappingURL=ItemProperty-CxNUwVnR.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ItemProperty-Bcht9WTV.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-CxNUwVnR.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;;;;"}
@@ -1349,7 +1349,7 @@ const addModelsToDb = fromCallback(({ sendBack, input: { context } }) => {
1349
1349
  if (!models$1) {
1350
1350
  return;
1351
1351
  }
1352
- const { models: SeedModels } = await import('./seed.schema.config-CS6BvsTl.js');
1352
+ const { models: SeedModels } = await import('./seed.schema.config-1s-iWHq_.js');
1353
1353
  const allModels = {
1354
1354
  ...SeedModels,
1355
1355
  ...models$1,
@@ -5690,7 +5690,7 @@ const resolveRelatedValue = fromCallback(({ sendBack, input: { context } }) => {
5690
5690
  // }
5691
5691
  // }
5692
5692
 
5693
- const updateMetadata = async (metadataValues) => {
5693
+ const updateMetadata = async (metadataValues, propertyRecordSchema) => {
5694
5694
  const appDb = BaseDb.getAppDb();
5695
5695
  const { localId, ...rest } = metadataValues;
5696
5696
  if (!localId) {
@@ -5855,7 +5855,7 @@ const hydrateFromDb = fromCallback(({ sendBack, input: { context } }) => {
5855
5855
  if (propertyRecordSchema &&
5856
5856
  propertyRecordSchema.storageType &&
5857
5857
  propertyRecordSchema.storageType === 'ItemStorage') {
5858
- const { Item } = await import('./index-Dp3GcggF.js');
5858
+ const { Item } = await import('./index-Dv8GeuSw.js');
5859
5859
  const item = await Item.find({
5860
5860
  seedLocalId,
5861
5861
  modelName,
@@ -6142,15 +6142,20 @@ const createMetadata = async (metadataValues, propertyRecordSchema) => {
6142
6142
  const appDb = BaseDb.getAppDb();
6143
6143
  metadataValues.localId = generateId();
6144
6144
  if (!metadataValues.modelType && metadataValues.modelName) {
6145
- metadataValues.modelType = metadataValues.modelName.toLowerCase();
6145
+ metadataValues.modelType = toSnakeCase$1(metadataValues.modelName);
6146
6146
  }
6147
6147
  const isItemStorage = propertyRecordSchema && propertyRecordSchema.storageType === 'ItemStorage';
6148
- if (propertyRecordSchema &&
6149
- propertyRecordSchema.localStorageDir &&
6150
- isItemStorage) {
6151
- metadataValues.refResolvedValue = `${metadataValues.seedUid || metadataValues.seedLocalId}${propertyRecordSchema.filenameSuffix}`;
6152
- metadataValues.refValueType = 'file';
6153
- }
6148
+ // if (
6149
+ // propertyRecordSchema &&
6150
+ // propertyRecordSchema.localStorageDir &&
6151
+ // isItemStorage
6152
+ // ) {
6153
+ // const filename = `${metadataValues.seedUid || metadataValues.seedLocalId}${propertyRecordSchema.filenameSuffix}`
6154
+ // const filePath = path.join(propertyRecordSchema.localStorageDir, filename)
6155
+ // await fs.promises.writeFile(filePath, metadataValues.propertyValue)
6156
+ // metadataValues.propertyValue = filename
6157
+ // metadataValues.refValueType = 'file'
6158
+ // }
6154
6159
  if (!isItemStorage && !metadataValues.schemaUid && propertyRecordSchema) {
6155
6160
  const queryClient = BaseQueryClient.getQueryClient();
6156
6161
  const easClient = BaseEasClient.getEasClient();
@@ -6289,9 +6294,6 @@ const saveImageSrc = fromCallback(({ sendBack, input: { context, event } }) => {
6289
6294
  await BaseFileManager.resizeImage({ filePath, width: ImageSize.LARGE, height: ImageSize.LARGE });
6290
6295
  await BaseFileManager.resizeImage({ filePath, width: ImageSize.EXTRA_LARGE, height: ImageSize.EXTRA_LARGE });
6291
6296
  const refResolvedDisplayValue = await BaseFileManager.getContentUrlFromPath(filePath);
6292
- if (!schemaUid) {
6293
- schemaUid = getSchemaUidForSchemaDefinition(propertyName);
6294
- }
6295
6297
  let newLocalId;
6296
6298
  if (!localId) {
6297
6299
  const result = await createMetadata({
@@ -6486,9 +6488,13 @@ const saveItemStorage = fromCallback(({ sendBack, input: { context, event } }) =
6486
6488
  if (queryRows && queryRows.length) {
6487
6489
  propertyData = queryRows[0];
6488
6490
  }
6489
- if (!propertyData) {
6491
+ if (!propertyData && newValue) {
6492
+ const filename = `${seedUid || seedLocalId}${propertyRecordSchema.filenameSuffix}`;
6493
+ const writeToPath = `/files/${propertyRecordSchema.localStorageDir}/${filename}`;
6494
+ await fs.promises.writeFile(writeToPath, newValue);
6490
6495
  const propertyDataRows = await createMetadata({
6491
6496
  propertyName,
6497
+ propertyValue: filename,
6492
6498
  modelType: modelName.toLowerCase(),
6493
6499
  seedLocalId,
6494
6500
  seedUid,
@@ -6871,8 +6877,8 @@ class BaseItemProperty {
6871
6877
  }
6872
6878
  this._subject.next(renderValue);
6873
6879
  // TODO: Maybe have this only update the property?
6874
- // if (context.seedLocalId) {
6875
- // eventEmitter.emit(`item.${modelName}.${context.seedLocalId}.update`)
6880
+ // if (context.seedLocalId || context.seedUid) {
6881
+ // eventEmitter.emit(`property.${context.seedUid || context.seedLocalId}.${propertyName}.update`)
6876
6882
  // }
6877
6883
  // if (context.seedUid) {
6878
6884
  // eventEmitter.emit(`item.${modelName}.${context.seedUid}.update`)
@@ -7440,7 +7446,7 @@ const createNewItem = async ({ modelName, ...propertyData }) => {
7440
7446
  if (!modelName) {
7441
7447
  throw new Error('A model name is required for createNewItem');
7442
7448
  }
7443
- const seedType = modelName.toLowerCase();
7449
+ const seedType = toSnakeCase$1(modelName);
7444
7450
  const newSeedId = await createSeed({ type: seedType });
7445
7451
  const newVersionId = await createVersion({ seedLocalId: newSeedId, seedType: toSnakeCase$1(modelName) });
7446
7452
  const propertySchemas = getModel(modelName)?.schema;
@@ -7641,6 +7647,7 @@ class BaseItem {
7641
7647
  }
7642
7648
  const { seedLocalId, versionLocalId, } = await createNewItem({
7643
7649
  modelName: props.modelName,
7650
+ ...props,
7644
7651
  });
7645
7652
  props.seedLocalId = seedLocalId;
7646
7653
  props.latestVersionLocalId = versionLocalId;
@@ -7798,7 +7805,7 @@ const initItem = async () => {
7798
7805
  Item$2 = (await Promise.resolve().then(function () { return Item$1; })).Item;
7799
7806
  }
7800
7807
  if (!isBrowser()) {
7801
- Item$2 = (await import('./Item-7vg6XRhw.js')).Item;
7808
+ Item$2 = (await import('./Item-DI3FxVPV.js')).Item;
7802
7809
  }
7803
7810
  };
7804
7811
 
@@ -7808,17 +7815,17 @@ const initItemProperty = async () => {
7808
7815
  ItemProperty$2 = (await Promise.resolve().then(function () { return ItemProperty$1; })).ItemProperty;
7809
7816
  }
7810
7817
  if (!isBrowser()) {
7811
- ItemProperty$2 = (await import('./ItemProperty-Bcht9WTV.js')).ItemProperty;
7818
+ ItemProperty$2 = (await import('./ItemProperty-CxNUwVnR.js')).ItemProperty;
7812
7819
  }
7813
7820
  };
7814
7821
 
7815
7822
  let Db;
7816
7823
  const initDb = async () => {
7817
7824
  if (isBrowser()) {
7818
- Db = (await import('./Db-CMRjCZoY.js')).Db;
7825
+ Db = (await import('./Db-BwkMqaQe.js')).Db;
7819
7826
  }
7820
7827
  if (!isBrowser()) {
7821
- Db = (await import('./Db-BjoRtCFg.js')).Db;
7828
+ Db = (await import('./Db-jJH2s0gO.js')).Db;
7822
7829
  }
7823
7830
  // TODO: Add config for React Native
7824
7831
  };
@@ -8670,7 +8677,7 @@ const client = {
8670
8677
  arweaveDomain,
8671
8678
  filesDir,
8672
8679
  });
8673
- const { models: internalModels } = await import('./seed.schema.config-CS6BvsTl.js');
8680
+ const { models: internalModels } = await import('./seed.schema.config-1s-iWHq_.js');
8674
8681
  for (const [key, value] of Object.entries(internalModels)) {
8675
8682
  setModel(key, value);
8676
8683
  }
@@ -8742,4 +8749,4 @@ const client = {
8742
8749
  enableMapSet();
8743
8750
 
8744
8751
  export { BaseItem as B, Db as D, FileManager as F, Item as I, Json as J, List as L, Model as M, Property as P, Relation as R, Text as T, BaseItemProperty as a, BaseDb as b, ImageSrc as c, Item$2 as d, ItemProperty$2 as e, useItem as f, useItemProperties as g, useCreateItem as h, useItemProperty as i, useDeleteItem as j, useGlobalServiceStatus as k, usePublishItem as l, usePersistedSnapshots as m, useServices as n, useService as o, getCorrectId as p, getGlobalService as q, eventEmitter as r, client as s, useItems as u, withSeed as w };
8745
- //# sourceMappingURL=index-D3Scq_ka.js.map
8752
+ //# sourceMappingURL=index-CKrLHw3B.js.map