@fragno-dev/core 0.1.11 → 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.
- package/.turbo/turbo-build.log +87 -69
- package/CHANGELOG.md +79 -0
- package/dist/api/api.d.ts +21 -2
- package/dist/api/api.d.ts.map +1 -1
- package/dist/api/api.js +2 -1
- package/dist/api/api.js.map +1 -1
- package/dist/api/bind-services.d.ts +0 -1
- package/dist/api/bind-services.d.ts.map +1 -1
- package/dist/api/bind-services.js.map +1 -1
- package/dist/api/error.d.ts.map +1 -1
- package/dist/api/error.js.map +1 -1
- package/dist/api/fragment-definition-builder.d.ts +32 -40
- package/dist/api/fragment-definition-builder.d.ts.map +1 -1
- package/dist/api/fragment-definition-builder.js +15 -21
- package/dist/api/fragment-definition-builder.js.map +1 -1
- package/dist/api/fragment-instantiator.d.ts +51 -30
- package/dist/api/fragment-instantiator.d.ts.map +1 -1
- package/dist/api/fragment-instantiator.js +201 -52
- package/dist/api/fragment-instantiator.js.map +1 -1
- package/dist/api/request-context-storage.d.ts +4 -0
- package/dist/api/request-context-storage.d.ts.map +1 -1
- package/dist/api/request-context-storage.js +6 -0
- package/dist/api/request-context-storage.js.map +1 -1
- package/dist/api/request-input-context.d.ts +57 -1
- package/dist/api/request-input-context.d.ts.map +1 -1
- package/dist/api/request-input-context.js +67 -0
- package/dist/api/request-input-context.js.map +1 -1
- package/dist/api/request-middleware.d.ts +2 -2
- package/dist/api/request-middleware.d.ts.map +1 -1
- package/dist/api/request-middleware.js.map +1 -1
- package/dist/api/request-output-context.d.ts +1 -1
- package/dist/api/request-output-context.d.ts.map +1 -1
- package/dist/api/request-output-context.js.map +1 -1
- package/dist/api/route-caller.d.ts +30 -0
- package/dist/api/route-caller.d.ts.map +1 -0
- package/dist/api/route-caller.js +63 -0
- package/dist/api/route-caller.js.map +1 -0
- package/dist/api/route-handler-input-options.d.ts.map +1 -1
- package/dist/api/route.d.ts +8 -8
- package/dist/api/route.d.ts.map +1 -1
- package/dist/api/route.js.map +1 -1
- package/dist/api/shared-types.d.ts.map +1 -1
- package/dist/client/client-error.d.ts.map +1 -1
- package/dist/client/client-error.js.map +1 -1
- package/dist/client/client.d.ts +90 -50
- package/dist/client/client.d.ts.map +1 -1
- package/dist/client/client.js +128 -16
- package/dist/client/client.js.map +1 -1
- package/dist/client/client.svelte.d.ts +6 -5
- package/dist/client/client.svelte.d.ts.map +1 -1
- package/dist/client/client.svelte.js +10 -2
- package/dist/client/client.svelte.js.map +1 -1
- package/dist/client/internal/ndjson-streaming.js.map +1 -1
- package/dist/client/react.d.ts +5 -4
- package/dist/client/react.d.ts.map +1 -1
- package/dist/client/react.js +104 -12
- package/dist/client/react.js.map +1 -1
- package/dist/client/solid.d.ts +7 -5
- package/dist/client/solid.d.ts.map +1 -1
- package/dist/client/solid.js +23 -9
- package/dist/client/solid.js.map +1 -1
- package/dist/client/vanilla.d.ts +16 -4
- package/dist/client/vanilla.d.ts.map +1 -1
- package/dist/client/vanilla.js +21 -1
- package/dist/client/vanilla.js.map +1 -1
- package/dist/client/vue.d.ts +10 -4
- package/dist/client/vue.d.ts.map +1 -1
- package/dist/client/vue.js +24 -1
- package/dist/client/vue.js.map +1 -1
- package/dist/id.d.ts +2 -0
- package/dist/id.js +3 -0
- package/dist/internal/cuid.d.ts +16 -0
- package/dist/internal/cuid.d.ts.map +1 -0
- package/dist/internal/cuid.js +82 -0
- package/dist/internal/cuid.js.map +1 -0
- package/dist/internal/trace-context.d.ts +23 -0
- package/dist/internal/trace-context.d.ts.map +1 -0
- package/dist/internal/trace-context.js +14 -0
- package/dist/internal/trace-context.js.map +1 -0
- package/dist/mod-client.d.ts +7 -20
- package/dist/mod-client.d.ts.map +1 -1
- package/dist/mod-client.js +25 -13
- package/dist/mod-client.js.map +1 -1
- package/dist/mod.d.ts +8 -6
- package/dist/mod.js +3 -1
- package/dist/runtime.d.ts +15 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +33 -0
- package/dist/runtime.js.map +1 -0
- package/dist/test/test.d.ts +6 -6
- package/dist/test/test.d.ts.map +1 -1
- package/dist/test/test.js.map +1 -1
- package/dist/util/ssr.js.map +1 -1
- package/package.json +42 -52
- package/src/api/api.test.ts +3 -1
- package/src/api/api.ts +28 -0
- package/src/api/bind-services.ts +0 -5
- package/src/api/error.ts +1 -0
- package/src/api/fragment-definition-builder.extend.test.ts +2 -1
- package/src/api/fragment-definition-builder.test.ts +2 -1
- package/src/api/fragment-definition-builder.ts +56 -112
- package/src/api/fragment-instantiator.test.ts +311 -166
- package/src/api/fragment-instantiator.ts +470 -131
- package/src/api/fragment-services.test.ts +1 -0
- package/src/api/internal/path-runtime.test.ts +8 -0
- package/src/api/internal/path-type.test.ts +3 -1
- package/src/api/internal/route.test.ts +1 -0
- package/src/api/request-context-storage.ts +7 -0
- package/src/api/request-input-context.test.ts +156 -2
- package/src/api/request-input-context.ts +87 -1
- package/src/api/request-middleware.test.ts +43 -2
- package/src/api/request-middleware.ts +4 -3
- package/src/api/request-output-context.test.ts +3 -1
- package/src/api/request-output-context.ts +2 -1
- package/src/api/route-caller.test.ts +195 -0
- package/src/api/route-caller.ts +167 -0
- package/src/api/route-handler-input-options.ts +2 -1
- package/src/api/route.test.ts +4 -2
- package/src/api/route.ts +9 -3
- package/src/api/shared-types.ts +2 -1
- package/src/client/client-builder.test.ts +4 -2
- package/src/client/client-error.test.ts +2 -1
- package/src/client/client-error.ts +1 -1
- package/src/client/client-types.test.ts +19 -5
- package/src/client/client.ssr.test.ts +6 -4
- package/src/client/client.svelte.test.ts +18 -9
- package/src/client/client.svelte.ts +38 -13
- package/src/client/client.test.ts +244 -10
- package/src/client/client.ts +473 -148
- package/src/client/internal/ndjson-streaming.test.ts +6 -3
- package/src/client/internal/ndjson-streaming.ts +1 -0
- package/src/client/react.test.ts +176 -6
- package/src/client/react.ts +226 -31
- package/src/client/solid.test.ts +29 -5
- package/src/client/solid.ts +60 -22
- package/src/client/vanilla.test.ts +148 -6
- package/src/client/vanilla.ts +63 -9
- package/src/client/vue.test.ts +397 -8
- package/src/client/vue.ts +74 -4
- package/src/id.ts +1 -0
- package/src/internal/cuid.test.ts +164 -0
- package/src/internal/cuid.ts +133 -0
- package/src/internal/trace-context.ts +35 -0
- package/src/mod-client.ts +55 -9
- package/src/mod.ts +9 -3
- package/src/runtime.ts +48 -0
- package/src/test/test.test.ts +4 -2
- package/src/test/test.ts +14 -7
- package/src/util/async.test.ts +1 -0
- package/src/util/content-type.test.ts +1 -0
- package/src/util/nanostores.test.ts +3 -1
- package/src/util/ssr.ts +1 -0
- package/tsconfig.json +1 -1
- package/tsdown.config.ts +2 -0
- package/vitest.config.ts +2 -1
package/package.json
CHANGED
|
@@ -1,124 +1,121 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@fragno-dev/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.2.2",
|
|
4
|
+
"homepage": "https://fragno.dev",
|
|
5
|
+
"license": "MIT",
|
|
6
|
+
"repository": {
|
|
7
|
+
"type": "git",
|
|
8
|
+
"url": "https://github.com/rejot-dev/fragno.git",
|
|
9
|
+
"directory": "packages/fragno"
|
|
10
|
+
},
|
|
11
|
+
"type": "module",
|
|
12
|
+
"sideEffects": false,
|
|
13
|
+
"main": "./dist/mod.js",
|
|
14
|
+
"module": "./dist/mod.js",
|
|
15
|
+
"types": "./dist/mod.d.ts",
|
|
4
16
|
"exports": {
|
|
5
17
|
".": {
|
|
6
18
|
"workerd": {
|
|
7
|
-
"development": "./src/mod.ts",
|
|
8
19
|
"default": "./dist/mod.js"
|
|
9
20
|
},
|
|
10
|
-
"development": {
|
|
11
|
-
"browser": "./src/mod-client.ts",
|
|
12
|
-
"default": "./src/mod.ts"
|
|
13
|
-
},
|
|
14
21
|
"browser": "./dist/mod-client.js",
|
|
15
22
|
"types": "./dist/mod.d.ts",
|
|
16
23
|
"default": "./dist/mod.js"
|
|
17
24
|
},
|
|
18
25
|
"./api": {
|
|
19
|
-
"development": "./src/api/api.ts",
|
|
20
26
|
"types": "./dist/api/api.d.ts",
|
|
21
27
|
"default": "./dist/api/api.js"
|
|
22
28
|
},
|
|
23
29
|
"./test": {
|
|
24
|
-
"development": "./src/test/test.ts",
|
|
25
30
|
"types": "./dist/test/test.d.ts",
|
|
26
31
|
"default": "./dist/test/test.js"
|
|
27
32
|
},
|
|
28
33
|
"./route": {
|
|
29
|
-
"development": "./src/api/route.ts",
|
|
30
34
|
"types": "./dist/api/route.d.ts",
|
|
31
35
|
"default": "./dist/api/route.js"
|
|
32
36
|
},
|
|
33
37
|
"./request": {
|
|
34
|
-
"development": "./src/request/request.ts",
|
|
35
38
|
"types": "./dist/request/request.d.ts",
|
|
36
39
|
"default": "./dist/request/request.js"
|
|
37
40
|
},
|
|
38
41
|
"./internal/request-context-storage": {
|
|
39
|
-
"development": "./src/api/request-context-storage.ts",
|
|
40
42
|
"types": "./dist/api/request-context-storage.d.ts",
|
|
41
43
|
"default": "./dist/api/request-context-storage.js"
|
|
42
44
|
},
|
|
45
|
+
"./internal/trace-context": {
|
|
46
|
+
"types": "./dist/internal/trace-context.d.ts",
|
|
47
|
+
"default": "./dist/internal/trace-context.js"
|
|
48
|
+
},
|
|
43
49
|
"./internal/symbols": {
|
|
44
|
-
"development": "./src/internal/symbols.ts",
|
|
45
50
|
"types": "./dist/internal/symbols.d.ts",
|
|
46
51
|
"default": "./dist/internal/symbols.js"
|
|
47
52
|
},
|
|
48
53
|
"./client": {
|
|
49
|
-
"development": "./src/client/client.ts",
|
|
50
54
|
"types": "./dist/client/client.d.ts",
|
|
51
55
|
"default": "./dist/client/client.js"
|
|
52
56
|
},
|
|
57
|
+
"./id": {
|
|
58
|
+
"types": "./dist/id.d.ts",
|
|
59
|
+
"default": "./dist/id.js"
|
|
60
|
+
},
|
|
53
61
|
"./react": {
|
|
54
|
-
"development": "./src/client/react.ts",
|
|
55
62
|
"types": "./dist/client/react.d.ts",
|
|
56
63
|
"default": "./dist/client/react.js"
|
|
57
64
|
},
|
|
58
65
|
"./vanilla": {
|
|
59
|
-
"development": "./src/client/vanilla.ts",
|
|
60
66
|
"types": "./dist/client/vanilla.d.ts",
|
|
61
67
|
"default": "./dist/client/vanilla.js"
|
|
62
68
|
},
|
|
63
69
|
"./vue": {
|
|
64
|
-
"development": "./src/client/vue.ts",
|
|
65
70
|
"types": "./dist/client/vue.d.ts",
|
|
66
71
|
"default": "./dist/client/vue.js"
|
|
67
72
|
},
|
|
68
73
|
"./svelte": {
|
|
69
|
-
"development": "./src/client/client.svelte.ts",
|
|
70
74
|
"types": "./dist/client/client.svelte.d.ts",
|
|
71
75
|
"default": "./dist/client/client.svelte.js"
|
|
72
76
|
},
|
|
73
77
|
"./solid": {
|
|
74
|
-
"development": "./src/client/solid.ts",
|
|
75
78
|
"types": "./dist/client/solid.d.ts",
|
|
76
79
|
"default": "./dist/client/solid.js"
|
|
77
80
|
},
|
|
78
81
|
"./react-ssr": {
|
|
79
|
-
"development": "./src/integrations/react-ssr.ts",
|
|
80
82
|
"types": "./dist/integrations/react-ssr.d.ts",
|
|
81
83
|
"default": "./dist/integrations/react-ssr.js"
|
|
82
84
|
},
|
|
83
85
|
"./package.json": "./package.json"
|
|
84
86
|
},
|
|
85
|
-
"main": "./dist/mod.js",
|
|
86
|
-
"module": "./dist/mod.js",
|
|
87
|
-
"types": "./dist/mod.d.ts",
|
|
88
|
-
"type": "module",
|
|
89
|
-
"sideEffects": false,
|
|
90
87
|
"dependencies": {
|
|
91
88
|
"@nanostores/query": "^0.3.4",
|
|
92
89
|
"@nanostores/solid": "^1.1.1",
|
|
93
|
-
"@standard-schema/spec": "^1.
|
|
94
|
-
"nanostores": "^1.0
|
|
95
|
-
"rou3": "^0.7.
|
|
90
|
+
"@standard-schema/spec": "^1.1.0",
|
|
91
|
+
"nanostores": "^1.2.0",
|
|
92
|
+
"rou3": "^0.7.12"
|
|
96
93
|
},
|
|
97
94
|
"devDependencies": {
|
|
98
|
-
"@sveltejs/vite-plugin-svelte": "^
|
|
99
|
-
"@testing-library/react": "^16.3.
|
|
100
|
-
"@testing-library/svelte": "^5.
|
|
95
|
+
"@sveltejs/vite-plugin-svelte": "^7.0.0",
|
|
96
|
+
"@testing-library/react": "^16.3.2",
|
|
97
|
+
"@testing-library/svelte": "^5.3.1",
|
|
101
98
|
"@testing-library/vue": "^8.1.0",
|
|
102
|
-
"@types/node": "^22",
|
|
103
|
-
"@types/react": "^19.
|
|
104
|
-
"@types/react-dom": "^19.
|
|
105
|
-
"@vitest/coverage-istanbul": "^
|
|
106
|
-
"happy-dom": "^20.
|
|
107
|
-
"react": "^19.0.
|
|
108
|
-
"react-dom": "^19.0.
|
|
109
|
-
"
|
|
110
|
-
"
|
|
111
|
-
"vitest": "^
|
|
112
|
-
"vue": "^3",
|
|
113
|
-
"zod": "^4.
|
|
99
|
+
"@types/node": "^22.19.7",
|
|
100
|
+
"@types/react": "^19.2.8",
|
|
101
|
+
"@types/react-dom": "^19.2.3",
|
|
102
|
+
"@vitest/coverage-istanbul": "^4.1.0",
|
|
103
|
+
"happy-dom": "^20.3.3",
|
|
104
|
+
"react": "^19.0.3",
|
|
105
|
+
"react-dom": "^19.0.3",
|
|
106
|
+
"solid-js": "^1.9.10",
|
|
107
|
+
"svelte": "^5.47.0",
|
|
108
|
+
"vitest": "^4.1.4",
|
|
109
|
+
"vue": "^3.5.27",
|
|
110
|
+
"zod": "^4.3.5",
|
|
114
111
|
"@fragno-private/typescript-config": "0.0.1",
|
|
115
112
|
"@fragno-private/vitest-config": "0.0.0"
|
|
116
113
|
},
|
|
117
114
|
"peerDependencies": {
|
|
118
115
|
"react": "^19.0.0",
|
|
119
|
-
"
|
|
116
|
+
"solid-js": "^1.0.0",
|
|
120
117
|
"svelte": "^5",
|
|
121
|
-
"
|
|
118
|
+
"vue": "^3"
|
|
122
119
|
},
|
|
123
120
|
"peerDependenciesMeta": {
|
|
124
121
|
"react": {
|
|
@@ -134,17 +131,10 @@
|
|
|
134
131
|
"optional": true
|
|
135
132
|
}
|
|
136
133
|
},
|
|
137
|
-
"repository": {
|
|
138
|
-
"type": "git",
|
|
139
|
-
"url": "https://github.com/rejot-dev/fragno.git",
|
|
140
|
-
"directory": "packages/fragno"
|
|
141
|
-
},
|
|
142
|
-
"homepage": "https://fragno.dev",
|
|
143
|
-
"license": "MIT",
|
|
144
134
|
"scripts": {
|
|
145
135
|
"build": "tsdown",
|
|
146
136
|
"build:watch": "tsdown --watch",
|
|
147
|
-
"types:check": "
|
|
137
|
+
"types:check": "tsgo --noEmit",
|
|
148
138
|
"test": "vitest run",
|
|
149
139
|
"test:watch": "vitest --watch"
|
|
150
140
|
}
|
package/src/api/api.test.ts
CHANGED
|
@@ -1,7 +1,9 @@
|
|
|
1
1
|
import { test, expect, expectTypeOf, describe } from "vitest";
|
|
2
|
-
|
|
2
|
+
|
|
3
3
|
import { z } from "zod";
|
|
4
4
|
|
|
5
|
+
import { addRoute, type ValidPath } from "./api";
|
|
6
|
+
|
|
5
7
|
describe("addRoute", () => {
|
|
6
8
|
test("addRoute no inputSchema", () => {
|
|
7
9
|
addRoute({
|
package/src/api/api.ts
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import type { StandardSchemaV1 } from "@standard-schema/spec";
|
|
2
|
+
|
|
2
3
|
import type { RequestInputContext } from "./request-input-context";
|
|
3
4
|
import type { RequestOutputContext } from "./request-output-context";
|
|
4
5
|
|
|
@@ -27,6 +28,17 @@ export type ValidPath<T extends string = string> = T extends `/${infer Rest}`
|
|
|
27
28
|
|
|
28
29
|
export interface RequestThisContext {}
|
|
29
30
|
|
|
31
|
+
/**
|
|
32
|
+
* Content types that can be accepted by a route.
|
|
33
|
+
*
|
|
34
|
+
* - `"application/json"` (default): JSON request body, validated against inputSchema
|
|
35
|
+
* - `"multipart/form-data"`: FormData request body (file uploads), no schema validation
|
|
36
|
+
*/
|
|
37
|
+
export type RouteContentType =
|
|
38
|
+
| "application/json"
|
|
39
|
+
| "multipart/form-data"
|
|
40
|
+
| "application/octet-stream";
|
|
41
|
+
|
|
30
42
|
export interface FragnoRouteConfig<
|
|
31
43
|
TMethod extends HTTPMethod,
|
|
32
44
|
TPath extends string,
|
|
@@ -38,6 +50,17 @@ export interface FragnoRouteConfig<
|
|
|
38
50
|
> {
|
|
39
51
|
method: TMethod;
|
|
40
52
|
path: TPath;
|
|
53
|
+
/**
|
|
54
|
+
* The expected content type for this route's request body.
|
|
55
|
+
*
|
|
56
|
+
* - `"application/json"` (default): Expects JSON body, will be validated against inputSchema
|
|
57
|
+
* - `"multipart/form-data"`: Expects FormData body (for file uploads), use `ctx.formData()` in handler
|
|
58
|
+
*
|
|
59
|
+
* The server will reject requests with mismatched Content-Type headers.
|
|
60
|
+
*
|
|
61
|
+
* @default "application/json"
|
|
62
|
+
*/
|
|
63
|
+
contentType?: RouteContentType;
|
|
41
64
|
inputSchema?: TInputSchema;
|
|
42
65
|
outputSchema?: TOutputSchema;
|
|
43
66
|
errorCodes?: readonly TErrorCode[];
|
|
@@ -140,5 +163,10 @@ export function addRoute<
|
|
|
140
163
|
}
|
|
141
164
|
|
|
142
165
|
export { FragnoApiError, FragnoApiValidationError } from "./error";
|
|
166
|
+
export {
|
|
167
|
+
createRouteCaller,
|
|
168
|
+
type RouteCallerConfig,
|
|
169
|
+
type RouteCallerForFragment,
|
|
170
|
+
} from "./route-caller";
|
|
143
171
|
export type { RouteHandlerInputOptions } from "./route-handler-input-options";
|
|
144
172
|
export type { FragnoPublicConfig } from "./shared-types";
|
package/src/api/bind-services.ts
CHANGED
|
@@ -1,8 +1,3 @@
|
|
|
1
|
-
// Type helper to remove 'this' parameter from functions
|
|
2
|
-
type OmitThisParameter<T> = T extends (this: infer _This, ...args: infer A) => infer R
|
|
3
|
-
? (...args: A) => R
|
|
4
|
-
: T;
|
|
5
|
-
|
|
6
1
|
// Recursively remove 'this' parameter from all functions in an object
|
|
7
2
|
export type BoundServices<T> = {
|
|
8
3
|
[K in keyof T]: T[K] extends (...args: never[]) => unknown
|
package/src/api/error.ts
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { describe, it, expect } from "vitest";
|
|
2
|
+
|
|
3
|
+
import type { RequestThisContext } from "./api";
|
|
2
4
|
import { defineFragment, FragmentDefinitionBuilder } from "./fragment-definition-builder";
|
|
3
5
|
import type { FragnoPublicConfig } from "./shared-types";
|
|
4
|
-
import type { RequestThisContext } from "./api";
|
|
5
6
|
|
|
6
7
|
describe("FragmentDefinitionBuilder.extend()", () => {
|
|
7
8
|
describe("basic functionality", () => {
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { describe, it, expect, expectTypeOf, vi } from "vitest";
|
|
2
|
+
|
|
3
|
+
import type { RequestThisContext } from "./api";
|
|
2
4
|
import { defineFragment, type FragmentDefinition } from "./fragment-definition-builder";
|
|
3
5
|
import type { FragnoPublicConfig } from "./shared-types";
|
|
4
|
-
import type { RequestThisContext } from "./api";
|
|
5
6
|
|
|
6
7
|
describe("FragmentDefinitionBuilder", () => {
|
|
7
8
|
describe("defineFragment", () => {
|