@fragno-dev/db 0.1.1 → 0.1.3
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/.turbo/turbo-build.log +196 -137
- package/CHANGELOG.md +18 -0
- package/LICENSE.md +16 -0
- package/dist/adapters/adapters.d.ts +11 -1
- package/dist/adapters/adapters.d.ts.map +1 -1
- package/dist/adapters/drizzle/drizzle-adapter.d.ts +9 -2
- package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +1 -1
- package/dist/adapters/drizzle/drizzle-adapter.js +23 -39
- package/dist/adapters/drizzle/drizzle-adapter.js.map +1 -1
- package/dist/adapters/drizzle/drizzle-query.d.ts.map +1 -1
- package/dist/adapters/drizzle/drizzle-query.js +5 -4
- package/dist/adapters/drizzle/drizzle-query.js.map +1 -1
- package/dist/adapters/drizzle/drizzle-uow-compiler.js +12 -10
- package/dist/adapters/drizzle/drizzle-uow-compiler.js.map +1 -1
- package/dist/adapters/drizzle/drizzle-uow-decoder.js +14 -4
- package/dist/adapters/drizzle/drizzle-uow-decoder.js.map +1 -1
- package/dist/adapters/drizzle/drizzle-uow-executor.js +78 -60
- package/dist/adapters/drizzle/drizzle-uow-executor.js.map +1 -1
- package/dist/adapters/drizzle/generate.js +111 -37
- package/dist/adapters/drizzle/generate.js.map +1 -1
- package/dist/adapters/drizzle/shared.js +14 -1
- package/dist/adapters/drizzle/shared.js.map +1 -1
- package/dist/adapters/kysely/kysely-adapter.d.ts +2 -1
- package/dist/adapters/kysely/kysely-adapter.d.ts.map +1 -1
- package/dist/adapters/kysely/kysely-adapter.js +25 -30
- package/dist/adapters/kysely/kysely-adapter.js.map +1 -1
- package/dist/adapters/kysely/kysely-query-builder.js +48 -44
- package/dist/adapters/kysely/kysely-query-builder.js.map +1 -1
- package/dist/adapters/kysely/kysely-query-compiler.js +2 -2
- package/dist/adapters/kysely/kysely-query-compiler.js.map +1 -1
- package/dist/adapters/kysely/kysely-query.js +3 -2
- package/dist/adapters/kysely/kysely-query.js.map +1 -1
- package/dist/adapters/kysely/kysely-shared.js +18 -0
- package/dist/adapters/kysely/kysely-shared.js.map +1 -0
- package/dist/adapters/kysely/kysely-uow-compiler.js +4 -3
- package/dist/adapters/kysely/kysely-uow-compiler.js.map +1 -1
- package/dist/adapters/kysely/migration/execute.js +15 -12
- package/dist/adapters/kysely/migration/execute.js.map +1 -1
- package/dist/migration-engine/auto-from-schema.js +2 -8
- package/dist/migration-engine/auto-from-schema.js.map +1 -1
- package/dist/migration-engine/create.d.ts +1 -5
- package/dist/migration-engine/create.js +1 -1
- package/dist/migration-engine/create.js.map +1 -1
- package/dist/migration-engine/generation-engine.d.ts +51 -0
- package/dist/migration-engine/generation-engine.d.ts.map +1 -0
- package/dist/migration-engine/generation-engine.js +165 -0
- package/dist/migration-engine/generation-engine.js.map +1 -0
- package/dist/migration-engine/shared.d.ts +5 -2
- package/dist/migration-engine/shared.d.ts.map +1 -1
- package/dist/migration-engine/shared.js.map +1 -1
- package/dist/mod.d.ts +0 -8
- package/dist/mod.d.ts.map +1 -1
- package/dist/mod.js +0 -32
- package/dist/mod.js.map +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/alias.js +77 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/alias.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/casing.js +49 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/casing.js.map +1 -0
- package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/column-builder.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/column-builder.js.map +1 -0
- package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/column.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/column.js.map +1 -0
- package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/entity.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/entity.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/errors.js +21 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/errors.js.map +1 -0
- package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/pg-core/columns/common.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/pg-core/columns/common.js.map +1 -0
- package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/pg-core/columns/enum.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/pg-core/columns/enum.js.map +1 -0
- package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/pg-core/foreign-keys.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/pg-core/foreign-keys.js.map +1 -0
- package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/pg-core/unique-constraint.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/pg-core/unique-constraint.js.map +1 -0
- package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/pg-core/utils/array.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/pg-core/utils/array.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/query-builders/query-builder.js +14 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/query-builders/query-builder.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/query-promise.js +26 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/query-promise.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/relations.js +127 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/relations.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/selection-proxy.js +47 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/selection-proxy.js.map +1 -0
- package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/sql/expressions/conditions.js +20 -2
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sql/expressions/conditions.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sql/expressions/select.js +13 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sql/expressions/select.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sql/functions/aggregate.js +10 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sql/functions/aggregate.js.map +1 -0
- package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/sql/sql.js +1 -1
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sql/sql.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/columns/common.js +60 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/columns/common.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/db.js +269 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/db.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/dialect.js +457 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/dialect.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/foreign-keys.js +68 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/foreign-keys.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/count.js +41 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/count.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/delete.js +119 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/delete.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/insert.js +170 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/insert.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/query-builder.js +75 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/query-builder.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/query.js +107 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/query.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/raw.js +37 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/raw.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/select.js +621 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/select.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/update.js +170 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/query-builders/update.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/table.js +20 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/table.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/unique-constraint.js +48 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/unique-constraint.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/utils.js +17 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/utils.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/view-base.js +11 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/sqlite-core/view-base.js.map +1 -0
- package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/subquery.js +2 -2
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/subquery.js.map +1 -0
- package/dist/node_modules/{.bun/drizzle-orm@0.44.6_4fae081eecb963e2 → .pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8}/node_modules/drizzle-orm/table.js +8 -2
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/table.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/table.utils.js +6 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/table.utils.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/tracing-utils.js +8 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/tracing-utils.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/tracing.js +8 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/tracing.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/utils.js +53 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/utils.js.map +1 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/view-common.js +6 -0
- package/dist/node_modules/.pnpm/drizzle-orm@0.44.7_@electric-sql_pglite@0.3.11_@types_better-sqlite3@7.6.13_better-sqlite3@12.4.1_kysely@0.28.8/node_modules/drizzle-orm/view-common.js.map +1 -0
- package/dist/query/condition-builder.js.map +1 -1
- package/dist/query/result-transform.js +2 -1
- package/dist/query/result-transform.js.map +1 -1
- package/dist/schema/create.d.ts +74 -16
- package/dist/schema/create.d.ts.map +1 -1
- package/dist/schema/create.js +76 -11
- package/dist/schema/create.js.map +1 -1
- package/dist/schema/serialize.js +3 -0
- package/dist/schema/serialize.js.map +1 -1
- package/dist/shared/settings-schema.js +36 -0
- package/dist/shared/settings-schema.js.map +1 -0
- package/dist/util/import-generator.js.map +1 -1
- package/dist/util/parse.js.map +1 -1
- package/package.json +20 -23
- package/src/adapters/adapters.ts +10 -3
- package/src/adapters/drizzle/drizzle-adapter-pglite.test.ts +11 -7
- package/src/adapters/drizzle/drizzle-adapter-sqlite.test.ts +585 -0
- package/src/adapters/drizzle/drizzle-adapter.test.ts +78 -30
- package/src/adapters/drizzle/drizzle-adapter.ts +38 -78
- package/src/adapters/drizzle/drizzle-query.ts +6 -9
- package/src/adapters/drizzle/drizzle-uow-compiler.test.ts +10 -4
- package/src/adapters/drizzle/drizzle-uow-compiler.ts +12 -6
- package/src/adapters/drizzle/drizzle-uow-decoder.ts +22 -5
- package/src/adapters/drizzle/drizzle-uow-executor.ts +156 -116
- package/src/adapters/drizzle/generate.test.ts +582 -159
- package/src/adapters/drizzle/generate.ts +196 -41
- package/src/adapters/drizzle/migrate-drizzle.test.ts +30 -6
- package/src/adapters/drizzle/shared.ts +31 -1
- package/src/adapters/drizzle/test-utils.ts +3 -1
- package/src/adapters/kysely/kysely-adapter-pglite.test.ts +25 -27
- package/src/adapters/kysely/kysely-adapter.ts +35 -58
- package/src/adapters/kysely/kysely-query-builder.ts +75 -44
- package/src/adapters/kysely/kysely-query-compiler.ts +3 -1
- package/src/adapters/kysely/kysely-query.ts +8 -2
- package/src/adapters/kysely/kysely-shared.ts +23 -0
- package/src/adapters/kysely/kysely-uow-compiler.ts +5 -2
- package/src/adapters/kysely/migration/execute-mysql.test.ts +2 -2
- package/src/adapters/kysely/migration/execute-postgres.test.ts +19 -19
- package/src/adapters/kysely/migration/execute.ts +48 -17
- package/src/adapters/kysely/migration/kysely-migrator.test.ts +19 -37
- package/src/fragment.test.ts +1 -0
- package/src/migration-engine/auto-from-schema.ts +14 -18
- package/src/migration-engine/create.ts +1 -6
- package/src/migration-engine/generation-engine.test.ts +597 -0
- package/src/migration-engine/generation-engine.ts +356 -0
- package/src/migration-engine/shared.ts +1 -4
- package/src/mod.ts +0 -66
- package/src/query/condition-builder.ts +24 -8
- package/src/query/result-transform.ts +7 -1
- package/src/schema/create.test.ts +4 -1
- package/src/schema/create.ts +132 -24
- package/src/schema/serialize.test.ts +1 -0
- package/src/schema/serialize.ts +28 -7
- package/src/shared/settings-schema.ts +61 -0
- package/src/util/deep-equal.ts +21 -7
- package/src/util/import-generator.ts +3 -1
- package/src/util/parse.ts +3 -1
- package/tsdown.config.ts +1 -0
- package/.turbo/turbo-test.log +0 -37
- package/.turbo/turbo-types$colon$check.log +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/column-builder.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/column.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/entity.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/columns/common.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/columns/enum.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/foreign-keys.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/unique-constraint.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/utils/array.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/conditions.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/select.js +0 -13
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/select.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/functions/aggregate.js +0 -10
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/functions/aggregate.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/sql.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/subquery.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.utils.js +0 -6
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.utils.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing-utils.js +0 -8
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing-utils.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing.js +0 -8
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing.js.map +0 -1
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/view-common.js +0 -6
- package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/view-common.js.map +0 -1
|
@@ -8,6 +8,8 @@ import {
|
|
|
8
8
|
} from "../../schema/create";
|
|
9
9
|
import type { SQLProvider } from "../../shared/providers";
|
|
10
10
|
import { schemaToDBType, type DBTypeLiteral } from "../../schema/serialize";
|
|
11
|
+
import { createTableNameMapper } from "./shared";
|
|
12
|
+
import { settingsSchema, SETTINGS_TABLE_NAME } from "../../shared/settings-schema";
|
|
11
13
|
|
|
12
14
|
// ============================================================================
|
|
13
15
|
// PROVIDER CONFIGURATION
|
|
@@ -246,12 +248,16 @@ function generateColumnDefinition(
|
|
|
246
248
|
|
|
247
249
|
// Primary key for internal ID
|
|
248
250
|
if (column instanceof InternalIdColumn || column.role === "internal-id") {
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
|
|
253
|
-
|
|
251
|
+
if (ctx.provider === "sqlite") {
|
|
252
|
+
// SQLite uses primaryKey({ autoIncrement: true })
|
|
253
|
+
parts.push("primaryKey({ autoIncrement: true })");
|
|
254
|
+
} else if (ctx.provider === "mysql") {
|
|
255
|
+
// MySQL uses primaryKey().autoincrement()
|
|
256
|
+
parts.push("primaryKey()");
|
|
254
257
|
parts.push("autoincrement()");
|
|
258
|
+
} else {
|
|
259
|
+
// PostgreSQL just uses primaryKey()
|
|
260
|
+
parts.push("primaryKey()");
|
|
255
261
|
}
|
|
256
262
|
}
|
|
257
263
|
|
|
@@ -263,6 +269,7 @@ function generateColumnDefinition(
|
|
|
263
269
|
// Default values
|
|
264
270
|
if (column.default) {
|
|
265
271
|
if ("value" in column.default) {
|
|
272
|
+
// Static defaults: defaultTo(value)
|
|
266
273
|
let value: string;
|
|
267
274
|
if (typeof column.default.value === "bigint") {
|
|
268
275
|
ctx.imports.addImport("sql", "drizzle-orm");
|
|
@@ -271,12 +278,22 @@ function generateColumnDefinition(
|
|
|
271
278
|
value = JSON.stringify(column.default.value);
|
|
272
279
|
}
|
|
273
280
|
parts.push(`default(${value})`);
|
|
274
|
-
} else if (column.default
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
281
|
+
} else if ("dbSpecial" in column.default) {
|
|
282
|
+
// Database-level special functions: defaultTo(b => b.now())
|
|
283
|
+
if (column.default.dbSpecial === "now") {
|
|
284
|
+
parts.push("defaultNow()");
|
|
285
|
+
}
|
|
286
|
+
} else if ("runtime" in column.default) {
|
|
287
|
+
// Runtime defaults: defaultTo$()
|
|
288
|
+
if (column.default.runtime === "cuid") {
|
|
289
|
+
const idGen = ctx.idGeneratorImport ?? { name: "createId", from: "@fragno-dev/db/id" };
|
|
290
|
+
ctx.imports.addImport(idGen.name, idGen.from);
|
|
291
|
+
parts.push(`$defaultFn(() => ${idGen.name}())`);
|
|
292
|
+
} else if (column.default.runtime === "now") {
|
|
293
|
+
// Runtime-generated timestamp (not database-level)
|
|
294
|
+
parts.push("$defaultFn(() => new Date())");
|
|
295
|
+
}
|
|
296
|
+
// Note: Custom functions in defaultTo$(() => ...) are not supported in schema generation
|
|
280
297
|
}
|
|
281
298
|
}
|
|
282
299
|
|
|
@@ -297,7 +314,8 @@ function generateAllColumns(
|
|
|
297
314
|
// CONSTRAINT GENERATION
|
|
298
315
|
// ============================================================================
|
|
299
316
|
|
|
300
|
-
function generateForeignKeys(ctx: GeneratorContext, table: AnyTable): string[] {
|
|
317
|
+
function generateForeignKeys(ctx: GeneratorContext, table: AnyTable, namespace?: string): string[] {
|
|
318
|
+
const mapper = namespace ? createTableNameMapper(namespace) : undefined;
|
|
301
319
|
const keys: string[] = [];
|
|
302
320
|
|
|
303
321
|
for (const relation of Object.values(table.relations)) {
|
|
@@ -319,12 +337,19 @@ function generateForeignKeys(ctx: GeneratorContext, table: AnyTable): string[] {
|
|
|
319
337
|
if (isSelfReference) {
|
|
320
338
|
foreignColumns.push(`table.${actualRefCol}`);
|
|
321
339
|
} else {
|
|
322
|
-
|
|
340
|
+
// Suffix the foreign table reference with namespace if provided
|
|
341
|
+
const foreignTableRef =
|
|
342
|
+
mapper && namespace ? mapper.toPhysical(relation.table.ormName) : relation.table.ormName;
|
|
343
|
+
foreignColumns.push(`${foreignTableRef}.${actualRefCol}`);
|
|
323
344
|
}
|
|
324
345
|
}
|
|
325
346
|
|
|
326
347
|
ctx.imports.addImport("foreignKey", ctx.importSource);
|
|
327
|
-
|
|
348
|
+
// Include namespace in FK name to avoid collisions
|
|
349
|
+
const fkName =
|
|
350
|
+
namespace && mapper
|
|
351
|
+
? "fk_" + mapper.toPhysical(`${table.ormName}_${relation.table.ormName}_${relation.name}`)
|
|
352
|
+
: `${table.ormName}_${relation.table.ormName}_${relation.name}_fk`;
|
|
328
353
|
|
|
329
354
|
keys.push(`foreignKey({
|
|
330
355
|
columns: [${columns.join(", ")}],
|
|
@@ -336,53 +361,74 @@ function generateForeignKeys(ctx: GeneratorContext, table: AnyTable): string[] {
|
|
|
336
361
|
return keys;
|
|
337
362
|
}
|
|
338
363
|
|
|
339
|
-
function generateIndexes(ctx: GeneratorContext, table: AnyTable): string[] {
|
|
364
|
+
function generateIndexes(ctx: GeneratorContext, table: AnyTable, namespace?: string): string[] {
|
|
340
365
|
const indexes: string[] = [];
|
|
341
366
|
|
|
342
367
|
for (const idx of Object.values(table.indexes)) {
|
|
343
368
|
const columns = idx.columns.map((col) => `table.${col.ormName}`).join(", ");
|
|
344
369
|
|
|
370
|
+
// Include namespace in index name to avoid collisions
|
|
371
|
+
const indexName = namespace ? `${idx.name}_${namespace}` : idx.name;
|
|
372
|
+
|
|
345
373
|
if (idx.unique) {
|
|
346
374
|
ctx.imports.addImport("uniqueIndex", ctx.importSource);
|
|
347
|
-
indexes.push(`uniqueIndex("${
|
|
375
|
+
indexes.push(`uniqueIndex("${indexName}").on(${columns})`);
|
|
348
376
|
} else {
|
|
349
377
|
ctx.imports.addImport("index", ctx.importSource);
|
|
350
|
-
indexes.push(`index("${
|
|
378
|
+
indexes.push(`index("${indexName}").on(${columns})`);
|
|
351
379
|
}
|
|
352
380
|
}
|
|
353
381
|
|
|
354
382
|
return indexes;
|
|
355
383
|
}
|
|
356
384
|
|
|
357
|
-
function generateTableConstraints(
|
|
358
|
-
|
|
385
|
+
function generateTableConstraints(
|
|
386
|
+
ctx: GeneratorContext,
|
|
387
|
+
table: AnyTable,
|
|
388
|
+
namespace?: string,
|
|
389
|
+
): string[] {
|
|
390
|
+
return [...generateForeignKeys(ctx, table, namespace), ...generateIndexes(ctx, table, namespace)];
|
|
359
391
|
}
|
|
360
392
|
|
|
361
393
|
// ============================================================================
|
|
362
394
|
// TABLE GENERATION
|
|
363
395
|
// ============================================================================
|
|
364
396
|
|
|
365
|
-
function generateTable(
|
|
397
|
+
function generateTable(
|
|
398
|
+
ctx: GeneratorContext,
|
|
399
|
+
table: AnyTable,
|
|
400
|
+
customTypes: string[],
|
|
401
|
+
namespace?: string,
|
|
402
|
+
): string {
|
|
366
403
|
const tableFn = PROVIDER_TABLE_FUNCTIONS[ctx.provider];
|
|
367
404
|
ctx.imports.addImport(tableFn, ctx.importSource);
|
|
368
405
|
|
|
369
406
|
const columns = generateAllColumns(ctx, table, customTypes);
|
|
370
|
-
const constraints = generateTableConstraints(ctx, table);
|
|
407
|
+
const constraints = generateTableConstraints(ctx, table, namespace);
|
|
408
|
+
|
|
409
|
+
// Suffix table name with namespace if provided
|
|
410
|
+
const physicalTableName = namespace ? `${table.ormName}_${namespace}` : table.ormName;
|
|
411
|
+
// Sanitize namespace for use in export name (valid JS identifier)
|
|
412
|
+
const exportName = namespace ? `${table.ormName}_${sanitizeNamespace(namespace)}` : table.ormName;
|
|
371
413
|
|
|
372
|
-
const args: string[] = [`"${
|
|
414
|
+
const args: string[] = [`"${physicalTableName}"`, `{\n${columns.join(",\n")}\n}`];
|
|
373
415
|
|
|
374
416
|
if (constraints.length > 0) {
|
|
375
417
|
args.push(`(table) => [\n${ident(constraints.join(",\n"))}\n]`);
|
|
376
418
|
}
|
|
377
419
|
|
|
378
|
-
return `export const ${
|
|
420
|
+
return `export const ${exportName} = ${tableFn}(${args.join(", ")})`;
|
|
379
421
|
}
|
|
380
422
|
|
|
381
423
|
// ============================================================================
|
|
382
424
|
// RELATION GENERATION
|
|
383
425
|
// ============================================================================
|
|
384
426
|
|
|
385
|
-
function generateRelation(
|
|
427
|
+
function generateRelation(
|
|
428
|
+
ctx: GeneratorContext,
|
|
429
|
+
table: AnyTable,
|
|
430
|
+
namespace?: string,
|
|
431
|
+
): string | undefined {
|
|
386
432
|
const relations: string[] = [];
|
|
387
433
|
let hasOne = false;
|
|
388
434
|
let hasMany = false;
|
|
@@ -402,17 +448,29 @@ function generateRelation(ctx: GeneratorContext, table: AnyTable): string | unde
|
|
|
402
448
|
const fields: string[] = [];
|
|
403
449
|
const references: string[] = [];
|
|
404
450
|
|
|
451
|
+
// Use sanitized namespace for identifier references
|
|
452
|
+
const tableRef = namespace
|
|
453
|
+
? `${table.ormName}_${sanitizeNamespace(namespace)}`
|
|
454
|
+
: table.ormName;
|
|
455
|
+
const relatedTableRef = namespace
|
|
456
|
+
? `${relation.table.ormName}_${sanitizeNamespace(namespace)}`
|
|
457
|
+
: relation.table.ormName;
|
|
458
|
+
|
|
405
459
|
for (const [left, right] of relation.on) {
|
|
406
|
-
fields.push(`${
|
|
460
|
+
fields.push(`${tableRef}.${left}`);
|
|
407
461
|
// Relations reference internal IDs
|
|
408
462
|
const actualRight = right === "id" ? "_internalId" : right;
|
|
409
|
-
references.push(`${
|
|
463
|
+
references.push(`${relatedTableRef}.${actualRight}`);
|
|
410
464
|
}
|
|
411
465
|
|
|
412
466
|
options.push(`fields: [${fields.join(", ")}]`, `references: [${references.join(", ")}]`);
|
|
413
467
|
}
|
|
414
468
|
|
|
415
|
-
const
|
|
469
|
+
const relatedTableRef = namespace
|
|
470
|
+
? `${relation.table.ormName}_${sanitizeNamespace(namespace)}`
|
|
471
|
+
: relation.table.ormName;
|
|
472
|
+
|
|
473
|
+
const args: string[] = [relatedTableRef];
|
|
416
474
|
if (options.length > 0) {
|
|
417
475
|
args.push(`{\n${ident(options.join(",\n"))}\n}`);
|
|
418
476
|
}
|
|
@@ -434,12 +492,59 @@ function generateRelation(ctx: GeneratorContext, table: AnyTable): string | unde
|
|
|
434
492
|
}
|
|
435
493
|
const relationParams = params.length > 0 ? `{ ${params.join(", ")} }` : "{}";
|
|
436
494
|
|
|
495
|
+
const tableRef = namespace ? `${table.ormName}_${sanitizeNamespace(namespace)}` : table.ormName;
|
|
496
|
+
const relationsName = namespace
|
|
497
|
+
? `${table.ormName}_${sanitizeNamespace(namespace)}Relations`
|
|
498
|
+
: `${table.ormName}Relations`;
|
|
499
|
+
|
|
437
500
|
ctx.imports.addImport("relations", "drizzle-orm");
|
|
438
|
-
return `export const ${
|
|
501
|
+
return `export const ${relationsName} = relations(${tableRef}, (${relationParams}) => ({
|
|
439
502
|
${relations.join(",\n")}
|
|
440
503
|
}));`;
|
|
441
504
|
}
|
|
442
505
|
|
|
506
|
+
// ============================================================================
|
|
507
|
+
// UTILITIES
|
|
508
|
+
// ============================================================================
|
|
509
|
+
|
|
510
|
+
/**
|
|
511
|
+
* Sanitize a namespace to be a valid JavaScript identifier
|
|
512
|
+
* Replaces hyphens and other invalid characters with underscores
|
|
513
|
+
*/
|
|
514
|
+
function sanitizeNamespace(namespace: string): string {
|
|
515
|
+
return namespace.replace(/[^a-zA-Z0-9_]/g, "_");
|
|
516
|
+
}
|
|
517
|
+
|
|
518
|
+
/**
|
|
519
|
+
* Generate a schema export object for a fragment
|
|
520
|
+
* This groups all tables by their logical names for easier access
|
|
521
|
+
*/
|
|
522
|
+
function generateFragmentSchemaExport(schema: AnySchema, namespace: string): string {
|
|
523
|
+
const entries: string[] = [];
|
|
524
|
+
|
|
525
|
+
for (const table of Object.values(schema.tables)) {
|
|
526
|
+
const physicalExportName = namespace
|
|
527
|
+
? `${table.ormName}_${sanitizeNamespace(namespace)}`
|
|
528
|
+
: table.ormName;
|
|
529
|
+
|
|
530
|
+
if (namespace) {
|
|
531
|
+
const physicalTableName = namespace ? `${table.ormName}_${namespace}` : table.ormName;
|
|
532
|
+
// Use physical table name as key for Drizzle schema lookups
|
|
533
|
+
entries.push(` "${physicalTableName}": ${physicalExportName}`);
|
|
534
|
+
}
|
|
535
|
+
|
|
536
|
+
// Also provide logical name for convenience
|
|
537
|
+
entries.push(` ${table.ormName}: ${physicalExportName}`);
|
|
538
|
+
}
|
|
539
|
+
|
|
540
|
+
// Add schema version as a number
|
|
541
|
+
entries.push(` schemaVersion: ${schema.version}`);
|
|
542
|
+
|
|
543
|
+
const exportName = namespace ? `${sanitizeNamespace(namespace)}_schema` : "_schema";
|
|
544
|
+
|
|
545
|
+
return `export const ${exportName} = {\n${entries.join(",\n")}\n}`;
|
|
546
|
+
}
|
|
547
|
+
|
|
443
548
|
// ============================================================================
|
|
444
549
|
// MAIN GENERATION
|
|
445
550
|
// ============================================================================
|
|
@@ -454,28 +559,78 @@ export interface GenerateSchemaOptions {
|
|
|
454
559
|
};
|
|
455
560
|
}
|
|
456
561
|
|
|
562
|
+
/**
|
|
563
|
+
* Generate a settings table for storing fragment versions
|
|
564
|
+
*/
|
|
565
|
+
function generateSettingsTable(ctx: GeneratorContext): string {
|
|
566
|
+
// Use centralized settings schema
|
|
567
|
+
|
|
568
|
+
// Extract the table from the schema
|
|
569
|
+
const settingsTable =
|
|
570
|
+
settingsSchema.tables[SETTINGS_TABLE_NAME as keyof typeof settingsSchema.tables];
|
|
571
|
+
|
|
572
|
+
// Generate the table using the existing generateTable function
|
|
573
|
+
const customTypes: string[] = [];
|
|
574
|
+
return generateTable(ctx, settingsTable, customTypes);
|
|
575
|
+
}
|
|
576
|
+
|
|
577
|
+
/**
|
|
578
|
+
* Generate a schema file from one or more fragments with a shared settings table
|
|
579
|
+
*/
|
|
457
580
|
export function generateSchema(
|
|
458
|
-
schema: AnySchema,
|
|
581
|
+
fragments: { namespace: string; schema: AnySchema }[],
|
|
459
582
|
provider: SupportedProvider,
|
|
460
583
|
options?: GenerateSchemaOptions,
|
|
461
584
|
): string {
|
|
462
585
|
const ctx = createContext(provider, options?.idGeneratorImport);
|
|
463
586
|
const customTypes: string[] = [];
|
|
464
|
-
const
|
|
587
|
+
const sections: string[] = [];
|
|
588
|
+
|
|
589
|
+
// Generate settings table first
|
|
590
|
+
sections.push("");
|
|
591
|
+
sections.push("// ============================================================================");
|
|
592
|
+
sections.push("// Settings Table (shared across all fragments)");
|
|
593
|
+
sections.push("// ============================================================================");
|
|
594
|
+
sections.push("");
|
|
595
|
+
sections.push(generateSettingsTable(ctx));
|
|
596
|
+
sections.push("");
|
|
597
|
+
sections.push(`export const fragnoDbSettingSchemaVersion = ${settingsSchema.version};`);
|
|
598
|
+
|
|
599
|
+
// Generate each fragment's tables
|
|
600
|
+
for (const { namespace, schema } of fragments) {
|
|
601
|
+
const fragmentTables: string[] = [];
|
|
602
|
+
|
|
603
|
+
// Add section header
|
|
604
|
+
fragmentTables.push("");
|
|
605
|
+
fragmentTables.push(
|
|
606
|
+
"// ============================================================================",
|
|
607
|
+
);
|
|
608
|
+
fragmentTables.push(`// Fragment: ${namespace}`);
|
|
609
|
+
fragmentTables.push(
|
|
610
|
+
"// ============================================================================",
|
|
611
|
+
);
|
|
612
|
+
|
|
613
|
+
// Generate tables for this fragment
|
|
614
|
+
for (const table of Object.values(schema.tables)) {
|
|
615
|
+
const tableCode = generateTable(ctx, table, customTypes, namespace);
|
|
616
|
+
fragmentTables.push("");
|
|
617
|
+
fragmentTables.push(tableCode);
|
|
618
|
+
|
|
619
|
+
const relationCode = generateRelation(ctx, table, namespace);
|
|
620
|
+
if (relationCode) {
|
|
621
|
+
fragmentTables.push("");
|
|
622
|
+
fragmentTables.push(relationCode);
|
|
623
|
+
}
|
|
624
|
+
}
|
|
465
625
|
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
const tableCode = generateTable(ctx, table, customTypes);
|
|
470
|
-
tables.push(tableCode);
|
|
626
|
+
// Generate schema export object
|
|
627
|
+
fragmentTables.push("");
|
|
628
|
+
fragmentTables.push(generateFragmentSchemaExport(schema, namespace));
|
|
471
629
|
|
|
472
|
-
|
|
473
|
-
if (relationCode) {
|
|
474
|
-
tables.push(relationCode);
|
|
475
|
-
}
|
|
630
|
+
sections.push(...fragmentTables);
|
|
476
631
|
}
|
|
477
632
|
|
|
478
633
|
// Assemble final output
|
|
479
|
-
const lines: string[] = [ctx.imports.format(), ...customTypes, ...
|
|
480
|
-
return lines.join("\n
|
|
634
|
+
const lines: string[] = [ctx.imports.format(), ...customTypes, ...sections];
|
|
635
|
+
return lines.join("\n");
|
|
481
636
|
}
|
|
@@ -19,8 +19,14 @@ describe("generateSchema and migrate", () => {
|
|
|
19
19
|
.addColumn("age", column("integer").nullable())
|
|
20
20
|
.addColumn("isActive", column("bool").defaultTo(true))
|
|
21
21
|
.addColumn("bio", column("string").nullable())
|
|
22
|
-
.addColumn(
|
|
23
|
-
|
|
22
|
+
.addColumn(
|
|
23
|
+
"createdAt",
|
|
24
|
+
column("timestamp").defaultTo((b) => b.now()),
|
|
25
|
+
)
|
|
26
|
+
.addColumn(
|
|
27
|
+
"updatedAt",
|
|
28
|
+
column("timestamp").defaultTo((b) => b.now()),
|
|
29
|
+
)
|
|
24
30
|
.createIndex("idx_users_email", ["email"], { unique: true })
|
|
25
31
|
.createIndex("idx_users_name", ["name"])
|
|
26
32
|
.createIndex("idx_users_active", ["isActive"]);
|
|
@@ -40,7 +46,10 @@ describe("generateSchema and migrate", () => {
|
|
|
40
46
|
.addColumn("metadata", column("json").nullable())
|
|
41
47
|
.addColumn("rating", column("decimal").nullable())
|
|
42
48
|
.addColumn("thumbnail", column("binary").nullable())
|
|
43
|
-
.addColumn(
|
|
49
|
+
.addColumn(
|
|
50
|
+
"createdAt",
|
|
51
|
+
column("timestamp").defaultTo((b) => b.now()),
|
|
52
|
+
)
|
|
44
53
|
.createIndex("idx_posts_user", ["userId"])
|
|
45
54
|
.createIndex("idx_posts_title", ["title"])
|
|
46
55
|
.createIndex("idx_posts_slug", ["slug"], { unique: true })
|
|
@@ -53,7 +62,10 @@ describe("generateSchema and migrate", () => {
|
|
|
53
62
|
.addColumn("postId", referenceColumn())
|
|
54
63
|
.addColumn("userId", referenceColumn())
|
|
55
64
|
.addColumn("parentId", referenceColumn().nullable())
|
|
56
|
-
.addColumn(
|
|
65
|
+
.addColumn(
|
|
66
|
+
"createdAt",
|
|
67
|
+
column("timestamp").defaultTo((b) => b.now()),
|
|
68
|
+
)
|
|
57
69
|
.addColumn("editedAt", column("timestamp").nullable())
|
|
58
70
|
.addColumn("isDeleted", column("bool").defaultTo(false))
|
|
59
71
|
.createIndex("idx_comments_post", ["postId"])
|
|
@@ -77,7 +89,10 @@ describe("generateSchema and migrate", () => {
|
|
|
77
89
|
.addColumn("postId", referenceColumn())
|
|
78
90
|
.addColumn("tagId", referenceColumn())
|
|
79
91
|
.addColumn("order", column("integer").defaultTo(0))
|
|
80
|
-
.addColumn(
|
|
92
|
+
.addColumn(
|
|
93
|
+
"createdAt",
|
|
94
|
+
column("timestamp").defaultTo((b) => b.now()),
|
|
95
|
+
)
|
|
81
96
|
.createIndex("idx_postTags_post_tag", ["postId", "tagId"], { unique: true })
|
|
82
97
|
.createIndex("idx_postTags_tag", ["tagId"]);
|
|
83
98
|
})
|
|
@@ -135,7 +150,15 @@ describe("generateSchema and migrate", () => {
|
|
|
135
150
|
);
|
|
136
151
|
|
|
137
152
|
expect(migrationStatements.join("\n")).toMatchInlineSnapshot(`
|
|
138
|
-
"CREATE TABLE "
|
|
153
|
+
"CREATE TABLE "fragno_db_settings" (
|
|
154
|
+
"id" varchar(30) NOT NULL,
|
|
155
|
+
"key" text NOT NULL,
|
|
156
|
+
"value" text NOT NULL,
|
|
157
|
+
"_internalId" bigserial PRIMARY KEY NOT NULL,
|
|
158
|
+
"_version" integer DEFAULT 0 NOT NULL
|
|
159
|
+
);
|
|
160
|
+
|
|
161
|
+
CREATE TABLE "users" (
|
|
139
162
|
"id" varchar(30) NOT NULL,
|
|
140
163
|
"name" text NOT NULL,
|
|
141
164
|
"email" text NOT NULL,
|
|
@@ -207,6 +230,7 @@ describe("generateSchema and migrate", () => {
|
|
|
207
230
|
ALTER TABLE "comments" ADD CONSTRAINT "comments_comments_parent_fk" FOREIGN KEY ("parentId") REFERENCES "public"."comments"("_internalId") ON DELETE no action ON UPDATE no action;
|
|
208
231
|
ALTER TABLE "postTags" ADD CONSTRAINT "postTags_posts_post_fk" FOREIGN KEY ("postId") REFERENCES "public"."posts"("_internalId") ON DELETE no action ON UPDATE no action;
|
|
209
232
|
ALTER TABLE "postTags" ADD CONSTRAINT "postTags_tags_tag_fk" FOREIGN KEY ("tagId") REFERENCES "public"."tags"("_internalId") ON DELETE no action ON UPDATE no action;
|
|
233
|
+
CREATE UNIQUE INDEX "unique_key" ON "fragno_db_settings" USING btree ("key");
|
|
210
234
|
CREATE UNIQUE INDEX "idx_users_email" ON "users" USING btree ("email");
|
|
211
235
|
CREATE INDEX "idx_users_name" ON "users" USING btree ("name");
|
|
212
236
|
CREATE INDEX "idx_users_active" ON "users" USING btree ("isActive");
|
|
@@ -13,10 +13,40 @@ export type DBType = MySQL.MySqlDatabase<
|
|
|
13
13
|
export function parseDrizzle(drizzle: unknown) {
|
|
14
14
|
const db = drizzle as DBType;
|
|
15
15
|
const drizzleTables = db._.fullSchema as Record<string, TableType>;
|
|
16
|
-
if (!drizzleTables || Object.keys(drizzleTables).length === 0)
|
|
16
|
+
if (!drizzleTables || Object.keys(drizzleTables).length === 0) {
|
|
17
17
|
throw new Error(
|
|
18
18
|
"Drizzle adapter requires query mode, make sure to configure it following their guide: https://orm.drizzle.team/docs/rqb.",
|
|
19
19
|
);
|
|
20
|
+
}
|
|
20
21
|
|
|
21
22
|
return [db, drizzleTables] as const;
|
|
22
23
|
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Maps logical table names (used by fragment authors) to physical table names (with namespace suffix)
|
|
27
|
+
*/
|
|
28
|
+
export interface TableNameMapper {
|
|
29
|
+
toPhysical(logicalName: string): string;
|
|
30
|
+
toLogical(physicalName: string): string;
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Creates a table name mapper for a given namespace.
|
|
35
|
+
* Physical names have format: {logicalName}_{namespace}
|
|
36
|
+
*/
|
|
37
|
+
export function createTableNameMapper(namespace: string): TableNameMapper {
|
|
38
|
+
return {
|
|
39
|
+
toPhysical: (logicalName: string) => `${logicalName}_${namespace}`,
|
|
40
|
+
toLogical: (physicalName: string) => {
|
|
41
|
+
if (physicalName.endsWith(`_${namespace}`)) {
|
|
42
|
+
return physicalName.slice(0, -(namespace.length + 1));
|
|
43
|
+
}
|
|
44
|
+
return physicalName;
|
|
45
|
+
},
|
|
46
|
+
};
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
export interface DrizzleResult {
|
|
50
|
+
rows: Record<string, unknown>[];
|
|
51
|
+
affectedRows: number;
|
|
52
|
+
}
|
|
@@ -18,6 +18,7 @@ export async function writeAndLoadSchema(
|
|
|
18
18
|
testFileName: string,
|
|
19
19
|
schema: Schema,
|
|
20
20
|
dialect: SupportedProvider,
|
|
21
|
+
namespace?: string,
|
|
21
22
|
) {
|
|
22
23
|
// Create test-specific directory inside _generated
|
|
23
24
|
const baseDir = join(import.meta.dirname, "_generated");
|
|
@@ -37,7 +38,8 @@ export async function writeAndLoadSchema(
|
|
|
37
38
|
);
|
|
38
39
|
|
|
39
40
|
// Generate and write the Drizzle schema to file
|
|
40
|
-
|
|
41
|
+
// Use empty namespace for tests to avoid table name prefixing
|
|
42
|
+
const drizzleSchemaTs = generateSchema([{ namespace: namespace ?? "", schema }], dialect);
|
|
41
43
|
await writeFile(schemaFilePath, drizzleSchemaTs, "utf-8");
|
|
42
44
|
|
|
43
45
|
// Dynamically import the generated schema (with cache busting)
|
|
@@ -116,57 +116,55 @@ describe("KyselyAdapter PGLite", () => {
|
|
|
116
116
|
expect(schemaVersion).toBeUndefined();
|
|
117
117
|
|
|
118
118
|
const migrator = adapter.createMigrationEngine(testSchema, "test");
|
|
119
|
-
const preparedMigration = await migrator.prepareMigration(
|
|
119
|
+
const preparedMigration = await migrator.prepareMigration({
|
|
120
|
+
updateSettings: false,
|
|
121
|
+
});
|
|
120
122
|
assert(preparedMigration.getSQL);
|
|
121
123
|
|
|
122
124
|
expect(preparedMigration.getSQL()).toMatchInlineSnapshot(`
|
|
123
|
-
"create table "
|
|
124
|
-
|
|
125
|
-
insert into "fragno_db_settings" ("key", "value") values ('test.schema_version', '12');
|
|
126
|
-
|
|
127
|
-
create table "users" ("id" varchar(30) not null unique, "name" text not null, "age" integer, "_internalId" bigserial not null primary key, "_version" integer default 0 not null);
|
|
125
|
+
"create table "users_test" ("id" varchar(30) not null unique, "name" text not null, "age" integer, "_internalId" bigserial not null primary key, "_version" integer default 0 not null);
|
|
128
126
|
|
|
129
|
-
create index "name_idx" on "
|
|
127
|
+
create index "name_idx" on "users_test" ("name");
|
|
130
128
|
|
|
131
|
-
create index "age_idx" on "
|
|
129
|
+
create index "age_idx" on "users_test" ("age");
|
|
132
130
|
|
|
133
|
-
create table "
|
|
131
|
+
create table "emails_test" ("id" varchar(30) not null unique, "user_id" bigint not null, "email" text not null, "is_primary" boolean default false not null, "_internalId" bigserial not null primary key, "_version" integer default 0 not null);
|
|
134
132
|
|
|
135
|
-
create unique index "unique_email" on "
|
|
133
|
+
create unique index "unique_email" on "emails_test" ("email");
|
|
136
134
|
|
|
137
|
-
create index "user_emails" on "
|
|
135
|
+
create index "user_emails" on "emails_test" ("user_id");
|
|
138
136
|
|
|
139
|
-
create table "
|
|
137
|
+
create table "posts_test" ("id" varchar(30) not null unique, "user_id" bigint not null, "title" text not null, "content" text not null, "_internalId" bigserial not null primary key, "_version" integer default 0 not null);
|
|
140
138
|
|
|
141
|
-
create index "posts_user_idx" on "
|
|
139
|
+
create index "posts_user_idx" on "posts_test" ("user_id");
|
|
142
140
|
|
|
143
|
-
create table "
|
|
141
|
+
create table "tags_test" ("id" varchar(30) not null unique, "name" text not null, "_internalId" bigserial not null primary key, "_version" integer default 0 not null);
|
|
144
142
|
|
|
145
|
-
create index "tag_name" on "
|
|
143
|
+
create index "tag_name" on "tags_test" ("name");
|
|
146
144
|
|
|
147
|
-
create table "
|
|
145
|
+
create table "post_tags_test" ("id" varchar(30) not null unique, "post_id" bigint not null, "tag_id" bigint not null, "_internalId" bigserial not null primary key, "_version" integer default 0 not null);
|
|
148
146
|
|
|
149
|
-
create index "pt_post" on "
|
|
147
|
+
create index "pt_post" on "post_tags_test" ("post_id");
|
|
150
148
|
|
|
151
|
-
create index "pt_tag" on "
|
|
149
|
+
create index "pt_tag" on "post_tags_test" ("tag_id");
|
|
152
150
|
|
|
153
|
-
create table "
|
|
151
|
+
create table "comments_test" ("id" varchar(30) not null unique, "post_id" bigint not null, "user_id" bigint not null, "text" text not null, "_internalId" bigserial not null primary key, "_version" integer default 0 not null);
|
|
154
152
|
|
|
155
|
-
create index "comments_post_idx" on "
|
|
153
|
+
create index "comments_post_idx" on "comments_test" ("post_id");
|
|
156
154
|
|
|
157
|
-
create index "comments_user_idx" on "
|
|
155
|
+
create index "comments_user_idx" on "comments_test" ("user_id");
|
|
158
156
|
|
|
159
|
-
alter table "
|
|
157
|
+
alter table "emails_test" add constraint "emails_users_user_fk" foreign key ("user_id") references "users_test" ("_internalId") on delete restrict on update restrict;
|
|
160
158
|
|
|
161
|
-
alter table "
|
|
159
|
+
alter table "posts_test" add constraint "posts_users_author_fk" foreign key ("user_id") references "users_test" ("_internalId") on delete restrict on update restrict;
|
|
162
160
|
|
|
163
|
-
alter table "
|
|
161
|
+
alter table "post_tags_test" add constraint "post_tags_posts_post_fk" foreign key ("post_id") references "posts_test" ("_internalId") on delete restrict on update restrict;
|
|
164
162
|
|
|
165
|
-
alter table "
|
|
163
|
+
alter table "post_tags_test" add constraint "post_tags_tags_tag_fk" foreign key ("tag_id") references "tags_test" ("_internalId") on delete restrict on update restrict;
|
|
166
164
|
|
|
167
|
-
alter table "
|
|
165
|
+
alter table "comments_test" add constraint "comments_posts_post_fk" foreign key ("post_id") references "posts_test" ("_internalId") on delete restrict on update restrict;
|
|
168
166
|
|
|
169
|
-
alter table "
|
|
167
|
+
alter table "comments_test" add constraint "comments_users_commenter_fk" foreign key ("user_id") references "users_test" ("_internalId") on delete restrict on update restrict;"
|
|
170
168
|
`);
|
|
171
169
|
|
|
172
170
|
await preparedMigration.execute();
|