@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
|
@@ -1,365 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.AbstractSqlDialect = void 0;
|
|
4
|
-
const sqlstring_1 = require("sqlstring");
|
|
5
|
-
const type_1 = require("../type");
|
|
6
|
-
const util_1 = require("../util");
|
|
7
|
-
const entity_1 = require("../entity");
|
|
8
|
-
class AbstractSqlDialect {
|
|
9
|
-
escapeIdChar;
|
|
10
|
-
beginTransactionCommand;
|
|
11
|
-
escapeIdRegex;
|
|
12
|
-
constructor(escapeIdChar, beginTransactionCommand) {
|
|
13
|
-
this.escapeIdChar = escapeIdChar;
|
|
14
|
-
this.beginTransactionCommand = beginTransactionCommand;
|
|
15
|
-
this.escapeIdRegex = RegExp(escapeIdChar, 'g');
|
|
16
|
-
}
|
|
17
|
-
criteria(entity, qm, opts = {}) {
|
|
18
|
-
const meta = (0, entity_1.getMeta)(entity);
|
|
19
|
-
const prefix = opts.prefix ?? (opts.autoPrefix || (0, util_1.isProjectingRelations)(meta, qm.$project)) ? meta.name : undefined;
|
|
20
|
-
const where = this.where(entity, qm.$filter, { ...opts, prefix });
|
|
21
|
-
const group = this.group(entity, qm.$group, { ...opts, prefix });
|
|
22
|
-
const having = this.where(entity, qm.$having, { ...opts, prefix, clause: 'HAVING' });
|
|
23
|
-
const sort = this.sort(entity, qm.$sort, { ...opts, prefix });
|
|
24
|
-
const pager = this.pager(qm);
|
|
25
|
-
return where + group + having + sort + pager;
|
|
26
|
-
}
|
|
27
|
-
projectFields(entity, project, opts = {}) {
|
|
28
|
-
const meta = (0, entity_1.getMeta)(entity);
|
|
29
|
-
const prefix = opts.prefix ? opts.prefix + '.' : '';
|
|
30
|
-
const escapedPrefix = this.escapeId(opts.prefix, true, true);
|
|
31
|
-
let fields;
|
|
32
|
-
if (project) {
|
|
33
|
-
if (Array.isArray(project)) {
|
|
34
|
-
fields = project;
|
|
35
|
-
}
|
|
36
|
-
else {
|
|
37
|
-
const positiveProjectKeys = (0, util_1.getKeys)(project).filter((key) => project[key]);
|
|
38
|
-
fields = positiveProjectKeys.length
|
|
39
|
-
? positiveProjectKeys.map((key) => {
|
|
40
|
-
const val = project[key];
|
|
41
|
-
if (val instanceof type_1.QueryRaw) {
|
|
42
|
-
return (0, util_1.raw)(val.value, key);
|
|
43
|
-
}
|
|
44
|
-
return key;
|
|
45
|
-
})
|
|
46
|
-
: (0, util_1.getKeys)(meta.fields).filter((key) => !(key in project));
|
|
47
|
-
}
|
|
48
|
-
fields = fields.filter((key) => key instanceof type_1.QueryRaw || meta.fields[key]);
|
|
49
|
-
if (!fields.length || (opts.prefix && !fields.includes(meta.id))) {
|
|
50
|
-
fields = [meta.id, ...fields];
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
fields = (0, util_1.getKeys)(meta.fields);
|
|
55
|
-
}
|
|
56
|
-
return fields
|
|
57
|
-
.map((key) => {
|
|
58
|
-
if (key instanceof type_1.QueryRaw) {
|
|
59
|
-
return (0, util_1.getRawValue)({
|
|
60
|
-
value: key,
|
|
61
|
-
dialect: this,
|
|
62
|
-
prefix,
|
|
63
|
-
escapedPrefix,
|
|
64
|
-
autoPrefixAlias: opts.autoPrefixAlias,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
const field = meta.fields[key];
|
|
68
|
-
if (field.virtual) {
|
|
69
|
-
return (0, util_1.getRawValue)({
|
|
70
|
-
value: (0, util_1.raw)(field.virtual.value, key),
|
|
71
|
-
dialect: this,
|
|
72
|
-
prefix,
|
|
73
|
-
escapedPrefix,
|
|
74
|
-
autoPrefixAlias: opts.autoPrefixAlias,
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
const name = field?.name ?? key;
|
|
78
|
-
const fieldPath = `${escapedPrefix}${this.escapeId(name)}`;
|
|
79
|
-
return !opts.autoPrefixAlias && (name === key || !field) ? fieldPath : `${fieldPath} ${this.escapeId((prefix + key), true)}`;
|
|
80
|
-
})
|
|
81
|
-
.join(', ');
|
|
82
|
-
}
|
|
83
|
-
projectRelations(entity, project = {}, { prefix } = {}) {
|
|
84
|
-
const meta = (0, entity_1.getMeta)(entity);
|
|
85
|
-
const relations = (0, util_1.getProjectRelationKeys)(meta, project);
|
|
86
|
-
const isProjectArray = Array.isArray(project);
|
|
87
|
-
let fields = '';
|
|
88
|
-
let tables = '';
|
|
89
|
-
for (const key of relations) {
|
|
90
|
-
const relOpts = meta.relations[key];
|
|
91
|
-
if (relOpts.cardinality === '1m' || relOpts.cardinality === 'mm') {
|
|
92
|
-
// '1m' and 'mm' should be resolved in a higher layer because they will need multiple queries
|
|
93
|
-
continue;
|
|
94
|
-
}
|
|
95
|
-
const joinRelAlias = prefix ? prefix + '.' + key : key;
|
|
96
|
-
const relEntity = relOpts.entity();
|
|
97
|
-
const relProject = project[key];
|
|
98
|
-
const relQuery = isProjectArray ? {} : Array.isArray(relProject) ? { $project: relProject } : relProject;
|
|
99
|
-
const relColumns = this.projectFields(relEntity, relQuery.$project, {
|
|
100
|
-
prefix: joinRelAlias,
|
|
101
|
-
autoPrefixAlias: true,
|
|
102
|
-
});
|
|
103
|
-
fields += ', ' + relColumns;
|
|
104
|
-
const { fields: subColumns, tables: subTables } = this.projectRelations(relEntity, relQuery.$project, {
|
|
105
|
-
prefix: joinRelAlias,
|
|
106
|
-
});
|
|
107
|
-
fields += subColumns;
|
|
108
|
-
const relMeta = (0, entity_1.getMeta)(relEntity);
|
|
109
|
-
const relEntityName = this.escapeId(relMeta.name);
|
|
110
|
-
const relPath = prefix ? this.escapeId(prefix, true) : this.escapeId(meta.name);
|
|
111
|
-
const joinType = relQuery.$required ? 'INNER' : 'LEFT';
|
|
112
|
-
const joinAlias = this.escapeId(joinRelAlias, true);
|
|
113
|
-
tables += ` ${joinType} JOIN ${relEntityName} ${joinAlias} ON `;
|
|
114
|
-
tables += relOpts.references.map((it) => `${joinAlias}.${this.escapeId(it.foreign)} = ${relPath}.${this.escapeId(it.local)}`).join(' AND ');
|
|
115
|
-
if (relQuery.$filter) {
|
|
116
|
-
const filter = this.where(relEntity, relQuery.$filter, { prefix: key, clause: false });
|
|
117
|
-
tables += ` AND ${filter}`;
|
|
118
|
-
}
|
|
119
|
-
tables += subTables;
|
|
120
|
-
}
|
|
121
|
-
return { fields, tables };
|
|
122
|
-
}
|
|
123
|
-
select(entity, qm, opts = {}) {
|
|
124
|
-
const meta = (0, entity_1.getMeta)(entity);
|
|
125
|
-
const prefix = opts.prefix ?? (opts.autoPrefix || (0, util_1.isProjectingRelations)(meta, qm.$project)) ? meta.name : undefined;
|
|
126
|
-
const fields = this.projectFields(entity, qm.$project, { prefix });
|
|
127
|
-
const { fields: relationFields, tables } = this.projectRelations(entity, qm.$project);
|
|
128
|
-
return `SELECT ${fields}${relationFields} FROM ${this.escapeId(meta.name)}${tables}`;
|
|
129
|
-
}
|
|
130
|
-
where(entity, filter = {}, opts = {}) {
|
|
131
|
-
const meta = (0, entity_1.getMeta)(entity);
|
|
132
|
-
const { usePrecedence, clause = 'WHERE', softDelete } = opts;
|
|
133
|
-
filter = (0, util_1.getQueryFilterAsMap)(meta, filter);
|
|
134
|
-
if (meta.softDelete && (softDelete || softDelete === undefined) && clause !== 'HAVING' && !filter[meta.softDelete]) {
|
|
135
|
-
filter[meta.softDelete] = null;
|
|
136
|
-
}
|
|
137
|
-
const entries = Object.entries(filter);
|
|
138
|
-
if (!entries.length) {
|
|
139
|
-
return '';
|
|
140
|
-
}
|
|
141
|
-
const options = { ...opts, usePrecedence: entries.length > 1 };
|
|
142
|
-
let sql = entries.map(([key, val]) => this.compare(entity, key, val, options)).join(` AND `);
|
|
143
|
-
if (usePrecedence) {
|
|
144
|
-
sql = `(${sql})`;
|
|
145
|
-
}
|
|
146
|
-
return clause ? ` ${clause} ${sql}` : sql;
|
|
147
|
-
}
|
|
148
|
-
compare(entity, key, val, opts) {
|
|
149
|
-
const meta = (0, entity_1.getMeta)(entity);
|
|
150
|
-
if (val instanceof type_1.QueryRaw) {
|
|
151
|
-
if (key === '$exists' || key === '$nexists') {
|
|
152
|
-
const value = val;
|
|
153
|
-
const query = (0, util_1.getRawValue)({
|
|
154
|
-
value,
|
|
155
|
-
dialect: this,
|
|
156
|
-
prefix: meta.name,
|
|
157
|
-
escapedPrefix: this.escapeId(meta.name, false, true),
|
|
158
|
-
});
|
|
159
|
-
return `${key === '$exists' ? 'EXISTS' : 'NOT EXISTS'} (${query})`;
|
|
160
|
-
}
|
|
161
|
-
const comparisonKey = this.getComparisonKey(entity, key, opts);
|
|
162
|
-
return `${comparisonKey} = ${val.value}`;
|
|
163
|
-
}
|
|
164
|
-
if (key === '$text') {
|
|
165
|
-
const search = val;
|
|
166
|
-
const fields = search.$fields.map((field) => this.escapeId(meta.fields[field]?.name ?? field));
|
|
167
|
-
return `${this.escapeId(meta.name)} MATCH {${fields.join(' ')}} : ${this.escape(search.$value)}`;
|
|
168
|
-
}
|
|
169
|
-
if (key === '$and' || key === '$or' || key === '$not' || key === '$nor') {
|
|
170
|
-
const negateOperatorMap = {
|
|
171
|
-
$not: '$and',
|
|
172
|
-
$nor: '$or',
|
|
173
|
-
};
|
|
174
|
-
const op = negateOperatorMap[key] ?? key;
|
|
175
|
-
const negate = key in negateOperatorMap ? 'NOT ' : '';
|
|
176
|
-
const values = val;
|
|
177
|
-
const hasManyItems = values.length > 1;
|
|
178
|
-
const logicalComparison = values
|
|
179
|
-
.map((filterEntry) => {
|
|
180
|
-
if (filterEntry instanceof type_1.QueryRaw) {
|
|
181
|
-
return (0, util_1.getRawValue)({
|
|
182
|
-
value: filterEntry,
|
|
183
|
-
dialect: this,
|
|
184
|
-
prefix: opts.prefix,
|
|
185
|
-
escapedPrefix: this.escapeId(opts.prefix, true, true),
|
|
186
|
-
});
|
|
187
|
-
}
|
|
188
|
-
return this.where(entity, filterEntry, {
|
|
189
|
-
prefix: opts.prefix,
|
|
190
|
-
usePrecedence: hasManyItems && !Array.isArray(filterEntry) && (0, util_1.getKeys)(filterEntry).length > 1,
|
|
191
|
-
clause: false,
|
|
192
|
-
});
|
|
193
|
-
})
|
|
194
|
-
.join(op === '$or' ? ' OR ' : ' AND ');
|
|
195
|
-
return (opts.usePrecedence || negate) && hasManyItems ? `${negate}(${logicalComparison})` : `${negate}${logicalComparison}`;
|
|
196
|
-
}
|
|
197
|
-
const value = Array.isArray(val) ? { $in: val } : typeof val === 'object' && val !== null ? val : { $eq: val };
|
|
198
|
-
const operators = (0, util_1.getKeys)(value);
|
|
199
|
-
const comparisons = operators.map((op) => this.compareFieldOperator(entity, key, op, value[op], opts)).join(' AND ');
|
|
200
|
-
return operators.length > 1 ? `(${comparisons})` : comparisons;
|
|
201
|
-
}
|
|
202
|
-
compareFieldOperator(entity, key, op, val, opts) {
|
|
203
|
-
const comparisonKey = this.getComparisonKey(entity, key, opts);
|
|
204
|
-
switch (op) {
|
|
205
|
-
case '$eq':
|
|
206
|
-
return val === null ? `${comparisonKey} IS NULL` : `${comparisonKey} = ${this.escape(val)}`;
|
|
207
|
-
case '$ne':
|
|
208
|
-
return val === null ? `${comparisonKey} IS NOT NULL` : `${comparisonKey} <> ${this.escape(val)}`;
|
|
209
|
-
case '$not':
|
|
210
|
-
return this.compare(entity, '$not', [{ [key]: val }], opts);
|
|
211
|
-
case '$gt':
|
|
212
|
-
return `${comparisonKey} > ${this.escape(val)}`;
|
|
213
|
-
case '$gte':
|
|
214
|
-
return `${comparisonKey} >= ${this.escape(val)}`;
|
|
215
|
-
case '$lt':
|
|
216
|
-
return `${comparisonKey} < ${this.escape(val)}`;
|
|
217
|
-
case '$lte':
|
|
218
|
-
return `${comparisonKey} <= ${this.escape(val)}`;
|
|
219
|
-
case '$startsWith':
|
|
220
|
-
return `${comparisonKey} LIKE ${this.escape(`${val}%`)}`;
|
|
221
|
-
case '$istartsWith':
|
|
222
|
-
return `LOWER(${comparisonKey}) LIKE ${this.escape(val.toLowerCase() + '%')}`;
|
|
223
|
-
case '$endsWith':
|
|
224
|
-
return `${comparisonKey} LIKE ${this.escape(`%${val}`)}`;
|
|
225
|
-
case '$iendsWith':
|
|
226
|
-
return `LOWER(${comparisonKey}) LIKE ${this.escape('%' + val.toLowerCase())}`;
|
|
227
|
-
case '$includes':
|
|
228
|
-
return `${comparisonKey} LIKE ${this.escape(`%${val}%`)}`;
|
|
229
|
-
case '$iincludes':
|
|
230
|
-
return `LOWER(${comparisonKey}) LIKE ${this.escape('%' + val.toLowerCase() + '%')}`;
|
|
231
|
-
case '$ilike':
|
|
232
|
-
return `LOWER(${comparisonKey}) LIKE ${this.escape(val.toLowerCase())}`;
|
|
233
|
-
case '$like':
|
|
234
|
-
return `${comparisonKey} LIKE ${this.escape(val)}`;
|
|
235
|
-
case '$in':
|
|
236
|
-
return `${comparisonKey} IN (${this.escape(val)})`;
|
|
237
|
-
case '$nin':
|
|
238
|
-
return `${comparisonKey} NOT IN (${this.escape(val)})`;
|
|
239
|
-
case '$regex':
|
|
240
|
-
return `${comparisonKey} REGEXP ${this.escape(val)}`;
|
|
241
|
-
default:
|
|
242
|
-
throw TypeError(`unknown operator: ${op}`);
|
|
243
|
-
}
|
|
244
|
-
}
|
|
245
|
-
getComparisonKey(entity, key, { prefix } = {}) {
|
|
246
|
-
const meta = (0, entity_1.getMeta)(entity);
|
|
247
|
-
const escapedPrefix = this.escapeId(prefix, true, true);
|
|
248
|
-
const field = meta.fields[key];
|
|
249
|
-
if (field?.virtual) {
|
|
250
|
-
return (0, util_1.getRawValue)({
|
|
251
|
-
value: field.virtual,
|
|
252
|
-
dialect: this,
|
|
253
|
-
prefix,
|
|
254
|
-
escapedPrefix,
|
|
255
|
-
});
|
|
256
|
-
}
|
|
257
|
-
return escapedPrefix + this.escapeId(field?.name ?? key);
|
|
258
|
-
}
|
|
259
|
-
group(entity, fields, opts = {}) {
|
|
260
|
-
if (!fields?.length) {
|
|
261
|
-
return '';
|
|
262
|
-
}
|
|
263
|
-
const meta = (0, entity_1.getMeta)(entity);
|
|
264
|
-
const names = fields.map((key) => this.escapeId(meta.fields[key]?.name ?? key)).join(', ');
|
|
265
|
-
return ` GROUP BY ${names}`;
|
|
266
|
-
}
|
|
267
|
-
sort(entity, sort, { prefix } = {}) {
|
|
268
|
-
const sortMap = (0, util_1.buildSortMap)(sort);
|
|
269
|
-
if (!(0, util_1.hasKeys)(sortMap)) {
|
|
270
|
-
return '';
|
|
271
|
-
}
|
|
272
|
-
const meta = (0, entity_1.getMeta)(entity);
|
|
273
|
-
const flattenedSort = (0, util_1.flatObject)(sortMap, prefix);
|
|
274
|
-
const directionMap = { 1: '', asc: '', '-1': ' DESC', desc: ' DESC' };
|
|
275
|
-
const order = Object.entries(flattenedSort)
|
|
276
|
-
.map(([key, sort]) => {
|
|
277
|
-
const name = meta.fields[key]?.name ?? key;
|
|
278
|
-
const direction = directionMap[sort];
|
|
279
|
-
return this.escapeId(name) + direction;
|
|
280
|
-
})
|
|
281
|
-
.join(', ');
|
|
282
|
-
return ` ORDER BY ${order}`;
|
|
283
|
-
}
|
|
284
|
-
pager(opts) {
|
|
285
|
-
let sql = '';
|
|
286
|
-
if (opts.$limit) {
|
|
287
|
-
sql += ` LIMIT ${Number(opts.$limit)}`;
|
|
288
|
-
}
|
|
289
|
-
if (opts.$skip !== undefined) {
|
|
290
|
-
sql += ` OFFSET ${Number(opts.$skip)}`;
|
|
291
|
-
}
|
|
292
|
-
return sql;
|
|
293
|
-
}
|
|
294
|
-
count(entity, qm, opts) {
|
|
295
|
-
const search = {
|
|
296
|
-
...qm,
|
|
297
|
-
$project: [(0, util_1.raw)('COUNT(*)', 'count')],
|
|
298
|
-
};
|
|
299
|
-
delete search.$sort;
|
|
300
|
-
delete search.$skip;
|
|
301
|
-
delete search.$limit;
|
|
302
|
-
const select = this.select(entity, search);
|
|
303
|
-
const criteria = this.criteria(entity, search, opts);
|
|
304
|
-
return select + criteria;
|
|
305
|
-
}
|
|
306
|
-
find(entity, qm, opts) {
|
|
307
|
-
const select = this.select(entity, qm, opts);
|
|
308
|
-
const criteria = this.criteria(entity, qm, opts);
|
|
309
|
-
return select + criteria;
|
|
310
|
-
}
|
|
311
|
-
insert(entity, payload) {
|
|
312
|
-
const meta = (0, entity_1.getMeta)(entity);
|
|
313
|
-
const records = (0, util_1.getPersistables)(meta, payload, 'onInsert');
|
|
314
|
-
const keys = (0, util_1.getKeys)(records[0]);
|
|
315
|
-
const columns = keys.map((key) => this.escapeId(meta.fields[key].name));
|
|
316
|
-
const values = records.map((record) => keys.map((key) => this.escape(record[key])).join(', ')).join('), (');
|
|
317
|
-
return `INSERT INTO ${this.escapeId(meta.name)} (${columns.join(', ')}) VALUES (${values})`;
|
|
318
|
-
}
|
|
319
|
-
update(entity, qm, payload, opts) {
|
|
320
|
-
const meta = (0, entity_1.getMeta)(entity);
|
|
321
|
-
const record = (0, util_1.getPersistable)(meta, payload, 'onUpdate');
|
|
322
|
-
const keys = (0, util_1.getKeys)(record);
|
|
323
|
-
const entries = keys.map((key) => `${this.escapeId(key)} = ${this.escape(payload[key])}`).join(', ');
|
|
324
|
-
const criteria = this.criteria(entity, qm, opts);
|
|
325
|
-
return `UPDATE ${this.escapeId(meta.name)} SET ${entries}${criteria}`;
|
|
326
|
-
}
|
|
327
|
-
delete(entity, qm, opts = {}) {
|
|
328
|
-
const meta = (0, entity_1.getMeta)(entity);
|
|
329
|
-
if (opts.softDelete || opts.softDelete === undefined) {
|
|
330
|
-
if (meta.softDelete) {
|
|
331
|
-
const criteria = this.criteria(entity, qm, opts);
|
|
332
|
-
const value = (0, util_1.getFieldCallbackValue)(meta.fields[meta.softDelete].onDelete);
|
|
333
|
-
return `UPDATE ${this.escapeId(meta.name)} SET ${this.escapeId(meta.softDelete)} = ${this.escape(value)}${criteria}`;
|
|
334
|
-
}
|
|
335
|
-
else if (opts.softDelete) {
|
|
336
|
-
throw TypeError(`'${meta.name}' has not enabled 'softDelete'`);
|
|
337
|
-
}
|
|
338
|
-
}
|
|
339
|
-
const criteria = this.criteria(entity, qm, opts);
|
|
340
|
-
return `DELETE FROM ${this.escapeId(meta.name)}${criteria}`;
|
|
341
|
-
}
|
|
342
|
-
escapeId(val, forbidQualified, addDot) {
|
|
343
|
-
if (!val) {
|
|
344
|
-
return '';
|
|
345
|
-
}
|
|
346
|
-
if (!forbidQualified && val.includes('.')) {
|
|
347
|
-
return val
|
|
348
|
-
.split('.')
|
|
349
|
-
.map((it) => this.escapeId(it))
|
|
350
|
-
.join('.');
|
|
351
|
-
}
|
|
352
|
-
// sourced from 'escapeId' function here https://github.com/mysqljs/sqlstring/blob/master/lib/SqlString.js
|
|
353
|
-
const escaped = this.escapeIdChar + val.replace(this.escapeIdRegex, this.escapeIdChar + this.escapeIdChar) + this.escapeIdChar;
|
|
354
|
-
const suffix = addDot ? '.' : '';
|
|
355
|
-
return escaped + suffix;
|
|
356
|
-
}
|
|
357
|
-
escape(value) {
|
|
358
|
-
if (value instanceof type_1.QueryRaw) {
|
|
359
|
-
return (0, util_1.getRawValue)({ value, dialect: this });
|
|
360
|
-
}
|
|
361
|
-
return (0, sqlstring_1.escape)(value);
|
|
362
|
-
}
|
|
363
|
-
}
|
|
364
|
-
exports.AbstractSqlDialect = AbstractSqlDialect;
|
|
365
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWJzdHJhY3RTcWxEaWFsZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RpYWxlY3QvYWJzdHJhY3RTcWxEaWFsZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHlDQUFtQztBQUNuQyxrQ0F1QmlCO0FBQ2pCLGtDQWFpQjtBQUVqQixzQ0FBb0M7QUFFcEMsTUFBc0Isa0JBQWtCO0lBR2pCO0lBQWtDO0lBRjlDLGFBQWEsQ0FBUztJQUUvQixZQUFxQixZQUF1QixFQUFXLHVCQUErQjtRQUFqRSxpQkFBWSxHQUFaLFlBQVksQ0FBVztRQUFXLDRCQUF1QixHQUF2Qix1QkFBdUIsQ0FBUTtRQUNwRixJQUFJLENBQUMsYUFBYSxHQUFHLE1BQU0sQ0FBQyxZQUFZLEVBQUUsR0FBRyxDQUFDLENBQUM7SUFDakQsQ0FBQztJQUVELFFBQVEsQ0FBSSxNQUFlLEVBQUUsRUFBWSxFQUFFLE9BQXFCLEVBQUU7UUFDaEUsTUFBTSxJQUFJLEdBQUcsSUFBQSxnQkFBTyxFQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQzdCLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUEsNEJBQXFCLEVBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDcEgsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBSSxNQUFNLEVBQUUsRUFBRSxDQUFDLE9BQU8sRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDckUsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBSSxNQUFNLEVBQUUsRUFBRSxDQUFDLE1BQU0sRUFBRSxFQUFFLEdBQUcsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDcEUsTUFB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QUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBRWpDLE9BQU8sT0FBTyxHQUFHLE1BQU0sQ0FBQztJQUMxQixDQUFDO0lBRUQsTUFBTSxDQUFDLEtBQVU7UUFDZixJQUFJLEtBQUssWUFBWSxlQUFRLEVBQUU7WUFDN0IsT0FBTyxJQUFBLGtCQUFXLEVBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7U0FDOUM7UUFDRCxPQUFPLElBQUEsa0JBQU0sRUFBQyxLQUFLLENBQUMsQ0FBQztJQUN2QixDQUFDO0NBQ0Y7QUF0YUQsZ0RBc2FDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZXNjYXBlIH0gZnJvbSAnc3Fsc3RyaW5nJztcbmltcG9ydCB7XG4gIFF1ZXJ5RmlsdGVyLFxuICBRdWVyeSxcbiAgU2NhbGFyLFxuICBRdWVyeUZpbHRlckZpZWxkT3BlcmF0b3JNYXAsXG4gIFF1ZXJ5U29ydCxcbiAgUXVlcnlQYWdlcixcbiAgUXVlcnlUZXh0U2VhcmNoT3B0aW9ucyxcbiAgRmllbGRLZXksXG4gIFF1ZXJ5UHJvamVjdCxcbiAgVHlwZSxcbiAgUXVlcnlDcml0ZXJpYSxcbiAgUXVlcnlQcm9qZWN0QXJyYXksXG4gIFF1ZXJ5T3B0aW9ucyxcbiAgUXVlcnlEaWFsZWN0LFxuICBRdWVyeUZpbHRlck9wdGlvbnMsXG4gIFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMsXG4gIFF1ZXJ5RmlsdGVyTWFwLFxuICBRdWVyeVNlYXJjaCxcbiAgUXVlcnlQcm9qZWN0T3B0aW9ucyxcbiAgUXVlcnlTb3J0RGlyZWN0aW9uLFxuICBRdWVyeUZpbHRlckxvZ2ljYWwsXG4gIFF1ZXJ5UmF3LFxufSBmcm9tICcuLi90eXBlJztcbmltcG9ydCB7XG4gIGdldFBlcnNpc3RhYmxlLFxuICBnZXRQcm9qZWN0UmVsYXRpb25LZXlzLFxuICBnZXRQZXJzaXN0YWJsZXMsXG4gIGlzUHJvamVjdGluZ1JlbGF0aW9ucyxcbiAgZ2V0S2V5cyxcbiAgaGFzS2V5cyxcbiAgYnVpbGRTb3J0TWFwLFxuICBmbGF0T2JqZWN0LFxuICBnZXRSYXdWYWx1ZSxcbiAgcmF3LFxuICBnZXRRdWVyeUZpbHRlckFzTWFwLFxuICBnZXRGaWVsZENhbGxiYWNrVmFsdWUsXG59IGZyb20gJy4uL3V0aWwnO1xuXG5pbXBvcnQgeyBnZXRNZXRhIH0gZnJvbSAnLi4vZW50aXR5JztcblxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIEFic3RyYWN0U3FsRGlhbGVjdCBpbXBsZW1lbnRzIFF1ZXJ5RGlhbGVjdCB7XG4gIHJlYWRvbmx5IGVzY2FwZUlkUmVnZXg6IFJlZ0V4cDtcblxuICBjb25zdHJ1Y3RvcihyZWFkb25seSBlc2NhcGVJZENoYXI6ICdgJyB8ICdcIicsIHJlYWRvbmx5IGJlZ2luVHJhbnNhY3Rpb25Db21tYW5kOiBzdHJpbmcpIHtcbiAgICB0aGlzLmVzY2FwZUlkUmVnZXggPSBSZWdFeHAoZXNjYXBlSWRDaGFyLCAnZycpO1xuICB9XG5cbiAgY3JpdGVyaWE8RT4oZW50aXR5OiBUeXBlPEU+LCBxbTogUXVlcnk8RT4sIG9wdHM6IFF1ZXJ5T3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIGNvbnN0IHByZWZpeCA9IG9wdHMucHJlZml4ID8/IChvcHRzLmF1dG9QcmVmaXggfHwgaXNQcm9qZWN0aW5nUmVsYXRpb25zKG1ldGEsIHFtLiRwcm9qZWN0KSkgPyBtZXRhLm5hbWUgOiB1bmRlZmluZWQ7XG4gICAgY29uc3Qgd2hlcmUgPSB0aGlzLndoZXJlPEU+KGVudGl0eSwgcW0uJGZpbHRlciwgeyAuLi5vcHRzLCBwcmVmaXggfSk7XG4gICAgY29uc3QgZ3JvdXAgPSB0aGlzLmdyb3VwPEU+KGVudGl0eSwgcW0uJGdyb3VwLCB7IC4uLm9wdHMsIHByZWZpeCB9KTtcbiAgICBjb25zdCBoYXZpbmcgPSB0aGlzLndoZXJlPEU+KGVudGl0eSwgcW0uJGhhdmluZywgeyAuLi5vcHRzLCBwcmVmaXgsIGNsYXVzZTogJ0hBVklORycgfSk7XG4gICAgY29uc3Qgc29ydCA9IHRoaXMuc29ydDxFPihlbnRpdHksIHFtLiRzb3J0LCB7IC4uLm9wdHMsIHByZWZpeCB9KTtcbiAgICBjb25zdCBwYWdlciA9IHRoaXMucGFnZXIocW0pO1xuICAgIHJldHVybiB3aGVyZSArIGdyb3VwICsgaGF2aW5nICsgc29ydCArIHBhZ2VyO1xuICB9XG5cbiAgcHJvamVjdEZpZWxkczxFPihlbnRpdHk6IFR5cGU8RT4sIHByb2plY3Q6IFF1ZXJ5UHJvamVjdDxFPiwgb3B0czogUXVlcnlQcm9qZWN0T3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIGNvbnN0IHByZWZpeCA9IG9wdHMucHJlZml4ID8gb3B0cy5wcmVmaXggKyAnLicgOiAnJztcbiAgICBjb25zdCBlc2NhcGVkUHJlZml4ID0gdGhpcy5lc2NhcGVJZChvcHRzLnByZWZpeCwgdHJ1ZSwgdHJ1ZSk7XG5cbiAgICBsZXQgZmllbGRzOiBRdWVyeVByb2plY3RBcnJheTxFPjtcblxuICAgIGlmIChwcm9qZWN0KSB7XG4gICAgICBpZiAoQXJyYXkuaXNBcnJheShwcm9qZWN0KSkge1xuICAgICAgICBmaWVsZHMgPSBwcm9qZWN0O1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY29uc3QgcG9zaXRpdmVQcm9qZWN0S2V5cyA9IGdldEtleXMocHJvamVjdCkuZmlsdGVyKChrZXkpID0+IHByb2plY3Rba2V5XSk7XG4gICAgICAgIGZpZWxkcyA9IHBvc2l0aXZlUHJvamVjdEtleXMubGVuZ3RoXG4gICAgICAgICAgPyBwb3NpdGl2ZVByb2plY3RLZXlzLm1hcCgoa2V5KSA9PiB7XG4gICAgICAgICAgICAgIGNvbnN0IHZhbCA9IHByb2plY3Rba2V5XTtcbiAgICAgICAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIFF1ZXJ5UmF3KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHJhdyh2YWwudmFsdWUsIGtleSk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgcmV0dXJuIGtleSBhcyBGaWVsZEtleTxFPjtcbiAgICAgICAgICAgIH0pXG4gICAgICAgICAgOiAoZ2V0S2V5cyhtZXRhLmZpZWxkcykuZmlsdGVyKChrZXkpID0+ICEoa2V5IGluIHByb2plY3QpKSBhcyBGaWVsZEtleTxFPltdKTtcbiAgICAgIH1cbiAgICAgIGZpZWxkcyA9IGZpZWxkcy5maWx0ZXIoKGtleSkgPT4ga2V5IGluc3RhbmNlb2YgUXVlcnlSYXcgfHwgbWV0YS5maWVsZHNba2V5IGFzIEZpZWxkS2V5PEU+XSk7XG4gICAgICBpZiAoIWZpZWxkcy5sZW5ndGggfHwgKG9wdHMucHJlZml4ICYmICFmaWVsZHMuaW5jbHVkZXMobWV0YS5pZCkpKSB7XG4gICAgICAgIGZpZWxkcyA9IFttZXRhLmlkLCAuLi5maWVsZHNdO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmaWVsZHMgPSBnZXRLZXlzKG1ldGEuZmllbGRzKSBhcyBGaWVsZEtleTxFPltdO1xuICAgIH1cblxuICAgIHJldHVybiBmaWVsZHNcbiAgICAgIC5tYXAoKGtleSkgPT4ge1xuICAgICAgICBpZiAoa2V5IGluc3RhbmNlb2YgUXVlcnlSYXcpIHtcbiAgICAgICAgICByZXR1cm4gZ2V0UmF3VmFsdWUoe1xuICAgICAgICAgICAgdmFsdWU6IGtleSxcbiAgICAgICAgICAgIGRpYWxlY3Q6IHRoaXMsXG4gICAgICAgICAgICBwcmVmaXgsXG4gICAgICAgICAgICBlc2NhcGVkUHJlZml4LFxuICAgICAgICAgICAgYXV0b1ByZWZpeEFsaWFzOiBvcHRzLmF1dG9QcmVmaXhBbGlhcyxcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpZWxkID0gbWV0YS5maWVsZHNba2V5IGFzIEZpZWxkS2V5PEU+XTtcblxuICAgICAgICBpZiAoZmllbGQudmlydHVhbCkge1xuICAgICAgICAgIHJldHVybiBnZXRSYXdWYWx1ZSh7XG4gICAgICAgICAgICB2YWx1ZTogcmF3KGZpZWxkLnZpcnR1YWwudmFsdWUsIGtleSksXG4gICAgICAgICAgICBkaWFsZWN0OiB0aGlzLFxuICAgICAgICAgICAgcHJlZml4LFxuICAgICAgICAgICAgZXNjYXBlZFByZWZpeCxcbiAgICAgICAgICAgIGF1dG9QcmVmaXhBbGlhczogb3B0cy5hdXRvUHJlZml4QWxpYXMsXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCBuYW1lID0gZmllbGQ/Lm5hbWUgPz8gKGtleSBhcyBGaWVsZEtleTxFPik7XG4gICAgICAgIGNvbnN0IGZpZWxkUGF0aCA9IGAke2VzY2FwZWRQcmVmaXh9JHt0aGlzLmVzY2FwZUlkKG5hbWUpfWA7XG5cbiAgICAgICAgcmV0dXJuICFvcHRzLmF1dG9QcmVmaXhBbGlhcyAmJiAobmFtZSA9PT0ga2V5IHx8ICFmaWVsZCkgPyBmaWVsZFBhdGggOiBgJHtmaWVsZFBhdGh9ICR7dGhpcy5lc2NhcGVJZCgocHJlZml4ICsga2V5KSBhcyBGaWVsZEtleTxFPiwgdHJ1ZSl9YDtcbiAgICAgIH0pXG4gICAgICAuam9pbignLCAnKTtcbiAgfVxuXG4gIHByb2plY3RSZWxhdGlvbnM8RT4oZW50aXR5OiBUeXBlPEU+LCBwcm9qZWN0OiBRdWVyeVByb2plY3Q8RT4gPSB7fSwgeyBwcmVmaXggfTogeyBwcmVmaXg/OiBzdHJpbmcgfSA9IHt9KTogeyBmaWVsZHM6IHN0cmluZzsgdGFibGVzOiBzdHJpbmcgfSB7XG4gICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcbiAgICBjb25zdCByZWxhdGlvbnMgPSBnZXRQcm9qZWN0UmVsYXRpb25LZXlzKG1ldGEsIHByb2plY3QpO1xuICAgIGNvbnN0IGlzUHJvamVjdEFycmF5ID0gQXJyYXkuaXNBcnJheShwcm9qZWN0KTtcbiAgICBsZXQgZmllbGRzID0gJyc7XG4gICAgbGV0IHRhYmxlcyA9ICcnO1xuXG4gICAgZm9yIChjb25zdCBrZXkgb2YgcmVsYXRpb25zKSB7XG4gICAgICBjb25zdCByZWxPcHRzID0gbWV0YS5yZWxhdGlvbnNba2V5XTtcblxuICAgICAgaWYgKHJlbE9wdHMuY2FyZGluYWxpdHkgPT09ICcxbScgfHwgcmVsT3B0cy5jYXJkaW5hbGl0eSA9PT0gJ21tJykge1xuICAgICAgICAvLyAnMW0nIGFuZCAnbW0nIHNob3VsZCBiZSByZXNvbHZlZCBpbiBhIGhpZ2hlciBsYXllciBiZWNhdXNlIHRoZXkgd2lsbCBuZWVkIG11bHRpcGxlIHF1ZXJpZXNcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG5cbiAgICAgIGNvbnN0IGpvaW5SZWxBbGlhcyA9IHByZWZpeCA/IHByZWZpeCArICcuJyArIGtleSA6IGtleTtcbiAgICAgIGNvbnN0IHJlbEVudGl0eSA9IHJlbE9wdHMuZW50aXR5KCk7XG4gICAgICBjb25zdCByZWxQcm9qZWN0ID0gcHJvamVjdFtrZXkgYXMgc3RyaW5nXTtcbiAgICAgIGNvbnN0IHJlbFF1ZXJ5ID0gaXNQcm9qZWN0QXJyYXkgPyB7fSA6IEFycmF5LmlzQXJyYXkocmVsUHJvamVjdCkgPyB7ICRwcm9qZWN0OiByZWxQcm9qZWN0IH0gOiByZWxQcm9qZWN0O1xuXG4gICAgICBjb25zdCByZWxDb2x1bW5zID0gdGhpcy5wcm9qZWN0RmllbGRzKHJlbEVudGl0eSwgcmVsUXVlcnkuJHByb2plY3QsIHtcbiAgICAgICAgcHJlZml4OiBqb2luUmVsQWxpYXMsXG4gICAgICAgIGF1dG9QcmVmaXhBbGlhczogdHJ1ZSxcbiAgICAgIH0pO1xuXG4gICAgICBmaWVsZHMgKz0gJywgJyArIHJlbENvbHVtbnM7XG5cbiAgICAgIGNvbnN0IHsgZmllbGRzOiBzdWJDb2x1bW5zLCB0YWJsZXM6IHN1YlRhYmxlcyB9ID0gdGhpcy5wcm9qZWN0UmVsYXRpb25zKHJlbEVudGl0eSwgcmVsUXVlcnkuJHByb2plY3QsIHtcbiAgICAgICAgcHJlZml4OiBqb2luUmVsQWxpYXMsXG4gICAgICB9KTtcblxuICAgICAgZmllbGRzICs9IHN1YkNvbHVtbnM7XG5cbiAgICAgIGNvbnN0IHJlbE1ldGEgPSBnZXRNZXRhKHJlbEVudGl0eSk7XG4gICAgICBjb25zdCByZWxFbnRpdHlOYW1lID0gdGhpcy5lc2NhcGVJZChyZWxNZXRhLm5hbWUpO1xuICAgICAgY29uc3QgcmVsUGF0aCA9IHByZWZpeCA/IHRoaXMuZXNjYXBlSWQocHJlZml4LCB0cnVlKSA6IHRoaXMuZXNjYXBlSWQobWV0YS5uYW1lKTtcbiAgICAgIGNvbnN0IGpvaW5UeXBlID0gcmVsUXVlcnkuJHJlcXVpcmVkID8gJ0lOTkVSJyA6ICdMRUZUJztcbiAgICAgIGNvbnN0IGpvaW5BbGlhcyA9IHRoaXMuZXNjYXBlSWQoam9pblJlbEFsaWFzLCB0cnVlKTtcblxuICAgICAgdGFibGVzICs9IGAgJHtqb2luVHlwZX0gSk9JTiAke3JlbEVudGl0eU5hbWV9ICR7am9pbkFsaWFzfSBPTiBgO1xuICAgICAgdGFibGVzICs9IHJlbE9wdHMucmVmZXJlbmNlcy5tYXAoKGl0KSA9PiBgJHtqb2luQWxpYXN9LiR7dGhpcy5lc2NhcGVJZChpdC5mb3JlaWduKX0gPSAke3JlbFBhdGh9LiR7dGhpcy5lc2NhcGVJZChpdC5sb2NhbCl9YCkuam9pbignIEFORCAnKTtcblxuICAgICAgaWYgKHJlbFF1ZXJ5LiRmaWx0ZXIpIHtcbiAgICAgICAgY29uc3QgZmlsdGVyID0gdGhpcy53aGVyZShyZWxFbnRpdHksIHJlbFF1ZXJ5LiRmaWx0ZXIsIHsgcHJlZml4OiBrZXksIGNsYXVzZTogZmFsc2UgfSk7XG4gICAgICAgIHRhYmxlcyArPSBgIEFORCAke2ZpbHRlcn1gO1xuICAgICAgfVxuXG4gICAgICB0YWJsZXMgKz0gc3ViVGFibGVzO1xuICAgIH1cblxuICAgIHJldHVybiB7IGZpZWxkcywgdGFibGVzIH07XG4gIH1cblxuICBzZWxlY3Q8RT4oZW50aXR5OiBUeXBlPEU+LCBxbTogUXVlcnk8RT4sIG9wdHM6IFF1ZXJ5T3B0aW9ucyA9IHt9KTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIGNvbnN0IHByZWZpeCA9IG9wdHMucHJlZml4ID8/IChvcHRzLmF1dG9QcmVmaXggfHwgaXNQcm9qZWN0aW5nUmVsYXRpb25zKG1ldGEsIHFtLiRwcm9qZWN0KSkgPyBtZXRhLm5hbWUgOiB1bmRlZmluZWQ7XG5cbiAgICBjb25zdCBmaWVsZHMgPSB0aGlzLnByb2plY3RGaWVsZHMoZW50aXR5LCBxbS4kcHJvamVjdCwgeyBwcmVmaXggfSk7XG4gICAgY29uc3QgeyBmaWVsZHM6IHJlbGF0aW9uRmllbGRzLCB0YWJsZXMgfSA9IHRoaXMucHJvamVjdFJlbGF0aW9ucyhlbnRpdHksIHFtLiRwcm9qZWN0KTtcblxuICAgIHJldHVybiBgU0VMRUNUICR7ZmllbGRzfSR7cmVsYXRpb25GaWVsZHN9IEZST00gJHt0aGlzLmVzY2FwZUlkKG1ldGEubmFtZSl9JHt0YWJsZXN9YDtcbiAgfVxuXG4gIHdoZXJlPEU+KGVudGl0eTogVHlwZTxFPiwgZmlsdGVyOiBRdWVyeUZpbHRlcjxFPiA9IHt9LCBvcHRzOiBRdWVyeUZpbHRlck9wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcbiAgICBjb25zdCB7IHVzZVByZWNlZGVuY2UsIGNsYXVzZSA9ICdXSEVSRScsIHNvZnREZWxldGUgfSA9IG9wdHM7XG5cbiAgICBmaWx0ZXIgPSBnZXRRdWVyeUZpbHRlckFzTWFwKG1ldGEsIGZpbHRlcik7XG5cbiAgICBpZiAobWV0YS5zb2Z0RGVsZXRlICYmIChzb2Z0RGVsZXRlIHx8IHNvZnREZWxldGUgPT09IHVuZGVmaW5lZCkgJiYgY2xhdXNlICE9PSAnSEFWSU5HJyAmJiAhZmlsdGVyW21ldGEuc29mdERlbGV0ZSBhcyBzdHJpbmddKSB7XG4gICAgICBmaWx0ZXJbbWV0YS5zb2Z0RGVsZXRlIGFzIHN0cmluZ10gPSBudWxsO1xuICAgIH1cblxuICAgIGNvbnN0IGVudHJpZXMgPSBPYmplY3QuZW50cmllcyhmaWx0ZXIpO1xuXG4gICAgaWYgKCFlbnRyaWVzLmxlbmd0aCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cblxuICAgIGNvbnN0IG9wdGlvbnMgPSB7IC4uLm9wdHMsIHVzZVByZWNlZGVuY2U6IGVudHJpZXMubGVuZ3RoID4gMSB9O1xuXG4gICAgbGV0IHNxbCA9IGVudHJpZXMubWFwKChba2V5LCB2YWxdKSA9PiB0aGlzLmNvbXBhcmUoZW50aXR5LCBrZXkgYXMga2V5b2YgUXVlcnlGaWx0ZXJNYXA8RT4sIHZhbCBhcyBhbnksIG9wdGlvbnMpKS5qb2luKGAgQU5EIGApO1xuXG4gICAgaWYgKHVzZVByZWNlZGVuY2UpIHtcbiAgICAgIHNxbCA9IGAoJHtzcWx9KWA7XG4gICAgfVxuXG4gICAgcmV0dXJuIGNsYXVzZSA/IGAgJHtjbGF1c2V9ICR7c3FsfWAgOiBzcWw7XG4gIH1cblxuICBjb21wYXJlPEUsIEsgZXh0ZW5kcyBrZXlvZiBRdWVyeUZpbHRlck1hcDxFPj4oZW50aXR5OiBUeXBlPEU+LCBrZXk6IEssIHZhbDogUXVlcnlGaWx0ZXJNYXA8RT5bS10sIG9wdHM/OiBRdWVyeUNvbXBhcmlzb25PcHRpb25zKTogc3RyaW5nIHtcbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuXG4gICAgaWYgKHZhbCBpbnN0YW5jZW9mIFF1ZXJ5UmF3KSB7XG4gICAgICBpZiAoa2V5ID09PSAnJGV4aXN0cycgfHwga2V5ID09PSAnJG5leGlzdHMnKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdmFsIGFzIFF1ZXJ5UmF3O1xuICAgICAgICBjb25zdCBxdWVyeSA9IGdldFJhd1ZhbHVlKHtcbiAgICAgICAgICB2YWx1ZSxcbiAgICAgICAgICBkaWFsZWN0OiB0aGlzLFxuICAgICAgICAgIHByZWZpeDogbWV0YS5uYW1lLFxuICAgICAgICAgIGVzY2FwZWRQcmVmaXg6IHRoaXMuZXNjYXBlSWQobWV0YS5uYW1lLCBmYWxzZSwgdHJ1ZSksXG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gYCR7a2V5ID09PSAnJGV4aXN0cycgPyAnRVhJU1RTJyA6ICdOT1QgRVhJU1RTJ30gKCR7cXVlcnl9KWA7XG4gICAgICB9XG4gICAgICBjb25zdCBjb21wYXJpc29uS2V5ID0gdGhpcy5nZXRDb21wYXJpc29uS2V5KGVudGl0eSwga2V5IGFzIEZpZWxkS2V5PEU+LCBvcHRzKTtcbiAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSA9ICR7dmFsLnZhbHVlfWA7XG4gICAgfVxuXG4gICAgaWYgKGtleSA9PT0gJyR0ZXh0Jykge1xuICAgICAgY29uc3Qgc2VhcmNoID0gdmFsIGFzIFF1ZXJ5VGV4dFNlYXJjaE9wdGlvbnM8RT47XG4gICAgICBjb25zdCBmaWVsZHMgPSBzZWFyY2guJGZpZWxkcy5tYXAoKGZpZWxkKSA9PiB0aGlzLmVzY2FwZUlkKG1ldGEuZmllbGRzW2ZpZWxkXT8ubmFtZSA/PyBmaWVsZCkpO1xuICAgICAgcmV0dXJuIGAke3RoaXMuZXNjYXBlSWQobWV0YS5uYW1lKX0gTUFUQ0ggeyR7ZmllbGRzLmpvaW4oJyAnKX19IDogJHt0aGlzLmVzY2FwZShzZWFyY2guJHZhbHVlKX1gO1xuICAgIH1cblxuICAgIGlmIChrZXkgPT09ICckYW5kJyB8fCBrZXkgPT09ICckb3InIHx8IGtleSA9PT0gJyRub3QnIHx8IGtleSA9PT0gJyRub3InKSB7XG4gICAgICBjb25zdCBuZWdhdGVPcGVyYXRvck1hcCA9IHtcbiAgICAgICAgJG5vdDogJyRhbmQnLFxuICAgICAgICAkbm9yOiAnJG9yJyxcbiAgICAgIH0gYXMgY29uc3Q7XG5cbiAgICAgIGNvbnN0IG9wOiAnJGFuZCcgfCAnJG9yJyA9IG5lZ2F0ZU9wZXJhdG9yTWFwW2tleSBhcyBzdHJpbmddID8/IGtleTtcbiAgICAgIGNvbnN0IG5lZ2F0ZSA9IGtleSBpbiBuZWdhdGVPcGVyYXRvck1hcCA/ICdOT1QgJyA6ICcnO1xuXG4gICAgICBjb25zdCB2YWx1ZXMgPSB2YWwgYXMgUXVlcnlGaWx0ZXJMb2dpY2FsPEU+O1xuICAgICAgY29uc3QgaGFzTWFueUl0ZW1zID0gdmFsdWVzLmxlbmd0aCA+IDE7XG4gICAgICBjb25zdCBsb2dpY2FsQ29tcGFyaXNvbiA9IHZhbHVlc1xuICAgICAgICAubWFwKChmaWx0ZXJFbnRyeSkgPT4ge1xuICAgICAgICAgIGlmIChmaWx0ZXJFbnRyeSBpbnN0YW5jZW9mIFF1ZXJ5UmF3KSB7XG4gICAgICAgICAgICByZXR1cm4gZ2V0UmF3VmFsdWUoe1xuICAgICAgICAgICAgICB2YWx1ZTogZmlsdGVyRW50cnksXG4gICAgICAgICAgICAgIGRpYWxlY3Q6IHRoaXMsXG4gICAgICAgICAgICAgIHByZWZpeDogb3B0cy5wcmVmaXgsXG4gICAgICAgICAgICAgIGVzY2FwZWRQcmVmaXg6IHRoaXMuZXNjYXBlSWQob3B0cy5wcmVmaXgsIHRydWUsIHRydWUpLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiB0aGlzLndoZXJlKGVudGl0eSwgZmlsdGVyRW50cnksIHtcbiAgICAgICAgICAgIHByZWZpeDogb3B0cy5wcmVmaXgsXG4gICAgICAgICAgICB1c2VQcmVjZWRlbmNlOiBoYXNNYW55SXRlbXMgJiYgIUFycmF5LmlzQXJyYXkoZmlsdGVyRW50cnkpICYmIGdldEtleXMoZmlsdGVyRW50cnkpLmxlbmd0aCA+IDEsXG4gICAgICAgICAgICBjbGF1c2U6IGZhbHNlLFxuICAgICAgICAgIH0pO1xuICAgICAgICB9KVxuICAgICAgICAuam9pbihvcCA9PT0gJyRvcicgPyAnIE9SICcgOiAnIEFORCAnKTtcblxuICAgICAgcmV0dXJuIChvcHRzLnVzZVByZWNlZGVuY2UgfHwgbmVnYXRlKSAmJiBoYXNNYW55SXRlbXMgPyBgJHtuZWdhdGV9KCR7bG9naWNhbENvbXBhcmlzb259KWAgOiBgJHtuZWdhdGV9JHtsb2dpY2FsQ29tcGFyaXNvbn1gO1xuICAgIH1cblxuICAgIGNvbnN0IHZhbHVlID0gQXJyYXkuaXNBcnJheSh2YWwpID8geyAkaW46IHZhbCB9IDogdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgdmFsICE9PSBudWxsID8gdmFsIDogeyAkZXE6IHZhbCB9O1xuICAgIGNvbnN0IG9wZXJhdG9ycyA9IGdldEtleXModmFsdWUpIGFzIChrZXlvZiBRdWVyeUZpbHRlckZpZWxkT3BlcmF0b3JNYXA8RT4pW107XG4gICAgY29uc3QgY29tcGFyaXNvbnMgPSBvcGVyYXRvcnMubWFwKChvcCkgPT4gdGhpcy5jb21wYXJlRmllbGRPcGVyYXRvcihlbnRpdHksIGtleSBhcyBGaWVsZEtleTxFPiwgb3AsIHZhbHVlW29wXSwgb3B0cykpLmpvaW4oJyBBTkQgJyk7XG5cbiAgICByZXR1cm4gb3BlcmF0b3JzLmxlbmd0aCA+IDEgPyBgKCR7Y29tcGFyaXNvbnN9KWAgOiBjb21wYXJpc29ucztcbiAgfVxuXG4gIGNvbXBhcmVGaWVsZE9wZXJhdG9yPEUsIEsgZXh0ZW5kcyBrZXlvZiBRdWVyeUZpbHRlckZpZWxkT3BlcmF0b3JNYXA8RT4+KFxuICAgIGVudGl0eTogVHlwZTxFPixcbiAgICBrZXk6IEZpZWxkS2V5PEU+LFxuICAgIG9wOiBLLFxuICAgIHZhbDogUXVlcnlGaWx0ZXJGaWVsZE9wZXJhdG9yTWFwPEU+W0tdLFxuICAgIG9wdHM/OiBRdWVyeU9wdGlvbnNcbiAgKTogc3RyaW5nIHtcbiAgICBjb25zdCBjb21wYXJpc29uS2V5ID0gdGhpcy5nZXRDb21wYXJpc29uS2V5KGVudGl0eSwga2V5LCBvcHRzKTtcbiAgICBzd2l0Y2ggKG9wKSB7XG4gICAgICBjYXNlICckZXEnOlxuICAgICAgICByZXR1cm4gdmFsID09PSBudWxsID8gYCR7Y29tcGFyaXNvbktleX0gSVMgTlVMTGAgOiBgJHtjb21wYXJpc29uS2V5fSA9ICR7dGhpcy5lc2NhcGUodmFsKX1gO1xuICAgICAgY2FzZSAnJG5lJzpcbiAgICAgICAgcmV0dXJuIHZhbCA9PT0gbnVsbCA/IGAke2NvbXBhcmlzb25LZXl9IElTIE5PVCBOVUxMYCA6IGAke2NvbXBhcmlzb25LZXl9IDw+ICR7dGhpcy5lc2NhcGUodmFsKX1gO1xuICAgICAgY2FzZSAnJG5vdCc6XG4gICAgICAgIHJldHVybiB0aGlzLmNvbXBhcmUoZW50aXR5LCAnJG5vdCcsIFt7IFtrZXldOiB2YWwgfV0gYXMgYW55LCBvcHRzKTtcbiAgICAgIGNhc2UgJyRndCc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSA+ICR7dGhpcy5lc2NhcGUodmFsKX1gO1xuICAgICAgY2FzZSAnJGd0ZSc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSA+PSAke3RoaXMuZXNjYXBlKHZhbCl9YDtcbiAgICAgIGNhc2UgJyRsdCc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSA8ICR7dGhpcy5lc2NhcGUodmFsKX1gO1xuICAgICAgY2FzZSAnJGx0ZSc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSA8PSAke3RoaXMuZXNjYXBlKHZhbCl9YDtcbiAgICAgIGNhc2UgJyRzdGFydHNXaXRoJzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IExJS0UgJHt0aGlzLmVzY2FwZShgJHt2YWx9JWApfWA7XG4gICAgICBjYXNlICckaXN0YXJ0c1dpdGgnOlxuICAgICAgICByZXR1cm4gYExPV0VSKCR7Y29tcGFyaXNvbktleX0pIExJS0UgJHt0aGlzLmVzY2FwZSgodmFsIGFzIHN0cmluZykudG9Mb3dlckNhc2UoKSArICclJyl9YDtcbiAgICAgIGNhc2UgJyRlbmRzV2l0aCc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSBMSUtFICR7dGhpcy5lc2NhcGUoYCUke3ZhbH1gKX1gO1xuICAgICAgY2FzZSAnJGllbmRzV2l0aCc6XG4gICAgICAgIHJldHVybiBgTE9XRVIoJHtjb21wYXJpc29uS2V5fSkgTElLRSAke3RoaXMuZXNjYXBlKCclJyArICh2YWwgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpKX1gO1xuICAgICAgY2FzZSAnJGluY2x1ZGVzJzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IExJS0UgJHt0aGlzLmVzY2FwZShgJSR7dmFsfSVgKX1gO1xuICAgICAgY2FzZSAnJGlpbmNsdWRlcyc6XG4gICAgICAgIHJldHVybiBgTE9XRVIoJHtjb21wYXJpc29uS2V5fSkgTElLRSAke3RoaXMuZXNjYXBlKCclJyArICh2YWwgYXMgc3RyaW5nKS50b0xvd2VyQ2FzZSgpICsgJyUnKX1gO1xuICAgICAgY2FzZSAnJGlsaWtlJzpcbiAgICAgICAgcmV0dXJuIGBMT1dFUigke2NvbXBhcmlzb25LZXl9KSBMSUtFICR7dGhpcy5lc2NhcGUoKHZhbCBhcyBzdHJpbmcpLnRvTG93ZXJDYXNlKCkpfWA7XG4gICAgICBjYXNlICckbGlrZSc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSBMSUtFICR7dGhpcy5lc2NhcGUodmFsKX1gO1xuICAgICAgY2FzZSAnJGluJzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IElOICgke3RoaXMuZXNjYXBlKHZhbCl9KWA7XG4gICAgICBjYXNlICckbmluJzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IE5PVCBJTiAoJHt0aGlzLmVzY2FwZSh2YWwpfSlgO1xuICAgICAgY2FzZSAnJHJlZ2V4JzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IFJFR0VYUCAke3RoaXMuZXNjYXBlKHZhbCl9YDtcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIHRocm93IFR5cGVFcnJvcihgdW5rbm93biBvcGVyYXRvcjogJHtvcH1gKTtcbiAgICB9XG4gIH1cblxuICBnZXRDb21wYXJpc29uS2V5PEU+KGVudGl0eTogVHlwZTxFPiwga2V5OiBGaWVsZEtleTxFPiwgeyBwcmVmaXggfTogUXVlcnlPcHRpb25zID0ge30pOiBTY2FsYXIge1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgY29uc3QgZXNjYXBlZFByZWZpeCA9IHRoaXMuZXNjYXBlSWQocHJlZml4LCB0cnVlLCB0cnVlKTtcbiAgICBjb25zdCBmaWVsZCA9IG1ldGEuZmllbGRzW2tleV07XG5cbiAgICBpZiAoZmllbGQ/LnZpcnR1YWwpIHtcbiAgICAgIHJldHVybiBnZXRSYXdWYWx1ZSh7XG4gICAgICAgIHZhbHVlOiBmaWVsZC52aXJ0dWFsLFxuICAgICAgICBkaWFsZWN0OiB0aGlzLFxuICAgICAgICBwcmVmaXgsXG4gICAgICAgIGVzY2FwZWRQcmVmaXgsXG4gICAgICB9KTtcbiAgICB9XG5cbiAgICByZXR1cm4gZXNjYXBlZFByZWZpeCArIHRoaXMuZXNjYXBlSWQoZmllbGQ/Lm5hbWUgPz8ga2V5KTtcbiAgfVxuXG4gIGdyb3VwPEU+KGVudGl0eTogVHlwZTxFPiwgZmllbGRzOiByZWFkb25seSBGaWVsZEtleTxFPltdLCBvcHRzOiBRdWVyeU9wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gICAgaWYgKCFmaWVsZHM/Lmxlbmd0aCkge1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgICBjb25zdCBtZXRhID0gZ2V0TWV0YShlbnRpdHkpO1xuICAgIGNvbnN0IG5hbWVzID0gZmllbGRzLm1hcCgoa2V5KSA9PiB0aGlzLmVzY2FwZUlkKG1ldGEuZmllbGRzW2tleV0/Lm5hbWUgPz8ga2V5KSkuam9pbignLCAnKTtcbiAgICByZXR1cm4gYCBHUk9VUCBCWSAke25hbWVzfWA7XG4gIH1cblxuICBzb3J0PEU+KGVudGl0eTogVHlwZTxFPiwgc29ydDogUXVlcnlTb3J0PEU+LCB7IHByZWZpeCB9OiBRdWVyeU9wdGlvbnMgPSB7fSk6IHN0cmluZyB7XG4gICAgY29uc3Qgc29ydE1hcCA9IGJ1aWxkU29ydE1hcChzb3J0KTtcbiAgICBpZiAoIWhhc0tleXMoc29ydE1hcCkpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG4gICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcbiAgICBjb25zdCBmbGF0dGVuZWRTb3J0ID0gZmxhdE9iamVjdChzb3J0TWFwLCBwcmVmaXgpO1xuICAgIGNvbnN0IGRpcmVjdGlvbk1hcCA9IHsgMTogJycsIGFzYzogJycsICctMSc6ICcgREVTQycsIGRlc2M6ICcgREVTQycgfSBhcyBjb25zdDtcbiAgICBjb25zdCBvcmRlciA9IE9iamVjdC5lbnRyaWVzKGZsYXR0ZW5lZFNvcnQpXG4gICAgICAubWFwKChba2V5LCBzb3J0XSkgPT4ge1xuICAgICAgICBjb25zdCBuYW1lID0gbWV0YS5maWVsZHNba2V5XT8ubmFtZSA/PyBrZXk7XG4gICAgICAgIGNvbnN0IGRpcmVjdGlvbiA9IGRpcmVjdGlvbk1hcFtzb3J0IGFzIFF1ZXJ5U29ydERpcmVjdGlvbl07XG4gICAgICAgIHJldHVybiB0aGlzLmVzY2FwZUlkKG5hbWUpICsgZGlyZWN0aW9uO1xuICAgICAgfSlcbiAgICAgIC5qb2luKCcsICcpO1xuICAgIHJldHVybiBgIE9SREVSIEJZICR7b3JkZXJ9YDtcbiAgfVxuXG4gIHBhZ2VyKG9wdHM6IFF1ZXJ5UGFnZXIpOiBzdHJpbmcge1xuICAgIGxldCBzcWwgPSAnJztcbiAgICBpZiAob3B0cy4kbGltaXQpIHtcbiAgICAgIHNxbCArPSBgIExJTUlUICR7TnVtYmVyKG9wdHMuJGxpbWl0KX1gO1xuICAgIH1cbiAgICBpZiAob3B0cy4kc2tpcCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBzcWwgKz0gYCBPRkZTRVQgJHtOdW1iZXIob3B0cy4kc2tpcCl9YDtcbiAgICB9XG4gICAgcmV0dXJuIHNxbDtcbiAgfVxuXG4gIGNvdW50PEU+KGVudGl0eTogVHlwZTxFPiwgcW06IFF1ZXJ5U2VhcmNoPEU+LCBvcHRzPzogUXVlcnlPcHRpb25zKTogc3RyaW5nIHtcbiAgICBjb25zdCBzZWFyY2g6IFF1ZXJ5PEU+ID0ge1xuICAgICAgLi4ucW0sXG4gICAgICAkcHJvamVjdDogW3JhdygnQ09VTlQoKiknLCAnY291bnQnKV0sXG4gICAgfTtcblxuICAgIGRlbGV0ZSBzZWFyY2guJHNvcnQ7XG4gICAgZGVsZXRlIHNlYXJjaC4kc2tpcDtcbiAgICBkZWxldGUgc2VhcmNoLiRsaW1pdDtcblxuICAgIGNvbnN0IHNlbGVjdCA9IHRoaXMuc2VsZWN0PEU+KGVudGl0eSwgc2VhcmNoKTtcbiAgICBjb25zdCBjcml0ZXJpYSA9IHRoaXMuY3JpdGVyaWEoZW50aXR5LCBzZWFyY2gsIG9wdHMpO1xuXG4gICAgcmV0dXJuIHNlbGVjdCArIGNyaXRlcmlhO1xuICB9XG5cbiAgZmluZDxFPihlbnRpdHk6IFR5cGU8RT4sIHFtOiBRdWVyeTxFPiwgb3B0cz86IFF1ZXJ5T3B0aW9ucyk6IHN0cmluZyB7XG4gICAgY29uc3Qgc2VsZWN0ID0gdGhpcy5zZWxlY3Q8RT4oZW50aXR5LCBxbSwgb3B0cyk7XG4gICAgY29uc3QgY3JpdGVyaWEgPSB0aGlzLmNyaXRlcmlhKGVudGl0eSwgcW0sIG9wdHMpO1xuICAgIHJldHVybiBzZWxlY3QgKyBjcml0ZXJpYTtcbiAgfVxuXG4gIGluc2VydDxFPihlbnRpdHk6IFR5cGU8RT4sIHBheWxvYWQ6IEUgfCBFW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgY29uc3QgcmVjb3JkcyA9IGdldFBlcnNpc3RhYmxlcyhtZXRhLCBwYXlsb2FkLCAnb25JbnNlcnQnKTtcbiAgICBjb25zdCBrZXlzID0gZ2V0S2V5cyhyZWNvcmRzWzBdKTtcbiAgICBjb25zdCBjb2x1bW5zID0ga2V5cy5tYXAoKGtleSkgPT4gdGhpcy5lc2NhcGVJZChtZXRhLmZpZWxkc1trZXldLm5hbWUpKTtcbiAgICBjb25zdCB2YWx1ZXMgPSByZWNvcmRzLm1hcCgocmVjb3JkKSA9PiBrZXlzLm1hcCgoa2V5KSA9PiB0aGlzLmVzY2FwZShyZWNvcmRba2V5XSkpLmpvaW4oJywgJykpLmpvaW4oJyksICgnKTtcbiAgICByZXR1cm4gYElOU0VSVCBJTlRPICR7dGhpcy5lc2NhcGVJZChtZXRhLm5hbWUpfSAoJHtjb2x1bW5zLmpvaW4oJywgJyl9KSBWQUxVRVMgKCR7dmFsdWVzfSlgO1xuICB9XG5cbiAgdXBkYXRlPEU+KGVudGl0eTogVHlwZTxFPiwgcW06IFF1ZXJ5Q3JpdGVyaWE8RT4sIHBheWxvYWQ6IEUsIG9wdHM/OiBRdWVyeU9wdGlvbnMpOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgY29uc3QgcmVjb3JkID0gZ2V0UGVyc2lzdGFibGUobWV0YSwgcGF5bG9hZCwgJ29uVXBkYXRlJyk7XG4gICAgY29uc3Qga2V5cyA9IGdldEtleXMocmVjb3JkKTtcbiAgICBjb25zdCBlbnRyaWVzID0ga2V5cy5tYXAoKGtleSkgPT4gYCR7dGhpcy5lc2NhcGVJZChrZXkpfSA9ICR7dGhpcy5lc2NhcGUocGF5bG9hZFtrZXldKX1gKS5qb2luKCcsICcpO1xuICAgIGNvbnN0IGNyaXRlcmlhID0gdGhpcy5jcml0ZXJpYShlbnRpdHksIHFtLCBvcHRzKTtcbiAgICByZXR1cm4gYFVQREFURSAke3RoaXMuZXNjYXBlSWQobWV0YS5uYW1lKX0gU0VUICR7ZW50cmllc30ke2NyaXRlcmlhfWA7XG4gIH1cblxuICBkZWxldGU8RT4oZW50aXR5OiBUeXBlPEU+LCBxbTogUXVlcnlDcml0ZXJpYTxFPiwgb3B0czogUXVlcnlPcHRpb25zID0ge30pOiBzdHJpbmcge1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG5cbiAgICBpZiAob3B0cy5zb2Z0RGVsZXRlIHx8IG9wdHMuc29mdERlbGV0ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICBpZiAobWV0YS5zb2Z0RGVsZXRlKSB7XG4gICAgICAgIGNvbnN0IGNyaXRlcmlhID0gdGhpcy5jcml0ZXJpYShlbnRpdHksIHFtLCBvcHRzKTtcbiAgICAgICAgY29uc3QgdmFsdWUgPSBnZXRGaWVsZENhbGxiYWNrVmFsdWUobWV0YS5maWVsZHNbbWV0YS5zb2Z0RGVsZXRlXS5vbkRlbGV0ZSk7XG4gICAgICAgIHJldHVybiBgVVBEQVRFICR7dGhpcy5lc2NhcGVJZChtZXRhLm5hbWUpfSBTRVQgJHt0aGlzLmVzY2FwZUlkKG1ldGEuc29mdERlbGV0ZSl9ID0gJHt0aGlzLmVzY2FwZSh2YWx1ZSl9JHtjcml0ZXJpYX1gO1xuICAgICAgfSBlbHNlIGlmIChvcHRzLnNvZnREZWxldGUpIHtcbiAgICAgICAgdGhyb3cgVHlwZUVycm9yKGAnJHttZXRhLm5hbWV9JyBoYXMgbm90IGVuYWJsZWQgJ3NvZnREZWxldGUnYCk7XG4gICAgICB9XG4gICAgfVxuXG4gICAgY29uc3QgY3JpdGVyaWEgPSB0aGlzLmNyaXRlcmlhKGVudGl0eSwgcW0sIG9wdHMpO1xuXG4gICAgcmV0dXJuIGBERUxFVEUgRlJPTSAke3RoaXMuZXNjYXBlSWQobWV0YS5uYW1lKX0ke2NyaXRlcmlhfWA7XG4gIH1cblxuICBlc2NhcGVJZCh2YWw6IHN0cmluZywgZm9yYmlkUXVhbGlmaWVkPzogYm9vbGVhbiwgYWRkRG90PzogYm9vbGVhbik6IHN0cmluZyB7XG4gICAgaWYgKCF2YWwpIHtcbiAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBpZiAoIWZvcmJpZFF1YWxpZmllZCAmJiB2YWwuaW5jbHVkZXMoJy4nKSkge1xuICAgICAgcmV0dXJuIHZhbFxuICAgICAgICAuc3BsaXQoJy4nKVxuICAgICAgICAubWFwKChpdCkgPT4gdGhpcy5lc2NhcGVJZChpdCkpXG4gICAgICAgIC5qb2luKCcuJyk7XG4gICAgfVxuXG4gICAgLy8gc291cmNlZCBmcm9tICdlc2NhcGVJZCcgZnVuY3Rpb24gaGVyZSBodHRwczovL2dpdGh1Yi5jb20vbXlzcWxqcy9zcWxzdHJpbmcvYmxvYi9tYXN0ZXIvbGliL1NxbFN0cmluZy5qc1xuICAgIGNvbnN0IGVzY2FwZWQgPSB0aGlzLmVzY2FwZUlkQ2hhciArIHZhbC5yZXBsYWNlKHRoaXMuZXNjYXBlSWRSZWdleCwgdGhpcy5lc2NhcGVJZENoYXIgKyB0aGlzLmVzY2FwZUlkQ2hhcikgKyB0aGlzLmVzY2FwZUlkQ2hhcjtcblxuICAgIGNvbnN0IHN1ZmZpeCA9IGFkZERvdCA/ICcuJyA6ICcnO1xuXG4gICAgcmV0dXJuIGVzY2FwZWQgKyBzdWZmaXg7XG4gIH1cblxuICBlc2NhcGUodmFsdWU6IGFueSk6IFNjYWxhciB7XG4gICAgaWYgKHZhbHVlIGluc3RhbmNlb2YgUXVlcnlSYXcpIHtcbiAgICAgIHJldHVybiBnZXRSYXdWYWx1ZSh7IHZhbHVlLCBkaWFsZWN0OiB0aGlzIH0pO1xuICAgIH1cbiAgICByZXR1cm4gZXNjYXBlKHZhbHVlKTtcbiAgfVxufVxuIl19
|
package/dialect/index.d.ts
DELETED
package/dialect/index.js
DELETED
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
const tslib_1 = require("tslib");
|
|
4
|
-
tslib_1.__exportStar(require("./abstractSqlDialect"), exports);
|
|
5
|
-
tslib_1.__exportStar(require("./mysqlDialect"), exports);
|
|
6
|
-
tslib_1.__exportStar(require("./postgresDialect"), exports);
|
|
7
|
-
tslib_1.__exportStar(require("./sqliteDialect"), exports);
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvZGlhbGVjdC9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFBQSwrREFBcUM7QUFDckMseURBQStCO0FBQy9CLDREQUFrQztBQUNsQywwREFBZ0MiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgKiBmcm9tICcuL2Fic3RyYWN0U3FsRGlhbGVjdCc7XG5leHBvcnQgKiBmcm9tICcuL215c3FsRGlhbGVjdCc7XG5leHBvcnQgKiBmcm9tICcuL3Bvc3RncmVzRGlhbGVjdCc7XG5leHBvcnQgKiBmcm9tICcuL3NxbGl0ZURpYWxlY3QnO1xuIl19
|
|
@@ -1,6 +0,0 @@
|
|
|
1
|
-
import { QueryComparisonOptions, QueryFilterMap, Type } from '../type';
|
|
2
|
-
import { AbstractSqlDialect } from './abstractSqlDialect';
|
|
3
|
-
export declare class MySqlDialect extends AbstractSqlDialect {
|
|
4
|
-
constructor();
|
|
5
|
-
compare<E, K extends keyof QueryFilterMap<E>>(entity: Type<E>, key: K, val: QueryFilterMap<E>[K], opts?: QueryComparisonOptions): string;
|
|
6
|
-
}
|
package/dialect/mysqlDialect.js
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.MySqlDialect = void 0;
|
|
4
|
-
const entity_1 = require("../entity");
|
|
5
|
-
const abstractSqlDialect_1 = require("./abstractSqlDialect");
|
|
6
|
-
class MySqlDialect extends abstractSqlDialect_1.AbstractSqlDialect {
|
|
7
|
-
constructor() {
|
|
8
|
-
super('`', 'START TRANSACTION');
|
|
9
|
-
}
|
|
10
|
-
compare(entity, key, val, opts) {
|
|
11
|
-
if (key === '$text') {
|
|
12
|
-
const meta = (0, entity_1.getMeta)(entity);
|
|
13
|
-
const search = val;
|
|
14
|
-
const fields = search.$fields.map((field) => this.escapeId(meta.fields[field]?.name ?? field));
|
|
15
|
-
return `MATCH(${fields.join(', ')}) AGAINST(${this.escape(search.$value)})`;
|
|
16
|
-
}
|
|
17
|
-
return super.compare(entity, key, val, opts);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
exports.MySqlDialect = MySqlDialect;
|
|
21
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibXlzcWxEaWFsZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RpYWxlY3QvbXlzcWxEaWFsZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUFBLHNDQUFvQztBQUVwQyw2REFBMEQ7QUFFMUQsTUFBYSxZQUFhLFNBQVEsdUNBQWtCO0lBQ2xEO1FBQ0UsS0FBSyxDQUFDLEdBQUcsRUFBRSxtQkFBbUIsQ0FBQyxDQUFDO0lBQ2xDLENBQUM7SUFFUSxPQUFPLENBQXVDLE1BQWUsRUFBRSxHQUFNLEVBQUUsR0FBeUIsRUFBRSxJQUE2QjtRQUN0SSxJQUFJLEdBQUcsS0FBSyxPQUFPLEVBQUU7WUFDbkIsTUFBTSxJQUFJLEdBQUcsSUFBQSxnQkFBTyxFQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzdCLE1BQU0sTUFBTSxHQUFHLEdBQWdDLENBQUM7WUFDaEQsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsRUFBRSxJQUFJLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztZQUMvRixPQUFPLFNBQVMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDO1NBQzdFO1FBQ0QsT0FBTyxLQUFLLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0lBQy9DLENBQUM7Q0FDRjtBQWRELG9DQWNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgZ2V0TWV0YSB9IGZyb20gJy4uL2VudGl0eSc7XG5pbXBvcnQgeyBRdWVyeUNvbXBhcmlzb25PcHRpb25zLCBRdWVyeUZpbHRlck1hcCwgUXVlcnlUZXh0U2VhcmNoT3B0aW9ucywgVHlwZSB9IGZyb20gJy4uL3R5cGUnO1xuaW1wb3J0IHsgQWJzdHJhY3RTcWxEaWFsZWN0IH0gZnJvbSAnLi9hYnN0cmFjdFNxbERpYWxlY3QnO1xuXG5leHBvcnQgY2xhc3MgTXlTcWxEaWFsZWN0IGV4dGVuZHMgQWJzdHJhY3RTcWxEaWFsZWN0IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoJ2AnLCAnU1RBUlQgVFJBTlNBQ1RJT04nKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGNvbXBhcmU8RSwgSyBleHRlbmRzIGtleW9mIFF1ZXJ5RmlsdGVyTWFwPEU+PihlbnRpdHk6IFR5cGU8RT4sIGtleTogSywgdmFsOiBRdWVyeUZpbHRlck1hcDxFPltLXSwgb3B0cz86IFF1ZXJ5Q29tcGFyaXNvbk9wdGlvbnMpOiBzdHJpbmcge1xuICAgIGlmIChrZXkgPT09ICckdGV4dCcpIHtcbiAgICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgICBjb25zdCBzZWFyY2ggPSB2YWwgYXMgUXVlcnlUZXh0U2VhcmNoT3B0aW9uczxFPjtcbiAgICAgIGNvbnN0IGZpZWxkcyA9IHNlYXJjaC4kZmllbGRzLm1hcCgoZmllbGQpID0+IHRoaXMuZXNjYXBlSWQobWV0YS5maWVsZHNbZmllbGRdPy5uYW1lID8/IGZpZWxkKSk7XG4gICAgICByZXR1cm4gYE1BVENIKCR7ZmllbGRzLmpvaW4oJywgJyl9KSBBR0FJTlNUKCR7dGhpcy5lc2NhcGUoc2VhcmNoLiR2YWx1ZSl9KWA7XG4gICAgfVxuICAgIHJldHVybiBzdXBlci5jb21wYXJlKGVudGl0eSwga2V5LCB2YWwsIG9wdHMpO1xuICB9XG59XG4iXX0=
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
import { QueryComparisonOptions, QueryFilterMap, QueryOptions, QueryFilterFieldOperatorMap, Type, FieldKey } from '../type';
|
|
2
|
-
import { AbstractSqlDialect } from './abstractSqlDialect';
|
|
3
|
-
export declare class PostgresDialect extends AbstractSqlDialect {
|
|
4
|
-
constructor();
|
|
5
|
-
insert<E>(entity: Type<E>, payload: E | E[]): string;
|
|
6
|
-
compare<E, K extends keyof QueryFilterMap<E>>(entity: Type<E>, key: K, val: QueryFilterMap<E>[K], opts?: QueryComparisonOptions): string;
|
|
7
|
-
compareFieldOperator<E, K extends keyof QueryFilterFieldOperatorMap<E>>(entity: Type<E>, key: FieldKey<E>, op: K, val: QueryFilterFieldOperatorMap<E>[K], opts?: QueryOptions): string;
|
|
8
|
-
}
|
|
@@ -1,44 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.PostgresDialect = void 0;
|
|
4
|
-
const entity_1 = require("../entity");
|
|
5
|
-
const abstractSqlDialect_1 = require("./abstractSqlDialect");
|
|
6
|
-
class PostgresDialect extends abstractSqlDialect_1.AbstractSqlDialect {
|
|
7
|
-
constructor() {
|
|
8
|
-
super('"', 'BEGIN TRANSACTION');
|
|
9
|
-
}
|
|
10
|
-
insert(entity, payload) {
|
|
11
|
-
const sql = super.insert(entity, payload);
|
|
12
|
-
const meta = (0, entity_1.getMeta)(entity);
|
|
13
|
-
const idName = meta.fields[meta.id].name;
|
|
14
|
-
return `${sql} RETURNING ${this.escapeId(idName)} ${this.escapeId('id')}`;
|
|
15
|
-
}
|
|
16
|
-
compare(entity, key, val, opts) {
|
|
17
|
-
if (key === '$text') {
|
|
18
|
-
const meta = (0, entity_1.getMeta)(entity);
|
|
19
|
-
const search = val;
|
|
20
|
-
const fields = search.$fields.map((field) => this.escapeId(meta.fields[field]?.name ?? field)).join(` || ' ' || `);
|
|
21
|
-
return `to_tsvector(${fields}) @@ to_tsquery(${this.escape(search.$value)})`;
|
|
22
|
-
}
|
|
23
|
-
return super.compare(entity, key, val, opts);
|
|
24
|
-
}
|
|
25
|
-
compareFieldOperator(entity, key, op, val, opts) {
|
|
26
|
-
const comparisonKey = this.getComparisonKey(entity, key, opts);
|
|
27
|
-
switch (op) {
|
|
28
|
-
case '$istartsWith':
|
|
29
|
-
return `${comparisonKey} ILIKE ${this.escape(`${val}%`)}`;
|
|
30
|
-
case '$iendsWith':
|
|
31
|
-
return `${comparisonKey} ILIKE ${this.escape(`%${val}`)}`;
|
|
32
|
-
case '$iincludes':
|
|
33
|
-
return `${comparisonKey} ILIKE ${this.escape(`%${val}%`)}`;
|
|
34
|
-
case '$ilike':
|
|
35
|
-
return `${comparisonKey} ILIKE ${this.escape(val)}`;
|
|
36
|
-
case '$regex':
|
|
37
|
-
return `${comparisonKey} ~ ${this.escape(val)}`;
|
|
38
|
-
default:
|
|
39
|
-
return super.compareFieldOperator(entity, key, op, val, opts);
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
exports.PostgresDialect = PostgresDialect;
|
|
44
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicG9zdGdyZXNEaWFsZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RpYWxlY3QvcG9zdGdyZXNEaWFsZWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7OztBQUNBLHNDQUFvQztBQUNwQyw2REFBMEQ7QUFFMUQsTUFBYSxlQUFnQixTQUFRLHVDQUFrQjtJQUNyRDtRQUNFLEtBQUssQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNsQyxDQUFDO0lBRVEsTUFBTSxDQUFJLE1BQWUsRUFBRSxPQUFnQjtRQUNsRCxNQUFNLEdBQUcsR0FBRyxLQUFLLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxPQUFPLENBQUMsQ0FBQztRQUMxQyxNQUFNLElBQUksR0FBRyxJQUFBLGdCQUFPLEVBQUMsTUFBTSxDQUFDLENBQUM7UUFDN0IsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDO1FBQ3pDLE9BQU8sR0FBRyxHQUFHLGNBQWMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7SUFDNUUsQ0FBQztJQUVRLE9BQU8sQ0FBdUMsTUFBZSxFQUFFLEdBQU0sRUFBRSxHQUF5QixFQUFFLElBQTZCO1FBQ3RJLElBQUksR0FBRyxLQUFLLE9BQU8sRUFBRTtZQUNuQixNQUFNLElBQUksR0FBRyxJQUFBLGdCQUFPLEVBQUMsTUFBTSxDQUFDLENBQUM7WUFDN0IsTUFBTSxNQUFNLEdBQUcsR0FBZ0MsQ0FBQztZQUNoRCxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxFQUFFLElBQUksSUFBSSxLQUFLLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztZQUNuSCxPQUFPLGVBQWUsTUFBTSxtQkFBbUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQztTQUM5RTtRQUNELE9BQU8sS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxJQUFJLENBQUMsQ0FBQztJQUMvQyxDQUFDO0lBRVEsb0JBQW9CLENBQzNCLE1BQWUsRUFDZixHQUFnQixFQUNoQixFQUFLLEVBQ0wsR0FBc0MsRUFDdEMsSUFBbUI7UUFFbkIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLE1BQU0sRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDL0QsUUFBUSxFQUFFLEVBQUU7WUFDVixLQUFLLGNBQWM7Z0JBQ2pCLE9BQU8sR0FBRyxhQUFhLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUM1RCxLQUFLLFlBQVk7Z0JBQ2YsT0FBTyxHQUFHLGFBQWEsVUFBVSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDO1lBQzVELEtBQUssWUFBWTtnQkFDZixPQUFPLEdBQUcsYUFBYSxVQUFVLElBQUksQ0FBQyxNQUFNLENBQUMsSUFBSSxHQUFHLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDN0QsS0FBSyxRQUFRO2dCQUNYLE9BQU8sR0FBRyxhQUFhLFVBQVUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ3RELEtBQUssUUFBUTtnQkFDWCxPQUFPLEdBQUcsYUFBYSxNQUFNLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQztZQUNsRDtnQkFDRSxPQUFPLEtBQUssQ0FBQyxvQkFBb0IsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUUsRUFBRSxHQUFHLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDakU7SUFDSCxDQUFDO0NBQ0Y7QUE3Q0QsMENBNkNDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgUXVlcnlDb21wYXJpc29uT3B0aW9ucywgUXVlcnlGaWx0ZXJNYXAsIFF1ZXJ5T3B0aW9ucywgUXVlcnlGaWx0ZXJGaWVsZE9wZXJhdG9yTWFwLCBRdWVyeVRleHRTZWFyY2hPcHRpb25zLCBUeXBlLCBGaWVsZEtleSB9IGZyb20gJy4uL3R5cGUnO1xuaW1wb3J0IHsgZ2V0TWV0YSB9IGZyb20gJy4uL2VudGl0eSc7XG5pbXBvcnQgeyBBYnN0cmFjdFNxbERpYWxlY3QgfSBmcm9tICcuL2Fic3RyYWN0U3FsRGlhbGVjdCc7XG5cbmV4cG9ydCBjbGFzcyBQb3N0Z3Jlc0RpYWxlY3QgZXh0ZW5kcyBBYnN0cmFjdFNxbERpYWxlY3Qge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignXCInLCAnQkVHSU4gVFJBTlNBQ1RJT04nKTtcbiAgfVxuXG4gIG92ZXJyaWRlIGluc2VydDxFPihlbnRpdHk6IFR5cGU8RT4sIHBheWxvYWQ6IEUgfCBFW10pOiBzdHJpbmcge1xuICAgIGNvbnN0IHNxbCA9IHN1cGVyLmluc2VydChlbnRpdHksIHBheWxvYWQpO1xuICAgIGNvbnN0IG1ldGEgPSBnZXRNZXRhKGVudGl0eSk7XG4gICAgY29uc3QgaWROYW1lID0gbWV0YS5maWVsZHNbbWV0YS5pZF0ubmFtZTtcbiAgICByZXR1cm4gYCR7c3FsfSBSRVRVUk5JTkcgJHt0aGlzLmVzY2FwZUlkKGlkTmFtZSl9ICR7dGhpcy5lc2NhcGVJZCgnaWQnKX1gO1xuICB9XG5cbiAgb3ZlcnJpZGUgY29tcGFyZTxFLCBLIGV4dGVuZHMga2V5b2YgUXVlcnlGaWx0ZXJNYXA8RT4+KGVudGl0eTogVHlwZTxFPiwga2V5OiBLLCB2YWw6IFF1ZXJ5RmlsdGVyTWFwPEU+W0tdLCBvcHRzPzogUXVlcnlDb21wYXJpc29uT3B0aW9ucyk6IHN0cmluZyB7XG4gICAgaWYgKGtleSA9PT0gJyR0ZXh0Jykge1xuICAgICAgY29uc3QgbWV0YSA9IGdldE1ldGEoZW50aXR5KTtcbiAgICAgIGNvbnN0IHNlYXJjaCA9IHZhbCBhcyBRdWVyeVRleHRTZWFyY2hPcHRpb25zPEU+O1xuICAgICAgY29uc3QgZmllbGRzID0gc2VhcmNoLiRmaWVsZHMubWFwKChmaWVsZCkgPT4gdGhpcy5lc2NhcGVJZChtZXRhLmZpZWxkc1tmaWVsZF0/Lm5hbWUgPz8gZmllbGQpKS5qb2luKGAgfHwgJyAnIHx8IGApO1xuICAgICAgcmV0dXJuIGB0b190c3ZlY3Rvcigke2ZpZWxkc30pIEBAIHRvX3RzcXVlcnkoJHt0aGlzLmVzY2FwZShzZWFyY2guJHZhbHVlKX0pYDtcbiAgICB9XG4gICAgcmV0dXJuIHN1cGVyLmNvbXBhcmUoZW50aXR5LCBrZXksIHZhbCwgb3B0cyk7XG4gIH1cblxuICBvdmVycmlkZSBjb21wYXJlRmllbGRPcGVyYXRvcjxFLCBLIGV4dGVuZHMga2V5b2YgUXVlcnlGaWx0ZXJGaWVsZE9wZXJhdG9yTWFwPEU+PihcbiAgICBlbnRpdHk6IFR5cGU8RT4sXG4gICAga2V5OiBGaWVsZEtleTxFPixcbiAgICBvcDogSyxcbiAgICB2YWw6IFF1ZXJ5RmlsdGVyRmllbGRPcGVyYXRvck1hcDxFPltLXSxcbiAgICBvcHRzPzogUXVlcnlPcHRpb25zXG4gICk6IHN0cmluZyB7XG4gICAgY29uc3QgY29tcGFyaXNvbktleSA9IHRoaXMuZ2V0Q29tcGFyaXNvbktleShlbnRpdHksIGtleSwgb3B0cyk7XG4gICAgc3dpdGNoIChvcCkge1xuICAgICAgY2FzZSAnJGlzdGFydHNXaXRoJzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IElMSUtFICR7dGhpcy5lc2NhcGUoYCR7dmFsfSVgKX1gO1xuICAgICAgY2FzZSAnJGllbmRzV2l0aCc6XG4gICAgICAgIHJldHVybiBgJHtjb21wYXJpc29uS2V5fSBJTElLRSAke3RoaXMuZXNjYXBlKGAlJHt2YWx9YCl9YDtcbiAgICAgIGNhc2UgJyRpaW5jbHVkZXMnOlxuICAgICAgICByZXR1cm4gYCR7Y29tcGFyaXNvbktleX0gSUxJS0UgJHt0aGlzLmVzY2FwZShgJSR7dmFsfSVgKX1gO1xuICAgICAgY2FzZSAnJGlsaWtlJzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IElMSUtFICR7dGhpcy5lc2NhcGUodmFsKX1gO1xuICAgICAgY2FzZSAnJHJlZ2V4JzpcbiAgICAgICAgcmV0dXJuIGAke2NvbXBhcmlzb25LZXl9IH4gJHt0aGlzLmVzY2FwZSh2YWwpfWA7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gc3VwZXIuY29tcGFyZUZpZWxkT3BlcmF0b3IoZW50aXR5LCBrZXksIG9wLCB2YWwsIG9wdHMpO1xuICAgIH1cbiAgfVxufVxuIl19
|
package/dialect/sqliteDialect.js
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.SqliteDialect = void 0;
|
|
4
|
-
const abstractSqlDialect_1 = require("./abstractSqlDialect");
|
|
5
|
-
class SqliteDialect extends abstractSqlDialect_1.AbstractSqlDialect {
|
|
6
|
-
constructor() {
|
|
7
|
-
super('`', 'BEGIN TRANSACTION');
|
|
8
|
-
}
|
|
9
|
-
}
|
|
10
|
-
exports.SqliteDialect = SqliteDialect;
|
|
11
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3FsaXRlRGlhbGVjdC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9kaWFsZWN0L3NxbGl0ZURpYWxlY3QudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7O0FBQUEsNkRBQTBEO0FBRTFELE1BQWEsYUFBYyxTQUFRLHVDQUFrQjtJQUNuRDtRQUNFLEtBQUssQ0FBQyxHQUFHLEVBQUUsbUJBQW1CLENBQUMsQ0FBQztJQUNsQyxDQUFDO0NBQ0Y7QUFKRCxzQ0FJQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEFic3RyYWN0U3FsRGlhbGVjdCB9IGZyb20gJy4vYWJzdHJhY3RTcWxEaWFsZWN0JztcblxuZXhwb3J0IGNsYXNzIFNxbGl0ZURpYWxlY3QgZXh0ZW5kcyBBYnN0cmFjdFNxbERpYWxlY3Qge1xuICBjb25zdHJ1Y3RvcigpIHtcbiAgICBzdXBlcignYCcsICdCRUdJTiBUUkFOU0FDVElPTicpO1xuICB9XG59XG4iXX0=
|