@uql/core 1.0.11 → 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 +2 -2
- 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/dist/type/entity.d.ts +169 -0
- 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/dist/type/querierPool.d.ts +22 -0
- package/dist/type/querierPool.js +2 -0
- package/dist/type/query.d.ts +456 -0
- package/dist/type/query.js +9 -0
- package/{type → dist/type}/repository.d.ts +43 -36
- 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 +83 -15
- 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 -179
- 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.d.ts +0 -76
- 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.d.ts +0 -18
- package/type/querierPool.js +0 -3
- package/type/query.d.ts +0 -394
- 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,14 @@
|
|
|
1
|
+
/// <reference types="bun-types" resolution-mode="require"/>
|
|
2
|
+
import { afterAll, afterEach, beforeAll, beforeEach } from 'bun:test';
|
|
3
|
+
export declare function createSpec<T extends Spec>(spec: T): void;
|
|
4
|
+
declare const hooks: {
|
|
5
|
+
readonly beforeAll: typeof beforeAll;
|
|
6
|
+
readonly beforeEach: typeof beforeEach;
|
|
7
|
+
readonly afterEach: typeof afterEach;
|
|
8
|
+
readonly afterAll: typeof afterAll;
|
|
9
|
+
};
|
|
10
|
+
type SpecHooks = Partial<typeof hooks>;
|
|
11
|
+
export type Spec = SpecHooks & {
|
|
12
|
+
readonly [k: string]: (() => void | Promise<void>) | any;
|
|
13
|
+
};
|
|
14
|
+
export {};
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { afterAll, afterEach, beforeAll, beforeEach, describe, it } from 'bun:test';
|
|
2
|
+
export function createSpec(spec) {
|
|
3
|
+
const proto = Object.getPrototypeOf(spec);
|
|
4
|
+
let describeFn;
|
|
5
|
+
const specName = proto.constructor.name;
|
|
6
|
+
if (specName.startsWith('fff')) {
|
|
7
|
+
describeFn = describe.only;
|
|
8
|
+
}
|
|
9
|
+
else if (specName.startsWith('xxx')) {
|
|
10
|
+
describeFn = describe.skip;
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
describeFn = describe;
|
|
14
|
+
}
|
|
15
|
+
describeFn(specName, () => createTestCases(spec));
|
|
16
|
+
}
|
|
17
|
+
function createTestCases(spec) {
|
|
18
|
+
let proto = Object.getPrototypeOf(spec);
|
|
19
|
+
const processedMethodsMap = {};
|
|
20
|
+
while (proto.constructor !== Object) {
|
|
21
|
+
for (const key of Object.getOwnPropertyNames(proto)) {
|
|
22
|
+
const isProcessed = processedMethodsMap[key];
|
|
23
|
+
processedMethodsMap[key] = true;
|
|
24
|
+
if (isProcessed || key === 'constructor' || typeof spec[key] !== 'function') {
|
|
25
|
+
continue;
|
|
26
|
+
}
|
|
27
|
+
const callback = spec[key].bind(spec);
|
|
28
|
+
if (hooks[key]) {
|
|
29
|
+
hooks[key](callback);
|
|
30
|
+
}
|
|
31
|
+
else if (key.startsWith('should')) {
|
|
32
|
+
it(key, callback);
|
|
33
|
+
}
|
|
34
|
+
else if (key.startsWith('fffShould')) {
|
|
35
|
+
it.only(key, callback);
|
|
36
|
+
}
|
|
37
|
+
else if (key.startsWith('xxxShould')) {
|
|
38
|
+
it.skip(key, callback);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
proto = Object.getPrototypeOf(proto);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const hooks = {
|
|
45
|
+
beforeAll,
|
|
46
|
+
beforeEach,
|
|
47
|
+
afterEach,
|
|
48
|
+
afterAll,
|
|
49
|
+
};
|
|
50
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3BlYy51dGlsLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3Rlc3Qvc3BlYy51dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEVBQUUsRUFBRSxNQUFNLFVBQVUsQ0FBQztBQUVwRixNQUFNLFVBQVUsVUFBVSxDQUFpQixJQUFPO0lBQ2hELE1BQU0sS0FBSyxHQUF3QixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQy9ELElBQUksVUFBMkIsQ0FBQztJQUNoQyxNQUFNLFFBQVEsR0FBRyxLQUFLLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQztJQUV4QyxJQUFJLFFBQVEsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztRQUMvQixVQUFVLEdBQUcsUUFBUSxDQUFDLElBQUksQ0FBQztJQUM3QixDQUFDO1NBQU0sSUFBSSxRQUFRLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxFQUFFLENBQUM7UUFDdEMsVUFBVSxHQUFHLFFBQVEsQ0FBQyxJQUFJLENBQUM7SUFDN0IsQ0FBQztTQUFNLENBQUM7UUFDTixVQUFVLEdBQUcsUUFBUSxDQUFDO0lBQ3hCLENBQUM7SUFFRCxVQUFVLENBQUMsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BELENBQUM7QUFFRCxTQUFTLGVBQWUsQ0FBQyxJQUFZO0lBQ25DLElBQUksS0FBSyxHQUF3QixNQUFNLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDO0lBRTdELE1BQU0sbUJBQW1CLEdBQTBCLEVBQUUsQ0FBQztJQUV0RCxPQUFPLEtBQUssQ0FBQyxXQUFXLEtBQUssTUFBTSxFQUFFLENBQUM7UUFDcEMsS0FBSyxNQUFNLEdBQUcsSUFBSSxNQUFNLENBQUMsbUJBQW1CLENBQUMsS0FBSyxDQUFDLEVBQUUsQ0FBQztZQUNwRCxNQUFNLFdBQVcsR0FBRyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM3QyxtQkFBbUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUM7WUFDaEMsSUFBSSxXQUFXLElBQUksR0FBRyxLQUFLLGFBQWEsSUFBSSxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxVQUFVLEVBQUUsQ0FBQztnQkFDNUUsU0FBUztZQUNYLENBQUM7WUFDRCxNQUFNLFFBQVEsR0FBK0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztZQUNsRSxJQUFJLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO2dCQUNmLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxRQUFRLENBQUMsQ0FBQztZQUN2QixDQUFDO2lCQUFNLElBQUksR0FBRyxDQUFDLFVBQVUsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDO2dCQUNwQyxFQUFFLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3BCLENBQUM7aUJBQU0sSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3pCLENBQUM7aUJBQU0sSUFBSSxHQUFHLENBQUMsVUFBVSxDQUFDLFdBQVcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3ZDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLFFBQVEsQ0FBQyxDQUFDO1lBQ3pCLENBQUM7UUFDSCxDQUFDO1FBQ0QsS0FBSyxHQUFHLE1BQU0sQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDdkMsQ0FBQztBQUNILENBQUM7QUFFRCxNQUFNLEtBQUssR0FBRztJQUNaLFNBQVM7SUFDVCxVQUFVO0lBQ1YsU0FBUztJQUNULFFBQVE7Q0FDQSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWZ0ZXJBbGwsIGFmdGVyRWFjaCwgYmVmb3JlQWxsLCBiZWZvcmVFYWNoLCBkZXNjcmliZSwgaXQgfSBmcm9tICdidW46dGVzdCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTcGVjPFQgZXh0ZW5kcyBTcGVjPihzcGVjOiBUKSB7XG4gIGNvbnN0IHByb3RvOiBGdW5jdGlvbkNvbnN0cnVjdG9yID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHNwZWMpO1xuICBsZXQgZGVzY3JpYmVGbjogdHlwZW9mIGRlc2NyaWJlO1xuICBjb25zdCBzcGVjTmFtZSA9IHByb3RvLmNvbnN0cnVjdG9yLm5hbWU7XG5cbiAgaWYgKHNwZWNOYW1lLnN0YXJ0c1dpdGgoJ2ZmZicpKSB7XG4gICAgZGVzY3JpYmVGbiA9IGRlc2NyaWJlLm9ubHk7XG4gIH0gZWxzZSBpZiAoc3BlY05hbWUuc3RhcnRzV2l0aCgneHh4JykpIHtcbiAgICBkZXNjcmliZUZuID0gZGVzY3JpYmUuc2tpcDtcbiAgfSBlbHNlIHtcbiAgICBkZXNjcmliZUZuID0gZGVzY3JpYmU7XG4gIH1cblxuICBkZXNjcmliZUZuKHNwZWNOYW1lLCAoKSA9PiBjcmVhdGVUZXN0Q2FzZXMoc3BlYykpO1xufVxuXG5mdW5jdGlvbiBjcmVhdGVUZXN0Q2FzZXMoc3BlYzogb2JqZWN0KSB7XG4gIGxldCBwcm90bzogRnVuY3Rpb25Db25zdHJ1Y3RvciA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihzcGVjKTtcblxuICBjb25zdCBwcm9jZXNzZWRNZXRob2RzTWFwOiB7IFtrOiBzdHJpbmddOiB0cnVlIH0gPSB7fTtcblxuICB3aGlsZSAocHJvdG8uY29uc3RydWN0b3IgIT09IE9iamVjdCkge1xuICAgIGZvciAoY29uc3Qga2V5IG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHByb3RvKSkge1xuICAgICAgY29uc3QgaXNQcm9jZXNzZWQgPSBwcm9jZXNzZWRNZXRob2RzTWFwW2tleV07XG4gICAgICBwcm9jZXNzZWRNZXRob2RzTWFwW2tleV0gPSB0cnVlO1xuICAgICAgaWYgKGlzUHJvY2Vzc2VkIHx8IGtleSA9PT0gJ2NvbnN0cnVjdG9yJyB8fCB0eXBlb2Ygc3BlY1trZXldICE9PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY29uc3QgY2FsbGJhY2s6ICgpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+ID0gc3BlY1trZXldLmJpbmQoc3BlYyk7XG4gICAgICBpZiAoaG9va3Nba2V5XSkge1xuICAgICAgICBob29rc1trZXldKGNhbGxiYWNrKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5LnN0YXJ0c1dpdGgoJ3Nob3VsZCcpKSB7XG4gICAgICAgIGl0KGtleSwgY2FsbGJhY2spO1xuICAgICAgfSBlbHNlIGlmIChrZXkuc3RhcnRzV2l0aCgnZmZmU2hvdWxkJykpIHtcbiAgICAgICAgaXQub25seShrZXksIGNhbGxiYWNrKTtcbiAgICAgIH0gZWxzZSBpZiAoa2V5LnN0YXJ0c1dpdGgoJ3h4eFNob3VsZCcpKSB7XG4gICAgICAgIGl0LnNraXAoa2V5LCBjYWxsYmFjayk7XG4gICAgICB9XG4gICAgfVxuICAgIHByb3RvID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvKTtcbiAgfVxufVxuXG5jb25zdCBob29rcyA9IHtcbiAgYmVmb3JlQWxsLFxuICBiZWZvcmVFYWNoLFxuICBhZnRlckVhY2gsXG4gIGFmdGVyQWxsLFxufSBhcyBjb25zdDtcblxudHlwZSBTcGVjSG9va3MgPSBQYXJ0aWFsPHR5cGVvZiBob29rcz47XG5cbmV4cG9ydCB0eXBlIFNwZWMgPSBTcGVjSG9va3MgJiB7XG4gIHJlYWRvbmx5IFtrOiBzdHJpbmddOiAoKCkgPT4gdm9pZCB8IFByb21pc2U8dm9pZD4pIHwgYW55O1xufTtcbiJdfQ==
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import type { QueryRaw } from './query.js';
|
|
2
|
+
import type { Scalar, Type } from './utility.js';
|
|
3
|
+
/**
|
|
4
|
+
* Allow to customize the name of the property that identifies an entity
|
|
5
|
+
*/
|
|
6
|
+
export declare const idKey: unique symbol;
|
|
7
|
+
/**
|
|
8
|
+
* Infers the key names of an entity
|
|
9
|
+
*/
|
|
10
|
+
export type Key<E> = keyof E & string;
|
|
11
|
+
/**
|
|
12
|
+
* Infers the field names of an entity
|
|
13
|
+
*/
|
|
14
|
+
export type FieldKey<E> = {
|
|
15
|
+
readonly [K in keyof E]: E[K] extends Scalar ? K : never;
|
|
16
|
+
}[Key<E>];
|
|
17
|
+
/**
|
|
18
|
+
* Infers the relation names of an entity
|
|
19
|
+
*/
|
|
20
|
+
export type RelationKey<E> = {
|
|
21
|
+
readonly [K in keyof E]: E[K] extends Scalar ? never : K;
|
|
22
|
+
}[Key<E>];
|
|
23
|
+
/**
|
|
24
|
+
* Infers the field values of an entity
|
|
25
|
+
*/
|
|
26
|
+
export type FieldValue<E> = E[FieldKey<E>];
|
|
27
|
+
/**
|
|
28
|
+
* Infers the name of the key identifier on an entity
|
|
29
|
+
*/
|
|
30
|
+
export type IdKey<E> = E extends {
|
|
31
|
+
[idKey]?: infer K;
|
|
32
|
+
} ? K & FieldKey<E> : E extends {
|
|
33
|
+
_id?: unknown;
|
|
34
|
+
} ? '_id' & FieldKey<E> : E extends {
|
|
35
|
+
id?: unknown;
|
|
36
|
+
} ? 'id' & FieldKey<E> : E extends {
|
|
37
|
+
uuid?: unknown;
|
|
38
|
+
} ? 'uuid' & FieldKey<E> : FieldKey<E>;
|
|
39
|
+
/**
|
|
40
|
+
* Infers the value of the key identifier on an entity
|
|
41
|
+
*/
|
|
42
|
+
export type IdValue<E> = E[IdKey<E>];
|
|
43
|
+
/**
|
|
44
|
+
* Infers the values of the relations on an entity
|
|
45
|
+
*/
|
|
46
|
+
export type RelationValue<E> = E[RelationKey<E>];
|
|
47
|
+
/**
|
|
48
|
+
* Configurable options for an entity
|
|
49
|
+
*/
|
|
50
|
+
export type EntityOptions = {
|
|
51
|
+
readonly name?: string;
|
|
52
|
+
readonly softDelete?: boolean;
|
|
53
|
+
};
|
|
54
|
+
/**
|
|
55
|
+
* SQL column types supported by uql migrations
|
|
56
|
+
*/
|
|
57
|
+
export type ColumnType = 'int' | 'smallint' | 'bigint' | 'float' | 'double' | 'decimal' | 'numeric' | 'real' | 'boolean' | 'char' | 'varchar' | 'text' | 'uuid' | 'date' | 'time' | 'timestamp' | 'timestamptz' | 'json' | 'jsonb' | 'blob' | 'bytea' | 'vector' | 'serial' | 'bigserial';
|
|
58
|
+
/**
|
|
59
|
+
* Configurable options for a field
|
|
60
|
+
*/
|
|
61
|
+
export type FieldOptions = {
|
|
62
|
+
readonly name?: string;
|
|
63
|
+
readonly isId?: true;
|
|
64
|
+
readonly type?: any;
|
|
65
|
+
readonly reference?: EntityGetter;
|
|
66
|
+
readonly virtual?: QueryRaw;
|
|
67
|
+
readonly updatable?: boolean;
|
|
68
|
+
readonly eager?: boolean;
|
|
69
|
+
readonly onInsert?: OnFieldCallback;
|
|
70
|
+
readonly onUpdate?: OnFieldCallback;
|
|
71
|
+
readonly onDelete?: OnFieldCallback;
|
|
72
|
+
/**
|
|
73
|
+
* SQL column type for migrations. If not specified, inferred from TypeScript type.
|
|
74
|
+
*/
|
|
75
|
+
readonly columnType?: ColumnType;
|
|
76
|
+
/**
|
|
77
|
+
* Column length (e.g., VARCHAR(100)). Defaults to 255 for varchar.
|
|
78
|
+
*/
|
|
79
|
+
readonly length?: number;
|
|
80
|
+
/**
|
|
81
|
+
* Precision for decimal/numeric types.
|
|
82
|
+
*/
|
|
83
|
+
readonly precision?: number;
|
|
84
|
+
/**
|
|
85
|
+
* Scale for decimal/numeric types.
|
|
86
|
+
*/
|
|
87
|
+
readonly scale?: number;
|
|
88
|
+
/**
|
|
89
|
+
* Whether the column allows NULL values. Defaults to true except for ID fields.
|
|
90
|
+
*/
|
|
91
|
+
readonly nullable?: boolean;
|
|
92
|
+
/**
|
|
93
|
+
* Whether the column has a UNIQUE constraint.
|
|
94
|
+
*/
|
|
95
|
+
readonly unique?: boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Default value for the column.
|
|
98
|
+
*/
|
|
99
|
+
readonly defaultValue?: Scalar | null;
|
|
100
|
+
/**
|
|
101
|
+
* Whether the column is auto-incrementing (for integer IDs).
|
|
102
|
+
*/
|
|
103
|
+
readonly autoIncrement?: boolean;
|
|
104
|
+
/**
|
|
105
|
+
* Index configuration. true for simple index, string for named index.
|
|
106
|
+
*/
|
|
107
|
+
readonly index?: boolean | string;
|
|
108
|
+
/**
|
|
109
|
+
* Column comment/description for database documentation.
|
|
110
|
+
*/
|
|
111
|
+
readonly comment?: string;
|
|
112
|
+
};
|
|
113
|
+
export type OnFieldCallback = Scalar | QueryRaw | (() => Scalar | QueryRaw);
|
|
114
|
+
export type EntityGetter<E = any> = () => Type<E>;
|
|
115
|
+
export type CascadeType = 'persist' | 'delete';
|
|
116
|
+
export type RelationOptions<E = any> = {
|
|
117
|
+
entity?: EntityGetter<E>;
|
|
118
|
+
cardinality: RelationCardinality;
|
|
119
|
+
readonly cascade?: boolean | CascadeType;
|
|
120
|
+
mappedBy?: RelationMappedBy<E>;
|
|
121
|
+
through?: EntityGetter<RelationValue<E>>;
|
|
122
|
+
references?: RelationReferences;
|
|
123
|
+
};
|
|
124
|
+
type RelationOptionsOwner<E> = Pick<RelationOptions<E>, 'entity' | 'references' | 'cascade'>;
|
|
125
|
+
type RelationOptionsInverseSide<E> = Required<Pick<RelationOptions<E>, 'entity' | 'mappedBy'>> & Pick<RelationOptions<E>, 'cascade'>;
|
|
126
|
+
type RelationOptionsThroughOwner<E> = Required<Pick<RelationOptions<E>, 'entity'>> & Pick<RelationOptions<E>, 'through' | 'references' | 'cascade'>;
|
|
127
|
+
export type RelationKeyMap<E> = {
|
|
128
|
+
readonly [K in keyof E]: K;
|
|
129
|
+
};
|
|
130
|
+
export type RelationKeyMapper<E> = (keyMap: RelationKeyMap<E>) => Key<E>;
|
|
131
|
+
export type RelationReferences = {
|
|
132
|
+
readonly local: string;
|
|
133
|
+
readonly foreign: string;
|
|
134
|
+
}[];
|
|
135
|
+
export type RelationMappedBy<E> = Key<E> | RelationKeyMapper<E>;
|
|
136
|
+
export type RelationCardinality = '11' | 'm1' | '1m' | 'mm';
|
|
137
|
+
export type RelationOneToOneOptions<E> = RelationOptionsOwner<E> | RelationOptionsInverseSide<E>;
|
|
138
|
+
export type RelationOneToManyOptions<E> = RelationOptionsInverseSide<E> | RelationOptionsThroughOwner<E>;
|
|
139
|
+
export type RelationManyToOneOptions<E> = RelationOptionsOwner<E>;
|
|
140
|
+
export type RelationManyToManyOptions<E> = RelationOptionsThroughOwner<E> | RelationOptionsInverseSide<E>;
|
|
141
|
+
/**
|
|
142
|
+
* Wrapper type for relation type definitions in entities.
|
|
143
|
+
* Used to circumvent ESM modules circular dependency issue caused by reflection metadata saving the type of the property.
|
|
144
|
+
*
|
|
145
|
+
* Usage example:
|
|
146
|
+
* @Entity()
|
|
147
|
+
* export default class User {
|
|
148
|
+
*
|
|
149
|
+
* @OneToOne(() => Profile, profile => profile.user)
|
|
150
|
+
* profile: Relation<Profile>;
|
|
151
|
+
*
|
|
152
|
+
* }
|
|
153
|
+
*/
|
|
154
|
+
export type Relation<T> = T;
|
|
155
|
+
export type EntityMeta<E> = {
|
|
156
|
+
readonly entity: Type<E>;
|
|
157
|
+
name?: string;
|
|
158
|
+
id?: IdKey<E>;
|
|
159
|
+
softDelete?: FieldKey<E>;
|
|
160
|
+
fields: {
|
|
161
|
+
[K in FieldKey<E>]?: FieldOptions;
|
|
162
|
+
};
|
|
163
|
+
relations: {
|
|
164
|
+
[K in RelationKey<E>]?: RelationOptions;
|
|
165
|
+
};
|
|
166
|
+
processed?: boolean;
|
|
167
|
+
};
|
|
168
|
+
export type Primitive = string | number | symbol;
|
|
169
|
+
export {};
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Allow to customize the name of the property that identifies an entity
|
|
3
|
+
*/
|
|
4
|
+
export const idKey = Symbol('idKey');
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW50aXR5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGUvZW50aXR5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUdBOztHQUVHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgUXVlcnlSYXcgfSBmcm9tICcuL3F1ZXJ5LmpzJztcbmltcG9ydCB0eXBlIHsgU2NhbGFyLCBUeXBlIH0gZnJvbSAnLi91dGlsaXR5LmpzJztcblxuLyoqXG4gKiBBbGxvdyB0byBjdXN0b21pemUgdGhlIG5hbWUgb2YgdGhlIHByb3BlcnR5IHRoYXQgaWRlbnRpZmllcyBhbiBlbnRpdHlcbiAqL1xuZXhwb3J0IGNvbnN0IGlkS2V5ID0gU3ltYm9sKCdpZEtleScpO1xuXG4vKipcbiAqIEluZmVycyB0aGUga2V5IG5hbWVzIG9mIGFuIGVudGl0eVxuICovXG5leHBvcnQgdHlwZSBLZXk8RT4gPSBrZXlvZiBFICYgc3RyaW5nO1xuXG4vKipcbiAqIEluZmVycyB0aGUgZmllbGQgbmFtZXMgb2YgYW4gZW50aXR5XG4gKi9cbmV4cG9ydCB0eXBlIEZpZWxkS2V5PEU+ID0ge1xuICByZWFkb25seSBbSyBpbiBrZXlvZiBFXTogRVtLXSBleHRlbmRzIFNjYWxhciA/IEsgOiBuZXZlcjtcbn1bS2V5PEU+XTtcblxuLyoqXG4gKiBJbmZlcnMgdGhlIHJlbGF0aW9uIG5hbWVzIG9mIGFuIGVudGl0eVxuICovXG5leHBvcnQgdHlwZSBSZWxhdGlvbktleTxFPiA9IHtcbiAgcmVhZG9ubHkgW0sgaW4ga2V5b2YgRV06IEVbS10gZXh0ZW5kcyBTY2FsYXIgPyBuZXZlciA6IEs7XG59W0tleTxFPl07XG5cbi8qKlxuICogSW5mZXJzIHRoZSBmaWVsZCB2YWx1ZXMgb2YgYW4gZW50aXR5XG4gKi9cbmV4cG9ydCB0eXBlIEZpZWxkVmFsdWU8RT4gPSBFW0ZpZWxkS2V5PEU+XTtcblxuLyoqXG4gKiBJbmZlcnMgdGhlIG5hbWUgb2YgdGhlIGtleSBpZGVudGlmaWVyIG9uIGFuIGVudGl0eVxuICovXG5leHBvcnQgdHlwZSBJZEtleTxFPiA9IEUgZXh0ZW5kcyB7IFtpZEtleV0/OiBpbmZlciBLIH1cbiAgPyBLICYgRmllbGRLZXk8RT5cbiAgOiBFIGV4dGVuZHMgeyBfaWQ/OiB1bmtub3duIH1cbiAgICA/ICdfaWQnICYgRmllbGRLZXk8RT5cbiAgICA6IEUgZXh0ZW5kcyB7IGlkPzogdW5rbm93biB9XG4gICAgICA/ICdpZCcgJiBGaWVsZEtleTxFPlxuICAgICAgOiBFIGV4dGVuZHMgeyB1dWlkPzogdW5rbm93biB9XG4gICAgICAgID8gJ3V1aWQnICYgRmllbGRLZXk8RT5cbiAgICAgICAgOiBGaWVsZEtleTxFPjtcblxuLyoqXG4gKiBJbmZlcnMgdGhlIHZhbHVlIG9mIHRoZSBrZXkgaWRlbnRpZmllciBvbiBhbiBlbnRpdHlcbiAqL1xuZXhwb3J0IHR5cGUgSWRWYWx1ZTxFPiA9IEVbSWRLZXk8RT5dO1xuXG4vKipcbiAqIEluZmVycyB0aGUgdmFsdWVzIG9mIHRoZSByZWxhdGlvbnMgb24gYW4gZW50aXR5XG4gKi9cbmV4cG9ydCB0eXBlIFJlbGF0aW9uVmFsdWU8RT4gPSBFW1JlbGF0aW9uS2V5PEU+XTtcblxuLyoqXG4gKiBDb25maWd1cmFibGUgb3B0aW9ucyBmb3IgYW4gZW50aXR5XG4gKi9cbmV4cG9ydCB0eXBlIEVudGl0eU9wdGlvbnMgPSB7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHNvZnREZWxldGU/OiBib29sZWFuO1xufTtcblxuLyoqXG4gKiBTUUwgY29sdW1uIHR5cGVzIHN1cHBvcnRlZCBieSB1cWwgbWlncmF0aW9uc1xuICovXG5leHBvcnQgdHlwZSBDb2x1bW5UeXBlID1cbiAgfCAnaW50J1xuICB8ICdzbWFsbGludCdcbiAgfCAnYmlnaW50J1xuICB8ICdmbG9hdCdcbiAgfCAnZG91YmxlJ1xuICB8ICdkZWNpbWFsJ1xuICB8ICdudW1lcmljJ1xuICB8ICdyZWFsJ1xuICB8ICdib29sZWFuJ1xuICB8ICdjaGFyJ1xuICB8ICd2YXJjaGFyJ1xuICB8ICd0ZXh0J1xuICB8ICd1dWlkJ1xuICB8ICdkYXRlJ1xuICB8ICd0aW1lJ1xuICB8ICd0aW1lc3RhbXAnXG4gIHwgJ3RpbWVzdGFtcHR6J1xuICB8ICdqc29uJ1xuICB8ICdqc29uYidcbiAgfCAnYmxvYidcbiAgfCAnYnl0ZWEnXG4gIHwgJ3ZlY3RvcidcbiAgfCAnc2VyaWFsJ1xuICB8ICdiaWdzZXJpYWwnO1xuXG4vKipcbiAqIENvbmZpZ3VyYWJsZSBvcHRpb25zIGZvciBhIGZpZWxkXG4gKi9cbmV4cG9ydCB0eXBlIEZpZWxkT3B0aW9ucyA9IHtcbiAgcmVhZG9ubHkgbmFtZT86IHN0cmluZztcbiAgcmVhZG9ubHkgaXNJZD86IHRydWU7XG4gIHJlYWRvbmx5IHR5cGU/OiBhbnk7XG4gIHJlYWRvbmx5IHJlZmVyZW5jZT86IEVudGl0eUdldHRlcjtcbiAgcmVhZG9ubHkgdmlydHVhbD86IFF1ZXJ5UmF3O1xuICByZWFkb25seSB1cGRhdGFibGU/OiBib29sZWFuO1xuICByZWFkb25seSBlYWdlcj86IGJvb2xlYW47XG4gIHJlYWRvbmx5IG9uSW5zZXJ0PzogT25GaWVsZENhbGxiYWNrO1xuICByZWFkb25seSBvblVwZGF0ZT86IE9uRmllbGRDYWxsYmFjaztcbiAgcmVhZG9ubHkgb25EZWxldGU/OiBPbkZpZWxkQ2FsbGJhY2s7XG5cbiAgLy8gU2NoZW1hL21pZ3JhdGlvbiBwcm9wZXJ0aWVzXG4gIC8qKlxuICAgKiBTUUwgY29sdW1uIHR5cGUgZm9yIG1pZ3JhdGlvbnMuIElmIG5vdCBzcGVjaWZpZWQsIGluZmVycmVkIGZyb20gVHlwZVNjcmlwdCB0eXBlLlxuICAgKi9cbiAgcmVhZG9ubHkgY29sdW1uVHlwZT86IENvbHVtblR5cGU7XG4gIC8qKlxuICAgKiBDb2x1bW4gbGVuZ3RoIChlLmcuLCBWQVJDSEFSKDEwMCkpLiBEZWZhdWx0cyB0byAyNTUgZm9yIHZhcmNoYXIuXG4gICAqL1xuICByZWFkb25seSBsZW5ndGg/OiBudW1iZXI7XG4gIC8qKlxuICAgKiBQcmVjaXNpb24gZm9yIGRlY2ltYWwvbnVtZXJpYyB0eXBlcy5cbiAgICovXG4gIHJlYWRvbmx5IHByZWNpc2lvbj86IG51bWJlcjtcbiAgLyoqXG4gICAqIFNjYWxlIGZvciBkZWNpbWFsL251bWVyaWMgdHlwZXMuXG4gICAqL1xuICByZWFkb25seSBzY2FsZT86IG51bWJlcjtcbiAgLyoqXG4gICAqIFdoZXRoZXIgdGhlIGNvbHVtbiBhbGxvd3MgTlVMTCB2YWx1ZXMuIERlZmF1bHRzIHRvIHRydWUgZXhjZXB0IGZvciBJRCBmaWVsZHMuXG4gICAqL1xuICByZWFkb25seSBudWxsYWJsZT86IGJvb2xlYW47XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjb2x1bW4gaGFzIGEgVU5JUVVFIGNvbnN0cmFpbnQuXG4gICAqL1xuICByZWFkb25seSB1bmlxdWU/OiBib29sZWFuO1xuICAvKipcbiAgICogRGVmYXVsdCB2YWx1ZSBmb3IgdGhlIGNvbHVtbi5cbiAgICovXG4gIHJlYWRvbmx5IGRlZmF1bHRWYWx1ZT86IFNjYWxhciB8IG51bGw7XG4gIC8qKlxuICAgKiBXaGV0aGVyIHRoZSBjb2x1bW4gaXMgYXV0by1pbmNyZW1lbnRpbmcgKGZvciBpbnRlZ2VyIElEcykuXG4gICAqL1xuICByZWFkb25seSBhdXRvSW5jcmVtZW50PzogYm9vbGVhbjtcbiAgLyoqXG4gICAqIEluZGV4IGNvbmZpZ3VyYXRpb24uIHRydWUgZm9yIHNpbXBsZSBpbmRleCwgc3RyaW5nIGZvciBuYW1lZCBpbmRleC5cbiAgICovXG4gIHJlYWRvbmx5IGluZGV4PzogYm9vbGVhbiB8IHN0cmluZztcbiAgLyoqXG4gICAqIENvbHVtbiBjb21tZW50L2Rlc2NyaXB0aW9uIGZvciBkYXRhYmFzZSBkb2N1bWVudGF0aW9uLlxuICAgKi9cbiAgcmVhZG9ubHkgY29tbWVudD86IHN0cmluZztcbn07XG5cbmV4cG9ydCB0eXBlIE9uRmllbGRDYWxsYmFjayA9IFNjYWxhciB8IFF1ZXJ5UmF3IHwgKCgpID0+IFNjYWxhciB8IFF1ZXJ5UmF3KTtcblxuZXhwb3J0IHR5cGUgRW50aXR5R2V0dGVyPEUgPSBhbnk+ID0gKCkgPT4gVHlwZTxFPjtcblxuZXhwb3J0IHR5cGUgQ2FzY2FkZVR5cGUgPSAncGVyc2lzdCcgfCAnZGVsZXRlJztcblxuZXhwb3J0IHR5cGUgUmVsYXRpb25PcHRpb25zPEUgPSBhbnk+ID0ge1xuICBlbnRpdHk/OiBFbnRpdHlHZXR0ZXI8RT47XG4gIGNhcmRpbmFsaXR5OiBSZWxhdGlvbkNhcmRpbmFsaXR5O1xuICByZWFkb25seSBjYXNjYWRlPzogYm9vbGVhbiB8IENhc2NhZGVUeXBlO1xuICBtYXBwZWRCeT86IFJlbGF0aW9uTWFwcGVkQnk8RT47XG4gIHRocm91Z2g/OiBFbnRpdHlHZXR0ZXI8UmVsYXRpb25WYWx1ZTxFPj47XG4gIHJlZmVyZW5jZXM/OiBSZWxhdGlvblJlZmVyZW5jZXM7XG59O1xudHlwZSBSZWxhdGlvbk9wdGlvbnNPd25lcjxFPiA9IFBpY2s8UmVsYXRpb25PcHRpb25zPEU+LCAnZW50aXR5JyB8ICdyZWZlcmVuY2VzJyB8ICdjYXNjYWRlJz47XG50eXBlIFJlbGF0aW9uT3B0aW9uc0ludmVyc2VTaWRlPEU+ID0gUmVxdWlyZWQ8UGljazxSZWxhdGlvbk9wdGlvbnM8RT4sICdlbnRpdHknIHwgJ21hcHBlZEJ5Jz4+ICZcbiAgUGljazxSZWxhdGlvbk9wdGlvbnM8RT4sICdjYXNjYWRlJz47XG50eXBlIFJlbGF0aW9uT3B0aW9uc1Rocm91Z2hPd25lcjxFPiA9IFJlcXVpcmVkPFBpY2s8UmVsYXRpb25PcHRpb25zPEU+LCAnZW50aXR5Jz4+ICZcbiAgUGljazxSZWxhdGlvbk9wdGlvbnM8RT4sICd0aHJvdWdoJyB8ICdyZWZlcmVuY2VzJyB8ICdjYXNjYWRlJz47XG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uS2V5TWFwPEU+ID0geyByZWFkb25seSBbSyBpbiBrZXlvZiBFXTogSyB9O1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvbktleU1hcHBlcjxFPiA9IChrZXlNYXA6IFJlbGF0aW9uS2V5TWFwPEU+KSA9PiBLZXk8RT47XG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uUmVmZXJlbmNlcyA9IHsgcmVhZG9ubHkgbG9jYWw6IHN0cmluZzsgcmVhZG9ubHkgZm9yZWlnbjogc3RyaW5nIH1bXTtcblxuZXhwb3J0IHR5cGUgUmVsYXRpb25NYXBwZWRCeTxFPiA9IEtleTxFPiB8IFJlbGF0aW9uS2V5TWFwcGVyPEU+O1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvbkNhcmRpbmFsaXR5ID0gJzExJyB8ICdtMScgfCAnMW0nIHwgJ21tJztcblxuZXhwb3J0IHR5cGUgUmVsYXRpb25PbmVUb09uZU9wdGlvbnM8RT4gPSBSZWxhdGlvbk9wdGlvbnNPd25lcjxFPiB8IFJlbGF0aW9uT3B0aW9uc0ludmVyc2VTaWRlPEU+O1xuXG5leHBvcnQgdHlwZSBSZWxhdGlvbk9uZVRvTWFueU9wdGlvbnM8RT4gPSBSZWxhdGlvbk9wdGlvbnNJbnZlcnNlU2lkZTxFPiB8IFJlbGF0aW9uT3B0aW9uc1Rocm91Z2hPd25lcjxFPjtcblxuZXhwb3J0IHR5cGUgUmVsYXRpb25NYW55VG9PbmVPcHRpb25zPEU+ID0gUmVsYXRpb25PcHRpb25zT3duZXI8RT47XG5cbmV4cG9ydCB0eXBlIFJlbGF0aW9uTWFueVRvTWFueU9wdGlvbnM8RT4gPSBSZWxhdGlvbk9wdGlvbnNUaHJvdWdoT3duZXI8RT4gfCBSZWxhdGlvbk9wdGlvbnNJbnZlcnNlU2lkZTxFPjtcblxuLyoqXG4gKiBXcmFwcGVyIHR5cGUgZm9yIHJlbGF0aW9uIHR5cGUgZGVmaW5pdGlvbnMgaW4gZW50aXRpZXMuXG4gKiBVc2VkIHRvIGNpcmN1bXZlbnQgRVNNIG1vZHVsZXMgY2lyY3VsYXIgZGVwZW5kZW5jeSBpc3N1ZSBjYXVzZWQgYnkgcmVmbGVjdGlvbiBtZXRhZGF0YSBzYXZpbmcgdGhlIHR5cGUgb2YgdGhlIHByb3BlcnR5LlxuICpcbiAqIFVzYWdlIGV4YW1wbGU6XG4gKiBARW50aXR5KClcbiAqIGV4cG9ydCBkZWZhdWx0IGNsYXNzIFVzZXIge1xuICpcbiAqICAgICBAT25lVG9PbmUoKCkgPT4gUHJvZmlsZSwgcHJvZmlsZSA9PiBwcm9maWxlLnVzZXIpXG4gKiAgICAgcHJvZmlsZTogUmVsYXRpb248UHJvZmlsZT47XG4gKlxuICogfVxuICovXG5leHBvcnQgdHlwZSBSZWxhdGlvbjxUPiA9IFQ7XG5cbmV4cG9ydCB0eXBlIEVudGl0eU1ldGE8RT4gPSB7XG4gIHJlYWRvbmx5IGVudGl0eTogVHlwZTxFPjtcbiAgbmFtZT86IHN0cmluZztcbiAgaWQ/OiBJZEtleTxFPjtcbiAgc29mdERlbGV0ZT86IEZpZWxkS2V5PEU+O1xuICBmaWVsZHM6IHtcbiAgICBbSyBpbiBGaWVsZEtleTxFPl0/OiBGaWVsZE9wdGlvbnM7XG4gIH07XG4gIHJlbGF0aW9uczoge1xuICAgIFtLIGluIFJlbGF0aW9uS2V5PEU+XT86IFJlbGF0aW9uT3B0aW9ucztcbiAgfTtcbiAgcHJvY2Vzc2VkPzogYm9vbGVhbjtcbn07XG5cbmV4cG9ydCB0eXBlIFByaW1pdGl2ZSA9IHN0cmluZyB8IG51bWJlciB8IHN5bWJvbDtcbiJdfQ==
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export * from './entity.js';
|
|
2
|
+
export * from './migration.js';
|
|
3
|
+
export * from './namingStrategy.js';
|
|
4
|
+
export * from './querier.js';
|
|
5
|
+
export * from './querierPool.js';
|
|
6
|
+
export * from './query.js';
|
|
7
|
+
export * from './repository.js';
|
|
8
|
+
export * from './universalQuerier.js';
|
|
9
|
+
export * from './utility.js';
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export * from './entity.js';
|
|
2
|
+
export * from './migration.js';
|
|
3
|
+
export * from './namingStrategy.js';
|
|
4
|
+
export * from './querier.js';
|
|
5
|
+
export * from './querierPool.js';
|
|
6
|
+
export * from './query.js';
|
|
7
|
+
export * from './repository.js';
|
|
8
|
+
export * from './universalQuerier.js';
|
|
9
|
+
export * from './utility.js';
|
|
10
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGdCQUFnQixDQUFDO0FBQy9CLGNBQWMscUJBQXFCLENBQUM7QUFDcEMsY0FBYyxjQUFjLENBQUM7QUFDN0IsY0FBYyxrQkFBa0IsQ0FBQztBQUNqQyxjQUFjLFlBQVksQ0FBQztBQUMzQixjQUFjLGlCQUFpQixDQUFDO0FBQ2hDLGNBQWMsdUJBQXVCLENBQUM7QUFDdEMsY0FBYyxjQUFjLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2VudGl0eS5qcyc7XG5leHBvcnQgKiBmcm9tICcuL21pZ3JhdGlvbi5qcyc7XG5leHBvcnQgKiBmcm9tICcuL25hbWluZ1N0cmF0ZWd5LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcmllci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3F1ZXJpZXJQb29sLmpzJztcbmV4cG9ydCAqIGZyb20gJy4vcXVlcnkuanMnO1xuZXhwb3J0ICogZnJvbSAnLi9yZXBvc2l0b3J5LmpzJztcbmV4cG9ydCAqIGZyb20gJy4vdW5pdmVyc2FsUXVlcmllci5qcyc7XG5leHBvcnQgKiBmcm9tICcuL3V0aWxpdHkuanMnO1xuIl19
|
|
@@ -0,0 +1,213 @@
|
|
|
1
|
+
import type { Dialect, EntityMeta, FieldOptions, NamingStrategy, SqlQuerier, Type } from './index.js';
|
|
2
|
+
/**
|
|
3
|
+
* Defines a migration using a simple object literal
|
|
4
|
+
*/
|
|
5
|
+
export interface MigrationDefinition {
|
|
6
|
+
readonly name?: string;
|
|
7
|
+
readonly up: (querier: SqlQuerier) => Promise<void>;
|
|
8
|
+
readonly down: (querier: SqlQuerier) => Promise<void>;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Represents a single database migration
|
|
12
|
+
*/
|
|
13
|
+
export interface Migration extends MigrationDefinition {
|
|
14
|
+
/**
|
|
15
|
+
* Unique name/identifier for this migration (typically timestamp + description)
|
|
16
|
+
*/
|
|
17
|
+
readonly name: string;
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Storage backend for tracking which migrations have been executed
|
|
21
|
+
*/
|
|
22
|
+
export interface MigrationStorage {
|
|
23
|
+
/**
|
|
24
|
+
* Get list of already executed migration names
|
|
25
|
+
*/
|
|
26
|
+
executed(): Promise<string[]>;
|
|
27
|
+
/**
|
|
28
|
+
* Mark a migration as executed (called within migration transaction)
|
|
29
|
+
*/
|
|
30
|
+
logWithQuerier(querier: SqlQuerier, migrationName: string): Promise<void>;
|
|
31
|
+
/**
|
|
32
|
+
* Remove a migration from the executed list (called within migration transaction)
|
|
33
|
+
*/
|
|
34
|
+
unlogWithQuerier(querier: SqlQuerier, migrationName: string): Promise<void>;
|
|
35
|
+
/**
|
|
36
|
+
* Ensure the storage is initialized (e.g., create migrations table)
|
|
37
|
+
*/
|
|
38
|
+
ensureStorage(): Promise<void>;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Configuration options for the Migrator
|
|
42
|
+
*/
|
|
43
|
+
export interface MigratorOptions {
|
|
44
|
+
/**
|
|
45
|
+
* The database dialect. Defaults to 'postgres'.
|
|
46
|
+
*/
|
|
47
|
+
readonly dialect?: Dialect;
|
|
48
|
+
/**
|
|
49
|
+
* Directory containing migration files. Defaults to './migrations'.
|
|
50
|
+
*/
|
|
51
|
+
readonly migrationsPath?: string;
|
|
52
|
+
/**
|
|
53
|
+
* Custom storage implementation. Defaults to DatabaseMigrationStorage.
|
|
54
|
+
*/
|
|
55
|
+
readonly storage?: MigrationStorage;
|
|
56
|
+
/**
|
|
57
|
+
* Table name for storing migration state. Defaults to 'uql_migrations'.
|
|
58
|
+
*/
|
|
59
|
+
readonly tableName?: string;
|
|
60
|
+
/**
|
|
61
|
+
* Logger function for migration output
|
|
62
|
+
*/
|
|
63
|
+
readonly logger?: (message: string) => void;
|
|
64
|
+
/**
|
|
65
|
+
* Entities to use for schema generation
|
|
66
|
+
*/
|
|
67
|
+
readonly entities?: Type<unknown>[];
|
|
68
|
+
/**
|
|
69
|
+
* Naming strategy for database tables and columns
|
|
70
|
+
*/
|
|
71
|
+
readonly namingStrategy?: NamingStrategy;
|
|
72
|
+
/**
|
|
73
|
+
* Custom schema generator for DDL operations.
|
|
74
|
+
* If not provided, it will be inferred from the dialect.
|
|
75
|
+
*/
|
|
76
|
+
readonly schemaGenerator?: SchemaGenerator;
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* Result of a migration run
|
|
80
|
+
*/
|
|
81
|
+
export interface MigrationResult {
|
|
82
|
+
readonly name: string;
|
|
83
|
+
readonly direction: 'up' | 'down';
|
|
84
|
+
readonly duration: number;
|
|
85
|
+
readonly success: boolean;
|
|
86
|
+
readonly error?: Error;
|
|
87
|
+
}
|
|
88
|
+
/**
|
|
89
|
+
* Represents a column in a database table schema
|
|
90
|
+
*/
|
|
91
|
+
export interface ColumnSchema {
|
|
92
|
+
readonly name: string;
|
|
93
|
+
readonly type: string;
|
|
94
|
+
readonly nullable: boolean;
|
|
95
|
+
readonly defaultValue?: unknown;
|
|
96
|
+
readonly isPrimaryKey: boolean;
|
|
97
|
+
readonly isAutoIncrement: boolean;
|
|
98
|
+
readonly isUnique: boolean;
|
|
99
|
+
readonly length?: number;
|
|
100
|
+
readonly precision?: number;
|
|
101
|
+
readonly scale?: number;
|
|
102
|
+
readonly comment?: string;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Represents a database table schema
|
|
106
|
+
*/
|
|
107
|
+
export interface TableSchema {
|
|
108
|
+
readonly name: string;
|
|
109
|
+
readonly columns: ColumnSchema[];
|
|
110
|
+
readonly primaryKey?: string[];
|
|
111
|
+
readonly indexes?: IndexSchema[];
|
|
112
|
+
readonly foreignKeys?: ForeignKeySchema[];
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Represents an index in a database table
|
|
116
|
+
*/
|
|
117
|
+
export interface IndexSchema {
|
|
118
|
+
readonly name: string;
|
|
119
|
+
readonly columns: string[];
|
|
120
|
+
readonly unique: boolean;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Represents a foreign key constraint
|
|
124
|
+
*/
|
|
125
|
+
export interface ForeignKeySchema {
|
|
126
|
+
readonly name: string;
|
|
127
|
+
readonly columns: string[];
|
|
128
|
+
readonly referencedTable: string;
|
|
129
|
+
readonly referencedColumns: string[];
|
|
130
|
+
readonly onDelete?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
|
|
131
|
+
readonly onUpdate?: 'CASCADE' | 'SET NULL' | 'RESTRICT' | 'NO ACTION';
|
|
132
|
+
}
|
|
133
|
+
/**
|
|
134
|
+
* Represents a difference between current and desired schema
|
|
135
|
+
*/
|
|
136
|
+
export interface SchemaDiff {
|
|
137
|
+
readonly tableName: string;
|
|
138
|
+
readonly type: 'create' | 'alter' | 'drop';
|
|
139
|
+
readonly columnsToAdd?: ColumnSchema[];
|
|
140
|
+
readonly columnsToAlter?: {
|
|
141
|
+
from: ColumnSchema;
|
|
142
|
+
to: ColumnSchema;
|
|
143
|
+
}[];
|
|
144
|
+
readonly columnsToDrop?: string[];
|
|
145
|
+
readonly indexesToAdd?: IndexSchema[];
|
|
146
|
+
readonly indexesToDrop?: string[];
|
|
147
|
+
readonly foreignKeysToAdd?: ForeignKeySchema[];
|
|
148
|
+
readonly foreignKeysToDrop?: string[];
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Interface for generating DDL statements from entity metadata
|
|
152
|
+
*/
|
|
153
|
+
export interface SchemaGenerator {
|
|
154
|
+
/**
|
|
155
|
+
* Generate CREATE TABLE statement for an entity
|
|
156
|
+
*/
|
|
157
|
+
generateCreateTable<E>(entity: Type<E>, options?: {
|
|
158
|
+
ifNotExists?: boolean;
|
|
159
|
+
}): string;
|
|
160
|
+
/**
|
|
161
|
+
* Generate DROP TABLE statement for an entity
|
|
162
|
+
*/
|
|
163
|
+
generateDropTable<E>(entity: Type<E>): string;
|
|
164
|
+
/**
|
|
165
|
+
* Generate ALTER TABLE statements based on schema diff
|
|
166
|
+
*/
|
|
167
|
+
generateAlterTable(diff: SchemaDiff): string[];
|
|
168
|
+
/**
|
|
169
|
+
* Generate rollback (down) statements for ALTER TABLE based on schema diff
|
|
170
|
+
*/
|
|
171
|
+
generateAlterTableDown(diff: SchemaDiff): string[];
|
|
172
|
+
/**
|
|
173
|
+
* Generate CREATE INDEX statement
|
|
174
|
+
*/
|
|
175
|
+
generateCreateIndex(tableName: string, index: IndexSchema): string;
|
|
176
|
+
/**
|
|
177
|
+
* Generate DROP INDEX statement
|
|
178
|
+
*/
|
|
179
|
+
generateDropIndex(tableName: string, indexName: string): string;
|
|
180
|
+
/**
|
|
181
|
+
* Get the SQL type for a field based on its options
|
|
182
|
+
*/
|
|
183
|
+
getSqlType(fieldOptions: FieldOptions, fieldType?: unknown): string;
|
|
184
|
+
/**
|
|
185
|
+
* Compare two schemas and return the differences
|
|
186
|
+
*/
|
|
187
|
+
diffSchema<E>(entity: Type<E>, currentSchema: TableSchema | undefined): SchemaDiff | undefined;
|
|
188
|
+
/**
|
|
189
|
+
* Resolve table name using entity and naming strategy
|
|
190
|
+
*/
|
|
191
|
+
resolveTableName<E>(entity: Type<E>, meta: EntityMeta<E>): string;
|
|
192
|
+
/**
|
|
193
|
+
* Resolve column name using field options and naming strategy
|
|
194
|
+
*/
|
|
195
|
+
resolveColumnName(key: string, field: FieldOptions): string;
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Interface for introspecting the current database schema
|
|
199
|
+
*/
|
|
200
|
+
export interface SchemaIntrospector {
|
|
201
|
+
/**
|
|
202
|
+
* Get the schema of a specific table
|
|
203
|
+
*/
|
|
204
|
+
getTableSchema(tableName: string): Promise<TableSchema | undefined>;
|
|
205
|
+
/**
|
|
206
|
+
* Get all table names in the database
|
|
207
|
+
*/
|
|
208
|
+
getTableNames(): Promise<string[]>;
|
|
209
|
+
/**
|
|
210
|
+
* Check if a table exists
|
|
211
|
+
*/
|
|
212
|
+
tableExists(tableName: string): Promise<boolean>;
|
|
213
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWlncmF0aW9uLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL3R5cGUvbWlncmF0aW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgdHlwZSB7IERpYWxlY3QsIEVudGl0eU1ldGEsIEZpZWxkT3B0aW9ucywgTmFtaW5nU3RyYXRlZ3ksIFNxbFF1ZXJpZXIsIFR5cGUgfSBmcm9tICcuL2luZGV4LmpzJztcblxuLyoqXG4gKiBEZWZpbmVzIGEgbWlncmF0aW9uIHVzaW5nIGEgc2ltcGxlIG9iamVjdCBsaXRlcmFsXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTWlncmF0aW9uRGVmaW5pdGlvbiB7XG4gIHJlYWRvbmx5IG5hbWU/OiBzdHJpbmc7XG4gIHJlYWRvbmx5IHVwOiAocXVlcmllcjogU3FsUXVlcmllcikgPT4gUHJvbWlzZTx2b2lkPjtcbiAgcmVhZG9ubHkgZG93bjogKHF1ZXJpZXI6IFNxbFF1ZXJpZXIpID0+IFByb21pc2U8dm9pZD47XG59XG5cbi8qKlxuICogUmVwcmVzZW50cyBhIHNpbmdsZSBkYXRhYmFzZSBtaWdyYXRpb25cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNaWdyYXRpb24gZXh0ZW5kcyBNaWdyYXRpb25EZWZpbml0aW9uIHtcbiAgLyoqXG4gICAqIFVuaXF1ZSBuYW1lL2lkZW50aWZpZXIgZm9yIHRoaXMgbWlncmF0aW9uICh0eXBpY2FsbHkgdGltZXN0YW1wICsgZGVzY3JpcHRpb24pXG4gICAqL1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG59XG5cbi8qKlxuICogU3RvcmFnZSBiYWNrZW5kIGZvciB0cmFja2luZyB3aGljaCBtaWdyYXRpb25zIGhhdmUgYmVlbiBleGVjdXRlZFxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pZ3JhdGlvblN0b3JhZ2Uge1xuICAvKipcbiAgICogR2V0IGxpc3Qgb2YgYWxyZWFkeSBleGVjdXRlZCBtaWdyYXRpb24gbmFtZXNcbiAgICovXG4gIGV4ZWN1dGVkKCk6IFByb21pc2U8c3RyaW5nW10+O1xuXG4gIC8qKlxuICAgKiBNYXJrIGEgbWlncmF0aW9uIGFzIGV4ZWN1dGVkIChjYWxsZWQgd2l0aGluIG1pZ3JhdGlvbiB0cmFuc2FjdGlvbilcbiAgICovXG4gIGxvZ1dpdGhRdWVyaWVyKHF1ZXJpZXI6IFNxbFF1ZXJpZXIsIG1pZ3JhdGlvbk5hbWU6IHN0cmluZyk6IFByb21pc2U8dm9pZD47XG5cbiAgLyoqXG4gICAqIFJlbW92ZSBhIG1pZ3JhdGlvbiBmcm9tIHRoZSBleGVjdXRlZCBsaXN0IChjYWxsZWQgd2l0aGluIG1pZ3JhdGlvbiB0cmFuc2FjdGlvbilcbiAgICovXG4gIHVubG9nV2l0aFF1ZXJpZXIocXVlcmllcjogU3FsUXVlcmllciwgbWlncmF0aW9uTmFtZTogc3RyaW5nKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogRW5zdXJlIHRoZSBzdG9yYWdlIGlzIGluaXRpYWxpemVkIChlLmcuLCBjcmVhdGUgbWlncmF0aW9ucyB0YWJsZSlcbiAgICovXG4gIGVuc3VyZVN0b3JhZ2UoKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuLyoqXG4gKiBDb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIHRoZSBNaWdyYXRvclxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1pZ3JhdG9yT3B0aW9ucyB7XG4gIC8qKlxuICAgKiBUaGUgZGF0YWJhc2UgZGlhbGVjdC4gRGVmYXVsdHMgdG8gJ3Bvc3RncmVzJy5cbiAgICovXG4gIHJlYWRvbmx5IGRpYWxlY3Q/OiBEaWFsZWN0O1xuXG4gIC8qKlxuICAgKiBEaXJlY3RvcnkgY29udGFpbmluZyBtaWdyYXRpb24gZmlsZXMuIERlZmF1bHRzIHRvICcuL21pZ3JhdGlvbnMnLlxuICAgKi9cbiAgcmVhZG9ubHkgbWlncmF0aW9uc1BhdGg/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEN1c3RvbSBzdG9yYWdlIGltcGxlbWVudGF0aW9uLiBEZWZhdWx0cyB0byBEYXRhYmFzZU1pZ3JhdGlvblN0b3JhZ2UuXG4gICAqL1xuICByZWFkb25seSBzdG9yYWdlPzogTWlncmF0aW9uU3RvcmFnZTtcblxuICAvKipcbiAgICogVGFibGUgbmFtZSBmb3Igc3RvcmluZyBtaWdyYXRpb24gc3RhdGUuIERlZmF1bHRzIHRvICd1cWxfbWlncmF0aW9ucycuXG4gICAqL1xuICByZWFkb25seSB0YWJsZU5hbWU/OiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIExvZ2dlciBmdW5jdGlvbiBmb3IgbWlncmF0aW9uIG91dHB1dFxuICAgKi9cbiAgcmVhZG9ubHkgbG9nZ2VyPzogKG1lc3NhZ2U6IHN0cmluZykgPT4gdm9pZDtcblxuICAvKipcbiAgICogRW50aXRpZXMgdG8gdXNlIGZvciBzY2hlbWEgZ2VuZXJhdGlvblxuICAgKi9cbiAgcmVhZG9ubHkgZW50aXRpZXM/OiBUeXBlPHVua25vd24+W107XG5cbiAgLyoqXG4gICAqIE5hbWluZyBzdHJhdGVneSBmb3IgZGF0YWJhc2UgdGFibGVzIGFuZCBjb2x1bW5zXG4gICAqL1xuICByZWFkb25seSBuYW1pbmdTdHJhdGVneT86IE5hbWluZ1N0cmF0ZWd5O1xuXG4gIC8qKlxuICAgKiBDdXN0b20gc2NoZW1hIGdlbmVyYXRvciBmb3IgRERMIG9wZXJhdGlvbnMuXG4gICAqIElmIG5vdCBwcm92aWRlZCwgaXQgd2lsbCBiZSBpbmZlcnJlZCBmcm9tIHRoZSBkaWFsZWN0LlxuICAgKi9cbiAgcmVhZG9ubHkgc2NoZW1hR2VuZXJhdG9yPzogU2NoZW1hR2VuZXJhdG9yO1xufVxuXG4vKipcbiAqIFJlc3VsdCBvZiBhIG1pZ3JhdGlvbiBydW5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBNaWdyYXRpb25SZXN1bHQge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGRpcmVjdGlvbjogJ3VwJyB8ICdkb3duJztcbiAgcmVhZG9ubHkgZHVyYXRpb246IG51bWJlcjtcbiAgcmVhZG9ubHkgc3VjY2VzczogYm9vbGVhbjtcbiAgcmVhZG9ubHkgZXJyb3I/OiBFcnJvcjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgY29sdW1uIGluIGEgZGF0YWJhc2UgdGFibGUgc2NoZW1hXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29sdW1uU2NoZW1hIHtcbiAgcmVhZG9ubHkgbmFtZTogc3RyaW5nO1xuICByZWFkb25seSB0eXBlOiBzdHJpbmc7XG4gIHJlYWRvbmx5IG51bGxhYmxlOiBib29sZWFuO1xuICByZWFkb25seSBkZWZhdWx0VmFsdWU/OiB1bmtub3duO1xuICByZWFkb25seSBpc1ByaW1hcnlLZXk6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGlzQXV0b0luY3JlbWVudDogYm9vbGVhbjtcbiAgcmVhZG9ubHkgaXNVbmlxdWU6IGJvb2xlYW47XG4gIHJlYWRvbmx5IGxlbmd0aD86IG51bWJlcjtcbiAgcmVhZG9ubHkgcHJlY2lzaW9uPzogbnVtYmVyO1xuICByZWFkb25seSBzY2FsZT86IG51bWJlcjtcbiAgcmVhZG9ubHkgY29tbWVudD86IHN0cmluZztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZGF0YWJhc2UgdGFibGUgc2NoZW1hXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgVGFibGVTY2hlbWEge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbHVtbnM6IENvbHVtblNjaGVtYVtdO1xuICByZWFkb25seSBwcmltYXJ5S2V5Pzogc3RyaW5nW107XG4gIHJlYWRvbmx5IGluZGV4ZXM/OiBJbmRleFNjaGVtYVtdO1xuICByZWFkb25seSBmb3JlaWduS2V5cz86IEZvcmVpZ25LZXlTY2hlbWFbXTtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGFuIGluZGV4IGluIGEgZGF0YWJhc2UgdGFibGVcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBJbmRleFNjaGVtYSB7XG4gIHJlYWRvbmx5IG5hbWU6IHN0cmluZztcbiAgcmVhZG9ubHkgY29sdW1uczogc3RyaW5nW107XG4gIHJlYWRvbmx5IHVuaXF1ZTogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZm9yZWlnbiBrZXkgY29uc3RyYWludFxuICovXG5leHBvcnQgaW50ZXJmYWNlIEZvcmVpZ25LZXlTY2hlbWEge1xuICByZWFkb25seSBuYW1lOiBzdHJpbmc7XG4gIHJlYWRvbmx5IGNvbHVtbnM6IHN0cmluZ1tdO1xuICByZWFkb25seSByZWZlcmVuY2VkVGFibGU6IHN0cmluZztcbiAgcmVhZG9ubHkgcmVmZXJlbmNlZENvbHVtbnM6IHN0cmluZ1tdO1xuICByZWFkb25seSBvbkRlbGV0ZT86ICdDQVNDQURFJyB8ICdTRVQgTlVMTCcgfCAnUkVTVFJJQ1QnIHwgJ05PIEFDVElPTic7XG4gIHJlYWRvbmx5IG9uVXBkYXRlPzogJ0NBU0NBREUnIHwgJ1NFVCBOVUxMJyB8ICdSRVNUUklDVCcgfCAnTk8gQUNUSU9OJztcbn1cblxuLyoqXG4gKiBSZXByZXNlbnRzIGEgZGlmZmVyZW5jZSBiZXR3ZWVuIGN1cnJlbnQgYW5kIGRlc2lyZWQgc2NoZW1hXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hRGlmZiB7XG4gIHJlYWRvbmx5IHRhYmxlTmFtZTogc3RyaW5nO1xuICByZWFkb25seSB0eXBlOiAnY3JlYXRlJyB8ICdhbHRlcicgfCAnZHJvcCc7XG4gIHJlYWRvbmx5IGNvbHVtbnNUb0FkZD86IENvbHVtblNjaGVtYVtdO1xuICByZWFkb25seSBjb2x1bW5zVG9BbHRlcj86IHsgZnJvbTogQ29sdW1uU2NoZW1hOyB0bzogQ29sdW1uU2NoZW1hIH1bXTtcbiAgcmVhZG9ubHkgY29sdW1uc1RvRHJvcD86IHN0cmluZ1tdO1xuICByZWFkb25seSBpbmRleGVzVG9BZGQ/OiBJbmRleFNjaGVtYVtdO1xuICByZWFkb25seSBpbmRleGVzVG9Ecm9wPzogc3RyaW5nW107XG4gIHJlYWRvbmx5IGZvcmVpZ25LZXlzVG9BZGQ/OiBGb3JlaWduS2V5U2NoZW1hW107XG4gIHJlYWRvbmx5IGZvcmVpZ25LZXlzVG9Ecm9wPzogc3RyaW5nW107XG59XG5cbi8qKlxuICogSW50ZXJmYWNlIGZvciBnZW5lcmF0aW5nIERETCBzdGF0ZW1lbnRzIGZyb20gZW50aXR5IG1ldGFkYXRhXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2NoZW1hR2VuZXJhdG9yIHtcbiAgLyoqXG4gICAqIEdlbmVyYXRlIENSRUFURSBUQUJMRSBzdGF0ZW1lbnQgZm9yIGFuIGVudGl0eVxuICAgKi9cbiAgZ2VuZXJhdGVDcmVhdGVUYWJsZTxFPihlbnRpdHk6IFR5cGU8RT4sIG9wdGlvbnM/OiB7IGlmTm90RXhpc3RzPzogYm9vbGVhbiB9KTogc3RyaW5nO1xuXG4gIC8qKlxuICAgKiBHZW5lcmF0ZSBEUk9QIFRBQkxFIHN0YXRlbWVudCBmb3IgYW4gZW50aXR5XG4gICAqL1xuICBnZW5lcmF0ZURyb3BUYWJsZTxFPihlbnRpdHk6IFR5cGU8RT4pOiBzdHJpbmc7XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIEFMVEVSIFRBQkxFIHN0YXRlbWVudHMgYmFzZWQgb24gc2NoZW1hIGRpZmZcbiAgICovXG4gIGdlbmVyYXRlQWx0ZXJUYWJsZShkaWZmOiBTY2hlbWFEaWZmKTogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIHJvbGxiYWNrIChkb3duKSBzdGF0ZW1lbnRzIGZvciBBTFRFUiBUQUJMRSBiYXNlZCBvbiBzY2hlbWEgZGlmZlxuICAgKi9cbiAgZ2VuZXJhdGVBbHRlclRhYmxlRG93bihkaWZmOiBTY2hlbWFEaWZmKTogc3RyaW5nW107XG5cbiAgLyoqXG4gICAqIEdlbmVyYXRlIENSRUFURSBJTkRFWCBzdGF0ZW1lbnRcbiAgICovXG4gIGdlbmVyYXRlQ3JlYXRlSW5kZXgodGFibGVOYW1lOiBzdHJpbmcsIGluZGV4OiBJbmRleFNjaGVtYSk6IHN0cmluZztcblxuICAvKipcbiAgICogR2VuZXJhdGUgRFJPUCBJTkRFWCBzdGF0ZW1lbnRcbiAgICovXG4gIGdlbmVyYXRlRHJvcEluZGV4KHRhYmxlTmFtZTogc3RyaW5nLCBpbmRleE5hbWU6IHN0cmluZyk6IHN0cmluZztcblxuICAvKipcbiAgICogR2V0IHRoZSBTUUwgdHlwZSBmb3IgYSBmaWVsZCBiYXNlZCBvbiBpdHMgb3B0aW9uc1xuICAgKi9cbiAgZ2V0U3FsVHlwZShmaWVsZE9wdGlvbnM6IEZpZWxkT3B0aW9ucywgZmllbGRUeXBlPzogdW5rbm93bik6IHN0cmluZztcblxuICAvKipcbiAgICogQ29tcGFyZSB0d28gc2NoZW1hcyBhbmQgcmV0dXJuIHRoZSBkaWZmZXJlbmNlc1xuICAgKi9cbiAgZGlmZlNjaGVtYTxFPihlbnRpdHk6IFR5cGU8RT4sIGN1cnJlbnRTY2hlbWE6IFRhYmxlU2NoZW1hIHwgdW5kZWZpbmVkKTogU2NoZW1hRGlmZiB8IHVuZGVmaW5lZDtcblxuICAvKipcbiAgICogUmVzb2x2ZSB0YWJsZSBuYW1lIHVzaW5nIGVudGl0eSBhbmQgbmFtaW5nIHN0cmF0ZWd5XG4gICAqL1xuICByZXNvbHZlVGFibGVOYW1lPEU+KGVudGl0eTogVHlwZTxFPiwgbWV0YTogRW50aXR5TWV0YTxFPik6IHN0cmluZztcblxuICAvKipcbiAgICogUmVzb2x2ZSBjb2x1bW4gbmFtZSB1c2luZyBmaWVsZCBvcHRpb25zIGFuZCBuYW1pbmcgc3RyYXRlZ3lcbiAgICovXG4gIHJlc29sdmVDb2x1bW5OYW1lKGtleTogc3RyaW5nLCBmaWVsZDogRmllbGRPcHRpb25zKTogc3RyaW5nO1xufVxuXG4vKipcbiAqIEludGVyZmFjZSBmb3IgaW50cm9zcGVjdGluZyB0aGUgY3VycmVudCBkYXRhYmFzZSBzY2hlbWFcbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTY2hlbWFJbnRyb3NwZWN0b3Ige1xuICAvKipcbiAgICogR2V0IHRoZSBzY2hlbWEgb2YgYSBzcGVjaWZpYyB0YWJsZVxuICAgKi9cbiAgZ2V0VGFibGVTY2hlbWEodGFibGVOYW1lOiBzdHJpbmcpOiBQcm9taXNlPFRhYmxlU2NoZW1hIHwgdW5kZWZpbmVkPjtcblxuICAvKipcbiAgICogR2V0IGFsbCB0YWJsZSBuYW1lcyBpbiB0aGUgZGF0YWJhc2VcbiAgICovXG4gIGdldFRhYmxlTmFtZXMoKTogUHJvbWlzZTxzdHJpbmdbXT47XG5cbiAgLyoqXG4gICAqIENoZWNrIGlmIGEgdGFibGUgZXhpc3RzXG4gICAqL1xuICB0YWJsZUV4aXN0cyh0YWJsZU5hbWU6IHN0cmluZyk6IFByb21pc2U8Ym9vbGVhbj47XG59XG4iXX0=
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Defines the naming strategy for database tables and columns.
|
|
3
|
+
*/
|
|
4
|
+
export interface NamingStrategy {
|
|
5
|
+
/**
|
|
6
|
+
* Translates entity name to table name.
|
|
7
|
+
*/
|
|
8
|
+
tableName(entityName: string): string;
|
|
9
|
+
/**
|
|
10
|
+
* Translates property name to column name.
|
|
11
|
+
*/
|
|
12
|
+
columnName(propertyName: string): string;
|
|
13
|
+
/**
|
|
14
|
+
* Translates entity names to join table name (many-to-many).
|
|
15
|
+
*/
|
|
16
|
+
joinTableName(sourceEntityName: string, targetEntityName: string, propertyName?: string): string;
|
|
17
|
+
}
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibmFtaW5nU3RyYXRlZ3kuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvdHlwZS9uYW1pbmdTdHJhdGVneS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBEZWZpbmVzIHRoZSBuYW1pbmcgc3RyYXRlZ3kgZm9yIGRhdGFiYXNlIHRhYmxlcyBhbmQgY29sdW1ucy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBOYW1pbmdTdHJhdGVneSB7XG4gIC8qKlxuICAgKiBUcmFuc2xhdGVzIGVudGl0eSBuYW1lIHRvIHRhYmxlIG5hbWUuXG4gICAqL1xuICB0YWJsZU5hbWUoZW50aXR5TmFtZTogc3RyaW5nKTogc3RyaW5nO1xuICAvKipcbiAgICogVHJhbnNsYXRlcyBwcm9wZXJ0eSBuYW1lIHRvIGNvbHVtbiBuYW1lLlxuICAgKi9cbiAgY29sdW1uTmFtZShwcm9wZXJ0eU5hbWU6IHN0cmluZyk6IHN0cmluZztcbiAgLyoqXG4gICAqIFRyYW5zbGF0ZXMgZW50aXR5IG5hbWVzIHRvIGpvaW4gdGFibGUgbmFtZSAobWFueS10by1tYW55KS5cbiAgICovXG4gIGpvaW5UYWJsZU5hbWUoc291cmNlRW50aXR5TmFtZTogc3RyaW5nLCB0YXJnZXRFbnRpdHlOYW1lOiBzdHJpbmcsIHByb3BlcnR5TmFtZT86IHN0cmluZyk6IHN0cmluZztcbn1cbiJdfQ==
|
|
@@ -0,0 +1,96 @@
|
|
|
1
|
+
import type { Db } from 'mongodb';
|
|
2
|
+
import type { IdValue } from './entity.js';
|
|
3
|
+
import type { NamingStrategy } from './namingStrategy.js';
|
|
4
|
+
import type { Query, QueryConflictPaths, QueryOne, QueryOptions, QuerySearch, QueryUpdateResult, SqlQueryDialect } from './query.js';
|
|
5
|
+
import type { Repository } from './repository.js';
|
|
6
|
+
import type { UniversalQuerier } from './universalQuerier.js';
|
|
7
|
+
import type { Type } from './utility.js';
|
|
8
|
+
/**
|
|
9
|
+
* Isolation levels for transactions.
|
|
10
|
+
*/
|
|
11
|
+
export type IsolationLevel = 'read uncommitted' | 'read committed' | 'repeteable read' | 'serializable';
|
|
12
|
+
/**
|
|
13
|
+
* Supported SQL dialect identifiers.
|
|
14
|
+
*/
|
|
15
|
+
export type SqlDialect = 'postgres' | 'mysql' | 'mariadb' | 'sqlite';
|
|
16
|
+
export type Dialect = SqlDialect | 'mongodb';
|
|
17
|
+
export interface Querier extends UniversalQuerier {
|
|
18
|
+
findOneById<E>(entity: Type<E>, id: IdValue<E>, q?: QueryOne<E>): Promise<E>;
|
|
19
|
+
findOne<E>(entity: Type<E>, q: QueryOne<E>): Promise<E>;
|
|
20
|
+
findMany<E>(entity: Type<E>, q: Query<E>): Promise<E[]>;
|
|
21
|
+
findManyAndCount<E>(entity: Type<E>, q: Query<E>): Promise<[E[], number]>;
|
|
22
|
+
count<E>(entity: Type<E>, q: QuerySearch<E>): Promise<number>;
|
|
23
|
+
insertOne<E>(entity: Type<E>, payload: E): Promise<IdValue<E>>;
|
|
24
|
+
insertMany<E>(entity: Type<E>, payload: E[]): Promise<IdValue<E>[]>;
|
|
25
|
+
updateOneById<E>(entity: Type<E>, id: IdValue<E>, payload: E): Promise<number>;
|
|
26
|
+
updateMany<E>(entity: Type<E>, q: QuerySearch<E>, payload: E): Promise<number>;
|
|
27
|
+
upsertOne<E>(entity: Type<E>, conflictPaths: QueryConflictPaths<E>, payload: E): Promise<QueryUpdateResult>;
|
|
28
|
+
saveOne<E>(entity: Type<E>, payload: E): Promise<IdValue<E>>;
|
|
29
|
+
saveMany<E>(entity: Type<E>, payload: E[]): Promise<IdValue<E>[]>;
|
|
30
|
+
deleteOneById<E>(entity: Type<E>, id: IdValue<E>, opts?: QueryOptions): Promise<number>;
|
|
31
|
+
deleteMany<E>(entity: Type<E>, q: QuerySearch<E>, opts?: QueryOptions): Promise<number>;
|
|
32
|
+
getRepository<E>(entity: Type<E>): Repository<E>;
|
|
33
|
+
/**
|
|
34
|
+
* whether this querier is in a transaction or not.
|
|
35
|
+
*/
|
|
36
|
+
readonly hasOpenTransaction: boolean;
|
|
37
|
+
/**
|
|
38
|
+
* run the given callback inside a transaction in this querier.
|
|
39
|
+
*/
|
|
40
|
+
transaction<T>(callback: () => Promise<T>): Promise<T>;
|
|
41
|
+
/**
|
|
42
|
+
* starts a new transaction in this querier.
|
|
43
|
+
*/
|
|
44
|
+
beginTransaction(): Promise<void>;
|
|
45
|
+
/**
|
|
46
|
+
* commits the currently active transaction in this querier.
|
|
47
|
+
*/
|
|
48
|
+
commitTransaction(): Promise<void>;
|
|
49
|
+
/**
|
|
50
|
+
* aborts the currently active transaction in this querier.
|
|
51
|
+
*/
|
|
52
|
+
rollbackTransaction(): Promise<void>;
|
|
53
|
+
/**
|
|
54
|
+
* release the querier to the pool.
|
|
55
|
+
*/
|
|
56
|
+
release(): Promise<void>;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Extended querier interface for raw SQL execution.
|
|
60
|
+
* Implemented by AbstractSqlQuerier and all SQL-based queriers.
|
|
61
|
+
*/
|
|
62
|
+
export interface SqlQuerier extends Querier {
|
|
63
|
+
/**
|
|
64
|
+
* The SQL dialect (provides escapeIdChar and other dialect-specific info)
|
|
65
|
+
*/
|
|
66
|
+
readonly dialect: SqlQueryDialect;
|
|
67
|
+
/**
|
|
68
|
+
* Execute a raw SQL query and return results
|
|
69
|
+
*/
|
|
70
|
+
all<T>(query: string, values?: unknown[]): Promise<T[]>;
|
|
71
|
+
/**
|
|
72
|
+
* Execute a raw SQL command (INSERT, UPDATE, DELETE, DDL)
|
|
73
|
+
*/
|
|
74
|
+
run(query: string, values?: unknown[]): Promise<QueryUpdateResult>;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* Type guard to check if a querier supports raw SQL execution
|
|
78
|
+
*/
|
|
79
|
+
export declare function isSqlQuerier(querier: Querier): querier is SqlQuerier;
|
|
80
|
+
/**
|
|
81
|
+
* Extended querier interface for MongoDB execution.
|
|
82
|
+
*/
|
|
83
|
+
export interface MongoQuerier extends Querier {
|
|
84
|
+
/**
|
|
85
|
+
* The MongoDB database instance.
|
|
86
|
+
*/
|
|
87
|
+
readonly db: Db;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* logger function to debug queries.
|
|
91
|
+
*/
|
|
92
|
+
export type Logger = (message: unknown, ...args: unknown[]) => unknown;
|
|
93
|
+
export type ExtraOptions = {
|
|
94
|
+
readonly logger?: Logger;
|
|
95
|
+
readonly namingStrategy?: NamingStrategy;
|
|
96
|
+
};
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type guard to check if a querier supports raw SQL execution
|
|
3
|
+
*/
|
|
4
|
+
export function isSqlQuerier(querier) {
|
|
5
|
+
const q = querier;
|
|
6
|
+
return (typeof q.all === 'function' &&
|
|
7
|
+
typeof q.run === 'function' &&
|
|
8
|
+
q.dialect !== undefined &&
|
|
9
|
+
typeof q.dialect.escapeIdChar === 'string');
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicXVlcmllci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy90eXBlL3F1ZXJpZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBK0dBOztHQUVHO0FBQ0gsTUFBTSxVQUFVLFlBQVksQ0FBQyxPQUFnQjtJQUMzQyxNQUFNLENBQUMsR0FBRyxPQUFxQixDQUFDO0lBQ2hDLE9BQU8sQ0FDTCxPQUFPLENBQUMsQ0FBQyxHQUFHLEtBQUssVUFBVTtRQUMzQixPQUFPLENBQUMsQ0FBQyxHQUFHLEtBQUssVUFBVTtRQUMzQixDQUFDLENBQUMsT0FBTyxLQUFLLFNBQVM7UUFDdkIsT0FBTyxDQUFDLENBQUMsT0FBTyxDQUFDLFlBQVksS0FBSyxRQUFRLENBQzNDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBEYiB9IGZyb20gJ21vbmdvZGInO1xuaW1wb3J0IHR5cGUgeyBJZFZhbHVlIH0gZnJvbSAnLi9lbnRpdHkuanMnO1xuaW1wb3J0IHR5cGUgeyBOYW1pbmdTdHJhdGVneSB9IGZyb20gJy4vbmFtaW5nU3RyYXRlZ3kuanMnO1xuaW1wb3J0IHR5cGUge1xuICBRdWVyeSxcbiAgUXVlcnlDb25mbGljdFBhdGhzLFxuICBRdWVyeU9uZSxcbiAgUXVlcnlPcHRpb25zLFxuICBRdWVyeVNlYXJjaCxcbiAgUXVlcnlVcGRhdGVSZXN1bHQsXG4gIFNxbFF1ZXJ5RGlhbGVjdCxcbn0gZnJvbSAnLi9xdWVyeS5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlcG9zaXRvcnkgfSBmcm9tICcuL3JlcG9zaXRvcnkuanMnO1xuaW1wb3J0IHR5cGUgeyBVbml2ZXJzYWxRdWVyaWVyIH0gZnJvbSAnLi91bml2ZXJzYWxRdWVyaWVyLmpzJztcbmltcG9ydCB0eXBlIHsgVHlwZSB9IGZyb20gJy4vdXRpbGl0eS5qcyc7XG5cbi8qKlxuICogSXNvbGF0aW9uIGxldmVscyBmb3IgdHJhbnNhY3Rpb25zLlxuICovXG5leHBvcnQgdHlwZSBJc29sYXRpb25MZXZlbCA9ICdyZWFkIHVuY29tbWl0dGVkJyB8ICdyZWFkIGNvbW1pdHRlZCcgfCAncmVwZXRlYWJsZSByZWFkJyB8ICdzZXJpYWxpemFibGUnO1xuXG4vKipcbiAqIFN1cHBvcnRlZCBTUUwgZGlhbGVjdCBpZGVudGlmaWVycy5cbiAqL1xuZXhwb3J0IHR5cGUgU3FsRGlhbGVjdCA9ICdwb3N0Z3JlcycgfCAnbXlzcWwnIHwgJ21hcmlhZGInIHwgJ3NxbGl0ZSc7XG5cbmV4cG9ydCB0eXBlIERpYWxlY3QgPSBTcWxEaWFsZWN0IHwgJ21vbmdvZGInO1xuXG5leHBvcnQgaW50ZXJmYWNlIFF1ZXJpZXIgZXh0ZW5kcyBVbml2ZXJzYWxRdWVyaWVyIHtcbiAgZmluZE9uZUJ5SWQ8RT4oZW50aXR5OiBUeXBlPEU+LCBpZDogSWRWYWx1ZTxFPiwgcT86IFF1ZXJ5T25lPEU+KTogUHJvbWlzZTxFPjtcblxuICBmaW5kT25lPEU+KGVudGl0eTogVHlwZTxFPiwgcTogUXVlcnlPbmU8RT4pOiBQcm9taXNlPEU+O1xuXG4gIGZpbmRNYW55PEU+KGVudGl0eTogVHlwZTxFPiwgcTogUXVlcnk8RT4pOiBQcm9taXNlPEVbXT47XG5cbiAgZmluZE1hbnlBbmRDb3VudDxFPihlbnRpdHk6IFR5cGU8RT4sIHE6IFF1ZXJ5PEU+KTogUHJvbWlzZTxbRVtdLCBudW1iZXJdPjtcblxuICBjb3VudDxFPihlbnRpdHk6IFR5cGU8RT4sIHE6IFF1ZXJ5U2VhcmNoPEU+KTogUHJvbWlzZTxudW1iZXI+O1xuXG4gIGluc2VydE9uZTxFPihlbnRpdHk6IFR5cGU8RT4sIHBheWxvYWQ6IEUpOiBQcm9taXNlPElkVmFsdWU8RT4+O1xuXG4gIGluc2VydE1hbnk8RT4oZW50aXR5OiBUeXBlPEU+LCBwYXlsb2FkOiBFW10pOiBQcm9taXNlPElkVmFsdWU8RT5bXT47XG5cbiAgdXBkYXRlT25lQnlJZDxFPihlbnRpdHk6IFR5cGU8RT4sIGlkOiBJZFZhbHVlPEU+LCBwYXlsb2FkOiBFKTogUHJvbWlzZTxudW1iZXI+O1xuXG4gIHVwZGF0ZU1hbnk8RT4oZW50aXR5OiBUeXBlPEU+LCBxOiBRdWVyeVNlYXJjaDxFPiwgcGF5bG9hZDogRSk6IFByb21pc2U8bnVtYmVyPjtcblxuICB1cHNlcnRPbmU8RT4oZW50aXR5OiBUeXBlPEU+LCBjb25mbGljdFBhdGhzOiBRdWVyeUNvbmZsaWN0UGF0aHM8RT4sIHBheWxvYWQ6IEUpOiBQcm9taXNlPFF1ZXJ5VXBkYXRlUmVzdWx0PjtcblxuICBzYXZlT25lPEU+KGVudGl0eTogVHlwZTxFPiwgcGF5bG9hZDogRSk6IFByb21pc2U8SWRWYWx1ZTxFPj47XG5cbiAgc2F2ZU1hbnk8RT4oZW50aXR5OiBUeXBlPEU+LCBwYXlsb2FkOiBFW10pOiBQcm9taXNlPElkVmFsdWU8RT5bXT47XG5cbiAgZGVsZXRlT25lQnlJZDxFPihlbnRpdHk6IFR5cGU8RT4sIGlkOiBJZFZhbHVlPEU+LCBvcHRzPzogUXVlcnlPcHRpb25zKTogUHJvbWlzZTxudW1iZXI+O1xuXG4gIGRlbGV0ZU1hbnk8RT4oZW50aXR5OiBUeXBlPEU+LCBxOiBRdWVyeVNlYXJjaDxFPiwgb3B0cz86IFF1ZXJ5T3B0aW9ucyk6IFByb21pc2U8bnVtYmVyPjtcblxuICBnZXRSZXBvc2l0b3J5PEU+KGVudGl0eTogVHlwZTxFPik6IFJlcG9zaXRvcnk8RT47XG5cbiAgLyoqXG4gICAqIHdoZXRoZXIgdGhpcyBxdWVyaWVyIGlzIGluIGEgdHJhbnNhY3Rpb24gb3Igbm90LlxuICAgKi9cbiAgcmVhZG9ubHkgaGFzT3BlblRyYW5zYWN0aW9uOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBydW4gdGhlIGdpdmVuIGNhbGxiYWNrIGluc2lkZSBhIHRyYW5zYWN0aW9uIGluIHRoaXMgcXVlcmllci5cbiAgICovXG4gIHRyYW5zYWN0aW9uPFQ+KGNhbGxiYWNrOiAoKSA9PiBQcm9taXNlPFQ+KTogUHJvbWlzZTxUPjtcblxuICAvKipcbiAgICogc3RhcnRzIGEgbmV3IHRyYW5zYWN0aW9uIGluIHRoaXMgcXVlcmllci5cbiAgICovXG4gIGJlZ2luVHJhbnNhY3Rpb24oKTogUHJvbWlzZTx2b2lkPjtcblxuICAvKipcbiAgICogY29tbWl0cyB0aGUgY3VycmVudGx5IGFjdGl2ZSB0cmFuc2FjdGlvbiBpbiB0aGlzIHF1ZXJpZXIuXG4gICAqL1xuICBjb21taXRUcmFuc2FjdGlvbigpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiBhYm9ydHMgdGhlIGN1cnJlbnRseSBhY3RpdmUgdHJhbnNhY3Rpb24gaW4gdGhpcyBxdWVyaWVyLlxuICAgKi9cbiAgcm9sbGJhY2tUcmFuc2FjdGlvbigpOiBQcm9taXNlPHZvaWQ+O1xuXG4gIC8qKlxuICAgKiByZWxlYXNlIHRoZSBxdWVyaWVyIHRvIHRoZSBwb29sLlxuICAgKi9cbiAgcmVsZWFzZSgpOiBQcm9taXNlPHZvaWQ+O1xufVxuXG4vKipcbiAqIEV4dGVuZGVkIHF1ZXJpZXIgaW50ZXJmYWNlIGZvciByYXcgU1FMIGV4ZWN1dGlvbi5cbiAqIEltcGxlbWVudGVkIGJ5IEFic3RyYWN0U3FsUXVlcmllciBhbmQgYWxsIFNRTC1iYXNlZCBxdWVyaWVycy5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBTcWxRdWVyaWVyIGV4dGVuZHMgUXVlcmllciB7XG4gIC8qKlxuICAgKiBUaGUgU1FMIGRpYWxlY3QgKHByb3ZpZGVzIGVzY2FwZUlkQ2hhciBhbmQgb3RoZXIgZGlhbGVjdC1zcGVjaWZpYyBpbmZvKVxuICAgKi9cbiAgcmVhZG9ubHkgZGlhbGVjdDogU3FsUXVlcnlEaWFsZWN0O1xuXG4gIC8qKlxuICAgKiBFeGVjdXRlIGEgcmF3IFNRTCBxdWVyeSBhbmQgcmV0dXJuIHJlc3VsdHNcbiAgICovXG4gIGFsbDxUPihxdWVyeTogc3RyaW5nLCB2YWx1ZXM/OiB1bmtub3duW10pOiBQcm9taXNlPFRbXT47XG5cbiAgLyoqXG4gICAqIEV4ZWN1dGUgYSByYXcgU1FMIGNvbW1hbmQgKElOU0VSVCwgVVBEQVRFLCBERUxFVEUsIERETClcbiAgICovXG4gIHJ1bihxdWVyeTogc3RyaW5nLCB2YWx1ZXM/OiB1bmtub3duW10pOiBQcm9taXNlPFF1ZXJ5VXBkYXRlUmVzdWx0Pjtcbn1cblxuLyoqXG4gKiBUeXBlIGd1YXJkIHRvIGNoZWNrIGlmIGEgcXVlcmllciBzdXBwb3J0cyByYXcgU1FMIGV4ZWN1dGlvblxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTcWxRdWVyaWVyKHF1ZXJpZXI6IFF1ZXJpZXIpOiBxdWVyaWVyIGlzIFNxbFF1ZXJpZXIge1xuICBjb25zdCBxID0gcXVlcmllciBhcyBTcWxRdWVyaWVyO1xuICByZXR1cm4gKFxuICAgIHR5cGVvZiBxLmFsbCA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHR5cGVvZiBxLnJ1biA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgIHEuZGlhbGVjdCAhPT0gdW5kZWZpbmVkICYmXG4gICAgdHlwZW9mIHEuZGlhbGVjdC5lc2NhcGVJZENoYXIgPT09ICdzdHJpbmcnXG4gICk7XG59XG5cbi8qKlxuICogRXh0ZW5kZWQgcXVlcmllciBpbnRlcmZhY2UgZm9yIE1vbmdvREIgZXhlY3V0aW9uLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIE1vbmdvUXVlcmllciBleHRlbmRzIFF1ZXJpZXIge1xuICAvKipcbiAgICogVGhlIE1vbmdvREIgZGF0YWJhc2UgaW5zdGFuY2UuXG4gICAqL1xuICByZWFkb25seSBkYjogRGI7XG59XG5cbi8qKlxuICogbG9nZ2VyIGZ1bmN0aW9uIHRvIGRlYnVnIHF1ZXJpZXMuXG4gKi9cbmV4cG9ydCB0eXBlIExvZ2dlciA9IChtZXNzYWdlOiB1bmtub3duLCAuLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd247XG5cbmV4cG9ydCB0eXBlIEV4dHJhT3B0aW9ucyA9IHtcbiAgcmVhZG9ubHkgbG9nZ2VyPzogTG9nZ2VyO1xuICByZWFkb25seSBuYW1pbmdTdHJhdGVneT86IE5hbWluZ1N0cmF0ZWd5O1xufTtcbiJdfQ==
|