@withl5e/l5e 0.2.3 → 0.2.4

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.
@@ -1 +1 @@
1
- {"version":3,"file":"render-BF7iTagJ.js","sources":["../../../node_modules/.pnpm/serialize-javascript@7.0.5/node_modules/serialize-javascript/index.js","../src/core/render.ts"],"sourcesContent":["/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n'use strict';\n\n// Generate an internal UID to make the regexp pattern harder to guess.\nvar UID_LENGTH = 16;\nvar UID = generateUID();\nvar PLACE_HOLDER_REGEXP = new RegExp('(\\\\\\\\)?\"@__(F|R|D|M|S|A|U|I|B|L)-' + UID + '-(\\\\d+)__@\"', 'g');\n\nvar IS_NATIVE_CODE_REGEXP = /\\{\\s*\\[native code\\]\\s*\\}/g;\nvar IS_PURE_FUNCTION = /function.*?\\(/;\nvar IS_ARROW_FUNCTION = /.*?=>.*?/;\nvar UNSAFE_CHARS_REGEXP = /[<>\\/\\u2028\\u2029]/g;\n// Regex to match </script> and variations (case-insensitive) for XSS protection\n// Matches </script followed by optional whitespace/attributes and >\nvar SCRIPT_CLOSE_REGEXP = /<\\/script[^>]*>/gi;\n\nvar RESERVED_SYMBOLS = ['*', 'async'];\n\n// Mapping of unsafe HTML and invalid JavaScript line terminator chars to their\n// Unicode char counterparts which are safe to use in JavaScript strings.\nvar ESCAPED_CHARS = {\n '<' : '\\\\u003C',\n '>' : '\\\\u003E',\n '/' : '\\\\u002F',\n '\\u2028': '\\\\u2028',\n '\\u2029': '\\\\u2029'\n};\n\nfunction escapeUnsafeChars(unsafeChar) {\n return ESCAPED_CHARS[unsafeChar];\n}\n\n// Escape function body for XSS protection while preserving arrow function syntax\nfunction escapeFunctionBody(str) {\n // Escape </script> sequences and variations (case-insensitive) - the main XSS risk\n // Matches </script followed by optional whitespace/attributes and >\n // This must be done first before other replacements\n str = str.replace(SCRIPT_CLOSE_REGEXP, function(match) {\n // Escape all <, /, and > characters in the closing script tag\n return match.replace(/</g, '\\\\u003C').replace(/\\//g, '\\\\u002F').replace(/>/g, '\\\\u003E');\n });\n // Escape line terminators (these are always unsafe)\n str = str.replace(/\\u2028/g, '\\\\u2028');\n str = str.replace(/\\u2029/g, '\\\\u2029');\n return str;\n}\n\nfunction generateUID() {\n var bytes = crypto.getRandomValues(new Uint8Array(UID_LENGTH));\n var result = '';\n for(var i=0; i<UID_LENGTH; ++i) {\n result += bytes[i].toString(16);\n }\n return result;\n}\n\nfunction deleteFunctions(obj){\n var functionKeys = [];\n for (var key in obj) {\n if (typeof obj[key] === \"function\") {\n functionKeys.push(key);\n }\n }\n for (var i = 0; i < functionKeys.length; i++) {\n delete obj[functionKeys[i]];\n }\n}\n\nmodule.exports = function serialize(obj, options) {\n options || (options = {});\n\n // Backwards-compatibility for `space` as the second argument.\n if (typeof options === 'number' || typeof options === 'string') {\n options = {space: options};\n }\n\n var functions = [];\n var regexps = [];\n var dates = [];\n var maps = [];\n var sets = [];\n var arrays = [];\n var undefs = [];\n var infinities= [];\n var bigInts = [];\n var urls = [];\n\n // Returns placeholders for functions and regexps (identified by index)\n // which are later replaced by their string representation.\n function replacer(key, value) {\n\n // For nested function\n if(options.ignoreFunction){\n deleteFunctions(value);\n }\n\n if (!value && value !== undefined && value !== BigInt(0)) {\n return value;\n }\n\n // If the value is an object w/ a toJSON method, toJSON is called before\n // the replacer runs, so we use this[key] to get the non-toJSONed value.\n var origValue = this[key];\n var type = typeof origValue;\n\n if (type === 'object') {\n if(origValue instanceof RegExp) {\n return '@__R-' + UID + '-' + (regexps.push(origValue) - 1) + '__@';\n }\n\n if(origValue instanceof Date) {\n return '@__D-' + UID + '-' + (dates.push(origValue) - 1) + '__@';\n }\n\n if(origValue instanceof Map) {\n return '@__M-' + UID + '-' + (maps.push(origValue) - 1) + '__@';\n }\n\n if(origValue instanceof Set) {\n return '@__S-' + UID + '-' + (sets.push(origValue) - 1) + '__@';\n }\n\n if(Array.isArray(origValue)) {\n var isSparse = Object.keys(origValue).length !== origValue.length;\n if (isSparse) {\n return '@__A-' + UID + '-' + (arrays.push(origValue) - 1) + '__@';\n }\n }\n\n if(origValue instanceof URL) {\n return '@__L-' + UID + '-' + (urls.push(origValue) - 1) + '__@';\n }\n }\n\n if (type === 'function') {\n return '@__F-' + UID + '-' + (functions.push(origValue) - 1) + '__@';\n }\n\n if (type === 'undefined') {\n return '@__U-' + UID + '-' + (undefs.push(origValue) - 1) + '__@';\n }\n\n if (type === 'number' && !isNaN(origValue) && !isFinite(origValue)) {\n return '@__I-' + UID + '-' + (infinities.push(origValue) - 1) + '__@';\n }\n\n if (type === 'bigint') {\n return '@__B-' + UID + '-' + (bigInts.push(origValue) - 1) + '__@';\n }\n\n return value;\n }\n\n function serializeFunc(fn, options) {\n var serializedFn = fn.toString();\n if (IS_NATIVE_CODE_REGEXP.test(serializedFn)) {\n throw new TypeError('Serializing native function: ' + fn.name);\n }\n\n // Escape unsafe HTML characters in function body for XSS protection\n // This must preserve arrow function syntax (=>) while escaping </script>\n if (options && options.unsafe !== true) {\n serializedFn = escapeFunctionBody(serializedFn);\n }\n\n // pure functions, example: {key: function() {}}\n if(IS_PURE_FUNCTION.test(serializedFn)) {\n return serializedFn;\n }\n\n // arrow functions, example: arg1 => arg1+5\n if(IS_ARROW_FUNCTION.test(serializedFn)) {\n return serializedFn;\n }\n\n var argsStartsAt = serializedFn.indexOf('(');\n var def = serializedFn.substr(0, argsStartsAt)\n .trim()\n .split(' ')\n .filter(function(val) { return val.length > 0 });\n\n var nonReservedSymbols = def.filter(function(val) {\n return RESERVED_SYMBOLS.indexOf(val) === -1\n });\n\n // enhanced literal objects, example: {key() {}}\n if(nonReservedSymbols.length > 0) {\n return (def.indexOf('async') > -1 ? 'async ' : '') + 'function'\n + (def.join('').indexOf('*') > -1 ? '*' : '')\n + serializedFn.substr(argsStartsAt);\n }\n\n // arrow functions\n return serializedFn;\n }\n\n // Check if the parameter is function\n if (options.ignoreFunction && typeof obj === \"function\") {\n obj = undefined;\n }\n // Protects against `JSON.stringify()` returning `undefined`, by serializing\n // to the literal string: \"undefined\".\n if (obj === undefined) {\n return String(obj);\n }\n\n var str;\n\n // Creates a JSON string representation of the value.\n // NOTE: Node 0.12 goes into slow mode with extra JSON.stringify() args.\n if (options.isJSON && !options.space) {\n str = JSON.stringify(obj);\n } else {\n str = JSON.stringify(obj, options.isJSON ? null : replacer, options.space);\n }\n\n // Protects against `JSON.stringify()` returning `undefined`, by serializing\n // to the literal string: \"undefined\".\n if (typeof str !== 'string') {\n return String(str);\n }\n\n // Replace unsafe HTML and invalid JavaScript line terminator chars with\n // their safe Unicode char counterpart. This _must_ happen before the\n // regexps and functions are serialized and added back to the string.\n if (options.unsafe !== true) {\n str = str.replace(UNSAFE_CHARS_REGEXP, escapeUnsafeChars);\n }\n\n if (functions.length === 0 && regexps.length === 0 && dates.length === 0 && maps.length === 0 && sets.length === 0 && arrays.length === 0 && undefs.length === 0 && infinities.length === 0 && bigInts.length === 0 && urls.length === 0) {\n return str;\n }\n\n // Replaces all occurrences of function, regexp, date, map and set placeholders in the\n // JSON string with their string representations. If the original value can\n // not be found, then `undefined` is used.\n return str.replace(PLACE_HOLDER_REGEXP, function (match, backSlash, type, valueIndex) {\n // The placeholder may not be preceded by a backslash. This is to prevent\n // replacing things like `\"a\\\"@__R-<UID>-0__@\"` and thus outputting\n // invalid JS.\n if (backSlash) {\n return match;\n }\n\n if (type === 'D') {\n // Validate ISO string format to prevent code injection via spoofed toISOString()\n var isoStr = String(dates[valueIndex].toISOString());\n if (!/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z$/.test(isoStr)) {\n throw new TypeError('Invalid Date ISO string');\n }\n return \"new Date(\\\"\" + isoStr + \"\\\")\";\n }\n\n if (type === 'R') {\n // Sanitize flags to prevent code injection (only allow valid RegExp flag characters)\n var flags = String(regexps[valueIndex].flags).replace(/[^gimsuydv]/g, '');\n return \"new RegExp(\" + serialize(regexps[valueIndex].source) + \", \\\"\" + flags + \"\\\")\";\n }\n\n if (type === 'M') {\n return \"new Map(\" + serialize(Array.from(maps[valueIndex].entries()), options) + \")\";\n }\n\n if (type === 'S') {\n return \"new Set(\" + serialize(Array.from(sets[valueIndex].values()), options) + \")\";\n }\n\n if (type === 'A') {\n return \"Array.prototype.slice.call(\" + serialize(Object.assign({ length: arrays[valueIndex].length }, arrays[valueIndex]), options) + \")\";\n }\n\n if (type === 'U') {\n return 'undefined'\n }\n\n if (type === 'I') {\n return infinities[valueIndex];\n }\n\n if (type === 'B') {\n return \"BigInt(\\\"\" + bigInts[valueIndex] + \"\\\")\";\n }\n\n if (type === 'L') {\n return \"new URL(\" + serialize(urls[valueIndex].toString(), options) + \")\";\n }\n\n var fn = functions[valueIndex];\n\n return serializeFunc(fn, options);\n });\n}\n","import { RAW_HTML_MARKER } from './const';\nimport {\n addCacheTag,\n type HtmlContentObject,\n type JSXChild,\n type JSXNode,\n type RenderedNode,\n} from './jsx-runtime';\n\nif (true) {\n console.log('render.ts');\n}\n\nconst VOID_ELEMENTS = new Set<string>([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n]);\n\nfunction classList(input: unknown): string {\n if (!input) return '';\n if (typeof input === 'string') return input;\n if (Array.isArray(input)) {\n return input.map(classList).filter(Boolean).join(' ');\n }\n if (typeof input === 'object') {\n return Object.keys(input as Record<string, boolean>)\n .filter((key) => (input as Record<string, boolean>)[key])\n .join(' ');\n }\n return '';\n}\n\n// Attribute-name validation, ported verbatim from React's react-dom\n// (DOMProperty.js `isAttributeNameSafe`). Untrusted spread props can carry\n// keys like `blah\" onclick=\"x` or `></div><script>…`; if such a key were\n// written as `${key}=\"…\"` it would inject new attributes / break out of the\n// tag. Names that don't match this grammar are dropped instead of emitted.\nconst ATTRIBUTE_NAME_START_CHAR =\n ':A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\nconst ATTRIBUTE_NAME_CHAR =\n ATTRIBUTE_NAME_START_CHAR + '\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\nconst VALID_ATTRIBUTE_NAME_REGEX = new RegExp(\n '^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$',\n);\nconst validatedAttributeNameCache: Record<string, boolean> = {};\nconst illegalAttributeNameCache: Record<string, boolean> = {};\n\nexport function isAttributeNameSafe(attributeName: string): boolean {\n if (Object.prototype.hasOwnProperty.call(validatedAttributeNameCache, attributeName)) {\n return true;\n }\n if (Object.prototype.hasOwnProperty.call(illegalAttributeNameCache, attributeName)) {\n return false;\n }\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n validatedAttributeNameCache[attributeName] = true;\n return true;\n }\n illegalAttributeNameCache[attributeName] = true;\n if (process.env.NODE_ENV !== 'production') {\n console.error('Invalid attribute name: `%s`', attributeName);\n }\n return false;\n}\n\nexport function escapeProp(value: string): string {\n return value\n .replaceAll('&', '&amp;')\n .replaceAll('\"', '&quot;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n .replaceAll('\\n', '&#10;')\n .trim();\n}\n\nexport function escapeHTML(value: string): string {\n return value\n .replaceAll('&', '&amp;')\n .replaceAll('\"', '&quot;')\n .replaceAll(\"'\", '&#39;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n .replaceAll('\\n', '<br/>');\n}\n\nfunction renderAttributes(props?: Record<string, any>): string {\n if (!props) return '';\n\n let classValue = '';\n if (props.classList !== undefined) {\n classValue = classList(props.classList);\n }\n if (props.class) {\n const existingClass = typeof props.class === 'string' ? props.class : '';\n classValue = classValue ? `${classValue} ${existingClass}`.trim() : existingClass;\n }\n\n const attrs = Object.entries(props)\n .filter(\n ([key]) =>\n key !== 'children' &&\n key !== 'classList' &&\n key !== 'setHtml' &&\n key !== 'setText' &&\n key !== 'class' &&\n key !== 'key' &&\n key !== 'cacheTag',\n )\n .map(([key, value]) => {\n // Drop attribute names that could break out of the tag (injection guard).\n if (!isAttributeNameSafe(key)) return '';\n\n // HTML standard behavior with function execution support\n if (value === false || value === null || value === undefined) return '';\n if (value === true) return key;\n\n // Execute function props and get result (new feature)\n if (typeof value === 'function') {\n const result = value();\n return `${key}=\"${escapeProp(result?.toString() || '')}\"`;\n }\n\n return `${key}=\"${escapeProp(value?.toString() || '')}\"`;\n })\n .filter(Boolean) as string[];\n\n if (classValue) {\n attrs.push(`class=\"${escapeProp(classValue)}\"`);\n }\n\n return attrs.join(' ');\n}\n\nfunction renderJsxToHtmlStringInternal(element: JSXChild): string {\n // HTML standard: skip boolean, null, undefined children\n if (element === null || typeof element === 'boolean' || element === undefined) return '';\n\n if (element && typeof element === 'object' && (element as any)[RAW_HTML_MARKER]) {\n return (element as any).content || '';\n }\n\n // Support htmlContent object (new feature)\n if (element && typeof element === 'object' && 'htmlContent' in element) {\n return (element as HtmlContentObject).htmlContent;\n }\n\n if (typeof element === 'string') return escapeHTML(element.toString());\n if (typeof element === 'number') return element.toString();\n\n if (Array.isArray(element)) {\n return (element as JSXChild[]).map((el) => renderJsxToHtmlStringInternal(el)).join('');\n }\n\n const { type, props, children } = element as JSXNode;\n\n // Collect cache tags from props\n if (props?.cacheTag) {\n addCacheTag(props.cacheTag);\n }\n\n if (typeof type === 'function') {\n const componentResult = (type as any)({ ...(props || {}), children });\n // Check if component returned a RenderedNode\n if (componentResult && typeof componentResult === 'object' && 'string' in componentResult) {\n return (componentResult as RenderedNode).string;\n }\n return renderJsxToHtmlStringInternal(componentResult as JSXChild);\n }\n\n const attrs = renderAttributes(props);\n const isVoidElement = VOID_ELEMENTS.has((type as string).toLowerCase());\n\n if (isVoidElement) {\n return `<${type}${attrs ? ' ' + attrs : ''} />`;\n }\n\n let childrenHtml = '';\n if (props?.setHtml !== undefined) {\n childrenHtml = props.setHtml?.toString() || '';\n } else if (props?.setText !== undefined) {\n childrenHtml = escapeHTML(props.setText?.toString() || '');\n } else {\n childrenHtml = (children as JSXChild[]).map((el) => renderJsxToHtmlStringInternal(el)).join('');\n }\n\n return `<${type}${attrs ? ' ' + attrs : ''}>${childrenHtml}</${type}>`;\n}\n\nexport function renderJsxToHtmlString(element: JSXChild | RenderedNode): string {\n // If already a RenderedNode, return its string\n if (element && typeof element === 'object' && 'string' in element) {\n return (element as RenderedNode).string;\n }\n return renderJsxToHtmlStringInternal(element as JSXChild);\n}\n\nexport function renderToRenderedNode(element: JSXChild | RenderedNode): RenderedNode {\n // If already a RenderedNode, return as is\n if (element && typeof element === 'object' && 'string' in element) {\n return element as RenderedNode;\n }\n return {\n string: renderJsxToHtmlStringInternal(element as JSXChild),\n };\n}\n"],"names":["UID_LENGTH","UID","generateUID","PLACE_HOLDER_REGEXP","IS_NATIVE_CODE_REGEXP","IS_PURE_FUNCTION","IS_ARROW_FUNCTION","UNSAFE_CHARS_REGEXP","SCRIPT_CLOSE_REGEXP","RESERVED_SYMBOLS","ESCAPED_CHARS","escapeUnsafeChars","unsafeChar","escapeFunctionBody","str","match","bytes","result","i","deleteFunctions","obj","functionKeys","key","serializeJavascript","serialize","options","functions","regexps","dates","maps","sets","arrays","undefs","infinities","bigInts","urls","replacer","value","origValue","type","isSparse","serializeFunc","fn","serializedFn","argsStartsAt","def","val","nonReservedSymbols","backSlash","valueIndex","isoStr","flags","VOID_ELEMENTS","classList","input","ATTRIBUTE_NAME_START_CHAR","ATTRIBUTE_NAME_CHAR","VALID_ATTRIBUTE_NAME_REGEX","validatedAttributeNameCache","illegalAttributeNameCache","isAttributeNameSafe","attributeName","escapeProp","escapeHTML","renderAttributes","props","classValue","existingClass","attrs","renderJsxToHtmlStringInternal","element","RAW_HTML_MARKER","el","children","addCacheTag","componentResult","childrenHtml","renderJsxToHtmlString","renderToRenderedNode"],"mappings":"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","x_google_ignoreList":[0]}
1
+ {"version":3,"file":"render-DTXfJu0d.js","sources":["../../../node_modules/.pnpm/serialize-javascript@7.0.5/node_modules/serialize-javascript/index.js","../src/core/render.ts"],"sourcesContent":["/*\nCopyright (c) 2014, Yahoo! Inc. All rights reserved.\nCopyrights licensed under the New BSD License.\nSee the accompanying LICENSE file for terms.\n*/\n\n'use strict';\n\n// Generate an internal UID to make the regexp pattern harder to guess.\nvar UID_LENGTH = 16;\nvar UID = generateUID();\nvar PLACE_HOLDER_REGEXP = new RegExp('(\\\\\\\\)?\"@__(F|R|D|M|S|A|U|I|B|L)-' + UID + '-(\\\\d+)__@\"', 'g');\n\nvar IS_NATIVE_CODE_REGEXP = /\\{\\s*\\[native code\\]\\s*\\}/g;\nvar IS_PURE_FUNCTION = /function.*?\\(/;\nvar IS_ARROW_FUNCTION = /.*?=>.*?/;\nvar UNSAFE_CHARS_REGEXP = /[<>\\/\\u2028\\u2029]/g;\n// Regex to match </script> and variations (case-insensitive) for XSS protection\n// Matches </script followed by optional whitespace/attributes and >\nvar SCRIPT_CLOSE_REGEXP = /<\\/script[^>]*>/gi;\n\nvar RESERVED_SYMBOLS = ['*', 'async'];\n\n// Mapping of unsafe HTML and invalid JavaScript line terminator chars to their\n// Unicode char counterparts which are safe to use in JavaScript strings.\nvar ESCAPED_CHARS = {\n '<' : '\\\\u003C',\n '>' : '\\\\u003E',\n '/' : '\\\\u002F',\n '\\u2028': '\\\\u2028',\n '\\u2029': '\\\\u2029'\n};\n\nfunction escapeUnsafeChars(unsafeChar) {\n return ESCAPED_CHARS[unsafeChar];\n}\n\n// Escape function body for XSS protection while preserving arrow function syntax\nfunction escapeFunctionBody(str) {\n // Escape </script> sequences and variations (case-insensitive) - the main XSS risk\n // Matches </script followed by optional whitespace/attributes and >\n // This must be done first before other replacements\n str = str.replace(SCRIPT_CLOSE_REGEXP, function(match) {\n // Escape all <, /, and > characters in the closing script tag\n return match.replace(/</g, '\\\\u003C').replace(/\\//g, '\\\\u002F').replace(/>/g, '\\\\u003E');\n });\n // Escape line terminators (these are always unsafe)\n str = str.replace(/\\u2028/g, '\\\\u2028');\n str = str.replace(/\\u2029/g, '\\\\u2029');\n return str;\n}\n\nfunction generateUID() {\n var bytes = crypto.getRandomValues(new Uint8Array(UID_LENGTH));\n var result = '';\n for(var i=0; i<UID_LENGTH; ++i) {\n result += bytes[i].toString(16);\n }\n return result;\n}\n\nfunction deleteFunctions(obj){\n var functionKeys = [];\n for (var key in obj) {\n if (typeof obj[key] === \"function\") {\n functionKeys.push(key);\n }\n }\n for (var i = 0; i < functionKeys.length; i++) {\n delete obj[functionKeys[i]];\n }\n}\n\nmodule.exports = function serialize(obj, options) {\n options || (options = {});\n\n // Backwards-compatibility for `space` as the second argument.\n if (typeof options === 'number' || typeof options === 'string') {\n options = {space: options};\n }\n\n var functions = [];\n var regexps = [];\n var dates = [];\n var maps = [];\n var sets = [];\n var arrays = [];\n var undefs = [];\n var infinities= [];\n var bigInts = [];\n var urls = [];\n\n // Returns placeholders for functions and regexps (identified by index)\n // which are later replaced by their string representation.\n function replacer(key, value) {\n\n // For nested function\n if(options.ignoreFunction){\n deleteFunctions(value);\n }\n\n if (!value && value !== undefined && value !== BigInt(0)) {\n return value;\n }\n\n // If the value is an object w/ a toJSON method, toJSON is called before\n // the replacer runs, so we use this[key] to get the non-toJSONed value.\n var origValue = this[key];\n var type = typeof origValue;\n\n if (type === 'object') {\n if(origValue instanceof RegExp) {\n return '@__R-' + UID + '-' + (regexps.push(origValue) - 1) + '__@';\n }\n\n if(origValue instanceof Date) {\n return '@__D-' + UID + '-' + (dates.push(origValue) - 1) + '__@';\n }\n\n if(origValue instanceof Map) {\n return '@__M-' + UID + '-' + (maps.push(origValue) - 1) + '__@';\n }\n\n if(origValue instanceof Set) {\n return '@__S-' + UID + '-' + (sets.push(origValue) - 1) + '__@';\n }\n\n if(Array.isArray(origValue)) {\n var isSparse = Object.keys(origValue).length !== origValue.length;\n if (isSparse) {\n return '@__A-' + UID + '-' + (arrays.push(origValue) - 1) + '__@';\n }\n }\n\n if(origValue instanceof URL) {\n return '@__L-' + UID + '-' + (urls.push(origValue) - 1) + '__@';\n }\n }\n\n if (type === 'function') {\n return '@__F-' + UID + '-' + (functions.push(origValue) - 1) + '__@';\n }\n\n if (type === 'undefined') {\n return '@__U-' + UID + '-' + (undefs.push(origValue) - 1) + '__@';\n }\n\n if (type === 'number' && !isNaN(origValue) && !isFinite(origValue)) {\n return '@__I-' + UID + '-' + (infinities.push(origValue) - 1) + '__@';\n }\n\n if (type === 'bigint') {\n return '@__B-' + UID + '-' + (bigInts.push(origValue) - 1) + '__@';\n }\n\n return value;\n }\n\n function serializeFunc(fn, options) {\n var serializedFn = fn.toString();\n if (IS_NATIVE_CODE_REGEXP.test(serializedFn)) {\n throw new TypeError('Serializing native function: ' + fn.name);\n }\n\n // Escape unsafe HTML characters in function body for XSS protection\n // This must preserve arrow function syntax (=>) while escaping </script>\n if (options && options.unsafe !== true) {\n serializedFn = escapeFunctionBody(serializedFn);\n }\n\n // pure functions, example: {key: function() {}}\n if(IS_PURE_FUNCTION.test(serializedFn)) {\n return serializedFn;\n }\n\n // arrow functions, example: arg1 => arg1+5\n if(IS_ARROW_FUNCTION.test(serializedFn)) {\n return serializedFn;\n }\n\n var argsStartsAt = serializedFn.indexOf('(');\n var def = serializedFn.substr(0, argsStartsAt)\n .trim()\n .split(' ')\n .filter(function(val) { return val.length > 0 });\n\n var nonReservedSymbols = def.filter(function(val) {\n return RESERVED_SYMBOLS.indexOf(val) === -1\n });\n\n // enhanced literal objects, example: {key() {}}\n if(nonReservedSymbols.length > 0) {\n return (def.indexOf('async') > -1 ? 'async ' : '') + 'function'\n + (def.join('').indexOf('*') > -1 ? '*' : '')\n + serializedFn.substr(argsStartsAt);\n }\n\n // arrow functions\n return serializedFn;\n }\n\n // Check if the parameter is function\n if (options.ignoreFunction && typeof obj === \"function\") {\n obj = undefined;\n }\n // Protects against `JSON.stringify()` returning `undefined`, by serializing\n // to the literal string: \"undefined\".\n if (obj === undefined) {\n return String(obj);\n }\n\n var str;\n\n // Creates a JSON string representation of the value.\n // NOTE: Node 0.12 goes into slow mode with extra JSON.stringify() args.\n if (options.isJSON && !options.space) {\n str = JSON.stringify(obj);\n } else {\n str = JSON.stringify(obj, options.isJSON ? null : replacer, options.space);\n }\n\n // Protects against `JSON.stringify()` returning `undefined`, by serializing\n // to the literal string: \"undefined\".\n if (typeof str !== 'string') {\n return String(str);\n }\n\n // Replace unsafe HTML and invalid JavaScript line terminator chars with\n // their safe Unicode char counterpart. This _must_ happen before the\n // regexps and functions are serialized and added back to the string.\n if (options.unsafe !== true) {\n str = str.replace(UNSAFE_CHARS_REGEXP, escapeUnsafeChars);\n }\n\n if (functions.length === 0 && regexps.length === 0 && dates.length === 0 && maps.length === 0 && sets.length === 0 && arrays.length === 0 && undefs.length === 0 && infinities.length === 0 && bigInts.length === 0 && urls.length === 0) {\n return str;\n }\n\n // Replaces all occurrences of function, regexp, date, map and set placeholders in the\n // JSON string with their string representations. If the original value can\n // not be found, then `undefined` is used.\n return str.replace(PLACE_HOLDER_REGEXP, function (match, backSlash, type, valueIndex) {\n // The placeholder may not be preceded by a backslash. This is to prevent\n // replacing things like `\"a\\\"@__R-<UID>-0__@\"` and thus outputting\n // invalid JS.\n if (backSlash) {\n return match;\n }\n\n if (type === 'D') {\n // Validate ISO string format to prevent code injection via spoofed toISOString()\n var isoStr = String(dates[valueIndex].toISOString());\n if (!/^\\d{4}-\\d{2}-\\d{2}T\\d{2}:\\d{2}:\\d{2}(\\.\\d{3})?Z$/.test(isoStr)) {\n throw new TypeError('Invalid Date ISO string');\n }\n return \"new Date(\\\"\" + isoStr + \"\\\")\";\n }\n\n if (type === 'R') {\n // Sanitize flags to prevent code injection (only allow valid RegExp flag characters)\n var flags = String(regexps[valueIndex].flags).replace(/[^gimsuydv]/g, '');\n return \"new RegExp(\" + serialize(regexps[valueIndex].source) + \", \\\"\" + flags + \"\\\")\";\n }\n\n if (type === 'M') {\n return \"new Map(\" + serialize(Array.from(maps[valueIndex].entries()), options) + \")\";\n }\n\n if (type === 'S') {\n return \"new Set(\" + serialize(Array.from(sets[valueIndex].values()), options) + \")\";\n }\n\n if (type === 'A') {\n return \"Array.prototype.slice.call(\" + serialize(Object.assign({ length: arrays[valueIndex].length }, arrays[valueIndex]), options) + \")\";\n }\n\n if (type === 'U') {\n return 'undefined'\n }\n\n if (type === 'I') {\n return infinities[valueIndex];\n }\n\n if (type === 'B') {\n return \"BigInt(\\\"\" + bigInts[valueIndex] + \"\\\")\";\n }\n\n if (type === 'L') {\n return \"new URL(\" + serialize(urls[valueIndex].toString(), options) + \")\";\n }\n\n var fn = functions[valueIndex];\n\n return serializeFunc(fn, options);\n });\n}\n","import { RAW_HTML_MARKER } from './const';\nimport {\n addCacheTag,\n type HtmlContentObject,\n type JSXChild,\n type JSXNode,\n type RenderedNode,\n} from './jsx-runtime';\n\nif (true) {\n console.log('render.ts');\n}\n\nconst VOID_ELEMENTS = new Set<string>([\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n]);\n\nfunction classList(input: unknown): string {\n if (!input) return '';\n if (typeof input === 'string') return input;\n if (Array.isArray(input)) {\n return input.map(classList).filter(Boolean).join(' ');\n }\n if (typeof input === 'object') {\n return Object.keys(input as Record<string, boolean>)\n .filter((key) => (input as Record<string, boolean>)[key])\n .join(' ');\n }\n return '';\n}\n\n// Attribute-name validation, ported verbatim from React's react-dom\n// (DOMProperty.js `isAttributeNameSafe`). Untrusted spread props can carry\n// keys like `blah\" onclick=\"x` or `></div><script>…`; if such a key were\n// written as `${key}=\"…\"` it would inject new attributes / break out of the\n// tag. Names that don't match this grammar are dropped instead of emitted.\nconst ATTRIBUTE_NAME_START_CHAR =\n ':A-Z_a-z\\\\u00C0-\\\\u00D6\\\\u00D8-\\\\u00F6\\\\u00F8-\\\\u02FF\\\\u0370-\\\\u037D\\\\u037F-\\\\u1FFF\\\\u200C-\\\\u200D\\\\u2070-\\\\u218F\\\\u2C00-\\\\u2FEF\\\\u3001-\\\\uD7FF\\\\uF900-\\\\uFDCF\\\\uFDF0-\\\\uFFFD';\nconst ATTRIBUTE_NAME_CHAR =\n ATTRIBUTE_NAME_START_CHAR + '\\\\-.0-9\\\\u00B7\\\\u0300-\\\\u036F\\\\u203F-\\\\u2040';\nconst VALID_ATTRIBUTE_NAME_REGEX = new RegExp(\n '^[' + ATTRIBUTE_NAME_START_CHAR + '][' + ATTRIBUTE_NAME_CHAR + ']*$',\n);\nconst validatedAttributeNameCache: Record<string, boolean> = {};\nconst illegalAttributeNameCache: Record<string, boolean> = {};\n\nexport function isAttributeNameSafe(attributeName: string): boolean {\n if (Object.prototype.hasOwnProperty.call(validatedAttributeNameCache, attributeName)) {\n return true;\n }\n if (Object.prototype.hasOwnProperty.call(illegalAttributeNameCache, attributeName)) {\n return false;\n }\n if (VALID_ATTRIBUTE_NAME_REGEX.test(attributeName)) {\n validatedAttributeNameCache[attributeName] = true;\n return true;\n }\n illegalAttributeNameCache[attributeName] = true;\n if (process.env.NODE_ENV !== 'production') {\n console.error('Invalid attribute name: `%s`', attributeName);\n }\n return false;\n}\n\nexport function escapeProp(value: string): string {\n return value\n .replaceAll('&', '&amp;')\n .replaceAll('\"', '&quot;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n .replaceAll('\\n', '&#10;')\n .trim();\n}\n\nexport function escapeHTML(value: string): string {\n return value\n .replaceAll('&', '&amp;')\n .replaceAll('\"', '&quot;')\n .replaceAll(\"'\", '&#39;')\n .replaceAll('<', '&lt;')\n .replaceAll('>', '&gt;')\n .replaceAll('\\n', '<br/>');\n}\n\nfunction renderAttributes(props?: Record<string, any>): string {\n if (!props) return '';\n\n let classValue = '';\n if (props.classList !== undefined) {\n classValue = classList(props.classList);\n }\n if (props.class) {\n const existingClass = typeof props.class === 'string' ? props.class : '';\n classValue = classValue ? `${classValue} ${existingClass}`.trim() : existingClass;\n }\n\n const attrs = Object.entries(props)\n .filter(\n ([key]) =>\n key !== 'children' &&\n key !== 'classList' &&\n key !== 'setHtml' &&\n key !== 'setText' &&\n key !== 'class' &&\n key !== 'key' &&\n key !== 'cacheTag',\n )\n .map(([key, value]) => {\n // Drop attribute names that could break out of the tag (injection guard).\n if (!isAttributeNameSafe(key)) return '';\n\n // HTML standard behavior with function execution support\n if (value === false || value === null || value === undefined) return '';\n if (value === true) return key;\n\n // Execute function props and get result (new feature)\n if (typeof value === 'function') {\n const result = value();\n return `${key}=\"${escapeProp(result?.toString() || '')}\"`;\n }\n\n return `${key}=\"${escapeProp(value?.toString() || '')}\"`;\n })\n .filter(Boolean) as string[];\n\n if (classValue) {\n attrs.push(`class=\"${escapeProp(classValue)}\"`);\n }\n\n return attrs.join(' ');\n}\n\nfunction renderJsxToHtmlStringInternal(element: JSXChild): string {\n // HTML standard: skip boolean, null, undefined children\n if (element === null || typeof element === 'boolean' || element === undefined) return '';\n\n if (element && typeof element === 'object' && (element as any)[RAW_HTML_MARKER]) {\n return (element as any).content || '';\n }\n\n // Support htmlContent object (new feature)\n if (element && typeof element === 'object' && 'htmlContent' in element) {\n return (element as HtmlContentObject).htmlContent;\n }\n\n if (typeof element === 'string') return escapeHTML(element.toString());\n if (typeof element === 'number') return element.toString();\n\n if (Array.isArray(element)) {\n return (element as JSXChild[]).map((el) => renderJsxToHtmlStringInternal(el)).join('');\n }\n\n const { type, props, children } = element as JSXNode;\n\n // Collect cache tags from props\n if (props?.cacheTag) {\n addCacheTag(props.cacheTag);\n }\n\n if (typeof type === 'function') {\n const componentResult = (type as any)({ ...(props || {}), children });\n // Check if component returned a RenderedNode\n if (componentResult && typeof componentResult === 'object' && 'string' in componentResult) {\n return (componentResult as RenderedNode).string;\n }\n return renderJsxToHtmlStringInternal(componentResult as JSXChild);\n }\n\n const attrs = renderAttributes(props);\n const isVoidElement = VOID_ELEMENTS.has((type as string).toLowerCase());\n\n if (isVoidElement) {\n return `<${type}${attrs ? ' ' + attrs : ''} />`;\n }\n\n let childrenHtml = '';\n if (props?.setHtml !== undefined) {\n childrenHtml = props.setHtml?.toString() || '';\n } else if (props?.setText !== undefined) {\n childrenHtml = escapeHTML(props.setText?.toString() || '');\n } else {\n childrenHtml = (children as JSXChild[]).map((el) => renderJsxToHtmlStringInternal(el)).join('');\n }\n\n return `<${type}${attrs ? ' ' + attrs : ''}>${childrenHtml}</${type}>`;\n}\n\nexport function renderJsxToHtmlString(element: JSXChild | RenderedNode): string {\n // If already a RenderedNode, return its string\n if (element && typeof element === 'object' && 'string' in element) {\n return (element as RenderedNode).string;\n }\n return renderJsxToHtmlStringInternal(element as JSXChild);\n}\n\nexport function renderToRenderedNode(element: JSXChild | RenderedNode): RenderedNode {\n // If already a RenderedNode, return as is\n if (element && typeof element === 'object' && 'string' in element) {\n return element as RenderedNode;\n }\n return {\n string: renderJsxToHtmlStringInternal(element as JSXChild),\n };\n}\n"],"names":["UID_LENGTH","UID","generateUID","PLACE_HOLDER_REGEXP","IS_NATIVE_CODE_REGEXP","IS_PURE_FUNCTION","IS_ARROW_FUNCTION","UNSAFE_CHARS_REGEXP","SCRIPT_CLOSE_REGEXP","RESERVED_SYMBOLS","ESCAPED_CHARS","escapeUnsafeChars","unsafeChar","escapeFunctionBody","str","match","bytes","result","i","deleteFunctions","obj","functionKeys","key","serializeJavascript","serialize","options","functions","regexps","dates","maps","sets","arrays","undefs","infinities","bigInts","urls","replacer","value","origValue","type","isSparse","serializeFunc","fn","serializedFn","argsStartsAt","def","val","nonReservedSymbols","backSlash","valueIndex","isoStr","flags","VOID_ELEMENTS","classList","input","ATTRIBUTE_NAME_START_CHAR","ATTRIBUTE_NAME_CHAR","VALID_ATTRIBUTE_NAME_REGEX","validatedAttributeNameCache","illegalAttributeNameCache","isAttributeNameSafe","attributeName","escapeProp","escapeHTML","renderAttributes","props","classValue","existingClass","attrs","renderJsxToHtmlStringInternal","element","RAW_HTML_MARKER","el","children","addCacheTag","componentResult","childrenHtml","renderJsxToHtmlString","renderToRenderedNode"],"mappings":"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","x_google_ignoreList":[0]}
package/dist/seo.js CHANGED
@@ -1,5 +1,5 @@
1
- import { M as r } from "./generateMetadata-DLMaI0EO.js";
2
- import { m } from "./jsx-runtime-DVQ9eOji.js";
1
+ import { M as r } from "./generateMetadata-CIFVlViV.js";
2
+ import { m } from "./jsx-runtime-Bokflh8Q.js";
3
3
  export {
4
4
  r as MetadataRenderer,
5
5
  m as mergeMetadata
package/dist/server.js CHANGED
@@ -3,7 +3,7 @@ import M from "node:fs/promises";
3
3
  import u from "node:path";
4
4
  import { pathToFileURL as H } from "node:url";
5
5
  import K from "request-ip";
6
- import { a as Z, s as B } from "./render-BF7iTagJ.js";
6
+ import { a as Z, s as B } from "./render-DTXfJu0d.js";
7
7
  import { p as z, c as Q, a as q } from "./index-BlfNBupp.js";
8
8
  import { createHash as ee } from "node:crypto";
9
9
  import { createRequire as te } from "node:module";
@@ -1,41 +1,41 @@
1
1
  import { transform as z } from "esbuild";
2
- import { existsSync as w, mkdirSync as U, writeFileSync as J, rmSync as D, statSync as C, readFileSync as T, readdirSync as N } from "fs";
3
- import { join as b, relative as S, resolve as y, dirname as G } from "path";
4
- const j = "virtual:l5e-views", v = "virtual:l5e-route", _ = "virtual:l5e-ssr-entry", E = "virtual:l5e-global-loader", R = "virtual:l5e-island-strategies", $ = "virtual:l5e-actions", P = "virtual:l5e-middleware", F = /* @__PURE__ */ new Set(["MODE", "BASE_URL", "PROD", "DEV", "SSR", "LEGACY"]);
5
- function O(s, o = []) {
6
- const l = N(s);
2
+ import { existsSync as w, mkdirSync as J, writeFileSync as D, rmSync as N, statSync as O, readFileSync as T, readdirSync as G } from "fs";
3
+ import { join as b, relative as S, resolve as y, dirname as K } from "path";
4
+ const j = "virtual:l5e-views", v = "virtual:l5e-route", _ = "virtual:l5e-ssr-entry", E = "virtual:l5e-global-loader", R = "virtual:l5e-island-strategies", P = "virtual:l5e-islands", $ = "virtual:l5e-actions", I = "virtual:l5e-middleware", F = /* @__PURE__ */ new Set(["MODE", "BASE_URL", "PROD", "DEV", "SSR", "LEGACY"]);
5
+ function k(s, o = []) {
6
+ const l = G(s);
7
7
  for (const i of l) {
8
8
  const t = b(s, i);
9
- if (C(t).isDirectory()) {
9
+ if (O(t).isDirectory()) {
10
10
  if (i === "node_modules" || i === "dist" || i === ".git")
11
11
  continue;
12
- O(t, o);
12
+ k(t, o);
13
13
  } else (i.endsWith(".tsx") || i.endsWith(".ts")) && o.push(t);
14
14
  }
15
15
  return o;
16
16
  }
17
- function I(s) {
17
+ function A(s) {
18
18
  let o = 0;
19
19
  for (let l = 0; l < s.length; l++)
20
20
  o = (o << 5) - o + s.charCodeAt(l), o = o & o;
21
21
  return Math.abs(o).toString(16).slice(0, 4);
22
22
  }
23
- function k(s) {
23
+ function V(s) {
24
24
  const o = s.split("/");
25
25
  let l = o[o.length - 1];
26
26
  return l = l.replace(/\.(tsx?|jsx?)$/, ""), l;
27
27
  }
28
- function K(s) {
29
- return `${k(s)}_${I(s)}`;
28
+ function H(s) {
29
+ return `${V(s)}_${A(s)}`;
30
30
  }
31
- function H(s, o) {
31
+ function B(s, o) {
32
32
  const l = s.replace(/^\//, ""), i = y(o, l);
33
33
  for (const t of [".tsx", ".ts", ".jsx", ".js"])
34
34
  if (w(i + t))
35
35
  return l + t;
36
36
  return w(i) ? l : null;
37
37
  }
38
- function B(s, o) {
38
+ function Y(s, o) {
39
39
  const l = T(s, "utf-8"), i = [], t = /<ClientIsland\s[^>]*?from\s*=\s*"([^"]+)"/g, n = /* @__PURE__ */ new Set();
40
40
  let c;
41
41
  for (; (c = t.exec(l)) !== null; ) {
@@ -50,16 +50,16 @@ function B(s, o) {
50
50
  e = "/" + S(o, r).replace(/\\/g, "/");
51
51
  } else
52
52
  e = a;
53
- const d = H(e, o);
53
+ const d = B(e, o);
54
54
  if (!d) {
55
55
  console.warn(
56
56
  `[l5e] Island component not found: ${e} (from ${a} in ${s})`
57
57
  );
58
58
  continue;
59
59
  }
60
- const f = K(e);
60
+ const f = H(e);
61
61
  n.has(f) || (n.add(f), i.push({
62
- component: k(e),
62
+ component: V(e),
63
63
  resolvedPath: e,
64
64
  src: d,
65
65
  // "src/views/.../Counter.tsx" — matches manifest key format
@@ -68,7 +68,7 @@ function B(s, o) {
68
68
  }
69
69
  return i;
70
70
  }
71
- function Y(s, o) {
71
+ function Z(s, o) {
72
72
  const l = T(s, "utf-8"), i = [], t = [], n = /useCss\s*\(\s*['"]([^'"]+)['"]\s*,?\s*\)/g, c = /useClientJs\s*\(\s*['"]([^'"]+)['"]\s*,?\s*\)/g;
73
73
  let a;
74
74
  for (; (a = n.exec(l)) !== null; ) {
@@ -93,52 +93,52 @@ function Y(s, o) {
93
93
  }
94
94
  return { css: i, js: t };
95
95
  }
96
- function L(s) {
96
+ function C(s) {
97
97
  const o = {}, l = b(s, "src"), i = /* @__PURE__ */ new Map(), t = /* @__PURE__ */ new Map(), n = /* @__PURE__ */ new Map(), c = /* @__PURE__ */ new Map();
98
98
  try {
99
- if (!C(l).isDirectory())
99
+ if (!O(l).isDirectory())
100
100
  return { input: o, islandRegistry: i, pathToKey: t, keyToSrc: n, actionRegistry: c };
101
101
  const a = b(s, "src", "client.global.ts");
102
102
  w(a) && (o.global = a, console.log("[l5e] Detected src/client.global.ts and added as entry"));
103
- const e = O(l), d = /* @__PURE__ */ new Set(), f = /* @__PURE__ */ new Set();
103
+ const e = k(l), d = /* @__PURE__ */ new Set(), f = /* @__PURE__ */ new Set();
104
104
  for (const r of e) {
105
- const { css: u, js: h } = Y(r, s);
106
- u.forEach((p) => d.add(p)), h.forEach((p) => f.add(p));
107
- const m = B(r, s);
108
- for (const p of m)
109
- i.set(p.key, p.resolvedPath), t.set(p.resolvedPath, p.key), n.set(p.key, p.src);
105
+ const { css: u, js: p } = Z(r, s);
106
+ u.forEach((h) => d.add(h)), p.forEach((h) => f.add(h));
107
+ const m = Y(r, s);
108
+ for (const h of m)
109
+ i.set(h.key, h.resolvedPath), t.set(h.resolvedPath, h.key), n.set(h.key, h.src);
110
110
  const g = r.replace(/\\/g, "/");
111
111
  if (/\/actions\.(ts|tsx)$/.test(g)) {
112
- const p = T(r, "utf-8"), x = /export\s+const\s+(\w+)\s*=\s*defineAction\s*\(/g;
112
+ const h = T(r, "utf-8"), x = /export\s+const\s+(\w+)\s*=\s*defineAction\s*\(/g;
113
113
  let W;
114
- const A = S(l, G(r)).replace(/\\/g, "/") || ".";
115
- for (; (W = x.exec(p)) !== null; ) {
116
- const M = W[1], V = `${M}_${I(A)}`;
117
- c.set(V, { modulePath: A, actionName: M });
114
+ const L = S(l, K(r)).replace(/\\/g, "/") || ".";
115
+ for (; (W = x.exec(h)) !== null; ) {
116
+ const M = W[1], U = `${M}_${A(L)}`;
117
+ c.set(U, { modulePath: L, actionName: M });
118
118
  }
119
119
  }
120
120
  }
121
121
  for (const r of d) {
122
- const u = r.startsWith("/src/") || r.startsWith("/") ? r.substring(1) : r, h = y(s, u);
123
- if (!w(h)) {
124
- console.warn(`[l5e] CSS file not found: ${h} (from ${r})`);
122
+ const u = r.startsWith("/src/") || r.startsWith("/") ? r.substring(1) : r, p = y(s, u);
123
+ if (!w(p)) {
124
+ console.warn(`[l5e] CSS file not found: ${p} (from ${r})`);
125
125
  continue;
126
126
  }
127
127
  const m = u.replace(/^src\//, "").replace(/\.css$/, "").replace(/\//g, "-").replace(/\\/g, "-");
128
- o[m] = h;
128
+ o[m] = p;
129
129
  }
130
130
  for (const r of f) {
131
- const u = r.startsWith("/src/") || r.startsWith("/") ? r.substring(1) : r, h = y(s, u);
132
- if (!w(h)) {
133
- console.warn(`[l5e] JS/TS file not found: ${h} (from ${r})`);
131
+ const u = r.startsWith("/src/") || r.startsWith("/") ? r.substring(1) : r, p = y(s, u);
132
+ if (!w(p)) {
133
+ console.warn(`[l5e] JS/TS file not found: ${p} (from ${r})`);
134
134
  continue;
135
135
  }
136
136
  const m = u.replace(/^src\//, "").replace(/\.(ts|tsx|js|jsx)$/, "").replace(/\//g, "-").replace(/\\/g, "-");
137
- o[m] = h;
137
+ o[m] = p;
138
138
  }
139
139
  for (const [r, u] of n) {
140
- const h = y(s, u);
141
- o[`island-${r}`] = h;
140
+ const p = y(s, u);
141
+ o[`island-${r}`] = p;
142
142
  }
143
143
  i.size > 0 && console.log(`[l5e] Detected ${i.size} island(s)`), c.size > 0 && console.log(`[l5e] Detected ${c.size} action(s)`);
144
144
  } catch (a) {
@@ -146,7 +146,7 @@ function L(s) {
146
146
  }
147
147
  return { input: o, islandRegistry: i, pathToKey: t, keyToSrc: n, actionRegistry: c };
148
148
  }
149
- function Z(s, o, l, i, t) {
149
+ function X(s, o, l, i, t) {
150
150
  const n = [];
151
151
  let c = 0;
152
152
  const a = /ClientIsland\s*,\s*\{/g;
@@ -155,26 +155,26 @@ function Z(s, o, l, i, t) {
155
155
  const d = e.index + e[0].length, f = s.substring(d, d + 500), r = /from:\s*"([^"]+)"/.exec(f);
156
156
  if (!r) continue;
157
157
  const u = r[1];
158
- let h;
158
+ let p;
159
159
  if (u.startsWith("~/"))
160
- h = "/src/" + u.substring(2);
160
+ p = "/src/" + u.substring(2);
161
161
  else if (u.startsWith("/src/"))
162
- h = u;
162
+ p = u;
163
163
  else if (u.startsWith("./") || u.startsWith("../")) {
164
164
  const x = y(o, "..", u);
165
- h = "/" + S(l, x).replace(/\\/g, "/");
165
+ p = "/" + S(l, x).replace(/\\/g, "/");
166
166
  } else
167
- h = u;
168
- const m = i.get(h);
167
+ p = u;
168
+ const m = i.get(p);
169
169
  if (!m) continue;
170
170
  const g = t.get(m);
171
171
  if (!g) continue;
172
- const p = d + r.index + r[0].length;
173
- n.push(s.substring(c, p)), n.push(`, __key: "${m}", __src: "${g}"`), c = p;
172
+ const h = d + r.index + r[0].length;
173
+ n.push(s.substring(c, h)), n.push(`, __key: "${m}", __src: "${g}"`), c = h;
174
174
  }
175
175
  return n.push(s.substring(c)), n.join("");
176
176
  }
177
- function et() {
177
+ function st() {
178
178
  let s = process.cwd(), o = /* @__PURE__ */ new Map(), l = /* @__PURE__ */ new Map(), i = /* @__PURE__ */ new Map();
179
179
  return {
180
180
  name: "l5e-jsx-classic",
@@ -185,7 +185,7 @@ function et() {
185
185
  handleHotUpdate({ file: t, server: n }) {
186
186
  const c = S(s, t);
187
187
  if (/actions\.(ts|tsx)$/.test(t)) {
188
- i = L(s).actionRegistry;
188
+ i = C(s).actionRegistry;
189
189
  const e = n.moduleGraph.getModuleById("\0" + $);
190
190
  e && n.moduleGraph.invalidateModule(e), console.log(
191
191
  `[l5e] Action file changed: ${c} — re-scanned ${i.size} action(s)`
@@ -209,7 +209,7 @@ function et() {
209
209
  const t = b(s, ".l5e-temp");
210
210
  if (w(t))
211
211
  try {
212
- D(t, { recursive: !0, force: !0 }), console.log("[l5e] Cleaned up temporary files");
212
+ N(t, { recursive: !0, force: !0 }), console.log("[l5e] Cleaned up temporary files");
213
213
  } catch (n) {
214
214
  console.warn("[l5e] Failed to cleanup temporary files:", n);
215
215
  }
@@ -217,13 +217,13 @@ function et() {
217
217
  writeBundle(t, n) {
218
218
  if (i.size > 0) {
219
219
  const c = b(s, "dist", "server");
220
- w(c) || U(c, { recursive: !0 });
220
+ w(c) || J(c, { recursive: !0 });
221
221
  const a = Object.fromEntries(i);
222
- J(b(c, "action-registry.json"), JSON.stringify(a), "utf-8"), console.log(`[l5e] Wrote action-registry.json (${i.size} actions)`);
222
+ D(b(c, "action-registry.json"), JSON.stringify(a), "utf-8"), console.log(`[l5e] Wrote action-registry.json (${i.size} actions)`);
223
223
  }
224
224
  },
225
225
  config(t) {
226
- const n = t.root || process.cwd(), c = L(n);
226
+ const n = t.root || process.cwd(), c = C(n);
227
227
  c.islandRegistry, o = c.pathToKey, l = c.keyToSrc, i = c.actionRegistry;
228
228
  const a = t.build?.rollupOptions?.input || {}, e = typeof a == "object" && !Array.isArray(a) ? { ...c.input, ...a } : c.input;
229
229
  return {
@@ -241,7 +241,7 @@ function et() {
241
241
  };
242
242
  },
243
243
  resolveId(t) {
244
- return t === j ? "\0" + j : t === v ? "\0" + v : t === _ ? "\0" + _ : t === E ? "\0" + E : t === R ? "\0" + R : t === $ ? "\0" + $ : t === P ? "\0" + P : null;
244
+ return t === j ? "\0" + j : t === v ? "\0" + v : t === _ ? "\0" + _ : t === E ? "\0" + E : t === R ? "\0" + R : t === P ? "\0" + P : t === $ ? "\0" + $ : t === I ? "\0" + I : null;
245
245
  },
246
246
  async transform(t, n, c) {
247
247
  if (n.replace(/\\/g, "/").endsWith("src/client.global.ts") && !c?.ssr)
@@ -254,22 +254,22 @@ ${t}`,
254
254
  const d = n.replace(/\\/g, "/").match(/\/src\/(.+)\/actions\.(ts|tsx)$/);
255
255
  if (d) {
256
256
  const f = d[1], r = /export\s+const\s+(\w+)\s*=\s*defineAction\s*\(/g, u = [];
257
- let h;
258
- for (; (h = r.exec(t)) !== null; ) {
259
- const m = h[1], p = t.substring(h.index, h.index + 500).match(/method:\s*['"](\w+)['"]/), x = p ? p[1].toUpperCase() : "GET";
257
+ let p;
258
+ for (; (p = r.exec(t)) !== null; ) {
259
+ const m = p[1], h = t.substring(p.index, p.index + 500).match(/method:\s*['"](\w+)['"]/), x = h ? h[1].toUpperCase() : "GET";
260
260
  u.push({ name: m, method: x });
261
261
  }
262
262
  if (u.length > 0)
263
263
  return {
264
- code: u.map(({ name: g, method: p }) => {
265
- const x = `${g}_${I(f)}`;
266
- return p === "GET" ? `export async function ${g}(params) {
264
+ code: u.map(({ name: g, method: h }) => {
265
+ const x = `${g}_${A(f)}`;
266
+ return h === "GET" ? `export async function ${g}(params) {
267
267
  const res = await fetch('/_l5e/action/${x}?' + new URLSearchParams(params));
268
268
  if (!res.ok) throw Object.assign(new Error('HTTP ' + res.status), { status: res.status });
269
269
  return res;
270
270
  }` : `export async function ${g}(body) {
271
271
  const res = await fetch('/_l5e/action/${x}', {
272
- method: '${p}',
272
+ method: '${h}',
273
273
  headers: { 'Content-Type': 'application/json' },
274
274
  body: JSON.stringify(body),
275
275
  });
@@ -298,7 +298,7 @@ ${t}`, d = await z(e, {
298
298
  target: "es2020"
299
299
  });
300
300
  let f = d.code;
301
- return f.includes("ClientIsland") && (f = Z(f, n, s, o, l)), {
301
+ return f.includes("ClientIsland") && (f = X(f, n, s, o, l)), {
302
302
  code: f,
303
303
  map: d.map || null
304
304
  };
@@ -340,7 +340,7 @@ export { viewActions } from 'virtual:l5e-actions';`;
340
340
  return `export const viewActions = import.meta.glob('/src/**/actions.{ts,tsx}');
341
341
  export const actionRegistry = ${JSON.stringify(n)};`;
342
342
  }
343
- if (t === "\0" + P)
343
+ if (t === "\0" + I)
344
344
  return `
345
345
  const middlewareModules = import.meta.glob([
346
346
  '/src/middleware.{ts,tsx,js,jsx}',
@@ -366,6 +366,8 @@ export async function loadMiddleware() {
366
366
  return mod.onRequest;
367
367
  }
368
368
  `;
369
+ if (t === "\0" + P)
370
+ return "export const islandModules = import.meta.glob('/src/**/react/*.{tsx,jsx}');";
369
371
  if (t === "\0" + R) {
370
372
  const n = b(s, "src", "island-strategies.ts");
371
373
  return w(n) ? "import '/src/island-strategies.ts';" : "/* no custom island strategies */";
@@ -375,7 +377,7 @@ export async function loadMiddleware() {
375
377
  };
376
378
  }
377
379
  export {
378
- et as coreVite,
379
- et as default
380
+ st as coreVite,
381
+ st as default
380
382
  };
381
383
  //# sourceMappingURL=vite-plugin.js.map