UNPKG

@lucidcms/core

Version:

The core of the Lucid CMS. It's responsible for spinning up the API and serving the CMS.

1 lines 4.84 kB
{"version":3,"file":"column-builder.mjs","names":[],"sources":["../../../../src/libs/collection/migration/column-builder.ts"],"sourcesContent":["import type {\n\tAlterTableBuilder,\n\tAlterTableColumnAlteringBuilder,\n\tCreateTableBuilder,\n} from \"kysely\";\nimport type DatabaseAdapter from \"../../../libs/db/adapter-base.js\";\nimport type {\n\tAddColumnOperation,\n\tModifyColumnOperation,\n\tRemoveColumnOperation,\n} from \"./types.js\";\n\n/**\n * Adds a column to a table using the provided query builder\n */\nexport const addColumn = <\n\tT extends\n\t\t| CreateTableBuilder<string, never>\n\t\t| AlterTableColumnAlteringBuilder\n\t\t| AlterTableBuilder,\n>(\n\tquery: T,\n\toperation: AddColumnOperation,\n\tdb: DatabaseAdapter,\n): T => {\n\treturn query.addColumn(\n\t\toperation.column.name,\n\t\toperation.column.type,\n\t\t(column) => {\n\t\t\tlet columnBuilder = column;\n\n\t\t\tif (operation.column.primary) {\n\t\t\t\tcolumnBuilder = db.primaryKeyColumnBuilder(columnBuilder);\n\t\t\t}\n\n\t\t\tif (operation.column.nullable === false) {\n\t\t\t\tcolumnBuilder = columnBuilder.notNull();\n\t\t\t}\n\n\t\t\tif (operation.column.default !== undefined) {\n\t\t\t\tconst defaultVal = db.formatDefaultValue(\n\t\t\t\t\toperation.column.type,\n\t\t\t\t\toperation.column.default,\n\t\t\t\t);\n\t\t\t\tif (defaultVal !== null) {\n\t\t\t\t\tcolumnBuilder = columnBuilder.defaultTo(defaultVal);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (operation.column.foreignKey) {\n\t\t\t\tcolumnBuilder = columnBuilder.references(\n\t\t\t\t\t`${operation.column.foreignKey.table}.${operation.column.foreignKey.column}`,\n\t\t\t\t);\n\n\t\t\t\tif (operation.column.foreignKey.onDelete) {\n\t\t\t\t\tcolumnBuilder = columnBuilder.onDelete(\n\t\t\t\t\t\toperation.column.foreignKey.onDelete,\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tif (operation.column.foreignKey.onUpdate) {\n\t\t\t\t\tcolumnBuilder = columnBuilder.onUpdate(\n\t\t\t\t\t\toperation.column.foreignKey.onUpdate,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn columnBuilder;\n\t\t},\n\t) as T;\n};\n\n/**\n * Drops a column from a table using the provided query builder\n */\nexport const dropColumn = <\n\tT extends AlterTableColumnAlteringBuilder | AlterTableBuilder,\n>(\n\tquery: T,\n\toperation: RemoveColumnOperation,\n): T => {\n\treturn query.dropColumn(operation.columnName) as T;\n};\n\n/**\n * Modifies an existing column in a table using the provided query builder.\n * For simple changes (nullable, default), uses alterColumn.\n * For complex changes (type, unique, foreign key), a drop then add column operation is created\n */\nexport const modifyColumn = <\n\tT extends AlterTableColumnAlteringBuilder | AlterTableBuilder,\n>(\n\tquery: T,\n\toperation: ModifyColumnOperation,\n\tdb: DatabaseAdapter,\n): T => {\n\tif (!db.supports(\"alterColumn\")) return query;\n\n\tlet alteredQuery = query;\n\n\t//* change nullable if needed\n\tif (operation.changes.nullable !== undefined) {\n\t\talteredQuery = alteredQuery.alterColumn(operation.column.name, (col) =>\n\t\t\toperation.changes.nullable?.to ? col.dropNotNull() : col.setNotNull(),\n\t\t) as T;\n\t}\n\n\t//* change default if needed\n\tif (operation.changes.default !== undefined) {\n\t\t// @ts-expect-error\n\t\talteredQuery = alteredQuery.alterColumn(operation.column.name, (col) => {\n\t\t\tif (\n\t\t\t\toperation.changes.default?.to === undefined ||\n\t\t\t\toperation.changes.default?.to === null\n\t\t\t) {\n\t\t\t\treturn col.dropDefault();\n\t\t\t}\n\t\t\tconst defaultValue = db.formatDefaultValue(\n\t\t\t\toperation.column.type,\n\t\t\t\toperation.changes.default?.to,\n\t\t\t);\n\t\t\treturn defaultValue !== null ? col.setDefault(defaultValue) : col;\n\t\t}) as T;\n\t}\n\n\treturn alteredQuery;\n};\n"],"mappings":"AAeA,MAAa,GAMZ,EACA,EACA,IAEO,EAAM,UACZ,EAAU,OAAO,KACjB,EAAU,OAAO,KAChB,GAAW,CACX,IAAI,EAAgB,EAUpB,GARI,EAAU,OAAO,UACpB,EAAgB,EAAG,wBAAwB,CAAa,GAGrD,EAAU,OAAO,WAAa,KACjC,EAAgB,EAAc,QAAQ,GAGnC,EAAU,OAAO,UAAY,IAAA,GAAW,CAC3C,IAAM,EAAa,EAAG,mBACrB,EAAU,OAAO,KACjB,EAAU,OAAO,OAClB,EACI,IAAe,OAClB,EAAgB,EAAc,UAAU,CAAU,EAEpD,CAoBA,OAlBI,EAAU,OAAO,aACpB,EAAgB,EAAc,WAC7B,GAAG,EAAU,OAAO,WAAW,MAAM,GAAG,EAAU,OAAO,WAAW,QACrE,EAEI,EAAU,OAAO,WAAW,WAC/B,EAAgB,EAAc,SAC7B,EAAU,OAAO,WAAW,QAC7B,GAGG,EAAU,OAAO,WAAW,WAC/B,EAAgB,EAAc,SAC7B,EAAU,OAAO,WAAW,QAC7B,IAIK,CACR,CACD,EAMY,GAGZ,EACA,IAEO,EAAM,WAAW,EAAU,UAAU,EAQhC,GAGZ,EACA,EACA,IACO,CACP,GAAI,CAAC,EAAG,SAAS,aAAa,EAAG,OAAO,EAExC,IAAI,EAAe,EA2BnB,OAxBI,EAAU,QAAQ,WAAa,IAAA,KAClC,EAAe,EAAa,YAAY,EAAU,OAAO,KAAO,GAC/D,EAAU,QAAQ,UAAU,GAAK,EAAI,YAAY,EAAI,EAAI,WAAW,CACrE,GAIG,EAAU,QAAQ,UAAY,IAAA,KAEjC,EAAe,EAAa,YAAY,EAAU,OAAO,KAAO,GAAQ,CACvE,GACC,EAAU,QAAQ,SAAS,KAAO,IAAA,IAClC,EAAU,QAAQ,SAAS,KAAO,KAElC,OAAO,EAAI,YAAY,EAExB,IAAM,EAAe,EAAG,mBACvB,EAAU,OAAO,KACjB,EAAU,QAAQ,SAAS,EAC5B,EACA,OAAO,IAAiB,KAAsC,EAA/B,EAAI,WAAW,CAAY,CAC3D,CAAC,GAGK,CACR"}