{"version":3,"file":"index.cjs","sources":["../src/errors/base.ts","../src/errors/driver.ts","../src/errors/options.ts","../src/query/utils/alias.ts","../src/query/utils/key.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/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/check.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/create.ts","../src/database/drop.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","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","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","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 { 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    options = options || {};\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\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 type { ParseInput, ParseOutput } from 'rapiq';\nimport { parseQuery } from 'rapiq';\nimport type { ObjectLiteral, SelectQueryBuilder } from 'typeorm';\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): 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        applyQueryRelationsParseOutput(query, context.relations, {\n            defaultAlias: context.defaultPath,\n        });\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    options = options || {};\n\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 (\n        typeof options.pagination === 'undefined'\n    ) {\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(query, parseQuery(input, options));\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 './type';\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 '../type';\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        ...(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 } from '../../data-source/options';\nimport type { DatabaseBaseContext, DatabaseCreateContext, DatabaseDropContext } from '../type';\nimport { findDataSource } from '../../data-source';\n\nasync function setDatabaseContextOptions<T extends DatabaseBaseContext>(context: T) : Promise<T> {\n    if (!context.options) {\n        const dataSource = await findDataSource(context.findOptions);\n        if (dataSource) {\n            context.options = dataSource.options;\n        }\n\n        if (!context.options) {\n            context.options = await buildDataSourceOptions();\n        }\n    }\n\n    Object.assign(context.options, {\n        subscribers: [],\n        synchronize: false,\n        migrationsRun: false,\n        dropSchema: false,\n    } satisfies Partial<DataSourceOptions>);\n\n    return context;\n}\n\nexport async function buildDatabaseCreateContext(\n    context?: DatabaseCreateContext,\n) : Promise<DatabaseCreateContext> {\n    context = context || {};\n\n    context = await setDatabaseContextOptions(context);\n\n    if (typeof context.synchronize === 'undefined') {\n        context.synchronize = true;\n    }\n\n    if (typeof context.ifNotExist === 'undefined') {\n        context.ifNotExist = true;\n    }\n\n    return context;\n}\n\nexport async function buildDatabaseDropContext(\n    context?: DatabaseDropContext,\n) : Promise<DatabaseDropContext> {\n    context = context || {};\n    context = await setDatabaseContextOptions(context);\n\n    if (typeof context.ifExist === 'undefined') {\n        context.ifExist = true;\n    }\n\n    return context;\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 { 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    if (!dataSource.isInitialized) {\n        await dataSource.initialize();\n    }\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    await dataSource.destroy();\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        const filePath = path.join(directoryPath, fileName);\n\n        await fs.promises.writeFile(filePath, content, { encoding: 'utf-8' });\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 { OptionsError } from '../../errors';\nimport type { DatabaseBaseContext, DatabaseCreateContext, DatabaseDropContext } from '../type';\nimport { hasOwnProperty } from '../../utils';\nimport type { DriverOptions } from './type';\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    context?: DatabaseCreateContext,\n) {\n    context = await buildDatabaseCreateContext(context);\n    if (!context.options) {\n        throw OptionsError.undeterminable();\n    }\n\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.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    context?: DatabaseDropContext,\n) {\n    context = await buildDatabaseDropContext(context);\n    if (!context.options) {\n        throw OptionsError.undeterminable();\n    }\n\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 { OptionsError } from '../../errors';\nimport type { DatabaseCreateContext, DatabaseDropContext } from '../type';\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    context?: DatabaseCreateContext,\n) {\n    context = await buildDatabaseCreateContext(context);\n    if (!context.options) {\n        throw OptionsError.undeterminable();\n    }\n\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    context?: DatabaseDropContext,\n) {\n    context = await buildDatabaseDropContext(context);\n    if (!context.options) {\n        throw OptionsError.undeterminable();\n    }\n\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 { OptionsError } from '../../errors';\nimport type { DatabaseCreateContext, DatabaseDropContext } from '../type';\nimport type { DriverOptions } from './type';\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    context?: DatabaseCreateContext,\n) {\n    context = await buildDatabaseCreateContext(context);\n    if (!context.options) {\n        throw OptionsError.undeterminable();\n    }\n\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    context?: DatabaseDropContext,\n) {\n    context = await buildDatabaseDropContext(context);\n    if (!context.options) {\n        throw OptionsError.undeterminable();\n    }\n\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 { OptionsError } from '../../errors';\nimport type { DatabaseCreateContext, DatabaseDropContext } from '../type';\nimport type { DriverOptions } from './type';\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    context?: DatabaseCreateContext,\n) {\n    context = await buildDatabaseCreateContext(context);\n    if (!context.options) {\n        throw OptionsError.undeterminable();\n    }\n\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    context?: DatabaseDropContext,\n) {\n    context = await buildDatabaseDropContext(context);\n    if (!context.options) {\n        throw OptionsError.undeterminable();\n    }\n\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 { OptionsError } from '../../errors';\nimport type { DatabaseCreateContext, DatabaseDropContext } from '../type';\nimport type { DriverOptions } from './type';\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    context?: DatabaseCreateContext,\n) {\n    context = await buildDatabaseCreateContext(context);\n    if (!context.options) {\n        throw OptionsError.undeterminable();\n    }\n\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    context?: DatabaseDropContext,\n) {\n    context = await buildDatabaseDropContext(context);\n    if (!context.options) {\n        throw OptionsError.undeterminable();\n    }\n\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 { OptionsError } from '../../errors';\nimport type { DatabaseCreateContext, DatabaseDropContext } from '../type';\nimport type { DriverOptions } from './type';\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    context?: DatabaseCreateContext,\n) {\n    context = await buildDatabaseCreateContext(context);\n    if (!context.options) {\n        throw OptionsError.undeterminable();\n    }\n\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?: DatabaseDropContext,\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 { DatabaseCreateContext, DatabaseDropContext } from '../type';\nimport { buildDriverOptions } from './utils';\nimport { buildDatabaseCreateContext, buildDatabaseDropContext, synchronizeDatabaseSchema } from '../utils';\n\nexport async function createSQLiteDatabase(\n    context?: DatabaseCreateContext,\n) : Promise<void> {\n    context = await buildDatabaseCreateContext(context);\n\n    if (!context.options) {\n        throw OptionsError.undeterminable();\n    }\n\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    context: DatabaseDropContext,\n) {\n    context = await buildDatabaseDropContext(context);\n\n    if (!context.options) {\n        throw OptionsError.undeterminable();\n    }\n\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, OptionsError } from '../errors';\nimport type {\n    DatabaseCreateContext,\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';\n\n/**\n * Create database for specified driver in ConnectionOptions.\n *\n * @throws DriverError\n * @throws OptionsError\n *\n * @param context\n */\nexport async function createDatabase(context?: DatabaseCreateContext) {\n    context = await buildDatabaseCreateContext(context);\n\n    if (!context.options) {\n        throw OptionsError.undeterminable();\n    }\n\n    if (!context.options.type) {\n        throw DriverError.undeterminable();\n    }\n\n    switch (context.options.type) {\n        case 'mongodb':\n            return createMongoDBDatabase(context);\n        case 'mysql':\n        case 'mariadb':\n            return createMySQLDatabase(context);\n        case 'postgres':\n            return createPostgresDatabase(context);\n        case 'cockroachdb':\n            return createCockroachDBDatabase(context);\n        case 'sqlite':\n        case 'better-sqlite3':\n            return createSQLiteDatabase(context);\n        case 'oracle':\n            return createOracleDatabase(context);\n        case 'mssql':\n            return createMsSQLDatabase(context);\n    }\n\n    throw DriverError.notSupported(context.options.type);\n}\n","import { DriverError, OptionsError } from '../errors';\nimport type {\n    DatabaseDropContext,\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';\n\n/**\n * Drop database for specified driver in ConnectionOptions.\n *\n * @throws DriverError\n * @throws OptionsError\n *\n * @param context\n */\nexport async function dropDatabase(context?: DatabaseDropContext) {\n    context = await buildDatabaseDropContext(context);\n\n    if (!context.options) {\n        throw OptionsError.undeterminable();\n    }\n\n    if (!context.options.type) {\n        throw DriverError.undeterminable();\n    }\n\n    switch (context.options.type) {\n        case 'mongodb':\n            return dropMongoDBDatabase(context);\n        case 'mysql':\n        case 'mariadb':\n            return dropMySQLDatabase(context);\n        case 'postgres':\n            return dropPostgresDatabase(context);\n        case 'cockroachdb':\n            return dropCockroachDBDatabase(context);\n        case 'sqlite':\n        case 'better-sqlite3':\n            return dropSQLiteDatabase(context);\n        case 'oracle':\n            return dropOracleDatabase(context);\n        case 'mssql':\n            return dropMsSQLDatabase(context);\n    }\n\n    throw DriverError.notSupported(context.options.type);\n}\n","import { consola } from 'consola';\nimport type { Arguments, Argv, CommandModule } from 'yargs';\nimport { buildDataSourceOptions } from '../../../data-source';\nimport type { DatabaseCreateContext } 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 : DatabaseCreateContext = {\n            ifNotExist: 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        context.synchronize = args.synchronize === 'yes';\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 { FakerOptions, LocaleDefinition } from '@faker-js/faker';\nimport { Faker } 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 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    entityTarget: EntityTarget<T>,\n    entity: Partial<T>,\n    entityExisting?: Partial<T>,\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    for (let i = 0; i < metadata.ownUniques.length; i++) {\n        const uniqueColumnNames = metadata.ownUniques[i].columns.map(\n            (column) => column.propertyName,\n        );\n\n        const queryBuilder = repository.createQueryBuilder('entity');\n        queryBuilder.where(new Brackets((qb) => {\n            applyWhereExpression(qb, pickRecord(options.entity, uniqueColumnNames), 'target');\n        }));\n\n        queryBuilder.andWhere(new Brackets((qb) => {\n            if (options.entityExisting) {\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","undeterminable","notSupported","driverName","constructor","message","OptionsError","notFound","databaseNotDefined","getAliasForPath","items","path","undefined","i","length","key","value","buildKeyWithPrefix","name","prefix","CodeTransformation","detectCodeTransformation","process","Symbol","for","JUST_IN_TIME","NONE","isCodeTransformation","input","getEntityName","entity","InstanceChecker","isEntitySchema","options","canReplaceWindowsSeparator","startsWith","characterIndex","specialCharacters","indexOf","replaceWindowSeparator","replace","safeReplaceWindowsSeparator","TRAILING_SLASH_RE","hasTrailingSlash","queryParams","endsWith","test","withoutTrailingSlash","slice","s0","s","split","join","readTSConfig","cwd","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","isPromise","p","Promise","then","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","applyQueryRelations","parseQueryRelations","applyRelations","applyQuerySortParseOutput","sort","orderBy","applyQuerySort","parseQuerySort","applySort","applyQueryParseOutput","context","fields","filters","pagination","applyQuery","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","target","mergeDataSourceOptions","source","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","domain","driversRequireDatabaseOption","createDriver","connectionOptions","fakeConnection","driverFactory","DriverFactory","create","setDatabaseContextOptions","findOptions","assign","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","trackExecution","track","ctx","id","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","buildOptions","seederElements","buildEntities","tracking","seedTracking","some","seed","existing","createTableIfNotExist","loadExisting","isMatch","seedName","pending","index","findIndex","logSchemaBuild","executed","seeder","run","mongoRunner","cursor","tableName","_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","seedTableName","runSeeder","executor","pop","runSeeders","SeedCreateCommand","demandOption","Number","isNaN","now","dirNameIsDirectory","javascript","nameExtension","getFileNameExtension","nameWithoutExtension","template","SeedRunCommand","EntityRelationLookupError","notReferenced","relation","getEntityMetadata","Repository","metadata","getEntityPropertyNames","propertyName","validateEntityJoinColumns","entityTarget","skipRelation","joinColumns","joinColumn","referencedColumn","repository","findOne","relationKeys","relationKey","transformUndefinedToNull","applyWhereExpression","elements","queryFilters","isEntityUnique","primaryColumnNames","primaryColumns","c","ownUniques","uniqueColumnNames","column","queryBuilder","entityExisting","getOne"],"mappings":"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"}