@fluixi/core 1.0.0-alpha.53
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/LICENSE +21 -0
- package/README.md +611 -0
- package/dist/cdn/core.global.js +3 -0
- package/dist/cli/generate.cjs +1814 -0
- package/dist/cli/generate.d.ts +7 -0
- package/dist/cli/generate.d.ts.map +1 -0
- package/dist/cli/generate.js +2580 -0
- package/dist/cli/generate.mjs +1814 -0
- package/dist/cli/index.cjs +1814 -0
- package/dist/cli/index.d.ts +7 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +2580 -0
- package/dist/cli/index.mjs +1814 -0
- package/dist/cli/run.cjs +2 -0
- package/dist/cli/run.d.ts +3 -0
- package/dist/cli/run.d.ts.map +1 -0
- package/dist/cli/run.js +62 -0
- package/dist/cli/run.mjs +2 -0
- package/dist/fluixi.d.ts +5 -0
- package/dist/src/cdn/chunk-PFM5O5UE.mjs +1 -0
- package/dist/src/cdn/core.cjs +1 -0
- package/dist/src/cdn/core.d.ts +16 -0
- package/dist/src/cdn/core.d.ts.map +1 -0
- package/dist/src/cdn/core.js +15 -0
- package/dist/src/cdn/core.mjs +1 -0
- package/dist/src/cdn/router-next-WNWCFVC2.mjs +1 -0
- package/dist/src/index.cjs +1 -0
- package/dist/src/index.d.ts +7 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +26 -0
- package/dist/src/index.mjs +1 -0
- package/dist/src/jsx-dev-runtime.cjs +1 -0
- package/dist/src/jsx-dev-runtime.d.ts +2 -0
- package/dist/src/jsx-dev-runtime.d.ts.map +1 -0
- package/dist/src/jsx-dev-runtime.js +1 -0
- package/dist/src/jsx-dev-runtime.mjs +1 -0
- package/dist/src/jsx-runtime.cjs +1 -0
- package/dist/src/jsx-runtime.d.ts +7 -0
- package/dist/src/jsx-runtime.d.ts.map +1 -0
- package/dist/src/jsx-runtime.js +17 -0
- package/dist/src/jsx-runtime.mjs +1 -0
- package/dist/src/lib/client/chunk-D3VTWVNJ.mjs +1 -0
- package/dist/src/lib/client/index.cjs +1 -0
- package/dist/src/lib/client/index.d.ts +54 -0
- package/dist/src/lib/client/index.d.ts.map +1 -0
- package/dist/src/lib/client/index.js +142 -0
- package/dist/src/lib/client/index.mjs +1 -0
- package/dist/src/lib/client/router-next-UYIYMRJL.mjs +1 -0
- package/dist/src/lib/context/context.cjs +1 -0
- package/dist/src/lib/context/context.d.ts +337 -0
- package/dist/src/lib/context/context.d.ts.map +1 -0
- package/dist/src/lib/context/context.js +462 -0
- package/dist/src/lib/context/context.mjs +1 -0
- package/dist/src/lib/context/index.cjs +1 -0
- package/dist/src/lib/context/index.d.ts +3 -0
- package/dist/src/lib/context/index.d.ts.map +1 -0
- package/dist/src/lib/context/index.js +5 -0
- package/dist/src/lib/context/index.mjs +1 -0
- package/dist/src/lib/control-flow.cjs +1 -0
- package/dist/src/lib/control-flow.d.ts +4 -0
- package/dist/src/lib/control-flow.d.ts.map +1 -0
- package/dist/src/lib/control-flow.js +1 -0
- package/dist/src/lib/control-flow.mjs +1 -0
- package/dist/src/lib/core.cjs +1 -0
- package/dist/src/lib/core.d.ts +90 -0
- package/dist/src/lib/core.d.ts.map +1 -0
- package/dist/src/lib/core.js +181 -0
- package/dist/src/lib/core.mjs +1 -0
- package/dist/src/lib/directives/lit.cjs +1 -0
- package/dist/src/lib/directives/lit.d.ts +2 -0
- package/dist/src/lib/directives/lit.d.ts.map +1 -0
- package/dist/src/lib/directives/lit.js +31 -0
- package/dist/src/lib/directives/lit.mjs +0 -0
- package/dist/src/lib/env/index.cjs +1 -0
- package/dist/src/lib/env/index.d.ts +39 -0
- package/dist/src/lib/env/index.d.ts.map +1 -0
- package/dist/src/lib/env/index.js +50 -0
- package/dist/src/lib/env/index.mjs +1 -0
- package/dist/src/lib/i18n/index.cjs +1 -0
- package/dist/src/lib/i18n/index.d.ts +79 -0
- package/dist/src/lib/i18n/index.d.ts.map +1 -0
- package/dist/src/lib/i18n/index.js +127 -0
- package/dist/src/lib/i18n/index.mjs +1 -0
- package/dist/src/lib/index.cjs +1 -0
- package/dist/src/lib/index.d.ts +83 -0
- package/dist/src/lib/index.d.ts.map +1 -0
- package/dist/src/lib/index.js +147 -0
- package/dist/src/lib/index.mjs +1 -0
- package/dist/src/lib/isomorphic.cjs +1 -0
- package/dist/src/lib/isomorphic.d.ts +69 -0
- package/dist/src/lib/isomorphic.d.ts.map +1 -0
- package/dist/src/lib/isomorphic.js +92 -0
- package/dist/src/lib/isomorphic.mjs +1 -0
- package/dist/src/lib/jsx-runtime/index.cjs +1 -0
- package/dist/src/lib/jsx-runtime/index.d.ts +13 -0
- package/dist/src/lib/jsx-runtime/index.d.ts.map +1 -0
- package/dist/src/lib/jsx-runtime/index.js +23 -0
- package/dist/src/lib/jsx-runtime/index.mjs +1 -0
- package/dist/src/lib/jsx-runtime/jsx-dev-runtime.cjs +1 -0
- package/dist/src/lib/jsx-runtime/jsx-dev-runtime.d.ts +2 -0
- package/dist/src/lib/jsx-runtime/jsx-dev-runtime.d.ts.map +1 -0
- package/dist/src/lib/jsx-runtime/jsx-dev-runtime.js +1 -0
- package/dist/src/lib/jsx-runtime/jsx-dev-runtime.mjs +1 -0
- package/dist/src/lib/plugins/fluixi-routes-plugin.cjs +13 -0
- package/dist/src/lib/plugins/fluixi-routes-plugin.d.ts +21 -0
- package/dist/src/lib/plugins/fluixi-routes-plugin.d.ts.map +1 -0
- package/dist/src/lib/plugins/fluixi-routes-plugin.js +102 -0
- package/dist/src/lib/plugins/fluixi-routes-plugin.mjs +13 -0
- package/dist/src/lib/plugins/index.cjs +13 -0
- package/dist/src/lib/plugins/index.d.ts +4 -0
- package/dist/src/lib/plugins/index.d.ts.map +1 -0
- package/dist/src/lib/plugins/index.js +3 -0
- package/dist/src/lib/plugins/index.mjs +13 -0
- package/dist/src/lib/plugins/route-codegen.cjs +8 -0
- package/dist/src/lib/plugins/route-codegen.d.ts +13 -0
- package/dist/src/lib/plugins/route-codegen.d.ts.map +1 -0
- package/dist/src/lib/plugins/route-codegen.js +81 -0
- package/dist/src/lib/plugins/route-codegen.mjs +8 -0
- package/dist/src/lib/plugins/route-scanner.cjs +1 -0
- package/dist/src/lib/plugins/route-scanner.d.ts +39 -0
- package/dist/src/lib/plugins/route-scanner.d.ts.map +1 -0
- package/dist/src/lib/plugins/route-scanner.js +216 -0
- package/dist/src/lib/plugins/route-scanner.mjs +1 -0
- package/dist/src/lib/plugins/vite.cjs +1 -0
- package/dist/src/lib/plugins/vite.d.ts +3 -0
- package/dist/src/lib/plugins/vite.d.ts.map +1 -0
- package/dist/src/lib/plugins/vite.js +1 -0
- package/dist/src/lib/plugins/vite.mjs +1 -0
- package/dist/src/lib/render/component.cjs +1 -0
- package/dist/src/lib/render/component.d.ts +328 -0
- package/dist/src/lib/render/component.d.ts.map +1 -0
- package/dist/src/lib/render/component.js +520 -0
- package/dist/src/lib/render/component.mjs +1 -0
- package/dist/src/lib/render/index.cjs +1 -0
- package/dist/src/lib/render/index.d.ts +113 -0
- package/dist/src/lib/render/index.d.ts.map +1 -0
- package/dist/src/lib/render/index.js +201 -0
- package/dist/src/lib/render/index.mjs +1 -0
- package/dist/src/lib/render/lazy.cjs +1 -0
- package/dist/src/lib/render/lazy.d.ts +28 -0
- package/dist/src/lib/render/lazy.d.ts.map +1 -0
- package/dist/src/lib/render/lazy.js +62 -0
- package/dist/src/lib/render/lazy.mjs +1 -0
- package/dist/src/lib/render/suspense.cjs +1 -0
- package/dist/src/lib/render/suspense.d.ts +25 -0
- package/dist/src/lib/render/suspense.d.ts.map +1 -0
- package/dist/src/lib/render/suspense.js +139 -0
- package/dist/src/lib/render/suspense.mjs +1 -0
- package/dist/src/lib/router-next/data.cjs +1 -0
- package/dist/src/lib/router-next/data.d.ts +101 -0
- package/dist/src/lib/router-next/data.d.ts.map +1 -0
- package/dist/src/lib/router-next/data.js +179 -0
- package/dist/src/lib/router-next/data.mjs +1 -0
- package/dist/src/lib/router-next/index.cjs +1 -0
- package/dist/src/lib/router-next/index.d.ts +156 -0
- package/dist/src/lib/router-next/index.d.ts.map +1 -0
- package/dist/src/lib/router-next/index.js +464 -0
- package/dist/src/lib/router-next/index.mjs +1 -0
- package/dist/src/lib/server/hydration.cjs +1 -0
- package/dist/src/lib/server/hydration.d.ts +238 -0
- package/dist/src/lib/server/hydration.d.ts.map +1 -0
- package/dist/src/lib/server/hydration.js +384 -0
- package/dist/src/lib/server/hydration.mjs +1 -0
- package/dist/src/lib/server/index.cjs +16 -0
- package/dist/src/lib/server/index.d.ts +91 -0
- package/dist/src/lib/server/index.d.ts.map +1 -0
- package/dist/src/lib/server/index.js +141 -0
- package/dist/src/lib/server/index.mjs +16 -0
- package/dist/src/lib/server/reactive.cjs +1 -0
- package/dist/src/lib/server/reactive.d.ts +298 -0
- package/dist/src/lib/server/reactive.d.ts.map +1 -0
- package/dist/src/lib/server/reactive.js +472 -0
- package/dist/src/lib/server/reactive.mjs +1 -0
- package/dist/src/lib/theme/index.cjs +1 -0
- package/dist/src/lib/theme/index.d.ts +51 -0
- package/dist/src/lib/theme/index.d.ts.map +1 -0
- package/dist/src/lib/theme/index.js +79 -0
- package/dist/src/lib/theme/index.mjs +1 -0
- package/dist/src/lib/utils/index.cjs +1 -0
- package/dist/src/lib/utils/index.d.ts +379 -0
- package/dist/src/lib/utils/index.d.ts.map +1 -0
- package/dist/src/lib/utils/index.js +527 -0
- package/dist/src/lib/utils/index.mjs +1 -0
- package/dist/src/rx.cjs +1 -0
- package/dist/src/rx.d.ts +2 -0
- package/dist/src/rx.d.ts.map +1 -0
- package/dist/src/rx.js +101 -0
- package/dist/src/rx.mjs +0 -0
- package/dist/src/server.cjs +16 -0
- package/dist/src/server.d.ts +64 -0
- package/dist/src/server.d.ts.map +1 -0
- package/dist/src/server.js +63 -0
- package/dist/src/server.mjs +16 -0
- package/dist/tsconfig.lib.tsbuildinfo +1 -0
- package/package.json +128 -0
- package/src/index.ts +31 -0
- package/types/fluixi.d.ts +5 -0
- package/types/vinxi.d.ts +50 -0
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Server-Side Rendering Entry Point for Fluixi
|
|
3
|
+
* @module @fluixi/core/server
|
|
4
|
+
*
|
|
5
|
+
* Implements Unified SSR Engine compatible with Lit and JSX.
|
|
6
|
+
*/
|
|
7
|
+
import { serializeHydrationData, setHydrating, isHydrating, setHydrationData, getHydrationData, hasHydrationData, clearHydrationData, clearHydrationDataKey, deserializeHydrationData, hydrationMarker, hydrationMarkerStart, hydrationMarkerEnd, createHydratableResource, useHydrationData, cleanupHydration, isServerEnvironment, isClientEnvironment, type HydrationData } from './hydration.js';
|
|
8
|
+
/**
|
|
9
|
+
* SSR context for passing data during server rendering
|
|
10
|
+
*/
|
|
11
|
+
export interface SSRContext {
|
|
12
|
+
url: string;
|
|
13
|
+
headers: Record<string, string>;
|
|
14
|
+
[key: string]: any;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Document options
|
|
18
|
+
*/
|
|
19
|
+
export interface DocumentOptions {
|
|
20
|
+
title?: string;
|
|
21
|
+
lang?: string;
|
|
22
|
+
stylesheets?: string[];
|
|
23
|
+
scripts?: string[];
|
|
24
|
+
head?: string;
|
|
25
|
+
bodyAttributes?: string;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Get current SSR context
|
|
29
|
+
*/
|
|
30
|
+
export declare function getSSRContext(): SSRContext | null;
|
|
31
|
+
/**
|
|
32
|
+
* Set SSR context
|
|
33
|
+
*/
|
|
34
|
+
export declare function setSSRContext(context: SSRContext | null): void;
|
|
35
|
+
/**
|
|
36
|
+
* Run function with SSR context
|
|
37
|
+
*/
|
|
38
|
+
export declare function withSSRContext<T>(context: SSRContext, fn: () => T): T;
|
|
39
|
+
/**
|
|
40
|
+
* Render complete HTML page
|
|
41
|
+
*
|
|
42
|
+
* @param {() => any} code - Component function
|
|
43
|
+
* @param {DocumentOptions} options - Document options
|
|
44
|
+
* @returns {Promise<string>} Complete HTML document
|
|
45
|
+
*/
|
|
46
|
+
export declare function renderToPage(code: () => any, options?: DocumentOptions): Promise<string>;
|
|
47
|
+
/**
|
|
48
|
+
* Create HTML document wrapper
|
|
49
|
+
*/
|
|
50
|
+
export declare function createHtmlDocument(content: string, options?: DocumentOptions): string;
|
|
51
|
+
export declare function isServer(): boolean;
|
|
52
|
+
export declare function isClient(): boolean;
|
|
53
|
+
export declare function onServer<T>(fn: () => T, fallback: T): T;
|
|
54
|
+
export declare function onClient<T>(fn: () => T, fallback: T): T;
|
|
55
|
+
/**
|
|
56
|
+
* Render component to HTML string
|
|
57
|
+
*/
|
|
58
|
+
export declare function renderToString(code: () => any): Promise<string>;
|
|
59
|
+
/**
|
|
60
|
+
* Render component to stream (includes hydration data)
|
|
61
|
+
*/
|
|
62
|
+
export declare function renderToStream(code: () => any): Promise<string>;
|
|
63
|
+
/**
|
|
64
|
+
* Standard server entry point.
|
|
65
|
+
* Returns an object with render/stream/page helpers
|
|
66
|
+
* for use in server frameworks (Express, Hono, Nitro, etc.)
|
|
67
|
+
*
|
|
68
|
+
* @example
|
|
69
|
+
* ```ts
|
|
70
|
+
* // entry-server.ts
|
|
71
|
+
* import { startServer } from '@fluixi/core/server';
|
|
72
|
+
* import App from './app';
|
|
73
|
+
*
|
|
74
|
+
* export default startServer(App);
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare function startServer(App: (props: {
|
|
78
|
+
url: string;
|
|
79
|
+
}) => any): {
|
|
80
|
+
/** Render the app to a full HTML string (includes hydration data) */
|
|
81
|
+
render: (url: string) => Promise<string>;
|
|
82
|
+
/** Render the app to a streamable HTML string (includes hydration data) */
|
|
83
|
+
stream: (url: string) => Promise<string>;
|
|
84
|
+
/** Render the app to a complete HTML page document */
|
|
85
|
+
page: (url: string, opts?: DocumentOptions) => Promise<string>;
|
|
86
|
+
};
|
|
87
|
+
export { createSignal, createEffect, createMemo, createRoot, batch, untrack, onCleanup, getOwner, runWithOwner, createContext, useContext, createComputed, createRenderEffect, createDeferred, createSelector, createResource, startTransition, isServer as isServerReactive, isClient as isClientReactive, } from './reactive.js';
|
|
88
|
+
export type { SignalTuple, Accessor, Setter, SignalOptions, RootOwner, Context, } from './reactive.js';
|
|
89
|
+
export { isHydrating, setHydrating, setHydrationData, getHydrationData, hasHydrationData, clearHydrationData, clearHydrationDataKey, serializeHydrationData, deserializeHydrationData, hydrationMarker, hydrationMarkerStart, hydrationMarkerEnd, createHydratableResource, useHydrationData, cleanupHydration, isServerEnvironment, isClientEnvironment, };
|
|
90
|
+
export type { HydrationData };
|
|
91
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/lib/server/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Server-Side Rendering Entry Point for Fluixi
|
|
3
|
+
* @module @fluixi/core/server
|
|
4
|
+
*
|
|
5
|
+
* Implements Unified SSR Engine compatible with Lit and JSX.
|
|
6
|
+
*/
|
|
7
|
+
import { serializeHydrationData, setHydrating, isHydrating, setHydrationData, getHydrationData, hasHydrationData, clearHydrationData, clearHydrationDataKey, deserializeHydrationData, hydrationMarker, hydrationMarkerStart, hydrationMarkerEnd, createHydratableResource, useHydrationData, cleanupHydration, isServerEnvironment, isClientEnvironment, } from './hydration.js';
|
|
8
|
+
// SSR runs through @fluixi/server: the universal renderer + request-scoping,
|
|
9
|
+
// with AsyncLocalStorage injected so concurrent renders are isolated.
|
|
10
|
+
import { renderToString as domRenderToString } from '@fluixi/server';
|
|
11
|
+
// ============================================================================
|
|
12
|
+
// SSR CONTEXT MANAGEMENT
|
|
13
|
+
// ============================================================================
|
|
14
|
+
let currentSSRContext = null;
|
|
15
|
+
/**
|
|
16
|
+
* Get current SSR context
|
|
17
|
+
*/
|
|
18
|
+
export function getSSRContext() {
|
|
19
|
+
return currentSSRContext;
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Set SSR context
|
|
23
|
+
*/
|
|
24
|
+
export function setSSRContext(context) {
|
|
25
|
+
currentSSRContext = context;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Run function with SSR context
|
|
29
|
+
*/
|
|
30
|
+
export function withSSRContext(context, fn) {
|
|
31
|
+
const prev = currentSSRContext;
|
|
32
|
+
currentSSRContext = context;
|
|
33
|
+
try {
|
|
34
|
+
return fn();
|
|
35
|
+
}
|
|
36
|
+
finally {
|
|
37
|
+
currentSSRContext = prev;
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
// ============================================================================
|
|
41
|
+
// HTML GENERATION
|
|
42
|
+
// ============================================================================
|
|
43
|
+
/**
|
|
44
|
+
* Render complete HTML page
|
|
45
|
+
*
|
|
46
|
+
* @param {() => any} code - Component function
|
|
47
|
+
* @param {DocumentOptions} options - Document options
|
|
48
|
+
* @returns {Promise<string>} Complete HTML document
|
|
49
|
+
*/
|
|
50
|
+
export async function renderToPage(code, options = {}) {
|
|
51
|
+
const content = await renderToString(code);
|
|
52
|
+
return createHtmlDocument(content, options);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Create HTML document wrapper
|
|
56
|
+
*/
|
|
57
|
+
export function createHtmlDocument(content, options = {}) {
|
|
58
|
+
const { title = 'Fluixi App', lang = 'en', stylesheets = [], scripts = [], head = '', bodyAttributes = '', } = options;
|
|
59
|
+
const styleTags = stylesheets
|
|
60
|
+
.map((href) => `<link rel="stylesheet" href="${href}">`)
|
|
61
|
+
.join('\n ');
|
|
62
|
+
const scriptTags = scripts
|
|
63
|
+
.map((src) => `<script type="module" src="${src}"></script>`)
|
|
64
|
+
.join('\n ');
|
|
65
|
+
return `<!DOCTYPE html>
|
|
66
|
+
<html lang="${lang}">
|
|
67
|
+
<head>
|
|
68
|
+
<meta charset="UTF-8">
|
|
69
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
70
|
+
<title>${title}</title>
|
|
71
|
+
${styleTags}
|
|
72
|
+
${head}
|
|
73
|
+
</head>
|
|
74
|
+
<body${bodyAttributes ? ' ' + bodyAttributes : ''}>
|
|
75
|
+
${content}
|
|
76
|
+
${scriptTags}
|
|
77
|
+
</body>
|
|
78
|
+
</html>`;
|
|
79
|
+
}
|
|
80
|
+
// ============================================================================
|
|
81
|
+
// ENVIRONMENT DETECTION
|
|
82
|
+
// ============================================================================
|
|
83
|
+
export function isServer() {
|
|
84
|
+
return typeof window === 'undefined';
|
|
85
|
+
}
|
|
86
|
+
export function isClient() {
|
|
87
|
+
return typeof window !== 'undefined';
|
|
88
|
+
}
|
|
89
|
+
export function onServer(fn, fallback) {
|
|
90
|
+
return isServer() ? fn() : fallback;
|
|
91
|
+
}
|
|
92
|
+
export function onClient(fn, fallback) {
|
|
93
|
+
return isClient() ? fn() : fallback;
|
|
94
|
+
}
|
|
95
|
+
// ============================================================================
|
|
96
|
+
// EXPORTS
|
|
97
|
+
// ============================================================================
|
|
98
|
+
/**
|
|
99
|
+
* Render component to HTML string
|
|
100
|
+
*/
|
|
101
|
+
export async function renderToString(code) {
|
|
102
|
+
const html = await domRenderToString(code);
|
|
103
|
+
const script = serializeHydrationData();
|
|
104
|
+
return html + script;
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Render component to stream (includes hydration data)
|
|
108
|
+
*/
|
|
109
|
+
export async function renderToStream(code) {
|
|
110
|
+
const html = await domRenderToString(code);
|
|
111
|
+
const script = serializeHydrationData();
|
|
112
|
+
return html + script;
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Standard server entry point.
|
|
116
|
+
* Returns an object with render/stream/page helpers
|
|
117
|
+
* for use in server frameworks (Express, Hono, Nitro, etc.)
|
|
118
|
+
*
|
|
119
|
+
* @example
|
|
120
|
+
* ```ts
|
|
121
|
+
* // entry-server.ts
|
|
122
|
+
* import { startServer } from '@fluixi/core/server';
|
|
123
|
+
* import App from './app';
|
|
124
|
+
*
|
|
125
|
+
* export default startServer(App);
|
|
126
|
+
* ```
|
|
127
|
+
*/
|
|
128
|
+
export function startServer(App) {
|
|
129
|
+
return {
|
|
130
|
+
/** Render the app to a full HTML string (includes hydration data) */
|
|
131
|
+
render: (url) => renderToString(() => App({ url })),
|
|
132
|
+
/** Render the app to a streamable HTML string (includes hydration data) */
|
|
133
|
+
stream: (url) => renderToStream(() => App({ url })),
|
|
134
|
+
/** Render the app to a complete HTML page document */
|
|
135
|
+
page: (url, opts) => renderToPage(() => App({ url }), opts),
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
// Re-export server-mapped reactive primitives
|
|
139
|
+
export { createSignal, createEffect, createMemo, createRoot, batch, untrack, onCleanup, getOwner, runWithOwner, createContext, useContext, createComputed, createRenderEffect, createDeferred, createSelector, createResource, startTransition, isServer as isServerReactive, isClient as isClientReactive, } from './reactive.js';
|
|
140
|
+
// Re-export all hydration utilities
|
|
141
|
+
export { isHydrating, setHydrating, setHydrationData, getHydrationData, hasHydrationData, clearHydrationData, clearHydrationDataKey, serializeHydrationData, deserializeHydrationData, hydrationMarker, hydrationMarkerStart, hydrationMarkerEnd, createHydratableResource, useHydrationData, cleanupHydration, isServerEnvironment, isClientEnvironment, };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
var x=!1,a=new Map;function g(){return x}function b(t){x=t}function l(t,e){a.set(t,e)}function p(t){return a.get(t)}function O(t){return a.has(t)}function S(){a.clear()}function E(t){a.delete(t)}function f(){if(a.size===0)return"";let t=Object.fromEntries(a);return`<script type="application/json" id="__FLUIXI_HYDRATION__">${JSON.stringify(t)}<\/script>`}function A(){if(typeof window>"u")return!1;let t=document.getElementById("__FLUIXI_HYDRATION__");if(!t||t.getAttribute("type")!=="application/json")return!1;try{let e=t.textContent||"{}",n=JSON.parse(e);for(let[r,o]of Object.entries(n))a.set(r,o);return!0}catch(e){return console.error("Failed to deserialize hydration data:",e),!1}}function k(t){return`<!--#${t}-->`}function _(t){return`<!--#${t}-->`}function j(t){return`<!--/${t}-->`}function M(t,e){return async()=>{if(g()||typeof window<"u"){let r=p(t);if(r!==void 0)return r}let n=await e();return typeof window>"u"&&l(t,n),n}}function $(t,e){let n=p(t);if(n!==void 0)return n;let r=typeof e=="function"?e():e;return typeof window>"u"&&l(t,r),r}function m(){if(typeof window>"u")return;let t=document.getElementById("__FLUIXI_HYDRATION__");t&&t.remove();let e=document.createTreeWalker(document.body,NodeFilter.SHOW_COMMENT,null),n=[],r;for(;r=e.nextNode();){let o=r,i=o.nodeValue||"";(i.startsWith("#")||i.startsWith("/"))&&n.push(o)}n.forEach(o=>o.remove()),S()}typeof window<"u"&&window.addEventListener("load",()=>{setTimeout(m,100)});function K(){return typeof window>"u"}function F(){return typeof window<"u"}import{renderToString as w}from"@fluixi/server";function I(t,e){let n=t;return[(()=>n),i=>(typeof i=="function"?n=i(n):n=i,n)]}function y(t,e,n){try{t(e)}catch(r){console.error("[Fluixi Server] Effect error:",r)}return{dispose:()=>{}}}function h(t,e,n){let r=t(e);return(()=>r)}function N(t){let e=[],n=()=>{e.forEach(r=>{try{r()}catch(o){console.error("[Fluixi Server] Cleanup error:",o)}}),e.length=0};try{return t(n)}catch(r){throw n(),r}}function z(t){return t()}function W(t){return t()}var v=null;function L(t){v&&v.push(t)}var u=null;function U(){return u}function Y(t,e){let n=u;u=t;try{return e()}finally{u=n}}var s=new Map;function P(t){let e=Symbol("context");return{id:e,Provider:r=>{let o=s.get(e);s.set(e,r.value);try{return r.children}finally{o!==void 0?s.set(e,o):s.delete(e)}},defaultValue:t}}function V(t){let e=s.get(t.id);return e!==void 0?e:t.defaultValue}function X(t){return y(t)}function B(t){return y(t)}function J(t){return h(t)}function q(t){let e=t();return n=>n===e}function G(t,e,n){return[()=>{},{mutate:r=>r,refetch:()=>{}}]}function Q(t){t()}var Z=!0,tt=!1;var c=null;function dt(){return c}function lt(t){c=t}function pt(t,e){let n=c;c=t;try{return e()}finally{c=n}}async function et(t,e={}){let n=await C(t);return nt(n,e)}function nt(t,e={}){let{title:n="Fluixi App",lang:r="en",stylesheets:o=[],scripts:i=[],head:D="",bodyAttributes:T=""}=e,R=o.map(d=>`<link rel="stylesheet" href="${d}">`).join(`
|
|
2
|
+
`),H=i.map(d=>`<script type="module" src="${d}"><\/script>`).join(`
|
|
3
|
+
`);return`<!DOCTYPE html>
|
|
4
|
+
<html lang="${r}">
|
|
5
|
+
<head>
|
|
6
|
+
<meta charset="UTF-8">
|
|
7
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
8
|
+
<title>${n}</title>
|
|
9
|
+
${R}
|
|
10
|
+
${D}
|
|
11
|
+
</head>
|
|
12
|
+
<body${T?" "+T:""}>
|
|
13
|
+
${t}
|
|
14
|
+
${H}
|
|
15
|
+
</body>
|
|
16
|
+
</html>`}function rt(){return typeof window>"u"}function ot(){return typeof window<"u"}function ft(t,e){return rt()?t():e}function yt(t,e){return ot()?t():e}async function C(t){let e=await w(t),n=f();return e+n}async function it(t){let e=await w(t),n=f();return e+n}function Tt(t){return{render:e=>C(()=>t({url:e})),stream:e=>it(()=>t({url:e})),page:(e,n)=>et(()=>t({url:e}),n)}}export{z as batch,m as cleanupHydration,S as clearHydrationData,E as clearHydrationDataKey,X as createComputed,P as createContext,J as createDeferred,y as createEffect,nt as createHtmlDocument,M as createHydratableResource,h as createMemo,B as createRenderEffect,G as createResource,N as createRoot,q as createSelector,I as createSignal,A as deserializeHydrationData,p as getHydrationData,U as getOwner,dt as getSSRContext,O as hasHydrationData,k as hydrationMarker,j as hydrationMarkerEnd,_ as hydrationMarkerStart,ot as isClient,F as isClientEnvironment,tt as isClientReactive,g as isHydrating,rt as isServer,K as isServerEnvironment,Z as isServerReactive,L as onCleanup,yt as onClient,ft as onServer,et as renderToPage,it as renderToStream,C as renderToString,Y as runWithOwner,f as serializeHydrationData,b as setHydrating,l as setHydrationData,lt as setSSRContext,Tt as startServer,Q as startTransition,W as untrack,V as useContext,$ as useHydrationData,pt as withSSRContext};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
"use strict";var l=Object.defineProperty;var d=Object.getOwnPropertyDescriptor;var x=Object.getOwnPropertyNames;var y=Object.prototype.hasOwnProperty;var v=(e,t)=>{for(var o in t)l(e,o,{get:t[o],enumerable:!0})},S=(e,t,o,n)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of x(t))!y.call(e,r)&&r!==o&&l(e,r,{get:()=>t[r],enumerable:!(n=d(t,r))||n.enumerable});return e};var g=e=>S(l({},"__esModule",{value:!0}),e);var G={};v(G,{batch:()=>h,createComputed:()=>j,createContext:()=>b,createDeferred:()=>E,createEffect:()=>T,createMemo:()=>f,createRenderEffect:()=>F,createResource:()=>M,createRoot:()=>C,createSelector:()=>k,createSignal:()=>w,createStore:()=>D,getOwner:()=>R,getSharedConfig:()=>B,isClient:()=>q,isServer:()=>W,onCleanup:()=>K,runWithOwner:()=>O,setOwner:()=>z,sharedConfig:()=>u,startTransition:()=>V,untrack:()=>A,useContext:()=>m});module.exports=g(G);function w(e,t){let o=e;return[(()=>o),c=>(typeof c=="function"?o=c(o):o=c,o)]}function T(e,t,o){try{e(t)}catch(n){console.error("[Fluixi Server] Effect error:",n)}return{dispose:()=>{}}}function f(e,t,o){let n=e(t);return(()=>n)}function C(e){let t=[],o=()=>{t.forEach(n=>{try{n()}catch(r){console.error("[Fluixi Server] Cleanup error:",r)}}),t.length=0};try{return e(o)}catch(n){throw o(),n}}function h(e){return e()}function A(e){return e()}var p=null;function K(e){p&&p.push(e)}var s=null;function R(){return s}function O(e,t){let o=s;s=e;try{return t()}finally{s=o}}var i=new Map;function b(e){let t=Symbol("context");return{id:t,Provider:n=>{let r=i.get(t);i.set(t,n.value);try{return n.children}finally{r!==void 0?i.set(t,r):i.delete(t)}},defaultValue:e}}function m(e){let t=i.get(e.id);return t!==void 0?t:e.defaultValue}function j(e){return T(e)}function F(e){return T(e)}function E(e){return f(e)}function k(e){let t=e();return o=>o===t}function M(e,t,o){return[()=>{},{mutate:n=>n,refetch:()=>{}}]}function D(e){let t={...e};function o(n,r){if(typeof n=="object"&&n!==null&&!Array.isArray(n))for(let c of Object.keys(n)){let a=n[c];t[c]=typeof a=="function"?a(t[c]):a}else t[n]=typeof r=="function"?r(t[n]):r}return[t,o]}function V(e){e()}var W=!0,q=!1,u={context:null,owner:null};function z(e){s=e,u.owner=e,u.context=e}function B(){return u}
|
|
@@ -0,0 +1,298 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview Server Reactive Primitives for Fluixi
|
|
3
|
+
* @module @fluixi/core/server/reactive
|
|
4
|
+
*
|
|
5
|
+
* Maps reactive primitives for server-side execution
|
|
6
|
+
* Following SolidJS pattern of server-specific reactive behavior
|
|
7
|
+
*
|
|
8
|
+
* Server mode:
|
|
9
|
+
* - Signals read-only snapshot
|
|
10
|
+
* - Effects run once
|
|
11
|
+
* - No scheduling
|
|
12
|
+
* - No subscriptions
|
|
13
|
+
*/
|
|
14
|
+
import type { SignalTuple, Accessor, Setter, SignalOptions, RootOwner, Context } from '@fluixi/reactive/signal';
|
|
15
|
+
/**
|
|
16
|
+
* Server createSignal - Returns snapshot value
|
|
17
|
+
*
|
|
18
|
+
* Section 4: Signals read-only snapshot on server
|
|
19
|
+
* No reactivity, no tracking, just initial value
|
|
20
|
+
*
|
|
21
|
+
* @template T
|
|
22
|
+
* @param {T} value - Initial value
|
|
23
|
+
* @param {SignalOptions<T>} options - SignalTuple options (ignored on server)
|
|
24
|
+
* @returns {SignalTuple<T>} Tuple of [getter, setter]
|
|
25
|
+
*
|
|
26
|
+
* @example
|
|
27
|
+
* ```typescript
|
|
28
|
+
* // On server, this returns a static snapshot
|
|
29
|
+
* const [count, setCount] = createSignal(0);
|
|
30
|
+
* console.log(count()); // 0
|
|
31
|
+
* setCount(1); // Updates value but triggers no effects
|
|
32
|
+
* console.log(count()); // 1
|
|
33
|
+
* ```
|
|
34
|
+
*/
|
|
35
|
+
export declare function createSignal<T>(value: T, options?: SignalOptions<T>): SignalTuple<T>;
|
|
36
|
+
/**
|
|
37
|
+
* Server createEffect - Runs once, no tracking
|
|
38
|
+
*
|
|
39
|
+
* Section 4: Effects run once on server, no scheduling
|
|
40
|
+
* Execute immediately and return no-op disposer
|
|
41
|
+
*
|
|
42
|
+
* @param {(v?: any) => any} fn - Effect function
|
|
43
|
+
* @param {any} value - Initial value (optional)
|
|
44
|
+
* @param {any} options - Effect options (ignored on server)
|
|
45
|
+
* @returns {{ dispose: () => void }} Disposer object
|
|
46
|
+
*
|
|
47
|
+
* @example
|
|
48
|
+
* ```typescript
|
|
49
|
+
* // On server, runs once immediately
|
|
50
|
+
* createEffect(() => {
|
|
51
|
+
* console.log('This runs once');
|
|
52
|
+
* });
|
|
53
|
+
* ```
|
|
54
|
+
*/
|
|
55
|
+
export declare function createEffect(fn: (v?: any) => any, value?: any, options?: any): {
|
|
56
|
+
dispose: () => void;
|
|
57
|
+
};
|
|
58
|
+
/**
|
|
59
|
+
* Server createMemo - Compute once, return static accessor
|
|
60
|
+
*
|
|
61
|
+
* Section 4: No tracking on server, single evaluation
|
|
62
|
+
* Memoizes value at creation time
|
|
63
|
+
*
|
|
64
|
+
* @template T
|
|
65
|
+
* @param {(v?: T) => T} fn - Computation function
|
|
66
|
+
* @param {T} value - Initial value (optional)
|
|
67
|
+
* @param {any} options - Memo options (ignored on server)
|
|
68
|
+
* @returns {Accessor<T>} Static accessor
|
|
69
|
+
*
|
|
70
|
+
* @example
|
|
71
|
+
* ```typescript
|
|
72
|
+
* const [count] = createSignal(5);
|
|
73
|
+
* const doubled = createMemo(() => count() * 2);
|
|
74
|
+
* console.log(doubled()); // 10 (computed once)
|
|
75
|
+
* ```
|
|
76
|
+
*/
|
|
77
|
+
export declare function createMemo<T>(fn: (v?: T) => T, value?: T, options?: any): Accessor<T>;
|
|
78
|
+
/**
|
|
79
|
+
* Server createRoot - Creates owner but no reactive tracking
|
|
80
|
+
*
|
|
81
|
+
* Section 5: Owners exist on server for tree structure
|
|
82
|
+
* Needed for context and cleanup, but no reactive tracking
|
|
83
|
+
*
|
|
84
|
+
* @template T
|
|
85
|
+
* @param {(dispose: () => void) => T} fn - Root function
|
|
86
|
+
* @returns {T} Function result
|
|
87
|
+
*
|
|
88
|
+
* @example
|
|
89
|
+
* ```typescript
|
|
90
|
+
* const result = createRoot((dispose) => {
|
|
91
|
+
* // Server: Executes once, maintains owner tree
|
|
92
|
+
* return <App />;
|
|
93
|
+
* });
|
|
94
|
+
* ```
|
|
95
|
+
*/
|
|
96
|
+
export declare function createRoot<T>(fn: (dispose: () => void) => T): T;
|
|
97
|
+
/**
|
|
98
|
+
* Server batch - Execute immediately, no batching
|
|
99
|
+
*
|
|
100
|
+
* Section 4: No scheduling on server
|
|
101
|
+
* Just runs the function synchronously
|
|
102
|
+
*
|
|
103
|
+
* @template T
|
|
104
|
+
* @param {() => T} fn - Function to batch
|
|
105
|
+
* @returns {T} Function result
|
|
106
|
+
*
|
|
107
|
+
* @example
|
|
108
|
+
* ```typescript
|
|
109
|
+
* batch(() => {
|
|
110
|
+
* setCount(1);
|
|
111
|
+
* setName('Alice');
|
|
112
|
+
* }); // Executes immediately
|
|
113
|
+
* ```
|
|
114
|
+
*/
|
|
115
|
+
export declare function batch<T>(fn: () => T): T;
|
|
116
|
+
/**
|
|
117
|
+
* Server untrack - Execute function (already untracked)
|
|
118
|
+
*
|
|
119
|
+
* Section 4: No tracking on server anyway
|
|
120
|
+
* This is a no-op but exists for API compatibility
|
|
121
|
+
*
|
|
122
|
+
* @template T
|
|
123
|
+
* @param {() => T} fn - Function to run untracked
|
|
124
|
+
* @returns {T} Function result
|
|
125
|
+
*
|
|
126
|
+
* @example
|
|
127
|
+
* ```typescript
|
|
128
|
+
* untrack(() => {
|
|
129
|
+
* return signal(); // Not tracked (but nothing is on server)
|
|
130
|
+
* });
|
|
131
|
+
* ```
|
|
132
|
+
*/
|
|
133
|
+
export declare function untrack<T>(fn: () => T): T;
|
|
134
|
+
/**
|
|
135
|
+
* Server onCleanup - Register cleanup function
|
|
136
|
+
*
|
|
137
|
+
* Section 5: Cleanup still needed for SSR resource management
|
|
138
|
+
* Stores cleanup for execution when root disposes
|
|
139
|
+
*
|
|
140
|
+
* @param {() => void} fn - Cleanup function
|
|
141
|
+
*
|
|
142
|
+
* @example
|
|
143
|
+
* ```typescript
|
|
144
|
+
* createRoot((dispose) => {
|
|
145
|
+
* onCleanup(() => {
|
|
146
|
+
* console.log('Cleanup on dispose');
|
|
147
|
+
* });
|
|
148
|
+
* return result;
|
|
149
|
+
* });
|
|
150
|
+
* ```
|
|
151
|
+
*/
|
|
152
|
+
export declare function onCleanup(fn: () => void): void;
|
|
153
|
+
/**
|
|
154
|
+
* Server getOwner - Get current reactive owner
|
|
155
|
+
*
|
|
156
|
+
* Section 5: Owner tree maintained on server for context
|
|
157
|
+
*
|
|
158
|
+
* @returns {RootOwner | null} Current owner or null
|
|
159
|
+
*/
|
|
160
|
+
export declare function getOwner(): RootOwner | null;
|
|
161
|
+
/**
|
|
162
|
+
* Server runWithOwner - Run function with specific owner
|
|
163
|
+
*
|
|
164
|
+
* Section 5: Owner switching for proper context nesting
|
|
165
|
+
*
|
|
166
|
+
* @template T
|
|
167
|
+
* @param {RootOwner | null} owner - Owner to run with
|
|
168
|
+
* @param {() => T} fn - Function to run
|
|
169
|
+
* @returns {T} Function result
|
|
170
|
+
*/
|
|
171
|
+
export declare function runWithOwner<T>(owner: RootOwner | null, fn: () => T): T;
|
|
172
|
+
/**
|
|
173
|
+
* Server createContext - Create context with default value
|
|
174
|
+
*
|
|
175
|
+
* Section 9: Context lookup-based, no subscriptions on server
|
|
176
|
+
*
|
|
177
|
+
* @template T
|
|
178
|
+
* @param {T} defaultValue - Default context value
|
|
179
|
+
* @returns {Context<T>} Context object
|
|
180
|
+
*
|
|
181
|
+
* @example
|
|
182
|
+
* ```typescript
|
|
183
|
+
* const ThemeContext = createContext('light');
|
|
184
|
+
* ```
|
|
185
|
+
*/
|
|
186
|
+
export declare function createContext<T>(defaultValue?: T): Context<T>;
|
|
187
|
+
/**
|
|
188
|
+
* Server useContext - Retrieve context value
|
|
189
|
+
*
|
|
190
|
+
* Section 9: No subscriptions on server, just lookup
|
|
191
|
+
*
|
|
192
|
+
* @template T
|
|
193
|
+
* @param {Context<T>} context - Context to use
|
|
194
|
+
* @returns {T} Context value
|
|
195
|
+
*
|
|
196
|
+
* @example
|
|
197
|
+
* ```typescript
|
|
198
|
+
* const theme = useContext(ThemeContext);
|
|
199
|
+
* ```
|
|
200
|
+
*/
|
|
201
|
+
export declare function useContext<T>(context: Context<T>): T;
|
|
202
|
+
/**
|
|
203
|
+
* Server createComputed - Alias for createEffect
|
|
204
|
+
*
|
|
205
|
+
* On server, computed values run once like effects
|
|
206
|
+
*
|
|
207
|
+
* @param {() => any} fn - Computation function
|
|
208
|
+
* @returns {{ dispose: () => void }} Disposer
|
|
209
|
+
*/
|
|
210
|
+
export declare function createComputed(fn: () => any): {
|
|
211
|
+
dispose: () => void;
|
|
212
|
+
};
|
|
213
|
+
/**
|
|
214
|
+
* Server createRenderEffect - Runs once for SSR rendering
|
|
215
|
+
*
|
|
216
|
+
* @param {() => any} fn - Render effect function
|
|
217
|
+
* @returns {{ dispose: () => void }} Disposer
|
|
218
|
+
*/
|
|
219
|
+
export declare function createRenderEffect(fn: () => any): {
|
|
220
|
+
dispose: () => void;
|
|
221
|
+
};
|
|
222
|
+
/**
|
|
223
|
+
* Server createDeferred - No deferring on server
|
|
224
|
+
*
|
|
225
|
+
* @template T
|
|
226
|
+
* @param {() => T} fn - Deferred computation
|
|
227
|
+
* @returns {Accessor<T>} Accessor
|
|
228
|
+
*/
|
|
229
|
+
export declare function createDeferred<T>(fn: () => T): Accessor<T>;
|
|
230
|
+
/**
|
|
231
|
+
* Server createSelector - Returns static equality check
|
|
232
|
+
*
|
|
233
|
+
* @template T
|
|
234
|
+
* @param {() => T} source - Source value
|
|
235
|
+
* @returns {(key: T) => boolean} Selector function
|
|
236
|
+
*/
|
|
237
|
+
export declare function createSelector<T>(source: () => T): (key: T) => boolean;
|
|
238
|
+
/**
|
|
239
|
+
* Server createResource - Stub for resource creation
|
|
240
|
+
*
|
|
241
|
+
* @param source Source signal or value
|
|
242
|
+
* @param fetcher Fetcher function
|
|
243
|
+
* @param options Resource options
|
|
244
|
+
*/
|
|
245
|
+
export declare function createResource<T, S = true>(source: any, fetcher?: any, options?: any): [() => T | undefined, {
|
|
246
|
+
mutate: (v: T) => T;
|
|
247
|
+
refetch: () => void;
|
|
248
|
+
}];
|
|
249
|
+
export type Store<T extends object> = {
|
|
250
|
+
readonly [K in keyof T]: T[K];
|
|
251
|
+
};
|
|
252
|
+
export type SetStoreFunction<T extends object> = {
|
|
253
|
+
(patch: {
|
|
254
|
+
[K in keyof T]?: T[K] | ((prev: T[K]) => T[K]);
|
|
255
|
+
}): void;
|
|
256
|
+
<K extends keyof T>(key: K, value: T[K] | ((prev: T[K]) => T[K])): void;
|
|
257
|
+
};
|
|
258
|
+
/**
|
|
259
|
+
* Server createStore — plain object wrapper, no reactivity.
|
|
260
|
+
* Mirrors the client API so shared code compiles on both sides.
|
|
261
|
+
*/
|
|
262
|
+
export declare function createStore<T extends object>(init: T): [Store<T>, SetStoreFunction<T>];
|
|
263
|
+
/**
|
|
264
|
+
* Server startTransition - Execute immediately
|
|
265
|
+
*
|
|
266
|
+
* @param fn Transition function
|
|
267
|
+
*/
|
|
268
|
+
export declare function startTransition(fn: () => void): void;
|
|
269
|
+
/**
|
|
270
|
+
* Check if running on server
|
|
271
|
+
*/
|
|
272
|
+
export declare const isServer = true;
|
|
273
|
+
/**
|
|
274
|
+
* Check if running on client
|
|
275
|
+
*/
|
|
276
|
+
export declare const isClient = false;
|
|
277
|
+
export type { SignalTuple, Accessor, Setter, SignalOptions, RootOwner, Context };
|
|
278
|
+
/**
|
|
279
|
+
* Server sharedConfig - Empty config object for compatibility
|
|
280
|
+
*/
|
|
281
|
+
export declare const sharedConfig: {
|
|
282
|
+
context: RootOwner | null;
|
|
283
|
+
owner: RootOwner | null;
|
|
284
|
+
};
|
|
285
|
+
/**
|
|
286
|
+
* Set current reactive owner (for internal use)
|
|
287
|
+
* @internal
|
|
288
|
+
*/
|
|
289
|
+
export declare function setOwner(owner: RootOwner | null): void;
|
|
290
|
+
/**
|
|
291
|
+
* Get shared config (for compatibility)
|
|
292
|
+
* @internal
|
|
293
|
+
*/
|
|
294
|
+
export declare function getSharedConfig(): {
|
|
295
|
+
context: RootOwner | null;
|
|
296
|
+
owner: RootOwner | null;
|
|
297
|
+
};
|
|
298
|
+
//# sourceMappingURL=reactive.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"reactive.d.ts","sourceRoot":"","sources":["../../../../src/lib/server/reactive.ts"],"names":[],"mappings":"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"}
|