@seedprotocol/sdk 0.6.10 → 0.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{BasePathResolver-B6CKqoKw.js → BasePathResolver-DRT09oVv.js} +36 -2
- package/dist/BasePathResolver-DRT09oVv.js.map +1 -0
- package/dist/ClientManager-DngaZdw6.js +4763 -0
- package/dist/ClientManager-DngaZdw6.js.map +1 -0
- package/dist/{ClientManager-ChcmUL47.js → Item-ZUAmf943.js} +1175 -5903
- package/dist/Item-ZUAmf943.js.map +1 -0
- package/dist/{ModelProperty-D79uV42p.js → ModelProperty-6llK4MTH.js} +326 -109
- package/dist/ModelProperty-6llK4MTH.js.map +1 -0
- package/dist/{Schema-a8uO-hIZ.js → Schema-D-Ud-XYw.js} +164 -885
- package/dist/Schema-D-Ud-XYw.js.map +1 -0
- package/dist/{SchemaValidationService-Y49vqast.js → SchemaValidationService-IoS7JquP.js} +26 -18
- package/dist/SchemaValidationService-IoS7JquP.js.map +1 -0
- package/dist/{backfillMetadataPropertyIds-CBsf7LnU.js → backfillMetadataPropertyIds-BlVeE7w7.js} +11 -6
- package/dist/backfillMetadataPropertyIds-BlVeE7w7.js.map +1 -0
- package/dist/cjs/{ModelProperty-D9FGaGuE.js → ModelProperty-Dv7AQfmQ.js} +297 -89
- package/dist/cjs/ModelProperty-Dv7AQfmQ.js.map +1 -0
- package/dist/cjs/{Schema-BiJIPLEL.js → Schema-BHVp1g-M.js} +136 -868
- package/dist/cjs/Schema-BHVp1g-M.js.map +1 -0
- package/dist/cjs/{SchemaValidationService-DtYs_CNY.js → SchemaValidationService-BSU9knjf.js} +18 -11
- package/dist/cjs/SchemaValidationService-BSU9knjf.js.map +1 -0
- package/dist/cjs/{backfillMetadataPropertyIds-2XaN3b9S.js → backfillMetadataPropertyIds-WIovQ_d8.js} +8 -3
- package/dist/cjs/backfillMetadataPropertyIds-WIovQ_d8.js.map +1 -0
- package/dist/cjs/{eas-CMNppmGE.js → eas-CUYXdr2t.js} +4 -4
- package/dist/cjs/{eas-CMNppmGE.js.map → eas-CUYXdr2t.js.map} +1 -1
- package/dist/cjs/{getItem-B6jEINjW.js → getItem-z1tHu0hu.js} +2 -2
- package/dist/cjs/{getItem-B6jEINjW.js.map → getItem-z1tHu0hu.js.map} +1 -1
- package/dist/cjs/getLatestVersionRow-CcaabxIW.js +59 -0
- package/dist/cjs/getLatestVersionRow-CcaabxIW.js.map +1 -0
- package/dist/cjs/{getPublishPayload-D5DhLGvN.js → getPublishPayload-CEP_e-Kv.js} +283 -138
- package/dist/cjs/getPublishPayload-CEP_e-Kv.js.map +1 -0
- package/dist/cjs/{getPublishUploads-DMhCCKYF.js → getPublishUploads-Ctn5k1k6.js} +65 -19
- package/dist/cjs/getPublishUploads-Ctn5k1k6.js.map +1 -0
- package/dist/cjs/{index-CSNtEnbF.js → index-Cvvt0-5B.js} +2698 -1725
- package/dist/cjs/index-Cvvt0-5B.js.map +1 -0
- package/dist/cjs/{index-DPp9rdRL.js → index-DfGhF1dc.js} +3 -3
- package/dist/cjs/index-DfGhF1dc.js.map +1 -0
- package/dist/cjs/{property-DlKiAWt4.js → property-DbEPQ1m9.js} +40 -35
- package/dist/cjs/property-DbEPQ1m9.js.map +1 -0
- package/dist/cjs/publishDraftGraph-C38gf302.js +403 -0
- package/dist/cjs/publishDraftGraph-C38gf302.js.map +1 -0
- package/dist/cjs/resetAmbiguousLegacyItemData-CfMhRHwK.js +116 -0
- package/dist/cjs/resetAmbiguousLegacyItemData-CfMhRHwK.js.map +1 -0
- package/dist/cjs/resolveModelForSyncedSeed-CNYaLOir.js +49 -0
- package/dist/cjs/resolveModelForSyncedSeed-CNYaLOir.js.map +1 -0
- package/dist/cjs/syncDbWithEas-d1iOdTTI.js +886 -0
- package/dist/cjs/syncDbWithEas-d1iOdTTI.js.map +1 -0
- package/dist/{configurePlatform-CE0Vew17.js → configurePlatform-CZpjyuCo.js} +4 -4
- package/dist/{configurePlatform-CE0Vew17.js.map → configurePlatform-CZpjyuCo.js.map} +1 -1
- package/dist/db/drizzle/0015_add_model_file_id_to_seeds.sql +11 -0
- package/dist/db/drizzle/0016_add_revoked_at_to_metadata.sql +1 -0
- package/dist/db/drizzle/0017_add_revoked_at_to_versions.sql +1 -0
- package/dist/db/drizzle/0018_add_storage_settings_to_properties.sql +53 -0
- package/dist/db/drizzle/0019_add_derived_from_uid_to_metadata.sql +35 -0
- package/dist/db/drizzle/meta/0011_snapshot.json +1182 -0
- package/dist/db/drizzle/meta/0012_snapshot.json +1244 -0
- package/dist/db/drizzle/meta/0013_snapshot.json +63 -1
- package/dist/db/drizzle/meta/0014_snapshot.json +62 -0
- package/dist/db/drizzle/meta/0015_snapshot.json +1338 -0
- package/dist/db/drizzle/meta/0016_snapshot.json +1345 -0
- package/dist/db/drizzle/meta/0017_snapshot.json +1352 -0
- package/dist/db/drizzle/meta/0018_snapshot.json +1373 -0
- package/dist/db/drizzle/meta/0019_snapshot.json +1380 -0
- package/dist/db/drizzle/meta/_journal.json +35 -0
- package/dist/{db-WbrzEf7c.js → db-Lw0KVZmc.js} +546 -106
- package/dist/db-Lw0KVZmc.js.map +1 -0
- package/dist/{eas-CfYCu4IX.js → eas-CQ-Smzk2.js} +7 -7
- package/dist/eas-CQ-Smzk2.js.map +1 -0
- package/dist/errors-CrBxGWah.js +17 -0
- package/dist/errors-CrBxGWah.js.map +1 -0
- package/dist/{getItem-Br-bGNFO.js → getItem-CSfSok9f.js} +8 -10
- package/dist/{getItem-Br-bGNFO.js.map → getItem-CSfSok9f.js.map} +1 -1
- package/dist/getLatestVersionRow-72Atl9vB.js +46 -0
- package/dist/getLatestVersionRow-72Atl9vB.js.map +1 -0
- package/dist/{getPublishPayload-BIrTVUxb.js → getPublishPayload-76_KfB5Y.js} +297 -154
- package/dist/getPublishPayload-76_KfB5Y.js.map +1 -0
- package/dist/{getPublishUploads-C6cDeZdz.js → getPublishUploads-CqgMBD8f.js} +68 -21
- package/dist/getPublishUploads-CqgMBD8f.js.map +1 -0
- package/dist/{index-Djd3667v.js → index-5b3JsS55.js} +2 -2
- package/dist/index-5b3JsS55.js.map +1 -0
- package/dist/{index-ClSv5pTA.js → index-BpgD305l.js} +12 -11
- package/dist/index-BpgD305l.js.map +1 -0
- package/dist/{index-HRHkbVQd.js → index-Y-yYyRBf.js} +530 -196
- package/dist/index-Y-yYyRBf.js.map +1 -0
- package/dist/index.browser-DaTzn79x.js +4139 -0
- package/dist/index.browser-DaTzn79x.js.map +1 -0
- package/dist/{index.node-DBtQkEfz.js → index.node-NYKqFOoe.js} +9 -4
- package/dist/index.node-NYKqFOoe.js.map +1 -0
- package/dist/main.cjs +1 -1
- package/dist/main.js +886 -560
- package/dist/main.js.map +1 -1
- package/dist/node.js +19 -15
- package/dist/node.js.map +1 -1
- package/dist/platform.browser.js +18 -3719
- package/dist/platform.browser.js.map +1 -1
- package/dist/platform.node.js +3 -3
- package/dist/{property-CQjuZ4JW.js → property-ByaiSyUK.js} +53 -48
- package/dist/property-ByaiSyUK.js.map +1 -0
- package/dist/publishDraftGraph-BRm6Pq3Q.js +405 -0
- package/dist/publishDraftGraph-BRm6Pq3Q.js.map +1 -0
- package/dist/resetAmbiguousLegacyItemData-B4dX6ZA1.js +88 -0
- package/dist/resetAmbiguousLegacyItemData-B4dX6ZA1.js.map +1 -0
- package/dist/resolveModelForSyncedSeed-B0tco3zG.js +46 -0
- package/dist/resolveModelForSyncedSeed-B0tco3zG.js.map +1 -0
- package/dist/seedSchema/MetadataSchema.ts +9 -0
- package/dist/seedSchema/ModelSchema.ts +5 -0
- package/dist/seedSchema/SeedSchema.ts +3 -0
- package/dist/seedSchema/VersionSchema.ts +5 -0
- package/dist/src/Item/Item.d.ts +21 -0
- package/dist/src/Item/Item.d.ts.map +1 -1
- package/dist/src/Item/service/actors/loadOrCreateItem.d.ts.map +1 -1
- package/dist/src/Item/service/actors/waitForDb.d.ts.map +1 -1
- package/dist/src/Item/service/itemMachineSingle.d.ts +3 -29
- package/dist/src/Item/service/itemMachineSingle.d.ts.map +1 -1
- package/dist/src/ItemProperty/ItemProperty.d.ts +13 -4
- package/dist/src/ItemProperty/ItemProperty.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/hydrateFromDb.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/loadOrCreateProperty.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveFile.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveHtml.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveImage.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/actors/saveValueToDb/saveItemStorage.d.ts.map +1 -1
- package/dist/src/ItemProperty/service/propertyMachine.d.ts +4 -9
- package/dist/src/ItemProperty/service/propertyMachine.d.ts.map +1 -1
- package/dist/src/Model/Model.d.ts +52 -2
- package/dist/src/Model/Model.d.ts.map +1 -1
- package/dist/src/Model/errors.d.ts +10 -0
- package/dist/src/Model/errors.d.ts.map +1 -0
- package/dist/src/Model/service/actors/createModelProperties.d.ts.map +1 -1
- package/dist/src/Model/service/actors/loadOrCreateModel.d.ts.map +1 -1
- package/dist/src/Model/service/actors/validateModel.d.ts.map +1 -1
- package/dist/src/Model/service/modelMachine.d.ts +0 -8
- package/dist/src/Model/service/modelMachine.d.ts.map +1 -1
- package/dist/src/ModelProperty/ModelProperty.d.ts +42 -2
- package/dist/src/ModelProperty/ModelProperty.d.ts.map +1 -1
- package/dist/src/ModelProperty/service/actors/compareAndMarkDraft.d.ts.map +1 -1
- package/dist/src/ModelProperty/service/actors/saveToSchema.d.ts.map +1 -1
- package/dist/src/ModelProperty/service/actors/validateProperty.d.ts.map +1 -1
- package/dist/src/ModelProperty/service/modelPropertyMachine.d.ts +2 -9
- package/dist/src/ModelProperty/service/modelPropertyMachine.d.ts.map +1 -1
- package/dist/src/Schema/Schema.d.ts +8 -2
- package/dist/src/Schema/Schema.d.ts.map +1 -1
- package/dist/src/Schema/service/actors/checkExistingSchema.d.ts.map +1 -1
- package/dist/src/Schema/service/actors/createModelInstances.d.ts.map +1 -1
- package/dist/src/Schema/service/actors/loadOrCreateSchema.d.ts.map +1 -1
- package/dist/src/Schema/service/schemaMachine.d.ts +1 -217
- package/dist/src/Schema/service/schemaMachine.d.ts.map +1 -1
- package/dist/src/Schema/service/validation/SchemaValidationService.d.ts.map +1 -1
- package/dist/src/browser/db/Db.d.ts +3 -0
- package/dist/src/browser/db/Db.d.ts.map +1 -1
- package/dist/src/browser/db/drizzleFiles.d.ts +7 -2
- package/dist/src/browser/db/drizzleFiles.d.ts.map +1 -1
- package/dist/src/browser/db/embeddedMigrations.d.ts +11 -2
- package/dist/src/browser/db/embeddedMigrations.d.ts.map +1 -1
- package/dist/src/browser/db/sqliteBusyRetry.d.ts +14 -0
- package/dist/src/browser/db/sqliteBusyRetry.d.ts.map +1 -0
- package/dist/src/browser/helpers/FileManager.d.ts +1 -0
- package/dist/src/browser/helpers/FileManager.d.ts.map +1 -1
- package/dist/src/browser/helpers/QueryClient.d.ts +1 -0
- package/dist/src/browser/helpers/QueryClient.d.ts.map +1 -1
- package/dist/src/browser/helpers/opfsErrors.d.ts +2 -0
- package/dist/src/browser/helpers/opfsErrors.d.ts.map +1 -0
- package/dist/src/browser/helpers/tolerantWebAccess.d.ts +47 -0
- package/dist/src/browser/helpers/tolerantWebAccess.d.ts.map +1 -0
- package/dist/src/browser/workers/FileDownloader.d.ts.map +1 -1
- package/dist/src/browser/workers/ImageResizer.d.ts.map +1 -1
- package/dist/src/browser/workers/filesDownload.d.ts.map +1 -1
- package/dist/src/browser/workers/imageResize.d.ts.map +1 -1
- package/dist/src/client/ClientManager.d.ts.map +1 -1
- package/dist/src/client/actors/addModelsToDb.d.ts +14 -0
- package/dist/src/client/actors/addModelsToDb.d.ts.map +1 -1
- package/dist/src/client/actors/platformClassesInit.d.ts.map +1 -1
- package/dist/src/client/actors/processSchemaFiles.d.ts.map +1 -1
- package/dist/src/client/actors/saveConfig.d.ts +11 -0
- package/dist/src/client/actors/saveConfig.d.ts.map +1 -1
- package/dist/src/client/constants.d.ts +0 -8
- package/dist/src/client/constants.d.ts.map +1 -1
- package/dist/src/db/backfillMetadataPropertyIds.d.ts.map +1 -1
- package/dist/src/db/configs/{dev.schema.config.d.ts → migrations.config.d.ts} +1 -1
- package/dist/src/db/configs/migrations.config.d.ts.map +1 -0
- package/dist/src/db/read/batchLatestPublishedVersionBySeedLocalIds.d.ts +1 -1
- package/dist/src/db/read/batchLatestPublishedVersionBySeedLocalIds.d.ts.map +1 -1
- package/dist/src/db/read/getItemData.d.ts.map +1 -1
- package/dist/src/db/read/getItemProperties.d.ts.map +1 -1
- package/dist/src/db/read/getItems.d.ts +7 -2
- package/dist/src/db/read/getItems.d.ts.map +1 -1
- package/dist/src/db/read/getLatestPublishedVersionRow.d.ts +2 -1
- package/dist/src/db/read/getLatestPublishedVersionRow.d.ts.map +1 -1
- package/dist/src/db/read/getLatestVersionRow.d.ts +13 -0
- package/dist/src/db/read/getLatestVersionRow.d.ts.map +1 -0
- package/dist/src/db/read/getModelSchemas.d.ts.map +1 -1
- package/dist/src/db/read/getPropertyData.d.ts.map +1 -1
- package/dist/src/db/read/getPublishPayload.d.ts +18 -11
- package/dist/src/db/read/getPublishPayload.d.ts.map +1 -1
- package/dist/src/db/read/getPublishPendingDiff.d.ts +2 -1
- package/dist/src/db/read/getPublishPendingDiff.d.ts.map +1 -1
- package/dist/src/db/read/getPublishUploads.d.ts +5 -0
- package/dist/src/db/read/getPublishUploads.d.ts.map +1 -1
- package/dist/src/db/read/getSchemaUidForModel.d.ts.map +1 -1
- package/dist/src/db/read/getSeedPublishState.d.ts +8 -2
- package/dist/src/db/read/getSeedPublishState.d.ts.map +1 -1
- package/dist/src/db/read/isSeedRevoked.d.ts +7 -0
- package/dist/src/db/read/isSeedRevoked.d.ts.map +1 -0
- package/dist/src/db/read/publishDraftGraph.d.ts +57 -0
- package/dist/src/db/read/publishDraftGraph.d.ts.map +1 -0
- package/dist/src/db/read/publishErrors.d.ts +37 -0
- package/dist/src/db/read/publishErrors.d.ts.map +1 -0
- package/dist/src/db/read/resolveModelForSyncedSeed.d.ts +39 -0
- package/dist/src/db/read/resolveModelForSyncedSeed.d.ts.map +1 -0
- package/dist/src/db/read/resolveModelRecord.d.ts +69 -0
- package/dist/src/db/read/resolveModelRecord.d.ts.map +1 -0
- package/dist/src/db/read/resolveRelatedSeedRef.d.ts +34 -0
- package/dist/src/db/read/resolveRelatedSeedRef.d.ts.map +1 -0
- package/dist/src/db/read/subqueries/liveVersion.d.ts +12 -0
- package/dist/src/db/read/subqueries/liveVersion.d.ts.map +1 -0
- package/dist/src/db/read/subqueries/metadataLatest.d.ts +4 -0
- package/dist/src/db/read/subqueries/metadataLatest.d.ts.map +1 -1
- package/dist/src/db/read/subqueries/versionData.d.ts +7 -2
- package/dist/src/db/read/subqueries/versionData.d.ts.map +1 -1
- package/dist/src/db/read/summarizePublishWork.d.ts +10 -2
- package/dist/src/db/read/summarizePublishWork.d.ts.map +1 -1
- package/dist/src/db/resetAmbiguousLegacyItemData.d.ts +17 -0
- package/dist/src/db/resetAmbiguousLegacyItemData.d.ts.map +1 -0
- package/dist/src/db/sqlParamBatches.d.ts +27 -0
- package/dist/src/db/sqlParamBatches.d.ts.map +1 -0
- package/dist/src/db/write/addExcludedTransactions.d.ts +7 -0
- package/dist/src/db/write/addExcludedTransactions.d.ts.map +1 -0
- package/dist/src/db/write/applyPropertyAttestationUidsFromPublish.d.ts +6 -0
- package/dist/src/db/write/applyPropertyAttestationUidsFromPublish.d.ts.map +1 -1
- package/dist/src/db/write/createMetadata.d.ts +2 -0
- package/dist/src/db/write/createMetadata.d.ts.map +1 -1
- package/dist/src/db/write/createNewItem.d.ts +3 -1
- package/dist/src/db/write/createNewItem.d.ts.map +1 -1
- package/dist/src/db/write/createSeed.d.ts +2 -1
- package/dist/src/db/write/createSeed.d.ts.map +1 -1
- package/dist/src/db/write/createSeeds.d.ts +1 -1
- package/dist/src/db/write/createSeeds.d.ts.map +1 -1
- package/dist/src/db/write/linkModelToSchema.d.ts +12 -0
- package/dist/src/db/write/linkModelToSchema.d.ts.map +1 -0
- package/dist/src/db/write/updateItemPropertyValue.d.ts.map +1 -1
- package/dist/src/db/write/updateMetadata.d.ts.map +1 -1
- package/dist/src/db/write/updateSeedRevokedAt.d.ts +11 -1
- package/dist/src/db/write/updateSeedRevokedAt.d.ts.map +1 -1
- package/dist/src/db/write/updateSeedUid.d.ts.map +1 -1
- package/dist/src/db/write/updateVersionUid.d.ts +2 -1
- package/dist/src/db/write/updateVersionUid.d.ts.map +1 -1
- package/dist/src/events/files/download.d.ts.map +1 -1
- package/dist/src/events/item/easSyncManager.d.ts +2 -0
- package/dist/src/events/item/easSyncManager.d.ts.map +1 -1
- package/dist/src/events/item/index.d.ts.map +1 -1
- package/dist/src/events/item/syncDbWithEas.d.ts +16 -0
- package/dist/src/events/item/syncDbWithEas.d.ts.map +1 -1
- package/dist/src/helpers/FileManager/BaseFileManager.d.ts +1 -0
- package/dist/src/helpers/FileManager/BaseFileManager.d.ts.map +1 -1
- package/dist/src/helpers/FileManager/IFileManager.d.ts +5 -0
- package/dist/src/helpers/FileManager/IFileManager.d.ts.map +1 -1
- package/dist/src/helpers/FileManager/errors.d.ts +10 -0
- package/dist/src/helpers/FileManager/errors.d.ts.map +1 -0
- package/dist/src/helpers/compareMetadataRowsLatestFirst.d.ts +21 -3
- package/dist/src/helpers/compareMetadataRowsLatestFirst.d.ts.map +1 -1
- package/dist/src/helpers/constants.d.ts +9 -0
- package/dist/src/helpers/constants.d.ts.map +1 -1
- package/dist/src/helpers/crypto.d.ts +5 -0
- package/dist/src/helpers/crypto.d.ts.map +1 -1
- package/dist/src/helpers/db.d.ts +25 -5
- package/dist/src/helpers/db.d.ts.map +1 -1
- package/dist/src/helpers/easPropertyCanonical.d.ts +1 -1
- package/dist/src/helpers/easPropertyCanonical.d.ts.map +1 -1
- package/dist/src/helpers/entity/entityCommon.d.ts +10 -0
- package/dist/src/helpers/entity/entityCommon.d.ts.map +1 -1
- package/dist/src/helpers/entity/entityDestroy.d.ts +1 -1
- package/dist/src/helpers/entity/entityDestroy.d.ts.map +1 -1
- package/dist/src/helpers/entity/entityLiveQuery.d.ts +5 -0
- package/dist/src/helpers/entity/entityLiveQuery.d.ts.map +1 -1
- package/dist/src/helpers/entity/evictionEpoch.d.ts +18 -0
- package/dist/src/helpers/entity/evictionEpoch.d.ts.map +1 -0
- package/dist/src/helpers/file/fetchAll/actors.d.ts.map +1 -1
- package/dist/src/helpers/getSegmentedItemProperties.d.ts.map +1 -1
- package/dist/src/helpers/htmlEmbeddedDataUriPublish.d.ts +31 -3
- package/dist/src/helpers/htmlEmbeddedDataUriPublish.d.ts.map +1 -1
- package/dist/src/helpers/isPublishedMetadataRow.d.ts +10 -0
- package/dist/src/helpers/isPublishedMetadataRow.d.ts.map +1 -0
- package/dist/src/helpers/ownership.d.ts.map +1 -1
- package/dist/src/helpers/property.d.ts +6 -1
- package/dist/src/helpers/property.d.ts.map +1 -1
- package/dist/src/helpers/schema.d.ts +14 -4
- package/dist/src/helpers/schema.d.ts.map +1 -1
- package/dist/src/helpers/tabCoordinator.d.ts +45 -0
- package/dist/src/helpers/tabCoordinator.d.ts.map +1 -0
- package/dist/src/helpers/tabEvents.d.ts +27 -0
- package/dist/src/helpers/tabEvents.d.ts.map +1 -0
- package/dist/src/helpers/tabLocks.d.ts +28 -0
- package/dist/src/helpers/tabLocks.d.ts.map +1 -0
- package/dist/src/helpers/updateSchema.d.ts.map +1 -1
- package/dist/src/imports/json.d.ts.map +1 -1
- package/dist/src/imports/markdown.d.ts.map +1 -1
- package/dist/src/index.d.ts +13 -3
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/node/db/Db.d.ts.map +1 -1
- package/dist/src/node/helpers/FileManager.d.ts +2 -0
- package/dist/src/node/helpers/FileManager.d.ts.map +1 -1
- package/dist/src/query/createLocalQueryDataSource.d.ts +4 -0
- package/dist/src/query/createLocalQueryDataSource.d.ts.map +1 -1
- package/dist/src/seedSchema/MetadataSchema.d.ts +36 -0
- package/dist/src/seedSchema/MetadataSchema.d.ts.map +1 -1
- package/dist/src/seedSchema/ModelSchema.d.ts +57 -0
- package/dist/src/seedSchema/ModelSchema.d.ts.map +1 -1
- package/dist/src/seedSchema/SeedSchema.d.ts +19 -0
- package/dist/src/seedSchema/SeedSchema.d.ts.map +1 -1
- package/dist/src/seedSchema/VersionSchema.d.ts +17 -0
- package/dist/src/seedSchema/VersionSchema.d.ts.map +1 -1
- package/dist/src/services/write/actors/validateEntity.d.ts.map +1 -1
- package/dist/src/services/write/actors/writeToDatabase.d.ts +5 -0
- package/dist/src/services/write/actors/writeToDatabase.d.ts.map +1 -1
- package/dist/src/services/write/writeProcessMachine.d.ts.map +1 -1
- package/dist/src/stores/eas.d.ts +1 -1
- package/dist/src/stores/eas.d.ts.map +1 -1
- package/dist/src/types/index.d.ts +7 -0
- package/dist/src/types/index.d.ts.map +1 -1
- package/dist/src/types/item.d.ts +19 -11
- package/dist/src/types/item.d.ts.map +1 -1
- package/dist/src/types/property.d.ts +3 -2
- package/dist/src/types/property.d.ts.map +1 -1
- package/dist/syncDbWithEas-BPap9Sru.js +855 -0
- package/dist/syncDbWithEas-BPap9Sru.js.map +1 -0
- package/dist/{index-280bL-n4.js → tabEvents-C6NXS6Jl.js} +231 -68
- package/dist/tabEvents-C6NXS6Jl.js.map +1 -0
- package/dist/tolerantWebAccess-NBQ1NB4i.js +160 -0
- package/dist/tolerantWebAccess-NBQ1NB4i.js.map +1 -0
- package/dist/updateSeedRevokedAt-CYwgVNlM.js +32 -0
- package/dist/updateSeedRevokedAt-CYwgVNlM.js.map +1 -0
- package/package.json +8 -10
- package/dist/BasePathResolver-B6CKqoKw.js.map +0 -1
- package/dist/ClientManager-ChcmUL47.js.map +0 -1
- package/dist/ModelProperty-D79uV42p.js.map +0 -1
- package/dist/Schema-a8uO-hIZ.js.map +0 -1
- package/dist/SchemaValidationService-Y49vqast.js.map +0 -1
- package/dist/backfillMetadataPropertyIds-CBsf7LnU.js.map +0 -1
- package/dist/cjs/ModelProperty-D9FGaGuE.js.map +0 -1
- package/dist/cjs/Schema-BiJIPLEL.js.map +0 -1
- package/dist/cjs/SchemaValidationService-DtYs_CNY.js.map +0 -1
- package/dist/cjs/backfillMetadataPropertyIds-2XaN3b9S.js.map +0 -1
- package/dist/cjs/getPublishPayload-D5DhLGvN.js.map +0 -1
- package/dist/cjs/getPublishUploads-DMhCCKYF.js.map +0 -1
- package/dist/cjs/getSegmentedItemProperties-CU8rtBAo.js +0 -148
- package/dist/cjs/getSegmentedItemProperties-CU8rtBAo.js.map +0 -1
- package/dist/cjs/index-CSNtEnbF.js.map +0 -1
- package/dist/cjs/index-DPp9rdRL.js.map +0 -1
- package/dist/cjs/property-DlKiAWt4.js.map +0 -1
- package/dist/cjs/syncDbWithEas-C6n34o_Q.js +0 -606
- package/dist/cjs/syncDbWithEas-C6n34o_Q.js.map +0 -1
- package/dist/db-WbrzEf7c.js.map +0 -1
- package/dist/eas-CfYCu4IX.js.map +0 -1
- package/dist/getPublishPayload-BIrTVUxb.js.map +0 -1
- package/dist/getPublishUploads-C6cDeZdz.js.map +0 -1
- package/dist/getSegmentedItemProperties-BmKE71vU.js +0 -148
- package/dist/getSegmentedItemProperties-BmKE71vU.js.map +0 -1
- package/dist/index-280bL-n4.js.map +0 -1
- package/dist/index-ClSv5pTA.js.map +0 -1
- package/dist/index-Djd3667v.js.map +0 -1
- package/dist/index-HRHkbVQd.js.map +0 -1
- package/dist/index.node-DBtQkEfz.js.map +0 -1
- package/dist/property-CQjuZ4JW.js.map +0 -1
- package/dist/src/Item/service/actors/fetchDataFromEas.d.ts +0 -4
- package/dist/src/Item/service/actors/fetchDataFromEas.d.ts.map +0 -1
- package/dist/src/Item/service/actors/hydrateExistingItem.d.ts +0 -4
- package/dist/src/Item/service/actors/hydrateExistingItem.d.ts.map +0 -1
- package/dist/src/Item/service/actors/hydrateNewItem.d.ts +0 -4
- package/dist/src/Item/service/actors/hydrateNewItem.d.ts.map +0 -1
- package/dist/src/Item/service/actors/initialize.d.ts +0 -4
- package/dist/src/Item/service/actors/initialize.d.ts.map +0 -1
- package/dist/src/Item/service/actors/reload.d.ts +0 -5
- package/dist/src/Item/service/actors/reload.d.ts.map +0 -1
- package/dist/src/Item/service/actors/saveDataToDb.d.ts +0 -4
- package/dist/src/Item/service/actors/saveDataToDb.d.ts.map +0 -1
- package/dist/src/ItemProperty/service/actors/resolveRemoteStorage.d.ts +0 -5
- package/dist/src/ItemProperty/service/actors/resolveRemoteStorage.d.ts.map +0 -1
- package/dist/src/Schema/service/addModelsMachine.d.ts +0 -123
- package/dist/src/Schema/service/addModelsMachine.d.ts.map +0 -1
- package/dist/src/browser/helpers/index.d.ts +0 -4
- package/dist/src/browser/helpers/index.d.ts.map +0 -1
- package/dist/src/db/configs/dev.schema.config.d.ts.map +0 -1
- package/dist/src/helpers/file/download/actors.d.ts +0 -17
- package/dist/src/helpers/file/download/actors.d.ts.map +0 -1
- package/dist/src/helpers/file/download/index.d.ts +0 -70
- package/dist/src/helpers/file/download/index.d.ts.map +0 -1
- package/dist/src/services/publish/actors/createPublishAttempt.d.ts +0 -4
- package/dist/src/services/publish/actors/createPublishAttempt.d.ts.map +0 -1
- package/dist/src/services/publish/actors/preparePublishRequestData.d.ts +0 -4
- package/dist/src/services/publish/actors/preparePublishRequestData.d.ts.map +0 -1
- package/dist/src/services/publish/actors/upload.d.ts +0 -4
- package/dist/src/services/publish/actors/upload.d.ts.map +0 -1
- package/dist/src/services/publish/actors/validateItemData.d.ts +0 -4
- package/dist/src/services/publish/actors/validateItemData.d.ts.map +0 -1
- package/dist/src/services/publish/publishMachine.d.ts +0 -32
- package/dist/src/services/publish/publishMachine.d.ts.map +0 -1
- package/dist/syncDbWithEas-CuARXfyN.js +0 -598
- package/dist/syncDbWithEas-CuARXfyN.js.map +0 -1
- package/dist/updateSeedRevokedAt-CBcLfHWs.js +0 -22
- package/dist/updateSeedRevokedAt-CBcLfHWs.js.map +0 -1
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var xstate = require('xstate');
|
|
4
|
-
var main_cjs = require('./index-
|
|
4
|
+
var main_cjs = require('./index-Cvvt0-5B.js');
|
|
5
5
|
var drizzleOrm = require('drizzle-orm');
|
|
6
6
|
var debug = require('debug');
|
|
7
7
|
require('pluralize');
|
|
8
|
-
var SchemaValidationService = require('./SchemaValidationService-
|
|
8
|
+
var SchemaValidationService = require('./SchemaValidationService-BSU9knjf.js');
|
|
9
9
|
require('immer');
|
|
10
10
|
require('reflect-metadata');
|
|
11
11
|
require('drizzle-orm/sqlite-core');
|
|
@@ -71,18 +71,19 @@ const getModelIdsForSchema$1 = async (schemaId) => {
|
|
|
71
71
|
* This ensures that Model.getById() in Schema.getContext() will find the instances
|
|
72
72
|
* @param modelIds - Array of model file IDs to create instances for
|
|
73
73
|
*/
|
|
74
|
-
const createModelInstances$2 = async (modelIds) => {
|
|
74
|
+
const createModelInstances$2 = async (modelIds, evictionEpoch) => {
|
|
75
75
|
if (modelIds.length === 0) {
|
|
76
76
|
return;
|
|
77
77
|
}
|
|
78
78
|
try {
|
|
79
|
-
const modelMod = await Promise.resolve().then(function () { return require('./index-
|
|
79
|
+
const modelMod = await Promise.resolve().then(function () { return require('./index-Cvvt0-5B.js'); }).then(function (n) { return n.Model$1; });
|
|
80
80
|
const { Model } = modelMod;
|
|
81
81
|
// Create instances for all model IDs in parallel
|
|
82
82
|
// Model.createById() will check cache first, then query DB and create if needed
|
|
83
83
|
const createPromises = modelIds.map(async (modelFileId) => {
|
|
84
84
|
try {
|
|
85
|
-
|
|
85
|
+
// Not if the schema was evicted (Schema.destroy, test cleanup) since this load started
|
|
86
|
+
const model = await Model.createById(modelFileId, { evictionEpoch });
|
|
86
87
|
if (model) {
|
|
87
88
|
logger$d(`Created/cached Model instance for modelFileId "${modelFileId}"`);
|
|
88
89
|
}
|
|
@@ -181,6 +182,7 @@ const getSchemaFilePath$2 = (name, version, schemaFileId) => {
|
|
|
181
182
|
return path.join(workingDir, filename);
|
|
182
183
|
};
|
|
183
184
|
const loadOrCreateSchema = xstate.fromCallback(({ sendBack, input: { context } }) => {
|
|
185
|
+
const evictionEpoch = main_cjs.currentEvictionEpoch();
|
|
184
186
|
const _loadOrCreateSchema = async () => {
|
|
185
187
|
const { schemaName } = context;
|
|
186
188
|
// Check if this is an internal SDK schema (should not create files in app directory) — use static import so consumer bundles resolve correctly
|
|
@@ -189,7 +191,7 @@ const loadOrCreateSchema = xstate.fromCallback(({ sendBack, input: { context } }
|
|
|
189
191
|
// For Seed Protocol, always load from internal file, never create new
|
|
190
192
|
logger$d(`Loading internal Seed Protocol schema from SDK`);
|
|
191
193
|
try {
|
|
192
|
-
const internalSchema = await Promise.resolve().then(function () { return require('./index-
|
|
194
|
+
const internalSchema = await Promise.resolve().then(function () { return require('./index-Cvvt0-5B.js'); }).then(function (n) { return n.SEEDPROTOCOL_Seed_Protocol_v1; });
|
|
193
195
|
const schemaFile = internalSchema.default;
|
|
194
196
|
// Check if it exists in database, if not, add it
|
|
195
197
|
const db = main_cjs.BaseDb.getAppDb();
|
|
@@ -497,7 +499,7 @@ const loadOrCreateSchema = xstate.fromCallback(({ sendBack, input: { context } }
|
|
|
497
499
|
if (schemaRecord && schemaRecord.id) {
|
|
498
500
|
modelIds = await getModelIdsForSchema$1(schemaRecord.id);
|
|
499
501
|
// Create Model instances so they're cached before getContext runs
|
|
500
|
-
await createModelInstances$2(modelIds);
|
|
502
|
+
await createModelInstances$2(modelIds, evictionEpoch);
|
|
501
503
|
}
|
|
502
504
|
sendBack({
|
|
503
505
|
type: 'loadOrCreateSchemaSuccess',
|
|
@@ -682,7 +684,7 @@ const loadOrCreateSchema = xstate.fromCallback(({ sendBack, input: { context } }
|
|
|
682
684
|
// Ensure models are populated (fallback for seed-protocol if missing)
|
|
683
685
|
if ((!mergedModels || Object.keys(mergedModels).length === 0) && schemaName === 'Seed Protocol') {
|
|
684
686
|
try {
|
|
685
|
-
const internalSchema = await Promise.resolve().then(function () { return require('./index-
|
|
687
|
+
const internalSchema = await Promise.resolve().then(function () { return require('./index-Cvvt0-5B.js'); }).then(function (n) { return n.SEEDPROTOCOL_Seed_Protocol_v1; });
|
|
686
688
|
const internalSchemaFile = internalSchema.default;
|
|
687
689
|
mergedModels = { ...(internalSchemaFile.models || {}) };
|
|
688
690
|
logger$d(`Populated models for seed-protocol schema from internal file`);
|
|
@@ -744,7 +746,7 @@ const loadOrCreateSchema = xstate.fromCallback(({ sendBack, input: { context } }
|
|
|
744
746
|
if (dbSchema.id) {
|
|
745
747
|
modelIds = await getModelIdsForSchema$1(dbSchema.id);
|
|
746
748
|
// Create Model instances so they're cached before getContext runs
|
|
747
|
-
await createModelInstances$2(modelIds);
|
|
749
|
+
await createModelInstances$2(modelIds, evictionEpoch);
|
|
748
750
|
}
|
|
749
751
|
// Track conflict detection metadata
|
|
750
752
|
const loadedAt = Date.now();
|
|
@@ -841,7 +843,7 @@ const loadOrCreateSchema = xstate.fromCallback(({ sendBack, input: { context } }
|
|
|
841
843
|
if (draftsByFileId[0].id) {
|
|
842
844
|
modelIds = await getModelIdsForSchema$1(draftsByFileId[0].id);
|
|
843
845
|
// Create Model instances so they're cached before getContext runs
|
|
844
|
-
await createModelInstances$2(modelIds);
|
|
846
|
+
await createModelInstances$2(modelIds, evictionEpoch);
|
|
845
847
|
}
|
|
846
848
|
// Track conflict detection metadata
|
|
847
849
|
const loadedAt = Date.now();
|
|
@@ -909,7 +911,7 @@ const loadOrCreateSchema = xstate.fromCallback(({ sendBack, input: { context } }
|
|
|
909
911
|
// Ensure models are populated (fallback for seed-protocol if missing)
|
|
910
912
|
if ((!mergedModels || Object.keys(mergedModels).length === 0) && schemaName === 'Seed Protocol') {
|
|
911
913
|
try {
|
|
912
|
-
const internalSchema = await Promise.resolve().then(function () { return require('./index-
|
|
914
|
+
const internalSchema = await Promise.resolve().then(function () { return require('./index-Cvvt0-5B.js'); }).then(function (n) { return n.SEEDPROTOCOL_Seed_Protocol_v1; });
|
|
913
915
|
const internalSchemaFile = internalSchema.default;
|
|
914
916
|
mergedModels = { ...(internalSchemaFile.models || {}) };
|
|
915
917
|
logger$d(`Populated models for seed-protocol schema from internal file`);
|
|
@@ -972,7 +974,7 @@ const loadOrCreateSchema = xstate.fromCallback(({ sendBack, input: { context } }
|
|
|
972
974
|
if (dbSchema.id) {
|
|
973
975
|
modelIds = await getModelIdsForSchema$1(dbSchema.id);
|
|
974
976
|
// Create Model instances so they're cached before getContext runs
|
|
975
|
-
await createModelInstances$2(modelIds);
|
|
977
|
+
await createModelInstances$2(modelIds, evictionEpoch);
|
|
976
978
|
}
|
|
977
979
|
// Track conflict detection metadata from DB record
|
|
978
980
|
const loadedAt = Date.now();
|
|
@@ -998,7 +1000,7 @@ const loadOrCreateSchema = xstate.fromCallback(({ sendBack, input: { context } }
|
|
|
998
1000
|
// Ensure models are populated (fallback for seed-protocol if missing)
|
|
999
1001
|
if ((!mergedModels || Object.keys(mergedModels).length === 0) && schemaName === 'Seed Protocol') {
|
|
1000
1002
|
try {
|
|
1001
|
-
const internalSchema = await Promise.resolve().then(function () { return require('./index-
|
|
1003
|
+
const internalSchema = await Promise.resolve().then(function () { return require('./index-Cvvt0-5B.js'); }).then(function (n) { return n.SEEDPROTOCOL_Seed_Protocol_v1; });
|
|
1002
1004
|
const internalSchemaFile = internalSchema.default;
|
|
1003
1005
|
mergedModels = { ...(internalSchemaFile.models || {}) };
|
|
1004
1006
|
logger$d(`Populated models for seed-protocol schema from internal file`);
|
|
@@ -1060,7 +1062,7 @@ const loadOrCreateSchema = xstate.fromCallback(({ sendBack, input: { context } }
|
|
|
1060
1062
|
if (dbSchema.id) {
|
|
1061
1063
|
modelIds = await getModelIdsForSchema$1(dbSchema.id);
|
|
1062
1064
|
// Create Model instances so they're cached before getContext runs
|
|
1063
|
-
await createModelInstances$2(modelIds);
|
|
1065
|
+
await createModelInstances$2(modelIds, evictionEpoch);
|
|
1064
1066
|
}
|
|
1065
1067
|
// Track conflict detection metadata
|
|
1066
1068
|
const loadedAt = Date.now();
|
|
@@ -1084,7 +1086,7 @@ const loadOrCreateSchema = xstate.fromCallback(({ sendBack, input: { context } }
|
|
|
1084
1086
|
// If schemaData is missing, try to load from internal schema file for seed-protocol
|
|
1085
1087
|
if (!dbSchema.schemaData && schemaName === 'Seed Protocol') {
|
|
1086
1088
|
try {
|
|
1087
|
-
const internalSchema = await Promise.resolve().then(function () { return require('./index-
|
|
1089
|
+
const internalSchema = await Promise.resolve().then(function () { return require('./index-Cvvt0-5B.js'); }).then(function (n) { return n.SEEDPROTOCOL_Seed_Protocol_v1; });
|
|
1088
1090
|
const schemaFile = internalSchema.default;
|
|
1089
1091
|
logger$d(`Found seed-protocol schema in internal file (schemaData missing, using internal schema)`);
|
|
1090
1092
|
// Update database with schemaData for future loads
|
|
@@ -1100,7 +1102,7 @@ const loadOrCreateSchema = xstate.fromCallback(({ sendBack, input: { context } }
|
|
|
1100
1102
|
if (dbSchema.id) {
|
|
1101
1103
|
modelIds = await getModelIdsForSchema$1(dbSchema.id);
|
|
1102
1104
|
// Create Model instances so they're cached before getContext runs
|
|
1103
|
-
await createModelInstances$2(modelIds);
|
|
1105
|
+
await createModelInstances$2(modelIds, evictionEpoch);
|
|
1104
1106
|
}
|
|
1105
1107
|
sendBack({
|
|
1106
1108
|
type: 'loadOrCreateSchemaSuccess',
|
|
@@ -1162,7 +1164,7 @@ const loadOrCreateSchema = xstate.fromCallback(({ sendBack, input: { context } }
|
|
|
1162
1164
|
if (matchingDraft.id) {
|
|
1163
1165
|
modelIds = await getModelIdsForSchema$1(matchingDraft.id);
|
|
1164
1166
|
// Create Model instances so they're cached before getContext runs
|
|
1165
|
-
await createModelInstances$2(modelIds);
|
|
1167
|
+
await createModelInstances$2(modelIds, evictionEpoch);
|
|
1166
1168
|
}
|
|
1167
1169
|
// Track conflict detection metadata
|
|
1168
1170
|
const loadedAt = Date.now();
|
|
@@ -1193,7 +1195,7 @@ const loadOrCreateSchema = xstate.fromCallback(({ sendBack, input: { context } }
|
|
|
1193
1195
|
// Ensure models are populated (fallback for seed-protocol if missing)
|
|
1194
1196
|
if ((!mergedModels || Object.keys(mergedModels).length === 0) && schemaName === 'Seed Protocol') {
|
|
1195
1197
|
try {
|
|
1196
|
-
const internalSchema = await Promise.resolve().then(function () { return require('./index-
|
|
1198
|
+
const internalSchema = await Promise.resolve().then(function () { return require('./index-Cvvt0-5B.js'); }).then(function (n) { return n.SEEDPROTOCOL_Seed_Protocol_v1; });
|
|
1197
1199
|
const internalSchemaFile = internalSchema.default;
|
|
1198
1200
|
mergedModels = { ...(internalSchemaFile.models || {}) };
|
|
1199
1201
|
logger$d(`Populated models for seed-protocol schema from internal file`);
|
|
@@ -1216,7 +1218,7 @@ const loadOrCreateSchema = xstate.fromCallback(({ sendBack, input: { context } }
|
|
|
1216
1218
|
if (schemaRecords.length > 0 && schemaRecords[0].id) {
|
|
1217
1219
|
modelIds = await getModelIdsForSchema$1(schemaRecords[0].id);
|
|
1218
1220
|
// Create Model instances so they're cached before getContext runs
|
|
1219
|
-
await createModelInstances$2(modelIds);
|
|
1221
|
+
await createModelInstances$2(modelIds, evictionEpoch);
|
|
1220
1222
|
}
|
|
1221
1223
|
}
|
|
1222
1224
|
}
|
|
@@ -1270,7 +1272,7 @@ const loadOrCreateSchema = xstate.fromCallback(({ sendBack, input: { context } }
|
|
|
1270
1272
|
if (foundSchema.id) {
|
|
1271
1273
|
modelIds = await getModelIdsForSchema$1(foundSchema.id);
|
|
1272
1274
|
// Create Model instances so they're cached before getContext runs
|
|
1273
|
-
await createModelInstances$2(modelIds);
|
|
1275
|
+
await createModelInstances$2(modelIds, evictionEpoch);
|
|
1274
1276
|
}
|
|
1275
1277
|
// Track conflict detection metadata
|
|
1276
1278
|
const loadedAt = Date.now();
|
|
@@ -1302,7 +1304,7 @@ const loadOrCreateSchema = xstate.fromCallback(({ sendBack, input: { context } }
|
|
|
1302
1304
|
if (foundSchema.id) {
|
|
1303
1305
|
modelIds = await getModelIdsForSchema$1(foundSchema.id);
|
|
1304
1306
|
// Create Model instances so they're cached before getContext runs
|
|
1305
|
-
await createModelInstances$2(modelIds);
|
|
1307
|
+
await createModelInstances$2(modelIds, evictionEpoch);
|
|
1306
1308
|
}
|
|
1307
1309
|
// Track conflict detection metadata
|
|
1308
1310
|
const loadedAt = Date.now();
|
|
@@ -1375,7 +1377,7 @@ const loadOrCreateSchema = xstate.fromCallback(({ sendBack, input: { context } }
|
|
|
1375
1377
|
if (schemaRecords.length > 0 && schemaRecords[0].id) {
|
|
1376
1378
|
modelIds = await getModelIdsForSchema$1(schemaRecords[0].id);
|
|
1377
1379
|
// Create Model instances so they're cached before getContext runs
|
|
1378
|
-
await createModelInstances$2(modelIds);
|
|
1380
|
+
await createModelInstances$2(modelIds, evictionEpoch);
|
|
1379
1381
|
}
|
|
1380
1382
|
}
|
|
1381
1383
|
}
|
|
@@ -1464,582 +1466,6 @@ const validateSchema = xstate.fromCallback(({ sendBack, input: { context } }) =>
|
|
|
1464
1466
|
};
|
|
1465
1467
|
});
|
|
1466
1468
|
|
|
1467
|
-
const addModelsMachine = xstate.setup({
|
|
1468
|
-
types: {
|
|
1469
|
-
context: {},
|
|
1470
|
-
input: {},
|
|
1471
|
-
events: {},
|
|
1472
|
-
},
|
|
1473
|
-
actors: {
|
|
1474
|
-
validateModels: xstate.fromCallback(({ sendBack, input }) => {
|
|
1475
|
-
const _validate = async () => {
|
|
1476
|
-
// Check for duplicate model names
|
|
1477
|
-
const newModelNames = Object.keys(input.newModels);
|
|
1478
|
-
const existingModelNames = Object.keys(input.existingModels || {});
|
|
1479
|
-
for (const modelName of newModelNames) {
|
|
1480
|
-
if (existingModelNames.includes(modelName)) {
|
|
1481
|
-
throw new Error(`Model "${modelName}" already exists in schema`);
|
|
1482
|
-
}
|
|
1483
|
-
}
|
|
1484
|
-
// Check for duplicates within new models
|
|
1485
|
-
const seenNames = new Set();
|
|
1486
|
-
for (const modelName of newModelNames) {
|
|
1487
|
-
if (seenNames.has(modelName)) {
|
|
1488
|
-
throw new Error(`Duplicate model name detected: "${modelName}". Each model must have a unique name.`);
|
|
1489
|
-
}
|
|
1490
|
-
seenNames.add(modelName);
|
|
1491
|
-
}
|
|
1492
|
-
// Basic validation - ensure models have required structure
|
|
1493
|
-
for (const [modelName, modelDef] of Object.entries(input.newModels)) {
|
|
1494
|
-
if (!modelDef || typeof modelDef !== 'object') {
|
|
1495
|
-
throw new Error(`Invalid model definition for "${modelName}": must be an object`);
|
|
1496
|
-
}
|
|
1497
|
-
if (!modelDef.properties || typeof modelDef.properties !== 'object') {
|
|
1498
|
-
throw new Error(`Model "${modelName}" must have a "properties" object`);
|
|
1499
|
-
}
|
|
1500
|
-
}
|
|
1501
|
-
sendBack({ type: 'done', output: { valid: true } });
|
|
1502
|
-
};
|
|
1503
|
-
_validate().catch((error) => {
|
|
1504
|
-
sendBack({ type: 'error', error: error instanceof Error ? error : new Error(String(error)) });
|
|
1505
|
-
});
|
|
1506
|
-
return () => {
|
|
1507
|
-
// Cleanup
|
|
1508
|
-
};
|
|
1509
|
-
}),
|
|
1510
|
-
createModelInstances: xstate.fromCallback(({ sendBack, input }) => {
|
|
1511
|
-
const _createInstances = async () => {
|
|
1512
|
-
const debug = (await import('debug')).default;
|
|
1513
|
-
const logger = debug('seedSdk:schema:addModels:createInstances');
|
|
1514
|
-
const schemaMod = await Promise.resolve().then(function () { return Schema$1; });
|
|
1515
|
-
const { Schema: SchemaClass, schemaInstanceState } = schemaMod;
|
|
1516
|
-
const schemaName = input.schemaContext.metadata?.name || input.schemaContext.schemaName;
|
|
1517
|
-
const schemaInstance = SchemaClass.create(schemaName, {
|
|
1518
|
-
waitForReady: false,
|
|
1519
|
-
});
|
|
1520
|
-
const modelInstances = new Map();
|
|
1521
|
-
// Get instance state to store model instances
|
|
1522
|
-
const instanceState = schemaInstanceState.get(schemaInstance);
|
|
1523
|
-
if (!instanceState) {
|
|
1524
|
-
throw new Error('Schema instance state not found');
|
|
1525
|
-
}
|
|
1526
|
-
for (const [modelName, modelData] of Object.entries(input.models)) {
|
|
1527
|
-
try {
|
|
1528
|
-
logger(`Creating model instance for "${modelName}"`);
|
|
1529
|
-
// Look up modelFileId from database BEFORE creating the Model instance
|
|
1530
|
-
let modelFileId = undefined;
|
|
1531
|
-
try {
|
|
1532
|
-
const db = main_cjs.BaseDb.getAppDb();
|
|
1533
|
-
if (db) {
|
|
1534
|
-
const dbModels = await db
|
|
1535
|
-
.select()
|
|
1536
|
-
.from(main_cjs.models)
|
|
1537
|
-
.where(drizzleOrm.eq(main_cjs.models.name, modelName))
|
|
1538
|
-
.limit(1);
|
|
1539
|
-
if (dbModels.length > 0 && dbModels[0].schemaFileId) {
|
|
1540
|
-
modelFileId = dbModels[0].schemaFileId;
|
|
1541
|
-
logger(`Found modelFileId "${modelFileId}" for model "${modelName}" from database`);
|
|
1542
|
-
}
|
|
1543
|
-
}
|
|
1544
|
-
}
|
|
1545
|
-
catch (error) {
|
|
1546
|
-
logger(`Error looking up modelFileId from database: ${error}`);
|
|
1547
|
-
}
|
|
1548
|
-
// If not found in database, generate a new modelFileId for new models
|
|
1549
|
-
if (!modelFileId) {
|
|
1550
|
-
modelFileId = main_cjs.generateId();
|
|
1551
|
-
logger(`Generated new modelFileId "${modelFileId}" for new model "${modelName}"`);
|
|
1552
|
-
}
|
|
1553
|
-
// Create new Model instance with modelFileId
|
|
1554
|
-
// Model.create() will set _modelFileId in the context automatically
|
|
1555
|
-
const modelInstance = main_cjs.Model.create(modelName, schemaName, {
|
|
1556
|
-
modelFileId,
|
|
1557
|
-
waitForReady: false,
|
|
1558
|
-
});
|
|
1559
|
-
const service = modelInstance.getService();
|
|
1560
|
-
logger(`Created Model instance for "${modelName}" with modelFileId "${modelFileId}"`);
|
|
1561
|
-
// Wait for the Model service to finish loading (loadOrCreateModel completes)
|
|
1562
|
-
await new Promise((resolve) => {
|
|
1563
|
-
let resolved = false;
|
|
1564
|
-
let subscription = null;
|
|
1565
|
-
// Check if already idle
|
|
1566
|
-
const snapshot = service.getSnapshot();
|
|
1567
|
-
if (snapshot.value === 'idle') {
|
|
1568
|
-
const currentModelFileId = snapshot.context._modelFileId;
|
|
1569
|
-
if (currentModelFileId === modelFileId) {
|
|
1570
|
-
logger(`ModelFileId "${modelFileId}" correctly set for model "${modelName}"`);
|
|
1571
|
-
}
|
|
1572
|
-
else {
|
|
1573
|
-
logger(`WARNING: ModelFileId not set for model "${modelName}" (expected: "${modelFileId}", got: "${currentModelFileId || 'undefined'}")`);
|
|
1574
|
-
// Try to set it again
|
|
1575
|
-
service.send({
|
|
1576
|
-
type: 'updateContext',
|
|
1577
|
-
_modelFileId: modelFileId,
|
|
1578
|
-
});
|
|
1579
|
-
}
|
|
1580
|
-
resolved = true;
|
|
1581
|
-
resolve();
|
|
1582
|
-
return;
|
|
1583
|
-
}
|
|
1584
|
-
// Wait for service to become idle
|
|
1585
|
-
subscription = service.subscribe((snapshot) => {
|
|
1586
|
-
if (snapshot.value === 'idle') {
|
|
1587
|
-
if (subscription) {
|
|
1588
|
-
subscription.unsubscribe();
|
|
1589
|
-
subscription = null;
|
|
1590
|
-
}
|
|
1591
|
-
const currentModelFileId = snapshot.context._modelFileId;
|
|
1592
|
-
if (currentModelFileId === modelFileId) {
|
|
1593
|
-
logger(`ModelFileId "${modelFileId}" correctly set for model "${modelName}"`);
|
|
1594
|
-
}
|
|
1595
|
-
else {
|
|
1596
|
-
logger(`WARNING: ModelFileId not set for model "${modelName}" (expected: "${modelFileId}", got: "${currentModelFileId || 'undefined'}")`);
|
|
1597
|
-
// Try to set it again - but only once to avoid infinite loop
|
|
1598
|
-
if (!resolved) {
|
|
1599
|
-
service.send({
|
|
1600
|
-
type: 'updateContext',
|
|
1601
|
-
_modelFileId: modelFileId,
|
|
1602
|
-
});
|
|
1603
|
-
}
|
|
1604
|
-
}
|
|
1605
|
-
if (!resolved) {
|
|
1606
|
-
resolved = true;
|
|
1607
|
-
resolve();
|
|
1608
|
-
}
|
|
1609
|
-
}
|
|
1610
|
-
else if (snapshot.value === 'error') {
|
|
1611
|
-
if (subscription) {
|
|
1612
|
-
subscription.unsubscribe();
|
|
1613
|
-
subscription = null;
|
|
1614
|
-
}
|
|
1615
|
-
if (!resolved) {
|
|
1616
|
-
resolved = true;
|
|
1617
|
-
resolve();
|
|
1618
|
-
}
|
|
1619
|
-
}
|
|
1620
|
-
});
|
|
1621
|
-
// Timeout after 2 seconds
|
|
1622
|
-
setTimeout(() => {
|
|
1623
|
-
if (subscription) {
|
|
1624
|
-
subscription.unsubscribe();
|
|
1625
|
-
subscription = null;
|
|
1626
|
-
}
|
|
1627
|
-
if (!resolved) {
|
|
1628
|
-
resolved = true;
|
|
1629
|
-
resolve();
|
|
1630
|
-
}
|
|
1631
|
-
}, 2000);
|
|
1632
|
-
});
|
|
1633
|
-
// Update the model instance with current data
|
|
1634
|
-
modelInstance.getService().send({
|
|
1635
|
-
type: 'updateContext',
|
|
1636
|
-
properties: modelData.properties || {},
|
|
1637
|
-
});
|
|
1638
|
-
// Initialize original values
|
|
1639
|
-
modelInstance.getService().send({
|
|
1640
|
-
type: 'initializeOriginalValues',
|
|
1641
|
-
originalValues: {
|
|
1642
|
-
_originalValues: {
|
|
1643
|
-
properties: modelData.properties ? JSON.parse(JSON.stringify(modelData.properties)) : {},
|
|
1644
|
-
},
|
|
1645
|
-
},
|
|
1646
|
-
isEdited: false,
|
|
1647
|
-
});
|
|
1648
|
-
// Store in instance state
|
|
1649
|
-
if (!instanceState.modelInstances) {
|
|
1650
|
-
instanceState.modelInstances = new Map();
|
|
1651
|
-
}
|
|
1652
|
-
instanceState.modelInstances.set(modelName, modelInstance);
|
|
1653
|
-
modelInstances.set(modelName, modelInstance);
|
|
1654
|
-
logger(`Successfully created model instance for "${modelName}"`);
|
|
1655
|
-
}
|
|
1656
|
-
catch (error) {
|
|
1657
|
-
logger(`Error creating model instance for "${modelName}": ${error}`);
|
|
1658
|
-
throw error;
|
|
1659
|
-
}
|
|
1660
|
-
}
|
|
1661
|
-
sendBack({
|
|
1662
|
-
type: 'done',
|
|
1663
|
-
output: { modelInstances }
|
|
1664
|
-
});
|
|
1665
|
-
};
|
|
1666
|
-
_createInstances().catch((error) => {
|
|
1667
|
-
sendBack({ type: 'error', error: error instanceof Error ? error : new Error(String(error)) });
|
|
1668
|
-
});
|
|
1669
|
-
return () => {
|
|
1670
|
-
// Cleanup
|
|
1671
|
-
};
|
|
1672
|
-
}),
|
|
1673
|
-
collectModelFileIds: xstate.fromCallback(({ sendBack, input }) => {
|
|
1674
|
-
const _collectIds = async () => {
|
|
1675
|
-
const debug = (await import('debug')).default;
|
|
1676
|
-
const logger = debug('seedSdk:schema:addModels:collectIds');
|
|
1677
|
-
const modelFileIds = new Map();
|
|
1678
|
-
for (const [modelName, modelInstance] of input.modelInstances.entries()) {
|
|
1679
|
-
try {
|
|
1680
|
-
const service = modelInstance.getService();
|
|
1681
|
-
let modelFileId = undefined;
|
|
1682
|
-
// Check current snapshot first
|
|
1683
|
-
const snapshot = service.getSnapshot();
|
|
1684
|
-
if (snapshot.value === 'idle' && snapshot.context._modelFileId) {
|
|
1685
|
-
modelFileId = snapshot.context._modelFileId;
|
|
1686
|
-
}
|
|
1687
|
-
else {
|
|
1688
|
-
// If not ready, wait for it to become idle
|
|
1689
|
-
await new Promise((resolve) => {
|
|
1690
|
-
const subscription = service.subscribe((snapshot) => {
|
|
1691
|
-
if (snapshot.value === 'idle') {
|
|
1692
|
-
subscription.unsubscribe();
|
|
1693
|
-
if (snapshot.context._modelFileId) {
|
|
1694
|
-
modelFileId = snapshot.context._modelFileId;
|
|
1695
|
-
}
|
|
1696
|
-
resolve();
|
|
1697
|
-
}
|
|
1698
|
-
else if (snapshot.value === 'error') {
|
|
1699
|
-
subscription.unsubscribe();
|
|
1700
|
-
resolve();
|
|
1701
|
-
}
|
|
1702
|
-
});
|
|
1703
|
-
// Timeout after 1 second
|
|
1704
|
-
setTimeout(() => {
|
|
1705
|
-
subscription.unsubscribe();
|
|
1706
|
-
resolve();
|
|
1707
|
-
}, 1000);
|
|
1708
|
-
});
|
|
1709
|
-
}
|
|
1710
|
-
if (modelFileId) {
|
|
1711
|
-
modelFileIds.set(modelName, modelFileId);
|
|
1712
|
-
logger(`Collected modelFileId "${modelFileId}" for model "${modelName}"`);
|
|
1713
|
-
}
|
|
1714
|
-
else {
|
|
1715
|
-
logger(`WARNING: modelFileId not found for model "${modelName}" after waiting`);
|
|
1716
|
-
}
|
|
1717
|
-
}
|
|
1718
|
-
catch (error) {
|
|
1719
|
-
logger(`Error collecting modelFileId for "${modelName}": ${error}`);
|
|
1720
|
-
// Continue with other models even if one fails
|
|
1721
|
-
}
|
|
1722
|
-
}
|
|
1723
|
-
sendBack({
|
|
1724
|
-
type: 'done',
|
|
1725
|
-
output: { modelFileIds }
|
|
1726
|
-
});
|
|
1727
|
-
};
|
|
1728
|
-
_collectIds().catch((error) => {
|
|
1729
|
-
sendBack({ type: 'error', error: error instanceof Error ? error : new Error(String(error)) });
|
|
1730
|
-
});
|
|
1731
|
-
return () => {
|
|
1732
|
-
// Cleanup
|
|
1733
|
-
};
|
|
1734
|
-
}),
|
|
1735
|
-
persistModelsToDb: xstate.fromCallback(({ sendBack, input }) => {
|
|
1736
|
-
const _persist = async () => {
|
|
1737
|
-
const debug = (await import('debug')).default;
|
|
1738
|
-
const logger = debug('seedSdk:schema:addModels:persist');
|
|
1739
|
-
// Only process in browser environment where store is available
|
|
1740
|
-
if (typeof window === 'undefined') {
|
|
1741
|
-
logger('Not in browser environment, skipping store update');
|
|
1742
|
-
sendBack({
|
|
1743
|
-
type: 'done',
|
|
1744
|
-
output: { addedModels: input.models }
|
|
1745
|
-
});
|
|
1746
|
-
return;
|
|
1747
|
-
}
|
|
1748
|
-
const schemaName = input.schemaContext.metadata?.name || input.schemaContext.schemaName;
|
|
1749
|
-
const schemaFileId = input.schemaContext.id; // id is the schemaFileId (string) in SchemaMachineContext
|
|
1750
|
-
const db = main_cjs.BaseDb.getAppDb();
|
|
1751
|
-
if (!db) {
|
|
1752
|
-
logger('Database not found, skipping model store update');
|
|
1753
|
-
sendBack({
|
|
1754
|
-
type: 'done',
|
|
1755
|
-
output: { addedModels: input.models }
|
|
1756
|
-
});
|
|
1757
|
-
return;
|
|
1758
|
-
}
|
|
1759
|
-
// Find schema record - prefer schemaFileId lookup (more reliable), then fall back to name
|
|
1760
|
-
// Retry up to 3 times with a short delay in case schema is still being saved
|
|
1761
|
-
let schemaRecord;
|
|
1762
|
-
const maxRetries = 3;
|
|
1763
|
-
const retryDelay = 100; // ms
|
|
1764
|
-
for (let attempt = 0; attempt < maxRetries && !schemaRecord; attempt++) {
|
|
1765
|
-
if (attempt > 0) {
|
|
1766
|
-
logger(`Retry ${attempt}/${maxRetries - 1} to find schema, waiting ${retryDelay}ms...`);
|
|
1767
|
-
await new Promise(resolve => setTimeout(resolve, retryDelay));
|
|
1768
|
-
}
|
|
1769
|
-
// PRIMARY: Look up by schemaFileId if available (most reliable, independent of name changes)
|
|
1770
|
-
if (schemaFileId) {
|
|
1771
|
-
logger(`Looking up schema by schemaFileId: ${schemaFileId} (attempt ${attempt + 1})`);
|
|
1772
|
-
const schemasById = await db
|
|
1773
|
-
.select()
|
|
1774
|
-
.from(main_cjs.schemas)
|
|
1775
|
-
.where(drizzleOrm.eq(main_cjs.schemas.schemaFileId, schemaFileId))
|
|
1776
|
-
.limit(1);
|
|
1777
|
-
if (schemasById.length > 0) {
|
|
1778
|
-
schemaRecord = schemasById[0];
|
|
1779
|
-
if (schemaRecord) {
|
|
1780
|
-
logger(`Found schema by schemaFileId: ${schemaFileId} (id: ${schemaRecord.id}, name: ${schemaRecord.name}, isDraft: ${schemaRecord.isDraft})`);
|
|
1781
|
-
}
|
|
1782
|
-
break;
|
|
1783
|
-
}
|
|
1784
|
-
else {
|
|
1785
|
-
logger(`No schema found by schemaFileId: ${schemaFileId}, will try by name`);
|
|
1786
|
-
}
|
|
1787
|
-
}
|
|
1788
|
-
// FALLBACK: If not found by schemaFileId, try by name (prefer draft records)
|
|
1789
|
-
if (!schemaRecord) {
|
|
1790
|
-
logger(`Looking up schema by name: "${schemaName}" (attempt ${attempt + 1})`);
|
|
1791
|
-
const schemasByName = await db
|
|
1792
|
-
.select()
|
|
1793
|
-
.from(main_cjs.schemas)
|
|
1794
|
-
.where(drizzleOrm.eq(main_cjs.schemas.name, schemaName))
|
|
1795
|
-
.orderBy(drizzleOrm.desc(main_cjs.schemas.isDraft), drizzleOrm.desc(main_cjs.schemas.version))
|
|
1796
|
-
.limit(10); // Get multiple to find drafts
|
|
1797
|
-
if (schemasByName.length > 0) {
|
|
1798
|
-
// Prefer draft records
|
|
1799
|
-
const draftRecord = schemasByName.find((s) => s.isDraft === true);
|
|
1800
|
-
schemaRecord = draftRecord || schemasByName[0];
|
|
1801
|
-
if (schemaRecord) {
|
|
1802
|
-
logger(`Found schema by name "${schemaName}": selected ${draftRecord ? 'draft' : 'first'} record (id: ${schemaRecord.id}, isDraft: ${schemaRecord.isDraft})`);
|
|
1803
|
-
}
|
|
1804
|
-
break;
|
|
1805
|
-
}
|
|
1806
|
-
}
|
|
1807
|
-
}
|
|
1808
|
-
if (!schemaRecord) {
|
|
1809
|
-
logger(`Schema "${schemaName}" (schemaFileId: ${schemaFileId || 'none'}) not found in database after ${maxRetries} attempts, skipping model store update`);
|
|
1810
|
-
sendBack({
|
|
1811
|
-
type: 'done',
|
|
1812
|
-
output: { addedModels: input.models }
|
|
1813
|
-
});
|
|
1814
|
-
return;
|
|
1815
|
-
}
|
|
1816
|
-
// Convert schema model format to JSON import format for createModelFromJson
|
|
1817
|
-
const modelDefinitions = {};
|
|
1818
|
-
for (const [modelName, modelDef] of Object.entries(input.models)) {
|
|
1819
|
-
// Convert properties from schema format to JSON import format
|
|
1820
|
-
const convertedProperties = {};
|
|
1821
|
-
if (modelDef.properties) {
|
|
1822
|
-
for (const [propName, propDef] of Object.entries(modelDef.properties)) {
|
|
1823
|
-
// Schema format: { dataType, ref, refValueType, storageType, localStorageDir, filenameSuffix }
|
|
1824
|
-
// JSON import format: { type, model, items, storage: { type, path, extension } }
|
|
1825
|
-
const schemaProp = propDef;
|
|
1826
|
-
const jsonProp = {
|
|
1827
|
-
type: schemaProp.dataType || schemaProp.type,
|
|
1828
|
-
};
|
|
1829
|
-
// Handle Relation type
|
|
1830
|
-
if (schemaProp.ref || schemaProp.refModelName) {
|
|
1831
|
-
jsonProp.model = schemaProp.refModelName || schemaProp.ref;
|
|
1832
|
-
}
|
|
1833
|
-
// Handle List type
|
|
1834
|
-
if (main_cjs.isDataType(schemaProp.dataType, main_cjs.ModelPropertyDataTypes.List) && schemaProp.refValueType) {
|
|
1835
|
-
jsonProp.refValueType = schemaProp.refValueType;
|
|
1836
|
-
if (schemaProp.ref || schemaProp.refModelName) {
|
|
1837
|
-
jsonProp.ref = schemaProp.refModelName || schemaProp.ref;
|
|
1838
|
-
}
|
|
1839
|
-
}
|
|
1840
|
-
// Handle storage configuration
|
|
1841
|
-
if (schemaProp.storageType || schemaProp.localStorageDir || schemaProp.filenameSuffix) {
|
|
1842
|
-
jsonProp.storage = {
|
|
1843
|
-
type: schemaProp.storageType === 'ItemStorage' ? 'ItemStorage' : 'PropertyStorage',
|
|
1844
|
-
path: schemaProp.localStorageDir,
|
|
1845
|
-
extension: schemaProp.filenameSuffix,
|
|
1846
|
-
};
|
|
1847
|
-
}
|
|
1848
|
-
if (schemaProp.required !== undefined) {
|
|
1849
|
-
jsonProp.required = schemaProp.required;
|
|
1850
|
-
}
|
|
1851
|
-
convertedProperties[propName] = jsonProp;
|
|
1852
|
-
}
|
|
1853
|
-
}
|
|
1854
|
-
// Create model definition in JSON import format
|
|
1855
|
-
// Note: description is not passed - JSON files can have it but we ignore it at runtime
|
|
1856
|
-
const jsonModelDef = {
|
|
1857
|
-
properties: convertedProperties,
|
|
1858
|
-
};
|
|
1859
|
-
// Create Model instance
|
|
1860
|
-
const ModelClass = await main_cjs.createModelFromJson(modelName, jsonModelDef, schemaName);
|
|
1861
|
-
modelDefinitions[modelName] = ModelClass;
|
|
1862
|
-
// Model is now accessible via Model static methods, no registration needed
|
|
1863
|
-
logger(`Created model "${modelName}"`);
|
|
1864
|
-
}
|
|
1865
|
-
// Add models to database with modelFileIds
|
|
1866
|
-
if (Object.keys(modelDefinitions).length > 0) {
|
|
1867
|
-
await main_cjs.addModelsToDb(modelDefinitions, schemaRecord, undefined, {
|
|
1868
|
-
schemaFileId: input.schemaContext.id, // id is the schemaFileId (string) in SchemaMachineContext
|
|
1869
|
-
modelFileIds: input.modelFileIds.size > 0 ? input.modelFileIds : undefined,
|
|
1870
|
-
});
|
|
1871
|
-
logger(`Added ${Object.keys(modelDefinitions).length} new models to database`);
|
|
1872
|
-
}
|
|
1873
|
-
sendBack({
|
|
1874
|
-
type: 'done',
|
|
1875
|
-
output: { addedModels: input.models }
|
|
1876
|
-
});
|
|
1877
|
-
};
|
|
1878
|
-
_persist().catch((error) => {
|
|
1879
|
-
sendBack({ type: 'error', error: error instanceof Error ? error : new Error(String(error)) });
|
|
1880
|
-
});
|
|
1881
|
-
return () => {
|
|
1882
|
-
// Cleanup
|
|
1883
|
-
};
|
|
1884
|
-
}),
|
|
1885
|
-
},
|
|
1886
|
-
}).createMachine({
|
|
1887
|
-
id: 'addModels',
|
|
1888
|
-
initial: 'preparing',
|
|
1889
|
-
context: ({ input }) => ({
|
|
1890
|
-
schemaContext: input.schemaContext,
|
|
1891
|
-
models: input.models,
|
|
1892
|
-
existingModels: input.existingModels,
|
|
1893
|
-
progress: {
|
|
1894
|
-
stage: 'preparing',
|
|
1895
|
-
totalModels: Object.keys(input.models).length,
|
|
1896
|
-
completedModels: 0,
|
|
1897
|
-
},
|
|
1898
|
-
}),
|
|
1899
|
-
states: {
|
|
1900
|
-
preparing: {
|
|
1901
|
-
invoke: {
|
|
1902
|
-
src: 'validateModels',
|
|
1903
|
-
input: ({ context }) => ({
|
|
1904
|
-
newModels: context.models,
|
|
1905
|
-
existingModels: context.existingModels,
|
|
1906
|
-
}),
|
|
1907
|
-
onDone: {
|
|
1908
|
-
target: 'creatingInstances',
|
|
1909
|
-
actions: xstate.assign({
|
|
1910
|
-
progress: ({ context }) => ({
|
|
1911
|
-
...context.progress,
|
|
1912
|
-
stage: 'creatingInstances',
|
|
1913
|
-
}),
|
|
1914
|
-
}),
|
|
1915
|
-
},
|
|
1916
|
-
onError: {
|
|
1917
|
-
target: 'error',
|
|
1918
|
-
actions: xstate.assign({
|
|
1919
|
-
errors: ({ context, event }) => [
|
|
1920
|
-
...(context.errors || []),
|
|
1921
|
-
{
|
|
1922
|
-
modelName: 'validation',
|
|
1923
|
-
error: event.error instanceof Error ? event.error : new Error(String(event.error))
|
|
1924
|
-
},
|
|
1925
|
-
],
|
|
1926
|
-
}),
|
|
1927
|
-
},
|
|
1928
|
-
},
|
|
1929
|
-
},
|
|
1930
|
-
creatingInstances: {
|
|
1931
|
-
invoke: {
|
|
1932
|
-
src: 'createModelInstances',
|
|
1933
|
-
input: ({ context }) => ({
|
|
1934
|
-
schemaContext: context.schemaContext,
|
|
1935
|
-
models: context.models,
|
|
1936
|
-
}),
|
|
1937
|
-
onDone: {
|
|
1938
|
-
target: 'collectingIds',
|
|
1939
|
-
actions: xstate.assign({
|
|
1940
|
-
modelInstances: ({ event }) => {
|
|
1941
|
-
// Type assertion needed due to XState v5 type inference limitation
|
|
1942
|
-
const doneEvent = event;
|
|
1943
|
-
return doneEvent.output?.modelInstances;
|
|
1944
|
-
},
|
|
1945
|
-
progress: ({ context }) => ({
|
|
1946
|
-
...context.progress,
|
|
1947
|
-
stage: 'collectingIds',
|
|
1948
|
-
}),
|
|
1949
|
-
}),
|
|
1950
|
-
},
|
|
1951
|
-
onError: {
|
|
1952
|
-
target: 'error',
|
|
1953
|
-
actions: xstate.assign({
|
|
1954
|
-
errors: ({ context, event }) => [
|
|
1955
|
-
...(context.errors || []),
|
|
1956
|
-
{
|
|
1957
|
-
modelName: 'createInstances',
|
|
1958
|
-
error: event.error instanceof Error ? event.error : new Error(String(event.error))
|
|
1959
|
-
},
|
|
1960
|
-
],
|
|
1961
|
-
}),
|
|
1962
|
-
},
|
|
1963
|
-
},
|
|
1964
|
-
},
|
|
1965
|
-
collectingIds: {
|
|
1966
|
-
invoke: {
|
|
1967
|
-
src: 'collectModelFileIds',
|
|
1968
|
-
input: ({ context }) => ({
|
|
1969
|
-
modelInstances: context.modelInstances,
|
|
1970
|
-
}),
|
|
1971
|
-
onDone: {
|
|
1972
|
-
target: 'persisting',
|
|
1973
|
-
actions: xstate.assign({
|
|
1974
|
-
modelFileIds: ({ event }) => {
|
|
1975
|
-
// Type assertion needed due to XState v5 type inference limitation
|
|
1976
|
-
const doneEvent = event;
|
|
1977
|
-
return doneEvent.output?.modelFileIds;
|
|
1978
|
-
},
|
|
1979
|
-
progress: ({ context }) => ({
|
|
1980
|
-
...context.progress,
|
|
1981
|
-
stage: 'persisting',
|
|
1982
|
-
}),
|
|
1983
|
-
}),
|
|
1984
|
-
},
|
|
1985
|
-
onError: {
|
|
1986
|
-
target: 'error',
|
|
1987
|
-
actions: xstate.assign({
|
|
1988
|
-
errors: ({ context, event }) => [
|
|
1989
|
-
...(context.errors || []),
|
|
1990
|
-
{
|
|
1991
|
-
modelName: 'collectIds',
|
|
1992
|
-
error: event.error instanceof Error ? event.error : new Error(String(event.error))
|
|
1993
|
-
},
|
|
1994
|
-
],
|
|
1995
|
-
}),
|
|
1996
|
-
},
|
|
1997
|
-
},
|
|
1998
|
-
},
|
|
1999
|
-
persisting: {
|
|
2000
|
-
invoke: {
|
|
2001
|
-
src: 'persistModelsToDb',
|
|
2002
|
-
input: ({ context }) => ({
|
|
2003
|
-
schemaContext: context.schemaContext,
|
|
2004
|
-
models: context.models,
|
|
2005
|
-
modelFileIds: context.modelFileIds,
|
|
2006
|
-
}),
|
|
2007
|
-
onDone: {
|
|
2008
|
-
target: '#addModels.success',
|
|
2009
|
-
actions: xstate.assign({
|
|
2010
|
-
addedModels: ({ event }) => {
|
|
2011
|
-
// Type assertion needed due to XState v5 type inference limitation
|
|
2012
|
-
// Convert through unknown first to avoid type overlap error
|
|
2013
|
-
const doneEvent = event;
|
|
2014
|
-
return { addedModels: doneEvent.output?.addedModels };
|
|
2015
|
-
},
|
|
2016
|
-
}),
|
|
2017
|
-
},
|
|
2018
|
-
onError: {
|
|
2019
|
-
target: 'error',
|
|
2020
|
-
actions: xstate.assign({
|
|
2021
|
-
errors: ({ context, event }) => [
|
|
2022
|
-
...(context.errors || []),
|
|
2023
|
-
{ modelName: 'persist', error: event.error instanceof Error ? event.error : new Error(String(event.error)) },
|
|
2024
|
-
],
|
|
2025
|
-
}),
|
|
2026
|
-
},
|
|
2027
|
-
},
|
|
2028
|
-
},
|
|
2029
|
-
success: {
|
|
2030
|
-
id: 'success',
|
|
2031
|
-
type: 'final',
|
|
2032
|
-
output: ({ context }) => ({ addedModels: context.addedModels?.addedModels || [] }),
|
|
2033
|
-
},
|
|
2034
|
-
error: {
|
|
2035
|
-
type: 'final',
|
|
2036
|
-
output: ({ context }) => ({
|
|
2037
|
-
errors: context.errors || [],
|
|
2038
|
-
}),
|
|
2039
|
-
},
|
|
2040
|
-
},
|
|
2041
|
-
});
|
|
2042
|
-
|
|
2043
1469
|
const logger$c = debug('seedSdk:schema:actors:checkExistingSchema');
|
|
2044
1470
|
/**
|
|
2045
1471
|
* Query model IDs (schemaFileId) from database for a given schema
|
|
@@ -2089,12 +1515,12 @@ const getSchemaFilePath$1 = (name, version, schemaFileId) => {
|
|
|
2089
1515
|
/**
|
|
2090
1516
|
* Create Model instances for all model IDs to ensure they're cached
|
|
2091
1517
|
*/
|
|
2092
|
-
const createModelInstances$1 = async (modelIds) => {
|
|
1518
|
+
const createModelInstances$1 = async (modelIds, evictionEpoch) => {
|
|
2093
1519
|
if (modelIds.length === 0) {
|
|
2094
1520
|
return;
|
|
2095
1521
|
}
|
|
2096
1522
|
try {
|
|
2097
|
-
const mod = await Promise.resolve().then(function () { return require('./index-
|
|
1523
|
+
const mod = await Promise.resolve().then(function () { return require('./index-Cvvt0-5B.js'); }).then(function (n) { return n.Model$1; });
|
|
2098
1524
|
const Model = mod?.Model ?? mod?.default;
|
|
2099
1525
|
if (!Model) {
|
|
2100
1526
|
logger$c('Model not available from dynamic import');
|
|
@@ -2102,7 +1528,8 @@ const createModelInstances$1 = async (modelIds) => {
|
|
|
2102
1528
|
}
|
|
2103
1529
|
const createPromises = modelIds.map(async (modelFileId) => {
|
|
2104
1530
|
try {
|
|
2105
|
-
|
|
1531
|
+
// Not if the schema was evicted (Schema.destroy, test cleanup) since this check started
|
|
1532
|
+
const model = await Model.createById(modelFileId, { evictionEpoch });
|
|
2106
1533
|
if (model) {
|
|
2107
1534
|
logger$c(`Created/cached Model instance for modelFileId "${modelFileId}"`);
|
|
2108
1535
|
}
|
|
@@ -2119,6 +1546,7 @@ const createModelInstances$1 = async (modelIds) => {
|
|
|
2119
1546
|
}
|
|
2120
1547
|
};
|
|
2121
1548
|
const checkExistingSchema = xstate.fromCallback(({ sendBack, input: { context } }) => {
|
|
1549
|
+
const evictionEpoch = main_cjs.currentEvictionEpoch();
|
|
2122
1550
|
const _check = async () => {
|
|
2123
1551
|
const { schemaName } = context;
|
|
2124
1552
|
if (!schemaName) {
|
|
@@ -2139,7 +1567,7 @@ const checkExistingSchema = xstate.fromCallback(({ sendBack, input: { context }
|
|
|
2139
1567
|
if (isInternal && schemaName === main_cjs.SEED_PROTOCOL_SCHEMA_NAME) {
|
|
2140
1568
|
// For Seed Protocol, check if it exists in database
|
|
2141
1569
|
try {
|
|
2142
|
-
const internalSchema = await Promise.resolve().then(function () { return require('./index-
|
|
1570
|
+
const internalSchema = await Promise.resolve().then(function () { return require('./index-Cvvt0-5B.js'); }).then(function (n) { return n.SEEDPROTOCOL_Seed_Protocol_v1; });
|
|
2143
1571
|
const schemaFile = internalSchema.default;
|
|
2144
1572
|
if (db && schemaFile.id) {
|
|
2145
1573
|
const existing = await db
|
|
@@ -2152,7 +1580,7 @@ const checkExistingSchema = xstate.fromCallback(({ sendBack, input: { context }
|
|
|
2152
1580
|
let modelIds = [];
|
|
2153
1581
|
if (schemaRecord.id) {
|
|
2154
1582
|
modelIds = await getModelIdsForSchema(schemaRecord.id);
|
|
2155
|
-
await createModelInstances$1(modelIds);
|
|
1583
|
+
await createModelInstances$1(modelIds, evictionEpoch);
|
|
2156
1584
|
}
|
|
2157
1585
|
sendBack({
|
|
2158
1586
|
type: 'schemaFound',
|
|
@@ -2359,7 +1787,7 @@ const checkExistingSchema = xstate.fromCallback(({ sendBack, input: { context }
|
|
|
2359
1787
|
let modelIds = [];
|
|
2360
1788
|
if (dbSchema.id) {
|
|
2361
1789
|
modelIds = await getModelIdsForSchema(dbSchema.id);
|
|
2362
|
-
await createModelInstances$1(modelIds);
|
|
1790
|
+
await createModelInstances$1(modelIds, evictionEpoch);
|
|
2363
1791
|
}
|
|
2364
1792
|
const loadedAt = Date.now();
|
|
2365
1793
|
const dbVersion = dbSchema.version || schemaFile.version;
|
|
@@ -2413,7 +1841,7 @@ const checkExistingSchema = xstate.fromCallback(({ sendBack, input: { context }
|
|
|
2413
1841
|
let modelIds = [];
|
|
2414
1842
|
if (matchingDraft.id) {
|
|
2415
1843
|
modelIds = await getModelIdsForSchema(matchingDraft.id);
|
|
2416
|
-
await createModelInstances$1(modelIds);
|
|
1844
|
+
await createModelInstances$1(modelIds, evictionEpoch);
|
|
2417
1845
|
}
|
|
2418
1846
|
const loadedAt = Date.now();
|
|
2419
1847
|
const dbVersion = matchingDraft.version || schemaFile.version;
|
|
@@ -2448,7 +1876,7 @@ const checkExistingSchema = xstate.fromCallback(({ sendBack, input: { context }
|
|
|
2448
1876
|
.limit(1);
|
|
2449
1877
|
if (schemaRecords.length > 0 && schemaRecords[0].id) {
|
|
2450
1878
|
modelIds = await getModelIdsForSchema(schemaRecords[0].id);
|
|
2451
|
-
await createModelInstances$1(modelIds);
|
|
1879
|
+
await createModelInstances$1(modelIds, evictionEpoch);
|
|
2452
1880
|
}
|
|
2453
1881
|
}
|
|
2454
1882
|
}
|
|
@@ -2497,7 +1925,7 @@ const writeSchemaToDb = xstate.fromCallback(({ sendBack, input }) => {
|
|
|
2497
1925
|
if (isInternal && schemaName === main_cjs.SEED_PROTOCOL_SCHEMA_NAME) {
|
|
2498
1926
|
// For Seed Protocol, load from internal file
|
|
2499
1927
|
logger$b(`Loading internal Seed Protocol schema from SDK`);
|
|
2500
|
-
const internalSchema = await Promise.resolve().then(function () { return require('./index-
|
|
1928
|
+
const internalSchema = await Promise.resolve().then(function () { return require('./index-Cvvt0-5B.js'); }).then(function (n) { return n.SEEDPROTOCOL_Seed_Protocol_v1; });
|
|
2501
1929
|
finalSchema = internalSchema.default;
|
|
2502
1930
|
const db = main_cjs.BaseDb.getAppDb();
|
|
2503
1931
|
if (db && finalSchema.id) {
|
|
@@ -2954,6 +2382,7 @@ const logger$7 = debug('seedSdk:schema:actors:createModelInstances');
|
|
|
2954
2382
|
* This ensures that Model.getById() in Schema.getContext() will find the instances
|
|
2955
2383
|
*/
|
|
2956
2384
|
const createModelInstances = xstate.fromCallback(({ sendBack, input }) => {
|
|
2385
|
+
const evictionEpoch = main_cjs.currentEvictionEpoch();
|
|
2957
2386
|
const _create = async () => {
|
|
2958
2387
|
const { modelIds, schemaName } = input;
|
|
2959
2388
|
if (modelIds.length === 0) {
|
|
@@ -2965,13 +2394,14 @@ const createModelInstances = xstate.fromCallback(({ sendBack, input }) => {
|
|
|
2965
2394
|
return;
|
|
2966
2395
|
}
|
|
2967
2396
|
try {
|
|
2968
|
-
const modelMod = await Promise.resolve().then(function () { return require('./index-
|
|
2397
|
+
const modelMod = await Promise.resolve().then(function () { return require('./index-Cvvt0-5B.js'); }).then(function (n) { return n.Model$1; });
|
|
2969
2398
|
const { Model } = modelMod;
|
|
2970
2399
|
// Create instances for all model IDs in parallel
|
|
2971
2400
|
// Model.createById() will check cache first, then query DB and create if needed
|
|
2972
2401
|
const createPromises = modelIds.map(async (modelFileId) => {
|
|
2973
2402
|
try {
|
|
2974
|
-
|
|
2403
|
+
// Not if the schema was evicted (Schema.destroy, test cleanup) since this started
|
|
2404
|
+
const model = await Model.createById(modelFileId, { evictionEpoch });
|
|
2975
2405
|
if (model) {
|
|
2976
2406
|
logger$7(`Created/cached Model instance for modelFileId "${modelFileId}"`);
|
|
2977
2407
|
return true;
|
|
@@ -3051,7 +2481,7 @@ const verifyModelInstancesInCache = xstate.fromCallback(({ sendBack, input }) =>
|
|
|
3051
2481
|
}
|
|
3052
2482
|
try {
|
|
3053
2483
|
const result = await verifyWithRetry$2(async () => {
|
|
3054
|
-
const modelMod = await Promise.resolve().then(function () { return require('./index-
|
|
2484
|
+
const modelMod = await Promise.resolve().then(function () { return require('./index-Cvvt0-5B.js'); }).then(function (n) { return n.Model$1; });
|
|
3055
2485
|
const { Model } = modelMod;
|
|
3056
2486
|
// Check each model ID in the cache
|
|
3057
2487
|
const verifiedInstances = [];
|
|
@@ -3108,7 +2538,7 @@ const writePropertiesToDb = xstate.fromCallback(({ sendBack, input }) => {
|
|
|
3108
2538
|
const _write = async () => {
|
|
3109
2539
|
const { modelIds } = input;
|
|
3110
2540
|
try {
|
|
3111
|
-
const modelSchemaMod = await Promise.resolve().then(function () { return require('./index-
|
|
2541
|
+
const modelSchemaMod = await Promise.resolve().then(function () { return require('./index-Cvvt0-5B.js'); }).then(function (n) { return n.ModelSchema; });
|
|
3112
2542
|
const { models: modelsTable, properties: propertiesTable } = modelSchemaMod;
|
|
3113
2543
|
const drizzleMod = await import('drizzle-orm');
|
|
3114
2544
|
const { eq } = drizzleMod;
|
|
@@ -3296,9 +2726,9 @@ const createPropertyInstances = xstate.fromCallback(({ sendBack, input }) => {
|
|
|
3296
2726
|
return;
|
|
3297
2727
|
}
|
|
3298
2728
|
try {
|
|
3299
|
-
const modProp = await Promise.resolve().then(function () { return require('./ModelProperty-
|
|
2729
|
+
const modProp = await Promise.resolve().then(function () { return require('./ModelProperty-Dv7AQfmQ.js'); });
|
|
3300
2730
|
const ModelProperty = modProp?.ModelProperty ?? modProp?.default;
|
|
3301
|
-
const modModel = await Promise.resolve().then(function () { return require('./index-
|
|
2731
|
+
const modModel = await Promise.resolve().then(function () { return require('./index-Cvvt0-5B.js'); }).then(function (n) { return n.Model$1; });
|
|
3302
2732
|
const Model = modModel?.Model ?? modModel?.default;
|
|
3303
2733
|
if (!ModelProperty || !Model) {
|
|
3304
2734
|
logger$3('ModelProperty or Model not available from dynamic import');
|
|
@@ -3403,7 +2833,7 @@ const verifyPropertyInstancesInCache = xstate.fromCallback(({ sendBack, input })
|
|
|
3403
2833
|
}
|
|
3404
2834
|
try {
|
|
3405
2835
|
const result = await verifyWithRetry(async () => {
|
|
3406
|
-
const mod = await Promise.resolve().then(function () { return require('./ModelProperty-
|
|
2836
|
+
const mod = await Promise.resolve().then(function () { return require('./ModelProperty-Dv7AQfmQ.js'); });
|
|
3407
2837
|
const ModelProperty = mod?.ModelProperty ?? mod?.default;
|
|
3408
2838
|
if (!ModelProperty) {
|
|
3409
2839
|
throw new Error('ModelProperty not available from dynamic import');
|
|
@@ -3463,7 +2893,6 @@ const schemaMachine = xstate.setup({
|
|
|
3463
2893
|
actors: {
|
|
3464
2894
|
loadOrCreateSchema,
|
|
3465
2895
|
validateSchema,
|
|
3466
|
-
addModelsMachine,
|
|
3467
2896
|
writeProcessMachine: main_cjs.writeProcessMachine,
|
|
3468
2897
|
// Staged loading actors
|
|
3469
2898
|
checkExistingSchema,
|
|
@@ -3482,9 +2911,6 @@ const schemaMachine = xstate.setup({
|
|
|
3482
2911
|
isSchemaValid: ({ context }) => {
|
|
3483
2912
|
return !context._validationErrors || context._validationErrors.length === 0;
|
|
3484
2913
|
},
|
|
3485
|
-
hasValidationErrors: ({ context }) => {
|
|
3486
|
-
return !!context._validationErrors && context._validationErrors.length > 0;
|
|
3487
|
-
},
|
|
3488
2914
|
},
|
|
3489
2915
|
}).createMachine({
|
|
3490
2916
|
id: 'schema',
|
|
@@ -3568,22 +2994,15 @@ const schemaMachine = xstate.setup({
|
|
|
3568
2994
|
}),
|
|
3569
2995
|
},
|
|
3570
2996
|
destroyStarted: {
|
|
3571
|
-
actions: xstate.assign({
|
|
3572
|
-
},
|
|
3573
|
-
destroyDone: {
|
|
3574
|
-
actions: xstate.assign({ _destroyInProgress: false }),
|
|
2997
|
+
actions: xstate.assign({ _destroyError: null }),
|
|
3575
2998
|
},
|
|
3576
2999
|
destroyError: {
|
|
3577
3000
|
actions: xstate.assign(({ event }) => ({
|
|
3578
|
-
_destroyInProgress: false,
|
|
3579
3001
|
_destroyError: event.error instanceof Error
|
|
3580
3002
|
? { message: event.error.message, name: event.error.name }
|
|
3581
3003
|
: { message: String(event.error) },
|
|
3582
3004
|
})),
|
|
3583
3005
|
},
|
|
3584
|
-
clearDestroyError: {
|
|
3585
|
-
actions: xstate.assign({ _destroyError: null }),
|
|
3586
|
-
},
|
|
3587
3006
|
},
|
|
3588
3007
|
states: {
|
|
3589
3008
|
loading: {
|
|
@@ -3972,9 +3391,6 @@ const schemaMachine = xstate.setup({
|
|
|
3972
3391
|
},
|
|
3973
3392
|
}),
|
|
3974
3393
|
on: {
|
|
3975
|
-
addModels: {
|
|
3976
|
-
target: 'addingModels',
|
|
3977
|
-
},
|
|
3978
3394
|
validateSchema: {
|
|
3979
3395
|
target: 'validating',
|
|
3980
3396
|
},
|
|
@@ -3992,122 +3408,27 @@ const schemaMachine = xstate.setup({
|
|
|
3992
3408
|
},
|
|
3993
3409
|
},
|
|
3994
3410
|
},
|
|
3995
|
-
always:
|
|
3996
|
-
|
|
3997
|
-
|
|
3998
|
-
},
|
|
3999
|
-
},
|
|
4000
|
-
addingModels: {
|
|
4001
|
-
entry: xstate.assign({
|
|
4002
|
-
// Move first pending item to current if not already set
|
|
4003
|
-
_pendingModelAdditions: ({ context, event }) => {
|
|
4004
|
-
const pending = context._pendingModelAdditions || [];
|
|
4005
|
-
// If event has models, it's a new request - add to queue if we're already processing
|
|
4006
|
-
if (event.models) {
|
|
4007
|
-
return [
|
|
4008
|
-
...pending,
|
|
4009
|
-
{
|
|
4010
|
-
models: event.models,
|
|
4011
|
-
timestamp: Date.now(),
|
|
4012
|
-
},
|
|
4013
|
-
];
|
|
4014
|
-
}
|
|
4015
|
-
return pending;
|
|
4016
|
-
},
|
|
4017
|
-
}),
|
|
4018
|
-
invoke: {
|
|
4019
|
-
src: 'addModelsMachine',
|
|
4020
|
-
input: ({ context }) => {
|
|
4021
|
-
// Get models from first item in pending queue, or from context if queue is empty
|
|
4022
|
-
const pending = context._pendingModelAdditions || [];
|
|
4023
|
-
const models = pending.length > 0 ? pending[0].models : {};
|
|
4024
|
-
return {
|
|
4025
|
-
schemaContext: context,
|
|
4026
|
-
models,
|
|
4027
|
-
existingModels: context.models || {},
|
|
4028
|
-
};
|
|
4029
|
-
},
|
|
4030
|
-
onDone: {
|
|
4031
|
-
actions: [
|
|
4032
|
-
xstate.assign({
|
|
4033
|
-
models: ({ context, event }) => {
|
|
4034
|
-
const addedModels = event.output?.addedModels || {};
|
|
4035
|
-
return {
|
|
4036
|
-
...(context.models || {}),
|
|
4037
|
-
...addedModels,
|
|
4038
|
-
};
|
|
4039
|
-
},
|
|
4040
|
-
_pendingModelAdditions: ({ context }) => {
|
|
4041
|
-
// Remove first item from queue (the one we just processed)
|
|
4042
|
-
const pending = context._pendingModelAdditions || [];
|
|
4043
|
-
return pending.length > 1 ? pending.slice(1) : undefined;
|
|
4044
|
-
},
|
|
4045
|
-
}),
|
|
4046
|
-
// Trigger validation after models are added
|
|
4047
|
-
({ self }) => {
|
|
4048
|
-
self.send({ type: 'validateSchema' });
|
|
4049
|
-
},
|
|
4050
|
-
],
|
|
4051
|
-
},
|
|
4052
|
-
onError: {
|
|
4053
|
-
actions: xstate.assign({
|
|
4054
|
-
_modelAdditionErrors: ({ context, event }) => {
|
|
4055
|
-
const existing = context._modelAdditionErrors || [];
|
|
4056
|
-
return [
|
|
4057
|
-
...existing,
|
|
4058
|
-
{
|
|
4059
|
-
error: event.error instanceof Error ? event.error : new Error(String(event.error)),
|
|
4060
|
-
timestamp: Date.now(),
|
|
4061
|
-
},
|
|
4062
|
-
];
|
|
4063
|
-
},
|
|
4064
|
-
_pendingModelAdditions: ({ context }) => {
|
|
4065
|
-
// Remove first item from queue even on error, so we can process next
|
|
4066
|
-
const pending = context._pendingModelAdditions || [];
|
|
4067
|
-
return pending.length > 1 ? pending.slice(1) : undefined;
|
|
4068
|
-
},
|
|
4069
|
-
}),
|
|
4070
|
-
},
|
|
4071
|
-
},
|
|
4072
|
-
on: {
|
|
4073
|
-
// Queue additional requests while processing
|
|
4074
|
-
addModels: {
|
|
4075
|
-
actions: xstate.assign({
|
|
4076
|
-
_pendingModelAdditions: ({ context, event }) => {
|
|
4077
|
-
const existing = context._pendingModelAdditions || [];
|
|
4078
|
-
return [
|
|
4079
|
-
...existing,
|
|
4080
|
-
{
|
|
4081
|
-
models: event.models,
|
|
4082
|
-
timestamp: Date.now(),
|
|
4083
|
-
},
|
|
4084
|
-
];
|
|
4085
|
-
},
|
|
4086
|
-
}),
|
|
4087
|
-
},
|
|
4088
|
-
},
|
|
4089
|
-
always: [
|
|
4090
|
-
{
|
|
4091
|
-
// If there are pending additions after processing, process next one
|
|
4092
|
-
guard: ({ context }) => {
|
|
4093
|
-
const pending = context._pendingModelAdditions || [];
|
|
4094
|
-
return pending.length > 0;
|
|
4095
|
-
},
|
|
4096
|
-
target: 'addingModels',
|
|
4097
|
-
},
|
|
4098
|
-
{
|
|
4099
|
-
// No more pending, return to idle
|
|
4100
|
-
target: 'idle',
|
|
4101
|
-
},
|
|
4102
|
-
],
|
|
3411
|
+
// No `always: hasValidationErrors -> validating` here: validation is re-run when the context changes
|
|
3412
|
+
// (updateContext) or on request (validateSchema). Re-entering while errors exist would loop
|
|
3413
|
+
// forever on a schema that is still invalid.
|
|
4103
3414
|
},
|
|
4104
3415
|
validating: {
|
|
4105
3416
|
on: {
|
|
3417
|
+
// These state-level handlers take precedence over the root ones, so they must store the result
|
|
3418
|
+
// themselves.
|
|
4106
3419
|
validationSuccess: {
|
|
4107
3420
|
target: 'idle',
|
|
3421
|
+
actions: xstate.assign(({ context }) => ({
|
|
3422
|
+
...context,
|
|
3423
|
+
_validationErrors: [],
|
|
3424
|
+
})),
|
|
4108
3425
|
},
|
|
4109
3426
|
validationError: {
|
|
4110
3427
|
target: 'idle',
|
|
3428
|
+
actions: xstate.assign(({ context, event }) => ({
|
|
3429
|
+
...context,
|
|
3430
|
+
_validationErrors: event.errors,
|
|
3431
|
+
})),
|
|
4111
3432
|
},
|
|
4112
3433
|
},
|
|
4113
3434
|
invoke: {
|
|
@@ -4248,7 +3569,6 @@ class Schema {
|
|
|
4248
3569
|
// Initialize instance state in WeakMap (only non-serializable resources)
|
|
4249
3570
|
schemaInstanceState.set(this, {
|
|
4250
3571
|
liveQuerySubscription: null,
|
|
4251
|
-
modelInstances: new Map(),
|
|
4252
3572
|
});
|
|
4253
3573
|
// Set up liveQuery subscription for cross-instance model updates
|
|
4254
3574
|
// This will be initialized once we have the schemaId
|
|
@@ -4458,118 +3778,10 @@ class Schema {
|
|
|
4458
3778
|
}
|
|
4459
3779
|
}
|
|
4460
3780
|
else if (prop === 'models') {
|
|
4461
|
-
// Models are read-only computed
|
|
4462
|
-
//
|
|
4463
|
-
throw new Error('Cannot set schema.models directly. Models are computed from Model instances
|
|
4464
|
-
|
|
4465
|
-
// Convert array of Model instances or plain objects back to object format
|
|
4466
|
-
let modelsObject: { [key: string]: any }
|
|
4467
|
-
if (Array.isArray(value)) {
|
|
4468
|
-
modelsObject = {}
|
|
4469
|
-
const seenNames = new Set<string>()
|
|
4470
|
-
|
|
4471
|
-
// Check for duplicate model names
|
|
4472
|
-
for (const model of value) {
|
|
4473
|
-
// Handle Model instances
|
|
4474
|
-
if (model instanceof Model) {
|
|
4475
|
-
const modelName = model.modelName!
|
|
4476
|
-
if (seenNames.has(modelName)) {
|
|
4477
|
-
throw new Error(
|
|
4478
|
-
`Duplicate model name detected: "${modelName}". Each model must have a unique name.`
|
|
4479
|
-
)
|
|
4480
|
-
}
|
|
4481
|
-
seenNames.add(modelName)
|
|
4482
|
-
modelsObject[modelName] = {
|
|
4483
|
-
properties: model.properties || {},
|
|
4484
|
-
}
|
|
4485
|
-
} else if (model && typeof model === 'object' && 'name' in model) {
|
|
4486
|
-
// Handle plain objects
|
|
4487
|
-
const modelName = model.name as string
|
|
4488
|
-
if (seenNames.has(modelName)) {
|
|
4489
|
-
throw new Error(
|
|
4490
|
-
`Duplicate model name detected: "${modelName}". Each model must have a unique name.`
|
|
4491
|
-
)
|
|
4492
|
-
}
|
|
4493
|
-
seenNames.add(modelName)
|
|
4494
|
-
const { name, ...modelData } = model
|
|
4495
|
-
modelsObject[name] = modelData
|
|
4496
|
-
}
|
|
4497
|
-
}
|
|
4498
|
-
} else {
|
|
4499
|
-
modelsObject = value || {}
|
|
4500
|
-
// Check for duplicates in object format too
|
|
4501
|
-
const modelNames = Object.keys(modelsObject)
|
|
4502
|
-
const seenNames = new Set<string>()
|
|
4503
|
-
for (const modelName of modelNames) {
|
|
4504
|
-
if (seenNames.has(modelName)) {
|
|
4505
|
-
throw new Error(
|
|
4506
|
-
`Duplicate model name detected: "${modelName}". Each model must have a unique name.`
|
|
4507
|
-
)
|
|
4508
|
-
}
|
|
4509
|
-
seenNames.add(modelName)
|
|
4510
|
-
}
|
|
4511
|
-
}
|
|
4512
|
-
|
|
4513
|
-
const context = newInstance._getSnapshotContext()
|
|
4514
|
-
|
|
4515
|
-
// Check if service is still running before sending events
|
|
4516
|
-
let snapshot = newInstance._service.getSnapshot()
|
|
4517
|
-
const wasServiceStopped = snapshot.status === 'stopped'
|
|
4518
|
-
|
|
4519
|
-
if (wasServiceStopped) {
|
|
4520
|
-
logger(`Service is stopped, will restart before adding models`)
|
|
4521
|
-
newInstance._service.start()
|
|
4522
|
-
snapshot = newInstance._service.getSnapshot()
|
|
4523
|
-
}
|
|
4524
|
-
|
|
4525
|
-
// Check current state after potential restart
|
|
4526
|
-
const currentState = snapshot.value
|
|
4527
|
-
// Check if state is a loading state object (XState v5 nested states)
|
|
4528
|
-
const isServiceLoading = typeof currentState === 'object' && 'loading' in currentState
|
|
4529
|
-
|
|
4530
|
-
// If service is loading, wait for it to finish before adding models
|
|
4531
|
-
if (isServiceLoading || wasServiceStopped) {
|
|
4532
|
-
logger(`Service is ${isServiceLoading ? 'loading' : 'was stopped'}, will add models after loading completes`)
|
|
4533
|
-
|
|
4534
|
-
const loadingSubscription = newInstance._service.subscribe((snapshot) => {
|
|
4535
|
-
if (snapshot.value === 'idle') {
|
|
4536
|
-
loadingSubscription.unsubscribe()
|
|
4537
|
-
logger(`Service finished loading, sending addModels event`)
|
|
4538
|
-
newInstance._service.send({
|
|
4539
|
-
type: 'addModels',
|
|
4540
|
-
models: modelsObject,
|
|
4541
|
-
})
|
|
4542
|
-
} else if (snapshot.value === 'error') {
|
|
4543
|
-
loadingSubscription.unsubscribe()
|
|
4544
|
-
logger(`Service failed to load, cannot add models`)
|
|
4545
|
-
}
|
|
4546
|
-
})
|
|
4547
|
-
} else {
|
|
4548
|
-
// Service is ready, send addModels event immediately
|
|
4549
|
-
// The state machine will handle all the complexity (validation, instance creation, ID collection, persistence)
|
|
4550
|
-
logger(`Service is ready, sending addModels event`)
|
|
4551
|
-
newInstance._service.send({
|
|
4552
|
-
type: 'addModels',
|
|
4553
|
-
models: modelsObject,
|
|
4554
|
-
})
|
|
4555
|
-
}
|
|
4556
|
-
|
|
4557
|
-
// Mark schema as draft when models change
|
|
4558
|
-
newInstance._service.send({
|
|
4559
|
-
type: 'markAsDraft',
|
|
4560
|
-
propertyKey: 'schema:models',
|
|
4561
|
-
})
|
|
4562
|
-
|
|
4563
|
-
// Save draft to database immediately so changes persist
|
|
4564
|
-
newInstance._saveDraftToDb().catch((error) => {
|
|
4565
|
-
logger(`Failed to save draft to database: ${error instanceof Error ? error.message : String(error)}`)
|
|
4566
|
-
})
|
|
4567
|
-
|
|
4568
|
-
// Update client context so useSchema and useSchemas hooks reflect the change
|
|
4569
|
-
newInstance._updateClientContext().catch(() => {
|
|
4570
|
-
// Silently fail if not in browser environment
|
|
4571
|
-
})
|
|
4572
|
-
*/
|
|
3781
|
+
// Models are read-only, computed from Model instances. Array assignment was removed because
|
|
3782
|
+
// the draft save could run before the new Model instances existed, losing them.
|
|
3783
|
+
throw new Error('Cannot set schema.models directly. Models are computed from Model instances; ' +
|
|
3784
|
+
'use Model.create(modelName, schema, { properties }) to add one.');
|
|
4573
3785
|
}
|
|
4574
3786
|
else if (prop === 'createdAt' || prop === 'updatedAt') {
|
|
4575
3787
|
// Update metadata object
|
|
@@ -4620,7 +3832,12 @@ class Schema {
|
|
|
4620
3832
|
return schema;
|
|
4621
3833
|
const readyPromise = main_cjs.waitForEntityIdle(schema, { timeout: readyTimeout }).then(() => schema);
|
|
4622
3834
|
this.pendingSchemaByName.set(schemaName, readyPromise);
|
|
4623
|
-
|
|
3835
|
+
// Clear on both outcomes without a .finally() chain: that derived promise would reject unhandled
|
|
3836
|
+
// whenever readyPromise does, even when the caller handles the rejection.
|
|
3837
|
+
const clearPending = () => {
|
|
3838
|
+
this.pendingSchemaByName.delete(schemaName);
|
|
3839
|
+
};
|
|
3840
|
+
readyPromise.then(clearPending, clearPending);
|
|
4624
3841
|
return readyPromise;
|
|
4625
3842
|
}
|
|
4626
3843
|
/**
|
|
@@ -5181,13 +4398,19 @@ class Schema {
|
|
|
5181
4398
|
_dbVersion: publishedSchema.version,
|
|
5182
4399
|
});
|
|
5183
4400
|
// Clear edited flags on all ModelProperty instances and in database
|
|
5184
|
-
const modelPropertyMod = await Promise.resolve().then(function () { return require('./ModelProperty-
|
|
4401
|
+
const modelPropertyMod = await Promise.resolve().then(function () { return require('./ModelProperty-Dv7AQfmQ.js'); });
|
|
5185
4402
|
const { ModelProperty } = modelPropertyMod;
|
|
5186
4403
|
for (const propertyKey of context._editedProperties) {
|
|
5187
4404
|
const [modelName, propertyName] = propertyKey.split(':');
|
|
5188
|
-
const cacheKey = `${modelName}:${propertyName}`;
|
|
5189
4405
|
const ModelPropertyClass = ModelProperty;
|
|
5190
|
-
|
|
4406
|
+
// Model names are only unique per schema: pick this schema's instance, which may be keyed by id.
|
|
4407
|
+
const thisSchemaName = this.schemaName;
|
|
4408
|
+
const cachedInstance = [...ModelPropertyClass.instanceCache.values()].find(({ instance }) => {
|
|
4409
|
+
const ctx = instance.getService().getSnapshot().context;
|
|
4410
|
+
return (ctx.modelName === modelName &&
|
|
4411
|
+
ctx.name === propertyName &&
|
|
4412
|
+
(!ctx._schemaName || ctx._schemaName === thisSchemaName));
|
|
4413
|
+
});
|
|
5191
4414
|
if (cachedInstance) {
|
|
5192
4415
|
const modelProperty = cachedInstance.instance;
|
|
5193
4416
|
modelProperty.getService().getSnapshot().context;
|
|
@@ -5198,12 +4421,10 @@ class Schema {
|
|
|
5198
4421
|
// Clear isEdited flag in database
|
|
5199
4422
|
try {
|
|
5200
4423
|
if (db && modelName && propertyName) {
|
|
5201
|
-
// Find model by name
|
|
5202
|
-
const
|
|
5203
|
-
|
|
5204
|
-
|
|
5205
|
-
.where(drizzleOrm.eq(main_cjs.models.name, modelName))
|
|
5206
|
-
.limit(1);
|
|
4424
|
+
// Find this schema's model by name
|
|
4425
|
+
const { resolveModelRecord } = await Promise.resolve().then(function () { return require('./index-Cvvt0-5B.js'); }).then(function (n) { return n.resolveModelRecord$1; });
|
|
4426
|
+
const modelRecord = await resolveModelRecord(modelName, { schemaName: thisSchemaName }, db);
|
|
4427
|
+
const modelRecords = modelRecord ? [modelRecord] : [];
|
|
5207
4428
|
if (modelRecords.length > 0) {
|
|
5208
4429
|
// Find property by name and modelId
|
|
5209
4430
|
const propertyRecords = await db
|
|
@@ -5702,6 +4923,47 @@ class Schema {
|
|
|
5702
4923
|
saveDraftLogger(`Removed schema from saving set (key: ${saveKey})`);
|
|
5703
4924
|
}
|
|
5704
4925
|
}
|
|
4926
|
+
/**
|
|
4927
|
+
* Force-evict the cached Schema instance(s) named `schemaName`, ignoring refCounts: stop their live
|
|
4928
|
+
* query and service. Schema.destroy does the same for itself. For code that deletes a schema's rows
|
|
4929
|
+
* without destroying it (test cleanup): a live Schema keeps re-creating its models from its live
|
|
4930
|
+
* query while their rows are being deleted.
|
|
4931
|
+
*/
|
|
4932
|
+
static evict(schemaName) {
|
|
4933
|
+
const instances = new Set();
|
|
4934
|
+
for (const { instance } of Schema.instanceCacheById.values())
|
|
4935
|
+
instances.add(instance);
|
|
4936
|
+
for (const { instance } of Schema.instanceCacheByName.values())
|
|
4937
|
+
instances.add(instance);
|
|
4938
|
+
for (const instance of instances) {
|
|
4939
|
+
let context;
|
|
4940
|
+
try {
|
|
4941
|
+
context = instance._getSnapshotContext();
|
|
4942
|
+
}
|
|
4943
|
+
catch {
|
|
4944
|
+
continue;
|
|
4945
|
+
}
|
|
4946
|
+
if (context.schemaName !== schemaName)
|
|
4947
|
+
continue;
|
|
4948
|
+
main_cjs.clearDestroySubscriptions(instance, {
|
|
4949
|
+
instanceState: schemaInstanceState,
|
|
4950
|
+
onUnload: () => schemaInstanceState.delete(instance),
|
|
4951
|
+
});
|
|
4952
|
+
main_cjs.forceRemoveFromCaches(instance, {
|
|
4953
|
+
getCacheKeys: () => [context.id, context.schemaName].filter((k) => !!k),
|
|
4954
|
+
caches: [
|
|
4955
|
+
Schema.instanceCacheById,
|
|
4956
|
+
Schema.instanceCacheByName,
|
|
4957
|
+
],
|
|
4958
|
+
});
|
|
4959
|
+
try {
|
|
4960
|
+
instance._service.stop();
|
|
4961
|
+
}
|
|
4962
|
+
catch {
|
|
4963
|
+
// Service might already be stopped
|
|
4964
|
+
}
|
|
4965
|
+
}
|
|
4966
|
+
}
|
|
5705
4967
|
unload() {
|
|
5706
4968
|
try {
|
|
5707
4969
|
const context = this._getSnapshotContext();
|
|
@@ -5765,6 +5027,16 @@ class Schema {
|
|
|
5765
5027
|
Schema.instanceCacheByName,
|
|
5766
5028
|
],
|
|
5767
5029
|
});
|
|
5030
|
+
// The rows for this schema's models and properties are deleted below; evict their cached
|
|
5031
|
+
// instances too, or a re-import would get them back with dangling _dbIds.
|
|
5032
|
+
if (schemaName) {
|
|
5033
|
+
const evictedModelNames = main_cjs.Model.evictForSchema(schemaName);
|
|
5034
|
+
const { ModelProperty } = await Promise.resolve().then(function () { return require('./ModelProperty-Dv7AQfmQ.js'); });
|
|
5035
|
+
ModelProperty.evictForModels(evictedModelNames, schemaName);
|
|
5036
|
+
// Evicting stops new writes but not ones already running; let those land before deleting their rows
|
|
5037
|
+
const { waitForInFlightWrites } = await Promise.resolve().then(function () { return require('./index-Cvvt0-5B.js'); }).then(function (n) { return n.writeToDatabase; });
|
|
5038
|
+
await waitForInFlightWrites();
|
|
5039
|
+
}
|
|
5768
5040
|
await main_cjs.runDestroyLifecycle(this, {
|
|
5769
5041
|
getService: (instance) => instance._service,
|
|
5770
5042
|
doDestroy: async () => {
|
|
@@ -5906,8 +5178,10 @@ class Schema {
|
|
|
5906
5178
|
}
|
|
5907
5179
|
},
|
|
5908
5180
|
createChildInstances: async (ids) => {
|
|
5181
|
+
// One at a time: an eviction of this schema part way through stops the rest
|
|
5182
|
+
const evictionEpoch = main_cjs.currentEvictionEpoch();
|
|
5909
5183
|
for (const id of ids) {
|
|
5910
|
-
await main_cjs.Model.createById(id);
|
|
5184
|
+
await main_cjs.Model.createById(id, { evictionEpoch });
|
|
5911
5185
|
}
|
|
5912
5186
|
},
|
|
5913
5187
|
queryInitialData: async (schemaId) => {
|
|
@@ -5977,12 +5251,6 @@ Schema.pendingSchemaByName = new Map();
|
|
|
5977
5251
|
// Track which schemas are currently being saved to prevent concurrent saves
|
|
5978
5252
|
Schema.savingSchemas = new Set();
|
|
5979
5253
|
|
|
5980
|
-
var Schema$1 = /*#__PURE__*/Object.freeze({
|
|
5981
|
-
__proto__: null,
|
|
5982
|
-
Schema: Schema,
|
|
5983
|
-
schemaInstanceState: schemaInstanceState
|
|
5984
|
-
});
|
|
5985
|
-
|
|
5986
5254
|
exports.Schema = Schema;
|
|
5987
5255
|
exports.schemaInstanceState = schemaInstanceState;
|
|
5988
|
-
//# sourceMappingURL=Schema-
|
|
5256
|
+
//# sourceMappingURL=Schema-BHVp1g-M.js.map
|