@flight-framework/core 0.2.1 → 0.2.3
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/actions/index.d.ts +636 -1
- package/dist/actions/index.js +1 -1
- package/dist/cache/index.d.ts +119 -4
- package/dist/cache/index.js +1 -1
- package/dist/{chunk-N3TUOEV4.js → chunk-2F2QU6RC.js} +14 -2
- package/dist/chunk-2F2QU6RC.js.map +1 -0
- package/dist/chunk-3QP3E7HS.js +667 -0
- package/dist/chunk-3QP3E7HS.js.map +1 -0
- package/dist/{chunk-3TPAA52K.js → chunk-IXMD5QH2.js} +5 -2
- package/dist/chunk-IXMD5QH2.js.map +1 -0
- package/dist/{chunk-4S5JWTGN.js → chunk-MDQNNIHH.js} +13 -2
- package/dist/{chunk-4S5JWTGN.js.map → chunk-MDQNNIHH.js.map} +1 -1
- package/dist/{chunk-HAX5OAB6.js → chunk-P6WSBVDT.js} +4 -12
- package/dist/chunk-P6WSBVDT.js.map +1 -0
- package/dist/chunk-R7SQAREQ.js +310 -0
- package/dist/chunk-R7SQAREQ.js.map +1 -0
- package/dist/{chunk-6Z2RYHEU.js → chunk-TASAT7KB.js} +12 -2
- package/dist/chunk-TASAT7KB.js.map +1 -0
- package/dist/{chunk-6LYV4VQX.js → chunk-VOBQDQKX.js} +3 -3
- package/dist/{chunk-6LYV4VQX.js.map → chunk-VOBQDQKX.js.map} +1 -1
- package/dist/{chunk-OCVLNLTI.js → chunk-VPFMHGEV.js} +9 -2
- package/dist/chunk-VPFMHGEV.js.map +1 -0
- package/dist/config/index.d.ts +27 -3
- package/dist/config/index.js +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +15 -15
- package/dist/index.js.map +1 -1
- package/dist/rsc/adapters/index.js +4 -4
- package/dist/rsc/adapters/preact.js +1 -1
- package/dist/rsc/adapters/react.js +1 -1
- package/dist/rsc/adapters/solid.js +1 -1
- package/dist/rsc/adapters/vue.js +1 -1
- package/dist/rsc/index.js +5 -5
- package/dist/rsc/renderer.d.ts +5 -3
- package/dist/rsc/renderer.js +1 -1
- package/dist/server/index.js +2 -2
- package/package.json +190 -178
- package/LICENSE +0 -21
- package/dist/chunk-3AIQVGTM.js +0 -120
- package/dist/chunk-3AIQVGTM.js.map +0 -1
- package/dist/chunk-3TPAA52K.js.map +0 -1
- package/dist/chunk-6Z2RYHEU.js.map +0 -1
- package/dist/chunk-HAX5OAB6.js.map +0 -1
- package/dist/chunk-JIW55ZVD.js +0 -145
- package/dist/chunk-JIW55ZVD.js.map +0 -1
- package/dist/chunk-N3TUOEV4.js.map +0 -1
- package/dist/chunk-OCVLNLTI.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/rsc/renderer.ts"],"names":["children"],"mappings":"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","file":"chunk-HAX5OAB6.js","sourcesContent":["/**\r\n * @flight-framework/core - Server Component Renderer\r\n * \r\n * Renders Server Components to FlightChunks.\r\n * Framework-agnostic rendering engine that works with adapters.\r\n * \r\n * @module @flight-framework/core/rsc/renderer\r\n */\r\n\r\nimport type {\r\n FlightChunk,\r\n FlightElement,\r\n ServerComponentChunk,\r\n ClientReferenceChunk,\r\n} from './payload.js';\r\nimport {\r\n generateChunkId,\r\n createServerChunk,\r\n createClientChunk,\r\n createErrorChunk,\r\n toFlightElement,\r\n serialize,\r\n} from './payload.js';\r\nimport {\r\n isClientReference,\r\n type ClientReference,\r\n} from './boundaries.js';\r\nimport type { ServerContext } from './context.js';\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\n/**\r\n * UI Framework adapter for rendering\r\n */\r\nexport interface UIAdapter {\r\n /** Adapter name */\r\n name: string;\r\n\r\n /** Check if value is a framework element */\r\n isElement(value: unknown): boolean;\r\n\r\n /** Get element type info */\r\n getElementType(element: unknown): ElementTypeInfo;\r\n\r\n /** Get element props */\r\n getProps(element: unknown): Record<string, unknown>;\r\n\r\n /** Get element children */\r\n getChildren(element: unknown): unknown[];\r\n\r\n /** Get element key */\r\n getKey(element: unknown): string | number | undefined;\r\n\r\n /** Check if component is a client boundary */\r\n isClientBoundary(component: unknown): boolean;\r\n\r\n /** Render element to HTML string (for SSR fallback) */\r\n renderToString?(element: unknown): Promise<string>;\r\n}\r\n\r\nexport type ElementTypeInfo =\r\n | { kind: 'host'; tag: string }\r\n | { kind: 'component'; fn: ComponentFn; name: string }\r\n | { kind: 'fragment' }\r\n | { kind: 'suspense'; fallback?: unknown }\r\n | { kind: 'provider'; value?: unknown }\r\n | { kind: 'context' }\r\n | { kind: 'text'; value: string }\r\n | { kind: 'null' };\r\n\r\n/**\r\n * Component function type\r\n */\r\nexport type ComponentFn = (\r\n props: Record<string, unknown>,\r\n ctx?: ServerContext\r\n) => unknown | Promise<unknown>;\r\n\r\n/**\r\n * Render options\r\n */\r\nexport interface RenderOptions {\r\n /** Include SSR fallbacks for client components */\r\n includeSSRFallbacks?: boolean;\r\n\r\n /** Error handler */\r\n onError?: (error: Error, componentName?: string) => void;\r\n\r\n /** Dev mode (include extra debug info) */\r\n dev?: boolean;\r\n\r\n /** Max render depth to prevent infinite loops */\r\n maxDepth?: number;\r\n}\r\n\r\n/**\r\n * Render result with metadata\r\n */\r\nexport interface RenderResult {\r\n /** All chunks generated */\r\n chunks: FlightChunk[];\r\n\r\n /** Root chunk */\r\n root: ServerComponentChunk;\r\n\r\n /** Client references found */\r\n clientRefs: ClientReferenceChunk[];\r\n\r\n /** Timing info */\r\n timing: {\r\n startTime: number;\r\n endTime: number;\r\n duration: number;\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Renderer Implementation\r\n// ============================================================================\r\n\r\n/**\r\n * Flight Server Component Renderer\r\n */\r\nexport class FlightRenderer {\r\n private chunks: FlightChunk[] = [];\r\n private clientRefs: ClientReferenceChunk[] = [];\r\n private pendingPromises = new Map<string, Promise<FlightElement>>();\r\n private depth = 0;\r\n\r\n constructor(\r\n private adapter: UIAdapter,\r\n private options: RenderOptions = {}\r\n ) { }\r\n\r\n /**\r\n * Render a component tree to Flight chunks\r\n */\r\n async render(\r\n element: unknown,\r\n ctx: ServerContext\r\n ): Promise<RenderResult> {\r\n const startTime = Date.now();\r\n\r\n this.chunks = [];\r\n this.clientRefs = [];\r\n this.pendingPromises.clear();\r\n this.depth = 0;\r\n\r\n try {\r\n // Render the root element\r\n const rootTree = await this.renderElement(element, ctx);\r\n const root = createServerChunk('root', rootTree);\r\n this.chunks.unshift(root);\r\n\r\n // Wait for any pending async boundaries\r\n await this.resolvePendingChunks(ctx);\r\n\r\n const endTime = Date.now();\r\n\r\n return {\r\n chunks: this.chunks,\r\n root,\r\n clientRefs: this.clientRefs,\r\n timing: {\r\n startTime,\r\n endTime,\r\n duration: endTime - startTime,\r\n },\r\n };\r\n } catch (error) {\r\n const errChunk = createErrorChunk('root', error as Error, this.options.dev);\r\n this.chunks.push(errChunk);\r\n\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Render as async generator (for streaming)\r\n */\r\n async *renderStreaming(\r\n element: unknown,\r\n ctx: ServerContext\r\n ): AsyncGenerator<FlightChunk> {\r\n // Note: startTime available for future timing features\r\n this.chunks = [];\r\n this.clientRefs = [];\r\n this.pendingPromises.clear();\r\n this.depth = 0;\r\n\r\n try {\r\n // Render root synchronously\r\n const rootTree = await this.renderElement(element, ctx);\r\n const root = createServerChunk('root', rootTree);\r\n yield root;\r\n\r\n // Yield pending chunks as they resolve\r\n while (this.pendingPromises.size > 0) {\r\n const entries = [...this.pendingPromises.entries()];\r\n\r\n // Race all pending promises\r\n const promises = entries.map(async ([id, promise]) => {\r\n const tree = await promise;\r\n this.pendingPromises.delete(id);\r\n return createServerChunk(id, tree);\r\n });\r\n\r\n // Yield first to complete\r\n const chunk = await Promise.race(promises);\r\n yield chunk;\r\n }\r\n\r\n // Yield all client refs\r\n for (const clientRef of this.clientRefs) {\r\n yield clientRef;\r\n }\r\n\r\n } catch (error) {\r\n yield createErrorChunk('root', error as Error, this.options.dev);\r\n }\r\n }\r\n\r\n /**\r\n * Render an element to FlightElement\r\n */\r\n private async renderElement(\r\n element: unknown,\r\n ctx: ServerContext\r\n ): Promise<FlightElement> {\r\n // Check depth limit\r\n this.depth++;\r\n if (this.depth > (this.options.maxDepth ?? 100)) {\r\n throw new Error('Maximum render depth exceeded. Check for infinite component loops.');\r\n }\r\n\r\n try {\r\n // Handle null/undefined/boolean\r\n if (element === null || element === undefined || typeof element === 'boolean') {\r\n return { $$type: 'null' };\r\n }\r\n\r\n // Handle primitives\r\n if (typeof element === 'string') {\r\n return { $$type: 'text', value: element };\r\n }\r\n if (typeof element === 'number') {\r\n return { $$type: 'text', value: String(element) };\r\n }\r\n\r\n // Handle arrays (fragments)\r\n if (Array.isArray(element)) {\r\n const children = await Promise.all(\r\n element.map(child => this.renderElement(child, ctx))\r\n );\r\n return { $$type: 'fragment', children };\r\n }\r\n\r\n // Handle Client References\r\n if (isClientReference(element)) {\r\n return this.renderClientReference(element, ctx);\r\n }\r\n\r\n // Handle framework elements\r\n if (this.adapter.isElement(element)) {\r\n return this.renderFrameworkElement(element, ctx);\r\n }\r\n\r\n // Unknown - try to convert\r\n return toFlightElement(element);\r\n\r\n } finally {\r\n this.depth--;\r\n }\r\n }\r\n\r\n /**\r\n * Render a framework-specific element\r\n */\r\n private async renderFrameworkElement(\r\n element: unknown,\r\n ctx: ServerContext\r\n ): Promise<FlightElement> {\r\n const typeInfo = this.adapter.getElementType(element);\r\n const props = this.adapter.getProps(element);\r\n const key = this.adapter.getKey(element);\r\n\r\n switch (typeInfo.kind) {\r\n case 'host':\r\n return this.renderHostElement(typeInfo.tag, props, key, ctx);\r\n\r\n case 'component':\r\n return this.renderComponent(typeInfo.fn, typeInfo.name, props, ctx);\r\n\r\n case 'fragment': {\r\n const children = this.adapter.getChildren(element);\r\n const renderedChildren = await Promise.all(\r\n children.map(child => this.renderElement(child, ctx))\r\n );\r\n return { $$type: 'fragment', children: renderedChildren };\r\n }\r\n\r\n case 'suspense': {\r\n return this.renderSuspense(element, typeInfo.fallback, ctx);\r\n }\r\n\r\n case 'text':\r\n return { $$type: 'text', value: typeInfo.value };\r\n\r\n case 'null':\r\n return { $$type: 'null' };\r\n\r\n default:\r\n return { $$type: 'null' };\r\n }\r\n }\r\n\r\n /**\r\n * Render a host element (div, span, etc.)\r\n */\r\n private async renderHostElement(\r\n tag: string,\r\n props: Record<string, unknown>,\r\n key: string | number | undefined,\r\n ctx: ServerContext\r\n ): Promise<FlightElement> {\r\n // Extract children\r\n const { children: childrenProp, ...restProps } = props;\r\n\r\n // Serialize props (excluding functions and children)\r\n const serializedProps: Record<string, unknown> = {};\r\n for (const [propKey, value] of Object.entries(restProps)) {\r\n if (typeof value !== 'function') {\r\n serializedProps[propKey] = serialize(value);\r\n }\r\n }\r\n\r\n // Render children\r\n const rawChildren = childrenProp ?\r\n (Array.isArray(childrenProp) ? childrenProp : [childrenProp]) :\r\n [];\r\n\r\n const children = await Promise.all(\r\n rawChildren.map(child => this.renderElement(child, ctx))\r\n );\r\n\r\n return {\r\n $$type: 'host',\r\n tag,\r\n key,\r\n props: serializedProps as Record<string, import('./payload.js').SerializedValue>,\r\n children,\r\n };\r\n }\r\n\r\n /**\r\n * Render a component (server or client)\r\n */\r\n private async renderComponent(\r\n component: ComponentFn,\r\n name: string,\r\n props: Record<string, unknown>,\r\n ctx: ServerContext\r\n ): Promise<FlightElement> {\r\n // Check if this is a client component\r\n if (this.adapter.isClientBoundary(component)) {\r\n return this.renderClientBoundary(component, name, props, ctx);\r\n }\r\n\r\n // Execute server component\r\n try {\r\n const result = await component(props, ctx);\r\n return this.renderElement(result, ctx);\r\n } catch (error) {\r\n // Check for Suspense promise\r\n if (error instanceof Promise) {\r\n return this.renderAsyncBoundary(error, name, props, ctx);\r\n }\r\n\r\n this.options.onError?.(error as Error, name);\r\n throw error;\r\n }\r\n }\r\n\r\n /**\r\n * Render a client boundary\r\n */\r\n private async renderClientBoundary(\r\n component: ComponentFn,\r\n name: string,\r\n props: Record<string, unknown>,\r\n _ctx: ServerContext\r\n ): Promise<FlightElement> {\r\n const chunkId = generateChunkId('c');\r\n\r\n // Get module info from component\r\n const moduleId = (component as unknown as { __flight_module?: string }).__flight_module ?? name;\r\n const exportName = (component as unknown as { __flight_export?: string }).__flight_export ?? 'default';\r\n\r\n // Generate SSR fallback if enabled\r\n let fallback: string | undefined;\r\n if (this.options.includeSSRFallbacks && this.adapter.renderToString) {\r\n try {\r\n // Create element with props for SSR\r\n fallback = await this.adapter.renderToString(props);\r\n } catch {\r\n // SSR failed, continue without fallback\r\n }\r\n }\r\n\r\n // Create client reference chunk\r\n const clientChunk = createClientChunk(chunkId, moduleId, exportName, props, fallback);\r\n this.clientRefs.push(clientChunk);\r\n this.chunks.push(clientChunk);\r\n\r\n return {\r\n $$type: 'client',\r\n ref: chunkId,\r\n ssr: fallback,\r\n };\r\n }\r\n\r\n /**\r\n * Render a Suspense boundary\r\n */\r\n private async renderSuspense(\r\n element: unknown,\r\n fallbackElement: unknown,\r\n ctx: ServerContext\r\n ): Promise<FlightElement> {\r\n const boundaryId = generateChunkId('s');\r\n const children = this.adapter.getChildren(element);\r\n\r\n // Render fallback\r\n const fallback = fallbackElement ?\r\n await this.renderElement(fallbackElement, ctx) :\r\n { $$type: 'null' as const };\r\n\r\n // Render children\r\n const renderedChildren: FlightElement[] = [];\r\n for (const child of children) {\r\n try {\r\n const rendered = await this.renderElement(child, ctx);\r\n renderedChildren.push(rendered);\r\n } catch (error) {\r\n if (error instanceof Promise) {\r\n // This is a suspended promise\r\n this.pendingPromises.set(boundaryId, error.then(async () => {\r\n const children = this.adapter.getChildren(element);\r\n const rendered = await Promise.all(\r\n children.map(c => this.renderElement(c, ctx))\r\n );\r\n return { $$type: 'fragment' as const, children: rendered };\r\n }));\r\n\r\n // Return suspense with fallback for now\r\n return {\r\n $$type: 'suspense',\r\n id: boundaryId,\r\n fallback,\r\n children: [{ $$type: 'lazy', id: boundaryId, fallback }],\r\n };\r\n }\r\n throw error;\r\n }\r\n }\r\n\r\n return {\r\n $$type: 'suspense',\r\n id: boundaryId,\r\n fallback,\r\n children: renderedChildren,\r\n };\r\n }\r\n\r\n /**\r\n * Render an async boundary (promise thrown from component)\r\n */\r\n private renderAsyncBoundary(\r\n promise: Promise<unknown>,\r\n name: string,\r\n props: Record<string, unknown>,\r\n ctx: ServerContext\r\n ): FlightElement {\r\n const boundaryId = generateChunkId('a');\r\n\r\n // Track this promise\r\n this.pendingPromises.set(boundaryId,\r\n promise.then(async () => {\r\n // Re-render the component after promise resolves\r\n const component = (props as unknown as { component: ComponentFn }).component;\r\n if (component) {\r\n const result = await component(props, ctx);\r\n return this.renderElement(result, ctx);\r\n }\r\n return { $$type: 'null' as const };\r\n })\r\n );\r\n\r\n return {\r\n $$type: 'lazy',\r\n id: boundaryId,\r\n fallback: { $$type: 'text', value: `Loading ${name}...` },\r\n };\r\n }\r\n\r\n /**\r\n * Render a Client Reference directly\r\n */\r\n private async renderClientReference(\r\n ref: ClientReference,\r\n _ctx: ServerContext\r\n ): Promise<FlightElement> {\r\n const chunkId = generateChunkId('c');\r\n\r\n const clientChunk = createClientChunk(\r\n chunkId,\r\n ref.__flight_module,\r\n ref.__flight_export,\r\n {} // Props are embedded in the reference\r\n );\r\n\r\n this.clientRefs.push(clientChunk);\r\n this.chunks.push(clientChunk);\r\n\r\n return {\r\n $$type: 'client',\r\n ref: chunkId,\r\n };\r\n }\r\n\r\n /**\r\n * Resolve all pending async chunks\r\n */\r\n private async resolvePendingChunks(_ctx: ServerContext): Promise<void> {\r\n while (this.pendingPromises.size > 0) {\r\n const entries = [...this.pendingPromises.entries()];\r\n\r\n for (const [id, promise] of entries) {\r\n try {\r\n const tree = await promise;\r\n this.chunks.push(createServerChunk(id, tree));\r\n } catch (error) {\r\n this.chunks.push(createErrorChunk(id, error as Error, this.options.dev));\r\n }\r\n this.pendingPromises.delete(id);\r\n }\r\n }\r\n }\r\n}\r\n\r\n// ============================================================================\r\n// Helper Functions\r\n// ============================================================================\r\n\r\n/**\r\n * Create a renderer with adapter\r\n */\r\nexport function createRenderer(\r\n adapter: UIAdapter,\r\n options?: RenderOptions\r\n): FlightRenderer {\r\n return new FlightRenderer(adapter, options);\r\n}\r\n\r\n/**\r\n * Render a server component tree\r\n */\r\nexport async function renderServerComponent<P>(\r\n component: ComponentFn,\r\n props: P,\r\n ctx: ServerContext,\r\n adapter: UIAdapter,\r\n options?: RenderOptions\r\n): Promise<RenderResult> {\r\n const renderer = createRenderer(adapter, options);\r\n\r\n // Create root element\r\n const element = {\r\n type: component,\r\n props: props as Record<string, unknown>,\r\n $$typeof: Symbol.for('react.element')\r\n };\r\n\r\n return renderer.render(element, ctx);\r\n}\r\n\r\n/**\r\n * Render server component as streaming chunks\r\n */\r\nexport async function* renderServerComponentStreaming<P>(\r\n component: ComponentFn,\r\n props: P,\r\n ctx: ServerContext,\r\n adapter: UIAdapter,\r\n options?: RenderOptions\r\n): AsyncGenerator<FlightChunk> {\r\n const renderer = createRenderer(adapter, options);\r\n\r\n const element = {\r\n type: component,\r\n props: props as Record<string, unknown>,\r\n $$typeof: Symbol.for('react.element')\r\n };\r\n\r\n yield* renderer.renderStreaming(element, ctx);\r\n}\r\n"]}
|
package/dist/chunk-JIW55ZVD.js
DELETED
|
@@ -1,145 +0,0 @@
|
|
|
1
|
-
// src/actions/index.ts
|
|
2
|
-
var actionRegistry = /* @__PURE__ */ new Map();
|
|
3
|
-
function registerAction(action) {
|
|
4
|
-
actionRegistry.set(action.id, action);
|
|
5
|
-
}
|
|
6
|
-
function getAction(id) {
|
|
7
|
-
return actionRegistry.get(id);
|
|
8
|
-
}
|
|
9
|
-
function getAllActions() {
|
|
10
|
-
return Array.from(actionRegistry.values());
|
|
11
|
-
}
|
|
12
|
-
function clearActions() {
|
|
13
|
-
actionRegistry.clear();
|
|
14
|
-
}
|
|
15
|
-
async function executeAction(actionId, args) {
|
|
16
|
-
const action = getAction(actionId);
|
|
17
|
-
if (!action) {
|
|
18
|
-
return {
|
|
19
|
-
success: false,
|
|
20
|
-
error: `Action not found: ${actionId}`
|
|
21
|
-
};
|
|
22
|
-
}
|
|
23
|
-
try {
|
|
24
|
-
const result = await action.fn(...args);
|
|
25
|
-
return {
|
|
26
|
-
success: true,
|
|
27
|
-
data: result
|
|
28
|
-
};
|
|
29
|
-
} catch (error) {
|
|
30
|
-
if (isRedirectError(error)) {
|
|
31
|
-
throw error;
|
|
32
|
-
}
|
|
33
|
-
console.error(`[Flight] Action error (${actionId}):`, error);
|
|
34
|
-
return {
|
|
35
|
-
success: false,
|
|
36
|
-
error: error instanceof Error ? error.message : "Unknown error"
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
}
|
|
40
|
-
async function executeFormAction(actionId, formData) {
|
|
41
|
-
return executeAction(actionId, [formData]);
|
|
42
|
-
}
|
|
43
|
-
var actionCounter = 0;
|
|
44
|
-
function generateActionId(name, filePath) {
|
|
45
|
-
const hash = simpleHash(`${filePath}:${name}`);
|
|
46
|
-
return `action_${hash}_${actionCounter++}`;
|
|
47
|
-
}
|
|
48
|
-
function simpleHash(str) {
|
|
49
|
-
let hash = 0;
|
|
50
|
-
for (let i = 0; i < str.length; i++) {
|
|
51
|
-
const char = str.charCodeAt(i);
|
|
52
|
-
hash = (hash << 5) - hash + char;
|
|
53
|
-
hash = hash & hash;
|
|
54
|
-
}
|
|
55
|
-
return Math.abs(hash).toString(36);
|
|
56
|
-
}
|
|
57
|
-
function cookies() {
|
|
58
|
-
const cookieStore = globalThis.__flightCookies;
|
|
59
|
-
if (!cookieStore) {
|
|
60
|
-
console.warn("[Flight] Cookies not available outside of action context");
|
|
61
|
-
return {
|
|
62
|
-
get: () => void 0,
|
|
63
|
-
set: () => {
|
|
64
|
-
},
|
|
65
|
-
delete: () => {
|
|
66
|
-
}
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
return cookieStore;
|
|
70
|
-
}
|
|
71
|
-
function redirect(url) {
|
|
72
|
-
throw new RedirectError(url);
|
|
73
|
-
}
|
|
74
|
-
var RedirectError = class extends Error {
|
|
75
|
-
url;
|
|
76
|
-
constructor(url) {
|
|
77
|
-
super(`Redirect to ${url}`);
|
|
78
|
-
this.name = "RedirectError";
|
|
79
|
-
this.url = url;
|
|
80
|
-
}
|
|
81
|
-
};
|
|
82
|
-
function isRedirectError(error) {
|
|
83
|
-
return error instanceof RedirectError;
|
|
84
|
-
}
|
|
85
|
-
function parseFormData(formData) {
|
|
86
|
-
const result = {};
|
|
87
|
-
formData.forEach((value, key) => {
|
|
88
|
-
result[key] = String(value);
|
|
89
|
-
});
|
|
90
|
-
return result;
|
|
91
|
-
}
|
|
92
|
-
function createActionReference(actionId) {
|
|
93
|
-
return `/__flight_action/${actionId}`;
|
|
94
|
-
}
|
|
95
|
-
async function handleActionRequest(request) {
|
|
96
|
-
const url = new URL(request.url);
|
|
97
|
-
const actionPath = url.pathname;
|
|
98
|
-
const match = actionPath.match(/^\/__flight_action\/(.+)$/);
|
|
99
|
-
if (!match) {
|
|
100
|
-
return new Response(JSON.stringify({ error: "Invalid action path" }), {
|
|
101
|
-
status: 400,
|
|
102
|
-
headers: { "Content-Type": "application/json" }
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
const actionId = match[1];
|
|
106
|
-
if (!actionId) {
|
|
107
|
-
return new Response(JSON.stringify({ error: "Missing action ID" }), {
|
|
108
|
-
status: 400,
|
|
109
|
-
headers: { "Content-Type": "application/json" }
|
|
110
|
-
});
|
|
111
|
-
}
|
|
112
|
-
try {
|
|
113
|
-
let result;
|
|
114
|
-
const contentType = request.headers.get("content-type") || "";
|
|
115
|
-
if (contentType.includes("application/x-www-form-urlencoded") || contentType.includes("multipart/form-data")) {
|
|
116
|
-
const formData = await request.formData();
|
|
117
|
-
result = await executeFormAction(actionId, formData);
|
|
118
|
-
} else {
|
|
119
|
-
const args = await request.json();
|
|
120
|
-
result = await executeAction(actionId, Array.isArray(args) ? args : [args]);
|
|
121
|
-
}
|
|
122
|
-
return new Response(JSON.stringify(result), {
|
|
123
|
-
status: result.success ? 200 : 400,
|
|
124
|
-
headers: { "Content-Type": "application/json" }
|
|
125
|
-
});
|
|
126
|
-
} catch (error) {
|
|
127
|
-
if (isRedirectError(error)) {
|
|
128
|
-
return new Response(null, {
|
|
129
|
-
status: 303,
|
|
130
|
-
headers: { Location: error.url }
|
|
131
|
-
});
|
|
132
|
-
}
|
|
133
|
-
return new Response(JSON.stringify({
|
|
134
|
-
success: false,
|
|
135
|
-
error: error instanceof Error ? error.message : "Unknown error"
|
|
136
|
-
}), {
|
|
137
|
-
status: 500,
|
|
138
|
-
headers: { "Content-Type": "application/json" }
|
|
139
|
-
});
|
|
140
|
-
}
|
|
141
|
-
}
|
|
142
|
-
|
|
143
|
-
export { RedirectError, clearActions, cookies, createActionReference, executeAction, executeFormAction, generateActionId, getAction, getAllActions, handleActionRequest, isRedirectError, parseFormData, redirect, registerAction };
|
|
144
|
-
//# sourceMappingURL=chunk-JIW55ZVD.js.map
|
|
145
|
-
//# sourceMappingURL=chunk-JIW55ZVD.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/actions/index.ts"],"names":[],"mappings":"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","file":"chunk-JIW55ZVD.js","sourcesContent":["/**\r\n * @flight-framework/core - Server Actions\r\n * \r\n * Implementation of React 19 style Server Actions.\r\n * Functions marked with 'use server' run on the server.\r\n */\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\n/**\r\n * Server action metadata\r\n */\r\nexport interface ServerAction {\r\n /** Unique action ID */\r\n id: string;\r\n /** Original function name */\r\n name: string;\r\n /** File path where action is defined */\r\n filePath: string;\r\n /** The actual action function */\r\n fn: (...args: unknown[]) => Promise<unknown>;\r\n}\r\n\r\n/**\r\n * Server action result\r\n */\r\nexport interface ActionResult<T = unknown> {\r\n success: boolean;\r\n data?: T;\r\n error?: string;\r\n}\r\n\r\n/**\r\n * Form action data\r\n */\r\nexport interface FormActionData {\r\n actionId: string;\r\n formData: FormData;\r\n}\r\n\r\n// ============================================================================\r\n// Action Registry\r\n// ============================================================================\r\n\r\nconst actionRegistry = new Map<string, ServerAction>();\r\n\r\n/**\r\n * Register a server action\r\n */\r\nexport function registerAction(action: ServerAction): void {\r\n actionRegistry.set(action.id, action);\r\n}\r\n\r\n/**\r\n * Get a registered action by ID\r\n */\r\nexport function getAction(id: string): ServerAction | undefined {\r\n return actionRegistry.get(id);\r\n}\r\n\r\n/**\r\n * Get all registered actions\r\n */\r\nexport function getAllActions(): ServerAction[] {\r\n return Array.from(actionRegistry.values());\r\n}\r\n\r\n/**\r\n * Clear all registered actions (useful for testing)\r\n */\r\nexport function clearActions(): void {\r\n actionRegistry.clear();\r\n}\r\n\r\n// ============================================================================\r\n// Action Execution\r\n// ============================================================================\r\n\r\n/**\r\n * Execute a server action\r\n */\r\nexport async function executeAction<T = unknown>(\r\n actionId: string,\r\n args: unknown[]\r\n): Promise<ActionResult<T>> {\r\n const action = getAction(actionId);\r\n\r\n if (!action) {\r\n return {\r\n success: false,\r\n error: `Action not found: ${actionId}`,\r\n };\r\n }\r\n\r\n try {\r\n const result = await action.fn(...args);\r\n return {\r\n success: true,\r\n data: result as T,\r\n };\r\n } catch (error) {\r\n // Re-throw RedirectError so handleActionRequest can return 303\r\n if (isRedirectError(error)) {\r\n throw error;\r\n }\r\n console.error(`[Flight] Action error (${actionId}):`, error);\r\n return {\r\n success: false,\r\n error: error instanceof Error ? error.message : 'Unknown error',\r\n };\r\n }\r\n}\r\n\r\n/**\r\n * Execute a form action\r\n */\r\nexport async function executeFormAction<T = unknown>(\r\n actionId: string,\r\n formData: FormData\r\n): Promise<ActionResult<T>> {\r\n return executeAction<T>(actionId, [formData]);\r\n}\r\n\r\n// ============================================================================\r\n// Action ID Generation\r\n// ============================================================================\r\n\r\nlet actionCounter = 0;\r\n\r\n/**\r\n * Generate a unique action ID\r\n */\r\nexport function generateActionId(name: string, filePath: string): string {\r\n const hash = simpleHash(`${filePath}:${name}`);\r\n return `action_${hash}_${actionCounter++}`;\r\n}\r\n\r\n/**\r\n * Simple hash function for action IDs\r\n */\r\nfunction simpleHash(str: string): string {\r\n let hash = 0;\r\n for (let i = 0; i < str.length; i++) {\r\n const char = str.charCodeAt(i);\r\n hash = ((hash << 5) - hash) + char;\r\n hash = hash & hash; // Convert to 32bit integer\r\n }\r\n return Math.abs(hash).toString(36);\r\n}\r\n\r\n// ============================================================================\r\n// Action Helpers (for use inside actions)\r\n// ============================================================================\r\n\r\n/**\r\n * Get cookies in server action context\r\n */\r\nexport function cookies(): {\r\n get: (name: string) => string | undefined;\r\n set: (name: string, value: string, options?: CookieOptions) => void;\r\n delete: (name: string) => void;\r\n} {\r\n // This will be populated by the runtime\r\n const cookieStore = (globalThis as any).__flightCookies;\r\n\r\n if (!cookieStore) {\r\n console.warn('[Flight] Cookies not available outside of action context');\r\n return {\r\n get: () => undefined,\r\n set: () => { },\r\n delete: () => { },\r\n };\r\n }\r\n\r\n return cookieStore;\r\n}\r\n\r\nexport interface CookieOptions {\r\n maxAge?: number;\r\n expires?: Date;\r\n path?: string;\r\n domain?: string;\r\n secure?: boolean;\r\n httpOnly?: boolean;\r\n sameSite?: 'strict' | 'lax' | 'none';\r\n}\r\n\r\n/**\r\n * Redirect in server action context\r\n */\r\nexport function redirect(url: string): never {\r\n throw new RedirectError(url);\r\n}\r\n\r\n/**\r\n * Special error for redirects\r\n */\r\nexport class RedirectError extends Error {\r\n public readonly url: string;\r\n\r\n constructor(url: string) {\r\n super(`Redirect to ${url}`);\r\n this.name = 'RedirectError';\r\n this.url = url;\r\n }\r\n}\r\n\r\n/**\r\n * Check if error is a redirect\r\n */\r\nexport function isRedirectError(error: unknown): error is RedirectError {\r\n return error instanceof RedirectError;\r\n}\r\n\r\n// ============================================================================\r\n// Form Helpers\r\n// ============================================================================\r\n\r\n/**\r\n * Parse form data to typed object\r\n */\r\nexport function parseFormData<T extends Record<string, string>>(\r\n formData: FormData\r\n): T {\r\n const result: Record<string, string> = {};\r\n\r\n formData.forEach((value, key) => {\r\n result[key] = String(value);\r\n });\r\n\r\n return result as T;\r\n}\r\n\r\n/**\r\n * Create action reference for form action attribute\r\n */\r\nexport function createActionReference(actionId: string): string {\r\n return `/__flight_action/${actionId}`;\r\n}\r\n\r\n// ============================================================================\r\n// Action Handler (for HTTP endpoint)\r\n// ============================================================================\r\n\r\n/**\r\n * Handle action request from client\r\n */\r\nexport async function handleActionRequest(\r\n request: Request\r\n): Promise<Response> {\r\n const url = new URL(request.url);\r\n const actionPath = url.pathname;\r\n\r\n // Extract action ID from path: /__flight_action/{actionId}\r\n const match = actionPath.match(/^\\/__flight_action\\/(.+)$/);\r\n\r\n if (!match) {\r\n return new Response(JSON.stringify({ error: 'Invalid action path' }), {\r\n status: 400,\r\n headers: { 'Content-Type': 'application/json' },\r\n });\r\n }\r\n\r\n const actionId = match[1];\r\n\r\n if (!actionId) {\r\n return new Response(JSON.stringify({ error: 'Missing action ID' }), {\r\n status: 400,\r\n headers: { 'Content-Type': 'application/json' },\r\n });\r\n }\r\n\r\n try {\r\n let result: ActionResult;\r\n\r\n // Check content type for form vs JSON\r\n const contentType = request.headers.get('content-type') || '';\r\n\r\n if (contentType.includes('application/x-www-form-urlencoded') ||\r\n contentType.includes('multipart/form-data')) {\r\n const formData = await request.formData();\r\n result = await executeFormAction(actionId, formData);\r\n } else {\r\n const args = await request.json();\r\n result = await executeAction(actionId, Array.isArray(args) ? args : [args]);\r\n }\r\n\r\n return new Response(JSON.stringify(result), {\r\n status: result.success ? 200 : 400,\r\n headers: { 'Content-Type': 'application/json' },\r\n });\r\n } catch (error) {\r\n if (isRedirectError(error)) {\r\n return new Response(null, {\r\n status: 303,\r\n headers: { Location: error.url },\r\n });\r\n }\r\n\r\n return new Response(JSON.stringify({\r\n success: false,\r\n error: error instanceof Error ? error.message : 'Unknown error',\r\n }), {\r\n status: 500,\r\n headers: { 'Content-Type': 'application/json' },\r\n });\r\n }\r\n}\r\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/rsc/adapters/vue.ts"],"names":["children"],"mappings":"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","file":"chunk-N3TUOEV4.js","sourcesContent":["/**\r\n * @flight-framework/core - Vue UI Adapter\r\n * \r\n * Adapter for using Vue 3 with Flight Server Components.\r\n * Enables Flight to render Vue components without tight coupling.\r\n * \r\n * Philosophy: Zero lock-in - Vue is optional, user decides.\r\n * \r\n * @module @flight-framework/core/rsc/adapters/vue\r\n */\r\n\r\nimport type { UIAdapter, ElementTypeInfo } from '../renderer.js';\r\n\r\n// ============================================================================\r\n// Vue Symbols (Vue 3 internal markers)\r\n// ============================================================================\r\n\r\nconst VUE_FRAGMENT = Symbol.for('v-fgt');\r\nconst VUE_TEXT = Symbol.for('v-txt');\r\nconst VUE_COMMENT = Symbol.for('v-cmt');\r\nconst VUE_SUSPENSE = Symbol.for('v-sus');\r\nconst VUE_TELEPORT = Symbol.for('v-tel');\r\n\r\n// Flight reference symbols\r\nconst CLIENT_REFERENCE = Symbol.for('flight.client.reference');\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\n/**\r\n * Minimal Vue VNode interface\r\n */\r\ninterface VueVNode {\r\n __v_isVNode?: boolean;\r\n type: unknown;\r\n props: Record<string, unknown> | null;\r\n children: unknown;\r\n key: string | number | null;\r\n component?: unknown;\r\n shapeFlag?: number;\r\n}\r\n\r\n/**\r\n * Vue dependencies (user provides these)\r\n */\r\nexport interface VueDependencies {\r\n /** Vue module */\r\n Vue: {\r\n h: (type: unknown, props?: unknown, children?: unknown) => VueVNode;\r\n isVNode: (value: unknown) => boolean;\r\n createSSRApp?: (rootComponent: unknown) => unknown;\r\n Fragment?: symbol;\r\n Suspense?: unknown;\r\n Text?: symbol;\r\n };\r\n /** renderToString from vue/server-renderer (optional - for SSR) */\r\n renderToString?: (app: unknown) => Promise<string>;\r\n}\r\n\r\n// ============================================================================\r\n// Adapter Implementation\r\n// ============================================================================\r\n\r\n/**\r\n * Create Vue UI Adapter\r\n * \r\n * @example\r\n * ```typescript\r\n * import { createVueAdapter } from '@flight-framework/core/rsc/adapters/vue';\r\n * import * as Vue from 'vue';\r\n * import { renderToString } from 'vue/server-renderer';\r\n * \r\n * const adapter = createVueAdapter({\r\n * Vue,\r\n * renderToString,\r\n * });\r\n * \r\n * const renderer = createRenderer(adapter);\r\n * ```\r\n */\r\nexport function createVueAdapter(deps?: VueDependencies): UIAdapter {\r\n const { Vue, renderToString } = deps || {};\r\n\r\n return {\r\n name: 'vue',\r\n\r\n isElement(value: unknown): boolean {\r\n if (Vue?.isVNode) {\r\n return Vue.isVNode(value);\r\n }\r\n // Fallback: check for __v_isVNode marker\r\n return (\r\n typeof value === 'object' &&\r\n value !== null &&\r\n (value as VueVNode).__v_isVNode === true\r\n );\r\n },\r\n\r\n getElementType(element: unknown): ElementTypeInfo {\r\n const vnode = element as VueVNode;\r\n const type = vnode.type;\r\n\r\n // String = host element (div, span, etc.)\r\n if (typeof type === 'string') {\r\n return { kind: 'host', tag: type };\r\n }\r\n\r\n // Symbol types\r\n if (typeof type === 'symbol') {\r\n // Fragment\r\n if (type === VUE_FRAGMENT || type === Vue?.Fragment) {\r\n return { kind: 'fragment' };\r\n }\r\n\r\n // Text\r\n if (type === VUE_TEXT || type === Vue?.Text) {\r\n const children = vnode.children;\r\n return {\r\n kind: 'text',\r\n value: String(children ?? '')\r\n };\r\n }\r\n\r\n // Comment\r\n if (type === VUE_COMMENT) {\r\n return { kind: 'null' };\r\n }\r\n\r\n // Suspense\r\n if (type === VUE_SUSPENSE) {\r\n return {\r\n kind: 'suspense',\r\n fallback: vnode.props?.fallback\r\n };\r\n }\r\n\r\n // Teleport (treat as fragment for RSC)\r\n if (type === VUE_TELEPORT) {\r\n return { kind: 'fragment' };\r\n }\r\n\r\n return { kind: 'null' };\r\n }\r\n\r\n // Object component (Options API or async component)\r\n if (typeof type === 'object' && type !== null) {\r\n const comp = type as {\r\n name?: string;\r\n setup?: unknown;\r\n render?: unknown;\r\n __asyncLoader?: unknown;\r\n };\r\n\r\n // Async component\r\n if (comp.__asyncLoader) {\r\n return {\r\n kind: 'component',\r\n fn: () => null,\r\n name: comp.name || 'AsyncComponent'\r\n };\r\n }\r\n\r\n // Options API component\r\n if (comp.setup || comp.render) {\r\n return {\r\n kind: 'component',\r\n fn: (_props) => {\r\n // Vue components need to be rendered differently\r\n // This is a placeholder - actual rendering uses renderToString\r\n return null;\r\n },\r\n name: comp.name || 'VueComponent',\r\n };\r\n }\r\n }\r\n\r\n // Function component (Composition API)\r\n if (typeof type === 'function') {\r\n const fn = type as ((props: Record<string, unknown>) => unknown) & {\r\n displayName?: string;\r\n name?: string;\r\n __name?: string;\r\n };\r\n return {\r\n kind: 'component',\r\n fn,\r\n name: fn.displayName || fn.__name || fn.name || 'Component'\r\n };\r\n }\r\n\r\n return { kind: 'null' };\r\n },\r\n\r\n getProps(element: unknown): Record<string, unknown> {\r\n const vnode = element as VueVNode;\r\n return vnode.props || {};\r\n },\r\n\r\n getChildren(element: unknown): unknown[] {\r\n const vnode = element as VueVNode;\r\n const children = vnode.children;\r\n\r\n if (children === undefined || children === null) {\r\n return [];\r\n }\r\n\r\n // String children\r\n if (typeof children === 'string' || typeof children === 'number') {\r\n return [children];\r\n }\r\n\r\n // Array children\r\n if (Array.isArray(children)) {\r\n return children.flat();\r\n }\r\n\r\n // Slots object\r\n if (typeof children === 'object' && children !== null) {\r\n const slots = children as Record<string, () => unknown[]>;\r\n if (typeof slots.default === 'function') {\r\n return slots.default();\r\n }\r\n }\r\n\r\n return [children];\r\n },\r\n\r\n getKey(element: unknown): string | number | undefined {\r\n const key = (element as VueVNode).key;\r\n return key !== null ? key : undefined;\r\n },\r\n\r\n isClientBoundary(component: unknown): boolean {\r\n if (typeof component !== 'function' && typeof component !== 'object') {\r\n return false;\r\n }\r\n\r\n const comp = component as {\r\n $$typeof?: symbol;\r\n __flight_client?: boolean;\r\n };\r\n\r\n // Check for Flight client marker\r\n if (comp.__flight_client === true) return true;\r\n\r\n // Check for client reference symbol\r\n if (comp.$$typeof === CLIENT_REFERENCE) return true;\r\n\r\n return false;\r\n },\r\n\r\n async renderToString(element: unknown): Promise<string> {\r\n if (renderToString && Vue?.createSSRApp) {\r\n // Create SSR app wrapper\r\n const app = Vue.createSSRApp({\r\n render: () => element\r\n });\r\n return renderToString(app);\r\n }\r\n throw new Error(\r\n 'renderToString not provided. Pass Vue and renderToString when creating the adapter: ' +\r\n 'createVueAdapter({ Vue, renderToString })'\r\n );\r\n },\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Vue Client Consumer\r\n// ============================================================================\r\n\r\n/**\r\n * Options for Vue consumer\r\n */\r\nexport interface VueConsumerOptions {\r\n /** Registry of client components */\r\n registry?: Map<string, () => Promise<unknown>>;\r\n}\r\n\r\n/**\r\n * Create a Vue client-side consumer for Flight payloads\r\n */\r\nexport function createVueConsumer(deps: VueDependencies, options: VueConsumerOptions = {}) {\r\n const { Vue } = deps;\r\n const { registry = new Map() } = options;\r\n\r\n return {\r\n /**\r\n * Register a client component\r\n */\r\n register(id: string, loader: () => Promise<unknown>): void {\r\n registry.set(id, loader);\r\n },\r\n\r\n /**\r\n * Convert Flight elements to Vue VNodes\r\n */\r\n toVueElement(element: import('../payload.js').FlightElement): unknown {\r\n switch (element.$$type) {\r\n case 'null':\r\n return null;\r\n\r\n case 'text':\r\n return element.value;\r\n\r\n case 'host': {\r\n const children = element.children.map(c => this.toVueElement(c));\r\n return Vue.h(\r\n element.tag,\r\n { ...element.props, key: element.key },\r\n children\r\n );\r\n }\r\n\r\n case 'fragment': {\r\n const children = element.children.map(c => this.toVueElement(c));\r\n return Vue.h(Vue.Fragment!, null, children);\r\n }\r\n\r\n case 'suspense': {\r\n if (Vue.Suspense) {\r\n const fallback = this.toVueElement(element.fallback);\r\n const children = element.children.map(c => this.toVueElement(c));\r\n return Vue.h(Vue.Suspense, null, {\r\n default: () => children,\r\n fallback: () => fallback,\r\n });\r\n }\r\n // Fallback: render children directly\r\n const children = element.children.map(c => this.toVueElement(c));\r\n return Vue.h(Vue.Fragment!, null, children);\r\n }\r\n\r\n case 'client': {\r\n const loader = registry.get(element.ref);\r\n if (!loader) {\r\n console.warn(`[Flight] Client component not registered: ${element.ref}`);\r\n if (element.ssr) {\r\n return Vue.h('div', {\r\n innerHTML: element.ssr\r\n });\r\n }\r\n return null;\r\n }\r\n\r\n // Create async component\r\n const AsyncComponent = {\r\n async setup() {\r\n const mod = await loader() as { default?: unknown };\r\n return () => Vue.h(mod.default ?? mod as unknown);\r\n }\r\n };\r\n\r\n return Vue.h(AsyncComponent);\r\n }\r\n\r\n case 'lazy': {\r\n if (element.fallback) {\r\n return this.toVueElement(element.fallback);\r\n }\r\n return Vue.h('div', { 'data-flight-pending': element.id });\r\n }\r\n\r\n default:\r\n return null;\r\n }\r\n },\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Utility Types\r\n// ============================================================================\r\n\r\n/**\r\n * Type helper for Vue Server Component\r\n */\r\nexport type VueServerComponent<P = Record<string, unknown>> = (\r\n props: P,\r\n ctx: import('../context.js').ServerContext\r\n) => Promise<VueVNode> | VueVNode;\r\n\r\n/**\r\n * Mark a Vue component as a client component\r\n */\r\nexport function markAsVueClientComponent<T extends object>(\r\n component: T,\r\n moduleId: string,\r\n exportName = 'default'\r\n): T {\r\n const marked = component as T & {\r\n $$typeof: symbol;\r\n __flight_client: boolean;\r\n __flight_module: string;\r\n __flight_export: string;\r\n };\r\n\r\n marked.$$typeof = CLIENT_REFERENCE;\r\n marked.__flight_client = true;\r\n marked.__flight_module = moduleId;\r\n marked.__flight_export = exportName;\r\n\r\n return marked;\r\n}\r\n"]}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/rsc/adapters/solid.ts"],"names":[],"mappings":"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","file":"chunk-OCVLNLTI.js","sourcesContent":["/**\r\n * @flight-framework/core - Solid.js UI Adapter\r\n * \r\n * Adapter for using Solid.js with Flight Server Components.\r\n * Enables Flight to render Solid components without tight coupling.\r\n * \r\n * Philosophy: Zero lock-in - Solid is optional, user decides.\r\n * \r\n * @module @flight-framework/core/rsc/adapters/solid\r\n */\r\n\r\nimport type { UIAdapter, ElementTypeInfo } from '../renderer.js';\r\n\r\n// ============================================================================\r\n// Solid Symbols\r\n// ============================================================================\r\n\r\n// Flight reference symbols\r\nconst CLIENT_REFERENCE = Symbol.for('flight.client.reference');\r\n\r\n// ============================================================================\r\n// Types\r\n// ============================================================================\r\n\r\n/**\r\n * Minimal Solid JSX Element interface\r\n */\r\ninterface SolidElement {\r\n t: string | ((props: unknown) => unknown); // tag or component\r\n p: Record<string, unknown> | null; // props\r\n r?: unknown; // key/ref\r\n}\r\n\r\n/**\r\n * Solid dependencies (user provides these)\r\n */\r\nexport interface SolidDependencies {\r\n /** solid-js module */\r\n solid: {\r\n createSignal: <T>(value: T) => [() => T, (v: T) => void];\r\n createMemo: <T>(fn: () => T) => () => T;\r\n createEffect: (fn: () => void) => void;\r\n children: (fn: () => unknown) => () => unknown[];\r\n splitProps: <T extends object, K extends keyof T>(\r\n props: T,\r\n ...keys: K[][]\r\n ) => [Pick<T, K>, Omit<T, K>][];\r\n For?: unknown;\r\n Show?: unknown;\r\n Switch?: unknown;\r\n Match?: unknown;\r\n Suspense?: unknown;\r\n ErrorBoundary?: unknown;\r\n };\r\n /** solid-js/web module */\r\n web: {\r\n render?: (code: () => unknown, element: Element) => () => void;\r\n hydrate?: (code: () => unknown, element: Element) => () => void;\r\n renderToString?: (code: () => unknown) => string;\r\n renderToStringAsync?: (code: () => unknown) => Promise<string>;\r\n isServer?: boolean;\r\n Dynamic?: unknown;\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Adapter Implementation\r\n// ============================================================================\r\n\r\n/**\r\n * Create Solid.js UI Adapter\r\n * \r\n * @example\r\n * ```typescript\r\n * import { createSolidAdapter } from '@flight-framework/core/rsc/adapters/solid';\r\n * import * as solid from 'solid-js';\r\n * import * as web from 'solid-js/web';\r\n * \r\n * const adapter = createSolidAdapter({ solid, web });\r\n * const renderer = createRenderer(adapter);\r\n * ```\r\n */\r\nexport function createSolidAdapter(deps?: SolidDependencies): UIAdapter {\r\n const { solid, web } = deps || {};\r\n\r\n return {\r\n name: 'solid',\r\n\r\n isElement(value: unknown): boolean {\r\n if (value === null || typeof value !== 'object') {\r\n return false;\r\n }\r\n\r\n // Solid JSX elements are plain objects with t (type) and p (props)\r\n const el = value as Record<string, unknown>;\r\n\r\n // Check for Solid's compiled JSX structure\r\n if ('t' in el && ('p' in el || el.p === null)) {\r\n return true;\r\n }\r\n\r\n // Check for function components (Solid lazy returns functions)\r\n if (typeof value === 'function') {\r\n return true;\r\n }\r\n\r\n return false;\r\n },\r\n\r\n getElementType(element: unknown): ElementTypeInfo {\r\n // Handle function directly (component or lazy)\r\n if (typeof element === 'function') {\r\n const fn = element as ((props: Record<string, unknown>) => unknown) & {\r\n displayName?: string;\r\n name?: string;\r\n };\r\n return {\r\n kind: 'component',\r\n fn,\r\n name: fn.displayName || fn.name || 'SolidComponent'\r\n };\r\n }\r\n\r\n const el = element as SolidElement;\r\n const type = el.t;\r\n\r\n // String = host element (div, span, etc.)\r\n if (typeof type === 'string') {\r\n return { kind: 'host', tag: type };\r\n }\r\n\r\n // Function = component\r\n if (typeof type === 'function') {\r\n const fn = type as ((props: Record<string, unknown>) => unknown) & {\r\n displayName?: string;\r\n name?: string;\r\n };\r\n\r\n // Check for Solid built-in components\r\n if (solid) {\r\n if (type === solid.For) {\r\n return { kind: 'fragment' };\r\n }\r\n if (type === solid.Show) {\r\n return { kind: 'fragment' };\r\n }\r\n if (type === solid.Suspense) {\r\n return {\r\n kind: 'suspense',\r\n fallback: el.p?.fallback\r\n };\r\n }\r\n }\r\n\r\n return {\r\n kind: 'component',\r\n fn,\r\n name: fn.displayName || fn.name || 'Component'\r\n };\r\n }\r\n\r\n // Symbol types (Fragment, etc.)\r\n if (typeof type === 'symbol') {\r\n return { kind: 'fragment' };\r\n }\r\n\r\n return { kind: 'null' };\r\n },\r\n\r\n getProps(element: unknown): Record<string, unknown> {\r\n if (typeof element === 'function') {\r\n return {};\r\n }\r\n return (element as SolidElement).p || {};\r\n },\r\n\r\n getChildren(element: unknown): unknown[] {\r\n if (typeof element === 'function') {\r\n return [];\r\n }\r\n\r\n const props = (element as SolidElement).p;\r\n const children = props?.children;\r\n\r\n if (children === undefined || children === null) {\r\n return [];\r\n }\r\n\r\n // Solid children can be functions (for reactivity)\r\n if (typeof children === 'function') {\r\n // In SSR context, we can call the function\r\n if (web?.isServer) {\r\n try {\r\n const result = (children as () => unknown)();\r\n if (Array.isArray(result)) {\r\n return result;\r\n }\r\n return [result];\r\n } catch {\r\n return [];\r\n }\r\n }\r\n // On client, return as-is for hydration\r\n return [children];\r\n }\r\n\r\n if (Array.isArray(children)) {\r\n return children.flat();\r\n }\r\n\r\n return [children];\r\n },\r\n\r\n getKey(element: unknown): string | number | undefined {\r\n if (typeof element === 'function') {\r\n return undefined;\r\n }\r\n const ref = (element as SolidElement).r;\r\n if (typeof ref === 'string' || typeof ref === 'number') {\r\n return ref;\r\n }\r\n return undefined;\r\n },\r\n\r\n isClientBoundary(component: unknown): boolean {\r\n if (typeof component !== 'function' && typeof component !== 'object') {\r\n return false;\r\n }\r\n\r\n const comp = component as {\r\n $$typeof?: symbol;\r\n __flight_client?: boolean;\r\n };\r\n\r\n // Check for Flight client marker\r\n if (comp.__flight_client === true) return true;\r\n\r\n // Check for client reference symbol\r\n if (comp.$$typeof === CLIENT_REFERENCE) return true;\r\n\r\n return false;\r\n },\r\n\r\n async renderToString(element: unknown): Promise<string> {\r\n if (web?.renderToStringAsync) {\r\n // Async SSR with Suspense support\r\n return web.renderToStringAsync(() => element);\r\n }\r\n if (web?.renderToString) {\r\n // Sync SSR\r\n return web.renderToString(() => element);\r\n }\r\n throw new Error(\r\n 'renderToString not provided. Pass solid-js/web when creating the adapter: ' +\r\n 'createSolidAdapter({ solid, web })'\r\n );\r\n },\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Solid Client Consumer\r\n// ============================================================================\r\n\r\n/**\r\n * Options for Solid consumer\r\n */\r\nexport interface SolidConsumerOptions {\r\n /** Registry of client components */\r\n registry?: Map<string, () => Promise<unknown>>;\r\n}\r\n\r\n/**\r\n * Create a Solid client-side consumer for Flight payloads\r\n */\r\nexport function createSolidConsumer(\r\n deps: SolidDependencies,\r\n options: SolidConsumerOptions = {}\r\n) {\r\n const { solid, web } = deps;\r\n const { registry = new Map() } = options;\r\n\r\n return {\r\n /**\r\n * Register a client component\r\n */\r\n register(id: string, loader: () => Promise<unknown>): void {\r\n registry.set(id, loader);\r\n },\r\n\r\n /**\r\n * Convert Flight elements to Solid JSX\r\n */\r\n toSolidElement(element: import('../payload.js').FlightElement): unknown {\r\n switch (element.$$type) {\r\n case 'null':\r\n return null;\r\n\r\n case 'text':\r\n return element.value;\r\n\r\n case 'host': {\r\n // Create Solid element structure\r\n const children = element.children.map(c => this.toSolidElement(c));\r\n return {\r\n t: element.tag,\r\n p: { ...element.props, children },\r\n r: element.key,\r\n };\r\n }\r\n\r\n case 'fragment': {\r\n const children = element.children.map(c => this.toSolidElement(c));\r\n return children;\r\n }\r\n\r\n case 'suspense': {\r\n if (solid?.Suspense) {\r\n const fallback = this.toSolidElement(element.fallback);\r\n const children = element.children.map(c => this.toSolidElement(c));\r\n return {\r\n t: solid.Suspense,\r\n p: { fallback: () => fallback, children: () => children },\r\n };\r\n }\r\n return element.children.map(c => this.toSolidElement(c));\r\n }\r\n\r\n case 'client': {\r\n const loader = registry.get(element.ref);\r\n if (!loader) {\r\n console.warn(`[Flight] Client component not registered: ${element.ref}`);\r\n if (element.ssr) {\r\n return {\r\n t: 'div',\r\n p: { innerHTML: element.ssr },\r\n };\r\n }\r\n return null;\r\n }\r\n\r\n // Create lazy component for Solid\r\n // Solid's lazy is different - it expects a dynamic import\r\n const LazyComponent = async () => {\r\n const mod = await loader() as { default?: unknown };\r\n return mod.default ?? mod;\r\n };\r\n\r\n if (solid?.Suspense) {\r\n return {\r\n t: solid.Suspense,\r\n p: {\r\n fallback: () => element.ssr ? { t: 'div', p: { innerHTML: element.ssr } } : null,\r\n children: LazyComponent,\r\n },\r\n };\r\n }\r\n\r\n return { t: LazyComponent, p: {} };\r\n }\r\n\r\n case 'lazy': {\r\n if (element.fallback) {\r\n return this.toSolidElement(element.fallback);\r\n }\r\n return {\r\n t: 'div',\r\n p: { 'data-flight-pending': element.id }\r\n };\r\n }\r\n\r\n default:\r\n return null;\r\n }\r\n },\r\n\r\n /**\r\n * Hydrate Flight payload into DOM\r\n */\r\n hydrate(\r\n chunks: import('../payload.js').FlightChunk[],\r\n container: Element\r\n ): (() => void) | undefined {\r\n const rootChunk = chunks.find(c => c.type === 'S' && c.id === 'root');\r\n if (!rootChunk || rootChunk.type !== 'S') {\r\n throw new Error('[Flight] No root chunk found');\r\n }\r\n\r\n // Register client components\r\n for (const chunk of chunks) {\r\n if (chunk.type === 'C') {\r\n if (!registry.has(chunk.id)) {\r\n registry.set(chunk.id, () => import(/* webpackIgnore: true */ chunk.module));\r\n }\r\n }\r\n }\r\n\r\n const element = this.toSolidElement(rootChunk.tree);\r\n\r\n if (web?.hydrate) {\r\n return web.hydrate(() => element, container);\r\n }\r\n if (web?.render) {\r\n return web.render(() => element, container);\r\n }\r\n\r\n throw new Error('[Flight] Solid web.hydrate or web.render not provided');\r\n },\r\n };\r\n}\r\n\r\n// ============================================================================\r\n// Utility Types\r\n// ============================================================================\r\n\r\n/**\r\n * Type helper for Solid Server Component\r\n */\r\nexport type SolidServerComponent<P = Record<string, unknown>> = (\r\n props: P,\r\n ctx: import('../context.js').ServerContext\r\n) => Promise<unknown> | unknown;\r\n\r\n/**\r\n * Mark a Solid component as a client component\r\n */\r\nexport function markAsSolidClientComponent<T extends object>(\r\n component: T,\r\n moduleId: string,\r\n exportName = 'default'\r\n): T {\r\n const marked = component as T & {\r\n $$typeof: symbol;\r\n __flight_client: boolean;\r\n __flight_module: string;\r\n __flight_export: string;\r\n };\r\n\r\n marked.$$typeof = CLIENT_REFERENCE;\r\n marked.__flight_client = true;\r\n marked.__flight_module = moduleId;\r\n marked.__flight_export = exportName;\r\n\r\n return marked;\r\n}\r\n\r\n/**\r\n * Check if running on server (Solid isServer helper)\r\n */\r\nexport function isServer(deps?: SolidDependencies): boolean {\r\n return deps?.web?.isServer ?? (typeof window === 'undefined');\r\n}\r\n"]}
|