@litsx/babel-preset-litsx 0.5.0 → 0.6.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.
- package/dist/internal/transform-litsx-components.cjs +8 -8
- package/dist/internal/transform-litsx-components.cjs.map +1 -1
- package/dist/internal/transform-litsx-dom-refs.cjs +1 -1
- package/dist/internal/transform-litsx-dom-refs.cjs.map +1 -1
- package/dist/internal/transform-litsx-hooks.cjs +1 -1
- package/dist/internal/transform-litsx-hooks.cjs.map +1 -1
- package/dist/internal/transform-litsx-renderer-props.cjs +5 -2
- package/dist/internal/transform-litsx-renderer-props.cjs.map +1 -1
- package/package.json +7 -6
- package/src/internal/transform-litsx-dom-refs.js +1 -1
- package/src/internal/transform-litsx-hooks.js +1 -1
- package/src/internal/transform-litsx-program.js +8 -8
- package/src/internal/transform-litsx-renderer-props.js +6 -3
|
@@ -5,7 +5,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
5
5
|
var babelPluginSharedHooks = require('@litsx/babel-plugin-shared-hooks');
|
|
6
6
|
|
|
7
7
|
var transformLitsxDomRefs = babelPluginSharedHooks.createUseRefTransform({
|
|
8
|
-
importSource: "@litsx/
|
|
8
|
+
importSource: "@litsx/core",
|
|
9
9
|
hookNames: ["useRef"],
|
|
10
10
|
pluginName: "transform-litsx-dom-refs",
|
|
11
11
|
pendingPropertyKey: "_litsxPendingElements",
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform-litsx-dom-refs.cjs","sources":["../../src/internal/transform-litsx-dom-refs.js"],"sourcesContent":["import { createUseRefTransform } from \"@litsx/babel-plugin-shared-hooks\";\n\nexport default createUseRefTransform({\n importSource: \"@litsx/
|
|
1
|
+
{"version":3,"file":"transform-litsx-dom-refs.cjs","sources":["../../src/internal/transform-litsx-dom-refs.js"],"sourcesContent":["import { createUseRefTransform } from \"@litsx/babel-plugin-shared-hooks\";\n\nexport default createUseRefTransform({\n importSource: \"@litsx/core\",\n hookNames: [\"useRef\"],\n pluginName: \"transform-litsx-dom-refs\",\n pendingPropertyKey: \"_litsxPendingElements\",\n onlyManagedDomRefs: true,\n});\n"],"names":["createUseRefTransform"],"mappings":";;;;;;AAEA,4BAAeA,4CAAqB,CAAC;AACrC,EAAE,YAAY,EAAE,aAAa;AAC7B,EAAE,SAAS,EAAE,CAAC,QAAQ,CAAC;AACvB,EAAE,UAAU,EAAE,0BAA0B;AACxC,EAAE,kBAAkB,EAAE,uBAAuB;AAC7C,EAAE,kBAAkB,EAAE,IAAI;AAC1B,CAAC,CAAC;;;;"}
|
|
@@ -4,7 +4,7 @@ Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
4
4
|
|
|
5
5
|
var babelPluginSharedHooks = require('@litsx/babel-plugin-shared-hooks');
|
|
6
6
|
|
|
7
|
-
const RUNTIME_MODULE = "@litsx/
|
|
7
|
+
const RUNTIME_MODULE = "@litsx/core";
|
|
8
8
|
const IMPORT_SOURCES = [RUNTIME_MODULE];
|
|
9
9
|
|
|
10
10
|
const RUNTIME_HELPERS = [
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform-litsx-hooks.cjs","sources":["../../src/internal/transform-litsx-hooks.js"],"sourcesContent":["import { createRuntimeHooksTransform } from \"@litsx/babel-plugin-shared-hooks\";\n\nconst RUNTIME_MODULE = \"@litsx/
|
|
1
|
+
{"version":3,"file":"transform-litsx-hooks.cjs","sources":["../../src/internal/transform-litsx-hooks.js"],"sourcesContent":["import { createRuntimeHooksTransform } from \"@litsx/babel-plugin-shared-hooks\";\n\nconst RUNTIME_MODULE = \"@litsx/core\";\nconst IMPORT_SOURCES = [RUNTIME_MODULE];\n\nconst RUNTIME_HELPERS = [\n \"useOnConnect\",\n \"useAfterUpdate\",\n \"useOnCommit\",\n \"useMemoValue\",\n \"useStableCallback\",\n \"useEvent\",\n \"useEmit\",\n \"usePrevious\",\n \"useReducedState\",\n \"useState\",\n \"useControlledState\",\n \"useAsyncState\",\n \"useOptimistic\",\n \"useExpose\",\n \"useExternalStore\",\n \"useHost\",\n \"useHostContent\",\n \"useSlot\",\n \"useTextContent\",\n \"useTransition\",\n \"useDeferredValue\",\n \"useStyle\",\n \"useRef\",\n \"useCallbackRef\",\n];\n\nexport default createRuntimeHooksTransform({\n pluginName: \"transform-litsx-hooks\",\n runtimeModule: RUNTIME_MODULE,\n importSources: IMPORT_SOURCES,\n helperNames: RUNTIME_HELPERS,\n});\n"],"names":["createRuntimeHooksTransform"],"mappings":";;;;;;AAEA,MAAM,cAAc,GAAG,aAAa;AACpC,MAAM,cAAc,GAAG,CAAC,cAAc,CAAC;;AAEvC,MAAM,eAAe,GAAG;AACxB,EAAE,cAAc;AAChB,EAAE,gBAAgB;AAClB,EAAE,aAAa;AACf,EAAE,cAAc;AAChB,EAAE,mBAAmB;AACrB,EAAE,UAAU;AACZ,EAAE,SAAS;AACX,EAAE,aAAa;AACf,EAAE,iBAAiB;AACnB,EAAE,UAAU;AACZ,EAAE,oBAAoB;AACtB,EAAE,eAAe;AACjB,EAAE,eAAe;AACjB,EAAE,WAAW;AACb,EAAE,kBAAkB;AACpB,EAAE,SAAS;AACX,EAAE,gBAAgB;AAClB,EAAE,SAAS;AACX,EAAE,gBAAgB;AAClB,EAAE,eAAe;AACjB,EAAE,kBAAkB;AACpB,EAAE,UAAU;AACZ,EAAE,QAAQ;AACV,EAAE,gBAAgB;AAClB,CAAC;;AAED,0BAAeA,kDAA2B,CAAC;AAC3C,EAAE,UAAU,EAAE,uBAAuB;AACrC,EAAE,aAAa,EAAE,cAAc;AAC/B,EAAE,aAAa,EAAE,cAAc;AAC/B,EAAE,WAAW,EAAE,eAAe;AAC9B,CAAC,CAAC;;;;"}
|
|
@@ -316,7 +316,7 @@ function ensureRendererBindingImport(programPath) {
|
|
|
316
316
|
const runtimeImports = bodyPaths.filter(
|
|
317
317
|
(path) =>
|
|
318
318
|
path.isImportDeclaration() &&
|
|
319
|
-
path.node.source.value === "@litsx/
|
|
319
|
+
path.node.source.value === "@litsx/core/rendering"
|
|
320
320
|
);
|
|
321
321
|
|
|
322
322
|
const importSpecifier = t.importSpecifier(
|
|
@@ -342,7 +342,7 @@ function ensureRendererBindingImport(programPath) {
|
|
|
342
342
|
|
|
343
343
|
programPath.unshiftContainer("body", t.importDeclaration(
|
|
344
344
|
[importSpecifier],
|
|
345
|
-
t.stringLiteral("@litsx/
|
|
345
|
+
t.stringLiteral("@litsx/core/rendering")
|
|
346
346
|
));
|
|
347
347
|
}
|
|
348
348
|
|
|
@@ -388,6 +388,9 @@ function transformLitsxRendererProps(api) {
|
|
|
388
388
|
[
|
|
389
389
|
createHostReferenceExpression(),
|
|
390
390
|
expressionPath.node,
|
|
391
|
+
t.objectExpression([
|
|
392
|
+
t.objectProperty(t.identifier("projected"), t.booleanLiteral(true)),
|
|
393
|
+
]),
|
|
391
394
|
]
|
|
392
395
|
);
|
|
393
396
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transform-litsx-renderer-props.cjs","sources":["../../../jsx-authoring/src/index.js","../../src/internal/transform-litsx-renderer-props.js"],"sourcesContent":["import MagicString from \"magic-string\";\n\nconst PREFIX_TO_KIND = {\n \"@\": \"event\",\n \".\": \"prop\",\n \"?\": \"bool\",\n};\n\nconst KIND_TO_PREFIX = {\n event: \"@\",\n prop: \".\",\n bool: \"?\",\n};\n\nconst ATTR_NAME_CHAR = /[\\w:-]/;\nconst TAG_NAME_START_CHAR = /[A-Za-z]/;\nconst TAG_NAME_CHAR = /[\\w:.-]/;\nconst MACRO_NAME_START_CHAR = /[A-Za-z$_]/;\nconst MACRO_NAME_CHAR = /[A-Za-z0-9$_]/;\n\nfunction isWhitespace(char) {\n return char === \" \" || char === \"\\t\" || char === \"\\n\" || char === \"\\r\";\n}\n\nfunction isReservedVirtualAttributeName(name) {\n return /^__litsx_(event|prop|bool)_/.test(name);\n}\n\nfunction sanitizeIdentifierTailChar(char) {\n return /[A-Za-z0-9$_]/.test(char) ? char : \"_\";\n}\n\nfunction isIdentifierStartChar(char) {\n return /[A-Za-z$_]/.test(char);\n}\n\nfunction isIdentifierChar(char) {\n return /[A-Za-z0-9$_]/.test(char);\n}\n\nfunction encodeEditorVirtualAttributeName(name) {\n const prefix = name[0];\n const localName = name.slice(1);\n const encodedPrefix = prefix === \"@\" ? \"e\" : prefix === \".\" ? \"p\" : \"b\";\n return `${encodedPrefix}${Array.from(localName, sanitizeIdentifierTailChar).join(\"\")}`;\n}\n\nfunction encodeEditorStaticHoistName(originalName, macroName) {\n return `$${macroName}`;\n}\n\nfunction encodeEditorStaticHoistAssignment(name) {\n return `const $${name} = `;\n}\n\nfunction scanQuotedString(sourceText, start, quote) {\n let index = start + 1;\n\n while (index < sourceText.length) {\n const char = sourceText[index];\n if (char === \"\\\\\") {\n index += 2;\n continue;\n }\n if (char === quote) {\n return index + 1;\n }\n index += 1;\n }\n\n return index;\n}\n\nfunction scanLineComment(sourceText, start) {\n let index = start + 2;\n while (index < sourceText.length && sourceText[index] !== \"\\n\") {\n index += 1;\n }\n return index;\n}\n\nfunction scanBlockComment(sourceText, start) {\n let index = start + 2;\n while (index < sourceText.length) {\n if (sourceText[index] === \"*\" && sourceText[index + 1] === \"/\") {\n return index + 2;\n }\n index += 1;\n }\n return index;\n}\n\nfunction scanTemplateLiteral(sourceText, start) {\n let index = start + 1;\n\n while (index < sourceText.length) {\n const char = sourceText[index];\n if (char === \"\\\\\") {\n index += 2;\n continue;\n }\n if (char === \"`\") {\n return index + 1;\n }\n if (char === \"$\" && sourceText[index + 1] === \"{\") {\n index = scanBalancedBraces(sourceText, index + 1);\n continue;\n }\n index += 1;\n }\n\n return index;\n}\n\nfunction scanBalancedBraces(sourceText, start) {\n let depth = 0;\n let index = start;\n\n while (index < sourceText.length) {\n const char = sourceText[index];\n const next = sourceText[index + 1];\n\n if (char === \"'\" || char === \"\\\"\") {\n index = scanQuotedString(sourceText, index, char);\n continue;\n }\n\n if (char === \"`\") {\n index = scanTemplateLiteral(sourceText, index);\n continue;\n }\n\n if (char === \"/\" && next === \"/\") {\n index = scanLineComment(sourceText, index);\n continue;\n }\n\n if (char === \"/\" && next === \"*\") {\n index = scanBlockComment(sourceText, index);\n continue;\n }\n\n if (char === \"{\") {\n depth += 1;\n index += 1;\n continue;\n }\n\n if (char === \"}\") {\n depth -= 1;\n index += 1;\n if (depth <= 0) {\n return index;\n }\n continue;\n }\n\n index += 1;\n }\n\n return index;\n}\n\nfunction scanBalancedBracesWithJsx(sourceText, start, replacements, encodeAttributeName) {\n let depth = 0;\n let index = start;\n\n while (index < sourceText.length) {\n const char = sourceText[index];\n const next = sourceText[index + 1];\n\n if (char === \"'\" || char === \"\\\"\") {\n index = scanQuotedString(sourceText, index, char);\n continue;\n }\n\n if (char === \"`\") {\n index = scanTemplateLiteral(sourceText, index);\n continue;\n }\n\n if (char === \"/\" && next === \"/\") {\n index = scanLineComment(sourceText, index);\n continue;\n }\n\n if (char === \"/\" && next === \"*\") {\n index = scanBlockComment(sourceText, index);\n continue;\n }\n\n if (char === \"<\" && isLikelyJsxTagStart(sourceText, index)) {\n index = scanJsxElement(sourceText, index, replacements, encodeAttributeName);\n continue;\n }\n\n if (char === \"{\") {\n depth += 1;\n index += 1;\n continue;\n }\n\n if (char === \"}\") {\n depth -= 1;\n index += 1;\n if (depth <= 0) {\n return index;\n }\n continue;\n }\n\n index += 1;\n }\n\n return index;\n}\n\nfunction trimTrailingWhitespaceAndComments(sourceText) {\n let text = sourceText;\n let changed = true;\n\n while (changed) {\n changed = false;\n\n const trimmedWhitespace = text.replace(/\\s+$/u, \"\");\n if (trimmedWhitespace !== text) {\n text = trimmedWhitespace;\n changed = true;\n }\n\n const trimmedLineComment = text.replace(/\\/\\/[^\\n\\r]*$/u, \"\");\n if (trimmedLineComment !== text) {\n text = trimmedLineComment;\n changed = true;\n continue;\n }\n\n const trimmedBlockComment = text.replace(/\\/\\*[\\s\\S]*?\\*\\/$/u, \"\");\n if (trimmedBlockComment !== text) {\n text = trimmedBlockComment;\n changed = true;\n }\n }\n\n return text;\n}\n\nfunction previousSignificantIndex(sourceText, start) {\n let index = start - 1;\n while (index >= 0 && isWhitespace(sourceText[index])) {\n index -= 1;\n }\n return index;\n}\n\nfunction readPreviousWord(sourceText, endIndex) {\n let index = endIndex;\n while (index >= 0 && /[A-Za-z]/.test(sourceText[index])) {\n index -= 1;\n }\n return sourceText.slice(index + 1, endIndex + 1);\n}\n\nfunction isLikelyJsxTagStart(sourceText, index) {\n const next = sourceText[index + 1];\n if (!TAG_NAME_START_CHAR.test(next || \"\")) {\n return false;\n }\n\n const previousIndex = previousSignificantIndex(sourceText, index);\n if (previousIndex < 0) {\n return true;\n }\n\n const previousChar = sourceText[previousIndex];\n if (\"=({[,!?:;>&|\".includes(previousChar)) {\n return true;\n }\n\n const previousWord = readPreviousWord(sourceText, previousIndex);\n return [\"return\", \"case\", \"throw\", \"yield\", \"else\"].includes(previousWord);\n}\n\nfunction readJsxTagName(sourceText, start) {\n let index = start + 1;\n const isClosing = sourceText[index] === \"/\";\n\n if (isClosing) {\n index += 1;\n }\n\n if (!TAG_NAME_START_CHAR.test(sourceText[index] || \"\")) {\n return null;\n }\n\n const nameStart = index;\n\n while (index < sourceText.length && TAG_NAME_CHAR.test(sourceText[index])) {\n index += 1;\n }\n\n return {\n name: sourceText.slice(nameStart, index),\n isClosing,\n end: index,\n };\n}\n\nfunction scanJsxTag(sourceText, start, replacements, encodeAttributeName) {\n const tag = readJsxTagName(sourceText, start);\n\n if (!tag) {\n return {\n end: start + 1,\n tagName: null,\n isClosing: false,\n selfClosing: false,\n };\n }\n\n let index = tag.end;\n\n if (tag.isClosing) {\n while (index < sourceText.length) {\n if (sourceText[index] === \">\") {\n return {\n end: index + 1,\n tagName: tag.name,\n isClosing: true,\n selfClosing: false,\n };\n }\n\n index += 1;\n }\n\n return {\n end: index,\n tagName: tag.name,\n isClosing: true,\n selfClosing: false,\n };\n }\n\n function scanAttributeValue(valueStart) {\n let valueIndex = valueStart;\n\n while (valueIndex < sourceText.length && isWhitespace(sourceText[valueIndex])) {\n valueIndex += 1;\n }\n\n if (valueIndex >= sourceText.length) {\n return valueIndex;\n }\n\n const valueChar = sourceText[valueIndex];\n if (valueChar === \"{\") {\n return scanBalancedBracesWithJsx(\n sourceText,\n valueIndex,\n replacements,\n encodeAttributeName\n );\n }\n\n if (valueChar === \"'\" || valueChar === \"\\\"\") {\n return scanQuotedString(sourceText, valueIndex, valueChar);\n }\n\n while (\n valueIndex < sourceText.length &&\n !isWhitespace(sourceText[valueIndex]) &&\n sourceText[valueIndex] !== \">\" &&\n !(sourceText[valueIndex] === \"/\" && sourceText[valueIndex + 1] === \">\")\n ) {\n valueIndex += 1;\n }\n\n return valueIndex;\n }\n\n while (index < sourceText.length) {\n const char = sourceText[index];\n const next = sourceText[index + 1];\n\n if (char === \">\") {\n return {\n end: index + 1,\n tagName: tag.name,\n isClosing: false,\n selfClosing: false,\n };\n }\n\n if (char === \"/\" && next === \">\") {\n return {\n end: index + 2,\n tagName: tag.name,\n isClosing: false,\n selfClosing: true,\n };\n }\n\n if (isWhitespace(char)) {\n index += 1;\n continue;\n }\n\n if (char === \"{\") {\n index = scanBalancedBracesWithJsx(\n sourceText,\n index,\n replacements,\n encodeAttributeName\n );\n continue;\n }\n\n if (char === \"'\" || char === \"\\\"\") {\n index = scanQuotedString(sourceText, index, char);\n continue;\n }\n\n if (Object.hasOwn(PREFIX_TO_KIND, char) && ATTR_NAME_CHAR.test(next || \"\")) {\n const attrStart = index;\n index += 1;\n\n while (index < sourceText.length && ATTR_NAME_CHAR.test(sourceText[index])) {\n index += 1;\n }\n\n const originalName = sourceText.slice(attrStart, index);\n replacements.push({\n start: attrStart,\n end: index,\n originalName,\n replacement: encodeAttributeName(originalName),\n });\n\n while (index < sourceText.length && isWhitespace(sourceText[index])) {\n index += 1;\n }\n if (sourceText[index] === \"=\") {\n index = scanAttributeValue(index + 1);\n }\n continue;\n }\n\n const attrStart = index;\n while (\n index < sourceText.length &&\n !isWhitespace(sourceText[index]) &&\n sourceText[index] !== \"=\" &&\n sourceText[index] !== \">\" &&\n !(sourceText[index] === \"/\" && sourceText[index + 1] === \">\")\n ) {\n index += 1;\n }\n\n if (index === attrStart) {\n index += 1;\n continue;\n }\n\n while (index < sourceText.length && isWhitespace(sourceText[index])) {\n index += 1;\n }\n if (sourceText[index] === \"=\") {\n index = scanAttributeValue(index + 1);\n }\n }\n\n return {\n end: index,\n tagName: tag.name,\n isClosing: false,\n selfClosing: false,\n };\n}\n\nfunction scanJsxElement(sourceText, start, replacements, encodeAttributeName) {\n const openingTag = scanJsxTag(sourceText, start, replacements, encodeAttributeName);\n\n if (\n openingTag.isClosing ||\n openingTag.selfClosing ||\n !openingTag.tagName\n ) {\n return openingTag.end;\n }\n\n let index = openingTag.end;\n\n while (index < sourceText.length) {\n const char = sourceText[index];\n const next = sourceText[index + 1];\n\n if (char === \"'\" || char === \"\\\"\") {\n index = scanQuotedString(sourceText, index, char);\n continue;\n }\n\n if (char === \"`\") {\n index = scanTemplateLiteral(sourceText, index);\n continue;\n }\n\n if (char === \"/\" && next === \"/\") {\n index = scanLineComment(sourceText, index);\n continue;\n }\n\n if (char === \"/\" && next === \"*\") {\n index = scanBlockComment(sourceText, index);\n continue;\n }\n\n if (char === \"{\") {\n index = scanBalancedBracesWithJsx(\n sourceText,\n index,\n replacements,\n encodeAttributeName\n );\n continue;\n }\n\n if (char === \"<\") {\n const nestedTag = readJsxTagName(sourceText, index);\n\n if (!nestedTag) {\n index += 1;\n continue;\n }\n\n if (nestedTag.isClosing && nestedTag.name === openingTag.tagName) {\n return scanJsxTag(sourceText, index, replacements, encodeAttributeName).end;\n }\n\n if (!nestedTag.isClosing) {\n index = scanJsxElement(sourceText, index, replacements, encodeAttributeName);\n continue;\n }\n }\n\n index += 1;\n }\n\n return index;\n}\n\nexport function encodeVirtualAttributeName(name) {\n const prefix = name[0];\n const localName = name.slice(1);\n const kind = PREFIX_TO_KIND[prefix];\n\n if (!kind) {\n return name;\n }\n\n return `__litsx_${kind}_${localName}`;\n}\n\nexport function decodeVirtualAttributeName(name) {\n const match = /^__litsx_(event|prop|bool)_(.+)$/.exec(name);\n\n if (!match) {\n return null;\n }\n\n const [, kind, localName] = match;\n return `${KIND_TO_PREFIX[kind]}${localName}`;\n}\n\nexport function decodeVirtualStaticHoistName(name) {\n const match = /^__litsx_static_([A-Za-z$_][A-Za-z0-9$_]*)$/.exec(name);\n\n if (!match) {\n return null;\n }\n\n return `static ${match[1]}`;\n}\n\nexport function remapVirtualText(text) {\n if (typeof text !== \"string\") {\n return text;\n }\n\n return text\n .replace(/__litsx_(event|prop|bool)_[\\w:-]+/g, (name) => (\n decodeVirtualAttributeName(name) ?? name\n ))\n .replace(/__litsx_static_[A-Za-z$_][A-Za-z0-9$_]*/g, (name) => (\n decodeVirtualStaticHoistName(name) ?? name\n ));\n}\n\nexport function looksLikeLitsxJsx(sourceText) {\n return (\n /<[\\w.-]+[^>]*\\s(?:[@.?][\\w:-]+)/m.test(sourceText) ||\n /(?:^|[;{}]\\s*)\\^[A-Za-z$_][A-Za-z0-9$_]*/m.test(sourceText) ||\n /^\\s*\\^[A-Za-z$_][A-Za-z0-9$_]*/m.test(sourceText) ||\n /(?:^|[;{}]\\s*)static\\s+[A-Za-z$_][A-Za-z0-9$_]*\\s*=/m.test(sourceText) ||\n /^\\s*static\\s+[A-Za-z$_][A-Za-z0-9$_]*\\s*=/m.test(sourceText)\n );\n}\n\nfunction isLikelyStaticMacroStart(sourceText, index) {\n const next = sourceText[index + 1];\n if (!MACRO_NAME_START_CHAR.test(next || \"\")) {\n return false;\n }\n\n const prefix = trimTrailingWhitespaceAndComments(sourceText.slice(0, index));\n if (!prefix) {\n return true;\n }\n\n const previousChar = prefix[prefix.length - 1];\n return previousChar === \";\" || previousChar === \"{\" || previousChar === \"}\";\n}\n\nfunction scanStaticMacro(sourceText, start, replacements, encodeMacroName) {\n let index = start + 1;\n\n while (index < sourceText.length && MACRO_NAME_CHAR.test(sourceText[index])) {\n index += 1;\n }\n\n const originalName = sourceText.slice(start, index);\n const macroName = originalName.slice(1);\n\n if (macroName === \"mixins\") {\n return index;\n }\n\n replacements.push({\n start,\n end: index,\n originalName,\n replacement: encodeMacroName(originalName, macroName),\n });\n\n return index;\n}\n\nfunction isLikelyStaticHoistAssignmentStart(sourceText, index) {\n if (sourceText.slice(index, index + 6) !== \"static\") {\n return false;\n }\n\n const previousChar = sourceText[index - 1];\n if (previousChar && /[A-Za-z0-9$_]/.test(previousChar)) {\n return false;\n }\n\n const next = sourceText[index + 6];\n if (!isWhitespace(next || \"\")) {\n return false;\n }\n\n const prefix = trimTrailingWhitespaceAndComments(sourceText.slice(0, index));\n if (!prefix) {\n return true;\n }\n\n const previousSignificantChar = prefix[prefix.length - 1];\n return (\n previousSignificantChar === \";\" ||\n previousSignificantChar === \"{\" ||\n previousSignificantChar === \"}\"\n );\n}\n\nfunction readStaticHoistAssignment(sourceText, start) {\n let index = start + 6;\n\n while (index < sourceText.length && isWhitespace(sourceText[index])) {\n index += 1;\n }\n\n const nameStart = index;\n if (!MACRO_NAME_START_CHAR.test(sourceText[index] || \"\")) {\n return null;\n }\n\n index += 1;\n while (index < sourceText.length && MACRO_NAME_CHAR.test(sourceText[index])) {\n index += 1;\n }\n\n const macroName = sourceText.slice(nameStart, index);\n\n while (index < sourceText.length && isWhitespace(sourceText[index])) {\n index += 1;\n }\n\n if (sourceText[index] !== \"=\") {\n return null;\n }\n\n index += 1;\n while (index < sourceText.length && isWhitespace(sourceText[index])) {\n index += 1;\n }\n\n return {\n macroName,\n valueStart: index,\n };\n}\n\nfunction scanStaticHoistAssignment(sourceText, start, replacements, strategy) {\n const assignment = readStaticHoistAssignment(sourceText, start);\n if (!assignment) {\n return start + 1;\n }\n\n const { macroName, valueStart } = assignment;\n\n let index = valueStart;\n let parenDepth = 0;\n let bracketDepth = 0;\n let braceDepth = 0;\n let statementEnd = sourceText.length;\n\n while (index < sourceText.length) {\n const char = sourceText[index];\n const next = sourceText[index + 1];\n\n if (char === \"'\" || char === \"\\\"\") {\n index = scanQuotedString(sourceText, index, char);\n continue;\n }\n\n if (char === \"`\") {\n index = scanTemplateLiteral(sourceText, index);\n continue;\n }\n\n if (char === \"/\" && next === \"/\") {\n index = scanLineComment(sourceText, index);\n continue;\n }\n\n if (char === \"/\" && next === \"*\") {\n index = scanBlockComment(sourceText, index);\n continue;\n }\n\n if (char === \"(\") {\n parenDepth += 1;\n index += 1;\n continue;\n }\n\n if (char === \")\") {\n parenDepth = Math.max(0, parenDepth - 1);\n index += 1;\n continue;\n }\n\n if (char === \"[\") {\n bracketDepth += 1;\n index += 1;\n continue;\n }\n\n if (char === \"]\") {\n bracketDepth = Math.max(0, bracketDepth - 1);\n index += 1;\n continue;\n }\n\n if (char === \"{\") {\n braceDepth += 1;\n index += 1;\n continue;\n }\n\n if (char === \"}\") {\n if (parenDepth === 0 && bracketDepth === 0 && braceDepth === 0) {\n statementEnd = index;\n break;\n }\n\n braceDepth = Math.max(0, braceDepth - 1);\n index += 1;\n continue;\n }\n\n if (\n char === \";\" &&\n parenDepth === 0 &&\n bracketDepth === 0 &&\n braceDepth === 0\n ) {\n statementEnd = index + 1;\n break;\n }\n\n index += 1;\n }\n\n const hasSemicolon = statementEnd > valueStart && sourceText[statementEnd - 1] === \";\";\n const expressionSegment = sourceText.slice(\n valueStart,\n hasSemicolon ? statementEnd - 1 : statementEnd,\n );\n const statementBody = sourceText.slice(valueStart, statementEnd);\n const expressionText = trimTrailingWhitespaceAndComments(expressionSegment);\n const trailingText = statementBody.slice(expressionSegment.length);\n\n replacements.push({\n start,\n end: statementEnd,\n originalName: `static ${macroName}`,\n replacement:\n strategy === \"editor\"\n ? `${encodeEditorStaticHoistAssignment(macroName)}${statementBody}`\n : `__litsx_static_${macroName}(${expressionText})${trailingText}`,\n });\n\n return statementEnd;\n}\n\nexport function createVirtualLitsxJsxSource(sourceText, options = {}) {\n const strategy = options.strategy === \"editor\" ? \"editor\" : \"compiler\";\n const includeSourceMap = options.sourceMap === true;\n const encodeAttributeName =\n strategy === \"editor\"\n ? encodeEditorVirtualAttributeName\n : encodeVirtualAttributeName;\n const encodeMacroName =\n strategy === \"editor\"\n ? encodeEditorStaticHoistName\n : (_originalName, macroName) => `__litsx_static_${macroName}`;\n\n if (!sourceText || typeof sourceText !== \"string\") {\n return {\n code: sourceText,\n map: null,\n replacements: [],\n };\n }\n\n if (strategy === \"compiler\" && sourceText.includes(\"__litsx_\")) {\n return {\n code: sourceText,\n map: null,\n replacements: [],\n collision: true,\n };\n }\n\n if (!looksLikeLitsxJsx(sourceText)) {\n return {\n code: sourceText,\n map: null,\n replacements: [],\n };\n }\n\n const replacements = [];\n let index = 0;\n let braceDepth = 0;\n const blockStack = [];\n let pendingClassBody = false;\n\n while (index < sourceText.length) {\n const char = sourceText[index];\n const next = sourceText[index + 1];\n\n if (char === \"'\" || char === \"\\\"\") {\n index = scanQuotedString(sourceText, index, char);\n continue;\n }\n\n if (char === \"`\") {\n index = scanTemplateLiteral(sourceText, index);\n continue;\n }\n\n if (char === \"/\" && next === \"/\") {\n index = scanLineComment(sourceText, index);\n continue;\n }\n\n if (char === \"/\" && next === \"*\") {\n index = scanBlockComment(sourceText, index);\n continue;\n }\n\n if (char === \"<\" && isLikelyJsxTagStart(sourceText, index)) {\n index = scanJsxElement(sourceText, index, replacements, encodeAttributeName);\n continue;\n }\n\n if (char === \"^\" && isLikelyStaticMacroStart(sourceText, index)) {\n index = scanStaticMacro(sourceText, index, replacements, encodeMacroName);\n continue;\n }\n\n if (\n char === \"s\" &&\n blockStack[blockStack.length - 1] !== \"class\" &&\n isLikelyStaticHoistAssignmentStart(sourceText, index)\n ) {\n index = scanStaticHoistAssignment(sourceText, index, replacements, strategy);\n continue;\n }\n\n if (isIdentifierStartChar(char)) {\n const wordStart = index;\n index += 1;\n while (index < sourceText.length && isIdentifierChar(sourceText[index])) {\n index += 1;\n }\n\n const word = sourceText.slice(wordStart, index);\n if (word === \"class\") {\n let lookahead = index;\n while (lookahead < sourceText.length && isWhitespace(sourceText[lookahead])) {\n lookahead += 1;\n }\n\n pendingClassBody = sourceText[lookahead] !== \":\";\n }\n\n continue;\n }\n\n if (char === \"{\") {\n braceDepth += 1;\n blockStack.push(pendingClassBody ? \"class\" : \"block\");\n pendingClassBody = false;\n index += 1;\n continue;\n }\n\n if (char === \"}\") {\n braceDepth = Math.max(0, braceDepth - 1);\n blockStack.pop();\n pendingClassBody = false;\n index += 1;\n continue;\n }\n\n if (char === \";\" || char === \"=\") {\n pendingClassBody = false;\n }\n\n index += 1;\n }\n\n if (!replacements.length) {\n return {\n code: sourceText,\n map: null,\n replacements: [],\n };\n }\n\n let lastIndex = 0;\n let transformed = \"\";\n\n for (const replacement of replacements) {\n transformed += sourceText.slice(lastIndex, replacement.start);\n transformed += replacement.replacement;\n lastIndex = replacement.end;\n }\n\n transformed += sourceText.slice(lastIndex);\n\n return {\n code: transformed,\n map: includeSourceMap\n ? createVirtualLitsxJsxSourceMap(sourceText, replacements, {\n sourceFileName: options.sourceFileName,\n })\n : null,\n replacements,\n };\n}\n\nexport function createVirtualLitsxJsxSourceMap(\n sourceText,\n replacements = [],\n options = {}\n) {\n const editable = new MagicString(sourceText);\n applyVirtualAttributeReplacements(editable, replacements);\n\n return editable.generateMap({\n hires: true,\n source: options.sourceFileName,\n includeContent: true,\n });\n}\n\nfunction findReplacementByVirtualPosition(position, replacements) {\n let originalCursor = 0;\n let virtualCursor = 0;\n\n for (const replacement of replacements) {\n const untouchedLength = replacement.start - originalCursor;\n const replacementVirtualStart = virtualCursor + untouchedLength;\n const replacementVirtualEnd =\n replacementVirtualStart + replacement.replacement.length;\n\n if (position >= replacementVirtualStart && position < replacementVirtualEnd) {\n return {\n replacement,\n virtualStart: replacementVirtualStart,\n virtualEnd: replacementVirtualEnd,\n };\n }\n\n originalCursor = replacement.end;\n virtualCursor = replacementVirtualEnd;\n }\n\n return null;\n}\n\nexport function mapOriginalPositionToVirtual(position, replacements = []) {\n if (!replacements.length) {\n return position;\n }\n\n let offset = 0;\n\n for (const replacement of replacements) {\n if (position < replacement.start) {\n break;\n }\n\n const originalLength = replacement.end - replacement.start;\n const replacementLength = replacement.replacement.length;\n\n if (position < replacement.end) {\n return replacement.start + offset;\n }\n\n offset += replacementLength - originalLength;\n }\n\n return position + offset;\n}\n\nexport function remapTextSpanToOriginal(span, replacements = []) {\n if (!span || !replacements.length) {\n return span;\n }\n\n const startMapping = findReplacementByVirtualPosition(span.start, replacements);\n if (startMapping) {\n return {\n start: startMapping.replacement.start,\n length: startMapping.replacement.end - startMapping.replacement.start,\n };\n }\n\n let originalStart = span.start;\n let originalEnd = span.start + span.length;\n\n for (const replacement of replacements) {\n const originalLength = replacement.end - replacement.start;\n const replacementLength = replacement.replacement.length;\n const delta = originalLength - replacementLength;\n const virtualStart = mapOriginalPositionToVirtual(replacement.start, replacements);\n const virtualEnd = virtualStart + replacementLength;\n\n if (virtualEnd <= span.start) {\n originalStart += delta;\n originalEnd += delta;\n continue;\n }\n\n if (virtualStart < span.start) {\n originalStart = replacement.start;\n }\n\n if (virtualStart < span.start + span.length) {\n originalEnd += delta;\n }\n }\n\n return {\n start: originalStart,\n length: Math.max(0, originalEnd - originalStart),\n };\n}\n\nexport function remapVirtualPositionToOriginal(position, replacements = []) {\n const span = remapTextSpanToOriginal({ start: position, length: 0 }, replacements);\n return span.start;\n}\n\nexport const mapVirtualPositionToOriginal = remapVirtualPositionToOriginal;\n\nexport function applyVirtualAttributeReplacements(editable, replacements = []) {\n for (const replacement of replacements) {\n editable.overwrite(replacement.start, replacement.end, replacement.replacement);\n }\n}\n\nexport {\n isReservedVirtualAttributeName,\n};\n","import jsxSyntaxPlugin from \"@babel/plugin-syntax-jsx\";\nimport { decodeVirtualAttributeName } from \"@litsx/jsx-authoring\";\nimport { importedBindingNeedsRendererContext } from \"./transform-litsx-element-candidates.js\";\n\nlet t;\n\nfunction createHostReferenceExpression() {\n return t.conditionalExpression(\n t.binaryExpression(\n \"===\",\n t.unaryExpression(\"typeof\", t.thisExpression(), true),\n t.stringLiteral(\"undefined\")\n ),\n t.nullLiteral(),\n t.thisExpression()\n );\n}\n\nfunction stringifyJsxName(nameNode) {\n if (t.isJSXIdentifier(nameNode)) {\n return nameNode.name;\n }\n\n if (t.isJSXMemberExpression(nameNode)) {\n return `${stringifyJsxName(nameNode.object)}.${nameNode.property.name}`;\n }\n\n if (t.isJSXNamespacedName(nameNode)) {\n return `${nameNode.namespace.name}:${nameNode.name.name}`;\n }\n\n return \"unknown\";\n}\n\nfunction getTag(node) {\n const name = stringifyJsxName(node.name);\n const isCapitalized =\n name.charAt(0) === name.charAt(0).toUpperCase() &&\n name.charAt(0) !== name.charAt(0).toLowerCase();\n const isComponent =\n node.name.type !== \"JSXIdentifier\" || isCapitalized || name.includes(\"-\");\n return { name, isComponent };\n}\n\nfunction unwrapExpression(node) {\n let current = node;\n\n while (current) {\n if (t.isParenthesizedExpression?.(current)) {\n current = current.expression;\n continue;\n }\n\n if (\n t.isTSAsExpression?.(current) ||\n t.isTSSatisfiesExpression?.(current) ||\n t.isTypeCastExpression?.(current) ||\n t.isTSNonNullExpression?.(current)\n ) {\n current = current.expression;\n continue;\n }\n\n break;\n }\n\n return current;\n}\n\nfunction getFunctionNodeFromBinding(binding) {\n if (!binding?.path) {\n return null;\n }\n\n if (binding.path.isFunctionDeclaration()) {\n return binding.path.node;\n }\n\n if (binding.path.isVariableDeclarator()) {\n const init = unwrapExpression(binding.path.node.init);\n if (t.isArrowFunctionExpression(init) || t.isFunctionExpression(init)) {\n return init;\n }\n }\n\n return null;\n}\n\nfunction mergeBooleanResults(results) {\n return results.some(Boolean);\n}\n\nfunction jsxTreeNeedsRendererContext(node, scope, seenBindings = new Set()) {\n if (!node) {\n return false;\n }\n\n if (t.isJSXFragment(node)) {\n return mergeBooleanResults(\n node.children.map((child) => jsxChildNeedsRendererContext(child, scope, seenBindings))\n );\n }\n\n if (!t.isJSXElement(node)) {\n return false;\n }\n\n const { isComponent } = getTag(node.openingElement);\n if (isComponent) {\n return true;\n }\n\n const childNeedsContext = mergeBooleanResults(\n node.children.map((child) => jsxChildNeedsRendererContext(child, scope, seenBindings))\n );\n\n if (childNeedsContext) {\n return true;\n }\n\n return mergeBooleanResults(\n node.openingElement.attributes.map((attr) => {\n if (!t.isJSXAttribute(attr) || !t.isJSXExpressionContainer(attr.value)) {\n return false;\n }\n return expressionNeedsRendererContext(attr.value.expression, scope, seenBindings);\n })\n );\n}\n\nfunction jsxChildNeedsRendererContext(child, scope, seenBindings) {\n if (t.isJSXElement(child) || t.isJSXFragment(child)) {\n return jsxTreeNeedsRendererContext(child, scope, seenBindings);\n }\n\n if (t.isJSXExpressionContainer(child)) {\n return expressionNeedsRendererContext(child.expression, scope, seenBindings);\n }\n\n return false;\n}\n\nfunction functionBodyNeedsRendererContext(body, scope, seenBindings = new Set()) {\n if (!body) {\n return false;\n }\n\n if (t.isBlockStatement(body)) {\n return mergeBooleanResults(\n body.body.map((statement) => statementNeedsRendererContext(statement, scope, seenBindings))\n );\n }\n\n return expressionNeedsRendererContext(body, scope, seenBindings);\n}\n\nfunction statementNeedsRendererContext(statement, scope, seenBindings) {\n if (t.isReturnStatement(statement)) {\n return expressionNeedsRendererContext(statement.argument, scope, seenBindings);\n }\n\n if (t.isIfStatement(statement)) {\n return mergeBooleanResults([\n statementNeedsRendererContext(statement.consequent, scope, seenBindings),\n statement.alternate\n ? statementNeedsRendererContext(statement.alternate, scope, seenBindings)\n : false,\n ]);\n }\n\n if (t.isBlockStatement(statement)) {\n return functionBodyNeedsRendererContext(statement, scope, seenBindings);\n }\n\n return false;\n}\n\nfunction callExpressionNeedsRendererContext(node, scope, seenBindings) {\n const callee = unwrapExpression(node.callee);\n if (!t.isIdentifier(callee)) {\n return false;\n }\n\n const binding = scope.getBinding(callee.name);\n const functionNode = getFunctionNodeFromBinding(binding);\n if (!functionNode) {\n return false;\n }\n\n if (seenBindings.has(binding)) {\n return false;\n }\n\n const nextSeenBindings = new Set(seenBindings);\n nextSeenBindings.add(binding);\n return functionBodyNeedsRendererContext(functionNode.body, binding.path.scope, nextSeenBindings);\n}\n\nfunction expressionNeedsRendererContext(node, scope, seenBindings = new Set()) {\n const expression = unwrapExpression(node);\n if (!expression) {\n return false;\n }\n\n if (t.isJSXElement(expression) || t.isJSXFragment(expression)) {\n return jsxTreeNeedsRendererContext(expression, scope, seenBindings);\n }\n\n if (t.isConditionalExpression(expression)) {\n return mergeBooleanResults([\n expressionNeedsRendererContext(expression.consequent, scope, seenBindings),\n expressionNeedsRendererContext(expression.alternate, scope, seenBindings),\n ]);\n }\n\n if (t.isLogicalExpression(expression)) {\n return mergeBooleanResults([\n expressionNeedsRendererContext(expression.left, scope, seenBindings),\n expressionNeedsRendererContext(expression.right, scope, seenBindings),\n ]);\n }\n\n if (t.isSequenceExpression(expression)) {\n return mergeBooleanResults(\n expression.expressions.map((part) => expressionNeedsRendererContext(part, scope, seenBindings))\n );\n }\n\n if (t.isArrayExpression(expression)) {\n return mergeBooleanResults(\n expression.elements.filter(Boolean).map((part) => expressionNeedsRendererContext(part, scope, seenBindings))\n );\n }\n\n if (t.isCallExpression(expression)) {\n return callExpressionNeedsRendererContext(expression, scope, seenBindings);\n }\n\n return false;\n}\n\nfunction isBindableFunctionReference(expressionPath, options = {}) {\n const expression = unwrapExpression(expressionPath.node);\n if (\n t.isArrowFunctionExpression(expression) ||\n t.isFunctionExpression(expression)\n ) {\n return functionBodyNeedsRendererContext(expression.body, expressionPath.scope);\n }\n\n if (t.isIdentifier(expression)) {\n const binding = expressionPath.scope.getBinding(expression.name);\n const functionNode = getFunctionNodeFromBinding(binding);\n if (!functionNode) {\n const programPath = expressionPath.findParent((entry) => entry.isProgram?.());\n return importedBindingNeedsRendererContext(\n programPath,\n expression.name,\n options\n );\n }\n return functionBodyNeedsRendererContext(functionNode.body, binding.path.scope, new Set([binding]));\n }\n\n return false;\n}\n\nfunction shouldBindRendererContext(attributePath, rawName, expressionPath, options = {}) {\n if (typeof rawName !== \"string\" || rawName[0] !== \".\") {\n return false;\n }\n\n const openingElement = attributePath.parentPath;\n if (!openingElement?.isJSXOpeningElement()) {\n return false;\n }\n\n const { isComponent } = getTag(openingElement.node);\n if (!isComponent) {\n return false;\n }\n\n return isBindableFunctionReference(expressionPath, options);\n}\n\nfunction ensureRendererBindingImport(programPath) {\n const bodyPaths = programPath.get(\"body\");\n const runtimeImports = bodyPaths.filter(\n (path) =>\n path.isImportDeclaration() &&\n path.node.source.value === \"@litsx/litsx/internal/runtime-render-context\"\n );\n\n const importSpecifier = t.importSpecifier(\n t.identifier(\"bindRendererContext\"),\n t.identifier(\"bindRendererContext\")\n );\n\n for (const importPath of runtimeImports) {\n const { specifiers } = importPath.node;\n const hasImport = specifiers.some(\n (specifier) =>\n t.isImportSpecifier(specifier) &&\n t.isIdentifier(specifier.imported, { name: \"bindRendererContext\" })\n );\n\n if (hasImport) {\n return;\n }\n\n specifiers.push(importSpecifier);\n return;\n }\n\n programPath.unshiftContainer(\"body\", t.importDeclaration(\n [importSpecifier],\n t.stringLiteral(\"@litsx/litsx/internal/runtime-render-context\")\n ));\n}\n\nexport default function transformLitsxRendererProps(api) {\n api.assertVersion?.(7);\n t = api.types;\n\n return {\n name: \"transform-litsx-renderer-props\",\n inherits: jsxSyntaxPlugin.default || jsxSyntaxPlugin,\n visitor: {\n Program: {\n enter(_, state) {\n state.__litsxNeedsRendererBindingImport = false;\n },\n exit(programPath, state) {\n if (state.__litsxNeedsRendererBindingImport) {\n ensureRendererBindingImport(programPath);\n }\n },\n },\n JSXAttribute(path, state) {\n const { node } = path;\n if (node.value?.type !== \"JSXExpressionContainer\") {\n return;\n }\n\n const rawName = decodeVirtualAttributeName(node.name.name) ?? node.name.name;\n const expressionPath = path.get(\"value.expression\");\n if (!expressionPath?.node) {\n return;\n }\n\n if (!shouldBindRendererContext(path, rawName, expressionPath, {\n filename: state.file?.opts?.filename || \"\",\n })) {\n return;\n }\n\n state.__litsxNeedsRendererBindingImport = true;\n node.value.expression = t.callExpression(\n t.identifier(\"bindRendererContext\"),\n [\n createHostReferenceExpression(),\n expressionPath.node,\n ]\n );\n },\n },\n };\n}\n"],"names":["importedBindingNeedsRendererContext"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transform-litsx-renderer-props.cjs","sources":["../../../authoring/src/index.js","../../src/internal/transform-litsx-renderer-props.js"],"sourcesContent":["import MagicString from \"magic-string\";\n\nconst PREFIX_TO_KIND = {\n \"@\": \"event\",\n \".\": \"prop\",\n \"?\": \"bool\",\n};\n\nconst KIND_TO_PREFIX = {\n event: \"@\",\n prop: \".\",\n bool: \"?\",\n};\n\nconst ATTR_NAME_CHAR = /[\\w:-]/;\nconst TAG_NAME_START_CHAR = /[A-Za-z]/;\nconst TAG_NAME_CHAR = /[\\w:.-]/;\nconst MACRO_NAME_START_CHAR = /[A-Za-z$_]/;\nconst MACRO_NAME_CHAR = /[A-Za-z0-9$_]/;\n\nfunction isWhitespace(char) {\n return char === \" \" || char === \"\\t\" || char === \"\\n\" || char === \"\\r\";\n}\n\nfunction isReservedVirtualAttributeName(name) {\n return /^__litsx_(event|prop|bool)_/.test(name);\n}\n\nfunction sanitizeIdentifierTailChar(char) {\n return /[A-Za-z0-9$_]/.test(char) ? char : \"_\";\n}\n\nfunction isIdentifierStartChar(char) {\n return /[A-Za-z$_]/.test(char);\n}\n\nfunction isIdentifierChar(char) {\n return /[A-Za-z0-9$_]/.test(char);\n}\n\nfunction encodeEditorVirtualAttributeName(name) {\n const prefix = name[0];\n const localName = name.slice(1);\n const encodedPrefix = prefix === \"@\" ? \"e\" : prefix === \".\" ? \"p\" : \"b\";\n return `${encodedPrefix}${Array.from(localName, sanitizeIdentifierTailChar).join(\"\")}`;\n}\n\nfunction encodeEditorStaticHoistAssignment(name) {\n return `const $${name} = `;\n}\n\nfunction scanQuotedString(sourceText, start, quote) {\n let index = start + 1;\n\n while (index < sourceText.length) {\n const char = sourceText[index];\n if (char === \"\\\\\") {\n index += 2;\n continue;\n }\n if (char === quote) {\n return index + 1;\n }\n index += 1;\n }\n\n return index;\n}\n\nfunction scanLineComment(sourceText, start) {\n let index = start + 2;\n while (index < sourceText.length && sourceText[index] !== \"\\n\") {\n index += 1;\n }\n return index;\n}\n\nfunction scanBlockComment(sourceText, start) {\n let index = start + 2;\n while (index < sourceText.length) {\n if (sourceText[index] === \"*\" && sourceText[index + 1] === \"/\") {\n return index + 2;\n }\n index += 1;\n }\n return index;\n}\n\nfunction scanTemplateLiteral(sourceText, start) {\n let index = start + 1;\n\n while (index < sourceText.length) {\n const char = sourceText[index];\n if (char === \"\\\\\") {\n index += 2;\n continue;\n }\n if (char === \"`\") {\n return index + 1;\n }\n if (char === \"$\" && sourceText[index + 1] === \"{\") {\n index = scanBalancedBraces(sourceText, index + 1);\n continue;\n }\n index += 1;\n }\n\n return index;\n}\n\nfunction scanBalancedBraces(sourceText, start) {\n let depth = 0;\n let index = start;\n\n while (index < sourceText.length) {\n const char = sourceText[index];\n const next = sourceText[index + 1];\n\n if (char === \"'\" || char === \"\\\"\") {\n index = scanQuotedString(sourceText, index, char);\n continue;\n }\n\n if (char === \"`\") {\n index = scanTemplateLiteral(sourceText, index);\n continue;\n }\n\n if (char === \"/\" && next === \"/\") {\n index = scanLineComment(sourceText, index);\n continue;\n }\n\n if (char === \"/\" && next === \"*\") {\n index = scanBlockComment(sourceText, index);\n continue;\n }\n\n if (char === \"{\") {\n depth += 1;\n index += 1;\n continue;\n }\n\n if (char === \"}\") {\n depth -= 1;\n index += 1;\n if (depth <= 0) {\n return index;\n }\n continue;\n }\n\n index += 1;\n }\n\n return index;\n}\n\nfunction scanBalancedBracesWithJsx(sourceText, start, replacements, encodeAttributeName) {\n let depth = 0;\n let index = start;\n\n while (index < sourceText.length) {\n const char = sourceText[index];\n const next = sourceText[index + 1];\n\n if (char === \"'\" || char === \"\\\"\") {\n index = scanQuotedString(sourceText, index, char);\n continue;\n }\n\n if (char === \"`\") {\n index = scanTemplateLiteral(sourceText, index);\n continue;\n }\n\n if (char === \"/\" && next === \"/\") {\n index = scanLineComment(sourceText, index);\n continue;\n }\n\n if (char === \"/\" && next === \"*\") {\n index = scanBlockComment(sourceText, index);\n continue;\n }\n\n if (char === \"<\" && isLikelyJsxTagStart(sourceText, index)) {\n index = scanJsxElement(sourceText, index, replacements, encodeAttributeName);\n continue;\n }\n\n if (char === \"{\") {\n depth += 1;\n index += 1;\n continue;\n }\n\n if (char === \"}\") {\n depth -= 1;\n index += 1;\n if (depth <= 0) {\n return index;\n }\n continue;\n }\n\n index += 1;\n }\n\n return index;\n}\n\nfunction trimTrailingWhitespaceAndComments(sourceText) {\n let text = sourceText;\n let changed = true;\n\n while (changed) {\n changed = false;\n\n const trimmedWhitespace = text.replace(/\\s+$/u, \"\");\n if (trimmedWhitespace !== text) {\n text = trimmedWhitespace;\n changed = true;\n }\n\n const trimmedLineComment = text.replace(/\\/\\/[^\\n\\r]*$/u, \"\");\n if (trimmedLineComment !== text) {\n text = trimmedLineComment;\n changed = true;\n continue;\n }\n\n const trimmedBlockComment = text.replace(/\\/\\*[\\s\\S]*?\\*\\/$/u, \"\");\n if (trimmedBlockComment !== text) {\n text = trimmedBlockComment;\n changed = true;\n }\n }\n\n return text;\n}\n\nfunction previousSignificantIndex(sourceText, start) {\n let index = start - 1;\n while (index >= 0 && isWhitespace(sourceText[index])) {\n index -= 1;\n }\n return index;\n}\n\nfunction readPreviousWord(sourceText, endIndex) {\n let index = endIndex;\n while (index >= 0 && /[A-Za-z]/.test(sourceText[index])) {\n index -= 1;\n }\n return sourceText.slice(index + 1, endIndex + 1);\n}\n\nfunction isLikelyJsxTagStart(sourceText, index) {\n const next = sourceText[index + 1];\n if (!TAG_NAME_START_CHAR.test(next || \"\")) {\n return false;\n }\n\n const previousIndex = previousSignificantIndex(sourceText, index);\n if (previousIndex < 0) {\n return true;\n }\n\n const previousChar = sourceText[previousIndex];\n if (\"=({[,!?:;>&|\".includes(previousChar)) {\n return true;\n }\n\n const previousWord = readPreviousWord(sourceText, previousIndex);\n return [\"return\", \"case\", \"throw\", \"yield\", \"else\"].includes(previousWord);\n}\n\nfunction readJsxTagName(sourceText, start) {\n let index = start + 1;\n const isClosing = sourceText[index] === \"/\";\n\n if (isClosing) {\n index += 1;\n }\n\n if (!TAG_NAME_START_CHAR.test(sourceText[index] || \"\")) {\n return null;\n }\n\n const nameStart = index;\n\n while (index < sourceText.length && TAG_NAME_CHAR.test(sourceText[index])) {\n index += 1;\n }\n\n return {\n name: sourceText.slice(nameStart, index),\n isClosing,\n end: index,\n };\n}\n\nfunction scanJsxTag(sourceText, start, replacements, encodeAttributeName) {\n const tag = readJsxTagName(sourceText, start);\n\n if (!tag) {\n return {\n end: start + 1,\n tagName: null,\n isClosing: false,\n selfClosing: false,\n };\n }\n\n let index = tag.end;\n\n if (tag.isClosing) {\n while (index < sourceText.length) {\n if (sourceText[index] === \">\") {\n return {\n end: index + 1,\n tagName: tag.name,\n isClosing: true,\n selfClosing: false,\n };\n }\n\n index += 1;\n }\n\n return {\n end: index,\n tagName: tag.name,\n isClosing: true,\n selfClosing: false,\n };\n }\n\n function scanAttributeValue(valueStart) {\n let valueIndex = valueStart;\n\n while (valueIndex < sourceText.length && isWhitespace(sourceText[valueIndex])) {\n valueIndex += 1;\n }\n\n if (valueIndex >= sourceText.length) {\n return valueIndex;\n }\n\n const valueChar = sourceText[valueIndex];\n if (valueChar === \"{\") {\n return scanBalancedBracesWithJsx(\n sourceText,\n valueIndex,\n replacements,\n encodeAttributeName\n );\n }\n\n if (valueChar === \"'\" || valueChar === \"\\\"\") {\n return scanQuotedString(sourceText, valueIndex, valueChar);\n }\n\n while (\n valueIndex < sourceText.length &&\n !isWhitespace(sourceText[valueIndex]) &&\n sourceText[valueIndex] !== \">\" &&\n !(sourceText[valueIndex] === \"/\" && sourceText[valueIndex + 1] === \">\")\n ) {\n valueIndex += 1;\n }\n\n return valueIndex;\n }\n\n while (index < sourceText.length) {\n const char = sourceText[index];\n const next = sourceText[index + 1];\n\n if (char === \">\") {\n return {\n end: index + 1,\n tagName: tag.name,\n isClosing: false,\n selfClosing: false,\n };\n }\n\n if (char === \"/\" && next === \">\") {\n return {\n end: index + 2,\n tagName: tag.name,\n isClosing: false,\n selfClosing: true,\n };\n }\n\n if (isWhitespace(char)) {\n index += 1;\n continue;\n }\n\n if (char === \"{\") {\n index = scanBalancedBracesWithJsx(\n sourceText,\n index,\n replacements,\n encodeAttributeName\n );\n continue;\n }\n\n if (char === \"'\" || char === \"\\\"\") {\n index = scanQuotedString(sourceText, index, char);\n continue;\n }\n\n if (Object.hasOwn(PREFIX_TO_KIND, char) && ATTR_NAME_CHAR.test(next || \"\")) {\n const attrStart = index;\n index += 1;\n\n while (index < sourceText.length && ATTR_NAME_CHAR.test(sourceText[index])) {\n index += 1;\n }\n\n const originalName = sourceText.slice(attrStart, index);\n replacements.push({\n start: attrStart,\n end: index,\n originalName,\n replacement: encodeAttributeName(originalName),\n });\n\n while (index < sourceText.length && isWhitespace(sourceText[index])) {\n index += 1;\n }\n if (sourceText[index] === \"=\") {\n index = scanAttributeValue(index + 1);\n }\n continue;\n }\n\n const attrStart = index;\n while (\n index < sourceText.length &&\n !isWhitespace(sourceText[index]) &&\n sourceText[index] !== \"=\" &&\n sourceText[index] !== \">\" &&\n !(sourceText[index] === \"/\" && sourceText[index + 1] === \">\")\n ) {\n index += 1;\n }\n\n if (index === attrStart) {\n index += 1;\n continue;\n }\n\n while (index < sourceText.length && isWhitespace(sourceText[index])) {\n index += 1;\n }\n if (sourceText[index] === \"=\") {\n index = scanAttributeValue(index + 1);\n }\n }\n\n return {\n end: index,\n tagName: tag.name,\n isClosing: false,\n selfClosing: false,\n };\n}\n\nfunction scanJsxElement(sourceText, start, replacements, encodeAttributeName) {\n const openingTag = scanJsxTag(sourceText, start, replacements, encodeAttributeName);\n\n if (\n openingTag.isClosing ||\n openingTag.selfClosing ||\n !openingTag.tagName\n ) {\n return openingTag.end;\n }\n\n let index = openingTag.end;\n\n while (index < sourceText.length) {\n const char = sourceText[index];\n const next = sourceText[index + 1];\n\n if (char === \"'\" || char === \"\\\"\") {\n index = scanQuotedString(sourceText, index, char);\n continue;\n }\n\n if (char === \"`\") {\n index = scanTemplateLiteral(sourceText, index);\n continue;\n }\n\n if (char === \"/\" && next === \"/\") {\n index = scanLineComment(sourceText, index);\n continue;\n }\n\n if (char === \"/\" && next === \"*\") {\n index = scanBlockComment(sourceText, index);\n continue;\n }\n\n if (char === \"{\") {\n index = scanBalancedBracesWithJsx(\n sourceText,\n index,\n replacements,\n encodeAttributeName\n );\n continue;\n }\n\n if (char === \"<\") {\n const nestedTag = readJsxTagName(sourceText, index);\n\n if (!nestedTag) {\n index += 1;\n continue;\n }\n\n if (nestedTag.isClosing && nestedTag.name === openingTag.tagName) {\n return scanJsxTag(sourceText, index, replacements, encodeAttributeName).end;\n }\n\n if (!nestedTag.isClosing) {\n index = scanJsxElement(sourceText, index, replacements, encodeAttributeName);\n continue;\n }\n }\n\n index += 1;\n }\n\n return index;\n}\n\nexport function encodeVirtualAttributeName(name) {\n const prefix = name[0];\n const localName = name.slice(1);\n const kind = PREFIX_TO_KIND[prefix];\n\n if (!kind) {\n return name;\n }\n\n return `__litsx_${kind}_${localName}`;\n}\n\nexport function decodeVirtualAttributeName(name) {\n const match = /^__litsx_(event|prop|bool)_(.+)$/.exec(name);\n\n if (!match) {\n return null;\n }\n\n const [, kind, localName] = match;\n return `${KIND_TO_PREFIX[kind]}${localName}`;\n}\n\nexport function decodeVirtualStaticHoistName(name) {\n const match = /^__litsx_static_([A-Za-z$_][A-Za-z0-9$_]*)$/.exec(name);\n\n if (!match) {\n return null;\n }\n\n return `static ${match[1]}`;\n}\n\nexport function remapVirtualText(text) {\n if (typeof text !== \"string\") {\n return text;\n }\n\n return text\n .replace(/__litsx_(event|prop|bool)_[\\w:-]+/g, (name) => (\n decodeVirtualAttributeName(name) ?? name\n ))\n .replace(/__litsx_static_[A-Za-z$_][A-Za-z0-9$_]*/g, (name) => (\n decodeVirtualStaticHoistName(name) ?? name\n ));\n}\n\nexport function looksLikeLitsxJsx(sourceText) {\n return (\n /<[\\w.-]+[^>]*\\s(?:[@.?][\\w:-]+)/m.test(sourceText) ||\n /(?:^|[;{}]\\s*)static\\s+[A-Za-z$_][A-Za-z0-9$_]*\\s*=/m.test(sourceText) ||\n /^\\s*static\\s+[A-Za-z$_][A-Za-z0-9$_]*\\s*=/m.test(sourceText)\n );\n}\n\nfunction isLikelyStaticHoistAssignmentStart(sourceText, index) {\n if (sourceText.slice(index, index + 6) !== \"static\") {\n return false;\n }\n\n const previousChar = sourceText[index - 1];\n if (previousChar && /[A-Za-z0-9$_]/.test(previousChar)) {\n return false;\n }\n\n const next = sourceText[index + 6];\n if (!isWhitespace(next || \"\")) {\n return false;\n }\n\n const prefix = trimTrailingWhitespaceAndComments(sourceText.slice(0, index));\n if (!prefix) {\n return true;\n }\n\n const previousSignificantChar = prefix[prefix.length - 1];\n return (\n previousSignificantChar === \";\" ||\n previousSignificantChar === \"{\" ||\n previousSignificantChar === \"}\"\n );\n}\n\nfunction readStaticHoistAssignment(sourceText, start) {\n let index = start + 6;\n\n while (index < sourceText.length && isWhitespace(sourceText[index])) {\n index += 1;\n }\n\n const nameStart = index;\n if (!MACRO_NAME_START_CHAR.test(sourceText[index] || \"\")) {\n return null;\n }\n\n index += 1;\n while (index < sourceText.length && MACRO_NAME_CHAR.test(sourceText[index])) {\n index += 1;\n }\n\n const macroName = sourceText.slice(nameStart, index);\n\n while (index < sourceText.length && isWhitespace(sourceText[index])) {\n index += 1;\n }\n\n if (sourceText[index] !== \"=\") {\n return null;\n }\n\n index += 1;\n while (index < sourceText.length && isWhitespace(sourceText[index])) {\n index += 1;\n }\n\n return {\n macroName,\n valueStart: index,\n };\n}\n\nfunction scanStaticHoistAssignment(sourceText, start, replacements, strategy) {\n const assignment = readStaticHoistAssignment(sourceText, start);\n if (!assignment) {\n return start + 1;\n }\n\n const { macroName, valueStart } = assignment;\n\n let index = valueStart;\n let parenDepth = 0;\n let bracketDepth = 0;\n let braceDepth = 0;\n let statementEnd = sourceText.length;\n\n while (index < sourceText.length) {\n const char = sourceText[index];\n const next = sourceText[index + 1];\n\n if (char === \"'\" || char === \"\\\"\") {\n index = scanQuotedString(sourceText, index, char);\n continue;\n }\n\n if (char === \"`\") {\n index = scanTemplateLiteral(sourceText, index);\n continue;\n }\n\n if (char === \"/\" && next === \"/\") {\n index = scanLineComment(sourceText, index);\n continue;\n }\n\n if (char === \"/\" && next === \"*\") {\n index = scanBlockComment(sourceText, index);\n continue;\n }\n\n if (char === \"(\") {\n parenDepth += 1;\n index += 1;\n continue;\n }\n\n if (char === \")\") {\n parenDepth = Math.max(0, parenDepth - 1);\n index += 1;\n continue;\n }\n\n if (char === \"[\") {\n bracketDepth += 1;\n index += 1;\n continue;\n }\n\n if (char === \"]\") {\n bracketDepth = Math.max(0, bracketDepth - 1);\n index += 1;\n continue;\n }\n\n if (char === \"{\") {\n braceDepth += 1;\n index += 1;\n continue;\n }\n\n if (char === \"}\") {\n if (parenDepth === 0 && bracketDepth === 0 && braceDepth === 0) {\n statementEnd = index;\n break;\n }\n\n braceDepth = Math.max(0, braceDepth - 1);\n index += 1;\n continue;\n }\n\n if (\n char === \";\" &&\n parenDepth === 0 &&\n bracketDepth === 0 &&\n braceDepth === 0\n ) {\n statementEnd = index + 1;\n break;\n }\n\n index += 1;\n }\n\n const hasSemicolon = statementEnd > valueStart && sourceText[statementEnd - 1] === \";\";\n const expressionSegment = sourceText.slice(\n valueStart,\n hasSemicolon ? statementEnd - 1 : statementEnd,\n );\n const statementBody = sourceText.slice(valueStart, statementEnd);\n const expressionText = trimTrailingWhitespaceAndComments(expressionSegment);\n const trailingText = statementBody.slice(expressionSegment.length);\n\n replacements.push({\n start,\n end: statementEnd,\n originalName: `static ${macroName}`,\n replacement:\n strategy === \"editor\"\n ? `${encodeEditorStaticHoistAssignment(macroName)}${statementBody}`\n : `__litsx_static_${macroName}(${expressionText})${trailingText}`,\n });\n\n return statementEnd;\n}\n\nexport function createVirtualLitsxJsxSource(sourceText, options = {}) {\n const strategy = options.strategy === \"editor\" ? \"editor\" : \"compiler\";\n const includeSourceMap = options.sourceMap === true;\n const encodeAttributeName =\n strategy === \"editor\"\n ? encodeEditorVirtualAttributeName\n : encodeVirtualAttributeName;\n\n if (!sourceText || typeof sourceText !== \"string\") {\n return {\n code: sourceText,\n map: null,\n replacements: [],\n };\n }\n\n if (strategy === \"compiler\" && sourceText.includes(\"__litsx_\")) {\n return {\n code: sourceText,\n map: null,\n replacements: [],\n collision: true,\n };\n }\n\n if (!looksLikeLitsxJsx(sourceText)) {\n return {\n code: sourceText,\n map: null,\n replacements: [],\n };\n }\n\n const replacements = [];\n let index = 0;\n let braceDepth = 0;\n const blockStack = [];\n let pendingClassBody = false;\n\n while (index < sourceText.length) {\n const char = sourceText[index];\n const next = sourceText[index + 1];\n\n if (char === \"'\" || char === \"\\\"\") {\n index = scanQuotedString(sourceText, index, char);\n continue;\n }\n\n if (char === \"`\") {\n index = scanTemplateLiteral(sourceText, index);\n continue;\n }\n\n if (char === \"/\" && next === \"/\") {\n index = scanLineComment(sourceText, index);\n continue;\n }\n\n if (char === \"/\" && next === \"*\") {\n index = scanBlockComment(sourceText, index);\n continue;\n }\n\n if (char === \"<\" && isLikelyJsxTagStart(sourceText, index)) {\n index = scanJsxElement(sourceText, index, replacements, encodeAttributeName);\n continue;\n }\n\n if (\n char === \"s\" &&\n blockStack[blockStack.length - 1] !== \"class\" &&\n isLikelyStaticHoistAssignmentStart(sourceText, index)\n ) {\n index = scanStaticHoistAssignment(sourceText, index, replacements, strategy);\n continue;\n }\n\n if (isIdentifierStartChar(char)) {\n const wordStart = index;\n index += 1;\n while (index < sourceText.length && isIdentifierChar(sourceText[index])) {\n index += 1;\n }\n\n const word = sourceText.slice(wordStart, index);\n if (word === \"class\") {\n let lookahead = index;\n while (lookahead < sourceText.length && isWhitespace(sourceText[lookahead])) {\n lookahead += 1;\n }\n\n pendingClassBody = sourceText[lookahead] !== \":\";\n }\n\n continue;\n }\n\n if (char === \"{\") {\n braceDepth += 1;\n blockStack.push(pendingClassBody ? \"class\" : \"block\");\n pendingClassBody = false;\n index += 1;\n continue;\n }\n\n if (char === \"}\") {\n braceDepth = Math.max(0, braceDepth - 1);\n blockStack.pop();\n pendingClassBody = false;\n index += 1;\n continue;\n }\n\n if (char === \";\" || char === \"=\") {\n pendingClassBody = false;\n }\n\n index += 1;\n }\n\n if (!replacements.length) {\n return {\n code: sourceText,\n map: null,\n replacements: [],\n };\n }\n\n let lastIndex = 0;\n let transformed = \"\";\n\n for (const replacement of replacements) {\n transformed += sourceText.slice(lastIndex, replacement.start);\n transformed += replacement.replacement;\n lastIndex = replacement.end;\n }\n\n transformed += sourceText.slice(lastIndex);\n\n return {\n code: transformed,\n map: includeSourceMap\n ? createVirtualLitsxJsxSourceMap(sourceText, replacements, {\n sourceFileName: options.sourceFileName,\n })\n : null,\n replacements,\n };\n}\n\nexport function createVirtualLitsxJsxSourceMap(\n sourceText,\n replacements = [],\n options = {}\n) {\n const editable = new MagicString(sourceText);\n applyVirtualAttributeReplacements(editable, replacements);\n\n return editable.generateMap({\n hires: true,\n source: options.sourceFileName,\n includeContent: true,\n });\n}\n\nfunction findReplacementByVirtualPosition(position, replacements) {\n let originalCursor = 0;\n let virtualCursor = 0;\n\n for (const replacement of replacements) {\n const untouchedLength = replacement.start - originalCursor;\n const replacementVirtualStart = virtualCursor + untouchedLength;\n const replacementVirtualEnd =\n replacementVirtualStart + replacement.replacement.length;\n\n if (position >= replacementVirtualStart && position < replacementVirtualEnd) {\n return {\n replacement,\n virtualStart: replacementVirtualStart,\n virtualEnd: replacementVirtualEnd,\n };\n }\n\n originalCursor = replacement.end;\n virtualCursor = replacementVirtualEnd;\n }\n\n return null;\n}\n\nexport function mapOriginalPositionToVirtual(position, replacements = []) {\n if (!replacements.length) {\n return position;\n }\n\n let offset = 0;\n\n for (const replacement of replacements) {\n if (position < replacement.start) {\n break;\n }\n\n const originalLength = replacement.end - replacement.start;\n const replacementLength = replacement.replacement.length;\n\n if (position < replacement.end) {\n return replacement.start + offset;\n }\n\n offset += replacementLength - originalLength;\n }\n\n return position + offset;\n}\n\nexport function remapTextSpanToOriginal(span, replacements = []) {\n if (!span || !replacements.length) {\n return span;\n }\n\n const startMapping = findReplacementByVirtualPosition(span.start, replacements);\n if (startMapping) {\n return {\n start: startMapping.replacement.start,\n length: startMapping.replacement.end - startMapping.replacement.start,\n };\n }\n\n let originalStart = span.start;\n let originalEnd = span.start + span.length;\n\n for (const replacement of replacements) {\n const originalLength = replacement.end - replacement.start;\n const replacementLength = replacement.replacement.length;\n const delta = originalLength - replacementLength;\n const virtualStart = mapOriginalPositionToVirtual(replacement.start, replacements);\n const virtualEnd = virtualStart + replacementLength;\n\n if (virtualEnd <= span.start) {\n originalStart += delta;\n originalEnd += delta;\n continue;\n }\n\n if (virtualStart < span.start) {\n originalStart = replacement.start;\n }\n\n if (virtualStart < span.start + span.length) {\n originalEnd += delta;\n }\n }\n\n return {\n start: originalStart,\n length: Math.max(0, originalEnd - originalStart),\n };\n}\n\nexport function remapVirtualPositionToOriginal(position, replacements = []) {\n const span = remapTextSpanToOriginal({ start: position, length: 0 }, replacements);\n return span.start;\n}\n\nexport const mapVirtualPositionToOriginal = remapVirtualPositionToOriginal;\n\nexport function applyVirtualAttributeReplacements(editable, replacements = []) {\n for (const replacement of replacements) {\n editable.overwrite(replacement.start, replacement.end, replacement.replacement);\n }\n}\n\nexport {\n isReservedVirtualAttributeName,\n};\n","import jsxSyntaxPlugin from \"@babel/plugin-syntax-jsx\";\nimport { decodeVirtualAttributeName } from \"@litsx/authoring\";\nimport { importedBindingNeedsRendererContext } from \"./transform-litsx-element-candidates.js\";\n\nlet t;\n\nfunction createHostReferenceExpression() {\n return t.conditionalExpression(\n t.binaryExpression(\n \"===\",\n t.unaryExpression(\"typeof\", t.thisExpression(), true),\n t.stringLiteral(\"undefined\")\n ),\n t.nullLiteral(),\n t.thisExpression()\n );\n}\n\nfunction stringifyJsxName(nameNode) {\n if (t.isJSXIdentifier(nameNode)) {\n return nameNode.name;\n }\n\n if (t.isJSXMemberExpression(nameNode)) {\n return `${stringifyJsxName(nameNode.object)}.${nameNode.property.name}`;\n }\n\n if (t.isJSXNamespacedName(nameNode)) {\n return `${nameNode.namespace.name}:${nameNode.name.name}`;\n }\n\n return \"unknown\";\n}\n\nfunction getTag(node) {\n const name = stringifyJsxName(node.name);\n const isCapitalized =\n name.charAt(0) === name.charAt(0).toUpperCase() &&\n name.charAt(0) !== name.charAt(0).toLowerCase();\n const isComponent =\n node.name.type !== \"JSXIdentifier\" || isCapitalized || name.includes(\"-\");\n return { name, isComponent };\n}\n\nfunction unwrapExpression(node) {\n let current = node;\n\n while (current) {\n if (t.isParenthesizedExpression?.(current)) {\n current = current.expression;\n continue;\n }\n\n if (\n t.isTSAsExpression?.(current) ||\n t.isTSSatisfiesExpression?.(current) ||\n t.isTypeCastExpression?.(current) ||\n t.isTSNonNullExpression?.(current)\n ) {\n current = current.expression;\n continue;\n }\n\n break;\n }\n\n return current;\n}\n\nfunction getFunctionNodeFromBinding(binding) {\n if (!binding?.path) {\n return null;\n }\n\n if (binding.path.isFunctionDeclaration()) {\n return binding.path.node;\n }\n\n if (binding.path.isVariableDeclarator()) {\n const init = unwrapExpression(binding.path.node.init);\n if (t.isArrowFunctionExpression(init) || t.isFunctionExpression(init)) {\n return init;\n }\n }\n\n return null;\n}\n\nfunction mergeBooleanResults(results) {\n return results.some(Boolean);\n}\n\nfunction jsxTreeNeedsRendererContext(node, scope, seenBindings = new Set()) {\n if (!node) {\n return false;\n }\n\n if (t.isJSXFragment(node)) {\n return mergeBooleanResults(\n node.children.map((child) => jsxChildNeedsRendererContext(child, scope, seenBindings))\n );\n }\n\n if (!t.isJSXElement(node)) {\n return false;\n }\n\n const { isComponent } = getTag(node.openingElement);\n if (isComponent) {\n return true;\n }\n\n const childNeedsContext = mergeBooleanResults(\n node.children.map((child) => jsxChildNeedsRendererContext(child, scope, seenBindings))\n );\n\n if (childNeedsContext) {\n return true;\n }\n\n return mergeBooleanResults(\n node.openingElement.attributes.map((attr) => {\n if (!t.isJSXAttribute(attr) || !t.isJSXExpressionContainer(attr.value)) {\n return false;\n }\n return expressionNeedsRendererContext(attr.value.expression, scope, seenBindings);\n })\n );\n}\n\nfunction jsxChildNeedsRendererContext(child, scope, seenBindings) {\n if (t.isJSXElement(child) || t.isJSXFragment(child)) {\n return jsxTreeNeedsRendererContext(child, scope, seenBindings);\n }\n\n if (t.isJSXExpressionContainer(child)) {\n return expressionNeedsRendererContext(child.expression, scope, seenBindings);\n }\n\n return false;\n}\n\nfunction functionBodyNeedsRendererContext(body, scope, seenBindings = new Set()) {\n if (!body) {\n return false;\n }\n\n if (t.isBlockStatement(body)) {\n return mergeBooleanResults(\n body.body.map((statement) => statementNeedsRendererContext(statement, scope, seenBindings))\n );\n }\n\n return expressionNeedsRendererContext(body, scope, seenBindings);\n}\n\nfunction statementNeedsRendererContext(statement, scope, seenBindings) {\n if (t.isReturnStatement(statement)) {\n return expressionNeedsRendererContext(statement.argument, scope, seenBindings);\n }\n\n if (t.isIfStatement(statement)) {\n return mergeBooleanResults([\n statementNeedsRendererContext(statement.consequent, scope, seenBindings),\n statement.alternate\n ? statementNeedsRendererContext(statement.alternate, scope, seenBindings)\n : false,\n ]);\n }\n\n if (t.isBlockStatement(statement)) {\n return functionBodyNeedsRendererContext(statement, scope, seenBindings);\n }\n\n return false;\n}\n\nfunction callExpressionNeedsRendererContext(node, scope, seenBindings) {\n const callee = unwrapExpression(node.callee);\n if (!t.isIdentifier(callee)) {\n return false;\n }\n\n const binding = scope.getBinding(callee.name);\n const functionNode = getFunctionNodeFromBinding(binding);\n if (!functionNode) {\n return false;\n }\n\n if (seenBindings.has(binding)) {\n return false;\n }\n\n const nextSeenBindings = new Set(seenBindings);\n nextSeenBindings.add(binding);\n return functionBodyNeedsRendererContext(functionNode.body, binding.path.scope, nextSeenBindings);\n}\n\nfunction expressionNeedsRendererContext(node, scope, seenBindings = new Set()) {\n const expression = unwrapExpression(node);\n if (!expression) {\n return false;\n }\n\n if (t.isJSXElement(expression) || t.isJSXFragment(expression)) {\n return jsxTreeNeedsRendererContext(expression, scope, seenBindings);\n }\n\n if (t.isConditionalExpression(expression)) {\n return mergeBooleanResults([\n expressionNeedsRendererContext(expression.consequent, scope, seenBindings),\n expressionNeedsRendererContext(expression.alternate, scope, seenBindings),\n ]);\n }\n\n if (t.isLogicalExpression(expression)) {\n return mergeBooleanResults([\n expressionNeedsRendererContext(expression.left, scope, seenBindings),\n expressionNeedsRendererContext(expression.right, scope, seenBindings),\n ]);\n }\n\n if (t.isSequenceExpression(expression)) {\n return mergeBooleanResults(\n expression.expressions.map((part) => expressionNeedsRendererContext(part, scope, seenBindings))\n );\n }\n\n if (t.isArrayExpression(expression)) {\n return mergeBooleanResults(\n expression.elements.filter(Boolean).map((part) => expressionNeedsRendererContext(part, scope, seenBindings))\n );\n }\n\n if (t.isCallExpression(expression)) {\n return callExpressionNeedsRendererContext(expression, scope, seenBindings);\n }\n\n return false;\n}\n\nfunction isBindableFunctionReference(expressionPath, options = {}) {\n const expression = unwrapExpression(expressionPath.node);\n if (\n t.isArrowFunctionExpression(expression) ||\n t.isFunctionExpression(expression)\n ) {\n return functionBodyNeedsRendererContext(expression.body, expressionPath.scope);\n }\n\n if (t.isIdentifier(expression)) {\n const binding = expressionPath.scope.getBinding(expression.name);\n const functionNode = getFunctionNodeFromBinding(binding);\n if (!functionNode) {\n const programPath = expressionPath.findParent((entry) => entry.isProgram?.());\n return importedBindingNeedsRendererContext(\n programPath,\n expression.name,\n options\n );\n }\n return functionBodyNeedsRendererContext(functionNode.body, binding.path.scope, new Set([binding]));\n }\n\n return false;\n}\n\nfunction shouldBindRendererContext(attributePath, rawName, expressionPath, options = {}) {\n if (typeof rawName !== \"string\" || rawName[0] !== \".\") {\n return false;\n }\n\n const openingElement = attributePath.parentPath;\n if (!openingElement?.isJSXOpeningElement()) {\n return false;\n }\n\n const { isComponent } = getTag(openingElement.node);\n if (!isComponent) {\n return false;\n }\n\n return isBindableFunctionReference(expressionPath, options);\n}\n\nfunction ensureRendererBindingImport(programPath) {\n const bodyPaths = programPath.get(\"body\");\n const runtimeImports = bodyPaths.filter(\n (path) =>\n path.isImportDeclaration() &&\n path.node.source.value === \"@litsx/core/rendering\"\n );\n\n const importSpecifier = t.importSpecifier(\n t.identifier(\"bindRendererContext\"),\n t.identifier(\"bindRendererContext\")\n );\n\n for (const importPath of runtimeImports) {\n const { specifiers } = importPath.node;\n const hasImport = specifiers.some(\n (specifier) =>\n t.isImportSpecifier(specifier) &&\n t.isIdentifier(specifier.imported, { name: \"bindRendererContext\" })\n );\n\n if (hasImport) {\n return;\n }\n\n specifiers.push(importSpecifier);\n return;\n }\n\n programPath.unshiftContainer(\"body\", t.importDeclaration(\n [importSpecifier],\n t.stringLiteral(\"@litsx/core/rendering\")\n ));\n}\n\nexport default function transformLitsxRendererProps(api) {\n api.assertVersion?.(7);\n t = api.types;\n\n return {\n name: \"transform-litsx-renderer-props\",\n inherits: jsxSyntaxPlugin.default || jsxSyntaxPlugin,\n visitor: {\n Program: {\n enter(_, state) {\n state.__litsxNeedsRendererBindingImport = false;\n },\n exit(programPath, state) {\n if (state.__litsxNeedsRendererBindingImport) {\n ensureRendererBindingImport(programPath);\n }\n },\n },\n JSXAttribute(path, state) {\n const { node } = path;\n if (node.value?.type !== \"JSXExpressionContainer\") {\n return;\n }\n\n const rawName = decodeVirtualAttributeName(node.name.name) ?? node.name.name;\n const expressionPath = path.get(\"value.expression\");\n if (!expressionPath?.node) {\n return;\n }\n\n if (!shouldBindRendererContext(path, rawName, expressionPath, {\n filename: state.file?.opts?.filename || \"\",\n })) {\n return;\n }\n\n state.__litsxNeedsRendererBindingImport = true;\n node.value.expression = t.callExpression(\n t.identifier(\"bindRendererContext\"),\n [\n createHostReferenceExpression(),\n expressionPath.node,\n t.objectExpression([\n t.objectProperty(t.identifier(\"projected\"), t.booleanLiteral(true)),\n ]),\n ]\n );\n },\n },\n };\n}\n"],"names":["importedBindingNeedsRendererContext"],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@litsx/babel-preset-litsx",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.6.0",
|
|
4
4
|
"description": "Canonical native Babel preset for LitSX-authored source",
|
|
5
|
+
"author": "LitSX Team",
|
|
5
6
|
"type": "module",
|
|
6
7
|
"main": "./dist/index.cjs",
|
|
7
8
|
"module": "./src/index.js",
|
|
@@ -54,7 +55,7 @@
|
|
|
54
55
|
"lit"
|
|
55
56
|
],
|
|
56
57
|
"license": "Apache-2.0",
|
|
57
|
-
"homepage": "https://
|
|
58
|
+
"homepage": "https://litsx.dev/",
|
|
58
59
|
"bugs": {
|
|
59
60
|
"url": "https://github.com/litsxdev/litsx/issues"
|
|
60
61
|
},
|
|
@@ -74,10 +75,10 @@
|
|
|
74
75
|
"@babel/helper-plugin-utils": "^7.28.6",
|
|
75
76
|
"@babel/plugin-syntax-jsx": "^7.28.6",
|
|
76
77
|
"@babel/traverse": "^7.28.5",
|
|
77
|
-
"@litsx/babel-parser": "^0.2.
|
|
78
|
-
"@litsx/babel-plugin-shared-hooks": "^0.
|
|
79
|
-
"@litsx/babel-plugin-transform-jsx-html-template": "^0.3.
|
|
80
|
-
"@litsx/babel-plugin-transform-litsx-scoped-elements": "^0.
|
|
78
|
+
"@litsx/babel-parser": "^0.2.4",
|
|
79
|
+
"@litsx/babel-plugin-shared-hooks": "^0.3.0",
|
|
80
|
+
"@litsx/babel-plugin-transform-jsx-html-template": "^0.3.2",
|
|
81
|
+
"@litsx/babel-plugin-transform-litsx-scoped-elements": "^0.3.0",
|
|
81
82
|
"@litsx/typescript-session": "^0.2.1"
|
|
82
83
|
},
|
|
83
84
|
"scripts": {
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createUseRefTransform } from "@litsx/babel-plugin-shared-hooks";
|
|
2
2
|
|
|
3
3
|
export default createUseRefTransform({
|
|
4
|
-
importSource: "@litsx/
|
|
4
|
+
importSource: "@litsx/core",
|
|
5
5
|
hookNames: ["useRef"],
|
|
6
6
|
pluginName: "transform-litsx-dom-refs",
|
|
7
7
|
pendingPropertyKey: "_litsxPendingElements",
|
|
@@ -18,7 +18,7 @@ function createLitsxInfrastructureImport(importedName) {
|
|
|
18
18
|
[
|
|
19
19
|
t.importSpecifier(t.identifier(importedName), t.identifier(importedName)),
|
|
20
20
|
],
|
|
21
|
-
t.stringLiteral("@litsx/
|
|
21
|
+
t.stringLiteral("@litsx/core/elements")
|
|
22
22
|
);
|
|
23
23
|
}
|
|
24
24
|
|
|
@@ -27,7 +27,7 @@ function createLitsxInternalRuntimeImport(importedName) {
|
|
|
27
27
|
[
|
|
28
28
|
t.importSpecifier(t.identifier(importedName), t.identifier(importedName)),
|
|
29
29
|
],
|
|
30
|
-
t.stringLiteral("@litsx/
|
|
30
|
+
t.stringLiteral("@litsx/core/rendering")
|
|
31
31
|
);
|
|
32
32
|
}
|
|
33
33
|
|
|
@@ -36,7 +36,7 @@ function createLitsxImport(importedName) {
|
|
|
36
36
|
[
|
|
37
37
|
t.importSpecifier(t.identifier(importedName), t.identifier(importedName)),
|
|
38
38
|
],
|
|
39
|
-
t.stringLiteral("@litsx/
|
|
39
|
+
t.stringLiteral("@litsx/core")
|
|
40
40
|
);
|
|
41
41
|
}
|
|
42
42
|
|
|
@@ -68,7 +68,7 @@ function pruneUnusedLitsxStaticImports(programPath) {
|
|
|
68
68
|
|
|
69
69
|
const bodyPaths = programPath.get("body");
|
|
70
70
|
const litsxImports = bodyPaths.filter(
|
|
71
|
-
(path) => path.isImportDeclaration() && path.node.source.value === "@litsx/
|
|
71
|
+
(path) => path.isImportDeclaration() && path.node.source.value === "@litsx/core"
|
|
72
72
|
);
|
|
73
73
|
|
|
74
74
|
litsxImports.forEach((importPath) => {
|
|
@@ -174,7 +174,7 @@ export function finalizeProgram(programPath, state) {
|
|
|
174
174
|
if (state.__litsxNeedsStaticHoistsMixin) {
|
|
175
175
|
const bodyPathsWithInternal = programPath.get("body");
|
|
176
176
|
const internalImports = bodyPathsWithInternal.filter(
|
|
177
|
-
(n) => n.isImportDeclaration() && n.node.source.value === "@litsx/
|
|
177
|
+
(n) => n.isImportDeclaration() && n.node.source.value === "@litsx/core/elements"
|
|
178
178
|
);
|
|
179
179
|
|
|
180
180
|
let internalImported = false;
|
|
@@ -195,7 +195,7 @@ export function finalizeProgram(programPath, state) {
|
|
|
195
195
|
if (state.__litsxNeedsLightDomMixin) {
|
|
196
196
|
const bodyPathsWithInternal = programPath.get("body");
|
|
197
197
|
const internalImports = bodyPathsWithInternal.filter(
|
|
198
|
-
(n) => n.isImportDeclaration() && n.node.source.value === "@litsx/
|
|
198
|
+
(n) => n.isImportDeclaration() && n.node.source.value === "@litsx/core/elements"
|
|
199
199
|
);
|
|
200
200
|
|
|
201
201
|
let internalImported = false;
|
|
@@ -216,7 +216,7 @@ export function finalizeProgram(programPath, state) {
|
|
|
216
216
|
if (state.__litsxNeedsCallbackRef) {
|
|
217
217
|
const bodyPathsWithLitsx = programPath.get("body");
|
|
218
218
|
const litsxImports = bodyPathsWithLitsx.filter(
|
|
219
|
-
(n) => n.isImportDeclaration() && n.node.source.value === "@litsx/
|
|
219
|
+
(n) => n.isImportDeclaration() && n.node.source.value === "@litsx/core"
|
|
220
220
|
);
|
|
221
221
|
|
|
222
222
|
let litsxImported = false;
|
|
@@ -239,7 +239,7 @@ export function finalizeProgram(programPath, state) {
|
|
|
239
239
|
const internalRuntimeImports = bodyPathsWithInternalRuntime.filter(
|
|
240
240
|
(n) =>
|
|
241
241
|
n.isImportDeclaration() &&
|
|
242
|
-
n.node.source.value === "@litsx/
|
|
242
|
+
n.node.source.value === "@litsx/core/rendering"
|
|
243
243
|
);
|
|
244
244
|
|
|
245
245
|
let internalRuntimeImported = false;
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import jsxSyntaxPlugin from "@babel/plugin-syntax-jsx";
|
|
2
|
-
import { decodeVirtualAttributeName } from "@litsx/
|
|
2
|
+
import { decodeVirtualAttributeName } from "@litsx/authoring";
|
|
3
3
|
import { importedBindingNeedsRendererContext } from "./transform-litsx-element-candidates.js";
|
|
4
4
|
|
|
5
5
|
let t;
|
|
@@ -288,7 +288,7 @@ function ensureRendererBindingImport(programPath) {
|
|
|
288
288
|
const runtimeImports = bodyPaths.filter(
|
|
289
289
|
(path) =>
|
|
290
290
|
path.isImportDeclaration() &&
|
|
291
|
-
path.node.source.value === "@litsx/
|
|
291
|
+
path.node.source.value === "@litsx/core/rendering"
|
|
292
292
|
);
|
|
293
293
|
|
|
294
294
|
const importSpecifier = t.importSpecifier(
|
|
@@ -314,7 +314,7 @@ function ensureRendererBindingImport(programPath) {
|
|
|
314
314
|
|
|
315
315
|
programPath.unshiftContainer("body", t.importDeclaration(
|
|
316
316
|
[importSpecifier],
|
|
317
|
-
t.stringLiteral("@litsx/
|
|
317
|
+
t.stringLiteral("@litsx/core/rendering")
|
|
318
318
|
));
|
|
319
319
|
}
|
|
320
320
|
|
|
@@ -360,6 +360,9 @@ export default function transformLitsxRendererProps(api) {
|
|
|
360
360
|
[
|
|
361
361
|
createHostReferenceExpression(),
|
|
362
362
|
expressionPath.node,
|
|
363
|
+
t.objectExpression([
|
|
364
|
+
t.objectProperty(t.identifier("projected"), t.booleanLiteral(true)),
|
|
365
|
+
]),
|
|
363
366
|
]
|
|
364
367
|
);
|
|
365
368
|
},
|