babel-plugin-essor 0.0.5-beta.6 → 0.0.5-beta.7

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/index.cjs CHANGED
@@ -72,8 +72,8 @@ var transformProgram = {
72
72
  enter(path) {
73
73
  path.state = {
74
74
  h: path.scope.generateUidIdentifier("h$"),
75
- signal: path.scope.generateUidIdentifier("signal$"),
76
- computed: path.scope.generateUidIdentifier("computed$"),
75
+ useSignal: path.scope.generateUidIdentifier("useSignal$"),
76
+ useComputed: path.scope.generateUidIdentifier("useComputed$"),
77
77
  template: path.scope.generateUidIdentifier("template$"),
78
78
  signalObject: path.scope.generateUidIdentifier("signalObject&"),
79
79
  tmplDeclaration: import_core.types.variableDeclaration("const", [])
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/transform.ts","../src/constants.ts","../src/jsx-transform.ts","../src/symbol-replace.ts","../src/import-replace.ts"],"sourcesContent":["import { transformProgram } from './transform';\nimport { transformJSX } from './jsx-transform';\nimport { replaceSymbol } from './symbol-replace';\nimport { replaceImport } from './import-replace';\nimport type { PluginObj } from '@babel/core';\n\nexport default function (): PluginObj {\n return {\n name: 'babel-plugin-essor',\n manipulateOptions({ filename }, parserOpts) {\n if (filename.endsWith('ts') || filename.endsWith('tsx')) {\n parserOpts.plugins.push('typescript');\n }\n parserOpts.plugins.push('jsx');\n },\n visitor: {\n Program: transformProgram,\n JSXElement: transformJSX,\n JSXFragment: transformJSX,\n VariableDeclarator: replaceSymbol,\n ImportDeclaration: replaceImport,\n },\n };\n}\n","import { types as t } from '@babel/core';\nimport { imports } from './constants';\nimport type { NodePath } from '@babel/core';\nimport type { State } from './types';\n\nexport const transformProgram = {\n enter(path: NodePath<t.Program>) {\n path.state = {\n h: path.scope.generateUidIdentifier('h$'),\n signal: path.scope.generateUidIdentifier('signal$'),\n computed: path.scope.generateUidIdentifier('computed$'),\n template: path.scope.generateUidIdentifier('template$'),\n signalObject: path.scope.generateUidIdentifier('signalObject&'),\n tmplDeclaration: t.variableDeclaration('const', []),\n } as State;\n\n imports.clear();\n },\n exit(path: NodePath<t.Program>) {\n const state: State = path.state;\n\n if (state.tmplDeclaration.declarations.length > 0) {\n const index = path.node.body.findIndex(\n node => !t.isImportDeclaration(node) && !t.isExportDeclaration(node),\n );\n path.node.body.splice(index, 0, state.tmplDeclaration);\n }\n\n if (imports.size > 0) {\n path.node.body.unshift(createImport(state, 'essor'));\n }\n },\n};\nfunction createImport(state: State, from: string) {\n const ImportSpecifier: t.ImportSpecifier[] = [];\n imports.forEach(name => {\n const local = t.identifier(state[name].name);\n const imported = t.identifier(name);\n ImportSpecifier.push(t.importSpecifier(local, imported));\n });\n\n const importSource = t.stringLiteral(from);\n return t.importDeclaration(ImportSpecifier, importSource);\n}\n","export const selfClosingTags = [\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\nexport const svgTags = [\n 'circle',\n 'clipPath',\n 'defs',\n 'ellipse',\n 'filter',\n 'g',\n 'line',\n 'linearGradient',\n 'mask',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialGradient',\n 'rect',\n 'stop',\n 'symbol',\n 'text',\n 'use',\n];\nexport const imports = new Set<string>();\n","import { types as t } from '@babel/core';\nimport { imports, selfClosingTags, svgTags } from './constants';\nimport type { NodePath } from '@babel/core';\nimport type { State } from './types';\n\ninterface Result {\n index: number;\n isLastChild: boolean;\n parentIndex: number;\n props: Record<string, any>;\n template: string;\n}\n\ntype JSXElement = t.JSXElement | t.JSXFragment;\n\ntype JSXChild =\n | t.JSXElement\n | t.JSXFragment\n | t.JSXExpressionContainer\n | t.JSXSpreadChild\n | t.JSXText;\n\n/**\n * Transform JSX element and replace it with a new ES Node.\n *\n * @param {NodePath<JSXElement>} path - The path to the JSX element to transform\n * @return {void}\n */\nexport function transformJSX(path: NodePath<JSXElement>): void {\n const result: Result = {\n index: 1,\n isLastChild: false,\n parentIndex: 0,\n props: {},\n template: '',\n };\n transformElement(path, result, true);\n path.replaceWith(createEssorNode(path, result));\n}\n\n/**\n * Generate a call expression for creating an Essor node based on the given JSXElement path and result.\n *\n * @param {NodePath<JSXElement>} path - The path to the JSXElement\n * @param {Result} result - The result object\n * @return {t.CallExpression} The call expression for creating the Essor node\n */\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n let tmpl: t.Identifier;\n\n if (path.isJSXElement() && isComponent(getTagName(path.node))) {\n tmpl = t.identifier(getTagName(path.node));\n } else {\n tmpl = path.scope.generateUidIdentifier('_tmpl$');\n const template = t.callExpression(state.template, [t.stringLiteral(result.template)]);\n const declarator = t.variableDeclarator(tmpl, template);\n state.tmplDeclaration.declarations.push(declarator);\n imports.add('template');\n }\n\n const args = [tmpl, createProps(result.props)];\n const key = result.props.key ?? result.props[0]?.key;\n\n if (key) {\n args.push(key);\n }\n imports.add('h');\n return t.callExpression(state.h, args);\n}\n\n/**\n * Generate an object expression based on the given props object.\n *\n * @param {Record<string, any>} props - The object containing the properties to be transformed into an object expression.\n * @return {t.ObjectExpression} The object expression generated from the props object.\n */\nfunction createProps(props: Record<string, any>): t.ObjectExpression {\n const result: (t.ObjectProperty | t.SpreadElement)[] = [];\n\n for (const prop in props) {\n let value = props[prop];\n\n if (prop === 'key') {\n continue;\n }\n\n if (Array.isArray(value)) {\n value = t.arrayExpression(value);\n }\n\n if (typeof value === 'object' && value !== null && !t.isNode(value)) {\n value = createProps(value);\n }\n\n if (typeof value === 'string') {\n value = t.stringLiteral(value);\n }\n\n if (typeof value === 'number') {\n value = t.numericLiteral(value);\n }\n\n if (typeof value === 'boolean') {\n value = t.booleanLiteral(value);\n }\n\n if (value === undefined) {\n value = t.tsUndefinedKeyword();\n }\n\n if (value === null) {\n value = t.nullLiteral();\n }\n\n if (prop === '_$spread$') {\n result.push(t.spreadElement(value));\n } else {\n result.push(t.objectProperty(t.stringLiteral(prop), value));\n }\n }\n\n return t.objectExpression(result);\n}\n\n/**\n * Generates a record of JSX element attributes.\n *\n * @param {NodePath<t.JSXElement>} path - the NodePath of the JSX element\n * @return {Record<string, any>} the generated record of attributes\n */\nfunction getAttrProps(path: NodePath<t.JSXElement>): Record<string, any> {\n const props: Record<string, any> = {};\n\n path\n .get('openingElement')\n .get('attributes')\n .forEach(attribute => {\n if (attribute.isJSXAttribute()) {\n const name = getAttrName(attribute.node);\n const value = attribute.get('value');\n\n if (!value.node) {\n props[name] = true;\n } else if (value.isStringLiteral()) {\n props[name] = value.node.value;\n } else {\n if (value.isJSXExpressionContainer()) {\n const expression = value.get('expression');\n\n if (expression.isStringLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isNumericLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isJSXElement() || expression.isJSXFragment()) {\n transformJSX(expression);\n props[name] = expression.node;\n } else if (expression.isExpression()) {\n if (/^key|ref|on.+$/.test(name)) {\n props[name] = expression.node;\n } else if (/^bind:.+/.test(name)) {\n props[name] = t.arrowFunctionExpression([], expression.node);\n const value = path.scope.generateUidIdentifier('value');\n props[`update:${name.slice(5).toLocaleLowerCase()}`] = t.arrowFunctionExpression(\n [value],\n t.assignmentExpression('=', expression.node as any, value),\n );\n } else {\n if (expression.isConditionalExpression()) {\n props[name] = t.arrowFunctionExpression([], expression.node);\n } else {\n props[name] = expression.node;\n }\n }\n }\n } else if (value.isJSXElement() || value.isJSXFragment()) {\n transformJSX(value);\n props[name] = value.node;\n }\n }\n } else if (attribute.isJSXSpreadAttribute()) {\n props._$spread$ = attribute.get('argument').node;\n } else {\n throw new Error('Unsupported attribute type');\n }\n });\n\n return props;\n}\n\n/**\n * Transforms the given JSX element and updates the result.\n *\n * @param {NodePath<JSXElement>} path - the path of the JSX element to transform\n * @param {Result} result - the result object to update\n * @param {boolean} [isRoot] - indicates if the current element is the root element\n * @return {void}\n */\nfunction transformElement(path: NodePath<JSXElement>, result: Result, isRoot?: boolean): void {\n if (path.isJSXElement()) {\n const tagName = getTagName(path.node);\n const tagIsComponent = isComponent(tagName);\n const isSelfClosing = !tagIsComponent && selfClosingTags.includes(tagName);\n const isSvgTemplate = svgTags.includes(tagName) && result.index === 1;\n const props = getAttrProps(path);\n\n if (tagIsComponent) {\n if (isRoot) {\n result.props = props;\n const children = getChildren(path) as any;\n if (children.length > 0) {\n const childrenGetter = children.length === 1 ? children[0] : t.arrayExpression(children);\n result.props.children = childrenGetter;\n }\n } else {\n transformJSX(path);\n replaceChild(path.node, result);\n }\n } else {\n if (isSvgTemplate) {\n result.template += `<svg _svg_>`;\n }\n result.template += `<${tagName}`;\n handleAttributes(props, result);\n result.template += isSelfClosing ? '/>' : '>';\n if (!isSelfClosing) {\n transformChildren(path, result);\n result.template += `</${tagName}>`;\n }\n }\n } else {\n result.index--;\n transformChildren(path, result);\n }\n}\n\n/**\n * Retrieves the children of the given JSX element path, filters out invalid children, and transforms valid children based on their type.\n *\n * @param {NodePath<t.JSXElement>} path - the JSX element path\n * @return {JSXChild[]} an array of transformed JSX children\n */\nfunction getChildren(path: NodePath<t.JSXElement>): JSXChild[] {\n return path\n .get('children')\n .filter(isValidChild)\n .map(child => {\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSX(child);\n } else if (child.isJSXExpressionContainer()) {\n child.replaceWith(child.get('expression'));\n } else if (child.isJSXText()) {\n child.replaceWith(t.stringLiteral(child.node.value));\n } else {\n throw new Error('Unsupported JSX child');\n }\n return child.node;\n });\n}\n\n/**\n * Handles attributes from props and updates the result object with template, props, index.\n *\n * @param {Record<string, any>} props - The attributes to be handled\n * @param {Result} result - The result object to be updated with template, props, index\n * @return {void}\n */\nfunction handleAttributes(props: Record<string, any>, result: Result): void {\n let klass = '';\n let style = '';\n\n for (const prop in props) {\n const value = props[prop];\n\n if (prop === 'class' && typeof value === 'string') {\n klass += ` ${value}`;\n delete props[prop];\n continue;\n }\n if (prop.indexOf('class:') === 0) {\n if (value === true) {\n const name = prop.replace(/^class:/, '');\n klass += ` ${name}`;\n delete props[prop];\n continue;\n }\n if (value === false) {\n delete props[prop];\n continue;\n }\n }\n\n if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\n delete props[prop];\n continue;\n }\n if (prop.indexOf('style:') === 0 && (typeof value === 'string' || typeof value === 'number')) {\n const name = prop.replace(/^style:/, '');\n style += `${name}:${value};`;\n delete props[prop];\n continue;\n }\n\n if (value === true) {\n result.template += ` ${prop}`;\n delete props[prop];\n }\n if (value === false) {\n delete props[prop];\n }\n if (typeof value === 'string' || typeof value === 'number') {\n result.template += ` ${prop}=\"${value}\"`;\n delete props[prop];\n }\n }\n\n if (Object.keys(props).length > 0) {\n result.props[result.index] = props;\n }\n\n klass = klass.trim();\n style = style.trim();\n\n if (klass) {\n result.template += ` class=\"${klass}\"`;\n }\n if (style) {\n result.template += ` style=\"${style}\"`;\n }\n}\n\n/**\n * Transforms the children of the given JSX element path and updates the result object accordingly.\n *\n * @param {NodePath<JSXElement>} path - The path of the JSX element whose children are to be transformed\n * @param {Result} result - The result object to be updated during the transformation\n * @return {void} This function does not return a value\n */\nfunction transformChildren(path: NodePath<JSXElement>, result: Result): void {\n const parentIndex = result.index;\n path\n .get('children')\n .reduce((acc, child) => {\n if (isValidChild(child)) {\n const lastChild = acc.at(-1);\n if (lastChild && isTextChild(child) && isTextChild(lastChild)) {\n setNodeText(lastChild, getNodeText(lastChild) + getNodeText(child));\n } else {\n acc.push(child);\n }\n }\n return acc;\n }, [] as NodePath<JSXChild>[])\n .forEach((child, i, arr) => {\n result.parentIndex = parentIndex;\n result.isLastChild = i === arr.length - 1;\n transformChild(child, result);\n });\n}\n\n/**\n * Transform a JSX child node.\n *\n * @param {NodePath<JSXChild>} child - the JSX child node to transform\n * @param {Result} result - the result object to store transformation results\n */\nfunction transformChild(child: NodePath<JSXChild>, result: Result) {\n result.index++;\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformElement(child, result);\n } else if (child.isJSXExpressionContainer()) {\n const expression = child.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n result.template += expression.node.value;\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else {\n throw new Error('Unsupported JSX child');\n }\n } else if (child.isJSXText()) {\n result.template += child.node.value;\n } else {\n throw new Error('Unsupported JSX child');\n }\n}\n\n/**\n * Replaces a child node with the provided result.\n *\n * @param {t.Expression} node - the node to be replaced\n * @param {Result} result - the result to replace the node with\n * @return {void}\n */\nfunction replaceChild(node: t.Expression, result: Result): void {\n if (result.isLastChild) {\n result.index--;\n } else {\n result.template += '<!>';\n }\n result.props[result.parentIndex] ??= {};\n result.props[result.parentIndex].children ??= [];\n result.props[result.parentIndex].children.push(\n t.arrayExpression([\n t.arrowFunctionExpression([], node),\n result.isLastChild ? t.nullLiteral() : t.identifier(String(result.index)),\n ]),\n );\n}\n\nfunction getAttrName(attribute: t.JSXAttribute): string {\n if (t.isJSXIdentifier(attribute.name)) {\n return attribute.name.name;\n }\n if (t.isJSXNamespacedName(attribute.name)) {\n return `${attribute.name.namespace.name}:${attribute.name.name.name}`;\n }\n throw new Error('Unsupported attribute type');\n}\n\nfunction getNodeText(path: NodePath<JSXChild>): string {\n if (path.isJSXText()) {\n return path.node.value;\n }\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n return String(expression.node.value);\n }\n }\n return '';\n}\n\nfunction setNodeText(path: NodePath<JSXChild>, text: string): void {\n if (path.isJSXText()) {\n path.node.value = text;\n }\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n expression.replaceWith(t.stringLiteral(text));\n }\n }\n}\n\nfunction getTagName(node: t.JSXElement): string {\n const jsxName = node.openingElement.name;\n return jsxElementNameToString(jsxName);\n}\n\nfunction isComponent(tagName: string): boolean {\n return (\n (tagName[0] && tagName[0].toLowerCase() !== tagName[0]) ||\n tagName.includes('.') ||\n /[^A-Za-z]/.test(tagName[0])\n );\n}\n\nfunction isTextChild(path: NodePath<JSXChild>): boolean {\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isJSXText() || expression.isStringLiteral() || expression.isNumericLiteral()) {\n return true;\n }\n }\n if (path.isJSXText() || path.isStringLiteral() || path.isNullLiteral()) {\n return true;\n }\n return false;\n}\n\nfunction isValidChild(path: NodePath<JSXChild>): boolean {\n const regex = /^\\s*$/;\n if (path.isStringLiteral() || path.isJSXText()) {\n return !regex.test(path.node.value);\n }\n return Object.keys(path.node).length > 0;\n}\n\nfunction jsxElementNameToString(\n node: t.JSXMemberExpression | t.JSXIdentifier | t.JSXNamespacedName,\n): string {\n if (t.isJSXMemberExpression(node)) {\n return `${jsxElementNameToString(node.object)}.${node.property.name}`;\n }\n if (t.isJSXIdentifier(node) || t.isIdentifier(node)) {\n return node.name;\n }\n return `${node.namespace.name}:${node.name.name}`;\n}\n","import { types as t } from '@babel/core';\nimport { type Identifier, type VariableDeclarator, cloneNode } from '@babel/types';\nimport { imports } from './constants';\nimport type { NodePath } from '@babel/core';\n\nexport function replaceSymbol(path: NodePath<VariableDeclarator>) {\n const init = path.node.init;\n const variableName = (path.node.id as Identifier).name;\n\n // pattern does not need to be replaced\n if (t.isObjectPattern(path.node.id) || t.isArrayPattern(path.node.id)) {\n return;\n }\n if (!variableName.startsWith('$')) {\n return;\n }\n\n if (\n init &&\n (t.isFunctionExpression(init) || t.isArrowFunctionExpression(init)) &&\n (path.parent as t.VariableDeclaration).kind === 'const'\n ) {\n const newInit = t.callExpression(t.identifier(path.state.computed.name), init ? [init] : []);\n imports.add('computed');\n path.node.init = newInit;\n } else {\n const originalImportDeclarationNodes = cloneNode(path.get('id').node, true);\n\n const newInit = t.callExpression(t.identifier(path.state.signal.name), init ? [init] : []);\n imports.add('signal');\n path.node.init = newInit;\n\n path.scope.rename(variableName, `${variableName}.value`);\n path.get('id').replaceWith(originalImportDeclarationNodes);\n\n path.scope.traverse(path.scope.block, {\n Identifier(innerPath) {\n if (t.isExportSpecifier(innerPath.parent)) {\n const { name } = innerPath.node;\n if (name.endsWith('.value')) {\n innerPath.node.name = name.slice(0, -6);\n }\n }\n },\n });\n }\n}\n","export function replaceImport(path) {\n const imports = path.node.specifiers;\n imports.forEach(specifier => {\n const variableName = specifier.local.name;\n if (variableName.indexOf('$') === 0) {\n path.scope.rename(variableName, `${variableName}.value`);\n specifier.local.name = `${variableName}`;\n }\n });\n}\n"],"mappings":"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","names":["t","import_core","t","value","import_core","t","imports"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/transform.ts","../src/constants.ts","../src/jsx-transform.ts","../src/symbol-replace.ts","../src/import-replace.ts"],"sourcesContent":["import { transformProgram } from './transform';\nimport { transformJSX } from './jsx-transform';\nimport { replaceSymbol } from './symbol-replace';\nimport { replaceImport } from './import-replace';\nimport type { PluginObj } from '@babel/core';\n\nexport default function (): PluginObj {\n return {\n name: 'babel-plugin-essor',\n manipulateOptions({ filename }, parserOpts) {\n if (filename.endsWith('ts') || filename.endsWith('tsx')) {\n parserOpts.plugins.push('typescript');\n }\n parserOpts.plugins.push('jsx');\n },\n visitor: {\n Program: transformProgram,\n JSXElement: transformJSX,\n JSXFragment: transformJSX,\n VariableDeclarator: replaceSymbol,\n ImportDeclaration: replaceImport,\n },\n };\n}\n","import { types as t } from '@babel/core';\nimport { imports } from './constants';\nimport type { NodePath } from '@babel/core';\nimport type { State } from './types';\n\nexport const transformProgram = {\n enter(path: NodePath<t.Program>) {\n path.state = {\n h: path.scope.generateUidIdentifier('h$'),\n useSignal: path.scope.generateUidIdentifier('useSignal$'),\n useComputed: path.scope.generateUidIdentifier('useComputed$'),\n template: path.scope.generateUidIdentifier('template$'),\n signalObject: path.scope.generateUidIdentifier('signalObject&'),\n tmplDeclaration: t.variableDeclaration('const', []),\n } as State;\n\n imports.clear();\n },\n exit(path: NodePath<t.Program>) {\n const state: State = path.state;\n\n if (state.tmplDeclaration.declarations.length > 0) {\n const index = path.node.body.findIndex(\n node => !t.isImportDeclaration(node) && !t.isExportDeclaration(node),\n );\n path.node.body.splice(index, 0, state.tmplDeclaration);\n }\n\n if (imports.size > 0) {\n path.node.body.unshift(createImport(state, 'essor'));\n }\n },\n};\nfunction createImport(state: State, from: string) {\n const ImportSpecifier: t.ImportSpecifier[] = [];\n imports.forEach(name => {\n const local = t.identifier(state[name].name);\n const imported = t.identifier(name);\n ImportSpecifier.push(t.importSpecifier(local, imported));\n });\n\n const importSource = t.stringLiteral(from);\n return t.importDeclaration(ImportSpecifier, importSource);\n}\n","export const selfClosingTags = [\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\nexport const svgTags = [\n 'circle',\n 'clipPath',\n 'defs',\n 'ellipse',\n 'filter',\n 'g',\n 'line',\n 'linearGradient',\n 'mask',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialGradient',\n 'rect',\n 'stop',\n 'symbol',\n 'text',\n 'use',\n];\nexport const imports = new Set<string>();\n","import { types as t } from '@babel/core';\nimport { imports, selfClosingTags, svgTags } from './constants';\nimport type { NodePath } from '@babel/core';\nimport type { State } from './types';\n\ninterface Result {\n index: number;\n isLastChild: boolean;\n parentIndex: number;\n props: Record<string, any>;\n template: string;\n}\n\ntype JSXElement = t.JSXElement | t.JSXFragment;\n\ntype JSXChild =\n | t.JSXElement\n | t.JSXFragment\n | t.JSXExpressionContainer\n | t.JSXSpreadChild\n | t.JSXText;\n\n/**\n * Transform JSX element and replace it with a new ES Node.\n *\n * @param {NodePath<JSXElement>} path - The path to the JSX element to transform\n * @return {void}\n */\nexport function transformJSX(path: NodePath<JSXElement>): void {\n const result: Result = {\n index: 1,\n isLastChild: false,\n parentIndex: 0,\n props: {},\n template: '',\n };\n transformElement(path, result, true);\n path.replaceWith(createEssorNode(path, result));\n}\n\n/**\n * Generate a call expression for creating an Essor node based on the given JSXElement path and result.\n *\n * @param {NodePath<JSXElement>} path - The path to the JSXElement\n * @param {Result} result - The result object\n * @return {t.CallExpression} The call expression for creating the Essor node\n */\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n let tmpl: t.Identifier;\n\n if (path.isJSXElement() && isComponent(getTagName(path.node))) {\n tmpl = t.identifier(getTagName(path.node));\n } else {\n tmpl = path.scope.generateUidIdentifier('_tmpl$');\n const template = t.callExpression(state.template, [t.stringLiteral(result.template)]);\n const declarator = t.variableDeclarator(tmpl, template);\n state.tmplDeclaration.declarations.push(declarator);\n imports.add('template');\n }\n\n const args = [tmpl, createProps(result.props)];\n const key = result.props.key ?? result.props[0]?.key;\n\n if (key) {\n args.push(key);\n }\n imports.add('h');\n return t.callExpression(state.h, args);\n}\n\n/**\n * Generate an object expression based on the given props object.\n *\n * @param {Record<string, any>} props - The object containing the properties to be transformed into an object expression.\n * @return {t.ObjectExpression} The object expression generated from the props object.\n */\nfunction createProps(props: Record<string, any>): t.ObjectExpression {\n const result: (t.ObjectProperty | t.SpreadElement)[] = [];\n\n for (const prop in props) {\n let value = props[prop];\n\n if (prop === 'key') {\n continue;\n }\n\n if (Array.isArray(value)) {\n value = t.arrayExpression(value);\n }\n\n if (typeof value === 'object' && value !== null && !t.isNode(value)) {\n value = createProps(value);\n }\n\n if (typeof value === 'string') {\n value = t.stringLiteral(value);\n }\n\n if (typeof value === 'number') {\n value = t.numericLiteral(value);\n }\n\n if (typeof value === 'boolean') {\n value = t.booleanLiteral(value);\n }\n\n if (value === undefined) {\n value = t.tsUndefinedKeyword();\n }\n\n if (value === null) {\n value = t.nullLiteral();\n }\n\n if (prop === '_$spread$') {\n result.push(t.spreadElement(value));\n } else {\n result.push(t.objectProperty(t.stringLiteral(prop), value));\n }\n }\n\n return t.objectExpression(result);\n}\n\n/**\n * Generates a record of JSX element attributes.\n *\n * @param {NodePath<t.JSXElement>} path - the NodePath of the JSX element\n * @return {Record<string, any>} the generated record of attributes\n */\nfunction getAttrProps(path: NodePath<t.JSXElement>): Record<string, any> {\n const props: Record<string, any> = {};\n\n path\n .get('openingElement')\n .get('attributes')\n .forEach(attribute => {\n if (attribute.isJSXAttribute()) {\n const name = getAttrName(attribute.node);\n const value = attribute.get('value');\n\n if (!value.node) {\n props[name] = true;\n } else if (value.isStringLiteral()) {\n props[name] = value.node.value;\n } else {\n if (value.isJSXExpressionContainer()) {\n const expression = value.get('expression');\n\n if (expression.isStringLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isNumericLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isJSXElement() || expression.isJSXFragment()) {\n transformJSX(expression);\n props[name] = expression.node;\n } else if (expression.isExpression()) {\n if (/^key|ref|on.+$/.test(name)) {\n props[name] = expression.node;\n } else if (/^bind:.+/.test(name)) {\n props[name] = t.arrowFunctionExpression([], expression.node);\n const value = path.scope.generateUidIdentifier('value');\n props[`update:${name.slice(5).toLocaleLowerCase()}`] = t.arrowFunctionExpression(\n [value],\n t.assignmentExpression('=', expression.node as any, value),\n );\n } else {\n if (expression.isConditionalExpression()) {\n props[name] = t.arrowFunctionExpression([], expression.node);\n } else {\n props[name] = expression.node;\n }\n }\n }\n } else if (value.isJSXElement() || value.isJSXFragment()) {\n transformJSX(value);\n props[name] = value.node;\n }\n }\n } else if (attribute.isJSXSpreadAttribute()) {\n props._$spread$ = attribute.get('argument').node;\n } else {\n throw new Error('Unsupported attribute type');\n }\n });\n\n return props;\n}\n\n/**\n * Transforms the given JSX element and updates the result.\n *\n * @param {NodePath<JSXElement>} path - the path of the JSX element to transform\n * @param {Result} result - the result object to update\n * @param {boolean} [isRoot] - indicates if the current element is the root element\n * @return {void}\n */\nfunction transformElement(path: NodePath<JSXElement>, result: Result, isRoot?: boolean): void {\n if (path.isJSXElement()) {\n const tagName = getTagName(path.node);\n const tagIsComponent = isComponent(tagName);\n const isSelfClosing = !tagIsComponent && selfClosingTags.includes(tagName);\n const isSvgTemplate = svgTags.includes(tagName) && result.index === 1;\n const props = getAttrProps(path);\n\n if (tagIsComponent) {\n if (isRoot) {\n result.props = props;\n const children = getChildren(path) as any;\n if (children.length > 0) {\n const childrenGetter = children.length === 1 ? children[0] : t.arrayExpression(children);\n result.props.children = childrenGetter;\n }\n } else {\n transformJSX(path);\n replaceChild(path.node, result);\n }\n } else {\n if (isSvgTemplate) {\n result.template += `<svg _svg_>`;\n }\n result.template += `<${tagName}`;\n handleAttributes(props, result);\n result.template += isSelfClosing ? '/>' : '>';\n if (!isSelfClosing) {\n transformChildren(path, result);\n result.template += `</${tagName}>`;\n }\n }\n } else {\n result.index--;\n transformChildren(path, result);\n }\n}\n\n/**\n * Retrieves the children of the given JSX element path, filters out invalid children, and transforms valid children based on their type.\n *\n * @param {NodePath<t.JSXElement>} path - the JSX element path\n * @return {JSXChild[]} an array of transformed JSX children\n */\nfunction getChildren(path: NodePath<t.JSXElement>): JSXChild[] {\n return path\n .get('children')\n .filter(isValidChild)\n .map(child => {\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSX(child);\n } else if (child.isJSXExpressionContainer()) {\n child.replaceWith(child.get('expression'));\n } else if (child.isJSXText()) {\n child.replaceWith(t.stringLiteral(child.node.value));\n } else {\n throw new Error('Unsupported JSX child');\n }\n return child.node;\n });\n}\n\n/**\n * Handles attributes from props and updates the result object with template, props, index.\n *\n * @param {Record<string, any>} props - The attributes to be handled\n * @param {Result} result - The result object to be updated with template, props, index\n * @return {void}\n */\nfunction handleAttributes(props: Record<string, any>, result: Result): void {\n let klass = '';\n let style = '';\n\n for (const prop in props) {\n const value = props[prop];\n\n if (prop === 'class' && typeof value === 'string') {\n klass += ` ${value}`;\n delete props[prop];\n continue;\n }\n if (prop.indexOf('class:') === 0) {\n if (value === true) {\n const name = prop.replace(/^class:/, '');\n klass += ` ${name}`;\n delete props[prop];\n continue;\n }\n if (value === false) {\n delete props[prop];\n continue;\n }\n }\n\n if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\n delete props[prop];\n continue;\n }\n if (prop.indexOf('style:') === 0 && (typeof value === 'string' || typeof value === 'number')) {\n const name = prop.replace(/^style:/, '');\n style += `${name}:${value};`;\n delete props[prop];\n continue;\n }\n\n if (value === true) {\n result.template += ` ${prop}`;\n delete props[prop];\n }\n if (value === false) {\n delete props[prop];\n }\n if (typeof value === 'string' || typeof value === 'number') {\n result.template += ` ${prop}=\"${value}\"`;\n delete props[prop];\n }\n }\n\n if (Object.keys(props).length > 0) {\n result.props[result.index] = props;\n }\n\n klass = klass.trim();\n style = style.trim();\n\n if (klass) {\n result.template += ` class=\"${klass}\"`;\n }\n if (style) {\n result.template += ` style=\"${style}\"`;\n }\n}\n\n/**\n * Transforms the children of the given JSX element path and updates the result object accordingly.\n *\n * @param {NodePath<JSXElement>} path - The path of the JSX element whose children are to be transformed\n * @param {Result} result - The result object to be updated during the transformation\n * @return {void} This function does not return a value\n */\nfunction transformChildren(path: NodePath<JSXElement>, result: Result): void {\n const parentIndex = result.index;\n path\n .get('children')\n .reduce((acc, child) => {\n if (isValidChild(child)) {\n const lastChild = acc.at(-1);\n if (lastChild && isTextChild(child) && isTextChild(lastChild)) {\n setNodeText(lastChild, getNodeText(lastChild) + getNodeText(child));\n } else {\n acc.push(child);\n }\n }\n return acc;\n }, [] as NodePath<JSXChild>[])\n .forEach((child, i, arr) => {\n result.parentIndex = parentIndex;\n result.isLastChild = i === arr.length - 1;\n transformChild(child, result);\n });\n}\n\n/**\n * Transform a JSX child node.\n *\n * @param {NodePath<JSXChild>} child - the JSX child node to transform\n * @param {Result} result - the result object to store transformation results\n */\nfunction transformChild(child: NodePath<JSXChild>, result: Result) {\n result.index++;\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformElement(child, result);\n } else if (child.isJSXExpressionContainer()) {\n const expression = child.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n result.template += expression.node.value;\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else {\n throw new Error('Unsupported JSX child');\n }\n } else if (child.isJSXText()) {\n result.template += child.node.value;\n } else {\n throw new Error('Unsupported JSX child');\n }\n}\n\n/**\n * Replaces a child node with the provided result.\n *\n * @param {t.Expression} node - the node to be replaced\n * @param {Result} result - the result to replace the node with\n * @return {void}\n */\nfunction replaceChild(node: t.Expression, result: Result): void {\n if (result.isLastChild) {\n result.index--;\n } else {\n result.template += '<!>';\n }\n result.props[result.parentIndex] ??= {};\n result.props[result.parentIndex].children ??= [];\n result.props[result.parentIndex].children.push(\n t.arrayExpression([\n t.arrowFunctionExpression([], node),\n result.isLastChild ? t.nullLiteral() : t.identifier(String(result.index)),\n ]),\n );\n}\n\nfunction getAttrName(attribute: t.JSXAttribute): string {\n if (t.isJSXIdentifier(attribute.name)) {\n return attribute.name.name;\n }\n if (t.isJSXNamespacedName(attribute.name)) {\n return `${attribute.name.namespace.name}:${attribute.name.name.name}`;\n }\n throw new Error('Unsupported attribute type');\n}\n\nfunction getNodeText(path: NodePath<JSXChild>): string {\n if (path.isJSXText()) {\n return path.node.value;\n }\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n return String(expression.node.value);\n }\n }\n return '';\n}\n\nfunction setNodeText(path: NodePath<JSXChild>, text: string): void {\n if (path.isJSXText()) {\n path.node.value = text;\n }\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n expression.replaceWith(t.stringLiteral(text));\n }\n }\n}\n\nfunction getTagName(node: t.JSXElement): string {\n const jsxName = node.openingElement.name;\n return jsxElementNameToString(jsxName);\n}\n\nfunction isComponent(tagName: string): boolean {\n return (\n (tagName[0] && tagName[0].toLowerCase() !== tagName[0]) ||\n tagName.includes('.') ||\n /[^A-Za-z]/.test(tagName[0])\n );\n}\n\nfunction isTextChild(path: NodePath<JSXChild>): boolean {\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isJSXText() || expression.isStringLiteral() || expression.isNumericLiteral()) {\n return true;\n }\n }\n if (path.isJSXText() || path.isStringLiteral() || path.isNullLiteral()) {\n return true;\n }\n return false;\n}\n\nfunction isValidChild(path: NodePath<JSXChild>): boolean {\n const regex = /^\\s*$/;\n if (path.isStringLiteral() || path.isJSXText()) {\n return !regex.test(path.node.value);\n }\n return Object.keys(path.node).length > 0;\n}\n\nfunction jsxElementNameToString(\n node: t.JSXMemberExpression | t.JSXIdentifier | t.JSXNamespacedName,\n): string {\n if (t.isJSXMemberExpression(node)) {\n return `${jsxElementNameToString(node.object)}.${node.property.name}`;\n }\n if (t.isJSXIdentifier(node) || t.isIdentifier(node)) {\n return node.name;\n }\n return `${node.namespace.name}:${node.name.name}`;\n}\n","import { types as t } from '@babel/core';\nimport { type Identifier, type VariableDeclarator, cloneNode } from '@babel/types';\nimport { imports } from './constants';\nimport type { NodePath } from '@babel/core';\n\nexport function replaceSymbol(path: NodePath<VariableDeclarator>) {\n const init = path.node.init;\n const variableName = (path.node.id as Identifier).name;\n\n // pattern does not need to be replaced\n if (t.isObjectPattern(path.node.id) || t.isArrayPattern(path.node.id)) {\n return;\n }\n if (!variableName.startsWith('$')) {\n return;\n }\n\n if (\n init &&\n (t.isFunctionExpression(init) || t.isArrowFunctionExpression(init)) &&\n (path.parent as t.VariableDeclaration).kind === 'const'\n ) {\n const newInit = t.callExpression(t.identifier(path.state.computed.name), init ? [init] : []);\n imports.add('computed');\n path.node.init = newInit;\n } else {\n const originalImportDeclarationNodes = cloneNode(path.get('id').node, true);\n\n const newInit = t.callExpression(t.identifier(path.state.signal.name), init ? [init] : []);\n imports.add('signal');\n path.node.init = newInit;\n\n path.scope.rename(variableName, `${variableName}.value`);\n path.get('id').replaceWith(originalImportDeclarationNodes);\n\n path.scope.traverse(path.scope.block, {\n Identifier(innerPath) {\n if (t.isExportSpecifier(innerPath.parent)) {\n const { name } = innerPath.node;\n if (name.endsWith('.value')) {\n innerPath.node.name = name.slice(0, -6);\n }\n }\n },\n });\n }\n}\n","export function replaceImport(path) {\n const imports = path.node.specifiers;\n imports.forEach(specifier => {\n const variableName = specifier.local.name;\n if (variableName.indexOf('$') === 0) {\n path.scope.rename(variableName, `${variableName}.value`);\n specifier.local.name = `${variableName}`;\n }\n });\n}\n"],"mappings":"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","names":["t","import_core","t","value","import_core","t","imports"]}
package/dist/index.js CHANGED
@@ -46,8 +46,8 @@ var transformProgram = {
46
46
  enter(path) {
47
47
  path.state = {
48
48
  h: path.scope.generateUidIdentifier("h$"),
49
- signal: path.scope.generateUidIdentifier("signal$"),
50
- computed: path.scope.generateUidIdentifier("computed$"),
49
+ useSignal: path.scope.generateUidIdentifier("useSignal$"),
50
+ useComputed: path.scope.generateUidIdentifier("useComputed$"),
51
51
  template: path.scope.generateUidIdentifier("template$"),
52
52
  signalObject: path.scope.generateUidIdentifier("signalObject&"),
53
53
  tmplDeclaration: t.variableDeclaration("const", [])
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/transform.ts","../src/constants.ts","../src/jsx-transform.ts","../src/symbol-replace.ts","../src/import-replace.ts","../src/index.ts"],"sourcesContent":["import { types as t } from '@babel/core';\nimport { imports } from './constants';\nimport type { NodePath } from '@babel/core';\nimport type { State } from './types';\n\nexport const transformProgram = {\n enter(path: NodePath<t.Program>) {\n path.state = {\n h: path.scope.generateUidIdentifier('h$'),\n signal: path.scope.generateUidIdentifier('signal$'),\n computed: path.scope.generateUidIdentifier('computed$'),\n template: path.scope.generateUidIdentifier('template$'),\n signalObject: path.scope.generateUidIdentifier('signalObject&'),\n tmplDeclaration: t.variableDeclaration('const', []),\n } as State;\n\n imports.clear();\n },\n exit(path: NodePath<t.Program>) {\n const state: State = path.state;\n\n if (state.tmplDeclaration.declarations.length > 0) {\n const index = path.node.body.findIndex(\n node => !t.isImportDeclaration(node) && !t.isExportDeclaration(node),\n );\n path.node.body.splice(index, 0, state.tmplDeclaration);\n }\n\n if (imports.size > 0) {\n path.node.body.unshift(createImport(state, 'essor'));\n }\n },\n};\nfunction createImport(state: State, from: string) {\n const ImportSpecifier: t.ImportSpecifier[] = [];\n imports.forEach(name => {\n const local = t.identifier(state[name].name);\n const imported = t.identifier(name);\n ImportSpecifier.push(t.importSpecifier(local, imported));\n });\n\n const importSource = t.stringLiteral(from);\n return t.importDeclaration(ImportSpecifier, importSource);\n}\n","export const selfClosingTags = [\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\nexport const svgTags = [\n 'circle',\n 'clipPath',\n 'defs',\n 'ellipse',\n 'filter',\n 'g',\n 'line',\n 'linearGradient',\n 'mask',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialGradient',\n 'rect',\n 'stop',\n 'symbol',\n 'text',\n 'use',\n];\nexport const imports = new Set<string>();\n","import { types as t } from '@babel/core';\nimport { imports, selfClosingTags, svgTags } from './constants';\nimport type { NodePath } from '@babel/core';\nimport type { State } from './types';\n\ninterface Result {\n index: number;\n isLastChild: boolean;\n parentIndex: number;\n props: Record<string, any>;\n template: string;\n}\n\ntype JSXElement = t.JSXElement | t.JSXFragment;\n\ntype JSXChild =\n | t.JSXElement\n | t.JSXFragment\n | t.JSXExpressionContainer\n | t.JSXSpreadChild\n | t.JSXText;\n\n/**\n * Transform JSX element and replace it with a new ES Node.\n *\n * @param {NodePath<JSXElement>} path - The path to the JSX element to transform\n * @return {void}\n */\nexport function transformJSX(path: NodePath<JSXElement>): void {\n const result: Result = {\n index: 1,\n isLastChild: false,\n parentIndex: 0,\n props: {},\n template: '',\n };\n transformElement(path, result, true);\n path.replaceWith(createEssorNode(path, result));\n}\n\n/**\n * Generate a call expression for creating an Essor node based on the given JSXElement path and result.\n *\n * @param {NodePath<JSXElement>} path - The path to the JSXElement\n * @param {Result} result - The result object\n * @return {t.CallExpression} The call expression for creating the Essor node\n */\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n let tmpl: t.Identifier;\n\n if (path.isJSXElement() && isComponent(getTagName(path.node))) {\n tmpl = t.identifier(getTagName(path.node));\n } else {\n tmpl = path.scope.generateUidIdentifier('_tmpl$');\n const template = t.callExpression(state.template, [t.stringLiteral(result.template)]);\n const declarator = t.variableDeclarator(tmpl, template);\n state.tmplDeclaration.declarations.push(declarator);\n imports.add('template');\n }\n\n const args = [tmpl, createProps(result.props)];\n const key = result.props.key ?? result.props[0]?.key;\n\n if (key) {\n args.push(key);\n }\n imports.add('h');\n return t.callExpression(state.h, args);\n}\n\n/**\n * Generate an object expression based on the given props object.\n *\n * @param {Record<string, any>} props - The object containing the properties to be transformed into an object expression.\n * @return {t.ObjectExpression} The object expression generated from the props object.\n */\nfunction createProps(props: Record<string, any>): t.ObjectExpression {\n const result: (t.ObjectProperty | t.SpreadElement)[] = [];\n\n for (const prop in props) {\n let value = props[prop];\n\n if (prop === 'key') {\n continue;\n }\n\n if (Array.isArray(value)) {\n value = t.arrayExpression(value);\n }\n\n if (typeof value === 'object' && value !== null && !t.isNode(value)) {\n value = createProps(value);\n }\n\n if (typeof value === 'string') {\n value = t.stringLiteral(value);\n }\n\n if (typeof value === 'number') {\n value = t.numericLiteral(value);\n }\n\n if (typeof value === 'boolean') {\n value = t.booleanLiteral(value);\n }\n\n if (value === undefined) {\n value = t.tsUndefinedKeyword();\n }\n\n if (value === null) {\n value = t.nullLiteral();\n }\n\n if (prop === '_$spread$') {\n result.push(t.spreadElement(value));\n } else {\n result.push(t.objectProperty(t.stringLiteral(prop), value));\n }\n }\n\n return t.objectExpression(result);\n}\n\n/**\n * Generates a record of JSX element attributes.\n *\n * @param {NodePath<t.JSXElement>} path - the NodePath of the JSX element\n * @return {Record<string, any>} the generated record of attributes\n */\nfunction getAttrProps(path: NodePath<t.JSXElement>): Record<string, any> {\n const props: Record<string, any> = {};\n\n path\n .get('openingElement')\n .get('attributes')\n .forEach(attribute => {\n if (attribute.isJSXAttribute()) {\n const name = getAttrName(attribute.node);\n const value = attribute.get('value');\n\n if (!value.node) {\n props[name] = true;\n } else if (value.isStringLiteral()) {\n props[name] = value.node.value;\n } else {\n if (value.isJSXExpressionContainer()) {\n const expression = value.get('expression');\n\n if (expression.isStringLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isNumericLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isJSXElement() || expression.isJSXFragment()) {\n transformJSX(expression);\n props[name] = expression.node;\n } else if (expression.isExpression()) {\n if (/^key|ref|on.+$/.test(name)) {\n props[name] = expression.node;\n } else if (/^bind:.+/.test(name)) {\n props[name] = t.arrowFunctionExpression([], expression.node);\n const value = path.scope.generateUidIdentifier('value');\n props[`update:${name.slice(5).toLocaleLowerCase()}`] = t.arrowFunctionExpression(\n [value],\n t.assignmentExpression('=', expression.node as any, value),\n );\n } else {\n if (expression.isConditionalExpression()) {\n props[name] = t.arrowFunctionExpression([], expression.node);\n } else {\n props[name] = expression.node;\n }\n }\n }\n } else if (value.isJSXElement() || value.isJSXFragment()) {\n transformJSX(value);\n props[name] = value.node;\n }\n }\n } else if (attribute.isJSXSpreadAttribute()) {\n props._$spread$ = attribute.get('argument').node;\n } else {\n throw new Error('Unsupported attribute type');\n }\n });\n\n return props;\n}\n\n/**\n * Transforms the given JSX element and updates the result.\n *\n * @param {NodePath<JSXElement>} path - the path of the JSX element to transform\n * @param {Result} result - the result object to update\n * @param {boolean} [isRoot] - indicates if the current element is the root element\n * @return {void}\n */\nfunction transformElement(path: NodePath<JSXElement>, result: Result, isRoot?: boolean): void {\n if (path.isJSXElement()) {\n const tagName = getTagName(path.node);\n const tagIsComponent = isComponent(tagName);\n const isSelfClosing = !tagIsComponent && selfClosingTags.includes(tagName);\n const isSvgTemplate = svgTags.includes(tagName) && result.index === 1;\n const props = getAttrProps(path);\n\n if (tagIsComponent) {\n if (isRoot) {\n result.props = props;\n const children = getChildren(path) as any;\n if (children.length > 0) {\n const childrenGetter = children.length === 1 ? children[0] : t.arrayExpression(children);\n result.props.children = childrenGetter;\n }\n } else {\n transformJSX(path);\n replaceChild(path.node, result);\n }\n } else {\n if (isSvgTemplate) {\n result.template += `<svg _svg_>`;\n }\n result.template += `<${tagName}`;\n handleAttributes(props, result);\n result.template += isSelfClosing ? '/>' : '>';\n if (!isSelfClosing) {\n transformChildren(path, result);\n result.template += `</${tagName}>`;\n }\n }\n } else {\n result.index--;\n transformChildren(path, result);\n }\n}\n\n/**\n * Retrieves the children of the given JSX element path, filters out invalid children, and transforms valid children based on their type.\n *\n * @param {NodePath<t.JSXElement>} path - the JSX element path\n * @return {JSXChild[]} an array of transformed JSX children\n */\nfunction getChildren(path: NodePath<t.JSXElement>): JSXChild[] {\n return path\n .get('children')\n .filter(isValidChild)\n .map(child => {\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSX(child);\n } else if (child.isJSXExpressionContainer()) {\n child.replaceWith(child.get('expression'));\n } else if (child.isJSXText()) {\n child.replaceWith(t.stringLiteral(child.node.value));\n } else {\n throw new Error('Unsupported JSX child');\n }\n return child.node;\n });\n}\n\n/**\n * Handles attributes from props and updates the result object with template, props, index.\n *\n * @param {Record<string, any>} props - The attributes to be handled\n * @param {Result} result - The result object to be updated with template, props, index\n * @return {void}\n */\nfunction handleAttributes(props: Record<string, any>, result: Result): void {\n let klass = '';\n let style = '';\n\n for (const prop in props) {\n const value = props[prop];\n\n if (prop === 'class' && typeof value === 'string') {\n klass += ` ${value}`;\n delete props[prop];\n continue;\n }\n if (prop.indexOf('class:') === 0) {\n if (value === true) {\n const name = prop.replace(/^class:/, '');\n klass += ` ${name}`;\n delete props[prop];\n continue;\n }\n if (value === false) {\n delete props[prop];\n continue;\n }\n }\n\n if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\n delete props[prop];\n continue;\n }\n if (prop.indexOf('style:') === 0 && (typeof value === 'string' || typeof value === 'number')) {\n const name = prop.replace(/^style:/, '');\n style += `${name}:${value};`;\n delete props[prop];\n continue;\n }\n\n if (value === true) {\n result.template += ` ${prop}`;\n delete props[prop];\n }\n if (value === false) {\n delete props[prop];\n }\n if (typeof value === 'string' || typeof value === 'number') {\n result.template += ` ${prop}=\"${value}\"`;\n delete props[prop];\n }\n }\n\n if (Object.keys(props).length > 0) {\n result.props[result.index] = props;\n }\n\n klass = klass.trim();\n style = style.trim();\n\n if (klass) {\n result.template += ` class=\"${klass}\"`;\n }\n if (style) {\n result.template += ` style=\"${style}\"`;\n }\n}\n\n/**\n * Transforms the children of the given JSX element path and updates the result object accordingly.\n *\n * @param {NodePath<JSXElement>} path - The path of the JSX element whose children are to be transformed\n * @param {Result} result - The result object to be updated during the transformation\n * @return {void} This function does not return a value\n */\nfunction transformChildren(path: NodePath<JSXElement>, result: Result): void {\n const parentIndex = result.index;\n path\n .get('children')\n .reduce((acc, child) => {\n if (isValidChild(child)) {\n const lastChild = acc.at(-1);\n if (lastChild && isTextChild(child) && isTextChild(lastChild)) {\n setNodeText(lastChild, getNodeText(lastChild) + getNodeText(child));\n } else {\n acc.push(child);\n }\n }\n return acc;\n }, [] as NodePath<JSXChild>[])\n .forEach((child, i, arr) => {\n result.parentIndex = parentIndex;\n result.isLastChild = i === arr.length - 1;\n transformChild(child, result);\n });\n}\n\n/**\n * Transform a JSX child node.\n *\n * @param {NodePath<JSXChild>} child - the JSX child node to transform\n * @param {Result} result - the result object to store transformation results\n */\nfunction transformChild(child: NodePath<JSXChild>, result: Result) {\n result.index++;\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformElement(child, result);\n } else if (child.isJSXExpressionContainer()) {\n const expression = child.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n result.template += expression.node.value;\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else {\n throw new Error('Unsupported JSX child');\n }\n } else if (child.isJSXText()) {\n result.template += child.node.value;\n } else {\n throw new Error('Unsupported JSX child');\n }\n}\n\n/**\n * Replaces a child node with the provided result.\n *\n * @param {t.Expression} node - the node to be replaced\n * @param {Result} result - the result to replace the node with\n * @return {void}\n */\nfunction replaceChild(node: t.Expression, result: Result): void {\n if (result.isLastChild) {\n result.index--;\n } else {\n result.template += '<!>';\n }\n result.props[result.parentIndex] ??= {};\n result.props[result.parentIndex].children ??= [];\n result.props[result.parentIndex].children.push(\n t.arrayExpression([\n t.arrowFunctionExpression([], node),\n result.isLastChild ? t.nullLiteral() : t.identifier(String(result.index)),\n ]),\n );\n}\n\nfunction getAttrName(attribute: t.JSXAttribute): string {\n if (t.isJSXIdentifier(attribute.name)) {\n return attribute.name.name;\n }\n if (t.isJSXNamespacedName(attribute.name)) {\n return `${attribute.name.namespace.name}:${attribute.name.name.name}`;\n }\n throw new Error('Unsupported attribute type');\n}\n\nfunction getNodeText(path: NodePath<JSXChild>): string {\n if (path.isJSXText()) {\n return path.node.value;\n }\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n return String(expression.node.value);\n }\n }\n return '';\n}\n\nfunction setNodeText(path: NodePath<JSXChild>, text: string): void {\n if (path.isJSXText()) {\n path.node.value = text;\n }\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n expression.replaceWith(t.stringLiteral(text));\n }\n }\n}\n\nfunction getTagName(node: t.JSXElement): string {\n const jsxName = node.openingElement.name;\n return jsxElementNameToString(jsxName);\n}\n\nfunction isComponent(tagName: string): boolean {\n return (\n (tagName[0] && tagName[0].toLowerCase() !== tagName[0]) ||\n tagName.includes('.') ||\n /[^A-Za-z]/.test(tagName[0])\n );\n}\n\nfunction isTextChild(path: NodePath<JSXChild>): boolean {\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isJSXText() || expression.isStringLiteral() || expression.isNumericLiteral()) {\n return true;\n }\n }\n if (path.isJSXText() || path.isStringLiteral() || path.isNullLiteral()) {\n return true;\n }\n return false;\n}\n\nfunction isValidChild(path: NodePath<JSXChild>): boolean {\n const regex = /^\\s*$/;\n if (path.isStringLiteral() || path.isJSXText()) {\n return !regex.test(path.node.value);\n }\n return Object.keys(path.node).length > 0;\n}\n\nfunction jsxElementNameToString(\n node: t.JSXMemberExpression | t.JSXIdentifier | t.JSXNamespacedName,\n): string {\n if (t.isJSXMemberExpression(node)) {\n return `${jsxElementNameToString(node.object)}.${node.property.name}`;\n }\n if (t.isJSXIdentifier(node) || t.isIdentifier(node)) {\n return node.name;\n }\n return `${node.namespace.name}:${node.name.name}`;\n}\n","import { types as t } from '@babel/core';\nimport { type Identifier, type VariableDeclarator, cloneNode } from '@babel/types';\nimport { imports } from './constants';\nimport type { NodePath } from '@babel/core';\n\nexport function replaceSymbol(path: NodePath<VariableDeclarator>) {\n const init = path.node.init;\n const variableName = (path.node.id as Identifier).name;\n\n // pattern does not need to be replaced\n if (t.isObjectPattern(path.node.id) || t.isArrayPattern(path.node.id)) {\n return;\n }\n if (!variableName.startsWith('$')) {\n return;\n }\n\n if (\n init &&\n (t.isFunctionExpression(init) || t.isArrowFunctionExpression(init)) &&\n (path.parent as t.VariableDeclaration).kind === 'const'\n ) {\n const newInit = t.callExpression(t.identifier(path.state.computed.name), init ? [init] : []);\n imports.add('computed');\n path.node.init = newInit;\n } else {\n const originalImportDeclarationNodes = cloneNode(path.get('id').node, true);\n\n const newInit = t.callExpression(t.identifier(path.state.signal.name), init ? [init] : []);\n imports.add('signal');\n path.node.init = newInit;\n\n path.scope.rename(variableName, `${variableName}.value`);\n path.get('id').replaceWith(originalImportDeclarationNodes);\n\n path.scope.traverse(path.scope.block, {\n Identifier(innerPath) {\n if (t.isExportSpecifier(innerPath.parent)) {\n const { name } = innerPath.node;\n if (name.endsWith('.value')) {\n innerPath.node.name = name.slice(0, -6);\n }\n }\n },\n });\n }\n}\n","export function replaceImport(path) {\n const imports = path.node.specifiers;\n imports.forEach(specifier => {\n const variableName = specifier.local.name;\n if (variableName.indexOf('$') === 0) {\n path.scope.rename(variableName, `${variableName}.value`);\n specifier.local.name = `${variableName}`;\n }\n });\n}\n","import { transformProgram } from './transform';\nimport { transformJSX } from './jsx-transform';\nimport { replaceSymbol } from './symbol-replace';\nimport { replaceImport } from './import-replace';\nimport type { PluginObj } from '@babel/core';\n\nexport default function (): PluginObj {\n return {\n name: 'babel-plugin-essor',\n manipulateOptions({ filename }, parserOpts) {\n if (filename.endsWith('ts') || filename.endsWith('tsx')) {\n parserOpts.plugins.push('typescript');\n }\n parserOpts.plugins.push('jsx');\n },\n visitor: {\n Program: transformProgram,\n JSXElement: transformJSX,\n JSXFragment: transformJSX,\n VariableDeclarator: replaceSymbol,\n ImportDeclaration: replaceImport,\n },\n };\n}\n"],"mappings":"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","names":["t","t","value","t","t","imports"]}
1
+ {"version":3,"sources":["../src/transform.ts","../src/constants.ts","../src/jsx-transform.ts","../src/symbol-replace.ts","../src/import-replace.ts","../src/index.ts"],"sourcesContent":["import { types as t } from '@babel/core';\nimport { imports } from './constants';\nimport type { NodePath } from '@babel/core';\nimport type { State } from './types';\n\nexport const transformProgram = {\n enter(path: NodePath<t.Program>) {\n path.state = {\n h: path.scope.generateUidIdentifier('h$'),\n useSignal: path.scope.generateUidIdentifier('useSignal$'),\n useComputed: path.scope.generateUidIdentifier('useComputed$'),\n template: path.scope.generateUidIdentifier('template$'),\n signalObject: path.scope.generateUidIdentifier('signalObject&'),\n tmplDeclaration: t.variableDeclaration('const', []),\n } as State;\n\n imports.clear();\n },\n exit(path: NodePath<t.Program>) {\n const state: State = path.state;\n\n if (state.tmplDeclaration.declarations.length > 0) {\n const index = path.node.body.findIndex(\n node => !t.isImportDeclaration(node) && !t.isExportDeclaration(node),\n );\n path.node.body.splice(index, 0, state.tmplDeclaration);\n }\n\n if (imports.size > 0) {\n path.node.body.unshift(createImport(state, 'essor'));\n }\n },\n};\nfunction createImport(state: State, from: string) {\n const ImportSpecifier: t.ImportSpecifier[] = [];\n imports.forEach(name => {\n const local = t.identifier(state[name].name);\n const imported = t.identifier(name);\n ImportSpecifier.push(t.importSpecifier(local, imported));\n });\n\n const importSource = t.stringLiteral(from);\n return t.importDeclaration(ImportSpecifier, importSource);\n}\n","export const selfClosingTags = [\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\nexport const svgTags = [\n 'circle',\n 'clipPath',\n 'defs',\n 'ellipse',\n 'filter',\n 'g',\n 'line',\n 'linearGradient',\n 'mask',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialGradient',\n 'rect',\n 'stop',\n 'symbol',\n 'text',\n 'use',\n];\nexport const imports = new Set<string>();\n","import { types as t } from '@babel/core';\nimport { imports, selfClosingTags, svgTags } from './constants';\nimport type { NodePath } from '@babel/core';\nimport type { State } from './types';\n\ninterface Result {\n index: number;\n isLastChild: boolean;\n parentIndex: number;\n props: Record<string, any>;\n template: string;\n}\n\ntype JSXElement = t.JSXElement | t.JSXFragment;\n\ntype JSXChild =\n | t.JSXElement\n | t.JSXFragment\n | t.JSXExpressionContainer\n | t.JSXSpreadChild\n | t.JSXText;\n\n/**\n * Transform JSX element and replace it with a new ES Node.\n *\n * @param {NodePath<JSXElement>} path - The path to the JSX element to transform\n * @return {void}\n */\nexport function transformJSX(path: NodePath<JSXElement>): void {\n const result: Result = {\n index: 1,\n isLastChild: false,\n parentIndex: 0,\n props: {},\n template: '',\n };\n transformElement(path, result, true);\n path.replaceWith(createEssorNode(path, result));\n}\n\n/**\n * Generate a call expression for creating an Essor node based on the given JSXElement path and result.\n *\n * @param {NodePath<JSXElement>} path - The path to the JSXElement\n * @param {Result} result - The result object\n * @return {t.CallExpression} The call expression for creating the Essor node\n */\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n let tmpl: t.Identifier;\n\n if (path.isJSXElement() && isComponent(getTagName(path.node))) {\n tmpl = t.identifier(getTagName(path.node));\n } else {\n tmpl = path.scope.generateUidIdentifier('_tmpl$');\n const template = t.callExpression(state.template, [t.stringLiteral(result.template)]);\n const declarator = t.variableDeclarator(tmpl, template);\n state.tmplDeclaration.declarations.push(declarator);\n imports.add('template');\n }\n\n const args = [tmpl, createProps(result.props)];\n const key = result.props.key ?? result.props[0]?.key;\n\n if (key) {\n args.push(key);\n }\n imports.add('h');\n return t.callExpression(state.h, args);\n}\n\n/**\n * Generate an object expression based on the given props object.\n *\n * @param {Record<string, any>} props - The object containing the properties to be transformed into an object expression.\n * @return {t.ObjectExpression} The object expression generated from the props object.\n */\nfunction createProps(props: Record<string, any>): t.ObjectExpression {\n const result: (t.ObjectProperty | t.SpreadElement)[] = [];\n\n for (const prop in props) {\n let value = props[prop];\n\n if (prop === 'key') {\n continue;\n }\n\n if (Array.isArray(value)) {\n value = t.arrayExpression(value);\n }\n\n if (typeof value === 'object' && value !== null && !t.isNode(value)) {\n value = createProps(value);\n }\n\n if (typeof value === 'string') {\n value = t.stringLiteral(value);\n }\n\n if (typeof value === 'number') {\n value = t.numericLiteral(value);\n }\n\n if (typeof value === 'boolean') {\n value = t.booleanLiteral(value);\n }\n\n if (value === undefined) {\n value = t.tsUndefinedKeyword();\n }\n\n if (value === null) {\n value = t.nullLiteral();\n }\n\n if (prop === '_$spread$') {\n result.push(t.spreadElement(value));\n } else {\n result.push(t.objectProperty(t.stringLiteral(prop), value));\n }\n }\n\n return t.objectExpression(result);\n}\n\n/**\n * Generates a record of JSX element attributes.\n *\n * @param {NodePath<t.JSXElement>} path - the NodePath of the JSX element\n * @return {Record<string, any>} the generated record of attributes\n */\nfunction getAttrProps(path: NodePath<t.JSXElement>): Record<string, any> {\n const props: Record<string, any> = {};\n\n path\n .get('openingElement')\n .get('attributes')\n .forEach(attribute => {\n if (attribute.isJSXAttribute()) {\n const name = getAttrName(attribute.node);\n const value = attribute.get('value');\n\n if (!value.node) {\n props[name] = true;\n } else if (value.isStringLiteral()) {\n props[name] = value.node.value;\n } else {\n if (value.isJSXExpressionContainer()) {\n const expression = value.get('expression');\n\n if (expression.isStringLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isNumericLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isJSXElement() || expression.isJSXFragment()) {\n transformJSX(expression);\n props[name] = expression.node;\n } else if (expression.isExpression()) {\n if (/^key|ref|on.+$/.test(name)) {\n props[name] = expression.node;\n } else if (/^bind:.+/.test(name)) {\n props[name] = t.arrowFunctionExpression([], expression.node);\n const value = path.scope.generateUidIdentifier('value');\n props[`update:${name.slice(5).toLocaleLowerCase()}`] = t.arrowFunctionExpression(\n [value],\n t.assignmentExpression('=', expression.node as any, value),\n );\n } else {\n if (expression.isConditionalExpression()) {\n props[name] = t.arrowFunctionExpression([], expression.node);\n } else {\n props[name] = expression.node;\n }\n }\n }\n } else if (value.isJSXElement() || value.isJSXFragment()) {\n transformJSX(value);\n props[name] = value.node;\n }\n }\n } else if (attribute.isJSXSpreadAttribute()) {\n props._$spread$ = attribute.get('argument').node;\n } else {\n throw new Error('Unsupported attribute type');\n }\n });\n\n return props;\n}\n\n/**\n * Transforms the given JSX element and updates the result.\n *\n * @param {NodePath<JSXElement>} path - the path of the JSX element to transform\n * @param {Result} result - the result object to update\n * @param {boolean} [isRoot] - indicates if the current element is the root element\n * @return {void}\n */\nfunction transformElement(path: NodePath<JSXElement>, result: Result, isRoot?: boolean): void {\n if (path.isJSXElement()) {\n const tagName = getTagName(path.node);\n const tagIsComponent = isComponent(tagName);\n const isSelfClosing = !tagIsComponent && selfClosingTags.includes(tagName);\n const isSvgTemplate = svgTags.includes(tagName) && result.index === 1;\n const props = getAttrProps(path);\n\n if (tagIsComponent) {\n if (isRoot) {\n result.props = props;\n const children = getChildren(path) as any;\n if (children.length > 0) {\n const childrenGetter = children.length === 1 ? children[0] : t.arrayExpression(children);\n result.props.children = childrenGetter;\n }\n } else {\n transformJSX(path);\n replaceChild(path.node, result);\n }\n } else {\n if (isSvgTemplate) {\n result.template += `<svg _svg_>`;\n }\n result.template += `<${tagName}`;\n handleAttributes(props, result);\n result.template += isSelfClosing ? '/>' : '>';\n if (!isSelfClosing) {\n transformChildren(path, result);\n result.template += `</${tagName}>`;\n }\n }\n } else {\n result.index--;\n transformChildren(path, result);\n }\n}\n\n/**\n * Retrieves the children of the given JSX element path, filters out invalid children, and transforms valid children based on their type.\n *\n * @param {NodePath<t.JSXElement>} path - the JSX element path\n * @return {JSXChild[]} an array of transformed JSX children\n */\nfunction getChildren(path: NodePath<t.JSXElement>): JSXChild[] {\n return path\n .get('children')\n .filter(isValidChild)\n .map(child => {\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSX(child);\n } else if (child.isJSXExpressionContainer()) {\n child.replaceWith(child.get('expression'));\n } else if (child.isJSXText()) {\n child.replaceWith(t.stringLiteral(child.node.value));\n } else {\n throw new Error('Unsupported JSX child');\n }\n return child.node;\n });\n}\n\n/**\n * Handles attributes from props and updates the result object with template, props, index.\n *\n * @param {Record<string, any>} props - The attributes to be handled\n * @param {Result} result - The result object to be updated with template, props, index\n * @return {void}\n */\nfunction handleAttributes(props: Record<string, any>, result: Result): void {\n let klass = '';\n let style = '';\n\n for (const prop in props) {\n const value = props[prop];\n\n if (prop === 'class' && typeof value === 'string') {\n klass += ` ${value}`;\n delete props[prop];\n continue;\n }\n if (prop.indexOf('class:') === 0) {\n if (value === true) {\n const name = prop.replace(/^class:/, '');\n klass += ` ${name}`;\n delete props[prop];\n continue;\n }\n if (value === false) {\n delete props[prop];\n continue;\n }\n }\n\n if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\n delete props[prop];\n continue;\n }\n if (prop.indexOf('style:') === 0 && (typeof value === 'string' || typeof value === 'number')) {\n const name = prop.replace(/^style:/, '');\n style += `${name}:${value};`;\n delete props[prop];\n continue;\n }\n\n if (value === true) {\n result.template += ` ${prop}`;\n delete props[prop];\n }\n if (value === false) {\n delete props[prop];\n }\n if (typeof value === 'string' || typeof value === 'number') {\n result.template += ` ${prop}=\"${value}\"`;\n delete props[prop];\n }\n }\n\n if (Object.keys(props).length > 0) {\n result.props[result.index] = props;\n }\n\n klass = klass.trim();\n style = style.trim();\n\n if (klass) {\n result.template += ` class=\"${klass}\"`;\n }\n if (style) {\n result.template += ` style=\"${style}\"`;\n }\n}\n\n/**\n * Transforms the children of the given JSX element path and updates the result object accordingly.\n *\n * @param {NodePath<JSXElement>} path - The path of the JSX element whose children are to be transformed\n * @param {Result} result - The result object to be updated during the transformation\n * @return {void} This function does not return a value\n */\nfunction transformChildren(path: NodePath<JSXElement>, result: Result): void {\n const parentIndex = result.index;\n path\n .get('children')\n .reduce((acc, child) => {\n if (isValidChild(child)) {\n const lastChild = acc.at(-1);\n if (lastChild && isTextChild(child) && isTextChild(lastChild)) {\n setNodeText(lastChild, getNodeText(lastChild) + getNodeText(child));\n } else {\n acc.push(child);\n }\n }\n return acc;\n }, [] as NodePath<JSXChild>[])\n .forEach((child, i, arr) => {\n result.parentIndex = parentIndex;\n result.isLastChild = i === arr.length - 1;\n transformChild(child, result);\n });\n}\n\n/**\n * Transform a JSX child node.\n *\n * @param {NodePath<JSXChild>} child - the JSX child node to transform\n * @param {Result} result - the result object to store transformation results\n */\nfunction transformChild(child: NodePath<JSXChild>, result: Result) {\n result.index++;\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformElement(child, result);\n } else if (child.isJSXExpressionContainer()) {\n const expression = child.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n result.template += expression.node.value;\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else {\n throw new Error('Unsupported JSX child');\n }\n } else if (child.isJSXText()) {\n result.template += child.node.value;\n } else {\n throw new Error('Unsupported JSX child');\n }\n}\n\n/**\n * Replaces a child node with the provided result.\n *\n * @param {t.Expression} node - the node to be replaced\n * @param {Result} result - the result to replace the node with\n * @return {void}\n */\nfunction replaceChild(node: t.Expression, result: Result): void {\n if (result.isLastChild) {\n result.index--;\n } else {\n result.template += '<!>';\n }\n result.props[result.parentIndex] ??= {};\n result.props[result.parentIndex].children ??= [];\n result.props[result.parentIndex].children.push(\n t.arrayExpression([\n t.arrowFunctionExpression([], node),\n result.isLastChild ? t.nullLiteral() : t.identifier(String(result.index)),\n ]),\n );\n}\n\nfunction getAttrName(attribute: t.JSXAttribute): string {\n if (t.isJSXIdentifier(attribute.name)) {\n return attribute.name.name;\n }\n if (t.isJSXNamespacedName(attribute.name)) {\n return `${attribute.name.namespace.name}:${attribute.name.name.name}`;\n }\n throw new Error('Unsupported attribute type');\n}\n\nfunction getNodeText(path: NodePath<JSXChild>): string {\n if (path.isJSXText()) {\n return path.node.value;\n }\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n return String(expression.node.value);\n }\n }\n return '';\n}\n\nfunction setNodeText(path: NodePath<JSXChild>, text: string): void {\n if (path.isJSXText()) {\n path.node.value = text;\n }\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n expression.replaceWith(t.stringLiteral(text));\n }\n }\n}\n\nfunction getTagName(node: t.JSXElement): string {\n const jsxName = node.openingElement.name;\n return jsxElementNameToString(jsxName);\n}\n\nfunction isComponent(tagName: string): boolean {\n return (\n (tagName[0] && tagName[0].toLowerCase() !== tagName[0]) ||\n tagName.includes('.') ||\n /[^A-Za-z]/.test(tagName[0])\n );\n}\n\nfunction isTextChild(path: NodePath<JSXChild>): boolean {\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isJSXText() || expression.isStringLiteral() || expression.isNumericLiteral()) {\n return true;\n }\n }\n if (path.isJSXText() || path.isStringLiteral() || path.isNullLiteral()) {\n return true;\n }\n return false;\n}\n\nfunction isValidChild(path: NodePath<JSXChild>): boolean {\n const regex = /^\\s*$/;\n if (path.isStringLiteral() || path.isJSXText()) {\n return !regex.test(path.node.value);\n }\n return Object.keys(path.node).length > 0;\n}\n\nfunction jsxElementNameToString(\n node: t.JSXMemberExpression | t.JSXIdentifier | t.JSXNamespacedName,\n): string {\n if (t.isJSXMemberExpression(node)) {\n return `${jsxElementNameToString(node.object)}.${node.property.name}`;\n }\n if (t.isJSXIdentifier(node) || t.isIdentifier(node)) {\n return node.name;\n }\n return `${node.namespace.name}:${node.name.name}`;\n}\n","import { types as t } from '@babel/core';\nimport { type Identifier, type VariableDeclarator, cloneNode } from '@babel/types';\nimport { imports } from './constants';\nimport type { NodePath } from '@babel/core';\n\nexport function replaceSymbol(path: NodePath<VariableDeclarator>) {\n const init = path.node.init;\n const variableName = (path.node.id as Identifier).name;\n\n // pattern does not need to be replaced\n if (t.isObjectPattern(path.node.id) || t.isArrayPattern(path.node.id)) {\n return;\n }\n if (!variableName.startsWith('$')) {\n return;\n }\n\n if (\n init &&\n (t.isFunctionExpression(init) || t.isArrowFunctionExpression(init)) &&\n (path.parent as t.VariableDeclaration).kind === 'const'\n ) {\n const newInit = t.callExpression(t.identifier(path.state.computed.name), init ? [init] : []);\n imports.add('computed');\n path.node.init = newInit;\n } else {\n const originalImportDeclarationNodes = cloneNode(path.get('id').node, true);\n\n const newInit = t.callExpression(t.identifier(path.state.signal.name), init ? [init] : []);\n imports.add('signal');\n path.node.init = newInit;\n\n path.scope.rename(variableName, `${variableName}.value`);\n path.get('id').replaceWith(originalImportDeclarationNodes);\n\n path.scope.traverse(path.scope.block, {\n Identifier(innerPath) {\n if (t.isExportSpecifier(innerPath.parent)) {\n const { name } = innerPath.node;\n if (name.endsWith('.value')) {\n innerPath.node.name = name.slice(0, -6);\n }\n }\n },\n });\n }\n}\n","export function replaceImport(path) {\n const imports = path.node.specifiers;\n imports.forEach(specifier => {\n const variableName = specifier.local.name;\n if (variableName.indexOf('$') === 0) {\n path.scope.rename(variableName, `${variableName}.value`);\n specifier.local.name = `${variableName}`;\n }\n });\n}\n","import { transformProgram } from './transform';\nimport { transformJSX } from './jsx-transform';\nimport { replaceSymbol } from './symbol-replace';\nimport { replaceImport } from './import-replace';\nimport type { PluginObj } from '@babel/core';\n\nexport default function (): PluginObj {\n return {\n name: 'babel-plugin-essor',\n manipulateOptions({ filename }, parserOpts) {\n if (filename.endsWith('ts') || filename.endsWith('tsx')) {\n parserOpts.plugins.push('typescript');\n }\n parserOpts.plugins.push('jsx');\n },\n visitor: {\n Program: transformProgram,\n JSXElement: transformJSX,\n JSXFragment: transformJSX,\n VariableDeclarator: replaceSymbol,\n ImportDeclaration: replaceImport,\n },\n };\n}\n"],"mappings":";AAAA,SAAS,SAAS,SAAS;;;ACApB,IAAM,kBAAkB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,UAAU;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AACO,IAAM,UAAU,oBAAI,IAAY;;;ADjChC,IAAM,mBAAmB;AAAA,EAC9B,MAAM,MAA2B;AAC/B,SAAK,QAAQ;AAAA,MACX,GAAG,KAAK,MAAM,sBAAsB,IAAI;AAAA,MACxC,WAAW,KAAK,MAAM,sBAAsB,YAAY;AAAA,MACxD,aAAa,KAAK,MAAM,sBAAsB,cAAc;AAAA,MAC5D,UAAU,KAAK,MAAM,sBAAsB,WAAW;AAAA,MACtD,cAAc,KAAK,MAAM,sBAAsB,eAAe;AAAA,MAC9D,iBAAiB,EAAE,oBAAoB,SAAS,CAAC,CAAC;AAAA,IACpD;AAEA,YAAQ,MAAM;AAAA,EAChB;AAAA,EACA,KAAK,MAA2B;AAC9B,UAAM,QAAe,KAAK;AAE1B,QAAI,MAAM,gBAAgB,aAAa,SAAS,GAAG;AACjD,YAAM,QAAQ,KAAK,KAAK,KAAK;AAAA,QAC3B,UAAQ,CAAC,EAAE,oBAAoB,IAAI,KAAK,CAAC,EAAE,oBAAoB,IAAI;AAAA,MACrE;AACA,WAAK,KAAK,KAAK,OAAO,OAAO,GAAG,MAAM,eAAe;AAAA,IACvD;AAEA,QAAI,QAAQ,OAAO,GAAG;AACpB,WAAK,KAAK,KAAK,QAAQ,aAAa,OAAO,OAAO,CAAC;AAAA,IACrD;AAAA,EACF;AACF;AACA,SAAS,aAAa,OAAc,MAAc;AAChD,QAAM,kBAAuC,CAAC;AAC9C,UAAQ,QAAQ,UAAQ;AACtB,UAAM,QAAQ,EAAE,WAAW,MAAM,IAAI,EAAE,IAAI;AAC3C,UAAM,WAAW,EAAE,WAAW,IAAI;AAClC,oBAAgB,KAAK,EAAE,gBAAgB,OAAO,QAAQ,CAAC;AAAA,EACzD,CAAC;AAED,QAAM,eAAe,EAAE,cAAc,IAAI;AACzC,SAAO,EAAE,kBAAkB,iBAAiB,YAAY;AAC1D;;;AE3CA,SAAS,SAASA,UAAS;AA4BpB,SAAS,aAAa,MAAkC;AAC7D,QAAM,SAAiB;AAAA,IACrB,OAAO;AAAA,IACP,aAAa;AAAA,IACb,aAAa;AAAA,IACb,OAAO,CAAC;AAAA,IACR,UAAU;AAAA,EACZ;AACA,mBAAiB,MAAM,QAAQ,IAAI;AACnC,OAAK,YAAY,gBAAgB,MAAM,MAAM,CAAC;AAChD;AASA,SAAS,gBAAgB,MAA4B,QAAkC;AA/CvF;AAgDE,QAAM,QAAe,KAAK;AAC1B,MAAI;AAEJ,MAAI,KAAK,aAAa,KAAK,YAAY,WAAW,KAAK,IAAI,CAAC,GAAG;AAC7D,WAAOC,GAAE,WAAW,WAAW,KAAK,IAAI,CAAC;AAAA,EAC3C,OAAO;AACL,WAAO,KAAK,MAAM,sBAAsB,QAAQ;AAChD,UAAM,WAAWA,GAAE,eAAe,MAAM,UAAU,CAACA,GAAE,cAAc,OAAO,QAAQ,CAAC,CAAC;AACpF,UAAM,aAAaA,GAAE,mBAAmB,MAAM,QAAQ;AACtD,UAAM,gBAAgB,aAAa,KAAK,UAAU;AAClD,YAAQ,IAAI,UAAU;AAAA,EACxB;AAEA,QAAM,OAAO,CAAC,MAAM,YAAY,OAAO,KAAK,CAAC;AAC7C,QAAM,OAAM,YAAO,MAAM,QAAb,aAAoB,YAAO,MAAM,CAAC,MAAd,mBAAiB;AAEjD,MAAI,KAAK;AACP,SAAK,KAAK,GAAG;AAAA,EACf;AACA,UAAQ,IAAI,GAAG;AACf,SAAOA,GAAE,eAAe,MAAM,GAAG,IAAI;AACvC;AAQA,SAAS,YAAY,OAAgD;AACnE,QAAM,SAAiD,CAAC;AAExD,aAAW,QAAQ,OAAO;AACxB,QAAI,QAAQ,MAAM,IAAI;AAEtB,QAAI,SAAS,OAAO;AAClB;AAAA,IACF;AAEA,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,cAAQA,GAAE,gBAAgB,KAAK;AAAA,IACjC;AAEA,QAAI,OAAO,UAAU,YAAY,UAAU,QAAQ,CAACA,GAAE,OAAO,KAAK,GAAG;AACnE,cAAQ,YAAY,KAAK;AAAA,IAC3B;AAEA,QAAI,OAAO,UAAU,UAAU;AAC7B,cAAQA,GAAE,cAAc,KAAK;AAAA,IAC/B;AAEA,QAAI,OAAO,UAAU,UAAU;AAC7B,cAAQA,GAAE,eAAe,KAAK;AAAA,IAChC;AAEA,QAAI,OAAO,UAAU,WAAW;AAC9B,cAAQA,GAAE,eAAe,KAAK;AAAA,IAChC;AAEA,QAAI,UAAU,QAAW;AACvB,cAAQA,GAAE,mBAAmB;AAAA,IAC/B;AAEA,QAAI,UAAU,MAAM;AAClB,cAAQA,GAAE,YAAY;AAAA,IACxB;AAEA,QAAI,SAAS,aAAa;AACxB,aAAO,KAAKA,GAAE,cAAc,KAAK,CAAC;AAAA,IACpC,OAAO;AACL,aAAO,KAAKA,GAAE,eAAeA,GAAE,cAAc,IAAI,GAAG,KAAK,CAAC;AAAA,IAC5D;AAAA,EACF;AAEA,SAAOA,GAAE,iBAAiB,MAAM;AAClC;AAQA,SAAS,aAAa,MAAmD;AACvE,QAAM,QAA6B,CAAC;AAEpC,OACG,IAAI,gBAAgB,EACpB,IAAI,YAAY,EAChB,QAAQ,eAAa;AACpB,QAAI,UAAU,eAAe,GAAG;AAC9B,YAAM,OAAO,YAAY,UAAU,IAAI;AACvC,YAAM,QAAQ,UAAU,IAAI,OAAO;AAEnC,UAAI,CAAC,MAAM,MAAM;AACf,cAAM,IAAI,IAAI;AAAA,MAChB,WAAW,MAAM,gBAAgB,GAAG;AAClC,cAAM,IAAI,IAAI,MAAM,KAAK;AAAA,MAC3B,OAAO;AACL,YAAI,MAAM,yBAAyB,GAAG;AACpC,gBAAM,aAAa,MAAM,IAAI,YAAY;AAEzC,cAAI,WAAW,gBAAgB,GAAG;AAChC,kBAAM,IAAI,IAAI,WAAW,KAAK;AAAA,UAChC,WAAW,WAAW,iBAAiB,GAAG;AACxC,kBAAM,IAAI,IAAI,WAAW,KAAK;AAAA,UAChC,WAAW,WAAW,aAAa,KAAK,WAAW,cAAc,GAAG;AAClE,yBAAa,UAAU;AACvB,kBAAM,IAAI,IAAI,WAAW;AAAA,UAC3B,WAAW,WAAW,aAAa,GAAG;AACpC,gBAAI,iBAAiB,KAAK,IAAI,GAAG;AAC/B,oBAAM,IAAI,IAAI,WAAW;AAAA,YAC3B,WAAW,WAAW,KAAK,IAAI,GAAG;AAChC,oBAAM,IAAI,IAAIA,GAAE,wBAAwB,CAAC,GAAG,WAAW,IAAI;AAC3D,oBAAMC,SAAQ,KAAK,MAAM,sBAAsB,OAAO;AACtD,oBAAM,UAAU,KAAK,MAAM,CAAC,EAAE,kBAAkB,CAAC,EAAE,IAAID,GAAE;AAAA,gBACvD,CAACC,MAAK;AAAA,gBACND,GAAE,qBAAqB,KAAK,WAAW,MAAaC,MAAK;AAAA,cAC3D;AAAA,YACF,OAAO;AACL,kBAAI,WAAW,wBAAwB,GAAG;AACxC,sBAAM,IAAI,IAAID,GAAE,wBAAwB,CAAC,GAAG,WAAW,IAAI;AAAA,cAC7D,OAAO;AACL,sBAAM,IAAI,IAAI,WAAW;AAAA,cAC3B;AAAA,YACF;AAAA,UACF;AAAA,QACF,WAAW,MAAM,aAAa,KAAK,MAAM,cAAc,GAAG;AACxD,uBAAa,KAAK;AAClB,gBAAM,IAAI,IAAI,MAAM;AAAA,QACtB;AAAA,MACF;AAAA,IACF,WAAW,UAAU,qBAAqB,GAAG;AAC3C,YAAM,YAAY,UAAU,IAAI,UAAU,EAAE;AAAA,IAC9C,OAAO;AACL,YAAM,IAAI,MAAM,4BAA4B;AAAA,IAC9C;AAAA,EACF,CAAC;AAEH,SAAO;AACT;AAUA,SAAS,iBAAiB,MAA4B,QAAgB,QAAwB;AAC5F,MAAI,KAAK,aAAa,GAAG;AACvB,UAAM,UAAU,WAAW,KAAK,IAAI;AACpC,UAAM,iBAAiB,YAAY,OAAO;AAC1C,UAAM,gBAAgB,CAAC,kBAAkB,gBAAgB,SAAS,OAAO;AACzE,UAAM,gBAAgB,QAAQ,SAAS,OAAO,KAAK,OAAO,UAAU;AACpE,UAAM,QAAQ,aAAa,IAAI;AAE/B,QAAI,gBAAgB;AAClB,UAAI,QAAQ;AACV,eAAO,QAAQ;AACf,cAAM,WAAW,YAAY,IAAI;AACjC,YAAI,SAAS,SAAS,GAAG;AACvB,gBAAM,iBAAiB,SAAS,WAAW,IAAI,SAAS,CAAC,IAAIA,GAAE,gBAAgB,QAAQ;AACvF,iBAAO,MAAM,WAAW;AAAA,QAC1B;AAAA,MACF,OAAO;AACL,qBAAa,IAAI;AACjB,qBAAa,KAAK,MAAM,MAAM;AAAA,MAChC;AAAA,IACF,OAAO;AACL,UAAI,eAAe;AACjB,eAAO,YAAY;AAAA,MACrB;AACA,aAAO,YAAY,IAAI,OAAO;AAC9B,uBAAiB,OAAO,MAAM;AAC9B,aAAO,YAAY,gBAAgB,OAAO;AAC1C,UAAI,CAAC,eAAe;AAClB,0BAAkB,MAAM,MAAM;AAC9B,eAAO,YAAY,KAAK,OAAO;AAAA,MACjC;AAAA,IACF;AAAA,EACF,OAAO;AACL,WAAO;AACP,sBAAkB,MAAM,MAAM;AAAA,EAChC;AACF;AAQA,SAAS,YAAY,MAA0C;AAC7D,SAAO,KACJ,IAAI,UAAU,EACd,OAAO,YAAY,EACnB,IAAI,WAAS;AACZ,QAAI,MAAM,aAAa,KAAK,MAAM,cAAc,GAAG;AACjD,mBAAa,KAAK;AAAA,IACpB,WAAW,MAAM,yBAAyB,GAAG;AAC3C,YAAM,YAAY,MAAM,IAAI,YAAY,CAAC;AAAA,IAC3C,WAAW,MAAM,UAAU,GAAG;AAC5B,YAAM,YAAYA,GAAE,cAAc,MAAM,KAAK,KAAK,CAAC;AAAA,IACrD,OAAO;AACL,YAAM,IAAI,MAAM,uBAAuB;AAAA,IACzC;AACA,WAAO,MAAM;AAAA,EACf,CAAC;AACL;AASA,SAAS,iBAAiB,OAA4B,QAAsB;AAC1E,MAAI,QAAQ;AACZ,MAAI,QAAQ;AAEZ,aAAW,QAAQ,OAAO;AACxB,UAAM,QAAQ,MAAM,IAAI;AAExB,QAAI,SAAS,WAAW,OAAO,UAAU,UAAU;AACjD,eAAS,IAAI,KAAK;AAClB,aAAO,MAAM,IAAI;AACjB;AAAA,IACF;AACA,QAAI,KAAK,QAAQ,QAAQ,MAAM,GAAG;AAChC,UAAI,UAAU,MAAM;AAClB,cAAM,OAAO,KAAK,QAAQ,WAAW,EAAE;AACvC,iBAAS,IAAI,IAAI;AACjB,eAAO,MAAM,IAAI;AACjB;AAAA,MACF;AACA,UAAI,UAAU,OAAO;AACnB,eAAO,MAAM,IAAI;AACjB;AAAA,MACF;AAAA,IACF;AAEA,QAAI,SAAS,WAAW,OAAO,UAAU,UAAU;AACjD,eAAS,GAAG,KAAK,GAAG,MAAM,GAAG,EAAE,MAAM,MAAM,KAAK,GAAG;AACnD,aAAO,MAAM,IAAI;AACjB;AAAA,IACF;AACA,QAAI,KAAK,QAAQ,QAAQ,MAAM,MAAM,OAAO,UAAU,YAAY,OAAO,UAAU,WAAW;AAC5F,YAAM,OAAO,KAAK,QAAQ,WAAW,EAAE;AACvC,eAAS,GAAG,IAAI,IAAI,KAAK;AACzB,aAAO,MAAM,IAAI;AACjB;AAAA,IACF;AAEA,QAAI,UAAU,MAAM;AAClB,aAAO,YAAY,IAAI,IAAI;AAC3B,aAAO,MAAM,IAAI;AAAA,IACnB;AACA,QAAI,UAAU,OAAO;AACnB,aAAO,MAAM,IAAI;AAAA,IACnB;AACA,QAAI,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AAC1D,aAAO,YAAY,IAAI,IAAI,KAAK,KAAK;AACrC,aAAO,MAAM,IAAI;AAAA,IACnB;AAAA,EACF;AAEA,MAAI,OAAO,KAAK,KAAK,EAAE,SAAS,GAAG;AACjC,WAAO,MAAM,OAAO,KAAK,IAAI;AAAA,EAC/B;AAEA,UAAQ,MAAM,KAAK;AACnB,UAAQ,MAAM,KAAK;AAEnB,MAAI,OAAO;AACT,WAAO,YAAY,WAAW,KAAK;AAAA,EACrC;AACA,MAAI,OAAO;AACT,WAAO,YAAY,WAAW,KAAK;AAAA,EACrC;AACF;AASA,SAAS,kBAAkB,MAA4B,QAAsB;AAC3E,QAAM,cAAc,OAAO;AAC3B,OACG,IAAI,UAAU,EACd,OAAO,CAAC,KAAK,UAAU;AACtB,QAAI,aAAa,KAAK,GAAG;AACvB,YAAM,YAAY,IAAI,GAAG,EAAE;AAC3B,UAAI,aAAa,YAAY,KAAK,KAAK,YAAY,SAAS,GAAG;AAC7D,oBAAY,WAAW,YAAY,SAAS,IAAI,YAAY,KAAK,CAAC;AAAA,MACpE,OAAO;AACL,YAAI,KAAK,KAAK;AAAA,MAChB;AAAA,IACF;AACA,WAAO;AAAA,EACT,GAAG,CAAC,CAAyB,EAC5B,QAAQ,CAAC,OAAO,GAAG,QAAQ;AAC1B,WAAO,cAAc;AACrB,WAAO,cAAc,MAAM,IAAI,SAAS;AACxC,mBAAe,OAAO,MAAM;AAAA,EAC9B,CAAC;AACL;AAQA,SAAS,eAAe,OAA2B,QAAgB;AACjE,SAAO;AACP,MAAI,MAAM,aAAa,KAAK,MAAM,cAAc,GAAG;AACjD,qBAAiB,OAAO,MAAM;AAAA,EAChC,WAAW,MAAM,yBAAyB,GAAG;AAC3C,UAAM,aAAa,MAAM,IAAI,YAAY;AACzC,QAAI,WAAW,gBAAgB,KAAK,WAAW,iBAAiB,GAAG;AACjE,aAAO,YAAY,WAAW,KAAK;AAAA,IACrC,WAAW,WAAW,aAAa,GAAG;AACpC,mBAAa,WAAW,MAAM,MAAM;AAAA,IACtC,OAAO;AACL,YAAM,IAAI,MAAM,uBAAuB;AAAA,IACzC;AAAA,EACF,WAAW,MAAM,UAAU,GAAG;AAC5B,WAAO,YAAY,MAAM,KAAK;AAAA,EAChC,OAAO;AACL,UAAM,IAAI,MAAM,uBAAuB;AAAA,EACzC;AACF;AASA,SAAS,aAAa,MAAoB,QAAsB;AA1YhE;AA2YE,MAAI,OAAO,aAAa;AACtB,WAAO;AAAA,EACT,OAAO;AACL,WAAO,YAAY;AAAA,EACrB;AACA,qBAAO,OAAP,KAAa,OAAO,iBAApB,qBAAqC,CAAC;AACtC,qBAAO,MAAM,OAAO,WAAW,GAAE,aAAjC,eAAiC,WAAa,CAAC;AAC/C,SAAO,MAAM,OAAO,WAAW,EAAE,SAAS;AAAA,IACxCA,GAAE,gBAAgB;AAAA,MAChBA,GAAE,wBAAwB,CAAC,GAAG,IAAI;AAAA,MAClC,OAAO,cAAcA,GAAE,YAAY,IAAIA,GAAE,WAAW,OAAO,OAAO,KAAK,CAAC;AAAA,IAC1E,CAAC;AAAA,EACH;AACF;AAEA,SAAS,YAAY,WAAmC;AACtD,MAAIA,GAAE,gBAAgB,UAAU,IAAI,GAAG;AACrC,WAAO,UAAU,KAAK;AAAA,EACxB;AACA,MAAIA,GAAE,oBAAoB,UAAU,IAAI,GAAG;AACzC,WAAO,GAAG,UAAU,KAAK,UAAU,IAAI,IAAI,UAAU,KAAK,KAAK,IAAI;AAAA,EACrE;AACA,QAAM,IAAI,MAAM,4BAA4B;AAC9C;AAEA,SAAS,YAAY,MAAkC;AACrD,MAAI,KAAK,UAAU,GAAG;AACpB,WAAO,KAAK,KAAK;AAAA,EACnB;AACA,MAAI,KAAK,yBAAyB,GAAG;AACnC,UAAM,aAAa,KAAK,IAAI,YAAY;AACxC,QAAI,WAAW,gBAAgB,KAAK,WAAW,iBAAiB,GAAG;AACjE,aAAO,OAAO,WAAW,KAAK,KAAK;AAAA,IACrC;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,YAAY,MAA0B,MAAoB;AACjE,MAAI,KAAK,UAAU,GAAG;AACpB,SAAK,KAAK,QAAQ;AAAA,EACpB;AACA,MAAI,KAAK,yBAAyB,GAAG;AACnC,UAAM,aAAa,KAAK,IAAI,YAAY;AACxC,QAAI,WAAW,gBAAgB,KAAK,WAAW,iBAAiB,GAAG;AACjE,iBAAW,YAAYA,GAAE,cAAc,IAAI,CAAC;AAAA,IAC9C;AAAA,EACF;AACF;AAEA,SAAS,WAAW,MAA4B;AAC9C,QAAM,UAAU,KAAK,eAAe;AACpC,SAAO,uBAAuB,OAAO;AACvC;AAEA,SAAS,YAAY,SAA0B;AAC7C,SACG,QAAQ,CAAC,KAAK,QAAQ,CAAC,EAAE,YAAY,MAAM,QAAQ,CAAC,KACrD,QAAQ,SAAS,GAAG,KACpB,YAAY,KAAK,QAAQ,CAAC,CAAC;AAE/B;AAEA,SAAS,YAAY,MAAmC;AACtD,MAAI,KAAK,yBAAyB,GAAG;AACnC,UAAM,aAAa,KAAK,IAAI,YAAY;AACxC,QAAI,WAAW,UAAU,KAAK,WAAW,gBAAgB,KAAK,WAAW,iBAAiB,GAAG;AAC3F,aAAO;AAAA,IACT;AAAA,EACF;AACA,MAAI,KAAK,UAAU,KAAK,KAAK,gBAAgB,KAAK,KAAK,cAAc,GAAG;AACtE,WAAO;AAAA,EACT;AACA,SAAO;AACT;AAEA,SAAS,aAAa,MAAmC;AACvD,QAAM,QAAQ;AACd,MAAI,KAAK,gBAAgB,KAAK,KAAK,UAAU,GAAG;AAC9C,WAAO,CAAC,MAAM,KAAK,KAAK,KAAK,KAAK;AAAA,EACpC;AACA,SAAO,OAAO,KAAK,KAAK,IAAI,EAAE,SAAS;AACzC;AAEA,SAAS,uBACP,MACQ;AACR,MAAIA,GAAE,sBAAsB,IAAI,GAAG;AACjC,WAAO,GAAG,uBAAuB,KAAK,MAAM,CAAC,IAAI,KAAK,SAAS,IAAI;AAAA,EACrE;AACA,MAAIA,GAAE,gBAAgB,IAAI,KAAKA,GAAE,aAAa,IAAI,GAAG;AACnD,WAAO,KAAK;AAAA,EACd;AACA,SAAO,GAAG,KAAK,UAAU,IAAI,IAAI,KAAK,KAAK,IAAI;AACjD;;;ACzeA,SAAS,SAASE,UAAS;AAC3B,SAAmD,iBAAiB;AAI7D,SAAS,cAAc,MAAoC;AAChE,QAAM,OAAO,KAAK,KAAK;AACvB,QAAM,eAAgB,KAAK,KAAK,GAAkB;AAGlD,MAAIC,GAAE,gBAAgB,KAAK,KAAK,EAAE,KAAKA,GAAE,eAAe,KAAK,KAAK,EAAE,GAAG;AACrE;AAAA,EACF;AACA,MAAI,CAAC,aAAa,WAAW,GAAG,GAAG;AACjC;AAAA,EACF;AAEA,MACE,SACCA,GAAE,qBAAqB,IAAI,KAAKA,GAAE,0BAA0B,IAAI,MAChE,KAAK,OAAiC,SAAS,SAChD;AACA,UAAM,UAAUA,GAAE,eAAeA,GAAE,WAAW,KAAK,MAAM,SAAS,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;AAC3F,YAAQ,IAAI,UAAU;AACtB,SAAK,KAAK,OAAO;AAAA,EACnB,OAAO;AACL,UAAM,iCAAiC,UAAU,KAAK,IAAI,IAAI,EAAE,MAAM,IAAI;AAE1E,UAAM,UAAUA,GAAE,eAAeA,GAAE,WAAW,KAAK,MAAM,OAAO,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;AACzF,YAAQ,IAAI,QAAQ;AACpB,SAAK,KAAK,OAAO;AAEjB,SAAK,MAAM,OAAO,cAAc,GAAG,YAAY,QAAQ;AACvD,SAAK,IAAI,IAAI,EAAE,YAAY,8BAA8B;AAEzD,SAAK,MAAM,SAAS,KAAK,MAAM,OAAO;AAAA,MACpC,WAAW,WAAW;AACpB,YAAIA,GAAE,kBAAkB,UAAU,MAAM,GAAG;AACzC,gBAAM,EAAE,KAAK,IAAI,UAAU;AAC3B,cAAI,KAAK,SAAS,QAAQ,GAAG;AAC3B,sBAAU,KAAK,OAAO,KAAK,MAAM,GAAG,EAAE;AAAA,UACxC;AAAA,QACF;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AC9CO,SAAS,cAAc,MAAM;AAClC,QAAMC,WAAU,KAAK,KAAK;AAC1B,EAAAA,SAAQ,QAAQ,eAAa;AAC3B,UAAM,eAAe,UAAU,MAAM;AACrC,QAAI,aAAa,QAAQ,GAAG,MAAM,GAAG;AACnC,WAAK,MAAM,OAAO,cAAc,GAAG,YAAY,QAAQ;AACvD,gBAAU,MAAM,OAAO,GAAG,YAAY;AAAA,IACxC;AAAA,EACF,CAAC;AACH;;;ACHe,SAAR,cAA+B;AACpC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,kBAAkB,EAAE,SAAS,GAAG,YAAY;AAC1C,UAAI,SAAS,SAAS,IAAI,KAAK,SAAS,SAAS,KAAK,GAAG;AACvD,mBAAW,QAAQ,KAAK,YAAY;AAAA,MACtC;AACA,iBAAW,QAAQ,KAAK,KAAK;AAAA,IAC/B;AAAA,IACA,SAAS;AAAA,MACP,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,aAAa;AAAA,MACb,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,IACrB;AAAA,EACF;AACF;","names":["t","t","value","t","t","imports"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "babel-plugin-essor",
3
- "version": "0.0.5-beta.6",
3
+ "version": "0.0.5-beta.7",
4
4
  "packageManager": "pnpm@8.15.6",
5
5
  "description": "",
6
6
  "type": "module",