rake-db 2.2.1 → 2.2.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,20 @@
1
1
  # rake-db
2
2
 
3
+ ## 2.2.3
4
+
5
+ ### Patch Changes
6
+
7
+ - Updated dependencies
8
+ - pqb@0.8.3
9
+
10
+ ## 2.2.2
11
+
12
+ ### Patch Changes
13
+
14
+ - Add code generator to change project files after migrations
15
+ - Updated dependencies
16
+ - pqb@0.8.2
17
+
3
18
  ## 2.2.1
4
19
 
5
20
  ### Patch Changes
package/dist/index.esm.js CHANGED
@@ -882,6 +882,9 @@ class UnknownColumn extends ColumnType {
882
882
  this.dataType = dataType;
883
883
  this.operators = Operators.any;
884
884
  }
885
+ toCode() {
886
+ return "unknown";
887
+ }
885
888
  }
886
889
  const createJoinTable = async (migration, up, tables, options, fn) => {
887
890
  const tableName = options.tableName || joinWords(...tables);
@@ -1 +1 @@
1
- {"version":3,"file":"index.esm.js","sources":["../src/common.ts","../src/migration/change.ts","../src/migration/migrationUtils.ts","../src/migration/createTable.ts","../src/migration/changeTable.ts","../src/migration/createJoinTable.ts","../src/migration/migration.ts","../src/commands/migrateOrRollback.ts","../src/commands/createOrDrop.ts","../src/commands/generate.ts","../src/rakeDb.ts"],"sourcesContent":["import {\n Adapter,\n AdapterOptions,\n NoPrimaryKeyOption,\n QueryLogOptions,\n} from 'pqb';\nimport Enquirer from 'enquirer';\nimport path from 'path';\nimport { readdir } from 'fs/promises';\nimport { RakeDbAst } from './ast';\n\nexport type RakeDbConfig = {\n migrationsPath: string;\n migrationsTable: string;\n requireTs(path: string): void;\n noPrimaryKey?: NoPrimaryKeyOption;\n appCodeUpdater?: AppCodeUpdater;\n} & QueryLogOptions;\n\nexport type AppCodeUpdater = (ast: RakeDbAst) => Promise<void>;\n\nexport const migrationConfigDefaults = {\n migrationsPath: path.resolve(process.cwd(), 'src', 'migrations'),\n migrationsTable: 'schemaMigrations',\n requireTs: require,\n log: true,\n logger: console,\n};\n\nexport const getMigrationConfigWithDefaults = (\n config: Partial<RakeDbConfig>,\n) => {\n return { ...migrationConfigDefaults, ...config };\n};\n\nexport const getDatabaseAndUserFromOptions = (\n options: AdapterOptions,\n): { database: string; user: string } => {\n if (options.databaseURL) {\n const url = new URL(options.databaseURL);\n return {\n database: url.pathname.slice(1),\n user: url.username,\n };\n } else {\n return {\n database: options.database as string,\n user: options.user as string,\n };\n }\n};\n\nexport const setAdapterOptions = (\n options: AdapterOptions,\n set: { database?: string; user?: string; password?: string },\n): AdapterOptions => {\n if (options.databaseURL) {\n const url = new URL(options.databaseURL);\n\n if ('database' in set) {\n url.pathname = `/${set.database}`;\n }\n\n if (set.user !== undefined) {\n url.username = set.user;\n }\n\n if (set.password !== undefined) {\n url.password = set.password;\n }\n\n return { ...options, databaseURL: url.toString() };\n } else {\n return {\n ...options,\n ...set,\n };\n }\n};\n\nconst askAdminCredentials = async (): Promise<{\n user: string;\n password: string;\n}> => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const prompt = new (Enquirer as any).Snippet({\n message: `What are postgres admin login and password?`,\n fields: [\n {\n name: 'user',\n required: true,\n },\n {\n name: 'password',\n },\n ],\n values: {\n user: 'postgres',\n password: '',\n },\n template: 'Admin user: {{user}}\\nAdmin password: {{password}}',\n });\n\n const { values } = await prompt.run();\n if (!values.password) values.password = '';\n\n return values;\n};\n\nexport const setAdminCredentialsToOptions = async (\n options: AdapterOptions,\n): Promise<AdapterOptions> => {\n const values = await askAdminCredentials();\n return setAdapterOptions(options, values);\n};\n\nexport const createSchemaMigrations = async (\n db: Adapter,\n config: RakeDbConfig,\n) => {\n try {\n await db.query(\n `CREATE TABLE ${quoteTable(\n config.migrationsTable,\n )} ( version TEXT NOT NULL )`,\n );\n console.log('Created versions table');\n } catch (err) {\n if ((err as Record<string, unknown>).code === '42P07') {\n console.log('Versions table exists');\n } else {\n throw err;\n }\n }\n};\n\nexport const getFirstWordAndRest = (\n input: string,\n): [string] | [string, string] => {\n const index = input.search(/(?=[A-Z])|[-_]/);\n if (index !== -1) {\n const restStart =\n input[index] === '-' || input[index] === '_' ? index + 1 : index;\n const rest = input.slice(restStart);\n return [input.slice(0, index), rest[0].toLowerCase() + rest.slice(1)];\n } else {\n return [input];\n }\n};\n\nconst getTextAfterRegExp = (\n input: string,\n regex: RegExp,\n length: number,\n): string | undefined => {\n let index = input.search(regex);\n if (index === -1) return;\n\n if (input[index] === '-' || input[index] === '_') index++;\n index += length;\n\n const start = input[index] == '-' || input[index] === '_' ? index + 1 : index;\n const text = input.slice(start);\n return text[0].toLowerCase() + text.slice(1);\n};\n\nexport const getTextAfterTo = (input: string): string | undefined => {\n return getTextAfterRegExp(input, /(To|-to|_to)[A-Z-_]/, 2);\n};\n\nexport const getTextAfterFrom = (input: string): string | undefined => {\n return getTextAfterRegExp(input, /(From|-from|_from)[A-Z-_]/, 4);\n};\n\nexport type MigrationFile = {\n path: string;\n version: string;\n};\n\nexport const getMigrationFiles = async (\n config: RakeDbConfig,\n up: boolean,\n): Promise<MigrationFile[]> => {\n const { migrationsPath } = config;\n\n let files: string[];\n try {\n files = await readdir(migrationsPath);\n } catch (_) {\n return [];\n }\n\n const sort = up ? sortAsc : sortDesc;\n return sort(files).map((file) => {\n if (!file.endsWith('.ts')) {\n throw new Error(\n `Only .ts files are supported for migration, received: ${file}`,\n );\n }\n\n const timestampMatch = file.match(/^(\\d{14})\\D/);\n if (!timestampMatch) {\n throw new Error(\n `Migration file name should start with 14 digit version, received ${file}`,\n );\n }\n\n return {\n path: path.join(migrationsPath, file),\n version: timestampMatch[1],\n };\n });\n};\n\nexport const sortAsc = (arr: string[]) => arr.sort();\n\nexport const sortDesc = (arr: string[]) => arr.sort((a, b) => (a > b ? -1 : 1));\n\nexport const joinWords = (...words: string[]) => {\n return words\n .slice(1)\n .reduce(\n (acc, word) => acc + word[0].toUpperCase() + word.slice(1),\n words[0],\n );\n};\n\nexport const joinColumns = (columns: string[]) => {\n return columns.map((column) => `\"${column}\"`).join(', ');\n};\n\nexport const quoteTable = (table: string) => {\n const index = table.indexOf('.');\n if (index !== -1) {\n return `\"${table.slice(0, index)}\".\"${table.slice(index + 1)}\"`;\n } else {\n return `\"${table}\"`;\n }\n};\n","import { Migration } from './migration';\n\nlet currentMigration: Migration | undefined;\nlet currentPromise: Promise<void> | undefined;\nlet currentUp = true;\nlet currentChangeCallback: ChangeCallback | undefined;\n\nexport type ChangeCallback = (db: Migration, up: boolean) => Promise<void>;\n\nexport const change = (fn: ChangeCallback) => {\n if (!currentMigration) throw new Error('Database instance is not set');\n currentPromise = fn(currentMigration, currentUp);\n currentChangeCallback = fn;\n};\n\nexport const setCurrentMigration = (db: Migration) => {\n currentMigration = db;\n};\n\nexport const setCurrentMigrationUp = (up: boolean) => {\n currentUp = up;\n};\n\nexport const getCurrentPromise = () => currentPromise;\n\nexport const getCurrentChangeCallback = () => currentChangeCallback;\n","import {\n ColumnType,\n ForeignKeyTable,\n ForeignKeyOptions,\n getRaw,\n isRaw,\n quote,\n Sql,\n TableData,\n toArray,\n} from 'pqb';\nimport { ColumnComment, Migration } from './migration';\nimport { joinColumns, joinWords, quoteTable } from '../common';\n\nexport const columnToSql = (\n key: string,\n item: ColumnType,\n values: unknown[],\n hasMultiplePrimaryKeys: boolean,\n): string => {\n const line = [`\"${key}\" ${item.toSQL()}`];\n\n if (item.data.compression) {\n line.push(`COMPRESSION ${item.data.compression}`);\n }\n\n if (item.data.collate) {\n line.push(`COLLATE ${quote(item.data.collate)}`);\n }\n\n if (item.isPrimaryKey && !hasMultiplePrimaryKeys) {\n line.push('PRIMARY KEY');\n } else if (!item.isNullable) {\n line.push('NOT NULL');\n }\n\n if (item.data.default !== undefined) {\n if (\n typeof item.data.default === 'object' &&\n item.data.default &&\n isRaw(item.data.default)\n ) {\n line.push(`DEFAULT ${getRaw(item.data.default, values)}`);\n } else {\n line.push(`DEFAULT ${quote(item.data.default)}`);\n }\n }\n\n const { foreignKey } = item.data;\n if (foreignKey) {\n const table = getForeignKeyTable(\n 'fn' in foreignKey ? foreignKey.fn : foreignKey.table,\n );\n\n if (foreignKey.name) {\n line.push(`CONSTRAINT \"${foreignKey.name}\"`);\n }\n\n line.push(referencesToSql(table, foreignKey.columns, foreignKey));\n }\n\n return line.join(' ');\n};\n\nexport const addColumnIndex = (\n indexes: TableData.Index[],\n key: string,\n item: ColumnType,\n) => {\n if (item.data) {\n if (item.data.index) {\n indexes.push({\n columns: [{ ...item.data.index, column: key }],\n options: item.data.index,\n });\n }\n }\n};\n\nexport const addColumnComment = (\n comments: ColumnComment[],\n key: string,\n item: ColumnType,\n) => {\n if (item.data.comment) {\n comments.push({ column: key, comment: item.data.comment });\n }\n};\n\nexport const getForeignKeyTable = (\n fnOrTable: (() => ForeignKeyTable) | string,\n) => {\n if (typeof fnOrTable === 'string') {\n return fnOrTable;\n }\n\n const klass = fnOrTable();\n return new klass().table;\n};\n\nexport const constraintToSql = (\n tableName: string,\n up: boolean,\n foreignKey: TableData['foreignKeys'][number],\n) => {\n const constraintName =\n foreignKey.options.name ||\n `${tableName}_${foreignKey.columns.join('_')}_fkey`;\n\n if (!up) {\n const { dropMode } = foreignKey.options;\n return `CONSTRAINT \"${constraintName}\"${dropMode ? ` ${dropMode}` : ''}`;\n }\n\n const table = getForeignKeyTable(foreignKey.fnOrTable);\n return `CONSTRAINT \"${constraintName}\" FOREIGN KEY (${joinColumns(\n foreignKey.columns,\n )}) ${referencesToSql(table, foreignKey.foreignColumns, foreignKey.options)}`;\n};\n\nexport const referencesToSql = (\n table: string,\n columns: string[],\n foreignKey: Pick<ForeignKeyOptions, 'match' | 'onDelete' | 'onUpdate'>,\n) => {\n const sql: string[] = [\n `REFERENCES ${quoteTable(table)}(${joinColumns(columns)})`,\n ];\n\n if (foreignKey.match) {\n sql.push(`MATCH ${foreignKey.match.toUpperCase()}`);\n }\n\n if (foreignKey.onDelete) {\n sql.push(`ON DELETE ${foreignKey.onDelete.toUpperCase()}`);\n }\n\n if (foreignKey.onUpdate) {\n sql.push(`ON UPDATE ${foreignKey.onUpdate.toUpperCase()}`);\n }\n\n return sql.join(' ');\n};\n\nexport const indexesToQuery = (\n up: boolean,\n tableName: string,\n indexes: TableData.Index[],\n): Sql[] => {\n return indexes.map(({ columns, options }) => {\n const indexName =\n options.name ||\n joinWords(tableName, ...columns.map(({ column }) => column), 'index');\n\n if (!up) {\n return {\n text: `DROP INDEX \"${indexName}\"${\n options.dropMode ? ` ${options.dropMode}` : ''\n }`,\n values: [],\n };\n }\n\n const values: unknown[] = [];\n\n const sql: string[] = ['CREATE'];\n\n if (options.unique) {\n sql.push('UNIQUE');\n }\n\n sql.push(`INDEX \"${indexName}\" ON ${quoteTable(tableName)}`);\n\n if (options.using) {\n sql.push(`USING ${options.using}`);\n }\n\n const columnsSql: string[] = [];\n\n columns.forEach((column) => {\n const columnSql: string[] = [\n `\"${column.column}\"${\n column.expression ? `(${column.expression})` : ''\n }`,\n ];\n\n if (column.collate) {\n columnSql.push(`COLLATE '${column.collate}'`);\n }\n\n if (column.operator) {\n columnSql.push(column.operator);\n }\n\n if (column.order) {\n columnSql.push(column.order);\n }\n\n columnsSql.push(columnSql.join(' '));\n });\n\n sql.push(`(${columnsSql.join(', ')})`);\n\n if (options.include) {\n sql.push(\n `INCLUDE (${toArray(options.include)\n .map((column) => `\"${column}\"`)\n .join(', ')})`,\n );\n }\n\n if (options.with) {\n sql.push(`WITH (${options.with})`);\n }\n\n if (options.tablespace) {\n sql.push(`TABLESPACE ${options.tablespace}`);\n }\n\n if (options.where) {\n sql.push(\n `WHERE ${\n typeof options.where === 'object' &&\n options.where &&\n isRaw(options.where)\n ? getRaw(options.where, values)\n : options.where\n }`,\n );\n }\n\n return { text: sql.join(' '), values };\n });\n};\n\nexport const commentsToQuery = (\n tableName: string,\n comments: ColumnComment[],\n): Sql[] => {\n return comments.map(({ column, comment }) => ({\n text: `COMMENT ON COLUMN ${quoteTable(tableName)}.\"${column}\" IS ${quote(\n comment,\n )}`,\n values: [],\n }));\n};\n\nexport const primaryKeyToSql = (\n primaryKey: Exclude<TableData['primaryKey'], undefined>,\n) => {\n const name = primaryKey.options?.name;\n return `${name ? `CONSTRAINT \"${name}\" ` : ''}PRIMARY KEY (${joinColumns(\n primaryKey.columns,\n )})`;\n};\n\nexport const getPrimaryKeysOfTable = async (\n db: Migration,\n tableName: string,\n): Promise<{ name: string; type: string }[]> => {\n const { rows } = await db.query<{ name: string; type: string }>(\n {\n text: `SELECT\n pg_attribute.attname AS name,\n format_type(pg_attribute.atttypid, pg_attribute.atttypmod) AS type\nFROM pg_index, pg_class, pg_attribute, pg_namespace\nWHERE\n pg_class.oid = $1::regclass AND\n indrelid = pg_class.oid AND\n nspname = 'public' AND\n pg_class.relnamespace = pg_namespace.oid AND\n pg_attribute.attrelid = pg_class.oid AND\n pg_attribute.attnum = any(pg_index.indkey) AND\n indisprimary`,\n values: [tableName],\n },\n db.types,\n undefined,\n );\n\n return rows;\n};\n","import {\n ColumnsShape,\n columnTypes,\n getColumnTypes,\n getTableData,\n NoPrimaryKeyOption,\n quote,\n raw,\n Sql,\n TableData,\n} from 'pqb';\nimport {\n ColumnComment,\n ColumnsShapeCallback,\n Migration,\n TableOptions,\n} from './migration';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n commentsToQuery,\n constraintToSql,\n indexesToQuery,\n primaryKeyToSql,\n} from './migrationUtils';\nimport { quoteTable } from '../common';\nimport { RakeDbAst } from '../ast';\n\nconst types = Object.assign(Object.create(columnTypes), {\n raw,\n});\n\nexport const createTable = async (\n migration: Migration,\n up: boolean,\n tableName: string,\n options: TableOptions,\n fn: ColumnsShapeCallback,\n) => {\n const shape = getColumnTypes(types, fn);\n const tableData = getTableData();\n const ast = makeAst(\n up,\n tableName,\n shape,\n tableData,\n options,\n migration.options.noPrimaryKey,\n );\n\n validatePrimaryKey(ast);\n\n const queries = astToQueries(ast);\n for (const query of queries) {\n await migration.query(query);\n }\n\n await migration.options.appCodeUpdater?.(ast);\n};\n\nconst makeAst = (\n up: boolean,\n tableName: string,\n shape: ColumnsShape,\n tableData: TableData,\n options: TableOptions,\n noPrimaryKey?: NoPrimaryKeyOption,\n): RakeDbAst.Table => {\n const shapePKeys: string[] = [];\n for (const key in shape) {\n if (shape[key].isPrimaryKey) {\n shapePKeys.push(key);\n }\n }\n\n const primaryKey = tableData.primaryKey;\n\n return {\n type: 'table',\n action: up ? 'create' : 'drop',\n name: tableName,\n shape,\n ...tableData,\n primaryKey:\n shapePKeys.length <= 1\n ? primaryKey\n : primaryKey\n ? { ...primaryKey, columns: [...shapePKeys, ...primaryKey.columns] }\n : { columns: shapePKeys },\n ...options,\n noPrimaryKey: options.noPrimaryKey ? 'ignore' : noPrimaryKey || 'error',\n };\n};\n\nconst validatePrimaryKey = (ast: RakeDbAst.Table) => {\n if (ast.noPrimaryKey !== 'ignore') {\n let hasPrimaryKey = !!ast.primaryKey?.columns?.length;\n if (!hasPrimaryKey) {\n for (const key in ast.shape) {\n if (ast.shape[key].isPrimaryKey) {\n hasPrimaryKey = true;\n break;\n }\n }\n }\n\n if (!hasPrimaryKey) {\n const message = `Table ${ast.name} has no primary key`;\n if (ast.noPrimaryKey === 'error') {\n throw new Error(message);\n } else {\n console.warn(message);\n }\n }\n }\n};\n\nconst astToQueries = (ast: RakeDbAst.Table): Sql[] => {\n if (ast.action === 'drop') {\n return [\n {\n text: `DROP TABLE ${quoteTable(ast.name)}${\n ast.dropMode ? ` ${ast.dropMode}` : ''\n }`,\n values: [],\n },\n ];\n }\n\n const lines: string[] = [];\n const values: unknown[] = [];\n const indexes: TableData.Index[] = [];\n const comments: ColumnComment[] = [];\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n addColumnIndex(indexes, key, item);\n addColumnComment(comments, key, item);\n lines.push(`\\n ${columnToSql(key, item, values, !!ast.primaryKey)}`);\n }\n\n if (ast.primaryKey) {\n lines.push(`\\n ${primaryKeyToSql(ast.primaryKey)}`);\n }\n\n ast.foreignKeys.forEach((foreignKey) => {\n lines.push(`\\n ${constraintToSql(ast.name, true, foreignKey)}`);\n });\n\n indexes.push(...ast.indexes);\n\n const result: Sql[] = [\n {\n text: `CREATE TABLE ${quoteTable(ast.name)} (${lines.join(',')}\\n)`,\n values,\n },\n ...indexesToQuery(true, ast.name, indexes),\n ...commentsToQuery(ast.name, comments),\n ];\n\n if (ast.comment) {\n result.push({\n text: `COMMENT ON TABLE ${quoteTable(ast.name)} IS ${quote(ast.comment)}`,\n values: [],\n });\n }\n\n return result;\n};\n","import {\n ColumnType,\n resetTableData,\n getTableData,\n EmptyObject,\n emptyObject,\n TableData,\n RawExpression,\n raw,\n columnTypes,\n Sql,\n quote,\n getRaw,\n isRaw,\n} from 'pqb';\nimport {\n ChangeTableCallback,\n ChangeTableOptions,\n ColumnComment,\n DropMode,\n Migration,\n MigrationColumnTypes,\n} from './migration';\nimport { RakeDbAst } from '../ast';\nimport { quoteTable } from '../common';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n commentsToQuery,\n constraintToSql,\n indexesToQuery,\n primaryKeyToSql,\n} from './migrationUtils';\n\ntype ChangeTableData = { add: TableData; drop: TableData };\nconst newChangeTableData = (): ChangeTableData => ({\n add: { indexes: [], foreignKeys: [] },\n drop: { indexes: [], foreignKeys: [] },\n});\n\nlet changeTableData = newChangeTableData();\n\nconst resetChangeTableData = () => {\n changeTableData = newChangeTableData();\n};\n\nconst mergeTableData = (a: TableData, b: TableData) => {\n if (b.primaryKey) {\n if (!a.primaryKey) {\n a.primaryKey = b.primaryKey;\n } else {\n a.primaryKey = {\n columns: [...a.primaryKey.columns, ...b.primaryKey.columns],\n options: { ...a.primaryKey.options, ...b.primaryKey.options },\n };\n }\n }\n a.indexes = [...a.indexes, ...b.indexes];\n a.foreignKeys = [...a.foreignKeys, ...b.foreignKeys];\n};\n\nfunction add(\n item: ColumnType,\n options?: { dropMode?: DropMode },\n): RakeDbAst.ChangeTableItem.Column;\nfunction add(emptyObject: EmptyObject): EmptyObject;\nfunction add(\n items: Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n): Record<string, RakeDbAst.ChangeTableItem.Column>;\nfunction add(\n item: ColumnType | EmptyObject | Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n):\n | RakeDbAst.ChangeTableItem.Column\n | EmptyObject\n | Record<string, RakeDbAst.ChangeTableItem.Column> {\n if (item instanceof ColumnType) {\n return { type: 'add', item, dropMode: options?.dropMode };\n } else if (item === emptyObject) {\n mergeTableData(changeTableData.add, getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, RakeDbAst.ChangeTableItem.Column> = {};\n for (const key in item) {\n result[key] = {\n type: 'add',\n item: (item as Record<string, ColumnType>)[key],\n dropMode: options?.dropMode,\n };\n }\n return result;\n }\n}\n\nconst drop = ((item, options) => {\n if (item instanceof ColumnType) {\n return { type: 'drop', item, dropMode: options?.dropMode };\n } else if (item === emptyObject) {\n mergeTableData(changeTableData.drop, getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, RakeDbAst.ChangeTableItem.Column> = {};\n for (const key in item) {\n result[key] = {\n type: 'drop',\n item: (item as Record<string, ColumnType>)[key],\n dropMode: options?.dropMode,\n };\n }\n return result;\n }\n}) as typeof add;\n\ntype Change = RakeDbAst.ChangeTableItem.Change & ChangeOptions;\n\ntype ChangeOptions = {\n usingUp?: RawExpression;\n usingDown?: RawExpression;\n};\n\nconst columnTypeToColumnChange = (\n item: ColumnType | Change,\n): RakeDbAst.ColumnChange => {\n if (item instanceof ColumnType) {\n const foreignKey = item.data.foreignKey;\n if (foreignKey && 'fn' in foreignKey) {\n throw new Error('Callback in foreignKey is not allowed in migration');\n }\n\n return {\n column: item,\n type: item.toSQL(),\n nullable: item.isNullable,\n primaryKey: item.isPrimaryKey,\n ...item.data,\n foreignKey,\n };\n }\n\n return item.to;\n};\n\ntype TableChangeMethods = typeof tableChangeMethods;\nconst tableChangeMethods = {\n raw: raw,\n add,\n drop,\n change(\n from: ColumnType | Change,\n to: ColumnType | Change,\n options?: ChangeOptions,\n ): Change {\n return {\n type: 'change',\n from: columnTypeToColumnChange(from),\n to: columnTypeToColumnChange(to),\n ...options,\n };\n },\n default(value: unknown | RawExpression): Change {\n return { type: 'change', from: { default: null }, to: { default: value } };\n },\n nullable(): Change {\n return {\n type: 'change',\n from: { nullable: false },\n to: { nullable: true },\n };\n },\n nonNullable(): Change {\n return {\n type: 'change',\n from: { nullable: true },\n to: { nullable: false },\n };\n },\n comment(comment: string | null): Change {\n return { type: 'change', from: { comment: null }, to: { comment } };\n },\n rename(name: string): RakeDbAst.ChangeTableItem.Rename {\n return { type: 'rename', name };\n },\n};\n\nexport type TableChanger = MigrationColumnTypes & TableChangeMethods;\n\nexport type TableChangeData = Record<\n string,\n | RakeDbAst.ChangeTableItem.Column\n | RakeDbAst.ChangeTableItem.Rename\n | Change\n | EmptyObject\n>;\n\nexport const changeTable = async (\n migration: Migration,\n up: boolean,\n tableName: string,\n options: ChangeTableOptions,\n fn?: ChangeTableCallback,\n) => {\n resetTableData();\n resetChangeTableData();\n\n const tableChanger = Object.create(columnTypes) as TableChanger;\n Object.assign(tableChanger, tableChangeMethods);\n\n const changeData = fn?.(tableChanger) || {};\n\n const ast = makeAst(up, tableName, changeData, changeTableData, options);\n\n const queries = astToQueries(ast);\n for (const query of queries) {\n await migration.query(query);\n }\n\n await migration.options.appCodeUpdater?.(ast);\n};\n\nconst makeAst = (\n up: boolean,\n name: string,\n changeData: TableChangeData,\n changeTableData: ChangeTableData,\n options: ChangeTableOptions,\n): RakeDbAst.ChangeTable => {\n const { comment } = options;\n\n const shape: Record<string, RakeDbAst.ChangeTableItem> = {};\n for (const key in changeData) {\n const item = changeData[key];\n if ('type' in item) {\n if (up) {\n shape[key] =\n item.type === 'change' && item.usingUp\n ? { ...item, using: item.usingUp }\n : item;\n } else {\n if (item.type === 'rename') {\n shape[item.name] = { ...item, name: key };\n } else {\n shape[key] =\n item.type === 'add'\n ? { ...item, type: 'drop' }\n : item.type === 'drop'\n ? { ...item, type: 'add' }\n : item.type === 'change'\n ? { ...item, from: item.to, to: item.from, using: item.usingDown }\n : item;\n }\n }\n }\n }\n\n return {\n type: 'changeTable',\n name,\n comment: comment\n ? up\n ? Array.isArray(comment)\n ? comment[1]\n : comment\n : Array.isArray(comment)\n ? comment[0]\n : null\n : undefined,\n shape,\n ...(up\n ? changeTableData\n : { add: changeTableData.drop, drop: changeTableData.add }),\n };\n};\n\ntype PrimaryKeys = {\n columns: string[];\n change?: true;\n options?: { name?: string };\n};\n\nconst astToQueries = (ast: RakeDbAst.ChangeTable): Sql[] => {\n const result: Sql[] = [];\n\n if (ast.comment !== undefined) {\n result.push({\n text: `COMMENT ON TABLE ${quoteTable(ast.name)} IS ${quote(ast.comment)}`,\n values: [],\n });\n }\n\n const addPrimaryKeys: PrimaryKeys = ast.add.primaryKey\n ? { ...ast.add.primaryKey }\n : {\n columns: [],\n };\n const dropPrimaryKeys: PrimaryKeys = ast.drop.primaryKey\n ? { ...ast.drop.primaryKey }\n : {\n columns: [],\n };\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n\n if (item.type === 'add') {\n if (item.item.isPrimaryKey) {\n addPrimaryKeys.columns.push(key);\n }\n } else if (item.type === 'drop') {\n if (item.item.isPrimaryKey) {\n dropPrimaryKeys.columns.push(key);\n }\n } else if (item.type === 'change') {\n if (item.from.primaryKey) {\n dropPrimaryKeys.columns.push(key);\n dropPrimaryKeys.change = true;\n }\n\n if (item.to.primaryKey) {\n addPrimaryKeys.columns.push(key);\n addPrimaryKeys.change = true;\n }\n }\n }\n\n const alterTable: string[] = [];\n const values: unknown[] = [];\n const addIndexes: TableData.Index[] = [...ast.add.indexes];\n const dropIndexes: TableData.Index[] = [...ast.drop.indexes];\n const addForeignKeys: TableData.ForeignKey[] = [...ast.add.foreignKeys];\n const dropForeignKeys: TableData.ForeignKey[] = [...ast.drop.foreignKeys];\n const comments: ColumnComment[] = [];\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n\n if (item.type === 'add') {\n addColumnIndex(addIndexes, key, item.item);\n addColumnComment(comments, key, item.item);\n\n alterTable.push(\n `ADD COLUMN ${columnToSql(\n key,\n item.item,\n values,\n addPrimaryKeys.columns.length > 1,\n )}`,\n );\n } else if (item.type === 'drop') {\n addColumnIndex(dropIndexes, key, item.item);\n\n alterTable.push(\n `DROP COLUMN \"${key}\"${item.dropMode ? ` ${item.dropMode}` : ''}`,\n );\n } else if (item.type === 'change') {\n const { from, to } = item;\n if (from.type !== to.type || from.collate !== to.collate) {\n alterTable.push(\n `ALTER COLUMN \"${key}\" TYPE ${to.type}${\n to.collate ? ` COLLATE ${quote(to.collate)}` : ''\n }${item.using ? ` USING ${getRaw(item.using, values)}` : ''}`,\n );\n }\n\n if (from.default !== to.default) {\n const value =\n typeof to.default === 'object' && to.default && isRaw(to.default)\n ? getRaw(to.default, values)\n : quote(to.default);\n\n const expr =\n value === undefined ? 'DROP DEFAULT' : `SET DEFAULT ${value}`;\n\n alterTable.push(`ALTER COLUMN \"${key}\" ${expr}`);\n }\n\n if (from.nullable !== to.nullable) {\n alterTable.push(\n `ALTER COLUMN \"${key}\" ${to.nullable ? 'DROP' : 'SET'} NOT NULL`,\n );\n }\n\n if (from.compression !== to.compression) {\n alterTable.push(\n `ALTER COLUMN \"${key}\" SET COMPRESSION ${\n to.compression || 'DEFAULT'\n }`,\n );\n }\n\n const fromFkey = from.foreignKey;\n const toFkey = to.foreignKey;\n if (\n (fromFkey || toFkey) &&\n (!fromFkey ||\n !toFkey ||\n fromFkey.name !== toFkey.name ||\n fromFkey.match !== toFkey.match ||\n fromFkey.onUpdate !== toFkey.onUpdate ||\n fromFkey.onDelete !== toFkey.onDelete ||\n fromFkey.dropMode !== toFkey.dropMode ||\n fromFkey.table !== toFkey.table ||\n fromFkey.columns.join(',') !== toFkey.columns.join(','))\n ) {\n if (fromFkey) {\n dropForeignKeys.push({\n columns: [key],\n fnOrTable: fromFkey.table,\n foreignColumns: fromFkey.columns,\n options: fromFkey,\n });\n }\n\n if (toFkey) {\n addForeignKeys.push({\n columns: [key],\n fnOrTable: toFkey.table,\n foreignColumns: toFkey.columns,\n options: toFkey,\n });\n }\n }\n\n const fromIndex = from.index;\n const toIndex = to.index;\n if (\n (fromIndex || toIndex) &&\n (!fromIndex ||\n !toIndex ||\n fromIndex.expression !== toIndex.expression ||\n fromIndex.collate !== toIndex.collate ||\n fromIndex.operator !== toIndex.operator ||\n fromIndex.order !== toIndex.order ||\n fromIndex.name !== toIndex.name ||\n fromIndex.unique !== toIndex.unique ||\n fromIndex.using !== toIndex.using ||\n fromIndex.include !== toIndex.include ||\n (Array.isArray(fromIndex.include) &&\n Array.isArray(toIndex.include) &&\n fromIndex.include.join(',') !== toIndex.include.join(',')) ||\n fromIndex.with !== toIndex.with ||\n fromIndex.tablespace !== toIndex.tablespace ||\n fromIndex.where !== toIndex.where ||\n fromIndex.dropMode !== toIndex.dropMode)\n ) {\n if (fromIndex) {\n dropIndexes.push({\n columns: [\n {\n column: key,\n ...fromIndex,\n },\n ],\n options: fromIndex,\n });\n }\n\n if (toIndex) {\n addIndexes.push({\n columns: [\n {\n column: key,\n ...toIndex,\n },\n ],\n options: toIndex,\n });\n }\n }\n\n if (from.comment !== to.comment) {\n comments.push({ column: key, comment: to.comment || null });\n }\n } else if (item.type === 'rename') {\n alterTable.push(`RENAME COLUMN \"${key}\" TO \"${item.name}\"`);\n }\n }\n\n const prependAlterTable: string[] = [];\n\n if (\n ast.drop.primaryKey ||\n dropPrimaryKeys.change ||\n dropPrimaryKeys.columns.length > 1\n ) {\n const name = dropPrimaryKeys.options?.name || `${ast.name}_pkey`;\n prependAlterTable.push(`DROP CONSTRAINT \"${name}\"`);\n }\n\n prependAlterTable.push(\n ...dropForeignKeys.map(\n (foreignKey) => `\\n DROP ${constraintToSql(ast.name, false, foreignKey)}`,\n ),\n );\n\n alterTable.unshift(...prependAlterTable);\n\n if (\n ast.add.primaryKey ||\n addPrimaryKeys.change ||\n addPrimaryKeys.columns.length > 1\n ) {\n alterTable.push(`ADD ${primaryKeyToSql(addPrimaryKeys)}`);\n }\n\n alterTable.push(\n ...addForeignKeys.map(\n (foreignKey) => `\\n ADD ${constraintToSql(ast.name, true, foreignKey)}`,\n ),\n );\n\n if (alterTable.length) {\n result.push({\n text:\n `ALTER TABLE ${quoteTable(ast.name)}` +\n `\\n ${alterTable.join(',\\n ')}`,\n values,\n });\n }\n\n result.push(...indexesToQuery(false, ast.name, dropIndexes));\n result.push(...indexesToQuery(true, ast.name, addIndexes));\n result.push(...commentsToQuery(ast.name, comments));\n\n return result;\n};\n","import { ColumnType, Operators } from 'pqb';\nimport { ColumnsShapeCallback, JoinTableOptions, Migration } from './migration';\nimport { joinWords, quoteTable } from '../common';\nimport { getPrimaryKeysOfTable } from './migrationUtils';\nimport { singular } from 'pluralize';\nimport { createTable } from './createTable';\n\nclass UnknownColumn extends ColumnType {\n operators = Operators.any;\n\n constructor(public dataType: string) {\n super();\n }\n}\n\nexport const createJoinTable = async (\n migration: Migration,\n up: boolean,\n tables: string[],\n options: JoinTableOptions,\n fn?: ColumnsShapeCallback,\n) => {\n const tableName = options.tableName || joinWords(...tables);\n\n if (!up) {\n return createTable(\n migration,\n up,\n tableName,\n { ...options, noPrimaryKey: true },\n () => ({}),\n );\n }\n\n const tablesWithPrimaryKeys = await Promise.all(\n tables.map(async (table) => {\n const primaryKeys = await getPrimaryKeysOfTable(migration, table).then(\n (items) =>\n items.map((item) => ({\n ...item,\n joinedName: joinWords(singular(table), item.name),\n })),\n );\n\n if (!primaryKeys.length) {\n throw new Error(\n `Primary key for table ${quoteTable(table)} is not defined`,\n );\n }\n\n return [table, primaryKeys] as const;\n }),\n );\n\n return createTable(migration, up, tableName, options, (t) => {\n const result: Record<string, ColumnType> = {};\n\n tablesWithPrimaryKeys.forEach(([table, primaryKeys]) => {\n if (primaryKeys.length === 1) {\n const [{ type, joinedName, name }] = primaryKeys;\n\n const column = new UnknownColumn(type);\n\n result[joinedName] = column.foreignKey(table, name);\n\n return;\n }\n\n primaryKeys.forEach(({ joinedName, type }) => {\n result[joinedName] = new UnknownColumn(type);\n });\n\n t.foreignKey(\n primaryKeys.map((key) => key.joinedName) as [string, ...string[]],\n table,\n primaryKeys.map((key) => key.name) as [string, ...string[]],\n );\n });\n\n if (fn) {\n Object.assign(result, fn(t));\n }\n\n t.primaryKey(\n tablesWithPrimaryKeys.flatMap(([, primaryKeys]) =>\n primaryKeys.map((item) => item.joinedName),\n ),\n );\n\n return result;\n });\n};\n","import {\n ColumnsShape,\n ColumnType,\n ColumnTypes,\n ForeignKeyOptions,\n IndexColumnOptions,\n IndexOptions,\n logParamToLogObject,\n MaybeArray,\n QueryArraysResult,\n QueryInput,\n QueryLogObject,\n QueryResult,\n QueryResultRow,\n Sql,\n TransactionAdapter,\n TypeParsers,\n raw,\n TextColumn,\n} from 'pqb';\nimport { createTable } from './createTable';\nimport { changeTable, TableChangeData, TableChanger } from './changeTable';\nimport { RakeDbConfig, quoteTable } from '../common';\nimport { createJoinTable } from './createJoinTable';\nimport { RakeDbAst } from '../ast';\n\nexport type DropMode = 'CASCADE' | 'RESTRICT';\n\nexport type TableOptions = {\n dropMode?: DropMode;\n comment?: string;\n noPrimaryKey?: boolean;\n};\n\ntype TextColumnCreator = () => TextColumn;\n\nexport type MigrationColumnTypes = Omit<ColumnTypes, 'text' | 'string'> & {\n text: TextColumnCreator;\n string: TextColumnCreator;\n};\n\nexport type ColumnsShapeCallback = (\n t: MigrationColumnTypes & { raw: typeof raw },\n) => ColumnsShape;\n\nexport type ChangeTableOptions = { comment?: string | [string, string] | null };\nexport type ChangeTableCallback = (t: TableChanger) => TableChangeData;\n\nexport type ColumnComment = { column: string; comment: string | null };\n\nexport type JoinTableOptions = {\n tableName?: string;\n comment?: string;\n dropMode?: DropMode;\n};\n\nexport type ExtensionOptions = {\n schema?: string;\n version?: string;\n cascade?: boolean;\n};\n\nexport class Migration extends TransactionAdapter {\n public log?: QueryLogObject;\n\n constructor(\n tx: TransactionAdapter,\n public up: boolean,\n public options: RakeDbConfig,\n ) {\n super(tx, tx.client, tx.types);\n this.log = logParamToLogObject(options.logger || console, options.log);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async query<T extends QueryResultRow = any>(\n query: QueryInput,\n types: TypeParsers = this.types,\n log = this.log,\n ): Promise<QueryResult<T>> {\n return wrapWithLog(log, query, () => super.query(query, types));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async arrays<R extends any[] = any[]>(\n query: QueryInput,\n types: TypeParsers = this.types,\n log = this.log,\n ): Promise<QueryArraysResult<R>> {\n return wrapWithLog(log, query, () => super.arrays(query, types));\n }\n\n createTable(\n tableName: string,\n options: TableOptions,\n fn: ColumnsShapeCallback,\n ): Promise<void>;\n createTable(tableName: string, fn: ColumnsShapeCallback): Promise<void>;\n createTable(\n tableName: string,\n cbOrOptions: ColumnsShapeCallback | TableOptions,\n cb?: ColumnsShapeCallback,\n ): Promise<void> {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions;\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback;\n\n return createTable(this, this.up, tableName, options, fn);\n }\n\n dropTable(\n tableName: string,\n options: TableOptions,\n fn: ColumnsShapeCallback,\n ): Promise<void>;\n dropTable(tableName: string, fn: ColumnsShapeCallback): Promise<void>;\n dropTable(\n tableName: string,\n cbOrOptions: ColumnsShapeCallback | TableOptions,\n cb?: ColumnsShapeCallback,\n ) {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions;\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback;\n\n return createTable(this, !this.up, tableName, options, fn);\n }\n\n createJoinTable(\n tables: string[],\n options?: JoinTableOptions,\n fn?: ColumnsShapeCallback,\n ): Promise<void>;\n createJoinTable(tables: string[], fn?: ColumnsShapeCallback): Promise<void>;\n async createJoinTable(\n tables: string[],\n cbOrOptions?: ColumnsShapeCallback | JoinTableOptions,\n cb?: ColumnsShapeCallback,\n ): Promise<void> {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions || {};\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback | undefined;\n\n return createJoinTable(this, this.up, tables, options, fn);\n }\n\n dropJoinTable(\n tables: string[],\n options?: JoinTableOptions,\n fn?: ColumnsShapeCallback,\n ): Promise<void>;\n dropJoinTable(tables: string[], fn?: ColumnsShapeCallback): Promise<void>;\n async dropJoinTable(\n tables: string[],\n cbOrOptions?: ColumnsShapeCallback | JoinTableOptions,\n cb?: ColumnsShapeCallback,\n ): Promise<void> {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions || {};\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback | undefined;\n\n return createJoinTable(this, !this.up, tables, options, fn);\n }\n\n changeTable(\n tableName: string,\n options: ChangeTableOptions,\n fn?: ChangeTableCallback,\n ): Promise<void>;\n changeTable(tableName: string, fn: ChangeTableCallback): Promise<void>;\n changeTable(\n tableName: string,\n cbOrOptions: ChangeTableCallback | ChangeTableOptions,\n cb?: ChangeTableCallback,\n ) {\n const [fn, options] =\n typeof cbOrOptions === 'function' ? [cbOrOptions, {}] : [cb, cbOrOptions];\n\n return changeTable(this, this.up, tableName, options, fn);\n }\n\n async renameTable(from: string, to: string): Promise<void> {\n const ast: RakeDbAst.RenameTable = {\n type: 'renameTable',\n from: this.up ? from : to,\n to: this.up ? to : from,\n };\n\n await this.query(\n `ALTER TABLE ${quoteTable(ast.from)} RENAME TO \"${ast.to}\"`,\n );\n\n await this.options.appCodeUpdater?.(ast);\n }\n\n addColumn(\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes) => ColumnType,\n ) {\n return addColumn(this, this.up, tableName, columnName, fn);\n }\n\n dropColumn(\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes) => ColumnType,\n ) {\n return addColumn(this, !this.up, tableName, columnName, fn);\n }\n\n addIndex(\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n ) {\n return addIndex(this, this.up, tableName, columns, options);\n }\n\n dropIndex(\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n ) {\n return addIndex(this, !this.up, tableName, columns, options);\n }\n\n addForeignKey(\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n ) {\n return addForeignKey(\n this,\n this.up,\n tableName,\n columns,\n foreignTable,\n foreignColumns,\n options,\n );\n }\n\n dropForeignKey(\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n ) {\n return addForeignKey(\n this,\n !this.up,\n tableName,\n columns,\n foreignTable,\n foreignColumns,\n options,\n );\n }\n\n addPrimaryKey(\n tableName: string,\n columns: string[],\n options?: { name?: string },\n ) {\n return addPrimaryKey(this, this.up, tableName, columns, options);\n }\n\n dropPrimaryKey(\n tableName: string,\n columns: string[],\n options?: { name?: string },\n ) {\n return addPrimaryKey(this, !this.up, tableName, columns, options);\n }\n\n renameColumn(tableName: string, from: string, to: string) {\n return this.changeTable(tableName, (t) => ({\n [from]: t.rename(to),\n }));\n }\n\n createSchema(schemaName: string) {\n return createSchema(this, this.up, schemaName);\n }\n\n dropSchema(schemaName: string) {\n return createSchema(this, !this.up, schemaName);\n }\n\n createExtension(\n name: string,\n options: ExtensionOptions & { ifNotExists?: boolean } = {},\n ) {\n return createExtension(this, this.up, name, options);\n }\n\n dropExtension(\n name: string,\n options: { ifExists?: boolean; cascade?: boolean } = {},\n ) {\n return createExtension(this, !this.up, name, options);\n }\n\n async tableExists(tableName: string) {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"tables\" WHERE \"table_name\" = $1`,\n values: [tableName],\n });\n }\n\n async columnExists(tableName: string, columnName: string): Promise<boolean> {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"columns\" WHERE \"table_name\" = $1 AND \"column_name\" = $2`,\n values: [tableName, columnName],\n });\n }\n\n async constraintExists(constraintName: string): Promise<boolean> {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"table_constraints\" WHERE \"constraint_name\" = $1`,\n values: [constraintName],\n });\n }\n}\n\nconst wrapWithLog = async <Result>(\n log: QueryLogObject | undefined,\n query: QueryInput,\n fn: () => Promise<Result>,\n): Promise<Result> => {\n if (!log) {\n return fn();\n } else {\n const sql = (\n typeof query === 'string'\n ? { text: query, values: [] }\n : query.values\n ? query\n : { ...query, values: [] }\n ) as Sql;\n\n const logData = log.beforeQuery(sql);\n\n try {\n const result = await fn();\n log.afterQuery(sql, logData);\n return result;\n } catch (err) {\n log.onError(err as Error, sql, logData);\n throw err;\n }\n }\n};\n\nconst addColumn = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes) => ColumnType,\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n [columnName]: t.add(fn(t)),\n }));\n};\n\nconst addIndex = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.index(columns, options)),\n }));\n};\n\nconst addForeignKey = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.foreignKey(columns, foreignTable, foreignColumns, options)),\n }));\n};\n\nconst addPrimaryKey = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columns: string[],\n options?: { name?: string },\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.primaryKey(columns, options)),\n }));\n};\n\nconst createSchema = async (\n migration: Migration,\n up: boolean,\n name: string,\n) => {\n const ast: RakeDbAst.Schema = {\n type: 'schema',\n action: up ? 'create' : 'drop',\n name,\n };\n\n await migration.query(\n `${ast.action === 'create' ? 'CREATE' : 'DROP'} SCHEMA \"${name}\"`,\n );\n\n await migration.options.appCodeUpdater?.(ast);\n};\n\nconst createExtension = async (\n migration: Migration,\n up: boolean,\n name: string,\n options: ExtensionOptions & {\n checkExists?: boolean;\n },\n) => {\n const ast: RakeDbAst.Extension = {\n type: 'extension',\n action: up ? 'create' : 'drop',\n name,\n ...options,\n };\n\n let query;\n if (ast.action === 'drop') {\n query = `DROP EXTENSION${ast.ifNotExists ? ' IF EXISTS' : ''} \"${\n ast.name\n }\"${ast.cascade ? ' CASCADE' : ''}`;\n } else {\n query = `CREATE EXTENSION${ast.ifExists ? ' IF NOT EXISTS' : ''} \"${\n ast.name\n }\"${ast.schema ? ` SCHEMA \"${ast.schema}\"` : ''}${\n ast.version ? ` VERSION '${ast.version}'` : ''\n }${ast.cascade ? ' CASCADE' : ''}`;\n }\n\n await migration.query(query);\n\n await migration.options.appCodeUpdater?.(ast);\n};\n\nconst queryExists = (\n db: Migration,\n sql: { text: string; values: unknown[] },\n) => {\n return db.query(sql).then(({ rowCount }) => rowCount > 0);\n};\n","import { Adapter, AdapterOptions, MaybeArray, toArray } from 'pqb';\nimport {\n createSchemaMigrations,\n getMigrationFiles,\n RakeDbConfig,\n MigrationFile,\n quoteTable,\n} from '../common';\nimport {\n getCurrentPromise,\n setCurrentMigrationUp,\n setCurrentMigration,\n ChangeCallback,\n change,\n getCurrentChangeCallback,\n} from '../migration/change';\nimport { Migration } from '../migration/migration';\n\nconst migrateOrRollback = async (\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n args: string[],\n up: boolean,\n) => {\n const files = await getMigrationFiles(config, up);\n\n const argCount = args[0] === 'all' ? Infinity : parseInt(args[0]);\n let count = isNaN(argCount) ? (up ? Infinity : 1) : argCount;\n\n for (const opts of toArray(options)) {\n const db = new Adapter(opts);\n const migratedVersions = await getMigratedVersionsMap(db, config);\n try {\n for (const file of files) {\n if (\n (up && migratedVersions[file.version]) ||\n (!up && !migratedVersions[file.version])\n ) {\n continue;\n }\n\n if (count-- <= 0) break;\n\n await processMigration(db, up, file, config);\n config.logger?.log(`${file.path} ${up ? 'migrated' : 'rolled back'}`);\n }\n } finally {\n await db.close();\n }\n }\n};\n\nconst changeCache: Record<string, ChangeCallback | undefined> = {};\n\nconst processMigration = async (\n db: Adapter,\n up: boolean,\n file: MigrationFile,\n config: RakeDbConfig,\n) => {\n await db.transaction(async (tx) => {\n const db = new Migration(tx, up, config);\n setCurrentMigration(db);\n setCurrentMigrationUp(up);\n\n const callback = changeCache[file.path];\n if (callback) {\n change(callback);\n } else {\n config.requireTs(file.path);\n changeCache[file.path] = getCurrentChangeCallback();\n }\n\n await getCurrentPromise();\n await (up ? saveMigratedVersion : removeMigratedVersion)(\n db,\n file.version,\n config,\n );\n });\n};\n\nconst saveMigratedVersion = async (\n db: Adapter,\n version: string,\n config: RakeDbConfig,\n) => {\n await db.query(\n `INSERT INTO ${quoteTable(config.migrationsTable)} VALUES ('${version}')`,\n );\n};\n\nconst removeMigratedVersion = async (\n db: Adapter,\n version: string,\n config: RakeDbConfig,\n) => {\n await db.query(\n `DELETE FROM ${quoteTable(\n config.migrationsTable,\n )} WHERE version = '${version}'`,\n );\n};\n\nconst getMigratedVersionsMap = async (\n db: Adapter,\n config: RakeDbConfig,\n): Promise<Record<string, boolean>> => {\n try {\n const result = await db.arrays<[string]>(\n `SELECT * FROM ${quoteTable(config.migrationsTable)}`,\n );\n return Object.fromEntries(result.rows.map((row) => [row[0], true]));\n } catch (err) {\n if ((err as Record<string, unknown>).code === '42P01') {\n await createSchemaMigrations(db, config);\n return {};\n }\n throw err;\n }\n};\n\nexport const migrate = (\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n args: string[] = [],\n) => migrateOrRollback(options, config, args, true);\n\nexport const rollback = (\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n args: string[] = [],\n) => migrateOrRollback(options, config, args, false);\n","import { Adapter, AdapterOptions, MaybeArray, toArray } from 'pqb';\nimport {\n getDatabaseAndUserFromOptions,\n setAdminCredentialsToOptions,\n setAdapterOptions,\n createSchemaMigrations,\n RakeDbConfig,\n migrationConfigDefaults,\n} from '../common';\nimport { migrate } from './migrateOrRollback';\n\nconst execute = async (\n options: AdapterOptions,\n sql: string,\n): Promise<'ok' | 'already' | 'forbidden' | { error: unknown }> => {\n const db = new Adapter(options);\n try {\n await db.query(sql);\n return 'ok';\n } catch (error) {\n const err = error as Record<string, unknown>;\n if (err.code === '42P04' || err.code === '3D000') {\n return 'already';\n } else if (err.code === '42501') {\n return 'forbidden';\n } else {\n return { error };\n }\n } finally {\n await db.close();\n }\n};\n\nconst createOrDrop = async (\n options: AdapterOptions,\n adminOptions: AdapterOptions,\n config: RakeDbConfig,\n args: {\n sql(params: { database: string; user: string }): string;\n successMessage(params: { database: string }): string;\n alreadyMessage(params: { database: string }): string;\n createVersionsTable?: boolean;\n },\n) => {\n const params = getDatabaseAndUserFromOptions(options);\n\n const result = await execute(\n setAdapterOptions(adminOptions, { database: 'postgres' }),\n args.sql(params),\n );\n if (result === 'ok') {\n console.log(args.successMessage(params));\n } else if (result === 'already') {\n console.log(args.alreadyMessage(params));\n } else if (result === 'forbidden') {\n await createOrDrop(\n options,\n await setAdminCredentialsToOptions(options),\n config,\n args,\n );\n return;\n } else {\n throw result.error;\n }\n\n if (!args.createVersionsTable) return;\n\n const db = new Adapter(options);\n await createSchemaMigrations(db, config);\n await db.close();\n};\n\nexport const createDb = async (\n arg: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n) => {\n for (const options of toArray(arg)) {\n await createOrDrop(options, options, config, {\n sql({ database, user }) {\n return `CREATE DATABASE \"${database}\" OWNER \"${user}\"`;\n },\n successMessage({ database }) {\n return `Database ${database} successfully created`;\n },\n alreadyMessage({ database }) {\n return `Database ${database} already exists`;\n },\n createVersionsTable: true,\n });\n }\n};\n\nexport const dropDb = async (arg: MaybeArray<AdapterOptions>) => {\n for (const options of toArray(arg)) {\n await createOrDrop(options, options, migrationConfigDefaults, {\n sql({ database }) {\n return `DROP DATABASE \"${database}\"`;\n },\n successMessage({ database }) {\n return `Database ${database} was successfully dropped`;\n },\n alreadyMessage({ database }) {\n return `Database ${database} does not exist`;\n },\n });\n }\n};\n\nexport const resetDb = async (\n arg: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n) => {\n await dropDb(arg);\n await createDb(arg, config);\n await migrate(arg, config);\n};\n","import {\n getFirstWordAndRest,\n getTextAfterFrom,\n getTextAfterTo,\n RakeDbConfig,\n} from '../common';\nimport { mkdir, writeFile } from 'fs/promises';\nimport path from 'path';\n\nexport const generate = async (config: RakeDbConfig, args: string[]) => {\n const name = args[0];\n if (!name) throw new Error('Migration name is missing');\n\n await mkdir(config.migrationsPath, { recursive: true });\n\n const filePath = path.resolve(\n config.migrationsPath,\n `${makeFileTimeStamp()}_${name}.ts`,\n );\n await writeFile(filePath, makeContent(name, args.slice(1)));\n console.log(`Created ${filePath}`);\n};\n\nconst makeFileTimeStamp = () => {\n const now = new Date();\n return [\n now.getUTCFullYear(),\n now.getUTCMonth() + 1,\n now.getUTCDate(),\n now.getUTCHours(),\n now.getUTCMinutes(),\n now.getUTCSeconds(),\n ]\n .map((value) => (value < 10 ? `0${value}` : value))\n .join('');\n};\n\nconst makeContent = (name: string, args: string[]): string => {\n let content = `import { change } from 'rake-db';\\n\\nchange(async (db) => {`;\n\n const [first, rest] = getFirstWordAndRest(name);\n if (rest) {\n if (first === 'create' || first === 'drop') {\n content += `\\n await db.${\n first === 'create' ? 'createTable' : 'dropTable'\n }('${rest}', (t) => ({`;\n content += makeColumnsContent(args);\n content += '\\n }));';\n } else if (first === 'change') {\n content += `\\n await db.changeTable('${rest}', (t) => ({`;\n content += '\\n }));';\n } else if (first === 'add' || first === 'remove') {\n const table =\n first === 'add' ? getTextAfterTo(rest) : getTextAfterFrom(rest);\n content += `\\n await db.changeTable(${\n table ? `'${table}'` : 'tableName'\n }, (t) => ({`;\n content += makeColumnsContent(args, first);\n content += '\\n }));';\n }\n }\n\n return content + '\\n});\\n';\n};\n\nconst makeColumnsContent = (args: string[], method?: string) => {\n let content = '';\n const prepend = method ? `t.${method}(` : '';\n const append = method ? ')' : '';\n\n for (const arg of args) {\n const [name, def] = arg.split(':');\n if (!def) {\n throw new Error(\n `Column argument should be similar to name:type, name:type.method1.method2, name:type(arg).method(arg). Example: name:varchar(20).nullable. Received: ${arg}`,\n );\n }\n\n const methods = def\n .split('.')\n .map((method) => (method.endsWith(')') ? `.${method}` : `.${method}()`));\n content += `\\n ${name}: ${prepend}t${methods.join('')}${append},`;\n }\n return content;\n};\n","import { AdapterOptions, MaybeArray } from 'pqb';\nimport { createDb, dropDb, resetDb } from './commands/createOrDrop';\nimport { migrate, rollback } from './commands/migrateOrRollback';\nimport { getMigrationConfigWithDefaults, RakeDbConfig } from './common';\nimport { generate } from './commands/generate';\n\nexport const rakeDb = async (\n options: MaybeArray<AdapterOptions>,\n partialConfig: Partial<RakeDbConfig> = {},\n args: string[] = process.argv.slice(2),\n) => {\n const config = getMigrationConfigWithDefaults(partialConfig);\n\n const command = args[0]?.split(':')[0];\n\n if (command === 'create') {\n await createDb(options, config);\n } else if (command === 'drop') {\n await dropDb(options);\n } else if (command === 'reset') {\n await resetDb(options, config);\n } else if (command === 'migrate') {\n await migrate(options, config, args.slice(1));\n } else if (command === 'rollback') {\n await rollback(options, config, args.slice(1));\n } else if (command === 'g' || command === 'generate') {\n await generate(config, args.slice(1));\n } else {\n printHelp();\n }\n};\n\nconst printHelp = () =>\n console.log(\n `Usage: rake-db [command] [arguments]\n\nCommands:\n create create databases\n drop drop databases\n reset drop, create and migrate databases\n g, generate generate migration file, see below\n migrate migrate all pending migrations\n rollback rollback the last migrated\n no or unknown command prints this message\n \nGenerate arguments:\n- (required) first argument is migration name\n * create* template for create table\n * change* template for change table\n * add*To* template for add columns\n * remove*From* template for remove columns\n * drop* template for drop table\n\n- other arguments considered as columns with types and optional methods:\n rake-db g createTable id:serial.primaryKey name:text.nullable\n`,\n );\n"],"names":["__spreadValues","__spreadProps","makeAst","astToQueries","changeTableData","db","method"],"mappings":"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"}
1
+ {"version":3,"file":"index.esm.js","sources":["../src/common.ts","../src/migration/change.ts","../src/migration/migrationUtils.ts","../src/migration/createTable.ts","../src/migration/changeTable.ts","../src/migration/createJoinTable.ts","../src/migration/migration.ts","../src/commands/migrateOrRollback.ts","../src/commands/createOrDrop.ts","../src/commands/generate.ts","../src/rakeDb.ts"],"sourcesContent":["import {\n Adapter,\n AdapterOptions,\n NoPrimaryKeyOption,\n QueryLogOptions,\n} from 'pqb';\nimport Enquirer from 'enquirer';\nimport path from 'path';\nimport { readdir } from 'fs/promises';\nimport { RakeDbAst } from './ast';\n\nexport type RakeDbConfig = {\n migrationsPath: string;\n migrationsTable: string;\n requireTs(path: string): void;\n noPrimaryKey?: NoPrimaryKeyOption;\n appCodeUpdater?: AppCodeUpdater;\n} & QueryLogOptions;\n\nexport type AppCodeUpdater = (ast: RakeDbAst) => Promise<void>;\n\nexport const migrationConfigDefaults = {\n migrationsPath: path.resolve(process.cwd(), 'src', 'migrations'),\n migrationsTable: 'schemaMigrations',\n requireTs: require,\n log: true,\n logger: console,\n};\n\nexport const getMigrationConfigWithDefaults = (\n config: Partial<RakeDbConfig>,\n) => {\n return { ...migrationConfigDefaults, ...config };\n};\n\nexport const getDatabaseAndUserFromOptions = (\n options: AdapterOptions,\n): { database: string; user: string } => {\n if (options.databaseURL) {\n const url = new URL(options.databaseURL);\n return {\n database: url.pathname.slice(1),\n user: url.username,\n };\n } else {\n return {\n database: options.database as string,\n user: options.user as string,\n };\n }\n};\n\nexport const setAdapterOptions = (\n options: AdapterOptions,\n set: { database?: string; user?: string; password?: string },\n): AdapterOptions => {\n if (options.databaseURL) {\n const url = new URL(options.databaseURL);\n\n if ('database' in set) {\n url.pathname = `/${set.database}`;\n }\n\n if (set.user !== undefined) {\n url.username = set.user;\n }\n\n if (set.password !== undefined) {\n url.password = set.password;\n }\n\n return { ...options, databaseURL: url.toString() };\n } else {\n return {\n ...options,\n ...set,\n };\n }\n};\n\nconst askAdminCredentials = async (): Promise<{\n user: string;\n password: string;\n}> => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const prompt = new (Enquirer as any).Snippet({\n message: `What are postgres admin login and password?`,\n fields: [\n {\n name: 'user',\n required: true,\n },\n {\n name: 'password',\n },\n ],\n values: {\n user: 'postgres',\n password: '',\n },\n template: 'Admin user: {{user}}\\nAdmin password: {{password}}',\n });\n\n const { values } = await prompt.run();\n if (!values.password) values.password = '';\n\n return values;\n};\n\nexport const setAdminCredentialsToOptions = async (\n options: AdapterOptions,\n): Promise<AdapterOptions> => {\n const values = await askAdminCredentials();\n return setAdapterOptions(options, values);\n};\n\nexport const createSchemaMigrations = async (\n db: Adapter,\n config: RakeDbConfig,\n) => {\n try {\n await db.query(\n `CREATE TABLE ${quoteTable(\n config.migrationsTable,\n )} ( version TEXT NOT NULL )`,\n );\n console.log('Created versions table');\n } catch (err) {\n if ((err as Record<string, unknown>).code === '42P07') {\n console.log('Versions table exists');\n } else {\n throw err;\n }\n }\n};\n\nexport const getFirstWordAndRest = (\n input: string,\n): [string] | [string, string] => {\n const index = input.search(/(?=[A-Z])|[-_]/);\n if (index !== -1) {\n const restStart =\n input[index] === '-' || input[index] === '_' ? index + 1 : index;\n const rest = input.slice(restStart);\n return [input.slice(0, index), rest[0].toLowerCase() + rest.slice(1)];\n } else {\n return [input];\n }\n};\n\nconst getTextAfterRegExp = (\n input: string,\n regex: RegExp,\n length: number,\n): string | undefined => {\n let index = input.search(regex);\n if (index === -1) return;\n\n if (input[index] === '-' || input[index] === '_') index++;\n index += length;\n\n const start = input[index] == '-' || input[index] === '_' ? index + 1 : index;\n const text = input.slice(start);\n return text[0].toLowerCase() + text.slice(1);\n};\n\nexport const getTextAfterTo = (input: string): string | undefined => {\n return getTextAfterRegExp(input, /(To|-to|_to)[A-Z-_]/, 2);\n};\n\nexport const getTextAfterFrom = (input: string): string | undefined => {\n return getTextAfterRegExp(input, /(From|-from|_from)[A-Z-_]/, 4);\n};\n\nexport type MigrationFile = {\n path: string;\n version: string;\n};\n\nexport const getMigrationFiles = async (\n config: RakeDbConfig,\n up: boolean,\n): Promise<MigrationFile[]> => {\n const { migrationsPath } = config;\n\n let files: string[];\n try {\n files = await readdir(migrationsPath);\n } catch (_) {\n return [];\n }\n\n const sort = up ? sortAsc : sortDesc;\n return sort(files).map((file) => {\n if (!file.endsWith('.ts')) {\n throw new Error(\n `Only .ts files are supported for migration, received: ${file}`,\n );\n }\n\n const timestampMatch = file.match(/^(\\d{14})\\D/);\n if (!timestampMatch) {\n throw new Error(\n `Migration file name should start with 14 digit version, received ${file}`,\n );\n }\n\n return {\n path: path.join(migrationsPath, file),\n version: timestampMatch[1],\n };\n });\n};\n\nexport const sortAsc = (arr: string[]) => arr.sort();\n\nexport const sortDesc = (arr: string[]) => arr.sort((a, b) => (a > b ? -1 : 1));\n\nexport const joinWords = (...words: string[]) => {\n return words\n .slice(1)\n .reduce(\n (acc, word) => acc + word[0].toUpperCase() + word.slice(1),\n words[0],\n );\n};\n\nexport const joinColumns = (columns: string[]) => {\n return columns.map((column) => `\"${column}\"`).join(', ');\n};\n\nexport const quoteTable = (table: string) => {\n const index = table.indexOf('.');\n if (index !== -1) {\n return `\"${table.slice(0, index)}\".\"${table.slice(index + 1)}\"`;\n } else {\n return `\"${table}\"`;\n }\n};\n","import { Migration } from './migration';\n\nlet currentMigration: Migration | undefined;\nlet currentPromise: Promise<void> | undefined;\nlet currentUp = true;\nlet currentChangeCallback: ChangeCallback | undefined;\n\nexport type ChangeCallback = (db: Migration, up: boolean) => Promise<void>;\n\nexport const change = (fn: ChangeCallback) => {\n if (!currentMigration) throw new Error('Database instance is not set');\n currentPromise = fn(currentMigration, currentUp);\n currentChangeCallback = fn;\n};\n\nexport const setCurrentMigration = (db: Migration) => {\n currentMigration = db;\n};\n\nexport const setCurrentMigrationUp = (up: boolean) => {\n currentUp = up;\n};\n\nexport const getCurrentPromise = () => currentPromise;\n\nexport const getCurrentChangeCallback = () => currentChangeCallback;\n","import {\n ColumnType,\n ForeignKeyTable,\n ForeignKeyOptions,\n getRaw,\n isRaw,\n quote,\n Sql,\n TableData,\n toArray,\n} from 'pqb';\nimport { ColumnComment, Migration } from './migration';\nimport { joinColumns, joinWords, quoteTable } from '../common';\n\nexport const columnToSql = (\n key: string,\n item: ColumnType,\n values: unknown[],\n hasMultiplePrimaryKeys: boolean,\n): string => {\n const line = [`\"${key}\" ${item.toSQL()}`];\n\n if (item.data.compression) {\n line.push(`COMPRESSION ${item.data.compression}`);\n }\n\n if (item.data.collate) {\n line.push(`COLLATE ${quote(item.data.collate)}`);\n }\n\n if (item.isPrimaryKey && !hasMultiplePrimaryKeys) {\n line.push('PRIMARY KEY');\n } else if (!item.isNullable) {\n line.push('NOT NULL');\n }\n\n if (item.data.default !== undefined) {\n if (\n typeof item.data.default === 'object' &&\n item.data.default &&\n isRaw(item.data.default)\n ) {\n line.push(`DEFAULT ${getRaw(item.data.default, values)}`);\n } else {\n line.push(`DEFAULT ${quote(item.data.default)}`);\n }\n }\n\n const { foreignKey } = item.data;\n if (foreignKey) {\n const table = getForeignKeyTable(\n 'fn' in foreignKey ? foreignKey.fn : foreignKey.table,\n );\n\n if (foreignKey.name) {\n line.push(`CONSTRAINT \"${foreignKey.name}\"`);\n }\n\n line.push(referencesToSql(table, foreignKey.columns, foreignKey));\n }\n\n return line.join(' ');\n};\n\nexport const addColumnIndex = (\n indexes: TableData.Index[],\n key: string,\n item: ColumnType,\n) => {\n if (item.data) {\n if (item.data.index) {\n indexes.push({\n columns: [{ ...item.data.index, column: key }],\n options: item.data.index,\n });\n }\n }\n};\n\nexport const addColumnComment = (\n comments: ColumnComment[],\n key: string,\n item: ColumnType,\n) => {\n if (item.data.comment) {\n comments.push({ column: key, comment: item.data.comment });\n }\n};\n\nexport const getForeignKeyTable = (\n fnOrTable: (() => ForeignKeyTable) | string,\n) => {\n if (typeof fnOrTable === 'string') {\n return fnOrTable;\n }\n\n const klass = fnOrTable();\n return new klass().table;\n};\n\nexport const constraintToSql = (\n tableName: string,\n up: boolean,\n foreignKey: TableData['foreignKeys'][number],\n) => {\n const constraintName =\n foreignKey.options.name ||\n `${tableName}_${foreignKey.columns.join('_')}_fkey`;\n\n if (!up) {\n const { dropMode } = foreignKey.options;\n return `CONSTRAINT \"${constraintName}\"${dropMode ? ` ${dropMode}` : ''}`;\n }\n\n const table = getForeignKeyTable(foreignKey.fnOrTable);\n return `CONSTRAINT \"${constraintName}\" FOREIGN KEY (${joinColumns(\n foreignKey.columns,\n )}) ${referencesToSql(table, foreignKey.foreignColumns, foreignKey.options)}`;\n};\n\nexport const referencesToSql = (\n table: string,\n columns: string[],\n foreignKey: Pick<ForeignKeyOptions, 'match' | 'onDelete' | 'onUpdate'>,\n) => {\n const sql: string[] = [\n `REFERENCES ${quoteTable(table)}(${joinColumns(columns)})`,\n ];\n\n if (foreignKey.match) {\n sql.push(`MATCH ${foreignKey.match.toUpperCase()}`);\n }\n\n if (foreignKey.onDelete) {\n sql.push(`ON DELETE ${foreignKey.onDelete.toUpperCase()}`);\n }\n\n if (foreignKey.onUpdate) {\n sql.push(`ON UPDATE ${foreignKey.onUpdate.toUpperCase()}`);\n }\n\n return sql.join(' ');\n};\n\nexport const indexesToQuery = (\n up: boolean,\n tableName: string,\n indexes: TableData.Index[],\n): Sql[] => {\n return indexes.map(({ columns, options }) => {\n const indexName =\n options.name ||\n joinWords(tableName, ...columns.map(({ column }) => column), 'index');\n\n if (!up) {\n return {\n text: `DROP INDEX \"${indexName}\"${\n options.dropMode ? ` ${options.dropMode}` : ''\n }`,\n values: [],\n };\n }\n\n const values: unknown[] = [];\n\n const sql: string[] = ['CREATE'];\n\n if (options.unique) {\n sql.push('UNIQUE');\n }\n\n sql.push(`INDEX \"${indexName}\" ON ${quoteTable(tableName)}`);\n\n if (options.using) {\n sql.push(`USING ${options.using}`);\n }\n\n const columnsSql: string[] = [];\n\n columns.forEach((column) => {\n const columnSql: string[] = [\n `\"${column.column}\"${\n column.expression ? `(${column.expression})` : ''\n }`,\n ];\n\n if (column.collate) {\n columnSql.push(`COLLATE '${column.collate}'`);\n }\n\n if (column.operator) {\n columnSql.push(column.operator);\n }\n\n if (column.order) {\n columnSql.push(column.order);\n }\n\n columnsSql.push(columnSql.join(' '));\n });\n\n sql.push(`(${columnsSql.join(', ')})`);\n\n if (options.include) {\n sql.push(\n `INCLUDE (${toArray(options.include)\n .map((column) => `\"${column}\"`)\n .join(', ')})`,\n );\n }\n\n if (options.with) {\n sql.push(`WITH (${options.with})`);\n }\n\n if (options.tablespace) {\n sql.push(`TABLESPACE ${options.tablespace}`);\n }\n\n if (options.where) {\n sql.push(\n `WHERE ${\n typeof options.where === 'object' &&\n options.where &&\n isRaw(options.where)\n ? getRaw(options.where, values)\n : options.where\n }`,\n );\n }\n\n return { text: sql.join(' '), values };\n });\n};\n\nexport const commentsToQuery = (\n tableName: string,\n comments: ColumnComment[],\n): Sql[] => {\n return comments.map(({ column, comment }) => ({\n text: `COMMENT ON COLUMN ${quoteTable(tableName)}.\"${column}\" IS ${quote(\n comment,\n )}`,\n values: [],\n }));\n};\n\nexport const primaryKeyToSql = (\n primaryKey: Exclude<TableData['primaryKey'], undefined>,\n) => {\n const name = primaryKey.options?.name;\n return `${name ? `CONSTRAINT \"${name}\" ` : ''}PRIMARY KEY (${joinColumns(\n primaryKey.columns,\n )})`;\n};\n\nexport const getPrimaryKeysOfTable = async (\n db: Migration,\n tableName: string,\n): Promise<{ name: string; type: string }[]> => {\n const { rows } = await db.query<{ name: string; type: string }>(\n {\n text: `SELECT\n pg_attribute.attname AS name,\n format_type(pg_attribute.atttypid, pg_attribute.atttypmod) AS type\nFROM pg_index, pg_class, pg_attribute, pg_namespace\nWHERE\n pg_class.oid = $1::regclass AND\n indrelid = pg_class.oid AND\n nspname = 'public' AND\n pg_class.relnamespace = pg_namespace.oid AND\n pg_attribute.attrelid = pg_class.oid AND\n pg_attribute.attnum = any(pg_index.indkey) AND\n indisprimary`,\n values: [tableName],\n },\n db.types,\n undefined,\n );\n\n return rows;\n};\n","import {\n ColumnsShape,\n columnTypes,\n getColumnTypes,\n getTableData,\n NoPrimaryKeyOption,\n quote,\n raw,\n Sql,\n TableData,\n} from 'pqb';\nimport {\n ColumnComment,\n ColumnsShapeCallback,\n Migration,\n TableOptions,\n} from './migration';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n commentsToQuery,\n constraintToSql,\n indexesToQuery,\n primaryKeyToSql,\n} from './migrationUtils';\nimport { quoteTable } from '../common';\nimport { RakeDbAst } from '../ast';\n\nconst types = Object.assign(Object.create(columnTypes), {\n raw,\n});\n\nexport const createTable = async (\n migration: Migration,\n up: boolean,\n tableName: string,\n options: TableOptions,\n fn: ColumnsShapeCallback,\n) => {\n const shape = getColumnTypes(types, fn);\n const tableData = getTableData();\n const ast = makeAst(\n up,\n tableName,\n shape,\n tableData,\n options,\n migration.options.noPrimaryKey,\n );\n\n validatePrimaryKey(ast);\n\n const queries = astToQueries(ast);\n for (const query of queries) {\n await migration.query(query);\n }\n\n await migration.options.appCodeUpdater?.(ast);\n};\n\nconst makeAst = (\n up: boolean,\n tableName: string,\n shape: ColumnsShape,\n tableData: TableData,\n options: TableOptions,\n noPrimaryKey?: NoPrimaryKeyOption,\n): RakeDbAst.Table => {\n const shapePKeys: string[] = [];\n for (const key in shape) {\n if (shape[key].isPrimaryKey) {\n shapePKeys.push(key);\n }\n }\n\n const primaryKey = tableData.primaryKey;\n\n return {\n type: 'table',\n action: up ? 'create' : 'drop',\n name: tableName,\n shape,\n ...tableData,\n primaryKey:\n shapePKeys.length <= 1\n ? primaryKey\n : primaryKey\n ? { ...primaryKey, columns: [...shapePKeys, ...primaryKey.columns] }\n : { columns: shapePKeys },\n ...options,\n noPrimaryKey: options.noPrimaryKey ? 'ignore' : noPrimaryKey || 'error',\n };\n};\n\nconst validatePrimaryKey = (ast: RakeDbAst.Table) => {\n if (ast.noPrimaryKey !== 'ignore') {\n let hasPrimaryKey = !!ast.primaryKey?.columns?.length;\n if (!hasPrimaryKey) {\n for (const key in ast.shape) {\n if (ast.shape[key].isPrimaryKey) {\n hasPrimaryKey = true;\n break;\n }\n }\n }\n\n if (!hasPrimaryKey) {\n const message = `Table ${ast.name} has no primary key`;\n if (ast.noPrimaryKey === 'error') {\n throw new Error(message);\n } else {\n console.warn(message);\n }\n }\n }\n};\n\nconst astToQueries = (ast: RakeDbAst.Table): Sql[] => {\n if (ast.action === 'drop') {\n return [\n {\n text: `DROP TABLE ${quoteTable(ast.name)}${\n ast.dropMode ? ` ${ast.dropMode}` : ''\n }`,\n values: [],\n },\n ];\n }\n\n const lines: string[] = [];\n const values: unknown[] = [];\n const indexes: TableData.Index[] = [];\n const comments: ColumnComment[] = [];\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n addColumnIndex(indexes, key, item);\n addColumnComment(comments, key, item);\n lines.push(`\\n ${columnToSql(key, item, values, !!ast.primaryKey)}`);\n }\n\n if (ast.primaryKey) {\n lines.push(`\\n ${primaryKeyToSql(ast.primaryKey)}`);\n }\n\n ast.foreignKeys.forEach((foreignKey) => {\n lines.push(`\\n ${constraintToSql(ast.name, true, foreignKey)}`);\n });\n\n indexes.push(...ast.indexes);\n\n const result: Sql[] = [\n {\n text: `CREATE TABLE ${quoteTable(ast.name)} (${lines.join(',')}\\n)`,\n values,\n },\n ...indexesToQuery(true, ast.name, indexes),\n ...commentsToQuery(ast.name, comments),\n ];\n\n if (ast.comment) {\n result.push({\n text: `COMMENT ON TABLE ${quoteTable(ast.name)} IS ${quote(ast.comment)}`,\n values: [],\n });\n }\n\n return result;\n};\n","import {\n ColumnType,\n resetTableData,\n getTableData,\n EmptyObject,\n emptyObject,\n TableData,\n RawExpression,\n raw,\n columnTypes,\n Sql,\n quote,\n getRaw,\n isRaw,\n} from 'pqb';\nimport {\n ChangeTableCallback,\n ChangeTableOptions,\n ColumnComment,\n DropMode,\n Migration,\n MigrationColumnTypes,\n} from './migration';\nimport { RakeDbAst } from '../ast';\nimport { quoteTable } from '../common';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n commentsToQuery,\n constraintToSql,\n indexesToQuery,\n primaryKeyToSql,\n} from './migrationUtils';\n\ntype ChangeTableData = { add: TableData; drop: TableData };\nconst newChangeTableData = (): ChangeTableData => ({\n add: { indexes: [], foreignKeys: [] },\n drop: { indexes: [], foreignKeys: [] },\n});\n\nlet changeTableData = newChangeTableData();\n\nconst resetChangeTableData = () => {\n changeTableData = newChangeTableData();\n};\n\nconst mergeTableData = (a: TableData, b: TableData) => {\n if (b.primaryKey) {\n if (!a.primaryKey) {\n a.primaryKey = b.primaryKey;\n } else {\n a.primaryKey = {\n columns: [...a.primaryKey.columns, ...b.primaryKey.columns],\n options: { ...a.primaryKey.options, ...b.primaryKey.options },\n };\n }\n }\n a.indexes = [...a.indexes, ...b.indexes];\n a.foreignKeys = [...a.foreignKeys, ...b.foreignKeys];\n};\n\nfunction add(\n item: ColumnType,\n options?: { dropMode?: DropMode },\n): RakeDbAst.ChangeTableItem.Column;\nfunction add(emptyObject: EmptyObject): EmptyObject;\nfunction add(\n items: Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n): Record<string, RakeDbAst.ChangeTableItem.Column>;\nfunction add(\n item: ColumnType | EmptyObject | Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n):\n | RakeDbAst.ChangeTableItem.Column\n | EmptyObject\n | Record<string, RakeDbAst.ChangeTableItem.Column> {\n if (item instanceof ColumnType) {\n return { type: 'add', item, dropMode: options?.dropMode };\n } else if (item === emptyObject) {\n mergeTableData(changeTableData.add, getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, RakeDbAst.ChangeTableItem.Column> = {};\n for (const key in item) {\n result[key] = {\n type: 'add',\n item: (item as Record<string, ColumnType>)[key],\n dropMode: options?.dropMode,\n };\n }\n return result;\n }\n}\n\nconst drop = ((item, options) => {\n if (item instanceof ColumnType) {\n return { type: 'drop', item, dropMode: options?.dropMode };\n } else if (item === emptyObject) {\n mergeTableData(changeTableData.drop, getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, RakeDbAst.ChangeTableItem.Column> = {};\n for (const key in item) {\n result[key] = {\n type: 'drop',\n item: (item as Record<string, ColumnType>)[key],\n dropMode: options?.dropMode,\n };\n }\n return result;\n }\n}) as typeof add;\n\ntype Change = RakeDbAst.ChangeTableItem.Change & ChangeOptions;\n\ntype ChangeOptions = {\n usingUp?: RawExpression;\n usingDown?: RawExpression;\n};\n\nconst columnTypeToColumnChange = (\n item: ColumnType | Change,\n): RakeDbAst.ColumnChange => {\n if (item instanceof ColumnType) {\n const foreignKey = item.data.foreignKey;\n if (foreignKey && 'fn' in foreignKey) {\n throw new Error('Callback in foreignKey is not allowed in migration');\n }\n\n return {\n column: item,\n type: item.toSQL(),\n nullable: item.isNullable,\n primaryKey: item.isPrimaryKey,\n ...item.data,\n foreignKey,\n };\n }\n\n return item.to;\n};\n\ntype TableChangeMethods = typeof tableChangeMethods;\nconst tableChangeMethods = {\n raw: raw,\n add,\n drop,\n change(\n from: ColumnType | Change,\n to: ColumnType | Change,\n options?: ChangeOptions,\n ): Change {\n return {\n type: 'change',\n from: columnTypeToColumnChange(from),\n to: columnTypeToColumnChange(to),\n ...options,\n };\n },\n default(value: unknown | RawExpression): Change {\n return { type: 'change', from: { default: null }, to: { default: value } };\n },\n nullable(): Change {\n return {\n type: 'change',\n from: { nullable: false },\n to: { nullable: true },\n };\n },\n nonNullable(): Change {\n return {\n type: 'change',\n from: { nullable: true },\n to: { nullable: false },\n };\n },\n comment(comment: string | null): Change {\n return { type: 'change', from: { comment: null }, to: { comment } };\n },\n rename(name: string): RakeDbAst.ChangeTableItem.Rename {\n return { type: 'rename', name };\n },\n};\n\nexport type TableChanger = MigrationColumnTypes & TableChangeMethods;\n\nexport type TableChangeData = Record<\n string,\n | RakeDbAst.ChangeTableItem.Column\n | RakeDbAst.ChangeTableItem.Rename\n | Change\n | EmptyObject\n>;\n\nexport const changeTable = async (\n migration: Migration,\n up: boolean,\n tableName: string,\n options: ChangeTableOptions,\n fn?: ChangeTableCallback,\n) => {\n resetTableData();\n resetChangeTableData();\n\n const tableChanger = Object.create(columnTypes) as TableChanger;\n Object.assign(tableChanger, tableChangeMethods);\n\n const changeData = fn?.(tableChanger) || {};\n\n const ast = makeAst(up, tableName, changeData, changeTableData, options);\n\n const queries = astToQueries(ast);\n for (const query of queries) {\n await migration.query(query);\n }\n\n await migration.options.appCodeUpdater?.(ast);\n};\n\nconst makeAst = (\n up: boolean,\n name: string,\n changeData: TableChangeData,\n changeTableData: ChangeTableData,\n options: ChangeTableOptions,\n): RakeDbAst.ChangeTable => {\n const { comment } = options;\n\n const shape: Record<string, RakeDbAst.ChangeTableItem> = {};\n for (const key in changeData) {\n const item = changeData[key];\n if ('type' in item) {\n if (up) {\n shape[key] =\n item.type === 'change' && item.usingUp\n ? { ...item, using: item.usingUp }\n : item;\n } else {\n if (item.type === 'rename') {\n shape[item.name] = { ...item, name: key };\n } else {\n shape[key] =\n item.type === 'add'\n ? { ...item, type: 'drop' }\n : item.type === 'drop'\n ? { ...item, type: 'add' }\n : item.type === 'change'\n ? { ...item, from: item.to, to: item.from, using: item.usingDown }\n : item;\n }\n }\n }\n }\n\n return {\n type: 'changeTable',\n name,\n comment: comment\n ? up\n ? Array.isArray(comment)\n ? comment[1]\n : comment\n : Array.isArray(comment)\n ? comment[0]\n : null\n : undefined,\n shape,\n ...(up\n ? changeTableData\n : { add: changeTableData.drop, drop: changeTableData.add }),\n };\n};\n\ntype PrimaryKeys = {\n columns: string[];\n change?: true;\n options?: { name?: string };\n};\n\nconst astToQueries = (ast: RakeDbAst.ChangeTable): Sql[] => {\n const result: Sql[] = [];\n\n if (ast.comment !== undefined) {\n result.push({\n text: `COMMENT ON TABLE ${quoteTable(ast.name)} IS ${quote(ast.comment)}`,\n values: [],\n });\n }\n\n const addPrimaryKeys: PrimaryKeys = ast.add.primaryKey\n ? { ...ast.add.primaryKey }\n : {\n columns: [],\n };\n const dropPrimaryKeys: PrimaryKeys = ast.drop.primaryKey\n ? { ...ast.drop.primaryKey }\n : {\n columns: [],\n };\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n\n if (item.type === 'add') {\n if (item.item.isPrimaryKey) {\n addPrimaryKeys.columns.push(key);\n }\n } else if (item.type === 'drop') {\n if (item.item.isPrimaryKey) {\n dropPrimaryKeys.columns.push(key);\n }\n } else if (item.type === 'change') {\n if (item.from.primaryKey) {\n dropPrimaryKeys.columns.push(key);\n dropPrimaryKeys.change = true;\n }\n\n if (item.to.primaryKey) {\n addPrimaryKeys.columns.push(key);\n addPrimaryKeys.change = true;\n }\n }\n }\n\n const alterTable: string[] = [];\n const values: unknown[] = [];\n const addIndexes: TableData.Index[] = [...ast.add.indexes];\n const dropIndexes: TableData.Index[] = [...ast.drop.indexes];\n const addForeignKeys: TableData.ForeignKey[] = [...ast.add.foreignKeys];\n const dropForeignKeys: TableData.ForeignKey[] = [...ast.drop.foreignKeys];\n const comments: ColumnComment[] = [];\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n\n if (item.type === 'add') {\n addColumnIndex(addIndexes, key, item.item);\n addColumnComment(comments, key, item.item);\n\n alterTable.push(\n `ADD COLUMN ${columnToSql(\n key,\n item.item,\n values,\n addPrimaryKeys.columns.length > 1,\n )}`,\n );\n } else if (item.type === 'drop') {\n addColumnIndex(dropIndexes, key, item.item);\n\n alterTable.push(\n `DROP COLUMN \"${key}\"${item.dropMode ? ` ${item.dropMode}` : ''}`,\n );\n } else if (item.type === 'change') {\n const { from, to } = item;\n if (from.type !== to.type || from.collate !== to.collate) {\n alterTable.push(\n `ALTER COLUMN \"${key}\" TYPE ${to.type}${\n to.collate ? ` COLLATE ${quote(to.collate)}` : ''\n }${item.using ? ` USING ${getRaw(item.using, values)}` : ''}`,\n );\n }\n\n if (from.default !== to.default) {\n const value =\n typeof to.default === 'object' && to.default && isRaw(to.default)\n ? getRaw(to.default, values)\n : quote(to.default);\n\n const expr =\n value === undefined ? 'DROP DEFAULT' : `SET DEFAULT ${value}`;\n\n alterTable.push(`ALTER COLUMN \"${key}\" ${expr}`);\n }\n\n if (from.nullable !== to.nullable) {\n alterTable.push(\n `ALTER COLUMN \"${key}\" ${to.nullable ? 'DROP' : 'SET'} NOT NULL`,\n );\n }\n\n if (from.compression !== to.compression) {\n alterTable.push(\n `ALTER COLUMN \"${key}\" SET COMPRESSION ${\n to.compression || 'DEFAULT'\n }`,\n );\n }\n\n const fromFkey = from.foreignKey;\n const toFkey = to.foreignKey;\n if (\n (fromFkey || toFkey) &&\n (!fromFkey ||\n !toFkey ||\n fromFkey.name !== toFkey.name ||\n fromFkey.match !== toFkey.match ||\n fromFkey.onUpdate !== toFkey.onUpdate ||\n fromFkey.onDelete !== toFkey.onDelete ||\n fromFkey.dropMode !== toFkey.dropMode ||\n fromFkey.table !== toFkey.table ||\n fromFkey.columns.join(',') !== toFkey.columns.join(','))\n ) {\n if (fromFkey) {\n dropForeignKeys.push({\n columns: [key],\n fnOrTable: fromFkey.table,\n foreignColumns: fromFkey.columns,\n options: fromFkey,\n });\n }\n\n if (toFkey) {\n addForeignKeys.push({\n columns: [key],\n fnOrTable: toFkey.table,\n foreignColumns: toFkey.columns,\n options: toFkey,\n });\n }\n }\n\n const fromIndex = from.index;\n const toIndex = to.index;\n if (\n (fromIndex || toIndex) &&\n (!fromIndex ||\n !toIndex ||\n fromIndex.expression !== toIndex.expression ||\n fromIndex.collate !== toIndex.collate ||\n fromIndex.operator !== toIndex.operator ||\n fromIndex.order !== toIndex.order ||\n fromIndex.name !== toIndex.name ||\n fromIndex.unique !== toIndex.unique ||\n fromIndex.using !== toIndex.using ||\n fromIndex.include !== toIndex.include ||\n (Array.isArray(fromIndex.include) &&\n Array.isArray(toIndex.include) &&\n fromIndex.include.join(',') !== toIndex.include.join(',')) ||\n fromIndex.with !== toIndex.with ||\n fromIndex.tablespace !== toIndex.tablespace ||\n fromIndex.where !== toIndex.where ||\n fromIndex.dropMode !== toIndex.dropMode)\n ) {\n if (fromIndex) {\n dropIndexes.push({\n columns: [\n {\n column: key,\n ...fromIndex,\n },\n ],\n options: fromIndex,\n });\n }\n\n if (toIndex) {\n addIndexes.push({\n columns: [\n {\n column: key,\n ...toIndex,\n },\n ],\n options: toIndex,\n });\n }\n }\n\n if (from.comment !== to.comment) {\n comments.push({ column: key, comment: to.comment || null });\n }\n } else if (item.type === 'rename') {\n alterTable.push(`RENAME COLUMN \"${key}\" TO \"${item.name}\"`);\n }\n }\n\n const prependAlterTable: string[] = [];\n\n if (\n ast.drop.primaryKey ||\n dropPrimaryKeys.change ||\n dropPrimaryKeys.columns.length > 1\n ) {\n const name = dropPrimaryKeys.options?.name || `${ast.name}_pkey`;\n prependAlterTable.push(`DROP CONSTRAINT \"${name}\"`);\n }\n\n prependAlterTable.push(\n ...dropForeignKeys.map(\n (foreignKey) => `\\n DROP ${constraintToSql(ast.name, false, foreignKey)}`,\n ),\n );\n\n alterTable.unshift(...prependAlterTable);\n\n if (\n ast.add.primaryKey ||\n addPrimaryKeys.change ||\n addPrimaryKeys.columns.length > 1\n ) {\n alterTable.push(`ADD ${primaryKeyToSql(addPrimaryKeys)}`);\n }\n\n alterTable.push(\n ...addForeignKeys.map(\n (foreignKey) => `\\n ADD ${constraintToSql(ast.name, true, foreignKey)}`,\n ),\n );\n\n if (alterTable.length) {\n result.push({\n text:\n `ALTER TABLE ${quoteTable(ast.name)}` +\n `\\n ${alterTable.join(',\\n ')}`,\n values,\n });\n }\n\n result.push(...indexesToQuery(false, ast.name, dropIndexes));\n result.push(...indexesToQuery(true, ast.name, addIndexes));\n result.push(...commentsToQuery(ast.name, comments));\n\n return result;\n};\n","import { ColumnType, Operators } from 'pqb';\nimport { ColumnsShapeCallback, JoinTableOptions, Migration } from './migration';\nimport { joinWords, quoteTable } from '../common';\nimport { getPrimaryKeysOfTable } from './migrationUtils';\nimport { singular } from 'pluralize';\nimport { createTable } from './createTable';\n\nclass UnknownColumn extends ColumnType {\n operators = Operators.any;\n\n constructor(public dataType: string) {\n super();\n }\n\n toCode() {\n return 'unknown';\n }\n}\n\nexport const createJoinTable = async (\n migration: Migration,\n up: boolean,\n tables: string[],\n options: JoinTableOptions,\n fn?: ColumnsShapeCallback,\n) => {\n const tableName = options.tableName || joinWords(...tables);\n\n if (!up) {\n return createTable(\n migration,\n up,\n tableName,\n { ...options, noPrimaryKey: true },\n () => ({}),\n );\n }\n\n const tablesWithPrimaryKeys = await Promise.all(\n tables.map(async (table) => {\n const primaryKeys = await getPrimaryKeysOfTable(migration, table).then(\n (items) =>\n items.map((item) => ({\n ...item,\n joinedName: joinWords(singular(table), item.name),\n })),\n );\n\n if (!primaryKeys.length) {\n throw new Error(\n `Primary key for table ${quoteTable(table)} is not defined`,\n );\n }\n\n return [table, primaryKeys] as const;\n }),\n );\n\n return createTable(migration, up, tableName, options, (t) => {\n const result: Record<string, ColumnType> = {};\n\n tablesWithPrimaryKeys.forEach(([table, primaryKeys]) => {\n if (primaryKeys.length === 1) {\n const [{ type, joinedName, name }] = primaryKeys;\n\n const column = new UnknownColumn(type);\n\n result[joinedName] = column.foreignKey(table, name);\n\n return;\n }\n\n primaryKeys.forEach(({ joinedName, type }) => {\n result[joinedName] = new UnknownColumn(type);\n });\n\n t.foreignKey(\n primaryKeys.map((key) => key.joinedName) as [string, ...string[]],\n table,\n primaryKeys.map((key) => key.name) as [string, ...string[]],\n );\n });\n\n if (fn) {\n Object.assign(result, fn(t));\n }\n\n t.primaryKey(\n tablesWithPrimaryKeys.flatMap(([, primaryKeys]) =>\n primaryKeys.map((item) => item.joinedName),\n ),\n );\n\n return result;\n });\n};\n","import {\n ColumnsShape,\n ColumnType,\n ColumnTypes,\n ForeignKeyOptions,\n IndexColumnOptions,\n IndexOptions,\n logParamToLogObject,\n MaybeArray,\n QueryArraysResult,\n QueryInput,\n QueryLogObject,\n QueryResult,\n QueryResultRow,\n Sql,\n TransactionAdapter,\n TypeParsers,\n raw,\n TextColumn,\n} from 'pqb';\nimport { createTable } from './createTable';\nimport { changeTable, TableChangeData, TableChanger } from './changeTable';\nimport { RakeDbConfig, quoteTable } from '../common';\nimport { createJoinTable } from './createJoinTable';\nimport { RakeDbAst } from '../ast';\n\nexport type DropMode = 'CASCADE' | 'RESTRICT';\n\nexport type TableOptions = {\n dropMode?: DropMode;\n comment?: string;\n noPrimaryKey?: boolean;\n};\n\ntype TextColumnCreator = () => TextColumn;\n\nexport type MigrationColumnTypes = Omit<ColumnTypes, 'text' | 'string'> & {\n text: TextColumnCreator;\n string: TextColumnCreator;\n};\n\nexport type ColumnsShapeCallback = (\n t: MigrationColumnTypes & { raw: typeof raw },\n) => ColumnsShape;\n\nexport type ChangeTableOptions = { comment?: string | [string, string] | null };\nexport type ChangeTableCallback = (t: TableChanger) => TableChangeData;\n\nexport type ColumnComment = { column: string; comment: string | null };\n\nexport type JoinTableOptions = {\n tableName?: string;\n comment?: string;\n dropMode?: DropMode;\n};\n\nexport type ExtensionOptions = {\n schema?: string;\n version?: string;\n cascade?: boolean;\n};\n\nexport class Migration extends TransactionAdapter {\n public log?: QueryLogObject;\n\n constructor(\n tx: TransactionAdapter,\n public up: boolean,\n public options: RakeDbConfig,\n ) {\n super(tx, tx.client, tx.types);\n this.log = logParamToLogObject(options.logger || console, options.log);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async query<T extends QueryResultRow = any>(\n query: QueryInput,\n types: TypeParsers = this.types,\n log = this.log,\n ): Promise<QueryResult<T>> {\n return wrapWithLog(log, query, () => super.query(query, types));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async arrays<R extends any[] = any[]>(\n query: QueryInput,\n types: TypeParsers = this.types,\n log = this.log,\n ): Promise<QueryArraysResult<R>> {\n return wrapWithLog(log, query, () => super.arrays(query, types));\n }\n\n createTable(\n tableName: string,\n options: TableOptions,\n fn: ColumnsShapeCallback,\n ): Promise<void>;\n createTable(tableName: string, fn: ColumnsShapeCallback): Promise<void>;\n createTable(\n tableName: string,\n cbOrOptions: ColumnsShapeCallback | TableOptions,\n cb?: ColumnsShapeCallback,\n ): Promise<void> {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions;\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback;\n\n return createTable(this, this.up, tableName, options, fn);\n }\n\n dropTable(\n tableName: string,\n options: TableOptions,\n fn: ColumnsShapeCallback,\n ): Promise<void>;\n dropTable(tableName: string, fn: ColumnsShapeCallback): Promise<void>;\n dropTable(\n tableName: string,\n cbOrOptions: ColumnsShapeCallback | TableOptions,\n cb?: ColumnsShapeCallback,\n ) {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions;\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback;\n\n return createTable(this, !this.up, tableName, options, fn);\n }\n\n createJoinTable(\n tables: string[],\n options?: JoinTableOptions,\n fn?: ColumnsShapeCallback,\n ): Promise<void>;\n createJoinTable(tables: string[], fn?: ColumnsShapeCallback): Promise<void>;\n async createJoinTable(\n tables: string[],\n cbOrOptions?: ColumnsShapeCallback | JoinTableOptions,\n cb?: ColumnsShapeCallback,\n ): Promise<void> {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions || {};\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback | undefined;\n\n return createJoinTable(this, this.up, tables, options, fn);\n }\n\n dropJoinTable(\n tables: string[],\n options?: JoinTableOptions,\n fn?: ColumnsShapeCallback,\n ): Promise<void>;\n dropJoinTable(tables: string[], fn?: ColumnsShapeCallback): Promise<void>;\n async dropJoinTable(\n tables: string[],\n cbOrOptions?: ColumnsShapeCallback | JoinTableOptions,\n cb?: ColumnsShapeCallback,\n ): Promise<void> {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions || {};\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback | undefined;\n\n return createJoinTable(this, !this.up, tables, options, fn);\n }\n\n changeTable(\n tableName: string,\n options: ChangeTableOptions,\n fn?: ChangeTableCallback,\n ): Promise<void>;\n changeTable(tableName: string, fn: ChangeTableCallback): Promise<void>;\n changeTable(\n tableName: string,\n cbOrOptions: ChangeTableCallback | ChangeTableOptions,\n cb?: ChangeTableCallback,\n ) {\n const [fn, options] =\n typeof cbOrOptions === 'function' ? [cbOrOptions, {}] : [cb, cbOrOptions];\n\n return changeTable(this, this.up, tableName, options, fn);\n }\n\n async renameTable(from: string, to: string): Promise<void> {\n const ast: RakeDbAst.RenameTable = {\n type: 'renameTable',\n from: this.up ? from : to,\n to: this.up ? to : from,\n };\n\n await this.query(\n `ALTER TABLE ${quoteTable(ast.from)} RENAME TO \"${ast.to}\"`,\n );\n\n await this.options.appCodeUpdater?.(ast);\n }\n\n addColumn(\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes) => ColumnType,\n ) {\n return addColumn(this, this.up, tableName, columnName, fn);\n }\n\n dropColumn(\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes) => ColumnType,\n ) {\n return addColumn(this, !this.up, tableName, columnName, fn);\n }\n\n addIndex(\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n ) {\n return addIndex(this, this.up, tableName, columns, options);\n }\n\n dropIndex(\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n ) {\n return addIndex(this, !this.up, tableName, columns, options);\n }\n\n addForeignKey(\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n ) {\n return addForeignKey(\n this,\n this.up,\n tableName,\n columns,\n foreignTable,\n foreignColumns,\n options,\n );\n }\n\n dropForeignKey(\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n ) {\n return addForeignKey(\n this,\n !this.up,\n tableName,\n columns,\n foreignTable,\n foreignColumns,\n options,\n );\n }\n\n addPrimaryKey(\n tableName: string,\n columns: string[],\n options?: { name?: string },\n ) {\n return addPrimaryKey(this, this.up, tableName, columns, options);\n }\n\n dropPrimaryKey(\n tableName: string,\n columns: string[],\n options?: { name?: string },\n ) {\n return addPrimaryKey(this, !this.up, tableName, columns, options);\n }\n\n renameColumn(tableName: string, from: string, to: string) {\n return this.changeTable(tableName, (t) => ({\n [from]: t.rename(to),\n }));\n }\n\n createSchema(schemaName: string) {\n return createSchema(this, this.up, schemaName);\n }\n\n dropSchema(schemaName: string) {\n return createSchema(this, !this.up, schemaName);\n }\n\n createExtension(\n name: string,\n options: ExtensionOptions & { ifNotExists?: boolean } = {},\n ) {\n return createExtension(this, this.up, name, options);\n }\n\n dropExtension(\n name: string,\n options: { ifExists?: boolean; cascade?: boolean } = {},\n ) {\n return createExtension(this, !this.up, name, options);\n }\n\n async tableExists(tableName: string) {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"tables\" WHERE \"table_name\" = $1`,\n values: [tableName],\n });\n }\n\n async columnExists(tableName: string, columnName: string): Promise<boolean> {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"columns\" WHERE \"table_name\" = $1 AND \"column_name\" = $2`,\n values: [tableName, columnName],\n });\n }\n\n async constraintExists(constraintName: string): Promise<boolean> {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"table_constraints\" WHERE \"constraint_name\" = $1`,\n values: [constraintName],\n });\n }\n}\n\nconst wrapWithLog = async <Result>(\n log: QueryLogObject | undefined,\n query: QueryInput,\n fn: () => Promise<Result>,\n): Promise<Result> => {\n if (!log) {\n return fn();\n } else {\n const sql = (\n typeof query === 'string'\n ? { text: query, values: [] }\n : query.values\n ? query\n : { ...query, values: [] }\n ) as Sql;\n\n const logData = log.beforeQuery(sql);\n\n try {\n const result = await fn();\n log.afterQuery(sql, logData);\n return result;\n } catch (err) {\n log.onError(err as Error, sql, logData);\n throw err;\n }\n }\n};\n\nconst addColumn = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes) => ColumnType,\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n [columnName]: t.add(fn(t)),\n }));\n};\n\nconst addIndex = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.index(columns, options)),\n }));\n};\n\nconst addForeignKey = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.foreignKey(columns, foreignTable, foreignColumns, options)),\n }));\n};\n\nconst addPrimaryKey = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columns: string[],\n options?: { name?: string },\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.primaryKey(columns, options)),\n }));\n};\n\nconst createSchema = async (\n migration: Migration,\n up: boolean,\n name: string,\n) => {\n const ast: RakeDbAst.Schema = {\n type: 'schema',\n action: up ? 'create' : 'drop',\n name,\n };\n\n await migration.query(\n `${ast.action === 'create' ? 'CREATE' : 'DROP'} SCHEMA \"${name}\"`,\n );\n\n await migration.options.appCodeUpdater?.(ast);\n};\n\nconst createExtension = async (\n migration: Migration,\n up: boolean,\n name: string,\n options: ExtensionOptions & {\n checkExists?: boolean;\n },\n) => {\n const ast: RakeDbAst.Extension = {\n type: 'extension',\n action: up ? 'create' : 'drop',\n name,\n ...options,\n };\n\n let query;\n if (ast.action === 'drop') {\n query = `DROP EXTENSION${ast.ifNotExists ? ' IF EXISTS' : ''} \"${\n ast.name\n }\"${ast.cascade ? ' CASCADE' : ''}`;\n } else {\n query = `CREATE EXTENSION${ast.ifExists ? ' IF NOT EXISTS' : ''} \"${\n ast.name\n }\"${ast.schema ? ` SCHEMA \"${ast.schema}\"` : ''}${\n ast.version ? ` VERSION '${ast.version}'` : ''\n }${ast.cascade ? ' CASCADE' : ''}`;\n }\n\n await migration.query(query);\n\n await migration.options.appCodeUpdater?.(ast);\n};\n\nconst queryExists = (\n db: Migration,\n sql: { text: string; values: unknown[] },\n) => {\n return db.query(sql).then(({ rowCount }) => rowCount > 0);\n};\n","import { Adapter, AdapterOptions, MaybeArray, toArray } from 'pqb';\nimport {\n createSchemaMigrations,\n getMigrationFiles,\n RakeDbConfig,\n MigrationFile,\n quoteTable,\n} from '../common';\nimport {\n getCurrentPromise,\n setCurrentMigrationUp,\n setCurrentMigration,\n ChangeCallback,\n change,\n getCurrentChangeCallback,\n} from '../migration/change';\nimport { Migration } from '../migration/migration';\n\nconst migrateOrRollback = async (\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n args: string[],\n up: boolean,\n) => {\n const files = await getMigrationFiles(config, up);\n\n const argCount = args[0] === 'all' ? Infinity : parseInt(args[0]);\n let count = isNaN(argCount) ? (up ? Infinity : 1) : argCount;\n\n for (const opts of toArray(options)) {\n const db = new Adapter(opts);\n const migratedVersions = await getMigratedVersionsMap(db, config);\n try {\n for (const file of files) {\n if (\n (up && migratedVersions[file.version]) ||\n (!up && !migratedVersions[file.version])\n ) {\n continue;\n }\n\n if (count-- <= 0) break;\n\n await processMigration(db, up, file, config);\n config.logger?.log(`${file.path} ${up ? 'migrated' : 'rolled back'}`);\n }\n } finally {\n await db.close();\n }\n }\n};\n\nconst changeCache: Record<string, ChangeCallback | undefined> = {};\n\nconst processMigration = async (\n db: Adapter,\n up: boolean,\n file: MigrationFile,\n config: RakeDbConfig,\n) => {\n await db.transaction(async (tx) => {\n const db = new Migration(tx, up, config);\n setCurrentMigration(db);\n setCurrentMigrationUp(up);\n\n const callback = changeCache[file.path];\n if (callback) {\n change(callback);\n } else {\n config.requireTs(file.path);\n changeCache[file.path] = getCurrentChangeCallback();\n }\n\n await getCurrentPromise();\n await (up ? saveMigratedVersion : removeMigratedVersion)(\n db,\n file.version,\n config,\n );\n });\n};\n\nconst saveMigratedVersion = async (\n db: Adapter,\n version: string,\n config: RakeDbConfig,\n) => {\n await db.query(\n `INSERT INTO ${quoteTable(config.migrationsTable)} VALUES ('${version}')`,\n );\n};\n\nconst removeMigratedVersion = async (\n db: Adapter,\n version: string,\n config: RakeDbConfig,\n) => {\n await db.query(\n `DELETE FROM ${quoteTable(\n config.migrationsTable,\n )} WHERE version = '${version}'`,\n );\n};\n\nconst getMigratedVersionsMap = async (\n db: Adapter,\n config: RakeDbConfig,\n): Promise<Record<string, boolean>> => {\n try {\n const result = await db.arrays<[string]>(\n `SELECT * FROM ${quoteTable(config.migrationsTable)}`,\n );\n return Object.fromEntries(result.rows.map((row) => [row[0], true]));\n } catch (err) {\n if ((err as Record<string, unknown>).code === '42P01') {\n await createSchemaMigrations(db, config);\n return {};\n }\n throw err;\n }\n};\n\nexport const migrate = (\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n args: string[] = [],\n) => migrateOrRollback(options, config, args, true);\n\nexport const rollback = (\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n args: string[] = [],\n) => migrateOrRollback(options, config, args, false);\n","import { Adapter, AdapterOptions, MaybeArray, toArray } from 'pqb';\nimport {\n getDatabaseAndUserFromOptions,\n setAdminCredentialsToOptions,\n setAdapterOptions,\n createSchemaMigrations,\n RakeDbConfig,\n migrationConfigDefaults,\n} from '../common';\nimport { migrate } from './migrateOrRollback';\n\nconst execute = async (\n options: AdapterOptions,\n sql: string,\n): Promise<'ok' | 'already' | 'forbidden' | { error: unknown }> => {\n const db = new Adapter(options);\n try {\n await db.query(sql);\n return 'ok';\n } catch (error) {\n const err = error as Record<string, unknown>;\n if (err.code === '42P04' || err.code === '3D000') {\n return 'already';\n } else if (err.code === '42501') {\n return 'forbidden';\n } else {\n return { error };\n }\n } finally {\n await db.close();\n }\n};\n\nconst createOrDrop = async (\n options: AdapterOptions,\n adminOptions: AdapterOptions,\n config: RakeDbConfig,\n args: {\n sql(params: { database: string; user: string }): string;\n successMessage(params: { database: string }): string;\n alreadyMessage(params: { database: string }): string;\n createVersionsTable?: boolean;\n },\n) => {\n const params = getDatabaseAndUserFromOptions(options);\n\n const result = await execute(\n setAdapterOptions(adminOptions, { database: 'postgres' }),\n args.sql(params),\n );\n if (result === 'ok') {\n console.log(args.successMessage(params));\n } else if (result === 'already') {\n console.log(args.alreadyMessage(params));\n } else if (result === 'forbidden') {\n await createOrDrop(\n options,\n await setAdminCredentialsToOptions(options),\n config,\n args,\n );\n return;\n } else {\n throw result.error;\n }\n\n if (!args.createVersionsTable) return;\n\n const db = new Adapter(options);\n await createSchemaMigrations(db, config);\n await db.close();\n};\n\nexport const createDb = async (\n arg: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n) => {\n for (const options of toArray(arg)) {\n await createOrDrop(options, options, config, {\n sql({ database, user }) {\n return `CREATE DATABASE \"${database}\" OWNER \"${user}\"`;\n },\n successMessage({ database }) {\n return `Database ${database} successfully created`;\n },\n alreadyMessage({ database }) {\n return `Database ${database} already exists`;\n },\n createVersionsTable: true,\n });\n }\n};\n\nexport const dropDb = async (arg: MaybeArray<AdapterOptions>) => {\n for (const options of toArray(arg)) {\n await createOrDrop(options, options, migrationConfigDefaults, {\n sql({ database }) {\n return `DROP DATABASE \"${database}\"`;\n },\n successMessage({ database }) {\n return `Database ${database} was successfully dropped`;\n },\n alreadyMessage({ database }) {\n return `Database ${database} does not exist`;\n },\n });\n }\n};\n\nexport const resetDb = async (\n arg: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n) => {\n await dropDb(arg);\n await createDb(arg, config);\n await migrate(arg, config);\n};\n","import {\n getFirstWordAndRest,\n getTextAfterFrom,\n getTextAfterTo,\n RakeDbConfig,\n} from '../common';\nimport { mkdir, writeFile } from 'fs/promises';\nimport path from 'path';\n\nexport const generate = async (config: RakeDbConfig, args: string[]) => {\n const name = args[0];\n if (!name) throw new Error('Migration name is missing');\n\n await mkdir(config.migrationsPath, { recursive: true });\n\n const filePath = path.resolve(\n config.migrationsPath,\n `${makeFileTimeStamp()}_${name}.ts`,\n );\n await writeFile(filePath, makeContent(name, args.slice(1)));\n console.log(`Created ${filePath}`);\n};\n\nconst makeFileTimeStamp = () => {\n const now = new Date();\n return [\n now.getUTCFullYear(),\n now.getUTCMonth() + 1,\n now.getUTCDate(),\n now.getUTCHours(),\n now.getUTCMinutes(),\n now.getUTCSeconds(),\n ]\n .map((value) => (value < 10 ? `0${value}` : value))\n .join('');\n};\n\nconst makeContent = (name: string, args: string[]): string => {\n let content = `import { change } from 'rake-db';\\n\\nchange(async (db) => {`;\n\n const [first, rest] = getFirstWordAndRest(name);\n if (rest) {\n if (first === 'create' || first === 'drop') {\n content += `\\n await db.${\n first === 'create' ? 'createTable' : 'dropTable'\n }('${rest}', (t) => ({`;\n content += makeColumnsContent(args);\n content += '\\n }));';\n } else if (first === 'change') {\n content += `\\n await db.changeTable('${rest}', (t) => ({`;\n content += '\\n }));';\n } else if (first === 'add' || first === 'remove') {\n const table =\n first === 'add' ? getTextAfterTo(rest) : getTextAfterFrom(rest);\n content += `\\n await db.changeTable(${\n table ? `'${table}'` : 'tableName'\n }, (t) => ({`;\n content += makeColumnsContent(args, first);\n content += '\\n }));';\n }\n }\n\n return content + '\\n});\\n';\n};\n\nconst makeColumnsContent = (args: string[], method?: string) => {\n let content = '';\n const prepend = method ? `t.${method}(` : '';\n const append = method ? ')' : '';\n\n for (const arg of args) {\n const [name, def] = arg.split(':');\n if (!def) {\n throw new Error(\n `Column argument should be similar to name:type, name:type.method1.method2, name:type(arg).method(arg). Example: name:varchar(20).nullable. Received: ${arg}`,\n );\n }\n\n const methods = def\n .split('.')\n .map((method) => (method.endsWith(')') ? `.${method}` : `.${method}()`));\n content += `\\n ${name}: ${prepend}t${methods.join('')}${append},`;\n }\n return content;\n};\n","import { AdapterOptions, MaybeArray } from 'pqb';\nimport { createDb, dropDb, resetDb } from './commands/createOrDrop';\nimport { migrate, rollback } from './commands/migrateOrRollback';\nimport { getMigrationConfigWithDefaults, RakeDbConfig } from './common';\nimport { generate } from './commands/generate';\n\nexport const rakeDb = async (\n options: MaybeArray<AdapterOptions>,\n partialConfig: Partial<RakeDbConfig> = {},\n args: string[] = process.argv.slice(2),\n) => {\n const config = getMigrationConfigWithDefaults(partialConfig);\n\n const command = args[0]?.split(':')[0];\n\n if (command === 'create') {\n await createDb(options, config);\n } else if (command === 'drop') {\n await dropDb(options);\n } else if (command === 'reset') {\n await resetDb(options, config);\n } else if (command === 'migrate') {\n await migrate(options, config, args.slice(1));\n } else if (command === 'rollback') {\n await rollback(options, config, args.slice(1));\n } else if (command === 'g' || command === 'generate') {\n await generate(config, args.slice(1));\n } else {\n printHelp();\n }\n};\n\nconst printHelp = () =>\n console.log(\n `Usage: rake-db [command] [arguments]\n\nCommands:\n create create databases\n drop drop databases\n reset drop, create and migrate databases\n g, generate generate migration file, see below\n migrate migrate all pending migrations\n rollback rollback the last migrated\n no or unknown command prints this message\n \nGenerate arguments:\n- (required) first argument is migration name\n * create* template for create table\n * change* template for change table\n * add*To* template for add columns\n * remove*From* template for remove columns\n * drop* template for drop table\n\n- other arguments considered as columns with types and optional methods:\n rake-db g createTable id:serial.primaryKey name:text.nullable\n`,\n );\n"],"names":["__spreadValues","__spreadProps","makeAst","astToQueries","changeTableData","db","method"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -891,6 +891,9 @@ class UnknownColumn extends pqb.ColumnType {
891
891
  this.dataType = dataType;
892
892
  this.operators = pqb.Operators.any;
893
893
  }
894
+ toCode() {
895
+ return "unknown";
896
+ }
894
897
  }
895
898
  const createJoinTable = async (migration, up, tables, options, fn) => {
896
899
  const tableName = options.tableName || joinWords(...tables);
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sources":["../src/common.ts","../src/migration/change.ts","../src/migration/migrationUtils.ts","../src/migration/createTable.ts","../src/migration/changeTable.ts","../src/migration/createJoinTable.ts","../src/migration/migration.ts","../src/commands/migrateOrRollback.ts","../src/commands/createOrDrop.ts","../src/commands/generate.ts","../src/rakeDb.ts"],"sourcesContent":["import {\n Adapter,\n AdapterOptions,\n NoPrimaryKeyOption,\n QueryLogOptions,\n} from 'pqb';\nimport Enquirer from 'enquirer';\nimport path from 'path';\nimport { readdir } from 'fs/promises';\nimport { RakeDbAst } from './ast';\n\nexport type RakeDbConfig = {\n migrationsPath: string;\n migrationsTable: string;\n requireTs(path: string): void;\n noPrimaryKey?: NoPrimaryKeyOption;\n appCodeUpdater?: AppCodeUpdater;\n} & QueryLogOptions;\n\nexport type AppCodeUpdater = (ast: RakeDbAst) => Promise<void>;\n\nexport const migrationConfigDefaults = {\n migrationsPath: path.resolve(process.cwd(), 'src', 'migrations'),\n migrationsTable: 'schemaMigrations',\n requireTs: require,\n log: true,\n logger: console,\n};\n\nexport const getMigrationConfigWithDefaults = (\n config: Partial<RakeDbConfig>,\n) => {\n return { ...migrationConfigDefaults, ...config };\n};\n\nexport const getDatabaseAndUserFromOptions = (\n options: AdapterOptions,\n): { database: string; user: string } => {\n if (options.databaseURL) {\n const url = new URL(options.databaseURL);\n return {\n database: url.pathname.slice(1),\n user: url.username,\n };\n } else {\n return {\n database: options.database as string,\n user: options.user as string,\n };\n }\n};\n\nexport const setAdapterOptions = (\n options: AdapterOptions,\n set: { database?: string; user?: string; password?: string },\n): AdapterOptions => {\n if (options.databaseURL) {\n const url = new URL(options.databaseURL);\n\n if ('database' in set) {\n url.pathname = `/${set.database}`;\n }\n\n if (set.user !== undefined) {\n url.username = set.user;\n }\n\n if (set.password !== undefined) {\n url.password = set.password;\n }\n\n return { ...options, databaseURL: url.toString() };\n } else {\n return {\n ...options,\n ...set,\n };\n }\n};\n\nconst askAdminCredentials = async (): Promise<{\n user: string;\n password: string;\n}> => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const prompt = new (Enquirer as any).Snippet({\n message: `What are postgres admin login and password?`,\n fields: [\n {\n name: 'user',\n required: true,\n },\n {\n name: 'password',\n },\n ],\n values: {\n user: 'postgres',\n password: '',\n },\n template: 'Admin user: {{user}}\\nAdmin password: {{password}}',\n });\n\n const { values } = await prompt.run();\n if (!values.password) values.password = '';\n\n return values;\n};\n\nexport const setAdminCredentialsToOptions = async (\n options: AdapterOptions,\n): Promise<AdapterOptions> => {\n const values = await askAdminCredentials();\n return setAdapterOptions(options, values);\n};\n\nexport const createSchemaMigrations = async (\n db: Adapter,\n config: RakeDbConfig,\n) => {\n try {\n await db.query(\n `CREATE TABLE ${quoteTable(\n config.migrationsTable,\n )} ( version TEXT NOT NULL )`,\n );\n console.log('Created versions table');\n } catch (err) {\n if ((err as Record<string, unknown>).code === '42P07') {\n console.log('Versions table exists');\n } else {\n throw err;\n }\n }\n};\n\nexport const getFirstWordAndRest = (\n input: string,\n): [string] | [string, string] => {\n const index = input.search(/(?=[A-Z])|[-_]/);\n if (index !== -1) {\n const restStart =\n input[index] === '-' || input[index] === '_' ? index + 1 : index;\n const rest = input.slice(restStart);\n return [input.slice(0, index), rest[0].toLowerCase() + rest.slice(1)];\n } else {\n return [input];\n }\n};\n\nconst getTextAfterRegExp = (\n input: string,\n regex: RegExp,\n length: number,\n): string | undefined => {\n let index = input.search(regex);\n if (index === -1) return;\n\n if (input[index] === '-' || input[index] === '_') index++;\n index += length;\n\n const start = input[index] == '-' || input[index] === '_' ? index + 1 : index;\n const text = input.slice(start);\n return text[0].toLowerCase() + text.slice(1);\n};\n\nexport const getTextAfterTo = (input: string): string | undefined => {\n return getTextAfterRegExp(input, /(To|-to|_to)[A-Z-_]/, 2);\n};\n\nexport const getTextAfterFrom = (input: string): string | undefined => {\n return getTextAfterRegExp(input, /(From|-from|_from)[A-Z-_]/, 4);\n};\n\nexport type MigrationFile = {\n path: string;\n version: string;\n};\n\nexport const getMigrationFiles = async (\n config: RakeDbConfig,\n up: boolean,\n): Promise<MigrationFile[]> => {\n const { migrationsPath } = config;\n\n let files: string[];\n try {\n files = await readdir(migrationsPath);\n } catch (_) {\n return [];\n }\n\n const sort = up ? sortAsc : sortDesc;\n return sort(files).map((file) => {\n if (!file.endsWith('.ts')) {\n throw new Error(\n `Only .ts files are supported for migration, received: ${file}`,\n );\n }\n\n const timestampMatch = file.match(/^(\\d{14})\\D/);\n if (!timestampMatch) {\n throw new Error(\n `Migration file name should start with 14 digit version, received ${file}`,\n );\n }\n\n return {\n path: path.join(migrationsPath, file),\n version: timestampMatch[1],\n };\n });\n};\n\nexport const sortAsc = (arr: string[]) => arr.sort();\n\nexport const sortDesc = (arr: string[]) => arr.sort((a, b) => (a > b ? -1 : 1));\n\nexport const joinWords = (...words: string[]) => {\n return words\n .slice(1)\n .reduce(\n (acc, word) => acc + word[0].toUpperCase() + word.slice(1),\n words[0],\n );\n};\n\nexport const joinColumns = (columns: string[]) => {\n return columns.map((column) => `\"${column}\"`).join(', ');\n};\n\nexport const quoteTable = (table: string) => {\n const index = table.indexOf('.');\n if (index !== -1) {\n return `\"${table.slice(0, index)}\".\"${table.slice(index + 1)}\"`;\n } else {\n return `\"${table}\"`;\n }\n};\n","import { Migration } from './migration';\n\nlet currentMigration: Migration | undefined;\nlet currentPromise: Promise<void> | undefined;\nlet currentUp = true;\nlet currentChangeCallback: ChangeCallback | undefined;\n\nexport type ChangeCallback = (db: Migration, up: boolean) => Promise<void>;\n\nexport const change = (fn: ChangeCallback) => {\n if (!currentMigration) throw new Error('Database instance is not set');\n currentPromise = fn(currentMigration, currentUp);\n currentChangeCallback = fn;\n};\n\nexport const setCurrentMigration = (db: Migration) => {\n currentMigration = db;\n};\n\nexport const setCurrentMigrationUp = (up: boolean) => {\n currentUp = up;\n};\n\nexport const getCurrentPromise = () => currentPromise;\n\nexport const getCurrentChangeCallback = () => currentChangeCallback;\n","import {\n ColumnType,\n ForeignKeyTable,\n ForeignKeyOptions,\n getRaw,\n isRaw,\n quote,\n Sql,\n TableData,\n toArray,\n} from 'pqb';\nimport { ColumnComment, Migration } from './migration';\nimport { joinColumns, joinWords, quoteTable } from '../common';\n\nexport const columnToSql = (\n key: string,\n item: ColumnType,\n values: unknown[],\n hasMultiplePrimaryKeys: boolean,\n): string => {\n const line = [`\"${key}\" ${item.toSQL()}`];\n\n if (item.data.compression) {\n line.push(`COMPRESSION ${item.data.compression}`);\n }\n\n if (item.data.collate) {\n line.push(`COLLATE ${quote(item.data.collate)}`);\n }\n\n if (item.isPrimaryKey && !hasMultiplePrimaryKeys) {\n line.push('PRIMARY KEY');\n } else if (!item.isNullable) {\n line.push('NOT NULL');\n }\n\n if (item.data.default !== undefined) {\n if (\n typeof item.data.default === 'object' &&\n item.data.default &&\n isRaw(item.data.default)\n ) {\n line.push(`DEFAULT ${getRaw(item.data.default, values)}`);\n } else {\n line.push(`DEFAULT ${quote(item.data.default)}`);\n }\n }\n\n const { foreignKey } = item.data;\n if (foreignKey) {\n const table = getForeignKeyTable(\n 'fn' in foreignKey ? foreignKey.fn : foreignKey.table,\n );\n\n if (foreignKey.name) {\n line.push(`CONSTRAINT \"${foreignKey.name}\"`);\n }\n\n line.push(referencesToSql(table, foreignKey.columns, foreignKey));\n }\n\n return line.join(' ');\n};\n\nexport const addColumnIndex = (\n indexes: TableData.Index[],\n key: string,\n item: ColumnType,\n) => {\n if (item.data) {\n if (item.data.index) {\n indexes.push({\n columns: [{ ...item.data.index, column: key }],\n options: item.data.index,\n });\n }\n }\n};\n\nexport const addColumnComment = (\n comments: ColumnComment[],\n key: string,\n item: ColumnType,\n) => {\n if (item.data.comment) {\n comments.push({ column: key, comment: item.data.comment });\n }\n};\n\nexport const getForeignKeyTable = (\n fnOrTable: (() => ForeignKeyTable) | string,\n) => {\n if (typeof fnOrTable === 'string') {\n return fnOrTable;\n }\n\n const klass = fnOrTable();\n return new klass().table;\n};\n\nexport const constraintToSql = (\n tableName: string,\n up: boolean,\n foreignKey: TableData['foreignKeys'][number],\n) => {\n const constraintName =\n foreignKey.options.name ||\n `${tableName}_${foreignKey.columns.join('_')}_fkey`;\n\n if (!up) {\n const { dropMode } = foreignKey.options;\n return `CONSTRAINT \"${constraintName}\"${dropMode ? ` ${dropMode}` : ''}`;\n }\n\n const table = getForeignKeyTable(foreignKey.fnOrTable);\n return `CONSTRAINT \"${constraintName}\" FOREIGN KEY (${joinColumns(\n foreignKey.columns,\n )}) ${referencesToSql(table, foreignKey.foreignColumns, foreignKey.options)}`;\n};\n\nexport const referencesToSql = (\n table: string,\n columns: string[],\n foreignKey: Pick<ForeignKeyOptions, 'match' | 'onDelete' | 'onUpdate'>,\n) => {\n const sql: string[] = [\n `REFERENCES ${quoteTable(table)}(${joinColumns(columns)})`,\n ];\n\n if (foreignKey.match) {\n sql.push(`MATCH ${foreignKey.match.toUpperCase()}`);\n }\n\n if (foreignKey.onDelete) {\n sql.push(`ON DELETE ${foreignKey.onDelete.toUpperCase()}`);\n }\n\n if (foreignKey.onUpdate) {\n sql.push(`ON UPDATE ${foreignKey.onUpdate.toUpperCase()}`);\n }\n\n return sql.join(' ');\n};\n\nexport const indexesToQuery = (\n up: boolean,\n tableName: string,\n indexes: TableData.Index[],\n): Sql[] => {\n return indexes.map(({ columns, options }) => {\n const indexName =\n options.name ||\n joinWords(tableName, ...columns.map(({ column }) => column), 'index');\n\n if (!up) {\n return {\n text: `DROP INDEX \"${indexName}\"${\n options.dropMode ? ` ${options.dropMode}` : ''\n }`,\n values: [],\n };\n }\n\n const values: unknown[] = [];\n\n const sql: string[] = ['CREATE'];\n\n if (options.unique) {\n sql.push('UNIQUE');\n }\n\n sql.push(`INDEX \"${indexName}\" ON ${quoteTable(tableName)}`);\n\n if (options.using) {\n sql.push(`USING ${options.using}`);\n }\n\n const columnsSql: string[] = [];\n\n columns.forEach((column) => {\n const columnSql: string[] = [\n `\"${column.column}\"${\n column.expression ? `(${column.expression})` : ''\n }`,\n ];\n\n if (column.collate) {\n columnSql.push(`COLLATE '${column.collate}'`);\n }\n\n if (column.operator) {\n columnSql.push(column.operator);\n }\n\n if (column.order) {\n columnSql.push(column.order);\n }\n\n columnsSql.push(columnSql.join(' '));\n });\n\n sql.push(`(${columnsSql.join(', ')})`);\n\n if (options.include) {\n sql.push(\n `INCLUDE (${toArray(options.include)\n .map((column) => `\"${column}\"`)\n .join(', ')})`,\n );\n }\n\n if (options.with) {\n sql.push(`WITH (${options.with})`);\n }\n\n if (options.tablespace) {\n sql.push(`TABLESPACE ${options.tablespace}`);\n }\n\n if (options.where) {\n sql.push(\n `WHERE ${\n typeof options.where === 'object' &&\n options.where &&\n isRaw(options.where)\n ? getRaw(options.where, values)\n : options.where\n }`,\n );\n }\n\n return { text: sql.join(' '), values };\n });\n};\n\nexport const commentsToQuery = (\n tableName: string,\n comments: ColumnComment[],\n): Sql[] => {\n return comments.map(({ column, comment }) => ({\n text: `COMMENT ON COLUMN ${quoteTable(tableName)}.\"${column}\" IS ${quote(\n comment,\n )}`,\n values: [],\n }));\n};\n\nexport const primaryKeyToSql = (\n primaryKey: Exclude<TableData['primaryKey'], undefined>,\n) => {\n const name = primaryKey.options?.name;\n return `${name ? `CONSTRAINT \"${name}\" ` : ''}PRIMARY KEY (${joinColumns(\n primaryKey.columns,\n )})`;\n};\n\nexport const getPrimaryKeysOfTable = async (\n db: Migration,\n tableName: string,\n): Promise<{ name: string; type: string }[]> => {\n const { rows } = await db.query<{ name: string; type: string }>(\n {\n text: `SELECT\n pg_attribute.attname AS name,\n format_type(pg_attribute.atttypid, pg_attribute.atttypmod) AS type\nFROM pg_index, pg_class, pg_attribute, pg_namespace\nWHERE\n pg_class.oid = $1::regclass AND\n indrelid = pg_class.oid AND\n nspname = 'public' AND\n pg_class.relnamespace = pg_namespace.oid AND\n pg_attribute.attrelid = pg_class.oid AND\n pg_attribute.attnum = any(pg_index.indkey) AND\n indisprimary`,\n values: [tableName],\n },\n db.types,\n undefined,\n );\n\n return rows;\n};\n","import {\n ColumnsShape,\n columnTypes,\n getColumnTypes,\n getTableData,\n NoPrimaryKeyOption,\n quote,\n raw,\n Sql,\n TableData,\n} from 'pqb';\nimport {\n ColumnComment,\n ColumnsShapeCallback,\n Migration,\n TableOptions,\n} from './migration';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n commentsToQuery,\n constraintToSql,\n indexesToQuery,\n primaryKeyToSql,\n} from './migrationUtils';\nimport { quoteTable } from '../common';\nimport { RakeDbAst } from '../ast';\n\nconst types = Object.assign(Object.create(columnTypes), {\n raw,\n});\n\nexport const createTable = async (\n migration: Migration,\n up: boolean,\n tableName: string,\n options: TableOptions,\n fn: ColumnsShapeCallback,\n) => {\n const shape = getColumnTypes(types, fn);\n const tableData = getTableData();\n const ast = makeAst(\n up,\n tableName,\n shape,\n tableData,\n options,\n migration.options.noPrimaryKey,\n );\n\n validatePrimaryKey(ast);\n\n const queries = astToQueries(ast);\n for (const query of queries) {\n await migration.query(query);\n }\n\n await migration.options.appCodeUpdater?.(ast);\n};\n\nconst makeAst = (\n up: boolean,\n tableName: string,\n shape: ColumnsShape,\n tableData: TableData,\n options: TableOptions,\n noPrimaryKey?: NoPrimaryKeyOption,\n): RakeDbAst.Table => {\n const shapePKeys: string[] = [];\n for (const key in shape) {\n if (shape[key].isPrimaryKey) {\n shapePKeys.push(key);\n }\n }\n\n const primaryKey = tableData.primaryKey;\n\n return {\n type: 'table',\n action: up ? 'create' : 'drop',\n name: tableName,\n shape,\n ...tableData,\n primaryKey:\n shapePKeys.length <= 1\n ? primaryKey\n : primaryKey\n ? { ...primaryKey, columns: [...shapePKeys, ...primaryKey.columns] }\n : { columns: shapePKeys },\n ...options,\n noPrimaryKey: options.noPrimaryKey ? 'ignore' : noPrimaryKey || 'error',\n };\n};\n\nconst validatePrimaryKey = (ast: RakeDbAst.Table) => {\n if (ast.noPrimaryKey !== 'ignore') {\n let hasPrimaryKey = !!ast.primaryKey?.columns?.length;\n if (!hasPrimaryKey) {\n for (const key in ast.shape) {\n if (ast.shape[key].isPrimaryKey) {\n hasPrimaryKey = true;\n break;\n }\n }\n }\n\n if (!hasPrimaryKey) {\n const message = `Table ${ast.name} has no primary key`;\n if (ast.noPrimaryKey === 'error') {\n throw new Error(message);\n } else {\n console.warn(message);\n }\n }\n }\n};\n\nconst astToQueries = (ast: RakeDbAst.Table): Sql[] => {\n if (ast.action === 'drop') {\n return [\n {\n text: `DROP TABLE ${quoteTable(ast.name)}${\n ast.dropMode ? ` ${ast.dropMode}` : ''\n }`,\n values: [],\n },\n ];\n }\n\n const lines: string[] = [];\n const values: unknown[] = [];\n const indexes: TableData.Index[] = [];\n const comments: ColumnComment[] = [];\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n addColumnIndex(indexes, key, item);\n addColumnComment(comments, key, item);\n lines.push(`\\n ${columnToSql(key, item, values, !!ast.primaryKey)}`);\n }\n\n if (ast.primaryKey) {\n lines.push(`\\n ${primaryKeyToSql(ast.primaryKey)}`);\n }\n\n ast.foreignKeys.forEach((foreignKey) => {\n lines.push(`\\n ${constraintToSql(ast.name, true, foreignKey)}`);\n });\n\n indexes.push(...ast.indexes);\n\n const result: Sql[] = [\n {\n text: `CREATE TABLE ${quoteTable(ast.name)} (${lines.join(',')}\\n)`,\n values,\n },\n ...indexesToQuery(true, ast.name, indexes),\n ...commentsToQuery(ast.name, comments),\n ];\n\n if (ast.comment) {\n result.push({\n text: `COMMENT ON TABLE ${quoteTable(ast.name)} IS ${quote(ast.comment)}`,\n values: [],\n });\n }\n\n return result;\n};\n","import {\n ColumnType,\n resetTableData,\n getTableData,\n EmptyObject,\n emptyObject,\n TableData,\n RawExpression,\n raw,\n columnTypes,\n Sql,\n quote,\n getRaw,\n isRaw,\n} from 'pqb';\nimport {\n ChangeTableCallback,\n ChangeTableOptions,\n ColumnComment,\n DropMode,\n Migration,\n MigrationColumnTypes,\n} from './migration';\nimport { RakeDbAst } from '../ast';\nimport { quoteTable } from '../common';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n commentsToQuery,\n constraintToSql,\n indexesToQuery,\n primaryKeyToSql,\n} from './migrationUtils';\n\ntype ChangeTableData = { add: TableData; drop: TableData };\nconst newChangeTableData = (): ChangeTableData => ({\n add: { indexes: [], foreignKeys: [] },\n drop: { indexes: [], foreignKeys: [] },\n});\n\nlet changeTableData = newChangeTableData();\n\nconst resetChangeTableData = () => {\n changeTableData = newChangeTableData();\n};\n\nconst mergeTableData = (a: TableData, b: TableData) => {\n if (b.primaryKey) {\n if (!a.primaryKey) {\n a.primaryKey = b.primaryKey;\n } else {\n a.primaryKey = {\n columns: [...a.primaryKey.columns, ...b.primaryKey.columns],\n options: { ...a.primaryKey.options, ...b.primaryKey.options },\n };\n }\n }\n a.indexes = [...a.indexes, ...b.indexes];\n a.foreignKeys = [...a.foreignKeys, ...b.foreignKeys];\n};\n\nfunction add(\n item: ColumnType,\n options?: { dropMode?: DropMode },\n): RakeDbAst.ChangeTableItem.Column;\nfunction add(emptyObject: EmptyObject): EmptyObject;\nfunction add(\n items: Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n): Record<string, RakeDbAst.ChangeTableItem.Column>;\nfunction add(\n item: ColumnType | EmptyObject | Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n):\n | RakeDbAst.ChangeTableItem.Column\n | EmptyObject\n | Record<string, RakeDbAst.ChangeTableItem.Column> {\n if (item instanceof ColumnType) {\n return { type: 'add', item, dropMode: options?.dropMode };\n } else if (item === emptyObject) {\n mergeTableData(changeTableData.add, getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, RakeDbAst.ChangeTableItem.Column> = {};\n for (const key in item) {\n result[key] = {\n type: 'add',\n item: (item as Record<string, ColumnType>)[key],\n dropMode: options?.dropMode,\n };\n }\n return result;\n }\n}\n\nconst drop = ((item, options) => {\n if (item instanceof ColumnType) {\n return { type: 'drop', item, dropMode: options?.dropMode };\n } else if (item === emptyObject) {\n mergeTableData(changeTableData.drop, getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, RakeDbAst.ChangeTableItem.Column> = {};\n for (const key in item) {\n result[key] = {\n type: 'drop',\n item: (item as Record<string, ColumnType>)[key],\n dropMode: options?.dropMode,\n };\n }\n return result;\n }\n}) as typeof add;\n\ntype Change = RakeDbAst.ChangeTableItem.Change & ChangeOptions;\n\ntype ChangeOptions = {\n usingUp?: RawExpression;\n usingDown?: RawExpression;\n};\n\nconst columnTypeToColumnChange = (\n item: ColumnType | Change,\n): RakeDbAst.ColumnChange => {\n if (item instanceof ColumnType) {\n const foreignKey = item.data.foreignKey;\n if (foreignKey && 'fn' in foreignKey) {\n throw new Error('Callback in foreignKey is not allowed in migration');\n }\n\n return {\n column: item,\n type: item.toSQL(),\n nullable: item.isNullable,\n primaryKey: item.isPrimaryKey,\n ...item.data,\n foreignKey,\n };\n }\n\n return item.to;\n};\n\ntype TableChangeMethods = typeof tableChangeMethods;\nconst tableChangeMethods = {\n raw: raw,\n add,\n drop,\n change(\n from: ColumnType | Change,\n to: ColumnType | Change,\n options?: ChangeOptions,\n ): Change {\n return {\n type: 'change',\n from: columnTypeToColumnChange(from),\n to: columnTypeToColumnChange(to),\n ...options,\n };\n },\n default(value: unknown | RawExpression): Change {\n return { type: 'change', from: { default: null }, to: { default: value } };\n },\n nullable(): Change {\n return {\n type: 'change',\n from: { nullable: false },\n to: { nullable: true },\n };\n },\n nonNullable(): Change {\n return {\n type: 'change',\n from: { nullable: true },\n to: { nullable: false },\n };\n },\n comment(comment: string | null): Change {\n return { type: 'change', from: { comment: null }, to: { comment } };\n },\n rename(name: string): RakeDbAst.ChangeTableItem.Rename {\n return { type: 'rename', name };\n },\n};\n\nexport type TableChanger = MigrationColumnTypes & TableChangeMethods;\n\nexport type TableChangeData = Record<\n string,\n | RakeDbAst.ChangeTableItem.Column\n | RakeDbAst.ChangeTableItem.Rename\n | Change\n | EmptyObject\n>;\n\nexport const changeTable = async (\n migration: Migration,\n up: boolean,\n tableName: string,\n options: ChangeTableOptions,\n fn?: ChangeTableCallback,\n) => {\n resetTableData();\n resetChangeTableData();\n\n const tableChanger = Object.create(columnTypes) as TableChanger;\n Object.assign(tableChanger, tableChangeMethods);\n\n const changeData = fn?.(tableChanger) || {};\n\n const ast = makeAst(up, tableName, changeData, changeTableData, options);\n\n const queries = astToQueries(ast);\n for (const query of queries) {\n await migration.query(query);\n }\n\n await migration.options.appCodeUpdater?.(ast);\n};\n\nconst makeAst = (\n up: boolean,\n name: string,\n changeData: TableChangeData,\n changeTableData: ChangeTableData,\n options: ChangeTableOptions,\n): RakeDbAst.ChangeTable => {\n const { comment } = options;\n\n const shape: Record<string, RakeDbAst.ChangeTableItem> = {};\n for (const key in changeData) {\n const item = changeData[key];\n if ('type' in item) {\n if (up) {\n shape[key] =\n item.type === 'change' && item.usingUp\n ? { ...item, using: item.usingUp }\n : item;\n } else {\n if (item.type === 'rename') {\n shape[item.name] = { ...item, name: key };\n } else {\n shape[key] =\n item.type === 'add'\n ? { ...item, type: 'drop' }\n : item.type === 'drop'\n ? { ...item, type: 'add' }\n : item.type === 'change'\n ? { ...item, from: item.to, to: item.from, using: item.usingDown }\n : item;\n }\n }\n }\n }\n\n return {\n type: 'changeTable',\n name,\n comment: comment\n ? up\n ? Array.isArray(comment)\n ? comment[1]\n : comment\n : Array.isArray(comment)\n ? comment[0]\n : null\n : undefined,\n shape,\n ...(up\n ? changeTableData\n : { add: changeTableData.drop, drop: changeTableData.add }),\n };\n};\n\ntype PrimaryKeys = {\n columns: string[];\n change?: true;\n options?: { name?: string };\n};\n\nconst astToQueries = (ast: RakeDbAst.ChangeTable): Sql[] => {\n const result: Sql[] = [];\n\n if (ast.comment !== undefined) {\n result.push({\n text: `COMMENT ON TABLE ${quoteTable(ast.name)} IS ${quote(ast.comment)}`,\n values: [],\n });\n }\n\n const addPrimaryKeys: PrimaryKeys = ast.add.primaryKey\n ? { ...ast.add.primaryKey }\n : {\n columns: [],\n };\n const dropPrimaryKeys: PrimaryKeys = ast.drop.primaryKey\n ? { ...ast.drop.primaryKey }\n : {\n columns: [],\n };\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n\n if (item.type === 'add') {\n if (item.item.isPrimaryKey) {\n addPrimaryKeys.columns.push(key);\n }\n } else if (item.type === 'drop') {\n if (item.item.isPrimaryKey) {\n dropPrimaryKeys.columns.push(key);\n }\n } else if (item.type === 'change') {\n if (item.from.primaryKey) {\n dropPrimaryKeys.columns.push(key);\n dropPrimaryKeys.change = true;\n }\n\n if (item.to.primaryKey) {\n addPrimaryKeys.columns.push(key);\n addPrimaryKeys.change = true;\n }\n }\n }\n\n const alterTable: string[] = [];\n const values: unknown[] = [];\n const addIndexes: TableData.Index[] = [...ast.add.indexes];\n const dropIndexes: TableData.Index[] = [...ast.drop.indexes];\n const addForeignKeys: TableData.ForeignKey[] = [...ast.add.foreignKeys];\n const dropForeignKeys: TableData.ForeignKey[] = [...ast.drop.foreignKeys];\n const comments: ColumnComment[] = [];\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n\n if (item.type === 'add') {\n addColumnIndex(addIndexes, key, item.item);\n addColumnComment(comments, key, item.item);\n\n alterTable.push(\n `ADD COLUMN ${columnToSql(\n key,\n item.item,\n values,\n addPrimaryKeys.columns.length > 1,\n )}`,\n );\n } else if (item.type === 'drop') {\n addColumnIndex(dropIndexes, key, item.item);\n\n alterTable.push(\n `DROP COLUMN \"${key}\"${item.dropMode ? ` ${item.dropMode}` : ''}`,\n );\n } else if (item.type === 'change') {\n const { from, to } = item;\n if (from.type !== to.type || from.collate !== to.collate) {\n alterTable.push(\n `ALTER COLUMN \"${key}\" TYPE ${to.type}${\n to.collate ? ` COLLATE ${quote(to.collate)}` : ''\n }${item.using ? ` USING ${getRaw(item.using, values)}` : ''}`,\n );\n }\n\n if (from.default !== to.default) {\n const value =\n typeof to.default === 'object' && to.default && isRaw(to.default)\n ? getRaw(to.default, values)\n : quote(to.default);\n\n const expr =\n value === undefined ? 'DROP DEFAULT' : `SET DEFAULT ${value}`;\n\n alterTable.push(`ALTER COLUMN \"${key}\" ${expr}`);\n }\n\n if (from.nullable !== to.nullable) {\n alterTable.push(\n `ALTER COLUMN \"${key}\" ${to.nullable ? 'DROP' : 'SET'} NOT NULL`,\n );\n }\n\n if (from.compression !== to.compression) {\n alterTable.push(\n `ALTER COLUMN \"${key}\" SET COMPRESSION ${\n to.compression || 'DEFAULT'\n }`,\n );\n }\n\n const fromFkey = from.foreignKey;\n const toFkey = to.foreignKey;\n if (\n (fromFkey || toFkey) &&\n (!fromFkey ||\n !toFkey ||\n fromFkey.name !== toFkey.name ||\n fromFkey.match !== toFkey.match ||\n fromFkey.onUpdate !== toFkey.onUpdate ||\n fromFkey.onDelete !== toFkey.onDelete ||\n fromFkey.dropMode !== toFkey.dropMode ||\n fromFkey.table !== toFkey.table ||\n fromFkey.columns.join(',') !== toFkey.columns.join(','))\n ) {\n if (fromFkey) {\n dropForeignKeys.push({\n columns: [key],\n fnOrTable: fromFkey.table,\n foreignColumns: fromFkey.columns,\n options: fromFkey,\n });\n }\n\n if (toFkey) {\n addForeignKeys.push({\n columns: [key],\n fnOrTable: toFkey.table,\n foreignColumns: toFkey.columns,\n options: toFkey,\n });\n }\n }\n\n const fromIndex = from.index;\n const toIndex = to.index;\n if (\n (fromIndex || toIndex) &&\n (!fromIndex ||\n !toIndex ||\n fromIndex.expression !== toIndex.expression ||\n fromIndex.collate !== toIndex.collate ||\n fromIndex.operator !== toIndex.operator ||\n fromIndex.order !== toIndex.order ||\n fromIndex.name !== toIndex.name ||\n fromIndex.unique !== toIndex.unique ||\n fromIndex.using !== toIndex.using ||\n fromIndex.include !== toIndex.include ||\n (Array.isArray(fromIndex.include) &&\n Array.isArray(toIndex.include) &&\n fromIndex.include.join(',') !== toIndex.include.join(',')) ||\n fromIndex.with !== toIndex.with ||\n fromIndex.tablespace !== toIndex.tablespace ||\n fromIndex.where !== toIndex.where ||\n fromIndex.dropMode !== toIndex.dropMode)\n ) {\n if (fromIndex) {\n dropIndexes.push({\n columns: [\n {\n column: key,\n ...fromIndex,\n },\n ],\n options: fromIndex,\n });\n }\n\n if (toIndex) {\n addIndexes.push({\n columns: [\n {\n column: key,\n ...toIndex,\n },\n ],\n options: toIndex,\n });\n }\n }\n\n if (from.comment !== to.comment) {\n comments.push({ column: key, comment: to.comment || null });\n }\n } else if (item.type === 'rename') {\n alterTable.push(`RENAME COLUMN \"${key}\" TO \"${item.name}\"`);\n }\n }\n\n const prependAlterTable: string[] = [];\n\n if (\n ast.drop.primaryKey ||\n dropPrimaryKeys.change ||\n dropPrimaryKeys.columns.length > 1\n ) {\n const name = dropPrimaryKeys.options?.name || `${ast.name}_pkey`;\n prependAlterTable.push(`DROP CONSTRAINT \"${name}\"`);\n }\n\n prependAlterTable.push(\n ...dropForeignKeys.map(\n (foreignKey) => `\\n DROP ${constraintToSql(ast.name, false, foreignKey)}`,\n ),\n );\n\n alterTable.unshift(...prependAlterTable);\n\n if (\n ast.add.primaryKey ||\n addPrimaryKeys.change ||\n addPrimaryKeys.columns.length > 1\n ) {\n alterTable.push(`ADD ${primaryKeyToSql(addPrimaryKeys)}`);\n }\n\n alterTable.push(\n ...addForeignKeys.map(\n (foreignKey) => `\\n ADD ${constraintToSql(ast.name, true, foreignKey)}`,\n ),\n );\n\n if (alterTable.length) {\n result.push({\n text:\n `ALTER TABLE ${quoteTable(ast.name)}` +\n `\\n ${alterTable.join(',\\n ')}`,\n values,\n });\n }\n\n result.push(...indexesToQuery(false, ast.name, dropIndexes));\n result.push(...indexesToQuery(true, ast.name, addIndexes));\n result.push(...commentsToQuery(ast.name, comments));\n\n return result;\n};\n","import { ColumnType, Operators } from 'pqb';\nimport { ColumnsShapeCallback, JoinTableOptions, Migration } from './migration';\nimport { joinWords, quoteTable } from '../common';\nimport { getPrimaryKeysOfTable } from './migrationUtils';\nimport { singular } from 'pluralize';\nimport { createTable } from './createTable';\n\nclass UnknownColumn extends ColumnType {\n operators = Operators.any;\n\n constructor(public dataType: string) {\n super();\n }\n}\n\nexport const createJoinTable = async (\n migration: Migration,\n up: boolean,\n tables: string[],\n options: JoinTableOptions,\n fn?: ColumnsShapeCallback,\n) => {\n const tableName = options.tableName || joinWords(...tables);\n\n if (!up) {\n return createTable(\n migration,\n up,\n tableName,\n { ...options, noPrimaryKey: true },\n () => ({}),\n );\n }\n\n const tablesWithPrimaryKeys = await Promise.all(\n tables.map(async (table) => {\n const primaryKeys = await getPrimaryKeysOfTable(migration, table).then(\n (items) =>\n items.map((item) => ({\n ...item,\n joinedName: joinWords(singular(table), item.name),\n })),\n );\n\n if (!primaryKeys.length) {\n throw new Error(\n `Primary key for table ${quoteTable(table)} is not defined`,\n );\n }\n\n return [table, primaryKeys] as const;\n }),\n );\n\n return createTable(migration, up, tableName, options, (t) => {\n const result: Record<string, ColumnType> = {};\n\n tablesWithPrimaryKeys.forEach(([table, primaryKeys]) => {\n if (primaryKeys.length === 1) {\n const [{ type, joinedName, name }] = primaryKeys;\n\n const column = new UnknownColumn(type);\n\n result[joinedName] = column.foreignKey(table, name);\n\n return;\n }\n\n primaryKeys.forEach(({ joinedName, type }) => {\n result[joinedName] = new UnknownColumn(type);\n });\n\n t.foreignKey(\n primaryKeys.map((key) => key.joinedName) as [string, ...string[]],\n table,\n primaryKeys.map((key) => key.name) as [string, ...string[]],\n );\n });\n\n if (fn) {\n Object.assign(result, fn(t));\n }\n\n t.primaryKey(\n tablesWithPrimaryKeys.flatMap(([, primaryKeys]) =>\n primaryKeys.map((item) => item.joinedName),\n ),\n );\n\n return result;\n });\n};\n","import {\n ColumnsShape,\n ColumnType,\n ColumnTypes,\n ForeignKeyOptions,\n IndexColumnOptions,\n IndexOptions,\n logParamToLogObject,\n MaybeArray,\n QueryArraysResult,\n QueryInput,\n QueryLogObject,\n QueryResult,\n QueryResultRow,\n Sql,\n TransactionAdapter,\n TypeParsers,\n raw,\n TextColumn,\n} from 'pqb';\nimport { createTable } from './createTable';\nimport { changeTable, TableChangeData, TableChanger } from './changeTable';\nimport { RakeDbConfig, quoteTable } from '../common';\nimport { createJoinTable } from './createJoinTable';\nimport { RakeDbAst } from '../ast';\n\nexport type DropMode = 'CASCADE' | 'RESTRICT';\n\nexport type TableOptions = {\n dropMode?: DropMode;\n comment?: string;\n noPrimaryKey?: boolean;\n};\n\ntype TextColumnCreator = () => TextColumn;\n\nexport type MigrationColumnTypes = Omit<ColumnTypes, 'text' | 'string'> & {\n text: TextColumnCreator;\n string: TextColumnCreator;\n};\n\nexport type ColumnsShapeCallback = (\n t: MigrationColumnTypes & { raw: typeof raw },\n) => ColumnsShape;\n\nexport type ChangeTableOptions = { comment?: string | [string, string] | null };\nexport type ChangeTableCallback = (t: TableChanger) => TableChangeData;\n\nexport type ColumnComment = { column: string; comment: string | null };\n\nexport type JoinTableOptions = {\n tableName?: string;\n comment?: string;\n dropMode?: DropMode;\n};\n\nexport type ExtensionOptions = {\n schema?: string;\n version?: string;\n cascade?: boolean;\n};\n\nexport class Migration extends TransactionAdapter {\n public log?: QueryLogObject;\n\n constructor(\n tx: TransactionAdapter,\n public up: boolean,\n public options: RakeDbConfig,\n ) {\n super(tx, tx.client, tx.types);\n this.log = logParamToLogObject(options.logger || console, options.log);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async query<T extends QueryResultRow = any>(\n query: QueryInput,\n types: TypeParsers = this.types,\n log = this.log,\n ): Promise<QueryResult<T>> {\n return wrapWithLog(log, query, () => super.query(query, types));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async arrays<R extends any[] = any[]>(\n query: QueryInput,\n types: TypeParsers = this.types,\n log = this.log,\n ): Promise<QueryArraysResult<R>> {\n return wrapWithLog(log, query, () => super.arrays(query, types));\n }\n\n createTable(\n tableName: string,\n options: TableOptions,\n fn: ColumnsShapeCallback,\n ): Promise<void>;\n createTable(tableName: string, fn: ColumnsShapeCallback): Promise<void>;\n createTable(\n tableName: string,\n cbOrOptions: ColumnsShapeCallback | TableOptions,\n cb?: ColumnsShapeCallback,\n ): Promise<void> {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions;\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback;\n\n return createTable(this, this.up, tableName, options, fn);\n }\n\n dropTable(\n tableName: string,\n options: TableOptions,\n fn: ColumnsShapeCallback,\n ): Promise<void>;\n dropTable(tableName: string, fn: ColumnsShapeCallback): Promise<void>;\n dropTable(\n tableName: string,\n cbOrOptions: ColumnsShapeCallback | TableOptions,\n cb?: ColumnsShapeCallback,\n ) {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions;\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback;\n\n return createTable(this, !this.up, tableName, options, fn);\n }\n\n createJoinTable(\n tables: string[],\n options?: JoinTableOptions,\n fn?: ColumnsShapeCallback,\n ): Promise<void>;\n createJoinTable(tables: string[], fn?: ColumnsShapeCallback): Promise<void>;\n async createJoinTable(\n tables: string[],\n cbOrOptions?: ColumnsShapeCallback | JoinTableOptions,\n cb?: ColumnsShapeCallback,\n ): Promise<void> {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions || {};\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback | undefined;\n\n return createJoinTable(this, this.up, tables, options, fn);\n }\n\n dropJoinTable(\n tables: string[],\n options?: JoinTableOptions,\n fn?: ColumnsShapeCallback,\n ): Promise<void>;\n dropJoinTable(tables: string[], fn?: ColumnsShapeCallback): Promise<void>;\n async dropJoinTable(\n tables: string[],\n cbOrOptions?: ColumnsShapeCallback | JoinTableOptions,\n cb?: ColumnsShapeCallback,\n ): Promise<void> {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions || {};\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback | undefined;\n\n return createJoinTable(this, !this.up, tables, options, fn);\n }\n\n changeTable(\n tableName: string,\n options: ChangeTableOptions,\n fn?: ChangeTableCallback,\n ): Promise<void>;\n changeTable(tableName: string, fn: ChangeTableCallback): Promise<void>;\n changeTable(\n tableName: string,\n cbOrOptions: ChangeTableCallback | ChangeTableOptions,\n cb?: ChangeTableCallback,\n ) {\n const [fn, options] =\n typeof cbOrOptions === 'function' ? [cbOrOptions, {}] : [cb, cbOrOptions];\n\n return changeTable(this, this.up, tableName, options, fn);\n }\n\n async renameTable(from: string, to: string): Promise<void> {\n const ast: RakeDbAst.RenameTable = {\n type: 'renameTable',\n from: this.up ? from : to,\n to: this.up ? to : from,\n };\n\n await this.query(\n `ALTER TABLE ${quoteTable(ast.from)} RENAME TO \"${ast.to}\"`,\n );\n\n await this.options.appCodeUpdater?.(ast);\n }\n\n addColumn(\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes) => ColumnType,\n ) {\n return addColumn(this, this.up, tableName, columnName, fn);\n }\n\n dropColumn(\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes) => ColumnType,\n ) {\n return addColumn(this, !this.up, tableName, columnName, fn);\n }\n\n addIndex(\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n ) {\n return addIndex(this, this.up, tableName, columns, options);\n }\n\n dropIndex(\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n ) {\n return addIndex(this, !this.up, tableName, columns, options);\n }\n\n addForeignKey(\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n ) {\n return addForeignKey(\n this,\n this.up,\n tableName,\n columns,\n foreignTable,\n foreignColumns,\n options,\n );\n }\n\n dropForeignKey(\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n ) {\n return addForeignKey(\n this,\n !this.up,\n tableName,\n columns,\n foreignTable,\n foreignColumns,\n options,\n );\n }\n\n addPrimaryKey(\n tableName: string,\n columns: string[],\n options?: { name?: string },\n ) {\n return addPrimaryKey(this, this.up, tableName, columns, options);\n }\n\n dropPrimaryKey(\n tableName: string,\n columns: string[],\n options?: { name?: string },\n ) {\n return addPrimaryKey(this, !this.up, tableName, columns, options);\n }\n\n renameColumn(tableName: string, from: string, to: string) {\n return this.changeTable(tableName, (t) => ({\n [from]: t.rename(to),\n }));\n }\n\n createSchema(schemaName: string) {\n return createSchema(this, this.up, schemaName);\n }\n\n dropSchema(schemaName: string) {\n return createSchema(this, !this.up, schemaName);\n }\n\n createExtension(\n name: string,\n options: ExtensionOptions & { ifNotExists?: boolean } = {},\n ) {\n return createExtension(this, this.up, name, options);\n }\n\n dropExtension(\n name: string,\n options: { ifExists?: boolean; cascade?: boolean } = {},\n ) {\n return createExtension(this, !this.up, name, options);\n }\n\n async tableExists(tableName: string) {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"tables\" WHERE \"table_name\" = $1`,\n values: [tableName],\n });\n }\n\n async columnExists(tableName: string, columnName: string): Promise<boolean> {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"columns\" WHERE \"table_name\" = $1 AND \"column_name\" = $2`,\n values: [tableName, columnName],\n });\n }\n\n async constraintExists(constraintName: string): Promise<boolean> {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"table_constraints\" WHERE \"constraint_name\" = $1`,\n values: [constraintName],\n });\n }\n}\n\nconst wrapWithLog = async <Result>(\n log: QueryLogObject | undefined,\n query: QueryInput,\n fn: () => Promise<Result>,\n): Promise<Result> => {\n if (!log) {\n return fn();\n } else {\n const sql = (\n typeof query === 'string'\n ? { text: query, values: [] }\n : query.values\n ? query\n : { ...query, values: [] }\n ) as Sql;\n\n const logData = log.beforeQuery(sql);\n\n try {\n const result = await fn();\n log.afterQuery(sql, logData);\n return result;\n } catch (err) {\n log.onError(err as Error, sql, logData);\n throw err;\n }\n }\n};\n\nconst addColumn = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes) => ColumnType,\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n [columnName]: t.add(fn(t)),\n }));\n};\n\nconst addIndex = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.index(columns, options)),\n }));\n};\n\nconst addForeignKey = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.foreignKey(columns, foreignTable, foreignColumns, options)),\n }));\n};\n\nconst addPrimaryKey = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columns: string[],\n options?: { name?: string },\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.primaryKey(columns, options)),\n }));\n};\n\nconst createSchema = async (\n migration: Migration,\n up: boolean,\n name: string,\n) => {\n const ast: RakeDbAst.Schema = {\n type: 'schema',\n action: up ? 'create' : 'drop',\n name,\n };\n\n await migration.query(\n `${ast.action === 'create' ? 'CREATE' : 'DROP'} SCHEMA \"${name}\"`,\n );\n\n await migration.options.appCodeUpdater?.(ast);\n};\n\nconst createExtension = async (\n migration: Migration,\n up: boolean,\n name: string,\n options: ExtensionOptions & {\n checkExists?: boolean;\n },\n) => {\n const ast: RakeDbAst.Extension = {\n type: 'extension',\n action: up ? 'create' : 'drop',\n name,\n ...options,\n };\n\n let query;\n if (ast.action === 'drop') {\n query = `DROP EXTENSION${ast.ifNotExists ? ' IF EXISTS' : ''} \"${\n ast.name\n }\"${ast.cascade ? ' CASCADE' : ''}`;\n } else {\n query = `CREATE EXTENSION${ast.ifExists ? ' IF NOT EXISTS' : ''} \"${\n ast.name\n }\"${ast.schema ? ` SCHEMA \"${ast.schema}\"` : ''}${\n ast.version ? ` VERSION '${ast.version}'` : ''\n }${ast.cascade ? ' CASCADE' : ''}`;\n }\n\n await migration.query(query);\n\n await migration.options.appCodeUpdater?.(ast);\n};\n\nconst queryExists = (\n db: Migration,\n sql: { text: string; values: unknown[] },\n) => {\n return db.query(sql).then(({ rowCount }) => rowCount > 0);\n};\n","import { Adapter, AdapterOptions, MaybeArray, toArray } from 'pqb';\nimport {\n createSchemaMigrations,\n getMigrationFiles,\n RakeDbConfig,\n MigrationFile,\n quoteTable,\n} from '../common';\nimport {\n getCurrentPromise,\n setCurrentMigrationUp,\n setCurrentMigration,\n ChangeCallback,\n change,\n getCurrentChangeCallback,\n} from '../migration/change';\nimport { Migration } from '../migration/migration';\n\nconst migrateOrRollback = async (\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n args: string[],\n up: boolean,\n) => {\n const files = await getMigrationFiles(config, up);\n\n const argCount = args[0] === 'all' ? Infinity : parseInt(args[0]);\n let count = isNaN(argCount) ? (up ? Infinity : 1) : argCount;\n\n for (const opts of toArray(options)) {\n const db = new Adapter(opts);\n const migratedVersions = await getMigratedVersionsMap(db, config);\n try {\n for (const file of files) {\n if (\n (up && migratedVersions[file.version]) ||\n (!up && !migratedVersions[file.version])\n ) {\n continue;\n }\n\n if (count-- <= 0) break;\n\n await processMigration(db, up, file, config);\n config.logger?.log(`${file.path} ${up ? 'migrated' : 'rolled back'}`);\n }\n } finally {\n await db.close();\n }\n }\n};\n\nconst changeCache: Record<string, ChangeCallback | undefined> = {};\n\nconst processMigration = async (\n db: Adapter,\n up: boolean,\n file: MigrationFile,\n config: RakeDbConfig,\n) => {\n await db.transaction(async (tx) => {\n const db = new Migration(tx, up, config);\n setCurrentMigration(db);\n setCurrentMigrationUp(up);\n\n const callback = changeCache[file.path];\n if (callback) {\n change(callback);\n } else {\n config.requireTs(file.path);\n changeCache[file.path] = getCurrentChangeCallback();\n }\n\n await getCurrentPromise();\n await (up ? saveMigratedVersion : removeMigratedVersion)(\n db,\n file.version,\n config,\n );\n });\n};\n\nconst saveMigratedVersion = async (\n db: Adapter,\n version: string,\n config: RakeDbConfig,\n) => {\n await db.query(\n `INSERT INTO ${quoteTable(config.migrationsTable)} VALUES ('${version}')`,\n );\n};\n\nconst removeMigratedVersion = async (\n db: Adapter,\n version: string,\n config: RakeDbConfig,\n) => {\n await db.query(\n `DELETE FROM ${quoteTable(\n config.migrationsTable,\n )} WHERE version = '${version}'`,\n );\n};\n\nconst getMigratedVersionsMap = async (\n db: Adapter,\n config: RakeDbConfig,\n): Promise<Record<string, boolean>> => {\n try {\n const result = await db.arrays<[string]>(\n `SELECT * FROM ${quoteTable(config.migrationsTable)}`,\n );\n return Object.fromEntries(result.rows.map((row) => [row[0], true]));\n } catch (err) {\n if ((err as Record<string, unknown>).code === '42P01') {\n await createSchemaMigrations(db, config);\n return {};\n }\n throw err;\n }\n};\n\nexport const migrate = (\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n args: string[] = [],\n) => migrateOrRollback(options, config, args, true);\n\nexport const rollback = (\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n args: string[] = [],\n) => migrateOrRollback(options, config, args, false);\n","import { Adapter, AdapterOptions, MaybeArray, toArray } from 'pqb';\nimport {\n getDatabaseAndUserFromOptions,\n setAdminCredentialsToOptions,\n setAdapterOptions,\n createSchemaMigrations,\n RakeDbConfig,\n migrationConfigDefaults,\n} from '../common';\nimport { migrate } from './migrateOrRollback';\n\nconst execute = async (\n options: AdapterOptions,\n sql: string,\n): Promise<'ok' | 'already' | 'forbidden' | { error: unknown }> => {\n const db = new Adapter(options);\n try {\n await db.query(sql);\n return 'ok';\n } catch (error) {\n const err = error as Record<string, unknown>;\n if (err.code === '42P04' || err.code === '3D000') {\n return 'already';\n } else if (err.code === '42501') {\n return 'forbidden';\n } else {\n return { error };\n }\n } finally {\n await db.close();\n }\n};\n\nconst createOrDrop = async (\n options: AdapterOptions,\n adminOptions: AdapterOptions,\n config: RakeDbConfig,\n args: {\n sql(params: { database: string; user: string }): string;\n successMessage(params: { database: string }): string;\n alreadyMessage(params: { database: string }): string;\n createVersionsTable?: boolean;\n },\n) => {\n const params = getDatabaseAndUserFromOptions(options);\n\n const result = await execute(\n setAdapterOptions(adminOptions, { database: 'postgres' }),\n args.sql(params),\n );\n if (result === 'ok') {\n console.log(args.successMessage(params));\n } else if (result === 'already') {\n console.log(args.alreadyMessage(params));\n } else if (result === 'forbidden') {\n await createOrDrop(\n options,\n await setAdminCredentialsToOptions(options),\n config,\n args,\n );\n return;\n } else {\n throw result.error;\n }\n\n if (!args.createVersionsTable) return;\n\n const db = new Adapter(options);\n await createSchemaMigrations(db, config);\n await db.close();\n};\n\nexport const createDb = async (\n arg: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n) => {\n for (const options of toArray(arg)) {\n await createOrDrop(options, options, config, {\n sql({ database, user }) {\n return `CREATE DATABASE \"${database}\" OWNER \"${user}\"`;\n },\n successMessage({ database }) {\n return `Database ${database} successfully created`;\n },\n alreadyMessage({ database }) {\n return `Database ${database} already exists`;\n },\n createVersionsTable: true,\n });\n }\n};\n\nexport const dropDb = async (arg: MaybeArray<AdapterOptions>) => {\n for (const options of toArray(arg)) {\n await createOrDrop(options, options, migrationConfigDefaults, {\n sql({ database }) {\n return `DROP DATABASE \"${database}\"`;\n },\n successMessage({ database }) {\n return `Database ${database} was successfully dropped`;\n },\n alreadyMessage({ database }) {\n return `Database ${database} does not exist`;\n },\n });\n }\n};\n\nexport const resetDb = async (\n arg: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n) => {\n await dropDb(arg);\n await createDb(arg, config);\n await migrate(arg, config);\n};\n","import {\n getFirstWordAndRest,\n getTextAfterFrom,\n getTextAfterTo,\n RakeDbConfig,\n} from '../common';\nimport { mkdir, writeFile } from 'fs/promises';\nimport path from 'path';\n\nexport const generate = async (config: RakeDbConfig, args: string[]) => {\n const name = args[0];\n if (!name) throw new Error('Migration name is missing');\n\n await mkdir(config.migrationsPath, { recursive: true });\n\n const filePath = path.resolve(\n config.migrationsPath,\n `${makeFileTimeStamp()}_${name}.ts`,\n );\n await writeFile(filePath, makeContent(name, args.slice(1)));\n console.log(`Created ${filePath}`);\n};\n\nconst makeFileTimeStamp = () => {\n const now = new Date();\n return [\n now.getUTCFullYear(),\n now.getUTCMonth() + 1,\n now.getUTCDate(),\n now.getUTCHours(),\n now.getUTCMinutes(),\n now.getUTCSeconds(),\n ]\n .map((value) => (value < 10 ? `0${value}` : value))\n .join('');\n};\n\nconst makeContent = (name: string, args: string[]): string => {\n let content = `import { change } from 'rake-db';\\n\\nchange(async (db) => {`;\n\n const [first, rest] = getFirstWordAndRest(name);\n if (rest) {\n if (first === 'create' || first === 'drop') {\n content += `\\n await db.${\n first === 'create' ? 'createTable' : 'dropTable'\n }('${rest}', (t) => ({`;\n content += makeColumnsContent(args);\n content += '\\n }));';\n } else if (first === 'change') {\n content += `\\n await db.changeTable('${rest}', (t) => ({`;\n content += '\\n }));';\n } else if (first === 'add' || first === 'remove') {\n const table =\n first === 'add' ? getTextAfterTo(rest) : getTextAfterFrom(rest);\n content += `\\n await db.changeTable(${\n table ? `'${table}'` : 'tableName'\n }, (t) => ({`;\n content += makeColumnsContent(args, first);\n content += '\\n }));';\n }\n }\n\n return content + '\\n});\\n';\n};\n\nconst makeColumnsContent = (args: string[], method?: string) => {\n let content = '';\n const prepend = method ? `t.${method}(` : '';\n const append = method ? ')' : '';\n\n for (const arg of args) {\n const [name, def] = arg.split(':');\n if (!def) {\n throw new Error(\n `Column argument should be similar to name:type, name:type.method1.method2, name:type(arg).method(arg). Example: name:varchar(20).nullable. Received: ${arg}`,\n );\n }\n\n const methods = def\n .split('.')\n .map((method) => (method.endsWith(')') ? `.${method}` : `.${method}()`));\n content += `\\n ${name}: ${prepend}t${methods.join('')}${append},`;\n }\n return content;\n};\n","import { AdapterOptions, MaybeArray } from 'pqb';\nimport { createDb, dropDb, resetDb } from './commands/createOrDrop';\nimport { migrate, rollback } from './commands/migrateOrRollback';\nimport { getMigrationConfigWithDefaults, RakeDbConfig } from './common';\nimport { generate } from './commands/generate';\n\nexport const rakeDb = async (\n options: MaybeArray<AdapterOptions>,\n partialConfig: Partial<RakeDbConfig> = {},\n args: string[] = process.argv.slice(2),\n) => {\n const config = getMigrationConfigWithDefaults(partialConfig);\n\n const command = args[0]?.split(':')[0];\n\n if (command === 'create') {\n await createDb(options, config);\n } else if (command === 'drop') {\n await dropDb(options);\n } else if (command === 'reset') {\n await resetDb(options, config);\n } else if (command === 'migrate') {\n await migrate(options, config, args.slice(1));\n } else if (command === 'rollback') {\n await rollback(options, config, args.slice(1));\n } else if (command === 'g' || command === 'generate') {\n await generate(config, args.slice(1));\n } else {\n printHelp();\n }\n};\n\nconst printHelp = () =>\n console.log(\n `Usage: rake-db [command] [arguments]\n\nCommands:\n create create databases\n drop drop databases\n reset drop, create and migrate databases\n g, generate generate migration file, see below\n migrate migrate all pending migrations\n rollback rollback the last migrated\n no or unknown command prints this message\n \nGenerate arguments:\n- (required) first argument is migration name\n * create* template for create table\n * change* template for change table\n * add*To* template for add columns\n * remove*From* template for remove columns\n * drop* template for drop table\n\n- other arguments considered as columns with types and optional methods:\n rake-db g createTable id:serial.primaryKey name:text.nullable\n`,\n );\n"],"names":["path","__spreadValues","__spreadProps","Enquirer","readdir","quote","isRaw","getRaw","toArray","columnTypes","raw","getColumnTypes","getTableData","makeAst","astToQueries","ColumnType","emptyObject","resetTableData","changeTableData","Operators","singular","TransactionAdapter","logParamToLogObject","Adapter","db","mkdir","writeFile","method"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sources":["../src/common.ts","../src/migration/change.ts","../src/migration/migrationUtils.ts","../src/migration/createTable.ts","../src/migration/changeTable.ts","../src/migration/createJoinTable.ts","../src/migration/migration.ts","../src/commands/migrateOrRollback.ts","../src/commands/createOrDrop.ts","../src/commands/generate.ts","../src/rakeDb.ts"],"sourcesContent":["import {\n Adapter,\n AdapterOptions,\n NoPrimaryKeyOption,\n QueryLogOptions,\n} from 'pqb';\nimport Enquirer from 'enquirer';\nimport path from 'path';\nimport { readdir } from 'fs/promises';\nimport { RakeDbAst } from './ast';\n\nexport type RakeDbConfig = {\n migrationsPath: string;\n migrationsTable: string;\n requireTs(path: string): void;\n noPrimaryKey?: NoPrimaryKeyOption;\n appCodeUpdater?: AppCodeUpdater;\n} & QueryLogOptions;\n\nexport type AppCodeUpdater = (ast: RakeDbAst) => Promise<void>;\n\nexport const migrationConfigDefaults = {\n migrationsPath: path.resolve(process.cwd(), 'src', 'migrations'),\n migrationsTable: 'schemaMigrations',\n requireTs: require,\n log: true,\n logger: console,\n};\n\nexport const getMigrationConfigWithDefaults = (\n config: Partial<RakeDbConfig>,\n) => {\n return { ...migrationConfigDefaults, ...config };\n};\n\nexport const getDatabaseAndUserFromOptions = (\n options: AdapterOptions,\n): { database: string; user: string } => {\n if (options.databaseURL) {\n const url = new URL(options.databaseURL);\n return {\n database: url.pathname.slice(1),\n user: url.username,\n };\n } else {\n return {\n database: options.database as string,\n user: options.user as string,\n };\n }\n};\n\nexport const setAdapterOptions = (\n options: AdapterOptions,\n set: { database?: string; user?: string; password?: string },\n): AdapterOptions => {\n if (options.databaseURL) {\n const url = new URL(options.databaseURL);\n\n if ('database' in set) {\n url.pathname = `/${set.database}`;\n }\n\n if (set.user !== undefined) {\n url.username = set.user;\n }\n\n if (set.password !== undefined) {\n url.password = set.password;\n }\n\n return { ...options, databaseURL: url.toString() };\n } else {\n return {\n ...options,\n ...set,\n };\n }\n};\n\nconst askAdminCredentials = async (): Promise<{\n user: string;\n password: string;\n}> => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const prompt = new (Enquirer as any).Snippet({\n message: `What are postgres admin login and password?`,\n fields: [\n {\n name: 'user',\n required: true,\n },\n {\n name: 'password',\n },\n ],\n values: {\n user: 'postgres',\n password: '',\n },\n template: 'Admin user: {{user}}\\nAdmin password: {{password}}',\n });\n\n const { values } = await prompt.run();\n if (!values.password) values.password = '';\n\n return values;\n};\n\nexport const setAdminCredentialsToOptions = async (\n options: AdapterOptions,\n): Promise<AdapterOptions> => {\n const values = await askAdminCredentials();\n return setAdapterOptions(options, values);\n};\n\nexport const createSchemaMigrations = async (\n db: Adapter,\n config: RakeDbConfig,\n) => {\n try {\n await db.query(\n `CREATE TABLE ${quoteTable(\n config.migrationsTable,\n )} ( version TEXT NOT NULL )`,\n );\n console.log('Created versions table');\n } catch (err) {\n if ((err as Record<string, unknown>).code === '42P07') {\n console.log('Versions table exists');\n } else {\n throw err;\n }\n }\n};\n\nexport const getFirstWordAndRest = (\n input: string,\n): [string] | [string, string] => {\n const index = input.search(/(?=[A-Z])|[-_]/);\n if (index !== -1) {\n const restStart =\n input[index] === '-' || input[index] === '_' ? index + 1 : index;\n const rest = input.slice(restStart);\n return [input.slice(0, index), rest[0].toLowerCase() + rest.slice(1)];\n } else {\n return [input];\n }\n};\n\nconst getTextAfterRegExp = (\n input: string,\n regex: RegExp,\n length: number,\n): string | undefined => {\n let index = input.search(regex);\n if (index === -1) return;\n\n if (input[index] === '-' || input[index] === '_') index++;\n index += length;\n\n const start = input[index] == '-' || input[index] === '_' ? index + 1 : index;\n const text = input.slice(start);\n return text[0].toLowerCase() + text.slice(1);\n};\n\nexport const getTextAfterTo = (input: string): string | undefined => {\n return getTextAfterRegExp(input, /(To|-to|_to)[A-Z-_]/, 2);\n};\n\nexport const getTextAfterFrom = (input: string): string | undefined => {\n return getTextAfterRegExp(input, /(From|-from|_from)[A-Z-_]/, 4);\n};\n\nexport type MigrationFile = {\n path: string;\n version: string;\n};\n\nexport const getMigrationFiles = async (\n config: RakeDbConfig,\n up: boolean,\n): Promise<MigrationFile[]> => {\n const { migrationsPath } = config;\n\n let files: string[];\n try {\n files = await readdir(migrationsPath);\n } catch (_) {\n return [];\n }\n\n const sort = up ? sortAsc : sortDesc;\n return sort(files).map((file) => {\n if (!file.endsWith('.ts')) {\n throw new Error(\n `Only .ts files are supported for migration, received: ${file}`,\n );\n }\n\n const timestampMatch = file.match(/^(\\d{14})\\D/);\n if (!timestampMatch) {\n throw new Error(\n `Migration file name should start with 14 digit version, received ${file}`,\n );\n }\n\n return {\n path: path.join(migrationsPath, file),\n version: timestampMatch[1],\n };\n });\n};\n\nexport const sortAsc = (arr: string[]) => arr.sort();\n\nexport const sortDesc = (arr: string[]) => arr.sort((a, b) => (a > b ? -1 : 1));\n\nexport const joinWords = (...words: string[]) => {\n return words\n .slice(1)\n .reduce(\n (acc, word) => acc + word[0].toUpperCase() + word.slice(1),\n words[0],\n );\n};\n\nexport const joinColumns = (columns: string[]) => {\n return columns.map((column) => `\"${column}\"`).join(', ');\n};\n\nexport const quoteTable = (table: string) => {\n const index = table.indexOf('.');\n if (index !== -1) {\n return `\"${table.slice(0, index)}\".\"${table.slice(index + 1)}\"`;\n } else {\n return `\"${table}\"`;\n }\n};\n","import { Migration } from './migration';\n\nlet currentMigration: Migration | undefined;\nlet currentPromise: Promise<void> | undefined;\nlet currentUp = true;\nlet currentChangeCallback: ChangeCallback | undefined;\n\nexport type ChangeCallback = (db: Migration, up: boolean) => Promise<void>;\n\nexport const change = (fn: ChangeCallback) => {\n if (!currentMigration) throw new Error('Database instance is not set');\n currentPromise = fn(currentMigration, currentUp);\n currentChangeCallback = fn;\n};\n\nexport const setCurrentMigration = (db: Migration) => {\n currentMigration = db;\n};\n\nexport const setCurrentMigrationUp = (up: boolean) => {\n currentUp = up;\n};\n\nexport const getCurrentPromise = () => currentPromise;\n\nexport const getCurrentChangeCallback = () => currentChangeCallback;\n","import {\n ColumnType,\n ForeignKeyTable,\n ForeignKeyOptions,\n getRaw,\n isRaw,\n quote,\n Sql,\n TableData,\n toArray,\n} from 'pqb';\nimport { ColumnComment, Migration } from './migration';\nimport { joinColumns, joinWords, quoteTable } from '../common';\n\nexport const columnToSql = (\n key: string,\n item: ColumnType,\n values: unknown[],\n hasMultiplePrimaryKeys: boolean,\n): string => {\n const line = [`\"${key}\" ${item.toSQL()}`];\n\n if (item.data.compression) {\n line.push(`COMPRESSION ${item.data.compression}`);\n }\n\n if (item.data.collate) {\n line.push(`COLLATE ${quote(item.data.collate)}`);\n }\n\n if (item.isPrimaryKey && !hasMultiplePrimaryKeys) {\n line.push('PRIMARY KEY');\n } else if (!item.isNullable) {\n line.push('NOT NULL');\n }\n\n if (item.data.default !== undefined) {\n if (\n typeof item.data.default === 'object' &&\n item.data.default &&\n isRaw(item.data.default)\n ) {\n line.push(`DEFAULT ${getRaw(item.data.default, values)}`);\n } else {\n line.push(`DEFAULT ${quote(item.data.default)}`);\n }\n }\n\n const { foreignKey } = item.data;\n if (foreignKey) {\n const table = getForeignKeyTable(\n 'fn' in foreignKey ? foreignKey.fn : foreignKey.table,\n );\n\n if (foreignKey.name) {\n line.push(`CONSTRAINT \"${foreignKey.name}\"`);\n }\n\n line.push(referencesToSql(table, foreignKey.columns, foreignKey));\n }\n\n return line.join(' ');\n};\n\nexport const addColumnIndex = (\n indexes: TableData.Index[],\n key: string,\n item: ColumnType,\n) => {\n if (item.data) {\n if (item.data.index) {\n indexes.push({\n columns: [{ ...item.data.index, column: key }],\n options: item.data.index,\n });\n }\n }\n};\n\nexport const addColumnComment = (\n comments: ColumnComment[],\n key: string,\n item: ColumnType,\n) => {\n if (item.data.comment) {\n comments.push({ column: key, comment: item.data.comment });\n }\n};\n\nexport const getForeignKeyTable = (\n fnOrTable: (() => ForeignKeyTable) | string,\n) => {\n if (typeof fnOrTable === 'string') {\n return fnOrTable;\n }\n\n const klass = fnOrTable();\n return new klass().table;\n};\n\nexport const constraintToSql = (\n tableName: string,\n up: boolean,\n foreignKey: TableData['foreignKeys'][number],\n) => {\n const constraintName =\n foreignKey.options.name ||\n `${tableName}_${foreignKey.columns.join('_')}_fkey`;\n\n if (!up) {\n const { dropMode } = foreignKey.options;\n return `CONSTRAINT \"${constraintName}\"${dropMode ? ` ${dropMode}` : ''}`;\n }\n\n const table = getForeignKeyTable(foreignKey.fnOrTable);\n return `CONSTRAINT \"${constraintName}\" FOREIGN KEY (${joinColumns(\n foreignKey.columns,\n )}) ${referencesToSql(table, foreignKey.foreignColumns, foreignKey.options)}`;\n};\n\nexport const referencesToSql = (\n table: string,\n columns: string[],\n foreignKey: Pick<ForeignKeyOptions, 'match' | 'onDelete' | 'onUpdate'>,\n) => {\n const sql: string[] = [\n `REFERENCES ${quoteTable(table)}(${joinColumns(columns)})`,\n ];\n\n if (foreignKey.match) {\n sql.push(`MATCH ${foreignKey.match.toUpperCase()}`);\n }\n\n if (foreignKey.onDelete) {\n sql.push(`ON DELETE ${foreignKey.onDelete.toUpperCase()}`);\n }\n\n if (foreignKey.onUpdate) {\n sql.push(`ON UPDATE ${foreignKey.onUpdate.toUpperCase()}`);\n }\n\n return sql.join(' ');\n};\n\nexport const indexesToQuery = (\n up: boolean,\n tableName: string,\n indexes: TableData.Index[],\n): Sql[] => {\n return indexes.map(({ columns, options }) => {\n const indexName =\n options.name ||\n joinWords(tableName, ...columns.map(({ column }) => column), 'index');\n\n if (!up) {\n return {\n text: `DROP INDEX \"${indexName}\"${\n options.dropMode ? ` ${options.dropMode}` : ''\n }`,\n values: [],\n };\n }\n\n const values: unknown[] = [];\n\n const sql: string[] = ['CREATE'];\n\n if (options.unique) {\n sql.push('UNIQUE');\n }\n\n sql.push(`INDEX \"${indexName}\" ON ${quoteTable(tableName)}`);\n\n if (options.using) {\n sql.push(`USING ${options.using}`);\n }\n\n const columnsSql: string[] = [];\n\n columns.forEach((column) => {\n const columnSql: string[] = [\n `\"${column.column}\"${\n column.expression ? `(${column.expression})` : ''\n }`,\n ];\n\n if (column.collate) {\n columnSql.push(`COLLATE '${column.collate}'`);\n }\n\n if (column.operator) {\n columnSql.push(column.operator);\n }\n\n if (column.order) {\n columnSql.push(column.order);\n }\n\n columnsSql.push(columnSql.join(' '));\n });\n\n sql.push(`(${columnsSql.join(', ')})`);\n\n if (options.include) {\n sql.push(\n `INCLUDE (${toArray(options.include)\n .map((column) => `\"${column}\"`)\n .join(', ')})`,\n );\n }\n\n if (options.with) {\n sql.push(`WITH (${options.with})`);\n }\n\n if (options.tablespace) {\n sql.push(`TABLESPACE ${options.tablespace}`);\n }\n\n if (options.where) {\n sql.push(\n `WHERE ${\n typeof options.where === 'object' &&\n options.where &&\n isRaw(options.where)\n ? getRaw(options.where, values)\n : options.where\n }`,\n );\n }\n\n return { text: sql.join(' '), values };\n });\n};\n\nexport const commentsToQuery = (\n tableName: string,\n comments: ColumnComment[],\n): Sql[] => {\n return comments.map(({ column, comment }) => ({\n text: `COMMENT ON COLUMN ${quoteTable(tableName)}.\"${column}\" IS ${quote(\n comment,\n )}`,\n values: [],\n }));\n};\n\nexport const primaryKeyToSql = (\n primaryKey: Exclude<TableData['primaryKey'], undefined>,\n) => {\n const name = primaryKey.options?.name;\n return `${name ? `CONSTRAINT \"${name}\" ` : ''}PRIMARY KEY (${joinColumns(\n primaryKey.columns,\n )})`;\n};\n\nexport const getPrimaryKeysOfTable = async (\n db: Migration,\n tableName: string,\n): Promise<{ name: string; type: string }[]> => {\n const { rows } = await db.query<{ name: string; type: string }>(\n {\n text: `SELECT\n pg_attribute.attname AS name,\n format_type(pg_attribute.atttypid, pg_attribute.atttypmod) AS type\nFROM pg_index, pg_class, pg_attribute, pg_namespace\nWHERE\n pg_class.oid = $1::regclass AND\n indrelid = pg_class.oid AND\n nspname = 'public' AND\n pg_class.relnamespace = pg_namespace.oid AND\n pg_attribute.attrelid = pg_class.oid AND\n pg_attribute.attnum = any(pg_index.indkey) AND\n indisprimary`,\n values: [tableName],\n },\n db.types,\n undefined,\n );\n\n return rows;\n};\n","import {\n ColumnsShape,\n columnTypes,\n getColumnTypes,\n getTableData,\n NoPrimaryKeyOption,\n quote,\n raw,\n Sql,\n TableData,\n} from 'pqb';\nimport {\n ColumnComment,\n ColumnsShapeCallback,\n Migration,\n TableOptions,\n} from './migration';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n commentsToQuery,\n constraintToSql,\n indexesToQuery,\n primaryKeyToSql,\n} from './migrationUtils';\nimport { quoteTable } from '../common';\nimport { RakeDbAst } from '../ast';\n\nconst types = Object.assign(Object.create(columnTypes), {\n raw,\n});\n\nexport const createTable = async (\n migration: Migration,\n up: boolean,\n tableName: string,\n options: TableOptions,\n fn: ColumnsShapeCallback,\n) => {\n const shape = getColumnTypes(types, fn);\n const tableData = getTableData();\n const ast = makeAst(\n up,\n tableName,\n shape,\n tableData,\n options,\n migration.options.noPrimaryKey,\n );\n\n validatePrimaryKey(ast);\n\n const queries = astToQueries(ast);\n for (const query of queries) {\n await migration.query(query);\n }\n\n await migration.options.appCodeUpdater?.(ast);\n};\n\nconst makeAst = (\n up: boolean,\n tableName: string,\n shape: ColumnsShape,\n tableData: TableData,\n options: TableOptions,\n noPrimaryKey?: NoPrimaryKeyOption,\n): RakeDbAst.Table => {\n const shapePKeys: string[] = [];\n for (const key in shape) {\n if (shape[key].isPrimaryKey) {\n shapePKeys.push(key);\n }\n }\n\n const primaryKey = tableData.primaryKey;\n\n return {\n type: 'table',\n action: up ? 'create' : 'drop',\n name: tableName,\n shape,\n ...tableData,\n primaryKey:\n shapePKeys.length <= 1\n ? primaryKey\n : primaryKey\n ? { ...primaryKey, columns: [...shapePKeys, ...primaryKey.columns] }\n : { columns: shapePKeys },\n ...options,\n noPrimaryKey: options.noPrimaryKey ? 'ignore' : noPrimaryKey || 'error',\n };\n};\n\nconst validatePrimaryKey = (ast: RakeDbAst.Table) => {\n if (ast.noPrimaryKey !== 'ignore') {\n let hasPrimaryKey = !!ast.primaryKey?.columns?.length;\n if (!hasPrimaryKey) {\n for (const key in ast.shape) {\n if (ast.shape[key].isPrimaryKey) {\n hasPrimaryKey = true;\n break;\n }\n }\n }\n\n if (!hasPrimaryKey) {\n const message = `Table ${ast.name} has no primary key`;\n if (ast.noPrimaryKey === 'error') {\n throw new Error(message);\n } else {\n console.warn(message);\n }\n }\n }\n};\n\nconst astToQueries = (ast: RakeDbAst.Table): Sql[] => {\n if (ast.action === 'drop') {\n return [\n {\n text: `DROP TABLE ${quoteTable(ast.name)}${\n ast.dropMode ? ` ${ast.dropMode}` : ''\n }`,\n values: [],\n },\n ];\n }\n\n const lines: string[] = [];\n const values: unknown[] = [];\n const indexes: TableData.Index[] = [];\n const comments: ColumnComment[] = [];\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n addColumnIndex(indexes, key, item);\n addColumnComment(comments, key, item);\n lines.push(`\\n ${columnToSql(key, item, values, !!ast.primaryKey)}`);\n }\n\n if (ast.primaryKey) {\n lines.push(`\\n ${primaryKeyToSql(ast.primaryKey)}`);\n }\n\n ast.foreignKeys.forEach((foreignKey) => {\n lines.push(`\\n ${constraintToSql(ast.name, true, foreignKey)}`);\n });\n\n indexes.push(...ast.indexes);\n\n const result: Sql[] = [\n {\n text: `CREATE TABLE ${quoteTable(ast.name)} (${lines.join(',')}\\n)`,\n values,\n },\n ...indexesToQuery(true, ast.name, indexes),\n ...commentsToQuery(ast.name, comments),\n ];\n\n if (ast.comment) {\n result.push({\n text: `COMMENT ON TABLE ${quoteTable(ast.name)} IS ${quote(ast.comment)}`,\n values: [],\n });\n }\n\n return result;\n};\n","import {\n ColumnType,\n resetTableData,\n getTableData,\n EmptyObject,\n emptyObject,\n TableData,\n RawExpression,\n raw,\n columnTypes,\n Sql,\n quote,\n getRaw,\n isRaw,\n} from 'pqb';\nimport {\n ChangeTableCallback,\n ChangeTableOptions,\n ColumnComment,\n DropMode,\n Migration,\n MigrationColumnTypes,\n} from './migration';\nimport { RakeDbAst } from '../ast';\nimport { quoteTable } from '../common';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n commentsToQuery,\n constraintToSql,\n indexesToQuery,\n primaryKeyToSql,\n} from './migrationUtils';\n\ntype ChangeTableData = { add: TableData; drop: TableData };\nconst newChangeTableData = (): ChangeTableData => ({\n add: { indexes: [], foreignKeys: [] },\n drop: { indexes: [], foreignKeys: [] },\n});\n\nlet changeTableData = newChangeTableData();\n\nconst resetChangeTableData = () => {\n changeTableData = newChangeTableData();\n};\n\nconst mergeTableData = (a: TableData, b: TableData) => {\n if (b.primaryKey) {\n if (!a.primaryKey) {\n a.primaryKey = b.primaryKey;\n } else {\n a.primaryKey = {\n columns: [...a.primaryKey.columns, ...b.primaryKey.columns],\n options: { ...a.primaryKey.options, ...b.primaryKey.options },\n };\n }\n }\n a.indexes = [...a.indexes, ...b.indexes];\n a.foreignKeys = [...a.foreignKeys, ...b.foreignKeys];\n};\n\nfunction add(\n item: ColumnType,\n options?: { dropMode?: DropMode },\n): RakeDbAst.ChangeTableItem.Column;\nfunction add(emptyObject: EmptyObject): EmptyObject;\nfunction add(\n items: Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n): Record<string, RakeDbAst.ChangeTableItem.Column>;\nfunction add(\n item: ColumnType | EmptyObject | Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n):\n | RakeDbAst.ChangeTableItem.Column\n | EmptyObject\n | Record<string, RakeDbAst.ChangeTableItem.Column> {\n if (item instanceof ColumnType) {\n return { type: 'add', item, dropMode: options?.dropMode };\n } else if (item === emptyObject) {\n mergeTableData(changeTableData.add, getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, RakeDbAst.ChangeTableItem.Column> = {};\n for (const key in item) {\n result[key] = {\n type: 'add',\n item: (item as Record<string, ColumnType>)[key],\n dropMode: options?.dropMode,\n };\n }\n return result;\n }\n}\n\nconst drop = ((item, options) => {\n if (item instanceof ColumnType) {\n return { type: 'drop', item, dropMode: options?.dropMode };\n } else if (item === emptyObject) {\n mergeTableData(changeTableData.drop, getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, RakeDbAst.ChangeTableItem.Column> = {};\n for (const key in item) {\n result[key] = {\n type: 'drop',\n item: (item as Record<string, ColumnType>)[key],\n dropMode: options?.dropMode,\n };\n }\n return result;\n }\n}) as typeof add;\n\ntype Change = RakeDbAst.ChangeTableItem.Change & ChangeOptions;\n\ntype ChangeOptions = {\n usingUp?: RawExpression;\n usingDown?: RawExpression;\n};\n\nconst columnTypeToColumnChange = (\n item: ColumnType | Change,\n): RakeDbAst.ColumnChange => {\n if (item instanceof ColumnType) {\n const foreignKey = item.data.foreignKey;\n if (foreignKey && 'fn' in foreignKey) {\n throw new Error('Callback in foreignKey is not allowed in migration');\n }\n\n return {\n column: item,\n type: item.toSQL(),\n nullable: item.isNullable,\n primaryKey: item.isPrimaryKey,\n ...item.data,\n foreignKey,\n };\n }\n\n return item.to;\n};\n\ntype TableChangeMethods = typeof tableChangeMethods;\nconst tableChangeMethods = {\n raw: raw,\n add,\n drop,\n change(\n from: ColumnType | Change,\n to: ColumnType | Change,\n options?: ChangeOptions,\n ): Change {\n return {\n type: 'change',\n from: columnTypeToColumnChange(from),\n to: columnTypeToColumnChange(to),\n ...options,\n };\n },\n default(value: unknown | RawExpression): Change {\n return { type: 'change', from: { default: null }, to: { default: value } };\n },\n nullable(): Change {\n return {\n type: 'change',\n from: { nullable: false },\n to: { nullable: true },\n };\n },\n nonNullable(): Change {\n return {\n type: 'change',\n from: { nullable: true },\n to: { nullable: false },\n };\n },\n comment(comment: string | null): Change {\n return { type: 'change', from: { comment: null }, to: { comment } };\n },\n rename(name: string): RakeDbAst.ChangeTableItem.Rename {\n return { type: 'rename', name };\n },\n};\n\nexport type TableChanger = MigrationColumnTypes & TableChangeMethods;\n\nexport type TableChangeData = Record<\n string,\n | RakeDbAst.ChangeTableItem.Column\n | RakeDbAst.ChangeTableItem.Rename\n | Change\n | EmptyObject\n>;\n\nexport const changeTable = async (\n migration: Migration,\n up: boolean,\n tableName: string,\n options: ChangeTableOptions,\n fn?: ChangeTableCallback,\n) => {\n resetTableData();\n resetChangeTableData();\n\n const tableChanger = Object.create(columnTypes) as TableChanger;\n Object.assign(tableChanger, tableChangeMethods);\n\n const changeData = fn?.(tableChanger) || {};\n\n const ast = makeAst(up, tableName, changeData, changeTableData, options);\n\n const queries = astToQueries(ast);\n for (const query of queries) {\n await migration.query(query);\n }\n\n await migration.options.appCodeUpdater?.(ast);\n};\n\nconst makeAst = (\n up: boolean,\n name: string,\n changeData: TableChangeData,\n changeTableData: ChangeTableData,\n options: ChangeTableOptions,\n): RakeDbAst.ChangeTable => {\n const { comment } = options;\n\n const shape: Record<string, RakeDbAst.ChangeTableItem> = {};\n for (const key in changeData) {\n const item = changeData[key];\n if ('type' in item) {\n if (up) {\n shape[key] =\n item.type === 'change' && item.usingUp\n ? { ...item, using: item.usingUp }\n : item;\n } else {\n if (item.type === 'rename') {\n shape[item.name] = { ...item, name: key };\n } else {\n shape[key] =\n item.type === 'add'\n ? { ...item, type: 'drop' }\n : item.type === 'drop'\n ? { ...item, type: 'add' }\n : item.type === 'change'\n ? { ...item, from: item.to, to: item.from, using: item.usingDown }\n : item;\n }\n }\n }\n }\n\n return {\n type: 'changeTable',\n name,\n comment: comment\n ? up\n ? Array.isArray(comment)\n ? comment[1]\n : comment\n : Array.isArray(comment)\n ? comment[0]\n : null\n : undefined,\n shape,\n ...(up\n ? changeTableData\n : { add: changeTableData.drop, drop: changeTableData.add }),\n };\n};\n\ntype PrimaryKeys = {\n columns: string[];\n change?: true;\n options?: { name?: string };\n};\n\nconst astToQueries = (ast: RakeDbAst.ChangeTable): Sql[] => {\n const result: Sql[] = [];\n\n if (ast.comment !== undefined) {\n result.push({\n text: `COMMENT ON TABLE ${quoteTable(ast.name)} IS ${quote(ast.comment)}`,\n values: [],\n });\n }\n\n const addPrimaryKeys: PrimaryKeys = ast.add.primaryKey\n ? { ...ast.add.primaryKey }\n : {\n columns: [],\n };\n const dropPrimaryKeys: PrimaryKeys = ast.drop.primaryKey\n ? { ...ast.drop.primaryKey }\n : {\n columns: [],\n };\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n\n if (item.type === 'add') {\n if (item.item.isPrimaryKey) {\n addPrimaryKeys.columns.push(key);\n }\n } else if (item.type === 'drop') {\n if (item.item.isPrimaryKey) {\n dropPrimaryKeys.columns.push(key);\n }\n } else if (item.type === 'change') {\n if (item.from.primaryKey) {\n dropPrimaryKeys.columns.push(key);\n dropPrimaryKeys.change = true;\n }\n\n if (item.to.primaryKey) {\n addPrimaryKeys.columns.push(key);\n addPrimaryKeys.change = true;\n }\n }\n }\n\n const alterTable: string[] = [];\n const values: unknown[] = [];\n const addIndexes: TableData.Index[] = [...ast.add.indexes];\n const dropIndexes: TableData.Index[] = [...ast.drop.indexes];\n const addForeignKeys: TableData.ForeignKey[] = [...ast.add.foreignKeys];\n const dropForeignKeys: TableData.ForeignKey[] = [...ast.drop.foreignKeys];\n const comments: ColumnComment[] = [];\n\n for (const key in ast.shape) {\n const item = ast.shape[key];\n\n if (item.type === 'add') {\n addColumnIndex(addIndexes, key, item.item);\n addColumnComment(comments, key, item.item);\n\n alterTable.push(\n `ADD COLUMN ${columnToSql(\n key,\n item.item,\n values,\n addPrimaryKeys.columns.length > 1,\n )}`,\n );\n } else if (item.type === 'drop') {\n addColumnIndex(dropIndexes, key, item.item);\n\n alterTable.push(\n `DROP COLUMN \"${key}\"${item.dropMode ? ` ${item.dropMode}` : ''}`,\n );\n } else if (item.type === 'change') {\n const { from, to } = item;\n if (from.type !== to.type || from.collate !== to.collate) {\n alterTable.push(\n `ALTER COLUMN \"${key}\" TYPE ${to.type}${\n to.collate ? ` COLLATE ${quote(to.collate)}` : ''\n }${item.using ? ` USING ${getRaw(item.using, values)}` : ''}`,\n );\n }\n\n if (from.default !== to.default) {\n const value =\n typeof to.default === 'object' && to.default && isRaw(to.default)\n ? getRaw(to.default, values)\n : quote(to.default);\n\n const expr =\n value === undefined ? 'DROP DEFAULT' : `SET DEFAULT ${value}`;\n\n alterTable.push(`ALTER COLUMN \"${key}\" ${expr}`);\n }\n\n if (from.nullable !== to.nullable) {\n alterTable.push(\n `ALTER COLUMN \"${key}\" ${to.nullable ? 'DROP' : 'SET'} NOT NULL`,\n );\n }\n\n if (from.compression !== to.compression) {\n alterTable.push(\n `ALTER COLUMN \"${key}\" SET COMPRESSION ${\n to.compression || 'DEFAULT'\n }`,\n );\n }\n\n const fromFkey = from.foreignKey;\n const toFkey = to.foreignKey;\n if (\n (fromFkey || toFkey) &&\n (!fromFkey ||\n !toFkey ||\n fromFkey.name !== toFkey.name ||\n fromFkey.match !== toFkey.match ||\n fromFkey.onUpdate !== toFkey.onUpdate ||\n fromFkey.onDelete !== toFkey.onDelete ||\n fromFkey.dropMode !== toFkey.dropMode ||\n fromFkey.table !== toFkey.table ||\n fromFkey.columns.join(',') !== toFkey.columns.join(','))\n ) {\n if (fromFkey) {\n dropForeignKeys.push({\n columns: [key],\n fnOrTable: fromFkey.table,\n foreignColumns: fromFkey.columns,\n options: fromFkey,\n });\n }\n\n if (toFkey) {\n addForeignKeys.push({\n columns: [key],\n fnOrTable: toFkey.table,\n foreignColumns: toFkey.columns,\n options: toFkey,\n });\n }\n }\n\n const fromIndex = from.index;\n const toIndex = to.index;\n if (\n (fromIndex || toIndex) &&\n (!fromIndex ||\n !toIndex ||\n fromIndex.expression !== toIndex.expression ||\n fromIndex.collate !== toIndex.collate ||\n fromIndex.operator !== toIndex.operator ||\n fromIndex.order !== toIndex.order ||\n fromIndex.name !== toIndex.name ||\n fromIndex.unique !== toIndex.unique ||\n fromIndex.using !== toIndex.using ||\n fromIndex.include !== toIndex.include ||\n (Array.isArray(fromIndex.include) &&\n Array.isArray(toIndex.include) &&\n fromIndex.include.join(',') !== toIndex.include.join(',')) ||\n fromIndex.with !== toIndex.with ||\n fromIndex.tablespace !== toIndex.tablespace ||\n fromIndex.where !== toIndex.where ||\n fromIndex.dropMode !== toIndex.dropMode)\n ) {\n if (fromIndex) {\n dropIndexes.push({\n columns: [\n {\n column: key,\n ...fromIndex,\n },\n ],\n options: fromIndex,\n });\n }\n\n if (toIndex) {\n addIndexes.push({\n columns: [\n {\n column: key,\n ...toIndex,\n },\n ],\n options: toIndex,\n });\n }\n }\n\n if (from.comment !== to.comment) {\n comments.push({ column: key, comment: to.comment || null });\n }\n } else if (item.type === 'rename') {\n alterTable.push(`RENAME COLUMN \"${key}\" TO \"${item.name}\"`);\n }\n }\n\n const prependAlterTable: string[] = [];\n\n if (\n ast.drop.primaryKey ||\n dropPrimaryKeys.change ||\n dropPrimaryKeys.columns.length > 1\n ) {\n const name = dropPrimaryKeys.options?.name || `${ast.name}_pkey`;\n prependAlterTable.push(`DROP CONSTRAINT \"${name}\"`);\n }\n\n prependAlterTable.push(\n ...dropForeignKeys.map(\n (foreignKey) => `\\n DROP ${constraintToSql(ast.name, false, foreignKey)}`,\n ),\n );\n\n alterTable.unshift(...prependAlterTable);\n\n if (\n ast.add.primaryKey ||\n addPrimaryKeys.change ||\n addPrimaryKeys.columns.length > 1\n ) {\n alterTable.push(`ADD ${primaryKeyToSql(addPrimaryKeys)}`);\n }\n\n alterTable.push(\n ...addForeignKeys.map(\n (foreignKey) => `\\n ADD ${constraintToSql(ast.name, true, foreignKey)}`,\n ),\n );\n\n if (alterTable.length) {\n result.push({\n text:\n `ALTER TABLE ${quoteTable(ast.name)}` +\n `\\n ${alterTable.join(',\\n ')}`,\n values,\n });\n }\n\n result.push(...indexesToQuery(false, ast.name, dropIndexes));\n result.push(...indexesToQuery(true, ast.name, addIndexes));\n result.push(...commentsToQuery(ast.name, comments));\n\n return result;\n};\n","import { ColumnType, Operators } from 'pqb';\nimport { ColumnsShapeCallback, JoinTableOptions, Migration } from './migration';\nimport { joinWords, quoteTable } from '../common';\nimport { getPrimaryKeysOfTable } from './migrationUtils';\nimport { singular } from 'pluralize';\nimport { createTable } from './createTable';\n\nclass UnknownColumn extends ColumnType {\n operators = Operators.any;\n\n constructor(public dataType: string) {\n super();\n }\n\n toCode() {\n return 'unknown';\n }\n}\n\nexport const createJoinTable = async (\n migration: Migration,\n up: boolean,\n tables: string[],\n options: JoinTableOptions,\n fn?: ColumnsShapeCallback,\n) => {\n const tableName = options.tableName || joinWords(...tables);\n\n if (!up) {\n return createTable(\n migration,\n up,\n tableName,\n { ...options, noPrimaryKey: true },\n () => ({}),\n );\n }\n\n const tablesWithPrimaryKeys = await Promise.all(\n tables.map(async (table) => {\n const primaryKeys = await getPrimaryKeysOfTable(migration, table).then(\n (items) =>\n items.map((item) => ({\n ...item,\n joinedName: joinWords(singular(table), item.name),\n })),\n );\n\n if (!primaryKeys.length) {\n throw new Error(\n `Primary key for table ${quoteTable(table)} is not defined`,\n );\n }\n\n return [table, primaryKeys] as const;\n }),\n );\n\n return createTable(migration, up, tableName, options, (t) => {\n const result: Record<string, ColumnType> = {};\n\n tablesWithPrimaryKeys.forEach(([table, primaryKeys]) => {\n if (primaryKeys.length === 1) {\n const [{ type, joinedName, name }] = primaryKeys;\n\n const column = new UnknownColumn(type);\n\n result[joinedName] = column.foreignKey(table, name);\n\n return;\n }\n\n primaryKeys.forEach(({ joinedName, type }) => {\n result[joinedName] = new UnknownColumn(type);\n });\n\n t.foreignKey(\n primaryKeys.map((key) => key.joinedName) as [string, ...string[]],\n table,\n primaryKeys.map((key) => key.name) as [string, ...string[]],\n );\n });\n\n if (fn) {\n Object.assign(result, fn(t));\n }\n\n t.primaryKey(\n tablesWithPrimaryKeys.flatMap(([, primaryKeys]) =>\n primaryKeys.map((item) => item.joinedName),\n ),\n );\n\n return result;\n });\n};\n","import {\n ColumnsShape,\n ColumnType,\n ColumnTypes,\n ForeignKeyOptions,\n IndexColumnOptions,\n IndexOptions,\n logParamToLogObject,\n MaybeArray,\n QueryArraysResult,\n QueryInput,\n QueryLogObject,\n QueryResult,\n QueryResultRow,\n Sql,\n TransactionAdapter,\n TypeParsers,\n raw,\n TextColumn,\n} from 'pqb';\nimport { createTable } from './createTable';\nimport { changeTable, TableChangeData, TableChanger } from './changeTable';\nimport { RakeDbConfig, quoteTable } from '../common';\nimport { createJoinTable } from './createJoinTable';\nimport { RakeDbAst } from '../ast';\n\nexport type DropMode = 'CASCADE' | 'RESTRICT';\n\nexport type TableOptions = {\n dropMode?: DropMode;\n comment?: string;\n noPrimaryKey?: boolean;\n};\n\ntype TextColumnCreator = () => TextColumn;\n\nexport type MigrationColumnTypes = Omit<ColumnTypes, 'text' | 'string'> & {\n text: TextColumnCreator;\n string: TextColumnCreator;\n};\n\nexport type ColumnsShapeCallback = (\n t: MigrationColumnTypes & { raw: typeof raw },\n) => ColumnsShape;\n\nexport type ChangeTableOptions = { comment?: string | [string, string] | null };\nexport type ChangeTableCallback = (t: TableChanger) => TableChangeData;\n\nexport type ColumnComment = { column: string; comment: string | null };\n\nexport type JoinTableOptions = {\n tableName?: string;\n comment?: string;\n dropMode?: DropMode;\n};\n\nexport type ExtensionOptions = {\n schema?: string;\n version?: string;\n cascade?: boolean;\n};\n\nexport class Migration extends TransactionAdapter {\n public log?: QueryLogObject;\n\n constructor(\n tx: TransactionAdapter,\n public up: boolean,\n public options: RakeDbConfig,\n ) {\n super(tx, tx.client, tx.types);\n this.log = logParamToLogObject(options.logger || console, options.log);\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async query<T extends QueryResultRow = any>(\n query: QueryInput,\n types: TypeParsers = this.types,\n log = this.log,\n ): Promise<QueryResult<T>> {\n return wrapWithLog(log, query, () => super.query(query, types));\n }\n\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n async arrays<R extends any[] = any[]>(\n query: QueryInput,\n types: TypeParsers = this.types,\n log = this.log,\n ): Promise<QueryArraysResult<R>> {\n return wrapWithLog(log, query, () => super.arrays(query, types));\n }\n\n createTable(\n tableName: string,\n options: TableOptions,\n fn: ColumnsShapeCallback,\n ): Promise<void>;\n createTable(tableName: string, fn: ColumnsShapeCallback): Promise<void>;\n createTable(\n tableName: string,\n cbOrOptions: ColumnsShapeCallback | TableOptions,\n cb?: ColumnsShapeCallback,\n ): Promise<void> {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions;\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback;\n\n return createTable(this, this.up, tableName, options, fn);\n }\n\n dropTable(\n tableName: string,\n options: TableOptions,\n fn: ColumnsShapeCallback,\n ): Promise<void>;\n dropTable(tableName: string, fn: ColumnsShapeCallback): Promise<void>;\n dropTable(\n tableName: string,\n cbOrOptions: ColumnsShapeCallback | TableOptions,\n cb?: ColumnsShapeCallback,\n ) {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions;\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback;\n\n return createTable(this, !this.up, tableName, options, fn);\n }\n\n createJoinTable(\n tables: string[],\n options?: JoinTableOptions,\n fn?: ColumnsShapeCallback,\n ): Promise<void>;\n createJoinTable(tables: string[], fn?: ColumnsShapeCallback): Promise<void>;\n async createJoinTable(\n tables: string[],\n cbOrOptions?: ColumnsShapeCallback | JoinTableOptions,\n cb?: ColumnsShapeCallback,\n ): Promise<void> {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions || {};\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback | undefined;\n\n return createJoinTable(this, this.up, tables, options, fn);\n }\n\n dropJoinTable(\n tables: string[],\n options?: JoinTableOptions,\n fn?: ColumnsShapeCallback,\n ): Promise<void>;\n dropJoinTable(tables: string[], fn?: ColumnsShapeCallback): Promise<void>;\n async dropJoinTable(\n tables: string[],\n cbOrOptions?: ColumnsShapeCallback | JoinTableOptions,\n cb?: ColumnsShapeCallback,\n ): Promise<void> {\n const options = typeof cbOrOptions === 'function' ? {} : cbOrOptions || {};\n const fn = (cb || cbOrOptions) as ColumnsShapeCallback | undefined;\n\n return createJoinTable(this, !this.up, tables, options, fn);\n }\n\n changeTable(\n tableName: string,\n options: ChangeTableOptions,\n fn?: ChangeTableCallback,\n ): Promise<void>;\n changeTable(tableName: string, fn: ChangeTableCallback): Promise<void>;\n changeTable(\n tableName: string,\n cbOrOptions: ChangeTableCallback | ChangeTableOptions,\n cb?: ChangeTableCallback,\n ) {\n const [fn, options] =\n typeof cbOrOptions === 'function' ? [cbOrOptions, {}] : [cb, cbOrOptions];\n\n return changeTable(this, this.up, tableName, options, fn);\n }\n\n async renameTable(from: string, to: string): Promise<void> {\n const ast: RakeDbAst.RenameTable = {\n type: 'renameTable',\n from: this.up ? from : to,\n to: this.up ? to : from,\n };\n\n await this.query(\n `ALTER TABLE ${quoteTable(ast.from)} RENAME TO \"${ast.to}\"`,\n );\n\n await this.options.appCodeUpdater?.(ast);\n }\n\n addColumn(\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes) => ColumnType,\n ) {\n return addColumn(this, this.up, tableName, columnName, fn);\n }\n\n dropColumn(\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes) => ColumnType,\n ) {\n return addColumn(this, !this.up, tableName, columnName, fn);\n }\n\n addIndex(\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n ) {\n return addIndex(this, this.up, tableName, columns, options);\n }\n\n dropIndex(\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n ) {\n return addIndex(this, !this.up, tableName, columns, options);\n }\n\n addForeignKey(\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n ) {\n return addForeignKey(\n this,\n this.up,\n tableName,\n columns,\n foreignTable,\n foreignColumns,\n options,\n );\n }\n\n dropForeignKey(\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n ) {\n return addForeignKey(\n this,\n !this.up,\n tableName,\n columns,\n foreignTable,\n foreignColumns,\n options,\n );\n }\n\n addPrimaryKey(\n tableName: string,\n columns: string[],\n options?: { name?: string },\n ) {\n return addPrimaryKey(this, this.up, tableName, columns, options);\n }\n\n dropPrimaryKey(\n tableName: string,\n columns: string[],\n options?: { name?: string },\n ) {\n return addPrimaryKey(this, !this.up, tableName, columns, options);\n }\n\n renameColumn(tableName: string, from: string, to: string) {\n return this.changeTable(tableName, (t) => ({\n [from]: t.rename(to),\n }));\n }\n\n createSchema(schemaName: string) {\n return createSchema(this, this.up, schemaName);\n }\n\n dropSchema(schemaName: string) {\n return createSchema(this, !this.up, schemaName);\n }\n\n createExtension(\n name: string,\n options: ExtensionOptions & { ifNotExists?: boolean } = {},\n ) {\n return createExtension(this, this.up, name, options);\n }\n\n dropExtension(\n name: string,\n options: { ifExists?: boolean; cascade?: boolean } = {},\n ) {\n return createExtension(this, !this.up, name, options);\n }\n\n async tableExists(tableName: string) {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"tables\" WHERE \"table_name\" = $1`,\n values: [tableName],\n });\n }\n\n async columnExists(tableName: string, columnName: string): Promise<boolean> {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"columns\" WHERE \"table_name\" = $1 AND \"column_name\" = $2`,\n values: [tableName, columnName],\n });\n }\n\n async constraintExists(constraintName: string): Promise<boolean> {\n return queryExists(this, {\n text: `SELECT 1 FROM \"information_schema\".\"table_constraints\" WHERE \"constraint_name\" = $1`,\n values: [constraintName],\n });\n }\n}\n\nconst wrapWithLog = async <Result>(\n log: QueryLogObject | undefined,\n query: QueryInput,\n fn: () => Promise<Result>,\n): Promise<Result> => {\n if (!log) {\n return fn();\n } else {\n const sql = (\n typeof query === 'string'\n ? { text: query, values: [] }\n : query.values\n ? query\n : { ...query, values: [] }\n ) as Sql;\n\n const logData = log.beforeQuery(sql);\n\n try {\n const result = await fn();\n log.afterQuery(sql, logData);\n return result;\n } catch (err) {\n log.onError(err as Error, sql, logData);\n throw err;\n }\n }\n};\n\nconst addColumn = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columnName: string,\n fn: (t: MigrationColumnTypes) => ColumnType,\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n [columnName]: t.add(fn(t)),\n }));\n};\n\nconst addIndex = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columns: MaybeArray<string | IndexColumnOptions>,\n options?: IndexOptions,\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.index(columns, options)),\n }));\n};\n\nconst addForeignKey = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columns: [string, ...string[]],\n foreignTable: string,\n foreignColumns: [string, ...string[]],\n options?: ForeignKeyOptions,\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.foreignKey(columns, foreignTable, foreignColumns, options)),\n }));\n};\n\nconst addPrimaryKey = (\n migration: Migration,\n up: boolean,\n tableName: string,\n columns: string[],\n options?: { name?: string },\n) => {\n return changeTable(migration, up, tableName, {}, (t) => ({\n ...t.add(t.primaryKey(columns, options)),\n }));\n};\n\nconst createSchema = async (\n migration: Migration,\n up: boolean,\n name: string,\n) => {\n const ast: RakeDbAst.Schema = {\n type: 'schema',\n action: up ? 'create' : 'drop',\n name,\n };\n\n await migration.query(\n `${ast.action === 'create' ? 'CREATE' : 'DROP'} SCHEMA \"${name}\"`,\n );\n\n await migration.options.appCodeUpdater?.(ast);\n};\n\nconst createExtension = async (\n migration: Migration,\n up: boolean,\n name: string,\n options: ExtensionOptions & {\n checkExists?: boolean;\n },\n) => {\n const ast: RakeDbAst.Extension = {\n type: 'extension',\n action: up ? 'create' : 'drop',\n name,\n ...options,\n };\n\n let query;\n if (ast.action === 'drop') {\n query = `DROP EXTENSION${ast.ifNotExists ? ' IF EXISTS' : ''} \"${\n ast.name\n }\"${ast.cascade ? ' CASCADE' : ''}`;\n } else {\n query = `CREATE EXTENSION${ast.ifExists ? ' IF NOT EXISTS' : ''} \"${\n ast.name\n }\"${ast.schema ? ` SCHEMA \"${ast.schema}\"` : ''}${\n ast.version ? ` VERSION '${ast.version}'` : ''\n }${ast.cascade ? ' CASCADE' : ''}`;\n }\n\n await migration.query(query);\n\n await migration.options.appCodeUpdater?.(ast);\n};\n\nconst queryExists = (\n db: Migration,\n sql: { text: string; values: unknown[] },\n) => {\n return db.query(sql).then(({ rowCount }) => rowCount > 0);\n};\n","import { Adapter, AdapterOptions, MaybeArray, toArray } from 'pqb';\nimport {\n createSchemaMigrations,\n getMigrationFiles,\n RakeDbConfig,\n MigrationFile,\n quoteTable,\n} from '../common';\nimport {\n getCurrentPromise,\n setCurrentMigrationUp,\n setCurrentMigration,\n ChangeCallback,\n change,\n getCurrentChangeCallback,\n} from '../migration/change';\nimport { Migration } from '../migration/migration';\n\nconst migrateOrRollback = async (\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n args: string[],\n up: boolean,\n) => {\n const files = await getMigrationFiles(config, up);\n\n const argCount = args[0] === 'all' ? Infinity : parseInt(args[0]);\n let count = isNaN(argCount) ? (up ? Infinity : 1) : argCount;\n\n for (const opts of toArray(options)) {\n const db = new Adapter(opts);\n const migratedVersions = await getMigratedVersionsMap(db, config);\n try {\n for (const file of files) {\n if (\n (up && migratedVersions[file.version]) ||\n (!up && !migratedVersions[file.version])\n ) {\n continue;\n }\n\n if (count-- <= 0) break;\n\n await processMigration(db, up, file, config);\n config.logger?.log(`${file.path} ${up ? 'migrated' : 'rolled back'}`);\n }\n } finally {\n await db.close();\n }\n }\n};\n\nconst changeCache: Record<string, ChangeCallback | undefined> = {};\n\nconst processMigration = async (\n db: Adapter,\n up: boolean,\n file: MigrationFile,\n config: RakeDbConfig,\n) => {\n await db.transaction(async (tx) => {\n const db = new Migration(tx, up, config);\n setCurrentMigration(db);\n setCurrentMigrationUp(up);\n\n const callback = changeCache[file.path];\n if (callback) {\n change(callback);\n } else {\n config.requireTs(file.path);\n changeCache[file.path] = getCurrentChangeCallback();\n }\n\n await getCurrentPromise();\n await (up ? saveMigratedVersion : removeMigratedVersion)(\n db,\n file.version,\n config,\n );\n });\n};\n\nconst saveMigratedVersion = async (\n db: Adapter,\n version: string,\n config: RakeDbConfig,\n) => {\n await db.query(\n `INSERT INTO ${quoteTable(config.migrationsTable)} VALUES ('${version}')`,\n );\n};\n\nconst removeMigratedVersion = async (\n db: Adapter,\n version: string,\n config: RakeDbConfig,\n) => {\n await db.query(\n `DELETE FROM ${quoteTable(\n config.migrationsTable,\n )} WHERE version = '${version}'`,\n );\n};\n\nconst getMigratedVersionsMap = async (\n db: Adapter,\n config: RakeDbConfig,\n): Promise<Record<string, boolean>> => {\n try {\n const result = await db.arrays<[string]>(\n `SELECT * FROM ${quoteTable(config.migrationsTable)}`,\n );\n return Object.fromEntries(result.rows.map((row) => [row[0], true]));\n } catch (err) {\n if ((err as Record<string, unknown>).code === '42P01') {\n await createSchemaMigrations(db, config);\n return {};\n }\n throw err;\n }\n};\n\nexport const migrate = (\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n args: string[] = [],\n) => migrateOrRollback(options, config, args, true);\n\nexport const rollback = (\n options: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n args: string[] = [],\n) => migrateOrRollback(options, config, args, false);\n","import { Adapter, AdapterOptions, MaybeArray, toArray } from 'pqb';\nimport {\n getDatabaseAndUserFromOptions,\n setAdminCredentialsToOptions,\n setAdapterOptions,\n createSchemaMigrations,\n RakeDbConfig,\n migrationConfigDefaults,\n} from '../common';\nimport { migrate } from './migrateOrRollback';\n\nconst execute = async (\n options: AdapterOptions,\n sql: string,\n): Promise<'ok' | 'already' | 'forbidden' | { error: unknown }> => {\n const db = new Adapter(options);\n try {\n await db.query(sql);\n return 'ok';\n } catch (error) {\n const err = error as Record<string, unknown>;\n if (err.code === '42P04' || err.code === '3D000') {\n return 'already';\n } else if (err.code === '42501') {\n return 'forbidden';\n } else {\n return { error };\n }\n } finally {\n await db.close();\n }\n};\n\nconst createOrDrop = async (\n options: AdapterOptions,\n adminOptions: AdapterOptions,\n config: RakeDbConfig,\n args: {\n sql(params: { database: string; user: string }): string;\n successMessage(params: { database: string }): string;\n alreadyMessage(params: { database: string }): string;\n createVersionsTable?: boolean;\n },\n) => {\n const params = getDatabaseAndUserFromOptions(options);\n\n const result = await execute(\n setAdapterOptions(adminOptions, { database: 'postgres' }),\n args.sql(params),\n );\n if (result === 'ok') {\n console.log(args.successMessage(params));\n } else if (result === 'already') {\n console.log(args.alreadyMessage(params));\n } else if (result === 'forbidden') {\n await createOrDrop(\n options,\n await setAdminCredentialsToOptions(options),\n config,\n args,\n );\n return;\n } else {\n throw result.error;\n }\n\n if (!args.createVersionsTable) return;\n\n const db = new Adapter(options);\n await createSchemaMigrations(db, config);\n await db.close();\n};\n\nexport const createDb = async (\n arg: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n) => {\n for (const options of toArray(arg)) {\n await createOrDrop(options, options, config, {\n sql({ database, user }) {\n return `CREATE DATABASE \"${database}\" OWNER \"${user}\"`;\n },\n successMessage({ database }) {\n return `Database ${database} successfully created`;\n },\n alreadyMessage({ database }) {\n return `Database ${database} already exists`;\n },\n createVersionsTable: true,\n });\n }\n};\n\nexport const dropDb = async (arg: MaybeArray<AdapterOptions>) => {\n for (const options of toArray(arg)) {\n await createOrDrop(options, options, migrationConfigDefaults, {\n sql({ database }) {\n return `DROP DATABASE \"${database}\"`;\n },\n successMessage({ database }) {\n return `Database ${database} was successfully dropped`;\n },\n alreadyMessage({ database }) {\n return `Database ${database} does not exist`;\n },\n });\n }\n};\n\nexport const resetDb = async (\n arg: MaybeArray<AdapterOptions>,\n config: RakeDbConfig,\n) => {\n await dropDb(arg);\n await createDb(arg, config);\n await migrate(arg, config);\n};\n","import {\n getFirstWordAndRest,\n getTextAfterFrom,\n getTextAfterTo,\n RakeDbConfig,\n} from '../common';\nimport { mkdir, writeFile } from 'fs/promises';\nimport path from 'path';\n\nexport const generate = async (config: RakeDbConfig, args: string[]) => {\n const name = args[0];\n if (!name) throw new Error('Migration name is missing');\n\n await mkdir(config.migrationsPath, { recursive: true });\n\n const filePath = path.resolve(\n config.migrationsPath,\n `${makeFileTimeStamp()}_${name}.ts`,\n );\n await writeFile(filePath, makeContent(name, args.slice(1)));\n console.log(`Created ${filePath}`);\n};\n\nconst makeFileTimeStamp = () => {\n const now = new Date();\n return [\n now.getUTCFullYear(),\n now.getUTCMonth() + 1,\n now.getUTCDate(),\n now.getUTCHours(),\n now.getUTCMinutes(),\n now.getUTCSeconds(),\n ]\n .map((value) => (value < 10 ? `0${value}` : value))\n .join('');\n};\n\nconst makeContent = (name: string, args: string[]): string => {\n let content = `import { change } from 'rake-db';\\n\\nchange(async (db) => {`;\n\n const [first, rest] = getFirstWordAndRest(name);\n if (rest) {\n if (first === 'create' || first === 'drop') {\n content += `\\n await db.${\n first === 'create' ? 'createTable' : 'dropTable'\n }('${rest}', (t) => ({`;\n content += makeColumnsContent(args);\n content += '\\n }));';\n } else if (first === 'change') {\n content += `\\n await db.changeTable('${rest}', (t) => ({`;\n content += '\\n }));';\n } else if (first === 'add' || first === 'remove') {\n const table =\n first === 'add' ? getTextAfterTo(rest) : getTextAfterFrom(rest);\n content += `\\n await db.changeTable(${\n table ? `'${table}'` : 'tableName'\n }, (t) => ({`;\n content += makeColumnsContent(args, first);\n content += '\\n }));';\n }\n }\n\n return content + '\\n});\\n';\n};\n\nconst makeColumnsContent = (args: string[], method?: string) => {\n let content = '';\n const prepend = method ? `t.${method}(` : '';\n const append = method ? ')' : '';\n\n for (const arg of args) {\n const [name, def] = arg.split(':');\n if (!def) {\n throw new Error(\n `Column argument should be similar to name:type, name:type.method1.method2, name:type(arg).method(arg). Example: name:varchar(20).nullable. Received: ${arg}`,\n );\n }\n\n const methods = def\n .split('.')\n .map((method) => (method.endsWith(')') ? `.${method}` : `.${method}()`));\n content += `\\n ${name}: ${prepend}t${methods.join('')}${append},`;\n }\n return content;\n};\n","import { AdapterOptions, MaybeArray } from 'pqb';\nimport { createDb, dropDb, resetDb } from './commands/createOrDrop';\nimport { migrate, rollback } from './commands/migrateOrRollback';\nimport { getMigrationConfigWithDefaults, RakeDbConfig } from './common';\nimport { generate } from './commands/generate';\n\nexport const rakeDb = async (\n options: MaybeArray<AdapterOptions>,\n partialConfig: Partial<RakeDbConfig> = {},\n args: string[] = process.argv.slice(2),\n) => {\n const config = getMigrationConfigWithDefaults(partialConfig);\n\n const command = args[0]?.split(':')[0];\n\n if (command === 'create') {\n await createDb(options, config);\n } else if (command === 'drop') {\n await dropDb(options);\n } else if (command === 'reset') {\n await resetDb(options, config);\n } else if (command === 'migrate') {\n await migrate(options, config, args.slice(1));\n } else if (command === 'rollback') {\n await rollback(options, config, args.slice(1));\n } else if (command === 'g' || command === 'generate') {\n await generate(config, args.slice(1));\n } else {\n printHelp();\n }\n};\n\nconst printHelp = () =>\n console.log(\n `Usage: rake-db [command] [arguments]\n\nCommands:\n create create databases\n drop drop databases\n reset drop, create and migrate databases\n g, generate generate migration file, see below\n migrate migrate all pending migrations\n rollback rollback the last migrated\n no or unknown command prints this message\n \nGenerate arguments:\n- (required) first argument is migration name\n * create* template for create table\n * change* template for change table\n * add*To* template for add columns\n * remove*From* template for remove columns\n * drop* template for drop table\n\n- other arguments considered as columns with types and optional methods:\n rake-db g createTable id:serial.primaryKey name:text.nullable\n`,\n );\n"],"names":["path","__spreadValues","__spreadProps","Enquirer","readdir","quote","isRaw","getRaw","toArray","columnTypes","raw","getColumnTypes","getTableData","makeAst","astToQueries","ColumnType","emptyObject","resetTableData","changeTableData","Operators","singular","TransactionAdapter","logParamToLogObject","Adapter","db","mkdir","writeFile","method"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rake-db",
3
- "version": "2.2.1",
3
+ "version": "2.2.3",
4
4
  "description": "Migrations tool for Postgresql DB",
5
5
  "homepage": "https://orchid-orm.netlify.app/guide/migration-setup-and-overview.html",
6
6
  "repository": {
@@ -42,7 +42,7 @@
42
42
  "dependencies": {
43
43
  "enquirer": "^2.3.6",
44
44
  "pluralize": "^8.0.0",
45
- "pqb": "0.8.1"
45
+ "pqb": "0.8.3"
46
46
  },
47
47
  "devDependencies": {
48
48
  "@swc/core": "^1.2.210",
@@ -11,6 +11,10 @@ class UnknownColumn extends ColumnType {
11
11
  constructor(public dataType: string) {
12
12
  super();
13
13
  }
14
+
15
+ toCode() {
16
+ return 'unknown';
17
+ }
14
18
  }
15
19
 
16
20
  export const createJoinTable = async (