orchid-orm 1.24.6 → 1.25.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.mjs","sources":["../src/codegen/fileChanges.ts","../src/codegen/tsUtils.ts","../src/codegen/updateMainFile.ts","../src/codegen/updateTableFile/handleForeignKey.ts","../src/codegen/updateTableFile/createTable.ts","../src/codegen/updateTableFile/changeTable.ts","../src/codegen/updateTableFile/renameTable.ts","../src/codegen/updateTableFile/updateTableFile.ts","../src/codegen/createBaseTableFile.ts","../src/codegen/updateTableFile/updateRelations.ts","../src/codegen/appCodeUpdater.ts"],"sourcesContent":["export class FileChanges {\n private ranges: ([from: number, to: number] | string)[] = [];\n\n constructor(public content: string) {}\n\n add(at: number, text: string, end = at) {\n if (this.ranges.length === 0) {\n this.ranges.push([0, at], text, [end, this.content.length]);\n } else {\n const last = this.ranges[this.ranges.length - 1] as [number, number];\n last[1] = at;\n this.ranges.push(text, [end, this.content.length]);\n }\n }\n\n replace(from: number, to: number, text: string) {\n this.add(from, text, to);\n }\n\n remove(from: number, to: number) {\n if (this.ranges.length === 0) {\n this.ranges.push([0, from], [to, this.content.length]);\n } else {\n const last = this.ranges[this.ranges.length - 1] as [number, number];\n last[1] = from;\n this.ranges.push([to, this.content.length]);\n }\n }\n\n apply() {\n return this.ranges.length\n ? this.ranges\n .map((item) =>\n typeof item === 'string'\n ? item\n : this.content.slice(item[0], item[1]),\n )\n .join('')\n : this.content;\n }\n}\n","import {\n CallExpression,\n ClassDeclaration,\n ComputedPropertyName,\n Expression,\n Identifier,\n ImportDeclaration,\n NamedImports,\n Node,\n NodeArray,\n NumericLiteral,\n ObjectLiteralElement,\n ObjectLiteralExpression,\n PrivateIdentifier,\n PropertyAccessExpression,\n PropertyAssignment,\n ShorthandPropertyAssignment,\n Statement,\n StringLiteral,\n VariableStatement,\n ThisExpression,\n ArrowFunction,\n ParenthesizedExpression,\n PropertyName,\n SpreadAssignment,\n ArrayLiteralExpression,\n} from 'typescript';\nimport typescript from 'typescript';\nconst { createSourceFile, ScriptTarget, SyntaxKind } = typescript;\n\nconst iterate = <T>(\n kind: number,\n): ((statements: NodeArray<Statement>) => Generator<T, void, unknown>) => {\n return function* (statements: NodeArray<Statement>) {\n for (const node of statements) {\n if (node.kind === kind) {\n yield node as T;\n }\n }\n };\n};\n\nconst isNode = <T extends Expression | ObjectLiteralElement | Node>(\n kind: number,\n) => {\n return (node?: Expression | ObjectLiteralElement | Node): node is T => {\n return node?.kind === kind;\n };\n};\n\nexport const ts = {\n getStatements(content: string): NodeArray<Statement> {\n const { statements } = createSourceFile(\n 'file.ts',\n content,\n ScriptTarget.Latest,\n true,\n );\n return statements;\n },\n is: {\n call: isNode<CallExpression>(SyntaxKind.CallExpression),\n objectLiteral: isNode<ObjectLiteralExpression>(\n SyntaxKind.ObjectLiteralExpression,\n ),\n propertyAssignment: isNode<PropertyAssignment>(\n SyntaxKind.PropertyAssignment,\n ),\n shorthandPropertyAssignment: isNode<ShorthandPropertyAssignment>(\n SyntaxKind.ShorthandPropertyAssignment,\n ),\n identifier: isNode<Identifier>(SyntaxKind.Identifier),\n stringLiteral: isNode<StringLiteral>(SyntaxKind.StringLiteral),\n arrayLiteral: isNode<ArrayLiteralExpression>(\n SyntaxKind.ArrayLiteralExpression,\n ),\n numericLiteral: isNode<NumericLiteral>(SyntaxKind.NumericLiteral),\n computedPropertyName: isNode<ComputedPropertyName>(\n SyntaxKind.ComputedPropertyName,\n ),\n privateIdentifier: isNode<PrivateIdentifier>(SyntaxKind.PrivateIdentifier),\n this: isNode<ThisExpression>(SyntaxKind.ThisKeyword),\n propertyAccess: isNode<PropertyAccessExpression>(\n SyntaxKind.PropertyAccessExpression,\n ),\n arrowFunction: isNode<ArrowFunction>(SyntaxKind.ArrowFunction),\n parenthesizedExpression: isNode<ParenthesizedExpression>(\n SyntaxKind.ParenthesizedExpression,\n ),\n spreadAssignment: isNode<SpreadAssignment>(SyntaxKind.SpreadAssignment),\n },\n import: {\n iterate: iterate<ImportDeclaration>(SyntaxKind.ImportDeclaration),\n *iterateWithSource(statements: NodeArray<Statement>, path: string) {\n for (const node of ts.import.iterate(statements)) {\n if (ts.import.getSource(node) !== path) continue;\n yield node;\n }\n },\n getSource(node: ImportDeclaration) {\n return node.moduleSpecifier.getText().slice(1, -1);\n },\n getEndPos(statements: NodeArray<Statement>) {\n let end = 0;\n for (const node of ts.import.iterate(statements)) {\n end = node.end;\n }\n return end;\n },\n getStatementsImportedName(\n statements: NodeArray<Statement>,\n path: string,\n key: string,\n ) {\n for (const node of ts.import.iterateWithSource(statements, path)) {\n const name = ts.import.getImportName(node, key);\n if (name) return name;\n }\n\n return;\n },\n getImportName(node: ImportDeclaration, key: string) {\n if (!node.importClause) return;\n\n const elements = (node.importClause.namedBindings as NamedImports)\n ?.elements;\n\n if (!elements) return;\n\n for (const element of elements) {\n if (\n element.propertyName?.escapedText === key ||\n element.name.escapedText === key\n ) {\n return element.name.escapedText.toString();\n }\n }\n\n return;\n },\n },\n variable: {\n iterate: iterate<VariableStatement>(SyntaxKind.VariableStatement),\n *iterateDeclarations(statements: NodeArray<Statement>) {\n for (const node of ts.variable.iterate(statements)) {\n for (const dec of node.declarationList.declarations) {\n yield dec;\n }\n }\n },\n },\n class: {\n iterate: iterate<ClassDeclaration>(SyntaxKind.ClassDeclaration),\n },\n prop: {\n getName({ name }: { name?: PropertyName }) {\n if (ts.is.identifier(name)) {\n return name.escapedText;\n } else if (name && 'text' in name) {\n return name.text;\n } else {\n return name?.getText();\n }\n },\n getValue(prop: ObjectLiteralElement) {\n if (ts.is.propertyAssignment(prop)) {\n return prop.initializer.getText();\n } else if (ts.is.shorthandPropertyAssignment(prop)) {\n return prop.name.escapedText.toString();\n } else {\n return;\n }\n },\n },\n spaces: {\n getAtLine(content: string, pos: number) {\n const lines = content.slice(0, pos).split('\\n');\n const last = lines[lines.length - 1];\n return last.match(/^\\s+/)?.[0] || '';\n },\n },\n};\n","import { RakeDbAst } from 'rake-db';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport { NodeArray, ObjectLiteralExpression, Statement } from 'typescript';\nimport { AppCodeUpdaterError } from './appCodeUpdater';\nimport { FileChanges } from './fileChanges';\nimport { ts } from './tsUtils';\nimport { AdapterOptions, QueryLogOptions } from 'pqb';\nimport {\n singleQuote,\n pathToLog,\n toCamelCase,\n toPascalCase,\n getImportPath,\n} from 'orchid-core';\n\ntype Context = {\n filePath: string;\n tablePath: (name: string) => string;\n statements: NodeArray<Statement>;\n object: ObjectLiteralExpression;\n content: string;\n spaces: string;\n};\n\nconst libraryName = 'orchid-orm';\nconst importKey = 'orchidORM';\n\nconst newFile = (\n options: AdapterOptions,\n) => `import { orchidORM } from 'orchid-orm';\n\nexport const db = orchidORM(\n {\n ${optionsToString(options)}\n },\n {\n }\n);\n`;\n\nconst optionsToString = (options: AdapterOptions) => {\n const lines: string[] = [];\n for (const key in options) {\n const value = options[key as keyof AdapterOptions];\n if (typeof value !== 'object' && typeof value !== 'function') {\n lines.push(\n `${key}: ${typeof value === 'string' ? singleQuote(value) : value},`,\n );\n }\n }\n return lines.join('\\n ');\n};\n\nexport const updateMainFile = async (\n filePath: string,\n tablePath: (name: string) => string,\n ast: RakeDbAst,\n options: AdapterOptions,\n logger: QueryLogOptions['logger'],\n) => {\n const result = await fs.readFile(filePath, 'utf-8').then(\n (content) => ({ error: undefined, content }),\n (error) => {\n return { error, content: undefined };\n },\n );\n\n if (result.error && result.error.code !== 'ENOENT') throw result.error;\n const content = result.content || newFile(options);\n\n const statements = ts.getStatements(content);\n\n const importName = ts.import.getStatementsImportedName(\n statements,\n libraryName,\n importKey,\n );\n if (!importName) {\n throw new AppCodeUpdaterError(\n `Main file does not contain import of orchid-orm`,\n );\n }\n\n const object = getTablesListObject(importName, statements);\n if (!object) {\n throw new Error('List of tables is not found in main file');\n }\n\n const spaces = ts.spaces.getAtLine(content, object.end);\n\n const context: Context = {\n filePath,\n tablePath,\n statements,\n object,\n content,\n spaces,\n };\n\n let write: string | undefined;\n if (ast.type === 'table') {\n if (ast.action === 'create') {\n write = createTable(context, ast);\n } else {\n write = dropTable(context, ast);\n }\n }\n // rename table is not handled because renaming of the class and the file is better to be done by the editor,\n // editor can scan all project files, rename import path and imported class name\n\n if (write) {\n if (result.error) {\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n }\n\n await fs.writeFile(filePath, write);\n logger?.log(\n `${result.content ? 'Updated' : 'Created'} ${pathToLog(filePath)}`,\n );\n }\n};\n\nconst createTable = (\n { filePath, tablePath, statements, object, content, spaces }: Context,\n ast: RakeDbAst.Table,\n) => {\n const key = toCamelCase(ast.name);\n const value = `${toPascalCase(ast.name)}Table`;\n\n const changes = new FileChanges(content);\n\n const importPath = getImportPath(filePath, tablePath(toCamelCase(ast.name)));\n\n const existing = Array.from(\n ts.import.iterateWithSource(statements, importPath),\n );\n if (existing.length) return;\n\n for (const prop of object.properties) {\n if (key === ts.prop.getName(prop)) {\n return;\n }\n }\n\n const importPos = ts.import.getEndPos(statements);\n changes.add(\n importPos,\n `${importPos === 0 ? '' : '\\n'}import { ${value} } from '${importPath}';`,\n );\n\n let insert = `\\n${spaces} ${key}: ${value},`;\n if (object.properties.length && !object.properties.hasTrailingComma) {\n insert = `,${insert}`;\n }\n if (!content.slice(object.properties.end, object.end).includes('\\n')) {\n insert += `\\n${spaces}`;\n }\n changes.add(object.properties.end, insert);\n\n return changes.apply();\n};\n\nconst dropTable = (\n { filePath, tablePath, statements, object, content }: Context,\n ast: RakeDbAst.Table,\n) => {\n const changes = new FileChanges(content);\n\n const importPath = getImportPath(filePath, tablePath(toCamelCase(ast.name)));\n const tableClassName = `${toPascalCase(ast.name)}Table`;\n const importNames: string[] = [];\n for (const node of ts.import.iterateWithSource(statements, importPath)) {\n changes.remove(node.pos, node.end);\n\n const name = ts.import.getImportName(node, tableClassName);\n if (name && !importNames.includes(name)) {\n importNames.push(name);\n }\n }\n\n for (const prop of object.properties) {\n const name = ts.prop.getValue(prop);\n if (!name || !importNames.includes(name)) continue;\n\n let { end } = prop;\n if (content[end] === ',') end++;\n changes.remove(prop.pos, end);\n }\n\n return changes.apply();\n};\n\nconst getTablesListObject = (\n importName: string,\n statements: NodeArray<Statement>,\n): ObjectLiteralExpression | undefined => {\n for (const node of ts.variable.iterateDeclarations(statements)) {\n const call = node.initializer;\n if (!ts.is.call(call)) continue;\n\n if (call.expression.getText() !== importName) continue;\n\n if (call.arguments.length !== 2) {\n throw new Error(\n 'Invalid number of arguments when initializing orchid orm',\n );\n }\n\n const object = call.arguments[1];\n if (!ts.is.objectLiteral(object)) {\n throw new Error('Second argument of orchidORM must be an object literal');\n }\n\n return object;\n }\n\n return;\n};\n","import {\n AppCodeUpdaterRelations,\n AppCodeUpdaterGetTable,\n} from '../appCodeUpdater';\n\nexport type HandleForeignKeysParams = {\n getTable: AppCodeUpdaterGetTable;\n relations: AppCodeUpdaterRelations;\n tableName: string;\n columns: string[];\n foreignTableName: string;\n foreignColumns: string[];\n skipBelongsTo?: boolean;\n};\n\nexport const handleForeignKey = async ({\n getTable,\n relations,\n tableName,\n columns,\n foreignTableName,\n foreignColumns,\n skipBelongsTo,\n}: HandleForeignKeysParams) => {\n const table = await getTable(tableName);\n if (!table) return;\n\n const foreignTable = await getTable(foreignTableName);\n if (!foreignTable) return;\n\n if (!skipBelongsTo) {\n relations[tableName] ??= {\n path: table.path,\n relations: [],\n };\n\n relations[tableName].relations.push({\n kind: 'belongsTo',\n columns,\n className: foreignTable.name,\n path: foreignTable.path,\n foreignColumns,\n });\n }\n\n relations[foreignTableName] ??= {\n path: foreignTable.path,\n relations: [],\n };\n\n relations[foreignTableName].relations.push({\n kind: 'hasMany',\n columns: foreignColumns,\n className: table.name,\n path: table.path,\n foreignColumns: columns,\n });\n};\n","import { RakeDbAst } from 'rake-db';\nimport { columnsShapeToCode, ColumnType } from 'pqb';\nimport {\n Code,\n singleQuote,\n pathToLog,\n codeToString,\n toCamelCase,\n toPascalCase,\n getImportPath,\n} from 'orchid-core';\nimport fs from 'fs/promises';\nimport { UpdateTableFileParams } from './updateTableFile';\nimport path from 'path';\nimport {\n AppCodeUpdaterRelations,\n AppCodeUpdaterGetTable,\n} from '../appCodeUpdater';\nimport { handleForeignKey } from './handleForeignKey';\n\ninterface CreateTableFileParams extends UpdateTableFileParams {\n ast: RakeDbAst.Table;\n}\n\nexport const createTable = async ({\n ast,\n logger,\n getTable,\n relations,\n tables,\n delayed,\n ...params\n}: CreateTableFileParams) => {\n const key = toCamelCase(ast.name);\n const tablePath = params.tablePath(key);\n const baseTablePath = getImportPath(\n tablePath,\n params.baseTable.getFilePath(),\n );\n const className = `${toPascalCase(ast.name)}Table`;\n\n tables[ast.name] = {\n key,\n name: className,\n path: tablePath,\n };\n\n const imports: Record<string, string> = {\n [baseTablePath]: params.baseTable.exportAs,\n };\n\n const props: Code[] = [];\n\n if (ast.schema) {\n props.push(`schema = ${singleQuote(ast.schema)};`);\n }\n\n props.push(`readonly table = ${singleQuote(ast.name)};`);\n\n if (ast.noPrimaryKey === 'ignore') {\n props.push('noPrimaryKey = true;');\n }\n\n props.push(\n 'columns = this.setColumns((t) => ({',\n columnsShapeToCode(ast.shape, ast, 't'),\n '}));',\n );\n\n const importsCode = importsToCode(imports);\n const code: Code[] = [\n `export class ${className} extends ${params.baseTable.exportAs} {`,\n props,\n '}\\n',\n ];\n\n await fs.mkdir(path.dirname(tablePath), { recursive: true });\n try {\n const content = importsCode + '\\n\\n' + codeToString(code, '', ' ');\n await fs.writeFile(tablePath, content, { flag: 'wx' });\n\n delayed.push(async () => {\n const imports: Record<string, string> = {};\n\n const relCode = await getRelations(\n ast,\n getTable,\n tablePath,\n imports,\n relations,\n ast.name,\n );\n\n if (relCode) {\n const code = codeToString(relCode, ' ', ' ');\n\n const updated =\n content.slice(0, importsCode.length) +\n `\\n${importsToCode(imports)}` +\n content.slice(importsCode.length, -2) +\n ' \\n' +\n code +\n '\\n' +\n content.slice(-2);\n\n await fs.writeFile(tablePath, updated);\n }\n\n logger?.log(`Created ${pathToLog(tablePath)}`);\n });\n } catch (err) {\n if ((err as unknown as { code: string }).code !== 'EEXIST') {\n throw err;\n }\n }\n};\n\nfunction importsToCode(imports: Record<string, string>): string {\n return Object.entries(imports)\n .map(([from, name]) => `import { ${name} } from '${from}';`)\n .join('\\n');\n}\n\nconst getRelations = async (\n ast: RakeDbAst.Table,\n getTable: AppCodeUpdaterGetTable,\n tablePath: string,\n imports: Record<string, string>,\n relations: AppCodeUpdaterRelations,\n tableName: string,\n): Promise<Code[] | undefined> => {\n const refs: { table: string; columns: string[]; foreignColumns: string[] }[] =\n [];\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n if (!(item instanceof ColumnType) || !item.data.foreignKeys) continue;\n\n for (const fkey of item.data.foreignKeys) {\n if ('table' in fkey) {\n refs.push({\n table: fkey.table,\n columns: [key],\n foreignColumns: fkey.columns,\n });\n }\n }\n }\n\n if (ast.constraints) {\n for (const { references: ref } of ast.constraints) {\n if (ref && typeof ref.fnOrTable === 'string') {\n refs.push({\n table: ref.fnOrTable,\n columns: ref.columns,\n foreignColumns: ref.foreignColumns,\n });\n }\n }\n }\n\n if (!refs.length) return;\n\n const code: Code[] = [];\n\n for (const ref of refs) {\n const { columns, foreignColumns } = ref;\n if (columns.length > 1 || foreignColumns.length > 1) continue;\n\n const info = await getTable(ref.table);\n if (!info) continue;\n\n const path = getImportPath(tablePath, info.path);\n imports[path] = info.name;\n\n code.push(\n `${info.key}: this.belongsTo(() => ${info.name}, {`,\n [\n `columns: [${columns.map(singleQuote).join(', ')}],`,\n `references: [${foreignColumns.map(singleQuote).join(', ')}],`,\n ],\n '}),',\n );\n\n await handleForeignKey({\n getTable,\n relations,\n tableName,\n columns: ref.columns,\n foreignTableName: ref.table,\n foreignColumns: ref.foreignColumns,\n skipBelongsTo: true,\n });\n }\n\n return code.length ? ['relations = {', code, '};'] : undefined;\n};\n","import { RakeDbAst } from 'rake-db';\nimport fs from 'fs/promises';\nimport { FileChanges } from '../fileChanges';\nimport { ts } from '../tsUtils';\nimport {\n CallExpression,\n Expression,\n NodeArray,\n ObjectLiteralElementLike,\n ObjectLiteralExpression,\n PropertyAssignment,\n Statement,\n} from 'typescript';\nimport {\n columnCheckToCode,\n ColumnData,\n columnForeignKeysToCode,\n columnIndexesToCode,\n ColumnType,\n constraintToCode,\n ForeignKey,\n identityToCode,\n indexToCode,\n primaryKeyToCode,\n TableData,\n} from 'pqb';\nimport {\n addCode,\n Code,\n codeToString,\n columnDefaultArgumentToCode,\n deepCompare,\n pathToLog,\n quoteObjectKey,\n RawSQLBase,\n singleQuote,\n toCamelCase,\n toPascalCase,\n} from 'orchid-core';\nimport { UpdateTableFileParams } from './updateTableFile';\n\nexport const changeTable = async ({\n ast,\n logger,\n ...params\n}: UpdateTableFileParams & { ast: RakeDbAst.ChangeTable }) => {\n const tablePath = params.tablePath(toCamelCase(ast.name));\n const content = await fs.readFile(tablePath, 'utf-8').catch(() => undefined);\n if (!content) return;\n\n const changes = new FileChanges(content);\n const statements = ts.getStatements(content);\n const className = toPascalCase(ast.name) + 'Table';\n\n for (const { t, object } of iterateColumnsShapes(statements, className)) {\n const context = makeChangeContext(changes, ast, content, object, t);\n\n prependSpaces(context);\n applySchemaChanges(context);\n appendTrailingComma(context);\n addColumns(context);\n addTableData(context);\n }\n\n await fs.writeFile(tablePath, changes.apply());\n logger?.log(`Updated ${pathToLog(tablePath)}`);\n};\n\nfunction* iterateColumnsShapes(\n statements: NodeArray<Statement>,\n className: string,\n) {\n for (const node of ts.class.iterate(statements)) {\n if (node.name?.escapedText !== className) continue;\n\n for (const member of node.members) {\n const name = ts.prop.getName(member);\n const { initializer: call } = member as unknown as {\n initializer?: Expression;\n };\n\n if (name !== 'columns' || !call || !ts.is.call(call)) continue;\n\n const { expression } = call;\n if (\n !ts.is.propertyAccess(expression) ||\n !ts.is.this(expression.expression) ||\n expression.name.escapedText !== 'setColumns'\n )\n continue;\n\n const [arg] = call.arguments;\n if (!ts.is.arrowFunction(arg)) continue;\n\n const { parameters, body } = arg;\n const param = parameters[0]?.name;\n if (!ts.is.identifier(param) || !ts.is.parenthesizedExpression(body))\n continue;\n\n const { expression: object } = body;\n if (!ts.is.objectLiteral(object)) continue;\n\n yield { t: param.escapedText.toString(), object };\n }\n }\n}\n\ntype ChangeContext = {\n changes: FileChanges;\n props: NodeArray<ObjectLiteralElementLike>;\n shape: {\n add: Record<string, ColumnType>;\n drop: Record<string, true>;\n change: Record<string, RakeDbAst.ChangeTableItem.Change>;\n };\n t: string;\n spaces: string;\n object: Expression;\n drop: TableData;\n add: TableData;\n};\n\nconst makeChangeContext = (\n changes: FileChanges,\n ast: RakeDbAst.ChangeTable,\n content: string,\n object: ObjectLiteralExpression,\n t: string,\n): ChangeContext => {\n const add: ChangeContext['shape']['add'] = {};\n const drop: ChangeContext['shape']['drop'] = {};\n const change: ChangeContext['shape']['change'] = {};\n\n const { properties: props } = object;\n const existingColumns = getExistingColumns(props);\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n if (item.type === 'add' && !existingColumns[key]) {\n add[key] = item.item;\n }\n\n if (!existingColumns[key]) continue;\n\n if (item.type === 'drop' && existingColumns[key]) {\n drop[key] = true;\n } else if (item.type === 'change' && existingColumns[key]) {\n change[key] = item;\n }\n }\n\n const spaces = ts.spaces.getAtLine(content, object.end);\n\n const shape = { add, drop, change };\n return {\n changes,\n props,\n shape,\n spaces,\n t,\n object,\n add: ast.add,\n drop: ast.drop,\n };\n};\n\nconst getExistingColumns = (props: NodeArray<ObjectLiteralElementLike>) => {\n const existingColumns: Record<string, true> = {};\n props\n .map((prop) => ts.is.propertyAssignment(prop) && ts.prop.getName(prop))\n .filter((name): name is string => !!name)\n .forEach((name) => (existingColumns[name] = true));\n\n for (const prop of props) {\n if (!ts.is.propertyAssignment(prop)) continue;\n const name = ts.prop.getName(prop);\n if (name) existingColumns[name] = true;\n }\n\n return existingColumns;\n};\n\nconst prependSpaces = ({\n props,\n shape: { add },\n changes,\n spaces,\n}: ChangeContext) => {\n if (Object.keys(add).length && props.pos === props.end) {\n changes.add(props.pos, `\\n${spaces}`);\n }\n};\n\nconst applySchemaChanges = (context: ChangeContext) => {\n const {\n props,\n shape: { drop: dropColumns, change: changeColumns },\n add,\n drop,\n } = context;\n\n props.forEach((prop, i) => {\n if (ts.is.spreadAssignment(prop)) {\n const call = prop.expression;\n if (!ts.is.call(call)) return;\n\n const access = call.expression;\n if (!ts.is.propertyAccess(access)) return;\n\n const name = access.name.escapedText.toString();\n if (name === 'primaryKey') {\n if (drop.primaryKey || add.primaryKey) {\n removeProp(context, prop, i);\n }\n } else if (name === 'index') {\n dropMatchingIndexes(context, prop, i, call, drop.indexes);\n } else if (name === 'foreignKey') {\n dropMatchingForeignKey(context, prop, i, call, drop.constraints);\n } else if (name === 'check') {\n dropMatchingCheck(context, prop, i, call, drop.constraints);\n } else if (name === 'constraint') {\n dropMatchingConstraint(context, prop, i, call, drop.constraints);\n }\n } else if (ts.is.propertyAssignment(prop)) {\n const name = ts.prop.getName(prop);\n if (!name) return;\n\n if (dropColumns[name]) {\n removeProp(context, prop, i);\n } else {\n const changeItem = changeColumns[name];\n if (changeItem) {\n changeColumn(context, changeItem, prop);\n }\n }\n }\n });\n};\n\nconst removeProp = (\n { props, changes }: ChangeContext,\n prop: ObjectLiteralElementLike,\n i: number,\n) => {\n const end = props[i + 1]?.pos || props.end;\n changes.remove(prop.pos, end);\n};\n\nconst changeColumn = (\n { changes, t, spaces }: ChangeContext,\n changeItem: RakeDbAst.ChangeTableItem.Change,\n prop: PropertyAssignment,\n) => {\n const { from, to } = changeItem;\n if (\n (from.type !== to.type || !!from.identity !== !!to.identity) &&\n to.column\n ) {\n changes.replace(\n prop.initializer.pos,\n prop.end,\n ` ${codeToString(to.column.toCode(t), spaces + ' ', ' ').trim()}`,\n );\n return;\n }\n\n const items: CallExpression[] = [];\n let chain: Expression | undefined = prop.initializer;\n while (ts.is.call(chain) && ts.is.propertyAccess(chain.expression)) {\n items.push(chain);\n chain = chain.expression.expression;\n }\n\n type Key = keyof RakeDbAst.ChangeTableItem.Change['to'];\n const propsToChange: Partial<Record<Key, true>> = {};\n\n for (const key in from) {\n if (to[key as Key] !== from[key as Key]) {\n propsToChange[key as Key] = true;\n }\n }\n\n for (const key in to) {\n if (to[key as Key] !== from[key as Key]) {\n propsToChange[key as Key] = true;\n }\n }\n\n const changedProps: Partial<Record<Key, true>> = {};\n const replaced: Record<string, true> = {};\n for (const item of items.reverse()) {\n if (!ts.is.propertyAccess(item.expression)) continue;\n\n const { name } = item.expression;\n let key = name.escapedText.toString();\n if (key === 'index') key = 'indexes';\n else if (key === 'foreignKey') key = 'foreignKeys';\n\n if (!propsToChange[key as Key]) continue;\n\n let remove = true;\n if (!replaced[key]) {\n let code = getColumnMethodArgs(t, to, key as Key, to.type);\n\n if (!code && key === 'identity' && to.type) {\n code = [`.${to.type}()`];\n }\n\n if (code) {\n changes.replace(\n item.expression.expression.end,\n item.end,\n codeToString(code, spaces + ' ', ' ').trim(),\n );\n replaced[key] = true;\n remove = false;\n }\n }\n\n if (remove) {\n changes.remove(item.expression.expression.end, item.end);\n }\n\n changedProps[key as Key] = true;\n }\n\n let append = '';\n for (const key in propsToChange) {\n if (changedProps[key as Key]) continue;\n\n const code = getColumnMethodArgs(t, to, key as Key);\n if (code) {\n append += codeToString(code, spaces + ' ', ' ').trim();\n }\n }\n\n if (append) {\n changes.add(prop.end, append);\n }\n};\n\nconst appendTrailingComma = ({ props, changes }: ChangeContext) => {\n if (!props.hasTrailingComma) {\n const last = props[props.length - 1];\n if (last) {\n changes.add(last.end, ',');\n }\n }\n};\n\nconst addColumns = ({\n shape: { add },\n changes,\n object,\n t,\n spaces,\n}: ChangeContext) => {\n const end = object.end - 1;\n for (const key in add) {\n const code = codeToString(add[key].toCode(t), spaces + ' ', ' ');\n changes.add(end, ` ${quoteObjectKey(key)}: ${code.trim()},\\n${spaces}`);\n }\n};\n\nconst addTableData = ({ add, changes, object, t, spaces }: ChangeContext) => {\n const end = object.end - 1;\n if (add.primaryKey) {\n const code = codeToString(\n primaryKeyToCode(add.primaryKey, t),\n spaces,\n ' ',\n );\n changes.add(end, ` ${code.trim()}\\n${spaces}`);\n }\n if (add.indexes) {\n for (const item of add.indexes) {\n const code = codeToString(indexToCode(item, t), spaces + ' ', ' ');\n changes.add(end, ` ${code.trim()}\\n${spaces}`);\n }\n }\n if (add.constraints) {\n for (const item of add.constraints) {\n const code = codeToString(constraintToCode(item, t), spaces + ' ', ' ');\n changes.add(end, ` ${code.trim()}\\n${spaces}`);\n }\n }\n};\n\nconst getColumnMethodArgs = (\n t: string,\n to: RakeDbAst.ChangeTableItem.Change['to'],\n key: keyof RakeDbAst.ChangeTableItem.Change['to'],\n dataType?: string,\n): Code[] | undefined => {\n const value = to[key];\n if (!value) return;\n\n if (key === 'indexes') {\n return columnIndexesToCode(\n value as Exclude<ColumnData['indexes'], undefined>,\n );\n }\n\n if (key === 'foreignKeys') {\n return columnForeignKeysToCode(value as ForeignKey<string, string[]>[]);\n }\n\n if (key === 'check') {\n return [columnCheckToCode(t, value as RawSQLBase)];\n }\n\n if (key === 'identity') {\n const code = identityToCode(value as TableData.Identity, dataType);\n code[0] = `.${code[0]}`;\n return code;\n }\n\n const code = [`.${key}(`];\n\n if (key === 'collate' || key === 'compression') {\n addCode(code, singleQuote(value as string));\n } else if (key === 'default') {\n addCode(code, columnDefaultArgumentToCode(t, value));\n } else if (key !== 'nullable' && key !== 'primaryKey') {\n return;\n }\n\n addCode(code, ')');\n return code;\n};\n\nconst dropMatchingIndexes = (\n context: ChangeContext,\n prop: ObjectLiteralElementLike,\n i: number,\n call: CallExpression,\n items?: TableData.Index[],\n) => {\n if (!items?.length) return;\n\n const [columnsNode, optionsNode] = call.arguments;\n const columns: Record<string, string | number>[] = [];\n if (ts.is.stringLiteral(columnsNode)) {\n columns.push({ column: columnsNode.text });\n } else if (ts.is.arrayLiteral(columnsNode)) {\n for (const node of columnsNode.elements) {\n if (ts.is.stringLiteral(node)) {\n columns.push({ column: node.text });\n } else if (ts.is.objectLiteral(node)) {\n const object = collectObjectFromCode(node);\n if (!object) return;\n columns.push(object);\n }\n }\n } else {\n return;\n }\n\n const options =\n (ts.is.objectLiteral(optionsNode) && collectObjectFromCode(optionsNode)) ||\n {};\n\n for (const item of items) {\n if (\n deepCompare(columns, item.columns) &&\n deepCompare(options, item.options)\n ) {\n removeProp(context, prop, i);\n }\n }\n};\n\nconst dropMatchingForeignKey = (\n context: ChangeContext,\n prop: ObjectLiteralElementLike,\n i: number,\n call: CallExpression,\n items?: TableData.Constraint[],\n) => {\n if (!items?.length) return;\n\n const existing = parseReferencesArgs(context, call.arguments);\n if (!existing) return;\n\n for (const item of items) {\n if (compareReferences(existing, item.references))\n removeProp(context, prop, i);\n }\n};\n\nconst parseReferencesArgs = (\n context: ChangeContext,\n args: NodeArray<Expression>,\n) => {\n const columns = collectStringArrayFromCode(args[0]);\n if (!columns) return;\n\n const fnOrTableNode = args[1];\n let fnOrTable: string;\n if (ts.is.stringLiteral(fnOrTableNode)) {\n fnOrTable = fnOrTableNode.text;\n } else if (ts.is.arrowFunction(fnOrTableNode)) {\n fnOrTable = context.changes.content\n .slice(fnOrTableNode.pos, fnOrTableNode.end)\n .replaceAll(/\\s/g, '');\n } else {\n return;\n }\n\n const foreignColumns = collectStringArrayFromCode(args[2]);\n if (!foreignColumns) return;\n\n const options =\n (ts.is.objectLiteral(args[3]) && collectObjectFromCode(args[3])) || {};\n\n return { columns, fnOrTable, foreignColumns, options };\n};\n\nconst compareReferences = (\n existing?: TableData.References,\n item?: TableData.References,\n) => {\n if (!item) return;\n\n const itemOptions = item.options ? { ...item.options } : undefined;\n if (itemOptions) {\n delete itemOptions.dropMode;\n }\n\n return (\n deepCompare(existing?.columns, item?.columns) &&\n deepCompare(existing?.fnOrTable, item?.fnOrTable.toString()) &&\n deepCompare(existing?.foreignColumns, item?.foreignColumns) &&\n deepCompare(existing?.options, itemOptions)\n );\n};\n\nconst dropMatchingCheck = (\n context: ChangeContext,\n prop: ObjectLiteralElementLike,\n i: number,\n call: CallExpression,\n items?: TableData.Constraint[],\n) => {\n if (!items?.length) return;\n\n const sql = parseCheckArg(context, call.arguments[0]);\n\n for (const item of items) {\n const { check } = item;\n if (!check) continue;\n\n if (check._sql === sql) {\n removeProp(context, prop, i);\n }\n }\n};\n\nconst parseCheckArg = (context: ChangeContext, arg: Expression) => {\n if (!arg || !ts.is.call(arg)) return;\n\n const { expression } = arg;\n if (\n !ts.is.propertyAccess(expression) ||\n !ts.is.identifier(expression.expression) ||\n expression.expression.escapedText !== context.t ||\n expression.name.escapedText !== 'sql'\n )\n return;\n\n const [obj] = arg.arguments;\n if (!obj || !ts.is.objectLiteral(obj)) return;\n\n for (const prop of obj.properties) {\n if (!ts.is.propertyAssignment(prop)) continue;\n\n const name = ts.prop.getName(prop);\n if (name !== 'raw') continue;\n\n const init = prop.initializer;\n if (!ts.is.stringLiteral(init) || !('text' in init)) continue;\n\n return init.text;\n }\n\n return;\n};\n\nconst dropMatchingConstraint = (\n context: ChangeContext,\n prop: ObjectLiteralElementLike,\n i: number,\n call: CallExpression,\n items?: TableData.Constraint[],\n) => {\n if (!items?.length) return;\n\n const {\n arguments: [arg],\n } = call;\n\n if (!arg || !ts.is.objectLiteral(arg)) return;\n\n const existing: Omit<TableData.Constraint, 'check'> & { check?: string } = {};\n for (const prop of arg.properties) {\n if (!ts.is.propertyAssignment(prop)) return;\n const name = ts.prop.getName(prop);\n if (!name) return;\n\n const init = prop.initializer;\n\n if (name === 'name') {\n if (!ts.is.stringLiteral(init)) return;\n\n existing.name = init.text;\n } else if (name === 'references') {\n if (!ts.is.arrayLiteral(init)) return;\n\n const refs = parseReferencesArgs(context, init.elements);\n if (!refs) return;\n\n existing.references = refs;\n } else if (name === 'check') {\n existing.check = parseCheckArg(context, init);\n }\n }\n\n for (const item of items) {\n if (existing.name !== item.name) continue;\n if (existing.check !== item.check?._sql) continue;\n if (\n (existing.references || item.references) &&\n !compareReferences(existing.references, item.references)\n )\n continue;\n\n removeProp(context, prop, i);\n }\n};\n\nconst collectStringArrayFromCode = (node: Expression) => {\n if (!ts.is.arrayLiteral(node)) return;\n\n const result = node.elements\n .filter(ts.is.stringLiteral)\n .map((item) => item.text);\n\n return result.length === node.elements.length ? result : undefined;\n};\n\nconst collectObjectFromCode = (node: ObjectLiteralExpression) => {\n const object: Record<string, string | number> = {};\n for (const prop of node.properties) {\n if (!ts.is.propertyAssignment(prop)) return;\n const name = ts.prop.getName(prop);\n if (!name) return;\n\n const init = prop.initializer;\n if (ts.is.stringLiteral(init)) {\n object[name] = init.text;\n } else if (ts.is.numericLiteral(init)) {\n object[name] = parseFloat(init.text);\n } else {\n return;\n }\n }\n return object;\n};\n","import { UpdateTableFileParams } from './updateTableFile';\nimport { RakeDbAst } from 'rake-db';\nimport fs from 'fs/promises';\nimport { FileChanges } from '../fileChanges';\nimport { ts } from '../tsUtils';\nimport { Expression } from 'typescript';\nimport { singleQuote, pathToLog, toCamelCase, toPascalCase } from 'orchid-core';\n\nexport const renameTable = async ({\n ast,\n logger,\n ...params\n}: UpdateTableFileParams & { ast: RakeDbAst.RenameType }) => {\n const tablePath = params.tablePath(toCamelCase(ast.from));\n const content = await fs.readFile(tablePath, 'utf-8').catch(() => undefined);\n if (!content) return;\n\n const changes = new FileChanges(content);\n const statements = ts.getStatements(content);\n const className = toPascalCase(ast.from) + 'Table';\n\n const changeSchema = ast.fromSchema !== ast.toSchema;\n\n for (const node of ts.class.iterate(statements)) {\n if (node.name?.escapedText !== className) continue;\n\n const addSchema =\n changeSchema &&\n ast.toSchema &&\n !node.members.some((member) => ts.prop.getName(member) === 'schema');\n\n if (addSchema && ast.toSchema) {\n changes.add(\n node.members.pos,\n `\\n schema = ${singleQuote(ast.toSchema)};`,\n );\n }\n\n for (const member of node.members) {\n const name = ts.prop.getName(member);\n\n if (name !== 'table' && !(changeSchema && name === 'schema')) continue;\n\n const { initializer: value } = member as unknown as {\n initializer?: Expression;\n };\n\n if (!value) continue;\n\n if (name === 'schema') {\n if (ast.toSchema) {\n changes.replace(\n value.pos,\n value.end,\n ` ${singleQuote(ast.toSchema)}`,\n );\n } else {\n changes.remove(member.pos, member.end);\n }\n } else {\n changes.replace(value.pos, value.end, ` ${singleQuote(ast.to)}`);\n }\n }\n }\n\n await fs.writeFile(tablePath, changes.apply());\n logger?.log(`Updated ${pathToLog(tablePath)}`);\n};\n","import { RakeDbAst } from 'rake-db';\nimport { createTable } from './createTable';\nimport { changeTable } from './changeTable';\nimport { renameTable } from './renameTable';\nimport { QueryLogOptions } from 'pqb';\nimport {\n AppCodeUpdaterTables,\n AppCodeUpdaterRelations,\n BaseTableParam,\n AppCodeUpdaterGetTable,\n} from '../appCodeUpdater';\nimport { handleForeignKey } from './handleForeignKey';\n\nexport interface UpdateTableFileParams {\n baseTable: BaseTableParam;\n tablePath: (name: string) => string;\n ast: RakeDbAst;\n logger?: QueryLogOptions['logger'];\n getTable: AppCodeUpdaterGetTable;\n relations: AppCodeUpdaterRelations;\n tables: AppCodeUpdaterTables;\n delayed: (() => Promise<void>)[];\n}\n\nexport const updateTableFile = async (params: UpdateTableFileParams) => {\n const { ast } = params;\n if (ast.type === 'table' && ast.action === 'create') {\n await createTable({ ...params, ast });\n } else if (ast.type === 'changeTable') {\n await changeTable({ ...params, ast });\n } else if (ast.type === 'renameType' && ast.table) {\n await renameTable({ ...params, ast });\n } else if (ast.type === 'constraint' && ast.references) {\n const ref = ast.references;\n if (typeof ref.fnOrTable === 'string') {\n await handleForeignKey({\n getTable: params.getTable,\n relations: params.relations,\n tableName: ast.tableName,\n columns: ref.columns,\n foreignTableName: ref.fnOrTable,\n foreignColumns: ref.foreignColumns,\n });\n }\n }\n};\n","import { AppCodeUpdaterConfig, BaseTableParam } from './appCodeUpdater';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport { pathToLog } from 'orchid-core';\n\ntype CreateBaseTableFileParams = Pick<AppCodeUpdaterConfig, 'logger'> & {\n baseTable: BaseTableParam;\n};\n\nexport const createBaseTableFile = async ({\n baseTable,\n logger,\n}: CreateBaseTableFileParams) => {\n const filePath = baseTable.getFilePath();\n await fs.mkdir(path.dirname(filePath), { recursive: true });\n\n await fs\n .writeFile(\n filePath,\n `import { createBaseTable } from 'orchid-orm';\n\nexport const ${baseTable.exportAs} = createBaseTable();\n`,\n {\n flag: 'wx',\n },\n )\n .then(() => {\n logger?.log(`Created ${pathToLog(filePath)}`);\n })\n .catch((err) => {\n if (err.code === 'EEXIST') return;\n throw err;\n });\n};\n","import {\n AppCodeUpdaterRelations,\n AppCodeUpdaterRelationItem,\n AppCodeUpdaterRelation,\n} from '../appCodeUpdater';\nimport { QueryLogOptions } from 'pqb';\nimport fs from 'fs/promises';\nimport path from 'path';\nimport { FileChanges } from '../fileChanges';\nimport { getImportPath, pathToLog, singleQuote } from 'orchid-core';\nimport { ts } from '../tsUtils';\nimport {\n ClassDeclaration,\n ClassElement,\n Expression,\n NodeArray,\n Statement,\n} from 'typescript';\nimport { pluralize } from 'inflection';\n\nexport type UpdateRelationsParams = {\n relations: AppCodeUpdaterRelations;\n logger?: QueryLogOptions['logger'];\n};\n\ntype Imports = Record<string, string>;\n\nexport const updateRelations = async ({\n relations,\n logger,\n}: UpdateRelationsParams) => {\n await Promise.all(\n Object.entries(relations).map(([tableName, item]) =>\n updateRelationItem(tableName, item, logger),\n ),\n );\n};\n\nconst updateRelationItem = async (\n tableName: string,\n item: AppCodeUpdaterRelationItem,\n logger?: QueryLogOptions['logger'],\n) => {\n const content = await fs.readFile(item.path, 'utf-8').catch(() => undefined);\n if (!content) return;\n\n const changes = new FileChanges(content);\n const statements = ts.getStatements(content);\n const dirName = path.dirname(item.path);\n\n const imports: Imports = {};\n for (const relation of item.relations) {\n if (!imports[relation.path]) {\n imports[relation.path] = relation.className;\n }\n }\n\n let importsEnd = 0;\n for (const node of ts.import.iterate(statements)) {\n const source = ts.import.getSource(node);\n const full = path.join(dirName, source + '.ts');\n if (imports[full]) {\n delete imports[full];\n }\n importsEnd = node.end;\n }\n\n const addImports = Object.entries(imports)\n .map(\n ([path, name]) =>\n `import { ${name} } from '${getImportPath(item.path, path)}';`,\n )\n .join('\\n');\n\n if (addImports) {\n changes.add(importsEnd, `\\n${addImports}`);\n }\n\n const targetClass = findClassByTableName(statements, tableName);\n if (targetClass) {\n const relationsMember = findRelationsMember(targetClass.members);\n if (relationsMember) {\n const { initializer } = relationsMember as {\n initializer?: Expression;\n };\n const takenKeys: Record<string, true> = {};\n if (ts.is.objectLiteral(initializer)) {\n const props = initializer.properties;\n for (const prop of props) {\n const name = prop.name?.getText();\n if (name) takenKeys[name] = true;\n }\n\n const addRelations: string[] = [];\n for (const rel of item.relations) {\n if (!checkRelation(rel)) continue;\n\n const name = makeRelationName(rel);\n if (takenKeys[name]) continue;\n\n addRelations.push(relationToCode(rel));\n }\n\n if (addRelations.length) {\n const pos = props.end;\n changes.add(pos, addRelations.join(''));\n }\n }\n } else {\n changes.add(\n targetClass.end - 1,\n `\\n relations = {${item.relations\n .filter(checkRelation)\n .map((rel) => relationToCode(rel))\n .join('')}\\n };\\n`,\n );\n }\n }\n\n await fs.writeFile(item.path, changes.apply());\n logger?.log(`Updated ${pathToLog(item.path)}`);\n};\n\nconst findClassByTableName = (\n statements: NodeArray<Statement>,\n tableName: string,\n): ClassDeclaration | undefined => {\n for (const node of ts.class.iterate(statements)) {\n for (const member of node.members) {\n const name = ts.prop.getName(member);\n if (name !== 'table') continue;\n\n const { initializer: value } = member as unknown as {\n initializer?: Expression;\n };\n if (!value || !ts.is.stringLiteral(value)) continue;\n\n if (value.text === tableName) {\n return node;\n }\n }\n }\n return;\n};\n\nconst findRelationsMember = (\n members: NodeArray<ClassElement>,\n): ClassElement | undefined => {\n for (const member of members) {\n const name = ts.prop.getName(member);\n if (name === 'relations') return member;\n }\n return;\n};\n\nconst checkRelation = (rel: AppCodeUpdaterRelation): boolean => {\n return rel.columns.length === 1 && rel.foreignColumns.length === 1;\n};\n\nconst makeRelationName = (rel: AppCodeUpdaterRelation): string => {\n return pluralize(\n rel.className[0].toLowerCase() +\n rel.className.slice(1).replace(/Table$/, ''),\n );\n};\n\nconst relationToCode = (\n rel: AppCodeUpdaterRelation,\n name = makeRelationName(rel),\n): string => {\n const code = [`\\n ${name}: this.${rel.kind}(() => ${rel.className}, {`];\n\n const pk = rel[rel.kind === 'hasMany' ? 'columns' : 'foreignColumns'];\n const fk = rel[rel.kind === 'hasMany' ? 'foreignColumns' : 'columns'];\n code.push(\n ` columns: [${pk.map(singleQuote).join(', ')}],`,\n ` references: [${fk.map(singleQuote).join(', ')}],`,\n ' }),',\n );\n\n return code.join('\\n');\n};\n","import { AppCodeUpdater } from 'rake-db';\nimport * as path from 'path';\nimport { updateMainFile } from './updateMainFile';\nimport {\n updateTableFile,\n UpdateTableFileParams,\n} from './updateTableFile/updateTableFile';\nimport { createBaseTableFile } from './createBaseTableFile';\nimport { Db, QueryLogOptions } from 'pqb';\nimport { OrchidORM } from '../orm';\nimport { updateRelations } from './updateTableFile/updateRelations';\n\nexport class AppCodeUpdaterError extends Error {}\n\nexport type AppCodeUpdaterConfig = {\n tablePath(tableName: string): string;\n ormPath: string;\n ormExportedAs?: string;\n logger?: QueryLogOptions['logger'];\n};\n\nexport type BaseTableParam = {\n getFilePath(): string;\n exportAs: string;\n};\n\nexport type AppCodeUpdaterRelations = {\n [Table in string]: AppCodeUpdaterRelationItem;\n};\n\nexport type AppCodeUpdaterRelationItem = {\n path: string;\n relations: AppCodeUpdaterRelation[];\n};\n\nexport type AppCodeUpdaterRelation = {\n kind: 'belongsTo' | 'hasMany';\n className: string;\n path: string;\n columns: string[];\n foreignColumns: string[];\n};\n\nexport type AppCodeUpdaterTableInfo = {\n key: string;\n name: string;\n path: string;\n};\n\nexport type AppCodeUpdaterTables = {\n [TableName in string]: AppCodeUpdaterTableInfo;\n};\n\nexport type AppCodeUpdaterGetTable = (\n tableName: string,\n) => Promise<AppCodeUpdaterTableInfo | undefined>;\n\nconst makeGetTable = (\n path: string,\n ormExportedAs: string,\n tables: AppCodeUpdaterTables,\n imp: (path: string) => Promise<unknown>,\n): AppCodeUpdaterGetTable => {\n let orm: OrchidORM | undefined;\n\n return async (tableName) => {\n if (tables[tableName]) return tables[tableName];\n\n if (!orm) {\n const mod = (await imp(path).catch((err) => {\n if (err.code === 'ERR_UNKNOWN_FILE_EXTENSION') {\n return require(path);\n } else {\n throw err;\n }\n })) as Record<string, OrchidORM>;\n\n orm = mod[ormExportedAs];\n if (!orm) {\n throw new Error(`ORM is not exported as ${ormExportedAs} from ${path}`);\n }\n }\n\n for (const key in orm) {\n const table = orm[key];\n if (\n !table ||\n typeof table !== 'object' ||\n !((table as object) instanceof Db) ||\n (table as Db).table !== tableName\n )\n continue;\n\n const name = (table as { name?: string }).name;\n if (!name) continue;\n\n const path = (table as { getFilePath?(): string }).getFilePath?.();\n if (!path) continue;\n\n return (tables[tableName] = {\n key,\n name,\n path,\n });\n }\n\n return;\n };\n};\n\nexport const appCodeUpdater = ({\n tablePath,\n ormPath,\n ormExportedAs = 'db',\n}: AppCodeUpdaterConfig): AppCodeUpdater => ({\n async process({ ast, options, basePath, logger, baseTable, ...config }) {\n const params: AppCodeUpdaterConfig = {\n tablePath(name: string) {\n const file = tablePath(name);\n return resolvePath(basePath, file);\n },\n ormPath: resolvePath(basePath, ormPath),\n ormExportedAs,\n logger,\n };\n\n const cache = config.cache as {\n createdBaseTable?: true;\n relations?: AppCodeUpdaterRelations;\n tables?: AppCodeUpdaterTables;\n };\n\n cache.relations ??= {};\n cache.tables ??= {};\n\n const getTable = makeGetTable(\n params.ormPath,\n ormExportedAs,\n cache.tables,\n config.import,\n );\n\n // updateMainFile should run before the rest to insert new tables into the orm instance\n // the orm instance will be loaded later for relations\n await updateMainFile(\n params.ormPath,\n params.tablePath,\n ast,\n options,\n logger,\n );\n\n const delayed: UpdateTableFileParams['delayed'] = [];\n\n const promises: Promise<void>[] = [\n updateTableFile({\n ...params,\n ast,\n baseTable,\n getTable,\n relations: cache.relations,\n tables: cache.tables,\n delayed,\n }),\n ];\n\n if (!cache.createdBaseTable) {\n promises.push(\n createBaseTableFile({ logger: params.logger, baseTable }).then(() => {\n cache.createdBaseTable = true;\n }),\n );\n }\n\n await Promise.all(promises);\n await Promise.all(delayed.map((fn) => fn()));\n },\n\n async afterAll({ cache, logger }) {\n const { relations } = cache as {\n relations?: AppCodeUpdaterRelations;\n };\n if (!relations) return;\n\n await updateRelations({\n relations,\n logger,\n });\n },\n});\n\nconst resolvePath = (basePath: string, filePath: string) =>\n path.isAbsolute(filePath) ? filePath : path.resolve(basePath, filePath);\n"],"names":["content","createTable","path","__objRest","imports","code","__spreadValues","prop","_a","__spreadProps","_b"],"mappings":"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"}