@withl5e/l5e 0.1.0-alpha.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (84) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +24 -0
  3. package/dist/action.js +10 -0
  4. package/dist/action.js.map +1 -0
  5. package/dist/client-D67hK4Yy.js +9 -0
  6. package/dist/client-D67hK4Yy.js.map +1 -0
  7. package/dist/entry-server-Ckh6zfgm.js +258 -0
  8. package/dist/entry-server-Ckh6zfgm.js.map +1 -0
  9. package/dist/entry-server.js +12 -0
  10. package/dist/entry-server.js.map +1 -0
  11. package/dist/generateMetadata-C5QsMS-H.js +144 -0
  12. package/dist/generateMetadata-C5QsMS-H.js.map +1 -0
  13. package/dist/index-BIt7MJT9.js +163 -0
  14. package/dist/index-BIt7MJT9.js.map +1 -0
  15. package/dist/index.js +49 -0
  16. package/dist/index.js.map +1 -0
  17. package/dist/island/client.js +5 -0
  18. package/dist/island/client.js.map +1 -0
  19. package/dist/island/runtime.js +98 -0
  20. package/dist/island/runtime.js.map +1 -0
  21. package/dist/island.js +39 -0
  22. package/dist/island.js.map +1 -0
  23. package/dist/jsx-runtime-C2Vw67N2.js +256 -0
  24. package/dist/jsx-runtime-C2Vw67N2.js.map +1 -0
  25. package/dist/jsx-runtime.js +26 -0
  26. package/dist/jsx-runtime.js.map +1 -0
  27. package/dist/middleware.js +9 -0
  28. package/dist/middleware.js.map +1 -0
  29. package/dist/seo.js +7 -0
  30. package/dist/seo.js.map +1 -0
  31. package/dist/server.js +489 -0
  32. package/dist/server.js.map +1 -0
  33. package/dist/swap/server.js +15 -0
  34. package/dist/swap/server.js.map +1 -0
  35. package/dist/swap.js +121 -0
  36. package/dist/swap.js.map +1 -0
  37. package/dist/tooltip.js +129 -0
  38. package/dist/tooltip.js.map +1 -0
  39. package/dist/vite-plugin.js +381 -0
  40. package/dist/vite-plugin.js.map +1 -0
  41. package/index.ts +1 -0
  42. package/package.json +129 -0
  43. package/src/action/define-action.ts +8 -0
  44. package/src/action/index.ts +2 -0
  45. package/src/action/types.ts +21 -0
  46. package/src/core/bundler.ts +275 -0
  47. package/src/core/const.ts +2 -0
  48. package/src/core/entry-server.d.ts +1 -0
  49. package/src/core/entry-server.ts +381 -0
  50. package/src/core/exceptions.ts +80 -0
  51. package/src/core/head-priority.ts +15 -0
  52. package/src/core/index.ts +40 -0
  53. package/src/core/jsx-runtime.ts +325 -0
  54. package/src/core/jsx-types.d.ts +548 -0
  55. package/src/core/render.ts +181 -0
  56. package/src/core/request.ts +31 -0
  57. package/src/core/server.ts +740 -0
  58. package/src/core/vite-plugin.ts +779 -0
  59. package/src/island/ClientIsland.ts +71 -0
  60. package/src/island/client.ts +3 -0
  61. package/src/island/index.ts +3 -0
  62. package/src/island/runtime.ts +149 -0
  63. package/src/island/strategy-registry.ts +10 -0
  64. package/src/island/types.ts +28 -0
  65. package/src/middleware/defineMiddleware.ts +5 -0
  66. package/src/middleware/index.ts +133 -0
  67. package/src/middleware/sequence.ts +105 -0
  68. package/src/middleware/types.ts +28 -0
  69. package/src/seo/generateMetadata.tsx +559 -0
  70. package/src/seo/index.ts +10 -0
  71. package/src/seo/mergeMetadata.ts +200 -0
  72. package/src/seo/types.ts +316 -0
  73. package/src/swap/SwapResponse.tsx +16 -0
  74. package/src/swap/create-swap.ts +121 -0
  75. package/src/swap/index.ts +8 -0
  76. package/src/swap/parse.ts +12 -0
  77. package/src/swap/server.ts +1 -0
  78. package/src/swap/swap.ts +57 -0
  79. package/src/swap/types.ts +47 -0
  80. package/src/swap/utils.ts +7 -0
  81. package/src/tooltip/index.ts +2 -0
  82. package/src/tooltip/tooltip-loader.ts +108 -0
  83. package/src/tooltip/tooltip-runtime.ts +173 -0
  84. package/types.d.ts +14 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"generateMetadata-C5QsMS-H.js","sources":["../src/seo/generateMetadata.tsx"],"sourcesContent":["/// <reference types=\"../core/jsx-types\" />\nimport { HEAD_PRIORITY } from '../core/head-priority';\nimport { Fragment, Head, resolveMetadata, useRequest } from '../core/jsx-runtime';\n\nimport { mergeMetadata } from './mergeMetadata';\nimport type { Metadata } from './types';\n\n/**\n * Converts Metadata object to SEO meta tags\n * This is the core function that transforms the metadata object into actual HTML tags\n *\n * If metadata is provided, it will be merged with metadata from the stack (from global/page loaders)\n * If no metadata is provided, it will use resolved metadata from the stack\n */\nexport function MetadataRenderer({ metadata }: { metadata?: Metadata }) {\n const { request } = useRequest();\n\n // Resolve metadata from stack (hierarchical metadata from loaders)\n const stackMetadata = resolveMetadata();\n\n // Merge: stack metadata (parent) + provided metadata (child)\n // If metadata is provided, it overrides stack metadata\n // If not provided, use stack metadata only\n const resolvedMetadata = metadata ? mergeMetadata(stackMetadata, metadata) : stackMetadata;\n\n if (!resolvedMetadata) return null;\n\n // Helper to normalize title\n const getTitle = () => {\n if (!resolvedMetadata.title) return null;\n if (typeof resolvedMetadata.title === 'string') return resolvedMetadata.title;\n // Handle TemplateString\n return resolvedMetadata.title.default;\n };\n\n // Helper to normalize robots\n const getRobots = () => {\n // tránh tiêm query\n const queryNames = Object.keys(request.query || {});\n // mặc định nếu có query sẽ ép robots về noindex\n // tuy nhiên 1 số trường hợp đặc biệt ví dụ như page=1 có chủ đích `allowQueryNames` sẽ bỏ qua nguyên tắc này\n\n const noindex =\n queryNames.filter((name) => {\n if (typeof resolvedMetadata.robots === 'string') return false;\n if (Array.isArray(resolvedMetadata.robots?.allowQueryNames))\n return !resolvedMetadata.robots.allowQueryNames.includes(name);\n return name !== resolvedMetadata.robots?.allowQueryNames;\n }).length > 0;\n\n if (noindex) return 'noindex, follow';\n\n if (!resolvedMetadata.robots) return null;\n if (typeof resolvedMetadata.robots === 'string') return resolvedMetadata.robots;\n\n const parts: string[] = [];\n if (resolvedMetadata.robots.index === false) parts.push('noindex');\n else if (resolvedMetadata.robots.index === true) parts.push('index');\n\n if (resolvedMetadata.robots.follow === false) parts.push('nofollow');\n else if (resolvedMetadata.robots.follow === true) parts.push('follow');\n\n if (resolvedMetadata.robots.noarchive) parts.push('noarchive');\n if (resolvedMetadata.robots.nosnippet) parts.push('nosnippet');\n if (resolvedMetadata.robots.noimageindex) parts.push('noimageindex');\n if (resolvedMetadata.robots.nocache) parts.push('nocache');\n\n return parts.length > 0 ? parts.join(', ') : null;\n };\n\n // Helper to normalize viewport\n const getViewport = () => {\n if (!resolvedMetadata.viewport) return null;\n if (typeof resolvedMetadata.viewport === 'string') return resolvedMetadata.viewport;\n\n const parts: string[] = [];\n if (resolvedMetadata.viewport.width) parts.push(`width=${resolvedMetadata.viewport.width}`);\n if (resolvedMetadata.viewport.height) parts.push(`height=${resolvedMetadata.viewport.height}`);\n if (resolvedMetadata.viewport.initialScale)\n parts.push(`initial-scale=${resolvedMetadata.viewport.initialScale}`);\n if (resolvedMetadata.viewport.maximumScale)\n parts.push(`maximum-scale=${resolvedMetadata.viewport.maximumScale}`);\n if (resolvedMetadata.viewport.minimumScale)\n parts.push(`minimum-scale=${resolvedMetadata.viewport.minimumScale}`);\n if (resolvedMetadata.viewport.userScalable !== undefined) {\n parts.push(`user-scalable=${resolvedMetadata.viewport.userScalable ? 'yes' : 'no'}`);\n }\n\n return parts.length > 0 ? parts.join(', ') : null;\n };\n\n // Helper to normalize keywords\n const getKeywords = () => {\n if (!resolvedMetadata.keywords) return null;\n if (Array.isArray(resolvedMetadata.keywords)) return resolvedMetadata.keywords.join(', ');\n return resolvedMetadata.keywords;\n };\n\n // Helper to normalize authors\n const getAuthors = () => {\n if (!resolvedMetadata.author) return [];\n if (typeof resolvedMetadata.author === 'string') return [{ name: resolvedMetadata.author }];\n if (Array.isArray(resolvedMetadata.author)) return resolvedMetadata.author;\n return [resolvedMetadata.author];\n };\n\n // Helper to normalize format detection\n const getFormatDetection = () => {\n if (!resolvedMetadata.formatDetection) return null;\n\n const parts: string[] = [];\n if (resolvedMetadata.formatDetection.telephone === false) parts.push('telephone=no');\n if (resolvedMetadata.formatDetection.date === false) parts.push('date=no');\n if (resolvedMetadata.formatDetection.address === false) parts.push('address=no');\n if (resolvedMetadata.formatDetection.email === false) parts.push('email=no');\n\n return parts.length > 0 ? parts.join(', ') : null;\n };\n\n // Helper to normalize Open Graph images\n const getOgImages = () => {\n if (!resolvedMetadata.openGraph?.images) return [];\n\n const images = Array.isArray(resolvedMetadata.openGraph.images)\n ? resolvedMetadata.openGraph.images\n : [resolvedMetadata.openGraph.images];\n\n return images.map((img) => {\n if (typeof img === 'string') return { url: img };\n return img;\n });\n };\n\n // Helper to normalize Twitter images\n const getTwitterImages = () => {\n if (!resolvedMetadata.twitter?.images) return [];\n\n const images = Array.isArray(resolvedMetadata.twitter.images)\n ? resolvedMetadata.twitter.images\n : [resolvedMetadata.twitter.images];\n\n return images.map((img) => {\n if (typeof img === 'string') return { url: img };\n return img;\n });\n };\n\n // Helper to get icon URLs\n const getIcons = () => {\n if (!resolvedMetadata.icons) return { icon: [], apple: [], shortcut: null, other: [] };\n\n const iconUrls = resolvedMetadata.icons.icon\n ? Array.isArray(resolvedMetadata.icons.icon)\n ? resolvedMetadata.icons.icon\n : [resolvedMetadata.icons.icon]\n : [];\n\n const appleUrls = resolvedMetadata.icons.apple\n ? Array.isArray(resolvedMetadata.icons.apple)\n ? resolvedMetadata.icons.apple\n : [resolvedMetadata.icons.apple]\n : [];\n\n return {\n icon: iconUrls,\n apple: appleUrls,\n shortcut: resolvedMetadata.icons.shortcut || null,\n other: resolvedMetadata.icons.other || [],\n };\n };\n\n const title = getTitle();\n const robots = getRobots();\n const viewport = getViewport();\n const keywords = getKeywords();\n const authors = getAuthors();\n const formatDetection = getFormatDetection();\n const ogImages = getOgImages();\n const twitterImages = getTwitterImages();\n const icons = getIcons();\n const themeColors = Array.isArray(resolvedMetadata.themeColor)\n ? resolvedMetadata.themeColor\n : resolvedMetadata.themeColor\n ? [resolvedMetadata.themeColor]\n : [];\n\n return (\n <>\n {/* Critical: charset, viewport - must be first */}\n {(resolvedMetadata.charset || viewport) && (\n <Head priority={HEAD_PRIORITY.CRITICAL}>\n {resolvedMetadata.charset && <meta charset={resolvedMetadata.charset} />}\n {viewport && <meta name=\"viewport\" content={viewport} />}\n </Head>\n )}\n\n {/* High priority: title, description, canonical, prev/next */}\n {(title ||\n resolvedMetadata.description ||\n resolvedMetadata.canonical ||\n resolvedMetadata.prev ||\n resolvedMetadata.next) && (\n <Head priority={HEAD_PRIORITY.HIGH}>\n {title && <title>{title}</title>}\n {resolvedMetadata.description && (\n <meta name=\"description\" content={resolvedMetadata.description} />\n )}\n {resolvedMetadata.canonical && <link rel=\"canonical\" href={resolvedMetadata.canonical} />}\n {resolvedMetadata.prev && <link rel=\"prev\" href={resolvedMetadata.prev} />}\n {resolvedMetadata.next && <link rel=\"next\" href={resolvedMetadata.next} />}\n </Head>\n )}\n\n {/* Medium priority: meta tags, robots */}\n <Head priority={HEAD_PRIORITY.MEDIUM}>\n {keywords && <meta name=\"keywords\" content={keywords} />}\n {robots && <meta name=\"robots\" content={robots} />}\n {resolvedMetadata.colorScheme && (\n <meta name=\"color-scheme\" content={resolvedMetadata.colorScheme} />\n )}\n\n {/* Theme colors */}\n {themeColors.map((color, index) => (\n <meta name=\"theme-color\" content={color} />\n ))}\n\n {resolvedMetadata.generator && (\n <meta name=\"generator\" content={resolvedMetadata.generator} />\n )}\n {resolvedMetadata.creator && <meta name=\"creator\" content={resolvedMetadata.creator} />}\n {resolvedMetadata.publisher && (\n <meta name=\"publisher\" content={resolvedMetadata.publisher} />\n )}\n {resolvedMetadata.referrer && <meta name=\"referrer\" content={resolvedMetadata.referrer} />}\n {resolvedMetadata.category && <meta name=\"category\" content={resolvedMetadata.category} />}\n {resolvedMetadata.classification && (\n <meta name=\"classification\" content={resolvedMetadata.classification} />\n )}\n {formatDetection && <meta name=\"format-detection\" content={formatDetection} />}\n\n {/* Authors */}\n {authors.map((author, index) => (\n <Fragment>\n <meta name=\"author\" content={author.name} />\n {author.url && <link rel=\"author\" href={author.url} />}\n </Fragment>\n ))}\n\n {/* Icons */}\n {icons.icon.map((url, index) => (\n <link rel=\"icon\" href={url} />\n ))}\n {icons.shortcut && <link rel=\"shortcut icon\" href={icons.shortcut} />}\n {icons.apple.map((url, index) => (\n <link rel=\"apple-touch-icon\" href={url} />\n ))}\n {icons.other.map((icon, index) => (\n <link\n rel={icon.rel || 'icon'}\n href={icon.url}\n {...(icon.sizes && { sizes: icon.sizes })}\n {...(icon.type && { type: icon.type })}\n />\n ))}\n\n {/* Manifest */}\n {resolvedMetadata.manifest && <link rel=\"manifest\" href={resolvedMetadata.manifest} />}\n\n {/* Feeds */}\n {resolvedMetadata.feed && (\n <link rel=\"alternate\" type=\"application/rss+xml\" href={resolvedMetadata.feed} />\n )}\n\n {/* Verification */}\n {resolvedMetadata.verification?.google && (\n <meta name=\"google-site-verification\" content={resolvedMetadata.verification.google} />\n )}\n {resolvedMetadata.verification?.yahoo && (\n <meta name=\"y_key\" content={resolvedMetadata.verification.yahoo} />\n )}\n {resolvedMetadata.verification?.yandex && (\n <meta name=\"yandex-verification\" content={resolvedMetadata.verification.yandex} />\n )}\n {resolvedMetadata.verification?.me &&\n (Array.isArray(resolvedMetadata.verification.me) ? (\n resolvedMetadata.verification.me.map((url, index) => <link rel=\"me\" href={url} />)\n ) : (\n <link rel=\"me\" href={resolvedMetadata.verification.me} />\n ))}\n {resolvedMetadata.verification?.other &&\n Object.entries(resolvedMetadata.verification.other).map(([key, value]) =>\n Array.isArray(value) ? (\n value.map((v, index) => <meta name={key} content={v} />)\n ) : (\n <meta name={key} content={value} />\n ),\n )}\n\n {/* App Links */}\n {resolvedMetadata.appLinks && (\n <Fragment>\n {resolvedMetadata.appLinks.ios?.url && (\n <meta property=\"al:ios:url\" content={resolvedMetadata.appLinks.ios.url} />\n )}\n {resolvedMetadata.appLinks.ios?.app_store_id && (\n <meta\n property=\"al:ios:app_store_id\"\n content={resolvedMetadata.appLinks.ios.app_store_id}\n />\n )}\n {resolvedMetadata.appLinks.ios?.app_name && (\n <meta property=\"al:ios:app_name\" content={resolvedMetadata.appLinks.ios.app_name} />\n )}\n {resolvedMetadata.appLinks.android?.package && (\n <meta\n property=\"al:android:package\"\n content={resolvedMetadata.appLinks.android.package}\n />\n )}\n {resolvedMetadata.appLinks.android?.app_name && (\n <meta\n property=\"al:android:app_name\"\n content={resolvedMetadata.appLinks.android.app_name}\n />\n )}\n {resolvedMetadata.appLinks.android?.url && (\n <meta property=\"al:android:url\" content={resolvedMetadata.appLinks.android.url} />\n )}\n {resolvedMetadata.appLinks.web?.url && (\n <meta property=\"al:web:url\" content={resolvedMetadata.appLinks.web.url} />\n )}\n {resolvedMetadata.appLinks.web?.should_fallback !== undefined && (\n <meta\n property=\"al:web:should_fallback\"\n content={String(resolvedMetadata.appLinks.web.should_fallback)}\n />\n )}\n </Fragment>\n )}\n\n {/* Additional meta tags */}\n {resolvedMetadata.other &&\n Object.entries(resolvedMetadata.other).map(([key, value]) =>\n Array.isArray(value) ? (\n value.map((v, index) => <meta name={key} content={String(v)} />)\n ) : (\n <meta name={key} content={String(value)} />\n ),\n )}\n </Head>\n\n {/* SEO: OpenGraph, Twitter - lower priority */}\n {(resolvedMetadata.openGraph || resolvedMetadata.twitter) && (\n <Head priority={HEAD_PRIORITY.SEO}>\n {/* Open Graph */}\n {resolvedMetadata.openGraph && (\n <Fragment>\n {resolvedMetadata.openGraph.title && (\n <meta property=\"og:title\" content={resolvedMetadata.openGraph.title} />\n )}\n {resolvedMetadata.openGraph.description && (\n <meta property=\"og:description\" content={resolvedMetadata.openGraph.description} />\n )}\n {resolvedMetadata.openGraph.type && (\n <meta property=\"og:type\" content={resolvedMetadata.openGraph.type} />\n )}\n {resolvedMetadata.openGraph.url && (\n <meta property=\"og:url\" content={resolvedMetadata.openGraph.url} />\n )}\n {resolvedMetadata.openGraph.siteName && (\n <meta property=\"og:site_name\" content={resolvedMetadata.openGraph.siteName} />\n )}\n {resolvedMetadata.openGraph.locale && (\n <meta property=\"og:locale\" content={resolvedMetadata.openGraph.locale} />\n )}\n {resolvedMetadata.openGraph.alternateLocale &&\n (Array.isArray(resolvedMetadata.openGraph.alternateLocale) ? (\n resolvedMetadata.openGraph.alternateLocale.map((locale, index) => (\n <meta property=\"og:locale:alternate\" content={locale} />\n ))\n ) : (\n <meta\n property=\"og:locale:alternate\"\n content={resolvedMetadata.openGraph.alternateLocale}\n />\n ))}\n {resolvedMetadata.openGraph.determiner && (\n <meta property=\"og:determiner\" content={resolvedMetadata.openGraph.determiner} />\n )}\n\n {/* OG Images */}\n {ogImages.map((image, index) => (\n <Fragment>\n <meta property=\"og:image\" content={image.url} />\n {image.secureUrl && (\n <meta property=\"og:image:secure_url\" content={image.secureUrl} />\n )}\n {image.alt && <meta property=\"og:image:alt\" content={image.alt} />}\n {image.type && <meta property=\"og:image:type\" content={image.type} />}\n {image.width && <meta property=\"og:image:width\" content={String(image.width)} />}\n {image.height && (\n <meta property=\"og:image:height\" content={String(image.height)} />\n )}\n </Fragment>\n ))}\n\n {/* Article specific */}\n {resolvedMetadata.openGraph.publishedTime && (\n <meta\n property=\"article:published_time\"\n content={resolvedMetadata.openGraph.publishedTime}\n />\n )}\n {resolvedMetadata.openGraph.modifiedTime && (\n <meta\n property=\"article:modified_time\"\n content={resolvedMetadata.openGraph.modifiedTime}\n />\n )}\n {resolvedMetadata.openGraph.expirationTime && (\n <meta\n property=\"article:expiration_time\"\n content={resolvedMetadata.openGraph.expirationTime}\n />\n )}\n {resolvedMetadata.openGraph.authors &&\n (Array.isArray(resolvedMetadata.openGraph.authors) ? (\n resolvedMetadata.openGraph.authors.map((author, index) => (\n <meta property=\"article:author\" content={author} />\n ))\n ) : (\n <meta property=\"article:author\" content={resolvedMetadata.openGraph.authors} />\n ))}\n {resolvedMetadata.openGraph.section && (\n <meta property=\"article:section\" content={resolvedMetadata.openGraph.section} />\n )}\n {resolvedMetadata.openGraph.tags &&\n (Array.isArray(resolvedMetadata.openGraph.tags) ? (\n resolvedMetadata.openGraph.tags.map((tag, index) => (\n <meta property=\"article:tag\" content={tag} />\n ))\n ) : (\n <meta property=\"article:tag\" content={resolvedMetadata.openGraph.tags} />\n ))}\n\n {/* Book specific */}\n {resolvedMetadata.openGraph.isbn && (\n <meta property=\"book:isbn\" content={resolvedMetadata.openGraph.isbn} />\n )}\n {resolvedMetadata.openGraph.releaseDate && (\n <meta\n property=\"book:release_date\"\n content={resolvedMetadata.openGraph.releaseDate}\n />\n )}\n\n {/* Profile specific */}\n {resolvedMetadata.openGraph.firstName && (\n <meta\n property=\"profile:first_name\"\n content={resolvedMetadata.openGraph.firstName}\n />\n )}\n {resolvedMetadata.openGraph.lastName && (\n <meta property=\"profile:last_name\" content={resolvedMetadata.openGraph.lastName} />\n )}\n {resolvedMetadata.openGraph.username && (\n <meta property=\"profile:username\" content={resolvedMetadata.openGraph.username} />\n )}\n {resolvedMetadata.openGraph.gender && (\n <meta property=\"profile:gender\" content={resolvedMetadata.openGraph.gender} />\n )}\n </Fragment>\n )}\n\n {/* Twitter Card */}\n {resolvedMetadata.twitter && (\n <Fragment>\n {resolvedMetadata.twitter.card && (\n <meta name=\"twitter:card\" content={resolvedMetadata.twitter.card} />\n )}\n {resolvedMetadata.twitter.site && (\n <meta name=\"twitter:site\" content={resolvedMetadata.twitter.site} />\n )}\n {resolvedMetadata.twitter.siteId && (\n <meta name=\"twitter:site:id\" content={resolvedMetadata.twitter.siteId} />\n )}\n {resolvedMetadata.twitter.creator && (\n <meta name=\"twitter:creator\" content={resolvedMetadata.twitter.creator} />\n )}\n {resolvedMetadata.twitter.creatorId && (\n <meta name=\"twitter:creator:id\" content={resolvedMetadata.twitter.creatorId} />\n )}\n {resolvedMetadata.twitter.title && (\n <meta name=\"twitter:title\" content={resolvedMetadata.twitter.title} />\n )}\n {resolvedMetadata.twitter.description && (\n <meta name=\"twitter:description\" content={resolvedMetadata.twitter.description} />\n )}\n\n {/* Twitter Images */}\n {twitterImages.map((image, index) => (\n <Fragment>\n <meta name=\"twitter:image\" content={image.url} />\n {image.alt && <meta name=\"twitter:image:alt\" content={image.alt} />}\n </Fragment>\n ))}\n\n {/* Twitter App */}\n {resolvedMetadata.twitter.app && (\n <Fragment>\n {resolvedMetadata.twitter.app.name && (\n <meta name=\"twitter:app:name\" content={resolvedMetadata.twitter.app.name} />\n )}\n {resolvedMetadata.twitter.app.id.iphone && (\n <meta\n name=\"twitter:app:id:iphone\"\n content={resolvedMetadata.twitter.app.id.iphone}\n />\n )}\n {resolvedMetadata.twitter.app.id.ipad && (\n <meta\n name=\"twitter:app:id:ipad\"\n content={resolvedMetadata.twitter.app.id.ipad}\n />\n )}\n {resolvedMetadata.twitter.app.id.googleplay && (\n <meta\n name=\"twitter:app:id:googleplay\"\n content={resolvedMetadata.twitter.app.id.googleplay}\n />\n )}\n {resolvedMetadata.twitter.app.url?.iphone && (\n <meta\n name=\"twitter:app:url:iphone\"\n content={resolvedMetadata.twitter.app.url.iphone}\n />\n )}\n {resolvedMetadata.twitter.app.url?.ipad && (\n <meta\n name=\"twitter:app:url:ipad\"\n content={resolvedMetadata.twitter.app.url.ipad}\n />\n )}\n {resolvedMetadata.twitter.app.url?.googleplay && (\n <meta\n name=\"twitter:app:url:googleplay\"\n content={resolvedMetadata.twitter.app.url.googleplay}\n />\n )}\n </Fragment>\n )}\n </Fragment>\n )}\n </Head>\n )}\n </>\n );\n}\n"],"names":["MetadataRenderer","metadata","request","useRequest","stackMetadata","resolveMetadata","resolvedMetadata","mergeMetadata","getTitle","getRobots","name","parts","getViewport","getKeywords","getAuthors","getFormatDetection","getOgImages","img","getTwitterImages","getIcons","iconUrls","appleUrls","title","robots","viewport","keywords","authors","formatDetection","ogImages","twitterImages","icons","themeColors","jsxFactory","__Fragment","Head","HEAD_PRIORITY","color","index","author","Fragment","url","icon","key","value","v","locale","image","tag"],"mappings":"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"}
@@ -0,0 +1,163 @@
1
+ function f(e) {
2
+ return e ? e.split(";").reduce(
3
+ (t, r) => {
4
+ const [n, ...s] = r.split("=");
5
+ return n && s.length > 0 && (t[n.trim()] = decodeURIComponent(s.join("=").trim())), t;
6
+ },
7
+ {}
8
+ ) : {};
9
+ }
10
+ function b(e) {
11
+ const t = new Headers();
12
+ return Object.entries(e.headers).forEach(([r, n]) => {
13
+ if (n !== void 0) {
14
+ if (Array.isArray(n)) {
15
+ n.forEach((s) => t.append(r, s));
16
+ return;
17
+ }
18
+ t.set(r, n);
19
+ }
20
+ }), t;
21
+ }
22
+ function g(e) {
23
+ return e;
24
+ }
25
+ function R(...e) {
26
+ const t = e.filter(Boolean), r = t.length;
27
+ return r ? (n, s) => {
28
+ let i;
29
+ return o(0, n);
30
+ function o(a, u) {
31
+ const h = t[a];
32
+ return h(u, async (c) => a < r - 1 ? (c && (i = c, l(u, c)), o(a + 1, u)) : s(c ?? i));
33
+ }
34
+ } : (n, s) => s();
35
+ }
36
+ function l(e, t) {
37
+ let r;
38
+ t instanceof Request ? r = t : t instanceof URL ? r = new Request(t.href, e.request.clone()) : r = new Request(new URL(t, e.url).href, e.request.clone());
39
+ const n = e.url, s = new URL(r.url), i = f(r.headers.get("cookie") ?? void 0);
40
+ if (e.request = r, e.url = s, e.cookies = i, e.requestInfo) {
41
+ const o = {};
42
+ r.headers.forEach((a, u) => {
43
+ o[u] = a;
44
+ }), e.requestInfo = {
45
+ ...e.requestInfo,
46
+ url: s,
47
+ path: p(s, n, e.requestInfo.path),
48
+ pathname: s.pathname,
49
+ method: r.method,
50
+ headers: o,
51
+ cookies: i,
52
+ query: Object.fromEntries(s.searchParams.entries())
53
+ };
54
+ }
55
+ }
56
+ function p(e, t, r) {
57
+ const n = `${e.pathname}${e.search}` || "/";
58
+ if (!r)
59
+ return n;
60
+ const s = r.split("?")[0] || "/";
61
+ if (s === t.pathname || !t.pathname.endsWith(s))
62
+ return n;
63
+ const i = t.pathname.slice(
64
+ 0,
65
+ t.pathname.length - s.length
66
+ );
67
+ if (!i || !e.pathname.startsWith(i))
68
+ return n;
69
+ const o = e.pathname.slice(i.length) || "/";
70
+ return `${o.startsWith("/") ? o : `/${o}`}${e.search}`;
71
+ }
72
+ function P({
73
+ request: e,
74
+ requestInfo: t,
75
+ locals: r = {},
76
+ clientAddress: n
77
+ }) {
78
+ const s = {
79
+ cookies: f(e.headers.get("cookie") ?? void 0),
80
+ request: e,
81
+ requestInfo: t,
82
+ url: new URL(e.url),
83
+ redirect(i, o = 302) {
84
+ return new Response(null, {
85
+ status: o,
86
+ headers: {
87
+ Location: i.toString()
88
+ }
89
+ });
90
+ },
91
+ rewrite(i) {
92
+ return Promise.resolve(new Response(null));
93
+ },
94
+ get clientAddress() {
95
+ if (n)
96
+ return n;
97
+ throw new Error("clientAddress is not available for this request.");
98
+ }
99
+ };
100
+ return Object.defineProperty(s, "locals", {
101
+ enumerable: !0,
102
+ get() {
103
+ if (typeof r != "object" || r === null || Array.isArray(r))
104
+ throw new Error("Middleware locals must be a plain object.");
105
+ return r;
106
+ },
107
+ set() {
108
+ throw new Error("Middleware locals cannot be reassigned. Mutate its properties instead.");
109
+ }
110
+ }), s.rewrite = (i) => Promise.resolve(
111
+ new Response(null, {
112
+ status: 307,
113
+ headers: {
114
+ "X-L5E-Rewrite": w(i, s.url)
115
+ }
116
+ })
117
+ ), s;
118
+ }
119
+ function d(e) {
120
+ const t = [e];
121
+ for (; t.length > 0; ) {
122
+ const r = t.pop(), n = typeof r;
123
+ if (!(r === null || n === "string" || n === "number" || n === "boolean")) {
124
+ if (Array.isArray(r)) {
125
+ t.push(...r);
126
+ continue;
127
+ }
128
+ if (n === "object" && m(r)) {
129
+ t.push(...Object.values(r));
130
+ continue;
131
+ }
132
+ return !1;
133
+ }
134
+ }
135
+ return !0;
136
+ }
137
+ function m(e) {
138
+ if (typeof e != "object" || e === null) return !1;
139
+ const t = Object.getPrototypeOf(e);
140
+ if (t === null) return !0;
141
+ let r = t;
142
+ for (; Object.getPrototypeOf(r) !== null; )
143
+ r = Object.getPrototypeOf(r);
144
+ return t === r;
145
+ }
146
+ function q(e) {
147
+ if (d(e))
148
+ return JSON.stringify(e);
149
+ throw new Error("The passed value can't be serialized.");
150
+ }
151
+ function w(e, t) {
152
+ return e instanceof Request ? e.url : e instanceof URL ? e.href : new URL(e, t).href;
153
+ }
154
+ export {
155
+ b as a,
156
+ P as c,
157
+ g as d,
158
+ d as i,
159
+ f as p,
160
+ R as s,
161
+ q as t
162
+ };
163
+ //# sourceMappingURL=index-BIt7MJT9.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index-BIt7MJT9.js","sources":["../src/core/request.ts","../src/middleware/defineMiddleware.ts","../src/middleware/sequence.ts","../src/middleware/index.ts"],"sourcesContent":["import type { Request } from 'express';\n\nexport function parseCookies(cookieHeader?: string): Record<string, string> {\n if (!cookieHeader) return {};\n\n return cookieHeader.split(';').reduce(\n (cookies, cookie) => {\n const [name, ...rest] = cookie.split('=');\n if (name && rest.length > 0) {\n cookies[name.trim()] = decodeURIComponent(rest.join('=').trim());\n }\n return cookies;\n },\n {} as Record<string, string>,\n );\n}\n\nexport function createHeadersFromExpressRequest(req: Request): Headers {\n const headers = new Headers();\n\n Object.entries(req.headers).forEach(([key, value]) => {\n if (value === undefined) return;\n if (Array.isArray(value)) {\n value.forEach((item) => headers.append(key, item));\n return;\n }\n headers.set(key, value);\n });\n\n return headers;\n}\n","import type { MiddlewareHandler } from './types';\n\nexport function defineMiddleware(fn: MiddlewareHandler): MiddlewareHandler {\n return fn;\n}\n","import { parseCookies } from '../core/request';\nimport { defineMiddleware } from './defineMiddleware';\nimport type { MiddlewareContext, MiddlewareHandler, RewritePayload } from './types';\n\n// From SvelteKit via Astro: compose middleware handlers in declaration order.\nexport function sequence(...handlers: Array<MiddlewareHandler | false | null | undefined>) {\n const filtered = handlers.filter(Boolean) as MiddlewareHandler[];\n const length = filtered.length;\n\n if (!length) {\n return defineMiddleware((_context, next) => {\n return next();\n });\n }\n\n return defineMiddleware((context, next) => {\n let carriedPayload: RewritePayload | undefined;\n return applyHandle(0, context);\n\n function applyHandle(\n i: number,\n handleContext: MiddlewareContext,\n ): Promise<Response> | Response {\n const handle = filtered[i];\n\n return handle(handleContext, async (payload?: RewritePayload) => {\n if (i < length - 1) {\n if (payload) {\n carriedPayload = payload;\n updateContextForRewrite(handleContext, payload);\n }\n return applyHandle(i + 1, handleContext);\n }\n\n return next(payload ?? carriedPayload);\n });\n }\n });\n}\n\nfunction updateContextForRewrite(context: MiddlewareContext, payload: RewritePayload): void {\n let request: Request;\n\n if (payload instanceof Request) {\n request = payload;\n } else if (payload instanceof URL) {\n request = new Request(payload.href, context.request.clone());\n } else {\n request = new Request(new URL(payload, context.url).href, context.request.clone());\n }\n\n const previousUrl = context.url;\n const nextUrl = new URL(request.url);\n const nextCookies = parseCookies(request.headers.get('cookie') ?? undefined);\n context.request = request;\n context.url = nextUrl;\n context.cookies = nextCookies;\n\n if (context.requestInfo) {\n const headers: Record<string, string> = {};\n request.headers.forEach((value, key) => {\n headers[key] = value;\n });\n\n context.requestInfo = {\n ...context.requestInfo,\n url: nextUrl,\n path: getRequestInfoPath(nextUrl, previousUrl, context.requestInfo.path),\n pathname: nextUrl.pathname,\n method: request.method,\n headers,\n cookies: nextCookies,\n query: Object.fromEntries(nextUrl.searchParams.entries()),\n };\n }\n}\n\nfunction getRequestInfoPath(nextUrl: URL, previousUrl: URL, previousPath?: string): string {\n const nextPath = `${nextUrl.pathname}${nextUrl.search}` || '/';\n if (!previousPath) {\n return nextPath;\n }\n\n const previousPathname = previousPath.split('?')[0] || '/';\n if (\n previousPathname === previousUrl.pathname ||\n !previousUrl.pathname.endsWith(previousPathname)\n ) {\n return nextPath;\n }\n\n const basePathname = previousUrl.pathname.slice(\n 0,\n previousUrl.pathname.length - previousPathname.length,\n );\n if (!basePathname || !nextUrl.pathname.startsWith(basePathname)) {\n return nextPath;\n }\n\n const strippedPathname = nextUrl.pathname.slice(basePathname.length) || '/';\n const normalizedPathname = strippedPathname.startsWith('/')\n ? strippedPathname\n : `/${strippedPathname}`;\n return `${normalizedPathname}${nextUrl.search}`;\n}\n","import { parseCookies } from '../core/request';\nimport { defineMiddleware } from './defineMiddleware';\nimport { sequence } from './sequence';\nimport type { CreateContext, MiddlewareContext, RewritePayload } from './types';\n\nexport type {\n CreateContext,\n MiddlewareContext,\n MiddlewareHandler,\n MiddlewareNext,\n RewritePayload,\n} from './types';\n\nexport { defineMiddleware, sequence };\n\nexport function createContext({\n request,\n requestInfo,\n locals = {},\n clientAddress,\n}: CreateContext): MiddlewareContext {\n const context = {\n cookies: parseCookies(request.headers.get('cookie') ?? undefined),\n request,\n requestInfo,\n url: new URL(request.url),\n redirect(path: string | URL, status = 302) {\n return new Response(null, {\n status,\n headers: {\n Location: path.toString(),\n },\n });\n },\n rewrite(payload: RewritePayload) {\n return Promise.resolve(new Response(null));\n },\n get clientAddress() {\n if (clientAddress) {\n return clientAddress;\n }\n throw new Error('clientAddress is not available for this request.');\n },\n } as Omit<MiddlewareContext, 'locals'> & {\n locals: Record<string, unknown>;\n };\n\n Object.defineProperty(context, 'locals', {\n enumerable: true,\n get() {\n if (typeof locals !== 'object' || locals === null || Array.isArray(locals)) {\n throw new Error('Middleware locals must be a plain object.');\n }\n return locals;\n },\n set() {\n throw new Error('Middleware locals cannot be reassigned. Mutate its properties instead.');\n },\n });\n\n context.rewrite = (payload: RewritePayload) => {\n return Promise.resolve(\n new Response(null, {\n status: 307,\n headers: {\n 'X-L5E-Rewrite': stringifyRewritePayload(payload, context.url),\n },\n }),\n );\n };\n\n return context;\n}\n\nexport function isLocalsSerializable(value: unknown): boolean {\n const stack: unknown[] = [value];\n\n while (stack.length > 0) {\n const current = stack.pop();\n const type = typeof current;\n\n if (current === null || type === 'string' || type === 'number' || type === 'boolean') {\n continue;\n }\n\n if (Array.isArray(current)) {\n stack.push(...current);\n continue;\n }\n\n if (type === 'object' && isPlainObject(current)) {\n stack.push(...Object.values(current as Record<string, unknown>));\n continue;\n }\n\n return false;\n }\n\n return true;\n}\n\nfunction isPlainObject(value: unknown): value is object {\n if (typeof value !== 'object' || value === null) return false;\n\n const proto = Object.getPrototypeOf(value);\n if (proto === null) return true;\n\n let baseProto = proto;\n while (Object.getPrototypeOf(baseProto) !== null) {\n baseProto = Object.getPrototypeOf(baseProto);\n }\n\n return proto === baseProto;\n}\n\nexport function trySerializeLocals(value: unknown): string {\n if (isLocalsSerializable(value)) {\n return JSON.stringify(value);\n }\n throw new Error(\"The passed value can't be serialized.\");\n}\n\nfunction stringifyRewritePayload(payload: RewritePayload, currentUrl: URL): string {\n if (payload instanceof Request) {\n return payload.url;\n }\n\n if (payload instanceof URL) {\n return payload.href;\n }\n\n return new URL(payload, currentUrl).href;\n}\n"],"names":["parseCookies","cookieHeader","cookies","cookie","name","rest","createHeadersFromExpressRequest","req","headers","key","value","item","defineMiddleware","fn","sequence","handlers","filtered","length","context","next","carriedPayload","applyHandle","i","handleContext","handle","payload","updateContextForRewrite","_context","request","previousUrl","nextUrl","nextCookies","getRequestInfoPath","previousPath","nextPath","previousPathname","basePathname","strippedPathname","createContext","requestInfo","locals","clientAddress","path","status","stringifyRewritePayload","isLocalsSerializable","stack","current","type","isPlainObject","proto","baseProto","trySerializeLocals","currentUrl"],"mappings":"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"}
package/dist/index.js ADDED
@@ -0,0 +1,49 @@
1
+ import { B as s, H as t, I as r, N as n, R as o, S as i, e as c, a as d, r as l, b as p, c as x } from "./entry-server-Ckh6zfgm.js";
2
+ import { F as g, H as m, a as u, b as S, c as C, g as H, d as R, e as f, f as h, h as I, i as v, j as T, k as b, p as q, l as F, r as M, n as N, o as J, s as L, u as V, q as j, t as w } from "./jsx-runtime-C2Vw67N2.js";
3
+ import { coreVite as z } from "./vite-plugin.js";
4
+ import { c as P, d as k, i as A, s as D, t as O } from "./index-BIt7MJT9.js";
5
+ import { createServer as Y, startServer as _ } from "./server.js";
6
+ export {
7
+ s as BadRequestException,
8
+ g as Fragment,
9
+ m as HEAD_PRIORITY,
10
+ u as Head,
11
+ t as HttpException,
12
+ r as InternalServerErrorException,
13
+ n as NotFoundException,
14
+ o as RedirectException,
15
+ i as ServiceUnavailableException,
16
+ S as addCacheTag,
17
+ C as cloneElement,
18
+ z as coreVite,
19
+ P as createContext,
20
+ Y as createServer,
21
+ k as defineMiddleware,
22
+ c as escapeHTML,
23
+ d as escapeProp,
24
+ H as getCacheTags,
25
+ R as getClientJsEntries,
26
+ f as getCssEntries,
27
+ h as getHeadContent,
28
+ I as getIslandEntries,
29
+ v as getSchemas,
30
+ A as isLocalsSerializable,
31
+ T as isValidElement,
32
+ b as jsxFactory,
33
+ q as pushMetadata,
34
+ F as pushSchema,
35
+ M as registerIsland,
36
+ l as render,
37
+ p as renderJsxToHtmlString,
38
+ x as renderToRenderedNode,
39
+ N as resolveMetadata,
40
+ J as runInRenderContext,
41
+ D as sequence,
42
+ L as setViewName,
43
+ _ as startServer,
44
+ O as trySerializeLocals,
45
+ V as useClientJs,
46
+ j as useCss,
47
+ w as useRequest
48
+ };
49
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sources":[],"sourcesContent":[],"names":[],"mappings":";;;;;"}
@@ -0,0 +1,5 @@
1
+ import { r as e } from "../client-D67hK4Yy.js";
2
+ export {
3
+ e as registerMountStrategy
4
+ };
5
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sources":[],"sourcesContent":[],"names":[],"mappings":";"}
@@ -0,0 +1,98 @@
1
+ import { r as a, s as c } from "../client-D67hK4Yy.js";
2
+ import "virtual:l5e-island-strategies";
3
+ a("load", (e) => {
4
+ e();
5
+ });
6
+ a("idle", (e) => {
7
+ "requestIdleCallback" in window ? requestIdleCallback(() => e()) : setTimeout(() => e(), 200);
8
+ });
9
+ a("visible", (e, t, r) => {
10
+ const o = t || "200px", n = new IntersectionObserver(
11
+ (s) => {
12
+ s.forEach((i) => {
13
+ i.isIntersecting && (n.disconnect(), e());
14
+ });
15
+ },
16
+ { rootMargin: o }
17
+ );
18
+ return n.observe(r), () => n.disconnect();
19
+ });
20
+ a("media", (e, t) => {
21
+ if (!t) {
22
+ console.error('[l5e-island] Strategy "media" requires mountOpts (media query)');
23
+ return;
24
+ }
25
+ const r = window.matchMedia(t);
26
+ if (r.matches)
27
+ e();
28
+ else {
29
+ const o = (n) => {
30
+ n.matches && e();
31
+ };
32
+ return r.addEventListener("change", o, { once: !0 }), () => r.removeEventListener("change", o);
33
+ }
34
+ });
35
+ a("none", () => {
36
+ });
37
+ const u = window.__L5E_ISLANDS__ || {};
38
+ function l() {
39
+ return Array.from(document.querySelectorAll("[data-island]")).map((e) => ({
40
+ element: e,
41
+ registryKey: e.getAttribute("data-island"),
42
+ exportName: e.getAttribute("data-island-name"),
43
+ props: JSON.parse(e.getAttribute("data-island-props") || "{}"),
44
+ mount: e.getAttribute("data-island-mount") || "load",
45
+ mountOpts: e.getAttribute("data-island-opts") || void 0
46
+ }));
47
+ }
48
+ function m(e) {
49
+ let t = !1;
50
+ return async () => {
51
+ if (t) return;
52
+ t = !0;
53
+ const r = u[e.registryKey];
54
+ if (!r) {
55
+ console.error(
56
+ `[l5e-island] Component "${e.registryKey}" not found in page registry.`,
57
+ `Available: ${Object.keys(u).join(", ")}`
58
+ );
59
+ return;
60
+ }
61
+ try {
62
+ const [{ createRoot: o }, { createElement: n }, s] = await Promise.all([
63
+ import("react-dom/client"),
64
+ import("react"),
65
+ import(
66
+ /* @vite-ignore */
67
+ r
68
+ )
69
+ ]), i = s.default || s[e.exportName];
70
+ if (!i) {
71
+ console.error(`[l5e-island] No export "default" or "${e.exportName}" in module`);
72
+ return;
73
+ }
74
+ o(e.element).render(n(i, e.props));
75
+ } catch (o) {
76
+ console.error(`[l5e-island] Failed to mount "${e.registryKey}":`, o);
77
+ }
78
+ };
79
+ }
80
+ function g(e) {
81
+ const t = c.get(e.mount);
82
+ if (!t) {
83
+ console.error(
84
+ `[l5e-island] Strategy "${e.mount}" not found.`,
85
+ `Available: ${[...c.keys()].join(", ")}`,
86
+ `
87
+ Did you forget to registerMountStrategy("${e.mount}", ...)?`
88
+ );
89
+ return;
90
+ }
91
+ const r = m(e);
92
+ t(r, e.mountOpts, e.element);
93
+ }
94
+ function d() {
95
+ l().forEach(g);
96
+ }
97
+ document.readyState === "loading" ? document.addEventListener("DOMContentLoaded", d) : d();
98
+ //# sourceMappingURL=runtime.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"runtime.js","sources":["../../src/island/runtime.ts"],"sourcesContent":["import type { IslandMeta } from './types';\nimport { strategies, registerMountStrategy } from './strategy-registry';\n\n// ============================================================\n// PART 1: Built-in strategies\n// ============================================================\n\nregisterMountStrategy('load', (mount) => {\n mount();\n});\n\nregisterMountStrategy('idle', (mount) => {\n if ('requestIdleCallback' in window) {\n requestIdleCallback(() => mount());\n } else {\n setTimeout(() => mount(), 200);\n }\n});\n\nregisterMountStrategy('visible', (mount, opts, el) => {\n const rootMargin = opts || '200px';\n const observer = new IntersectionObserver(\n (entries) => {\n entries.forEach((entry) => {\n if (entry.isIntersecting) {\n observer.disconnect();\n mount();\n }\n });\n },\n { rootMargin },\n );\n observer.observe(el);\n return () => observer.disconnect();\n});\n\nregisterMountStrategy('media', (mount, opts) => {\n if (!opts) {\n console.error('[l5e-island] Strategy \"media\" requires mountOpts (media query)');\n return;\n }\n const mql = window.matchMedia(opts);\n if (mql.matches) {\n mount();\n } else {\n const handler = (e: MediaQueryListEvent) => {\n if (e.matches) mount();\n };\n mql.addEventListener('change', handler, { once: true });\n return () => mql.removeEventListener('change', handler);\n }\n});\n\nregisterMountStrategy('none', () => {\n // Don't mount - keep placeholder as-is\n});\n\n// ============================================================\n// PART 2: Import custom strategies (if any)\n// ============================================================\n\nimport 'virtual:l5e-island-strategies';\n\n// ============================================================\n// PART 3: Island discovery + mount logic\n// ============================================================\n\n// Per-page island registry injected by server.ts as inline script\n// Format: { \"Counter_a3f2\": \"/assets/Counter-Abc123.js\" }\nconst islandRegistry: Record<string, string> = (window as any).__L5E_ISLANDS__ || {};\n\nfunction discoverIslands(): IslandMeta[] {\n return Array.from(document.querySelectorAll('[data-island]')).map((el) => ({\n element: el as HTMLElement,\n registryKey: el.getAttribute('data-island')!,\n exportName: el.getAttribute('data-island-name')!,\n props: JSON.parse(el.getAttribute('data-island-props') || '{}'),\n mount: el.getAttribute('data-island-mount') || 'load',\n mountOpts: el.getAttribute('data-island-opts') || undefined,\n }));\n}\n\nfunction createMountFn(island: IslandMeta): () => Promise<void> {\n let mounted = false;\n return async () => {\n if (mounted) return;\n mounted = true;\n\n // Look up component URL from per-page registry\n const url = islandRegistry[island.registryKey];\n if (!url) {\n console.error(\n `[l5e-island] Component \"${island.registryKey}\" not found in page registry.`,\n `Available: ${Object.keys(islandRegistry).join(', ')}`,\n );\n return;\n }\n\n try {\n const [{ createRoot }, { createElement }, mod] = await Promise.all([\n import('react-dom/client'),\n import('react'),\n import(/* @vite-ignore */ url),\n ]);\n\n const Component = mod.default || mod[island.exportName];\n if (!Component) {\n console.error(`[l5e-island] No export \"default\" or \"${island.exportName}\" in module`);\n return;\n }\n\n const root = createRoot(island.element);\n root.render(createElement(Component, island.props));\n } catch (error) {\n console.error(`[l5e-island] Failed to mount \"${island.registryKey}\":`, error);\n }\n };\n}\n\nfunction scheduleMount(island: IslandMeta) {\n const strategy = strategies.get(island.mount);\n\n if (!strategy) {\n console.error(\n `[l5e-island] Strategy \"${island.mount}\" not found.`,\n `Available: ${[...strategies.keys()].join(', ')}`,\n `\\nDid you forget to registerMountStrategy(\"${island.mount}\", ...)?`,\n );\n return;\n }\n\n const mountFn = createMountFn(island);\n strategy(mountFn, island.mountOpts, island.element);\n}\n\n// ============================================================\n// PART 4: Boot\n// ============================================================\n\nfunction boot() {\n const islands = discoverIslands();\n islands.forEach(scheduleMount);\n}\n\nif (document.readyState === 'loading') {\n document.addEventListener('DOMContentLoaded', boot);\n} else {\n boot();\n}\n"],"names":["registerMountStrategy","mount","opts","el","rootMargin","observer","entries","entry","mql","handler","e","islandRegistry","discoverIslands","createMountFn","island","mounted","url","createRoot","createElement","mod","Component","error","scheduleMount","strategy","strategies","mountFn","boot"],"mappings":"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"}
package/dist/island.js ADDED
@@ -0,0 +1,39 @@
1
+ import { r as p, k as f } from "./jsx-runtime-C2Vw67N2.js";
2
+ function u(n) {
3
+ const a = n.split("/");
4
+ let s = a[a.length - 1];
5
+ return s = s.replace(/\.(tsx?|jsx?)$/, ""), s;
6
+ }
7
+ function x(n) {
8
+ const {
9
+ from: a,
10
+ props: s = {},
11
+ mount: c = "load",
12
+ mountOpts: e,
13
+ class: l,
14
+ id: o,
15
+ children: m,
16
+ __key: t,
17
+ __src: i
18
+ } = n, d = u(a);
19
+ t && i && p(t, i, d);
20
+ const r = {
21
+ "data-island": t || "unresolved",
22
+ "data-island-name": d,
23
+ "data-island-props": JSON.stringify(s),
24
+ "data-island-mount": c
25
+ };
26
+ return e && (r["data-island-opts"] = e), f(
27
+ "div",
28
+ {
29
+ ...r,
30
+ ...o ? { id: o } : {},
31
+ class: l ? `l5e-island ${l}` : "l5e-island"
32
+ },
33
+ m
34
+ );
35
+ }
36
+ export {
37
+ x as ClientIsland
38
+ };
39
+ //# sourceMappingURL=island.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"island.js","sources":["../src/island/ClientIsland.ts"],"sourcesContent":["import { jsxFactory, registerIsland, type JSXChild, type JSXNode } from '../core/jsx-runtime';\n\n/**\n * Derive component name from `from` path.\n * \"./react/Counter\" → \"Counter\"\n * \"~/features/newsfeed/react/NewsfeedApp\" → \"NewsfeedApp\"\n */\nfunction deriveComponentName(from: string): string {\n const segments = from.split('/');\n let filename = segments[segments.length - 1];\n filename = filename.replace(/\\.(tsx?|jsx?)$/, '');\n return filename;\n}\nexport type MountStrategy = 'load' | 'idle' | 'visible' | 'media' | 'none';\nexport interface ClientIslandProps {\n from: string;\n props?: Record<string, any>;\n mount?: MountStrategy | string;\n mountOpts?: string;\n class?: string;\n id?: string;\n children?: JSXChild | JSXChild[];\n\n /** INTERNAL — injected by vite-plugin. Format: \"[name]_[hash]\" */\n __key?: string;\n /** INTERNAL — injected by vite-plugin. Manifest-compatible source path with extension */\n __src?: string;\n}\n\nexport function ClientIsland(attrs: ClientIslandProps): JSXNode {\n const {\n from,\n props = {},\n mount = 'load',\n mountOpts,\n class: className,\n id,\n children,\n __key,\n __src,\n } = attrs;\n\n const componentName = deriveComponentName(from);\n\n // Register island in render context (like useClientJs)\n // server.ts will use this to generate per-page window.__L5E_ISLANDS__\n if (__key && __src) {\n registerIsland(__key, __src, componentName);\n }\n\n const dataAttrs: Record<string, string> = {\n 'data-island': __key || 'unresolved',\n 'data-island-name': componentName,\n 'data-island-props': JSON.stringify(props),\n 'data-island-mount': mount,\n };\n\n if (mountOpts) {\n dataAttrs['data-island-opts'] = mountOpts;\n }\n\n return jsxFactory(\n 'div',\n {\n ...dataAttrs,\n ...(id ? { id } : {}),\n class: className ? `l5e-island ${className}` : 'l5e-island',\n },\n children,\n );\n}\n"],"names":["deriveComponentName","from","segments","filename","ClientIsland","attrs","props","mount","mountOpts","className","id","children","__key","__src","componentName","registerIsland","dataAttrs","jsxFactory"],"mappings":";AAOA,SAASA,EAAoBC,GAAsB;AACjD,QAAMC,IAAWD,EAAK,MAAM,GAAG;AAC/B,MAAIE,IAAWD,EAASA,EAAS,SAAS,CAAC;AAC3C,SAAAC,IAAWA,EAAS,QAAQ,kBAAkB,EAAE,GACzCA;AACT;AAiBO,SAASC,EAAaC,GAAmC;AAC9D,QAAM;AAAA,IACJ,MAAAJ;AAAA,IACA,OAAAK,IAAQ,CAAA;AAAA,IACR,OAAAC,IAAQ;AAAA,IACR,WAAAC;AAAA,IACA,OAAOC;AAAA,IACP,IAAAC;AAAA,IACA,UAAAC;AAAA,IACA,OAAAC;AAAA,IACA,OAAAC;AAAA,EAAA,IACER,GAEES,IAAgBd,EAAoBC,CAAI;AAI9C,EAAIW,KAASC,KACXE,EAAeH,GAAOC,GAAOC,CAAa;AAG5C,QAAME,IAAoC;AAAA,IACxC,eAAeJ,KAAS;AAAA,IACxB,oBAAoBE;AAAA,IACpB,qBAAqB,KAAK,UAAUR,CAAK;AAAA,IACzC,qBAAqBC;AAAA,EAAA;AAGvB,SAAIC,MACFQ,EAAU,kBAAkB,IAAIR,IAG3BS;AAAA,IACL;AAAA,IACA;AAAA,MACE,GAAGD;AAAA,MACH,GAAIN,IAAK,EAAE,IAAAA,EAAA,IAAO,CAAA;AAAA,MAClB,OAAOD,IAAY,cAAcA,CAAS,KAAK;AAAA,IAAA;AAAA,IAEjDE;AAAA,EAAA;AAEJ;"}