diff --git a/main.js b/main.js index aeb73c1..7a02056 100644 --- a/main.js +++ b/main.js @@ -103,7 +103,7 @@ async function updateTypes(db, options) { function toType(c, enums, overrides, isRecord = false) { var _c$default, _c$default2; - let type = ["integer", "numeric", "decimal", "bigint"].includes(c.type) ? "number" : c.type === "boolean" ? "boolean" : c.type === "jsonb" ? isRecord ? "string" : (_c$default = c.default) !== null && _c$default !== void 0 && _c$default.startsWith("'{") ? "Record" : (_c$default2 = c.default) !== null && _c$default2 !== void 0 && _c$default2.startsWith("'[") ? "unknown[]" : "unknown" : c.type === "ARRAY" && c.udt === "_text" ? "string[]" : c.type.startsWith("timestamp") || c.type === "date" ? "Date" : "string"; + let type = ["integer", "numeric", "decimal", "bigint"].includes(c.type) ? "number" : c.type === "boolean" ? "boolean" : c.type === "jsonb" ? isRecord ? "string" : (_c$default = c.default) !== null && _c$default !== void 0 && _c$default.startsWith("'{") ? "Record" : (_c$default2 = c.default) !== null && _c$default2 !== void 0 && _c$default2.startsWith("'[") ? "unknown[]" : "unknown" : c.type === "ARRAY" && (c.udt === "_text" || c.udt === "_citext") ? "string[]" : c.type.startsWith("timestamp") || c.type === "date" ? "Date" : "string"; if (c.type === "USER-DEFINED") { var _enums$find; diff --git a/main.test.ts b/main.test.ts index ba23a00..5aa5160 100644 --- a/main.test.ts +++ b/main.test.ts @@ -11,9 +11,7 @@ beforeAll(async function setup() { await createDatabase(); await db.raw(`CREATE DOMAIN user_id AS TEXT CHECK(VALUE ~ '^[0-9a-z]{6}$')`); - await db.raw( - "CREATE TYPE identity_provider AS ENUM ('google', 'facebook', 'linkedin')" - ); + await db.raw(`CREATE TYPE identity_provider AS ENUM ('google', 'facebook', 'linkedin')`); // prettier-ignore await db.schema.createTable("user", (table) => { table.specificType("id", "user_id").notNullable().primary(); @@ -21,6 +19,7 @@ beforeAll(async function setup() { table.text("name_null"); table.specificType("roles", "text[]").notNullable(); table.specificType("roles_null", "text[]"); + table.specificType("roles_citext", "citext[]").notNullable(); table.jsonb("credentials").notNullable().defaultTo("{}"); table.jsonb("credentials_null"); table.jsonb("events").notNullable().defaultTo("[]"); @@ -65,6 +64,7 @@ test("updateTypes", async function () { name_null: string | null; roles: string[]; roles_null: string[] | null; + roles_citext: string[]; credentials: Record; credentials_null: unknown | null; events: unknown[]; @@ -80,6 +80,7 @@ test("updateTypes", async function () { name_null?: Knex.Raw | string | null; roles: Knex.Raw | string[]; roles_null?: Knex.Raw | string[] | null; + roles_citext: Knex.Raw | string[]; credentials?: Knex.Raw | string; credentials_null?: Knex.Raw | string | null; events?: Knex.Raw | string; @@ -108,8 +109,11 @@ async function createDatabase(): Promise { } } - await db.schema.raw("drop schema if exists public cascade"); - await db.schema.raw("create schema public"); + await db.schema.raw("DROP SCHEMA IF EXISTS public CASCADE"); + await db.schema.raw("CREATE SCHEMA public"); + await db.raw(`CREATE EXTENSION IF NOT EXISTS "uuid-ossp"`); + await db.raw(`CREATE EXTENSION IF NOT EXISTS "hstore"`); + await db.raw(`CREATE EXTENSION IF NOT EXISTS "citext"`); } function toString(stream: PassThrough): Promise { diff --git a/main.ts b/main.ts index 000c2ac..77d6830 100644 --- a/main.ts +++ b/main.ts @@ -160,7 +160,7 @@ function toType( : c.default?.startsWith("'[") ? "unknown[]" : "unknown" - : c.type === "ARRAY" && c.udt === "_text" + : c.type === "ARRAY" && (c.udt === "_text" || c.udt === "_citext") ? "string[]" : c.type.startsWith("timestamp") || c.type === "date" ? "Date" diff --git a/package.json b/package.json index 1b445ef..dfc4cf5 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "knex-types", - "version": "0.1.3", + "version": "0.1.4", "description": "Generates TypeScript definitions (types) from a (PostgreSQL) database schema.", "keywords": [ "database",