rake-db 2.1.1 → 2.1.2

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/dist/index.esm.js CHANGED
@@ -274,12 +274,12 @@ const getForeignKeyTable = (fnOrTable) => {
274
274
  return new klass().table;
275
275
  };
276
276
  const constraintToSql = (tableName, up, foreignKey) => {
277
- const table = getForeignKeyTable(foreignKey.fnOrTable);
278
- const constraintName = foreignKey.options.name || joinWords(tableName, "to", table);
277
+ const constraintName = foreignKey.options.name || `${tableName}_${foreignKey.columns.join("_")}_fkey`;
279
278
  if (!up) {
280
279
  const { dropMode } = foreignKey.options;
281
280
  return `CONSTRAINT "${constraintName}"${dropMode ? ` ${dropMode}` : ""}`;
282
281
  }
282
+ const table = getForeignKeyTable(foreignKey.fnOrTable);
283
283
  return `CONSTRAINT "${constraintName}" FOREIGN KEY (${joinColumns(
284
284
  foreignKey.columns
285
285
  )}) ${referencesToSql(table, foreignKey.foreignColumns, foreignKey.options)}`;
@@ -636,11 +636,11 @@ const changeTable = async (migration, up, tableName, options, fn) => {
636
636
  }
637
637
  }
638
638
  }
639
- changeTableData.add.forEach((tableData) => {
640
- handleTableData(state, up, tableName, tableData);
639
+ changeTableData[up ? "drop" : "add"].forEach((tableData) => {
640
+ handleTableData(state, false, tableName, tableData);
641
641
  });
642
- changeTableData.drop.forEach((tableData) => {
643
- handleTableData(state, !up, tableName, tableData);
642
+ changeTableData[up ? "add" : "drop"].forEach((tableData) => {
643
+ handleTableData(state, true, tableName, tableData);
644
644
  });
645
645
  if (state.alterTable.length) {
646
646
  await migration.query(
@@ -648,10 +648,8 @@ const changeTable = async (migration, up, tableName, options, fn) => {
648
648
  ${state.alterTable.join(",\n ")}`
649
649
  );
650
650
  }
651
- const createIndexes = up ? state.indexes : state.dropIndexes;
652
- const dropIndexes = up ? state.dropIndexes : state.indexes;
653
- await migrateIndexes(state, createIndexes, up);
654
- await migrateIndexes(state, dropIndexes, !up);
651
+ await migrateIndexes(state, state.dropIndexes, false);
652
+ await migrateIndexes(state, state.indexes, true);
655
653
  await migrateComments(state, state.comments);
656
654
  };
657
655
  const changeActions = {
@@ -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/migration.ts","../src/commands/migrateOrRollback.ts","../src/commands/createOrDrop.ts","../src/commands/generate.ts","../src/rakeDb.ts"],"sourcesContent":["import { Adapter, AdapterOptions, QueryLogOptions } from 'pqb';\nimport Enquirer from 'enquirer';\nimport path from 'path';\nimport { readdir } from 'fs/promises';\n\nexport type MigrationConfig = {\n migrationsPath: string;\n migrationsTable: string;\n requireTs(path: string): void;\n} & QueryLogOptions;\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<MigrationConfig>,\n) => {\n return { ...migrationConfigDefaults, ...config };\n};\n\nexport const getDatabaseAndUserFromOptions = (\n options: AdapterOptions,\n): { database: string; user: string } => {\n if (options.connectionString) {\n const url = new URL(options.connectionString);\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.connectionString) {\n const url = new URL(options.connectionString);\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, connectionString: 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: MigrationConfig,\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: MigrationConfig,\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 ForeignKeyModel,\n ForeignKeyOptions,\n getRaw,\n isRaw,\n quote,\n TableData,\n toArray,\n} from 'pqb';\nimport { ColumnComment, ColumnIndex, Migration } from './migration';\nimport { joinColumns, joinWords, quoteTable } from '../common';\n\nexport const columnToSql = (\n key: string,\n item: ColumnType,\n { values }: { values: unknown[] },\n) => {\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) {\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: ColumnIndex[],\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: (() => ForeignKeyModel) | 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 table = getForeignKeyTable(foreignKey.fnOrTable);\n const constraintName =\n foreignKey.options.name || joinWords(tableName, 'to', table);\n\n if (!up) {\n const { dropMode } = foreignKey.options;\n return `CONSTRAINT \"${constraintName}\"${dropMode ? ` ${dropMode}` : ''}`;\n }\n\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 migrateIndexes = async (\n state: {\n migration: Migration;\n tableName: string;\n },\n indexes: ColumnIndex[],\n up: boolean,\n) => {\n for (const item of indexes) {\n await migrateIndex(state, up, item);\n }\n};\n\nexport const migrateIndex = (\n state: { migration: Migration; tableName: string },\n up: boolean,\n { columns, options }: ColumnIndex,\n) => {\n const indexName =\n options.name ||\n joinWords(state.tableName, ...columns.map(({ column }) => column), 'index');\n\n if (!up) {\n return state.migration.query(\n `DROP INDEX \"${indexName}\"${\n options.dropMode ? ` ${options.dropMode}` : ''\n }`,\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(state.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}\"${column.expression ? `(${column.expression})` : ''}`,\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 state.migration.query({ text: sql.join(' '), values });\n};\n\nexport const migrateComments = async (\n state: { migration: Migration; tableName: string },\n comments: ColumnComment[],\n) => {\n for (const { column, comment } of comments) {\n await state.migration.query(\n `COMMENT ON COLUMN ${quoteTable(state.tableName)}.\"${column}\" IS ${quote(\n comment,\n )}`,\n );\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 ColumnType,\n columnTypes,\n getColumnTypes,\n getTableData,\n Operators,\n quote,\n raw,\n} from 'pqb';\nimport {\n TableOptions,\n ColumnsShapeCallback,\n Migration,\n ColumnIndex,\n ColumnComment,\n JoinTableOptions,\n} from './migration';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n constraintToSql,\n getPrimaryKeysOfTable,\n migrateComments,\n migrateIndexes,\n primaryKeyToSql,\n} from './migrationUtils';\nimport { joinWords, quoteTable } from '../common';\nimport { singular } from 'pluralize';\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(migration, up, tableName, options, () => ({}));\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\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\n if (!up) {\n const { dropMode } = options;\n await migration.query(\n `DROP TABLE ${quoteTable(tableName)}${dropMode ? ` ${dropMode}` : ''}`,\n );\n return;\n }\n\n const lines: string[] = [];\n\n const state: {\n migration: Migration;\n tableName: string;\n values: unknown[];\n indexes: ColumnIndex[];\n comments: ColumnComment[];\n } = {\n migration,\n tableName,\n values: [],\n indexes: [],\n comments: [],\n };\n\n for (const key in shape) {\n const item = shape[key];\n addColumnIndex(state.indexes, key, item);\n addColumnComment(state.comments, key, item);\n lines.push(`\\n ${columnToSql(key, item, state)}`);\n }\n\n const tableData = getTableData();\n if (tableData.primaryKey) {\n lines.push(`\\n ${primaryKeyToSql(tableData.primaryKey)}`);\n }\n\n tableData.foreignKeys.forEach((foreignKey) => {\n lines.push(`\\n ${constraintToSql(state.tableName, up, foreignKey)}`);\n });\n\n await migration.query({\n text: `CREATE TABLE ${quoteTable(tableName)} (${lines.join(',')}\\n)`,\n values: state.values,\n });\n\n state.indexes.push(...tableData.indexes);\n\n await migrateIndexes(state, state.indexes, up);\n await migrateComments(state, state.comments);\n\n if (options.comment) {\n await migration.query(\n `COMMENT ON TABLE ${quoteTable(tableName)} IS ${quote(options.comment)}`,\n );\n }\n};\n","import {\n ColumnTypes,\n ColumnType,\n columnTypes,\n resetTableData,\n quote,\n getTableData,\n EmptyObject,\n emptyObject,\n TableData,\n RawExpression,\n getRaw,\n isRaw,\n raw,\n ForeignKey,\n newTableData,\n SingleColumnIndexOptions,\n} from 'pqb';\nimport {\n ChangeTableCallback,\n ChangeTableOptions,\n ColumnComment,\n ColumnIndex,\n DropMode,\n Migration,\n} from './migration';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n constraintToSql,\n migrateComments,\n migrateIndexes,\n primaryKeyToSql,\n} from './migrationUtils';\nimport { quoteTable } from '../common';\n\nconst newChangeTableData = () => ({\n add: [],\n drop: [],\n});\n\nlet changeTableData: { add: TableData[]; drop: TableData[] } =\n newChangeTableData();\n\nconst resetChangeTableData = () => {\n changeTableData = newChangeTableData();\n};\n\nfunction add(item: ColumnType, options?: { dropMode?: DropMode }): ChangeItem;\nfunction add(emptyObject: EmptyObject): EmptyObject;\nfunction add(\n items: Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n): Record<string, ChangeItem>;\nfunction add(\n item: ColumnType | EmptyObject | Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n): ChangeItem | EmptyObject | Record<string, ChangeItem> {\n if (item instanceof ColumnType) {\n return ['add', item, options];\n } else if (item === emptyObject) {\n changeTableData.add.push(getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, ChangeItem> = {};\n for (const key in item) {\n result[key] = ['add', (item as Record<string, ColumnType>)[key], options];\n }\n return result;\n }\n}\n\nconst drop = ((item, options) => {\n if (item instanceof ColumnType) {\n return ['drop', item, options];\n } else if (item === emptyObject) {\n changeTableData.drop.push(getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, ChangeItem> = {};\n for (const key in item) {\n result[key] = [\n 'drop',\n (item as Record<string, ColumnType>)[key],\n options,\n ];\n }\n return result;\n }\n}) as typeof add;\n\ntype ChangeOptions = {\n usingUp?: RawExpression;\n usingDown?: RawExpression;\n};\n\ntype ChangeArg =\n | ColumnType\n | ['default', unknown | RawExpression]\n | ['nullable', boolean]\n | ['comment', string | null]\n | ['compression', string]\n | ['foreignKey', ForeignKey<string, string[]>]\n | ['index', Omit<SingleColumnIndexOptions, 'column'>];\n\ntype TableChangeMethods = typeof tableChangeMethods;\nconst tableChangeMethods = {\n raw: raw,\n add,\n drop,\n change(from: ChangeArg, to: ChangeArg, options?: ChangeOptions): ChangeItem {\n return ['change', from, to, options];\n },\n default(value: unknown | RawExpression): ChangeArg {\n return ['default', value];\n },\n nullable(): ChangeArg {\n return ['nullable', true];\n },\n nonNullable(): ChangeArg {\n return ['nullable', false];\n },\n comment(name: string | null): ChangeArg {\n return ['comment', name];\n },\n rename(name: string): ChangeItem {\n return ['rename', name];\n },\n};\n\nexport type ChangeItem =\n | [\n action: 'add' | 'drop',\n item: ColumnType,\n options?: { dropMode?: DropMode },\n ]\n | [action: 'change', from: ChangeArg, to: ChangeArg, options?: ChangeOptions]\n | ['rename', string];\n\nexport type TableChanger = ColumnTypes & TableChangeMethods;\n\nexport type TableChangeData = Record<string, ChangeItem | EmptyObject>;\n\ntype ChangeTableState = {\n migration: Migration;\n up: boolean;\n tableName: string;\n alterTable: string[];\n values: unknown[];\n indexes: ColumnIndex[];\n dropIndexes: ColumnIndex[];\n comments: ColumnComment[];\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 state: ChangeTableState = {\n migration,\n up,\n tableName,\n alterTable: [],\n values: [],\n indexes: [],\n dropIndexes: [],\n comments: [],\n };\n\n if (options.comment !== undefined) {\n await changeActions.tableComment(state, tableName, options.comment);\n }\n\n for (const key in changeData) {\n const result = changeData[key];\n if (Array.isArray(result)) {\n const [action] = result;\n if (action === 'change') {\n const [, from, to, options] = result;\n changeActions.change(state, up, key, from, to, options);\n } else if (action === 'rename') {\n const [, name] = result;\n changeActions.rename(state, up, key, name);\n } else if (action) {\n const [action, item, options] = result;\n changeActions[\n action as Exclude<\n keyof typeof changeActions,\n 'change' | 'rename' | 'tableComment'\n >\n ](state, up, key, item, options);\n }\n }\n }\n\n changeTableData.add.forEach((tableData) => {\n handleTableData(state, up, tableName, tableData);\n });\n\n changeTableData.drop.forEach((tableData) => {\n handleTableData(state, !up, tableName, tableData);\n });\n\n if (state.alterTable.length) {\n await migration.query(\n `ALTER TABLE ${quoteTable(tableName)}` +\n `\\n ${state.alterTable.join(',\\n ')}`,\n );\n }\n\n const createIndexes = up ? state.indexes : state.dropIndexes;\n const dropIndexes = up ? state.dropIndexes : state.indexes;\n await migrateIndexes(state, createIndexes, up);\n await migrateIndexes(state, dropIndexes, !up);\n await migrateComments(state, state.comments);\n};\n\nconst changeActions = {\n tableComment(\n { migration, up }: ChangeTableState,\n tableName: string,\n comment: Exclude<ChangeTableOptions['comment'], undefined>,\n ) {\n let value;\n if (up) {\n value = Array.isArray(comment) ? comment[1] : comment;\n } else {\n value = Array.isArray(comment) ? comment[0] : null;\n }\n return migration.query(\n `COMMENT ON TABLE ${quoteTable(tableName)} IS ${quote(value)}`,\n );\n },\n\n add(\n state: ChangeTableState,\n up: boolean,\n key: string,\n item: ColumnType,\n options?: { dropMode?: DropMode },\n ) {\n addColumnIndex(state[up ? 'indexes' : 'dropIndexes'], key, item);\n\n if (up) {\n addColumnComment(state.comments, key, item);\n }\n\n if (up) {\n state.alterTable.push(`ADD COLUMN ${columnToSql(key, item, state)}`);\n } else {\n state.alterTable.push(\n `DROP COLUMN \"${key}\"${\n options?.dropMode ? ` ${options.dropMode}` : ''\n }`,\n );\n }\n },\n\n drop(\n state: ChangeTableState,\n up: boolean,\n key: string,\n item: ColumnType,\n options?: { dropMode?: DropMode },\n ) {\n this.add(state, !up, key, item, options);\n },\n\n change(\n state: ChangeTableState,\n up: boolean,\n key: string,\n first: ChangeArg,\n second: ChangeArg,\n options?: ChangeOptions,\n ) {\n const [fromItem, toItem] = up ? [first, second] : [second, first];\n\n const from = getChangeProperties(fromItem);\n const to = getChangeProperties(toItem);\n\n if (from.type !== to.type || from.collate !== to.collate) {\n const using = up ? options?.usingUp : options?.usingDown;\n state.alterTable.push(\n `ALTER COLUMN \"${key}\" TYPE ${to.type}${\n to.collate ? ` COLLATE ${quote(to.collate)}` : ''\n }${using ? ` USING ${getRaw(using, state.values)}` : ''}`,\n );\n }\n\n if (from.default !== to.default) {\n const value = getRawOrValue(to.default, state.values);\n const expr =\n value === undefined ? `DROP DEFAULT` : `SET DEFAULT ${value}`;\n state.alterTable.push(`ALTER COLUMN \"${key}\" ${expr}`);\n }\n\n if (from.nullable !== to.nullable) {\n state.alterTable.push(\n `ALTER COLUMN \"${key}\" ${to.nullable ? 'DROP' : 'SET'} NOT NULL`,\n );\n }\n\n if (from.compression !== to.compression) {\n state.alterTable.push(\n `ALTER COLUMN \"${key}\" SET COMPRESSION ${to.compression || 'DEFAULT'}`,\n );\n }\n\n const fromFkey = from.foreignKey;\n const toFkey = to.foreignKey;\n if (fromFkey || toFkey) {\n if ((fromFkey && 'fn' in fromFkey) || (toFkey && 'fn' in toFkey)) {\n throw new Error('Callback in foreignKey is not allowed in migration');\n }\n\n if (checkIfForeignKeysAreDifferent(fromFkey, toFkey)) {\n if (fromFkey) {\n const data = newTableData();\n data.foreignKeys.push({\n columns: [key],\n fnOrTable: fromFkey.table,\n foreignColumns: fromFkey.columns,\n options: fromFkey,\n });\n changeTableData[up ? 'drop' : 'add'].push(data);\n }\n\n if (toFkey) {\n const data = newTableData();\n data.foreignKeys.push({\n columns: [key],\n fnOrTable: toFkey.table,\n foreignColumns: toFkey.columns,\n options: toFkey,\n });\n changeTableData[up ? 'add' : 'drop'].push(data);\n }\n }\n }\n\n const fromIndex = from.index;\n const toIndex = to.index;\n if (\n (fromIndex || toIndex) &&\n checkIfIndexesAreDifferent(fromIndex, toIndex)\n ) {\n if (fromIndex) {\n const data = newTableData();\n data.indexes.push({\n columns: [\n {\n column: key,\n ...fromIndex,\n },\n ],\n options: fromIndex,\n });\n changeTableData[up ? 'drop' : 'add'].push(data);\n }\n\n if (toIndex) {\n const data = newTableData();\n data.indexes.push({\n columns: [\n {\n column: key,\n ...toIndex,\n },\n ],\n options: toIndex,\n });\n changeTableData[up ? 'add' : 'drop'].push(data);\n }\n }\n\n if (from.comment !== to.comment) {\n state.comments.push({ column: key, comment: to.comment || null });\n }\n },\n\n rename(state: ChangeTableState, up: boolean, key: string, name: string) {\n const [from, to] = up ? [key, name] : [name, key];\n state.alterTable.push(`RENAME COLUMN \"${from}\" TO \"${to}\"`);\n },\n};\n\nconst checkIfForeignKeysAreDifferent = (\n from?: ForeignKey<string, string[]> & { table: string },\n to?: ForeignKey<string, string[]> & { table: string },\n) => {\n return (\n !from ||\n !to ||\n from.name !== to.name ||\n from.match !== to.match ||\n from.onUpdate !== to.onUpdate ||\n from.onDelete !== to.onDelete ||\n from.dropMode !== to.dropMode ||\n from.table !== to.table ||\n from.columns.join(',') !== to.columns.join(',')\n );\n};\n\nconst checkIfIndexesAreDifferent = (\n from?: Omit<SingleColumnIndexOptions, 'column'>,\n to?: Omit<SingleColumnIndexOptions, 'column'>,\n) => {\n return (\n !from ||\n !to ||\n from.expression !== to.expression ||\n from.collate !== to.collate ||\n from.operator !== to.operator ||\n from.order !== to.order ||\n from.name !== to.name ||\n from.unique !== to.unique ||\n from.using !== to.using ||\n from.include !== to.include ||\n (Array.isArray(from.include) &&\n Array.isArray(to.include) &&\n from.include.join(',') !== to.include.join(',')) ||\n from.with !== to.with ||\n from.tablespace !== to.tablespace ||\n from.where !== to.where ||\n from.dropMode !== to.dropMode\n );\n};\n\ntype ChangeProperties = {\n type?: string;\n collate?: string;\n default?: unknown | RawExpression;\n nullable?: boolean;\n comment?: string | null;\n compression?: string;\n foreignKey?: ForeignKey<string, string[]>;\n index?: Omit<SingleColumnIndexOptions, 'column'>;\n};\n\nconst getChangeProperties = (item: ChangeArg): ChangeProperties => {\n if (item instanceof ColumnType) {\n return {\n type: item.toSQL(),\n collate: item.data.collate,\n default: item.data.default,\n nullable: item.isNullable,\n comment: item.data.comment,\n compression: item.data.compression,\n foreignKey: item.data.foreignKey,\n index: item.data.index,\n };\n } else {\n return {\n type: undefined,\n collate: undefined,\n default: item[0] === 'default' ? item[1] : undefined,\n nullable: item[0] === 'nullable' ? item[1] : undefined,\n comment: item[0] === 'comment' ? item[1] : undefined,\n compression: item[0] === 'compression' ? item[1] : undefined,\n foreignKey: item[0] === 'foreignKey' ? item[1] : undefined,\n index: item[0] === 'index' ? item[1] : undefined,\n };\n }\n};\n\nconst handleTableData = (\n state: ChangeTableState,\n up: boolean,\n tableName: string,\n tableData: TableData,\n) => {\n if (tableData.primaryKey) {\n if (up) {\n state.alterTable.push(`ADD ${primaryKeyToSql(tableData.primaryKey)}`);\n } else {\n const name = tableData.primaryKey.options?.name || `${tableName}_pkey`;\n state.alterTable.push(`DROP CONSTRAINT \"${name}\"`);\n }\n }\n\n if (tableData.indexes.length) {\n state[up ? 'indexes' : 'dropIndexes'].push(...tableData.indexes);\n }\n\n if (tableData.foreignKeys.length) {\n tableData.foreignKeys.forEach((foreignKey) => {\n const action = up ? 'ADD' : 'DROP';\n state.alterTable.push(\n `\\n ${action} ${constraintToSql(state.tableName, up, foreignKey)}`,\n );\n });\n }\n};\n\nconst getRawOrValue = (item: unknown | RawExpression, values: unknown[]) => {\n return typeof item === 'object' && item && isRaw(item)\n ? getRaw(item, values)\n : quote(item);\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 QueryLogOptions,\n QueryResult,\n QueryResultRow,\n Sql,\n TransactionAdapter,\n TypeParsers,\n raw,\n} from 'pqb';\nimport { createJoinTable, createTable } from './createTable';\nimport { changeTable, TableChangeData, TableChanger } from './changeTable';\nimport { quoteTable } from '../common';\n\nexport type DropMode = 'CASCADE' | 'RESTRICT';\n\nexport type TableOptions = { dropMode?: DropMode; comment?: string };\nexport type ColumnsShapeCallback = (\n t: ColumnTypes & { raw: typeof raw },\n) => ColumnsShape;\n\nexport type ChangeTableOptions = { comment?: string | [string, string] | null };\nexport type ChangeTableCallback = (t: TableChanger) => TableChangeData;\n\nexport type ColumnIndex = {\n columns: IndexColumnOptions[];\n options: IndexOptions;\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 options: QueryLogOptions,\n ) {\n super(tx.pool, 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 [table, newName] = this.up ? [from, to] : [to, from];\n await this.query(`ALTER TABLE ${quoteTable(table)} RENAME TO \"${newName}\"`);\n }\n\n addColumn(\n tableName: string,\n columnName: string,\n fn: (t: ColumnTypes) => ColumnType,\n ) {\n return addColumn(this, this.up, tableName, columnName, fn);\n }\n\n dropColumn(\n tableName: string,\n columnName: string,\n fn: (t: ColumnTypes) => 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, {\n ...options,\n checkExists: options.ifNotExists,\n });\n }\n\n dropExtension(\n name: string,\n options: { ifExists?: boolean; cascade?: boolean } = {},\n ) {\n return createExtension(this, !this.up, name, {\n ...options,\n checkExists: options.ifExists,\n });\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: ColumnTypes) => 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 = (\n migration: Migration,\n up: boolean,\n schemaName: string,\n) => {\n if (up) {\n return migration.query(`CREATE SCHEMA \"${schemaName}\"`);\n } else {\n return migration.query(`DROP SCHEMA \"${schemaName}\"`);\n }\n};\n\nconst createExtension = (\n migration: Migration,\n up: boolean,\n name: string,\n options: ExtensionOptions & {\n checkExists?: boolean;\n },\n) => {\n if (!up) {\n return migration.query(\n `DROP EXTENSION${options.checkExists ? ' IF EXISTS' : ''} \"${name}\"${\n options.cascade ? ' CASCADE' : ''\n }`,\n );\n }\n\n return migration.query(\n `CREATE EXTENSION${options.checkExists ? ' IF NOT EXISTS' : ''} \"${name}\"${\n options.schema ? ` SCHEMA \"${options.schema}\"` : ''\n }${options.version ? ` VERSION '${options.version}'` : ''}${\n options.cascade ? ' CASCADE' : ''\n }`,\n );\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 MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\n args: string[] = [],\n) => migrateOrRollback(options, config, args, true);\n\nexport const rollback = (\n options: MaybeArray<AdapterOptions>,\n config: MigrationConfig,\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 MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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 MigrationConfig,\n} from '../common';\nimport { mkdir, writeFile } from 'fs/promises';\nimport path from 'path';\n\nexport const generate = async (config: MigrationConfig, 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, MigrationConfig } from './common';\nimport { generate } from './commands/generate';\n\nexport const rakeDb = async (\n options: MaybeArray<AdapterOptions>,\n partialConfig: Partial<MigrationConfig> = {},\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","options","action","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/migration.ts","../src/commands/migrateOrRollback.ts","../src/commands/createOrDrop.ts","../src/commands/generate.ts","../src/rakeDb.ts"],"sourcesContent":["import { Adapter, AdapterOptions, QueryLogOptions } from 'pqb';\nimport Enquirer from 'enquirer';\nimport path from 'path';\nimport { readdir } from 'fs/promises';\n\nexport type MigrationConfig = {\n migrationsPath: string;\n migrationsTable: string;\n requireTs(path: string): void;\n} & QueryLogOptions;\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<MigrationConfig>,\n) => {\n return { ...migrationConfigDefaults, ...config };\n};\n\nexport const getDatabaseAndUserFromOptions = (\n options: AdapterOptions,\n): { database: string; user: string } => {\n if (options.connectionString) {\n const url = new URL(options.connectionString);\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.connectionString) {\n const url = new URL(options.connectionString);\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, connectionString: 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: MigrationConfig,\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: MigrationConfig,\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 ForeignKeyModel,\n ForeignKeyOptions,\n getRaw,\n isRaw,\n quote,\n TableData,\n toArray,\n} from 'pqb';\nimport { ColumnComment, ColumnIndex, Migration } from './migration';\nimport { joinColumns, joinWords, quoteTable } from '../common';\n\nexport const columnToSql = (\n key: string,\n item: ColumnType,\n { values }: { values: unknown[] },\n) => {\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) {\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: ColumnIndex[],\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: (() => ForeignKeyModel) | 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 migrateIndexes = async (\n state: {\n migration: Migration;\n tableName: string;\n },\n indexes: ColumnIndex[],\n up: boolean,\n) => {\n for (const item of indexes) {\n await migrateIndex(state, up, item);\n }\n};\n\nexport const migrateIndex = (\n state: { migration: Migration; tableName: string },\n up: boolean,\n { columns, options }: ColumnIndex,\n) => {\n const indexName =\n options.name ||\n joinWords(state.tableName, ...columns.map(({ column }) => column), 'index');\n\n if (!up) {\n return state.migration.query(\n `DROP INDEX \"${indexName}\"${\n options.dropMode ? ` ${options.dropMode}` : ''\n }`,\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(state.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}\"${column.expression ? `(${column.expression})` : ''}`,\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 state.migration.query({ text: sql.join(' '), values });\n};\n\nexport const migrateComments = async (\n state: { migration: Migration; tableName: string },\n comments: ColumnComment[],\n) => {\n for (const { column, comment } of comments) {\n await state.migration.query(\n `COMMENT ON COLUMN ${quoteTable(state.tableName)}.\"${column}\" IS ${quote(\n comment,\n )}`,\n );\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 ColumnType,\n columnTypes,\n getColumnTypes,\n getTableData,\n Operators,\n quote,\n raw,\n} from 'pqb';\nimport {\n TableOptions,\n ColumnsShapeCallback,\n Migration,\n ColumnIndex,\n ColumnComment,\n JoinTableOptions,\n} from './migration';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n constraintToSql,\n getPrimaryKeysOfTable,\n migrateComments,\n migrateIndexes,\n primaryKeyToSql,\n} from './migrationUtils';\nimport { joinWords, quoteTable } from '../common';\nimport { singular } from 'pluralize';\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(migration, up, tableName, options, () => ({}));\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\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\n if (!up) {\n const { dropMode } = options;\n await migration.query(\n `DROP TABLE ${quoteTable(tableName)}${dropMode ? ` ${dropMode}` : ''}`,\n );\n return;\n }\n\n const lines: string[] = [];\n\n const state: {\n migration: Migration;\n tableName: string;\n values: unknown[];\n indexes: ColumnIndex[];\n comments: ColumnComment[];\n } = {\n migration,\n tableName,\n values: [],\n indexes: [],\n comments: [],\n };\n\n for (const key in shape) {\n const item = shape[key];\n addColumnIndex(state.indexes, key, item);\n addColumnComment(state.comments, key, item);\n lines.push(`\\n ${columnToSql(key, item, state)}`);\n }\n\n const tableData = getTableData();\n if (tableData.primaryKey) {\n lines.push(`\\n ${primaryKeyToSql(tableData.primaryKey)}`);\n }\n\n tableData.foreignKeys.forEach((foreignKey) => {\n lines.push(`\\n ${constraintToSql(state.tableName, up, foreignKey)}`);\n });\n\n await migration.query({\n text: `CREATE TABLE ${quoteTable(tableName)} (${lines.join(',')}\\n)`,\n values: state.values,\n });\n\n state.indexes.push(...tableData.indexes);\n\n await migrateIndexes(state, state.indexes, up);\n await migrateComments(state, state.comments);\n\n if (options.comment) {\n await migration.query(\n `COMMENT ON TABLE ${quoteTable(tableName)} IS ${quote(options.comment)}`,\n );\n }\n};\n","import {\n ColumnTypes,\n ColumnType,\n columnTypes,\n resetTableData,\n quote,\n getTableData,\n EmptyObject,\n emptyObject,\n TableData,\n RawExpression,\n getRaw,\n isRaw,\n raw,\n ForeignKey,\n newTableData,\n SingleColumnIndexOptions,\n} from 'pqb';\nimport {\n ChangeTableCallback,\n ChangeTableOptions,\n ColumnComment,\n ColumnIndex,\n DropMode,\n Migration,\n} from './migration';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n constraintToSql,\n migrateComments,\n migrateIndexes,\n primaryKeyToSql,\n} from './migrationUtils';\nimport { quoteTable } from '../common';\n\nconst newChangeTableData = () => ({\n add: [],\n drop: [],\n});\n\nlet changeTableData: { add: TableData[]; drop: TableData[] } =\n newChangeTableData();\n\nconst resetChangeTableData = () => {\n changeTableData = newChangeTableData();\n};\n\nfunction add(item: ColumnType, options?: { dropMode?: DropMode }): ChangeItem;\nfunction add(emptyObject: EmptyObject): EmptyObject;\nfunction add(\n items: Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n): Record<string, ChangeItem>;\nfunction add(\n item: ColumnType | EmptyObject | Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n): ChangeItem | EmptyObject | Record<string, ChangeItem> {\n if (item instanceof ColumnType) {\n return ['add', item, options];\n } else if (item === emptyObject) {\n changeTableData.add.push(getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, ChangeItem> = {};\n for (const key in item) {\n result[key] = ['add', (item as Record<string, ColumnType>)[key], options];\n }\n return result;\n }\n}\n\nconst drop = ((item, options) => {\n if (item instanceof ColumnType) {\n return ['drop', item, options];\n } else if (item === emptyObject) {\n changeTableData.drop.push(getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, ChangeItem> = {};\n for (const key in item) {\n result[key] = [\n 'drop',\n (item as Record<string, ColumnType>)[key],\n options,\n ];\n }\n return result;\n }\n}) as typeof add;\n\ntype ChangeOptions = {\n usingUp?: RawExpression;\n usingDown?: RawExpression;\n};\n\ntype ChangeArg =\n | ColumnType\n | ['default', unknown | RawExpression]\n | ['nullable', boolean]\n | ['comment', string | null]\n | ['compression', string]\n | ['foreignKey', ForeignKey<string, string[]>]\n | ['index', Omit<SingleColumnIndexOptions, 'column'>];\n\ntype TableChangeMethods = typeof tableChangeMethods;\nconst tableChangeMethods = {\n raw: raw,\n add,\n drop,\n change(from: ChangeArg, to: ChangeArg, options?: ChangeOptions): ChangeItem {\n return ['change', from, to, options];\n },\n default(value: unknown | RawExpression): ChangeArg {\n return ['default', value];\n },\n nullable(): ChangeArg {\n return ['nullable', true];\n },\n nonNullable(): ChangeArg {\n return ['nullable', false];\n },\n comment(name: string | null): ChangeArg {\n return ['comment', name];\n },\n rename(name: string): ChangeItem {\n return ['rename', name];\n },\n};\n\nexport type ChangeItem =\n | [\n action: 'add' | 'drop',\n item: ColumnType,\n options?: { dropMode?: DropMode },\n ]\n | [action: 'change', from: ChangeArg, to: ChangeArg, options?: ChangeOptions]\n | ['rename', string];\n\nexport type TableChanger = ColumnTypes & TableChangeMethods;\n\nexport type TableChangeData = Record<string, ChangeItem | EmptyObject>;\n\ntype ChangeTableState = {\n migration: Migration;\n up: boolean;\n tableName: string;\n alterTable: string[];\n values: unknown[];\n indexes: ColumnIndex[];\n dropIndexes: ColumnIndex[];\n comments: ColumnComment[];\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 state: ChangeTableState = {\n migration,\n up,\n tableName,\n alterTable: [],\n values: [],\n indexes: [],\n dropIndexes: [],\n comments: [],\n };\n\n if (options.comment !== undefined) {\n await changeActions.tableComment(state, tableName, options.comment);\n }\n\n for (const key in changeData) {\n const result = changeData[key];\n if (Array.isArray(result)) {\n const [action] = result;\n if (action === 'change') {\n const [, from, to, options] = result;\n changeActions.change(state, up, key, from, to, options);\n } else if (action === 'rename') {\n const [, name] = result;\n changeActions.rename(state, up, key, name);\n } else if (action) {\n const [action, item, options] = result;\n changeActions[\n action as Exclude<\n keyof typeof changeActions,\n 'change' | 'rename' | 'tableComment'\n >\n ](state, up, key, item, options);\n }\n }\n }\n\n changeTableData[up ? 'drop' : 'add'].forEach((tableData) => {\n handleTableData(state, false, tableName, tableData);\n });\n\n changeTableData[up ? 'add' : 'drop'].forEach((tableData) => {\n handleTableData(state, true, tableName, tableData);\n });\n\n if (state.alterTable.length) {\n await migration.query(\n `ALTER TABLE ${quoteTable(tableName)}` +\n `\\n ${state.alterTable.join(',\\n ')}`,\n );\n }\n\n await migrateIndexes(state, state.dropIndexes, false);\n await migrateIndexes(state, state.indexes, true);\n await migrateComments(state, state.comments);\n};\n\nconst changeActions = {\n tableComment(\n { migration, up }: ChangeTableState,\n tableName: string,\n comment: Exclude<ChangeTableOptions['comment'], undefined>,\n ) {\n let value;\n if (up) {\n value = Array.isArray(comment) ? comment[1] : comment;\n } else {\n value = Array.isArray(comment) ? comment[0] : null;\n }\n return migration.query(\n `COMMENT ON TABLE ${quoteTable(tableName)} IS ${quote(value)}`,\n );\n },\n\n add(\n state: ChangeTableState,\n up: boolean,\n key: string,\n item: ColumnType,\n options?: { dropMode?: DropMode },\n ) {\n addColumnIndex(state[up ? 'indexes' : 'dropIndexes'], key, item);\n\n if (up) {\n addColumnComment(state.comments, key, item);\n }\n\n if (up) {\n state.alterTable.push(`ADD COLUMN ${columnToSql(key, item, state)}`);\n } else {\n state.alterTable.push(\n `DROP COLUMN \"${key}\"${\n options?.dropMode ? ` ${options.dropMode}` : ''\n }`,\n );\n }\n },\n\n drop(\n state: ChangeTableState,\n up: boolean,\n key: string,\n item: ColumnType,\n options?: { dropMode?: DropMode },\n ) {\n this.add(state, !up, key, item, options);\n },\n\n change(\n state: ChangeTableState,\n up: boolean,\n key: string,\n first: ChangeArg,\n second: ChangeArg,\n options?: ChangeOptions,\n ) {\n const [fromItem, toItem] = up ? [first, second] : [second, first];\n\n const from = getChangeProperties(fromItem);\n const to = getChangeProperties(toItem);\n\n if (from.type !== to.type || from.collate !== to.collate) {\n const using = up ? options?.usingUp : options?.usingDown;\n state.alterTable.push(\n `ALTER COLUMN \"${key}\" TYPE ${to.type}${\n to.collate ? ` COLLATE ${quote(to.collate)}` : ''\n }${using ? ` USING ${getRaw(using, state.values)}` : ''}`,\n );\n }\n\n if (from.default !== to.default) {\n const value = getRawOrValue(to.default, state.values);\n const expr =\n value === undefined ? `DROP DEFAULT` : `SET DEFAULT ${value}`;\n state.alterTable.push(`ALTER COLUMN \"${key}\" ${expr}`);\n }\n\n if (from.nullable !== to.nullable) {\n state.alterTable.push(\n `ALTER COLUMN \"${key}\" ${to.nullable ? 'DROP' : 'SET'} NOT NULL`,\n );\n }\n\n if (from.compression !== to.compression) {\n state.alterTable.push(\n `ALTER COLUMN \"${key}\" SET COMPRESSION ${to.compression || 'DEFAULT'}`,\n );\n }\n\n const fromFkey = from.foreignKey;\n const toFkey = to.foreignKey;\n if (fromFkey || toFkey) {\n if ((fromFkey && 'fn' in fromFkey) || (toFkey && 'fn' in toFkey)) {\n throw new Error('Callback in foreignKey is not allowed in migration');\n }\n\n if (checkIfForeignKeysAreDifferent(fromFkey, toFkey)) {\n if (fromFkey) {\n const data = newTableData();\n data.foreignKeys.push({\n columns: [key],\n fnOrTable: fromFkey.table,\n foreignColumns: fromFkey.columns,\n options: fromFkey,\n });\n changeTableData[up ? 'drop' : 'add'].push(data);\n }\n\n if (toFkey) {\n const data = newTableData();\n data.foreignKeys.push({\n columns: [key],\n fnOrTable: toFkey.table,\n foreignColumns: toFkey.columns,\n options: toFkey,\n });\n changeTableData[up ? 'add' : 'drop'].push(data);\n }\n }\n }\n\n const fromIndex = from.index;\n const toIndex = to.index;\n if (\n (fromIndex || toIndex) &&\n checkIfIndexesAreDifferent(fromIndex, toIndex)\n ) {\n if (fromIndex) {\n const data = newTableData();\n data.indexes.push({\n columns: [\n {\n column: key,\n ...fromIndex,\n },\n ],\n options: fromIndex,\n });\n changeTableData[up ? 'drop' : 'add'].push(data);\n }\n\n if (toIndex) {\n const data = newTableData();\n data.indexes.push({\n columns: [\n {\n column: key,\n ...toIndex,\n },\n ],\n options: toIndex,\n });\n changeTableData[up ? 'add' : 'drop'].push(data);\n }\n }\n\n if (from.comment !== to.comment) {\n state.comments.push({ column: key, comment: to.comment || null });\n }\n },\n\n rename(state: ChangeTableState, up: boolean, key: string, name: string) {\n const [from, to] = up ? [key, name] : [name, key];\n state.alterTable.push(`RENAME COLUMN \"${from}\" TO \"${to}\"`);\n },\n};\n\nconst checkIfForeignKeysAreDifferent = (\n from?: ForeignKey<string, string[]> & { table: string },\n to?: ForeignKey<string, string[]> & { table: string },\n) => {\n return (\n !from ||\n !to ||\n from.name !== to.name ||\n from.match !== to.match ||\n from.onUpdate !== to.onUpdate ||\n from.onDelete !== to.onDelete ||\n from.dropMode !== to.dropMode ||\n from.table !== to.table ||\n from.columns.join(',') !== to.columns.join(',')\n );\n};\n\nconst checkIfIndexesAreDifferent = (\n from?: Omit<SingleColumnIndexOptions, 'column'>,\n to?: Omit<SingleColumnIndexOptions, 'column'>,\n) => {\n return (\n !from ||\n !to ||\n from.expression !== to.expression ||\n from.collate !== to.collate ||\n from.operator !== to.operator ||\n from.order !== to.order ||\n from.name !== to.name ||\n from.unique !== to.unique ||\n from.using !== to.using ||\n from.include !== to.include ||\n (Array.isArray(from.include) &&\n Array.isArray(to.include) &&\n from.include.join(',') !== to.include.join(',')) ||\n from.with !== to.with ||\n from.tablespace !== to.tablespace ||\n from.where !== to.where ||\n from.dropMode !== to.dropMode\n );\n};\n\ntype ChangeProperties = {\n type?: string;\n collate?: string;\n default?: unknown | RawExpression;\n nullable?: boolean;\n comment?: string | null;\n compression?: string;\n foreignKey?: ForeignKey<string, string[]>;\n index?: Omit<SingleColumnIndexOptions, 'column'>;\n};\n\nconst getChangeProperties = (item: ChangeArg): ChangeProperties => {\n if (item instanceof ColumnType) {\n return {\n type: item.toSQL(),\n collate: item.data.collate,\n default: item.data.default,\n nullable: item.isNullable,\n comment: item.data.comment,\n compression: item.data.compression,\n foreignKey: item.data.foreignKey,\n index: item.data.index,\n };\n } else {\n return {\n type: undefined,\n collate: undefined,\n default: item[0] === 'default' ? item[1] : undefined,\n nullable: item[0] === 'nullable' ? item[1] : undefined,\n comment: item[0] === 'comment' ? item[1] : undefined,\n compression: item[0] === 'compression' ? item[1] : undefined,\n foreignKey: item[0] === 'foreignKey' ? item[1] : undefined,\n index: item[0] === 'index' ? item[1] : undefined,\n };\n }\n};\n\nconst handleTableData = (\n state: ChangeTableState,\n up: boolean,\n tableName: string,\n tableData: TableData,\n) => {\n if (tableData.primaryKey) {\n if (up) {\n state.alterTable.push(`ADD ${primaryKeyToSql(tableData.primaryKey)}`);\n } else {\n const name = tableData.primaryKey.options?.name || `${tableName}_pkey`;\n state.alterTable.push(`DROP CONSTRAINT \"${name}\"`);\n }\n }\n\n if (tableData.indexes.length) {\n state[up ? 'indexes' : 'dropIndexes'].push(...tableData.indexes);\n }\n\n if (tableData.foreignKeys.length) {\n tableData.foreignKeys.forEach((foreignKey) => {\n const action = up ? 'ADD' : 'DROP';\n state.alterTable.push(\n `\\n ${action} ${constraintToSql(state.tableName, up, foreignKey)}`,\n );\n });\n }\n};\n\nconst getRawOrValue = (item: unknown | RawExpression, values: unknown[]) => {\n return typeof item === 'object' && item && isRaw(item)\n ? getRaw(item, values)\n : quote(item);\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 QueryLogOptions,\n QueryResult,\n QueryResultRow,\n Sql,\n TransactionAdapter,\n TypeParsers,\n raw,\n} from 'pqb';\nimport { createJoinTable, createTable } from './createTable';\nimport { changeTable, TableChangeData, TableChanger } from './changeTable';\nimport { quoteTable } from '../common';\n\nexport type DropMode = 'CASCADE' | 'RESTRICT';\n\nexport type TableOptions = { dropMode?: DropMode; comment?: string };\nexport type ColumnsShapeCallback = (\n t: ColumnTypes & { raw: typeof raw },\n) => ColumnsShape;\n\nexport type ChangeTableOptions = { comment?: string | [string, string] | null };\nexport type ChangeTableCallback = (t: TableChanger) => TableChangeData;\n\nexport type ColumnIndex = {\n columns: IndexColumnOptions[];\n options: IndexOptions;\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 options: QueryLogOptions,\n ) {\n super(tx.pool, 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 [table, newName] = this.up ? [from, to] : [to, from];\n await this.query(`ALTER TABLE ${quoteTable(table)} RENAME TO \"${newName}\"`);\n }\n\n addColumn(\n tableName: string,\n columnName: string,\n fn: (t: ColumnTypes) => ColumnType,\n ) {\n return addColumn(this, this.up, tableName, columnName, fn);\n }\n\n dropColumn(\n tableName: string,\n columnName: string,\n fn: (t: ColumnTypes) => 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, {\n ...options,\n checkExists: options.ifNotExists,\n });\n }\n\n dropExtension(\n name: string,\n options: { ifExists?: boolean; cascade?: boolean } = {},\n ) {\n return createExtension(this, !this.up, name, {\n ...options,\n checkExists: options.ifExists,\n });\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: ColumnTypes) => 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 = (\n migration: Migration,\n up: boolean,\n schemaName: string,\n) => {\n if (up) {\n return migration.query(`CREATE SCHEMA \"${schemaName}\"`);\n } else {\n return migration.query(`DROP SCHEMA \"${schemaName}\"`);\n }\n};\n\nconst createExtension = (\n migration: Migration,\n up: boolean,\n name: string,\n options: ExtensionOptions & {\n checkExists?: boolean;\n },\n) => {\n if (!up) {\n return migration.query(\n `DROP EXTENSION${options.checkExists ? ' IF EXISTS' : ''} \"${name}\"${\n options.cascade ? ' CASCADE' : ''\n }`,\n );\n }\n\n return migration.query(\n `CREATE EXTENSION${options.checkExists ? ' IF NOT EXISTS' : ''} \"${name}\"${\n options.schema ? ` SCHEMA \"${options.schema}\"` : ''\n }${options.version ? ` VERSION '${options.version}'` : ''}${\n options.cascade ? ' CASCADE' : ''\n }`,\n );\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 MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\n args: string[] = [],\n) => migrateOrRollback(options, config, args, true);\n\nexport const rollback = (\n options: MaybeArray<AdapterOptions>,\n config: MigrationConfig,\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 MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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 MigrationConfig,\n} from '../common';\nimport { mkdir, writeFile } from 'fs/promises';\nimport path from 'path';\n\nexport const generate = async (config: MigrationConfig, 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, MigrationConfig } from './common';\nimport { generate } from './commands/generate';\n\nexport const rakeDb = async (\n options: MaybeArray<AdapterOptions>,\n partialConfig: Partial<MigrationConfig> = {},\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","options","action","db","method"],"mappings":"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"}
package/dist/index.js CHANGED
@@ -283,12 +283,12 @@ const getForeignKeyTable = (fnOrTable) => {
283
283
  return new klass().table;
284
284
  };
285
285
  const constraintToSql = (tableName, up, foreignKey) => {
286
- const table = getForeignKeyTable(foreignKey.fnOrTable);
287
- const constraintName = foreignKey.options.name || joinWords(tableName, "to", table);
286
+ const constraintName = foreignKey.options.name || `${tableName}_${foreignKey.columns.join("_")}_fkey`;
288
287
  if (!up) {
289
288
  const { dropMode } = foreignKey.options;
290
289
  return `CONSTRAINT "${constraintName}"${dropMode ? ` ${dropMode}` : ""}`;
291
290
  }
291
+ const table = getForeignKeyTable(foreignKey.fnOrTable);
292
292
  return `CONSTRAINT "${constraintName}" FOREIGN KEY (${joinColumns(
293
293
  foreignKey.columns
294
294
  )}) ${referencesToSql(table, foreignKey.foreignColumns, foreignKey.options)}`;
@@ -645,11 +645,11 @@ const changeTable = async (migration, up, tableName, options, fn) => {
645
645
  }
646
646
  }
647
647
  }
648
- changeTableData.add.forEach((tableData) => {
649
- handleTableData(state, up, tableName, tableData);
648
+ changeTableData[up ? "drop" : "add"].forEach((tableData) => {
649
+ handleTableData(state, false, tableName, tableData);
650
650
  });
651
- changeTableData.drop.forEach((tableData) => {
652
- handleTableData(state, !up, tableName, tableData);
651
+ changeTableData[up ? "add" : "drop"].forEach((tableData) => {
652
+ handleTableData(state, true, tableName, tableData);
653
653
  });
654
654
  if (state.alterTable.length) {
655
655
  await migration.query(
@@ -657,10 +657,8 @@ const changeTable = async (migration, up, tableName, options, fn) => {
657
657
  ${state.alterTable.join(",\n ")}`
658
658
  );
659
659
  }
660
- const createIndexes = up ? state.indexes : state.dropIndexes;
661
- const dropIndexes = up ? state.dropIndexes : state.indexes;
662
- await migrateIndexes(state, createIndexes, up);
663
- await migrateIndexes(state, dropIndexes, !up);
660
+ await migrateIndexes(state, state.dropIndexes, false);
661
+ await migrateIndexes(state, state.indexes, true);
664
662
  await migrateComments(state, state.comments);
665
663
  };
666
664
  const changeActions = {
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/migration.ts","../src/commands/migrateOrRollback.ts","../src/commands/createOrDrop.ts","../src/commands/generate.ts","../src/rakeDb.ts"],"sourcesContent":["import { Adapter, AdapterOptions, QueryLogOptions } from 'pqb';\nimport Enquirer from 'enquirer';\nimport path from 'path';\nimport { readdir } from 'fs/promises';\n\nexport type MigrationConfig = {\n migrationsPath: string;\n migrationsTable: string;\n requireTs(path: string): void;\n} & QueryLogOptions;\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<MigrationConfig>,\n) => {\n return { ...migrationConfigDefaults, ...config };\n};\n\nexport const getDatabaseAndUserFromOptions = (\n options: AdapterOptions,\n): { database: string; user: string } => {\n if (options.connectionString) {\n const url = new URL(options.connectionString);\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.connectionString) {\n const url = new URL(options.connectionString);\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, connectionString: 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: MigrationConfig,\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: MigrationConfig,\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 ForeignKeyModel,\n ForeignKeyOptions,\n getRaw,\n isRaw,\n quote,\n TableData,\n toArray,\n} from 'pqb';\nimport { ColumnComment, ColumnIndex, Migration } from './migration';\nimport { joinColumns, joinWords, quoteTable } from '../common';\n\nexport const columnToSql = (\n key: string,\n item: ColumnType,\n { values }: { values: unknown[] },\n) => {\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) {\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: ColumnIndex[],\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: (() => ForeignKeyModel) | 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 table = getForeignKeyTable(foreignKey.fnOrTable);\n const constraintName =\n foreignKey.options.name || joinWords(tableName, 'to', table);\n\n if (!up) {\n const { dropMode } = foreignKey.options;\n return `CONSTRAINT \"${constraintName}\"${dropMode ? ` ${dropMode}` : ''}`;\n }\n\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 migrateIndexes = async (\n state: {\n migration: Migration;\n tableName: string;\n },\n indexes: ColumnIndex[],\n up: boolean,\n) => {\n for (const item of indexes) {\n await migrateIndex(state, up, item);\n }\n};\n\nexport const migrateIndex = (\n state: { migration: Migration; tableName: string },\n up: boolean,\n { columns, options }: ColumnIndex,\n) => {\n const indexName =\n options.name ||\n joinWords(state.tableName, ...columns.map(({ column }) => column), 'index');\n\n if (!up) {\n return state.migration.query(\n `DROP INDEX \"${indexName}\"${\n options.dropMode ? ` ${options.dropMode}` : ''\n }`,\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(state.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}\"${column.expression ? `(${column.expression})` : ''}`,\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 state.migration.query({ text: sql.join(' '), values });\n};\n\nexport const migrateComments = async (\n state: { migration: Migration; tableName: string },\n comments: ColumnComment[],\n) => {\n for (const { column, comment } of comments) {\n await state.migration.query(\n `COMMENT ON COLUMN ${quoteTable(state.tableName)}.\"${column}\" IS ${quote(\n comment,\n )}`,\n );\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 ColumnType,\n columnTypes,\n getColumnTypes,\n getTableData,\n Operators,\n quote,\n raw,\n} from 'pqb';\nimport {\n TableOptions,\n ColumnsShapeCallback,\n Migration,\n ColumnIndex,\n ColumnComment,\n JoinTableOptions,\n} from './migration';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n constraintToSql,\n getPrimaryKeysOfTable,\n migrateComments,\n migrateIndexes,\n primaryKeyToSql,\n} from './migrationUtils';\nimport { joinWords, quoteTable } from '../common';\nimport { singular } from 'pluralize';\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(migration, up, tableName, options, () => ({}));\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\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\n if (!up) {\n const { dropMode } = options;\n await migration.query(\n `DROP TABLE ${quoteTable(tableName)}${dropMode ? ` ${dropMode}` : ''}`,\n );\n return;\n }\n\n const lines: string[] = [];\n\n const state: {\n migration: Migration;\n tableName: string;\n values: unknown[];\n indexes: ColumnIndex[];\n comments: ColumnComment[];\n } = {\n migration,\n tableName,\n values: [],\n indexes: [],\n comments: [],\n };\n\n for (const key in shape) {\n const item = shape[key];\n addColumnIndex(state.indexes, key, item);\n addColumnComment(state.comments, key, item);\n lines.push(`\\n ${columnToSql(key, item, state)}`);\n }\n\n const tableData = getTableData();\n if (tableData.primaryKey) {\n lines.push(`\\n ${primaryKeyToSql(tableData.primaryKey)}`);\n }\n\n tableData.foreignKeys.forEach((foreignKey) => {\n lines.push(`\\n ${constraintToSql(state.tableName, up, foreignKey)}`);\n });\n\n await migration.query({\n text: `CREATE TABLE ${quoteTable(tableName)} (${lines.join(',')}\\n)`,\n values: state.values,\n });\n\n state.indexes.push(...tableData.indexes);\n\n await migrateIndexes(state, state.indexes, up);\n await migrateComments(state, state.comments);\n\n if (options.comment) {\n await migration.query(\n `COMMENT ON TABLE ${quoteTable(tableName)} IS ${quote(options.comment)}`,\n );\n }\n};\n","import {\n ColumnTypes,\n ColumnType,\n columnTypes,\n resetTableData,\n quote,\n getTableData,\n EmptyObject,\n emptyObject,\n TableData,\n RawExpression,\n getRaw,\n isRaw,\n raw,\n ForeignKey,\n newTableData,\n SingleColumnIndexOptions,\n} from 'pqb';\nimport {\n ChangeTableCallback,\n ChangeTableOptions,\n ColumnComment,\n ColumnIndex,\n DropMode,\n Migration,\n} from './migration';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n constraintToSql,\n migrateComments,\n migrateIndexes,\n primaryKeyToSql,\n} from './migrationUtils';\nimport { quoteTable } from '../common';\n\nconst newChangeTableData = () => ({\n add: [],\n drop: [],\n});\n\nlet changeTableData: { add: TableData[]; drop: TableData[] } =\n newChangeTableData();\n\nconst resetChangeTableData = () => {\n changeTableData = newChangeTableData();\n};\n\nfunction add(item: ColumnType, options?: { dropMode?: DropMode }): ChangeItem;\nfunction add(emptyObject: EmptyObject): EmptyObject;\nfunction add(\n items: Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n): Record<string, ChangeItem>;\nfunction add(\n item: ColumnType | EmptyObject | Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n): ChangeItem | EmptyObject | Record<string, ChangeItem> {\n if (item instanceof ColumnType) {\n return ['add', item, options];\n } else if (item === emptyObject) {\n changeTableData.add.push(getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, ChangeItem> = {};\n for (const key in item) {\n result[key] = ['add', (item as Record<string, ColumnType>)[key], options];\n }\n return result;\n }\n}\n\nconst drop = ((item, options) => {\n if (item instanceof ColumnType) {\n return ['drop', item, options];\n } else if (item === emptyObject) {\n changeTableData.drop.push(getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, ChangeItem> = {};\n for (const key in item) {\n result[key] = [\n 'drop',\n (item as Record<string, ColumnType>)[key],\n options,\n ];\n }\n return result;\n }\n}) as typeof add;\n\ntype ChangeOptions = {\n usingUp?: RawExpression;\n usingDown?: RawExpression;\n};\n\ntype ChangeArg =\n | ColumnType\n | ['default', unknown | RawExpression]\n | ['nullable', boolean]\n | ['comment', string | null]\n | ['compression', string]\n | ['foreignKey', ForeignKey<string, string[]>]\n | ['index', Omit<SingleColumnIndexOptions, 'column'>];\n\ntype TableChangeMethods = typeof tableChangeMethods;\nconst tableChangeMethods = {\n raw: raw,\n add,\n drop,\n change(from: ChangeArg, to: ChangeArg, options?: ChangeOptions): ChangeItem {\n return ['change', from, to, options];\n },\n default(value: unknown | RawExpression): ChangeArg {\n return ['default', value];\n },\n nullable(): ChangeArg {\n return ['nullable', true];\n },\n nonNullable(): ChangeArg {\n return ['nullable', false];\n },\n comment(name: string | null): ChangeArg {\n return ['comment', name];\n },\n rename(name: string): ChangeItem {\n return ['rename', name];\n },\n};\n\nexport type ChangeItem =\n | [\n action: 'add' | 'drop',\n item: ColumnType,\n options?: { dropMode?: DropMode },\n ]\n | [action: 'change', from: ChangeArg, to: ChangeArg, options?: ChangeOptions]\n | ['rename', string];\n\nexport type TableChanger = ColumnTypes & TableChangeMethods;\n\nexport type TableChangeData = Record<string, ChangeItem | EmptyObject>;\n\ntype ChangeTableState = {\n migration: Migration;\n up: boolean;\n tableName: string;\n alterTable: string[];\n values: unknown[];\n indexes: ColumnIndex[];\n dropIndexes: ColumnIndex[];\n comments: ColumnComment[];\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 state: ChangeTableState = {\n migration,\n up,\n tableName,\n alterTable: [],\n values: [],\n indexes: [],\n dropIndexes: [],\n comments: [],\n };\n\n if (options.comment !== undefined) {\n await changeActions.tableComment(state, tableName, options.comment);\n }\n\n for (const key in changeData) {\n const result = changeData[key];\n if (Array.isArray(result)) {\n const [action] = result;\n if (action === 'change') {\n const [, from, to, options] = result;\n changeActions.change(state, up, key, from, to, options);\n } else if (action === 'rename') {\n const [, name] = result;\n changeActions.rename(state, up, key, name);\n } else if (action) {\n const [action, item, options] = result;\n changeActions[\n action as Exclude<\n keyof typeof changeActions,\n 'change' | 'rename' | 'tableComment'\n >\n ](state, up, key, item, options);\n }\n }\n }\n\n changeTableData.add.forEach((tableData) => {\n handleTableData(state, up, tableName, tableData);\n });\n\n changeTableData.drop.forEach((tableData) => {\n handleTableData(state, !up, tableName, tableData);\n });\n\n if (state.alterTable.length) {\n await migration.query(\n `ALTER TABLE ${quoteTable(tableName)}` +\n `\\n ${state.alterTable.join(',\\n ')}`,\n );\n }\n\n const createIndexes = up ? state.indexes : state.dropIndexes;\n const dropIndexes = up ? state.dropIndexes : state.indexes;\n await migrateIndexes(state, createIndexes, up);\n await migrateIndexes(state, dropIndexes, !up);\n await migrateComments(state, state.comments);\n};\n\nconst changeActions = {\n tableComment(\n { migration, up }: ChangeTableState,\n tableName: string,\n comment: Exclude<ChangeTableOptions['comment'], undefined>,\n ) {\n let value;\n if (up) {\n value = Array.isArray(comment) ? comment[1] : comment;\n } else {\n value = Array.isArray(comment) ? comment[0] : null;\n }\n return migration.query(\n `COMMENT ON TABLE ${quoteTable(tableName)} IS ${quote(value)}`,\n );\n },\n\n add(\n state: ChangeTableState,\n up: boolean,\n key: string,\n item: ColumnType,\n options?: { dropMode?: DropMode },\n ) {\n addColumnIndex(state[up ? 'indexes' : 'dropIndexes'], key, item);\n\n if (up) {\n addColumnComment(state.comments, key, item);\n }\n\n if (up) {\n state.alterTable.push(`ADD COLUMN ${columnToSql(key, item, state)}`);\n } else {\n state.alterTable.push(\n `DROP COLUMN \"${key}\"${\n options?.dropMode ? ` ${options.dropMode}` : ''\n }`,\n );\n }\n },\n\n drop(\n state: ChangeTableState,\n up: boolean,\n key: string,\n item: ColumnType,\n options?: { dropMode?: DropMode },\n ) {\n this.add(state, !up, key, item, options);\n },\n\n change(\n state: ChangeTableState,\n up: boolean,\n key: string,\n first: ChangeArg,\n second: ChangeArg,\n options?: ChangeOptions,\n ) {\n const [fromItem, toItem] = up ? [first, second] : [second, first];\n\n const from = getChangeProperties(fromItem);\n const to = getChangeProperties(toItem);\n\n if (from.type !== to.type || from.collate !== to.collate) {\n const using = up ? options?.usingUp : options?.usingDown;\n state.alterTable.push(\n `ALTER COLUMN \"${key}\" TYPE ${to.type}${\n to.collate ? ` COLLATE ${quote(to.collate)}` : ''\n }${using ? ` USING ${getRaw(using, state.values)}` : ''}`,\n );\n }\n\n if (from.default !== to.default) {\n const value = getRawOrValue(to.default, state.values);\n const expr =\n value === undefined ? `DROP DEFAULT` : `SET DEFAULT ${value}`;\n state.alterTable.push(`ALTER COLUMN \"${key}\" ${expr}`);\n }\n\n if (from.nullable !== to.nullable) {\n state.alterTable.push(\n `ALTER COLUMN \"${key}\" ${to.nullable ? 'DROP' : 'SET'} NOT NULL`,\n );\n }\n\n if (from.compression !== to.compression) {\n state.alterTable.push(\n `ALTER COLUMN \"${key}\" SET COMPRESSION ${to.compression || 'DEFAULT'}`,\n );\n }\n\n const fromFkey = from.foreignKey;\n const toFkey = to.foreignKey;\n if (fromFkey || toFkey) {\n if ((fromFkey && 'fn' in fromFkey) || (toFkey && 'fn' in toFkey)) {\n throw new Error('Callback in foreignKey is not allowed in migration');\n }\n\n if (checkIfForeignKeysAreDifferent(fromFkey, toFkey)) {\n if (fromFkey) {\n const data = newTableData();\n data.foreignKeys.push({\n columns: [key],\n fnOrTable: fromFkey.table,\n foreignColumns: fromFkey.columns,\n options: fromFkey,\n });\n changeTableData[up ? 'drop' : 'add'].push(data);\n }\n\n if (toFkey) {\n const data = newTableData();\n data.foreignKeys.push({\n columns: [key],\n fnOrTable: toFkey.table,\n foreignColumns: toFkey.columns,\n options: toFkey,\n });\n changeTableData[up ? 'add' : 'drop'].push(data);\n }\n }\n }\n\n const fromIndex = from.index;\n const toIndex = to.index;\n if (\n (fromIndex || toIndex) &&\n checkIfIndexesAreDifferent(fromIndex, toIndex)\n ) {\n if (fromIndex) {\n const data = newTableData();\n data.indexes.push({\n columns: [\n {\n column: key,\n ...fromIndex,\n },\n ],\n options: fromIndex,\n });\n changeTableData[up ? 'drop' : 'add'].push(data);\n }\n\n if (toIndex) {\n const data = newTableData();\n data.indexes.push({\n columns: [\n {\n column: key,\n ...toIndex,\n },\n ],\n options: toIndex,\n });\n changeTableData[up ? 'add' : 'drop'].push(data);\n }\n }\n\n if (from.comment !== to.comment) {\n state.comments.push({ column: key, comment: to.comment || null });\n }\n },\n\n rename(state: ChangeTableState, up: boolean, key: string, name: string) {\n const [from, to] = up ? [key, name] : [name, key];\n state.alterTable.push(`RENAME COLUMN \"${from}\" TO \"${to}\"`);\n },\n};\n\nconst checkIfForeignKeysAreDifferent = (\n from?: ForeignKey<string, string[]> & { table: string },\n to?: ForeignKey<string, string[]> & { table: string },\n) => {\n return (\n !from ||\n !to ||\n from.name !== to.name ||\n from.match !== to.match ||\n from.onUpdate !== to.onUpdate ||\n from.onDelete !== to.onDelete ||\n from.dropMode !== to.dropMode ||\n from.table !== to.table ||\n from.columns.join(',') !== to.columns.join(',')\n );\n};\n\nconst checkIfIndexesAreDifferent = (\n from?: Omit<SingleColumnIndexOptions, 'column'>,\n to?: Omit<SingleColumnIndexOptions, 'column'>,\n) => {\n return (\n !from ||\n !to ||\n from.expression !== to.expression ||\n from.collate !== to.collate ||\n from.operator !== to.operator ||\n from.order !== to.order ||\n from.name !== to.name ||\n from.unique !== to.unique ||\n from.using !== to.using ||\n from.include !== to.include ||\n (Array.isArray(from.include) &&\n Array.isArray(to.include) &&\n from.include.join(',') !== to.include.join(',')) ||\n from.with !== to.with ||\n from.tablespace !== to.tablespace ||\n from.where !== to.where ||\n from.dropMode !== to.dropMode\n );\n};\n\ntype ChangeProperties = {\n type?: string;\n collate?: string;\n default?: unknown | RawExpression;\n nullable?: boolean;\n comment?: string | null;\n compression?: string;\n foreignKey?: ForeignKey<string, string[]>;\n index?: Omit<SingleColumnIndexOptions, 'column'>;\n};\n\nconst getChangeProperties = (item: ChangeArg): ChangeProperties => {\n if (item instanceof ColumnType) {\n return {\n type: item.toSQL(),\n collate: item.data.collate,\n default: item.data.default,\n nullable: item.isNullable,\n comment: item.data.comment,\n compression: item.data.compression,\n foreignKey: item.data.foreignKey,\n index: item.data.index,\n };\n } else {\n return {\n type: undefined,\n collate: undefined,\n default: item[0] === 'default' ? item[1] : undefined,\n nullable: item[0] === 'nullable' ? item[1] : undefined,\n comment: item[0] === 'comment' ? item[1] : undefined,\n compression: item[0] === 'compression' ? item[1] : undefined,\n foreignKey: item[0] === 'foreignKey' ? item[1] : undefined,\n index: item[0] === 'index' ? item[1] : undefined,\n };\n }\n};\n\nconst handleTableData = (\n state: ChangeTableState,\n up: boolean,\n tableName: string,\n tableData: TableData,\n) => {\n if (tableData.primaryKey) {\n if (up) {\n state.alterTable.push(`ADD ${primaryKeyToSql(tableData.primaryKey)}`);\n } else {\n const name = tableData.primaryKey.options?.name || `${tableName}_pkey`;\n state.alterTable.push(`DROP CONSTRAINT \"${name}\"`);\n }\n }\n\n if (tableData.indexes.length) {\n state[up ? 'indexes' : 'dropIndexes'].push(...tableData.indexes);\n }\n\n if (tableData.foreignKeys.length) {\n tableData.foreignKeys.forEach((foreignKey) => {\n const action = up ? 'ADD' : 'DROP';\n state.alterTable.push(\n `\\n ${action} ${constraintToSql(state.tableName, up, foreignKey)}`,\n );\n });\n }\n};\n\nconst getRawOrValue = (item: unknown | RawExpression, values: unknown[]) => {\n return typeof item === 'object' && item && isRaw(item)\n ? getRaw(item, values)\n : quote(item);\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 QueryLogOptions,\n QueryResult,\n QueryResultRow,\n Sql,\n TransactionAdapter,\n TypeParsers,\n raw,\n} from 'pqb';\nimport { createJoinTable, createTable } from './createTable';\nimport { changeTable, TableChangeData, TableChanger } from './changeTable';\nimport { quoteTable } from '../common';\n\nexport type DropMode = 'CASCADE' | 'RESTRICT';\n\nexport type TableOptions = { dropMode?: DropMode; comment?: string };\nexport type ColumnsShapeCallback = (\n t: ColumnTypes & { raw: typeof raw },\n) => ColumnsShape;\n\nexport type ChangeTableOptions = { comment?: string | [string, string] | null };\nexport type ChangeTableCallback = (t: TableChanger) => TableChangeData;\n\nexport type ColumnIndex = {\n columns: IndexColumnOptions[];\n options: IndexOptions;\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 options: QueryLogOptions,\n ) {\n super(tx.pool, 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 [table, newName] = this.up ? [from, to] : [to, from];\n await this.query(`ALTER TABLE ${quoteTable(table)} RENAME TO \"${newName}\"`);\n }\n\n addColumn(\n tableName: string,\n columnName: string,\n fn: (t: ColumnTypes) => ColumnType,\n ) {\n return addColumn(this, this.up, tableName, columnName, fn);\n }\n\n dropColumn(\n tableName: string,\n columnName: string,\n fn: (t: ColumnTypes) => 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, {\n ...options,\n checkExists: options.ifNotExists,\n });\n }\n\n dropExtension(\n name: string,\n options: { ifExists?: boolean; cascade?: boolean } = {},\n ) {\n return createExtension(this, !this.up, name, {\n ...options,\n checkExists: options.ifExists,\n });\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: ColumnTypes) => 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 = (\n migration: Migration,\n up: boolean,\n schemaName: string,\n) => {\n if (up) {\n return migration.query(`CREATE SCHEMA \"${schemaName}\"`);\n } else {\n return migration.query(`DROP SCHEMA \"${schemaName}\"`);\n }\n};\n\nconst createExtension = (\n migration: Migration,\n up: boolean,\n name: string,\n options: ExtensionOptions & {\n checkExists?: boolean;\n },\n) => {\n if (!up) {\n return migration.query(\n `DROP EXTENSION${options.checkExists ? ' IF EXISTS' : ''} \"${name}\"${\n options.cascade ? ' CASCADE' : ''\n }`,\n );\n }\n\n return migration.query(\n `CREATE EXTENSION${options.checkExists ? ' IF NOT EXISTS' : ''} \"${name}\"${\n options.schema ? ` SCHEMA \"${options.schema}\"` : ''\n }${options.version ? ` VERSION '${options.version}'` : ''}${\n options.cascade ? ' CASCADE' : ''\n }`,\n );\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 MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\n args: string[] = [],\n) => migrateOrRollback(options, config, args, true);\n\nexport const rollback = (\n options: MaybeArray<AdapterOptions>,\n config: MigrationConfig,\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 MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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 MigrationConfig,\n} from '../common';\nimport { mkdir, writeFile } from 'fs/promises';\nimport path from 'path';\n\nexport const generate = async (config: MigrationConfig, 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, MigrationConfig } from './common';\nimport { generate } from './commands/generate';\n\nexport const rakeDb = async (\n options: MaybeArray<AdapterOptions>,\n partialConfig: Partial<MigrationConfig> = {},\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","ColumnType","Operators","singular","columnTypes","raw","getColumnTypes","getTableData","emptyObject","resetTableData","options","action","newTableData","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/migration.ts","../src/commands/migrateOrRollback.ts","../src/commands/createOrDrop.ts","../src/commands/generate.ts","../src/rakeDb.ts"],"sourcesContent":["import { Adapter, AdapterOptions, QueryLogOptions } from 'pqb';\nimport Enquirer from 'enquirer';\nimport path from 'path';\nimport { readdir } from 'fs/promises';\n\nexport type MigrationConfig = {\n migrationsPath: string;\n migrationsTable: string;\n requireTs(path: string): void;\n} & QueryLogOptions;\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<MigrationConfig>,\n) => {\n return { ...migrationConfigDefaults, ...config };\n};\n\nexport const getDatabaseAndUserFromOptions = (\n options: AdapterOptions,\n): { database: string; user: string } => {\n if (options.connectionString) {\n const url = new URL(options.connectionString);\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.connectionString) {\n const url = new URL(options.connectionString);\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, connectionString: 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: MigrationConfig,\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: MigrationConfig,\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 ForeignKeyModel,\n ForeignKeyOptions,\n getRaw,\n isRaw,\n quote,\n TableData,\n toArray,\n} from 'pqb';\nimport { ColumnComment, ColumnIndex, Migration } from './migration';\nimport { joinColumns, joinWords, quoteTable } from '../common';\n\nexport const columnToSql = (\n key: string,\n item: ColumnType,\n { values }: { values: unknown[] },\n) => {\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) {\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: ColumnIndex[],\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: (() => ForeignKeyModel) | 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 migrateIndexes = async (\n state: {\n migration: Migration;\n tableName: string;\n },\n indexes: ColumnIndex[],\n up: boolean,\n) => {\n for (const item of indexes) {\n await migrateIndex(state, up, item);\n }\n};\n\nexport const migrateIndex = (\n state: { migration: Migration; tableName: string },\n up: boolean,\n { columns, options }: ColumnIndex,\n) => {\n const indexName =\n options.name ||\n joinWords(state.tableName, ...columns.map(({ column }) => column), 'index');\n\n if (!up) {\n return state.migration.query(\n `DROP INDEX \"${indexName}\"${\n options.dropMode ? ` ${options.dropMode}` : ''\n }`,\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(state.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}\"${column.expression ? `(${column.expression})` : ''}`,\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 state.migration.query({ text: sql.join(' '), values });\n};\n\nexport const migrateComments = async (\n state: { migration: Migration; tableName: string },\n comments: ColumnComment[],\n) => {\n for (const { column, comment } of comments) {\n await state.migration.query(\n `COMMENT ON COLUMN ${quoteTable(state.tableName)}.\"${column}\" IS ${quote(\n comment,\n )}`,\n );\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 ColumnType,\n columnTypes,\n getColumnTypes,\n getTableData,\n Operators,\n quote,\n raw,\n} from 'pqb';\nimport {\n TableOptions,\n ColumnsShapeCallback,\n Migration,\n ColumnIndex,\n ColumnComment,\n JoinTableOptions,\n} from './migration';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n constraintToSql,\n getPrimaryKeysOfTable,\n migrateComments,\n migrateIndexes,\n primaryKeyToSql,\n} from './migrationUtils';\nimport { joinWords, quoteTable } from '../common';\nimport { singular } from 'pluralize';\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(migration, up, tableName, options, () => ({}));\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\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\n if (!up) {\n const { dropMode } = options;\n await migration.query(\n `DROP TABLE ${quoteTable(tableName)}${dropMode ? ` ${dropMode}` : ''}`,\n );\n return;\n }\n\n const lines: string[] = [];\n\n const state: {\n migration: Migration;\n tableName: string;\n values: unknown[];\n indexes: ColumnIndex[];\n comments: ColumnComment[];\n } = {\n migration,\n tableName,\n values: [],\n indexes: [],\n comments: [],\n };\n\n for (const key in shape) {\n const item = shape[key];\n addColumnIndex(state.indexes, key, item);\n addColumnComment(state.comments, key, item);\n lines.push(`\\n ${columnToSql(key, item, state)}`);\n }\n\n const tableData = getTableData();\n if (tableData.primaryKey) {\n lines.push(`\\n ${primaryKeyToSql(tableData.primaryKey)}`);\n }\n\n tableData.foreignKeys.forEach((foreignKey) => {\n lines.push(`\\n ${constraintToSql(state.tableName, up, foreignKey)}`);\n });\n\n await migration.query({\n text: `CREATE TABLE ${quoteTable(tableName)} (${lines.join(',')}\\n)`,\n values: state.values,\n });\n\n state.indexes.push(...tableData.indexes);\n\n await migrateIndexes(state, state.indexes, up);\n await migrateComments(state, state.comments);\n\n if (options.comment) {\n await migration.query(\n `COMMENT ON TABLE ${quoteTable(tableName)} IS ${quote(options.comment)}`,\n );\n }\n};\n","import {\n ColumnTypes,\n ColumnType,\n columnTypes,\n resetTableData,\n quote,\n getTableData,\n EmptyObject,\n emptyObject,\n TableData,\n RawExpression,\n getRaw,\n isRaw,\n raw,\n ForeignKey,\n newTableData,\n SingleColumnIndexOptions,\n} from 'pqb';\nimport {\n ChangeTableCallback,\n ChangeTableOptions,\n ColumnComment,\n ColumnIndex,\n DropMode,\n Migration,\n} from './migration';\nimport {\n addColumnComment,\n addColumnIndex,\n columnToSql,\n constraintToSql,\n migrateComments,\n migrateIndexes,\n primaryKeyToSql,\n} from './migrationUtils';\nimport { quoteTable } from '../common';\n\nconst newChangeTableData = () => ({\n add: [],\n drop: [],\n});\n\nlet changeTableData: { add: TableData[]; drop: TableData[] } =\n newChangeTableData();\n\nconst resetChangeTableData = () => {\n changeTableData = newChangeTableData();\n};\n\nfunction add(item: ColumnType, options?: { dropMode?: DropMode }): ChangeItem;\nfunction add(emptyObject: EmptyObject): EmptyObject;\nfunction add(\n items: Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n): Record<string, ChangeItem>;\nfunction add(\n item: ColumnType | EmptyObject | Record<string, ColumnType>,\n options?: { dropMode?: DropMode },\n): ChangeItem | EmptyObject | Record<string, ChangeItem> {\n if (item instanceof ColumnType) {\n return ['add', item, options];\n } else if (item === emptyObject) {\n changeTableData.add.push(getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, ChangeItem> = {};\n for (const key in item) {\n result[key] = ['add', (item as Record<string, ColumnType>)[key], options];\n }\n return result;\n }\n}\n\nconst drop = ((item, options) => {\n if (item instanceof ColumnType) {\n return ['drop', item, options];\n } else if (item === emptyObject) {\n changeTableData.drop.push(getTableData());\n resetTableData();\n return emptyObject;\n } else {\n const result: Record<string, ChangeItem> = {};\n for (const key in item) {\n result[key] = [\n 'drop',\n (item as Record<string, ColumnType>)[key],\n options,\n ];\n }\n return result;\n }\n}) as typeof add;\n\ntype ChangeOptions = {\n usingUp?: RawExpression;\n usingDown?: RawExpression;\n};\n\ntype ChangeArg =\n | ColumnType\n | ['default', unknown | RawExpression]\n | ['nullable', boolean]\n | ['comment', string | null]\n | ['compression', string]\n | ['foreignKey', ForeignKey<string, string[]>]\n | ['index', Omit<SingleColumnIndexOptions, 'column'>];\n\ntype TableChangeMethods = typeof tableChangeMethods;\nconst tableChangeMethods = {\n raw: raw,\n add,\n drop,\n change(from: ChangeArg, to: ChangeArg, options?: ChangeOptions): ChangeItem {\n return ['change', from, to, options];\n },\n default(value: unknown | RawExpression): ChangeArg {\n return ['default', value];\n },\n nullable(): ChangeArg {\n return ['nullable', true];\n },\n nonNullable(): ChangeArg {\n return ['nullable', false];\n },\n comment(name: string | null): ChangeArg {\n return ['comment', name];\n },\n rename(name: string): ChangeItem {\n return ['rename', name];\n },\n};\n\nexport type ChangeItem =\n | [\n action: 'add' | 'drop',\n item: ColumnType,\n options?: { dropMode?: DropMode },\n ]\n | [action: 'change', from: ChangeArg, to: ChangeArg, options?: ChangeOptions]\n | ['rename', string];\n\nexport type TableChanger = ColumnTypes & TableChangeMethods;\n\nexport type TableChangeData = Record<string, ChangeItem | EmptyObject>;\n\ntype ChangeTableState = {\n migration: Migration;\n up: boolean;\n tableName: string;\n alterTable: string[];\n values: unknown[];\n indexes: ColumnIndex[];\n dropIndexes: ColumnIndex[];\n comments: ColumnComment[];\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 state: ChangeTableState = {\n migration,\n up,\n tableName,\n alterTable: [],\n values: [],\n indexes: [],\n dropIndexes: [],\n comments: [],\n };\n\n if (options.comment !== undefined) {\n await changeActions.tableComment(state, tableName, options.comment);\n }\n\n for (const key in changeData) {\n const result = changeData[key];\n if (Array.isArray(result)) {\n const [action] = result;\n if (action === 'change') {\n const [, from, to, options] = result;\n changeActions.change(state, up, key, from, to, options);\n } else if (action === 'rename') {\n const [, name] = result;\n changeActions.rename(state, up, key, name);\n } else if (action) {\n const [action, item, options] = result;\n changeActions[\n action as Exclude<\n keyof typeof changeActions,\n 'change' | 'rename' | 'tableComment'\n >\n ](state, up, key, item, options);\n }\n }\n }\n\n changeTableData[up ? 'drop' : 'add'].forEach((tableData) => {\n handleTableData(state, false, tableName, tableData);\n });\n\n changeTableData[up ? 'add' : 'drop'].forEach((tableData) => {\n handleTableData(state, true, tableName, tableData);\n });\n\n if (state.alterTable.length) {\n await migration.query(\n `ALTER TABLE ${quoteTable(tableName)}` +\n `\\n ${state.alterTable.join(',\\n ')}`,\n );\n }\n\n await migrateIndexes(state, state.dropIndexes, false);\n await migrateIndexes(state, state.indexes, true);\n await migrateComments(state, state.comments);\n};\n\nconst changeActions = {\n tableComment(\n { migration, up }: ChangeTableState,\n tableName: string,\n comment: Exclude<ChangeTableOptions['comment'], undefined>,\n ) {\n let value;\n if (up) {\n value = Array.isArray(comment) ? comment[1] : comment;\n } else {\n value = Array.isArray(comment) ? comment[0] : null;\n }\n return migration.query(\n `COMMENT ON TABLE ${quoteTable(tableName)} IS ${quote(value)}`,\n );\n },\n\n add(\n state: ChangeTableState,\n up: boolean,\n key: string,\n item: ColumnType,\n options?: { dropMode?: DropMode },\n ) {\n addColumnIndex(state[up ? 'indexes' : 'dropIndexes'], key, item);\n\n if (up) {\n addColumnComment(state.comments, key, item);\n }\n\n if (up) {\n state.alterTable.push(`ADD COLUMN ${columnToSql(key, item, state)}`);\n } else {\n state.alterTable.push(\n `DROP COLUMN \"${key}\"${\n options?.dropMode ? ` ${options.dropMode}` : ''\n }`,\n );\n }\n },\n\n drop(\n state: ChangeTableState,\n up: boolean,\n key: string,\n item: ColumnType,\n options?: { dropMode?: DropMode },\n ) {\n this.add(state, !up, key, item, options);\n },\n\n change(\n state: ChangeTableState,\n up: boolean,\n key: string,\n first: ChangeArg,\n second: ChangeArg,\n options?: ChangeOptions,\n ) {\n const [fromItem, toItem] = up ? [first, second] : [second, first];\n\n const from = getChangeProperties(fromItem);\n const to = getChangeProperties(toItem);\n\n if (from.type !== to.type || from.collate !== to.collate) {\n const using = up ? options?.usingUp : options?.usingDown;\n state.alterTable.push(\n `ALTER COLUMN \"${key}\" TYPE ${to.type}${\n to.collate ? ` COLLATE ${quote(to.collate)}` : ''\n }${using ? ` USING ${getRaw(using, state.values)}` : ''}`,\n );\n }\n\n if (from.default !== to.default) {\n const value = getRawOrValue(to.default, state.values);\n const expr =\n value === undefined ? `DROP DEFAULT` : `SET DEFAULT ${value}`;\n state.alterTable.push(`ALTER COLUMN \"${key}\" ${expr}`);\n }\n\n if (from.nullable !== to.nullable) {\n state.alterTable.push(\n `ALTER COLUMN \"${key}\" ${to.nullable ? 'DROP' : 'SET'} NOT NULL`,\n );\n }\n\n if (from.compression !== to.compression) {\n state.alterTable.push(\n `ALTER COLUMN \"${key}\" SET COMPRESSION ${to.compression || 'DEFAULT'}`,\n );\n }\n\n const fromFkey = from.foreignKey;\n const toFkey = to.foreignKey;\n if (fromFkey || toFkey) {\n if ((fromFkey && 'fn' in fromFkey) || (toFkey && 'fn' in toFkey)) {\n throw new Error('Callback in foreignKey is not allowed in migration');\n }\n\n if (checkIfForeignKeysAreDifferent(fromFkey, toFkey)) {\n if (fromFkey) {\n const data = newTableData();\n data.foreignKeys.push({\n columns: [key],\n fnOrTable: fromFkey.table,\n foreignColumns: fromFkey.columns,\n options: fromFkey,\n });\n changeTableData[up ? 'drop' : 'add'].push(data);\n }\n\n if (toFkey) {\n const data = newTableData();\n data.foreignKeys.push({\n columns: [key],\n fnOrTable: toFkey.table,\n foreignColumns: toFkey.columns,\n options: toFkey,\n });\n changeTableData[up ? 'add' : 'drop'].push(data);\n }\n }\n }\n\n const fromIndex = from.index;\n const toIndex = to.index;\n if (\n (fromIndex || toIndex) &&\n checkIfIndexesAreDifferent(fromIndex, toIndex)\n ) {\n if (fromIndex) {\n const data = newTableData();\n data.indexes.push({\n columns: [\n {\n column: key,\n ...fromIndex,\n },\n ],\n options: fromIndex,\n });\n changeTableData[up ? 'drop' : 'add'].push(data);\n }\n\n if (toIndex) {\n const data = newTableData();\n data.indexes.push({\n columns: [\n {\n column: key,\n ...toIndex,\n },\n ],\n options: toIndex,\n });\n changeTableData[up ? 'add' : 'drop'].push(data);\n }\n }\n\n if (from.comment !== to.comment) {\n state.comments.push({ column: key, comment: to.comment || null });\n }\n },\n\n rename(state: ChangeTableState, up: boolean, key: string, name: string) {\n const [from, to] = up ? [key, name] : [name, key];\n state.alterTable.push(`RENAME COLUMN \"${from}\" TO \"${to}\"`);\n },\n};\n\nconst checkIfForeignKeysAreDifferent = (\n from?: ForeignKey<string, string[]> & { table: string },\n to?: ForeignKey<string, string[]> & { table: string },\n) => {\n return (\n !from ||\n !to ||\n from.name !== to.name ||\n from.match !== to.match ||\n from.onUpdate !== to.onUpdate ||\n from.onDelete !== to.onDelete ||\n from.dropMode !== to.dropMode ||\n from.table !== to.table ||\n from.columns.join(',') !== to.columns.join(',')\n );\n};\n\nconst checkIfIndexesAreDifferent = (\n from?: Omit<SingleColumnIndexOptions, 'column'>,\n to?: Omit<SingleColumnIndexOptions, 'column'>,\n) => {\n return (\n !from ||\n !to ||\n from.expression !== to.expression ||\n from.collate !== to.collate ||\n from.operator !== to.operator ||\n from.order !== to.order ||\n from.name !== to.name ||\n from.unique !== to.unique ||\n from.using !== to.using ||\n from.include !== to.include ||\n (Array.isArray(from.include) &&\n Array.isArray(to.include) &&\n from.include.join(',') !== to.include.join(',')) ||\n from.with !== to.with ||\n from.tablespace !== to.tablespace ||\n from.where !== to.where ||\n from.dropMode !== to.dropMode\n );\n};\n\ntype ChangeProperties = {\n type?: string;\n collate?: string;\n default?: unknown | RawExpression;\n nullable?: boolean;\n comment?: string | null;\n compression?: string;\n foreignKey?: ForeignKey<string, string[]>;\n index?: Omit<SingleColumnIndexOptions, 'column'>;\n};\n\nconst getChangeProperties = (item: ChangeArg): ChangeProperties => {\n if (item instanceof ColumnType) {\n return {\n type: item.toSQL(),\n collate: item.data.collate,\n default: item.data.default,\n nullable: item.isNullable,\n comment: item.data.comment,\n compression: item.data.compression,\n foreignKey: item.data.foreignKey,\n index: item.data.index,\n };\n } else {\n return {\n type: undefined,\n collate: undefined,\n default: item[0] === 'default' ? item[1] : undefined,\n nullable: item[0] === 'nullable' ? item[1] : undefined,\n comment: item[0] === 'comment' ? item[1] : undefined,\n compression: item[0] === 'compression' ? item[1] : undefined,\n foreignKey: item[0] === 'foreignKey' ? item[1] : undefined,\n index: item[0] === 'index' ? item[1] : undefined,\n };\n }\n};\n\nconst handleTableData = (\n state: ChangeTableState,\n up: boolean,\n tableName: string,\n tableData: TableData,\n) => {\n if (tableData.primaryKey) {\n if (up) {\n state.alterTable.push(`ADD ${primaryKeyToSql(tableData.primaryKey)}`);\n } else {\n const name = tableData.primaryKey.options?.name || `${tableName}_pkey`;\n state.alterTable.push(`DROP CONSTRAINT \"${name}\"`);\n }\n }\n\n if (tableData.indexes.length) {\n state[up ? 'indexes' : 'dropIndexes'].push(...tableData.indexes);\n }\n\n if (tableData.foreignKeys.length) {\n tableData.foreignKeys.forEach((foreignKey) => {\n const action = up ? 'ADD' : 'DROP';\n state.alterTable.push(\n `\\n ${action} ${constraintToSql(state.tableName, up, foreignKey)}`,\n );\n });\n }\n};\n\nconst getRawOrValue = (item: unknown | RawExpression, values: unknown[]) => {\n return typeof item === 'object' && item && isRaw(item)\n ? getRaw(item, values)\n : quote(item);\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 QueryLogOptions,\n QueryResult,\n QueryResultRow,\n Sql,\n TransactionAdapter,\n TypeParsers,\n raw,\n} from 'pqb';\nimport { createJoinTable, createTable } from './createTable';\nimport { changeTable, TableChangeData, TableChanger } from './changeTable';\nimport { quoteTable } from '../common';\n\nexport type DropMode = 'CASCADE' | 'RESTRICT';\n\nexport type TableOptions = { dropMode?: DropMode; comment?: string };\nexport type ColumnsShapeCallback = (\n t: ColumnTypes & { raw: typeof raw },\n) => ColumnsShape;\n\nexport type ChangeTableOptions = { comment?: string | [string, string] | null };\nexport type ChangeTableCallback = (t: TableChanger) => TableChangeData;\n\nexport type ColumnIndex = {\n columns: IndexColumnOptions[];\n options: IndexOptions;\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 options: QueryLogOptions,\n ) {\n super(tx.pool, 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 [table, newName] = this.up ? [from, to] : [to, from];\n await this.query(`ALTER TABLE ${quoteTable(table)} RENAME TO \"${newName}\"`);\n }\n\n addColumn(\n tableName: string,\n columnName: string,\n fn: (t: ColumnTypes) => ColumnType,\n ) {\n return addColumn(this, this.up, tableName, columnName, fn);\n }\n\n dropColumn(\n tableName: string,\n columnName: string,\n fn: (t: ColumnTypes) => 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, {\n ...options,\n checkExists: options.ifNotExists,\n });\n }\n\n dropExtension(\n name: string,\n options: { ifExists?: boolean; cascade?: boolean } = {},\n ) {\n return createExtension(this, !this.up, name, {\n ...options,\n checkExists: options.ifExists,\n });\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: ColumnTypes) => 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 = (\n migration: Migration,\n up: boolean,\n schemaName: string,\n) => {\n if (up) {\n return migration.query(`CREATE SCHEMA \"${schemaName}\"`);\n } else {\n return migration.query(`DROP SCHEMA \"${schemaName}\"`);\n }\n};\n\nconst createExtension = (\n migration: Migration,\n up: boolean,\n name: string,\n options: ExtensionOptions & {\n checkExists?: boolean;\n },\n) => {\n if (!up) {\n return migration.query(\n `DROP EXTENSION${options.checkExists ? ' IF EXISTS' : ''} \"${name}\"${\n options.cascade ? ' CASCADE' : ''\n }`,\n );\n }\n\n return migration.query(\n `CREATE EXTENSION${options.checkExists ? ' IF NOT EXISTS' : ''} \"${name}\"${\n options.schema ? ` SCHEMA \"${options.schema}\"` : ''\n }${options.version ? ` VERSION '${options.version}'` : ''}${\n options.cascade ? ' CASCADE' : ''\n }`,\n );\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 MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\n args: string[] = [],\n) => migrateOrRollback(options, config, args, true);\n\nexport const rollback = (\n options: MaybeArray<AdapterOptions>,\n config: MigrationConfig,\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 MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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: MigrationConfig,\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 MigrationConfig,\n} from '../common';\nimport { mkdir, writeFile } from 'fs/promises';\nimport path from 'path';\n\nexport const generate = async (config: MigrationConfig, 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, MigrationConfig } from './common';\nimport { generate } from './commands/generate';\n\nexport const rakeDb = async (\n options: MaybeArray<AdapterOptions>,\n partialConfig: Partial<MigrationConfig> = {},\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","ColumnType","Operators","singular","columnTypes","raw","getColumnTypes","getTableData","emptyObject","resetTableData","options","action","newTableData","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.1.1",
3
+ "version": "2.1.2",
4
4
  "description": "Migrations tool for Postgresql DB",
5
5
  "homepage": "https://orchid-orm.netlify.app/guide/migrations.html",
6
6
  "repository": {
@@ -440,12 +440,12 @@ describe('changeTable', () => {
440
440
  await fn();
441
441
  expectSql(`
442
442
  ALTER TABLE "table"
443
- ADD CONSTRAINT "tableToOtherTable" FOREIGN KEY ("addFkey") REFERENCES "otherTable"("foreignId"),
444
- ADD CONSTRAINT "foreignKeyName" FOREIGN KEY ("addFkeyWithOptions") REFERENCES "otherTable"("foreignId") MATCH FULL ON DELETE CASCADE ON UPDATE SET NULL,
445
- ADD CONSTRAINT "toFkeyName" FOREIGN KEY ("changeForeignKey") REFERENCES "b"("bId") MATCH FULL ON DELETE CASCADE ON UPDATE NO ACTION,
446
- DROP CONSTRAINT "tableToOtherTable",
443
+ DROP CONSTRAINT "table_removeFkey_fkey",
447
444
  DROP CONSTRAINT "foreignKeyName",
448
- DROP CONSTRAINT "fromFkeyName"
445
+ DROP CONSTRAINT "fromFkeyName",
446
+ ADD CONSTRAINT "table_addFkey_fkey" FOREIGN KEY ("addFkey") REFERENCES "otherTable"("foreignId"),
447
+ ADD CONSTRAINT "foreignKeyName" FOREIGN KEY ("addFkeyWithOptions") REFERENCES "otherTable"("foreignId") MATCH FULL ON DELETE CASCADE ON UPDATE SET NULL,
448
+ ADD CONSTRAINT "toFkeyName" FOREIGN KEY ("changeForeignKey") REFERENCES "b"("bId") MATCH FULL ON DELETE CASCADE ON UPDATE NO ACTION
449
449
  `);
450
450
 
451
451
  queryMock.mockClear();
@@ -453,10 +453,10 @@ describe('changeTable', () => {
453
453
  await fn();
454
454
  expectSql(`
455
455
  ALTER TABLE "table"
456
- DROP CONSTRAINT "tableToOtherTable",
456
+ DROP CONSTRAINT "table_addFkey_fkey",
457
457
  DROP CONSTRAINT "foreignKeyName",
458
458
  DROP CONSTRAINT "toFkeyName",
459
- ADD CONSTRAINT "tableToOtherTable" FOREIGN KEY ("removeFkey") REFERENCES "otherTable"("foreignId"),
459
+ ADD CONSTRAINT "table_removeFkey_fkey" FOREIGN KEY ("removeFkey") REFERENCES "otherTable"("foreignId"),
460
460
  ADD CONSTRAINT "foreignKeyName" FOREIGN KEY ("removeFkeyWithOptions") REFERENCES "otherTable"("foreignId") MATCH FULL ON DELETE CASCADE ON UPDATE SET NULL,
461
461
  ADD CONSTRAINT "fromFkeyName" FOREIGN KEY ("changeForeignKey") REFERENCES "a"("aId") MATCH PARTIAL ON DELETE SET DEFAULT ON UPDATE RESTRICT
462
462
  `);
@@ -534,12 +534,12 @@ describe('changeTable', () => {
534
534
 
535
535
  await fn();
536
536
  expectSql([
537
- `CREATE INDEX "tableAddIndexIndex" ON "table" ("addIndex")`,
538
- `CREATE UNIQUE INDEX "tableAddIndexWithOptionsIndex" ON "table" USING using ("addIndexWithOptions"(expression) COLLATE 'collate' operator order) INCLUDE ("a", "b") WITH (with) TABLESPACE tablespace WHERE where`,
539
- `CREATE UNIQUE INDEX "to" ON "table" USING to ("changeIndex"(to) COLLATE 'to' to to) INCLUDE ("c", "d") WITH (to) TABLESPACE to WHERE to`,
540
537
  `DROP INDEX "tableRemoveIndexIndex"`,
541
538
  `DROP INDEX "tableRemoveIndexWithOptionsIndex" CASCADE`,
542
539
  `DROP INDEX "from" CASCADE`,
540
+ `CREATE INDEX "tableAddIndexIndex" ON "table" ("addIndex")`,
541
+ `CREATE UNIQUE INDEX "tableAddIndexWithOptionsIndex" ON "table" USING using ("addIndexWithOptions"(expression) COLLATE 'collate' operator order) INCLUDE ("a", "b") WITH (with) TABLESPACE tablespace WHERE where`,
542
+ `CREATE UNIQUE INDEX "to" ON "table" USING to ("changeIndex"(to) COLLATE 'to' to to) INCLUDE ("c", "d") WITH (to) TABLESPACE to WHERE to`,
543
543
  ]);
544
544
 
545
545
  queryMock.mockClear();
@@ -207,12 +207,12 @@ export const changeTable = async (
207
207
  }
208
208
  }
209
209
 
210
- changeTableData.add.forEach((tableData) => {
211
- handleTableData(state, up, tableName, tableData);
210
+ changeTableData[up ? 'drop' : 'add'].forEach((tableData) => {
211
+ handleTableData(state, false, tableName, tableData);
212
212
  });
213
213
 
214
- changeTableData.drop.forEach((tableData) => {
215
- handleTableData(state, !up, tableName, tableData);
214
+ changeTableData[up ? 'add' : 'drop'].forEach((tableData) => {
215
+ handleTableData(state, true, tableName, tableData);
216
216
  });
217
217
 
218
218
  if (state.alterTable.length) {
@@ -222,10 +222,8 @@ export const changeTable = async (
222
222
  );
223
223
  }
224
224
 
225
- const createIndexes = up ? state.indexes : state.dropIndexes;
226
- const dropIndexes = up ? state.dropIndexes : state.indexes;
227
- await migrateIndexes(state, createIndexes, up);
228
- await migrateIndexes(state, dropIndexes, !up);
225
+ await migrateIndexes(state, state.dropIndexes, false);
226
+ await migrateIndexes(state, state.indexes, true);
229
227
  await migrateComments(state, state.comments);
230
228
  };
231
229
 
@@ -283,7 +283,7 @@ describe('migration', () => {
283
283
  "createdAt" timestamp NOT NULL DEFAULT now(),
284
284
  "updatedAt" timestamp NOT NULL DEFAULT now(),
285
285
  PRIMARY KEY ("postUuid", "commentId", "commentAuthorName"),
286
- CONSTRAINT "postsCommentsToComments" FOREIGN KEY ("commentId", "commentAuthorName") REFERENCES "comments"("id", "authorName")
286
+ CONSTRAINT "postsComments_commentId_commentAuthorName_fkey" FOREIGN KEY ("commentId", "commentAuthorName") REFERENCES "comments"("id", "authorName")
287
287
  )
288
288
  `);
289
289
  };
@@ -101,15 +101,16 @@ export const constraintToSql = (
101
101
  up: boolean,
102
102
  foreignKey: TableData['foreignKeys'][number],
103
103
  ) => {
104
- const table = getForeignKeyTable(foreignKey.fnOrTable);
105
104
  const constraintName =
106
- foreignKey.options.name || joinWords(tableName, 'to', table);
105
+ foreignKey.options.name ||
106
+ `${tableName}_${foreignKey.columns.join('_')}_fkey`;
107
107
 
108
108
  if (!up) {
109
109
  const { dropMode } = foreignKey.options;
110
110
  return `CONSTRAINT "${constraintName}"${dropMode ? ` ${dropMode}` : ''}`;
111
111
  }
112
112
 
113
+ const table = getForeignKeyTable(foreignKey.fnOrTable);
113
114
  return `CONSTRAINT "${constraintName}" FOREIGN KEY (${joinColumns(
114
115
  foreignKey.columns,
115
116
  )}) ${referencesToSql(table, foreignKey.foreignColumns, foreignKey.options)}`;