@zyno-io/dk-server-foundation 26.216.430
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/LICENSE +21 -0
- package/README.md +458 -0
- package/dist/devconsole/assets/index-CKF3C3kv.css +1 -0
- package/dist/devconsole/assets/index-CsHdomhM.js +27 -0
- package/dist/devconsole/index.html +13 -0
- package/dist/resources/proto/generated/devconsole/devconsole.d.ts +320 -0
- package/dist/resources/proto/generated/devconsole/devconsole.d.ts.map +1 -0
- package/dist/resources/proto/generated/devconsole/devconsole.js +3751 -0
- package/dist/resources/proto/generated/devconsole/devconsole.js.map +1 -0
- package/dist/src/app/base.d.ts +36 -0
- package/dist/src/app/base.d.ts.map +1 -0
- package/dist/src/app/base.js +240 -0
- package/dist/src/app/base.js.map +1 -0
- package/dist/src/app/config.d.ts +90 -0
- package/dist/src/app/config.d.ts.map +1 -0
- package/dist/src/app/config.js +33 -0
- package/dist/src/app/config.js.map +1 -0
- package/dist/src/app/config.loader.d.ts +14 -0
- package/dist/src/app/config.loader.d.ts.map +1 -0
- package/dist/src/app/config.loader.js +67 -0
- package/dist/src/app/config.loader.js.map +1 -0
- package/dist/src/app/const.d.ts +3 -0
- package/dist/src/app/const.d.ts.map +1 -0
- package/dist/src/app/const.js +6 -0
- package/dist/src/app/const.js.map +1 -0
- package/dist/src/app/dev.d.ts +7 -0
- package/dist/src/app/dev.d.ts.map +1 -0
- package/dist/src/app/dev.js +105 -0
- package/dist/src/app/dev.js.map +1 -0
- package/dist/src/app/index.d.ts +7 -0
- package/dist/src/app/index.d.ts.map +1 -0
- package/dist/src/app/index.js +12 -0
- package/dist/src/app/index.js.map +1 -0
- package/dist/src/app/openapi.d.ts +4 -0
- package/dist/src/app/openapi.d.ts.map +1 -0
- package/dist/src/app/openapi.js +6 -0
- package/dist/src/app/openapi.js.map +1 -0
- package/dist/src/app/resolver.d.ts +11 -0
- package/dist/src/app/resolver.d.ts.map +1 -0
- package/dist/src/app/resolver.js +60 -0
- package/dist/src/app/resolver.js.map +1 -0
- package/dist/src/app/shutdown.d.ts +12 -0
- package/dist/src/app/shutdown.d.ts.map +1 -0
- package/dist/src/app/shutdown.js +63 -0
- package/dist/src/app/shutdown.js.map +1 -0
- package/dist/src/app/state.d.ts +16 -0
- package/dist/src/app/state.d.ts.map +1 -0
- package/dist/src/app/state.js +12 -0
- package/dist/src/app/state.js.map +1 -0
- package/dist/src/auth/index.d.ts +3 -0
- package/dist/src/auth/index.d.ts.map +1 -0
- package/dist/src/auth/index.js +6 -0
- package/dist/src/auth/index.js.map +1 -0
- package/dist/src/auth/jwt.d.ts +76 -0
- package/dist/src/auth/jwt.d.ts.map +1 -0
- package/dist/src/auth/jwt.js +218 -0
- package/dist/src/auth/jwt.js.map +1 -0
- package/dist/src/auth/provider.d.ts +15 -0
- package/dist/src/auth/provider.d.ts.map +1 -0
- package/dist/src/auth/provider.js +50 -0
- package/dist/src/auth/provider.js.map +1 -0
- package/dist/src/cli/dksf-dev.d.ts +3 -0
- package/dist/src/cli/dksf-dev.d.ts.map +1 -0
- package/dist/src/cli/dksf-dev.js +408 -0
- package/dist/src/cli/dksf-dev.js.map +1 -0
- package/dist/src/cli/dksf-gen-proto.d.ts +3 -0
- package/dist/src/cli/dksf-gen-proto.d.ts.map +1 -0
- package/dist/src/cli/dksf-gen-proto.js +164 -0
- package/dist/src/cli/dksf-gen-proto.js.map +1 -0
- package/dist/src/cli/dksf-install.d.ts +3 -0
- package/dist/src/cli/dksf-install.d.ts.map +1 -0
- package/dist/src/cli/dksf-install.js +10 -0
- package/dist/src/cli/dksf-install.js.map +1 -0
- package/dist/src/cli/dksf-test.d.ts +3 -0
- package/dist/src/cli/dksf-test.d.ts.map +1 -0
- package/dist/src/cli/dksf-test.js +78 -0
- package/dist/src/cli/dksf-test.js.map +1 -0
- package/dist/src/cli/dksf-update.d.ts +3 -0
- package/dist/src/cli/dksf-update.d.ts.map +1 -0
- package/dist/src/cli/dksf-update.js +86 -0
- package/dist/src/cli/dksf-update.js.map +1 -0
- package/dist/src/database/common.d.ts +84 -0
- package/dist/src/database/common.d.ts.map +1 -0
- package/dist/src/database/common.js +380 -0
- package/dist/src/database/common.js.map +1 -0
- package/dist/src/database/dialect.d.ts +10 -0
- package/dist/src/database/dialect.d.ts.map +1 -0
- package/dist/src/database/dialect.js +56 -0
- package/dist/src/database/dialect.js.map +1 -0
- package/dist/src/database/entity.d.ts +62 -0
- package/dist/src/database/entity.d.ts.map +1 -0
- package/dist/src/database/entity.js +198 -0
- package/dist/src/database/entity.js.map +1 -0
- package/dist/src/database/index.d.ts +8 -0
- package/dist/src/database/index.d.ts.map +1 -0
- package/dist/src/database/index.js +15 -0
- package/dist/src/database/index.js.map +1 -0
- package/dist/src/database/migration/MigrationResetCommand.d.ts +9 -0
- package/dist/src/database/migration/MigrationResetCommand.d.ts.map +1 -0
- package/dist/src/database/migration/MigrationResetCommand.js +75 -0
- package/dist/src/database/migration/MigrationResetCommand.js.map +1 -0
- package/dist/src/database/migration/MigrationRunCommand.d.ts +11 -0
- package/dist/src/database/migration/MigrationRunCommand.d.ts.map +1 -0
- package/dist/src/database/migration/MigrationRunCommand.js +118 -0
- package/dist/src/database/migration/MigrationRunCommand.js.map +1 -0
- package/dist/src/database/migration/characters.d.ts +14 -0
- package/dist/src/database/migration/characters.d.ts.map +1 -0
- package/dist/src/database/migration/characters.js +56 -0
- package/dist/src/database/migration/characters.js.map +1 -0
- package/dist/src/database/migration/create/MigrationCreateCommand.d.ts +11 -0
- package/dist/src/database/migration/create/MigrationCreateCommand.d.ts.map +1 -0
- package/dist/src/database/migration/create/MigrationCreateCommand.js +106 -0
- package/dist/src/database/migration/create/MigrationCreateCommand.js.map +1 -0
- package/dist/src/database/migration/create/comparator.d.ts +3 -0
- package/dist/src/database/migration/create/comparator.d.ts.map +1 -0
- package/dist/src/database/migration/create/comparator.js +408 -0
- package/dist/src/database/migration/create/comparator.js.map +1 -0
- package/dist/src/database/migration/create/db-reader.d.ts +5 -0
- package/dist/src/database/migration/create/db-reader.d.ts.map +1 -0
- package/dist/src/database/migration/create/db-reader.js +473 -0
- package/dist/src/database/migration/create/db-reader.js.map +1 -0
- package/dist/src/database/migration/create/ddl-generator.d.ts +3 -0
- package/dist/src/database/migration/create/ddl-generator.d.ts.map +1 -0
- package/dist/src/database/migration/create/ddl-generator.js +725 -0
- package/dist/src/database/migration/create/ddl-generator.js.map +1 -0
- package/dist/src/database/migration/create/entity-reader.d.ts +4 -0
- package/dist/src/database/migration/create/entity-reader.d.ts.map +1 -0
- package/dist/src/database/migration/create/entity-reader.js +417 -0
- package/dist/src/database/migration/create/entity-reader.js.map +1 -0
- package/dist/src/database/migration/create/file-generator.d.ts +3 -0
- package/dist/src/database/migration/create/file-generator.d.ts.map +1 -0
- package/dist/src/database/migration/create/file-generator.js +62 -0
- package/dist/src/database/migration/create/file-generator.js.map +1 -0
- package/dist/src/database/migration/create/prompt.d.ts +4 -0
- package/dist/src/database/migration/create/prompt.d.ts.map +1 -0
- package/dist/src/database/migration/create/prompt.js +55 -0
- package/dist/src/database/migration/create/prompt.js.map +1 -0
- package/dist/src/database/migration/create/schema-model.d.ts +109 -0
- package/dist/src/database/migration/create/schema-model.d.ts.map +1 -0
- package/dist/src/database/migration/create/schema-model.js +24 -0
- package/dist/src/database/migration/create/schema-model.js.map +1 -0
- package/dist/src/database/migration/helpers.d.ts +3 -0
- package/dist/src/database/migration/helpers.d.ts.map +1 -0
- package/dist/src/database/migration/helpers.js +13 -0
- package/dist/src/database/migration/helpers.js.map +1 -0
- package/dist/src/database/migration/index.d.ts +9 -0
- package/dist/src/database/migration/index.d.ts.map +1 -0
- package/dist/src/database/migration/index.js +43 -0
- package/dist/src/database/migration/index.js.map +1 -0
- package/dist/src/database/migration/migration.entity.d.ts +8 -0
- package/dist/src/database/migration/migration.entity.d.ts.map +1 -0
- package/dist/src/database/migration/migration.entity.js +16 -0
- package/dist/src/database/migration/migration.entity.js.map +1 -0
- package/dist/src/database/mysql.d.ts +16 -0
- package/dist/src/database/mysql.d.ts.map +1 -0
- package/dist/src/database/mysql.js +140 -0
- package/dist/src/database/mysql.js.map +1 -0
- package/dist/src/database/postgres.d.ts +16 -0
- package/dist/src/database/postgres.d.ts.map +1 -0
- package/dist/src/database/postgres.js +91 -0
- package/dist/src/database/postgres.js.map +1 -0
- package/dist/src/database/types.d.ts +21 -0
- package/dist/src/database/types.d.ts.map +1 -0
- package/dist/src/database/types.js +27 -0
- package/dist/src/database/types.js.map +1 -0
- package/dist/src/devconsole/devconsole.controller.d.ts +7 -0
- package/dist/src/devconsole/devconsole.controller.d.ts.map +1 -0
- package/dist/src/devconsole/devconsole.controller.js +82 -0
- package/dist/src/devconsole/devconsole.controller.js.map +1 -0
- package/dist/src/devconsole/devconsole.middleware.d.ts +12 -0
- package/dist/src/devconsole/devconsole.middleware.d.ts.map +1 -0
- package/dist/src/devconsole/devconsole.middleware.js +28 -0
- package/dist/src/devconsole/devconsole.middleware.js.map +1 -0
- package/dist/src/devconsole/devconsole.srpc.d.ts +14 -0
- package/dist/src/devconsole/devconsole.srpc.d.ts.map +1 -0
- package/dist/src/devconsole/devconsole.srpc.js +94 -0
- package/dist/src/devconsole/devconsole.srpc.js.map +1 -0
- package/dist/src/devconsole/devconsole.store.d.ts +101 -0
- package/dist/src/devconsole/devconsole.store.d.ts.map +1 -0
- package/dist/src/devconsole/devconsole.store.js +125 -0
- package/dist/src/devconsole/devconsole.store.js.map +1 -0
- package/dist/src/devconsole/devconsole.ws.d.ts +18 -0
- package/dist/src/devconsole/devconsole.ws.d.ts.map +1 -0
- package/dist/src/devconsole/devconsole.ws.js +470 -0
- package/dist/src/devconsole/devconsole.ws.js.map +1 -0
- package/dist/src/devconsole/index.d.ts +2 -0
- package/dist/src/devconsole/index.d.ts.map +1 -0
- package/dist/src/devconsole/index.js +6 -0
- package/dist/src/devconsole/index.js.map +1 -0
- package/dist/src/devconsole/patches.d.ts +6 -0
- package/dist/src/devconsole/patches.d.ts.map +1 -0
- package/dist/src/devconsole/patches.js +397 -0
- package/dist/src/devconsole/patches.js.map +1 -0
- package/dist/src/health/health.module.d.ts +6 -0
- package/dist/src/health/health.module.d.ts.map +1 -0
- package/dist/src/health/health.module.js +32 -0
- package/dist/src/health/health.module.js.map +1 -0
- package/dist/src/health/healthcheck.controller.d.ts +10 -0
- package/dist/src/health/healthcheck.controller.d.ts.map +1 -0
- package/dist/src/health/healthcheck.controller.js +30 -0
- package/dist/src/health/healthcheck.controller.js.map +1 -0
- package/dist/src/health/healthcheck.service.d.ts +13 -0
- package/dist/src/health/healthcheck.service.d.ts.map +1 -0
- package/dist/src/health/healthcheck.service.js +33 -0
- package/dist/src/health/healthcheck.service.js.map +1 -0
- package/dist/src/health/index.d.ts +3 -0
- package/dist/src/health/index.d.ts.map +1 -0
- package/dist/src/health/index.js +6 -0
- package/dist/src/health/index.js.map +1 -0
- package/dist/src/helpers/async/context.d.ts +11 -0
- package/dist/src/helpers/async/context.d.ts.map +1 -0
- package/dist/src/helpers/async/context.js +75 -0
- package/dist/src/helpers/async/context.js.map +1 -0
- package/dist/src/helpers/async/process.d.ts +16 -0
- package/dist/src/helpers/async/process.d.ts.map +1 -0
- package/dist/src/helpers/async/process.js +44 -0
- package/dist/src/helpers/async/process.js.map +1 -0
- package/dist/src/helpers/async/promise.d.ts +5 -0
- package/dist/src/helpers/async/promise.d.ts.map +1 -0
- package/dist/src/helpers/async/promise.js +27 -0
- package/dist/src/helpers/async/promise.js.map +1 -0
- package/dist/src/helpers/data/array.d.ts +3 -0
- package/dist/src/helpers/data/array.d.ts.map +1 -0
- package/dist/src/helpers/data/array.js +17 -0
- package/dist/src/helpers/data/array.js.map +1 -0
- package/dist/src/helpers/data/objects.d.ts +12 -0
- package/dist/src/helpers/data/objects.d.ts.map +1 -0
- package/dist/src/helpers/data/objects.js +75 -0
- package/dist/src/helpers/data/objects.js.map +1 -0
- package/dist/src/helpers/data/serialization.d.ts +4 -0
- package/dist/src/helpers/data/serialization.d.ts.map +1 -0
- package/dist/src/helpers/data/serialization.js +15 -0
- package/dist/src/helpers/data/serialization.js.map +1 -0
- package/dist/src/helpers/data/transformer.d.ts +13 -0
- package/dist/src/helpers/data/transformer.d.ts.map +1 -0
- package/dist/src/helpers/data/transformer.js +55 -0
- package/dist/src/helpers/data/transformer.js.map +1 -0
- package/dist/src/helpers/framework/decorators.d.ts +5 -0
- package/dist/src/helpers/framework/decorators.d.ts.map +1 -0
- package/dist/src/helpers/framework/decorators.js +39 -0
- package/dist/src/helpers/framework/decorators.js.map +1 -0
- package/dist/src/helpers/framework/event.d.ts +3 -0
- package/dist/src/helpers/framework/event.d.ts.map +1 -0
- package/dist/src/helpers/framework/event.js +20 -0
- package/dist/src/helpers/framework/event.js.map +1 -0
- package/dist/src/helpers/framework/injection.d.ts +7 -0
- package/dist/src/helpers/framework/injection.d.ts.map +1 -0
- package/dist/src/helpers/framework/injection.js +52 -0
- package/dist/src/helpers/framework/injection.js.map +1 -0
- package/dist/src/helpers/index.d.ts +22 -0
- package/dist/src/helpers/index.d.ts.map +1 -0
- package/dist/src/helpers/index.js +32 -0
- package/dist/src/helpers/index.js.map +1 -0
- package/dist/src/helpers/io/package.d.ts +5 -0
- package/dist/src/helpers/io/package.d.ts.map +1 -0
- package/dist/src/helpers/io/package.js +31 -0
- package/dist/src/helpers/io/package.js.map +1 -0
- package/dist/src/helpers/io/stream.d.ts +18 -0
- package/dist/src/helpers/io/stream.d.ts.map +1 -0
- package/dist/src/helpers/io/stream.js +91 -0
- package/dist/src/helpers/io/stream.js.map +1 -0
- package/dist/src/helpers/redis/broadcast.d.ts +13 -0
- package/dist/src/helpers/redis/broadcast.d.ts.map +1 -0
- package/dist/src/helpers/redis/broadcast.js +100 -0
- package/dist/src/helpers/redis/broadcast.js.map +1 -0
- package/dist/src/helpers/redis/cache.d.ts +7 -0
- package/dist/src/helpers/redis/cache.d.ts.map +1 -0
- package/dist/src/helpers/redis/cache.js +28 -0
- package/dist/src/helpers/redis/cache.js.map +1 -0
- package/dist/src/helpers/redis/mutex.d.ts +24 -0
- package/dist/src/helpers/redis/mutex.d.ts.map +1 -0
- package/dist/src/helpers/redis/mutex.js +240 -0
- package/dist/src/helpers/redis/mutex.js.map +1 -0
- package/dist/src/helpers/redis/redis.d.ts +11 -0
- package/dist/src/helpers/redis/redis.d.ts.map +1 -0
- package/dist/src/helpers/redis/redis.js +59 -0
- package/dist/src/helpers/redis/redis.js.map +1 -0
- package/dist/src/helpers/security/crypto.d.ts +26 -0
- package/dist/src/helpers/security/crypto.d.ts.map +1 -0
- package/dist/src/helpers/security/crypto.js +121 -0
- package/dist/src/helpers/security/crypto.js.map +1 -0
- package/dist/src/helpers/security/validation.d.ts +4 -0
- package/dist/src/helpers/security/validation.d.ts.map +1 -0
- package/dist/src/helpers/security/validation.js +25 -0
- package/dist/src/helpers/security/validation.js.map +1 -0
- package/dist/src/helpers/utils/date.d.ts +4 -0
- package/dist/src/helpers/utils/date.d.ts.map +1 -0
- package/dist/src/helpers/utils/date.js +23 -0
- package/dist/src/helpers/utils/date.js.map +1 -0
- package/dist/src/helpers/utils/error.d.ts +24 -0
- package/dist/src/helpers/utils/error.d.ts.map +1 -0
- package/dist/src/helpers/utils/error.js +168 -0
- package/dist/src/helpers/utils/error.js.map +1 -0
- package/dist/src/helpers/utils/jsx.d.ts +3 -0
- package/dist/src/helpers/utils/jsx.d.ts.map +1 -0
- package/dist/src/helpers/utils/jsx.js +13 -0
- package/dist/src/helpers/utils/jsx.js.map +1 -0
- package/dist/src/helpers/utils/uuid.d.ts +3 -0
- package/dist/src/helpers/utils/uuid.d.ts.map +1 -0
- package/dist/src/helpers/utils/uuid.js +14 -0
- package/dist/src/helpers/utils/uuid.js.map +1 -0
- package/dist/src/http/auth.d.ts +46 -0
- package/dist/src/http/auth.d.ts.map +1 -0
- package/dist/src/http/auth.js +162 -0
- package/dist/src/http/auth.js.map +1 -0
- package/dist/src/http/context.d.ts +5 -0
- package/dist/src/http/context.d.ts.map +1 -0
- package/dist/src/http/context.js +22 -0
- package/dist/src/http/context.js.map +1 -0
- package/dist/src/http/cors.d.ts +36 -0
- package/dist/src/http/cors.d.ts.map +1 -0
- package/dist/src/http/cors.js +171 -0
- package/dist/src/http/cors.js.map +1 -0
- package/dist/src/http/errors.d.ts +3 -0
- package/dist/src/http/errors.d.ts.map +1 -0
- package/dist/src/http/errors.js +10 -0
- package/dist/src/http/errors.js.map +1 -0
- package/dist/src/http/index.d.ts +24 -0
- package/dist/src/http/index.d.ts.map +1 -0
- package/dist/src/http/index.js +25 -0
- package/dist/src/http/index.js.map +1 -0
- package/dist/src/http/kernel.d.ts +17 -0
- package/dist/src/http/kernel.d.ts.map +1 -0
- package/dist/src/http/kernel.js +133 -0
- package/dist/src/http/kernel.js.map +1 -0
- package/dist/src/http/middleware.d.ts +12 -0
- package/dist/src/http/middleware.d.ts.map +1 -0
- package/dist/src/http/middleware.js +61 -0
- package/dist/src/http/middleware.js.map +1 -0
- package/dist/src/http/overrides.d.ts +2 -0
- package/dist/src/http/overrides.d.ts.map +1 -0
- package/dist/src/http/overrides.js +19 -0
- package/dist/src/http/overrides.js.map +1 -0
- package/dist/src/http/store.d.ts +33 -0
- package/dist/src/http/store.d.ts.map +1 -0
- package/dist/src/http/store.js +102 -0
- package/dist/src/http/store.js.map +1 -0
- package/dist/src/http/uploads.d.ts +7 -0
- package/dist/src/http/uploads.d.ts.map +1 -0
- package/dist/src/http/uploads.js +8 -0
- package/dist/src/http/uploads.js.map +1 -0
- package/dist/src/http/workflow.d.ts +18 -0
- package/dist/src/http/workflow.d.ts.map +1 -0
- package/dist/src/http/workflow.js +181 -0
- package/dist/src/http/workflow.js.map +1 -0
- package/dist/src/index.d.ts +13 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +25 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/services/cli/invoke.d.ts +5 -0
- package/dist/src/services/cli/invoke.d.ts.map +1 -0
- package/dist/src/services/cli/invoke.js +45 -0
- package/dist/src/services/cli/invoke.js.map +1 -0
- package/dist/src/services/cli/repl-context.d.ts +13 -0
- package/dist/src/services/cli/repl-context.d.ts.map +1 -0
- package/dist/src/services/cli/repl-context.js +60 -0
- package/dist/src/services/cli/repl-context.js.map +1 -0
- package/dist/src/services/cli/repl.d.ts +5 -0
- package/dist/src/services/cli/repl.d.ts.map +1 -0
- package/dist/src/services/cli/repl.js +32 -0
- package/dist/src/services/cli/repl.js.map +1 -0
- package/dist/src/services/cli.d.ts +12 -0
- package/dist/src/services/cli.d.ts.map +1 -0
- package/dist/src/services/cli.js +76 -0
- package/dist/src/services/cli.js.map +1 -0
- package/dist/src/services/index.d.ts +7 -0
- package/dist/src/services/index.d.ts.map +1 -0
- package/dist/src/services/index.js +10 -0
- package/dist/src/services/index.js.map +1 -0
- package/dist/src/services/leader.d.ts +32 -0
- package/dist/src/services/leader.d.ts.map +1 -0
- package/dist/src/services/leader.js +174 -0
- package/dist/src/services/leader.js.map +1 -0
- package/dist/src/services/logger.d.ts +35 -0
- package/dist/src/services/logger.d.ts.map +1 -0
- package/dist/src/services/logger.js +245 -0
- package/dist/src/services/logger.js.map +1 -0
- package/dist/src/services/mail/index.d.ts +61 -0
- package/dist/src/services/mail/index.d.ts.map +1 -0
- package/dist/src/services/mail/index.js +90 -0
- package/dist/src/services/mail/index.js.map +1 -0
- package/dist/src/services/mail/postmark.d.ts +11 -0
- package/dist/src/services/mail/postmark.d.ts.map +1 -0
- package/dist/src/services/mail/postmark.js +42 -0
- package/dist/src/services/mail/postmark.js.map +1 -0
- package/dist/src/services/mail/smtp.d.ts +11 -0
- package/dist/src/services/mail/smtp.d.ts.map +1 -0
- package/dist/src/services/mail/smtp.js +61 -0
- package/dist/src/services/mail/smtp.js.map +1 -0
- package/dist/src/services/mesh.d.ts +65 -0
- package/dist/src/services/mesh.d.ts.map +1 -0
- package/dist/src/services/mesh.js +422 -0
- package/dist/src/services/mesh.js.map +1 -0
- package/dist/src/services/worker/bootstrap.d.ts +3 -0
- package/dist/src/services/worker/bootstrap.d.ts.map +1 -0
- package/dist/src/services/worker/bootstrap.js +64 -0
- package/dist/src/services/worker/bootstrap.js.map +1 -0
- package/dist/src/services/worker/cli.d.ts +11 -0
- package/dist/src/services/worker/cli.d.ts.map +1 -0
- package/dist/src/services/worker/cli.js +43 -0
- package/dist/src/services/worker/cli.js.map +1 -0
- package/dist/src/services/worker/entity.d.ts +18 -0
- package/dist/src/services/worker/entity.d.ts.map +1 -0
- package/dist/src/services/worker/entity.js +16 -0
- package/dist/src/services/worker/entity.js.map +1 -0
- package/dist/src/services/worker/index.d.ts +9 -0
- package/dist/src/services/worker/index.d.ts.map +1 -0
- package/dist/src/services/worker/index.js +40 -0
- package/dist/src/services/worker/index.js.map +1 -0
- package/dist/src/services/worker/queue.d.ts +8 -0
- package/dist/src/services/worker/queue.d.ts.map +1 -0
- package/dist/src/services/worker/queue.js +32 -0
- package/dist/src/services/worker/queue.js.map +1 -0
- package/dist/src/services/worker/recorder.d.ts +16 -0
- package/dist/src/services/worker/recorder.d.ts.map +1 -0
- package/dist/src/services/worker/recorder.js +168 -0
- package/dist/src/services/worker/recorder.js.map +1 -0
- package/dist/src/services/worker/runner.d.ts +21 -0
- package/dist/src/services/worker/runner.d.ts.map +1 -0
- package/dist/src/services/worker/runner.js +156 -0
- package/dist/src/services/worker/runner.js.map +1 -0
- package/dist/src/services/worker/types.d.ts +26 -0
- package/dist/src/services/worker/types.d.ts.map +1 -0
- package/dist/src/services/worker/types.js +29 -0
- package/dist/src/services/worker/types.js.map +1 -0
- package/dist/src/srpc/SrpcByteStream.d.ts +67 -0
- package/dist/src/srpc/SrpcByteStream.d.ts.map +1 -0
- package/dist/src/srpc/SrpcByteStream.js +319 -0
- package/dist/src/srpc/SrpcByteStream.js.map +1 -0
- package/dist/src/srpc/SrpcClient.d.ts +75 -0
- package/dist/src/srpc/SrpcClient.d.ts.map +1 -0
- package/dist/src/srpc/SrpcClient.js +445 -0
- package/dist/src/srpc/SrpcClient.js.map +1 -0
- package/dist/src/srpc/SrpcServer.d.ts +80 -0
- package/dist/src/srpc/SrpcServer.d.ts.map +1 -0
- package/dist/src/srpc/SrpcServer.js +561 -0
- package/dist/src/srpc/SrpcServer.js.map +1 -0
- package/dist/src/srpc/index.d.ts +7 -0
- package/dist/src/srpc/index.d.ts.map +1 -0
- package/dist/src/srpc/index.js +12 -0
- package/dist/src/srpc/index.js.map +1 -0
- package/dist/src/srpc/types.d.ts +131 -0
- package/dist/src/srpc/types.d.ts.map +1 -0
- package/dist/src/srpc/types.js +65 -0
- package/dist/src/srpc/types.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +2 -0
- package/dist/src/telemetry/index.d.ts.map +1 -0
- package/dist/src/telemetry/index.js +5 -0
- package/dist/src/telemetry/index.js.map +1 -0
- package/dist/src/telemetry/otel/MariaDBInstrumentation.d.ts +22 -0
- package/dist/src/telemetry/otel/MariaDBInstrumentation.d.ts.map +1 -0
- package/dist/src/telemetry/otel/MariaDBInstrumentation.js +248 -0
- package/dist/src/telemetry/otel/MariaDBInstrumentation.js.map +1 -0
- package/dist/src/telemetry/otel/helpers.d.ts +27 -0
- package/dist/src/telemetry/otel/helpers.d.ts.map +1 -0
- package/dist/src/telemetry/otel/helpers.js +126 -0
- package/dist/src/telemetry/otel/helpers.js.map +1 -0
- package/dist/src/telemetry/otel/index.d.ts +14 -0
- package/dist/src/telemetry/otel/index.d.ts.map +1 -0
- package/dist/src/telemetry/otel/index.js +132 -0
- package/dist/src/telemetry/otel/index.js.map +1 -0
- package/dist/src/telemetry/otel/metrics.controller.d.ts +6 -0
- package/dist/src/telemetry/otel/metrics.controller.d.ts.map +1 -0
- package/dist/src/telemetry/otel/metrics.controller.js +63 -0
- package/dist/src/telemetry/otel/metrics.controller.js.map +1 -0
- package/dist/src/telemetry/sentry.d.ts +9 -0
- package/dist/src/telemetry/sentry.d.ts.map +1 -0
- package/dist/src/telemetry/sentry.js +62 -0
- package/dist/src/telemetry/sentry.js.map +1 -0
- package/dist/src/testing/expect.d.ts +25 -0
- package/dist/src/testing/expect.d.ts.map +1 -0
- package/dist/src/testing/expect.js +151 -0
- package/dist/src/testing/expect.js.map +1 -0
- package/dist/src/testing/fixtures.d.ts +19 -0
- package/dist/src/testing/fixtures.d.ts.map +1 -0
- package/dist/src/testing/fixtures.js +69 -0
- package/dist/src/testing/fixtures.js.map +1 -0
- package/dist/src/testing/index.d.ts +260 -0
- package/dist/src/testing/index.d.ts.map +1 -0
- package/dist/src/testing/index.js +345 -0
- package/dist/src/testing/index.js.map +1 -0
- package/dist/src/testing/requests.d.ts +10 -0
- package/dist/src/testing/requests.d.ts.map +1 -0
- package/dist/src/testing/requests.js +56 -0
- package/dist/src/testing/requests.js.map +1 -0
- package/dist/src/testing/sql.d.ts +11 -0
- package/dist/src/testing/sql.d.ts.map +1 -0
- package/dist/src/testing/sql.js +55 -0
- package/dist/src/testing/sql.js.map +1 -0
- package/dist/src/types/index.d.ts +57 -0
- package/dist/src/types/index.d.ts.map +1 -0
- package/dist/src/types/index.js +73 -0
- package/dist/src/types/index.js.map +1 -0
- package/dist/src/types/phone.d.ts +11 -0
- package/dist/src/types/phone.d.ts.map +1 -0
- package/dist/src/types/phone.js +73 -0
- package/dist/src/types/phone.js.map +1 -0
- package/docs/.vitepress/config.mts +79 -0
- package/docs/.yarnrc.yml +1 -0
- package/docs/content/CONTRIBUTING.md +140 -0
- package/docs/content/README-DEV.md +142 -0
- package/docs/content/README.md +39 -0
- package/docs/content/authentication.md +215 -0
- package/docs/content/cli.md +335 -0
- package/docs/content/configuration.md +175 -0
- package/docs/content/database.md +422 -0
- package/docs/content/devconsole.md +123 -0
- package/docs/content/getting-started.md +154 -0
- package/docs/content/guides/test-migration-guide.md +351 -0
- package/docs/content/health.md +54 -0
- package/docs/content/helpers.md +322 -0
- package/docs/content/http.md +253 -0
- package/docs/content/index.md +147 -0
- package/docs/content/leader-service.md +98 -0
- package/docs/content/logging.md +150 -0
- package/docs/content/mail.md +161 -0
- package/docs/content/mesh-service.md +204 -0
- package/docs/content/public/images/devconsole/01-dashboard.png +0 -0
- package/docs/content/public/images/devconsole/02-routes.png +0 -0
- package/docs/content/public/images/devconsole/03-openapi.png +0 -0
- package/docs/content/public/images/devconsole/04-requests.png +0 -0
- package/docs/content/public/images/devconsole/05-srpc.png +0 -0
- package/docs/content/public/images/devconsole/06-database.png +0 -0
- package/docs/content/public/images/devconsole/07-health.png +0 -0
- package/docs/content/public/images/devconsole/08-mutex.png +0 -0
- package/docs/content/public/images/devconsole/09-repl.png +0 -0
- package/docs/content/public/images/devconsole/10-workers.png +0 -0
- package/docs/content/redis.md +168 -0
- package/docs/content/srpc.md +261 -0
- package/docs/content/telemetry.md +166 -0
- package/docs/content/testing.md +222 -0
- package/docs/content/types.md +215 -0
- package/docs/content/worker.md +177 -0
- package/docs/package.json +16 -0
- package/docs/scripts/README-SCREENSHOTS.md +145 -0
- package/docs/scripts/capture-devconsole-screenshots.js +184 -0
- package/docs/yarn.lock +2408 -0
- package/package.json +144 -0
- package/patches/@deepkit+type+1.0.19.patch +38 -0
- package/patches/deepkit-openapi-core+0.0.9.patch +62 -0
- package/src/app/base.ts +253 -0
- package/src/app/config.loader.ts +66 -0
- package/src/app/config.ts +119 -0
- package/src/app/const.ts +4 -0
- package/src/app/dev.ts +92 -0
- package/src/app/index.ts +6 -0
- package/src/app/openapi.ts +3 -0
- package/src/app/resolver.ts +49 -0
- package/src/app/shutdown.ts +55 -0
- package/src/app/state.ts +19 -0
- package/src/auth/index.ts +2 -0
- package/src/auth/jwt.ts +275 -0
- package/src/auth/provider.ts +57 -0
- package/src/cli/dksf-dev.ts +416 -0
- package/src/cli/dksf-gen-proto.ts +176 -0
- package/src/cli/dksf-install.ts +11 -0
- package/src/cli/dksf-test.ts +84 -0
- package/src/cli/dksf-update.ts +101 -0
- package/src/database/common.ts +385 -0
- package/src/database/dialect.ts +43 -0
- package/src/database/entity.ts +285 -0
- package/src/database/index.ts +7 -0
- package/src/database/migration/MigrationResetCommand.ts +72 -0
- package/src/database/migration/MigrationRunCommand.ts +118 -0
- package/src/database/migration/characters.ts +53 -0
- package/src/database/migration/create/MigrationCreateCommand.ts +96 -0
- package/src/database/migration/create/comparator.ts +467 -0
- package/src/database/migration/create/db-reader.ts +510 -0
- package/src/database/migration/create/ddl-generator.ts +755 -0
- package/src/database/migration/create/entity-reader.ts +471 -0
- package/src/database/migration/create/file-generator.ts +57 -0
- package/src/database/migration/create/prompt.ts +49 -0
- package/src/database/migration/create/schema-model.ts +102 -0
- package/src/database/migration/helpers.ts +7 -0
- package/src/database/migration/index.ts +35 -0
- package/src/database/migration/migration.entity.ts +10 -0
- package/src/database/mysql.ts +140 -0
- package/src/database/postgres.ts +97 -0
- package/src/database/types.ts +18 -0
- package/src/devconsole/devconsole.controller.ts +59 -0
- package/src/devconsole/devconsole.middleware.ts +23 -0
- package/src/devconsole/devconsole.srpc.ts +94 -0
- package/src/devconsole/devconsole.store.ts +190 -0
- package/src/devconsole/devconsole.ws.ts +491 -0
- package/src/devconsole/index.ts +1 -0
- package/src/devconsole/patches.ts +428 -0
- package/src/health/health.module.ts +30 -0
- package/src/health/healthcheck.controller.ts +17 -0
- package/src/health/healthcheck.service.ts +28 -0
- package/src/health/index.ts +2 -0
- package/src/helpers/async/context.ts +67 -0
- package/src/helpers/async/process.ts +49 -0
- package/src/helpers/async/promise.ts +16 -0
- package/src/helpers/data/array.ts +11 -0
- package/src/helpers/data/objects.ts +64 -0
- package/src/helpers/data/serialization.ts +11 -0
- package/src/helpers/data/transformer.ts +54 -0
- package/src/helpers/framework/decorators.ts +27 -0
- package/src/helpers/framework/event.ts +11 -0
- package/src/helpers/framework/injection.ts +47 -0
- package/src/helpers/index.ts +34 -0
- package/src/helpers/io/package.ts +26 -0
- package/src/helpers/io/stream.ts +79 -0
- package/src/helpers/redis/broadcast.ts +96 -0
- package/src/helpers/redis/cache.ts +28 -0
- package/src/helpers/redis/mutex.ts +260 -0
- package/src/helpers/redis/redis.ts +60 -0
- package/src/helpers/security/crypto.ts +133 -0
- package/src/helpers/security/validation.ts +16 -0
- package/src/helpers/utils/date.ts +13 -0
- package/src/helpers/utils/error.ts +155 -0
- package/src/helpers/utils/jsx.ts +8 -0
- package/src/helpers/utils/uuid.ts +8 -0
- package/src/http/auth.ts +156 -0
- package/src/http/context.ts +15 -0
- package/src/http/cors.ts +159 -0
- package/src/http/errors.ts +9 -0
- package/src/http/index.ts +19 -0
- package/src/http/kernel.ts +138 -0
- package/src/http/middleware.ts +59 -0
- package/src/http/overrides.ts +20 -0
- package/src/http/store.ts +86 -0
- package/src/http/uploads.ts +6 -0
- package/src/http/workflow.ts +167 -0
- package/src/index.ts +19 -0
- package/src/services/cli/invoke.ts +39 -0
- package/src/services/cli/repl-context.ts +63 -0
- package/src/services/cli/repl.ts +22 -0
- package/src/services/cli.ts +74 -0
- package/src/services/index.ts +6 -0
- package/src/services/leader.ts +201 -0
- package/src/services/logger.ts +258 -0
- package/src/services/mail/index.ts +117 -0
- package/src/services/mail/postmark.ts +37 -0
- package/src/services/mail/smtp.ts +46 -0
- package/src/services/mesh.ts +508 -0
- package/src/services/worker/bootstrap.ts +53 -0
- package/src/services/worker/cli.ts +32 -0
- package/src/services/worker/entity.ts +22 -0
- package/src/services/worker/index.ts +30 -0
- package/src/services/worker/queue.ts +35 -0
- package/src/services/worker/recorder.ts +172 -0
- package/src/services/worker/runner.ts +179 -0
- package/src/services/worker/types.ts +32 -0
- package/src/srpc/SrpcByteStream.ts +382 -0
- package/src/srpc/SrpcClient.ts +512 -0
- package/src/srpc/SrpcServer.ts +681 -0
- package/src/srpc/index.ts +15 -0
- package/src/srpc/types.ts +146 -0
- package/src/telemetry/index.ts +1 -0
- package/src/telemetry/otel/MariaDBInstrumentation.ts +297 -0
- package/src/telemetry/otel/helpers.ts +117 -0
- package/src/telemetry/otel/index.ts +150 -0
- package/src/telemetry/otel/metrics.controller.ts +50 -0
- package/src/telemetry/sentry.ts +58 -0
- package/src/testing/expect.ts +148 -0
- package/src/testing/fixtures.ts +62 -0
- package/src/testing/index.ts +355 -0
- package/src/testing/requests.ts +68 -0
- package/src/testing/sql.ts +50 -0
- package/src/types/index.ts +64 -0
- package/src/types/phone.ts +64 -0
- package/types.d.ts +20 -0
|
@@ -0,0 +1,725 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateDDL = generateDDL;
|
|
4
|
+
function __assignType(fn, args) {
|
|
5
|
+
fn.__type = args;
|
|
6
|
+
return fn;
|
|
7
|
+
}
|
|
8
|
+
const dialect_1 = require("../../dialect");
|
|
9
|
+
/*@ts-ignore*/
|
|
10
|
+
var { __ΩSchemaDiff, __ΩTableDiff, __ΩDialect, __ΩTableSchema, __ΩIndexSchema, __ΩForeignKeySchema, __ΩColumnSchema } = require('./schema-model');
|
|
11
|
+
const VALID_FK_ACTIONS = new Set(['RESTRICT', 'CASCADE', 'SET NULL', 'SET DEFAULT', 'NO ACTION']);
|
|
12
|
+
function generateDDL(diff) {
|
|
13
|
+
const statements = [];
|
|
14
|
+
const { dialect, pgSchema } = diff;
|
|
15
|
+
// Global enum type dedup set (PG only)
|
|
16
|
+
const globalEnumTypes = (Set.Ω = [['&']], new Set());
|
|
17
|
+
// Collect new-table FKs to emit after all tables are created (handles cross-table dependencies)
|
|
18
|
+
const deferredFKs = [];
|
|
19
|
+
// New tables
|
|
20
|
+
for (const table of diff.addedTables) {
|
|
21
|
+
if (dialect === 'postgres') {
|
|
22
|
+
// Create enum types first for PG, deduplicating globally
|
|
23
|
+
for (const col of table.columns) {
|
|
24
|
+
if (col.type === 'enum' && col.enumTypeName && col.enumValues) {
|
|
25
|
+
if (!globalEnumTypes.has(col.enumTypeName)) {
|
|
26
|
+
globalEnumTypes.add(col.enumTypeName);
|
|
27
|
+
statements.push(createEnumType(col.enumTypeName, col.enumValues, pgSchema));
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
statements.push(createTable(table, dialect, pgSchema));
|
|
33
|
+
// Create indexes for new tables
|
|
34
|
+
for (const idx of table.indexes) {
|
|
35
|
+
statements.push(createIndex(table.name, idx, dialect, pgSchema));
|
|
36
|
+
}
|
|
37
|
+
// Defer FK creation until after all tables exist
|
|
38
|
+
for (const fk of table.foreignKeys) {
|
|
39
|
+
deferredFKs.push({ tableName: table.name, fk });
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
// Enum type modifications (PG only) — deduplicated across all tables
|
|
43
|
+
// Phase 1: RENAME + CREATE for recreations, ADD VALUE for additions (before table DDL)
|
|
44
|
+
// Phase 2: table DDL handles ALTER COLUMN TYPE casts for modified columns
|
|
45
|
+
// Phase 3: DROP old types after table DDL
|
|
46
|
+
const deferredEnumDrops = [];
|
|
47
|
+
if (dialect === 'postgres') {
|
|
48
|
+
const seenEnumMods = (Map.Ω = [['&'], ['typeName', 'added', 'removed', 'newValues', 'P&4!&F4"&F4#&F4$M']], new Map());
|
|
49
|
+
for (const tableDiff of diff.modifiedTables) {
|
|
50
|
+
for (const enumMod of tableDiff.modifiedEnumTypes) {
|
|
51
|
+
if (!seenEnumMods.has(enumMod.typeName)) {
|
|
52
|
+
seenEnumMods.set(enumMod.typeName, {
|
|
53
|
+
typeName: enumMod.typeName,
|
|
54
|
+
added: enumMod.added,
|
|
55
|
+
removed: enumMod.removed,
|
|
56
|
+
newValues: enumMod.newValues
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
for (const [, enumMod] of seenEnumMods) {
|
|
62
|
+
if (enumMod.removed.length > 0) {
|
|
63
|
+
// Recreation: RENAME old + CREATE new before table DDL; DROP old after.
|
|
64
|
+
// Drop any pre-existing _old type first to avoid collision.
|
|
65
|
+
const oldName = `${enumMod.typeName}_old`;
|
|
66
|
+
const vals = enumMod.newValues.map(__assignType(v => `'${escapeStr(v)}'`, ['v', '', 'P"2!"/"'])).join(', ');
|
|
67
|
+
const typeRef = qType(enumMod.typeName, pgSchema);
|
|
68
|
+
const oldTypeRef = qType(oldName, pgSchema);
|
|
69
|
+
statements.push(`DROP TYPE IF EXISTS ${oldTypeRef}`);
|
|
70
|
+
statements.push(`ALTER TYPE ${typeRef} RENAME TO ${q('postgres', oldName)}`);
|
|
71
|
+
statements.push(`CREATE TYPE ${typeRef} AS ENUM (${vals})`);
|
|
72
|
+
// Per-table DDL handles ALTER COLUMN TYPE with USING cast (via modifiedColumns)
|
|
73
|
+
deferredEnumDrops.push(`DROP TYPE IF EXISTS ${oldTypeRef}`);
|
|
74
|
+
}
|
|
75
|
+
else {
|
|
76
|
+
for (const val of enumMod.added) {
|
|
77
|
+
statements.push(`ALTER TYPE ${qType(enumMod.typeName, pgSchema)} ADD VALUE '${escapeStr(val)}'`);
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
// Modified tables
|
|
83
|
+
for (const tableDiff of diff.modifiedTables) {
|
|
84
|
+
statements.push(...generateTableDDL(tableDiff, dialect, pgSchema, globalEnumTypes));
|
|
85
|
+
}
|
|
86
|
+
// Emit deferred FKs for new tables (after all tables and modifications are done)
|
|
87
|
+
for (const { tableName, fk } of deferredFKs) {
|
|
88
|
+
statements.push(addForeignKey(tableName, fk, dialect, pgSchema));
|
|
89
|
+
}
|
|
90
|
+
// Removed tables — drop FKs first to handle dependencies, then drop tables
|
|
91
|
+
if (diff.removedTables.length > 0) {
|
|
92
|
+
for (const table of diff.removedTables) {
|
|
93
|
+
for (const fk of table.foreignKeys) {
|
|
94
|
+
if (dialect === 'mysql') {
|
|
95
|
+
statements.push(`ALTER TABLE ${qTable(dialect, table.name, pgSchema)} DROP FOREIGN KEY ${q(dialect, fk.name)}`);
|
|
96
|
+
}
|
|
97
|
+
else {
|
|
98
|
+
statements.push(`ALTER TABLE ${qTable(dialect, table.name, pgSchema)} DROP CONSTRAINT ${q(dialect, fk.name)}`);
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
for (const table of diff.removedTables) {
|
|
103
|
+
statements.push(`DROP TABLE ${qTable(dialect, table.name, pgSchema)}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
// Drop orphaned enum types (from type-name changes, removed columns, or enum→non-enum changes)
|
|
107
|
+
if (dialect === 'postgres') {
|
|
108
|
+
const seenDrops = new Set(deferredEnumDrops.map(__assignType(s => s, ['s', '', 'P"2!"/"']))); // already-scheduled drops
|
|
109
|
+
for (const tableDiff of diff.modifiedTables) {
|
|
110
|
+
for (const typeName of tableDiff.removedEnumTypes) {
|
|
111
|
+
const dropStmt = `DROP TYPE IF EXISTS ${qType(typeName, pgSchema)}`;
|
|
112
|
+
if (!seenDrops.has(dropStmt)) {
|
|
113
|
+
seenDrops.add(dropStmt);
|
|
114
|
+
deferredEnumDrops.push(dropStmt);
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
// Also drop enum types from removed tables
|
|
119
|
+
for (const table of diff.removedTables) {
|
|
120
|
+
for (const col of table.columns) {
|
|
121
|
+
if (col.type === 'enum' && col.enumTypeName) {
|
|
122
|
+
const dropStmt = `DROP TYPE IF EXISTS ${qType(col.enumTypeName, pgSchema)}`;
|
|
123
|
+
if (!seenDrops.has(dropStmt)) {
|
|
124
|
+
seenDrops.add(dropStmt);
|
|
125
|
+
deferredEnumDrops.push(dropStmt);
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
// Filter out enum types that are still in use by any entity table
|
|
131
|
+
const enumTypesInUse = diff.entityEnumTypes ?? (Set.Ω = [['&']], new Set());
|
|
132
|
+
// Filter: only drop types not still in use
|
|
133
|
+
const filteredDrops = deferredEnumDrops.filter(__assignType(stmt => {
|
|
134
|
+
for (const typeName of enumTypesInUse) {
|
|
135
|
+
const dropStmt = `DROP TYPE IF EXISTS ${qType(typeName, pgSchema)}`;
|
|
136
|
+
if (stmt === dropStmt)
|
|
137
|
+
return false;
|
|
138
|
+
}
|
|
139
|
+
return true;
|
|
140
|
+
}, ['stmt', '', 'P"2!"/"']));
|
|
141
|
+
statements.push(...filteredDrops);
|
|
142
|
+
}
|
|
143
|
+
return statements;
|
|
144
|
+
}
|
|
145
|
+
generateDDL.__type = [() => __ΩSchemaDiff, 'diff', 'generateDDL', 'Pn!2"&F/#'];
|
|
146
|
+
function generateTableDDL(diff, dialect, pgSchema, globalEnumTypes) {
|
|
147
|
+
if (dialect === 'mysql') {
|
|
148
|
+
return generateMySQLTableDDL(diff);
|
|
149
|
+
}
|
|
150
|
+
return generatePostgresTableDDL(diff, pgSchema, globalEnumTypes);
|
|
151
|
+
}
|
|
152
|
+
generateTableDDL.__type = [() => __ΩTableDiff, 'diff', () => __ΩDialect, 'dialect', 'pgSchema', 'globalEnumTypes', 'generateTableDDL', 'Pn!2"n#2$&2%8&D2&8&F/\''];
|
|
153
|
+
// --- MySQL DDL ---
|
|
154
|
+
function generateMySQLTableDDL(diff) {
|
|
155
|
+
const stmts = [];
|
|
156
|
+
const t = q('mysql', diff.tableName);
|
|
157
|
+
// 1. Drop FKs
|
|
158
|
+
for (const fk of diff.removedForeignKeys) {
|
|
159
|
+
stmts.push(`ALTER TABLE ${t} DROP FOREIGN KEY ${q('mysql', fk.name)}`);
|
|
160
|
+
}
|
|
161
|
+
// 2. Drop indexes
|
|
162
|
+
for (const idx of diff.removedIndexes) {
|
|
163
|
+
stmts.push(`ALTER TABLE ${t} DROP INDEX ${q('mysql', idx.name)}`);
|
|
164
|
+
}
|
|
165
|
+
// 3. Drop PK if changed (only if there was an existing PK to drop)
|
|
166
|
+
// Track columns that had AUTO_INCREMENT temporarily stripped so we can restore it after ADD PK
|
|
167
|
+
const autoIncStrippedForPKDrop = [];
|
|
168
|
+
if (diff.primaryKeyChanged && diff.oldPrimaryKey && diff.oldPrimaryKey.length > 0) {
|
|
169
|
+
// MySQL requires AUTO_INCREMENT columns to be part of a KEY. Before dropping the PK,
|
|
170
|
+
// we must strip AUTO_INCREMENT from ALL old PK columns that currently have it.
|
|
171
|
+
// This covers: columns being modified, columns being removed, and columns whose PK
|
|
172
|
+
// membership changes even though autoIncrement itself doesn't change.
|
|
173
|
+
//
|
|
174
|
+
// oldPrimaryKey contains the raw DB column names (before renames).
|
|
175
|
+
// We need to MODIFY using the current DB names since renames haven't happened yet.
|
|
176
|
+
const oldPKSet = new Set(diff.oldPrimaryKey);
|
|
177
|
+
const alreadyHandled = (Set.Ω = [['&']], new Set());
|
|
178
|
+
// Map old DB name → new entity name for renamed columns
|
|
179
|
+
const renameOldToNew = new Map(diff.renamedColumns.map(__assignType(r => [r.from, r.to], ['r', '', 'P"2!"/"'])));
|
|
180
|
+
// Check modified columns (mod.name is the entity/new name; mod.oldColumn has the DB name)
|
|
181
|
+
for (const mod of diff.modifiedColumns) {
|
|
182
|
+
const dbName = mod.oldColumn.name;
|
|
183
|
+
if (oldPKSet.has(dbName) && mod.oldColumn.autoIncrement) {
|
|
184
|
+
const tempCol = { ...mod.oldColumn, autoIncrement: false };
|
|
185
|
+
stmts.push(`ALTER TABLE ${t} MODIFY COLUMN ${mysqlColumnDef(tempCol)}`);
|
|
186
|
+
alreadyHandled.add(dbName);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Check removed columns (already using DB names)
|
|
190
|
+
for (const col of diff.removedColumns) {
|
|
191
|
+
if (oldPKSet.has(col.name) && col.autoIncrement) {
|
|
192
|
+
const tempCol = { ...col, autoIncrement: false };
|
|
193
|
+
stmts.push(`ALTER TABLE ${t} MODIFY COLUMN ${mysqlColumnDef(tempCol)}`);
|
|
194
|
+
alreadyHandled.add(col.name);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
// Check remaining old PK columns (e.g., PK shape change where column stays auto-increment)
|
|
198
|
+
if (diff.entityColumns) {
|
|
199
|
+
for (const dbColName of oldPKSet) {
|
|
200
|
+
if (alreadyHandled.has(dbColName))
|
|
201
|
+
continue;
|
|
202
|
+
// The entity column may have been renamed; find it by the new name if applicable
|
|
203
|
+
const entityName = renameOldToNew.get(dbColName) ?? dbColName;
|
|
204
|
+
const entityCol = diff.entityColumns.find(__assignType(c => c.name === entityName, ['c', '', 'P"2!"/"']));
|
|
205
|
+
if (entityCol && entityCol.autoIncrement) {
|
|
206
|
+
// Emit MODIFY using the current DB name (rename hasn't happened yet)
|
|
207
|
+
const tempCol = { ...entityCol, name: dbColName, autoIncrement: false };
|
|
208
|
+
stmts.push(`ALTER TABLE ${t} MODIFY COLUMN ${mysqlColumnDef(tempCol)}`);
|
|
209
|
+
autoIncStrippedForPKDrop.push(entityCol);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
stmts.push(`ALTER TABLE ${t} DROP PRIMARY KEY`);
|
|
214
|
+
}
|
|
215
|
+
// 4. Column drops
|
|
216
|
+
for (const col of diff.removedColumns) {
|
|
217
|
+
stmts.push(`ALTER TABLE ${t} DROP COLUMN ${q('mysql', col.name)}`);
|
|
218
|
+
}
|
|
219
|
+
// 5. Column renames (CHANGE COLUMN includes full definition + AFTER)
|
|
220
|
+
// Exclude added columns from AFTER clause — they don't exist yet at this step
|
|
221
|
+
// If PK is being changed and the renamed column has AUTO_INCREMENT, strip it now and
|
|
222
|
+
// defer the full definition to after ADD PK (MySQL requires AI columns to be keyed).
|
|
223
|
+
const addedNames = new Set(diff.addedColumns.map(__assignType(c => c.name, ['c', '', 'P"2!"/"'])));
|
|
224
|
+
const deferredAutoIncrementRenames = [];
|
|
225
|
+
for (const rename of diff.renamedColumns) {
|
|
226
|
+
const after = findAfterClause(rename.column, diff, 'mysql', addedNames);
|
|
227
|
+
if (rename.column.autoIncrement && diff.primaryKeyChanged) {
|
|
228
|
+
const tempCol = { ...rename.column, autoIncrement: false };
|
|
229
|
+
stmts.push(`ALTER TABLE ${t} CHANGE COLUMN ${q('mysql', rename.from)} ${mysqlColumnDef(tempCol)}${after}`);
|
|
230
|
+
deferredAutoIncrementRenames.push({ from: rename.column.name, column: rename.column, after });
|
|
231
|
+
}
|
|
232
|
+
else {
|
|
233
|
+
stmts.push(`ALTER TABLE ${t} CHANGE COLUMN ${q('mysql', rename.from)} ${mysqlColumnDef(rename.column)}${after}`);
|
|
234
|
+
}
|
|
235
|
+
}
|
|
236
|
+
// 6. Column modifications (skip renamed columns — CHANGE COLUMN in step 5 handles them)
|
|
237
|
+
// Defer modifications where the new column has AUTO_INCREMENT AND the PK is being changed,
|
|
238
|
+
// since MySQL requires AUTO_INCREMENT columns to already be part of a KEY. This covers both:
|
|
239
|
+
// (a) autoIncrementChanged (adding AI) and (b) AI unchanged but PK being dropped and re-added.
|
|
240
|
+
const renamedNames = new Set(diff.renamedColumns.map(__assignType(r => r.to, ['r', '', 'P"2!"/"'])));
|
|
241
|
+
const deferredAutoIncrementMods = [];
|
|
242
|
+
for (const mod of diff.modifiedColumns) {
|
|
243
|
+
if (renamedNames.has(mod.name))
|
|
244
|
+
continue;
|
|
245
|
+
if (mod.newColumn.autoIncrement && (mod.autoIncrementChanged || diff.primaryKeyChanged)) {
|
|
246
|
+
deferredAutoIncrementMods.push(mod);
|
|
247
|
+
continue;
|
|
248
|
+
}
|
|
249
|
+
const after = findAfterClauseForExisting(mod.name, diff, 'mysql');
|
|
250
|
+
stmts.push(`ALTER TABLE ${t} MODIFY COLUMN ${mysqlColumnDef(mod.newColumn)}${after}`);
|
|
251
|
+
}
|
|
252
|
+
// 7. Column adds
|
|
253
|
+
// For added columns with AUTO_INCREMENT, add without AUTO_INCREMENT first,
|
|
254
|
+
// then apply AUTO_INCREMENT after ADD PRIMARY KEY (MySQL requires the column to be keyed first)
|
|
255
|
+
const deferredAutoIncrementAdds = [];
|
|
256
|
+
for (const col of diff.addedColumns) {
|
|
257
|
+
const after = findAfterClause(col, diff, 'mysql');
|
|
258
|
+
if (col.autoIncrement) {
|
|
259
|
+
const tempCol = { ...col, autoIncrement: false };
|
|
260
|
+
stmts.push(`ALTER TABLE ${t} ADD COLUMN ${mysqlColumnDef(tempCol)}${after}`);
|
|
261
|
+
deferredAutoIncrementAdds.push(col);
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
stmts.push(`ALTER TABLE ${t} ADD COLUMN ${mysqlColumnDef(col)}${after}`);
|
|
265
|
+
}
|
|
266
|
+
}
|
|
267
|
+
// 8. Column reorders (only those not already handled by rename/modify/add)
|
|
268
|
+
const handled = new Set([...diff.renamedColumns.map(__assignType(r => r.to, ['r', '', 'P"2!"/"'])), ...diff.modifiedColumns.map(__assignType(m => m.name, ['m', '', 'P"2!"/"'])), ...diff.addedColumns.map(__assignType(c => c.name, ['c', '', 'P"2!"/"']))]);
|
|
269
|
+
for (const reorder of diff.reorderedColumns) {
|
|
270
|
+
if (handled.has(reorder.name))
|
|
271
|
+
continue;
|
|
272
|
+
const col = diff.entityColumns?.find(__assignType(c => c.name === reorder.name, ['c', '', 'P"2!"/"']));
|
|
273
|
+
if (!col)
|
|
274
|
+
continue;
|
|
275
|
+
const after = reorder.after === null ? ' FIRST' : ` AFTER ${q('mysql', reorder.after)}`;
|
|
276
|
+
stmts.push(`ALTER TABLE ${t} MODIFY COLUMN ${mysqlColumnDef(col)}${after}`);
|
|
277
|
+
}
|
|
278
|
+
// 9. Add PK
|
|
279
|
+
if (diff.primaryKeyChanged && diff.newPrimaryKey && diff.newPrimaryKey.length > 0) {
|
|
280
|
+
const pkCols = diff.newPrimaryKey.map(__assignType(c => q('mysql', c), ['c', '', 'P"2!"/"'])).join(', ');
|
|
281
|
+
stmts.push(`ALTER TABLE ${t} ADD PRIMARY KEY (${pkCols})`);
|
|
282
|
+
}
|
|
283
|
+
// 9b. Apply deferred AUTO_INCREMENT additions (requires column to be part of a KEY)
|
|
284
|
+
for (const mod of deferredAutoIncrementMods) {
|
|
285
|
+
const after = findAfterClauseForExisting(mod.name, diff, 'mysql');
|
|
286
|
+
stmts.push(`ALTER TABLE ${t} MODIFY COLUMN ${mysqlColumnDef(mod.newColumn)}${after}`);
|
|
287
|
+
}
|
|
288
|
+
for (const col of deferredAutoIncrementAdds) {
|
|
289
|
+
stmts.push(`ALTER TABLE ${t} MODIFY COLUMN ${mysqlColumnDef(col)}`);
|
|
290
|
+
}
|
|
291
|
+
// Re-apply AUTO_INCREMENT for renamed columns that had it stripped before PK drop
|
|
292
|
+
for (const deferred of deferredAutoIncrementRenames) {
|
|
293
|
+
stmts.push(`ALTER TABLE ${t} MODIFY COLUMN ${mysqlColumnDef(deferred.column)}`);
|
|
294
|
+
}
|
|
295
|
+
// Restore AUTO_INCREMENT for columns that were temporarily stripped for PK drop
|
|
296
|
+
for (const col of autoIncStrippedForPKDrop) {
|
|
297
|
+
stmts.push(`ALTER TABLE ${t} MODIFY COLUMN ${mysqlColumnDef(col)}`);
|
|
298
|
+
}
|
|
299
|
+
// 10. Add indexes
|
|
300
|
+
for (const idx of diff.addedIndexes) {
|
|
301
|
+
stmts.push(createIndex(diff.tableName, idx, 'mysql'));
|
|
302
|
+
}
|
|
303
|
+
// 11. Add FKs
|
|
304
|
+
for (const fk of diff.addedForeignKeys) {
|
|
305
|
+
stmts.push(addForeignKey(diff.tableName, fk, 'mysql'));
|
|
306
|
+
}
|
|
307
|
+
return stmts;
|
|
308
|
+
}
|
|
309
|
+
generateMySQLTableDDL.__type = [() => __ΩTableDiff, 'diff', 'generateMySQLTableDDL', 'Pn!2"&F/#'];
|
|
310
|
+
// --- PostgreSQL DDL ---
|
|
311
|
+
function generatePostgresTableDDL(diff, pgSchema, globalEnumTypes) {
|
|
312
|
+
const stmts = [];
|
|
313
|
+
const t = qTable('postgres', diff.tableName, pgSchema);
|
|
314
|
+
// 1. Create new enum types (deduplicated globally)
|
|
315
|
+
for (const enumType of diff.addedEnumTypes) {
|
|
316
|
+
if (globalEnumTypes && globalEnumTypes.has(enumType.typeName))
|
|
317
|
+
continue;
|
|
318
|
+
globalEnumTypes?.add(enumType.typeName);
|
|
319
|
+
stmts.push(createEnumType(enumType.typeName, enumType.values, pgSchema));
|
|
320
|
+
}
|
|
321
|
+
// 2. Enum modifications are handled globally in generateDDL() to deduplicate across tables
|
|
322
|
+
// 3. Drop FKs
|
|
323
|
+
for (const fk of diff.removedForeignKeys) {
|
|
324
|
+
stmts.push(`ALTER TABLE ${t} DROP CONSTRAINT ${q('postgres', fk.name)}`);
|
|
325
|
+
}
|
|
326
|
+
// 4. Drop indexes (schema-qualified for non-public schemas)
|
|
327
|
+
for (const idx of diff.removedIndexes) {
|
|
328
|
+
stmts.push(`DROP INDEX ${qTable('postgres', idx.name, pgSchema)}`);
|
|
329
|
+
}
|
|
330
|
+
// 5. Drop PK if changed (only if there was an existing PK to drop)
|
|
331
|
+
if (diff.primaryKeyChanged && diff.oldPrimaryKey && diff.oldPrimaryKey.length > 0) {
|
|
332
|
+
const constraintName = diff.oldPrimaryKeyConstraintName ?? `${diff.tableName}_pkey`;
|
|
333
|
+
stmts.push(`ALTER TABLE ${t} DROP CONSTRAINT ${q('postgres', constraintName)}`);
|
|
334
|
+
}
|
|
335
|
+
// 6. Column drops
|
|
336
|
+
for (const col of diff.removedColumns) {
|
|
337
|
+
stmts.push(`ALTER TABLE ${t} DROP COLUMN ${q('postgres', col.name)}`);
|
|
338
|
+
}
|
|
339
|
+
// 7. Column renames
|
|
340
|
+
for (const rename of diff.renamedColumns) {
|
|
341
|
+
stmts.push(`ALTER TABLE ${t} RENAME COLUMN ${q('postgres', rename.from)} TO ${q('postgres', rename.to)}`);
|
|
342
|
+
}
|
|
343
|
+
// 8. Column type changes
|
|
344
|
+
// For enum type changes, drop default before TYPE change and restore after,
|
|
345
|
+
// since the default may be typed as the old enum and block the cast.
|
|
346
|
+
const enumDefaultsToRestore = [];
|
|
347
|
+
for (const mod of diff.modifiedColumns) {
|
|
348
|
+
if (mod.typeChanged) {
|
|
349
|
+
const typeDef = pgTypeDef(mod.newColumn, pgSchema);
|
|
350
|
+
if (mod.newColumn.type === 'enum' && mod.newColumn.enumTypeName) {
|
|
351
|
+
// Drop existing default if the old column had one (it may reference the old enum type)
|
|
352
|
+
if (mod.oldColumn.defaultExpression || mod.oldColumn.defaultValue !== undefined) {
|
|
353
|
+
stmts.push(`ALTER TABLE ${t} ALTER COLUMN ${q('postgres', mod.name)} DROP DEFAULT`);
|
|
354
|
+
// Queue restore: use new column's default if available, else old column's
|
|
355
|
+
const restoreExpr = mod.newColumn.defaultExpression ?? mod.oldColumn.defaultExpression;
|
|
356
|
+
const restoreVal = mod.newColumn.defaultValue !== undefined ? mod.newColumn.defaultValue : mod.oldColumn.defaultValue;
|
|
357
|
+
if (restoreExpr) {
|
|
358
|
+
enumDefaultsToRestore.push({ colName: mod.name, defaultExpr: restoreExpr });
|
|
359
|
+
}
|
|
360
|
+
else if (restoreVal !== undefined) {
|
|
361
|
+
enumDefaultsToRestore.push({
|
|
362
|
+
colName: mod.name,
|
|
363
|
+
defaultExpr: `'${escapeStr(String(restoreVal))}'`
|
|
364
|
+
});
|
|
365
|
+
}
|
|
366
|
+
}
|
|
367
|
+
// Enum type changes need USING cast
|
|
368
|
+
stmts.push(`ALTER TABLE ${t} ALTER COLUMN ${q('postgres', mod.name)} TYPE ${typeDef} USING ${q('postgres', mod.name)}::text::${typeDef}`);
|
|
369
|
+
}
|
|
370
|
+
else {
|
|
371
|
+
stmts.push(`ALTER TABLE ${t} ALTER COLUMN ${q('postgres', mod.name)} TYPE ${typeDef}`);
|
|
372
|
+
}
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
// Restore defaults that were dropped for enum type changes
|
|
376
|
+
for (const restore of enumDefaultsToRestore) {
|
|
377
|
+
stmts.push(`ALTER TABLE ${t} ALTER COLUMN ${q('postgres', restore.colName)} SET DEFAULT ${restore.defaultExpr}`);
|
|
378
|
+
}
|
|
379
|
+
// 9. Column nullable changes
|
|
380
|
+
for (const mod of diff.modifiedColumns) {
|
|
381
|
+
if (mod.nullableChanged) {
|
|
382
|
+
if (mod.newColumn.nullable) {
|
|
383
|
+
stmts.push(`ALTER TABLE ${t} ALTER COLUMN ${q('postgres', mod.name)} DROP NOT NULL`);
|
|
384
|
+
}
|
|
385
|
+
else {
|
|
386
|
+
stmts.push(`ALTER TABLE ${t} ALTER COLUMN ${q('postgres', mod.name)} SET NOT NULL`);
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
}
|
|
390
|
+
// 10. Column default changes
|
|
391
|
+
for (const mod of diff.modifiedColumns) {
|
|
392
|
+
if (mod.defaultChanged) {
|
|
393
|
+
if (mod.newColumn.defaultExpression) {
|
|
394
|
+
stmts.push(`ALTER TABLE ${t} ALTER COLUMN ${q('postgres', mod.name)} SET DEFAULT ${mod.newColumn.defaultExpression}`);
|
|
395
|
+
}
|
|
396
|
+
else if (mod.newColumn.defaultValue !== undefined) {
|
|
397
|
+
stmts.push(`ALTER TABLE ${t} ALTER COLUMN ${q('postgres', mod.name)} SET DEFAULT '${escapeStr(String(mod.newColumn.defaultValue))}'`);
|
|
398
|
+
}
|
|
399
|
+
else {
|
|
400
|
+
stmts.push(`ALTER TABLE ${t} ALTER COLUMN ${q('postgres', mod.name)} DROP DEFAULT`);
|
|
401
|
+
}
|
|
402
|
+
}
|
|
403
|
+
}
|
|
404
|
+
// 11. Auto-increment changes (sequence management)
|
|
405
|
+
for (const mod of diff.modifiedColumns) {
|
|
406
|
+
if (mod.autoIncrementChanged) {
|
|
407
|
+
const seqName = `${diff.tableName}_${mod.name}_seq`;
|
|
408
|
+
if (mod.newColumn.autoIncrement) {
|
|
409
|
+
// Adding auto-increment: create sequence, set default, sync to existing data
|
|
410
|
+
const seqRef = qTable('postgres', seqName, pgSchema);
|
|
411
|
+
stmts.push(`CREATE SEQUENCE ${seqRef} OWNED BY ${t}.${q('postgres', mod.name)}`);
|
|
412
|
+
const nextvalArg = escapeStr(pgRegclass(seqName, pgSchema));
|
|
413
|
+
stmts.push(`ALTER TABLE ${t} ALTER COLUMN ${q('postgres', mod.name)} SET DEFAULT nextval('${nextvalArg}')`);
|
|
414
|
+
stmts.push(`SELECT setval('${nextvalArg}', COALESCE((SELECT MAX(${q('postgres', mod.name)}) FROM ${t}), 1), ` +
|
|
415
|
+
`(SELECT MAX(${q('postgres', mod.name)}) FROM ${t}) IS NOT NULL)`);
|
|
416
|
+
}
|
|
417
|
+
else {
|
|
418
|
+
// Removing auto-increment
|
|
419
|
+
if (mod.oldColumn.isIdentity) {
|
|
420
|
+
// Identity columns use DROP IDENTITY
|
|
421
|
+
stmts.push(`ALTER TABLE ${t} ALTER COLUMN ${q('postgres', mod.name)} DROP IDENTITY`);
|
|
422
|
+
}
|
|
423
|
+
else {
|
|
424
|
+
// Sequence-backed columns: drop default and sequence
|
|
425
|
+
stmts.push(`ALTER TABLE ${t} ALTER COLUMN ${q('postgres', mod.name)} DROP DEFAULT`);
|
|
426
|
+
// Use actual sequence name from DB if available, otherwise fall back to conventional name
|
|
427
|
+
const actualSeqName = mod.oldColumn.sequenceName;
|
|
428
|
+
if (actualSeqName) {
|
|
429
|
+
stmts.push(`DROP SEQUENCE IF EXISTS ${actualSeqName}`);
|
|
430
|
+
}
|
|
431
|
+
else {
|
|
432
|
+
stmts.push(`DROP SEQUENCE IF EXISTS ${qTable('postgres', seqName, pgSchema)}`);
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
}
|
|
436
|
+
}
|
|
437
|
+
}
|
|
438
|
+
// 12. Column adds
|
|
439
|
+
for (const col of diff.addedColumns) {
|
|
440
|
+
stmts.push(`ALTER TABLE ${t} ADD COLUMN ${pgColumnDef(col, pgSchema)}`);
|
|
441
|
+
}
|
|
442
|
+
// 13. Add PK
|
|
443
|
+
if (diff.primaryKeyChanged && diff.newPrimaryKey && diff.newPrimaryKey.length > 0) {
|
|
444
|
+
const pkCols = diff.newPrimaryKey.map(__assignType(c => q('postgres', c), ['c', '', 'P"2!"/"'])).join(', ');
|
|
445
|
+
stmts.push(`ALTER TABLE ${t} ADD PRIMARY KEY (${pkCols})`);
|
|
446
|
+
}
|
|
447
|
+
// 14. Add indexes
|
|
448
|
+
for (const idx of diff.addedIndexes) {
|
|
449
|
+
stmts.push(createIndex(diff.tableName, idx, 'postgres', pgSchema));
|
|
450
|
+
}
|
|
451
|
+
// 15. Add FKs
|
|
452
|
+
for (const fk of diff.addedForeignKeys) {
|
|
453
|
+
stmts.push(addForeignKey(diff.tableName, fk, 'postgres', pgSchema));
|
|
454
|
+
}
|
|
455
|
+
return stmts;
|
|
456
|
+
}
|
|
457
|
+
generatePostgresTableDDL.__type = [() => __ΩTableDiff, 'diff', 'pgSchema', 'globalEnumTypes', 'generatePostgresTableDDL', 'Pn!2"&2#8&D2$8&F/%'];
|
|
458
|
+
// --- Shared helpers ---
|
|
459
|
+
function createTable(table, dialect, pgSchema) {
|
|
460
|
+
const lines = [];
|
|
461
|
+
const pkCols = table.columns.filter(__assignType(c => c.isPrimaryKey, ['c', '', 'P"2!"/"'])).map(__assignType(c => c.name, ['c', '', 'P"2!"/"']));
|
|
462
|
+
for (const col of table.columns) {
|
|
463
|
+
if (dialect === 'mysql') {
|
|
464
|
+
lines.push(` ${mysqlColumnDef(col)}`);
|
|
465
|
+
}
|
|
466
|
+
else {
|
|
467
|
+
lines.push(` ${pgColumnDef(col, pgSchema)}`);
|
|
468
|
+
}
|
|
469
|
+
}
|
|
470
|
+
if (pkCols.length > 0) {
|
|
471
|
+
const quoted = pkCols.map(__assignType(c => q(dialect, c), ['c', '', 'P"2!"/"'])).join(', ');
|
|
472
|
+
lines.push(` PRIMARY KEY (${quoted})`);
|
|
473
|
+
}
|
|
474
|
+
return `CREATE TABLE ${qTable(dialect, table.name, pgSchema)} (\n${lines.join(',\n')}\n)`;
|
|
475
|
+
}
|
|
476
|
+
createTable.__type = [() => __ΩTableSchema, 'table', () => __ΩDialect, 'dialect', 'pgSchema', 'createTable', 'Pn!2"n#2$&2%8&/&'];
|
|
477
|
+
function createIndex(tableName, idx, dialect, pgSchema) {
|
|
478
|
+
const unique = idx.unique ? 'UNIQUE ' : '';
|
|
479
|
+
const spatial = idx.spatial && dialect === 'mysql' ? 'SPATIAL ' : '';
|
|
480
|
+
const cols = idx.columns.map(__assignType(c => q(dialect, c), ['c', '', 'P"2!"/"'])).join(', ');
|
|
481
|
+
return `CREATE ${spatial}${unique}INDEX ${q(dialect, idx.name)} ON ${qTable(dialect, tableName, pgSchema)} (${cols})`;
|
|
482
|
+
}
|
|
483
|
+
createIndex.__type = ['tableName', () => __ΩIndexSchema, 'idx', () => __ΩDialect, 'dialect', 'pgSchema', 'createIndex', 'P&2!n"2#n$2%&2&8&/\''];
|
|
484
|
+
function addForeignKey(tableName, fk, dialect, pgSchema) {
|
|
485
|
+
const cols = fk.columns.map(__assignType(c => q(dialect, c), ['c', '', 'P"2!"/"'])).join(', ');
|
|
486
|
+
const refCols = fk.referencedColumns.map(__assignType(c => q(dialect, c), ['c', '', 'P"2!"/"'])).join(', ');
|
|
487
|
+
const onDelete = validateFkAction(fk.onDelete, dialect);
|
|
488
|
+
const onUpdate = validateFkAction(fk.onUpdate, dialect);
|
|
489
|
+
return (`ALTER TABLE ${qTable(dialect, tableName, pgSchema)} ADD CONSTRAINT ${q(dialect, fk.name)} ` +
|
|
490
|
+
`FOREIGN KEY (${cols}) REFERENCES ${qTable(dialect, fk.referencedTable, pgSchema)} (${refCols}) ` +
|
|
491
|
+
`ON DELETE ${onDelete} ON UPDATE ${onUpdate}`);
|
|
492
|
+
}
|
|
493
|
+
addForeignKey.__type = ['tableName', () => __ΩForeignKeySchema, 'fk', () => __ΩDialect, 'dialect', 'pgSchema', 'addForeignKey', 'P&2!n"2#n$2%&2&8&/\''];
|
|
494
|
+
function validateFkAction(action, dialect) {
|
|
495
|
+
const upper = action.toUpperCase();
|
|
496
|
+
if (!VALID_FK_ACTIONS.has(upper)) {
|
|
497
|
+
throw new Error(`Invalid foreign key action: '${action}'`);
|
|
498
|
+
}
|
|
499
|
+
if (upper === 'SET DEFAULT' && dialect === 'mysql') {
|
|
500
|
+
throw new Error(`Foreign key action 'SET DEFAULT' is not supported by MySQL/InnoDB`);
|
|
501
|
+
}
|
|
502
|
+
return upper;
|
|
503
|
+
}
|
|
504
|
+
validateFkAction.__type = ['action', () => __ΩDialect, 'dialect', 'validateFkAction', 'P&2!n"2#&/$'];
|
|
505
|
+
function createEnumType(typeName, values, pgSchema) {
|
|
506
|
+
const qualifiedName = qType(typeName, pgSchema);
|
|
507
|
+
const vals = values.map(__assignType(v => `'${escapeStr(v)}'`, ['v', '', 'P"2!"/"'])).join(', ');
|
|
508
|
+
const schemaFilter = pgSchema && pgSchema !== 'public' ? ` AND typnamespace = (SELECT oid FROM pg_namespace WHERE nspname = '${escapeStr(pgSchema)}')` : '';
|
|
509
|
+
return `DO $$ BEGIN IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = '${escapeStr(typeName)}'${schemaFilter}) THEN CREATE TYPE ${qualifiedName} AS ENUM (${vals}); END IF; END $$`;
|
|
510
|
+
}
|
|
511
|
+
createEnumType.__type = ['typeName', 'values', 'pgSchema', 'createEnumType', 'P&2!&F2"&2#8&/$'];
|
|
512
|
+
// --- MySQL column definition ---
|
|
513
|
+
function mysqlColumnDef(col) {
|
|
514
|
+
let def = `${q('mysql', col.name)} ${mysqlTypeDef(col)}`;
|
|
515
|
+
if (col.unsigned)
|
|
516
|
+
def += ' UNSIGNED';
|
|
517
|
+
if (!col.nullable)
|
|
518
|
+
def += ' NOT NULL';
|
|
519
|
+
if (col.autoIncrement)
|
|
520
|
+
def += ' AUTO_INCREMENT';
|
|
521
|
+
if (col.defaultExpression) {
|
|
522
|
+
def += ` DEFAULT ${col.defaultExpression}`;
|
|
523
|
+
}
|
|
524
|
+
else if (col.defaultValue !== undefined) {
|
|
525
|
+
def += ` DEFAULT '${escapeStr(String(col.defaultValue), 'mysql')}'`;
|
|
526
|
+
}
|
|
527
|
+
if (col.onUpdateExpression) {
|
|
528
|
+
def += ` ON UPDATE ${col.onUpdateExpression}`;
|
|
529
|
+
}
|
|
530
|
+
return def;
|
|
531
|
+
}
|
|
532
|
+
mysqlColumnDef.__type = [() => __ΩColumnSchema, 'col', 'mysqlColumnDef', 'Pn!2"&/#'];
|
|
533
|
+
function mysqlTypeDef(col) {
|
|
534
|
+
switch (col.type) {
|
|
535
|
+
case 'varchar':
|
|
536
|
+
return `VARCHAR(${col.size || 255})`;
|
|
537
|
+
case 'char':
|
|
538
|
+
return `CHAR(${col.size || 1})`;
|
|
539
|
+
case 'tinyint':
|
|
540
|
+
return col.size === 1 ? 'TINYINT(1)' : 'TINYINT';
|
|
541
|
+
case 'smallint':
|
|
542
|
+
return 'SMALLINT';
|
|
543
|
+
case 'int':
|
|
544
|
+
return 'INT';
|
|
545
|
+
case 'bigint':
|
|
546
|
+
return 'BIGINT';
|
|
547
|
+
case 'float':
|
|
548
|
+
return 'FLOAT';
|
|
549
|
+
case 'double':
|
|
550
|
+
return 'DOUBLE';
|
|
551
|
+
case 'decimal':
|
|
552
|
+
if (col.size === undefined)
|
|
553
|
+
return 'DECIMAL';
|
|
554
|
+
return col.scale !== undefined ? `DECIMAL(${col.size},${col.scale})` : `DECIMAL(${col.size})`;
|
|
555
|
+
case 'boolean':
|
|
556
|
+
return 'TINYINT(1)';
|
|
557
|
+
case 'date':
|
|
558
|
+
return 'DATE';
|
|
559
|
+
case 'datetime':
|
|
560
|
+
return 'DATETIME';
|
|
561
|
+
case 'timestamp':
|
|
562
|
+
return 'TIMESTAMP';
|
|
563
|
+
case 'text':
|
|
564
|
+
return 'TEXT';
|
|
565
|
+
case 'blob':
|
|
566
|
+
return 'BLOB';
|
|
567
|
+
case 'json':
|
|
568
|
+
return 'JSON';
|
|
569
|
+
case 'point':
|
|
570
|
+
return 'POINT';
|
|
571
|
+
case 'enum':
|
|
572
|
+
if (col.enumValues) {
|
|
573
|
+
const vals = col.enumValues.map(__assignType(v => `'${escapeStr(v, 'mysql')}'`, ['v', '', 'P"2!"/"'])).join(',');
|
|
574
|
+
return `ENUM(${vals})`;
|
|
575
|
+
}
|
|
576
|
+
return 'VARCHAR(255)';
|
|
577
|
+
default:
|
|
578
|
+
return col.type.toUpperCase();
|
|
579
|
+
}
|
|
580
|
+
}
|
|
581
|
+
mysqlTypeDef.__type = [() => __ΩColumnSchema, 'col', 'mysqlTypeDef', 'Pn!2"&/#'];
|
|
582
|
+
// --- PostgreSQL column definition ---
|
|
583
|
+
function pgColumnDef(col, pgSchema) {
|
|
584
|
+
let typeDef;
|
|
585
|
+
if (col.autoIncrement) {
|
|
586
|
+
// Use SERIAL/BIGSERIAL for auto-increment
|
|
587
|
+
typeDef = col.type === 'bigint' ? 'BIGSERIAL' : 'SERIAL';
|
|
588
|
+
}
|
|
589
|
+
else {
|
|
590
|
+
typeDef = pgTypeDef(col, pgSchema);
|
|
591
|
+
}
|
|
592
|
+
let def = `${q('postgres', col.name)} ${typeDef}`;
|
|
593
|
+
if (!col.nullable && !col.autoIncrement)
|
|
594
|
+
def += ' NOT NULL';
|
|
595
|
+
if (!col.autoIncrement) {
|
|
596
|
+
if (col.defaultExpression) {
|
|
597
|
+
def += ` DEFAULT ${col.defaultExpression}`;
|
|
598
|
+
}
|
|
599
|
+
else if (col.defaultValue !== undefined) {
|
|
600
|
+
def += ` DEFAULT '${escapeStr(String(col.defaultValue))}'`;
|
|
601
|
+
}
|
|
602
|
+
}
|
|
603
|
+
return def;
|
|
604
|
+
}
|
|
605
|
+
pgColumnDef.__type = [() => __ΩColumnSchema, 'col', 'pgSchema', 'pgColumnDef', 'Pn!2"&2#8&/$'];
|
|
606
|
+
function pgTypeDef(col, pgSchema) {
|
|
607
|
+
switch (col.type) {
|
|
608
|
+
case 'varchar':
|
|
609
|
+
return col.size ? `VARCHAR(${col.size})` : 'VARCHAR';
|
|
610
|
+
case 'char':
|
|
611
|
+
return `CHAR(${col.size || 1})`;
|
|
612
|
+
case 'smallint':
|
|
613
|
+
return 'SMALLINT';
|
|
614
|
+
case 'int':
|
|
615
|
+
case 'integer':
|
|
616
|
+
return 'INTEGER';
|
|
617
|
+
case 'bigint':
|
|
618
|
+
return 'BIGINT';
|
|
619
|
+
case 'real':
|
|
620
|
+
case 'float':
|
|
621
|
+
return 'REAL';
|
|
622
|
+
case 'double precision':
|
|
623
|
+
case 'double':
|
|
624
|
+
return 'DOUBLE PRECISION';
|
|
625
|
+
case 'decimal':
|
|
626
|
+
case 'numeric':
|
|
627
|
+
if (col.size === undefined)
|
|
628
|
+
return 'NUMERIC';
|
|
629
|
+
return col.scale !== undefined ? `NUMERIC(${col.size},${col.scale})` : `NUMERIC(${col.size})`;
|
|
630
|
+
case 'boolean':
|
|
631
|
+
return 'BOOLEAN';
|
|
632
|
+
case 'date':
|
|
633
|
+
return 'DATE';
|
|
634
|
+
case 'timestamp':
|
|
635
|
+
return 'TIMESTAMP';
|
|
636
|
+
case 'timestamptz':
|
|
637
|
+
return 'TIMESTAMPTZ';
|
|
638
|
+
case 'text':
|
|
639
|
+
return 'TEXT';
|
|
640
|
+
case 'bytea':
|
|
641
|
+
return 'BYTEA';
|
|
642
|
+
case 'json':
|
|
643
|
+
return 'JSON';
|
|
644
|
+
case 'jsonb':
|
|
645
|
+
return 'JSONB';
|
|
646
|
+
case 'uuid':
|
|
647
|
+
return 'UUID';
|
|
648
|
+
case 'enum':
|
|
649
|
+
return col.enumTypeName ? qType(col.enumTypeName, pgSchema) : 'TEXT';
|
|
650
|
+
default:
|
|
651
|
+
return col.type.toUpperCase();
|
|
652
|
+
}
|
|
653
|
+
}
|
|
654
|
+
pgTypeDef.__type = [() => __ΩColumnSchema, 'col', 'pgSchema', 'pgTypeDef', 'Pn!2"&2#8&/$'];
|
|
655
|
+
// --- AFTER clause helpers (MySQL) ---
|
|
656
|
+
function findAfterClause(col, diff, dialect, excludeNames) {
|
|
657
|
+
if (dialect !== 'mysql')
|
|
658
|
+
return '';
|
|
659
|
+
// Look up the preceding column from the entity column list, skipping any excluded names
|
|
660
|
+
// (e.g., not-yet-added columns when computing AFTER for a rename step)
|
|
661
|
+
if (diff.entityColumns) {
|
|
662
|
+
const idx = diff.entityColumns.findIndex(__assignType(c => c.name === col.name, ['c', '', 'P"2!"/"']));
|
|
663
|
+
if (idx >= 0) {
|
|
664
|
+
// Walk backwards to find the nearest preceding column that is not excluded
|
|
665
|
+
for (let i = idx - 1; i >= 0; i--) {
|
|
666
|
+
const prev = diff.entityColumns[i];
|
|
667
|
+
if (!excludeNames || !excludeNames.has(prev.name)) {
|
|
668
|
+
return ` AFTER ${q('mysql', prev.name)}`;
|
|
669
|
+
}
|
|
670
|
+
}
|
|
671
|
+
return ' FIRST';
|
|
672
|
+
}
|
|
673
|
+
}
|
|
674
|
+
// Fallback for ordinalPosition
|
|
675
|
+
if (col.ordinalPosition === 1)
|
|
676
|
+
return ' FIRST';
|
|
677
|
+
return '';
|
|
678
|
+
}
|
|
679
|
+
findAfterClause.__type = [() => __ΩColumnSchema, 'col', () => __ΩTableDiff, 'diff', () => __ΩDialect, 'dialect', 'excludeNames', 'findAfterClause', 'Pn!2"n#2$n%2&&D2\'8&/('];
|
|
680
|
+
function findAfterClauseForExisting(colName, diff, dialect) {
|
|
681
|
+
if (dialect !== 'mysql')
|
|
682
|
+
return '';
|
|
683
|
+
// Check if this column needs reordering
|
|
684
|
+
const reorder = diff.reorderedColumns.find(__assignType(r => r.name === colName, ['r', '', 'P"2!"/"']));
|
|
685
|
+
if (reorder) {
|
|
686
|
+
return reorder.after === null ? ' FIRST' : ` AFTER ${q('mysql', reorder.after)}`;
|
|
687
|
+
}
|
|
688
|
+
return '';
|
|
689
|
+
}
|
|
690
|
+
findAfterClauseForExisting.__type = ['colName', () => __ΩTableDiff, 'diff', () => __ΩDialect, 'dialect', 'findAfterClauseForExisting', 'P&2!n"2#n$2%&/&'];
|
|
691
|
+
function q(dialect, name) {
|
|
692
|
+
return (0, dialect_1.quoteId)(dialect, name);
|
|
693
|
+
}
|
|
694
|
+
q.__type = [() => __ΩDialect, 'dialect', 'name', 'q', 'Pn!2"&2#&/$'];
|
|
695
|
+
function qTable(dialect, name, pgSchema) {
|
|
696
|
+
if (dialect === 'postgres' && pgSchema && pgSchema !== 'public') {
|
|
697
|
+
return `${(0, dialect_1.quoteId)(dialect, pgSchema)}.${(0, dialect_1.quoteId)(dialect, name)}`;
|
|
698
|
+
}
|
|
699
|
+
return (0, dialect_1.quoteId)(dialect, name);
|
|
700
|
+
}
|
|
701
|
+
qTable.__type = [() => __ΩDialect, 'dialect', 'name', 'pgSchema', 'qTable', 'Pn!2"&2#&2$8&/%'];
|
|
702
|
+
function qType(typeName, pgSchema) {
|
|
703
|
+
if (pgSchema && pgSchema !== 'public') {
|
|
704
|
+
return `${(0, dialect_1.quoteId)('postgres', pgSchema)}.${(0, dialect_1.quoteId)('postgres', typeName)}`;
|
|
705
|
+
}
|
|
706
|
+
return (0, dialect_1.quoteId)('postgres', typeName);
|
|
707
|
+
}
|
|
708
|
+
qType.__type = ['typeName', 'pgSchema', 'qType', 'P&2!&2"8&/#'];
|
|
709
|
+
function pgRegclass(name, pgSchema) {
|
|
710
|
+
// Build a regclass-compatible identifier string with proper quoting for use inside SQL string literals
|
|
711
|
+
if (pgSchema && pgSchema !== 'public') {
|
|
712
|
+
return `${(0, dialect_1.quoteId)('postgres', pgSchema)}.${(0, dialect_1.quoteId)('postgres', name)}`;
|
|
713
|
+
}
|
|
714
|
+
return (0, dialect_1.quoteId)('postgres', name);
|
|
715
|
+
}
|
|
716
|
+
pgRegclass.__type = ['name', 'pgSchema', 'pgRegclass', 'P&2!&2"8&/#'];
|
|
717
|
+
function escapeStr(s, dialect) {
|
|
718
|
+
// MySQL also treats backslashes as escape characters in string literals
|
|
719
|
+
if (dialect === 'mysql') {
|
|
720
|
+
s = s.replace(/\\/g, '\\\\');
|
|
721
|
+
}
|
|
722
|
+
return s.replace(/'/g, "''");
|
|
723
|
+
}
|
|
724
|
+
escapeStr.__type = ['s', () => __ΩDialect, 'dialect', 'escapeStr', 'P&2!n"2#8&/$'];
|
|
725
|
+
//# sourceMappingURL=ddl-generator.js.map
|