@flight-framework/core 0.2.5 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +346 -0
  3. package/dist/actions/index.js +1 -1
  4. package/dist/adapters/index.js +1 -1
  5. package/dist/cache/index.js +1 -1
  6. package/dist/{chunk-FSJNOPYE.js → chunk-2JVEH76V.js} +3 -3
  7. package/dist/chunk-2JVEH76V.js.map +1 -0
  8. package/dist/{chunk-3ZSSRE6M.js → chunk-2R23X5Z3.js} +2 -2
  9. package/dist/chunk-2R23X5Z3.js.map +1 -0
  10. package/dist/{chunk-VPFMHGEV.js → chunk-3N5ZBVZJ.js} +2 -2
  11. package/dist/chunk-3N5ZBVZJ.js.map +1 -0
  12. package/dist/{chunk-2F2QU6RC.js → chunk-3UQJE3XZ.js} +2 -2
  13. package/dist/chunk-3UQJE3XZ.js.map +1 -0
  14. package/dist/{chunk-PDW5WCMW.js → chunk-5XHOLZBJ.js} +2 -2
  15. package/dist/chunk-5XHOLZBJ.js.map +1 -0
  16. package/dist/{chunk-MDQNNIHH.js → chunk-65JYF3DJ.js} +2 -2
  17. package/dist/chunk-65JYF3DJ.js.map +1 -0
  18. package/dist/{chunk-K2CQZPCG.js → chunk-6GI6HFSQ.js} +2 -2
  19. package/dist/chunk-6GI6HFSQ.js.map +1 -0
  20. package/dist/{chunk-PVUMB632.js → chunk-A2QRUBVE.js} +2 -2
  21. package/dist/chunk-A2QRUBVE.js.map +1 -0
  22. package/dist/{chunk-W6D62JCI.js → chunk-A4TKWQBU.js} +2 -2
  23. package/dist/chunk-A4TKWQBU.js.map +1 -0
  24. package/dist/{chunk-GCQZ4FHI.js → chunk-ARBKF6VI.js} +2 -2
  25. package/dist/{chunk-GCQZ4FHI.js.map → chunk-ARBKF6VI.js.map} +1 -1
  26. package/dist/{chunk-ZVC3ZWLM.js → chunk-B2LPSCES.js} +2 -2
  27. package/dist/chunk-B2LPSCES.js.map +1 -0
  28. package/dist/{chunk-62C7LX2E.js → chunk-CKJHJPKQ.js} +2 -2
  29. package/dist/chunk-CKJHJPKQ.js.map +1 -0
  30. package/dist/{chunk-RSVA2EYO.js → chunk-CNY3ZUVG.js} +2 -2
  31. package/dist/chunk-CNY3ZUVG.js.map +1 -0
  32. package/dist/{chunk-IXMD5QH2.js → chunk-EHVUAFNH.js} +2 -2
  33. package/dist/chunk-EHVUAFNH.js.map +1 -0
  34. package/dist/{chunk-P6WSBVDT.js → chunk-FRAH5QNY.js} +4 -4
  35. package/dist/chunk-FRAH5QNY.js.map +1 -0
  36. package/dist/{chunk-MQQLYWZZ.js → chunk-GNS2FGPC.js} +2 -2
  37. package/dist/chunk-GNS2FGPC.js.map +1 -0
  38. package/dist/{chunk-TASAT7KB.js → chunk-HNPO6LFW.js} +2 -2
  39. package/dist/chunk-HNPO6LFW.js.map +1 -0
  40. package/dist/{chunk-KWFX6WHG.js → chunk-JFUKVWSO.js} +2 -2
  41. package/dist/chunk-JFUKVWSO.js.map +1 -0
  42. package/dist/{chunk-NWMJYTMB.js → chunk-LAKHYTHL.js} +3 -3
  43. package/dist/chunk-LAKHYTHL.js.map +1 -0
  44. package/dist/{chunk-R7SQAREQ.js → chunk-LKOPJ3GS.js} +2 -2
  45. package/dist/chunk-LKOPJ3GS.js.map +1 -0
  46. package/dist/{chunk-WOEIJWGJ.js → chunk-NZS2YJ43.js} +2 -2
  47. package/dist/chunk-NZS2YJ43.js.map +1 -0
  48. package/dist/{chunk-3QP3E7HS.js → chunk-OZ3EXPLE.js} +2 -2
  49. package/dist/chunk-OZ3EXPLE.js.map +1 -0
  50. package/dist/{chunk-YHEVHRLH.js → chunk-OZBPR27I.js} +2 -2
  51. package/dist/chunk-OZBPR27I.js.map +1 -0
  52. package/dist/{chunk-T4Z4HM4W.js → chunk-PAVI5W6M.js} +3 -3
  53. package/dist/chunk-PAVI5W6M.js.map +1 -0
  54. package/dist/{chunk-XSY5AAXT.js → chunk-PO7IHPFF.js} +2 -2
  55. package/dist/chunk-PO7IHPFF.js.map +1 -0
  56. package/dist/{chunk-SUILH4ID.js → chunk-QK6UEQ75.js} +2 -2
  57. package/dist/chunk-QK6UEQ75.js.map +1 -0
  58. package/dist/{chunk-WFAWAHJH.js → chunk-UFWGOJL7.js} +2 -2
  59. package/dist/chunk-UFWGOJL7.js.map +1 -0
  60. package/dist/{chunk-54HPVE7N.js → chunk-UGTETAJ2.js} +2 -2
  61. package/dist/chunk-UGTETAJ2.js.map +1 -0
  62. package/dist/{chunk-LBYDTULN.js → chunk-UL4Q5CIJ.js} +5 -5
  63. package/dist/chunk-UL4Q5CIJ.js.map +1 -0
  64. package/dist/{chunk-XOIYNY4I.js → chunk-VNO2YUVD.js} +2 -2
  65. package/dist/chunk-VNO2YUVD.js.map +1 -0
  66. package/dist/{chunk-ZIE56LCA.js → chunk-XU6MRYG2.js} +3 -3
  67. package/dist/chunk-XU6MRYG2.js.map +1 -0
  68. package/dist/{chunk-6BDCTUQY.js → chunk-YNTMYL36.js} +3 -3
  69. package/dist/chunk-YNTMYL36.js.map +1 -0
  70. package/dist/config/index.js +1 -1
  71. package/dist/errors/index.js +2 -2
  72. package/dist/file-router/index.js +1 -1
  73. package/dist/file-router/streaming-hints.js +1 -1
  74. package/dist/handlers/index.js +1 -1
  75. package/dist/index.js +30 -30
  76. package/dist/index.js.map +1 -1
  77. package/dist/islands/index.js +1 -1
  78. package/dist/middleware/index.js +1 -1
  79. package/dist/react/index.js +2 -2
  80. package/dist/react/index.js.map +1 -1
  81. package/dist/render/index.js +1 -1
  82. package/dist/router/index.js +1 -1
  83. package/dist/rsc/adapters/index.js +4 -4
  84. package/dist/rsc/adapters/preact.js +1 -1
  85. package/dist/rsc/adapters/react.js +1 -1
  86. package/dist/rsc/adapters/solid.js +1 -1
  87. package/dist/rsc/adapters/vue.js +1 -1
  88. package/dist/rsc/boundaries.js +1 -1
  89. package/dist/rsc/context.js +1 -1
  90. package/dist/rsc/index.js +11 -11
  91. package/dist/rsc/legacy.js +1 -1
  92. package/dist/rsc/payload.js +1 -1
  93. package/dist/rsc/plugins/esbuild.js +2 -2
  94. package/dist/rsc/plugins/index.js +4 -4
  95. package/dist/rsc/plugins/rollup.js +2 -2
  96. package/dist/rsc/renderer.js +3 -3
  97. package/dist/rsc/stream.js +1 -1
  98. package/dist/rsc/vite-plugin.js +2 -2
  99. package/dist/server/index.js +4 -4
  100. package/dist/streaming/adapters/index.js +1 -1
  101. package/dist/streaming/conditional.js +1 -1
  102. package/dist/streaming/index.js +1 -1
  103. package/dist/streaming/observability.js +2 -2
  104. package/dist/streaming/priority.js +1 -1
  105. package/dist/utils/index.js +1 -1
  106. package/package.json +207 -207
  107. package/dist/chunk-2F2QU6RC.js.map +0 -1
  108. package/dist/chunk-3QP3E7HS.js.map +0 -1
  109. package/dist/chunk-3ZSSRE6M.js.map +0 -1
  110. package/dist/chunk-54HPVE7N.js.map +0 -1
  111. package/dist/chunk-62C7LX2E.js.map +0 -1
  112. package/dist/chunk-6BDCTUQY.js.map +0 -1
  113. package/dist/chunk-FSJNOPYE.js.map +0 -1
  114. package/dist/chunk-IXMD5QH2.js.map +0 -1
  115. package/dist/chunk-K2CQZPCG.js.map +0 -1
  116. package/dist/chunk-KWFX6WHG.js.map +0 -1
  117. package/dist/chunk-LBYDTULN.js.map +0 -1
  118. package/dist/chunk-MDQNNIHH.js.map +0 -1
  119. package/dist/chunk-MQQLYWZZ.js.map +0 -1
  120. package/dist/chunk-NWMJYTMB.js.map +0 -1
  121. package/dist/chunk-P6WSBVDT.js.map +0 -1
  122. package/dist/chunk-PDW5WCMW.js.map +0 -1
  123. package/dist/chunk-PVUMB632.js.map +0 -1
  124. package/dist/chunk-R7SQAREQ.js.map +0 -1
  125. package/dist/chunk-RSVA2EYO.js.map +0 -1
  126. package/dist/chunk-SUILH4ID.js.map +0 -1
  127. package/dist/chunk-T4Z4HM4W.js.map +0 -1
  128. package/dist/chunk-TASAT7KB.js.map +0 -1
  129. package/dist/chunk-VPFMHGEV.js.map +0 -1
  130. package/dist/chunk-W6D62JCI.js.map +0 -1
  131. package/dist/chunk-WFAWAHJH.js.map +0 -1
  132. package/dist/chunk-WOEIJWGJ.js.map +0 -1
  133. package/dist/chunk-XOIYNY4I.js.map +0 -1
  134. package/dist/chunk-XSY5AAXT.js.map +0 -1
  135. package/dist/chunk-YHEVHRLH.js.map +0 -1
  136. package/dist/chunk-ZIE56LCA.js.map +0 -1
  137. package/dist/chunk-ZVC3ZWLM.js.map +0 -1
@@ -92,5 +92,5 @@ async function loadConfig(root = process.cwd()) {
92
92
  }
93
93
 
94
94
  export { defineConfig, findConfigFile, loadConfig, resolveConfig };
95
- //# sourceMappingURL=chunk-IXMD5QH2.js.map
96
- //# sourceMappingURL=chunk-IXMD5QH2.js.map
95
+ //# sourceMappingURL=chunk-EHVUAFNH.js.map
96
+ //# sourceMappingURL=chunk-EHVUAFNH.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/config/index.ts"],"names":[],"mappings":"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","file":"chunk-EHVUAFNH.js","sourcesContent":["/**\n * Flight Configuration - User configuration system\n */\n\nimport type { RenderMode } from '../render/index.js';\nimport type { FlightAdapter } from '../adapters/index.js';\n\n// ============================================================================\n// Bundler Types (from @flight-framework/bundler)\n// ============================================================================\n\n/**\n * Bundler adapter interface.\n * Import the full type from @flight-framework/bundler for implementation.\n */\nexport interface BundlerAdapter {\n /** Adapter identifier */\n name: string;\n /** Bundler name (vite, esbuild, rolldown, etc.) */\n bundler: string;\n /** Bundler-specific options */\n options?: Record<string, unknown>;\n /** Create dev server */\n createDevServer(config: FlightConfig): Promise<unknown>;\n /** Build for production */\n build(config: FlightConfig): Promise<unknown>;\n}\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** UI Framework configuration */\nexport interface UIConfig {\n /** The UI framework to use */\n framework?: 'react' | 'vue' | 'svelte' | 'solid' | 'preact' | 'vanilla' | string;\n /** Framework-specific options */\n options?: Record<string, unknown>;\n}\n\n/** Rendering configuration */\nexport interface RenderConfig {\n /** Default render mode */\n default?: RenderMode;\n /** Per-route render mode overrides */\n routes?: Record<string, RenderMode>;\n}\n\n/** Development server options */\nexport interface DevConfig {\n /** Port to run dev server on */\n port?: number;\n /** Host to bind to */\n host?: string | boolean;\n /** Open browser on start */\n open?: boolean;\n /** HTTPS configuration */\n https?: boolean | {\n key?: string;\n cert?: string;\n };\n /** Proxy configuration */\n proxy?: Record<string, string | {\n target: string;\n changeOrigin?: boolean;\n rewrite?: (path: string) => string;\n }>;\n}\n\n/** Build configuration */\nexport interface BuildConfig {\n /** Output directory */\n outDir?: string;\n /** Source directory */\n srcDir?: string;\n /** Public assets directory */\n publicDir?: string;\n /** Routes directory */\n routesDir?: string;\n /** Generate sourcemaps */\n sourcemap?: boolean | 'inline' | 'hidden';\n /** Minify output */\n minify?: boolean | 'terser' | 'esbuild';\n /** Target environments */\n target?: string | string[];\n}\n\n/** Full Flight configuration (resolved) */\nexport interface FlightConfig {\n /** Root directory */\n root: string;\n /** Deployment adapter */\n adapter: FlightAdapter | null;\n /** Bundler adapter (Vite, esbuild, Rolldown, etc.) */\n bundler: BundlerAdapter | null;\n /** UI framework configuration */\n ui: UIConfig;\n /** Rendering configuration */\n rendering: RenderConfig;\n /** Development server options */\n dev: Required<DevConfig>;\n /** Build configuration */\n build: Required<BuildConfig>;\n /** Bundler-specific configuration (passed to adapter) */\n bundlerOptions?: Record<string, unknown>;\n /** @deprecated Use bundler adapter instead */\n vite?: Record<string, unknown>;\n /** Plugin configurations */\n plugins: FlightPlugin[];\n}\n\n/** Flight plugin interface */\nexport interface FlightPlugin {\n /** Plugin name */\n name: string;\n /** Hook into config resolution */\n config?: (config: FlightConfig) => FlightConfig | void | Promise<FlightConfig | void>;\n /** Hook into build start */\n buildStart?: () => void | Promise<void>;\n /** Hook into build end */\n buildEnd?: () => void | Promise<void>;\n /** Hook into dev server start */\n devStart?: () => void | Promise<void>;\n}\n\n/** User-provided configuration (partial) */\nexport interface FlightUserConfig {\n /** Root directory (defaults to process.cwd()) */\n root?: string;\n /** Deployment adapter */\n adapter?: FlightAdapter;\n /** Bundler adapter (Vite, esbuild, Rolldown, etc.) */\n bundler?: BundlerAdapter;\n /** UI framework configuration */\n ui?: UIConfig;\n /** Rendering configuration */\n rendering?: RenderConfig;\n /** Development server options */\n dev?: DevConfig;\n /** Build configuration */\n build?: BuildConfig;\n /** Bundler-specific configuration */\n bundlerOptions?: Record<string, unknown>;\n /** @deprecated Use bundler adapter instead */\n vite?: Record<string, unknown>;\n /** Plugins */\n plugins?: FlightPlugin[];\n}\n\n// ============================================================================\n// Configuration Factory\n// ============================================================================\n\n/** Default configuration values */\nconst DEFAULT_CONFIG: Omit<FlightConfig, 'root'> = {\n adapter: null,\n bundler: null,\n ui: {\n framework: 'vanilla',\n },\n rendering: {\n default: 'ssr',\n routes: {},\n },\n dev: {\n port: 5173,\n host: 'localhost',\n open: false,\n https: false,\n proxy: {},\n },\n build: {\n outDir: 'dist',\n srcDir: 'src',\n publicDir: 'public',\n routesDir: 'src/routes',\n sourcemap: false,\n minify: true,\n target: 'es2022',\n },\n plugins: [],\n};\n\n/**\n * Define Flight configuration\n * \n * @example\n * ```typescript\n * // flight.config.ts\n * import { defineConfig } from '@flight-framework/core';\n * import node from '@flight-framework/adapter-node';\n * \n * export default defineConfig({\n * adapter: node(),\n * ui: { framework: 'react' },\n * rendering: {\n * default: 'ssr',\n * routes: {\n * '/blog/*': 'ssg',\n * '/app/*': 'csr',\n * },\n * },\n * });\n * ```\n */\nexport function defineConfig(config: FlightUserConfig): FlightUserConfig {\n return config;\n}\n\n/**\n * Resolve user config to full config with defaults\n */\nexport function resolveConfig(userConfig: FlightUserConfig = {}): FlightConfig {\n return {\n root: userConfig.root ?? process.cwd(),\n adapter: userConfig.adapter ?? DEFAULT_CONFIG.adapter,\n bundler: userConfig.bundler ?? DEFAULT_CONFIG.bundler,\n ui: {\n ...DEFAULT_CONFIG.ui,\n ...userConfig.ui,\n },\n rendering: {\n ...DEFAULT_CONFIG.rendering,\n ...userConfig.rendering,\n },\n dev: {\n ...DEFAULT_CONFIG.dev,\n ...userConfig.dev,\n } as Required<DevConfig>,\n build: {\n ...DEFAULT_CONFIG.build,\n ...userConfig.build,\n } as Required<BuildConfig>,\n bundlerOptions: userConfig.bundlerOptions,\n vite: userConfig.vite,\n plugins: userConfig.plugins ?? [],\n };\n}\n\n// ============================================================================\n// Config Loading\n// ============================================================================\n\nconst CONFIG_FILES = [\n 'flight.config.ts',\n 'flight.config.js',\n 'flight.config.mjs',\n 'flight.config.mts',\n];\n\n/**\n * Find the config file in a directory\n */\nexport async function findConfigFile(root: string): Promise<string | null> {\n // Dynamic import for Node.js fs\n const { existsSync } = await import('node:fs');\n const { join } = await import('node:path');\n\n for (const file of CONFIG_FILES) {\n const path = join(root, file);\n if (existsSync(path)) {\n return path;\n }\n }\n\n return null;\n}\n\n/**\n * Load configuration from file\n */\nexport async function loadConfig(root: string = process.cwd()): Promise<FlightConfig> {\n const configFile = await findConfigFile(root);\n\n if (!configFile) {\n return resolveConfig({ root });\n }\n\n try {\n // Use dynamic import for the config file\n // On Windows, we need to convert the path to a file:// URL\n const { pathToFileURL } = await import('node:url');\n const configUrl = pathToFileURL(configFile).href;\n const module = await import(configUrl);\n const userConfig = module.default as FlightUserConfig;\n\n return resolveConfig({\n ...userConfig,\n root,\n });\n } catch (error) {\n console.error(`Failed to load config from ${configFile}:`, error);\n return resolveConfig({ root });\n }\n}\n"]}
@@ -1,5 +1,5 @@
1
- import { createServerChunk, createErrorChunk, toFlightElement, serialize, generateChunkId, createClientChunk } from './chunk-K2CQZPCG.js';
2
- import { isClientReference } from './chunk-PDW5WCMW.js';
1
+ import { createServerChunk, createErrorChunk, toFlightElement, serialize, generateChunkId, createClientChunk } from './chunk-6GI6HFSQ.js';
2
+ import { isClientReference } from './chunk-5XHOLZBJ.js';
3
3
 
4
4
  // src/rsc/renderer.ts
5
5
  var FlightRenderer = class {
@@ -312,5 +312,5 @@ async function* renderServerComponentStreaming(component, props, ctx, adapter, o
312
312
  }
313
313
 
314
314
  export { FlightRenderer, createRenderer, renderServerComponent, renderServerComponentStreaming };
315
- //# sourceMappingURL=chunk-P6WSBVDT.js.map
316
- //# sourceMappingURL=chunk-P6WSBVDT.js.map
315
+ //# sourceMappingURL=chunk-FRAH5QNY.js.map
316
+ //# sourceMappingURL=chunk-FRAH5QNY.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/rsc/renderer.ts"],"names":["children"],"mappings":"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","file":"chunk-FRAH5QNY.js","sourcesContent":["/**\n * @flight-framework/core - Server Component Renderer\n * \n * Renders Server Components to FlightChunks.\n * Framework-agnostic rendering engine that works with adapters.\n * \n * @module @flight-framework/core/rsc/renderer\n */\n\nimport type {\n FlightChunk,\n FlightElement,\n ServerComponentChunk,\n ClientReferenceChunk,\n} from './payload.js';\nimport {\n generateChunkId,\n createServerChunk,\n createClientChunk,\n createErrorChunk,\n toFlightElement,\n serialize,\n} from './payload.js';\nimport {\n isClientReference,\n type ClientReference,\n} from './boundaries.js';\nimport type { ServerContext } from './context.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * UI Framework adapter for rendering\n */\nexport interface UIAdapter {\n /** Adapter name */\n name: string;\n\n /** Check if value is a framework element */\n isElement(value: unknown): boolean;\n\n /** Get element type info */\n getElementType(element: unknown): ElementTypeInfo;\n\n /** Get element props */\n getProps(element: unknown): Record<string, unknown>;\n\n /** Get element children */\n getChildren(element: unknown): unknown[];\n\n /** Get element key */\n getKey(element: unknown): string | number | undefined;\n\n /** Check if component is a client boundary */\n isClientBoundary(component: unknown): boolean;\n\n /** \n * Create a framework-specific element\n * This abstracts away React's Symbol.for('react.element'), Vue's VNode, etc.\n */\n createElement(\n component: ComponentFn,\n props: Record<string, unknown>\n ): unknown;\n\n /** Render element to HTML string (for SSR fallback) */\n renderToString?(element: unknown): Promise<string>;\n}\n\nexport type ElementTypeInfo =\n | { kind: 'host'; tag: string }\n | { kind: 'component'; fn: ComponentFn; name: string }\n | { kind: 'fragment' }\n | { kind: 'suspense'; fallback?: unknown }\n | { kind: 'provider'; value?: unknown }\n | { kind: 'context' }\n | { kind: 'text'; value: string }\n | { kind: 'null' };\n\n/**\n * Component function type\n */\nexport type ComponentFn = (\n props: Record<string, unknown>,\n ctx?: ServerContext\n) => unknown | Promise<unknown>;\n\n/**\n * Render options\n */\nexport interface RenderOptions {\n /** Include SSR fallbacks for client components */\n includeSSRFallbacks?: boolean;\n\n /** Error handler */\n onError?: (error: Error, componentName?: string) => void;\n\n /** Dev mode (include extra debug info) */\n dev?: boolean;\n\n /** Max render depth to prevent infinite loops */\n maxDepth?: number;\n}\n\n/**\n * Render result with metadata\n */\nexport interface RenderResult {\n /** All chunks generated */\n chunks: FlightChunk[];\n\n /** Root chunk */\n root: ServerComponentChunk;\n\n /** Client references found */\n clientRefs: ClientReferenceChunk[];\n\n /** Timing info */\n timing: {\n startTime: number;\n endTime: number;\n duration: number;\n };\n}\n\n// ============================================================================\n// Renderer Implementation\n// ============================================================================\n\n/**\n * Flight Server Component Renderer\n */\nexport class FlightRenderer {\n private chunks: FlightChunk[] = [];\n private clientRefs: ClientReferenceChunk[] = [];\n private pendingPromises = new Map<string, Promise<FlightElement>>();\n private depth = 0;\n\n constructor(\n private adapter: UIAdapter,\n private options: RenderOptions = {}\n ) { }\n\n /**\n * Render a component tree to Flight chunks\n */\n async render(\n element: unknown,\n ctx: ServerContext\n ): Promise<RenderResult> {\n const startTime = Date.now();\n\n this.chunks = [];\n this.clientRefs = [];\n this.pendingPromises.clear();\n this.depth = 0;\n\n try {\n // Render the root element\n const rootTree = await this.renderElement(element, ctx);\n const root = createServerChunk('root', rootTree);\n this.chunks.unshift(root);\n\n // Wait for any pending async boundaries\n await this.resolvePendingChunks(ctx);\n\n const endTime = Date.now();\n\n return {\n chunks: this.chunks,\n root,\n clientRefs: this.clientRefs,\n timing: {\n startTime,\n endTime,\n duration: endTime - startTime,\n },\n };\n } catch (error) {\n const errChunk = createErrorChunk('root', error as Error, this.options.dev);\n this.chunks.push(errChunk);\n\n throw error;\n }\n }\n\n /**\n * Render as async generator (for streaming)\n */\n async *renderStreaming(\n element: unknown,\n ctx: ServerContext\n ): AsyncGenerator<FlightChunk> {\n // Note: startTime available for future timing features\n this.chunks = [];\n this.clientRefs = [];\n this.pendingPromises.clear();\n this.depth = 0;\n\n try {\n // Render root synchronously\n const rootTree = await this.renderElement(element, ctx);\n const root = createServerChunk('root', rootTree);\n yield root;\n\n // Yield pending chunks as they resolve\n while (this.pendingPromises.size > 0) {\n const entries = [...this.pendingPromises.entries()];\n\n // Race all pending promises\n const promises = entries.map(async ([id, promise]) => {\n const tree = await promise;\n this.pendingPromises.delete(id);\n return createServerChunk(id, tree);\n });\n\n // Yield first to complete\n const chunk = await Promise.race(promises);\n yield chunk;\n }\n\n // Yield all client refs\n for (const clientRef of this.clientRefs) {\n yield clientRef;\n }\n\n } catch (error) {\n yield createErrorChunk('root', error as Error, this.options.dev);\n }\n }\n\n /**\n * Render an element to FlightElement\n */\n private async renderElement(\n element: unknown,\n ctx: ServerContext\n ): Promise<FlightElement> {\n // Check depth limit\n this.depth++;\n if (this.depth > (this.options.maxDepth ?? 100)) {\n throw new Error('Maximum render depth exceeded. Check for infinite component loops.');\n }\n\n try {\n // Handle null/undefined/boolean\n if (element === null || element === undefined || typeof element === 'boolean') {\n return { $$type: 'null' };\n }\n\n // Handle primitives\n if (typeof element === 'string') {\n return { $$type: 'text', value: element };\n }\n if (typeof element === 'number') {\n return { $$type: 'text', value: String(element) };\n }\n\n // Handle arrays (fragments)\n if (Array.isArray(element)) {\n const children = await Promise.all(\n element.map(child => this.renderElement(child, ctx))\n );\n return { $$type: 'fragment', children };\n }\n\n // Handle Client References\n if (isClientReference(element)) {\n return this.renderClientReference(element, ctx);\n }\n\n // Handle framework elements\n if (this.adapter.isElement(element)) {\n return this.renderFrameworkElement(element, ctx);\n }\n\n // Unknown - try to convert\n return toFlightElement(element);\n\n } finally {\n this.depth--;\n }\n }\n\n /**\n * Render a framework-specific element\n */\n private async renderFrameworkElement(\n element: unknown,\n ctx: ServerContext\n ): Promise<FlightElement> {\n const typeInfo = this.adapter.getElementType(element);\n const props = this.adapter.getProps(element);\n const key = this.adapter.getKey(element);\n\n switch (typeInfo.kind) {\n case 'host':\n return this.renderHostElement(typeInfo.tag, props, key, ctx);\n\n case 'component':\n return this.renderComponent(typeInfo.fn, typeInfo.name, props, ctx);\n\n case 'fragment': {\n const children = this.adapter.getChildren(element);\n const renderedChildren = await Promise.all(\n children.map(child => this.renderElement(child, ctx))\n );\n return { $$type: 'fragment', children: renderedChildren };\n }\n\n case 'suspense': {\n return this.renderSuspense(element, typeInfo.fallback, ctx);\n }\n\n case 'text':\n return { $$type: 'text', value: typeInfo.value };\n\n case 'null':\n return { $$type: 'null' };\n\n default:\n return { $$type: 'null' };\n }\n }\n\n /**\n * Render a host element (div, span, etc.)\n */\n private async renderHostElement(\n tag: string,\n props: Record<string, unknown>,\n key: string | number | undefined,\n ctx: ServerContext\n ): Promise<FlightElement> {\n // Extract children\n const { children: childrenProp, ...restProps } = props;\n\n // Serialize props (excluding functions and children)\n const serializedProps: Record<string, unknown> = {};\n for (const [propKey, value] of Object.entries(restProps)) {\n if (typeof value !== 'function') {\n serializedProps[propKey] = serialize(value);\n }\n }\n\n // Render children\n const rawChildren = childrenProp ?\n (Array.isArray(childrenProp) ? childrenProp : [childrenProp]) :\n [];\n\n const children = await Promise.all(\n rawChildren.map(child => this.renderElement(child, ctx))\n );\n\n return {\n $$type: 'host',\n tag,\n key,\n props: serializedProps as Record<string, import('./payload.js').SerializedValue>,\n children,\n };\n }\n\n /**\n * Render a component (server or client)\n */\n private async renderComponent(\n component: ComponentFn,\n name: string,\n props: Record<string, unknown>,\n ctx: ServerContext\n ): Promise<FlightElement> {\n // Check if this is a client component\n if (this.adapter.isClientBoundary(component)) {\n return this.renderClientBoundary(component, name, props, ctx);\n }\n\n // Execute server component\n try {\n const result = await component(props, ctx);\n return this.renderElement(result, ctx);\n } catch (error) {\n // Check for Suspense promise\n if (error instanceof Promise) {\n return this.renderAsyncBoundary(error, name, props, ctx);\n }\n\n this.options.onError?.(error as Error, name);\n throw error;\n }\n }\n\n /**\n * Render a client boundary\n */\n private async renderClientBoundary(\n component: ComponentFn,\n name: string,\n props: Record<string, unknown>,\n _ctx: ServerContext\n ): Promise<FlightElement> {\n const chunkId = generateChunkId('c');\n\n // Get module info from component\n const moduleId = (component as unknown as { __flight_module?: string }).__flight_module ?? name;\n const exportName = (component as unknown as { __flight_export?: string }).__flight_export ?? 'default';\n\n // Generate SSR fallback if enabled\n let fallback: string | undefined;\n if (this.options.includeSSRFallbacks && this.adapter.renderToString) {\n try {\n // Create element with props for SSR\n fallback = await this.adapter.renderToString(props);\n } catch {\n // SSR failed, continue without fallback\n }\n }\n\n // Create client reference chunk\n const clientChunk = createClientChunk(chunkId, moduleId, exportName, props, fallback);\n this.clientRefs.push(clientChunk);\n this.chunks.push(clientChunk);\n\n return {\n $$type: 'client',\n ref: chunkId,\n ssr: fallback,\n };\n }\n\n /**\n * Render a Suspense boundary\n */\n private async renderSuspense(\n element: unknown,\n fallbackElement: unknown,\n ctx: ServerContext\n ): Promise<FlightElement> {\n const boundaryId = generateChunkId('s');\n const children = this.adapter.getChildren(element);\n\n // Render fallback\n const fallback = fallbackElement ?\n await this.renderElement(fallbackElement, ctx) :\n { $$type: 'null' as const };\n\n // Render children\n const renderedChildren: FlightElement[] = [];\n for (const child of children) {\n try {\n const rendered = await this.renderElement(child, ctx);\n renderedChildren.push(rendered);\n } catch (error) {\n if (error instanceof Promise) {\n // This is a suspended promise\n this.pendingPromises.set(boundaryId, error.then(async () => {\n const children = this.adapter.getChildren(element);\n const rendered = await Promise.all(\n children.map(c => this.renderElement(c, ctx))\n );\n return { $$type: 'fragment' as const, children: rendered };\n }));\n\n // Return suspense with fallback for now\n return {\n $$type: 'suspense',\n id: boundaryId,\n fallback,\n children: [{ $$type: 'lazy', id: boundaryId, fallback }],\n };\n }\n throw error;\n }\n }\n\n return {\n $$type: 'suspense',\n id: boundaryId,\n fallback,\n children: renderedChildren,\n };\n }\n\n /**\n * Render an async boundary (promise thrown from component)\n */\n private renderAsyncBoundary(\n promise: Promise<unknown>,\n name: string,\n props: Record<string, unknown>,\n ctx: ServerContext\n ): FlightElement {\n const boundaryId = generateChunkId('a');\n\n // Track this promise\n this.pendingPromises.set(boundaryId,\n promise.then(async () => {\n // Re-render the component after promise resolves\n const component = (props as unknown as { component: ComponentFn }).component;\n if (component) {\n const result = await component(props, ctx);\n return this.renderElement(result, ctx);\n }\n return { $$type: 'null' as const };\n })\n );\n\n return {\n $$type: 'lazy',\n id: boundaryId,\n fallback: { $$type: 'text', value: `Loading ${name}...` },\n };\n }\n\n /**\n * Render a Client Reference directly\n */\n private async renderClientReference(\n ref: ClientReference,\n _ctx: ServerContext\n ): Promise<FlightElement> {\n const chunkId = generateChunkId('c');\n\n const clientChunk = createClientChunk(\n chunkId,\n ref.__flight_module,\n ref.__flight_export,\n {} // Props are embedded in the reference\n );\n\n this.clientRefs.push(clientChunk);\n this.chunks.push(clientChunk);\n\n return {\n $$type: 'client',\n ref: chunkId,\n };\n }\n\n /**\n * Resolve all pending async chunks\n */\n private async resolvePendingChunks(_ctx: ServerContext): Promise<void> {\n while (this.pendingPromises.size > 0) {\n const entries = [...this.pendingPromises.entries()];\n\n for (const [id, promise] of entries) {\n try {\n const tree = await promise;\n this.chunks.push(createServerChunk(id, tree));\n } catch (error) {\n this.chunks.push(createErrorChunk(id, error as Error, this.options.dev));\n }\n this.pendingPromises.delete(id);\n }\n }\n }\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Create a renderer with adapter\n */\nexport function createRenderer(\n adapter: UIAdapter,\n options?: RenderOptions\n): FlightRenderer {\n return new FlightRenderer(adapter, options);\n}\n\n/**\n * Render a server component tree\n */\nexport async function renderServerComponent<P>(\n component: ComponentFn,\n props: P,\n ctx: ServerContext,\n adapter: UIAdapter,\n options?: RenderOptions\n): Promise<RenderResult> {\n const renderer = createRenderer(adapter, options);\n\n // Create element using adapter (framework-agnostic)\n const element = adapter.createElement(component, props as Record<string, unknown>);\n\n return renderer.render(element, ctx);\n}\n\nexport async function* renderServerComponentStreaming<P>(\n component: ComponentFn,\n props: P,\n ctx: ServerContext,\n adapter: UIAdapter,\n options?: RenderOptions\n): AsyncGenerator<FlightChunk> {\n const renderer = createRenderer(adapter, options);\n\n // Create element using adapter (framework-agnostic)\n const element = adapter.createElement(component, props as Record<string, unknown>);\n\n yield* renderer.renderStreaming(element, ctx);\n}\n"]}
@@ -284,5 +284,5 @@ function createStreamAdapter(framework, options) {
284
284
  }
285
285
 
286
286
  export { createHTMXStreamAdapter, createReactStreamAdapter, createSolidStreamAdapter, createStreamAdapter, createSvelteStreamAdapter, createVueStreamAdapter };
287
- //# sourceMappingURL=chunk-MQQLYWZZ.js.map
288
- //# sourceMappingURL=chunk-MQQLYWZZ.js.map
287
+ //# sourceMappingURL=chunk-GNS2FGPC.js.map
288
+ //# sourceMappingURL=chunk-GNS2FGPC.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/streaming/adapters/index.ts"],"names":[],"mappings":"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","file":"chunk-GNS2FGPC.js","sourcesContent":["/**\n * @flight-framework/core - Multi-Framework Streaming Adapters\n * \n * Streaming SSR adapters for React, Vue, Svelte, Solid, and HTMX.\n * Uses dependency injection pattern for optional framework dependencies.\n * \n * Best Practices 2026:\n * - Dependency injection for optional peer dependencies\n * - Support both Node.js and Edge runtimes \n * - Progressive hydration support\n * - Error boundary integration\n * \n * @example\n * ```typescript\n * // React adapter with your imports\n * import { renderToReadableStream } from 'react-dom/server';\n * \n * const adapter = createReactStreamAdapter({\n * renderToReadableStream,\n * bootstrapModules: ['/client.js'],\n * });\n * ```\n */\n\nimport type { StreamingRenderOptions, StreamingRenderResult } from '../index.js';\n\n// ============================================================================\n// Common Types\n// ============================================================================\n\n/**\n * Framework-specific streaming adapter\n */\nexport interface StreamingAdapter<TComponent = unknown> {\n /** Adapter name */\n readonly name: string;\n /** Framework version support */\n readonly framework: string;\n /** Runtime support */\n readonly runtime: 'universal' | 'node' | 'edge';\n\n /**\n * Create a streaming response from a component\n */\n stream(\n component: TComponent,\n options?: StreamingRenderOptions\n ): Promise<StreamingRenderResult>;\n\n /**\n * Render to static string (for comparison/fallback)\n */\n renderToString?(component: TComponent): Promise<string>;\n}\n\n/**\n * Common adapter options\n */\nexport interface AdapterOptions {\n /** Enable streaming (default: true) */\n streaming?: boolean;\n /** Scripts to bootstrap on client */\n bootstrapScripts?: string[];\n /** Modules to bootstrap on client */\n bootstrapModules?: string[];\n /** Error handling strategy */\n onError?: (error: Error) => void;\n /** Shell ready callback */\n onShellReady?: () => void;\n /** All content ready callback */\n onAllReady?: () => void;\n}\n\n// ============================================================================\n// React Adapter (Dependency Injection Pattern)\n// ============================================================================\n\n/**\n * React streaming adapter options with required dependencies\n */\nexport interface ReactAdapterOptions extends AdapterOptions {\n /** React's renderToReadableStream (for Edge) */\n renderToReadableStream?: (\n element: unknown,\n options?: {\n bootstrapScripts?: string[];\n bootstrapModules?: string[];\n identifierPrefix?: string;\n signal?: AbortSignal;\n onError?: (error: unknown) => void;\n }\n ) => Promise<ReadableStream<Uint8Array> & { allReady: Promise<void> }>;\n\n /** React's renderToString (for static fallback) */\n renderToString?: (element: unknown) => string;\n\n /** Custom identifier prefix */\n identifierPrefix?: string;\n /** Abort signal */\n signal?: AbortSignal;\n}\n\n/**\n * Create a React streaming adapter\n * \n * @example\n * ```typescript\n * import { renderToReadableStream, renderToString } from 'react-dom/server';\n * \n * const adapter = createReactStreamAdapter({\n * renderToReadableStream,\n * renderToString,\n * bootstrapModules: ['/client.js'],\n * });\n * \n * const result = await adapter.stream(<App />);\n * ```\n */\nexport function createReactStreamAdapter(options: ReactAdapterOptions): StreamingAdapter {\n if (!options.renderToReadableStream) {\n throw new Error(\n '[Flight] createReactStreamAdapter requires renderToReadableStream. ' +\n 'Import it from react-dom/server and pass it in options.'\n );\n }\n\n return {\n name: 'react',\n framework: 'react@18+',\n runtime: 'edge',\n\n async stream(component, streamOptions = {}) {\n const mergedOptions = { ...options, ...streamOptions };\n\n let resolveShell: () => void;\n let resolveAll: () => void;\n const shellReady = new Promise<void>((r) => { resolveShell = r; });\n const allReady = new Promise<void>((r) => { resolveAll = r; });\n\n const stream = await options.renderToReadableStream!(component, {\n bootstrapScripts: mergedOptions.bootstrapScripts,\n bootstrapModules: mergedOptions.bootstrapModules,\n identifierPrefix: mergedOptions.identifierPrefix,\n signal: mergedOptions.signal,\n onError: (error: unknown) => {\n mergedOptions.onError?.(error as Error);\n },\n });\n\n // Shell is ready when stream is created\n resolveShell!();\n mergedOptions.onShellReady?.();\n\n // Track all ready via stream completion\n stream.allReady.then(() => {\n resolveAll!();\n mergedOptions.onAllReady?.();\n });\n\n return {\n stream,\n abort: () => { /* stream handles abort via signal */ },\n shellReady,\n allReady,\n };\n },\n\n async renderToString(component) {\n if (!options.renderToString) {\n throw new Error('[Flight] renderToString not provided to adapter');\n }\n return options.renderToString(component);\n },\n };\n}\n\n// ============================================================================\n// Vue Adapter (Dependency Injection Pattern)\n// ============================================================================\n\n/**\n * Vue streaming adapter options\n */\nexport interface VueAdapterOptions extends AdapterOptions {\n /** Vue's renderToWebStream */\n renderToWebStream?: (app: unknown, context?: Record<string, unknown>) => ReadableStream;\n /** Vue's renderToString */\n renderToString?: (app: unknown) => Promise<string>;\n /** Vue app context */\n context?: Record<string, unknown>;\n}\n\n/**\n * Create a Vue 3 streaming adapter\n * \n * @example\n * ```typescript\n * import { renderToWebStream, renderToString } from 'vue/server-renderer';\n * \n * const adapter = createVueStreamAdapter({\n * renderToWebStream,\n * renderToString,\n * });\n * \n * const result = await adapter.stream(createSSRApp(App));\n * ```\n */\nexport function createVueStreamAdapter(options: VueAdapterOptions): StreamingAdapter {\n if (!options.renderToWebStream) {\n throw new Error(\n '[Flight] createVueStreamAdapter requires renderToWebStream. ' +\n 'Import it from vue/server-renderer and pass it in options.'\n );\n }\n\n return {\n name: 'vue',\n framework: 'vue@3+',\n runtime: 'universal',\n\n async stream(app, streamOptions = {}) {\n const mergedOptions = { ...options, ...streamOptions };\n\n let resolveShell: () => void;\n let resolveAll: () => void;\n const shellReady = new Promise<void>((r) => { resolveShell = r; });\n const allReady = new Promise<void>((r) => { resolveAll = r; });\n\n try {\n const stream = options.renderToWebStream!(app, mergedOptions.context);\n\n // Vue streams shell immediately\n resolveShell!();\n mergedOptions.onShellReady?.();\n\n // Wrap to detect completion\n const reader = stream.getReader();\n\n const wrappedStream = new ReadableStream<Uint8Array>({\n async pull(controller) {\n const { done, value } = await reader.read();\n if (done) {\n resolveAll!();\n mergedOptions.onAllReady?.();\n controller.close();\n } else {\n controller.enqueue(value);\n }\n },\n });\n\n return {\n stream: wrappedStream,\n abort: () => reader.cancel(),\n shellReady,\n allReady,\n };\n } catch (error) {\n mergedOptions.onError?.(error as Error);\n throw error;\n }\n },\n\n async renderToString(app) {\n if (!options.renderToString) {\n throw new Error('[Flight] renderToString not provided to adapter');\n }\n return options.renderToString(app);\n },\n };\n}\n\n// ============================================================================\n// Solid Adapter (Dependency Injection Pattern)\n// ============================================================================\n\n/**\n * Solid streaming adapter options\n */\nexport interface SolidAdapterOptions extends AdapterOptions {\n /** Solid's renderToStream */\n renderToStream?: (\n fn: () => unknown,\n options?: {\n nonce?: string;\n onCompleteShell?: () => void;\n onCompleteAll?: () => void;\n }\n ) => { pipeTo: (writable: WritableStream) => void };\n /** Solid's renderToString */\n renderToString?: (fn: () => unknown) => string;\n /** Nonce for CSP */\n nonce?: string;\n}\n\n/**\n * Create a Solid.js streaming adapter\n * \n * @example\n * ```typescript\n * import { renderToStream, renderToString } from 'solid-js/web';\n * \n * const adapter = createSolidStreamAdapter({\n * renderToStream,\n * renderToString,\n * });\n * \n * const result = await adapter.stream(() => <App />);\n * ```\n */\nexport function createSolidStreamAdapter(options: SolidAdapterOptions): StreamingAdapter {\n if (!options.renderToStream) {\n throw new Error(\n '[Flight] createSolidStreamAdapter requires renderToStream. ' +\n 'Import it from solid-js/web and pass it in options.'\n );\n }\n\n return {\n name: 'solid',\n framework: 'solid-js@1+',\n runtime: 'universal',\n\n async stream(component, streamOptions = {}) {\n const mergedOptions = { ...options, ...streamOptions };\n\n let resolveShell: () => void;\n let resolveAll: () => void;\n const shellReady = new Promise<void>((r) => { resolveShell = r; });\n const allReady = new Promise<void>((r) => { resolveAll = r; });\n\n try {\n const { readable, writable } = new TransformStream<Uint8Array, Uint8Array>();\n\n // Solid's renderToStream with async options\n const result = options.renderToStream!(component as () => unknown, {\n nonce: mergedOptions.nonce,\n onCompleteShell: () => {\n resolveShell!();\n mergedOptions.onShellReady?.();\n },\n onCompleteAll: () => {\n resolveAll!();\n mergedOptions.onAllReady?.();\n },\n });\n\n // Pipe to transform stream\n result.pipeTo(writable);\n\n return {\n stream: readable,\n abort: () => writable.abort(),\n shellReady,\n allReady,\n };\n } catch (error) {\n mergedOptions.onError?.(error as Error);\n throw error;\n }\n },\n\n async renderToString(component) {\n if (!options.renderToString) {\n throw new Error('[Flight] renderToString not provided to adapter');\n }\n return options.renderToString(component as () => unknown);\n },\n };\n}\n\n// ============================================================================\n// Svelte Adapter (Dependency Injection Pattern)\n// ============================================================================\n\n/**\n * Svelte streaming adapter options\n */\nexport interface SvelteAdapterOptions extends AdapterOptions {\n /** Svelte's render function */\n render?: (\n component: unknown,\n options?: { props?: Record<string, unknown> }\n ) => { body: string; head?: string };\n /** Props for the component */\n props?: Record<string, unknown>;\n}\n\n/**\n * Create a Svelte 5 streaming adapter\n * Note: Svelte's SSR is primarily string-based, streaming is simulated\n * \n * @example\n * ```typescript\n * import { render } from 'svelte/server';\n * \n * const adapter = createSvelteStreamAdapter({\n * render,\n * props: { name: 'World' },\n * });\n * \n * const result = await adapter.stream(App);\n * ```\n */\nexport function createSvelteStreamAdapter(options: SvelteAdapterOptions): StreamingAdapter {\n if (!options.render) {\n throw new Error(\n '[Flight] createSvelteStreamAdapter requires render. ' +\n 'Import it from svelte/server and pass it in options.'\n );\n }\n\n return {\n name: 'svelte',\n framework: 'svelte@5+',\n runtime: 'universal',\n\n async stream(component, streamOptions = {}) {\n const mergedOptions = { ...options, ...streamOptions };\n\n let resolveShell: () => void;\n let resolveAll: () => void;\n const shellReady = new Promise<void>((r) => { resolveShell = r; });\n const allReady = new Promise<void>((r) => { resolveAll = r; });\n\n try {\n // Render to string first\n const result = options.render!(component, { props: mergedOptions.props || {} });\n const html = result.body;\n\n // Convert to stream\n const encoder = new TextEncoder();\n const stream = new ReadableStream<Uint8Array>({\n start(controller) {\n // Send head/css first\n if (result.head) {\n controller.enqueue(encoder.encode(result.head));\n }\n\n resolveShell!();\n mergedOptions.onShellReady?.();\n\n // Send body\n controller.enqueue(encoder.encode(html));\n\n resolveAll!();\n mergedOptions.onAllReady?.();\n controller.close();\n },\n });\n\n return {\n stream,\n abort: () => { },\n shellReady,\n allReady,\n };\n } catch (error) {\n mergedOptions.onError?.(error as Error);\n throw error;\n }\n },\n\n async renderToString(component) {\n const result = options.render!(component, { props: options?.props || {} });\n return result.body;\n },\n };\n}\n\n// ============================================================================\n// HTMX Streaming Adapter (SSE-based)\n// ============================================================================\n\n/**\n * HTMX streaming adapter options\n */\nexport interface HTMXAdapterOptions extends AdapterOptions {\n /** Event name for SSE */\n eventName?: string;\n /** Retry interval for SSE */\n retryMs?: number;\n}\n\n/**\n * Create an HTMX SSE streaming adapter\n * Uses Server-Sent Events for progressive updates\n * \n * @example\n * ```typescript\n * const adapter = createHTMXStreamAdapter({\n * eventName: 'update',\n * retryMs: 3000,\n * });\n * \n * const result = await adapter.stream(['<div>Part 1</div>', '<div>Part 2</div>']);\n * ```\n */\nexport function createHTMXStreamAdapter(options?: HTMXAdapterOptions): StreamingAdapter<string[]> {\n return {\n name: 'htmx',\n framework: 'htmx@2+',\n runtime: 'universal',\n\n async stream(htmlChunks, streamOptions = {}) {\n const mergedOptions = { ...options, ...streamOptions };\n const eventName = mergedOptions.eventName || 'message';\n const retryMs = mergedOptions.retryMs || 3000;\n\n let resolveShell: () => void;\n let resolveAll: () => void;\n const shellReady = new Promise<void>((r) => { resolveShell = r; });\n const allReady = new Promise<void>((r) => { resolveAll = r; });\n\n const encoder = new TextEncoder();\n let chunkIndex = 0;\n\n const stream = new ReadableStream<Uint8Array>({\n start(controller) {\n // Send retry configuration\n controller.enqueue(encoder.encode(`retry: ${retryMs}\\n\\n`));\n resolveShell!();\n mergedOptions.onShellReady?.();\n },\n\n async pull(controller) {\n if (chunkIndex >= htmlChunks.length) {\n resolveAll!();\n mergedOptions.onAllReady?.();\n controller.close();\n return;\n }\n\n const chunk = htmlChunks[chunkIndex++];\n const sseData = `event: ${eventName}\\ndata: ${JSON.stringify(chunk)}\\n\\n`;\n controller.enqueue(encoder.encode(sseData));\n },\n });\n\n return {\n stream,\n abort: () => { },\n shellReady,\n allReady,\n };\n },\n };\n}\n\n// ============================================================================\n// Adapter Factory\n// ============================================================================\n\nexport type FrameworkType = 'react' | 'vue' | 'solid' | 'svelte' | 'htmx';\n\n/**\n * Create a streaming adapter for any supported framework\n * Note: For react, vue, solid, svelte you need to pass the required dependencies\n */\nexport function createStreamAdapter(\n framework: FrameworkType,\n options?: AdapterOptions & Record<string, unknown>\n): StreamingAdapter {\n switch (framework) {\n case 'react':\n return createReactStreamAdapter(options as ReactAdapterOptions);\n case 'vue':\n return createVueStreamAdapter(options as VueAdapterOptions);\n case 'solid':\n return createSolidStreamAdapter(options as SolidAdapterOptions);\n case 'svelte':\n return createSvelteStreamAdapter(options as SvelteAdapterOptions);\n case 'htmx':\n return createHTMXStreamAdapter(options as HTMXAdapterOptions);\n default:\n throw new Error(`[Flight] Unknown framework: ${framework}`);\n }\n}\n"]}
@@ -218,5 +218,5 @@ function markAsClientComponent(component, moduleId, exportName = "default") {
218
218
  }
219
219
 
220
220
  export { createReactAdapter, createReactConsumer, markAsClientComponent };
221
- //# sourceMappingURL=chunk-TASAT7KB.js.map
222
- //# sourceMappingURL=chunk-TASAT7KB.js.map
221
+ //# sourceMappingURL=chunk-HNPO6LFW.js.map
222
+ //# sourceMappingURL=chunk-HNPO6LFW.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/rsc/adapters/react.ts"],"names":[],"mappings":"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","file":"chunk-HNPO6LFW.js","sourcesContent":["/**\n * @flight-framework/core - React UI Adapter\n * \n * Adapter for using React with Flight Server Components.\n * Enables Flight to render React elements without tight coupling.\n * \n * @module @flight-framework/core/rsc/adapters/react\n */\n\nimport type { UIAdapter, ElementTypeInfo } from '../renderer.js';\n\n// ============================================================================\n// React Symbols\n// ============================================================================\n\n// React internal symbols (stable across versions)\nconst REACT_ELEMENT_TYPE = Symbol.for('react.element');\nconst REACT_FRAGMENT_TYPE = Symbol.for('react.fragment');\nconst REACT_PROVIDER_TYPE = Symbol.for('react.provider');\nconst REACT_CONTEXT_TYPE = Symbol.for('react.context');\nconst REACT_FORWARD_REF_TYPE = Symbol.for('react.forward_ref');\nconst REACT_SUSPENSE_TYPE = Symbol.for('react.suspense');\nconst REACT_MEMO_TYPE = Symbol.for('react.memo');\nconst REACT_LAZY_TYPE = Symbol.for('react.lazy');\n\n// Flight reference symbols\nconst CLIENT_REFERENCE = Symbol.for('flight.client.reference');\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * React element shape (minimal interface)\n */\ninterface ReactElement {\n $$typeof: symbol;\n type: unknown;\n key: string | number | null;\n ref: unknown;\n props: Record<string, unknown>;\n _owner: unknown;\n}\n\n// ============================================================================\n// Adapter Implementation\n// ============================================================================\n\n/**\n * Create React UI Adapter\n * \n * @example\n * ```typescript\n * import { createReactAdapter } from '@flight-framework/core/rsc/adapters/react';\n * import { renderToString } from 'react-dom/server';\n * import * as React from 'react';\n * \n * const adapter = createReactAdapter({\n * React,\n * renderToString,\n * });\n * \n * const renderer = createRenderer(adapter);\n * ```\n */\nexport function createReactAdapter(deps?: {\n /** React module (optional - for SSR) */\n React?: {\n isValidElement: (value: unknown) => boolean;\n Children: { toArray: (children: unknown) => unknown[] };\n Fragment: symbol;\n Suspense: unknown;\n };\n /** renderToString function (optional - for SSR fallbacks) */\n renderToString?: (element: unknown) => string;\n}): UIAdapter {\n const { React, renderToString } = deps || {};\n\n return {\n name: 'react',\n\n isElement(value: unknown): boolean {\n if (React) {\n return React.isValidElement(value);\n }\n // Fallback: check for $$typeof\n return (\n typeof value === 'object' &&\n value !== null &&\n '$$typeof' in value &&\n (value as ReactElement).$$typeof === REACT_ELEMENT_TYPE\n );\n },\n\n getElementType(element: unknown): ElementTypeInfo {\n const el = element as ReactElement;\n const type = el.type;\n\n // String = host element (div, span, etc.)\n if (typeof type === 'string') {\n return { kind: 'host', tag: type };\n }\n\n // Symbol types\n if (typeof type === 'symbol') {\n if (type === REACT_FRAGMENT_TYPE || type === (React?.Fragment as symbol)) {\n return { kind: 'fragment' };\n }\n if (type === REACT_SUSPENSE_TYPE || (React?.Suspense && type === (React.Suspense as unknown as symbol))) {\n return {\n kind: 'suspense',\n fallback: el.props.fallback\n };\n }\n if (type === REACT_PROVIDER_TYPE) {\n return { kind: 'provider', value: el.props.value };\n }\n if (type === REACT_CONTEXT_TYPE) {\n return { kind: 'context' };\n }\n return { kind: 'null' };\n }\n\n // Object types (memo, lazy, forwardRef)\n if (typeof type === 'object' && type !== null) {\n const typeObj = type as { $$typeof?: symbol; type?: unknown; render?: unknown };\n\n if (typeObj.$$typeof === REACT_MEMO_TYPE) {\n // Unwrap memo\n return this.getElementType({ ...el, type: typeObj.type });\n }\n\n if (typeObj.$$typeof === REACT_LAZY_TYPE) {\n return { kind: 'component', fn: () => null, name: 'Lazy' };\n }\n\n if (typeObj.$$typeof === REACT_FORWARD_REF_TYPE && typeObj.render) {\n return {\n kind: 'component',\n fn: typeObj.render as (props: Record<string, unknown>) => unknown,\n name: 'ForwardRef'\n };\n }\n\n // Check for Suspense object\n if ('$$typeof' in typeObj &&\n (typeObj.$$typeof === REACT_SUSPENSE_TYPE)) {\n return { kind: 'suspense', fallback: el.props.fallback };\n }\n }\n\n // Function component\n if (typeof type === 'function') {\n const fn = type as ((props: Record<string, unknown>) => unknown) & {\n displayName?: string;\n name?: string;\n };\n return {\n kind: 'component',\n fn,\n name: fn.displayName || fn.name || 'Component'\n };\n }\n\n return { kind: 'null' };\n },\n\n getProps(element: unknown): Record<string, unknown> {\n return (element as ReactElement).props || {};\n },\n\n getChildren(element: unknown): unknown[] {\n const props = (element as ReactElement).props;\n const children = props?.children;\n\n if (children === undefined || children === null) {\n return [];\n }\n\n if (React?.Children) {\n return React.Children.toArray(children);\n }\n\n // Fallback array handling\n if (Array.isArray(children)) {\n return children.flat();\n }\n\n return [children];\n },\n\n getKey(element: unknown): string | number | undefined {\n const key = (element as ReactElement).key;\n return key !== null ? key : undefined;\n },\n\n isClientBoundary(component: unknown): boolean {\n if (typeof component !== 'function') return false;\n\n const comp = component as {\n $$typeof?: symbol;\n __flight_client?: boolean;\n };\n\n // Check for Flight client marker\n if (comp.__flight_client === true) return true;\n\n // Check for client reference symbol\n if (comp.$$typeof === CLIENT_REFERENCE) return true;\n\n return false;\n },\n\n createElement(\n component: (props: Record<string, unknown>) => unknown,\n props: Record<string, unknown>\n ): unknown {\n // Create a React element using the internal structure\n // This is framework-agnostic from the caller's perspective\n return {\n $$typeof: REACT_ELEMENT_TYPE,\n type: component,\n key: null,\n ref: null,\n props,\n _owner: null,\n };\n },\n\n async renderToString(element: unknown): Promise<string> {\n if (renderToString) {\n return renderToString(element);\n }\n throw new Error(\n 'renderToString not provided. Pass it when creating the adapter: ' +\n 'createReactAdapter({ renderToString })'\n );\n },\n };\n}\n\n// ============================================================================\n// React Client Consumer\n// ============================================================================\n\n/**\n * Opciones para el consumer de React\n */\nexport interface ReactConsumerOptions {\n /** Registry de client components */\n registry?: Map<string, () => Promise<unknown>>;\n /** Callback when hydration completes */\n onHydrate?: (id: string) => void;\n}\n\n/**\n * Create a React client-side consumer for Flight payloads\n * \n * This reconstructs React elements from Flight chunks on the client.\n */\nexport function createReactConsumer(deps: {\n React: {\n createElement: (type: unknown, props?: unknown, ...children: unknown[]) => unknown;\n Suspense: unknown;\n Fragment: unknown;\n lazy: (factory: () => Promise<{ default: unknown }>) => unknown;\n };\n}, options: ReactConsumerOptions = {}) {\n const { React } = deps;\n const { registry = new Map() } = options;\n\n return {\n /**\n * Register a client component\n */\n register(id: string, loader: () => Promise<unknown>): void {\n registry.set(id, loader);\n },\n\n /**\n * Convert Flight elements to React elements\n */\n toReactElement(element: import('../payload.js').FlightElement): unknown {\n switch (element.$$type) {\n case 'null':\n return null;\n\n case 'text':\n return element.value;\n\n case 'host': {\n const children = element.children.map(c => this.toReactElement(c));\n return React.createElement(\n element.tag,\n { ...element.props, key: element.key },\n ...children\n );\n }\n\n case 'fragment': {\n const children = element.children.map(c => this.toReactElement(c));\n return React.createElement(React.Fragment, null, ...children);\n }\n\n case 'suspense': {\n const fallback = this.toReactElement(element.fallback);\n const children = element.children.map(c => this.toReactElement(c));\n return React.createElement(\n React.Suspense,\n { fallback },\n ...children\n );\n }\n\n case 'client': {\n // Get loader from registry\n const loader = registry.get(element.ref);\n if (!loader) {\n console.warn(`[Flight] Client component not registered: ${element.ref}`);\n // Return SSR fallback if available\n if (element.ssr) {\n return React.createElement('div', {\n dangerouslySetInnerHTML: { __html: element.ssr }\n });\n }\n return null;\n }\n\n // Create lazy component\n const LazyComponent = React.lazy(async () => {\n const mod = await loader() as { default?: unknown };\n return { default: mod.default ?? mod };\n });\n\n return React.createElement(LazyComponent);\n }\n\n case 'lazy': {\n // This is a pending chunk - render fallback\n if (element.fallback) {\n return this.toReactElement(element.fallback);\n }\n return React.createElement('div', { 'data-flight-pending': element.id });\n }\n\n default:\n return null;\n }\n },\n\n /**\n * Process Flight chunks and build React tree\n */\n processChunks(chunks: import('../payload.js').FlightChunk[]): unknown {\n // Find root chunk\n const rootChunk = chunks.find(c => c.type === 'S' && c.id === 'root');\n if (!rootChunk || rootChunk.type !== 'S') {\n throw new Error('[Flight] No root chunk found in payload');\n }\n\n // Register all client references\n for (const chunk of chunks) {\n if (chunk.type === 'C') {\n // Default registry - lazy load via dynamic import\n if (!registry.has(chunk.id)) {\n registry.set(chunk.id, () => import(/* webpackIgnore: true */ chunk.module));\n }\n }\n }\n\n return this.toReactElement(rootChunk.tree);\n }\n };\n}\n\n// ============================================================================\n// Utility Types\n// ============================================================================\n\n/**\n * Type helper for React Server Component\n */\nexport type ReactServerComponent<P = Record<string, unknown>> = (\n props: P,\n ctx: import('../context.js').ServerContext\n) => Promise<ReturnType<typeof import('react').createElement>> | ReturnType<typeof import('react').createElement>;\n\n/**\n * Mark a component as a client component (for use without bundler transform)\n */\nexport function markAsClientComponent<T extends (...args: unknown[]) => unknown>(\n component: T,\n moduleId: string,\n exportName = 'default'\n): T {\n const marked = component as T & {\n $$typeof: symbol;\n __flight_client: boolean;\n __flight_module: string;\n __flight_export: string;\n };\n\n marked.$$typeof = CLIENT_REFERENCE;\n marked.__flight_client = true;\n marked.__flight_module = moduleId;\n marked.__flight_export = exportName;\n\n return marked;\n}\n"]}
@@ -307,5 +307,5 @@ function compose(...middlewares) {
307
307
  }
308
308
 
309
309
  export { compose, compress, cors, createContextFromRequest, createMiddlewareChain, createResponseFromContext, logger, securityHeaders };
310
- //# sourceMappingURL=chunk-KWFX6WHG.js.map
311
- //# sourceMappingURL=chunk-KWFX6WHG.js.map
310
+ //# sourceMappingURL=chunk-JFUKVWSO.js.map
311
+ //# sourceMappingURL=chunk-JFUKVWSO.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/middleware/index.ts"],"names":[],"mappings":"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","file":"chunk-JFUKVWSO.js","sourcesContent":["/**\n * Flight Middleware - Composable request/response handlers\n * \n * Framework-agnostic middleware system inspired by Koa/Hono.\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/** Request context passed through middleware chain */\nexport interface MiddlewareContext {\n /** Request URL */\n url: URL;\n /** Request method */\n method: string;\n /** Request headers */\n headers: Headers;\n /** URL parameters from routing */\n params: Record<string, string | string[]>;\n /** Query parameters */\n query: URLSearchParams;\n /** Parsed request body (if any) */\n body?: unknown;\n /** Local data shared between middleware */\n locals: Record<string, unknown>;\n /** Original request (platform-specific) */\n request?: Request;\n\n // Response building\n /** Response status code */\n status: number;\n /** Response headers */\n responseHeaders: Headers;\n /** Response body */\n responseBody?: BodyInit | null;\n}\n\n/** Next function to call the next middleware */\nexport type MiddlewareNext = () => Promise<void>;\n\n/** Middleware function signature */\nexport type Middleware = (\n ctx: MiddlewareContext,\n next: MiddlewareNext\n) => Promise<void> | void;\n\n/** Middleware with optional path matching */\nexport interface MiddlewareDefinition {\n /** Path pattern to match (undefined = match all) */\n path?: string | RegExp;\n /** HTTP methods to match (undefined = match all) */\n methods?: string[];\n /** The middleware function */\n handler: Middleware;\n}\n\n// ============================================================================\n// Middleware Chain\n// ============================================================================\n\nexport interface MiddlewareChain {\n /** Add middleware to the chain */\n use(middleware: Middleware): MiddlewareChain;\n use(path: string, middleware: Middleware): MiddlewareChain;\n use(definition: MiddlewareDefinition): MiddlewareChain;\n\n /** Execute the middleware chain */\n execute(ctx: MiddlewareContext): Promise<void>;\n\n /** Get all middleware definitions */\n middlewares(): MiddlewareDefinition[];\n}\n\n/**\n * Create a new middleware chain\n */\nexport function createMiddlewareChain(): MiddlewareChain {\n const stack: MiddlewareDefinition[] = [];\n\n function use(\n pathOrMiddleware: string | Middleware | MiddlewareDefinition,\n maybeMiddleware?: Middleware\n ): MiddlewareChain {\n if (typeof pathOrMiddleware === 'function') {\n // use(middleware)\n stack.push({ handler: pathOrMiddleware });\n } else if (typeof pathOrMiddleware === 'string' && maybeMiddleware) {\n // use(path, middleware)\n stack.push({ path: pathOrMiddleware, handler: maybeMiddleware });\n } else if (typeof pathOrMiddleware === 'object') {\n // use(definition)\n stack.push(pathOrMiddleware);\n }\n return chain;\n }\n\n async function execute(ctx: MiddlewareContext): Promise<void> {\n let index = -1;\n\n async function dispatch(i: number): Promise<void> {\n if (i <= index) {\n throw new Error('next() called multiple times');\n }\n index = i;\n\n if (i >= stack.length) {\n return;\n }\n\n const definition = stack[i];\n if (!definition) {\n return dispatch(i + 1);\n }\n\n // Check if middleware should run\n if (!shouldRun(definition, ctx)) {\n return dispatch(i + 1);\n }\n\n await definition.handler(ctx, () => dispatch(i + 1));\n }\n\n await dispatch(0);\n }\n\n const chain: MiddlewareChain = {\n use: use as MiddlewareChain['use'],\n execute,\n middlewares: () => [...stack],\n };\n\n return chain;\n}\n\n/**\n * Check if a middleware should run for the given context\n */\nfunction shouldRun(def: MiddlewareDefinition, ctx: MiddlewareContext): boolean {\n // Check method\n if (def.methods && !def.methods.includes(ctx.method.toUpperCase())) {\n return false;\n }\n\n // Check path\n if (def.path) {\n const path = ctx.url.pathname;\n\n if (typeof def.path === 'string') {\n // Simple path matching (supports wildcards)\n if (def.path.endsWith('*')) {\n const prefix = def.path.slice(0, -1);\n if (!path.startsWith(prefix)) {\n return false;\n }\n } else if (def.path !== path) {\n return false;\n }\n } else if (def.path instanceof RegExp) {\n if (!def.path.test(path)) {\n return false;\n }\n }\n }\n\n return true;\n}\n\n// ============================================================================\n// Built-in Middleware Factories\n// ============================================================================\n\n/**\n * CORS middleware factory\n */\nexport function cors(options: {\n origin?: string | string[] | ((origin: string) => boolean);\n methods?: string[];\n headers?: string[];\n credentials?: boolean;\n maxAge?: number;\n} = {}): Middleware {\n const {\n origin = '*',\n methods = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'OPTIONS'],\n headers = ['Content-Type', 'Authorization'],\n credentials = false,\n maxAge = 86400,\n } = options;\n\n return async (ctx, next) => {\n const requestOrigin = ctx.headers.get('Origin') || '';\n\n // Determine allowed origin\n let allowedOrigin: string | null = null;\n if (origin === '*') {\n allowedOrigin = '*';\n } else if (typeof origin === 'string') {\n allowedOrigin = origin;\n } else if (Array.isArray(origin)) {\n if (origin.includes(requestOrigin)) {\n allowedOrigin = requestOrigin;\n }\n } else if (typeof origin === 'function') {\n if (origin(requestOrigin)) {\n allowedOrigin = requestOrigin;\n }\n }\n\n if (allowedOrigin) {\n ctx.responseHeaders.set('Access-Control-Allow-Origin', allowedOrigin);\n ctx.responseHeaders.set('Access-Control-Allow-Methods', methods.join(', '));\n ctx.responseHeaders.set('Access-Control-Allow-Headers', headers.join(', '));\n\n if (credentials) {\n ctx.responseHeaders.set('Access-Control-Allow-Credentials', 'true');\n }\n\n if (maxAge) {\n ctx.responseHeaders.set('Access-Control-Max-Age', String(maxAge));\n }\n }\n\n // Handle preflight\n if (ctx.method === 'OPTIONS') {\n ctx.status = 204;\n ctx.responseBody = null;\n return;\n }\n\n await next();\n };\n}\n// ============================================================================\n// Logger Types and Constants\n// ============================================================================\n\n/** Log levels in order of verbosity */\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error' | 'silent';\n\n/** Log format types */\nexport type LogFormat = 'pretty' | 'json' | 'combined' | 'common' | 'short' | 'tiny';\n\n/** Log entry structure for JSON format */\nexport interface LogEntry {\n timestamp: string;\n level: LogLevel;\n method: string;\n path: string;\n status: number;\n duration: number;\n userAgent?: string;\n ip?: string;\n [key: string]: unknown;\n}\n\n/** Custom log writer function */\nexport type LogWriter = (entry: LogEntry, formatted: string) => void;\n\n/** Logger options */\nexport interface LoggerOptions {\n /** Minimum log level (default: 'info') */\n level?: LogLevel;\n /** Output format (default: 'pretty') */\n format?: LogFormat;\n /** Skip logging for certain requests */\n skip?: (ctx: MiddlewareContext) => boolean;\n /** Custom log writer (replaces console output) */\n writer?: LogWriter;\n /** Include request headers in logs */\n includeHeaders?: boolean;\n /** Colorize output (only for 'pretty' format, default: true) */\n colorize?: boolean;\n}\n\nconst LOG_LEVEL_PRIORITY: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n silent: 4,\n};\n\nconst LOG_LEVEL_COLORS: Record<LogLevel, string> = {\n debug: '\\x1b[36m', // Cyan\n info: '\\x1b[32m', // Green\n warn: '\\x1b[33m', // Yellow\n error: '\\x1b[31m', // Red\n silent: '',\n};\n\nconst STATUS_COLORS: Record<string, string> = {\n '2': '\\x1b[32m', // Green for 2xx\n '3': '\\x1b[36m', // Cyan for 3xx\n '4': '\\x1b[33m', // Yellow for 4xx\n '5': '\\x1b[31m', // Red for 5xx\n};\n\nconst RESET = '\\x1b[0m';\nconst DIM = '\\x1b[2m';\n\n/**\n * Professional logger middleware with configurable levels\n * \n * @example\n * ```typescript\n * // Basic usage\n * server.use(logger());\n * \n * // With level control\n * server.use(logger({ level: 'warn' })); // Only warn and error\n * \n * // JSON format for production/observability\n * server.use(logger({ format: 'json', level: 'info' }));\n * \n * // Custom writer (e.g., for external logging service)\n * server.use(logger({\n * writer: (entry) => myLoggingService.log(entry)\n * }));\n * \n * // Silent in production\n * server.use(logger({ level: process.env.NODE_ENV === 'production' ? 'error' : 'debug' }));\n * ```\n */\nexport function logger(options: LoggerOptions = {}): Middleware {\n const {\n level = 'info',\n format = 'pretty',\n skip,\n writer,\n includeHeaders = false,\n colorize = true,\n } = options;\n\n return async (ctx, next) => {\n // Skip if configured\n if (skip?.(ctx)) {\n return next();\n }\n\n const start = Date.now();\n const startTime = new Date().toISOString();\n\n await next();\n\n const duration = Date.now() - start;\n const status = ctx.status;\n\n // Determine log level based on status\n let logLevel: LogLevel = 'info';\n if (status >= 500) {\n logLevel = 'error';\n } else if (status >= 400) {\n logLevel = 'warn';\n } else if (status >= 300) {\n logLevel = 'info';\n } else {\n logLevel = 'debug';\n }\n\n // Check if we should log based on level\n if (LOG_LEVEL_PRIORITY[logLevel] < LOG_LEVEL_PRIORITY[level]) {\n return;\n }\n\n // Build log entry\n const entry: LogEntry = {\n timestamp: startTime,\n level: logLevel,\n method: ctx.method,\n path: ctx.url.pathname,\n status,\n duration,\n };\n\n // Add optional fields\n const userAgent = ctx.headers.get('user-agent');\n if (userAgent) entry.userAgent = userAgent;\n\n const forwardedFor = ctx.headers.get('x-forwarded-for');\n const ip = forwardedFor || 'unknown';\n entry.ip = ip;\n\n if (includeHeaders) {\n const headers: Record<string, string> = {};\n ctx.headers.forEach((value, key) => {\n if (!key.toLowerCase().includes('authorization')) {\n headers[key] = value;\n }\n });\n entry.headers = headers;\n }\n\n // Format the log line\n let formatted: string;\n\n switch (format) {\n case 'json':\n formatted = JSON.stringify(entry);\n break;\n\n case 'combined':\n formatted = `${ip} - - [${startTime}] \"${ctx.method} ${ctx.url.pathname}\" ${status} - \"${userAgent || '-'}\"`;\n break;\n\n case 'common':\n formatted = `${ip} - - [${startTime}] \"${ctx.method} ${ctx.url.pathname}\" ${status}`;\n break;\n\n case 'short':\n formatted = `${ctx.method} ${ctx.url.pathname} ${status} ${duration}ms`;\n break;\n\n case 'tiny':\n formatted = `${ctx.method} ${ctx.url.pathname} ${status}`;\n break;\n\n case 'pretty':\n default:\n if (colorize) {\n const statusFirstChar = String(status).charAt(0) || '2';\n const statusColor = STATUS_COLORS[statusFirstChar] ?? '';\n const levelColor = LOG_LEVEL_COLORS[logLevel];\n formatted = `${DIM}${startTime}${RESET} ${levelColor}${logLevel.toUpperCase().padEnd(5)}${RESET} ${ctx.method.padEnd(7)} ${ctx.url.pathname} ${statusColor}${status}${RESET} ${DIM}${duration}ms${RESET}`;\n } else {\n formatted = `${startTime} ${logLevel.toUpperCase().padEnd(5)} ${ctx.method.padEnd(7)} ${ctx.url.pathname} ${status} ${duration}ms`;\n }\n break;\n }\n\n // Output\n if (writer) {\n writer(entry, formatted);\n } else {\n switch (logLevel) {\n case 'error':\n console.error(formatted);\n break;\n case 'warn':\n console.warn(formatted);\n break;\n case 'debug':\n console.debug(formatted);\n break;\n default:\n console.log(formatted);\n }\n }\n };\n}\n\n/**\n * Security headers middleware\n */\nexport function securityHeaders(options: {\n contentSecurityPolicy?: string | false;\n xFrameOptions?: 'DENY' | 'SAMEORIGIN' | false;\n xContentTypeOptions?: boolean;\n referrerPolicy?: string;\n permissionsPolicy?: string;\n} = {}): Middleware {\n const {\n contentSecurityPolicy = \"default-src 'self'\",\n xFrameOptions = 'DENY',\n xContentTypeOptions = true,\n referrerPolicy = 'strict-origin-when-cross-origin',\n permissionsPolicy,\n } = options;\n\n return async (ctx, next) => {\n if (contentSecurityPolicy) {\n ctx.responseHeaders.set('Content-Security-Policy', contentSecurityPolicy);\n }\n if (xFrameOptions) {\n ctx.responseHeaders.set('X-Frame-Options', xFrameOptions);\n }\n if (xContentTypeOptions) {\n ctx.responseHeaders.set('X-Content-Type-Options', 'nosniff');\n }\n if (referrerPolicy) {\n ctx.responseHeaders.set('Referrer-Policy', referrerPolicy);\n }\n if (permissionsPolicy) {\n ctx.responseHeaders.set('Permissions-Policy', permissionsPolicy);\n }\n\n await next();\n };\n}\n\n/**\n * Compression middleware (requires implementation in adapter)\n */\nexport function compress(): Middleware {\n return async (ctx, next) => {\n // Mark that compression is desired\n ctx.locals['flight:compress'] = true;\n await next();\n };\n}\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Create a middleware context from a Web Request\n */\nexport function createContextFromRequest(\n request: Request,\n params: Record<string, string | string[]> = {}\n): MiddlewareContext {\n const url = new URL(request.url);\n\n return {\n url,\n method: request.method,\n headers: request.headers,\n params,\n query: url.searchParams,\n locals: {},\n request,\n status: 200,\n responseHeaders: new Headers(),\n };\n}\n\n/**\n * Create a Web Response from middleware context\n */\nexport function createResponseFromContext(ctx: MiddlewareContext): Response {\n return new Response(ctx.responseBody, {\n status: ctx.status,\n headers: ctx.responseHeaders,\n });\n}\n\n/**\n * Compose multiple middleware into one\n */\nexport function compose(...middlewares: Middleware[]): Middleware {\n return async (ctx, next) => {\n let index = -1;\n\n async function dispatch(i: number): Promise<void> {\n if (i <= index) {\n throw new Error('next() called multiple times');\n }\n index = i;\n\n const fn = i === middlewares.length ? next : middlewares[i];\n\n if (fn) {\n await fn(ctx, () => dispatch(i + 1));\n }\n }\n\n await dispatch(0);\n };\n}\n"]}
@@ -1,4 +1,4 @@
1
- import { analyzeModule, hasUseClientDirective, hasUseServerDirective, detectInlineServerActions } from './chunk-PDW5WCMW.js';
1
+ import { analyzeModule, hasUseClientDirective, hasUseServerDirective, detectInlineServerActions } from './chunk-5XHOLZBJ.js';
2
2
 
3
3
  // src/rsc/plugins/rollup.ts
4
4
  function flightRSCRollup(options = {}) {
@@ -296,5 +296,5 @@ function extractExportNames(code) {
296
296
  var rollup_default = flightRSCRollup;
297
297
 
298
298
  export { flightRSCRollup, rollup_default };
299
- //# sourceMappingURL=chunk-NWMJYTMB.js.map
300
- //# sourceMappingURL=chunk-NWMJYTMB.js.map
299
+ //# sourceMappingURL=chunk-LAKHYTHL.js.map
300
+ //# sourceMappingURL=chunk-LAKHYTHL.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/rsc/plugins/rollup.ts"],"names":["exports"],"mappings":"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","file":"chunk-LAKHYTHL.js","sourcesContent":["/**\n * @flight-framework/core - Rollup Plugin for RSC\n * \n * Rollup plugin for Flight Server Components.\n * Transforms 'use client' and 'use server' directives at build time.\n * \n * Philosophy: Zero lock-in - Rollup is optional, user decides bundler.\n * \n * @module @flight-framework/core/rsc/plugins/rollup\n */\n\nimport {\n analyzeModule,\n hasUseClientDirective,\n hasUseServerDirective,\n detectInlineServerActions,\n} from '../boundaries.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Rollup Plugin interface (minimal)\n * We define our own to avoid requiring rollup as dependency\n */\nexport interface RollupPlugin {\n name: string;\n buildStart?: (options: unknown) => void | Promise<void>;\n resolveId?: (\n source: string,\n importer: string | undefined,\n options: { isEntry: boolean }\n ) => string | null | undefined | { id: string; external?: boolean } | Promise<string | null | undefined | { id: string; external?: boolean }>;\n load?: (id: string) => string | null | undefined | { code: string; map?: unknown } | Promise<string | null | undefined | { code: string; map?: unknown }>;\n transform?: (\n code: string,\n id: string\n ) => string | null | undefined | { code: string; map?: unknown } | Promise<string | null | undefined | { code: string; map?: unknown }>;\n generateBundle?: (\n options: unknown,\n bundle: Record<string, unknown>\n ) => void | Promise<void>;\n buildEnd?: (error?: Error) => void | Promise<void>;\n}\n\nexport interface RollupPluginContext {\n emitFile: (file: { type: 'asset' | 'chunk'; fileName?: string; source?: string; id?: string }) => string;\n warn: (message: string) => void;\n error: (message: string) => never;\n}\n\n/**\n * Plugin configuration\n */\nexport interface FlightRollupPluginOptions {\n /** Include patterns (regex or function) */\n include?: RegExp | ((id: string) => boolean);\n\n /** Exclude patterns (regex or function) */\n exclude?: RegExp | ((id: string) => boolean);\n\n /** Server actions endpoint */\n actionsEndpoint?: string;\n\n /** Client manifest filename */\n clientManifest?: string;\n\n /** Server manifest filename */\n serverManifest?: string;\n\n /** Is this for SSR build? */\n ssr?: boolean;\n\n /** Dev mode */\n dev?: boolean;\n}\n\n/**\n * Manifest entry\n */\nexport interface ManifestEntry {\n id: string;\n file: string;\n exports: string[];\n}\n\n// ============================================================================\n// Plugin State\n// ============================================================================\n\ninterface PluginState {\n clientModules: Map<string, ManifestEntry>;\n serverActions: Map<string, ManifestEntry>;\n}\n\n// ============================================================================\n// Plugin Implementation\n// ============================================================================\n\n/**\n * Flight RSC Rollup Plugin\n * \n * @example\n * ```typescript\n * // rollup.config.js\n * import { flightRSCRollup } from '@flight-framework/core/rsc/plugins/rollup';\n * \n * export default {\n * input: 'src/index.tsx',\n * output: { dir: 'dist', format: 'esm' },\n * plugins: [\n * flightRSCRollup({\n * ssr: true,\n * actionsEndpoint: '/_flight/action',\n * }),\n * ],\n * };\n * ```\n */\nexport function flightRSCRollup(options: FlightRollupPluginOptions = {}): RollupPlugin {\n const {\n include = /\\.(tsx?|jsx?)$/,\n exclude = /node_modules/,\n actionsEndpoint = '/_flight/action',\n clientManifest = '.flight/client-manifest.json',\n serverManifest = '.flight/server-manifest.json',\n ssr = false,\n dev = false,\n } = options;\n\n const state: PluginState = {\n clientModules: new Map(),\n serverActions: new Map(),\n };\n\n const shouldInclude = (id: string): boolean => {\n if (typeof include === 'function') return include(id);\n return include.test(id);\n };\n\n const shouldExclude = (id: string): boolean => {\n if (typeof exclude === 'function') return exclude(id);\n return exclude.test(id);\n };\n\n return {\n name: 'flight-rsc',\n\n // ================================================================\n // buildStart: Reset state\n // ================================================================\n buildStart() {\n state.clientModules.clear();\n state.serverActions.clear();\n\n if (dev) {\n console.log(`[Flight RSC Rollup] Build started (SSR: ${ssr})`);\n }\n },\n\n // ================================================================\n // transform: Analyze and transform modules\n // ================================================================\n transform(code: string, id: string) {\n // Skip non-matching files\n if (!shouldInclude(id) || shouldExclude(id)) {\n return null;\n }\n\n // Analyze module\n const analysis = analyzeModule(code, id);\n const moduleId = createModuleId(id);\n\n // Track client modules\n if (analysis.fileDirective === 'client') {\n state.clientModules.set(id, {\n id: moduleId,\n file: id,\n exports: analysis.clientComponents,\n });\n }\n\n // Track server actions\n if (analysis.fileDirective === 'server' || analysis.serverActions.length > 0) {\n state.serverActions.set(id, {\n id: moduleId,\n file: id,\n exports: analysis.serverActions.length > 0\n ? analysis.serverActions\n : extractExportNames(code),\n });\n }\n\n // Transform based on build type\n if (ssr) {\n // SSR build: Transform 'use client' to references\n if (hasUseClientDirective(code)) {\n return {\n code: transformClientForSSR(code, moduleId),\n map: null,\n };\n }\n } else {\n // Client build: Transform 'use server' to RPC calls\n if (hasUseServerDirective(code)) {\n return {\n code: transformServerForClient(code, moduleId, actionsEndpoint),\n map: null,\n };\n }\n\n // Transform inline server actions\n const inlineActions = detectInlineServerActions(code);\n if (inlineActions.length > 0) {\n return {\n code: transformInlineActions(code, moduleId, inlineActions, actionsEndpoint),\n map: null,\n };\n }\n }\n\n return null;\n },\n\n // ================================================================\n // generateBundle: Emit manifests\n // ================================================================\n generateBundle(this: RollupPluginContext) {\n // Emit client manifest\n if (state.clientModules.size > 0) {\n const manifest = Object.fromEntries(state.clientModules);\n this.emitFile({\n type: 'asset',\n fileName: clientManifest,\n source: JSON.stringify(manifest, null, 2),\n });\n }\n\n // Emit server manifest\n if (state.serverActions.size > 0) {\n const manifest = Object.fromEntries(state.serverActions);\n this.emitFile({\n type: 'asset',\n fileName: serverManifest,\n source: JSON.stringify(manifest, null, 2),\n });\n }\n\n if (dev) {\n console.log(`[Flight RSC Rollup] Client modules: ${state.clientModules.size}`);\n console.log(`[Flight RSC Rollup] Server actions: ${state.serverActions.size}`);\n }\n },\n\n // ================================================================\n // buildEnd: Cleanup\n // ================================================================\n buildEnd(error?: Error) {\n if (error && dev) {\n console.error('[Flight RSC Rollup] Build failed:', error.message);\n }\n },\n };\n}\n\n// ============================================================================\n// Transform Functions\n// ============================================================================\n\n/**\n * Transform 'use client' module for SSR build\n */\nfunction transformClientForSSR(code: string, moduleId: string): string {\n const exports = extractExportNames(code);\n\n let transformed = `\n// Flight RSC: Client Component Reference (Rollup)\n// Original module: ${moduleId}\n\nconst __flight_module_id = ${JSON.stringify(moduleId)};\n\n`;\n\n for (const exportName of exports) {\n if (exportName === 'default') {\n transformed += `\nconst __flight_default = Object.assign(\n function() {\n throw new Error('Client Component cannot be called on the server. Module: ' + __flight_module_id);\n },\n {\n $$typeof: Symbol.for('flight.client.reference'),\n $$id: __flight_module_id + '#default',\n $$async: false,\n __flight_client: true,\n __flight_module: __flight_module_id,\n __flight_export: 'default',\n }\n);\nexport default __flight_default;\n`;\n } else {\n transformed += `\nexport const ${exportName} = Object.assign(\n function() {\n throw new Error('Client Component cannot be called on the server. Module: ' + __flight_module_id);\n },\n {\n $$typeof: Symbol.for('flight.client.reference'),\n $$id: __flight_module_id + '#${exportName}',\n $$async: false,\n __flight_client: true,\n __flight_module: __flight_module_id,\n __flight_export: '${exportName}',\n }\n);\n`;\n }\n }\n\n return transformed;\n}\n\n/**\n * Transform 'use server' module for client build\n */\nfunction transformServerForClient(code: string, moduleId: string, endpoint: string): string {\n const exports = extractExportNames(code);\n\n let transformed = `\n// Flight RSC: Server Actions RPC Proxies (Rollup)\n// Original module: ${moduleId}\n\nconst __flight_endpoint = ${JSON.stringify(endpoint)};\nconst __flight_module_id = ${JSON.stringify(moduleId)};\n\nasync function __flight_rpc(actionId, args) {\n const response = await fetch(__flight_endpoint, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'X-Flight-Action': actionId,\n },\n body: JSON.stringify({ actionId, args }),\n });\n \n if (!response.ok) {\n const error = await response.json().catch(() => ({ message: 'Server action failed' }));\n throw new Error(error.message || 'Server action failed');\n }\n \n return response.json();\n}\n\n`;\n\n for (const exportName of exports) {\n const actionId = `${moduleId}#${exportName}`;\n if (exportName === 'default') {\n transformed += `\nexport default async function(...args) {\n return __flight_rpc(${JSON.stringify(actionId)}, args);\n}\n`;\n } else {\n transformed += `\nexport async function ${exportName}(...args) {\n return __flight_rpc(${JSON.stringify(actionId)}, args);\n}\n`;\n }\n }\n\n return transformed;\n}\n\n/**\n * Transform inline server actions\n */\nfunction transformInlineActions(\n code: string,\n moduleId: string,\n actions: string[],\n endpoint: string\n): string {\n let transformed = code;\n\n // Add RPC helper\n const rpcHelper = `\n// Flight RSC: Inline Server Action Helpers (Rollup)\nconst __flight_inline_endpoint = ${JSON.stringify(endpoint)};\nasync function __flight_inline_rpc(actionId, args) {\n const response = await fetch(__flight_inline_endpoint, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json', 'X-Flight-Action': actionId },\n body: JSON.stringify({ actionId, args }),\n });\n if (!response.ok) throw new Error('Server action failed');\n return response.json();\n}\n`;\n\n // Insert after imports\n const lastImportMatch = code.match(/^import\\s.+$/gm);\n if (lastImportMatch) {\n const lastImport = lastImportMatch[lastImportMatch.length - 1] || '';\n const insertPos = code.indexOf(lastImport) + lastImport.length;\n transformed = code.slice(0, insertPos) + '\\n' + rpcHelper + code.slice(insertPos);\n } else {\n transformed = rpcHelper + code;\n }\n\n // Transform action functions\n for (const actionName of actions) {\n const actionId = `${moduleId}#${actionName}`;\n\n const patterns = [\n new RegExp(\n `async\\\\s+function\\\\s+${actionName}\\\\s*\\\\([^)]*\\\\)\\\\s*\\\\{[\\\\s\\\\S]*?['\"]use server['\"][\\\\s\\\\S]*?\\\\}`,\n 'g'\n ),\n new RegExp(\n `const\\\\s+${actionName}\\\\s*=\\\\s*async\\\\s*\\\\([^)]*\\\\)\\\\s*=>\\\\s*\\\\{[\\\\s\\\\S]*?['\"]use server['\"][\\\\s\\\\S]*?\\\\}`,\n 'g'\n ),\n ];\n\n for (const pattern of patterns) {\n transformed = transformed.replace(\n pattern,\n `async function ${actionName}(...args) { return __flight_inline_rpc(${JSON.stringify(actionId)}, args); }`\n );\n }\n }\n\n return transformed;\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\n/**\n * Create module ID from file path\n */\nfunction createModuleId(filePath: string): string {\n let id = filePath.replace(/\\\\/g, '/');\n\n const prefixes = ['/src/', 'src/', 'packages/', '/packages/'];\n for (const prefix of prefixes) {\n const idx = id.indexOf(prefix);\n if (idx !== -1) {\n id = id.slice(idx);\n break;\n }\n }\n\n if (!id.startsWith('/')) {\n id = '/' + id;\n }\n\n return id;\n}\n\n/**\n * Extract export names from source code\n */\nfunction extractExportNames(code: string): string[] {\n const exports: string[] = [];\n\n if (/export\\s+default\\s+/.test(code)) {\n exports.push('default');\n }\n\n const namedPattern = /export\\s+(?:async\\s+)?(?:function|const|let|var|class)\\s+(\\w+)/g;\n let match;\n while ((match = namedPattern.exec(code)) !== null) {\n if (match[1] && match[1] !== 'default') {\n exports.push(match[1]);\n }\n }\n\n const bracketPattern = /export\\s*\\{\\s*([^}]+)\\s*\\}/g;\n while ((match = bracketPattern.exec(code)) !== null) {\n if (match[1]) {\n const names = match[1].split(',').map(n => {\n const parts = n.trim().split(/\\s+as\\s+/);\n return parts[parts.length - 1]?.trim() || '';\n });\n exports.push(...names.filter(n => n && n !== 'default'));\n }\n }\n\n return [...new Set(exports)];\n}\n\nexport default flightRSCRollup;\n"]}
@@ -306,5 +306,5 @@ function dedupe(fn, keyFn = (...args) => JSON.stringify(args)) {
306
306
  }
307
307
 
308
308
  export { cacheKey, cached, createCache, dedupe, jsonSerializer, memory };
309
- //# sourceMappingURL=chunk-R7SQAREQ.js.map
310
- //# sourceMappingURL=chunk-R7SQAREQ.js.map
309
+ //# sourceMappingURL=chunk-LKOPJ3GS.js.map
310
+ //# sourceMappingURL=chunk-LKOPJ3GS.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/cache/index.ts"],"names":["cached"],"mappings":"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","file":"chunk-LKOPJ3GS.js","sourcesContent":["/**\n * Flight Cache - Agnostic caching primitives\n * \n * Flight provides the interface, you choose the implementation.\n * Use in-memory, Redis, Cloudflare KV, Upstash, or anything else.\n * \n * @example\n * ```typescript\n * import { createCache } from '@flight-framework/core';\n * import { redis } from '@flight-framework/cache-redis';\n * \n * const cache = createCache({\n * adapter: redis({ url: process.env.REDIS_URL }),\n * defaultTTL: 3600,\n * });\n * \n * await cache.set('user:1', userData, { tags: ['users'] });\n * await cache.invalidateTag('users');\n * ```\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface CacheOptions {\n /** Time-to-live in seconds */\n ttl?: number;\n /** Cache tags for invalidation */\n tags?: string[];\n /** Stale-while-revalidate time in seconds */\n swr?: number;\n}\n\nexport interface CacheEntry<T> {\n /** Cached value */\n value: T;\n /** When this entry expires (timestamp) */\n expiresAt?: number;\n /** When this entry becomes stale (timestamp) */\n staleAt?: number;\n /** Cache tags for invalidation */\n tags?: string[];\n /** When this entry was created */\n createdAt: number;\n}\n\nexport interface Cache {\n /** Get a value from cache */\n get<T>(key: string): Promise<T | undefined>;\n\n /** Set a value in cache */\n set<T>(key: string, value: T, options?: CacheOptions): Promise<void>;\n\n /** Delete a value from cache */\n delete(key: string): Promise<boolean>;\n\n /** Check if a key exists */\n has(key: string): Promise<boolean>;\n\n /** Clear all cache entries */\n clear(): Promise<void>;\n\n /** Invalidate entries by tag */\n invalidateTag(tag: string): Promise<void>;\n\n /** Invalidate entries by multiple tags */\n invalidateTags(tags: string[]): Promise<void>;\n\n /** Get or set with a factory function */\n getOrSet<T>(\n key: string,\n factory: () => Promise<T>,\n options?: CacheOptions\n ): Promise<T>;\n\n /** Get multiple values at once */\n getMany<T>(keys: string[]): Promise<Map<string, T | undefined>>;\n\n /** Set multiple values at once */\n setMany<T>(entries: Map<string, T>, options?: CacheOptions): Promise<void>;\n\n /** Get cache statistics (if tracking enabled) */\n getStats?(): CacheStats | undefined;\n}\n\nexport interface CacheStats {\n hits: number;\n misses: number;\n sets: number;\n deletes: number;\n}\n\n/** Adapter interface for external cache providers */\nexport interface CacheAdapter {\n /** Adapter name for identification */\n readonly name: string;\n\n /** Get an entry from cache */\n get<T>(key: string): Promise<CacheEntry<T> | undefined>;\n\n /** Set an entry in cache */\n set<T>(key: string, entry: CacheEntry<T>): Promise<void>;\n\n /** Delete an entry from cache */\n delete(key: string): Promise<boolean>;\n\n /** Check if key exists */\n has(key: string): Promise<boolean>;\n\n /** Clear all entries */\n clear(): Promise<void>;\n\n /** Get keys matching pattern (optional) */\n keys?(pattern?: string): Promise<string[]>;\n\n /** Get multiple entries at once (optional, for performance) */\n getMany?<T>(keys: string[]): Promise<Map<string, CacheEntry<T> | undefined>>;\n\n /** Set multiple entries at once (optional, for performance) */\n setMany?<T>(entries: Map<string, CacheEntry<T>>): Promise<void>;\n\n // ========================================================================\n // Tag operations - For distributed caches, tags MUST be handled by adapter\n // ========================================================================\n\n /** Whether this adapter supports distributed tags natively */\n readonly supportsDistributedTags?: boolean;\n\n /** Add a key to a tag set (for distributed tag management) */\n addToTag?(tag: string, key: string): Promise<void>;\n\n /** Get all keys associated with a tag */\n getTagMembers?(tag: string): Promise<string[]>;\n\n /** Delete a tag and return its members */\n deleteTag?(tag: string): Promise<string[]>;\n\n // ========================================================================\n // Lifecycle\n // ========================================================================\n\n /** Close connection (for cleanup) */\n close?(): Promise<void>;\n\n /** Check if adapter is healthy */\n ping?(): Promise<boolean>;\n}\n\n// ============================================================================\n// Serialization\n// ============================================================================\n\nexport interface Serializer {\n serialize(value: unknown): string;\n deserialize<T>(data: string): T;\n}\n\n/** Default JSON serializer */\nexport const jsonSerializer: Serializer = {\n serialize: (value) => JSON.stringify(value),\n deserialize: <T>(data: string) => JSON.parse(data) as T,\n};\n\n// ============================================================================\n// In-Memory Cache Implementation (Default)\n// ============================================================================\n\nexport interface MemoryCacheAdapterOptions {\n /** Maximum number of entries (0 = unlimited) */\n maxSize?: number;\n /** Cleanup interval in ms (default: 60000) */\n cleanupInterval?: number;\n}\n\nclass MemoryCacheAdapter implements CacheAdapter {\n readonly name = 'memory';\n readonly supportsDistributedTags = false;\n\n private store = new Map<string, CacheEntry<unknown>>();\n private tagIndex = new Map<string, Set<string>>();\n private maxSize: number;\n private cleanupTimer?: ReturnType<typeof setInterval>;\n\n constructor(options: MemoryCacheAdapterOptions = {}) {\n this.maxSize = options.maxSize ?? 0;\n\n // Periodic cleanup of expired entries\n const interval = options.cleanupInterval ?? 60000;\n if (interval > 0) {\n this.cleanupTimer = setInterval(() => this.cleanup(), interval);\n }\n }\n\n async get<T>(key: string): Promise<CacheEntry<T> | undefined> {\n const entry = this.store.get(key) as CacheEntry<T> | undefined;\n if (!entry) return undefined;\n\n // Check if expired\n if (entry.expiresAt && Date.now() > entry.expiresAt) {\n this.store.delete(key);\n this.removeFromTagIndex(key, entry.tags);\n return undefined;\n }\n\n return entry;\n }\n\n async set<T>(key: string, entry: CacheEntry<T>): Promise<void> {\n // Evict if at max size (simple FIFO eviction)\n if (this.maxSize > 0 && this.store.size >= this.maxSize && !this.store.has(key)) {\n const firstKey = this.store.keys().next().value;\n if (firstKey) {\n const evicted = this.store.get(firstKey);\n this.store.delete(firstKey);\n if (evicted?.tags) {\n this.removeFromTagIndex(firstKey, evicted.tags);\n }\n }\n }\n\n this.store.set(key, entry as CacheEntry<unknown>);\n\n // Update tag index\n if (entry.tags) {\n for (const tag of entry.tags) {\n if (!this.tagIndex.has(tag)) {\n this.tagIndex.set(tag, new Set());\n }\n this.tagIndex.get(tag)!.add(key);\n }\n }\n }\n\n async delete(key: string): Promise<boolean> {\n const entry = this.store.get(key);\n if (entry?.tags) {\n this.removeFromTagIndex(key, entry.tags);\n }\n return this.store.delete(key);\n }\n\n async has(key: string): Promise<boolean> {\n const entry = await this.get(key);\n return entry !== undefined;\n }\n\n async clear(): Promise<void> {\n this.store.clear();\n this.tagIndex.clear();\n }\n\n async keys(pattern?: string): Promise<string[]> {\n const allKeys = Array.from(this.store.keys());\n if (!pattern) return allKeys;\n\n const regex = new RegExp(pattern.replace(/\\*/g, '.*'));\n return allKeys.filter(key => regex.test(key));\n }\n\n async getMany<T>(keys: string[]): Promise<Map<string, CacheEntry<T> | undefined>> {\n const result = new Map<string, CacheEntry<T> | undefined>();\n for (const key of keys) {\n result.set(key, await this.get<T>(key));\n }\n return result;\n }\n\n async setMany<T>(entries: Map<string, CacheEntry<T>>): Promise<void> {\n for (const [key, entry] of entries) {\n await this.set(key, entry);\n }\n }\n\n // In-memory adapter handles tags locally (non-distributed)\n async addToTag(tag: string, key: string): Promise<void> {\n if (!this.tagIndex.has(tag)) {\n this.tagIndex.set(tag, new Set());\n }\n this.tagIndex.get(tag)!.add(key);\n }\n\n async getTagMembers(tag: string): Promise<string[]> {\n return Array.from(this.tagIndex.get(tag) ?? []);\n }\n\n async deleteTag(tag: string): Promise<string[]> {\n const members = await this.getTagMembers(tag);\n this.tagIndex.delete(tag);\n return members;\n }\n\n async close(): Promise<void> {\n if (this.cleanupTimer) {\n clearInterval(this.cleanupTimer);\n }\n this.store.clear();\n this.tagIndex.clear();\n }\n\n async ping(): Promise<boolean> {\n return true;\n }\n\n private removeFromTagIndex(key: string, tags?: string[]): void {\n if (!tags) return;\n for (const tag of tags) {\n this.tagIndex.get(tag)?.delete(key);\n }\n }\n\n private cleanup(): void {\n const now = Date.now();\n for (const [key, entry] of this.store) {\n if (entry.expiresAt && now > entry.expiresAt) {\n this.store.delete(key);\n this.removeFromTagIndex(key, entry.tags);\n }\n }\n }\n}\n\n/**\n * Create in-memory cache adapter\n */\nexport function memory(options: MemoryCacheAdapterOptions = {}): CacheAdapter {\n return new MemoryCacheAdapter(options);\n}\n\n// ============================================================================\n// Cache Factory\n// ============================================================================\n\nexport interface CreateCacheOptions {\n /** Custom cache adapter (defaults to in-memory) */\n adapter?: CacheAdapter;\n /** Default TTL for all entries (seconds) */\n defaultTTL?: number;\n /** Key prefix for namespacing */\n prefix?: string;\n /** Custom serializer (for external adapters) */\n serializer?: Serializer;\n /** Track cache statistics */\n trackStats?: boolean;\n}\n\n/**\n * Create a new cache instance\n * \n * @example\n * ```typescript\n * // Simple in-memory cache\n * const cache = createCache();\n * \n * // With Redis adapter\n * import { redis } from '@flight-framework/cache-redis';\n * const cache = createCache({\n * adapter: redis({ url: 'redis://localhost:6379' }),\n * defaultTTL: 3600,\n * prefix: 'myapp',\n * });\n * ```\n */\nexport function createCache(options: CreateCacheOptions = {}): Cache {\n const {\n adapter = new MemoryCacheAdapter(),\n defaultTTL,\n prefix = '',\n trackStats = false,\n } = options;\n\n // Local tag index for adapters that don't support distributed tags\n const localTagIndex = new Map<string, Set<string>>();\n\n // Stats tracking\n const stats: CacheStats = { hits: 0, misses: 0, sets: 0, deletes: 0 };\n\n function prefixKey(key: string): string {\n return prefix ? `${prefix}:${key}` : key;\n }\n\n function useDistributedTags(): boolean {\n return !!(adapter.supportsDistributedTags && adapter.addToTag && adapter.getTagMembers && adapter.deleteTag);\n }\n\n async function registerTags(fullKey: string, tags?: string[]): Promise<void> {\n if (!tags || tags.length === 0) return;\n\n if (useDistributedTags()) {\n // Distributed: adapter handles tag storage\n for (const tag of tags) {\n await adapter.addToTag!(tag, fullKey);\n }\n } else {\n // Local: use in-memory index (for memory adapter or simple adapters)\n for (const tag of tags) {\n if (!localTagIndex.has(tag)) {\n localTagIndex.set(tag, new Set());\n }\n localTagIndex.get(tag)!.add(fullKey);\n }\n }\n }\n\n async function getTagMembers(tag: string): Promise<string[]> {\n if (useDistributedTags()) {\n return adapter.getTagMembers!(tag);\n }\n return Array.from(localTagIndex.get(tag) ?? []);\n }\n\n async function removeTag(tag: string): Promise<void> {\n if (useDistributedTags()) {\n await adapter.deleteTag!(tag);\n } else {\n localTagIndex.delete(tag);\n }\n }\n\n return {\n async get<T>(key: string): Promise<T | undefined> {\n const entry = await adapter.get<T>(prefixKey(key));\n\n if (!entry) {\n if (trackStats) stats.misses++;\n return undefined;\n }\n\n if (trackStats) stats.hits++;\n\n // Check stale-while-revalidate (return stale value, caller should revalidate)\n // The value is still returned even if stale - that's the \"while revalidate\" part\n return entry.value;\n },\n\n async set<T>(key: string, value: T, opts?: CacheOptions): Promise<void> {\n const ttl = opts?.ttl ?? defaultTTL;\n const now = Date.now();\n\n const entry: CacheEntry<T> = {\n value,\n createdAt: now,\n tags: opts?.tags,\n };\n\n if (ttl) {\n entry.expiresAt = now + (ttl * 1000);\n if (opts?.swr) {\n entry.staleAt = now + ((ttl - opts.swr) * 1000);\n }\n }\n\n const fullKey = prefixKey(key);\n await adapter.set(fullKey, entry);\n await registerTags(fullKey, opts?.tags);\n\n if (trackStats) stats.sets++;\n },\n\n async delete(key: string): Promise<boolean> {\n const fullKey = prefixKey(key);\n const result = await adapter.delete(fullKey);\n if (trackStats && result) stats.deletes++;\n return result;\n },\n\n async has(key: string): Promise<boolean> {\n return adapter.has(prefixKey(key));\n },\n\n async clear(): Promise<void> {\n await adapter.clear();\n localTagIndex.clear();\n },\n\n async invalidateTag(tag: string): Promise<void> {\n const keys = await getTagMembers(tag);\n\n for (const key of keys) {\n await adapter.delete(key);\n }\n\n await removeTag(tag);\n },\n\n async invalidateTags(tags: string[]): Promise<void> {\n for (const tag of tags) {\n await this.invalidateTag(tag);\n }\n },\n\n async getOrSet<T>(\n key: string,\n factory: () => Promise<T>,\n opts?: CacheOptions\n ): Promise<T> {\n const cached = await this.get<T>(key);\n if (cached !== undefined) {\n return cached;\n }\n\n const value = await factory();\n await this.set(key, value, opts);\n return value;\n },\n\n async getMany<T>(keys: string[]): Promise<Map<string, T | undefined>> {\n const result = new Map<string, T | undefined>();\n\n if (adapter.getMany) {\n // Use batch operation if adapter supports it\n const entries = await adapter.getMany<T>(keys.map(prefixKey));\n for (const [key, entry] of entries) {\n const originalKey = prefix ? key.slice(prefix.length + 1) : key;\n result.set(originalKey, entry?.value);\n }\n } else {\n // Fallback to individual gets\n for (const key of keys) {\n result.set(key, await this.get<T>(key));\n }\n }\n\n return result;\n },\n\n async setMany<T>(entries: Map<string, T>, opts?: CacheOptions): Promise<void> {\n const ttl = opts?.ttl ?? defaultTTL;\n const now = Date.now();\n\n const cacheEntries = new Map<string, CacheEntry<T>>();\n\n for (const [key, value] of entries) {\n const entry: CacheEntry<T> = {\n value,\n createdAt: now,\n tags: opts?.tags,\n };\n\n if (ttl) {\n entry.expiresAt = now + (ttl * 1000);\n if (opts?.swr) {\n entry.staleAt = now + ((ttl - opts.swr) * 1000);\n }\n }\n\n const fullKey = prefixKey(key);\n cacheEntries.set(fullKey, entry);\n await registerTags(fullKey, opts?.tags);\n }\n\n if (adapter.setMany) {\n await adapter.setMany(cacheEntries);\n } else {\n for (const [key, entry] of cacheEntries) {\n await adapter.set(key, entry);\n }\n }\n\n if (trackStats) stats.sets += entries.size;\n },\n\n getStats() {\n return trackStats ? { ...stats } : undefined;\n },\n };\n}\n\n// ============================================================================\n// Cache Utilities\n// ============================================================================\n\n/**\n * Create a cache key from multiple parts\n * \n * @example\n * ```typescript\n * cacheKey('user', userId, 'profile'); // \"user:123:profile\"\n * ```\n */\nexport function cacheKey(...parts: (string | number | boolean | undefined)[]): string {\n return parts\n .filter(p => p !== undefined)\n .map(p => String(p))\n .join(':');\n}\n\n/**\n * Wrap a function with caching\n * \n * @example\n * ```typescript\n * const getCachedUser = cached(cache, getUser, {\n * ttl: 300,\n * keyFn: (userId) => `user:${userId}`,\n * });\n * \n * const user = await getCachedUser(123);\n * ```\n */\nexport function cached<T extends (...args: unknown[]) => Promise<unknown>>(\n cache: Cache,\n fn: T,\n options?: CacheOptions & { keyFn?: (...args: Parameters<T>) => string }\n): T {\n const { keyFn = (...args: unknown[]) => JSON.stringify(args), ...cacheOpts } = options ?? {};\n\n return (async (...args: Parameters<T>) => {\n const key = keyFn(...args);\n return cache.getOrSet(key, () => fn(...args) as Promise<unknown>, cacheOpts);\n }) as T;\n}\n\n/**\n * Create a deduplication wrapper to prevent duplicate concurrent requests\n * \n * @example\n * ```typescript\n * const dedupedFetch = dedupe(fetchUser);\n * \n * // These will share the same request\n * const [user1, user2] = await Promise.all([\n * dedupedFetch(123),\n * dedupedFetch(123),\n * ]);\n * ```\n */\nexport function dedupe<T extends (...args: unknown[]) => Promise<unknown>>(\n fn: T,\n keyFn: (...args: Parameters<T>) => string = (...args) => JSON.stringify(args)\n): T {\n const pending = new Map<string, Promise<unknown>>();\n\n return (async (...args: Parameters<T>) => {\n const key = keyFn(...args);\n\n if (pending.has(key)) {\n return pending.get(key);\n }\n\n const promise = fn(...args).finally(() => {\n pending.delete(key);\n });\n\n pending.set(key, promise);\n return promise;\n }) as T;\n}\n"]}
@@ -347,5 +347,5 @@ function validateDependencies(boundaries) {
347
347
  }
348
348
 
349
349
  export { streamWithPriority, validateDependencies };
350
- //# sourceMappingURL=chunk-WOEIJWGJ.js.map
351
- //# sourceMappingURL=chunk-WOEIJWGJ.js.map
350
+ //# sourceMappingURL=chunk-NZS2YJ43.js.map
351
+ //# sourceMappingURL=chunk-NZS2YJ43.js.map