babel-plugin-essor 0.0.7-beta.5 → 0.0.7-beta.6
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 +3 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/package.json +3 -3
package/dist/index.cjs
CHANGED
|
@@ -127,7 +127,9 @@ var svgTags = [
|
|
|
127
127
|
var import_core2 = require("@babel/core");
|
|
128
128
|
function hasSiblingElement(path) {
|
|
129
129
|
const siblings = path.getAllPrevSiblings().concat(path.getAllNextSiblings());
|
|
130
|
-
const hasSibling = siblings.some(
|
|
130
|
+
const hasSibling = siblings.some(
|
|
131
|
+
(siblingPath) => siblingPath.isJSXElement() || siblingPath.isJSXExpressionContainer()
|
|
132
|
+
);
|
|
131
133
|
return hasSibling;
|
|
132
134
|
}
|
|
133
135
|
function getAttrName(attribute) {
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../../shared/src/is.ts","../../shared/src/comm.ts","../../shared/src/name.ts","../src/jsx/server.ts","../src/program.ts","../src/jsx/constants.ts","../src/jsx/shared.ts","../src/jsx/client.ts","../src/jsx/index.ts","../src/signal/symbol.ts","../src/signal/import.ts","../src/signal/props.ts"],"sourcesContent":["import { transformJSX } from './jsx';\nimport { transformProgram } from './program';\nimport {\n replaceSymbol,\n symbolArrayPattern,\n symbolIdentifier,\n symbolObjectPattern,\n} from './signal/symbol';\nimport { replaceImportDeclaration } from './signal/import';\nimport { replaceProps } from './signal/props';\nimport type { PluginObj } from '@babel/core';\nexport { Options, State } from './types';\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 FunctionDeclaration: replaceProps,\n ArrowFunctionExpression: replaceProps,\n VariableDeclarator: replaceSymbol,\n ImportDeclaration: replaceImportDeclaration,\n Identifier: symbolIdentifier,\n ObjectPattern: symbolObjectPattern,\n ArrayPattern: symbolArrayPattern,\n },\n };\n}\n","import { _toString } from './comm';\n\nexport const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object';\nexport function isPromise(val: any): boolean {\n return _toString.call(val) === '[object Promise]';\n}\n\nexport const isArray = Array.isArray;\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\nexport function isNull(val: any): val is null {\n return val === null;\n}\nexport function isSymbol(val: unknown): val is symbol {\n return typeof val === 'symbol';\n}\nexport function isMap(val: unknown): val is Map<any, any> {\n return _toString.call(val) === '[object Map]';\n}\nexport function isNil(x: any): x is null | undefined {\n return x === null || x === undefined;\n}\n\nexport const isFunction = (val: unknown): val is Function => typeof val === 'function';\n\nexport function isFalsy(x: any): x is false | null | undefined {\n return x === false || x === null || x === undefined || x === '';\n}\n\nexport const isPrimitive = (\n val: unknown,\n): val is string | number | boolean | symbol | null | undefined =>\n ['string', 'number', 'boolean', 'symbol', 'undefined'].includes(typeof val) || isNull(val);\n\nexport const isHtmlElement = (val: unknown): val is HTMLElement => {\n return val instanceof HTMLElement || val instanceof SVGElement;\n};\n","import { isFunction, isPrimitive, isString } from './is';\n\nexport const _toString = Object.prototype.toString;\nexport const extend = Object.assign;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nexport const hasOwn = (val: object, key: string | symbol): key is keyof typeof val =>\n hasOwnProperty.call(val, key);\n\nexport function coerceArray<T>(data: T | T[]): T[] {\n return Array.isArray(data) ? (data.flat() as T[]) : [data];\n}\nexport const hasChanged = (value, oldValue) =>\n value !== oldValue && (value === value || oldValue === oldValue);\nexport const noop = Function.prototype as () => void;\n\n/**\n * A function that checks if a string starts with a specific substring.\n * indexOf faster under normal circumstances\n * @see https://www.measurethat.net/Benchmarks/Show/12350/0/startswith-vs-test-vs-match-vs-indexof#latest_results_block\n\n * @param {string} str - The input string to check.\n * @param {string} searchString - The substring to check for at the beginning of the input string.\n * @return {boolean} Returns true if the input string starts with the specified substring, otherwise false.\n */\nexport function startsWith(str, searchString) {\n if (!isString(str)) {\n return false;\n }\n return str.indexOf(searchString) === 0;\n}\n\n/**\n * Recursively clones an object, including its nested properties and special types like Date, RegExp, Map, and Set.\n *\n * @param {any} obj - The object to clone.\n * @param {WeakMap<object, object>} [hash] - A WeakMap used to track circular references.\n * @return {any} The cloned object.\n */\nexport function deepClone(obj, hash = new WeakMap()) {\n // Return primitives and functions as-is\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n // Handle circular references\n if (hash.has(obj)) {\n return hash.get(obj);\n }\n\n // Handle special types\n if (obj instanceof Date) {\n return new Date(obj);\n }\n\n if (obj instanceof RegExp) {\n return new RegExp(obj);\n }\n\n if (obj instanceof Map) {\n const mapClone = new Map();\n hash.set(obj, mapClone);\n obj.forEach((value, key) => {\n mapClone.set(deepClone(key, hash), deepClone(value, hash));\n });\n return mapClone;\n }\n\n if (obj instanceof Set) {\n const setClone = new Set();\n hash.set(obj, setClone);\n obj.forEach(value => {\n setClone.add(deepClone(value, hash));\n });\n return setClone;\n }\n\n // Initialize the clone and store it in the WeakMap\n const cloneObj = Array.isArray(obj) ? [] : {};\n hash.set(obj, cloneObj);\n\n // Iterate over object keys\n const keys = Object.keys(obj);\n for (const key of keys) {\n cloneObj[key] = deepClone(obj[key], hash);\n }\n\n return cloneObj;\n}\n\n/**\n * Determines whether two values are deeply equal.\n *\n * @param {any} a - The first value to compare.\n * @param {any} b - The second value to compare.\n * @param {WeakMap<object, object>} [seen] - A WeakMap used to store previously seen objects to avoid infinite recursion.\n * @return {boolean} True if the values are deeply equal, false otherwise.\n */\nexport function deepEqual(a: any, b: any, seen = new WeakMap()): boolean {\n if (isPrimitive(a) && isPrimitive(b)) {\n return a === b;\n }\n\n if (a === b) {\n return true;\n }\n\n if (a == null || b == null || typeof a !== 'object' || typeof b !== 'object') {\n return false;\n }\n\n if (a.constructor !== b.constructor) {\n return false;\n }\n\n if (seen.has(a)) {\n return seen.get(a) === b;\n }\n\n seen.set(a, b);\n\n if (Array.isArray(a)) {\n if (a.length !== b.length) {\n return false;\n }\n for (const [i, element] of a.entries()) {\n if (!deepEqual(element, b[i], seen)) {\n return false;\n }\n }\n return true;\n }\n\n if (a instanceof Map) {\n if (a.size !== b.size) {\n return false;\n }\n for (const [key, value] of a) {\n if (!b.has(key) || !deepEqual(value, b.get(key), seen)) {\n return false;\n }\n }\n return true;\n }\n\n if (a instanceof Set) {\n if (a.size !== b.size) {\n return false;\n }\n const arrA = Array.from(a).sort();\n const arrB = Array.from(b).sort();\n for (const [i, element] of arrA.entries()) {\n if (!deepEqual(element, arrB[i], seen)) {\n return false;\n }\n }\n return true;\n }\n\n const keysA = Object.keys(a);\n const keysB = new Set(Object.keys(b));\n\n if (keysA.length !== keysB.size) {\n return false;\n }\n\n for (const key of keysA) {\n if (!keysB.has(key) || !deepEqual(a[key], b[key], seen)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Escapes special HTML characters in a string.\n * @param str - The string to escape.\n * @returns The escaped string.\n */\nexport function escape(str: string): string {\n return str.replaceAll(/[\"&'<>]/g, char => {\n switch (char) {\n case '&':\n return '&';\n case '<':\n return '<';\n case '>':\n return '>';\n case '\"':\n return '"';\n case \"'\":\n return ''';\n default:\n return char;\n }\n });\n}\n\nexport type ExcludeType = ((key: string | symbol) => boolean) | (string | symbol)[];\n\n/**\n * Checks if a key should be excluded based on the provided exclude criteria.\n * @param key - The key to check.\n * @param exclude - The exclusion criteria.\n * @returns True if the key should be excluded, otherwise false.\n */\nexport function isExclude(key: string | symbol, exclude?: ExcludeType): boolean {\n return Array.isArray(exclude)\n ? exclude.includes(key)\n : isFunction(exclude)\n ? exclude(key)\n : false;\n}\n","export const kebabCase = (string: string): string => {\n return string.replaceAll(/[A-Z]+/g, (match, offset) => {\n return `${offset > 0 ? '-' : ''}${match.toLocaleLowerCase()}`;\n });\n};\n\nexport const camelCase = (str: string): string => {\n const s = str.replaceAll(/[\\s_-]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));\n return s[0].toLowerCase() + s.slice(1);\n};\n/**\n * Capitalizes the first letter of a string.\n *\n * @param {string} inputString - The input string to capitalize the first letter.\n * @return {string} The string with the first letter capitalized.\n */\nexport const capitalizeFirstLetter = (inputString: string): string => {\n return inputString.charAt(0).toUpperCase() + inputString.slice(1);\n};\n","import { capitalizeFirstLetter } from 'essor-shared';\nimport { types as t } from '@babel/core';\nimport { imports } from '../program';\nimport { selfClosingTags, svgTags } from './constants';\nimport {\n type JSXChild,\n type JSXElement,\n getAttrName,\n getTagName,\n isComponent,\n isTextChild,\n setNodeText,\n} from './shared';\nimport type { OptionalMemberExpression } from '@babel/types';\nimport type { State } from '../types';\nimport type { NodePath } from '@babel/core';\n\nexport interface Result {\n index: number;\n isLastChild: boolean;\n parentIndex: number;\n props: Record<string, any>;\n template: string[];\n}\n\nexport function transformJSXService(path: NodePath<JSXElement>): void {\n const result: Result = {\n index: 0,\n isLastChild: false,\n parentIndex: 0,\n props: {},\n template: [], // 修改为数组\n };\n transformJSXServiceElement(path, result, true);\n path.replaceWith(createEssorNode(path, result));\n}\n\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n\n let tmpl: t.Identifier;\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.arrayExpression(result.template.map(t.stringLiteral));\n const declarator = t.variableDeclarator(tmpl, template);\n state.tmplDeclaration.declarations.push(declarator);\n }\n\n const args = [tmpl, createProps(result.props)];\n const key = result.props.key || result.props[0]?.key;\n if (key) {\n args.push(key);\n }\n imports.add('renderTemplate');\n return t.callExpression(state.renderTemplate, args);\n}\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}\nfunction transformJSXServiceElement(\n path: NodePath<JSXElement>,\n result: Result,\n isRoot: boolean = false,\n): void {\n if (path.isJSXElement()) {\n const tagName = getTagName(path.node);\n const tagIsComponent = isComponent(tagName);\n const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);\n const isSvg = svgTags.includes(tagName) && result.index === 1;\n const { props, hasExpression } = getAttrProps(path);\n if (tagIsComponent) {\n if (isRoot) {\n result.props = props;\n const children = getChildren(path) as any;\n if (children.length > 0) {\n const childrenGenerator =\n children.length === 1 ? children[0] : t.arrayExpression(children);\n result.props.children = childrenGenerator;\n }\n } else {\n transformJSXService(path);\n replaceChild(path.node, result);\n }\n } else {\n if (isSvg) {\n result.template.push('<svg _svg_>');\n }\n result.template.push(`<${tagName}`);\n handleAttributes(props, result);\n\n if (hasExpression) {\n result.template.push(isSelfClose ? '/>' : '>');\n result.props ||= {};\n } else {\n result.template[result.template.length - 1] += isSelfClose ? '/>' : '>';\n }\n transformChildren(path, result);\n\n if (!isSelfClose) {\n result.template.push(`</${tagName}>`);\n }\n }\n } else {\n result.index--;\n transformChildren(path, result);\n }\n}\n\nfunction transformChildren(path: NodePath<JSXElement>, result: Result): void {\n const parentIndex = result.template.length;\n path\n .get('children')\n .reduce((pre, cur) => {\n if (isValidChild(cur)) {\n const lastChild = pre.at(-1);\n if (lastChild && isTextChild(cur) && isTextChild(lastChild)) {\n setNodeText(lastChild, getNodeText(lastChild) + getNodeText(cur));\n } else {\n pre.push(cur);\n }\n }\n return pre;\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\nfunction transformChild(child: NodePath<JSXChild>, result: Result): void {\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSXServiceElement(child, result, false);\n } else if (child.isJSXExpressionContainer()) {\n const expression = child.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n result.template[result.template.length - 1] += String(expression.node.value);\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else if (t.isJSXEmptyExpression(expression.node)) {\n // it is empty expression\n // do nothing\n } else {\n throw new Error('Unsupported child type');\n }\n } else if (child.isJSXText()) {\n result.template.push(String(child.node.value));\n } else {\n throw new Error('Unsupported child type');\n }\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 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\n if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\n delete props[prop];\n continue;\n }\n\n if (value === true) {\n result.template[result.template.length - 1] += ` ${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[result.template.length - 1] += ` ${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[result.template.length - 1] += ` class=\"${klass}\"`;\n }\n if (style) {\n result.template[result.template.length - 1] += ` style=\"${style}\"`;\n }\n}\n\nfunction replaceChild(node: t.Expression, result: Result): void {\n if (result.isLastChild) {\n result.index--;\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 t.identifier(String(result.template.length)),\n ]),\n );\n}\n\nfunction getChildren(path: NodePath<JSXElement>): JSXChild[] {\n return path\n .get('children')\n .filter(child => isValidChild(child))\n .map(child => {\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSXService(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 child type');\n }\n return child.node;\n });\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}\nfunction getAttrProps(path: NodePath<t.JSXElement>): Record<string, any> {\n const props: Record<string, any> = {};\n let hasExpression = false;\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 transformJSXService(expression);\n props[name] = expression.node;\n } else if (expression.isExpression()) {\n hasExpression = true;\n if (/^key|ref|on.+$/.test(name)) {\n props[name] = expression.node;\n } else if (/^bind:.+/.test(name)) {\n const value = path.scope.generateUidIdentifier('value');\n const bindName = name.slice(5).toLocaleLowerCase();\n props[bindName] = expression.node;\n props[`update${capitalizeFirstLetter(bindName)}`] = t.arrowFunctionExpression(\n [value],\n t.assignmentExpression('=', expression.node as OptionalMemberExpression, 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 transformJSXService(value);\n props[name] = value.node;\n }\n }\n } else if (attribute.isJSXSpreadAttribute()) {\n props._$spread$ = attribute.get('argument').node;\n hasExpression = true;\n } else {\n throw new Error('Unsupported attribute type');\n }\n });\n\n return {\n props,\n hasExpression,\n };\n}\n","import { type NodePath, types as t } from '@babel/core';\nimport type { State } from './types';\nexport const imports = new Set<string>();\n\nexport const transformProgram = {\n enter(path: NodePath<t.Program>, state) {\n imports.clear();\n\n path.state = {\n h: path.scope.generateUidIdentifier('h$'),\n renderTemplate: path.scope.generateUidIdentifier('renderTemplate$'),\n template: path.scope.generateUidIdentifier('template$'),\n\n useSignal: path.scope.generateUidIdentifier('signal$'),\n useComputed: path.scope.generateUidIdentifier('computed$'),\n useReactive: path.scope.generateUidIdentifier('reactive$'),\n\n tmplDeclaration: t.variableDeclaration('const', []),\n opts: state.opts,\n } as State;\n },\n exit(path: NodePath<t.Program>) {\n const state: State = path.state;\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 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];\n","import { type NodePath, types as t } from '@babel/core';\n\nexport type JSXElement = t.JSXElement | t.JSXFragment;\n\nexport type JSXChild =\n | t.JSXElement\n | t.JSXFragment\n | t.JSXExpressionContainer\n | t.JSXSpreadChild\n | t.JSXText;\n\n/**\n * Checks if the given Babel path has a sibling element.\n *\n * @param {NodePath} path - The Babel path to check.\n * @return {boolean} True if the path has a sibling element, false otherwise.\n */\nexport function hasSiblingElement(path) {\n // Get all siblings (both previous and next)\n const siblings = path.getAllPrevSiblings().concat(path.getAllNextSiblings());\n\n // Check for non-self-closing sibling elements\n const hasSibling = siblings.some(siblingPath => siblingPath.isJSXElement());\n\n return hasSibling;\n}\n\n/**\n * Retrieves the name of a JSX attribute.\n *\n * @param {t.JSXAttribute} attribute - The JSX attribute to retrieve the name from.\n * @return {string} The name of the attribute.\n * @throws {Error} If the attribute type is unsupported.\n */\nexport function 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\n/**\n * Retrieves the tag name of a JSX element.\n *\n * @param {t.JSXElement} node - The JSX element.\n * @return {string} The tag name of the JSX element.\n */\nexport function getTagName(node: t.JSXElement): string {\n const tag = node.openingElement.name;\n return jsxElementNameToString(tag);\n}\n\n/**\n * Converts a JSX element name to a string representation.\n *\n * case1: <MyComponent />\n * case2: <SomeLibrary.SomeComponent />;\n * case3: <namespace:ComponentName />;\n * case4: <SomeLibrary.Nested.ComponentName />;\n *\n * @param {t.JSXMemberExpression | t.JSXIdentifier | t.JSXNamespacedName} node The JSX element name to convert.\n * @returns {string} The string representation of the JSX element name.\n */\nexport function jsxElementNameToString(\n node: t.JSXMemberExpression | t.JSXIdentifier | t.JSXNamespacedName,\n) {\n if (t.isJSXMemberExpression(node)) {\n return `${jsxElementNameToString(node.object)}.${jsxElementNameToString(node.property)}`;\n }\n\n if (t.isJSXIdentifier(node) || t.isIdentifier(node)) {\n return node.name;\n }\n\n return `${node.namespace.name}:${node.name.name}`;\n}\n\n/**\n * Determines if the given tagName is a component.\n *\n * case1: <MyComponent />\n * case2: <SomeLibrary.SomeComponent />;\n * case3: <_component />;\n *\n * @param {string} tagName - The name of the tag to check.\n * @return {boolean} True if the tagName is a component, false otherwise.\n */\nexport function 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\n/**\n * Determines if the given path represents a text child node in a JSX expression.\n *\n * @param {NodePath<JSXChild>} path - The path to the potential text child node.\n * @return {boolean} True if the path represents a text child node, false otherwise.\n */\nexport function 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\n/**\n * Sets the text content of a JSX node.\n *\n * @param {NodePath<JSXChild>} path - The path to the JSX node.\n * @param {string} text - The text to set.\n * @return {void}\n */\nexport function 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","import { types as t } from '@babel/core';\nimport { capitalizeFirstLetter } from 'essor-shared';\nimport { imports } from '../program';\nimport { selfClosingTags, svgTags } from './constants';\nimport {\n type JSXChild,\n type JSXElement,\n getAttrName,\n getTagName,\n hasSiblingElement,\n isComponent,\n isTextChild,\n setNodeText,\n} from './shared';\nimport type { OptionalMemberExpression } from '@babel/types';\nimport type { State } from '../types';\nimport type { NodePath } from '@babel/core';\n\nexport interface Result {\n index: number;\n isLastChild: boolean;\n parentIndex: number;\n props: Record<string, any>;\n template: string;\n}\n\nexport function transformJSXClient(path: NodePath<JSXElement>): void {\n const result: Result = {\n index: 1,\n isLastChild: false,\n parentIndex: 0,\n props: {},\n template: '',\n };\n transformJSXElement(path, result, true);\n\n path.replaceWith(createEssorNode(path, result));\n}\n\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n\n let tmpl: t.Identifier;\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 if (key) {\n args.push(key);\n }\n imports.add('h');\n return t.callExpression(state.h, args);\n}\n\nfunction createProps(props) {\n const toAstNode = value => {\n if (Array.isArray(value)) {\n return t.arrayExpression(value.map(toAstNode));\n }\n if (value && typeof value === 'object' && !t.isNode(value)) {\n return createProps(value);\n }\n\n switch (typeof value) {\n case 'string':\n return t.stringLiteral(value);\n case 'number':\n return t.numericLiteral(value);\n case 'boolean':\n return t.booleanLiteral(value);\n case 'undefined':\n return t.tsUndefinedKeyword();\n case undefined:\n return t.tsUndefinedKeyword();\n case null:\n return t.nullLiteral();\n default:\n return value;\n }\n };\n\n const result = Object.keys(props)\n .filter(prop => prop !== 'key')\n .map(prop => {\n const value = toAstNode(props[prop]);\n return prop === '_$spread$'\n ? t.spreadElement(value)\n : t.objectProperty(t.stringLiteral(prop), value);\n });\n\n return t.objectExpression(result);\n}\nfunction transformJSXElement(\n path: NodePath<JSXElement>,\n result: Result,\n isRoot: boolean = false,\n): void {\n if (path.isJSXElement()) {\n const tagName = getTagName(path.node);\n const tagIsComponent = isComponent(tagName);\n const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);\n const isSvg = svgTags.includes(tagName) && result.index === 1;\n const props = getAttrProps(path);\n if (tagIsComponent) {\n if (isRoot) {\n result.props = props;\n const children = getChildren(path) as any;\n if (children.length > 0) {\n const childrenGenerator =\n children.length === 1 ? children[0] : t.arrayExpression(children);\n result.props.children = childrenGenerator;\n }\n } else {\n transformJSXClient(path);\n replaceChild(path.node, result);\n }\n } else {\n if (isSvg) {\n result.template = '<svg _svg_>';\n }\n result.template += `<${tagName}`;\n handleAttributes(props, result);\n result.template += isSelfClose ? '/>' : '>';\n if (!isSelfClose) {\n transformChildren(path, result);\n if (hasSiblingElement(path)) {\n result.template += `</${tagName}>`;\n }\n }\n }\n } else {\n result.index--;\n transformChildren(path, result);\n }\n}\n\nfunction transformChildren(path: NodePath<JSXElement>, result: Result): void {\n const parentIndex = result.index;\n path\n .get('children')\n .reduce((pre, cur) => {\n if (isValidChild(cur)) {\n const lastChild = pre.at(-1);\n if (lastChild && isTextChild(cur) && isTextChild(lastChild)) {\n setNodeText(lastChild, getNodeText(lastChild) + getNodeText(cur));\n } else {\n pre.push(cur);\n }\n }\n return pre;\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\nfunction transformChild(child: NodePath<JSXChild>, result: Result): void {\n result.index++;\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSXElement(child, result, false);\n } else if (child.isJSXExpressionContainer()) {\n const expression = child.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n result.template += String(expression.node.value);\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else if (t.isJSXEmptyExpression(expression.node)) {\n // it is empty expression\n // do nothing\n } else {\n throw new Error('Unsupported child type');\n }\n } else if (child.isJSXText()) {\n result.template += String(child.node.value);\n } else {\n throw new Error('Unsupported child type');\n }\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 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\n if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\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\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 getChildren(path: NodePath<JSXElement>): JSXChild[] {\n return path\n .get('children')\n .filter(child => isValidChild(child))\n .map(child => {\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSXClient(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 child type');\n }\n return child.node;\n });\n}\n\nexport function 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}\nexport function 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 transformJSXClient(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 const value = path.scope.generateUidIdentifier('value');\n const bindName = name.slice(5).toLocaleLowerCase();\n props[bindName] = expression.node;\n props[`update${capitalizeFirstLetter(bindName)}`] = t.arrowFunctionExpression(\n [value],\n t.assignmentExpression('=', expression.node as OptionalMemberExpression, 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 transformJSXClient(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","import { transformJSXService } from './server';\nimport { transformJSXClient } from './client';\nimport type { NodePath, types as t } from '@babel/core';\nimport type { State } from '../types';\ntype JSXElement = t.JSXElement | t.JSXFragment;\nexport function transformJSX(path: NodePath<JSXElement>) {\n const state: State = path.state;\n const isSsg = state.opts.ssg;\n return isSsg ? transformJSXService(path) : transformJSXClient(path);\n}\n","import { types as t } from '@babel/core';\nimport { startsWith } from 'essor-shared';\nimport { imports } from '../program';\nimport type { Identifier, VariableDeclarator } from '@babel/types';\nimport type { NodePath } from '@babel/core';\n\n/**\n * 当一个变量/常量声明的时候,判断是否是$(定义的符号)开头,如果是,则进行转换。\n *\n * case 1: let $a = 1 => let $a = useSignal(1);\n * case 2: const $a = ()=>{return $a} => const $a = useComputed(()=>{return $a})\n *\n * 并且所有当前用到的值,都会添加.value\n * @param path\n * @returns {void}\n */\nexport function replaceSymbol(path: NodePath<VariableDeclarator>) {\n const init = path.node.init;\n const variableName = (path.node.id as Identifier).name;\n\n if (t.isObjectPattern(path.node.id) || t.isArrayPattern(path.node.id)) {\n return;\n }\n\n if (!startsWith(variableName, '$')) {\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.useComputed.name), init ? [init] : []);\n imports.add('useComputed');\n path.node.init = newInit;\n } else {\n const newInit = t.callExpression(t.identifier(path.state.useSignal.name), init ? [init] : []);\n imports.add('useSignal');\n path.node.init = newInit;\n }\n}\n\nexport function symbolIdentifier(path) {\n const parentPath = path.parentPath;\n\n if (\n !parentPath ||\n t.isVariableDeclarator(parentPath) ||\n t.isImportSpecifier(parentPath) ||\n t.isObjectProperty(parentPath) ||\n t.isArrayPattern(parentPath) ||\n t.isObjectPattern(parentPath)\n ) {\n return;\n }\n\n const { node } = path;\n\n if (node.name.startsWith('$')) {\n // check is has .value\n let currentPath = path;\n while (currentPath.parentPath && !currentPath.parentPath.isProgram()) {\n if (\n currentPath.parentPath.isMemberExpression() &&\n currentPath.parentPath.node.property.name === 'value'\n ) {\n return;\n }\n currentPath = currentPath.parentPath;\n }\n\n // add with .value\n const newNode = t.memberExpression(t.identifier(node.name), t.identifier('value'));\n\n path.replaceWith(newNode);\n }\n}\n\nexport function symbolObjectPattern(path) {\n path.node.properties.forEach(property => {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n property.key.name.startsWith('$')\n ) {\n const newKey = t.identifier(property.key.name);\n property.key = newKey;\n }\n });\n}\n\nexport function symbolArrayPattern(path) {\n path.node.elements.forEach(element => {\n if (t.isIdentifier(element) && element.name.startsWith('$')) {\n const newElement = t.identifier(element.name);\n element.name = newElement.name;\n } else if (t.isObjectPattern(element)) {\n element.properties.forEach(property => {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n property.key.name.startsWith('$')\n ) {\n const newKey = t.identifier(property.key.name);\n property.key = newKey;\n }\n });\n }\n });\n}\n","import { type NodePath, types as t } from '@babel/core';\nimport { startsWith } from 'essor-shared';\nimport type { ImportDeclaration } from '@babel/types';\n\nfunction isVariableUsedAsObject(path: NodePath<ImportDeclaration>, variableName: string) {\n const binding = path.scope.getBinding(variableName);\n let isUsedObject = false;\n if (!binding || !binding.referencePaths) {\n return isUsedObject;\n }\n\n for (const referencePath of binding.referencePaths) {\n if (t.isMemberExpression(referencePath.parent)) {\n // const memberExprParent = referencePath.parent;\n\n // if (memberExprParent.object && memberExprParent.property) {\n // const newMemberExpr = t.memberExpression(\n // memberExprParent.object,\n // t.identifier(`${(memberExprParent.property as t.Identifier).name}.value`),\n // );\n // referencePath.parentPath?.replaceWith(newMemberExpr);\n isUsedObject = true;\n // }\n }\n }\n\n return isUsedObject;\n}\n// TODO: 暂时不支持对象\nexport function replaceImportDeclaration(path: NodePath<ImportDeclaration>) {\n const imports = path.node.specifiers;\n imports.forEach(specifier => {\n const variableName = specifier.local.name;\n\n if (startsWith(variableName, '$') && !isVariableUsedAsObject(path, variableName)) {\n path.scope.rename(variableName, `${variableName}.value`);\n specifier.local.name = `${variableName}`;\n }\n });\n}\n","import { startsWith } from 'essor-shared';\nimport { type NodePath, types as t } from '@babel/core';\nimport { imports } from '../program';\nimport type { State } from '../types';\nimport type {\n ArrowFunctionExpression,\n FunctionDeclaration,\n Identifier,\n ObjectProperty,\n RestElement,\n} from '@babel/types';\n\nexport function replaceProps(path: NodePath<FunctionDeclaration | ArrowFunctionExpression>) {\n const state: State = path.state;\n\n const firstParam = path.node.params[0];\n\n if (!firstParam || !t.isObjectPattern(firstParam)) {\n return;\n }\n\n const returnStatement = path\n .get('body')\n .get('body')\n .find(statement => statement.isReturnStatement());\n\n if (!returnStatement) {\n return;\n }\n\n const returnValue = (returnStatement.node as any)?.argument;\n if (!t.isJSXElement(returnValue)) {\n return;\n }\n\n function replaceProperties(properties: (ObjectProperty | RestElement)[], parentPath: string) {\n properties.forEach(property => {\n if (t.isObjectProperty(property)) {\n const keyName = (property.key as Identifier).name;\n\n if (t.isIdentifier(property.value)) {\n const propertyName = property.value.name;\n const newName = `${parentPath}${keyName}`;\n path.scope.rename(propertyName, newName);\n } else if (t.isObjectPattern(property.value)) {\n replaceProperties(property.value.properties, `${parentPath}${keyName}.`);\n }\n }\n });\n }\n\n const properties = firstParam.properties;\n replaceProperties(\n properties.filter(property => !t.isRestElement(property)),\n '__props.',\n );\n const notRestProperties = properties.filter(property => !t.isRestElement(property));\n const notRestNames = notRestProperties.map(\n property => ((property as ObjectProperty).key as Identifier).name,\n );\n if (__DEV__ && notRestNames.some(name => startsWith(name, '$'))) {\n console.warn('props name can not start with $');\n return;\n }\n\n const restElement = properties.find(property => t.isRestElement(property)) as\n | RestElement\n | undefined;\n path.node.params[0] = t.identifier('__props');\n\n if (restElement) {\n const restName = (restElement.argument as any).name;\n if (notRestProperties.length === 0) {\n path.node.params[0] = t.identifier(restName);\n } else {\n const restVariableDeclaration = t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(restName),\n t.callExpression(state.useReactive, [\n t.identifier('__props'),\n t.arrayExpression(notRestNames.map(name => t.stringLiteral(name))),\n ]),\n ),\n ]);\n imports.add('useReactive');\n\n (path.node.body as any).body.unshift(restVariableDeclaration);\n }\n }\n}\n"],"mappings":"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","names":["import_core","t","import_core","t","t","value","import_core","createEssorNode","t","createProps","getAttrProps","getChildren","replaceChild","handleAttributes","transformChildren","isValidChild","getNodeText","transformChild","value","import_core","t","import_core","t","imports","import_core","t","properties"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../../shared/src/is.ts","../../shared/src/comm.ts","../../shared/src/name.ts","../src/jsx/server.ts","../src/program.ts","../src/jsx/constants.ts","../src/jsx/shared.ts","../src/jsx/client.ts","../src/jsx/index.ts","../src/signal/symbol.ts","../src/signal/import.ts","../src/signal/props.ts"],"sourcesContent":["import { transformJSX } from './jsx';\nimport { transformProgram } from './program';\nimport {\n replaceSymbol,\n symbolArrayPattern,\n symbolIdentifier,\n symbolObjectPattern,\n} from './signal/symbol';\nimport { replaceImportDeclaration } from './signal/import';\nimport { replaceProps } from './signal/props';\nimport type { PluginObj } from '@babel/core';\nexport { Options, State } from './types';\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 FunctionDeclaration: replaceProps,\n ArrowFunctionExpression: replaceProps,\n VariableDeclarator: replaceSymbol,\n ImportDeclaration: replaceImportDeclaration,\n Identifier: symbolIdentifier,\n ObjectPattern: symbolObjectPattern,\n ArrayPattern: symbolArrayPattern,\n },\n };\n}\n","import { _toString } from './comm';\n\nexport const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object';\nexport function isPromise(val: any): boolean {\n return _toString.call(val) === '[object Promise]';\n}\n\nexport const isArray = Array.isArray;\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\nexport function isNull(val: any): val is null {\n return val === null;\n}\nexport function isSymbol(val: unknown): val is symbol {\n return typeof val === 'symbol';\n}\nexport function isMap(val: unknown): val is Map<any, any> {\n return _toString.call(val) === '[object Map]';\n}\nexport function isNil(x: any): x is null | undefined {\n return x === null || x === undefined;\n}\n\nexport const isFunction = (val: unknown): val is Function => typeof val === 'function';\n\nexport function isFalsy(x: any): x is false | null | undefined {\n return x === false || x === null || x === undefined || x === '';\n}\n\nexport const isPrimitive = (\n val: unknown,\n): val is string | number | boolean | symbol | null | undefined =>\n ['string', 'number', 'boolean', 'symbol', 'undefined'].includes(typeof val) || isNull(val);\n\nexport const isHtmlElement = (val: unknown): val is HTMLElement => {\n return val instanceof HTMLElement || val instanceof SVGElement;\n};\n","import { isFunction, isPrimitive, isString } from './is';\n\nexport const _toString = Object.prototype.toString;\nexport const extend = Object.assign;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nexport const hasOwn = (val: object, key: string | symbol): key is keyof typeof val =>\n hasOwnProperty.call(val, key);\n\nexport function coerceArray<T>(data: T | T[]): T[] {\n return Array.isArray(data) ? (data.flat() as T[]) : [data];\n}\nexport const hasChanged = (value, oldValue) =>\n value !== oldValue && (value === value || oldValue === oldValue);\nexport const noop = Function.prototype as () => void;\n\n/**\n * A function that checks if a string starts with a specific substring.\n * indexOf faster under normal circumstances\n * @see https://www.measurethat.net/Benchmarks/Show/12350/0/startswith-vs-test-vs-match-vs-indexof#latest_results_block\n\n * @param {string} str - The input string to check.\n * @param {string} searchString - The substring to check for at the beginning of the input string.\n * @return {boolean} Returns true if the input string starts with the specified substring, otherwise false.\n */\nexport function startsWith(str, searchString) {\n if (!isString(str)) {\n return false;\n }\n return str.indexOf(searchString) === 0;\n}\n\n/**\n * Recursively clones an object, including its nested properties and special types like Date, RegExp, Map, and Set.\n *\n * @param {any} obj - The object to clone.\n * @param {WeakMap<object, object>} [hash] - A WeakMap used to track circular references.\n * @return {any} The cloned object.\n */\nexport function deepClone(obj, hash = new WeakMap()) {\n // Return primitives and functions as-is\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n // Handle circular references\n if (hash.has(obj)) {\n return hash.get(obj);\n }\n\n // Handle special types\n if (obj instanceof Date) {\n return new Date(obj);\n }\n\n if (obj instanceof RegExp) {\n return new RegExp(obj);\n }\n\n if (obj instanceof Map) {\n const mapClone = new Map();\n hash.set(obj, mapClone);\n obj.forEach((value, key) => {\n mapClone.set(deepClone(key, hash), deepClone(value, hash));\n });\n return mapClone;\n }\n\n if (obj instanceof Set) {\n const setClone = new Set();\n hash.set(obj, setClone);\n obj.forEach(value => {\n setClone.add(deepClone(value, hash));\n });\n return setClone;\n }\n\n // Initialize the clone and store it in the WeakMap\n const cloneObj = Array.isArray(obj) ? [] : {};\n hash.set(obj, cloneObj);\n\n // Iterate over object keys\n const keys = Object.keys(obj);\n for (const key of keys) {\n cloneObj[key] = deepClone(obj[key], hash);\n }\n\n return cloneObj;\n}\n\n/**\n * Determines whether two values are deeply equal.\n *\n * @param {any} a - The first value to compare.\n * @param {any} b - The second value to compare.\n * @param {WeakMap<object, object>} [seen] - A WeakMap used to store previously seen objects to avoid infinite recursion.\n * @return {boolean} True if the values are deeply equal, false otherwise.\n */\nexport function deepEqual(a: any, b: any, seen = new WeakMap()): boolean {\n if (isPrimitive(a) && isPrimitive(b)) {\n return a === b;\n }\n\n if (a === b) {\n return true;\n }\n\n if (a == null || b == null || typeof a !== 'object' || typeof b !== 'object') {\n return false;\n }\n\n if (a.constructor !== b.constructor) {\n return false;\n }\n\n if (seen.has(a)) {\n return seen.get(a) === b;\n }\n\n seen.set(a, b);\n\n if (Array.isArray(a)) {\n if (a.length !== b.length) {\n return false;\n }\n for (const [i, element] of a.entries()) {\n if (!deepEqual(element, b[i], seen)) {\n return false;\n }\n }\n return true;\n }\n\n if (a instanceof Map) {\n if (a.size !== b.size) {\n return false;\n }\n for (const [key, value] of a) {\n if (!b.has(key) || !deepEqual(value, b.get(key), seen)) {\n return false;\n }\n }\n return true;\n }\n\n if (a instanceof Set) {\n if (a.size !== b.size) {\n return false;\n }\n const arrA = Array.from(a).sort();\n const arrB = Array.from(b).sort();\n for (const [i, element] of arrA.entries()) {\n if (!deepEqual(element, arrB[i], seen)) {\n return false;\n }\n }\n return true;\n }\n\n const keysA = Object.keys(a);\n const keysB = new Set(Object.keys(b));\n\n if (keysA.length !== keysB.size) {\n return false;\n }\n\n for (const key of keysA) {\n if (!keysB.has(key) || !deepEqual(a[key], b[key], seen)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Escapes special HTML characters in a string.\n * @param str - The string to escape.\n * @returns The escaped string.\n */\nexport function escape(str: string): string {\n return str.replaceAll(/[\"&'<>]/g, char => {\n switch (char) {\n case '&':\n return '&';\n case '<':\n return '<';\n case '>':\n return '>';\n case '\"':\n return '"';\n case \"'\":\n return ''';\n default:\n return char;\n }\n });\n}\n\nexport type ExcludeType = ((key: string | symbol) => boolean) | (string | symbol)[];\n\n/**\n * Checks if a key should be excluded based on the provided exclude criteria.\n * @param key - The key to check.\n * @param exclude - The exclusion criteria.\n * @returns True if the key should be excluded, otherwise false.\n */\nexport function isExclude(key: string | symbol, exclude?: ExcludeType): boolean {\n return Array.isArray(exclude)\n ? exclude.includes(key)\n : isFunction(exclude)\n ? exclude(key)\n : false;\n}\n","export const kebabCase = (string: string): string => {\n return string.replaceAll(/[A-Z]+/g, (match, offset) => {\n return `${offset > 0 ? '-' : ''}${match.toLocaleLowerCase()}`;\n });\n};\n\nexport const camelCase = (str: string): string => {\n const s = str.replaceAll(/[\\s_-]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));\n return s[0].toLowerCase() + s.slice(1);\n};\n/**\n * Capitalizes the first letter of a string.\n *\n * @param {string} inputString - The input string to capitalize the first letter.\n * @return {string} The string with the first letter capitalized.\n */\nexport const capitalizeFirstLetter = (inputString: string): string => {\n return inputString.charAt(0).toUpperCase() + inputString.slice(1);\n};\n","import { capitalizeFirstLetter } from 'essor-shared';\nimport { types as t } from '@babel/core';\nimport { imports } from '../program';\nimport { selfClosingTags, svgTags } from './constants';\nimport {\n type JSXChild,\n type JSXElement,\n getAttrName,\n getTagName,\n isComponent,\n isTextChild,\n setNodeText,\n} from './shared';\nimport type { OptionalMemberExpression } from '@babel/types';\nimport type { State } from '../types';\nimport type { NodePath } from '@babel/core';\n\nexport interface Result {\n index: number;\n isLastChild: boolean;\n parentIndex: number;\n props: Record<string, any>;\n template: string[];\n}\n\nexport function transformJSXService(path: NodePath<JSXElement>): void {\n const result: Result = {\n index: 0,\n isLastChild: false,\n parentIndex: 0,\n props: {},\n template: [], // 修改为数组\n };\n transformJSXServiceElement(path, result, true);\n path.replaceWith(createEssorNode(path, result));\n}\n\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n\n let tmpl: t.Identifier;\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.arrayExpression(result.template.map(t.stringLiteral));\n const declarator = t.variableDeclarator(tmpl, template);\n state.tmplDeclaration.declarations.push(declarator);\n }\n\n const args = [tmpl, createProps(result.props)];\n const key = result.props.key || result.props[0]?.key;\n if (key) {\n args.push(key);\n }\n imports.add('renderTemplate');\n return t.callExpression(state.renderTemplate, args);\n}\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}\nfunction transformJSXServiceElement(\n path: NodePath<JSXElement>,\n result: Result,\n isRoot: boolean = false,\n): void {\n if (path.isJSXElement()) {\n const tagName = getTagName(path.node);\n const tagIsComponent = isComponent(tagName);\n const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);\n const isSvg = svgTags.includes(tagName) && result.index === 1;\n const { props, hasExpression } = getAttrProps(path);\n if (tagIsComponent) {\n if (isRoot) {\n result.props = props;\n const children = getChildren(path) as any;\n if (children.length > 0) {\n const childrenGenerator =\n children.length === 1 ? children[0] : t.arrayExpression(children);\n result.props.children = childrenGenerator;\n }\n } else {\n transformJSXService(path);\n replaceChild(path.node, result);\n }\n } else {\n if (isSvg) {\n result.template.push('<svg _svg_>');\n }\n result.template.push(`<${tagName}`);\n handleAttributes(props, result);\n\n if (hasExpression) {\n result.template.push(isSelfClose ? '/>' : '>');\n result.props ||= {};\n } else {\n result.template[result.template.length - 1] += isSelfClose ? '/>' : '>';\n }\n transformChildren(path, result);\n\n if (!isSelfClose) {\n result.template.push(`</${tagName}>`);\n }\n }\n } else {\n result.index--;\n transformChildren(path, result);\n }\n}\n\nfunction transformChildren(path: NodePath<JSXElement>, result: Result): void {\n const parentIndex = result.template.length;\n path\n .get('children')\n .reduce((pre, cur) => {\n if (isValidChild(cur)) {\n const lastChild = pre.at(-1);\n if (lastChild && isTextChild(cur) && isTextChild(lastChild)) {\n setNodeText(lastChild, getNodeText(lastChild) + getNodeText(cur));\n } else {\n pre.push(cur);\n }\n }\n return pre;\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\nfunction transformChild(child: NodePath<JSXChild>, result: Result): void {\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSXServiceElement(child, result, false);\n } else if (child.isJSXExpressionContainer()) {\n const expression = child.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n result.template[result.template.length - 1] += String(expression.node.value);\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else if (t.isJSXEmptyExpression(expression.node)) {\n // it is empty expression\n // do nothing\n } else {\n throw new Error('Unsupported child type');\n }\n } else if (child.isJSXText()) {\n result.template.push(String(child.node.value));\n } else {\n throw new Error('Unsupported child type');\n }\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 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\n if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\n delete props[prop];\n continue;\n }\n\n if (value === true) {\n result.template[result.template.length - 1] += ` ${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[result.template.length - 1] += ` ${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[result.template.length - 1] += ` class=\"${klass}\"`;\n }\n if (style) {\n result.template[result.template.length - 1] += ` style=\"${style}\"`;\n }\n}\n\nfunction replaceChild(node: t.Expression, result: Result): void {\n if (result.isLastChild) {\n result.index--;\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 t.identifier(String(result.template.length)),\n ]),\n );\n}\n\nfunction getChildren(path: NodePath<JSXElement>): JSXChild[] {\n return path\n .get('children')\n .filter(child => isValidChild(child))\n .map(child => {\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSXService(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 child type');\n }\n return child.node;\n });\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}\nfunction getAttrProps(path: NodePath<t.JSXElement>): Record<string, any> {\n const props: Record<string, any> = {};\n let hasExpression = false;\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 transformJSXService(expression);\n props[name] = expression.node;\n } else if (expression.isExpression()) {\n hasExpression = true;\n if (/^key|ref|on.+$/.test(name)) {\n props[name] = expression.node;\n } else if (/^bind:.+/.test(name)) {\n const value = path.scope.generateUidIdentifier('value');\n const bindName = name.slice(5).toLocaleLowerCase();\n props[bindName] = expression.node;\n props[`update${capitalizeFirstLetter(bindName)}`] = t.arrowFunctionExpression(\n [value],\n t.assignmentExpression('=', expression.node as OptionalMemberExpression, 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 transformJSXService(value);\n props[name] = value.node;\n }\n }\n } else if (attribute.isJSXSpreadAttribute()) {\n props._$spread$ = attribute.get('argument').node;\n hasExpression = true;\n } else {\n throw new Error('Unsupported attribute type');\n }\n });\n\n return {\n props,\n hasExpression,\n };\n}\n","import { type NodePath, types as t } from '@babel/core';\nimport type { State } from './types';\nexport const imports = new Set<string>();\n\nexport const transformProgram = {\n enter(path: NodePath<t.Program>, state) {\n imports.clear();\n\n path.state = {\n h: path.scope.generateUidIdentifier('h$'),\n renderTemplate: path.scope.generateUidIdentifier('renderTemplate$'),\n template: path.scope.generateUidIdentifier('template$'),\n\n useSignal: path.scope.generateUidIdentifier('signal$'),\n useComputed: path.scope.generateUidIdentifier('computed$'),\n useReactive: path.scope.generateUidIdentifier('reactive$'),\n\n tmplDeclaration: t.variableDeclaration('const', []),\n opts: state.opts,\n } as State;\n },\n exit(path: NodePath<t.Program>) {\n const state: State = path.state;\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 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];\n","import { type NodePath, types as t } from '@babel/core';\n\nexport type JSXElement = t.JSXElement | t.JSXFragment;\n\nexport type JSXChild =\n | t.JSXElement\n | t.JSXFragment\n | t.JSXExpressionContainer\n | t.JSXSpreadChild\n | t.JSXText;\n\n/**\n * Checks if the given Babel path has a sibling element.\n *\n * @param {NodePath} path - The Babel path to check.\n * @return {boolean} True if the path has a sibling element, false otherwise.\n */\nexport function hasSiblingElement(path) {\n // Get all siblings (both previous and next)\n const siblings = path.getAllPrevSiblings().concat(path.getAllNextSiblings());\n\n // Check for non-self-closing sibling elements or JSXExpressionContainer\n const hasSibling = siblings.some(\n siblingPath => siblingPath.isJSXElement() || siblingPath.isJSXExpressionContainer(),\n );\n\n return hasSibling;\n}\n/**\n * Retrieves the name of a JSX attribute.\n *\n * @param {t.JSXAttribute} attribute - The JSX attribute to retrieve the name from.\n * @return {string} The name of the attribute.\n * @throws {Error} If the attribute type is unsupported.\n */\nexport function 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\n/**\n * Retrieves the tag name of a JSX element.\n *\n * @param {t.JSXElement} node - The JSX element.\n * @return {string} The tag name of the JSX element.\n */\nexport function getTagName(node: t.JSXElement): string {\n const tag = node.openingElement.name;\n return jsxElementNameToString(tag);\n}\n\n/**\n * Converts a JSX element name to a string representation.\n *\n * case1: <MyComponent />\n * case2: <SomeLibrary.SomeComponent />;\n * case3: <namespace:ComponentName />;\n * case4: <SomeLibrary.Nested.ComponentName />;\n *\n * @param {t.JSXMemberExpression | t.JSXIdentifier | t.JSXNamespacedName} node The JSX element name to convert.\n * @returns {string} The string representation of the JSX element name.\n */\nexport function jsxElementNameToString(\n node: t.JSXMemberExpression | t.JSXIdentifier | t.JSXNamespacedName,\n) {\n if (t.isJSXMemberExpression(node)) {\n return `${jsxElementNameToString(node.object)}.${jsxElementNameToString(node.property)}`;\n }\n\n if (t.isJSXIdentifier(node) || t.isIdentifier(node)) {\n return node.name;\n }\n\n return `${node.namespace.name}:${node.name.name}`;\n}\n\n/**\n * Determines if the given tagName is a component.\n *\n * case1: <MyComponent />\n * case2: <SomeLibrary.SomeComponent />;\n * case3: <_component />;\n *\n * @param {string} tagName - The name of the tag to check.\n * @return {boolean} True if the tagName is a component, false otherwise.\n */\nexport function 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\n/**\n * Determines if the given path represents a text child node in a JSX expression.\n *\n * @param {NodePath<JSXChild>} path - The path to the potential text child node.\n * @return {boolean} True if the path represents a text child node, false otherwise.\n */\nexport function 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\n/**\n * Sets the text content of a JSX node.\n *\n * @param {NodePath<JSXChild>} path - The path to the JSX node.\n * @param {string} text - The text to set.\n * @return {void}\n */\nexport function 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","import { types as t } from '@babel/core';\nimport { capitalizeFirstLetter } from 'essor-shared';\nimport { imports } from '../program';\nimport { selfClosingTags, svgTags } from './constants';\nimport {\n type JSXChild,\n type JSXElement,\n getAttrName,\n getTagName,\n hasSiblingElement,\n isComponent,\n isTextChild,\n setNodeText,\n} from './shared';\nimport type { OptionalMemberExpression } from '@babel/types';\nimport type { State } from '../types';\nimport type { NodePath } from '@babel/core';\n\nexport interface Result {\n index: number;\n isLastChild: boolean;\n parentIndex: number;\n props: Record<string, any>;\n template: string;\n}\n\nexport function transformJSXClient(path: NodePath<JSXElement>): void {\n const result: Result = {\n index: 1,\n isLastChild: false,\n parentIndex: 0,\n props: {},\n template: '',\n };\n transformJSXElement(path, result, true);\n\n path.replaceWith(createEssorNode(path, result));\n}\n\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n\n let tmpl: t.Identifier;\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 if (key) {\n args.push(key);\n }\n imports.add('h');\n return t.callExpression(state.h, args);\n}\n\nfunction createProps(props) {\n const toAstNode = value => {\n if (Array.isArray(value)) {\n return t.arrayExpression(value.map(toAstNode));\n }\n if (value && typeof value === 'object' && !t.isNode(value)) {\n return createProps(value);\n }\n\n switch (typeof value) {\n case 'string':\n return t.stringLiteral(value);\n case 'number':\n return t.numericLiteral(value);\n case 'boolean':\n return t.booleanLiteral(value);\n case 'undefined':\n return t.tsUndefinedKeyword();\n case undefined:\n return t.tsUndefinedKeyword();\n case null:\n return t.nullLiteral();\n default:\n return value;\n }\n };\n\n const result = Object.keys(props)\n .filter(prop => prop !== 'key')\n .map(prop => {\n const value = toAstNode(props[prop]);\n return prop === '_$spread$'\n ? t.spreadElement(value)\n : t.objectProperty(t.stringLiteral(prop), value);\n });\n\n return t.objectExpression(result);\n}\nfunction transformJSXElement(\n path: NodePath<JSXElement>,\n result: Result,\n isRoot: boolean = false,\n): void {\n if (path.isJSXElement()) {\n const tagName = getTagName(path.node);\n const tagIsComponent = isComponent(tagName);\n const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);\n const isSvg = svgTags.includes(tagName) && result.index === 1;\n const props = getAttrProps(path);\n if (tagIsComponent) {\n if (isRoot) {\n result.props = props;\n const children = getChildren(path) as any;\n if (children.length > 0) {\n const childrenGenerator =\n children.length === 1 ? children[0] : t.arrayExpression(children);\n result.props.children = childrenGenerator;\n }\n } else {\n transformJSXClient(path);\n replaceChild(path.node, result);\n }\n } else {\n if (isSvg) {\n result.template = '<svg _svg_>';\n }\n result.template += `<${tagName}`;\n handleAttributes(props, result);\n result.template += isSelfClose ? '/>' : '>';\n if (!isSelfClose) {\n transformChildren(path, result);\n\n if (hasSiblingElement(path) ) {\n result.template += `</${tagName}>`;\n }\n }\n }\n } else {\n result.index--;\n transformChildren(path, result);\n }\n}\n\nfunction transformChildren(path: NodePath<JSXElement>, result: Result): void {\n const parentIndex = result.index;\n path\n .get('children')\n .reduce((pre, cur) => {\n if (isValidChild(cur)) {\n const lastChild = pre.at(-1);\n if (lastChild && isTextChild(cur) && isTextChild(lastChild)) {\n setNodeText(lastChild, getNodeText(lastChild) + getNodeText(cur));\n } else {\n pre.push(cur);\n }\n }\n return pre;\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\nfunction transformChild(child: NodePath<JSXChild>, result: Result): void {\n result.index++;\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSXElement(child, result, false);\n } else if (child.isJSXExpressionContainer()) {\n const expression = child.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n result.template += String(expression.node.value);\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else if (t.isJSXEmptyExpression(expression.node)) {\n // it is empty expression\n // do nothing\n } else {\n throw new Error('Unsupported child type');\n }\n } else if (child.isJSXText()) {\n result.template += String(child.node.value);\n } else {\n throw new Error('Unsupported child type');\n }\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 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\n if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\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\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 getChildren(path: NodePath<JSXElement>): JSXChild[] {\n return path\n .get('children')\n .filter(child => isValidChild(child))\n .map(child => {\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSXClient(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 child type');\n }\n return child.node;\n });\n}\n\nexport function 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}\nexport function 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 transformJSXClient(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 const value = path.scope.generateUidIdentifier('value');\n const bindName = name.slice(5).toLocaleLowerCase();\n props[bindName] = expression.node;\n props[`update${capitalizeFirstLetter(bindName)}`] = t.arrowFunctionExpression(\n [value],\n t.assignmentExpression('=', expression.node as OptionalMemberExpression, 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 transformJSXClient(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","import { transformJSXService } from './server';\nimport { transformJSXClient } from './client';\nimport type { NodePath, types as t } from '@babel/core';\nimport type { State } from '../types';\ntype JSXElement = t.JSXElement | t.JSXFragment;\nexport function transformJSX(path: NodePath<JSXElement>) {\n const state: State = path.state;\n const isSsg = state.opts.ssg;\n return isSsg ? transformJSXService(path) : transformJSXClient(path);\n}\n","import { types as t } from '@babel/core';\nimport { startsWith } from 'essor-shared';\nimport { imports } from '../program';\nimport type { Identifier, VariableDeclarator } from '@babel/types';\nimport type { NodePath } from '@babel/core';\n\n/**\n * 当一个变量/常量声明的时候,判断是否是$(定义的符号)开头,如果是,则进行转换。\n *\n * case 1: let $a = 1 => let $a = useSignal(1);\n * case 2: const $a = ()=>{return $a} => const $a = useComputed(()=>{return $a})\n *\n * 并且所有当前用到的值,都会添加.value\n * @param path\n * @returns {void}\n */\nexport function replaceSymbol(path: NodePath<VariableDeclarator>) {\n const init = path.node.init;\n const variableName = (path.node.id as Identifier).name;\n\n if (t.isObjectPattern(path.node.id) || t.isArrayPattern(path.node.id)) {\n return;\n }\n\n if (!startsWith(variableName, '$')) {\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.useComputed.name), init ? [init] : []);\n imports.add('useComputed');\n path.node.init = newInit;\n } else {\n const newInit = t.callExpression(t.identifier(path.state.useSignal.name), init ? [init] : []);\n imports.add('useSignal');\n path.node.init = newInit;\n }\n}\n\nexport function symbolIdentifier(path) {\n const parentPath = path.parentPath;\n\n if (\n !parentPath ||\n t.isVariableDeclarator(parentPath) ||\n t.isImportSpecifier(parentPath) ||\n t.isObjectProperty(parentPath) ||\n t.isArrayPattern(parentPath) ||\n t.isObjectPattern(parentPath)\n ) {\n return;\n }\n\n const { node } = path;\n\n if (node.name.startsWith('$')) {\n // check is has .value\n let currentPath = path;\n while (currentPath.parentPath && !currentPath.parentPath.isProgram()) {\n if (\n currentPath.parentPath.isMemberExpression() &&\n currentPath.parentPath.node.property.name === 'value'\n ) {\n return;\n }\n currentPath = currentPath.parentPath;\n }\n\n // add with .value\n const newNode = t.memberExpression(t.identifier(node.name), t.identifier('value'));\n\n path.replaceWith(newNode);\n }\n}\n\nexport function symbolObjectPattern(path) {\n path.node.properties.forEach(property => {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n property.key.name.startsWith('$')\n ) {\n const newKey = t.identifier(property.key.name);\n property.key = newKey;\n }\n });\n}\n\nexport function symbolArrayPattern(path) {\n path.node.elements.forEach(element => {\n if (t.isIdentifier(element) && element.name.startsWith('$')) {\n const newElement = t.identifier(element.name);\n element.name = newElement.name;\n } else if (t.isObjectPattern(element)) {\n element.properties.forEach(property => {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n property.key.name.startsWith('$')\n ) {\n const newKey = t.identifier(property.key.name);\n property.key = newKey;\n }\n });\n }\n });\n}\n","import { type NodePath, types as t } from '@babel/core';\nimport { startsWith } from 'essor-shared';\nimport type { ImportDeclaration } from '@babel/types';\n\nfunction isVariableUsedAsObject(path: NodePath<ImportDeclaration>, variableName: string) {\n const binding = path.scope.getBinding(variableName);\n let isUsedObject = false;\n if (!binding || !binding.referencePaths) {\n return isUsedObject;\n }\n\n for (const referencePath of binding.referencePaths) {\n if (t.isMemberExpression(referencePath.parent)) {\n // const memberExprParent = referencePath.parent;\n\n // if (memberExprParent.object && memberExprParent.property) {\n // const newMemberExpr = t.memberExpression(\n // memberExprParent.object,\n // t.identifier(`${(memberExprParent.property as t.Identifier).name}.value`),\n // );\n // referencePath.parentPath?.replaceWith(newMemberExpr);\n isUsedObject = true;\n // }\n }\n }\n\n return isUsedObject;\n}\n// TODO: 暂时不支持对象\nexport function replaceImportDeclaration(path: NodePath<ImportDeclaration>) {\n const imports = path.node.specifiers;\n imports.forEach(specifier => {\n const variableName = specifier.local.name;\n\n if (startsWith(variableName, '$') && !isVariableUsedAsObject(path, variableName)) {\n path.scope.rename(variableName, `${variableName}.value`);\n specifier.local.name = `${variableName}`;\n }\n });\n}\n","import { startsWith } from 'essor-shared';\nimport { type NodePath, types as t } from '@babel/core';\nimport { imports } from '../program';\nimport type { State } from '../types';\nimport type {\n ArrowFunctionExpression,\n FunctionDeclaration,\n Identifier,\n ObjectProperty,\n RestElement,\n} from '@babel/types';\n\nexport function replaceProps(path: NodePath<FunctionDeclaration | ArrowFunctionExpression>) {\n const state: State = path.state;\n\n const firstParam = path.node.params[0];\n\n if (!firstParam || !t.isObjectPattern(firstParam)) {\n return;\n }\n\n const returnStatement = path\n .get('body')\n .get('body')\n .find(statement => statement.isReturnStatement());\n\n if (!returnStatement) {\n return;\n }\n\n const returnValue = (returnStatement.node as any)?.argument;\n if (!t.isJSXElement(returnValue)) {\n return;\n }\n\n function replaceProperties(properties: (ObjectProperty | RestElement)[], parentPath: string) {\n properties.forEach(property => {\n if (t.isObjectProperty(property)) {\n const keyName = (property.key as Identifier).name;\n\n if (t.isIdentifier(property.value)) {\n const propertyName = property.value.name;\n const newName = `${parentPath}${keyName}`;\n path.scope.rename(propertyName, newName);\n } else if (t.isObjectPattern(property.value)) {\n replaceProperties(property.value.properties, `${parentPath}${keyName}.`);\n }\n }\n });\n }\n\n const properties = firstParam.properties;\n replaceProperties(\n properties.filter(property => !t.isRestElement(property)),\n '__props.',\n );\n const notRestProperties = properties.filter(property => !t.isRestElement(property));\n const notRestNames = notRestProperties.map(\n property => ((property as ObjectProperty).key as Identifier).name,\n );\n if (__DEV__ && notRestNames.some(name => startsWith(name, '$'))) {\n console.warn('props name can not start with $');\n return;\n }\n\n const restElement = properties.find(property => t.isRestElement(property)) as\n | RestElement\n | undefined;\n path.node.params[0] = t.identifier('__props');\n\n if (restElement) {\n const restName = (restElement.argument as any).name;\n if (notRestProperties.length === 0) {\n path.node.params[0] = t.identifier(restName);\n } else {\n const restVariableDeclaration = t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(restName),\n t.callExpression(state.useReactive, [\n t.identifier('__props'),\n t.arrayExpression(notRestNames.map(name => t.stringLiteral(name))),\n ]),\n ),\n ]);\n imports.add('useReactive');\n\n (path.node.body as any).body.unshift(restVariableDeclaration);\n }\n }\n}\n"],"mappings":"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","names":["import_core","t","import_core","t","t","value","import_core","createEssorNode","t","createProps","getAttrProps","getChildren","replaceChild","handleAttributes","transformChildren","isValidChild","getNodeText","transformChild","value","import_core","t","import_core","t","imports","import_core","t","properties"]}
|
package/dist/index.js
CHANGED
|
@@ -101,7 +101,9 @@ var svgTags = [
|
|
|
101
101
|
import { types as t2 } from "@babel/core";
|
|
102
102
|
function hasSiblingElement(path) {
|
|
103
103
|
const siblings = path.getAllPrevSiblings().concat(path.getAllNextSiblings());
|
|
104
|
-
const hasSibling = siblings.some(
|
|
104
|
+
const hasSibling = siblings.some(
|
|
105
|
+
(siblingPath) => siblingPath.isJSXElement() || siblingPath.isJSXExpressionContainer()
|
|
106
|
+
);
|
|
105
107
|
return hasSibling;
|
|
106
108
|
}
|
|
107
109
|
function getAttrName(attribute) {
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../shared/src/is.ts","../../shared/src/comm.ts","../../shared/src/name.ts","../src/jsx/server.ts","../src/program.ts","../src/jsx/constants.ts","../src/jsx/shared.ts","../src/jsx/client.ts","../src/jsx/index.ts","../src/signal/symbol.ts","../src/signal/import.ts","../src/signal/props.ts","../src/index.ts"],"sourcesContent":["import { _toString } from './comm';\n\nexport const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object';\nexport function isPromise(val: any): boolean {\n return _toString.call(val) === '[object Promise]';\n}\n\nexport const isArray = Array.isArray;\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\nexport function isNull(val: any): val is null {\n return val === null;\n}\nexport function isSymbol(val: unknown): val is symbol {\n return typeof val === 'symbol';\n}\nexport function isMap(val: unknown): val is Map<any, any> {\n return _toString.call(val) === '[object Map]';\n}\nexport function isNil(x: any): x is null | undefined {\n return x === null || x === undefined;\n}\n\nexport const isFunction = (val: unknown): val is Function => typeof val === 'function';\n\nexport function isFalsy(x: any): x is false | null | undefined {\n return x === false || x === null || x === undefined || x === '';\n}\n\nexport const isPrimitive = (\n val: unknown,\n): val is string | number | boolean | symbol | null | undefined =>\n ['string', 'number', 'boolean', 'symbol', 'undefined'].includes(typeof val) || isNull(val);\n\nexport const isHtmlElement = (val: unknown): val is HTMLElement => {\n return val instanceof HTMLElement || val instanceof SVGElement;\n};\n","import { isFunction, isPrimitive, isString } from './is';\n\nexport const _toString = Object.prototype.toString;\nexport const extend = Object.assign;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nexport const hasOwn = (val: object, key: string | symbol): key is keyof typeof val =>\n hasOwnProperty.call(val, key);\n\nexport function coerceArray<T>(data: T | T[]): T[] {\n return Array.isArray(data) ? (data.flat() as T[]) : [data];\n}\nexport const hasChanged = (value, oldValue) =>\n value !== oldValue && (value === value || oldValue === oldValue);\nexport const noop = Function.prototype as () => void;\n\n/**\n * A function that checks if a string starts with a specific substring.\n * indexOf faster under normal circumstances\n * @see https://www.measurethat.net/Benchmarks/Show/12350/0/startswith-vs-test-vs-match-vs-indexof#latest_results_block\n\n * @param {string} str - The input string to check.\n * @param {string} searchString - The substring to check for at the beginning of the input string.\n * @return {boolean} Returns true if the input string starts with the specified substring, otherwise false.\n */\nexport function startsWith(str, searchString) {\n if (!isString(str)) {\n return false;\n }\n return str.indexOf(searchString) === 0;\n}\n\n/**\n * Recursively clones an object, including its nested properties and special types like Date, RegExp, Map, and Set.\n *\n * @param {any} obj - The object to clone.\n * @param {WeakMap<object, object>} [hash] - A WeakMap used to track circular references.\n * @return {any} The cloned object.\n */\nexport function deepClone(obj, hash = new WeakMap()) {\n // Return primitives and functions as-is\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n // Handle circular references\n if (hash.has(obj)) {\n return hash.get(obj);\n }\n\n // Handle special types\n if (obj instanceof Date) {\n return new Date(obj);\n }\n\n if (obj instanceof RegExp) {\n return new RegExp(obj);\n }\n\n if (obj instanceof Map) {\n const mapClone = new Map();\n hash.set(obj, mapClone);\n obj.forEach((value, key) => {\n mapClone.set(deepClone(key, hash), deepClone(value, hash));\n });\n return mapClone;\n }\n\n if (obj instanceof Set) {\n const setClone = new Set();\n hash.set(obj, setClone);\n obj.forEach(value => {\n setClone.add(deepClone(value, hash));\n });\n return setClone;\n }\n\n // Initialize the clone and store it in the WeakMap\n const cloneObj = Array.isArray(obj) ? [] : {};\n hash.set(obj, cloneObj);\n\n // Iterate over object keys\n const keys = Object.keys(obj);\n for (const key of keys) {\n cloneObj[key] = deepClone(obj[key], hash);\n }\n\n return cloneObj;\n}\n\n/**\n * Determines whether two values are deeply equal.\n *\n * @param {any} a - The first value to compare.\n * @param {any} b - The second value to compare.\n * @param {WeakMap<object, object>} [seen] - A WeakMap used to store previously seen objects to avoid infinite recursion.\n * @return {boolean} True if the values are deeply equal, false otherwise.\n */\nexport function deepEqual(a: any, b: any, seen = new WeakMap()): boolean {\n if (isPrimitive(a) && isPrimitive(b)) {\n return a === b;\n }\n\n if (a === b) {\n return true;\n }\n\n if (a == null || b == null || typeof a !== 'object' || typeof b !== 'object') {\n return false;\n }\n\n if (a.constructor !== b.constructor) {\n return false;\n }\n\n if (seen.has(a)) {\n return seen.get(a) === b;\n }\n\n seen.set(a, b);\n\n if (Array.isArray(a)) {\n if (a.length !== b.length) {\n return false;\n }\n for (const [i, element] of a.entries()) {\n if (!deepEqual(element, b[i], seen)) {\n return false;\n }\n }\n return true;\n }\n\n if (a instanceof Map) {\n if (a.size !== b.size) {\n return false;\n }\n for (const [key, value] of a) {\n if (!b.has(key) || !deepEqual(value, b.get(key), seen)) {\n return false;\n }\n }\n return true;\n }\n\n if (a instanceof Set) {\n if (a.size !== b.size) {\n return false;\n }\n const arrA = Array.from(a).sort();\n const arrB = Array.from(b).sort();\n for (const [i, element] of arrA.entries()) {\n if (!deepEqual(element, arrB[i], seen)) {\n return false;\n }\n }\n return true;\n }\n\n const keysA = Object.keys(a);\n const keysB = new Set(Object.keys(b));\n\n if (keysA.length !== keysB.size) {\n return false;\n }\n\n for (const key of keysA) {\n if (!keysB.has(key) || !deepEqual(a[key], b[key], seen)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Escapes special HTML characters in a string.\n * @param str - The string to escape.\n * @returns The escaped string.\n */\nexport function escape(str: string): string {\n return str.replaceAll(/[\"&'<>]/g, char => {\n switch (char) {\n case '&':\n return '&';\n case '<':\n return '<';\n case '>':\n return '>';\n case '\"':\n return '"';\n case \"'\":\n return ''';\n default:\n return char;\n }\n });\n}\n\nexport type ExcludeType = ((key: string | symbol) => boolean) | (string | symbol)[];\n\n/**\n * Checks if a key should be excluded based on the provided exclude criteria.\n * @param key - The key to check.\n * @param exclude - The exclusion criteria.\n * @returns True if the key should be excluded, otherwise false.\n */\nexport function isExclude(key: string | symbol, exclude?: ExcludeType): boolean {\n return Array.isArray(exclude)\n ? exclude.includes(key)\n : isFunction(exclude)\n ? exclude(key)\n : false;\n}\n","export const kebabCase = (string: string): string => {\n return string.replaceAll(/[A-Z]+/g, (match, offset) => {\n return `${offset > 0 ? '-' : ''}${match.toLocaleLowerCase()}`;\n });\n};\n\nexport const camelCase = (str: string): string => {\n const s = str.replaceAll(/[\\s_-]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));\n return s[0].toLowerCase() + s.slice(1);\n};\n/**\n * Capitalizes the first letter of a string.\n *\n * @param {string} inputString - The input string to capitalize the first letter.\n * @return {string} The string with the first letter capitalized.\n */\nexport const capitalizeFirstLetter = (inputString: string): string => {\n return inputString.charAt(0).toUpperCase() + inputString.slice(1);\n};\n","import { capitalizeFirstLetter } from 'essor-shared';\nimport { types as t } from '@babel/core';\nimport { imports } from '../program';\nimport { selfClosingTags, svgTags } from './constants';\nimport {\n type JSXChild,\n type JSXElement,\n getAttrName,\n getTagName,\n isComponent,\n isTextChild,\n setNodeText,\n} from './shared';\nimport type { OptionalMemberExpression } from '@babel/types';\nimport type { State } from '../types';\nimport type { NodePath } from '@babel/core';\n\nexport interface Result {\n index: number;\n isLastChild: boolean;\n parentIndex: number;\n props: Record<string, any>;\n template: string[];\n}\n\nexport function transformJSXService(path: NodePath<JSXElement>): void {\n const result: Result = {\n index: 0,\n isLastChild: false,\n parentIndex: 0,\n props: {},\n template: [], // 修改为数组\n };\n transformJSXServiceElement(path, result, true);\n path.replaceWith(createEssorNode(path, result));\n}\n\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n\n let tmpl: t.Identifier;\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.arrayExpression(result.template.map(t.stringLiteral));\n const declarator = t.variableDeclarator(tmpl, template);\n state.tmplDeclaration.declarations.push(declarator);\n }\n\n const args = [tmpl, createProps(result.props)];\n const key = result.props.key || result.props[0]?.key;\n if (key) {\n args.push(key);\n }\n imports.add('renderTemplate');\n return t.callExpression(state.renderTemplate, args);\n}\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}\nfunction transformJSXServiceElement(\n path: NodePath<JSXElement>,\n result: Result,\n isRoot: boolean = false,\n): void {\n if (path.isJSXElement()) {\n const tagName = getTagName(path.node);\n const tagIsComponent = isComponent(tagName);\n const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);\n const isSvg = svgTags.includes(tagName) && result.index === 1;\n const { props, hasExpression } = getAttrProps(path);\n if (tagIsComponent) {\n if (isRoot) {\n result.props = props;\n const children = getChildren(path) as any;\n if (children.length > 0) {\n const childrenGenerator =\n children.length === 1 ? children[0] : t.arrayExpression(children);\n result.props.children = childrenGenerator;\n }\n } else {\n transformJSXService(path);\n replaceChild(path.node, result);\n }\n } else {\n if (isSvg) {\n result.template.push('<svg _svg_>');\n }\n result.template.push(`<${tagName}`);\n handleAttributes(props, result);\n\n if (hasExpression) {\n result.template.push(isSelfClose ? '/>' : '>');\n result.props ||= {};\n } else {\n result.template[result.template.length - 1] += isSelfClose ? '/>' : '>';\n }\n transformChildren(path, result);\n\n if (!isSelfClose) {\n result.template.push(`</${tagName}>`);\n }\n }\n } else {\n result.index--;\n transformChildren(path, result);\n }\n}\n\nfunction transformChildren(path: NodePath<JSXElement>, result: Result): void {\n const parentIndex = result.template.length;\n path\n .get('children')\n .reduce((pre, cur) => {\n if (isValidChild(cur)) {\n const lastChild = pre.at(-1);\n if (lastChild && isTextChild(cur) && isTextChild(lastChild)) {\n setNodeText(lastChild, getNodeText(lastChild) + getNodeText(cur));\n } else {\n pre.push(cur);\n }\n }\n return pre;\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\nfunction transformChild(child: NodePath<JSXChild>, result: Result): void {\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSXServiceElement(child, result, false);\n } else if (child.isJSXExpressionContainer()) {\n const expression = child.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n result.template[result.template.length - 1] += String(expression.node.value);\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else if (t.isJSXEmptyExpression(expression.node)) {\n // it is empty expression\n // do nothing\n } else {\n throw new Error('Unsupported child type');\n }\n } else if (child.isJSXText()) {\n result.template.push(String(child.node.value));\n } else {\n throw new Error('Unsupported child type');\n }\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 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\n if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\n delete props[prop];\n continue;\n }\n\n if (value === true) {\n result.template[result.template.length - 1] += ` ${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[result.template.length - 1] += ` ${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[result.template.length - 1] += ` class=\"${klass}\"`;\n }\n if (style) {\n result.template[result.template.length - 1] += ` style=\"${style}\"`;\n }\n}\n\nfunction replaceChild(node: t.Expression, result: Result): void {\n if (result.isLastChild) {\n result.index--;\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 t.identifier(String(result.template.length)),\n ]),\n );\n}\n\nfunction getChildren(path: NodePath<JSXElement>): JSXChild[] {\n return path\n .get('children')\n .filter(child => isValidChild(child))\n .map(child => {\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSXService(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 child type');\n }\n return child.node;\n });\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}\nfunction getAttrProps(path: NodePath<t.JSXElement>): Record<string, any> {\n const props: Record<string, any> = {};\n let hasExpression = false;\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 transformJSXService(expression);\n props[name] = expression.node;\n } else if (expression.isExpression()) {\n hasExpression = true;\n if (/^key|ref|on.+$/.test(name)) {\n props[name] = expression.node;\n } else if (/^bind:.+/.test(name)) {\n const value = path.scope.generateUidIdentifier('value');\n const bindName = name.slice(5).toLocaleLowerCase();\n props[bindName] = expression.node;\n props[`update${capitalizeFirstLetter(bindName)}`] = t.arrowFunctionExpression(\n [value],\n t.assignmentExpression('=', expression.node as OptionalMemberExpression, 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 transformJSXService(value);\n props[name] = value.node;\n }\n }\n } else if (attribute.isJSXSpreadAttribute()) {\n props._$spread$ = attribute.get('argument').node;\n hasExpression = true;\n } else {\n throw new Error('Unsupported attribute type');\n }\n });\n\n return {\n props,\n hasExpression,\n };\n}\n","import { type NodePath, types as t } from '@babel/core';\nimport type { State } from './types';\nexport const imports = new Set<string>();\n\nexport const transformProgram = {\n enter(path: NodePath<t.Program>, state) {\n imports.clear();\n\n path.state = {\n h: path.scope.generateUidIdentifier('h$'),\n renderTemplate: path.scope.generateUidIdentifier('renderTemplate$'),\n template: path.scope.generateUidIdentifier('template$'),\n\n useSignal: path.scope.generateUidIdentifier('signal$'),\n useComputed: path.scope.generateUidIdentifier('computed$'),\n useReactive: path.scope.generateUidIdentifier('reactive$'),\n\n tmplDeclaration: t.variableDeclaration('const', []),\n opts: state.opts,\n } as State;\n },\n exit(path: NodePath<t.Program>) {\n const state: State = path.state;\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 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];\n","import { type NodePath, types as t } from '@babel/core';\n\nexport type JSXElement = t.JSXElement | t.JSXFragment;\n\nexport type JSXChild =\n | t.JSXElement\n | t.JSXFragment\n | t.JSXExpressionContainer\n | t.JSXSpreadChild\n | t.JSXText;\n\n/**\n * Checks if the given Babel path has a sibling element.\n *\n * @param {NodePath} path - The Babel path to check.\n * @return {boolean} True if the path has a sibling element, false otherwise.\n */\nexport function hasSiblingElement(path) {\n // Get all siblings (both previous and next)\n const siblings = path.getAllPrevSiblings().concat(path.getAllNextSiblings());\n\n // Check for non-self-closing sibling elements\n const hasSibling = siblings.some(siblingPath => siblingPath.isJSXElement());\n\n return hasSibling;\n}\n\n/**\n * Retrieves the name of a JSX attribute.\n *\n * @param {t.JSXAttribute} attribute - The JSX attribute to retrieve the name from.\n * @return {string} The name of the attribute.\n * @throws {Error} If the attribute type is unsupported.\n */\nexport function 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\n/**\n * Retrieves the tag name of a JSX element.\n *\n * @param {t.JSXElement} node - The JSX element.\n * @return {string} The tag name of the JSX element.\n */\nexport function getTagName(node: t.JSXElement): string {\n const tag = node.openingElement.name;\n return jsxElementNameToString(tag);\n}\n\n/**\n * Converts a JSX element name to a string representation.\n *\n * case1: <MyComponent />\n * case2: <SomeLibrary.SomeComponent />;\n * case3: <namespace:ComponentName />;\n * case4: <SomeLibrary.Nested.ComponentName />;\n *\n * @param {t.JSXMemberExpression | t.JSXIdentifier | t.JSXNamespacedName} node The JSX element name to convert.\n * @returns {string} The string representation of the JSX element name.\n */\nexport function jsxElementNameToString(\n node: t.JSXMemberExpression | t.JSXIdentifier | t.JSXNamespacedName,\n) {\n if (t.isJSXMemberExpression(node)) {\n return `${jsxElementNameToString(node.object)}.${jsxElementNameToString(node.property)}`;\n }\n\n if (t.isJSXIdentifier(node) || t.isIdentifier(node)) {\n return node.name;\n }\n\n return `${node.namespace.name}:${node.name.name}`;\n}\n\n/**\n * Determines if the given tagName is a component.\n *\n * case1: <MyComponent />\n * case2: <SomeLibrary.SomeComponent />;\n * case3: <_component />;\n *\n * @param {string} tagName - The name of the tag to check.\n * @return {boolean} True if the tagName is a component, false otherwise.\n */\nexport function 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\n/**\n * Determines if the given path represents a text child node in a JSX expression.\n *\n * @param {NodePath<JSXChild>} path - The path to the potential text child node.\n * @return {boolean} True if the path represents a text child node, false otherwise.\n */\nexport function 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\n/**\n * Sets the text content of a JSX node.\n *\n * @param {NodePath<JSXChild>} path - The path to the JSX node.\n * @param {string} text - The text to set.\n * @return {void}\n */\nexport function 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","import { types as t } from '@babel/core';\nimport { capitalizeFirstLetter } from 'essor-shared';\nimport { imports } from '../program';\nimport { selfClosingTags, svgTags } from './constants';\nimport {\n type JSXChild,\n type JSXElement,\n getAttrName,\n getTagName,\n hasSiblingElement,\n isComponent,\n isTextChild,\n setNodeText,\n} from './shared';\nimport type { OptionalMemberExpression } from '@babel/types';\nimport type { State } from '../types';\nimport type { NodePath } from '@babel/core';\n\nexport interface Result {\n index: number;\n isLastChild: boolean;\n parentIndex: number;\n props: Record<string, any>;\n template: string;\n}\n\nexport function transformJSXClient(path: NodePath<JSXElement>): void {\n const result: Result = {\n index: 1,\n isLastChild: false,\n parentIndex: 0,\n props: {},\n template: '',\n };\n transformJSXElement(path, result, true);\n\n path.replaceWith(createEssorNode(path, result));\n}\n\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n\n let tmpl: t.Identifier;\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 if (key) {\n args.push(key);\n }\n imports.add('h');\n return t.callExpression(state.h, args);\n}\n\nfunction createProps(props) {\n const toAstNode = value => {\n if (Array.isArray(value)) {\n return t.arrayExpression(value.map(toAstNode));\n }\n if (value && typeof value === 'object' && !t.isNode(value)) {\n return createProps(value);\n }\n\n switch (typeof value) {\n case 'string':\n return t.stringLiteral(value);\n case 'number':\n return t.numericLiteral(value);\n case 'boolean':\n return t.booleanLiteral(value);\n case 'undefined':\n return t.tsUndefinedKeyword();\n case undefined:\n return t.tsUndefinedKeyword();\n case null:\n return t.nullLiteral();\n default:\n return value;\n }\n };\n\n const result = Object.keys(props)\n .filter(prop => prop !== 'key')\n .map(prop => {\n const value = toAstNode(props[prop]);\n return prop === '_$spread$'\n ? t.spreadElement(value)\n : t.objectProperty(t.stringLiteral(prop), value);\n });\n\n return t.objectExpression(result);\n}\nfunction transformJSXElement(\n path: NodePath<JSXElement>,\n result: Result,\n isRoot: boolean = false,\n): void {\n if (path.isJSXElement()) {\n const tagName = getTagName(path.node);\n const tagIsComponent = isComponent(tagName);\n const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);\n const isSvg = svgTags.includes(tagName) && result.index === 1;\n const props = getAttrProps(path);\n if (tagIsComponent) {\n if (isRoot) {\n result.props = props;\n const children = getChildren(path) as any;\n if (children.length > 0) {\n const childrenGenerator =\n children.length === 1 ? children[0] : t.arrayExpression(children);\n result.props.children = childrenGenerator;\n }\n } else {\n transformJSXClient(path);\n replaceChild(path.node, result);\n }\n } else {\n if (isSvg) {\n result.template = '<svg _svg_>';\n }\n result.template += `<${tagName}`;\n handleAttributes(props, result);\n result.template += isSelfClose ? '/>' : '>';\n if (!isSelfClose) {\n transformChildren(path, result);\n if (hasSiblingElement(path)) {\n result.template += `</${tagName}>`;\n }\n }\n }\n } else {\n result.index--;\n transformChildren(path, result);\n }\n}\n\nfunction transformChildren(path: NodePath<JSXElement>, result: Result): void {\n const parentIndex = result.index;\n path\n .get('children')\n .reduce((pre, cur) => {\n if (isValidChild(cur)) {\n const lastChild = pre.at(-1);\n if (lastChild && isTextChild(cur) && isTextChild(lastChild)) {\n setNodeText(lastChild, getNodeText(lastChild) + getNodeText(cur));\n } else {\n pre.push(cur);\n }\n }\n return pre;\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\nfunction transformChild(child: NodePath<JSXChild>, result: Result): void {\n result.index++;\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSXElement(child, result, false);\n } else if (child.isJSXExpressionContainer()) {\n const expression = child.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n result.template += String(expression.node.value);\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else if (t.isJSXEmptyExpression(expression.node)) {\n // it is empty expression\n // do nothing\n } else {\n throw new Error('Unsupported child type');\n }\n } else if (child.isJSXText()) {\n result.template += String(child.node.value);\n } else {\n throw new Error('Unsupported child type');\n }\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 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\n if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\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\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 getChildren(path: NodePath<JSXElement>): JSXChild[] {\n return path\n .get('children')\n .filter(child => isValidChild(child))\n .map(child => {\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSXClient(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 child type');\n }\n return child.node;\n });\n}\n\nexport function 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}\nexport function 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 transformJSXClient(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 const value = path.scope.generateUidIdentifier('value');\n const bindName = name.slice(5).toLocaleLowerCase();\n props[bindName] = expression.node;\n props[`update${capitalizeFirstLetter(bindName)}`] = t.arrowFunctionExpression(\n [value],\n t.assignmentExpression('=', expression.node as OptionalMemberExpression, 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 transformJSXClient(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","import { transformJSXService } from './server';\nimport { transformJSXClient } from './client';\nimport type { NodePath, types as t } from '@babel/core';\nimport type { State } from '../types';\ntype JSXElement = t.JSXElement | t.JSXFragment;\nexport function transformJSX(path: NodePath<JSXElement>) {\n const state: State = path.state;\n const isSsg = state.opts.ssg;\n return isSsg ? transformJSXService(path) : transformJSXClient(path);\n}\n","import { types as t } from '@babel/core';\nimport { startsWith } from 'essor-shared';\nimport { imports } from '../program';\nimport type { Identifier, VariableDeclarator } from '@babel/types';\nimport type { NodePath } from '@babel/core';\n\n/**\n * 当一个变量/常量声明的时候,判断是否是$(定义的符号)开头,如果是,则进行转换。\n *\n * case 1: let $a = 1 => let $a = useSignal(1);\n * case 2: const $a = ()=>{return $a} => const $a = useComputed(()=>{return $a})\n *\n * 并且所有当前用到的值,都会添加.value\n * @param path\n * @returns {void}\n */\nexport function replaceSymbol(path: NodePath<VariableDeclarator>) {\n const init = path.node.init;\n const variableName = (path.node.id as Identifier).name;\n\n if (t.isObjectPattern(path.node.id) || t.isArrayPattern(path.node.id)) {\n return;\n }\n\n if (!startsWith(variableName, '$')) {\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.useComputed.name), init ? [init] : []);\n imports.add('useComputed');\n path.node.init = newInit;\n } else {\n const newInit = t.callExpression(t.identifier(path.state.useSignal.name), init ? [init] : []);\n imports.add('useSignal');\n path.node.init = newInit;\n }\n}\n\nexport function symbolIdentifier(path) {\n const parentPath = path.parentPath;\n\n if (\n !parentPath ||\n t.isVariableDeclarator(parentPath) ||\n t.isImportSpecifier(parentPath) ||\n t.isObjectProperty(parentPath) ||\n t.isArrayPattern(parentPath) ||\n t.isObjectPattern(parentPath)\n ) {\n return;\n }\n\n const { node } = path;\n\n if (node.name.startsWith('$')) {\n // check is has .value\n let currentPath = path;\n while (currentPath.parentPath && !currentPath.parentPath.isProgram()) {\n if (\n currentPath.parentPath.isMemberExpression() &&\n currentPath.parentPath.node.property.name === 'value'\n ) {\n return;\n }\n currentPath = currentPath.parentPath;\n }\n\n // add with .value\n const newNode = t.memberExpression(t.identifier(node.name), t.identifier('value'));\n\n path.replaceWith(newNode);\n }\n}\n\nexport function symbolObjectPattern(path) {\n path.node.properties.forEach(property => {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n property.key.name.startsWith('$')\n ) {\n const newKey = t.identifier(property.key.name);\n property.key = newKey;\n }\n });\n}\n\nexport function symbolArrayPattern(path) {\n path.node.elements.forEach(element => {\n if (t.isIdentifier(element) && element.name.startsWith('$')) {\n const newElement = t.identifier(element.name);\n element.name = newElement.name;\n } else if (t.isObjectPattern(element)) {\n element.properties.forEach(property => {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n property.key.name.startsWith('$')\n ) {\n const newKey = t.identifier(property.key.name);\n property.key = newKey;\n }\n });\n }\n });\n}\n","import { type NodePath, types as t } from '@babel/core';\nimport { startsWith } from 'essor-shared';\nimport type { ImportDeclaration } from '@babel/types';\n\nfunction isVariableUsedAsObject(path: NodePath<ImportDeclaration>, variableName: string) {\n const binding = path.scope.getBinding(variableName);\n let isUsedObject = false;\n if (!binding || !binding.referencePaths) {\n return isUsedObject;\n }\n\n for (const referencePath of binding.referencePaths) {\n if (t.isMemberExpression(referencePath.parent)) {\n // const memberExprParent = referencePath.parent;\n\n // if (memberExprParent.object && memberExprParent.property) {\n // const newMemberExpr = t.memberExpression(\n // memberExprParent.object,\n // t.identifier(`${(memberExprParent.property as t.Identifier).name}.value`),\n // );\n // referencePath.parentPath?.replaceWith(newMemberExpr);\n isUsedObject = true;\n // }\n }\n }\n\n return isUsedObject;\n}\n// TODO: 暂时不支持对象\nexport function replaceImportDeclaration(path: NodePath<ImportDeclaration>) {\n const imports = path.node.specifiers;\n imports.forEach(specifier => {\n const variableName = specifier.local.name;\n\n if (startsWith(variableName, '$') && !isVariableUsedAsObject(path, variableName)) {\n path.scope.rename(variableName, `${variableName}.value`);\n specifier.local.name = `${variableName}`;\n }\n });\n}\n","import { startsWith } from 'essor-shared';\nimport { type NodePath, types as t } from '@babel/core';\nimport { imports } from '../program';\nimport type { State } from '../types';\nimport type {\n ArrowFunctionExpression,\n FunctionDeclaration,\n Identifier,\n ObjectProperty,\n RestElement,\n} from '@babel/types';\n\nexport function replaceProps(path: NodePath<FunctionDeclaration | ArrowFunctionExpression>) {\n const state: State = path.state;\n\n const firstParam = path.node.params[0];\n\n if (!firstParam || !t.isObjectPattern(firstParam)) {\n return;\n }\n\n const returnStatement = path\n .get('body')\n .get('body')\n .find(statement => statement.isReturnStatement());\n\n if (!returnStatement) {\n return;\n }\n\n const returnValue = (returnStatement.node as any)?.argument;\n if (!t.isJSXElement(returnValue)) {\n return;\n }\n\n function replaceProperties(properties: (ObjectProperty | RestElement)[], parentPath: string) {\n properties.forEach(property => {\n if (t.isObjectProperty(property)) {\n const keyName = (property.key as Identifier).name;\n\n if (t.isIdentifier(property.value)) {\n const propertyName = property.value.name;\n const newName = `${parentPath}${keyName}`;\n path.scope.rename(propertyName, newName);\n } else if (t.isObjectPattern(property.value)) {\n replaceProperties(property.value.properties, `${parentPath}${keyName}.`);\n }\n }\n });\n }\n\n const properties = firstParam.properties;\n replaceProperties(\n properties.filter(property => !t.isRestElement(property)),\n '__props.',\n );\n const notRestProperties = properties.filter(property => !t.isRestElement(property));\n const notRestNames = notRestProperties.map(\n property => ((property as ObjectProperty).key as Identifier).name,\n );\n if (__DEV__ && notRestNames.some(name => startsWith(name, '$'))) {\n console.warn('props name can not start with $');\n return;\n }\n\n const restElement = properties.find(property => t.isRestElement(property)) as\n | RestElement\n | undefined;\n path.node.params[0] = t.identifier('__props');\n\n if (restElement) {\n const restName = (restElement.argument as any).name;\n if (notRestProperties.length === 0) {\n path.node.params[0] = t.identifier(restName);\n } else {\n const restVariableDeclaration = t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(restName),\n t.callExpression(state.useReactive, [\n t.identifier('__props'),\n t.arrayExpression(notRestNames.map(name => t.stringLiteral(name))),\n ]),\n ),\n ]);\n imports.add('useReactive');\n\n (path.node.body as any).body.unshift(restVariableDeclaration);\n }\n }\n}\n","import { transformJSX } from './jsx';\nimport { transformProgram } from './program';\nimport {\n replaceSymbol,\n symbolArrayPattern,\n symbolIdentifier,\n symbolObjectPattern,\n} from './signal/symbol';\nimport { replaceImportDeclaration } from './signal/import';\nimport { replaceProps } from './signal/props';\nimport type { PluginObj } from '@babel/core';\nexport { Options, State } from './types';\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 FunctionDeclaration: replaceProps,\n ArrowFunctionExpression: replaceProps,\n VariableDeclarator: replaceSymbol,\n ImportDeclaration: replaceImportDeclaration,\n Identifier: symbolIdentifier,\n ObjectPattern: symbolObjectPattern,\n ArrayPattern: symbolArrayPattern,\n },\n };\n}\n"],"mappings":"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","names":["t","t","t","value","t","createEssorNode","t","createProps","getAttrProps","getChildren","replaceChild","handleAttributes","transformChildren","isValidChild","getNodeText","transformChild","value","t","t","t","t","imports","t","t","properties"]}
|
|
1
|
+
{"version":3,"sources":["../../shared/src/is.ts","../../shared/src/comm.ts","../../shared/src/name.ts","../src/jsx/server.ts","../src/program.ts","../src/jsx/constants.ts","../src/jsx/shared.ts","../src/jsx/client.ts","../src/jsx/index.ts","../src/signal/symbol.ts","../src/signal/import.ts","../src/signal/props.ts","../src/index.ts"],"sourcesContent":["import { _toString } from './comm';\n\nexport const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object';\nexport function isPromise(val: any): boolean {\n return _toString.call(val) === '[object Promise]';\n}\n\nexport const isArray = Array.isArray;\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\nexport function isNull(val: any): val is null {\n return val === null;\n}\nexport function isSymbol(val: unknown): val is symbol {\n return typeof val === 'symbol';\n}\nexport function isMap(val: unknown): val is Map<any, any> {\n return _toString.call(val) === '[object Map]';\n}\nexport function isNil(x: any): x is null | undefined {\n return x === null || x === undefined;\n}\n\nexport const isFunction = (val: unknown): val is Function => typeof val === 'function';\n\nexport function isFalsy(x: any): x is false | null | undefined {\n return x === false || x === null || x === undefined || x === '';\n}\n\nexport const isPrimitive = (\n val: unknown,\n): val is string | number | boolean | symbol | null | undefined =>\n ['string', 'number', 'boolean', 'symbol', 'undefined'].includes(typeof val) || isNull(val);\n\nexport const isHtmlElement = (val: unknown): val is HTMLElement => {\n return val instanceof HTMLElement || val instanceof SVGElement;\n};\n","import { isFunction, isPrimitive, isString } from './is';\n\nexport const _toString = Object.prototype.toString;\nexport const extend = Object.assign;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nexport const hasOwn = (val: object, key: string | symbol): key is keyof typeof val =>\n hasOwnProperty.call(val, key);\n\nexport function coerceArray<T>(data: T | T[]): T[] {\n return Array.isArray(data) ? (data.flat() as T[]) : [data];\n}\nexport const hasChanged = (value, oldValue) =>\n value !== oldValue && (value === value || oldValue === oldValue);\nexport const noop = Function.prototype as () => void;\n\n/**\n * A function that checks if a string starts with a specific substring.\n * indexOf faster under normal circumstances\n * @see https://www.measurethat.net/Benchmarks/Show/12350/0/startswith-vs-test-vs-match-vs-indexof#latest_results_block\n\n * @param {string} str - The input string to check.\n * @param {string} searchString - The substring to check for at the beginning of the input string.\n * @return {boolean} Returns true if the input string starts with the specified substring, otherwise false.\n */\nexport function startsWith(str, searchString) {\n if (!isString(str)) {\n return false;\n }\n return str.indexOf(searchString) === 0;\n}\n\n/**\n * Recursively clones an object, including its nested properties and special types like Date, RegExp, Map, and Set.\n *\n * @param {any} obj - The object to clone.\n * @param {WeakMap<object, object>} [hash] - A WeakMap used to track circular references.\n * @return {any} The cloned object.\n */\nexport function deepClone(obj, hash = new WeakMap()) {\n // Return primitives and functions as-is\n if (obj === null || typeof obj !== 'object') {\n return obj;\n }\n\n // Handle circular references\n if (hash.has(obj)) {\n return hash.get(obj);\n }\n\n // Handle special types\n if (obj instanceof Date) {\n return new Date(obj);\n }\n\n if (obj instanceof RegExp) {\n return new RegExp(obj);\n }\n\n if (obj instanceof Map) {\n const mapClone = new Map();\n hash.set(obj, mapClone);\n obj.forEach((value, key) => {\n mapClone.set(deepClone(key, hash), deepClone(value, hash));\n });\n return mapClone;\n }\n\n if (obj instanceof Set) {\n const setClone = new Set();\n hash.set(obj, setClone);\n obj.forEach(value => {\n setClone.add(deepClone(value, hash));\n });\n return setClone;\n }\n\n // Initialize the clone and store it in the WeakMap\n const cloneObj = Array.isArray(obj) ? [] : {};\n hash.set(obj, cloneObj);\n\n // Iterate over object keys\n const keys = Object.keys(obj);\n for (const key of keys) {\n cloneObj[key] = deepClone(obj[key], hash);\n }\n\n return cloneObj;\n}\n\n/**\n * Determines whether two values are deeply equal.\n *\n * @param {any} a - The first value to compare.\n * @param {any} b - The second value to compare.\n * @param {WeakMap<object, object>} [seen] - A WeakMap used to store previously seen objects to avoid infinite recursion.\n * @return {boolean} True if the values are deeply equal, false otherwise.\n */\nexport function deepEqual(a: any, b: any, seen = new WeakMap()): boolean {\n if (isPrimitive(a) && isPrimitive(b)) {\n return a === b;\n }\n\n if (a === b) {\n return true;\n }\n\n if (a == null || b == null || typeof a !== 'object' || typeof b !== 'object') {\n return false;\n }\n\n if (a.constructor !== b.constructor) {\n return false;\n }\n\n if (seen.has(a)) {\n return seen.get(a) === b;\n }\n\n seen.set(a, b);\n\n if (Array.isArray(a)) {\n if (a.length !== b.length) {\n return false;\n }\n for (const [i, element] of a.entries()) {\n if (!deepEqual(element, b[i], seen)) {\n return false;\n }\n }\n return true;\n }\n\n if (a instanceof Map) {\n if (a.size !== b.size) {\n return false;\n }\n for (const [key, value] of a) {\n if (!b.has(key) || !deepEqual(value, b.get(key), seen)) {\n return false;\n }\n }\n return true;\n }\n\n if (a instanceof Set) {\n if (a.size !== b.size) {\n return false;\n }\n const arrA = Array.from(a).sort();\n const arrB = Array.from(b).sort();\n for (const [i, element] of arrA.entries()) {\n if (!deepEqual(element, arrB[i], seen)) {\n return false;\n }\n }\n return true;\n }\n\n const keysA = Object.keys(a);\n const keysB = new Set(Object.keys(b));\n\n if (keysA.length !== keysB.size) {\n return false;\n }\n\n for (const key of keysA) {\n if (!keysB.has(key) || !deepEqual(a[key], b[key], seen)) {\n return false;\n }\n }\n\n return true;\n}\n\n/**\n * Escapes special HTML characters in a string.\n * @param str - The string to escape.\n * @returns The escaped string.\n */\nexport function escape(str: string): string {\n return str.replaceAll(/[\"&'<>]/g, char => {\n switch (char) {\n case '&':\n return '&';\n case '<':\n return '<';\n case '>':\n return '>';\n case '\"':\n return '"';\n case \"'\":\n return ''';\n default:\n return char;\n }\n });\n}\n\nexport type ExcludeType = ((key: string | symbol) => boolean) | (string | symbol)[];\n\n/**\n * Checks if a key should be excluded based on the provided exclude criteria.\n * @param key - The key to check.\n * @param exclude - The exclusion criteria.\n * @returns True if the key should be excluded, otherwise false.\n */\nexport function isExclude(key: string | symbol, exclude?: ExcludeType): boolean {\n return Array.isArray(exclude)\n ? exclude.includes(key)\n : isFunction(exclude)\n ? exclude(key)\n : false;\n}\n","export const kebabCase = (string: string): string => {\n return string.replaceAll(/[A-Z]+/g, (match, offset) => {\n return `${offset > 0 ? '-' : ''}${match.toLocaleLowerCase()}`;\n });\n};\n\nexport const camelCase = (str: string): string => {\n const s = str.replaceAll(/[\\s_-]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));\n return s[0].toLowerCase() + s.slice(1);\n};\n/**\n * Capitalizes the first letter of a string.\n *\n * @param {string} inputString - The input string to capitalize the first letter.\n * @return {string} The string with the first letter capitalized.\n */\nexport const capitalizeFirstLetter = (inputString: string): string => {\n return inputString.charAt(0).toUpperCase() + inputString.slice(1);\n};\n","import { capitalizeFirstLetter } from 'essor-shared';\nimport { types as t } from '@babel/core';\nimport { imports } from '../program';\nimport { selfClosingTags, svgTags } from './constants';\nimport {\n type JSXChild,\n type JSXElement,\n getAttrName,\n getTagName,\n isComponent,\n isTextChild,\n setNodeText,\n} from './shared';\nimport type { OptionalMemberExpression } from '@babel/types';\nimport type { State } from '../types';\nimport type { NodePath } from '@babel/core';\n\nexport interface Result {\n index: number;\n isLastChild: boolean;\n parentIndex: number;\n props: Record<string, any>;\n template: string[];\n}\n\nexport function transformJSXService(path: NodePath<JSXElement>): void {\n const result: Result = {\n index: 0,\n isLastChild: false,\n parentIndex: 0,\n props: {},\n template: [], // 修改为数组\n };\n transformJSXServiceElement(path, result, true);\n path.replaceWith(createEssorNode(path, result));\n}\n\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n\n let tmpl: t.Identifier;\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.arrayExpression(result.template.map(t.stringLiteral));\n const declarator = t.variableDeclarator(tmpl, template);\n state.tmplDeclaration.declarations.push(declarator);\n }\n\n const args = [tmpl, createProps(result.props)];\n const key = result.props.key || result.props[0]?.key;\n if (key) {\n args.push(key);\n }\n imports.add('renderTemplate');\n return t.callExpression(state.renderTemplate, args);\n}\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}\nfunction transformJSXServiceElement(\n path: NodePath<JSXElement>,\n result: Result,\n isRoot: boolean = false,\n): void {\n if (path.isJSXElement()) {\n const tagName = getTagName(path.node);\n const tagIsComponent = isComponent(tagName);\n const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);\n const isSvg = svgTags.includes(tagName) && result.index === 1;\n const { props, hasExpression } = getAttrProps(path);\n if (tagIsComponent) {\n if (isRoot) {\n result.props = props;\n const children = getChildren(path) as any;\n if (children.length > 0) {\n const childrenGenerator =\n children.length === 1 ? children[0] : t.arrayExpression(children);\n result.props.children = childrenGenerator;\n }\n } else {\n transformJSXService(path);\n replaceChild(path.node, result);\n }\n } else {\n if (isSvg) {\n result.template.push('<svg _svg_>');\n }\n result.template.push(`<${tagName}`);\n handleAttributes(props, result);\n\n if (hasExpression) {\n result.template.push(isSelfClose ? '/>' : '>');\n result.props ||= {};\n } else {\n result.template[result.template.length - 1] += isSelfClose ? '/>' : '>';\n }\n transformChildren(path, result);\n\n if (!isSelfClose) {\n result.template.push(`</${tagName}>`);\n }\n }\n } else {\n result.index--;\n transformChildren(path, result);\n }\n}\n\nfunction transformChildren(path: NodePath<JSXElement>, result: Result): void {\n const parentIndex = result.template.length;\n path\n .get('children')\n .reduce((pre, cur) => {\n if (isValidChild(cur)) {\n const lastChild = pre.at(-1);\n if (lastChild && isTextChild(cur) && isTextChild(lastChild)) {\n setNodeText(lastChild, getNodeText(lastChild) + getNodeText(cur));\n } else {\n pre.push(cur);\n }\n }\n return pre;\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\nfunction transformChild(child: NodePath<JSXChild>, result: Result): void {\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSXServiceElement(child, result, false);\n } else if (child.isJSXExpressionContainer()) {\n const expression = child.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n result.template[result.template.length - 1] += String(expression.node.value);\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else if (t.isJSXEmptyExpression(expression.node)) {\n // it is empty expression\n // do nothing\n } else {\n throw new Error('Unsupported child type');\n }\n } else if (child.isJSXText()) {\n result.template.push(String(child.node.value));\n } else {\n throw new Error('Unsupported child type');\n }\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 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\n if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\n delete props[prop];\n continue;\n }\n\n if (value === true) {\n result.template[result.template.length - 1] += ` ${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[result.template.length - 1] += ` ${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[result.template.length - 1] += ` class=\"${klass}\"`;\n }\n if (style) {\n result.template[result.template.length - 1] += ` style=\"${style}\"`;\n }\n}\n\nfunction replaceChild(node: t.Expression, result: Result): void {\n if (result.isLastChild) {\n result.index--;\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 t.identifier(String(result.template.length)),\n ]),\n );\n}\n\nfunction getChildren(path: NodePath<JSXElement>): JSXChild[] {\n return path\n .get('children')\n .filter(child => isValidChild(child))\n .map(child => {\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSXService(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 child type');\n }\n return child.node;\n });\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}\nfunction getAttrProps(path: NodePath<t.JSXElement>): Record<string, any> {\n const props: Record<string, any> = {};\n let hasExpression = false;\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 transformJSXService(expression);\n props[name] = expression.node;\n } else if (expression.isExpression()) {\n hasExpression = true;\n if (/^key|ref|on.+$/.test(name)) {\n props[name] = expression.node;\n } else if (/^bind:.+/.test(name)) {\n const value = path.scope.generateUidIdentifier('value');\n const bindName = name.slice(5).toLocaleLowerCase();\n props[bindName] = expression.node;\n props[`update${capitalizeFirstLetter(bindName)}`] = t.arrowFunctionExpression(\n [value],\n t.assignmentExpression('=', expression.node as OptionalMemberExpression, 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 transformJSXService(value);\n props[name] = value.node;\n }\n }\n } else if (attribute.isJSXSpreadAttribute()) {\n props._$spread$ = attribute.get('argument').node;\n hasExpression = true;\n } else {\n throw new Error('Unsupported attribute type');\n }\n });\n\n return {\n props,\n hasExpression,\n };\n}\n","import { type NodePath, types as t } from '@babel/core';\nimport type { State } from './types';\nexport const imports = new Set<string>();\n\nexport const transformProgram = {\n enter(path: NodePath<t.Program>, state) {\n imports.clear();\n\n path.state = {\n h: path.scope.generateUidIdentifier('h$'),\n renderTemplate: path.scope.generateUidIdentifier('renderTemplate$'),\n template: path.scope.generateUidIdentifier('template$'),\n\n useSignal: path.scope.generateUidIdentifier('signal$'),\n useComputed: path.scope.generateUidIdentifier('computed$'),\n useReactive: path.scope.generateUidIdentifier('reactive$'),\n\n tmplDeclaration: t.variableDeclaration('const', []),\n opts: state.opts,\n } as State;\n },\n exit(path: NodePath<t.Program>) {\n const state: State = path.state;\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 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];\n","import { type NodePath, types as t } from '@babel/core';\n\nexport type JSXElement = t.JSXElement | t.JSXFragment;\n\nexport type JSXChild =\n | t.JSXElement\n | t.JSXFragment\n | t.JSXExpressionContainer\n | t.JSXSpreadChild\n | t.JSXText;\n\n/**\n * Checks if the given Babel path has a sibling element.\n *\n * @param {NodePath} path - The Babel path to check.\n * @return {boolean} True if the path has a sibling element, false otherwise.\n */\nexport function hasSiblingElement(path) {\n // Get all siblings (both previous and next)\n const siblings = path.getAllPrevSiblings().concat(path.getAllNextSiblings());\n\n // Check for non-self-closing sibling elements or JSXExpressionContainer\n const hasSibling = siblings.some(\n siblingPath => siblingPath.isJSXElement() || siblingPath.isJSXExpressionContainer(),\n );\n\n return hasSibling;\n}\n/**\n * Retrieves the name of a JSX attribute.\n *\n * @param {t.JSXAttribute} attribute - The JSX attribute to retrieve the name from.\n * @return {string} The name of the attribute.\n * @throws {Error} If the attribute type is unsupported.\n */\nexport function 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\n/**\n * Retrieves the tag name of a JSX element.\n *\n * @param {t.JSXElement} node - The JSX element.\n * @return {string} The tag name of the JSX element.\n */\nexport function getTagName(node: t.JSXElement): string {\n const tag = node.openingElement.name;\n return jsxElementNameToString(tag);\n}\n\n/**\n * Converts a JSX element name to a string representation.\n *\n * case1: <MyComponent />\n * case2: <SomeLibrary.SomeComponent />;\n * case3: <namespace:ComponentName />;\n * case4: <SomeLibrary.Nested.ComponentName />;\n *\n * @param {t.JSXMemberExpression | t.JSXIdentifier | t.JSXNamespacedName} node The JSX element name to convert.\n * @returns {string} The string representation of the JSX element name.\n */\nexport function jsxElementNameToString(\n node: t.JSXMemberExpression | t.JSXIdentifier | t.JSXNamespacedName,\n) {\n if (t.isJSXMemberExpression(node)) {\n return `${jsxElementNameToString(node.object)}.${jsxElementNameToString(node.property)}`;\n }\n\n if (t.isJSXIdentifier(node) || t.isIdentifier(node)) {\n return node.name;\n }\n\n return `${node.namespace.name}:${node.name.name}`;\n}\n\n/**\n * Determines if the given tagName is a component.\n *\n * case1: <MyComponent />\n * case2: <SomeLibrary.SomeComponent />;\n * case3: <_component />;\n *\n * @param {string} tagName - The name of the tag to check.\n * @return {boolean} True if the tagName is a component, false otherwise.\n */\nexport function 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\n/**\n * Determines if the given path represents a text child node in a JSX expression.\n *\n * @param {NodePath<JSXChild>} path - The path to the potential text child node.\n * @return {boolean} True if the path represents a text child node, false otherwise.\n */\nexport function 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\n/**\n * Sets the text content of a JSX node.\n *\n * @param {NodePath<JSXChild>} path - The path to the JSX node.\n * @param {string} text - The text to set.\n * @return {void}\n */\nexport function 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","import { types as t } from '@babel/core';\nimport { capitalizeFirstLetter } from 'essor-shared';\nimport { imports } from '../program';\nimport { selfClosingTags, svgTags } from './constants';\nimport {\n type JSXChild,\n type JSXElement,\n getAttrName,\n getTagName,\n hasSiblingElement,\n isComponent,\n isTextChild,\n setNodeText,\n} from './shared';\nimport type { OptionalMemberExpression } from '@babel/types';\nimport type { State } from '../types';\nimport type { NodePath } from '@babel/core';\n\nexport interface Result {\n index: number;\n isLastChild: boolean;\n parentIndex: number;\n props: Record<string, any>;\n template: string;\n}\n\nexport function transformJSXClient(path: NodePath<JSXElement>): void {\n const result: Result = {\n index: 1,\n isLastChild: false,\n parentIndex: 0,\n props: {},\n template: '',\n };\n transformJSXElement(path, result, true);\n\n path.replaceWith(createEssorNode(path, result));\n}\n\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n\n let tmpl: t.Identifier;\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 if (key) {\n args.push(key);\n }\n imports.add('h');\n return t.callExpression(state.h, args);\n}\n\nfunction createProps(props) {\n const toAstNode = value => {\n if (Array.isArray(value)) {\n return t.arrayExpression(value.map(toAstNode));\n }\n if (value && typeof value === 'object' && !t.isNode(value)) {\n return createProps(value);\n }\n\n switch (typeof value) {\n case 'string':\n return t.stringLiteral(value);\n case 'number':\n return t.numericLiteral(value);\n case 'boolean':\n return t.booleanLiteral(value);\n case 'undefined':\n return t.tsUndefinedKeyword();\n case undefined:\n return t.tsUndefinedKeyword();\n case null:\n return t.nullLiteral();\n default:\n return value;\n }\n };\n\n const result = Object.keys(props)\n .filter(prop => prop !== 'key')\n .map(prop => {\n const value = toAstNode(props[prop]);\n return prop === '_$spread$'\n ? t.spreadElement(value)\n : t.objectProperty(t.stringLiteral(prop), value);\n });\n\n return t.objectExpression(result);\n}\nfunction transformJSXElement(\n path: NodePath<JSXElement>,\n result: Result,\n isRoot: boolean = false,\n): void {\n if (path.isJSXElement()) {\n const tagName = getTagName(path.node);\n const tagIsComponent = isComponent(tagName);\n const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);\n const isSvg = svgTags.includes(tagName) && result.index === 1;\n const props = getAttrProps(path);\n if (tagIsComponent) {\n if (isRoot) {\n result.props = props;\n const children = getChildren(path) as any;\n if (children.length > 0) {\n const childrenGenerator =\n children.length === 1 ? children[0] : t.arrayExpression(children);\n result.props.children = childrenGenerator;\n }\n } else {\n transformJSXClient(path);\n replaceChild(path.node, result);\n }\n } else {\n if (isSvg) {\n result.template = '<svg _svg_>';\n }\n result.template += `<${tagName}`;\n handleAttributes(props, result);\n result.template += isSelfClose ? '/>' : '>';\n if (!isSelfClose) {\n transformChildren(path, result);\n\n if (hasSiblingElement(path) ) {\n result.template += `</${tagName}>`;\n }\n }\n }\n } else {\n result.index--;\n transformChildren(path, result);\n }\n}\n\nfunction transformChildren(path: NodePath<JSXElement>, result: Result): void {\n const parentIndex = result.index;\n path\n .get('children')\n .reduce((pre, cur) => {\n if (isValidChild(cur)) {\n const lastChild = pre.at(-1);\n if (lastChild && isTextChild(cur) && isTextChild(lastChild)) {\n setNodeText(lastChild, getNodeText(lastChild) + getNodeText(cur));\n } else {\n pre.push(cur);\n }\n }\n return pre;\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\nfunction transformChild(child: NodePath<JSXChild>, result: Result): void {\n result.index++;\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSXElement(child, result, false);\n } else if (child.isJSXExpressionContainer()) {\n const expression = child.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n result.template += String(expression.node.value);\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else if (t.isJSXEmptyExpression(expression.node)) {\n // it is empty expression\n // do nothing\n } else {\n throw new Error('Unsupported child type');\n }\n } else if (child.isJSXText()) {\n result.template += String(child.node.value);\n } else {\n throw new Error('Unsupported child type');\n }\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 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\n if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\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\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 getChildren(path: NodePath<JSXElement>): JSXChild[] {\n return path\n .get('children')\n .filter(child => isValidChild(child))\n .map(child => {\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSXClient(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 child type');\n }\n return child.node;\n });\n}\n\nexport function 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}\nexport function 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 transformJSXClient(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 const value = path.scope.generateUidIdentifier('value');\n const bindName = name.slice(5).toLocaleLowerCase();\n props[bindName] = expression.node;\n props[`update${capitalizeFirstLetter(bindName)}`] = t.arrowFunctionExpression(\n [value],\n t.assignmentExpression('=', expression.node as OptionalMemberExpression, 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 transformJSXClient(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","import { transformJSXService } from './server';\nimport { transformJSXClient } from './client';\nimport type { NodePath, types as t } from '@babel/core';\nimport type { State } from '../types';\ntype JSXElement = t.JSXElement | t.JSXFragment;\nexport function transformJSX(path: NodePath<JSXElement>) {\n const state: State = path.state;\n const isSsg = state.opts.ssg;\n return isSsg ? transformJSXService(path) : transformJSXClient(path);\n}\n","import { types as t } from '@babel/core';\nimport { startsWith } from 'essor-shared';\nimport { imports } from '../program';\nimport type { Identifier, VariableDeclarator } from '@babel/types';\nimport type { NodePath } from '@babel/core';\n\n/**\n * 当一个变量/常量声明的时候,判断是否是$(定义的符号)开头,如果是,则进行转换。\n *\n * case 1: let $a = 1 => let $a = useSignal(1);\n * case 2: const $a = ()=>{return $a} => const $a = useComputed(()=>{return $a})\n *\n * 并且所有当前用到的值,都会添加.value\n * @param path\n * @returns {void}\n */\nexport function replaceSymbol(path: NodePath<VariableDeclarator>) {\n const init = path.node.init;\n const variableName = (path.node.id as Identifier).name;\n\n if (t.isObjectPattern(path.node.id) || t.isArrayPattern(path.node.id)) {\n return;\n }\n\n if (!startsWith(variableName, '$')) {\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.useComputed.name), init ? [init] : []);\n imports.add('useComputed');\n path.node.init = newInit;\n } else {\n const newInit = t.callExpression(t.identifier(path.state.useSignal.name), init ? [init] : []);\n imports.add('useSignal');\n path.node.init = newInit;\n }\n}\n\nexport function symbolIdentifier(path) {\n const parentPath = path.parentPath;\n\n if (\n !parentPath ||\n t.isVariableDeclarator(parentPath) ||\n t.isImportSpecifier(parentPath) ||\n t.isObjectProperty(parentPath) ||\n t.isArrayPattern(parentPath) ||\n t.isObjectPattern(parentPath)\n ) {\n return;\n }\n\n const { node } = path;\n\n if (node.name.startsWith('$')) {\n // check is has .value\n let currentPath = path;\n while (currentPath.parentPath && !currentPath.parentPath.isProgram()) {\n if (\n currentPath.parentPath.isMemberExpression() &&\n currentPath.parentPath.node.property.name === 'value'\n ) {\n return;\n }\n currentPath = currentPath.parentPath;\n }\n\n // add with .value\n const newNode = t.memberExpression(t.identifier(node.name), t.identifier('value'));\n\n path.replaceWith(newNode);\n }\n}\n\nexport function symbolObjectPattern(path) {\n path.node.properties.forEach(property => {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n property.key.name.startsWith('$')\n ) {\n const newKey = t.identifier(property.key.name);\n property.key = newKey;\n }\n });\n}\n\nexport function symbolArrayPattern(path) {\n path.node.elements.forEach(element => {\n if (t.isIdentifier(element) && element.name.startsWith('$')) {\n const newElement = t.identifier(element.name);\n element.name = newElement.name;\n } else if (t.isObjectPattern(element)) {\n element.properties.forEach(property => {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n property.key.name.startsWith('$')\n ) {\n const newKey = t.identifier(property.key.name);\n property.key = newKey;\n }\n });\n }\n });\n}\n","import { type NodePath, types as t } from '@babel/core';\nimport { startsWith } from 'essor-shared';\nimport type { ImportDeclaration } from '@babel/types';\n\nfunction isVariableUsedAsObject(path: NodePath<ImportDeclaration>, variableName: string) {\n const binding = path.scope.getBinding(variableName);\n let isUsedObject = false;\n if (!binding || !binding.referencePaths) {\n return isUsedObject;\n }\n\n for (const referencePath of binding.referencePaths) {\n if (t.isMemberExpression(referencePath.parent)) {\n // const memberExprParent = referencePath.parent;\n\n // if (memberExprParent.object && memberExprParent.property) {\n // const newMemberExpr = t.memberExpression(\n // memberExprParent.object,\n // t.identifier(`${(memberExprParent.property as t.Identifier).name}.value`),\n // );\n // referencePath.parentPath?.replaceWith(newMemberExpr);\n isUsedObject = true;\n // }\n }\n }\n\n return isUsedObject;\n}\n// TODO: 暂时不支持对象\nexport function replaceImportDeclaration(path: NodePath<ImportDeclaration>) {\n const imports = path.node.specifiers;\n imports.forEach(specifier => {\n const variableName = specifier.local.name;\n\n if (startsWith(variableName, '$') && !isVariableUsedAsObject(path, variableName)) {\n path.scope.rename(variableName, `${variableName}.value`);\n specifier.local.name = `${variableName}`;\n }\n });\n}\n","import { startsWith } from 'essor-shared';\nimport { type NodePath, types as t } from '@babel/core';\nimport { imports } from '../program';\nimport type { State } from '../types';\nimport type {\n ArrowFunctionExpression,\n FunctionDeclaration,\n Identifier,\n ObjectProperty,\n RestElement,\n} from '@babel/types';\n\nexport function replaceProps(path: NodePath<FunctionDeclaration | ArrowFunctionExpression>) {\n const state: State = path.state;\n\n const firstParam = path.node.params[0];\n\n if (!firstParam || !t.isObjectPattern(firstParam)) {\n return;\n }\n\n const returnStatement = path\n .get('body')\n .get('body')\n .find(statement => statement.isReturnStatement());\n\n if (!returnStatement) {\n return;\n }\n\n const returnValue = (returnStatement.node as any)?.argument;\n if (!t.isJSXElement(returnValue)) {\n return;\n }\n\n function replaceProperties(properties: (ObjectProperty | RestElement)[], parentPath: string) {\n properties.forEach(property => {\n if (t.isObjectProperty(property)) {\n const keyName = (property.key as Identifier).name;\n\n if (t.isIdentifier(property.value)) {\n const propertyName = property.value.name;\n const newName = `${parentPath}${keyName}`;\n path.scope.rename(propertyName, newName);\n } else if (t.isObjectPattern(property.value)) {\n replaceProperties(property.value.properties, `${parentPath}${keyName}.`);\n }\n }\n });\n }\n\n const properties = firstParam.properties;\n replaceProperties(\n properties.filter(property => !t.isRestElement(property)),\n '__props.',\n );\n const notRestProperties = properties.filter(property => !t.isRestElement(property));\n const notRestNames = notRestProperties.map(\n property => ((property as ObjectProperty).key as Identifier).name,\n );\n if (__DEV__ && notRestNames.some(name => startsWith(name, '$'))) {\n console.warn('props name can not start with $');\n return;\n }\n\n const restElement = properties.find(property => t.isRestElement(property)) as\n | RestElement\n | undefined;\n path.node.params[0] = t.identifier('__props');\n\n if (restElement) {\n const restName = (restElement.argument as any).name;\n if (notRestProperties.length === 0) {\n path.node.params[0] = t.identifier(restName);\n } else {\n const restVariableDeclaration = t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(restName),\n t.callExpression(state.useReactive, [\n t.identifier('__props'),\n t.arrayExpression(notRestNames.map(name => t.stringLiteral(name))),\n ]),\n ),\n ]);\n imports.add('useReactive');\n\n (path.node.body as any).body.unshift(restVariableDeclaration);\n }\n }\n}\n","import { transformJSX } from './jsx';\nimport { transformProgram } from './program';\nimport {\n replaceSymbol,\n symbolArrayPattern,\n symbolIdentifier,\n symbolObjectPattern,\n} from './signal/symbol';\nimport { replaceImportDeclaration } from './signal/import';\nimport { replaceProps } from './signal/props';\nimport type { PluginObj } from '@babel/core';\nexport { Options, State } from './types';\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 FunctionDeclaration: replaceProps,\n ArrowFunctionExpression: replaceProps,\n VariableDeclarator: replaceSymbol,\n ImportDeclaration: replaceImportDeclaration,\n Identifier: symbolIdentifier,\n ObjectPattern: symbolObjectPattern,\n ArrayPattern: symbolArrayPattern,\n },\n };\n}\n"],"mappings":"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","names":["t","t","t","value","t","createEssorNode","t","createProps","getAttrProps","getChildren","replaceChild","handleAttributes","transformChildren","isValidChild","getNodeText","transformChild","value","t","t","t","t","imports","t","t","properties"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "babel-plugin-essor",
|
|
3
|
-
"version": "0.0.7-beta.
|
|
3
|
+
"version": "0.0.7-beta.6",
|
|
4
4
|
"description": "",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [],
|
|
@@ -30,11 +30,11 @@
|
|
|
30
30
|
"dependencies": {
|
|
31
31
|
"@babel/core": "^7.24.7",
|
|
32
32
|
"@babel/types": "^7.24.7",
|
|
33
|
-
"essor-shared": "0.0.7-beta.
|
|
33
|
+
"essor-shared": "0.0.7-beta.6"
|
|
34
34
|
},
|
|
35
35
|
"devDependencies": {
|
|
36
36
|
"@types/babel__core": "^7.20.5",
|
|
37
|
-
"typescript": "^5.
|
|
37
|
+
"typescript": "^5.5.3"
|
|
38
38
|
},
|
|
39
39
|
"scripts": {
|
|
40
40
|
"build": "tsup",
|