@danielhritcu/zenstack-custom 1.1.0
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/cli.cjs +2525 -0
- package/dist/cli.cjs.map +1 -0
- package/dist/cli.d.cts +7 -0
- package/dist/cli.d.ts +7 -0
- package/dist/cli.js +2492 -0
- package/dist/cli.js.map +1 -0
- package/dist/codegen/index.cjs +2745 -0
- package/dist/codegen/index.cjs.map +1 -0
- package/dist/codegen/index.d.cts +265 -0
- package/dist/codegen/index.d.ts +265 -0
- package/dist/codegen/index.js +2668 -0
- package/dist/codegen/index.js.map +1 -0
- package/dist/config-1Cdfs72F.d.cts +97 -0
- package/dist/config-1Cdfs72F.d.ts +97 -0
- package/dist/drizzle/index.cjs +994 -0
- package/dist/drizzle/index.cjs.map +1 -0
- package/dist/drizzle/index.d.cts +224 -0
- package/dist/drizzle/index.d.ts +224 -0
- package/dist/drizzle/index.js +917 -0
- package/dist/drizzle/index.js.map +1 -0
- package/dist/index.cjs +3705 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.d.cts +7 -0
- package/dist/index.d.ts +7 -0
- package/dist/index.js +3575 -0
- package/dist/index.js.map +1 -0
- package/package.json +55 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../src/drizzle/index.ts","../../src/drizzle/define.ts","../../src/drizzle/cols.ts","../../src/drizzle/rls.ts","../../src/drizzle/generate.ts"],"sourcesContent":["// Drizzle helpers barrel export\n\n// define.ts — Custom SQL object builders\nexport {\n ENUM_MAP,\n toPgEnum,\n pgOrmEnum,\n pgTypes,\n pgFunction,\n pgTrigger,\n pgExtension,\n pgCron,\n CustomObject,\n PgFunction,\n TriggerFunction,\n PgTrigger,\n PgExtension,\n PgCronJob,\n} from \"./define\";\nexport type {\n PgTypes,\n ArgsBuilder,\n CustomObjectType,\n TriggerTiming,\n TriggerForEach,\n TriggerEvent,\n FunctionOpts,\n TriggerFunctionOpts,\n TriggerOpts,\n ExtensionOpts,\n CronJobOpts,\n} from \"./define\";\n\n// cols.ts — DRY column helpers\nexport {\n colNumeric,\n colAppSlug,\n colTimestamp,\n colCreatedAt,\n colUpdatedAt,\n colDeletedAt,\n colId,\n auditColumns,\n appSlugForeignKey,\n} from \"./cols\";\n\n// generate.ts — Migration generation pipeline\nexport {\n parseFlags,\n computeHash,\n categorizeChanges,\n formatChangeSummary,\n simpleDiff,\n formatVerboseOutput,\n readJournal,\n getLatestSnapshotPath,\n readSnapshotCustomObjects,\n writeSnapshotCustomObjects,\n packToSgz,\n unpackFromSgz,\n cleanMeta,\n validateTimestamps,\n validateOrder,\n fixOrder,\n collectCustomObjects,\n serializeCustomObject,\n generateDropSQL,\n generate,\n drop,\n custom,\n loadSchemaModules,\n syncMeta,\n} from \"./generate\";\nexport type {\n GenerateFlags,\n CustomHashes,\n CustomObjectEntry,\n CustomObjectsMap,\n ChangeCategory,\n CategorizedChange,\n OrderIssue,\n} from \"./generate\";\n\n// rls.ts — Row-level security helpers\nexport { currentAppSlug, hasAppSlug, currentUser, hasBypassEnabled, FALSE, defaultPolicy } from \"./rls\";\n","// Custom SQL object builder for Drizzle-orm functions and triggers\n// FEATURE: Drizzle custom define API for structured SQL generation\n\nimport { SQL, sql } from \"drizzle-orm\";\nimport { type AnyPgColumn, pgEnum as drizzlePgEnum, type PgTable } from \"drizzle-orm/pg-core\";\n\n/** Symbol to store the original key→value mapping on pgEnum results */\nexport const ENUM_MAP = Symbol.for(\"drizzle:EnumMap\");\n\nexport function toPgEnum<const T extends Record<string, string>>(record: T) {\n return Object.values(record) as [T[keyof T], ...T[keyof T][]];\n}\n\nexport function pgOrmEnum<const TName extends string, const TEnum extends Record<string, string>>(\n name: TName,\n values: TEnum,\n) {\n const pgValues = Object.values(values) as [TEnum[keyof TEnum], ...TEnum[keyof TEnum][]];\n const result = drizzlePgEnum(name, pgValues);\n (result as any)[ENUM_MAP] = values;\n return result;\n}\n\nexport const pgTypes = {\n date: () => \"date\" as const,\n uuid: () => \"uuid\" as const,\n text: () => \"text\" as const,\n integer: () => \"integer\" as const,\n bigint: () => \"bigint\" as const,\n boolean: () => \"boolean\" as const,\n numeric: () => \"numeric\" as const,\n timestamptz: () => \"timestamptz\" as const,\n timestamp: () => \"timestamp\" as const,\n jsonb: () => \"jsonb\" as const,\n json: () => \"json\" as const,\n} as const;\n\nexport type PgTypes = typeof pgTypes;\nexport type ArgsBuilder = (types: PgTypes) => Record<string, string>;\nexport type CustomObjectType = \"function\" | \"trigger\" | \"extension\" | \"cron\";\n\nexport type TriggerTiming = \"before\" | \"after\" | \"instead of\";\nexport type TriggerForEach = \"row\" | \"statement\";\nexport type TriggerEvent = \"insert\" | \"update\" | \"delete\" | \"truncate\" | { update: AnyPgColumn[] };\n\nexport interface FunctionOpts {\n args?: ArgsBuilder;\n returns: string;\n schema?: string;\n language?: \"plpgsql\" | \"sql\";\n security?: \"definer\" | \"invoker\";\n searchPath?: string;\n body: () => SQL;\n}\n\nexport interface TriggerFunctionOpts<TTable extends PgTable>\n extends Omit<FunctionOpts, \"args\" | \"returns\"> {\n returns: \"trigger\";\n triggersOn: TTable | TTable[];\n}\n\nexport interface TriggerOpts<TTable extends PgTable> {\n on: TTable;\n schema?: string;\n timing: TriggerTiming;\n events: TriggerEvent[];\n forEach: TriggerForEach;\n condition?: SQL;\n execute: TriggerFunction<TTable>;\n}\n\ntype SqlDialect = { sqlToQuery: (s: SQL) => { sql: string } };\n\nexport abstract class CustomObject extends SQL {\n readonly qualifiedName: string;\n\n constructor(\n public name: string,\n public type: CustomObjectType,\n public schema?: string,\n ) {\n const qn = schema ? `${schema}.${name}` : name;\n super(sql.raw(qn).queryChunks);\n this.qualifiedName = qn;\n }\n\n override getSQL(): SQL {\n return sql.raw(this.qualifiedName);\n }\n\n abstract toSQL(dialect?: SqlDialect): string;\n}\n\nexport class PgFunction extends CustomObject {\n constructor(\n name: string,\n public opts: FunctionOpts,\n ) {\n super(name, \"function\", opts.schema);\n }\n\n toSQL(dialect: SqlDialect): string {\n const args = this.opts.args\n ? Object.entries(this.opts.args(pgTypes))\n .map(([n, type]) => `${n} ${type}`)\n .join(\", \")\n : \"\";\n const language = this.opts.language ?? \"plpgsql\";\n const body = dialect.sqlToQuery(this.opts.body()).sql;\n\n const lines = [\n `CREATE OR REPLACE FUNCTION ${this.qualifiedName}(${args})`,\n `RETURNS ${this.opts.returns}`,\n `LANGUAGE ${language}`,\n ];\n if (this.opts.security === \"definer\") lines.push(\"SECURITY DEFINER\");\n if (this.opts.searchPath) lines.push(`SET search_path = ${this.opts.searchPath}`);\n lines.push(`AS $function$\\n${body}\\n$function$;`);\n\n return lines.join(\"\\n\");\n }\n}\n\nexport class TriggerFunction<TTable extends PgTable> extends PgFunction {\n declare _table: TTable;\n\n constructor(\n name: string,\n public triggerOpts: TriggerFunctionOpts<TTable>,\n ) {\n super(name, {\n returns: \"trigger\",\n schema: triggerOpts.schema,\n language: triggerOpts.language,\n security: triggerOpts.security,\n searchPath: triggerOpts.searchPath,\n body: triggerOpts.body,\n });\n }\n}\n\nexport class PgTrigger<TTable extends PgTable = PgTable> extends CustomObject {\n readonly tableName: string;\n\n constructor(\n name: string,\n public opts: TriggerOpts<TTable>,\n ) {\n super(name, \"trigger\", opts.schema);\n this.tableName = (opts.on as any)[Symbol.for(\"drizzle:Name\")] as string;\n }\n\n toSQL(dialect: SqlDialect): string {\n const tableName = this.tableName;\n\n const eventParts = this.opts.events.map((e) => {\n if (typeof e === \"string\") return e.toUpperCase();\n const cols = e.update.map((c) => c.name).join(\", \");\n return `UPDATE OF ${cols}`;\n });\n\n const lines = [\n `CREATE OR REPLACE TRIGGER ${this.name}`,\n `${this.opts.timing.toUpperCase()} ${eventParts.join(\" OR \")}`,\n `ON ${tableName}`,\n `FOR EACH ${this.opts.forEach.toUpperCase()}`,\n ];\n\n if (this.opts.condition) {\n const cond = dialect.sqlToQuery(this.opts.condition).sql;\n lines.push(`WHEN (${cond})`);\n }\n\n lines.push(`EXECUTE FUNCTION ${this.opts.execute.qualifiedName}();`);\n\n return lines.join(\"\\n\");\n }\n}\n\nexport interface ExtensionOpts {\n schema?: string;\n}\n\nexport class PgExtension extends CustomObject {\n constructor(\n name: string,\n public opts: ExtensionOpts = {},\n ) {\n super(name, \"extension\");\n }\n\n toSQL(): string {\n const schema = this.opts.schema ? ` SCHEMA ${this.opts.schema}` : \"\";\n return `CREATE EXTENSION IF NOT EXISTS \"${this.name}\"${schema};`;\n }\n}\n\nexport function pgExtension(name: string, opts: ExtensionOpts = {}): PgExtension {\n return new PgExtension(name, opts);\n}\n\nexport interface CronJobOpts {\n schedule: string;\n command: () => SQL;\n}\n\nexport class PgCronJob extends CustomObject {\n constructor(\n name: string,\n public opts: CronJobOpts,\n ) {\n super(name, \"cron\");\n }\n\n toSQL(dialect: SqlDialect): string {\n const cmd = dialect.sqlToQuery(this.opts.command()).sql;\n const escapedName = this.name.replace(/'/g, \"''\");\n const escapedSchedule = this.opts.schedule.replace(/'/g, \"''\");\n return `SELECT cron.schedule('${escapedName}', '${escapedSchedule}', $$${cmd}$$);`;\n }\n}\n\nexport function pgCron(name: string, opts: CronJobOpts): PgCronJob {\n return new PgCronJob(name, opts);\n}\n\nexport function pgFunction<TTable extends PgTable>(\n name: string,\n opts: TriggerFunctionOpts<TTable>,\n): TriggerFunction<TTable>;\nexport function pgFunction(name: string, opts: FunctionOpts): PgFunction;\nexport function pgFunction(\n name: string,\n opts: FunctionOpts | TriggerFunctionOpts<any>,\n): PgFunction {\n if (opts.returns === \"trigger\" && \"triggersOn\" in opts) {\n return new TriggerFunction(name, opts as TriggerFunctionOpts<any>);\n }\n return new PgFunction(name, opts);\n}\n\nexport function pgTrigger<TTable extends PgTable>(\n name: string,\n opts: TriggerOpts<TTable>,\n): PgTrigger<TTable> {\n return new PgTrigger(name, opts);\n}\n","// Schema DRY column builder helpers for timestamps, audit fields, and FKs\n// FEATURE: Shared column helpers for Drizzle table definitions\n\nimport { sql } from \"drizzle-orm\";\nimport {\n customType,\n foreignKey,\n type PgCustomColumnBuilder,\n text,\n timestamp,\n uuid,\n} from \"drizzle-orm/pg-core\";\nimport { currentAppSlug, currentUser } from \"./rls\";\n\nexport const colNumeric = <const TName extends string>(name: TName) => {\n return customType<{\n data: number;\n driverData: string;\n }>({\n dataType: () => \"numeric\",\n fromDriver: Number,\n toDriver: (value) => sql`${value.toString()}::numeric`,\n })(name) as PgCustomColumnBuilder<{\n name: TName;\n dataType: \"custom\";\n columnType: \"PgCustomColumn\";\n data: number;\n driverParam: string;\n enumValues: undefined;\n }>;\n};\n\nexport const colAppSlug = <T extends string>(name: T) => text(name).default(currentAppSlug);\n\nexport const colTimestamp = <const T extends string>(name: T) =>\n timestamp(name, { withTimezone: true, mode: \"date\" });\n\nexport const colCreatedAt = <const T extends string>(name: T) =>\n colTimestamp(name).defaultNow().notNull();\n\nexport const colUpdatedAt = <const T extends string>(name: T) =>\n colTimestamp(name).defaultNow().notNull();\n\nexport const colDeletedAt = <const T extends string>(name: T) => colTimestamp(name);\n\nexport const colId = <const T extends string>(name: T) =>\n uuid(name).defaultRandom().primaryKey().notNull();\n\nexport const auditColumns = () => ({\n createdBy: text(\"created_by\").default(currentUser).notNull(),\n updatedBy: text(\"updated_by\").default(currentUser).notNull(),\n createdAt: colCreatedAt(\"created_at\"),\n updatedAt: colUpdatedAt(\"updated_at\"),\n deletedAt: colDeletedAt(\"deleted_at\"),\n});\n\nexport const appSlugForeignKey = (\n table: { appSlug: any },\n tableName: string,\n appsTable: { slug: any },\n) =>\n foreignKey({\n columns: [table.appSlug],\n foreignColumns: [appsTable.slug],\n name: `${tableName}_app_slug_fkey`,\n })\n .onUpdate(\"cascade\")\n .onDelete(\"cascade\");\n","import { type SQL, sql } from \"drizzle-orm\";\nimport type { ColumnBaseConfig } from \"drizzle-orm/column\";\nimport type { ColumnDataType } from \"drizzle-orm/column-builder\";\nimport {\n type AnyPgColumn,\n type ExtraConfigColumn,\n type PgPolicy,\n pgPolicy,\n} from \"drizzle-orm/pg-core\";\n\ntype AppSlugColumn = ExtraConfigColumn<ColumnBaseConfig<ColumnDataType, string>>;\n\ntype DefaultPolicyOptionsContext = {\n currentAppSlug: SQL<unknown>;\n currentUser: SQL<unknown>;\n hasAppSlug: SQL<unknown>;\n hasUser: SQL<unknown>;\n isSameAppSlug: SQL<unknown>;\n hasBypass: SQL<unknown>;\n TRUE: SQL<unknown>;\n FALSE: SQL<unknown>;\n};\n\ntype AppSlugPolicies = {\n select?: (context: DefaultPolicyOptionsContext) => SQL<unknown> | undefined;\n insert?: (context: DefaultPolicyOptionsContext) => SQL<unknown> | undefined;\n update?: (context: DefaultPolicyOptionsContext) => SQL<unknown> | undefined;\n delete?: (context: DefaultPolicyOptionsContext) => SQL<unknown> | undefined;\n};\n\ntype DefaultPolicyOptions = {\n table: { appSlug: AppSlugColumn; deletedAt?: AnyPgColumn };\n policies?: AppSlugPolicies;\n};\n\nexport const currentAppSlug = sql`current_setting('rls.app')`;\nexport const hasAppSlug = sql`(select ${currentAppSlug} is not null)`;\nexport const currentUser = sql`current_setting('rls.user')`;\nconst hasUser = sql`(select ${currentUser} is not null)`;\nexport const hasBypassEnabled = sql`(select current_setting('rls.bypass') = 'enabled')`;\nconst TRUE = sql`true`;\nexport const FALSE = sql`false`;\n\nexport const defaultPolicy = (\n name: string,\n { table, policies }: DefaultPolicyOptions,\n): PgPolicy[] => {\n const isSameAppSlug = sql`${currentAppSlug} = ${table.appSlug}`;\n\n const selectPolicy = pgPolicy(`rls.${name}.select`, {\n as: \"permissive\",\n for: \"select\",\n using: sql`${isSameAppSlug} or ${hasBypassEnabled}`,\n });\n\n const insertPolicy = pgPolicy(`rls.${name}.insert`, {\n as: \"permissive\",\n for: \"insert\",\n withCheck: sql`${hasAppSlug} or ${hasBypassEnabled}`, // might want to enforce user?\n });\n\n const updatePolicy = pgPolicy(`rls.${name}.update`, {\n as: \"permissive\",\n for: \"update\",\n using: sql`${isSameAppSlug} or ${hasBypassEnabled}`,\n });\n\n const deletePolicy = pgPolicy(`rls.${name}.delete`, {\n as: \"permissive\",\n for: \"delete\",\n using: sql`${hasBypassEnabled} or ${isSameAppSlug}`,\n });\n\n const ctx: DefaultPolicyOptionsContext = {\n currentAppSlug,\n currentUser,\n hasAppSlug,\n hasUser,\n isSameAppSlug,\n hasBypass: hasBypassEnabled,\n TRUE,\n FALSE,\n };\n\n return [\n typeof policies?.select === \"function\"\n ? pgPolicy(`rls.${name}.select`, {\n as: \"permissive\",\n for: \"select\",\n using: policies.select(ctx),\n })\n : selectPolicy,\n typeof policies?.insert === \"function\"\n ? pgPolicy(`rls.${name}.insert`, {\n as: \"permissive\",\n for: \"insert\",\n withCheck: policies.insert(ctx),\n })\n : insertPolicy,\n typeof policies?.update === \"function\"\n ? pgPolicy(`rls.${name}.update`, {\n as: \"permissive\",\n for: \"update\",\n withCheck: policies.update(ctx),\n })\n : updatePolicy,\n typeof policies?.delete === \"function\"\n ? pgPolicy(`rls.${name}.delete`, {\n as: \"permissive\",\n for: \"delete\",\n using: policies.delete(ctx),\n })\n : deletePolicy,\n ].filter(Boolean) as PgPolicy[];\n};\n","// Generate script utilities for hash, snapshot, journal, and SQL serialization\n// FEATURE: Drizzle custom SQL change tracking and migration generation pipeline\n\nimport { execSync } from \"node:child_process\";\nimport { createHash } from \"node:crypto\";\nimport {\n appendFileSync,\n existsSync,\n mkdirSync,\n readdirSync,\n readFileSync,\n rmSync,\n statSync,\n unlinkSync,\n writeFileSync,\n} from \"node:fs\";\nimport { join } from \"node:path\";\nimport { gunzipSync, gzipSync } from \"node:zlib\";\nimport { PgDialect } from \"drizzle-orm/pg-core\";\nimport type { CustomObjectType } from \"./define\";\nimport { CustomObject, PgTrigger } from \"./define\";\n\nexport interface GenerateFlags {\n dryRun: boolean;\n verbose: boolean;\n fix: boolean;\n}\n\nexport function parseFlags(\n argv: string[] = process.argv,\n env: Record<string, string | undefined> = process.env,\n): GenerateFlags {\n const dryRun = argv.includes(\"--dry-run\") || env[\"DRY_RUN\"] === \"1\";\n const verbose = argv.includes(\"--verbose\") || env[\"VERBOSE\"] === \"1\" || dryRun;\n const fix = argv.includes(\"--fix\");\n return { dryRun, verbose, fix };\n}\n\nexport type CustomHashes = Record<string, string>;\n\nexport interface CustomObjectEntry {\n hash: string;\n sql: string;\n}\n\nexport type CustomObjectsMap = Record<string, CustomObjectEntry>;\n\nexport type ChangeCategory = \"added\" | \"modified\" | \"removed\";\n\nexport interface CategorizedChange {\n key: string;\n category: ChangeCategory;\n}\n\ninterface JournalEntry {\n idx: number;\n version: string;\n when: number;\n tag: string;\n breakpoints: boolean;\n}\n\ninterface Journal {\n version: string;\n dialect: string;\n entries: JournalEntry[];\n}\n\nexport function computeHash(sql: string): string {\n const hash = createHash(\"sha256\").update(sql).digest(\"hex\");\n return `sha256:${hash}`;\n}\n\nexport function categorizeChanges(prev: CustomHashes, curr: CustomHashes): CategorizedChange[] {\n const allKeys = new Set([...Object.keys(prev), ...Object.keys(curr)]);\n const changes: CategorizedChange[] = [];\n for (const key of [...allKeys].sort()) {\n if (!(key in prev)) {\n changes.push({ key, category: \"added\" });\n } else if (!(key in curr)) {\n changes.push({ key, category: \"removed\" });\n } else if (prev[key] !== curr[key]) {\n changes.push({ key, category: \"modified\" });\n }\n }\n return changes;\n}\n\nexport function formatChangeSummary(changes: CategorizedChange[]): string {\n if (changes.length === 0) return \"\";\n const prefixes: Record<ChangeCategory, string> = { added: \"+\", modified: \"~\", removed: \"-\" };\n const labels: Record<ChangeCategory, string> = {\n added: \"new\",\n modified: \"modified\",\n removed: \"removed\",\n };\n const lines = changes.map(\n ({ key, category }) => ` ${prefixes[category]} ${key} (${labels[category]})`,\n );\n return `Custom SQL changes:\\n${lines.join(\"\\n\")}`;\n}\n\nexport function simpleDiff(prev: string, curr: string): string {\n const prevLines = prev.split(\"\\n\");\n const currLines = curr.split(\"\\n\");\n const result: string[] = [];\n let pi = 0;\n let ci = 0;\n while (pi < prevLines.length || ci < currLines.length) {\n if (pi >= prevLines.length) {\n result.push(`+${currLines[ci]}`);\n ci++;\n } else if (ci >= currLines.length) {\n result.push(`-${prevLines[pi]}`);\n pi++;\n } else if (prevLines[pi] === currLines[ci]) {\n result.push(` ${prevLines[pi]}`);\n pi++;\n ci++;\n } else {\n result.push(`-${prevLines[pi]}`);\n result.push(`+${currLines[ci]}`);\n pi++;\n ci++;\n }\n }\n return result.join(\"\\n\");\n}\n\nfunction indent(text: string): string {\n return text\n .split(\"\\n\")\n .map((line) => ` ${line}`)\n .join(\"\\n\");\n}\n\nexport function formatVerboseOutput(\n changes: CategorizedChange[],\n currentObjects: CustomObjectsMap,\n prevObjects: CustomObjectsMap,\n): string {\n const sections: string[] = [];\n for (const { key, category } of changes) {\n if (category === \"added\") {\n const sql = currentObjects[key]?.sql ?? \"\";\n sections.push(`+ ${key} (new)\\n${indent(sql)}`);\n } else if (category === \"modified\") {\n const currSql = currentObjects[key]?.sql ?? \"\";\n const prevSql = prevObjects[key]?.sql ?? \"\";\n if (prevSql) {\n const diff = simpleDiff(prevSql, currSql);\n sections.push(`~ ${key} (modified)\\n --- previous\\n +++ current\\n${indent(diff)}`);\n } else {\n sections.push(\n `~ ${key} (modified — previous SQL not stored, showing current)\\n${indent(currSql)}`,\n );\n }\n } else {\n sections.push(`- ${key} (removed)`);\n }\n }\n return sections.join(\"\\n\");\n}\n\nexport function readJournal(migrationsDir: string): Journal {\n const journalPath = join(migrationsDir, \"meta\", \"_journal.json\");\n return JSON.parse(readFileSync(journalPath, \"utf-8\"));\n}\n\nfunction timestampFromTag(tag: string): string {\n return tag.match(/^(\\d+)/)?.[1] ?? tag;\n}\n\nfunction nowTimestamp(): string {\n const d = new Date();\n const p = (n: number) => String(n).padStart(2, \"0\");\n return `${d.getFullYear()}${p(d.getMonth() + 1)}${p(d.getDate())}${p(d.getHours())}${p(d.getMinutes())}${p(d.getSeconds())}`;\n}\n\nexport function getLatestSnapshotPath(migrationsDir: string, journal: Journal): string | null {\n if (journal.entries.length === 0) return null;\n const latest = journal.entries[journal.entries.length - 1]!;\n return join(migrationsDir, \"meta\", `${timestampFromTag(latest.tag)}_snapshot.json`);\n}\n\nexport function readSnapshotCustomObjects(snapshotPath: string): CustomObjectsMap {\n const snapshot = JSON.parse(readFileSync(snapshotPath, \"utf-8\"));\n const raw = snapshot.customObjects ?? {};\n const result: CustomObjectsMap = {};\n for (const [key, value] of Object.entries(raw)) {\n if (typeof value === \"string\") {\n result[key] = { hash: value, sql: \"\" };\n } else {\n result[key] = value as CustomObjectEntry;\n }\n }\n return result;\n}\n\nexport function writeSnapshotCustomObjects(snapshotPath: string, objects: CustomObjectsMap): void {\n const snapshot = JSON.parse(readFileSync(snapshotPath, \"utf-8\"));\n snapshot.customObjects = objects;\n writeFileSync(snapshotPath, JSON.stringify(snapshot, null, 2) + \"\\n\");\n}\n\nfunction stableStringify(obj: unknown): string {\n if (obj === null || typeof obj !== \"object\") return JSON.stringify(obj);\n if (Array.isArray(obj)) return `[${obj.map(stableStringify).join(\",\")}]`;\n const sorted = Object.keys(obj as Record<string, unknown>).sort();\n const entries = sorted.map(\n (k) => `${JSON.stringify(k)}:${stableStringify((obj as Record<string, unknown>)[k])}`,\n );\n return `{${entries.join(\",\")}}`;\n}\n\nexport function packToSgz(migrationsDir: string): void {\n const metaDir = join(migrationsDir, \"meta\");\n if (!existsSync(metaDir)) return;\n const snapshotFiles = readdirSync(metaDir).filter((f) => f.endsWith(\"_snapshot.json\"));\n const sqlFiles = readdirSync(migrationsDir).filter((f) => f.endsWith(\".sql\"));\n for (const file of snapshotFiles) {\n const timestamp = timestampFromTag(file);\n const sqlFile = sqlFiles.find((f) => f.startsWith(timestamp));\n if (!sqlFile) continue;\n const sqlStem = sqlFile.replace(/\\.sql$/, \"\");\n const normalized = stableStringify(JSON.parse(readFileSync(join(metaDir, file), \"utf-8\")));\n const compressed = gzipSync(normalized, { level: 9 });\n writeFileSync(join(migrationsDir, `${sqlStem}.sgz`), compressed);\n }\n}\n\nexport function unpackFromSgz(migrationsDir: string): void {\n const metaDir = join(migrationsDir, \"meta\");\n mkdirSync(metaDir, { recursive: true });\n const sgzFiles = readdirSync(migrationsDir)\n .filter((f) => f.endsWith(\".sgz\"))\n .sort();\n const sqlFiles = readdirSync(migrationsDir).filter((f) => f.endsWith(\".sql\"));\n const entries: JournalEntry[] = [];\n for (let i = 0; i < sgzFiles.length; i++) {\n const stem = sgzFiles[i]!.replace(/\\.sgz$/, \"\");\n const timestamp = timestampFromTag(stem);\n const decompressed = gunzipSync(readFileSync(join(migrationsDir, sgzFiles[i]!)));\n writeFileSync(join(metaDir, `${timestamp}_snapshot.json`), decompressed);\n const sqlFile = sqlFiles.find((f) => f.startsWith(timestamp));\n const tag = sqlFile ? sqlFile.replace(/\\.sql$/, \"\") : stem;\n entries.push({ idx: i, version: \"7\", when: parseInt(timestamp, 10), tag, breakpoints: true });\n }\n const journal: Journal = { version: \"7\", dialect: \"postgresql\", entries };\n writeFileSync(join(metaDir, \"_journal.json\"), JSON.stringify(journal, null, 2) + \"\\n\");\n}\n\nexport function cleanMeta(migrationsDir: string): void {\n const metaDir = join(migrationsDir, \"meta\");\n if (existsSync(metaDir)) rmSync(metaDir, { recursive: true });\n}\n\nexport interface OrderIssue {\n file: string;\n expected: string;\n actual: string;\n}\n\nfunction listSgzFiles(migrationsDir: string): string[] {\n return readdirSync(migrationsDir)\n .filter((f) => f.endsWith(\".sgz\"))\n .sort();\n}\n\nexport function validateTimestamps(migrationsDir: string): string[] {\n const duplicates: string[] = [];\n let prevTimestamp = \"\";\n for (const file of listSgzFiles(migrationsDir)) {\n const ts = timestampFromTag(file);\n if (ts === prevTimestamp) duplicates.push(file);\n prevTimestamp = ts;\n }\n return duplicates;\n}\n\nexport function validateOrder(migrationsDir: string): OrderIssue[] {\n const sgzFiles = listSgzFiles(migrationsDir);\n const issues: OrderIssue[] = [];\n let prevContentId = \"\";\n for (const file of sgzFiles) {\n const content = JSON.parse(gunzipSync(readFileSync(join(migrationsDir, file))).toString());\n if (prevContentId !== \"\" && content.prevId !== prevContentId) {\n issues.push({ file, expected: prevContentId, actual: content.prevId });\n }\n prevContentId = content.id;\n }\n return issues;\n}\n\nexport function fixOrder(migrationsDir: string, issues: OrderIssue[]): void {\n let lastUsedTs = \"\";\n for (const issue of issues) {\n const sgzPath = join(migrationsDir, issue.file);\n const sqlFile = issue.file.replace(/\\.sgz$/, \".sql\");\n const sqlPath = join(migrationsDir, sqlFile);\n let sqlContent = \"\";\n try {\n sqlContent = readFileSync(sqlPath, \"utf-8\");\n } catch {}\n const snapshot = JSON.parse(gunzipSync(readFileSync(sgzPath)).toString());\n snapshot.prevId = issue.expected;\n const suffix = sqlFile.replace(/^\\d+/, \"\");\n try {\n unlinkSync(sqlPath);\n } catch {}\n unlinkSync(sgzPath);\n let ts = findTimestampAfterDependency(migrationsDir, issue.expected);\n if (ts <= lastUsedTs) ts = String(Number(lastUsedTs) + 1);\n lastUsedTs = ts;\n const newStem = `${ts}${suffix.replace(/\\.sql$/, \"\")}`;\n writeFileSync(join(migrationsDir, `${newStem}.sql`), sqlContent);\n writeFileSync(\n join(migrationsDir, `${newStem}.sgz`),\n gzipSync(stableStringify(snapshot), { level: 9 }),\n );\n }\n}\n\nfunction findTimestampAfterDependency(migrationsDir: string, expectedId: string): string {\n for (const file of listSgzFiles(migrationsDir)) {\n const content = JSON.parse(gunzipSync(readFileSync(join(migrationsDir, file))).toString());\n if (content.id === expectedId) {\n const depTs = timestampFromTag(file);\n return String(Number(depTs) + 1);\n }\n }\n return nowTimestamp();\n}\n\nexport function collectCustomObjects(moduleExports: Record<string, unknown>): CustomObject[] {\n return Object.values(moduleExports).filter((v): v is CustomObject => v instanceof CustomObject);\n}\n\nexport function serializeCustomObject(obj: CustomObject, dialect: PgDialect): string {\n return obj.toSQL(dialect);\n}\n\nexport function generateDropSQL(key: string, createSQL: string): string | null {\n const [type] = key.split(\":\");\n switch (type) {\n case \"function\": {\n const m = createSQL.match(/CREATE OR REPLACE FUNCTION\\s+(\\S+)\\s*\\(/);\n return m ? `DROP FUNCTION IF EXISTS ${m[1]};` : null;\n }\n case \"trigger\": {\n const m = createSQL.match(/CREATE OR REPLACE TRIGGER\\s+(\\S+)[\\s\\S]*?ON\\s+(\\S+)/);\n return m ? `DROP TRIGGER IF EXISTS ${m[1]} ON ${m[2]};` : null;\n }\n case \"extension\": {\n const m = createSQL.match(/CREATE EXTENSION IF NOT EXISTS\\s+\"([^\"]+)\"/);\n return m ? `DROP EXTENSION IF EXISTS \"${m[1]}\";` : null;\n }\n case \"cron\": {\n const m = createSQL.match(/cron\\.schedule\\('([^']+)'/);\n return m ? `SELECT cron.unschedule('${m[1]}');` : null;\n }\n default:\n return null;\n }\n}\n\nfunction findNewMigrationFile(migrationsDir: string, beforeFiles: Set<string>): string | null {\n const afterFiles = readdirSync(migrationsDir).filter((f) => f.endsWith(\".sql\"));\n const newFile = afterFiles.find((f) => !beforeFiles.has(f));\n return newFile ? join(migrationsDir, newFile) : null;\n}\n\nexport async function generate(\n migrationsDir: string,\n schemaModules: Record<string, unknown>[],\n flags: GenerateFlags = { dryRun: false, verbose: false, fix: false },\n) {\n const duplicates = validateTimestamps(migrationsDir);\n if (duplicates.length > 0) {\n console.error(\"Duplicate migration timestamps detected:\");\n for (const file of duplicates) console.error(` ${file}`);\n console.error(\"Resolve manually — each migration must have a unique timestamp.\");\n process.exit(1);\n }\n\n const orderIssues = validateOrder(migrationsDir);\n if (orderIssues.length > 0) {\n if (!flags.fix) {\n console.error(\"Migration order issues detected:\");\n for (const issue of orderIssues) {\n console.error(\n ` ${issue.file}: expected prevId=\"${issue.expected}\", actual=\"${issue.actual}\"`,\n );\n }\n console.error(\"Run with --fix to repair.\");\n process.exit(1);\n }\n if (flags.dryRun) {\n console.log(\"Would fix migration order:\");\n for (const issue of orderIssues) {\n console.log(` ${issue.file}: re-timestamp, set prevId=\"${issue.expected}\"`);\n }\n } else {\n fixOrder(migrationsDir, orderIssues);\n console.log(`Fixed ${orderIssues.length} migration order issue(s).`);\n }\n }\n\n const dialect = new PgDialect();\n\n unpackFromSgz(migrationsDir);\n try {\n const journal = readJournal(migrationsDir);\n const snapshotPath = getLatestSnapshotPath(migrationsDir, journal);\n const prevObjects = snapshotPath ? readSnapshotCustomObjects(snapshotPath) : {};\n\n let beforeFiles = new Set<string>();\n if (!flags.dryRun) {\n beforeFiles = new Set(readdirSync(migrationsDir).filter((f) => f.endsWith(\".sql\")));\n console.log(\"Running drizzle-kit generate...\");\n try {\n execSync(\"pnpm drizzle generate\", { stdio: \"inherit\" });\n } catch {\n throw new Error(\"drizzle-kit generate failed. Aborting.\");\n }\n }\n\n const allObjects = schemaModules.flatMap(collectCustomObjects);\n const typeOrder: CustomObjectType[] = [\"function\", \"trigger\", \"extension\", \"cron\"];\n const ordered = allObjects\n .filter((o) => typeOrder.includes(o.type))\n .sort(\n (a, b) =>\n typeOrder.indexOf(a.type) - typeOrder.indexOf(b.type) || a.name.localeCompare(b.name),\n );\n\n const currentObjects: CustomObjectsMap = {};\n for (const obj of ordered) {\n const sqlStr = serializeCustomObject(obj, dialect);\n const triggerTable = obj instanceof PgTrigger ? `.${obj.tableName}` : \"\";\n const key = `${obj.type}:${obj.name}${triggerTable}`;\n currentObjects[key] = { hash: computeHash(sqlStr), sql: sqlStr };\n }\n\n const prevHashes: CustomHashes = Object.fromEntries(\n Object.entries(prevObjects).map(([key, entry]) => [key, entry.hash]),\n );\n const currentHashes: CustomHashes = Object.fromEntries(\n Object.entries(currentObjects).map(([key, entry]) => [key, entry.hash]),\n );\n const changes = categorizeChanges(prevHashes, currentHashes);\n if (changes.length === 0) {\n console.log(\"No custom SQL changes detected.\");\n if (!flags.dryRun) {\n const latestJournal = readJournal(migrationsDir);\n const latestSnapshotPath = getLatestSnapshotPath(migrationsDir, latestJournal);\n if (latestSnapshotPath) writeSnapshotCustomObjects(latestSnapshotPath, currentObjects);\n packToSgz(migrationsDir);\n }\n return;\n }\n\n console.log(formatChangeSummary(changes));\n\n if (flags.verbose) {\n console.log(\"\");\n console.log(formatVerboseOutput(changes, currentObjects, prevObjects));\n }\n\n if (flags.dryRun) {\n console.log(\"\\n=== DRY RUN: No files were written ===\");\n return;\n }\n\n let migrationFile = findNewMigrationFile(migrationsDir, beforeFiles);\n\n if (!migrationFile) {\n console.log(\"No drizzle migration was created. Creating custom migration...\");\n execSync(\"pnpm drizzle generate --custom\", { stdio: \"inherit\" });\n migrationFile = findNewMigrationFile(migrationsDir, beforeFiles);\n if (!migrationFile) throw new Error(\"Failed to create custom migration file\");\n }\n\n const createKeys = changes.filter((c) => c.category !== \"removed\").map((c) => c.key);\n const createStatements = createKeys.map(\n (key) => `-- @drizzle-custom ${key}\\n${currentObjects[key]!.sql}`,\n );\n\n const removedKeys = changes.filter((c) => c.category === \"removed\").map((c) => c.key);\n const dropStatements = removedKeys\n .map((key) => {\n const dropSql = generateDropSQL(key, prevObjects[key]?.sql ?? \"\");\n return dropSql ? `-- @drizzle-custom ${key} (removed)\\n${dropSql}` : null;\n })\n .filter(Boolean);\n\n const allStatements = [...dropStatements, ...createStatements].join(\"\\n\\n\");\n appendFileSync(migrationFile, `\\n-- Custom SQL objects\\n${allStatements}\\n`);\n if (dropStatements.length > 0) {\n const dropNames = removedKeys.join(\", \");\n appendFileSync(\n migrationFile,\n `\\n-- TODO: Review dropped objects (${dropNames})\\n-- If they have dependants (triggers, cron jobs, etc.), add DROP/UPDATE statements below.\\n-- Run 'pnpm dev:init' to verify this migration applies cleanly.\\n\\n`,\n );\n console.log(\n `⚠ ${dropStatements.length} object(s) dropped — check migration for dependency TODOs`,\n );\n }\n const total = createKeys.length + dropStatements.length;\n console.log(`Appended ${total} custom SQL statement(s) to ${migrationFile}`);\n\n const updatedJournal = readJournal(migrationsDir);\n const updatedSnapshotPath = getLatestSnapshotPath(migrationsDir, updatedJournal);\n if (updatedSnapshotPath) {\n writeSnapshotCustomObjects(updatedSnapshotPath, currentObjects);\n console.log(`Updated custom hashes in ${updatedSnapshotPath}`);\n }\n\n packToSgz(migrationsDir);\n } finally {\n cleanMeta(migrationsDir);\n }\n}\n\nexport function drop(migrationsDir: string): void {\n unpackFromSgz(migrationsDir);\n try {\n execSync(\"pnpm drizzle drop\", { stdio: \"inherit\" });\n packToSgz(migrationsDir);\n for (const f of readdirSync(migrationsDir)) {\n if (!f.endsWith(\".sgz\")) continue;\n if (!existsSync(join(migrationsDir, f.replace(\".sgz\", \".sql\")))) {\n unlinkSync(join(migrationsDir, f));\n }\n }\n } finally {\n cleanMeta(migrationsDir);\n }\n}\n\nexport function custom(migrationsDir: string): void {\n unpackFromSgz(migrationsDir);\n try {\n execSync(\"pnpm drizzle generate --custom\", { stdio: \"inherit\" });\n packToSgz(migrationsDir);\n } finally {\n cleanMeta(migrationsDir);\n }\n}\n\nexport async function loadSchemaModules(schemaDir: string): Promise<Record<string, unknown>[]> {\n const sourceNames = [\"functions\", \"triggers\", \"extensions\", \"cron\"];\n const importTasks: Promise<Record<string, unknown>>[] = [];\n for (const name of sourceNames) {\n const dirPath = join(schemaDir, name);\n const filePath = join(schemaDir, `${name}.ts`);\n if (existsSync(dirPath) && statSync(dirPath).isDirectory()) {\n const scanDir = (dir: string, prefix: string) => {\n for (const entry of readdirSync(dir)) {\n const fullPath = join(dir, entry);\n if (statSync(fullPath).isDirectory()) {\n scanDir(fullPath, `${prefix}${entry}/`);\n } else if (\n entry.endsWith(\".ts\") &&\n !entry.includes(\".test.\") &&\n !entry.includes(\".spec.\")\n ) {\n importTasks.push(\n import(fullPath).catch((err) => {\n const msg = err instanceof Error ? err.message : String(err);\n console.error(`Failed to load ${prefix}${entry}: ${msg}`);\n process.exit(1);\n }),\n );\n }\n }\n };\n scanDir(dirPath, `${name}/`);\n } else if (existsSync(filePath)) {\n importTasks.push(\n import(filePath).catch((err) => {\n const msg = err instanceof Error ? err.message : String(err);\n console.error(`Failed to load ${name}.ts: ${msg}`);\n process.exit(1);\n }),\n );\n }\n }\n return Promise.all(importTasks);\n}\n\nexport async function syncMeta(\n migrationsDir: string,\n schemaModules: Record<string, unknown>[],\n): Promise<void> {\n const dialect = new PgDialect();\n const allObjects = schemaModules.flatMap(collectCustomObjects);\n const ordered = allObjects.sort(\n (a, b) => a.type.localeCompare(b.type) || a.name.localeCompare(b.name),\n );\n\n const currentObjects: CustomObjectsMap = {};\n for (const obj of ordered) {\n const sqlStr = serializeCustomObject(obj, dialect);\n const triggerTable = obj instanceof PgTrigger ? `.${obj.tableName}` : \"\";\n currentObjects[`${obj.type}:${obj.name}${triggerTable}`] = {\n hash: computeHash(sqlStr),\n sql: sqlStr,\n };\n }\n\n const sgzFiles = listSgzFiles(migrationsDir);\n if (sgzFiles.length === 0) {\n console.error(\"No .sgz files found. Nothing to sync.\");\n process.exit(1);\n }\n const latestSgz = sgzFiles[sgzFiles.length - 1]!;\n const sgzPath = join(migrationsDir, latestSgz);\n const snap = JSON.parse(gunzipSync(readFileSync(sgzPath)).toString());\n snap.customObjects = currentObjects;\n writeFileSync(sgzPath, gzipSync(stableStringify(snap), { level: 9 }));\n console.log(`Synced ${Object.keys(currentObjects).length} custom objects into ${latestSgz}`);\n}\n\n"],"mappings":"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","names":["ENUM_MAP","Symbol","for","toPgEnum","record","Object","values","pgOrmEnum","name","pgValues","result","drizzlePgEnum","pgTypes","date","uuid","text","integer","bigint","boolean","numeric","timestamptz","timestamp","jsonb","json","CustomObject","SQL","qualifiedName","type","schema","qn","sql","raw","queryChunks","getSQL","PgFunction","opts","toSQL","dialect","args","entries","map","n","join","language","body","sqlToQuery","lines","returns","security","push","searchPath","TriggerFunction","triggerOpts","PgTrigger","tableName","on","eventParts","events","e","toUpperCase","cols","update","c","timing","forEach","condition","cond","execute","PgExtension","pgExtension","PgCronJob","cmd","command","escapedName","replace","escapedSchedule","schedule","pgCron","pgFunction","pgTrigger","import_drizzle_orm","import_pg_core","import_drizzle_orm","import_pg_core","currentAppSlug","sql","hasAppSlug","currentUser","hasUser","hasBypassEnabled","TRUE","FALSE","defaultPolicy","name","table","policies","isSameAppSlug","appSlug","selectPolicy","pgPolicy","as","for","using","insertPolicy","withCheck","updatePolicy","deletePolicy","ctx","hasBypass","select","insert","update","delete","filter","Boolean","colNumeric","name","customType","dataType","fromDriver","Number","toDriver","value","sql","toString","colAppSlug","text","default","currentAppSlug","colTimestamp","timestamp","withTimezone","mode","colCreatedAt","defaultNow","notNull","colUpdatedAt","colDeletedAt","colId","uuid","defaultRandom","primaryKey","auditColumns","createdBy","currentUser","updatedBy","createdAt","updatedAt","deletedAt","appSlugForeignKey","table","tableName","appsTable","foreignKey","columns","appSlug","foreignColumns","slug","onUpdate","onDelete","import_pg_core","parseFlags","argv","process","env","dryRun","includes","verbose","fix","computeHash","sql","hash","createHash","update","digest","categorizeChanges","prev","curr","allKeys","Set","Object","keys","changes","key","sort","push","category","formatChangeSummary","length","prefixes","added","modified","removed","labels","lines","map","join","simpleDiff","prevLines","split","currLines","result","pi","ci","indent","text","line","formatVerboseOutput","currentObjects","prevObjects","sections","currSql","prevSql","diff","readJournal","migrationsDir","journalPath","JSON","parse","readFileSync","timestampFromTag","tag","match","nowTimestamp","d","Date","p","n","String","padStart","getFullYear","getMonth","getDate","getHours","getMinutes","getSeconds","getLatestSnapshotPath","journal","entries","latest","readSnapshotCustomObjects","snapshotPath","snapshot","raw","customObjects","value","writeSnapshotCustomObjects","objects","writeFileSync","stringify","stableStringify","obj","Array","isArray","sorted","k","packToSgz","metaDir","existsSync","snapshotFiles","readdirSync","filter","f","endsWith","sqlFiles","file","timestamp","sqlFile","find","startsWith","sqlStem","replace","normalized","compressed","gzipSync","level","unpackFromSgz","mkdirSync","recursive","sgzFiles","i","stem","decompressed","gunzipSync","idx","version","when","parseInt","breakpoints","dialect","cleanMeta","rmSync","listSgzFiles","validateTimestamps","duplicates","prevTimestamp","ts","validateOrder","issues","prevContentId","content","toString","prevId","expected","actual","id","fixOrder","lastUsedTs","issue","sgzPath","sqlPath","sqlContent","suffix","unlinkSync","findTimestampAfterDependency","Number","newStem","expectedId","depTs","collectCustomObjects","moduleExports","values","v","CustomObject","serializeCustomObject","toSQL","generateDropSQL","createSQL","type","m","findNewMigrationFile","beforeFiles","afterFiles","newFile","has","generate","schemaModules","flags","console","error","exit","orderIssues","log","PgDialect","execSync","stdio","Error","allObjects","flatMap","typeOrder","ordered","o","a","b","indexOf","name","localeCompare","sqlStr","triggerTable","PgTrigger","tableName","prevHashes","fromEntries","entry","currentHashes","latestJournal","latestSnapshotPath","migrationFile","createKeys","c","createStatements","removedKeys","dropStatements","dropSql","Boolean","allStatements","appendFileSync","dropNames","total","updatedJournal","updatedSnapshotPath","drop","custom","loadSchemaModules","schemaDir","sourceNames","importTasks","dirPath","filePath","statSync","isDirectory","scanDir","dir","prefix","fullPath","catch","err","msg","message","Promise","all","syncMeta","latestSgz","snap"]}
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import * as drizzle_orm_pg_core from 'drizzle-orm/pg-core';
|
|
2
|
+
import { PgTable, AnyPgColumn, PgCustomColumnBuilder, PgDialect, ExtraConfigColumn, PgPolicy } from 'drizzle-orm/pg-core';
|
|
3
|
+
import * as drizzle_orm from 'drizzle-orm';
|
|
4
|
+
import { SQL } from 'drizzle-orm';
|
|
5
|
+
import { ColumnBaseConfig } from 'drizzle-orm/column';
|
|
6
|
+
import { ColumnDataType } from 'drizzle-orm/column-builder';
|
|
7
|
+
|
|
8
|
+
/** Symbol to store the original key→value mapping on pgEnum results */
|
|
9
|
+
declare const ENUM_MAP: unique symbol;
|
|
10
|
+
declare function toPgEnum<const T extends Record<string, string>>(record: T): [T[keyof T], ...T[keyof T][]];
|
|
11
|
+
declare function pgOrmEnum<const TName extends string, const TEnum extends Record<string, string>>(name: TName, values: TEnum): drizzle_orm_pg_core.PgEnum<[TEnum[keyof TEnum], ...TEnum[keyof TEnum][]]>;
|
|
12
|
+
declare const pgTypes: {
|
|
13
|
+
readonly date: () => "date";
|
|
14
|
+
readonly uuid: () => "uuid";
|
|
15
|
+
readonly text: () => "text";
|
|
16
|
+
readonly integer: () => "integer";
|
|
17
|
+
readonly bigint: () => "bigint";
|
|
18
|
+
readonly boolean: () => "boolean";
|
|
19
|
+
readonly numeric: () => "numeric";
|
|
20
|
+
readonly timestamptz: () => "timestamptz";
|
|
21
|
+
readonly timestamp: () => "timestamp";
|
|
22
|
+
readonly jsonb: () => "jsonb";
|
|
23
|
+
readonly json: () => "json";
|
|
24
|
+
};
|
|
25
|
+
type PgTypes = typeof pgTypes;
|
|
26
|
+
type ArgsBuilder = (types: PgTypes) => Record<string, string>;
|
|
27
|
+
type CustomObjectType = "function" | "trigger" | "extension" | "cron";
|
|
28
|
+
type TriggerTiming = "before" | "after" | "instead of";
|
|
29
|
+
type TriggerForEach = "row" | "statement";
|
|
30
|
+
type TriggerEvent = "insert" | "update" | "delete" | "truncate" | {
|
|
31
|
+
update: AnyPgColumn[];
|
|
32
|
+
};
|
|
33
|
+
interface FunctionOpts {
|
|
34
|
+
args?: ArgsBuilder;
|
|
35
|
+
returns: string;
|
|
36
|
+
schema?: string;
|
|
37
|
+
language?: "plpgsql" | "sql";
|
|
38
|
+
security?: "definer" | "invoker";
|
|
39
|
+
searchPath?: string;
|
|
40
|
+
body: () => SQL;
|
|
41
|
+
}
|
|
42
|
+
interface TriggerFunctionOpts<TTable extends PgTable> extends Omit<FunctionOpts, "args" | "returns"> {
|
|
43
|
+
returns: "trigger";
|
|
44
|
+
triggersOn: TTable | TTable[];
|
|
45
|
+
}
|
|
46
|
+
interface TriggerOpts<TTable extends PgTable> {
|
|
47
|
+
on: TTable;
|
|
48
|
+
schema?: string;
|
|
49
|
+
timing: TriggerTiming;
|
|
50
|
+
events: TriggerEvent[];
|
|
51
|
+
forEach: TriggerForEach;
|
|
52
|
+
condition?: SQL;
|
|
53
|
+
execute: TriggerFunction<TTable>;
|
|
54
|
+
}
|
|
55
|
+
type SqlDialect = {
|
|
56
|
+
sqlToQuery: (s: SQL) => {
|
|
57
|
+
sql: string;
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
declare abstract class CustomObject extends SQL {
|
|
61
|
+
name: string;
|
|
62
|
+
type: CustomObjectType;
|
|
63
|
+
schema?: string | undefined;
|
|
64
|
+
readonly qualifiedName: string;
|
|
65
|
+
constructor(name: string, type: CustomObjectType, schema?: string | undefined);
|
|
66
|
+
getSQL(): SQL;
|
|
67
|
+
abstract toSQL(dialect?: SqlDialect): string;
|
|
68
|
+
}
|
|
69
|
+
declare class PgFunction extends CustomObject {
|
|
70
|
+
opts: FunctionOpts;
|
|
71
|
+
constructor(name: string, opts: FunctionOpts);
|
|
72
|
+
toSQL(dialect: SqlDialect): string;
|
|
73
|
+
}
|
|
74
|
+
declare class TriggerFunction<TTable extends PgTable> extends PgFunction {
|
|
75
|
+
triggerOpts: TriggerFunctionOpts<TTable>;
|
|
76
|
+
_table: TTable;
|
|
77
|
+
constructor(name: string, triggerOpts: TriggerFunctionOpts<TTable>);
|
|
78
|
+
}
|
|
79
|
+
declare class PgTrigger<TTable extends PgTable = PgTable> extends CustomObject {
|
|
80
|
+
opts: TriggerOpts<TTable>;
|
|
81
|
+
readonly tableName: string;
|
|
82
|
+
constructor(name: string, opts: TriggerOpts<TTable>);
|
|
83
|
+
toSQL(dialect: SqlDialect): string;
|
|
84
|
+
}
|
|
85
|
+
interface ExtensionOpts {
|
|
86
|
+
schema?: string;
|
|
87
|
+
}
|
|
88
|
+
declare class PgExtension extends CustomObject {
|
|
89
|
+
opts: ExtensionOpts;
|
|
90
|
+
constructor(name: string, opts?: ExtensionOpts);
|
|
91
|
+
toSQL(): string;
|
|
92
|
+
}
|
|
93
|
+
declare function pgExtension(name: string, opts?: ExtensionOpts): PgExtension;
|
|
94
|
+
interface CronJobOpts {
|
|
95
|
+
schedule: string;
|
|
96
|
+
command: () => SQL;
|
|
97
|
+
}
|
|
98
|
+
declare class PgCronJob extends CustomObject {
|
|
99
|
+
opts: CronJobOpts;
|
|
100
|
+
constructor(name: string, opts: CronJobOpts);
|
|
101
|
+
toSQL(dialect: SqlDialect): string;
|
|
102
|
+
}
|
|
103
|
+
declare function pgCron(name: string, opts: CronJobOpts): PgCronJob;
|
|
104
|
+
declare function pgFunction<TTable extends PgTable>(name: string, opts: TriggerFunctionOpts<TTable>): TriggerFunction<TTable>;
|
|
105
|
+
declare function pgFunction(name: string, opts: FunctionOpts): PgFunction;
|
|
106
|
+
declare function pgTrigger<TTable extends PgTable>(name: string, opts: TriggerOpts<TTable>): PgTrigger<TTable>;
|
|
107
|
+
|
|
108
|
+
declare const colNumeric: <const TName extends string>(name: TName) => PgCustomColumnBuilder<{
|
|
109
|
+
name: TName;
|
|
110
|
+
dataType: "custom";
|
|
111
|
+
columnType: "PgCustomColumn";
|
|
112
|
+
data: number;
|
|
113
|
+
driverParam: string;
|
|
114
|
+
enumValues: undefined;
|
|
115
|
+
}>;
|
|
116
|
+
declare const colAppSlug: <T extends string>(name: T) => drizzle_orm.HasDefault<drizzle_orm_pg_core.PgTextBuilderInitial<T, [string, ...string[]]>>;
|
|
117
|
+
declare const colTimestamp: <const T extends string>(name: T) => drizzle_orm_pg_core.PgTimestampBuilderInitial<T>;
|
|
118
|
+
declare const colCreatedAt: <const T extends string>(name: T) => drizzle_orm.NotNull<drizzle_orm.HasDefault<drizzle_orm_pg_core.PgTimestampBuilderInitial<T>>>;
|
|
119
|
+
declare const colUpdatedAt: <const T extends string>(name: T) => drizzle_orm.NotNull<drizzle_orm.HasDefault<drizzle_orm_pg_core.PgTimestampBuilderInitial<T>>>;
|
|
120
|
+
declare const colDeletedAt: <const T extends string>(name: T) => drizzle_orm_pg_core.PgTimestampBuilderInitial<T>;
|
|
121
|
+
declare const colId: <const T extends string>(name: T) => drizzle_orm.NotNull<drizzle_orm.IsPrimaryKey<drizzle_orm.NotNull<drizzle_orm.HasDefault<drizzle_orm_pg_core.PgUUIDBuilderInitial<T>>>>>;
|
|
122
|
+
declare const auditColumns: () => {
|
|
123
|
+
createdBy: drizzle_orm.NotNull<drizzle_orm.HasDefault<drizzle_orm_pg_core.PgTextBuilderInitial<"created_by", [string, ...string[]]>>>;
|
|
124
|
+
updatedBy: drizzle_orm.NotNull<drizzle_orm.HasDefault<drizzle_orm_pg_core.PgTextBuilderInitial<"updated_by", [string, ...string[]]>>>;
|
|
125
|
+
createdAt: drizzle_orm.NotNull<drizzle_orm.HasDefault<drizzle_orm_pg_core.PgTimestampBuilderInitial<"created_at">>>;
|
|
126
|
+
updatedAt: drizzle_orm.NotNull<drizzle_orm.HasDefault<drizzle_orm_pg_core.PgTimestampBuilderInitial<"updated_at">>>;
|
|
127
|
+
deletedAt: drizzle_orm_pg_core.PgTimestampBuilderInitial<"deleted_at">;
|
|
128
|
+
};
|
|
129
|
+
declare const appSlugForeignKey: (table: {
|
|
130
|
+
appSlug: any;
|
|
131
|
+
}, tableName: string, appsTable: {
|
|
132
|
+
slug: any;
|
|
133
|
+
}) => drizzle_orm_pg_core.ForeignKeyBuilder;
|
|
134
|
+
|
|
135
|
+
interface GenerateFlags {
|
|
136
|
+
dryRun: boolean;
|
|
137
|
+
verbose: boolean;
|
|
138
|
+
fix: boolean;
|
|
139
|
+
}
|
|
140
|
+
declare function parseFlags(argv?: string[], env?: Record<string, string | undefined>): GenerateFlags;
|
|
141
|
+
type CustomHashes = Record<string, string>;
|
|
142
|
+
interface CustomObjectEntry {
|
|
143
|
+
hash: string;
|
|
144
|
+
sql: string;
|
|
145
|
+
}
|
|
146
|
+
type CustomObjectsMap = Record<string, CustomObjectEntry>;
|
|
147
|
+
type ChangeCategory = "added" | "modified" | "removed";
|
|
148
|
+
interface CategorizedChange {
|
|
149
|
+
key: string;
|
|
150
|
+
category: ChangeCategory;
|
|
151
|
+
}
|
|
152
|
+
interface JournalEntry {
|
|
153
|
+
idx: number;
|
|
154
|
+
version: string;
|
|
155
|
+
when: number;
|
|
156
|
+
tag: string;
|
|
157
|
+
breakpoints: boolean;
|
|
158
|
+
}
|
|
159
|
+
interface Journal {
|
|
160
|
+
version: string;
|
|
161
|
+
dialect: string;
|
|
162
|
+
entries: JournalEntry[];
|
|
163
|
+
}
|
|
164
|
+
declare function computeHash(sql: string): string;
|
|
165
|
+
declare function categorizeChanges(prev: CustomHashes, curr: CustomHashes): CategorizedChange[];
|
|
166
|
+
declare function formatChangeSummary(changes: CategorizedChange[]): string;
|
|
167
|
+
declare function simpleDiff(prev: string, curr: string): string;
|
|
168
|
+
declare function formatVerboseOutput(changes: CategorizedChange[], currentObjects: CustomObjectsMap, prevObjects: CustomObjectsMap): string;
|
|
169
|
+
declare function readJournal(migrationsDir: string): Journal;
|
|
170
|
+
declare function getLatestSnapshotPath(migrationsDir: string, journal: Journal): string | null;
|
|
171
|
+
declare function readSnapshotCustomObjects(snapshotPath: string): CustomObjectsMap;
|
|
172
|
+
declare function writeSnapshotCustomObjects(snapshotPath: string, objects: CustomObjectsMap): void;
|
|
173
|
+
declare function packToSgz(migrationsDir: string): void;
|
|
174
|
+
declare function unpackFromSgz(migrationsDir: string): void;
|
|
175
|
+
declare function cleanMeta(migrationsDir: string): void;
|
|
176
|
+
interface OrderIssue {
|
|
177
|
+
file: string;
|
|
178
|
+
expected: string;
|
|
179
|
+
actual: string;
|
|
180
|
+
}
|
|
181
|
+
declare function validateTimestamps(migrationsDir: string): string[];
|
|
182
|
+
declare function validateOrder(migrationsDir: string): OrderIssue[];
|
|
183
|
+
declare function fixOrder(migrationsDir: string, issues: OrderIssue[]): void;
|
|
184
|
+
declare function collectCustomObjects(moduleExports: Record<string, unknown>): CustomObject[];
|
|
185
|
+
declare function serializeCustomObject(obj: CustomObject, dialect: PgDialect): string;
|
|
186
|
+
declare function generateDropSQL(key: string, createSQL: string): string | null;
|
|
187
|
+
declare function generate(migrationsDir: string, schemaModules: Record<string, unknown>[], flags?: GenerateFlags): Promise<void>;
|
|
188
|
+
declare function drop(migrationsDir: string): void;
|
|
189
|
+
declare function custom(migrationsDir: string): void;
|
|
190
|
+
declare function loadSchemaModules(schemaDir: string): Promise<Record<string, unknown>[]>;
|
|
191
|
+
declare function syncMeta(migrationsDir: string, schemaModules: Record<string, unknown>[]): Promise<void>;
|
|
192
|
+
|
|
193
|
+
type AppSlugColumn = ExtraConfigColumn<ColumnBaseConfig<ColumnDataType, string>>;
|
|
194
|
+
type DefaultPolicyOptionsContext = {
|
|
195
|
+
currentAppSlug: SQL<unknown>;
|
|
196
|
+
currentUser: SQL<unknown>;
|
|
197
|
+
hasAppSlug: SQL<unknown>;
|
|
198
|
+
hasUser: SQL<unknown>;
|
|
199
|
+
isSameAppSlug: SQL<unknown>;
|
|
200
|
+
hasBypass: SQL<unknown>;
|
|
201
|
+
TRUE: SQL<unknown>;
|
|
202
|
+
FALSE: SQL<unknown>;
|
|
203
|
+
};
|
|
204
|
+
type AppSlugPolicies = {
|
|
205
|
+
select?: (context: DefaultPolicyOptionsContext) => SQL<unknown> | undefined;
|
|
206
|
+
insert?: (context: DefaultPolicyOptionsContext) => SQL<unknown> | undefined;
|
|
207
|
+
update?: (context: DefaultPolicyOptionsContext) => SQL<unknown> | undefined;
|
|
208
|
+
delete?: (context: DefaultPolicyOptionsContext) => SQL<unknown> | undefined;
|
|
209
|
+
};
|
|
210
|
+
type DefaultPolicyOptions = {
|
|
211
|
+
table: {
|
|
212
|
+
appSlug: AppSlugColumn;
|
|
213
|
+
deletedAt?: AnyPgColumn;
|
|
214
|
+
};
|
|
215
|
+
policies?: AppSlugPolicies;
|
|
216
|
+
};
|
|
217
|
+
declare const currentAppSlug: SQL<unknown>;
|
|
218
|
+
declare const hasAppSlug: SQL<unknown>;
|
|
219
|
+
declare const currentUser: SQL<unknown>;
|
|
220
|
+
declare const hasBypassEnabled: SQL<unknown>;
|
|
221
|
+
declare const FALSE: SQL<unknown>;
|
|
222
|
+
declare const defaultPolicy: (name: string, { table, policies }: DefaultPolicyOptions) => PgPolicy[];
|
|
223
|
+
|
|
224
|
+
export { type ArgsBuilder, type CategorizedChange, type ChangeCategory, type CronJobOpts, type CustomHashes, CustomObject, type CustomObjectEntry, type CustomObjectType, type CustomObjectsMap, ENUM_MAP, type ExtensionOpts, FALSE, type FunctionOpts, type GenerateFlags, type OrderIssue, PgCronJob, PgExtension, PgFunction, PgTrigger, type PgTypes, type TriggerEvent, type TriggerForEach, TriggerFunction, type TriggerFunctionOpts, type TriggerOpts, type TriggerTiming, appSlugForeignKey, auditColumns, categorizeChanges, cleanMeta, colAppSlug, colCreatedAt, colDeletedAt, colId, colNumeric, colTimestamp, colUpdatedAt, collectCustomObjects, computeHash, currentAppSlug, currentUser, custom, defaultPolicy, drop, fixOrder, formatChangeSummary, formatVerboseOutput, generate, generateDropSQL, getLatestSnapshotPath, hasAppSlug, hasBypassEnabled, loadSchemaModules, packToSgz, parseFlags, pgCron, pgExtension, pgFunction, pgOrmEnum, pgTrigger, pgTypes, readJournal, readSnapshotCustomObjects, serializeCustomObject, simpleDiff, syncMeta, toPgEnum, unpackFromSgz, validateOrder, validateTimestamps, writeSnapshotCustomObjects };
|
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
import * as drizzle_orm_pg_core from 'drizzle-orm/pg-core';
|
|
2
|
+
import { PgTable, AnyPgColumn, PgCustomColumnBuilder, PgDialect, ExtraConfigColumn, PgPolicy } from 'drizzle-orm/pg-core';
|
|
3
|
+
import * as drizzle_orm from 'drizzle-orm';
|
|
4
|
+
import { SQL } from 'drizzle-orm';
|
|
5
|
+
import { ColumnBaseConfig } from 'drizzle-orm/column';
|
|
6
|
+
import { ColumnDataType } from 'drizzle-orm/column-builder';
|
|
7
|
+
|
|
8
|
+
/** Symbol to store the original key→value mapping on pgEnum results */
|
|
9
|
+
declare const ENUM_MAP: unique symbol;
|
|
10
|
+
declare function toPgEnum<const T extends Record<string, string>>(record: T): [T[keyof T], ...T[keyof T][]];
|
|
11
|
+
declare function pgOrmEnum<const TName extends string, const TEnum extends Record<string, string>>(name: TName, values: TEnum): drizzle_orm_pg_core.PgEnum<[TEnum[keyof TEnum], ...TEnum[keyof TEnum][]]>;
|
|
12
|
+
declare const pgTypes: {
|
|
13
|
+
readonly date: () => "date";
|
|
14
|
+
readonly uuid: () => "uuid";
|
|
15
|
+
readonly text: () => "text";
|
|
16
|
+
readonly integer: () => "integer";
|
|
17
|
+
readonly bigint: () => "bigint";
|
|
18
|
+
readonly boolean: () => "boolean";
|
|
19
|
+
readonly numeric: () => "numeric";
|
|
20
|
+
readonly timestamptz: () => "timestamptz";
|
|
21
|
+
readonly timestamp: () => "timestamp";
|
|
22
|
+
readonly jsonb: () => "jsonb";
|
|
23
|
+
readonly json: () => "json";
|
|
24
|
+
};
|
|
25
|
+
type PgTypes = typeof pgTypes;
|
|
26
|
+
type ArgsBuilder = (types: PgTypes) => Record<string, string>;
|
|
27
|
+
type CustomObjectType = "function" | "trigger" | "extension" | "cron";
|
|
28
|
+
type TriggerTiming = "before" | "after" | "instead of";
|
|
29
|
+
type TriggerForEach = "row" | "statement";
|
|
30
|
+
type TriggerEvent = "insert" | "update" | "delete" | "truncate" | {
|
|
31
|
+
update: AnyPgColumn[];
|
|
32
|
+
};
|
|
33
|
+
interface FunctionOpts {
|
|
34
|
+
args?: ArgsBuilder;
|
|
35
|
+
returns: string;
|
|
36
|
+
schema?: string;
|
|
37
|
+
language?: "plpgsql" | "sql";
|
|
38
|
+
security?: "definer" | "invoker";
|
|
39
|
+
searchPath?: string;
|
|
40
|
+
body: () => SQL;
|
|
41
|
+
}
|
|
42
|
+
interface TriggerFunctionOpts<TTable extends PgTable> extends Omit<FunctionOpts, "args" | "returns"> {
|
|
43
|
+
returns: "trigger";
|
|
44
|
+
triggersOn: TTable | TTable[];
|
|
45
|
+
}
|
|
46
|
+
interface TriggerOpts<TTable extends PgTable> {
|
|
47
|
+
on: TTable;
|
|
48
|
+
schema?: string;
|
|
49
|
+
timing: TriggerTiming;
|
|
50
|
+
events: TriggerEvent[];
|
|
51
|
+
forEach: TriggerForEach;
|
|
52
|
+
condition?: SQL;
|
|
53
|
+
execute: TriggerFunction<TTable>;
|
|
54
|
+
}
|
|
55
|
+
type SqlDialect = {
|
|
56
|
+
sqlToQuery: (s: SQL) => {
|
|
57
|
+
sql: string;
|
|
58
|
+
};
|
|
59
|
+
};
|
|
60
|
+
declare abstract class CustomObject extends SQL {
|
|
61
|
+
name: string;
|
|
62
|
+
type: CustomObjectType;
|
|
63
|
+
schema?: string | undefined;
|
|
64
|
+
readonly qualifiedName: string;
|
|
65
|
+
constructor(name: string, type: CustomObjectType, schema?: string | undefined);
|
|
66
|
+
getSQL(): SQL;
|
|
67
|
+
abstract toSQL(dialect?: SqlDialect): string;
|
|
68
|
+
}
|
|
69
|
+
declare class PgFunction extends CustomObject {
|
|
70
|
+
opts: FunctionOpts;
|
|
71
|
+
constructor(name: string, opts: FunctionOpts);
|
|
72
|
+
toSQL(dialect: SqlDialect): string;
|
|
73
|
+
}
|
|
74
|
+
declare class TriggerFunction<TTable extends PgTable> extends PgFunction {
|
|
75
|
+
triggerOpts: TriggerFunctionOpts<TTable>;
|
|
76
|
+
_table: TTable;
|
|
77
|
+
constructor(name: string, triggerOpts: TriggerFunctionOpts<TTable>);
|
|
78
|
+
}
|
|
79
|
+
declare class PgTrigger<TTable extends PgTable = PgTable> extends CustomObject {
|
|
80
|
+
opts: TriggerOpts<TTable>;
|
|
81
|
+
readonly tableName: string;
|
|
82
|
+
constructor(name: string, opts: TriggerOpts<TTable>);
|
|
83
|
+
toSQL(dialect: SqlDialect): string;
|
|
84
|
+
}
|
|
85
|
+
interface ExtensionOpts {
|
|
86
|
+
schema?: string;
|
|
87
|
+
}
|
|
88
|
+
declare class PgExtension extends CustomObject {
|
|
89
|
+
opts: ExtensionOpts;
|
|
90
|
+
constructor(name: string, opts?: ExtensionOpts);
|
|
91
|
+
toSQL(): string;
|
|
92
|
+
}
|
|
93
|
+
declare function pgExtension(name: string, opts?: ExtensionOpts): PgExtension;
|
|
94
|
+
interface CronJobOpts {
|
|
95
|
+
schedule: string;
|
|
96
|
+
command: () => SQL;
|
|
97
|
+
}
|
|
98
|
+
declare class PgCronJob extends CustomObject {
|
|
99
|
+
opts: CronJobOpts;
|
|
100
|
+
constructor(name: string, opts: CronJobOpts);
|
|
101
|
+
toSQL(dialect: SqlDialect): string;
|
|
102
|
+
}
|
|
103
|
+
declare function pgCron(name: string, opts: CronJobOpts): PgCronJob;
|
|
104
|
+
declare function pgFunction<TTable extends PgTable>(name: string, opts: TriggerFunctionOpts<TTable>): TriggerFunction<TTable>;
|
|
105
|
+
declare function pgFunction(name: string, opts: FunctionOpts): PgFunction;
|
|
106
|
+
declare function pgTrigger<TTable extends PgTable>(name: string, opts: TriggerOpts<TTable>): PgTrigger<TTable>;
|
|
107
|
+
|
|
108
|
+
declare const colNumeric: <const TName extends string>(name: TName) => PgCustomColumnBuilder<{
|
|
109
|
+
name: TName;
|
|
110
|
+
dataType: "custom";
|
|
111
|
+
columnType: "PgCustomColumn";
|
|
112
|
+
data: number;
|
|
113
|
+
driverParam: string;
|
|
114
|
+
enumValues: undefined;
|
|
115
|
+
}>;
|
|
116
|
+
declare const colAppSlug: <T extends string>(name: T) => drizzle_orm.HasDefault<drizzle_orm_pg_core.PgTextBuilderInitial<T, [string, ...string[]]>>;
|
|
117
|
+
declare const colTimestamp: <const T extends string>(name: T) => drizzle_orm_pg_core.PgTimestampBuilderInitial<T>;
|
|
118
|
+
declare const colCreatedAt: <const T extends string>(name: T) => drizzle_orm.NotNull<drizzle_orm.HasDefault<drizzle_orm_pg_core.PgTimestampBuilderInitial<T>>>;
|
|
119
|
+
declare const colUpdatedAt: <const T extends string>(name: T) => drizzle_orm.NotNull<drizzle_orm.HasDefault<drizzle_orm_pg_core.PgTimestampBuilderInitial<T>>>;
|
|
120
|
+
declare const colDeletedAt: <const T extends string>(name: T) => drizzle_orm_pg_core.PgTimestampBuilderInitial<T>;
|
|
121
|
+
declare const colId: <const T extends string>(name: T) => drizzle_orm.NotNull<drizzle_orm.IsPrimaryKey<drizzle_orm.NotNull<drizzle_orm.HasDefault<drizzle_orm_pg_core.PgUUIDBuilderInitial<T>>>>>;
|
|
122
|
+
declare const auditColumns: () => {
|
|
123
|
+
createdBy: drizzle_orm.NotNull<drizzle_orm.HasDefault<drizzle_orm_pg_core.PgTextBuilderInitial<"created_by", [string, ...string[]]>>>;
|
|
124
|
+
updatedBy: drizzle_orm.NotNull<drizzle_orm.HasDefault<drizzle_orm_pg_core.PgTextBuilderInitial<"updated_by", [string, ...string[]]>>>;
|
|
125
|
+
createdAt: drizzle_orm.NotNull<drizzle_orm.HasDefault<drizzle_orm_pg_core.PgTimestampBuilderInitial<"created_at">>>;
|
|
126
|
+
updatedAt: drizzle_orm.NotNull<drizzle_orm.HasDefault<drizzle_orm_pg_core.PgTimestampBuilderInitial<"updated_at">>>;
|
|
127
|
+
deletedAt: drizzle_orm_pg_core.PgTimestampBuilderInitial<"deleted_at">;
|
|
128
|
+
};
|
|
129
|
+
declare const appSlugForeignKey: (table: {
|
|
130
|
+
appSlug: any;
|
|
131
|
+
}, tableName: string, appsTable: {
|
|
132
|
+
slug: any;
|
|
133
|
+
}) => drizzle_orm_pg_core.ForeignKeyBuilder;
|
|
134
|
+
|
|
135
|
+
interface GenerateFlags {
|
|
136
|
+
dryRun: boolean;
|
|
137
|
+
verbose: boolean;
|
|
138
|
+
fix: boolean;
|
|
139
|
+
}
|
|
140
|
+
declare function parseFlags(argv?: string[], env?: Record<string, string | undefined>): GenerateFlags;
|
|
141
|
+
type CustomHashes = Record<string, string>;
|
|
142
|
+
interface CustomObjectEntry {
|
|
143
|
+
hash: string;
|
|
144
|
+
sql: string;
|
|
145
|
+
}
|
|
146
|
+
type CustomObjectsMap = Record<string, CustomObjectEntry>;
|
|
147
|
+
type ChangeCategory = "added" | "modified" | "removed";
|
|
148
|
+
interface CategorizedChange {
|
|
149
|
+
key: string;
|
|
150
|
+
category: ChangeCategory;
|
|
151
|
+
}
|
|
152
|
+
interface JournalEntry {
|
|
153
|
+
idx: number;
|
|
154
|
+
version: string;
|
|
155
|
+
when: number;
|
|
156
|
+
tag: string;
|
|
157
|
+
breakpoints: boolean;
|
|
158
|
+
}
|
|
159
|
+
interface Journal {
|
|
160
|
+
version: string;
|
|
161
|
+
dialect: string;
|
|
162
|
+
entries: JournalEntry[];
|
|
163
|
+
}
|
|
164
|
+
declare function computeHash(sql: string): string;
|
|
165
|
+
declare function categorizeChanges(prev: CustomHashes, curr: CustomHashes): CategorizedChange[];
|
|
166
|
+
declare function formatChangeSummary(changes: CategorizedChange[]): string;
|
|
167
|
+
declare function simpleDiff(prev: string, curr: string): string;
|
|
168
|
+
declare function formatVerboseOutput(changes: CategorizedChange[], currentObjects: CustomObjectsMap, prevObjects: CustomObjectsMap): string;
|
|
169
|
+
declare function readJournal(migrationsDir: string): Journal;
|
|
170
|
+
declare function getLatestSnapshotPath(migrationsDir: string, journal: Journal): string | null;
|
|
171
|
+
declare function readSnapshotCustomObjects(snapshotPath: string): CustomObjectsMap;
|
|
172
|
+
declare function writeSnapshotCustomObjects(snapshotPath: string, objects: CustomObjectsMap): void;
|
|
173
|
+
declare function packToSgz(migrationsDir: string): void;
|
|
174
|
+
declare function unpackFromSgz(migrationsDir: string): void;
|
|
175
|
+
declare function cleanMeta(migrationsDir: string): void;
|
|
176
|
+
interface OrderIssue {
|
|
177
|
+
file: string;
|
|
178
|
+
expected: string;
|
|
179
|
+
actual: string;
|
|
180
|
+
}
|
|
181
|
+
declare function validateTimestamps(migrationsDir: string): string[];
|
|
182
|
+
declare function validateOrder(migrationsDir: string): OrderIssue[];
|
|
183
|
+
declare function fixOrder(migrationsDir: string, issues: OrderIssue[]): void;
|
|
184
|
+
declare function collectCustomObjects(moduleExports: Record<string, unknown>): CustomObject[];
|
|
185
|
+
declare function serializeCustomObject(obj: CustomObject, dialect: PgDialect): string;
|
|
186
|
+
declare function generateDropSQL(key: string, createSQL: string): string | null;
|
|
187
|
+
declare function generate(migrationsDir: string, schemaModules: Record<string, unknown>[], flags?: GenerateFlags): Promise<void>;
|
|
188
|
+
declare function drop(migrationsDir: string): void;
|
|
189
|
+
declare function custom(migrationsDir: string): void;
|
|
190
|
+
declare function loadSchemaModules(schemaDir: string): Promise<Record<string, unknown>[]>;
|
|
191
|
+
declare function syncMeta(migrationsDir: string, schemaModules: Record<string, unknown>[]): Promise<void>;
|
|
192
|
+
|
|
193
|
+
type AppSlugColumn = ExtraConfigColumn<ColumnBaseConfig<ColumnDataType, string>>;
|
|
194
|
+
type DefaultPolicyOptionsContext = {
|
|
195
|
+
currentAppSlug: SQL<unknown>;
|
|
196
|
+
currentUser: SQL<unknown>;
|
|
197
|
+
hasAppSlug: SQL<unknown>;
|
|
198
|
+
hasUser: SQL<unknown>;
|
|
199
|
+
isSameAppSlug: SQL<unknown>;
|
|
200
|
+
hasBypass: SQL<unknown>;
|
|
201
|
+
TRUE: SQL<unknown>;
|
|
202
|
+
FALSE: SQL<unknown>;
|
|
203
|
+
};
|
|
204
|
+
type AppSlugPolicies = {
|
|
205
|
+
select?: (context: DefaultPolicyOptionsContext) => SQL<unknown> | undefined;
|
|
206
|
+
insert?: (context: DefaultPolicyOptionsContext) => SQL<unknown> | undefined;
|
|
207
|
+
update?: (context: DefaultPolicyOptionsContext) => SQL<unknown> | undefined;
|
|
208
|
+
delete?: (context: DefaultPolicyOptionsContext) => SQL<unknown> | undefined;
|
|
209
|
+
};
|
|
210
|
+
type DefaultPolicyOptions = {
|
|
211
|
+
table: {
|
|
212
|
+
appSlug: AppSlugColumn;
|
|
213
|
+
deletedAt?: AnyPgColumn;
|
|
214
|
+
};
|
|
215
|
+
policies?: AppSlugPolicies;
|
|
216
|
+
};
|
|
217
|
+
declare const currentAppSlug: SQL<unknown>;
|
|
218
|
+
declare const hasAppSlug: SQL<unknown>;
|
|
219
|
+
declare const currentUser: SQL<unknown>;
|
|
220
|
+
declare const hasBypassEnabled: SQL<unknown>;
|
|
221
|
+
declare const FALSE: SQL<unknown>;
|
|
222
|
+
declare const defaultPolicy: (name: string, { table, policies }: DefaultPolicyOptions) => PgPolicy[];
|
|
223
|
+
|
|
224
|
+
export { type ArgsBuilder, type CategorizedChange, type ChangeCategory, type CronJobOpts, type CustomHashes, CustomObject, type CustomObjectEntry, type CustomObjectType, type CustomObjectsMap, ENUM_MAP, type ExtensionOpts, FALSE, type FunctionOpts, type GenerateFlags, type OrderIssue, PgCronJob, PgExtension, PgFunction, PgTrigger, type PgTypes, type TriggerEvent, type TriggerForEach, TriggerFunction, type TriggerFunctionOpts, type TriggerOpts, type TriggerTiming, appSlugForeignKey, auditColumns, categorizeChanges, cleanMeta, colAppSlug, colCreatedAt, colDeletedAt, colId, colNumeric, colTimestamp, colUpdatedAt, collectCustomObjects, computeHash, currentAppSlug, currentUser, custom, defaultPolicy, drop, fixOrder, formatChangeSummary, formatVerboseOutput, generate, generateDropSQL, getLatestSnapshotPath, hasAppSlug, hasBypassEnabled, loadSchemaModules, packToSgz, parseFlags, pgCron, pgExtension, pgFunction, pgOrmEnum, pgTrigger, pgTypes, readJournal, readSnapshotCustomObjects, serializeCustomObject, simpleDiff, syncMeta, toPgEnum, unpackFromSgz, validateOrder, validateTimestamps, writeSnapshotCustomObjects };
|