@warlock.js/cascade 4.0.48 → 4.0.58
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,231 @@
|
|
|
1
|
+
import type { DataSource } from "../data-source/data-source";
|
|
2
|
+
import { type Migration } from "./migration";
|
|
3
|
+
import type { MigrationRecord, MigrationResult } from "./types";
|
|
4
|
+
/**
|
|
5
|
+
* Migration class type with static name property.
|
|
6
|
+
*/
|
|
7
|
+
type MigrationClass = (new () => Migration) & {
|
|
8
|
+
migrationName: string;
|
|
9
|
+
order?: number;
|
|
10
|
+
createdAt?: string;
|
|
11
|
+
};
|
|
12
|
+
/**
|
|
13
|
+
* Options for migration execution.
|
|
14
|
+
*/
|
|
15
|
+
type ExecuteOptions = {
|
|
16
|
+
/** Run in dry-run mode (no actual changes) */
|
|
17
|
+
readonly dryRun?: boolean;
|
|
18
|
+
/** Record to migrations table (default: true for batch, false for single) */
|
|
19
|
+
readonly record?: boolean;
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Migration runner that executes migrations.
|
|
23
|
+
*
|
|
24
|
+
* This is a pure executor - it doesn't discover migrations.
|
|
25
|
+
* Discovery is handled by the framework (e.g., @warlock.js/core CLI).
|
|
26
|
+
*
|
|
27
|
+
* The migration name is read from the static `name` property on the class,
|
|
28
|
+
* which should be set by the CLI after importing:
|
|
29
|
+
*
|
|
30
|
+
* @example
|
|
31
|
+
* ```typescript
|
|
32
|
+
* // In CLI after importing:
|
|
33
|
+
* const { default: MigrationClass } = await import("./create-users.migration.ts");
|
|
34
|
+
* MigrationClass.migrationName ??= "create-users";
|
|
35
|
+
*
|
|
36
|
+
* // Then register or execute:
|
|
37
|
+
* runner.register(MigrationClass);
|
|
38
|
+
* // or
|
|
39
|
+
* await runner.execute(MigrationClass);
|
|
40
|
+
* ```
|
|
41
|
+
*
|
|
42
|
+
* @example
|
|
43
|
+
* ```typescript
|
|
44
|
+
* // Simple direct execution
|
|
45
|
+
* await runner.execute(CreateUsersTable);
|
|
46
|
+
* await runner.rollback(CreateUsersTable);
|
|
47
|
+
*
|
|
48
|
+
* // Registry pattern for batch operations
|
|
49
|
+
* runner.register(CreateUsersTable);
|
|
50
|
+
* runner.register(AddEmailIndex);
|
|
51
|
+
* await runner.runAll();
|
|
52
|
+
* await runner.rollbackAll();
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export declare class MigrationRunner {
|
|
56
|
+
/** Registered migrations */
|
|
57
|
+
readonly migrations: MigrationClass[];
|
|
58
|
+
/** Data source to use */
|
|
59
|
+
private dataSource?;
|
|
60
|
+
/** Cached migration driver */
|
|
61
|
+
private cachedMigrationDriver?;
|
|
62
|
+
/** Table name for tracking migrations */
|
|
63
|
+
private readonly migrationsTable;
|
|
64
|
+
/** Whether to log operations */
|
|
65
|
+
private readonly verbose;
|
|
66
|
+
/**
|
|
67
|
+
* Create a new migration runner.
|
|
68
|
+
*
|
|
69
|
+
* @param options - Runner options
|
|
70
|
+
*/
|
|
71
|
+
constructor(options?: {
|
|
72
|
+
dataSource?: DataSource;
|
|
73
|
+
migrationsTable?: string;
|
|
74
|
+
verbose?: boolean;
|
|
75
|
+
});
|
|
76
|
+
/**
|
|
77
|
+
* Set the data source.
|
|
78
|
+
*/
|
|
79
|
+
setDataSource(dataSource: DataSource): this;
|
|
80
|
+
/**
|
|
81
|
+
* Get the data source.
|
|
82
|
+
*/
|
|
83
|
+
private getDataSource;
|
|
84
|
+
/**
|
|
85
|
+
* Get the migration driver.
|
|
86
|
+
*/
|
|
87
|
+
private getMigrationDriver;
|
|
88
|
+
/**
|
|
89
|
+
* Register a migration.
|
|
90
|
+
*
|
|
91
|
+
* The migration name is read from `MigrationClass.migrationName`.
|
|
92
|
+
*
|
|
93
|
+
* @param MigrationClass - Migration class (must have static `name` set)
|
|
94
|
+
* @param createdAt - Optional timestamp for ordering
|
|
95
|
+
* @returns This runner for chaining
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```typescript
|
|
99
|
+
* CreateUsersTable.migrationName = "2024-01-15_create-users";
|
|
100
|
+
* runner.register(CreateUsersTable);
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
register(MigrationClass: MigrationClass): this;
|
|
104
|
+
/**
|
|
105
|
+
* Register multiple migrations.
|
|
106
|
+
*
|
|
107
|
+
* @param migrations - Array of migration classes
|
|
108
|
+
* @returns This runner for chaining
|
|
109
|
+
*/
|
|
110
|
+
registerMany(migrations: MigrationClass[]): this;
|
|
111
|
+
/**
|
|
112
|
+
* Clear all registered migrations.
|
|
113
|
+
*/
|
|
114
|
+
clear(): this;
|
|
115
|
+
/**
|
|
116
|
+
* Get all registered migration names.
|
|
117
|
+
*/
|
|
118
|
+
getRegisteredNames(): string[];
|
|
119
|
+
/**
|
|
120
|
+
* Execute a single migration's up() method.
|
|
121
|
+
*
|
|
122
|
+
* @param MigrationClass - Migration class to execute
|
|
123
|
+
* @param options - Execution options
|
|
124
|
+
* @returns Migration result
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* ```typescript
|
|
128
|
+
* await runner.execute(CreateUsersTable);
|
|
129
|
+
* await runner.execute(AddEmailIndex, { dryRun: true });
|
|
130
|
+
* ```
|
|
131
|
+
*/
|
|
132
|
+
run(MigrationClass: MigrationClass, options?: ExecuteOptions): Promise<MigrationResult>;
|
|
133
|
+
/**
|
|
134
|
+
* Execute a single migration's down() method.
|
|
135
|
+
*
|
|
136
|
+
* @param MigrationClass - Migration class to rollback
|
|
137
|
+
* @param options - Execution options
|
|
138
|
+
* @returns Migration result
|
|
139
|
+
*
|
|
140
|
+
* @example
|
|
141
|
+
* ```typescript
|
|
142
|
+
* await runner.rollback(CreateUsersTable);
|
|
143
|
+
* ```
|
|
144
|
+
*/
|
|
145
|
+
rollback(MigrationClass: MigrationClass, options?: ExecuteOptions): Promise<MigrationResult>;
|
|
146
|
+
/**
|
|
147
|
+
* Run all pending registered migrations.
|
|
148
|
+
*
|
|
149
|
+
* Only runs migrations not already in the migrations table.
|
|
150
|
+
*
|
|
151
|
+
* @param options - Execution options
|
|
152
|
+
* @returns Results for each migration
|
|
153
|
+
*
|
|
154
|
+
* @example
|
|
155
|
+
* ```typescript
|
|
156
|
+
* runner.register(CreateUsersTable);
|
|
157
|
+
* runner.register(AddEmailIndex);
|
|
158
|
+
* const results = await runner.runAll();
|
|
159
|
+
* ```
|
|
160
|
+
*/
|
|
161
|
+
runAll(options?: ExecuteOptions): Promise<MigrationResult[]>;
|
|
162
|
+
/**
|
|
163
|
+
* Rollback the last batch of migrations.
|
|
164
|
+
*
|
|
165
|
+
* @param options - Execution options
|
|
166
|
+
* @returns Results for each migration
|
|
167
|
+
*/
|
|
168
|
+
rollbackLast(options?: ExecuteOptions): Promise<MigrationResult[]>;
|
|
169
|
+
/**
|
|
170
|
+
* Rollback N batches of migrations.
|
|
171
|
+
*
|
|
172
|
+
* @param batches - Number of batches to rollback
|
|
173
|
+
* @param options - Execution options
|
|
174
|
+
* @returns Results for each migration
|
|
175
|
+
*/
|
|
176
|
+
rollbackBatches(batches: number, options?: ExecuteOptions): Promise<MigrationResult[]>;
|
|
177
|
+
/**
|
|
178
|
+
* Rollback all executed migrations.
|
|
179
|
+
*
|
|
180
|
+
* @param options - Execution options
|
|
181
|
+
* @returns Results for each migration
|
|
182
|
+
*/
|
|
183
|
+
rollbackAll(options?: ExecuteOptions): Promise<MigrationResult[]>;
|
|
184
|
+
/**
|
|
185
|
+
* Reset and re-run: rollback all then run all.
|
|
186
|
+
*
|
|
187
|
+
* @param options - Execution options
|
|
188
|
+
* @returns Combined results
|
|
189
|
+
*/
|
|
190
|
+
fresh(options?: ExecuteOptions): Promise<MigrationResult[]>;
|
|
191
|
+
/**
|
|
192
|
+
* Get status of all registered migrations.
|
|
193
|
+
*/
|
|
194
|
+
status(): Promise<Array<{
|
|
195
|
+
name: string;
|
|
196
|
+
table: string;
|
|
197
|
+
executed: boolean;
|
|
198
|
+
batch: number | null;
|
|
199
|
+
}>>;
|
|
200
|
+
/**
|
|
201
|
+
* Run a single migration.
|
|
202
|
+
*/
|
|
203
|
+
private runMigration;
|
|
204
|
+
/**
|
|
205
|
+
* Get pending (not executed) registered migrations.
|
|
206
|
+
*/
|
|
207
|
+
private getPendingMigrations;
|
|
208
|
+
/**
|
|
209
|
+
* Get migrations to rollback.
|
|
210
|
+
*/
|
|
211
|
+
private getMigrationsToRollback;
|
|
212
|
+
/**
|
|
213
|
+
* Get executed migration records.
|
|
214
|
+
*/
|
|
215
|
+
getExecutedMigrations(): Promise<MigrationRecord[]>;
|
|
216
|
+
/**
|
|
217
|
+
* Record a migration.
|
|
218
|
+
*/
|
|
219
|
+
private recordMigration;
|
|
220
|
+
/**
|
|
221
|
+
* Remove a migration record.
|
|
222
|
+
*/
|
|
223
|
+
private removeMigrationRecord;
|
|
224
|
+
/**
|
|
225
|
+
* Get next batch number.
|
|
226
|
+
*/
|
|
227
|
+
private getNextBatchNumber;
|
|
228
|
+
}
|
|
229
|
+
export declare const migrationRunner: MigrationRunner;
|
|
230
|
+
export {};
|
|
231
|
+
//# sourceMappingURL=migration-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migration-runner.d.ts","sourceRoot":"","sources":["../../src/migration/migration-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,443 @@
|
|
|
1
|
+
import {colors}from'@mongez/copper';import {log}from'@warlock.js/logger';import {dataSourceRegistry}from'../data-source/data-source-registry.js';/**
|
|
2
|
+
* Migration runner that executes migrations.
|
|
3
|
+
*
|
|
4
|
+
* This is a pure executor - it doesn't discover migrations.
|
|
5
|
+
* Discovery is handled by the framework (e.g., @warlock.js/core CLI).
|
|
6
|
+
*
|
|
7
|
+
* The migration name is read from the static `name` property on the class,
|
|
8
|
+
* which should be set by the CLI after importing:
|
|
9
|
+
*
|
|
10
|
+
* @example
|
|
11
|
+
* ```typescript
|
|
12
|
+
* // In CLI after importing:
|
|
13
|
+
* const { default: MigrationClass } = await import("./create-users.migration.ts");
|
|
14
|
+
* MigrationClass.migrationName ??= "create-users";
|
|
15
|
+
*
|
|
16
|
+
* // Then register or execute:
|
|
17
|
+
* runner.register(MigrationClass);
|
|
18
|
+
* // or
|
|
19
|
+
* await runner.execute(MigrationClass);
|
|
20
|
+
* ```
|
|
21
|
+
*
|
|
22
|
+
* @example
|
|
23
|
+
* ```typescript
|
|
24
|
+
* // Simple direct execution
|
|
25
|
+
* await runner.execute(CreateUsersTable);
|
|
26
|
+
* await runner.rollback(CreateUsersTable);
|
|
27
|
+
*
|
|
28
|
+
* // Registry pattern for batch operations
|
|
29
|
+
* runner.register(CreateUsersTable);
|
|
30
|
+
* runner.register(AddEmailIndex);
|
|
31
|
+
* await runner.runAll();
|
|
32
|
+
* await runner.rollbackAll();
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
class MigrationRunner {
|
|
36
|
+
/** Registered migrations */
|
|
37
|
+
migrations = [];
|
|
38
|
+
/** Data source to use */
|
|
39
|
+
dataSource;
|
|
40
|
+
/** Cached migration driver */
|
|
41
|
+
cachedMigrationDriver;
|
|
42
|
+
/** Table name for tracking migrations */
|
|
43
|
+
migrationsTable;
|
|
44
|
+
/** Whether to log operations */
|
|
45
|
+
verbose;
|
|
46
|
+
/**
|
|
47
|
+
* Create a new migration runner.
|
|
48
|
+
*
|
|
49
|
+
* @param options - Runner options
|
|
50
|
+
*/
|
|
51
|
+
constructor(options = {}) {
|
|
52
|
+
this.dataSource = options.dataSource;
|
|
53
|
+
this.migrationsTable = options.migrationsTable ?? "_migrations";
|
|
54
|
+
this.verbose = options.verbose ?? true;
|
|
55
|
+
}
|
|
56
|
+
// ============================================================================
|
|
57
|
+
// DATA SOURCE
|
|
58
|
+
// ============================================================================
|
|
59
|
+
/**
|
|
60
|
+
* Set the data source.
|
|
61
|
+
*/
|
|
62
|
+
setDataSource(dataSource) {
|
|
63
|
+
this.dataSource = dataSource;
|
|
64
|
+
this.cachedMigrationDriver = undefined;
|
|
65
|
+
return this;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Get the data source.
|
|
69
|
+
*/
|
|
70
|
+
getDataSource() {
|
|
71
|
+
if (!this.dataSource) {
|
|
72
|
+
this.dataSource = dataSourceRegistry.get();
|
|
73
|
+
}
|
|
74
|
+
return this.dataSource;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Get the migration driver.
|
|
78
|
+
*/
|
|
79
|
+
getMigrationDriver() {
|
|
80
|
+
if (!this.cachedMigrationDriver) {
|
|
81
|
+
this.cachedMigrationDriver = this.getDataSource().driver.migrationDriver();
|
|
82
|
+
}
|
|
83
|
+
return this.cachedMigrationDriver;
|
|
84
|
+
}
|
|
85
|
+
// ============================================================================
|
|
86
|
+
// REGISTRATION
|
|
87
|
+
// ============================================================================
|
|
88
|
+
/**
|
|
89
|
+
* Register a migration.
|
|
90
|
+
*
|
|
91
|
+
* The migration name is read from `MigrationClass.migrationName`.
|
|
92
|
+
*
|
|
93
|
+
* @param MigrationClass - Migration class (must have static `name` set)
|
|
94
|
+
* @param createdAt - Optional timestamp for ordering
|
|
95
|
+
* @returns This runner for chaining
|
|
96
|
+
*
|
|
97
|
+
* @example
|
|
98
|
+
* ```typescript
|
|
99
|
+
* CreateUsersTable.migrationName = "2024-01-15_create-users";
|
|
100
|
+
* runner.register(CreateUsersTable);
|
|
101
|
+
* ```
|
|
102
|
+
*/
|
|
103
|
+
register(MigrationClass) {
|
|
104
|
+
const name = MigrationClass.migrationName;
|
|
105
|
+
if (!name) {
|
|
106
|
+
throw new Error(`Migration class must have a static 'migrationName' property set. ` +
|
|
107
|
+
`Set it in CLI after importing: MigrationClass.migrationName = "filename";`);
|
|
108
|
+
}
|
|
109
|
+
// Avoid duplicates
|
|
110
|
+
if (!this.migrations.some((m) => m.migrationName === name)) {
|
|
111
|
+
this.migrations.push(MigrationClass);
|
|
112
|
+
}
|
|
113
|
+
return this;
|
|
114
|
+
}
|
|
115
|
+
/**
|
|
116
|
+
* Register multiple migrations.
|
|
117
|
+
*
|
|
118
|
+
* @param migrations - Array of migration classes
|
|
119
|
+
* @returns This runner for chaining
|
|
120
|
+
*/
|
|
121
|
+
registerMany(migrations) {
|
|
122
|
+
for (const MigrationClass of migrations) {
|
|
123
|
+
this.register(MigrationClass);
|
|
124
|
+
}
|
|
125
|
+
return this;
|
|
126
|
+
}
|
|
127
|
+
/**
|
|
128
|
+
* Clear all registered migrations.
|
|
129
|
+
*/
|
|
130
|
+
clear() {
|
|
131
|
+
this.migrations.length = 0;
|
|
132
|
+
return this;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Get all registered migration names.
|
|
136
|
+
*/
|
|
137
|
+
getRegisteredNames() {
|
|
138
|
+
return this.migrations.map((m) => m.migrationName);
|
|
139
|
+
}
|
|
140
|
+
// ============================================================================
|
|
141
|
+
// SINGLE EXECUTION
|
|
142
|
+
// ============================================================================
|
|
143
|
+
/**
|
|
144
|
+
* Execute a single migration's up() method.
|
|
145
|
+
*
|
|
146
|
+
* @param MigrationClass - Migration class to execute
|
|
147
|
+
* @param options - Execution options
|
|
148
|
+
* @returns Migration result
|
|
149
|
+
*
|
|
150
|
+
* @example
|
|
151
|
+
* ```typescript
|
|
152
|
+
* await runner.execute(CreateUsersTable);
|
|
153
|
+
* await runner.execute(AddEmailIndex, { dryRun: true });
|
|
154
|
+
* ```
|
|
155
|
+
*/
|
|
156
|
+
async run(MigrationClass, options = {}) {
|
|
157
|
+
return this.runMigration(MigrationClass, "up", {
|
|
158
|
+
dryRun: options.dryRun,
|
|
159
|
+
record: options.record ?? false,
|
|
160
|
+
});
|
|
161
|
+
}
|
|
162
|
+
/**
|
|
163
|
+
* Execute a single migration's down() method.
|
|
164
|
+
*
|
|
165
|
+
* @param MigrationClass - Migration class to rollback
|
|
166
|
+
* @param options - Execution options
|
|
167
|
+
* @returns Migration result
|
|
168
|
+
*
|
|
169
|
+
* @example
|
|
170
|
+
* ```typescript
|
|
171
|
+
* await runner.rollback(CreateUsersTable);
|
|
172
|
+
* ```
|
|
173
|
+
*/
|
|
174
|
+
async rollback(MigrationClass, options = {}) {
|
|
175
|
+
return this.runMigration(MigrationClass, "down", {
|
|
176
|
+
dryRun: options.dryRun,
|
|
177
|
+
record: options.record ?? false,
|
|
178
|
+
});
|
|
179
|
+
}
|
|
180
|
+
// ============================================================================
|
|
181
|
+
// BATCH EXECUTION (REGISTERED MIGRATIONS)
|
|
182
|
+
// ============================================================================
|
|
183
|
+
/**
|
|
184
|
+
* Run all pending registered migrations.
|
|
185
|
+
*
|
|
186
|
+
* Only runs migrations not already in the migrations table.
|
|
187
|
+
*
|
|
188
|
+
* @param options - Execution options
|
|
189
|
+
* @returns Results for each migration
|
|
190
|
+
*
|
|
191
|
+
* @example
|
|
192
|
+
* ```typescript
|
|
193
|
+
* runner.register(CreateUsersTable);
|
|
194
|
+
* runner.register(AddEmailIndex);
|
|
195
|
+
* const results = await runner.runAll();
|
|
196
|
+
* ```
|
|
197
|
+
*/
|
|
198
|
+
async runAll(options = {}) {
|
|
199
|
+
const { dryRun = false, record = true } = options;
|
|
200
|
+
const results = [];
|
|
201
|
+
// Get pending migrations
|
|
202
|
+
const pending = await this.getPendingMigrations();
|
|
203
|
+
if (pending.length === 0) {
|
|
204
|
+
log.warn("database", "migration", "Nothing to migrate.");
|
|
205
|
+
return results;
|
|
206
|
+
}
|
|
207
|
+
log.info("database", "migration", `Found ${pending.length} pending migration(s).`);
|
|
208
|
+
const nextBatch = await this.getNextBatchNumber();
|
|
209
|
+
for (const MigrationClass of pending) {
|
|
210
|
+
const result = await this.runMigration(MigrationClass, "up", {
|
|
211
|
+
dryRun,
|
|
212
|
+
record,
|
|
213
|
+
batch: nextBatch,
|
|
214
|
+
});
|
|
215
|
+
results.push(result);
|
|
216
|
+
if (!result.success) {
|
|
217
|
+
break; // Stop on first error
|
|
218
|
+
}
|
|
219
|
+
}
|
|
220
|
+
const successCount = results.filter((r) => r.success).length;
|
|
221
|
+
log.success("database", "migration", `Migration complete: ${successCount}/${pending.length} successful.`);
|
|
222
|
+
return results;
|
|
223
|
+
}
|
|
224
|
+
/**
|
|
225
|
+
* Rollback the last batch of migrations.
|
|
226
|
+
*
|
|
227
|
+
* @param options - Execution options
|
|
228
|
+
* @returns Results for each migration
|
|
229
|
+
*/
|
|
230
|
+
async rollbackLast(options = {}) {
|
|
231
|
+
return this.rollbackBatches(1, options);
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Rollback N batches of migrations.
|
|
235
|
+
*
|
|
236
|
+
* @param batches - Number of batches to rollback
|
|
237
|
+
* @param options - Execution options
|
|
238
|
+
* @returns Results for each migration
|
|
239
|
+
*/
|
|
240
|
+
async rollbackBatches(batches, options = {}) {
|
|
241
|
+
const dryRun = options.dryRun ?? false;
|
|
242
|
+
const record = options.record ?? true;
|
|
243
|
+
const results = [];
|
|
244
|
+
const toRollback = await this.getMigrationsToRollback(batches);
|
|
245
|
+
if (toRollback.length === 0) {
|
|
246
|
+
log.warn("database", "migration", "Nothing to rollback.");
|
|
247
|
+
return results;
|
|
248
|
+
}
|
|
249
|
+
log.info("database", "migration", `Rolling back ${toRollback.length} migration(s).`);
|
|
250
|
+
for (const MigrationClass of toRollback) {
|
|
251
|
+
const result = await this.runMigration(MigrationClass, "down", {
|
|
252
|
+
dryRun,
|
|
253
|
+
record,
|
|
254
|
+
});
|
|
255
|
+
results.push(result);
|
|
256
|
+
if (!result.success) {
|
|
257
|
+
break;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
const successCount = results.filter((r) => r.success).length;
|
|
261
|
+
log.success("database", "migration", `Rollback complete: ${successCount}/${toRollback.length} successful.`);
|
|
262
|
+
return results;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Rollback all executed migrations.
|
|
266
|
+
*
|
|
267
|
+
* @param options - Execution options
|
|
268
|
+
* @returns Results for each migration
|
|
269
|
+
*/
|
|
270
|
+
async rollbackAll(options = {}) {
|
|
271
|
+
const executed = await this.getExecutedMigrations();
|
|
272
|
+
if (executed.length === 0) {
|
|
273
|
+
log.warn("database", "migration", "Nothing to rollback.");
|
|
274
|
+
return [];
|
|
275
|
+
}
|
|
276
|
+
const maxBatch = Math.max(...executed.map((r) => r.batch));
|
|
277
|
+
return this.rollbackBatches(maxBatch, options);
|
|
278
|
+
}
|
|
279
|
+
/**
|
|
280
|
+
* Reset and re-run: rollback all then run all.
|
|
281
|
+
*
|
|
282
|
+
* @param options - Execution options
|
|
283
|
+
* @returns Combined results
|
|
284
|
+
*/
|
|
285
|
+
async fresh(options = {}) {
|
|
286
|
+
const rollbackResults = await this.rollbackAll(options);
|
|
287
|
+
const runResults = await this.runAll(options);
|
|
288
|
+
return [...rollbackResults, ...runResults];
|
|
289
|
+
}
|
|
290
|
+
// ============================================================================
|
|
291
|
+
// STATUS
|
|
292
|
+
// ============================================================================
|
|
293
|
+
/**
|
|
294
|
+
* Get status of all registered migrations.
|
|
295
|
+
*/
|
|
296
|
+
async status() {
|
|
297
|
+
const executed = await this.getExecutedMigrations();
|
|
298
|
+
const executedMap = new Map(executed.map((r) => [r.name, r]));
|
|
299
|
+
return this.migrations.map((MigrationClass) => {
|
|
300
|
+
const instance = new MigrationClass();
|
|
301
|
+
const name = MigrationClass.migrationName;
|
|
302
|
+
const record = executedMap.get(name);
|
|
303
|
+
return {
|
|
304
|
+
name,
|
|
305
|
+
table: instance.table,
|
|
306
|
+
executed: !!record,
|
|
307
|
+
batch: record?.batch ?? null,
|
|
308
|
+
};
|
|
309
|
+
});
|
|
310
|
+
}
|
|
311
|
+
// ============================================================================
|
|
312
|
+
// PRIVATE HELPERS
|
|
313
|
+
// ============================================================================
|
|
314
|
+
/**
|
|
315
|
+
* Run a single migration.
|
|
316
|
+
*/
|
|
317
|
+
async runMigration(MigrationClass, direction, options = {}) {
|
|
318
|
+
const { dryRun = false, record = true } = options;
|
|
319
|
+
const startTime = Date.now();
|
|
320
|
+
let success = true;
|
|
321
|
+
let error;
|
|
322
|
+
const migration = new MigrationClass();
|
|
323
|
+
const name = MigrationClass.migrationName;
|
|
324
|
+
log.info("database", "migration", `${direction === "up" ? "Migrating" : "Rolling back"}: ${colors.magenta(name)}...`);
|
|
325
|
+
try {
|
|
326
|
+
if (!dryRun) {
|
|
327
|
+
const driver = this.getMigrationDriver();
|
|
328
|
+
migration.setDriver(driver);
|
|
329
|
+
if (direction === "up") {
|
|
330
|
+
await migration.up();
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
await migration.down();
|
|
334
|
+
}
|
|
335
|
+
await migration.execute();
|
|
336
|
+
if (record) {
|
|
337
|
+
if (direction === "up") {
|
|
338
|
+
const batch = options.batch ?? (await this.getNextBatchNumber());
|
|
339
|
+
await this.recordMigration(name, batch, MigrationClass.createdAt ? new Date(MigrationClass.createdAt) : undefined);
|
|
340
|
+
}
|
|
341
|
+
else {
|
|
342
|
+
await this.removeMigrationRecord(name);
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
}
|
|
347
|
+
catch (err) {
|
|
348
|
+
success = false;
|
|
349
|
+
error = err instanceof Error ? err.message : String(err);
|
|
350
|
+
log.error("database", "migration", `${colors.magenta(name)}: ✗ Failed: ${error}`);
|
|
351
|
+
}
|
|
352
|
+
const durationMs = Date.now() - startTime;
|
|
353
|
+
if (success) {
|
|
354
|
+
log.success("database", "migration", `${direction == "up" ? "Migrated" : "Rolled back"} ${colors.magenta(name)}: successfully (${durationMs}ms)`);
|
|
355
|
+
}
|
|
356
|
+
return {
|
|
357
|
+
name,
|
|
358
|
+
table: migration.table,
|
|
359
|
+
direction,
|
|
360
|
+
success,
|
|
361
|
+
error,
|
|
362
|
+
durationMs,
|
|
363
|
+
executedAt: new Date(),
|
|
364
|
+
};
|
|
365
|
+
}
|
|
366
|
+
/**
|
|
367
|
+
* Get pending (not executed) registered migrations.
|
|
368
|
+
*/
|
|
369
|
+
async getPendingMigrations() {
|
|
370
|
+
const executed = await this.getExecutedMigrations();
|
|
371
|
+
const executedNames = new Set(executed.map((r) => r.name));
|
|
372
|
+
const migrations = this.migrations.filter((m) => !executedNames.has(m.migrationName));
|
|
373
|
+
return migrations.sort((a, b) => {
|
|
374
|
+
if (a.order && b.order) {
|
|
375
|
+
return a.order - b.order;
|
|
376
|
+
}
|
|
377
|
+
return a.migrationName.localeCompare(b.migrationName);
|
|
378
|
+
});
|
|
379
|
+
}
|
|
380
|
+
/**
|
|
381
|
+
* Get migrations to rollback.
|
|
382
|
+
*/
|
|
383
|
+
async getMigrationsToRollback(batches) {
|
|
384
|
+
const executed = await this.getExecutedMigrations();
|
|
385
|
+
if (executed.length === 0)
|
|
386
|
+
return [];
|
|
387
|
+
const batchNumbers = [...new Set(executed.map((r) => r.batch))]
|
|
388
|
+
.sort((a, b) => b - a)
|
|
389
|
+
.slice(0, batches);
|
|
390
|
+
const toRollback = executed.filter((r) => batchNumbers.includes(r.batch)).reverse();
|
|
391
|
+
const migrations = toRollback
|
|
392
|
+
.map((r) => this.migrations.find((m) => m.migrationName === r.name))
|
|
393
|
+
.filter((m) => !!m);
|
|
394
|
+
return migrations.sort((a, b) => {
|
|
395
|
+
if (a.order && b.order) {
|
|
396
|
+
return a.order - b.order;
|
|
397
|
+
}
|
|
398
|
+
return a.migrationName.localeCompare(b.migrationName);
|
|
399
|
+
});
|
|
400
|
+
}
|
|
401
|
+
/**
|
|
402
|
+
* Get executed migration records.
|
|
403
|
+
*/
|
|
404
|
+
async getExecutedMigrations() {
|
|
405
|
+
const driver = this.getDataSource().driver;
|
|
406
|
+
try {
|
|
407
|
+
const queryBuilder = driver.queryBuilder(this.migrationsTable);
|
|
408
|
+
return await queryBuilder.orderBy("batch", "asc").orderBy("name", "asc").get();
|
|
409
|
+
}
|
|
410
|
+
catch {
|
|
411
|
+
return [];
|
|
412
|
+
}
|
|
413
|
+
}
|
|
414
|
+
/**
|
|
415
|
+
* Record a migration.
|
|
416
|
+
*/
|
|
417
|
+
async recordMigration(name, batch, createdAt) {
|
|
418
|
+
const driver = this.getDataSource().driver;
|
|
419
|
+
await driver.insert(this.migrationsTable, {
|
|
420
|
+
name,
|
|
421
|
+
batch,
|
|
422
|
+
executedAt: new Date(),
|
|
423
|
+
createdAt,
|
|
424
|
+
});
|
|
425
|
+
}
|
|
426
|
+
/**
|
|
427
|
+
* Remove a migration record.
|
|
428
|
+
*/
|
|
429
|
+
async removeMigrationRecord(name) {
|
|
430
|
+
const driver = this.getDataSource().driver;
|
|
431
|
+
await driver.delete(this.migrationsTable, { name });
|
|
432
|
+
}
|
|
433
|
+
/**
|
|
434
|
+
* Get next batch number.
|
|
435
|
+
*/
|
|
436
|
+
async getNextBatchNumber() {
|
|
437
|
+
const executed = await this.getExecutedMigrations();
|
|
438
|
+
if (executed.length === 0)
|
|
439
|
+
return 1;
|
|
440
|
+
return Math.max(...executed.map((r) => r.batch)) + 1;
|
|
441
|
+
}
|
|
442
|
+
}
|
|
443
|
+
const migrationRunner = new MigrationRunner();export{MigrationRunner,migrationRunner};//# sourceMappingURL=migration-runner.js.map
|