@fragno-dev/db 0.2.1 → 0.2.2

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 (60) hide show
  1. package/.turbo/turbo-build.log +34 -30
  2. package/CHANGELOG.md +32 -0
  3. package/dist/adapters/generic-sql/query/where-builder.js +1 -1
  4. package/dist/db-fragment-definition-builder.d.ts +27 -89
  5. package/dist/db-fragment-definition-builder.d.ts.map +1 -1
  6. package/dist/db-fragment-definition-builder.js +16 -56
  7. package/dist/db-fragment-definition-builder.js.map +1 -1
  8. package/dist/fragments/internal-fragment.d.ts +94 -8
  9. package/dist/fragments/internal-fragment.d.ts.map +1 -1
  10. package/dist/fragments/internal-fragment.js +56 -55
  11. package/dist/fragments/internal-fragment.js.map +1 -1
  12. package/dist/hooks/hooks.d.ts +5 -3
  13. package/dist/hooks/hooks.d.ts.map +1 -1
  14. package/dist/hooks/hooks.js +38 -37
  15. package/dist/hooks/hooks.js.map +1 -1
  16. package/dist/mod.d.ts +3 -3
  17. package/dist/mod.d.ts.map +1 -1
  18. package/dist/mod.js +4 -4
  19. package/dist/mod.js.map +1 -1
  20. package/dist/query/unit-of-work/execute-unit-of-work.d.ts +351 -100
  21. package/dist/query/unit-of-work/execute-unit-of-work.d.ts.map +1 -1
  22. package/dist/query/unit-of-work/execute-unit-of-work.js +431 -263
  23. package/dist/query/unit-of-work/execute-unit-of-work.js.map +1 -1
  24. package/dist/query/unit-of-work/unit-of-work.d.ts +17 -8
  25. package/dist/query/unit-of-work/unit-of-work.d.ts.map +1 -1
  26. package/dist/query/unit-of-work/unit-of-work.js +24 -8
  27. package/dist/query/unit-of-work/unit-of-work.js.map +1 -1
  28. package/dist/query/value-decoding.js +1 -1
  29. package/dist/schema/create.d.ts +3 -1
  30. package/dist/schema/create.d.ts.map +1 -1
  31. package/dist/schema/create.js +2 -1
  32. package/dist/schema/create.js.map +1 -1
  33. package/dist/schema/generate-id.d.ts +20 -0
  34. package/dist/schema/generate-id.d.ts.map +1 -0
  35. package/dist/schema/generate-id.js +28 -0
  36. package/dist/schema/generate-id.js.map +1 -0
  37. package/package.json +1 -1
  38. package/src/adapters/drizzle/drizzle-adapter-sqlite3.test.ts +41 -25
  39. package/src/adapters/generic-sql/test/generic-drizzle-adapter-sqlite3.test.ts +39 -25
  40. package/src/db-fragment-definition-builder.test.ts +58 -42
  41. package/src/db-fragment-definition-builder.ts +58 -248
  42. package/src/db-fragment-instantiator.test.ts +64 -88
  43. package/src/db-fragment-integration.test.ts +292 -142
  44. package/src/fragments/internal-fragment.test.ts +272 -266
  45. package/src/fragments/internal-fragment.ts +155 -121
  46. package/src/hooks/hooks.test.ts +248 -256
  47. package/src/hooks/hooks.ts +74 -63
  48. package/src/mod.ts +14 -4
  49. package/src/query/unit-of-work/execute-unit-of-work.test.ts +1494 -1464
  50. package/src/query/unit-of-work/execute-unit-of-work.ts +1685 -590
  51. package/src/query/unit-of-work/tx-builder.test.ts +1041 -0
  52. package/src/query/unit-of-work/unit-of-work-coordinator.test.ts +20 -20
  53. package/src/query/unit-of-work/unit-of-work.test.ts +64 -0
  54. package/src/query/unit-of-work/unit-of-work.ts +26 -13
  55. package/src/schema/create.ts +2 -0
  56. package/src/schema/generate-id.test.ts +57 -0
  57. package/src/schema/generate-id.ts +38 -0
  58. package/src/shared/config.ts +0 -10
  59. package/src/shared/connection-pool.ts +0 -24
  60. package/src/shared/prisma.ts +0 -45
@@ -1,5 +1,5 @@
1
1
 
2
- > @fragno-dev/db@0.2.1 build /home/runner/work/fragno/fragno/packages/fragno-db
2
+ > @fragno-dev/db@0.2.2 build /home/runner/work/fragno/fragno/packages/fragno-db
3
3
  > tsdown
4
4
 
5
5
  ℹ tsdown v0.15.12 powered by rolldown v1.0.0-beta.45
@@ -7,13 +7,13 @@
7
7
  ℹ entry: src/db-fragment-definition-builder.ts, src/id.ts, src/mod.ts, src/adapters/adapters.ts, src/migration-engine/generation-engine.ts, src/query/cursor.ts, src/query/simple-query-interface.ts, src/schema/create.ts, src/sql-driver/sql-driver.ts, src/adapters/drizzle/drizzle-adapter.ts, src/adapters/drizzle/generate.ts, src/adapters/generic-sql/driver-config.ts, src/adapters/generic-sql/generic-sql-adapter.ts, src/adapters/kysely/kysely-adapter.ts, src/query/unit-of-work/unit-of-work.ts, src/sql-driver/dialects/dialects.ts, src/sql-driver/dialects/durable-object-dialect.ts
8
8
  ℹ tsconfig: tsconfig.json
9
9
  ℹ Build start
10
- ℹ dist/query/unit-of-work/unit-of-work.js 32.66 kB │ gzip: 7.28 kB
11
- ℹ dist/schema/create.js 19.85 kB │ gzip: 5.20 kB
10
+ ℹ dist/query/unit-of-work/unit-of-work.js 33.28 kB │ gzip: 7.47 kB
11
+ ℹ dist/schema/create.js 19.91 kB │ gzip: 5.21 kB
12
12
  ℹ dist/adapters/drizzle/generate.js 14.69 kB │ gzip: 3.69 kB
13
- ℹ dist/db-fragment-definition-builder.js  9.56 kB │ gzip: 2.45 kB
14
13
  ℹ dist/migration-engine/generation-engine.js  8.05 kB │ gzip: 2.27 kB
14
+ ℹ dist/db-fragment-definition-builder.js  7.83 kB │ gzip: 2.27 kB
15
15
  ℹ dist/query/cursor.js  4.81 kB │ gzip: 1.70 kB
16
- ℹ dist/mod.js  4.22 kB │ gzip: 1.37 kB
16
+ ℹ dist/mod.js  4.40 kB │ gzip: 1.42 kB
17
17
  ℹ dist/sql-driver/dialects/durable-object-dialect.js  3.51 kB │ gzip: 1.10 kB
18
18
  ℹ dist/adapters/generic-sql/generic-sql-adapter.js  3.33 kB │ gzip: 1.14 kB
19
19
  ℹ dist/adapters/generic-sql/driver-config.js  3.12 kB │ gzip: 0.68 kB
@@ -24,39 +24,40 @@
24
24
  ℹ dist/id.js  0.07 kB │ gzip: 0.07 kB
25
25
  ℹ dist/query/simple-query-interface.js  0.01 kB │ gzip: 0.03 kB
26
26
  ℹ dist/sql-driver/sql-driver.js  0.01 kB │ gzip: 0.03 kB
27
- ℹ dist/query/unit-of-work/unit-of-work.js.map 81.66 kB │ gzip: 17.56 kB
28
- ℹ dist/schema/create.js.map 48.81 kB │ gzip: 11.78 kB
27
+ ℹ dist/query/unit-of-work/unit-of-work.js.map 82.31 kB │ gzip: 17.71 kB
28
+ ℹ dist/query/unit-of-work/execute-unit-of-work.js.map 70.12 kB │ gzip: 11.84 kB
29
+ ℹ dist/schema/create.js.map 48.86 kB │ gzip: 11.79 kB
29
30
  ℹ dist/adapters/drizzle/generate.js.map 34.97 kB │ gzip: 8.55 kB
30
- ℹ dist/db-fragment-definition-builder.js.map 34.65 kB │ gzip: 7.54 kB
31
- ℹ dist/query/unit-of-work/execute-unit-of-work.js.map 31.97 kB │ gzip: 6.83 kB
32
31
  ℹ dist/packages/fragno/dist/api/fragment-instantiator.js.map 26.88 kB │ gzip: 6.61 kB
32
+ ℹ dist/db-fragment-definition-builder.js.map 25.67 kB │ gzip: 5.98 kB
33
33
  ℹ dist/adapters/generic-sql/migration/sql-generator.js.map 17.35 kB │ gzip: 4.35 kB
34
+ ℹ dist/query/unit-of-work/execute-unit-of-work.js 16.91 kB │ gzip: 3.75 kB
34
35
  ℹ dist/migration-engine/generation-engine.js.map 16.86 kB │ gzip: 4.69 kB
35
36
  ℹ dist/packages/fragno/dist/api/fragment-instantiator.js 16.69 kB │ gzip: 4.17 kB
36
37
  ℹ dist/packages/fragno/dist/api/fragment-definition-builder.js.map 15.85 kB │ gzip: 3.10 kB
37
38
  ℹ dist/adapters/generic-sql/query/sql-query-compiler.js.map 15.39 kB │ gzip: 4.43 kB
38
39
  ℹ dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js.map 15.11 kB │ gzip: 3.75 kB
39
- ℹ dist/query/unit-of-work/unit-of-work.d.ts.map 13.96 kB │ gzip: 5.11 kB
40
+ ℹ dist/query/unit-of-work/execute-unit-of-work.d.ts.map 14.63 kB │ gzip: 5.55 kB
41
+ ℹ dist/query/unit-of-work/unit-of-work.d.ts.map 14.07 kB │ gzip: 5.16 kB
42
+ ℹ dist/fragments/internal-fragment.js.map 13.95 kB │ gzip: 3.59 kB
40
43
  ℹ dist/adapters/shared/from-unit-of-work-compiler.js.map 13.87 kB │ gzip: 3.79 kB
41
- ℹ dist/query/unit-of-work/execute-unit-of-work.js 12.41 kB │ gzip: 2.81 kB
42
44
  ℹ dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map 12.39 kB │ gzip: 3.32 kB
43
- ℹ dist/fragments/internal-fragment.js.map 12.00 kB │ gzip: 3.49 kB
44
- ℹ dist/schema/create.d.ts.map 11.85 kB │ gzip: 4.65 kB
45
+ ℹ dist/schema/create.d.ts.map 11.86 kB │ gzip: 4.68 kB
45
46
  ℹ dist/adapters/generic-sql/query/where-builder.js.map 11.09 kB │ gzip: 2.88 kB
46
47
  ℹ dist/packages/fragno/dist/api/fragment-definition-builder.js 11.03 kB │ gzip: 2.24 kB
47
48
  ℹ dist/adapters/generic-sql/migration/prepared-migrations.js.map  9.48 kB │ gzip: 2.67 kB
48
49
  ℹ dist/query/condition-builder.js.map  9.18 kB │ gzip: 2.42 kB
49
50
  ℹ dist/query/cursor.js.map  9.12 kB │ gzip: 2.97 kB
50
51
  ℹ dist/sql-driver/dialects/durable-object-dialect.js.map  9.12 kB │ gzip: 2.91 kB
52
+ ℹ dist/mod.js.map  8.71 kB │ gzip: 2.68 kB
51
53
  ℹ dist/adapters/shared/uow-operation-compiler.js.map  8.61 kB │ gzip: 2.63 kB
52
54
  ℹ dist/adapters/generic-sql/migration/dialect/sqlite.js.map  8.46 kB │ gzip: 2.85 kB
53
- ℹ dist/mod.js.map  8.40 kB │ gzip: 2.59 kB
54
55
  ℹ dist/migration-engine/auto-from-schema.js.map  8.31 kB │ gzip: 2.18 kB
56
+ ℹ dist/hooks/hooks.js.map  7.90 kB │ gzip: 2.62 kB
55
57
  ℹ dist/query/value-encoding.js.map  7.88 kB │ gzip: 2.57 kB
56
58
  ℹ dist/query/simple-query-interface.d.ts.map  7.83 kB │ gzip: 2.92 kB
57
59
  ℹ dist/adapters/generic-sql/migration/sql-generator.js  7.79 kB │ gzip: 2.15 kB
58
60
  ℹ dist/query/serialize/dialect/sqlite-serializer.js.map  7.41 kB │ gzip: 2.04 kB
59
- ℹ dist/hooks/hooks.js.map  7.34 kB │ gzip: 2.47 kB
60
61
  ℹ dist/adapters/generic-sql/query/generic-sql-uow-operation-compiler.js  6.96 kB │ gzip: 1.71 kB
61
62
  ℹ dist/adapters/generic-sql/uow-decoder.js.map  6.89 kB │ gzip: 2.43 kB
62
63
  ℹ dist/adapters/generic-sql/driver-config.js.map  6.86 kB │ gzip: 1.40 kB
@@ -65,11 +66,11 @@
65
66
  ℹ dist/adapters/generic-sql/generic-sql-adapter.js.map  6.52 kB │ gzip: 2.21 kB
66
67
  ℹ dist/adapters/shared/from-unit-of-work-compiler.js  6.45 kB │ gzip: 1.82 kB
67
68
  ℹ dist/query/serialize/dialect/mysql-serializer.js.map  6.14 kB │ gzip: 1.56 kB
68
- ℹ dist/adapters/generic-sql/query/where-builder.js  5.92 kB │ gzip: 1.65 kB
69
+ ℹ dist/adapters/generic-sql/query/where-builder.js  5.92 kB │ gzip: 1.66 kB
69
70
  ℹ dist/adapters/generic-sql/uow-encoder.js.map  5.91 kB │ gzip: 2.17 kB
70
71
  ℹ dist/packages/fragno/dist/api/request-output-context.js.map  5.82 kB │ gzip: 1.69 kB
71
72
  ℹ dist/adapters/generic-sql/query/sql-query-compiler.js  5.76 kB │ gzip: 1.89 kB
72
- ℹ dist/db-fragment-definition-builder.d.ts.map  5.76 kB │ gzip: 2.40 kB
73
+ ℹ dist/fragments/internal-fragment.js  5.74 kB │ gzip: 1.58 kB
73
74
  ℹ dist/schema/type-conversion/type-mapping.js.map  5.72 kB │ gzip: 1.90 kB
74
75
  ℹ dist/query/serialize/dialect/postgres-serializer.js.map  5.59 kB │ gzip: 1.49 kB
75
76
  ℹ dist/packages/fragno/dist/api/request-input-context.js.map  5.39 kB │ gzip: 1.72 kB
@@ -77,18 +78,17 @@
77
78
  ℹ dist/with-database.js.map  5.30 kB │ gzip: 1.49 kB
78
79
  ℹ dist/query/value-decoding.js.map  5.15 kB │ gzip: 1.88 kB
79
80
  ℹ dist/adapters/generic-sql/result-interpreter.js.map  4.94 kB │ gzip: 1.62 kB
80
- ℹ dist/fragments/internal-fragment.js  4.94 kB │ gzip: 1.46 kB
81
81
  ℹ dist/query/unit-of-work/retry-policy.js.map  4.93 kB │ gzip: 1.38 kB
82
82
  ℹ dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js  4.85 kB │ gzip: 1.62 kB
83
83
  ℹ dist/adapters/generic-sql/migration/dialect/postgres.js.map  4.67 kB │ gzip: 1.79 kB
84
84
  ℹ dist/sql-driver/sql-driver-adapter.js.map  4.67 kB │ gzip: 1.61 kB
85
85
  ℹ dist/query/value-encoding.js  4.63 kB │ gzip: 1.61 kB
86
+ ℹ dist/db-fragment-definition-builder.d.ts.map  4.61 kB │ gzip: 1.92 kB
86
87
  ℹ dist/migration-engine/auto-from-schema.js  4.33 kB │ gzip: 1.21 kB
87
88
  ℹ dist/adapters/generic-sql/migration/dialect/mysql.js.map  4.29 kB │ gzip: 1.70 kB
88
89
  ℹ dist/adapters/generic-sql/uow-decoder.js  3.94 kB │ gzip: 1.46 kB
89
90
  ℹ dist/migration-engine/shared.js.map  3.89 kB │ gzip: 1.25 kB
90
91
  ℹ dist/adapters/generic-sql/migration/dialect/sqlite.js  3.77 kB │ gzip: 1.44 kB
91
- ℹ dist/fragments/internal-fragment.d.ts.map  3.67 kB │ gzip: 0.63 kB
92
92
  ℹ dist/query/serialize/dialect/sqlite-serializer.js  3.66 kB │ gzip: 1.08 kB
93
93
  ℹ dist/adapters/shared/uow-operation-compiler.js  3.58 kB │ gzip: 1.27 kB
94
94
  ℹ dist/packages/fragno/dist/api/request-middleware.js.map  3.58 kB │ gzip: 1.25 kB
@@ -97,18 +97,18 @@
97
97
  ℹ dist/adapters/generic-sql/uow-encoder.js  3.48 kB │ gzip: 1.39 kB
98
98
  ℹ dist/packages/fragno/dist/api/request-output-context.js  3.40 kB │ gzip: 1.03 kB
99
99
  ℹ dist/packages/fragno/dist/api/request-input-context.js  3.36 kB │ gzip: 1.11 kB
100
+ ℹ dist/hooks/hooks.js  3.32 kB │ gzip: 1.20 kB
100
101
  ℹ dist/packages/fragno/dist/api/mutable-request-state.js.map  3.32 kB │ gzip: 1.20 kB
101
102
  ℹ dist/adapters/generic-sql/migration/prepared-migrations.js  3.29 kB │ gzip: 0.99 kB
102
- ℹ dist/hooks/hooks.js  3.22 kB │ gzip: 1.16 kB
103
103
  ℹ dist/packages/fragno/dist/api/internal/response-stream.js.map  3.21 kB │ gzip: 1.25 kB
104
104
  ℹ dist/adapters/generic-sql/result-interpreter.js  3.05 kB │ gzip: 1.02 kB
105
105
  ℹ dist/packages/fragno/dist/api/fragno-response.js.map  3.04 kB │ gzip: 1.16 kB
106
106
  ℹ dist/query/serialize/sql-serializer.js  3.00 kB │ gzip: 1.09 kB
107
107
  ℹ dist/query/serialize/dialect/mysql-serializer.js  2.94 kB │ gzip: 0.83 kB
108
108
  ℹ dist/adapters/generic-sql/query/cursor-utils.js.map  2.78 kB │ gzip: 1.22 kB
109
- ℹ dist/query/unit-of-work/execute-unit-of-work.d.ts.map  2.75 kB │ gzip: 1.17 kB
110
109
  ℹ dist/adapters/adapters.js.map  2.71 kB │ gzip: 1.03 kB
111
110
  ℹ dist/adapters/generic-sql/generic-sql-uow-executor.js  2.68 kB │ gzip: 0.85 kB
111
+ ℹ dist/fragments/internal-fragment.d.ts.map  2.66 kB │ gzip: 0.63 kB
112
112
  ℹ dist/query/serialize/dialect/postgres-serializer.js  2.65 kB │ gzip: 0.78 kB
113
113
  ℹ dist/query/value-decoding.js  2.54 kB │ gzip: 1.02 kB
114
114
  ℹ dist/sql-driver/sql-driver-adapter.js  2.44 kB │ gzip: 0.80 kB
@@ -134,6 +134,7 @@
134
134
  ℹ dist/query/condition-builder.js  1.89 kB │ gzip: 0.70 kB
135
135
  ℹ dist/query/column-defaults.js.map  1.84 kB │ gzip: 0.74 kB
136
136
  ℹ dist/packages/fragno/dist/api/error.js.map  1.81 kB │ gzip: 0.67 kB
137
+ ℹ dist/schema/generate-id.js.map  1.79 kB │ gzip: 0.84 kB
137
138
  ℹ dist/packages/fragno/dist/api/internal/response-stream.js  1.77 kB │ gzip: 0.73 kB
138
139
  ℹ dist/adapters/drizzle/drizzle-adapter.js.map  1.75 kB │ gzip: 0.76 kB
139
140
  ℹ dist/adapters/generic-sql/query/cursor-utils.js  1.67 kB │ gzip: 0.77 kB
@@ -156,6 +157,7 @@
156
157
  ℹ dist/adapters/generic-sql/query/dialect/sqlite.js.map  1.20 kB │ gzip: 0.55 kB
157
158
  ℹ dist/adapters/generic-sql/query/dialect/postgres.js.map  1.19 kB │ gzip: 0.55 kB
158
159
  ℹ dist/with-database.js  1.15 kB │ gzip: 0.53 kB
160
+ ℹ dist/schema/generate-id.js  1.15 kB │ gzip: 0.57 kB
159
161
  ℹ dist/query/serialize/create-sql-serializer.js  1.13 kB │ gzip: 0.47 kB
160
162
  ℹ dist/adapters/generic-sql/generic-sql-adapter.d.ts.map  1.12 kB │ gzip: 0.51 kB
161
163
  ℹ dist/schema/type-conversion/dialect/mysql.js  1.12 kB │ gzip: 0.57 kB
@@ -206,14 +208,15 @@
206
208
  ℹ dist/migration-engine/shared.js  0.21 kB │ gzip: 0.17 kB
207
209
  ℹ dist/sql-driver/dialect-adapter/dialect-adapter.d.ts.map  0.20 kB │ gzip: 0.15 kB
208
210
  ℹ dist/sql-driver/query-executor/plugin.d.ts.map  0.20 kB │ gzip: 0.17 kB
211
+ ℹ dist/schema/generate-id.d.ts.map  0.19 kB │ gzip: 0.15 kB
209
212
  ℹ dist/adapters/generic-sql/migration/executor.d.ts.map  0.18 kB │ gzip: 0.15 kB
210
213
  ℹ dist/adapters/shared/table-name-mapper.d.ts.map  0.17 kB │ gzip: 0.14 kB
211
214
  ℹ dist/shared/providers.d.ts.map  0.15 kB │ gzip: 0.13 kB
212
- ℹ dist/query/unit-of-work/unit-of-work.d.ts 27.28 kB │ gzip: 6.41 kB
213
- ℹ dist/schema/create.d.ts 19.46 kB │ gzip: 4.72 kB
214
- ℹ dist/db-fragment-definition-builder.d.ts 12.80 kB │ gzip: 3.23 kB
215
+ ℹ dist/query/unit-of-work/unit-of-work.d.ts 27.64 kB │ gzip: 6.52 kB
216
+ ℹ dist/schema/create.d.ts 19.52 kB │ gzip: 4.75 kB
217
+ ℹ dist/db-fragment-definition-builder.d.ts  9.85 kB │ gzip: 2.36 kB
215
218
  ℹ dist/query/simple-query-interface.d.ts  7.58 kB │ gzip: 1.83 kB
216
- ℹ dist/mod.d.ts  4.22 kB │ gzip: 1.36 kB
219
+ ℹ dist/mod.d.ts  4.66 kB │ gzip: 1.46 kB
217
220
  ℹ dist/query/cursor.d.ts  3.60 kB │ gzip: 1.31 kB
218
221
  ℹ dist/adapters/generic-sql/driver-config.d.ts  3.38 kB │ gzip: 0.83 kB
219
222
  ℹ dist/adapters/adapters.d.ts  2.62 kB │ gzip: 0.99 kB
@@ -226,16 +229,17 @@
226
229
  ℹ dist/adapters/kysely/kysely-adapter.d.ts  0.81 kB │ gzip: 0.39 kB
227
230
  ℹ dist/sql-driver/dialects/dialects.d.ts  0.13 kB │ gzip: 0.08 kB
228
231
  ℹ dist/id.d.ts  0.07 kB │ gzip: 0.07 kB
229
- ℹ dist/query/unit-of-work/execute-unit-of-work.d.ts  6.97 kB │ gzip: 2.00 kB
230
- ℹ dist/fragments/internal-fragment.d.ts  3.88 kB │ gzip: 1.16 kB
232
+ ℹ dist/query/unit-of-work/execute-unit-of-work.d.ts 26.79 kB │ gzip: 4.25 kB
233
+ ℹ dist/fragments/internal-fragment.d.ts  6.09 kB │ gzip: 1.36 kB
231
234
  ℹ dist/adapters/generic-sql/migration/prepared-migrations.d.ts  2.90 kB │ gzip: 0.86 kB
232
235
  ℹ dist/query/unit-of-work/retry-policy.d.ts  2.73 kB │ gzip: 0.76 kB
233
236
  ℹ dist/query/condition-builder.d.ts  2.00 kB │ gzip: 0.68 kB
234
237
  ℹ dist/with-database.d.ts  1.95 kB │ gzip: 0.70 kB
235
- ℹ dist/hooks/hooks.d.ts  1.41 kB │ gzip: 0.67 kB
238
+ ℹ dist/hooks/hooks.d.ts  1.53 kB │ gzip: 0.70 kB
236
239
  ℹ dist/sql-driver/query-executor/query-executor.d.ts  1.17 kB │ gzip: 0.49 kB
237
240
  ℹ dist/sql-driver/sql-driver-adapter.d.ts  1.08 kB │ gzip: 0.49 kB
238
241
  ℹ dist/sql-driver/driver/runtime-driver.d.ts  0.88 kB │ gzip: 0.39 kB
242
+ ℹ dist/schema/generate-id.d.ts  0.74 kB │ gzip: 0.43 kB
239
243
  ℹ dist/query/orm/orm.d.ts  0.63 kB │ gzip: 0.35 kB
240
244
  ℹ dist/sql-driver/query-executor/plugin.d.ts  0.52 kB │ gzip: 0.31 kB
241
245
  ℹ dist/sql-driver/connection/connection-provider.d.ts  0.47 kB │ gzip: 0.27 kB
@@ -245,5 +249,5 @@
245
249
  ℹ dist/shared/providers.d.ts  0.26 kB │ gzip: 0.19 kB
246
250
  ℹ dist/util/types.d.ts  0.26 kB │ gzip: 0.21 kB
247
251
  ℹ dist/sql-driver/dialect-adapter/dialect-adapter.d.ts  0.21 kB │ gzip: 0.16 kB
248
- ℹ 238 files, total: 1143.83 kB
249
- ✔ Build complete in 12790ms
252
+ ℹ 242 files, total: 1214.83 kB
253
+ ✔ Build complete in 14516ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,37 @@
1
1
  # @fragno-dev/db
2
2
 
3
+ ## 0.2.2
4
+
5
+ ### Patch Changes
6
+
7
+ - aca5990: breaking: remove executeUnitOfWork helper in favor of executeTx
8
+ - f150db9: feat: add `generateId(schema, tableName)` utility for pre-generating table IDs without
9
+ creating records. Also available as `TypedUnitOfWork.generateId(tableName)` convenience method.
10
+ - 0b373fc: refactor: Rename `nonce` to `idempotencyKey` in public APIs
11
+
12
+ Rename the `nonce` property to `idempotencyKey` in `HookContext` and `UnitOfWork` interfaces for
13
+ better clarity and consistency. The database column name remains `nonce` for backward
14
+ compatibility.
15
+
16
+ **Breaking change**: Users accessing `this.nonce` in hook functions or `uow.nonce` in unit of work
17
+ operations must update to `this.idempotencyKey` and `uow.idempotencyKey` respectively.
18
+
19
+ - fe27e33: feat: add new builder pattern for combining UOWs
20
+ - 9753f15: feat: Add unified transaction API with createServiceTx and executeTx
21
+
22
+ Introduce a new unified transaction API that consolidates multiple transaction execution patterns
23
+ into a single `executeTx` function with `TxResult` pattern. This provides better type safety,
24
+ clearer composition patterns, and support for nested dependencies.
25
+
26
+ New APIs:
27
+ - `createServiceTx`: Create service-level transactions with dependency support
28
+ - `executeTx`: Handler-level transaction execution with unified callback pattern
29
+ - `TxResult` type: Branded type for transaction results with dependency tracking
30
+ - `handlerTx` method: Added to fragment definitions for convenient access
31
+
32
+ The old APIs (`executeTxCallbacks`, `executeTxWithDeps`, `executeTxArray`) are deprecated but
33
+ remain available for backward compatibility.
34
+
3
35
  ## 0.2.1
4
36
 
5
37
  ### Patch Changes
@@ -1,5 +1,5 @@
1
- import { Column, FragnoId, FragnoReference } from "../../../schema/create.js";
2
1
  import { createSQLSerializer } from "../../../query/serialize/create-sql-serializer.js";
2
+ import { Column, FragnoId, FragnoReference } from "../../../schema/create.js";
3
3
  import { ReferenceSubquery, resolveFragnoIdValue } from "../../../query/value-encoding.js";
4
4
  import { sql } from "kysely";
5
5
 
@@ -1,7 +1,7 @@
1
1
  import { AnySchema } from "./schema/create.js";
2
- import { AwaitedPromisesInObject, ExecuteRestrictedUnitOfWorkOptions, HandlerTxCallbacks, ServiceTxCallbacks } from "./query/unit-of-work/execute-unit-of-work.js";
2
+ import { ExecuteTxOptions, HandlerTxBuilder, ServiceTxBuilder } from "./query/unit-of-work/execute-unit-of-work.js";
3
3
  import { HookContext, HookFn, HooksMap } from "./hooks/hooks.js";
4
- import { IUnitOfWork, TypedUnitOfWork } from "./query/unit-of-work/unit-of-work.js";
4
+ import { IUnitOfWork } from "./query/unit-of-work/unit-of-work.js";
5
5
  import { SimpleQueryInterface } from "./query/simple-query-interface.js";
6
6
  import { DatabaseAdapter } from "./adapters/adapters.js";
7
7
  import { AnyFragnoInstantiatedFragment, FragmentDefinition, FragmentDefinitionBuilder, FragnoPublicConfig, RequestThisContext, ServiceConstructorFn } from "@fragno-dev/core";
@@ -42,108 +42,46 @@ type ImplicitDatabaseDependencies<TSchema extends AnySchema> = {
42
42
  */
43
43
  type DatabaseServiceContext<THooks extends HooksMap> = RequestThisContext & {
44
44
  /**
45
- * Get a typed, restricted Unit of Work for the given schema.
46
- * @param schema - Schema to get a typed view for
47
- * @returns TypedUnitOfWork (restricted version without execute methods)
48
- */
49
- uow<TSchema extends AnySchema>(schema: TSchema): TypedUnitOfWork<TSchema, [], unknown, THooks>;
50
- /**
51
- * Execute a transaction with two-phase callbacks (retrieve + mutate).
52
- *
53
- * @param schema - Schema to use for the transaction
54
- * @param callbacks - Object containing retrieve and mutate callbacks
55
- * @returns Promise resolving to the mutation result with promises awaited 1 level deep
45
+ * Create a service-level transaction builder using the fluent API.
46
+ * Returns a builder that can be chained with withServiceCalls, retrieve,
47
+ * transformRetrieve, mutate, transform, and build.
56
48
  *
57
49
  * @example
58
50
  * ```ts
59
- * return this.tx(schema, {
60
- * retrieve: (uow) => uow.findFirst("users", ...),
61
- * mutate: async (uow, [user]) => {
62
- * await validateUser(user);
63
- * uow.update("users", user.id, ...).check();
64
- * return { ok: true };
65
- * }
66
- * });
51
+ * return this.serviceTx(schema)
52
+ * .withServiceCalls(() => [otherService.getData()])
53
+ * .retrieve((uow) => uow.find("users", ...))
54
+ * .transformRetrieve(([users]) => users[0])
55
+ * .mutate(({ uow, retrieveResult, serviceIntermediateResult }) =>
56
+ * uow.create("records", { ... })
57
+ * )
58
+ * .transform(({ mutateResult, serviceResult }) => ({ id: mutateResult }))
59
+ * .build();
67
60
  * ```
68
61
  */
69
- tx<TSchema extends AnySchema, TRetrievalResults extends unknown[], TMutationResult = void>(schema: TSchema, callbacks: ServiceTxCallbacks<TSchema, TRetrievalResults, TMutationResult, THooks>): Promise<AwaitedPromisesInObject<TMutationResult>>;
62
+ serviceTx<TSchema extends AnySchema>(schema: TSchema): ServiceTxBuilder<TSchema, readonly [], [], [], unknown, unknown, false, false, false, false, THooks>;
70
63
  };
71
64
  /**
72
65
  * Handler context for database fragments - provides UOW execution with automatic retry support.
73
66
  */
74
67
  type DatabaseHandlerContext<THooks extends HooksMap = {}> = RequestThisContext & {
75
68
  /**
76
- * Execute a Unit of Work with explicit phase control and automatic retry support.
77
- * This method provides an API where users call forSchema to create a schema-specific
78
- * UOW, then call executeRetrieve() and executeMutate() to execute the phases. The entire
79
- * callback is re-executed on optimistic concurrency conflicts, ensuring retries work properly.
80
- * Automatically provides the UOW factory from context.
81
- * Promises in the returned object are awaited 1 level deep.
82
- *
83
- * @param callback - Async function that receives a context with forSchema, executeRetrieve, executeMutate, nonce, and currentAttempt
84
- * @param options - Optional configuration for retry policy and abort signal
85
- * @returns Promise resolving to the callback's return value with promises awaited 1 level deep
86
- * @throws Error if retries are exhausted or callback throws an error
69
+ * Create a handler-level transaction builder using the fluent API.
70
+ * Returns a builder that can be chained with withServiceCalls, retrieve,
71
+ * transformRetrieve, mutate, transform, and execute.
87
72
  *
88
73
  * @example
89
74
  * ```ts
90
- * const result = await this.uow(async ({ forSchema, executeRetrieve, executeMutate, nonce, currentAttempt }) => {
91
- * const uow = forSchema(schema);
92
- * const userId = uow.create("users", { name: "John" });
93
- *
94
- * // Execute retrieval phase
95
- * await executeRetrieve();
96
- *
97
- * const profileId = uow.create("profiles", { userId });
98
- *
99
- * // Execute mutation phase
100
- * await executeMutate();
101
- *
102
- * return { userId, profileId };
103
- * });
75
+ * const result = await this.handlerTx()
76
+ * .withServiceCalls(() => [userService.getUser(id)])
77
+ * .mutate(({ forSchema, idempotencyKey, currentAttempt, serviceIntermediateResult }) => {
78
+ * return forSchema(ordersSchema).create("orders", { ... });
79
+ * })
80
+ * .transform(({ mutateResult, serviceResult }) => ({ ... }))
81
+ * .execute();
104
82
  * ```
105
83
  */
106
- uow<TResult>(callback: (context: {
107
- forSchema: <TSchema extends AnySchema, H extends HooksMap = THooks>(schema: TSchema, hooks?: H) => TypedUnitOfWork<TSchema, [], unknown, H>;
108
- executeRetrieve: () => Promise<void>;
109
- executeMutate: () => Promise<void>;
110
- nonce: string;
111
- currentAttempt: number;
112
- }) => Promise<TResult> | TResult, options?: Omit<ExecuteRestrictedUnitOfWorkOptions, "createUnitOfWork">): Promise<AwaitedPromisesInObject<TResult>>;
113
- /**
114
- * Execute a transaction with automatic retry support.
115
- * Provides two overloads: array syntax (common case) and callback syntax (advanced).
116
- *
117
- * Array syntax - pass a factory function that returns service calls:
118
- * ```ts
119
- * const [transfer, notify] = await this.tx(
120
- * () => [
121
- * services.transfer({ from, to, amount }),
122
- * services.notify({ userId, message })
123
- * ]
124
- * );
125
- * ```
126
- *
127
- * Callback syntax - for handlers that need direct UOW access:
128
- * ```ts
129
- * const result = await this.tx({
130
- * retrieve: ({ forSchema }) => {
131
- * const uow = forSchema(schema);
132
- * uow.find("users", ...);
133
- * return services.transfer({ ... });
134
- * },
135
- * mutate: ({ forSchema }, transferPromise) => {
136
- * const uow = forSchema(schema);
137
- * uow.create("auditLog", { ... });
138
- * return transferPromise;
139
- * }
140
- * });
141
- * ```
142
- *
143
- * Note: Handler callbacks are synchronous only to prevent accidentally awaiting services in wrong place.
144
- */
145
- tx<T extends readonly unknown[]>(servicesFactory: () => readonly [...{ [K in keyof T]: Promise<T[K]> }], options?: Omit<ExecuteRestrictedUnitOfWorkOptions, "createUnitOfWork">): Promise<{ [K in keyof T]: T[K] }>;
146
- tx<TRetrieveResult, TMutationResult>(callbacks: HandlerTxCallbacks<TRetrieveResult, TMutationResult, THooks>, options?: Omit<ExecuteRestrictedUnitOfWorkOptions, "createUnitOfWork">): Promise<AwaitedPromisesInObject<TMutationResult>>;
84
+ handlerTx(options?: Omit<ExecuteTxOptions, "createUnitOfWork">): HandlerTxBuilder<readonly [], [], [], unknown, unknown, false, false, false, false, THooks>;
147
85
  };
148
86
  /**
149
87
  * Database fragment context provided to user callbacks.
@@ -207,7 +145,7 @@ declare class DatabaseFragmentDefinitionBuilder<TSchema extends AnySchema, TConf
207
145
  * ```ts
208
146
  * .provideHooks(({ defineHook, config }) => ({
209
147
  * onSubscribe: defineHook(async function (payload: { email: string }) {
210
- * // 'this' context available (HookServiceContext with nonce)
148
+ * // 'this' context available (HookServiceContext with idempotencyKey)
211
149
  * await config.onSubscribe?.(payload.email);
212
150
  * }),
213
151
  * }))
@@ -1 +1 @@
1
- {"version":3,"file":"db-fragment-definition-builder.d.ts","names":[],"sources":["../src/db-fragment-definition-builder.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"db-fragment-definition-builder.d.ts","names":[],"sources":["../src/db-fragment-definition-builder.ts"],"sourcesContent":[],"mappings":"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"}
@@ -1,5 +1,4 @@
1
- import "./query/unit-of-work/unit-of-work.js";
2
- import { executeRestrictedUnitOfWork, executeServiceTx, executeTxArray, executeTxCallbacks } from "./query/unit-of-work/execute-unit-of-work.js";
1
+ import { createHandlerTxBuilder, createServiceTxBuilder } from "./query/unit-of-work/execute-unit-of-work.js";
3
2
  import { prepareHookMutations, processHooks } from "./hooks/hooks.js";
4
3
 
5
4
  //#region src/db-fragment-definition-builder.ts
@@ -86,7 +85,7 @@ var DatabaseFragmentDefinitionBuilder = class DatabaseFragmentDefinitionBuilder
86
85
  * ```ts
87
86
  * .provideHooks(({ defineHook, config }) => ({
88
87
  * onSubscribe: defineHook(async function (payload: { email: string }) {
89
- * // 'this' context available (HookServiceContext with nonce)
88
+ * // 'this' context available (HookServiceContext with idempotencyKey)
90
89
  * await config.onSubscribe?.(payload.email);
91
90
  * }),
92
91
  * }))
@@ -169,76 +168,37 @@ var DatabaseFragmentDefinitionBuilder = class DatabaseFragmentDefinitionBuilder
169
168
  options
170
169
  })
171
170
  } : void 0;
172
- function forSchema(schema) {
173
- const uow$1 = storage.getStore()?.uow;
174
- if (!uow$1) throw new Error("No UnitOfWork in context. Service must be called within a route handler OR using `withUnitOfWork`.");
175
- return uow$1.restrict().forSchema(schema);
171
+ function serviceTx(schema) {
172
+ const uow = storage.getStore()?.uow;
173
+ if (!uow) throw new Error("No UnitOfWork in context. Service must be called within a route handler OR using `withUnitOfWork`.");
174
+ return createServiceTxBuilder(schema, uow, hooksConfig?.hooks);
176
175
  }
177
- const serviceTx = async (schema, callbacks) => {
178
- const uow$1 = storage.getStore()?.uow;
179
- if (!uow$1) throw new Error("No UnitOfWork in context. Service must be called within a route handler OR using `withUnitOfWork`.");
180
- return executeServiceTx(schema, callbacks, uow$1);
181
- };
182
- const serviceContext = {
183
- uow: forSchema,
184
- tx: serviceTx
185
- };
186
- async function uow(callback, execOptions) {
176
+ const serviceContext = { serviceTx };
177
+ function handlerTx(execOptions) {
187
178
  const currentStorage = storage.getStore();
188
179
  if (!currentStorage) throw new Error("No storage in context. Handler must be called within a request context.");
189
- const wrappedCallback = async (context) => {
190
- return callback(context);
191
- };
192
180
  const userOnBeforeMutate = execOptions?.onBeforeMutate;
193
- const userOnSuccess = execOptions?.onSuccess;
194
- return executeRestrictedUnitOfWork(wrappedCallback, {
181
+ const userOnAfterMutate = execOptions?.onAfterMutate;
182
+ return createHandlerTxBuilder({
195
183
  ...execOptions,
196
184
  createUnitOfWork: () => {
197
185
  currentStorage.uow.reset();
198
186
  if (hooksConfig) currentStorage.uow.registerSchema(hooksConfig.internalFragment.$internal.deps.schema, hooksConfig.internalFragment.$internal.deps.namespace);
199
187
  return currentStorage.uow;
200
188
  },
201
- onBeforeMutate: (uow$1) => {
202
- if (hooksConfig) prepareHookMutations(uow$1, hooksConfig);
203
- if (userOnBeforeMutate) userOnBeforeMutate(uow$1);
189
+ onBeforeMutate: (uow) => {
190
+ if (hooksConfig) prepareHookMutations(uow, hooksConfig);
191
+ if (userOnBeforeMutate) userOnBeforeMutate(uow);
204
192
  },
205
- onSuccess: async (uow$1) => {
193
+ onAfterMutate: async (uow) => {
206
194
  if (hooksConfig) await processHooks(hooksConfig);
207
- if (userOnSuccess) await userOnSuccess(uow$1);
195
+ if (userOnAfterMutate) await userOnAfterMutate(uow);
208
196
  }
209
197
  });
210
198
  }
211
- async function handlerTx(factoryOrCallbacks, execOptions) {
212
- const currentStorage = storage.getStore();
213
- if (!currentStorage) throw new Error("No storage in context. Handler must be called within a request context.");
214
- const userOnBeforeMutate = execOptions?.onBeforeMutate;
215
- const userOnSuccess = execOptions?.onSuccess;
216
- const createUow = () => {
217
- currentStorage.uow.reset();
218
- if (hooksConfig) currentStorage.uow.registerSchema(hooksConfig.internalFragment.$internal.deps.schema, hooksConfig.internalFragment.$internal.deps.namespace);
219
- return currentStorage.uow;
220
- };
221
- const options$1 = {
222
- ...execOptions,
223
- createUnitOfWork: createUow,
224
- onBeforeMutate: (uow$1) => {
225
- if (hooksConfig) prepareHookMutations(uow$1, hooksConfig);
226
- if (userOnBeforeMutate) userOnBeforeMutate(uow$1);
227
- },
228
- onSuccess: async (uow$1) => {
229
- if (hooksConfig) await processHooks(hooksConfig);
230
- if (userOnSuccess) await userOnSuccess(uow$1);
231
- }
232
- };
233
- if (typeof factoryOrCallbacks === "function") return executeTxArray(factoryOrCallbacks, options$1);
234
- else return executeTxCallbacks(factoryOrCallbacks, options$1);
235
- }
236
199
  return {
237
200
  serviceContext,
238
- handlerContext: {
239
- uow,
240
- tx: handlerTx
241
- }
201
+ handlerContext: { handlerTx }
242
202
  };
243
203
  }).build(),
244
204
  dependencies