@uql/core 1.0.12 → 3.0.0
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/CHANGELOG.md +243 -0
- package/LICENSE.md +2 -2
- package/dist/CHANGELOG.md +186 -0
- package/dist/README.md +413 -0
- package/dist/browser/http/bus.d.ts +3 -0
- package/dist/browser/http/bus.js +14 -0
- package/dist/browser/http/http.d.ts +6 -0
- package/dist/browser/http/http.js +45 -0
- package/dist/browser/http/index.d.ts +2 -0
- package/dist/browser/http/index.js +3 -0
- package/dist/browser/index.d.ts +4 -0
- package/dist/browser/index.js +5 -0
- package/dist/browser/options.d.ts +4 -0
- package/dist/browser/options.js +14 -0
- package/dist/browser/querier/genericClientRepository.d.ts +17 -0
- package/dist/browser/querier/genericClientRepository.js +39 -0
- package/dist/browser/querier/httpQuerier.d.ts +20 -0
- package/dist/browser/querier/httpQuerier.js +71 -0
- package/dist/browser/querier/index.d.ts +3 -0
- package/dist/browser/querier/index.js +4 -0
- package/dist/browser/querier/querier.util.d.ts +2 -0
- package/dist/browser/querier/querier.util.js +17 -0
- package/dist/browser/type/clientQuerier.d.ts +16 -0
- package/dist/browser/type/clientQuerier.js +2 -0
- package/dist/browser/type/clientQuerierPool.d.ts +4 -0
- package/dist/browser/type/clientQuerierPool.js +2 -0
- package/dist/browser/type/clientRepository.d.ts +13 -0
- package/dist/browser/type/clientRepository.js +2 -0
- package/dist/browser/type/index.d.ts +4 -0
- package/dist/browser/type/index.js +5 -0
- package/dist/browser/type/request.d.ts +28 -0
- package/dist/browser/type/request.js +2 -0
- package/dist/browser/uql-browser.min.js +2150 -0
- package/dist/browser/uql-browser.min.js.map +1 -0
- package/dist/dialect/abstractDialect.d.ts +16 -0
- package/dist/dialect/abstractDialect.js +28 -0
- package/dist/dialect/abstractSqlDialect.d.ts +47 -0
- package/dist/dialect/abstractSqlDialect.js +650 -0
- package/dist/dialect/index.d.ts +3 -0
- package/dist/dialect/index.js +4 -0
- package/dist/dialect/queryContext.d.ts +48 -0
- package/dist/dialect/queryContext.js +65 -0
- package/{entity → dist/entity}/decorator/definition.d.ts +3 -3
- package/dist/entity/decorator/definition.js +214 -0
- package/{entity → dist/entity}/decorator/entity.d.ts +1 -1
- package/dist/entity/decorator/entity.js +7 -0
- package/{entity → dist/entity}/decorator/field.d.ts +1 -1
- package/dist/entity/decorator/field.js +8 -0
- package/{entity → dist/entity}/decorator/id.d.ts +1 -1
- package/dist/entity/decorator/id.js +8 -0
- package/dist/entity/decorator/index.d.ts +5 -0
- package/dist/entity/decorator/index.js +6 -0
- package/{entity → dist/entity}/decorator/relation.d.ts +1 -1
- package/dist/entity/decorator/relation.js +20 -0
- package/dist/entity/index.d.ts +1 -0
- package/dist/entity/index.js +2 -0
- package/dist/express/index.d.ts +2 -0
- package/dist/express/index.js +3 -0
- package/dist/express/querierMiddleware.d.ts +26 -0
- package/dist/express/querierMiddleware.js +190 -0
- package/dist/express/query.util.d.ts +2 -0
- package/dist/express/query.util.js +19 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.js +10 -0
- package/dist/maria/index.d.ts +3 -0
- package/dist/maria/index.js +4 -0
- package/dist/maria/mariaDialect.d.ts +8 -0
- package/dist/maria/mariaDialect.js +38 -0
- package/dist/maria/mariaQuerierPool.test.d.ts +5 -0
- package/dist/maria/mariaQuerierPool.test.js +19 -0
- package/dist/maria/mariadbQuerier.d.ts +17 -0
- package/dist/maria/mariadbQuerier.js +39 -0
- package/dist/maria/mariadbQuerier.test.d.ts +4 -0
- package/dist/maria/mariadbQuerier.test.js +19 -0
- package/dist/maria/mariadbQuerierPool.d.ts +10 -0
- package/dist/maria/mariadbQuerierPool.js +17 -0
- package/dist/migrate/cli.d.ts +2 -0
- package/dist/migrate/cli.js +254 -0
- package/dist/migrate/generator/index.d.ts +4 -0
- package/dist/migrate/generator/index.js +5 -0
- package/dist/migrate/generator/mongoSchemaGenerator.d.ts +12 -0
- package/dist/migrate/generator/mongoSchemaGenerator.js +100 -0
- package/dist/migrate/generator/mysqlSchemaGenerator.d.ts +14 -0
- package/dist/migrate/generator/mysqlSchemaGenerator.js +81 -0
- package/dist/migrate/generator/postgresSchemaGenerator.d.ts +18 -0
- package/dist/migrate/generator/postgresSchemaGenerator.js +111 -0
- package/dist/migrate/generator/sqliteSchemaGenerator.d.ts +14 -0
- package/dist/migrate/generator/sqliteSchemaGenerator.js +68 -0
- package/dist/migrate/index.d.ts +12 -0
- package/dist/migrate/index.js +17 -0
- package/dist/migrate/introspection/index.d.ts +4 -0
- package/dist/migrate/introspection/index.js +5 -0
- package/dist/migrate/introspection/mongoIntrospector.d.ts +8 -0
- package/dist/migrate/introspection/mongoIntrospector.js +46 -0
- package/dist/migrate/introspection/mysqlIntrospector.d.ts +25 -0
- package/dist/migrate/introspection/mysqlIntrospector.js +220 -0
- package/dist/migrate/introspection/postgresIntrospector.d.ts +21 -0
- package/dist/migrate/introspection/postgresIntrospector.js +269 -0
- package/dist/migrate/introspection/sqliteIntrospector.d.ts +23 -0
- package/dist/migrate/introspection/sqliteIntrospector.js +212 -0
- package/dist/migrate/migrator-mongo.test.d.ts +1 -0
- package/dist/migrate/migrator-mongo.test.js +54 -0
- package/dist/migrate/migrator.d.ts +133 -0
- package/dist/migrate/migrator.js +600 -0
- package/dist/migrate/migrator.test.d.ts +1 -0
- package/dist/migrate/migrator.test.js +106 -0
- package/dist/migrate/schemaGenerator.d.ts +78 -0
- package/dist/migrate/schemaGenerator.js +363 -0
- package/dist/migrate/storage/databaseStorage.d.ts +24 -0
- package/dist/migrate/storage/databaseStorage.js +77 -0
- package/dist/migrate/storage/index.d.ts +2 -0
- package/dist/migrate/storage/index.js +3 -0
- package/dist/migrate/storage/jsonStorage.d.ts +15 -0
- package/dist/migrate/storage/jsonStorage.js +51 -0
- package/dist/migrate/type.d.ts +1 -0
- package/dist/migrate/type.js +2 -0
- package/dist/mongo/index.d.ts +3 -0
- package/dist/mongo/index.js +4 -0
- package/dist/mongo/mongoDialect.d.ts +34 -0
- package/dist/mongo/mongoDialect.js +163 -0
- package/dist/mongo/mongodbQuerier.d.ts +28 -0
- package/dist/mongo/mongodbQuerier.js +204 -0
- package/dist/mongo/mongodbQuerier.test.d.ts +1 -0
- package/dist/mongo/mongodbQuerier.test.js +36 -0
- package/dist/mongo/mongodbQuerierPool.d.ts +10 -0
- package/dist/mongo/mongodbQuerierPool.js +20 -0
- package/dist/mongo/mongodbQuerierPool.test.d.ts +1 -0
- package/dist/mongo/mongodbQuerierPool.test.js +21 -0
- package/dist/mysql/index.d.ts +3 -0
- package/dist/mysql/index.js +4 -0
- package/dist/mysql/mysql2Querier.d.ts +17 -0
- package/dist/mysql/mysql2Querier.js +43 -0
- package/dist/mysql/mysql2Querier.test.d.ts +4 -0
- package/dist/mysql/mysql2Querier.test.js +16 -0
- package/dist/mysql/mysql2QuerierPool.d.ts +10 -0
- package/dist/mysql/mysql2QuerierPool.js +17 -0
- package/dist/mysql/mysql2QuerierPool.test.d.ts +5 -0
- package/dist/mysql/mysql2QuerierPool.test.js +16 -0
- package/dist/mysql/mysqlDialect.d.ts +5 -0
- package/dist/mysql/mysqlDialect.js +15 -0
- package/dist/namingStrategy/defaultNamingStrategy.d.ts +9 -0
- package/dist/namingStrategy/defaultNamingStrategy.js +15 -0
- package/dist/namingStrategy/index.d.ts +2 -0
- package/dist/namingStrategy/index.js +3 -0
- package/dist/namingStrategy/snakeCaseNamingStrategy.d.ts +8 -0
- package/dist/namingStrategy/snakeCaseNamingStrategy.js +14 -0
- package/{options.d.ts → dist/options.d.ts} +1 -1
- package/dist/options.js +14 -0
- package/dist/package.json +131 -0
- package/dist/postgres/index.d.ts +3 -0
- package/dist/postgres/index.js +4 -0
- package/dist/postgres/pgQuerier.d.ts +17 -0
- package/dist/postgres/pgQuerier.js +39 -0
- package/dist/postgres/pgQuerier.test.d.ts +4 -0
- package/dist/postgres/pgQuerier.test.js +20 -0
- package/dist/postgres/pgQuerierPool.d.ts +10 -0
- package/dist/postgres/pgQuerierPool.js +17 -0
- package/dist/postgres/pgQuerierPool.test.d.ts +5 -0
- package/dist/postgres/pgQuerierPool.test.js +23 -0
- package/dist/postgres/postgresDialect.d.ts +13 -0
- package/dist/postgres/postgresDialect.js +110 -0
- package/dist/querier/abstractQuerier-test.d.ts +45 -0
- package/dist/querier/abstractQuerier-test.js +461 -0
- package/dist/querier/abstractQuerier.d.ts +50 -0
- package/dist/querier/abstractQuerier.js +278 -0
- package/dist/querier/abstractQuerierPool-test.d.ts +9 -0
- package/dist/querier/abstractQuerierPool-test.js +18 -0
- package/dist/querier/abstractQuerierPool.d.ts +14 -0
- package/dist/querier/abstractQuerierPool.js +9 -0
- package/dist/querier/abstractSqlQuerier-test.d.ts +9 -0
- package/dist/querier/abstractSqlQuerier-test.js +16 -0
- package/dist/querier/abstractSqlQuerier.d.ts +28 -0
- package/dist/querier/abstractSqlQuerier.js +133 -0
- package/dist/querier/decorator/index.d.ts +3 -0
- package/dist/querier/decorator/index.js +4 -0
- package/dist/querier/decorator/injectQuerier.d.ts +3 -0
- package/dist/querier/decorator/injectQuerier.js +33 -0
- package/dist/querier/decorator/serialized.d.ts +6 -0
- package/dist/querier/decorator/serialized.js +14 -0
- package/{querier → dist/querier}/decorator/transactional.d.ts +1 -1
- package/dist/querier/decorator/transactional.js +48 -0
- package/dist/querier/index.d.ts +4 -0
- package/dist/querier/index.js +5 -0
- package/dist/repository/genericRepository.d.ts +20 -0
- package/dist/repository/genericRepository.js +51 -0
- package/dist/repository/index.d.ts +1 -0
- package/dist/repository/index.js +2 -0
- package/dist/sqlite/index.d.ts +3 -0
- package/dist/sqlite/index.js +4 -0
- package/dist/sqlite/sqliteDialect.d.ts +10 -0
- package/dist/sqlite/sqliteDialect.js +48 -0
- package/dist/sqlite/sqliteQuerier.d.ts +15 -0
- package/dist/sqlite/sqliteQuerier.js +33 -0
- package/dist/sqlite/sqliteQuerier.test.d.ts +5 -0
- package/dist/sqlite/sqliteQuerier.test.js +19 -0
- package/dist/sqlite/sqliteQuerierPool.d.ts +14 -0
- package/dist/sqlite/sqliteQuerierPool.js +34 -0
- package/dist/sqlite/sqliteQuerierPool.test.d.ts +5 -0
- package/dist/sqlite/sqliteQuerierPool.test.js +10 -0
- package/dist/test/entityMock.d.ts +164 -0
- package/dist/test/entityMock.js +554 -0
- package/dist/test/index.d.ts +3 -0
- package/dist/test/index.js +4 -0
- package/dist/test/it.util.d.ts +4 -0
- package/dist/test/it.util.js +55 -0
- package/dist/test/spec.util.d.ts +14 -0
- package/dist/test/spec.util.js +50 -0
- package/{type → dist/type}/entity.d.ts +97 -4
- package/dist/type/entity.js +5 -0
- package/dist/type/index.d.ts +9 -0
- package/dist/type/index.js +10 -0
- package/dist/type/migration.d.ts +213 -0
- package/dist/type/migration.js +2 -0
- package/dist/type/namingStrategy.d.ts +17 -0
- package/dist/type/namingStrategy.js +2 -0
- package/dist/type/querier.d.ts +96 -0
- package/dist/type/querier.js +11 -0
- package/{type → dist/type}/querierPool.d.ts +7 -3
- package/dist/type/querierPool.js +2 -0
- package/{type → dist/type}/query.d.ts +170 -108
- package/dist/type/query.js +9 -0
- package/{type → dist/type}/repository.d.ts +42 -35
- package/dist/type/repository.js +2 -0
- package/{type → dist/type}/universalQuerier.d.ts +50 -28
- package/dist/type/universalQuerier.js +2 -0
- package/dist/type/utility.d.ts +13 -0
- package/dist/type/utility.js +2 -0
- package/dist/util/dialect.util.d.ts +12 -0
- package/dist/util/dialect.util.js +93 -0
- package/dist/util/index.d.ts +5 -0
- package/dist/util/index.js +6 -0
- package/dist/util/object.util.d.ts +7 -0
- package/dist/util/object.util.js +19 -0
- package/dist/util/raw.d.ts +8 -0
- package/dist/util/raw.js +11 -0
- package/dist/util/sql.util.d.ts +13 -0
- package/dist/util/sql.util.js +78 -0
- package/{util → dist/util}/string.util.d.ts +1 -0
- package/dist/util/string.util.js +34 -0
- package/package.json +84 -16
- package/src/@types/index.d.ts +1 -0
- package/src/@types/jest.d.ts +6 -0
- package/src/browser/http/bus.spec.ts +22 -0
- package/src/browser/http/bus.ts +17 -0
- package/src/browser/http/http.spec.ts +70 -0
- package/src/browser/http/http.ts +55 -0
- package/src/browser/http/index.ts +2 -0
- package/src/browser/index.ts +4 -0
- package/src/browser/options.spec.ts +37 -0
- package/src/browser/options.ts +18 -0
- package/src/browser/querier/genericClientRepository.spec.ts +105 -0
- package/src/browser/querier/genericClientRepository.ts +49 -0
- package/src/browser/querier/httpQuerier.ts +82 -0
- package/src/browser/querier/index.ts +3 -0
- package/src/browser/querier/querier.util.spec.ts +35 -0
- package/src/browser/querier/querier.util.ts +18 -0
- package/src/browser/type/clientQuerier.ts +45 -0
- package/src/browser/type/clientQuerierPool.ts +5 -0
- package/src/browser/type/clientRepository.ts +22 -0
- package/src/browser/type/index.ts +4 -0
- package/src/browser/type/request.ts +25 -0
- package/src/dialect/abstractDialect.ts +28 -0
- package/src/dialect/abstractSqlDialect-spec.ts +1309 -0
- package/src/dialect/abstractSqlDialect.ts +805 -0
- package/src/dialect/index.ts +3 -0
- package/src/dialect/namingStrategy.spec.ts +52 -0
- package/src/dialect/queryContext.ts +69 -0
- package/src/entity/decorator/definition.spec.ts +736 -0
- package/src/entity/decorator/definition.ts +265 -0
- package/src/entity/decorator/entity.ts +8 -0
- package/src/entity/decorator/field.ts +9 -0
- package/src/entity/decorator/id.ts +9 -0
- package/src/entity/decorator/index.ts +5 -0
- package/src/entity/decorator/relation.spec.ts +41 -0
- package/src/entity/decorator/relation.ts +34 -0
- package/src/entity/index.ts +1 -0
- package/src/express/@types/express.d.ts +8 -0
- package/src/express/@types/index.d.ts +1 -0
- package/src/express/index.ts +2 -0
- package/src/express/querierMiddleware.ts +217 -0
- package/src/express/query.util.spec.ts +40 -0
- package/src/express/query.util.ts +21 -0
- package/src/index.ts +9 -0
- package/src/maria/index.ts +3 -0
- package/src/maria/mariaDialect.spec.ts +207 -0
- package/src/maria/mariaDialect.ts +42 -0
- package/src/maria/mariaQuerierPool.test.ts +23 -0
- package/src/maria/mariadbQuerier.test.ts +23 -0
- package/src/maria/mariadbQuerier.ts +45 -0
- package/src/maria/mariadbQuerierPool.ts +21 -0
- package/src/migrate/cli.ts +301 -0
- package/src/migrate/generator/index.ts +4 -0
- package/src/migrate/generator/mongoSchemaGenerator.spec.ts +112 -0
- package/src/migrate/generator/mongoSchemaGenerator.ts +115 -0
- package/src/migrate/generator/mysqlSchemaGenerator.spec.ts +34 -0
- package/src/migrate/generator/mysqlSchemaGenerator.ts +92 -0
- package/src/migrate/generator/postgresSchemaGenerator.spec.ts +44 -0
- package/src/migrate/generator/postgresSchemaGenerator.ts +127 -0
- package/src/migrate/generator/sqliteSchemaGenerator.spec.ts +33 -0
- package/src/migrate/generator/sqliteSchemaGenerator.ts +81 -0
- package/src/migrate/index.ts +41 -0
- package/src/migrate/introspection/index.ts +4 -0
- package/src/migrate/introspection/mongoIntrospector.spec.ts +75 -0
- package/src/migrate/introspection/mongoIntrospector.ts +47 -0
- package/src/migrate/introspection/mysqlIntrospector.spec.ts +113 -0
- package/src/migrate/introspection/mysqlIntrospector.ts +278 -0
- package/src/migrate/introspection/postgresIntrospector.spec.ts +112 -0
- package/src/migrate/introspection/postgresIntrospector.ts +329 -0
- package/src/migrate/introspection/sqliteIntrospector.spec.ts +112 -0
- package/src/migrate/introspection/sqliteIntrospector.ts +296 -0
- package/src/migrate/migrator-mongo.test.ts +54 -0
- package/src/migrate/migrator.spec.ts +255 -0
- package/src/migrate/migrator.test.ts +94 -0
- package/src/migrate/migrator.ts +719 -0
- package/src/migrate/namingStrategy.spec.ts +22 -0
- package/src/migrate/schemaGenerator-advanced.spec.ts +138 -0
- package/src/migrate/schemaGenerator.spec.ts +190 -0
- package/src/migrate/schemaGenerator.ts +478 -0
- package/src/migrate/storage/databaseStorage.spec.ts +69 -0
- package/src/migrate/storage/databaseStorage.ts +100 -0
- package/src/migrate/storage/index.ts +2 -0
- package/src/migrate/storage/jsonStorage.ts +58 -0
- package/src/migrate/type.ts +1 -0
- package/src/mongo/index.ts +3 -0
- package/src/mongo/mongoDialect.spec.ts +251 -0
- package/src/mongo/mongoDialect.ts +238 -0
- package/src/mongo/mongodbQuerier.test.ts +45 -0
- package/src/mongo/mongodbQuerier.ts +256 -0
- package/src/mongo/mongodbQuerierPool.test.ts +25 -0
- package/src/mongo/mongodbQuerierPool.ts +24 -0
- package/src/mysql/index.ts +3 -0
- package/src/mysql/mysql2Querier.test.ts +20 -0
- package/src/mysql/mysql2Querier.ts +49 -0
- package/src/mysql/mysql2QuerierPool.test.ts +20 -0
- package/src/mysql/mysql2QuerierPool.ts +21 -0
- package/src/mysql/mysqlDialect.spec.ts +20 -0
- package/src/mysql/mysqlDialect.ts +16 -0
- package/src/namingStrategy/defaultNamingStrategy.ts +18 -0
- package/src/namingStrategy/index.spec.ts +36 -0
- package/src/namingStrategy/index.ts +2 -0
- package/src/namingStrategy/snakeCaseNamingStrategy.ts +15 -0
- package/src/options.spec.ts +41 -0
- package/src/options.ts +18 -0
- package/src/postgres/index.ts +3 -0
- package/src/postgres/manual-types.d.ts +4 -0
- package/src/postgres/pgQuerier.test.ts +25 -0
- package/src/postgres/pgQuerier.ts +45 -0
- package/src/postgres/pgQuerierPool.test.ts +28 -0
- package/src/postgres/pgQuerierPool.ts +21 -0
- package/src/postgres/postgresDialect.spec.ts +428 -0
- package/src/postgres/postgresDialect.ts +144 -0
- package/src/querier/abstractQuerier-test.ts +584 -0
- package/src/querier/abstractQuerier.ts +353 -0
- package/src/querier/abstractQuerierPool-test.ts +20 -0
- package/src/querier/abstractQuerierPool.ts +18 -0
- package/src/querier/abstractSqlQuerier-spec.ts +979 -0
- package/src/querier/abstractSqlQuerier-test.ts +21 -0
- package/src/querier/abstractSqlQuerier.ts +138 -0
- package/src/querier/decorator/index.ts +3 -0
- package/src/querier/decorator/injectQuerier.spec.ts +74 -0
- package/src/querier/decorator/injectQuerier.ts +45 -0
- package/src/querier/decorator/serialized.spec.ts +98 -0
- package/src/querier/decorator/serialized.ts +13 -0
- package/src/querier/decorator/transactional.spec.ts +240 -0
- package/src/querier/decorator/transactional.ts +56 -0
- package/src/querier/index.ts +4 -0
- package/src/repository/genericRepository.spec.ts +111 -0
- package/src/repository/genericRepository.ts +74 -0
- package/src/repository/index.ts +1 -0
- package/src/sqlite/index.ts +3 -0
- package/src/sqlite/manual-types.d.ts +4 -0
- package/src/sqlite/sqliteDialect.spec.ts +155 -0
- package/src/sqlite/sqliteDialect.ts +76 -0
- package/src/sqlite/sqliteQuerier.spec.ts +36 -0
- package/src/sqlite/sqliteQuerier.test.ts +21 -0
- package/src/sqlite/sqliteQuerier.ts +37 -0
- package/src/sqlite/sqliteQuerierPool.test.ts +12 -0
- package/src/sqlite/sqliteQuerierPool.ts +38 -0
- package/src/test/entityMock.ts +375 -0
- package/src/test/index.ts +3 -0
- package/src/test/it.util.ts +69 -0
- package/src/test/spec.util.ts +57 -0
- package/src/type/entity.ts +218 -0
- package/src/type/index.ts +9 -0
- package/src/type/migration.ts +241 -0
- package/src/type/namingStrategy.ts +17 -0
- package/src/type/querier.ts +143 -0
- package/src/type/querierPool.ts +26 -0
- package/src/type/query.ts +506 -0
- package/src/type/repository.ts +142 -0
- package/src/type/universalQuerier.ts +133 -0
- package/src/type/utility.ts +21 -0
- package/src/util/dialect.util-extra.spec.ts +96 -0
- package/src/util/dialect.util.spec.ts +23 -0
- package/src/util/dialect.util.ts +134 -0
- package/src/util/index.ts +5 -0
- package/src/util/object.util.spec.ts +29 -0
- package/src/util/object.util.ts +27 -0
- package/src/util/raw.ts +11 -0
- package/src/util/sql.util-extra.spec.ts +17 -0
- package/src/util/sql.util.spec.ts +208 -0
- package/src/util/sql.util.ts +104 -0
- package/src/util/string.util.spec.ts +46 -0
- package/src/util/string.util.ts +35 -0
- package/tsconfig.build.json +5 -0
- package/tsconfig.json +8 -0
- package/README.md +0 -177
- package/dialect/abstractSqlDialect.d.ts +0 -30
- package/dialect/abstractSqlDialect.js +0 -365
- package/dialect/index.d.ts +0 -4
- package/dialect/index.js +0 -8
- package/dialect/mysqlDialect.d.ts +0 -6
- package/dialect/mysqlDialect.js +0 -21
- package/dialect/postgresDialect.d.ts +0 -8
- package/dialect/postgresDialect.js +0 -44
- package/dialect/sqliteDialect.d.ts +0 -4
- package/dialect/sqliteDialect.js +0 -11
- package/entity/decorator/definition.js +0 -223
- package/entity/decorator/entity.js +0 -11
- package/entity/decorator/field.js +0 -12
- package/entity/decorator/id.js +0 -12
- package/entity/decorator/index.d.ts +0 -5
- package/entity/decorator/index.js +0 -12
- package/entity/decorator/relation.js +0 -27
- package/entity/index.d.ts +0 -1
- package/entity/index.js +0 -5
- package/index.d.ts +0 -1
- package/index.js +0 -5
- package/options.js +0 -20
- package/querier/abstractQuerier.d.ts +0 -30
- package/querier/abstractQuerier.js +0 -230
- package/querier/abstractSqlQuerier.d.ts +0 -27
- package/querier/abstractSqlQuerier.js +0 -88
- package/querier/decorator/index.d.ts +0 -2
- package/querier/decorator/index.js +0 -6
- package/querier/decorator/injectQuerier.d.ts +0 -3
- package/querier/decorator/injectQuerier.js +0 -39
- package/querier/decorator/transactional.js +0 -52
- package/querier/index.d.ts +0 -3
- package/querier/index.js +0 -7
- package/repository/genericRepository.d.ts +0 -19
- package/repository/genericRepository.js +0 -52
- package/repository/index.d.ts +0 -1
- package/repository/index.js +0 -5
- package/type/entity.js +0 -5
- package/type/index.d.ts +0 -7
- package/type/index.js +0 -11
- package/type/querier.d.ts +0 -53
- package/type/querier.js +0 -3
- package/type/querierPool.js +0 -3
- package/type/query.js +0 -13
- package/type/repository.js +0 -3
- package/type/universalQuerier.js +0 -3
- package/type/utility.d.ts +0 -12
- package/type/utility.js +0 -3
- package/util/dialect.util.d.ts +0 -17
- package/util/dialect.util.js +0 -114
- package/util/index.d.ts +0 -5
- package/util/index.js +0 -9
- package/util/object.util.d.ts +0 -3
- package/util/object.util.js +0 -22
- package/util/raw.d.ts +0 -2
- package/util/raw.js +0 -9
- package/util/sql.util.d.ts +0 -2
- package/util/sql.util.js +0 -55
- package/util/string.util.js +0 -20
|
@@ -0,0 +1,254 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { resolve } from 'node:path';
|
|
3
|
+
import { pathToFileURL } from 'node:url';
|
|
4
|
+
import { MongoSchemaGenerator } from './generator/mongoSchemaGenerator.js';
|
|
5
|
+
import { MysqlSchemaGenerator } from './generator/mysqlSchemaGenerator.js';
|
|
6
|
+
import { PostgresSchemaGenerator } from './generator/postgresSchemaGenerator.js';
|
|
7
|
+
import { SqliteSchemaGenerator } from './generator/sqliteSchemaGenerator.js';
|
|
8
|
+
import { Migrator } from './migrator.js';
|
|
9
|
+
async function loadConfig() {
|
|
10
|
+
const configPaths = ['uql.config.ts', 'uql.config.js', 'uql.config.mjs', '.uqlrc.ts', '.uqlrc.js'];
|
|
11
|
+
for (const configPath of configPaths) {
|
|
12
|
+
try {
|
|
13
|
+
const fullPath = resolve(process.cwd(), configPath);
|
|
14
|
+
const fileUrl = pathToFileURL(fullPath).href;
|
|
15
|
+
const module = await import(fileUrl);
|
|
16
|
+
return module.default ?? module;
|
|
17
|
+
}
|
|
18
|
+
catch {
|
|
19
|
+
// Config file not found, try next one
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
throw new Error('Could not find uql configuration file. ' + 'Create a uql.config.ts or uql.config.js file in your project root.');
|
|
23
|
+
}
|
|
24
|
+
function getSchemaGenerator(dialect, namingStrategy) {
|
|
25
|
+
switch (dialect) {
|
|
26
|
+
case 'postgres':
|
|
27
|
+
return new PostgresSchemaGenerator(namingStrategy);
|
|
28
|
+
case 'mysql':
|
|
29
|
+
case 'mariadb':
|
|
30
|
+
return new MysqlSchemaGenerator(namingStrategy);
|
|
31
|
+
case 'sqlite':
|
|
32
|
+
return new SqliteSchemaGenerator(namingStrategy);
|
|
33
|
+
case 'mongodb':
|
|
34
|
+
return new MongoSchemaGenerator(namingStrategy);
|
|
35
|
+
default:
|
|
36
|
+
throw new TypeError(`Unknown dialect: ${dialect}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async function main() {
|
|
40
|
+
const args = process.argv.slice(2);
|
|
41
|
+
const command = args[0];
|
|
42
|
+
if (!command || command === '--help' || command === '-h') {
|
|
43
|
+
printHelp();
|
|
44
|
+
return;
|
|
45
|
+
}
|
|
46
|
+
try {
|
|
47
|
+
const config = await loadConfig();
|
|
48
|
+
if (!config.querierPool) {
|
|
49
|
+
throw new Error('querierPool is required in configuration');
|
|
50
|
+
}
|
|
51
|
+
const dialect = config.dialect ?? 'postgres';
|
|
52
|
+
const options = {
|
|
53
|
+
migrationsPath: config.migrationsPath ?? './migrations',
|
|
54
|
+
tableName: config.tableName,
|
|
55
|
+
logger: console.log,
|
|
56
|
+
entities: config.entities,
|
|
57
|
+
dialect,
|
|
58
|
+
namingStrategy: config.namingStrategy,
|
|
59
|
+
};
|
|
60
|
+
const migrator = new Migrator(config.querierPool, options);
|
|
61
|
+
migrator.setSchemaGenerator(getSchemaGenerator(dialect, config.namingStrategy));
|
|
62
|
+
switch (command) {
|
|
63
|
+
case 'up':
|
|
64
|
+
await runUp(migrator, args.slice(1));
|
|
65
|
+
break;
|
|
66
|
+
case 'down':
|
|
67
|
+
await runDown(migrator, args.slice(1));
|
|
68
|
+
break;
|
|
69
|
+
case 'status':
|
|
70
|
+
await runStatus(migrator);
|
|
71
|
+
break;
|
|
72
|
+
case 'generate':
|
|
73
|
+
case 'create':
|
|
74
|
+
await runGenerate(migrator, args.slice(1));
|
|
75
|
+
break;
|
|
76
|
+
case 'generate:entities':
|
|
77
|
+
case 'generate-entities':
|
|
78
|
+
await runGenerateFromEntities(migrator, args.slice(1));
|
|
79
|
+
break;
|
|
80
|
+
case 'sync':
|
|
81
|
+
await runSync(migrator, args.slice(1));
|
|
82
|
+
break;
|
|
83
|
+
case 'pending':
|
|
84
|
+
await runPending(migrator);
|
|
85
|
+
break;
|
|
86
|
+
default:
|
|
87
|
+
console.error(`Unknown command: ${command}`);
|
|
88
|
+
printHelp();
|
|
89
|
+
process.exit(1);
|
|
90
|
+
}
|
|
91
|
+
// Close the connection pool
|
|
92
|
+
const pool = config.querierPool;
|
|
93
|
+
if (pool.end) {
|
|
94
|
+
await pool.end();
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
console.error('Error:', error.message);
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
async function runUp(migrator, args) {
|
|
103
|
+
const options = {};
|
|
104
|
+
for (let i = 0; i < args.length; i++) {
|
|
105
|
+
if (args[i] === '--to' && args[i + 1]) {
|
|
106
|
+
options.to = args[++i];
|
|
107
|
+
}
|
|
108
|
+
else if (args[i] === '--step' && args[i + 1]) {
|
|
109
|
+
options.step = Number.parseInt(args[++i], 10);
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
const results = await migrator.up(options);
|
|
113
|
+
if (results.length === 0) {
|
|
114
|
+
console.log('No pending migrations.');
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
const successful = results.filter((r) => r.success).length;
|
|
118
|
+
const failed = results.filter((r) => !r.success).length;
|
|
119
|
+
console.log(`\nMigrations complete: ${successful} successful, ${failed} failed`);
|
|
120
|
+
if (failed > 0) {
|
|
121
|
+
process.exit(1);
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
async function runDown(migrator, args) {
|
|
125
|
+
const options = { step: 1 }; // Default to 1 step
|
|
126
|
+
for (let i = 0; i < args.length; i++) {
|
|
127
|
+
if (args[i] === '--to' && args[i + 1]) {
|
|
128
|
+
options.to = args[++i];
|
|
129
|
+
delete options.step;
|
|
130
|
+
}
|
|
131
|
+
else if (args[i] === '--step' && args[i + 1]) {
|
|
132
|
+
options.step = Number.parseInt(args[++i], 10);
|
|
133
|
+
}
|
|
134
|
+
else if (args[i] === '--all') {
|
|
135
|
+
delete options.step;
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
const results = await migrator.down(options);
|
|
139
|
+
if (results.length === 0) {
|
|
140
|
+
console.log('No migrations to rollback.');
|
|
141
|
+
return;
|
|
142
|
+
}
|
|
143
|
+
const successful = results.filter((r) => r.success).length;
|
|
144
|
+
const failed = results.filter((r) => !r.success).length;
|
|
145
|
+
console.log(`\nRollback complete: ${successful} successful, ${failed} failed`);
|
|
146
|
+
if (failed > 0) {
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
async function runStatus(migrator) {
|
|
151
|
+
const status = await migrator.status();
|
|
152
|
+
console.log('\n=== Migration Status ===\n');
|
|
153
|
+
console.log('Executed migrations:');
|
|
154
|
+
if (status.executed.length === 0) {
|
|
155
|
+
console.log(' (none)');
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
for (const name of status.executed) {
|
|
159
|
+
console.log(` ✓ ${name}`);
|
|
160
|
+
}
|
|
161
|
+
}
|
|
162
|
+
console.log('\nPending migrations:');
|
|
163
|
+
if (status.pending.length === 0) {
|
|
164
|
+
console.log(' (none)');
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
for (const name of status.pending) {
|
|
168
|
+
console.log(` ○ ${name}`);
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
console.log('');
|
|
172
|
+
}
|
|
173
|
+
async function runPending(migrator) {
|
|
174
|
+
const pending = await migrator.pending();
|
|
175
|
+
if (pending.length === 0) {
|
|
176
|
+
console.log('No pending migrations.');
|
|
177
|
+
return;
|
|
178
|
+
}
|
|
179
|
+
console.log('Pending migrations:');
|
|
180
|
+
for (const migration of pending) {
|
|
181
|
+
console.log(` ○ ${migration.name}`);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
async function runGenerate(migrator, args) {
|
|
185
|
+
const name = args.join('_') || 'migration';
|
|
186
|
+
const filePath = await migrator.generate(name);
|
|
187
|
+
console.log(`\nCreated migration: ${filePath}`);
|
|
188
|
+
}
|
|
189
|
+
async function runGenerateFromEntities(migrator, args) {
|
|
190
|
+
const name = args.join('_') || 'schema';
|
|
191
|
+
const filePath = await migrator.generateFromEntities(name);
|
|
192
|
+
console.log(`\nCreated migration from entities: ${filePath}`);
|
|
193
|
+
}
|
|
194
|
+
async function runSync(migrator, args) {
|
|
195
|
+
const force = args.includes('--force');
|
|
196
|
+
if (force) {
|
|
197
|
+
console.log('\n⚠️ WARNING: This will drop and recreate all tables!');
|
|
198
|
+
console.log(' All data will be lost. This should only be used in development.\n');
|
|
199
|
+
}
|
|
200
|
+
await migrator.sync({ force });
|
|
201
|
+
console.log('\nSchema sync completed.');
|
|
202
|
+
}
|
|
203
|
+
function printHelp() {
|
|
204
|
+
console.log(`
|
|
205
|
+
@uql/migrate - Database migration tool for uql ORM
|
|
206
|
+
|
|
207
|
+
Usage: @uql/migrate <command> [options]
|
|
208
|
+
|
|
209
|
+
Commands:
|
|
210
|
+
up Run all pending migrations
|
|
211
|
+
--to <name> Run migrations up to and including <name>
|
|
212
|
+
--step <n> Run only <n> migrations
|
|
213
|
+
|
|
214
|
+
down Rollback the last migration
|
|
215
|
+
--to <name> Rollback to (and including) migration <name>
|
|
216
|
+
--step <n> Rollback <n> migrations (default: 1)
|
|
217
|
+
--all Rollback all migrations
|
|
218
|
+
|
|
219
|
+
status Show migration status
|
|
220
|
+
|
|
221
|
+
pending Show pending migrations
|
|
222
|
+
|
|
223
|
+
generate <name> Create a new empty migration file
|
|
224
|
+
create <name> Alias for generate
|
|
225
|
+
|
|
226
|
+
generate:entities Generate migration from entity definitions
|
|
227
|
+
<name> Optional name for the migration
|
|
228
|
+
|
|
229
|
+
sync Sync schema directly (development only!)
|
|
230
|
+
--force Drop and recreate all tables
|
|
231
|
+
|
|
232
|
+
Configuration:
|
|
233
|
+
Create a uql.config.ts or uql.config.js file in your project root:
|
|
234
|
+
|
|
235
|
+
export default {
|
|
236
|
+
querierPool: new PgQuerierPool({ ... }),
|
|
237
|
+
migrationsPath: './migrations',
|
|
238
|
+
tableName: 'uql_migrations',
|
|
239
|
+
dialect: 'postgres', // 'postgres' | 'mysql' | 'mariadb' | 'sqlite'
|
|
240
|
+
entities: [User, Post, ...],
|
|
241
|
+
};
|
|
242
|
+
|
|
243
|
+
Examples:
|
|
244
|
+
@uql/migrate up
|
|
245
|
+
@uql/migrate up --step 1
|
|
246
|
+
@uql/migrate down
|
|
247
|
+
@uql/migrate down --step 3
|
|
248
|
+
@uql/migrate status
|
|
249
|
+
@uql/migrate generate add_users_table
|
|
250
|
+
@uql/migrate generate:entities initial_schema
|
|
251
|
+
`);
|
|
252
|
+
}
|
|
253
|
+
main().catch(console.error);
|
|
254
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY2xpLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL21pZ3JhdGUvY2xpLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFFQSxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sV0FBVyxDQUFDO0FBQ3BDLE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxVQUFVLENBQUM7QUFFekMsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0scUNBQXFDLENBQUM7QUFDM0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDakYsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sc0NBQXNDLENBQUM7QUFDN0UsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQVd6QyxLQUFLLFVBQVUsVUFBVTtJQUN2QixNQUFNLFdBQVcsR0FBRyxDQUFDLGVBQWUsRUFBRSxlQUFlLEVBQUUsZ0JBQWdCLEVBQUUsV0FBVyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0lBRW5HLEtBQUssTUFBTSxVQUFVLElBQUksV0FBVyxFQUFFLENBQUM7UUFDckMsSUFBSSxDQUFDO1lBQ0gsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxHQUFHLEVBQUUsRUFBRSxVQUFVLENBQUMsQ0FBQztZQUNwRCxNQUFNLE9BQU8sR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsSUFBSSxDQUFDO1lBQzdDLE1BQU0sTUFBTSxHQUFHLE1BQU0sTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ3JDLE9BQU8sTUFBTSxDQUFDLE9BQU8sSUFBSSxNQUFNLENBQUM7UUFDbEMsQ0FBQztRQUFDLE1BQU0sQ0FBQztZQUNQLHNDQUFzQztRQUN4QyxDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sSUFBSSxLQUFLLENBQ2IseUNBQXlDLEdBQUcsb0VBQW9FLENBQ2pILENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxrQkFBa0IsQ0FBQyxPQUFnQixFQUFFLGNBQStCO0lBQzNFLFFBQVEsT0FBTyxFQUFFLENBQUM7UUFDaEIsS0FBSyxVQUFVO1lBQ2IsT0FBTyxJQUFJLHVCQUF1QixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ3JELEtBQUssT0FBTyxDQUFDO1FBQ2IsS0FBSyxTQUFTO1lBQ1osT0FBTyxJQUFJLG9CQUFvQixDQUFDLGNBQWMsQ0FBQyxDQUFDO1FBQ2xELEtBQUssUUFBUTtZQUNYLE9BQU8sSUFBSSxxQkFBcUIsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUNuRCxLQUFLLFNBQVM7WUFDWixPQUFPLElBQUksb0JBQW9CLENBQUMsY0FBYyxDQUFDLENBQUM7UUFDbEQ7WUFDRSxNQUFNLElBQUksU0FBUyxDQUFDLG9CQUFvQixPQUFPLEVBQUUsQ0FBQyxDQUFDO0lBQ3ZELENBQUM7QUFDSCxDQUFDO0FBRUQsS0FBSyxVQUFVLElBQUk7SUFDakIsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbkMsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBRXhCLElBQUksQ0FBQyxPQUFPLElBQUksT0FBTyxLQUFLLFFBQVEsSUFBSSxPQUFPLEtBQUssSUFBSSxFQUFFLENBQUM7UUFDekQsU0FBUyxFQUFFLENBQUM7UUFDWixPQUFPO0lBQ1QsQ0FBQztJQUVELElBQUksQ0FBQztRQUNILE1BQU0sTUFBTSxHQUFHLE1BQU0sVUFBVSxFQUFFLENBQUM7UUFFbEMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxXQUFXLEVBQUUsQ0FBQztZQUN4QixNQUFNLElBQUksS0FBSyxDQUFDLDBDQUEwQyxDQUFDLENBQUM7UUFDOUQsQ0FBQztRQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxPQUFPLElBQUksVUFBVSxDQUFDO1FBRTdDLE1BQU0sT0FBTyxHQUEyQztZQUN0RCxjQUFjLEVBQUUsTUFBTSxDQUFDLGNBQWMsSUFBSSxjQUFjO1lBQ3ZELFNBQVMsRUFBRSxNQUFNLENBQUMsU0FBUztZQUMzQixNQUFNLEVBQUUsT0FBTyxDQUFDLEdBQUc7WUFDbkIsUUFBUSxFQUFFLE1BQU0sQ0FBQyxRQUF1QztZQUN4RCxPQUFPO1lBQ1AsY0FBYyxFQUFFLE1BQU0sQ0FBQyxjQUFjO1NBQ3RDLENBQUM7UUFFRixNQUFNLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxNQUFNLENBQUMsV0FBVyxFQUFFLE9BQU8sQ0FBQyxDQUFDO1FBQzNELFFBQVEsQ0FBQyxrQkFBa0IsQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUM7UUFFaEYsUUFBUSxPQUFPLEVBQUUsQ0FBQztZQUNoQixLQUFLLElBQUk7Z0JBQ1AsTUFBTSxLQUFLLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDckMsTUFBTTtZQUNSLEtBQUssTUFBTTtnQkFDVCxNQUFNLE9BQU8sQ0FBQyxRQUFRLEVBQUUsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO2dCQUN2QyxNQUFNO1lBQ1IsS0FBSyxRQUFRO2dCQUNYLE1BQU0sU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2dCQUMxQixNQUFNO1lBQ1IsS0FBSyxVQUFVLENBQUM7WUFDaEIsS0FBSyxRQUFRO2dCQUNYLE1BQU0sV0FBVyxDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQzNDLE1BQU07WUFDUixLQUFLLG1CQUFtQixDQUFDO1lBQ3pCLEtBQUssbUJBQW1CO2dCQUN0QixNQUFNLHVCQUF1QixDQUFDLFFBQVEsRUFBRSxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7Z0JBQ3ZELE1BQU07WUFDUixLQUFLLE1BQU07Z0JBQ1QsTUFBTSxPQUFPLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDdkMsTUFBTTtZQUNSLEtBQUssU0FBUztnQkFDWixNQUFNLFVBQVUsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDM0IsTUFBTTtZQUNSO2dCQUNFLE9BQU8sQ0FBQyxLQUFLLENBQUMsb0JBQW9CLE9BQU8sRUFBRSxDQUFDLENBQUM7Z0JBQzdDLFNBQVMsRUFBRSxDQUFDO2dCQUNaLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEIsQ0FBQztRQUVELDRCQUE0QjtRQUM1QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsV0FBNEMsQ0FBQztRQUNqRSxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztZQUNiLE1BQU0sSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQ25CLENBQUM7SUFDSCxDQUFDO0lBQUMsT0FBTyxLQUFLLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFHLEtBQWUsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNsRCxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDO0FBRUQsS0FBSyxVQUFVLEtBQUssQ0FBQyxRQUFrQixFQUFFLElBQWM7SUFDckQsTUFBTSxPQUFPLEdBQW1DLEVBQUUsQ0FBQztJQUVuRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1FBQ3JDLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLE1BQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUM7WUFDdEMsT0FBTyxDQUFDLEVBQUUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN6QixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxPQUFPLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEQsQ0FBQztJQUNILENBQUM7SUFFRCxNQUFNLE9BQU8sR0FBRyxNQUFNLFFBQVEsQ0FBQyxFQUFFLENBQUMsT0FBTyxDQUFDLENBQUM7SUFFM0MsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQ3pCLE9BQU8sQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsQ0FBQztRQUN0QyxPQUFPO0lBQ1QsQ0FBQztJQUVELE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFNLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFDaEUsTUFBTSxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsTUFBTSxDQUFDO0lBRTdELE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLFVBQVUsZ0JBQWdCLE1BQU0sU0FBUyxDQUFDLENBQUM7SUFFakYsSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDZixPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ2xCLENBQUM7QUFDSCxDQUFDO0FBRUQsS0FBSyxVQUFVLE9BQU8sQ0FBQyxRQUFrQixFQUFFLElBQWM7SUFDdkQsTUFBTSxPQUFPLEdBQW1DLEVBQUUsSUFBSSxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsb0JBQW9CO0lBRWpGLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUM7UUFDckMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssTUFBTSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUN0QyxPQUFPLENBQUMsRUFBRSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO1lBQ3ZCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQztRQUN0QixDQUFDO2FBQU0sSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssUUFBUSxJQUFJLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQztZQUMvQyxPQUFPLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDaEQsQ0FBQzthQUFNLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLE9BQU8sRUFBRSxDQUFDO1lBQy9CLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQztRQUN0QixDQUFDO0lBQ0gsQ0FBQztJQUVELE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUU3QyxJQUFJLE9BQU8sQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDekIsT0FBTyxDQUFDLEdBQUcsQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO1FBQzFDLE9BQU87SUFDVCxDQUFDO0lBRUQsTUFBTSxVQUFVLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQU0sRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sQ0FBQztJQUNoRSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBTSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLENBQUM7SUFFN0QsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsVUFBVSxnQkFBZ0IsTUFBTSxTQUFTLENBQUMsQ0FBQztJQUUvRSxJQUFJLE1BQU0sR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNmLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDbEIsQ0FBQztBQUNILENBQUM7QUFFRCxLQUFLLFVBQVUsU0FBUyxDQUFDLFFBQWtCO0lBQ3pDLE1BQU0sTUFBTSxHQUFHLE1BQU0sUUFBUSxDQUFDLE1BQU0sRUFBRSxDQUFDO0lBRXZDLE9BQU8sQ0FBQyxHQUFHLENBQUMsOEJBQThCLENBQUMsQ0FBQztJQUU1QyxPQUFPLENBQUMsR0FBRyxDQUFDLHNCQUFzQixDQUFDLENBQUM7SUFDcEMsSUFBSSxNQUFNLENBQUMsUUFBUSxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNqQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7U0FBTSxDQUFDO1FBQ04sS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDbkMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLHVCQUF1QixDQUFDLENBQUM7SUFDckMsSUFBSSxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0lBQzFCLENBQUM7U0FBTSxDQUFDO1FBQ04sS0FBSyxNQUFNLElBQUksSUFBSSxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7WUFDbEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxPQUFPLElBQUksRUFBRSxDQUFDLENBQUM7UUFDN0IsQ0FBQztJQUNILENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xCLENBQUM7QUFFRCxLQUFLLFVBQVUsVUFBVSxDQUFDLFFBQWtCO0lBQzFDLE1BQU0sT0FBTyxHQUFHLE1BQU0sUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO0lBRXpDLElBQUksT0FBTyxDQUFDLE1BQU0sS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUN6QixPQUFPLENBQUMsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7UUFDdEMsT0FBTztJQUNULENBQUM7SUFFRCxPQUFPLENBQUMsR0FBRyxDQUFDLHFCQUFxQixDQUFDLENBQUM7SUFDbkMsS0FBSyxNQUFNLFNBQVMsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUNoQyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDdkMsQ0FBQztBQUNILENBQUM7QUFFRCxLQUFLLFVBQVUsV0FBVyxDQUFDLFFBQWtCLEVBQUUsSUFBYztJQUMzRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFdBQVcsQ0FBQztJQUMzQyxNQUFNLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDL0MsT0FBTyxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsUUFBUSxFQUFFLENBQUMsQ0FBQztBQUNsRCxDQUFDO0FBRUQsS0FBSyxVQUFVLHVCQUF1QixDQUFDLFFBQWtCLEVBQUUsSUFBYztJQUN2RSxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLFFBQVEsQ0FBQztJQUN4QyxNQUFNLFFBQVEsR0FBRyxNQUFNLFFBQVEsQ0FBQyxvQkFBb0IsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUMzRCxPQUFPLENBQUMsR0FBRyxDQUFDLHNDQUFzQyxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQ2hFLENBQUM7QUFFRCxLQUFLLFVBQVUsT0FBTyxDQUFDLFFBQWtCLEVBQUUsSUFBYztJQUN2RCxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0lBRXZDLElBQUksS0FBSyxFQUFFLENBQUM7UUFDVixPQUFPLENBQUMsR0FBRyxDQUFDLHdEQUF3RCxDQUFDLENBQUM7UUFDdEUsT0FBTyxDQUFDLEdBQUcsQ0FBQyxzRUFBc0UsQ0FBQyxDQUFDO0lBQ3RGLENBQUM7SUFFRCxNQUFNLFFBQVEsQ0FBQyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO0lBQy9CLE9BQU8sQ0FBQyxHQUFHLENBQUMsMEJBQTBCLENBQUMsQ0FBQztBQUMxQyxDQUFDO0FBRUQsU0FBUyxTQUFTO0lBQ2hCLE9BQU8sQ0FBQyxHQUFHLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0NBK0NiLENBQUMsQ0FBQztBQUNILENBQUM7QUFFRCxJQUFJLEVBQUUsQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiIyEvdXNyL2Jpbi9lbnYgbm9kZVxuXG5pbXBvcnQgeyByZXNvbHZlIH0gZnJvbSAnbm9kZTpwYXRoJztcbmltcG9ydCB7IHBhdGhUb0ZpbGVVUkwgfSBmcm9tICdub2RlOnVybCc7XG5pbXBvcnQgdHlwZSB7IERpYWxlY3QsIE1pZ3JhdG9yT3B0aW9ucywgTmFtaW5nU3RyYXRlZ3ksIFF1ZXJpZXJQb29sIH0gZnJvbSAnLi4vdHlwZS9pbmRleC5qcyc7XG5pbXBvcnQgeyBNb25nb1NjaGVtYUdlbmVyYXRvciB9IGZyb20gJy4vZ2VuZXJhdG9yL21vbmdvU2NoZW1hR2VuZXJhdG9yLmpzJztcbmltcG9ydCB7IE15c3FsU2NoZW1hR2VuZXJhdG9yIH0gZnJvbSAnLi9nZW5lcmF0b3IvbXlzcWxTY2hlbWFHZW5lcmF0b3IuanMnO1xuaW1wb3J0IHsgUG9zdGdyZXNTY2hlbWFHZW5lcmF0b3IgfSBmcm9tICcuL2dlbmVyYXRvci9wb3N0Z3Jlc1NjaGVtYUdlbmVyYXRvci5qcyc7XG5pbXBvcnQgeyBTcWxpdGVTY2hlbWFHZW5lcmF0b3IgfSBmcm9tICcuL2dlbmVyYXRvci9zcWxpdGVTY2hlbWFHZW5lcmF0b3IuanMnO1xuaW1wb3J0IHsgTWlncmF0b3IgfSBmcm9tICcuL21pZ3JhdG9yLmpzJztcblxuaW50ZXJmYWNlIENsaUNvbmZpZyB7XG4gIHF1ZXJpZXJQb29sPzogUXVlcmllclBvb2w7XG4gIG1pZ3JhdGlvbnNQYXRoPzogc3RyaW5nO1xuICB0YWJsZU5hbWU/OiBzdHJpbmc7XG4gIGRpYWxlY3Q/OiBEaWFsZWN0O1xuICBlbnRpdGllcz86IHVua25vd25bXTtcbiAgbmFtaW5nU3RyYXRlZ3k/OiBOYW1pbmdTdHJhdGVneTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gbG9hZENvbmZpZygpOiBQcm9taXNlPENsaUNvbmZpZz4ge1xuICBjb25zdCBjb25maWdQYXRocyA9IFsndXFsLmNvbmZpZy50cycsICd1cWwuY29uZmlnLmpzJywgJ3VxbC5jb25maWcubWpzJywgJy51cWxyYy50cycsICcudXFscmMuanMnXTtcblxuICBmb3IgKGNvbnN0IGNvbmZpZ1BhdGggb2YgY29uZmlnUGF0aHMpIHtcbiAgICB0cnkge1xuICAgICAgY29uc3QgZnVsbFBhdGggPSByZXNvbHZlKHByb2Nlc3MuY3dkKCksIGNvbmZpZ1BhdGgpO1xuICAgICAgY29uc3QgZmlsZVVybCA9IHBhdGhUb0ZpbGVVUkwoZnVsbFBhdGgpLmhyZWY7XG4gICAgICBjb25zdCBtb2R1bGUgPSBhd2FpdCBpbXBvcnQoZmlsZVVybCk7XG4gICAgICByZXR1cm4gbW9kdWxlLmRlZmF1bHQgPz8gbW9kdWxlO1xuICAgIH0gY2F0Y2gge1xuICAgICAgLy8gQ29uZmlnIGZpbGUgbm90IGZvdW5kLCB0cnkgbmV4dCBvbmVcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgJ0NvdWxkIG5vdCBmaW5kIHVxbCBjb25maWd1cmF0aW9uIGZpbGUuICcgKyAnQ3JlYXRlIGEgdXFsLmNvbmZpZy50cyBvciB1cWwuY29uZmlnLmpzIGZpbGUgaW4geW91ciBwcm9qZWN0IHJvb3QuJyxcbiAgKTtcbn1cblxuZnVuY3Rpb24gZ2V0U2NoZW1hR2VuZXJhdG9yKGRpYWxlY3Q6IERpYWxlY3QsIG5hbWluZ1N0cmF0ZWd5PzogTmFtaW5nU3RyYXRlZ3kpIHtcbiAgc3dpdGNoIChkaWFsZWN0KSB7XG4gICAgY2FzZSAncG9zdGdyZXMnOlxuICAgICAgcmV0dXJuIG5ldyBQb3N0Z3Jlc1NjaGVtYUdlbmVyYXRvcihuYW1pbmdTdHJhdGVneSk7XG4gICAgY2FzZSAnbXlzcWwnOlxuICAgIGNhc2UgJ21hcmlhZGInOlxuICAgICAgcmV0dXJuIG5ldyBNeXNxbFNjaGVtYUdlbmVyYXRvcihuYW1pbmdTdHJhdGVneSk7XG4gICAgY2FzZSAnc3FsaXRlJzpcbiAgICAgIHJldHVybiBuZXcgU3FsaXRlU2NoZW1hR2VuZXJhdG9yKG5hbWluZ1N0cmF0ZWd5KTtcbiAgICBjYXNlICdtb25nb2RiJzpcbiAgICAgIHJldHVybiBuZXcgTW9uZ29TY2hlbWFHZW5lcmF0b3IobmFtaW5nU3RyYXRlZ3kpO1xuICAgIGRlZmF1bHQ6XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBVbmtub3duIGRpYWxlY3Q6ICR7ZGlhbGVjdH1gKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBtYWluKCkge1xuICBjb25zdCBhcmdzID0gcHJvY2Vzcy5hcmd2LnNsaWNlKDIpO1xuICBjb25zdCBjb21tYW5kID0gYXJnc1swXTtcblxuICBpZiAoIWNvbW1hbmQgfHwgY29tbWFuZCA9PT0gJy0taGVscCcgfHwgY29tbWFuZCA9PT0gJy1oJykge1xuICAgIHByaW50SGVscCgpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHRyeSB7XG4gICAgY29uc3QgY29uZmlnID0gYXdhaXQgbG9hZENvbmZpZygpO1xuXG4gICAgaWYgKCFjb25maWcucXVlcmllclBvb2wpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcigncXVlcmllclBvb2wgaXMgcmVxdWlyZWQgaW4gY29uZmlndXJhdGlvbicpO1xuICAgIH1cblxuICAgIGNvbnN0IGRpYWxlY3QgPSBjb25maWcuZGlhbGVjdCA/PyAncG9zdGdyZXMnO1xuXG4gICAgY29uc3Qgb3B0aW9uczogTWlncmF0b3JPcHRpb25zICYgeyBkaWFsZWN0OiBEaWFsZWN0IH0gPSB7XG4gICAgICBtaWdyYXRpb25zUGF0aDogY29uZmlnLm1pZ3JhdGlvbnNQYXRoID8/ICcuL21pZ3JhdGlvbnMnLFxuICAgICAgdGFibGVOYW1lOiBjb25maWcudGFibGVOYW1lLFxuICAgICAgbG9nZ2VyOiBjb25zb2xlLmxvZyxcbiAgICAgIGVudGl0aWVzOiBjb25maWcuZW50aXRpZXMgYXMgTWlncmF0b3JPcHRpb25zWydlbnRpdGllcyddLFxuICAgICAgZGlhbGVjdCxcbiAgICAgIG5hbWluZ1N0cmF0ZWd5OiBjb25maWcubmFtaW5nU3RyYXRlZ3ksXG4gICAgfTtcblxuICAgIGNvbnN0IG1pZ3JhdG9yID0gbmV3IE1pZ3JhdG9yKGNvbmZpZy5xdWVyaWVyUG9vbCwgb3B0aW9ucyk7XG4gICAgbWlncmF0b3Iuc2V0U2NoZW1hR2VuZXJhdG9yKGdldFNjaGVtYUdlbmVyYXRvcihkaWFsZWN0LCBjb25maWcubmFtaW5nU3RyYXRlZ3kpKTtcblxuICAgIHN3aXRjaCAoY29tbWFuZCkge1xuICAgICAgY2FzZSAndXAnOlxuICAgICAgICBhd2FpdCBydW5VcChtaWdyYXRvciwgYXJncy5zbGljZSgxKSk7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZG93bic6XG4gICAgICAgIGF3YWl0IHJ1bkRvd24obWlncmF0b3IsIGFyZ3Muc2xpY2UoMSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N0YXR1cyc6XG4gICAgICAgIGF3YWl0IHJ1blN0YXR1cyhtaWdyYXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgY2FzZSAnZ2VuZXJhdGUnOlxuICAgICAgY2FzZSAnY3JlYXRlJzpcbiAgICAgICAgYXdhaXQgcnVuR2VuZXJhdGUobWlncmF0b3IsIGFyZ3Muc2xpY2UoMSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2dlbmVyYXRlOmVudGl0aWVzJzpcbiAgICAgIGNhc2UgJ2dlbmVyYXRlLWVudGl0aWVzJzpcbiAgICAgICAgYXdhaXQgcnVuR2VuZXJhdGVGcm9tRW50aXRpZXMobWlncmF0b3IsIGFyZ3Muc2xpY2UoMSkpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ3N5bmMnOlxuICAgICAgICBhd2FpdCBydW5TeW5jKG1pZ3JhdG9yLCBhcmdzLnNsaWNlKDEpKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICdwZW5kaW5nJzpcbiAgICAgICAgYXdhaXQgcnVuUGVuZGluZyhtaWdyYXRvcik7XG4gICAgICAgIGJyZWFrO1xuICAgICAgZGVmYXVsdDpcbiAgICAgICAgY29uc29sZS5lcnJvcihgVW5rbm93biBjb21tYW5kOiAke2NvbW1hbmR9YCk7XG4gICAgICAgIHByaW50SGVscCgpO1xuICAgICAgICBwcm9jZXNzLmV4aXQoMSk7XG4gICAgfVxuXG4gICAgLy8gQ2xvc2UgdGhlIGNvbm5lY3Rpb24gcG9vbFxuICAgIGNvbnN0IHBvb2wgPSBjb25maWcucXVlcmllclBvb2wgYXMgeyBlbmQ/OiAoKSA9PiBQcm9taXNlPHZvaWQ+IH07XG4gICAgaWYgKHBvb2wuZW5kKSB7XG4gICAgICBhd2FpdCBwb29sLmVuZCgpO1xuICAgIH1cbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICBjb25zb2xlLmVycm9yKCdFcnJvcjonLCAoZXJyb3IgYXMgRXJyb3IpLm1lc3NhZ2UpO1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBydW5VcChtaWdyYXRvcjogTWlncmF0b3IsIGFyZ3M6IHN0cmluZ1tdKSB7XG4gIGNvbnN0IG9wdGlvbnM6IHsgdG8/OiBzdHJpbmc7IHN0ZXA/OiBudW1iZXIgfSA9IHt9O1xuXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgIGlmIChhcmdzW2ldID09PSAnLS10bycgJiYgYXJnc1tpICsgMV0pIHtcbiAgICAgIG9wdGlvbnMudG8gPSBhcmdzWysraV07XG4gICAgfSBlbHNlIGlmIChhcmdzW2ldID09PSAnLS1zdGVwJyAmJiBhcmdzW2kgKyAxXSkge1xuICAgICAgb3B0aW9ucy5zdGVwID0gTnVtYmVyLnBhcnNlSW50KGFyZ3NbKytpXSwgMTApO1xuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBtaWdyYXRvci51cChvcHRpb25zKTtcblxuICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLmxvZygnTm8gcGVuZGluZyBtaWdyYXRpb25zLicpO1xuICAgIHJldHVybjtcbiAgfVxuXG4gIGNvbnN0IHN1Y2Nlc3NmdWwgPSByZXN1bHRzLmZpbHRlcigocjogYW55KSA9PiByLnN1Y2Nlc3MpLmxlbmd0aDtcbiAgY29uc3QgZmFpbGVkID0gcmVzdWx0cy5maWx0ZXIoKHI6IGFueSkgPT4gIXIuc3VjY2VzcykubGVuZ3RoO1xuXG4gIGNvbnNvbGUubG9nKGBcXG5NaWdyYXRpb25zIGNvbXBsZXRlOiAke3N1Y2Nlc3NmdWx9IHN1Y2Nlc3NmdWwsICR7ZmFpbGVkfSBmYWlsZWRgKTtcblxuICBpZiAoZmFpbGVkID4gMCkge1xuICAgIHByb2Nlc3MuZXhpdCgxKTtcbiAgfVxufVxuXG5hc3luYyBmdW5jdGlvbiBydW5Eb3duKG1pZ3JhdG9yOiBNaWdyYXRvciwgYXJnczogc3RyaW5nW10pIHtcbiAgY29uc3Qgb3B0aW9uczogeyB0bz86IHN0cmluZzsgc3RlcD86IG51bWJlciB9ID0geyBzdGVwOiAxIH07IC8vIERlZmF1bHQgdG8gMSBzdGVwXG5cbiAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKGFyZ3NbaV0gPT09ICctLXRvJyAmJiBhcmdzW2kgKyAxXSkge1xuICAgICAgb3B0aW9ucy50byA9IGFyZ3NbKytpXTtcbiAgICAgIGRlbGV0ZSBvcHRpb25zLnN0ZXA7XG4gICAgfSBlbHNlIGlmIChhcmdzW2ldID09PSAnLS1zdGVwJyAmJiBhcmdzW2kgKyAxXSkge1xuICAgICAgb3B0aW9ucy5zdGVwID0gTnVtYmVyLnBhcnNlSW50KGFyZ3NbKytpXSwgMTApO1xuICAgIH0gZWxzZSBpZiAoYXJnc1tpXSA9PT0gJy0tYWxsJykge1xuICAgICAgZGVsZXRlIG9wdGlvbnMuc3RlcDtcbiAgICB9XG4gIH1cblxuICBjb25zdCByZXN1bHRzID0gYXdhaXQgbWlncmF0b3IuZG93bihvcHRpb25zKTtcblxuICBpZiAocmVzdWx0cy5sZW5ndGggPT09IDApIHtcbiAgICBjb25zb2xlLmxvZygnTm8gbWlncmF0aW9ucyB0byByb2xsYmFjay4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zdCBzdWNjZXNzZnVsID0gcmVzdWx0cy5maWx0ZXIoKHI6IGFueSkgPT4gci5zdWNjZXNzKS5sZW5ndGg7XG4gIGNvbnN0IGZhaWxlZCA9IHJlc3VsdHMuZmlsdGVyKChyOiBhbnkpID0+ICFyLnN1Y2Nlc3MpLmxlbmd0aDtcblxuICBjb25zb2xlLmxvZyhgXFxuUm9sbGJhY2sgY29tcGxldGU6ICR7c3VjY2Vzc2Z1bH0gc3VjY2Vzc2Z1bCwgJHtmYWlsZWR9IGZhaWxlZGApO1xuXG4gIGlmIChmYWlsZWQgPiAwKSB7XG4gICAgcHJvY2Vzcy5leGl0KDEpO1xuICB9XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1blN0YXR1cyhtaWdyYXRvcjogTWlncmF0b3IpIHtcbiAgY29uc3Qgc3RhdHVzID0gYXdhaXQgbWlncmF0b3Iuc3RhdHVzKCk7XG5cbiAgY29uc29sZS5sb2coJ1xcbj09PSBNaWdyYXRpb24gU3RhdHVzID09PVxcbicpO1xuXG4gIGNvbnNvbGUubG9nKCdFeGVjdXRlZCBtaWdyYXRpb25zOicpO1xuICBpZiAoc3RhdHVzLmV4ZWN1dGVkLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnNvbGUubG9nKCcgIChub25lKScpO1xuICB9IGVsc2Uge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBzdGF0dXMuZXhlY3V0ZWQpIHtcbiAgICAgIGNvbnNvbGUubG9nKGAgIOKckyAke25hbWV9YCk7XG4gICAgfVxuICB9XG5cbiAgY29uc29sZS5sb2coJ1xcblBlbmRpbmcgbWlncmF0aW9uczonKTtcbiAgaWYgKHN0YXR1cy5wZW5kaW5nLmxlbmd0aCA9PT0gMCkge1xuICAgIGNvbnNvbGUubG9nKCcgIChub25lKScpO1xuICB9IGVsc2Uge1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBzdGF0dXMucGVuZGluZykge1xuICAgICAgY29uc29sZS5sb2coYCAg4peLICR7bmFtZX1gKTtcbiAgICB9XG4gIH1cblxuICBjb25zb2xlLmxvZygnJyk7XG59XG5cbmFzeW5jIGZ1bmN0aW9uIHJ1blBlbmRpbmcobWlncmF0b3I6IE1pZ3JhdG9yKSB7XG4gIGNvbnN0IHBlbmRpbmcgPSBhd2FpdCBtaWdyYXRvci5wZW5kaW5nKCk7XG5cbiAgaWYgKHBlbmRpbmcubGVuZ3RoID09PSAwKSB7XG4gICAgY29uc29sZS5sb2coJ05vIHBlbmRpbmcgbWlncmF0aW9ucy4nKTtcbiAgICByZXR1cm47XG4gIH1cblxuICBjb25zb2xlLmxvZygnUGVuZGluZyBtaWdyYXRpb25zOicpO1xuICBmb3IgKGNvbnN0IG1pZ3JhdGlvbiBvZiBwZW5kaW5nKSB7XG4gICAgY29uc29sZS5sb2coYCAg4peLICR7bWlncmF0aW9uLm5hbWV9YCk7XG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuR2VuZXJhdGUobWlncmF0b3I6IE1pZ3JhdG9yLCBhcmdzOiBzdHJpbmdbXSkge1xuICBjb25zdCBuYW1lID0gYXJncy5qb2luKCdfJykgfHwgJ21pZ3JhdGlvbic7XG4gIGNvbnN0IGZpbGVQYXRoID0gYXdhaXQgbWlncmF0b3IuZ2VuZXJhdGUobmFtZSk7XG4gIGNvbnNvbGUubG9nKGBcXG5DcmVhdGVkIG1pZ3JhdGlvbjogJHtmaWxlUGF0aH1gKTtcbn1cblxuYXN5bmMgZnVuY3Rpb24gcnVuR2VuZXJhdGVGcm9tRW50aXRpZXMobWlncmF0b3I6IE1pZ3JhdG9yLCBhcmdzOiBzdHJpbmdbXSkge1xuICBjb25zdCBuYW1lID0gYXJncy5qb2luKCdfJykgfHwgJ3NjaGVtYSc7XG4gIGNvbnN0IGZpbGVQYXRoID0gYXdhaXQgbWlncmF0b3IuZ2VuZXJhdGVGcm9tRW50aXRpZXMobmFtZSk7XG4gIGNvbnNvbGUubG9nKGBcXG5DcmVhdGVkIG1pZ3JhdGlvbiBmcm9tIGVudGl0aWVzOiAke2ZpbGVQYXRofWApO1xufVxuXG5hc3luYyBmdW5jdGlvbiBydW5TeW5jKG1pZ3JhdG9yOiBNaWdyYXRvciwgYXJnczogc3RyaW5nW10pIHtcbiAgY29uc3QgZm9yY2UgPSBhcmdzLmluY2x1ZGVzKCctLWZvcmNlJyk7XG5cbiAgaWYgKGZvcmNlKSB7XG4gICAgY29uc29sZS5sb2coJ1xcbuKaoO+4jyAgV0FSTklORzogVGhpcyB3aWxsIGRyb3AgYW5kIHJlY3JlYXRlIGFsbCB0YWJsZXMhJyk7XG4gICAgY29uc29sZS5sb2coJyAgIEFsbCBkYXRhIHdpbGwgYmUgbG9zdC4gVGhpcyBzaG91bGQgb25seSBiZSB1c2VkIGluIGRldmVsb3BtZW50LlxcbicpO1xuICB9XG5cbiAgYXdhaXQgbWlncmF0b3Iuc3luYyh7IGZvcmNlIH0pO1xuICBjb25zb2xlLmxvZygnXFxuU2NoZW1hIHN5bmMgY29tcGxldGVkLicpO1xufVxuXG5mdW5jdGlvbiBwcmludEhlbHAoKSB7XG4gIGNvbnNvbGUubG9nKGBcbkB1cWwvbWlncmF0ZSAtIERhdGFiYXNlIG1pZ3JhdGlvbiB0b29sIGZvciB1cWwgT1JNXG5cblVzYWdlOiBAdXFsL21pZ3JhdGUgPGNvbW1hbmQ+IFtvcHRpb25zXVxuXG5Db21tYW5kczpcbiAgdXAgICAgICAgICAgICAgICAgICAgIFJ1biBhbGwgcGVuZGluZyBtaWdyYXRpb25zXG4gICAgLS10byA8bmFtZT4gICAgICAgICBSdW4gbWlncmF0aW9ucyB1cCB0byBhbmQgaW5jbHVkaW5nIDxuYW1lPlxuICAgIC0tc3RlcCA8bj4gICAgICAgICAgUnVuIG9ubHkgPG4+IG1pZ3JhdGlvbnNcblxuICBkb3duICAgICAgICAgICAgICAgICAgUm9sbGJhY2sgdGhlIGxhc3QgbWlncmF0aW9uXG4gICAgLS10byA8bmFtZT4gICAgICAgICBSb2xsYmFjayB0byAoYW5kIGluY2x1ZGluZykgbWlncmF0aW9uIDxuYW1lPlxuICAgIC0tc3RlcCA8bj4gICAgICAgICAgUm9sbGJhY2sgPG4+IG1pZ3JhdGlvbnMgKGRlZmF1bHQ6IDEpXG4gICAgLS1hbGwgICAgICAgICAgICAgICBSb2xsYmFjayBhbGwgbWlncmF0aW9uc1xuXG4gIHN0YXR1cyAgICAgICAgICAgICAgICBTaG93IG1pZ3JhdGlvbiBzdGF0dXNcblxuICBwZW5kaW5nICAgICAgICAgICAgICAgU2hvdyBwZW5kaW5nIG1pZ3JhdGlvbnNcblxuICBnZW5lcmF0ZSA8bmFtZT4gICAgICAgQ3JlYXRlIGEgbmV3IGVtcHR5IG1pZ3JhdGlvbiBmaWxlXG4gIGNyZWF0ZSA8bmFtZT4gICAgICAgICBBbGlhcyBmb3IgZ2VuZXJhdGVcblxuICBnZW5lcmF0ZTplbnRpdGllcyAgICAgR2VuZXJhdGUgbWlncmF0aW9uIGZyb20gZW50aXR5IGRlZmluaXRpb25zXG4gICAgPG5hbWU+ICAgICAgICAgICAgICBPcHRpb25hbCBuYW1lIGZvciB0aGUgbWlncmF0aW9uXG5cbiAgc3luYyAgICAgICAgICAgICAgICAgIFN5bmMgc2NoZW1hIGRpcmVjdGx5IChkZXZlbG9wbWVudCBvbmx5ISlcbiAgICAtLWZvcmNlICAgICAgICAgICAgIERyb3AgYW5kIHJlY3JlYXRlIGFsbCB0YWJsZXNcblxuQ29uZmlndXJhdGlvbjpcbiAgQ3JlYXRlIGEgdXFsLmNvbmZpZy50cyBvciB1cWwuY29uZmlnLmpzIGZpbGUgaW4geW91ciBwcm9qZWN0IHJvb3Q6XG5cbiAgZXhwb3J0IGRlZmF1bHQge1xuICAgIHF1ZXJpZXJQb29sOiBuZXcgUGdRdWVyaWVyUG9vbCh7IC4uLiB9KSxcbiAgICBtaWdyYXRpb25zUGF0aDogJy4vbWlncmF0aW9ucycsXG4gICAgdGFibGVOYW1lOiAndXFsX21pZ3JhdGlvbnMnLFxuICAgIGRpYWxlY3Q6ICdwb3N0Z3JlcycsIC8vICdwb3N0Z3JlcycgfCAnbXlzcWwnIHwgJ21hcmlhZGInIHwgJ3NxbGl0ZSdcbiAgICBlbnRpdGllczogW1VzZXIsIFBvc3QsIC4uLl0sXG4gIH07XG5cbkV4YW1wbGVzOlxuICBAdXFsL21pZ3JhdGUgdXBcbiAgQHVxbC9taWdyYXRlIHVwIC0tc3RlcCAxXG4gIEB1cWwvbWlncmF0ZSBkb3duXG4gIEB1cWwvbWlncmF0ZSBkb3duIC0tc3RlcCAzXG4gIEB1cWwvbWlncmF0ZSBzdGF0dXNcbiAgQHVxbC9taWdyYXRlIGdlbmVyYXRlIGFkZF91c2Vyc190YWJsZVxuICBAdXFsL21pZ3JhdGUgZ2VuZXJhdGU6ZW50aXRpZXMgaW5pdGlhbF9zY2hlbWFcbmApO1xufVxuXG5tYWluKCkuY2F0Y2goY29uc29sZS5lcnJvcik7XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export * from './mongoSchemaGenerator.js';
|
|
2
|
+
export { MysqlSchemaGenerator, MysqlSchemaGenerator as MariadbSchemaGenerator } from './mysqlSchemaGenerator.js';
|
|
3
|
+
export * from './postgresSchemaGenerator.js';
|
|
4
|
+
export * from './sqliteSchemaGenerator.js';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWlncmF0ZS9nZW5lcmF0b3IvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsY0FBYywyQkFBMkIsQ0FBQztBQUMxQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsb0JBQW9CLElBQUksc0JBQXNCLEVBQUUsTUFBTSwyQkFBMkIsQ0FBQztBQUNqSCxjQUFjLDhCQUE4QixDQUFDO0FBQzdDLGNBQWMsNEJBQTRCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL21vbmdvU2NoZW1hR2VuZXJhdG9yLmpzJztcbmV4cG9ydCB7IE15c3FsU2NoZW1hR2VuZXJhdG9yLCBNeXNxbFNjaGVtYUdlbmVyYXRvciBhcyBNYXJpYWRiU2NoZW1hR2VuZXJhdG9yIH0gZnJvbSAnLi9teXNxbFNjaGVtYUdlbmVyYXRvci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3Bvc3RncmVzU2NoZW1hR2VuZXJhdG9yLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vc3FsaXRlU2NoZW1hR2VuZXJhdG9yLmpzJztcbiJdfQ==
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { AbstractDialect } from '../../dialect/index.js';
|
|
2
|
+
import type { IndexSchema, SchemaDiff, SchemaGenerator, TableSchema, Type } from '../../type/index.js';
|
|
3
|
+
export declare class MongoSchemaGenerator extends AbstractDialect implements SchemaGenerator {
|
|
4
|
+
generateCreateTable<E>(entity: Type<E>): string;
|
|
5
|
+
generateDropTable<E>(entity: Type<E>): string;
|
|
6
|
+
generateAlterTable(diff: SchemaDiff): string[];
|
|
7
|
+
generateAlterTableDown(diff: SchemaDiff): string[];
|
|
8
|
+
generateCreateIndex(tableName: string, index: IndexSchema): string;
|
|
9
|
+
generateDropIndex(tableName: string, indexName: string): string;
|
|
10
|
+
getSqlType(): string;
|
|
11
|
+
diffSchema<E>(entity: Type<E>, currentSchema: TableSchema | undefined): SchemaDiff | undefined;
|
|
12
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import { AbstractDialect } from '../../dialect/index.js';
|
|
2
|
+
import { getMeta } from '../../entity/index.js';
|
|
3
|
+
export class MongoSchemaGenerator extends AbstractDialect {
|
|
4
|
+
generateCreateTable(entity) {
|
|
5
|
+
const meta = getMeta(entity);
|
|
6
|
+
const collectionName = this.resolveTableName(entity, meta);
|
|
7
|
+
const indexes = [];
|
|
8
|
+
for (const key in meta.fields) {
|
|
9
|
+
const field = meta.fields[key];
|
|
10
|
+
if (field.index) {
|
|
11
|
+
const columnName = this.resolveColumnName(key, field);
|
|
12
|
+
const indexName = typeof field.index === 'string' ? field.index : `idx_${collectionName}_${columnName}`;
|
|
13
|
+
indexes.push({
|
|
14
|
+
name: indexName,
|
|
15
|
+
columns: [columnName],
|
|
16
|
+
unique: !!field.unique,
|
|
17
|
+
});
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
return JSON.stringify({ action: 'createCollection', name: collectionName, indexes });
|
|
21
|
+
}
|
|
22
|
+
generateDropTable(entity) {
|
|
23
|
+
const meta = getMeta(entity);
|
|
24
|
+
const collectionName = this.resolveTableName(entity, meta);
|
|
25
|
+
return JSON.stringify({ action: 'dropCollection', name: collectionName });
|
|
26
|
+
}
|
|
27
|
+
generateAlterTable(diff) {
|
|
28
|
+
const statements = [];
|
|
29
|
+
if (diff.indexesToAdd?.length) {
|
|
30
|
+
for (const index of diff.indexesToAdd) {
|
|
31
|
+
statements.push(this.generateCreateIndex(diff.tableName, index));
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
return statements;
|
|
35
|
+
}
|
|
36
|
+
generateAlterTableDown(diff) {
|
|
37
|
+
const statements = [];
|
|
38
|
+
if (diff.indexesToAdd?.length) {
|
|
39
|
+
for (const index of diff.indexesToAdd) {
|
|
40
|
+
statements.push(this.generateDropIndex(diff.tableName, index.name));
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return statements;
|
|
44
|
+
}
|
|
45
|
+
generateCreateIndex(tableName, index) {
|
|
46
|
+
const key = {};
|
|
47
|
+
for (const col of index.columns) {
|
|
48
|
+
key[col] = 1;
|
|
49
|
+
}
|
|
50
|
+
return JSON.stringify({
|
|
51
|
+
action: 'createIndex',
|
|
52
|
+
collection: tableName,
|
|
53
|
+
name: index.name,
|
|
54
|
+
key,
|
|
55
|
+
options: { unique: index.unique, name: index.name },
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
generateDropIndex(tableName, indexName) {
|
|
59
|
+
return JSON.stringify({
|
|
60
|
+
action: 'dropIndex',
|
|
61
|
+
collection: tableName,
|
|
62
|
+
name: indexName,
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
getSqlType() {
|
|
66
|
+
return '';
|
|
67
|
+
}
|
|
68
|
+
diffSchema(entity, currentSchema) {
|
|
69
|
+
const meta = getMeta(entity);
|
|
70
|
+
const collectionName = this.resolveTableName(entity, meta);
|
|
71
|
+
if (!currentSchema) {
|
|
72
|
+
return { tableName: collectionName, type: 'create' };
|
|
73
|
+
}
|
|
74
|
+
const indexesToAdd = [];
|
|
75
|
+
const existingIndexes = new Set(currentSchema.indexes?.map((i) => i.name) ?? []);
|
|
76
|
+
for (const key in meta.fields) {
|
|
77
|
+
const field = meta.fields[key];
|
|
78
|
+
if (field.index) {
|
|
79
|
+
const columnName = this.resolveColumnName(key, field);
|
|
80
|
+
const indexName = typeof field.index === 'string' ? field.index : `idx_${collectionName}_${columnName}`;
|
|
81
|
+
if (!existingIndexes.has(indexName)) {
|
|
82
|
+
indexesToAdd.push({
|
|
83
|
+
name: indexName,
|
|
84
|
+
columns: [columnName],
|
|
85
|
+
unique: !!field.unique,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
if (indexesToAdd.length === 0) {
|
|
91
|
+
return undefined;
|
|
92
|
+
}
|
|
93
|
+
return {
|
|
94
|
+
tableName: collectionName,
|
|
95
|
+
type: 'alter',
|
|
96
|
+
indexesToAdd,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibW9uZ29TY2hlbWFHZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWlncmF0ZS9nZW5lcmF0b3IvbW9uZ29TY2hlbWFHZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSx1QkFBdUIsQ0FBQztBQUdoRCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsZUFBZTtJQUN2RCxtQkFBbUIsQ0FBSSxNQUFlO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUM3QixNQUFNLGNBQWMsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQzNELE1BQU0sT0FBTyxHQUFrQixFQUFFLENBQUM7UUFFbEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUM7WUFDOUIsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUMvQixJQUFJLEtBQUssQ0FBQyxLQUFLLEVBQUUsQ0FBQztnQkFDaEIsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztnQkFDdEQsTUFBTSxTQUFTLEdBQUcsT0FBTyxLQUFLLENBQUMsS0FBSyxLQUFLLFFBQVEsQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsT0FBTyxjQUFjLElBQUksVUFBVSxFQUFFLENBQUM7Z0JBQ3hHLE9BQU8sQ0FBQyxJQUFJLENBQUM7b0JBQ1gsSUFBSSxFQUFFLFNBQVM7b0JBQ2YsT0FBTyxFQUFFLENBQUMsVUFBVSxDQUFDO29CQUNyQixNQUFNLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFN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dXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0RGlhbGVjdCB9IGZyb20gJy4uLy4uL2RpYWxlY3QvaW5kZXguanMnO1xuaW1wb3J0IHsgZ2V0TWV0YSB9IGZyb20gJy4uLy4uL2VudGl0eS9pbmRleC5qcyc7XG5pbXBvcnQgdHlwZSB7IEluZGV4U2NoZW1hLCBTY2hlbWFEaWZmLCBTY2hlbWFHZW5lcmF0b3IsIFRhYmxlU2NoZW1hLCBUeXBlIH0gZnJvbSAnLi4vLi4vdHlwZS9pbmRleC5qcyc7XG5cbmV4cG9ydCBjbGFzcyBNb25nb1NjaGVtYUdlbmVyYXRvciBleHRlbmRzIEFic3RyYWN0RGlhbGVjdCBpbXBsZW1lbnRzIFNjaGVtYUdlbmVyYXRvciB7XG4gIGdlbmVyYXRlQ3JlYXRlVGFibGU8RT4oZW50aXR5OiBUeXBlPEU+KTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIGNvbnN0IGNvbGxlY3Rpb25OYW1lID0gdGhpcy5yZXNvbHZlVGFibGVOYW1lKGVudGl0eSwgbWV0YSk7XG4gICAgY29uc3QgaW5kZXhlczogSW5kZXhTY2hlbWFbXSA9IFtdO1xuXG4gICAgZm9yIChjb25zdCBrZXkgaW4gbWV0YS5maWVsZHMpIHtcbiAgICAgIGNvbnN0IGZpZWxkID0gbWV0YS5maWVsZHNba2V5XTtcbiAgICAgIGlmIChmaWVsZC5pbmRleCkge1xuICAgICAgICBjb25zdCBjb2x1bW5OYW1lID0gdGhpcy5yZXNvbHZlQ29sdW1uTmFtZShrZXksIGZpZWxkKTtcbiAgICAgICAgY29uc3QgaW5kZXhOYW1lID0gdHlwZW9mIGZpZWxkLmluZGV4ID09PSAnc3RyaW5nJyA/IGZpZWxkLmluZGV4IDogYGlkeF8ke2NvbGxlY3Rpb25OYW1lfV8ke2NvbHVtbk5hbWV9YDtcbiAgICAgICAgaW5kZXhlcy5wdXNoKHtcbiAgICAgICAgICBuYW1lOiBpbmRleE5hbWUsXG4gICAgICAgICAgY29sdW1uczogW2NvbHVtbk5hbWVdLFxuICAgICAgICAgIHVuaXF1ZTogISFmaWVsZC51bmlxdWUsXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7IGFjdGlvbjogJ2NyZWF0ZUNvbGxlY3Rpb24nLCBuYW1lOiBjb2xsZWN0aW9uTmFtZSwgaW5kZXhlcyB9KTtcbiAgfVxuXG4gIGdlbmVyYXRlRHJvcFRhYmxlPEU+KGVudGl0eTogVHlwZTxFPik6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcbiAgICBjb25zdCBjb2xsZWN0aW9uTmFtZSA9IHRoaXMucmVzb2x2ZVRhYmxlTmFtZShlbnRpdHksIG1ldGEpO1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7IGFjdGlvbjogJ2Ryb3BDb2xsZWN0aW9uJywgbmFtZTogY29sbGVjdGlvbk5hbWUgfSk7XG4gIH1cblxuICBnZW5lcmF0ZUFsdGVyVGFibGUoZGlmZjogU2NoZW1hRGlmZik6IHN0cmluZ1tdIHtcbiAgICBjb25zdCBzdGF0ZW1lbnRzOiBzdHJpbmdbXSA9IFtdO1xuICAgIGlmIChkaWZmLmluZGV4ZXNUb0FkZD8ubGVuZ3RoKSB7XG4gICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGRpZmYuaW5kZXhlc1RvQWRkKSB7XG4gICAgICAgIHN0YXRlbWVudHMucHVzaCh0aGlzLmdlbmVyYXRlQ3JlYXRlSW5kZXgoZGlmZi50YWJsZU5hbWUsIGluZGV4KSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdGF0ZW1lbnRzO1xuICB9XG5cbiAgZ2VuZXJhdGVBbHRlclRhYmxlRG93bihkaWZmOiBTY2hlbWFEaWZmKTogc3RyaW5nW10ge1xuICAgIGNvbnN0IHN0YXRlbWVudHM6IHN0cmluZ1tdID0gW107XG4gICAgaWYgKGRpZmYuaW5kZXhlc1RvQWRkPy5sZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3QgaW5kZXggb2YgZGlmZi5pbmRleGVzVG9BZGQpIHtcbiAgICAgICAgc3RhdGVtZW50cy5wdXNoKHRoaXMuZ2VuZXJhdGVEcm9wSW5kZXgoZGlmZi50YWJsZU5hbWUsIGluZGV4Lm5hbWUpKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHN0YXRlbWVudHM7XG4gIH1cblxuICBnZW5lcmF0ZUNyZWF0ZUluZGV4KHRhYmxlTmFtZTogc3RyaW5nLCBpbmRleDogSW5kZXhTY2hlbWEpOiBzdHJpbmcge1xuICAgIGNvbnN0IGtleTogUmVjb3JkPHN0cmluZywgbnVtYmVyPiA9IHt9O1xuICAgIGZvciAoY29uc3QgY29sIG9mIGluZGV4LmNvbHVtbnMpIHtcbiAgICAgIGtleVtjb2xdID0gMTtcbiAgICB9XG4gICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGFjdGlvbjogJ2NyZWF0ZUluZGV4JyxcbiAgICAgIGNvbGxlY3Rpb246IHRhYmxlTmFtZSxcbiAgICAgIG5hbWU6IGluZGV4Lm5hbWUsXG4gICAgICBrZXksXG4gICAgICBvcHRpb25zOiB7IHVuaXF1ZTogaW5kZXgudW5pcXVlLCBuYW1lOiBpbmRleC5uYW1lIH0sXG4gICAgfSk7XG4gIH1cblxuICBnZW5lcmF0ZURyb3BJbmRleCh0YWJsZU5hbWU6IHN0cmluZywgaW5kZXhOYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICBhY3Rpb246ICdkcm9wSW5kZXgnLFxuICAgICAgY29sbGVjdGlvbjogdGFibGVOYW1lLFxuICAgICAgbmFtZTogaW5kZXhOYW1lLFxuICAgIH0pO1xuICB9XG5cbiAgZ2V0U3FsVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnJztcbiAgfVxuXG4gIGRpZmZTY2hlbWE8RT4oZW50aXR5OiBUeXBlPEU+LCBjdXJyZW50U2NoZW1hOiBUYWJsZVNjaGVtYSB8IHVuZGVmaW5lZCk6IFNjaGVtYURpZmYgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgY29uc3QgY29sbGVjdGlvbk5hbWUgPSB0aGlzLnJlc29sdmVUYWJsZU5hbWUoZW50aXR5LCBtZXRhKTtcblxuICAgIGlmICghY3VycmVudFNjaGVtYSkge1xuICAgICAgcmV0dXJuIHsgdGFibGVOYW1lOiBjb2xsZWN0aW9uTmFtZSwgdHlwZTogJ2NyZWF0ZScgfTtcbiAgICB9XG5cbiAgICBjb25zdCBpbmRleGVzVG9BZGQ6IEluZGV4U2NoZW1hW10gPSBbXTtcbiAgICBjb25zdCBleGlzdGluZ0luZGV4ZXMgPSBuZXcgU2V0KGN1cnJlbnRTY2hlbWEuaW5kZXhlcz8ubWFwKChpOiBJbmRleFNjaGVtYSkgPT4gaS5uYW1lKSA/PyBbXSk7XG5cbiAgICBmb3IgKGNvbnN0IGtleSBpbiBtZXRhLmZpZWxkcykge1xuICAgICAgY29uc3QgZmllbGQgPSBtZXRhLmZpZWxkc1trZXldO1xuICAgICAgaWYgKGZpZWxkLmluZGV4KSB7XG4gICAgICAgIGNvbnN0IGNvbHVtbk5hbWUgPSB0aGlzLnJlc29sdmVDb2x1bW5OYW1lKGtleSwgZmllbGQpO1xuICAgICAgICBjb25zdCBpbmRleE5hbWUgPSB0eXBlb2YgZmllbGQuaW5kZXggPT09ICdzdHJpbmcnID8gZmllbGQuaW5kZXggOiBgaWR4XyR7Y29sbGVjdGlvbk5hbWV9XyR7Y29sdW1uTmFtZX1gO1xuICAgICAgICBpZiAoIWV4aXN0aW5nSW5kZXhlcy5oYXMoaW5kZXhOYW1lKSkge1xuICAgICAgICAgIGluZGV4ZXNUb0FkZC5wdXNoKHtcbiAgICAgICAgICAgIG5hbWU6IGluZGV4TmFtZSxcbiAgICAgICAgICAgIGNvbHVtbnM6IFtjb2x1bW5OYW1lXSxcbiAgICAgICAgICAgIHVuaXF1ZTogISFmaWVsZC51bmlxdWUsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5kZXhlc1RvQWRkLmxlbmd0aCA9PT0gMCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICByZXR1cm4ge1xuICAgICAgdGFibGVOYW1lOiBjb2xsZWN0aW9uTmFtZSxcbiAgICAgIHR5cGU6ICdhbHRlcicsXG4gICAgICBpbmRleGVzVG9BZGQsXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { ColumnSchema, ColumnType, FieldOptions } from '../../type/index.js';
|
|
2
|
+
import { AbstractSchemaGenerator } from '../schemaGenerator.js';
|
|
3
|
+
/**
|
|
4
|
+
* MySQL/MariaDB-specific schema generator
|
|
5
|
+
*/
|
|
6
|
+
export declare class MysqlSchemaGenerator extends AbstractSchemaGenerator {
|
|
7
|
+
protected readonly serialPrimaryKeyType = "INT AUTO_INCREMENT PRIMARY KEY";
|
|
8
|
+
mapColumnType(columnType: ColumnType, field: FieldOptions): string;
|
|
9
|
+
getBooleanType(): string;
|
|
10
|
+
generateAlterColumnStatements(tableName: string, column: ColumnSchema, newDefinition: string): string[];
|
|
11
|
+
generateColumnComment(tableName: string, columnName: string, comment: string): string;
|
|
12
|
+
getTableOptions<E>(): string;
|
|
13
|
+
generateDropIndex(tableName: string, indexName: string): string;
|
|
14
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { AbstractSchemaGenerator } from '../schemaGenerator.js';
|
|
2
|
+
/**
|
|
3
|
+
* MySQL/MariaDB-specific schema generator
|
|
4
|
+
*/
|
|
5
|
+
export class MysqlSchemaGenerator extends AbstractSchemaGenerator {
|
|
6
|
+
serialPrimaryKeyType = 'INT AUTO_INCREMENT PRIMARY KEY';
|
|
7
|
+
mapColumnType(columnType, field) {
|
|
8
|
+
switch (columnType) {
|
|
9
|
+
case 'int':
|
|
10
|
+
return 'INT';
|
|
11
|
+
case 'smallint':
|
|
12
|
+
return 'SMALLINT';
|
|
13
|
+
case 'bigint':
|
|
14
|
+
return 'BIGINT';
|
|
15
|
+
case 'float':
|
|
16
|
+
return 'FLOAT';
|
|
17
|
+
case 'double':
|
|
18
|
+
case 'real':
|
|
19
|
+
return 'DOUBLE';
|
|
20
|
+
case 'decimal':
|
|
21
|
+
case 'numeric':
|
|
22
|
+
if (field.precision !== undefined) {
|
|
23
|
+
if (field.scale !== undefined) {
|
|
24
|
+
return `DECIMAL(${field.precision}, ${field.scale})`;
|
|
25
|
+
}
|
|
26
|
+
return `DECIMAL(${field.precision})`;
|
|
27
|
+
}
|
|
28
|
+
return 'DECIMAL(10, 2)';
|
|
29
|
+
case 'boolean':
|
|
30
|
+
return 'TINYINT(1)';
|
|
31
|
+
case 'char':
|
|
32
|
+
return `CHAR(${field.length ?? 1})`;
|
|
33
|
+
case 'varchar':
|
|
34
|
+
return `VARCHAR(${field.length ?? 255})`;
|
|
35
|
+
case 'text':
|
|
36
|
+
return 'TEXT';
|
|
37
|
+
case 'uuid':
|
|
38
|
+
return 'CHAR(36)';
|
|
39
|
+
case 'date':
|
|
40
|
+
return 'DATE';
|
|
41
|
+
case 'time':
|
|
42
|
+
return 'TIME';
|
|
43
|
+
case 'timestamp':
|
|
44
|
+
case 'timestamptz':
|
|
45
|
+
return 'TIMESTAMP';
|
|
46
|
+
case 'json':
|
|
47
|
+
case 'jsonb':
|
|
48
|
+
return 'JSON';
|
|
49
|
+
case 'blob':
|
|
50
|
+
case 'bytea':
|
|
51
|
+
return 'BLOB';
|
|
52
|
+
case 'vector':
|
|
53
|
+
// MySQL doesn't have native vector support, use JSON
|
|
54
|
+
return 'JSON';
|
|
55
|
+
case 'serial':
|
|
56
|
+
return 'INT AUTO_INCREMENT';
|
|
57
|
+
case 'bigserial':
|
|
58
|
+
return 'BIGINT AUTO_INCREMENT';
|
|
59
|
+
default:
|
|
60
|
+
return 'TEXT';
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
getBooleanType() {
|
|
64
|
+
return 'TINYINT(1)';
|
|
65
|
+
}
|
|
66
|
+
generateAlterColumnStatements(tableName, column, newDefinition) {
|
|
67
|
+
return [`ALTER TABLE ${this.escapeId(tableName)} MODIFY COLUMN ${newDefinition};`];
|
|
68
|
+
}
|
|
69
|
+
generateColumnComment(tableName, columnName, comment) {
|
|
70
|
+
const escapedComment = comment.replace(/'/g, "''");
|
|
71
|
+
return ` COMMENT '${escapedComment}'`;
|
|
72
|
+
}
|
|
73
|
+
getTableOptions() {
|
|
74
|
+
return ' ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci';
|
|
75
|
+
}
|
|
76
|
+
generateDropIndex(tableName, indexName) {
|
|
77
|
+
// MySQL requires table name in DROP INDEX
|
|
78
|
+
return `DROP INDEX ${this.escapeId(indexName)} ON ${this.escapeId(tableName)};`;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXlzcWxTY2hlbWFHZW5lcmF0b3IuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi9zcmMvbWlncmF0ZS9nZW5lcmF0b3IvbXlzcWxTY2hlbWFHZW5lcmF0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQ0EsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFaEU7O0dBRUc7QUFDSCxNQUFNLE9BQU8sb0JBQXFCLFNBQVEsdUJBQXVCO0lBQzVDLG9CQUFvQixHQUFHLGdDQUFnQyxDQUFDO0lBRTNELGFBQWEsQ0FBQyxVQUFzQixFQUFFLEtBQW1CO1FBQ3ZFLFFBQVEsVUFBVSxFQUFFLENBQUM7WUFDbkIsS0FBSyxLQUFLO2dCQUNSLE9BQU8sS0FBSyxDQUFDO1lBQ2YsS0FBSyxVQUFVO2dCQUNiLE9BQU8sVUFBVSxDQUFDO1lBQ3BCLEtBQUssUUFBUTtnQkFDWCxPQUFPLFFBQVEsQ0FBQztZQUNsQixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxPQUFPLENBQUM7WUFDakIsS0FBSyxRQUFRLENBQUM7WUFDZCxLQUFLLE1BQU07Z0JBQ1QsT0FBTyxRQUFRLENBQUM7WUFDbEIsS0FBSyxTQUFTLENBQUM7WUFDZixLQUFLLFNBQVM7Z0JBQ1osSUFBSSxLQUFLLENBQUMsU0FBUyxLQUFLLFNBQVMsRUFBRSxDQUFDO29CQUNsQyxJQUFJLEtBQUssQ0FBQyxLQUFLLEtBQUssU0FBUyxFQUFFLENBQUM7d0JBQzlCLE9BQU8sV0FBVyxLQUFLLENBQUMsU0FBUyxLQUFLLEtBQUssQ0FBQyxLQUFLLEdBQUcsQ0FBQztvQkFDdkQsQ0FBQztvQkFDRCxPQUFPLFdBQVcsS0FBSyxDQUFDLFNBQVMsR0FBRyxDQUFDO2dCQUN2QyxDQUFDO2dCQUNELE9BQU8sZ0JBQWdCLENBQUM7WUFDMUIsS0FBSyxTQUFTO2dCQUNaLE9BQU8sWUFBWSxDQUFDO1lBQ3RCLEtBQUssTUFBTTtnQkFDVCxPQUFPLFFBQVEsS0FBSyxDQUFDLE1BQU0sSUFBSSxDQUFDLEdBQUcsQ0FBQztZQUN0QyxLQUFLLFNBQVM7Z0JBQ1osT0FBTyxXQUFXLEtBQUssQ0FBQyxNQUFNLElBQUksR0FBRyxHQUFHLENBQUM7WUFDM0MsS0FBSyxNQUFNO2dCQUNULE9BQU8sTUFBTSxDQUFDO1lBQ2hCLEtBQUssTUFBTTtnQkFDVCxPQUFPLFVBQVUsQ0FBQztZQUNwQixLQUFLLE1BQU07Z0JBQ1QsT0FBTyxNQUFNLENBQUM7WUFDaEIsS0FBSyxNQUFNO2dCQUNULE9BQU8sTUFBTSxDQUFDO1lBQ2hCLEtBQUssV0FBVyxDQUFDO1lBQ2pCLEtBQUssYUFBYTtnQkFDaEIsT0FBTyxXQUFXLENBQUM7WUFDckIsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxNQUFNLENBQUM7WUFDaEIsS0FBSyxNQUFNLENBQUM7WUFDWixLQUFLLE9BQU87Z0JBQ1YsT0FBTyxNQUFNLENBQUM7WUFDaEIsS0FBSyxRQUFRO2dCQUNYLHFEQUFxRDtnQkFDckQsT0FBTyxNQUFNLENBQUM7WUFDaEIsS0FBSyxRQUFRO2dCQUNYLE9BQU8sb0JBQW9CLENBQUM7WUFDOUIsS0FBSyxXQUFXO2dCQUNkLE9BQU8sdUJBQXVCLENBQUM7WUFDakM7Z0JBQ0UsT0FBTyxNQUFNLENBQUM7UUFDbEIsQ0FBQztJQUNILENBQUM7SUFFZSxjQUFjO1FBQzVCLE9BQU8sWUFBWSxDQUFDO0lBQ3RCLENBQUM7SUFFZSw2QkFBNkIsQ0FDM0MsU0FBaUIsRUFDakIsTUFBb0IsRUFDcEIsYUFBcUI7UUFFckIsT0FBTyxDQUFDLGVBQWUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsa0JBQWtCLGFBQWEsR0FBRyxDQUFDLENBQUM7SUFDckYsQ0FBQztJQUVlLHFCQUFxQixDQUFDLFNBQWlCLEVBQUUsVUFBa0IsRUFBRSxPQUFlO1FBQzFGLE1BQU0sY0FBYyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ25ELE9BQU8sYUFBYSxjQUFjLEdBQUcsQ0FBQztJQUN4QyxDQUFDO0lBRVEsZUFBZTtRQUN0QixPQUFPLG1FQUFtRSxDQUFDO0lBQzdFLENBQUM7SUFFUSxpQkFBaUIsQ0FBQyxTQUFpQixFQUFFLFNBQWlCO1FBQzdELDBDQUEwQztRQUMxQyxPQUFPLGNBQWMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUM7SUFDbEYsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBDb2x1bW5TY2hlbWEsIENvbHVtblR5cGUsIEZpZWxkT3B0aW9ucyB9IGZyb20gJy4uLy4uL3R5cGUvaW5kZXguanMnO1xuaW1wb3J0IHsgQWJzdHJhY3RTY2hlbWFHZW5lcmF0b3IgfSBmcm9tICcuLi9zY2hlbWFHZW5lcmF0b3IuanMnO1xuXG4vKipcbiAqIE15U1FML01hcmlhREItc3BlY2lmaWMgc2NoZW1hIGdlbmVyYXRvclxuICovXG5leHBvcnQgY2xhc3MgTXlzcWxTY2hlbWFHZW5lcmF0b3IgZXh0ZW5kcyBBYnN0cmFjdFNjaGVtYUdlbmVyYXRvciB7XG4gIHByb3RlY3RlZCByZWFkb25seSBzZXJpYWxQcmltYXJ5S2V5VHlwZSA9ICdJTlQgQVVUT19JTkNSRU1FTlQgUFJJTUFSWSBLRVknO1xuXG4gIHB1YmxpYyBvdmVycmlkZSBtYXBDb2x1bW5UeXBlKGNvbHVtblR5cGU6IENvbHVtblR5cGUsIGZpZWxkOiBGaWVsZE9wdGlvbnMpOiBzdHJpbmcge1xuICAgIHN3aXRjaCAoY29sdW1uVHlwZSkge1xuICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgcmV0dXJuICdJTlQnO1xuICAgICAgY2FzZSAnc21hbGxpbnQnOlxuICAgICAgICByZXR1cm4gJ1NNQUxMSU5UJztcbiAgICAgIGNhc2UgJ2JpZ2ludCc6XG4gICAgICAgIHJldHVybiAnQklHSU5UJztcbiAgICAgIGNhc2UgJ2Zsb2F0JzpcbiAgICAgICAgcmV0dXJuICdGTE9BVCc7XG4gICAgICBjYXNlICdkb3VibGUnOlxuICAgICAgY2FzZSAncmVhbCc6XG4gICAgICAgIHJldHVybiAnRE9VQkxFJztcbiAgICAgIGNhc2UgJ2RlY2ltYWwnOlxuICAgICAgY2FzZSAnbnVtZXJpYyc6XG4gICAgICAgIGlmIChmaWVsZC5wcmVjaXNpb24gIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgIGlmIChmaWVsZC5zY2FsZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgICAgICByZXR1cm4gYERFQ0lNQUwoJHtmaWVsZC5wcmVjaXNpb259LCAke2ZpZWxkLnNjYWxlfSlgO1xuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gYERFQ0lNQUwoJHtmaWVsZC5wcmVjaXNpb259KWA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuICdERUNJTUFMKDEwLCAyKSc7XG4gICAgICBjYXNlICdib29sZWFuJzpcbiAgICAgICAgcmV0dXJuICdUSU5ZSU5UKDEpJztcbiAgICAgIGNhc2UgJ2NoYXInOlxuICAgICAgICByZXR1cm4gYENIQVIoJHtmaWVsZC5sZW5ndGggPz8gMX0pYDtcbiAgICAgIGNhc2UgJ3ZhcmNoYXInOlxuICAgICAgICByZXR1cm4gYFZBUkNIQVIoJHtmaWVsZC5sZW5ndGggPz8gMjU1fSlgO1xuICAgICAgY2FzZSAndGV4dCc6XG4gICAgICAgIHJldHVybiAnVEVYVCc7XG4gICAgICBjYXNlICd1dWlkJzpcbiAgICAgICAgcmV0dXJuICdDSEFSKDM2KSc7XG4gICAgICBjYXNlICdkYXRlJzpcbiAgICAgICAgcmV0dXJuICdEQVRFJztcbiAgICAgIGNhc2UgJ3RpbWUnOlxuICAgICAgICByZXR1cm4gJ1RJTUUnO1xuICAgICAgY2FzZSAndGltZXN0YW1wJzpcbiAgICAgIGNhc2UgJ3RpbWVzdGFtcHR6JzpcbiAgICAgICAgcmV0dXJuICdUSU1FU1RBTVAnO1xuICAgICAgY2FzZSAnanNvbic6XG4gICAgICBjYXNlICdqc29uYic6XG4gICAgICAgIHJldHVybiAnSlNPTic7XG4gICAgICBjYXNlICdibG9iJzpcbiAgICAgIGNhc2UgJ2J5dGVhJzpcbiAgICAgICAgcmV0dXJuICdCTE9CJztcbiAgICAgIGNhc2UgJ3ZlY3Rvcic6XG4gICAgICAgIC8vIE15U1FMIGRvZXNuJ3QgaGF2ZSBuYXRpdmUgdmVjdG9yIHN1cHBvcnQsIHVzZSBKU09OXG4gICAgICAgIHJldHVybiAnSlNPTic7XG4gICAgICBjYXNlICdzZXJpYWwnOlxuICAgICAgICByZXR1cm4gJ0lOVCBBVVRPX0lOQ1JFTUVOVCc7XG4gICAgICBjYXNlICdiaWdzZXJpYWwnOlxuICAgICAgICByZXR1cm4gJ0JJR0lOVCBBVVRPX0lOQ1JFTUVOVCc7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gJ1RFWFQnO1xuICAgIH1cbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBnZXRCb29sZWFuVHlwZSgpOiBzdHJpbmcge1xuICAgIHJldHVybiAnVElOWUlOVCgxKSc7XG4gIH1cblxuICBwdWJsaWMgb3ZlcnJpZGUgZ2VuZXJhdGVBbHRlckNvbHVtblN0YXRlbWVudHMoXG4gICAgdGFibGVOYW1lOiBzdHJpbmcsXG4gICAgY29sdW1uOiBDb2x1bW5TY2hlbWEsXG4gICAgbmV3RGVmaW5pdGlvbjogc3RyaW5nLFxuICApOiBzdHJpbmdbXSB7XG4gICAgcmV0dXJuIFtgQUxURVIgVEFCTEUgJHt0aGlzLmVzY2FwZUlkKHRhYmxlTmFtZSl9IE1PRElGWSBDT0xVTU4gJHtuZXdEZWZpbml0aW9ufTtgXTtcbiAgfVxuXG4gIHB1YmxpYyBvdmVycmlkZSBnZW5lcmF0ZUNvbHVtbkNvbW1lbnQodGFibGVOYW1lOiBzdHJpbmcsIGNvbHVtbk5hbWU6IHN0cmluZywgY29tbWVudDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBlc2NhcGVkQ29tbWVudCA9IGNvbW1lbnQucmVwbGFjZSgvJy9nLCBcIicnXCIpO1xuICAgIHJldHVybiBgIENPTU1FTlQgJyR7ZXNjYXBlZENvbW1lbnR9J2A7XG4gIH1cblxuICBvdmVycmlkZSBnZXRUYWJsZU9wdGlvbnM8RT4oKTogc3RyaW5nIHtcbiAgICByZXR1cm4gJyBFTkdJTkU9SW5ub0RCIERFRkFVTFQgQ0hBUlNFVD11dGY4bWI0IENPTExBVEU9dXRmOG1iNF91bmljb2RlX2NpJztcbiAgfVxuXG4gIG92ZXJyaWRlIGdlbmVyYXRlRHJvcEluZGV4KHRhYmxlTmFtZTogc3RyaW5nLCBpbmRleE5hbWU6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gTXlTUUwgcmVxdWlyZXMgdGFibGUgbmFtZSBpbiBEUk9QIElOREVYXG4gICAgcmV0dXJuIGBEUk9QIElOREVYICR7dGhpcy5lc2NhcGVJZChpbmRleE5hbWUpfSBPTiAke3RoaXMuZXNjYXBlSWQodGFibGVOYW1lKX07YDtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import type { ColumnSchema, ColumnType, FieldOptions, NamingStrategy } from '../../type/index.js';
|
|
2
|
+
import { AbstractSchemaGenerator } from '../schemaGenerator.js';
|
|
3
|
+
/**
|
|
4
|
+
* PostgreSQL-specific schema generator
|
|
5
|
+
*/
|
|
6
|
+
export declare class PostgresSchemaGenerator extends AbstractSchemaGenerator {
|
|
7
|
+
protected readonly serialPrimaryKeyType = "SERIAL PRIMARY KEY";
|
|
8
|
+
constructor(namingStrategy?: NamingStrategy);
|
|
9
|
+
mapColumnType(columnType: ColumnType, field: FieldOptions): string;
|
|
10
|
+
getBooleanType(): string;
|
|
11
|
+
generateAlterColumnStatements(tableName: string, column: ColumnSchema, newDefinition: string): string[];
|
|
12
|
+
generateColumnComment(tableName: string, columnName: string, comment: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Generate COMMENT ON COLUMN statement for PostgreSQL
|
|
15
|
+
*/
|
|
16
|
+
generateColumnCommentStatement(tableName: string, columnName: string, comment: string): string;
|
|
17
|
+
generateDropIndex(tableName: string, indexName: string): string;
|
|
18
|
+
}
|