@izumisy/kyrage 1.2.0 → 1.2.1
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/main.js +1 -1
- package/package.json +4 -5
package/dist/main.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{a as ie,b as L}from"./chunk-3M6BYRKC.js";import{a as _,b as x}from"./chunk-EY62Q3Z2.js";import{defineCommand as Vt,runMain as zt}from"citty";var se="1.2.0";import{defineCommand as pt}from"citty";import y from"zod";import{loadConfig as we}from"c12";import u from"zod";var T=u.object({type:u.string()}).catchall(u.any()),D=u.object({table:u.string(),name:u.string()}),B=u.object({table:u.string(),column:u.string()}),F=u.object({...D.shape,columns:u.array(u.string()).readonly()}),H=u.object({...D.shape,columns:u.array(u.string()).readonly()}),ce=u.enum(["cascade","set null","set default","restrict","no action"]),W=u.object({...D.shape,columns:u.array(u.string()).readonly(),referencedTable:u.string(),referencedColumns:u.array(u.string()).readonly(),onDelete:ce.optional(),onUpdate:ce.optional()}),le=u.discriminatedUnion("type",[u.object({type:u.literal("create_table"),table:u.string(),columns:u.record(u.string(),T)}),u.object({type:u.literal("drop_table"),table:u.string()}),u.object({...B.shape,type:u.literal("add_column"),attributes:T}),u.object({...B.shape,type:u.literal("drop_column"),attributes:T}),u.object({...B.shape,type:u.literal("alter_column"),before:T,after:T}),u.object({...D.shape,type:u.literal("create_index"),columns:u.array(u.string()).readonly(),unique:u.boolean()}),u.object({...D.shape,type:u.literal("drop_index")}),u.object({...F.shape,type:u.literal("create_primary_key_constraint")}),u.object({...D.shape,type:u.literal("drop_primary_key_constraint")}),u.object({...H.shape,type:u.literal("create_unique_constraint")}),u.object({...D.shape,type:u.literal("drop_unique_constraint")}),u.object({...W.shape,type:u.literal("create_foreign_key_constraint")}),u.object({...D.shape,type:u.literal("drop_foreign_key_constraint")})]),f={createTable:(e,t)=>({type:"create_table",table:e,columns:t}),dropTable:e=>({type:"drop_table",table:e}),addColumn:(e,t)=>({...e,type:"add_column",attributes:t}),dropColumn:(e,t)=>({...e,type:"drop_column",attributes:t}),alterColumn:(e,t,n)=>({...e,type:"alter_column",before:t,after:n}),createIndex:e=>({...e,type:"create_index"}),dropIndex:e=>({...e,type:"drop_index"}),createPrimaryKeyConstraint:e=>({...e,type:"create_primary_key_constraint"}),dropPrimaryKeyConstraint:e=>({...e,type:"drop_primary_key_constraint"}),createUniqueConstraint:e=>({...e,type:"create_unique_constraint"}),dropUniqueConstraint:e=>({...e,type:"drop_unique_constraint"}),createForeignKeyConstraint:(e,t)=>({...e,...t,type:"create_foreign_key_constraint"}),dropForeignKeyConstraint:e=>({...e,type:"drop_foreign_key_constraint"})};var ve=y.object({type:y.string(),primaryKey:y.boolean().optional().default(!1),notNull:y.boolean().optional().default(!1),unique:y.boolean().optional().default(!1),defaultSql:y.string().optional()}),Te=y.object({tableName:y.string(),columns:y.record(y.string(),ve)}),Oe=y.object({...D.shape,columns:y.array(y.string()).readonly(),unique:y.boolean().default(!1)}),Ae=y.enum(["postgres","cockroachdb","mysql","sqlite"]),Ke=y.object({dialect:Ae,connectionString:y.string()}),Re=y.union([y.object({container:y.object({image:y.string(),name:y.string().optional()})}),y.object({connectionString:y.string()})]).optional(),qe=y.object({database:Ke,dev:Re,tables:y.array(Te).readonly(),indexes:y.array(Oe).readonly(),primaryKeyConstraints:y.array(F).readonly(),uniqueConstraints:y.array(H).readonly(),foreignKeyConstraints:y.array(W).readonly()}),me=async()=>{let e=await we({name:"kyrage"});return qe.parse(e.config)};import{Kysely as $e,MysqlDialect as Me,PostgresDialect as je,SqliteDialect as Ue}from"kysely";import{Pool as ue}from"pg";import{createPool as Le}from"mysql2";import Be from"better-sqlite3";import{PostgresAdapter as Pe,PostgresDialect as Ie}from"kysely";var Q=class extends Pe{async acquireMigrationLock(t,n){await t.selectFrom(n.lockTable).selectAll().forUpdate().execute()}},P=class extends Ie{createAdapter(){return new Q}};import{DummyDriver as ke}from"kysely";var I=class extends ke{constructor(n){super();this.queries=n}async acquireConnection(){return new V(this.queries)}},V=class{constructor(t){this.queries=t}async executeQuery(t){let n=t.query.kind;if(n==="CreateTableNode"||n==="DropTableNode"||n==="AlterTableNode"){if(t.query.table.table.identifier.name.startsWith("kysely_"))return{rows:[]};this.queries.push(t)}else(n==="CreateIndexNode"||n==="DropIndexNode")&&this.queries.push(t);return{rows:[]}}async*streamQuery(){}};var Fe=e=>{switch(e.dialect){case"cockroachdb":return new P({pool:new ue({connectionString:e.connectionString})});case"postgres":return new je({pool:new ue({connectionString:e.connectionString})});case"mysql":return new Me({pool:Le(e.connectionString)});case"sqlite":return new Ue({database:new Be(e.connectionString)});default:throw new Error(`Unsupported dialect: ${e.dialect}`)}},k=e=>new z({databaseProps:e.database,options:e.options}),z=class{constructor(t){this.constructorProps=t}getDB(t){let n=Fe(this.constructorProps.databaseProps);return new J({dialect:{createAdapter:()=>n.createAdapter(),createDriver:()=>n.createDriver(),createIntrospector:a=>n.createIntrospector(a),createQueryCompiler:()=>n.createQueryCompiler()}},{isPlan:t?.plan===!0})}getDialect(){return this.constructorProps.databaseProps.dialect}},J=class extends $e{constructor(n,a){let o=[];super({dialect:{...n.dialect,createDriver:()=>a.isPlan?new I(o):n.dialect.createDriver()}});this.plannedQueries=[];this.plannedQueries=o}getPlannedQueries(){return this.plannedQueries}};async function S(){let e=await me();return{client:k({database:e.database}),logger:ie,config:e}}import{Migrator as dt}from"kysely";import{DEFAULT_MIGRATION_TABLE as pe,isColumnDataType as He,sql as ye}from"kysely";import{readdir as We,readFile as Qe}from"fs/promises";import{join as Ve}from"path";import O from"zod";var w="migrations",ze=O.object({operations:O.array(le).readonly()}),Je=O.object({id:O.string(),version:O.string(),diff:ze}),Y=async()=>{try{let t=(await We(w)).filter(n=>n.endsWith(".json")).map(async n=>Je.parse(JSON.parse(await Qe(Ve(w,n),"utf-8"))));return await Promise.all(t)}catch(e){if(e instanceof Object&&"code"in e&&e.code==="ENOENT")return[];throw e}},E=async e=>{var l=[];try{let t=_(l,e.getDB(),!0);let n=await Y();let a=(await t.introspection.getTables({withInternalKyselyTables:!0})).map(r=>r.name);if(!a.includes(pe))return n;let o=await t.selectFrom(pe).select(["name","timestamp"]).$narrowType().execute();return n.filter(r=>!o.some(p=>p.name===r.id))}catch(c){var i=c,s=!0}finally{var d=x(l,i,s);d&&await d}},ge=e=>({getMigrations:async()=>{let t=await e.migrationsResolver(),n={};return t.forEach(a=>{n[a.id]={up:async()=>{await Ye(e.db,a.diff)}}}),n}});async function Ye(e,t){let n=ut(t.operations);for(let a of n)await Ge(e,a)}async function Ge(e,t){switch(t.type){case"create_table":return Xe(e,t);case"drop_table":return Ze(e,t);case"add_column":return et(e,t);case"drop_column":return tt(e,t);case"alter_column":return nt(e,t);case"create_index":return at(e,t);case"drop_index":return rt(e,t);case"create_primary_key_constraint":return ot(e,t);case"drop_primary_key_constraint":return it(e,t);case"create_unique_constraint":return st(e,t);case"drop_unique_constraint":return ct(e,t);case"create_foreign_key_constraint":return lt(e,t);case"drop_foreign_key_constraint":return mt(e,t);default:throw new Error(`Unknown operation type: ${t.type}`)}}async function Xe(e,t){let n=e.schema.createTable(t.table);for(let[a,o]of Object.entries(t.columns)){let l=o.type;G(l),n=n.addColumn(a,l,c=>{let i=c;return o.notNull&&(i=i.notNull()),typeof o.defaultSql=="string"&&(i=i.defaultTo(ye.raw(o.defaultSql))),i})}await n.execute()}async function Ze(e,t){await e.schema.dropTable(t.table).execute()}async function et(e,t){let n=t.attributes.type;G(n),await e.schema.alterTable(t.table).addColumn(t.column,n,a=>{let o=a;return t.attributes.notNull&&(o=o.notNull()),typeof t.attributes.defaultSql=="string"&&(o=o.defaultTo(ye.raw(t.attributes.defaultSql))),o}).execute()}async function tt(e,t){await e.schema.alterTable(t.table).dropColumn(t.column).execute()}async function nt(e,t){let{table:n,column:a,before:o,after:l}=t;if(o.type!==l.type){let c=l.type;G(c),await e.schema.alterTable(n).alterColumn(a,i=>i.setDataType(c)).execute()}l.notNull!==o.notNull&&(l.notNull?await e.schema.alterTable(n).alterColumn(a,c=>c.setNotNull()).execute():await e.schema.alterTable(n).alterColumn(a,c=>c.dropNotNull()).execute())}async function at(e,t){let n=e.schema.createIndex(t.name).on(t.table);for(let a of t.columns)n=n.column(a);t.unique&&(n=n.unique()),await n.execute()}async function rt(e,t){await e.schema.dropIndex(t.name).execute()}async function ot(e,t){await e.schema.alterTable(t.table).addPrimaryKeyConstraint(t.name,t.columns).execute()}async function it(e,t){await e.schema.alterTable(t.table).dropConstraint(t.name).execute()}async function st(e,t){await e.schema.alterTable(t.table).addUniqueConstraint(t.name,t.columns).execute()}async function ct(e,t){await e.schema.alterTable(t.table).dropConstraint(t.name).execute()}async function lt(e,t){let n=e.schema.alterTable(t.table).addForeignKeyConstraint(t.name,t.columns,t.referencedTable,t.referencedColumns);t.onDelete&&(n=n.onDelete(t.onDelete)),t.onUpdate&&(n=n.onUpdate(t.onUpdate)),await n.execute()}async function mt(e,t){await e.schema.alterTable(t.table).dropConstraint(t.name).execute()}var G=e=>{if(!He(e))throw new Error(`Unsupported data type: ${e}`)},de={drop_foreign_key_constraint:0,drop_unique_constraint:1,drop_primary_key_constraint:2,drop_index:3,drop_column:4,drop_table:5,create_table:6,add_column:7,alter_column:8,create_index:9,create_primary_key_constraint:10,create_unique_constraint:11,create_foreign_key_constraint:12},ut=e=>e.slice().sort((t,n)=>{let a=de[t.type],o=de[n.type];return a!==o?a-o:t.table.localeCompare(n.table)});import{format as yt}from"sql-formatter";async function A(e,t){var r=[];try{let{client:n,logger:a}=e;let{reporter:o}=a;let l=_(r,n.getDB({plan:t.plan}),!0);let c=new dt({db:l,provider:ge({db:l,migrationsResolver:async()=>t.plan?await E(n):await Y(),options:{plan:t.plan}})});let{results:i,error:s}=await c.migrateToLatest();let d=l.getPlannedQueries();if(d.length>0){d.forEach(b=>{a.stdout(t.pretty?yt(b.sql):b.sql)});return}i&&i.length>0?i.forEach(b=>{b.status==="Error"?o.error(`Migration failed: ${b.migrationName}`):b.status==="Success"&&o.success(`Migration applied: ${b.migrationName}`)}):o.info("No migrations to run");if(s)throw s instanceof Error?s:new Error(`Migration error: ${s}`)}catch(p){var m=p,h=!0}finally{var C=x(r,m,h);C&&await C}}var fe=pt({meta:{name:"apply",description:"Run migrations to sync database schema"},args:{plan:{type:"boolean",description:"Plan the migration without applying it",default:!1},pretty:{type:"boolean",description:"Pretty print the migration SQL (only for --plan)",default:!1}},run:async e=>{try{let t=await S();await A(t,{plan:e.args.plan,pretty:e.args.pretty})}catch(t){let{defaultConsolaLogger:n}=await import("./logger-SE7G5AMI.js");n.reporter.error(t),process.exit(1)}}});import{defineCommand as At}from"citty";import{mkdir as Kt,writeFile as Rt,unlink as qt}from"fs/promises";import{join as Pt}from"path";import*as g from"ramda";var v=()=>({added:(e,t,n)=>g.pipe(g.difference(t),g.map(n))(e),removed:(e,t,n)=>g.pipe(g.difference(e),g.map(n))(t),changed:(e,t,n,a)=>g.pipe(g.intersection(e),g.filter(n),g.map(a))(t)}),$=g.prop("name"),gt=g.eqBy(e=>[e.type,e.notNull??!1,e.primaryKey??!1,e.unique??!1]);function ft(e,t){let n=[],a=v(),o=e.columns,l=t.columns,c=Object.keys(o),i=Object.keys(l);return a.added(c,i,s=>({column:s,attributes:l[s]})).forEach(s=>{n.push(f.addColumn({table:e.name,column:s.column},s.attributes))}),a.removed(c,i,s=>({column:s,attributes:o[s]})).forEach(s=>{n.push(f.dropColumn({table:e.name,column:s.column},s.attributes))}),a.changed(c,i,s=>!gt(o[s],l[s]),s=>({column:s,before:o[s],after:l[s]})).forEach(s=>{n.push(f.alterColumn({table:e.name,column:s.column},s.before,s.after))}),n}function bt(e){let{current:t,ideal:n}=e,a=[],o=v(),l=g.map($,t),c=g.map($,n);return o.added(l,c,i=>n.find(d=>d.name===i)).forEach(i=>{a.push(f.createTable(i.name,i.columns))}),o.removed(l,c,g.identity).forEach(i=>{a.push(f.dropTable(i))}),g.filter(i=>n.some(s=>s.name===i.name))(t).forEach(i=>{let s=n.find(d=>d.name===i.name);a.push(...ft(i,s))}),a}function Ct(e){let{current:t,ideal:n}=e,a=[],o=v(),l=r=>`${r.table}:${r.name}`,c=new Map(t.map(r=>[l(r),r])),i=new Map(n.map(r=>[l(r),r])),s=Array.from(c.keys()),d=Array.from(i.keys());return o.added(s,d,r=>i.get(r)).forEach(r=>{a.push(f.createIndex(r))}),o.removed(s,d,r=>{let p=c.get(r);return{table:p.table,name:p.name}}).forEach(r=>{a.push(f.dropIndex(r))}),o.changed(s,d,r=>{let p=c.get(r),m=i.get(r);return!g.equals(p.columns,m.columns)||p.unique!==m.unique},r=>{let p=c.get(r),m=i.get(r);return{current:p,ideal:m}}).forEach(({current:r,ideal:p})=>{a.push(f.dropIndex(r)),a.push(f.createIndex(p))}),a}function ht(e){let{current:t,ideal:n}=e,a=[],o=v(),l=r=>`${r.table}:${r.name}`,c=new Map(t.map(r=>[l(r),r])),i=new Map(n.map(r=>[l(r),r])),s=Array.from(c.keys()),d=Array.from(i.keys());return o.added(s,d,r=>i.get(r)).forEach(r=>{a.push(f.createPrimaryKeyConstraint(r))}),o.removed(s,d,r=>{let p=c.get(r);return{table:p.table,name:p.name}}).forEach(r=>{a.push(f.dropPrimaryKeyConstraint(r))}),o.changed(s,d,r=>{let p=c.get(r),m=i.get(r);return!g.equals(p.columns,m.columns)},r=>{let p=c.get(r),m=i.get(r);return{current:p,ideal:m}}).forEach(({current:r,ideal:p})=>{a.push(f.dropPrimaryKeyConstraint(r)),a.push(f.createPrimaryKeyConstraint(p))}),a}function _t(e){let{current:t,ideal:n}=e,a=[],o=v(),l=r=>`${r.table}:${r.name}`,c=new Map(t.map(r=>[l(r),r])),i=new Map(n.map(r=>[l(r),r])),s=Array.from(c.keys()),d=Array.from(i.keys());return o.added(s,d,r=>i.get(r)).forEach(r=>{a.push(f.createUniqueConstraint(r))}),o.removed(s,d,r=>{let p=c.get(r);return{table:p.table,name:p.name}}).forEach(r=>{a.push(f.dropUniqueConstraint(r))}),o.changed(s,d,r=>{let p=c.get(r),m=i.get(r);return!g.equals(p.columns,m.columns)},r=>{let p=c.get(r),m=i.get(r);return{current:p,ideal:m}}).forEach(({current:r,ideal:p})=>{a.push(f.dropUniqueConstraint(r)),a.push(f.createUniqueConstraint(p))}),a}function xt(e){let t=[],n=v(),a=e.current.map($),o=e.ideal.map($);t.push(...n.added(a,o,c=>{let i=e.ideal.find(p=>p.name===c),{table:s,name:d,...r}=i;return f.createForeignKeyConstraint({table:s,name:d},r)})),t.push(...n.removed(a,o,c=>{let i=e.current.find(s=>s.name===c);return f.dropForeignKeyConstraint(i)}));let l=c=>{let i=e.current.find(d=>d.name===c),s=e.ideal.find(d=>d.name===c);return!i||!s?!1:!(g.equals(i.columns,s.columns)&&i.referencedTable===s.referencedTable&&g.equals(i.referencedColumns,s.referencedColumns)&&i.onDelete===s.onDelete&&i.onUpdate===s.onUpdate)};return t.push(...n.changed(a,o,l,c=>{let i=e.current.find(m=>m.name===c),s=e.ideal.find(m=>m.name===c),{table:d,name:r,...p}=s;return[f.dropForeignKeyConstraint(i),f.createForeignKeyConstraint({table:d,name:r},p)]}).flat()),t}function be(e){let t=bt({current:e.current.tables,ideal:e.ideal.tables}),n=Ct({current:e.current.indexes,ideal:e.ideal.indexes}),a=ht({current:e.current.primaryKeyConstraints,ideal:e.ideal.primaryKeyConstraints}),o=_t({current:e.current.uniqueConstraints,ideal:e.ideal.uniqueConstraints}),l=xt({current:e.current.foreignKeyConstraints,ideal:e.ideal.foreignKeyConstraints});return{operations:[...t,...n,...a,...o,...l]}}import{sql as X}from"kysely";var Dt={bool:"boolean",int2:"smallint",int4:"integer",int8:"bigint"},St=e=>Dt[e]??e,Ce=e=>({introspectTables:async()=>{var i=[];try{let o=e.client;let l=_(i,o.getDB(),!0);let{rows:c}=await X`
|
|
1
|
+
import{a as ie,b as L}from"./chunk-3M6BYRKC.js";import{a as _,b as x}from"./chunk-EY62Q3Z2.js";import{defineCommand as Vt,runMain as zt}from"citty";var se="1.2.1";import{defineCommand as pt}from"citty";import y from"zod";import{loadConfig as we}from"c12";import u from"zod";var T=u.object({type:u.string()}).catchall(u.any()),D=u.object({table:u.string(),name:u.string()}),B=u.object({table:u.string(),column:u.string()}),F=u.object({...D.shape,columns:u.array(u.string()).readonly()}),H=u.object({...D.shape,columns:u.array(u.string()).readonly()}),ce=u.enum(["cascade","set null","set default","restrict","no action"]),W=u.object({...D.shape,columns:u.array(u.string()).readonly(),referencedTable:u.string(),referencedColumns:u.array(u.string()).readonly(),onDelete:ce.optional(),onUpdate:ce.optional()}),le=u.discriminatedUnion("type",[u.object({type:u.literal("create_table"),table:u.string(),columns:u.record(u.string(),T)}),u.object({type:u.literal("drop_table"),table:u.string()}),u.object({...B.shape,type:u.literal("add_column"),attributes:T}),u.object({...B.shape,type:u.literal("drop_column"),attributes:T}),u.object({...B.shape,type:u.literal("alter_column"),before:T,after:T}),u.object({...D.shape,type:u.literal("create_index"),columns:u.array(u.string()).readonly(),unique:u.boolean()}),u.object({...D.shape,type:u.literal("drop_index")}),u.object({...F.shape,type:u.literal("create_primary_key_constraint")}),u.object({...D.shape,type:u.literal("drop_primary_key_constraint")}),u.object({...H.shape,type:u.literal("create_unique_constraint")}),u.object({...D.shape,type:u.literal("drop_unique_constraint")}),u.object({...W.shape,type:u.literal("create_foreign_key_constraint")}),u.object({...D.shape,type:u.literal("drop_foreign_key_constraint")})]),f={createTable:(e,t)=>({type:"create_table",table:e,columns:t}),dropTable:e=>({type:"drop_table",table:e}),addColumn:(e,t)=>({...e,type:"add_column",attributes:t}),dropColumn:(e,t)=>({...e,type:"drop_column",attributes:t}),alterColumn:(e,t,n)=>({...e,type:"alter_column",before:t,after:n}),createIndex:e=>({...e,type:"create_index"}),dropIndex:e=>({...e,type:"drop_index"}),createPrimaryKeyConstraint:e=>({...e,type:"create_primary_key_constraint"}),dropPrimaryKeyConstraint:e=>({...e,type:"drop_primary_key_constraint"}),createUniqueConstraint:e=>({...e,type:"create_unique_constraint"}),dropUniqueConstraint:e=>({...e,type:"drop_unique_constraint"}),createForeignKeyConstraint:(e,t)=>({...e,...t,type:"create_foreign_key_constraint"}),dropForeignKeyConstraint:e=>({...e,type:"drop_foreign_key_constraint"})};var ve=y.object({type:y.string(),primaryKey:y.boolean().optional().default(!1),notNull:y.boolean().optional().default(!1),unique:y.boolean().optional().default(!1),defaultSql:y.string().optional()}),Te=y.object({tableName:y.string(),columns:y.record(y.string(),ve)}),Oe=y.object({...D.shape,columns:y.array(y.string()).readonly(),unique:y.boolean().default(!1)}),Ae=y.enum(["postgres","cockroachdb","mysql","sqlite"]),Ke=y.object({dialect:Ae,connectionString:y.string()}),Re=y.union([y.object({container:y.object({image:y.string(),name:y.string().optional()})}),y.object({connectionString:y.string()})]).optional(),qe=y.object({database:Ke,dev:Re,tables:y.array(Te).readonly(),indexes:y.array(Oe).readonly(),primaryKeyConstraints:y.array(F).readonly(),uniqueConstraints:y.array(H).readonly(),foreignKeyConstraints:y.array(W).readonly()}),me=async()=>{let e=await we({name:"kyrage"});return qe.parse(e.config)};import{Kysely as $e,MysqlDialect as Me,PostgresDialect as je,SqliteDialect as Ue}from"kysely";import{Pool as ue}from"pg";import{createPool as Le}from"mysql2";import Be from"better-sqlite3";import{PostgresAdapter as Pe,PostgresDialect as Ie}from"kysely";var Q=class extends Pe{async acquireMigrationLock(t,n){await t.selectFrom(n.lockTable).selectAll().forUpdate().execute()}},P=class extends Ie{createAdapter(){return new Q}};import{DummyDriver as ke}from"kysely";var I=class extends ke{constructor(n){super();this.queries=n}async acquireConnection(){return new V(this.queries)}},V=class{constructor(t){this.queries=t}async executeQuery(t){let n=t.query.kind;if(n==="CreateTableNode"||n==="DropTableNode"||n==="AlterTableNode"){if(t.query.table.table.identifier.name.startsWith("kysely_"))return{rows:[]};this.queries.push(t)}else(n==="CreateIndexNode"||n==="DropIndexNode")&&this.queries.push(t);return{rows:[]}}async*streamQuery(){}};var Fe=e=>{switch(e.dialect){case"cockroachdb":return new P({pool:new ue({connectionString:e.connectionString})});case"postgres":return new je({pool:new ue({connectionString:e.connectionString})});case"mysql":return new Me({pool:Le(e.connectionString)});case"sqlite":return new Ue({database:new Be(e.connectionString)});default:throw new Error(`Unsupported dialect: ${e.dialect}`)}},k=e=>new z({databaseProps:e.database,options:e.options}),z=class{constructor(t){this.constructorProps=t}getDB(t){let n=Fe(this.constructorProps.databaseProps);return new J({dialect:{createAdapter:()=>n.createAdapter(),createDriver:()=>n.createDriver(),createIntrospector:a=>n.createIntrospector(a),createQueryCompiler:()=>n.createQueryCompiler()}},{isPlan:t?.plan===!0})}getDialect(){return this.constructorProps.databaseProps.dialect}},J=class extends $e{constructor(n,a){let o=[];super({dialect:{...n.dialect,createDriver:()=>a.isPlan?new I(o):n.dialect.createDriver()}});this.plannedQueries=[];this.plannedQueries=o}getPlannedQueries(){return this.plannedQueries}};async function S(){let e=await me();return{client:k({database:e.database}),logger:ie,config:e}}import{Migrator as dt}from"kysely";import{DEFAULT_MIGRATION_TABLE as pe,isColumnDataType as He,sql as ye}from"kysely";import{readdir as We,readFile as Qe}from"fs/promises";import{join as Ve}from"path";import O from"zod";var w="migrations",ze=O.object({operations:O.array(le).readonly()}),Je=O.object({id:O.string(),version:O.string(),diff:ze}),Y=async()=>{try{let t=(await We(w)).filter(n=>n.endsWith(".json")).map(async n=>Je.parse(JSON.parse(await Qe(Ve(w,n),"utf-8"))));return await Promise.all(t)}catch(e){if(e instanceof Object&&"code"in e&&e.code==="ENOENT")return[];throw e}},E=async e=>{var l=[];try{let t=_(l,e.getDB(),!0);let n=await Y();let a=(await t.introspection.getTables({withInternalKyselyTables:!0})).map(r=>r.name);if(!a.includes(pe))return n;let o=await t.selectFrom(pe).select(["name","timestamp"]).$narrowType().execute();return n.filter(r=>!o.some(p=>p.name===r.id))}catch(c){var i=c,s=!0}finally{var d=x(l,i,s);d&&await d}},ge=e=>({getMigrations:async()=>{let t=await e.migrationsResolver(),n={};return t.forEach(a=>{n[a.id]={up:async()=>{await Ye(e.db,a.diff)}}}),n}});async function Ye(e,t){let n=ut(t.operations);for(let a of n)await Ge(e,a)}async function Ge(e,t){switch(t.type){case"create_table":return Xe(e,t);case"drop_table":return Ze(e,t);case"add_column":return et(e,t);case"drop_column":return tt(e,t);case"alter_column":return nt(e,t);case"create_index":return at(e,t);case"drop_index":return rt(e,t);case"create_primary_key_constraint":return ot(e,t);case"drop_primary_key_constraint":return it(e,t);case"create_unique_constraint":return st(e,t);case"drop_unique_constraint":return ct(e,t);case"create_foreign_key_constraint":return lt(e,t);case"drop_foreign_key_constraint":return mt(e,t);default:throw new Error(`Unknown operation type: ${t.type}`)}}async function Xe(e,t){let n=e.schema.createTable(t.table);for(let[a,o]of Object.entries(t.columns)){let l=o.type;G(l),n=n.addColumn(a,l,c=>{let i=c;return o.notNull&&(i=i.notNull()),typeof o.defaultSql=="string"&&(i=i.defaultTo(ye.raw(o.defaultSql))),i})}await n.execute()}async function Ze(e,t){await e.schema.dropTable(t.table).execute()}async function et(e,t){let n=t.attributes.type;G(n),await e.schema.alterTable(t.table).addColumn(t.column,n,a=>{let o=a;return t.attributes.notNull&&(o=o.notNull()),typeof t.attributes.defaultSql=="string"&&(o=o.defaultTo(ye.raw(t.attributes.defaultSql))),o}).execute()}async function tt(e,t){await e.schema.alterTable(t.table).dropColumn(t.column).execute()}async function nt(e,t){let{table:n,column:a,before:o,after:l}=t;if(o.type!==l.type){let c=l.type;G(c),await e.schema.alterTable(n).alterColumn(a,i=>i.setDataType(c)).execute()}l.notNull!==o.notNull&&(l.notNull?await e.schema.alterTable(n).alterColumn(a,c=>c.setNotNull()).execute():await e.schema.alterTable(n).alterColumn(a,c=>c.dropNotNull()).execute())}async function at(e,t){let n=e.schema.createIndex(t.name).on(t.table);for(let a of t.columns)n=n.column(a);t.unique&&(n=n.unique()),await n.execute()}async function rt(e,t){await e.schema.dropIndex(t.name).execute()}async function ot(e,t){await e.schema.alterTable(t.table).addPrimaryKeyConstraint(t.name,t.columns).execute()}async function it(e,t){await e.schema.alterTable(t.table).dropConstraint(t.name).execute()}async function st(e,t){await e.schema.alterTable(t.table).addUniqueConstraint(t.name,t.columns).execute()}async function ct(e,t){await e.schema.alterTable(t.table).dropConstraint(t.name).execute()}async function lt(e,t){let n=e.schema.alterTable(t.table).addForeignKeyConstraint(t.name,t.columns,t.referencedTable,t.referencedColumns);t.onDelete&&(n=n.onDelete(t.onDelete)),t.onUpdate&&(n=n.onUpdate(t.onUpdate)),await n.execute()}async function mt(e,t){await e.schema.alterTable(t.table).dropConstraint(t.name).execute()}var G=e=>{if(!He(e))throw new Error(`Unsupported data type: ${e}`)},de={drop_foreign_key_constraint:0,drop_unique_constraint:1,drop_primary_key_constraint:2,drop_index:3,drop_column:4,drop_table:5,create_table:6,add_column:7,alter_column:8,create_index:9,create_primary_key_constraint:10,create_unique_constraint:11,create_foreign_key_constraint:12},ut=e=>e.slice().sort((t,n)=>{let a=de[t.type],o=de[n.type];return a!==o?a-o:t.table.localeCompare(n.table)});import{format as yt}from"sql-formatter";async function A(e,t){var r=[];try{let{client:n,logger:a}=e;let{reporter:o}=a;let l=_(r,n.getDB({plan:t.plan}),!0);let c=new dt({db:l,provider:ge({db:l,migrationsResolver:async()=>t.plan?await E(n):await Y(),options:{plan:t.plan}})});let{results:i,error:s}=await c.migrateToLatest();let d=l.getPlannedQueries();if(d.length>0){d.forEach(b=>{a.stdout(t.pretty?yt(b.sql):b.sql)});return}i&&i.length>0?i.forEach(b=>{b.status==="Error"?o.error(`Migration failed: ${b.migrationName}`):b.status==="Success"&&o.success(`Migration applied: ${b.migrationName}`)}):o.info("No migrations to run");if(s)throw s instanceof Error?s:new Error(`Migration error: ${s}`)}catch(p){var m=p,h=!0}finally{var C=x(r,m,h);C&&await C}}var fe=pt({meta:{name:"apply",description:"Run migrations to sync database schema"},args:{plan:{type:"boolean",description:"Plan the migration without applying it",default:!1},pretty:{type:"boolean",description:"Pretty print the migration SQL (only for --plan)",default:!1}},run:async e=>{try{let t=await S();await A(t,{plan:e.args.plan,pretty:e.args.pretty})}catch(t){let{defaultConsolaLogger:n}=await import("./logger-SE7G5AMI.js");n.reporter.error(t),process.exit(1)}}});import{defineCommand as At}from"citty";import{mkdir as Kt,writeFile as Rt,unlink as qt}from"fs/promises";import{join as Pt}from"path";import*as g from"ramda";var v=()=>({added:(e,t,n)=>g.pipe(g.difference(t),g.map(n))(e),removed:(e,t,n)=>g.pipe(g.difference(e),g.map(n))(t),changed:(e,t,n,a)=>g.pipe(g.intersection(e),g.filter(n),g.map(a))(t)}),$=g.prop("name"),gt=g.eqBy(e=>[e.type,e.notNull??!1,e.primaryKey??!1,e.unique??!1]);function ft(e,t){let n=[],a=v(),o=e.columns,l=t.columns,c=Object.keys(o),i=Object.keys(l);return a.added(c,i,s=>({column:s,attributes:l[s]})).forEach(s=>{n.push(f.addColumn({table:e.name,column:s.column},s.attributes))}),a.removed(c,i,s=>({column:s,attributes:o[s]})).forEach(s=>{n.push(f.dropColumn({table:e.name,column:s.column},s.attributes))}),a.changed(c,i,s=>!gt(o[s],l[s]),s=>({column:s,before:o[s],after:l[s]})).forEach(s=>{n.push(f.alterColumn({table:e.name,column:s.column},s.before,s.after))}),n}function bt(e){let{current:t,ideal:n}=e,a=[],o=v(),l=g.map($,t),c=g.map($,n);return o.added(l,c,i=>n.find(d=>d.name===i)).forEach(i=>{a.push(f.createTable(i.name,i.columns))}),o.removed(l,c,g.identity).forEach(i=>{a.push(f.dropTable(i))}),g.filter(i=>n.some(s=>s.name===i.name))(t).forEach(i=>{let s=n.find(d=>d.name===i.name);a.push(...ft(i,s))}),a}function Ct(e){let{current:t,ideal:n}=e,a=[],o=v(),l=r=>`${r.table}:${r.name}`,c=new Map(t.map(r=>[l(r),r])),i=new Map(n.map(r=>[l(r),r])),s=Array.from(c.keys()),d=Array.from(i.keys());return o.added(s,d,r=>i.get(r)).forEach(r=>{a.push(f.createIndex(r))}),o.removed(s,d,r=>{let p=c.get(r);return{table:p.table,name:p.name}}).forEach(r=>{a.push(f.dropIndex(r))}),o.changed(s,d,r=>{let p=c.get(r),m=i.get(r);return!g.equals(p.columns,m.columns)||p.unique!==m.unique},r=>{let p=c.get(r),m=i.get(r);return{current:p,ideal:m}}).forEach(({current:r,ideal:p})=>{a.push(f.dropIndex(r)),a.push(f.createIndex(p))}),a}function ht(e){let{current:t,ideal:n}=e,a=[],o=v(),l=r=>`${r.table}:${r.name}`,c=new Map(t.map(r=>[l(r),r])),i=new Map(n.map(r=>[l(r),r])),s=Array.from(c.keys()),d=Array.from(i.keys());return o.added(s,d,r=>i.get(r)).forEach(r=>{a.push(f.createPrimaryKeyConstraint(r))}),o.removed(s,d,r=>{let p=c.get(r);return{table:p.table,name:p.name}}).forEach(r=>{a.push(f.dropPrimaryKeyConstraint(r))}),o.changed(s,d,r=>{let p=c.get(r),m=i.get(r);return!g.equals(p.columns,m.columns)},r=>{let p=c.get(r),m=i.get(r);return{current:p,ideal:m}}).forEach(({current:r,ideal:p})=>{a.push(f.dropPrimaryKeyConstraint(r)),a.push(f.createPrimaryKeyConstraint(p))}),a}function _t(e){let{current:t,ideal:n}=e,a=[],o=v(),l=r=>`${r.table}:${r.name}`,c=new Map(t.map(r=>[l(r),r])),i=new Map(n.map(r=>[l(r),r])),s=Array.from(c.keys()),d=Array.from(i.keys());return o.added(s,d,r=>i.get(r)).forEach(r=>{a.push(f.createUniqueConstraint(r))}),o.removed(s,d,r=>{let p=c.get(r);return{table:p.table,name:p.name}}).forEach(r=>{a.push(f.dropUniqueConstraint(r))}),o.changed(s,d,r=>{let p=c.get(r),m=i.get(r);return!g.equals(p.columns,m.columns)},r=>{let p=c.get(r),m=i.get(r);return{current:p,ideal:m}}).forEach(({current:r,ideal:p})=>{a.push(f.dropUniqueConstraint(r)),a.push(f.createUniqueConstraint(p))}),a}function xt(e){let t=[],n=v(),a=e.current.map($),o=e.ideal.map($);t.push(...n.added(a,o,c=>{let i=e.ideal.find(p=>p.name===c),{table:s,name:d,...r}=i;return f.createForeignKeyConstraint({table:s,name:d},r)})),t.push(...n.removed(a,o,c=>{let i=e.current.find(s=>s.name===c);return f.dropForeignKeyConstraint(i)}));let l=c=>{let i=e.current.find(d=>d.name===c),s=e.ideal.find(d=>d.name===c);return!i||!s?!1:!(g.equals(i.columns,s.columns)&&i.referencedTable===s.referencedTable&&g.equals(i.referencedColumns,s.referencedColumns)&&i.onDelete===s.onDelete&&i.onUpdate===s.onUpdate)};return t.push(...n.changed(a,o,l,c=>{let i=e.current.find(m=>m.name===c),s=e.ideal.find(m=>m.name===c),{table:d,name:r,...p}=s;return[f.dropForeignKeyConstraint(i),f.createForeignKeyConstraint({table:d,name:r},p)]}).flat()),t}function be(e){let t=bt({current:e.current.tables,ideal:e.ideal.tables}),n=Ct({current:e.current.indexes,ideal:e.ideal.indexes}),a=ht({current:e.current.primaryKeyConstraints,ideal:e.ideal.primaryKeyConstraints}),o=_t({current:e.current.uniqueConstraints,ideal:e.ideal.uniqueConstraints}),l=xt({current:e.current.foreignKeyConstraints,ideal:e.ideal.foreignKeyConstraints});return{operations:[...t,...n,...a,...o,...l]}}import{sql as X}from"kysely";var Dt={bool:"boolean",int2:"smallint",int4:"integer",int8:"bigint"},St=e=>Dt[e]??e,Ce=e=>({introspectTables:async()=>{var i=[];try{let o=e.client;let l=_(i,o.getDB(),!0);let{rows:c}=await X`
|
|
2
2
|
SELECT
|
|
3
3
|
n.nspname AS table_schema,
|
|
4
4
|
c.relname AS table_name,
|
package/package.json
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "@izumisy/kyrage",
|
|
3
3
|
"private": false,
|
|
4
4
|
"type": "module",
|
|
5
|
-
"version": "1.2.
|
|
5
|
+
"version": "1.2.1",
|
|
6
6
|
"description": "A minimal, schema-based declarative migration tool for Node.js ecosystem",
|
|
7
7
|
"author": "Seiya Izumi (https://github.com/IzumiSy)",
|
|
8
8
|
"license": "MIT",
|
|
@@ -37,18 +37,17 @@
|
|
|
37
37
|
"citty": "^0.1.6",
|
|
38
38
|
"consola": "^3.4.2",
|
|
39
39
|
"kysely": "^0.28.5",
|
|
40
|
-
"
|
|
41
|
-
"mysql2": "^3.14.3",
|
|
40
|
+
"mysql2": "^3.14.4",
|
|
42
41
|
"pg": "^8.16.3",
|
|
43
42
|
"ramda": "^0.31.3",
|
|
44
|
-
"sql-formatter": "^15.6.
|
|
43
|
+
"sql-formatter": "^15.6.8",
|
|
45
44
|
"testcontainers": "^11.5.1",
|
|
46
45
|
"zod": "^4.1.5"
|
|
47
46
|
},
|
|
48
47
|
"devDependencies": {
|
|
49
48
|
"@swc/core": "^1.13.5",
|
|
50
49
|
"@types/better-sqlite3": "^7.6.13",
|
|
51
|
-
"@types/node": "^24.3.
|
|
50
|
+
"@types/node": "^24.3.1",
|
|
52
51
|
"@types/pg": "^8.15.5",
|
|
53
52
|
"@types/ramda": "^0.31.0",
|
|
54
53
|
"memfs": "^4.38.2",
|