@depup/typeorm-extension 3.9.0-depup.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/LICENSE +21 -0
- package/README.MD +674 -0
- package/README.md +34 -0
- package/bin/cli.cjs +275 -0
- package/bin/cli.mjs +273 -0
- package/changes.json +22 -0
- package/dist/cli/commands/database/create.d.ts +27 -0
- package/dist/cli/commands/database/drop.d.ts +23 -0
- package/dist/cli/commands/database/index.d.ts +2 -0
- package/dist/cli/commands/index.d.ts +2 -0
- package/dist/cli/commands/seed/create.d.ts +21 -0
- package/dist/cli/commands/seed/index.d.ts +2 -0
- package/dist/cli/commands/seed/run.d.ts +24 -0
- package/dist/cli/index.d.ts +2 -0
- package/dist/data-source/find/index.d.ts +2 -0
- package/dist/data-source/find/module.d.ts +3 -0
- package/dist/data-source/find/type.d.ts +22 -0
- package/dist/data-source/index.d.ts +4 -0
- package/dist/data-source/options/index.d.ts +4 -0
- package/dist/data-source/options/module.d.ts +8 -0
- package/dist/data-source/options/singleton.d.ts +4 -0
- package/dist/data-source/options/type.d.ts +26 -0
- package/dist/data-source/options/utils/env.d.ts +4 -0
- package/dist/data-source/options/utils/index.d.ts +2 -0
- package/dist/data-source/options/utils/merge.d.ts +2 -0
- package/dist/data-source/singleton.d.ts +5 -0
- package/dist/data-source/type.d.ts +2 -0
- package/dist/database/driver/cockroachdb.d.ts +4 -0
- package/dist/database/driver/index.d.ts +9 -0
- package/dist/database/driver/mongodb.d.ts +6 -0
- package/dist/database/driver/mssql.d.ts +6 -0
- package/dist/database/driver/mysql.d.ts +7 -0
- package/dist/database/driver/oracle.d.ts +6 -0
- package/dist/database/driver/postgres.d.ts +8 -0
- package/dist/database/driver/sqlite.d.ts +3 -0
- package/dist/database/driver/types.d.ts +20 -0
- package/dist/database/driver/utils/build.d.ts +3 -0
- package/dist/database/driver/utils/character-set.d.ts +2 -0
- package/dist/database/driver/utils/charset.d.ts +2 -0
- package/dist/database/driver/utils/create.d.ts +2 -0
- package/dist/database/driver/utils/index.d.ts +4 -0
- package/dist/database/index.d.ts +3 -0
- package/dist/database/methods/check/index.d.ts +2 -0
- package/dist/database/methods/check/module.d.ts +7 -0
- package/dist/database/methods/check/types.d.ts +51 -0
- package/dist/database/methods/create/index.d.ts +1 -0
- package/dist/database/methods/create/module.d.ts +10 -0
- package/dist/database/methods/drop/index.d.ts +1 -0
- package/dist/database/methods/drop/module.d.ts +10 -0
- package/dist/database/methods/index.d.ts +4 -0
- package/dist/database/methods/type.d.ts +43 -0
- package/dist/database/utils/context.d.ts +3 -0
- package/dist/database/utils/index.d.ts +5 -0
- package/dist/database/utils/migration.d.ts +2 -0
- package/dist/database/utils/query.d.ts +3 -0
- package/dist/database/utils/schema.d.ts +3 -0
- package/dist/database/utils/type.d.ts +32 -0
- package/dist/env/constants.d.ts +68 -0
- package/dist/env/index.d.ts +3 -0
- package/dist/env/module.d.ts +4 -0
- package/dist/env/type.d.ts +36 -0
- package/dist/env/utils.d.ts +3 -0
- package/dist/errors/base.d.ts +2 -0
- package/dist/errors/driver.d.ts +6 -0
- package/dist/errors/index.d.ts +3 -0
- package/dist/errors/options.d.ts +7 -0
- package/dist/helpers/entity/error.d.ts +20 -0
- package/dist/helpers/entity/index.d.ts +5 -0
- package/dist/helpers/entity/join-columns.d.ts +16 -0
- package/dist/helpers/entity/metadata.d.ts +10 -0
- package/dist/helpers/entity/property-names.d.ts +11 -0
- package/dist/helpers/entity/uniqueness.d.ts +28 -0
- package/dist/helpers/index.d.ts +1 -0
- package/dist/index.cjs +3258 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.ts +9 -0
- package/dist/index.mjs +3136 -0
- package/dist/index.mjs.map +1 -0
- package/dist/query/index.d.ts +4 -0
- package/dist/query/module.d.ts +5 -0
- package/dist/query/parameter/fields/index.d.ts +2 -0
- package/dist/query/parameter/fields/module.d.ts +25 -0
- package/dist/query/parameter/fields/type.d.ts +6 -0
- package/dist/query/parameter/filters/index.d.ts +2 -0
- package/dist/query/parameter/filters/module.d.ts +35 -0
- package/dist/query/parameter/filters/type.d.ts +12 -0
- package/dist/query/parameter/index.d.ts +5 -0
- package/dist/query/parameter/pagination/index.d.ts +2 -0
- package/dist/query/parameter/pagination/module.d.ts +26 -0
- package/dist/query/parameter/pagination/type.d.ts +3 -0
- package/dist/query/parameter/relations/index.d.ts +2 -0
- package/dist/query/parameter/relations/module.d.ts +27 -0
- package/dist/query/parameter/relations/type.d.ts +8 -0
- package/dist/query/parameter/sort/index.d.ts +2 -0
- package/dist/query/parameter/sort/module.d.ts +26 -0
- package/dist/query/parameter/sort/type.d.ts +6 -0
- package/dist/query/type.d.ts +16 -0
- package/dist/query/utils/alias.d.ts +2 -0
- package/dist/query/utils/index.d.ts +3 -0
- package/dist/query/utils/key.d.ts +1 -0
- package/dist/query/utils/option.d.ts +1 -0
- package/dist/seeder/entity.d.ts +42 -0
- package/dist/seeder/executor.d.ts +24 -0
- package/dist/seeder/factory/index.d.ts +4 -0
- package/dist/seeder/factory/manager.d.ts +8 -0
- package/dist/seeder/factory/module.d.ts +17 -0
- package/dist/seeder/factory/type.d.ts +12 -0
- package/dist/seeder/factory/utils.d.ts +7 -0
- package/dist/seeder/index.d.ts +6 -0
- package/dist/seeder/module.d.ts +5 -0
- package/dist/seeder/type.d.ts +44 -0
- package/dist/seeder/utils/file-path.d.ts +7 -0
- package/dist/seeder/utils/index.d.ts +3 -0
- package/dist/seeder/utils/prepare.d.ts +2 -0
- package/dist/seeder/utils/template.d.ts +1 -0
- package/dist/utils/code-transformation/constants.d.ts +4 -0
- package/dist/utils/code-transformation/index.d.ts +2 -0
- package/dist/utils/code-transformation/module.d.ts +3 -0
- package/dist/utils/entity.d.ts +2 -0
- package/dist/utils/file-path.d.ts +9 -0
- package/dist/utils/file-system.d.ts +1 -0
- package/dist/utils/has-property.d.ts +2 -0
- package/dist/utils/index.d.ts +10 -0
- package/dist/utils/object.d.ts +2 -0
- package/dist/utils/promise.d.ts +1 -0
- package/dist/utils/separator.d.ts +3 -0
- package/dist/utils/slash.d.ts +2 -0
- package/dist/utils/tsconfig/index.d.ts +2 -0
- package/dist/utils/tsconfig/module.d.ts +2 -0
- package/dist/utils/tsconfig/type.d.ts +13 -0
- package/package.json +134 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.mjs","sources":["../src/errors/base.ts","../src/errors/driver.ts","../src/errors/options.ts","../src/utils/code-transformation/constants.ts","../src/utils/code-transformation/module.ts","../src/utils/entity.ts","../src/utils/separator.ts","../src/utils/slash.ts","../src/utils/tsconfig/module.ts","../src/utils/file-path.ts","../src/utils/file-system.ts","../src/utils/has-property.ts","../src/utils/object.ts","../src/utils/promise.ts","../src/query/utils/alias.ts","../src/query/utils/key.ts","../src/query/utils/option.ts","../src/query/parameter/fields/module.ts","../src/query/parameter/filters/module.ts","../src/query/parameter/pagination/module.ts","../src/query/parameter/relations/module.ts","../src/query/parameter/sort/module.ts","../src/query/module.ts","../src/data-source/find/module.ts","../src/env/constants.ts","../src/env/utils.ts","../src/env/module.ts","../src/data-source/options/utils/merge.ts","../src/data-source/options/utils/env.ts","../src/data-source/options/module.ts","../src/data-source/options/singleton.ts","../src/data-source/singleton.ts","../src/database/methods/check/module.ts","../src/database/driver/utils/charset.ts","../src/database/driver/utils/character-set.ts","../src/database/driver/utils/build.ts","../src/database/driver/utils/create.ts","../src/database/utils/context.ts","../src/database/utils/migration.ts","../src/database/utils/query.ts","../src/database/utils/schema.ts","../src/database/driver/postgres.ts","../src/database/driver/cockroachdb.ts","../src/database/driver/mongodb.ts","../src/database/driver/mssql.ts","../src/database/driver/mysql.ts","../src/database/driver/oracle.ts","../src/database/driver/sqlite.ts","../src/database/methods/create/module.ts","../src/database/methods/drop/module.ts","../src/cli/commands/database/create.ts","../src/cli/commands/database/drop.ts","../src/seeder/entity.ts","../src/seeder/factory/module.ts","../src/seeder/factory/manager.ts","../src/seeder/utils/file-path.ts","../src/seeder/utils/prepare.ts","../src/seeder/utils/template.ts","../src/seeder/factory/utils.ts","../src/seeder/executor.ts","../src/seeder/module.ts","../src/cli/commands/seed/create.ts","../src/cli/commands/seed/run.ts","../src/helpers/entity/error.ts","../src/helpers/entity/metadata.ts","../src/helpers/entity/property-names.ts","../src/helpers/entity/join-columns.ts","../src/helpers/entity/uniqueness.ts"],"sourcesContent":["export class TypeormExtensionError extends Error {\n\n}\n","import { TypeormExtensionError } from './base';\n\nexport class DriverError extends TypeormExtensionError {\n constructor(message?: string) {\n super(message || 'A database driver related error has occurred.');\n }\n\n static undeterminable() {\n return new DriverError('The driver could not be determined.');\n }\n\n static notSupported(driverName: string) {\n return new DriverError(`The driver ${driverName} is not supported yet.`);\n }\n}\n","import { TypeormExtensionError } from './base';\n\nexport class OptionsError extends TypeormExtensionError {\n constructor(message?: string) {\n super(message || 'A database options related error has occurred');\n }\n\n static undeterminable() {\n return new OptionsError('The database options could not be determined.');\n }\n\n static notFound() {\n return new OptionsError('The database options could not be located/loaded.');\n }\n\n static databaseNotDefined() {\n return new OptionsError('The database name to connect to is not defined.');\n }\n}\n","export enum CodeTransformation {\n JUST_IN_TIME = 'jit',\n NONE = 'none',\n}\n","import process from 'node:process';\nimport { CodeTransformation } from './constants';\n\nexport function detectCodeTransformation() : `${CodeTransformation}` {\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n if (process[Symbol.for('ts-node.register.instance')]) {\n return CodeTransformation.JUST_IN_TIME;\n }\n\n return CodeTransformation.NONE;\n}\n\nexport function isCodeTransformation(input: string) {\n return detectCodeTransformation() === input;\n}\n","import type { EntitySchema, ObjectType } from 'typeorm';\nimport { InstanceChecker } from 'typeorm';\n\nexport function getEntityName<O>(entity: ObjectType<O> | EntitySchema<O>) : string {\n if (typeof entity === 'function') {\n return entity.name;\n }\n\n if (InstanceChecker.isEntitySchema(entity)) {\n return entity.options.name;\n }\n\n return new (entity as any)().constructor.name;\n}\n","export function canReplaceWindowsSeparator(input: string) : boolean {\n // https://superuser.com/questions/176388/why-does-windows-use-backslashes-for-paths-and-unix-forward-slashes/176395#176395\n if (input.startsWith('\\\\\\\\?\\\\')) {\n return false;\n }\n\n let characterIndex: number;\n\n const specialCharacters = ['[', '{', '(', '^', '$', '.', '|', '?', '*', '+'];\n for (let i = 0; i < specialCharacters.length; i++) {\n characterIndex = input.indexOf(specialCharacters[i]);\n if (characterIndex !== -1) {\n // special character is prefixed with \\, no transformation allowed\n if (characterIndex !== 0 && input[characterIndex - 1] === '\\\\') {\n return false;\n }\n }\n }\n\n return true;\n}\n\nexport function replaceWindowSeparator(input: string) {\n return input.replace(/\\\\/g, '/');\n}\n\nexport function safeReplaceWindowsSeparator(input: string): string {\n if (input.indexOf('\\\\') === -1 || !canReplaceWindowsSeparator(input)) {\n return input;\n }\n\n return replaceWindowSeparator(input);\n}\n","const TRAILING_SLASH_RE = /\\/$|\\/\\?/;\n\nexport function hasTrailingSlash(input = '', queryParams = false): boolean {\n if (!queryParams) {\n return input.endsWith('/');\n }\n\n return TRAILING_SLASH_RE.test(input);\n}\n\nexport function withoutTrailingSlash(input = '', queryParams = false): string {\n if (!queryParams) {\n return (hasTrailingSlash(input) ? input.slice(0, -1) : input) || '/';\n }\n\n if (!hasTrailingSlash(input, true)) {\n return input || '/';\n }\n\n const [s0, ...s] = input.split('?');\n\n return (s0.slice(0, -1) || '/') + (s.length ? `?${s.join('?')}` : '');\n}\n","import { isObject, load } from 'locter';\nimport path from 'node:path';\nimport type { TSConfig } from './type';\n\nexport async function readTSConfig(input?: string) : Promise<TSConfig> {\n input = input || process.cwd();\n input = path.isAbsolute(input) ?\n input :\n path.resolve(process.cwd(), input);\n\n const filePath = input.indexOf('.json') === -1 ?\n path.join(input, 'tsconfig.json') :\n input;\n\n try {\n const tsConfig = await load(filePath);\n\n if (isObject(tsConfig)) {\n return tsConfig;\n }\n } catch (e) {\n // don't do anything ;)\n }\n\n return {};\n}\n","import { isObject } from 'locter';\nimport path from 'node:path';\nimport { CodeTransformation, isCodeTransformation } from './code-transformation';\nimport { canReplaceWindowsSeparator, replaceWindowSeparator } from './separator';\nimport { withoutTrailingSlash } from './slash';\nimport type { TSConfig } from './tsconfig';\nimport { readTSConfig } from './tsconfig';\n\nconst stripLeadingModifier = (text: string) => {\n if (text.startsWith('./')) {\n text = text.substring(2);\n }\n\n return text;\n};\n\nexport function transformFilePath(\n input: string,\n dist?: string,\n src?: string,\n): string {\n let separator = path.sep;\n const windowsSeparatorReplaceable = canReplaceWindowsSeparator(input);\n if (windowsSeparatorReplaceable) {\n separator = '/';\n input = replaceWindowSeparator(input);\n }\n\n let base = input;\n let baseIndex = input.lastIndexOf(separator);\n if (baseIndex !== -1) {\n base = base.substring(baseIndex + 1);\n }\n\n if (src) {\n if (windowsSeparatorReplaceable) {\n src = replaceWindowSeparator(src);\n }\n\n src = withoutTrailingSlash(stripLeadingModifier(src));\n }\n src = src || 'src';\n\n if (dist) {\n if (windowsSeparatorReplaceable) {\n dist = replaceWindowSeparator(dist);\n }\n\n dist = withoutTrailingSlash(stripLeadingModifier(dist));\n }\n dist = dist || 'dist';\n\n if (\n input.indexOf(src) !== -1 &&\n input.indexOf(dist) === -1\n ) {\n const lastIndex = input.lastIndexOf(src);\n const prevCharacter = input.substring(lastIndex - 1, lastIndex);\n if (!prevCharacter || prevCharacter === separator) {\n input = input.substring(0, lastIndex) +\n dist +\n input.substring(lastIndex + src.length);\n\n baseIndex = input.lastIndexOf(separator);\n }\n }\n\n // if the path already contains a js file extension, we are done\n const jsExtensions = ['js', 'cjs', 'mjs'];\n for (let i = 0; i < jsExtensions.length; i++) {\n if (base.indexOf(jsExtensions[i]) !== -1) {\n return input;\n }\n }\n\n const tsExtensions = ['ts', 'cts', 'mts'];\n for (let i = 0; i < tsExtensions.length; i++) {\n const regex = new RegExp(`(\\\\.${tsExtensions[i]}|${tsExtensions[i]})`, 'g');\n let matchesSum: number | undefined;\n const matches = base.match(regex);\n if (Array.isArray(matches)) {\n matchesSum = matches.length;\n }\n\n let matchesCounter = 0;\n\n const bracketIndex = base.lastIndexOf('{');\n base = base.replace(\n regex,\n (...args) => {\n matchesCounter++;\n\n // if the file extension name comes after the last bracket index,\n // we can be pretty sure that the extension name is not part of a filename\n if (\n (args[2] >= bracketIndex && bracketIndex !== -1) ||\n (bracketIndex === -1 && matchesCounter === matchesSum)\n ) {\n return args[0].startsWith('.') ? `.${jsExtensions[i]}` : jsExtensions[i];\n }\n\n return args[0];\n },\n );\n }\n\n if (baseIndex !== -1) {\n base = input.substring(0, baseIndex + 1) + base;\n }\n\n return stripLeadingModifier(base);\n}\nexport async function adjustFilePath<T extends unknown | unknown[]>(\n input: T,\n tsconfig?: string | TSConfig,\n): Promise<T> {\n if (isCodeTransformation(CodeTransformation.JUST_IN_TIME)) {\n return input;\n }\n\n if (!isObject(tsconfig)) {\n tsconfig = await readTSConfig(tsconfig);\n }\n\n const { compilerOptions } = tsconfig;\n\n if (typeof input === 'string') {\n return transformFilePath(input, compilerOptions?.outDir) as T;\n }\n\n if (Array.isArray(input)) {\n for (let i = 0; i < input.length; i++) {\n if (typeof input[i] === 'string') {\n input[i] = transformFilePath(input[i], compilerOptions?.outDir);\n }\n }\n }\n\n return input;\n}\n\nexport async function adjustFilePaths<T extends Record<string, any>>(\n input: T,\n keys?: (keyof T)[],\n tsconfig?: string | TSConfig,\n): Promise<T> {\n if (isCodeTransformation(CodeTransformation.JUST_IN_TIME)) {\n return input;\n }\n\n if (!isObject(tsconfig)) {\n tsconfig = await readTSConfig(tsconfig);\n }\n\n keys = keys || Object.keys(input);\n\n for (let i = 0; i < keys.length; i++) {\n input[keys[i]] = await adjustFilePath(input[keys[i]], tsconfig);\n }\n\n return input;\n}\n\nexport function resolveFilePath(filePath: string, root?: string) {\n if (path.isAbsolute(filePath)) {\n return filePath;\n }\n\n return filePath.startsWith('/') ?\n filePath :\n path.resolve(root || process.cwd(), filePath);\n}\n\nexport function parseFilePath(filePath: string, root?: string) {\n const fullPath = resolveFilePath(filePath, root);\n\n const directory = path.dirname(fullPath);\n const name = path.basename(fullPath);\n\n return {\n directory,\n name,\n };\n}\n","import fs from 'node:fs';\n\nexport async function isDirectory(input: string) : Promise<boolean> {\n try {\n const stat = await fs.promises.stat(input);\n return stat.isDirectory();\n } catch (e) {\n return false;\n }\n}\n","export function hasOwnProperty<X extends Record<string, any>, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, unknown> {\n return Object.prototype.hasOwnProperty.call(obj, prop);\n}\n\nexport function hasStringProperty<X extends Record<string, any>, Y extends PropertyKey>(obj: X, prop: Y): obj is X & Record<Y, string> {\n return hasOwnProperty(obj, prop) &&\n typeof obj[prop] === 'string';\n}\n","export function pickRecord(data: Record<string, any>, keys: string[]) {\n const output : Record<string, any> = {};\n for (let i = 0; i < keys.length; i++) {\n output[keys[i]] = data[keys[i]];\n }\n\n return output;\n}\n\nexport function extendObject<T extends Record<string, any>>(\n target: T,\n source: Partial<T>,\n) : T {\n const keys = Object.keys(source);\n for (let i = 0; i < keys.length; i++) {\n target[keys[i] as keyof T] = source[keys[i]] as T[keyof T];\n }\n\n return target;\n}\n","import { isObject } from 'locter';\n\nexport function isPromise(p: unknown): p is Promise<unknown> {\n return isObject(p) &&\n (\n p instanceof Promise ||\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n typeof p.then === 'function'\n );\n}\n","import type { QueryRelationsApplyOutput } from '../parameter';\n\nexport function getAliasForPath(items?: QueryRelationsApplyOutput, path?: string) {\n if (typeof path === 'undefined' || typeof items === 'undefined') {\n return undefined;\n }\n\n for (let i = 0; i < items.length; i++) {\n if (items[i].key === path) {\n return items[i].value;\n }\n }\n\n return undefined;\n}\n","export function buildKeyWithPrefix(name: string, prefix?: string) {\n if (prefix) {\n return `${prefix}.${name}`;\n }\n\n return name;\n}\n","import { hasOwnProperty } from '../../utils';\n\nexport function isQueryOptionDefined(\n input: Record<string, any> | boolean,\n option: string | string[],\n) {\n if (typeof input === 'boolean') {\n return false;\n }\n\n const options = Array.isArray(option) ? option : [option];\n\n for (let i = 0; i < options.length; i++) {\n if (hasOwnProperty(input, options[i])) {\n return true;\n }\n }\n\n return false;\n}\n","import {\n parseQueryFields,\n} from 'rapiq';\n\nimport type { ObjectLiteral, SelectQueryBuilder } from 'typeorm';\nimport { buildKeyWithPrefix, getAliasForPath } from '../../utils';\nimport type { QueryFieldsApplyOptions, QueryFieldsApplyOutput } from './type';\n\n/**\n * Apply parsed fields parameter data on the db query.\n *\n * @param query\n * @param data\n */\n/* istanbul ignore next */\nexport function applyQueryFieldsParseOutput<T extends ObjectLiteral = ObjectLiteral>(\n query: SelectQueryBuilder<T>,\n data: QueryFieldsApplyOutput,\n options: QueryFieldsApplyOptions<T> = {},\n) {\n if (data.length === 0) {\n return data;\n }\n\n query.select(data.map((field) => {\n const alias = getAliasForPath(options.relations, field.path) ||\n options.defaultAlias ||\n options.defaultPath;\n\n return buildKeyWithPrefix(field.key, alias);\n }));\n\n return data;\n}\n\n/**\n * Apply raw fields parameter data on the db query.\n *\n * @param query\n * @param data\n * @param options\n */\nexport function applyQueryFields<T extends ObjectLiteral = ObjectLiteral>(\n query: SelectQueryBuilder<T>,\n data: unknown,\n options?: QueryFieldsApplyOptions<T>,\n) : QueryFieldsApplyOutput {\n options = options || {};\n if (options.defaultAlias) {\n options.defaultPath = options.defaultAlias;\n }\n\n return applyQueryFieldsParseOutput(query, parseQueryFields(data, options), options);\n}\n\n/**\n * Apply raw fields parameter data on the db query.\n *\n * @param query\n * @param data\n * @param options\n */\nexport function applyFields<T extends ObjectLiteral = ObjectLiteral>(\n query: SelectQueryBuilder<T>,\n data: unknown,\n options?: QueryFieldsApplyOptions<T>,\n) : QueryFieldsApplyOutput {\n return applyQueryFields(query, data, options);\n}\n","import type { FiltersParseOutput } from 'rapiq';\nimport { FilterComparisonOperator, parseQueryFilters } from 'rapiq';\n\nimport type { ObjectLiteral, SelectQueryBuilder, WhereExpressionBuilder } from 'typeorm';\nimport { Brackets } from 'typeorm';\nimport { buildKeyWithPrefix, getAliasForPath } from '../../utils';\nimport type {\n QueryFiltersApplyOptions,\n QueryFiltersApplyOutput,\n QueryFiltersOutput,\n} from './type';\n\n// --------------------------------------------------\n\nexport function transformParsedFilters<T extends ObjectLiteral = ObjectLiteral>(\n data: FiltersParseOutput,\n options: QueryFiltersApplyOptions<T> = {},\n) : QueryFiltersOutput {\n const items : QueryFiltersOutput = [];\n\n for (let i = 0; i < data.length; i++) {\n const alias = getAliasForPath(options.relations, data[i].path) ||\n options.defaultAlias ||\n options.defaultPath;\n\n const fullKey : string = buildKeyWithPrefix(data[i].key, alias);\n\n const filter = data[i];\n\n const statement : string[] = [\n fullKey,\n ];\n\n let bindingKey : string;\n if (options.bindingKey) {\n bindingKey = options.bindingKey(fullKey)\n .replace('.', '_');\n } else {\n bindingKey = `filter_${fullKey.replace('.', '_')}`;\n }\n\n if (filter.value === null || typeof filter.value === 'undefined') {\n statement.push('IS');\n\n if (filter.operator === FilterComparisonOperator.NOT_EQUAL) {\n statement.push('NOT');\n }\n\n statement.push('NULL');\n\n items.push({\n statement: statement.join(' '),\n binding: {},\n });\n\n continue;\n }\n\n switch (filter.operator) {\n case FilterComparisonOperator.EQUAL:\n case FilterComparisonOperator.NOT_EQUAL: {\n if (filter.operator === FilterComparisonOperator.EQUAL) {\n statement.push('=');\n } else {\n statement.push('!=');\n }\n\n statement.push(`:${bindingKey}`);\n break;\n }\n case FilterComparisonOperator.LIKE:\n case FilterComparisonOperator.NOT_LIKE: {\n if (filter.operator === FilterComparisonOperator.NOT_LIKE) {\n statement.push('NOT');\n }\n\n statement.push('LIKE');\n\n statement.push(`:${bindingKey}`);\n\n filter.value += '%';\n break;\n }\n\n case FilterComparisonOperator.IN:\n case FilterComparisonOperator.NOT_IN: {\n if (filter.operator === FilterComparisonOperator.NOT_IN) {\n statement.push('NOT');\n }\n\n statement.push('IN');\n\n statement.push(`(:...${bindingKey})`);\n\n if (Array.isArray(filter.value)) {\n const nullIndex = (filter.value as unknown[]).indexOf(null);\n if (nullIndex !== -1) {\n filter.value.splice(nullIndex, 1);\n\n statement.unshift('(');\n if (filter.operator === FilterComparisonOperator.NOT_IN) {\n statement.push('AND');\n } else {\n statement.push('OR');\n }\n statement.push(fullKey);\n statement.push('IS');\n\n if (filter.operator === FilterComparisonOperator.NOT_IN) {\n statement.push('NOT');\n }\n\n statement.push('NULL');\n statement.push(')');\n }\n }\n break;\n }\n case FilterComparisonOperator.LESS_THAN:\n case FilterComparisonOperator.LESS_THAN_EQUAL:\n case FilterComparisonOperator.GREATER_THAN:\n case FilterComparisonOperator.GREATER_THAN_EQUAL: {\n if (filter.operator === FilterComparisonOperator.LESS_THAN) {\n statement.push('<');\n } else if (filter.operator === FilterComparisonOperator.LESS_THAN_EQUAL) {\n statement.push('<=');\n } else if (filter.operator === FilterComparisonOperator.GREATER_THAN) {\n statement.push('>');\n } else {\n statement.push('>=');\n }\n\n statement.push(`:${bindingKey}`);\n break;\n }\n }\n\n items.push({\n statement: statement.join(' '),\n binding: { [bindingKey]: filter.value },\n });\n }\n\n return items;\n}\n\n/**\n * Apply transformed filter[s] parameter data on the db query.\n *\n * @param query\n * @param data\n */\nexport function applyFiltersTransformed<T extends ObjectLiteral = ObjectLiteral>(\n query: SelectQueryBuilder<T> | WhereExpressionBuilder,\n data: QueryFiltersOutput,\n) : QueryFiltersOutput {\n if (data.length === 0) {\n return data;\n }\n\n /* istanbul ignore next */\n query.andWhere(new Brackets((qb) => {\n for (let i = 0; i < data.length; i++) {\n if (i === 0) {\n qb.where(data[i].statement, data[i].binding);\n } else {\n qb.andWhere(data[i].statement, data[i].binding);\n }\n }\n }));\n\n return data;\n}\n\n/**\n * Apply parsed filter[s] parameter data on the db query.\n *\n * @param query\n * @param data\n * @param options\n */\nexport function applyQueryFiltersParseOutput<T extends ObjectLiteral = ObjectLiteral>(\n query: SelectQueryBuilder<T> | WhereExpressionBuilder,\n data: FiltersParseOutput,\n options?: QueryFiltersApplyOptions<T>,\n) : QueryFiltersApplyOutput {\n applyFiltersTransformed(query, transformParsedFilters<T>(data, options));\n\n return data;\n}\n\n// --------------------------------------------------\n\n/**\n * Apply raw filter[s] parameter data on the db query.\n *\n * @param query\n * @param data\n * @param options\n */\nexport function applyQueryFilters<T extends ObjectLiteral = ObjectLiteral>(\n query: SelectQueryBuilder<T>,\n data: unknown,\n options?: QueryFiltersApplyOptions<T>,\n) : QueryFiltersApplyOutput {\n options = options || {};\n if (options.defaultAlias) {\n options.defaultPath = options.defaultAlias;\n }\n\n return applyQueryFiltersParseOutput(\n query,\n parseQueryFilters(data, options),\n options,\n );\n}\n\n/**\n * Apply raw filter[s] parameter data on the db query.\n *\n * @param query\n * @param data\n * @param options\n */\nexport function applyFilters<T extends ObjectLiteral = ObjectLiteral>(\n query: SelectQueryBuilder<T>,\n data: unknown,\n options?: QueryFiltersApplyOptions<T>,\n) : QueryFiltersApplyOutput {\n return applyQueryFilters(query, data, options);\n}\n","import type { ObjectLiteral } from 'rapiq';\nimport { parseQueryPagination } from 'rapiq';\nimport type { SelectQueryBuilder } from 'typeorm';\nimport type { QueryPaginationApplyOptions, QueryPaginationApplyOutput } from './type';\n\n/**\n * Apply parsed page/pagination parameter data on the db query.\n *\n * @param query\n * @param data\n */\nexport function applyQueryPaginationParseOutput<T extends ObjectLiteral = ObjectLiteral>(\n query: SelectQueryBuilder<T>,\n data: QueryPaginationApplyOutput,\n) {\n /* istanbul ignore next */\n if (typeof data.limit !== 'undefined') {\n query.take(data.limit);\n\n if (typeof data.offset === 'undefined') {\n query.skip(0);\n }\n }\n\n /* istanbul ignore next */\n if (typeof data.offset !== 'undefined') {\n query.skip(data.offset);\n }\n\n return data;\n}\n\n/**\n * Apply raw page/pagination parameter data on the db query.\n *\n * @param query\n * @param data\n * @param options\n */\nexport function applyQueryPagination<T extends ObjectLiteral = ObjectLiteral>(\n query: SelectQueryBuilder<T>,\n data: unknown,\n options?: QueryPaginationApplyOptions,\n) : QueryPaginationApplyOutput {\n return applyQueryPaginationParseOutput(query, parseQueryPagination(data, options));\n}\n\n/**\n * Apply raw page/pagination parameter data on the db query.\n *\n * @param query\n * @param data\n * @param options\n */\nexport function applyPagination<T extends ObjectLiteral = ObjectLiteral>(\n query: SelectQueryBuilder<T>,\n data: unknown,\n options?: QueryPaginationApplyOptions,\n) : QueryPaginationApplyOutput {\n return applyQueryPagination(query, data, options);\n}\n","import type { RelationsParseOutput } from 'rapiq';\nimport { parseQueryRelations } from 'rapiq';\nimport type { ObjectLiteral, SelectQueryBuilder } from 'typeorm';\nimport { buildKeyWithPrefix } from '../../utils';\nimport type { QueryRelationsApplyOptions, QueryRelationsApplyOutput } from './type';\n\n/**\n * Apply parsed include/relation parameter data on the db query.\n *\n * @param query\n * @param data\n * @param options\n */\nexport function applyQueryRelationsParseOutput<T extends ObjectLiteral = ObjectLiteral>(\n query: SelectQueryBuilder<T>,\n data: RelationsParseOutput,\n options: QueryRelationsApplyOptions<T> = {},\n) : QueryRelationsApplyOutput {\n for (let i = 0; i < data.length; i++) {\n const parts = data[i].key.split('.');\n\n let key : string;\n if (parts.length > 1) {\n key = parts.slice(-2).join('.');\n } else {\n key = buildKeyWithPrefix(data[i].key, options.defaultAlias);\n }\n\n data[i].key = key;\n\n /* istanbul ignore next */\n query.leftJoinAndSelect(key, data[i].value);\n\n if (options.onJoin) {\n options.onJoin(key, data[i].value, query);\n }\n }\n\n return data;\n}\n\n/**\n * Apply raw include/relations parameter data on the db query.\n *\n * @param query\n * @param data\n * @param options\n */\nexport function applyQueryRelations<T extends ObjectLiteral = ObjectLiteral>(\n query: SelectQueryBuilder<T>,\n data: unknown,\n options: QueryRelationsApplyOptions<T> = {},\n) : QueryRelationsApplyOutput {\n return applyQueryRelationsParseOutput(query, parseQueryRelations(data, options), options);\n}\n\n/**\n * Apply raw include/relations parameter data on the db query.\n *\n * @param query\n * @param data\n * @param options\n */\nexport function applyRelations<T extends ObjectLiteral = ObjectLiteral>(\n query: SelectQueryBuilder<T>,\n data: unknown,\n options: QueryRelationsApplyOptions<T> = {},\n) : QueryRelationsApplyOutput {\n return applyQueryRelations(query, data, options);\n}\n","import type { SortDirection, SortParseOutput } from 'rapiq';\nimport { parseQuerySort } from 'rapiq';\nimport type { ObjectLiteral, SelectQueryBuilder } from 'typeorm';\nimport { buildKeyWithPrefix } from '../../utils';\nimport type { QuerySortApplyOptions, QuerySortApplyOutput } from './type';\n\n// --------------------------------------------------\n\n/**\n * Apply parsed sort parameter data on the db query.\n *\n * @param query\n * @param data\n */\nexport function applyQuerySortParseOutput<T extends ObjectLiteral = ObjectLiteral>(\n query: SelectQueryBuilder<T>,\n data: SortParseOutput,\n) : QuerySortApplyOutput {\n if (data.length === 0) {\n return data;\n }\n\n const sort : Record<string, `${SortDirection}`> = {};\n\n for (let i = 0; i < data.length; i++) {\n const key = buildKeyWithPrefix(data[i].key, data[i].path);\n\n sort[key] = data[i].value;\n }\n\n query.orderBy(sort);\n\n return data;\n}\n\n/**\n * Apply raw sort parameter data on the db query.\n *\n * @param query\n * @param data\n * @param options\n */\nexport function applyQuerySort<T extends ObjectLiteral = ObjectLiteral>(\n query: SelectQueryBuilder<T>,\n data: unknown,\n options?: QuerySortApplyOptions<T>,\n) : SortParseOutput {\n options = options || {};\n if (options.defaultAlias) {\n options.defaultPath = options.defaultAlias;\n }\n\n return applyQuerySortParseOutput(query, parseQuerySort(data, options));\n}\n\n/**\n * Apply raw sort parameter data on the db query.\n *\n * @param query\n * @param data\n * @param options\n */\nexport function applySort<T extends ObjectLiteral = ObjectLiteral>(\n query: SelectQueryBuilder<T>,\n data: unknown,\n options?: QuerySortApplyOptions<T>,\n) : SortParseOutput {\n return applyQuerySort(query, data, options);\n}\n","import { isObject } from 'locter';\nimport type { ParseInput, ParseOutput } from 'rapiq';\nimport { parseQuery } from 'rapiq';\nimport type { ObjectLiteral, SelectQueryBuilder } from 'typeorm';\nimport { extendObject } from '../utils/index';\nimport type { QueryRelationsApplyOptions } from './parameter';\nimport {\n applyQueryFieldsParseOutput,\n applyQueryFiltersParseOutput,\n applyQueryPaginationParseOutput,\n applyQueryRelationsParseOutput,\n applyQuerySortParseOutput,\n} from './parameter';\nimport type { QueryApplyOptions, QueryApplyOutput } from './type';\nimport { isQueryOptionDefined } from './utils';\n\nexport function applyQueryParseOutput<T extends ObjectLiteral = ObjectLiteral>(\n query: SelectQueryBuilder<T>,\n context: ParseOutput,\n options: QueryApplyOptions<T> = {},\n): ParseOutput {\n if (context.fields) {\n applyQueryFieldsParseOutput(query, context.fields, {\n defaultAlias: context.defaultPath,\n relations: context.relations,\n });\n }\n\n if (context.filters) {\n applyQueryFiltersParseOutput(query, context.filters, {\n defaultAlias: context.defaultPath,\n relations: context.relations,\n });\n }\n\n if (context.pagination) {\n applyQueryPaginationParseOutput(query, context.pagination);\n }\n\n if (context.relations) {\n const relations : QueryRelationsApplyOptions<T> = {\n defaultAlias: context.defaultPath,\n };\n if (isObject(options.relations)) {\n extendObject(relations, options.relations);\n }\n\n applyQueryRelationsParseOutput(query, context.relations, relations);\n }\n\n if (context.sort) {\n applyQuerySortParseOutput(query, context.sort);\n }\n\n return context;\n}\n\nexport function applyQuery<T extends ObjectLiteral = ObjectLiteral>(\n query: SelectQueryBuilder<T>,\n input: ParseInput,\n options: QueryApplyOptions<T> = {},\n) : QueryApplyOutput {\n if (options.defaultAlias) {\n options.defaultPath = options.defaultAlias;\n }\n\n if (\n typeof options.fields === 'undefined' ||\n !isQueryOptionDefined(options.fields, ['allowed', 'default'])\n ) {\n options.fields = false;\n }\n\n if (\n typeof options.filters === 'undefined' ||\n !isQueryOptionDefined(options.filters, ['allowed', 'default'])\n ) {\n options.filters = false;\n }\n\n if (options.pagination) {\n if (!input.pagination && !input.page) {\n input.pagination = input.pagination || {};\n }\n } else {\n options.pagination = false;\n }\n\n if (\n typeof options.relations === 'undefined' ||\n !isQueryOptionDefined(options.relations, ['allowed'])\n ) {\n options.relations = false;\n }\n\n if (\n typeof options.sort === 'undefined' ||\n !isQueryOptionDefined(options.sort, ['allowed', 'default'])\n ) {\n options.sort = false;\n }\n\n const output = applyQueryParseOutput(\n query,\n parseQuery(input, options),\n options,\n );\n\n return {\n ...output,\n ...(options.defaultAlias ? { defaultAlias: options.defaultAlias } : {}),\n };\n}\n","import {\n isObject,\n load,\n locate,\n removeFileNameExtension,\n} from 'locter';\nimport path from 'node:path';\nimport type { DataSource } from 'typeorm';\nimport { InstanceChecker } from 'typeorm';\nimport {\n adjustFilePath,\n isPromise,\n readTSConfig,\n safeReplaceWindowsSeparator,\n} from '../../utils';\nimport type { DataSourceFindOptions } from './type';\nimport type { TSConfig } from '../../utils';\n\nexport async function findDataSource(\n context: DataSourceFindOptions = {},\n) : Promise<DataSource | undefined> {\n let tsconfig : TSConfig | undefined;\n if (!context.preserveFilePaths) {\n if (isObject(context.tsconfig)) {\n tsconfig = context.tsconfig;\n } else {\n tsconfig = await readTSConfig(context.tsconfig);\n }\n }\n\n const files : string[] = [\n 'data-source',\n ];\n\n if (context.fileName) {\n context.fileName = removeFileNameExtension(\n context.fileName,\n ['.ts', '.mts', '.cts', '.js', '.mjs', '.cjs'],\n );\n\n if (context.fileName !== 'data-source') {\n files.unshift(context.fileName);\n }\n }\n\n let { directory } = context;\n let directoryIsPattern = false;\n if (context.directory) {\n if (path.isAbsolute(context.directory)) {\n directory = context.directory;\n } else {\n directoryIsPattern = true;\n directory = safeReplaceWindowsSeparator(context.directory);\n }\n\n if (!context.preserveFilePaths) {\n directory = await adjustFilePath(directory, tsconfig);\n }\n }\n\n const lookupPaths = [];\n for (let j = 0; j < files.length; j++) {\n if (\n directory &&\n directoryIsPattern\n ) {\n lookupPaths.push(path.posix.join(directory, files[j]));\n }\n\n lookupPaths.push(...[\n path.posix.join('src', files[j]),\n path.posix.join('src/{db,database}', files[j]),\n ]);\n }\n\n files.push(...lookupPaths);\n\n if (!context.preserveFilePaths) {\n for (let j = 0; j < files.length; j++) {\n files[j] = await adjustFilePath(files[j], tsconfig);\n }\n }\n\n for (let i = 0; i < files.length; i++) {\n const info = await locate(\n `${files[i]}.{js,cjs,mjs,ts,cts,mts}`,\n {\n path: [\n process.cwd(),\n ...(directory && !directoryIsPattern ? [directory] : []),\n ],\n ignore: ['**/*.d.ts'],\n },\n );\n\n if (info) {\n let moduleRecord = await load(info);\n\n if (isPromise(moduleRecord)) {\n moduleRecord = await moduleRecord;\n }\n\n if (InstanceChecker.isDataSource(moduleRecord)) {\n return moduleRecord;\n }\n\n if (!isObject(moduleRecord)) {\n continue;\n }\n\n const keys = Object.keys(moduleRecord);\n for (let j = 0; j < keys.length; j++) {\n let value = moduleRecord[keys[j]];\n\n if (isPromise(value)) {\n value = await value;\n }\n\n if (InstanceChecker.isDataSource(value)) {\n return value;\n }\n }\n }\n }\n\n return undefined;\n}\n","/*\n * Copyright (c) 2023-2023.\n * Author Peter Placzek (tada5hi)\n * For the full copyright and license information,\n * view the LICENSE file that was distributed with this source code.\n */\n\nexport enum EnvironmentName {\n DEVELOPMENT = 'development',\n PRODUCTION = 'production',\n TEST = 'test',\n}\n\nexport enum EnvironmentVariableName {\n ENV = 'NODE_ENV',\n\n // Seeder\n SEEDS = 'DB_SEEDS',\n SEEDS_ALT = 'TYPEORM_SEEDING_SEEDS',\n\n FACTORIES = 'DB_FACTORIES',\n FACTORIES_ALT = 'TYPEORM_SEEDING_FACTORIES',\n\n // Database\n TYPE = 'DB_TYPE',\n TYPE_ALT = 'TYPEORM_CONNECTION',\n\n URL = 'DB_URL',\n URL_ALT = 'TYPEORM_URL',\n\n HOST = 'DB_HOST',\n HOST_ALT = 'TYPEORM_HOST',\n\n PORT = 'DB_PORT',\n PORT_ALT = 'TYPEORM_PORT',\n\n USERNAME = 'DB_USERNAME',\n USERNAME_ALT = 'TYPEORM_USERNAME',\n\n PASSWORD = 'DB_PASSWORD',\n PASSWORD_ALT = 'TYPEORM_PASSWORD',\n\n DATABASE = 'DB_DATABASE',\n DATABASE_ALT = 'TYPEORM_DATABASE',\n\n SID = 'DB_SID',\n SID_ALT = 'TYPEORM_SID',\n\n SCHEMA = 'DB_SCHEMA',\n SCHEMA_ALT = 'TYPEORM_SCHEMA',\n\n SCHEMA_DROP = 'DB_DROP_SCHEMA',\n SCHEMA_DROP_ALT = 'TYPEORM_DROP_SCHEMA',\n\n DRIVER_EXTRA = 'DB_DRIVER_EXTRA',\n DRIVER_EXTRA_ALT = 'TYPEORM_DRIVER_EXTRA',\n\n SYNCHRONIZE = 'DB_SYNCHRONIZE',\n SYNCHRONIZE_ALT = 'TYPEORM_SYNCHRONIZE',\n\n MIGRATIONS = 'DB_MIGRATIONS',\n MIGRATIONS_ALT = 'TYPEORM_MIGRATIONS',\n\n MIGRATIONS_RUN = 'DB_MIGRATIONS_RUN',\n MIGRATIONS_RUN_ALT = 'TYPEORM_MIGRATIONS_RUN',\n\n MIGRATIONS_TABLE_NAME = 'DB_MIGRATIONS_TABLE_NAME',\n MIGRATIONS_TABLE_NAME_ALT = 'TYPEORM_MIGRATIONS_TABLE_NAME',\n\n ENTITIES = 'DB_ENTITIES',\n ENTITIES_ALT = 'TYPEORM_ENTITIES',\n\n ENTITY_PREFIX = 'DB_ENTITY_PREFIX',\n ENTITY_PREFIX_ALT = 'TYPEORM_ENTITY_PREFIX',\n\n METADATA_TABLE_NAME = 'DB_METADATA_TABLE_NAME',\n METADATA_TABLE_NAME_ALT = 'TYPEORM_METADATA_TABLE_NAME',\n\n SUBSCRIBERS = 'DB_SUBSCRIBERS',\n SUBSCRIBERS_ALT = 'TYPEORM_SUBSCRIBERS',\n\n LOGGING = 'DB_LOGGING',\n LOGGING_ALT = 'TYPEORM_LOGGING',\n\n LOGGER = 'DB_LOGGER',\n LOGGER_ALT = 'TYPEORM_LOGGER',\n\n MAX_QUERY_EXECUTION_TIME = 'DB_MAX_QUERY_EXECUTION_TIME',\n MAX_QUERY_EXECUTION_TIME_ALT = 'TYPEORM_MAX_QUERY_EXECUTION_TIME',\n\n DEBUG = 'DB_DEBUG',\n DEBUG_ALT = 'TYPEORM_DEBUG',\n\n UUID_EXTENSION = 'DB_UUID_EXTENSION',\n UUID_EXTENSION_ALT = 'TYPEORM_UUID_EXTENSION',\n\n CACHE = 'DB_CACHE',\n CACHE_ALT = 'TYPEORM_CACHE',\n\n CACHE_ALWAYS_ENABLED = 'DB_CACHE_ALWAYS_ENABLED',\n CACHE_ALWAYS_ENABLED_ALT = 'TYPEORM_CACHE_ALWAYS_ENABLED',\n\n CACHE_OPTIONS = 'DB_CACHE_OPTIONS',\n CACHE_OPTIONS_ALT = 'TYPEORM_CACHE_OPTIONS',\n\n CACHE_DURATION = 'DB_CACHE_DURATION',\n CACHE_DURATION_ALT = 'TYPEORM_CACHE_DURATION',\n}\n","import {\n oneOf, read, readBool, readInt, toArray, toBool,\n} from 'envix';\nimport type { DataSourceCacheOption } from '../data-source';\nimport { EnvironmentVariableName } from './constants';\n\nexport function transformLogging(input?: string) : boolean | string | string[] {\n const value = toBool(input);\n if (typeof value === 'boolean') {\n return value;\n }\n\n if (input === 'all') {\n return 'all';\n }\n\n return toArray(input) ?? [];\n}\n\nexport function transformCache(input?: string) : DataSourceCacheOption | undefined {\n const value = toBool(input);\n if (typeof value === 'boolean') {\n return value;\n }\n\n if (\n input === 'redis' ||\n input === 'ioredis' ||\n input === 'database' ||\n input === 'ioredis/cluster'\n ) {\n let options : Record<string, any> | undefined;\n const envCacheOptions = oneOf([\n read(EnvironmentVariableName.CACHE_OPTIONS),\n read(EnvironmentVariableName.CACHE_OPTIONS_ALT),\n ]);\n if (envCacheOptions) {\n options = JSON.parse(envCacheOptions);\n }\n\n return {\n type: input,\n options,\n alwaysEnabled: oneOf([\n readBool(EnvironmentVariableName.CACHE_ALWAYS_ENABLED),\n readBool(EnvironmentVariableName.CACHE_ALWAYS_ENABLED_ALT),\n ]),\n duration: oneOf([\n readInt(EnvironmentVariableName.CACHE_DURATION),\n readInt(EnvironmentVariableName.CACHE_DURATION_ALT),\n ]),\n };\n }\n\n return undefined;\n}\n","import {\n oneOf, read, readArray, readBool, readInt,\n} from 'envix';\nimport type { DatabaseType } from 'typeorm/driver/types/DatabaseType';\nimport { EnvironmentName, EnvironmentVariableName } from './constants';\nimport type { Environment } from './type';\nimport {\n transformCache,\n transformLogging,\n} from './utils';\n\nlet instance : Environment | undefined;\n\nexport function useEnv() : Environment;\nexport function useEnv<K extends keyof Environment>(key: K) : Environment[K];\nexport function useEnv(key?: string) : any {\n if (typeof instance !== 'undefined') {\n if (typeof key === 'string') {\n return instance[key as keyof Environment];\n }\n\n return instance;\n }\n\n const output: Environment = {\n env: read(EnvironmentVariableName.ENV, EnvironmentName.DEVELOPMENT) as `${EnvironmentName}`,\n\n // Seeder\n seeds: oneOf([\n readArray(EnvironmentVariableName.SEEDS),\n readArray(EnvironmentVariableName.SEEDS_ALT),\n ]) ?? [],\n factories: oneOf([\n readArray(EnvironmentVariableName.FACTORIES),\n readArray(EnvironmentVariableName.FACTORIES_ALT),\n ]) ?? [],\n\n // Database\n url: oneOf([\n read(EnvironmentVariableName.URL),\n read(EnvironmentVariableName.URL_ALT),\n ]),\n host: oneOf([\n read(EnvironmentVariableName.HOST),\n read(EnvironmentVariableName.HOST_ALT),\n ]),\n port: oneOf([\n readInt(EnvironmentVariableName.PORT),\n readInt(EnvironmentVariableName.PORT_ALT),\n ]),\n username: oneOf([\n read(EnvironmentVariableName.USERNAME),\n read(EnvironmentVariableName.USERNAME_ALT),\n ]),\n password: oneOf([\n read(EnvironmentVariableName.PASSWORD),\n read(EnvironmentVariableName.PASSWORD_ALT),\n ]),\n database: oneOf([\n read(EnvironmentVariableName.DATABASE),\n read(EnvironmentVariableName.DATABASE_ALT),\n ]),\n sid: oneOf([\n read(EnvironmentVariableName.SID),\n read(EnvironmentVariableName.SID_ALT),\n ]),\n schema: oneOf([\n read(EnvironmentVariableName.SCHEMA),\n read(EnvironmentVariableName.SCHEMA_ALT),\n ]),\n extra: oneOf([\n read(EnvironmentVariableName.DRIVER_EXTRA),\n read(EnvironmentVariableName.DRIVER_EXTRA_ALT),\n ]),\n synchronize: oneOf([\n readBool(EnvironmentVariableName.SYNCHRONIZE),\n readBool(EnvironmentVariableName.SYNCHRONIZE_ALT),\n ]),\n schemaDrop: oneOf([\n readBool(EnvironmentVariableName.SCHEMA_DROP),\n readBool(EnvironmentVariableName.SCHEMA_DROP_ALT),\n ]),\n migrationsRun: oneOf([\n readBool(EnvironmentVariableName.MIGRATIONS_RUN),\n readBool(EnvironmentVariableName.MIGRATIONS_RUN_ALT),\n ]),\n entities: oneOf([\n readArray(EnvironmentVariableName.ENTITIES),\n readArray(EnvironmentVariableName.ENTITIES_ALT),\n ]) ?? [],\n migrations: oneOf([\n readArray(EnvironmentVariableName.MIGRATIONS),\n readArray(EnvironmentVariableName.MIGRATIONS_ALT),\n ]) ?? [],\n migrationsTableName: oneOf([\n read(EnvironmentVariableName.MIGRATIONS_TABLE_NAME),\n read(EnvironmentVariableName.MIGRATIONS_TABLE_NAME_ALT),\n ]),\n metadataTableName: oneOf([\n read(EnvironmentVariableName.METADATA_TABLE_NAME),\n read(EnvironmentVariableName.METADATA_TABLE_NAME_ALT),\n ]),\n subscribers: oneOf([\n readArray(EnvironmentVariableName.SUBSCRIBERS),\n readArray(EnvironmentVariableName.SUBSCRIBERS_ALT),\n ]) ?? [],\n logging: transformLogging(oneOf([\n read(EnvironmentVariableName.LOGGING),\n read(EnvironmentVariableName.LOGGING_ALT),\n ])),\n logger: oneOf([\n read(EnvironmentVariableName.LOGGER),\n read(EnvironmentVariableName.LOGGER_ALT),\n ]),\n entityPrefix: oneOf([\n read(EnvironmentVariableName.ENTITY_PREFIX),\n read(EnvironmentVariableName.ENTITY_PREFIX_ALT),\n ]),\n maxQueryExecutionTime: oneOf([\n readInt(EnvironmentVariableName.MAX_QUERY_EXECUTION_TIME),\n readInt(EnvironmentVariableName.MAX_QUERY_EXECUTION_TIME_ALT),\n ]),\n debug: oneOf([\n read(EnvironmentVariableName.DEBUG),\n read(EnvironmentVariableName.DEBUG_ALT),\n ]),\n cache: transformCache(oneOf([\n read(EnvironmentVariableName.CACHE),\n read(EnvironmentVariableName.CACHE_ALT),\n ])),\n uuidExtension: oneOf([\n read(EnvironmentVariableName.UUID_EXTENSION),\n read(EnvironmentVariableName.UUID_EXTENSION_ALT),\n ]),\n\n };\n\n if (output.extra) {\n output.extra = JSON.parse(output.extra); // todo: ensure record<string,any> ??\n }\n\n let type : string | undefined;\n const envType = oneOf([\n read(EnvironmentVariableName.TYPE),\n read(EnvironmentVariableName.TYPE_ALT),\n ]);\n\n if (envType) {\n type = envType;\n } else {\n const envURL = oneOf([\n read(EnvironmentVariableName.URL),\n read(EnvironmentVariableName.URL_ALT),\n ]);\n\n if (envURL) {\n [type] = envURL.split('://');\n }\n }\n\n if (type) {\n output.type = type as DatabaseType; // todo: maybe validation here\n }\n\n instance = output;\n\n if (typeof key === 'string') {\n return output[key as keyof Environment];\n }\n\n return instance;\n}\n\nexport function resetEnv() {\n if (typeof instance !== 'undefined') {\n instance = undefined;\n }\n}\n","import { createMerger } from 'smob';\nimport type { DataSourceOptions } from 'typeorm';\n\nconst merge = createMerger({\n strategy: (target, key, value) => {\n if (typeof target[key] === 'undefined') {\n target[key] = value;\n\n return target;\n }\n\n return undefined;\n },\n});\n\nexport function mergeDataSourceOptions(\n target: DataSourceOptions,\n source: DataSourceOptions,\n) {\n if (target.type !== source.type) {\n return target;\n }\n\n return merge(target, source);\n}\n","import type { DataSourceOptions } from 'typeorm';\nimport type { BaseDataSourceOptions } from 'typeorm/data-source/BaseDataSourceOptions';\nimport type { PostgresConnectionOptions } from 'typeorm/driver/postgres/PostgresConnectionOptions';\nimport type { DatabaseType } from 'typeorm/driver/types/DatabaseType';\nimport type { LoggerOptions } from 'typeorm/logger/LoggerOptions';\nimport { useEnv } from '../../../env';\nimport { mergeDataSourceOptions } from './merge';\n\nexport function hasEnvDataSourceOptions() : boolean {\n return !!useEnv('type');\n}\n\n/* istanbul ignore next */\nexport function readDataSourceOptionsFromEnv() : DataSourceOptions | undefined {\n if (!hasEnvDataSourceOptions()) {\n return undefined;\n }\n\n // todo: include seeder options\n const base : Omit<BaseDataSourceOptions, 'poolSize'> = {\n type: useEnv('type') as DatabaseType,\n entities: useEnv('entities'),\n subscribers: useEnv('subscribers'),\n migrations: useEnv('migrations'),\n migrationsTableName: useEnv('migrationsTableName'),\n // migrationsTransactionMode: useEnv('migra')\n metadataTableName: useEnv('metadataTableName'),\n logging: useEnv('logging') as LoggerOptions,\n logger: useEnv('logger') as BaseDataSourceOptions['logger'],\n maxQueryExecutionTime: useEnv('maxQueryExecutionTime'),\n synchronize: useEnv('synchronize'),\n migrationsRun: useEnv('migrationsRun'),\n dropSchema: useEnv('schemaDrop'),\n entityPrefix: useEnv('entityPrefix'),\n extra: useEnv('extra'),\n cache: useEnv('cache'),\n };\n\n const credentialOptions = {\n url: useEnv('url'),\n host: useEnv('host'),\n port: useEnv('port'),\n username: useEnv('username'),\n password: useEnv('password'),\n database: useEnv('database'),\n };\n\n if (base.type === 'mysql' || base.type === 'mariadb') {\n return {\n ...base,\n ...credentialOptions,\n type: base.type,\n };\n }\n\n if (base.type === 'postgres') {\n return {\n ...base,\n ...credentialOptions,\n type: base.type,\n schema: useEnv('schema'),\n uuidExtension: useEnv('uuidExtension') as PostgresConnectionOptions['uuidExtension'],\n };\n }\n\n if (base.type === 'cockroachdb') {\n return {\n ...base,\n ...credentialOptions,\n type: base.type,\n schema: useEnv('schema'),\n timeTravelQueries: true,\n };\n }\n\n if (base.type === 'sqlite') {\n return {\n ...base,\n type: base.type,\n database: useEnv('database') || 'db.sqlite',\n };\n }\n\n if (base.type === 'better-sqlite3') {\n return {\n ...base,\n type: base.type,\n database: useEnv('database') || 'db.sqlite',\n };\n }\n\n if (base.type === 'mssql') {\n return {\n ...base,\n ...credentialOptions,\n type: base.type,\n schema: useEnv('schema'),\n };\n }\n\n if (base.type === 'oracle') {\n return {\n ...base,\n ...credentialOptions,\n type: base.type,\n sid: useEnv('sid'),\n };\n }\n\n return {\n ...base,\n ...credentialOptions,\n } as DataSourceOptions;\n}\n\nexport function mergeDataSourceOptionsWithEnv(options: DataSourceOptions) {\n const env = readDataSourceOptionsFromEnv();\n if (!env) {\n return options;\n }\n\n return mergeDataSourceOptions(env, options);\n}\n","import { isObject } from 'locter';\nimport type { DataSourceOptions } from 'typeorm';\nimport { OptionsError } from '../../errors';\nimport { adjustFilePaths, readTSConfig } from '../../utils';\nimport type { TSConfig } from '../../utils';\nimport { findDataSource } from '../find';\nimport type { DataSourceOptionsBuildContext } from './type';\nimport {\n mergeDataSourceOptionsWithEnv,\n readDataSourceOptionsFromEnv,\n} from './utils';\n\n/**\n * Build DataSourceOptions from DataSource or from configuration.\n *\n * @param context\n */\nexport async function buildDataSourceOptions(\n context: DataSourceOptionsBuildContext = {},\n) : Promise<DataSourceOptions> {\n const directory : string = context.directory || process.cwd();\n\n let tsconfig : TSConfig | undefined;\n if (!context.preserveFilePaths) {\n if (isObject(context.tsconfig)) {\n tsconfig = context.tsconfig;\n } else {\n tsconfig = await readTSConfig(context.tsconfig);\n }\n }\n\n const dataSource = await findDataSource({\n directory,\n fileName: context.dataSourceName,\n tsconfig,\n });\n\n if (dataSource) {\n if (context.preserveFilePaths) {\n return mergeDataSourceOptionsWithEnv(dataSource.options);\n }\n\n const options = await adjustFilePaths(\n dataSource.options,\n [\n 'entities',\n 'migrations',\n 'subscribers',\n ],\n tsconfig,\n );\n\n return mergeDataSourceOptionsWithEnv(options);\n }\n\n const options = readDataSourceOptionsFromEnv();\n if (options) {\n if (context.preserveFilePaths) {\n return options;\n }\n\n return adjustFilePaths(\n options,\n ['entities', 'migrations', 'subscribers'],\n tsconfig,\n );\n }\n\n throw OptionsError.notFound();\n}\n","import type { DataSourceOptions } from 'typeorm';\nimport { buildDataSourceOptions } from './module';\n\nconst instances : Record<string, DataSourceOptions> = {};\nconst instancePromises : Record<string, Promise<DataSourceOptions>> = {};\n\nexport function setDataSourceOptions(\n options: DataSourceOptions,\n alias?: string,\n) {\n instances[alias || 'default'] = options;\n}\n\nexport function hasDataSourceOptions(alias?: string) : boolean {\n return Object.prototype.hasOwnProperty.call(instances, alias || 'default');\n}\n\nexport async function useDataSourceOptions(alias?: string) : Promise<DataSourceOptions> {\n alias = alias || 'default';\n\n if (Object.prototype.hasOwnProperty.call(instances, alias)) {\n return instances[alias];\n }\n\n /* istanbul ignore next */\n if (!Object.prototype.hasOwnProperty.call(instancePromises, alias)) {\n instancePromises[alias] = buildDataSourceOptions()\n .catch((e) => {\n if (alias) {\n delete instancePromises[alias];\n }\n\n throw e;\n });\n }\n\n instances[alias] = await instancePromises[alias];\n\n return instances[alias];\n}\n","import type { DataSourceOptions } from 'typeorm';\nimport { DataSource } from 'typeorm';\nimport { useDataSourceOptions } from './options';\n\nconst instances : Record<string, DataSource> = {};\n\nconst initializePromises : Record<string, Promise<DataSource>> = {};\nconst optionsPromises: Record<string, Promise<DataSourceOptions>> = {};\n\nexport function setDataSource(\n dataSource: DataSource,\n alias?: string,\n) {\n alias = alias || 'default';\n\n instances[alias] = dataSource;\n}\n\nexport function hasDataSource(alias?: string) : boolean {\n alias = alias || 'default';\n\n return Object.prototype.hasOwnProperty.call(instances, alias);\n}\n\nexport function unsetDataSource(alias?: string) {\n alias = alias || 'default';\n\n if (Object.prototype.hasOwnProperty.call(instances, alias)) {\n delete instances[alias];\n }\n\n /* istanbul ignore next */\n if (Object.prototype.hasOwnProperty.call(optionsPromises, alias)) {\n delete optionsPromises[alias];\n }\n\n /* istanbul ignore next */\n if (Object.prototype.hasOwnProperty.call(initializePromises, alias)) {\n delete initializePromises[alias];\n }\n}\n\nexport async function useDataSource(alias?: string) : Promise<DataSource> {\n alias = alias || 'default';\n\n if (Object.prototype.hasOwnProperty.call(instances, alias)) {\n if (!instances[alias].isInitialized) {\n /* istanbul ignore next */\n if (!Object.prototype.hasOwnProperty.call(initializePromises, alias)) {\n initializePromises[alias] = instances[alias].initialize()\n .catch((e) => {\n if (alias) {\n delete initializePromises[alias];\n }\n\n throw e;\n });\n }\n\n await initializePromises[alias];\n }\n\n return instances[alias];\n }\n\n /* istanbul ignore next */\n if (!Object.prototype.hasOwnProperty.call(optionsPromises, alias)) {\n optionsPromises[alias] = useDataSourceOptions(alias)\n .catch((e) => {\n if (alias) {\n delete optionsPromises[alias];\n }\n\n throw e;\n });\n }\n\n const options = await optionsPromises[alias];\n\n const dataSource = new DataSource(options);\n\n /* istanbul ignore next */\n if (!Object.prototype.hasOwnProperty.call(initializePromises, alias)) {\n initializePromises[alias] = dataSource.initialize()\n .catch((e) => {\n if (alias) {\n delete initializePromises[alias];\n }\n\n throw e;\n });\n }\n\n await initializePromises[alias];\n\n instances[alias] = dataSource;\n\n return dataSource;\n}\n","import type { DataSourceOptions } from 'typeorm';\nimport { DataSource, MigrationExecutor } from 'typeorm';\nimport {\n hasDataSource,\n useDataSource,\n useDataSourceOptions,\n} from '../../../data-source';\nimport { hasStringProperty } from '../../../utils';\nimport type { DatabaseCheckContext, DatabaseCheckResult } from './types';\n\n/**\n * Check database setup progress.\n *\n * @param context\n */\nexport async function checkDatabase(context: DatabaseCheckContext = {}) : Promise<DatabaseCheckResult> {\n const result : DatabaseCheckResult = {\n exists: true,\n schema: false,\n migrationsPending: [],\n };\n\n let dataSource : DataSource;\n let dataSourceCleanup : boolean;\n\n if (\n typeof context.dataSource === 'undefined' &&\n typeof context.options === 'undefined' &&\n hasDataSource(context.alias)\n ) {\n dataSource = await useDataSource(context.alias);\n\n if (\n dataSource.options.synchronize ||\n dataSource.options.migrationsRun\n ) {\n dataSource = new DataSource({\n ...dataSource.options,\n synchronize: false,\n migrationsRun: false,\n });\n\n dataSourceCleanup = true;\n } else {\n dataSourceCleanup = false;\n }\n } else {\n let dataSourceOptions : DataSourceOptions;\n if (context.options) {\n dataSourceOptions = context.options;\n } else {\n dataSourceOptions = await useDataSourceOptions(context.alias);\n }\n\n dataSource = new DataSource({\n ...dataSourceOptions,\n synchronize: false,\n migrationsRun: false,\n });\n dataSourceCleanup = context.dataSourceCleanup ?? true;\n }\n\n try {\n if (!dataSource.isInitialized) {\n await dataSource.initialize();\n }\n } catch (e) {\n result.exists = false;\n\n return result;\n }\n\n const queryRunner = dataSource.createQueryRunner();\n\n if (\n dataSource.migrations &&\n dataSource.migrations.length > 0\n ) {\n const migrationExecutor = new MigrationExecutor(dataSource, queryRunner);\n result.migrationsPending = await migrationExecutor.getPendingMigrations();\n\n result.schema = result.migrationsPending.length === 0;\n } else {\n let schema : string | undefined;\n if (hasStringProperty(dataSource.driver.options, 'schema')) {\n schema = dataSource.driver.options.schema;\n }\n\n const migrationsTableName = dataSource.driver.buildTableName(\n dataSource.options.migrationsTableName || 'migrations',\n schema,\n dataSource.driver.database,\n );\n const migrationsTableExists = await queryRunner.hasTable(migrationsTableName);\n if (migrationsTableExists) {\n result.schema = dataSource.entityMetadatas.length === 0;\n } else {\n const tableNames = dataSource.entityMetadatas.map(\n (entityMetadata) => entityMetadata.tablePath,\n );\n const tables = await queryRunner.getTables(tableNames);\n\n if (tables.length === dataSource.entityMetadatas.length) {\n const { upQueries } = await dataSource.driver.createSchemaBuilder()\n .log();\n\n result.schema = upQueries.length === 0;\n } else {\n result.schema = false;\n }\n }\n }\n\n await queryRunner.release();\n\n if (dataSourceCleanup) {\n await dataSource.destroy();\n }\n\n return result;\n}\n","import type { DataSourceOptions } from 'typeorm';\nimport { hasOwnProperty } from '../../../utils';\n\nexport function getCharsetFromDataSourceOptions(options: DataSourceOptions) : string | undefined {\n if (\n hasOwnProperty(options, 'charset') &&\n typeof options.charset === 'string'\n ) {\n return options.charset;\n }\n\n if (typeof options?.extra?.charset === 'string') {\n return options.extra.charset;\n }\n\n return undefined;\n}\n","import type { DataSourceOptions } from 'typeorm';\nimport { hasOwnProperty } from '../../../utils';\n\nexport function getCharacterSetFromDataSourceOptions(options: DataSourceOptions) : string | undefined {\n if (\n hasOwnProperty(options, 'characterSet') &&\n typeof options.characterSet === 'string'\n ) {\n return options.characterSet;\n }\n\n if (typeof options?.extra?.characterSet === 'string') {\n return options.extra.characterSet;\n }\n\n return undefined;\n}\n","import type { DataSourceOptions } from 'typeorm';\nimport { DriverUtils } from 'typeorm/driver/DriverUtils';\nimport { getCharsetFromDataSourceOptions } from './charset';\nimport { getCharacterSetFromDataSourceOptions } from './character-set';\nimport type { DriverOptions } from '../types';\n\nexport function buildDriverOptions(options: DataSourceOptions): DriverOptions {\n let driverOptions: Record<string, any>;\n\n switch (options.type) {\n case 'mysql':\n case 'mariadb':\n case 'postgres':\n case 'cockroachdb':\n case 'mssql':\n case 'oracle':\n driverOptions = DriverUtils.buildDriverOptions(options.replication ? options.replication.master : options);\n break;\n case 'mongodb':\n driverOptions = DriverUtils.buildMongoDBDriverOptions(options);\n break;\n default:\n driverOptions = DriverUtils.buildDriverOptions(options);\n }\n\n const charset = getCharsetFromDataSourceOptions(options);\n const characterSet = getCharacterSetFromDataSourceOptions(options);\n\n return {\n host: driverOptions.host,\n user: driverOptions.user || driverOptions.username,\n password: driverOptions.password,\n database: driverOptions.database,\n port: driverOptions.port,\n ...(charset ? { charset } : {}),\n ...(characterSet ? { characterSet } : {}),\n ...(driverOptions.ssl ? { ssl: driverOptions.ssl } : {}),\n ...(driverOptions.url ? { url: driverOptions.url } : {}),\n ...(driverOptions.connectString ? { connectString: driverOptions.connectString } : {}),\n ...(driverOptions.sid ? { sid: driverOptions.sid } : {}),\n ...(driverOptions.serviceName ? { serviceName: driverOptions.serviceName } : {}),\n ...(driverOptions.template ? { template: driverOptions.template } : {}),\n ...(options.extra ? { extra: options.extra } : {}),\n ...(driverOptions.domain ? { domain: driverOptions.domain } : {}),\n ...(driverOptions.schema ? { schema: driverOptions.schema } : {}),\n };\n}\n","import type { DataSource, DataSourceOptions } from 'typeorm';\nimport { DriverFactory } from 'typeorm/driver/DriverFactory';\n\nconst driversRequireDatabaseOption: DataSourceOptions['type'][] = [\n 'sqlite',\n 'better-sqlite3',\n];\n\nexport function createDriver(connectionOptions: DataSourceOptions) {\n const fakeConnection: DataSource = {\n options: {\n type: connectionOptions.type,\n ...(driversRequireDatabaseOption.indexOf(connectionOptions.type) !== -1 ? {\n database: connectionOptions.database,\n } : {}),\n },\n } as DataSource;\n\n const driverFactory = new DriverFactory();\n return driverFactory.create(fakeConnection);\n}\n","import type { DataSourceOptions } from 'typeorm';\nimport { buildDataSourceOptions, findDataSource } from '../../data-source';\nimport type {\n DatabaseBaseContextInput,\n DatabaseCreateContext,\n DatabaseCreateContextInput,\n DatabaseDropContext,\n DatabaseDropContextInput,\n} from '../methods';\n\nasync function normalizeDataSourceOptions(context: DatabaseBaseContextInput) : Promise<DataSourceOptions> {\n let options : DataSourceOptions | undefined;\n if (context.options) {\n options = {\n ...context.options,\n };\n } else {\n const dataSource = await findDataSource(context.findOptions);\n if (dataSource) {\n options = {\n ...dataSource.options,\n };\n }\n\n if (!options) {\n options = {\n ...await buildDataSourceOptions(),\n };\n }\n }\n\n return {\n ...options,\n\n subscribers: [],\n synchronize: false,\n migrationsRun: false,\n dropSchema: false,\n };\n}\n\nexport async function buildDatabaseCreateContext(\n input: DatabaseCreateContextInput = {},\n) : Promise<DatabaseCreateContext> {\n return {\n ...input,\n options: await normalizeDataSourceOptions(input),\n synchronize: input.synchronize ?? true,\n ifNotExist: input.ifNotExist ?? true,\n };\n}\n\nexport async function buildDatabaseDropContext(\n input: DatabaseDropContextInput = {},\n) : Promise<DatabaseDropContext> {\n return {\n ...input,\n options: await normalizeDataSourceOptions(input),\n ifExist: input.ifExist ?? true,\n };\n}\n","import { pascalCase } from 'pascal-case';\nimport path from 'node:path';\nimport fs from 'node:fs';\nimport process from 'node:process';\nimport { MigrationGenerateCommand } from 'typeorm/commands/MigrationGenerateCommand';\nimport type { MigrationGenerateCommandContext, MigrationGenerateResult } from './type';\n\nclass GenerateCommand extends MigrationGenerateCommand {\n static prettify(query: string) {\n return this.prettifyQuery(query);\n }\n}\n\nfunction queryParams(parameters: any[] | undefined): string {\n if (!parameters || !parameters.length) {\n return '';\n }\n\n return `, ${JSON.stringify(parameters)}`;\n}\n\nfunction buildTemplate(\n name: string,\n timestamp: number,\n upStatements: string[],\n downStatements: string[],\n): string {\n const migrationName = `${pascalCase(name)}${timestamp}`;\n\n const up = upStatements.map((statement) => ` ${statement}`);\n const down = downStatements.map((statement) => ` ${statement}`);\n\n return `import type { MigrationInterface, QueryRunner } from 'typeorm';\n\nexport class ${migrationName} implements MigrationInterface {\n name = '${migrationName}';\n\n public async up(queryRunner: QueryRunner): Promise<void> {\n${up.join(`\n`)}\n }\n public async down(queryRunner: QueryRunner): Promise<void> {\n${down.join(`\n`)}\n }\n}\n`;\n}\n\nexport async function generateMigration(\n context: MigrationGenerateCommandContext,\n) : Promise<MigrationGenerateResult> {\n context.name = context.name || 'Default';\n\n const timestamp = context.timestamp || new Date().getTime();\n const fileName = `${timestamp}-${context.name}.ts`;\n\n const { dataSource } = context;\n\n const up: string[] = []; const\n down: string[] = [];\n\n const sqlInMemory = await dataSource.driver.createSchemaBuilder().log();\n\n if (context.prettify) {\n sqlInMemory.upQueries.forEach((upQuery) => {\n upQuery.query = GenerateCommand.prettify(\n upQuery.query,\n );\n });\n sqlInMemory.downQueries.forEach((downQuery) => {\n downQuery.query = GenerateCommand.prettify(\n downQuery.query,\n );\n });\n }\n\n sqlInMemory.upQueries.forEach((upQuery) => {\n up.push(`await queryRunner.query(\\`${upQuery.query.replace(/`/g, '\\\\`')}\\`${queryParams(upQuery.parameters)});`);\n });\n\n sqlInMemory.downQueries.forEach((downQuery) => {\n down.push(`await queryRunner.query(\\`${downQuery.query.replace(/`/g, '\\\\`')}\\`${queryParams(downQuery.parameters)});`);\n });\n\n if (\n up.length === 0 &&\n down.length === 0\n ) {\n return { up, down };\n }\n\n const content = buildTemplate(context.name, timestamp, up, down.reverse());\n\n if (!context.preview) {\n let directoryPath : string;\n if (context.directoryPath) {\n if (!path.isAbsolute(context.directoryPath)) {\n directoryPath = path.join(process.cwd(), context.directoryPath);\n } else {\n directoryPath = context.directoryPath;\n }\n } else {\n directoryPath = path.join(process.cwd(), 'migrations');\n }\n\n try {\n await fs.promises.access(directoryPath, fs.constants.R_OK | fs.constants.W_OK);\n } catch (e) {\n await fs.promises.mkdir(directoryPath, { recursive: true });\n }\n\n await fs.promises.writeFile(\n path.join(directoryPath, fileName),\n content,\n { encoding: 'utf-8' },\n );\n }\n\n return {\n up,\n down,\n content,\n };\n}\n","/* istanbul ignore next */\nimport type { ObjectLiteral } from 'rapiq';\nimport type { SelectQueryBuilder } from 'typeorm';\n\nexport function existsQuery<T extends ObjectLiteral = ObjectLiteral>(builder: SelectQueryBuilder<T>, inverse = false) {\n return `${inverse ? 'not ' : ''}exists (${builder.getQuery()})`;\n}\n","import type { DataSourceOptions, Migration } from 'typeorm';\nimport { DataSource, InstanceChecker } from 'typeorm';\n\nexport async function synchronizeDatabaseSchema(\n input: DataSource | DataSourceOptions,\n) : Promise<Migration[]> {\n let dataSource: DataSource;\n let options: DataSourceOptions;\n\n if (InstanceChecker.isDataSource(input)) {\n dataSource = input;\n options = dataSource.options;\n } else {\n options = input;\n dataSource = new DataSource(options);\n }\n\n if (!dataSource.isInitialized) {\n await dataSource.initialize();\n }\n\n let migrationsCount = 0;\n if (options.migrations) {\n migrationsCount = Array.isArray(options.migrations) ?\n options.migrations.length :\n Object.keys(options.migrations).length;\n }\n\n let migrations : Migration[] = [];\n\n if (migrationsCount > 0) {\n migrations = await dataSource.runMigrations({\n transaction: options.migrationsTransactionMode,\n });\n } else {\n await dataSource.synchronize(false);\n }\n\n if (!InstanceChecker.isDataSource(input)) {\n await dataSource.destroy();\n }\n\n return migrations;\n}\n","import { isObject } from 'locter';\nimport type { PostgresDriver } from 'typeorm/driver/postgres/PostgresDriver';\nimport type { CockroachDriver } from 'typeorm/driver/cockroachdb/CockroachDriver';\nimport type {\n DatabaseBaseContext,\n DatabaseCreateContextInput,\n DatabaseDropContextInput,\n} from '../methods';\nimport { hasOwnProperty } from '../../utils';\nimport type { DriverOptions } from './types';\nimport { buildDriverOptions, createDriver } from './utils';\nimport { buildDatabaseCreateContext, buildDatabaseDropContext, synchronizeDatabaseSchema } from '../utils';\n\nexport async function createSimplePostgresConnection(\n driver: PostgresDriver | CockroachDriver,\n options: DriverOptions,\n operationContext: DatabaseBaseContext,\n) {\n /**\n * pg library\n */\n const { Client } = driver.postgres;\n\n const data : Record<string, any> = {\n host: options.host,\n port: options.port,\n user: options.user,\n password: options.password,\n ssl: options.ssl,\n schema: options.schema,\n ...(options.extra ? options.extra : {}),\n };\n\n if (typeof operationContext.initialDatabase === 'string') {\n data.database = operationContext.initialDatabase;\n }\n\n const client = new Client(data);\n\n await client.connect();\n\n return client;\n}\n\nexport async function executeSimplePostgresQuery(connection: any, query: string, endConnection = true) {\n return new Promise(((resolve, reject) => {\n connection.query(query, (queryErr: any, queryResult: any) => {\n if (endConnection) {\n connection.end();\n }\n\n if (queryErr) {\n reject(queryErr);\n }\n\n resolve(queryResult);\n });\n }));\n}\n\nexport async function createPostgresDatabase(\n input: DatabaseCreateContextInput = {},\n) {\n const context = await buildDatabaseCreateContext(input);\n const options = buildDriverOptions(context.options);\n const driver = createDriver(context.options) as PostgresDriver;\n\n const connection = await createSimplePostgresConnection(driver, options, context);\n\n if (context.ifNotExist) {\n const existQuery = `SELECT * FROM pg_database WHERE lower(datname) = lower('${options.database}');`;\n const existResult = await executeSimplePostgresQuery(connection, existQuery, false);\n\n if (\n isObject(existResult) &&\n hasOwnProperty(existResult, 'rows') &&\n Array.isArray(existResult.rows) &&\n existResult.rows.length > 0\n ) {\n await connection.end();\n\n return Promise.resolve();\n }\n }\n\n /**\n * @link https://github.com/typeorm/typeorm/blob/master/src/driver/postgres/PostgresQueryRunner.ts#L326\n */\n let query = `CREATE DATABASE \"${options.database}\"`;\n if (typeof options.template === 'string') {\n query += ` TEMPLATE \"${options.template}\"`;\n } else if (typeof options.characterSet === 'string') {\n query += ` WITH ENCODING '${options.characterSet}'`;\n }\n const result = await executeSimplePostgresQuery(connection, query);\n\n if (typeof options.schema === 'string' && options.schema !== 'public') {\n const schemaConnection = await createSimplePostgresConnection(driver, options, {\n ...context,\n initialDatabase: options.database,\n });\n const schemaQuery = `CREATE SCHEMA IF NOT EXISTS \"${options.schema}\"`;\n await executeSimplePostgresQuery(schemaConnection, schemaQuery);\n }\n\n if (context.synchronize) {\n await synchronizeDatabaseSchema(context.options);\n }\n\n return result;\n}\n\nexport async function dropPostgresDatabase(\n input: DatabaseDropContextInput = {},\n) {\n const context = await buildDatabaseDropContext(input);\n const options = buildDriverOptions(context.options);\n const driver = createDriver(context.options) as PostgresDriver;\n\n const connection = await createSimplePostgresConnection(driver, options, context);\n /**\n * @link https://github.com/typeorm/typeorm/blob/master/src/driver/postgres/PostgresQueryRunner.ts#L343\n */\n const query = context.ifExist ?\n `DROP DATABASE IF EXISTS \"${options.database}\"` :\n `DROP DATABASE \"${options.database}\"`;\n\n return executeSimplePostgresQuery(connection, query);\n}\n","import type { CockroachDriver } from 'typeorm/driver/cockroachdb/CockroachDriver';\nimport type { DatabaseCreateContextInput, DatabaseDropContextInput } from '../methods';\nimport { createSimplePostgresConnection } from './postgres';\nimport { buildDriverOptions, createDriver } from './utils';\nimport { buildDatabaseCreateContext, buildDatabaseDropContext, synchronizeDatabaseSchema } from '../utils';\n\nexport async function executeSimpleCockroachDBQuery(connection: any, query: string, endConnection = true) {\n return new Promise(((resolve, reject) => {\n connection.query(query, (queryErr: any, queryResult: any) => {\n if (endConnection) {\n connection.end();\n }\n\n if (queryErr) {\n reject(queryErr);\n }\n\n resolve(queryResult);\n });\n }));\n}\n\nexport async function createCockroachDBDatabase(\n input: DatabaseCreateContextInput = {},\n) {\n const context = await buildDatabaseCreateContext(input);\n const options = buildDriverOptions(context.options);\n const driver = createDriver(context.options) as CockroachDriver;\n\n const connection = await createSimplePostgresConnection(\n driver,\n options,\n context,\n );\n\n /**\n * @link https://github.com/typeorm/typeorm/blob/master/src/driver/cockroachdb/CockroachQueryRunner.ts#L347\n */\n const query = `CREATE DATABASE ${context.ifNotExist ? 'IF NOT EXISTS ' : ''} \"${options.database}\"`;\n const result = await executeSimpleCockroachDBQuery(connection, query);\n\n if (context.synchronize) {\n await synchronizeDatabaseSchema(context.options);\n }\n\n return result;\n}\n\nexport async function dropCockroachDBDatabase(\n input: DatabaseDropContextInput = {},\n) {\n const context = await buildDatabaseDropContext(input);\n const options = buildDriverOptions(context.options);\n const driver = createDriver(context.options) as CockroachDriver;\n\n const connection = await createSimplePostgresConnection(\n driver,\n options,\n context,\n );\n /**\n * @link https://github.com/typeorm/typeorm/blob/master/src/driver/cockroachdb/CockroachQueryRunner.ts#L356\n */\n const query = `DROP DATABASE ${context.ifExist ? 'IF EXISTS ' : ''} \"${options.database}\"`;\n\n return executeSimpleCockroachDBQuery(connection, query);\n}\n","import type { MongoDriver } from 'typeorm/driver/mongodb/MongoDriver';\nimport type {\n DatabaseCreateContextInput,\n DatabaseDropContextInput,\n} from '../methods';\nimport type { DriverOptions } from './types';\nimport { buildDriverOptions, createDriver } from './utils';\nimport { buildDatabaseCreateContext, buildDatabaseDropContext, synchronizeDatabaseSchema } from '../utils';\n\nexport async function createSimpleMongoDBConnection(\n driver: MongoDriver,\n options: DriverOptions,\n) {\n /**\n * mongodb library\n */\n const { MongoClient } = driver.mongodb;\n\n let url = 'mongodb://';\n if (options.user && options.password) {\n url += `${options.user}:${options.password}@`;\n }\n\n url += `${options.host || '127.0.0.1'}:${options.port || 27017}/${options.database}`;\n if (options.ssl) {\n url += '?tls=true';\n }\n\n const client = new MongoClient(url);\n await client.connect();\n return client;\n}\n\nexport async function createMongoDBDatabase(\n input: DatabaseCreateContextInput = {},\n) {\n const context = await buildDatabaseCreateContext(input);\n const options = buildDriverOptions(context.options);\n const driver = createDriver(context.options) as MongoDriver;\n\n // connection setup, will create the database on the fly.\n const client = await createSimpleMongoDBConnection(driver, options);\n await client.close();\n\n if (context.synchronize) {\n await synchronizeDatabaseSchema(context.options);\n }\n}\n\nexport async function dropMongoDBDatabase(\n input: DatabaseDropContextInput = {},\n) {\n const context = await buildDatabaseDropContext(input);\n const options = buildDriverOptions(context.options);\n const driver = createDriver(context.options) as MongoDriver;\n\n const client = await createSimpleMongoDBConnection(driver, options);\n const result = await client.dropDatabase();\n await client.close();\n\n return result;\n}\n","import type { SqlServerDriver } from 'typeorm/driver/sqlserver/SqlServerDriver';\nimport type {\n DatabaseCreateContextInput,\n DatabaseDropContextInput,\n} from '../methods';\nimport type { DriverOptions } from './types';\nimport { buildDriverOptions, createDriver } from './utils';\nimport { buildDatabaseCreateContext, buildDatabaseDropContext, synchronizeDatabaseSchema } from '../utils';\n\nexport async function createSimpleMsSQLConnection(\n driver: SqlServerDriver,\n options: DriverOptions,\n) {\n const option : Record<string, any> = {\n user: options.user,\n password: options.password,\n server: options.host,\n port: options.port || 1433,\n ...(options.extra ? options.extra : {}),\n ...(options.domain ? { domain: options.domain } : {}),\n };\n\n await driver.mssql.connect(option);\n\n return driver.mssql;\n}\n\nexport async function createMsSQLDatabase(\n input: DatabaseCreateContextInput = {},\n) {\n const context = await buildDatabaseCreateContext(input);\n const options = buildDriverOptions(context.options);\n const driver = createDriver(context.options) as SqlServerDriver;\n\n const connection = await createSimpleMsSQLConnection(driver, options);\n /**\n * @link https://github.com/typeorm/typeorm/blob/master/src/driver/sqlserver/SqlServerQueryRunner.ts#L416\n */\n let query = context.ifNotExist ?\n `IF DB_ID('${options.database}') IS NULL CREATE DATABASE \"${options.database}\"` :\n `CREATE DATABASE \"${options.database}\"`;\n\n if (typeof options.characterSet === 'string') {\n query += ` CHARACTER SET ${options.characterSet}`;\n }\n\n const result = await connection.query(query);\n\n if (context.synchronize) {\n await synchronizeDatabaseSchema(context.options);\n }\n\n return result;\n}\n\nexport async function dropMsSQLDatabase(\n input: DatabaseDropContextInput = {},\n) {\n const context = await buildDatabaseDropContext(input);\n const options = buildDriverOptions(context.options);\n const driver = createDriver(context.options) as SqlServerDriver;\n\n const connection = await createSimpleMsSQLConnection(driver, options);\n /**\n * @link https://github.com/typeorm/typeorm/blob/master/src/driver/sqlserver/SqlServerQueryRunner.ts#L425\n */\n const query = context.ifExist ?\n `IF DB_ID('${options.database}') IS NOT NULL DROP DATABASE \"${options.database}\"` :\n `DROP DATABASE \"${options.database}\"`;\n\n return connection.query(query);\n}\n","import type { MysqlDriver } from 'typeorm/driver/mysql/MysqlDriver';\nimport type {\n DatabaseCreateContextInput,\n DatabaseDropContextInput,\n} from '../methods';\nimport type { DriverOptions } from './types';\nimport { buildDriverOptions, createDriver } from './utils';\nimport { buildDatabaseCreateContext, buildDatabaseDropContext, synchronizeDatabaseSchema } from '../utils';\n\nexport async function createSimpleMySQLConnection(\n driver: MysqlDriver,\n options: DriverOptions,\n) {\n /**\n * mysql|mysql2 library\n */\n const { createConnection } = driver.mysql;\n\n const option : Record<string, any> = {\n host: options.host,\n user: options.user,\n password: options.password,\n port: options.port,\n ssl: options.ssl,\n ...(options.extra ? options.extra : {}),\n };\n\n return createConnection(option);\n}\n\nexport async function executeSimpleMysqlQuery(connection: any, query: string, endConnection = true) {\n return new Promise(((resolve, reject) => {\n connection.query(query, (queryErr: any, queryResult: any) => {\n if (endConnection) connection.end();\n\n if (queryErr) {\n reject(queryErr);\n }\n\n resolve(queryResult);\n });\n }));\n}\n\nexport async function createMySQLDatabase(\n input: DatabaseCreateContextInput = {},\n) {\n const context = await buildDatabaseCreateContext(input);\n const options = buildDriverOptions(context.options);\n const driver = createDriver(context.options) as MysqlDriver;\n\n const connection = await createSimpleMySQLConnection(driver, options);\n /**\n * @link https://github.com/typeorm/typeorm/blob/master/src/driver/mysql/MysqlQueryRunner.ts#L297\n */\n let query = context.ifNotExist ?\n `CREATE DATABASE IF NOT EXISTS \\`${options.database}\\`` :\n `CREATE DATABASE \\`${options.database}\\``;\n\n if (typeof options.charset === 'string') {\n const { charset } = options;\n let { characterSet } = options;\n\n if (typeof characterSet === 'undefined') {\n if (charset.toLowerCase().startsWith('utf8mb4')) {\n characterSet = 'utf8mb4';\n } else if (charset.toLowerCase().startsWith('utf8')) {\n characterSet = 'utf8';\n }\n }\n\n if (typeof characterSet === 'string') {\n query += ` CHARACTER SET ${characterSet} COLLATE ${charset}`;\n }\n }\n\n const result = await executeSimpleMysqlQuery(connection, query);\n\n if (context.synchronize) {\n await synchronizeDatabaseSchema(context.options);\n }\n\n return result;\n}\n\nexport async function dropMySQLDatabase(\n input: DatabaseDropContextInput = {},\n) {\n const context = await buildDatabaseDropContext(input);\n const options = buildDriverOptions(context.options);\n const driver = createDriver(context.options) as MysqlDriver;\n\n const connection = await createSimpleMySQLConnection(driver, options);\n\n /**\n * @link https://github.com/typeorm/typeorm/blob/master/src/driver/mysql/MysqlQueryRunner.ts#L306\n */\n const query = context.ifExist ?\n `DROP DATABASE IF EXISTS \\`${options.database}\\`` :\n `DROP DATABASE \\`${options.database}\\``;\n\n await executeSimpleMysqlQuery(connection, 'SET FOREIGN_KEY_CHECKS=0;', false);\n const result = await executeSimpleMysqlQuery(connection, query, false);\n await executeSimpleMysqlQuery(connection, 'SET FOREIGN_KEY_CHECKS=1;');\n return result;\n}\n","import type { OracleDriver } from 'typeorm/driver/oracle/OracleDriver';\nimport type {\n DatabaseCreateContextInput,\n DatabaseDropContextInput,\n} from '../methods';\nimport type { DriverOptions } from './types';\nimport { buildDriverOptions, createDriver } from './utils';\nimport { buildDatabaseCreateContext, synchronizeDatabaseSchema } from '../utils';\n\nexport function createSimpleOracleConnection(\n driver: OracleDriver,\n options: DriverOptions,\n) {\n const { getConnection } = driver.oracle;\n\n if (!options.connectString) {\n let address = '(PROTOCOL=TCP)';\n\n if (options.host) {\n address += `(HOST=${options.host})`;\n }\n\n if (options.port) {\n address += `(PORT=${options.port})`;\n }\n\n let connectData = '(SERVER=DEDICATED)';\n\n if (options.sid) {\n connectData += `(SID=${options.sid})`;\n }\n\n if (options.serviceName) {\n connectData += `(SERVICE_NAME=${options.serviceName})`;\n }\n\n options.connectString = `(DESCRIPTION=(ADDRESS=${address})(CONNECT_DATA=${connectData}))`;\n }\n\n return getConnection({\n user: options.user,\n password: options.password,\n connectString: options.connectString || options.url,\n ...(options.extra ? options.extra : {}),\n });\n}\n\nexport async function createOracleDatabase(\n input: DatabaseCreateContextInput = {},\n) {\n const context = await buildDatabaseCreateContext(input);\n const options = buildDriverOptions(context.options);\n const driver = createDriver(context.options) as OracleDriver;\n\n const connection = createSimpleOracleConnection(driver, options);\n /**\n * @link https://github.com/typeorm/typeorm/blob/master/src/driver/oracle/OracleQueryRunner.ts#L295\n */\n const query = `CREATE DATABASE IF NOT EXISTS ${options.database}`;\n\n const result = await connection.execute(query);\n\n if (context.synchronize) {\n await synchronizeDatabaseSchema(context.options);\n }\n\n return result;\n}\n\nexport async function dropOracleDatabase(\n _context: DatabaseDropContextInput = {},\n) {\n /**\n * @link https://github.com/typeorm/typeorm/blob/master/src/driver/oracle/OracleQueryRunner.ts#L295\n */\n\n return Promise.resolve();\n}\n","import path from 'node:path';\nimport fs from 'node:fs';\nimport { OptionsError } from '../../errors';\nimport type {\n DatabaseCreateContextInput,\n DatabaseDropContextInput,\n} from '../methods';\nimport { buildDriverOptions } from './utils';\nimport { buildDatabaseCreateContext, buildDatabaseDropContext, synchronizeDatabaseSchema } from '../utils';\n\nexport async function createSQLiteDatabase(\n input: DatabaseCreateContextInput = {},\n) : Promise<void> {\n const context = await buildDatabaseCreateContext(input);\n const options = buildDriverOptions(context.options);\n if (!options.database) {\n throw OptionsError.databaseNotDefined();\n }\n\n const filePath : string = path.isAbsolute(options.database) ?\n options.database :\n path.join(process.cwd(), options.database);\n\n const directoryPath : string = path.dirname(filePath);\n\n await fs.promises.access(directoryPath, fs.constants.W_OK);\n\n if (context.synchronize) {\n await synchronizeDatabaseSchema(context.options);\n }\n}\n\nexport async function dropSQLiteDatabase(\n input: DatabaseDropContextInput = {},\n) {\n const context = await buildDatabaseDropContext(input);\n const options = buildDriverOptions(context.options);\n if (!options.database) {\n throw OptionsError.databaseNotDefined();\n }\n\n const filePath : string = path.isAbsolute(options.database) ?\n options.database :\n path.join(process.cwd(), options.database);\n\n try {\n await fs.promises.access(filePath, fs.constants.F_OK | fs.constants.W_OK);\n if (context.ifExist) {\n await fs.promises.unlink(filePath);\n }\n } catch (e) {\n // ...\n }\n}\n","import { DriverError } from '../../../errors';\nimport type {\n DatabaseCreateContextInput,\n} from '../type';\nimport {\n createCockroachDBDatabase,\n createMongoDBDatabase,\n createMsSQLDatabase,\n createMySQLDatabase,\n createOracleDatabase,\n createPostgresDatabase,\n createSQLiteDatabase,\n} from '../../driver';\nimport { buildDatabaseCreateContext } from '../../utils/context';\n\n/**\n * Create database for specified driver in ConnectionOptions.\n *\n * @throws DriverError\n * @throws OptionsError\n *\n * @param input\n */\nexport async function createDatabase(input: DatabaseCreateContextInput = {}) : Promise<unknown> {\n const context = await buildDatabaseCreateContext(input);\n\n let output : unknown | undefined;\n\n switch (context.options.type) {\n case 'mongodb':\n output = await createMongoDBDatabase(context);\n break;\n case 'mysql':\n case 'mariadb':\n output = await createMySQLDatabase(context);\n break;\n case 'postgres':\n output = await createPostgresDatabase(context);\n break;\n case 'cockroachdb':\n output = await createCockroachDBDatabase(context);\n break;\n case 'sqlite':\n case 'better-sqlite3':\n output = await createSQLiteDatabase(context);\n break;\n case 'oracle':\n output = await createOracleDatabase(context);\n break;\n case 'mssql':\n output = await createMsSQLDatabase(context);\n break;\n default:\n throw DriverError.notSupported(context.options.type);\n }\n\n return output;\n}\n","import { DriverError } from '../../../errors';\nimport type {\n DatabaseDropContextInput,\n} from '../type';\nimport {\n dropCockroachDBDatabase,\n dropMongoDBDatabase,\n dropMsSQLDatabase,\n dropMySQLDatabase,\n dropOracleDatabase,\n dropPostgresDatabase,\n dropSQLiteDatabase,\n} from '../../driver';\nimport { buildDatabaseDropContext } from '../../utils/context';\n\n/**\n * Drop database for specified driver in ConnectionOptions.\n *\n * @throws DriverError\n * @throws OptionsError\n *\n * @param input\n */\nexport async function dropDatabase(input: DatabaseDropContextInput = {}) : Promise<unknown> {\n const context = await buildDatabaseDropContext(input);\n\n let output : unknown | undefined;\n\n switch (context.options.type) {\n case 'mongodb':\n output = await dropMongoDBDatabase(context);\n break;\n case 'mysql':\n case 'mariadb':\n output = await dropMySQLDatabase(context);\n break;\n case 'postgres':\n output = await dropPostgresDatabase(context);\n break;\n case 'cockroachdb':\n output = await dropCockroachDBDatabase(context);\n break;\n case 'sqlite':\n case 'better-sqlite3':\n output = await dropSQLiteDatabase(context);\n break;\n case 'oracle':\n output = await dropOracleDatabase(context);\n break;\n case 'mssql':\n output = await dropMsSQLDatabase(context);\n break;\n default:\n throw DriverError.notSupported(context.options.type);\n }\n\n return output;\n}\n","import { consola } from 'consola';\nimport type { Arguments, Argv, CommandModule } from 'yargs';\nimport { buildDataSourceOptions } from '../../../data-source';\nimport type { DatabaseCreateContextInput } from '../../../database';\nimport { createDatabase } from '../../../database';\nimport {\n adjustFilePath,\n parseFilePath,\n readTSConfig,\n resolveFilePath,\n} from '../../../utils';\nimport type { TSConfig } from '../../../utils';\n\nexport interface DatabaseCreateArguments extends Arguments {\n preserveFilePaths: boolean,\n root: string;\n tsconfig: string,\n dataSource: string;\n synchronize: string;\n initialDatabase?: unknown;\n}\n\nexport class DatabaseCreateCommand implements CommandModule {\n command = 'db:create';\n\n describe = 'Create database.';\n\n builder(args: Argv) {\n return args\n .option('preserveFilePaths', {\n default: false,\n type: 'boolean',\n describe: 'This option indicates if file paths should be preserved.',\n })\n .option('root', {\n alias: 'r',\n default: process.cwd(),\n describe: 'Root directory of the project.',\n })\n .option('tsconfig', {\n alias: 'tc',\n default: 'tsconfig.json',\n describe: 'Name (or relative path incl. name) of the tsconfig file.',\n })\n .option('dataSource', {\n alias: 'd',\n default: 'data-source',\n describe: 'Name (or relative path incl. name) of the data-source file.',\n })\n .option('synchronize', {\n alias: 's',\n default: 'yes',\n describe: 'Create database schema for all entities.',\n choices: ['yes', 'no'],\n })\n .option('initialDatabase', {\n describe: 'Specify the initial database to connect to.',\n });\n }\n\n async handler(raw: Arguments) {\n const args : DatabaseCreateArguments = raw as DatabaseCreateArguments;\n\n let tsconfig : TSConfig | undefined;\n let sourcePath = resolveFilePath(args.dataSource, args.root);\n if (!args.preserveFilePaths) {\n tsconfig = await readTSConfig(resolveFilePath(args.root, args.tsconfig));\n sourcePath = await adjustFilePath(sourcePath, tsconfig);\n }\n\n const source = parseFilePath(sourcePath);\n\n consola.info(`DataSource Directory: ${source.directory}`);\n consola.info(`DataSource Name: ${source.name}`);\n\n const dataSourceOptions = await buildDataSourceOptions({\n directory: source.directory,\n dataSourceName: source.name,\n tsconfig,\n preserveFilePaths: args.preserveFilePaths,\n });\n\n const context : DatabaseCreateContextInput = {\n ifNotExist: true,\n options: dataSourceOptions,\n synchronize: args.synchronize === 'yes',\n };\n\n if (\n typeof args.initialDatabase === 'string' &&\n args.initialDatabase !== ''\n ) {\n context.initialDatabase = args.initialDatabase;\n }\n\n try {\n await createDatabase(context);\n consola.success('Created database.');\n process.exit(0);\n } catch (e) {\n consola.warn('Failed to create database.');\n consola.error(e);\n process.exit(1);\n }\n }\n}\n","import { consola } from 'consola';\nimport type { Arguments, Argv, CommandModule } from 'yargs';\nimport { buildDataSourceOptions } from '../../../data-source';\nimport type { DatabaseDropContext } from '../../../database';\nimport { dropDatabase } from '../../../database';\nimport {\n adjustFilePath,\n parseFilePath,\n readTSConfig,\n resolveFilePath,\n} from '../../../utils';\nimport type { TSConfig } from '../../../utils';\n\nexport interface DatabaseDropArguments extends Arguments {\n preserveFilePaths: boolean,\n root: string;\n tsconfig: string,\n dataSource: string;\n}\n\nexport class DatabaseDropCommand implements CommandModule {\n command = 'db:drop';\n\n describe = 'Drop database.';\n\n builder(args: Argv) {\n return args\n .option('preserveFilePaths', {\n default: false,\n type: 'boolean',\n describe: 'This option indicates if file paths should be preserved.',\n })\n .option('root', {\n alias: 'r',\n default: process.cwd(),\n describe: 'Root directory of the project.',\n })\n .option('tsconfig', {\n alias: 'tc',\n default: 'tsconfig.json',\n describe: 'Name (or relative path incl. name) of the tsconfig file.',\n })\n .option('dataSource', {\n alias: 'd',\n default: 'data-source',\n describe: 'Name (or relative path incl. name) of the data-source file.',\n })\n .option('initialDatabase', {\n describe: 'Specify the initial database to connect to.',\n });\n }\n\n async handler(raw: Arguments) {\n const args : DatabaseDropArguments = raw as DatabaseDropArguments;\n\n let tsconfig : TSConfig | undefined;\n let sourcePath = resolveFilePath(args.dataSource, args.root);\n if (!args.preserveFilePaths) {\n tsconfig = await readTSConfig(resolveFilePath(args.root, args.tsconfig));\n sourcePath = await adjustFilePath(sourcePath, tsconfig);\n }\n\n const source = parseFilePath(sourcePath);\n\n consola.info(`DataSource Directory: ${source.directory}`);\n consola.info(`DataSource Name: ${source.name}`);\n\n const dataSourceOptions = await buildDataSourceOptions({\n directory: source.directory,\n dataSourceName: source.name,\n tsconfig,\n preserveFilePaths: args.preserveFilePaths,\n });\n\n const context : DatabaseDropContext = {\n ifExist: true,\n options: dataSourceOptions,\n };\n\n if (\n typeof args.initialDatabase === 'string' &&\n args.initialDatabase !== ''\n ) {\n context.initialDatabase = args.initialDatabase;\n }\n\n try {\n await dropDatabase(context);\n consola.success('Dropped database.');\n process.exit(0);\n } catch (e) {\n consola.warn('Failed to drop database.');\n consola.error(e);\n process.exit(1);\n }\n }\n}\n","import type { Seeder, SeederConstructor } from './type';\n\nexport class SeederEntity {\n /**\n * ID of the seeder.\n *\n * Indicates order of the executed seeders.\n */\n id?: number;\n\n /**\n * Timestamp of the seeder.\n */\n timestamp: number;\n\n /**\n * Name of the seeder (class name).\n */\n name: string;\n\n /**\n * Instance of seeder constructor.\n */\n instance?: Seeder;\n\n /**\n * File name of the seeder.\n */\n fileName?: string;\n\n /**\n * File path of the seeder.\n */\n filePath?: string;\n\n /**\n * Result of the executed seeder.\n */\n result?: unknown;\n\n constructor(ctx: {\n id?: number,\n timestamp: number,\n name: string,\n constructor?: SeederConstructor,\n fileName?: string,\n filePath?: string\n }) {\n this.id = ctx.id;\n this.timestamp = ctx.timestamp;\n this.name = ctx.name;\n\n if (ctx.constructor) {\n this.instance = new ctx.constructor();\n }\n\n this.fileName = ctx.fileName;\n this.filePath = ctx.filePath;\n }\n\n get trackExecution() : boolean | undefined {\n if (typeof this.instance === 'undefined') {\n return undefined;\n }\n\n return this.instance.track;\n }\n}\n","import type { Faker, FakerOptions, LocaleDefinition } from '@faker-js/faker';\nimport { isObject, load } from 'locter';\nimport type { SaveOptions } from 'typeorm';\nimport { useDataSource } from '../../data-source';\nimport { hasOwnProperty, isPromise } from '../../utils';\nimport type { SeederFactoryContext } from './type';\n\nexport class SeederFactory<O extends Record<string, any>, Meta = unknown> {\n public readonly context: SeederFactoryContext<O, Meta>;\n\n public meta: Meta | undefined;\n\n protected faker : Faker | undefined;\n\n protected locale : string[] | undefined;\n\n // --------------------------------------------------------------\n\n constructor(context: SeederFactoryContext<O, Meta>) {\n this.context = context;\n }\n\n // --------------------------------------------------------------\n\n public setMeta(value: Meta) {\n this.meta = value;\n\n return this;\n }\n\n public setLocale(value: string | string[]) {\n this.faker = undefined;\n\n this.locale = Array.isArray(value) ?\n value :\n [value];\n }\n\n // --------------------------------------------------------------\n\n public async make(params?: Partial<O>, save?: boolean) {\n const faker = await this.useFaker();\n const factoryFn = this.context.factoryFn(faker, this.meta);\n let entity : O;\n if (isPromise(factoryFn)) {\n entity = await this.resolve(await factoryFn, save);\n } else {\n entity = await this.resolve(factoryFn, save);\n }\n\n if (params) {\n const keys : (keyof O)[] = Object.keys(params);\n for (let i = 0; i < keys.length; i++) {\n entity[keys[i]] = (params as O)[keys[i]];\n }\n }\n\n return entity;\n }\n\n // --------------------------------------------------------------\n\n public async save(\n params?: Partial<O>,\n options?: SaveOptions,\n ) : Promise<O> {\n const dataSource = await useDataSource();\n\n const entity = await this.make(params, true);\n const entityManager = dataSource.getRepository(this.context.entity);\n\n return entityManager.save(entity, options);\n }\n\n public async saveMany(\n amount: number,\n params?: Partial<O>,\n options?: SaveOptions,\n ) : Promise<O[]> {\n const promises : Promise<O>[] = [];\n for (let i = 0; i < amount; i++) {\n const item = this.save(params, options);\n promises.push(item);\n }\n\n return Promise.all(promises);\n }\n\n // --------------------------------------------------------------\n\n private async resolve(entity: O, save?: boolean) : Promise<O> {\n const keys = Object.keys(entity);\n for (let i = 0; i < keys.length; i++) {\n const key : keyof O = keys[i];\n const value : O[keyof O] = entity[key];\n\n if (!hasOwnProperty(entity, key)) {\n // eslint-disable-next-line no-continue\n continue;\n }\n\n if (\n typeof value === 'object' &&\n // eslint-disable-next-line @typescript-eslint/ban-ts-comment\n // @ts-ignore\n value instanceof SeederFactory\n ) {\n if (save) {\n entity[key] = await (value as SeederFactory<any>).save();\n } else {\n entity[key] = await (value as SeederFactory<any>).make();\n }\n }\n\n if (\n value &&\n hasOwnProperty(value, 'then') &&\n typeof value.then === 'function'\n ) {\n entity[key] = await value;\n }\n }\n\n return entity;\n }\n\n protected async useFaker() : Promise<Faker> {\n if (typeof this.faker !== 'undefined') {\n return this.faker;\n }\n\n const options : FakerOptions = {\n locale: [],\n };\n\n const fakerExports = await load('@faker-js/faker');\n\n let names : string[];\n if (this.locale) {\n names = Array.isArray(this.locale) ?\n this.locale :\n [this.locale];\n } else {\n names = ['en'];\n }\n\n for (let i = 0; i < names.length; i++) {\n if (\n hasOwnProperty(fakerExports, 'default') &&\n isObject(fakerExports.default) &&\n hasOwnProperty(fakerExports.default, names[i])\n ) {\n (options.locale as LocaleDefinition[]).push(fakerExports.default[names[i]] as LocaleDefinition);\n continue;\n }\n\n if (hasOwnProperty(fakerExports, names[i])) {\n (options.locale as LocaleDefinition[]).push(fakerExports[names[i]] as LocaleDefinition);\n }\n }\n\n this.faker = new fakerExports.Faker(options);\n\n return this.faker!;\n }\n}\n","import type { EntitySchema, ObjectType } from 'typeorm';\nimport type { FactoryCallback, SeederFactoryItem } from './type';\nimport { getEntityName, hasOwnProperty } from '../../utils';\nimport { SeederFactory } from './module';\n\nexport class SeederFactoryManager {\n public readonly items : Record<string, SeederFactoryItem> = {};\n\n set<O extends Record<string, any>, Meta = unknown>(\n entity: ObjectType<O> | EntitySchema<O>,\n factoryFn: FactoryCallback<O, Meta>,\n ) : SeederFactoryItem {\n const name = getEntityName(entity);\n\n this.items[name] = {\n factoryFn,\n entity,\n };\n\n return this.items[name];\n }\n\n get<O extends Record<string, any>, Meta = unknown>(\n entity: ObjectType<O> | EntitySchema<O>,\n ) : SeederFactory<O, Meta> {\n const name = getEntityName(entity);\n\n if (!hasOwnProperty(this.items, name)) {\n throw new Error(`No seeder factory is registered for the entity: ${name}`);\n }\n\n return new SeederFactory({\n factoryFn: this.items[name].factoryFn,\n entity,\n name,\n });\n }\n}\n","/* istanbul ignore next */\nimport type { LocatorInfo } from 'locter';\nimport { locateMany } from 'locter';\nimport path from 'node:path';\n\nexport async function resolveFilePatterns(\n filesPattern: string[],\n root?: string,\n) : Promise<string[]> {\n return locateMany(\n filesPattern,\n {\n ...(root ? { path: root } : {}),\n ignore: ['**/*.d.ts'],\n },\n ).then(buildFilePathname);\n}\n\nexport function resolveFilePaths(\n filePaths: string[],\n root?: string,\n) {\n return filePaths.map((filePath) => (\n path.isAbsolute(filePath) ?\n filePath :\n path.resolve(root || process.cwd(), filePath)\n ));\n}\n\n/**\n * Exported only for testing purposes\n */\nexport function buildFilePathname(files: LocatorInfo[]) {\n return (\n // sorting by name so that we can define the order of execution using file names\n files.sort((a, b) => (a.name > b.name ? 1 : -1)).map((el) => path.join(el.path, el.name + el.extension))\n );\n}\n","import { load } from 'locter';\nimport path from 'node:path';\nimport type { SeederConstructor, SeederPrepareElement } from '../type';\nimport { resolveFilePaths, resolveFilePatterns } from './file-path';\n\nexport async function prepareSeederSeeds(\n input: SeederConstructor[] | string[],\n root?: string,\n): Promise<SeederPrepareElement[]> {\n const items: SeederPrepareElement[] = [];\n\n let seedFiles: string[] = [];\n const seedConstructors: SeederConstructor[] = [];\n\n for (let i = 0; i < input.length; i++) {\n const value = input[i];\n if (typeof value === 'string') {\n seedFiles.push(value);\n } else {\n seedConstructors.push(value);\n }\n }\n\n if (seedFiles.length > 0) {\n seedFiles = await resolveFilePatterns(seedFiles, root);\n seedFiles = resolveFilePaths(seedFiles, root);\n\n for (let i = 0; i < seedFiles.length; i++) {\n const moduleExports = await load(seedFiles[i]);\n\n let clazzConstructor : SeederConstructor | undefined;\n\n const exportKeys = Object.keys(moduleExports);\n for (let j = 0; j < exportKeys.length; j++) {\n const moduleExport = moduleExports[exportKeys[j]];\n if (\n typeof moduleExport === 'function' &&\n moduleExport.prototype\n ) {\n clazzConstructor = moduleExport;\n }\n }\n\n if (clazzConstructor) {\n const fileName = path.basename(seedFiles[i]);\n const filePath = seedFiles[i];\n const match = fileName.match(/^([0-9]{13,})-(.*)$/);\n\n let timestamp : number | undefined;\n if (match) {\n timestamp = parseInt(match[1], 10);\n }\n\n items.push({\n constructor: clazzConstructor,\n fileName,\n filePath,\n ...(timestamp ? { timestamp } : {}),\n });\n }\n }\n }\n\n if (seedConstructors.length > 0) {\n for (let i = 0; i < seedConstructors.length; i++) {\n items.push({\n constructor: seedConstructors[i],\n });\n }\n }\n\n return items;\n}\n","import { pascalCase } from 'pascal-case';\n\nexport function buildSeederFileTemplate(\n name: string,\n timestamp: number,\n): string {\n const className = `${pascalCase(name)}${timestamp}`;\n\n return `import { DataSource } from 'typeorm';\nimport { Seeder, SeederFactoryManager } from 'typeorm-extension';\n\nexport class ${className} implements Seeder {\n track = false;\n\n public async run(\n dataSource: DataSource,\n factoryManager: SeederFactoryManager\n ): Promise<any> {\n\n }\n}\n`;\n}\n","import { load } from 'locter';\nimport type { EntitySchema, ObjectType } from 'typeorm';\nimport { resolveFilePaths, resolveFilePatterns } from '../utils';\nimport { SeederFactoryManager } from './manager';\nimport type { FactoryCallback, SeederFactoryItem } from './type';\n\nlet instance : SeederFactoryManager | undefined;\n\nexport function useSeederFactoryManager() {\n if (typeof instance !== 'undefined') {\n return instance;\n }\n\n instance = new SeederFactoryManager();\n\n return instance;\n}\n\nexport function setSeederFactory<O extends Record<string, any>, Meta = unknown>(\n entity: ObjectType<O> | EntitySchema<O>,\n factoryFn: FactoryCallback<O, Meta>,\n) : SeederFactoryItem {\n const manager = useSeederFactoryManager();\n return manager.set(entity, factoryFn);\n}\n\nexport function useSeederFactory<O extends Record<string, any>>(\n entity: ObjectType<O> | EntitySchema<O>,\n) {\n const manager = useSeederFactoryManager();\n return manager.get(entity);\n}\n\nexport async function prepareSeederFactories(\n items: SeederFactoryItem[] | string[],\n root?: string,\n) {\n let factoryFiles: string[] = [];\n const factoryConfigs: SeederFactoryItem[] = [];\n\n for (let i = 0; i < items.length; i++) {\n const value = items[i];\n if (typeof value === 'string') {\n factoryFiles.push(value);\n } else {\n factoryConfigs.push(value);\n }\n }\n\n if (factoryFiles.length > 0) {\n factoryFiles = await resolveFilePatterns(factoryFiles, root);\n factoryFiles = resolveFilePaths(factoryFiles, root);\n\n for (let i = 0; i < factoryFiles.length; i++) {\n await load(factoryFiles[i]);\n }\n }\n\n if (factoryConfigs.length > 0) {\n const factoryManager = useSeederFactoryManager();\n\n for (let i = 0; i < factoryConfigs.length; i++) {\n factoryManager.set(\n factoryConfigs[i].entity,\n factoryConfigs[i].factoryFn,\n );\n }\n }\n}\n","import { isObject } from 'locter';\nimport type { ObjectLiteral } from 'rapiq';\nimport { MssqlParameter, Table } from 'typeorm';\nimport type { DataSource, DataSourceOptions, QueryRunner } from 'typeorm';\nimport type { MongoQueryRunner } from 'typeorm/driver/mongodb/MongoQueryRunner';\nimport { setDataSource } from '../data-source';\nimport { useEnv } from '../env';\nimport { adjustFilePaths, readTSConfig, resolveFilePath } from '../utils';\nimport type { TSConfig } from '../utils';\nimport { SeederEntity } from './entity';\nimport { prepareSeederFactories, useSeederFactoryManager } from './factory';\nimport type { SeederExecutorOptions, SeederOptions, SeederPrepareElement } from './type';\nimport { prepareSeederSeeds } from './utils';\n\nexport class SeederExecutor {\n protected dataSource : DataSource;\n\n protected options : SeederExecutorOptions;\n\n private readonly tableName: string;\n\n constructor(dataSource: DataSource, options?: SeederExecutorOptions) {\n this.dataSource = dataSource;\n this.options = options || {};\n\n setDataSource(dataSource);\n\n this.tableName = this.dataSourceOptions.seedTableName || 'seeds';\n }\n\n async execute(input: SeederOptions = {}) : Promise<SeederEntity[]> {\n const options = await this.buildOptions(input);\n if (!options.seeds || options.seeds.length === 0) {\n return [];\n }\n\n if (options.factories) {\n await prepareSeederFactories(options.factories, this.options.root);\n }\n\n const seederElements = await prepareSeederSeeds(\n options.seeds,\n this.options.root,\n );\n const all = await this.buildEntities(seederElements);\n\n let tracking = !!options.seedTracking;\n if (!tracking) {\n tracking = all.some((seed) => !!seed.trackExecution);\n }\n\n let queryRunner : QueryRunner | undefined;\n let existing : SeederEntity[] = [];\n\n if (tracking) {\n queryRunner = this.dataSource.createQueryRunner();\n await this.createTableIfNotExist(queryRunner);\n existing = await this.loadExisting(queryRunner);\n }\n\n const isMatch = (seed: SeederEntity) : boolean => {\n if (!options.seedName) {\n return true;\n }\n\n if (\n seed.name === options.seedName ||\n seed.fileName === options.seedName\n ) {\n return true;\n }\n\n if (!seed.filePath) {\n return false;\n }\n\n if (seed.filePath === options.seedName) {\n return true;\n }\n\n return resolveFilePath(options.seedName, this.options.root) === seed.filePath;\n };\n\n const pending = all.filter((seed) => {\n if (!isMatch(seed)) {\n return false;\n }\n\n const index = existing.findIndex(\n (el) => el.name === seed.name,\n );\n\n if (index === -1) {\n return true;\n }\n\n let seedTracking : boolean | undefined;\n if (typeof seed.trackExecution !== 'undefined') {\n seedTracking = seed.trackExecution;\n } else {\n seedTracking = options.seedTracking;\n }\n\n return !seedTracking;\n });\n\n if (pending.length === 0) {\n if (queryRunner) {\n await queryRunner.release();\n }\n\n return [];\n }\n\n this.dataSource.logger.logSchemaBuild(\n `${existing.length} seeds are already present in the database.`,\n );\n this.dataSource.logger.logSchemaBuild(\n `${all.length} seeds were found in the source code.`,\n );\n\n const factoryManager = useSeederFactoryManager();\n\n const executed : SeederEntity[] = [];\n\n try {\n for (let i = 0; i < pending.length; i++) {\n const seeder = pending[i].instance;\n if (!seeder) {\n continue;\n }\n\n pending[i].result = await seeder.run(this.dataSource, factoryManager);\n\n let seedTracking : boolean | undefined;\n if (typeof pending[i].trackExecution !== 'undefined') {\n seedTracking = pending[i].trackExecution;\n } else {\n seedTracking = options.seedTracking;\n }\n\n if (queryRunner && seedTracking) {\n await this.track(queryRunner, pending[i]);\n }\n\n this.dataSource.logger.logSchemaBuild(\n `Seed ${pending[i].name} has been executed successfully.`,\n );\n\n executed.push(pending[i]);\n }\n } finally {\n if (queryRunner) {\n await queryRunner.release();\n }\n }\n\n return executed;\n }\n\n protected async loadExisting(queryRunner: QueryRunner) : Promise<SeederEntity[]> {\n if (this.dataSource.driver.options.type === 'mongodb') {\n const mongoRunner = queryRunner as MongoQueryRunner;\n\n return mongoRunner\n .cursor(this.tableName, {})\n .sort({ _id: -1 })\n .toArray();\n }\n\n const raw: ObjectLiteral[] = await this.dataSource.manager\n .createQueryBuilder(queryRunner)\n .select()\n .orderBy(this.dataSource.driver.escape('id'), 'DESC')\n .from(this.table, this.tableName)\n .getRawMany();\n\n return raw.map((migrationRaw) => new SeederEntity({\n id: parseInt(migrationRaw.id, 10),\n timestamp: parseInt(migrationRaw.timestamp, 10),\n name: migrationRaw.name,\n constructor: undefined,\n }));\n }\n\n /**\n * Gets all migrations that setup for this connection.\n */\n protected async buildEntities(seeds?: SeederPrepareElement[]): Promise<SeederEntity[]> {\n if (!seeds) {\n return [];\n }\n\n let timestampCounter = 0;\n const entities = seeds.map((element) => {\n const {\n constructor: seed,\n fileName,\n filePath,\n } = element;\n\n let {\n timestamp,\n } = element;\n\n const className = seed.name || (seed.constructor as any).name;\n\n if (!timestamp) {\n timestamp = this.classNameToTimestamp(className);\n }\n\n const entity = new SeederEntity({\n fileName,\n filePath,\n timestamp: timestamp || timestampCounter,\n name: className,\n constructor: seed,\n });\n\n timestampCounter++;\n\n return entity;\n });\n\n this.checkForDuplicates(entities);\n\n // sort them by file name than by timestamp\n return entities.sort((a, b) => {\n if (\n typeof a.fileName !== 'undefined' &&\n typeof b.fileName !== 'undefined'\n ) {\n return a.fileName > b.fileName ? 1 : -1;\n }\n\n return a.timestamp - b.timestamp;\n });\n }\n\n protected checkForDuplicates(entities: SeederEntity[]) {\n const names = entities.map((migration) => migration.name);\n const duplicates = Array.from(\n new Set(\n names.filter(\n (migrationName, index) => names.indexOf(migrationName) < index,\n ),\n ),\n );\n if (duplicates.length > 0) {\n throw Error(`Duplicate seeds: ${duplicates.join(', ')}`);\n }\n }\n\n protected async createTableIfNotExist(queryRunner: QueryRunner) {\n // If driver is mongo no need to create\n if (this.dataSource.driver.options.type === 'mongodb') {\n return;\n }\n const tableExist = await queryRunner.hasTable(this.table);\n if (!tableExist) {\n await queryRunner.createTable(\n new Table({\n database: this.database,\n schema: this.schema,\n name: this.table,\n columns: [\n {\n name: 'id',\n type: this.dataSource.driver.normalizeType({\n type: this.dataSource.driver.mappedDataTypes\n .migrationId,\n }),\n isGenerated: true,\n generationStrategy: 'increment',\n isPrimary: true,\n isNullable: false,\n },\n {\n name: 'timestamp',\n type: this.dataSource.driver.normalizeType({\n type: this.dataSource.driver.mappedDataTypes\n .migrationTimestamp,\n }),\n isPrimary: false,\n isNullable: false,\n },\n {\n name: 'name',\n type: this.dataSource.driver.normalizeType({\n type: this.dataSource.driver.mappedDataTypes\n .migrationName,\n }),\n isNullable: false,\n },\n ],\n }),\n );\n }\n }\n\n protected async track(\n queryRunner: QueryRunner,\n seederEntity: SeederEntity,\n ): Promise<void> {\n const values: ObjectLiteral = {};\n if (this.dataSource.driver.options.type === 'mssql') {\n values.timestamp = new MssqlParameter(\n seederEntity.timestamp,\n this.dataSource.driver.normalizeType({\n type: this.dataSource.driver.mappedDataTypes\n .migrationTimestamp,\n }) as any,\n );\n values.name = new MssqlParameter(\n seederEntity.name,\n this.dataSource.driver.normalizeType({\n type: this.dataSource.driver.mappedDataTypes.migrationName,\n }) as any,\n );\n } else {\n values.timestamp = seederEntity.timestamp;\n values.name = seederEntity.name;\n }\n\n if (this.dataSource.driver.options.type === 'mongodb') {\n const mongoRunner = queryRunner as MongoQueryRunner;\n await mongoRunner.databaseConnection\n .db(this.dataSource.driver.database)\n .collection(this.tableName)\n .insertOne(values);\n } else {\n const qb = queryRunner.manager.createQueryBuilder();\n await qb\n .insert()\n .into(this.table)\n .values(values)\n .execute();\n }\n }\n\n protected get dataSourceOptions() : DataSourceOptions & SeederOptions {\n return this.dataSource.options;\n }\n\n protected get database() {\n return this.dataSource.driver.database;\n }\n\n protected get schema() {\n return this.dataSource.driver.schema;\n }\n\n protected get table() {\n return this.dataSource.driver.buildTableName(\n this.tableName,\n this.schema,\n this.database,\n );\n }\n\n protected async buildOptions(input: SeederOptions = {}) {\n const options : SeederOptions = {\n ...input,\n seeds: input.seeds || [],\n factories: input.factories || [],\n seedTracking: input.seedTracking ?? false,\n };\n\n if (!options.seeds || options.seeds.length === 0) {\n options.seeds = this.dataSourceOptions.seeds;\n }\n\n if (!options.seeds || options.seeds.length === 0) {\n options.seeds = useEnv('seeds');\n }\n\n if (!options.seeds || options.seeds.length === 0) {\n options.seeds = ['src/database/seeds/**/*{.ts,.js}'];\n }\n\n if (!options.factories || options.factories.length === 0) {\n options.factories = this.dataSourceOptions.factories;\n }\n\n if (!options.factories || options.factories.length === 0) {\n options.factories = useEnv('factories');\n }\n\n if (!options.factories || options.factories.length === 0) {\n options.factories = ['src/database/factories/**/*{.ts,.js}'];\n }\n\n if (typeof options.seedTracking === 'undefined') {\n options.seedTracking = this.dataSourceOptions.seedTracking;\n }\n\n if (!this.options.preserveFilePaths) {\n let tsConfig : TSConfig;\n\n if (isObject(this.options.tsconfig)) {\n tsConfig = this.options.tsconfig;\n } else {\n tsConfig = await readTSConfig(\n resolveFilePath(this.options.tsconfig || 'tsconfig.json', this.options.root),\n );\n }\n\n await adjustFilePaths(\n options,\n [\n 'seeds',\n 'seedName',\n 'factories',\n ],\n tsConfig,\n );\n }\n\n return options;\n }\n\n protected classNameToTimestamp(className: string) {\n const match = className.match(/^(.*)([0-9]{13,})$/);\n if (match) {\n return parseInt(match[2], 10);\n }\n\n return undefined;\n }\n}\n","import type { DataSource } from 'typeorm';\nimport type { SeederEntity } from './entity';\nimport { SeederExecutor } from './executor';\nimport type { SeederConstructor, SeederOptions } from './type';\n\nexport async function runSeeder(\n dataSource: DataSource,\n seeder: SeederConstructor | string,\n options: SeederOptions = {},\n) : Promise<SeederEntity | undefined> {\n if (typeof seeder === 'string') {\n options.seedName = seeder;\n } else {\n options.seeds = [seeder];\n }\n\n const executor = new SeederExecutor(dataSource);\n const output = await executor.execute(options);\n\n return output.pop();\n}\n\nexport async function runSeeders(\n dataSource: DataSource,\n options?: SeederOptions,\n) : Promise<SeederEntity[]> {\n const executor = new SeederExecutor(dataSource);\n return executor.execute(options);\n}\n","import { getFileNameExtension, removeFileNameExtension } from 'locter';\nimport fs from 'node:fs';\nimport path from 'node:path';\nimport { pascalCase } from 'pascal-case';\nimport type { Arguments, Argv, CommandModule } from 'yargs';\nimport { consola } from 'consola';\nimport { buildSeederFileTemplate } from '../../../seeder';\nimport { isDirectory, parseFilePath } from '../../../utils';\n\nexport interface SeedCreateArguments extends Arguments {\n root: string;\n javascript: boolean;\n timestamp?: number,\n name: string\n}\n\nexport class SeedCreateCommand implements CommandModule {\n command = 'seed:create';\n\n describe = 'Create a seeder file.';\n\n builder(args: Argv) {\n return args\n .option('root', {\n alias: 'r',\n default: process.cwd(),\n describe: 'Root directory of the project.',\n })\n .option('timestamp', {\n alias: 't',\n type: 'number',\n describe: 'Custom timestamp for the seeder name.',\n })\n .option('javascript', {\n alias: 'j',\n type: 'boolean',\n default: false,\n describe: 'Generate a seeder file for JavaScript instead of TypeScript.',\n })\n .option('name', {\n alias: 'n',\n describe: 'Name (or relative path incl. name) of the seeder.',\n demandOption: true,\n });\n }\n\n async handler(raw: Arguments) {\n const args = raw as SeedCreateArguments;\n\n let timestamp : number;\n if (Number.isNaN(args.timestamp) || !args.timestamp) {\n timestamp = Date.now();\n } else {\n timestamp = args.timestamp;\n }\n\n const sourcePath = parseFilePath(args.name, args.root);\n\n const dirNameIsDirectory = await isDirectory(sourcePath.directory);\n if (!dirNameIsDirectory) {\n consola.warn(`The output directory ${sourcePath.directory} does not exist.`);\n process.exit(1);\n }\n\n const extension = args.javascript ?\n '.js' :\n '.ts';\n\n const nameExtension = getFileNameExtension(sourcePath.name);\n const nameWithoutExtension = removeFileNameExtension(sourcePath.name);\n\n let fileName: string;\n if (nameExtension) {\n fileName = `${timestamp}-${sourcePath.name}`;\n } else {\n fileName = `${timestamp}-${sourcePath.name}${extension}`;\n }\n const filePath = sourcePath.directory + path.sep + fileName;\n const template = buildSeederFileTemplate(nameWithoutExtension, timestamp);\n\n consola.info(`Seed Directory: ${sourcePath.directory}`);\n consola.info(`Seed FileName: ${fileName}`);\n consola.info(`Seed Name: ${pascalCase(nameWithoutExtension)}`);\n\n try {\n await fs.promises.writeFile(filePath, template, { encoding: 'utf-8' });\n } catch (e) {\n consola.warn(`The seed could not be written to the path ${filePath}.`);\n process.exit(1);\n }\n\n process.exit(0);\n }\n}\n","import { consola } from 'consola';\nimport type { Arguments, Argv, CommandModule } from 'yargs';\nimport { buildDataSourceOptions, setDataSourceOptions, useDataSource } from '../../../data-source';\nimport { SeederExecutor } from '../../../seeder';\nimport {\n adjustFilePath,\n parseFilePath,\n readTSConfig,\n resolveFilePath,\n} from '../../../utils';\nimport type { TSConfig } from '../../../utils';\n\nexport interface SeedRunArguments extends Arguments {\n preserveFilePaths: boolean,\n root: string;\n tsconfig: string,\n dataSource: string;\n name?: string,\n}\n\nexport class SeedRunCommand implements CommandModule {\n command = 'seed:run';\n\n describe = 'Populate the database with an initial data set or generated data by a factory.';\n\n builder(args: Argv) {\n return args\n .option('preserveFilePaths', {\n default: false,\n type: 'boolean',\n describe: 'This option indicates if file paths should be preserved.',\n })\n .option('root', {\n alias: 'r',\n default: process.cwd(),\n describe: 'Root directory of the project.',\n })\n .option('tsconfig', {\n alias: 'tc',\n default: 'tsconfig.json',\n describe: 'Name (or relative path incl. name) of the tsconfig file.',\n })\n .option('dataSource', {\n alias: 'd',\n default: 'data-source',\n describe: 'Name (or relative path incl. name) of the data-source file.',\n })\n .option('name', {\n alias: 'n',\n describe: 'Name (or relative path incl. name) of the seeder.',\n });\n }\n\n async handler(raw: Arguments) {\n const args = raw as SeedRunArguments;\n\n let tsconfig : TSConfig | undefined;\n let sourcePath = resolveFilePath(args.dataSource, args.root);\n if (!args.preserveFilePaths) {\n tsconfig = await readTSConfig(args.root);\n sourcePath = await adjustFilePath(sourcePath, tsconfig);\n args.name = await adjustFilePath(args.name, tsconfig);\n }\n\n const source = parseFilePath(sourcePath);\n\n consola.info(`DataSource Directory: ${source.directory}`);\n consola.info(`DataSource Name: ${source.name}`);\n\n const dataSourceOptions = await buildDataSourceOptions({\n dataSourceName: source.name,\n directory: source.directory,\n tsconfig,\n preserveFilePaths: args.preserveFilePaths,\n });\n\n setDataSourceOptions(dataSourceOptions);\n\n if (args.name) {\n consola.info(`Seed Name: ${args.name}`);\n }\n\n const dataSource = await useDataSource();\n const executor = new SeederExecutor(dataSource, {\n root: args.root,\n tsconfig,\n preserveFilePaths: args.preserveFilePaths,\n });\n\n await executor.execute({ seedName: args.name });\n\n process.exit(0);\n }\n}\n","import { TypeormExtensionError } from '../../errors';\n\ntype TypeormRelationLookupErrorOptions = {\n message: string,\n relation: string,\n columns: string[]\n};\n\nexport class EntityRelationLookupError extends TypeormExtensionError {\n /**\n * The property name of the relation.\n */\n public relation: string;\n\n /**\n * The property names of the join columns.\n */\n public columns: string[];\n\n constructor(options: TypeormRelationLookupErrorOptions) {\n super(options.message);\n\n this.relation = options.relation;\n this.columns = options.columns;\n }\n\n static notReferenced(relation: string, columns: string[]) {\n return new EntityRelationLookupError({\n message: `${relation} entity is not referenced by ${columns.join(', ')}`,\n relation,\n columns,\n });\n }\n\n static notFound(relation: string, columns: string[]) {\n return new EntityRelationLookupError({\n message: `Can't find ${relation} entity by ${columns.join(', ')}`,\n relation,\n columns,\n });\n }\n}\n","import { Repository } from 'typeorm';\nimport type {\n DataSource, EntityMetadata, EntityTarget,\n ObjectLiteral,\n} from 'typeorm';\nimport { useDataSource } from '../../data-source';\n\n/**\n * Receive metadata for a given repository or entity-target.\n *\n * @experimental\n * @param input\n * @param dataSource\n */\nexport async function getEntityMetadata<T extends ObjectLiteral>(\n input: Repository<T> | EntityTarget<T>,\n dataSource?: DataSource,\n): Promise<EntityMetadata> {\n if (input instanceof Repository) {\n return input.metadata;\n }\n\n dataSource = dataSource || await useDataSource();\n\n const index = dataSource.entityMetadatas.findIndex(\n (entityMetadata) => entityMetadata.target === input,\n );\n\n if (index === -1) {\n throw new Error(`The entity ${input} is not registered.`);\n }\n\n return dataSource.entityMetadatas[index];\n}\n","import type { ObjectLiteral } from 'rapiq';\nimport { Repository } from 'typeorm';\nimport type { DataSource, EntityMetadata, EntityTarget } from 'typeorm';\nimport { getEntityMetadata } from './metadata';\n\n/**\n * Get (relation-) property names of a given entity.\n *\n * @experimental\n * @param input\n * @param dataSource\n */\nexport async function getEntityPropertyNames<T extends ObjectLiteral>(\n input: EntityTarget<T> | Repository<T>,\n dataSource?: DataSource,\n) : Promise<string[]> {\n let entityMetadata : EntityMetadata;\n if (input instanceof Repository) {\n entityMetadata = input.metadata;\n } else {\n entityMetadata = await getEntityMetadata(input, dataSource);\n }\n\n const items : string[] = [];\n\n for (let i = 0; i < entityMetadata.columns.length; i++) {\n items.push(entityMetadata.columns[i].propertyName);\n }\n\n for (let i = 0; i < entityMetadata.relations.length; i++) {\n items.push(entityMetadata.relations[i].propertyName);\n }\n\n return items;\n}\n","import type { ObjectLiteral } from 'rapiq';\nimport type { DataSource, EntityTarget, FindOptionsWhere } from 'typeorm';\nimport { useDataSource } from '../../data-source';\nimport { EntityRelationLookupError } from './error';\nimport { getEntityMetadata } from './metadata';\n\ntype EntityRelationColumnsValidateOptions<T> = {\n dataSource?: DataSource,\n entityTarget: EntityTarget<T>,\n};\n\n/**\n * Validate join columns of a given entity.\n * It will look up and append the referenced entities to the input entity.\n *\n * @experimental\n * @param entity\n * @param options\n */\nexport async function validateEntityJoinColumns<T extends ObjectLiteral>(\n entity: Partial<T>,\n options: EntityRelationColumnsValidateOptions<T>,\n) {\n const dataSource = options.dataSource || await useDataSource();\n const entityMetadata = await getEntityMetadata(options.entityTarget, dataSource);\n\n const relations : Partial<T> = {};\n for (let i = 0; i < entityMetadata.relations.length; i++) {\n const relation = entityMetadata.relations[i];\n\n let skipRelation : boolean = false;\n\n const where : FindOptionsWhere<ObjectLiteral> = {};\n const columns : string[] = [];\n for (let j = 0; j < relation.joinColumns.length; j++) {\n const joinColumn = relation.joinColumns[j];\n if (typeof entity[joinColumn.propertyName] === 'undefined') {\n continue;\n }\n\n if (\n joinColumn.isNullable &&\n entity[joinColumn.propertyName] === null\n ) {\n skipRelation = true;\n break;\n }\n\n if (joinColumn.referencedColumn) {\n where[joinColumn.referencedColumn.propertyName] = entity[joinColumn.propertyName];\n\n columns.push(joinColumn.propertyName);\n } else {\n throw EntityRelationLookupError.notReferenced(\n relation.propertyName,\n [joinColumn.propertyName],\n );\n }\n }\n\n if (skipRelation || columns.length === 0) {\n continue;\n }\n\n const repository = dataSource.getRepository(relation.type);\n const item = await repository.findOne({\n where,\n });\n\n if (!item) {\n throw EntityRelationLookupError.notFound(relation.propertyName, columns);\n }\n\n relations[relation.propertyName as keyof T] = item as T[keyof T];\n }\n\n const relationKeys = Object.keys(relations);\n for (let i = 0; i < relationKeys.length; i++) {\n const relationKey = relationKeys[i];\n\n entity[relationKey as keyof T] = relations[relationKey] as T[keyof T];\n }\n\n return entity;\n}\n","import { FilterComparisonOperator } from 'rapiq';\nimport type { FiltersParseOutputElement } from 'rapiq';\nimport { Brackets } from 'typeorm';\nimport type {\n DataSource, EntityTarget, ObjectLiteral, WhereExpressionBuilder,\n} from 'typeorm';\nimport { useDataSource } from '../../data-source';\nimport { applyFiltersTransformed, transformParsedFilters } from '../../query';\nimport { pickRecord } from '../../utils';\nimport { getEntityMetadata } from './metadata';\n\ntype EntityUniquenessCheckOptions<T> = {\n /**\n * Repository entity class.\n */\n entityTarget: EntityTarget<T>,\n\n /**\n * Entity to insert/update.\n */\n entity: Partial<T>,\n\n /**\n * Entity found.\n */\n entityExisting?: Partial<T> | null,\n\n /**\n * DataSource to use\n */\n dataSource?: DataSource\n};\n\nfunction transformUndefinedToNull<T>(input: undefined | T) : T {\n if (typeof input === 'undefined') {\n return null as T;\n }\n\n return input;\n}\n\nfunction applyWhereExpression(\n qb: WhereExpressionBuilder,\n data: Record<string, any>,\n type: 'source' | 'target',\n) {\n const elements : FiltersParseOutputElement[] = [];\n\n const keys = Object.keys(data);\n for (let i = 0; i < keys.length; i++) {\n elements.push({\n key: keys[i],\n value: transformUndefinedToNull(data[keys[i]]),\n operator: type === 'target' ?\n FilterComparisonOperator.EQUAL :\n FilterComparisonOperator.NOT_EQUAL,\n });\n }\n\n const queryFilters = transformParsedFilters(elements, {\n bindingKey(key) {\n if (type === 'source') {\n return `filter_source_${key}`;\n }\n\n return `filter_target_${key}`;\n },\n });\n\n applyFiltersTransformed(qb, queryFilters);\n\n return queryFilters;\n}\n\n/**\n * Check if a given entity does not already exist.\n * Composite unique keys on a null column can only be present once.\n *\n * @experimental\n * @param options\n */\nexport async function isEntityUnique<T extends ObjectLiteral>(\n options: EntityUniquenessCheckOptions<T>,\n) : Promise<boolean> {\n const dataSource = options.dataSource || await useDataSource();\n\n const metadata = await getEntityMetadata(options.entityTarget, dataSource);\n\n const repository = dataSource.getRepository(metadata.target);\n\n const primaryColumnNames = metadata.primaryColumns.map((c) => c.propertyName);\n\n const columnGroups : string[][] = [];\n if (\n metadata.ownUniques &&\n metadata.ownUniques.length > 0\n ) {\n for (let i = 0; i < metadata.ownUniques.length; i++) {\n columnGroups.push(metadata.ownUniques[i].columns.map(\n (column) => column.propertyName,\n ));\n }\n } else {\n for (let i = 0; i < metadata.indices.length; i++) {\n const index = metadata.indices[i];\n if (!index.isUnique || index.entityMetadata.target !== metadata.target) {\n continue;\n }\n\n columnGroups.push(index.columns.map(\n (column) => column.propertyName,\n ));\n }\n }\n\n for (let i = 0; i < columnGroups.length; i++) {\n const queryBuilder = repository.createQueryBuilder('entity');\n queryBuilder.where(new Brackets((qb) => {\n applyWhereExpression(qb, pickRecord(options.entity, columnGroups[i]), 'target');\n }));\n\n if (options.entityExisting) {\n queryBuilder.andWhere(new Brackets((qb) => {\n applyWhereExpression(qb, pickRecord(options.entityExisting!, primaryColumnNames), 'source');\n }));\n }\n\n const entity = await queryBuilder.getOne();\n if (entity) {\n return false;\n }\n }\n\n return true;\n}\n"],"names":["TypeormExtensionError","Error","DriverError","message","undeterminable","notSupported","driverName","OptionsError","notFound","databaseNotDefined","CodeTransformation","detectCodeTransformation","process","Symbol","for","JUST_IN_TIME","NONE","isCodeTransformation","input","getEntityName","entity","name","InstanceChecker","isEntitySchema","options","canReplaceWindowsSeparator","startsWith","characterIndex","specialCharacters","i","length","indexOf","replaceWindowSeparator","replace","safeReplaceWindowsSeparator","TRAILING_SLASH_RE","hasTrailingSlash","queryParams","endsWith","test","withoutTrailingSlash","slice","s0","s","split","join","readTSConfig","cwd","path","isAbsolute","resolve","filePath","tsConfig","load","isObject","e","stripLeadingModifier","text","substring","transformFilePath","dist","src","separator","sep","windowsSeparatorReplaceable","base","baseIndex","lastIndexOf","lastIndex","prevCharacter","jsExtensions","tsExtensions","regex","RegExp","matchesSum","matches","match","Array","isArray","matchesCounter","bracketIndex","args","adjustFilePath","tsconfig","compilerOptions","outDir","adjustFilePaths","keys","Object","resolveFilePath","root","parseFilePath","fullPath","directory","dirname","basename","isDirectory","stat","fs","promises","hasOwnProperty","obj","prop","prototype","call","hasStringProperty","pickRecord","data","output","extendObject","target","source","isPromise","p","Promise","then","getAliasForPath","items","undefined","key","value","buildKeyWithPrefix","prefix","isQueryOptionDefined","option","applyQueryFieldsParseOutput","query","select","map","field","alias","relations","defaultAlias","defaultPath","applyQueryFields","parseQueryFields","applyFields","transformParsedFilters","fullKey","filter","statement","bindingKey","push","operator","FilterComparisonOperator","NOT_EQUAL","binding","EQUAL","LIKE","NOT_LIKE","IN","NOT_IN","nullIndex","splice","unshift","LESS_THAN","LESS_THAN_EQUAL","GREATER_THAN","GREATER_THAN_EQUAL","applyFiltersTransformed","andWhere","Brackets","qb","where","applyQueryFiltersParseOutput","applyQueryFilters","parseQueryFilters","applyFilters","applyQueryPaginationParseOutput","limit","take","offset","skip","applyQueryPagination","parseQueryPagination","applyPagination","applyQueryRelationsParseOutput","parts","leftJoinAndSelect","onJoin","applyQueryRelations","parseQueryRelations","applyRelations","applyQuerySortParseOutput","sort","orderBy","applyQuerySort","parseQuerySort","applySort","applyQueryParseOutput","context","fields","filters","pagination","applyQuery","page","parseQuery","findDataSource","preserveFilePaths","files","fileName","removeFileNameExtension","directoryIsPattern","lookupPaths","j","posix","info","locate","ignore","moduleRecord","isDataSource","EnvironmentName","EnvironmentVariableName","transformLogging","toBool","toArray","transformCache","envCacheOptions","oneOf","read","CACHE_OPTIONS","CACHE_OPTIONS_ALT","JSON","parse","type","alwaysEnabled","readBool","CACHE_ALWAYS_ENABLED","CACHE_ALWAYS_ENABLED_ALT","duration","readInt","CACHE_DURATION","CACHE_DURATION_ALT","instance","useEnv","env","ENV","DEVELOPMENT","seeds","readArray","SEEDS","SEEDS_ALT","factories","FACTORIES","FACTORIES_ALT","url","URL","URL_ALT","host","HOST","HOST_ALT","port","PORT","PORT_ALT","username","USERNAME","USERNAME_ALT","password","PASSWORD","PASSWORD_ALT","database","DATABASE","DATABASE_ALT","sid","SID","SID_ALT","schema","SCHEMA","SCHEMA_ALT","extra","DRIVER_EXTRA","DRIVER_EXTRA_ALT","synchronize","SYNCHRONIZE","SYNCHRONIZE_ALT","schemaDrop","SCHEMA_DROP","SCHEMA_DROP_ALT","migrationsRun","MIGRATIONS_RUN","MIGRATIONS_RUN_ALT","entities","ENTITIES","ENTITIES_ALT","migrations","MIGRATIONS","MIGRATIONS_ALT","migrationsTableName","MIGRATIONS_TABLE_NAME","MIGRATIONS_TABLE_NAME_ALT","metadataTableName","METADATA_TABLE_NAME","METADATA_TABLE_NAME_ALT","subscribers","SUBSCRIBERS","SUBSCRIBERS_ALT","logging","LOGGING","LOGGING_ALT","logger","LOGGER","LOGGER_ALT","entityPrefix","ENTITY_PREFIX","ENTITY_PREFIX_ALT","maxQueryExecutionTime","MAX_QUERY_EXECUTION_TIME","MAX_QUERY_EXECUTION_TIME_ALT","debug","DEBUG","DEBUG_ALT","cache","CACHE","CACHE_ALT","uuidExtension","UUID_EXTENSION","UUID_EXTENSION_ALT","envType","TYPE","TYPE_ALT","envURL","resetEnv","merge","createMerger","strategy","mergeDataSourceOptions","hasEnvDataSourceOptions","readDataSourceOptionsFromEnv","dropSchema","credentialOptions","timeTravelQueries","mergeDataSourceOptionsWithEnv","buildDataSourceOptions","dataSource","dataSourceName","instances","instancePromises","setDataSourceOptions","hasDataSourceOptions","useDataSourceOptions","catch","initializePromises","optionsPromises","setDataSource","hasDataSource","unsetDataSource","useDataSource","isInitialized","initialize","DataSource","checkDatabase","result","exists","migrationsPending","dataSourceCleanup","dataSourceOptions","queryRunner","createQueryRunner","migrationExecutor","MigrationExecutor","getPendingMigrations","driver","buildTableName","migrationsTableExists","hasTable","entityMetadatas","tableNames","entityMetadata","tablePath","tables","getTables","upQueries","createSchemaBuilder","log","release","destroy","getCharsetFromDataSourceOptions","charset","getCharacterSetFromDataSourceOptions","characterSet","buildDriverOptions","driverOptions","DriverUtils","replication","master","buildMongoDBDriverOptions","user","ssl","connectString","serviceName","template","domain","driversRequireDatabaseOption","createDriver","connectionOptions","fakeConnection","driverFactory","DriverFactory","create","normalizeDataSourceOptions","findOptions","buildDatabaseCreateContext","ifNotExist","buildDatabaseDropContext","ifExist","GenerateCommand","MigrationGenerateCommand","prettify","prettifyQuery","parameters","stringify","buildTemplate","timestamp","upStatements","downStatements","migrationName","pascalCase","up","down","generateMigration","Date","getTime","sqlInMemory","forEach","upQuery","downQueries","downQuery","content","reverse","preview","directoryPath","access","constants","R_OK","W_OK","mkdir","recursive","writeFile","encoding","existsQuery","builder","inverse","getQuery","synchronizeDatabaseSchema","migrationsCount","runMigrations","transaction","migrationsTransactionMode","createSimplePostgresConnection","operationContext","Client","postgres","initialDatabase","client","connect","executeSimplePostgresQuery","connection","endConnection","reject","queryErr","queryResult","end","createPostgresDatabase","existQuery","existResult","rows","schemaConnection","schemaQuery","dropPostgresDatabase","executeSimpleCockroachDBQuery","createCockroachDBDatabase","dropCockroachDBDatabase","createSimpleMongoDBConnection","MongoClient","mongodb","createMongoDBDatabase","close","dropMongoDBDatabase","dropDatabase","createSimpleMsSQLConnection","server","mssql","createMsSQLDatabase","dropMsSQLDatabase","createSimpleMySQLConnection","createConnection","mysql","executeSimpleMysqlQuery","createMySQLDatabase","toLowerCase","dropMySQLDatabase","createSimpleOracleConnection","getConnection","oracle","address","connectData","createOracleDatabase","execute","dropOracleDatabase","_context","createSQLiteDatabase","dropSQLiteDatabase","F_OK","unlink","createDatabase","DatabaseCreateCommand","default","describe","choices","handler","raw","sourcePath","consola","success","exit","warn","error","command","DatabaseDropCommand","SeederEntity","ctx","id","trackExecution","track","SeederFactory","setMeta","meta","setLocale","faker","locale","make","params","save","useFaker","factoryFn","entityManager","getRepository","saveMany","amount","item","all","fakerExports","names","Faker","SeederFactoryManager","set","get","resolveFilePatterns","filesPattern","locateMany","buildFilePathname","resolveFilePaths","filePaths","a","b","el","extension","prepareSeederSeeds","seedFiles","seedConstructors","moduleExports","clazzConstructor","exportKeys","moduleExport","parseInt","buildSeederFileTemplate","className","useSeederFactoryManager","setSeederFactory","manager","useSeederFactory","prepareSeederFactories","factoryFiles","factoryConfigs","factoryManager","SeederExecutor","tableName","seedTableName","buildOptions","seederElements","buildEntities","tracking","seedTracking","some","seed","existing","createTableIfNotExist","loadExisting","isMatch","seedName","pending","index","findIndex","logSchemaBuild","executed","seeder","run","mongoRunner","cursor","_id","createQueryBuilder","escape","from","table","getRawMany","migrationRaw","timestampCounter","element","classNameToTimestamp","checkForDuplicates","migration","duplicates","Set","tableExist","createTable","Table","columns","normalizeType","mappedDataTypes","migrationId","isGenerated","generationStrategy","isPrimary","isNullable","migrationTimestamp","seederEntity","values","MssqlParameter","databaseConnection","db","collection","insertOne","insert","into","runSeeder","executor","pop","runSeeders","SeedCreateCommand","demandOption","Number","isNaN","now","dirNameIsDirectory","javascript","nameExtension","getFileNameExtension","nameWithoutExtension","SeedRunCommand","EntityRelationLookupError","relation","notReferenced","getEntityMetadata","Repository","metadata","getEntityPropertyNames","propertyName","validateEntityJoinColumns","entityTarget","skipRelation","joinColumns","joinColumn","referencedColumn","repository","findOne","relationKeys","relationKey","transformUndefinedToNull","applyWhereExpression","elements","queryFilters","isEntityUnique","primaryColumnNames","primaryColumns","c","columnGroups","ownUniques","column","indices","isUnique","queryBuilder","entityExisting","getOne"],"mappings":"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"}
|