gummy-cli 0.0.83 → 0.0.85

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.
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bin.mjs","names":[],"sources":["../src/migrate/validate.ts","../src/migrate/makemigrations.ts","../src/commands/makemigrations.ts","../src/bin.ts"],"sourcesContent":["import { ColumnType } from 'gummy'\nimport type { ColumnTypeStr, DatabaseState } from './types.js'\n\nexport function validateDatabaseState(state: DatabaseState): string[] {\n const errors: string[] = []\n\n const tables = state.tables\n for (const [tableName, tableState] of Object.entries(tables)) {\n // Collect primary keys\n const primaryKeys = []\n\n const columns = tableState.columns\n for (const [columnName, columnDef] of Object.entries(columns)) {\n // Check for primary keys\n if (columnDef.isPrimaryKey) {\n primaryKeys.push(columnName)\n // Primary key columns must be NOT NULL\n if (!columnDef.notNull) {\n errors.push(`Primary key column \"${columnName}\" in table \"${tableName}\" must be NOT NULL.`)\n }\n }\n\n // Check foreign key references\n if (columnDef.references) {\n const [referencedTable, referencedColumn] = columnDef.references.split('.')\n if (!state.tables[referencedTable]) {\n errors.push(\n `Referenced table \"${referencedTable}\" for foreign key on \"${tableName}.${columnName}\" does not exist.`,\n )\n } else if (!state.tables[referencedTable].columns[referencedColumn]) {\n errors.push(\n `Referenced column \"${referencedTable}.${referencedColumn}\" for foreign key on \"${tableName}.${columnName}\" does not exist.`,\n )\n } else {\n const foreignColumnDef = state.tables[referencedTable].columns[referencedColumn]\n // Check data type compatibility\n if (!areDataTypesCompatible(columnDef.dataType, foreignColumnDef.dataType)) {\n errors.push(\n `Data type incompatibility between foreign key column \"${tableName}.${columnName}\" (${ColumnType[columnDef.dataType]}) and referenced column \"${referencedTable}.${referencedColumn}\" (${ColumnType[foreignColumnDef.dataType]}).`,\n )\n }\n // Referenced column should be PRIMARY KEY or UNIQUE\n if (!foreignColumnDef.isPrimaryKey && !foreignColumnDef.isUnique) {\n errors.push(\n `Referenced column \"${referencedTable}.${referencedColumn}\" for foreign key on \"${tableName}.${columnName}\" is not PRIMARY KEY or UNIQUE.`,\n )\n }\n }\n }\n }\n }\n\n return errors\n}\n\nfunction areDataTypesCompatible(fkType: ColumnTypeStr, pkType: ColumnTypeStr): boolean {\n const compatibleTypes: { [key in ColumnTypeStr]?: ColumnTypeStr[] } = {\n [ColumnType.Integer]: [ColumnType.Integer, ColumnType.Serial, ColumnType.BigInteger, ColumnType.BigSerial],\n [ColumnType.BigInteger]: [ColumnType.BigInteger, ColumnType.BigSerial, ColumnType.Integer, ColumnType.Serial],\n [ColumnType.Serial]: [ColumnType.Integer, ColumnType.Serial],\n [ColumnType.BigSerial]: [ColumnType.BigInteger, ColumnType.BigSerial],\n [ColumnType.Varchar]: [ColumnType.Varchar, ColumnType.Text],\n [ColumnType.Text]: [ColumnType.Text, ColumnType.Varchar],\n [ColumnType.UUID]: [ColumnType.UUID],\n }\n\n if (fkType === pkType) {\n return true\n }\n\n if (compatibleTypes[fkType]?.includes(pkType)) {\n return true\n }\n\n return false\n}\n","import * as fs from 'node:fs'\nimport * as path from 'node:path'\nimport chalk from 'chalk'\nimport { globSync } from 'glob'\nimport { type Column, isTable, Table } from 'gummy'\nimport { readPackageJSON } from 'pkg-types'\nimport { getConfig } from '../config.js'\nimport { areArrayEqual } from '../utils.js'\nimport {\n AddColumnAction,\n AddForeignKeyConstraintAction,\n AddUniqueConstraintAction,\n AlterColumnAction,\n CreateIndexAction,\n CreateTableAction,\n DropColumnAction,\n DropForeignKeyConstraintAction,\n DropIndexAction,\n DropTableAction,\n DropUniqueConstraintAction,\n type MigrationAction,\n} from './actions.js'\nimport type { ColumnDefinition, ColumnDefinitionDiff, DatabaseState, TableState } from './types.js'\nimport { validateDatabaseState } from './validate.js'\n\nconst info = chalk.bold.blue\nconst error = chalk.bold.red\n\nexport async function makeMigrations() {\n const config = await getConfig()\n\n // Step 1: Extract all table instances from 'src/models/'\n const tableInstances = await extractTableInstances(config.modelsDir)\n\n // Step 2: Extract column definitions from each table instance\n const newState = buildNewState(tableInstances)\n\n // Step 3: Validate the newState before proceeding\n const validationErrors = validateDatabaseState(newState)\n if (validationErrors.length > 0) {\n console.log(error('Validation Error(s) found in the database schema:'))\n for (const errMsg of validationErrors) {\n console.log(error(`- ${errMsg}`))\n }\n process.exit(1)\n }\n\n // Step 4: Load past migration actions and reconstruct oldState\n const pastMigrationActions = await loadPastMigrationActions(config.migrationsDir)\n const oldState = reconstructOldState(pastMigrationActions)\n\n // Step 5: Compare oldState and newState to get stateDiff\n const stateDiff = compareStates(oldState, newState)\n if (\n stateDiff.added.length === 0 &&\n stateDiff.removed.length === 0 &&\n stateDiff.modified.length === 0 &&\n stateDiff.foreignKeys.length === 0 &&\n stateDiff.indexes.added.length === 0 &&\n stateDiff.indexes.removed.length === 0 &&\n stateDiff.uniqueConstraints.added.length === 0 &&\n stateDiff.uniqueConstraints.removed.length === 0\n ) {\n console.log(info('No changes detected. Migration file not generated.'))\n process.exit(0)\n }\n\n // Step 6: Generate migration actions for the current stateDiff\n const { actions, downActions } = generateMigrationActions(stateDiff, newState, oldState)\n\n // Step 7: Generate migration file based on migration actions\n const timestamp = new Date().toISOString().replace(/[-:T]/g, '').split('.')[0]\n generateMigrationFile(actions, downActions, timestamp, config.migrationsDir)\n\n console.log(info('Migration script completed successfully.'))\n}\n\ntype StateDiff = {\n added: MigrationAction[]\n removed: MigrationAction[]\n modified: MigrationAction[]\n foreignKeys: (AddForeignKeyConstraintAction | DropForeignKeyConstraintAction)[]\n indexes: {\n added: CreateIndexAction[]\n removed: DropIndexAction[]\n }\n uniqueConstraints: {\n added: AddUniqueConstraintAction[]\n removed: DropUniqueConstraintAction[]\n }\n}\n\nlet tsxRegistered = false\n\nasync function importTSFile(path: string): Promise<any> {\n const localPackageJson = await readPackageJSON()\n if (localPackageJson.type === 'module') {\n if (!tsxRegistered) {\n const { register } = await import('tsx/esm/api')\n register()\n tsxRegistered = true\n }\n\n return await import(path)\n }\n\n const { require: tsRequire } = await import('tsx/cjs/api')\n\n return await tsRequire(path, __filename)\n}\n\nexport async function extractTableInstances(modelsDir = 'src/models'): Promise<Table[]> {\n const files = globSync(`${modelsDir}/**/*.{ts,js,mjs,mts}`, { absolute: true })\n const tableInstances: Table[] = []\n\n for (const fileName of files) {\n if (\n fileName.endsWith('.js') ||\n (fileName.endsWith('.ts') && !fileName.endsWith('.d.ts')) ||\n fileName.endsWith('.mjs') ||\n (fileName.endsWith('.mts') && !fileName.endsWith('.d.mts'))\n ) {\n const m = await importTSFile(fileName)\n\n Object.entries(m).forEach(([, exported]) => {\n if (isTable(exported)) {\n tableInstances.push(exported)\n }\n })\n\n const defaultExported = m.default\n if (isTable(defaultExported)) {\n tableInstances.push(defaultExported)\n }\n }\n }\n\n return tableInstances\n}\n\nconst _isWithLength = (column: Column): column is typeof column & { length: number } => {\n return 'length' in column && typeof column.length === 'number'\n}\n\nconst extractColumns = (table: Table): TableState => {\n const columns = Table.columns(table)\n const options = Table.options(table)\n return {\n columns: Object.entries(columns).reduce(\n (tableDefinition, [_, column]) => {\n const { foreignKeyConfigs } = column.config\n\n tableDefinition[column.name] = {\n name: column.name,\n dataType: column.columnType,\n length: _isWithLength(column) ? column.length : undefined,\n isPrimaryKey: column.primary,\n notNull: column.notNull,\n hasDbDefault: column.dbDefault != null,\n dbDefault: column.dbDefault,\n isUnique: column.isUnique,\n references:\n foreignKeyConfigs != null\n ? `${foreignKeyConfigs?.ref.table.tableName}.${foreignKeyConfigs?.ref.name}`\n : undefined,\n onDelete: foreignKeyConfigs?.actions.onDelete,\n }\n return tableDefinition\n },\n {} as { [columnName: string]: ColumnDefinition },\n ),\n indexes: [\n ...Object.entries(columns)\n .map(([, column]) => column)\n .filter((column) => column.index)\n .map((column) => ({ table: table.tableName, columns: [column.name] })),\n ...(options?.indexes?.map((columns) => ({ table: table.tableName, columns })) ?? []),\n ],\n uniqueConstraints: options?.uniqueConstraints ?? [],\n }\n}\n\nexport function buildNewState(tableInstances: Table[]): DatabaseState {\n const newState: DatabaseState = { tables: {} }\n tableInstances.forEach((instance) => {\n const tableName = instance.tableName\n newState.tables[tableName] = extractColumns(instance)\n })\n return newState\n}\n\nexport async function loadPastMigrationActions(migrationsDir = 'migrations'): Promise<MigrationAction[]> {\n if (!fs.existsSync(migrationsDir)) {\n return []\n }\n\n const migrationFiles = globSync(`${migrationsDir}/**/*.{ts,js,mjs,mts}`, { absolute: true })\n const allActions: MigrationAction[] = []\n for (const file of migrationFiles.sort()) {\n const migrationModule = await importTSFile(file)\n\n if (migrationModule.actions && Array.isArray(migrationModule.actions)) {\n allActions.push(...migrationModule.actions)\n }\n }\n\n return allActions\n}\n\nexport function reconstructOldState(migrationActions: MigrationAction[]): DatabaseState {\n const state: DatabaseState = { tables: {} }\n\n for (const action of migrationActions) {\n action.applyToState(state)\n }\n\n return state\n}\n\nfunction compareStates(oldState: DatabaseState, newState: DatabaseState): StateDiff {\n const stateDiff: StateDiff = {\n added: [],\n removed: [],\n modified: [],\n foreignKeys: [],\n indexes: { added: [], removed: [] },\n uniqueConstraints: { added: [], removed: [] },\n }\n\n // Compare tables\n for (const [tableName, newTableDef] of Object.entries(newState.tables)) {\n const oldTableDef = oldState.tables[tableName]\n\n if (!oldTableDef) {\n // New table\n const columnsWithoutFK = Object.values(newTableDef.columns).map((col) => ({\n ...col,\n references: undefined,\n }))\n stateDiff.added.push(\n new CreateTableAction(tableName, columnsWithoutFK, {\n indexes: newTableDef.indexes,\n uniqueConstraints: newTableDef.uniqueConstraints,\n }),\n )\n // Collect foreign key constraints\n for (const columnDef of Object.values(newTableDef.columns)) {\n if (columnDef.references) {\n const [referencedTable, referencedColumn] = columnDef.references.split('.')\n stateDiff.foreignKeys.push(\n new AddForeignKeyConstraintAction(tableName, columnDef.name, referencedTable, referencedColumn, {\n onDelete: columnDef.onDelete,\n onUpdate: columnDef.onUpdate,\n }),\n )\n }\n }\n continue\n }\n\n // Compare columns\n for (const [columnName, newColumnDef] of Object.entries(newTableDef.columns)) {\n const oldColumnDef = oldTableDef.columns[columnName]\n\n if (!oldColumnDef) {\n // New column\n const columnWithoutFK = { ...newColumnDef, references: undefined }\n stateDiff.added.push(new AddColumnAction(tableName, columnWithoutFK))\n // Collect foreign key constraints\n if (newColumnDef.references) {\n const [referencedTable, referencedColumn] = newColumnDef.references.split('.')\n stateDiff.foreignKeys.push(\n new AddForeignKeyConstraintAction(tableName, columnName, referencedTable, referencedColumn, {\n onDelete: newColumnDef.onDelete,\n onUpdate: newColumnDef.onUpdate,\n }),\n )\n }\n } else {\n // Generate column definition differences\n const diff = generateColumnDefinitionDiff(oldColumnDef, newColumnDef)\n if (diff) {\n stateDiff.modified.push(new AlterColumnAction(tableName, columnName, diff))\n }\n\n // Detect foreign key constraint changes\n if (oldColumnDef.references !== newColumnDef.references || oldColumnDef.onDelete !== newColumnDef.onDelete) {\n if (oldColumnDef.references) {\n // Drop old foreign key constraint\n stateDiff.foreignKeys.push(new DropForeignKeyConstraintAction(tableName, columnName))\n }\n if (newColumnDef.references) {\n // Add new foreign key constraint\n const [referencedTable, referencedColumn] = newColumnDef.references.split('.')\n stateDiff.foreignKeys.push(\n new AddForeignKeyConstraintAction(tableName, columnName, referencedTable, referencedColumn, {\n onDelete: newColumnDef.onDelete,\n onUpdate: newColumnDef.onUpdate,\n }),\n )\n }\n }\n }\n }\n\n // Check for removed columns\n for (const columnName of Object.keys(oldTableDef.columns)) {\n if (!newTableDef.columns[columnName]) {\n stateDiff.removed.push(new DropColumnAction(tableName, columnName))\n }\n }\n\n // Compare indexes\n const newIndexes = newTableDef.indexes || []\n const oldIndexes = oldTableDef.indexes || []\n\n const addedIndexes = newIndexes.filter(\n (newIndex) => !oldIndexes.some((oldIndex) => areArrayEqual(oldIndex.columns, newIndex.columns)),\n )\n\n const removedIndexes = oldIndexes.filter(\n (oldIndex) => !newIndexes.some((newIndex) => areArrayEqual(newIndex.columns, oldIndex.columns)),\n )\n\n for (const index of addedIndexes) {\n stateDiff.indexes.added.push(new CreateIndexAction(tableName, index.columns))\n }\n\n for (const index of removedIndexes) {\n stateDiff.indexes.removed.push(new DropIndexAction(tableName, index.columns))\n }\n\n // Compare unique constraints\n const newUniqueConstraints = newTableDef.uniqueConstraints || []\n const oldUniqueConstraints = oldTableDef.uniqueConstraints || []\n\n const addedUniqueConstraints = newUniqueConstraints.filter(\n (newConstraint) => !oldUniqueConstraints.some((oldConstraint) => areArrayEqual(oldConstraint, newConstraint)),\n )\n\n const removedUniqueConstraints = oldUniqueConstraints.filter(\n (oldConstraint) => !newUniqueConstraints.some((newConstraint) => areArrayEqual(newConstraint, oldConstraint)),\n )\n\n for (const columns of addedUniqueConstraints) {\n stateDiff.uniqueConstraints.added.push(new AddUniqueConstraintAction(tableName, columns))\n }\n\n for (const columns of removedUniqueConstraints) {\n stateDiff.uniqueConstraints.removed.push(new DropUniqueConstraintAction(tableName, columns))\n }\n }\n\n // Check for removed tables\n for (const tableName of Object.keys(oldState.tables)) {\n if (!newState.tables[tableName]) {\n stateDiff.removed.push(new DropTableAction(tableName))\n }\n }\n\n return stateDiff\n}\n\nfunction generateColumnDefinitionDiff(\n oldColumn: ColumnDefinition,\n newColumn: ColumnDefinition,\n): ColumnDefinitionDiff | null {\n const diff: ColumnDefinitionDiff = {}\n let hasChanges = false\n\n if (oldColumn.dataType !== newColumn.dataType) {\n diff.dataType = newColumn.dataType\n hasChanges = true\n }\n\n if (oldColumn.length !== newColumn.length) {\n diff.length = newColumn.length\n hasChanges = true\n }\n\n if (oldColumn.isPrimaryKey !== newColumn.isPrimaryKey) {\n diff.isPrimaryKey = newColumn.isPrimaryKey\n hasChanges = true\n }\n\n if (oldColumn.notNull !== newColumn.notNull) {\n diff.notNull = newColumn.notNull\n hasChanges = true\n }\n\n const oldDefault = oldColumn.hasDbDefault ? oldColumn.dbDefault : undefined\n const newDefault = newColumn.hasDbDefault ? newColumn.dbDefault : undefined\n if (oldDefault !== newDefault) {\n diff.hasDbDefault = newColumn.hasDbDefault\n diff.dbDefault = newColumn.dbDefault\n hasChanges = true\n }\n\n if (oldColumn.isUnique !== newColumn.isUnique) {\n diff.isUnique = newColumn.isUnique\n hasChanges = true\n }\n\n return hasChanges ? diff : null\n}\n\nfunction generateReverseColumnDefinitionDiff(\n changes: ColumnDefinitionDiff,\n oldColumn: ColumnDefinition,\n): ColumnDefinitionDiff {\n const reverseDiff: ColumnDefinitionDiff = {}\n\n if (changes.dataType !== undefined) {\n reverseDiff.dataType = oldColumn.dataType\n reverseDiff.length = oldColumn.length\n }\n\n if (changes.isPrimaryKey !== undefined) {\n reverseDiff.isPrimaryKey = oldColumn.isPrimaryKey\n }\n\n if (changes.notNull !== undefined) {\n reverseDiff.notNull = oldColumn.notNull\n }\n\n if (changes.hasDbDefault !== undefined) {\n reverseDiff.hasDbDefault = oldColumn.hasDbDefault\n reverseDiff.dbDefault = oldColumn.dbDefault\n }\n\n if (changes.isUnique !== undefined) {\n reverseDiff.isUnique = oldColumn.isUnique\n }\n\n return reverseDiff\n}\n\nfunction generateMigrationActions(stateDiff: StateDiff, _newState: DatabaseState, oldState: DatabaseState) {\n const actions: MigrationAction[] = []\n const downActions: MigrationAction[] = []\n\n // Added actions\n for (const action of stateDiff.added) {\n actions.push(action)\n if (action instanceof CreateTableAction) {\n downActions.unshift(new DropTableAction(action.table))\n } else if (action instanceof AddColumnAction) {\n downActions.unshift(new DropColumnAction(action.table, action.column.name))\n }\n }\n\n // Removed actions\n for (const action of stateDiff.removed) {\n actions.push(action)\n if (action instanceof DropTableAction) {\n const tableDef = oldState.tables[action.table]\n downActions.unshift(\n new CreateTableAction(action.table, Object.values(tableDef.columns), {\n indexes: tableDef.indexes,\n uniqueConstraints: tableDef.uniqueConstraints,\n }),\n )\n } else if (action instanceof DropColumnAction) {\n const columnDef = oldState.tables[action.table].columns[action.columnName]\n downActions.unshift(new AddColumnAction(action.table, columnDef))\n }\n }\n\n // Modified actions\n for (const action of stateDiff.modified) {\n actions.push(action)\n // Generate reverse diff for down action\n if (action instanceof AlterColumnAction) {\n const reverseDiff = generateReverseColumnDefinitionDiff(\n action.changes,\n oldState.tables[action.table].columns[action.columnName],\n )\n downActions.unshift(new AlterColumnAction(action.table, action.columnName, reverseDiff))\n }\n }\n\n // Foreign key constraints\n for (const fkAction of stateDiff.foreignKeys) {\n actions.push(fkAction)\n if (fkAction instanceof AddForeignKeyConstraintAction) {\n downActions.unshift(new DropForeignKeyConstraintAction(fkAction.table, fkAction.columnName))\n } else if (fkAction instanceof DropForeignKeyConstraintAction) {\n const oldColumnDef = oldState.tables[fkAction.table].columns[fkAction.columnName]\n if (oldColumnDef.references) {\n const [referencedTable, referencedColumn] = oldColumnDef.references.split('.')\n downActions.unshift(\n new AddForeignKeyConstraintAction(fkAction.table, fkAction.columnName, referencedTable, referencedColumn, {\n onDelete: oldColumnDef.onDelete,\n onUpdate: oldColumnDef.onUpdate,\n }),\n )\n }\n }\n }\n\n // Indexes\n for (const indexAction of stateDiff.indexes.added) {\n actions.push(indexAction)\n downActions.unshift(new DropIndexAction(indexAction.table, indexAction.columns))\n }\n\n for (const indexAction of stateDiff.indexes.removed) {\n actions.push(indexAction)\n downActions.unshift(new CreateIndexAction(indexAction.table, indexAction.columns))\n }\n\n // Unique constraints\n for (const ucAction of stateDiff.uniqueConstraints.added) {\n actions.push(ucAction)\n downActions.unshift(new DropUniqueConstraintAction(ucAction.table, ucAction.columns))\n }\n\n for (const ucAction of stateDiff.uniqueConstraints.removed) {\n actions.push(ucAction)\n downActions.unshift(new AddUniqueConstraintAction(ucAction.table, ucAction.columns))\n }\n\n return { actions, downActions }\n}\n\nfunction generateMigrationFile(\n actions: MigrationAction[],\n downActions: MigrationAction[],\n timestamp: string,\n migrationsDir = 'migrations',\n) {\n if (!fs.existsSync(migrationsDir)) {\n fs.mkdirSync(migrationsDir)\n }\n\n const fileNameTimestamp = timestamp.replace(/[-: ]/g, '')\n const filePath = path.join(migrationsDir, `${fileNameTimestamp}_migration.ts`)\n\n const importStatements = `import { Kysely } from 'kysely';\nimport {\n MigrationAction,\n CreateTableAction,\n DropTableAction,\n AddColumnAction,\n DropColumnAction,\n AlterColumnAction,\n AddForeignKeyConstraintAction,\n DropForeignKeyConstraintAction,\n CreateIndexAction,\n DropIndexAction,\n AddUniqueConstraintAction,\n DropUniqueConstraintAction,\n executeActions\n} from 'gummy-cli';\n `\n\n const actionInstances = actions.map((action) => action.toCode())\n const downActionInstances = downActions.map((action) => action.toCode())\n\n const fileHeader = `// Generated by Gummy on ${timestamp}`\n\n const migrationFileContent = `${fileHeader}\n\n${importStatements}\n\nexport const actions: MigrationAction[] = [\n ${actionInstances.join(',\\n ')}\n];\n\nexport const downActions: MigrationAction[] = [\n ${downActionInstances.join(',\\n ')}\n];\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function up(db: Kysely<any>): Promise<void> {\n await executeActions(actions, db);\n}\n\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport async function down(db: Kysely<any>): Promise<void> {\n await executeActions(downActions, db);\n}\n`\n\n fs.writeFileSync(filePath, migrationFileContent)\n}\n","import { Command } from 'commander'\nimport { makeMigrations } from '../migrate/makemigrations.js'\n\nexport const makemigrations = new Command().name('makemigrations').action(async () => {\n await makeMigrations()\n})\n","#!/usr/bin/env node\n\nimport { Command } from 'commander'\n\nimport { makemigrations } from './commands/makemigrations.js'\n\nprocess.on('SIGINT', () => process.exit(0))\nprocess.on('SIGTERM', () => process.exit(0))\n\nasync function main() {\n const program = new Command()\n program.addCommand(makemigrations)\n program.parse()\n}\n\nmain()\n"],"mappings":"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"}
package/dist/index.cjs CHANGED
@@ -1,2 +1 @@
1
- "use strict";var p=Object.defineProperty;var U=Object.getOwnPropertyDescriptor;var O=Object.getOwnPropertyNames;var K=Object.prototype.hasOwnProperty;var A=(s,t)=>{for(var e in t)p(s,e,{get:t[e],enumerable:!0})},v=(s,t,e,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let a of O(t))!K.call(s,a)&&a!==e&&p(s,a,{get:()=>t[a],enumerable:!(n=U(t,a))||n.enumerable});return s};var E=s=>v(p({},"__esModule",{value:!0}),s);var _={};A(_,{AddColumnAction:()=>h,AddForeignKeyConstraintAction:()=>m,AddUniqueConstraintAction:()=>y,AlterColumnAction:()=>f,CreateIndexAction:()=>l,CreateTableAction:()=>u,DropColumnAction:()=>d,DropForeignKeyConstraintAction:()=>g,DropIndexAction:()=>b,DropTableAction:()=>c,DropUniqueConstraintAction:()=>x,MigrationAction:()=>i,defineConfig:()=>J,executeActions:()=>w});module.exports=E(_);var D=require("kysely");function C(s,t){if(s.length!==t.length)return!1;let e=[...s].sort(),n=[...t].sort();return e.every((a,r)=>a===n[r])}var i=class{};function N(s){switch(s.dataType){case"BigInteger":return"bigint";case"BigSerial":return"bigserial";case"Boolean":return"boolean";case"Date":return"date";case"Decimal":return"decimal";case"Email":case"Varchar":return s.length?`varchar(${s.length})`:"varchar";case"Integer":return"integer";case"Serial":return"serial";case"Text":return"text";case"Timestamp":return"timestamp";case"UUID":return"uuid";case"Json":return"json";default:throw new Error(`Unsupported ColumnType: ${s.dataType}`)}}function S(s,t){return t.isPrimaryKey&&(s=s.primaryKey()),t.notNull&&(s=s.notNull()),t.isUnique&&(s=s.unique()),t.hasDbDefault&&t.dbDefault!==void 0&&(s=s.defaultTo(t.dbDefault)),s}function T(s){return[...s].sort()}function $(s,t){return`${s}_${t}_fk`}function o(s,t){let e=T(t);return`${s}_${e.join("_")}_unique`}function q(s,t){let e=T(t);return`${s}_${e.join("_")}_idx`}async function w(s,t){for(let e of s)await e.execute(t)}var u=class extends i{constructor(t,e,n){super(),this.table=t,this.columns=e,this.ifNotExists=n?.ifNotExists??!1,this.indexes=n?.indexes,this.uniqueConstraints=n?.uniqueConstraints}applyToState(t){t.tables[this.table]||(t.tables[this.table]={columns:{}});for(let e of this.columns)t.tables[this.table].columns[e.name]={...e};this.indexes&&(t.tables[this.table].indexes=this.indexes),this.uniqueConstraints&&(t.tables[this.table].uniqueConstraints=this.uniqueConstraints)}async execute(t){let e=t.schema.createTable(this.table);this.ifNotExists&&(e=e.ifNotExists());for(let n of this.columns){let a=N(n);e=e.addColumn(n.name,a,r=>S(r,n))}if(this.uniqueConstraints)for(let n of this.uniqueConstraints){let a=o(this.table,n);e=e.addUniqueConstraint(a,n)}if(await e.execute(),this.indexes)for(let n of this.indexes)await new l(n.table,n.columns).execute(t)}toCode(){return`new CreateTableAction(${JSON.stringify(this.table)}, ${JSON.stringify(this.columns)}, ${JSON.stringify({ifNotExists:this.ifNotExists,indexes:this.indexes,uniqueConstraints:this.uniqueConstraints})})`}},c=class extends i{constructor(t,e=!1){super(),this.table=t,this.ifExists=e}applyToState(t){delete t.tables[this.table]}async execute(t){let e=t.schema.dropTable(this.table);this.ifExists&&(e=e.ifExists()),await e.execute()}toCode(){return`new DropTableAction(${JSON.stringify(this.table)}, ${this.ifExists})`}},h=class extends i{constructor(t,e){super(),this.table=t,this.column=e}applyToState(t){t.tables[this.table]||(t.tables[this.table]={columns:{}}),t.tables[this.table].columns[this.column.name]={...this.column}}async execute(t){let e=N(this.column);await t.schema.alterTable(this.table).addColumn(this.column.name,e,n=>S(n,this.column)).execute()}toCode(){return`new AddColumnAction(${JSON.stringify(this.table)}, ${JSON.stringify(this.column)})`}},d=class extends i{constructor(t,e){super(),this.table=t,this.columnName=e}applyToState(t){t.tables[this.table]&&delete t.tables[this.table].columns[this.columnName]}async execute(t){await t.schema.alterTable(this.table).dropColumn(this.columnName).execute()}toCode(){return`new DropColumnAction(${JSON.stringify(this.table)}, ${JSON.stringify(this.columnName)})`}},f=class extends i{constructor(t,e,n){super(),this.table=t,this.columnName=e,this.changes=n}applyToState(t){if(t.tables[this.table]&&t.tables[this.table].columns[this.columnName]){let e=t.tables[this.table].columns[this.columnName];this.changes.dataType!==void 0&&(e.dataType=this.changes.dataType),this.changes.length!==void 0&&(e.length=this.changes.length),this.changes.isPrimaryKey!==void 0&&(e.isPrimaryKey=this.changes.isPrimaryKey),this.changes.notNull!==void 0&&(e.notNull=this.changes.notNull),this.changes.hasDbDefault!==void 0&&(e.hasDbDefault=this.changes.hasDbDefault,e.dbDefault=this.changes.dbDefault),this.changes.isUnique!==void 0&&(e.isUnique=this.changes.isUnique)}}async execute(t){if((this.changes.dataType!==void 0||this.changes.length!==void 0)&&await t.schema.alterTable(this.table).alterColumn(this.columnName,e=>e.setDataType(N({dataType:this.changes.dataType,length:this.changes.length}))).execute(),this.changes.notNull!==void 0&&await t.schema.alterTable(this.table).alterColumn(this.columnName,e=>this.changes.notNull?e.setNotNull():e.dropNotNull()).execute(),this.changes.hasDbDefault!==void 0&&await t.schema.alterTable(this.table).alterColumn(this.columnName,e=>this.changes.hasDbDefault&&this.changes.dbDefault!==void 0?typeof this.changes.dbDefault=="string"&&this.changes.dbDefault.startsWith("sql`")?e.setDefault(D.sql`${this.changes.dbDefault}`):e.setDefault(this.changes.dbDefault):e.dropDefault()).execute(),this.changes.isUnique!==void 0){let e=o(this.table,[this.columnName]);this.changes.isUnique?await t.schema.alterTable(this.table).addUniqueConstraint(e,[this.columnName]).execute():await t.schema.alterTable(this.table).dropConstraint(e).execute()}}toCode(){return`new AlterColumnAction(${JSON.stringify(this.table)}, ${JSON.stringify(this.columnName)}, ${JSON.stringify(this.changes)})`}},m=class extends i{constructor(t,e,n,a,r){super(),this.table=t,this.columnName=e,this.referencedTable=n,this.referencedColumn=a,this.constraintName=$(t,e),this.onDelete=r?.onDelete,this.onUpdate=r?.onUpdate}applyToState(t){t.tables[this.table]&&t.tables[this.table].columns[this.columnName]&&(t.tables[this.table].columns[this.columnName].references=`${this.referencedTable}.${this.referencedColumn}`,t.tables[this.table].columns[this.columnName].onDelete=this.onDelete,t.tables[this.table].columns[this.columnName].onUpdate=this.onUpdate)}async execute(t){let e=t.schema.alterTable(this.table).addForeignKeyConstraint(this.constraintName,[this.columnName],this.referencedTable,[this.referencedColumn]);this.onDelete&&(e=e.onDelete(this.onDelete)),this.onUpdate&&(e=e.onUpdate(this.onUpdate)),await e.execute()}toCode(){return`new AddForeignKeyConstraintAction(${JSON.stringify(this.table)}, ${JSON.stringify(this.columnName)}, ${JSON.stringify(this.referencedTable)}, ${JSON.stringify(this.referencedColumn)}, ${JSON.stringify({onDelete:this.onDelete,onUpdate:this.onUpdate})})`}},g=class extends i{constructor(t,e){super(),this.table=t,this.columnName=e,this.constraintName=$(t,e)}applyToState(t){if(t.tables[this.table]){let e=t.tables[this.table].columns[this.columnName];e&&e.references&&(e.references=void 0,e.onDelete=void 0,e.onUpdate=void 0)}}async execute(t){await t.schema.alterTable(this.table).dropConstraint(this.constraintName).execute()}toCode(){return`new DropForeignKeyConstraintAction(${JSON.stringify(this.table)}, ${JSON.stringify(this.columnName)})`}},l=class extends i{constructor(t,e){super(),this.table=t,this.columns=e,this.indexName=q(t,e)}applyToState(t){t.tables[this.table].indexes||(t.tables[this.table].indexes=[]),t.tables[this.table].indexes.push({table:this.table,columns:this.columns})}async execute(t){await t.schema.createIndex(this.indexName).on(this.table).columns(this.columns).execute()}toCode(){return`new CreateIndexAction(${JSON.stringify(this.table)}, ${JSON.stringify(this.columns)})`}},b=class extends i{constructor(t,e){super(),this.table=t,this.columns=e,this.indexName=q(t,e)}applyToState(t){t.tables[this.table].indexes&&(t.tables[this.table].indexes=t.tables[this.table].indexes.filter(e=>!C(e.columns,this.columns)))}async execute(t){await t.schema.dropIndex(this.indexName).execute()}toCode(){return`new DropIndexAction(${JSON.stringify(this.table)}, ${JSON.stringify(this.columns)})`}},y=class extends i{constructor(t,e){super(),this.table=t,this.columns=e,this.constraintName=o(t,e)}applyToState(t){t.tables[this.table].uniqueConstraints||(t.tables[this.table].uniqueConstraints=[]),t.tables[this.table].uniqueConstraints.push(this.columns)}async execute(t){await t.schema.alterTable(this.table).addUniqueConstraint(this.constraintName,this.columns).execute()}toCode(){return`new AddUniqueConstraintAction(${JSON.stringify(this.table)}, ${JSON.stringify(this.columns)})`}},x=class extends i{constructor(t,e){super(),this.table=t,this.columns=e,this.constraintName=o(t,e)}applyToState(t){t.tables[this.table].uniqueConstraints&&(t.tables[this.table].uniqueConstraints=t.tables[this.table].uniqueConstraints.filter(e=>o(this.table,e)!==this.constraintName))}async execute(t){await t.schema.alterTable(this.table).dropConstraint(this.constraintName).execute()}toCode(){return`new DropUniqueConstraintAction(${JSON.stringify(this.table)}, ${JSON.stringify(this.columns)})`}};var I=require("c12");var J=s=>s;0&&(module.exports={AddColumnAction,AddForeignKeyConstraintAction,AddUniqueConstraintAction,AlterColumnAction,CreateIndexAction,CreateTableAction,DropColumnAction,DropForeignKeyConstraintAction,DropIndexAction,DropTableAction,DropUniqueConstraintAction,MigrationAction,defineConfig,executeActions});
2
- //# sourceMappingURL=index.cjs.map
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require(`./actions-CpCdz4zV.cjs`);exports.AddColumnAction=e.t,exports.AddForeignKeyConstraintAction=e.n,exports.AddUniqueConstraintAction=e.r,exports.AlterColumnAction=e.i,exports.CreateIndexAction=e.a,exports.CreateTableAction=e.o,exports.DropColumnAction=e.s,exports.DropForeignKeyConstraintAction=e.c,exports.DropIndexAction=e.l,exports.DropTableAction=e.u,exports.DropUniqueConstraintAction=e.d,exports.MigrationAction=e.f,exports.defineConfig=e.h,exports.executeActions=e.p;
package/dist/index.d.cts CHANGED
@@ -1,166 +1,170 @@
1
- import { Kysely } from 'kysely';
2
- import { ColumnType } from 'gummy';
1
+ import { Kysely } from "kysely";
2
+ import { ColumnType } from "gummy";
3
3
 
4
+ //#region src/config.d.ts
5
+ type Config = {
6
+ modelsDir?: string;
7
+ migrationsDir?: string;
8
+ };
9
+ declare const defineConfig: (input: Config) => Config;
10
+ //#endregion
11
+ //#region src/migrate/types.d.ts
4
12
  type ColumnTypeStr = `${ColumnType}`;
5
13
  type ColumnDefinition = {
6
- name: string;
7
- dataType: ColumnTypeStr;
8
- length?: number;
9
- isPrimaryKey?: boolean;
10
- notNull?: boolean;
11
- hasDbDefault?: boolean;
12
- dbDefault?: any;
13
- isUnique?: boolean;
14
- references?: string;
15
- onDelete?: 'no action' | 'restrict' | 'cascade' | 'set null' | 'set default';
16
- onUpdate?: 'no action' | 'restrict' | 'cascade' | 'set null' | 'set default';
14
+ name: string;
15
+ dataType: ColumnTypeStr;
16
+ length?: number;
17
+ isPrimaryKey?: boolean;
18
+ notNull?: boolean;
19
+ hasDbDefault?: boolean;
20
+ dbDefault?: any;
21
+ isUnique?: boolean;
22
+ references?: string;
23
+ onDelete?: 'no action' | 'restrict' | 'cascade' | 'set null' | 'set default';
24
+ onUpdate?: 'no action' | 'restrict' | 'cascade' | 'set null' | 'set default';
17
25
  };
18
26
  type ColumnDefinitionDiff = {
19
- dataType?: ColumnTypeStr;
20
- length?: number;
21
- isPrimaryKey?: boolean;
22
- notNull?: boolean;
23
- hasDbDefault?: boolean;
24
- dbDefault?: any;
25
- isUnique?: boolean;
27
+ dataType?: ColumnTypeStr;
28
+ length?: number;
29
+ isPrimaryKey?: boolean;
30
+ notNull?: boolean;
31
+ hasDbDefault?: boolean;
32
+ dbDefault?: any;
33
+ isUnique?: boolean;
26
34
  };
27
35
  type IndexDefinition = {
28
- table: string;
29
- columns: string[];
36
+ table: string;
37
+ columns: string[];
30
38
  };
31
39
  type TableState = {
32
- columns: {
33
- [columnName: string]: ColumnDefinition;
34
- };
35
- indexes?: IndexDefinition[];
36
- uniqueConstraints?: string[][];
40
+ columns: {
41
+ [columnName: string]: ColumnDefinition;
42
+ };
43
+ indexes?: IndexDefinition[];
44
+ uniqueConstraints?: string[][];
37
45
  };
38
46
  type DatabaseState = {
39
- tables: {
40
- [tableName: string]: TableState;
41
- };
47
+ tables: {
48
+ [tableName: string]: TableState;
49
+ };
42
50
  };
43
-
51
+ //#endregion
52
+ //#region src/migrate/actions.d.ts
44
53
  declare abstract class MigrationAction {
45
- abstract applyToState(state: DatabaseState): void;
46
- abstract execute(db: Kysely<any>): Promise<void>;
47
- abstract toCode(): string;
54
+ abstract applyToState(state: DatabaseState): void;
55
+ abstract execute(db: Kysely<any>): Promise<void>;
56
+ abstract toCode(): string;
48
57
  }
49
58
  declare function executeActions(actions: MigrationAction[], db: Kysely<any>): Promise<void>;
50
59
  declare class CreateTableAction extends MigrationAction {
51
- table: string;
52
- columns: ColumnDefinition[];
53
- ifNotExists: boolean;
60
+ table: string;
61
+ columns: ColumnDefinition[];
62
+ ifNotExists: boolean;
63
+ indexes?: IndexDefinition[];
64
+ uniqueConstraints?: string[][];
65
+ constructor(tableName: string, columns: ColumnDefinition[], options?: {
66
+ ifNotExists?: boolean;
54
67
  indexes?: IndexDefinition[];
55
68
  uniqueConstraints?: string[][];
56
- constructor(tableName: string, columns: ColumnDefinition[], options?: {
57
- ifNotExists?: boolean;
58
- indexes?: IndexDefinition[];
59
- uniqueConstraints?: string[][];
60
- });
61
- applyToState(state: DatabaseState): void;
62
- execute(db: Kysely<any>): Promise<void>;
63
- toCode(): string;
69
+ });
70
+ applyToState(state: DatabaseState): void;
71
+ execute(db: Kysely<any>): Promise<void>;
72
+ toCode(): string;
64
73
  }
65
74
  declare class DropTableAction extends MigrationAction {
66
- table: string;
67
- ifExists: boolean;
68
- constructor(tableName: string, ifExists?: boolean);
69
- applyToState(state: DatabaseState): void;
70
- execute(db: Kysely<any>): Promise<void>;
71
- toCode(): string;
75
+ table: string;
76
+ ifExists: boolean;
77
+ constructor(tableName: string, ifExists?: boolean);
78
+ applyToState(state: DatabaseState): void;
79
+ execute(db: Kysely<any>): Promise<void>;
80
+ toCode(): string;
72
81
  }
73
82
  declare class AddColumnAction extends MigrationAction {
74
- table: string;
75
- column: ColumnDefinition;
76
- constructor(tableName: string, column: ColumnDefinition);
77
- applyToState(state: DatabaseState): void;
78
- execute(db: Kysely<any>): Promise<void>;
79
- toCode(): string;
83
+ table: string;
84
+ column: ColumnDefinition;
85
+ constructor(tableName: string, column: ColumnDefinition);
86
+ applyToState(state: DatabaseState): void;
87
+ execute(db: Kysely<any>): Promise<void>;
88
+ toCode(): string;
80
89
  }
81
90
  declare class DropColumnAction extends MigrationAction {
82
- table: string;
83
- columnName: string;
84
- constructor(tableName: string, columnName: string);
85
- applyToState(state: DatabaseState): void;
86
- execute(db: Kysely<any>): Promise<void>;
87
- toCode(): string;
91
+ table: string;
92
+ columnName: string;
93
+ constructor(tableName: string, columnName: string);
94
+ applyToState(state: DatabaseState): void;
95
+ execute(db: Kysely<any>): Promise<void>;
96
+ toCode(): string;
88
97
  }
89
98
  declare class AlterColumnAction extends MigrationAction {
90
- table: string;
91
- columnName: string;
92
- changes: ColumnDefinitionDiff;
93
- constructor(tableName: string, columnName: string, changes: ColumnDefinitionDiff);
94
- applyToState(state: DatabaseState): void;
95
- execute(db: Kysely<any>): Promise<void>;
96
- toCode(): string;
99
+ table: string;
100
+ columnName: string;
101
+ changes: ColumnDefinitionDiff;
102
+ constructor(tableName: string, columnName: string, changes: ColumnDefinitionDiff);
103
+ applyToState(state: DatabaseState): void;
104
+ execute(db: Kysely<any>): Promise<void>;
105
+ toCode(): string;
97
106
  }
98
107
  declare class AddForeignKeyConstraintAction extends MigrationAction {
99
- table: string;
100
- columnName: string;
101
- referencedTable: string;
102
- referencedColumn: string;
103
- constraintName: string;
108
+ table: string;
109
+ columnName: string;
110
+ referencedTable: string;
111
+ referencedColumn: string;
112
+ constraintName: string;
113
+ onDelete?: 'no action' | 'restrict' | 'cascade' | 'set null' | 'set default';
114
+ onUpdate?: 'no action' | 'restrict' | 'cascade' | 'set null' | 'set default';
115
+ constructor(tableName: string, columnName: string, referencedTable: string, referencedColumn: string, options?: {
104
116
  onDelete?: 'no action' | 'restrict' | 'cascade' | 'set null' | 'set default';
105
117
  onUpdate?: 'no action' | 'restrict' | 'cascade' | 'set null' | 'set default';
106
- constructor(tableName: string, columnName: string, referencedTable: string, referencedColumn: string, options?: {
107
- onDelete?: 'no action' | 'restrict' | 'cascade' | 'set null' | 'set default';
108
- onUpdate?: 'no action' | 'restrict' | 'cascade' | 'set null' | 'set default';
109
- });
110
- applyToState(state: DatabaseState): void;
111
- execute(db: Kysely<any>): Promise<void>;
112
- toCode(): string;
118
+ });
119
+ applyToState(state: DatabaseState): void;
120
+ execute(db: Kysely<any>): Promise<void>;
121
+ toCode(): string;
113
122
  }
114
123
  declare class DropForeignKeyConstraintAction extends MigrationAction {
115
- table: string;
116
- columnName: string;
117
- constraintName: string;
118
- constructor(tableName: string, columnName: string);
119
- applyToState(state: DatabaseState): void;
120
- execute(db: Kysely<any>): Promise<void>;
121
- toCode(): string;
124
+ table: string;
125
+ columnName: string;
126
+ constraintName: string;
127
+ constructor(tableName: string, columnName: string);
128
+ applyToState(state: DatabaseState): void;
129
+ execute(db: Kysely<any>): Promise<void>;
130
+ toCode(): string;
122
131
  }
123
132
  declare class CreateIndexAction extends MigrationAction {
124
- table: string;
125
- columns: string[];
126
- indexName: string;
127
- constructor(table: string, columns: string[]);
128
- applyToState(state: DatabaseState): void;
129
- execute(db: Kysely<any>): Promise<void>;
130
- toCode(): string;
133
+ table: string;
134
+ columns: string[];
135
+ indexName: string;
136
+ constructor(table: string, columns: string[]);
137
+ applyToState(state: DatabaseState): void;
138
+ execute(db: Kysely<any>): Promise<void>;
139
+ toCode(): string;
131
140
  }
132
141
  declare class DropIndexAction extends MigrationAction {
133
- table: string;
134
- columns: string[];
135
- indexName: string;
136
- constructor(table: string, columns: string[]);
137
- applyToState(state: DatabaseState): void;
138
- execute(db: Kysely<any>): Promise<void>;
139
- toCode(): string;
142
+ table: string;
143
+ columns: string[];
144
+ indexName: string;
145
+ constructor(table: string, columns: string[]);
146
+ applyToState(state: DatabaseState): void;
147
+ execute(db: Kysely<any>): Promise<void>;
148
+ toCode(): string;
140
149
  }
141
150
  declare class AddUniqueConstraintAction extends MigrationAction {
142
- table: string;
143
- columns: string[];
144
- constraintName: string;
145
- constructor(tableName: string, columns: string[]);
146
- applyToState(state: DatabaseState): void;
147
- execute(db: Kysely<any>): Promise<void>;
148
- toCode(): string;
151
+ table: string;
152
+ columns: string[];
153
+ constraintName: string;
154
+ constructor(tableName: string, columns: string[]);
155
+ applyToState(state: DatabaseState): void;
156
+ execute(db: Kysely<any>): Promise<void>;
157
+ toCode(): string;
149
158
  }
150
159
  declare class DropUniqueConstraintAction extends MigrationAction {
151
- table: string;
152
- columns: string[];
153
- constraintName: string;
154
- constructor(tableName: string, columns: string[]);
155
- applyToState(state: DatabaseState): void;
156
- execute(db: Kysely<any>): Promise<void>;
157
- toCode(): string;
160
+ table: string;
161
+ columns: string[];
162
+ constraintName: string;
163
+ constructor(tableName: string, columns: string[]);
164
+ applyToState(state: DatabaseState): void;
165
+ execute(db: Kysely<any>): Promise<void>;
166
+ toCode(): string;
158
167
  }
159
-
160
- type Config = {
161
- modelsDir?: string;
162
- migrationsDir?: string;
163
- };
164
- declare const defineConfig: (input: Config) => Config;
165
-
168
+ //#endregion
166
169
  export { AddColumnAction, AddForeignKeyConstraintAction, AddUniqueConstraintAction, AlterColumnAction, CreateIndexAction, CreateTableAction, DropColumnAction, DropForeignKeyConstraintAction, DropIndexAction, DropTableAction, DropUniqueConstraintAction, MigrationAction, defineConfig, executeActions };
170
+ //# sourceMappingURL=index.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.cts","names":[],"sources":["../src/config.ts","../src/migrate/types.ts","../src/migrate/actions.ts"],"mappings":";;;;KAEY,MAAA;EACV,SAAA;EACA,aAAA;AAAA;AAAA,cAeW,YAAA,GAAgB,KAAA,EAAO,MAAA,KAAS,MAAA;;;KCjBjC,aAAA,MAAmB,UAAA;AAAA,KAEnB,gBAAA;EACV,IAAA;EACA,QAAA,EAAU,aAAA;EACV,MAAA;EACA,YAAA;EACA,OAAA;EACA,YAAA;EACA,SAAA;EACA,QAAA;EACA,UAAA;EACA,QAAA;EACA,QAAA;AAAA;AAAA,KAGU,oBAAA;EACV,QAAA,GAAW,aAAA;EACX,MAAA;EACA,YAAA;EACA,OAAA;EACA,YAAA;EACA,SAAA;EACA,QAAA;AAAA;AAAA,KAGU,eAAA;EACV,KAAA;EACA,OAAA;AAAA;AAAA,KAGU,UAAA;EACV,OAAA;IAAA,CAAY,UAAA,WAAqB,gBAAA;EAAA;EACjC,OAAA,GAAU,eAAA;EACV,iBAAA;AAAA;AAAA,KAGU,aAAA;EACV,MAAA;IAAA,CACG,SAAA,WAAoB,UAAA;EAAA;AAAA;;;uBCrCH,eAAA;EAAA,SACX,YAAA,CAAa,KAAA,EAAO,aAAA;EAAA,SACpB,OAAA,CAAQ,EAAA,EAAI,MAAA,QAAc,OAAA;EAAA,SAC1B,MAAA,CAAA;AAAA;AAAA,iBA0EW,cAAA,CAAe,OAAA,EAAS,eAAA,IAAmB,EAAA,EAAI,MAAA,QAAc,OAAA;AAAA,cAQtE,iBAAA,SAA0B,eAAA;EACrC,KAAA;EACA,OAAA,EAAS,gBAAA;EACT,WAAA;EACA,OAAA,GAAU,eAAA;EACV,iBAAA;cAGE,SAAA,UACA,OAAA,EAAS,gBAAA,IACT,OAAA;IACE,WAAA;IACA,OAAA,GAAU,eAAA;IACV,iBAAA;EAAA;EAWJ,YAAA,CAAa,KAAA,EAAO,aAAA;EAed,OAAA,CAAQ,EAAA,EAAI,MAAA,QAAW,OAAA;EA0B7B,MAAA,CAAA;AAAA;AAAA,cASW,eAAA,SAAwB,eAAA;EACnC,KAAA;EACA,QAAA;cAEY,SAAA,UAAmB,QAAA;EAM/B,YAAA,CAAa,KAAA,EAAO,aAAA;EAId,OAAA,CAAQ,EAAA,EAAI,MAAA,QAAW,OAAA;EAQ7B,MAAA,CAAA;AAAA;AAAA,cAKW,eAAA,SAAwB,eAAA;EACnC,KAAA;EACA,MAAA,EAAQ,gBAAA;cAEI,SAAA,UAAmB,MAAA,EAAQ,gBAAA;EAMvC,YAAA,CAAa,KAAA,EAAO,aAAA;EAOd,OAAA,CAAQ,EAAA,EAAI,MAAA,QAAW,OAAA;EAQ7B,MAAA,CAAA;AAAA;AAAA,cAMW,gBAAA,SAAyB,eAAA;EACpC,KAAA;EACA,UAAA;cAEY,SAAA,UAAmB,UAAA;EAM/B,YAAA,CAAa,KAAA,EAAO,aAAA;EAMd,OAAA,CAAQ,EAAA,EAAI,MAAA,QAAW,OAAA;EAI7B,MAAA,CAAA;AAAA;AAAA,cAKW,iBAAA,SAA0B,eAAA;EACrC,KAAA;EACA,UAAA;EACA,OAAA,EAAS,oBAAA;cAEG,SAAA,UAAmB,UAAA,UAAoB,OAAA,EAAS,oBAAA;EAO5D,YAAA,CAAa,KAAA,EAAO,aAAA;EAyBd,OAAA,CAAQ,EAAA,EAAI,MAAA,QAAW,OAAA;EAiD7B,MAAA,CAAA;AAAA;AAAA,cAOW,6BAAA,SAAsC,eAAA;EACjD,KAAA;EACA,UAAA;EACA,eAAA;EACA,gBAAA;EACA,cAAA;EACA,QAAA;EACA,QAAA;cAGE,SAAA,UACA,UAAA,UACA,eAAA,UACA,gBAAA,UACA,OAAA;IACE,QAAA;IACA,QAAA;EAAA;EAaJ,YAAA,CAAa,KAAA,EAAO,aAAA;EAQd,OAAA,CAAQ,EAAA,EAAI,MAAA,QAAW,OAAA;EAe7B,MAAA,CAAA;AAAA;AAAA,cAYW,8BAAA,SAAuC,eAAA;EAClD,KAAA;EACA,UAAA;EACA,cAAA;cAEY,SAAA,UAAmB,UAAA;EAO/B,YAAA,CAAa,KAAA,EAAO,aAAA;EAWd,OAAA,CAAQ,EAAA,EAAI,MAAA,QAAW,OAAA;EAI7B,MAAA,CAAA;AAAA;AAAA,cAKW,iBAAA,SAA0B,eAAA;EACrC,KAAA;EACA,OAAA;EACA,SAAA;cAEY,KAAA,UAAe,OAAA;EAO3B,YAAA,CAAa,KAAA,EAAO,aAAA;EAUd,OAAA,CAAQ,EAAA,EAAI,MAAA,QAAW,OAAA;EAI7B,MAAA,CAAA;AAAA;AAAA,cAKW,eAAA,SAAwB,eAAA;EACnC,KAAA;EACA,OAAA;EACA,SAAA;cAEY,KAAA,UAAe,OAAA;EAO3B,YAAA,CAAa,KAAA,EAAO,aAAA;EAQd,OAAA,CAAQ,EAAA,EAAI,MAAA,QAAW,OAAA;EAI7B,MAAA,CAAA;AAAA;AAAA,cAKW,yBAAA,SAAkC,eAAA;EAC7C,KAAA;EACA,OAAA;EACA,cAAA;cAEY,SAAA,UAAmB,OAAA;EAO/B,YAAA,CAAa,KAAA,EAAO,aAAA;EAOd,OAAA,CAAQ,EAAA,EAAI,MAAA,QAAW,OAAA;EAI7B,MAAA,CAAA;AAAA;AAAA,cAKW,0BAAA,SAAmC,eAAA;EAC9C,KAAA;EACA,OAAA;EACA,cAAA;cAEY,SAAA,UAAmB,OAAA;EAO/B,YAAA,CAAa,KAAA,EAAO,aAAA;EAQd,OAAA,CAAQ,EAAA,EAAI,MAAA,QAAW,OAAA;EAI7B,MAAA,CAAA;AAAA"}
@@ -0,0 +1,170 @@
1
+ import { Kysely } from "kysely";
2
+ import { ColumnType } from "gummy";
3
+
4
+ //#region src/config.d.ts
5
+ type Config = {
6
+ modelsDir?: string;
7
+ migrationsDir?: string;
8
+ };
9
+ declare const defineConfig: (input: Config) => Config;
10
+ //#endregion
11
+ //#region src/migrate/types.d.ts
12
+ type ColumnTypeStr = `${ColumnType}`;
13
+ type ColumnDefinition = {
14
+ name: string;
15
+ dataType: ColumnTypeStr;
16
+ length?: number;
17
+ isPrimaryKey?: boolean;
18
+ notNull?: boolean;
19
+ hasDbDefault?: boolean;
20
+ dbDefault?: any;
21
+ isUnique?: boolean;
22
+ references?: string;
23
+ onDelete?: 'no action' | 'restrict' | 'cascade' | 'set null' | 'set default';
24
+ onUpdate?: 'no action' | 'restrict' | 'cascade' | 'set null' | 'set default';
25
+ };
26
+ type ColumnDefinitionDiff = {
27
+ dataType?: ColumnTypeStr;
28
+ length?: number;
29
+ isPrimaryKey?: boolean;
30
+ notNull?: boolean;
31
+ hasDbDefault?: boolean;
32
+ dbDefault?: any;
33
+ isUnique?: boolean;
34
+ };
35
+ type IndexDefinition = {
36
+ table: string;
37
+ columns: string[];
38
+ };
39
+ type TableState = {
40
+ columns: {
41
+ [columnName: string]: ColumnDefinition;
42
+ };
43
+ indexes?: IndexDefinition[];
44
+ uniqueConstraints?: string[][];
45
+ };
46
+ type DatabaseState = {
47
+ tables: {
48
+ [tableName: string]: TableState;
49
+ };
50
+ };
51
+ //#endregion
52
+ //#region src/migrate/actions.d.ts
53
+ declare abstract class MigrationAction {
54
+ abstract applyToState(state: DatabaseState): void;
55
+ abstract execute(db: Kysely<any>): Promise<void>;
56
+ abstract toCode(): string;
57
+ }
58
+ declare function executeActions(actions: MigrationAction[], db: Kysely<any>): Promise<void>;
59
+ declare class CreateTableAction extends MigrationAction {
60
+ table: string;
61
+ columns: ColumnDefinition[];
62
+ ifNotExists: boolean;
63
+ indexes?: IndexDefinition[];
64
+ uniqueConstraints?: string[][];
65
+ constructor(tableName: string, columns: ColumnDefinition[], options?: {
66
+ ifNotExists?: boolean;
67
+ indexes?: IndexDefinition[];
68
+ uniqueConstraints?: string[][];
69
+ });
70
+ applyToState(state: DatabaseState): void;
71
+ execute(db: Kysely<any>): Promise<void>;
72
+ toCode(): string;
73
+ }
74
+ declare class DropTableAction extends MigrationAction {
75
+ table: string;
76
+ ifExists: boolean;
77
+ constructor(tableName: string, ifExists?: boolean);
78
+ applyToState(state: DatabaseState): void;
79
+ execute(db: Kysely<any>): Promise<void>;
80
+ toCode(): string;
81
+ }
82
+ declare class AddColumnAction extends MigrationAction {
83
+ table: string;
84
+ column: ColumnDefinition;
85
+ constructor(tableName: string, column: ColumnDefinition);
86
+ applyToState(state: DatabaseState): void;
87
+ execute(db: Kysely<any>): Promise<void>;
88
+ toCode(): string;
89
+ }
90
+ declare class DropColumnAction extends MigrationAction {
91
+ table: string;
92
+ columnName: string;
93
+ constructor(tableName: string, columnName: string);
94
+ applyToState(state: DatabaseState): void;
95
+ execute(db: Kysely<any>): Promise<void>;
96
+ toCode(): string;
97
+ }
98
+ declare class AlterColumnAction extends MigrationAction {
99
+ table: string;
100
+ columnName: string;
101
+ changes: ColumnDefinitionDiff;
102
+ constructor(tableName: string, columnName: string, changes: ColumnDefinitionDiff);
103
+ applyToState(state: DatabaseState): void;
104
+ execute(db: Kysely<any>): Promise<void>;
105
+ toCode(): string;
106
+ }
107
+ declare class AddForeignKeyConstraintAction extends MigrationAction {
108
+ table: string;
109
+ columnName: string;
110
+ referencedTable: string;
111
+ referencedColumn: string;
112
+ constraintName: string;
113
+ onDelete?: 'no action' | 'restrict' | 'cascade' | 'set null' | 'set default';
114
+ onUpdate?: 'no action' | 'restrict' | 'cascade' | 'set null' | 'set default';
115
+ constructor(tableName: string, columnName: string, referencedTable: string, referencedColumn: string, options?: {
116
+ onDelete?: 'no action' | 'restrict' | 'cascade' | 'set null' | 'set default';
117
+ onUpdate?: 'no action' | 'restrict' | 'cascade' | 'set null' | 'set default';
118
+ });
119
+ applyToState(state: DatabaseState): void;
120
+ execute(db: Kysely<any>): Promise<void>;
121
+ toCode(): string;
122
+ }
123
+ declare class DropForeignKeyConstraintAction extends MigrationAction {
124
+ table: string;
125
+ columnName: string;
126
+ constraintName: string;
127
+ constructor(tableName: string, columnName: string);
128
+ applyToState(state: DatabaseState): void;
129
+ execute(db: Kysely<any>): Promise<void>;
130
+ toCode(): string;
131
+ }
132
+ declare class CreateIndexAction extends MigrationAction {
133
+ table: string;
134
+ columns: string[];
135
+ indexName: string;
136
+ constructor(table: string, columns: string[]);
137
+ applyToState(state: DatabaseState): void;
138
+ execute(db: Kysely<any>): Promise<void>;
139
+ toCode(): string;
140
+ }
141
+ declare class DropIndexAction extends MigrationAction {
142
+ table: string;
143
+ columns: string[];
144
+ indexName: string;
145
+ constructor(table: string, columns: string[]);
146
+ applyToState(state: DatabaseState): void;
147
+ execute(db: Kysely<any>): Promise<void>;
148
+ toCode(): string;
149
+ }
150
+ declare class AddUniqueConstraintAction extends MigrationAction {
151
+ table: string;
152
+ columns: string[];
153
+ constraintName: string;
154
+ constructor(tableName: string, columns: string[]);
155
+ applyToState(state: DatabaseState): void;
156
+ execute(db: Kysely<any>): Promise<void>;
157
+ toCode(): string;
158
+ }
159
+ declare class DropUniqueConstraintAction extends MigrationAction {
160
+ table: string;
161
+ columns: string[];
162
+ constraintName: string;
163
+ constructor(tableName: string, columns: string[]);
164
+ applyToState(state: DatabaseState): void;
165
+ execute(db: Kysely<any>): Promise<void>;
166
+ toCode(): string;
167
+ }
168
+ //#endregion
169
+ export { AddColumnAction, AddForeignKeyConstraintAction, AddUniqueConstraintAction, AlterColumnAction, CreateIndexAction, CreateTableAction, DropColumnAction, DropForeignKeyConstraintAction, DropIndexAction, DropTableAction, DropUniqueConstraintAction, MigrationAction, defineConfig, executeActions };
170
+ //# sourceMappingURL=index.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.mts","names":[],"sources":["../src/config.ts","../src/migrate/types.ts","../src/migrate/actions.ts"],"mappings":"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"}
package/dist/index.mjs ADDED
@@ -0,0 +1 @@
1
+ import{a as e,c as t,d as n,f as r,h as i,i as a,l as o,n as s,o as c,p as l,r as u,s as d,t as f,u as p}from"./actions-DB7AAmD9.mjs";export{f as AddColumnAction,s as AddForeignKeyConstraintAction,u as AddUniqueConstraintAction,a as AlterColumnAction,e as CreateIndexAction,c as CreateTableAction,d as DropColumnAction,t as DropForeignKeyConstraintAction,o as DropIndexAction,p as DropTableAction,n as DropUniqueConstraintAction,r as MigrationAction,i as defineConfig,l as executeActions};