@flight-framework/core 0.3.1 → 0.3.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (142) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +541 -541
  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-VPFMHGEV.js → chunk-3N5ZBVZJ.js} +2 -2
  9. package/dist/chunk-3N5ZBVZJ.js.map +1 -0
  10. package/dist/{chunk-2F2QU6RC.js → chunk-3UQJE3XZ.js} +2 -2
  11. package/dist/chunk-3UQJE3XZ.js.map +1 -0
  12. package/dist/{chunk-3KRBRSRJ.js → chunk-4U7CJVNQ.js} +2 -2
  13. package/dist/chunk-4U7CJVNQ.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-3ZSSRE6M.js → chunk-6IG6XIXU.js} +29 -3
  21. package/dist/chunk-6IG6XIXU.js.map +1 -0
  22. package/dist/{chunk-PVUMB632.js → chunk-A2QRUBVE.js} +2 -2
  23. package/dist/chunk-A2QRUBVE.js.map +1 -0
  24. package/dist/{chunk-W6D62JCI.js → chunk-A4TKWQBU.js} +2 -2
  25. package/dist/chunk-A4TKWQBU.js.map +1 -0
  26. package/dist/{chunk-GCQZ4FHI.js → chunk-ARBKF6VI.js} +2 -2
  27. package/dist/{chunk-GCQZ4FHI.js.map → chunk-ARBKF6VI.js.map} +1 -1
  28. package/dist/{chunk-ZVC3ZWLM.js → chunk-B2LPSCES.js} +2 -2
  29. package/dist/chunk-B2LPSCES.js.map +1 -0
  30. package/dist/{chunk-62C7LX2E.js → chunk-CKJHJPKQ.js} +2 -2
  31. package/dist/chunk-CKJHJPKQ.js.map +1 -0
  32. package/dist/{chunk-RSVA2EYO.js → chunk-CNY3ZUVG.js} +2 -2
  33. package/dist/chunk-CNY3ZUVG.js.map +1 -0
  34. package/dist/{chunk-IXMD5QH2.js → chunk-EHVUAFNH.js} +2 -2
  35. package/dist/chunk-EHVUAFNH.js.map +1 -0
  36. package/dist/{chunk-P6WSBVDT.js → chunk-FRAH5QNY.js} +4 -4
  37. package/dist/chunk-FRAH5QNY.js.map +1 -0
  38. package/dist/{chunk-MQQLYWZZ.js → chunk-GNS2FGPC.js} +2 -2
  39. package/dist/chunk-GNS2FGPC.js.map +1 -0
  40. package/dist/{chunk-TASAT7KB.js → chunk-HNPO6LFW.js} +2 -2
  41. package/dist/chunk-HNPO6LFW.js.map +1 -0
  42. package/dist/{chunk-ROJFQCGV.js → chunk-KDEA64UX.js} +5 -5
  43. package/dist/chunk-KDEA64UX.js.map +1 -0
  44. package/dist/{chunk-NWMJYTMB.js → chunk-LAKHYTHL.js} +3 -3
  45. package/dist/chunk-LAKHYTHL.js.map +1 -0
  46. package/dist/{chunk-R7SQAREQ.js → chunk-LKOPJ3GS.js} +2 -2
  47. package/dist/chunk-LKOPJ3GS.js.map +1 -0
  48. package/dist/{chunk-WOEIJWGJ.js → chunk-NZS2YJ43.js} +2 -2
  49. package/dist/chunk-NZS2YJ43.js.map +1 -0
  50. package/dist/{chunk-3QP3E7HS.js → chunk-OZ3EXPLE.js} +2 -2
  51. package/dist/chunk-OZ3EXPLE.js.map +1 -0
  52. package/dist/{chunk-YHEVHRLH.js → chunk-OZBPR27I.js} +2 -2
  53. package/dist/chunk-OZBPR27I.js.map +1 -0
  54. package/dist/{chunk-T4Z4HM4W.js → chunk-PAVI5W6M.js} +3 -3
  55. package/dist/chunk-PAVI5W6M.js.map +1 -0
  56. package/dist/{chunk-XSY5AAXT.js → chunk-PO7IHPFF.js} +2 -2
  57. package/dist/chunk-PO7IHPFF.js.map +1 -0
  58. package/dist/{chunk-SUILH4ID.js → chunk-QK6UEQ75.js} +2 -2
  59. package/dist/chunk-QK6UEQ75.js.map +1 -0
  60. package/dist/{chunk-OYF2OAKS.js → chunk-R7MEVVA4.js} +2 -2
  61. package/dist/chunk-R7MEVVA4.js.map +1 -0
  62. package/dist/{chunk-WFAWAHJH.js → chunk-UFWGOJL7.js} +2 -2
  63. package/dist/chunk-UFWGOJL7.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/client.d.ts +25 -0
  71. package/dist/client.js +16 -0
  72. package/dist/client.js.map +1 -0
  73. package/dist/config/index.js +1 -1
  74. package/dist/errors/index.js +2 -2
  75. package/dist/file-router/index.js +1 -1
  76. package/dist/file-router/streaming-hints.js +1 -1
  77. package/dist/handlers/index.js +1 -1
  78. package/dist/index.js +30 -30
  79. package/dist/index.js.map +1 -1
  80. package/dist/islands/index.js +1 -1
  81. package/dist/middleware/index.js +1 -1
  82. package/dist/react/index.js +2 -2
  83. package/dist/react/index.js.map +1 -1
  84. package/dist/render/index.js +1 -1
  85. package/dist/router/index.js +1 -1
  86. package/dist/rsc/adapters/index.js +4 -4
  87. package/dist/rsc/adapters/preact.js +1 -1
  88. package/dist/rsc/adapters/react.js +1 -1
  89. package/dist/rsc/adapters/solid.js +1 -1
  90. package/dist/rsc/adapters/vue.js +1 -1
  91. package/dist/rsc/boundaries.js +1 -1
  92. package/dist/rsc/context.js +1 -1
  93. package/dist/rsc/index.d.ts +211 -6
  94. package/dist/rsc/index.js +11 -11
  95. package/dist/rsc/legacy.d.ts +26 -2
  96. package/dist/rsc/legacy.js +1 -1
  97. package/dist/rsc/payload.js +1 -1
  98. package/dist/rsc/plugins/esbuild.js +2 -2
  99. package/dist/rsc/plugins/index.js +4 -4
  100. package/dist/rsc/plugins/rollup.js +2 -2
  101. package/dist/rsc/renderer.js +3 -3
  102. package/dist/rsc/stream.js +1 -1
  103. package/dist/rsc/vite-plugin.js +2 -2
  104. package/dist/server/index.js +4 -4
  105. package/dist/streaming/adapters/index.js +1 -1
  106. package/dist/streaming/conditional.js +1 -1
  107. package/dist/streaming/index.js +1 -1
  108. package/dist/streaming/observability.js +2 -2
  109. package/dist/streaming/priority.js +1 -1
  110. package/dist/utils/index.js +1 -1
  111. package/package.json +228 -222
  112. package/dist/chunk-2F2QU6RC.js.map +0 -1
  113. package/dist/chunk-3KRBRSRJ.js.map +0 -1
  114. package/dist/chunk-3QP3E7HS.js.map +0 -1
  115. package/dist/chunk-3ZSSRE6M.js.map +0 -1
  116. package/dist/chunk-62C7LX2E.js.map +0 -1
  117. package/dist/chunk-6BDCTUQY.js.map +0 -1
  118. package/dist/chunk-FSJNOPYE.js.map +0 -1
  119. package/dist/chunk-IXMD5QH2.js.map +0 -1
  120. package/dist/chunk-K2CQZPCG.js.map +0 -1
  121. package/dist/chunk-MDQNNIHH.js.map +0 -1
  122. package/dist/chunk-MQQLYWZZ.js.map +0 -1
  123. package/dist/chunk-NWMJYTMB.js.map +0 -1
  124. package/dist/chunk-OYF2OAKS.js.map +0 -1
  125. package/dist/chunk-P6WSBVDT.js.map +0 -1
  126. package/dist/chunk-PDW5WCMW.js.map +0 -1
  127. package/dist/chunk-PVUMB632.js.map +0 -1
  128. package/dist/chunk-R7SQAREQ.js.map +0 -1
  129. package/dist/chunk-ROJFQCGV.js.map +0 -1
  130. package/dist/chunk-RSVA2EYO.js.map +0 -1
  131. package/dist/chunk-SUILH4ID.js.map +0 -1
  132. package/dist/chunk-T4Z4HM4W.js.map +0 -1
  133. package/dist/chunk-TASAT7KB.js.map +0 -1
  134. package/dist/chunk-VPFMHGEV.js.map +0 -1
  135. package/dist/chunk-W6D62JCI.js.map +0 -1
  136. package/dist/chunk-WFAWAHJH.js.map +0 -1
  137. package/dist/chunk-WOEIJWGJ.js.map +0 -1
  138. package/dist/chunk-XOIYNY4I.js.map +0 -1
  139. package/dist/chunk-XSY5AAXT.js.map +0 -1
  140. package/dist/chunk-YHEVHRLH.js.map +0 -1
  141. package/dist/chunk-ZIE56LCA.js.map +0 -1
  142. package/dist/chunk-ZVC3ZWLM.js.map +0 -1
@@ -1,3 +1,3 @@
1
- export { RedirectError, clearActions, collectStream, cookies, createActionContext, createActionMiddleware, createActionReference, createLoggingMiddleware, createMemoryAdapter, createProgressReporter, createQueueManager, createQueuedAction, createRetryMiddleware, createStreamableAction, createTimingMiddleware, defaultRetryStrategy, executeAction, executeFormAction, executeWithMiddleware, exponentialBackoff, fixedDelay, generateActionId, getAction, getAllActions, handleActionRequest, isRedirectError, parseFormData, pipeline, redirect, registerAction, responseToStream, streamToResponse } from '../chunk-3QP3E7HS.js';
1
+ export { RedirectError, clearActions, collectStream, cookies, createActionContext, createActionMiddleware, createActionReference, createLoggingMiddleware, createMemoryAdapter, createProgressReporter, createQueueManager, createQueuedAction, createRetryMiddleware, createStreamableAction, createTimingMiddleware, defaultRetryStrategy, executeAction, executeFormAction, executeWithMiddleware, exponentialBackoff, fixedDelay, generateActionId, getAction, getAllActions, handleActionRequest, isRedirectError, parseFormData, pipeline, redirect, registerAction, responseToStream, streamToResponse } from '../chunk-OZ3EXPLE.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
@@ -1,3 +1,3 @@
1
- export { createAdapter } from '../chunk-SUILH4ID.js';
1
+ export { createAdapter } from '../chunk-QK6UEQ75.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
@@ -1,3 +1,3 @@
1
- export { cacheKey, cached, createCache, dedupe, jsonSerializer, memory } from '../chunk-R7SQAREQ.js';
1
+ export { cacheKey, cached, createCache, dedupe, jsonSerializer, memory } from '../chunk-LKOPJ3GS.js';
2
2
  //# sourceMappingURL=index.js.map
3
3
  //# sourceMappingURL=index.js.map
@@ -1,4 +1,4 @@
1
- import { isProduction, isDevelopment } from './chunk-YHEVHRLH.js';
1
+ import { isProduction, isDevelopment } from './chunk-OZBPR27I.js';
2
2
 
3
3
  // src/errors/index.ts
4
4
  var FlightError = class extends Error {
@@ -193,5 +193,5 @@ function wrapWithDigest(error) {
193
193
  }
194
194
 
195
195
  export { BadRequestError, FlightError, ForbiddenError, InternalError, NotFoundError, UnauthorizedError, clearError, createError, createErrorResponse, forbidden, getError, getErrorStatusCode, isFlightError, isForbiddenError, isNotFoundError, isUnauthorizedError, notFound, showError, unauthorized, wrapWithDigest };
196
- //# sourceMappingURL=chunk-FSJNOPYE.js.map
197
- //# sourceMappingURL=chunk-FSJNOPYE.js.map
196
+ //# sourceMappingURL=chunk-2JVEH76V.js.map
197
+ //# sourceMappingURL=chunk-2JVEH76V.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/errors/index.ts"],"names":[],"mappings":"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","file":"chunk-2JVEH76V.js","sourcesContent":["/**\n * @flight-framework/core - Error Handling\n * \n * Comprehensive error handling utilities for Flight applications.\n * All utilities are OPTIONAL - developers can use their own error handling.\n * \n * Philosophy: Flight OFFERS these utilities, but never IMPOSES them.\n * Using throw new Error() works perfectly fine - this is your choice.\n */\n\nimport { isProduction, isDevelopment } from '../utils/env.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Options for creating a Flight error\n */\nexport interface FlightErrorOptions {\n /** HTTP status code */\n statusCode: number;\n /** Short status message (e.g., \"Not Found\") */\n statusMessage?: string;\n /** Detailed error message */\n message?: string;\n /** Additional data to include with the error */\n data?: Record<string, unknown>;\n /** If true, shows full-screen error page instead of error boundary */\n fatal?: boolean;\n /** Original error that caused this error */\n cause?: Error;\n}\n\n/**\n * Extended error props with digest for production error correlation\n */\nexport interface FlightErrorProps {\n /** The error object */\n error: Error & { digest?: string };\n /** Function to attempt recovery by re-rendering */\n reset: () => void;\n}\n\n/**\n * Reset details provided to onReset callback\n */\nexport interface ResetDetails {\n /** Reason for the reset */\n reason: 'imperative-api' | 'keys';\n /** Arguments passed to resetErrorBoundary (if imperative) */\n args?: unknown[];\n /** Previous resetKeys values (if keys changed) */\n prev?: unknown[];\n /** New resetKeys values (if keys changed) */\n next?: unknown[];\n}\n\n/**\n * Options for error boundary behavior\n */\nexport interface ErrorBoundaryOptions {\n /** Keys that trigger automatic reset when changed */\n resetKeys?: unknown[];\n /** Callback when error boundary resets */\n onReset?: (details: ResetDetails) => void;\n /** Callback when error is caught */\n onError?: (error: Error, info: { componentStack?: string }) => void;\n}\n\n// ============================================================================\n// FlightError Class\n// ============================================================================\n\n/**\n * Custom error class with status code and metadata support.\n * \n * You can use this class or regular Error - Flight handles both.\n * \n * @example\n * ```typescript\n * throw new FlightError({\n * statusCode: 404,\n * message: 'User not found',\n * data: { userId: '123' }\n * });\n * ```\n */\nexport class FlightError extends Error {\n /** HTTP status code */\n readonly statusCode: number;\n /** Short status message */\n readonly statusMessage: string;\n /** Additional error data */\n readonly data?: Record<string, unknown>;\n /** Whether this is a fatal error (shows full-screen) */\n readonly fatal: boolean;\n /** Unique digest for production error correlation */\n readonly digest?: string;\n\n constructor(options: FlightErrorOptions) {\n super(options.message || options.statusMessage || 'An error occurred');\n\n this.name = 'FlightError';\n this.statusCode = options.statusCode;\n this.statusMessage = options.statusMessage || getDefaultStatusMessage(options.statusCode);\n this.data = options.data;\n this.fatal = options.fatal ?? false;\n\n // Generate digest in production for error correlation\n // Using typeof check for SSR/browser compatibility\n if (isProduction()) {\n this.digest = generateDigest();\n }\n\n // Preserve original error stack if cause provided\n if (options.cause) {\n this.cause = options.cause;\n if (options.cause.stack) {\n this.stack = `${this.stack}\\nCaused by: ${options.cause.stack}`;\n }\n }\n }\n\n /**\n * Convert to plain object for serialization\n */\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n message: this.message,\n statusCode: this.statusCode,\n statusMessage: this.statusMessage,\n data: this.data,\n fatal: this.fatal,\n digest: this.digest,\n };\n }\n}\n\n// ============================================================================\n// HTTP Error Classes (Convenience)\n// ============================================================================\n\n/**\n * 400 Bad Request error\n */\nexport class BadRequestError extends FlightError {\n constructor(message?: string, data?: Record<string, unknown>) {\n super({ statusCode: 400, message, data });\n this.name = 'BadRequestError';\n }\n}\n\n/**\n * 401 Unauthorized error\n */\nexport class UnauthorizedError extends FlightError {\n constructor(message?: string, data?: Record<string, unknown>) {\n super({ statusCode: 401, message: message || 'Unauthorized', data });\n this.name = 'UnauthorizedError';\n }\n}\n\n/**\n * 403 Forbidden error\n */\nexport class ForbiddenError extends FlightError {\n constructor(message?: string, data?: Record<string, unknown>) {\n super({ statusCode: 403, message: message || 'Forbidden', data });\n this.name = 'ForbiddenError';\n }\n}\n\n/**\n * 404 Not Found error\n */\nexport class NotFoundError extends FlightError {\n constructor(message?: string, data?: Record<string, unknown>) {\n super({ statusCode: 404, message: message || 'Not Found', data });\n this.name = 'NotFoundError';\n }\n}\n\n/**\n * 500 Internal Server Error\n */\nexport class InternalError extends FlightError {\n constructor(message?: string, data?: Record<string, unknown>) {\n super({ statusCode: 500, message: message || 'Internal Server Error', data });\n this.name = 'InternalError';\n }\n}\n\n// ============================================================================\n// Factory Functions\n// ============================================================================\n\n/**\n * Create a FlightError with the specified options.\n * \n * This is a convenience function - you can also use `new FlightError()` directly\n * or just `throw new Error()` - Flight handles all cases.\n * \n * @example\n * ```typescript\n * // With full options\n * throw createError({\n * statusCode: 404,\n * message: 'Product not found',\n * data: { productId: 'abc123' }\n * });\n * \n * // Simple string shorthand (becomes 500 error)\n * throw createError('Something went wrong');\n * ```\n */\nexport function createError(options: FlightErrorOptions | string): FlightError {\n if (typeof options === 'string') {\n return new FlightError({ statusCode: 500, message: options });\n }\n return new FlightError(options);\n}\n\n/**\n * Create a 404 Not Found error.\n * Convenience function equivalent to `createError({ statusCode: 404, ... })`.\n * \n * @example\n * ```typescript\n * if (!user) {\n * throw notFound('User not found');\n * }\n * ```\n */\nexport function notFound(message?: string, data?: Record<string, unknown>): never {\n throw new NotFoundError(message, data);\n}\n\n/**\n * Create a 403 Forbidden error.\n * \n * @example\n * ```typescript\n * if (!user.isAdmin) {\n * throw forbidden('Admin access required');\n * }\n * ```\n */\nexport function forbidden(message?: string, data?: Record<string, unknown>): never {\n throw new ForbiddenError(message, data);\n}\n\n/**\n * Create a 401 Unauthorized error.\n * \n * @example\n * ```typescript\n * if (!session) {\n * throw unauthorized('Please log in to continue');\n * }\n * ```\n */\nexport function unauthorized(message?: string, data?: Record<string, unknown>): never {\n throw new UnauthorizedError(message, data);\n}\n\n// ============================================================================\n// Error State Management (Client-Side)\n// ============================================================================\n\n// Global error state for client-side\ndeclare global {\n interface Window {\n __FLIGHT_ERROR__?: FlightError | null;\n }\n}\n\n/**\n * Programmatically show an error page.\n * \n * This triggers the nearest error boundary or navigates to the error page.\n * Only works on the client side.\n * \n * @example\n * ```typescript\n * // Show error with full options\n * showError({\n * statusCode: 500,\n * message: 'Connection lost'\n * });\n * \n * // Simple string shorthand\n * showError('Something went wrong');\n * ```\n */\nexport function showError(error: FlightErrorOptions | FlightError | string): void {\n let flightError: FlightError;\n\n if (typeof error === 'string') {\n flightError = new FlightError({ statusCode: 500, message: error });\n } else if (error instanceof FlightError) {\n flightError = error;\n } else {\n flightError = new FlightError(error);\n }\n\n // Client-side: dispatch custom event for error boundaries\n if (typeof window !== 'undefined') {\n window.__FLIGHT_ERROR__ = flightError;\n window.dispatchEvent(new CustomEvent('flight:error', {\n detail: flightError,\n bubbles: true\n }));\n }\n}\n\n/**\n * Clear the current error state and optionally redirect.\n * \n * Use this to dismiss an error and return to normal state.\n * \n * @example\n * ```typescript\n * // Just clear the error\n * clearError();\n * \n * // Clear and redirect to home\n * clearError({ redirect: '/' });\n * ```\n */\nexport function clearError(options?: { redirect?: string }): void {\n if (typeof window !== 'undefined') {\n window.__FLIGHT_ERROR__ = null;\n window.dispatchEvent(new CustomEvent('flight:error-clear', { bubbles: true }));\n\n if (options?.redirect) {\n window.location.href = options.redirect;\n }\n }\n}\n\n/**\n * Get the current error from global state.\n * Returns null if no error is active.\n */\nexport function getError(): FlightError | null {\n if (typeof window !== 'undefined') {\n return window.__FLIGHT_ERROR__ ?? null;\n }\n return null;\n}\n\n// ============================================================================\n// Type Guards\n// ============================================================================\n\n/**\n * Check if an error is a FlightError\n */\nexport function isFlightError(error: unknown): error is FlightError {\n return error instanceof FlightError;\n}\n\n/**\n * Check if an error is a NotFoundError (404)\n */\nexport function isNotFoundError(error: unknown): error is NotFoundError {\n return error instanceof NotFoundError ||\n (isFlightError(error) && error.statusCode === 404);\n}\n\n/**\n * Check if an error is a ForbiddenError (403)\n */\nexport function isForbiddenError(error: unknown): error is ForbiddenError {\n return error instanceof ForbiddenError ||\n (isFlightError(error) && error.statusCode === 403);\n}\n\n/**\n * Check if an error is an UnauthorizedError (401)\n */\nexport function isUnauthorizedError(error: unknown): error is UnauthorizedError {\n return error instanceof UnauthorizedError ||\n (isFlightError(error) && error.statusCode === 401);\n}\n\n/**\n * Get the status code from any error.\n * Returns 500 for non-FlightError errors.\n */\nexport function getErrorStatusCode(error: unknown): number {\n if (isFlightError(error)) {\n return error.statusCode;\n }\n return 500;\n}\n\n// ============================================================================\n// Response Helpers\n// ============================================================================\n\n/**\n * Create an error Response from a FlightError.\n * \n * @example\n * ```typescript\n * try {\n * // ... some operation\n * } catch (error) {\n * return createErrorResponse(error);\n * }\n * ```\n */\nexport function createErrorResponse(error: unknown): Response {\n const flightError = isFlightError(error)\n ? error\n : new InternalError(error instanceof Error ? error.message : 'Unknown error');\n\n return new Response(\n JSON.stringify({\n error: flightError.statusMessage,\n message: flightError.message,\n statusCode: flightError.statusCode,\n digest: flightError.digest,\n ...(isDevelopment() && flightError.data\n ? { data: flightError.data }\n : {}),\n }),\n {\n status: flightError.statusCode,\n headers: {\n 'Content-Type': 'application/json',\n },\n }\n );\n}\n\n// ============================================================================\n// Utilities\n// ============================================================================\n\n/**\n * Get default status message for HTTP status code\n */\nfunction getDefaultStatusMessage(statusCode: number): string {\n const messages: Record<number, string> = {\n 400: 'Bad Request',\n 401: 'Unauthorized',\n 403: 'Forbidden',\n 404: 'Not Found',\n 405: 'Method Not Allowed',\n 408: 'Request Timeout',\n 409: 'Conflict',\n 410: 'Gone',\n 422: 'Unprocessable Entity',\n 429: 'Too Many Requests',\n 500: 'Internal Server Error',\n 501: 'Not Implemented',\n 502: 'Bad Gateway',\n 503: 'Service Unavailable',\n 504: 'Gateway Timeout',\n };\n return messages[statusCode] || 'Error';\n}\n\n/**\n * Generate a short digest for error correlation.\n * Used in production to correlate client errors with server logs\n * without exposing stack traces.\n */\nfunction generateDigest(): string {\n // Use crypto if available (Node.js, modern browsers)\n if (typeof crypto !== 'undefined' && crypto.randomUUID) {\n return crypto.randomUUID().slice(0, 8);\n }\n // Fallback for older environments\n return Math.random().toString(36).slice(2, 10);\n}\n\n/**\n * Wrap an error with a digest if it doesn't have one.\n * Useful for adding correlation IDs to third-party errors.\n */\nexport function wrapWithDigest<T extends Error>(error: T): T & { digest: string } {\n const wrapped = error as T & { digest: string };\n if (!wrapped.digest) {\n wrapped.digest = generateDigest();\n }\n return wrapped;\n}\n"]}
@@ -255,5 +255,5 @@ function isServer(deps) {
255
255
  }
256
256
 
257
257
  export { createSolidAdapter, createSolidConsumer, isServer, markAsSolidClientComponent };
258
- //# sourceMappingURL=chunk-VPFMHGEV.js.map
259
- //# sourceMappingURL=chunk-VPFMHGEV.js.map
258
+ //# sourceMappingURL=chunk-3N5ZBVZJ.js.map
259
+ //# sourceMappingURL=chunk-3N5ZBVZJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/rsc/adapters/solid.ts"],"names":[],"mappings":";AAkBA,IAAM,gBAAA,mBAAmB,MAAA,CAAO,GAAA,CAAI,yBAAyB,CAAA;AAgEtD,SAAS,mBAAmB,IAAA,EAAqC;AACpE,EAAA,MAAM,EAAE,KAAA,EAAO,GAAA,EAAI,GAAI,QAAQ,EAAC;AAEhC,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,OAAA;AAAA,IAEN,UAAU,KAAA,EAAyB;AAC/B,MAAA,IAAI,KAAA,KAAU,IAAA,IAAQ,OAAO,KAAA,KAAU,QAAA,EAAU;AAC7C,QAAA,OAAO,KAAA;AAAA,MACX;AAGA,MAAA,MAAM,EAAA,GAAK,KAAA;AAGX,MAAA,IAAI,OAAO,EAAA,KAAO,GAAA,IAAO,EAAA,IAAM,EAAA,CAAG,MAAM,IAAA,CAAA,EAAO;AAC3C,QAAA,OAAO,IAAA;AAAA,MACX;AAGA,MAAA,IAAI,OAAO,UAAU,UAAA,EAAY;AAC7B,QAAA,OAAO,IAAA;AAAA,MACX;AAEA,MAAA,OAAO,KAAA;AAAA,IACX,CAAA;AAAA,IAEA,eAAe,OAAA,EAAmC;AAE9C,MAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AAC/B,QAAA,MAAM,EAAA,GAAK,OAAA;AAIX,QAAA,OAAO;AAAA,UACH,IAAA,EAAM,WAAA;AAAA,UACN,EAAA;AAAA,UACA,IAAA,EAAM,EAAA,CAAG,WAAA,IAAe,EAAA,CAAG,IAAA,IAAQ;AAAA,SACvC;AAAA,MACJ;AAEA,MAAA,MAAM,EAAA,GAAK,OAAA;AACX,MAAA,MAAM,OAAO,EAAA,CAAG,CAAA;AAGhB,MAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC1B,QAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,GAAA,EAAK,IAAA,EAAK;AAAA,MACrC;AAGA,MAAA,IAAI,OAAO,SAAS,UAAA,EAAY;AAC5B,QAAA,MAAM,EAAA,GAAK,IAAA;AAMX,QAAA,IAAI,KAAA,EAAO;AACP,UAAA,IAAI,IAAA,KAAS,MAAM,GAAA,EAAK;AACpB,YAAA,OAAO,EAAE,MAAM,UAAA,EAAW;AAAA,UAC9B;AACA,UAAA,IAAI,IAAA,KAAS,MAAM,IAAA,EAAM;AACrB,YAAA,OAAO,EAAE,MAAM,UAAA,EAAW;AAAA,UAC9B;AACA,UAAA,IAAI,IAAA,KAAS,MAAM,QAAA,EAAU;AACzB,YAAA,OAAO;AAAA,cACH,IAAA,EAAM,UAAA;AAAA,cACN,QAAA,EAAU,GAAG,CAAA,EAAG;AAAA,aACpB;AAAA,UACJ;AAAA,QACJ;AAEA,QAAA,OAAO;AAAA,UACH,IAAA,EAAM,WAAA;AAAA,UACN,EAAA;AAAA,UACA,IAAA,EAAM,EAAA,CAAG,WAAA,IAAe,EAAA,CAAG,IAAA,IAAQ;AAAA,SACvC;AAAA,MACJ;AAGA,MAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC1B,QAAA,OAAO,EAAE,MAAM,UAAA,EAAW;AAAA,MAC9B;AAEA,MAAA,OAAO,EAAE,MAAM,MAAA,EAAO;AAAA,IAC1B,CAAA;AAAA,IAEA,SAAS,OAAA,EAA2C;AAChD,MAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AAC/B,QAAA,OAAO,EAAC;AAAA,MACZ;AACA,MAAA,OAAQ,OAAA,CAAyB,KAAK,EAAC;AAAA,IAC3C,CAAA;AAAA,IAEA,YAAY,OAAA,EAA6B;AACrC,MAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AAC/B,QAAA,OAAO,EAAC;AAAA,MACZ;AAEA,MAAA,MAAM,QAAS,OAAA,CAAyB,CAAA;AACxC,MAAA,MAAM,WAAW,KAAA,EAAO,QAAA;AAExB,MAAA,IAAI,QAAA,KAAa,MAAA,IAAa,QAAA,KAAa,IAAA,EAAM;AAC7C,QAAA,OAAO,EAAC;AAAA,MACZ;AAGA,MAAA,IAAI,OAAO,aAAa,UAAA,EAAY;AAEhC,QAAA,IAAI,KAAK,QAAA,EAAU;AACf,UAAA,IAAI;AACA,YAAA,MAAM,SAAU,QAAA,EAA2B;AAC3C,YAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,MAAM,CAAA,EAAG;AACvB,cAAA,OAAO,MAAA;AAAA,YACX;AACA,YAAA,OAAO,CAAC,MAAM,CAAA;AAAA,UAClB,CAAA,CAAA,MAAQ;AACJ,YAAA,OAAO,EAAC;AAAA,UACZ;AAAA,QACJ;AAEA,QAAA,OAAO,CAAC,QAAQ,CAAA;AAAA,MACpB;AAEA,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACzB,QAAA,OAAO,SAAS,IAAA,EAAK;AAAA,MACzB;AAEA,MAAA,OAAO,CAAC,QAAQ,CAAA;AAAA,IACpB,CAAA;AAAA,IAEA,OAAO,OAAA,EAA+C;AAClD,MAAA,IAAI,OAAO,YAAY,UAAA,EAAY;AAC/B,QAAA,OAAO,MAAA;AAAA,MACX;AACA,MAAA,MAAM,MAAO,OAAA,CAAyB,CAAA;AACtC,MAAA,IAAI,OAAO,GAAA,KAAQ,QAAA,IAAY,OAAO,QAAQ,QAAA,EAAU;AACpD,QAAA,OAAO,GAAA;AAAA,MACX;AACA,MAAA,OAAO,MAAA;AAAA,IACX,CAAA;AAAA,IAEA,iBAAiB,SAAA,EAA6B;AAC1C,MAAA,IAAI,OAAO,SAAA,KAAc,UAAA,IAAc,OAAO,cAAc,QAAA,EAAU;AAClE,QAAA,OAAO,KAAA;AAAA,MACX;AAEA,MAAA,MAAM,IAAA,GAAO,SAAA;AAMb,MAAA,IAAI,IAAA,CAAK,eAAA,KAAoB,IAAA,EAAM,OAAO,IAAA;AAG1C,MAAA,IAAI,IAAA,CAAK,QAAA,KAAa,gBAAA,EAAkB,OAAO,IAAA;AAE/C,MAAA,OAAO,KAAA;AAAA,IACX,CAAA;AAAA,IAEA,aAAA,CACI,WACA,KAAA,EACO;AAEP,MAAA,OAAO;AAAA,QACH,CAAA,EAAG,SAAA;AAAA,QACH,CAAA,EAAG,KAAA;AAAA,QACH,CAAA,EAAG;AAAA,OACP;AAAA,IACJ,CAAA;AAAA,IAEA,MAAM,eAAe,OAAA,EAAmC;AACpD,MAAA,IAAI,KAAK,mBAAA,EAAqB;AAE1B,QAAA,OAAO,GAAA,CAAI,mBAAA,CAAoB,MAAM,OAAO,CAAA;AAAA,MAChD;AACA,MAAA,IAAI,KAAK,cAAA,EAAgB;AAErB,QAAA,OAAO,GAAA,CAAI,cAAA,CAAe,MAAM,OAAO,CAAA;AAAA,MAC3C;AACA,MAAA,MAAM,IAAI,KAAA;AAAA,QACN;AAAA,OAEJ;AAAA,IACJ;AAAA,GACJ;AACJ;AAiBO,SAAS,mBAAA,CACZ,IAAA,EACA,OAAA,GAAgC,EAAC,EACnC;AACE,EAAA,MAAM,EAAE,KAAA,EAAO,GAAA,EAAI,GAAI,IAAA;AACvB,EAAA,MAAM,EAAE,QAAA,mBAAW,IAAI,GAAA,IAAM,GAAI,OAAA;AAEjC,EAAA,OAAO;AAAA;AAAA;AAAA;AAAA,IAIH,QAAA,CAAS,IAAY,MAAA,EAAsC;AACvD,MAAA,QAAA,CAAS,GAAA,CAAI,IAAI,MAAM,CAAA;AAAA,IAC3B,CAAA;AAAA;AAAA;AAAA;AAAA,IAKA,eAAe,OAAA,EAAyD;AACpE,MAAA,QAAQ,QAAQ,MAAA;AAAQ,QACpB,KAAK,MAAA;AACD,UAAA,OAAO,IAAA;AAAA,QAEX,KAAK,MAAA;AACD,UAAA,OAAO,OAAA,CAAQ,KAAA;AAAA,QAEnB,KAAK,MAAA,EAAQ;AAET,UAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,CAAS,GAAA,CAAI,OAAK,IAAA,CAAK,cAAA,CAAe,CAAC,CAAC,CAAA;AACjE,UAAA,OAAO;AAAA,YACH,GAAG,OAAA,CAAQ,GAAA;AAAA,YACX,CAAA,EAAG,EAAE,GAAG,OAAA,CAAQ,OAAO,QAAA,EAAS;AAAA,YAChC,GAAG,OAAA,CAAQ;AAAA,WACf;AAAA,QACJ;AAAA,QAEA,KAAK,UAAA,EAAY;AACb,UAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,CAAS,GAAA,CAAI,OAAK,IAAA,CAAK,cAAA,CAAe,CAAC,CAAC,CAAA;AACjE,UAAA,OAAO,QAAA;AAAA,QACX;AAAA,QAEA,KAAK,UAAA,EAAY;AACb,UAAA,IAAI,OAAO,QAAA,EAAU;AACjB,YAAA,MAAM,QAAA,GAAW,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,QAAQ,CAAA;AACrD,YAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,CAAS,GAAA,CAAI,OAAK,IAAA,CAAK,cAAA,CAAe,CAAC,CAAC,CAAA;AACjE,YAAA,OAAO;AAAA,cACH,GAAG,KAAA,CAAM,QAAA;AAAA,cACT,GAAG,EAAE,QAAA,EAAU,MAAM,QAAA,EAAU,QAAA,EAAU,MAAM,QAAA;AAAS,aAC5D;AAAA,UACJ;AACA,UAAA,OAAO,QAAQ,QAAA,CAAS,GAAA,CAAI,OAAK,IAAA,CAAK,cAAA,CAAe,CAAC,CAAC,CAAA;AAAA,QAC3D;AAAA,QAEA,KAAK,QAAA,EAAU;AACX,UAAA,MAAM,MAAA,GAAS,QAAA,CAAS,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AACvC,UAAA,IAAI,CAAC,MAAA,EAAQ;AACT,YAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,0CAAA,EAA6C,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AACvE,YAAA,IAAI,QAAQ,GAAA,EAAK;AACb,cAAA,OAAO;AAAA,gBACH,CAAA,EAAG,KAAA;AAAA,gBACH,CAAA,EAAG,EAAE,SAAA,EAAW,OAAA,CAAQ,GAAA;AAAI,eAChC;AAAA,YACJ;AACA,YAAA,OAAO,IAAA;AAAA,UACX;AAIA,UAAA,MAAM,gBAAgB,YAAY;AAC9B,YAAA,MAAM,GAAA,GAAM,MAAM,MAAA,EAAO;AACzB,YAAA,OAAO,IAAI,OAAA,IAAW,GAAA;AAAA,UAC1B,CAAA;AAEA,UAAA,IAAI,OAAO,QAAA,EAAU;AACjB,YAAA,OAAO;AAAA,cACH,GAAG,KAAA,CAAM,QAAA;AAAA,cACT,CAAA,EAAG;AAAA,gBACC,QAAA,EAAU,MAAM,OAAA,CAAQ,GAAA,GAAM,EAAE,CAAA,EAAG,KAAA,EAAO,CAAA,EAAG,EAAE,SAAA,EAAW,OAAA,CAAQ,GAAA,IAAM,GAAI,IAAA;AAAA,gBAC5E,QAAA,EAAU;AAAA;AACd,aACJ;AAAA,UACJ;AAEA,UAAA,OAAO,EAAE,CAAA,EAAG,aAAA,EAAe,CAAA,EAAG,EAAC,EAAE;AAAA,QACrC;AAAA,QAEA,KAAK,MAAA,EAAQ;AACT,UAAA,IAAI,QAAQ,QAAA,EAAU;AAClB,YAAA,OAAO,IAAA,CAAK,cAAA,CAAe,OAAA,CAAQ,QAAQ,CAAA;AAAA,UAC/C;AACA,UAAA,OAAO;AAAA,YACH,CAAA,EAAG,KAAA;AAAA,YACH,CAAA,EAAG,EAAE,qBAAA,EAAuB,OAAA,CAAQ,EAAA;AAAG,WAC3C;AAAA,QACJ;AAAA,QAEA;AACI,UAAA,OAAO,IAAA;AAAA;AACf,IACJ,CAAA;AAAA;AAAA;AAAA;AAAA,IAKA,OAAA,CACI,QACA,SAAA,EACwB;AACxB,MAAA,MAAM,SAAA,GAAY,OAAO,IAAA,CAAK,CAAA,CAAA,KAAK,EAAE,IAAA,KAAS,GAAA,IAAO,CAAA,CAAE,EAAA,KAAO,MAAM,CAAA;AACpE,MAAA,IAAI,CAAC,SAAA,IAAa,SAAA,CAAU,IAAA,KAAS,GAAA,EAAK;AACtC,QAAA,MAAM,IAAI,MAAM,8BAA8B,CAAA;AAAA,MAClD;AAGA,MAAA,KAAA,MAAW,SAAS,MAAA,EAAQ;AACxB,QAAA,IAAI,KAAA,CAAM,SAAS,GAAA,EAAK;AACpB,UAAA,IAAI,CAAC,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,EAAE,CAAA,EAAG;AACzB,YAAA,QAAA,CAAS,GAAA,CAAI,KAAA,CAAM,EAAA,EAAI,MAAM;AAAA;AAAA,cAAiC,KAAA,CAAM;AAAA,aAAO,CAAA;AAAA,UAC/E;AAAA,QACJ;AAAA,MACJ;AAEA,MAAA,MAAM,OAAA,GAAU,IAAA,CAAK,cAAA,CAAe,SAAA,CAAU,IAAI,CAAA;AAElD,MAAA,IAAI,KAAK,OAAA,EAAS;AACd,QAAA,OAAO,GAAA,CAAI,OAAA,CAAQ,MAAM,OAAA,EAAS,SAAS,CAAA;AAAA,MAC/C;AACA,MAAA,IAAI,KAAK,MAAA,EAAQ;AACb,QAAA,OAAO,GAAA,CAAI,MAAA,CAAO,MAAM,OAAA,EAAS,SAAS,CAAA;AAAA,MAC9C;AAEA,MAAA,MAAM,IAAI,MAAM,uDAAuD,CAAA;AAAA,IAC3E;AAAA,GACJ;AACJ;AAiBO,SAAS,0BAAA,CACZ,SAAA,EACA,QAAA,EACA,UAAA,GAAa,SAAA,EACZ;AACD,EAAA,MAAM,MAAA,GAAS,SAAA;AAOf,EAAA,MAAA,CAAO,QAAA,GAAW,gBAAA;AAClB,EAAA,MAAA,CAAO,eAAA,GAAkB,IAAA;AACzB,EAAA,MAAA,CAAO,eAAA,GAAkB,QAAA;AACzB,EAAA,MAAA,CAAO,eAAA,GAAkB,UAAA;AAEzB,EAAA,OAAO,MAAA;AACX;AAKO,SAAS,SAAS,IAAA,EAAmC;AACxD,EAAA,OAAO,IAAA,EAAM,GAAA,EAAK,QAAA,IAAa,OAAO,MAAA,KAAW,WAAA;AACrD","file":"chunk-3N5ZBVZJ.js","sourcesContent":["/**\n * @flight-framework/core - Solid.js UI Adapter\n * \n * Adapter for using Solid.js with Flight Server Components.\n * Enables Flight to render Solid components without tight coupling.\n * \n * Philosophy: Zero lock-in - Solid is optional, user decides.\n * \n * @module @flight-framework/core/rsc/adapters/solid\n */\n\nimport type { UIAdapter, ElementTypeInfo } from '../renderer.js';\n\n// ============================================================================\n// Solid Symbols\n// ============================================================================\n\n// Flight reference symbols\nconst CLIENT_REFERENCE = Symbol.for('flight.client.reference');\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Minimal Solid JSX Element interface\n */\ninterface SolidElement {\n t: string | ((props: unknown) => unknown); // tag or component\n p: Record<string, unknown> | null; // props\n r?: unknown; // key/ref\n}\n\n/**\n * Solid dependencies (user provides these)\n */\nexport interface SolidDependencies {\n /** solid-js module */\n solid: {\n createSignal: <T>(value: T) => [() => T, (v: T) => void];\n createMemo: <T>(fn: () => T) => () => T;\n createEffect: (fn: () => void) => void;\n children: (fn: () => unknown) => () => unknown[];\n splitProps: <T extends object, K extends keyof T>(\n props: T,\n ...keys: K[][]\n ) => [Pick<T, K>, Omit<T, K>][];\n For?: unknown;\n Show?: unknown;\n Switch?: unknown;\n Match?: unknown;\n Suspense?: unknown;\n ErrorBoundary?: unknown;\n };\n /** solid-js/web module */\n web: {\n render?: (code: () => unknown, element: Element) => () => void;\n hydrate?: (code: () => unknown, element: Element) => () => void;\n renderToString?: (code: () => unknown) => string;\n renderToStringAsync?: (code: () => unknown) => Promise<string>;\n isServer?: boolean;\n Dynamic?: unknown;\n };\n}\n\n// ============================================================================\n// Adapter Implementation\n// ============================================================================\n\n/**\n * Create Solid.js UI Adapter\n * \n * @example\n * ```typescript\n * import { createSolidAdapter } from '@flight-framework/core/rsc/adapters/solid';\n * import * as solid from 'solid-js';\n * import * as web from 'solid-js/web';\n * \n * const adapter = createSolidAdapter({ solid, web });\n * const renderer = createRenderer(adapter);\n * ```\n */\nexport function createSolidAdapter(deps?: SolidDependencies): UIAdapter {\n const { solid, web } = deps || {};\n\n return {\n name: 'solid',\n\n isElement(value: unknown): boolean {\n if (value === null || typeof value !== 'object') {\n return false;\n }\n\n // Solid JSX elements are plain objects with t (type) and p (props)\n const el = value as Record<string, unknown>;\n\n // Check for Solid's compiled JSX structure\n if ('t' in el && ('p' in el || el.p === null)) {\n return true;\n }\n\n // Check for function components (Solid lazy returns functions)\n if (typeof value === 'function') {\n return true;\n }\n\n return false;\n },\n\n getElementType(element: unknown): ElementTypeInfo {\n // Handle function directly (component or lazy)\n if (typeof element === 'function') {\n const fn = element 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 || 'SolidComponent'\n };\n }\n\n const el = element as SolidElement;\n const type = el.t;\n\n // String = host element (div, span, etc.)\n if (typeof type === 'string') {\n return { kind: 'host', tag: type };\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\n // Check for Solid built-in components\n if (solid) {\n if (type === solid.For) {\n return { kind: 'fragment' };\n }\n if (type === solid.Show) {\n return { kind: 'fragment' };\n }\n if (type === solid.Suspense) {\n return {\n kind: 'suspense',\n fallback: el.p?.fallback\n };\n }\n }\n\n return {\n kind: 'component',\n fn,\n name: fn.displayName || fn.name || 'Component'\n };\n }\n\n // Symbol types (Fragment, etc.)\n if (typeof type === 'symbol') {\n return { kind: 'fragment' };\n }\n\n return { kind: 'null' };\n },\n\n getProps(element: unknown): Record<string, unknown> {\n if (typeof element === 'function') {\n return {};\n }\n return (element as SolidElement).p || {};\n },\n\n getChildren(element: unknown): unknown[] {\n if (typeof element === 'function') {\n return [];\n }\n\n const props = (element as SolidElement).p;\n const children = props?.children;\n\n if (children === undefined || children === null) {\n return [];\n }\n\n // Solid children can be functions (for reactivity)\n if (typeof children === 'function') {\n // In SSR context, we can call the function\n if (web?.isServer) {\n try {\n const result = (children as () => unknown)();\n if (Array.isArray(result)) {\n return result;\n }\n return [result];\n } catch {\n return [];\n }\n }\n // On client, return as-is for hydration\n return [children];\n }\n\n if (Array.isArray(children)) {\n return children.flat();\n }\n\n return [children];\n },\n\n getKey(element: unknown): string | number | undefined {\n if (typeof element === 'function') {\n return undefined;\n }\n const ref = (element as SolidElement).r;\n if (typeof ref === 'string' || typeof ref === 'number') {\n return ref;\n }\n return undefined;\n },\n\n isClientBoundary(component: unknown): boolean {\n if (typeof component !== 'function' && typeof component !== 'object') {\n return false;\n }\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 // Solid JSX elements are plain objects with t (type) and p (props)\n return {\n t: component,\n p: props,\n r: null,\n } as SolidElement;\n },\n\n async renderToString(element: unknown): Promise<string> {\n if (web?.renderToStringAsync) {\n // Async SSR with Suspense support\n return web.renderToStringAsync(() => element);\n }\n if (web?.renderToString) {\n // Sync SSR\n return web.renderToString(() => element);\n }\n throw new Error(\n 'renderToString not provided. Pass solid-js/web when creating the adapter: ' +\n 'createSolidAdapter({ solid, web })'\n );\n },\n };\n}\n\n// ============================================================================\n// Solid Client Consumer\n// ============================================================================\n\n/**\n * Options for Solid consumer\n */\nexport interface SolidConsumerOptions {\n /** Registry of client components */\n registry?: Map<string, () => Promise<unknown>>;\n}\n\n/**\n * Create a Solid client-side consumer for Flight payloads\n */\nexport function createSolidConsumer(\n deps: SolidDependencies,\n options: SolidConsumerOptions = {}\n) {\n const { solid, web } = 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 Solid JSX\n */\n toSolidElement(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 // Create Solid element structure\n const children = element.children.map(c => this.toSolidElement(c));\n return {\n t: element.tag,\n p: { ...element.props, children },\n r: element.key,\n };\n }\n\n case 'fragment': {\n const children = element.children.map(c => this.toSolidElement(c));\n return children;\n }\n\n case 'suspense': {\n if (solid?.Suspense) {\n const fallback = this.toSolidElement(element.fallback);\n const children = element.children.map(c => this.toSolidElement(c));\n return {\n t: solid.Suspense,\n p: { fallback: () => fallback, children: () => children },\n };\n }\n return element.children.map(c => this.toSolidElement(c));\n }\n\n case 'client': {\n const loader = registry.get(element.ref);\n if (!loader) {\n console.warn(`[Flight] Client component not registered: ${element.ref}`);\n if (element.ssr) {\n return {\n t: 'div',\n p: { innerHTML: element.ssr },\n };\n }\n return null;\n }\n\n // Create lazy component for Solid\n // Solid's lazy is different - it expects a dynamic import\n const LazyComponent = async () => {\n const mod = await loader() as { default?: unknown };\n return mod.default ?? mod;\n };\n\n if (solid?.Suspense) {\n return {\n t: solid.Suspense,\n p: {\n fallback: () => element.ssr ? { t: 'div', p: { innerHTML: element.ssr } } : null,\n children: LazyComponent,\n },\n };\n }\n\n return { t: LazyComponent, p: {} };\n }\n\n case 'lazy': {\n if (element.fallback) {\n return this.toSolidElement(element.fallback);\n }\n return {\n t: 'div',\n p: { 'data-flight-pending': element.id }\n };\n }\n\n default:\n return null;\n }\n },\n\n /**\n * Hydrate Flight payload into DOM\n */\n hydrate(\n chunks: import('../payload.js').FlightChunk[],\n container: Element\n ): (() => void) | undefined {\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');\n }\n\n // Register client components\n for (const chunk of chunks) {\n if (chunk.type === 'C') {\n if (!registry.has(chunk.id)) {\n registry.set(chunk.id, () => import(/* webpackIgnore: true */ chunk.module));\n }\n }\n }\n\n const element = this.toSolidElement(rootChunk.tree);\n\n if (web?.hydrate) {\n return web.hydrate(() => element, container);\n }\n if (web?.render) {\n return web.render(() => element, container);\n }\n\n throw new Error('[Flight] Solid web.hydrate or web.render not provided');\n },\n };\n}\n\n// ============================================================================\n// Utility Types\n// ============================================================================\n\n/**\n * Type helper for Solid Server Component\n */\nexport type SolidServerComponent<P = Record<string, unknown>> = (\n props: P,\n ctx: import('../context.js').ServerContext\n) => Promise<unknown> | unknown;\n\n/**\n * Mark a Solid component as a client component\n */\nexport function markAsSolidClientComponent<T extends object>(\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\n/**\n * Check if running on server (Solid isServer helper)\n */\nexport function isServer(deps?: SolidDependencies): boolean {\n return deps?.web?.isServer ?? (typeof window === 'undefined');\n}\n"]}
@@ -221,5 +221,5 @@ function markAsVueClientComponent(component, moduleId, exportName = "default") {
221
221
  }
222
222
 
223
223
  export { createVueAdapter, createVueConsumer, markAsVueClientComponent };
224
- //# sourceMappingURL=chunk-2F2QU6RC.js.map
225
- //# sourceMappingURL=chunk-2F2QU6RC.js.map
224
+ //# sourceMappingURL=chunk-3UQJE3XZ.js.map
225
+ //# sourceMappingURL=chunk-3UQJE3XZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/rsc/adapters/vue.ts"],"names":["children"],"mappings":";AAiBA,IAAM,YAAA,mBAAe,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA;AACvC,IAAM,QAAA,mBAAW,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA;AACnC,IAAM,WAAA,mBAAc,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA;AACtC,IAAM,YAAA,mBAAe,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA;AACvC,IAAM,YAAA,mBAAe,MAAA,CAAO,GAAA,CAAI,OAAO,CAAA;AAGvC,IAAM,gBAAA,mBAAmB,MAAA,CAAO,GAAA,CAAI,yBAAyB,CAAA;AAyDtD,SAAS,iBAAiB,IAAA,EAAmC;AAChE,EAAA,MAAM,EAAE,GAAA,EAAK,cAAA,EAAe,GAAI,QAAQ,EAAC;AAEzC,EAAA,OAAO;AAAA,IACH,IAAA,EAAM,KAAA;AAAA,IAEN,UAAU,KAAA,EAAyB;AAC/B,MAAA,IAAI,KAAK,OAAA,EAAS;AACd,QAAA,OAAO,GAAA,CAAI,QAAQ,KAAK,CAAA;AAAA,MAC5B;AAEA,MAAA,OACI,OAAO,KAAA,KAAU,QAAA,IACjB,KAAA,KAAU,IAAA,IACT,MAAmB,WAAA,KAAgB,IAAA;AAAA,IAE5C,CAAA;AAAA,IAEA,eAAe,OAAA,EAAmC;AAC9C,MAAA,MAAM,KAAA,GAAQ,OAAA;AACd,MAAA,MAAM,OAAO,KAAA,CAAM,IAAA;AAGnB,MAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAC1B,QAAA,OAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,GAAA,EAAK,IAAA,EAAK;AAAA,MACrC;AAGA,MAAA,IAAI,OAAO,SAAS,QAAA,EAAU;AAE1B,QAAA,IAAI,IAAA,KAAS,YAAA,IAAgB,IAAA,KAAS,GAAA,EAAK,QAAA,EAAU;AACjD,UAAA,OAAO,EAAE,MAAM,UAAA,EAAW;AAAA,QAC9B;AAGA,QAAA,IAAI,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,GAAA,EAAK,IAAA,EAAM;AACzC,UAAA,MAAM,WAAW,KAAA,CAAM,QAAA;AACvB,UAAA,OAAO;AAAA,YACH,IAAA,EAAM,MAAA;AAAA,YACN,KAAA,EAAO,MAAA,CAAO,QAAA,IAAY,EAAE;AAAA,WAChC;AAAA,QACJ;AAGA,QAAA,IAAI,SAAS,WAAA,EAAa;AACtB,UAAA,OAAO,EAAE,MAAM,MAAA,EAAO;AAAA,QAC1B;AAGA,QAAA,IAAI,SAAS,YAAA,EAAc;AACvB,UAAA,OAAO;AAAA,YACH,IAAA,EAAM,UAAA;AAAA,YACN,QAAA,EAAU,MAAM,KAAA,EAAO;AAAA,WAC3B;AAAA,QACJ;AAGA,QAAA,IAAI,SAAS,YAAA,EAAc;AACvB,UAAA,OAAO,EAAE,MAAM,UAAA,EAAW;AAAA,QAC9B;AAEA,QAAA,OAAO,EAAE,MAAM,MAAA,EAAO;AAAA,MAC1B;AAGA,MAAA,IAAI,OAAO,IAAA,KAAS,QAAA,IAAY,IAAA,KAAS,IAAA,EAAM;AAC3C,QAAA,MAAM,IAAA,GAAO,IAAA;AAQb,QAAA,IAAI,KAAK,aAAA,EAAe;AACpB,UAAA,OAAO;AAAA,YACH,IAAA,EAAM,WAAA;AAAA,YACN,IAAI,MAAM,IAAA;AAAA,YACV,IAAA,EAAM,KAAK,IAAA,IAAQ;AAAA,WACvB;AAAA,QACJ;AAGA,QAAA,IAAI,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,MAAA,EAAQ;AAC3B,UAAA,OAAO;AAAA,YACH,IAAA,EAAM,WAAA;AAAA,YACN,EAAA,EAAI,CAAC,MAAA,KAAW;AAGZ,cAAA,OAAO,IAAA;AAAA,YACX,CAAA;AAAA,YACA,IAAA,EAAM,KAAK,IAAA,IAAQ;AAAA,WACvB;AAAA,QACJ;AAAA,MACJ;AAGA,MAAA,IAAI,OAAO,SAAS,UAAA,EAAY;AAC5B,QAAA,MAAM,EAAA,GAAK,IAAA;AAKX,QAAA,OAAO;AAAA,UACH,IAAA,EAAM,WAAA;AAAA,UACN,EAAA;AAAA,UACA,MAAM,EAAA,CAAG,WAAA,IAAe,EAAA,CAAG,MAAA,IAAU,GAAG,IAAA,IAAQ;AAAA,SACpD;AAAA,MACJ;AAEA,MAAA,OAAO,EAAE,MAAM,MAAA,EAAO;AAAA,IAC1B,CAAA;AAAA,IAEA,SAAS,OAAA,EAA2C;AAChD,MAAA,MAAM,KAAA,GAAQ,OAAA;AACd,MAAA,OAAO,KAAA,CAAM,SAAS,EAAC;AAAA,IAC3B,CAAA;AAAA,IAEA,YAAY,OAAA,EAA6B;AACrC,MAAA,MAAM,KAAA,GAAQ,OAAA;AACd,MAAA,MAAM,WAAW,KAAA,CAAM,QAAA;AAEvB,MAAA,IAAI,QAAA,KAAa,MAAA,IAAa,QAAA,KAAa,IAAA,EAAM;AAC7C,QAAA,OAAO,EAAC;AAAA,MACZ;AAGA,MAAA,IAAI,OAAO,QAAA,KAAa,QAAA,IAAY,OAAO,aAAa,QAAA,EAAU;AAC9D,QAAA,OAAO,CAAC,QAAQ,CAAA;AAAA,MACpB;AAGA,MAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,QAAQ,CAAA,EAAG;AACzB,QAAA,OAAO,SAAS,IAAA,EAAK;AAAA,MACzB;AAGA,MAAA,IAAI,OAAO,QAAA,KAAa,QAAA,IAAY,QAAA,KAAa,IAAA,EAAM;AACnD,QAAA,MAAM,KAAA,GAAQ,QAAA;AACd,QAAA,IAAI,OAAO,KAAA,CAAM,OAAA,KAAY,UAAA,EAAY;AACrC,UAAA,OAAO,MAAM,OAAA,EAAQ;AAAA,QACzB;AAAA,MACJ;AAEA,MAAA,OAAO,CAAC,QAAQ,CAAA;AAAA,IACpB,CAAA;AAAA,IAEA,OAAO,OAAA,EAA+C;AAClD,MAAA,MAAM,MAAO,OAAA,CAAqB,GAAA;AAClC,MAAA,OAAO,GAAA,KAAQ,OAAO,GAAA,GAAM,MAAA;AAAA,IAChC,CAAA;AAAA,IAEA,iBAAiB,SAAA,EAA6B;AAC1C,MAAA,IAAI,OAAO,SAAA,KAAc,UAAA,IAAc,OAAO,cAAc,QAAA,EAAU;AAClE,QAAA,OAAO,KAAA;AAAA,MACX;AAEA,MAAA,MAAM,IAAA,GAAO,SAAA;AAMb,MAAA,IAAI,IAAA,CAAK,eAAA,KAAoB,IAAA,EAAM,OAAO,IAAA;AAG1C,MAAA,IAAI,IAAA,CAAK,QAAA,KAAa,gBAAA,EAAkB,OAAO,IAAA;AAE/C,MAAA,OAAO,KAAA;AAAA,IACX,CAAA;AAAA,IAEA,aAAA,CACI,WACA,KAAA,EACO;AAEP,MAAA,IAAI,KAAK,CAAA,EAAG;AACR,QAAA,OAAO,GAAA,CAAI,CAAA,CAAE,SAAA,EAAW,KAAK,CAAA;AAAA,MACjC;AAGA,MAAA,OAAO;AAAA,QACH,WAAA,EAAa,IAAA;AAAA,QACb,IAAA,EAAM,SAAA;AAAA,QACN,KAAA;AAAA,QACA,GAAA,EAAK,IAAA;AAAA,QACL,QAAA,EAAU,MAAM,QAAA,IAAY;AAAA,OAChC;AAAA,IACJ,CAAA;AAAA,IAEA,MAAM,eAAe,OAAA,EAAmC;AACpD,MAAA,IAAI,cAAA,IAAkB,KAAK,YAAA,EAAc;AAErC,QAAA,MAAM,GAAA,GAAM,IAAI,YAAA,CAAa;AAAA,UACzB,QAAQ,MAAM;AAAA,SACjB,CAAA;AACD,QAAA,OAAO,eAAe,GAAG,CAAA;AAAA,MAC7B;AACA,MAAA,MAAM,IAAI,KAAA;AAAA,QACN;AAAA,OAEJ;AAAA,IACJ;AAAA,GACJ;AACJ;AAiBO,SAAS,iBAAA,CAAkB,IAAA,EAAuB,OAAA,GAA8B,EAAC,EAAG;AACvF,EAAA,MAAM,EAAE,KAAI,GAAI,IAAA;AAChB,EAAA,MAAM,EAAE,QAAA,mBAAW,IAAI,GAAA,IAAM,GAAI,OAAA;AAEjC,EAAA,OAAO;AAAA;AAAA;AAAA;AAAA,IAIH,QAAA,CAAS,IAAY,MAAA,EAAsC;AACvD,MAAA,QAAA,CAAS,GAAA,CAAI,IAAI,MAAM,CAAA;AAAA,IAC3B,CAAA;AAAA;AAAA;AAAA;AAAA,IAKA,aAAa,OAAA,EAAyD;AAClE,MAAA,QAAQ,QAAQ,MAAA;AAAQ,QACpB,KAAK,MAAA;AACD,UAAA,OAAO,IAAA;AAAA,QAEX,KAAK,MAAA;AACD,UAAA,OAAO,OAAA,CAAQ,KAAA;AAAA,QAEnB,KAAK,MAAA,EAAQ;AACT,UAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,CAAS,GAAA,CAAI,OAAK,IAAA,CAAK,YAAA,CAAa,CAAC,CAAC,CAAA;AAC/D,UAAA,OAAO,GAAA,CAAI,CAAA;AAAA,YACP,OAAA,CAAQ,GAAA;AAAA,YACR,EAAE,GAAG,OAAA,CAAQ,KAAA,EAAO,GAAA,EAAK,QAAQ,GAAA,EAAI;AAAA,YACrC;AAAA,WACJ;AAAA,QACJ;AAAA,QAEA,KAAK,UAAA,EAAY;AACb,UAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,CAAS,GAAA,CAAI,OAAK,IAAA,CAAK,YAAA,CAAa,CAAC,CAAC,CAAA;AAC/D,UAAA,OAAO,GAAA,CAAI,CAAA,CAAE,GAAA,CAAI,QAAA,EAAW,MAAM,QAAQ,CAAA;AAAA,QAC9C;AAAA,QAEA,KAAK,UAAA,EAAY;AACb,UAAA,IAAI,IAAI,QAAA,EAAU;AACd,YAAA,MAAM,QAAA,GAAW,IAAA,CAAK,YAAA,CAAa,OAAA,CAAQ,QAAQ,CAAA;AACnD,YAAA,MAAMA,SAAAA,GAAW,QAAQ,QAAA,CAAS,GAAA,CAAI,OAAK,IAAA,CAAK,YAAA,CAAa,CAAC,CAAC,CAAA;AAC/D,YAAA,OAAO,GAAA,CAAI,CAAA,CAAE,GAAA,CAAI,QAAA,EAAU,IAAA,EAAM;AAAA,cAC7B,SAAS,MAAMA,SAAAA;AAAA,cACf,UAAU,MAAM;AAAA,aACnB,CAAA;AAAA,UACL;AAEA,UAAA,MAAM,QAAA,GAAW,QAAQ,QAAA,CAAS,GAAA,CAAI,OAAK,IAAA,CAAK,YAAA,CAAa,CAAC,CAAC,CAAA;AAC/D,UAAA,OAAO,GAAA,CAAI,CAAA,CAAE,GAAA,CAAI,QAAA,EAAW,MAAM,QAAQ,CAAA;AAAA,QAC9C;AAAA,QAEA,KAAK,QAAA,EAAU;AACX,UAAA,MAAM,MAAA,GAAS,QAAA,CAAS,GAAA,CAAI,OAAA,CAAQ,GAAG,CAAA;AACvC,UAAA,IAAI,CAAC,MAAA,EAAQ;AACT,YAAA,OAAA,CAAQ,IAAA,CAAK,CAAA,0CAAA,EAA6C,OAAA,CAAQ,GAAG,CAAA,CAAE,CAAA;AACvE,YAAA,IAAI,QAAQ,GAAA,EAAK;AACb,cAAA,OAAO,GAAA,CAAI,EAAE,KAAA,EAAO;AAAA,gBAChB,WAAW,OAAA,CAAQ;AAAA,eACtB,CAAA;AAAA,YACL;AACA,YAAA,OAAO,IAAA;AAAA,UACX;AAGA,UAAA,MAAM,cAAA,GAAiB;AAAA,YACnB,MAAM,KAAA,GAAQ;AACV,cAAA,MAAM,GAAA,GAAM,MAAM,MAAA,EAAO;AACzB,cAAA,OAAO,MAAM,GAAA,CAAI,CAAA,CAAE,GAAA,CAAI,WAAW,GAAc,CAAA;AAAA,YACpD;AAAA,WACJ;AAEA,UAAA,OAAO,GAAA,CAAI,EAAE,cAAc,CAAA;AAAA,QAC/B;AAAA,QAEA,KAAK,MAAA,EAAQ;AACT,UAAA,IAAI,QAAQ,QAAA,EAAU;AAClB,YAAA,OAAO,IAAA,CAAK,YAAA,CAAa,OAAA,CAAQ,QAAQ,CAAA;AAAA,UAC7C;AACA,UAAA,OAAO,IAAI,CAAA,CAAE,KAAA,EAAO,EAAE,qBAAA,EAAuB,OAAA,CAAQ,IAAI,CAAA;AAAA,QAC7D;AAAA,QAEA;AACI,UAAA,OAAO,IAAA;AAAA;AACf,IACJ;AAAA,GACJ;AACJ;AAiBO,SAAS,wBAAA,CACZ,SAAA,EACA,QAAA,EACA,UAAA,GAAa,SAAA,EACZ;AACD,EAAA,MAAM,MAAA,GAAS,SAAA;AAOf,EAAA,MAAA,CAAO,QAAA,GAAW,gBAAA;AAClB,EAAA,MAAA,CAAO,eAAA,GAAkB,IAAA;AACzB,EAAA,MAAA,CAAO,eAAA,GAAkB,QAAA;AACzB,EAAA,MAAA,CAAO,eAAA,GAAkB,UAAA;AAEzB,EAAA,OAAO,MAAA;AACX","file":"chunk-3UQJE3XZ.js","sourcesContent":["/**\n * @flight-framework/core - Vue UI Adapter\n * \n * Adapter for using Vue 3 with Flight Server Components.\n * Enables Flight to render Vue components without tight coupling.\n * \n * Philosophy: Zero lock-in - Vue is optional, user decides.\n * \n * @module @flight-framework/core/rsc/adapters/vue\n */\n\nimport type { UIAdapter, ElementTypeInfo } from '../renderer.js';\n\n// ============================================================================\n// Vue Symbols (Vue 3 internal markers)\n// ============================================================================\n\nconst VUE_FRAGMENT = Symbol.for('v-fgt');\nconst VUE_TEXT = Symbol.for('v-txt');\nconst VUE_COMMENT = Symbol.for('v-cmt');\nconst VUE_SUSPENSE = Symbol.for('v-sus');\nconst VUE_TELEPORT = Symbol.for('v-tel');\n\n// Flight reference symbols\nconst CLIENT_REFERENCE = Symbol.for('flight.client.reference');\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Minimal Vue VNode interface\n */\ninterface VueVNode {\n __v_isVNode?: boolean;\n type: unknown;\n props: Record<string, unknown> | null;\n children: unknown;\n key: string | number | null;\n component?: unknown;\n shapeFlag?: number;\n}\n\n/**\n * Vue dependencies (user provides these)\n */\nexport interface VueDependencies {\n /** Vue module */\n Vue: {\n h: (type: unknown, props?: unknown, children?: unknown) => VueVNode;\n isVNode: (value: unknown) => boolean;\n createSSRApp?: (rootComponent: unknown) => unknown;\n Fragment?: symbol;\n Suspense?: unknown;\n Text?: symbol;\n };\n /** renderToString from vue/server-renderer (optional - for SSR) */\n renderToString?: (app: unknown) => Promise<string>;\n}\n\n// ============================================================================\n// Adapter Implementation\n// ============================================================================\n\n/**\n * Create Vue UI Adapter\n * \n * @example\n * ```typescript\n * import { createVueAdapter } from '@flight-framework/core/rsc/adapters/vue';\n * import * as Vue from 'vue';\n * import { renderToString } from 'vue/server-renderer';\n * \n * const adapter = createVueAdapter({\n * Vue,\n * renderToString,\n * });\n * \n * const renderer = createRenderer(adapter);\n * ```\n */\nexport function createVueAdapter(deps?: VueDependencies): UIAdapter {\n const { Vue, renderToString } = deps || {};\n\n return {\n name: 'vue',\n\n isElement(value: unknown): boolean {\n if (Vue?.isVNode) {\n return Vue.isVNode(value);\n }\n // Fallback: check for __v_isVNode marker\n return (\n typeof value === 'object' &&\n value !== null &&\n (value as VueVNode).__v_isVNode === true\n );\n },\n\n getElementType(element: unknown): ElementTypeInfo {\n const vnode = element as VueVNode;\n const type = vnode.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 // Fragment\n if (type === VUE_FRAGMENT || type === Vue?.Fragment) {\n return { kind: 'fragment' };\n }\n\n // Text\n if (type === VUE_TEXT || type === Vue?.Text) {\n const children = vnode.children;\n return {\n kind: 'text',\n value: String(children ?? '')\n };\n }\n\n // Comment\n if (type === VUE_COMMENT) {\n return { kind: 'null' };\n }\n\n // Suspense\n if (type === VUE_SUSPENSE) {\n return {\n kind: 'suspense',\n fallback: vnode.props?.fallback\n };\n }\n\n // Teleport (treat as fragment for RSC)\n if (type === VUE_TELEPORT) {\n return { kind: 'fragment' };\n }\n\n return { kind: 'null' };\n }\n\n // Object component (Options API or async component)\n if (typeof type === 'object' && type !== null) {\n const comp = type as {\n name?: string;\n setup?: unknown;\n render?: unknown;\n __asyncLoader?: unknown;\n };\n\n // Async component\n if (comp.__asyncLoader) {\n return {\n kind: 'component',\n fn: () => null,\n name: comp.name || 'AsyncComponent'\n };\n }\n\n // Options API component\n if (comp.setup || comp.render) {\n return {\n kind: 'component',\n fn: (_props) => {\n // Vue components need to be rendered differently\n // This is a placeholder - actual rendering uses renderToString\n return null;\n },\n name: comp.name || 'VueComponent',\n };\n }\n }\n\n // Function component (Composition API)\n if (typeof type === 'function') {\n const fn = type as ((props: Record<string, unknown>) => unknown) & {\n displayName?: string;\n name?: string;\n __name?: string;\n };\n return {\n kind: 'component',\n fn,\n name: fn.displayName || fn.__name || fn.name || 'Component'\n };\n }\n\n return { kind: 'null' };\n },\n\n getProps(element: unknown): Record<string, unknown> {\n const vnode = element as VueVNode;\n return vnode.props || {};\n },\n\n getChildren(element: unknown): unknown[] {\n const vnode = element as VueVNode;\n const children = vnode.children;\n\n if (children === undefined || children === null) {\n return [];\n }\n\n // String children\n if (typeof children === 'string' || typeof children === 'number') {\n return [children];\n }\n\n // Array children\n if (Array.isArray(children)) {\n return children.flat();\n }\n\n // Slots object\n if (typeof children === 'object' && children !== null) {\n const slots = children as Record<string, () => unknown[]>;\n if (typeof slots.default === 'function') {\n return slots.default();\n }\n }\n\n return [children];\n },\n\n getKey(element: unknown): string | number | undefined {\n const key = (element as VueVNode).key;\n return key !== null ? key : undefined;\n },\n\n isClientBoundary(component: unknown): boolean {\n if (typeof component !== 'function' && typeof component !== 'object') {\n return false;\n }\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 Vue VNode using h() if available\n if (Vue?.h) {\n return Vue.h(component, props);\n }\n\n // Fallback: create VNode structure directly\n return {\n __v_isVNode: true,\n type: component,\n props,\n key: null,\n children: props.children ?? null,\n } as VueVNode;\n },\n\n async renderToString(element: unknown): Promise<string> {\n if (renderToString && Vue?.createSSRApp) {\n // Create SSR app wrapper\n const app = Vue.createSSRApp({\n render: () => element\n });\n return renderToString(app);\n }\n throw new Error(\n 'renderToString not provided. Pass Vue and renderToString when creating the adapter: ' +\n 'createVueAdapter({ Vue, renderToString })'\n );\n },\n };\n}\n\n// ============================================================================\n// Vue Client Consumer\n// ============================================================================\n\n/**\n * Options for Vue consumer\n */\nexport interface VueConsumerOptions {\n /** Registry of client components */\n registry?: Map<string, () => Promise<unknown>>;\n}\n\n/**\n * Create a Vue client-side consumer for Flight payloads\n */\nexport function createVueConsumer(deps: VueDependencies, options: VueConsumerOptions = {}) {\n const { Vue } = 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 Vue VNodes\n */\n toVueElement(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.toVueElement(c));\n return Vue.h(\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.toVueElement(c));\n return Vue.h(Vue.Fragment!, null, children);\n }\n\n case 'suspense': {\n if (Vue.Suspense) {\n const fallback = this.toVueElement(element.fallback);\n const children = element.children.map(c => this.toVueElement(c));\n return Vue.h(Vue.Suspense, null, {\n default: () => children,\n fallback: () => fallback,\n });\n }\n // Fallback: render children directly\n const children = element.children.map(c => this.toVueElement(c));\n return Vue.h(Vue.Fragment!, null, children);\n }\n\n case 'client': {\n const loader = registry.get(element.ref);\n if (!loader) {\n console.warn(`[Flight] Client component not registered: ${element.ref}`);\n if (element.ssr) {\n return Vue.h('div', {\n innerHTML: element.ssr\n });\n }\n return null;\n }\n\n // Create async component\n const AsyncComponent = {\n async setup() {\n const mod = await loader() as { default?: unknown };\n return () => Vue.h(mod.default ?? mod as unknown);\n }\n };\n\n return Vue.h(AsyncComponent);\n }\n\n case 'lazy': {\n if (element.fallback) {\n return this.toVueElement(element.fallback);\n }\n return Vue.h('div', { 'data-flight-pending': element.id });\n }\n\n default:\n return null;\n }\n },\n };\n}\n\n// ============================================================================\n// Utility Types\n// ============================================================================\n\n/**\n * Type helper for Vue Server Component\n */\nexport type VueServerComponent<P = Record<string, unknown>> = (\n props: P,\n ctx: import('../context.js').ServerContext\n) => Promise<VueVNode> | VueVNode;\n\n/**\n * Mark a Vue component as a client component\n */\nexport function markAsVueClientComponent<T extends object>(\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"]}
@@ -424,5 +424,5 @@ function pathMatches(routePath, actualPath) {
424
424
  }
425
425
 
426
426
  export { createFileRouter, extractRouteParams, findInterceptingRoute, getSlotDefault, getSlotNames, loadRoutes, resolveParallelSlots, scanRoutes, shouldDismissIntercept };
427
- //# sourceMappingURL=chunk-3KRBRSRJ.js.map
428
- //# sourceMappingURL=chunk-3KRBRSRJ.js.map
427
+ //# sourceMappingURL=chunk-4U7CJVNQ.js.map
428
+ //# sourceMappingURL=chunk-4U7CJVNQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/file-router/index.ts"],"names":[],"mappings":"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","file":"chunk-4U7CJVNQ.js","sourcesContent":["/**\n * @flight-framework/core - File Router\n * \n * Auto-discovery of routes from file system.\n * Similar to Next.js App Router and Nuxt server/api patterns.\n */\n\nimport { readdir } from 'node:fs/promises';\nimport { join, basename, extname } from 'node:path';\nimport { pathToFileURL } from 'node:url';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport type HttpMethod = 'GET' | 'POST' | 'PUT' | 'DELETE' | 'PATCH' | 'HEAD' | 'OPTIONS';\n\nexport type Handler = (context: unknown) => Response | Promise<Response>;\nexport type Middleware = (context: unknown, next: () => Promise<Response>) => Response | Promise<Response>;\n\nexport interface FileRoute {\n /** HTTP method (GET, POST, etc) or 'ALL' */\n method: HttpMethod | 'ALL';\n /** Route path with params (e.g., /users/:id) */\n path: string;\n /** Original file path */\n filePath: string;\n /** Handler function (for APIs) */\n handler?: Handler;\n /** Route-specific middleware */\n middleware?: Middleware[];\n /** Route type: 'page' for SSR pages, 'api' for API endpoints */\n type: 'page' | 'api';\n /** Component function (for pages) */\n component?: () => unknown;\n /** Page metadata (title, description, etc) */\n meta?: Record<string, unknown>;\n /** Parallel route slot name (for @folder convention) */\n slot?: string;\n /** Intercepting route info (for (.) (..) (...) convention) */\n interceptInfo?: {\n /** Number of levels to intercept: 1 = same, 2 = parent, 3+ = root */\n level: number;\n /** Target route segment to intercept */\n target: string;\n /** Original path that triggers interception */\n interceptPath: string;\n };\n}\n\nexport interface FileRouterOptions {\n /** Root directory to scan (default: src/routes) */\n directory: string;\n /** File extensions to consider (default: ['.ts', '.js']) */\n extensions?: string[];\n /** Whether to watch for changes (default: false in prod) */\n watch?: boolean;\n /** \n * Custom module loader for development with Vite.\n * Pass vite.ssrLoadModule to load TSX files correctly.\n * Falls back to native import() if not provided.\n */\n moduleLoader?: (filePath: string) => Promise<any>;\n}\n\nexport interface ScanResult {\n routes: FileRoute[];\n errors: string[];\n}\n\n// ============================================================================\n// File Scanner\n// ============================================================================\n\n/**\n * Scan a directory for route files\n */\nexport async function scanRoutes(options: FileRouterOptions): Promise<ScanResult> {\n const {\n directory,\n extensions = ['.ts', '.js'],\n } = options;\n\n const routes: FileRoute[] = [];\n const errors: string[] = [];\n\n async function scanDir(dir: string, basePath: string = ''): Promise<void> {\n try {\n const entries = await readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n\n if (entry.isDirectory()) {\n // Skip hidden directories and node_modules\n if (entry.name.startsWith('.') || entry.name === 'node_modules') {\n continue;\n }\n\n // Detect parallel route slots (@folder convention)\n if (entry.name.startsWith('@')) {\n const slotName = entry.name.slice(1);\n // Scan slot directory and mark routes with slot name\n const slotRoutes = await scanSlotDir(fullPath, basePath, slotName, extensions);\n routes.push(...slotRoutes);\n continue;\n }\n\n // Detect intercepting routes ((.) (..) (...) convention)\n const interceptMatch = entry.name.match(/^\\((\\.+)\\)(.+)$/);\n if (interceptMatch) {\n const level = interceptMatch[1].length;\n const targetSegment = interceptMatch[2];\n // Scan intercept directory and mark routes with interceptInfo\n const interceptRoutes = await scanInterceptDir(\n fullPath,\n basePath,\n level,\n targetSegment,\n extensions\n );\n routes.push(...interceptRoutes);\n continue;\n }\n\n // Detect route groups ((groupName) without dots - organizational only)\n // Route groups allow organizing routes without affecting URL structure\n // Example: (marketing)/about.page.tsx -> /about (not /marketing/about)\n const groupMatch = entry.name.match(/^\\(([^.]+)\\)$/);\n if (groupMatch) {\n // This is a route group - scan contents but don't add group to path\n await scanDir(fullPath, basePath);\n continue;\n }\n\n // Recurse into subdirectory\n await scanDir(fullPath, `${basePath}/${entry.name}`);\n } else if (entry.isFile()) {\n const ext = extname(entry.name);\n\n if (!extensions.includes(ext)) {\n continue;\n }\n\n // Parse route from filename\n const routeInfo = parseRouteFile(entry.name, basePath);\n\n if (routeInfo && routeInfo.method && routeInfo.path) {\n routes.push({\n method: routeInfo.method,\n path: routeInfo.path,\n filePath: fullPath,\n type: routeInfo.type,\n });\n }\n }\n }\n } catch (error) {\n errors.push(`Failed to scan ${dir}: ${error}`);\n }\n }\n\n await scanDir(directory);\n\n return { routes, errors };\n}\n\n/**\n * Scan a parallel route slot directory\n */\nasync function scanSlotDir(\n dir: string,\n basePath: string,\n slotName: string,\n extensions: string[] = ['.ts', '.js', '.tsx', '.jsx']\n): Promise<FileRoute[]> {\n const routes: FileRoute[] = [];\n\n try {\n const entries = await readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n\n if (entry.isFile()) {\n const ext = extname(entry.name);\n\n if (!extensions.includes(ext)) {\n continue;\n }\n\n const routeInfo = parseRouteFile(entry.name, basePath);\n\n if (routeInfo && routeInfo.method && routeInfo.path) {\n routes.push({\n method: routeInfo.method,\n path: routeInfo.path,\n filePath: fullPath,\n type: routeInfo.type,\n slot: slotName,\n });\n }\n }\n }\n } catch (error) {\n console.error(`[Flight] Failed to scan slot @${slotName}:`, error);\n }\n\n return routes;\n}\n\n/**\n * Scan an intercepting route directory\n * Uses (.) (..) (...) convention similar to Next.js\n * - (.)segment - intercepts from same level\n * - (..)segment - intercepts from parent level\n * - (...)segment - intercepts from root\n */\nasync function scanInterceptDir(\n dir: string,\n basePath: string,\n level: number,\n targetSegment: string,\n extensions: string[] = ['.ts', '.js', '.tsx', '.jsx']\n): Promise<FileRoute[]> {\n const routes: FileRoute[] = [];\n\n // Calculate the intercept path based on level\n const pathParts = basePath.split('/').filter(Boolean);\n let interceptPath: string;\n\n if (level === 1) {\n // (.) - Same level, intercepts sibling route\n interceptPath = `${basePath}/${targetSegment}`;\n } else if (level === 2) {\n // (..) - Parent level\n pathParts.pop();\n interceptPath = `/${pathParts.join('/')}/${targetSegment}`;\n } else {\n // (...) - Root level (3 or more dots)\n interceptPath = `/${targetSegment}`;\n }\n\n try {\n const entries = await readdir(dir, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = join(dir, entry.name);\n\n if (entry.isFile()) {\n const ext = extname(entry.name);\n\n if (!extensions.includes(ext)) {\n continue;\n }\n\n const routeInfo = parseRouteFile(entry.name, basePath);\n\n if (routeInfo && routeInfo.method && routeInfo.path) {\n routes.push({\n method: routeInfo.method,\n path: routeInfo.path,\n filePath: fullPath,\n type: routeInfo.type,\n interceptInfo: {\n level,\n target: targetSegment,\n interceptPath: interceptPath.replace(/\\/+/g, '/') || '/',\n },\n });\n }\n } else if (entry.isDirectory()) {\n // Recurse into subdirectories within intercept folder\n const subRoutes = await scanInterceptDir(\n fullPath,\n `${basePath}/${entry.name}`,\n level,\n targetSegment,\n extensions\n );\n routes.push(...subRoutes);\n }\n }\n } catch (error) {\n console.error(`[Flight] Failed to scan intercept (${'.'.repeat(level)})${targetSegment}:`, error);\n }\n\n return routes;\n}\n\n// ============================================================================\n// Route Parser\n// ============================================================================\n\ninterface ParsedRoute {\n method: HttpMethod | 'ALL';\n path: string;\n type: 'page' | 'api';\n}\n\n/**\n * Parse route information from filename and path\n * \n * Patterns:\n * - index.ts → /\n * - users.ts → /users\n * - users.get.ts → GET /users (API)\n * - users.post.ts → POST /users (API)\n * - about.page.tsx → GET /about (Page)\n * - blog/[slug].page.tsx → GET /blog/:slug (Page)\n * - [id].ts → /:id\n * - [...slug].ts → /* (catch-all)\n * - [[...slug]].ts → /* (optional catch-all)\n */\nfunction parseRouteFile(filename: string, basePath: string): ParsedRoute | null {\n const ext = extname(filename);\n const nameWithoutExt = basename(filename, ext);\n\n // Skip files starting with underscore (private)\n if (nameWithoutExt.startsWith('_')) {\n return null;\n }\n\n // Detect route type\n let type: 'page' | 'api' = 'api';\n let routeName = nameWithoutExt;\n let method: HttpMethod | 'ALL' = 'ALL';\n\n // Check for page suffix (e.g., about.page.tsx, index.page.tsx)\n const pageMatch = nameWithoutExt.match(/^(.+)?\\.page$/i);\n if (pageMatch) {\n type = 'page';\n method = 'GET'; // Pages are always GET\n routeName = pageMatch[1] || 'index';\n } else {\n // Check for method suffix (e.g., users.get.ts)\n const methodMatch = nameWithoutExt.match(/^(.+)\\.(get|post|put|delete|patch|head|options)$/i);\n if (methodMatch) {\n routeName = methodMatch[1] || nameWithoutExt;\n method = (methodMatch[2] || 'ALL').toUpperCase() as HttpMethod;\n }\n }\n\n // Also check if file is in /api/ directory\n if (basePath.startsWith('/api') || basePath.includes('/api/')) {\n type = 'api';\n }\n\n // Build route path\n let path = basePath;\n\n if (routeName !== 'index') {\n path = `${basePath}/${convertToRoutePath(routeName)}`;\n }\n\n // Ensure path starts with /\n if (!path.startsWith('/')) {\n path = '/' + path;\n }\n\n // Remove trailing slash (except for root)\n if (path !== '/' && path.endsWith('/')) {\n path = path.slice(0, -1);\n }\n\n return { method, path, type };\n}\n\n/**\n * Convert filename segment to route path segment\n * \n * - [id] → :id\n * - [...slug] → *\n * - [[...slug]] → *?\n */\nfunction convertToRoutePath(name: string): string {\n // Optional catch-all: [[...slug]]\n if (name.startsWith('[[...') && name.endsWith(']]')) {\n const paramName = name.slice(5, -2);\n return `:${paramName}*`;\n }\n\n // Catch-all: [...slug]\n if (name.startsWith('[...') && name.endsWith(']')) {\n const paramName = name.slice(4, -1);\n return `:${paramName}+`;\n }\n\n // Dynamic param: [id]\n if (name.startsWith('[') && name.endsWith(']')) {\n const paramName = name.slice(1, -1);\n return `:${paramName}`;\n }\n\n return name;\n}\n\n// ============================================================================\n// Route Loader\n// ============================================================================\n\n/**\n * Load routes with their handlers or components\n * @param scanResult - Result from scanRoutes\n * @param moduleLoader - Optional custom loader (use vite.ssrLoadModule for dev)\n */\nexport async function loadRoutes(\n scanResult: ScanResult,\n moduleLoader?: (filePath: string) => Promise<any>\n): Promise<FileRoute[]> {\n const loadedRoutes: FileRoute[] = [];\n\n for (const route of scanResult.routes) {\n try {\n // Use custom loader if provided (Vite ssrLoadModule for TSX)\n // Otherwise fall back to native import() for production\n let module: any;\n if (moduleLoader) {\n module = await moduleLoader(route.filePath);\n } else {\n // Convert to file:// URL for Windows ESM compatibility\n const fileUrl = pathToFileURL(route.filePath).href;\n module = await import(fileUrl);\n }\n\n // Handle PAGE routes\n if (route.type === 'page') {\n // Pages export default component\n const component = module.default;\n const meta = module.meta || module.metadata || {};\n\n if (component) {\n loadedRoutes.push({\n ...route,\n component,\n meta,\n });\n }\n continue;\n }\n\n // Handle API routes\n if (route.method === 'ALL') {\n // Look for named exports: GET, POST, PUT, DELETE, etc\n const methods: HttpMethod[] = ['GET', 'POST', 'PUT', 'DELETE', 'PATCH', 'HEAD', 'OPTIONS'];\n\n for (const method of methods) {\n if (typeof module[method] === 'function') {\n loadedRoutes.push({\n ...route,\n method,\n handler: module[method],\n });\n }\n }\n\n // Also check for default export as handler\n if (typeof module.default === 'function') {\n loadedRoutes.push({\n ...route,\n method: 'ALL',\n handler: module.default,\n });\n }\n } else {\n // Specific method from filename suffix\n const handler = module[route.method] || module.default;\n\n if (typeof handler === 'function') {\n loadedRoutes.push({\n ...route,\n handler,\n });\n }\n }\n } catch (error) {\n console.error(`[Flight] Failed to load route ${route.filePath}:`, error);\n }\n }\n\n return loadedRoutes;\n}\n\n// ============================================================================\n// File Router Factory\n// ============================================================================\n\nexport interface FileRouter {\n routes: FileRoute[];\n refresh: () => Promise<void>;\n}\n\n/**\n * Create a file-based router\n * \n * @example\n * ```typescript\n * import { createFileRouter } from '@flight-framework/core/file-router';\n * import { createServer } from '@flight-framework/http';\n * \n * const router = await createFileRouter({ directory: './src/routes' });\n * const app = createServer();\n * \n * // Register all discovered routes\n * for (const route of router.routes) {\n * app[route.method.toLowerCase()](route.path, route.handler);\n * }\n * ```\n */\nexport async function createFileRouter(options: FileRouterOptions): Promise<FileRouter> {\n let routes: FileRoute[] = [];\n const { moduleLoader } = options;\n\n async function refresh(): Promise<void> {\n const scanResult = await scanRoutes(options);\n\n if (scanResult.errors.length > 0) {\n console.warn('[Flight] Route scan errors:', scanResult.errors);\n }\n\n routes = await loadRoutes(scanResult, moduleLoader);\n\n console.log(`[Flight] Loaded ${routes.length} routes from ${options.directory}`);\n }\n\n // Initial load\n await refresh();\n\n return {\n get routes() {\n return routes;\n },\n refresh,\n };\n}\n\n// ============================================================================\n// Parallel Routes Resolution\n// ============================================================================\n\n/**\n * Resolved parallel route slots for a layout.\n * Each slot name maps to its resolved component or null if not matched.\n */\nexport interface ResolvedSlots {\n [slotName: string]: {\n /** The component to render */\n component: () => unknown;\n /** The full route information */\n route: FileRoute;\n } | null;\n}\n\n/**\n * Resolve parallel route slots for a given path.\n * \n * Parallel routes use the @folder convention to define named slots\n * that can render alongside the main content in a layout.\n * \n * @param routes - All loaded routes from the file router\n * @param currentPath - The current URL path to resolve slots for\n * @returns Object mapping slot names to their resolved components\n * \n * @example\n * ```typescript\n * // Given routes from @modal/ and @sidebar/ directories\n * const slots = resolveParallelSlots(router.routes, '/dashboard');\n * \n * // In layout:\n * if (slots.modal) {\n * renderModal(slots.modal.component);\n * }\n * ```\n */\nexport function resolveParallelSlots(\n routes: FileRoute[],\n currentPath: string\n): ResolvedSlots {\n const slots: ResolvedSlots = {};\n const normalizedPath = normalizePath(currentPath);\n\n // Get all unique slot names from routes\n const slotNames = new Set<string>();\n for (const route of routes) {\n if (route.slot) {\n slotNames.add(route.slot);\n }\n }\n\n // For each slot, find matching route or default\n for (const slotName of slotNames) {\n const slotRoutes = routes.filter(r => r.slot === slotName);\n\n // Find exact match for current path\n let matchingRoute = slotRoutes.find(r => {\n const routePath = normalizePath(r.path);\n return pathMatches(routePath, normalizedPath);\n });\n\n // If no match, look for default.page in the slot\n if (!matchingRoute) {\n matchingRoute = slotRoutes.find(r =>\n r.path.endsWith('/default') || r.filePath.includes('default.page')\n );\n }\n\n if (matchingRoute && matchingRoute.component) {\n slots[slotName] = {\n component: matchingRoute.component,\n route: matchingRoute,\n };\n } else {\n // Slot has no matching content for this path\n slots[slotName] = null;\n }\n }\n\n return slots;\n}\n\n/**\n * Get the default page for an unmatched slot.\n * \n * When a parallel route slot doesn't have a matching route for the current path,\n * it should render its default.page if one exists, or null.\n * \n * @param routes - All loaded routes\n * @param slotName - Name of the slot (without @)\n * @param basePath - Base path to search from\n * @returns The default route for the slot, or null\n */\nexport function getSlotDefault(\n routes: FileRoute[],\n slotName: string,\n basePath: string = ''\n): FileRoute | null {\n const normalizedBase = normalizePath(basePath);\n\n return routes.find(r =>\n r.slot === slotName &&\n (r.filePath.includes('default.page') || r.path === `${normalizedBase}/default`)\n ) || null;\n}\n\n/**\n * Get all slot names used in the routes.\n * \n * @param routes - All loaded routes\n * @returns Array of unique slot names\n */\nexport function getSlotNames(routes: FileRoute[]): string[] {\n const names = new Set<string>();\n for (const route of routes) {\n if (route.slot) {\n names.add(route.slot);\n }\n }\n return Array.from(names);\n}\n\n// ============================================================================\n// Intercepting Routes Resolution\n// ============================================================================\n\n/**\n * Check if a navigation should be intercepted by an intercepting route.\n * \n * Intercepting routes use the (.) (..) (...) convention:\n * - (.)segment - intercepts from same level\n * - (..)segment - intercepts from parent level \n * - (...)segment - intercepts from root\n * \n * @param routes - All loaded routes\n * @param fromPath - Current path where navigation originates\n * @param toPath - Target path the user wants to navigate to\n * @returns The intercepting route if found, null otherwise\n * \n * @example\n * ```typescript\n * // User is on /feed and clicks link to /photo/123\n * const intercepted = findInterceptingRoute(routes, '/feed', '/photo/123');\n * \n * if (intercepted) {\n * // Render intercepted.component as modal instead of navigating\n * showModal(intercepted);\n * }\n * ```\n */\nexport function findInterceptingRoute(\n routes: FileRoute[],\n fromPath: string,\n toPath: string\n): FileRoute | null {\n const normalizedFrom = normalizePath(fromPath);\n const normalizedTo = normalizePath(toPath);\n\n // Filter to only intercepting routes\n const interceptingRoutes = routes.filter(r => r.interceptInfo);\n\n for (const route of interceptingRoutes) {\n const { interceptInfo } = route;\n if (!interceptInfo) continue;\n\n // Check if the interceptPath matches the target path\n const interceptPath = normalizePath(interceptInfo.interceptPath);\n\n if (!pathMatches(interceptPath, normalizedTo)) {\n continue;\n }\n\n // Check if we're navigating from a valid origin based on level\n // For level 1 (.), the intercept route is at same level as navigation origin\n // For level 2 (..), the intercept route is one level up from navigation origin\n // For level 3+ (...), intercepts from anywhere\n\n let validOrigin = false;\n\n // Find the intercept marker position in route path\n // Route path example: /feed/(.)photo/:id -> base is /feed\n const routePathStr = normalizePath(route.path);\n const interceptMarkerMatch = routePathStr.match(/\\/\\(\\.+\\)/);\n\n if (interceptInfo.level >= 3) {\n // (...) - Root level: intercepts from anywhere\n validOrigin = true;\n } else if (interceptMarkerMatch && interceptMarkerMatch.index !== undefined) {\n // Extract the base path before the intercept marker\n const routeBase = routePathStr.substring(0, interceptMarkerMatch.index);\n\n if (interceptInfo.level === 1) {\n // (.) - Same level: origin should be at or under the route base\n // Route at /feed/(.)photo, origin should be /feed or /feed/*\n validOrigin = normalizedFrom === routeBase ||\n normalizedFrom.startsWith(routeBase + '/') ||\n (routeBase === '' && normalizedFrom.startsWith('/'));\n } else if (interceptInfo.level === 2) {\n // (..) - Parent level: origin is one level deeper\n // Route at /gallery/albums/(..)photo, origin should be /gallery/albums/*\n validOrigin = normalizedFrom === routeBase ||\n normalizedFrom.startsWith(routeBase + '/');\n }\n }\n\n if (validOrigin) {\n return route;\n }\n }\n\n return null;\n}\n\n/**\n * Check if an intercepting route should be dismissed on this navigation.\n * \n * @param currentRoute - The currently active intercepting route\n * @param toPath - The path being navigated to\n * @returns true if the interception should be dismissed\n */\nexport function shouldDismissIntercept(\n currentRoute: FileRoute | null,\n toPath: string\n): boolean {\n if (!currentRoute || !currentRoute.interceptInfo) {\n return false;\n }\n\n const normalizedTo = normalizePath(toPath);\n const interceptPath = normalizePath(currentRoute.interceptInfo.interceptPath);\n\n // Dismiss if navigating away from the intercepted path\n return !pathMatches(interceptPath, normalizedTo);\n}\n\n/**\n * Get route params from a path match.\n * \n * @param routePath - The route pattern with params (e.g., /photo/:id)\n * @param actualPath - The actual URL path (e.g., /photo/123)\n * @returns Object with matched params, or null if no match\n */\nexport function extractRouteParams(\n routePath: string,\n actualPath: string\n): Record<string, string> | null {\n const routeParts = routePath.split('/').filter(Boolean);\n const actualParts = actualPath.split('/').filter(Boolean);\n\n if (routeParts.length !== actualParts.length) {\n // Check for catch-all\n const hasCatchAll = routeParts.some(p => p.endsWith('+') || p.endsWith('*'));\n if (!hasCatchAll) {\n return null;\n }\n }\n\n const params: Record<string, string> = {};\n\n for (let i = 0; i < routeParts.length; i++) {\n const routePart = routeParts[i];\n const actualPart = actualParts[i];\n\n if (!routePart) continue;\n\n if (routePart.startsWith(':')) {\n // Dynamic param\n const paramName = routePart.slice(1).replace(/[+*]$/, '');\n\n if (routePart.endsWith('+') || routePart.endsWith('*')) {\n // Catch-all: collect remaining parts\n params[paramName] = actualParts.slice(i).join('/');\n break;\n }\n\n if (!actualPart) {\n if (routePart.endsWith('*')) {\n // Optional catch-all, can be empty\n params[paramName] = '';\n break;\n }\n return null;\n }\n\n params[paramName] = actualPart;\n } else if (routePart !== actualPart) {\n return null;\n }\n }\n\n return params;\n}\n\n// ============================================================================\n// Path Utilities\n// ============================================================================\n\n/**\n * Normalize a path for consistent comparison.\n */\nfunction normalizePath(path: string): string {\n let normalized = path.trim();\n\n // Ensure starts with /\n if (!normalized.startsWith('/')) {\n normalized = '/' + normalized;\n }\n\n // Remove trailing slash (except for root)\n if (normalized !== '/' && normalized.endsWith('/')) {\n normalized = normalized.slice(0, -1);\n }\n\n // Remove duplicate slashes\n normalized = normalized.replace(/\\/+/g, '/');\n\n return normalized;\n}\n\n/**\n * Check if a route path matches an actual path.\n * Handles dynamic segments (:param) and catch-alls.\n */\nfunction pathMatches(routePath: string, actualPath: string): boolean {\n const routeParts = routePath.split('/').filter(Boolean);\n const actualParts = actualPath.split('/').filter(Boolean);\n\n for (let i = 0; i < routeParts.length; i++) {\n const routePart = routeParts[i];\n const actualPart = actualParts[i];\n\n if (!routePart) continue;\n\n // Catch-all segment\n if (routePart.startsWith(':') && (routePart.endsWith('+') || routePart.endsWith('*'))) {\n return true; // Matches rest of path\n }\n\n // Dynamic segment\n if (routePart.startsWith(':')) {\n if (!actualPart) return false;\n continue; // Any value matches\n }\n\n // Static segment - must match exactly\n if (routePart !== actualPart) {\n return false;\n }\n }\n\n // Check lengths match (unless catch-all was present)\n return routeParts.length === actualParts.length;\n}\n\n"]}
@@ -254,5 +254,5 @@ function registerServerAction(id, action) {
254
254
  }
255
255
 
256
256
  export { BoundaryRegistry, CLIENT_REFERENCE, SERVER_REFERENCE, analyzeModule, createClientReference, createServerReference, detectAsyncComponents, detectBoundaryType, detectInlineServerActions, getReferenceId, globalRegistry, hasUseClientDirective, hasUseServerDirective, isClientReference, isServerReference, registerClientComponent, registerServerAction };
257
- //# sourceMappingURL=chunk-PDW5WCMW.js.map
258
- //# sourceMappingURL=chunk-PDW5WCMW.js.map
257
+ //# sourceMappingURL=chunk-5XHOLZBJ.js.map
258
+ //# sourceMappingURL=chunk-5XHOLZBJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/rsc/boundaries.ts"],"names":["exports"],"mappings":"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","file":"chunk-5XHOLZBJ.js","sourcesContent":["/**\n * @flight-framework/core - Component Boundary Detection\n * \n * Sistema de detección de boundaries client/server para Server Components.\n * Soporta directivas 'use client' y 'use server' tanto a nivel de archivo\n * como inline en funciones.\n * \n * Filosofía Flight:\n * - Detección en build-time (no runtime overhead)\n * - Soporte para directivas estándar de React\n * - Extensible para otros frameworks\n * - Zero dependencies\n * \n * @module @flight-framework/core/rsc/boundaries\n */\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Tipo de boundary de componente\n */\nexport type BoundaryType = 'server' | 'client' | 'shared';\n\n/**\n * Información de un boundary detectado\n */\nexport interface ComponentBoundary {\n /** Tipo de boundary */\n type: BoundaryType;\n /** ID del módulo (path relativo o absoluto) */\n moduleId: string;\n /** Nombre del export */\n exportName: string;\n /** Línea donde se detectó la directiva */\n line?: number;\n /** Es una directiva inline (dentro de función) */\n inline?: boolean;\n /** Metadata adicional */\n meta?: Record<string, unknown>;\n}\n\n/**\n * Resultado del análisis de un módulo\n */\nexport interface ModuleAnalysis {\n /** Path del módulo */\n moduleId: string;\n /** Directiva a nivel de archivo ('use client' o 'use server') */\n fileDirective?: 'client' | 'server';\n /** Boundaries detectados */\n boundaries: ComponentBoundary[];\n /** Exports que son Server Actions */\n serverActions: string[];\n /** Exports que son Client Components */\n clientComponents: string[];\n /** El módulo tiene componentes async */\n hasAsyncComponents: boolean;\n}\n\n/**\n * Referencia a un Client Component\n */\nexport interface ClientReference<T = unknown> {\n $$typeof: symbol;\n $$id: string;\n $$async: boolean;\n __flight_client: true;\n __flight_module: string;\n __flight_export: string;\n // Type-safe component signature\n (props: T extends (props: infer P) => unknown ? P : unknown): unknown;\n}\n\n/**\n * Referencia a una Server Function (Action)\n */\nexport interface ServerReference<T extends (...args: unknown[]) => unknown = (...args: unknown[]) => unknown> {\n $$typeof: symbol;\n $$id: string;\n $$bound: unknown[] | null;\n __flight_server: true;\n __flight_action: string;\n // Type-safe function signature\n (...args: Parameters<T>): Promise<ReturnType<T>>;\n}\n\n// Symbols for reference detection\nexport const CLIENT_REFERENCE = Symbol.for('flight.client.reference');\nexport const SERVER_REFERENCE = Symbol.for('flight.server.reference');\n\n// ============================================================================\n// Directive Detection\n// ============================================================================\n\n/**\n * Regex patterns para detección de directivas\n */\nconst PATTERNS = {\n // 'use client'; o \"use client\";\n USE_CLIENT: /^['\"]use client['\"];?\\s*$/,\n // 'use server'; o \"use server\";\n USE_SERVER: /^['\"]use server['\"];?\\s*$/,\n // Inline 'use server' dentro de función\n INLINE_USE_SERVER: /['\"]use server['\"];?/,\n // Detección de función async\n ASYNC_FUNCTION: /(?:^|\\s)async\\s+function\\s+(\\w+)/,\n // Detección de arrow function async\n ASYNC_ARROW: /(?:const|let|var)\\s+(\\w+)\\s*=\\s*async\\s*(?:\\([^)]*\\)|[^=])\\s*=>/,\n // Export statement\n EXPORT: /export\\s+(?:default\\s+)?(?:async\\s+)?(?:function|const|let|class)\\s+(\\w+)/g,\n // Export default\n EXPORT_DEFAULT: /export\\s+default\\s+/,\n} as const;\n\n/**\n * Detecta si un archivo tiene la directiva 'use client'\n */\nexport function hasUseClientDirective(source: string): boolean {\n const lines = source.trim().split('\\n');\n // Check first non-empty, non-comment line\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed === '' || trimmed.startsWith('//') || trimmed.startsWith('/*')) {\n continue;\n }\n return PATTERNS.USE_CLIENT.test(trimmed);\n }\n return false;\n}\n\n/**\n * Detecta si un archivo tiene la directiva 'use server' a nivel de archivo\n */\nexport function hasUseServerDirective(source: string): boolean {\n const lines = source.trim().split('\\n');\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed === '' || trimmed.startsWith('//') || trimmed.startsWith('/*')) {\n continue;\n }\n return PATTERNS.USE_SERVER.test(trimmed);\n }\n return false;\n}\n\n/**\n * Detecta el tipo de componente basado en directivas\n */\nexport function detectBoundaryType(source: string): BoundaryType {\n if (hasUseClientDirective(source)) return 'client';\n if (hasUseServerDirective(source)) return 'server';\n return 'shared';\n}\n\n/**\n * Detecta Server Actions inline en el código\n * Busca funciones que contienen 'use server' dentro de su cuerpo\n */\nexport function detectInlineServerActions(source: string): string[] {\n const actions: string[] = [];\n\n // Regex para encontrar funciones con 'use server' inline\n // Soporta:\n // - async function name() { 'use server'; ... }\n // - const name = async () => { 'use server'; ... }\n // - const name = async function() { 'use server'; ... }\n\n const functionPatterns = [\n // async function name() { 'use server';\n /async\\s+function\\s+(\\w+)\\s*\\([^)]*\\)\\s*\\{[\\s\\n]*['\"]use server['\"]/g,\n // const name = async () => { 'use server';\n /(?:const|let|var)\\s+(\\w+)\\s*=\\s*async\\s*\\([^)]*\\)\\s*=>\\s*\\{[\\s\\n]*['\"]use server['\"]/g,\n // const name = async function() { 'use server';\n /(?:const|let|var)\\s+(\\w+)\\s*=\\s*async\\s+function\\s*\\([^)]*\\)\\s*\\{[\\s\\n]*['\"]use server['\"]/g,\n ];\n\n for (const pattern of functionPatterns) {\n let match;\n while ((match = pattern.exec(source)) !== null) {\n if (match[1]) {\n actions.push(match[1]);\n }\n }\n }\n\n return [...new Set(actions)]; // Deduplicar\n}\n\n/**\n * Detecta componentes async (Server Components potenciales)\n */\nexport function detectAsyncComponents(source: string): string[] {\n const components: string[] = [];\n\n // Buscar exports de funciones async\n const patterns = [\n // export async function ComponentName\n /export\\s+(?:default\\s+)?async\\s+function\\s+(\\w+)/g,\n // export const ComponentName = async\n /export\\s+(?:const|let)\\s+(\\w+)\\s*=\\s*async/g,\n ];\n\n for (const pattern of patterns) {\n let match;\n while ((match = pattern.exec(source)) !== null) {\n if (match[1] && /^[A-Z]/.test(match[1])) { // PascalCase = component\n components.push(match[1]);\n }\n }\n }\n\n return [...new Set(components)];\n}\n\n/**\n * Análisis completo de un módulo\n */\nexport function analyzeModule(source: string, moduleId: string): ModuleAnalysis {\n const boundaries: ComponentBoundary[] = [];\n const serverActions: string[] = [];\n const clientComponents: string[] = [];\n\n // Detectar directiva a nivel de archivo\n let fileDirective: 'client' | 'server' | undefined;\n if (hasUseClientDirective(source)) {\n fileDirective = 'client';\n } else if (hasUseServerDirective(source)) {\n fileDirective = 'server';\n }\n\n // Si es 'use client', todo el módulo es client\n if (fileDirective === 'client') {\n boundaries.push({\n type: 'client',\n moduleId,\n exportName: '*',\n line: 1,\n });\n\n // Buscar todos los exports como client components\n const exports = extractExports(source);\n clientComponents.push(...exports);\n }\n\n // Si es 'use server' a nivel de archivo, todos los exports son server actions\n if (fileDirective === 'server') {\n boundaries.push({\n type: 'server',\n moduleId,\n exportName: '*',\n line: 1,\n });\n\n const exports = extractExports(source);\n serverActions.push(...exports);\n }\n\n // Detectar server actions inline (incluso en módulos sin directiva de archivo)\n if (fileDirective !== 'client') {\n const inlineActions = detectInlineServerActions(source);\n for (const action of inlineActions) {\n if (!serverActions.includes(action)) {\n serverActions.push(action);\n boundaries.push({\n type: 'server',\n moduleId,\n exportName: action,\n inline: true,\n });\n }\n }\n }\n\n // Detectar async components\n const asyncComponents = detectAsyncComponents(source);\n\n return {\n moduleId,\n fileDirective,\n boundaries,\n serverActions,\n clientComponents,\n hasAsyncComponents: asyncComponents.length > 0,\n };\n}\n\n/**\n * Extrae nombres de exports de un módulo\n */\nfunction extractExports(source: string): string[] {\n const exports: string[] = [];\n\n const patterns = [\n // export function/const/let/class Name\n /export\\s+(?:async\\s+)?(?:function|const|let|var|class)\\s+(\\w+)/g,\n // export default function Name\n /export\\s+default\\s+(?:async\\s+)?(?:function|class)\\s+(\\w+)/g,\n // export { name }\n /export\\s*\\{\\s*([^}]+)\\s*\\}/g,\n ];\n\n for (const pattern of patterns) {\n let match;\n while ((match = pattern.exec(source)) !== null) {\n if (match[1]) {\n // Handle export { a, b, c }\n const names = match[1].split(',').map(n => n.trim().split(/\\s+as\\s+/).pop()!.trim());\n exports.push(...names.filter(n => n && n !== 'default'));\n }\n }\n }\n\n // Check for export default\n if (/export\\s+default\\s+/.test(source)) {\n exports.push('default');\n }\n\n return [...new Set(exports)];\n}\n\n// ============================================================================\n// Reference Creation\n// ============================================================================\n\n/**\n * Crea una referencia a un Client Component\n * Para uso en build-time (transformación de código)\n */\nexport function createClientReference<T>(\n moduleId: string,\n exportName: string,\n isAsync = false\n): ClientReference<T> {\n const id = `${moduleId}#${exportName}`;\n\n const reference = function (_props: unknown): never {\n throw new Error(\n `Attempted to call Client Component \"${exportName}\" from \"${moduleId}\" on the server. ` +\n 'Client Components can only be rendered on the client.'\n );\n } as unknown as ClientReference<T>;\n\n reference.$$typeof = CLIENT_REFERENCE;\n reference.$$id = id;\n reference.$$async = isAsync;\n reference.__flight_client = true;\n reference.__flight_module = moduleId;\n reference.__flight_export = exportName;\n\n return reference;\n}\n\n/**\n * Crea una referencia a una Server Function (Action)\n * Para uso en build-time (transformación de código)\n */\nexport function createServerReference<T extends (...args: unknown[]) => unknown>(\n actionId: string,\n boundArgs?: unknown[]\n): ServerReference<T> {\n const reference = async function (..._args: unknown[]) {\n // Esta función será reemplazada por el bundler plugin\n // para hacer una llamada RPC al servidor\n throw new Error(\n `Server Action \"${actionId}\" was called but no RPC handler is configured. ` +\n 'Make sure the Flight bundler plugin is properly configured.'\n );\n } as unknown as ServerReference<T>;\n\n reference.$$typeof = SERVER_REFERENCE;\n reference.$$id = actionId;\n reference.$$bound = boundArgs ?? null;\n reference.__flight_server = true;\n reference.__flight_action = actionId;\n\n return reference;\n}\n\n/**\n * Verifica si un valor es una Client Reference\n */\nexport function isClientReference(value: unknown): value is ClientReference {\n return (\n typeof value === 'function' &&\n '$$typeof' in value &&\n value.$$typeof === CLIENT_REFERENCE\n );\n}\n\n/**\n * Verifica si un valor es una Server Reference\n */\nexport function isServerReference(value: unknown): value is ServerReference {\n return (\n typeof value === 'function' &&\n '$$typeof' in value &&\n value.$$typeof === SERVER_REFERENCE\n );\n}\n\n/**\n * Obtiene el ID de una referencia\n */\nexport function getReferenceId(ref: ClientReference | ServerReference): string {\n return ref.$$id;\n}\n\n// ============================================================================\n// Boundary Registry\n// ============================================================================\n\n/**\n * Registry de boundaries para uso en runtime\n */\nexport class BoundaryRegistry {\n private clientModules = new Map<string, () => Promise<unknown>>();\n private serverActions = new Map<string, (...args: unknown[]) => Promise<unknown>>();\n\n /**\n * Registra un Client Component\n */\n registerClient(id: string, loader: () => Promise<unknown>): void {\n this.clientModules.set(id, loader);\n }\n\n /**\n * Registra una Server Action\n */\n registerServer(id: string, action: (...args: unknown[]) => Promise<unknown>): void {\n this.serverActions.set(id, action);\n }\n\n /**\n * Obtiene un Client Component loader\n */\n getClient(id: string): (() => Promise<unknown>) | undefined {\n return this.clientModules.get(id);\n }\n\n /**\n * Obtiene una Server Action\n */\n getServer(id: string): ((...args: unknown[]) => Promise<unknown>) | undefined {\n return this.serverActions.get(id);\n }\n\n /**\n * Verifica si un client module está registrado\n */\n hasClient(id: string): boolean {\n return this.clientModules.has(id);\n }\n\n /**\n * Verifica si una server action está registrada\n */\n hasServer(id: string): boolean {\n return this.serverActions.has(id);\n }\n\n /**\n * Obtiene todos los IDs de client modules\n */\n getClientIds(): string[] {\n return [...this.clientModules.keys()];\n }\n\n /**\n * Obtiene todos los IDs de server actions\n */\n getServerIds(): string[] {\n return [...this.serverActions.keys()];\n }\n\n /**\n * Limpia el registry\n */\n clear(): void {\n this.clientModules.clear();\n this.serverActions.clear();\n }\n}\n\n/**\n * Registry global (singleton)\n */\nexport const globalRegistry = new BoundaryRegistry();\n\n/**\n * Registra un Client Component en el registry global\n */\nexport function registerClientComponent(id: string, loader: () => Promise<unknown>): void {\n globalRegistry.registerClient(id, loader);\n}\n\n/**\n * Registra una Server Action en el registry global\n */\nexport function registerServerAction(id: string, action: (...args: unknown[]) => Promise<unknown>): void {\n globalRegistry.registerServer(id, action);\n}\n"]}
@@ -225,5 +225,5 @@ function lazy(loader) {
225
225
  }
226
226
 
227
227
  export { createPreactAdapter, createPreactConsumer, lazy, markAsPreactClientComponent };
228
- //# sourceMappingURL=chunk-MDQNNIHH.js.map
229
- //# sourceMappingURL=chunk-MDQNNIHH.js.map
228
+ //# sourceMappingURL=chunk-65JYF3DJ.js.map
229
+ //# sourceMappingURL=chunk-65JYF3DJ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/rsc/adapters/preact.ts"],"names":[],"mappings":"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","file":"chunk-65JYF3DJ.js","sourcesContent":["/**\n * @flight-framework/core - Preact UI Adapter\n * \n * Adapter for using Preact with Flight Server Components.\n * Enables Flight to render Preact components without tight coupling.\n * \n * Philosophy: Zero lock-in - Preact is optional, user decides.\n * \n * @module @flight-framework/core/rsc/adapters/preact\n */\n\nimport type { UIAdapter, ElementTypeInfo } from '../renderer.js';\n\n// ============================================================================\n// Preact Symbols\n// ============================================================================\n\n// Flight reference symbols\nconst CLIENT_REFERENCE = Symbol.for('flight.client.reference');\n\n// ============================================================================\n// Types\n// ============================================================================\n\n/**\n * Minimal Preact VNode interface\n */\ninterface PreactVNode {\n type: unknown;\n props: Record<string, unknown>;\n key: string | number | null;\n ref: unknown;\n __?: unknown; // parent\n __k?: unknown[]; // children\n __b?: number; // depth\n __e?: unknown; // dom\n __c?: unknown; // component\n}\n\n/**\n * Preact dependencies (user provides these)\n */\nexport interface PreactDependencies {\n /** preact module */\n preact: {\n h: (type: unknown, props?: unknown, ...children: unknown[]) => PreactVNode;\n Fragment?: unknown;\n Component?: unknown;\n isValidElement?: (value: unknown) => boolean;\n cloneElement?: (vnode: PreactVNode, props?: unknown) => PreactVNode;\n };\n /** preact-render-to-string module (optional - for SSR) */\n renderToString?: (vnode: PreactVNode) => string;\n /** preact/hooks module (optional) */\n hooks?: {\n useState: <T>(initial: T) => [T, (v: T) => void];\n useEffect: (fn: () => void | (() => void), deps?: unknown[]) => void;\n useMemo: <T>(fn: () => T, deps: unknown[]) => T;\n };\n}\n\n// ============================================================================\n// Adapter Implementation\n// ============================================================================\n\n/**\n * Create Preact UI Adapter\n * \n * @example\n * ```typescript\n * import { createPreactAdapter } from '@flight-framework/core/rsc/adapters/preact';\n * import * as preact from 'preact';\n * import renderToString from 'preact-render-to-string';\n * \n * const adapter = createPreactAdapter({\n * preact,\n * renderToString,\n * });\n * \n * const renderer = createRenderer(adapter);\n * ```\n */\nexport function createPreactAdapter(deps?: PreactDependencies): UIAdapter {\n const { preact, renderToString } = deps || {};\n\n return {\n name: 'preact',\n\n isElement(value: unknown): boolean {\n if (preact?.isValidElement) {\n return preact.isValidElement(value);\n }\n // Fallback: check for VNode structure\n return (\n typeof value === 'object' &&\n value !== null &&\n 'type' in value &&\n 'props' in value\n );\n },\n\n getElementType(element: unknown): ElementTypeInfo {\n const vnode = element as PreactVNode;\n const type = vnode.type;\n\n // Null type (text or null node)\n if (type === null) {\n const props = vnode.props;\n if (typeof props === 'string' || typeof props === 'number') {\n return { kind: 'text', value: String(props) };\n }\n return { kind: 'null' };\n }\n\n // String = host element (div, span, etc.)\n if (typeof type === 'string') {\n return { kind: 'host', tag: type };\n }\n\n // Fragment\n if (type === preact?.Fragment) {\n return { kind: 'fragment' };\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\n // Check for class component (extends Component)\n // eslint-disable-next-line @typescript-eslint/no-unsafe-function-type\n if (preact?.Component && type.prototype instanceof (preact.Component as unknown as Function)) {\n return {\n kind: 'component',\n fn: (props) => {\n // Class components need instantiation\n const Component = type as new (props: unknown) => { render: () => unknown };\n const instance = new Component(props);\n return instance.render();\n },\n name: fn.displayName || fn.name || 'PreactComponent',\n };\n }\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 PreactVNode).props || {};\n },\n\n getChildren(element: unknown): unknown[] {\n const props = (element as PreactVNode).props;\n const children = props?.children;\n\n if (children === undefined || children === null) {\n return [];\n }\n\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 PreactVNode).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 Preact VNode using h() if available\n if (preact?.h) {\n return preact.h(component, props);\n }\n\n // Fallback: create VNode structure directly\n return {\n type: component,\n props,\n key: null,\n ref: null,\n } as PreactVNode;\n },\n\n async renderToString(element: unknown): Promise<string> {\n if (renderToString) {\n return renderToString(element as PreactVNode);\n }\n throw new Error(\n 'renderToString not provided. Pass preact-render-to-string when creating the adapter: ' +\n 'createPreactAdapter({ preact, renderToString })'\n );\n },\n };\n}\n\n// ============================================================================\n// Preact Client Consumer\n// ============================================================================\n\n/**\n * Options for Preact consumer\n */\nexport interface PreactConsumerOptions {\n /** Registry of client components */\n registry?: Map<string, () => Promise<unknown>>;\n}\n\n/**\n * Create a Preact client-side consumer for Flight payloads\n */\nexport function createPreactConsumer(\n deps: PreactDependencies,\n options: PreactConsumerOptions = {}\n) {\n const { preact } = 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 Preact VNodes\n */\n toPreactElement(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.toPreactElement(c));\n return preact.h(\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.toPreactElement(c));\n return preact.h(preact.Fragment!, null, ...children);\n }\n\n case 'suspense': {\n // Preact doesn't have built-in Suspense, use fragment\n const children = element.children.map(c => this.toPreactElement(c));\n return preact.h(preact.Fragment!, null, ...children);\n }\n\n case 'client': {\n const loader = registry.get(element.ref);\n if (!loader) {\n console.warn(`[Flight] Client component not registered: ${element.ref}`);\n if (element.ssr) {\n return preact.h('div', {\n dangerouslySetInnerHTML: { __html: element.ssr }\n });\n }\n return null;\n }\n\n // Create lazy loading wrapper\n // Preact doesn't have React.lazy, so we create a simple async loader\n const LazyWrapper = (props: Record<string, unknown>) => {\n // This is a simplified version - in production use @preact/signals\n // or a state management solution\n const loadedRef = { current: null as unknown };\n\n loader().then((mod: { default?: unknown }) => {\n loadedRef.current = mod.default ?? mod;\n });\n\n if (loadedRef.current) {\n return preact.h(loadedRef.current as string, props);\n }\n\n // Return SSR placeholder\n if (element.ssr) {\n return preact.h('div', {\n dangerouslySetInnerHTML: { __html: element.ssr }\n });\n }\n\n return preact.h('div', { 'data-flight-loading': element.ref });\n };\n\n return preact.h(LazyWrapper, {});\n }\n\n case 'lazy': {\n if (element.fallback) {\n return this.toPreactElement(element.fallback);\n }\n return preact.h('div', { 'data-flight-pending': element.id });\n }\n\n default:\n return null;\n }\n },\n\n /**\n * Hydrate Flight payload into DOM\n */\n hydrate(\n chunks: import('../payload.js').FlightChunk[],\n container: Element,\n hydrateFn?: (vnode: unknown, container: Element) => void\n ): void {\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');\n }\n\n // Register client components\n for (const chunk of chunks) {\n if (chunk.type === 'C') {\n if (!registry.has(chunk.id)) {\n registry.set(chunk.id, () => import(/* webpackIgnore: true */ chunk.module));\n }\n }\n }\n\n const element = this.toPreactElement(rootChunk.tree);\n\n if (hydrateFn) {\n hydrateFn(element, container);\n } else {\n // Fallback: use preact.render (not ideal for SSR)\n const { render } = deps?.preact as { render?: (vnode: unknown, container: Element) => void } || {};\n if (render) {\n render(element, container);\n } else {\n throw new Error('[Flight] No hydrate or render function provided');\n }\n }\n },\n };\n}\n\n// ============================================================================\n// Utility Types\n// ============================================================================\n\n/**\n * Type helper for Preact Server Component\n */\nexport type PreactServerComponent<P = Record<string, unknown>> = (\n props: P,\n ctx: import('../context.js').ServerContext\n) => Promise<PreactVNode> | PreactVNode;\n\n/**\n * Mark a Preact component as a client component\n */\nexport function markAsPreactClientComponent<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\n/**\n * Create a lazy-loading component for Preact\n */\nexport function lazy<T extends (...args: unknown[]) => unknown>(\n loader: () => Promise<{ default: T }>\n): T {\n let Component: T | null = null;\n let promise: Promise<{ default: T }> | null = null;\n\n const LazyComponent = ((props: unknown) => {\n if (Component) {\n return Component(props);\n }\n\n if (!promise) {\n promise = loader().then(mod => {\n Component = mod.default;\n return mod;\n });\n }\n\n throw promise; // Suspense-style\n }) as T;\n\n return LazyComponent;\n}\n"]}
@@ -253,5 +253,5 @@ var FlightPayloadError = class extends Error {
253
253
  };
254
254
 
255
255
  export { FlightPayloadError, FlightSerializationError, clientRef, createActionChunk, createClientChunk, createErrorChunk, createHintChunk, createServerChunk, deserialize, fragment, generateChunkId, h, isFlightElement, resetChunkIdCounter, serialize, suspense, text, toFlightElement };
256
- //# sourceMappingURL=chunk-K2CQZPCG.js.map
257
- //# sourceMappingURL=chunk-K2CQZPCG.js.map
256
+ //# sourceMappingURL=chunk-6GI6HFSQ.js.map
257
+ //# sourceMappingURL=chunk-6GI6HFSQ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/rsc/payload.ts"],"names":[],"mappings":"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","file":"chunk-6GI6HFSQ.js","sourcesContent":["/**\n * @flight-framework/core - Flight Payload System\n * \n * Formato de serialización agnóstico para Server Components.\n * Diseñado para máxima debuggabilidad y compatibilidad multi-framework.\n * \n * Filosofía Flight:\n * - Formato documentado y abierto (NDJSON)\n * - No depende de internals de React\n * - Extensible para cualquier UI framework\n * - Zero vendor lock-in\n * \n * @module @flight-framework/core/rsc/payload\n */\n\n// ============================================================================\n// Chunk Types - El corazón del streaming protocol\n// ============================================================================\n\n/**\n * Union type de todos los chunks que pueden enviarse en un FlightStream\n */\nexport type FlightChunk =\n | ServerComponentChunk\n | ClientReferenceChunk\n | ServerReferenceChunk\n | ErrorBoundaryChunk\n | HintChunk\n | MetaChunk;\n\n/**\n * Chunk de Server Component renderizado\n * Contiene el árbol virtual de elementos\n */\nexport interface ServerComponentChunk {\n /** Discriminator */\n readonly type: 'S';\n /** Unique chunk ID */\n readonly id: string;\n /** Virtual element tree */\n readonly tree: FlightElement;\n /** IDs de chunks que este depende (para streaming ordenado) */\n readonly awaiting?: readonly string[];\n /** Timestamp para debugging/observability */\n readonly ts?: number;\n}\n\n/**\n * Referencia a un Client Component\n * El cliente cargará el módulo y lo hidratará\n */\nexport interface ClientReferenceChunk {\n /** Discriminator */\n readonly type: 'C';\n /** Reference ID */\n readonly id: string;\n /** Module specifier (relativo al manifest) */\n readonly module: string;\n /** Export name */\n readonly export: string;\n /** Serialized props */\n readonly props: SerializedValue;\n /** Fallback HTML para SSR (opcional) */\n readonly fallback?: string;\n}\n\n/**\n * Referencia a una Server Function (Action)\n * El cliente la invocará via RPC\n */\nexport interface ServerReferenceChunk {\n /** Discriminator */\n readonly type: 'A';\n /** Action ID */\n readonly id: string;\n /** Bound arguments (pre-bound via .bind()) */\n readonly bound?: readonly SerializedValue[];\n}\n\n/**\n * Error en un boundary específico\n */\nexport interface ErrorBoundaryChunk {\n /** Discriminator */\n readonly type: 'E';\n /** Boundary ID where error occurred */\n readonly boundary: string;\n /** Safe error message for client */\n readonly message: string;\n /** Error digest for server-side correlation */\n readonly digest: string;\n /** Component stack for development */\n readonly stack?: string;\n}\n\n/**\n * Hints para el cliente (preload, prefetch, etc.)\n */\nexport interface HintChunk {\n /** Discriminator */\n readonly type: 'H';\n /** Hint type */\n readonly hint: 'preload' | 'prefetch' | 'dns-prefetch' | 'preconnect' | 'modulepreload';\n /** Resource URL */\n readonly href: string;\n /** Resource type (for preload) */\n readonly as?: 'script' | 'style' | 'image' | 'font' | 'fetch';\n /** Crossorigin attribute */\n readonly crossorigin?: 'anonymous' | 'use-credentials';\n}\n\n/**\n * Metadata chunk (para SSR head injection)\n */\nexport interface MetaChunk {\n /** Discriminator */\n readonly type: 'M';\n /** Meta type */\n readonly meta: 'title' | 'description' | 'og' | 'twitter' | 'link' | 'script';\n /** Content */\n readonly content: string | Record<string, string>;\n}\n\n// ============================================================================\n// Flight Element - Virtual DOM agnóstico\n// ============================================================================\n\n/**\n * Virtual element que puede representar cualquier UI framework\n */\nexport type FlightElement =\n | FlightHostElement\n | FlightTextElement\n | FlightFragmentElement\n | FlightSuspenseElement\n | FlightClientElement\n | FlightLazyElement\n | FlightNullElement;\n\n/**\n * Host element (div, span, etc.)\n */\nexport interface FlightHostElement {\n readonly $$type: 'host';\n readonly tag: string;\n readonly key?: string | number;\n readonly props: Readonly<Record<string, SerializedValue>>;\n readonly children: readonly FlightElement[];\n}\n\n/**\n * Text node\n */\nexport interface FlightTextElement {\n readonly $$type: 'text';\n readonly value: string;\n}\n\n/**\n * Fragment (multiple children, no wrapper)\n */\nexport interface FlightFragmentElement {\n readonly $$type: 'fragment';\n readonly children: readonly FlightElement[];\n}\n\n/**\n * Suspense boundary\n */\nexport interface FlightSuspenseElement {\n readonly $$type: 'suspense';\n readonly id: string;\n readonly fallback: FlightElement;\n readonly children: readonly FlightElement[];\n}\n\n/**\n * Client component reference\n */\nexport interface FlightClientElement {\n readonly $$type: 'client';\n /** Reference to ClientReferenceChunk ID */\n readonly ref: string;\n /** Pre-rendered fallback HTML */\n readonly ssr?: string;\n}\n\n/**\n * Lazy/async element (pending resolution)\n */\nexport interface FlightLazyElement {\n readonly $$type: 'lazy';\n readonly id: string;\n readonly fallback?: FlightElement;\n}\n\n/**\n * Null/empty element\n */\nexport interface FlightNullElement {\n readonly $$type: 'null';\n}\n\n// ============================================================================\n// Serializable Values\n// ============================================================================\n\n/**\n * Valores que pueden cruzar el boundary server/client\n */\nexport type SerializedValue =\n | string\n | number\n | boolean\n | null\n | undefined\n | readonly SerializedValue[]\n | { readonly [key: string]: SerializedValue }\n | SerializedSpecialValue;\n\n/**\n * Tipos especiales que requieren serialización custom\n */\nexport interface SerializedSpecialValue {\n readonly $$flight: SpecialValueType;\n readonly value: string | readonly unknown[];\n}\n\nexport type SpecialValueType =\n | 'date'\n | 'bigint'\n | 'map'\n | 'set'\n | 'undefined'\n | 'symbol'\n | 'regexp'\n | 'url'\n | 'error'\n | 'formdata'\n | 'blob'\n | 'arraybuffer';\n\n// ============================================================================\n// Serialization Functions\n// ============================================================================\n\n/**\n * Serializa un valor para transmisión a través de FlightStream\n */\nexport function serialize(value: unknown): SerializedValue {\n return serializeValue(value, new WeakSet());\n}\n\nfunction serializeValue(value: unknown, seen: WeakSet<object>): SerializedValue {\n // Primitives\n if (value === null) return null;\n if (value === undefined) return { $$flight: 'undefined', value: '' };\n if (typeof value === 'string') return value;\n if (typeof value === 'number') {\n if (Number.isNaN(value)) return { $$flight: 'undefined', value: 'NaN' };\n if (!Number.isFinite(value)) return { $$flight: 'undefined', value: value > 0 ? 'Infinity' : '-Infinity' };\n return value;\n }\n if (typeof value === 'boolean') return value;\n if (typeof value === 'bigint') return { $$flight: 'bigint', value: value.toString() };\n if (typeof value === 'symbol') return { $$flight: 'symbol', value: value.description ?? '' };\n\n // Functions cannot be serialized\n if (typeof value === 'function') {\n throw new FlightSerializationError(\n 'Functions cannot be passed from Server to Client Components. ' +\n 'If you need to pass a function, use a Server Action instead.'\n );\n }\n\n // Circular reference detection\n if (typeof value === 'object') {\n if (seen.has(value)) {\n throw new FlightSerializationError('Circular references are not supported in Flight payloads.');\n }\n seen.add(value);\n }\n\n // Special objects\n if (value instanceof Date) {\n return { $$flight: 'date', value: value.toISOString() };\n }\n if (value instanceof RegExp) {\n return { $$flight: 'regexp', value: value.toString() };\n }\n if (value instanceof URL) {\n return { $$flight: 'url', value: value.href };\n }\n if (value instanceof Map) {\n const entries: [SerializedValue, SerializedValue][] = [];\n for (const [k, v] of value) {\n entries.push([serializeValue(k, seen), serializeValue(v, seen)]);\n }\n return { $$flight: 'map', value: entries as unknown as string };\n }\n if (value instanceof Set) {\n const items: SerializedValue[] = [];\n for (const v of value) {\n items.push(serializeValue(v, seen));\n }\n return { $$flight: 'set', value: items as unknown as string };\n }\n if (value instanceof Error) {\n return {\n $$flight: 'error',\n value: JSON.stringify({ name: value.name, message: value.message })\n };\n }\n\n // Arrays\n if (Array.isArray(value)) {\n return value.map(v => serializeValue(v, seen));\n }\n\n // Plain objects\n if (isPlainObject(value)) {\n const result: Record<string, SerializedValue> = {};\n for (const [k, v] of Object.entries(value)) {\n result[k] = serializeValue(v, seen);\n }\n return result;\n }\n\n // Unknown object type - try JSON serialization\n try {\n return JSON.parse(JSON.stringify(value)) as SerializedValue;\n } catch {\n throw new FlightSerializationError(\n `Cannot serialize value of type ${value?.constructor?.name ?? typeof value}. ` +\n 'Only serializable values can be passed to Client Components.'\n );\n }\n}\n\n/**\n * Deserializa un valor recibido de FlightStream\n */\nexport function deserialize<T = unknown>(value: SerializedValue): T {\n return deserializeValue(value) as T;\n}\n\nfunction deserializeValue(value: SerializedValue): unknown {\n if (value === null || value === undefined) return value;\n if (typeof value === 'string' || typeof value === 'number' || typeof value === 'boolean') {\n return value;\n }\n\n // Special values\n if (isSpecialValue(value)) {\n switch (value.$$flight) {\n case 'undefined':\n if (value.value === 'NaN') return NaN;\n if (value.value === 'Infinity') return Infinity;\n if (value.value === '-Infinity') return -Infinity;\n return undefined;\n case 'date':\n return new Date(value.value as string);\n case 'bigint':\n return BigInt(value.value as string);\n case 'symbol':\n return Symbol(value.value as string);\n case 'regexp': {\n const match = (value.value as string).match(/^\\/(.*)\\/([gimsuy]*)$/);\n if (match) return new RegExp(match[1]!, match[2]);\n return new RegExp(value.value as string);\n }\n case 'url':\n return new URL(value.value as string);\n case 'map':\n return new Map((value.value as unknown as [SerializedValue, SerializedValue][])\n .map(([k, v]) => [deserializeValue(k), deserializeValue(v)]));\n case 'set':\n return new Set((value.value as unknown as SerializedValue[])\n .map(v => deserializeValue(v)));\n case 'error': {\n const { name, message } = JSON.parse(value.value as string);\n const error = new Error(message);\n error.name = name;\n return error;\n }\n }\n }\n\n // Arrays\n if (Array.isArray(value)) {\n return value.map(deserializeValue);\n }\n\n // Objects\n if (typeof value === 'object') {\n const result: Record<string, unknown> = {};\n for (const [k, v] of Object.entries(value)) {\n result[k] = deserializeValue(v);\n }\n return result;\n }\n\n return value;\n}\n\n// ============================================================================\n// Helper Functions\n// ============================================================================\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (typeof value !== 'object' || value === null) return false;\n const proto = Object.getPrototypeOf(value);\n return proto === null || proto === Object.prototype;\n}\n\nfunction isSpecialValue(value: unknown): value is SerializedSpecialValue {\n return typeof value === 'object' && value !== null && '$$flight' in value;\n}\n\n// ============================================================================\n// Flight Element Builders\n// ============================================================================\n\n/**\n * Create a host element\n */\nexport function h(\n tag: string,\n props: Record<string, unknown> | null,\n ...children: unknown[]\n): FlightHostElement {\n const serializedProps: Record<string, SerializedValue> = {};\n\n if (props) {\n for (const [key, value] of Object.entries(props)) {\n if (key !== 'children') {\n serializedProps[key] = serialize(value);\n }\n }\n }\n\n return {\n $$type: 'host',\n tag,\n props: serializedProps,\n children: children.flat().map(child => toFlightElement(child)),\n };\n}\n\n/**\n * Create a text element\n */\nexport function text(value: string): FlightTextElement {\n return { $$type: 'text', value };\n}\n\n/**\n * Create a fragment\n */\nexport function fragment(...children: unknown[]): FlightFragmentElement {\n return {\n $$type: 'fragment',\n children: children.flat().map(child => toFlightElement(child)),\n };\n}\n\n/**\n * Create a suspense boundary\n */\nexport function suspense(\n id: string,\n fallback: FlightElement,\n children: FlightElement[]\n): FlightSuspenseElement {\n return { $$type: 'suspense', id, fallback, children };\n}\n\n/**\n * Create a client component reference\n */\nexport function clientRef(refId: string, ssrHtml?: string): FlightClientElement {\n return { $$type: 'client', ref: refId, ssr: ssrHtml };\n}\n\n/**\n * Convert any value to a FlightElement\n */\nexport function toFlightElement(value: unknown): FlightElement {\n if (value === null || value === undefined || typeof value === 'boolean') {\n return { $$type: 'null' };\n }\n if (typeof value === 'string' || typeof value === 'number') {\n return { $$type: 'text', value: String(value) };\n }\n if (isFlightElement(value)) {\n return value;\n }\n // Unknown - render as null\n return { $$type: 'null' };\n}\n\n/**\n * Type guard for FlightElement\n */\nexport function isFlightElement(value: unknown): value is FlightElement {\n return typeof value === 'object' && value !== null && '$$type' in value;\n}\n\n// ============================================================================\n// Chunk Builders\n// ============================================================================\n\nlet chunkIdCounter = 0;\n\n/**\n * Generate unique chunk ID\n */\nexport function generateChunkId(prefix = 'c'): string {\n return `${prefix}${chunkIdCounter++}`;\n}\n\n/**\n * Reset chunk ID counter (for testing)\n */\nexport function resetChunkIdCounter(): void {\n chunkIdCounter = 0;\n}\n\n/**\n * Create a server component chunk\n */\nexport function createServerChunk(\n id: string,\n tree: FlightElement,\n awaiting?: string[]\n): ServerComponentChunk {\n return {\n type: 'S',\n id,\n tree,\n awaiting,\n ts: Date.now(),\n };\n}\n\n/**\n * Create a client reference chunk\n */\nexport function createClientChunk(\n id: string,\n module: string,\n exportName: string,\n props: unknown,\n fallback?: string\n): ClientReferenceChunk {\n return {\n type: 'C',\n id,\n module,\n export: exportName,\n props: serialize(props),\n fallback,\n };\n}\n\n/**\n * Create a server reference (action) chunk\n */\nexport function createActionChunk(\n id: string,\n boundArgs?: unknown[]\n): ServerReferenceChunk {\n return {\n type: 'A',\n id,\n bound: boundArgs?.map(serialize),\n };\n}\n\n/**\n * Create an error chunk\n */\nexport function createErrorChunk(\n boundary: string,\n error: Error,\n includeStack = false\n): ErrorBoundaryChunk {\n return {\n type: 'E',\n boundary,\n message: error.message,\n digest: generateErrorDigest(error),\n stack: includeStack ? error.stack : undefined,\n };\n}\n\n/**\n * Create a hint chunk\n */\nexport function createHintChunk(\n hint: HintChunk['hint'],\n href: string,\n options?: { as?: HintChunk['as']; crossorigin?: HintChunk['crossorigin'] }\n): HintChunk {\n return {\n type: 'H',\n hint,\n href,\n ...options,\n };\n}\n\n/**\n * Generate error digest for correlation\n */\nfunction generateErrorDigest(error: Error): string {\n const str = `${error.name}:${error.message}:${Date.now()}`;\n // Simple hash for digest\n let hash = 0;\n for (let i = 0; i < str.length; i++) {\n const char = str.charCodeAt(i);\n hash = ((hash << 5) - hash) + char;\n hash = hash & hash;\n }\n return Math.abs(hash).toString(36);\n}\n\n// ============================================================================\n// Custom Errors\n// ============================================================================\n\n/**\n * Error thrown during serialization\n */\nexport class FlightSerializationError extends Error {\n constructor(message: string) {\n super(message);\n this.name = 'FlightSerializationError';\n }\n}\n\n/**\n * Error thrown during payload processing\n */\nexport class FlightPayloadError extends Error {\n constructor(message: string, public readonly chunk?: FlightChunk) {\n super(message);\n this.name = 'FlightPayloadError';\n }\n}\n"]}
@@ -139,6 +139,32 @@ function composeComponents(...components) {
139
139
  return results.join("");
140
140
  };
141
141
  }
142
+ function withAsyncErrorBoundary(component, options) {
143
+ const { fallback, onError, rethrowNavigation = true } = options;
144
+ return async (props, context) => {
145
+ try {
146
+ return await component(props, context);
147
+ } catch (error) {
148
+ if (rethrowNavigation) {
149
+ if (isNotFoundError(error)) {
150
+ throw error;
151
+ }
152
+ if (isRedirectError(error)) {
153
+ throw error;
154
+ }
155
+ }
156
+ if (onError) {
157
+ try {
158
+ onError(error, props, context);
159
+ } catch (callbackError) {
160
+ console.error("[Flight] Error in onError callback:", callbackError);
161
+ }
162
+ }
163
+ console.error("[Flight] Async component error:", error);
164
+ return fallback(error, props);
165
+ }
166
+ };
167
+ }
142
168
  function withErrorBoundary(component, errorFallback) {
143
169
  return async (props, context) => {
144
170
  try {
@@ -169,6 +195,6 @@ function isRedirectError(error) {
169
195
  return null;
170
196
  }
171
197
 
172
- export { composeComponents, createAsyncComponent, createClientBoundary, createRenderContext, deserializeProps, executeServerComponent, isNotFoundError, isRedirectError, notFound, redirect, revalidatePath, revalidateTag, serializeProps, serverFetch, withErrorBoundary };
173
- //# sourceMappingURL=chunk-3ZSSRE6M.js.map
174
- //# sourceMappingURL=chunk-3ZSSRE6M.js.map
198
+ export { composeComponents, createAsyncComponent, createClientBoundary, createRenderContext, deserializeProps, executeServerComponent, isNotFoundError, isRedirectError, notFound, redirect, revalidatePath, revalidateTag, serializeProps, serverFetch, withAsyncErrorBoundary, withErrorBoundary };
199
+ //# sourceMappingURL=chunk-6IG6XIXU.js.map
200
+ //# sourceMappingURL=chunk-6IG6XIXU.js.map