@fragno-dev/db 0.2.0 → 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 (62) hide show
  1. package/.turbo/turbo-build.log +34 -30
  2. package/CHANGELOG.md +49 -0
  3. package/dist/adapters/generic-sql/query/where-builder.js +1 -1
  4. package/dist/db-fragment-definition-builder.d.ts +31 -39
  5. package/dist/db-fragment-definition-builder.d.ts.map +1 -1
  6. package/dist/db-fragment-definition-builder.js +20 -16
  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 +367 -80
  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 +448 -148
  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 +35 -11
  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 +49 -19
  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 +2 -3
  30. package/dist/schema/create.d.ts.map +1 -1
  31. package/dist/schema/create.js +2 -5
  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/dist/sql-driver/dialects/durable-object-dialect.d.ts.map +1 -1
  38. package/package.json +3 -3
  39. package/src/adapters/drizzle/drizzle-adapter-pglite.test.ts +1 -0
  40. package/src/adapters/drizzle/drizzle-adapter-sqlite3.test.ts +41 -25
  41. package/src/adapters/generic-sql/test/generic-drizzle-adapter-sqlite3.test.ts +39 -25
  42. package/src/db-fragment-definition-builder.test.ts +58 -42
  43. package/src/db-fragment-definition-builder.ts +78 -88
  44. package/src/db-fragment-instantiator.test.ts +64 -88
  45. package/src/db-fragment-integration.test.ts +292 -142
  46. package/src/fragments/internal-fragment.test.ts +272 -266
  47. package/src/fragments/internal-fragment.ts +155 -122
  48. package/src/hooks/hooks.test.ts +268 -264
  49. package/src/hooks/hooks.ts +74 -63
  50. package/src/mod.ts +14 -4
  51. package/src/query/unit-of-work/execute-unit-of-work.test.ts +1582 -998
  52. package/src/query/unit-of-work/execute-unit-of-work.ts +1746 -343
  53. package/src/query/unit-of-work/tx-builder.test.ts +1041 -0
  54. package/src/query/unit-of-work/unit-of-work-coordinator.test.ts +269 -21
  55. package/src/query/unit-of-work/unit-of-work.test.ts +64 -0
  56. package/src/query/unit-of-work/unit-of-work.ts +65 -30
  57. package/src/schema/create.ts +2 -5
  58. package/src/schema/generate-id.test.ts +57 -0
  59. package/src/schema/generate-id.ts +38 -0
  60. package/src/shared/config.ts +0 -10
  61. package/src/shared/connection-pool.ts +0 -24
  62. package/src/shared/prisma.ts +0 -45
@@ -1,5 +1,5 @@
1
1
 
2
- > @fragno-dev/db@0.2.0 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.02 kB │ gzip: 7.11 kB
11
- ℹ dist/schema/create.js 20.01 kB │ gzip: 5.24 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
13
  ℹ dist/migration-engine/generation-engine.js  8.05 kB │ gzip: 2.27 kB
14
- ℹ dist/db-fragment-definition-builder.js  7.68 kB │ gzip: 2.24 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 80.52 kB │ gzip: 17.30 kB
28
- ℹ dist/schema/create.js.map 49.08 kB │ gzip: 11.85 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
31
  ℹ dist/packages/fragno/dist/api/fragment-instantiator.js.map 26.88 kB │ gzip: 6.61 kB
31
- ℹ dist/db-fragment-definition-builder.js.map 26.82 kB │ gzip: 6.27 kB
32
- ℹ dist/query/unit-of-work/execute-unit-of-work.js.map 19.76 kB │ gzip: 5.32 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.88 kB │ gzip: 5.09 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
44
  ℹ dist/node_modules/.pnpm/rou3@0.7.10/node_modules/rou3/dist/index.js.map 12.39 kB │ gzip: 3.32 kB
42
- ℹ dist/fragments/internal-fragment.js.map 12.04 kB │ gzip: 3.51 kB
43
- ℹ dist/schema/create.d.ts.map 11.90 kB │ gzip: 4.68 kB
45
+ ℹ dist/schema/create.d.ts.map 11.86 kB │ gzip: 4.68 kB
44
46
  ℹ dist/adapters/generic-sql/query/where-builder.js.map 11.09 kB │ gzip: 2.88 kB
45
47
  ℹ dist/packages/fragno/dist/api/fragment-definition-builder.js 11.03 kB │ gzip: 2.24 kB
46
48
  ℹ dist/adapters/generic-sql/migration/prepared-migrations.js.map  9.48 kB │ gzip: 2.67 kB
47
49
  ℹ dist/query/condition-builder.js.map  9.18 kB │ gzip: 2.42 kB
48
50
  ℹ dist/query/cursor.js.map  9.12 kB │ gzip: 2.97 kB
49
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
50
53
  ℹ dist/adapters/shared/uow-operation-compiler.js.map  8.61 kB │ gzip: 2.63 kB
51
54
  ℹ dist/adapters/generic-sql/migration/dialect/sqlite.js.map  8.46 kB │ gzip: 2.85 kB
52
- ℹ dist/mod.js.map  8.40 kB │ gzip: 2.59 kB
53
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
54
57
  ℹ dist/query/value-encoding.js.map  7.88 kB │ gzip: 2.57 kB
55
58
  ℹ dist/query/simple-query-interface.d.ts.map  7.83 kB │ gzip: 2.92 kB
56
59
  ℹ dist/adapters/generic-sql/migration/sql-generator.js  7.79 kB │ gzip: 2.15 kB
57
60
  ℹ dist/query/serialize/dialect/sqlite-serializer.js.map  7.41 kB │ gzip: 2.04 kB
58
- ℹ dist/hooks/hooks.js.map  7.34 kB │ gzip: 2.47 kB
59
- ℹ dist/query/unit-of-work/execute-unit-of-work.js  7.14 kB │ gzip: 2.21 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,10 +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
73
+ ℹ dist/fragments/internal-fragment.js  5.74 kB │ gzip: 1.58 kB
72
74
  ℹ dist/schema/type-conversion/type-mapping.js.map  5.72 kB │ gzip: 1.90 kB
73
75
  ℹ dist/query/serialize/dialect/postgres-serializer.js.map  5.59 kB │ gzip: 1.49 kB
74
76
  ℹ dist/packages/fragno/dist/api/request-input-context.js.map  5.39 kB │ gzip: 1.72 kB
@@ -76,19 +78,17 @@
76
78
  ℹ dist/with-database.js.map  5.30 kB │ gzip: 1.49 kB
77
79
  ℹ dist/query/value-decoding.js.map  5.15 kB │ gzip: 1.88 kB
78
80
  ℹ dist/adapters/generic-sql/result-interpreter.js.map  4.94 kB │ gzip: 1.62 kB
79
- ℹ dist/fragments/internal-fragment.js  4.94 kB │ gzip: 1.46 kB
80
81
  ℹ dist/query/unit-of-work/retry-policy.js.map  4.93 kB │ gzip: 1.38 kB
81
- ℹ dist/db-fragment-definition-builder.d.ts.map  4.91 kB │ gzip: 2.07 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,9 +97,9 @@
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
@@ -108,6 +108,7 @@
108
108
  ℹ dist/adapters/generic-sql/query/cursor-utils.js.map  2.78 kB │ gzip: 1.22 kB
109
109
  ℹ dist/adapters/adapters.js.map  2.71 kB │ gzip: 1.03 kB
110
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
111
112
  ℹ dist/query/serialize/dialect/postgres-serializer.js  2.65 kB │ gzip: 0.78 kB
112
113
  ℹ dist/query/value-decoding.js  2.54 kB │ gzip: 1.02 kB
113
114
  ℹ dist/sql-driver/sql-driver-adapter.js  2.44 kB │ gzip: 0.80 kB
@@ -119,7 +120,6 @@
119
120
  ℹ dist/schema/type-conversion/dialect/sqlite.js.map  2.37 kB │ gzip: 0.86 kB
120
121
  ℹ dist/adapters/generic-sql/migration/dialect/postgres.js  2.33 kB │ gzip: 1.02 kB
121
122
  ℹ dist/sql-driver/sql.js.map  2.32 kB │ gzip: 1.03 kB
122
- ℹ dist/query/unit-of-work/execute-unit-of-work.d.ts.map  2.25 kB │ gzip: 0.92 kB
123
123
  ℹ dist/schema/type-conversion/dialect/mysql.js.map  2.23 kB │ gzip: 0.83 kB
124
124
  ℹ dist/packages/fragno/dist/api/request-middleware.js  2.18 kB │ gzip: 0.79 kB
125
125
  ℹ dist/schema/type-conversion/type-mapping.js  2.17 kB │ gzip: 0.94 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 26.66 kB │ gzip: 6.28 kB
213
- ℹ dist/schema/create.d.ts 19.53 kB │ gzip: 4.76 kB
214
- ℹ dist/db-fragment-definition-builder.d.ts 10.44 kB │ gzip: 2.62 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  5.25 kB │ gzip: 1.60 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: 1109.33 kB
249
- ✔ Build complete in 12506ms
252
+ ℹ 242 files, total: 1214.83 kB
253
+ ✔ Build complete in 14516ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,54 @@
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
+
35
+ ## 0.2.1
36
+
37
+ ### Patch Changes
38
+
39
+ - aecfa70: feat(db): allow user callbacks in uow options
40
+ - 3faac77: fix(db): child UOWs not reflecting parent's state after execution
41
+ - 01a9c6d: feat(db): add tx() API for simplified transaction handling
42
+
43
+ Add new tx() method to both service and handler contexts that provides a simpler API for
44
+ transaction handling with automatic retry support. Supports two syntaxes: array syntax for
45
+ multiple service calls and callback syntax for direct UOW access. Also enhances restrict() to
46
+ accept options for controlling readiness signaling.
47
+
48
+ - 5028ad3: fix(db): remove dependency on `node:inspect`
49
+ - 20d824a: fix(db): preserve internal IDs in child UOWs when using two-phase pattern with
50
+ mutationPhase
51
+
3
52
  ## 0.2.0
4
53
 
5
54
  ### Minor 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 } 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,54 +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)
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.
48
+ *
49
+ * @example
50
+ * ```ts
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();
60
+ * ```
48
61
  */
49
- uow<TSchema extends AnySchema>(schema: TSchema): TypedUnitOfWork<TSchema, [], unknown, THooks>;
62
+ serviceTx<TSchema extends AnySchema>(schema: TSchema): ServiceTxBuilder<TSchema, readonly [], [], [], unknown, unknown, false, false, false, false, THooks>;
50
63
  };
51
64
  /**
52
65
  * Handler context for database fragments - provides UOW execution with automatic retry support.
53
66
  */
54
67
  type DatabaseHandlerContext<THooks extends HooksMap = {}> = RequestThisContext & {
55
68
  /**
56
- * Execute a Unit of Work with explicit phase control and automatic retry support.
57
- * This method provides an API where users call forSchema to create a schema-specific
58
- * UOW, then call executeRetrieve() and executeMutate() to execute the phases. The entire
59
- * callback is re-executed on optimistic concurrency conflicts, ensuring retries work properly.
60
- * Automatically provides the UOW factory from context.
61
- * Promises in the returned object are awaited 1 level deep.
62
- *
63
- * @param callback - Async function that receives a context with forSchema, executeRetrieve, executeMutate, nonce, and currentAttempt
64
- * @param options - Optional configuration for retry policy and abort signal
65
- * @returns Promise resolving to the callback's return value with promises awaited 1 level deep
66
- * @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.
67
72
  *
68
73
  * @example
69
74
  * ```ts
70
- * const result = await this.uow(async ({ forSchema, executeRetrieve, executeMutate, nonce, currentAttempt }) => {
71
- * const uow = forSchema(schema);
72
- * const userId = uow.create("users", { name: "John" });
73
- *
74
- * // Execute retrieval phase
75
- * await executeRetrieve();
76
- *
77
- * const profileId = uow.create("profiles", { userId });
78
- *
79
- * // Execute mutation phase
80
- * await executeMutate();
81
- *
82
- * return { userId, profileId };
83
- * });
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();
84
82
  * ```
85
83
  */
86
- uow<TResult>(callback: (context: {
87
- forSchema: <TSchema extends AnySchema, H extends HooksMap = THooks>(schema: TSchema, hooks?: H) => TypedUnitOfWork<TSchema, [], unknown, H>;
88
- executeRetrieve: () => Promise<void>;
89
- executeMutate: () => Promise<void>;
90
- nonce: string;
91
- currentAttempt: number;
92
- }) => Promise<TResult> | TResult, options?: Omit<ExecuteRestrictedUnitOfWorkOptions, "createUnitOfWork">): Promise<AwaitedPromisesInObject<TResult>>;
84
+ handlerTx(options?: Omit<ExecuteTxOptions, "createUnitOfWork">): HandlerTxBuilder<readonly [], [], [], unknown, unknown, false, false, false, false, THooks>;
93
85
  };
94
86
  /**
95
87
  * Database fragment context provided to user callbacks.
@@ -153,7 +145,7 @@ declare class DatabaseFragmentDefinitionBuilder<TSchema extends AnySchema, TConf
153
145
  * ```ts
154
146
  * .provideHooks(({ defineHook, config }) => ({
155
147
  * onSubscribe: defineHook(async function (payload: { email: string }) {
156
- * // 'this' context available (HookServiceContext with nonce)
148
+ * // 'this' context available (HookServiceContext with idempotencyKey)
157
149
  * await config.onSubscribe?.(payload.email);
158
150
  * }),
159
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 } 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,32 +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 serviceContext = { uow: forSchema };
178
- async function uow(callback, execOptions) {
176
+ const serviceContext = { serviceTx };
177
+ function handlerTx(execOptions) {
179
178
  const currentStorage = storage.getStore();
180
179
  if (!currentStorage) throw new Error("No storage in context. Handler must be called within a request context.");
181
- const wrappedCallback = async (context) => {
182
- return callback(context);
183
- };
184
- return executeRestrictedUnitOfWork(wrappedCallback, {
180
+ const userOnBeforeMutate = execOptions?.onBeforeMutate;
181
+ const userOnAfterMutate = execOptions?.onAfterMutate;
182
+ return createHandlerTxBuilder({
185
183
  ...execOptions,
186
184
  createUnitOfWork: () => {
187
185
  currentStorage.uow.reset();
188
186
  if (hooksConfig) currentStorage.uow.registerSchema(hooksConfig.internalFragment.$internal.deps.schema, hooksConfig.internalFragment.$internal.deps.namespace);
189
187
  return currentStorage.uow;
190
188
  },
191
- onBeforeMutate: hooksConfig ? (uow$1) => prepareHookMutations(uow$1, hooksConfig) : void 0,
192
- onSuccess: hooksConfig ? () => processHooks(hooksConfig) : void 0
189
+ onBeforeMutate: (uow) => {
190
+ if (hooksConfig) prepareHookMutations(uow, hooksConfig);
191
+ if (userOnBeforeMutate) userOnBeforeMutate(uow);
192
+ },
193
+ onAfterMutate: async (uow) => {
194
+ if (hooksConfig) await processHooks(hooksConfig);
195
+ if (userOnAfterMutate) await userOnAfterMutate(uow);
196
+ }
193
197
  });
194
198
  }
195
199
  return {
196
200
  serviceContext,
197
- handlerContext: { uow }
201
+ handlerContext: { handlerTx }
198
202
  };
199
203
  }).build(),
200
204
  dependencies