@warlock.js/cascade 4.0.48 → 4.0.59
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/cjs/context/database-data-source-context.d.ts +29 -0
- package/cjs/context/database-data-source-context.d.ts.map +1 -0
- package/cjs/context/database-data-source-context.js +28 -0
- package/cjs/context/database-data-source-context.js.map +1 -0
- package/cjs/context/database-transaction-context.d.ts +31 -0
- package/cjs/context/database-transaction-context.d.ts.map +1 -0
- package/cjs/context/database-transaction-context.js +34 -0
- package/cjs/context/database-transaction-context.js.map +1 -0
- package/cjs/contracts/database-driver.contract.d.ts +143 -0
- package/cjs/contracts/database-driver.contract.d.ts.map +1 -0
- package/cjs/contracts/database-id-generator.contract.d.ts +109 -0
- package/cjs/contracts/database-id-generator.contract.d.ts.map +1 -0
- package/cjs/contracts/database-remover.contract.d.ts +104 -0
- package/cjs/contracts/database-remover.contract.d.ts.map +1 -0
- package/cjs/contracts/database-restorer.contract.d.ts +143 -0
- package/cjs/contracts/database-restorer.contract.d.ts.map +1 -0
- package/cjs/contracts/database-writer.contract.d.ts +119 -0
- package/cjs/contracts/database-writer.contract.d.ts.map +1 -0
- package/cjs/contracts/driver-blueprint.contract.d.ts +45 -0
- package/cjs/contracts/driver-blueprint.contract.d.ts.map +1 -0
- package/cjs/contracts/index.d.ts +10 -0
- package/cjs/contracts/index.d.ts.map +1 -0
- package/cjs/contracts/migration-driver.contract.d.ts +365 -0
- package/cjs/contracts/migration-driver.contract.d.ts.map +1 -0
- package/cjs/contracts/query-builder.contract.d.ts +1128 -0
- package/cjs/contracts/query-builder.contract.d.ts.map +1 -0
- package/cjs/contracts/sync-adapter.contract.d.ts +58 -0
- package/cjs/contracts/sync-adapter.contract.d.ts.map +1 -0
- package/cjs/data-source/data-source-registry.d.ts +104 -0
- package/cjs/data-source/data-source-registry.d.ts.map +1 -0
- package/cjs/data-source/data-source-registry.js +138 -0
- package/cjs/data-source/data-source-registry.js.map +1 -0
- package/cjs/data-source/data-source.d.ts +106 -0
- package/cjs/data-source/data-source.d.ts.map +1 -0
- package/cjs/data-source/data-source.js +77 -0
- package/cjs/data-source/data-source.js.map +1 -0
- package/cjs/database-dirty-tracker.d.ts +253 -0
- package/cjs/database-dirty-tracker.d.ts.map +1 -0
- package/cjs/database-dirty-tracker.js +389 -0
- package/cjs/database-dirty-tracker.js.map +1 -0
- package/cjs/drivers/mongo/mongo-id-generator.d.ts +116 -0
- package/cjs/drivers/mongo/mongo-id-generator.d.ts.map +1 -0
- package/cjs/drivers/mongo/mongo-id-generator.js +149 -0
- package/cjs/drivers/mongo/mongo-id-generator.js.map +1 -0
- package/cjs/drivers/mongo/mongo-migration-driver.d.ts +228 -0
- package/cjs/drivers/mongo/mongo-migration-driver.d.ts.map +1 -0
- package/cjs/drivers/mongo/mongo-migration-driver.js +524 -0
- package/cjs/drivers/mongo/mongo-migration-driver.js.map +1 -0
- package/cjs/drivers/mongo/mongo-query-builder.d.ts +922 -0
- package/cjs/drivers/mongo/mongo-query-builder.d.ts.map +1 -0
- package/cjs/drivers/mongo/mongo-query-builder.js +1740 -0
- package/cjs/drivers/mongo/mongo-query-builder.js.map +1 -0
- package/cjs/drivers/mongo/mongo-query-operations.d.ts +226 -0
- package/cjs/drivers/mongo/mongo-query-operations.d.ts.map +1 -0
- package/cjs/drivers/mongo/mongo-query-operations.js +270 -0
- package/cjs/drivers/mongo/mongo-query-operations.js.map +1 -0
- package/cjs/drivers/mongo/mongo-query-parser.d.ts +262 -0
- package/cjs/drivers/mongo/mongo-query-parser.d.ts.map +1 -0
- package/cjs/drivers/mongo/mongo-query-parser.js +1351 -0
- package/cjs/drivers/mongo/mongo-query-parser.js.map +1 -0
- package/cjs/drivers/mongo/mongo-sync-adapter.d.ts +79 -0
- package/cjs/drivers/mongo/mongo-sync-adapter.d.ts.map +1 -0
- package/cjs/drivers/mongo/mongo-sync-adapter.js +146 -0
- package/cjs/drivers/mongo/mongo-sync-adapter.js.map +1 -0
- package/cjs/drivers/mongo/mongodb-blueprint.d.ts +30 -0
- package/cjs/drivers/mongo/mongodb-blueprint.d.ts.map +1 -0
- package/cjs/drivers/mongo/mongodb-blueprint.js +51 -0
- package/cjs/drivers/mongo/mongodb-blueprint.js.map +1 -0
- package/cjs/drivers/mongo/mongodb-driver.d.ts +188 -0
- package/cjs/drivers/mongo/mongodb-driver.d.ts.map +1 -0
- package/cjs/drivers/mongo/mongodb-driver.js +411 -0
- package/cjs/drivers/mongo/mongodb-driver.js.map +1 -0
- package/cjs/drivers/mongo/types.d.ts +43 -0
- package/cjs/drivers/mongo/types.d.ts.map +1 -0
- package/cjs/errors/missing-data-source.error.d.ts +22 -0
- package/cjs/errors/missing-data-source.error.d.ts.map +1 -0
- package/cjs/errors/missing-data-source.error.js +29 -0
- package/cjs/errors/missing-data-source.error.js.map +1 -0
- package/cjs/events/model-events.d.ts +231 -0
- package/cjs/events/model-events.d.ts.map +1 -0
- package/cjs/events/model-events.js +259 -0
- package/cjs/events/model-events.js.map +1 -0
- package/cjs/expressions/aggregate-expressions.d.ts +215 -0
- package/cjs/expressions/aggregate-expressions.d.ts.map +1 -0
- package/cjs/expressions/aggregate-expressions.js +221 -0
- package/cjs/expressions/aggregate-expressions.js.map +1 -0
- package/cjs/expressions/index.d.ts +2 -0
- package/cjs/expressions/index.d.ts.map +1 -0
- package/cjs/index.d.ts +41 -0
- package/cjs/index.d.ts.map +1 -0
- package/cjs/index.js +1 -267
- package/cjs/index.js.map +1 -1
- package/cjs/migration/column-builder.d.ts +167 -0
- package/cjs/migration/column-builder.d.ts.map +1 -0
- package/cjs/migration/column-builder.js +217 -0
- package/cjs/migration/column-builder.js.map +1 -0
- package/cjs/migration/foreign-key-builder.d.ts +110 -0
- package/cjs/migration/foreign-key-builder.d.ts.map +1 -0
- package/cjs/migration/foreign-key-builder.js +129 -0
- package/cjs/migration/foreign-key-builder.js.map +1 -0
- package/cjs/migration/index.d.ts +6 -0
- package/cjs/migration/index.d.ts.map +1 -0
- package/cjs/migration/migration-runner.d.ts +231 -0
- package/cjs/migration/migration-runner.d.ts.map +1 -0
- package/cjs/migration/migration-runner.js +443 -0
- package/cjs/migration/migration-runner.js.map +1 -0
- package/cjs/migration/migration.js +1346 -0
- package/cjs/migration/migration.js.map +1 -0
- package/cjs/migration/types.d.ts +132 -0
- package/cjs/migration/types.d.ts.map +1 -0
- package/cjs/model/model.d.ts +1267 -0
- package/cjs/model/model.d.ts.map +1 -0
- package/cjs/model/model.js +1463 -0
- package/cjs/model/model.js.map +1 -0
- package/cjs/model/register-model.d.ts +80 -0
- package/cjs/model/register-model.d.ts.map +1 -0
- package/cjs/model/register-model.js +91 -0
- package/cjs/model/register-model.js.map +1 -0
- package/cjs/remover/database-remover.d.ts +100 -0
- package/cjs/remover/database-remover.d.ts.map +1 -0
- package/cjs/remover/database-remover.js +209 -0
- package/cjs/remover/database-remover.js.map +1 -0
- package/cjs/restorer/database-restorer.d.ts +131 -0
- package/cjs/restorer/database-restorer.d.ts.map +1 -0
- package/cjs/restorer/database-restorer.js +425 -0
- package/cjs/restorer/database-restorer.js.map +1 -0
- package/cjs/sync/index.d.ts +12 -0
- package/cjs/sync/index.d.ts.map +1 -0
- package/cjs/sync/model-events.d.ts +62 -0
- package/cjs/sync/model-events.d.ts.map +1 -0
- package/cjs/sync/model-events.js +49 -0
- package/cjs/sync/model-events.js.map +1 -0
- package/cjs/sync/model-sync-operation.d.ts +163 -0
- package/cjs/sync/model-sync-operation.d.ts.map +1 -0
- package/cjs/sync/model-sync-operation.js +292 -0
- package/cjs/sync/model-sync-operation.js.map +1 -0
- package/cjs/sync/model-sync.d.ts +130 -0
- package/cjs/sync/model-sync.d.ts.map +1 -0
- package/cjs/sync/model-sync.js +178 -0
- package/cjs/sync/model-sync.js.map +1 -0
- package/cjs/sync/sync-context.d.ts +70 -0
- package/cjs/sync/sync-context.d.ts.map +1 -0
- package/cjs/sync/sync-context.js +101 -0
- package/cjs/sync/sync-context.js.map +1 -0
- package/cjs/sync/sync-manager.d.ts +213 -0
- package/cjs/sync/sync-manager.d.ts.map +1 -0
- package/cjs/sync/sync-manager.js +689 -0
- package/cjs/sync/sync-manager.js.map +1 -0
- package/cjs/sync/types.d.ts +289 -0
- package/cjs/sync/types.d.ts.map +1 -0
- package/cjs/types.d.ts +45 -0
- package/cjs/types.d.ts.map +1 -0
- package/cjs/utils/connect-to-database.d.ts +246 -0
- package/cjs/utils/connect-to-database.d.ts.map +1 -0
- package/cjs/utils/connect-to-database.js +92 -0
- package/cjs/utils/connect-to-database.js.map +1 -0
- package/cjs/utils/database-writer.utils.d.ts +15 -0
- package/cjs/utils/database-writer.utils.d.ts.map +1 -0
- package/cjs/utils/database-writer.utils.js +14 -0
- package/cjs/utils/database-writer.utils.js.map +1 -0
- package/cjs/utils/define-model.js +100 -0
- package/cjs/utils/define-model.js.map +1 -0
- package/cjs/utils/once-connected.d.ts +146 -0
- package/cjs/utils/once-connected.d.ts.map +1 -0
- package/cjs/utils/once-connected.js +252 -0
- package/cjs/utils/once-connected.js.map +1 -0
- package/cjs/validation/database-seal-plugins.d.ts +2 -0
- package/cjs/validation/database-seal-plugins.d.ts.map +1 -0
- package/cjs/validation/database-seal-plugins.js +4 -0
- package/cjs/validation/database-seal-plugins.js.map +1 -0
- package/cjs/validation/database-writer-validation-error.d.ts +97 -0
- package/cjs/validation/database-writer-validation-error.d.ts.map +1 -0
- package/cjs/validation/database-writer-validation-error.js +160 -0
- package/cjs/validation/database-writer-validation-error.js.map +1 -0
- package/cjs/validation/index.d.ts +3 -0
- package/cjs/validation/index.d.ts.map +1 -0
- package/cjs/validation/mutators/embed-mutator.d.ts +9 -0
- package/cjs/validation/mutators/embed-mutator.d.ts.map +1 -0
- package/cjs/validation/mutators/embed-mutator.js +33 -0
- package/cjs/validation/mutators/embed-mutator.js.map +1 -0
- package/cjs/validation/plugins/embed-validator-plugin.d.ts +24 -0
- package/cjs/validation/plugins/embed-validator-plugin.d.ts.map +1 -0
- package/cjs/validation/plugins/embed-validator-plugin.js +18 -0
- package/cjs/validation/plugins/embed-validator-plugin.js.map +1 -0
- package/cjs/validation/rules/database-model-rule.d.ts +7 -0
- package/cjs/validation/rules/database-model-rule.d.ts.map +1 -0
- package/cjs/validation/rules/database-model-rule.js +27 -0
- package/cjs/validation/rules/database-model-rule.js.map +1 -0
- package/cjs/validation/transformers/embed-model-transformer.d.ts +3 -0
- package/cjs/validation/transformers/embed-model-transformer.d.ts.map +1 -0
- package/cjs/validation/transformers/embed-model-transformer.js +18 -0
- package/cjs/validation/transformers/embed-model-transformer.js.map +1 -0
- package/cjs/validation/validators/embed-validator.d.ts +21 -0
- package/cjs/validation/validators/embed-validator.d.ts.map +1 -0
- package/cjs/validation/validators/embed-validator.js +42 -0
- package/cjs/validation/validators/embed-validator.js.map +1 -0
- package/cjs/writer/database-writer.d.ts +181 -0
- package/cjs/writer/database-writer.d.ts.map +1 -0
- package/cjs/writer/database-writer.js +402 -0
- package/cjs/writer/database-writer.js.map +1 -0
- package/esm/context/database-data-source-context.d.ts +29 -0
- package/esm/context/database-data-source-context.d.ts.map +1 -0
- package/esm/context/database-data-source-context.js +28 -0
- package/esm/context/database-data-source-context.js.map +1 -0
- package/esm/context/database-transaction-context.d.ts +31 -0
- package/esm/context/database-transaction-context.d.ts.map +1 -0
- package/esm/context/database-transaction-context.js +34 -0
- package/esm/context/database-transaction-context.js.map +1 -0
- package/esm/contracts/database-driver.contract.d.ts +143 -0
- package/esm/contracts/database-driver.contract.d.ts.map +1 -0
- package/esm/contracts/database-id-generator.contract.d.ts +109 -0
- package/esm/contracts/database-id-generator.contract.d.ts.map +1 -0
- package/esm/contracts/database-remover.contract.d.ts +104 -0
- package/esm/contracts/database-remover.contract.d.ts.map +1 -0
- package/esm/contracts/database-restorer.contract.d.ts +143 -0
- package/esm/contracts/database-restorer.contract.d.ts.map +1 -0
- package/esm/contracts/database-writer.contract.d.ts +119 -0
- package/esm/contracts/database-writer.contract.d.ts.map +1 -0
- package/esm/contracts/driver-blueprint.contract.d.ts +45 -0
- package/esm/contracts/driver-blueprint.contract.d.ts.map +1 -0
- package/esm/contracts/index.d.ts +10 -0
- package/esm/contracts/index.d.ts.map +1 -0
- package/esm/contracts/migration-driver.contract.d.ts +365 -0
- package/esm/contracts/migration-driver.contract.d.ts.map +1 -0
- package/esm/contracts/query-builder.contract.d.ts +1128 -0
- package/esm/contracts/query-builder.contract.d.ts.map +1 -0
- package/esm/contracts/sync-adapter.contract.d.ts +58 -0
- package/esm/contracts/sync-adapter.contract.d.ts.map +1 -0
- package/esm/data-source/data-source-registry.d.ts +104 -0
- package/esm/data-source/data-source-registry.d.ts.map +1 -0
- package/esm/data-source/data-source-registry.js +138 -0
- package/esm/data-source/data-source-registry.js.map +1 -0
- package/esm/data-source/data-source.d.ts +106 -0
- package/esm/data-source/data-source.d.ts.map +1 -0
- package/esm/data-source/data-source.js +77 -0
- package/esm/data-source/data-source.js.map +1 -0
- package/esm/database-dirty-tracker.d.ts +253 -0
- package/esm/database-dirty-tracker.d.ts.map +1 -0
- package/esm/database-dirty-tracker.js +389 -0
- package/esm/database-dirty-tracker.js.map +1 -0
- package/esm/drivers/mongo/mongo-id-generator.d.ts +116 -0
- package/esm/drivers/mongo/mongo-id-generator.d.ts.map +1 -0
- package/esm/drivers/mongo/mongo-id-generator.js +149 -0
- package/esm/drivers/mongo/mongo-id-generator.js.map +1 -0
- package/esm/drivers/mongo/mongo-migration-driver.d.ts +228 -0
- package/esm/drivers/mongo/mongo-migration-driver.d.ts.map +1 -0
- package/esm/drivers/mongo/mongo-migration-driver.js +524 -0
- package/esm/drivers/mongo/mongo-migration-driver.js.map +1 -0
- package/esm/drivers/mongo/mongo-query-builder.d.ts +922 -0
- package/esm/drivers/mongo/mongo-query-builder.d.ts.map +1 -0
- package/esm/drivers/mongo/mongo-query-builder.js +1740 -0
- package/esm/drivers/mongo/mongo-query-builder.js.map +1 -0
- package/esm/drivers/mongo/mongo-query-operations.d.ts +226 -0
- package/esm/drivers/mongo/mongo-query-operations.d.ts.map +1 -0
- package/esm/drivers/mongo/mongo-query-operations.js +270 -0
- package/esm/drivers/mongo/mongo-query-operations.js.map +1 -0
- package/esm/drivers/mongo/mongo-query-parser.d.ts +262 -0
- package/esm/drivers/mongo/mongo-query-parser.d.ts.map +1 -0
- package/esm/drivers/mongo/mongo-query-parser.js +1351 -0
- package/esm/drivers/mongo/mongo-query-parser.js.map +1 -0
- package/esm/drivers/mongo/mongo-sync-adapter.d.ts +79 -0
- package/esm/drivers/mongo/mongo-sync-adapter.d.ts.map +1 -0
- package/esm/drivers/mongo/mongo-sync-adapter.js +146 -0
- package/esm/drivers/mongo/mongo-sync-adapter.js.map +1 -0
- package/esm/drivers/mongo/mongodb-blueprint.d.ts +30 -0
- package/esm/drivers/mongo/mongodb-blueprint.d.ts.map +1 -0
- package/esm/drivers/mongo/mongodb-blueprint.js +51 -0
- package/esm/drivers/mongo/mongodb-blueprint.js.map +1 -0
- package/esm/drivers/mongo/mongodb-driver.d.ts +188 -0
- package/esm/drivers/mongo/mongodb-driver.d.ts.map +1 -0
- package/esm/drivers/mongo/mongodb-driver.js +411 -0
- package/esm/drivers/mongo/mongodb-driver.js.map +1 -0
- package/esm/drivers/mongo/types.d.ts +43 -0
- package/esm/drivers/mongo/types.d.ts.map +1 -0
- package/esm/errors/missing-data-source.error.d.ts +22 -0
- package/esm/errors/missing-data-source.error.d.ts.map +1 -0
- package/esm/errors/missing-data-source.error.js +29 -0
- package/esm/errors/missing-data-source.error.js.map +1 -0
- package/esm/events/model-events.d.ts +231 -0
- package/esm/events/model-events.d.ts.map +1 -0
- package/esm/events/model-events.js +259 -0
- package/esm/events/model-events.js.map +1 -0
- package/esm/expressions/aggregate-expressions.d.ts +215 -0
- package/esm/expressions/aggregate-expressions.d.ts.map +1 -0
- package/esm/expressions/aggregate-expressions.js +221 -0
- package/esm/expressions/aggregate-expressions.js.map +1 -0
- package/esm/expressions/index.d.ts +2 -0
- package/esm/expressions/index.d.ts.map +1 -0
- package/esm/index.d.ts +41 -0
- package/esm/index.d.ts.map +1 -0
- package/esm/index.js +1 -40
- package/esm/index.js.map +1 -1
- package/esm/migration/column-builder.d.ts +167 -0
- package/esm/migration/column-builder.d.ts.map +1 -0
- package/esm/migration/column-builder.js +217 -0
- package/esm/migration/column-builder.js.map +1 -0
- package/esm/migration/foreign-key-builder.d.ts +110 -0
- package/esm/migration/foreign-key-builder.d.ts.map +1 -0
- package/esm/migration/foreign-key-builder.js +129 -0
- package/esm/migration/foreign-key-builder.js.map +1 -0
- package/esm/migration/index.d.ts +6 -0
- package/esm/migration/index.d.ts.map +1 -0
- package/esm/migration/migration-runner.d.ts +231 -0
- package/esm/migration/migration-runner.d.ts.map +1 -0
- package/esm/migration/migration-runner.js +443 -0
- package/esm/migration/migration-runner.js.map +1 -0
- package/esm/migration/migration.js +1346 -0
- package/esm/migration/migration.js.map +1 -0
- package/esm/migration/types.d.ts +132 -0
- package/esm/migration/types.d.ts.map +1 -0
- package/esm/model/model.d.ts +1267 -0
- package/esm/model/model.d.ts.map +1 -0
- package/esm/model/model.js +1463 -0
- package/esm/model/model.js.map +1 -0
- package/esm/model/register-model.d.ts +80 -0
- package/esm/model/register-model.d.ts.map +1 -0
- package/esm/model/register-model.js +91 -0
- package/esm/model/register-model.js.map +1 -0
- package/esm/remover/database-remover.d.ts +100 -0
- package/esm/remover/database-remover.d.ts.map +1 -0
- package/esm/remover/database-remover.js +209 -0
- package/esm/remover/database-remover.js.map +1 -0
- package/esm/restorer/database-restorer.d.ts +131 -0
- package/esm/restorer/database-restorer.d.ts.map +1 -0
- package/esm/restorer/database-restorer.js +425 -0
- package/esm/restorer/database-restorer.js.map +1 -0
- package/esm/sync/index.d.ts +12 -0
- package/esm/sync/index.d.ts.map +1 -0
- package/esm/sync/model-events.d.ts +62 -0
- package/esm/sync/model-events.d.ts.map +1 -0
- package/esm/sync/model-events.js +49 -0
- package/esm/sync/model-events.js.map +1 -0
- package/esm/sync/model-sync-operation.d.ts +163 -0
- package/esm/sync/model-sync-operation.d.ts.map +1 -0
- package/esm/sync/model-sync-operation.js +292 -0
- package/esm/sync/model-sync-operation.js.map +1 -0
- package/esm/sync/model-sync.d.ts +130 -0
- package/esm/sync/model-sync.d.ts.map +1 -0
- package/esm/sync/model-sync.js +178 -0
- package/esm/sync/model-sync.js.map +1 -0
- package/esm/sync/sync-context.d.ts +70 -0
- package/esm/sync/sync-context.d.ts.map +1 -0
- package/esm/sync/sync-context.js +101 -0
- package/esm/sync/sync-context.js.map +1 -0
- package/esm/sync/sync-manager.d.ts +213 -0
- package/esm/sync/sync-manager.d.ts.map +1 -0
- package/esm/sync/sync-manager.js +689 -0
- package/esm/sync/sync-manager.js.map +1 -0
- package/esm/sync/types.d.ts +289 -0
- package/esm/sync/types.d.ts.map +1 -0
- package/esm/types.d.ts +45 -0
- package/esm/types.d.ts.map +1 -0
- package/esm/utils/connect-to-database.d.ts +246 -0
- package/esm/utils/connect-to-database.d.ts.map +1 -0
- package/esm/utils/connect-to-database.js +92 -0
- package/esm/utils/connect-to-database.js.map +1 -0
- package/esm/utils/database-writer.utils.d.ts +15 -0
- package/esm/utils/database-writer.utils.d.ts.map +1 -0
- package/esm/utils/database-writer.utils.js +14 -0
- package/esm/utils/database-writer.utils.js.map +1 -0
- package/esm/utils/define-model.js +100 -0
- package/esm/utils/define-model.js.map +1 -0
- package/esm/utils/once-connected.d.ts +146 -0
- package/esm/utils/once-connected.d.ts.map +1 -0
- package/esm/utils/once-connected.js +252 -0
- package/esm/utils/once-connected.js.map +1 -0
- package/esm/validation/database-seal-plugins.d.ts +2 -0
- package/esm/validation/database-seal-plugins.d.ts.map +1 -0
- package/esm/validation/database-seal-plugins.js +4 -0
- package/esm/validation/database-seal-plugins.js.map +1 -0
- package/esm/validation/database-writer-validation-error.d.ts +97 -0
- package/esm/validation/database-writer-validation-error.d.ts.map +1 -0
- package/esm/validation/database-writer-validation-error.js +160 -0
- package/esm/validation/database-writer-validation-error.js.map +1 -0
- package/esm/validation/index.d.ts +3 -0
- package/esm/validation/index.d.ts.map +1 -0
- package/esm/validation/mutators/embed-mutator.d.ts +9 -0
- package/esm/validation/mutators/embed-mutator.d.ts.map +1 -0
- package/esm/validation/mutators/embed-mutator.js +33 -0
- package/esm/validation/mutators/embed-mutator.js.map +1 -0
- package/esm/validation/plugins/embed-validator-plugin.d.ts +24 -0
- package/esm/validation/plugins/embed-validator-plugin.d.ts.map +1 -0
- package/esm/validation/plugins/embed-validator-plugin.js +18 -0
- package/esm/validation/plugins/embed-validator-plugin.js.map +1 -0
- package/esm/validation/rules/database-model-rule.d.ts +7 -0
- package/esm/validation/rules/database-model-rule.d.ts.map +1 -0
- package/esm/validation/rules/database-model-rule.js +27 -0
- package/esm/validation/rules/database-model-rule.js.map +1 -0
- package/esm/validation/transformers/embed-model-transformer.d.ts +3 -0
- package/esm/validation/transformers/embed-model-transformer.d.ts.map +1 -0
- package/esm/validation/transformers/embed-model-transformer.js +18 -0
- package/esm/validation/transformers/embed-model-transformer.js.map +1 -0
- package/esm/validation/validators/embed-validator.d.ts +21 -0
- package/esm/validation/validators/embed-validator.d.ts.map +1 -0
- package/esm/validation/validators/embed-validator.js +42 -0
- package/esm/validation/validators/embed-validator.js.map +1 -0
- package/esm/writer/database-writer.d.ts +181 -0
- package/esm/writer/database-writer.d.ts.map +1 -0
- package/esm/writer/database-writer.js +402 -0
- package/esm/writer/database-writer.js.map +1 -0
- package/package.json +61 -52
|
@@ -0,0 +1,163 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Model sync operation class.
|
|
3
|
+
*
|
|
4
|
+
* Manages a single sync relationship between a source and target model.
|
|
5
|
+
* Subscribes to source model events and triggers sync operations when
|
|
6
|
+
* the source is updated or deleted.
|
|
7
|
+
*
|
|
8
|
+
* @module cascade-next/sync/model-sync-operation
|
|
9
|
+
*/
|
|
10
|
+
import type { ChildModel, Model } from "../model/model";
|
|
11
|
+
import type { ModelSyncConfig, ModelSyncOperationContract } from "./types";
|
|
12
|
+
/**
|
|
13
|
+
* Manages a single model sync operation.
|
|
14
|
+
*
|
|
15
|
+
* Subscribes to source model events (updated, deleted) and triggers
|
|
16
|
+
* sync operations to update embedded data in target models.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* // Created via modelSync.sync() or Model.sync()
|
|
21
|
+
* const operation = new ModelSyncOperation(Category, Product, "category", false);
|
|
22
|
+
* operation
|
|
23
|
+
* .embed("embedMinimal")
|
|
24
|
+
* .watchFields(["name", "slug"])
|
|
25
|
+
* .unsetOnDelete();
|
|
26
|
+
* ```
|
|
27
|
+
*/
|
|
28
|
+
export declare class ModelSyncOperation implements ModelSyncOperationContract {
|
|
29
|
+
/**
|
|
30
|
+
* Configuration for this sync operation.
|
|
31
|
+
*/
|
|
32
|
+
private readonly config;
|
|
33
|
+
/**
|
|
34
|
+
* Active event subscriptions for cleanup.
|
|
35
|
+
*/
|
|
36
|
+
private readonly subscriptions;
|
|
37
|
+
/**
|
|
38
|
+
* Whether this operation is currently subscribed to events.
|
|
39
|
+
*/
|
|
40
|
+
private isSubscribed;
|
|
41
|
+
/**
|
|
42
|
+
* Create a new model sync operation.
|
|
43
|
+
*
|
|
44
|
+
* @param sourceModel - Source model class that triggers sync
|
|
45
|
+
* @param targetModel - Target model class that receives data
|
|
46
|
+
* @param targetField - Field path in target model
|
|
47
|
+
* @param isMany - Whether this syncs to an array field
|
|
48
|
+
*/
|
|
49
|
+
constructor(sourceModelClass: ChildModel<Model>, targetModelClass: ChildModel<Model>, targetField: string, isMany: boolean);
|
|
50
|
+
/**
|
|
51
|
+
* Set the embed method to call on source model.
|
|
52
|
+
*
|
|
53
|
+
* @param embed - getter property name (e.g., "embedData", "embedMinimal") Or Array of fields
|
|
54
|
+
* @returns This operation for chaining
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* ```typescript
|
|
58
|
+
* Category.sync(Product, "category").embed("embedMinimal");
|
|
59
|
+
* ```
|
|
60
|
+
*/
|
|
61
|
+
embed(method: string | string[]): this;
|
|
62
|
+
/**
|
|
63
|
+
* Set the identifier field for array matching.
|
|
64
|
+
* Required when syncing to array fields (syncMany).
|
|
65
|
+
*
|
|
66
|
+
* @param field - Field name used as identifier (default: "id")
|
|
67
|
+
* @returns This operation for chaining
|
|
68
|
+
*
|
|
69
|
+
* @example
|
|
70
|
+
* ```typescript
|
|
71
|
+
* Tag.syncMany(Post, "tags").identifyBy("tagId");
|
|
72
|
+
* ```
|
|
73
|
+
*/
|
|
74
|
+
identifyBy(field: string): this;
|
|
75
|
+
/**
|
|
76
|
+
* Set the maximum sync depth for chained operations.
|
|
77
|
+
*
|
|
78
|
+
* @param depth - Maximum depth (default: 3)
|
|
79
|
+
* @returns This operation for chaining
|
|
80
|
+
*
|
|
81
|
+
* @example
|
|
82
|
+
* ```typescript
|
|
83
|
+
* Category.sync(Product, "category").maxDepth(2);
|
|
84
|
+
* ```
|
|
85
|
+
*/
|
|
86
|
+
maxDepth(depth: number): this;
|
|
87
|
+
/**
|
|
88
|
+
* Set which fields to watch for changes.
|
|
89
|
+
* Sync only triggers when these fields change.
|
|
90
|
+
*
|
|
91
|
+
* @param fields - Array of field names to watch (empty = all)
|
|
92
|
+
* @returns This operation for chaining
|
|
93
|
+
*
|
|
94
|
+
* @example
|
|
95
|
+
* ```typescript
|
|
96
|
+
* Category.sync(Product, "category").watchFields(["name", "slug"]);
|
|
97
|
+
* ```
|
|
98
|
+
*/
|
|
99
|
+
watchFields(fields: string[]): this;
|
|
100
|
+
/**
|
|
101
|
+
* Unset the target field when source is deleted.
|
|
102
|
+
*
|
|
103
|
+
* @returns This operation for chaining
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```typescript
|
|
107
|
+
* Category.sync(Product, "category").unsetOnDelete();
|
|
108
|
+
* ```
|
|
109
|
+
*/
|
|
110
|
+
unsetOnDelete(): this;
|
|
111
|
+
/**
|
|
112
|
+
* Delete target documents when source is deleted.
|
|
113
|
+
*
|
|
114
|
+
* @returns This operation for chaining
|
|
115
|
+
*
|
|
116
|
+
* @example
|
|
117
|
+
* ```typescript
|
|
118
|
+
* User.sync(Profile, "user").removeOnDelete();
|
|
119
|
+
* ```
|
|
120
|
+
*/
|
|
121
|
+
removeOnDelete(): this;
|
|
122
|
+
/**
|
|
123
|
+
* Subscribe to source model events.
|
|
124
|
+
* Called automatically in constructor.
|
|
125
|
+
*/
|
|
126
|
+
private subscribe;
|
|
127
|
+
/**
|
|
128
|
+
* Unsubscribe from all events and cleanup.
|
|
129
|
+
* Called automatically when using modelSync.register().
|
|
130
|
+
*/
|
|
131
|
+
unsubscribe(): void;
|
|
132
|
+
/**
|
|
133
|
+
* Cleanup the sync operations
|
|
134
|
+
*/
|
|
135
|
+
$cleanup(): void;
|
|
136
|
+
/**
|
|
137
|
+
* Handle model updated event.
|
|
138
|
+
* Triggers sync to update embedded data in target models.
|
|
139
|
+
*/
|
|
140
|
+
private handleModelUpdated;
|
|
141
|
+
/**
|
|
142
|
+
* Handle model deleted event.
|
|
143
|
+
* Triggers unset or remove based on configuration.
|
|
144
|
+
*/
|
|
145
|
+
private handleModelDeleted;
|
|
146
|
+
/**
|
|
147
|
+
* Check if sync should proceed based on watched fields.
|
|
148
|
+
*/
|
|
149
|
+
private shouldSync;
|
|
150
|
+
/**
|
|
151
|
+
* Build sync config compatible with SyncManager.
|
|
152
|
+
*/
|
|
153
|
+
private buildSyncConfig;
|
|
154
|
+
/**
|
|
155
|
+
* Remove target documents that reference the deleted source.
|
|
156
|
+
*/
|
|
157
|
+
private removeTargetDocuments;
|
|
158
|
+
/**
|
|
159
|
+
* Get the current configuration (for debugging/testing).
|
|
160
|
+
*/
|
|
161
|
+
getConfig(): Readonly<ModelSyncConfig>;
|
|
162
|
+
}
|
|
163
|
+
//# sourceMappingURL=model-sync-operation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-sync-operation.d.ts","sourceRoot":"","sources":["../../src/sync/model-sync-operation.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAGH,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAIxD,OAAO,KAAK,EAAE,eAAe,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAE3E;;;;;;;;;;;;;;;GAeG;AACH,qBAAa,kBAAmB,YAAW,0BAA0B;IACnE;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAkB;IAEzC;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,aAAa,CAA2B;IAEzD;;OAEG;IACH,OAAO,CAAC,YAAY,CAAS;IAE7B;;;;;;;OAOG;gBAED,gBAAgB,EAAE,UAAU,CAAC,KAAK,CAAC,EACnC,gBAAgB,EAAE,UAAU,CAAC,KAAK,CAAC,EACnC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,OAAO;IAsBjB;;;;;;;;;;OAUG;IACI,KAAK,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI;IAK7C;;;;;;;;;;;OAWG;IACI,UAAU,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKtC;;;;;;;;;;OAUG;IACI,QAAQ,CAAC,KAAK,EAAE,MAAM,GAAG,IAAI;IAKpC;;;;;;;;;;;OAWG;IACI,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,IAAI;IAK1C;;;;;;;;;OASG;IACI,aAAa,IAAI,IAAI;IAK5B;;;;;;;;;OASG;IACI,cAAc,IAAI,IAAI;IAS7B;;;OAGG;IACH,OAAO,CAAC,SAAS;IAoBjB;;;OAGG;IACI,WAAW,IAAI,IAAI;IAS1B;;OAEG;IACI,QAAQ;IAQf;;;OAGG;IACH,OAAO,CAAC,kBAAkB,CAgCxB;IAEF;;;OAGG;IACH,OAAO,CAAC,kBAAkB,CA8BxB;IAMF;;OAEG;IACH,OAAO,CAAC,UAAU;IAQlB;;OAEG;IACH,OAAO,CAAC,eAAe;IAcvB;;OAEG;YACW,qBAAqB;IAQnC;;OAEG;IACI,SAAS,IAAI,QAAQ,CAAC,eAAe,CAAC;CAG9C"}
|
|
@@ -0,0 +1,292 @@
|
|
|
1
|
+
'use strict';var events=require('@mongez/events'),modelEvents=require('./model-events.js'),syncContext=require('./sync-context.js'),syncManager=require('./sync-manager.js');function _interopDefault(e){return e&&e.__esModule?e:{default:e}}var events__default=/*#__PURE__*/_interopDefault(events);/**
|
|
2
|
+
* Model sync operation class.
|
|
3
|
+
*
|
|
4
|
+
* Manages a single sync relationship between a source and target model.
|
|
5
|
+
* Subscribes to source model events and triggers sync operations when
|
|
6
|
+
* the source is updated or deleted.
|
|
7
|
+
*
|
|
8
|
+
* @module cascade-next/sync/model-sync-operation
|
|
9
|
+
*/
|
|
10
|
+
/**
|
|
11
|
+
* Manages a single model sync operation.
|
|
12
|
+
*
|
|
13
|
+
* Subscribes to source model events (updated, deleted) and triggers
|
|
14
|
+
* sync operations to update embedded data in target models.
|
|
15
|
+
*
|
|
16
|
+
* @example
|
|
17
|
+
* ```typescript
|
|
18
|
+
* // Created via modelSync.sync() or Model.sync()
|
|
19
|
+
* const operation = new ModelSyncOperation(Category, Product, "category", false);
|
|
20
|
+
* operation
|
|
21
|
+
* .embed("embedMinimal")
|
|
22
|
+
* .watchFields(["name", "slug"])
|
|
23
|
+
* .unsetOnDelete();
|
|
24
|
+
* ```
|
|
25
|
+
*/
|
|
26
|
+
class ModelSyncOperation {
|
|
27
|
+
/**
|
|
28
|
+
* Configuration for this sync operation.
|
|
29
|
+
*/
|
|
30
|
+
config;
|
|
31
|
+
/**
|
|
32
|
+
* Active event subscriptions for cleanup.
|
|
33
|
+
*/
|
|
34
|
+
subscriptions = [];
|
|
35
|
+
/**
|
|
36
|
+
* Whether this operation is currently subscribed to events.
|
|
37
|
+
*/
|
|
38
|
+
isSubscribed = false;
|
|
39
|
+
/**
|
|
40
|
+
* Create a new model sync operation.
|
|
41
|
+
*
|
|
42
|
+
* @param sourceModel - Source model class that triggers sync
|
|
43
|
+
* @param targetModel - Target model class that receives data
|
|
44
|
+
* @param targetField - Field path in target model
|
|
45
|
+
* @param isMany - Whether this syncs to an array field
|
|
46
|
+
*/
|
|
47
|
+
constructor(sourceModelClass, targetModelClass, targetField, isMany) {
|
|
48
|
+
this.config = {
|
|
49
|
+
sourceModel: sourceModelClass,
|
|
50
|
+
targetModel: targetModelClass,
|
|
51
|
+
targetField,
|
|
52
|
+
isMany,
|
|
53
|
+
embedKey: "embedData",
|
|
54
|
+
identifierField: "id",
|
|
55
|
+
maxSyncDepth: syncContext.DEFAULT_MAX_SYNC_DEPTH,
|
|
56
|
+
watchFields: [],
|
|
57
|
+
unsetOnDelete: false,
|
|
58
|
+
removeOnDelete: false,
|
|
59
|
+
};
|
|
60
|
+
this.subscribe();
|
|
61
|
+
}
|
|
62
|
+
// ============================================================================
|
|
63
|
+
// FLUENT CONFIGURATION
|
|
64
|
+
// ============================================================================
|
|
65
|
+
/**
|
|
66
|
+
* Set the embed method to call on source model.
|
|
67
|
+
*
|
|
68
|
+
* @param embed - getter property name (e.g., "embedData", "embedMinimal") Or Array of fields
|
|
69
|
+
* @returns This operation for chaining
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* Category.sync(Product, "category").embed("embedMinimal");
|
|
74
|
+
* ```
|
|
75
|
+
*/
|
|
76
|
+
embed(method) {
|
|
77
|
+
this.config.embedKey = method;
|
|
78
|
+
return this;
|
|
79
|
+
}
|
|
80
|
+
/**
|
|
81
|
+
* Set the identifier field for array matching.
|
|
82
|
+
* Required when syncing to array fields (syncMany).
|
|
83
|
+
*
|
|
84
|
+
* @param field - Field name used as identifier (default: "id")
|
|
85
|
+
* @returns This operation for chaining
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```typescript
|
|
89
|
+
* Tag.syncMany(Post, "tags").identifyBy("tagId");
|
|
90
|
+
* ```
|
|
91
|
+
*/
|
|
92
|
+
identifyBy(field) {
|
|
93
|
+
this.config.identifierField = field;
|
|
94
|
+
return this;
|
|
95
|
+
}
|
|
96
|
+
/**
|
|
97
|
+
* Set the maximum sync depth for chained operations.
|
|
98
|
+
*
|
|
99
|
+
* @param depth - Maximum depth (default: 3)
|
|
100
|
+
* @returns This operation for chaining
|
|
101
|
+
*
|
|
102
|
+
* @example
|
|
103
|
+
* ```typescript
|
|
104
|
+
* Category.sync(Product, "category").maxDepth(2);
|
|
105
|
+
* ```
|
|
106
|
+
*/
|
|
107
|
+
maxDepth(depth) {
|
|
108
|
+
this.config.maxSyncDepth = depth;
|
|
109
|
+
return this;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Set which fields to watch for changes.
|
|
113
|
+
* Sync only triggers when these fields change.
|
|
114
|
+
*
|
|
115
|
+
* @param fields - Array of field names to watch (empty = all)
|
|
116
|
+
* @returns This operation for chaining
|
|
117
|
+
*
|
|
118
|
+
* @example
|
|
119
|
+
* ```typescript
|
|
120
|
+
* Category.sync(Product, "category").watchFields(["name", "slug"]);
|
|
121
|
+
* ```
|
|
122
|
+
*/
|
|
123
|
+
watchFields(fields) {
|
|
124
|
+
this.config.watchFields = fields;
|
|
125
|
+
return this;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Unset the target field when source is deleted.
|
|
129
|
+
*
|
|
130
|
+
* @returns This operation for chaining
|
|
131
|
+
*
|
|
132
|
+
* @example
|
|
133
|
+
* ```typescript
|
|
134
|
+
* Category.sync(Product, "category").unsetOnDelete();
|
|
135
|
+
* ```
|
|
136
|
+
*/
|
|
137
|
+
unsetOnDelete() {
|
|
138
|
+
this.config.unsetOnDelete = true;
|
|
139
|
+
return this;
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Delete target documents when source is deleted.
|
|
143
|
+
*
|
|
144
|
+
* @returns This operation for chaining
|
|
145
|
+
*
|
|
146
|
+
* @example
|
|
147
|
+
* ```typescript
|
|
148
|
+
* User.sync(Profile, "user").removeOnDelete();
|
|
149
|
+
* ```
|
|
150
|
+
*/
|
|
151
|
+
removeOnDelete() {
|
|
152
|
+
this.config.removeOnDelete = true;
|
|
153
|
+
return this;
|
|
154
|
+
}
|
|
155
|
+
// ============================================================================
|
|
156
|
+
// LIFECYCLE
|
|
157
|
+
// ============================================================================
|
|
158
|
+
/**
|
|
159
|
+
* Subscribe to source model events.
|
|
160
|
+
* Called automatically in constructor.
|
|
161
|
+
*/
|
|
162
|
+
subscribe() {
|
|
163
|
+
if (this.isSubscribed) {
|
|
164
|
+
return;
|
|
165
|
+
}
|
|
166
|
+
const sourceModel = this.config.sourceModel;
|
|
167
|
+
// Subscribe to model.updated event
|
|
168
|
+
this.subscriptions.push(events__default.default.subscribe(modelEvents.getModelUpdatedEvent(sourceModel), this.handleModelUpdated));
|
|
169
|
+
// Subscribe to model.deleted event
|
|
170
|
+
this.subscriptions.push(events__default.default.subscribe(modelEvents.getModelDeletedEvent(sourceModel), this.handleModelDeleted));
|
|
171
|
+
this.isSubscribed = true;
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Unsubscribe from all events and cleanup.
|
|
175
|
+
* Called automatically when using modelSync.register().
|
|
176
|
+
*/
|
|
177
|
+
unsubscribe() {
|
|
178
|
+
for (const subscription of this.subscriptions) {
|
|
179
|
+
subscription.unsubscribe();
|
|
180
|
+
}
|
|
181
|
+
this.subscriptions.length = 0;
|
|
182
|
+
this.isSubscribed = false;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Cleanup the sync operations
|
|
186
|
+
*/
|
|
187
|
+
$cleanup() {
|
|
188
|
+
return this.unsubscribe();
|
|
189
|
+
}
|
|
190
|
+
// ============================================================================
|
|
191
|
+
// EVENT HANDLERS
|
|
192
|
+
// ============================================================================
|
|
193
|
+
/**
|
|
194
|
+
* Handle model updated event.
|
|
195
|
+
* Triggers sync to update embedded data in target models.
|
|
196
|
+
*/
|
|
197
|
+
handleModelUpdated = async (model, changedFields) => {
|
|
198
|
+
// Check if we should sync based on watched fields
|
|
199
|
+
if (!this.shouldSync(changedFields)) {
|
|
200
|
+
return;
|
|
201
|
+
}
|
|
202
|
+
try {
|
|
203
|
+
const primaryKey = this.config.sourceModel.primaryKey || "id";
|
|
204
|
+
const sourceId = model.get(primaryKey);
|
|
205
|
+
if (!sourceId) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
// Get the driver from the source model's data source
|
|
209
|
+
const dataSource = this.config.sourceModel.getDataSource();
|
|
210
|
+
const driver = dataSource.driver;
|
|
211
|
+
// Create sync manager and execute
|
|
212
|
+
const syncManager$1 = new syncManager.SyncManager(this.config.sourceModel, driver);
|
|
213
|
+
await syncManager$1.syncUpdateWithConfig(sourceId, model, changedFields, this.buildSyncConfig());
|
|
214
|
+
}
|
|
215
|
+
catch (error) {
|
|
216
|
+
console.error(`[ModelSync] Failed to sync ${this.config.sourceModel.name} -> ${this.config.targetModel.name}:`, error);
|
|
217
|
+
}
|
|
218
|
+
};
|
|
219
|
+
/**
|
|
220
|
+
* Handle model deleted event.
|
|
221
|
+
* Triggers unset or remove based on configuration.
|
|
222
|
+
*/
|
|
223
|
+
handleModelDeleted = async (model) => {
|
|
224
|
+
if (!this.config.unsetOnDelete && !this.config.removeOnDelete) {
|
|
225
|
+
return;
|
|
226
|
+
}
|
|
227
|
+
try {
|
|
228
|
+
const primaryKey = this.config.sourceModel.primaryKey || "id";
|
|
229
|
+
const sourceId = model.get(primaryKey);
|
|
230
|
+
if (!sourceId) {
|
|
231
|
+
return;
|
|
232
|
+
}
|
|
233
|
+
const dataSource = this.config.sourceModel.getDataSource();
|
|
234
|
+
const driver = dataSource.driver;
|
|
235
|
+
if (this.config.removeOnDelete) {
|
|
236
|
+
// Delete all target documents that reference this source
|
|
237
|
+
await this.removeTargetDocuments(sourceId, driver);
|
|
238
|
+
}
|
|
239
|
+
else if (this.config.unsetOnDelete) {
|
|
240
|
+
// Unset the field in target documents
|
|
241
|
+
const syncManager$1 = new syncManager.SyncManager(this.config.sourceModel, driver);
|
|
242
|
+
await syncManager$1.syncDeleteWithConfig(sourceId, this.buildSyncConfig());
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
catch (error) {
|
|
246
|
+
console.error(`[ModelSync] Failed to handle delete for ${this.config.sourceModel.name}:`, error);
|
|
247
|
+
}
|
|
248
|
+
};
|
|
249
|
+
// ============================================================================
|
|
250
|
+
// HELPERS
|
|
251
|
+
// ============================================================================
|
|
252
|
+
/**
|
|
253
|
+
* Check if sync should proceed based on watched fields.
|
|
254
|
+
*/
|
|
255
|
+
shouldSync(changedFields) {
|
|
256
|
+
if (this.config.watchFields.length === 0) {
|
|
257
|
+
return true; // Watch all fields
|
|
258
|
+
}
|
|
259
|
+
return this.config.watchFields.some((field) => changedFields.includes(field));
|
|
260
|
+
}
|
|
261
|
+
/**
|
|
262
|
+
* Build sync config compatible with SyncManager.
|
|
263
|
+
*/
|
|
264
|
+
buildSyncConfig() {
|
|
265
|
+
return {
|
|
266
|
+
targetField: this.config.targetField,
|
|
267
|
+
isMany: this.config.isMany,
|
|
268
|
+
embedKey: this.config.embedKey,
|
|
269
|
+
identifierField: this.config.identifierField,
|
|
270
|
+
maxSyncDepth: this.config.maxSyncDepth,
|
|
271
|
+
preventCircularSync: true,
|
|
272
|
+
watchFields: this.config.watchFields,
|
|
273
|
+
unsetOnDelete: this.config.unsetOnDelete,
|
|
274
|
+
targetModelClass: this.config.targetModel,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
/**
|
|
278
|
+
* Remove target documents that reference the deleted source.
|
|
279
|
+
*/
|
|
280
|
+
async removeTargetDocuments(sourceId, driver) {
|
|
281
|
+
const filter = this.config.isMany
|
|
282
|
+
? { [`${this.config.targetField}.${this.config.identifierField}`]: sourceId }
|
|
283
|
+
: { [`${this.config.targetField}.${this.config.identifierField}`]: sourceId };
|
|
284
|
+
await driver.deleteMany(this.config.targetModel.table, filter);
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Get the current configuration (for debugging/testing).
|
|
288
|
+
*/
|
|
289
|
+
getConfig() {
|
|
290
|
+
return { ...this.config };
|
|
291
|
+
}
|
|
292
|
+
}exports.ModelSyncOperation=ModelSyncOperation;//# sourceMappingURL=model-sync-operation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-sync-operation.js","sources":["../../src/sync/model-sync-operation.ts"],"sourcesContent":[null],"names":["DEFAULT_MAX_SYNC_DEPTH","events","getModelUpdatedEvent","getModelDeletedEvent","syncManager","SyncManager"],"mappings":"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"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ModelSync facade for registering sync operations.
|
|
3
|
+
*
|
|
4
|
+
* Provides a clean API for defining sync relationships between models
|
|
5
|
+
* with automatic cleanup support for HMR (Hot Module Replacement).
|
|
6
|
+
*
|
|
7
|
+
* @module cascade-next/sync/model-sync
|
|
8
|
+
*/
|
|
9
|
+
import type { ChildModel, Model } from "../model/model";
|
|
10
|
+
import type { ModelSyncContract, ModelSyncOperationContract } from "./types";
|
|
11
|
+
/**
|
|
12
|
+
* ModelSync facade implementation.
|
|
13
|
+
*
|
|
14
|
+
* Manages sync operation registration with scoped cleanup support.
|
|
15
|
+
* Uses a registration stack to track operations created during
|
|
16
|
+
* a `register()` callback for proper HMR cleanup.
|
|
17
|
+
*
|
|
18
|
+
* @example
|
|
19
|
+
* ```typescript
|
|
20
|
+
* // In events file
|
|
21
|
+
* export const cleanup = modelSync.register(() => {
|
|
22
|
+
* Category.sync(Product, "category");
|
|
23
|
+
* Tag.syncMany(Post, "tags").identifyBy("id");
|
|
24
|
+
* });
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
declare class ModelSyncFacade implements ModelSyncContract {
|
|
28
|
+
/**
|
|
29
|
+
* All active sync operations.
|
|
30
|
+
*/
|
|
31
|
+
private readonly operations;
|
|
32
|
+
/**
|
|
33
|
+
* Stack for tracking operations during register() callbacks.
|
|
34
|
+
* Each element is an array of operations created in that scope.
|
|
35
|
+
*/
|
|
36
|
+
private readonly registrationStack;
|
|
37
|
+
/**
|
|
38
|
+
* Create a sync operation for a single embedded document.
|
|
39
|
+
*
|
|
40
|
+
* When the source model is updated, the target model's field
|
|
41
|
+
* will be updated with the embedded data.
|
|
42
|
+
*
|
|
43
|
+
* @param source - Source model class that triggers sync
|
|
44
|
+
* @param target - Target model class that receives data
|
|
45
|
+
* @param field - Field path in target model
|
|
46
|
+
* @returns Sync operation for chaining configuration
|
|
47
|
+
*
|
|
48
|
+
* @example
|
|
49
|
+
* ```typescript
|
|
50
|
+
* // When Category updates, update Product.category
|
|
51
|
+
* modelSync.sync(Category, Product, "category");
|
|
52
|
+
*
|
|
53
|
+
* // With configuration
|
|
54
|
+
* modelSync.sync(Category, Product, "category")
|
|
55
|
+
* .embed("embedMinimal")
|
|
56
|
+
* .watchFields(["name", "slug"]);
|
|
57
|
+
* ```
|
|
58
|
+
*/
|
|
59
|
+
sync(source: ChildModel<Model>, target: ChildModel<Model>, field: string): ModelSyncOperationContract;
|
|
60
|
+
/**
|
|
61
|
+
* Create a sync operation for an array of embedded documents.
|
|
62
|
+
*
|
|
63
|
+
* When the source model is updated, the corresponding element
|
|
64
|
+
* in the target model's array field will be updated.
|
|
65
|
+
*
|
|
66
|
+
* @param source - Source model class that triggers sync
|
|
67
|
+
* @param target - Target model class that receives data
|
|
68
|
+
* @param field - Array field path in target model
|
|
69
|
+
* @returns Sync operation for chaining configuration
|
|
70
|
+
*
|
|
71
|
+
* @example
|
|
72
|
+
* ```typescript
|
|
73
|
+
* // When Tag updates, update Post.tags[i] where tags[i].id matches
|
|
74
|
+
* modelSync.syncMany(Tag, Post, "tags").identifyBy("id");
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
syncMany(source: ChildModel<Model>, target: ChildModel<Model>, field: string): ModelSyncOperationContract;
|
|
78
|
+
/**
|
|
79
|
+
* Register sync operations with automatic cleanup.
|
|
80
|
+
*
|
|
81
|
+
* Executes the callback function which should contain sync registrations.
|
|
82
|
+
* Returns a cleanup function that unsubscribes all operations created
|
|
83
|
+
* during the callback - perfect for HMR module cleanup.
|
|
84
|
+
*
|
|
85
|
+
* @param callback - Function that registers sync operations
|
|
86
|
+
* @returns Cleanup function that unsubscribes all registered operations
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```typescript
|
|
90
|
+
* // In src/app/blog/events/sync.ts
|
|
91
|
+
* export const cleanup = modelSync.register(() => {
|
|
92
|
+
* Category.sync(Product, "category");
|
|
93
|
+
* Tag.syncMany(Post, "tags").identifyBy("id");
|
|
94
|
+
* Author.sync(Article, "author").unsetOnDelete();
|
|
95
|
+
* });
|
|
96
|
+
* ```
|
|
97
|
+
*/
|
|
98
|
+
register(callback: () => void): () => void;
|
|
99
|
+
/**
|
|
100
|
+
* Clear all registered sync operations.
|
|
101
|
+
* Useful for testing or complete reset.
|
|
102
|
+
*/
|
|
103
|
+
clear(): void;
|
|
104
|
+
/**
|
|
105
|
+
* Get count of active sync operations.
|
|
106
|
+
* Useful for debugging and testing.
|
|
107
|
+
*/
|
|
108
|
+
get count(): number;
|
|
109
|
+
/**
|
|
110
|
+
* Track a new operation in global list and current registration scope.
|
|
111
|
+
*/
|
|
112
|
+
private trackOperation;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Global modelSync facade instance.
|
|
116
|
+
*
|
|
117
|
+
* Use this to register sync operations between models.
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* ```typescript
|
|
121
|
+
* import { modelSync } from "@warlock.js/cascade";
|
|
122
|
+
*
|
|
123
|
+
* export const cleanup = modelSync.register(() => {
|
|
124
|
+
* Category.sync(Product, "category");
|
|
125
|
+
* });
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
export declare const modelSync: ModelSyncFacade;
|
|
129
|
+
export {};
|
|
130
|
+
//# sourceMappingURL=model-sync.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"model-sync.d.ts","sourceRoot":"","sources":["../../src/sync/model-sync.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAExD,OAAO,KAAK,EAAE,iBAAiB,EAAE,0BAA0B,EAAE,MAAM,SAAS,CAAC;AAE7E;;;;;;;;;;;;;;;GAeG;AACH,cAAM,eAAgB,YAAW,iBAAiB;IAChD;;OAEG;IACH,OAAO,CAAC,QAAQ,CAAC,UAAU,CAA4B;IAEvD;;;OAGG;IACH,OAAO,CAAC,QAAQ,CAAC,iBAAiB,CAA8B;IAMhE;;;;;;;;;;;;;;;;;;;;;OAqBG;IACI,IAAI,CACT,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,EACzB,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,EACzB,KAAK,EAAE,MAAM,GACZ,0BAA0B;IAM7B;;;;;;;;;;;;;;;;OAgBG;IACI,QAAQ,CACb,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,EACzB,MAAM,EAAE,UAAU,CAAC,KAAK,CAAC,EACzB,KAAK,EAAE,MAAM,GACZ,0BAA0B;IAM7B;;;;;;;;;;;;;;;;;;;OAmBG;IACI,QAAQ,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,MAAM,IAAI;IA2BjD;;;OAGG;IACI,KAAK,IAAI,IAAI;IAOpB;;;OAGG;IACH,IAAW,KAAK,IAAI,MAAM,CAEzB;IAMD;;OAEG;IACH,OAAO,CAAC,cAAc;CAUvB;AAED;;;;;;;;;;;;;GAaG;AACH,eAAO,MAAM,SAAS,iBAAwB,CAAC"}
|