@seedprotocol/sdk 0.3.31 → 0.4.1

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 (1220) hide show
  1. package/README.md +15 -2
  2. package/dist/Item/Item.js +954 -0
  3. package/dist/Item/Item.js.map +1 -0
  4. package/dist/Item/queries.js +66 -0
  5. package/dist/Item/queries.js.map +1 -0
  6. package/dist/Item/service/actors/fetchDataFromEas.js +94 -0
  7. package/dist/Item/service/actors/fetchDataFromEas.js.map +1 -0
  8. package/dist/Item/service/actors/hydrateExistingItem.js +124 -0
  9. package/dist/Item/service/actors/hydrateExistingItem.js.map +1 -0
  10. package/dist/Item/service/actors/hydrateNewItem.js.map +1 -0
  11. package/dist/Item/service/actors/initialize.js +50 -0
  12. package/dist/Item/service/actors/initialize.js.map +1 -0
  13. package/dist/Item/service/actors/loadOrCreateItem.js +210 -0
  14. package/dist/Item/service/actors/loadOrCreateItem.js.map +1 -0
  15. package/dist/Item/service/actors/reload.js.map +1 -0
  16. package/dist/Item/service/actors/waitForDb.js.map +1 -0
  17. package/dist/Item/service/itemMachineSingle.js +211 -0
  18. package/dist/Item/service/itemMachineSingle.js.map +1 -0
  19. package/dist/ItemProperty/ItemProperty.js +613 -0
  20. package/dist/ItemProperty/ItemProperty.js.map +1 -0
  21. package/dist/ItemProperty/service/actors/hydrateFromDb.js +207 -0
  22. package/dist/ItemProperty/service/actors/hydrateFromDb.js.map +1 -0
  23. package/dist/ItemProperty/service/actors/initialize.js +74 -0
  24. package/dist/ItemProperty/service/actors/initialize.js.map +1 -0
  25. package/dist/ItemProperty/service/actors/loadOrCreateProperty.js +125 -0
  26. package/dist/ItemProperty/service/actors/loadOrCreateProperty.js.map +1 -0
  27. package/dist/ItemProperty/service/actors/resolveRelatedValue.js +321 -0
  28. package/dist/ItemProperty/service/actors/resolveRelatedValue.js.map +1 -0
  29. package/dist/ItemProperty/service/actors/resolveRemoteStorage.js.map +1 -0
  30. package/dist/ItemProperty/service/actors/saveValueToDb/analyzeInput.js +111 -0
  31. package/dist/ItemProperty/service/actors/saveValueToDb/analyzeInput.js.map +1 -0
  32. package/dist/ItemProperty/service/actors/saveValueToDb/saveImage.js.map +1 -0
  33. package/dist/ItemProperty/service/actors/saveValueToDb/saveItemStorage.js +121 -0
  34. package/dist/ItemProperty/service/actors/saveValueToDb/saveItemStorage.js.map +1 -0
  35. package/dist/ItemProperty/service/actors/saveValueToDb/saveRelation.js +85 -0
  36. package/dist/ItemProperty/service/actors/saveValueToDb/saveRelation.js.map +1 -0
  37. package/dist/ItemProperty/service/actors/waitForDb.js.map +1 -0
  38. package/dist/ItemProperty/service/propertyMachine.js +233 -0
  39. package/dist/ItemProperty/service/propertyMachine.js.map +1 -0
  40. package/dist/Model/Model.js +1831 -0
  41. package/dist/Model/Model.js.map +1 -0
  42. package/dist/Model/index.js +8 -0
  43. package/dist/Model/index.js.map +1 -0
  44. package/dist/Model/service/actors/createModelProperties.js +102 -0
  45. package/dist/Model/service/actors/createModelProperties.js.map +1 -0
  46. package/dist/Model/service/actors/loadOrCreateModel.js +397 -0
  47. package/dist/Model/service/actors/loadOrCreateModel.js.map +1 -0
  48. package/dist/Model/service/actors/validateModel.js +123 -0
  49. package/dist/Model/service/actors/validateModel.js.map +1 -0
  50. package/dist/Model/service/modelMachine.js +385 -0
  51. package/dist/Model/service/modelMachine.js.map +1 -0
  52. package/dist/ModelProperty/ModelProperty.js +841 -0
  53. package/dist/ModelProperty/ModelProperty.js.map +1 -0
  54. package/dist/ModelProperty/service/actors/compareAndMarkDraft.js +119 -0
  55. package/dist/ModelProperty/service/actors/compareAndMarkDraft.js.map +1 -0
  56. package/dist/ModelProperty/service/actors/saveToSchema.js +108 -0
  57. package/dist/ModelProperty/service/actors/saveToSchema.js.map +1 -0
  58. package/dist/ModelProperty/service/actors/validateProperty.js +129 -0
  59. package/dist/ModelProperty/service/actors/validateProperty.js.map +1 -0
  60. package/dist/ModelProperty/service/modelPropertyMachine.js +275 -0
  61. package/dist/ModelProperty/service/modelPropertyMachine.js.map +1 -0
  62. package/dist/Schema/Schema.js +1732 -0
  63. package/dist/Schema/Schema.js.map +1 -0
  64. package/dist/Schema/errors.js +14 -0
  65. package/dist/Schema/errors.js.map +1 -0
  66. package/dist/Schema/index.js +7 -0
  67. package/dist/Schema/index.js.map +1 -0
  68. package/dist/Schema/service/actors/checkExistingSchema.js +454 -0
  69. package/dist/Schema/service/actors/checkExistingSchema.js.map +1 -0
  70. package/dist/Schema/service/actors/createModelInstances.js +71 -0
  71. package/dist/Schema/service/actors/createModelInstances.js.map +1 -0
  72. package/dist/Schema/service/actors/createPropertyInstances.js +86 -0
  73. package/dist/Schema/service/actors/createPropertyInstances.js.map +1 -0
  74. package/dist/Schema/service/actors/loadOrCreateSchema.js +1336 -0
  75. package/dist/Schema/service/actors/loadOrCreateSchema.js.map +1 -0
  76. package/dist/Schema/service/actors/validateSchema.js +65 -0
  77. package/dist/Schema/service/actors/validateSchema.js.map +1 -0
  78. package/dist/Schema/service/actors/verifyModelInstancesInCache.js +88 -0
  79. package/dist/Schema/service/actors/verifyModelInstancesInCache.js.map +1 -0
  80. package/dist/Schema/service/actors/verifyModelsInDb.js +107 -0
  81. package/dist/Schema/service/actors/verifyModelsInDb.js.map +1 -0
  82. package/dist/Schema/service/actors/verifyPropertiesInDb.js +131 -0
  83. package/dist/Schema/service/actors/verifyPropertiesInDb.js.map +1 -0
  84. package/dist/Schema/service/actors/verifyPropertyInstancesInCache.js +88 -0
  85. package/dist/Schema/service/actors/verifyPropertyInstancesInCache.js.map +1 -0
  86. package/dist/Schema/service/actors/verifySchemaInDb.js +85 -0
  87. package/dist/Schema/service/actors/verifySchemaInDb.js.map +1 -0
  88. package/dist/Schema/service/actors/writeModelsToDb.js +185 -0
  89. package/dist/Schema/service/actors/writeModelsToDb.js.map +1 -0
  90. package/dist/Schema/service/actors/writePropertiesToDb.js +69 -0
  91. package/dist/Schema/service/actors/writePropertiesToDb.js.map +1 -0
  92. package/dist/Schema/service/actors/writeSchemaToDb.js +137 -0
  93. package/dist/Schema/service/actors/writeSchemaToDb.js.map +1 -0
  94. package/dist/Schema/service/addModelsMachine.js +545 -0
  95. package/dist/Schema/service/addModelsMachine.js.map +1 -0
  96. package/dist/Schema/service/schemaMachine.js +667 -0
  97. package/dist/Schema/service/schemaMachine.js.map +1 -0
  98. package/dist/Schema/service/validation/SchemaValidationService.js +565 -0
  99. package/dist/Schema/service/validation/SchemaValidationService.js.map +1 -0
  100. package/dist/Schema/validation.js +15 -0
  101. package/dist/Schema/validation.js.map +1 -0
  102. package/dist/browser/db/Db.js +484 -0
  103. package/dist/browser/db/Db.js.map +1 -0
  104. package/dist/browser/db/drizzleFiles.js +1022 -0
  105. package/dist/browser/db/drizzleFiles.js.map +1 -0
  106. package/dist/browser/helpers/ArweaveClient.js +13 -0
  107. package/dist/browser/helpers/ArweaveClient.js.map +1 -0
  108. package/dist/browser/helpers/EasClient.js +16 -0
  109. package/dist/browser/helpers/EasClient.js.map +1 -0
  110. package/dist/browser/helpers/FileManager.js +415 -0
  111. package/dist/browser/helpers/FileManager.js.map +1 -0
  112. package/dist/browser/helpers/PathResolver.js +64 -0
  113. package/dist/browser/helpers/PathResolver.js.map +1 -0
  114. package/dist/browser/helpers/QueryClient.js +33 -0
  115. package/dist/browser/helpers/QueryClient.js.map +1 -0
  116. package/dist/browser/react/client.js +16 -0
  117. package/dist/browser/react/client.js.map +1 -0
  118. package/dist/browser/react/db.js +7 -0
  119. package/dist/browser/react/db.js.map +1 -0
  120. package/dist/browser/react/item.js +192 -0
  121. package/dist/browser/react/item.js.map +1 -0
  122. package/dist/browser/react/itemProperty.js +545 -0
  123. package/dist/browser/react/itemProperty.js.map +1 -0
  124. package/dist/browser/react/liveQuery.js +95 -0
  125. package/dist/browser/react/liveQuery.js.map +1 -0
  126. package/dist/browser/react/model.js +276 -0
  127. package/dist/browser/react/model.js.map +1 -0
  128. package/dist/browser/react/modelProperty.js +412 -0
  129. package/dist/browser/react/modelProperty.js.map +1 -0
  130. package/dist/browser/react/schema.js +387 -0
  131. package/dist/browser/react/schema.js.map +1 -0
  132. package/dist/browser/react/services.js +47 -0
  133. package/dist/browser/react/services.js.map +1 -0
  134. package/dist/browser/react/trash.js.map +1 -0
  135. package/dist/browser/workers/FileDownloader.js.map +1 -0
  136. package/dist/browser/workers/ImageResizer.js.map +1 -0
  137. package/dist/browser/workers/filesDownload.js.map +1 -0
  138. package/dist/browser/workers/imageResize.js.map +1 -0
  139. package/dist/client/ClientManager.js +177 -0
  140. package/dist/client/ClientManager.js.map +1 -0
  141. package/dist/client/actors/addModelsToDb.js +150 -0
  142. package/dist/client/actors/addModelsToDb.js.map +1 -0
  143. package/dist/client/actors/addModelsToStore.js +28 -0
  144. package/dist/client/actors/addModelsToStore.js.map +1 -0
  145. package/dist/client/actors/dbInit.js +38 -0
  146. package/dist/client/actors/dbInit.js.map +1 -0
  147. package/dist/client/actors/fileSystemInit.js +43 -0
  148. package/dist/client/actors/fileSystemInit.js.map +1 -0
  149. package/dist/client/actors/platformClassesInit.js +175 -0
  150. package/dist/client/actors/platformClassesInit.js.map +1 -0
  151. package/dist/client/actors/processSchemaFiles.js +169 -0
  152. package/dist/client/actors/processSchemaFiles.js.map +1 -0
  153. package/dist/client/actors/saveAppState.js +80 -0
  154. package/dist/client/actors/saveAppState.js.map +1 -0
  155. package/dist/client/actors/saveConfig.js +110 -0
  156. package/dist/client/actors/saveConfig.js.map +1 -0
  157. package/dist/client/clientManagerMachine.js +191 -0
  158. package/dist/client/clientManagerMachine.js.map +1 -0
  159. package/dist/client/constants.js +80 -0
  160. package/dist/client/constants.js.map +1 -0
  161. package/dist/db/Db/BaseDb.js +55 -0
  162. package/dist/db/Db/BaseDb.js.map +1 -0
  163. package/dist/db/drizzle/drizzle/0000_married_malice.sql +121 -0
  164. package/dist/db/drizzle/drizzle/0001_sweet_bruce_banner.sql +2 -0
  165. package/dist/db/drizzle/drizzle/0002_bitter_proudstar.sql +3 -0
  166. package/dist/db/drizzle/drizzle/0003_cultured_senator_kelly.sql +3 -0
  167. package/dist/db/drizzle/drizzle/meta/0000_snapshot.json +792 -0
  168. package/dist/db/drizzle/drizzle/meta/0001_snapshot.json +806 -0
  169. package/dist/db/drizzle/drizzle/meta/0002_snapshot.json +829 -0
  170. package/dist/db/drizzle/drizzle/meta/0003_snapshot.json +850 -0
  171. package/dist/db/drizzle/drizzle/meta/_journal.json +34 -0
  172. package/dist/db/read/getExistingItem.js +33 -0
  173. package/dist/db/read/getExistingItem.js.map +1 -0
  174. package/dist/db/read/getItem.js +26 -0
  175. package/dist/db/read/getItem.js.map +1 -0
  176. package/dist/db/read/getItemData.js +88 -0
  177. package/dist/db/read/getItemData.js.map +1 -0
  178. package/dist/db/read/getItemProperties.js +53 -0
  179. package/dist/db/read/getItemProperties.js.map +1 -0
  180. package/dist/db/read/getItemProperty.js +34 -0
  181. package/dist/db/read/getItemProperty.js.map +1 -0
  182. package/dist/db/read/getItems.js +53 -0
  183. package/dist/db/read/getItems.js.map +1 -0
  184. package/dist/db/read/getMetadata.js +36 -0
  185. package/dist/db/read/getMetadata.js.map +1 -0
  186. package/dist/db/read/getModelSchemas.js +63 -0
  187. package/dist/db/read/getModelSchemas.js.map +1 -0
  188. package/dist/db/read/getPropertyData.js +42 -0
  189. package/dist/db/read/getPropertyData.js.map +1 -0
  190. package/dist/db/read/getPublishPayload.js +294 -0
  191. package/dist/db/read/getPublishPayload.js.map +1 -0
  192. package/dist/db/read/getPublishUploads.js +166 -0
  193. package/dist/db/read/getPublishUploads.js.map +1 -0
  194. package/dist/db/read/getRelationValueData.js +34 -0
  195. package/dist/db/read/getRelationValueData.js.map +1 -0
  196. package/dist/db/read/getSchemaUidForModel.js +28 -0
  197. package/dist/db/read/getSchemaUidForModel.js.map +1 -0
  198. package/dist/db/read/getSeedData.js +32 -0
  199. package/dist/db/read/getSeedData.js.map +1 -0
  200. package/dist/db/read/getStorageTransactionIdForSeedUid.js +34 -0
  201. package/dist/db/read/getStorageTransactionIdForSeedUid.js.map +1 -0
  202. package/dist/db/read/getVersionData.js +37 -0
  203. package/dist/db/read/getVersionData.js.map +1 -0
  204. package/dist/db/read/subqueries/metadataLatest.js +39 -0
  205. package/dist/db/read/subqueries/metadataLatest.js.map +1 -0
  206. package/dist/db/read/subqueries/versionData.js +31 -0
  207. package/dist/db/read/subqueries/versionData.js.map +1 -0
  208. package/dist/db/write/createMetadata.js +94 -0
  209. package/dist/db/write/createMetadata.js.map +1 -0
  210. package/dist/db/write/createNewItem.js +43 -0
  211. package/dist/db/write/createNewItem.js.map +1 -0
  212. package/dist/db/write/createSeed.js +32 -0
  213. package/dist/db/write/createSeed.js.map +1 -0
  214. package/dist/db/write/createSeeds.js +29 -0
  215. package/dist/db/write/createSeeds.js.map +1 -0
  216. package/dist/db/write/createVersion.js +29 -0
  217. package/dist/db/write/createVersion.js.map +1 -0
  218. package/dist/db/write/deleteItem.js +25 -0
  219. package/dist/db/write/deleteItem.js.map +1 -0
  220. package/dist/db/write/saveAppState.js +30 -0
  221. package/dist/db/write/saveAppState.js.map +1 -0
  222. package/dist/db/write/saveMetadata.js +26 -0
  223. package/dist/db/write/saveMetadata.js.map +1 -0
  224. package/dist/db/write/updateItemPropertyValue.js +165 -0
  225. package/dist/db/write/updateItemPropertyValue.js.map +1 -0
  226. package/dist/db/write/updateMetadata.js +38 -0
  227. package/dist/db/write/updateMetadata.js.map +1 -0
  228. package/dist/eas.js +176 -0
  229. package/dist/eas.js.map +1 -0
  230. package/dist/eventBus.js.map +1 -0
  231. package/dist/events/files/download.js +191 -0
  232. package/dist/events/files/download.js.map +1 -0
  233. package/dist/events/files/index.js +23 -0
  234. package/dist/events/files/index.js.map +1 -0
  235. package/dist/events/index.js +28 -0
  236. package/dist/events/index.js.map +1 -0
  237. package/dist/events/item/index.js.map +1 -0
  238. package/dist/events/item/publish.js +50 -0
  239. package/dist/events/item/publish.js.map +1 -0
  240. package/dist/events/item/syncDbWithEas.js +453 -0
  241. package/dist/events/item/syncDbWithEas.js.map +1 -0
  242. package/dist/events/services/allItems.js +10 -0
  243. package/dist/events/services/allItems.js.map +1 -0
  244. package/dist/events/services/index.js.map +1 -0
  245. package/dist/feed.js +534 -0
  246. package/dist/feed.js.map +1 -0
  247. package/dist/graphql/gql/gql.js +27 -0
  248. package/dist/graphql/gql/gql.js.map +1 -0
  249. package/dist/graphql/gql/graphql.js +129 -0
  250. package/dist/graphql/gql/graphql.js.map +1 -0
  251. package/dist/helpers/ArweaveClient/BaseArweaveClient.js.map +1 -0
  252. package/dist/helpers/ArweaveClient/index.js +61 -0
  253. package/dist/helpers/ArweaveClient/index.js.map +1 -0
  254. package/dist/helpers/ArweaveClient/queries.js.map +1 -0
  255. package/dist/helpers/EasClient/BaseEasClient.js +20 -0
  256. package/dist/helpers/EasClient/BaseEasClient.js.map +1 -0
  257. package/dist/helpers/FileManager/BaseFileManager.js +119 -0
  258. package/dist/helpers/FileManager/BaseFileManager.js.map +1 -0
  259. package/dist/helpers/PathResolver/BasePathResolver.js +20 -0
  260. package/dist/helpers/PathResolver/BasePathResolver.js.map +1 -0
  261. package/dist/helpers/QueryClient/BaseQueryClient.js.map +1 -0
  262. package/dist/helpers/constants.js +107 -0
  263. package/dist/helpers/constants.js.map +1 -0
  264. package/dist/helpers/crypto.js.map +1 -0
  265. package/dist/helpers/db.js +1335 -0
  266. package/dist/helpers/db.js.map +1 -0
  267. package/dist/helpers/environment.js +14 -0
  268. package/dist/helpers/environment.js.map +1 -0
  269. package/dist/helpers/file/queries.js +15 -0
  270. package/dist/helpers/file/queries.js.map +1 -0
  271. package/dist/helpers/getSchemaForItemProperty.js +65 -0
  272. package/dist/helpers/getSchemaForItemProperty.js.map +1 -0
  273. package/dist/helpers/getSegmentedItemProperties.js +71 -0
  274. package/dist/helpers/getSegmentedItemProperties.js.map +1 -0
  275. package/dist/helpers/index.js +101 -0
  276. package/dist/helpers/index.js.map +1 -0
  277. package/dist/helpers/model.js +24 -0
  278. package/dist/helpers/model.js.map +1 -0
  279. package/dist/helpers/property/index.js +110 -0
  280. package/dist/helpers/property/index.js.map +1 -0
  281. package/dist/helpers/property.js +286 -0
  282. package/dist/helpers/property.js.map +1 -0
  283. package/dist/helpers/reactiveProxy.js +87 -0
  284. package/dist/helpers/reactiveProxy.js.map +1 -0
  285. package/dist/helpers/schema.js +473 -0
  286. package/dist/helpers/schema.js.map +1 -0
  287. package/dist/helpers/updateMachineContext.js.map +1 -0
  288. package/dist/helpers/updateSchema.js +721 -0
  289. package/dist/helpers/updateSchema.js.map +1 -0
  290. package/dist/imports/json.js +1129 -0
  291. package/dist/imports/json.js.map +1 -0
  292. package/dist/imports/markdown.js +141 -0
  293. package/dist/imports/markdown.js.map +1 -0
  294. package/dist/main.cjs +81 -0
  295. package/dist/main.cjs.map +1 -0
  296. package/dist/main.js +34 -29
  297. package/dist/main.js.map +1 -1
  298. package/dist/node/codegen/drizzle.js +136 -0
  299. package/dist/node/codegen/drizzle.js.map +1 -0
  300. package/dist/node/codegen/templates/model.njk +4 -0
  301. package/dist/node/db/Db.js +332 -0
  302. package/dist/node/db/Db.js.map +1 -0
  303. package/dist/node/helpers/ArweaveClient.js +13 -0
  304. package/dist/node/helpers/ArweaveClient.js.map +1 -0
  305. package/dist/node/helpers/EasClient.js +16 -0
  306. package/dist/node/helpers/EasClient.js.map +1 -0
  307. package/dist/node/helpers/FileManager.js +151 -0
  308. package/dist/node/helpers/FileManager.js.map +1 -0
  309. package/dist/node/helpers/PathResolver.js +182 -0
  310. package/dist/node/helpers/PathResolver.js.map +1 -0
  311. package/dist/node/helpers/QueryClient.js.map +1 -0
  312. package/dist/node/helpers/index.js +62 -0
  313. package/dist/node/helpers/index.js.map +1 -0
  314. package/dist/node/helpers/scripts.js +121 -0
  315. package/dist/node/helpers/scripts.js.map +1 -0
  316. package/dist/node/webpack/index.js.map +1 -0
  317. package/dist/node.js +40 -0
  318. package/dist/node.js.map +1 -0
  319. package/dist/node_modules/.bun/events@3.3.0/node_modules/events/events.d.ts +31 -0
  320. package/dist/node_modules/.bun/events@3.3.0/node_modules/events/events.d.ts.map +1 -0
  321. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.d.mts +90 -0
  322. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.d.mts.map +1 -0
  323. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/index.d.ts +28 -0
  324. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/index.d.ts.map +1 -0
  325. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/common.d.ts +7 -0
  326. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/common.d.ts.map +1 -0
  327. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/dumper.d.ts +2 -0
  328. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/dumper.d.ts.map +1 -0
  329. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/exception.d.ts +12 -0
  330. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/exception.d.ts.map +1 -0
  331. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/loader.d.ts +3 -0
  332. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/loader.d.ts.map +1 -0
  333. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/schema/core.d.ts +3 -0
  334. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/schema/core.d.ts.map +1 -0
  335. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/schema/default.d.ts +3 -0
  336. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/schema/default.d.ts.map +1 -0
  337. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/schema/failsafe.d.ts +4 -0
  338. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/schema/failsafe.d.ts.map +1 -0
  339. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/schema/json.d.ts +3 -0
  340. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/schema/json.d.ts.map +1 -0
  341. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/schema.d.ts +7 -0
  342. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/schema.d.ts.map +1 -0
  343. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/snippet.d.ts +3 -0
  344. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/snippet.d.ts.map +1 -0
  345. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/binary.d.ts +4 -0
  346. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/binary.d.ts.map +1 -0
  347. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/bool.d.ts +4 -0
  348. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/bool.d.ts.map +1 -0
  349. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/float.d.ts +4 -0
  350. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/float.d.ts.map +1 -0
  351. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/int.d.ts +4 -0
  352. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/int.d.ts.map +1 -0
  353. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/map.d.ts +4 -0
  354. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/map.d.ts.map +1 -0
  355. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/merge.d.ts +4 -0
  356. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/merge.d.ts.map +1 -0
  357. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/null.d.ts +4 -0
  358. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/null.d.ts.map +1 -0
  359. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/omap.d.ts +4 -0
  360. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/omap.d.ts.map +1 -0
  361. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/pairs.d.ts +4 -0
  362. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/pairs.d.ts.map +1 -0
  363. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/seq.d.ts +4 -0
  364. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/seq.d.ts.map +1 -0
  365. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/set.d.ts +4 -0
  366. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/set.d.ts.map +1 -0
  367. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/str.d.ts +4 -0
  368. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/str.d.ts.map +1 -0
  369. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/timestamp.d.ts +4 -0
  370. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/timestamp.d.ts.map +1 -0
  371. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type.d.ts +18 -0
  372. package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type.d.ts.map +1 -0
  373. package/dist/node_modules/.bun/process@0.11.10/node_modules/process/index.d.ts +3 -0
  374. package/dist/node_modules/.bun/process@0.11.10/node_modules/process/index.d.ts.map +1 -0
  375. package/dist/node_modules/.bun/punycode@1.4.1/node_modules/punycode/punycode.d.ts +1 -0
  376. package/dist/node_modules/.bun/punycode@1.4.1/node_modules/punycode/punycode.d.ts.map +1 -0
  377. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/add-abort-signal.d.ts +3 -0
  378. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/add-abort-signal.d.ts.map +1 -0
  379. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/buffer_list.d.ts +19 -0
  380. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/buffer_list.d.ts.map +1 -0
  381. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/compose.d.ts +3 -0
  382. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/compose.d.ts.map +1 -0
  383. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/destroy.d.ts +6 -0
  384. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/destroy.d.ts.map +1 -0
  385. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/duplex.d.ts +12 -0
  386. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/duplex.d.ts.map +1 -0
  387. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/duplexify.d.ts +3 -0
  388. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/duplexify.d.ts.map +1 -0
  389. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/end-of-stream.d.ts +7 -0
  390. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/end-of-stream.d.ts.map +1 -0
  391. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/from.d.ts +3 -0
  392. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/from.d.ts.map +1 -0
  393. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/legacy.d.ts +7 -0
  394. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/legacy.d.ts.map +1 -0
  395. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/operators.d.ts +31 -0
  396. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/operators.d.ts.map +1 -0
  397. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/passthrough.d.ts +7 -0
  398. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/passthrough.d.ts.map +1 -0
  399. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/pipeline.d.ts +3 -0
  400. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/pipeline.d.ts.map +1 -0
  401. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/readable.d.ts +55 -0
  402. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/readable.d.ts.map +1 -0
  403. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/state.d.ts +4 -0
  404. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/state.d.ts.map +1 -0
  405. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/transform.d.ts +12 -0
  406. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/transform.d.ts.map +1 -0
  407. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/utils.d.ts +33 -0
  408. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/utils.d.ts.map +1 -0
  409. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/writable.d.ts +59 -0
  410. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/writable.d.ts.map +1 -0
  411. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/validators.d.ts +199 -0
  412. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/validators.d.ts.map +1 -0
  413. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/ours/errors.d.ts +8 -0
  414. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/ours/errors.d.ts.map +1 -0
  415. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/ours/index.d.ts +2 -0
  416. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/ours/index.d.ts.map +1 -0
  417. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/ours/primordials.d.ts +51 -0
  418. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/ours/primordials.d.ts.map +1 -0
  419. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/ours/util/inspect.d.ts +3 -0
  420. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/ours/util/inspect.d.ts.map +1 -0
  421. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/ours/util.d.ts +22 -0
  422. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/ours/util.d.ts.map +1 -0
  423. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/stream/promises.d.ts +4 -0
  424. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/stream/promises.d.ts.map +1 -0
  425. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/stream.d.ts +3 -0
  426. package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/stream.d.ts.map +1 -0
  427. package/dist/node_modules/.bun/string_decoder@1.3.0/node_modules/string_decoder/lib/string_decoder.d.ts +33 -0
  428. package/dist/node_modules/.bun/string_decoder@1.3.0/node_modules/string_decoder/lib/string_decoder.d.ts.map +1 -0
  429. package/dist/node_modules/.bun/url@0.11.4/node_modules/url/url.d.ts +26 -0
  430. package/dist/node_modules/.bun/url@0.11.4/node_modules/url/url.d.ts.map +1 -0
  431. package/dist/scripts/build-with-tests.d.ts +3 -0
  432. package/dist/scripts/build-with-tests.d.ts.map +1 -0
  433. package/dist/scripts/sync-versions.d.ts +7 -0
  434. package/dist/scripts/sync-versions.d.ts.map +1 -0
  435. package/dist/scripts/track-drizzle-changes.d.ts +13 -0
  436. package/dist/scripts/track-drizzle-changes.d.ts.map +1 -0
  437. package/dist/scripts/vite.config.d.ts +1 -1
  438. package/dist/seedSchema/AppStateSchema.js.map +1 -0
  439. package/dist/seedSchema/ConfigSchema.js.map +1 -0
  440. package/dist/seedSchema/MetadataSchema.js.map +1 -0
  441. package/dist/seedSchema/ModelSchema.js +40 -0
  442. package/dist/seedSchema/ModelSchema.js.map +1 -0
  443. package/dist/seedSchema/ModelSchema.ts +19 -6
  444. package/dist/seedSchema/ModelSchemaSchema.js +12 -0
  445. package/dist/seedSchema/ModelSchemaSchema.js.map +1 -0
  446. package/dist/seedSchema/ModelSchemaSchema.ts +12 -0
  447. package/dist/seedSchema/ModelUidSchema.js +18 -0
  448. package/dist/seedSchema/ModelUidSchema.js.map +1 -0
  449. package/dist/seedSchema/PropertyUidSchema.js +18 -0
  450. package/dist/seedSchema/PropertyUidSchema.js.map +1 -0
  451. package/dist/seedSchema/SEEDPROTOCOL_Seed_Protocol_v1.json +83 -0
  452. package/dist/seedSchema/SEEDPROTOCOL_Seed_Protocol_v1.json.js +94 -0
  453. package/dist/seedSchema/SEEDPROTOCOL_Seed_Protocol_v1.json.js.map +1 -0
  454. package/dist/seedSchema/SchemaSchema.js +20 -0
  455. package/dist/seedSchema/SchemaSchema.js.map +1 -0
  456. package/dist/seedSchema/SchemaSchema.ts +25 -0
  457. package/dist/seedSchema/SeedSchema.js.map +1 -0
  458. package/dist/seedSchema/VersionSchema.js.map +1 -0
  459. package/dist/seedSchema/index.js +11 -0
  460. package/dist/seedSchema/index.js.map +1 -0
  461. package/dist/seedSchema/index.ts +2 -0
  462. package/dist/services/events.js +16 -0
  463. package/dist/services/events.js.map +1 -0
  464. package/dist/services/publish/actors/createPublishAttempt.js.map +1 -0
  465. package/dist/services/publish/actors/preparePublishRequestData.js +76 -0
  466. package/dist/services/publish/actors/preparePublishRequestData.js.map +1 -0
  467. package/dist/services/publish/actors/upload.js +61 -0
  468. package/dist/services/publish/actors/upload.js.map +1 -0
  469. package/dist/services/publish/actors/validateItemData.js.map +1 -0
  470. package/dist/services/publish/publishMachine.js +71 -0
  471. package/dist/services/publish/publishMachine.js.map +1 -0
  472. package/dist/services/write/actors/validateEntity.js +145 -0
  473. package/dist/services/write/actors/validateEntity.js.map +1 -0
  474. package/dist/services/write/actors/writeToDatabase.js +91 -0
  475. package/dist/services/write/actors/writeToDatabase.js.map +1 -0
  476. package/dist/services/write/writeProcessMachine.js +233 -0
  477. package/dist/services/write/writeProcessMachine.js.map +1 -0
  478. package/dist/src/Item/Item.d.ts +94 -0
  479. package/dist/src/Item/Item.d.ts.map +1 -0
  480. package/dist/src/Item/queries.d.ts +2 -2
  481. package/dist/src/Item/queries.d.ts.map +1 -1
  482. package/dist/src/Item/service/actors/fetchDataFromEas.d.ts.map +1 -1
  483. package/dist/src/Item/service/actors/hydrateExistingItem.d.ts.map +1 -1
  484. package/dist/src/Item/service/actors/initialize.d.ts.map +1 -1
  485. package/dist/src/Item/service/actors/loadOrCreateItem.d.ts +5 -0
  486. package/dist/src/Item/service/actors/loadOrCreateItem.d.ts.map +1 -0
  487. package/dist/src/Item/service/actors/saveDataToDb.d.ts.map +1 -1
  488. package/dist/src/Item/service/itemMachineSingle.d.ts.map +1 -1
  489. package/dist/src/ItemProperty/ItemProperty.d.ts +67 -0
  490. package/dist/src/ItemProperty/ItemProperty.d.ts.map +1 -0
  491. package/dist/src/ItemProperty/service/actors/hydrateFromDb.d.ts.map +1 -1
  492. package/dist/src/ItemProperty/service/actors/initialize.d.ts.map +1 -1
  493. package/dist/src/ItemProperty/service/actors/loadOrCreateProperty.d.ts +5 -0
  494. package/dist/src/ItemProperty/service/actors/loadOrCreateProperty.d.ts.map +1 -0
  495. package/dist/src/ItemProperty/service/actors/resolveRelatedValue.d.ts.map +1 -1
  496. package/dist/src/ItemProperty/service/actors/saveValueToDb/analyzeInput.d.ts.map +1 -1
  497. package/dist/src/ItemProperty/service/actors/saveValueToDb/saveRelation.d.ts.map +1 -1
  498. package/dist/src/ItemProperty/service/propertyMachine.d.ts +44 -93
  499. package/dist/src/ItemProperty/service/propertyMachine.d.ts.map +1 -1
  500. package/dist/src/Model/Model.d.ts +199 -0
  501. package/dist/src/Model/Model.d.ts.map +1 -0
  502. package/dist/src/Model/index.d.ts +26 -0
  503. package/dist/src/Model/index.d.ts.map +1 -0
  504. package/dist/src/Model/service/actors/createModelProperties.d.ts +9 -0
  505. package/dist/src/Model/service/actors/createModelProperties.d.ts.map +1 -0
  506. package/dist/src/Model/service/actors/loadOrCreateModel.d.ts +5 -0
  507. package/dist/src/Model/service/actors/loadOrCreateModel.d.ts.map +1 -0
  508. package/dist/src/Model/service/actors/validateModel.d.ts +5 -0
  509. package/dist/src/Model/service/actors/validateModel.d.ts.map +1 -0
  510. package/dist/src/Model/service/modelMachine.d.ts +206 -0
  511. package/dist/src/Model/service/modelMachine.d.ts.map +1 -0
  512. package/dist/src/ModelProperty/ModelProperty.d.ts +112 -0
  513. package/dist/src/ModelProperty/ModelProperty.d.ts.map +1 -0
  514. package/dist/src/ModelProperty/service/actors/compareAndMarkDraft.d.ts +5 -0
  515. package/dist/src/ModelProperty/service/actors/compareAndMarkDraft.d.ts.map +1 -0
  516. package/dist/src/ModelProperty/service/actors/saveToSchema.d.ts +11 -0
  517. package/dist/src/ModelProperty/service/actors/saveToSchema.d.ts.map +1 -0
  518. package/dist/src/ModelProperty/service/actors/validateProperty.d.ts +5 -0
  519. package/dist/src/ModelProperty/service/actors/validateProperty.d.ts.map +1 -0
  520. package/dist/src/ModelProperty/service/modelPropertyMachine.d.ts +183 -0
  521. package/dist/src/ModelProperty/service/modelPropertyMachine.d.ts.map +1 -0
  522. package/dist/src/Schema/Schema.d.ts +143 -0
  523. package/dist/src/Schema/Schema.d.ts.map +1 -0
  524. package/dist/src/Schema/errors.d.ts +20 -0
  525. package/dist/src/Schema/errors.d.ts.map +1 -0
  526. package/dist/src/Schema/index.d.ts +6 -0
  527. package/dist/src/Schema/index.d.ts.map +1 -0
  528. package/dist/src/Schema/service/actors/checkExistingSchema.d.ts +5 -0
  529. package/dist/src/Schema/service/actors/checkExistingSchema.d.ts.map +1 -0
  530. package/dist/src/Schema/service/actors/createModelInstances.d.ts +11 -0
  531. package/dist/src/Schema/service/actors/createModelInstances.d.ts.map +1 -0
  532. package/dist/src/Schema/service/actors/createPropertyInstances.d.ts +12 -0
  533. package/dist/src/Schema/service/actors/createPropertyInstances.d.ts.map +1 -0
  534. package/dist/src/Schema/service/actors/loadOrCreateSchema.d.ts +5 -0
  535. package/dist/src/Schema/service/actors/loadOrCreateSchema.d.ts.map +1 -0
  536. package/dist/src/Schema/service/actors/validateSchema.d.ts +5 -0
  537. package/dist/src/Schema/service/actors/validateSchema.d.ts.map +1 -0
  538. package/dist/src/Schema/service/actors/verifyModelInstancesInCache.d.ts +6 -0
  539. package/dist/src/Schema/service/actors/verifyModelInstancesInCache.d.ts.map +1 -0
  540. package/dist/src/Schema/service/actors/verifyModelsInDb.d.ts +7 -0
  541. package/dist/src/Schema/service/actors/verifyModelsInDb.d.ts.map +1 -0
  542. package/dist/src/Schema/service/actors/verifyPropertiesInDb.d.ts +8 -0
  543. package/dist/src/Schema/service/actors/verifyPropertiesInDb.d.ts.map +1 -0
  544. package/dist/src/Schema/service/actors/verifyPropertyInstancesInCache.d.ts +6 -0
  545. package/dist/src/Schema/service/actors/verifyPropertyInstancesInCache.d.ts.map +1 -0
  546. package/dist/src/Schema/service/actors/verifySchemaInDb.d.ts +7 -0
  547. package/dist/src/Schema/service/actors/verifySchemaInDb.d.ts.map +1 -0
  548. package/dist/src/Schema/service/actors/writeModelsToDb.d.ts +9 -0
  549. package/dist/src/Schema/service/actors/writeModelsToDb.d.ts.map +1 -0
  550. package/dist/src/Schema/service/actors/writePropertiesToDb.d.ts +10 -0
  551. package/dist/src/Schema/service/actors/writePropertiesToDb.d.ts.map +1 -0
  552. package/dist/src/Schema/service/actors/writeSchemaToDb.d.ts +11 -0
  553. package/dist/src/Schema/service/actors/writeSchemaToDb.d.ts.map +1 -0
  554. package/dist/src/Schema/service/addModelsMachine.d.ts +111 -0
  555. package/dist/src/Schema/service/addModelsMachine.d.ts.map +1 -0
  556. package/dist/src/Schema/service/schemaMachine.d.ts +494 -0
  557. package/dist/src/Schema/service/schemaMachine.d.ts.map +1 -0
  558. package/dist/src/Schema/service/validation/SchemaValidationService.d.ts +76 -0
  559. package/dist/src/Schema/service/validation/SchemaValidationService.d.ts.map +1 -0
  560. package/dist/src/Schema/validation.d.ts +40 -0
  561. package/dist/src/Schema/validation.d.ts.map +1 -0
  562. package/dist/src/browser/db/Db.d.ts +34 -2
  563. package/dist/src/browser/db/Db.d.ts.map +1 -1
  564. package/dist/src/browser/db/drizzleFiles.d.ts +7 -0
  565. package/dist/src/browser/db/drizzleFiles.d.ts.map +1 -0
  566. package/dist/src/browser/helpers/EasClient.d.ts +2 -0
  567. package/dist/src/browser/helpers/EasClient.d.ts.map +1 -1
  568. package/dist/src/browser/helpers/FileManager.d.ts +15 -2
  569. package/dist/src/browser/helpers/FileManager.d.ts.map +1 -1
  570. package/dist/src/browser/helpers/PathResolver.d.ts +40 -0
  571. package/dist/src/browser/helpers/PathResolver.d.ts.map +1 -0
  572. package/dist/src/browser/helpers/QueryClient.d.ts +2 -2
  573. package/dist/src/browser/helpers/QueryClient.d.ts.map +1 -1
  574. package/dist/src/browser/index.d.ts +1 -0
  575. package/dist/src/browser/index.d.ts.map +1 -1
  576. package/dist/src/browser/react/SeedImage.d.ts +2 -2
  577. package/dist/src/browser/react/SeedImage.d.ts.map +1 -1
  578. package/dist/src/browser/react/client.d.ts +2 -0
  579. package/dist/src/browser/react/client.d.ts.map +1 -0
  580. package/dist/src/browser/react/db.d.ts.map +1 -1
  581. package/dist/src/browser/react/index.d.ts +5 -2
  582. package/dist/src/browser/react/index.d.ts.map +1 -1
  583. package/dist/src/browser/react/item.d.ts +6 -6
  584. package/dist/src/browser/react/item.d.ts.map +1 -1
  585. package/dist/src/browser/react/itemProperty.d.ts +57 -0
  586. package/dist/src/browser/react/itemProperty.d.ts.map +1 -0
  587. package/dist/src/browser/react/liveQuery.d.ts +29 -0
  588. package/dist/src/browser/react/liveQuery.d.ts.map +1 -0
  589. package/dist/src/browser/react/model.d.ts +32 -5
  590. package/dist/src/browser/react/model.d.ts.map +1 -1
  591. package/dist/src/browser/react/modelProperty.d.ts +59 -0
  592. package/dist/src/browser/react/modelProperty.d.ts.map +1 -0
  593. package/dist/src/browser/react/schema.d.ts +37 -0
  594. package/dist/src/browser/react/schema.d.ts.map +1 -0
  595. package/dist/src/browser/react/services.d.ts +3 -2
  596. package/dist/src/browser/react/services.d.ts.map +1 -1
  597. package/dist/src/browser/seed.d.ts +0 -1
  598. package/dist/src/browser/seed.d.ts.map +1 -1
  599. package/dist/src/browser/workers/FileDownloader.d.ts.map +1 -1
  600. package/dist/src/browser/workers/content-hash.d.ts.map +1 -1
  601. package/dist/src/client/ClientManager.d.ts +179 -175
  602. package/dist/src/client/ClientManager.d.ts.map +1 -1
  603. package/dist/src/client/actors/addModelsToDb.d.ts +4 -0
  604. package/dist/src/client/actors/addModelsToDb.d.ts.map +1 -0
  605. package/dist/src/client/actors/addModelsToStore.d.ts +4 -0
  606. package/dist/src/client/actors/addModelsToStore.d.ts.map +1 -0
  607. package/dist/src/client/actors/dbInit.d.ts +4 -0
  608. package/dist/src/client/actors/dbInit.d.ts.map +1 -0
  609. package/dist/src/client/actors/fileSystemInit.d.ts +4 -0
  610. package/dist/src/client/actors/fileSystemInit.d.ts.map +1 -0
  611. package/dist/src/client/actors/platformClassesInit.d.ts +9 -0
  612. package/dist/src/client/actors/platformClassesInit.d.ts.map +1 -0
  613. package/dist/src/client/actors/processSchemaFiles.d.ts +4 -0
  614. package/dist/src/client/actors/processSchemaFiles.d.ts.map +1 -0
  615. package/dist/src/client/actors/saveAppState.d.ts +6 -3
  616. package/dist/src/client/actors/saveAppState.d.ts.map +1 -1
  617. package/dist/src/client/actors/saveConfig.d.ts +4 -0
  618. package/dist/src/client/actors/saveConfig.d.ts.map +1 -0
  619. package/dist/src/client/clientManagerMachine.d.ts +57 -89
  620. package/dist/src/client/clientManagerMachine.d.ts.map +1 -1
  621. package/dist/src/client/constants.d.ts +79 -0
  622. package/dist/src/client/constants.d.ts.map +1 -0
  623. package/dist/src/client/index.d.ts.map +1 -1
  624. package/dist/src/db/Db/BaseDb.d.ts +30 -0
  625. package/dist/src/db/Db/BaseDb.d.ts.map +1 -1
  626. package/dist/src/db/configs/dev.schema.config.d.ts +3 -0
  627. package/dist/src/db/configs/dev.schema.config.d.ts.map +1 -0
  628. package/dist/src/db/read/getExistingItem.d.ts.map +1 -1
  629. package/dist/src/db/read/getModelSchemas.d.ts +8 -3
  630. package/dist/src/db/read/getModelSchemas.d.ts.map +1 -1
  631. package/dist/src/db/read/getPropertyData.d.ts.map +1 -1
  632. package/dist/src/db/read/getPublishPayload.d.ts +2 -2
  633. package/dist/src/db/read/getPublishPayload.d.ts.map +1 -1
  634. package/dist/src/db/read/getPublishUploads.d.ts.map +1 -1
  635. package/dist/src/db/read/getRelationValueData.d.ts.map +1 -1
  636. package/dist/src/db/read/getSchemaUidForModel.d.ts +1 -1
  637. package/dist/src/db/read/getSchemaUidForModel.d.ts.map +1 -1
  638. package/dist/src/db/read/getStorageTransactionIdForSeedUid.d.ts.map +1 -1
  639. package/dist/src/db/read/subqueries/metadataLatest.d.ts.map +1 -1
  640. package/dist/src/db/write/createMetadata.d.ts +3 -1
  641. package/dist/src/db/write/createMetadata.d.ts.map +1 -1
  642. package/dist/src/db/write/createNewItem.d.ts.map +1 -1
  643. package/dist/src/db/write/createSeed.d.ts.map +1 -1
  644. package/dist/src/db/write/recoverDeletedItem.d.ts.map +1 -1
  645. package/dist/src/db/write/saveAppState.d.ts.map +1 -1
  646. package/dist/src/db/write/saveMetadata.d.ts.map +1 -1
  647. package/dist/src/db/write/updateMetadata.d.ts.map +1 -1
  648. package/dist/src/eas.d.ts +26 -0
  649. package/dist/src/eas.d.ts.map +1 -0
  650. package/dist/src/eslint-rules/align-imports.d.ts +12 -0
  651. package/dist/src/eslint-rules/align-imports.d.ts.map +1 -0
  652. package/dist/src/events/files/download.d.ts.map +1 -1
  653. package/dist/src/events/files/index.d.ts.map +1 -1
  654. package/dist/src/events/item/create.d.ts.map +1 -1
  655. package/dist/src/events/item/publish.d.ts.map +1 -1
  656. package/dist/src/events/item/request.d.ts.map +1 -1
  657. package/dist/src/events/item/requestAll.d.ts.map +1 -1
  658. package/dist/src/events/item/syncDbWithEas.d.ts.map +1 -1
  659. package/dist/src/events/services/allItems.d.ts.map +1 -1
  660. package/dist/src/feed.d.ts +2 -0
  661. package/dist/src/feed.d.ts.map +1 -0
  662. package/dist/src/graphql/gql/gql.d.ts +29 -58
  663. package/dist/src/graphql/gql/gql.d.ts.map +1 -1
  664. package/dist/src/graphql/gql/graphql.d.ts +115 -83
  665. package/dist/src/graphql/gql/graphql.d.ts.map +1 -1
  666. package/dist/src/helpers/ArweaveClient/index.d.ts +1 -0
  667. package/dist/src/helpers/ArweaveClient/index.d.ts.map +1 -1
  668. package/dist/src/helpers/EasClient/BaseEasClient.d.ts +3 -0
  669. package/dist/src/helpers/EasClient/BaseEasClient.d.ts.map +1 -1
  670. package/dist/src/helpers/FileManager/BaseFileManager.d.ts +7 -1
  671. package/dist/src/helpers/FileManager/BaseFileManager.d.ts.map +1 -1
  672. package/dist/src/helpers/PathResolver/BasePathResolver.d.ts +22 -0
  673. package/dist/src/helpers/PathResolver/BasePathResolver.d.ts.map +1 -0
  674. package/dist/src/helpers/constants.d.ts +14 -0
  675. package/dist/src/helpers/constants.d.ts.map +1 -1
  676. package/dist/src/helpers/crypto.d.ts.map +1 -1
  677. package/dist/src/helpers/db.d.ts +109 -1
  678. package/dist/src/helpers/db.d.ts.map +1 -1
  679. package/dist/src/helpers/environment.d.ts +16 -0
  680. package/dist/src/helpers/environment.d.ts.map +1 -1
  681. package/dist/src/helpers/file/download/actors.d.ts.map +1 -0
  682. package/dist/src/helpers/file/download/index.d.ts.map +1 -0
  683. package/dist/src/helpers/file/fetchAll/actors.d.ts.map +1 -0
  684. package/dist/src/helpers/file/fetchAll/index.d.ts.map +1 -0
  685. package/dist/src/helpers/file/queries.d.ts.map +1 -0
  686. package/dist/src/helpers/files.d.ts.map +1 -1
  687. package/dist/src/helpers/getSchemaForItemProperty.d.ts +7 -3
  688. package/dist/src/helpers/getSchemaForItemProperty.d.ts.map +1 -1
  689. package/dist/src/helpers/getSegmentedItemProperties.d.ts +4 -4
  690. package/dist/src/helpers/getSegmentedItemProperties.d.ts.map +1 -1
  691. package/dist/src/helpers/image/queries.d.ts.map +1 -0
  692. package/dist/src/helpers/index.d.ts +7 -7
  693. package/dist/src/helpers/index.d.ts.map +1 -1
  694. package/dist/src/helpers/model.d.ts +9 -0
  695. package/dist/src/helpers/model.d.ts.map +1 -0
  696. package/dist/src/helpers/property/index.d.ts +298 -0
  697. package/dist/src/helpers/property/index.d.ts.map +1 -0
  698. package/dist/src/helpers/property.d.ts +39 -0
  699. package/dist/src/helpers/property.d.ts.map +1 -0
  700. package/dist/src/helpers/reactiveProxy.d.ts +44 -0
  701. package/dist/src/helpers/reactiveProxy.d.ts.map +1 -0
  702. package/dist/src/helpers/schema.d.ts +131 -0
  703. package/dist/src/helpers/schema.d.ts.map +1 -0
  704. package/dist/src/helpers/updateSchema.d.ts +109 -0
  705. package/dist/src/helpers/updateSchema.d.ts.map +1 -0
  706. package/dist/src/imports/index.d.ts +3 -0
  707. package/dist/src/imports/index.d.ts.map +1 -0
  708. package/dist/src/imports/json.d.ts +81 -0
  709. package/dist/src/imports/json.d.ts.map +1 -0
  710. package/dist/src/imports/markdown.d.ts +38 -0
  711. package/dist/src/imports/markdown.d.ts.map +1 -0
  712. package/dist/src/index.d.ts +22 -14
  713. package/dist/src/index.d.ts.map +1 -1
  714. package/dist/src/interfaces/IItem.d.ts +5 -2
  715. package/dist/src/interfaces/IItem.d.ts.map +1 -1
  716. package/dist/src/interfaces/IItemProperty.d.ts +5 -5
  717. package/dist/src/interfaces/IItemProperty.d.ts.map +1 -1
  718. package/dist/src/node/codegen/drizzle.d.ts +3 -3
  719. package/dist/src/node/codegen/drizzle.d.ts.map +1 -1
  720. package/dist/src/node/constants.d.ts +0 -1
  721. package/dist/src/node/constants.d.ts.map +1 -1
  722. package/dist/src/node/db/Db.d.ts +36 -2
  723. package/dist/src/node/db/Db.d.ts.map +1 -1
  724. package/dist/src/node/db/index.d.ts +4 -4
  725. package/dist/src/node/db/index.d.ts.map +1 -1
  726. package/dist/src/node/helpers/EasClient.d.ts.map +1 -1
  727. package/dist/src/node/helpers/FileManager.d.ts +10 -1
  728. package/dist/src/node/helpers/FileManager.d.ts.map +1 -1
  729. package/dist/src/node/helpers/PathResolver.d.ts +43 -0
  730. package/dist/src/node/helpers/PathResolver.d.ts.map +1 -0
  731. package/dist/src/node/helpers/index.d.ts.map +1 -1
  732. package/dist/src/node/helpers/scripts.d.ts +16 -0
  733. package/dist/src/node/helpers/scripts.d.ts.map +1 -0
  734. package/dist/src/node/index.d.ts +25 -0
  735. package/dist/src/node/index.d.ts.map +1 -0
  736. package/dist/src/node/webpack/fs-proxy.d.ts +4 -0
  737. package/dist/src/node/webpack/fs-proxy.d.ts.map +1 -0
  738. package/dist/src/node/webpack/index.d.ts.map +1 -1
  739. package/dist/src/seedSchema/ModelSchema.d.ts +72 -38
  740. package/dist/src/seedSchema/ModelSchema.d.ts.map +1 -1
  741. package/dist/src/seedSchema/ModelSchemaSchema.d.ts +61 -0
  742. package/dist/src/seedSchema/ModelSchemaSchema.d.ts.map +1 -0
  743. package/dist/src/seedSchema/SchemaSchema.d.ts +169 -0
  744. package/dist/src/seedSchema/SchemaSchema.d.ts.map +1 -0
  745. package/dist/src/seedSchema/index.d.ts +2 -0
  746. package/dist/src/seedSchema/index.d.ts.map +1 -1
  747. package/dist/src/services/events.d.ts.map +1 -1
  748. package/dist/src/services/publish/actors/preparePublishRequestData.d.ts.map +1 -1
  749. package/dist/src/services/publish/actors/upload.d.ts.map +1 -1
  750. package/dist/src/services/publish/publishMachine.d.ts +24 -185
  751. package/dist/src/services/publish/publishMachine.d.ts.map +1 -1
  752. package/dist/src/services/write/actors/validateEntity.d.ts +12 -0
  753. package/dist/src/services/write/actors/validateEntity.d.ts.map +1 -0
  754. package/dist/src/services/write/actors/writeToDatabase.d.ts +9 -0
  755. package/dist/src/services/write/actors/writeToDatabase.d.ts.map +1 -0
  756. package/dist/src/services/write/writeProcessMachine.d.ts +84 -0
  757. package/dist/src/services/write/writeProcessMachine.d.ts.map +1 -0
  758. package/dist/src/types/import.d.ts +72 -0
  759. package/dist/src/types/import.d.ts.map +1 -0
  760. package/dist/src/types/index.d.ts +9 -3
  761. package/dist/src/types/index.d.ts.map +1 -1
  762. package/dist/src/types/item.d.ts +7 -26
  763. package/dist/src/types/item.d.ts.map +1 -1
  764. package/dist/src/types/machines.d.ts +16 -27
  765. package/dist/src/types/machines.d.ts.map +1 -1
  766. package/dist/src/types/model.d.ts +12 -15
  767. package/dist/src/types/model.d.ts.map +1 -1
  768. package/dist/src/types/property.d.ts +1 -1
  769. package/dist/src/vite/index.d.ts +47 -0
  770. package/dist/src/vite/index.d.ts.map +1 -0
  771. package/dist/stores/eas.js +23 -0
  772. package/dist/stores/eas.js.map +1 -0
  773. package/dist/vite/index.js +554 -0
  774. package/dist/vite/index.js.map +1 -0
  775. package/package.json +106 -74
  776. package/dist/addModel.js +0 -93
  777. package/dist/addModel.js.map +0 -1
  778. package/dist/bin.js +0 -306
  779. package/dist/bin.js.map +0 -1
  780. package/dist/db/configs/browser.app.db.config.ts +0 -28
  781. package/dist/db/configs/node.app.db.config.js +0 -21
  782. package/dist/db/configs/node.app.db.config.js.map +0 -1
  783. package/dist/db/configs/node.app.db.config.ts +0 -28
  784. package/dist/db/configs/seed.schema.config.ts +0 -25
  785. package/dist/protos/seed.proto +0 -97
  786. package/dist/rpcServer.js +0 -358
  787. package/dist/rpcServer.js.map +0 -1
  788. package/dist/scripts/addModel.d.ts +0 -3
  789. package/dist/scripts/addModel.d.ts.map +0 -1
  790. package/dist/scripts/bin.d.ts +0 -8
  791. package/dist/scripts/bin.d.ts.map +0 -1
  792. package/dist/seedData.json +0 -23
  793. package/dist/src/Item/BaseItem.d.ts +0 -54
  794. package/dist/src/Item/BaseItem.d.ts.map +0 -1
  795. package/dist/src/Item/BaseItem.js +0 -309
  796. package/dist/src/Item/BaseItem.js.map +0 -1
  797. package/dist/src/Item/queries.js +0 -94
  798. package/dist/src/Item/queries.js.map +0 -1
  799. package/dist/src/Item/service/actors/fetchDataFromEas.js +0 -74
  800. package/dist/src/Item/service/actors/fetchDataFromEas.js.map +0 -1
  801. package/dist/src/Item/service/actors/hydrateExistingItem.js +0 -119
  802. package/dist/src/Item/service/actors/hydrateExistingItem.js.map +0 -1
  803. package/dist/src/Item/service/actors/hydrateNewItem.js.map +0 -1
  804. package/dist/src/Item/service/actors/initialize.js +0 -39
  805. package/dist/src/Item/service/actors/initialize.js.map +0 -1
  806. package/dist/src/Item/service/actors/reload.js.map +0 -1
  807. package/dist/src/Item/service/actors/waitForDb.js.map +0 -1
  808. package/dist/src/Item/service/itemMachineSingle.js +0 -154
  809. package/dist/src/Item/service/itemMachineSingle.js.map +0 -1
  810. package/dist/src/ItemProperty/BaseItemProperty.d.ts +0 -109
  811. package/dist/src/ItemProperty/BaseItemProperty.d.ts.map +0 -1
  812. package/dist/src/ItemProperty/BaseItemProperty.js +0 -350
  813. package/dist/src/ItemProperty/BaseItemProperty.js.map +0 -1
  814. package/dist/src/ItemProperty/service/actors/hydrateFromDb.js +0 -208
  815. package/dist/src/ItemProperty/service/actors/hydrateFromDb.js.map +0 -1
  816. package/dist/src/ItemProperty/service/actors/initialize.js +0 -65
  817. package/dist/src/ItemProperty/service/actors/initialize.js.map +0 -1
  818. package/dist/src/ItemProperty/service/actors/resolveRelatedValue.js +0 -317
  819. package/dist/src/ItemProperty/service/actors/resolveRelatedValue.js.map +0 -1
  820. package/dist/src/ItemProperty/service/actors/resolveRemoteStorage.js.map +0 -1
  821. package/dist/src/ItemProperty/service/actors/saveValueToDb/analyzeInput.js +0 -100
  822. package/dist/src/ItemProperty/service/actors/saveValueToDb/analyzeInput.js.map +0 -1
  823. package/dist/src/ItemProperty/service/actors/saveValueToDb/saveImage.js.map +0 -1
  824. package/dist/src/ItemProperty/service/actors/saveValueToDb/saveItemStorage.js +0 -119
  825. package/dist/src/ItemProperty/service/actors/saveValueToDb/saveItemStorage.js.map +0 -1
  826. package/dist/src/ItemProperty/service/actors/saveValueToDb/saveRelation.js +0 -81
  827. package/dist/src/ItemProperty/service/actors/saveValueToDb/saveRelation.js.map +0 -1
  828. package/dist/src/ItemProperty/service/actors/waitForDb.js.map +0 -1
  829. package/dist/src/ItemProperty/service/propertyMachine.js +0 -198
  830. package/dist/src/ItemProperty/service/propertyMachine.js.map +0 -1
  831. package/dist/src/browser/Item/Item.d.ts +0 -7
  832. package/dist/src/browser/Item/Item.d.ts.map +0 -1
  833. package/dist/src/browser/Item/Item.js +0 -10
  834. package/dist/src/browser/Item/Item.js.map +0 -1
  835. package/dist/src/browser/ItemProperty/ItemProperty.d.ts +0 -8
  836. package/dist/src/browser/ItemProperty/ItemProperty.d.ts.map +0 -1
  837. package/dist/src/browser/ItemProperty/ItemProperty.js +0 -10
  838. package/dist/src/browser/ItemProperty/ItemProperty.js.map +0 -1
  839. package/dist/src/browser/db/Db.js +0 -243
  840. package/dist/src/browser/db/Db.js.map +0 -1
  841. package/dist/src/browser/helpers/ArweaveClient.js +0 -13
  842. package/dist/src/browser/helpers/ArweaveClient.js.map +0 -1
  843. package/dist/src/browser/helpers/FileManager.js +0 -323
  844. package/dist/src/browser/helpers/FileManager.js.map +0 -1
  845. package/dist/src/browser/helpers/QueryClient.js +0 -19
  846. package/dist/src/browser/helpers/QueryClient.js.map +0 -1
  847. package/dist/src/browser/helpers/eas.d.ts +0 -20
  848. package/dist/src/browser/helpers/eas.d.ts.map +0 -1
  849. package/dist/src/browser/helpers/eas.js +0 -89
  850. package/dist/src/browser/helpers/eas.js.map +0 -1
  851. package/dist/src/browser/react/SeedImage.js +0 -105
  852. package/dist/src/browser/react/SeedImage.js.map +0 -1
  853. package/dist/src/browser/react/db.js +0 -6
  854. package/dist/src/browser/react/db.js.map +0 -1
  855. package/dist/src/browser/react/item.js +0 -216
  856. package/dist/src/browser/react/item.js.map +0 -1
  857. package/dist/src/browser/react/model.js +0 -20
  858. package/dist/src/browser/react/model.js.map +0 -1
  859. package/dist/src/browser/react/property.d.ts +0 -20
  860. package/dist/src/browser/react/property.d.ts.map +0 -1
  861. package/dist/src/browser/react/property.js +0 -107
  862. package/dist/src/browser/react/property.js.map +0 -1
  863. package/dist/src/browser/react/services.js +0 -306
  864. package/dist/src/browser/react/services.js.map +0 -1
  865. package/dist/src/browser/react/trash.js.map +0 -1
  866. package/dist/src/browser/workers/FileDownloader.js.map +0 -1
  867. package/dist/src/browser/workers/ImageResizer.js.map +0 -1
  868. package/dist/src/browser/workers/filesDownload.js.map +0 -1
  869. package/dist/src/browser/workers/imageResize.js.map +0 -1
  870. package/dist/src/client/ClientManager.js +0 -90
  871. package/dist/src/client/ClientManager.js.map +0 -1
  872. package/dist/src/client/actions/setAddresses.js +0 -19
  873. package/dist/src/client/actions/setAddresses.js.map +0 -1
  874. package/dist/src/client/actors/initialize.d.ts +0 -4
  875. package/dist/src/client/actors/initialize.d.ts.map +0 -1
  876. package/dist/src/client/actors/initialize.js +0 -107
  877. package/dist/src/client/actors/initialize.js.map +0 -1
  878. package/dist/src/client/actors/saveAppState.js +0 -46
  879. package/dist/src/client/actors/saveAppState.js.map +0 -1
  880. package/dist/src/client/clientManagerMachine.js +0 -63
  881. package/dist/src/client/clientManagerMachine.js.map +0 -1
  882. package/dist/src/db/Db/BaseDb.js +0 -25
  883. package/dist/src/db/Db/BaseDb.js.map +0 -1
  884. package/dist/src/db/configs/browser.app.db.config.d.ts +0 -3
  885. package/dist/src/db/configs/browser.app.db.config.d.ts.map +0 -1
  886. package/dist/src/db/configs/node.app.db.config.d.ts +0 -3
  887. package/dist/src/db/configs/node.app.db.config.d.ts.map +0 -1
  888. package/dist/src/db/configs/seed.schema.config.d.ts +0 -19
  889. package/dist/src/db/configs/seed.schema.config.d.ts.map +0 -1
  890. package/dist/src/db/configs/seed.schema.config.js +0 -52
  891. package/dist/src/db/configs/seed.schema.config.js.map +0 -1
  892. package/dist/src/db/read/getExistingItem.js +0 -31
  893. package/dist/src/db/read/getExistingItem.js.map +0 -1
  894. package/dist/src/db/read/getItem.js +0 -26
  895. package/dist/src/db/read/getItem.js.map +0 -1
  896. package/dist/src/db/read/getItemData.js +0 -86
  897. package/dist/src/db/read/getItemData.js.map +0 -1
  898. package/dist/src/db/read/getItemProperties.js +0 -51
  899. package/dist/src/db/read/getItemProperties.js.map +0 -1
  900. package/dist/src/db/read/getItemProperty.js +0 -32
  901. package/dist/src/db/read/getItemProperty.js.map +0 -1
  902. package/dist/src/db/read/getItems.js +0 -51
  903. package/dist/src/db/read/getItems.js.map +0 -1
  904. package/dist/src/db/read/getMetadata.js +0 -34
  905. package/dist/src/db/read/getMetadata.js.map +0 -1
  906. package/dist/src/db/read/getModelSchemas.js +0 -51
  907. package/dist/src/db/read/getModelSchemas.js.map +0 -1
  908. package/dist/src/db/read/getModels.js +0 -18
  909. package/dist/src/db/read/getModels.js.map +0 -1
  910. package/dist/src/db/read/getPropertyData.js +0 -40
  911. package/dist/src/db/read/getPropertyData.js.map +0 -1
  912. package/dist/src/db/read/getPublishPayload.js +0 -265
  913. package/dist/src/db/read/getPublishPayload.js.map +0 -1
  914. package/dist/src/db/read/getPublishUploads.js +0 -166
  915. package/dist/src/db/read/getPublishUploads.js.map +0 -1
  916. package/dist/src/db/read/getRelationValueData.js +0 -32
  917. package/dist/src/db/read/getRelationValueData.js.map +0 -1
  918. package/dist/src/db/read/getSchemaUidForModel.js +0 -28
  919. package/dist/src/db/read/getSchemaUidForModel.js.map +0 -1
  920. package/dist/src/db/read/getSeedData.js +0 -30
  921. package/dist/src/db/read/getSeedData.js.map +0 -1
  922. package/dist/src/db/read/getStorageTransactionIdForSeedUid.js +0 -32
  923. package/dist/src/db/read/getStorageTransactionIdForSeedUid.js.map +0 -1
  924. package/dist/src/db/read/getVersionData.js +0 -35
  925. package/dist/src/db/read/getVersionData.js.map +0 -1
  926. package/dist/src/db/read/subqueries/metadataLatest.js +0 -37
  927. package/dist/src/db/read/subqueries/metadataLatest.js.map +0 -1
  928. package/dist/src/db/read/subqueries/versionData.js +0 -29
  929. package/dist/src/db/read/subqueries/versionData.js.map +0 -1
  930. package/dist/src/db/write/createMetadata.js +0 -65
  931. package/dist/src/db/write/createMetadata.js.map +0 -1
  932. package/dist/src/db/write/createNewItem.js +0 -38
  933. package/dist/src/db/write/createNewItem.js.map +0 -1
  934. package/dist/src/db/write/createSeed.js +0 -31
  935. package/dist/src/db/write/createSeed.js.map +0 -1
  936. package/dist/src/db/write/createSeeds.js +0 -27
  937. package/dist/src/db/write/createSeeds.js.map +0 -1
  938. package/dist/src/db/write/createVersion.js +0 -27
  939. package/dist/src/db/write/createVersion.js.map +0 -1
  940. package/dist/src/db/write/deleteItem.js +0 -23
  941. package/dist/src/db/write/deleteItem.js.map +0 -1
  942. package/dist/src/db/write/saveAppState.js +0 -28
  943. package/dist/src/db/write/saveAppState.js.map +0 -1
  944. package/dist/src/db/write/saveMetadata.js +0 -24
  945. package/dist/src/db/write/saveMetadata.js.map +0 -1
  946. package/dist/src/db/write/updateItemPropertyValue.js +0 -163
  947. package/dist/src/db/write/updateItemPropertyValue.js.map +0 -1
  948. package/dist/src/db/write/updateMetadata.js +0 -27
  949. package/dist/src/db/write/updateMetadata.js.map +0 -1
  950. package/dist/src/eventBus.js.map +0 -1
  951. package/dist/src/events/files/download.js +0 -162
  952. package/dist/src/events/files/download.js.map +0 -1
  953. package/dist/src/events/files/index.js +0 -60
  954. package/dist/src/events/files/index.js.map +0 -1
  955. package/dist/src/events/index.js +0 -28
  956. package/dist/src/events/index.js.map +0 -1
  957. package/dist/src/events/item/index.js.map +0 -1
  958. package/dist/src/events/item/publish.js +0 -19
  959. package/dist/src/events/item/publish.js.map +0 -1
  960. package/dist/src/events/item/syncDbWithEas.js +0 -411
  961. package/dist/src/events/item/syncDbWithEas.js.map +0 -1
  962. package/dist/src/events/services/allItems.js +0 -19
  963. package/dist/src/events/services/allItems.js.map +0 -1
  964. package/dist/src/events/services/index.js.map +0 -1
  965. package/dist/src/graphql/gql/gql.js +0 -38
  966. package/dist/src/graphql/gql/gql.js.map +0 -1
  967. package/dist/src/graphql/gql/graphql.js +0 -106
  968. package/dist/src/graphql/gql/graphql.js.map +0 -1
  969. package/dist/src/helpers/ArweaveClient/BaseArweaveClient.js.map +0 -1
  970. package/dist/src/helpers/ArweaveClient/index.js +0 -45
  971. package/dist/src/helpers/ArweaveClient/index.js.map +0 -1
  972. package/dist/src/helpers/ArweaveClient/queries.js.map +0 -1
  973. package/dist/src/helpers/EasClient/BaseEasClient.js +0 -14
  974. package/dist/src/helpers/EasClient/BaseEasClient.js.map +0 -1
  975. package/dist/src/helpers/FileManager/BaseFileManager.js +0 -80
  976. package/dist/src/helpers/FileManager/BaseFileManager.js.map +0 -1
  977. package/dist/src/helpers/QueryClient/BaseQueryClient.js.map +0 -1
  978. package/dist/src/helpers/constants.js +0 -85
  979. package/dist/src/helpers/constants.js.map +0 -1
  980. package/dist/src/helpers/crypto.js.map +0 -1
  981. package/dist/src/helpers/db.js +0 -45
  982. package/dist/src/helpers/db.js.map +0 -1
  983. package/dist/src/helpers/environment.js +0 -29
  984. package/dist/src/helpers/environment.js.map +0 -1
  985. package/dist/src/helpers/getSchemaForItemProperty.js +0 -51
  986. package/dist/src/helpers/getSchemaForItemProperty.js.map +0 -1
  987. package/dist/src/helpers/getSegmentedItemProperties.js +0 -54
  988. package/dist/src/helpers/getSegmentedItemProperties.js.map +0 -1
  989. package/dist/src/helpers/index.js +0 -113
  990. package/dist/src/helpers/index.js.map +0 -1
  991. package/dist/src/helpers/scripts.d.ts +0 -2
  992. package/dist/src/helpers/scripts.d.ts.map +0 -1
  993. package/dist/src/helpers/scripts.js +0 -14
  994. package/dist/src/helpers/scripts.js.map +0 -1
  995. package/dist/src/helpers/updateMachineContext.js.map +0 -1
  996. package/dist/src/node/Item/Item.d.ts +0 -7
  997. package/dist/src/node/Item/Item.d.ts.map +0 -1
  998. package/dist/src/node/Item/Item.js +0 -11
  999. package/dist/src/node/Item/Item.js.map +0 -1
  1000. package/dist/src/node/ItemProperty/ItemProperty.d.ts +0 -7
  1001. package/dist/src/node/ItemProperty/ItemProperty.d.ts.map +0 -1
  1002. package/dist/src/node/ItemProperty/ItemProperty.js +0 -10
  1003. package/dist/src/node/ItemProperty/ItemProperty.js.map +0 -1
  1004. package/dist/src/node/PathResolver.d.ts +0 -45
  1005. package/dist/src/node/PathResolver.d.ts.map +0 -1
  1006. package/dist/src/node/PathResolver.js +0 -170
  1007. package/dist/src/node/PathResolver.js.map +0 -1
  1008. package/dist/src/node/codegen/drizzle.js +0 -108
  1009. package/dist/src/node/codegen/drizzle.js.map +0 -1
  1010. package/dist/src/node/constants.js +0 -6
  1011. package/dist/src/node/constants.js.map +0 -1
  1012. package/dist/src/node/db/Db.js +0 -65
  1013. package/dist/src/node/db/Db.js.map +0 -1
  1014. package/dist/src/node/helpers/ArweaveClient.js +0 -13
  1015. package/dist/src/node/helpers/ArweaveClient.js.map +0 -1
  1016. package/dist/src/node/helpers/EasClient.js +0 -13
  1017. package/dist/src/node/helpers/EasClient.js.map +0 -1
  1018. package/dist/src/node/helpers/FileManager.js +0 -53
  1019. package/dist/src/node/helpers/FileManager.js.map +0 -1
  1020. package/dist/src/node/helpers/QueryClient.js.map +0 -1
  1021. package/dist/src/node/helpers/index.js +0 -38
  1022. package/dist/src/node/helpers/index.js.map +0 -1
  1023. package/dist/src/node/webpack/index.js.map +0 -1
  1024. package/dist/src/schema/file/download/actors.d.ts.map +0 -1
  1025. package/dist/src/schema/file/download/index.d.ts.map +0 -1
  1026. package/dist/src/schema/file/fetchAll/actors.d.ts.map +0 -1
  1027. package/dist/src/schema/file/fetchAll/index.d.ts.map +0 -1
  1028. package/dist/src/schema/file/queries.d.ts.map +0 -1
  1029. package/dist/src/schema/file/queries.js +0 -48
  1030. package/dist/src/schema/file/queries.js.map +0 -1
  1031. package/dist/src/schema/image/model.d.ts +0 -8
  1032. package/dist/src/schema/image/model.d.ts.map +0 -1
  1033. package/dist/src/schema/image/model.js +0 -29
  1034. package/dist/src/schema/image/model.js.map +0 -1
  1035. package/dist/src/schema/image/queries.d.ts.map +0 -1
  1036. package/dist/src/schema/index.d.ts +0 -4
  1037. package/dist/src/schema/index.d.ts.map +0 -1
  1038. package/dist/src/schema/model/index.d.ts +0 -63
  1039. package/dist/src/schema/model/index.d.ts.map +0 -1
  1040. package/dist/src/schema/model/index.js +0 -44
  1041. package/dist/src/schema/model/index.js.map +0 -1
  1042. package/dist/src/schema/property/index.d.ts +0 -151
  1043. package/dist/src/schema/property/index.d.ts.map +0 -1
  1044. package/dist/src/schema/property/index.js +0 -88
  1045. package/dist/src/schema/property/index.js.map +0 -1
  1046. package/dist/src/seedSchema/AppStateSchema.js.map +0 -1
  1047. package/dist/src/seedSchema/ConfigSchema.js.map +0 -1
  1048. package/dist/src/seedSchema/MetadataSchema.js.map +0 -1
  1049. package/dist/src/seedSchema/ModelSchema.js +0 -33
  1050. package/dist/src/seedSchema/ModelSchema.js.map +0 -1
  1051. package/dist/src/seedSchema/ModelUidSchema.js +0 -18
  1052. package/dist/src/seedSchema/ModelUidSchema.js.map +0 -1
  1053. package/dist/src/seedSchema/PropertyUidSchema.js +0 -18
  1054. package/dist/src/seedSchema/PropertyUidSchema.js.map +0 -1
  1055. package/dist/src/seedSchema/SeedSchema.js.map +0 -1
  1056. package/dist/src/seedSchema/VersionSchema.js.map +0 -1
  1057. package/dist/src/services/allItems/actors/fetchDbData.d.ts +0 -4
  1058. package/dist/src/services/allItems/actors/fetchDbData.d.ts.map +0 -1
  1059. package/dist/src/services/allItems/actors/fetchDbData.js +0 -13
  1060. package/dist/src/services/allItems/actors/fetchDbData.js.map +0 -1
  1061. package/dist/src/services/allItems/actors/fetchRelatedItems.d.ts +0 -4
  1062. package/dist/src/services/allItems/actors/fetchRelatedItems.d.ts.map +0 -1
  1063. package/dist/src/services/allItems/actors/fetchRelatedItems.js +0 -139
  1064. package/dist/src/services/allItems/actors/fetchRelatedItems.js.map +0 -1
  1065. package/dist/src/services/allItems/actors/fetchSeeds.d.ts +0 -4
  1066. package/dist/src/services/allItems/actors/fetchSeeds.d.ts.map +0 -1
  1067. package/dist/src/services/allItems/actors/fetchSeeds.js +0 -31
  1068. package/dist/src/services/allItems/actors/fetchSeeds.js.map +0 -1
  1069. package/dist/src/services/allItems/actors/fetchVersions.d.ts +0 -4
  1070. package/dist/src/services/allItems/actors/fetchVersions.d.ts.map +0 -1
  1071. package/dist/src/services/allItems/actors/fetchVersions.js +0 -35
  1072. package/dist/src/services/allItems/actors/fetchVersions.js.map +0 -1
  1073. package/dist/src/services/allItems/actors/initialize.d.ts +0 -4
  1074. package/dist/src/services/allItems/actors/initialize.d.ts.map +0 -1
  1075. package/dist/src/services/allItems/actors/initialize.js +0 -146
  1076. package/dist/src/services/allItems/actors/initialize.js.map +0 -1
  1077. package/dist/src/services/allItems/actors/processItems.d.ts +0 -4
  1078. package/dist/src/services/allItems/actors/processItems.d.ts.map +0 -1
  1079. package/dist/src/services/allItems/actors/processItems.js +0 -55
  1080. package/dist/src/services/allItems/actors/processItems.js.map +0 -1
  1081. package/dist/src/services/allItems/itemMachineAll.d.ts +0 -67
  1082. package/dist/src/services/allItems/itemMachineAll.d.ts.map +0 -1
  1083. package/dist/src/services/allItems/itemMachineAll.js +0 -153
  1084. package/dist/src/services/allItems/itemMachineAll.js.map +0 -1
  1085. package/dist/src/services/db/actors/checkStatus.d.ts +0 -4
  1086. package/dist/src/services/db/actors/checkStatus.d.ts.map +0 -1
  1087. package/dist/src/services/db/actors/checkStatus.js +0 -41
  1088. package/dist/src/services/db/actors/checkStatus.js.map +0 -1
  1089. package/dist/src/services/db/actors/connectToDb.d.ts +0 -4
  1090. package/dist/src/services/db/actors/connectToDb.d.ts.map +0 -1
  1091. package/dist/src/services/db/actors/connectToDb.js +0 -31
  1092. package/dist/src/services/db/actors/connectToDb.js.map +0 -1
  1093. package/dist/src/services/db/actors/migrate.d.ts +0 -4
  1094. package/dist/src/services/db/actors/migrate.d.ts.map +0 -1
  1095. package/dist/src/services/db/actors/migrate.js +0 -40
  1096. package/dist/src/services/db/actors/migrate.js.map +0 -1
  1097. package/dist/src/services/db/actors/validate.d.ts +0 -4
  1098. package/dist/src/services/db/actors/validate.d.ts.map +0 -1
  1099. package/dist/src/services/db/actors/validate.js +0 -40
  1100. package/dist/src/services/db/actors/validate.js.map +0 -1
  1101. package/dist/src/services/db/actors/waitForFiles.d.ts +0 -4
  1102. package/dist/src/services/db/actors/waitForFiles.d.ts.map +0 -1
  1103. package/dist/src/services/db/actors/waitForFiles.js +0 -32
  1104. package/dist/src/services/db/actors/waitForFiles.js.map +0 -1
  1105. package/dist/src/services/db/connectionManager.d.ts +0 -18
  1106. package/dist/src/services/db/connectionManager.d.ts.map +0 -1
  1107. package/dist/src/services/db/dbMachine.d.ts +0 -58
  1108. package/dist/src/services/db/dbMachine.d.ts.map +0 -1
  1109. package/dist/src/services/db/dbMachine.js +0 -156
  1110. package/dist/src/services/db/dbMachine.js.map +0 -1
  1111. package/dist/src/services/db/index.d.ts +0 -2
  1112. package/dist/src/services/db/index.d.ts.map +0 -1
  1113. package/dist/src/services/events.js +0 -15
  1114. package/dist/src/services/events.js.map +0 -1
  1115. package/dist/src/services/global/actors/addModelsToDb.d.ts +0 -4
  1116. package/dist/src/services/global/actors/addModelsToDb.d.ts.map +0 -1
  1117. package/dist/src/services/global/actors/addModelsToDb.js +0 -117
  1118. package/dist/src/services/global/actors/addModelsToDb.js.map +0 -1
  1119. package/dist/src/services/global/actors/getSchemaForModel.d.ts +0 -4
  1120. package/dist/src/services/global/actors/getSchemaForModel.d.ts.map +0 -1
  1121. package/dist/src/services/global/actors/getSchemaForModel.js +0 -26
  1122. package/dist/src/services/global/actors/getSchemaForModel.js.map +0 -1
  1123. package/dist/src/services/global/actors/initialize.d.ts +0 -4
  1124. package/dist/src/services/global/actors/initialize.d.ts.map +0 -1
  1125. package/dist/src/services/global/actors/initialize.js +0 -88
  1126. package/dist/src/services/global/actors/initialize.js.map +0 -1
  1127. package/dist/src/services/global/actors/savePublishService.d.ts +0 -4
  1128. package/dist/src/services/global/actors/savePublishService.d.ts.map +0 -1
  1129. package/dist/src/services/global/actors/savePublishService.js +0 -22
  1130. package/dist/src/services/global/actors/savePublishService.js.map +0 -1
  1131. package/dist/src/services/global/globalMachine.d.ts +0 -662
  1132. package/dist/src/services/global/globalMachine.d.ts.map +0 -1
  1133. package/dist/src/services/global/globalMachine.js +0 -246
  1134. package/dist/src/services/global/globalMachine.js.map +0 -1
  1135. package/dist/src/services/internal/actors/configureFs.d.ts +0 -4
  1136. package/dist/src/services/internal/actors/configureFs.d.ts.map +0 -1
  1137. package/dist/src/services/internal/actors/configureFs.js +0 -70
  1138. package/dist/src/services/internal/actors/configureFs.js.map +0 -1
  1139. package/dist/src/services/internal/actors/loadAppDb.d.ts +0 -4
  1140. package/dist/src/services/internal/actors/loadAppDb.d.ts.map +0 -1
  1141. package/dist/src/services/internal/actors/loadAppDb.js +0 -22
  1142. package/dist/src/services/internal/actors/loadAppDb.js.map +0 -1
  1143. package/dist/src/services/internal/actors/prepareDb.d.ts +0 -5
  1144. package/dist/src/services/internal/actors/prepareDb.d.ts.map +0 -1
  1145. package/dist/src/services/internal/actors/saveConfig.d.ts +0 -4
  1146. package/dist/src/services/internal/actors/saveConfig.d.ts.map +0 -1
  1147. package/dist/src/services/internal/actors/saveConfig.js +0 -76
  1148. package/dist/src/services/internal/actors/saveConfig.js.map +0 -1
  1149. package/dist/src/services/internal/actors/validateInput.d.ts +0 -4
  1150. package/dist/src/services/internal/actors/validateInput.d.ts.map +0 -1
  1151. package/dist/src/services/internal/actors/validateInput.js +0 -34
  1152. package/dist/src/services/internal/actors/validateInput.js.map +0 -1
  1153. package/dist/src/services/internal/actors/waitForFiles.d.ts +0 -4
  1154. package/dist/src/services/internal/actors/waitForFiles.d.ts.map +0 -1
  1155. package/dist/src/services/internal/actors/waitForFiles.js +0 -33
  1156. package/dist/src/services/internal/actors/waitForFiles.js.map +0 -1
  1157. package/dist/src/services/internal/constants.d.ts +0 -75
  1158. package/dist/src/services/internal/constants.d.ts.map +0 -1
  1159. package/dist/src/services/internal/constants.js +0 -85
  1160. package/dist/src/services/internal/constants.js.map +0 -1
  1161. package/dist/src/services/internal/helpers.d.ts +0 -10
  1162. package/dist/src/services/internal/helpers.d.ts.map +0 -1
  1163. package/dist/src/services/internal/helpers.js +0 -171
  1164. package/dist/src/services/internal/helpers.js.map +0 -1
  1165. package/dist/src/services/internal/internalMachine.d.ts +0 -57
  1166. package/dist/src/services/internal/internalMachine.d.ts.map +0 -1
  1167. package/dist/src/services/internal/internalMachine.js +0 -188
  1168. package/dist/src/services/internal/internalMachine.js.map +0 -1
  1169. package/dist/src/services/internal/queries.d.ts +0 -4
  1170. package/dist/src/services/internal/queries.d.ts.map +0 -1
  1171. package/dist/src/services/internal/types.d.ts +0 -12
  1172. package/dist/src/services/internal/types.d.ts.map +0 -1
  1173. package/dist/src/services/publish/actors/createPublishAttempt.js.map +0 -1
  1174. package/dist/src/services/publish/actors/preparePublishRequestData.js +0 -72
  1175. package/dist/src/services/publish/actors/preparePublishRequestData.js.map +0 -1
  1176. package/dist/src/services/publish/actors/upload.js +0 -55
  1177. package/dist/src/services/publish/actors/upload.js.map +0 -1
  1178. package/dist/src/services/publish/actors/validateItemData.js.map +0 -1
  1179. package/dist/src/services/publish/publishMachine.js +0 -71
  1180. package/dist/src/services/publish/publishMachine.js.map +0 -1
  1181. package/dist/src/stores/eas.js +0 -45
  1182. package/dist/src/stores/eas.js.map +0 -1
  1183. package/dist/src/stores/modelClass.d.ts +0 -6
  1184. package/dist/src/stores/modelClass.d.ts.map +0 -1
  1185. package/dist/src/stores/modelClass.js +0 -16
  1186. package/dist/src/stores/modelClass.js.map +0 -1
  1187. /package/dist/{src/Item → Item}/service/actors/hydrateNewItem.js +0 -0
  1188. /package/dist/{src/Item → Item}/service/actors/reload.js +0 -0
  1189. /package/dist/{src/Item → Item}/service/actors/waitForDb.js +0 -0
  1190. /package/dist/{src/ItemProperty → ItemProperty}/service/actors/resolveRemoteStorage.js +0 -0
  1191. /package/dist/{src/ItemProperty → ItemProperty}/service/actors/saveValueToDb/saveImage.js +0 -0
  1192. /package/dist/{src/ItemProperty → ItemProperty}/service/actors/waitForDb.js +0 -0
  1193. /package/dist/{src/browser → browser}/react/trash.js +0 -0
  1194. /package/dist/{src/browser → browser}/workers/FileDownloader.js +0 -0
  1195. /package/dist/{src/browser → browser}/workers/ImageResizer.js +0 -0
  1196. /package/dist/{src/browser → browser}/workers/filesDownload.js +0 -0
  1197. /package/dist/{src/browser → browser}/workers/imageResize.js +0 -0
  1198. /package/dist/{src/eventBus.js → eventBus.js} +0 -0
  1199. /package/dist/{src/events → events}/item/index.js +0 -0
  1200. /package/dist/{src/events → events}/services/index.js +0 -0
  1201. /package/dist/{src/helpers → helpers}/ArweaveClient/BaseArweaveClient.js +0 -0
  1202. /package/dist/{src/helpers → helpers}/ArweaveClient/queries.js +0 -0
  1203. /package/dist/{src/helpers → helpers}/QueryClient/BaseQueryClient.js +0 -0
  1204. /package/dist/{src/helpers → helpers}/crypto.js +0 -0
  1205. /package/dist/{src/helpers → helpers}/updateMachineContext.js +0 -0
  1206. /package/dist/{src/node → node}/helpers/QueryClient.js +0 -0
  1207. /package/dist/{src/node → node}/webpack/index.js +0 -0
  1208. /package/dist/{src/seedSchema → seedSchema}/AppStateSchema.js +0 -0
  1209. /package/dist/{src/seedSchema → seedSchema}/ConfigSchema.js +0 -0
  1210. /package/dist/{src/seedSchema → seedSchema}/MetadataSchema.js +0 -0
  1211. /package/dist/{src/seedSchema → seedSchema}/SeedSchema.js +0 -0
  1212. /package/dist/{src/seedSchema → seedSchema}/VersionSchema.js +0 -0
  1213. /package/dist/{src/services → services}/publish/actors/createPublishAttempt.js +0 -0
  1214. /package/dist/{src/services → services}/publish/actors/validateItemData.js +0 -0
  1215. /package/dist/src/{schema → helpers}/file/download/actors.d.ts +0 -0
  1216. /package/dist/src/{schema → helpers}/file/download/index.d.ts +0 -0
  1217. /package/dist/src/{schema → helpers}/file/fetchAll/actors.d.ts +0 -0
  1218. /package/dist/src/{schema → helpers}/file/fetchAll/index.d.ts +0 -0
  1219. /package/dist/src/{schema → helpers}/file/queries.d.ts +0 -0
  1220. /package/dist/src/{schema → helpers}/image/queries.d.ts +0 -0
@@ -0,0 +1,1831 @@
1
+ import { createActor } from 'xstate';
2
+ import { modelMachine } from './service/modelMachine.js';
3
+ import { Item } from '../Item/Item.js';
4
+ import { generateId } from '../helpers/index.js';
5
+ import { BaseDb } from '../db/Db/BaseDb.js';
6
+ import { ConflictError } from '../Schema/errors.js';
7
+ import { renameModelInDb } from '../helpers/db.js';
8
+ import { models } from '../seedSchema/ModelSchema.js';
9
+ import { eq } from 'drizzle-orm';
10
+ import debug from 'debug';
11
+
12
+ const logger = debug('seedSdk:model:Model');
13
+ const saveDraftLogger = debug('seedSdk:model:saveDraftToDb');
14
+ // Lazy import cache for ModelProperty to avoid circular dependency
15
+ // Eagerly start loading to minimize delay on first access
16
+ let ModelPropertyClass = null;
17
+ import('../ModelProperty/ModelProperty.js')
18
+ .then(module => {
19
+ ModelPropertyClass = module.ModelProperty;
20
+ return ModelPropertyClass;
21
+ })
22
+ .catch(() => {
23
+ // If import fails, ModelPropertyClass remains null
24
+ return null;
25
+ });
26
+ function getModelProperty() {
27
+ // Return cached class if available (synchronous access)
28
+ // Note: On first access before import completes, this will return null
29
+ // and the getter will return empty array, which matches the original behavior
30
+ return ModelPropertyClass;
31
+ }
32
+ // Lazy import cache for Schema to avoid circular dependency
33
+ let SchemaClass = null;
34
+ import('../Schema/Schema.js')
35
+ .then(module => {
36
+ SchemaClass = module.Schema;
37
+ return SchemaClass;
38
+ })
39
+ .catch(() => {
40
+ // If import fails, SchemaClass remains null
41
+ return null;
42
+ });
43
+ // WeakMap to store mutable state per Model instance
44
+ // This avoids issues with read-only properties when instances are frozen by Immer
45
+ const modelInstanceState = new WeakMap();
46
+ // Define tracked properties for the Proxy
47
+ // These properties will be read from/written to the actor context
48
+ const TRACKED_PROPERTIES = [
49
+ 'id', // schemaFileId (string) - public ID
50
+ 'modelName',
51
+ 'schemaName',
52
+ 'properties',
53
+ ];
54
+ class Model {
55
+ static trackPendingWrite(modelFileId, schemaId) {
56
+ this.pendingWrites.set(modelFileId, {
57
+ modelFileId,
58
+ schemaId,
59
+ status: 'pending',
60
+ timestamp: Date.now(),
61
+ });
62
+ }
63
+ static getPendingModelIds(schemaId) {
64
+ return Array.from(this.pendingWrites.entries())
65
+ .filter(([_, write]) => write.schemaId === schemaId && write.status !== 'error')
66
+ .map(([modelFileId]) => modelFileId);
67
+ }
68
+ // 'name' is available as an alias for 'modelName' via the proxy
69
+ constructor(modelName, schemaName, id, // schemaFileId (string) - public ID
70
+ initialContext) {
71
+ const serviceInput = {
72
+ modelName,
73
+ schemaName,
74
+ ...(id ? { id } : {}),
75
+ ...(initialContext?._pendingPropertyDefinitions ? { _pendingPropertyDefinitions: initialContext._pendingPropertyDefinitions } : {}),
76
+ };
77
+ this._service = createActor(modelMachine, {
78
+ input: serviceInput,
79
+ });
80
+ this._service.start();
81
+ // Initialize instance state in WeakMap
82
+ modelInstanceState.set(this, {
83
+ liveQuerySubscription: null,
84
+ });
85
+ // Set up liveQuery subscription for cross-instance property updates
86
+ this._setupLiveQuerySubscription();
87
+ // Subscribe to refresh properties after they're created (for Node.js where liveQuery isn't available)
88
+ let previousState;
89
+ this._service.subscribe((snapshot) => {
90
+ // Check if we just transitioned to idle from creatingProperties state
91
+ if (snapshot.value === 'idle' && previousState === 'creatingProperties') {
92
+ console.log('[Model constructor] Transitioned to idle after creating properties, refreshing properties from DB');
93
+ // Small delay to ensure properties are written to DB
94
+ setTimeout(() => {
95
+ this._refreshPropertiesFromDb().catch((error) => {
96
+ logger(`[Model constructor] Error refreshing properties: ${error}`);
97
+ });
98
+ }, 200);
99
+ }
100
+ previousState = snapshot.value;
101
+ });
102
+ // Note: Property getters/setters are now handled by the Proxy in create()
103
+ }
104
+ /**
105
+ * Find a unique model name by checking for duplicates (case-insensitive) in the cache
106
+ * If duplicates are found, appends an incrementing number to make it unique
107
+ *
108
+ * @param modelName - The desired model name
109
+ * @param schemaName - The schema name
110
+ * @param skipAllChecks - If true, skip all duplicate checks and return original name (used when creating schema models to preserve original names)
111
+ * @returns A unique model name
112
+ */
113
+ static findUniqueModelName(modelName, schemaName, skipAllChecks = false) {
114
+ // If skipAllChecks is true (schema models), preserve original name
115
+ if (skipAllChecks) {
116
+ return modelName;
117
+ }
118
+ const lowerModelName = modelName.toLowerCase();
119
+ // Check all cached models for this schema
120
+ const existingNames = new Set();
121
+ const existingNumbers = new Set();
122
+ // Check name-based cache
123
+ for (const [nameKey, modelFileId] of this.instanceCacheByName.entries()) {
124
+ const [cachedSchemaName, cachedModelName] = nameKey.split(':', 2);
125
+ if (cachedSchemaName === schemaName && cachedModelName) {
126
+ const lowerCachedName = cachedModelName.toLowerCase();
127
+ existingNames.add(lowerCachedName);
128
+ // If it matches the base name (case-insensitive), check if it has a number suffix
129
+ if (lowerCachedName === lowerModelName) {
130
+ existingNumbers.add(0); // Base name exists
131
+ }
132
+ else if (lowerCachedName.startsWith(lowerModelName + ' ')) {
133
+ // Check if it's the base name followed by a space and a number
134
+ const suffix = lowerCachedName.slice(lowerModelName.length + 1);
135
+ const number = parseInt(suffix, 10);
136
+ if (!isNaN(number) && suffix === number.toString()) {
137
+ existingNumbers.add(number);
138
+ }
139
+ }
140
+ }
141
+ }
142
+ // Check legacy cache
143
+ for (const [nameKey] of this.instanceCache.keys()) {
144
+ const [cachedSchemaName, cachedModelName] = nameKey.split(':', 2);
145
+ if (cachedSchemaName === schemaName && cachedModelName) {
146
+ const lowerCachedName = cachedModelName.toLowerCase();
147
+ existingNames.add(lowerCachedName);
148
+ // If it matches the base name (case-insensitive), check if it has a number suffix
149
+ if (lowerCachedName === lowerModelName) {
150
+ existingNumbers.add(0); // Base name exists
151
+ }
152
+ else if (lowerCachedName.startsWith(lowerModelName + ' ')) {
153
+ // Check if it's the base name followed by a space and a number
154
+ const suffix = lowerCachedName.slice(lowerModelName.length + 1);
155
+ const number = parseInt(suffix, 10);
156
+ if (!isNaN(number) && suffix === number.toString()) {
157
+ existingNumbers.add(number);
158
+ }
159
+ }
160
+ }
161
+ }
162
+ // Also check schema context models (case-insensitive)
163
+ // This ensures runtime-created models are renamed if they conflict with schema-defined models
164
+ try {
165
+ // Use lazy-loaded Schema class to avoid circular dependency
166
+ if (SchemaClass) {
167
+ const schema = SchemaClass.create(schemaName);
168
+ const schemaContext = schema.getService().getSnapshot().context;
169
+ if (schemaContext.models) {
170
+ for (const schemaModelName of Object.keys(schemaContext.models)) {
171
+ const lowerSchemaModelName = schemaModelName.toLowerCase();
172
+ // If it matches the base name (case-insensitive), check if it has a number suffix
173
+ if (lowerSchemaModelName === lowerModelName) {
174
+ existingNumbers.add(0); // Base name exists in schema
175
+ }
176
+ else if (lowerSchemaModelName.startsWith(lowerModelName + ' ')) {
177
+ // Check if it's the base name followed by a space and a number
178
+ const suffix = lowerSchemaModelName.slice(lowerModelName.length + 1);
179
+ const number = parseInt(suffix, 10);
180
+ if (!isNaN(number) && suffix === number.toString()) {
181
+ existingNumbers.add(number);
182
+ }
183
+ }
184
+ }
185
+ }
186
+ }
187
+ }
188
+ catch (error) {
189
+ // If schema check fails, continue with cache-only check
190
+ // This is a best-effort check and shouldn't block model creation
191
+ }
192
+ // If no duplicates found (no base name match and no numbered variants), return original name
193
+ if (existingNumbers.size === 0) {
194
+ return modelName;
195
+ }
196
+ // Find the next available number
197
+ // Start from 1 if base name exists, otherwise check if we can use 1
198
+ let nextNumber = existingNumbers.has(0) ? 1 : 1;
199
+ while (existingNumbers.has(nextNumber)) {
200
+ nextNumber++;
201
+ }
202
+ // Return the name with the number appended
203
+ return `${modelName} ${nextNumber}`;
204
+ }
205
+ /**
206
+ * Create a new Model instance or return existing cached instance
207
+ *
208
+ * @param modelName - The name of the model
209
+ * @param schemaNameOrSchema - The schema name (string) or Schema instance
210
+ * @param options - Optional configuration (can be omitted to create model with empty properties):
211
+ * - modelFileId: Pre-existing model file ID
212
+ * - properties: Model properties definition (defaults to empty object if not provided)
213
+ * - registerWithSchema: Whether to automatically register this model with its schema (default: true if schema instance provided)
214
+ *
215
+ * @example
216
+ * // Create model with empty properties
217
+ * const model = Model.create('MyModel', schema)
218
+ *
219
+ * @example
220
+ * // Create model with properties
221
+ * const model = Model.create('MyModel', schema, {
222
+ * properties: { title: { dataType: 'String' } }
223
+ * })
224
+ */
225
+ static create(modelName, schemaNameOrSchema, // Schema type - using any to avoid circular dependency
226
+ options) {
227
+ if (!modelName) {
228
+ throw new Error('Model name is required');
229
+ }
230
+ // Extract schema name and instance
231
+ let schemaName;
232
+ let schemaInstance; // Using any to avoid circular dependency with Schema
233
+ if (typeof schemaNameOrSchema === 'string') {
234
+ schemaName = schemaNameOrSchema;
235
+ }
236
+ else {
237
+ schemaInstance = schemaNameOrSchema;
238
+ schemaName = schemaInstance.schemaName;
239
+ }
240
+ if (!schemaName) {
241
+ throw new Error('Schema name is required');
242
+ }
243
+ // Support both modelFileId (documented) and id (backward compatibility)
244
+ const id = options?.modelFileId || options?.id; // schemaFileId (string) - public ID
245
+ const registerWithSchema = options?.registerWithSchema !== false && schemaInstance !== undefined;
246
+ // Step 1: Check ID-based cache first (if ID provided)
247
+ if (id && this.instanceCacheById.has(id)) {
248
+ const { instance, refCount } = this.instanceCacheById.get(id);
249
+ this.instanceCacheById.set(id, {
250
+ instance,
251
+ refCount: refCount + 1,
252
+ });
253
+ logger(`Model.create: Found instance in ID cache for "${modelName}" (ID: ${id})`);
254
+ return instance;
255
+ }
256
+ // Step 2: Check for duplicate names and generate unique name if needed (before checking cache)
257
+ // This allows us to create new models with renamed versions when duplicates exist
258
+ // Skip all duplicate checks if modelFileId is provided (schema models should preserve original names)
259
+ const skipAllChecks = !!id; // If id (modelFileId) is provided, this is a schema model - skip schema check to preserve name
260
+ const uniqueModelName = this.findUniqueModelName(modelName, schemaName, skipAllChecks);
261
+ // Step 3: Check name-based index with ORIGINAL name first (before using unique name)
262
+ // Only return existing instance if the unique name matches the original (no rename needed)
263
+ // If a rename is needed, we'll create a new model with the unique name
264
+ let resolvedId = id;
265
+ if (!resolvedId && uniqueModelName === modelName) {
266
+ // No rename needed - check if instance exists with original name
267
+ const originalNameKey = `${schemaName}:${modelName}`;
268
+ resolvedId = this.instanceCacheByName.get(originalNameKey);
269
+ if (resolvedId && this.instanceCacheById.has(resolvedId)) {
270
+ const { instance, refCount } = this.instanceCacheById.get(resolvedId);
271
+ this.instanceCacheById.set(resolvedId, {
272
+ instance,
273
+ refCount: refCount + 1,
274
+ });
275
+ logger(`Model.create: Found instance via name index for "${modelName}" (ID: ${resolvedId})`);
276
+ return instance;
277
+ }
278
+ }
279
+ // Step 4: Check legacy cache with original name (only if no rename needed)
280
+ if (uniqueModelName === modelName) {
281
+ const originalNameKey = `${schemaName}:${modelName}`;
282
+ if (this.instanceCache.has(originalNameKey)) {
283
+ const { instance, refCount } = this.instanceCache.get(originalNameKey);
284
+ this.instanceCache.set(originalNameKey, {
285
+ instance,
286
+ refCount: refCount + 1,
287
+ });
288
+ logger(`Model.create: Found instance in legacy cache for "${modelName}"`);
289
+ // Migrate to new cache structure
290
+ const context = instance._getSnapshotContext();
291
+ const existingId = context.id; // id is now the schemaFileId (string)
292
+ if (existingId) {
293
+ this.instanceCacheById.set(existingId, { instance, refCount: refCount + 1 });
294
+ this.instanceCacheByName.set(originalNameKey, existingId);
295
+ }
296
+ return instance;
297
+ }
298
+ }
299
+ // Step 5: Log if rename is needed
300
+ if (uniqueModelName !== modelName) {
301
+ logger(`Model.create: Found duplicate name "${modelName}" in schema "${schemaName}", using unique name "${uniqueModelName}"`);
302
+ // CRITICAL: When a rename is detected, check all cached instances to see if any match the original name
303
+ // This handles the case where a model was created, saved to DB, then renamed in cache
304
+ // We need to find the existing instance by checking all cached instances for this schema
305
+ for (const [cachedId, { instance }] of this.instanceCacheById.entries()) {
306
+ const context = instance._getSnapshotContext();
307
+ // Check if this instance belongs to the same schema and has the original name
308
+ // Note: We check the context's modelName which reflects the current name (may be renamed)
309
+ // But we also need to check if it was originally created with the requested name
310
+ // Since we can't query DB synchronously, we check if the instance's current name matches
311
+ // the original name OR if it's in the same schema and might be the model we're looking for
312
+ if (context.schemaName === schemaName) {
313
+ // If the instance's current name matches the original name, return it
314
+ // This handles the case where the model wasn't actually renamed yet
315
+ if (context.modelName === modelName) {
316
+ const { refCount } = this.instanceCacheById.get(cachedId);
317
+ this.instanceCacheById.set(cachedId, {
318
+ instance,
319
+ refCount: refCount + 1,
320
+ });
321
+ // Update name index to include original name if not already there
322
+ const originalNameKey = `${schemaName}:${modelName}`;
323
+ if (!this.instanceCacheByName.has(originalNameKey)) {
324
+ this.instanceCacheByName.set(originalNameKey, cachedId);
325
+ }
326
+ logger(`Model.create: Found existing instance with original name "${modelName}" (ID: ${cachedId}) despite rename detection`);
327
+ return instance;
328
+ }
329
+ }
330
+ }
331
+ }
332
+ // Create name-based cache key using the unique name (for new instances)
333
+ const nameKey = `${schemaName}:${uniqueModelName}`;
334
+ // Step 6: Check legacy cache with unique name (backward compatibility during migration)
335
+ // This is a fallback in case an instance was cached with a unique name
336
+ if (this.instanceCache.has(nameKey)) {
337
+ const { instance, refCount } = this.instanceCache.get(nameKey);
338
+ this.instanceCache.set(nameKey, {
339
+ instance,
340
+ refCount: refCount + 1,
341
+ });
342
+ logger(`Model.create: Found instance in legacy cache for "${modelName}"`);
343
+ // Migrate to new cache structure
344
+ const context = instance._getSnapshotContext();
345
+ const existingId = context.id; // id is now the schemaFileId (string)
346
+ if (existingId) {
347
+ this.instanceCacheById.set(existingId, { instance, refCount: refCount + 1 });
348
+ this.instanceCacheByName.set(nameKey, existingId);
349
+ }
350
+ return instance;
351
+ }
352
+ // Step 7: Generate ID if not provided (before creating instance)
353
+ if (!resolvedId) {
354
+ resolvedId = generateId();
355
+ logger(`Model.create: Generated new id (schemaFileId) "${resolvedId}" for model "${modelName}"`);
356
+ }
357
+ // Step 7: Create new instance with id in initial context
358
+ // This ensures loadOrCreateModel sees the ID immediately
359
+ // Pass _pendingPropertyDefinitions in initial context to avoid race condition with loadOrCreateModel
360
+ // This is the proper XState way - include it in the initial input so it's available from the start
361
+ const initialContext = options?.properties
362
+ ? { _pendingPropertyDefinitions: JSON.parse(JSON.stringify(options.properties)) }
363
+ : undefined;
364
+ // Use the unique model name for the instance
365
+ const newInstance = new this(uniqueModelName, schemaName, resolvedId, initialContext);
366
+ if (options?.properties) {
367
+ logger(`[Model.create] Created instance with _pendingPropertyDefinitions in initial context (${Object.keys(options.properties).length} properties) for model "${uniqueModelName}"`);
368
+ }
369
+ console.log('newInstance created for', uniqueModelName, 'with id', resolvedId);
370
+ // Step 7: Set initial model data if provided
371
+ // Note: description is not supported - JSON files can have it but we ignore it at runtime
372
+ if (options) {
373
+ const updates = {};
374
+ if (Object.keys(updates).length > 0) {
375
+ newInstance._service.send({
376
+ type: 'updateContext',
377
+ ...updates,
378
+ });
379
+ // Initialize original values
380
+ // Note: properties are not stored in context, they're computed from ModelProperty instances
381
+ newInstance._service.send({
382
+ type: 'initializeOriginalValues',
383
+ originalValues: {},
384
+ isEdited: false,
385
+ });
386
+ }
387
+ }
388
+ // Wrap instance in Proxy for reactive property access
389
+ // Create a custom proxy that handles 'name' as an alias for 'modelName'
390
+ const proxiedInstance = new Proxy(newInstance, {
391
+ get(target, prop) {
392
+ // Handle special properties
393
+ if (prop === '_service') {
394
+ return Reflect.get(target, prop);
395
+ }
396
+ // Handle 'name' as an alias for 'modelName'
397
+ if (prop === 'name') {
398
+ const context = target._getSnapshotContext();
399
+ return context.modelName;
400
+ }
401
+ // Handle 'id' property - returns the schemaFileId (string)
402
+ if (prop === 'id') {
403
+ const context = target._getSnapshotContext();
404
+ return context.id; // id is now the schemaFileId (string)
405
+ }
406
+ // Handle tracked properties
407
+ if (typeof prop === 'string' && TRACKED_PROPERTIES.includes(prop)) {
408
+ // Special handling for properties - compute from liveQuery + ModelProperty static cache
409
+ if (prop === 'properties') {
410
+ const snapshot = target._service.getSnapshot();
411
+ const context = snapshot.context;
412
+ // Get property IDs from liveQuery (stored in context, not instanceState)
413
+ const liveQueryIds = context._liveQueryPropertyIds || [];
414
+ console.log(`[Model.properties getter] Model "${context.modelName}" (state: ${snapshot.value}) - liveQueryIds:`, Array.isArray(liveQueryIds) ? `[${liveQueryIds.length} items: ${liveQueryIds.join(', ')}]` : liveQueryIds);
415
+ // Get _dbId from context for pending writes lookup
416
+ const dbId = context._dbId; // _dbId is the database integer ID
417
+ console.log('_dbId', dbId);
418
+ // Get pending property IDs (synchronous - uses static Map)
419
+ // Lazy import ModelProperty to avoid circular dependency
420
+ const ModelProperty = getModelProperty();
421
+ if (!ModelProperty) {
422
+ // If ModelProperty is not yet loaded, return empty array
423
+ // It will be available on subsequent accesses after the async import completes
424
+ return [];
425
+ }
426
+ const pendingIds = dbId ? ModelProperty.getPendingPropertyIds(dbId) : [];
427
+ console.log(`[Model.properties getter] Model "${context.modelName}" (state: ${snapshot.value}) - pendingIds:`, pendingIds);
428
+ // Combine and deduplicate
429
+ const allPropertyIds = [...new Set([...liveQueryIds, ...pendingIds])];
430
+ console.log('[Model.properties getter] allPropertyIds', allPropertyIds);
431
+ // Get ModelProperty instances from static cache (synchronous)
432
+ const propertyInstances = [];
433
+ for (const propertyFileId of allPropertyIds) {
434
+ console.log('[Model.properties getter] propertyFileId', propertyFileId);
435
+ const property = ModelProperty.getById(propertyFileId);
436
+ console.log('[Model.properties getter] property', property);
437
+ if (property) {
438
+ propertyInstances.push(property);
439
+ }
440
+ // Note: Cannot create properties asynchronously in this synchronous getter
441
+ // Properties will be created elsewhere when needed
442
+ }
443
+ // CRITICAL: Always create a new array reference so React detects changes
444
+ console.log('[Model.properties getter] propertyInstances', propertyInstances.map(p => p.name));
445
+ return [...propertyInstances];
446
+ }
447
+ const context = target._getSnapshotContext();
448
+ return context[prop];
449
+ }
450
+ // For methods and other properties, use Reflect
451
+ return Reflect.get(target, prop);
452
+ },
453
+ set(target, prop, value) {
454
+ // Handle special properties
455
+ if (prop === '_service') {
456
+ return Reflect.set(target, prop, value);
457
+ }
458
+ // Handle 'name' as an alias for 'modelName'
459
+ if (prop === 'name') {
460
+ prop = 'modelName';
461
+ }
462
+ // Handle tracked properties
463
+ if (typeof prop === 'string' && TRACKED_PROPERTIES.includes(prop)) {
464
+ // Use the sendUpdate logic
465
+ if (prop === 'modelName') {
466
+ // Model name change - need to update Schema and database
467
+ const context = target._getSnapshotContext();
468
+ const oldName = context.modelName;
469
+ const newName = value;
470
+ if (oldName === newName) {
471
+ logger(`Model name unchanged: "${oldName}"`);
472
+ return true;
473
+ }
474
+ logger(`Updating model name from "${oldName}" to "${newName}"`);
475
+ // Update Model instance cache using new ID-based structure
476
+ const modelFileId = context.id; // id is now the schemaFileId (string)
477
+ if (modelFileId) {
478
+ Model.updateNameIndex(oldName, newName, context.schemaName, modelFileId);
479
+ }
480
+ else {
481
+ // Fallback to legacy cache if no ID (shouldn't happen, but safety)
482
+ const oldCacheKey = `${context.schemaName}:${oldName}`;
483
+ const newCacheKey = `${context.schemaName}:${newName}`;
484
+ if (Model.instanceCache.has(oldCacheKey)) {
485
+ const entry = Model.instanceCache.get(oldCacheKey);
486
+ Model.instanceCache.delete(oldCacheKey);
487
+ Model.instanceCache.set(newCacheKey, entry);
488
+ }
489
+ }
490
+ // Update Model context
491
+ target._service.send({
492
+ type: 'updateContext',
493
+ modelName: newName,
494
+ });
495
+ // Mark model as draft
496
+ target._service.send({
497
+ type: 'markAsDraft',
498
+ propertyKey: 'modelName',
499
+ });
500
+ // Save draft to database immediately so changes persist
501
+ target._saveDraftToDb(oldName, newName).catch((error) => {
502
+ logger(`Failed to save draft to database: ${error instanceof Error ? error.message : String(error)}`);
503
+ });
504
+ // NOTE: Schema is not notified of model name changes during edits.
505
+ // Schema will read from Model instances when persisting/saving.
506
+ }
507
+ else if (prop === 'properties') {
508
+ // Properties are read-only computed values from ModelProperty instances
509
+ // Cannot be set directly - properties are managed via ModelProperty instances
510
+ throw new Error('Cannot set model.properties directly. Properties are computed from ModelProperty instances.');
511
+ }
512
+ else if (prop === 'description') {
513
+ // Description is not supported - JSON files can have it but we ignore it at runtime
514
+ throw new Error('Cannot set model.description. Description is not supported in runtime Model instances.');
515
+ }
516
+ else {
517
+ // Standard property update
518
+ target._service.send({
519
+ type: 'updateContext',
520
+ [prop]: value,
521
+ });
522
+ }
523
+ return true;
524
+ }
525
+ // For non-tracked properties, use Reflect
526
+ return Reflect.set(target, prop, value);
527
+ },
528
+ has(target, prop) {
529
+ // Handle 'name' as an alias for 'modelName'
530
+ if (prop === 'name') {
531
+ return true;
532
+ }
533
+ // Handle 'id' property
534
+ if (prop === 'id') {
535
+ return true;
536
+ }
537
+ // Check tracked properties
538
+ if (typeof prop === 'string' && TRACKED_PROPERTIES.includes(prop)) {
539
+ const context = target._getSnapshotContext();
540
+ return prop in context;
541
+ }
542
+ return Reflect.has(target, prop);
543
+ },
544
+ ownKeys(target) {
545
+ // Include 'name' and 'id' in ownKeys
546
+ const keys = Reflect.ownKeys(target);
547
+ const additionalKeys = [];
548
+ if (!keys.includes('name')) {
549
+ additionalKeys.push('name');
550
+ }
551
+ if (!keys.includes('id')) {
552
+ additionalKeys.push('id');
553
+ }
554
+ return additionalKeys.length > 0 ? [...keys, ...additionalKeys] : keys;
555
+ },
556
+ getOwnPropertyDescriptor(target, prop) {
557
+ // Handle 'name' as an alias for 'modelName'
558
+ if (prop === 'name') {
559
+ const context = target._getSnapshotContext();
560
+ return {
561
+ enumerable: true,
562
+ configurable: true,
563
+ value: context.modelName,
564
+ writable: true,
565
+ };
566
+ }
567
+ // Handle 'id' property - returns the modelFileId
568
+ if (prop === 'id') {
569
+ const context = target._getSnapshotContext();
570
+ return {
571
+ enumerable: true,
572
+ configurable: true,
573
+ value: context.id, // id is now the schemaFileId (string)
574
+ writable: false, // id is read-only
575
+ };
576
+ }
577
+ // Handle tracked properties
578
+ if (typeof prop === 'string' && TRACKED_PROPERTIES.includes(prop)) {
579
+ const context = target._getSnapshotContext();
580
+ if (prop in context) {
581
+ return {
582
+ enumerable: true,
583
+ configurable: true,
584
+ value: context[prop],
585
+ writable: true,
586
+ };
587
+ }
588
+ }
589
+ return Reflect.getOwnPropertyDescriptor(target, prop);
590
+ },
591
+ });
592
+ // Step 8: Store in new ID-based cache
593
+ // resolvedId is guaranteed to be defined at this point (generated if not provided)
594
+ this.instanceCacheById.set(resolvedId, {
595
+ instance: proxiedInstance,
596
+ refCount: 1,
597
+ });
598
+ // Step 9: Store in name-based index
599
+ this.instanceCacheByName.set(nameKey, resolvedId);
600
+ // Step 10: Also store in legacy cache (for backward compatibility during migration)
601
+ this.instanceCache.set(nameKey, {
602
+ instance: proxiedInstance,
603
+ refCount: 1,
604
+ });
605
+ logger(`Model.create: Created new instance for "${uniqueModelName}" (ID: ${id})`);
606
+ // Model instance is now cached and accessible via Model.getById() and Model.getByName()
607
+ // No wrapper or store registration needed
608
+ // Step 11: Register with schema if requested, OR trigger write if properties are provided
609
+ // If properties are provided, we need to write the model to get modelId for property creation
610
+ // If schema provided, trigger write process instead of registration
611
+ const shouldTriggerWrite = (registerWithSchema && schemaInstance) || (options?.properties && Object.keys(options.properties).length > 0);
612
+ if (shouldTriggerWrite) {
613
+ queueMicrotask(async () => {
614
+ try {
615
+ // Wait for model to reach idle state (validation complete)
616
+ await new Promise((resolve) => {
617
+ const subscription = proxiedInstance._service.subscribe((snapshot) => {
618
+ // Wait for idle state (validation complete) or error state
619
+ if (snapshot.value === 'idle' || snapshot.value === 'error') {
620
+ subscription.unsubscribe();
621
+ resolve();
622
+ }
623
+ });
624
+ // Timeout after 10 seconds
625
+ setTimeout(() => {
626
+ subscription.unsubscribe();
627
+ resolve();
628
+ }, 10000);
629
+ });
630
+ // Only write if validation passed (model is in idle state, not error)
631
+ const finalSnapshot = proxiedInstance._service.getSnapshot();
632
+ if (finalSnapshot.value === 'idle' && (!finalSnapshot.context._validationErrors || finalSnapshot.context._validationErrors.length === 0)) {
633
+ logger(`Model validation passed, triggering write process`);
634
+ // Get schema ID from schema instance or look it up by schema name
635
+ let schemaId;
636
+ if (schemaInstance) {
637
+ const schemaContext = schemaInstance._getSnapshotContext();
638
+ const schemaFileId = schemaContext.id; // id is the schemaFileId (string) in SchemaMachineContext
639
+ if (schemaFileId) {
640
+ try {
641
+ const { BaseDb } = await import('../db/Db/BaseDb.js');
642
+ const { schemas: schemasTable } = await import('../seedSchema/SchemaSchema.js');
643
+ const { eq } = await import('drizzle-orm');
644
+ const db = BaseDb.getAppDb();
645
+ if (db) {
646
+ const schemaRecords = await db
647
+ .select()
648
+ .from(schemasTable)
649
+ .where(eq(schemasTable.schemaFileId, schemaFileId))
650
+ .limit(1);
651
+ if (schemaRecords.length > 0) {
652
+ schemaId = schemaRecords[0].id;
653
+ }
654
+ }
655
+ }
656
+ catch (error) {
657
+ logger(`Error looking up schemaId: ${error}`);
658
+ }
659
+ }
660
+ }
661
+ else if (schemaName) {
662
+ // If no schema instance but we have schema name, look it up by name
663
+ try {
664
+ const { BaseDb } = await import('../db/Db/BaseDb.js');
665
+ const { schemas: schemasTable } = await import('../seedSchema/SchemaSchema.js');
666
+ const { eq } = await import('drizzle-orm');
667
+ const db = BaseDb.getAppDb();
668
+ if (db) {
669
+ const schemaRecords = await db
670
+ .select()
671
+ .from(schemasTable)
672
+ .where(eq(schemasTable.name, schemaName))
673
+ .limit(1);
674
+ if (schemaRecords.length > 0) {
675
+ schemaId = schemaRecords[0].id;
676
+ }
677
+ }
678
+ }
679
+ catch (error) {
680
+ logger(`Error looking up schemaId by name: ${error}`);
681
+ }
682
+ }
683
+ if (schemaId && finalSnapshot.context.id) {
684
+ // Track pending write
685
+ Model.trackPendingWrite(finalSnapshot.context.id, schemaId); // id is now the schemaFileId (string)
686
+ // Wait for writeProcess to be spawned (it's spawned in idle state entry action)
687
+ // Retry a few times if writeProcess isn't available yet
688
+ let retries = 0;
689
+ const maxRetries = 10;
690
+ const checkAndSend = async () => {
691
+ const currentSnapshot = proxiedInstance._service.getSnapshot();
692
+ if (currentSnapshot.context.writeProcess) {
693
+ logger(`Triggering write process for model "${finalSnapshot.context.modelName}" (schemaId: ${schemaId})`);
694
+ // Use pending property definitions if available, otherwise convert from ModelProperty instances
695
+ let propertiesObject = {};
696
+ if (currentSnapshot.context._pendingPropertyDefinitions) {
697
+ // Use the original property definitions for the write
698
+ // Convert dataType to type for validation compatibility
699
+ propertiesObject = JSON.parse(JSON.stringify(currentSnapshot.context._pendingPropertyDefinitions));
700
+ for (const [propName, propData] of Object.entries(propertiesObject)) {
701
+ if (propData.dataType && !propData.type) {
702
+ propertiesObject[propName] = {
703
+ ...propData,
704
+ type: propData.dataType,
705
+ };
706
+ }
707
+ }
708
+ }
709
+ else {
710
+ // Fallback: convert ModelProperty instances to object format
711
+ const { modelPropertiesToObject } = await import('../helpers/model.js');
712
+ const properties = proxiedInstance.properties || [];
713
+ propertiesObject = modelPropertiesToObject(properties);
714
+ }
715
+ // Set up subscription to writeProcess to detect write success BEFORE sending request
716
+ const writeProcess = currentSnapshot.context.writeProcess;
717
+ // Check current state - if already in success, handle immediately
718
+ const currentWriteState = writeProcess.getSnapshot();
719
+ if (currentWriteState.value === 'success') {
720
+ proxiedInstance._service.send({
721
+ type: 'writeSuccess',
722
+ output: currentWriteState.context.entityData,
723
+ });
724
+ }
725
+ else {
726
+ // Set up subscription to catch future state changes
727
+ const writeSubscription = writeProcess.subscribe((writeSnapshot) => {
728
+ if (writeSnapshot.value === 'success') {
729
+ writeSubscription.unsubscribe();
730
+ const currentContext = proxiedInstance._service.getSnapshot().context;
731
+ logger(`[writeProcess subscription] Write succeeded, sending writeSuccess event. Has _pendingPropertyDefinitions: ${!!(currentContext._pendingPropertyDefinitions && Object.keys(currentContext._pendingPropertyDefinitions).length > 0)}`);
732
+ // Send writeSuccess event to model machine
733
+ proxiedInstance._service.send({
734
+ type: 'writeSuccess',
735
+ output: writeSnapshot.context.entityData,
736
+ });
737
+ }
738
+ else if (writeSnapshot.value === 'error') {
739
+ writeSubscription.unsubscribe();
740
+ const errorContext = writeSnapshot.context;
741
+ logger(`Write process failed for model "${finalSnapshot.context.modelName}": ${errorContext.error?.message || 'Unknown error'}`);
742
+ logger(`Write process error details:`, errorContext.error);
743
+ logger(`Validation errors:`, errorContext.validationErrors);
744
+ }
745
+ });
746
+ }
747
+ proxiedInstance._service.send({
748
+ type: 'requestWrite',
749
+ data: {
750
+ modelFileId: finalSnapshot.context.id, // id is now the schemaFileId (string)
751
+ modelName: finalSnapshot.context.modelName,
752
+ schemaName: finalSnapshot.context.schemaName,
753
+ schemaId,
754
+ properties: propertiesObject,
755
+ },
756
+ });
757
+ }
758
+ else if (retries < maxRetries) {
759
+ retries++;
760
+ setTimeout(checkAndSend, 50); // Retry after 50ms
761
+ }
762
+ else {
763
+ logger(`ERROR: writeProcess not available after ${maxRetries} retries for model "${finalSnapshot.context.modelName}"`);
764
+ }
765
+ };
766
+ // Start checking immediately, but also allow time for entry action to complete
767
+ setTimeout(checkAndSend, 0);
768
+ }
769
+ else {
770
+ logger(`Cannot trigger write process: missing schemaId (${schemaId}) or id (${finalSnapshot.context.id})`);
771
+ }
772
+ }
773
+ else {
774
+ logger(`Model validation failed or model in error state, skipping write process`);
775
+ }
776
+ }
777
+ catch (error) {
778
+ logger(`Failed to trigger write process: ${error instanceof Error ? error.message : String(error)}`);
779
+ }
780
+ });
781
+ }
782
+ return proxiedInstance;
783
+ }
784
+ /**
785
+ * Get Model instance by modelFileId (O(1) lookup)
786
+ */
787
+ static getById(modelFileId) {
788
+ const entry = this.instanceCacheById.get(modelFileId);
789
+ if (entry) {
790
+ // Increment ref count
791
+ this.instanceCacheById.set(modelFileId, {
792
+ instance: entry.instance,
793
+ refCount: entry.refCount + 1,
794
+ });
795
+ return entry.instance;
796
+ }
797
+ return undefined;
798
+ }
799
+ /**
800
+ * Get Model instance by name (O(1) lookup via name→ID mapping)
801
+ *
802
+ * @param modelName - The name of the model
803
+ * @param schemaName - The schema name (optional, will query DB if not provided)
804
+ * @returns The Model instance if found, undefined otherwise
805
+ */
806
+ static getByName(modelName, schemaName) {
807
+ if (schemaName) {
808
+ const nameKey = `${schemaName}:${modelName}`;
809
+ const id = this.instanceCacheByName.get(nameKey);
810
+ if (!id) {
811
+ return undefined;
812
+ }
813
+ return this.getById(id);
814
+ }
815
+ // If schemaName not provided, try to find in cache by searching all name keys
816
+ for (const [nameKey, id] of this.instanceCacheByName.entries()) {
817
+ const [, cachedModelName] = nameKey.split(':');
818
+ if (cachedModelName === modelName) {
819
+ return this.getById(id);
820
+ }
821
+ }
822
+ return undefined;
823
+ }
824
+ /**
825
+ * Get Model instance by name, querying database if not in cache
826
+ * This is an async version that can query the database when schemaName is not provided
827
+ *
828
+ * @param modelName - The name of the model
829
+ * @param schemaName - Optional schema name (will query DB if not provided)
830
+ * @returns The Model instance if found, undefined otherwise
831
+ */
832
+ static async getByNameAsync(modelName, schemaName) {
833
+ // First try cache
834
+ const cached = this.getByName(modelName, schemaName);
835
+ if (cached) {
836
+ return cached;
837
+ }
838
+ // If not in cache and schemaName not provided, query database
839
+ if (!schemaName) {
840
+ const db = BaseDb.getAppDb();
841
+ if (!db) {
842
+ return undefined;
843
+ }
844
+ try {
845
+ const { models: modelsTable } = await import('../seedSchema/ModelSchema.js');
846
+ const { modelSchemas } = await import('../seedSchema/ModelSchemaSchema.js');
847
+ const { schemas: schemasTable } = await import('../seedSchema/SchemaSchema.js');
848
+ const { eq } = await import('drizzle-orm');
849
+ // Query model by name
850
+ const modelRecords = await db
851
+ .select({
852
+ modelFileId: modelsTable.schemaFileId,
853
+ modelName: modelsTable.name,
854
+ schemaName: schemasTable.name,
855
+ })
856
+ .from(modelsTable)
857
+ .innerJoin(modelSchemas, eq(modelsTable.id, modelSchemas.modelId))
858
+ .innerJoin(schemasTable, eq(modelSchemas.schemaId, schemasTable.id))
859
+ .where(eq(modelsTable.name, modelName))
860
+ .limit(1);
861
+ if (modelRecords.length === 0) {
862
+ return undefined;
863
+ }
864
+ const record = modelRecords[0];
865
+ if (!record.modelName || !record.schemaName || !record.modelFileId) {
866
+ return undefined;
867
+ }
868
+ // Create model instance (will be cached)
869
+ return this.create(record.modelName, record.schemaName, {
870
+ id: record.modelFileId, // id is now the schemaFileId (string)
871
+ });
872
+ }
873
+ catch (error) {
874
+ logger(`Model.getByNameAsync: Error looking up model by name "${modelName}": ${error instanceof Error ? error.message : String(error)}`);
875
+ return undefined;
876
+ }
877
+ }
878
+ return undefined;
879
+ }
880
+ /**
881
+ * Create or get Model instance by modelFileId
882
+ * Checks cache first, then database if not found
883
+ *
884
+ * @param modelFileId - The model file ID to look up
885
+ * @returns The Model instance if found, undefined otherwise
886
+ */
887
+ static async createById(modelFileId) {
888
+ if (!modelFileId) {
889
+ return undefined;
890
+ }
891
+ // Step 1: Check cache first (fast path)
892
+ const cached = this.getById(modelFileId);
893
+ if (cached) {
894
+ logger(`Model.createById: Found instance in cache for ID "${modelFileId}"`);
895
+ return cached;
896
+ }
897
+ // Step 2: Query database to get modelName and schemaName
898
+ const db = BaseDb.getAppDb();
899
+ if (!db) {
900
+ logger(`Model.createById: Database not available for ID "${modelFileId}"`);
901
+ return undefined;
902
+ }
903
+ try {
904
+ const { models: modelsTable } = await import('../seedSchema/ModelSchema.js');
905
+ const { modelSchemas } = await import('../seedSchema/ModelSchemaSchema.js');
906
+ const { schemas: schemasTable } = await import('../seedSchema/SchemaSchema.js');
907
+ const { eq } = await import('drizzle-orm');
908
+ // Query model by schemaFileId and join to get schema name
909
+ const modelRecords = await db
910
+ .select({
911
+ modelId: modelsTable.id,
912
+ modelName: modelsTable.name,
913
+ schemaName: schemasTable.name,
914
+ })
915
+ .from(modelsTable)
916
+ .innerJoin(modelSchemas, eq(modelsTable.id, modelSchemas.modelId))
917
+ .innerJoin(schemasTable, eq(modelSchemas.schemaId, schemasTable.id))
918
+ .where(eq(modelsTable.schemaFileId, modelFileId))
919
+ .limit(1);
920
+ if (modelRecords.length === 0) {
921
+ logger(`Model.createById: Model not found in database for ID "${modelFileId}"`);
922
+ return undefined;
923
+ }
924
+ const { modelName, schemaName } = modelRecords[0];
925
+ if (!modelName || !schemaName) {
926
+ logger(`Model.createById: Missing modelName or schemaName for ID "${modelFileId}"`);
927
+ return undefined;
928
+ }
929
+ // Step 3: Create model using existing create method (which will handle caching)
930
+ logger(`Model.createById: Creating model "${modelName}" in schema "${schemaName}" from ID "${modelFileId}"`);
931
+ return this.create(modelName, schemaName, {
932
+ id: modelFileId, // id is now the schemaFileId (string)
933
+ });
934
+ }
935
+ catch (error) {
936
+ logger(`Model.createById: Error looking up model by ID "${modelFileId}": ${error instanceof Error ? error.message : String(error)}`);
937
+ return undefined;
938
+ }
939
+ }
940
+ /**
941
+ * Get all Model instances for a schema by schemaFileId or schemaName
942
+ * Queries database for all models with the given schemaId/schemaName and returns Model instances
943
+ *
944
+ * @param schemaIdentifier - The schema file ID or schema name to get models for
945
+ * @returns Array of Model instances for the schema
946
+ */
947
+ static async createBySchemaId(schemaIdentifier) {
948
+ if (!schemaIdentifier) {
949
+ return [];
950
+ }
951
+ const db = BaseDb.getAppDb();
952
+ if (!db) {
953
+ logger(`Model.createBySchemaId: Database not available for schema "${schemaIdentifier}"`);
954
+ return [];
955
+ }
956
+ try {
957
+ const { models: modelsTable } = await import('../seedSchema/ModelSchema.js');
958
+ const { modelSchemas } = await import('../seedSchema/ModelSchemaSchema.js');
959
+ const { schemas: schemasTable } = await import('../seedSchema/SchemaSchema.js');
960
+ const { eq, or } = await import('drizzle-orm');
961
+ // Query all models for this schema - support both schemaFileId and schema name
962
+ const modelRecords = await db
963
+ .select({
964
+ modelFileId: modelsTable.schemaFileId,
965
+ modelName: modelsTable.name,
966
+ schemaName: schemasTable.name,
967
+ })
968
+ .from(schemasTable)
969
+ .innerJoin(modelSchemas, eq(schemasTable.id, modelSchemas.schemaId))
970
+ .innerJoin(modelsTable, eq(modelSchemas.modelId, modelsTable.id))
971
+ .where(or(eq(schemasTable.schemaFileId, schemaIdentifier), eq(schemasTable.name, schemaIdentifier)));
972
+ if (modelRecords.length === 0) {
973
+ logger(`Model.createBySchemaId: No models found in database for schema "${schemaIdentifier}"`);
974
+ return [];
975
+ }
976
+ // Create Model instances for each model (create() handles caching)
977
+ const modelInstances = [];
978
+ for (const record of modelRecords) {
979
+ if (!record.modelName || !record.schemaName || !record.modelFileId) {
980
+ continue;
981
+ }
982
+ // Check cache first
983
+ const cached = this.getById(record.modelFileId);
984
+ if (cached) {
985
+ modelInstances.push(cached);
986
+ }
987
+ else {
988
+ // Create model instance (will be cached)
989
+ const model = this.create(record.modelName, record.schemaName, {
990
+ id: record.modelFileId, // id is now the schemaFileId (string)
991
+ });
992
+ modelInstances.push(model);
993
+ }
994
+ }
995
+ logger(`Model.createBySchemaId: Found ${modelInstances.length} models for schema "${schemaIdentifier}"`);
996
+ return modelInstances;
997
+ }
998
+ catch (error) {
999
+ logger(`Model.createBySchemaId: Error looking up models for schema "${schemaIdentifier}": ${error instanceof Error ? error.message : String(error)}`);
1000
+ return [];
1001
+ }
1002
+ }
1003
+ /**
1004
+ * Get all Model instances currently in cache
1005
+ *
1006
+ * @returns Array of all cached Model instances
1007
+ */
1008
+ static getAll() {
1009
+ const instances = [];
1010
+ const seen = new Set();
1011
+ // Collect from ID cache (primary source)
1012
+ for (const [id, entry] of this.instanceCacheById.entries()) {
1013
+ if (!seen.has(id)) {
1014
+ instances.push(entry.instance);
1015
+ seen.add(id);
1016
+ }
1017
+ }
1018
+ // Also check legacy cache for any not in ID cache
1019
+ for (const [nameKey, entry] of this.instanceCache.entries()) {
1020
+ const context = entry.instance._getSnapshotContext();
1021
+ const id = context.id; // id is now the schemaFileId (string)
1022
+ if (id && !seen.has(id)) {
1023
+ instances.push(entry.instance);
1024
+ seen.add(id);
1025
+ }
1026
+ }
1027
+ return instances;
1028
+ }
1029
+ /**
1030
+ * Get all Model instances for a specific schema from cache
1031
+ * For database-backed lookup, use createBySchemaId() instead
1032
+ *
1033
+ * @param schemaName - The schema name to filter by
1034
+ * @returns Array of Model instances for the schema
1035
+ */
1036
+ static getAllBySchema(schemaName) {
1037
+ const instances = [];
1038
+ const seen = new Set();
1039
+ // Collect from name cache (filtered by schema)
1040
+ for (const [nameKey, id] of this.instanceCacheByName.entries()) {
1041
+ const [cachedSchemaName] = nameKey.split(':');
1042
+ if (cachedSchemaName === schemaName) {
1043
+ const instance = this.getById(id);
1044
+ if (instance && !seen.has(id)) {
1045
+ instances.push(instance);
1046
+ seen.add(id);
1047
+ }
1048
+ }
1049
+ }
1050
+ // Also check legacy cache
1051
+ for (const [nameKey, entry] of this.instanceCache.entries()) {
1052
+ const [cachedSchemaName] = nameKey.split(':');
1053
+ if (cachedSchemaName === schemaName) {
1054
+ const context = entry.instance._getSnapshotContext();
1055
+ const id = context.id; // id is now the schemaFileId (string)
1056
+ if (id && !seen.has(id)) {
1057
+ instances.push(entry.instance);
1058
+ seen.add(id);
1059
+ }
1060
+ }
1061
+ }
1062
+ return instances;
1063
+ }
1064
+ /**
1065
+ * Update name index when model name changes
1066
+ */
1067
+ static updateNameIndex(oldName, newName, schemaName, modelFileId) {
1068
+ const oldKey = `${schemaName}:${oldName}`;
1069
+ const newKey = `${schemaName}:${newName}`;
1070
+ // Update name index
1071
+ if (this.instanceCacheByName.has(oldKey)) {
1072
+ this.instanceCacheByName.delete(oldKey);
1073
+ }
1074
+ this.instanceCacheByName.set(newKey, modelFileId);
1075
+ // Also update legacy cache if it exists
1076
+ if (this.instanceCache.has(oldKey)) {
1077
+ const entry = this.instanceCache.get(oldKey);
1078
+ this.instanceCache.delete(oldKey);
1079
+ this.instanceCache.set(newKey, entry);
1080
+ }
1081
+ logger(`Model.updateNameIndex: Updated name mapping from "${oldName}" to "${newName}" (ID: ${modelFileId})`);
1082
+ }
1083
+ getService() {
1084
+ return this._service;
1085
+ }
1086
+ _getSnapshot() {
1087
+ return this._service.getSnapshot();
1088
+ }
1089
+ _getSnapshotContext() {
1090
+ return this._getSnapshot().context;
1091
+ }
1092
+ /**
1093
+ * Check for conflicts between actor context and database
1094
+ * @returns ConflictResult indicating if a conflict exists
1095
+ */
1096
+ async _checkForConflicts() {
1097
+ const context = this._getSnapshotContext();
1098
+ // If we don't have load metadata, can't check for conflicts
1099
+ if (!context._dbUpdatedAt || !context.id) {
1100
+ return { hasConflict: false };
1101
+ }
1102
+ try {
1103
+ const db = BaseDb.getAppDb();
1104
+ if (!db) {
1105
+ return { hasConflict: false }; // Can't check without DB
1106
+ }
1107
+ // Get current DB record by id (schemaFileId) - most reliable lookup
1108
+ const dbModels = await db
1109
+ .select()
1110
+ .from(models)
1111
+ .where(eq(models.schemaFileId, context.id)) // id is now the schemaFileId (string)
1112
+ .limit(1);
1113
+ if (dbModels.length === 0) {
1114
+ return { hasConflict: false }; // No DB record, no conflict
1115
+ }
1116
+ const dbRecord = dbModels[0];
1117
+ // Check if DB was updated after we loaded
1118
+ // Note: models table doesn't have updatedAt, so we can't do timestamp comparison
1119
+ // For now, we'll just check if the record exists and matches
1120
+ // In the future, if models table gets updatedAt, we can compare timestamps
1121
+ return { hasConflict: false };
1122
+ }
1123
+ catch (error) {
1124
+ logger(`Error checking for conflicts: ${error instanceof Error ? error.message : String(error)}`);
1125
+ return { hasConflict: false }; // On error, assume no conflict to allow save
1126
+ }
1127
+ }
1128
+ /**
1129
+ * Saves model name changes to the database immediately (draft save)
1130
+ * This is called when modelName is changed to persist the change immediately
1131
+ * @param oldName - The old model name (if name changed)
1132
+ * @param newName - The new model name
1133
+ */
1134
+ async _saveDraftToDb(oldName, newName) {
1135
+ saveDraftLogger(`_saveDraftToDb called for model (oldName: "${oldName}", newName: "${newName}")`);
1136
+ // Don't save during initialization - models are being loaded from files, not created as drafts
1137
+ // Check this FIRST before doing any expensive work like _getSnapshotContext()
1138
+ if (typeof window !== 'undefined') {
1139
+ const now = Date.now();
1140
+ // Use cached check to avoid expensive operations
1141
+ // Always check if cache is stale or if we previously got false (to allow recovery)
1142
+ const cacheIsStale = Model.cachedClientInitialized === null || (now - Model.clientCheckTime) > Model.CLIENT_CHECK_CACHE_MS;
1143
+ const shouldRecheck = cacheIsStale || Model.cachedClientInitialized === false;
1144
+ saveDraftLogger(`Client check: cacheIsStale=${cacheIsStale}, shouldRecheck=${shouldRecheck}, cachedValue=${Model.cachedClientInitialized}, timeSinceCheck=${now - Model.clientCheckTime}ms`);
1145
+ if (shouldRecheck) {
1146
+ try {
1147
+ // Use dynamic import for browser compatibility (require() doesn't work in browsers)
1148
+ const { getClient } = await import('../client/ClientManager.js');
1149
+ const { ClientManagerState } = await import('../client/constants.js');
1150
+ const client = getClient();
1151
+ const clientSnapshot = client.getService().getSnapshot();
1152
+ // Check if state is IDLE (primary check) - isInitialized is set in entry action so should be true
1153
+ // But we check it as a secondary safeguard
1154
+ const isIdle = clientSnapshot.value === ClientManagerState.IDLE;
1155
+ const isInitialized = clientSnapshot.context.isInitialized;
1156
+ // If state is IDLE, trust it even if isInitialized isn't set yet (entry action should set it)
1157
+ // This aligns with useIsClientReady which only checks the state value
1158
+ Model.cachedClientInitialized = isIdle && (isInitialized !== false);
1159
+ Model.clientCheckTime = now;
1160
+ saveDraftLogger(`Client state checked: state=${clientSnapshot.value}, isIdle=${isIdle}, isInitialized=${isInitialized}, result=${Model.cachedClientInitialized}`);
1161
+ }
1162
+ catch (error) {
1163
+ // If we can't check client state, assume not initialized to be safe
1164
+ // But only cache for a short time to allow recovery
1165
+ Model.cachedClientInitialized = false;
1166
+ Model.clientCheckTime = now;
1167
+ saveDraftLogger(`Error checking client state: ${error instanceof Error ? error.message : String(error)}, setting cachedClientInitialized=false`);
1168
+ }
1169
+ }
1170
+ else {
1171
+ saveDraftLogger(`Using cached client state: cachedClientInitialized=${Model.cachedClientInitialized}`);
1172
+ }
1173
+ if (!Model.cachedClientInitialized) {
1174
+ saveDraftLogger(`Client not initialized, skipping save (oldName: "${oldName}", newName: "${newName}")`);
1175
+ // Skip silently during initialization to avoid log spam and reduce overhead
1176
+ return;
1177
+ }
1178
+ }
1179
+ saveDraftLogger(`Client is initialized, proceeding with save (oldName: "${oldName}", newName: "${newName}")`);
1180
+ // Check for conflicts before saving
1181
+ const conflictCheck = await this._checkForConflicts();
1182
+ if (conflictCheck.hasConflict) {
1183
+ const errorMessage = conflictCheck.message || 'Database was updated externally. Please reload the model and try again.';
1184
+ saveDraftLogger(`CONFLICT DETECTED: ${errorMessage}`);
1185
+ throw new ConflictError(errorMessage, conflictCheck);
1186
+ }
1187
+ const context = this._getSnapshotContext();
1188
+ const modelFileId = context.id || ''; // id is now the schemaFileId (string)
1189
+ const modelName = newName || context.modelName || oldName || '';
1190
+ // Use modelFileId as the key if available, otherwise use schemaName:modelName
1191
+ const saveKey = modelFileId || `${context.schemaName}:${modelName}`;
1192
+ // Prevent concurrent saves for the same model
1193
+ if (Model.savingModels.has(saveKey)) {
1194
+ saveDraftLogger(`Model ${modelName} (key: ${saveKey}) is already being saved, skipping concurrent save`);
1195
+ return;
1196
+ }
1197
+ Model.savingModels.add(saveKey);
1198
+ saveDraftLogger(`Starting save for model ${modelName} (key: ${saveKey}, id: ${modelFileId})`);
1199
+ try {
1200
+ const db = BaseDb.getAppDb();
1201
+ if (!db) {
1202
+ throw new Error('Database not found');
1203
+ }
1204
+ // If name changed, use renameModelInDb
1205
+ if (oldName && newName && oldName !== newName) {
1206
+ saveDraftLogger(`Renaming model from "${oldName}" to "${newName}"`);
1207
+ await renameModelInDb(oldName, newName);
1208
+ saveDraftLogger(`Successfully renamed model from "${oldName}" to "${newName}"`);
1209
+ }
1210
+ else {
1211
+ // For other tracked properties, we would save here
1212
+ // Currently only modelName is saved immediately, so this is a no-op
1213
+ saveDraftLogger(`No name change detected, skipping save (modelName: "${modelName}")`);
1214
+ }
1215
+ // Update conflict detection metadata after successful save
1216
+ // Note: models table doesn't have updatedAt, so we use current timestamp
1217
+ const now = Date.now();
1218
+ this._service.send({
1219
+ type: 'updateContext',
1220
+ _dbUpdatedAt: now,
1221
+ });
1222
+ }
1223
+ catch (error) {
1224
+ logger(`Failed to save draft to database: ${error instanceof Error ? error.message : String(error)}`);
1225
+ // Don't throw - allow operation to continue
1226
+ }
1227
+ finally {
1228
+ // Always remove from saving set
1229
+ Model.savingModels.delete(saveKey);
1230
+ saveDraftLogger(`Finished save for model ${modelName} (key: ${saveKey})`);
1231
+ }
1232
+ }
1233
+ get status() {
1234
+ return this._getSnapshot().value;
1235
+ }
1236
+ get validationErrors() {
1237
+ return this._getSnapshotContext()._validationErrors || [];
1238
+ }
1239
+ get isValid() {
1240
+ const errors = this.validationErrors;
1241
+ return errors.length === 0;
1242
+ }
1243
+ get isEdited() {
1244
+ const context = this._getSnapshotContext();
1245
+ // First check in-memory state
1246
+ if (context._isEdited !== undefined) {
1247
+ return context._isEdited;
1248
+ }
1249
+ // Fall back to reading from database if we have _dbId
1250
+ if (context._dbId) {
1251
+ // Load from database asynchronously (fire-and-forget for now)
1252
+ // For synchronous getter, we'll need to cache it or make it async
1253
+ // For now, return false if not in context
1254
+ return false;
1255
+ }
1256
+ return false;
1257
+ }
1258
+ get id() {
1259
+ return this._getSnapshotContext().id; // id is now the schemaFileId (string)
1260
+ }
1261
+ get name() {
1262
+ return this._getSnapshotContext().modelName;
1263
+ }
1264
+ /**
1265
+ * Validate the model
1266
+ * @returns Validation result
1267
+ */
1268
+ async validate() {
1269
+ return new Promise((resolve) => {
1270
+ let resolved = false;
1271
+ const subscription = this._service.subscribe((snapshot) => {
1272
+ if (snapshot.value === 'idle' || snapshot.value === 'error') {
1273
+ if (!resolved) {
1274
+ resolved = true;
1275
+ subscription.unsubscribe();
1276
+ const errors = snapshot.context._validationErrors || [];
1277
+ resolve({
1278
+ isValid: errors.length === 0,
1279
+ errors,
1280
+ });
1281
+ }
1282
+ }
1283
+ });
1284
+ this._service.send({ type: 'validateModel' });
1285
+ // Timeout fallback to ensure we always resolve (15 seconds - longer than actor timeout)
1286
+ setTimeout(() => {
1287
+ if (!resolved) {
1288
+ resolved = true;
1289
+ subscription.unsubscribe();
1290
+ const errors = this._getSnapshotContext()._validationErrors || [];
1291
+ resolve({
1292
+ isValid: errors.length === 0,
1293
+ errors,
1294
+ });
1295
+ }
1296
+ }, 15000);
1297
+ });
1298
+ }
1299
+ /**
1300
+ * Create a new item instance from this model
1301
+ * Automatically injects the model name, so you don't need to pass it explicitly.
1302
+ *
1303
+ * @example
1304
+ * const Post = Model.create('Post', schema)
1305
+ * const post = await Post.create({ title: 'My Post', content: '...' })
1306
+ *
1307
+ * @param values - Item property values (modelName is automatically injected)
1308
+ * @returns The created item instance
1309
+ */
1310
+ async create(values) {
1311
+ if (!this.modelName) {
1312
+ throw new Error('Cannot create item: model name is not set on this Model instance');
1313
+ }
1314
+ const item = await Item.create({
1315
+ modelName: this.modelName,
1316
+ schemaName: this.schemaName,
1317
+ modelInstance: this,
1318
+ ...values,
1319
+ });
1320
+ return item;
1321
+ }
1322
+ /**
1323
+ * Reload model from database
1324
+ * This refreshes the actor context with the latest data from the database
1325
+ */
1326
+ async reload() {
1327
+ logger(`Reloading model ${this.modelName} from database`);
1328
+ // Send reload event to machine (which will trigger loadOrCreateModel)
1329
+ this._service.send({ type: 'reloadFromDb' });
1330
+ // Wait for reload to complete
1331
+ return new Promise((resolve, reject) => {
1332
+ const subscription = this._service.subscribe((snapshot) => {
1333
+ if (snapshot.value === 'idle') {
1334
+ subscription.unsubscribe();
1335
+ resolve();
1336
+ }
1337
+ else if (snapshot.value === 'error') {
1338
+ subscription.unsubscribe();
1339
+ reject(new Error('Failed to reload model from database'));
1340
+ }
1341
+ });
1342
+ // Timeout after 10 seconds
1343
+ setTimeout(() => {
1344
+ subscription.unsubscribe();
1345
+ reject(new Error('Timeout waiting for model reload'));
1346
+ }, 10000);
1347
+ });
1348
+ }
1349
+ /**
1350
+ * Unload the model instance and clean up resources
1351
+ */
1352
+ unload() {
1353
+ const context = this._getSnapshotContext();
1354
+ const modelFileId = context.id; // id is now the schemaFileId (string)
1355
+ const nameKey = `${context.schemaName}:${context.modelName}`;
1356
+ // Remove from ID-based cache
1357
+ if (modelFileId && Model.instanceCacheById.has(modelFileId)) {
1358
+ const entry = Model.instanceCacheById.get(modelFileId);
1359
+ entry.refCount -= 1;
1360
+ if (entry.refCount <= 0) {
1361
+ Model.instanceCacheById.delete(modelFileId);
1362
+ // Also remove from name index
1363
+ Model.instanceCacheByName.delete(nameKey);
1364
+ logger(`Model.unload: Removed instance from caches (ID: ${modelFileId})`);
1365
+ }
1366
+ else {
1367
+ Model.instanceCacheById.set(modelFileId, entry);
1368
+ }
1369
+ }
1370
+ // Also handle legacy cache
1371
+ if (Model.instanceCache.has(nameKey)) {
1372
+ const entry = Model.instanceCache.get(nameKey);
1373
+ entry.refCount -= 1;
1374
+ if (entry.refCount <= 0) {
1375
+ Model.instanceCache.delete(nameKey);
1376
+ }
1377
+ else {
1378
+ Model.instanceCache.set(nameKey, entry);
1379
+ }
1380
+ }
1381
+ this._service.stop();
1382
+ }
1383
+ /**
1384
+ * Destroy the model instance completely
1385
+ * - Removes instance from all caches (regardless of refCount)
1386
+ * - Deletes model records from database (models, properties, model_schemas tables)
1387
+ * - Removes model from Schema's models property and instance caches
1388
+ * - Cleans up registered ModelProperty instances
1389
+ * - Stops the model service
1390
+ */
1391
+ async destroy() {
1392
+ const context = this._getSnapshotContext();
1393
+ const modelFileId = context.id; // id is now the schemaFileId (string)
1394
+ const modelName = context.modelName;
1395
+ const schemaName = context.schemaName;
1396
+ const nameKey = `${schemaName}:${modelName}`;
1397
+ if (!modelFileId || !modelName || !schemaName) {
1398
+ logger(`Model.destroy: Missing required context data (modelFileId: ${modelFileId}, modelName: ${modelName}, schemaName: ${schemaName})`);
1399
+ // Still try to clean up what we can
1400
+ }
1401
+ logger(`Model.destroy: Destroying model "${modelName}" (ID: ${modelFileId}) from schema "${schemaName}"`);
1402
+ // Get instanceState once at the top for reuse throughout the method
1403
+ const instanceState = modelInstanceState.get(this);
1404
+ // Step 1: Clean up liveQuery subscription
1405
+ if (instanceState && instanceState.liveQuerySubscription) {
1406
+ try {
1407
+ instanceState.liveQuerySubscription.unsubscribe();
1408
+ logger(`Model.destroy: Unsubscribed from liveQuery`);
1409
+ }
1410
+ catch (error) {
1411
+ logger(`Model.destroy: Error unsubscribing from liveQuery: ${error instanceof Error ? error.message : String(error)}`);
1412
+ }
1413
+ instanceState.liveQuerySubscription = null;
1414
+ }
1415
+ // Step 2: Remove from Model caches (force removal regardless of refCount)
1416
+ if (modelFileId) {
1417
+ Model.instanceCacheById.delete(modelFileId);
1418
+ logger(`Model.destroy: Removed from instanceCacheById (ID: ${modelFileId})`);
1419
+ }
1420
+ Model.instanceCacheByName.delete(nameKey);
1421
+ logger(`Model.destroy: Removed from instanceCacheByName (key: ${nameKey})`);
1422
+ Model.instanceCache.delete(nameKey);
1423
+ logger(`Model.destroy: Removed from legacy instanceCache (key: ${nameKey})`);
1424
+ // Step 3: Delete from database
1425
+ try {
1426
+ const db = BaseDb.getAppDb();
1427
+ if (db && modelFileId) {
1428
+ const { models: modelsTable } = await import('../seedSchema/ModelSchema.js');
1429
+ const { properties: propertiesTable } = await import('../seedSchema/ModelSchema.js');
1430
+ const { modelSchemas } = await import('../seedSchema/ModelSchemaSchema.js');
1431
+ const { eq } = await import('drizzle-orm');
1432
+ // First, find the model record by schemaFileId
1433
+ const modelRecords = await db
1434
+ .select()
1435
+ .from(modelsTable)
1436
+ .where(eq(modelsTable.schemaFileId, modelFileId))
1437
+ .limit(1);
1438
+ if (modelRecords.length > 0) {
1439
+ const modelRecord = modelRecords[0];
1440
+ const modelId = modelRecord.id;
1441
+ logger(`Model.destroy: Found model record in database (modelId: ${modelId})`);
1442
+ // Delete from model_schemas join table
1443
+ await db
1444
+ .delete(modelSchemas)
1445
+ .where(eq(modelSchemas.modelId, modelId));
1446
+ logger(`Model.destroy: Deleted from model_schemas table`);
1447
+ // Delete all properties for this model
1448
+ await db
1449
+ .delete(propertiesTable)
1450
+ .where(eq(propertiesTable.modelId, modelId));
1451
+ logger(`Model.destroy: Deleted properties from database`);
1452
+ // Finally, delete the model record itself
1453
+ await db
1454
+ .delete(modelsTable)
1455
+ .where(eq(modelsTable.id, modelId));
1456
+ logger(`Model.destroy: Deleted model record from database`);
1457
+ }
1458
+ else {
1459
+ logger(`Model.destroy: Model record not found in database (modelFileId: ${modelFileId})`);
1460
+ }
1461
+ }
1462
+ else {
1463
+ logger(`Model.destroy: Database not available`);
1464
+ }
1465
+ }
1466
+ catch (error) {
1467
+ logger(`Model.destroy: Error deleting from database: ${error instanceof Error ? error.message : String(error)}`);
1468
+ // Continue with cleanup even if database deletion fails
1469
+ }
1470
+ // Step 4: Remove from Schema's models property and instance caches
1471
+ try {
1472
+ const { Schema } = await import('../Schema/Schema.js');
1473
+ const schema = Schema.create(schemaName);
1474
+ const schemaSnapshot = schema.getService().getSnapshot();
1475
+ const schemaContext = schemaSnapshot.context;
1476
+ // Remove from Schema's models object in context
1477
+ if (schemaContext.models && schemaContext.models[modelName]) {
1478
+ const updatedModels = { ...schemaContext.models };
1479
+ delete updatedModels[modelName];
1480
+ // Update Schema context - this will trigger liveQuery update which will
1481
+ // automatically clean up the model from Schema's instance caches
1482
+ schema.getService().send({
1483
+ type: 'updateContext',
1484
+ models: updatedModels,
1485
+ });
1486
+ // Mark schema as draft
1487
+ schema.getService().send({
1488
+ type: 'markAsDraft',
1489
+ propertyKey: `model:${modelName}`,
1490
+ });
1491
+ logger(`Model.destroy: Removed model from Schema's models property`);
1492
+ // Wait a moment for liveQuery to process the change
1493
+ // This ensures the Schema's instance caches are cleaned up
1494
+ await new Promise(resolve => setTimeout(resolve, 100));
1495
+ }
1496
+ else {
1497
+ logger(`Model.destroy: Model "${modelName}" not found in Schema's models property`);
1498
+ }
1499
+ logger(`Model.destroy: Updated Schema context to remove model`);
1500
+ }
1501
+ catch (error) {
1502
+ logger(`Model.destroy: Error removing from Schema: ${error instanceof Error ? error.message : String(error)}`);
1503
+ // Continue with cleanup even if Schema update fails
1504
+ }
1505
+ // Step 5: Stop the model service
1506
+ try {
1507
+ this._service.stop();
1508
+ logger(`Model.destroy: Stopped model service`);
1509
+ }
1510
+ catch (error) {
1511
+ logger(`Model.destroy: Error stopping service: ${error instanceof Error ? error.message : String(error)}`);
1512
+ }
1513
+ // Clean up liveQuery subscription
1514
+ if (instanceState?.liveQuerySubscription) {
1515
+ instanceState.liveQuerySubscription.unsubscribe();
1516
+ instanceState.liveQuerySubscription = null;
1517
+ }
1518
+ logger(`Model.destroy: Successfully destroyed model "${modelName}" (ID: ${modelFileId})`);
1519
+ }
1520
+ /**
1521
+ * Set up liveQuery subscription to watch for property changes in the database
1522
+ * This enables cross-instance synchronization (e.g., changes in other tabs/windows)
1523
+ */
1524
+ _setupLiveQuerySubscription() {
1525
+ const isBrowser = typeof window !== 'undefined';
1526
+ console.log(`[Model._setupLiveQuerySubscription] Starting setup for model (browser: ${isBrowser})`);
1527
+ // Track if we've already set up the subscription to avoid duplicate subscriptions
1528
+ let subscriptionSetUp = false;
1529
+ const setupLiveQuery = async (modelId, modelName) => {
1530
+ console.log('[Model._setupLiveQuerySubscription] setupLiveQuery called with modelId:', modelId, 'modelName:', modelName, 'subscriptionSetUp:', subscriptionSetUp);
1531
+ if (subscriptionSetUp) {
1532
+ console.log('[Model._setupLiveQuerySubscription] Subscription already set up, skipping');
1533
+ return;
1534
+ }
1535
+ subscriptionSetUp = true;
1536
+ console.log('[Model._setupLiveQuerySubscription] Setting up property query...');
1537
+ try {
1538
+ const { BaseDb } = await import('../db/Db/BaseDb.js');
1539
+ const { properties: propertiesTable } = await import('../seedSchema/index.js');
1540
+ const { eq } = await import('drizzle-orm');
1541
+ const db = BaseDb.getAppDb();
1542
+ if (!db) {
1543
+ logger('[Model._setupLiveQuerySubscription] Database not available');
1544
+ return;
1545
+ }
1546
+ // Query initial properties immediately and update context
1547
+ // This works in both browser and Node.js environments
1548
+ const initialProperties = await db
1549
+ .select({ schemaFileId: propertiesTable.schemaFileId })
1550
+ .from(propertiesTable)
1551
+ .where(eq(propertiesTable.modelId, modelId));
1552
+ const initialPropertyIds = initialProperties
1553
+ .map((row) => row.schemaFileId)
1554
+ .filter((id) => id !== null && id !== undefined);
1555
+ console.log(`[Model._setupLiveQuerySubscription] Initial query for model "${modelName}" (id: ${modelId}) returned ${initialPropertyIds.length} properties:`, initialPropertyIds);
1556
+ // CRITICAL: Create ModelProperty instances BEFORE updating context
1557
+ // This ensures they're in the cache when the properties getter is called
1558
+ if (initialPropertyIds.length > 0) {
1559
+ try {
1560
+ const { ModelProperty } = await import('../ModelProperty/ModelProperty.js');
1561
+ const createPromises = initialPropertyIds.map(async (propertyFileId) => {
1562
+ try {
1563
+ const property = await ModelProperty.createById(propertyFileId);
1564
+ if (property) {
1565
+ logger(`[Model._setupLiveQuerySubscription] Created/cached ModelProperty instance for propertyFileId "${propertyFileId}"`);
1566
+ }
1567
+ else {
1568
+ logger(`[Model._setupLiveQuerySubscription] ModelProperty.createById returned undefined for propertyFileId "${propertyFileId}"`);
1569
+ }
1570
+ }
1571
+ catch (error) {
1572
+ logger(`[Model._setupLiveQuerySubscription] Error creating ModelProperty instance for propertyFileId "${propertyFileId}": ${error}`);
1573
+ }
1574
+ });
1575
+ await Promise.all(createPromises);
1576
+ console.log(`[Model._setupLiveQuerySubscription] Created ${initialPropertyIds.length} ModelProperty instances before updating context`);
1577
+ }
1578
+ catch (error) {
1579
+ logger(`[Model._setupLiveQuerySubscription] Error importing ModelProperty or creating instances: ${error}`);
1580
+ }
1581
+ }
1582
+ // Update context with initial property IDs AFTER creating instances
1583
+ console.log(`[Model._setupLiveQuerySubscription] Sending updateContext with _liveQueryPropertyIds:`, initialPropertyIds);
1584
+ // Subscribe to verify the context update is applied
1585
+ let contextUpdated = false;
1586
+ const updateSubscription = this._service.subscribe((snapshot) => {
1587
+ if (snapshot.context._liveQueryPropertyIds && snapshot.context._liveQueryPropertyIds.length > 0) {
1588
+ console.log(`[Model._setupLiveQuerySubscription] Context updated via subscription! _liveQueryPropertyIds:`, snapshot.context._liveQueryPropertyIds);
1589
+ contextUpdated = true;
1590
+ updateSubscription.unsubscribe();
1591
+ }
1592
+ });
1593
+ this._service.send({
1594
+ type: 'updateContext',
1595
+ _liveQueryPropertyIds: initialPropertyIds,
1596
+ });
1597
+ // Wait for the context update to be applied (with timeout)
1598
+ let attempts = 0;
1599
+ while (!contextUpdated && attempts < 50) {
1600
+ await new Promise(resolve => setTimeout(resolve, 10));
1601
+ attempts++;
1602
+ const snapshot = this._service.getSnapshot();
1603
+ if (snapshot.context._liveQueryPropertyIds && snapshot.context._liveQueryPropertyIds.length > 0) {
1604
+ console.log(`[Model._setupLiveQuerySubscription] Context updated after ${attempts * 10}ms - _liveQueryPropertyIds:`, snapshot.context._liveQueryPropertyIds);
1605
+ contextUpdated = true;
1606
+ break;
1607
+ }
1608
+ }
1609
+ updateSubscription.unsubscribe();
1610
+ // Final verification
1611
+ const snapshot = this._service.getSnapshot();
1612
+ console.log(`[Model._setupLiveQuerySubscription] Final context check - _liveQueryPropertyIds:`, snapshot.context._liveQueryPropertyIds, 'length:', snapshot.context._liveQueryPropertyIds?.length || 0);
1613
+ // Only set up liveQuery subscription in browser environment
1614
+ if (isBrowser) {
1615
+ // Set up liveQuery to watch properties table for this model
1616
+ const properties$ = BaseDb.liveQuery((sql) => sql `
1617
+ SELECT id, name, data_type as dataType, model_id as modelId, ref_model_id as refModelId, ref_value_type as refValueType, schema_file_id as schemaFileId
1618
+ FROM properties
1619
+ WHERE model_id = ${modelId}
1620
+ `);
1621
+ const instanceState = modelInstanceState.get(this);
1622
+ if (!instanceState) {
1623
+ logger('[Model._setupLiveQuerySubscription] Instance state not found');
1624
+ return;
1625
+ }
1626
+ // Subscribe to liveQuery updates
1627
+ const subscription = properties$.subscribe({
1628
+ next: async (propertyRows) => {
1629
+ logger(`[Model._setupLiveQuerySubscription] Properties updated in database: ${propertyRows.length} properties`);
1630
+ console.log(`[Model._setupLiveQuerySubscription] Properties updated in database: ${propertyRows.length} properties`, propertyRows.map(r => r.schemaFileId));
1631
+ // Store property file IDs from liveQuery
1632
+ const propertyFileIds = propertyRows
1633
+ .map(row => row.schemaFileId)
1634
+ .filter((id) => id !== null && id !== undefined);
1635
+ console.log(`[Model._setupLiveQuerySubscription] Extracted property IDs:`, propertyFileIds);
1636
+ // CRITICAL: Create ModelProperty instances BEFORE updating context
1637
+ // This ensures they're in the cache when the properties getter is called
1638
+ if (propertyFileIds.length > 0) {
1639
+ try {
1640
+ const { ModelProperty } = await import('../ModelProperty/ModelProperty.js');
1641
+ const createPromises = propertyFileIds.map(async (propertyFileId) => {
1642
+ try {
1643
+ const property = await ModelProperty.createById(propertyFileId);
1644
+ if (property) {
1645
+ logger(`[Model._setupLiveQuerySubscription] Created/cached ModelProperty instance for propertyFileId "${propertyFileId}" from liveQuery`);
1646
+ }
1647
+ else {
1648
+ logger(`[Model._setupLiveQuerySubscription] ModelProperty.createById returned undefined for propertyFileId "${propertyFileId}"`);
1649
+ }
1650
+ }
1651
+ catch (error) {
1652
+ logger(`[Model._setupLiveQuerySubscription] Error creating ModelProperty instance for propertyFileId "${propertyFileId}": ${error}`);
1653
+ }
1654
+ });
1655
+ await Promise.all(createPromises);
1656
+ console.log(`[Model._setupLiveQuerySubscription] Created ${propertyFileIds.length} ModelProperty instances from liveQuery before updating context`);
1657
+ }
1658
+ catch (error) {
1659
+ logger(`[Model._setupLiveQuerySubscription] Error importing ModelProperty or creating instances from liveQuery: ${error}`);
1660
+ }
1661
+ }
1662
+ // Update context with property IDs AFTER creating instances (like Schema does with model IDs)
1663
+ this._service.send({
1664
+ type: 'updateContext',
1665
+ _liveQueryPropertyIds: propertyFileIds, // Store in service context for reactivity
1666
+ _propertiesUpdated: Date.now(), // Internal field for tracking
1667
+ });
1668
+ },
1669
+ error: (error) => {
1670
+ logger(`[Model._setupLiveQuerySubscription] LiveQuery error: ${error}`);
1671
+ },
1672
+ });
1673
+ instanceState.liveQuerySubscription = subscription;
1674
+ logger(`[Model._setupLiveQuerySubscription] LiveQuery subscription set up for model "${modelName}" (id: ${modelId})`);
1675
+ console.log(`[Model._setupLiveQuerySubscription] LiveQuery subscription set up for model "${modelName}" (id: ${modelId})`);
1676
+ }
1677
+ else {
1678
+ console.log(`[Model._setupLiveQuerySubscription] Skipping liveQuery subscription in Node.js environment (properties already loaded from database)`);
1679
+ }
1680
+ }
1681
+ catch (error) {
1682
+ logger(`[Model._setupLiveQuerySubscription] Error setting up subscription: ${error}`);
1683
+ subscriptionSetUp = false; // Reset on error so we can retry
1684
+ }
1685
+ };
1686
+ // Set up liveQuery subscription as soon as we have a modelId
1687
+ // The liveQuery will automatically detect when properties are added to the database
1688
+ const setupSubscription = this._service.subscribe(async (snapshot) => {
1689
+ // Check if we have a _dbId (either from context or can be found in DB)
1690
+ let dbId = snapshot.context._dbId; // _dbId is the database integer ID
1691
+ const modelName = snapshot.context.modelName;
1692
+ if (!modelName) {
1693
+ return; // Need modelName to proceed
1694
+ }
1695
+ // If we don't have _dbId yet, try to find it in the database
1696
+ if (!dbId) {
1697
+ try {
1698
+ const { BaseDb } = await import('../db/Db/BaseDb.js');
1699
+ const { models: modelsTable } = await import('../seedSchema/index.js');
1700
+ const { eq } = await import('drizzle-orm');
1701
+ const db = BaseDb.getAppDb();
1702
+ if (!db) {
1703
+ return;
1704
+ }
1705
+ const modelRecords = await db
1706
+ .select()
1707
+ .from(modelsTable)
1708
+ .where(eq(modelsTable.name, modelName))
1709
+ .limit(1);
1710
+ if (modelRecords.length === 0 || !modelRecords[0].id) {
1711
+ // Model not in database yet, will retry on next snapshot update
1712
+ return;
1713
+ }
1714
+ dbId = modelRecords[0].id;
1715
+ // Update context with _dbId
1716
+ this._service.send({
1717
+ type: 'updateContext',
1718
+ _dbId: dbId,
1719
+ });
1720
+ }
1721
+ catch (error) {
1722
+ logger(`[Model._setupLiveQuerySubscription] Error finding model: ${error}`);
1723
+ return;
1724
+ }
1725
+ }
1726
+ // Once we have _dbId, set up the liveQuery subscription (only once)
1727
+ if (dbId && !subscriptionSetUp) {
1728
+ console.log('[Model._setupLiveQuerySubscription] Setting up liveQuery with _dbId:', dbId, 'modelName:', modelName);
1729
+ await setupLiveQuery(dbId, modelName);
1730
+ if (subscriptionSetUp) {
1731
+ setupSubscription.unsubscribe();
1732
+ }
1733
+ }
1734
+ });
1735
+ // Also check current state immediately in case _dbId is already available
1736
+ const currentSnapshot = this._service.getSnapshot();
1737
+ if (currentSnapshot.context._dbId && !subscriptionSetUp) {
1738
+ console.log('[Model._setupLiveQuerySubscription] Setting up liveQuery immediately with existing _dbId:', currentSnapshot.context._dbId);
1739
+ setupLiveQuery(currentSnapshot.context._dbId, currentSnapshot.context.modelName).catch((error) => {
1740
+ logger(`[Model._setupLiveQuerySubscription] Error in immediate setup: ${error}`);
1741
+ console.error('[Model._setupLiveQuerySubscription] Error in immediate setup:', error);
1742
+ });
1743
+ }
1744
+ }
1745
+ /**
1746
+ * Refresh property IDs from database (useful in Node.js where liveQuery isn't available)
1747
+ */
1748
+ async _refreshPropertiesFromDb() {
1749
+ const snapshot = this._service.getSnapshot();
1750
+ const dbId = snapshot.context._dbId; // _dbId is the database integer ID
1751
+ const modelName = snapshot.context.modelName;
1752
+ if (!dbId || !modelName) {
1753
+ return;
1754
+ }
1755
+ try {
1756
+ const { BaseDb } = await import('../db/Db/BaseDb.js');
1757
+ const { properties: propertiesTable } = await import('../seedSchema/index.js');
1758
+ const { eq } = await import('drizzle-orm');
1759
+ const db = BaseDb.getAppDb();
1760
+ if (!db) {
1761
+ return;
1762
+ }
1763
+ const propertyRows = await db
1764
+ .select({ schemaFileId: propertiesTable.schemaFileId })
1765
+ .from(propertiesTable)
1766
+ .where(eq(propertiesTable.modelId, dbId)); // Use _dbId (database integer ID)
1767
+ const propertyIds = propertyRows
1768
+ .map((row) => row.schemaFileId)
1769
+ .filter((id) => id !== null && id !== undefined);
1770
+ console.log(`[Model._refreshPropertiesFromDb] Refreshed properties for model "${modelName}" (id: ${dbId}): ${propertyIds.length} properties`, propertyIds);
1771
+ // CRITICAL: Create ModelProperty instances BEFORE updating context
1772
+ // This ensures they're in the cache when the properties getter is called
1773
+ if (propertyIds.length > 0) {
1774
+ try {
1775
+ const { ModelProperty } = await import('../ModelProperty/ModelProperty.js');
1776
+ const createPromises = propertyIds.map(async (propertyFileId) => {
1777
+ try {
1778
+ const property = await ModelProperty.createById(propertyFileId);
1779
+ if (property) {
1780
+ logger(`[Model._refreshPropertiesFromDb] Created/cached ModelProperty instance for propertyFileId "${propertyFileId}"`);
1781
+ }
1782
+ else {
1783
+ logger(`[Model._refreshPropertiesFromDb] ModelProperty.createById returned undefined for propertyFileId "${propertyFileId}"`);
1784
+ }
1785
+ }
1786
+ catch (error) {
1787
+ logger(`[Model._refreshPropertiesFromDb] Error creating ModelProperty instance for propertyFileId "${propertyFileId}": ${error}`);
1788
+ }
1789
+ });
1790
+ await Promise.all(createPromises);
1791
+ console.log(`[Model._refreshPropertiesFromDb] Created ${propertyIds.length} ModelProperty instances before updating context`);
1792
+ }
1793
+ catch (error) {
1794
+ logger(`[Model._refreshPropertiesFromDb] Error importing ModelProperty or creating instances: ${error}`);
1795
+ }
1796
+ }
1797
+ // Update context with refreshed property IDs AFTER creating instances
1798
+ this._service.send({
1799
+ type: 'updateContext',
1800
+ _liveQueryPropertyIds: propertyIds,
1801
+ _propertiesUpdated: Date.now(),
1802
+ });
1803
+ }
1804
+ catch (error) {
1805
+ logger(`[Model._refreshPropertiesFromDb] Error refreshing properties: ${error}`);
1806
+ }
1807
+ }
1808
+ /**
1809
+ * Public method to refresh properties from database
1810
+ */
1811
+ async refreshProperties() {
1812
+ await this._refreshPropertiesFromDb();
1813
+ }
1814
+ }
1815
+ // Primary cache: ID-based (never changes on rename)
1816
+ Model.instanceCacheById = new Map();
1817
+ // Secondary index: name lookup (updated on rename)
1818
+ Model.instanceCacheByName = new Map();
1819
+ // Legacy cache: kept temporarily for backward compatibility during migration
1820
+ Model.instanceCache = new Map();
1821
+ // Static tracking for pending writes
1822
+ Model.pendingWrites = new Map();
1823
+ // Track which models are currently being saved to prevent concurrent saves
1824
+ Model.savingModels = new Set();
1825
+ // Cache client initialization state globally to avoid repeated checks
1826
+ Model.cachedClientInitialized = null;
1827
+ Model.clientCheckTime = 0;
1828
+ Model.CLIENT_CHECK_CACHE_MS = 50; // Cache for 50ms to avoid excessive checks
1829
+
1830
+ export { Model };
1831
+ //# sourceMappingURL=Model.js.map