@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.
Files changed (222) hide show
  1. package/.turbo/turbo-build.log +196 -137
  2. package/CHANGELOG.md +18 -0
  3. package/LICENSE.md +16 -0
  4. package/dist/adapters/adapters.d.ts +11 -1
  5. package/dist/adapters/adapters.d.ts.map +1 -1
  6. package/dist/adapters/drizzle/drizzle-adapter.d.ts +9 -2
  7. package/dist/adapters/drizzle/drizzle-adapter.d.ts.map +1 -1
  8. package/dist/adapters/drizzle/drizzle-adapter.js +23 -39
  9. package/dist/adapters/drizzle/drizzle-adapter.js.map +1 -1
  10. package/dist/adapters/drizzle/drizzle-query.d.ts.map +1 -1
  11. package/dist/adapters/drizzle/drizzle-query.js +5 -4
  12. package/dist/adapters/drizzle/drizzle-query.js.map +1 -1
  13. package/dist/adapters/drizzle/drizzle-uow-compiler.js +12 -10
  14. package/dist/adapters/drizzle/drizzle-uow-compiler.js.map +1 -1
  15. package/dist/adapters/drizzle/drizzle-uow-decoder.js +14 -4
  16. package/dist/adapters/drizzle/drizzle-uow-decoder.js.map +1 -1
  17. package/dist/adapters/drizzle/drizzle-uow-executor.js +78 -60
  18. package/dist/adapters/drizzle/drizzle-uow-executor.js.map +1 -1
  19. package/dist/adapters/drizzle/generate.js +111 -37
  20. package/dist/adapters/drizzle/generate.js.map +1 -1
  21. package/dist/adapters/drizzle/shared.js +14 -1
  22. package/dist/adapters/drizzle/shared.js.map +1 -1
  23. package/dist/adapters/kysely/kysely-adapter.d.ts +2 -1
  24. package/dist/adapters/kysely/kysely-adapter.d.ts.map +1 -1
  25. package/dist/adapters/kysely/kysely-adapter.js +25 -30
  26. package/dist/adapters/kysely/kysely-adapter.js.map +1 -1
  27. package/dist/adapters/kysely/kysely-query-builder.js +48 -44
  28. package/dist/adapters/kysely/kysely-query-builder.js.map +1 -1
  29. package/dist/adapters/kysely/kysely-query-compiler.js +2 -2
  30. package/dist/adapters/kysely/kysely-query-compiler.js.map +1 -1
  31. package/dist/adapters/kysely/kysely-query.js +3 -2
  32. package/dist/adapters/kysely/kysely-query.js.map +1 -1
  33. package/dist/adapters/kysely/kysely-shared.js +18 -0
  34. package/dist/adapters/kysely/kysely-shared.js.map +1 -0
  35. package/dist/adapters/kysely/kysely-uow-compiler.js +4 -3
  36. package/dist/adapters/kysely/kysely-uow-compiler.js.map +1 -1
  37. package/dist/adapters/kysely/migration/execute.js +15 -12
  38. package/dist/adapters/kysely/migration/execute.js.map +1 -1
  39. package/dist/migration-engine/auto-from-schema.js +2 -8
  40. package/dist/migration-engine/auto-from-schema.js.map +1 -1
  41. package/dist/migration-engine/create.d.ts +1 -5
  42. package/dist/migration-engine/create.js +1 -1
  43. package/dist/migration-engine/create.js.map +1 -1
  44. package/dist/migration-engine/generation-engine.d.ts +51 -0
  45. package/dist/migration-engine/generation-engine.d.ts.map +1 -0
  46. package/dist/migration-engine/generation-engine.js +165 -0
  47. package/dist/migration-engine/generation-engine.js.map +1 -0
  48. package/dist/migration-engine/shared.d.ts +5 -2
  49. package/dist/migration-engine/shared.d.ts.map +1 -1
  50. package/dist/migration-engine/shared.js.map +1 -1
  51. package/dist/mod.d.ts +0 -8
  52. package/dist/mod.d.ts.map +1 -1
  53. package/dist/mod.js +0 -32
  54. package/dist/mod.js.map +1 -1
  55. 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
  56. 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
  57. 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
  58. 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
  59. 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
  60. 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
  61. 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
  62. 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
  63. 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
  64. 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
  65. 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
  66. 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
  67. 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
  68. 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
  69. 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
  70. 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
  71. 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
  72. 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
  73. 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
  74. 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
  75. 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
  76. 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
  77. 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
  78. 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
  79. 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
  80. 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
  81. 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
  82. 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
  83. 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
  84. 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
  85. 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
  86. 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
  87. 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
  88. 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
  89. 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
  90. 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
  91. 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
  92. 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
  93. 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
  94. 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
  95. 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
  96. 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
  97. 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
  98. 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
  99. 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
  100. 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
  101. 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
  102. 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
  103. 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
  104. 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
  105. 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
  106. 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
  107. 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
  108. 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
  109. 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
  110. 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
  111. 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
  112. 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
  113. 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
  114. 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
  115. 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
  116. 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
  117. 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
  118. 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
  119. 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
  120. 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
  121. 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
  122. 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
  123. 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
  124. 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
  125. 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
  126. 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
  127. 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
  128. 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
  129. 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
  130. 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
  131. 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
  132. 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
  133. 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
  134. 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
  135. 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
  136. 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
  137. 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
  138. 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
  139. package/dist/query/condition-builder.js.map +1 -1
  140. package/dist/query/result-transform.js +2 -1
  141. package/dist/query/result-transform.js.map +1 -1
  142. package/dist/schema/create.d.ts +74 -16
  143. package/dist/schema/create.d.ts.map +1 -1
  144. package/dist/schema/create.js +76 -11
  145. package/dist/schema/create.js.map +1 -1
  146. package/dist/schema/serialize.js +3 -0
  147. package/dist/schema/serialize.js.map +1 -1
  148. package/dist/shared/settings-schema.js +36 -0
  149. package/dist/shared/settings-schema.js.map +1 -0
  150. package/dist/util/import-generator.js.map +1 -1
  151. package/dist/util/parse.js.map +1 -1
  152. package/package.json +20 -23
  153. package/src/adapters/adapters.ts +10 -3
  154. package/src/adapters/drizzle/drizzle-adapter-pglite.test.ts +11 -7
  155. package/src/adapters/drizzle/drizzle-adapter-sqlite.test.ts +585 -0
  156. package/src/adapters/drizzle/drizzle-adapter.test.ts +78 -30
  157. package/src/adapters/drizzle/drizzle-adapter.ts +38 -78
  158. package/src/adapters/drizzle/drizzle-query.ts +6 -9
  159. package/src/adapters/drizzle/drizzle-uow-compiler.test.ts +10 -4
  160. package/src/adapters/drizzle/drizzle-uow-compiler.ts +12 -6
  161. package/src/adapters/drizzle/drizzle-uow-decoder.ts +22 -5
  162. package/src/adapters/drizzle/drizzle-uow-executor.ts +156 -116
  163. package/src/adapters/drizzle/generate.test.ts +582 -159
  164. package/src/adapters/drizzle/generate.ts +196 -41
  165. package/src/adapters/drizzle/migrate-drizzle.test.ts +30 -6
  166. package/src/adapters/drizzle/shared.ts +31 -1
  167. package/src/adapters/drizzle/test-utils.ts +3 -1
  168. package/src/adapters/kysely/kysely-adapter-pglite.test.ts +25 -27
  169. package/src/adapters/kysely/kysely-adapter.ts +35 -58
  170. package/src/adapters/kysely/kysely-query-builder.ts +75 -44
  171. package/src/adapters/kysely/kysely-query-compiler.ts +3 -1
  172. package/src/adapters/kysely/kysely-query.ts +8 -2
  173. package/src/adapters/kysely/kysely-shared.ts +23 -0
  174. package/src/adapters/kysely/kysely-uow-compiler.ts +5 -2
  175. package/src/adapters/kysely/migration/execute-mysql.test.ts +2 -2
  176. package/src/adapters/kysely/migration/execute-postgres.test.ts +19 -19
  177. package/src/adapters/kysely/migration/execute.ts +48 -17
  178. package/src/adapters/kysely/migration/kysely-migrator.test.ts +19 -37
  179. package/src/fragment.test.ts +1 -0
  180. package/src/migration-engine/auto-from-schema.ts +14 -18
  181. package/src/migration-engine/create.ts +1 -6
  182. package/src/migration-engine/generation-engine.test.ts +597 -0
  183. package/src/migration-engine/generation-engine.ts +356 -0
  184. package/src/migration-engine/shared.ts +1 -4
  185. package/src/mod.ts +0 -66
  186. package/src/query/condition-builder.ts +24 -8
  187. package/src/query/result-transform.ts +7 -1
  188. package/src/schema/create.test.ts +4 -1
  189. package/src/schema/create.ts +132 -24
  190. package/src/schema/serialize.test.ts +1 -0
  191. package/src/schema/serialize.ts +28 -7
  192. package/src/shared/settings-schema.ts +61 -0
  193. package/src/util/deep-equal.ts +21 -7
  194. package/src/util/import-generator.ts +3 -1
  195. package/src/util/parse.ts +3 -1
  196. package/tsdown.config.ts +1 -0
  197. package/.turbo/turbo-test.log +0 -37
  198. package/.turbo/turbo-types$colon$check.log +0 -1
  199. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/column-builder.js.map +0 -1
  200. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/column.js.map +0 -1
  201. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/entity.js.map +0 -1
  202. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/columns/common.js.map +0 -1
  203. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/columns/enum.js.map +0 -1
  204. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/foreign-keys.js.map +0 -1
  205. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/unique-constraint.js.map +0 -1
  206. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/pg-core/utils/array.js.map +0 -1
  207. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/conditions.js.map +0 -1
  208. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/select.js +0 -13
  209. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/expressions/select.js.map +0 -1
  210. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/functions/aggregate.js +0 -10
  211. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/functions/aggregate.js.map +0 -1
  212. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/sql/sql.js.map +0 -1
  213. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/subquery.js.map +0 -1
  214. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.js.map +0 -1
  215. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.utils.js +0 -6
  216. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/table.utils.js.map +0 -1
  217. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing-utils.js +0 -8
  218. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing-utils.js.map +0 -1
  219. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing.js +0 -8
  220. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/tracing.js.map +0 -1
  221. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/view-common.js +0 -6
  222. package/dist/node_modules/.bun/drizzle-orm@0.44.6_4fae081eecb963e2/node_modules/drizzle-orm/view-common.js.map +0 -1
@@ -1 +1 @@
1
- {"version":3,"file":"serialize.js","names":["supportJson: SQLProvider[]"],"sources":["../../src/schema/serialize.ts"],"sourcesContent":["import type { SQLProvider } from \"../shared/providers\";\nimport type { AnyColumn } from \"./create\";\nimport { FragnoId, FragnoReference } from \"./create\";\n\nexport interface AdditionalColumnMetadata {\n length?: number;\n precision?: number;\n scale?: number;\n}\n\n/**\n * Get the possible column types that the raw DB type can map to.\n */\nexport function dbToSchemaType(\n dbType: string,\n provider: SQLProvider,\n additional: AdditionalColumnMetadata,\n): (AnyColumn[\"type\"] | \"varchar(n)\")[] {\n dbType = dbType.toLowerCase();\n if (provider === \"sqlite\") {\n switch (dbType) {\n case \"integer\":\n return [\"bool\", \"date\", \"timestamp\", \"bigint\", \"integer\"];\n case \"text\":\n return [\"json\", \"string\", \"bigint\", \"varchar(n)\"];\n case \"real\":\n case \"numeric\":\n return [\"decimal\"];\n case \"blob\":\n return [\"bigint\", \"binary\"];\n default:\n return [dbType as AnyColumn[\"type\"]];\n }\n }\n\n if (provider === \"postgresql\" || provider === \"cockroachdb\") {\n switch (dbType) {\n case \"decimal\":\n case \"real\":\n case \"numeric\":\n case \"double precision\":\n return [\"decimal\"];\n case \"timestamp\":\n case \"timestamptz\":\n return [\"timestamp\"];\n case \"varchar\": {\n const len = additional.length;\n if (len != null) {\n return [`varchar(${len})`];\n }\n return [\"string\"];\n }\n case \"text\":\n return [\"string\"];\n case \"boolean\":\n case \"bool\":\n return [\"bool\"];\n case \"bytea\":\n return [\"binary\"];\n default:\n return [dbType as AnyColumn[\"type\"]];\n }\n }\n\n if (provider === \"mysql\") {\n switch (dbType) {\n case \"bool\":\n case \"boolean\":\n return [\"bool\"];\n case \"integer\":\n case \"int\":\n return [\"integer\"];\n case \"decimal\":\n case \"numeric\":\n case \"float\":\n case \"double\":\n return [\"decimal\"];\n case \"datetime\":\n return [\"timestamp\"];\n case \"varchar\": {\n const len = additional.length;\n if (len != null) {\n return [`varchar(${len})`];\n }\n return [\"string\"];\n }\n case \"text\":\n return [\"string\"];\n case \"longblob\":\n case \"blob\":\n case \"mediumblob\":\n case \"tinyblob\":\n return [\"binary\"];\n default:\n return [dbType as AnyColumn[\"type\"]];\n }\n }\n\n if (provider === \"mssql\") {\n switch (dbType) {\n case \"int\":\n return [\"integer\"];\n case \"decimal\":\n case \"float\":\n case \"real\":\n case \"numeric\":\n return [\"decimal\"];\n case \"bit\":\n return [\"bool\"];\n case \"datetime\":\n case \"datetime2\":\n return [\"timestamp\"];\n case \"nvarchar\":\n case \"varchar\": {\n const len = additional.length;\n if (len != null) {\n return [`varchar(${len})`];\n }\n return [\"string\", \"json\"];\n }\n case \"ntext\":\n case \"text\":\n case \"varchar(max)\":\n case \"nvarchar(max)\":\n return [\"string\", \"json\"];\n case \"binary\":\n case \"varbinary\":\n return [\"binary\"];\n default:\n return [dbType as AnyColumn[\"type\"]];\n }\n }\n\n throw new Error(`unhandled database provider: ${provider}`);\n}\n\n/**\n * Database type literals that can be returned by schemaToDBType\n */\nexport type DBTypeLiteral =\n // PostgreSQL/CockroachDB types\n | \"bigserial\"\n | \"serial\"\n | \"boolean\"\n | \"bool\"\n | \"json\"\n | \"text\"\n | \"bytea\"\n | \"timestamp\"\n | \"timestamptz\"\n | \"bigint\"\n | \"integer\"\n | \"decimal\"\n | \"date\"\n // MySQL types\n | \"longblob\"\n | \"datetime\"\n // SQLite types\n | \"blob\"\n | \"real\"\n // MSSQL types\n | \"bit\"\n | \"int\"\n | \"varbinary(max)\"\n | \"varchar(max)\"\n // varchar with length parameter\n | `varchar(${number})`;\n\nexport function schemaToDBType(\n column: AnyColumn | Pick<AnyColumn, \"type\">,\n provider: SQLProvider,\n): DBTypeLiteral {\n const { type } = column;\n\n // Handle internal ID columns with auto-increment\n if (\"role\" in column && column.role === \"internal-id\") {\n if (provider === \"postgresql\" || provider === \"cockroachdb\") {\n return \"bigserial\";\n }\n if (provider === \"mysql\") {\n return \"bigint\";\n }\n if (provider === \"sqlite\") {\n return \"integer\"; // SQLite uses INTEGER for auto-increment\n }\n if (provider === \"mssql\") {\n return \"bigint\";\n }\n }\n\n if (provider === \"sqlite\") {\n switch (type) {\n case \"integer\":\n case \"timestamp\":\n case \"date\":\n case \"bool\":\n return \"integer\";\n case \"binary\":\n case \"bigint\":\n return \"blob\";\n case \"json\":\n case \"string\":\n return \"text\";\n case \"decimal\":\n return \"real\";\n default:\n // sqlite doesn't support varchar\n if (type.startsWith(\"varchar\")) return \"text\";\n }\n }\n\n if (provider === \"mssql\") {\n switch (type) {\n case \"bool\":\n return \"bit\";\n case \"timestamp\":\n return \"datetime\";\n case \"integer\":\n return \"int\";\n case \"string\":\n return \"varchar(max)\";\n case \"binary\":\n return \"varbinary(max)\";\n // only 2025 preview supports JSON natively\n case \"json\":\n return \"varchar(max)\";\n default:\n if (type.startsWith(\"varchar\")) return type as `varchar(${number})`;\n return type;\n }\n }\n\n if (provider === \"postgresql\" || provider === \"cockroachdb\") {\n switch (type) {\n case \"bool\":\n return \"boolean\";\n case \"json\":\n return \"json\";\n case \"string\":\n return \"text\";\n case \"binary\":\n return \"bytea\";\n default:\n if (type.startsWith(\"varchar\")) return type as `varchar(${number})`;\n return type;\n }\n }\n\n if (provider === \"mysql\") {\n switch (type) {\n case \"bool\":\n return \"boolean\";\n case \"string\":\n return \"text\";\n case \"binary\":\n return \"longblob\";\n default:\n if (type.startsWith(\"varchar\")) return type as `varchar(${number})`;\n return type;\n }\n }\n\n throw new Error(`cannot handle ${provider} ${type}`);\n}\n\nconst supportJson: SQLProvider[] = [\"postgresql\", \"cockroachdb\", \"mysql\"];\n\n/**\n * Parse from driver value\n */\nexport function deserialize(value: unknown, col: AnyColumn, provider: SQLProvider) {\n if (value === null) return null;\n\n if (!supportJson.includes(provider) && col.type === \"json\" && typeof value === \"string\") {\n return JSON.parse(value);\n }\n\n if (\n provider === \"sqlite\" &&\n (col.type === \"timestamp\" || col.type === \"date\") &&\n (typeof value === \"number\" || typeof value === \"string\")\n ) {\n return new Date(value);\n }\n\n if (col.type === \"bool\" && typeof value === \"number\") return value === 1;\n\n if (col.type === \"bigint\" && value instanceof Buffer) {\n return value.readBigInt64BE(0);\n }\n\n if (col.type === \"bigint\" && typeof value === \"string\") {\n return BigInt(value);\n }\n\n if (col.type === \"binary\" && value instanceof Buffer) {\n return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n }\n\n return value;\n}\n\n/**\n * Encode to driver value\n */\nexport function serialize(value: unknown, col: AnyColumn, provider: SQLProvider) {\n if (value === null) {\n return null;\n }\n\n // Handle FragnoReference objects (for reference columns)\n if (value instanceof FragnoReference) {\n return value.internalId;\n }\n\n // Handle FragnoId objects\n if (value instanceof FragnoId) {\n // For external ID columns, use the external ID\n if (col.role === \"external-id\") {\n return value.externalId;\n }\n // For internal ID columns, use the internal ID (must be present)\n if (col.role === \"internal-id\") {\n if (!value.internalId) {\n throw new Error(`FragnoId must have internalId for internal-id column ${col.name}`);\n }\n return value.internalId;\n }\n // For reference columns, prefer internal ID if available\n if (col.role === \"reference\") {\n return value.databaseId;\n }\n // Default to external ID for other columns\n return value.externalId;\n }\n\n if (!supportJson.includes(provider) && col.type === \"json\") {\n return JSON.stringify(value);\n }\n\n if (provider === \"sqlite\" && value instanceof Date) {\n return value.getTime();\n }\n\n if (provider === \"sqlite\" && typeof value === \"boolean\") return value ? 1 : 0;\n\n if (provider === \"sqlite\" && typeof value === \"bigint\") {\n const buf = Buffer.alloc(8);\n buf.writeBigInt64BE(value);\n return buf;\n }\n\n // most drivers accept Buffer\n if (col.type === \"binary\" && value instanceof Uint8Array) {\n return Buffer.from(value);\n }\n\n return value;\n}\n"],"mappings":"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"}
1
+ {"version":3,"file":"serialize.js","names":["supportJson: SQLProvider[]"],"sources":["../../src/schema/serialize.ts"],"sourcesContent":["import type { SQLProvider } from \"../shared/providers\";\nimport type { AnyColumn } from \"./create\";\nimport { FragnoId, FragnoReference } from \"./create\";\n\nexport interface AdditionalColumnMetadata {\n length?: number;\n precision?: number;\n scale?: number;\n}\n\n/**\n * Get the possible column types that the raw DB type can map to.\n */\nexport function dbToSchemaType(\n dbType: string,\n provider: SQLProvider,\n additional: AdditionalColumnMetadata,\n): (AnyColumn[\"type\"] | \"varchar(n)\")[] {\n dbType = dbType.toLowerCase();\n if (provider === \"sqlite\") {\n switch (dbType) {\n case \"integer\":\n return [\"bool\", \"date\", \"timestamp\", \"bigint\", \"integer\"];\n case \"text\":\n return [\"json\", \"string\", \"bigint\", \"varchar(n)\"];\n case \"real\":\n case \"numeric\":\n return [\"decimal\"];\n case \"blob\":\n return [\"bigint\", \"binary\"];\n default:\n return [dbType as AnyColumn[\"type\"]];\n }\n }\n\n if (provider === \"postgresql\" || provider === \"cockroachdb\") {\n switch (dbType) {\n case \"decimal\":\n case \"real\":\n case \"numeric\":\n case \"double precision\":\n return [\"decimal\"];\n case \"timestamp\":\n case \"timestamptz\":\n return [\"timestamp\"];\n case \"varchar\": {\n const len = additional.length;\n if (len != null) {\n return [`varchar(${len})`];\n }\n return [\"string\"];\n }\n case \"text\":\n return [\"string\"];\n case \"boolean\":\n case \"bool\":\n return [\"bool\"];\n case \"bytea\":\n return [\"binary\"];\n default:\n return [dbType as AnyColumn[\"type\"]];\n }\n }\n\n if (provider === \"mysql\") {\n switch (dbType) {\n case \"bool\":\n case \"boolean\":\n return [\"bool\"];\n case \"integer\":\n case \"int\":\n return [\"integer\"];\n case \"decimal\":\n case \"numeric\":\n case \"float\":\n case \"double\":\n return [\"decimal\"];\n case \"datetime\":\n return [\"timestamp\"];\n case \"varchar\": {\n const len = additional.length;\n if (len != null) {\n return [`varchar(${len})`];\n }\n return [\"string\"];\n }\n case \"text\":\n return [\"string\"];\n case \"longblob\":\n case \"blob\":\n case \"mediumblob\":\n case \"tinyblob\":\n return [\"binary\"];\n default:\n return [dbType as AnyColumn[\"type\"]];\n }\n }\n\n if (provider === \"mssql\") {\n switch (dbType) {\n case \"int\":\n return [\"integer\"];\n case \"decimal\":\n case \"float\":\n case \"real\":\n case \"numeric\":\n return [\"decimal\"];\n case \"bit\":\n return [\"bool\"];\n case \"datetime\":\n case \"datetime2\":\n return [\"timestamp\"];\n case \"nvarchar\":\n case \"varchar\": {\n const len = additional.length;\n if (len != null) {\n return [`varchar(${len})`];\n }\n return [\"string\", \"json\"];\n }\n case \"ntext\":\n case \"text\":\n case \"varchar(max)\":\n case \"nvarchar(max)\":\n return [\"string\", \"json\"];\n case \"binary\":\n case \"varbinary\":\n return [\"binary\"];\n default:\n return [dbType as AnyColumn[\"type\"]];\n }\n }\n\n throw new Error(`unhandled database provider: ${provider}`);\n}\n\n/**\n * Database type literals that can be returned by schemaToDBType\n */\nexport type DBTypeLiteral =\n // PostgreSQL/CockroachDB types\n | \"bigserial\"\n | \"serial\"\n | \"boolean\"\n | \"bool\"\n | \"json\"\n | \"text\"\n | \"bytea\"\n | \"timestamp\"\n | \"timestamptz\"\n | \"bigint\"\n | \"integer\"\n | \"decimal\"\n | \"date\"\n // MySQL types\n | \"longblob\"\n | \"datetime\"\n // SQLite types\n | \"blob\"\n | \"real\"\n // MSSQL types\n | \"bit\"\n | \"int\"\n | \"varbinary(max)\"\n | \"varchar(max)\"\n // varchar with length parameter\n | `varchar(${number})`;\n\nexport function schemaToDBType(\n column: AnyColumn | Pick<AnyColumn, \"type\">,\n provider: SQLProvider,\n): DBTypeLiteral {\n const { type } = column;\n\n // Handle internal ID columns with auto-increment\n if (\"role\" in column && column.role === \"internal-id\") {\n if (provider === \"postgresql\" || provider === \"cockroachdb\") {\n return \"bigserial\";\n }\n if (provider === \"mysql\") {\n return \"bigint\";\n }\n if (provider === \"sqlite\") {\n return \"integer\"; // SQLite uses INTEGER for auto-increment\n }\n if (provider === \"mssql\") {\n return \"bigint\";\n }\n }\n\n if (\"role\" in column && column.role === \"reference\") {\n if (provider === \"sqlite\") {\n return \"integer\";\n }\n // Other providers use bigint for references\n }\n\n if (provider === \"sqlite\") {\n switch (type) {\n case \"integer\":\n case \"timestamp\":\n case \"date\":\n case \"bool\":\n return \"integer\";\n case \"binary\":\n case \"bigint\":\n return \"blob\";\n case \"json\":\n case \"string\":\n return \"text\";\n case \"decimal\":\n return \"real\";\n default:\n // sqlite doesn't support varchar\n if (type.startsWith(\"varchar\")) {\n return \"text\";\n }\n }\n }\n\n if (provider === \"mssql\") {\n switch (type) {\n case \"bool\":\n return \"bit\";\n case \"timestamp\":\n return \"datetime\";\n case \"integer\":\n return \"int\";\n case \"string\":\n return \"varchar(max)\";\n case \"binary\":\n return \"varbinary(max)\";\n // only 2025 preview supports JSON natively\n case \"json\":\n return \"varchar(max)\";\n default:\n if (type.startsWith(\"varchar\")) {\n return type as `varchar(${number})`;\n }\n return type;\n }\n }\n\n if (provider === \"postgresql\" || provider === \"cockroachdb\") {\n switch (type) {\n case \"bool\":\n return \"boolean\";\n case \"json\":\n return \"json\";\n case \"string\":\n return \"text\";\n case \"binary\":\n return \"bytea\";\n default:\n if (type.startsWith(\"varchar\")) {\n return type as `varchar(${number})`;\n }\n return type;\n }\n }\n\n if (provider === \"mysql\") {\n switch (type) {\n case \"bool\":\n return \"boolean\";\n case \"string\":\n return \"text\";\n case \"binary\":\n return \"longblob\";\n default:\n if (type.startsWith(\"varchar\")) {\n return type as `varchar(${number})`;\n }\n return type;\n }\n }\n\n throw new Error(`cannot handle ${provider} ${type}`);\n}\n\nconst supportJson: SQLProvider[] = [\"postgresql\", \"cockroachdb\", \"mysql\"];\n\n/**\n * Parse from driver value\n */\nexport function deserialize(value: unknown, col: AnyColumn, provider: SQLProvider) {\n if (value === null) {\n return null;\n }\n\n if (!supportJson.includes(provider) && col.type === \"json\" && typeof value === \"string\") {\n return JSON.parse(value);\n }\n\n if (\n provider === \"sqlite\" &&\n (col.type === \"timestamp\" || col.type === \"date\") &&\n (typeof value === \"number\" || typeof value === \"string\")\n ) {\n return new Date(value);\n }\n\n if (col.type === \"bool\" && typeof value === \"number\") {\n return value === 1;\n }\n\n if (col.type === \"bigint\" && value instanceof Buffer) {\n return value.readBigInt64BE(0);\n }\n\n if (col.type === \"bigint\" && typeof value === \"string\") {\n return BigInt(value);\n }\n\n if (col.type === \"binary\" && value instanceof Buffer) {\n return new Uint8Array(value.buffer, value.byteOffset, value.byteLength);\n }\n\n return value;\n}\n\n/**\n * Encode to driver value\n */\nexport function serialize(value: unknown, col: AnyColumn, provider: SQLProvider) {\n if (value === null) {\n return null;\n }\n\n // Handle FragnoReference objects (for reference columns)\n if (value instanceof FragnoReference) {\n return value.internalId;\n }\n\n // Handle FragnoId objects\n if (value instanceof FragnoId) {\n // For external ID columns, use the external ID\n if (col.role === \"external-id\") {\n return value.externalId;\n }\n // For internal ID columns, use the internal ID (must be present)\n if (col.role === \"internal-id\") {\n if (!value.internalId) {\n throw new Error(`FragnoId must have internalId for internal-id column ${col.name}`);\n }\n return value.internalId;\n }\n // For reference columns, prefer internal ID if available\n if (col.role === \"reference\") {\n return value.databaseId;\n }\n // Default to external ID for other columns\n return value.externalId;\n }\n\n if (!supportJson.includes(provider) && col.type === \"json\") {\n return JSON.stringify(value);\n }\n\n if (provider === \"sqlite\" && value instanceof Date) {\n return value.getTime();\n }\n\n if (provider === \"sqlite\" && typeof value === \"boolean\") {\n return value ? 1 : 0;\n }\n\n if (provider === \"sqlite\" && typeof value === \"bigint\") {\n const buf = Buffer.alloc(8);\n buf.writeBigInt64BE(value);\n return buf;\n }\n\n // most drivers accept Buffer\n if (col.type === \"binary\" && value instanceof Uint8Array) {\n return Buffer.from(value);\n }\n\n return value;\n}\n"],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { column, idColumn, schema } from "../schema/create.js";
2
+
3
+ //#region src/shared/settings-schema.ts
4
+ const SETTINGS_TABLE_NAME = "fragno_db_settings";
5
+ const SETTINGS_NAMESPACE = "fragno-db-settings";
6
+ const settingsSchema = schema((s) => {
7
+ return s.addTable(SETTINGS_TABLE_NAME, (t) => {
8
+ return t.addColumn("id", idColumn()).addColumn("key", column("string")).addColumn("value", column("string")).createIndex("unique_key", ["key"], { unique: true });
9
+ });
10
+ });
11
+ function createSettingsManager(queryEngine, namespace) {
12
+ return {
13
+ async get(key) {
14
+ const [[result]] = await queryEngine.createUnitOfWork().find(SETTINGS_TABLE_NAME, (b) => b.whereIndex("unique_key", (eb) => eb("key", "=", `${namespace}.${key}`))).executeRetrieve();
15
+ return result;
16
+ },
17
+ async set(key, value) {
18
+ const uow = queryEngine.createUnitOfWork("createSettingsManager#set").find(SETTINGS_TABLE_NAME, (b) => b.whereIndex("unique_key", (eb) => eb("key", "=", `${namespace}.${key}`)));
19
+ const [[existing]] = await uow.executeRetrieve();
20
+ if (existing) uow.update(SETTINGS_TABLE_NAME, existing.id, (b) => b.set({ value }).check());
21
+ else uow.create(SETTINGS_TABLE_NAME, {
22
+ key: `${namespace}.${key}`,
23
+ value
24
+ });
25
+ const { success } = await uow.executeMutations();
26
+ if (!success) throw new Error("Failed to set schema version");
27
+ },
28
+ async delete(id) {
29
+ await queryEngine.delete(SETTINGS_TABLE_NAME, id);
30
+ }
31
+ };
32
+ }
33
+
34
+ //#endregion
35
+ export { SETTINGS_NAMESPACE, SETTINGS_TABLE_NAME, createSettingsManager, settingsSchema };
36
+ //# sourceMappingURL=settings-schema.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"settings-schema.js","names":[],"sources":["../../src/shared/settings-schema.ts"],"sourcesContent":["import type { AbstractQuery } from \"../query/query\";\nimport { schema, idColumn, column, type FragnoId } from \"../schema/create\";\n\nexport const SETTINGS_TABLE_NAME = \"fragno_db_settings\" as const;\nexport const SETTINGS_NAMESPACE = \"fragno-db-settings\" as const;\n\nexport const settingsSchema = schema((s) => {\n return s.addTable(SETTINGS_TABLE_NAME, (t) => {\n return t\n .addColumn(\"id\", idColumn())\n .addColumn(\"key\", column(\"string\"))\n .addColumn(\"value\", column(\"string\"))\n .createIndex(\"unique_key\", [\"key\"], { unique: true });\n });\n});\n\nexport function createSettingsManager(\n // oxlint-disable-next-line no-explicit-any\n queryEngine: AbstractQuery<typeof settingsSchema, any>,\n namespace: string,\n) {\n return {\n async get(key: string): Promise<{ id: FragnoId; key: string; value: string } | undefined> {\n const uow = queryEngine\n .createUnitOfWork()\n .find(SETTINGS_TABLE_NAME, (b) =>\n b.whereIndex(\"unique_key\", (eb) => eb(\"key\", \"=\", `${namespace}.${key}`)),\n );\n const [[result]] = await uow.executeRetrieve();\n return result; // Safe: result can be undefined if key doesn't exist\n },\n\n async set(key: string, value: string) {\n const uow = queryEngine\n .createUnitOfWork(\"createSettingsManager#set\")\n .find(SETTINGS_TABLE_NAME, (b) =>\n b.whereIndex(\"unique_key\", (eb) => eb(\"key\", \"=\", `${namespace}.${key}`)),\n );\n const [[existing]] = await uow.executeRetrieve();\n\n if (existing) {\n uow.update(SETTINGS_TABLE_NAME, existing.id, (b) => b.set({ value }).check());\n } else {\n uow.create(SETTINGS_TABLE_NAME, {\n key: `${namespace}.${key}`,\n value,\n });\n }\n\n const { success } = await uow.executeMutations();\n\n if (!success) {\n throw new Error(\"Failed to set schema version\");\n }\n },\n\n async delete(id: FragnoId) {\n await queryEngine.delete(SETTINGS_TABLE_NAME, id);\n },\n };\n}\n"],"mappings":";;;AAGA,MAAa,sBAAsB;AACnC,MAAa,qBAAqB;AAElC,MAAa,iBAAiB,QAAQ,MAAM;AAC1C,QAAO,EAAE,SAAS,sBAAsB,MAAM;AAC5C,SAAO,EACJ,UAAU,MAAM,UAAU,CAAC,CAC3B,UAAU,OAAO,OAAO,SAAS,CAAC,CAClC,UAAU,SAAS,OAAO,SAAS,CAAC,CACpC,YAAY,cAAc,CAAC,MAAM,EAAE,EAAE,QAAQ,MAAM,CAAC;GACvD;EACF;AAEF,SAAgB,sBAEd,aACA,WACA;AACA,QAAO;EACL,MAAM,IAAI,KAAgF;GAMxF,MAAM,CAAC,CAAC,WAAW,MALP,YACT,kBAAkB,CAClB,KAAK,sBAAsB,MAC1B,EAAE,WAAW,eAAe,OAAO,GAAG,OAAO,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC,CAC1E,CAC0B,iBAAiB;AAC9C,UAAO;;EAGT,MAAM,IAAI,KAAa,OAAe;GACpC,MAAM,MAAM,YACT,iBAAiB,4BAA4B,CAC7C,KAAK,sBAAsB,MAC1B,EAAE,WAAW,eAAe,OAAO,GAAG,OAAO,KAAK,GAAG,UAAU,GAAG,MAAM,CAAC,CAC1E;GACH,MAAM,CAAC,CAAC,aAAa,MAAM,IAAI,iBAAiB;AAEhD,OAAI,SACF,KAAI,OAAO,qBAAqB,SAAS,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC;OAE7E,KAAI,OAAO,qBAAqB;IAC9B,KAAK,GAAG,UAAU,GAAG;IACrB;IACD,CAAC;GAGJ,MAAM,EAAE,YAAY,MAAM,IAAI,kBAAkB;AAEhD,OAAI,CAAC,QACH,OAAM,IAAI,MAAM,+BAA+B;;EAInD,MAAM,OAAO,IAAc;AACzB,SAAM,YAAY,OAAO,qBAAqB,GAAG;;EAEpD"}
@@ -1 +1 @@
1
- {"version":3,"file":"import-generator.js","names":["v: string[]","names"],"sources":["../../src/util/import-generator.ts"],"sourcesContent":["export function importGenerator() {\n const names = new Set<string>();\n // specifier -> import name\n const map = new Map<string, string[]>();\n\n return {\n addImport(name: string, specifier: string) {\n if (names.has(name)) {\n return;\n }\n\n names.add(name);\n const list = map.get(specifier) ?? [];\n list.push(name);\n map.set(specifier, list);\n },\n format(): string {\n const v: string[] = [];\n for (const [specifier, names] of map) {\n if (names.length === 0) continue;\n\n v.push(`import { ${names.join(\", \")} } from \"${specifier}\"`);\n }\n\n return v.join(\"\\n\");\n },\n };\n}\n"],"mappings":";AAAA,SAAgB,kBAAkB;CAChC,MAAM,wBAAQ,IAAI,KAAa;CAE/B,MAAM,sBAAM,IAAI,KAAuB;AAEvC,QAAO;EACL,UAAU,MAAc,WAAmB;AACzC,OAAI,MAAM,IAAI,KAAK,CACjB;AAGF,SAAM,IAAI,KAAK;GACf,MAAM,OAAO,IAAI,IAAI,UAAU,IAAI,EAAE;AACrC,QAAK,KAAK,KAAK;AACf,OAAI,IAAI,WAAW,KAAK;;EAE1B,SAAiB;GACf,MAAMA,IAAc,EAAE;AACtB,QAAK,MAAM,CAAC,WAAWC,YAAU,KAAK;AACpC,QAAIA,QAAM,WAAW,EAAG;AAExB,MAAE,KAAK,YAAYA,QAAM,KAAK,KAAK,CAAC,WAAW,UAAU,GAAG;;AAG9D,UAAO,EAAE,KAAK,KAAK;;EAEtB"}
1
+ {"version":3,"file":"import-generator.js","names":["v: string[]","names"],"sources":["../../src/util/import-generator.ts"],"sourcesContent":["export function importGenerator() {\n const names = new Set<string>();\n // specifier -> import name\n const map = new Map<string, string[]>();\n\n return {\n addImport(name: string, specifier: string) {\n if (names.has(name)) {\n return;\n }\n\n names.add(name);\n const list = map.get(specifier) ?? [];\n list.push(name);\n map.set(specifier, list);\n },\n format(): string {\n const v: string[] = [];\n for (const [specifier, names] of map) {\n if (names.length === 0) {\n continue;\n }\n\n v.push(`import { ${names.join(\", \")} } from \"${specifier}\"`);\n }\n\n return v.join(\"\\n\");\n },\n };\n}\n"],"mappings":";AAAA,SAAgB,kBAAkB;CAChC,MAAM,wBAAQ,IAAI,KAAa;CAE/B,MAAM,sBAAM,IAAI,KAAuB;AAEvC,QAAO;EACL,UAAU,MAAc,WAAmB;AACzC,OAAI,MAAM,IAAI,KAAK,CACjB;AAGF,SAAM,IAAI,KAAK;GACf,MAAM,OAAO,IAAI,IAAI,UAAU,IAAI,EAAE;AACrC,QAAK,KAAK,KAAK;AACf,OAAI,IAAI,WAAW,KAAK;;EAE1B,SAAiB;GACf,MAAMA,IAAc,EAAE;AACtB,QAAK,MAAM,CAAC,WAAWC,YAAU,KAAK;AACpC,QAAIA,QAAM,WAAW,EACnB;AAGF,MAAE,KAAK,YAAYA,QAAM,KAAK,KAAK,CAAC,WAAW,UAAU,GAAG;;AAG9D,UAAO,EAAE,KAAK,KAAK;;EAEtB"}
@@ -1 +1 @@
1
- {"version":3,"file":"parse.js","names":[],"sources":["../../src/util/parse.ts"],"sourcesContent":["const RegexVarchar = /^varchar\\((\\d+)\\)$/;\n\nexport function parseVarchar(template: string): number {\n const match = RegexVarchar.exec(template);\n if (!match) throw new Error(\"Failed to match varchar(n)\");\n return Number(match[1]);\n}\n\nexport function ident(s: string, identation = 2): string {\n const tab = \" \".repeat(identation);\n\n return s\n .split(\"\\n\")\n .map((v) => tab + v)\n .join(\"\\n\");\n}\n"],"mappings":";AAAA,MAAM,eAAe;AAErB,SAAgB,aAAa,UAA0B;CACrD,MAAM,QAAQ,aAAa,KAAK,SAAS;AACzC,KAAI,CAAC,MAAO,OAAM,IAAI,MAAM,6BAA6B;AACzD,QAAO,OAAO,MAAM,GAAG;;AAGzB,SAAgB,MAAM,GAAW,aAAa,GAAW;CACvD,MAAM,MAAM,IAAI,OAAO,WAAW;AAElC,QAAO,EACJ,MAAM,KAAK,CACX,KAAK,MAAM,MAAM,EAAE,CACnB,KAAK,KAAK"}
1
+ {"version":3,"file":"parse.js","names":[],"sources":["../../src/util/parse.ts"],"sourcesContent":["const RegexVarchar = /^varchar\\((\\d+)\\)$/;\n\nexport function parseVarchar(template: string): number {\n const match = RegexVarchar.exec(template);\n if (!match) {\n throw new Error(\"Failed to match varchar(n)\");\n }\n return Number(match[1]);\n}\n\nexport function ident(s: string, identation = 2): string {\n const tab = \" \".repeat(identation);\n\n return s\n .split(\"\\n\")\n .map((v) => tab + v)\n .join(\"\\n\");\n}\n"],"mappings":";AAAA,MAAM,eAAe;AAErB,SAAgB,aAAa,UAA0B;CACrD,MAAM,QAAQ,aAAa,KAAK,SAAS;AACzC,KAAI,CAAC,MACH,OAAM,IAAI,MAAM,6BAA6B;AAE/C,QAAO,OAAO,MAAM,GAAG;;AAGzB,SAAgB,MAAM,GAAW,aAAa,GAAW;CACvD,MAAM,MAAM,IAAI,OAAO,WAAW;AAElC,QAAO,EACJ,MAAM,KAAK,CACX,KAAK,MAAM,MAAM,EAAE,CACnB,KAAK,KAAK"}
package/package.json CHANGED
@@ -1,83 +1,73 @@
1
1
  {
2
2
  "name": "@fragno-dev/db",
3
- "version": "0.1.1",
3
+ "version": "0.1.3",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": {
7
- "bun": "./src/mod.ts",
8
7
  "development": "./src/mod.ts",
9
8
  "types": "./dist/mod.d.ts",
10
9
  "default": "./dist/mod.js"
11
10
  },
12
11
  "./id": {
13
- "bun": "./src/id.ts",
14
12
  "development": "./src/id.ts",
15
13
  "types": "./dist/id.d.ts",
16
14
  "default": "./dist/id.js"
17
15
  },
18
16
  "./schema": {
19
- "bun": "./src/schema/create.ts",
20
17
  "development": "./src/schema/create.ts",
21
18
  "types": "./dist/schema/create.d.ts",
22
19
  "default": "./dist/schema/create.js"
23
20
  },
24
21
  "./query": {
25
- "bun": "./src/query/query.ts",
26
22
  "development": "./src/query/query.ts",
27
23
  "types": "./dist/query/query.d.ts",
28
24
  "default": "./dist/query/query.js"
29
25
  },
30
26
  "./adapters/kysely": {
31
- "bun": "./src/adapters/kysely/kysely-adapter.ts",
32
27
  "development": "./src/adapters/kysely/kysely-adapter.ts",
33
28
  "types": "./dist/adapters/kysely/kysely-adapter.d.ts",
34
29
  "default": "./dist/adapters/kysely/kysely-adapter.js"
35
30
  },
36
31
  "./adapters/drizzle": {
37
- "bun": "./src/adapters/drizzle/drizzle-adapter.ts",
38
32
  "development": "./src/adapters/drizzle/drizzle-adapter.ts",
39
33
  "types": "./dist/adapters/drizzle/drizzle-adapter.d.ts",
40
34
  "default": "./dist/adapters/drizzle/drizzle-adapter.js"
41
35
  },
42
36
  "./unit-of-work": {
43
- "bun": "./src/query/unit-of-work.ts",
44
37
  "development": "./src/query/unit-of-work.ts",
45
38
  "types": "./dist/query/unit-of-work.d.ts",
46
39
  "default": "./dist/query/unit-of-work.js"
47
40
  },
48
41
  "./cursor": {
49
- "bun": "./src/query/cursor.ts",
50
42
  "development": "./src/query/cursor.ts",
51
43
  "types": "./dist/query/cursor.d.ts",
52
44
  "default": "./dist/query/cursor.js"
53
45
  },
54
46
  "./fragment": {
55
- "bun": "./src/fragment.ts",
56
47
  "development": "./src/fragment.ts",
57
48
  "types": "./dist/fragment.d.ts",
58
49
  "default": "./dist/fragment.js"
50
+ },
51
+ "./generation-engine": {
52
+ "development": "./src/migration-engine/generation-engine.ts",
53
+ "types": "./dist/migration-engine/generation-engine.d.ts",
54
+ "default": "./dist/migration-engine/generation-engine.js"
59
55
  }
60
56
  },
61
- "scripts": {
62
- "build": "tsdown",
63
- "build:watch": "tsdown --watch",
64
- "types:check": "tsc --noEmit",
65
- "test": "vitest run",
66
- "test:watch": "vitest --watch"
67
- },
68
57
  "devDependencies": {
69
58
  "@electric-sql/pglite": "^0.3.10",
70
- "@fragno-dev/core": "0.1.1",
71
- "@fragno-private/typescript-config": "0.0.1",
72
- "@fragno-private/vitest-config": "0.0.0",
73
- "@types/bun": "^1.2.23",
59
+ "@types/better-sqlite3": "^7.6.13",
74
60
  "@types/node": "^22",
75
61
  "@vitest/coverage-istanbul": "^3.2.4",
62
+ "better-sqlite3": "^12.4.1",
76
63
  "drizzle-kit": "^0.31.5",
77
64
  "drizzle-orm": "^0.44.6",
78
65
  "kysely-pglite": "^0.6.1",
79
66
  "vitest": "^3.2.4",
80
- "zod": "^4.1.12"
67
+ "zod": "^4.1.12",
68
+ "@fragno-dev/core": "0.1.2",
69
+ "@fragno-private/typescript-config": "0.0.1",
70
+ "@fragno-private/vitest-config": "0.0.0"
81
71
  },
82
72
  "repository": {
83
73
  "type": "git",
@@ -89,5 +79,12 @@
89
79
  "dependencies": {
90
80
  "@paralleldrive/cuid2": "^2.2.2",
91
81
  "kysely": "^0.28.7"
82
+ },
83
+ "scripts": {
84
+ "build": "tsdown",
85
+ "build:watch": "tsdown --watch",
86
+ "types:check": "tsc --noEmit",
87
+ "test": "vitest run",
88
+ "test:watch": "vitest --watch"
92
89
  }
93
- }
90
+ }
@@ -15,8 +15,15 @@ export interface DatabaseAdapter<TUOWConfig = void> {
15
15
  ) => AbstractQuery<T, TUOWConfig>;
16
16
 
17
17
  createMigrationEngine?: <const T extends AnySchema>(schema: T, namespace: string) => Migrator;
18
- createSchemaGenerator?: <const T extends AnySchema>(
19
- schema: T,
20
- namespace: string,
18
+
19
+ /**
20
+ * Generate a combined schema file from one or more fragments.
21
+ * If not implemented, schema generation is not supported for this adapter.
22
+ */
23
+ createSchemaGenerator?: (
24
+ fragments: { schema: AnySchema; namespace: string }[],
25
+ options?: { path?: string },
21
26
  ) => SchemaGenerator;
27
+
28
+ isConnectionHealthy: () => Promise<boolean>;
22
29
  }
@@ -80,6 +80,7 @@ describe("DrizzleAdapter PGLite", () => {
80
80
  "drizzle-adapter-pglite",
81
81
  testSchema,
82
82
  "postgresql",
83
+ "namespace",
83
84
  );
84
85
 
85
86
  // Create Drizzle instance with PGLite (in-memory Postgres)
@@ -103,13 +104,16 @@ describe("DrizzleAdapter PGLite", () => {
103
104
  provider: "postgresql",
104
105
  });
105
106
 
107
+ expect(await adapter.isConnectionHealthy()).toBe(true);
108
+
106
109
  return async () => {
107
110
  await cleanup();
108
111
  };
109
112
  }, 12000);
110
113
 
111
114
  it("should execute Unit of Work with version checking", async () => {
112
- const queryEngine = adapter.createQueryEngine(testSchema, "test");
115
+ // Pass namespace to ensure mapper translates logical table names to physical (prefixed) names
116
+ const queryEngine = adapter.createQueryEngine(testSchema, "namespace");
113
117
 
114
118
  // Create initial user using UOW
115
119
  const createUow = queryEngine.createUnitOfWork("create-user").create("users", {
@@ -194,7 +198,7 @@ describe("DrizzleAdapter PGLite", () => {
194
198
  });
195
199
 
196
200
  it("should support count operations", async () => {
197
- const queryEngine = adapter.createQueryEngine(testSchema, "test");
201
+ const queryEngine = adapter.createQueryEngine(testSchema, "namespace");
198
202
 
199
203
  // Create some users
200
204
  await queryEngine
@@ -215,7 +219,7 @@ describe("DrizzleAdapter PGLite", () => {
215
219
  });
216
220
 
217
221
  it("should support cursor-based pagination", async () => {
218
- const queryEngine = adapter.createQueryEngine(testSchema, "test");
222
+ const queryEngine = adapter.createQueryEngine(testSchema, "namespace");
219
223
 
220
224
  const createUow = queryEngine
221
225
  .createUnitOfWork("create-users")
@@ -262,7 +266,7 @@ describe("DrizzleAdapter PGLite", () => {
262
266
  });
263
267
 
264
268
  it("should support joins", async () => {
265
- const queryEngine = adapter.createQueryEngine(testSchema, "test");
269
+ const queryEngine = adapter.createQueryEngine(testSchema, "namespace");
266
270
  const queries: DrizzleCompiledQuery[] = [];
267
271
 
268
272
  const createUow = queryEngine
@@ -298,7 +302,7 @@ describe("DrizzleAdapter PGLite", () => {
298
302
 
299
303
  const [query] = queries;
300
304
  expect(query.sql).toMatchInlineSnapshot(
301
- `"select "emails"."id", "emails"."user_id", "emails"."email", "emails"."is_primary", "emails"."_internalId", "emails"."_version", "emails_user"."data" as "user" from "emails" "emails" left join lateral (select json_build_array("emails_user"."name", "emails_user"."id", "emails_user"."age", "emails_user"."_internalId", "emails_user"."_version") as "data" from (select * from "users" "emails_user" where "emails_user"."_internalId" = "emails"."user_id" limit $1) "emails_user") "emails_user" on true"`,
305
+ `"select "emails_namespace"."id", "emails_namespace"."user_id", "emails_namespace"."email", "emails_namespace"."is_primary", "emails_namespace"."_internalId", "emails_namespace"."_version", "emails_namespace_user"."data" as "user" from "emails_namespace" "emails_namespace" left join lateral (select json_build_array("emails_namespace_user"."name", "emails_namespace_user"."id", "emails_namespace_user"."age", "emails_namespace_user"."_internalId", "emails_namespace_user"."_version") as "data" from (select * from "users_namespace" "emails_namespace_user" where "emails_namespace_user"."_internalId" = "emails_namespace"."user_id" limit $1) "emails_namespace_user") "emails_namespace_user" on true"`,
302
306
  );
303
307
 
304
308
  expect(email).toMatchObject({
@@ -323,7 +327,7 @@ describe("DrizzleAdapter PGLite", () => {
323
327
  });
324
328
 
325
329
  it("should support complex nested joins (comments -> post -> author)", async () => {
326
- const queryEngine = adapter.createQueryEngine(testSchema, "test");
330
+ const queryEngine = adapter.createQueryEngine(testSchema, "namespace");
327
331
  const queries: DrizzleCompiledQuery[] = [];
328
332
 
329
333
  // Create a user (author)
@@ -427,7 +431,7 @@ describe("DrizzleAdapter PGLite", () => {
427
431
 
428
432
  const [query] = queries;
429
433
  expect(query.sql).toMatchInlineSnapshot(
430
- `"select "comments"."id", "comments"."post_id", "comments"."user_id", "comments"."text", "comments"."_internalId", "comments"."_version", "comments_post"."data" as "post", "comments_commenter"."data" as "commenter" from "comments" "comments" left join lateral (select json_build_array("comments_post"."id", "comments_post"."title", "comments_post"."content", "comments_post"."_internalId", "comments_post"."_version", "comments_post_author"."data") as "data" from (select * from "posts" "comments_post" where "comments_post"."_internalId" = "comments"."post_id" order by "comments_post"."id" desc limit $1) "comments_post" left join lateral (select json_build_array("comments_post_author"."id", "comments_post_author"."name", "comments_post_author"."age", "comments_post_author"."_internalId", "comments_post_author"."_version") as "data" from (select * from "users" "comments_post_author" where "comments_post_author"."_internalId" = "comments_post"."user_id" order by "comments_post_author"."name" asc limit $2) "comments_post_author") "comments_post_author" on true) "comments_post" on true left join lateral (select json_build_array("comments_commenter"."id", "comments_commenter"."name", "comments_commenter"."_internalId", "comments_commenter"."_version") as "data" from (select * from "users" "comments_commenter" where "comments_commenter"."_internalId" = "comments"."user_id" limit $3) "comments_commenter") "comments_commenter" on true"`,
434
+ `"select "comments_namespace"."id", "comments_namespace"."post_id", "comments_namespace"."user_id", "comments_namespace"."text", "comments_namespace"."_internalId", "comments_namespace"."_version", "comments_namespace_post"."data" as "post", "comments_namespace_commenter"."data" as "commenter" from "comments_namespace" "comments_namespace" left join lateral (select json_build_array("comments_namespace_post"."id", "comments_namespace_post"."title", "comments_namespace_post"."content", "comments_namespace_post"."_internalId", "comments_namespace_post"."_version", "comments_namespace_post_author"."data") as "data" from (select * from "posts_namespace" "comments_namespace_post" where "comments_namespace_post"."_internalId" = "comments_namespace"."post_id" order by "comments_namespace_post"."id" desc limit $1) "comments_namespace_post" left join lateral (select json_build_array("comments_namespace_post_author"."id", "comments_namespace_post_author"."name", "comments_namespace_post_author"."age", "comments_namespace_post_author"."_internalId", "comments_namespace_post_author"."_version") as "data" from (select * from "users_namespace" "comments_namespace_post_author" where "comments_namespace_post_author"."_internalId" = "comments_namespace_post"."user_id" order by "comments_namespace_post_author"."name" asc limit $2) "comments_namespace_post_author") "comments_namespace_post_author" on true) "comments_namespace_post" on true left join lateral (select json_build_array("comments_namespace_commenter"."id", "comments_namespace_commenter"."name", "comments_namespace_commenter"."_internalId", "comments_namespace_commenter"."_version") as "data" from (select * from "users_namespace" "comments_namespace_commenter" where "comments_namespace_commenter"."_internalId" = "comments_namespace"."user_id" limit $3) "comments_namespace_commenter") "comments_namespace_commenter" on true"`,
431
435
  );
432
436
  });
433
437
  });