@seedprotocol/sdk 0.4.1 → 0.4.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/ArweaveClient-BvJ1FhQ5.js +202 -0
- package/dist/ArweaveClient-BvJ1FhQ5.js.map +1 -0
- package/dist/ArweaveClient-CleX_4Gw.js +202 -0
- package/dist/ArweaveClient-CleX_4Gw.js.map +1 -0
- package/dist/Db-BPnO1-_p.js +343 -0
- package/dist/Db-BPnO1-_p.js.map +1 -0
- package/dist/Db-DX08SxS9.js +1521 -0
- package/dist/Db-DX08SxS9.js.map +1 -0
- package/dist/EasClient-BwhUcPjY.js +29 -0
- package/dist/EasClient-BwhUcPjY.js.map +1 -0
- package/dist/EasClient-CJSs38Db.js +29 -0
- package/dist/EasClient-CJSs38Db.js.map +1 -0
- package/dist/FileManager-B1tdLMsX.js +1152 -0
- package/dist/FileManager-B1tdLMsX.js.map +1 -0
- package/dist/FileManager-Ct91ZhOE.js +165 -0
- package/dist/FileManager-Ct91ZhOE.js.map +1 -0
- package/dist/Item/Item.d.ts +113 -0
- package/dist/Item/Item.d.ts.map +1 -0
- package/dist/Item/queries.d.ts.map +1 -0
- package/dist/Item/service/actors/fetchDataFromEas.d.ts +4 -0
- package/dist/Item/service/actors/fetchDataFromEas.d.ts.map +1 -0
- package/dist/Item/service/actors/hydrateExistingItem.d.ts.map +1 -0
- package/dist/Item/service/actors/hydrateNewItem.d.ts.map +1 -0
- package/dist/Item/service/actors/initialize.d.ts.map +1 -0
- package/dist/Item/service/actors/loadOrCreateItem.d.ts.map +1 -0
- package/dist/Item/service/actors/reload.d.ts.map +1 -0
- package/dist/Item/service/actors/saveDataToDb.d.ts +4 -0
- package/dist/Item/service/actors/saveDataToDb.d.ts.map +1 -0
- package/dist/Item/service/actors/waitForDb.d.ts.map +1 -0
- package/dist/Item/service/itemMachineSingle.d.ts +48 -0
- package/dist/Item/service/itemMachineSingle.d.ts.map +1 -0
- package/dist/ItemProperty/ItemProperty.d.ts +93 -0
- package/dist/ItemProperty/ItemProperty.d.ts.map +1 -0
- package/dist/ItemProperty/service/actors/hydrateFromDb.d.ts.map +1 -0
- package/dist/ItemProperty/service/actors/initialize.d.ts.map +1 -0
- package/dist/ItemProperty/service/actors/loadOrCreateProperty.d.ts.map +1 -0
- package/dist/ItemProperty/service/actors/resolveRelatedValue.d.ts.map +1 -0
- package/dist/ItemProperty/service/actors/resolveRemoteStorage.d.ts.map +1 -0
- package/dist/ItemProperty/service/actors/saveValueToDb/analyzeInput.d.ts.map +1 -0
- package/dist/ItemProperty/service/actors/saveValueToDb/index.d.ts.map +1 -0
- package/dist/ItemProperty/service/actors/saveValueToDb/saveImage.d.ts.map +1 -0
- package/dist/ItemProperty/service/actors/saveValueToDb/saveItemStorage.d.ts.map +1 -0
- package/dist/ItemProperty/service/actors/saveValueToDb/saveRelation.d.ts.map +1 -0
- package/dist/ItemProperty/service/actors/waitForDb.d.ts.map +1 -0
- package/dist/ItemProperty/service/propertyMachine.d.ts +68 -0
- package/dist/ItemProperty/service/propertyMachine.d.ts.map +1 -0
- package/dist/Model/Model.d.ts +218 -0
- package/dist/Model/Model.d.ts.map +1 -0
- package/dist/Model/index.d.ts +26 -0
- package/dist/Model/index.d.ts.map +1 -0
- package/dist/Model/service/actors/createModelProperties.d.ts.map +1 -0
- package/dist/Model/service/actors/loadOrCreateModel.d.ts.map +1 -0
- package/dist/Model/service/actors/validateModel.d.ts.map +1 -0
- package/dist/Model/service/modelMachine.d.ts +207 -0
- package/dist/Model/service/modelMachine.d.ts.map +1 -0
- package/dist/ModelProperty/ModelProperty.d.ts +123 -0
- package/dist/ModelProperty/ModelProperty.d.ts.map +1 -0
- package/dist/ModelProperty/service/actors/compareAndMarkDraft.d.ts.map +1 -0
- package/dist/ModelProperty/service/actors/saveToSchema.d.ts.map +1 -0
- package/dist/ModelProperty/service/actors/validateProperty.d.ts.map +1 -0
- package/dist/ModelProperty/service/modelPropertyMachine.d.ts +183 -0
- package/dist/ModelProperty/service/modelPropertyMachine.d.ts.map +1 -0
- package/dist/ModelProperty-Cr3BmgkC.js +2218 -0
- package/dist/ModelProperty-Cr3BmgkC.js.map +1 -0
- package/dist/PathResolver-BErmcZqP.js +191 -0
- package/dist/PathResolver-BErmcZqP.js.map +1 -0
- package/dist/PathResolver-DJdxE_OK.js +78 -0
- package/dist/PathResolver-DJdxE_OK.js.map +1 -0
- package/dist/QueryClient-D2mv63gP.js +34 -0
- package/dist/QueryClient-D2mv63gP.js.map +1 -0
- package/dist/QueryClient-DIu9c-w6.js +47 -0
- package/dist/QueryClient-DIu9c-w6.js.map +1 -0
- package/dist/Schema/Schema.d.ts +165 -0
- package/dist/Schema/Schema.d.ts.map +1 -0
- package/dist/Schema/errors.d.ts.map +1 -0
- package/dist/Schema/index.d.ts.map +1 -0
- package/dist/Schema/service/actors/checkExistingSchema.d.ts.map +1 -0
- package/dist/Schema/service/actors/createModelInstances.d.ts.map +1 -0
- package/dist/Schema/service/actors/createPropertyInstances.d.ts.map +1 -0
- package/dist/Schema/service/actors/loadOrCreateSchema.d.ts.map +1 -0
- package/dist/Schema/service/actors/validateSchema.d.ts.map +1 -0
- package/dist/Schema/service/actors/verifyModelInstancesInCache.d.ts.map +1 -0
- package/dist/Schema/service/actors/verifyModelsInDb.d.ts.map +1 -0
- package/dist/Schema/service/actors/verifyPropertiesInDb.d.ts.map +1 -0
- package/dist/Schema/service/actors/verifyPropertyInstancesInCache.d.ts.map +1 -0
- package/dist/Schema/service/actors/verifySchemaInDb.d.ts.map +1 -0
- package/dist/Schema/service/actors/writeModelsToDb.d.ts.map +1 -0
- package/dist/Schema/service/actors/writePropertiesToDb.d.ts.map +1 -0
- package/dist/Schema/service/actors/writeSchemaToDb.d.ts.map +1 -0
- package/dist/Schema/service/addModelsMachine.d.ts +123 -0
- package/dist/Schema/service/addModelsMachine.d.ts.map +1 -0
- package/dist/Schema/service/schemaMachine.d.ts +512 -0
- package/dist/Schema/service/schemaMachine.d.ts.map +1 -0
- package/dist/Schema/service/validation/SchemaValidationService.d.ts.map +1 -0
- package/dist/Schema/validation.d.ts.map +1 -0
- package/dist/Schema-DeKabJ0T.js +5745 -0
- package/dist/Schema-DeKabJ0T.js.map +1 -0
- package/dist/SchemaValidationService-cTlURuDt.js +563 -0
- package/dist/SchemaValidationService-cTlURuDt.js.map +1 -0
- package/dist/browser/db/Db.d.ts.map +1 -0
- package/dist/browser/db/drizzleFiles.d.ts.map +1 -0
- package/dist/browser/db/sqlWasmClient.d.ts.map +1 -0
- package/dist/browser/helpers/ArweaveClient.d.ts +31 -0
- package/dist/browser/helpers/ArweaveClient.d.ts.map +1 -0
- package/dist/browser/helpers/EasClient.d.ts.map +1 -0
- package/dist/browser/helpers/FileManager.d.ts.map +1 -0
- package/dist/browser/helpers/PathResolver.d.ts.map +1 -0
- package/dist/browser/helpers/QueryClient.d.ts.map +1 -0
- package/dist/browser/helpers/index.d.ts +4 -0
- package/dist/browser/helpers/index.d.ts.map +1 -0
- package/dist/browser/index.d.ts +4 -0
- package/dist/browser/index.d.ts.map +1 -0
- package/dist/browser/react/OPFSImage.d.ts.map +1 -0
- package/dist/browser/react/SeedImage.d.ts.map +1 -0
- package/dist/browser/react/client.d.ts.map +1 -0
- package/dist/browser/react/db.d.ts.map +1 -0
- package/dist/browser/react/index.d.ts.map +1 -0
- package/dist/browser/react/item.d.ts +38 -0
- package/dist/browser/react/item.d.ts.map +1 -0
- package/dist/browser/react/itemProperty.d.ts.map +1 -0
- package/dist/browser/react/liveQuery.d.ts.map +1 -0
- package/dist/browser/react/model.d.ts.map +1 -0
- package/dist/browser/react/modelProperty.d.ts.map +1 -0
- package/dist/browser/react/schema.d.ts.map +1 -0
- package/dist/browser/react/services.d.ts.map +1 -0
- package/dist/browser/react/trash.d.ts +6 -0
- package/dist/browser/react/trash.d.ts.map +1 -0
- package/dist/browser/seed.d.ts +21 -0
- package/dist/browser/seed.d.ts.map +1 -0
- package/dist/browser/workers/FileDownloader.d.ts.map +1 -0
- package/dist/browser/workers/ImageResizer.d.ts.map +1 -0
- package/dist/browser/workers/content-hash.d.ts.map +1 -0
- package/dist/browser/workers/dbWorker.d.ts.map +1 -0
- package/dist/browser/workers/filesDownload.d.ts.map +1 -0
- package/dist/browser/workers/imageResize.d.ts.map +1 -0
- package/dist/cjs/ModelProperty-MkN5Rmx7.js +1866 -0
- package/dist/cjs/ModelProperty-MkN5Rmx7.js.map +1 -0
- package/dist/cjs/Schema-B5cr_JVK.js +5762 -0
- package/dist/cjs/Schema-B5cr_JVK.js.map +1 -0
- package/dist/cjs/SchemaValidationService-BgIzc3-r.js +579 -0
- package/dist/cjs/SchemaValidationService-BgIzc3-r.js.map +1 -0
- package/dist/cjs/getItem-CVJJPky2.js +55 -0
- package/dist/cjs/getItem-CVJJPky2.js.map +1 -0
- package/dist/cjs/getPublishPayload-DbOc3WA-.js +323 -0
- package/dist/cjs/getPublishPayload-DbOc3WA-.js.map +1 -0
- package/dist/cjs/getPublishUploads-NzioLz-3.js +229 -0
- package/dist/cjs/getPublishUploads-NzioLz-3.js.map +1 -0
- package/dist/cjs/getSegmentedItemProperties-BsaklLwI.js +61 -0
- package/dist/cjs/getSegmentedItemProperties-BsaklLwI.js.map +1 -0
- package/dist/cjs/index-BmIVfqGN.js +16231 -0
- package/dist/cjs/index-BmIVfqGN.js.map +1 -0
- package/dist/cjs/index-C_0angRB.js +57 -0
- package/dist/cjs/index-C_0angRB.js.map +1 -0
- package/dist/client/BaseClientManager.d.ts.map +1 -0
- package/dist/client/ClientManager.d.ts.map +1 -0
- package/dist/client/actions/setAddresses.d.ts.map +1 -0
- package/dist/client/actors/addModelsToDb.d.ts.map +1 -0
- package/dist/client/actors/addModelsToStore.d.ts.map +1 -0
- package/dist/client/actors/dbInit.d.ts.map +1 -0
- package/dist/client/actors/fileSystemInit.d.ts.map +1 -0
- package/dist/client/actors/platformClassesInit.d.ts.map +1 -0
- package/dist/client/actors/processSchemaFiles.d.ts.map +1 -0
- package/dist/client/actors/saveAppState.d.ts.map +1 -0
- package/dist/client/actors/saveConfig.d.ts.map +1 -0
- package/dist/client/clientManagerMachine.d.ts.map +1 -0
- package/dist/client/constants.d.ts +89 -0
- package/dist/client/constants.d.ts.map +1 -0
- package/dist/client/index.d.ts.map +1 -0
- package/dist/db/Db/BaseDb.d.ts +42 -0
- package/dist/db/Db/BaseDb.d.ts.map +1 -0
- package/dist/db/configs/dev.schema.config.d.ts.map +1 -0
- package/dist/db/read/getExistingItem.d.ts +12 -0
- package/dist/db/read/getExistingItem.d.ts.map +1 -0
- package/dist/db/read/getItem.d.ts.map +1 -0
- package/dist/db/read/getItemData.d.ts.map +1 -0
- package/dist/db/read/getItemProperties.d.ts.map +1 -0
- package/dist/db/read/getItemProperty.d.ts.map +1 -0
- package/dist/db/read/getItems.d.ts.map +1 -0
- package/dist/db/read/getMetadata.d.ts.map +1 -0
- package/dist/db/read/getModelSchemas.d.ts.map +1 -0
- package/dist/db/read/getModels.d.ts.map +1 -0
- package/dist/db/read/getPropertyData.d.ts.map +1 -0
- package/dist/db/read/getPublishPayload.d.ts.map +1 -0
- package/dist/db/read/getPublishUploads.d.ts +16 -0
- package/dist/db/read/getPublishUploads.d.ts.map +1 -0
- package/dist/db/read/getRelationValueData.d.ts.map +1 -0
- package/dist/db/read/getSchemaUidForModel.d.ts.map +1 -0
- package/dist/db/read/getSeedData.d.ts.map +1 -0
- package/dist/db/read/getStorageTransactionIdForSeedUid.d.ts.map +1 -0
- package/dist/db/read/getVersionData.d.ts.map +1 -0
- package/dist/db/read/getVersionsForVersionUids.d.ts.map +1 -0
- package/dist/db/read/subqueries/metadataLatest.d.ts.map +1 -0
- package/dist/db/read/subqueries/versionData.d.ts.map +1 -0
- package/dist/db/write/createMetadata.d.ts.map +1 -0
- package/dist/db/write/createNewItem.d.ts.map +1 -0
- package/dist/db/write/createSeed.d.ts.map +1 -0
- package/dist/db/write/createSeeds.d.ts.map +1 -0
- package/dist/db/write/createVersion.d.ts.map +1 -0
- package/dist/db/write/deleteItem.d.ts.map +1 -0
- package/dist/db/write/recoverDeletedItem.d.ts.map +1 -0
- package/dist/db/write/saveAppState.d.ts.map +1 -0
- package/dist/db/write/saveMetadata.d.ts.map +1 -0
- package/dist/db/write/updateItemPropertyValue.d.ts +13 -0
- package/dist/db/write/updateItemPropertyValue.d.ts.map +1 -0
- package/dist/db/write/updateMetadata.d.ts.map +1 -0
- package/dist/eas.d.ts.map +1 -0
- package/dist/eslint-rules/align-imports.d.ts.map +1 -0
- package/dist/eventBus.d.ts.map +1 -0
- package/dist/events/files/download.d.ts +9 -0
- package/dist/events/files/download.d.ts.map +1 -0
- package/dist/events/files/index.d.ts.map +1 -0
- package/dist/events/index.d.ts.map +1 -0
- package/dist/events/item/index.d.ts +2 -0
- package/dist/events/item/index.d.ts.map +1 -0
- package/dist/events/item/publish.d.ts.map +1 -0
- package/dist/events/item/syncDbWithEas.d.ts.map +1 -0
- package/dist/events/services/allItems.d.ts.map +1 -0
- package/dist/events/services/index.d.ts.map +1 -0
- package/dist/feed.d.ts.map +1 -0
- package/dist/getItem-CcttmUY_.js +38 -0
- package/dist/getItem-CcttmUY_.js.map +1 -0
- package/dist/getPublishPayload-NFpqbd_H.js +307 -0
- package/dist/getPublishPayload-NFpqbd_H.js.map +1 -0
- package/dist/getPublishUploads-Cpb9vgwE.js +193 -0
- package/dist/getPublishUploads-Cpb9vgwE.js.map +1 -0
- package/dist/getSegmentedItemProperties-DiyQPMgI.js +59 -0
- package/dist/getSegmentedItemProperties-DiyQPMgI.js.map +1 -0
- package/dist/graphql/fragments/Attestation.d.ts.map +1 -0
- package/dist/graphql/fragments/Schema.d.ts.map +1 -0
- package/dist/graphql/fragments/index.d.ts.map +1 -0
- package/dist/graphql/gql/fragment-masking.d.ts.map +1 -0
- package/dist/graphql/gql/gql.d.ts.map +1 -0
- package/dist/graphql/gql/graphql.d.ts.map +1 -0
- package/dist/graphql/gql/index.d.ts.map +1 -0
- package/dist/helpers/ArweaveClient/BaseArweaveClient.d.ts +71 -0
- package/dist/helpers/ArweaveClient/BaseArweaveClient.d.ts.map +1 -0
- package/dist/helpers/ArweaveClient/index.d.ts +30 -0
- package/dist/helpers/ArweaveClient/index.d.ts.map +1 -0
- package/dist/helpers/ArweaveClient/queries.d.ts +13 -0
- package/dist/helpers/ArweaveClient/queries.d.ts.map +1 -0
- package/dist/helpers/EasClient/BaseEasClient.d.ts +10 -0
- package/dist/helpers/EasClient/BaseEasClient.d.ts.map +1 -0
- package/dist/helpers/FileManager/BaseFileManager.d.ts.map +1 -0
- package/dist/helpers/PathResolver/BasePathResolver.d.ts.map +1 -0
- package/dist/helpers/QueryClient/BaseQueryClient.d.ts.map +1 -0
- package/dist/helpers/constants.d.ts +67 -0
- package/dist/helpers/constants.d.ts.map +1 -0
- package/dist/helpers/crypto.d.ts.map +1 -0
- package/dist/helpers/db.d.ts.map +1 -0
- package/dist/helpers/entity/entityCache.d.ts +49 -0
- package/dist/helpers/entity/entityCache.d.ts.map +1 -0
- package/dist/helpers/entity/entityCommon.d.ts +23 -0
- package/dist/helpers/entity/entityCommon.d.ts.map +1 -0
- package/dist/helpers/entity/entityFind.d.ts +52 -0
- package/dist/helpers/entity/entityFind.d.ts.map +1 -0
- package/dist/helpers/entity/entityLiveQuery.d.ts +68 -0
- package/dist/helpers/entity/entityLiveQuery.d.ts.map +1 -0
- package/dist/helpers/entity/entityUnload.d.ts +50 -0
- package/dist/helpers/entity/entityUnload.d.ts.map +1 -0
- package/dist/helpers/entity/index.d.ts +10 -0
- package/dist/helpers/entity/index.d.ts.map +1 -0
- package/dist/helpers/environment.d.ts.map +1 -0
- package/dist/helpers/file/download/actors.d.ts +17 -0
- package/dist/helpers/file/download/actors.d.ts.map +1 -0
- package/dist/helpers/file/download/index.d.ts +70 -0
- package/dist/helpers/file/download/index.d.ts.map +1 -0
- package/dist/helpers/file/fetchAll/actors.d.ts +16 -0
- package/dist/helpers/file/fetchAll/actors.d.ts.map +1 -0
- package/dist/helpers/file/fetchAll/index.d.ts +58 -0
- package/dist/helpers/file/fetchAll/index.d.ts.map +1 -0
- package/dist/helpers/file/queries.d.ts.map +1 -0
- package/dist/helpers/files.d.ts.map +1 -0
- package/dist/helpers/getSchemaForItemProperty.d.ts.map +1 -0
- package/dist/helpers/getSegmentedItemProperties.d.ts +10 -0
- package/dist/helpers/getSegmentedItemProperties.d.ts.map +1 -0
- package/dist/helpers/image/queries.d.ts.map +1 -0
- package/dist/helpers/index.d.ts +28 -0
- package/dist/helpers/index.d.ts.map +1 -0
- package/dist/helpers/model.d.ts.map +1 -0
- package/dist/helpers/property/index.d.ts.map +1 -0
- package/dist/helpers/property.d.ts.map +1 -0
- package/dist/helpers/reactiveProxy.d.ts.map +1 -0
- package/dist/helpers/schema.d.ts.map +1 -0
- package/dist/helpers/updateMachineContext.d.ts.map +1 -0
- package/dist/helpers/updateSchema.d.ts.map +1 -0
- package/dist/helpers/waitForEntityIdle.d.ts +16 -0
- package/dist/helpers/waitForEntityIdle.d.ts.map +1 -0
- package/dist/imports/index.d.ts +4 -0
- package/dist/imports/index.d.ts.map +1 -0
- package/dist/imports/json.d.ts.map +1 -0
- package/dist/imports/markdown.d.ts.map +1 -0
- package/dist/index-CRuq6HVi.js +18 -0
- package/dist/index-CRuq6HVi.js.map +1 -0
- package/dist/index-r45w9hEq.js +23 -0
- package/dist/index-r45w9hEq.js.map +1 -0
- package/dist/index.d.ts +20 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/interfaces/IDb.d.ts.map +1 -0
- package/dist/interfaces/IEasClient.d.ts.map +1 -0
- package/dist/interfaces/IItem.d.ts.map +1 -0
- package/dist/interfaces/IItemProperty.d.ts +35 -0
- package/dist/interfaces/IItemProperty.d.ts.map +1 -0
- package/dist/interfaces/IQueryClient.d.ts.map +1 -0
- package/dist/interfaces/index.d.ts.map +1 -0
- package/dist/json-I3vJhXo8.js +14851 -0
- package/dist/json-I3vJhXo8.js.map +1 -0
- package/dist/main.cjs +75 -78
- package/dist/main.cjs.map +1 -1
- package/dist/main.js +2715 -32
- package/dist/main.js.map +1 -1
- package/dist/node/codegen/drizzle.d.ts.map +1 -0
- package/dist/node/codegen/index.d.ts.map +1 -0
- package/dist/node/codegen/ts-to-proto.d.ts.map +1 -0
- package/dist/node/constants.d.ts.map +1 -0
- package/dist/node/db/Db.d.ts.map +1 -0
- package/dist/node/db/index.d.ts.map +1 -0
- package/dist/node/db/node.app.db.config.d.ts.map +1 -0
- package/dist/node/helpers/ArweaveClient.d.ts +31 -0
- package/dist/node/helpers/ArweaveClient.d.ts.map +1 -0
- package/dist/node/helpers/EasClient.d.ts.map +1 -0
- package/dist/node/helpers/FileManager.d.ts.map +1 -0
- package/dist/node/helpers/PathResolver.d.ts.map +1 -0
- package/dist/node/helpers/QueryClient.d.ts.map +1 -0
- package/dist/node/helpers/index.d.ts.map +1 -0
- package/dist/node/helpers/scripts.d.ts.map +1 -0
- package/dist/node/index.d.ts +24 -0
- package/dist/node/index.d.ts.map +1 -0
- package/dist/node/seed.d.ts.map +1 -0
- package/dist/node/webpack/fs-proxy.d.ts.map +1 -0
- package/dist/node/webpack/index.d.ts.map +1 -0
- package/dist/node.js +524 -34
- package/dist/node.js.map +1 -1
- package/dist/property-Dy09KTxg.js +274 -0
- package/dist/property-Dy09KTxg.js.map +1 -0
- package/dist/queries-LZYSuhtz.js +16 -0
- package/dist/queries-LZYSuhtz.js.map +1 -0
- package/dist/seedSchema/AppStateSchema.d.ts.map +1 -0
- package/dist/seedSchema/ConfigSchema.d.ts.map +1 -0
- package/dist/seedSchema/MetadataSchema.d.ts.map +1 -0
- package/dist/seedSchema/ModelSchema.d.ts.map +1 -0
- package/dist/seedSchema/ModelSchemaSchema.d.ts.map +1 -0
- package/dist/seedSchema/ModelSchemaSchema.ts +2 -2
- package/dist/seedSchema/ModelUidSchema.d.ts.map +1 -0
- package/dist/seedSchema/ModelUidSchema.ts +2 -2
- package/dist/seedSchema/PropertyUidSchema.d.ts.map +1 -0
- package/dist/seedSchema/PropertyUidSchema.ts +1 -1
- package/dist/seedSchema/SchemaSchema.d.ts.map +1 -0
- package/dist/seedSchema/SeedSchema.d.ts.map +1 -0
- package/dist/seedSchema/VersionSchema.d.ts.map +1 -0
- package/dist/seedSchema/index.d.ts +11 -0
- package/dist/seedSchema/index.d.ts.map +1 -0
- package/dist/seedSchema/index.ts +10 -10
- package/dist/services/events.d.ts.map +1 -0
- package/dist/services/publish/actors/createPublishAttempt.d.ts.map +1 -0
- package/dist/services/publish/actors/preparePublishRequestData.d.ts.map +1 -0
- package/dist/services/publish/actors/upload.d.ts.map +1 -0
- package/dist/services/publish/actors/validateItemData.d.ts.map +1 -0
- package/dist/services/publish/publishMachine.d.ts.map +1 -0
- package/dist/services/write/actors/validateEntity.d.ts +6 -0
- package/dist/services/write/actors/validateEntity.d.ts.map +1 -0
- package/dist/services/write/actors/writeToDatabase.d.ts.map +1 -0
- package/dist/services/write/writeProcessMachine.d.ts +83 -0
- package/dist/services/write/writeProcessMachine.d.ts.map +1 -0
- package/dist/stores/eas.d.ts.map +1 -0
- package/dist/types/arweave.d.ts +56 -0
- package/dist/types/arweave.d.ts.map +1 -0
- package/dist/types/browser.d.ts.map +1 -0
- package/dist/types/db.d.ts.map +1 -0
- package/dist/types/fileManager.d.ts.map +1 -0
- package/dist/types/helpers.d.ts.map +1 -0
- package/dist/types/import.d.ts.map +1 -0
- package/dist/types/index.d.ts +45 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/item.d.ts +72 -0
- package/dist/types/item.d.ts.map +1 -0
- package/dist/types/machines.d.ts.map +1 -0
- package/dist/types/model.d.ts.map +1 -0
- package/dist/types/property.d.ts.map +1 -0
- package/dist/types/seedProtocol.d.ts.map +1 -0
- package/dist/types/services.d.ts.map +1 -0
- package/dist/vite/easFix.d.ts +2 -0
- package/dist/vite/easFix.d.ts.map +1 -0
- package/dist/vite/index.d.ts +48 -0
- package/dist/vite/index.d.ts.map +1 -0
- package/dist/vite.cjs +217 -0
- package/dist/vite.cjs.map +1 -0
- package/dist/vite.js +215 -0
- package/dist/vite.js.map +1 -0
- package/package.json +22 -9
- package/dist/Item/Item.js +0 -954
- package/dist/Item/Item.js.map +0 -1
- package/dist/Item/queries.js +0 -66
- package/dist/Item/queries.js.map +0 -1
- package/dist/Item/service/actors/fetchDataFromEas.js +0 -94
- package/dist/Item/service/actors/fetchDataFromEas.js.map +0 -1
- package/dist/Item/service/actors/hydrateExistingItem.js +0 -124
- package/dist/Item/service/actors/hydrateExistingItem.js.map +0 -1
- package/dist/Item/service/actors/hydrateNewItem.js +0 -28
- package/dist/Item/service/actors/hydrateNewItem.js.map +0 -1
- package/dist/Item/service/actors/initialize.js +0 -50
- package/dist/Item/service/actors/initialize.js.map +0 -1
- package/dist/Item/service/actors/loadOrCreateItem.js +0 -210
- package/dist/Item/service/actors/loadOrCreateItem.js.map +0 -1
- package/dist/Item/service/actors/reload.js +0 -26
- package/dist/Item/service/actors/reload.js.map +0 -1
- package/dist/Item/service/actors/waitForDb.js +0 -22
- package/dist/Item/service/actors/waitForDb.js.map +0 -1
- package/dist/Item/service/itemMachineSingle.js +0 -211
- package/dist/Item/service/itemMachineSingle.js.map +0 -1
- package/dist/ItemProperty/ItemProperty.js +0 -613
- package/dist/ItemProperty/ItemProperty.js.map +0 -1
- package/dist/ItemProperty/service/actors/hydrateFromDb.js +0 -207
- package/dist/ItemProperty/service/actors/hydrateFromDb.js.map +0 -1
- package/dist/ItemProperty/service/actors/initialize.js +0 -74
- package/dist/ItemProperty/service/actors/initialize.js.map +0 -1
- package/dist/ItemProperty/service/actors/loadOrCreateProperty.js +0 -125
- package/dist/ItemProperty/service/actors/loadOrCreateProperty.js.map +0 -1
- package/dist/ItemProperty/service/actors/resolveRelatedValue.js +0 -321
- package/dist/ItemProperty/service/actors/resolveRelatedValue.js.map +0 -1
- package/dist/ItemProperty/service/actors/resolveRemoteStorage.js +0 -62
- package/dist/ItemProperty/service/actors/resolveRemoteStorage.js.map +0 -1
- package/dist/ItemProperty/service/actors/saveValueToDb/analyzeInput.js +0 -111
- package/dist/ItemProperty/service/actors/saveValueToDb/analyzeInput.js.map +0 -1
- package/dist/ItemProperty/service/actors/saveValueToDb/saveImage.js +0 -178
- package/dist/ItemProperty/service/actors/saveValueToDb/saveImage.js.map +0 -1
- package/dist/ItemProperty/service/actors/saveValueToDb/saveItemStorage.js +0 -121
- package/dist/ItemProperty/service/actors/saveValueToDb/saveItemStorage.js.map +0 -1
- package/dist/ItemProperty/service/actors/saveValueToDb/saveRelation.js +0 -85
- package/dist/ItemProperty/service/actors/saveValueToDb/saveRelation.js.map +0 -1
- package/dist/ItemProperty/service/actors/waitForDb.js +0 -22
- package/dist/ItemProperty/service/actors/waitForDb.js.map +0 -1
- package/dist/ItemProperty/service/propertyMachine.js +0 -233
- package/dist/ItemProperty/service/propertyMachine.js.map +0 -1
- package/dist/Model/Model.js +0 -1831
- package/dist/Model/Model.js.map +0 -1
- package/dist/Model/index.js +0 -8
- package/dist/Model/index.js.map +0 -1
- package/dist/Model/service/actors/createModelProperties.js +0 -102
- package/dist/Model/service/actors/createModelProperties.js.map +0 -1
- package/dist/Model/service/actors/loadOrCreateModel.js +0 -397
- package/dist/Model/service/actors/loadOrCreateModel.js.map +0 -1
- package/dist/Model/service/actors/validateModel.js +0 -123
- package/dist/Model/service/actors/validateModel.js.map +0 -1
- package/dist/Model/service/modelMachine.js +0 -385
- package/dist/Model/service/modelMachine.js.map +0 -1
- package/dist/ModelProperty/ModelProperty.js +0 -841
- package/dist/ModelProperty/ModelProperty.js.map +0 -1
- package/dist/ModelProperty/service/actors/compareAndMarkDraft.js +0 -119
- package/dist/ModelProperty/service/actors/compareAndMarkDraft.js.map +0 -1
- package/dist/ModelProperty/service/actors/saveToSchema.js +0 -108
- package/dist/ModelProperty/service/actors/saveToSchema.js.map +0 -1
- package/dist/ModelProperty/service/actors/validateProperty.js +0 -129
- package/dist/ModelProperty/service/actors/validateProperty.js.map +0 -1
- package/dist/ModelProperty/service/modelPropertyMachine.js +0 -275
- package/dist/ModelProperty/service/modelPropertyMachine.js.map +0 -1
- package/dist/Schema/Schema.js +0 -1732
- package/dist/Schema/Schema.js.map +0 -1
- package/dist/Schema/errors.js +0 -14
- package/dist/Schema/errors.js.map +0 -1
- package/dist/Schema/index.js +0 -7
- package/dist/Schema/index.js.map +0 -1
- package/dist/Schema/service/actors/checkExistingSchema.js +0 -454
- package/dist/Schema/service/actors/checkExistingSchema.js.map +0 -1
- package/dist/Schema/service/actors/createModelInstances.js +0 -71
- package/dist/Schema/service/actors/createModelInstances.js.map +0 -1
- package/dist/Schema/service/actors/createPropertyInstances.js +0 -86
- package/dist/Schema/service/actors/createPropertyInstances.js.map +0 -1
- package/dist/Schema/service/actors/loadOrCreateSchema.js +0 -1336
- package/dist/Schema/service/actors/loadOrCreateSchema.js.map +0 -1
- package/dist/Schema/service/actors/validateSchema.js +0 -65
- package/dist/Schema/service/actors/validateSchema.js.map +0 -1
- package/dist/Schema/service/actors/verifyModelInstancesInCache.js +0 -88
- package/dist/Schema/service/actors/verifyModelInstancesInCache.js.map +0 -1
- package/dist/Schema/service/actors/verifyModelsInDb.js +0 -107
- package/dist/Schema/service/actors/verifyModelsInDb.js.map +0 -1
- package/dist/Schema/service/actors/verifyPropertiesInDb.js +0 -131
- package/dist/Schema/service/actors/verifyPropertiesInDb.js.map +0 -1
- package/dist/Schema/service/actors/verifyPropertyInstancesInCache.js +0 -88
- package/dist/Schema/service/actors/verifyPropertyInstancesInCache.js.map +0 -1
- package/dist/Schema/service/actors/verifySchemaInDb.js +0 -85
- package/dist/Schema/service/actors/verifySchemaInDb.js.map +0 -1
- package/dist/Schema/service/actors/writeModelsToDb.js +0 -185
- package/dist/Schema/service/actors/writeModelsToDb.js.map +0 -1
- package/dist/Schema/service/actors/writePropertiesToDb.js +0 -69
- package/dist/Schema/service/actors/writePropertiesToDb.js.map +0 -1
- package/dist/Schema/service/actors/writeSchemaToDb.js +0 -137
- package/dist/Schema/service/actors/writeSchemaToDb.js.map +0 -1
- package/dist/Schema/service/addModelsMachine.js +0 -545
- package/dist/Schema/service/addModelsMachine.js.map +0 -1
- package/dist/Schema/service/schemaMachine.js +0 -667
- package/dist/Schema/service/schemaMachine.js.map +0 -1
- package/dist/Schema/service/validation/SchemaValidationService.js +0 -565
- package/dist/Schema/service/validation/SchemaValidationService.js.map +0 -1
- package/dist/Schema/validation.js +0 -15
- package/dist/Schema/validation.js.map +0 -1
- package/dist/browser/db/Db.js +0 -484
- package/dist/browser/db/Db.js.map +0 -1
- package/dist/browser/db/drizzleFiles.js +0 -1022
- package/dist/browser/db/drizzleFiles.js.map +0 -1
- package/dist/browser/helpers/ArweaveClient.js +0 -13
- package/dist/browser/helpers/ArweaveClient.js.map +0 -1
- package/dist/browser/helpers/EasClient.js +0 -16
- package/dist/browser/helpers/EasClient.js.map +0 -1
- package/dist/browser/helpers/FileManager.js +0 -415
- package/dist/browser/helpers/FileManager.js.map +0 -1
- package/dist/browser/helpers/PathResolver.js +0 -64
- package/dist/browser/helpers/PathResolver.js.map +0 -1
- package/dist/browser/helpers/QueryClient.js +0 -33
- package/dist/browser/helpers/QueryClient.js.map +0 -1
- package/dist/browser/react/client.js +0 -16
- package/dist/browser/react/client.js.map +0 -1
- package/dist/browser/react/db.js +0 -7
- package/dist/browser/react/db.js.map +0 -1
- package/dist/browser/react/item.js +0 -192
- package/dist/browser/react/item.js.map +0 -1
- package/dist/browser/react/itemProperty.js +0 -545
- package/dist/browser/react/itemProperty.js.map +0 -1
- package/dist/browser/react/liveQuery.js +0 -95
- package/dist/browser/react/liveQuery.js.map +0 -1
- package/dist/browser/react/model.js +0 -276
- package/dist/browser/react/model.js.map +0 -1
- package/dist/browser/react/modelProperty.js +0 -412
- package/dist/browser/react/modelProperty.js.map +0 -1
- package/dist/browser/react/schema.js +0 -387
- package/dist/browser/react/schema.js.map +0 -1
- package/dist/browser/react/services.js +0 -47
- package/dist/browser/react/services.js.map +0 -1
- package/dist/browser/react/trash.js +0 -25
- package/dist/browser/react/trash.js.map +0 -1
- package/dist/browser/workers/FileDownloader.js +0 -52
- package/dist/browser/workers/FileDownloader.js.map +0 -1
- package/dist/browser/workers/ImageResizer.js +0 -63
- package/dist/browser/workers/ImageResizer.js.map +0 -1
- package/dist/browser/workers/filesDownload.js +0 -245
- package/dist/browser/workers/filesDownload.js.map +0 -1
- package/dist/browser/workers/imageResize.js +0 -382
- package/dist/browser/workers/imageResize.js.map +0 -1
- package/dist/client/ClientManager.js +0 -177
- package/dist/client/ClientManager.js.map +0 -1
- package/dist/client/actors/addModelsToDb.js +0 -150
- package/dist/client/actors/addModelsToDb.js.map +0 -1
- package/dist/client/actors/addModelsToStore.js +0 -28
- package/dist/client/actors/addModelsToStore.js.map +0 -1
- package/dist/client/actors/dbInit.js +0 -38
- package/dist/client/actors/dbInit.js.map +0 -1
- package/dist/client/actors/fileSystemInit.js +0 -43
- package/dist/client/actors/fileSystemInit.js.map +0 -1
- package/dist/client/actors/platformClassesInit.js +0 -175
- package/dist/client/actors/platformClassesInit.js.map +0 -1
- package/dist/client/actors/processSchemaFiles.js +0 -169
- package/dist/client/actors/processSchemaFiles.js.map +0 -1
- package/dist/client/actors/saveAppState.js +0 -80
- package/dist/client/actors/saveAppState.js.map +0 -1
- package/dist/client/actors/saveConfig.js +0 -110
- package/dist/client/actors/saveConfig.js.map +0 -1
- package/dist/client/clientManagerMachine.js +0 -191
- package/dist/client/clientManagerMachine.js.map +0 -1
- package/dist/client/constants.js +0 -80
- package/dist/client/constants.js.map +0 -1
- package/dist/db/Db/BaseDb.js +0 -55
- package/dist/db/Db/BaseDb.js.map +0 -1
- package/dist/db/read/getExistingItem.js +0 -33
- package/dist/db/read/getExistingItem.js.map +0 -1
- package/dist/db/read/getItem.js +0 -26
- package/dist/db/read/getItem.js.map +0 -1
- package/dist/db/read/getItemData.js +0 -88
- package/dist/db/read/getItemData.js.map +0 -1
- package/dist/db/read/getItemProperties.js +0 -53
- package/dist/db/read/getItemProperties.js.map +0 -1
- package/dist/db/read/getItemProperty.js +0 -34
- package/dist/db/read/getItemProperty.js.map +0 -1
- package/dist/db/read/getItems.js +0 -53
- package/dist/db/read/getItems.js.map +0 -1
- package/dist/db/read/getMetadata.js +0 -36
- package/dist/db/read/getMetadata.js.map +0 -1
- package/dist/db/read/getModelSchemas.js +0 -63
- package/dist/db/read/getModelSchemas.js.map +0 -1
- package/dist/db/read/getPropertyData.js +0 -42
- package/dist/db/read/getPropertyData.js.map +0 -1
- package/dist/db/read/getPublishPayload.js +0 -294
- package/dist/db/read/getPublishPayload.js.map +0 -1
- package/dist/db/read/getPublishUploads.js +0 -166
- package/dist/db/read/getPublishUploads.js.map +0 -1
- package/dist/db/read/getRelationValueData.js +0 -34
- package/dist/db/read/getRelationValueData.js.map +0 -1
- package/dist/db/read/getSchemaUidForModel.js +0 -28
- package/dist/db/read/getSchemaUidForModel.js.map +0 -1
- package/dist/db/read/getSeedData.js +0 -32
- package/dist/db/read/getSeedData.js.map +0 -1
- package/dist/db/read/getStorageTransactionIdForSeedUid.js +0 -34
- package/dist/db/read/getStorageTransactionIdForSeedUid.js.map +0 -1
- package/dist/db/read/getVersionData.js +0 -37
- package/dist/db/read/getVersionData.js.map +0 -1
- package/dist/db/read/subqueries/metadataLatest.js +0 -39
- package/dist/db/read/subqueries/metadataLatest.js.map +0 -1
- package/dist/db/read/subqueries/versionData.js +0 -31
- package/dist/db/read/subqueries/versionData.js.map +0 -1
- package/dist/db/write/createMetadata.js +0 -94
- package/dist/db/write/createMetadata.js.map +0 -1
- package/dist/db/write/createNewItem.js +0 -43
- package/dist/db/write/createNewItem.js.map +0 -1
- package/dist/db/write/createSeed.js +0 -32
- package/dist/db/write/createSeed.js.map +0 -1
- package/dist/db/write/createSeeds.js +0 -29
- package/dist/db/write/createSeeds.js.map +0 -1
- package/dist/db/write/createVersion.js +0 -29
- package/dist/db/write/createVersion.js.map +0 -1
- package/dist/db/write/deleteItem.js +0 -25
- package/dist/db/write/deleteItem.js.map +0 -1
- package/dist/db/write/saveAppState.js +0 -30
- package/dist/db/write/saveAppState.js.map +0 -1
- package/dist/db/write/saveMetadata.js +0 -26
- package/dist/db/write/saveMetadata.js.map +0 -1
- package/dist/db/write/updateItemPropertyValue.js +0 -165
- package/dist/db/write/updateItemPropertyValue.js.map +0 -1
- package/dist/db/write/updateMetadata.js +0 -38
- package/dist/db/write/updateMetadata.js.map +0 -1
- package/dist/eas.js +0 -176
- package/dist/eas.js.map +0 -1
- package/dist/eventBus.js +0 -6
- package/dist/eventBus.js.map +0 -1
- package/dist/events/files/download.js +0 -191
- package/dist/events/files/download.js.map +0 -1
- package/dist/events/files/index.js +0 -23
- package/dist/events/files/index.js.map +0 -1
- package/dist/events/index.js +0 -28
- package/dist/events/index.js.map +0 -1
- package/dist/events/item/index.js +0 -28
- package/dist/events/item/index.js.map +0 -1
- package/dist/events/item/publish.js +0 -50
- package/dist/events/item/publish.js.map +0 -1
- package/dist/events/item/syncDbWithEas.js +0 -453
- package/dist/events/item/syncDbWithEas.js.map +0 -1
- package/dist/events/services/allItems.js +0 -10
- package/dist/events/services/allItems.js.map +0 -1
- package/dist/events/services/index.js +0 -9
- package/dist/events/services/index.js.map +0 -1
- package/dist/feed.js +0 -534
- package/dist/feed.js.map +0 -1
- package/dist/graphql/gql/gql.js +0 -27
- package/dist/graphql/gql/gql.js.map +0 -1
- package/dist/graphql/gql/graphql.js +0 -129
- package/dist/graphql/gql/graphql.js.map +0 -1
- package/dist/helpers/ArweaveClient/BaseArweaveClient.js +0 -11
- package/dist/helpers/ArweaveClient/BaseArweaveClient.js.map +0 -1
- package/dist/helpers/ArweaveClient/index.js +0 -61
- package/dist/helpers/ArweaveClient/index.js.map +0 -1
- package/dist/helpers/ArweaveClient/queries.js +0 -16
- package/dist/helpers/ArweaveClient/queries.js.map +0 -1
- package/dist/helpers/EasClient/BaseEasClient.js +0 -20
- package/dist/helpers/EasClient/BaseEasClient.js.map +0 -1
- package/dist/helpers/FileManager/BaseFileManager.js +0 -119
- package/dist/helpers/FileManager/BaseFileManager.js.map +0 -1
- package/dist/helpers/PathResolver/BasePathResolver.js +0 -20
- package/dist/helpers/PathResolver/BasePathResolver.js.map +0 -1
- package/dist/helpers/QueryClient/BaseQueryClient.js +0 -11
- package/dist/helpers/QueryClient/BaseQueryClient.js.map +0 -1
- package/dist/helpers/constants.js +0 -107
- package/dist/helpers/constants.js.map +0 -1
- package/dist/helpers/crypto.js +0 -9
- package/dist/helpers/crypto.js.map +0 -1
- package/dist/helpers/db.js +0 -1335
- package/dist/helpers/db.js.map +0 -1
- package/dist/helpers/environment.js +0 -14
- package/dist/helpers/environment.js.map +0 -1
- package/dist/helpers/file/queries.js +0 -15
- package/dist/helpers/file/queries.js.map +0 -1
- package/dist/helpers/getSchemaForItemProperty.js +0 -65
- package/dist/helpers/getSchemaForItemProperty.js.map +0 -1
- package/dist/helpers/getSegmentedItemProperties.js +0 -71
- package/dist/helpers/getSegmentedItemProperties.js.map +0 -1
- package/dist/helpers/index.js +0 -101
- package/dist/helpers/index.js.map +0 -1
- package/dist/helpers/model.js +0 -24
- package/dist/helpers/model.js.map +0 -1
- package/dist/helpers/property/index.js +0 -110
- package/dist/helpers/property/index.js.map +0 -1
- package/dist/helpers/property.js +0 -286
- package/dist/helpers/property.js.map +0 -1
- package/dist/helpers/reactiveProxy.js +0 -87
- package/dist/helpers/reactiveProxy.js.map +0 -1
- package/dist/helpers/schema.js +0 -473
- package/dist/helpers/schema.js.map +0 -1
- package/dist/helpers/updateMachineContext.js +0 -20
- package/dist/helpers/updateMachineContext.js.map +0 -1
- package/dist/helpers/updateSchema.js +0 -721
- package/dist/helpers/updateSchema.js.map +0 -1
- package/dist/imports/json.js +0 -1129
- package/dist/imports/json.js.map +0 -1
- package/dist/imports/markdown.js +0 -141
- package/dist/imports/markdown.js.map +0 -1
- package/dist/node/codegen/drizzle.js +0 -136
- package/dist/node/codegen/drizzle.js.map +0 -1
- package/dist/node/codegen/templates/header.njk +0 -10
- package/dist/node/codegen/templates/index.njk +0 -27
- package/dist/node/codegen/templates/model.njk +0 -18
- package/dist/node/codegen/templates/relations.njk +0 -13
- package/dist/node/codegen/templates/schema.njk +0 -11
- package/dist/node/codegen/templates/table.njk +0 -43
- package/dist/node/db/Db.js +0 -332
- package/dist/node/db/Db.js.map +0 -1
- package/dist/node/helpers/ArweaveClient.js +0 -13
- package/dist/node/helpers/ArweaveClient.js.map +0 -1
- package/dist/node/helpers/EasClient.js +0 -16
- package/dist/node/helpers/EasClient.js.map +0 -1
- package/dist/node/helpers/FileManager.js +0 -151
- package/dist/node/helpers/FileManager.js.map +0 -1
- package/dist/node/helpers/PathResolver.js +0 -182
- package/dist/node/helpers/PathResolver.js.map +0 -1
- package/dist/node/helpers/QueryClient.js +0 -20
- package/dist/node/helpers/QueryClient.js.map +0 -1
- package/dist/node/helpers/index.js +0 -62
- package/dist/node/helpers/index.js.map +0 -1
- package/dist/node/helpers/scripts.js +0 -121
- package/dist/node/helpers/scripts.js.map +0 -1
- package/dist/node/webpack/index.js +0 -96
- package/dist/node/webpack/index.js.map +0 -1
- package/dist/node_modules/.bun/events@3.3.0/node_modules/events/events.d.ts +0 -31
- package/dist/node_modules/.bun/events@3.3.0/node_modules/events/events.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.d.mts +0 -90
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/dist/js-yaml.d.mts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/index.d.ts +0 -28
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/index.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/common.d.ts +0 -7
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/common.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/dumper.d.ts +0 -2
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/dumper.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/exception.d.ts +0 -12
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/exception.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/loader.d.ts +0 -3
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/loader.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/schema/core.d.ts +0 -3
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/schema/core.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/schema/default.d.ts +0 -3
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/schema/default.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/schema/failsafe.d.ts +0 -4
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/schema/failsafe.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/schema/json.d.ts +0 -3
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/schema/json.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/schema.d.ts +0 -7
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/schema.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/snippet.d.ts +0 -3
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/snippet.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/binary.d.ts +0 -4
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/binary.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/bool.d.ts +0 -4
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/bool.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/float.d.ts +0 -4
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/float.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/int.d.ts +0 -4
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/int.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/map.d.ts +0 -4
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/map.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/merge.d.ts +0 -4
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/merge.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/null.d.ts +0 -4
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/null.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/omap.d.ts +0 -4
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/omap.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/pairs.d.ts +0 -4
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/pairs.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/seq.d.ts +0 -4
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/seq.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/set.d.ts +0 -4
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/set.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/str.d.ts +0 -4
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/str.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/timestamp.d.ts +0 -4
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type/timestamp.d.ts.map +0 -1
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type.d.ts +0 -18
- package/dist/node_modules/.bun/js-yaml@4.1.1/node_modules/js-yaml/lib/type.d.ts.map +0 -1
- package/dist/node_modules/.bun/process@0.11.10/node_modules/process/index.d.ts +0 -3
- package/dist/node_modules/.bun/process@0.11.10/node_modules/process/index.d.ts.map +0 -1
- package/dist/node_modules/.bun/punycode@1.4.1/node_modules/punycode/punycode.d.ts +0 -1
- package/dist/node_modules/.bun/punycode@1.4.1/node_modules/punycode/punycode.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/add-abort-signal.d.ts +0 -3
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/add-abort-signal.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/buffer_list.d.ts +0 -19
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/buffer_list.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/compose.d.ts +0 -3
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/compose.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/destroy.d.ts +0 -6
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/destroy.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/duplex.d.ts +0 -12
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/duplex.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/duplexify.d.ts +0 -3
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/duplexify.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/end-of-stream.d.ts +0 -7
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/end-of-stream.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/from.d.ts +0 -3
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/from.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/legacy.d.ts +0 -7
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/legacy.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/operators.d.ts +0 -31
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/operators.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/passthrough.d.ts +0 -7
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/passthrough.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/pipeline.d.ts +0 -3
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/pipeline.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/readable.d.ts +0 -55
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/readable.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/state.d.ts +0 -4
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/state.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/transform.d.ts +0 -12
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/transform.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/utils.d.ts +0 -33
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/utils.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/writable.d.ts +0 -59
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/streams/writable.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/validators.d.ts +0 -199
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/internal/validators.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/ours/errors.d.ts +0 -8
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/ours/errors.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/ours/index.d.ts +0 -2
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/ours/index.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/ours/primordials.d.ts +0 -51
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/ours/primordials.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/ours/util/inspect.d.ts +0 -3
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/ours/util/inspect.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/ours/util.d.ts +0 -22
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/ours/util.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/stream/promises.d.ts +0 -4
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/stream/promises.d.ts.map +0 -1
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/stream.d.ts +0 -3
- package/dist/node_modules/.bun/readable-stream@4.7.0/node_modules/readable-stream/lib/stream.d.ts.map +0 -1
- package/dist/node_modules/.bun/string_decoder@1.3.0/node_modules/string_decoder/lib/string_decoder.d.ts +0 -33
- package/dist/node_modules/.bun/string_decoder@1.3.0/node_modules/string_decoder/lib/string_decoder.d.ts.map +0 -1
- package/dist/node_modules/.bun/url@0.11.4/node_modules/url/url.d.ts +0 -26
- package/dist/node_modules/.bun/url@0.11.4/node_modules/url/url.d.ts.map +0 -1
- package/dist/scripts/build-with-tests.d.ts +0 -3
- package/dist/scripts/build-with-tests.d.ts.map +0 -1
- package/dist/scripts/rpcServer.cursor.d.ts +0 -2
- package/dist/scripts/rpcServer.cursor.d.ts.map +0 -1
- package/dist/scripts/rpcServer.d.ts +0 -3
- package/dist/scripts/rpcServer.d.ts.map +0 -1
- package/dist/scripts/sync-versions.d.ts +0 -7
- package/dist/scripts/sync-versions.d.ts.map +0 -1
- package/dist/scripts/track-drizzle-changes.d.ts +0 -13
- package/dist/scripts/track-drizzle-changes.d.ts.map +0 -1
- package/dist/scripts/vite.config.d.ts +0 -3
- package/dist/scripts/vite.config.d.ts.map +0 -1
- package/dist/seedSchema/AppStateSchema.js +0 -11
- package/dist/seedSchema/AppStateSchema.js.map +0 -1
- package/dist/seedSchema/ConfigSchema.js +0 -12
- package/dist/seedSchema/ConfigSchema.js.map +0 -1
- package/dist/seedSchema/MetadataSchema.js +0 -29
- package/dist/seedSchema/MetadataSchema.js.map +0 -1
- package/dist/seedSchema/ModelSchema.js +0 -40
- package/dist/seedSchema/ModelSchema.js.map +0 -1
- package/dist/seedSchema/ModelSchemaSchema.js +0 -12
- package/dist/seedSchema/ModelSchemaSchema.js.map +0 -1
- package/dist/seedSchema/ModelUidSchema.js +0 -18
- package/dist/seedSchema/ModelUidSchema.js.map +0 -1
- package/dist/seedSchema/PropertyUidSchema.js +0 -18
- package/dist/seedSchema/PropertyUidSchema.js.map +0 -1
- package/dist/seedSchema/SEEDPROTOCOL_Seed_Protocol_v1.json.js +0 -94
- package/dist/seedSchema/SEEDPROTOCOL_Seed_Protocol_v1.json.js.map +0 -1
- package/dist/seedSchema/SchemaSchema.js +0 -20
- package/dist/seedSchema/SchemaSchema.js.map +0 -1
- package/dist/seedSchema/SeedSchema.js +0 -16
- package/dist/seedSchema/SeedSchema.js.map +0 -1
- package/dist/seedSchema/VersionSchema.js +0 -17
- package/dist/seedSchema/VersionSchema.js.map +0 -1
- package/dist/seedSchema/index.js +0 -11
- package/dist/seedSchema/index.js.map +0 -1
- package/dist/services/events.js +0 -16
- package/dist/services/events.js.map +0 -1
- package/dist/services/publish/actors/createPublishAttempt.js +0 -14
- package/dist/services/publish/actors/createPublishAttempt.js.map +0 -1
- package/dist/services/publish/actors/preparePublishRequestData.js +0 -76
- package/dist/services/publish/actors/preparePublishRequestData.js.map +0 -1
- package/dist/services/publish/actors/upload.js +0 -61
- package/dist/services/publish/actors/upload.js.map +0 -1
- package/dist/services/publish/actors/validateItemData.js +0 -18
- package/dist/services/publish/actors/validateItemData.js.map +0 -1
- package/dist/services/publish/publishMachine.js +0 -71
- package/dist/services/publish/publishMachine.js.map +0 -1
- package/dist/services/write/actors/validateEntity.js +0 -145
- package/dist/services/write/actors/validateEntity.js.map +0 -1
- package/dist/services/write/actors/writeToDatabase.js +0 -91
- package/dist/services/write/actors/writeToDatabase.js.map +0 -1
- package/dist/services/write/writeProcessMachine.js +0 -233
- package/dist/services/write/writeProcessMachine.js.map +0 -1
- package/dist/src/Item/Item.d.ts +0 -94
- package/dist/src/Item/Item.d.ts.map +0 -1
- package/dist/src/Item/queries.d.ts.map +0 -1
- package/dist/src/Item/service/actors/fetchDataFromEas.d.ts +0 -2
- package/dist/src/Item/service/actors/fetchDataFromEas.d.ts.map +0 -1
- package/dist/src/Item/service/actors/hydrateExistingItem.d.ts.map +0 -1
- package/dist/src/Item/service/actors/hydrateNewItem.d.ts.map +0 -1
- package/dist/src/Item/service/actors/initialize.d.ts.map +0 -1
- package/dist/src/Item/service/actors/loadOrCreateItem.d.ts.map +0 -1
- package/dist/src/Item/service/actors/reload.d.ts.map +0 -1
- package/dist/src/Item/service/actors/saveDataToDb.d.ts +0 -3
- package/dist/src/Item/service/actors/saveDataToDb.d.ts.map +0 -1
- package/dist/src/Item/service/actors/waitForDb.d.ts.map +0 -1
- package/dist/src/Item/service/itemMachineSingle.d.ts +0 -2
- package/dist/src/Item/service/itemMachineSingle.d.ts.map +0 -1
- package/dist/src/ItemProperty/ItemProperty.d.ts +0 -67
- package/dist/src/ItemProperty/ItemProperty.d.ts.map +0 -1
- package/dist/src/ItemProperty/service/actors/hydrateFromDb.d.ts.map +0 -1
- package/dist/src/ItemProperty/service/actors/initialize.d.ts.map +0 -1
- package/dist/src/ItemProperty/service/actors/loadOrCreateProperty.d.ts.map +0 -1
- package/dist/src/ItemProperty/service/actors/resolveRelatedValue.d.ts.map +0 -1
- package/dist/src/ItemProperty/service/actors/resolveRemoteStorage.d.ts.map +0 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/analyzeInput.d.ts.map +0 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/index.d.ts.map +0 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveImage.d.ts.map +0 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveItemStorage.d.ts.map +0 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveRelation.d.ts.map +0 -1
- package/dist/src/ItemProperty/service/actors/waitForDb.d.ts.map +0 -1
- package/dist/src/ItemProperty/service/propertyMachine.d.ts +0 -48
- package/dist/src/ItemProperty/service/propertyMachine.d.ts.map +0 -1
- package/dist/src/Model/Model.d.ts +0 -199
- package/dist/src/Model/Model.d.ts.map +0 -1
- package/dist/src/Model/index.d.ts +0 -26
- package/dist/src/Model/index.d.ts.map +0 -1
- package/dist/src/Model/service/actors/createModelProperties.d.ts.map +0 -1
- package/dist/src/Model/service/actors/loadOrCreateModel.d.ts.map +0 -1
- package/dist/src/Model/service/actors/validateModel.d.ts.map +0 -1
- package/dist/src/Model/service/modelMachine.d.ts +0 -206
- package/dist/src/Model/service/modelMachine.d.ts.map +0 -1
- package/dist/src/ModelProperty/ModelProperty.d.ts +0 -112
- package/dist/src/ModelProperty/ModelProperty.d.ts.map +0 -1
- package/dist/src/ModelProperty/service/actors/compareAndMarkDraft.d.ts.map +0 -1
- package/dist/src/ModelProperty/service/actors/saveToSchema.d.ts.map +0 -1
- package/dist/src/ModelProperty/service/actors/validateProperty.d.ts.map +0 -1
- package/dist/src/ModelProperty/service/modelPropertyMachine.d.ts +0 -183
- package/dist/src/ModelProperty/service/modelPropertyMachine.d.ts.map +0 -1
- package/dist/src/Schema/Schema.d.ts +0 -143
- package/dist/src/Schema/Schema.d.ts.map +0 -1
- package/dist/src/Schema/errors.d.ts.map +0 -1
- package/dist/src/Schema/index.d.ts.map +0 -1
- package/dist/src/Schema/service/actors/checkExistingSchema.d.ts.map +0 -1
- package/dist/src/Schema/service/actors/createModelInstances.d.ts.map +0 -1
- package/dist/src/Schema/service/actors/createPropertyInstances.d.ts.map +0 -1
- package/dist/src/Schema/service/actors/loadOrCreateSchema.d.ts.map +0 -1
- package/dist/src/Schema/service/actors/validateSchema.d.ts.map +0 -1
- package/dist/src/Schema/service/actors/verifyModelInstancesInCache.d.ts.map +0 -1
- package/dist/src/Schema/service/actors/verifyModelsInDb.d.ts.map +0 -1
- package/dist/src/Schema/service/actors/verifyPropertiesInDb.d.ts.map +0 -1
- package/dist/src/Schema/service/actors/verifyPropertyInstancesInCache.d.ts.map +0 -1
- package/dist/src/Schema/service/actors/verifySchemaInDb.d.ts.map +0 -1
- package/dist/src/Schema/service/actors/writeModelsToDb.d.ts.map +0 -1
- package/dist/src/Schema/service/actors/writePropertiesToDb.d.ts.map +0 -1
- package/dist/src/Schema/service/actors/writeSchemaToDb.d.ts.map +0 -1
- package/dist/src/Schema/service/addModelsMachine.d.ts +0 -111
- package/dist/src/Schema/service/addModelsMachine.d.ts.map +0 -1
- package/dist/src/Schema/service/schemaMachine.d.ts +0 -494
- package/dist/src/Schema/service/schemaMachine.d.ts.map +0 -1
- package/dist/src/Schema/service/validation/SchemaValidationService.d.ts.map +0 -1
- package/dist/src/Schema/validation.d.ts.map +0 -1
- package/dist/src/browser/db/Db.d.ts.map +0 -1
- package/dist/src/browser/db/drizzleFiles.d.ts.map +0 -1
- package/dist/src/browser/db/sqlWasmClient.d.ts.map +0 -1
- package/dist/src/browser/helpers/ArweaveClient.d.ts +0 -7
- package/dist/src/browser/helpers/ArweaveClient.d.ts.map +0 -1
- package/dist/src/browser/helpers/EasClient.d.ts.map +0 -1
- package/dist/src/browser/helpers/FileManager.d.ts.map +0 -1
- package/dist/src/browser/helpers/PathResolver.d.ts.map +0 -1
- package/dist/src/browser/helpers/QueryClient.d.ts.map +0 -1
- package/dist/src/browser/helpers/index.d.ts +0 -2
- package/dist/src/browser/helpers/index.d.ts.map +0 -1
- package/dist/src/browser/index.d.ts +0 -6
- package/dist/src/browser/index.d.ts.map +0 -1
- package/dist/src/browser/react/OPFSImage.d.ts.map +0 -1
- package/dist/src/browser/react/SeedImage.d.ts.map +0 -1
- package/dist/src/browser/react/client.d.ts.map +0 -1
- package/dist/src/browser/react/db.d.ts.map +0 -1
- package/dist/src/browser/react/index.d.ts.map +0 -1
- package/dist/src/browser/react/item.d.ts +0 -41
- package/dist/src/browser/react/item.d.ts.map +0 -1
- package/dist/src/browser/react/itemProperty.d.ts.map +0 -1
- package/dist/src/browser/react/liveQuery.d.ts.map +0 -1
- package/dist/src/browser/react/model.d.ts.map +0 -1
- package/dist/src/browser/react/modelProperty.d.ts.map +0 -1
- package/dist/src/browser/react/schema.d.ts.map +0 -1
- package/dist/src/browser/react/services.d.ts.map +0 -1
- package/dist/src/browser/react/trash.d.ts +0 -6
- package/dist/src/browser/react/trash.d.ts.map +0 -1
- package/dist/src/browser/seed.d.ts +0 -10
- package/dist/src/browser/seed.d.ts.map +0 -1
- package/dist/src/browser/workers/FileDownloader.d.ts.map +0 -1
- package/dist/src/browser/workers/ImageResizer.d.ts.map +0 -1
- package/dist/src/browser/workers/content-hash.d.ts.map +0 -1
- package/dist/src/browser/workers/dbWorker.d.ts.map +0 -1
- package/dist/src/browser/workers/filesDownload.d.ts.map +0 -1
- package/dist/src/browser/workers/imageResize.d.ts.map +0 -1
- package/dist/src/client/BaseClientManager.d.ts.map +0 -1
- package/dist/src/client/ClientManager.d.ts.map +0 -1
- package/dist/src/client/actions/setAddresses.d.ts.map +0 -1
- package/dist/src/client/actors/addModelsToDb.d.ts.map +0 -1
- package/dist/src/client/actors/addModelsToStore.d.ts.map +0 -1
- package/dist/src/client/actors/dbInit.d.ts.map +0 -1
- package/dist/src/client/actors/fileSystemInit.d.ts.map +0 -1
- package/dist/src/client/actors/platformClassesInit.d.ts.map +0 -1
- package/dist/src/client/actors/processSchemaFiles.d.ts.map +0 -1
- package/dist/src/client/actors/saveAppState.d.ts.map +0 -1
- package/dist/src/client/actors/saveConfig.d.ts.map +0 -1
- package/dist/src/client/clientManagerMachine.d.ts.map +0 -1
- package/dist/src/client/constants.d.ts +0 -79
- package/dist/src/client/constants.d.ts.map +0 -1
- package/dist/src/client/index.d.ts.map +0 -1
- package/dist/src/db/Db/BaseDb.d.ts +0 -43
- package/dist/src/db/Db/BaseDb.d.ts.map +0 -1
- package/dist/src/db/configs/dev.schema.config.d.ts.map +0 -1
- package/dist/src/db/read/getExistingItem.d.ts +0 -12
- package/dist/src/db/read/getExistingItem.d.ts.map +0 -1
- package/dist/src/db/read/getItem.d.ts.map +0 -1
- package/dist/src/db/read/getItemData.d.ts.map +0 -1
- package/dist/src/db/read/getItemProperties.d.ts.map +0 -1
- package/dist/src/db/read/getItemProperty.d.ts.map +0 -1
- package/dist/src/db/read/getItems.d.ts.map +0 -1
- package/dist/src/db/read/getMetadata.d.ts.map +0 -1
- package/dist/src/db/read/getModelSchemas.d.ts.map +0 -1
- package/dist/src/db/read/getModels.d.ts.map +0 -1
- package/dist/src/db/read/getPropertyData.d.ts.map +0 -1
- package/dist/src/db/read/getPublishPayload.d.ts.map +0 -1
- package/dist/src/db/read/getPublishUploads.d.ts +0 -16
- package/dist/src/db/read/getPublishUploads.d.ts.map +0 -1
- package/dist/src/db/read/getRelationValueData.d.ts.map +0 -1
- package/dist/src/db/read/getSchemaUidForModel.d.ts.map +0 -1
- package/dist/src/db/read/getSeedData.d.ts.map +0 -1
- package/dist/src/db/read/getStorageTransactionIdForSeedUid.d.ts.map +0 -1
- package/dist/src/db/read/getVersionData.d.ts.map +0 -1
- package/dist/src/db/read/getVersionsForVersionUids.d.ts.map +0 -1
- package/dist/src/db/read/subqueries/metadataLatest.d.ts.map +0 -1
- package/dist/src/db/read/subqueries/versionData.d.ts.map +0 -1
- package/dist/src/db/write/createMetadata.d.ts.map +0 -1
- package/dist/src/db/write/createNewItem.d.ts.map +0 -1
- package/dist/src/db/write/createSeed.d.ts.map +0 -1
- package/dist/src/db/write/createSeeds.d.ts.map +0 -1
- package/dist/src/db/write/createVersion.d.ts.map +0 -1
- package/dist/src/db/write/deleteItem.d.ts.map +0 -1
- package/dist/src/db/write/recoverDeletedItem.d.ts.map +0 -1
- package/dist/src/db/write/saveAppState.d.ts.map +0 -1
- package/dist/src/db/write/saveMetadata.d.ts.map +0 -1
- package/dist/src/db/write/updateItemPropertyValue.d.ts +0 -9
- package/dist/src/db/write/updateItemPropertyValue.d.ts.map +0 -1
- package/dist/src/db/write/updateMetadata.d.ts.map +0 -1
- package/dist/src/eas.d.ts.map +0 -1
- package/dist/src/eslint-rules/align-imports.d.ts.map +0 -1
- package/dist/src/eventBus.d.ts.map +0 -1
- package/dist/src/events/files/download.d.ts +0 -6
- package/dist/src/events/files/download.d.ts.map +0 -1
- package/dist/src/events/files/index.d.ts.map +0 -1
- package/dist/src/events/index.d.ts.map +0 -1
- package/dist/src/events/item/create.d.ts +0 -2
- package/dist/src/events/item/create.d.ts.map +0 -1
- package/dist/src/events/item/index.d.ts +0 -3
- package/dist/src/events/item/index.d.ts.map +0 -1
- package/dist/src/events/item/publish.d.ts.map +0 -1
- package/dist/src/events/item/request.d.ts +0 -2
- package/dist/src/events/item/request.d.ts.map +0 -1
- package/dist/src/events/item/requestAll.d.ts +0 -9
- package/dist/src/events/item/requestAll.d.ts.map +0 -1
- package/dist/src/events/item/syncDbWithEas.d.ts.map +0 -1
- package/dist/src/events/services/allItems.d.ts.map +0 -1
- package/dist/src/events/services/index.d.ts.map +0 -1
- package/dist/src/feed.d.ts.map +0 -1
- package/dist/src/graphql/fragments/Attestation.d.ts.map +0 -1
- package/dist/src/graphql/fragments/Schema.d.ts.map +0 -1
- package/dist/src/graphql/fragments/index.d.ts.map +0 -1
- package/dist/src/graphql/gql/fragment-masking.d.ts.map +0 -1
- package/dist/src/graphql/gql/gql.d.ts.map +0 -1
- package/dist/src/graphql/gql/graphql.d.ts.map +0 -1
- package/dist/src/graphql/gql/index.d.ts.map +0 -1
- package/dist/src/helpers/ArweaveClient/BaseArweaveClient.d.ts +0 -7
- package/dist/src/helpers/ArweaveClient/BaseArweaveClient.d.ts.map +0 -1
- package/dist/src/helpers/ArweaveClient/index.d.ts +0 -9
- package/dist/src/helpers/ArweaveClient/index.d.ts.map +0 -1
- package/dist/src/helpers/ArweaveClient/queries.d.ts +0 -6
- package/dist/src/helpers/ArweaveClient/queries.d.ts.map +0 -1
- package/dist/src/helpers/EasClient/BaseEasClient.d.ts +0 -10
- package/dist/src/helpers/EasClient/BaseEasClient.d.ts.map +0 -1
- package/dist/src/helpers/FileManager/BaseFileManager.d.ts.map +0 -1
- package/dist/src/helpers/PathResolver/BasePathResolver.d.ts.map +0 -1
- package/dist/src/helpers/QueryClient/BaseQueryClient.d.ts.map +0 -1
- package/dist/src/helpers/constants.d.ts +0 -58
- package/dist/src/helpers/constants.d.ts.map +0 -1
- package/dist/src/helpers/crypto.d.ts.map +0 -1
- package/dist/src/helpers/db.d.ts.map +0 -1
- package/dist/src/helpers/environment.d.ts.map +0 -1
- package/dist/src/helpers/file/download/actors.d.ts +0 -3
- package/dist/src/helpers/file/download/actors.d.ts.map +0 -1
- package/dist/src/helpers/file/download/index.d.ts +0 -2
- package/dist/src/helpers/file/download/index.d.ts.map +0 -1
- package/dist/src/helpers/file/fetchAll/actors.d.ts +0 -3
- package/dist/src/helpers/file/fetchAll/actors.d.ts.map +0 -1
- package/dist/src/helpers/file/fetchAll/index.d.ts +0 -2
- package/dist/src/helpers/file/fetchAll/index.d.ts.map +0 -1
- package/dist/src/helpers/file/queries.d.ts.map +0 -1
- package/dist/src/helpers/files.d.ts.map +0 -1
- package/dist/src/helpers/getSchemaForItemProperty.d.ts.map +0 -1
- package/dist/src/helpers/getSegmentedItemProperties.d.ts +0 -10
- package/dist/src/helpers/getSegmentedItemProperties.d.ts.map +0 -1
- package/dist/src/helpers/image/queries.d.ts.map +0 -1
- package/dist/src/helpers/index.d.ts +0 -27
- package/dist/src/helpers/index.d.ts.map +0 -1
- package/dist/src/helpers/model.d.ts.map +0 -1
- package/dist/src/helpers/property/index.d.ts.map +0 -1
- package/dist/src/helpers/property.d.ts.map +0 -1
- package/dist/src/helpers/reactiveProxy.d.ts.map +0 -1
- package/dist/src/helpers/schema.d.ts.map +0 -1
- package/dist/src/helpers/updateMachineContext.d.ts.map +0 -1
- package/dist/src/helpers/updateSchema.d.ts.map +0 -1
- package/dist/src/imports/index.d.ts +0 -3
- package/dist/src/imports/index.d.ts.map +0 -1
- package/dist/src/imports/json.d.ts.map +0 -1
- package/dist/src/imports/markdown.d.ts.map +0 -1
- package/dist/src/index.d.ts +0 -25
- package/dist/src/index.d.ts.map +0 -1
- package/dist/src/interfaces/IDb.d.ts.map +0 -1
- package/dist/src/interfaces/IEasClient.d.ts.map +0 -1
- package/dist/src/interfaces/IItem.d.ts.map +0 -1
- package/dist/src/interfaces/IItemProperty.d.ts +0 -32
- package/dist/src/interfaces/IItemProperty.d.ts.map +0 -1
- package/dist/src/interfaces/IQueryClient.d.ts.map +0 -1
- package/dist/src/interfaces/index.d.ts.map +0 -1
- package/dist/src/node/codegen/drizzle.d.ts.map +0 -1
- package/dist/src/node/codegen/index.d.ts.map +0 -1
- package/dist/src/node/codegen/ts-to-proto.d.ts.map +0 -1
- package/dist/src/node/constants.d.ts.map +0 -1
- package/dist/src/node/db/Db.d.ts.map +0 -1
- package/dist/src/node/db/index.d.ts.map +0 -1
- package/dist/src/node/db/node.app.db.config.d.ts.map +0 -1
- package/dist/src/node/helpers/ArweaveClient.d.ts +0 -7
- package/dist/src/node/helpers/ArweaveClient.d.ts.map +0 -1
- package/dist/src/node/helpers/EasClient.d.ts.map +0 -1
- package/dist/src/node/helpers/FileManager.d.ts.map +0 -1
- package/dist/src/node/helpers/PathResolver.d.ts.map +0 -1
- package/dist/src/node/helpers/QueryClient.d.ts.map +0 -1
- package/dist/src/node/helpers/index.d.ts.map +0 -1
- package/dist/src/node/helpers/scripts.d.ts.map +0 -1
- package/dist/src/node/index.d.ts +0 -25
- package/dist/src/node/index.d.ts.map +0 -1
- package/dist/src/node/seed.d.ts.map +0 -1
- package/dist/src/node/webpack/fs-proxy.d.ts.map +0 -1
- package/dist/src/node/webpack/index.d.ts.map +0 -1
- package/dist/src/seedSchema/AppStateSchema.d.ts.map +0 -1
- package/dist/src/seedSchema/ConfigSchema.d.ts.map +0 -1
- package/dist/src/seedSchema/MetadataSchema.d.ts.map +0 -1
- package/dist/src/seedSchema/ModelSchema.d.ts.map +0 -1
- package/dist/src/seedSchema/ModelSchemaSchema.d.ts.map +0 -1
- package/dist/src/seedSchema/ModelUidSchema.d.ts.map +0 -1
- package/dist/src/seedSchema/PropertyUidSchema.d.ts.map +0 -1
- package/dist/src/seedSchema/SchemaSchema.d.ts.map +0 -1
- package/dist/src/seedSchema/SeedSchema.d.ts.map +0 -1
- package/dist/src/seedSchema/VersionSchema.d.ts.map +0 -1
- package/dist/src/seedSchema/index.d.ts +0 -11
- package/dist/src/seedSchema/index.d.ts.map +0 -1
- package/dist/src/services/events.d.ts.map +0 -1
- package/dist/src/services/publish/actors/createPublishAttempt.d.ts.map +0 -1
- package/dist/src/services/publish/actors/preparePublishRequestData.d.ts.map +0 -1
- package/dist/src/services/publish/actors/upload.d.ts.map +0 -1
- package/dist/src/services/publish/actors/validateItemData.d.ts.map +0 -1
- package/dist/src/services/publish/publishMachine.d.ts.map +0 -1
- package/dist/src/services/write/actors/validateEntity.d.ts +0 -12
- package/dist/src/services/write/actors/validateEntity.d.ts.map +0 -1
- package/dist/src/services/write/actors/writeToDatabase.d.ts.map +0 -1
- package/dist/src/services/write/writeProcessMachine.d.ts +0 -84
- package/dist/src/services/write/writeProcessMachine.d.ts.map +0 -1
- package/dist/src/stores/eas.d.ts.map +0 -1
- package/dist/src/types/browser.d.ts.map +0 -1
- package/dist/src/types/db.d.ts.map +0 -1
- package/dist/src/types/fileManager.d.ts.map +0 -1
- package/dist/src/types/helpers.d.ts.map +0 -1
- package/dist/src/types/import.d.ts.map +0 -1
- package/dist/src/types/index.d.ts +0 -43
- package/dist/src/types/index.d.ts.map +0 -1
- package/dist/src/types/item.d.ts +0 -68
- package/dist/src/types/item.d.ts.map +0 -1
- package/dist/src/types/machines.d.ts.map +0 -1
- package/dist/src/types/model.d.ts.map +0 -1
- package/dist/src/types/property.d.ts.map +0 -1
- package/dist/src/types/seedProtocol.d.ts.map +0 -1
- package/dist/src/types/services.d.ts.map +0 -1
- package/dist/src/vite/index.d.ts +0 -47
- package/dist/src/vite/index.d.ts.map +0 -1
- package/dist/stores/eas.js +0 -23
- package/dist/stores/eas.js.map +0 -1
- package/dist/vite/index.js +0 -554
- package/dist/vite/index.js.map +0 -1
- /package/dist/{src/Item → Item}/queries.d.ts +0 -0
- /package/dist/{src/Item → Item}/service/actors/hydrateExistingItem.d.ts +0 -0
- /package/dist/{src/Item → Item}/service/actors/hydrateNewItem.d.ts +0 -0
- /package/dist/{src/Item → Item}/service/actors/initialize.d.ts +0 -0
- /package/dist/{src/Item → Item}/service/actors/loadOrCreateItem.d.ts +0 -0
- /package/dist/{src/Item → Item}/service/actors/reload.d.ts +0 -0
- /package/dist/{src/Item → Item}/service/actors/waitForDb.d.ts +0 -0
- /package/dist/{src/ItemProperty → ItemProperty}/service/actors/hydrateFromDb.d.ts +0 -0
- /package/dist/{src/ItemProperty → ItemProperty}/service/actors/initialize.d.ts +0 -0
- /package/dist/{src/ItemProperty → ItemProperty}/service/actors/loadOrCreateProperty.d.ts +0 -0
- /package/dist/{src/ItemProperty → ItemProperty}/service/actors/resolveRelatedValue.d.ts +0 -0
- /package/dist/{src/ItemProperty → ItemProperty}/service/actors/resolveRemoteStorage.d.ts +0 -0
- /package/dist/{src/ItemProperty → ItemProperty}/service/actors/saveValueToDb/analyzeInput.d.ts +0 -0
- /package/dist/{src/ItemProperty → ItemProperty}/service/actors/saveValueToDb/index.d.ts +0 -0
- /package/dist/{src/ItemProperty → ItemProperty}/service/actors/saveValueToDb/saveImage.d.ts +0 -0
- /package/dist/{src/ItemProperty → ItemProperty}/service/actors/saveValueToDb/saveItemStorage.d.ts +0 -0
- /package/dist/{src/ItemProperty → ItemProperty}/service/actors/saveValueToDb/saveRelation.d.ts +0 -0
- /package/dist/{src/ItemProperty → ItemProperty}/service/actors/waitForDb.d.ts +0 -0
- /package/dist/{src/Model → Model}/service/actors/createModelProperties.d.ts +0 -0
- /package/dist/{src/Model → Model}/service/actors/loadOrCreateModel.d.ts +0 -0
- /package/dist/{src/Model → Model}/service/actors/validateModel.d.ts +0 -0
- /package/dist/{src/ModelProperty → ModelProperty}/service/actors/compareAndMarkDraft.d.ts +0 -0
- /package/dist/{src/ModelProperty → ModelProperty}/service/actors/saveToSchema.d.ts +0 -0
- /package/dist/{src/ModelProperty → ModelProperty}/service/actors/validateProperty.d.ts +0 -0
- /package/dist/{src/Schema → Schema}/errors.d.ts +0 -0
- /package/dist/{src/Schema → Schema}/index.d.ts +0 -0
- /package/dist/{src/Schema → Schema}/service/actors/checkExistingSchema.d.ts +0 -0
- /package/dist/{src/Schema → Schema}/service/actors/createModelInstances.d.ts +0 -0
- /package/dist/{src/Schema → Schema}/service/actors/createPropertyInstances.d.ts +0 -0
- /package/dist/{src/Schema → Schema}/service/actors/loadOrCreateSchema.d.ts +0 -0
- /package/dist/{src/Schema → Schema}/service/actors/validateSchema.d.ts +0 -0
- /package/dist/{src/Schema → Schema}/service/actors/verifyModelInstancesInCache.d.ts +0 -0
- /package/dist/{src/Schema → Schema}/service/actors/verifyModelsInDb.d.ts +0 -0
- /package/dist/{src/Schema → Schema}/service/actors/verifyPropertiesInDb.d.ts +0 -0
- /package/dist/{src/Schema → Schema}/service/actors/verifyPropertyInstancesInCache.d.ts +0 -0
- /package/dist/{src/Schema → Schema}/service/actors/verifySchemaInDb.d.ts +0 -0
- /package/dist/{src/Schema → Schema}/service/actors/writeModelsToDb.d.ts +0 -0
- /package/dist/{src/Schema → Schema}/service/actors/writePropertiesToDb.d.ts +0 -0
- /package/dist/{src/Schema → Schema}/service/actors/writeSchemaToDb.d.ts +0 -0
- /package/dist/{src/Schema → Schema}/service/validation/SchemaValidationService.d.ts +0 -0
- /package/dist/{src/Schema → Schema}/validation.d.ts +0 -0
- /package/dist/{src/browser → browser}/db/Db.d.ts +0 -0
- /package/dist/{src/browser → browser}/db/drizzleFiles.d.ts +0 -0
- /package/dist/{src/browser → browser}/db/sqlWasmClient.d.ts +0 -0
- /package/dist/{src/browser → browser}/helpers/EasClient.d.ts +0 -0
- /package/dist/{src/browser → browser}/helpers/FileManager.d.ts +0 -0
- /package/dist/{src/browser → browser}/helpers/PathResolver.d.ts +0 -0
- /package/dist/{src/browser → browser}/helpers/QueryClient.d.ts +0 -0
- /package/dist/{src/browser → browser}/react/OPFSImage.d.ts +0 -0
- /package/dist/{src/browser → browser}/react/SeedImage.d.ts +0 -0
- /package/dist/{src/browser → browser}/react/client.d.ts +0 -0
- /package/dist/{src/browser → browser}/react/db.d.ts +0 -0
- /package/dist/{src/browser → browser}/react/index.d.ts +0 -0
- /package/dist/{src/browser → browser}/react/itemProperty.d.ts +0 -0
- /package/dist/{src/browser → browser}/react/liveQuery.d.ts +0 -0
- /package/dist/{src/browser → browser}/react/model.d.ts +0 -0
- /package/dist/{src/browser → browser}/react/modelProperty.d.ts +0 -0
- /package/dist/{src/browser → browser}/react/schema.d.ts +0 -0
- /package/dist/{src/browser → browser}/react/services.d.ts +0 -0
- /package/dist/{src/browser → browser}/workers/FileDownloader.d.ts +0 -0
- /package/dist/{src/browser → browser}/workers/ImageResizer.d.ts +0 -0
- /package/dist/{src/browser → browser}/workers/content-hash.d.ts +0 -0
- /package/dist/{src/browser → browser}/workers/dbWorker.d.ts +0 -0
- /package/dist/{src/browser → browser}/workers/filesDownload.d.ts +0 -0
- /package/dist/{src/browser → browser}/workers/imageResize.d.ts +0 -0
- /package/dist/{src/client → client}/BaseClientManager.d.ts +0 -0
- /package/dist/{src/client → client}/ClientManager.d.ts +0 -0
- /package/dist/{src/client → client}/actions/setAddresses.d.ts +0 -0
- /package/dist/{src/client → client}/actors/addModelsToDb.d.ts +0 -0
- /package/dist/{src/client → client}/actors/addModelsToStore.d.ts +0 -0
- /package/dist/{src/client → client}/actors/dbInit.d.ts +0 -0
- /package/dist/{src/client → client}/actors/fileSystemInit.d.ts +0 -0
- /package/dist/{src/client → client}/actors/platformClassesInit.d.ts +0 -0
- /package/dist/{src/client → client}/actors/processSchemaFiles.d.ts +0 -0
- /package/dist/{src/client → client}/actors/saveAppState.d.ts +0 -0
- /package/dist/{src/client → client}/actors/saveConfig.d.ts +0 -0
- /package/dist/{src/client → client}/clientManagerMachine.d.ts +0 -0
- /package/dist/{src/client → client}/index.d.ts +0 -0
- /package/dist/{src/db → db}/configs/dev.schema.config.d.ts +0 -0
- /package/dist/{src/db → db}/read/getItem.d.ts +0 -0
- /package/dist/{src/db → db}/read/getItemData.d.ts +0 -0
- /package/dist/{src/db → db}/read/getItemProperties.d.ts +0 -0
- /package/dist/{src/db → db}/read/getItemProperty.d.ts +0 -0
- /package/dist/{src/db → db}/read/getItems.d.ts +0 -0
- /package/dist/{src/db → db}/read/getMetadata.d.ts +0 -0
- /package/dist/{src/db → db}/read/getModelSchemas.d.ts +0 -0
- /package/dist/{src/db → db}/read/getModels.d.ts +0 -0
- /package/dist/{src/db → db}/read/getPropertyData.d.ts +0 -0
- /package/dist/{src/db → db}/read/getPublishPayload.d.ts +0 -0
- /package/dist/{src/db → db}/read/getRelationValueData.d.ts +0 -0
- /package/dist/{src/db → db}/read/getSchemaUidForModel.d.ts +0 -0
- /package/dist/{src/db → db}/read/getSeedData.d.ts +0 -0
- /package/dist/{src/db → db}/read/getStorageTransactionIdForSeedUid.d.ts +0 -0
- /package/dist/{src/db → db}/read/getVersionData.d.ts +0 -0
- /package/dist/{src/db → db}/read/getVersionsForVersionUids.d.ts +0 -0
- /package/dist/{src/db → db}/read/subqueries/metadataLatest.d.ts +0 -0
- /package/dist/{src/db → db}/read/subqueries/versionData.d.ts +0 -0
- /package/dist/{src/db → db}/write/createMetadata.d.ts +0 -0
- /package/dist/{src/db → db}/write/createNewItem.d.ts +0 -0
- /package/dist/{src/db → db}/write/createSeed.d.ts +0 -0
- /package/dist/{src/db → db}/write/createSeeds.d.ts +0 -0
- /package/dist/{src/db → db}/write/createVersion.d.ts +0 -0
- /package/dist/{src/db → db}/write/deleteItem.d.ts +0 -0
- /package/dist/{src/db → db}/write/recoverDeletedItem.d.ts +0 -0
- /package/dist/{src/db → db}/write/saveAppState.d.ts +0 -0
- /package/dist/{src/db → db}/write/saveMetadata.d.ts +0 -0
- /package/dist/{src/db → db}/write/updateMetadata.d.ts +0 -0
- /package/dist/{src/eas.d.ts → eas.d.ts} +0 -0
- /package/dist/{src/eslint-rules → eslint-rules}/align-imports.d.ts +0 -0
- /package/dist/{src/eventBus.d.ts → eventBus.d.ts} +0 -0
- /package/dist/{src/events → events}/files/index.d.ts +0 -0
- /package/dist/{src/events → events}/index.d.ts +0 -0
- /package/dist/{src/events → events}/item/publish.d.ts +0 -0
- /package/dist/{src/events → events}/item/syncDbWithEas.d.ts +0 -0
- /package/dist/{src/events → events}/services/allItems.d.ts +0 -0
- /package/dist/{src/events → events}/services/index.d.ts +0 -0
- /package/dist/{src/feed.d.ts → feed.d.ts} +0 -0
- /package/dist/{src/graphql → graphql}/fragments/Attestation.d.ts +0 -0
- /package/dist/{src/graphql → graphql}/fragments/Schema.d.ts +0 -0
- /package/dist/{src/graphql → graphql}/fragments/index.d.ts +0 -0
- /package/dist/{src/graphql → graphql}/gql/fragment-masking.d.ts +0 -0
- /package/dist/{src/graphql → graphql}/gql/gql.d.ts +0 -0
- /package/dist/{src/graphql → graphql}/gql/graphql.d.ts +0 -0
- /package/dist/{src/graphql → graphql}/gql/index.d.ts +0 -0
- /package/dist/{src/helpers → helpers}/FileManager/BaseFileManager.d.ts +0 -0
- /package/dist/{src/helpers → helpers}/PathResolver/BasePathResolver.d.ts +0 -0
- /package/dist/{src/helpers → helpers}/QueryClient/BaseQueryClient.d.ts +0 -0
- /package/dist/{src/helpers → helpers}/crypto.d.ts +0 -0
- /package/dist/{src/helpers → helpers}/db.d.ts +0 -0
- /package/dist/{src/helpers → helpers}/environment.d.ts +0 -0
- /package/dist/{src/helpers → helpers}/file/queries.d.ts +0 -0
- /package/dist/{src/helpers → helpers}/files.d.ts +0 -0
- /package/dist/{src/helpers → helpers}/getSchemaForItemProperty.d.ts +0 -0
- /package/dist/{src/helpers → helpers}/image/queries.d.ts +0 -0
- /package/dist/{src/helpers → helpers}/model.d.ts +0 -0
- /package/dist/{src/helpers → helpers}/property/index.d.ts +0 -0
- /package/dist/{src/helpers → helpers}/property.d.ts +0 -0
- /package/dist/{src/helpers → helpers}/reactiveProxy.d.ts +0 -0
- /package/dist/{src/helpers → helpers}/schema.d.ts +0 -0
- /package/dist/{src/helpers → helpers}/updateMachineContext.d.ts +0 -0
- /package/dist/{src/helpers → helpers}/updateSchema.d.ts +0 -0
- /package/dist/{src/imports → imports}/json.d.ts +0 -0
- /package/dist/{src/imports → imports}/markdown.d.ts +0 -0
- /package/dist/{src/interfaces → interfaces}/IDb.d.ts +0 -0
- /package/dist/{src/interfaces → interfaces}/IEasClient.d.ts +0 -0
- /package/dist/{src/interfaces → interfaces}/IItem.d.ts +0 -0
- /package/dist/{src/interfaces → interfaces}/IQueryClient.d.ts +0 -0
- /package/dist/{src/interfaces → interfaces}/index.d.ts +0 -0
- /package/dist/{src/node → node}/codegen/drizzle.d.ts +0 -0
- /package/dist/{src/node → node}/codegen/index.d.ts +0 -0
- /package/dist/{src/node → node}/codegen/ts-to-proto.d.ts +0 -0
- /package/dist/{src/node → node}/constants.d.ts +0 -0
- /package/dist/{src/node → node}/db/Db.d.ts +0 -0
- /package/dist/{src/node → node}/db/index.d.ts +0 -0
- /package/dist/{src/node → node}/db/node.app.db.config.d.ts +0 -0
- /package/dist/{src/node → node}/helpers/EasClient.d.ts +0 -0
- /package/dist/{src/node → node}/helpers/FileManager.d.ts +0 -0
- /package/dist/{src/node → node}/helpers/PathResolver.d.ts +0 -0
- /package/dist/{src/node → node}/helpers/QueryClient.d.ts +0 -0
- /package/dist/{src/node → node}/helpers/index.d.ts +0 -0
- /package/dist/{src/node → node}/helpers/scripts.d.ts +0 -0
- /package/dist/{src/node → node}/seed.d.ts +0 -0
- /package/dist/{src/node → node}/webpack/fs-proxy.d.ts +0 -0
- /package/dist/{src/node → node}/webpack/index.d.ts +0 -0
- /package/dist/{src/seedSchema → seedSchema}/AppStateSchema.d.ts +0 -0
- /package/dist/{src/seedSchema → seedSchema}/ConfigSchema.d.ts +0 -0
- /package/dist/{src/seedSchema → seedSchema}/MetadataSchema.d.ts +0 -0
- /package/dist/{src/seedSchema → seedSchema}/ModelSchema.d.ts +0 -0
- /package/dist/{src/seedSchema → seedSchema}/ModelSchemaSchema.d.ts +0 -0
- /package/dist/{src/seedSchema → seedSchema}/ModelUidSchema.d.ts +0 -0
- /package/dist/{src/seedSchema → seedSchema}/PropertyUidSchema.d.ts +0 -0
- /package/dist/{src/seedSchema → seedSchema}/SchemaSchema.d.ts +0 -0
- /package/dist/{src/seedSchema → seedSchema}/SeedSchema.d.ts +0 -0
- /package/dist/{src/seedSchema → seedSchema}/VersionSchema.d.ts +0 -0
- /package/dist/{src/services → services}/events.d.ts +0 -0
- /package/dist/{src/services → services}/publish/actors/createPublishAttempt.d.ts +0 -0
- /package/dist/{src/services → services}/publish/actors/preparePublishRequestData.d.ts +0 -0
- /package/dist/{src/services → services}/publish/actors/upload.d.ts +0 -0
- /package/dist/{src/services → services}/publish/actors/validateItemData.d.ts +0 -0
- /package/dist/{src/services → services}/publish/publishMachine.d.ts +0 -0
- /package/dist/{src/services → services}/write/actors/writeToDatabase.d.ts +0 -0
- /package/dist/{src/stores → stores}/eas.d.ts +0 -0
- /package/dist/{src/types → types}/browser.d.ts +0 -0
- /package/dist/{src/types → types}/db.d.ts +0 -0
- /package/dist/{src/types → types}/fileManager.d.ts +0 -0
- /package/dist/{src/types → types}/helpers.d.ts +0 -0
- /package/dist/{src/types → types}/import.d.ts +0 -0
- /package/dist/{src/types → types}/machines.d.ts +0 -0
- /package/dist/{src/types → types}/model.d.ts +0 -0
- /package/dist/{src/types → types}/property.d.ts +0 -0
- /package/dist/{src/types → types}/seedProtocol.d.ts +0 -0
- /package/dist/{src/types → types}/services.d.ts +0 -0
package/dist/main.js
CHANGED
|
@@ -1,36 +1,2719 @@
|
|
|
1
1
|
import 'reflect-metadata';
|
|
2
|
-
import './
|
|
3
|
-
export { ModelPropertyDataTypes } from './
|
|
4
|
-
|
|
5
|
-
import './
|
|
6
|
-
export {
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
import '
|
|
14
|
-
import './browser/react/db.js';
|
|
15
|
-
export { useAllSchemaVersions, useCreateSchema, useSchema, useSchemas } from './browser/react/schema.js';
|
|
16
|
-
export { useModelProperties, useModelProperty } from './browser/react/modelProperty.js';
|
|
17
|
-
export { useDeleteItem } from './browser/react/trash.js';
|
|
18
|
-
export { useModel, useModels } from './browser/react/model.js';
|
|
19
|
-
import 'react';
|
|
20
|
-
import './client/constants.js';
|
|
21
|
-
export { ClientManager as client } from './client/ClientManager.js';
|
|
22
|
-
import '@xstate/react';
|
|
23
|
-
export { getArweaveUrlForTransaction } from './helpers/index.js';
|
|
24
|
-
export { getItemPropertiesFromEas, getItemVersionsFromEas, getModelSchemasFromEas, getSchemaUidBySchemaName, getSeedsBySchemaName, getSeedsFromSchemaUids } from './eas.js';
|
|
25
|
-
export { SeedModels } from './helpers/constants.js';
|
|
26
|
-
export { getFeedItemsBySchemaName } from './feed.js';
|
|
27
|
-
export { createSchema, getSchemaNameFromId, listCompleteSchemaFiles as listSchemas, readSchema } from './helpers/schema.js';
|
|
28
|
-
export { deleteModelFromSchema, deletePropertyFromModel, renameModelProperty, updateModelProperties } from './helpers/updateSchema.js';
|
|
2
|
+
import { ai as getClient, aj as ClientManagerState, p as BaseDb, X as seeds, ak as getVersionData, a0 as Item, al as createNewItem, C as metadata, a4 as ItemProperty, W as schemas, am as loadAllSchemasFromDb, q as models, G as modelSchemas, M as Model, r as properties, x as BaseEasClient, an as getSeedsBySchemaName, ao as GET_SEEDS, ap as getItemVersionsFromEas, aq as getItemPropertiesFromEas, z as BaseArweaveClient, ar as setSchemaUidForSchemaDefinition, as as parseEasRelationPropertyName } from './json-I3vJhXo8.js';
|
|
3
|
+
export { s as FileManager, a as ModelPropertyDataTypes, aw as SeedModels, a6 as client, ay as createSchema, ax as getArweaveUrlForTransaction, at as getModelSchemasFromEas, aB as getSchemaNameFromId, au as getSchemaUidBySchemaName, av as getSeedsFromSchemaUids, a9 as importJsonSchema, aA as listSchemas, ab as readJsonImportFile, az as readSchema, ac as transformImportToSchemaFile } from './json-I3vJhXo8.js';
|
|
4
|
+
import { g as getPropertySchema } from './property-Dy09KTxg.js';
|
|
5
|
+
import { M as ModelProperty } from './ModelProperty-Cr3BmgkC.js';
|
|
6
|
+
export { a as deleteModelFromSchema, d as deletePropertyFromModel, r as renameModelProperty, u as updateModelProperties } from './ModelProperty-Cr3BmgkC.js';
|
|
7
|
+
import { Schema } from './Schema-DeKabJ0T.js';
|
|
8
|
+
import { useState, useRef, useMemo, useEffect, useCallback } from 'react';
|
|
9
|
+
import { orderBy, startCase } from 'lodash-es';
|
|
10
|
+
import debug from 'debug';
|
|
11
|
+
import { useSelector } from '@xstate/react';
|
|
12
|
+
import { eq, or, isNotNull, isNull, and, gt, desc } from 'drizzle-orm';
|
|
13
|
+
import 'pluralize';
|
|
29
14
|
import 'js-yaml';
|
|
30
15
|
import 'fs';
|
|
31
|
-
import '
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
16
|
+
import 'xstate';
|
|
17
|
+
import 'rxjs';
|
|
18
|
+
import 'drizzle-orm/casing';
|
|
19
|
+
import '@sinclair/typebox';
|
|
20
|
+
import 'arweave';
|
|
21
|
+
import 'eventemitter3';
|
|
22
|
+
import 'drizzle-orm/sqlite-core';
|
|
23
|
+
import 'ethers';
|
|
24
|
+
import 'nanoid';
|
|
25
|
+
import 'nanoid-dictionary';
|
|
26
|
+
import './SchemaValidationService-cTlURuDt.js';
|
|
27
|
+
import '@sinclair/typebox/value';
|
|
28
|
+
|
|
29
|
+
const useIsClientReady = () => {
|
|
30
|
+
const client = getClient();
|
|
31
|
+
const clientService = client.getService();
|
|
32
|
+
const isClientReady = useSelector(clientService, (snapshot) => {
|
|
33
|
+
return snapshot.value === ClientManagerState.IDLE;
|
|
34
|
+
});
|
|
35
|
+
// GlobalState removed - check ClientManager state directly
|
|
36
|
+
return isClientReady;
|
|
37
|
+
};
|
|
38
|
+
|
|
39
|
+
/**
|
|
40
|
+
* Hook to execute a reactive query that emits new results whenever the underlying data changes.
|
|
41
|
+
*
|
|
42
|
+
* Supports two usage patterns:
|
|
43
|
+
* 1. SQL tag function: useLiveQuery((sql) => sql`SELECT * FROM models`)
|
|
44
|
+
* 2. Drizzle query builder: useLiveQuery(db.select().from(models))
|
|
45
|
+
*
|
|
46
|
+
* @param query - SQL query function or Drizzle query builder, or null/undefined to disable the query
|
|
47
|
+
* @returns Array of query results, or undefined if not yet loaded
|
|
48
|
+
*
|
|
49
|
+
* @example
|
|
50
|
+
* ```typescript
|
|
51
|
+
* // Using SQL tag function
|
|
52
|
+
* const models = useLiveQuery<ModelRow>(
|
|
53
|
+
* (sql) => sql`SELECT * FROM models WHERE schema_file_id = ${schemaId}`
|
|
54
|
+
* )
|
|
55
|
+
*
|
|
56
|
+
* // Using Drizzle query builder
|
|
57
|
+
* import { models } from '@/seedSchema'
|
|
58
|
+
* import { eq } from 'drizzle-orm'
|
|
59
|
+
*
|
|
60
|
+
* const appDb = BaseDb.getAppDb()
|
|
61
|
+
* const models = useLiveQuery<ModelRow>(
|
|
62
|
+
* appDb.select().from(models).where(eq(models.schemaFileId, schemaId))
|
|
63
|
+
* )
|
|
64
|
+
* ```
|
|
65
|
+
*/
|
|
66
|
+
function useLiveQuery(query) {
|
|
67
|
+
const [data, setData] = useState(undefined);
|
|
68
|
+
const subscriptionRef = useRef(null);
|
|
69
|
+
const previousDataRef = useRef(undefined);
|
|
70
|
+
const isClientReady = useIsClientReady();
|
|
71
|
+
// Create Observable outside useEffect so it's stable and distinctUntilChanged can work
|
|
72
|
+
// Only recreate when query or isClientReady changes
|
|
73
|
+
const observable = useMemo(() => {
|
|
74
|
+
if (!isClientReady || !query) {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
try {
|
|
78
|
+
return BaseDb.liveQuery(query);
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
console.error('[useLiveQuery] Failed to create live query:', error);
|
|
82
|
+
return null;
|
|
83
|
+
}
|
|
84
|
+
}, [query, isClientReady]);
|
|
85
|
+
useEffect(() => {
|
|
86
|
+
// Cleanup previous subscription if it exists
|
|
87
|
+
if (subscriptionRef.current) {
|
|
88
|
+
subscriptionRef.current.unsubscribe();
|
|
89
|
+
subscriptionRef.current = null;
|
|
90
|
+
}
|
|
91
|
+
// Don't subscribe if observable is null
|
|
92
|
+
if (!observable) {
|
|
93
|
+
return;
|
|
94
|
+
}
|
|
95
|
+
const subscription = observable.subscribe({
|
|
96
|
+
next: (results) => {
|
|
97
|
+
const prev = previousDataRef.current;
|
|
98
|
+
const prevJson = prev ? JSON.stringify(prev) : 'undefined';
|
|
99
|
+
const currJson = results ? JSON.stringify(results) : 'undefined';
|
|
100
|
+
const isSameValue = prevJson === currJson;
|
|
101
|
+
// Defensive check: don't update state if values are the same
|
|
102
|
+
// This should be handled by distinctUntilChanged, but adding as safety
|
|
103
|
+
// (especially important for Drizzle query builders which may not work with distinctUntilChanged)
|
|
104
|
+
if (isSameValue && prev !== undefined) {
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
previousDataRef.current = results;
|
|
108
|
+
setData(results);
|
|
109
|
+
},
|
|
110
|
+
error: (err) => {
|
|
111
|
+
console.error('[useLiveQuery] Error:', err);
|
|
112
|
+
// Don't set data to undefined on error - keep last known good state
|
|
113
|
+
// This prevents UI flickering on transient errors
|
|
114
|
+
},
|
|
115
|
+
});
|
|
116
|
+
subscriptionRef.current = subscription;
|
|
117
|
+
// Cleanup on unmount or observable change
|
|
118
|
+
return () => {
|
|
119
|
+
if (subscriptionRef.current) {
|
|
120
|
+
subscriptionRef.current.unsubscribe();
|
|
121
|
+
subscriptionRef.current = null;
|
|
122
|
+
}
|
|
123
|
+
};
|
|
124
|
+
}, [observable]); // Only re-subscribe when observable changes
|
|
125
|
+
return data;
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
const logger$2 = debug('seedSdk:react:item');
|
|
129
|
+
const useItem = ({ modelName, seedLocalId, seedUid }) => {
|
|
130
|
+
const [item, setItem] = useState();
|
|
131
|
+
const [isLoading, setIsLoading] = useState(!!(seedLocalId || seedUid));
|
|
132
|
+
const [error, setError] = useState(null);
|
|
133
|
+
const subscriptionRef = useRef(undefined);
|
|
134
|
+
const isClientReady = useIsClientReady();
|
|
135
|
+
const modelNameRef = useRef(modelName);
|
|
136
|
+
const seedLocalIdRef = useRef(seedLocalId);
|
|
137
|
+
const seedUidRef = useRef(seedUid);
|
|
138
|
+
// Determine if we should be loading based on parameters - use useMemo to stabilize
|
|
139
|
+
// Use refs to check current values to avoid dependency issues
|
|
140
|
+
const shouldLoad = useMemo(() => {
|
|
141
|
+
if (!isClientReady)
|
|
142
|
+
return false;
|
|
143
|
+
return !!(seedLocalIdRef.current || seedUidRef.current);
|
|
144
|
+
}, [isClientReady, seedLocalId, seedUid]);
|
|
145
|
+
const loadItem = useCallback(async () => {
|
|
146
|
+
// Check shouldLoad inside the function to avoid recreating the callback
|
|
147
|
+
const currentShouldLoad = !!(isClientReady && (seedLocalIdRef.current || seedUidRef.current));
|
|
148
|
+
if (!currentShouldLoad) {
|
|
149
|
+
setItem(undefined);
|
|
150
|
+
setIsLoading(false);
|
|
151
|
+
setError(null);
|
|
152
|
+
return;
|
|
153
|
+
}
|
|
154
|
+
try {
|
|
155
|
+
// Don't set isLoading here - let the subscription effect handle it
|
|
156
|
+
// This avoids race conditions where isLoading is set to true but then
|
|
157
|
+
// the subscription effect hasn't run yet to set it to false
|
|
158
|
+
setError(null);
|
|
159
|
+
const foundItem = await Item.find({
|
|
160
|
+
modelName: modelNameRef.current,
|
|
161
|
+
seedLocalId: seedLocalIdRef.current,
|
|
162
|
+
seedUid: seedUidRef.current,
|
|
163
|
+
});
|
|
164
|
+
if (!foundItem) {
|
|
165
|
+
logger$2('[useItem] [loadItem] no item found', modelNameRef.current, seedLocalIdRef.current);
|
|
166
|
+
setItem(undefined);
|
|
167
|
+
setIsLoading(false);
|
|
168
|
+
setError(null);
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
// Item.find() now waits for idle by default, so the item should be ready
|
|
172
|
+
setItem(foundItem);
|
|
173
|
+
setIsLoading(false); // Item is ready since find() waited for idle
|
|
174
|
+
setError(null);
|
|
175
|
+
}
|
|
176
|
+
catch (error) {
|
|
177
|
+
logger$2('[useItem] Error loading item:', error);
|
|
178
|
+
setItem(undefined);
|
|
179
|
+
setIsLoading(false);
|
|
180
|
+
setError(error);
|
|
181
|
+
}
|
|
182
|
+
}, [isClientReady]);
|
|
183
|
+
useEffect(() => {
|
|
184
|
+
modelNameRef.current = modelName;
|
|
185
|
+
seedLocalIdRef.current = seedLocalId;
|
|
186
|
+
seedUidRef.current = seedUid;
|
|
187
|
+
}, [modelName, seedLocalId, seedUid]);
|
|
188
|
+
// Fetch/refetch when parameters change or client becomes ready
|
|
189
|
+
useEffect(() => {
|
|
190
|
+
// Only clear item if we don't have parameters to load
|
|
191
|
+
// Don't clear if shouldLoad is false but we have an item - it might just be a timing issue
|
|
192
|
+
if (!shouldLoad) {
|
|
193
|
+
// Only clear if we actually don't have parameters (not just client not ready)
|
|
194
|
+
if (!seedLocalId && !seedUid) {
|
|
195
|
+
setItem(undefined);
|
|
196
|
+
setIsLoading(false);
|
|
197
|
+
setError(null);
|
|
198
|
+
}
|
|
199
|
+
return;
|
|
200
|
+
}
|
|
201
|
+
loadItem();
|
|
202
|
+
}, [shouldLoad, loadItem, seedLocalId, seedUid]);
|
|
203
|
+
// Subscribe to service changes when item is available
|
|
204
|
+
useEffect(() => {
|
|
205
|
+
if (!item) {
|
|
206
|
+
// Clean up subscription if item is not available
|
|
207
|
+
subscriptionRef.current?.unsubscribe();
|
|
208
|
+
subscriptionRef.current = undefined;
|
|
209
|
+
return;
|
|
210
|
+
}
|
|
211
|
+
// Clean up previous subscription
|
|
212
|
+
subscriptionRef.current?.unsubscribe();
|
|
213
|
+
// Subscribe to service changes
|
|
214
|
+
// Don't set isLoading here - it's already set correctly in loadItem
|
|
215
|
+
// Just subscribe to future state changes
|
|
216
|
+
const service = item.getService();
|
|
217
|
+
const subscription = service.subscribe((snapshot) => {
|
|
218
|
+
// Update loading state based on service state changes
|
|
219
|
+
if (snapshot && typeof snapshot === 'object' && 'value' in snapshot) {
|
|
220
|
+
const isIdle = snapshot.value === 'idle';
|
|
221
|
+
setIsLoading(!isIdle);
|
|
222
|
+
// Clear error if service is in idle state
|
|
223
|
+
if (isIdle) {
|
|
224
|
+
setError(null);
|
|
225
|
+
}
|
|
226
|
+
else if (snapshot.value === 'error') {
|
|
227
|
+
// Set error if service is in error state
|
|
228
|
+
setError(new Error('Item service error'));
|
|
229
|
+
}
|
|
230
|
+
}
|
|
231
|
+
});
|
|
232
|
+
subscriptionRef.current = subscription;
|
|
233
|
+
return () => {
|
|
234
|
+
subscriptionRef.current?.unsubscribe();
|
|
235
|
+
subscriptionRef.current = undefined;
|
|
236
|
+
};
|
|
237
|
+
}, [item]);
|
|
238
|
+
return {
|
|
239
|
+
item,
|
|
240
|
+
isLoading,
|
|
241
|
+
error,
|
|
242
|
+
};
|
|
243
|
+
};
|
|
244
|
+
const useItems = ({ modelName, deleted = false }) => {
|
|
245
|
+
const [items, setItems] = useState([]);
|
|
246
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
247
|
+
const [error, setError] = useState(null);
|
|
248
|
+
const isClientReady = useIsClientReady();
|
|
249
|
+
const subscriptionsRef = useRef(new Map());
|
|
250
|
+
const loadingItemsRef = useRef(new Set());
|
|
251
|
+
const previousSeedsTableDataRef = useRef(undefined);
|
|
252
|
+
const itemsRef = useRef([]); // Track items for comparison without triggering effects
|
|
253
|
+
// Watch the seeds table for changes
|
|
254
|
+
// Memoize the query so it's stable across renders - this is critical for distinctUntilChanged to work
|
|
255
|
+
// IMPORTANT: This query must match the logic in getItemsData() to ensure seedsTableData
|
|
256
|
+
// only includes seeds that Item.all() will return (i.e., seeds with versionsCount > 0)
|
|
257
|
+
const db = isClientReady ? BaseDb.getAppDb() : null;
|
|
258
|
+
const seedsQuery = useMemo(() => {
|
|
259
|
+
if (!db)
|
|
260
|
+
return null;
|
|
261
|
+
const conditions = [];
|
|
262
|
+
if (modelName) {
|
|
263
|
+
conditions.push(eq(seeds.type, modelName.toLowerCase()));
|
|
264
|
+
}
|
|
265
|
+
if (deleted) {
|
|
266
|
+
conditions.push(or(isNotNull(seeds._markedForDeletion), eq(seeds._markedForDeletion, 1)));
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
conditions.push(or(isNull(seeds._markedForDeletion), eq(seeds._markedForDeletion, 0)));
|
|
270
|
+
}
|
|
271
|
+
// Join with versionData and filter by versionsCount > 0 to match getItemsData() logic
|
|
272
|
+
// This ensures we only watch seeds that have at least one version
|
|
273
|
+
const versionData = getVersionData();
|
|
274
|
+
return db
|
|
275
|
+
.with(versionData)
|
|
276
|
+
.select({
|
|
277
|
+
localId: seeds.localId,
|
|
278
|
+
uid: seeds.uid,
|
|
279
|
+
type: seeds.type,
|
|
280
|
+
schemaUid: seeds.schemaUid,
|
|
281
|
+
createdAt: seeds.createdAt,
|
|
282
|
+
attestationCreatedAt: seeds.attestationCreatedAt,
|
|
283
|
+
_markedForDeletion: seeds._markedForDeletion,
|
|
284
|
+
})
|
|
285
|
+
.from(seeds)
|
|
286
|
+
.leftJoin(versionData, eq(seeds.localId, versionData.seedLocalId))
|
|
287
|
+
.where(and(gt(versionData.versionsCount, 0), ...conditions))
|
|
288
|
+
.groupBy(seeds.localId);
|
|
289
|
+
}, [db, isClientReady, modelName, deleted]);
|
|
290
|
+
const seedsTableData = useLiveQuery(seedsQuery);
|
|
291
|
+
const fetchItems = useCallback(async () => {
|
|
292
|
+
try {
|
|
293
|
+
setIsLoading(true);
|
|
294
|
+
setError(null);
|
|
295
|
+
const allItems = await Item.all(modelName, deleted);
|
|
296
|
+
// Filter items into ready vs loading based on service state
|
|
297
|
+
const readyItems = [];
|
|
298
|
+
const loadingItemsList = [];
|
|
299
|
+
// Clear previous loading set
|
|
300
|
+
loadingItemsRef.current.clear();
|
|
301
|
+
for (const item of allItems) {
|
|
302
|
+
const snapshot = item.getService().getSnapshot();
|
|
303
|
+
const isIdle = snapshot.value === 'idle';
|
|
304
|
+
if (isIdle) {
|
|
305
|
+
// Item is ready
|
|
306
|
+
readyItems.push(item);
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
// Item is still loading - subscribe to state changes
|
|
310
|
+
loadingItemsList.push(item);
|
|
311
|
+
loadingItemsRef.current.add(item);
|
|
312
|
+
// Clean up any existing subscription for this item
|
|
313
|
+
const existingSub = subscriptionsRef.current.get(item);
|
|
314
|
+
if (existingSub) {
|
|
315
|
+
existingSub.unsubscribe();
|
|
316
|
+
}
|
|
317
|
+
// Subscribe to state changes
|
|
318
|
+
const subscription = item.getService().subscribe((snapshot) => {
|
|
319
|
+
if (snapshot && typeof snapshot === 'object' && 'value' in snapshot) {
|
|
320
|
+
const isIdle = snapshot.value === 'idle';
|
|
321
|
+
if (isIdle) {
|
|
322
|
+
// Item is now ready - update state
|
|
323
|
+
setItems(prev => {
|
|
324
|
+
// Check if item is already in the list (by seedLocalId or seedUid)
|
|
325
|
+
const exists = prev.some(i => (i.seedLocalId && item.seedLocalId && i.seedLocalId === item.seedLocalId) ||
|
|
326
|
+
(i.seedUid && item.seedUid && i.seedUid === item.seedUid));
|
|
327
|
+
if (exists) {
|
|
328
|
+
return prev;
|
|
329
|
+
}
|
|
330
|
+
// Add the newly ready item
|
|
331
|
+
const updated = [...prev, item];
|
|
332
|
+
itemsRef.current = updated; // Update ref for comparison
|
|
333
|
+
return updated;
|
|
334
|
+
});
|
|
335
|
+
// Remove from loading set and clean up subscription
|
|
336
|
+
loadingItemsRef.current.delete(item);
|
|
337
|
+
subscription.unsubscribe();
|
|
338
|
+
subscriptionsRef.current.delete(item);
|
|
339
|
+
// Update loading state based on remaining loading items
|
|
340
|
+
setIsLoading(loadingItemsRef.current.size > 0);
|
|
341
|
+
}
|
|
342
|
+
else if (snapshot.value === 'error') {
|
|
343
|
+
// Item failed to load - clean up subscription
|
|
344
|
+
loadingItemsRef.current.delete(item);
|
|
345
|
+
subscription.unsubscribe();
|
|
346
|
+
subscriptionsRef.current.delete(item);
|
|
347
|
+
// Update loading state based on remaining loading items
|
|
348
|
+
setIsLoading(loadingItemsRef.current.size > 0);
|
|
349
|
+
}
|
|
350
|
+
}
|
|
351
|
+
});
|
|
352
|
+
subscriptionsRef.current.set(item, subscription);
|
|
353
|
+
}
|
|
354
|
+
}
|
|
355
|
+
// Set initial ready items
|
|
356
|
+
setItems(readyItems);
|
|
357
|
+
itemsRef.current = readyItems; // Update ref for comparison
|
|
358
|
+
setError(null);
|
|
359
|
+
setIsLoading(loadingItemsList.length > 0); // Still loading if any items are loading
|
|
360
|
+
}
|
|
361
|
+
catch (error) {
|
|
362
|
+
setError(error);
|
|
363
|
+
setIsLoading(false);
|
|
364
|
+
}
|
|
365
|
+
}, [modelName, deleted]);
|
|
366
|
+
// Cleanup subscriptions for items that are no longer in the list
|
|
367
|
+
useEffect(() => {
|
|
368
|
+
const currentItemKeys = new Set();
|
|
369
|
+
for (const item of items) {
|
|
370
|
+
const key = item.seedLocalId || item.seedUid || '';
|
|
371
|
+
if (key) {
|
|
372
|
+
currentItemKeys.add(key);
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
// Clean up subscriptions for items that are no longer in the list
|
|
376
|
+
for (const [item, subscription] of subscriptionsRef.current.entries()) {
|
|
377
|
+
const key = item.seedLocalId || item.seedUid || '';
|
|
378
|
+
if (key && !currentItemKeys.has(key)) {
|
|
379
|
+
// Item is no longer in the list, clean up subscription
|
|
380
|
+
subscription.unsubscribe();
|
|
381
|
+
subscriptionsRef.current.delete(item);
|
|
382
|
+
loadingItemsRef.current.delete(item);
|
|
383
|
+
}
|
|
384
|
+
}
|
|
385
|
+
// Update loading state based on remaining loading items
|
|
386
|
+
if (loadingItemsRef.current.size === 0 && isLoading) {
|
|
387
|
+
setIsLoading(false);
|
|
388
|
+
}
|
|
389
|
+
}, [items, isLoading]);
|
|
390
|
+
// Fetch items on initial mount when client is ready
|
|
391
|
+
useEffect(() => {
|
|
392
|
+
if (!isClientReady) {
|
|
393
|
+
return;
|
|
394
|
+
}
|
|
395
|
+
// Initial fetch when client becomes ready
|
|
396
|
+
fetchItems();
|
|
397
|
+
}, [isClientReady, fetchItems]);
|
|
398
|
+
// Refetch items when table data actually changes (not just reference)
|
|
399
|
+
useEffect(() => {
|
|
400
|
+
if (!isClientReady || !seedsTableData) {
|
|
401
|
+
return;
|
|
402
|
+
}
|
|
403
|
+
// Check if seedsTableData actually changed by comparing with previous value
|
|
404
|
+
const prevData = previousSeedsTableDataRef.current;
|
|
405
|
+
const prevDataJson = prevData ? JSON.stringify(prevData.map(s => ({ localId: s.localId, uid: s.uid }))) : 'undefined';
|
|
406
|
+
const currDataJson = seedsTableData ? JSON.stringify(seedsTableData.map(s => ({ localId: s.localId, uid: s.uid }))) : 'undefined';
|
|
407
|
+
if (prevDataJson === currDataJson && prevData !== undefined) {
|
|
408
|
+
// Data hasn't actually changed, skip refetch
|
|
409
|
+
return;
|
|
410
|
+
}
|
|
411
|
+
// Update ref with current data
|
|
412
|
+
previousSeedsTableDataRef.current = seedsTableData;
|
|
413
|
+
// Extract identifying information from current items in state (using ref to avoid dependency)
|
|
414
|
+
const currentItemsSet = new Set();
|
|
415
|
+
for (const item of itemsRef.current) {
|
|
416
|
+
const key = item.seedLocalId || item.seedUid;
|
|
417
|
+
if (key) {
|
|
418
|
+
currentItemsSet.add(key);
|
|
419
|
+
}
|
|
420
|
+
}
|
|
421
|
+
// Extract identifying information from seedsTableData
|
|
422
|
+
const tableDataItemsSet = new Set();
|
|
423
|
+
for (const dbSeed of seedsTableData) {
|
|
424
|
+
const key = dbSeed.localId || dbSeed.uid;
|
|
425
|
+
if (key) {
|
|
426
|
+
tableDataItemsSet.add(key);
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
// Compare sets to detect changes
|
|
430
|
+
const setsAreEqual = currentItemsSet.size === tableDataItemsSet.size &&
|
|
431
|
+
[...currentItemsSet].every(id => tableDataItemsSet.has(id));
|
|
432
|
+
if (setsAreEqual) {
|
|
433
|
+
// Items in state match table data, skip refetch
|
|
434
|
+
return;
|
|
435
|
+
}
|
|
436
|
+
// Items have changed, fetch updated items
|
|
437
|
+
fetchItems();
|
|
438
|
+
}, [isClientReady, seedsTableData, fetchItems, modelName]);
|
|
439
|
+
// Cleanup all subscriptions on unmount
|
|
440
|
+
useEffect(() => {
|
|
441
|
+
return () => {
|
|
442
|
+
subscriptionsRef.current.forEach(sub => sub.unsubscribe());
|
|
443
|
+
subscriptionsRef.current.clear();
|
|
444
|
+
loadingItemsRef.current.clear();
|
|
445
|
+
};
|
|
446
|
+
}, []);
|
|
447
|
+
return {
|
|
448
|
+
items: orderBy(items, [
|
|
449
|
+
(item) => item.lastVersionPublishedAt ||
|
|
450
|
+
item.attestationCreatedAt ||
|
|
451
|
+
item.createdAt,
|
|
452
|
+
], ['desc']),
|
|
453
|
+
isLoading,
|
|
454
|
+
error,
|
|
455
|
+
};
|
|
456
|
+
};
|
|
457
|
+
const useCreateItem = () => {
|
|
458
|
+
const [isCreatingItem, setIsCreatingItem] = useState(false);
|
|
459
|
+
const createItem = useCallback(async (modelName, itemData) => {
|
|
460
|
+
if (isCreatingItem) {
|
|
461
|
+
// TODO: should we setup a queue for this?
|
|
462
|
+
console.error(`[useCreateItem] [createItem] already creating item`, itemData);
|
|
463
|
+
return;
|
|
464
|
+
}
|
|
465
|
+
setIsCreatingItem(true);
|
|
466
|
+
if (!itemData) {
|
|
467
|
+
itemData = {};
|
|
468
|
+
}
|
|
469
|
+
const { seedLocalId } = await createNewItem({ modelName, ...itemData });
|
|
470
|
+
await Item.find({ modelName, seedLocalId });
|
|
471
|
+
setIsCreatingItem(false);
|
|
472
|
+
}, [isCreatingItem]);
|
|
473
|
+
return {
|
|
474
|
+
createItem,
|
|
475
|
+
isCreatingItem,
|
|
476
|
+
};
|
|
477
|
+
};
|
|
478
|
+
|
|
479
|
+
const logger$1 = debug('seedSdk:react:property');
|
|
480
|
+
const propertiesLogger = debug('seedSdk:react:itemProperties');
|
|
481
|
+
function useItemProperty(arg1, arg2) {
|
|
482
|
+
const isClientReady = useIsClientReady();
|
|
483
|
+
const [property, setProperty] = useState(undefined);
|
|
484
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
485
|
+
const [error, setError] = useState(null);
|
|
486
|
+
const subscriptionRef = useRef(undefined);
|
|
487
|
+
const [, setVersion] = useState(0); // Version counter to force re-renders
|
|
488
|
+
// Determine which lookup mode we're in based on arguments
|
|
489
|
+
const lookupMode = useMemo(() => {
|
|
490
|
+
if (typeof arg1 === 'string' && arg2 !== undefined) {
|
|
491
|
+
// Two arguments: itemId, propertyName
|
|
492
|
+
return { type: 'itemId', itemId: arg1, propertyName: arg2 };
|
|
493
|
+
}
|
|
494
|
+
else if (typeof arg1 === 'object') {
|
|
495
|
+
// Object argument: { seedLocalId/seedUid, propertyName }
|
|
496
|
+
return {
|
|
497
|
+
type: 'identifiers',
|
|
498
|
+
seedLocalId: arg1.seedLocalId,
|
|
499
|
+
seedUid: arg1.seedUid,
|
|
500
|
+
propertyName: arg1.propertyName,
|
|
501
|
+
};
|
|
502
|
+
}
|
|
503
|
+
else {
|
|
504
|
+
return null;
|
|
505
|
+
}
|
|
506
|
+
}, [arg1, arg2]);
|
|
507
|
+
// Determine initial loading state
|
|
508
|
+
useMemo(() => {
|
|
509
|
+
if (!lookupMode)
|
|
510
|
+
return false;
|
|
511
|
+
if (lookupMode.type === 'itemId') {
|
|
512
|
+
return !!(lookupMode.itemId && lookupMode.propertyName);
|
|
513
|
+
}
|
|
514
|
+
else {
|
|
515
|
+
return !!((lookupMode.seedLocalId || lookupMode.seedUid) &&
|
|
516
|
+
lookupMode.propertyName);
|
|
517
|
+
}
|
|
518
|
+
}, [lookupMode]);
|
|
519
|
+
// Determine if we should be loading based on parameters
|
|
520
|
+
const shouldLoad = useMemo(() => {
|
|
521
|
+
if (!isClientReady)
|
|
522
|
+
return false;
|
|
523
|
+
if (!lookupMode)
|
|
524
|
+
return false;
|
|
525
|
+
if (lookupMode.type === 'itemId') {
|
|
526
|
+
return !!(lookupMode.itemId && lookupMode.propertyName);
|
|
527
|
+
}
|
|
528
|
+
else {
|
|
529
|
+
return !!((lookupMode.seedLocalId || lookupMode.seedUid) &&
|
|
530
|
+
lookupMode.propertyName);
|
|
531
|
+
}
|
|
532
|
+
}, [isClientReady, lookupMode]);
|
|
533
|
+
const updateItemProperty = useCallback(async () => {
|
|
534
|
+
if (!isClientReady || !lookupMode) {
|
|
535
|
+
setProperty(undefined);
|
|
536
|
+
setIsLoading(false);
|
|
537
|
+
setError(null);
|
|
538
|
+
return;
|
|
539
|
+
}
|
|
540
|
+
try {
|
|
541
|
+
setIsLoading(true);
|
|
542
|
+
setError(null);
|
|
543
|
+
let seedLocalId;
|
|
544
|
+
let seedUid;
|
|
545
|
+
if (lookupMode.type === 'itemId') {
|
|
546
|
+
// Resolve itemId to seedLocalId/seedUid
|
|
547
|
+
// For now, assume itemId is seedLocalId (could be enhanced to support seedUid)
|
|
548
|
+
seedLocalId = lookupMode.itemId;
|
|
549
|
+
}
|
|
550
|
+
else {
|
|
551
|
+
seedLocalId = lookupMode.seedLocalId;
|
|
552
|
+
seedUid = lookupMode.seedUid;
|
|
553
|
+
}
|
|
554
|
+
if (!seedLocalId && !seedUid) {
|
|
555
|
+
setProperty(undefined);
|
|
556
|
+
setIsLoading(false);
|
|
557
|
+
setError(null);
|
|
558
|
+
return;
|
|
559
|
+
}
|
|
560
|
+
const foundProperty = await ItemProperty.find({
|
|
561
|
+
propertyName: lookupMode.propertyName,
|
|
562
|
+
seedLocalId,
|
|
563
|
+
seedUid,
|
|
564
|
+
});
|
|
565
|
+
if (!foundProperty) {
|
|
566
|
+
logger$1(`[useItemProperty] [updateItemProperty] no property found for Item.${seedLocalId || seedUid}.${lookupMode.propertyName}`);
|
|
567
|
+
setProperty(undefined);
|
|
568
|
+
setIsLoading(false);
|
|
569
|
+
setError(null);
|
|
570
|
+
return;
|
|
571
|
+
}
|
|
572
|
+
// ItemProperty.find() now waits for idle by default, so the property should be ready
|
|
573
|
+
setProperty(foundProperty);
|
|
574
|
+
setIsLoading(false); // Property is ready since find() waited for idle
|
|
575
|
+
setError(null);
|
|
576
|
+
}
|
|
577
|
+
catch (error) {
|
|
578
|
+
logger$1('[useItemProperty] Error updating item property:', error);
|
|
579
|
+
setProperty(undefined);
|
|
580
|
+
setIsLoading(false);
|
|
581
|
+
setError(error);
|
|
582
|
+
}
|
|
583
|
+
}, [isClientReady, lookupMode]);
|
|
584
|
+
// Fetch/refetch when lookup parameters change or client becomes ready
|
|
585
|
+
useEffect(() => {
|
|
586
|
+
if (!shouldLoad) {
|
|
587
|
+
setProperty(undefined);
|
|
588
|
+
setIsLoading(false);
|
|
589
|
+
setError(null);
|
|
590
|
+
return;
|
|
591
|
+
}
|
|
592
|
+
updateItemProperty();
|
|
593
|
+
}, [shouldLoad, updateItemProperty]);
|
|
594
|
+
// Subscribe to service changes when property is available
|
|
595
|
+
useEffect(() => {
|
|
596
|
+
if (!property) {
|
|
597
|
+
// Clean up subscription if property is not available
|
|
598
|
+
subscriptionRef.current?.unsubscribe();
|
|
599
|
+
subscriptionRef.current = undefined;
|
|
600
|
+
return;
|
|
601
|
+
}
|
|
602
|
+
// Clean up previous subscription
|
|
603
|
+
subscriptionRef.current?.unsubscribe();
|
|
604
|
+
// Subscribe to service changes
|
|
605
|
+
const subscription = property.getService().subscribe((snapshot) => {
|
|
606
|
+
// Update loading state based on service state
|
|
607
|
+
// Use type guard to check if snapshot has 'value' property
|
|
608
|
+
if (snapshot && typeof snapshot === 'object' && 'value' in snapshot) {
|
|
609
|
+
const isIdle = snapshot.value === 'idle';
|
|
610
|
+
setIsLoading(!isIdle);
|
|
611
|
+
// Clear error if service is in idle state
|
|
612
|
+
if (isIdle) {
|
|
613
|
+
setError(null);
|
|
614
|
+
}
|
|
615
|
+
}
|
|
616
|
+
// Force re-render by incrementing version counter
|
|
617
|
+
setVersion(prev => prev + 1);
|
|
618
|
+
});
|
|
619
|
+
subscriptionRef.current = subscription;
|
|
620
|
+
return () => {
|
|
621
|
+
subscriptionRef.current?.unsubscribe();
|
|
622
|
+
subscriptionRef.current = undefined;
|
|
623
|
+
};
|
|
624
|
+
}, [property]);
|
|
625
|
+
return {
|
|
626
|
+
property,
|
|
627
|
+
isLoading,
|
|
628
|
+
error,
|
|
629
|
+
};
|
|
630
|
+
}
|
|
631
|
+
function useItemProperties(arg1) {
|
|
632
|
+
const [properties, setProperties] = useState([]);
|
|
633
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
634
|
+
const [error, setError] = useState(null);
|
|
635
|
+
const isClientReady = useIsClientReady();
|
|
636
|
+
const subscriptionsRef = useRef(new Map());
|
|
637
|
+
const loadingPropertiesRef = useRef(new Set());
|
|
638
|
+
const previousTableDataRef = useRef(undefined);
|
|
639
|
+
// Determine which lookup mode we're in based on arguments
|
|
640
|
+
const lookupMode = useMemo(() => {
|
|
641
|
+
if (typeof arg1 === 'string') {
|
|
642
|
+
// String argument: itemId (assumed to be seedLocalId)
|
|
643
|
+
return { type: 'itemId', itemId: arg1 };
|
|
644
|
+
}
|
|
645
|
+
else if (typeof arg1 === 'object') {
|
|
646
|
+
// Object argument: { seedLocalId/seedUid }
|
|
647
|
+
return {
|
|
648
|
+
type: 'identifiers',
|
|
649
|
+
seedLocalId: arg1.seedLocalId,
|
|
650
|
+
seedUid: arg1.seedUid,
|
|
651
|
+
};
|
|
652
|
+
}
|
|
653
|
+
else {
|
|
654
|
+
return null;
|
|
655
|
+
}
|
|
656
|
+
}, [arg1]);
|
|
657
|
+
// Determine seedLocalId and seedUid for query
|
|
658
|
+
const seedLocalId = useMemo(() => {
|
|
659
|
+
if (!lookupMode)
|
|
660
|
+
return undefined;
|
|
661
|
+
if (lookupMode.type === 'itemId') {
|
|
662
|
+
return lookupMode.itemId;
|
|
663
|
+
}
|
|
664
|
+
else {
|
|
665
|
+
return lookupMode.seedLocalId;
|
|
666
|
+
}
|
|
667
|
+
}, [lookupMode]);
|
|
668
|
+
const seedUid = useMemo(() => {
|
|
669
|
+
if (!lookupMode || lookupMode.type === 'itemId')
|
|
670
|
+
return undefined;
|
|
671
|
+
return lookupMode.seedUid;
|
|
672
|
+
}, [lookupMode]);
|
|
673
|
+
// Watch the metadata table for changes
|
|
674
|
+
// Query metadata table directly and filter for latest records in JavaScript
|
|
675
|
+
// This is simpler and works better with useLiveQuery than CTEs
|
|
676
|
+
// Get db inside useMemo to avoid recreating query on each render
|
|
677
|
+
// Drizzle query builders are new objects each time, but useMemo will only recreate
|
|
678
|
+
// when dependencies change, which is what we want for reactive queries
|
|
679
|
+
const propertiesQuery = useMemo(() => {
|
|
680
|
+
if (!isClientReady || (!seedLocalId && !seedUid)) {
|
|
681
|
+
propertiesLogger('[useItemProperties] Query: returning null (not ready or no identifiers)');
|
|
682
|
+
return null;
|
|
683
|
+
}
|
|
684
|
+
const db = BaseDb.getAppDb();
|
|
685
|
+
if (!db) {
|
|
686
|
+
propertiesLogger('[useItemProperties] Query: returning null (no db)');
|
|
687
|
+
return null;
|
|
688
|
+
}
|
|
689
|
+
propertiesLogger(`[useItemProperties] Query: creating query for seedLocalId=${seedLocalId}, seedUid=${seedUid}`);
|
|
690
|
+
// Query metadata table directly - we'll filter for latest records in JavaScript
|
|
691
|
+
const query = seedUid
|
|
692
|
+
? db
|
|
693
|
+
.select({
|
|
694
|
+
propertyName: metadata.propertyName,
|
|
695
|
+
propertyValue: metadata.propertyValue,
|
|
696
|
+
seedLocalId: metadata.seedLocalId,
|
|
697
|
+
seedUid: metadata.seedUid,
|
|
698
|
+
modelType: metadata.modelType,
|
|
699
|
+
schemaUid: metadata.schemaUid,
|
|
700
|
+
createdAt: metadata.createdAt,
|
|
701
|
+
attestationCreatedAt: metadata.attestationCreatedAt,
|
|
702
|
+
})
|
|
703
|
+
.from(metadata)
|
|
704
|
+
.where(and(eq(metadata.seedUid, seedUid), isNotNull(metadata.propertyName)))
|
|
705
|
+
: seedLocalId
|
|
706
|
+
? db
|
|
707
|
+
.select({
|
|
708
|
+
propertyName: metadata.propertyName,
|
|
709
|
+
propertyValue: metadata.propertyValue,
|
|
710
|
+
seedLocalId: metadata.seedLocalId,
|
|
711
|
+
seedUid: metadata.seedUid,
|
|
712
|
+
modelType: metadata.modelType,
|
|
713
|
+
schemaUid: metadata.schemaUid,
|
|
714
|
+
createdAt: metadata.createdAt,
|
|
715
|
+
attestationCreatedAt: metadata.attestationCreatedAt,
|
|
716
|
+
})
|
|
717
|
+
.from(metadata)
|
|
718
|
+
.where(and(eq(metadata.seedLocalId, seedLocalId), isNotNull(metadata.propertyName)))
|
|
719
|
+
: null;
|
|
720
|
+
propertiesLogger(`[useItemProperties] Query: created query object`, { queryType: seedUid ? 'seedUid' : 'seedLocalId' });
|
|
721
|
+
return query;
|
|
722
|
+
}, [isClientReady, seedLocalId, seedUid]);
|
|
723
|
+
const rawPropertiesTableData = useLiveQuery(propertiesQuery);
|
|
724
|
+
// Debug logging for rawPropertiesTableData
|
|
725
|
+
useEffect(() => {
|
|
726
|
+
if (rawPropertiesTableData !== undefined) {
|
|
727
|
+
propertiesLogger(`[useItemProperties] rawPropertiesTableData updated:`, {
|
|
728
|
+
length: rawPropertiesTableData?.length || 0,
|
|
729
|
+
isUndefined: rawPropertiesTableData === undefined,
|
|
730
|
+
isArray: Array.isArray(rawPropertiesTableData),
|
|
731
|
+
firstRecord: rawPropertiesTableData?.[0] || null,
|
|
732
|
+
});
|
|
733
|
+
}
|
|
734
|
+
else {
|
|
735
|
+
propertiesLogger('[useItemProperties] rawPropertiesTableData is undefined (query not executed yet)');
|
|
736
|
+
}
|
|
737
|
+
}, [rawPropertiesTableData]);
|
|
738
|
+
// Filter for latest records (one per propertyName) in JavaScript
|
|
739
|
+
const propertiesTableData = useMemo(() => {
|
|
740
|
+
if (!rawPropertiesTableData || rawPropertiesTableData.length === 0) {
|
|
741
|
+
return [];
|
|
742
|
+
}
|
|
743
|
+
// Group by propertyName and keep only the latest record for each
|
|
744
|
+
const latestByProperty = new Map();
|
|
745
|
+
for (const record of rawPropertiesTableData) {
|
|
746
|
+
if (!record.propertyName)
|
|
747
|
+
continue;
|
|
748
|
+
const existing = latestByProperty.get(record.propertyName);
|
|
749
|
+
if (!existing) {
|
|
750
|
+
latestByProperty.set(record.propertyName, record);
|
|
751
|
+
}
|
|
752
|
+
else {
|
|
753
|
+
// Compare timestamps to find the latest
|
|
754
|
+
const existingTime = existing.attestationCreatedAt || existing.createdAt || 0;
|
|
755
|
+
const currentTime = record.attestationCreatedAt || record.createdAt || 0;
|
|
756
|
+
if (currentTime > existingTime) {
|
|
757
|
+
latestByProperty.set(record.propertyName, record);
|
|
758
|
+
}
|
|
759
|
+
}
|
|
760
|
+
}
|
|
761
|
+
return Array.from(latestByProperty.values());
|
|
762
|
+
}, [rawPropertiesTableData]);
|
|
763
|
+
const fetchItemProperties = useCallback(async () => {
|
|
764
|
+
if (!seedLocalId && !seedUid) {
|
|
765
|
+
propertiesLogger('[useItemProperties] fetchItemProperties: no identifiers, clearing properties');
|
|
766
|
+
setProperties([]);
|
|
767
|
+
setIsLoading(false);
|
|
768
|
+
setError(null);
|
|
769
|
+
return;
|
|
770
|
+
}
|
|
771
|
+
// Don't fetch if propertiesTableData is not available yet
|
|
772
|
+
if (propertiesTableData === undefined) {
|
|
773
|
+
propertiesLogger('[useItemProperties] fetchItemProperties: propertiesTableData is undefined, skipping');
|
|
774
|
+
return;
|
|
775
|
+
}
|
|
776
|
+
propertiesLogger(`[useItemProperties] fetchItemProperties: starting with ${propertiesTableData?.length || 0} records from table`);
|
|
777
|
+
try {
|
|
778
|
+
setIsLoading(true);
|
|
779
|
+
setError(null);
|
|
780
|
+
const db = BaseDb.getAppDb();
|
|
781
|
+
if (!db) {
|
|
782
|
+
propertiesLogger('[useItemProperties] fetchItemProperties: no db available');
|
|
783
|
+
setProperties([]);
|
|
784
|
+
setIsLoading(false);
|
|
785
|
+
return;
|
|
786
|
+
}
|
|
787
|
+
// Get modelName from metadata records or from seeds table
|
|
788
|
+
let modelName;
|
|
789
|
+
if (propertiesTableData && propertiesTableData.length > 0) {
|
|
790
|
+
const firstProperty = propertiesTableData[0];
|
|
791
|
+
if (firstProperty.modelType) {
|
|
792
|
+
modelName = startCase(firstProperty.modelType);
|
|
793
|
+
}
|
|
794
|
+
}
|
|
795
|
+
// If we don't have modelName from metadata, try to get it from seeds table
|
|
796
|
+
if (!modelName) {
|
|
797
|
+
const seedRecords = await db
|
|
798
|
+
.select({ type: seeds.type })
|
|
799
|
+
.from(seeds)
|
|
800
|
+
.where(seedUid ? eq(seeds.uid, seedUid) : eq(seeds.localId, seedLocalId))
|
|
801
|
+
.limit(1);
|
|
802
|
+
if (seedRecords.length > 0 && seedRecords[0].type) {
|
|
803
|
+
modelName = startCase(seedRecords[0].type);
|
|
804
|
+
}
|
|
805
|
+
}
|
|
806
|
+
// Get all ModelProperties for this Model
|
|
807
|
+
const modelProperties = [];
|
|
808
|
+
if (modelName) {
|
|
809
|
+
try {
|
|
810
|
+
const { Model } = await import('./json-I3vJhXo8.js').then(function (n) { return n.aS; });
|
|
811
|
+
const model = await Model.getByNameAsync(modelName);
|
|
812
|
+
if (model && model.properties) {
|
|
813
|
+
for (const modelProperty of model.properties) {
|
|
814
|
+
if (modelProperty.name) {
|
|
815
|
+
modelProperties.push(modelProperty.name);
|
|
816
|
+
}
|
|
817
|
+
}
|
|
818
|
+
}
|
|
819
|
+
}
|
|
820
|
+
catch (error) {
|
|
821
|
+
propertiesLogger(`[useItemProperties] Error getting ModelProperties for ${modelName}:`, error);
|
|
822
|
+
// Continue without ModelProperties - we'll still return properties from metadata
|
|
823
|
+
}
|
|
824
|
+
}
|
|
825
|
+
// Create a Set of property names that have metadata records
|
|
826
|
+
const propertiesWithMetadata = new Set();
|
|
827
|
+
if (propertiesTableData) {
|
|
828
|
+
for (const dbProperty of propertiesTableData) {
|
|
829
|
+
if (dbProperty.propertyName) {
|
|
830
|
+
propertiesWithMetadata.add(dbProperty.propertyName);
|
|
831
|
+
}
|
|
832
|
+
}
|
|
833
|
+
}
|
|
834
|
+
const _itemProperties = [];
|
|
835
|
+
// First, create ItemProperty instances for properties that have metadata records
|
|
836
|
+
if (propertiesTableData && propertiesTableData.length > 0) {
|
|
837
|
+
for (const dbProperty of propertiesTableData) {
|
|
838
|
+
if (!dbProperty.propertyName) {
|
|
839
|
+
continue;
|
|
840
|
+
}
|
|
841
|
+
try {
|
|
842
|
+
const itemProperty = await ItemProperty.find({
|
|
843
|
+
propertyName: dbProperty.propertyName,
|
|
844
|
+
seedLocalId: dbProperty.seedLocalId || undefined,
|
|
845
|
+
seedUid: dbProperty.seedUid || undefined,
|
|
846
|
+
});
|
|
847
|
+
if (itemProperty) {
|
|
848
|
+
_itemProperties.push(itemProperty);
|
|
849
|
+
}
|
|
850
|
+
}
|
|
851
|
+
catch (error) {
|
|
852
|
+
logger$1(`[useItemProperties] Error creating ItemProperty for ${dbProperty.propertyName}:`, error);
|
|
853
|
+
// Continue with other properties even if one fails
|
|
854
|
+
}
|
|
855
|
+
}
|
|
856
|
+
}
|
|
857
|
+
// Then, create ItemProperty instances for ModelProperties that don't have metadata records
|
|
858
|
+
if (modelName && modelProperties.length > 0) {
|
|
859
|
+
const resolvedSeedLocalId = propertiesTableData && propertiesTableData.length > 0
|
|
860
|
+
? propertiesTableData[0].seedLocalId || seedLocalId
|
|
861
|
+
: seedLocalId;
|
|
862
|
+
const resolvedSeedUid = propertiesTableData && propertiesTableData.length > 0
|
|
863
|
+
? propertiesTableData[0].seedUid || seedUid
|
|
864
|
+
: seedUid;
|
|
865
|
+
for (const propertyName of modelProperties) {
|
|
866
|
+
// Skip if we already have a metadata record for this property
|
|
867
|
+
if (propertiesWithMetadata.has(propertyName)) {
|
|
868
|
+
continue;
|
|
869
|
+
}
|
|
870
|
+
try {
|
|
871
|
+
// Create ItemProperty with empty value for properties without metadata records
|
|
872
|
+
const itemProperty = ItemProperty.create({
|
|
873
|
+
propertyName,
|
|
874
|
+
modelName,
|
|
875
|
+
seedLocalId: resolvedSeedLocalId || undefined,
|
|
876
|
+
seedUid: resolvedSeedUid || undefined,
|
|
877
|
+
propertyValue: null,
|
|
878
|
+
});
|
|
879
|
+
if (itemProperty) {
|
|
880
|
+
_itemProperties.push(itemProperty);
|
|
881
|
+
}
|
|
882
|
+
}
|
|
883
|
+
catch (error) {
|
|
884
|
+
logger$1(`[useItemProperties] Error creating ItemProperty for missing property ${propertyName}:`, error);
|
|
885
|
+
// Continue with other properties even if one fails
|
|
886
|
+
}
|
|
887
|
+
}
|
|
888
|
+
}
|
|
889
|
+
// Also add system properties like 'createdAt' if they don't exist
|
|
890
|
+
// Get createdAt from seeds table
|
|
891
|
+
if (seedLocalId || seedUid) {
|
|
892
|
+
const seedRecords = await db
|
|
893
|
+
.select({ createdAt: seeds.createdAt })
|
|
894
|
+
.from(seeds)
|
|
895
|
+
.where(seedUid ? eq(seeds.uid, seedUid) : eq(seeds.localId, seedLocalId))
|
|
896
|
+
.limit(1);
|
|
897
|
+
if (seedRecords.length > 0 && seedRecords[0].createdAt) {
|
|
898
|
+
const createdAtPropertyName = 'createdAt';
|
|
899
|
+
const hasCreatedAtProperty = _itemProperties.some(p => p.propertyName === createdAtPropertyName);
|
|
900
|
+
if (!hasCreatedAtProperty && modelName) {
|
|
901
|
+
try {
|
|
902
|
+
const resolvedSeedLocalId = propertiesTableData && propertiesTableData.length > 0
|
|
903
|
+
? propertiesTableData[0].seedLocalId || seedLocalId
|
|
904
|
+
: seedLocalId;
|
|
905
|
+
const resolvedSeedUid = propertiesTableData && propertiesTableData.length > 0
|
|
906
|
+
? propertiesTableData[0].seedUid || seedUid
|
|
907
|
+
: seedUid;
|
|
908
|
+
const createdAtProperty = ItemProperty.create({
|
|
909
|
+
propertyName: createdAtPropertyName,
|
|
910
|
+
modelName,
|
|
911
|
+
seedLocalId: resolvedSeedLocalId || undefined,
|
|
912
|
+
seedUid: resolvedSeedUid || undefined,
|
|
913
|
+
propertyValue: seedRecords[0].createdAt.toString(),
|
|
914
|
+
});
|
|
915
|
+
if (createdAtProperty) {
|
|
916
|
+
_itemProperties.push(createdAtProperty);
|
|
917
|
+
}
|
|
918
|
+
}
|
|
919
|
+
catch (error) {
|
|
920
|
+
logger$1(`[useItemProperties] Error creating createdAt ItemProperty:`, error);
|
|
921
|
+
}
|
|
922
|
+
}
|
|
923
|
+
}
|
|
924
|
+
}
|
|
925
|
+
// Filter out properties that are ready (idle state) vs still loading
|
|
926
|
+
const readyProperties = [];
|
|
927
|
+
const loadingPropertiesList = [];
|
|
928
|
+
// Clear previous loading set
|
|
929
|
+
loadingPropertiesRef.current.clear();
|
|
930
|
+
for (const property of _itemProperties) {
|
|
931
|
+
const snapshot = property.getService().getSnapshot();
|
|
932
|
+
// Use type guard to check if snapshot has 'value' property
|
|
933
|
+
const isIdle = snapshot && typeof snapshot === 'object' && 'value' in snapshot && snapshot.value === 'idle';
|
|
934
|
+
if (isIdle) {
|
|
935
|
+
// Property is ready
|
|
936
|
+
readyProperties.push(property);
|
|
937
|
+
}
|
|
938
|
+
else {
|
|
939
|
+
// Property is still loading - subscribe to state changes
|
|
940
|
+
loadingPropertiesList.push(property);
|
|
941
|
+
loadingPropertiesRef.current.add(property);
|
|
942
|
+
// Clean up any existing subscription for this property
|
|
943
|
+
const existingSub = subscriptionsRef.current.get(property);
|
|
944
|
+
if (existingSub) {
|
|
945
|
+
existingSub.unsubscribe();
|
|
946
|
+
}
|
|
947
|
+
// Subscribe to state changes
|
|
948
|
+
const subscription = property.getService().subscribe((snapshot) => {
|
|
949
|
+
// Use type guard to check if snapshot has 'value' property
|
|
950
|
+
if (snapshot && typeof snapshot === 'object' && 'value' in snapshot) {
|
|
951
|
+
const isIdle = snapshot.value === 'idle';
|
|
952
|
+
if (isIdle) {
|
|
953
|
+
// Property is now ready - update state
|
|
954
|
+
setProperties(prev => {
|
|
955
|
+
// Check if property is already in the list (by propertyName and seedLocalId/seedUid)
|
|
956
|
+
const exists = prev.some(p => p.propertyName === property.propertyName &&
|
|
957
|
+
(p.seedLocalId === property.seedLocalId || p.seedUid === property.seedUid));
|
|
958
|
+
if (exists) {
|
|
959
|
+
return prev;
|
|
960
|
+
}
|
|
961
|
+
// Add the newly ready property
|
|
962
|
+
return [...prev, property];
|
|
963
|
+
});
|
|
964
|
+
// Remove from loading set and clean up subscription
|
|
965
|
+
loadingPropertiesRef.current.delete(property);
|
|
966
|
+
subscription.unsubscribe();
|
|
967
|
+
subscriptionsRef.current.delete(property);
|
|
968
|
+
// Update loading state based on remaining loading properties
|
|
969
|
+
setIsLoading(loadingPropertiesRef.current.size > 0);
|
|
970
|
+
}
|
|
971
|
+
else if (snapshot.value === 'error') {
|
|
972
|
+
// Property failed to load - clean up subscription
|
|
973
|
+
loadingPropertiesRef.current.delete(property);
|
|
974
|
+
subscription.unsubscribe();
|
|
975
|
+
subscriptionsRef.current.delete(property);
|
|
976
|
+
// Update loading state based on remaining loading properties
|
|
977
|
+
setIsLoading(loadingPropertiesRef.current.size > 0);
|
|
978
|
+
}
|
|
979
|
+
}
|
|
980
|
+
});
|
|
981
|
+
subscriptionsRef.current.set(property, subscription);
|
|
982
|
+
}
|
|
983
|
+
}
|
|
984
|
+
// Set initial ready properties
|
|
985
|
+
setProperties(readyProperties);
|
|
986
|
+
setError(null);
|
|
987
|
+
setIsLoading(loadingPropertiesList.length > 0); // Still loading if any properties are loading
|
|
988
|
+
}
|
|
989
|
+
catch (error) {
|
|
990
|
+
setError(error);
|
|
991
|
+
setIsLoading(false);
|
|
992
|
+
}
|
|
993
|
+
}, [seedLocalId, seedUid, propertiesTableData]);
|
|
994
|
+
// Reset previous table data ref when identifiers change
|
|
995
|
+
useEffect(() => {
|
|
996
|
+
previousTableDataRef.current = undefined;
|
|
997
|
+
}, [seedLocalId, seedUid]);
|
|
998
|
+
// Fetch item properties when dbModelId becomes available
|
|
999
|
+
useEffect(() => {
|
|
1000
|
+
if (!isClientReady) {
|
|
1001
|
+
return;
|
|
1002
|
+
}
|
|
1003
|
+
if (!seedLocalId && !seedUid) {
|
|
1004
|
+
setProperties([]);
|
|
1005
|
+
setIsLoading(false);
|
|
1006
|
+
setError(null);
|
|
1007
|
+
previousTableDataRef.current = undefined;
|
|
1008
|
+
return;
|
|
1009
|
+
}
|
|
1010
|
+
// Wait for propertiesTableData to be available before initial fetch
|
|
1011
|
+
// (it may be undefined initially while the query is starting)
|
|
1012
|
+
if (propertiesTableData === undefined) {
|
|
1013
|
+
return;
|
|
1014
|
+
}
|
|
1015
|
+
// Initial fetch when client is ready and propertiesTableData is available
|
|
1016
|
+
fetchItemProperties();
|
|
1017
|
+
}, [isClientReady, seedLocalId, seedUid, fetchItemProperties, propertiesTableData]);
|
|
1018
|
+
// Refetch item properties when table data actually changes (not just reference)
|
|
1019
|
+
useEffect(() => {
|
|
1020
|
+
if (!isClientReady || (!seedLocalId && !seedUid)) {
|
|
1021
|
+
return;
|
|
1022
|
+
}
|
|
1023
|
+
// If propertiesTableData is undefined, the query hasn't started yet - wait for it
|
|
1024
|
+
if (propertiesTableData === undefined) {
|
|
1025
|
+
return;
|
|
1026
|
+
}
|
|
1027
|
+
// Create a stable string representation of the table data for comparison
|
|
1028
|
+
const tableDataString = JSON.stringify(propertiesTableData.map(p => ({
|
|
1029
|
+
propertyName: p.propertyName,
|
|
1030
|
+
seedLocalId: p.seedLocalId,
|
|
1031
|
+
seedUid: p.seedUid,
|
|
1032
|
+
})).sort((a, b) => (a.propertyName || '').localeCompare(b.propertyName || '')));
|
|
1033
|
+
// Skip if table data hasn't actually changed
|
|
1034
|
+
if (previousTableDataRef.current === tableDataString) {
|
|
1035
|
+
return;
|
|
1036
|
+
}
|
|
1037
|
+
previousTableDataRef.current = tableDataString;
|
|
1038
|
+
// Extract identifying information from current properties in state
|
|
1039
|
+
const currentPropertiesSet = new Set();
|
|
1040
|
+
for (const prop of properties) {
|
|
1041
|
+
const key = `${prop.propertyName}:${prop.seedLocalId || prop.seedUid}`;
|
|
1042
|
+
currentPropertiesSet.add(key);
|
|
1043
|
+
}
|
|
1044
|
+
// Extract identifying information from propertiesTableData
|
|
1045
|
+
const tableDataPropertiesSet = new Set();
|
|
1046
|
+
for (const dbProperty of propertiesTableData) {
|
|
1047
|
+
if (dbProperty.propertyName) {
|
|
1048
|
+
const key = `${dbProperty.propertyName}:${dbProperty.seedLocalId || dbProperty.seedUid}`;
|
|
1049
|
+
tableDataPropertiesSet.add(key);
|
|
1050
|
+
}
|
|
1051
|
+
}
|
|
1052
|
+
// Compare sets to detect changes
|
|
1053
|
+
// If tableDataPropertiesSet is empty but we have properties, or vice versa, that's a change
|
|
1054
|
+
// If both are empty, skip (no data yet) - UNLESS this is the first time we're seeing empty data
|
|
1055
|
+
// If both have data and match, skip
|
|
1056
|
+
const setsAreEqual = currentPropertiesSet.size === tableDataPropertiesSet.size &&
|
|
1057
|
+
currentPropertiesSet.size > 0 &&
|
|
1058
|
+
[...currentPropertiesSet].every(id => tableDataPropertiesSet.has(id));
|
|
1059
|
+
if (setsAreEqual) {
|
|
1060
|
+
// Properties in state match table data, skip refetch
|
|
1061
|
+
return;
|
|
1062
|
+
}
|
|
1063
|
+
// Always refetch if table data has properties (even if we don't have any yet)
|
|
1064
|
+
// This handles the case where propertiesTableData changes from empty to having data
|
|
1065
|
+
if (tableDataPropertiesSet.size > 0) {
|
|
1066
|
+
// Properties have changed or data has arrived, fetch updated properties
|
|
1067
|
+
fetchItemProperties();
|
|
1068
|
+
return;
|
|
1069
|
+
}
|
|
1070
|
+
// If table data is empty but we have properties, that's also a change (properties were removed)
|
|
1071
|
+
if (currentPropertiesSet.size > 0 && tableDataPropertiesSet.size === 0) {
|
|
1072
|
+
fetchItemProperties();
|
|
1073
|
+
return;
|
|
1074
|
+
}
|
|
1075
|
+
// If both are empty, we've already tried to fetch (in the first useEffect)
|
|
1076
|
+
// and got empty results, so skip refetching until data arrives
|
|
1077
|
+
// (the change detection above will handle when data arrives)
|
|
1078
|
+
}, [isClientReady, propertiesTableData, properties, fetchItemProperties, seedLocalId, seedUid]);
|
|
1079
|
+
// Cleanup subscriptions for properties that are no longer in the list
|
|
1080
|
+
useEffect(() => {
|
|
1081
|
+
const currentPropertyKeys = new Set();
|
|
1082
|
+
for (const prop of properties) {
|
|
1083
|
+
const key = `${prop.propertyName}:${prop.seedLocalId || prop.seedUid}`;
|
|
1084
|
+
currentPropertyKeys.add(key);
|
|
1085
|
+
}
|
|
1086
|
+
// Clean up subscriptions for properties that are no longer in the list
|
|
1087
|
+
for (const [property, subscription] of subscriptionsRef.current.entries()) {
|
|
1088
|
+
const key = `${property.propertyName}:${property.seedLocalId || property.seedUid}`;
|
|
1089
|
+
if (!currentPropertyKeys.has(key)) {
|
|
1090
|
+
// Property is no longer in the list, clean up subscription
|
|
1091
|
+
subscription.unsubscribe();
|
|
1092
|
+
subscriptionsRef.current.delete(property);
|
|
1093
|
+
loadingPropertiesRef.current.delete(property);
|
|
1094
|
+
}
|
|
1095
|
+
}
|
|
1096
|
+
// Update loading state based on remaining loading properties
|
|
1097
|
+
if (loadingPropertiesRef.current.size === 0 && isLoading) {
|
|
1098
|
+
setIsLoading(false);
|
|
1099
|
+
}
|
|
1100
|
+
}, [properties, isLoading]);
|
|
1101
|
+
// Cleanup all subscriptions on unmount
|
|
1102
|
+
useEffect(() => {
|
|
1103
|
+
return () => {
|
|
1104
|
+
subscriptionsRef.current.forEach(sub => sub.unsubscribe());
|
|
1105
|
+
subscriptionsRef.current.clear();
|
|
1106
|
+
loadingPropertiesRef.current.clear();
|
|
1107
|
+
};
|
|
1108
|
+
}, []);
|
|
1109
|
+
return {
|
|
1110
|
+
properties,
|
|
1111
|
+
isLoading,
|
|
1112
|
+
error,
|
|
1113
|
+
};
|
|
1114
|
+
}
|
|
1115
|
+
|
|
1116
|
+
debug('seedSdk:react:services');
|
|
1117
|
+
|
|
1118
|
+
debug('seedSdk:react:db');
|
|
1119
|
+
|
|
1120
|
+
const logger = debug('seedSdk:react:schema');
|
|
1121
|
+
/**
|
|
1122
|
+
* Hook to get a Schema class instance (with setters) that is reactive
|
|
1123
|
+
* This allows you to edit schema properties directly like: schema.name = 'New name'
|
|
1124
|
+
* The schema instance uses a Proxy to ensure React re-renders when properties change
|
|
1125
|
+
* @param schemaIdentifier - The name of the schema or the schema file ID
|
|
1126
|
+
* - If a name is provided, retrieves the latest version with that name
|
|
1127
|
+
* - If an ID is provided, retrieves the specific schema by ID
|
|
1128
|
+
* @returns Object with schema instance
|
|
1129
|
+
*/
|
|
1130
|
+
const useSchema = (schemaIdentifier) => {
|
|
1131
|
+
const [schema, setSchema] = useState(null);
|
|
1132
|
+
const [isLoading, setIsLoading] = useState(schemaIdentifier ? true : false);
|
|
1133
|
+
const [error, setError] = useState(null);
|
|
1134
|
+
const subscriptionRef = useRef(null);
|
|
1135
|
+
const isClientReady = useIsClientReady();
|
|
1136
|
+
const loadSchema = useCallback((identifier) => {
|
|
1137
|
+
setIsLoading(true);
|
|
1138
|
+
setError(null);
|
|
1139
|
+
try {
|
|
1140
|
+
const schemaInstance = Schema.create(identifier);
|
|
1141
|
+
setSchema(schemaInstance);
|
|
1142
|
+
const service = schemaInstance.getService();
|
|
1143
|
+
const initialSnapshot = service.getSnapshot();
|
|
1144
|
+
// Set initial loading state based on whether status is 'idle'
|
|
1145
|
+
const isIdle = initialSnapshot.value === 'idle';
|
|
1146
|
+
setIsLoading(!isIdle);
|
|
1147
|
+
if (isIdle) {
|
|
1148
|
+
setError(null);
|
|
1149
|
+
}
|
|
1150
|
+
// Subscribe to all status changes and update isLoading based on whether status is 'idle'
|
|
1151
|
+
subscriptionRef.current = service.subscribe((snapshot) => {
|
|
1152
|
+
const isIdle = snapshot.value === 'idle';
|
|
1153
|
+
setIsLoading(!isIdle);
|
|
1154
|
+
if (isIdle) {
|
|
1155
|
+
setError(null);
|
|
1156
|
+
}
|
|
1157
|
+
});
|
|
1158
|
+
}
|
|
1159
|
+
catch (error) {
|
|
1160
|
+
logger('[useSchema] Error creating schema:', error);
|
|
1161
|
+
setError(error);
|
|
1162
|
+
setSchema(null);
|
|
1163
|
+
setIsLoading(false);
|
|
1164
|
+
return null;
|
|
1165
|
+
}
|
|
1166
|
+
}, []);
|
|
1167
|
+
useEffect(() => {
|
|
1168
|
+
// Clean up previous subscription before starting a new load
|
|
1169
|
+
if (subscriptionRef.current) {
|
|
1170
|
+
subscriptionRef.current.unsubscribe();
|
|
1171
|
+
subscriptionRef.current = null;
|
|
1172
|
+
}
|
|
1173
|
+
if (!isClientReady) {
|
|
1174
|
+
setSchema(null);
|
|
1175
|
+
setError(null);
|
|
1176
|
+
setIsLoading(false);
|
|
1177
|
+
return;
|
|
1178
|
+
}
|
|
1179
|
+
if (!schemaIdentifier) {
|
|
1180
|
+
setSchema(null);
|
|
1181
|
+
setError(null);
|
|
1182
|
+
setIsLoading(false);
|
|
1183
|
+
return;
|
|
1184
|
+
}
|
|
1185
|
+
loadSchema(schemaIdentifier);
|
|
1186
|
+
// Cleanup function to unsubscribe when effect re-runs or component unmounts
|
|
1187
|
+
return () => {
|
|
1188
|
+
if (subscriptionRef.current) {
|
|
1189
|
+
subscriptionRef.current.unsubscribe();
|
|
1190
|
+
subscriptionRef.current = null;
|
|
1191
|
+
}
|
|
1192
|
+
};
|
|
1193
|
+
}, [schemaIdentifier, isClientReady, loadSchema]);
|
|
1194
|
+
return {
|
|
1195
|
+
schema,
|
|
1196
|
+
isLoading,
|
|
1197
|
+
error,
|
|
1198
|
+
};
|
|
1199
|
+
};
|
|
1200
|
+
const useSchemas = () => {
|
|
1201
|
+
const [schemas$1, setSchemas] = useState([]);
|
|
1202
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
1203
|
+
const [error, setError] = useState(null);
|
|
1204
|
+
const isClientReady = useIsClientReady();
|
|
1205
|
+
const subscriptionsRef = useRef(new Map());
|
|
1206
|
+
const loadingSchemasRef = useRef(new Set());
|
|
1207
|
+
const previousSchemasTableDataRef = useRef(undefined);
|
|
1208
|
+
const schemasRef = useRef([]); // Track schemas for comparison without triggering effects
|
|
1209
|
+
// Watch the schemas table for changes
|
|
1210
|
+
// Memoize the query so it's stable across renders - this is critical for distinctUntilChanged to work
|
|
1211
|
+
const db = isClientReady ? BaseDb.getAppDb() : null;
|
|
1212
|
+
const schemasQuery = useMemo(() => {
|
|
1213
|
+
if (!db)
|
|
1214
|
+
return null;
|
|
1215
|
+
return db.select().from(schemas).orderBy(schemas.name, desc(schemas.version));
|
|
1216
|
+
}, [db, isClientReady]);
|
|
1217
|
+
const schemasTableData = useLiveQuery(schemasQuery);
|
|
1218
|
+
const fetchSchemas = useCallback(async () => {
|
|
1219
|
+
try {
|
|
1220
|
+
setIsLoading(true);
|
|
1221
|
+
const timestamp = Date.now();
|
|
1222
|
+
// Also check what's in the database directly before calling Schema.all()
|
|
1223
|
+
const db = BaseDb.getAppDb();
|
|
1224
|
+
if (db) {
|
|
1225
|
+
const directCheck = await db.select().from(schemas).orderBy(schemas.name, desc(schemas.version));
|
|
1226
|
+
}
|
|
1227
|
+
const allSchemas = await Schema.all();
|
|
1228
|
+
// Filter out schemas without an id and subscribe to state changes
|
|
1229
|
+
const readySchemas = [];
|
|
1230
|
+
const loadingSchemasList = [];
|
|
1231
|
+
// Clear previous loading set
|
|
1232
|
+
loadingSchemasRef.current.clear();
|
|
1233
|
+
for (const schema of allSchemas) {
|
|
1234
|
+
const snapshot = schema.getService().getSnapshot();
|
|
1235
|
+
const hasId = !!schema.id;
|
|
1236
|
+
const isIdle = snapshot.value === 'idle';
|
|
1237
|
+
if (hasId && isIdle) {
|
|
1238
|
+
// Schema is ready
|
|
1239
|
+
readySchemas.push(schema);
|
|
1240
|
+
}
|
|
1241
|
+
else {
|
|
1242
|
+
// Schema is still loading - subscribe to state changes
|
|
1243
|
+
loadingSchemasList.push(schema);
|
|
1244
|
+
loadingSchemasRef.current.add(schema);
|
|
1245
|
+
// Clean up any existing subscription for this schema
|
|
1246
|
+
const existingSub = subscriptionsRef.current.get(schema);
|
|
1247
|
+
if (existingSub) {
|
|
1248
|
+
existingSub.unsubscribe();
|
|
1249
|
+
}
|
|
1250
|
+
// Subscribe to state changes
|
|
1251
|
+
const subscription = schema.getService().subscribe((snapshot) => {
|
|
1252
|
+
const hasId = !!schema.id;
|
|
1253
|
+
const isIdle = snapshot.value === 'idle';
|
|
1254
|
+
if (hasId && isIdle) {
|
|
1255
|
+
// Schema is now ready - update state
|
|
1256
|
+
setSchemas(prev => {
|
|
1257
|
+
// Check if schema is already in the list (by id)
|
|
1258
|
+
if (schema.id && prev.some(s => s.id === schema.id)) {
|
|
1259
|
+
return prev;
|
|
1260
|
+
}
|
|
1261
|
+
// Add the newly ready schema
|
|
1262
|
+
const updated = [...prev, schema].sort((a, b) => {
|
|
1263
|
+
// Sort by name for consistency
|
|
1264
|
+
const nameA = a.metadata?.name || '';
|
|
1265
|
+
const nameB = b.metadata?.name || '';
|
|
1266
|
+
return nameA.localeCompare(nameB);
|
|
1267
|
+
});
|
|
1268
|
+
schemasRef.current = updated; // Update ref for comparison
|
|
1269
|
+
return updated;
|
|
1270
|
+
});
|
|
1271
|
+
// Remove from loading set and clean up subscription
|
|
1272
|
+
loadingSchemasRef.current.delete(schema);
|
|
1273
|
+
subscription.unsubscribe();
|
|
1274
|
+
subscriptionsRef.current.delete(schema);
|
|
1275
|
+
// Update loading state based on remaining loading schemas
|
|
1276
|
+
setIsLoading(loadingSchemasRef.current.size > 0);
|
|
1277
|
+
}
|
|
1278
|
+
else if (snapshot.value === 'error') {
|
|
1279
|
+
// Schema failed to load - clean up subscription
|
|
1280
|
+
loadingSchemasRef.current.delete(schema);
|
|
1281
|
+
subscription.unsubscribe();
|
|
1282
|
+
subscriptionsRef.current.delete(schema);
|
|
1283
|
+
// Update loading state based on remaining loading schemas
|
|
1284
|
+
setIsLoading(loadingSchemasRef.current.size > 0);
|
|
1285
|
+
}
|
|
1286
|
+
});
|
|
1287
|
+
subscriptionsRef.current.set(schema, subscription);
|
|
1288
|
+
}
|
|
1289
|
+
}
|
|
1290
|
+
// Set initial ready schemas
|
|
1291
|
+
setSchemas(readySchemas);
|
|
1292
|
+
schemasRef.current = readySchemas; // Update ref for comparison
|
|
1293
|
+
setError(null);
|
|
1294
|
+
setIsLoading(loadingSchemasList.length > 0); // Still loading if any schemas are loading
|
|
1295
|
+
}
|
|
1296
|
+
catch (error) {
|
|
1297
|
+
setError(error);
|
|
1298
|
+
setIsLoading(false);
|
|
1299
|
+
}
|
|
1300
|
+
}, []); // Remove schemasTableData dependency - we'll call fetchSchemas explicitly when table data changes
|
|
1301
|
+
// Cleanup subscriptions for schemas that are no longer in the list
|
|
1302
|
+
useEffect(() => {
|
|
1303
|
+
const currentSchemaIds = new Set(schemas$1.map(s => s.id).filter(Boolean));
|
|
1304
|
+
// Clean up subscriptions for schemas that are no longer in the list
|
|
1305
|
+
for (const [schema, subscription] of subscriptionsRef.current.entries()) {
|
|
1306
|
+
if (schema.id && !currentSchemaIds.has(schema.id)) {
|
|
1307
|
+
// Schema is no longer in the list, clean up subscription
|
|
1308
|
+
subscription.unsubscribe();
|
|
1309
|
+
subscriptionsRef.current.delete(schema);
|
|
1310
|
+
loadingSchemasRef.current.delete(schema);
|
|
1311
|
+
}
|
|
1312
|
+
}
|
|
1313
|
+
// Update loading state based on remaining loading schemas
|
|
1314
|
+
if (loadingSchemasRef.current.size === 0 && isLoading) {
|
|
1315
|
+
setIsLoading(false);
|
|
1316
|
+
}
|
|
1317
|
+
}, [schemas$1, isLoading]);
|
|
1318
|
+
// Fetch schemas on initial mount when client is ready
|
|
1319
|
+
useEffect(() => {
|
|
1320
|
+
if (!isClientReady) {
|
|
1321
|
+
return;
|
|
1322
|
+
}
|
|
1323
|
+
// Initial fetch when client becomes ready
|
|
1324
|
+
fetchSchemas();
|
|
1325
|
+
}, [isClientReady, fetchSchemas]);
|
|
1326
|
+
// Refetch schemas when table data actually changes (not just reference)
|
|
1327
|
+
useEffect(() => {
|
|
1328
|
+
if (!isClientReady || !schemasTableData) {
|
|
1329
|
+
return;
|
|
1330
|
+
}
|
|
1331
|
+
// Check if schemasTableData actually changed by comparing with previous value
|
|
1332
|
+
const prevData = previousSchemasTableDataRef.current;
|
|
1333
|
+
const prevDataJson = prevData ? JSON.stringify(prevData) : 'undefined';
|
|
1334
|
+
const currDataJson = schemasTableData ? JSON.stringify(schemasTableData) : 'undefined';
|
|
1335
|
+
if (prevDataJson === currDataJson && prevData !== undefined) {
|
|
1336
|
+
// Data hasn't actually changed, skip refetch
|
|
1337
|
+
return;
|
|
1338
|
+
}
|
|
1339
|
+
// Update ref with current data
|
|
1340
|
+
previousSchemasTableDataRef.current = schemasTableData;
|
|
1341
|
+
// Extract identifying information from current schemas in state (using ref to avoid dependency)
|
|
1342
|
+
// Use schemaFileId if available, otherwise fall back to name+version
|
|
1343
|
+
const currentSchemasSet = new Set();
|
|
1344
|
+
for (const schema of schemasRef.current) {
|
|
1345
|
+
const schemaFileId = schema.id || schema.schemaFileId;
|
|
1346
|
+
if (schemaFileId) {
|
|
1347
|
+
currentSchemasSet.add(schemaFileId);
|
|
1348
|
+
}
|
|
1349
|
+
else {
|
|
1350
|
+
// Fallback to name+version if schemaFileId not available
|
|
1351
|
+
const name = schema.metadata?.name;
|
|
1352
|
+
const version = schema.version;
|
|
1353
|
+
if (name && version !== undefined) {
|
|
1354
|
+
currentSchemasSet.add(`${name}:${version}`);
|
|
1355
|
+
}
|
|
1356
|
+
}
|
|
1357
|
+
}
|
|
1358
|
+
// Extract identifying information from schemasTableData
|
|
1359
|
+
const tableDataSchemasSet = new Set();
|
|
1360
|
+
for (const dbSchema of schemasTableData) {
|
|
1361
|
+
// Skip internal Seed Protocol schema for comparison (it's filtered out by Schema.all())
|
|
1362
|
+
if (dbSchema.name === 'Seed Protocol') {
|
|
1363
|
+
continue;
|
|
1364
|
+
}
|
|
1365
|
+
if (dbSchema.schemaFileId) {
|
|
1366
|
+
tableDataSchemasSet.add(dbSchema.schemaFileId);
|
|
1367
|
+
}
|
|
1368
|
+
else {
|
|
1369
|
+
// Fallback to name+version if schemaFileId not available
|
|
1370
|
+
if (dbSchema.name && dbSchema.version !== undefined) {
|
|
1371
|
+
tableDataSchemasSet.add(`${dbSchema.name}:${dbSchema.version}`);
|
|
1372
|
+
}
|
|
1373
|
+
}
|
|
1374
|
+
}
|
|
1375
|
+
// Compare sets to detect changes
|
|
1376
|
+
const setsAreEqual = currentSchemasSet.size === tableDataSchemasSet.size &&
|
|
1377
|
+
[...currentSchemasSet].every(id => tableDataSchemasSet.has(id));
|
|
1378
|
+
if (setsAreEqual) {
|
|
1379
|
+
// Schemas in state match table data, skip refetch
|
|
1380
|
+
return;
|
|
1381
|
+
}
|
|
1382
|
+
// Schemas have changed, fetch updated schemas
|
|
1383
|
+
fetchSchemas();
|
|
1384
|
+
}, [isClientReady, schemasTableData, fetchSchemas]); // Removed 'schemas' from dependencies to break the loop
|
|
1385
|
+
// Cleanup all subscriptions on unmount
|
|
1386
|
+
useEffect(() => {
|
|
1387
|
+
return () => {
|
|
1388
|
+
subscriptionsRef.current.forEach(sub => sub.unsubscribe());
|
|
1389
|
+
subscriptionsRef.current.clear();
|
|
1390
|
+
loadingSchemasRef.current.clear();
|
|
1391
|
+
};
|
|
1392
|
+
}, []);
|
|
1393
|
+
return {
|
|
1394
|
+
schemas: schemas$1,
|
|
1395
|
+
isLoading,
|
|
1396
|
+
error,
|
|
1397
|
+
};
|
|
1398
|
+
};
|
|
1399
|
+
const useCreateSchema = () => {
|
|
1400
|
+
const errorRef = useRef(null);
|
|
1401
|
+
const subscriptionRef = useRef(null);
|
|
1402
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
1403
|
+
const [error, setError] = useState(null);
|
|
1404
|
+
const createSchema = useCallback((schemaName) => {
|
|
1405
|
+
setIsLoading(true);
|
|
1406
|
+
const schema = Schema.create(schemaName);
|
|
1407
|
+
const subscription = schema.getService().subscribe((snapshot) => {
|
|
1408
|
+
if (snapshot.value === 'error') {
|
|
1409
|
+
errorRef.current = new Error('Failed to create schema');
|
|
1410
|
+
}
|
|
1411
|
+
if (snapshot.value === 'idle') {
|
|
1412
|
+
setIsLoading(false);
|
|
1413
|
+
}
|
|
1414
|
+
});
|
|
1415
|
+
subscriptionRef.current = subscription;
|
|
1416
|
+
return schema;
|
|
1417
|
+
}, [setIsLoading]);
|
|
1418
|
+
useEffect(() => {
|
|
1419
|
+
setError(errorRef.current);
|
|
1420
|
+
}, [errorRef.current]);
|
|
1421
|
+
return {
|
|
1422
|
+
createSchema,
|
|
1423
|
+
isLoading,
|
|
1424
|
+
error,
|
|
1425
|
+
};
|
|
1426
|
+
};
|
|
1427
|
+
const useAllSchemaVersions = () => {
|
|
1428
|
+
const [schemaInstances, setSchemaInstances] = useState();
|
|
1429
|
+
const schemaInstancesRef = useRef(new Map());
|
|
1430
|
+
const isClientReady = useIsClientReady();
|
|
1431
|
+
const fetchSchemas = useCallback(async () => {
|
|
1432
|
+
if (!isClientReady) {
|
|
1433
|
+
return;
|
|
1434
|
+
}
|
|
1435
|
+
try {
|
|
1436
|
+
// Use DB-first approach: load all schemas from database
|
|
1437
|
+
// This will also import any missing schemas from files
|
|
1438
|
+
const allSchemasData = await loadAllSchemasFromDb();
|
|
1439
|
+
// Extract unique schema names
|
|
1440
|
+
const schemaNames = new Set();
|
|
1441
|
+
for (const schemaData of allSchemasData) {
|
|
1442
|
+
const schemaName = schemaData.schema.metadata?.name;
|
|
1443
|
+
if (schemaName) {
|
|
1444
|
+
schemaNames.add(schemaName);
|
|
1445
|
+
}
|
|
1446
|
+
}
|
|
1447
|
+
// Create/update Schema instances
|
|
1448
|
+
const currentInstances = new Map();
|
|
1449
|
+
for (const schemaName of schemaNames) {
|
|
1450
|
+
// Reuse existing instance if it exists
|
|
1451
|
+
if (schemaInstancesRef.current.has(schemaName)) {
|
|
1452
|
+
const existingInstance = schemaInstancesRef.current.get(schemaName);
|
|
1453
|
+
currentInstances.set(schemaName, existingInstance);
|
|
1454
|
+
}
|
|
1455
|
+
else {
|
|
1456
|
+
// Create new instance
|
|
1457
|
+
const schema = Schema.create(schemaName);
|
|
1458
|
+
currentInstances.set(schemaName, schema);
|
|
1459
|
+
}
|
|
1460
|
+
}
|
|
1461
|
+
// Cleanup instances that are no longer needed
|
|
1462
|
+
for (const [name, instance] of schemaInstancesRef.current.entries()) {
|
|
1463
|
+
if (!schemaNames.has(name)) {
|
|
1464
|
+
instance.unload();
|
|
1465
|
+
}
|
|
1466
|
+
}
|
|
1467
|
+
// Update ref and state
|
|
1468
|
+
schemaInstancesRef.current = currentInstances;
|
|
1469
|
+
setSchemaInstances(Array.from(currentInstances.values()));
|
|
1470
|
+
}
|
|
1471
|
+
catch (error) {
|
|
1472
|
+
logger('Error fetching all schema versions from database:', error);
|
|
1473
|
+
setSchemaInstances(null);
|
|
1474
|
+
}
|
|
1475
|
+
}, [isClientReady]);
|
|
1476
|
+
useEffect(() => {
|
|
1477
|
+
if (!isClientReady) {
|
|
1478
|
+
return;
|
|
1479
|
+
}
|
|
1480
|
+
fetchSchemas();
|
|
1481
|
+
}, [isClientReady, fetchSchemas]);
|
|
1482
|
+
// Cleanup on unmount
|
|
1483
|
+
useEffect(() => {
|
|
1484
|
+
return () => {
|
|
1485
|
+
schemaInstancesRef.current.forEach((instance) => {
|
|
1486
|
+
instance.unload();
|
|
1487
|
+
});
|
|
1488
|
+
schemaInstancesRef.current.clear();
|
|
1489
|
+
};
|
|
1490
|
+
}, []);
|
|
1491
|
+
return schemaInstances;
|
|
1492
|
+
};
|
|
1493
|
+
|
|
1494
|
+
/**
|
|
1495
|
+
* Hook to get all Model instances for a specific schema
|
|
1496
|
+
* Uses useLiveQuery to watch for changes in the models table and automatically
|
|
1497
|
+
* updates the returned Model instances when changes occur.
|
|
1498
|
+
* @param schemaId - The schema ID (schema file ID) or schema name to get models from
|
|
1499
|
+
* @returns Array of Model instances belonging to the schema
|
|
1500
|
+
*/
|
|
1501
|
+
const useModels = (schemaId) => {
|
|
1502
|
+
const [models$1, setModels] = useState([]);
|
|
1503
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
1504
|
+
const [error, setError] = useState(null);
|
|
1505
|
+
const isClientReady = useIsClientReady();
|
|
1506
|
+
// Watch the models table for changes via model_schemas join table
|
|
1507
|
+
// Memoize the query so it's stable across renders - this is critical for distinctUntilChanged to work
|
|
1508
|
+
const db = isClientReady ? BaseDb.getAppDb() : null;
|
|
1509
|
+
const modelsQuery = useMemo(() => {
|
|
1510
|
+
if (!db || !schemaId)
|
|
1511
|
+
return null;
|
|
1512
|
+
return db
|
|
1513
|
+
.select({
|
|
1514
|
+
modelFileId: models.schemaFileId,
|
|
1515
|
+
modelName: models.name,
|
|
1516
|
+
})
|
|
1517
|
+
.from(schemas)
|
|
1518
|
+
.innerJoin(modelSchemas, eq(schemas.id, modelSchemas.schemaId))
|
|
1519
|
+
.innerJoin(models, eq(modelSchemas.modelId, models.id))
|
|
1520
|
+
.where(or(eq(schemas.schemaFileId, schemaId), eq(schemas.name, schemaId)));
|
|
1521
|
+
}, [db, isClientReady, schemaId]);
|
|
1522
|
+
const modelsTableData = useLiveQuery(modelsQuery);
|
|
1523
|
+
const fetchModels = useCallback(async () => {
|
|
1524
|
+
if (!schemaId) {
|
|
1525
|
+
setModels([]);
|
|
1526
|
+
setIsLoading(false);
|
|
1527
|
+
setError(null);
|
|
1528
|
+
return;
|
|
1529
|
+
}
|
|
1530
|
+
try {
|
|
1531
|
+
setIsLoading(true);
|
|
1532
|
+
const timestamp = Date.now();
|
|
1533
|
+
console.log(`[useModels.fetchModels] [${timestamp}] Starting fetch, modelsTableData count:`, modelsTableData?.length, 'models:', modelsTableData?.map(m => m.modelName));
|
|
1534
|
+
// Use Model.createBySchemaId to get Model instances (handles caching)
|
|
1535
|
+
const modelInstances = await Model.createBySchemaId(schemaId);
|
|
1536
|
+
console.log(`[useModels.fetchModels] [${timestamp}] Model.createBySchemaId() returned:`, modelInstances.length, 'models:', modelInstances.map((m) => m.modelName));
|
|
1537
|
+
setModels(prev => {
|
|
1538
|
+
// Check if anything actually changed
|
|
1539
|
+
if (prev.length !== modelInstances.length) {
|
|
1540
|
+
console.log('[useModels] Length changed:', prev.length, '->', modelInstances.length);
|
|
1541
|
+
return modelInstances;
|
|
1542
|
+
}
|
|
1543
|
+
// Compare by modelFileId (schemaFileId) or name
|
|
1544
|
+
const hasChanged = modelInstances.some((model, i) => !prev[i] ||
|
|
1545
|
+
model.id !== prev[i].id ||
|
|
1546
|
+
model.modelName !== prev[i].modelName);
|
|
1547
|
+
if (hasChanged) {
|
|
1548
|
+
console.log('[useModels] Models changed (by ID or name)');
|
|
1549
|
+
}
|
|
1550
|
+
else {
|
|
1551
|
+
console.log('[useModels] No changes detected');
|
|
1552
|
+
}
|
|
1553
|
+
return hasChanged ? modelInstances : prev;
|
|
1554
|
+
});
|
|
1555
|
+
setError(null);
|
|
1556
|
+
setIsLoading(false);
|
|
1557
|
+
}
|
|
1558
|
+
catch (error) {
|
|
1559
|
+
setError(error);
|
|
1560
|
+
setIsLoading(false);
|
|
1561
|
+
}
|
|
1562
|
+
}, [schemaId]);
|
|
1563
|
+
// Fetch models on initial mount when client is ready
|
|
1564
|
+
useEffect(() => {
|
|
1565
|
+
if (!isClientReady) {
|
|
1566
|
+
return;
|
|
1567
|
+
}
|
|
1568
|
+
// Initial fetch when client becomes ready
|
|
1569
|
+
fetchModels();
|
|
1570
|
+
}, [isClientReady, fetchModels]);
|
|
1571
|
+
// Refetch models when table data actually changes (not just reference)
|
|
1572
|
+
useEffect(() => {
|
|
1573
|
+
if (!isClientReady || !modelsTableData || !schemaId) {
|
|
1574
|
+
return;
|
|
1575
|
+
}
|
|
1576
|
+
// Extract identifying information from current models in state
|
|
1577
|
+
// Use modelFileId (schemaFileId) if available, otherwise fall back to name
|
|
1578
|
+
const currentModelsSet = new Set();
|
|
1579
|
+
for (const model of models$1) {
|
|
1580
|
+
const modelFileId = model.id || model.modelFileId;
|
|
1581
|
+
if (modelFileId) {
|
|
1582
|
+
currentModelsSet.add(modelFileId);
|
|
1583
|
+
}
|
|
1584
|
+
else {
|
|
1585
|
+
// Fallback to name if modelFileId not available
|
|
1586
|
+
const name = model.modelName;
|
|
1587
|
+
if (name) {
|
|
1588
|
+
currentModelsSet.add(name);
|
|
1589
|
+
}
|
|
1590
|
+
}
|
|
1591
|
+
}
|
|
1592
|
+
// Extract identifying information from modelsTableData
|
|
1593
|
+
const tableDataModelsSet = new Set();
|
|
1594
|
+
for (const dbModel of modelsTableData) {
|
|
1595
|
+
if (dbModel.modelFileId) {
|
|
1596
|
+
tableDataModelsSet.add(dbModel.modelFileId);
|
|
1597
|
+
}
|
|
1598
|
+
else {
|
|
1599
|
+
// Fallback to name if modelFileId not available
|
|
1600
|
+
if (dbModel.modelName) {
|
|
1601
|
+
tableDataModelsSet.add(dbModel.modelName);
|
|
1602
|
+
}
|
|
1603
|
+
}
|
|
1604
|
+
}
|
|
1605
|
+
// Compare sets to detect changes
|
|
1606
|
+
const setsAreEqual = currentModelsSet.size === tableDataModelsSet.size &&
|
|
1607
|
+
[...currentModelsSet].every(id => tableDataModelsSet.has(id));
|
|
1608
|
+
if (setsAreEqual) {
|
|
1609
|
+
// Models in state match table data, skip refetch
|
|
1610
|
+
return;
|
|
1611
|
+
}
|
|
1612
|
+
// Models have changed - log for debugging
|
|
1613
|
+
console.log('[useModels] modelsTableData changed:', {
|
|
1614
|
+
currentCount: currentModelsSet.size,
|
|
1615
|
+
tableDataCount: tableDataModelsSet.size,
|
|
1616
|
+
currentIds: Array.from(currentModelsSet),
|
|
1617
|
+
tableDataIds: Array.from(tableDataModelsSet),
|
|
1618
|
+
tableDataNames: modelsTableData.map(m => m.modelName),
|
|
1619
|
+
tableDataFull: modelsTableData.map(m => ({ name: m.modelName, modelFileId: m.modelFileId })),
|
|
1620
|
+
});
|
|
1621
|
+
// Models have changed, fetch updated models
|
|
1622
|
+
fetchModels();
|
|
1623
|
+
}, [isClientReady, modelsTableData, models$1, fetchModels, schemaId]);
|
|
1624
|
+
return {
|
|
1625
|
+
models: models$1,
|
|
1626
|
+
isLoading,
|
|
1627
|
+
error,
|
|
1628
|
+
};
|
|
1629
|
+
};
|
|
1630
|
+
/**
|
|
1631
|
+
* Hook to get a specific Model instance
|
|
1632
|
+
* Can be called in two ways:
|
|
1633
|
+
* 1. With schemaId and modelName: useModel(schemaId, modelName)
|
|
1634
|
+
* 2. With modelId: useModel(modelId)
|
|
1635
|
+
*
|
|
1636
|
+
* @param schemaIdOrModelId - The schema ID (schema file ID) OR the model ID (modelFileId)
|
|
1637
|
+
* @param modelName - The name of the model to retrieve (required if first param is schemaId)
|
|
1638
|
+
* @returns Object with model, isLoading, and error
|
|
1639
|
+
*/
|
|
1640
|
+
const useModel = (schemaIdOrModelId, modelName) => {
|
|
1641
|
+
const isClientReady = useIsClientReady();
|
|
1642
|
+
const [model, setModel] = useState(undefined);
|
|
1643
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
1644
|
+
const [error, setError] = useState(null);
|
|
1645
|
+
const subscriptionRef = useRef(undefined);
|
|
1646
|
+
const [, setVersion] = useState(0); // Version counter to force re-renders
|
|
1647
|
+
// If modelName is provided, treat first param as schemaId
|
|
1648
|
+
// Otherwise, treat first param as modelId
|
|
1649
|
+
const isModelIdLookup = modelName === undefined || modelName === null;
|
|
1650
|
+
// Determine initial loading state
|
|
1651
|
+
useMemo(() => {
|
|
1652
|
+
if (!isClientReady)
|
|
1653
|
+
return false;
|
|
1654
|
+
if (isModelIdLookup) {
|
|
1655
|
+
return !!schemaIdOrModelId;
|
|
1656
|
+
}
|
|
1657
|
+
else {
|
|
1658
|
+
return !!(schemaIdOrModelId && modelName);
|
|
1659
|
+
}
|
|
1660
|
+
}, [isClientReady, isModelIdLookup, schemaIdOrModelId, modelName]);
|
|
1661
|
+
// Lookup model by ID if needed
|
|
1662
|
+
useEffect(() => {
|
|
1663
|
+
if (!isClientReady || !isModelIdLookup || !schemaIdOrModelId) {
|
|
1664
|
+
setModel(undefined);
|
|
1665
|
+
setIsLoading(false);
|
|
1666
|
+
setError(null);
|
|
1667
|
+
return;
|
|
1668
|
+
}
|
|
1669
|
+
const lookupModelById = async () => {
|
|
1670
|
+
try {
|
|
1671
|
+
setIsLoading(true);
|
|
1672
|
+
setError(null);
|
|
1673
|
+
// Use Model.createById which handles cache + DB lookup
|
|
1674
|
+
const foundModel = await Model.createById(schemaIdOrModelId);
|
|
1675
|
+
setModel(foundModel || undefined);
|
|
1676
|
+
setIsLoading(false);
|
|
1677
|
+
setError(null);
|
|
1678
|
+
}
|
|
1679
|
+
catch (error) {
|
|
1680
|
+
console.error('[useModel] Error looking up model by ID:', error);
|
|
1681
|
+
setModel(undefined);
|
|
1682
|
+
setIsLoading(false);
|
|
1683
|
+
setError(error);
|
|
1684
|
+
}
|
|
1685
|
+
};
|
|
1686
|
+
lookupModelById();
|
|
1687
|
+
}, [isClientReady, isModelIdLookup, schemaIdOrModelId]);
|
|
1688
|
+
// Subscribe to service changes when model is available (for modelId lookup)
|
|
1689
|
+
useEffect(() => {
|
|
1690
|
+
if (!isModelIdLookup || !model) {
|
|
1691
|
+
// Clean up subscription if model is not available
|
|
1692
|
+
subscriptionRef.current?.unsubscribe();
|
|
1693
|
+
subscriptionRef.current = undefined;
|
|
1694
|
+
return;
|
|
1695
|
+
}
|
|
1696
|
+
// Clean up previous subscription
|
|
1697
|
+
subscriptionRef.current?.unsubscribe();
|
|
1698
|
+
// Subscribe to service changes
|
|
1699
|
+
const subscription = model.getService().subscribe((snapshot) => {
|
|
1700
|
+
// Force re-render by incrementing version counter
|
|
1701
|
+
setVersion(prev => prev + 1);
|
|
1702
|
+
});
|
|
1703
|
+
subscriptionRef.current = subscription;
|
|
1704
|
+
return () => {
|
|
1705
|
+
subscriptionRef.current?.unsubscribe();
|
|
1706
|
+
subscriptionRef.current = undefined;
|
|
1707
|
+
};
|
|
1708
|
+
}, [isModelIdLookup, model]);
|
|
1709
|
+
// If doing modelId lookup, return the model directly
|
|
1710
|
+
if (isModelIdLookup) {
|
|
1711
|
+
return {
|
|
1712
|
+
model,
|
|
1713
|
+
isLoading,
|
|
1714
|
+
error,
|
|
1715
|
+
};
|
|
1716
|
+
}
|
|
1717
|
+
// Otherwise, use schemaId + modelName lookup via useModels
|
|
1718
|
+
const { models: modelsList, isLoading: modelsLoading, error: modelsError } = useModels(schemaIdOrModelId);
|
|
1719
|
+
const foundModel = useMemo(() => {
|
|
1720
|
+
if (!modelName) {
|
|
1721
|
+
return undefined;
|
|
1722
|
+
}
|
|
1723
|
+
// Try both modelName property and name getter for compatibility
|
|
1724
|
+
return modelsList.find((m) => {
|
|
1725
|
+
const mName = m.modelName ?? m.name;
|
|
1726
|
+
return mName === modelName;
|
|
1727
|
+
});
|
|
1728
|
+
}, [modelsList, modelName]);
|
|
1729
|
+
// Subscribe to service changes when model is available (for schemaId + modelName lookup)
|
|
1730
|
+
useEffect(() => {
|
|
1731
|
+
if (isModelIdLookup || !foundModel) {
|
|
1732
|
+
// Clean up subscription if model is not available
|
|
1733
|
+
subscriptionRef.current?.unsubscribe();
|
|
1734
|
+
subscriptionRef.current = undefined;
|
|
1735
|
+
return;
|
|
1736
|
+
}
|
|
1737
|
+
// Clean up previous subscription
|
|
1738
|
+
subscriptionRef.current?.unsubscribe();
|
|
1739
|
+
// Subscribe to service changes
|
|
1740
|
+
const subscription = foundModel.getService().subscribe((snapshot) => {
|
|
1741
|
+
// Force re-render by incrementing version counter
|
|
1742
|
+
setVersion(prev => prev + 1);
|
|
1743
|
+
});
|
|
1744
|
+
subscriptionRef.current = subscription;
|
|
1745
|
+
return () => {
|
|
1746
|
+
subscriptionRef.current?.unsubscribe();
|
|
1747
|
+
subscriptionRef.current = undefined;
|
|
1748
|
+
};
|
|
1749
|
+
}, [isModelIdLookup, foundModel]);
|
|
1750
|
+
// For schemaId + modelName lookup, derive loading/error from useModels
|
|
1751
|
+
return {
|
|
1752
|
+
model: foundModel,
|
|
1753
|
+
isLoading: modelsLoading,
|
|
1754
|
+
error: modelsError,
|
|
1755
|
+
};
|
|
1756
|
+
};
|
|
1757
|
+
|
|
1758
|
+
debug('seedSdk:browser:react:modelProperty');
|
|
1759
|
+
/**
|
|
1760
|
+
* Hook to get all ModelProperty instances for a specific model
|
|
1761
|
+
* Can be called in two ways:
|
|
1762
|
+
* 1. With schemaId and modelName: useModelProperties(schemaId, modelName)
|
|
1763
|
+
* 2. With modelId: useModelProperties(modelId)
|
|
1764
|
+
*
|
|
1765
|
+
* Uses useLiveQuery to watch for changes in the properties table and automatically
|
|
1766
|
+
* updates the returned ModelProperty instances when changes occur.
|
|
1767
|
+
*
|
|
1768
|
+
* @param schemaIdOrModelId - The schema ID (schema file ID) OR the model ID (modelFileId)
|
|
1769
|
+
* @param modelName - The name of the model to get properties from (required if first param is schemaId)
|
|
1770
|
+
* @returns Object with modelProperties array, isLoading, and error
|
|
1771
|
+
*/
|
|
1772
|
+
const useModelProperties = (schemaIdOrModelId, modelName) => {
|
|
1773
|
+
// Use useModel to handle both lookup patterns (by ID or by schemaId + modelName)
|
|
1774
|
+
const { model } = useModel(schemaIdOrModelId, modelName);
|
|
1775
|
+
// Determine the modelName for use in getPropertySchema
|
|
1776
|
+
const modelNameForProperty = useMemo(() => {
|
|
1777
|
+
if (!model)
|
|
1778
|
+
return undefined;
|
|
1779
|
+
try {
|
|
1780
|
+
return model.modelName ?? model.name;
|
|
1781
|
+
}
|
|
1782
|
+
catch {
|
|
1783
|
+
return undefined;
|
|
1784
|
+
}
|
|
1785
|
+
}, [model]);
|
|
1786
|
+
const [modelProperties, setModelProperties] = useState([]);
|
|
1787
|
+
const [isLoading, setIsLoading] = useState(false);
|
|
1788
|
+
const [error, setError] = useState(null);
|
|
1789
|
+
const isClientReady = useIsClientReady();
|
|
1790
|
+
// Get _dbId (database ID) from model context
|
|
1791
|
+
const dbModelId = useMemo(() => {
|
|
1792
|
+
if (!model)
|
|
1793
|
+
return null;
|
|
1794
|
+
try {
|
|
1795
|
+
const context = model._getSnapshotContext();
|
|
1796
|
+
return context._dbId; // _dbId is the database integer ID
|
|
1797
|
+
}
|
|
1798
|
+
catch {
|
|
1799
|
+
return null;
|
|
1800
|
+
}
|
|
1801
|
+
}, [model]);
|
|
1802
|
+
// Watch the properties table for changes
|
|
1803
|
+
// Memoize the query so it's stable across renders - this is critical for distinctUntilChanged to work
|
|
1804
|
+
const db = isClientReady ? BaseDb.getAppDb() : null;
|
|
1805
|
+
const propertiesQuery = useMemo(() => {
|
|
1806
|
+
if (!db || !dbModelId)
|
|
1807
|
+
return null;
|
|
1808
|
+
return db
|
|
1809
|
+
.select({
|
|
1810
|
+
id: properties.id,
|
|
1811
|
+
name: properties.name,
|
|
1812
|
+
dataType: properties.dataType,
|
|
1813
|
+
schemaFileId: properties.schemaFileId,
|
|
1814
|
+
})
|
|
1815
|
+
.from(properties)
|
|
1816
|
+
.where(eq(properties.modelId, dbModelId));
|
|
1817
|
+
}, [db, isClientReady, dbModelId]);
|
|
1818
|
+
const propertiesTableData = useLiveQuery(propertiesQuery);
|
|
1819
|
+
const fetchModelProperties = useCallback(async () => {
|
|
1820
|
+
if (!modelNameForProperty || !model || !schemaIdOrModelId) {
|
|
1821
|
+
setModelProperties([]);
|
|
1822
|
+
setIsLoading(false);
|
|
1823
|
+
setError(null);
|
|
1824
|
+
return;
|
|
1825
|
+
}
|
|
1826
|
+
try {
|
|
1827
|
+
setIsLoading(true);
|
|
1828
|
+
const timestamp = Date.now();
|
|
1829
|
+
console.log(`[useModelProperties.fetchModelProperties] [${timestamp}] Starting fetch, propertiesTableData count:`, propertiesTableData?.length, 'properties:', propertiesTableData?.map(p => p.name));
|
|
1830
|
+
// Use propertiesTableData (database state) as the source of truth instead of model.properties (schema file)
|
|
1831
|
+
// This ensures we get the current names even after property renames
|
|
1832
|
+
if (!propertiesTableData || propertiesTableData.length === 0) {
|
|
1833
|
+
setModelProperties([]);
|
|
1834
|
+
setError(null);
|
|
1835
|
+
setIsLoading(false);
|
|
1836
|
+
return;
|
|
1837
|
+
}
|
|
1838
|
+
const _modelProperties = [];
|
|
1839
|
+
// Iterate over propertiesTableData and create ModelProperty instances by schemaFileId
|
|
1840
|
+
// This works even when property names have changed, since schemaFileId is stable
|
|
1841
|
+
for (const dbProperty of propertiesTableData) {
|
|
1842
|
+
if (!dbProperty.schemaFileId) {
|
|
1843
|
+
// If no schemaFileId, fall back to name-based lookup (for backwards compatibility)
|
|
1844
|
+
const modelPropertyData = await getPropertySchema(modelNameForProperty, dbProperty.name);
|
|
1845
|
+
if (modelPropertyData) {
|
|
1846
|
+
const modelProperty = ModelProperty.create({
|
|
1847
|
+
...modelPropertyData,
|
|
1848
|
+
});
|
|
1849
|
+
_modelProperties.push(modelProperty);
|
|
1850
|
+
}
|
|
1851
|
+
}
|
|
1852
|
+
else {
|
|
1853
|
+
// Use createById to get/create the instance by schemaFileId (stable across renames)
|
|
1854
|
+
const modelProperty = await ModelProperty.createById(dbProperty.schemaFileId);
|
|
1855
|
+
if (modelProperty) {
|
|
1856
|
+
_modelProperties.push(modelProperty);
|
|
1857
|
+
}
|
|
1858
|
+
}
|
|
1859
|
+
}
|
|
1860
|
+
console.log(`[useModelProperties.fetchModelProperties] [${timestamp}] Created ${_modelProperties.length} ModelProperty instances`);
|
|
1861
|
+
setModelProperties(prev => {
|
|
1862
|
+
// Check if anything actually changed
|
|
1863
|
+
if (prev.length !== _modelProperties.length) {
|
|
1864
|
+
console.log('[useModelProperties] Length changed:', prev.length, '->', _modelProperties.length);
|
|
1865
|
+
return _modelProperties;
|
|
1866
|
+
}
|
|
1867
|
+
// Compare by property name or schemaFileId
|
|
1868
|
+
const hasChanged = _modelProperties.some((prop, i) => {
|
|
1869
|
+
if (!prev[i])
|
|
1870
|
+
return true;
|
|
1871
|
+
const prevContext = prev[i]._getSnapshotContext();
|
|
1872
|
+
const currContext = prop._getSnapshotContext();
|
|
1873
|
+
const prevId = prevContext?.id;
|
|
1874
|
+
const currId = currContext?.id;
|
|
1875
|
+
const prevName = prev[i].name;
|
|
1876
|
+
const currName = prop.name;
|
|
1877
|
+
return prevId !== currId || prevName !== currName;
|
|
1878
|
+
});
|
|
1879
|
+
if (hasChanged) {
|
|
1880
|
+
console.log('[useModelProperties] Properties changed (by ID or name)');
|
|
1881
|
+
}
|
|
1882
|
+
else {
|
|
1883
|
+
console.log('[useModelProperties] No changes detected');
|
|
1884
|
+
}
|
|
1885
|
+
return hasChanged ? _modelProperties : prev;
|
|
1886
|
+
});
|
|
1887
|
+
setError(null);
|
|
1888
|
+
setIsLoading(false);
|
|
1889
|
+
}
|
|
1890
|
+
catch (error) {
|
|
1891
|
+
setError(error);
|
|
1892
|
+
setIsLoading(false);
|
|
1893
|
+
}
|
|
1894
|
+
}, [modelNameForProperty, model, propertiesTableData, schemaIdOrModelId]);
|
|
1895
|
+
// Fetch model properties when dbModelId becomes available (model has finished loading)
|
|
1896
|
+
// This ensures we wait for the model to be fully loaded before trying to fetch properties
|
|
1897
|
+
useEffect(() => {
|
|
1898
|
+
if (!isClientReady || !dbModelId || !modelNameForProperty || !model || !schemaIdOrModelId) {
|
|
1899
|
+
return;
|
|
1900
|
+
}
|
|
1901
|
+
// Wait for propertiesTableData to be available before initial fetch
|
|
1902
|
+
// (it may be undefined initially while the query is starting)
|
|
1903
|
+
if (propertiesTableData === undefined) {
|
|
1904
|
+
return;
|
|
1905
|
+
}
|
|
1906
|
+
// Initial fetch when model is ready and dbModelId is available
|
|
1907
|
+
fetchModelProperties();
|
|
1908
|
+
}, [isClientReady, dbModelId, fetchModelProperties, modelNameForProperty, model, schemaIdOrModelId, propertiesTableData]);
|
|
1909
|
+
// Refetch model properties when table data actually changes (not just reference)
|
|
1910
|
+
useEffect(() => {
|
|
1911
|
+
if (!isClientReady || !modelNameForProperty || !model || !schemaIdOrModelId || !dbModelId) {
|
|
1912
|
+
return;
|
|
1913
|
+
}
|
|
1914
|
+
// If propertiesTableData is undefined, the query hasn't started yet - wait for it
|
|
1915
|
+
if (propertiesTableData === undefined) {
|
|
1916
|
+
return;
|
|
1917
|
+
}
|
|
1918
|
+
// Extract identifying information from current properties in state
|
|
1919
|
+
const currentPropertiesSet = new Set();
|
|
1920
|
+
for (const prop of modelProperties) {
|
|
1921
|
+
const context = prop._getSnapshotContext();
|
|
1922
|
+
const propertyFileId = context?.id;
|
|
1923
|
+
if (propertyFileId) {
|
|
1924
|
+
currentPropertiesSet.add(propertyFileId);
|
|
1925
|
+
}
|
|
1926
|
+
else {
|
|
1927
|
+
// Fallback to name if propertyFileId not available
|
|
1928
|
+
const name = prop.name;
|
|
1929
|
+
if (name) {
|
|
1930
|
+
currentPropertiesSet.add(name);
|
|
1931
|
+
}
|
|
1932
|
+
}
|
|
1933
|
+
}
|
|
1934
|
+
// Extract identifying information from propertiesTableData
|
|
1935
|
+
const tableDataPropertiesSet = new Set();
|
|
1936
|
+
for (const dbProperty of propertiesTableData) {
|
|
1937
|
+
if (dbProperty.schemaFileId) {
|
|
1938
|
+
tableDataPropertiesSet.add(dbProperty.schemaFileId);
|
|
1939
|
+
}
|
|
1940
|
+
else {
|
|
1941
|
+
// Fallback to name if schemaFileId not available
|
|
1942
|
+
if (dbProperty.name) {
|
|
1943
|
+
tableDataPropertiesSet.add(dbProperty.name);
|
|
1944
|
+
}
|
|
1945
|
+
}
|
|
1946
|
+
}
|
|
1947
|
+
// Compare sets to detect changes
|
|
1948
|
+
// If currentPropertiesSet is empty but tableDataPropertiesSet has data, that's a change
|
|
1949
|
+
const setsAreEqual = currentPropertiesSet.size === tableDataPropertiesSet.size &&
|
|
1950
|
+
currentPropertiesSet.size > 0 &&
|
|
1951
|
+
[...currentPropertiesSet].every(id => tableDataPropertiesSet.has(id));
|
|
1952
|
+
if (setsAreEqual) {
|
|
1953
|
+
// Properties in state match table data, skip refetch
|
|
1954
|
+
return;
|
|
1955
|
+
}
|
|
1956
|
+
// Properties have changed - log for debugging
|
|
1957
|
+
console.log('[useModelProperties] propertiesTableData changed:', {
|
|
1958
|
+
currentCount: currentPropertiesSet.size,
|
|
1959
|
+
tableDataCount: tableDataPropertiesSet.size,
|
|
1960
|
+
currentIds: Array.from(currentPropertiesSet),
|
|
1961
|
+
tableDataIds: Array.from(tableDataPropertiesSet),
|
|
1962
|
+
tableDataNames: propertiesTableData.map(p => p.name),
|
|
1963
|
+
tableDataFull: propertiesTableData.map(p => ({ name: p.name, schemaFileId: p.schemaFileId })),
|
|
1964
|
+
});
|
|
1965
|
+
// Properties have changed, fetch updated properties
|
|
1966
|
+
fetchModelProperties();
|
|
1967
|
+
}, [isClientReady, propertiesTableData, modelProperties, fetchModelProperties, modelNameForProperty, model, schemaIdOrModelId]);
|
|
1968
|
+
return {
|
|
1969
|
+
modelProperties,
|
|
1970
|
+
isLoading,
|
|
1971
|
+
error,
|
|
1972
|
+
};
|
|
1973
|
+
};
|
|
1974
|
+
/**
|
|
1975
|
+
* Helper function to get property schema by modelFileId and propertyName
|
|
1976
|
+
*/
|
|
1977
|
+
const getPropertySchemaByModelFileId = async (modelFileId, propertyName) => {
|
|
1978
|
+
// Get model by modelFileId
|
|
1979
|
+
const model = await Model.createById(modelFileId);
|
|
1980
|
+
if (!model) {
|
|
1981
|
+
return undefined;
|
|
1982
|
+
}
|
|
1983
|
+
// Get modelName from model
|
|
1984
|
+
const modelName = model.modelName ?? model.name;
|
|
1985
|
+
if (!modelName) {
|
|
1986
|
+
return undefined;
|
|
1987
|
+
}
|
|
1988
|
+
// Use existing getPropertySchema function
|
|
1989
|
+
return getPropertySchema(modelName, propertyName);
|
|
1990
|
+
};
|
|
1991
|
+
function useModelProperty(arg1, arg2, arg3) {
|
|
1992
|
+
// Determine initial loading state - start loading if we have valid parameters
|
|
1993
|
+
const initialLoadingState = useMemo(() => {
|
|
1994
|
+
if (arg3 !== undefined && arg3 !== null) {
|
|
1995
|
+
// Three arguments: schemaId, modelName, propertyName
|
|
1996
|
+
return !!(arg1 && arg2 && arg3);
|
|
1997
|
+
}
|
|
1998
|
+
else if (arg2 !== undefined && arg2 !== null) {
|
|
1999
|
+
// Two arguments: modelFileId, propertyName
|
|
2000
|
+
return !!(arg1 && arg2);
|
|
2001
|
+
}
|
|
2002
|
+
else {
|
|
2003
|
+
// One argument: propertyFileId
|
|
2004
|
+
return !!arg1;
|
|
2005
|
+
}
|
|
2006
|
+
}, [arg1, arg2, arg3]);
|
|
2007
|
+
const [modelProperty, setModelProperty] = useState(undefined);
|
|
2008
|
+
const [isLoading, setIsLoading] = useState(initialLoadingState);
|
|
2009
|
+
const [error, setError] = useState(null);
|
|
2010
|
+
const subscriptionRef = useRef(undefined);
|
|
2011
|
+
const isClientReady = useIsClientReady();
|
|
2012
|
+
// Determine which lookup mode we're in based on arguments
|
|
2013
|
+
const lookupMode = useMemo(() => {
|
|
2014
|
+
if (arg3 !== undefined && arg3 !== null) {
|
|
2015
|
+
// Three arguments: schemaId, modelName, propertyName
|
|
2016
|
+
return { type: 'schemaId', schemaId: arg1, modelName: arg2, propertyName: arg3 };
|
|
2017
|
+
}
|
|
2018
|
+
else if (arg2 !== undefined && arg2 !== null) {
|
|
2019
|
+
// Two arguments: modelFileId, propertyName
|
|
2020
|
+
return { type: 'modelFileId', modelFileId: arg1, propertyName: arg2 };
|
|
2021
|
+
}
|
|
2022
|
+
else {
|
|
2023
|
+
// One argument: propertyFileId
|
|
2024
|
+
return { type: 'propertyFileId', propertyFileId: arg1 };
|
|
2025
|
+
}
|
|
2026
|
+
}, [arg1, arg2, arg3]);
|
|
2027
|
+
// Determine if we should be loading based on parameters
|
|
2028
|
+
const shouldLoad = useMemo(() => {
|
|
2029
|
+
if (!isClientReady)
|
|
2030
|
+
return false;
|
|
2031
|
+
if (lookupMode.type === 'propertyFileId') {
|
|
2032
|
+
return !!lookupMode.propertyFileId;
|
|
2033
|
+
}
|
|
2034
|
+
else if (lookupMode.type === 'modelFileId') {
|
|
2035
|
+
return !!(lookupMode.modelFileId && lookupMode.propertyName);
|
|
2036
|
+
}
|
|
2037
|
+
else {
|
|
2038
|
+
return !!(lookupMode.schemaId && lookupMode.modelName && lookupMode.propertyName);
|
|
2039
|
+
}
|
|
2040
|
+
}, [isClientReady, lookupMode]);
|
|
2041
|
+
const updateModelProperty = useCallback(async () => {
|
|
2042
|
+
if (!isClientReady) {
|
|
2043
|
+
setModelProperty(undefined);
|
|
2044
|
+
setIsLoading(false);
|
|
2045
|
+
setError(null);
|
|
2046
|
+
return;
|
|
2047
|
+
}
|
|
2048
|
+
let propertyData;
|
|
2049
|
+
let resolvedModelName;
|
|
2050
|
+
try {
|
|
2051
|
+
setIsLoading(true);
|
|
2052
|
+
setError(null);
|
|
2053
|
+
if (lookupMode.type === 'propertyFileId') {
|
|
2054
|
+
if (!lookupMode.propertyFileId) {
|
|
2055
|
+
setModelProperty(undefined);
|
|
2056
|
+
setIsLoading(false);
|
|
2057
|
+
setError(null);
|
|
2058
|
+
return;
|
|
2059
|
+
}
|
|
2060
|
+
// Use ModelProperty.createById for propertyFileId lookup
|
|
2061
|
+
const foundProperty = await ModelProperty.createById(lookupMode.propertyFileId);
|
|
2062
|
+
if (foundProperty) {
|
|
2063
|
+
setModelProperty(foundProperty);
|
|
2064
|
+
setIsLoading(false);
|
|
2065
|
+
setError(null);
|
|
2066
|
+
}
|
|
2067
|
+
else {
|
|
2068
|
+
setModelProperty(undefined);
|
|
2069
|
+
setIsLoading(false);
|
|
2070
|
+
setError(null);
|
|
2071
|
+
}
|
|
2072
|
+
return;
|
|
2073
|
+
}
|
|
2074
|
+
else if (lookupMode.type === 'modelFileId') {
|
|
2075
|
+
if (!lookupMode.modelFileId || !lookupMode.propertyName) {
|
|
2076
|
+
setModelProperty(undefined);
|
|
2077
|
+
setIsLoading(false);
|
|
2078
|
+
setError(null);
|
|
2079
|
+
return;
|
|
2080
|
+
}
|
|
2081
|
+
// Get property schema by modelFileId and propertyName
|
|
2082
|
+
// This function already gets the model and resolves modelName
|
|
2083
|
+
propertyData = await getPropertySchemaByModelFileId(lookupMode.modelFileId, lookupMode.propertyName);
|
|
2084
|
+
// Get modelName from model (needed for ModelProperty.create)
|
|
2085
|
+
const model = await Model.createById(lookupMode.modelFileId);
|
|
2086
|
+
resolvedModelName = model?.modelName ?? model?.name;
|
|
2087
|
+
}
|
|
2088
|
+
else {
|
|
2089
|
+
// lookupMode.type === 'schemaId'
|
|
2090
|
+
if (!lookupMode.schemaId || !lookupMode.modelName || !lookupMode.propertyName) {
|
|
2091
|
+
setModelProperty(undefined);
|
|
2092
|
+
setIsLoading(false);
|
|
2093
|
+
setError(null);
|
|
2094
|
+
return;
|
|
2095
|
+
}
|
|
2096
|
+
// Use existing getPropertySchema for schemaId + modelName + propertyName
|
|
2097
|
+
propertyData = await getPropertySchema(lookupMode.modelName, lookupMode.propertyName);
|
|
2098
|
+
resolvedModelName = lookupMode.modelName;
|
|
2099
|
+
}
|
|
2100
|
+
if (propertyData && resolvedModelName) {
|
|
2101
|
+
const createdProperty = ModelProperty.create({
|
|
2102
|
+
...propertyData,
|
|
2103
|
+
modelName: resolvedModelName,
|
|
2104
|
+
});
|
|
2105
|
+
setModelProperty(createdProperty);
|
|
2106
|
+
setIsLoading(false);
|
|
2107
|
+
setError(null);
|
|
2108
|
+
}
|
|
2109
|
+
else {
|
|
2110
|
+
setModelProperty(undefined);
|
|
2111
|
+
setIsLoading(false);
|
|
2112
|
+
setError(null);
|
|
2113
|
+
}
|
|
2114
|
+
}
|
|
2115
|
+
catch (error) {
|
|
2116
|
+
console.error('[useModelProperty] Error updating model property:', error);
|
|
2117
|
+
setModelProperty(undefined);
|
|
2118
|
+
setIsLoading(false);
|
|
2119
|
+
setError(error);
|
|
2120
|
+
}
|
|
2121
|
+
}, [isClientReady, lookupMode.type, lookupMode.propertyFileId, lookupMode.modelFileId, lookupMode.propertyName, lookupMode.schemaId, lookupMode.modelName]);
|
|
2122
|
+
// Fetch/refetch when lookup parameters change or client becomes ready
|
|
2123
|
+
useEffect(() => {
|
|
2124
|
+
if (!shouldLoad) {
|
|
2125
|
+
setModelProperty(undefined);
|
|
2126
|
+
setIsLoading(false);
|
|
2127
|
+
setError(null);
|
|
2128
|
+
return;
|
|
2129
|
+
}
|
|
2130
|
+
updateModelProperty();
|
|
2131
|
+
}, [shouldLoad, updateModelProperty]);
|
|
2132
|
+
// Subscribe to service changes when modelProperty is available
|
|
2133
|
+
useEffect(() => {
|
|
2134
|
+
if (!modelProperty) {
|
|
2135
|
+
return;
|
|
2136
|
+
}
|
|
2137
|
+
// Clean up previous subscription
|
|
2138
|
+
subscriptionRef.current?.unsubscribe();
|
|
2139
|
+
// Subscribe to service changes
|
|
2140
|
+
const subscription = modelProperty.getService().subscribe((snapshot) => {
|
|
2141
|
+
updateModelProperty();
|
|
2142
|
+
});
|
|
2143
|
+
subscriptionRef.current = subscription;
|
|
2144
|
+
return () => {
|
|
2145
|
+
subscriptionRef.current?.unsubscribe();
|
|
2146
|
+
subscriptionRef.current = undefined;
|
|
2147
|
+
};
|
|
2148
|
+
}, [modelProperty, updateModelProperty]);
|
|
2149
|
+
return {
|
|
2150
|
+
modelProperty,
|
|
2151
|
+
isLoading,
|
|
2152
|
+
error,
|
|
2153
|
+
};
|
|
2154
|
+
}
|
|
2155
|
+
|
|
2156
|
+
const deleteItem = async ({ seedLocalId, seedUid }) => {
|
|
2157
|
+
const appDb = BaseDb.getAppDb();
|
|
2158
|
+
const conditions = [];
|
|
2159
|
+
if (seedLocalId) {
|
|
2160
|
+
conditions.push(eq(seeds.localId, seedLocalId));
|
|
2161
|
+
}
|
|
2162
|
+
if (seedUid) {
|
|
2163
|
+
conditions.push(eq(seeds.uid, seedUid));
|
|
2164
|
+
}
|
|
2165
|
+
if (conditions.length === 0) {
|
|
2166
|
+
return;
|
|
2167
|
+
}
|
|
2168
|
+
await appDb
|
|
2169
|
+
.update(seeds)
|
|
2170
|
+
.set({
|
|
2171
|
+
_markedForDeletion: 1,
|
|
2172
|
+
})
|
|
2173
|
+
.where(or(...conditions));
|
|
2174
|
+
};
|
|
2175
|
+
|
|
2176
|
+
const useDeleteItem = () => {
|
|
2177
|
+
const [isDeletingItem, setIsDeletingItem] = useState(false);
|
|
2178
|
+
const destroy = useCallback(async (item) => {
|
|
2179
|
+
if (!item) {
|
|
2180
|
+
return;
|
|
2181
|
+
}
|
|
2182
|
+
setIsDeletingItem(true);
|
|
2183
|
+
await deleteItem({ seedLocalId: item.seedLocalId });
|
|
2184
|
+
setIsDeletingItem(false);
|
|
2185
|
+
}, [isDeletingItem]);
|
|
2186
|
+
useEffect(() => { }, []);
|
|
2187
|
+
return {
|
|
2188
|
+
deleteItem: destroy,
|
|
2189
|
+
isDeletingItem,
|
|
2190
|
+
};
|
|
2191
|
+
};
|
|
2192
|
+
|
|
2193
|
+
debug('seedSdk:feed');
|
|
2194
|
+
const relationValuesToExclude = [
|
|
2195
|
+
'0x0000000000000000000000000000000000000000000000000000000000000020',
|
|
2196
|
+
];
|
|
2197
|
+
// Helper to convert snake_case to camelCase
|
|
2198
|
+
const toCamelCase = (str) => {
|
|
2199
|
+
return str.replace(/_([a-z])/g, (_, letter) => letter.toUpperCase());
|
|
2200
|
+
};
|
|
2201
|
+
// Helper to format timestamp as RFC 822 date string for RSS pubDate
|
|
2202
|
+
const formatRfc822Date = (timestamp) => {
|
|
2203
|
+
const date = new Date(timestamp * 1000); // Convert from seconds to milliseconds
|
|
2204
|
+
const days = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
|
|
2205
|
+
const months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
|
|
2206
|
+
const day = days[date.getUTCDay()];
|
|
2207
|
+
const month = months[date.getUTCMonth()];
|
|
2208
|
+
const year = date.getUTCFullYear();
|
|
2209
|
+
const dayNum = date.getUTCDate().toString().padStart(2, '0');
|
|
2210
|
+
const hours = date.getUTCHours().toString().padStart(2, '0');
|
|
2211
|
+
const minutes = date.getUTCMinutes().toString().padStart(2, '0');
|
|
2212
|
+
const seconds = date.getUTCSeconds().toString().padStart(2, '0');
|
|
2213
|
+
return `${day}, ${dayNum} ${month} ${year} ${hours}:${minutes}:${seconds} GMT`;
|
|
2214
|
+
};
|
|
2215
|
+
// Helper to set default values for feed items
|
|
2216
|
+
const setFeedItemDefaults = (item, seedUid, schemaName) => {
|
|
2217
|
+
// Set default title if not present (check both snake_case and camelCase)
|
|
2218
|
+
if (!item.title && !item.Title) {
|
|
2219
|
+
item.title = seedUid;
|
|
2220
|
+
item.Title = seedUid; // Also set camelCase version
|
|
2221
|
+
}
|
|
2222
|
+
else if (item.title && !item.Title) {
|
|
2223
|
+
item.Title = item.title;
|
|
2224
|
+
}
|
|
2225
|
+
else if (item.Title && !item.title) {
|
|
2226
|
+
item.title = item.Title;
|
|
2227
|
+
}
|
|
2228
|
+
// Set default link/guid using seedUid or storage_transaction_id
|
|
2229
|
+
// Handle empty strings, null, and undefined - check both formats
|
|
2230
|
+
const storageTransactionIdSnake = item.storage_transaction_id &&
|
|
2231
|
+
typeof item.storage_transaction_id === 'string' &&
|
|
2232
|
+
item.storage_transaction_id.trim() !== '' &&
|
|
2233
|
+
item.storage_transaction_id !== 'undefined' &&
|
|
2234
|
+
item.storage_transaction_id !== seedUid // Don't use seedUid as transaction ID
|
|
2235
|
+
? item.storage_transaction_id.trim()
|
|
2236
|
+
: null;
|
|
2237
|
+
const storageTransactionIdCamel = item.storageTransactionId &&
|
|
2238
|
+
typeof item.storageTransactionId === 'string' &&
|
|
2239
|
+
item.storageTransactionId.trim() !== '' &&
|
|
2240
|
+
item.storageTransactionId !== 'undefined' &&
|
|
2241
|
+
item.storageTransactionId !== seedUid // Don't use seedUid as transaction ID
|
|
2242
|
+
? item.storageTransactionId.trim()
|
|
2243
|
+
: null;
|
|
2244
|
+
const storageTransactionId = storageTransactionIdSnake || storageTransactionIdCamel;
|
|
2245
|
+
console.log('[feed] [setFeedItemDefaults] Setting defaults for item:', {
|
|
2246
|
+
seedUid,
|
|
2247
|
+
schemaName,
|
|
2248
|
+
hasStorageTransactionIdSnake: !!storageTransactionIdSnake,
|
|
2249
|
+
hasStorageTransactionIdCamel: !!storageTransactionIdCamel,
|
|
2250
|
+
storageTransactionIdSnakeValue: item.storage_transaction_id,
|
|
2251
|
+
storageTransactionIdCamelValue: item.storageTransactionId,
|
|
2252
|
+
storageTransactionId,
|
|
2253
|
+
itemKeys: Object.keys(item),
|
|
2254
|
+
});
|
|
2255
|
+
// If there's a valid storageTransactionId (not seedUid), use Arweave URL for the link
|
|
2256
|
+
// Otherwise, build URL based on schema name (e.g., /images/ for image schema, /posts/ for post schema)
|
|
2257
|
+
let defaultLink;
|
|
2258
|
+
if (storageTransactionId && storageTransactionId !== seedUid && storageTransactionId.length > 0) {
|
|
2259
|
+
try {
|
|
2260
|
+
defaultLink = BaseArweaveClient.getRawUrl(storageTransactionId);
|
|
2261
|
+
console.log('[feed] [setFeedItemDefaults] Using Arweave URL for storageTransactionId:', defaultLink);
|
|
2262
|
+
}
|
|
2263
|
+
catch (error) {
|
|
2264
|
+
console.error('[feed] [setFeedItemDefaults] Error generating Arweave URL:', error);
|
|
2265
|
+
// Fallback to default link format
|
|
2266
|
+
const basePath = schemaName === 'image' ? 'images' : schemaName === 'post' ? 'posts' : schemaName.toLowerCase() + 's';
|
|
2267
|
+
const baseUrl = 'https://seedprotocol.io';
|
|
2268
|
+
defaultLink = `${baseUrl}/${basePath}/${seedUid || 'unknown'}`;
|
|
2269
|
+
}
|
|
2270
|
+
}
|
|
2271
|
+
else {
|
|
2272
|
+
const basePath = schemaName === 'image' ? 'images' : schemaName === 'post' ? 'posts' : schemaName.toLowerCase() + 's';
|
|
2273
|
+
const baseUrl = 'https://seedprotocol.io';
|
|
2274
|
+
// Ensure seedUid is valid, use 'unknown' as fallback to prevent 'undefined' in URLs
|
|
2275
|
+
const validSeedUid = seedUid && typeof seedUid === 'string' && seedUid.trim() !== '' ? seedUid : 'unknown';
|
|
2276
|
+
defaultLink = `${baseUrl}/${basePath}/${validSeedUid}`;
|
|
2277
|
+
console.log('[feed] [setFeedItemDefaults] Using default link format:', defaultLink, { seedUid, validSeedUid });
|
|
2278
|
+
}
|
|
2279
|
+
// Always ensure link is set (override if undefined, null, empty, or the string "undefined")
|
|
2280
|
+
const currentLink = item.link || item.Link;
|
|
2281
|
+
if (!currentLink || currentLink === 'undefined' || (typeof currentLink === 'string' && currentLink.trim() === '')) {
|
|
2282
|
+
item.link = defaultLink;
|
|
2283
|
+
item.Link = defaultLink;
|
|
2284
|
+
console.log('[feed] [setFeedItemDefaults] Set link to:', defaultLink);
|
|
2285
|
+
}
|
|
2286
|
+
else {
|
|
2287
|
+
// Ensure both formats are set
|
|
2288
|
+
if (!item.link || item.link === 'undefined') {
|
|
2289
|
+
item.link = currentLink;
|
|
2290
|
+
}
|
|
2291
|
+
if (!item.Link || item.Link === 'undefined') {
|
|
2292
|
+
item.Link = currentLink;
|
|
2293
|
+
}
|
|
2294
|
+
}
|
|
2295
|
+
// Always ensure guid is set (use link if available, otherwise default)
|
|
2296
|
+
const currentGuid = item.guid || item.Guid;
|
|
2297
|
+
if (!currentGuid || currentGuid === 'undefined' || (typeof currentGuid === 'string' && currentGuid.trim() === '')) {
|
|
2298
|
+
item.guid = item.link || defaultLink;
|
|
2299
|
+
item.Guid = item.guid;
|
|
2300
|
+
console.log('[feed] [setFeedItemDefaults] Set guid to:', item.guid);
|
|
2301
|
+
}
|
|
2302
|
+
else {
|
|
2303
|
+
// Ensure both formats are set
|
|
2304
|
+
if (!item.guid || item.guid === 'undefined') {
|
|
2305
|
+
item.guid = currentGuid;
|
|
2306
|
+
}
|
|
2307
|
+
if (!item.Guid || item.Guid === 'undefined') {
|
|
2308
|
+
item.Guid = currentGuid;
|
|
2309
|
+
}
|
|
2310
|
+
}
|
|
2311
|
+
// Set pubDate from timeCreated if available
|
|
2312
|
+
if (item.timeCreated && !item.pubDate && !item.PubDate) {
|
|
2313
|
+
const pubDate = formatRfc822Date(item.timeCreated);
|
|
2314
|
+
item.pubDate = pubDate;
|
|
2315
|
+
item.PubDate = pubDate;
|
|
2316
|
+
}
|
|
2317
|
+
else if (item.pubDate && !item.PubDate) {
|
|
2318
|
+
item.PubDate = item.pubDate;
|
|
2319
|
+
}
|
|
2320
|
+
else if (item.PubDate && !item.pubDate) {
|
|
2321
|
+
item.pubDate = item.PubDate;
|
|
2322
|
+
}
|
|
2323
|
+
// Ensure seedUid is always present
|
|
2324
|
+
if (!item.seedUid && !item.SeedUid) {
|
|
2325
|
+
item.seedUid = seedUid;
|
|
2326
|
+
item.SeedUid = seedUid;
|
|
2327
|
+
}
|
|
2328
|
+
else if (item.seedUid && !item.SeedUid) {
|
|
2329
|
+
item.SeedUid = item.seedUid;
|
|
2330
|
+
}
|
|
2331
|
+
else if (item.SeedUid && !item.seedUid) {
|
|
2332
|
+
item.seedUid = item.SeedUid;
|
|
2333
|
+
}
|
|
2334
|
+
// Note: We don't set storageTransactionId to seedUid as a fallback anymore
|
|
2335
|
+
// because seedUid is not a valid Arweave transaction ID. If storageTransactionId
|
|
2336
|
+
// doesn't exist, we'll use the default link format with seedUid instead.
|
|
2337
|
+
};
|
|
2338
|
+
const seedUidToModelType = new Map();
|
|
2339
|
+
const relatedSeedUids = new Set();
|
|
2340
|
+
const versionUidToSeedUid = new Map();
|
|
2341
|
+
const assembledFeedItems = new Map();
|
|
2342
|
+
const versionsBySeedUid = new Map();
|
|
2343
|
+
const latestVersionUidsBySeedUid = new Map();
|
|
2344
|
+
const processItemProperty = async (property, itemSeeds) => {
|
|
2345
|
+
console.log('[feed] [processItemProperty] Starting to process property:', {
|
|
2346
|
+
propertyId: property.id,
|
|
2347
|
+
refUID: property.refUID,
|
|
2348
|
+
schemaId: property.schemaId,
|
|
2349
|
+
});
|
|
2350
|
+
let metadata;
|
|
2351
|
+
try {
|
|
2352
|
+
metadata = JSON.parse(property.decodedDataJson)[0].value;
|
|
2353
|
+
}
|
|
2354
|
+
catch (error) {
|
|
2355
|
+
console.error('[feed] [processItemProperty] Error parsing metadata:', error);
|
|
2356
|
+
return;
|
|
2357
|
+
}
|
|
2358
|
+
let propertyNameSnake = metadata.name;
|
|
2359
|
+
if (!propertyNameSnake) {
|
|
2360
|
+
console.log('[feed] [processItemProperty] WARNING: no propertyName found for property:', {
|
|
2361
|
+
propertyId: property.id,
|
|
2362
|
+
property,
|
|
2363
|
+
});
|
|
2364
|
+
console.warn('[item/events] [syncDbWithEas] no propertyName found for property: ', property);
|
|
2365
|
+
return;
|
|
2366
|
+
}
|
|
2367
|
+
console.log('[feed] [processItemProperty] Processing property:', {
|
|
2368
|
+
propertyNameSnake,
|
|
2369
|
+
propertyId: property.id,
|
|
2370
|
+
});
|
|
2371
|
+
let isRelation = false;
|
|
2372
|
+
let refSeedType;
|
|
2373
|
+
let refSchemaUid;
|
|
2374
|
+
let isList = false;
|
|
2375
|
+
const schemaUid = property.schemaId;
|
|
2376
|
+
console.log('[feed] [processItemProperty] Setting schema UID for schema definition:', {
|
|
2377
|
+
propertyNameSnake,
|
|
2378
|
+
schemaUid,
|
|
2379
|
+
});
|
|
2380
|
+
setSchemaUidForSchemaDefinition({
|
|
2381
|
+
text: propertyNameSnake,
|
|
2382
|
+
schemaUid,
|
|
2383
|
+
});
|
|
2384
|
+
if ((propertyNameSnake.endsWith('_id') ||
|
|
2385
|
+
propertyNameSnake.endsWith('_ids')) &&
|
|
2386
|
+
propertyNameSnake !== 'storage_transaction_id' &&
|
|
2387
|
+
propertyNameSnake !== 'storage_provider_transaction_id') {
|
|
2388
|
+
isRelation = true;
|
|
2389
|
+
console.log('[feed] [processItemProperty] Detected relation property:', {
|
|
2390
|
+
propertyNameSnake,
|
|
2391
|
+
metadataValue: metadata.value,
|
|
2392
|
+
});
|
|
2393
|
+
if (Array.isArray(metadata.value)) {
|
|
2394
|
+
isList = true;
|
|
2395
|
+
console.log('[feed] [processItemProperty] Detected list relation:', {
|
|
2396
|
+
propertyNameSnake,
|
|
2397
|
+
listLength: metadata.value.length,
|
|
2398
|
+
values: metadata.value,
|
|
2399
|
+
});
|
|
2400
|
+
const result = parseEasRelationPropertyName(propertyNameSnake);
|
|
2401
|
+
console.log('[feed] [processItemProperty] Parsed relation property name:', {
|
|
2402
|
+
result,
|
|
2403
|
+
originalPropertyName: propertyNameSnake,
|
|
2404
|
+
});
|
|
2405
|
+
if (result) {
|
|
2406
|
+
propertyNameSnake = result.propertyName;
|
|
2407
|
+
refSeedType = result.modelName;
|
|
2408
|
+
console.log('[feed] [processItemProperty] Updated property name and seed type:', {
|
|
2409
|
+
newPropertyName: propertyNameSnake,
|
|
2410
|
+
refSeedType,
|
|
2411
|
+
});
|
|
2412
|
+
}
|
|
2413
|
+
metadata.value.forEach((value) => {
|
|
2414
|
+
relatedSeedUids.add(value);
|
|
2415
|
+
console.log('[feed] [processItemProperty] Added related seed UID to set:', {
|
|
2416
|
+
relatedSeedUid: value,
|
|
2417
|
+
totalRelatedSeeds: relatedSeedUids.size,
|
|
2418
|
+
});
|
|
2419
|
+
});
|
|
2420
|
+
}
|
|
2421
|
+
if (!isList) {
|
|
2422
|
+
if (relationValuesToExclude.includes(metadata.value)) {
|
|
2423
|
+
console.log('[feed] [processItemProperty] Excluding relation value:', {
|
|
2424
|
+
propertyNameSnake,
|
|
2425
|
+
excludedValue: metadata.value,
|
|
2426
|
+
});
|
|
2427
|
+
return;
|
|
2428
|
+
}
|
|
2429
|
+
relatedSeedUids.add(metadata.value);
|
|
2430
|
+
console.log('[feed] [processItemProperty] Added single related seed UID:', {
|
|
2431
|
+
relatedSeedUid: metadata.value,
|
|
2432
|
+
totalRelatedSeeds: relatedSeedUids.size,
|
|
2433
|
+
});
|
|
2434
|
+
}
|
|
2435
|
+
}
|
|
2436
|
+
let propertyValue = metadata.value;
|
|
2437
|
+
if (typeof propertyValue !== 'string') {
|
|
2438
|
+
console.log('[feed] [processItemProperty] Converting property value to string:', {
|
|
2439
|
+
propertyNameSnake,
|
|
2440
|
+
originalType: typeof propertyValue,
|
|
2441
|
+
originalValue: propertyValue,
|
|
2442
|
+
});
|
|
2443
|
+
propertyValue = JSON.stringify(propertyValue);
|
|
2444
|
+
}
|
|
2445
|
+
console.log('[feed] [processItemProperty] Final property value:', {
|
|
2446
|
+
propertyNameSnake,
|
|
2447
|
+
propertyValue,
|
|
2448
|
+
isRelation,
|
|
2449
|
+
isList,
|
|
2450
|
+
});
|
|
2451
|
+
if (isRelation && !isList) {
|
|
2452
|
+
console.log('[feed] [processItemProperty] Processing single relation:', {
|
|
2453
|
+
propertyNameSnake,
|
|
2454
|
+
relationValue: metadata.value,
|
|
2455
|
+
itemSeedsCount: itemSeeds.length,
|
|
2456
|
+
});
|
|
2457
|
+
const relatedSeed = itemSeeds.find((seed) => seed.id === metadata.value);
|
|
2458
|
+
if (relatedSeed && relatedSeed.schema && relatedSeed.schema.schemaNames) {
|
|
2459
|
+
refSeedType = relatedSeed.schema.schemaNames[0].name;
|
|
2460
|
+
refSchemaUid = relatedSeed.schemaId;
|
|
2461
|
+
console.log('[feed] [processItemProperty] Found related seed for single relation:', {
|
|
2462
|
+
propertyNameSnake,
|
|
2463
|
+
refSeedType,
|
|
2464
|
+
refSchemaUid,
|
|
2465
|
+
relatedSeedId: relatedSeed.id,
|
|
2466
|
+
});
|
|
2467
|
+
}
|
|
2468
|
+
else {
|
|
2469
|
+
console.log('[feed] [processItemProperty] No related seed found for single relation:', {
|
|
2470
|
+
propertyNameSnake,
|
|
2471
|
+
relationValue: metadata.value,
|
|
2472
|
+
});
|
|
2473
|
+
}
|
|
2474
|
+
}
|
|
2475
|
+
if (isRelation && isList) {
|
|
2476
|
+
console.log('[feed] [processItemProperty] Processing list relation:', {
|
|
2477
|
+
propertyNameSnake,
|
|
2478
|
+
relationValues: metadata.value,
|
|
2479
|
+
itemSeedsCount: itemSeeds.length,
|
|
2480
|
+
});
|
|
2481
|
+
const relatedSeeds = itemSeeds.filter((seed) => metadata.value.includes(seed.id));
|
|
2482
|
+
console.log('[feed] [processItemProperty] Filtered related seeds for list:', {
|
|
2483
|
+
propertyNameSnake,
|
|
2484
|
+
foundSeedsCount: relatedSeeds.length,
|
|
2485
|
+
foundSeedIds: relatedSeeds.map((s) => s.id),
|
|
2486
|
+
});
|
|
2487
|
+
if (relatedSeeds && relatedSeeds.length > 0) {
|
|
2488
|
+
refSeedType = relatedSeeds[0].schema.schemaNames[0].name;
|
|
2489
|
+
refSchemaUid = relatedSeeds[0].schemaId;
|
|
2490
|
+
console.log('[feed] [processItemProperty] Set ref seed type and schema UID from list relation:', {
|
|
2491
|
+
propertyNameSnake,
|
|
2492
|
+
refSeedType,
|
|
2493
|
+
refSchemaUid,
|
|
2494
|
+
});
|
|
2495
|
+
}
|
|
2496
|
+
else {
|
|
2497
|
+
console.log('[feed] [processItemProperty] No related seeds found for list relation:', {
|
|
2498
|
+
propertyNameSnake,
|
|
2499
|
+
});
|
|
2500
|
+
}
|
|
2501
|
+
}
|
|
2502
|
+
console.log('[feed] [processItemProperty] Looking up seed UID for property:', {
|
|
2503
|
+
propertyRefUID: property.refUID,
|
|
2504
|
+
versionUidToSeedUidSize: versionUidToSeedUid.size,
|
|
2505
|
+
});
|
|
2506
|
+
const seedUidForProperty = versionUidToSeedUid.get(property.refUID);
|
|
2507
|
+
if (!seedUidForProperty) {
|
|
2508
|
+
console.log('[feed] [processItemProperty] WARNING: no seedUid found for property:', {
|
|
2509
|
+
propertyRefUID: property.refUID,
|
|
2510
|
+
propertyId: property.id,
|
|
2511
|
+
property,
|
|
2512
|
+
});
|
|
2513
|
+
console.warn('no seedUid found for property: ', property);
|
|
2514
|
+
return;
|
|
2515
|
+
}
|
|
2516
|
+
console.log('[feed] [processItemProperty] Found seed UID for property:', {
|
|
2517
|
+
seedUidForProperty,
|
|
2518
|
+
propertyNameSnake,
|
|
2519
|
+
});
|
|
2520
|
+
let existingFeedItem = assembledFeedItems.get(seedUidForProperty) || {};
|
|
2521
|
+
const existingKeys = Object.keys(existingFeedItem);
|
|
2522
|
+
// Store property in snake_case (original format)
|
|
2523
|
+
existingFeedItem[propertyNameSnake] = propertyValue;
|
|
2524
|
+
// Also store in camelCase for easier access by external consumers (e.g., RSS generators)
|
|
2525
|
+
const propertyNameCamel = toCamelCase(propertyNameSnake);
|
|
2526
|
+
if (propertyNameCamel !== propertyNameSnake) {
|
|
2527
|
+
existingFeedItem[propertyNameCamel] = propertyValue;
|
|
2528
|
+
}
|
|
2529
|
+
assembledFeedItems.set(seedUidForProperty, existingFeedItem);
|
|
2530
|
+
console.log('[feed] [processItemProperty] Updated assembled feed item:', {
|
|
2531
|
+
seedUidForProperty,
|
|
2532
|
+
propertyNameSnake,
|
|
2533
|
+
propertyValue,
|
|
2534
|
+
existingKeysCount: existingKeys.length,
|
|
2535
|
+
newKeysCount: Object.keys(existingFeedItem).length,
|
|
2536
|
+
totalAssembledItems: assembledFeedItems.size,
|
|
2537
|
+
});
|
|
2538
|
+
};
|
|
2539
|
+
const processSeeds = async (seeds) => {
|
|
2540
|
+
console.log('[feed] [processSeeds] Starting to process seeds:', {
|
|
2541
|
+
seedsCount: seeds.length,
|
|
2542
|
+
seedIds: seeds.map((s) => s.id),
|
|
2543
|
+
});
|
|
2544
|
+
const seedUids = seeds.map((seed) => seed.id);
|
|
2545
|
+
for (let i = 0; i < seeds.length; i++) {
|
|
2546
|
+
const seed = seeds[i];
|
|
2547
|
+
seedUids.push(seed.id);
|
|
2548
|
+
const modelType = seed.schema.schemaNames[0].name;
|
|
2549
|
+
seedUidToModelType.set(seed.id, modelType);
|
|
2550
|
+
// Initialize feed item with seed metadata
|
|
2551
|
+
if (!assembledFeedItems.has(seed.id)) {
|
|
2552
|
+
assembledFeedItems.set(seed.id, {
|
|
2553
|
+
seedUid: seed.id,
|
|
2554
|
+
timeCreated: seed.timeCreated,
|
|
2555
|
+
});
|
|
2556
|
+
console.log('[feed] [processSeeds] Initialized feed item for seed:', {
|
|
2557
|
+
seedId: seed.id,
|
|
2558
|
+
modelType,
|
|
2559
|
+
});
|
|
2560
|
+
}
|
|
2561
|
+
console.log('[feed] [processSeeds] Processing seed:', {
|
|
2562
|
+
index: i,
|
|
2563
|
+
seedId: seed.id,
|
|
2564
|
+
modelType,
|
|
2565
|
+
totalSeedsProcessed: i + 1,
|
|
2566
|
+
});
|
|
2567
|
+
}
|
|
2568
|
+
console.log('[feed] [processSeeds] Completed seed mapping:', {
|
|
2569
|
+
totalSeeds: seeds.length,
|
|
2570
|
+
seedUidToModelTypeSize: seedUidToModelType.size,
|
|
2571
|
+
seedUids,
|
|
2572
|
+
});
|
|
2573
|
+
console.log('[feed] [processSeeds] Fetching item versions from EAS:', {
|
|
2574
|
+
seedUidsCount: seedUids.length,
|
|
2575
|
+
seedUids,
|
|
2576
|
+
});
|
|
2577
|
+
const itemVersions = await getItemVersionsFromEas({ seedUids });
|
|
2578
|
+
console.log('[feed] [processSeeds] Received item versions from EAS:', {
|
|
2579
|
+
itemVersionsCount: itemVersions.length,
|
|
2580
|
+
versionIds: itemVersions.map((v) => v.id),
|
|
2581
|
+
});
|
|
2582
|
+
for (let i = 0; i < itemVersions.length; i++) {
|
|
2583
|
+
const itemVersion = itemVersions[i];
|
|
2584
|
+
const seedUid = itemVersion.refUID;
|
|
2585
|
+
versionUidToSeedUid.set(itemVersion.id, seedUid);
|
|
2586
|
+
const existingVersions = versionsBySeedUid.get(seedUid) || [];
|
|
2587
|
+
versionsBySeedUid.set(seedUid, [...existingVersions, itemVersion]);
|
|
2588
|
+
console.log('[feed] [processSeeds] Processed item version:', {
|
|
2589
|
+
index: i,
|
|
2590
|
+
versionId: itemVersion.id,
|
|
2591
|
+
seedUid,
|
|
2592
|
+
timeCreated: itemVersion.timeCreated,
|
|
2593
|
+
versionsForSeedCount: existingVersions.length + 1,
|
|
2594
|
+
});
|
|
2595
|
+
}
|
|
2596
|
+
console.log('[feed] [processSeeds] Completed version mapping:', {
|
|
2597
|
+
totalVersions: itemVersions.length,
|
|
2598
|
+
versionUidToSeedUidSize: versionUidToSeedUid.size,
|
|
2599
|
+
versionsBySeedUidSize: versionsBySeedUid.size,
|
|
2600
|
+
uniqueSeedsWithVersions: Array.from(versionsBySeedUid.keys()),
|
|
2601
|
+
});
|
|
2602
|
+
// Get latest version for each seed and then use those to get the properties
|
|
2603
|
+
console.log('[feed] [processSeeds] Determining latest versions for each seed');
|
|
2604
|
+
const latestVersionUids = [];
|
|
2605
|
+
for (const [seedUid, versions] of versionsBySeedUid.entries()) {
|
|
2606
|
+
console.log('[feed] [processSeeds] Processing versions for seed:', {
|
|
2607
|
+
seedUid,
|
|
2608
|
+
versionsCount: versions.length,
|
|
2609
|
+
versionIds: versions.map((v) => v.id),
|
|
2610
|
+
timeCreateds: versions.map((v) => v.timeCreated),
|
|
2611
|
+
});
|
|
2612
|
+
// Sort versions by timeCreated in descending order (most recent first)
|
|
2613
|
+
const sortedVersions = [...versions].sort((a, b) => b.timeCreated - a.timeCreated);
|
|
2614
|
+
console.log('[feed] [processSeeds] Sorted versions:', {
|
|
2615
|
+
seedUid,
|
|
2616
|
+
sortedVersionIds: sortedVersions.map((v) => v.id),
|
|
2617
|
+
sortedTimeCreateds: sortedVersions.map((v) => v.timeCreated),
|
|
2618
|
+
});
|
|
2619
|
+
// Get the most recent version for this seedUid
|
|
2620
|
+
if (sortedVersions.length > 0) {
|
|
2621
|
+
const latestVersion = sortedVersions[0];
|
|
2622
|
+
latestVersionUids.push(latestVersion.id);
|
|
2623
|
+
latestVersionUidsBySeedUid.set(seedUid, latestVersion.id);
|
|
2624
|
+
console.log('[feed] [processSeeds] Set latest version for seed:', {
|
|
2625
|
+
seedUid,
|
|
2626
|
+
latestVersionId: latestVersion.id,
|
|
2627
|
+
latestTimeCreated: latestVersion.timeCreated,
|
|
2628
|
+
});
|
|
2629
|
+
}
|
|
2630
|
+
else {
|
|
2631
|
+
console.log('[feed] [processSeeds] WARNING: No versions found for seed:', {
|
|
2632
|
+
seedUid,
|
|
2633
|
+
});
|
|
2634
|
+
}
|
|
2635
|
+
}
|
|
2636
|
+
console.log('[feed] [processSeeds] Completed latest version determination:', {
|
|
2637
|
+
latestVersionUidsCount: latestVersionUids.length,
|
|
2638
|
+
latestVersionUids,
|
|
2639
|
+
latestVersionUidsBySeedUidSize: latestVersionUidsBySeedUid.size,
|
|
2640
|
+
});
|
|
2641
|
+
console.log('[feed] [processSeeds] Fetching item properties from EAS:', {
|
|
2642
|
+
latestVersionUidsCount: latestVersionUids.length,
|
|
2643
|
+
latestVersionUids,
|
|
2644
|
+
});
|
|
2645
|
+
const itemProperties = await getItemPropertiesFromEas({ versionUids: latestVersionUids });
|
|
2646
|
+
console.log('[feed] [processSeeds] Received item properties from EAS:', {
|
|
2647
|
+
itemPropertiesCount: itemProperties.length,
|
|
2648
|
+
propertyIds: itemProperties.map((p) => p.id),
|
|
2649
|
+
});
|
|
2650
|
+
for (let i = 0; i < itemProperties.length; i++) {
|
|
2651
|
+
console.log('[feed] [processSeeds] Processing item property:', {
|
|
2652
|
+
index: i,
|
|
2653
|
+
propertyId: itemProperties[i].id,
|
|
2654
|
+
totalProperties: itemProperties.length,
|
|
2655
|
+
});
|
|
2656
|
+
await processItemProperty(itemProperties[i], seeds);
|
|
2657
|
+
}
|
|
2658
|
+
console.log('[feed] [processSeeds] Completed processing all seeds:', {
|
|
2659
|
+
seedsCount: seeds.length,
|
|
2660
|
+
itemVersionsCount: itemVersions.length,
|
|
2661
|
+
itemPropertiesCount: itemProperties.length,
|
|
2662
|
+
assembledFeedItemsSize: assembledFeedItems.size,
|
|
2663
|
+
});
|
|
2664
|
+
};
|
|
2665
|
+
const getFeedItemsBySchemaName = async (schemaName) => {
|
|
2666
|
+
console.log('[feed] [getFeedItemsBySchemaName] Starting feed retrieval:', {
|
|
2667
|
+
schemaName,
|
|
2668
|
+
currentAssembledItemsSize: assembledFeedItems.size,
|
|
2669
|
+
currentRelatedSeedUidsSize: relatedSeedUids.size,
|
|
2670
|
+
});
|
|
2671
|
+
const easClient = BaseEasClient.getEasClient();
|
|
2672
|
+
console.log('[feed] [getFeedItemsBySchemaName] Retrieved EAS client');
|
|
2673
|
+
console.log('[feed] [getFeedItemsBySchemaName] Fetching seeds by schema name:', {
|
|
2674
|
+
schemaName,
|
|
2675
|
+
});
|
|
2676
|
+
const seeds = await getSeedsBySchemaName(schemaName);
|
|
2677
|
+
console.log('[feed] [getFeedItemsBySchemaName] Received seeds:', {
|
|
2678
|
+
seedsCount: seeds.length,
|
|
2679
|
+
seedIds: seeds.map((s) => s.id),
|
|
2680
|
+
});
|
|
2681
|
+
await processSeeds(seeds);
|
|
2682
|
+
const relatedSeedUidsArray = Array.from(relatedSeedUids);
|
|
2683
|
+
console.log('[feed] [getFeedItemsBySchemaName] Fetching related seeds:', {
|
|
2684
|
+
relatedSeedUidsCount: relatedSeedUidsArray.length,
|
|
2685
|
+
relatedSeedUids: relatedSeedUidsArray,
|
|
2686
|
+
});
|
|
2687
|
+
const { itemSeeds: relatedSeeds } = await easClient.request(GET_SEEDS, {
|
|
2688
|
+
where: {
|
|
2689
|
+
id: {
|
|
2690
|
+
in: relatedSeedUidsArray,
|
|
2691
|
+
},
|
|
2692
|
+
},
|
|
2693
|
+
});
|
|
2694
|
+
console.log('[feed] [getFeedItemsBySchemaName] Received related seeds:', {
|
|
2695
|
+
relatedSeedsCount: relatedSeeds.length,
|
|
2696
|
+
relatedSeedIds: relatedSeeds.map((s) => s.id),
|
|
2697
|
+
});
|
|
2698
|
+
await processSeeds(relatedSeeds);
|
|
2699
|
+
// Filter feed items to only include items matching the requested schema name
|
|
2700
|
+
// and apply default values for required RSS fields
|
|
2701
|
+
const feedItems = Array.from(assembledFeedItems.entries())
|
|
2702
|
+
.filter(([seedUid]) => seedUidToModelType.get(seedUid) === schemaName)
|
|
2703
|
+
.map(([seedUid, item]) => {
|
|
2704
|
+
// Apply defaults for required RSS feed fields
|
|
2705
|
+
setFeedItemDefaults(item, seedUid, schemaName);
|
|
2706
|
+
return item;
|
|
2707
|
+
});
|
|
2708
|
+
console.log('[feed] [getFeedItemsBySchemaName] Completed feed retrieval:', {
|
|
2709
|
+
schemaName,
|
|
2710
|
+
feedItemsCount: feedItems.length,
|
|
2711
|
+
assembledFeedItemsSize: assembledFeedItems.size,
|
|
2712
|
+
filteredFeedItemsCount: feedItems.length,
|
|
2713
|
+
feedItemKeys: feedItems.map((item) => Object.keys(item)),
|
|
2714
|
+
});
|
|
2715
|
+
return feedItems;
|
|
2716
|
+
};
|
|
2717
|
+
|
|
2718
|
+
export { BaseEasClient as EasClient, Item, ItemProperty, Model, ModelProperty, Schema, getFeedItemsBySchemaName, getItemPropertiesFromEas, getItemVersionsFromEas, getPropertySchema, getSeedsBySchemaName, useAllSchemaVersions, useCreateItem, useCreateSchema, useDeleteItem, useItem, useItemProperties, useItemProperty, useItems, useModel, useModelProperties, useModelProperty, useModels, useSchema, useSchemas };
|
|
36
2719
|
//# sourceMappingURL=main.js.map
|