fragment-ts 3.0.14 → 3.0.16
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/dist/core/decorators/frontend.decorators.d.ts +15 -1
- package/dist/core/decorators/frontend.decorators.d.ts.map +1 -1
- package/dist/core/decorators/frontend.decorators.js +16 -5
- package/dist/core/decorators/frontend.decorators.js.map +1 -1
- package/dist/core/metadata/metadata-keys.d.ts +5 -4
- package/dist/core/metadata/metadata-keys.d.ts.map +1 -1
- package/dist/core/metadata/metadata-keys.js +5 -4
- package/dist/core/metadata/metadata-keys.js.map +1 -1
- package/dist/platform/cli/scaffold/init/init.scaffold.js +2 -2
- package/dist/platform/web/react/fragment-react-runtime.d.ts +13 -1
- package/dist/platform/web/react/fragment-react-runtime.d.ts.map +1 -1
- package/dist/platform/web/react/fragment-react-runtime.js +55 -12
- package/dist/platform/web/react/fragment-react-runtime.js.map +1 -1
- package/dist/platform/web/react/react-page-renderer.d.ts.map +1 -1
- package/dist/platform/web/react/react-page-renderer.js +132 -3
- package/dist/platform/web/react/react-page-renderer.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,11 +1,25 @@
|
|
|
1
1
|
import type { FragmentWebRouteContext } from "../../platform/web/interfaces";
|
|
2
|
+
export type FragmentRenderMode = "server" | "client" | "universal";
|
|
2
3
|
export interface RouteOptions {
|
|
3
4
|
path: string;
|
|
4
5
|
template?: string;
|
|
5
6
|
layout?: string;
|
|
6
7
|
}
|
|
7
8
|
export declare function FragmentStore(): ClassDecorator;
|
|
8
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Marks a class as a Fragment UI component.
|
|
11
|
+
*
|
|
12
|
+
* @param mode
|
|
13
|
+
* - "server" (default) — rendered on the server only, no client JS
|
|
14
|
+
* - "client" — skipped during SSR, mounted in the browser via createRoot
|
|
15
|
+
* - "universal" — SSR for initial HTML, then hydrated/re-rendered client-side
|
|
16
|
+
*
|
|
17
|
+
* @example
|
|
18
|
+
* @FragmentComponent() // server only
|
|
19
|
+
* @FragmentComponent("client") // client only
|
|
20
|
+
* @FragmentComponent("universal") // SSR + hydration
|
|
21
|
+
*/
|
|
22
|
+
export declare function FragmentComponent(mode?: FragmentRenderMode): ClassDecorator;
|
|
9
23
|
export declare function FragmentTemplate(options: {
|
|
10
24
|
name: string;
|
|
11
25
|
}): ClassDecorator;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontend.decorators.d.ts","sourceRoot":"","sources":["../../../src/core/decorators/frontend.decorators.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAK7E,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAuBD,wBAAgB,aAAa,IAAI,cAAc,CAW9C;AAED,wBAAgB,iBAAiB,IAAI,cAAc,
|
|
1
|
+
{"version":3,"file":"frontend.decorators.d.ts","sourceRoot":"","sources":["../../../src/core/decorators/frontend.decorators.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,+BAA+B,CAAC;AAK7E,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,QAAQ,GAAG,WAAW,CAAC;AAEnE,MAAM,WAAW,YAAY;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAuBD,wBAAgB,aAAa,IAAI,cAAc,CAW9C;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,IAAI,GAAE,kBAA6B,GAClC,cAAc,CAchB;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CAY1E;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,cAAc,CAExE;AAED,wBAAgB,YAAY,IAAI,cAAc,CAU7C;AAED,wBAAgB,KAAK,CAAC,OAAO,EAAE,YAAY,GAAG,cAAc,CAa3D;AAED,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,iBAAiB,CAE1D;AAED,wBAAgB,UAAU,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAE3D;AAED,wBAAgB,WAAW,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,iBAAiB,CAE5D;AAED,wBAAgB,YAAY,IAAI,iBAAiB,CAehD;AAED,wBAAgB,aAAa,IAAI,iBAAiB,CAejD;AAED,wBAAgB,YAAY,IAAI,iBAAiB,CAehD;AAED,wBAAgB,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,iBAAiB,CAE3D;AAED,wBAAgB,WAAW,CAAC,KAAK,EAAE,QAAQ,GAAG,iBAAiB,CAE9D;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,MAAM,EACvC,KAAK,EAAE,UAAU,MAAM,EACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAClC,iBAAiB,CAWnB;AAED,wBAAgB,UAAU,IAAI,iBAAiB,CAI9C;AAED,wBAAgB,KAAK,IAAI,iBAAiB,CAEzC;AAED,wBAAgB,QAAQ,IAAI,eAAe,CAI1C;AAED,wBAAgB,QAAQ,IAAI,eAAe,CAE1C;AAED,wBAAgB,MAAM,IAAI,eAAe,CAIxC;AAED,wBAAgB,QAAQ,IAAI,eAAe,CAE1C;AAED,wBAAgB,IAAI,IAAI,eAAe,CAItC;AAED,wBAAgB,WAAW,IAAI,eAAe,CAE7C;AAgBD,YAAY,EAAE,uBAAuB,EAAE,CAAC"}
|
|
@@ -45,19 +45,30 @@ function FragmentStore() {
|
|
|
45
45
|
});
|
|
46
46
|
};
|
|
47
47
|
}
|
|
48
|
-
|
|
48
|
+
/**
|
|
49
|
+
* Marks a class as a Fragment UI component.
|
|
50
|
+
*
|
|
51
|
+
* @param mode
|
|
52
|
+
* - "server" (default) — rendered on the server only, no client JS
|
|
53
|
+
* - "client" — skipped during SSR, mounted in the browser via createRoot
|
|
54
|
+
* - "universal" — SSR for initial HTML, then hydrated/re-rendered client-side
|
|
55
|
+
*
|
|
56
|
+
* @example
|
|
57
|
+
* @FragmentComponent() // server only
|
|
58
|
+
* @FragmentComponent("client") // client only
|
|
59
|
+
* @FragmentComponent("universal") // SSR + hydration
|
|
60
|
+
*/
|
|
61
|
+
function FragmentComponent(mode = "server") {
|
|
49
62
|
return (target) => {
|
|
50
|
-
// Register as a UI component
|
|
51
63
|
metadata_storage_1.MetadataStorage.getInstance().addClass({
|
|
52
64
|
target,
|
|
53
|
-
type:
|
|
65
|
+
type: "ui-component",
|
|
54
66
|
});
|
|
55
|
-
// Register in DI container if not already
|
|
56
67
|
if (!di_container_1.DIContainer.getInstance().has(target)) {
|
|
57
68
|
di_container_1.DIContainer.getInstance().register(target);
|
|
58
69
|
}
|
|
59
|
-
// Store metadata for JSX runtime
|
|
60
70
|
Reflect.defineMetadata(metadata_keys_1.METADATA_KEYS.FRAGMENT_COMPONENT, true, target);
|
|
71
|
+
Reflect.defineMetadata(metadata_keys_1.METADATA_KEYS.FRAGMENT_RENDER_MODE, mode, target);
|
|
61
72
|
};
|
|
62
73
|
}
|
|
63
74
|
function FragmentTemplate(options) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"frontend.decorators.js","sourceRoot":"","sources":["../../../src/core/decorators/frontend.decorators.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"frontend.decorators.js","sourceRoot":"","sources":["../../../src/core/decorators/frontend.decorators.ts"],"names":[],"mappings":"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"}
|
|
@@ -60,11 +60,12 @@ export declare const METADATA_KEYS: {
|
|
|
60
60
|
readonly FRONTEND_ROUTE_RESPONSE: "fragment:frontend-route-response";
|
|
61
61
|
readonly FRONTEND_ROUTE_CONTEXT: "fragment:frontend-route-context";
|
|
62
62
|
readonly MOBX_FIELDS: "fragment:mobx-fields";
|
|
63
|
-
readonly ON_MOUNT: "fragment:
|
|
64
|
-
readonly ON_UNMOUNT: "fragment:
|
|
63
|
+
readonly ON_MOUNT: "fragment:on-mount";
|
|
64
|
+
readonly ON_UNMOUNT: "fragment:on-unmount";
|
|
65
65
|
readonly AUTORUN: "fragment:autorun";
|
|
66
|
-
readonly ON_EFFECT: "fragment:
|
|
67
|
-
readonly WHEN_EFFECT: "fragment:
|
|
66
|
+
readonly ON_EFFECT: "fragment:on-effect";
|
|
67
|
+
readonly WHEN_EFFECT: "fragment:when-effect";
|
|
68
|
+
readonly FRAGMENT_RENDER_MODE: "fragment:render-mode";
|
|
68
69
|
readonly API_TAGS: "fragment:api-tags";
|
|
69
70
|
readonly API_OPERATION: "fragment:api-operation";
|
|
70
71
|
readonly API_RESPONSES: "fragment:api-responses";
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata-keys.d.ts","sourceRoot":"","sources":["../../../src/core/metadata/metadata-keys.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa
|
|
1
|
+
{"version":3,"file":"metadata-keys.d.ts","sourceRoot":"","sources":["../../../src/core/metadata/metadata-keys.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoGhB,CAAC;AAEX,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,OAAO,aAAa,CAAC,CAAC"}
|
|
@@ -75,11 +75,12 @@ exports.METADATA_KEYS = {
|
|
|
75
75
|
FRONTEND_ROUTE_RESPONSE: "fragment:frontend-route-response",
|
|
76
76
|
FRONTEND_ROUTE_CONTEXT: "fragment:frontend-route-context",
|
|
77
77
|
MOBX_FIELDS: "fragment:mobx-fields",
|
|
78
|
-
ON_MOUNT: 'fragment:
|
|
79
|
-
ON_UNMOUNT: 'fragment:
|
|
78
|
+
ON_MOUNT: 'fragment:on-mount',
|
|
79
|
+
ON_UNMOUNT: 'fragment:on-unmount',
|
|
80
80
|
AUTORUN: 'fragment:autorun',
|
|
81
|
-
ON_EFFECT: 'fragment:
|
|
82
|
-
WHEN_EFFECT: 'fragment:
|
|
81
|
+
ON_EFFECT: 'fragment:on-effect',
|
|
82
|
+
WHEN_EFFECT: 'fragment:when-effect',
|
|
83
|
+
FRAGMENT_RENDER_MODE: 'fragment:render-mode',
|
|
83
84
|
// Docs
|
|
84
85
|
API_TAGS: "fragment:api-tags",
|
|
85
86
|
API_OPERATION: "fragment:api-operation",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"metadata-keys.js","sourceRoot":"","sources":["../../../src/core/metadata/metadata-keys.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG;IAC3B,mBAAmB;IACnB,WAAW,EAAE,sBAAsB;IACnC,UAAU,EAAE,qBAAqB;IACjC,UAAU,EAAE,qBAAqB;IACjC,OAAO,EAAE,kBAAkB;IAC3B,eAAe,EAAE,0BAA0B;IAC3C,UAAU,EAAE,qBAAqB;IACjC,kBAAkB,EAAE,6BAA6B;IACjD,KAAK,EAAE,gBAAgB;IAEvB,sBAAsB;IACtB,SAAS,EAAE,oBAAoB;IAC/B,MAAM,EAAE,iBAAiB;IACzB,iBAAiB,EAAE,4BAA4B;IAC/C,SAAS,EAAE,oBAAoB;IAC/B,KAAK,EAAE,gBAAgB;IACvB,QAAQ,EAAE,mBAAmB;IAC7B,IAAI,EAAE,eAAe;IAErB,oBAAoB;IACpB,WAAW,EAAE,sBAAsB;IACnC,UAAU,EAAE,qBAAqB;IACjC,cAAc,EAAE,yBAAyB;IACzC,WAAW,EAAE,sBAAsB;IACnC,aAAa,EAAE,wBAAwB;IACvC,cAAc,EAAE,yBAAyB;IAEzC,uBAAuB;IACvB,cAAc,EAAE,yBAAyB;IAEzC,yBAAyB;IACzB,oBAAoB,EAAE,+BAA+B;IACrD,2BAA2B,EAAE,sCAAsC;IACnE,uBAAuB,EAAE,kCAAkC;IAC3D,mBAAmB,EAAE,8BAA8B;IAEnD,sBAAsB;IACtB,cAAc,EAAE,yBAAyB;IACzC,UAAU,EAAE,qBAAqB;IACjC,gBAAgB,EAAE,2BAA2B;IAC7C,WAAW,EAAE,sBAAsB;IACnC,UAAU,EAAE,qBAAqB;IACjC,UAAU,EAAE,qBAAqB;IACjC,KAAK,EAAE,gBAAgB;IACvB,gBAAgB,EAAE,2BAA2B;IAC7C,KAAK,EAAE,gBAAgB;IAEvB,aAAa;IACb,QAAQ,EAAE,mBAAmB;IAC7B,SAAS,EAAE,oBAAoB;IAC/B,GAAG,EAAE,cAAc;IACnB,SAAS,EAAE,oBAAoB;IAC/B,MAAM,EAAE,iBAAiB;IAEzB,oBAAoB;IACpB,cAAc,EAAE,yBAAyB;IAEzC,SAAS;IACT,MAAM,EAAE,iBAAiB;IACzB,iBAAiB,EAAE,4BAA4B;IAC/C,qBAAqB,EAAE,gCAAgC;IAEvD,SAAS;IACT,MAAM,EAAE,iBAAiB;IACzB,aAAa,EAAE,wBAAwB;IAEvC,gBAAgB;IAChB,oBAAoB,EAAE,+BAA+B;IAErD,OAAO;IACP,GAAG,EAAE,cAAc;IACnB,IAAI,EAAE,eAAe;IACrB,QAAQ,EAAE,mBAAmB;IAC7B,cAAc,EAAE,gBAAgB;IAChC,kBAAkB,EAAE,oBAAoB;IACxC,iBAAiB,EAAE,mBAAmB;IACtC,cAAc,EAAE,yBAAyB;IACzC,qBAAqB,EAAE,gCAAgC;IACvD,oBAAoB,EAAE,+BAA+B;IACrD,sBAAsB,EAAE,iCAAiC;IACzD,sBAAsB,EAAE,iCAAiC;IACzD,uBAAuB,EAAE,kCAAkC;IAC3D,sBAAsB,EAAE,iCAAiC;IACzD,WAAW,EAAE,sBAAsB;IACnC,QAAQ,EAAE,mBAAmB;IAC7B,UAAU,EAAE,qBAAqB;IACjC,OAAO,EAAE,kBAAkB;IAC3B,SAAS,EAAE,oBAAoB;IAC/B,WAAW,EAAE,sBAAsB;
|
|
1
|
+
{"version":3,"file":"metadata-keys.js","sourceRoot":"","sources":["../../../src/core/metadata/metadata-keys.ts"],"names":[],"mappings":";;;AAAa,QAAA,aAAa,GAAG;IAC3B,mBAAmB;IACnB,WAAW,EAAE,sBAAsB;IACnC,UAAU,EAAE,qBAAqB;IACjC,UAAU,EAAE,qBAAqB;IACjC,OAAO,EAAE,kBAAkB;IAC3B,eAAe,EAAE,0BAA0B;IAC3C,UAAU,EAAE,qBAAqB;IACjC,kBAAkB,EAAE,6BAA6B;IACjD,KAAK,EAAE,gBAAgB;IAEvB,sBAAsB;IACtB,SAAS,EAAE,oBAAoB;IAC/B,MAAM,EAAE,iBAAiB;IACzB,iBAAiB,EAAE,4BAA4B;IAC/C,SAAS,EAAE,oBAAoB;IAC/B,KAAK,EAAE,gBAAgB;IACvB,QAAQ,EAAE,mBAAmB;IAC7B,IAAI,EAAE,eAAe;IAErB,oBAAoB;IACpB,WAAW,EAAE,sBAAsB;IACnC,UAAU,EAAE,qBAAqB;IACjC,cAAc,EAAE,yBAAyB;IACzC,WAAW,EAAE,sBAAsB;IACnC,aAAa,EAAE,wBAAwB;IACvC,cAAc,EAAE,yBAAyB;IAEzC,uBAAuB;IACvB,cAAc,EAAE,yBAAyB;IAEzC,yBAAyB;IACzB,oBAAoB,EAAE,+BAA+B;IACrD,2BAA2B,EAAE,sCAAsC;IACnE,uBAAuB,EAAE,kCAAkC;IAC3D,mBAAmB,EAAE,8BAA8B;IAEnD,sBAAsB;IACtB,cAAc,EAAE,yBAAyB;IACzC,UAAU,EAAE,qBAAqB;IACjC,gBAAgB,EAAE,2BAA2B;IAC7C,WAAW,EAAE,sBAAsB;IACnC,UAAU,EAAE,qBAAqB;IACjC,UAAU,EAAE,qBAAqB;IACjC,KAAK,EAAE,gBAAgB;IACvB,gBAAgB,EAAE,2BAA2B;IAC7C,KAAK,EAAE,gBAAgB;IAEvB,aAAa;IACb,QAAQ,EAAE,mBAAmB;IAC7B,SAAS,EAAE,oBAAoB;IAC/B,GAAG,EAAE,cAAc;IACnB,SAAS,EAAE,oBAAoB;IAC/B,MAAM,EAAE,iBAAiB;IAEzB,oBAAoB;IACpB,cAAc,EAAE,yBAAyB;IAEzC,SAAS;IACT,MAAM,EAAE,iBAAiB;IACzB,iBAAiB,EAAE,4BAA4B;IAC/C,qBAAqB,EAAE,gCAAgC;IAEvD,SAAS;IACT,MAAM,EAAE,iBAAiB;IACzB,aAAa,EAAE,wBAAwB;IAEvC,gBAAgB;IAChB,oBAAoB,EAAE,+BAA+B;IAErD,OAAO;IACP,GAAG,EAAE,cAAc;IACnB,IAAI,EAAE,eAAe;IACrB,QAAQ,EAAE,mBAAmB;IAC7B,cAAc,EAAE,gBAAgB;IAChC,kBAAkB,EAAE,oBAAoB;IACxC,iBAAiB,EAAE,mBAAmB;IACtC,cAAc,EAAE,yBAAyB;IACzC,qBAAqB,EAAE,gCAAgC;IACvD,oBAAoB,EAAE,+BAA+B;IACrD,sBAAsB,EAAE,iCAAiC;IACzD,sBAAsB,EAAE,iCAAiC;IACzD,uBAAuB,EAAE,kCAAkC;IAC3D,sBAAsB,EAAE,iCAAiC;IACzD,WAAW,EAAE,sBAAsB;IACnC,QAAQ,EAAE,mBAAmB;IAC7B,UAAU,EAAE,qBAAqB;IACjC,OAAO,EAAE,kBAAkB;IAC3B,SAAS,EAAE,oBAAoB;IAC/B,WAAW,EAAE,sBAAsB;IACnC,oBAAoB,EAAC,sBAAsB;IAE3C,OAAO;IACP,QAAQ,EAAE,mBAAmB;IAC7B,aAAa,EAAE,wBAAwB;IACvC,aAAa,EAAE,wBAAwB;IACvC,cAAc,EAAE,yBAAyB;IACzC,WAAW,EAAE,sBAAsB;IACnC,QAAQ,EAAE,mBAAmB;IAC7B,aAAa,EAAE,wBAAwB;CAC/B,CAAC"}
|
|
@@ -69,7 +69,7 @@ async function generatePluginProject(projectPath, config) {
|
|
|
69
69
|
},
|
|
70
70
|
keywords: ["fragment", "fragment-plugin"],
|
|
71
71
|
peerDependencies: {
|
|
72
|
-
"fragment-ts": "^3.0.
|
|
72
|
+
"fragment-ts": "^3.0.16",
|
|
73
73
|
},
|
|
74
74
|
devDependencies: {
|
|
75
75
|
typescript: "^5.3.3",
|
|
@@ -127,7 +127,7 @@ async function createConfigFiles(projectPath, projectName, config) {
|
|
|
127
127
|
devDependencies.prettier = "^3.2.5";
|
|
128
128
|
}
|
|
129
129
|
const dependencies = {
|
|
130
|
-
"fragment-ts": "^3.0.
|
|
130
|
+
"fragment-ts": "^3.0.16",
|
|
131
131
|
"reflect-metadata": "^0.1.13",
|
|
132
132
|
};
|
|
133
133
|
devDependencies["@types/react"] = "^18.0.0",
|
|
@@ -1,6 +1,18 @@
|
|
|
1
|
+
import type { FragmentRenderMode } from "../../../core/decorators/frontend.decorators";
|
|
2
|
+
/**
|
|
3
|
+
* Returns the render mode for a component class.
|
|
4
|
+
* Defaults to "server" if no metadata is set.
|
|
5
|
+
*/
|
|
6
|
+
export declare function getComponentRenderMode(target: any): FragmentRenderMode;
|
|
1
7
|
export declare function createFragmentComponent<TProps extends Record<string, any> = Record<string, any>>(componentClass: new () => any): (props: TProps) => any;
|
|
2
8
|
export declare function renderFragmentComponent<TProps extends Record<string, any> = Record<string, any>>(componentClass: new () => any, props?: TProps): any;
|
|
3
|
-
|
|
9
|
+
/**
|
|
10
|
+
* Stateless component with optional render mode.
|
|
11
|
+
*
|
|
12
|
+
* @example
|
|
13
|
+
* export const MyComp = fragmentStatelessComponent(() => <div />, "client");
|
|
14
|
+
*/
|
|
15
|
+
export declare function fragmentStatelessComponent<TProps extends Record<string, any> = Record<string, any>>(render: (props: TProps) => any, mode?: FragmentRenderMode): (props: TProps) => any;
|
|
4
16
|
export declare function useFragmentStore<TStore>(token: new () => TStore): TStore;
|
|
5
17
|
export declare function useStoreState<TStore, TValue>(token: new () => TStore, selector: (store: TStore) => TValue): TValue;
|
|
6
18
|
//# sourceMappingURL=fragment-react-runtime.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fragment-react-runtime.d.ts","sourceRoot":"","sources":["../../../../src/platform/web/react/fragment-react-runtime.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"fragment-react-runtime.d.ts","sourceRoot":"","sources":["../../../../src/platform/web/react/fragment-react-runtime.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,8CAA8C,CAAC;AAIvF;;;GAGG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,GAAG,GAAG,kBAAkB,CAKtE;AAED,wBAAgB,uBAAuB,CACrC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACxD,cAAc,EAAE,UAAU,GAAG,GAAG,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,CAgFvD;AAED,wBAAgB,uBAAuB,CACrC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACxD,cAAc,EAAE,UAAU,GAAG,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,GAAG,CAMpD;AAED;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,MAAM,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAExD,MAAM,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,EAC9B,IAAI,GAAE,kBAA6B,GAClC,CAAC,KAAK,EAAE,MAAM,KAAK,GAAG,CA2BxB;AAED,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,KAAK,EAAE,UAAU,MAAM,GAAG,MAAM,CAExE;AAED,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,EAC1C,KAAK,EAAE,UAAU,MAAM,EACvB,QAAQ,EAAE,CAAC,KAAK,EAAE,MAAM,KAAK,MAAM,GAClC,MAAM,CAGR"}
|
|
@@ -1,12 +1,22 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getComponentRenderMode = getComponentRenderMode;
|
|
3
4
|
exports.createFragmentComponent = createFragmentComponent;
|
|
4
5
|
exports.renderFragmentComponent = renderFragmentComponent;
|
|
5
6
|
exports.fragmentStatelessComponent = fragmentStatelessComponent;
|
|
6
7
|
exports.useFragmentStore = useFragmentStore;
|
|
7
8
|
exports.useStoreState = useStoreState;
|
|
8
9
|
const di_container_1 = require("../../../core/container/di-container");
|
|
10
|
+
const metadata_keys_1 = require("../../../core/metadata/metadata-keys");
|
|
9
11
|
const componentCache = new WeakMap();
|
|
12
|
+
/**
|
|
13
|
+
* Returns the render mode for a component class.
|
|
14
|
+
* Defaults to "server" if no metadata is set.
|
|
15
|
+
*/
|
|
16
|
+
function getComponentRenderMode(target) {
|
|
17
|
+
const source = target.__fragmentOriginalTarget || target;
|
|
18
|
+
return (Reflect.getMetadata(metadata_keys_1.METADATA_KEYS.FRAGMENT_RENDER_MODE, source) ?? "server");
|
|
19
|
+
}
|
|
10
20
|
function createFragmentComponent(componentClass) {
|
|
11
21
|
const source = componentClass.__fragmentOriginalTarget || componentClass;
|
|
12
22
|
if (componentCache.has(source)) {
|
|
@@ -18,34 +28,46 @@ function createFragmentComponent(componentClass) {
|
|
|
18
28
|
if (!container.has(source)) {
|
|
19
29
|
container.register(source);
|
|
20
30
|
}
|
|
21
|
-
|
|
31
|
+
const mode = Reflect.getMetadata(metadata_keys_1.METADATA_KEYS.FRAGMENT_RENDER_MODE, source) ?? "server";
|
|
22
32
|
const isReactComponent = source.prototype instanceof React.Component ||
|
|
23
33
|
source.prototype instanceof React.PureComponent;
|
|
24
34
|
let wrapped;
|
|
25
|
-
if (
|
|
26
|
-
//
|
|
27
|
-
|
|
35
|
+
if (mode === "client") {
|
|
36
|
+
// Client-only: during SSR render a placeholder div, browser takes over
|
|
37
|
+
wrapped = (props) => {
|
|
38
|
+
const placeholderId = `fragment-client-${source.name}`;
|
|
39
|
+
return React.createElement("div", {
|
|
40
|
+
id: placeholderId,
|
|
41
|
+
"data-fragment-component": source.name,
|
|
42
|
+
"data-fragment-props": JSON.stringify(props),
|
|
43
|
+
"data-fragment-mode": "client",
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
}
|
|
47
|
+
else if (isReactComponent) {
|
|
48
|
+
// "server" or "universal" with React.Component base —
|
|
49
|
+
// wrap as observer function component so hooks work inside render()
|
|
28
50
|
wrapped = observer((props) => {
|
|
29
51
|
const useRef = React.useRef;
|
|
30
52
|
const instanceRef = useRef(null);
|
|
31
53
|
if (!instanceRef.current) {
|
|
32
54
|
instanceRef.current = new source(props);
|
|
33
55
|
}
|
|
34
|
-
//
|
|
35
|
-
Object.assign(instanceRef.current, { props });
|
|
56
|
+
// Keep props in sync on every render
|
|
36
57
|
instanceRef.current.props = props;
|
|
58
|
+
Object.assign(instanceRef.current, props);
|
|
37
59
|
return instanceRef.current.render();
|
|
38
60
|
});
|
|
39
61
|
}
|
|
40
62
|
else {
|
|
41
|
-
//
|
|
63
|
+
// "server" or "universal" plain Fragment class (no React.Component base)
|
|
42
64
|
wrapped = observer((props) => {
|
|
43
65
|
const instance = container.resolve(source);
|
|
44
66
|
Object.assign(instance, props || {});
|
|
45
|
-
if (typeof instance.render ===
|
|
67
|
+
if (typeof instance.render === "function") {
|
|
46
68
|
return instance.render(props);
|
|
47
69
|
}
|
|
48
|
-
if (typeof instance ===
|
|
70
|
+
if (typeof instance === "function") {
|
|
49
71
|
return instance(props);
|
|
50
72
|
}
|
|
51
73
|
return null;
|
|
@@ -53,6 +75,7 @@ function createFragmentComponent(componentClass) {
|
|
|
53
75
|
}
|
|
54
76
|
wrapped.displayName = source.name;
|
|
55
77
|
wrapped.__fragmentOriginalTarget = source;
|
|
78
|
+
wrapped.__fragmentRenderMode = mode;
|
|
56
79
|
componentCache.set(source, wrapped);
|
|
57
80
|
return wrapped;
|
|
58
81
|
}
|
|
@@ -61,11 +84,31 @@ function renderFragmentComponent(componentClass, props) {
|
|
|
61
84
|
const Component = createFragmentComponent(componentClass);
|
|
62
85
|
return React.createElement(Component, props || {});
|
|
63
86
|
}
|
|
64
|
-
|
|
87
|
+
/**
|
|
88
|
+
* Stateless component with optional render mode.
|
|
89
|
+
*
|
|
90
|
+
* @example
|
|
91
|
+
* export const MyComp = fragmentStatelessComponent(() => <div />, "client");
|
|
92
|
+
*/
|
|
93
|
+
function fragmentStatelessComponent(render, mode = "server") {
|
|
65
94
|
const { observer } = require("mobx-react-lite");
|
|
66
|
-
const
|
|
67
|
-
|
|
95
|
+
const React = require("react");
|
|
96
|
+
let component;
|
|
97
|
+
if (mode === "client") {
|
|
98
|
+
// Render a placeholder during SSR; client runtime mounts the real thing
|
|
99
|
+
const name = render.name || "FragmentStatelessComponent";
|
|
100
|
+
component = (props) => React.createElement("div", {
|
|
101
|
+
"data-fragment-component": name,
|
|
102
|
+
"data-fragment-props": JSON.stringify(props),
|
|
103
|
+
"data-fragment-mode": "client",
|
|
104
|
+
});
|
|
105
|
+
component.__fragmentClientRender = render;
|
|
106
|
+
}
|
|
107
|
+
else {
|
|
108
|
+
component = observer((props) => render(props));
|
|
109
|
+
}
|
|
68
110
|
component.displayName = render.name || "FragmentStatelessComponent";
|
|
111
|
+
component.__fragmentRenderMode = mode;
|
|
69
112
|
return component;
|
|
70
113
|
}
|
|
71
114
|
function useFragmentStore(token) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fragment-react-runtime.js","sourceRoot":"","sources":["../../../../src/platform/web/react/fragment-react-runtime.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"fragment-react-runtime.js","sourceRoot":"","sources":["../../../../src/platform/web/react/fragment-react-runtime.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-page-renderer.d.ts","sourceRoot":"","sources":["../../../../src/platform/web/react/react-page-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAOlC,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;
|
|
1
|
+
{"version":3,"file":"react-page-renderer.d.ts","sourceRoot":"","sources":["../../../../src/platform/web/react/react-page-renderer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAOlC,MAAM,WAAW,mBAAmB;IAClC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAsED,qBAAa,iBAAiB;WACf,MAAM,CACjB,QAAQ,EAAE,GAAG,EACb,GAAG,EAAE,OAAO,GACX,OAAO,CAAC,mBAAmB,CAAC;IAuI/B,OAAO,CAAC,MAAM,CAAC,gBAAgB;CA8ChC"}
|
|
@@ -6,6 +6,70 @@ const di_container_1 = require("../../../core/container/di-container");
|
|
|
6
6
|
const metadata_storage_1 = require("../../../core/metadata/metadata-storage");
|
|
7
7
|
const route_pointer_registry_1 = require("../route-pointer/route-pointer-registry");
|
|
8
8
|
const config_utils_1 = require("../../../shared/config.utils");
|
|
9
|
+
/**
|
|
10
|
+
* Serializes the component tree into a descriptor the browser runtime can
|
|
11
|
+
* reconstruct. Each node is { type, props, children } where `type` is the
|
|
12
|
+
* registered component name.
|
|
13
|
+
*/
|
|
14
|
+
function serializeElement(element) {
|
|
15
|
+
if (element === null || element === undefined)
|
|
16
|
+
return null;
|
|
17
|
+
if (typeof element === "string" || typeof element === "number")
|
|
18
|
+
return element;
|
|
19
|
+
if (typeof element === "boolean")
|
|
20
|
+
return null;
|
|
21
|
+
if (Array.isArray(element)) {
|
|
22
|
+
return element.map(serializeElement);
|
|
23
|
+
}
|
|
24
|
+
// React element shape
|
|
25
|
+
if (element && element.$$typeof) {
|
|
26
|
+
const type = element.type;
|
|
27
|
+
const props = element.props || {};
|
|
28
|
+
// Intrinsic (string) elements — div, span, etc.
|
|
29
|
+
if (typeof type === "string") {
|
|
30
|
+
const { children, ...rest } = props;
|
|
31
|
+
return {
|
|
32
|
+
type,
|
|
33
|
+
props: sanitizeProps(rest),
|
|
34
|
+
children: children !== undefined ? serializeElement(children) : null,
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
// Fragment component (has __fragmentOriginalTarget) or named function
|
|
38
|
+
const name = type.__fragmentOriginalTarget?.name ||
|
|
39
|
+
type.displayName ||
|
|
40
|
+
type.name ||
|
|
41
|
+
null;
|
|
42
|
+
if (name) {
|
|
43
|
+
const { children, ...rest } = props;
|
|
44
|
+
return {
|
|
45
|
+
type: name,
|
|
46
|
+
props: sanitizeProps(rest),
|
|
47
|
+
children: children !== undefined ? serializeElement(children) : null,
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
return null;
|
|
52
|
+
}
|
|
53
|
+
/** Strip non-serializable values (functions, symbols) from props */
|
|
54
|
+
function sanitizeProps(props) {
|
|
55
|
+
const out = {};
|
|
56
|
+
for (const [k, v] of Object.entries(props)) {
|
|
57
|
+
if (typeof v === "function" || typeof v === "symbol")
|
|
58
|
+
continue;
|
|
59
|
+
if (typeof v === "object" && v !== null) {
|
|
60
|
+
try {
|
|
61
|
+
JSON.stringify(v);
|
|
62
|
+
out[k] = v;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
// skip non-serializable objects
|
|
66
|
+
}
|
|
67
|
+
continue;
|
|
68
|
+
}
|
|
69
|
+
out[k] = v;
|
|
70
|
+
}
|
|
71
|
+
return out;
|
|
72
|
+
}
|
|
9
73
|
class ReactPageRenderer {
|
|
10
74
|
static async render(instance, req) {
|
|
11
75
|
let reactDomServer;
|
|
@@ -20,7 +84,11 @@ class ReactPageRenderer {
|
|
|
20
84
|
const body = typeof renderOutput === "string"
|
|
21
85
|
? renderOutput
|
|
22
86
|
: reactDomServer.renderToString(renderOutput);
|
|
23
|
-
|
|
87
|
+
// Serialize the element tree so the client runtime can re-render it
|
|
88
|
+
const elementTree = typeof renderOutput === "string" ? null : serializeElement(renderOutput);
|
|
89
|
+
const title = (typeof instance.title === "function"
|
|
90
|
+
? instance.title(req)
|
|
91
|
+
: undefined) ||
|
|
24
92
|
metadata.title ||
|
|
25
93
|
"Fragment Web";
|
|
26
94
|
const templateName = metadata.template;
|
|
@@ -35,6 +103,67 @@ class ReactPageRenderer {
|
|
|
35
103
|
const stylingScript = webConfig.styling?.provider === "tailwind"
|
|
36
104
|
? `<script src="https://cdn.tailwindcss.com"></script>`
|
|
37
105
|
: "";
|
|
106
|
+
// Client hydration bootstrap — injected inline so no bundler is needed.
|
|
107
|
+
// The browser runtime reconstructs the React tree from the serialized
|
|
108
|
+
// element descriptor and calls hydrateRoot (or createRoot as fallback).
|
|
109
|
+
const hydrationScript = elementTree
|
|
110
|
+
? `
|
|
111
|
+
<script type="importmap">
|
|
112
|
+
{
|
|
113
|
+
"imports": {
|
|
114
|
+
"react": "https://esm.sh/react@18?dev",
|
|
115
|
+
"react-dom": "https://esm.sh/react-dom@18?dev",
|
|
116
|
+
"react-dom/client":"https://esm.sh/react-dom@18/client?dev",
|
|
117
|
+
"mobx": "https://esm.sh/mobx@6?dev",
|
|
118
|
+
"mobx-react-lite":"https://esm.sh/mobx-react-lite@3?dev"
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
</script>
|
|
122
|
+
<script type="module">
|
|
123
|
+
import React from 'react';
|
|
124
|
+
import { createRoot } from 'react-dom/client';
|
|
125
|
+
import { observable, action, computed, makeObservable } from 'mobx';
|
|
126
|
+
import { observer } from 'mobx-react-lite';
|
|
127
|
+
|
|
128
|
+
/* ── serialized element tree from SSR ── */
|
|
129
|
+
const TREE = ${JSON.stringify(elementTree)};
|
|
130
|
+
|
|
131
|
+
/* ── component registry (populated by inline scripts below) ── */
|
|
132
|
+
const REGISTRY = window.__fragmentRegistry__ = window.__fragmentRegistry__ || {};
|
|
133
|
+
|
|
134
|
+
/* ── store registry ── */
|
|
135
|
+
const STORES = window.__fragmentStores__ = window.__fragmentStores__ || {};
|
|
136
|
+
|
|
137
|
+
/* ── reconstruct React elements from the serialized tree ── */
|
|
138
|
+
function h(node) {
|
|
139
|
+
if (node === null || node === undefined) return null;
|
|
140
|
+
if (typeof node === 'string' || typeof node === 'number') return node;
|
|
141
|
+
if (Array.isArray(node)) return node.map(h);
|
|
142
|
+
|
|
143
|
+
const { type, props = {}, children } = node;
|
|
144
|
+
const Component = REGISTRY[type] || type;
|
|
145
|
+
const resolvedChildren = children !== null && children !== undefined ? h(children) : undefined;
|
|
146
|
+
return React.createElement(Component, props, resolvedChildren);
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
/* ── mount ── */
|
|
150
|
+
window.addEventListener('DOMContentLoaded', () => {
|
|
151
|
+
const app = document.getElementById('app');
|
|
152
|
+
if (!app) return;
|
|
153
|
+
|
|
154
|
+
// Wait one tick for inline component scripts to register
|
|
155
|
+
setTimeout(() => {
|
|
156
|
+
try {
|
|
157
|
+
const root = createRoot(app);
|
|
158
|
+
root.render(h(TREE));
|
|
159
|
+
console.log('[Fragment] client hydration complete');
|
|
160
|
+
} catch (err) {
|
|
161
|
+
console.error('[Fragment] hydration failed:', err);
|
|
162
|
+
}
|
|
163
|
+
}, 0);
|
|
164
|
+
});
|
|
165
|
+
</script>`
|
|
166
|
+
: "";
|
|
38
167
|
return {
|
|
39
168
|
title,
|
|
40
169
|
html: `<!doctype html>
|
|
@@ -49,6 +178,7 @@ class ReactPageRenderer {
|
|
|
49
178
|
<body>
|
|
50
179
|
<div id="app">${content}</div>
|
|
51
180
|
${routePointerScript ? `<script>${routePointerScript}</script>` : ""}
|
|
181
|
+
${hydrationScript}
|
|
52
182
|
</body>
|
|
53
183
|
</html>`,
|
|
54
184
|
};
|
|
@@ -59,8 +189,7 @@ class ReactPageRenderer {
|
|
|
59
189
|
const templateMeta = metadata_storage_1.MetadataStorage.getInstance()
|
|
60
190
|
.getAllClasses()
|
|
61
191
|
.find((entry) => entry.type === "template" &&
|
|
62
|
-
Reflect.getMetadata(metadata_keys_1.METADATA_KEYS.FRAGMENT_TEMPLATE, entry.target)?.name ===
|
|
63
|
-
templateName);
|
|
192
|
+
Reflect.getMetadata(metadata_keys_1.METADATA_KEYS.FRAGMENT_TEMPLATE, entry.target)?.name === templateName);
|
|
64
193
|
if (!templateMeta) {
|
|
65
194
|
return childHtml;
|
|
66
195
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react-page-renderer.js","sourceRoot":"","sources":["../../../../src/platform/web/react/react-page-renderer.ts"],"names":[],"mappings":";;;AACA,wEAAqE;AACrE,uEAAmE;AACnE,8EAA0E;AAC1E,oFAA+E;AAC/E,+DAA2D;AAO3D,MAAa,iBAAiB;IAC5B,MAAM,CAAC,KAAK,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"react-page-renderer.js","sourceRoot":"","sources":["../../../../src/platform/web/react/react-page-renderer.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "fragment-ts",
|
|
3
|
-
"version": "3.0.
|
|
3
|
+
"version": "3.0.16",
|
|
4
4
|
"description": "Fragment TS is a Spring Boot-inspired TypeScript framework for Express and TypeORM, built around dependency injection and decorators, with a fully modular CLI. It now supports installable API and Web surfaces so backend controllers and React-driven pages can live in one modular runtime.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|