@fragno-dev/core 0.1.10 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. package/.turbo/turbo-build.log +139 -131
  2. package/CHANGELOG.md +63 -0
  3. package/dist/api/api.d.ts +23 -5
  4. package/dist/api/api.d.ts.map +1 -1
  5. package/dist/api/api.js.map +1 -1
  6. package/dist/api/fragment-definition-builder.d.ts +17 -7
  7. package/dist/api/fragment-definition-builder.d.ts.map +1 -1
  8. package/dist/api/fragment-definition-builder.js +3 -2
  9. package/dist/api/fragment-definition-builder.js.map +1 -1
  10. package/dist/api/fragment-instantiator.d.ts +129 -32
  11. package/dist/api/fragment-instantiator.d.ts.map +1 -1
  12. package/dist/api/fragment-instantiator.js +232 -50
  13. package/dist/api/fragment-instantiator.js.map +1 -1
  14. package/dist/api/request-input-context.d.ts +57 -1
  15. package/dist/api/request-input-context.d.ts.map +1 -1
  16. package/dist/api/request-input-context.js +67 -0
  17. package/dist/api/request-input-context.js.map +1 -1
  18. package/dist/api/request-middleware.d.ts +1 -1
  19. package/dist/api/request-middleware.d.ts.map +1 -1
  20. package/dist/api/request-middleware.js.map +1 -1
  21. package/dist/api/route.d.ts +7 -7
  22. package/dist/api/route.d.ts.map +1 -1
  23. package/dist/api/route.js.map +1 -1
  24. package/dist/client/client.d.ts +4 -3
  25. package/dist/client/client.d.ts.map +1 -1
  26. package/dist/client/client.js +103 -7
  27. package/dist/client/client.js.map +1 -1
  28. package/dist/client/vue.d.ts +7 -3
  29. package/dist/client/vue.d.ts.map +1 -1
  30. package/dist/client/vue.js +16 -1
  31. package/dist/client/vue.js.map +1 -1
  32. package/dist/internal/trace-context.d.ts +23 -0
  33. package/dist/internal/trace-context.d.ts.map +1 -0
  34. package/dist/internal/trace-context.js +14 -0
  35. package/dist/internal/trace-context.js.map +1 -0
  36. package/dist/mod-client.d.ts +5 -27
  37. package/dist/mod-client.d.ts.map +1 -1
  38. package/dist/mod-client.js +50 -13
  39. package/dist/mod-client.js.map +1 -1
  40. package/dist/mod.d.ts +4 -3
  41. package/dist/mod.js +2 -1
  42. package/dist/runtime.d.ts +15 -0
  43. package/dist/runtime.d.ts.map +1 -0
  44. package/dist/runtime.js +33 -0
  45. package/dist/runtime.js.map +1 -0
  46. package/dist/test/test.d.ts +2 -2
  47. package/dist/test/test.d.ts.map +1 -1
  48. package/dist/test/test.js.map +1 -1
  49. package/package.json +31 -18
  50. package/src/api/api.ts +24 -0
  51. package/src/api/fragment-definition-builder.ts +36 -17
  52. package/src/api/fragment-instantiator.test.ts +429 -1
  53. package/src/api/fragment-instantiator.ts +572 -58
  54. package/src/api/internal/path-runtime.test.ts +7 -0
  55. package/src/api/request-input-context.test.ts +152 -0
  56. package/src/api/request-input-context.ts +85 -0
  57. package/src/api/request-middleware.test.ts +47 -1
  58. package/src/api/request-middleware.ts +1 -1
  59. package/src/api/route.ts +7 -2
  60. package/src/client/client.test.ts +195 -0
  61. package/src/client/client.ts +185 -10
  62. package/src/client/vue.test.ts +253 -3
  63. package/src/client/vue.ts +44 -1
  64. package/src/internal/trace-context.ts +35 -0
  65. package/src/mod-client.ts +89 -9
  66. package/src/mod.ts +7 -1
  67. package/src/runtime.ts +48 -0
  68. package/src/test/test.ts +13 -4
  69. package/tsdown.config.ts +1 -0
@@ -1,138 +1,146 @@
1
1
 
2
- > @fragno-dev/core@0.1.10 build /home/runner/work/fragno/fragno/packages/fragno
2
+ > @fragno-dev/core@0.2.0 build /home/runner/work/fragno/fragno/packages/fragno
3
3
  > tsdown
4
4
 
5
5
  ℹ tsdown v0.15.12 powered by rolldown v1.0.0-beta.45
6
6
  ℹ Using tsdown config: /home/runner/work/fragno/fragno/packages/fragno/tsdown.config.ts
7
- ℹ entry: src/mod-client.ts, src/mod.ts, src/api/api.ts, src/api/fragment-definition-builder.ts, src/api/fragment-instantiator.ts, src/api/request-context-storage.ts, src/api/route.ts, src/api/shared-types.ts, src/client/client.svelte.ts, src/client/client.ts, src/client/react.ts, src/client/solid.ts, src/client/vanilla.ts, src/client/vue.ts, src/integrations/react-ssr.ts, src/internal/symbols.ts, src/request/request.ts, src/test/test.ts
7
+ ℹ entry: src/mod-client.ts, src/mod.ts, src/api/api.ts, src/api/fragment-definition-builder.ts, src/api/fragment-instantiator.ts, src/api/request-context-storage.ts, src/api/route.ts, src/api/shared-types.ts, src/client/client.svelte.ts, src/client/client.ts, src/client/react.ts, src/client/solid.ts, src/client/vanilla.ts, src/client/vue.ts, src/integrations/react-ssr.ts, src/internal/symbols.ts, src/internal/trace-context.ts, src/request/request.ts, src/test/test.ts
8
8
  ℹ tsconfig: tsconfig.json
9
9
  ℹ Build start
10
- ℹ dist/api/fragment-instantiator.js 15.40 kB │ gzip: 3.87 kB
11
- ℹ dist/client/client.js 14.56 kB │ gzip: 3.65 kB
12
- ℹ dist/api/fragment-definition-builder.js 11.14 kB │ gzip: 2.26 kB
13
- ℹ dist/test/test.js  3.67 kB │ gzip: 1.31 kB
14
- ℹ dist/client/client.svelte.js  3.20 kB │ gzip: 0.91 kB
15
- ℹ dist/client/solid.js  2.95 kB │ gzip: 0.91 kB
16
- ℹ dist/client/vue.js  2.77 kB │ gzip: 0.95 kB
17
- ℹ dist/client/react.js  2.43 kB │ gzip: 0.89 kB
18
- ℹ dist/client/vanilla.js  2.15 kB │ gzip: 0.66 kB
19
- ℹ dist/api/request-context-storage.js  1.49 kB │ gzip: 0.75 kB
20
- ℹ dist/integrations/react-ssr.js  1.26 kB │ gzip: 0.64 kB
21
- ℹ dist/mod-client.js  1.14 kB │ gzip: 0.43 kB
22
- ℹ dist/api/route.js  0.67 kB │ gzip: 0.34 kB
23
- ℹ dist/request/request.js  0.37 kB │ gzip: 0.13 kB
24
- ℹ dist/mod.js  0.31 kB │ gzip: 0.15 kB
25
- ℹ dist/internal/symbols.js  0.31 kB │ gzip: 0.22 kB
26
- ℹ dist/api/api.js  0.25 kB │ gzip: 0.17 kB
27
- ℹ dist/api/shared-types.js  0.01 kB │ gzip: 0.03 kB
28
- ℹ dist/client/client.js.map 43.95 kB │ gzip: 9.78 kB
29
- ℹ dist/api/fragment-instantiator.js.map 42.32 kB │ gzip: 9.96 kB
30
- ℹ dist/api/fragment-definition-builder.js.map 36.28 kB │ gzip: 5.69 kB
31
- ℹ dist/api/route.js.map 14.01 kB │ gzip: 2.38 kB
32
- ℹ dist/api/internal/path.js.map 11.83 kB │ gzip: 3.06 kB
33
- ℹ dist/client/client.svelte.js.map 11.35 kB │ gzip: 2.76 kB
34
- ℹ dist/client/solid.js.map 11.00 kB │ gzip: 2.79 kB
35
- ℹ dist/client/internal/ndjson-streaming.js.map 10.96 kB │ gzip: 3.00 kB
36
- ℹ dist/client/vue.js.map 10.13 kB │ gzip: 2.78 kB
37
- ℹ dist/client/client.d.ts.map 10.13 kB │ gzip: 3.72 kB
38
- ℹ dist/client/react.js.map  9.54 kB │ gzip: 3.03 kB
39
- ℹ dist/client/vanilla.js.map  9.20 kB │ gzip: 2.32 kB
40
- ℹ dist/api/fragment-definition-builder.d.ts.map  8.65 kB │ gzip: 3.40 kB
41
- ℹ dist/test/test.js.map  8.55 kB │ gzip: 2.44 kB
42
- ℹ dist/api/request-input-context.js.map  8.29 kB │ gzip: 2.40 kB
43
- ℹ dist/api/request-output-context.js.map  7.53 kB │ gzip: 2.29 kB
44
- ℹ dist/api/fragment-instantiator.d.ts.map  7.27 kB │ gzip: 2.77 kB
45
- ℹ dist/client/client-error.js.map  5.88 kB │ gzip: 1.70 kB
46
- ℹ dist/api/route.d.ts.map  5.72 kB │ gzip: 2.19 kB
47
- ℹ dist/api/request-middleware.js.map  5.67 kB │ gzip: 1.97 kB
48
- ℹ dist/client/internal/ndjson-streaming.js  4.96 kB │ gzip: 1.46 kB
49
- ℹ dist/api/api.js.map  4.30 kB │ gzip: 1.08 kB
50
- ℹ dist/api/internal/response-stream.js.map  4.28 kB │ gzip: 1.80 kB
51
- ℹ dist/api/fragno-response.js.map  4.18 kB │ gzip: 1.47 kB
52
- ℹ dist/util/async.js.map  3.84 kB │ gzip: 1.53 kB
53
- ℹ dist/api/mutable-request-state.js.map  3.76 kB │ gzip: 1.34 kB
54
- ℹ dist/api/request-output-context.js  3.38 kB │ gzip: 1.02 kB
55
- ℹ dist/api/request-input-context.js  3.34 kB │ gzip: 1.10 kB
56
- ℹ dist/mod-client.js.map  3.25 kB │ gzip: 0.98 kB
57
- ℹ dist/util/content-type.js.map  3.24 kB │ gzip: 1.23 kB
58
- ℹ dist/client/client-error.js  3.17 kB │ gzip: 0.91 kB
59
- ℹ dist/util/ssr.js.map  2.95 kB │ gzip: 1.24 kB
60
- ℹ dist/api/request-context-storage.js.map  2.94 kB │ gzip: 1.21 kB
61
- ℹ dist/client/vanilla.d.ts.map  2.89 kB │ gzip: 1.10 kB
62
- ℹ dist/client/react.d.ts.map  2.64 kB │ gzip: 1.17 kB
63
- ℹ dist/client/solid.d.ts.map  2.44 kB │ gzip: 1.06 kB
64
- ℹ dist/client/internal/fetcher-merge.js.map  2.44 kB │ gzip: 0.96 kB
65
- ℹ dist/util/nanostores.js.map  2.43 kB │ gzip: 0.87 kB
66
- ℹ dist/api/mutable-request-state.js  2.40 kB │ gzip: 0.91 kB
67
- ℹ dist/client/client.svelte.d.ts.map  2.32 kB │ gzip: 0.97 kB
68
- ℹ dist/api/internal/path.js  2.23 kB │ gzip: 0.79 kB
69
- ℹ dist/api/request-middleware.js  2.17 kB │ gzip: 0.79 kB
70
- ℹ dist/client/vue.d.ts.map  2.14 kB │ gzip: 0.94 kB
71
- ℹ dist/api/api.d.ts.map  1.96 kB │ gzip: 0.88 kB
72
- ℹ dist/api/error.js.map  1.96 kB │ gzip: 0.76 kB
73
- ℹ dist/api/bind-services.js.map  1.96 kB │ gzip: 0.85 kB
74
- ℹ dist/api/internal/response-stream.js  1.76 kB │ gzip: 0.73 kB
75
- ℹ dist/integrations/react-ssr.js.map  1.65 kB │ gzip: 0.84 kB
76
- ℹ dist/api/fragno-response.js  1.65 kB │ gzip: 0.69 kB
77
- ℹ dist/util/content-type.js  1.61 kB │ gzip: 0.69 kB
78
- ℹ dist/api/internal/path.d.ts.map  1.58 kB │ gzip: 0.72 kB
79
- ℹ dist/api/request-input-context.d.ts.map  1.55 kB │ gzip: 0.69 kB
80
- ℹ dist/api/request-middleware.d.ts.map  1.51 kB │ gzip: 0.70 kB
81
- ℹ dist/util/ssr.js  1.34 kB │ gzip: 0.59 kB
82
- ℹ dist/api/request-output-context.d.ts.map  1.29 kB │ gzip: 0.60 kB
83
- ℹ dist/client/client-error.d.ts.map  1.26 kB │ gzip: 0.55 kB
84
- ℹ dist/util/nanostores.js  1.25 kB │ gzip: 0.47 kB
85
- ℹ dist/client/internal/fetcher-merge.js  1.23 kB │ gzip: 0.55 kB
86
- ℹ dist/util/async.js  1.19 kB │ gzip: 0.57 kB
87
- ℹ dist/test/test.d.ts.map  1.07 kB │ gzip: 0.55 kB
88
- ℹ dist/api/error.js  0.96 kB │ gzip: 0.38 kB
89
- ℹ dist/api/bind-services.js  0.79 kB │ gzip: 0.40 kB
90
- ℹ dist/api/error.d.ts.map  0.58 kB │ gzip: 0.29 kB
91
- ℹ dist/http/http-status.d.ts.map  0.56 kB │ gzip: 0.25 kB
92
- ℹ dist/api/request-context-storage.d.ts.map  0.56 kB │ gzip: 0.31 kB
93
- ℹ dist/api/route-handler-input-options.d.ts.map  0.54 kB │ gzip: 0.29 kB
94
- ℹ dist/api/internal/route.js.map  0.50 kB │ gzip: 0.32 kB
95
- ℹ dist/api/bind-services.d.ts.map  0.47 kB │ gzip: 0.28 kB
96
- ℹ dist/api/internal/response-stream.d.ts.map  0.37 kB │ gzip: 0.26 kB
97
- ℹ dist/api/fragno-response.d.ts.map  0.37 kB │ gzip: 0.23 kB
98
- ℹ dist/internal/symbols.js.map  0.35 kB │ gzip: 0.26 kB
99
- ℹ dist/api/shared-types.d.ts.map  0.31 kB │ gzip: 0.23 kB
100
- ℹ dist/api/internal/route.js  0.28 kB │ gzip: 0.20 kB
101
- ℹ dist/api/mutable-request-state.d.ts.map  0.28 kB │ gzip: 0.19 kB
102
- ℹ dist/mod-client.d.ts.map  0.23 kB │ gzip: 0.16 kB
103
- ℹ dist/integrations/react-ssr.d.ts.map  0.23 kB │ gzip: 0.17 kB
104
- ℹ dist/util/types-util.d.ts.map  0.21 kB │ gzip: 0.17 kB
105
- ℹ dist/internal/symbols.d.ts.map  0.14 kB │ gzip: 0.13 kB
106
- ℹ dist/api/fragment-definition-builder.d.ts 16.64 kB │ gzip: 3.28 kB
107
- ℹ dist/client/client.d.ts 13.77 kB │ gzip: 3.10 kB
108
- ℹ dist/api/fragment-instantiator.d.ts 11.30 kB │ gzip: 2.63 kB
109
- ℹ dist/api/route.d.ts  7.03 kB │ gzip: 1.09 kB
110
- ℹ dist/test/test.d.ts  5.09 kB │ gzip: 1.52 kB
111
- ℹ dist/client/vanilla.d.ts  3.70 kB │ gzip: 1.04 kB
112
- ℹ dist/client/react.d.ts  3.48 kB │ gzip: 1.17 kB
113
- ℹ dist/client/solid.d.ts  3.14 kB │ gzip: 0.95 kB
114
- ℹ dist/api/api.d.ts  3.08 kB │ gzip: 0.86 kB
115
- ℹ dist/client/client.svelte.d.ts  2.88 kB │ gzip: 0.81 kB
116
- ℹ dist/client/vue.d.ts  2.82 kB │ gzip: 0.91 kB
117
- ℹ dist/mod-client.d.ts  1.92 kB │ gzip: 0.59 kB
118
- ℹ dist/api/request-context-storage.d.ts  1.79 kB │ gzip: 0.80 kB
119
- ℹ dist/api/shared-types.d.ts  1.21 kB │ gzip: 0.51 kB
120
- ℹ dist/mod.d.ts  1.10 kB │ gzip: 0.34 kB
121
- ℹ dist/integrations/react-ssr.d.ts  0.78 kB │ gzip: 0.38 kB
122
- ℹ dist/request/request.d.ts  0.48 kB │ gzip: 0.17 kB
123
- ℹ dist/internal/symbols.d.ts  0.32 kB │ gzip: 0.22 kB
124
- ℹ dist/api/request-input-context.d.ts  3.08 kB │ gzip: 0.98 kB
125
- ℹ dist/api/internal/path.d.ts  2.91 kB │ gzip: 0.97 kB
126
- ℹ dist/api/request-middleware.d.ts  2.54 kB │ gzip: 0.90 kB
127
- ℹ dist/client/client-error.d.ts  2.45 kB │ gzip: 0.81 kB
128
- ℹ dist/api/mutable-request-state.d.ts  2.29 kB │ gzip: 0.90 kB
129
- ℹ dist/api/request-output-context.d.ts  1.64 kB │ gzip: 0.64 kB
130
- ℹ dist/api/internal/response-stream.d.ts  1.33 kB │ gzip: 0.71 kB
131
- ℹ dist/http/http-status.d.ts  1.26 kB │ gzip: 0.60 kB
132
- ℹ dist/api/route-handler-input-options.d.ts  0.72 kB │ gzip: 0.38 kB
133
- ℹ dist/api/error.d.ts  0.72 kB │ gzip: 0.33 kB
134
- ℹ dist/api/fragno-response.d.ts  0.60 kB │ gzip: 0.30 kB
135
- ℹ dist/api/bind-services.d.ts  0.42 kB │ gzip: 0.25 kB
136
- ℹ dist/util/types-util.d.ts  0.35 kB │ gzip: 0.23 kB
137
- ℹ 127 files, total: 548.46 kB
138
- ✔ Build complete in 7459ms
10
+ ℹ dist/api/fragment-instantiator.js 22.15 kB │ gzip: 5.53 kB
11
+ ℹ dist/client/client.js 17.87 kB │ gzip: 4.49 kB
12
+ ℹ dist/api/fragment-definition-builder.js 11.21 kB │ gzip: 2.30 kB
13
+ ℹ dist/test/test.js  3.67 kB │ gzip: 1.31 kB
14
+ ℹ dist/client/vue.js  3.30 kB │ gzip: 1.06 kB
15
+ ℹ dist/client/client.svelte.js  3.20 kB │ gzip: 0.91 kB
16
+ ℹ dist/client/solid.js  2.95 kB │ gzip: 0.91 kB
17
+ ℹ dist/client/react.js  2.43 kB │ gzip: 0.89 kB
18
+ ℹ dist/mod-client.js  2.24 kB │ gzip: 0.75 kB
19
+ ℹ dist/client/vanilla.js  2.15 kB │ gzip: 0.66 kB
20
+ ℹ dist/api/request-context-storage.js  1.49 kB │ gzip: 0.75 kB
21
+ ℹ dist/integrations/react-ssr.js  1.26 kB │ gzip: 0.64 kB
22
+ ℹ dist/api/route.js  0.67 kB │ gzip: 0.34 kB
23
+ ℹ dist/internal/trace-context.js  0.53 kB │ gzip: 0.26 kB
24
+ ℹ dist/mod.js  0.39 kB │ gzip: 0.17 kB
25
+ ℹ dist/request/request.js  0.37 kB │ gzip: 0.13 kB
26
+ ℹ dist/internal/symbols.js  0.31 kB │ gzip: 0.22 kB
27
+ ℹ dist/api/api.js  0.25 kB │ gzip: 0.17 kB
28
+ ℹ dist/api/shared-types.js  0.01 kB │ gzip: 0.03 kB
29
+ ℹ dist/api/fragment-instantiator.js.map 63.09 kB │ gzip: 14.46 kB
30
+ ℹ dist/client/client.js.map 50.89 kB │ gzip: 11.58 kB
31
+ ℹ dist/api/fragment-definition-builder.js.map 36.74 kB │ gzip: 5.80 kB
32
+ ℹ dist/api/route.js.map 14.07 kB │ gzip: 2.38 kB
33
+ ℹ dist/api/internal/path.js.map 11.83 kB │ gzip: 3.06 kB
34
+ ℹ dist/client/vue.js.map 11.80 kB │ gzip: 3.17 kB
35
+ ℹ dist/client/client.svelte.js.map 11.35 kB │ gzip: 2.76 kB
36
+ ℹ dist/api/request-input-context.js.map 11.05 kB │ gzip: 3.01 kB
37
+ ℹ dist/client/solid.js.map 11.00 kB │ gzip: 2.79 kB
38
+ ℹ dist/client/internal/ndjson-streaming.js.map 10.96 kB │ gzip: 3.00 kB
39
+ ℹ dist/api/fragment-instantiator.d.ts.map 10.48 kB │ gzip: 3.95 kB
40
+ ℹ dist/client/client.d.ts.map 10.19 kB │ gzip: 3.78 kB
41
+ ℹ dist/client/react.js.map  9.54 kB │ gzip: 3.03 kB
42
+ ℹ dist/client/vanilla.js.map  9.20 kB │ gzip: 2.32 kB
43
+ ℹ dist/api/fragment-definition-builder.d.ts.map  8.81 kB │ gzip: 3.52 kB
44
+ ℹ dist/test/test.js.map  8.80 kB │ gzip: 2.50 kB
45
+ ℹ dist/api/request-output-context.js.map  7.53 kB │ gzip: 2.29 kB
46
+ ℹ dist/mod-client.js.map  6.52 kB │ gzip: 1.78 kB
47
+ ℹ dist/client/client-error.js.map  5.88 kB │ gzip: 1.70 kB
48
+ ℹ dist/api/route.d.ts.map  5.79 kB │ gzip: 2.19 kB
49
+ ℹ dist/api/request-middleware.js.map  5.68 kB │ gzip: 1.97 kB
50
+ ℹ dist/api/request-input-context.js  5.34 kB │ gzip: 1.58 kB
51
+ ℹ dist/api/api.js.map  5.19 kB │ gzip: 1.38 kB
52
+ ℹ dist/client/internal/ndjson-streaming.js  4.96 kB │ gzip: 1.46 kB
53
+ ℹ dist/api/internal/response-stream.js.map  4.28 kB │ gzip: 1.80 kB
54
+ ℹ dist/api/fragno-response.js.map  4.18 kB │ gzip: 1.47 kB
55
+ ℹ dist/util/async.js.map  3.84 kB │ gzip: 1.53 kB
56
+ ℹ dist/api/mutable-request-state.js.map  3.76 kB │ gzip: 1.34 kB
57
+ ℹ dist/api/request-output-context.js  3.38 kB │ gzip: 1.02 kB
58
+ ℹ dist/util/content-type.js.map  3.24 kB │ gzip: 1.23 kB
59
+ ℹ dist/client/client-error.js  3.17 kB │ gzip: 0.91 kB
60
+ ℹ dist/util/ssr.js.map  2.95 kB │ gzip: 1.24 kB
61
+ ℹ dist/api/request-context-storage.js.map  2.94 kB │ gzip: 1.21 kB
62
+ ℹ dist/client/vanilla.d.ts.map  2.89 kB │ gzip: 1.10 kB
63
+ ℹ dist/client/react.d.ts.map  2.64 kB │ gzip: 1.17 kB
64
+ ℹ dist/client/vue.d.ts.map  2.50 kB │ gzip: 1.09 kB
65
+ ℹ dist/client/solid.d.ts.map  2.44 kB │ gzip: 1.06 kB
66
+ ℹ dist/client/internal/fetcher-merge.js.map  2.44 kB │ gzip: 0.96 kB
67
+ ℹ dist/util/nanostores.js.map  2.43 kB │ gzip: 0.87 kB
68
+ ℹ dist/api/mutable-request-state.js  2.40 kB │ gzip: 0.91 kB
69
+ ℹ dist/client/client.svelte.d.ts.map  2.32 kB │ gzip: 0.97 kB
70
+ ℹ dist/api/internal/path.js  2.23 kB │ gzip: 0.79 kB
71
+ ℹ dist/api/request-middleware.js  2.17 kB │ gzip: 0.79 kB
72
+ ℹ dist/runtime.js.map  2.04 kB │ gzip: 0.86 kB
73
+ ℹ dist/api/api.d.ts.map  1.99 kB │ gzip: 0.90 kB
74
+ ℹ dist/api/error.js.map  1.96 kB │ gzip: 0.76 kB
75
+ ℹ dist/api/bind-services.js.map  1.96 kB │ gzip: 0.85 kB
76
+ ℹ dist/api/internal/response-stream.js  1.76 kB │ gzip: 0.73 kB
77
+ ℹ dist/api/request-input-context.d.ts.map  1.67 kB │ gzip: 0.72 kB
78
+ ℹ dist/integrations/react-ssr.js.map  1.65 kB │ gzip: 0.84 kB
79
+ ℹ dist/api/fragno-response.js  1.65 kB │ gzip: 0.69 kB
80
+ ℹ dist/test/test.d.ts.map  1.64 kB │ gzip: 0.76 kB
81
+ ℹ dist/util/content-type.js  1.61 kB │ gzip: 0.69 kB
82
+ ℹ dist/api/internal/path.d.ts.map  1.58 kB │ gzip: 0.72 kB
83
+ ℹ dist/api/request-middleware.d.ts.map  1.53 kB │ gzip: 0.71 kB
84
+ ℹ dist/internal/trace-context.js.map  1.36 kB │ gzip: 0.61 kB
85
+ ℹ dist/util/ssr.js  1.34 kB │ gzip: 0.59 kB
86
+ ℹ dist/api/request-output-context.d.ts.map  1.29 kB │ gzip: 0.60 kB
87
+ ℹ dist/client/client-error.d.ts.map  1.26 kB │ gzip: 0.55 kB
88
+ ℹ dist/util/nanostores.js  1.25 kB │ gzip: 0.47 kB
89
+ ℹ dist/client/internal/fetcher-merge.js  1.23 kB │ gzip: 0.55 kB
90
+ ℹ dist/util/async.js  1.19 kB │ gzip: 0.57 kB
91
+ ℹ dist/api/error.js  0.96 kB │ gzip: 0.38 kB
92
+ ℹ dist/runtime.js  0.94 kB │ gzip: 0.51 kB
93
+ ℹ dist/api/bind-services.js  0.79 kB │ gzip: 0.40 kB
94
+ ℹ dist/api/error.d.ts.map  0.58 kB │ gzip: 0.29 kB
95
+ ℹ dist/http/http-status.d.ts.map  0.56 kB │ gzip: 0.25 kB
96
+ ℹ dist/api/request-context-storage.d.ts.map  0.56 kB │ gzip: 0.31 kB
97
+ ℹ dist/api/route-handler-input-options.d.ts.map  0.54 kB │ gzip: 0.29 kB
98
+ ℹ dist/api/internal/route.js.map  0.50 kB │ gzip: 0.32 kB
99
+ ℹ dist/internal/trace-context.d.ts.map  0.48 kB │ gzip: 0.27 kB
100
+ ℹ dist/api/bind-services.d.ts.map  0.47 kB │ gzip: 0.28 kB
101
+ ℹ dist/api/internal/response-stream.d.ts.map  0.37 kB │ gzip: 0.26 kB
102
+ ℹ dist/api/fragno-response.d.ts.map  0.37 kB │ gzip: 0.23 kB
103
+ ℹ dist/internal/symbols.js.map  0.35 kB │ gzip: 0.26 kB
104
+ ℹ dist/api/shared-types.d.ts.map  0.31 kB │ gzip: 0.23 kB
105
+ ℹ dist/api/internal/route.js  0.28 kB │ gzip: 0.20 kB
106
+ ℹ dist/api/mutable-request-state.d.ts.map  0.28 kB │ gzip: 0.19 kB
107
+ ℹ dist/integrations/react-ssr.d.ts.map  0.23 kB │ gzip: 0.17 kB
108
+ ℹ dist/util/types-util.d.ts.map  0.21 kB │ gzip: 0.17 kB
109
+ ℹ dist/runtime.d.ts.map  0.19 kB │ gzip: 0.15 kB
110
+ ℹ dist/mod-client.d.ts.map  0.16 kB │ gzip: 0.14 kB
111
+ ℹ dist/internal/symbols.d.ts.map  0.14 kB │ gzip: 0.13 kB
112
+ ℹ dist/api/fragment-definition-builder.d.ts 17.06 kB │ gzip: 3.40 kB
113
+ ℹ dist/api/fragment-instantiator.d.ts 16.86 kB │ gzip: 3.63 kB
114
+ ℹ dist/client/client.d.ts 13.91 kB │ gzip: 3.15 kB
115
+ ℹ dist/api/route.d.ts  7.07 kB │ gzip: 1.09 kB
116
+ ℹ dist/test/test.d.ts  5.30 kB │ gzip: 1.57 kB
117
+ ℹ dist/api/api.d.ts  3.93 kB │ gzip: 1.17 kB
118
+ ℹ dist/client/vanilla.d.ts  3.70 kB │ gzip: 1.04 kB
119
+ ℹ dist/client/react.d.ts  3.48 kB │ gzip: 1.17 kB
120
+ ℹ dist/client/vue.d.ts  3.18 kB │ gzip: 1.00 kB
121
+ ℹ dist/client/solid.d.ts  3.14 kB │ gzip: 0.95 kB
122
+ ℹ dist/client/client.svelte.d.ts  2.88 kB │ gzip: 0.81 kB
123
+ ℹ dist/api/request-context-storage.d.ts  1.79 kB │ gzip: 0.80 kB
124
+ ℹ dist/mod-client.d.ts  1.45 kB │ gzip: 0.47 kB
125
+ ℹ dist/mod.d.ts  1.33 kB │ gzip: 0.39 kB
126
+ ℹ dist/api/shared-types.d.ts  1.21 kB │ gzip: 0.51 kB
127
+ ℹ dist/internal/trace-context.d.ts  0.84 kB │ gzip: 0.38 kB
128
+ ℹ dist/integrations/react-ssr.d.ts  0.78 kB │ gzip: 0.38 kB
129
+ ℹ dist/request/request.d.ts  0.48 kB │ gzip: 0.17 kB
130
+ ℹ dist/internal/symbols.d.ts  0.32 kB │ gzip: 0.22 kB
131
+ ℹ dist/api/request-input-context.d.ts  4.59 kB │ gzip: 1.42 kB
132
+ ℹ dist/api/internal/path.d.ts  2.91 kB │ gzip: 0.97 kB
133
+ ℹ dist/api/request-middleware.d.ts  2.55 kB │ gzip: 0.90 kB
134
+ ℹ dist/client/client-error.d.ts  2.45 kB │ gzip: 0.81 kB
135
+ ℹ dist/api/mutable-request-state.d.ts  2.29 kB │ gzip: 0.90 kB
136
+ ℹ dist/api/request-output-context.d.ts  1.64 kB │ gzip: 0.64 kB
137
+ ℹ dist/api/internal/response-stream.d.ts  1.33 kB │ gzip: 0.71 kB
138
+ ℹ dist/http/http-status.d.ts  1.26 kB │ gzip: 0.60 kB
139
+ ℹ dist/api/route-handler-input-options.d.ts  0.72 kB │ gzip: 0.38 kB
140
+ ℹ dist/api/error.d.ts  0.72 kB │ gzip: 0.33 kB
141
+ ℹ dist/api/fragno-response.d.ts  0.60 kB │ gzip: 0.30 kB
142
+ ℹ dist/api/bind-services.d.ts  0.42 kB │ gzip: 0.25 kB
143
+ ℹ dist/util/types-util.d.ts  0.35 kB │ gzip: 0.23 kB
144
+ ℹ dist/runtime.d.ts  0.33 kB │ gzip: 0.20 kB
145
+ ℹ 135 files, total: 619.46 kB
146
+ ✔ Build complete in 14026ms
package/CHANGELOG.md CHANGED
@@ -1,5 +1,68 @@
1
1
  # @fragno-dev/core
2
2
 
3
+ ## 0.2.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 301e2f8: pathParams in RequestInputContext now returns decoded values
8
+
9
+ ### Patch Changes
10
+
11
+ - f569301: feat(vue): add `createStore` support to Vue client, matching React client functionality.
12
+ The `useFragno` hook now handles `FragnoStoreData` objects created via `client.createStore()` and
13
+ transforms them into Vue composables that return reactive store values.
14
+ - 20a98f8: feat: expose internal outbox route under /\_internal when outbox is enabled
15
+ - 7e1eb47: feat(db): add processAt scheduling and reusable durable hooks dispatchers.
16
+ - 5f6f90e: feat: add FormData file upload support for routes
17
+
18
+ Routes can now accept file uploads via FormData by setting `contentType: "multipart/form-data"` on
19
+ the route definition. The server validates incoming Content-Type headers and rejects mismatched
20
+ requests with 415 Unsupported Media Type.
21
+
22
+ **Route definition:**
23
+
24
+ ```typescript
25
+ defineRoute({
26
+ method: "POST",
27
+ path: "/upload",
28
+ contentType: "multipart/form-data",
29
+ async handler(ctx, res) {
30
+ const formData = ctx.formData();
31
+ const file = formData.get("file") as File;
32
+ return res.json({ filename: file.name });
33
+ },
34
+ });
35
+ ```
36
+
37
+ **New APIs:**
38
+ - `ctx.formData()` - Access the request body as FormData
39
+ - `ctx.isFormData()` - Check if the request body is FormData
40
+ - `RouteContentType` - Type for the `contentType` field ("application/json" |
41
+ "multipart/form-data")
42
+
43
+ **Client-side:** The client automatically detects FormData/File in request bodies and sends them
44
+ with the correct Content-Type header (letting the browser set the multipart boundary).
45
+
46
+ - 2eafef4: fix(core): handle ReadableStream request bodies for fetch and validation.
47
+ - 7d7b2b9: fix(core): run internal fragment middleware and type internal routes in ifMatchesRoute
48
+ - a79e90d: feat: add trace recording support to model checker runs
49
+ - 7c60341: fix(core): make browser stubs proxy-safe for extra chaining methods.
50
+ - afb06a4: feat(core,wf): add FragnoRuntime defaults and require runtime in workflows config.
51
+ - 53e5f97: fix(core,fragment-upload): honor client mount routes and avoid upload config crashes.
52
+ - c5fd7b3: feat(core): support application/octet-stream request bodies
53
+
54
+ ## 0.1.11
55
+
56
+ ### Patch Changes
57
+
58
+ - bc072dd: fix: export StandardSchema interface
59
+ - e46d2a7: fix: set `workerd` package exports so Cloudflare Workers import the server bundle while
60
+ server-side rendering instead of the browser bundle.
61
+ - fcce048: feat: use "dry run" mode when searching for database schemas to be more lenient when
62
+ instantiating a Fragment
63
+ - 147bdd6: Add migrate() helper and fragment type utilities
64
+ - 75e298f: changed export for development builds
65
+
3
66
  ## 0.1.10
4
67
 
5
68
  ### Patch Changes
package/dist/api/api.d.ts CHANGED
@@ -3,7 +3,7 @@ import { RequestOutputContext } from "./request-output-context.js";
3
3
  import { FragnoApiError, FragnoApiValidationError } from "./error.js";
4
4
  import { RouteHandlerInputOptions } from "./route-handler-input-options.js";
5
5
  import { FragnoPublicConfig } from "./shared-types.js";
6
- import { StandardSchemaV1 } from "@standard-schema/spec";
6
+ import { StandardSchemaV1, StandardSchemaV1 as StandardSchemaV1$1 } from "@standard-schema/spec";
7
7
 
8
8
  //#region src/api/api.d.ts
9
9
  type HTTPMethod = "GET" | "POST" | "PUT" | "DELETE" | "PATCH" | "HEAD" | "OPTIONS";
@@ -18,21 +18,39 @@ type PathError<T extends string, TMessage extends string> = T & [`Error: ${TMess
18
18
  */
19
19
  type ValidPath<T extends string = string> = T extends `/${infer Rest}` ? Rest extends "" ? PathError<T, "Path cannot be just '/'."> : T extends `${string}/` ? PathError<T, "Path cannot end with '/'."> : T : PathError<T, "Path must start with '/'.">;
20
20
  interface RequestThisContext {}
21
- interface FragnoRouteConfig<TMethod extends HTTPMethod, TPath extends string, TInputSchema extends StandardSchemaV1 | undefined, TOutputSchema extends StandardSchemaV1 | undefined, TErrorCode extends string = string, TQueryParameters extends string = string, TThisContext extends RequestThisContext = RequestThisContext> {
21
+ /**
22
+ * Content types that can be accepted by a route.
23
+ *
24
+ * - `"application/json"` (default): JSON request body, validated against inputSchema
25
+ * - `"multipart/form-data"`: FormData request body (file uploads), no schema validation
26
+ */
27
+ type RouteContentType = "application/json" | "multipart/form-data" | "application/octet-stream";
28
+ interface FragnoRouteConfig<TMethod extends HTTPMethod, TPath extends string, TInputSchema extends StandardSchemaV1$1 | undefined, TOutputSchema extends StandardSchemaV1$1 | undefined, TErrorCode extends string = string, TQueryParameters extends string = string, TThisContext extends RequestThisContext = RequestThisContext> {
22
29
  method: TMethod;
23
30
  path: TPath;
31
+ /**
32
+ * The expected content type for this route's request body.
33
+ *
34
+ * - `"application/json"` (default): Expects JSON body, will be validated against inputSchema
35
+ * - `"multipart/form-data"`: Expects FormData body (for file uploads), use `ctx.formData()` in handler
36
+ *
37
+ * The server will reject requests with mismatched Content-Type headers.
38
+ *
39
+ * @default "application/json"
40
+ */
41
+ contentType?: RouteContentType;
24
42
  inputSchema?: TInputSchema;
25
43
  outputSchema?: TOutputSchema;
26
44
  errorCodes?: readonly TErrorCode[];
27
45
  queryParameters?: readonly TQueryParameters[];
28
46
  handler(this: TThisContext, inputCtx: RequestInputContext<TPath, TInputSchema>, outputCtx: RequestOutputContext<TOutputSchema, TErrorCode>): Promise<Response>;
29
47
  }
30
- declare function addRoute<TMethod extends HTTPMethod, TPath extends string, TOutputSchema extends StandardSchemaV1 | undefined, TErrorCode extends string = string, TQueryParameters extends string = string, TThisContext extends RequestThisContext = RequestThisContext>(route: FragnoRouteConfig<TMethod, ValidPath<TPath>, undefined, TOutputSchema, TErrorCode, TQueryParameters, TThisContext> & {
48
+ declare function addRoute<TMethod extends HTTPMethod, TPath extends string, TOutputSchema extends StandardSchemaV1$1 | undefined, TErrorCode extends string = string, TQueryParameters extends string = string, TThisContext extends RequestThisContext = RequestThisContext>(route: FragnoRouteConfig<TMethod, ValidPath<TPath>, undefined, TOutputSchema, TErrorCode, TQueryParameters, TThisContext> & {
31
49
  inputSchema?: undefined;
32
50
  }): FragnoRouteConfig<TMethod, TPath, undefined, TOutputSchema, TErrorCode, TQueryParameters, TThisContext>;
33
- declare function addRoute<TMethod extends HTTPMethod, TPath extends string, TInputSchema extends StandardSchemaV1, TOutputSchema extends StandardSchemaV1 | undefined, TErrorCode extends string = string, TQueryParameters extends string = string, TThisContext extends RequestThisContext = RequestThisContext>(route: FragnoRouteConfig<TMethod, ValidPath<TPath>, TInputSchema, TOutputSchema, TErrorCode, TQueryParameters, TThisContext> & {
51
+ declare function addRoute<TMethod extends HTTPMethod, TPath extends string, TInputSchema extends StandardSchemaV1$1, TOutputSchema extends StandardSchemaV1$1 | undefined, TErrorCode extends string = string, TQueryParameters extends string = string, TThisContext extends RequestThisContext = RequestThisContext>(route: FragnoRouteConfig<TMethod, ValidPath<TPath>, TInputSchema, TOutputSchema, TErrorCode, TQueryParameters, TThisContext> & {
34
52
  inputSchema: TInputSchema;
35
53
  }): FragnoRouteConfig<TMethod, TPath, TInputSchema, TOutputSchema, TErrorCode, TQueryParameters, TThisContext>;
36
54
  //#endregion
37
- export { FragnoApiError, FragnoApiValidationError, type FragnoPublicConfig, FragnoRouteConfig, HTTPMethod, NonGetHTTPMethod, RequestThisContext, type RouteHandlerInputOptions, ValidPath, addRoute };
55
+ export { FragnoApiError, FragnoApiValidationError, type FragnoPublicConfig, FragnoRouteConfig, HTTPMethod, NonGetHTTPMethod, RequestThisContext, RouteContentType, type RouteHandlerInputOptions, type StandardSchemaV1, ValidPath, addRoute };
38
56
  //# sourceMappingURL=api.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"api.d.ts","names":[],"sources":["../../src/api/api.ts"],"sourcesContent":[],"mappings":";;;;;;;;KAIY,UAAA;KACA,gBAAA,GAAmB,QAAQ;KAGlC,uDAAuD,eAAe;;;AAJ3E;AACA;AAA0D;AAY1D;;AACI,KADQ,SACR,CAAA,UAAA,MAAA,GAAA,MAAA,CAAA,GAD+C,CAC/C,SAAA,IAAA,KAAA,KAAA,EAAA,GAAA,IAAA,SAAA,EAAA,GACE,SADF,CACY,CADZ,EAAA,0BAAA,CAAA,GAEE,CAFF,SAAA,GAAA,MAAA,GAAA,GAGI,SAHJ,CAGc,CAHd,EAAA,2BAAA,CAAA,GAII,CAJJ,GAKA,SALA,CAKU,CALV,EAAA,2BAAA,CAAA;AACY,UAMC,kBAAA,CAND;AACV,UAOW,iBAPX,CAAA,gBAQY,UARZ,EAAA,cAAA,MAAA,EAAA,qBAUiB,gBAVjB,GAAA,SAAA,EAAA,sBAWkB,gBAXlB,GAAA,SAAA,EAAA,mBAAA,MAAA,GAAA,MAAA,EAAA,yBAAA,MAAA,GAAA,MAAA,EAAA,qBAciB,kBAdjB,GAcsC,kBAdtC,CAAA,CAAA;EACY,MAAA,EAeR,OAfQ;EAAV,IAAA,EAgBA,KAhBA;EACA,WAAA,CAAA,EAgBQ,YAhBR;EACM,YAAA,CAAA,EAgBG,aAhBH;EAAV,UAAA,CAAA,EAAA,SAiBoB,UAjBpB,EAAA;EAAS,eAAA,CAAA,EAAA,SAkBgB,gBAlBhB,EAAA;EAEI,OAAA,CAAA,IAAA,EAkBP,YAlByB,EAAA,QAAA,EAmBrB,mBAnBqB,CAmBD,KAnBC,EAmBM,YAnBN,CAAA,EAAA,SAAA,EAoBpB,oBApBoB,CAoBC,aApBD,EAoBgB,UApBhB,CAAA,CAAA,EAqB9B,OArB8B,CAqBtB,QArBsB,CAAA;AAEnC;AACkB,iBAsBF,QAtBE,CAAA,gBAuBA,UAvBA,EAAA,cAAA,MAAA,EAAA,sBAyBM,gBAzBN,GAAA,SAAA,EAAA,mBAAA,MAAA,GAAA,MAAA,EAAA,yBAAA,MAAA,GAAA,MAAA,EAAA,qBA4BK,kBA5BL,GA4B0B,kBA5B1B,CAAA,CAAA,KAAA,EA8BT,iBA9BS,CA+Bd,OA/Bc,EAgCd,SAhCc,CAgCJ,KAhCI,CAAA,EAAA,SAAA,EAkCd,aAlCc,EAmCd,UAnCc,EAoCd,gBApCc,EAqCd,YArCc,CAAA,GAAA;EAEK,WAAA,CAAA,EAAA,SAAA;CACC,CAAA,EAoCrB,iBApCqB,CAqCtB,OArCsB,EAsCtB,KAtCsB,EAAA,SAAA,EAwCtB,aAxCsB,EAyCtB,UAzCsB,EA0CtB,gBA1CsB,EA2CtB,YA3CsB,CAAA;AAGD,iBA4CP,QA5CO,CAAA,gBA6CL,UA7CK,EAAA,cAAA,MAAA,EAAA,qBA+CA,gBA/CA,EAAA,sBAgDC,gBAhDD,GAAA,SAAA,EAAA,mBAAA,MAAA,GAAA,MAAA,EAAA,yBAAA,MAAA,GAAA,MAAA,EAAA,qBAmDA,kBAnDA,GAmDqB,kBAnDrB,CAAA,CAAA,KAAA,EAqDd,iBArDc,CAsDnB,OAtDmB,EAuDnB,SAvDmB,CAuDT,KAvDS,CAAA,EAwDnB,YAxDmB,EAyDnB,aAzDmB,EA0DnB,UA1DmB,EA2DnB,gBA3DmB,EA4DnB,YA5DmB,CAAA,GAAA;EAAqB,WAAA,EA8D3B,YA9D2B;CAElC,CAAA,EA8DP,iBA9DO,CA+DR,OA/DQ,EAgER,KAhEQ,EAiER,YAjEQ,EAkER,aAlEQ,EAmER,UAnEQ,EAoER,gBApEQ,EAqER,YArEQ,CAAA"}
1
+ {"version":3,"file":"api.d.ts","names":[],"sources":["../../src/api/api.ts"],"sourcesContent":[],"mappings":";;;;;;;;KAMY,UAAA;KACA,gBAAA,GAAmB,QAAQ;KAGlC,uDAAuD,eAAe;;AAJ3E;AACA;AAA0D;AAY1D;;;AAEgB,KAFJ,SAEI,CAAA,UAAA,MAAA,GAAA,MAAA,CAAA,GAFmC,CAEnC,SAAA,IAAA,KAAA,KAAA,EAAA,GADZ,IACY,SAAA,EAAA,GAAV,SAAU,CAAA,CAAA,EAAA,0BAAA,CAAA,GACV,CADU,SAAA,GAAA,MAAA,GAAA,GAER,SAFQ,CAEE,CAFF,EAAA,2BAAA,CAAA,GAGR,CAHQ,GAIZ,SAJY,CAIF,CAJE,EAAA,2BAAA,CAAA;AAAV,UAMW,kBAAA,CANX;;;;;;;AAMW,KAQL,gBAAA,GARuB,kBAAA,GAAA,qBAAA,GAAA,0BAAA;AAQvB,UAKK,iBALW,CAAA,gBAMV,UANU,EAAA,cAAA,MAAA,EAAA,qBAQL,kBARK,GAAA,SAAA,EAAA,sBASJ,kBATI,GAAA,SAAA,EAAA,mBAAA,MAAA,GAAA,MAAA,EAAA,yBAAA,MAAA,GAAA,MAAA,EAAA,qBAYL,kBAZK,GAYgB,kBAZhB,CAAA,CAAA;EAKX,MAAA,EASP,OATO;EACC,IAAA,EASV,KATU;EAEK;;;;;;;;;;EAsBM,WAAA,CAAA,EAJb,gBAIa;EAEnB,WAAA,CAAA,EALM,YAKN;EACwB,YAAA,CAAA,EALjB,aAKiB;EAAO,UAAA,CAAA,EAAA,SAJjB,UAIiB,EAAA;EAA3B,eAAA,CAAA,EAAA,SAHe,gBAGf,EAAA;EACsB,OAAA,CAAA,IAAA,EAF1B,YAE0B,EAAA,QAAA,EADtB,mBACsB,CADF,KACE,EADK,YACL,CAAA,EAAA,SAAA,EAArB,oBAAqB,CAAA,aAAA,EAAe,UAAf,CAAA,CAAA,EAC/B,OAD+B,CACvB,QADuB,CAAA;;AAArB,iBAKC,QALD,CAAA,gBAMG,UANH,EAAA,cAAA,MAAA,EAAA,sBAQS,kBART,GAAA,SAAA,EAAA,mBAAA,MAAA,GAAA,MAAA,EAAA,yBAAA,MAAA,GAAA,MAAA,EAAA,qBAWQ,kBAXR,GAW6B,kBAX7B,CAAA,CAAA,KAAA,EAaN,iBAbM,CAcX,OAdW,EAeX,SAfW,CAeD,KAfC,CAAA,EAAA,SAAA,EAiBX,aAjBW,EAkBX,UAlBW,EAmBX,gBAnBW,EAoBX,YApBW,CAAA,GAAA;EACF,WAAA,CAAA,EAAA,SAAA;CAAR,CAAA,EAqBF,iBArBE,CAsBH,OAtBG,EAuBH,KAvBG,EAAA,SAAA,EAyBH,aAzBG,EA0BH,UA1BG,EA2BH,gBA3BG,EA4BH,YA5BG,CAAA;AAAO,iBAgCI,QAhCJ,CAAA,gBAiCM,UAjCN,EAAA,cAAA,MAAA,EAAA,qBAmCW,kBAnCX,EAAA,sBAoCY,kBApCZ,GAAA,SAAA,EAAA,mBAAA,MAAA,GAAA,MAAA,EAAA,yBAAA,MAAA,GAAA,MAAA,EAAA,qBAuCW,kBAvCX,GAuCgC,kBAvChC,CAAA,CAAA,KAAA,EAyCH,iBAzCG,CA0CR,OA1CQ,EA2CR,SA3CQ,CA2CE,KA3CF,CAAA,EA4CR,YA5CQ,EA6CR,aA7CQ,EA8CR,UA9CQ,EA+CR,gBA/CQ,EAgDR,YAhDQ,CAAA,GAAA;EAII,WAAQ,EA8CP,YA9CO;CACN,CAAA,EA+Cf,iBA/Ce,CAgDhB,OAhDgB,EAiDhB,KAjDgB,EAkDhB,YAlDgB,EAmDhB,aAnDgB,EAoDhB,UApDgB,EAqDhB,gBArDgB,EAsDhB,YAtDgB,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"api.js","names":[],"sources":["../../src/api/api.ts"],"sourcesContent":["import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport type { RequestInputContext } from \"./request-input-context\";\nimport type { RequestOutputContext } from \"./request-output-context\";\n\nexport type HTTPMethod = \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\" | \"HEAD\" | \"OPTIONS\";\nexport type NonGetHTTPMethod = Exclude<HTTPMethod, \"GET\">;\n\n// Helper type to create branded error messages that are still assignable to string\ntype PathError<T extends string, TMessage extends string> = T & [`Error: ${TMessage}`];\n\n/**\n * A valid path string that:\n * - Is non-empty\n * - Starts with \"/\"\n * - Is not just \"/\"\n * - Does not end with \"/\"\n */\nexport type ValidPath<T extends string = string> = T extends `/${infer Rest}`\n ? Rest extends \"\"\n ? PathError<T, \"Path cannot be just '/'.\"> // Excludes \"/\"\n : T extends `${string}/`\n ? PathError<T, \"Path cannot end with '/'.\"> // Excludes paths ending with \"/\"\n : T\n : PathError<T, \"Path must start with '/'.\">; // Excludes paths not starting with \"/\"\n\nexport interface RequestThisContext {}\n\nexport interface FragnoRouteConfig<\n TMethod extends HTTPMethod,\n TPath extends string,\n TInputSchema extends StandardSchemaV1 | undefined,\n TOutputSchema extends StandardSchemaV1 | undefined,\n TErrorCode extends string = string,\n TQueryParameters extends string = string,\n TThisContext extends RequestThisContext = RequestThisContext,\n> {\n method: TMethod;\n path: TPath;\n inputSchema?: TInputSchema;\n outputSchema?: TOutputSchema;\n errorCodes?: readonly TErrorCode[];\n queryParameters?: readonly TQueryParameters[];\n handler(\n this: TThisContext,\n inputCtx: RequestInputContext<TPath, TInputSchema>,\n outputCtx: RequestOutputContext<TOutputSchema, TErrorCode>,\n ): Promise<Response>;\n}\n\n// Overload for routes without inputSchema\nexport function addRoute<\n TMethod extends HTTPMethod,\n TPath extends string,\n TOutputSchema extends StandardSchemaV1 | undefined,\n TErrorCode extends string = string,\n TQueryParameters extends string = string,\n TThisContext extends RequestThisContext = RequestThisContext,\n>(\n route: FragnoRouteConfig<\n TMethod,\n ValidPath<TPath>,\n undefined,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n > & { inputSchema?: undefined },\n): FragnoRouteConfig<\n TMethod,\n TPath,\n undefined,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n>;\n\n// Overload for routes with inputSchema\nexport function addRoute<\n TMethod extends HTTPMethod,\n TPath extends string,\n TInputSchema extends StandardSchemaV1,\n TOutputSchema extends StandardSchemaV1 | undefined,\n TErrorCode extends string = string,\n TQueryParameters extends string = string,\n TThisContext extends RequestThisContext = RequestThisContext,\n>(\n route: FragnoRouteConfig<\n TMethod,\n ValidPath<TPath>,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n > & {\n inputSchema: TInputSchema;\n },\n): FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n>;\n\n// Implementation\nexport function addRoute<\n TMethod extends HTTPMethod,\n TPath extends string,\n TInputSchema extends StandardSchemaV1 | undefined,\n TOutputSchema extends StandardSchemaV1 | undefined,\n TErrorCode extends string = string,\n TQueryParameters extends string = string,\n TThisContext extends RequestThisContext = RequestThisContext,\n>(\n route: FragnoRouteConfig<\n TMethod,\n ValidPath<TPath>,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n >,\n): FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n> {\n return route;\n}\n\nexport { FragnoApiError, FragnoApiValidationError } from \"./error\";\nexport type { RouteHandlerInputOptions } from \"./route-handler-input-options\";\nexport type { FragnoPublicConfig } from \"./shared-types\";\n"],"mappings":";;;AA6GA,SAAgB,SASd,OAiBA;AACA,QAAO"}
1
+ {"version":3,"file":"api.js","names":[],"sources":["../../src/api/api.ts"],"sourcesContent":["import type { StandardSchemaV1 } from \"@standard-schema/spec\";\nimport type { RequestInputContext } from \"./request-input-context\";\nimport type { RequestOutputContext } from \"./request-output-context\";\n\nexport type { StandardSchemaV1 } from \"@standard-schema/spec\";\n\nexport type HTTPMethod = \"GET\" | \"POST\" | \"PUT\" | \"DELETE\" | \"PATCH\" | \"HEAD\" | \"OPTIONS\";\nexport type NonGetHTTPMethod = Exclude<HTTPMethod, \"GET\">;\n\n// Helper type to create branded error messages that are still assignable to string\ntype PathError<T extends string, TMessage extends string> = T & [`Error: ${TMessage}`];\n\n/**\n * A valid path string that:\n * - Is non-empty\n * - Starts with \"/\"\n * - Is not just \"/\"\n * - Does not end with \"/\"\n */\nexport type ValidPath<T extends string = string> = T extends `/${infer Rest}`\n ? Rest extends \"\"\n ? PathError<T, \"Path cannot be just '/'.\"> // Excludes \"/\"\n : T extends `${string}/`\n ? PathError<T, \"Path cannot end with '/'.\"> // Excludes paths ending with \"/\"\n : T\n : PathError<T, \"Path must start with '/'.\">; // Excludes paths not starting with \"/\"\n\nexport interface RequestThisContext {}\n\n/**\n * Content types that can be accepted by a route.\n *\n * - `\"application/json\"` (default): JSON request body, validated against inputSchema\n * - `\"multipart/form-data\"`: FormData request body (file uploads), no schema validation\n */\nexport type RouteContentType =\n | \"application/json\"\n | \"multipart/form-data\"\n | \"application/octet-stream\";\n\nexport interface FragnoRouteConfig<\n TMethod extends HTTPMethod,\n TPath extends string,\n TInputSchema extends StandardSchemaV1 | undefined,\n TOutputSchema extends StandardSchemaV1 | undefined,\n TErrorCode extends string = string,\n TQueryParameters extends string = string,\n TThisContext extends RequestThisContext = RequestThisContext,\n> {\n method: TMethod;\n path: TPath;\n /**\n * The expected content type for this route's request body.\n *\n * - `\"application/json\"` (default): Expects JSON body, will be validated against inputSchema\n * - `\"multipart/form-data\"`: Expects FormData body (for file uploads), use `ctx.formData()` in handler\n *\n * The server will reject requests with mismatched Content-Type headers.\n *\n * @default \"application/json\"\n */\n contentType?: RouteContentType;\n inputSchema?: TInputSchema;\n outputSchema?: TOutputSchema;\n errorCodes?: readonly TErrorCode[];\n queryParameters?: readonly TQueryParameters[];\n handler(\n this: TThisContext,\n inputCtx: RequestInputContext<TPath, TInputSchema>,\n outputCtx: RequestOutputContext<TOutputSchema, TErrorCode>,\n ): Promise<Response>;\n}\n\n// Overload for routes without inputSchema\nexport function addRoute<\n TMethod extends HTTPMethod,\n TPath extends string,\n TOutputSchema extends StandardSchemaV1 | undefined,\n TErrorCode extends string = string,\n TQueryParameters extends string = string,\n TThisContext extends RequestThisContext = RequestThisContext,\n>(\n route: FragnoRouteConfig<\n TMethod,\n ValidPath<TPath>,\n undefined,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n > & { inputSchema?: undefined },\n): FragnoRouteConfig<\n TMethod,\n TPath,\n undefined,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n>;\n\n// Overload for routes with inputSchema\nexport function addRoute<\n TMethod extends HTTPMethod,\n TPath extends string,\n TInputSchema extends StandardSchemaV1,\n TOutputSchema extends StandardSchemaV1 | undefined,\n TErrorCode extends string = string,\n TQueryParameters extends string = string,\n TThisContext extends RequestThisContext = RequestThisContext,\n>(\n route: FragnoRouteConfig<\n TMethod,\n ValidPath<TPath>,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n > & {\n inputSchema: TInputSchema;\n },\n): FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n>;\n\n// Implementation\nexport function addRoute<\n TMethod extends HTTPMethod,\n TPath extends string,\n TInputSchema extends StandardSchemaV1 | undefined,\n TOutputSchema extends StandardSchemaV1 | undefined,\n TErrorCode extends string = string,\n TQueryParameters extends string = string,\n TThisContext extends RequestThisContext = RequestThisContext,\n>(\n route: FragnoRouteConfig<\n TMethod,\n ValidPath<TPath>,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n >,\n): FragnoRouteConfig<\n TMethod,\n TPath,\n TInputSchema,\n TOutputSchema,\n TErrorCode,\n TQueryParameters,\n TThisContext\n> {\n return route;\n}\n\nexport { FragnoApiError, FragnoApiValidationError } from \"./error\";\nexport type { RouteHandlerInputOptions } from \"./route-handler-input-options\";\nexport type { FragnoPublicConfig } from \"./shared-types\";\n"],"mappings":";;;AAqIA,SAAgB,SASd,OAiBA;AACA,QAAO"}
@@ -18,11 +18,11 @@ interface ServiceMetadata {
18
18
  * Callback that instantiates a linked fragment.
19
19
  * Receives the same context as the main fragment and returns an instantiated fragment.
20
20
  */
21
- type LinkedFragmentCallback<TConfig, TOptions extends FragnoPublicConfig, TServiceDependencies> = (context: {
21
+ type LinkedFragmentCallback<TConfig, TOptions extends FragnoPublicConfig, TServiceDependencies, TFragment extends AnyFragnoInstantiatedFragment = AnyFragnoInstantiatedFragment> = (context: {
22
22
  config: TConfig;
23
23
  options: TOptions;
24
24
  serviceDependencies?: TServiceDependencies;
25
- }) => FragnoInstantiatedFragment<any, any, any, any, any, any, any>;
25
+ }) => TFragment;
26
26
  /**
27
27
  * Extract the services type from a FragnoInstantiatedFragment
28
28
  */
@@ -125,11 +125,20 @@ interface FragmentDefinition<TConfig, TOptions extends FragnoPublicConfig, TDeps
125
125
  options: TOptions;
126
126
  deps: TDeps;
127
127
  }) => RequestContextStorage<TRequestStorage>;
128
+ /**
129
+ * Optional factory for internal data attached to fragment.$internal.
130
+ */
131
+ internalDataFactory?: (context: {
132
+ config: TConfig;
133
+ options: TOptions;
134
+ deps: TDeps;
135
+ linkedFragments: TLinkedFragments;
136
+ }) => Record<string, unknown> | void;
128
137
  /**
129
138
  * Optional linked fragments that will be automatically instantiated with this fragment.
130
139
  * Linked fragments are service-only and share the same config/options as the parent.
131
140
  */
132
- linkedFragments?: { [K in keyof TLinkedFragments]: LinkedFragmentCallback<TConfig, TOptions, TServiceDependencies> };
141
+ linkedFragments?: { [K in keyof TLinkedFragments]: LinkedFragmentCallback<TConfig, TOptions, TServiceDependencies, TLinkedFragments[K]> };
133
142
  $serviceThisContext?: TServiceThisContext;
134
143
  $handlerThisContext?: THandlerThisContext;
135
144
  $requestStorage?: TRequestStorage;
@@ -164,7 +173,7 @@ declare class FragmentDefinitionBuilder<TConfig, TOptions extends FragnoPublicCo
164
173
  options: TOptions;
165
174
  deps: TDeps;
166
175
  }) => RequestContextStorage<TRequestStorage>;
167
- linkedFragments?: { [K in keyof TLinkedFragments]: LinkedFragmentCallback<TConfig, TOptions, TServiceDependencies> };
176
+ linkedFragments?: { [K in keyof TLinkedFragments]: LinkedFragmentCallback<TConfig, TOptions, TServiceDependencies, TLinkedFragments[K]> };
168
177
  });
169
178
  get name(): string;
170
179
  /**
@@ -290,10 +299,11 @@ declare class FragmentDefinitionBuilder<TConfig, TOptions extends FragnoPublicCo
290
299
  }): FragmentDefinitionBuilder<TConfig, TOptions, TDeps, TBaseServices, TServices$1, TServiceDependencies, TPrivateServices, TNewServiceThisContext, TNewHandlerThisContext, TRequestStorage, TLinkedFragments>;
291
300
  /**
292
301
  * Register a linked fragment that will be automatically instantiated.
293
- * Linked fragments are service-only (no routes) and share the same config/options as the parent.
294
- * All services from the linked fragment will be available as private services.
302
+ * Linked fragments share the same config/options as the parent and their services
303
+ * are exposed as private services. Routes are not exposed by default, but the
304
+ * instantiator may mount internal linked fragment routes under an internal prefix.
295
305
  */
296
- withLinkedFragment<const TName extends string, TCallback extends LinkedFragmentCallback<TConfig, TOptions, TServiceDependencies>>(name: TName, callback: TCallback): FragmentDefinitionBuilder<TConfig, TOptions, TDeps, TBaseServices, TServices$1, TServiceDependencies, TPrivateServices & ExtractLinkedServices<TCallback>, TServiceThisContext, THandlerThisContext, TRequestStorage, TLinkedFragments & { [K in TName]: ReturnType<TCallback> }>;
306
+ withLinkedFragment<const TName extends string, TFragment extends AnyFragnoInstantiatedFragment>(name: TName, callback: LinkedFragmentCallback<TConfig, TOptions, TServiceDependencies, TFragment>): FragmentDefinitionBuilder<TConfig, TOptions, TDeps, TBaseServices, TServices$1, TServiceDependencies, TPrivateServices & ExtractLinkedServices<() => TFragment>, TServiceThisContext, THandlerThisContext, TRequestStorage, TLinkedFragments & { [K in TName]: TFragment }>;
297
307
  /**
298
308
  * Extend this builder with a transformation function.
299
309
  * This enables fluent API extensions like `.extend(withDatabase(schema))`.