@seedprotocol/sdk 0.3.7 → 0.3.9

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 (97) hide show
  1. package/dist/addModel.js +4 -0
  2. package/dist/addModel.js.map +1 -1
  3. package/dist/main.js +11 -0
  4. package/dist/main.js.map +1 -1
  5. package/dist/src/ItemProperty/BaseItemProperty.d.ts +6 -6
  6. package/dist/src/ItemProperty/index.js +4 -0
  7. package/dist/src/ItemProperty/index.js.map +1 -0
  8. package/dist/src/ItemProperty/service/actors/hydrateFromDb.js +2 -2
  9. package/dist/src/ItemProperty/service/actors/hydrateFromDb.js.map +1 -1
  10. package/dist/src/ItemProperty/service/actors/resolveRelatedValue.d.ts.map +1 -1
  11. package/dist/src/ItemProperty/service/actors/resolveRelatedValue.js +4 -4
  12. package/dist/src/ItemProperty/service/actors/resolveRelatedValue.js.map +1 -1
  13. package/dist/src/ItemProperty/service/actors/saveValueToDb/analyzeInput.js +4 -4
  14. package/dist/src/ItemProperty/service/actors/saveValueToDb/analyzeInput.js.map +1 -1
  15. package/dist/src/ItemProperty/service/actors/saveValueToDb/index.d.ts +1 -1
  16. package/dist/src/ItemProperty/service/actors/saveValueToDb/index.d.ts.map +1 -1
  17. package/dist/src/ItemProperty/service/actors/saveValueToDb/saveImage.d.ts +5 -0
  18. package/dist/src/ItemProperty/service/actors/saveValueToDb/saveImage.d.ts.map +1 -0
  19. package/dist/src/ItemProperty/service/actors/saveValueToDb/{saveImageSrc.js → saveImage.js} +6 -6
  20. package/dist/src/ItemProperty/service/actors/saveValueToDb/saveImage.js.map +1 -0
  21. package/dist/src/ItemProperty/service/actors/saveValueToDb/saveRelation.js +2 -2
  22. package/dist/src/ItemProperty/service/actors/saveValueToDb/saveRelation.js.map +1 -1
  23. package/dist/src/ItemProperty/service/propertyMachine.d.ts +7 -7
  24. package/dist/src/ItemProperty/service/propertyMachine.js +6 -6
  25. package/dist/src/ItemProperty/service/propertyMachine.js.map +1 -1
  26. package/dist/src/browser/db/Db.d.ts.map +1 -1
  27. package/dist/src/browser/db/Db.js +35 -8
  28. package/dist/src/browser/db/Db.js.map +1 -1
  29. package/dist/src/browser/helpers/FileManager.d.ts +2 -0
  30. package/dist/src/browser/helpers/FileManager.d.ts.map +1 -1
  31. package/dist/src/browser/helpers/FileManager.js +20 -8
  32. package/dist/src/browser/helpers/FileManager.js.map +1 -1
  33. package/dist/src/browser/index.d.ts +0 -1
  34. package/dist/src/browser/index.d.ts.map +1 -1
  35. package/dist/src/browser/react/index.d.ts +2 -1
  36. package/dist/src/browser/react/index.d.ts.map +1 -1
  37. package/dist/src/browser/react/model.d.ts +7 -0
  38. package/dist/src/browser/react/model.d.ts.map +1 -0
  39. package/dist/src/browser/react/model.js +20 -0
  40. package/dist/src/browser/react/model.js.map +1 -0
  41. package/dist/src/browser/react/services.js +1 -1
  42. package/dist/src/browser/react/services.js.map +1 -1
  43. package/dist/src/browser/workers/FileDownloader.d.ts.map +1 -1
  44. package/dist/src/browser/workers/FileDownloader.js +3 -1
  45. package/dist/src/browser/workers/FileDownloader.js.map +1 -1
  46. package/dist/src/client/ClientManager.d.ts +21 -12
  47. package/dist/src/client/ClientManager.d.ts.map +1 -1
  48. package/dist/src/client/ClientManager.js +21 -0
  49. package/dist/src/client/ClientManager.js.map +1 -1
  50. package/dist/src/client/actors/saveAppState.d.ts.map +1 -1
  51. package/dist/src/client/actors/saveAppState.js +0 -1
  52. package/dist/src/client/actors/saveAppState.js.map +1 -1
  53. package/dist/src/db/read/getModels.d.ts +2 -0
  54. package/dist/src/db/read/getModels.d.ts.map +1 -0
  55. package/dist/src/events/files/download.d.ts.map +1 -1
  56. package/dist/src/events/files/download.js +0 -1
  57. package/dist/src/events/files/download.js.map +1 -1
  58. package/dist/src/events/files/index.d.ts.map +1 -1
  59. package/dist/src/events/files/index.js +0 -1
  60. package/dist/src/events/files/index.js.map +1 -1
  61. package/dist/src/events/services/allItems.d.ts.map +1 -1
  62. package/dist/src/events/services/allItems.js +0 -1
  63. package/dist/src/events/services/allItems.js.map +1 -1
  64. package/dist/src/helpers/FileManager/BaseFileManager.d.ts +2 -0
  65. package/dist/src/helpers/FileManager/BaseFileManager.d.ts.map +1 -1
  66. package/dist/src/helpers/FileManager/BaseFileManager.js +6 -0
  67. package/dist/src/helpers/FileManager/BaseFileManager.js.map +1 -1
  68. package/dist/src/helpers/constants.d.ts +1 -1
  69. package/dist/src/helpers/constants.js +1 -1
  70. package/dist/src/helpers/constants.js.map +1 -1
  71. package/dist/src/helpers/environment.js +1 -1
  72. package/dist/src/helpers/environment.js.map +1 -1
  73. package/dist/src/helpers/getSegmentedItemProperties.js +1 -1
  74. package/dist/src/helpers/getSegmentedItemProperties.js.map +1 -1
  75. package/dist/src/helpers/index.d.ts +1 -1
  76. package/dist/src/helpers/index.d.ts.map +1 -1
  77. package/dist/src/helpers/index.js +3 -3
  78. package/dist/src/helpers/index.js.map +1 -1
  79. package/dist/src/index.d.ts +8 -1
  80. package/dist/src/index.d.ts.map +1 -1
  81. package/dist/src/node/helpers/FileManager.d.ts +2 -0
  82. package/dist/src/node/helpers/FileManager.d.ts.map +1 -1
  83. package/dist/src/node/helpers/index.d.ts.map +1 -1
  84. package/dist/src/node/helpers/index.js +0 -1
  85. package/dist/src/node/helpers/index.js.map +1 -1
  86. package/dist/src/services/db/actors/migrate.js +1 -1
  87. package/dist/src/services/db/actors/migrate.js.map +1 -1
  88. package/dist/src/services/internal/helpers.js +3 -3
  89. package/dist/src/services/internal/helpers.js.map +1 -1
  90. package/dist/src/services/publish/actors/upload.js +1 -1
  91. package/dist/src/services/publish/actors/upload.js.map +1 -1
  92. package/dist/src/types/model.d.ts +2 -15
  93. package/dist/src/types/model.d.ts.map +1 -1
  94. package/package.json +7 -7
  95. package/dist/src/ItemProperty/service/actors/saveValueToDb/saveImageSrc.d.ts +0 -5
  96. package/dist/src/ItemProperty/service/actors/saveValueToDb/saveImageSrc.d.ts.map +0 -1
  97. package/dist/src/ItemProperty/service/actors/saveValueToDb/saveImageSrc.js.map +0 -1
@@ -5,7 +5,7 @@ import { initialize } from './actors/initialize.js';
5
5
  import { resolveRelatedValue } from './actors/resolveRelatedValue.js';
6
6
  import { hydrateFromDb } from './actors/hydrateFromDb.js';
7
7
  import { analyzeInput } from './actors/saveValueToDb/analyzeInput.js';
8
- import { saveImageSrc } from './actors/saveValueToDb/saveImageSrc.js';
8
+ import { saveImage } from './actors/saveValueToDb/saveImage.js';
9
9
  import { saveRelation } from './actors/saveValueToDb/saveRelation.js';
10
10
  import { saveItemStorage } from './actors/saveValueToDb/saveItemStorage.js';
11
11
 
@@ -25,7 +25,7 @@ const propertyMachine = setup({
25
25
  resolveRelatedValue,
26
26
  resolveRemoteStorage,
27
27
  analyzeInput,
28
- saveImageSrc,
28
+ saveImage,
29
29
  saveRelation,
30
30
  saveItemStorage,
31
31
  },
@@ -132,7 +132,7 @@ const propertyMachine = setup({
132
132
  saveValueToDbSuccess: {
133
133
  target: 'doneSaving',
134
134
  },
135
- saveImageSrc: 'savingImageSrc',
135
+ saveImage: 'savingImage',
136
136
  saveRelation: 'savingRelation',
137
137
  saveItemStorage: 'savingItemStorage',
138
138
  },
@@ -141,12 +141,12 @@ const propertyMachine = setup({
141
141
  input: ({ context, event }) => ({ context, event }),
142
142
  },
143
143
  },
144
- savingImageSrc: {
144
+ savingImage: {
145
145
  on: {
146
- saveImageSrcSuccess: 'doneSaving',
146
+ saveImageSuccess: 'doneSaving',
147
147
  },
148
148
  invoke: {
149
- src: 'saveImageSrc',
149
+ src: 'saveImage',
150
150
  input: ({ context, event }) => ({ context, event }),
151
151
  },
152
152
  },
@@ -1 +1 @@
1
- {"version":3,"file":"propertyMachine.js","sources":["../../../../../src/ItemProperty/service/propertyMachine.ts"],"sourcesContent":["import { assign, setup } from 'xstate'\nimport { PropertyMachineContext } from '@/types'\n\nimport { resolveRemoteStorage } from '@/ItemProperty/service/actors/resolveRemoteStorage'\nimport { waitForDb } from '@/ItemProperty/service/actors/waitForDb'\nimport { initialize } from '@/ItemProperty/service/actors/initialize'\nimport { resolveRelatedValue } from '@/ItemProperty/service/actors/resolveRelatedValue'\nimport { hydrateFromDb } from '@/ItemProperty/service/actors/hydrateFromDb'\nimport {\n saveImageSrc,\n saveItemStorage,\n saveRelation,\n} from '@/ItemProperty/service/actors/saveValueToDb'\nimport { analyzeInput } from '@/ItemProperty/service/actors/saveValueToDb/analyzeInput' // import { updateMachineContext } from '@/helpers'\n// import { updateMachineContext } from '@/helpers'\n\nexport const propertyMachine = setup({\n types: {\n context: {} as PropertyMachineContext,\n input: {} as PropertyMachineContext,\n },\n // actions: {\n // updateContext: updateMachineContext,\n // },\n actors: {\n waitForDb,\n hydrateFromDb,\n initialize,\n resolveRelatedValue,\n resolveRemoteStorage,\n analyzeInput,\n saveImageSrc,\n saveRelation,\n saveItemStorage,\n },\n}).createMachine({\n id: 'itemProperty',\n initial: 'waitingForDb',\n context: ({ input }) => input as PropertyMachineContext,\n on: {\n // reload: '.hydratingFromDb',\n save: {\n actions: assign({\n isSaving: true,\n }),\n target: '.saving',\n },\n updateContext: {\n actions: assign(({ context, event }) => {\n const newContext = Object.assign({}, context)\n\n for (let i = 0; i < Object.keys(event).length; i++) {\n const key = Object.keys(event)[i]\n if (key === 'type') {\n continue\n }\n newContext[key] = event[key]\n }\n return newContext\n }),\n },\n },\n states: {\n idle: {},\n waitingForDb: {\n on: {\n waitForDbSuccess: {\n target: 'hydratingFromDb',\n actions: assign({\n isDbReady: true,\n }),\n },\n },\n invoke: {\n src: 'waitForDb',\n input: ({ context }) => ({ context }),\n },\n },\n hydratingFromDb: {\n on: {\n hydrateFromDbSuccess: 'initializing',\n },\n invoke: {\n src: 'hydrateFromDb',\n input: ({ context }) => ({ context }),\n },\n },\n initializing: {\n on: {\n initializeSuccess: 'idle',\n isRelatedProperty: {\n target: 'resolvingRelatedValue',\n },\n hasRemoteBackup: {\n target: 'resolvingRemoteStorage',\n },\n },\n invoke: {\n src: 'initialize',\n input: ({ context, event }) => ({ context, event }),\n },\n },\n resolvingRelatedValue: {\n on: {\n resolvingRelatedValueSuccess: {\n target: 'idle',\n actions: assign({\n refResolvedDisplayValue: ({ event }) =>\n event.refResolvedDisplayValue,\n refResolvedValue: ({ event }) => event.refResolvedValue,\n }),\n },\n resolvingRelatedValueDone: {\n target: 'idle',\n },\n },\n invoke: {\n src: 'resolveRelatedValue',\n input: ({ context }) => ({ context }),\n },\n },\n resolvingRemoteStorage: {\n on: {\n resolveRemoteStorageSuccess: {\n target: 'idle',\n },\n },\n invoke: {\n src: 'resolveRemoteStorage',\n input: ({ context }) => ({ context }),\n },\n },\n saving: {\n initial: 'analyzingInput',\n states: {\n analyzingInput: {\n on: {\n saveValueToDbSuccess: {\n target: 'doneSaving',\n },\n saveImageSrc: 'savingImageSrc',\n saveRelation: 'savingRelation',\n saveItemStorage: 'savingItemStorage',\n },\n invoke: {\n src: 'analyzeInput',\n input: ({ context, event }) => ({ context, event }),\n },\n },\n savingImageSrc: {\n on: {\n saveImageSrcSuccess: 'doneSaving',\n },\n invoke: {\n src: 'saveImageSrc',\n input: ({ context, event }) => ({ context, event }),\n },\n },\n savingRelation: {\n on: {\n saveRelationSuccess: 'doneSaving',\n },\n invoke: {\n src: 'saveRelation',\n input: ({ context, event }) => ({ context, event }),\n },\n },\n savingItemStorage: {\n on: {\n saveItemStorageSuccess: 'doneSaving',\n },\n invoke: {\n src: 'saveItemStorage',\n input: ({ context, event }) => ({ context, event }),\n },\n },\n doneSaving: {\n type: 'final',\n },\n },\n onDone: {\n target: 'idle',\n actions: assign(({ context }) => {\n return {\n isSaving: false,\n }\n }),\n },\n },\n },\n\n // conflict: {\n // on: {\n // resolveConflict: {\n // target: 'saving',\n // actions: assign({\n // data: ({ context, event }) => event.output,\n // }),\n // },\n // },\n // },\n})\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"propertyMachine.js","sources":["../../../../../src/ItemProperty/service/propertyMachine.ts"],"sourcesContent":["import { assign, setup } from 'xstate'\nimport { PropertyMachineContext } from '@/types'\n\nimport { resolveRemoteStorage } from '@/ItemProperty/service/actors/resolveRemoteStorage'\nimport { waitForDb } from '@/ItemProperty/service/actors/waitForDb'\nimport { initialize } from '@/ItemProperty/service/actors/initialize'\nimport { resolveRelatedValue } from '@/ItemProperty/service/actors/resolveRelatedValue'\nimport { hydrateFromDb } from '@/ItemProperty/service/actors/hydrateFromDb'\nimport {\n saveImage,\n saveItemStorage,\n saveRelation,\n} from '@/ItemProperty/service/actors/saveValueToDb'\nimport { analyzeInput } from '@/ItemProperty/service/actors/saveValueToDb/analyzeInput' // import { updateMachineContext } from '@/helpers'\n// import { updateMachineContext } from '@/helpers'\n\nexport const propertyMachine = setup({\n types: {\n context: {} as PropertyMachineContext,\n input: {} as PropertyMachineContext,\n },\n // actions: {\n // updateContext: updateMachineContext,\n // },\n actors: {\n waitForDb,\n hydrateFromDb,\n initialize,\n resolveRelatedValue,\n resolveRemoteStorage,\n analyzeInput,\n saveImage,\n saveRelation,\n saveItemStorage,\n },\n}).createMachine({\n id: 'itemProperty',\n initial: 'waitingForDb',\n context: ({ input }) => input as PropertyMachineContext,\n on: {\n // reload: '.hydratingFromDb',\n save: {\n actions: assign({\n isSaving: true,\n }),\n target: '.saving',\n },\n updateContext: {\n actions: assign(({ context, event }) => {\n const newContext = Object.assign({}, context)\n\n for (let i = 0; i < Object.keys(event).length; i++) {\n const key = Object.keys(event)[i]\n if (key === 'type') {\n continue\n }\n newContext[key] = event[key]\n }\n return newContext\n }),\n },\n },\n states: {\n idle: {},\n waitingForDb: {\n on: {\n waitForDbSuccess: {\n target: 'hydratingFromDb',\n actions: assign({\n isDbReady: true,\n }),\n },\n },\n invoke: {\n src: 'waitForDb',\n input: ({ context }) => ({ context }),\n },\n },\n hydratingFromDb: {\n on: {\n hydrateFromDbSuccess: 'initializing',\n },\n invoke: {\n src: 'hydrateFromDb',\n input: ({ context }) => ({ context }),\n },\n },\n initializing: {\n on: {\n initializeSuccess: 'idle',\n isRelatedProperty: {\n target: 'resolvingRelatedValue',\n },\n hasRemoteBackup: {\n target: 'resolvingRemoteStorage',\n },\n },\n invoke: {\n src: 'initialize',\n input: ({ context, event }) => ({ context, event }),\n },\n },\n resolvingRelatedValue: {\n on: {\n resolvingRelatedValueSuccess: {\n target: 'idle',\n actions: assign({\n refResolvedDisplayValue: ({ event }) =>\n event.refResolvedDisplayValue,\n refResolvedValue: ({ event }) => event.refResolvedValue,\n }),\n },\n resolvingRelatedValueDone: {\n target: 'idle',\n },\n },\n invoke: {\n src: 'resolveRelatedValue',\n input: ({ context }) => ({ context }),\n },\n },\n resolvingRemoteStorage: {\n on: {\n resolveRemoteStorageSuccess: {\n target: 'idle',\n },\n },\n invoke: {\n src: 'resolveRemoteStorage',\n input: ({ context }) => ({ context }),\n },\n },\n saving: {\n initial: 'analyzingInput',\n states: {\n analyzingInput: {\n on: {\n saveValueToDbSuccess: {\n target: 'doneSaving',\n },\n saveImage: 'savingImage',\n saveRelation: 'savingRelation',\n saveItemStorage: 'savingItemStorage',\n },\n invoke: {\n src: 'analyzeInput',\n input: ({ context, event }) => ({ context, event }),\n },\n },\n savingImage: {\n on: {\n saveImageSuccess: 'doneSaving',\n },\n invoke: {\n src: 'saveImage',\n input: ({ context, event }) => ({ context, event }),\n },\n },\n savingRelation: {\n on: {\n saveRelationSuccess: 'doneSaving',\n },\n invoke: {\n src: 'saveRelation',\n input: ({ context, event }) => ({ context, event }),\n },\n },\n savingItemStorage: {\n on: {\n saveItemStorageSuccess: 'doneSaving',\n },\n invoke: {\n src: 'saveItemStorage',\n input: ({ context, event }) => ({ context, event }),\n },\n },\n doneSaving: {\n type: 'final',\n },\n },\n onDone: {\n target: 'idle',\n actions: assign(({ context }) => {\n return {\n isSaving: false,\n }\n }),\n },\n },\n },\n\n // conflict: {\n // on: {\n // resolveConflict: {\n // target: 'saving',\n // actions: assign({\n // data: ({ context, event }) => event.output,\n // }),\n // },\n // },\n // },\n})\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"Db.d.ts","sourceRoot":"","sources":["../../../../src/browser/db/Db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAIvC,OAAO,EAAW,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AASzE,cAAM,EAAG,SAAQ,MAAO,YAAW,GAAG;IAEpC,MAAM,CAAC,gBAAgB,EAAE,GAAG,CAAA;IAC5B,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B,MAAM,CAAC,KAAK,EAAE,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAA;;IAMvE,MAAM,CAAC,QAAQ;IAIf,MAAM,CAAC,YAAY;WAIN,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;WA0C3D,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAI,OAAO,CAAC,IAAI,CAAC;WA+K5D,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE;CAiC7C;AAED,OAAO,EAAE,EAAE,EAAE,CAAA"}
1
+ {"version":3,"file":"Db.d.ts","sourceRoot":"","sources":["../../../../src/browser/db/Db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,gBAAgB,CAAC;AACxC,OAAO,EAAE,GAAG,EAAE,MAAM,kBAAkB,CAAC;AAIvC,OAAO,EAAW,oBAAoB,EAAE,MAAM,0BAA0B,CAAC;AAQzE,cAAM,EAAG,SAAQ,MAAO,YAAW,GAAG;IAEpC,MAAM,CAAC,gBAAgB,EAAE,GAAG,CAAA;IAC5B,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,MAAM,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAA;IACnC,MAAM,CAAC,IAAI,EAAE,MAAM,GAAG,SAAS,CAAA;IAC/B,MAAM,CAAC,KAAK,EAAE,oBAAoB,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,CAAA;;IAMvE,MAAM,CAAC,QAAQ;IAIf,MAAM,CAAC,YAAY;WAIN,WAAW,CAAC,QAAQ,EAAE,MAAM,GAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;WAyE3D,OAAO,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAI,OAAO,CAAC,IAAI,CAAC;WA0L5D,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE;CAiC7C;AAED,OAAO,EAAE,EAAE,EAAE,CAAA"}
@@ -6,7 +6,6 @@ import { drizzle } from 'drizzle-orm/sqlite-proxy';
6
6
  import { migrate } from 'drizzle-orm/sqlite-proxy/migrator';
7
7
  import { DB_NAME_APP, BROWSER_FS_TOP_DIR } from '../../services/internal/constants.js';
8
8
  import '../../helpers/index.js';
9
- import { sqlite3Worker1Promiser } from '@sqlite.org/sqlite-wasm';
10
9
  import { BaseFileManager } from '../../helpers/FileManager/BaseFileManager.js';
11
10
 
12
11
  const logger = debug('seedSdk:browser:db:Db');
@@ -25,13 +24,35 @@ class Db extends BaseDb {
25
24
  return this.dbId;
26
25
  }
27
26
  this.filesDir = filesDir;
28
- const promiser = await new Promise((resolve) => {
29
- const _promiser = sqlite3Worker1Promiser({
30
- onready: () => {
31
- resolve(_promiser);
32
- },
27
+ if (typeof document === 'undefined') {
28
+ return;
29
+ }
30
+ let promiser;
31
+ try {
32
+ let sqlite3Worker1Promiser;
33
+ const sqliteWasm = await import('@sqlite.org/sqlite-wasm');
34
+ if (sqliteWasm && sqliteWasm.sqlite3Worker1Promiser) {
35
+ sqlite3Worker1Promiser = sqliteWasm.sqlite3Worker1Promiser;
36
+ }
37
+ if (!sqlite3Worker1Promiser && window.sqlite3Worker1Promiser) {
38
+ sqlite3Worker1Promiser = window.sqlite3Worker1Promiser;
39
+ }
40
+ if (!sqlite3Worker1Promiser) {
41
+ throw new Error('Failed to load sqlite3Worker1Promiser');
42
+ }
43
+ promiser = await new Promise((resolve) => {
44
+ const _promiser = sqlite3Worker1Promiser({
45
+ onready: () => {
46
+ resolve(_promiser);
47
+ },
48
+ });
49
+ }).catch((error) => {
50
+ console.error('Error from sqlite proxy server: ', JSON.stringify(error));
33
51
  });
34
- });
52
+ }
53
+ catch (e) {
54
+ console.error('Error from sqlite proxy server: ', JSON.stringify(e));
55
+ }
35
56
  if (!promiser) {
36
57
  throw new Error('Failed to create promiser');
37
58
  }
@@ -124,7 +145,13 @@ class Db extends BaseDb {
124
145
  }
125
146
  catch (error) {
126
147
  await BaseFileManager.waitForFile(`${pathToDbDir}/meta/_journal.json`);
127
- await this.migrate(pathToDbDir, dbName);
148
+ const journalExists = await BaseFileManager.pathExists(`${pathToDbDir}/meta/_journal.json`);
149
+ if (journalExists) {
150
+ await this.migrate(pathToDbDir, dbName);
151
+ }
152
+ if (!journalExists) {
153
+ throw new Error('Failed to migrate database');
154
+ }
128
155
  }
129
156
  this.appDb = drizzleDb;
130
157
  // const createTempTableQuery = await appDb.run(
@@ -1 +1 @@
1
- {"version":3,"file":"Db.js","sources":["../../../../../src/browser/db/Db.ts"],"sourcesContent":["import { BaseDb } from \"@/db/Db/BaseDb\";\nimport { IDb } from \"@/interfaces/IDb\";\nimport debug from \"debug\";\nimport { sql } from \"drizzle-orm\";\nimport { readMigrationFiles } from \"drizzle-orm/migrator\";\nimport { drizzle, SqliteRemoteDatabase } from \"drizzle-orm/sqlite-proxy\";\nimport { migrate as drizzleMigrate } from \"drizzle-orm/sqlite-proxy/migrator\";\nimport { BROWSER_FS_TOP_DIR, DB_NAME_APP } from \"@/services/internal/constants\";\nimport { BaseFileManager } from \"@/helpers\";\nimport { sqlite3Worker1Promiser, } from \"@sqlite.org/sqlite-wasm\";\n\nconst logger = debug('seedSdk:browser:db:Db')\n\n\nclass Db extends BaseDb implements IDb {\n\n static sqliteWasmClient: any\n static filesDir: string | undefined\n static pathToDb: string | undefined\n static dbId: string | undefined\n static appDb: SqliteRemoteDatabase<Record<string, unknown>> | undefined\n\n constructor() {\n super()\n }\n\n static getAppDb() {\n return this.appDb\n }\n\n static isAppDbReady() {\n return !!this.appDb\n }\n\n static async connectToDb(filesDir: string,): Promise<string | undefined> {\n\n if (Db.sqliteWasmClient) {\n return this.dbId\n }\n\n this.filesDir = filesDir\n\n const promiser = await new Promise<(event: string, config: Record<string, unknown>) => Promise<any>>((resolve) => {\n const _promiser = sqlite3Worker1Promiser({\n onready: () => {\n resolve(_promiser);\n },\n });\n });\n\n if (!promiser) {\n throw new Error('Failed to create promiser')\n }\n\n this.sqliteWasmClient = promiser\n\n const responseGet = await this.sqliteWasmClient('config-get', {});\n\n logger('[Db.prepareDb] Running SQLite3 version', responseGet.result.version.libVersion);\n\n const responseOpen = await this.sqliteWasmClient('open', {\n filename: `file:${filesDir}/db/${DB_NAME_APP}.sqlite3?vfs=opfs`,\n });\n const { dbId } = responseOpen;\n logger(\n '[Db.prepareDb] OPFS is available, created persisted database at',\n responseOpen.result.filename.replace(/^file:(.*?)\\?vfs=opfs/, '$1'),\n );\n\n logger('[Db.prepareDb] dbId', dbId) \n\n this.dbId = dbId\n\n return dbId\n }\n\n static async migrate(pathToDbDir: string, dbName: 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 this.exec(sql, params)\n\n // logger(`finalResult with method: ${method}`, finalResult)\n // Drizzle always waits for {rows: string[][]} or {rows: string[]} for the return value.\n\n // When the method is get, you should return a value as {rows: string[]}.\n // Otherwise, you should return {rows: string[][]}.\n\n return { rows: finalResult }\n } catch (e: any) {\n console.error('Error from sqlite proxy server: ', JSON.stringify(e))\n return { rows: [] }\n }\n },\n {\n schema: schemaGlobString,\n // logger: true,\n },\n )\n\n try {\n const zenfs = await BaseFileManager.getFs()\n\n const filesInRoot = await zenfs.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 zenfs.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 BaseFileManager.waitForFile(`${pathToDbDir}/meta/_journal.json`)\n\n await this.migrate(pathToDbDir, dbName,)\n\n }\n\n this.appDb = 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 static async exec(sql: string, params: any[]) {\n const rowsToReturnRaw: SqliteWasmResult[] = []\n const rowsValues: string[][] = []\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\n\n this.sqliteWasmClient('exec', {\n dbId:this.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 for (const currRow of rowsToReturnRaw) {\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 return rowsToReturn || []\n }\n}\n\nexport { Db }"],"names":["drizzleMigrate"],"mappings":";;;;;;;;;;;AAWA,MAAM,MAAM,GAAG,KAAK,CAAC,uBAAuB,CAAC;AAG7C,MAAM,EAAG,SAAQ,MAAM,CAAA;AAQrB,IAAA,WAAA,GAAA;AACE,QAAA,KAAK,EAAE;;AAGT,IAAA,OAAO,QAAQ,GAAA;QACb,OAAO,IAAI,CAAC,KAAK;;AAGnB,IAAA,OAAO,YAAY,GAAA;AACjB,QAAA,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK;;AAGrB,IAAA,aAAa,WAAW,CAAC,QAAgB,EAAA;AAEvC,QAAA,IAAI,EAAE,CAAC,gBAAgB,EAAE;YACvB,OAAO,IAAI,CAAC,IAAI;;AAGlB,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ;QAExB,MAAM,QAAQ,GAAG,MAAM,IAAI,OAAO,CAAmE,CAAC,OAAO,KAAI;YAC/G,MAAM,SAAS,GAAG,sBAAsB,CAAC;gBACvC,OAAO,EAAE,MAAK;oBACZ,OAAO,CAAC,SAAS,CAAC;iBACnB;AACF,aAAA,CAAC;AACJ,SAAC,CAAC;QAEF,IAAI,CAAC,QAAQ,EAAE;AACb,YAAA,MAAM,IAAI,KAAK,CAAC,2BAA2B,CAAC;;AAG9C,QAAA,IAAI,CAAC,gBAAgB,GAAG,QAAQ;QAEhC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,YAAY,EAAE,EAAE,CAAC;QAEjE,MAAM,CAAC,wCAAwC,EAAE,WAAW,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC;QAEvF,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE;AACvD,YAAA,QAAQ,EAAE,CAAA,KAAA,EAAQ,QAAQ,CAAA,IAAA,EAAO,WAAW,CAAmB,iBAAA,CAAA;AAChE,SAAA,CAAC;AACF,QAAA,MAAM,EAAE,IAAI,EAAE,GAAG,YAAY;AAC7B,QAAA,MAAM,CACJ,iEAAiE,EACjE,YAAY,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,uBAAuB,EAAE,IAAI,CAAC,CACpE;AAED,QAAA,MAAM,CAAC,qBAAqB,EAAE,IAAI,CAAC;AAEnC,QAAA,IAAI,CAAC,IAAI,GAAG,IAAI;AAEhB,QAAA,OAAO,IAAI;;AAGb,IAAA,aAAa,OAAO,CAAC,WAAmB,EAAE,MAAc,EAAA;AAEtD,QAAA,MAAM,gBAAgB,GAAG,CAAG,EAAA,kBAAkB,WAAW;AAEzD,QAAA,MAAM,SAAS,GAAG,OAAO,CACvB,OAAO,GAAG,EAAE,MAAM,EAAE,MAAM,KAAI;AAC5B,YAAA,IAAI;;;;;gBAMF,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,CAAC;;;;;AAQhD,gBAAA,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE;;YAC5B,OAAO,CAAM,EAAE;AACf,gBAAA,OAAO,CAAC,KAAK,CAAC,kCAAkC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;AACpE,gBAAA,OAAO,EAAE,IAAI,EAAE,EAAE,EAAE;;AAEvB,SAAC,EACD;AACE,YAAA,MAAM,EAAE,gBAAgB;;AAEzB,SAAA,CACF;AAED,QAAA,IAAI;AACF,YAAA,MAAM,KAAK,GAAG,MAAM,eAAe,CAAC,KAAK,EAAE;YAE3C,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC;AACrD,YAAA,MAAM,CAAC,aAAa,EAAE,WAAW,CAAC;YAClC,MAAM,UAAU,GAAG,kBAAkB,CAAC;AACpC,gBAAA,gBAAgB,EAAE,WAAW;AAC9B,aAAA,CAAC;AAEF,YAAA,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE;AACzB,gBAAA,MAAM,uBAAuB,GAAG,UAAU,CAAC,GAAG,CAC5C,CAAC,SAAS,KAAK,SAAS,CAAC,IAAI,CAC9B;AAED,gBAAA,IAAI,uBAAuB;gBAC3B,IAAI,IAAI,GAAG,EAAE;AAEb,gBAAA,IAAI;oBAEF,MAAM,oBAAoB,GAAG,MAAM,SAAS,CAAC,GAAG,CAC9C,GAAG,CAAC,GAAG,CACL,CAAA;;;AAGkC,+CAAA,CAAA,CACnC,CACF;AAED,oBAAA,MAAM,CAAC,sBAAsB,EAAE,oBAAoB,CAAC;AAEpD,oBAAA,IAAI,oBAAoB,IAAI,oBAAoB,CAAC,IAAI,IAAI,oBAAoB,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;wBAC7F,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,CAC/B,GAAG,CAAC,GAAG,CACL,CAAA;AACiC,gDAAA,CAAA,CAClC,CACF;AAED,wBAAA,IAAI,GAAG,KAAK,CAAC,IAAI;;;gBAGnB,OAAO,CAAC,EAAE;oBACV,IAAI,GAAG,EAAE;;gBAGX,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,oBAAA,uBAAuB,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC,CAAC,CAAC;;gBAGrD,IAAI,uBAAuB,EAAE;oBAC3B,IAAI,eAAe,GAAG,KAAK;AAC3B,oBAAA,KAAK,MAAM,YAAY,IAAI,uBAAuB,EAAE;wBAClD,IAAI,CAAC,uBAAuB,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;4BACnD,eAAe,GAAG,IAAI;4BACtB;;;oBAGJ,IAAI,eAAe,EAAE;AACnB,wBAAA,MAAM,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAG,EAAA,WAAW,CAAI,CAAA,EAAA,MAAM,CAAU,QAAA,CAAA,CAAC;;;;YAKrE,MAAMA,OAAc,CAClB,SAAS,EACT,OAAO,YAAY,KAAI;;AAErB,gBAAA,KAAK,MAAM,KAAK,IAAI,YAAY,EAAE;;oBAEhC,MAAM,SAAS,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;;AAEvC,aAAC,EACD;AACE,gBAAA,gBAAgB,EAAE,WAAW;AAC9B,aAAA,CACF;;QACD,OAAO,KAAK,EAAE;YAEd,MAAM,eAAe,CAAC,WAAW,CAAC,GAAG,WAAW,CAAA,mBAAA,CAAqB,CAAC;YAEtE,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,EAAE,MAAM,CAAE;;AAI1C,QAAA,IAAI,CAAC,KAAK,GAAG,SAAS;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA2DxB,IAAA,aAAa,IAAI,CAAC,GAAW,EAAE,MAAa,EAAA;QAC1C,MAAM,eAAe,GAAuB,EAAE;;;QAK9C,MAAM,YAAY,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AAG1D,YAAA,IAAI,CAAC,gBAAgB,CAAC,MAAM,EAAE;gBAC3B,IAAI,EAAC,IAAI,CAAC,IAAI;gBACd,GAAG;AACH,gBAAA,IAAI,EAAE,MAAM;AACZ,gBAAA,QAAQ,EAAE,CAAC,MAAM,KAAI;;AAEnB,oBAAA,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,SAAS,EAAE;wBAC/C,MAAM,YAAY,GAAG,EAAE;AACvB,wBAAA,KAAK,MAAM,OAAO,IAAI,eAAe,EAAE;AACrC,4BAAA,YAAY,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC;;wBAEhC,OAAO,CAAC,YAAY,CAAC;;yBAChB;;AAEL,wBAAA,eAAe,CAAC,IAAI,CAAC,MAAM,CAAC;;iBAE/B;AACF,aAAA,CAAC,CAAC,KAAK,CAAC,OAAO,KAAK,KAAI;gBACvB,MAAM,CAAC,KAAK,CAAC;AACf,aAAC,CAAC;AACJ,SAAC,CAAC;QAEF,OAAO,YAAY,IAAI,EAAE;;AAE5B;;;;"}
1
+ {"version":3,"file":"Db.js","sources":["../../../../../src/browser/db/Db.ts"],"sourcesContent":["import { BaseDb } from \"@/db/Db/BaseDb\";\nimport { IDb } from \"@/interfaces/IDb\";\nimport debug from \"debug\";\nimport { sql } from \"drizzle-orm\";\nimport { readMigrationFiles } from \"drizzle-orm/migrator\";\nimport { drizzle, SqliteRemoteDatabase } from \"drizzle-orm/sqlite-proxy\";\nimport { migrate as drizzleMigrate } from \"drizzle-orm/sqlite-proxy/migrator\";\nimport { BROWSER_FS_TOP_DIR, DB_NAME_APP } from \"@/services/internal/constants\";\nimport { BaseFileManager } from \"@/helpers\";\n\nconst logger = debug('seedSdk:browser:db:Db')\n\n\nclass Db extends BaseDb implements IDb {\n\n static sqliteWasmClient: any\n static filesDir: string | undefined\n static pathToDb: string | undefined\n static dbId: string | undefined\n static appDb: SqliteRemoteDatabase<Record<string, unknown>> | undefined\n\n constructor() {\n super()\n }\n\n static getAppDb() {\n return this.appDb\n }\n\n static isAppDbReady() {\n return !!this.appDb\n }\n\n static async connectToDb(filesDir: string,): Promise<string | undefined> {\n\n if (Db.sqliteWasmClient) {\n return this.dbId\n }\n\n this.filesDir = filesDir\n\n if (typeof document === 'undefined') {\n return\n }\n\n let promiser\n\n try {\n\n let sqlite3Worker1Promiser\n\n const sqliteWasm = await import('@sqlite.org/sqlite-wasm')\n\n if (sqliteWasm && sqliteWasm.sqlite3Worker1Promiser) {\n sqlite3Worker1Promiser = sqliteWasm.sqlite3Worker1Promiser\n }\n\n if (!sqlite3Worker1Promiser && window.sqlite3Worker1Promiser) {\n sqlite3Worker1Promiser = window.sqlite3Worker1Promiser\n }\n\n if (!sqlite3Worker1Promiser) {\n throw new Error('Failed to load sqlite3Worker1Promiser')\n }\n\n promiser = await new Promise<(event: string, config: Record<string, unknown>) => Promise<any>>((resolve) => {\n const _promiser = sqlite3Worker1Promiser({\n onready: () => {\n resolve(_promiser);\n },\n });\n }).catch((error) => {\n console.error('Error from sqlite proxy server: ', JSON.stringify(error))\n });\n\n } catch ( e ) {\n console.error('Error from sqlite proxy server: ', JSON.stringify(e))\n }\n\n\n if (!promiser) {\n throw new Error('Failed to create promiser')\n }\n\n this.sqliteWasmClient = promiser\n\n const responseGet = await this.sqliteWasmClient('config-get', {});\n\n logger('[Db.prepareDb] Running SQLite3 version', responseGet.result.version.libVersion);\n\n const responseOpen = await this.sqliteWasmClient('open', {\n filename: `file:${filesDir}/db/${DB_NAME_APP}.sqlite3?vfs=opfs`,\n });\n const { dbId } = responseOpen;\n logger(\n '[Db.prepareDb] OPFS is available, created persisted database at',\n responseOpen.result.filename.replace(/^file:(.*?)\\?vfs=opfs/, '$1'),\n );\n\n logger('[Db.prepareDb] dbId', dbId) \n\n this.dbId = dbId\n\n return dbId\n }\n\n static async migrate(pathToDbDir: string, dbName: 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 this.exec(sql, params)\n\n // logger(`finalResult with method: ${method}`, finalResult)\n // Drizzle always waits for {rows: string[][]} or {rows: string[]} for the return value.\n\n // When the method is get, you should return a value as {rows: string[]}.\n // Otherwise, you should return {rows: string[][]}.\n\n return { rows: finalResult }\n } catch (e: any) {\n console.error('Error from sqlite proxy server: ', JSON.stringify(e))\n return { rows: [] }\n }\n },\n {\n schema: schemaGlobString,\n // logger: true,\n },\n )\n\n try {\n const zenfs = await BaseFileManager.getFs()\n\n const filesInRoot = await zenfs.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 zenfs.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 BaseFileManager.waitForFile(`${pathToDbDir}/meta/_journal.json`)\n\n const journalExists = await BaseFileManager.pathExists(\n `${pathToDbDir}/meta/_journal.json`,\n )\n\n if (journalExists) {\n await this.migrate(pathToDbDir, dbName,)\n }\n\n if (!journalExists) {\n throw new Error('Failed to migrate database')\n }\n\n\n }\n\n this.appDb = 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 static async exec(sql: string, params: any[]) {\n const rowsToReturnRaw: SqliteWasmResult[] = []\n const rowsValues: string[][] = []\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\n\n this.sqliteWasmClient('exec', {\n dbId:this.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 for (const currRow of rowsToReturnRaw) {\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 return rowsToReturn || []\n }\n}\n\nexport { Db }\n"],"names":["drizzleMigrate"],"mappings":"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"}
@@ -20,6 +20,8 @@ declare class FileManager extends BaseFileManager {
20
20
  static readFile(filePath: string): Promise<File>;
21
21
  static readFileAsBuffer(filePath: string): Promise<Buffer>;
22
22
  static readFileAsString(filePath: string): Promise<string>;
23
+ static getParentDirPath(filePath: string): string;
24
+ static getFilenameFromPath(filePath: string): string;
23
25
  }
24
26
  export { FileManager };
25
27
  //# sourceMappingURL=FileManager.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"FileManager.d.ts","sourceRoot":"","sources":["../../../../src/browser/helpers/FileManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAU,uCAAuC,CAAA;AAO3E,cAAM,WAAY,SAAQ,eAAe;WAE1B,KAAK;WAKL,qBAAqB,CAAE,IAAI,EAAE,MAAM,GAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;WASlE,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;WAuBrC,gBAAgB,CAAE,EACE,cAAc,EACd,WAAW,EACX,oBAAoB,GACrB,EAAE,sBAAsB,GAAI,OAAO,CAAC,IAAI,CAAC;WAK5D,WAAW,CAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,iBAAiB,GAAI,OAAO,CAAC,IAAI,CAAC;WAK5E,eAAe,CAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,qBAAqB,GAAI,OAAO,CAAC,IAAI,CAAC;WAK1E,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;WAkC9C,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYlE;;;;;;OAMG;WACU,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa,EAAE,OAAO,GAAE,MAAc,GAAG,OAAO,CAAC,OAAO,CAAC;WAsFjG,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;WAyC/E,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WA6BzC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WAenD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;CAIjE;AAsDD,OAAO,EAAE,WAAW,EAAE,CAAA"}
1
+ {"version":3,"file":"FileManager.d.ts","sourceRoot":"","sources":["../../../../src/browser/helpers/FileManager.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAU,uCAAuC,CAAA;AAQ3E,cAAM,WAAY,SAAQ,eAAe;WAE1B,KAAK;WAKL,qBAAqB,CAAE,IAAI,EAAE,MAAM,GAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;WASlE,oBAAoB,IAAI,OAAO,CAAC,IAAI,CAAC;WAuBrC,gBAAgB,CAAE,EACE,cAAc,EACd,WAAW,EACX,oBAAoB,GACrB,EAAE,sBAAsB,GAAI,OAAO,CAAC,IAAI,CAAC;WAK5D,WAAW,CAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,iBAAiB,GAAI,OAAO,CAAC,IAAI,CAAC;WAK5E,eAAe,CAAE,EAAE,KAAK,EAAE,MAAM,EAAE,EAAE,qBAAqB,GAAI,OAAO,CAAC,IAAI,CAAC;WAK1E,UAAU,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;WAkC9C,oBAAoB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYlE;;;;;;OAMG;WACU,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAa,EAAE,OAAO,GAAE,MAAc,GAAG,OAAO,CAAC,OAAO,CAAC;WA4FjG,QAAQ,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,IAAI,GAAG,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;WAyC/E,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;WA6BzC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;WAenD,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAKhE,MAAM,CAAC,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAIjD,MAAM,CAAC,mBAAmB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;CAGrD;AAsDD,OAAO,EAAE,WAAW,EAAE,CAAA"}
@@ -2,6 +2,7 @@ import { BaseFileManager } from '../../helpers/FileManager/BaseFileManager.js';
2
2
  import { FileDownloader } from '../workers/FileDownloader.js';
3
3
  import { ImageResizer } from '../workers/ImageResizer.js';
4
4
  import debug from 'debug';
5
+ import path from 'path-browserify';
5
6
 
6
7
  const logger = debug('seedSdk:browser:helpers:FileManager');
7
8
  class FileManager extends BaseFileManager {
@@ -101,8 +102,12 @@ class FileManager extends BaseFileManager {
101
102
  * @returns {Promise<boolean>} - Resolves to true if the file exists within the timeout period, otherwise false.
102
103
  */
103
104
  static async waitForFile(filePath, interval = 1000, timeout = 60000) {
104
- const fs = await this.getFs();
105
- const fsNode = await import('node:fs');
105
+ // const fs = await this.getFs()
106
+ // const fsNode = await import('node:fs')
107
+ const pathExists = await this.pathExists(filePath);
108
+ if (pathExists) {
109
+ return true;
110
+ }
106
111
  return new Promise((resolve, reject) => {
107
112
  const startTime = Date.now();
108
113
  let isBusy = false;
@@ -112,11 +117,12 @@ class FileManager extends BaseFileManager {
112
117
  return;
113
118
  }
114
119
  isBusy = true;
115
- // TODO: Needs to read from OPFS
116
- if (fs.existsSync(filePath) && fsNode.existsSync(filePath)) {
117
- stop();
118
- resolve(true);
119
- }
120
+ // // TODO: Needs to read from OPFS
121
+ // const exists = await BaseFileManager.pathExists(filePath)
122
+ // if (exists) {
123
+ // stop()
124
+ // resolve(true)
125
+ // }
120
126
  const pathExists = await this.pathExists(filePath);
121
127
  if (pathExists) {
122
128
  stop();
@@ -256,6 +262,12 @@ class FileManager extends BaseFileManager {
256
262
  const buffer = await this.readFileAsBuffer(filePath);
257
263
  return buffer.toString('utf-8');
258
264
  }
265
+ static getParentDirPath(filePath) {
266
+ return path.dirname(filePath);
267
+ }
268
+ static getFilenameFromPath(filePath) {
269
+ return path.basename(filePath);
270
+ }
259
271
  }
260
272
  class CancelableInterval {
261
273
  constructor(task, interval) {
@@ -278,7 +290,7 @@ class CancelableInterval {
278
290
  }
279
291
  catch (error) {
280
292
  if (error instanceof DOMException && error.name === 'AbortError') {
281
- console.log('Previous task was canceled.');
293
+ logger('Previous task was canceled.');
282
294
  }
283
295
  else {
284
296
  console.error('Task error:', error);
@@ -1 +1 @@
1
- {"version":3,"file":"FileManager.js","sources":["../../../../../src/browser/helpers/FileManager.ts"],"sourcesContent":["import { BaseFileManager } from '@/helpers/FileManager/BaseFileManager'\nimport { FileDownloader } from '../workers/FileDownloader'\nimport { ImageResizer } from '../workers/ImageResizer'\nimport debug from 'debug'\n\nconst logger = debug('seedSdk:browser:helpers:FileManager')\n\nclass FileManager extends BaseFileManager {\n\n static async getFs() {\n const fs = await import('@zenfs/core')\n return fs\n }\n\n static async getContentUrlFromPath( path: string ): Promise<string | undefined> {\n\n const fileExists = await this.pathExists(path)\n if ( fileExists ) {\n const file = await this.readFile(path)\n return URL.createObjectURL(file)\n }\n }\n\n static async initializeFileSystem(): Promise<void> {\n\n const fs = await this.getFs()\n const {WebAccess} = await import('@zenfs/dom')\n const {configureSingle} = fs\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 static async pathExists(filePath: string): Promise<boolean> {\n try {\n // Access the root directory of OPFS\n const root = await navigator.storage.getDirectory();\n \n // Split the path into segments\n const parts = filePath.split('/').filter(Boolean);\n let currentDir = root;\n\n // Traverse each part of the path\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n try {\n const handle = await currentDir.getDirectoryHandle(part, { create: false });\n currentDir = handle; // Move into the directory\n } catch (error) {\n try {\n // If it's not a directory, check if it's a file\n await currentDir.getFileHandle(part, { create: false });\n // If we successfully got a file handle and it's the last part, return true\n return i === parts.length - 1;\n } catch {\n // Neither a directory nor a file exists\n return false;\n }\n }\n }\n\n return true; // Directory exists\n } catch (error) {\n return false; // Any error means the path does not exist\n }\n }\n\n static async createDirIfNotExists(filePath: string): Promise<void> {\n if (!(await this.pathExists(filePath))) {\n try {\n const fs = await this.getFs()\n await fs.promises.mkdir(filePath)\n } catch (error) {\n // This is a no-op. We tried to create a directory that already exists.\n logger('Attempted to create a directory that already exists')\n }\n }\n }\n\n /**\n * Waits for a file to exist at the specified path.\n * @param {string} filePath - The path of the file to check.\n * @param {number} interval - The interval in milliseconds between checks (default: 500ms).\n * @param {number} timeout - The timeout in milliseconds to wait for the file to exist (default: 10s).\n * @returns {Promise<boolean>} - Resolves to true if the file exists within the timeout period, otherwise false.\n */\n static async waitForFile(filePath: string, interval: number = 1000, timeout: number = 60000): Promise<boolean> {\n\n const fs = await this.getFs()\n const fsNode = await import('node:fs')\n\n return new Promise((resolve, reject) => {\n const startTime = Date.now()\n \n let isBusy = false\n\n const cancelableInterval = new CancelableInterval(async (stop) => {\n logger('waitForFile', filePath)\n if (isBusy) {\n return\n }\n isBusy = true\n // TODO: Needs to read from OPFS\n if (fs.existsSync(filePath) && fsNode.existsSync(filePath)) {\n stop()\n resolve(true)\n }\n\n const pathExists = await this.pathExists(filePath)\n if (pathExists) {\n stop()\n resolve(true)\n }\n\n if (Date.now() - startTime >= timeout) {\n stop()\n reject(new Error('Timeout exceeded while waiting for file'))\n }\n isBusy = false\n }, interval)\n\n cancelableInterval.start()\n \n // const _interval = setInterval(async () => {\n // logger('waitForFile', filePath)\n // if (isBusy) {\n // return\n // }\n // isBusy = true\n // // TODO: Needs to read from OPFS\n // if (fs.existsSync(filePath) && fsNode.existsSync(filePath)) {\n // clearInterval(_interval)\n // resolve(true)\n // }\n\n // const pathExists = await this.pathExists(filePath)\n // if (pathExists) {\n // clearInterval(_interval)\n // resolve(true)\n // }\n\n // if (Date.now() - startTime >= timeout) {\n // clearInterval(_interval)\n // reject(new Error('Timeout exceeded while waiting for file'))\n // }\n // isBusy = false\n // }, interval)\n \n // retry(\n // {\n // times: Math.ceil(timeout / interval),\n // interval: interval,\n // },\n // (callback: Function) => {\n // if (fs.existsSync(filePath) && fsNode.existsSync(filePath)) {\n // return callback(null, true) // File exists, finish with success\n // }\n // if (Date.now() - startTime >= timeout) {\n // return callback(new Error('Timeout exceeded while waiting for file'))\n // }\n // callback(new Error('File does not exist yet')) // Retry with this error\n // },\n // (err: Error, result: boolean) => {\n // if (err) {\n // return resolve(false) // Resolve as false if timeout or error occurs\n // }\n // resolve(result) // Resolve as true if file exists\n // },\n // )\n })\n }\n\n static async saveFile(filePath: string, content: string | Blob | ArrayBuffer): Promise<void> {\n try {\n // Get a handle to the OPFS root directory\n const root = await navigator.storage.getDirectory();\n \n // Split the file path into directory and file name\n const pathParts = filePath.split('/');\n const fileName = pathParts.pop();\n if (!fileName) throw new Error('Invalid file path');\n\n // Traverse directories and create them if they don't exist\n let currentDir = root;\n for (const part of pathParts) {\n if (part !== '') {\n currentDir = await currentDir.getDirectoryHandle(part, { create: true });\n }\n }\n\n // Get the file handle and create the file if it doesn't exist\n const fileHandle = await currentDir.getFileHandle(fileName, { create: true });\n\n // Create a writable stream and write the content\n const writable = await fileHandle.createWritable();\n \n if (typeof content === 'string' || content instanceof Uint8Array) {\n await writable.write(content);\n } else if (content instanceof Blob) {\n await writable.write(content);\n } else if (content instanceof ArrayBuffer) {\n await writable.write(new Blob([content]));\n } else {\n throw new Error('Unsupported content type');\n }\n\n await writable.close();\n logger(`File written successfully: ${filePath}`);\n } catch (error) {\n console.error(`Error writing to OPFS: ${error.message}`);\n }\n }\n\n static async readFile(filePath: string): Promise<File> {\n try {\n // Get a handle to the OPFS root directory\n const root = await navigator.storage.getDirectory();\n \n // Split the file path into directory and file name\n const pathParts = filePath.split('/');\n const fileName = pathParts.pop();\n if (!fileName) throw new Error('Invalid file path');\n \n // Traverse directories to reach the target file\n let currentDir = root;\n for (const part of pathParts) {\n if (part !== '') {\n currentDir = await currentDir.getDirectoryHandle(part, { create: false });\n }\n }\n \n // Get the file handle\n const fileHandle = await currentDir.getFileHandle(fileName, { create: false });\n \n // Get the file and read it as an ArrayBuffer\n return await fileHandle.getFile();\n } catch (error) {\n console.error(`Error reading from OPFS: ${error.message}`);\n throw error;\n }\n }\n\n static async readFileAsBuffer(filePath: string): Promise<Buffer> {\n try {\n\n // Get the file and read it as an ArrayBuffer\n const file = await this.readFile(filePath)\n const arrayBuffer = await file.arrayBuffer();\n\n // Convert ArrayBuffer to Buffer\n return Buffer.from(arrayBuffer);\n } catch (error) {\n console.error(`Error reading from OPFS: ${error.message}`);\n throw error;\n }\n }\n\n static async readFileAsString(filePath: string): Promise<string> {\n const buffer = await this.readFileAsBuffer(filePath)\n return buffer.toString('utf-8')\n }\n}\n\ntype AsyncTask = (stop: () => void) => Promise<void>\n\n\nclass CancelableInterval {\n private intervalId: number | null = null;\n private currentTaskAbortController: AbortController | null = null;\n\n constructor(private task: AsyncTask, private interval: number) {}\n\n start() {\n this.intervalId = window.setInterval(async () => {\n if (this.currentTaskAbortController) {\n // Cancel the previous running task\n this.currentTaskAbortController.abort();\n }\n\n // Create a new abort controller for the current task\n this.currentTaskAbortController = new AbortController();\n const signal = this.currentTaskAbortController.signal;\n\n try {\n await this.taskWithCancellation(signal);\n } catch (error) {\n if (error instanceof DOMException && error.name === 'AbortError') {\n console.log('Previous task was canceled.');\n } else {\n console.error('Task error:', error);\n }\n this.stop()\n }\n }, this.interval);\n }\n\n private async taskWithCancellation(signal: AbortSignal) {\n await this.task(() => this.stop())\n if (signal.aborted) {\n throw new DOMException('Task was aborted', 'AbortError');\n }\n }\n\n stop() {\n if (this.intervalId !== null) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n if (this.currentTaskAbortController) {\n this.currentTaskAbortController.abort();\n }\n }\n}\n\n\nexport { FileManager }\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"FileManager.js","sources":["../../../../../src/browser/helpers/FileManager.ts"],"sourcesContent":["import { BaseFileManager } from '@/helpers/FileManager/BaseFileManager'\nimport { FileDownloader } from '../workers/FileDownloader'\nimport { ImageResizer } from '../workers/ImageResizer'\nimport debug from 'debug'\nimport path from 'path-browserify'\n\nconst logger = debug('seedSdk:browser:helpers:FileManager')\n\nclass FileManager extends BaseFileManager {\n\n static async getFs() {\n const fs = await import('@zenfs/core')\n return fs\n }\n\n static async getContentUrlFromPath( path: string ): Promise<string | undefined> {\n\n const fileExists = await this.pathExists(path)\n if ( fileExists ) {\n const file = await this.readFile(path)\n return URL.createObjectURL(file)\n }\n }\n\n static async initializeFileSystem(): Promise<void> {\n\n const fs = await this.getFs()\n const {WebAccess} = await import('@zenfs/dom')\n const {configureSingle} = fs\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 static async pathExists(filePath: string): Promise<boolean> {\n try {\n // Access the root directory of OPFS\n const root = await navigator.storage.getDirectory();\n \n // Split the path into segments\n const parts = filePath.split('/').filter(Boolean);\n let currentDir = root;\n\n // Traverse each part of the path\n for (let i = 0; i < parts.length; i++) {\n const part = parts[i];\n try {\n const handle = await currentDir.getDirectoryHandle(part, { create: false });\n currentDir = handle; // Move into the directory\n } catch (error) {\n try {\n // If it's not a directory, check if it's a file\n await currentDir.getFileHandle(part, { create: false });\n // If we successfully got a file handle and it's the last part, return true\n return i === parts.length - 1;\n } catch {\n // Neither a directory nor a file exists\n return false;\n }\n }\n }\n\n return true; // Directory exists\n } catch (error) {\n return false; // Any error means the path does not exist\n }\n }\n\n static async createDirIfNotExists(filePath: string): Promise<void> {\n if (!(await this.pathExists(filePath))) {\n try {\n const fs = await this.getFs()\n await fs.promises.mkdir(filePath)\n } catch (error) {\n // This is a no-op. We tried to create a directory that already exists.\n logger('Attempted to create a directory that already exists')\n }\n }\n }\n\n /**\n * Waits for a file to exist at the specified path.\n * @param {string} filePath - The path of the file to check.\n * @param {number} interval - The interval in milliseconds between checks (default: 500ms).\n * @param {number} timeout - The timeout in milliseconds to wait for the file to exist (default: 10s).\n * @returns {Promise<boolean>} - Resolves to true if the file exists within the timeout period, otherwise false.\n */\n static async waitForFile(filePath: string, interval: number = 1000, timeout: number = 60000): Promise<boolean> {\n\n // const fs = await this.getFs()\n // const fsNode = await import('node:fs')\n const pathExists = await this.pathExists(filePath)\n\n if (pathExists) {\n return true\n }\n\n return new Promise((resolve, reject) => {\n const startTime = Date.now()\n\n let isBusy = false\n\n const cancelableInterval = new CancelableInterval(async (stop) => {\n logger('waitForFile', filePath)\n if (isBusy) {\n return\n }\n isBusy = true\n // // TODO: Needs to read from OPFS\n // const exists = await BaseFileManager.pathExists(filePath)\n // if (exists) {\n // stop()\n // resolve(true)\n // }\n\n const pathExists = await this.pathExists(filePath)\n if (pathExists) {\n stop()\n resolve(true)\n }\n\n if (Date.now() - startTime >= timeout) {\n stop()\n reject(new Error('Timeout exceeded while waiting for file'))\n }\n isBusy = false\n }, interval)\n\n cancelableInterval.start()\n \n // const _interval = setInterval(async () => {\n // logger('waitForFile', filePath)\n // if (isBusy) {\n // return\n // }\n // isBusy = true\n // // TODO: Needs to read from OPFS\n // if (fs.existsSync(filePath) && fsNode.existsSync(filePath)) {\n // clearInterval(_interval)\n // resolve(true)\n // }\n\n // const pathExists = await this.pathExists(filePath)\n // if (pathExists) {\n // clearInterval(_interval)\n // resolve(true)\n // }\n\n // if (Date.now() - startTime >= timeout) {\n // clearInterval(_interval)\n // reject(new Error('Timeout exceeded while waiting for file'))\n // }\n // isBusy = false\n // }, interval)\n \n // retry(\n // {\n // times: Math.ceil(timeout / interval),\n // interval: interval,\n // },\n // (callback: Function) => {\n // if (fs.existsSync(filePath) && fsNode.existsSync(filePath)) {\n // return callback(null, true) // File exists, finish with success\n // }\n // if (Date.now() - startTime >= timeout) {\n // return callback(new Error('Timeout exceeded while waiting for file'))\n // }\n // callback(new Error('File does not exist yet')) // Retry with this error\n // },\n // (err: Error, result: boolean) => {\n // if (err) {\n // return resolve(false) // Resolve as false if timeout or error occurs\n // }\n // resolve(result) // Resolve as true if file exists\n // },\n // )\n })\n }\n\n static async saveFile(filePath: string, content: string | Blob | ArrayBuffer): Promise<void> {\n try {\n // Get a handle to the OPFS root directory\n const root = await navigator.storage.getDirectory();\n \n // Split the file path into directory and file name\n const pathParts = filePath.split('/');\n const fileName = pathParts.pop();\n if (!fileName) throw new Error('Invalid file path');\n\n // Traverse directories and create them if they don't exist\n let currentDir = root;\n for (const part of pathParts) {\n if (part !== '') {\n currentDir = await currentDir.getDirectoryHandle(part, { create: true });\n }\n }\n\n // Get the file handle and create the file if it doesn't exist\n const fileHandle = await currentDir.getFileHandle(fileName, { create: true });\n\n // Create a writable stream and write the content\n const writable = await fileHandle.createWritable();\n \n if (typeof content === 'string' || content instanceof Uint8Array) {\n await writable.write(content);\n } else if (content instanceof Blob) {\n await writable.write(content);\n } else if (content instanceof ArrayBuffer) {\n await writable.write(new Blob([content]));\n } else {\n throw new Error('Unsupported content type');\n }\n\n await writable.close();\n logger(`File written successfully: ${filePath}`);\n } catch (error) {\n console.error(`Error writing to OPFS: ${error.message}`);\n }\n }\n\n static async readFile(filePath: string): Promise<File> {\n try {\n // Get a handle to the OPFS root directory\n const root = await navigator.storage.getDirectory();\n \n // Split the file path into directory and file name\n const pathParts = filePath.split('/');\n const fileName = pathParts.pop();\n if (!fileName) throw new Error('Invalid file path');\n \n // Traverse directories to reach the target file\n let currentDir = root;\n for (const part of pathParts) {\n if (part !== '') {\n currentDir = await currentDir.getDirectoryHandle(part, { create: false });\n }\n }\n \n // Get the file handle\n const fileHandle = await currentDir.getFileHandle(fileName, { create: false });\n \n // Get the file and read it as an ArrayBuffer\n return await fileHandle.getFile();\n } catch (error) {\n console.error(`Error reading from OPFS: ${error.message}`);\n throw error;\n }\n }\n\n static async readFileAsBuffer(filePath: string): Promise<Buffer> {\n try {\n\n // Get the file and read it as an ArrayBuffer\n const file = await this.readFile(filePath)\n const arrayBuffer = await file.arrayBuffer();\n\n // Convert ArrayBuffer to Buffer\n return Buffer.from(arrayBuffer);\n } catch (error) {\n console.error(`Error reading from OPFS: ${error.message}`);\n throw error;\n }\n }\n\n static async readFileAsString(filePath: string): Promise<string> {\n const buffer = await this.readFileAsBuffer(filePath)\n return buffer.toString('utf-8')\n }\n\n static getParentDirPath(filePath: string): string {\n return path.dirname(filePath)\n }\n\n static getFilenameFromPath(filePath: string): string {\n return path.basename(filePath)\n }\n}\n\ntype AsyncTask = (stop: () => void) => Promise<void>\n\n\nclass CancelableInterval {\n private intervalId: number | null = null;\n private currentTaskAbortController: AbortController | null = null;\n\n constructor(private task: AsyncTask, private interval: number) {}\n\n start() {\n this.intervalId = window.setInterval(async () => {\n if (this.currentTaskAbortController) {\n // Cancel the previous running task\n this.currentTaskAbortController.abort();\n }\n\n // Create a new abort controller for the current task\n this.currentTaskAbortController = new AbortController();\n const signal = this.currentTaskAbortController.signal;\n\n try {\n await this.taskWithCancellation(signal);\n } catch (error) {\n if (error instanceof DOMException && error.name === 'AbortError') {\n logger('Previous task was canceled.');\n } else {\n console.error('Task error:', error);\n }\n this.stop()\n }\n }, this.interval);\n }\n\n private async taskWithCancellation(signal: AbortSignal) {\n await this.task(() => this.stop())\n if (signal.aborted) {\n throw new DOMException('Task was aborted', 'AbortError');\n }\n }\n\n stop() {\n if (this.intervalId !== null) {\n clearInterval(this.intervalId);\n this.intervalId = null;\n }\n if (this.currentTaskAbortController) {\n this.currentTaskAbortController.abort();\n }\n }\n}\n\n\nexport { FileManager }\n"],"names":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
1
  export * from './db/Db';
2
- export * from './db/sqlWasmClient';
3
2
  export * from './react';
4
3
  export * from './Item';
5
4
  export * from './ItemProperty';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/browser/index.ts"],"names":[],"mappings":"AAGA,cAAc,SAAS,CAAA;AACvB,cAAc,oBAAoB,CAAA;AAClC,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,cAAc,gBAAgB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/browser/index.ts"],"names":[],"mappings":"AAGA,cAAc,SAAS,CAAA;AACvB,cAAc,SAAS,CAAA;AACvB,cAAc,QAAQ,CAAA;AACtB,cAAc,gBAAgB,CAAA"}
@@ -2,5 +2,6 @@ export * from './item';
2
2
  export * from './property';
3
3
  export * from './services';
4
4
  export * from './db';
5
- export { useDeleteItem } from '@/browser/react/trash';
5
+ export { useDeleteItem } from './trash';
6
+ export { useModels } from './model';
6
7
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/browser/react/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,MAAM,CAAA;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/browser/react/index.ts"],"names":[],"mappings":"AAAA,cAAc,QAAQ,CAAA;AACtB,cAAc,YAAY,CAAA;AAC1B,cAAc,YAAY,CAAA;AAC1B,cAAc,MAAM,CAAA;AACpB,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { ModelClassType } from '@/types';
2
+ export declare const useModels: () => {
3
+ models: {
4
+ [key: string]: ModelClassType;
5
+ } | undefined;
6
+ };
7
+ //# sourceMappingURL=model.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../../src/browser/react/model.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,cAAc,EAAE,MAAM,SAAS,CAAA;AAExC,eAAO,MAAM,SAAS;;;;CAgBrB,CAAA"}
@@ -0,0 +1,20 @@
1
+ import { useState } from 'react';
2
+ import { useSelector } from '@xstate/react';
3
+ import { getGlobalService } from '../../services/global/globalMachine.js';
4
+
5
+ const useModels = () => {
6
+ const [_models, setModels] = useState();
7
+ const globalService = getGlobalService();
8
+ const models = useSelector(globalService, (snapshot) => {
9
+ if (snapshot && snapshot.context && snapshot.context.models) {
10
+ return snapshot.context.models;
11
+ }
12
+ return;
13
+ });
14
+ return {
15
+ models,
16
+ };
17
+ };
18
+
19
+ export { useModels };
20
+ //# sourceMappingURL=model.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model.js","sources":["../../../../../src/browser/react/model.ts"],"sourcesContent":["import { useState } from 'react'\nimport { useSelector } from '@xstate/react'\nimport { getGlobalService } from '@/services/global/globalMachine'\nimport { ModelClassType } from '@/types'\n\nexport const useModels = () => {\n\n const [_models, setModels] = useState<{ [key: string]: ModelClassType } | undefined>()\n\n const globalService = getGlobalService()\n\n const models = useSelector(globalService, (snapshot) => {\n if (snapshot && snapshot.context && snapshot.context.models) {\n return snapshot.context.models\n }\n return\n })\n\n return {\n models,\n }\n}\n"],"names":[],"mappings":";;;;AAKO,MAAM,SAAS,GAAG,MAAK;IAE5B,MAAM,CAAC,OAAO,EAAE,SAAS,CAAC,GAAG,QAAQ,EAAiD;AAEtF,IAAA,MAAM,aAAa,GAAG,gBAAgB,EAAE;IAExC,MAAM,MAAM,GAAG,WAAW,CAAC,aAAa,EAAE,CAAC,QAAQ,KAAI;AACrD,QAAA,IAAI,QAAQ,IAAI,QAAQ,CAAC,OAAO,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE;AAC3D,YAAA,OAAO,QAAQ,CAAC,OAAO,CAAC,MAAM;;QAEhC;AACF,KAAC,CAAC;IAEF,OAAO;QACL,MAAM;KACP;AACH;;;;"}
@@ -176,7 +176,7 @@ const usePersistedSnapshots = () => {
176
176
  }
177
177
  const initialize = async () => {
178
178
  const persistedSnapshots = await load();
179
- console.log('persistedSnapshots:', persistedSnapshots);
179
+ logger('persistedSnapshots:', persistedSnapshots);
180
180
  setInitialized(true);
181
181
  };
182
182
  initialize();
@@ -1 +1 @@
1
- {"version":3,"file":"services.js","sources":["../../../../../src/browser/react/services.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react'\nimport { ActorRef, InspectedEventEvent } from 'xstate'\nimport { orderBy } from 'lodash-es'\nimport { produce } from 'immer'\nimport { eventEmitter } from '@/eventBus'\nimport pluralize from 'pluralize'\nimport { getGlobalService } from '@/services/global/globalMachine'\nimport { useSelector } from '@xstate/react'\nimport debug from 'debug'\nimport { appState } from '@/seedSchema'\nimport { like } from 'drizzle-orm'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { MachineIds } from '@/services/internal/constants'\n\nconst logger = debug('seedSdk:react:services')\n\nconst finalStrings = ['idle', 'ready', 'done', 'success', 'initialized']\n\nexport const getServiceName = (service: ActorRef<any, any>) => {\n let name = 'actor'\n if (service && service.uniqueKey) {\n name = service.uniqueKey\n }\n if (service && !service.uniqueKey && service.logic && service.logic.config) {\n name = getServiceUniqueKey(service)\n }\n return name\n}\n\nexport const getServiceValue = (\n service: ActorRef<any, any>,\n): string | undefined => {\n let value\n if (service && service.getSnapshot() && service.getSnapshot().value) {\n value = service.getSnapshot().value\n }\n if (getServiceName(service) === 'global') {\n if (\n value &&\n typeof value === 'object' &&\n Object.keys(value).length > 0 &&\n Object.keys(value)[0] === 'initialized'\n ) {\n value = 'ready'\n }\n }\n if (value && typeof value === 'object') {\n value = JSON.stringify(value)\n }\n return value\n}\n\nexport const getServiceUniqueKey = (service: ActorRef<any, any>) => {\n if (!service || !service.logic || !service.logic.config || !service._snapshot) {\n return\n }\n const config = service.logic.config\n if (!config.id) {\n return\n }\n let uniqueKey = config.id\n if (config.id.includes('@seedSdk/')) {\n uniqueKey = config.id.match(/^.*@seedSdk\\/(\\w+)[\\.\\w]*/)[1]\n }\n let snapshot\n try {\n snapshot = service.getSnapshot()\n } catch (error) {\n logger('Error:', error)\n return uniqueKey\n }\n if (snapshot) {\n const context = snapshot.context\n if (context && context.dbName) {\n uniqueKey = context.dbName\n }\n if (context && context.modelNamePlural) {\n uniqueKey = context.modelNamePlural\n }\n if (context && context.modelName) {\n uniqueKey = pluralize(context.modelName.toLowerCase())\n }\n }\n return uniqueKey\n}\n\nexport const useService = (service: ActorRef<any, any>) => {\n const [timeElapsed, setTimeElapsed] = useState(0)\n\n const getPercentComplete = (service: ActorRef<any, any>) => {\n let percentComplete = 0\n if (service.logic.states) {\n const stateNames = []\n const startupStates = []\n\n for (const [stateName, state] of Object.entries(service.logic.states)) {\n if (state.tags.includes('loading')) {\n stateNames.push(stateName)\n startupStates.push(state)\n }\n }\n\n const totalStates = startupStates.length\n const value = getServiceValue(service)\n if (finalStrings.includes(value)) {\n return 0\n }\n const stateIndex = stateNames.indexOf(value)\n percentComplete = (stateIndex / totalStates) * 100\n }\n return percentComplete\n }\n\n const updateTime = useCallback(\n (interval) => {\n const context = service.getSnapshot().context\n const status = service.getSnapshot().value\n if (\n status === 'done' ||\n status === 'success' ||\n status === 'idle' ||\n status === 'ready'\n ) {\n clearInterval(interval)\n return\n }\n setTimeElapsed((timeElapsed) => timeElapsed + 1)\n },\n [service],\n )\n\n const startInterval = useCallback(() => {\n const interval = setInterval(() => {\n updateTime(interval)\n }, 1000)\n return interval\n }, [updateTime, service])\n\n useEffect(() => {\n const interval = startInterval()\n return () => clearInterval(interval)\n }, [])\n\n return {\n name: getServiceName(service),\n timeElapsed,\n value: getServiceValue(service),\n percentComplete: getPercentComplete(service),\n uniqueKey: getServiceUniqueKey(service),\n }\n}\n\nexport const useIsDbReady = () => {\n const [isDbReady, setIsDbReady] = useState(false)\n\n const { internalStatus } = useGlobalServiceStatus()\n\n useEffect(() => {\n if (internalStatus === 'ready') {\n setIsDbReady(true)\n }\n }, [internalStatus])\n\n return isDbReady\n}\n\nexport const usePersistedSnapshots = () => {\n const [initialized, setInitialized] = useState(false)\n\n const hasSavedSnapshots = useHasSavedSnapshots()\n\n const { services, percentComplete } = useServices()\n\n // Helper function to save all actor snapshots to the database\n const save = useCallback(async () => {\n for (const actor of services) {\n const uniqueKey = getServiceUniqueKey(actor)\n logger(\n `would save to db with snapshot__${uniqueKey}:`,\n JSON.stringify(actor.getPersistedSnapshot()),\n )\n // await writeAppState(\n // `snapshot__${uniqueKey}`,\n // JSON.stringify(actor.getPersistedSnapshot()),\n // )\n }\n }, [services])\n\n // Helper function to load persisted snapshots from the database\n const load = useCallback(async () => {\n const appDb = BaseDb.getAppDb()\n\n if (!appDb) {\n return []\n }\n\n const persistedSnapshots = await appDb\n .select()\n .from(appState)\n .where(like(appState.key, 'snapshot__%'))\n return persistedSnapshots\n }, [])\n\n useEffect(() => {\n if (!hasSavedSnapshots || initialized) {\n return\n }\n const initialize = async () => {\n const persistedSnapshots = await load()\n console.log('persistedSnapshots:', persistedSnapshots)\n setInitialized(true)\n }\n\n initialize()\n\n return () => {\n save() // Save snapshots on unmount\n }\n }, [hasSavedSnapshots, initialized])\n}\n\nexport const useHasSavedSnapshots = () => {\n const [hasSavedSnapshots, setHasSavedSnapshots] = useState(false)\n\n const isDbReady = useIsDbReady()\n\n useEffect(() => {\n if (isDbReady) {\n const _checkForSnapshots = async (): Promise<void> => {\n const appDb = BaseDb.getAppDb()\n\n const rows = await appDb\n .select()\n .from(appState)\n .where(like(appState.key, 'snapshot__%'))\n\n if (rows && rows.length > 0) {\n setHasSavedSnapshots(true)\n }\n }\n\n _checkForSnapshots()\n }\n }, [isDbReady])\n\n return hasSavedSnapshots\n}\n\nexport const useServices = () => {\n const [actors, setActors] = useState<ActorRef<any, any>[]>([])\n const [percentComplete, setPercentComplete] = useState(5)\n\n const actorsMap = new Map<string, ActorRef<any, any>>()\n\n useEffect(() => {\n const globalServiceListener = (eventObj: InspectedEventEvent) => {\n if (eventObj && eventObj.event && eventObj.event.type === 'init') {\n return\n }\n if (\n !eventObj || \n !eventObj.actorRef || \n !eventObj.actorRef.logic || \n !eventObj.actorRef.logic.config ||\n !eventObj.actorRef._snapshot\n ) {\n return\n }\n \n const service = eventObj.actorRef\n const services = [service]\n\n if (service.logic.config.id === MachineIds.GLOBAL) {\n const context = service.getSnapshot().context\n const keys = Object.keys(context)\n for (const key of keys) {\n if (!key.startsWith('internal') && key.endsWith('Service')) {\n const allItemsService = context[key]\n services.push(allItemsService)\n }\n }\n }\n\n services.forEach((innerService) => {\n const uniqueKey = getServiceUniqueKey(innerService)\n if (!uniqueKey) {\n return\n }\n innerService.uniqueKey = uniqueKey\n actorsMap.set(uniqueKey, innerService)\n })\n\n let actorsArray = Array.from(actorsMap.values())\n actorsArray = orderBy(actorsArray, (a) => a.logic.config.id, ['asc'])\n\n setActors(\n produce(actors, (draft) => {\n return actorsArray\n }),\n )\n }\n\n eventEmitter.addListener('inspect.globalService', globalServiceListener)\n\n return () => {\n eventEmitter.removeListener(\n 'inspect.globalService',\n globalServiceListener,\n )\n }\n }, [])\n\n useEffect(() => {\n const globalService = actors.find(\n (actor) => getServiceName(actor) === 'global',\n )\n const internalService = actors.find(\n (actor) => getServiceName(actor) === 'internal',\n )\n if (!globalService || !internalService) {\n return\n }\n if (\n getServiceValue(globalService) === 'initialized' &&\n getServiceValue(internalService) === 'ready'\n ) {\n const denominator = actors.length\n const finishedActors = actors.filter((actor) => {\n const value = getServiceValue(actor)\n return finalStrings.includes(value)\n })\n const numerator = finishedActors.length\n const percentComplete = (numerator / denominator) * 100\n setPercentComplete(percentComplete)\n }\n }, [actors])\n\n return {\n services: actors,\n percentComplete,\n }\n}\n\nexport const useGlobalServiceStatus = () => {\n const globalService = getGlobalService()\n\n const status = useSelector(globalService, (snapshot) => {\n return snapshot.value\n })\n\n const internalStatus = useSelector(\n globalService.getSnapshot().context.internalService,\n (snapshot) => {\n if (!snapshot) {\n return\n }\n return snapshot.value\n },\n )\n\n const internalService = useSelector(globalService, (snapshot) => {\n return snapshot.context.internalService\n })\n\n return {\n status,\n internalStatus,\n }\n}\n"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"services.js","sources":["../../../../../src/browser/react/services.ts"],"sourcesContent":["import { useCallback, useEffect, useState } from 'react'\nimport { ActorRef, InspectedEventEvent } from 'xstate'\nimport { orderBy } from 'lodash-es'\nimport { produce } from 'immer'\nimport { eventEmitter } from '@/eventBus'\nimport pluralize from 'pluralize'\nimport { getGlobalService } from '@/services/global/globalMachine'\nimport { useSelector } from '@xstate/react'\nimport debug from 'debug'\nimport { appState } from '@/seedSchema'\nimport { like } from 'drizzle-orm'\nimport { BaseDb } from '@/db/Db/BaseDb'\nimport { MachineIds } from '@/services/internal/constants'\n\nconst logger = debug('seedSdk:react:services')\n\nconst finalStrings = ['idle', 'ready', 'done', 'success', 'initialized']\n\nexport const getServiceName = (service: ActorRef<any, any>) => {\n let name = 'actor'\n if (service && service.uniqueKey) {\n name = service.uniqueKey\n }\n if (service && !service.uniqueKey && service.logic && service.logic.config) {\n name = getServiceUniqueKey(service)\n }\n return name\n}\n\nexport const getServiceValue = (\n service: ActorRef<any, any>,\n): string | undefined => {\n let value\n if (service && service.getSnapshot() && service.getSnapshot().value) {\n value = service.getSnapshot().value\n }\n if (getServiceName(service) === 'global') {\n if (\n value &&\n typeof value === 'object' &&\n Object.keys(value).length > 0 &&\n Object.keys(value)[0] === 'initialized'\n ) {\n value = 'ready'\n }\n }\n if (value && typeof value === 'object') {\n value = JSON.stringify(value)\n }\n return value\n}\n\nexport const getServiceUniqueKey = (service: ActorRef<any, any>) => {\n if (!service || !service.logic || !service.logic.config || !service._snapshot) {\n return\n }\n const config = service.logic.config\n if (!config.id) {\n return\n }\n let uniqueKey = config.id\n if (config.id.includes('@seedSdk/')) {\n uniqueKey = config.id.match(/^.*@seedSdk\\/(\\w+)[\\.\\w]*/)[1]\n }\n let snapshot\n try {\n snapshot = service.getSnapshot()\n } catch (error) {\n logger('Error:', error)\n return uniqueKey\n }\n if (snapshot) {\n const context = snapshot.context\n if (context && context.dbName) {\n uniqueKey = context.dbName\n }\n if (context && context.modelNamePlural) {\n uniqueKey = context.modelNamePlural\n }\n if (context && context.modelName) {\n uniqueKey = pluralize(context.modelName.toLowerCase())\n }\n }\n return uniqueKey\n}\n\nexport const useService = (service: ActorRef<any, any>) => {\n const [timeElapsed, setTimeElapsed] = useState(0)\n\n const getPercentComplete = (service: ActorRef<any, any>) => {\n let percentComplete = 0\n if (service.logic.states) {\n const stateNames = []\n const startupStates = []\n\n for (const [stateName, state] of Object.entries(service.logic.states)) {\n if (state.tags.includes('loading')) {\n stateNames.push(stateName)\n startupStates.push(state)\n }\n }\n\n const totalStates = startupStates.length\n const value = getServiceValue(service)\n if (finalStrings.includes(value)) {\n return 0\n }\n const stateIndex = stateNames.indexOf(value)\n percentComplete = (stateIndex / totalStates) * 100\n }\n return percentComplete\n }\n\n const updateTime = useCallback(\n (interval) => {\n const context = service.getSnapshot().context\n const status = service.getSnapshot().value\n if (\n status === 'done' ||\n status === 'success' ||\n status === 'idle' ||\n status === 'ready'\n ) {\n clearInterval(interval)\n return\n }\n setTimeElapsed((timeElapsed) => timeElapsed + 1)\n },\n [service],\n )\n\n const startInterval = useCallback(() => {\n const interval = setInterval(() => {\n updateTime(interval)\n }, 1000)\n return interval\n }, [updateTime, service])\n\n useEffect(() => {\n const interval = startInterval()\n return () => clearInterval(interval)\n }, [])\n\n return {\n name: getServiceName(service),\n timeElapsed,\n value: getServiceValue(service),\n percentComplete: getPercentComplete(service),\n uniqueKey: getServiceUniqueKey(service),\n }\n}\n\nexport const useIsDbReady = () => {\n const [isDbReady, setIsDbReady] = useState(false)\n\n const { internalStatus } = useGlobalServiceStatus()\n\n useEffect(() => {\n if (internalStatus === 'ready') {\n setIsDbReady(true)\n }\n }, [internalStatus])\n\n return isDbReady\n}\n\nexport const usePersistedSnapshots = () => {\n const [initialized, setInitialized] = useState(false)\n\n const hasSavedSnapshots = useHasSavedSnapshots()\n\n const { services, percentComplete } = useServices()\n\n // Helper function to save all actor snapshots to the database\n const save = useCallback(async () => {\n for (const actor of services) {\n const uniqueKey = getServiceUniqueKey(actor)\n logger(\n `would save to db with snapshot__${uniqueKey}:`,\n JSON.stringify(actor.getPersistedSnapshot()),\n )\n // await writeAppState(\n // `snapshot__${uniqueKey}`,\n // JSON.stringify(actor.getPersistedSnapshot()),\n // )\n }\n }, [services])\n\n // Helper function to load persisted snapshots from the database\n const load = useCallback(async () => {\n const appDb = BaseDb.getAppDb()\n\n if (!appDb) {\n return []\n }\n\n const persistedSnapshots = await appDb\n .select()\n .from(appState)\n .where(like(appState.key, 'snapshot__%'))\n return persistedSnapshots\n }, [])\n\n useEffect(() => {\n if (!hasSavedSnapshots || initialized) {\n return\n }\n const initialize = async () => {\n const persistedSnapshots = await load()\n logger('persistedSnapshots:', persistedSnapshots)\n setInitialized(true)\n }\n\n initialize()\n\n return () => {\n save() // Save snapshots on unmount\n }\n }, [hasSavedSnapshots, initialized])\n}\n\nexport const useHasSavedSnapshots = () => {\n const [hasSavedSnapshots, setHasSavedSnapshots] = useState(false)\n\n const isDbReady = useIsDbReady()\n\n useEffect(() => {\n if (isDbReady) {\n const _checkForSnapshots = async (): Promise<void> => {\n const appDb = BaseDb.getAppDb()\n\n const rows = await appDb\n .select()\n .from(appState)\n .where(like(appState.key, 'snapshot__%'))\n\n if (rows && rows.length > 0) {\n setHasSavedSnapshots(true)\n }\n }\n\n _checkForSnapshots()\n }\n }, [isDbReady])\n\n return hasSavedSnapshots\n}\n\nexport const useServices = () => {\n const [actors, setActors] = useState<ActorRef<any, any>[]>([])\n const [percentComplete, setPercentComplete] = useState(5)\n\n const actorsMap = new Map<string, ActorRef<any, any>>()\n\n useEffect(() => {\n const globalServiceListener = (eventObj: InspectedEventEvent) => {\n if (eventObj && eventObj.event && eventObj.event.type === 'init') {\n return\n }\n if (\n !eventObj || \n !eventObj.actorRef || \n !eventObj.actorRef.logic || \n !eventObj.actorRef.logic.config ||\n !eventObj.actorRef._snapshot\n ) {\n return\n }\n \n const service = eventObj.actorRef\n const services = [service]\n\n if (service.logic.config.id === MachineIds.GLOBAL) {\n const context = service.getSnapshot().context\n const keys = Object.keys(context)\n for (const key of keys) {\n if (!key.startsWith('internal') && key.endsWith('Service')) {\n const allItemsService = context[key]\n services.push(allItemsService)\n }\n }\n }\n\n services.forEach((innerService) => {\n const uniqueKey = getServiceUniqueKey(innerService)\n if (!uniqueKey) {\n return\n }\n innerService.uniqueKey = uniqueKey\n actorsMap.set(uniqueKey, innerService)\n })\n\n let actorsArray = Array.from(actorsMap.values())\n actorsArray = orderBy(actorsArray, (a) => a.logic.config.id, ['asc'])\n\n setActors(\n produce(actors, (draft) => {\n return actorsArray\n }),\n )\n }\n\n eventEmitter.addListener('inspect.globalService', globalServiceListener)\n\n return () => {\n eventEmitter.removeListener(\n 'inspect.globalService',\n globalServiceListener,\n )\n }\n }, [])\n\n useEffect(() => {\n const globalService = actors.find(\n (actor) => getServiceName(actor) === 'global',\n )\n const internalService = actors.find(\n (actor) => getServiceName(actor) === 'internal',\n )\n if (!globalService || !internalService) {\n return\n }\n if (\n getServiceValue(globalService) === 'initialized' &&\n getServiceValue(internalService) === 'ready'\n ) {\n const denominator = actors.length\n const finishedActors = actors.filter((actor) => {\n const value = getServiceValue(actor)\n return finalStrings.includes(value)\n })\n const numerator = finishedActors.length\n const percentComplete = (numerator / denominator) * 100\n setPercentComplete(percentComplete)\n }\n }, [actors])\n\n return {\n services: actors,\n percentComplete,\n }\n}\n\nexport const useGlobalServiceStatus = () => {\n const globalService = getGlobalService()\n\n const status = useSelector(globalService, (snapshot) => {\n return snapshot.value\n })\n\n const internalStatus = useSelector(\n globalService.getSnapshot().context.internalService,\n (snapshot) => {\n if (!snapshot) {\n return\n }\n return snapshot.value\n },\n )\n\n const internalService = useSelector(globalService, (snapshot) => {\n return snapshot.context.internalService\n })\n\n return {\n status,\n internalStatus,\n }\n}\n"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"FileDownloader.d.ts","sourceRoot":"","sources":["../../../../src/browser/workers/FileDownloader.ts"],"names":[],"mappings":"AAKA,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,cAAc,CAAe;IACrC,OAAO,CAAC,aAAa,CAAQ;;IAUtB,WAAW,0DAA+D,sBAAsB,KAAG,OAAO,CAAC,IAAI,CAAC,CA2CtH;CACF"}
1
+ {"version":3,"file":"FileDownloader.d.ts","sourceRoot":"","sources":["../../../../src/browser/workers/FileDownloader.ts"],"names":[],"mappings":"AAMA,qBAAa,cAAc;IACzB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,cAAc,CAAe;IACrC,OAAO,CAAC,aAAa,CAAQ;;IAUtB,WAAW,0DAA+D,sBAAsB,KAAG,OAAO,CAAC,IAAI,CAAC,CA2CtH;CACF"}