UNPKG

kysely-codegen

Version:

`kysely-codegen` generates Kysely type definitions from your database. That's it.

128 lines 6.3 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.migrate = exports.addExtraColumn = void 0; const kysely_1 = require("kysely"); const node_assert_1 = __importDefault(require("node:assert")); const dialect_1 = require("./dialect"); const mysql_dialect_1 = require("./dialects/mysql/mysql-dialect"); const postgres_dialect_1 = require("./dialects/postgres/postgres-dialect"); const down = async (db, dialect) => { (0, node_assert_1.default)(dialect instanceof dialect_1.IntrospectorDialect); await db.schema.dropTable('boolean').ifExists().execute(); await db.schema.dropTable('foo_bar').ifExists().execute(); if (dialect instanceof postgres_dialect_1.PostgresIntrospectorDialect) { await db.schema.dropSchema('cli').ifExists().cascade().execute(); await db.schema.withSchema('test').dropType('status').ifExists().execute(); await db.schema.withSchema('test').dropType('is_bool').ifExists().execute(); await db.schema.dropSchema('test').ifExists().execute(); await db.schema.dropType('status').ifExists().execute(); await db.schema.dropType('pos_int_child').ifExists().execute(); await db.schema.dropType('pos_int').ifExists().execute(); await db.schema.dropTable('partitioned_table').ifExists().execute(); await db.schema.dropTable('enum').ifExists().execute(); } }; const up = async (db, dialect) => { (0, node_assert_1.default)(dialect instanceof dialect_1.IntrospectorDialect); await down(db, dialect); if (dialect instanceof postgres_dialect_1.PostgresIntrospectorDialect) { await db.schema.createSchema('test').execute(); await (0, kysely_1.sql) `create domain test.is_bool as boolean;`.execute(db); await db.schema .withSchema('test') .createType('status') .asEnum(['ABC_DEF', 'GHI_JKL']) .execute(); await db.schema .createType('status') .asEnum(['CONFIRMED', 'UNCONFIRMED']) .execute(); await (0, kysely_1.sql) `create domain pos_int as integer constraint positive_number check (value >= 0);`.execute(db); // Edge case where a domain is a child of another domain: await (0, kysely_1.sql) `create domain pos_int_child as pos_int;`.execute(db); } let builder = db.schema .createTable('foo_bar') .addColumn('false', 'boolean', (col) => col.notNull()) .addColumn('true', 'boolean', (col) => col.notNull()) .addColumn('overridden', (0, kysely_1.sql) `text`); if (dialect instanceof mysql_dialect_1.MysqlIntrospectorDialect) { builder = builder .addColumn('id', 'serial') .addColumn('user_status', (0, kysely_1.sql) `enum('CONFIRMED','UNCONFIRMED')`); } else if (dialect instanceof postgres_dialect_1.PostgresIntrospectorDialect) { builder = builder .addColumn('id', 'serial') .addColumn('date', 'date') .addColumn('user_status', (0, kysely_1.sql) `status`) .addColumn('user_status_2', (0, kysely_1.sql) `test.status`) .addColumn('array', (0, kysely_1.sql) `text[]`) .addColumn('nullable_pos_int', (0, kysely_1.sql) `pos_int`) .addColumn('defaulted_nullable_pos_int', (0, kysely_1.sql) `pos_int`, (col) => col.defaultTo(0)) .addColumn('defaulted_required_pos_int', (0, kysely_1.sql) `pos_int`, (col) => col.notNull().defaultTo(0)) .addColumn('child_domain', (0, kysely_1.sql) `pos_int_child`) .addColumn('test_domain_is_bool', (0, kysely_1.sql) `test.is_bool`) .addColumn('timestamps', (0, kysely_1.sql) `timestamp with time zone[]`) .addColumn('interval1', (0, kysely_1.sql) `interval`) .addColumn('interval2', (0, kysely_1.sql) `interval`) .addColumn('json', (0, kysely_1.sql) `json`) .addColumn('json_typed', (0, kysely_1.sql) `json`) .addColumn('numeric1', (0, kysely_1.sql) `numeric`) .addColumn('numeric2', (0, kysely_1.sql) `numeric`); } else { builder = builder .addColumn('id', 'integer', (col) => col.autoIncrement().notNull().primaryKey()) .addColumn('user_status', 'text'); } await builder.execute(); if (dialect instanceof postgres_dialect_1.PostgresIntrospectorDialect) { await db.executeQuery((0, kysely_1.sql) ` comment on column foo_bar.false is 'This is a comment on a column.\r\n\r\nIt''s nice, isn''t it?'; `.compile(db)); await db.schema .createTable('partitioned_table') .addColumn('id', 'serial') .modifyEnd((0, kysely_1.sql) `partition by range (id)`) .execute(); await db.schema .createTable('enum') .addColumn('name', 'text', (col) => col.primaryKey().notNull()) .execute(); await db.executeQuery((0, kysely_1.sql) `comment on table enum is '@enum';`.compile(db)); await db.schema .alterTable('foo_bar') .addColumn('enum', (0, kysely_1.sql) `text not null references enum(name)`) .execute(); await db .insertInto('enum') .values([{ name: 'foo' }, { name: 'bar' }]) .onConflict((oc) => oc.doNothing()) .execute(); await db.executeQuery((0, kysely_1.sql) ` create table partition_1 partition of partitioned_table for values from (1) to (100); `.compile(db)); } }; const addExtraColumn = async (db) => { await db.schema .alterTable('foo_bar') .addColumn('user_name', 'varchar(50)', (col) => col.defaultTo('test')) .execute(); }; exports.addExtraColumn = addExtraColumn; const migrate = async (dialect, connectionString) => { const db = new kysely_1.Kysely({ dialect: await dialect.createKyselyDialect({ connectionString }), plugins: [new kysely_1.CamelCasePlugin()], }); await up(db, dialect); return db; }; exports.migrate = migrate; //# sourceMappingURL=introspector.fixtures.js.map