@hot-updater/server 0.30.11 → 0.31.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/_virtual/_rolldown/runtime.cjs +25 -0
- package/dist/_virtual/_rolldown/runtime.mjs +6 -0
- package/dist/adapters/drizzle.cjs +6 -9
- package/dist/adapters/drizzle.d.cts +8 -1
- package/dist/adapters/drizzle.d.mts +8 -1
- package/dist/adapters/drizzle.mjs +5 -2
- package/dist/adapters/kysely.cjs +7 -9
- package/dist/adapters/kysely.d.cts +14 -1
- package/dist/adapters/kysely.d.mts +14 -1
- package/dist/adapters/kysely.mjs +6 -2
- package/dist/adapters/mongodb.cjs +7 -9
- package/dist/adapters/mongodb.d.cts +9 -1
- package/dist/adapters/mongodb.d.mts +9 -1
- package/dist/adapters/mongodb.mjs +5 -2
- package/dist/adapters/prisma.cjs +6 -9
- package/dist/adapters/prisma.d.cts +8 -1
- package/dist/adapters/prisma.d.mts +8 -1
- package/dist/adapters/prisma.mjs +5 -2
- package/dist/db/createBundleDiff.cjs +166 -0
- package/dist/db/createBundleDiff.d.cts +20 -0
- package/dist/db/createBundleDiff.d.mts +20 -0
- package/dist/db/createBundleDiff.mjs +161 -0
- package/dist/db/index.cjs +15 -16
- package/dist/db/index.d.cts +5 -4
- package/dist/db/index.d.mts +5 -4
- package/dist/db/index.mjs +14 -16
- package/dist/db/ormCore.cjs +173 -65
- package/dist/db/ormCore.d.cts +100 -34
- package/dist/db/ormCore.d.mts +100 -34
- package/dist/db/ormCore.mjs +171 -64
- package/dist/db/pluginCore.cjs +37 -3
- package/dist/db/pluginCore.mjs +36 -3
- package/dist/db/schemaEnhancements.cjs +171 -0
- package/dist/db/schemaEnhancements.mjs +167 -0
- package/dist/db/types.cjs +6 -0
- package/dist/db/types.d.cts +19 -7
- package/dist/db/types.d.mts +22 -10
- package/dist/db/types.mjs +6 -1
- package/dist/db/updateArtifacts.cjs +127 -0
- package/dist/db/updateArtifacts.mjs +125 -0
- package/dist/handler.cjs +61 -5
- package/dist/handler.d.cts +2 -2
- package/dist/handler.d.mts +5 -5
- package/dist/handler.mjs +59 -5
- package/dist/index.cjs +2 -0
- package/dist/index.d.cts +3 -2
- package/dist/index.d.mts +3 -2
- package/dist/index.mjs +2 -1
- package/dist/node.d.cts +0 -1
- package/dist/node.d.mts +0 -1
- package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/_u64.cjs +112 -0
- package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/_u64.mjs +108 -0
- package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/cryptoNode.cjs +22 -0
- package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/cryptoNode.mjs +18 -0
- package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/sha3.cjs +219 -0
- package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/sha3.mjs +214 -0
- package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/utils.cjs +275 -0
- package/dist/node_modules/.pnpm/@noble_hashes@1.8.0/node_modules/@noble/hashes/utils.mjs +270 -0
- package/dist/node_modules/.pnpm/@paralleldrive_cuid2@2.3.1/node_modules/@paralleldrive/cuid2/index.cjs +17 -0
- package/dist/node_modules/.pnpm/@paralleldrive_cuid2@2.3.1/node_modules/@paralleldrive/cuid2/index.mjs +13 -0
- package/dist/node_modules/.pnpm/@paralleldrive_cuid2@2.3.1/node_modules/@paralleldrive/cuid2/src/index.cjs +69 -0
- package/dist/node_modules/.pnpm/@paralleldrive_cuid2@2.3.1/node_modules/@paralleldrive/cuid2/src/index.mjs +65 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pglite@0.2.17_@_31f44b782f9321d71f3ce9d35aa1edf7/node_modules/drizzle-orm/column.cjs +52 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pglite@0.2.17_@_31f44b782f9321d71f3ce9d35aa1edf7/node_modules/drizzle-orm/column.mjs +52 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pglite@0.2.17_@_31f44b782f9321d71f3ce9d35aa1edf7/node_modules/drizzle-orm/entity.cjs +16 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pglite@0.2.17_@_31f44b782f9321d71f3ce9d35aa1edf7/node_modules/drizzle-orm/entity.mjs +15 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pglite@0.2.17_@_31f44b782f9321d71f3ce9d35aa1edf7/node_modules/drizzle-orm/pg-core/columns/enum.cjs +7 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pglite@0.2.17_@_31f44b782f9321d71f3ce9d35aa1edf7/node_modules/drizzle-orm/pg-core/columns/enum.mjs +7 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pglite@0.2.17_@_31f44b782f9321d71f3ce9d35aa1edf7/node_modules/drizzle-orm/sql/expressions/conditions.cjs +92 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pglite@0.2.17_@_31f44b782f9321d71f3ce9d35aa1edf7/node_modules/drizzle-orm/sql/expressions/conditions.mjs +78 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pglite@0.2.17_@_31f44b782f9321d71f3ce9d35aa1edf7/node_modules/drizzle-orm/sql/expressions/select.cjs +11 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pglite@0.2.17_@_31f44b782f9321d71f3ce9d35aa1edf7/node_modules/drizzle-orm/sql/expressions/select.mjs +10 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pglite@0.2.17_@_31f44b782f9321d71f3ce9d35aa1edf7/node_modules/drizzle-orm/sql/sql.cjs +383 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pglite@0.2.17_@_31f44b782f9321d71f3ce9d35aa1edf7/node_modules/drizzle-orm/sql/sql.mjs +366 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pglite@0.2.17_@_31f44b782f9321d71f3ce9d35aa1edf7/node_modules/drizzle-orm/subquery.cjs +17 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pglite@0.2.17_@_31f44b782f9321d71f3ce9d35aa1edf7/node_modules/drizzle-orm/subquery.mjs +17 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pglite@0.2.17_@_31f44b782f9321d71f3ce9d35aa1edf7/node_modules/drizzle-orm/table.cjs +60 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pglite@0.2.17_@_31f44b782f9321d71f3ce9d35aa1edf7/node_modules/drizzle-orm/table.mjs +59 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pglite@0.2.17_@_31f44b782f9321d71f3ce9d35aa1edf7/node_modules/drizzle-orm/table.utils.cjs +4 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pglite@0.2.17_@_31f44b782f9321d71f3ce9d35aa1edf7/node_modules/drizzle-orm/table.utils.mjs +4 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pglite@0.2.17_@_31f44b782f9321d71f3ce9d35aa1edf7/node_modules/drizzle-orm/tracing.cjs +6 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pglite@0.2.17_@_31f44b782f9321d71f3ce9d35aa1edf7/node_modules/drizzle-orm/tracing.mjs +6 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pglite@0.2.17_@_31f44b782f9321d71f3ce9d35aa1edf7/node_modules/drizzle-orm/view-common.cjs +4 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pglite@0.2.17_@_31f44b782f9321d71f3ce9d35aa1edf7/node_modules/drizzle-orm/view-common.mjs +4 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/adapters/drizzle/index.cjs +383 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/adapters/drizzle/index.d.cts +12 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/adapters/drizzle/index.d.mts +12 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/adapters/drizzle/index.mjs +383 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/adapters/kysely/index.cjs +4 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/adapters/kysely/index.mjs +5 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/adapters/prisma/index.cjs +339 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/adapters/prisma/index.d.cts +70 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/adapters/prisma/index.d.mts +70 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/adapters/prisma/index.mjs +339 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/chunk-7PZK4ONR.cjs +57 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/chunk-7PZK4ONR.mjs +56 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/chunk-C6OTUURW.cjs +330 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/chunk-C6OTUURW.mjs +326 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/chunk-CHTIKPQU.cjs +166 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/chunk-CHTIKPQU.mjs +163 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/chunk-GUE4GMNC.cjs +14 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/chunk-GUE4GMNC.mjs +13 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/chunk-LHHP6UVP.cjs +24 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/chunk-LHHP6UVP.mjs +24 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/chunk-LVCPMTAT.cjs +1190 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/chunk-LVCPMTAT.mjs +1189 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/chunk-PK2W2SQ7.cjs +197 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/chunk-PK2W2SQ7.mjs +197 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/chunk-ZEQMAIFI.cjs +410 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/chunk-ZEQMAIFI.mjs +400 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/chunk-ZOCGSAWS.cjs +213 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/chunk-ZOCGSAWS.mjs +212 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/create-tg0451Y_.d.cts +285 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/create-tg0451Y_.d.mts +285 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/index-CMqePMTF.d.cts +45 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/index-CMqePMTF.d.mts +45 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/index.cjs +69 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/index.d.cts +49 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/index.d.mts +49 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/index.mjs +67 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/query/index.d.cts +156 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/query/index.d.mts +156 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/schema/index.cjs +1 -0
- package/dist/node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare_workers-types@4.20260313.1_@electric-sql_pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/schema/index.mjs +2 -0
- package/dist/{package.cjs → packages/server/package.cjs} +1 -1
- package/dist/{package.mjs → packages/server/package.mjs} +1 -1
- package/dist/runtime.cjs +13 -13
- package/dist/runtime.d.cts +4 -4
- package/dist/runtime.d.mts +4 -4
- package/dist/runtime.mjs +12 -13
- package/dist/schema/v0_21_0.cjs +16 -15
- package/dist/schema/v0_21_0.mjs +3 -2
- package/dist/schema/v0_29_0.cjs +18 -17
- package/dist/schema/v0_29_0.mjs +3 -2
- package/dist/schema/v0_31_0.cjs +48 -0
- package/dist/schema/v0_31_0.mjs +48 -0
- package/dist/storageAccess.cjs +44 -0
- package/dist/storageAccess.mjs +44 -0
- package/dist/version.cjs +1 -1
- package/dist/version.mjs +1 -1
- package/package.json +15 -7
- package/src/adapters/drizzle.ts +15 -1
- package/src/adapters/kysely.ts +24 -1
- package/src/adapters/mongodb.ts +19 -1
- package/src/adapters/prisma.ts +15 -1
- package/src/db/createBundleDiff.spec.ts +402 -0
- package/src/db/createBundleDiff.ts +375 -0
- package/src/db/index.spec.ts +528 -27
- package/src/db/index.ts +22 -36
- package/src/db/ormCore.ts +308 -75
- package/src/db/pluginCore.spec.ts +385 -0
- package/src/db/pluginCore.ts +45 -4
- package/src/db/schemaEnhancements.ts +460 -0
- package/src/db/types.ts +38 -7
- package/src/db/updateArtifacts.ts +388 -0
- package/src/handler-standalone.integration.spec.ts +1 -0
- package/src/handler.spec.ts +121 -0
- package/src/handler.ts +117 -5
- package/src/runtime.spec.ts +287 -55
- package/src/runtime.ts +21 -37
- package/src/schema/v0_21_0.ts +1 -1
- package/src/schema/v0_29_0.ts +1 -1
- package/src/schema/v0_31_0.ts +58 -0
- package/src/storageAccess.spec.ts +57 -0
- package/src/storageAccess.ts +90 -0
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
//#region ../../node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare+workers-types@4.20260313.1_@electric-sql+pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/chunk-ZOCGSAWS.js
|
|
2
|
+
async function checkForeignKeyOnInsert(orm, key, inserts) {
|
|
3
|
+
const ifMatchEntry = [];
|
|
4
|
+
function shouldSkipChecking(insert) {
|
|
5
|
+
for (const priorInsert of inserts) {
|
|
6
|
+
if (priorInsert === insert) break;
|
|
7
|
+
if (key.columns.every((col) => insert[col.ormName] === priorInsert[col.ormName])) return true;
|
|
8
|
+
if (key.table === key.referencedTable && key.columns.every((col, i) => insert[col.ormName] === priorInsert[key.referencedColumns[i].ormName])) return true;
|
|
9
|
+
}
|
|
10
|
+
return false;
|
|
11
|
+
}
|
|
12
|
+
for (const insert of inserts) {
|
|
13
|
+
if (shouldSkipChecking(insert)) continue;
|
|
14
|
+
const ifMatchColumn = [];
|
|
15
|
+
let containsNull = false;
|
|
16
|
+
for (let i = 0; i < key.columns.length; i++) {
|
|
17
|
+
const col = key.columns[i];
|
|
18
|
+
const referencedCol = key.referencedColumns[i];
|
|
19
|
+
if (insert[col.ormName] == null) {
|
|
20
|
+
containsNull = true;
|
|
21
|
+
break;
|
|
22
|
+
}
|
|
23
|
+
ifMatchColumn.push({
|
|
24
|
+
type: 2,
|
|
25
|
+
a: referencedCol,
|
|
26
|
+
operator: "=",
|
|
27
|
+
b: insert[col.ormName]
|
|
28
|
+
});
|
|
29
|
+
}
|
|
30
|
+
if (!containsNull) ifMatchEntry.push({
|
|
31
|
+
type: 0,
|
|
32
|
+
items: ifMatchColumn
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
if (ifMatchEntry.length === 0) return;
|
|
36
|
+
if (await orm.count(key.referencedTable, { where: {
|
|
37
|
+
type: 1,
|
|
38
|
+
items: ifMatchEntry
|
|
39
|
+
} }) < ifMatchEntry.length) errorForeignKey(key);
|
|
40
|
+
}
|
|
41
|
+
async function exists(orm, table, where) {
|
|
42
|
+
return await orm.findFirst(table, {
|
|
43
|
+
select: [table.getIdColumn().ormName],
|
|
44
|
+
where
|
|
45
|
+
}) !== null;
|
|
46
|
+
}
|
|
47
|
+
async function foreignKeyOnUpdate(orm, key, set, targets) {
|
|
48
|
+
const isAffected = {
|
|
49
|
+
type: 1,
|
|
50
|
+
items: []
|
|
51
|
+
};
|
|
52
|
+
if (!key.referencedColumns.some((col) => set[col.ormName] !== void 0)) return;
|
|
53
|
+
for (const target of targets) {
|
|
54
|
+
const condition = {
|
|
55
|
+
type: 0,
|
|
56
|
+
items: []
|
|
57
|
+
};
|
|
58
|
+
let containsNull = false;
|
|
59
|
+
for (let i = 0; i < key.columns.length; i++) {
|
|
60
|
+
const col = key.columns[i];
|
|
61
|
+
const referencedCol = key.referencedColumns[i];
|
|
62
|
+
if (target[referencedCol.ormName] === null) {
|
|
63
|
+
containsNull = true;
|
|
64
|
+
break;
|
|
65
|
+
}
|
|
66
|
+
condition.items.push({
|
|
67
|
+
type: 2,
|
|
68
|
+
a: col,
|
|
69
|
+
operator: "=",
|
|
70
|
+
b: target[referencedCol.ormName]
|
|
71
|
+
});
|
|
72
|
+
}
|
|
73
|
+
if (!containsNull) isAffected.items.push(condition);
|
|
74
|
+
}
|
|
75
|
+
if (isAffected.items.length === 0) return;
|
|
76
|
+
if (key.onUpdate === "RESTRICT") {
|
|
77
|
+
if (await exists(orm, key.table, isAffected)) errorForeignKey(key);
|
|
78
|
+
return;
|
|
79
|
+
}
|
|
80
|
+
const mappedSet = {};
|
|
81
|
+
for (let i = 0; i < key.columns.length; i++) {
|
|
82
|
+
const col = key.columns[i].ormName;
|
|
83
|
+
const referencedCol = key.referencedColumns[i].ormName;
|
|
84
|
+
mappedSet[col] = key.onUpdate === "CASCADE" ? set[referencedCol] : null;
|
|
85
|
+
}
|
|
86
|
+
await orm.updateMany(key.table, {
|
|
87
|
+
where: isAffected,
|
|
88
|
+
set: mappedSet
|
|
89
|
+
});
|
|
90
|
+
}
|
|
91
|
+
function createSoftForeignKey(schema, { generateInsertValuesDefault, ...orm }) {
|
|
92
|
+
const childForeignKeys = /* @__PURE__ */ new Map();
|
|
93
|
+
for (const table of Object.values(schema.tables)) for (const key of table.foreignKeys) {
|
|
94
|
+
const name = key.referencedTable.ormName;
|
|
95
|
+
const list = childForeignKeys.get(name) ?? [];
|
|
96
|
+
list.push(key);
|
|
97
|
+
childForeignKeys.set(name, list);
|
|
98
|
+
}
|
|
99
|
+
if (!orm.transaction) throw new Error("native `transaction` required for soft foreign key.");
|
|
100
|
+
return {
|
|
101
|
+
...orm,
|
|
102
|
+
async updateMany(table, { set, where }) {
|
|
103
|
+
const foreignKeys = childForeignKeys.get(table.ormName);
|
|
104
|
+
if (!foreignKeys) return orm.updateMany(table, {
|
|
105
|
+
set,
|
|
106
|
+
where
|
|
107
|
+
});
|
|
108
|
+
const idColumnName = table.getIdColumn().ormName;
|
|
109
|
+
const targets = await orm.findMany(table, {
|
|
110
|
+
select: true,
|
|
111
|
+
where
|
|
112
|
+
});
|
|
113
|
+
await orm.transaction?.(async (tx) => {
|
|
114
|
+
for (const key of foreignKeys) await foreignKeyOnUpdate(tx.internal, key, set, targets);
|
|
115
|
+
await orm.updateMany(table, {
|
|
116
|
+
set,
|
|
117
|
+
where: {
|
|
118
|
+
type: 2,
|
|
119
|
+
a: table.columns[idColumnName],
|
|
120
|
+
operator: "in",
|
|
121
|
+
b: targets.map((target) => target[idColumnName])
|
|
122
|
+
}
|
|
123
|
+
});
|
|
124
|
+
});
|
|
125
|
+
},
|
|
126
|
+
async upsert(table, v) {
|
|
127
|
+
const target = await orm.findFirst(table, {
|
|
128
|
+
select: true,
|
|
129
|
+
where: v.where
|
|
130
|
+
});
|
|
131
|
+
if (target === null) await this.createMany(table, [v.create]);
|
|
132
|
+
else {
|
|
133
|
+
const idColumn = table.getIdColumn();
|
|
134
|
+
await this.updateMany(table, {
|
|
135
|
+
set: v.update,
|
|
136
|
+
where: {
|
|
137
|
+
type: 2,
|
|
138
|
+
a: table.columns[idColumn.ormName],
|
|
139
|
+
operator: "=",
|
|
140
|
+
b: target[idColumn.ormName]
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
}
|
|
144
|
+
},
|
|
145
|
+
async create(table, values) {
|
|
146
|
+
values = generateInsertValuesDefault(table, values);
|
|
147
|
+
await Promise.all(table.foreignKeys.map((key) => checkForeignKeyOnInsert(this, key, [values])));
|
|
148
|
+
return orm.create(table, values);
|
|
149
|
+
},
|
|
150
|
+
async createMany(table, values) {
|
|
151
|
+
values = values.map((value) => generateInsertValuesDefault(table, value));
|
|
152
|
+
await Promise.all(table.foreignKeys.map((key) => checkForeignKeyOnInsert(this, key, values)));
|
|
153
|
+
return orm.createMany(table, values);
|
|
154
|
+
},
|
|
155
|
+
async deleteMany(table, v) {
|
|
156
|
+
const foreignKeys = childForeignKeys.get(table.ormName);
|
|
157
|
+
if (!foreignKeys) return orm.deleteMany(table, v);
|
|
158
|
+
const targets = await orm.findMany(table, {
|
|
159
|
+
select: true,
|
|
160
|
+
where: v.where
|
|
161
|
+
});
|
|
162
|
+
for (const key of foreignKeys) {
|
|
163
|
+
const isAffected = {
|
|
164
|
+
type: 1,
|
|
165
|
+
items: []
|
|
166
|
+
};
|
|
167
|
+
for (const target of targets) {
|
|
168
|
+
const isReferencingTarget = {
|
|
169
|
+
type: 0,
|
|
170
|
+
items: []
|
|
171
|
+
};
|
|
172
|
+
let containsNull = false;
|
|
173
|
+
for (let i = 0; i < key.columns.length; i++) {
|
|
174
|
+
const targetValue = target[key.referencedColumns[i].ormName];
|
|
175
|
+
if (targetValue === null) {
|
|
176
|
+
containsNull = true;
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
isReferencingTarget.items.push({
|
|
180
|
+
type: 2,
|
|
181
|
+
a: key.columns[i],
|
|
182
|
+
operator: "=",
|
|
183
|
+
b: targetValue
|
|
184
|
+
});
|
|
185
|
+
}
|
|
186
|
+
if (!containsNull) isAffected.items.push(isReferencingTarget);
|
|
187
|
+
}
|
|
188
|
+
if (key.onDelete === "CASCADE") await orm.deleteMany(key.table, { where: isAffected });
|
|
189
|
+
else if (key.onDelete === "SET NULL") {
|
|
190
|
+
const set = {};
|
|
191
|
+
for (const col of key.columns) set[col.ormName] = null;
|
|
192
|
+
await orm.updateMany(key.table, {
|
|
193
|
+
set,
|
|
194
|
+
where: isAffected
|
|
195
|
+
});
|
|
196
|
+
} else if (await exists(this, key.table, isAffected)) errorForeignKey(key);
|
|
197
|
+
}
|
|
198
|
+
const idColumnName = table.getIdColumn().ormName;
|
|
199
|
+
return orm.deleteMany(table, { where: {
|
|
200
|
+
type: 2,
|
|
201
|
+
a: table.columns[idColumnName],
|
|
202
|
+
operator: "in",
|
|
203
|
+
b: targets.map((target) => target[idColumnName])
|
|
204
|
+
} });
|
|
205
|
+
}
|
|
206
|
+
};
|
|
207
|
+
}
|
|
208
|
+
function errorForeignKey(key) {
|
|
209
|
+
throw new Error(`foreign constraint failed ${key.name}`);
|
|
210
|
+
}
|
|
211
|
+
//#endregion
|
|
212
|
+
export { checkForeignKeyOnInsert, createSoftForeignKey };
|
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
//#region ../../node_modules/.pnpm/fumadb@0.2.2_drizzle-orm@0.44.7_@cloudflare+workers-types@4.20260313.1_@electric-sql+pg_c72c8c754becd21f6d6662e8fbd28e7f/node_modules/fumadb/dist/create-tg0451Y_.d.ts
|
|
2
|
+
type AnySchema = Schema<string, Record<string, AnyTable>>;
|
|
3
|
+
type AnyRelation = Relation;
|
|
4
|
+
type AnyTable = Table;
|
|
5
|
+
type AnyColumn = Column<keyof TypeMap, unknown, unknown> | IdColumn<IdColumnType, unknown, unknown>;
|
|
6
|
+
type ForeignKeyAction = "RESTRICT" | "CASCADE" | "SET NULL";
|
|
7
|
+
interface NameVariants {
|
|
8
|
+
sql: string;
|
|
9
|
+
drizzle: string;
|
|
10
|
+
prisma: string;
|
|
11
|
+
convex: string;
|
|
12
|
+
mongodb: string;
|
|
13
|
+
}
|
|
14
|
+
interface ForeignKey {
|
|
15
|
+
name: string;
|
|
16
|
+
table: AnyTable;
|
|
17
|
+
columns: AnyColumn[];
|
|
18
|
+
referencedTable: AnyTable;
|
|
19
|
+
referencedColumns: AnyColumn[];
|
|
20
|
+
onUpdate: ForeignKeyAction;
|
|
21
|
+
onDelete: ForeignKeyAction;
|
|
22
|
+
}
|
|
23
|
+
interface UniqueConstraint {
|
|
24
|
+
name: string;
|
|
25
|
+
columns: AnyColumn[];
|
|
26
|
+
}
|
|
27
|
+
interface BaseRelation<Type extends RelationType = RelationType, T extends AnyTable = AnyTable> {
|
|
28
|
+
/**
|
|
29
|
+
* The relation id shared between implied/implying relation
|
|
30
|
+
*/
|
|
31
|
+
id: string;
|
|
32
|
+
name: string;
|
|
33
|
+
type: Type;
|
|
34
|
+
table: T;
|
|
35
|
+
referencer: AnyTable;
|
|
36
|
+
on: [string, string][];
|
|
37
|
+
}
|
|
38
|
+
interface ImplicitRelation<Type extends RelationType = RelationType, T extends AnyTable = AnyTable> extends BaseRelation<Type, T> {
|
|
39
|
+
implied: true;
|
|
40
|
+
readonly impliedBy: ExplicitRelation;
|
|
41
|
+
}
|
|
42
|
+
interface ExplicitRelation<Type extends RelationType = RelationType, T extends AnyTable = AnyTable> extends BaseRelation<Type, T> {
|
|
43
|
+
implied: false;
|
|
44
|
+
implying: ImplicitRelation | undefined;
|
|
45
|
+
foreignKey?: ForeignKey;
|
|
46
|
+
}
|
|
47
|
+
type Relation<Type extends RelationType = RelationType, T extends AnyTable = AnyTable> = ImplicitRelation<Type, T> | ExplicitRelation<Type, T>;
|
|
48
|
+
interface Table<Columns extends Record<string, AnyColumn> = Record<string, AnyColumn>, Relations extends Record<string, AnyRelation> = Record<string, AnyRelation>> {
|
|
49
|
+
names: NameVariants;
|
|
50
|
+
ormName: string;
|
|
51
|
+
columns: Columns;
|
|
52
|
+
relations: Relations;
|
|
53
|
+
foreignKeys: ForeignKey[];
|
|
54
|
+
/**
|
|
55
|
+
* @param level default to 'all'
|
|
56
|
+
*/
|
|
57
|
+
getUniqueConstraints: (level?: "table" | "column" | "all") => UniqueConstraint[];
|
|
58
|
+
/**
|
|
59
|
+
* @param name - name
|
|
60
|
+
* @param type - default to "sql"
|
|
61
|
+
*/
|
|
62
|
+
getColumnByName: (name: string, type?: keyof NameVariants) => AnyColumn | undefined;
|
|
63
|
+
getIdColumn: () => AnyColumn;
|
|
64
|
+
/**
|
|
65
|
+
* Add unique constraint to the fields, for consistency, duplicated null values are allowed.
|
|
66
|
+
*/
|
|
67
|
+
unique: (name: string, columns: (keyof Columns)[]) => Table<Columns, Relations>;
|
|
68
|
+
clone: () => Table<Columns, Relations>;
|
|
69
|
+
}
|
|
70
|
+
type DefaultFunctionMap = {
|
|
71
|
+
date: "now";
|
|
72
|
+
timestamp: "now";
|
|
73
|
+
string: "auto";
|
|
74
|
+
} & Record<`varchar(${number})`, "auto">;
|
|
75
|
+
type DefaultFunction<Type extends keyof TypeMap> = (Type extends keyof DefaultFunctionMap ? DefaultFunctionMap[Type] : never) | (() => TypeMap[Type]);
|
|
76
|
+
type IdColumnType = `varchar(${number})` | "uuid";
|
|
77
|
+
type TypeMap = {
|
|
78
|
+
string: string;
|
|
79
|
+
bigint: bigint;
|
|
80
|
+
integer: number;
|
|
81
|
+
decimal: number;
|
|
82
|
+
bool: boolean;
|
|
83
|
+
json: unknown;
|
|
84
|
+
/**
|
|
85
|
+
* this follows the same specs as Prisma `Bytes` for consistency.
|
|
86
|
+
*/
|
|
87
|
+
binary: Uint8Array;
|
|
88
|
+
date: Date;
|
|
89
|
+
timestamp: Date;
|
|
90
|
+
uuid: string;
|
|
91
|
+
} & Record<`varchar(${number})`, string>;
|
|
92
|
+
declare class Column<Type extends keyof TypeMap, In = unknown, Out = unknown> {
|
|
93
|
+
type: Type;
|
|
94
|
+
ormName: string;
|
|
95
|
+
isNullable: boolean;
|
|
96
|
+
isUnique: boolean;
|
|
97
|
+
default?: {
|
|
98
|
+
value: TypeMap[Type];
|
|
99
|
+
} | {
|
|
100
|
+
runtime: DefaultFunction<Type>;
|
|
101
|
+
};
|
|
102
|
+
table: AnyTable;
|
|
103
|
+
private initNames;
|
|
104
|
+
get names(): NameVariants;
|
|
105
|
+
set names(v: NameVariants);
|
|
106
|
+
constructor(type: Type, onInitNames: (ormName: string) => NameVariants);
|
|
107
|
+
nullable<T extends boolean = true>(nullable?: T): Column<Type, T extends true ? In | null : Exclude<In, null>, T extends true ? Out | null : Exclude<Out, null>>;
|
|
108
|
+
/**
|
|
109
|
+
* Add unique constraint to the field, for consistency, duplicated null values are allowed.
|
|
110
|
+
*/
|
|
111
|
+
unique(unique?: boolean): this;
|
|
112
|
+
/**
|
|
113
|
+
* Generate default value on runtime
|
|
114
|
+
*/
|
|
115
|
+
defaultTo$(fn: DefaultFunction<Type>): Column<Type, In | null, Out>;
|
|
116
|
+
/**
|
|
117
|
+
* Set a database-level default value
|
|
118
|
+
*
|
|
119
|
+
* For schemaless database, it's still generated on runtime
|
|
120
|
+
*/
|
|
121
|
+
defaultTo(value: TypeMap[Type]): Column<Type, In | null, Out>;
|
|
122
|
+
clone(): Column<Type, unknown, unknown>;
|
|
123
|
+
getUniqueConstraintName(): string;
|
|
124
|
+
/**
|
|
125
|
+
* Generate default value for the column on runtime.
|
|
126
|
+
*/
|
|
127
|
+
generateDefaultValue(): TypeMap[Type] | undefined;
|
|
128
|
+
get $in(): In;
|
|
129
|
+
get $out(): Out;
|
|
130
|
+
}
|
|
131
|
+
declare class IdColumn<Type extends IdColumnType = IdColumnType, In = unknown, Out = unknown> extends Column<Type, In, Out> {
|
|
132
|
+
id: boolean;
|
|
133
|
+
constructor(type: Type, onInitNames: (ormName: string) => NameVariants);
|
|
134
|
+
clone(): IdColumn<Type, unknown, unknown>;
|
|
135
|
+
defaultTo$(fn: DefaultFunction<Type>): IdColumn<Type, In | null, Out>;
|
|
136
|
+
defaultTo(value: TypeMap[Type]): IdColumn<Type, In | null, Out>;
|
|
137
|
+
}
|
|
138
|
+
type RelationType = "many" | "one";
|
|
139
|
+
interface Schema<Version extends string = string, Tables extends Record<string, AnyTable> = Record<string, AnyTable>> {
|
|
140
|
+
/**
|
|
141
|
+
* @description The version of the schema, it should be a semantic version string.
|
|
142
|
+
*/
|
|
143
|
+
version: Version;
|
|
144
|
+
tables: Tables;
|
|
145
|
+
up?: CustomMigrationFn;
|
|
146
|
+
down?: CustomMigrationFn;
|
|
147
|
+
clone: () => Schema<Version, Tables>;
|
|
148
|
+
}
|
|
149
|
+
type NameVariantsConfig = Record<string, Partial<NameVariants>>;
|
|
150
|
+
type BuildNameVariants<Tables extends Record<string, AnyTable>> = { [K in keyof Tables as K extends string ? keyof Tables[K]["columns"] extends string ? `${K}.${keyof Tables[K]["columns"]}` : never : never]?: Partial<NameVariants> } & { [k in keyof Tables]?: Partial<NameVariants> };
|
|
151
|
+
type NameVariantsBuilder<Schemas extends AnySchema[], Out> = {
|
|
152
|
+
(variants: BuildNameVariants<Schemas[number]["tables"]>): Out;
|
|
153
|
+
<Version extends Schemas[number]["version"]>(versions: Version[], variants: BuildNameVariants<Extract<Schemas[number], {
|
|
154
|
+
version: Version;
|
|
155
|
+
}>["tables"]>): Out;
|
|
156
|
+
/**
|
|
157
|
+
* Add prefix to table names.
|
|
158
|
+
*
|
|
159
|
+
* If true, use package's `namespace` as prefix.
|
|
160
|
+
*/
|
|
161
|
+
prefix: (prefix: true | string) => Out;
|
|
162
|
+
};
|
|
163
|
+
interface ForeignKeyInfo {
|
|
164
|
+
name: string;
|
|
165
|
+
columns: string[];
|
|
166
|
+
referencedTable: string;
|
|
167
|
+
referencedColumns: string[];
|
|
168
|
+
onUpdate: "RESTRICT" | "CASCADE" | "SET NULL";
|
|
169
|
+
onDelete: "RESTRICT" | "CASCADE" | "SET NULL";
|
|
170
|
+
}
|
|
171
|
+
type MigrationOperation = TableOperation | {
|
|
172
|
+
type: "add-foreign-key";
|
|
173
|
+
table: string;
|
|
174
|
+
value: ForeignKeyInfo;
|
|
175
|
+
} | {
|
|
176
|
+
type: "drop-foreign-key";
|
|
177
|
+
table: string;
|
|
178
|
+
name: string;
|
|
179
|
+
} | {
|
|
180
|
+
type: "drop-unique-constraint";
|
|
181
|
+
table: string;
|
|
182
|
+
name: string;
|
|
183
|
+
} | {
|
|
184
|
+
type: "add-unique-constraint";
|
|
185
|
+
table: string;
|
|
186
|
+
columns: string[];
|
|
187
|
+
name: string;
|
|
188
|
+
} | CustomOperation;
|
|
189
|
+
type CustomOperation = {
|
|
190
|
+
type: "custom";
|
|
191
|
+
} & Record<string, unknown>;
|
|
192
|
+
type TableOperation = {
|
|
193
|
+
type: "create-table";
|
|
194
|
+
value: AnyTable;
|
|
195
|
+
} | {
|
|
196
|
+
type: "drop-table";
|
|
197
|
+
name: string;
|
|
198
|
+
} | {
|
|
199
|
+
/**
|
|
200
|
+
* Not supported by FumaDB
|
|
201
|
+
* - update table's primary key
|
|
202
|
+
*/
|
|
203
|
+
type: "update-table";
|
|
204
|
+
name: string;
|
|
205
|
+
value: ColumnOperation[];
|
|
206
|
+
} | {
|
|
207
|
+
type: "rename-table";
|
|
208
|
+
from: string;
|
|
209
|
+
to: string;
|
|
210
|
+
};
|
|
211
|
+
type ColumnOperation = {
|
|
212
|
+
type: "rename-column";
|
|
213
|
+
from: string;
|
|
214
|
+
to: string;
|
|
215
|
+
} | {
|
|
216
|
+
type: "drop-column";
|
|
217
|
+
name: string;
|
|
218
|
+
} | {
|
|
219
|
+
/**
|
|
220
|
+
* Note: unique constraints are not created, please use dedicated operations like `add-unique-constraint` instead
|
|
221
|
+
*/
|
|
222
|
+
type: "create-column";
|
|
223
|
+
value: AnyColumn;
|
|
224
|
+
} | {
|
|
225
|
+
/**
|
|
226
|
+
* warning: Not supported by SQLite
|
|
227
|
+
*/
|
|
228
|
+
type: "update-column";
|
|
229
|
+
name: string;
|
|
230
|
+
/**
|
|
231
|
+
* For databases like MySQL, it requires the full definition for any modify column statement.
|
|
232
|
+
* Hence, you need to specify the full information of your column here.
|
|
233
|
+
*
|
|
234
|
+
* Then, opt-in for in-detail modification for other databases that supports changing data type/nullable/default separately, such as PostgreSQL.
|
|
235
|
+
*
|
|
236
|
+
* Note: unique constraints are not updated, please use dedicated operations like `add-unique-constraint` instead
|
|
237
|
+
*/
|
|
238
|
+
value: AnyColumn;
|
|
239
|
+
updateNullable: boolean;
|
|
240
|
+
updateDefault: boolean;
|
|
241
|
+
updateDataType: boolean;
|
|
242
|
+
};
|
|
243
|
+
type Awaitable<T> = T | Promise<T>;
|
|
244
|
+
interface MigrationContext {
|
|
245
|
+
auto: () => Promise<MigrationOperation[]>;
|
|
246
|
+
}
|
|
247
|
+
type CustomMigrationFn = (context: MigrationContext) => Awaitable<MigrationOperation[]>;
|
|
248
|
+
interface MigrateOptions {
|
|
249
|
+
/**
|
|
250
|
+
* Manage how migrations are generated.
|
|
251
|
+
*
|
|
252
|
+
* - `from-schema` (default): compare fumadb schemas
|
|
253
|
+
* - `from-database`: introspect & compare the database with schema
|
|
254
|
+
*/
|
|
255
|
+
mode?: "from-schema" | "from-database";
|
|
256
|
+
/**
|
|
257
|
+
* Update internal settings, it's true by default.
|
|
258
|
+
* We don't recommend to disable it other than testing purposes.
|
|
259
|
+
*/
|
|
260
|
+
updateSettings?: boolean;
|
|
261
|
+
/**
|
|
262
|
+
* Enable unsafe operations when auto-generating migration.
|
|
263
|
+
*/
|
|
264
|
+
unsafe?: boolean;
|
|
265
|
+
}
|
|
266
|
+
interface MigrationResult {
|
|
267
|
+
operations: MigrationOperation[];
|
|
268
|
+
getSQL?: () => string;
|
|
269
|
+
execute: () => Promise<void>;
|
|
270
|
+
}
|
|
271
|
+
interface Migrator {
|
|
272
|
+
/**
|
|
273
|
+
* Get current version, undefined if not initialized
|
|
274
|
+
*/
|
|
275
|
+
getVersion: () => Promise<string | undefined>;
|
|
276
|
+
getNameVariants: () => Promise<NameVariantsConfig | undefined>;
|
|
277
|
+
next: () => Promise<AnySchema | undefined>;
|
|
278
|
+
previous: () => Promise<AnySchema | undefined>;
|
|
279
|
+
up: (options?: MigrateOptions) => Promise<MigrationResult>;
|
|
280
|
+
down: (options?: MigrateOptions) => Promise<MigrationResult>;
|
|
281
|
+
migrateTo: (version: string, options?: MigrateOptions) => Promise<MigrationResult>;
|
|
282
|
+
migrateToLatest: (options?: MigrateOptions) => Promise<MigrationResult>;
|
|
283
|
+
}
|
|
284
|
+
//#endregion
|
|
285
|
+
export { AnyColumn, AnyRelation, AnySchema, AnyTable, Column, ExplicitRelation, IdColumn, Migrator, NameVariantsBuilder, Relation, Schema, Table };
|