babel-plugin-essor 0.0.13-beta.7 → 0.0.14-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -236,7 +236,6 @@ function replaceSpace(node) {
236
236
  return node.value.replaceAll(/\s+/g, " ").trim();
237
237
  }
238
238
  function createEssorNode(path, result) {
239
- var _a;
240
239
  const state = path.state;
241
240
  const isComponent2 = path.isJSXElement() && isComponent(getTagName(path.node));
242
241
  const tmpl = isComponent2 ? import_core3.types.identifier(getTagName(path.node)) : path.scope.generateUidIdentifier("_tmpl$");
@@ -247,10 +246,11 @@ function createEssorNode(path, result) {
247
246
  imports.add("template");
248
247
  }
249
248
  }
249
+ const key = result.props.key;
250
+ delete result.props.key;
250
251
  const args = [tmpl, createProps(result.props)];
251
- const key = result.props.key || ((_a = result.props[0]) == null ? void 0 : _a.key);
252
252
  if (key) {
253
- args.push(import_core3.types.identifier(`${key}`));
253
+ args.push(key);
254
254
  }
255
255
  const fnName = isSSG ? "ssg" : "h";
256
256
  imports.add(fnName);
@@ -272,7 +272,6 @@ function createProps(props) {
272
272
  case "boolean":
273
273
  return import_core3.types.booleanLiteral(value);
274
274
  case "undefined":
275
- return import_core3.types.tsUndefinedKeyword();
276
275
  case void 0:
277
276
  return import_core3.types.tsUndefinedKeyword();
278
277
  case null:
@@ -281,10 +280,9 @@ function createProps(props) {
281
280
  return value;
282
281
  }
283
282
  };
284
- const result = Object.keys(props).filter((prop) => prop !== "key").map((prop) => {
285
- const value = toAstNode(props[prop]);
286
- return prop === "_$spread$" ? import_core3.types.spreadElement(value) : import_core3.types.objectProperty(import_core3.types.stringLiteral(prop), value);
287
- });
283
+ const result = Object.entries(props).map(
284
+ ([prop, value]) => prop === "_$spread$" ? import_core3.types.spreadElement(toAstNode(value)) : import_core3.types.objectProperty(import_core3.types.stringLiteral(prop), toAstNode(value))
285
+ );
288
286
  return import_core3.types.objectExpression(result);
289
287
  }
290
288
  function transformJSXElement(path, result, isRoot = false) {
@@ -294,37 +292,47 @@ function transformJSXElement(path, result, isRoot = false) {
294
292
  const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);
295
293
  const isSvg = svgTags.includes(tagName) && result.index === 1;
296
294
  const { props, hasExpression } = getAttrProps(path);
295
+ if (props.key) {
296
+ result.props.key = props.key;
297
+ delete props.key;
298
+ }
297
299
  if (tagIsComponent) {
298
- if (isRoot) {
299
- result.props = props;
300
- const children = getChildren(path);
301
- if (children.length > 0) {
302
- const childrenGenerator = children.length === 1 ? children[0] : import_core3.types.arrayExpression(children);
303
- result.props.children = childrenGenerator;
304
- }
305
- } else {
306
- transformJSX(path);
307
- replaceChild(path.node, result);
308
- }
300
+ handleComponentElement(path, result, isRoot, props);
309
301
  } else {
310
- if (isSvg) {
311
- result.template = isSSG ? [`<svg _svg_ data-hk="${result.index}">`] : `<svg _svg_ >`;
312
- }
313
- addToTemplate(result, `<${tagName}${isSSG ? ` data-hk="${result.index}"` : ""}`, true);
314
- handleAttributes(props, result);
315
- addToTemplate(result, isSelfClose ? "/>" : ">", !hasExpression);
316
- if (!isSelfClose) {
317
- transformChildren(path, result);
318
- if (hasSiblingElement(path) || isSSG) {
319
- addToTemplate(result, `</${tagName}>`);
320
- }
321
- }
302
+ handleHTMLElement(path, result, tagName, isSelfClose, isSvg, props, hasExpression);
322
303
  }
323
304
  } else {
324
305
  result.index--;
325
306
  transformChildren(path, result);
326
307
  }
327
308
  }
309
+ function handleComponentElement(path, result, isRoot, props) {
310
+ if (isRoot) {
311
+ result.props = props;
312
+ const children = getChildren(path);
313
+ if (children.length > 0) {
314
+ const childrenGenerator = children.length === 1 ? children[0] : import_core3.types.arrayExpression(children);
315
+ result.props.children = childrenGenerator;
316
+ }
317
+ } else {
318
+ transformJSX(path);
319
+ replaceChild(path.node, result);
320
+ }
321
+ }
322
+ function handleHTMLElement(path, result, tagName, isSelfClose, isSvg, props, hasExpression) {
323
+ if (isSvg) {
324
+ result.template = isSSG ? [`<svg _svg_ data-hk="${result.index}">`] : `<svg _svg_ >`;
325
+ }
326
+ addToTemplate(result, `<${tagName}${isSSG ? ` data-hk="${result.index}"` : ""}`, true);
327
+ handleAttributes(props, result);
328
+ addToTemplate(result, isSelfClose ? "/>" : ">", !hasExpression);
329
+ if (!isSelfClose) {
330
+ transformChildren(path, result);
331
+ if (hasSiblingElement(path) || isSSG) {
332
+ addToTemplate(result, `</${tagName}>`);
333
+ }
334
+ }
335
+ }
328
336
  function transformChildren(path, result) {
329
337
  const parentIndex = result.index;
330
338
  path.get("children").reduce((pre, cur) => {
@@ -402,13 +410,11 @@ function handleAttributes(props, result) {
402
410
  if (Object.keys(props).length > 0) {
403
411
  result.props[result.index] = props;
404
412
  }
405
- klass = klass.trim();
406
- style = style.trim();
407
- if (klass) {
408
- addToTemplate(result, ` class="${klass}"`);
413
+ if (klass.trim()) {
414
+ addToTemplate(result, ` class="${klass.trim()}"`);
409
415
  }
410
- if (style) {
411
- addToTemplate(result, ` style="${style}"`);
416
+ if (style.trim()) {
417
+ addToTemplate(result, ` style="${style.trim()}"`);
412
418
  }
413
419
  }
414
420
  function handleObjectExpression(prop, value, props, style) {
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/jsx/index.ts","../../shared/src/is.ts","../../shared/src/comm.ts","../../shared/src/name.ts","../../shared/src/console.ts","../src/program.ts","../src/shared.ts","../src/jsx/constants.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\n FunctionDeclaration: replaceProps,\n ArrowFunctionExpression: replaceProps,\n VariableDeclarator: replaceSymbol,\n ImportDeclaration: replaceImportDeclaration,\n Identifier: symbolIdentifier,\n ObjectPattern: symbolObjectPattern,\n ArrayPattern: symbolArrayPattern,\n\n JSXElement: transformJSX,\n JSXFragment: transformJSX,\n },\n };\n}\n","import { types as t } from '@babel/core';\nimport { capitalizeFirstLetter, isArray } from '@estjs/shared';\nimport { imports } from '../program';\nimport {\n type JSXChild,\n type JSXElement,\n getAttrName,\n getTagName,\n hasSiblingElement,\n isComponent as isComponentName,\n isTextChild,\n setNodeText,\n} from '../shared';\nimport { selfClosingTags, svgTags } from './constants';\nimport type { Identifier, OptionalMemberExpression, StringLiteral } 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 | string[];\n}\nlet isSSG = false;\n\nfunction addToTemplate(result: Result, content: string, join = false): void {\n if (isSSG) {\n if (join && result.template.length > 0) {\n (result.template as string[])[result.template.length - 1] += content;\n } else {\n (result.template as string[]).push(content);\n }\n } else {\n result.template += content;\n }\n}\nexport function transformJSX(path: NodePath<JSXElement>): void {\n const state: State = path.state;\n isSSG = state.opts.ssg;\n\n const result: Result = {\n index: 1,\n isLastChild: false,\n parentIndex: 0,\n props: {},\n template: isSSG ? [] : '',\n };\n transformJSXElement(path, result, true);\n\n path.replaceWith(createEssorNode(path, result));\n}\n\n// Trim and replace multiple spaces/newlines with a single space\nfunction replaceSpace(node: t.JSXText): string {\n return node.value.replaceAll(/\\s+/g, ' ').trim();\n}\n\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n const isComponent = path.isJSXElement() && isComponentName(getTagName(path.node));\n\n const tmpl = isComponent\n ? t.identifier(getTagName(path.node))\n : path.scope.generateUidIdentifier('_tmpl$');\n\n if (!isComponent) {\n const template = isSSG\n ? t.arrayExpression((result.template as string[]).map(t.stringLiteral))\n : t.callExpression(state.template, [t.stringLiteral(result.template as string)]);\n state.tmplDeclaration.declarations.push(t.variableDeclarator(tmpl, template));\n if (!isSSG) {\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(t.identifier(`${key}`));\n }\n\n const fnName = isSSG ? 'ssg' : 'h';\n imports.add(fnName);\n return t.callExpression(state[fnName], args);\n}\n\nfunction createProps(props) {\n const toAstNode = value => {\n if (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 = isComponentName(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);\n if (children.length > 0) {\n const childrenGenerator =\n children.length === 1 ? children[0] : t.arrayExpression(children as JSXElement[]);\n result.props.children = childrenGenerator;\n }\n } else {\n transformJSX(path);\n replaceChild(path.node, result);\n }\n } else {\n if (isSvg) {\n result.template = isSSG ? [`<svg _svg_ data-hk=\"${result.index}\">`] : `<svg _svg_ >`;\n }\n\n addToTemplate(result, `<${tagName}${isSSG ? ` data-hk=\"${result.index}\"` : ''}`, true);\n handleAttributes(props, result);\n addToTemplate(result, isSelfClose ? '/>' : '>', !hasExpression);\n\n if (!isSelfClose) {\n transformChildren(path, result);\n if (hasSiblingElement(path) || isSSG) {\n addToTemplate(result, `</${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 addToTemplate(result, `${expression.node.value}`, true);\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else if (t.isJSXEmptyExpression(expression.node)) {\n // it is empty expression\n // just for tracking value\n } else {\n throw new Error('Unsupported child type');\n }\n } else if (child.isJSXText()) {\n addToTemplate(result, replaceSpace(child.node), true);\n } else {\n throw new Error('Unsupported child type');\n }\n}\n\nfunction getNodeText(path: NodePath<JSXChild>): string {\n if (path.isJSXText()) {\n return replaceSpace(path.node);\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, value] of Object.entries(props)) {\n if (prop === 'class' && typeof value === 'string') {\n klass += ` ${value}`;\n delete props[prop];\n } else if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\n delete props[prop];\n } else if (value === true) {\n addToTemplate(result, ` ${prop}`);\n delete props[prop];\n } else if (value === false) {\n delete props[prop];\n } else if (typeof value === 'string' || typeof value === 'number') {\n addToTemplate(result, ` ${prop}=\"${value}\"`);\n delete props[prop];\n } else if (t.isConditionalExpression(value)) {\n props[prop] = t.arrowFunctionExpression([], value);\n } else if (t.isObjectExpression(value)) {\n handleObjectExpression(prop, value, props, style);\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 addToTemplate(result, ` class=\"${klass}\"`);\n }\n if (style) {\n addToTemplate(result, ` style=\"${style}\"`);\n }\n}\n\nfunction handleObjectExpression(\n prop: string,\n value: t.ObjectExpression,\n props: Record<string, any>,\n // eslint-disable-next-line unused-imports/no-unused-vars\n style: string,\n): void {\n const hasConditional = value.properties.some(\n property => t.isObjectProperty(property) && t.isConditionalExpression(property.value),\n );\n\n if (hasConditional) {\n props[prop] = t.arrowFunctionExpression([], value);\n } else if (prop === 'style') {\n value.properties.forEach(property => {\n if (t.isObjectProperty(property)) {\n style += `${(property.key as Identifier).name}:${(property.value as StringLiteral).value};`;\n }\n });\n delete props[prop];\n }\n}\n\nfunction replaceChild(node: t.Expression, result: Result): void {\n if (result.isLastChild) {\n result.index--;\n } else {\n addToTemplate(result, '<!>');\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 transformJSX(child);\n } else if (child.isJSXExpressionContainer()) {\n child.replaceWith(child.get('expression'));\n } else if (child.isJSXText()) {\n child.replaceWith(t.stringLiteral(replaceSpace(child.node)));\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}\n\nexport function 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 if (expression.isStringLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isNumericLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isJSXElement() || expression.isJSXFragment()) {\n transformJSX(expression);\n props[name] = expression.node;\n } else if (expression.isExpression()) {\n 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[bindName] = t.memberExpression(\n // t.identifier((expression.node as Identifier).name),\n // t.identifier('value'),\n // );\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 transformJSX(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 return {\n props,\n hasExpression,\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): val is Promise<any> {\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}\n\nexport function isSet(val: any): val is Set<any> {\n return _toString.call(val) === '[object Set]';\n}\nexport function isWeakMap(val: any): val is WeakMap<any, any> {\n return _toString.call(val) === '[object WeakMap]';\n}\nexport function isWeakSet(val: any): val is WeakSet<any> {\n return _toString.call(val) === '[object WeakSet]';\n}\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;\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 function isHTMLElement(obj) {\n if (!obj) return false;\n return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName === 'string';\n}\n\nexport const isPlainObject = (val: unknown): val is object =>\n _toString.call(val) === '[object Object]';\n\nexport type StringNumber = `${number}`;\nexport function isStringNumber(val: unknown): val is StringNumber {\n if (!isString(val)) {\n return false;\n }\n return !Number.isNaN(Number(val));\n}\n","import { isArray, isFunction, 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 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 * 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 '&amp;';\n case '<':\n return '&lt;';\n case '>':\n return '&gt;';\n case '\"':\n return '&quot;';\n case \"'\":\n return '&#039;';\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 isArray(exclude) ? exclude.includes(key) : isFunction(exclude) ? exclude(key) : false;\n}\n\n/**\n * Generates a unique random 8 character string ID.\n * The generated IDs only contain alphanumeric characters.\n * @returns A unique random 8 character string ID.\n */\nexport function generateUniqueId() {\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result = '';\n const charactersLength = characters.length;\n for (let i = 0; i < 8; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n}\n\n/**\n * Checks if the current environment is a browser.\n * @returns True if the current environment is a browser, otherwise false.\n */\nexport function isBrowser() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\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","export function warn(msg: string, ..._args: any[]): void;\nexport function warn(msg: string, ...args): void {\n // eslint-disable-next-line prefer-spread\n console.warn.apply(console, [`[Essor warn]: ${msg}`].concat(args) as [string, ...any[]]);\n}\n\nexport function info(msg: string, ..._args: any[]): void;\nexport function info(msg: string, ...args): void {\n // eslint-disable-next-line prefer-spread, no-console\n console.info.apply(console, [`[Essor info]: ${msg}`].concat(args) as [string, ...any[]]);\n}\n\nexport function error(msg: string, ..._args: any[]): void;\nexport function error(msg: string, ...args): void {\n // eslint-disable-next-line prefer-spread\n console.error.apply(console, [`[Essor error]: ${msg}`].concat(args) as [string, ...any[]]);\n}\n","import { type NodePath, types as t } from '@babel/core';\nimport type { Options, State } from './types';\nexport const imports = new Set<string>();\n\nconst defaultOption: Options = {\n ssg: false,\n symbol: '$',\n props: true,\n};\n\nexport const transformProgram = {\n enter(path: NodePath<t.Program>, state) {\n imports.clear();\n\n // merge options\n state.opts = { ...defaultOption, ...state.opts };\n\n path.state = {\n h: path.scope.generateUidIdentifier('h$'),\n template: path.scope.generateUidIdentifier('template$'),\n ssg: path.scope.generateUidIdentifier('ssg$'),\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","import { type NodePath, types as t } from '@babel/core';\nimport { startsWith } from '@estjs/shared';\nimport type { State } from './types';\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-z]/i.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\n/**\n * get the symbol start with\n */\nexport function isSymbolStart(path: NodePath<any>, name: string) {\n const state: State = path.state;\n const { symbol } = state?.opts || '$';\n\n return startsWith(name, symbol);\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 { types as t } from '@babel/core';\nimport { imports } from '../program';\nimport { isSymbolStart } from '../shared';\nimport type { Identifier, VariableDeclarator } from '@babel/types';\nimport type { NodePath } from '@babel/core';\n\n/**\n * Replaces the symbol in a variable declarator with a computed or signal expression.\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 * @param {NodePath<VariableDeclarator>} path - The path to the variable declarator node.\n * @return {void}\n */\nexport function replaceSymbol(path: NodePath<VariableDeclarator>) {\n const { init, id } = path.node;\n const variableName = (id as Identifier).name;\n\n if (t.isObjectPattern(id) || t.isArrayPattern(id) || !isSymbolStart(path, variableName)) return;\n\n const isComputed =\n init &&\n (t.isFunctionExpression(init) || t.isArrowFunctionExpression(init)) &&\n (path.parent as t.VariableDeclaration).kind === 'const';\n\n const hookName = isComputed ? 'useComputed' : 'useSignal';\n const newInit = t.callExpression(t.identifier(path.state[hookName].name), init ? [init] : []);\n\n imports.add(hookName);\n path.node.init = newInit;\n}\n\nexport function symbolIdentifier(path) {\n const parentPath = path.parentPath;\n if (!shouldProcessIdentifier(parentPath)) return;\n\n const { node } = path;\n if (!isSymbolStart(path, node.name)) return;\n\n if (!path.findParent(p => p.isMemberExpression() && p.node.property.name === 'value')) {\n path.replaceWith(t.memberExpression(t.identifier(node.name), t.identifier('value')));\n }\n}\n\nfunction shouldProcessIdentifier(parentPath) {\n return (\n parentPath &&\n !t.isVariableDeclarator(parentPath) &&\n !t.isImportSpecifier(parentPath) &&\n !t.isObjectProperty(parentPath) &&\n !t.isArrayPattern(parentPath) &&\n !t.isObjectPattern(parentPath)\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 isSymbolStart(path, property.key.name)\n ) {\n property.key = t.identifier(property.key.name);\n }\n });\n}\n\nexport function symbolArrayPattern(path) {\n path.node.elements.forEach(element => {\n if (t.isIdentifier(element) && element.name.startsWith('$')) {\n element.name = t.identifier(element.name).name;\n } else if (t.isObjectPattern(element)) {\n symbolObjectPattern({ node: element } as NodePath);\n }\n });\n}\n","import { types as t } from '@babel/core';\nimport { startsWith } from '@estjs/shared';\n\n/**\n * Replaces import declarations\n *\n * case1: import { $a } from 'a';console.log(a) => import { $a } from 'a';console.log($a.value)\n * case2: import $a from 'a';console.log(a) => import $a from 'a';console.log($a.value)\n *\n * @param {object} path - The path to replace import declarations.\n * @return {void}\n */\nexport function replaceImportDeclaration(path) {\n path.node.specifiers.forEach(specifier => {\n const variableName = specifier.local.name;\n if (startsWith(variableName, '$') && !isVariableUsedAsObject(path, variableName)) {\n path.scope.rename(variableName, `${variableName}.value`);\n specifier.local.name = variableName;\n }\n });\n}\n\n/**\n * Checks if a variable is used as an object.\n *\n * @param path - The path to the variable.\n * @param variableName - The name of the variable.\n * @returns {boolean} - Whether the variable is used as an object.\n */\nfunction isVariableUsedAsObject(path, variableName) {\n const binding = path.scope.getBinding(variableName);\n return (\n binding?.referencePaths?.some(referencePath => {\n if (t.isMemberExpression(referencePath.parent)) {\n const { object, property } = referencePath.parent;\n if (t.isIdentifier(object, { name: variableName })) {\n referencePath.parentPath.replaceWith(\n t.memberExpression(t.memberExpression(object, t.identifier('value')), property),\n );\n return true;\n }\n }\n return false;\n }) || false\n );\n}\n","import { startsWith } from '@estjs/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\n/**\n * Replaces the properties of a function's first parameter with new names.\n *\n * auto replace pattern to props object\n *\n * rule1: function argument\n * rule2: first argument is object and it pattern\n * rule3: function has return\n *\n * transform case\n * case1 ({a, b}) => <div>{a.value}</div> to=> (_props)=><div>{_props.a.value}</div>\n * case2 ({a, b, ...rest}) => <div>{a.value}{rest}</div> to=> (_props)=> {const restProps = reactive(props,[a,b]);return <div>{_props.a.value}{reset}</div>}\n *\n * not transform case\n * case1 ([a,b])=> <div>{a.value}</div>\n * case2 ({a.,b}) ={}\n *\n * @param {NodePath<FunctionDeclaration | ArrowFunctionExpression>} path - The path to the function node.\n * @return {void}\n */\nexport function replaceProps(path: NodePath<FunctionDeclaration | ArrowFunctionExpression>) {\n const state: State = path.state;\n const firstParam = path.node.params[0];\n\n if (!firstParam || !t.isObjectPattern(firstParam)) return;\n\n const returnStatement = path\n .get('body')\n .get('body')\n .find(statement => statement.isReturnStatement());\n\n if (!returnStatement || !t.isJSXElement((returnStatement.node as any)?.argument)) return;\n\n const replaceProperties = (properties: (ObjectProperty | RestElement)[], parentPath: string) => {\n properties.forEach(property => {\n if (t.isObjectProperty(property) && t.isIdentifier(property.key)) {\n const keyName = property.key.name;\n if (t.isIdentifier(property.value)) {\n path.scope.rename(property.value.name, `${parentPath}${keyName}`);\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 const notRestProperties = properties.filter(property => !t.isRestElement(property)) as ObjectProperty[];\n replaceProperties(notRestProperties, '__props.');\n\n const notRestNames = notRestProperties.map(property => (property.key as Identifier).name);\n if (__DEV__ && notRestNames.some(name => startsWith(name, '$'))) {\n console.warn('props name can not start with $');\n return;\n }\n\n handleRestElement(path, state, properties, notRestNames);\n}\n\nfunction handleRestElement(path, state: State, properties, notRestNames) {\n const restElement = properties.find(property => t.isRestElement(property)) as RestElement | undefined;\n path.node.params[0] = t.identifier('__props');\n\n if (restElement) {\n const restName = (restElement.argument as Identifier).name;\n if (notRestNames.length === 0) {\n path.node.params[0] = t.identifier(restName);\n } else {\n const restVariableDeclaration = createRestVariableDeclaration(state, restName, notRestNames);\n imports.add('useReactive');\n (path.node.body as t.BlockStatement).body.unshift(restVariableDeclaration);\n }\n }\n}\n\nfunction createRestVariableDeclaration(state: State, restName: string, notRestNames: string[]) {\n return 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}\n"],"mappings":"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","names":["import_core","t","import_core","t","isComponent","t","value","import_core","t","import_core","t","import_core","t","properties"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/jsx/index.ts","../../shared/src/is.ts","../../shared/src/comm.ts","../../shared/src/name.ts","../../shared/src/console.ts","../src/program.ts","../src/shared.ts","../src/jsx/constants.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\n FunctionDeclaration: replaceProps,\n ArrowFunctionExpression: replaceProps,\n VariableDeclarator: replaceSymbol,\n ImportDeclaration: replaceImportDeclaration,\n Identifier: symbolIdentifier,\n ObjectPattern: symbolObjectPattern,\n ArrayPattern: symbolArrayPattern,\n\n JSXElement: transformJSX,\n JSXFragment: transformJSX,\n },\n };\n}\n","import { types as t } from '@babel/core';\nimport { capitalizeFirstLetter, isArray } from '@estjs/shared';\nimport { imports } from '../program';\nimport {\n type JSXChild,\n type JSXElement,\n getAttrName,\n getTagName,\n hasSiblingElement,\n isComponent as isComponentName,\n isTextChild,\n setNodeText,\n} from '../shared';\nimport { selfClosingTags, svgTags } from './constants';\nimport type { Identifier, OptionalMemberExpression, StringLiteral } 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 | string[];\n}\n\nlet isSSG = false;\n\nfunction addToTemplate(result: Result, content: string, join = false): void {\n if (isSSG) {\n if (join && result.template.length > 0) {\n (result.template as string[])[result.template.length - 1] += content;\n } else {\n (result.template as string[]).push(content);\n }\n } else {\n result.template += content;\n }\n}\n\nexport function transformJSX(path: NodePath<JSXElement>): void {\n const state: State = path.state;\n isSSG = state.opts.ssg;\n\n const result: Result = {\n index: 1,\n isLastChild: false,\n parentIndex: 0,\n props: {},\n template: isSSG ? [] : '',\n };\n transformJSXElement(path, result, true);\n\n path.replaceWith(createEssorNode(path, result));\n}\n// Trim and replace multiple spaces/newlines with a single space\nfunction replaceSpace(node: t.JSXText): string {\n return node.value.replaceAll(/\\s+/g, ' ').trim();\n}\n\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n const isComponent = path.isJSXElement() && isComponentName(getTagName(path.node));\n\n const tmpl = isComponent\n ? t.identifier(getTagName(path.node))\n : path.scope.generateUidIdentifier('_tmpl$');\n\n if (!isComponent) {\n const template = isSSG\n ? t.arrayExpression((result.template as string[]).map(t.stringLiteral))\n : t.callExpression(state.template, [t.stringLiteral(result.template as string)]);\n state.tmplDeclaration.declarations.push(t.variableDeclarator(tmpl, template));\n if (!isSSG) {\n imports.add('template');\n }\n }\n\n const key = result.props.key;\n delete result.props.key;\n\n const args = [tmpl, createProps(result.props)];\n if (key) {\n args.push(key);\n }\n\n const fnName = isSSG ? 'ssg' : 'h';\n imports.add(fnName);\n return t.callExpression(state[fnName], args);\n}\n\nfunction createProps(props: Record<string, any>): t.ObjectExpression {\n const toAstNode = value => {\n if (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 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.entries(props).map(([prop, value]) =>\n prop === '_$spread$'\n ? t.spreadElement(toAstNode(value))\n : t.objectProperty(t.stringLiteral(prop), toAstNode(value)),\n );\n\n return t.objectExpression(result);\n}\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 = isComponentName(tagName);\n const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);\n const isSvg = svgTags.includes(tagName) && result.index === 1;\n const { props, hasExpression } = getAttrProps(path);\n\n // key\n if (props.key) {\n result.props.key = props.key;\n delete props.key;\n }\n\n if (tagIsComponent) {\n handleComponentElement(path, result, isRoot, props);\n } else {\n handleHTMLElement(path, result, tagName, isSelfClose, isSvg, props, hasExpression);\n }\n } else {\n result.index--;\n transformChildren(path, result);\n }\n}\n\nfunction handleComponentElement(\n path: NodePath<JSXElement>,\n result: Result,\n isRoot: boolean,\n props: Record<string, any>,\n): void {\n if (isRoot) {\n result.props = props;\n const children = getChildren(path);\n if (children.length > 0) {\n const childrenGenerator =\n children.length === 1 ? children[0] : t.arrayExpression(children as JSXElement[]);\n result.props.children = childrenGenerator;\n }\n } else {\n transformJSX(path);\n replaceChild(path.node, result);\n }\n}\n\nfunction handleHTMLElement(\n path: NodePath<JSXElement>,\n result: Result,\n tagName: string,\n isSelfClose: boolean,\n isSvg: boolean,\n props: Record<string, any>,\n hasExpression: boolean,\n): void {\n if (isSvg) {\n result.template = isSSG ? [`<svg _svg_ data-hk=\"${result.index}\">`] : `<svg _svg_ >`;\n }\n\n addToTemplate(result, `<${tagName}${isSSG ? ` data-hk=\"${result.index}\"` : ''}`, true);\n handleAttributes(props, result);\n addToTemplate(result, isSelfClose ? '/>' : '>', !hasExpression);\n\n if (!isSelfClose) {\n transformChildren(path, result);\n if (hasSiblingElement(path) || isSSG) {\n addToTemplate(result, `</${tagName}>`);\n }\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 addToTemplate(result, `${expression.node.value}`, true);\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else if (t.isJSXEmptyExpression(expression.node)) {\n // it is empty expression\n // just for tracking value\n } else {\n throw new Error('Unsupported child type');\n }\n } else if (child.isJSXText()) {\n addToTemplate(result, replaceSpace(child.node), true);\n } else {\n throw new Error('Unsupported child type');\n }\n}\nfunction getNodeText(path: NodePath<JSXChild>): string {\n if (path.isJSXText()) {\n return replaceSpace(path.node);\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, value] of Object.entries(props)) {\n if (prop === 'class' && typeof value === 'string') {\n klass += ` ${value}`;\n delete props[prop];\n } else if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\n delete props[prop];\n } else if (value === true) {\n addToTemplate(result, ` ${prop}`);\n delete props[prop];\n } else if (value === false) {\n delete props[prop];\n } else if (typeof value === 'string' || typeof value === 'number') {\n addToTemplate(result, ` ${prop}=\"${value}\"`);\n delete props[prop];\n } else if (t.isConditionalExpression(value)) {\n props[prop] = t.arrowFunctionExpression([], value);\n } else if (t.isObjectExpression(value)) {\n handleObjectExpression(prop, value, props, style);\n }\n }\n\n if (Object.keys(props).length > 0) {\n result.props[result.index] = props;\n }\n\n if (klass.trim()) {\n addToTemplate(result, ` class=\"${klass.trim()}\"`);\n }\n if (style.trim()) {\n addToTemplate(result, ` style=\"${style.trim()}\"`);\n }\n}\n\nfunction handleObjectExpression(\n prop: string,\n value: t.ObjectExpression,\n props: Record<string, any>,\n // eslint-disable-next-line unused-imports/no-unused-vars\n style: string,\n): void {\n const hasConditional = value.properties.some(\n property => t.isObjectProperty(property) && t.isConditionalExpression(property.value),\n );\n\n if (hasConditional) {\n props[prop] = t.arrowFunctionExpression([], value);\n } else if (prop === 'style') {\n value.properties.forEach(property => {\n if (t.isObjectProperty(property)) {\n style += `${(property.key as Identifier).name}:${(property.value as StringLiteral).value};`;\n }\n });\n delete props[prop];\n }\n}\n\nfunction replaceChild(node: t.Expression, result: Result): void {\n if (result.isLastChild) {\n result.index--;\n } else {\n addToTemplate(result, '<!>');\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 transformJSX(child);\n } else if (child.isJSXExpressionContainer()) {\n child.replaceWith(child.get('expression'));\n } else if (child.isJSXText()) {\n child.replaceWith(t.stringLiteral(replaceSpace(child.node)));\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}\n\nexport function 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 if (expression.isStringLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isNumericLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isJSXElement() || expression.isJSXFragment()) {\n transformJSX(expression);\n props[name] = expression.node;\n } else if (expression.isExpression()) {\n 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[bindName] = t.memberExpression(\n // t.identifier((expression.node as Identifier).name),\n // t.identifier('value'),\n // );\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 transformJSX(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 return {\n props,\n hasExpression,\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): val is Promise<any> {\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}\n\nexport function isSet(val: any): val is Set<any> {\n return _toString.call(val) === '[object Set]';\n}\nexport function isWeakMap(val: any): val is WeakMap<any, any> {\n return _toString.call(val) === '[object WeakMap]';\n}\nexport function isWeakSet(val: any): val is WeakSet<any> {\n return _toString.call(val) === '[object WeakSet]';\n}\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;\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 function isHTMLElement(obj) {\n if (!obj) return false;\n return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName === 'string';\n}\n\nexport const isPlainObject = (val: unknown): val is object =>\n _toString.call(val) === '[object Object]';\n\nexport type StringNumber = `${number}`;\nexport function isStringNumber(val: unknown): val is StringNumber {\n if (!isString(val)) {\n return false;\n }\n return !Number.isNaN(Number(val));\n}\n","import { isArray, isFunction, 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 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 * 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 '&amp;';\n case '<':\n return '&lt;';\n case '>':\n return '&gt;';\n case '\"':\n return '&quot;';\n case \"'\":\n return '&#039;';\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 isArray(exclude) ? exclude.includes(key) : isFunction(exclude) ? exclude(key) : false;\n}\n\n/**\n * Generates a unique random 8 character string ID.\n * The generated IDs only contain alphanumeric characters.\n * @returns A unique random 8 character string ID.\n */\nexport function generateUniqueId() {\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result = '';\n const charactersLength = characters.length;\n for (let i = 0; i < 8; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n}\n\n/**\n * Checks if the current environment is a browser.\n * @returns True if the current environment is a browser, otherwise false.\n */\nexport function isBrowser() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\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","export function warn(msg: string, ..._args: any[]): void;\nexport function warn(msg: string, ...args): void {\n // eslint-disable-next-line prefer-spread\n console.warn.apply(console, [`[Essor warn]: ${msg}`].concat(args) as [string, ...any[]]);\n}\n\nexport function info(msg: string, ..._args: any[]): void;\nexport function info(msg: string, ...args): void {\n // eslint-disable-next-line prefer-spread, no-console\n console.info.apply(console, [`[Essor info]: ${msg}`].concat(args) as [string, ...any[]]);\n}\n\nexport function error(msg: string, ..._args: any[]): void;\nexport function error(msg: string, ...args): void {\n // eslint-disable-next-line prefer-spread\n console.error.apply(console, [`[Essor error]: ${msg}`].concat(args) as [string, ...any[]]);\n}\n","import { type NodePath, types as t } from '@babel/core';\nimport type { Options, State } from './types';\nexport const imports = new Set<string>();\n\nconst defaultOption: Options = {\n ssg: false,\n symbol: '$',\n props: true,\n};\n\nexport const transformProgram = {\n enter(path: NodePath<t.Program>, state) {\n imports.clear();\n\n // merge options\n state.opts = { ...defaultOption, ...state.opts };\n\n path.state = {\n h: path.scope.generateUidIdentifier('h$'),\n template: path.scope.generateUidIdentifier('template$'),\n ssg: path.scope.generateUidIdentifier('ssg$'),\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","import { type NodePath, types as t } from '@babel/core';\nimport { startsWith } from '@estjs/shared';\nimport type { State } from './types';\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-z]/i.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\n/**\n * get the symbol start with\n */\nexport function isSymbolStart(path: NodePath<any>, name: string) {\n const state: State = path.state;\n const { symbol } = state?.opts || '$';\n\n return startsWith(name, symbol);\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 { types as t } from '@babel/core';\nimport { imports } from '../program';\nimport { isSymbolStart } from '../shared';\nimport type { Identifier, VariableDeclarator } from '@babel/types';\nimport type { NodePath } from '@babel/core';\n\n/**\n * Replaces the symbol in a variable declarator with a computed or signal expression.\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 * @param {NodePath<VariableDeclarator>} path - The path to the variable declarator node.\n * @return {void}\n */\nexport function replaceSymbol(path: NodePath<VariableDeclarator>) {\n const { init, id } = path.node;\n const variableName = (id as Identifier).name;\n\n if (t.isObjectPattern(id) || t.isArrayPattern(id) || !isSymbolStart(path, variableName)) return;\n\n const isComputed =\n init &&\n (t.isFunctionExpression(init) || t.isArrowFunctionExpression(init)) &&\n (path.parent as t.VariableDeclaration).kind === 'const';\n\n const hookName = isComputed ? 'useComputed' : 'useSignal';\n const newInit = t.callExpression(t.identifier(path.state[hookName].name), init ? [init] : []);\n\n imports.add(hookName);\n path.node.init = newInit;\n}\n\nexport function symbolIdentifier(path) {\n const parentPath = path.parentPath;\n if (!shouldProcessIdentifier(parentPath)) return;\n\n const { node } = path;\n if (!isSymbolStart(path, node.name)) return;\n\n if (!path.findParent(p => p.isMemberExpression() && p.node.property.name === 'value')) {\n path.replaceWith(t.memberExpression(t.identifier(node.name), t.identifier('value')));\n }\n}\n\nfunction shouldProcessIdentifier(parentPath) {\n return (\n parentPath &&\n !t.isVariableDeclarator(parentPath) &&\n !t.isImportSpecifier(parentPath) &&\n !t.isObjectProperty(parentPath) &&\n !t.isArrayPattern(parentPath) &&\n !t.isObjectPattern(parentPath)\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 isSymbolStart(path, property.key.name)\n ) {\n property.key = t.identifier(property.key.name);\n }\n });\n}\n\nexport function symbolArrayPattern(path) {\n path.node.elements.forEach(element => {\n if (t.isIdentifier(element) && element.name.startsWith('$')) {\n element.name = t.identifier(element.name).name;\n } else if (t.isObjectPattern(element)) {\n symbolObjectPattern({ node: element } as NodePath);\n }\n });\n}\n","import { types as t } from '@babel/core';\nimport { startsWith } from '@estjs/shared';\n\n/**\n * Replaces import declarations\n *\n * case1: import { $a } from 'a';console.log(a) => import { $a } from 'a';console.log($a.value)\n * case2: import $a from 'a';console.log(a) => import $a from 'a';console.log($a.value)\n *\n * @param {object} path - The path to replace import declarations.\n * @return {void}\n */\nexport function replaceImportDeclaration(path) {\n path.node.specifiers.forEach(specifier => {\n const variableName = specifier.local.name;\n if (startsWith(variableName, '$') && !isVariableUsedAsObject(path, variableName)) {\n path.scope.rename(variableName, `${variableName}.value`);\n specifier.local.name = variableName;\n }\n });\n}\n\n/**\n * Checks if a variable is used as an object.\n *\n * @param path - The path to the variable.\n * @param variableName - The name of the variable.\n * @returns {boolean} - Whether the variable is used as an object.\n */\nfunction isVariableUsedAsObject(path, variableName) {\n const binding = path.scope.getBinding(variableName);\n return (\n binding?.referencePaths?.some(referencePath => {\n if (t.isMemberExpression(referencePath.parent)) {\n const { object, property } = referencePath.parent;\n if (t.isIdentifier(object, { name: variableName })) {\n referencePath.parentPath.replaceWith(\n t.memberExpression(t.memberExpression(object, t.identifier('value')), property),\n );\n return true;\n }\n }\n return false;\n }) || false\n );\n}\n","import { startsWith } from '@estjs/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\n/**\n * Replaces the properties of a function's first parameter with new names.\n *\n * auto replace pattern to props object\n *\n * rule1: function argument\n * rule2: first argument is object and it pattern\n * rule3: function has return\n *\n * transform case\n * case1 ({a, b}) => <div>{a.value}</div> to=> (_props)=><div>{_props.a.value}</div>\n * case2 ({a, b, ...rest}) => <div>{a.value}{rest}</div> to=> (_props)=> {const restProps = reactive(props,[a,b]);return <div>{_props.a.value}{reset}</div>}\n *\n * not transform case\n * case1 ([a,b])=> <div>{a.value}</div>\n * case2 ({a.,b}) ={}\n *\n * @param {NodePath<FunctionDeclaration | ArrowFunctionExpression>} path - The path to the function node.\n * @return {void}\n */\nexport function replaceProps(path: NodePath<FunctionDeclaration | ArrowFunctionExpression>) {\n const state: State = path.state;\n const firstParam = path.node.params[0];\n\n if (!firstParam || !t.isObjectPattern(firstParam)) return;\n\n const returnStatement = path\n .get('body')\n .get('body')\n .find(statement => statement.isReturnStatement());\n\n if (!returnStatement || !t.isJSXElement((returnStatement.node as any)?.argument)) return;\n\n const replaceProperties = (properties: (ObjectProperty | RestElement)[], parentPath: string) => {\n properties.forEach(property => {\n if (t.isObjectProperty(property) && t.isIdentifier(property.key)) {\n const keyName = property.key.name;\n if (t.isIdentifier(property.value)) {\n path.scope.rename(property.value.name, `${parentPath}${keyName}`);\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 const notRestProperties = properties.filter(property => !t.isRestElement(property)) as ObjectProperty[];\n replaceProperties(notRestProperties, '__props.');\n\n const notRestNames = notRestProperties.map(property => (property.key as Identifier).name);\n if (__DEV__ && notRestNames.some(name => startsWith(name, '$'))) {\n console.warn('props name can not start with $');\n return;\n }\n\n handleRestElement(path, state, properties, notRestNames);\n}\n\nfunction handleRestElement(path, state: State, properties, notRestNames) {\n const restElement = properties.find(property => t.isRestElement(property)) as RestElement | undefined;\n path.node.params[0] = t.identifier('__props');\n\n if (restElement) {\n const restName = (restElement.argument as Identifier).name;\n if (notRestNames.length === 0) {\n path.node.params[0] = t.identifier(restName);\n } else {\n const restVariableDeclaration = createRestVariableDeclaration(state, restName, notRestNames);\n imports.add('useReactive');\n (path.node.body as t.BlockStatement).body.unshift(restVariableDeclaration);\n }\n }\n}\n\nfunction createRestVariableDeclaration(state: State, restName: string, notRestNames: string[]) {\n return 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}\n"],"mappings":"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","names":["import_core","t","import_core","t","isComponent","t","value","import_core","t","import_core","t","import_core","t","properties"]}
package/dist/index.js CHANGED
@@ -213,7 +213,6 @@ function replaceSpace(node) {
213
213
  return node.value.replaceAll(/\s+/g, " ").trim();
214
214
  }
215
215
  function createEssorNode(path, result) {
216
- var _a;
217
216
  const state = path.state;
218
217
  const isComponent2 = path.isJSXElement() && isComponent(getTagName(path.node));
219
218
  const tmpl = isComponent2 ? t3.identifier(getTagName(path.node)) : path.scope.generateUidIdentifier("_tmpl$");
@@ -224,10 +223,11 @@ function createEssorNode(path, result) {
224
223
  imports.add("template");
225
224
  }
226
225
  }
226
+ const key = result.props.key;
227
+ delete result.props.key;
227
228
  const args = [tmpl, createProps(result.props)];
228
- const key = result.props.key || ((_a = result.props[0]) == null ? void 0 : _a.key);
229
229
  if (key) {
230
- args.push(t3.identifier(`${key}`));
230
+ args.push(key);
231
231
  }
232
232
  const fnName = isSSG ? "ssg" : "h";
233
233
  imports.add(fnName);
@@ -249,7 +249,6 @@ function createProps(props) {
249
249
  case "boolean":
250
250
  return t3.booleanLiteral(value);
251
251
  case "undefined":
252
- return t3.tsUndefinedKeyword();
253
252
  case void 0:
254
253
  return t3.tsUndefinedKeyword();
255
254
  case null:
@@ -258,10 +257,9 @@ function createProps(props) {
258
257
  return value;
259
258
  }
260
259
  };
261
- const result = Object.keys(props).filter((prop) => prop !== "key").map((prop) => {
262
- const value = toAstNode(props[prop]);
263
- return prop === "_$spread$" ? t3.spreadElement(value) : t3.objectProperty(t3.stringLiteral(prop), value);
264
- });
260
+ const result = Object.entries(props).map(
261
+ ([prop, value]) => prop === "_$spread$" ? t3.spreadElement(toAstNode(value)) : t3.objectProperty(t3.stringLiteral(prop), toAstNode(value))
262
+ );
265
263
  return t3.objectExpression(result);
266
264
  }
267
265
  function transformJSXElement(path, result, isRoot = false) {
@@ -271,37 +269,47 @@ function transformJSXElement(path, result, isRoot = false) {
271
269
  const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);
272
270
  const isSvg = svgTags.includes(tagName) && result.index === 1;
273
271
  const { props, hasExpression } = getAttrProps(path);
272
+ if (props.key) {
273
+ result.props.key = props.key;
274
+ delete props.key;
275
+ }
274
276
  if (tagIsComponent) {
275
- if (isRoot) {
276
- result.props = props;
277
- const children = getChildren(path);
278
- if (children.length > 0) {
279
- const childrenGenerator = children.length === 1 ? children[0] : t3.arrayExpression(children);
280
- result.props.children = childrenGenerator;
281
- }
282
- } else {
283
- transformJSX(path);
284
- replaceChild(path.node, result);
285
- }
277
+ handleComponentElement(path, result, isRoot, props);
286
278
  } else {
287
- if (isSvg) {
288
- result.template = isSSG ? [`<svg _svg_ data-hk="${result.index}">`] : `<svg _svg_ >`;
289
- }
290
- addToTemplate(result, `<${tagName}${isSSG ? ` data-hk="${result.index}"` : ""}`, true);
291
- handleAttributes(props, result);
292
- addToTemplate(result, isSelfClose ? "/>" : ">", !hasExpression);
293
- if (!isSelfClose) {
294
- transformChildren(path, result);
295
- if (hasSiblingElement(path) || isSSG) {
296
- addToTemplate(result, `</${tagName}>`);
297
- }
298
- }
279
+ handleHTMLElement(path, result, tagName, isSelfClose, isSvg, props, hasExpression);
299
280
  }
300
281
  } else {
301
282
  result.index--;
302
283
  transformChildren(path, result);
303
284
  }
304
285
  }
286
+ function handleComponentElement(path, result, isRoot, props) {
287
+ if (isRoot) {
288
+ result.props = props;
289
+ const children = getChildren(path);
290
+ if (children.length > 0) {
291
+ const childrenGenerator = children.length === 1 ? children[0] : t3.arrayExpression(children);
292
+ result.props.children = childrenGenerator;
293
+ }
294
+ } else {
295
+ transformJSX(path);
296
+ replaceChild(path.node, result);
297
+ }
298
+ }
299
+ function handleHTMLElement(path, result, tagName, isSelfClose, isSvg, props, hasExpression) {
300
+ if (isSvg) {
301
+ result.template = isSSG ? [`<svg _svg_ data-hk="${result.index}">`] : `<svg _svg_ >`;
302
+ }
303
+ addToTemplate(result, `<${tagName}${isSSG ? ` data-hk="${result.index}"` : ""}`, true);
304
+ handleAttributes(props, result);
305
+ addToTemplate(result, isSelfClose ? "/>" : ">", !hasExpression);
306
+ if (!isSelfClose) {
307
+ transformChildren(path, result);
308
+ if (hasSiblingElement(path) || isSSG) {
309
+ addToTemplate(result, `</${tagName}>`);
310
+ }
311
+ }
312
+ }
305
313
  function transformChildren(path, result) {
306
314
  const parentIndex = result.index;
307
315
  path.get("children").reduce((pre, cur) => {
@@ -379,13 +387,11 @@ function handleAttributes(props, result) {
379
387
  if (Object.keys(props).length > 0) {
380
388
  result.props[result.index] = props;
381
389
  }
382
- klass = klass.trim();
383
- style = style.trim();
384
- if (klass) {
385
- addToTemplate(result, ` class="${klass}"`);
390
+ if (klass.trim()) {
391
+ addToTemplate(result, ` class="${klass.trim()}"`);
386
392
  }
387
- if (style) {
388
- addToTemplate(result, ` style="${style}"`);
393
+ if (style.trim()) {
394
+ addToTemplate(result, ` style="${style.trim()}"`);
389
395
  }
390
396
  }
391
397
  function handleObjectExpression(prop, value, props, style) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/jsx/index.ts","../../shared/src/is.ts","../../shared/src/comm.ts","../../shared/src/name.ts","../../shared/src/console.ts","../src/program.ts","../src/shared.ts","../src/jsx/constants.ts","../src/signal/symbol.ts","../src/signal/import.ts","../src/signal/props.ts","../src/index.ts"],"sourcesContent":["import { types as t } from '@babel/core';\nimport { capitalizeFirstLetter, isArray } from '@estjs/shared';\nimport { imports } from '../program';\nimport {\n type JSXChild,\n type JSXElement,\n getAttrName,\n getTagName,\n hasSiblingElement,\n isComponent as isComponentName,\n isTextChild,\n setNodeText,\n} from '../shared';\nimport { selfClosingTags, svgTags } from './constants';\nimport type { Identifier, OptionalMemberExpression, StringLiteral } 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 | string[];\n}\nlet isSSG = false;\n\nfunction addToTemplate(result: Result, content: string, join = false): void {\n if (isSSG) {\n if (join && result.template.length > 0) {\n (result.template as string[])[result.template.length - 1] += content;\n } else {\n (result.template as string[]).push(content);\n }\n } else {\n result.template += content;\n }\n}\nexport function transformJSX(path: NodePath<JSXElement>): void {\n const state: State = path.state;\n isSSG = state.opts.ssg;\n\n const result: Result = {\n index: 1,\n isLastChild: false,\n parentIndex: 0,\n props: {},\n template: isSSG ? [] : '',\n };\n transformJSXElement(path, result, true);\n\n path.replaceWith(createEssorNode(path, result));\n}\n\n// Trim and replace multiple spaces/newlines with a single space\nfunction replaceSpace(node: t.JSXText): string {\n return node.value.replaceAll(/\\s+/g, ' ').trim();\n}\n\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n const isComponent = path.isJSXElement() && isComponentName(getTagName(path.node));\n\n const tmpl = isComponent\n ? t.identifier(getTagName(path.node))\n : path.scope.generateUidIdentifier('_tmpl$');\n\n if (!isComponent) {\n const template = isSSG\n ? t.arrayExpression((result.template as string[]).map(t.stringLiteral))\n : t.callExpression(state.template, [t.stringLiteral(result.template as string)]);\n state.tmplDeclaration.declarations.push(t.variableDeclarator(tmpl, template));\n if (!isSSG) {\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(t.identifier(`${key}`));\n }\n\n const fnName = isSSG ? 'ssg' : 'h';\n imports.add(fnName);\n return t.callExpression(state[fnName], args);\n}\n\nfunction createProps(props) {\n const toAstNode = value => {\n if (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 = isComponentName(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);\n if (children.length > 0) {\n const childrenGenerator =\n children.length === 1 ? children[0] : t.arrayExpression(children as JSXElement[]);\n result.props.children = childrenGenerator;\n }\n } else {\n transformJSX(path);\n replaceChild(path.node, result);\n }\n } else {\n if (isSvg) {\n result.template = isSSG ? [`<svg _svg_ data-hk=\"${result.index}\">`] : `<svg _svg_ >`;\n }\n\n addToTemplate(result, `<${tagName}${isSSG ? ` data-hk=\"${result.index}\"` : ''}`, true);\n handleAttributes(props, result);\n addToTemplate(result, isSelfClose ? '/>' : '>', !hasExpression);\n\n if (!isSelfClose) {\n transformChildren(path, result);\n if (hasSiblingElement(path) || isSSG) {\n addToTemplate(result, `</${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 addToTemplate(result, `${expression.node.value}`, true);\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else if (t.isJSXEmptyExpression(expression.node)) {\n // it is empty expression\n // just for tracking value\n } else {\n throw new Error('Unsupported child type');\n }\n } else if (child.isJSXText()) {\n addToTemplate(result, replaceSpace(child.node), true);\n } else {\n throw new Error('Unsupported child type');\n }\n}\n\nfunction getNodeText(path: NodePath<JSXChild>): string {\n if (path.isJSXText()) {\n return replaceSpace(path.node);\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, value] of Object.entries(props)) {\n if (prop === 'class' && typeof value === 'string') {\n klass += ` ${value}`;\n delete props[prop];\n } else if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\n delete props[prop];\n } else if (value === true) {\n addToTemplate(result, ` ${prop}`);\n delete props[prop];\n } else if (value === false) {\n delete props[prop];\n } else if (typeof value === 'string' || typeof value === 'number') {\n addToTemplate(result, ` ${prop}=\"${value}\"`);\n delete props[prop];\n } else if (t.isConditionalExpression(value)) {\n props[prop] = t.arrowFunctionExpression([], value);\n } else if (t.isObjectExpression(value)) {\n handleObjectExpression(prop, value, props, style);\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 addToTemplate(result, ` class=\"${klass}\"`);\n }\n if (style) {\n addToTemplate(result, ` style=\"${style}\"`);\n }\n}\n\nfunction handleObjectExpression(\n prop: string,\n value: t.ObjectExpression,\n props: Record<string, any>,\n // eslint-disable-next-line unused-imports/no-unused-vars\n style: string,\n): void {\n const hasConditional = value.properties.some(\n property => t.isObjectProperty(property) && t.isConditionalExpression(property.value),\n );\n\n if (hasConditional) {\n props[prop] = t.arrowFunctionExpression([], value);\n } else if (prop === 'style') {\n value.properties.forEach(property => {\n if (t.isObjectProperty(property)) {\n style += `${(property.key as Identifier).name}:${(property.value as StringLiteral).value};`;\n }\n });\n delete props[prop];\n }\n}\n\nfunction replaceChild(node: t.Expression, result: Result): void {\n if (result.isLastChild) {\n result.index--;\n } else {\n addToTemplate(result, '<!>');\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 transformJSX(child);\n } else if (child.isJSXExpressionContainer()) {\n child.replaceWith(child.get('expression'));\n } else if (child.isJSXText()) {\n child.replaceWith(t.stringLiteral(replaceSpace(child.node)));\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}\n\nexport function 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 if (expression.isStringLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isNumericLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isJSXElement() || expression.isJSXFragment()) {\n transformJSX(expression);\n props[name] = expression.node;\n } else if (expression.isExpression()) {\n 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[bindName] = t.memberExpression(\n // t.identifier((expression.node as Identifier).name),\n // t.identifier('value'),\n // );\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 transformJSX(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 return {\n props,\n hasExpression,\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): val is Promise<any> {\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}\n\nexport function isSet(val: any): val is Set<any> {\n return _toString.call(val) === '[object Set]';\n}\nexport function isWeakMap(val: any): val is WeakMap<any, any> {\n return _toString.call(val) === '[object WeakMap]';\n}\nexport function isWeakSet(val: any): val is WeakSet<any> {\n return _toString.call(val) === '[object WeakSet]';\n}\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;\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 function isHTMLElement(obj) {\n if (!obj) return false;\n return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName === 'string';\n}\n\nexport const isPlainObject = (val: unknown): val is object =>\n _toString.call(val) === '[object Object]';\n\nexport type StringNumber = `${number}`;\nexport function isStringNumber(val: unknown): val is StringNumber {\n if (!isString(val)) {\n return false;\n }\n return !Number.isNaN(Number(val));\n}\n","import { isArray, isFunction, 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 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 * 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 '&amp;';\n case '<':\n return '&lt;';\n case '>':\n return '&gt;';\n case '\"':\n return '&quot;';\n case \"'\":\n return '&#039;';\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 isArray(exclude) ? exclude.includes(key) : isFunction(exclude) ? exclude(key) : false;\n}\n\n/**\n * Generates a unique random 8 character string ID.\n * The generated IDs only contain alphanumeric characters.\n * @returns A unique random 8 character string ID.\n */\nexport function generateUniqueId() {\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result = '';\n const charactersLength = characters.length;\n for (let i = 0; i < 8; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n}\n\n/**\n * Checks if the current environment is a browser.\n * @returns True if the current environment is a browser, otherwise false.\n */\nexport function isBrowser() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\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","export function warn(msg: string, ..._args: any[]): void;\nexport function warn(msg: string, ...args): void {\n // eslint-disable-next-line prefer-spread\n console.warn.apply(console, [`[Essor warn]: ${msg}`].concat(args) as [string, ...any[]]);\n}\n\nexport function info(msg: string, ..._args: any[]): void;\nexport function info(msg: string, ...args): void {\n // eslint-disable-next-line prefer-spread, no-console\n console.info.apply(console, [`[Essor info]: ${msg}`].concat(args) as [string, ...any[]]);\n}\n\nexport function error(msg: string, ..._args: any[]): void;\nexport function error(msg: string, ...args): void {\n // eslint-disable-next-line prefer-spread\n console.error.apply(console, [`[Essor error]: ${msg}`].concat(args) as [string, ...any[]]);\n}\n","import { type NodePath, types as t } from '@babel/core';\nimport type { Options, State } from './types';\nexport const imports = new Set<string>();\n\nconst defaultOption: Options = {\n ssg: false,\n symbol: '$',\n props: true,\n};\n\nexport const transformProgram = {\n enter(path: NodePath<t.Program>, state) {\n imports.clear();\n\n // merge options\n state.opts = { ...defaultOption, ...state.opts };\n\n path.state = {\n h: path.scope.generateUidIdentifier('h$'),\n template: path.scope.generateUidIdentifier('template$'),\n ssg: path.scope.generateUidIdentifier('ssg$'),\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","import { type NodePath, types as t } from '@babel/core';\nimport { startsWith } from '@estjs/shared';\nimport type { State } from './types';\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-z]/i.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\n/**\n * get the symbol start with\n */\nexport function isSymbolStart(path: NodePath<any>, name: string) {\n const state: State = path.state;\n const { symbol } = state?.opts || '$';\n\n return startsWith(name, symbol);\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 { types as t } from '@babel/core';\nimport { imports } from '../program';\nimport { isSymbolStart } from '../shared';\nimport type { Identifier, VariableDeclarator } from '@babel/types';\nimport type { NodePath } from '@babel/core';\n\n/**\n * Replaces the symbol in a variable declarator with a computed or signal expression.\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 * @param {NodePath<VariableDeclarator>} path - The path to the variable declarator node.\n * @return {void}\n */\nexport function replaceSymbol(path: NodePath<VariableDeclarator>) {\n const { init, id } = path.node;\n const variableName = (id as Identifier).name;\n\n if (t.isObjectPattern(id) || t.isArrayPattern(id) || !isSymbolStart(path, variableName)) return;\n\n const isComputed =\n init &&\n (t.isFunctionExpression(init) || t.isArrowFunctionExpression(init)) &&\n (path.parent as t.VariableDeclaration).kind === 'const';\n\n const hookName = isComputed ? 'useComputed' : 'useSignal';\n const newInit = t.callExpression(t.identifier(path.state[hookName].name), init ? [init] : []);\n\n imports.add(hookName);\n path.node.init = newInit;\n}\n\nexport function symbolIdentifier(path) {\n const parentPath = path.parentPath;\n if (!shouldProcessIdentifier(parentPath)) return;\n\n const { node } = path;\n if (!isSymbolStart(path, node.name)) return;\n\n if (!path.findParent(p => p.isMemberExpression() && p.node.property.name === 'value')) {\n path.replaceWith(t.memberExpression(t.identifier(node.name), t.identifier('value')));\n }\n}\n\nfunction shouldProcessIdentifier(parentPath) {\n return (\n parentPath &&\n !t.isVariableDeclarator(parentPath) &&\n !t.isImportSpecifier(parentPath) &&\n !t.isObjectProperty(parentPath) &&\n !t.isArrayPattern(parentPath) &&\n !t.isObjectPattern(parentPath)\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 isSymbolStart(path, property.key.name)\n ) {\n property.key = t.identifier(property.key.name);\n }\n });\n}\n\nexport function symbolArrayPattern(path) {\n path.node.elements.forEach(element => {\n if (t.isIdentifier(element) && element.name.startsWith('$')) {\n element.name = t.identifier(element.name).name;\n } else if (t.isObjectPattern(element)) {\n symbolObjectPattern({ node: element } as NodePath);\n }\n });\n}\n","import { types as t } from '@babel/core';\nimport { startsWith } from '@estjs/shared';\n\n/**\n * Replaces import declarations\n *\n * case1: import { $a } from 'a';console.log(a) => import { $a } from 'a';console.log($a.value)\n * case2: import $a from 'a';console.log(a) => import $a from 'a';console.log($a.value)\n *\n * @param {object} path - The path to replace import declarations.\n * @return {void}\n */\nexport function replaceImportDeclaration(path) {\n path.node.specifiers.forEach(specifier => {\n const variableName = specifier.local.name;\n if (startsWith(variableName, '$') && !isVariableUsedAsObject(path, variableName)) {\n path.scope.rename(variableName, `${variableName}.value`);\n specifier.local.name = variableName;\n }\n });\n}\n\n/**\n * Checks if a variable is used as an object.\n *\n * @param path - The path to the variable.\n * @param variableName - The name of the variable.\n * @returns {boolean} - Whether the variable is used as an object.\n */\nfunction isVariableUsedAsObject(path, variableName) {\n const binding = path.scope.getBinding(variableName);\n return (\n binding?.referencePaths?.some(referencePath => {\n if (t.isMemberExpression(referencePath.parent)) {\n const { object, property } = referencePath.parent;\n if (t.isIdentifier(object, { name: variableName })) {\n referencePath.parentPath.replaceWith(\n t.memberExpression(t.memberExpression(object, t.identifier('value')), property),\n );\n return true;\n }\n }\n return false;\n }) || false\n );\n}\n","import { startsWith } from '@estjs/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\n/**\n * Replaces the properties of a function's first parameter with new names.\n *\n * auto replace pattern to props object\n *\n * rule1: function argument\n * rule2: first argument is object and it pattern\n * rule3: function has return\n *\n * transform case\n * case1 ({a, b}) => <div>{a.value}</div> to=> (_props)=><div>{_props.a.value}</div>\n * case2 ({a, b, ...rest}) => <div>{a.value}{rest}</div> to=> (_props)=> {const restProps = reactive(props,[a,b]);return <div>{_props.a.value}{reset}</div>}\n *\n * not transform case\n * case1 ([a,b])=> <div>{a.value}</div>\n * case2 ({a.,b}) ={}\n *\n * @param {NodePath<FunctionDeclaration | ArrowFunctionExpression>} path - The path to the function node.\n * @return {void}\n */\nexport function replaceProps(path: NodePath<FunctionDeclaration | ArrowFunctionExpression>) {\n const state: State = path.state;\n const firstParam = path.node.params[0];\n\n if (!firstParam || !t.isObjectPattern(firstParam)) return;\n\n const returnStatement = path\n .get('body')\n .get('body')\n .find(statement => statement.isReturnStatement());\n\n if (!returnStatement || !t.isJSXElement((returnStatement.node as any)?.argument)) return;\n\n const replaceProperties = (properties: (ObjectProperty | RestElement)[], parentPath: string) => {\n properties.forEach(property => {\n if (t.isObjectProperty(property) && t.isIdentifier(property.key)) {\n const keyName = property.key.name;\n if (t.isIdentifier(property.value)) {\n path.scope.rename(property.value.name, `${parentPath}${keyName}`);\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 const notRestProperties = properties.filter(property => !t.isRestElement(property)) as ObjectProperty[];\n replaceProperties(notRestProperties, '__props.');\n\n const notRestNames = notRestProperties.map(property => (property.key as Identifier).name);\n if (__DEV__ && notRestNames.some(name => startsWith(name, '$'))) {\n console.warn('props name can not start with $');\n return;\n }\n\n handleRestElement(path, state, properties, notRestNames);\n}\n\nfunction handleRestElement(path, state: State, properties, notRestNames) {\n const restElement = properties.find(property => t.isRestElement(property)) as RestElement | undefined;\n path.node.params[0] = t.identifier('__props');\n\n if (restElement) {\n const restName = (restElement.argument as Identifier).name;\n if (notRestNames.length === 0) {\n path.node.params[0] = t.identifier(restName);\n } else {\n const restVariableDeclaration = createRestVariableDeclaration(state, restName, notRestNames);\n imports.add('useReactive');\n (path.node.body as t.BlockStatement).body.unshift(restVariableDeclaration);\n }\n }\n}\n\nfunction createRestVariableDeclaration(state: State, restName: string, notRestNames: string[]) {\n return 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}\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\n FunctionDeclaration: replaceProps,\n ArrowFunctionExpression: replaceProps,\n VariableDeclarator: replaceSymbol,\n ImportDeclaration: replaceImportDeclaration,\n Identifier: symbolIdentifier,\n ObjectPattern: symbolObjectPattern,\n ArrayPattern: symbolArrayPattern,\n\n JSXElement: transformJSX,\n JSXFragment: transformJSX,\n },\n };\n}\n"],"mappings":"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","names":["t","t","t","isComponent","t","value","t","t","t","t","t","t","properties"]}
1
+ {"version":3,"sources":["../src/jsx/index.ts","../../shared/src/is.ts","../../shared/src/comm.ts","../../shared/src/name.ts","../../shared/src/console.ts","../src/program.ts","../src/shared.ts","../src/jsx/constants.ts","../src/signal/symbol.ts","../src/signal/import.ts","../src/signal/props.ts","../src/index.ts"],"sourcesContent":["import { types as t } from '@babel/core';\nimport { capitalizeFirstLetter, isArray } from '@estjs/shared';\nimport { imports } from '../program';\nimport {\n type JSXChild,\n type JSXElement,\n getAttrName,\n getTagName,\n hasSiblingElement,\n isComponent as isComponentName,\n isTextChild,\n setNodeText,\n} from '../shared';\nimport { selfClosingTags, svgTags } from './constants';\nimport type { Identifier, OptionalMemberExpression, StringLiteral } 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 | string[];\n}\n\nlet isSSG = false;\n\nfunction addToTemplate(result: Result, content: string, join = false): void {\n if (isSSG) {\n if (join && result.template.length > 0) {\n (result.template as string[])[result.template.length - 1] += content;\n } else {\n (result.template as string[]).push(content);\n }\n } else {\n result.template += content;\n }\n}\n\nexport function transformJSX(path: NodePath<JSXElement>): void {\n const state: State = path.state;\n isSSG = state.opts.ssg;\n\n const result: Result = {\n index: 1,\n isLastChild: false,\n parentIndex: 0,\n props: {},\n template: isSSG ? [] : '',\n };\n transformJSXElement(path, result, true);\n\n path.replaceWith(createEssorNode(path, result));\n}\n// Trim and replace multiple spaces/newlines with a single space\nfunction replaceSpace(node: t.JSXText): string {\n return node.value.replaceAll(/\\s+/g, ' ').trim();\n}\n\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n const isComponent = path.isJSXElement() && isComponentName(getTagName(path.node));\n\n const tmpl = isComponent\n ? t.identifier(getTagName(path.node))\n : path.scope.generateUidIdentifier('_tmpl$');\n\n if (!isComponent) {\n const template = isSSG\n ? t.arrayExpression((result.template as string[]).map(t.stringLiteral))\n : t.callExpression(state.template, [t.stringLiteral(result.template as string)]);\n state.tmplDeclaration.declarations.push(t.variableDeclarator(tmpl, template));\n if (!isSSG) {\n imports.add('template');\n }\n }\n\n const key = result.props.key;\n delete result.props.key;\n\n const args = [tmpl, createProps(result.props)];\n if (key) {\n args.push(key);\n }\n\n const fnName = isSSG ? 'ssg' : 'h';\n imports.add(fnName);\n return t.callExpression(state[fnName], args);\n}\n\nfunction createProps(props: Record<string, any>): t.ObjectExpression {\n const toAstNode = value => {\n if (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 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.entries(props).map(([prop, value]) =>\n prop === '_$spread$'\n ? t.spreadElement(toAstNode(value))\n : t.objectProperty(t.stringLiteral(prop), toAstNode(value)),\n );\n\n return t.objectExpression(result);\n}\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 = isComponentName(tagName);\n const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);\n const isSvg = svgTags.includes(tagName) && result.index === 1;\n const { props, hasExpression } = getAttrProps(path);\n\n // key\n if (props.key) {\n result.props.key = props.key;\n delete props.key;\n }\n\n if (tagIsComponent) {\n handleComponentElement(path, result, isRoot, props);\n } else {\n handleHTMLElement(path, result, tagName, isSelfClose, isSvg, props, hasExpression);\n }\n } else {\n result.index--;\n transformChildren(path, result);\n }\n}\n\nfunction handleComponentElement(\n path: NodePath<JSXElement>,\n result: Result,\n isRoot: boolean,\n props: Record<string, any>,\n): void {\n if (isRoot) {\n result.props = props;\n const children = getChildren(path);\n if (children.length > 0) {\n const childrenGenerator =\n children.length === 1 ? children[0] : t.arrayExpression(children as JSXElement[]);\n result.props.children = childrenGenerator;\n }\n } else {\n transformJSX(path);\n replaceChild(path.node, result);\n }\n}\n\nfunction handleHTMLElement(\n path: NodePath<JSXElement>,\n result: Result,\n tagName: string,\n isSelfClose: boolean,\n isSvg: boolean,\n props: Record<string, any>,\n hasExpression: boolean,\n): void {\n if (isSvg) {\n result.template = isSSG ? [`<svg _svg_ data-hk=\"${result.index}\">`] : `<svg _svg_ >`;\n }\n\n addToTemplate(result, `<${tagName}${isSSG ? ` data-hk=\"${result.index}\"` : ''}`, true);\n handleAttributes(props, result);\n addToTemplate(result, isSelfClose ? '/>' : '>', !hasExpression);\n\n if (!isSelfClose) {\n transformChildren(path, result);\n if (hasSiblingElement(path) || isSSG) {\n addToTemplate(result, `</${tagName}>`);\n }\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 addToTemplate(result, `${expression.node.value}`, true);\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else if (t.isJSXEmptyExpression(expression.node)) {\n // it is empty expression\n // just for tracking value\n } else {\n throw new Error('Unsupported child type');\n }\n } else if (child.isJSXText()) {\n addToTemplate(result, replaceSpace(child.node), true);\n } else {\n throw new Error('Unsupported child type');\n }\n}\nfunction getNodeText(path: NodePath<JSXChild>): string {\n if (path.isJSXText()) {\n return replaceSpace(path.node);\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, value] of Object.entries(props)) {\n if (prop === 'class' && typeof value === 'string') {\n klass += ` ${value}`;\n delete props[prop];\n } else if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\n delete props[prop];\n } else if (value === true) {\n addToTemplate(result, ` ${prop}`);\n delete props[prop];\n } else if (value === false) {\n delete props[prop];\n } else if (typeof value === 'string' || typeof value === 'number') {\n addToTemplate(result, ` ${prop}=\"${value}\"`);\n delete props[prop];\n } else if (t.isConditionalExpression(value)) {\n props[prop] = t.arrowFunctionExpression([], value);\n } else if (t.isObjectExpression(value)) {\n handleObjectExpression(prop, value, props, style);\n }\n }\n\n if (Object.keys(props).length > 0) {\n result.props[result.index] = props;\n }\n\n if (klass.trim()) {\n addToTemplate(result, ` class=\"${klass.trim()}\"`);\n }\n if (style.trim()) {\n addToTemplate(result, ` style=\"${style.trim()}\"`);\n }\n}\n\nfunction handleObjectExpression(\n prop: string,\n value: t.ObjectExpression,\n props: Record<string, any>,\n // eslint-disable-next-line unused-imports/no-unused-vars\n style: string,\n): void {\n const hasConditional = value.properties.some(\n property => t.isObjectProperty(property) && t.isConditionalExpression(property.value),\n );\n\n if (hasConditional) {\n props[prop] = t.arrowFunctionExpression([], value);\n } else if (prop === 'style') {\n value.properties.forEach(property => {\n if (t.isObjectProperty(property)) {\n style += `${(property.key as Identifier).name}:${(property.value as StringLiteral).value};`;\n }\n });\n delete props[prop];\n }\n}\n\nfunction replaceChild(node: t.Expression, result: Result): void {\n if (result.isLastChild) {\n result.index--;\n } else {\n addToTemplate(result, '<!>');\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 transformJSX(child);\n } else if (child.isJSXExpressionContainer()) {\n child.replaceWith(child.get('expression'));\n } else if (child.isJSXText()) {\n child.replaceWith(t.stringLiteral(replaceSpace(child.node)));\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}\n\nexport function 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 if (expression.isStringLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isNumericLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isJSXElement() || expression.isJSXFragment()) {\n transformJSX(expression);\n props[name] = expression.node;\n } else if (expression.isExpression()) {\n 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[bindName] = t.memberExpression(\n // t.identifier((expression.node as Identifier).name),\n // t.identifier('value'),\n // );\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 transformJSX(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 return {\n props,\n hasExpression,\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): val is Promise<any> {\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}\n\nexport function isSet(val: any): val is Set<any> {\n return _toString.call(val) === '[object Set]';\n}\nexport function isWeakMap(val: any): val is WeakMap<any, any> {\n return _toString.call(val) === '[object WeakMap]';\n}\nexport function isWeakSet(val: any): val is WeakSet<any> {\n return _toString.call(val) === '[object WeakSet]';\n}\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;\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 function isHTMLElement(obj) {\n if (!obj) return false;\n return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName === 'string';\n}\n\nexport const isPlainObject = (val: unknown): val is object =>\n _toString.call(val) === '[object Object]';\n\nexport type StringNumber = `${number}`;\nexport function isStringNumber(val: unknown): val is StringNumber {\n if (!isString(val)) {\n return false;\n }\n return !Number.isNaN(Number(val));\n}\n","import { isArray, isFunction, 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 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 * 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 '&amp;';\n case '<':\n return '&lt;';\n case '>':\n return '&gt;';\n case '\"':\n return '&quot;';\n case \"'\":\n return '&#039;';\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 isArray(exclude) ? exclude.includes(key) : isFunction(exclude) ? exclude(key) : false;\n}\n\n/**\n * Generates a unique random 8 character string ID.\n * The generated IDs only contain alphanumeric characters.\n * @returns A unique random 8 character string ID.\n */\nexport function generateUniqueId() {\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result = '';\n const charactersLength = characters.length;\n for (let i = 0; i < 8; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n}\n\n/**\n * Checks if the current environment is a browser.\n * @returns True if the current environment is a browser, otherwise false.\n */\nexport function isBrowser() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\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","export function warn(msg: string, ..._args: any[]): void;\nexport function warn(msg: string, ...args): void {\n // eslint-disable-next-line prefer-spread\n console.warn.apply(console, [`[Essor warn]: ${msg}`].concat(args) as [string, ...any[]]);\n}\n\nexport function info(msg: string, ..._args: any[]): void;\nexport function info(msg: string, ...args): void {\n // eslint-disable-next-line prefer-spread, no-console\n console.info.apply(console, [`[Essor info]: ${msg}`].concat(args) as [string, ...any[]]);\n}\n\nexport function error(msg: string, ..._args: any[]): void;\nexport function error(msg: string, ...args): void {\n // eslint-disable-next-line prefer-spread\n console.error.apply(console, [`[Essor error]: ${msg}`].concat(args) as [string, ...any[]]);\n}\n","import { type NodePath, types as t } from '@babel/core';\nimport type { Options, State } from './types';\nexport const imports = new Set<string>();\n\nconst defaultOption: Options = {\n ssg: false,\n symbol: '$',\n props: true,\n};\n\nexport const transformProgram = {\n enter(path: NodePath<t.Program>, state) {\n imports.clear();\n\n // merge options\n state.opts = { ...defaultOption, ...state.opts };\n\n path.state = {\n h: path.scope.generateUidIdentifier('h$'),\n template: path.scope.generateUidIdentifier('template$'),\n ssg: path.scope.generateUidIdentifier('ssg$'),\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","import { type NodePath, types as t } from '@babel/core';\nimport { startsWith } from '@estjs/shared';\nimport type { State } from './types';\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-z]/i.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\n/**\n * get the symbol start with\n */\nexport function isSymbolStart(path: NodePath<any>, name: string) {\n const state: State = path.state;\n const { symbol } = state?.opts || '$';\n\n return startsWith(name, symbol);\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 { types as t } from '@babel/core';\nimport { imports } from '../program';\nimport { isSymbolStart } from '../shared';\nimport type { Identifier, VariableDeclarator } from '@babel/types';\nimport type { NodePath } from '@babel/core';\n\n/**\n * Replaces the symbol in a variable declarator with a computed or signal expression.\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 * @param {NodePath<VariableDeclarator>} path - The path to the variable declarator node.\n * @return {void}\n */\nexport function replaceSymbol(path: NodePath<VariableDeclarator>) {\n const { init, id } = path.node;\n const variableName = (id as Identifier).name;\n\n if (t.isObjectPattern(id) || t.isArrayPattern(id) || !isSymbolStart(path, variableName)) return;\n\n const isComputed =\n init &&\n (t.isFunctionExpression(init) || t.isArrowFunctionExpression(init)) &&\n (path.parent as t.VariableDeclaration).kind === 'const';\n\n const hookName = isComputed ? 'useComputed' : 'useSignal';\n const newInit = t.callExpression(t.identifier(path.state[hookName].name), init ? [init] : []);\n\n imports.add(hookName);\n path.node.init = newInit;\n}\n\nexport function symbolIdentifier(path) {\n const parentPath = path.parentPath;\n if (!shouldProcessIdentifier(parentPath)) return;\n\n const { node } = path;\n if (!isSymbolStart(path, node.name)) return;\n\n if (!path.findParent(p => p.isMemberExpression() && p.node.property.name === 'value')) {\n path.replaceWith(t.memberExpression(t.identifier(node.name), t.identifier('value')));\n }\n}\n\nfunction shouldProcessIdentifier(parentPath) {\n return (\n parentPath &&\n !t.isVariableDeclarator(parentPath) &&\n !t.isImportSpecifier(parentPath) &&\n !t.isObjectProperty(parentPath) &&\n !t.isArrayPattern(parentPath) &&\n !t.isObjectPattern(parentPath)\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 isSymbolStart(path, property.key.name)\n ) {\n property.key = t.identifier(property.key.name);\n }\n });\n}\n\nexport function symbolArrayPattern(path) {\n path.node.elements.forEach(element => {\n if (t.isIdentifier(element) && element.name.startsWith('$')) {\n element.name = t.identifier(element.name).name;\n } else if (t.isObjectPattern(element)) {\n symbolObjectPattern({ node: element } as NodePath);\n }\n });\n}\n","import { types as t } from '@babel/core';\nimport { startsWith } from '@estjs/shared';\n\n/**\n * Replaces import declarations\n *\n * case1: import { $a } from 'a';console.log(a) => import { $a } from 'a';console.log($a.value)\n * case2: import $a from 'a';console.log(a) => import $a from 'a';console.log($a.value)\n *\n * @param {object} path - The path to replace import declarations.\n * @return {void}\n */\nexport function replaceImportDeclaration(path) {\n path.node.specifiers.forEach(specifier => {\n const variableName = specifier.local.name;\n if (startsWith(variableName, '$') && !isVariableUsedAsObject(path, variableName)) {\n path.scope.rename(variableName, `${variableName}.value`);\n specifier.local.name = variableName;\n }\n });\n}\n\n/**\n * Checks if a variable is used as an object.\n *\n * @param path - The path to the variable.\n * @param variableName - The name of the variable.\n * @returns {boolean} - Whether the variable is used as an object.\n */\nfunction isVariableUsedAsObject(path, variableName) {\n const binding = path.scope.getBinding(variableName);\n return (\n binding?.referencePaths?.some(referencePath => {\n if (t.isMemberExpression(referencePath.parent)) {\n const { object, property } = referencePath.parent;\n if (t.isIdentifier(object, { name: variableName })) {\n referencePath.parentPath.replaceWith(\n t.memberExpression(t.memberExpression(object, t.identifier('value')), property),\n );\n return true;\n }\n }\n return false;\n }) || false\n );\n}\n","import { startsWith } from '@estjs/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\n/**\n * Replaces the properties of a function's first parameter with new names.\n *\n * auto replace pattern to props object\n *\n * rule1: function argument\n * rule2: first argument is object and it pattern\n * rule3: function has return\n *\n * transform case\n * case1 ({a, b}) => <div>{a.value}</div> to=> (_props)=><div>{_props.a.value}</div>\n * case2 ({a, b, ...rest}) => <div>{a.value}{rest}</div> to=> (_props)=> {const restProps = reactive(props,[a,b]);return <div>{_props.a.value}{reset}</div>}\n *\n * not transform case\n * case1 ([a,b])=> <div>{a.value}</div>\n * case2 ({a.,b}) ={}\n *\n * @param {NodePath<FunctionDeclaration | ArrowFunctionExpression>} path - The path to the function node.\n * @return {void}\n */\nexport function replaceProps(path: NodePath<FunctionDeclaration | ArrowFunctionExpression>) {\n const state: State = path.state;\n const firstParam = path.node.params[0];\n\n if (!firstParam || !t.isObjectPattern(firstParam)) return;\n\n const returnStatement = path\n .get('body')\n .get('body')\n .find(statement => statement.isReturnStatement());\n\n if (!returnStatement || !t.isJSXElement((returnStatement.node as any)?.argument)) return;\n\n const replaceProperties = (properties: (ObjectProperty | RestElement)[], parentPath: string) => {\n properties.forEach(property => {\n if (t.isObjectProperty(property) && t.isIdentifier(property.key)) {\n const keyName = property.key.name;\n if (t.isIdentifier(property.value)) {\n path.scope.rename(property.value.name, `${parentPath}${keyName}`);\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 const notRestProperties = properties.filter(property => !t.isRestElement(property)) as ObjectProperty[];\n replaceProperties(notRestProperties, '__props.');\n\n const notRestNames = notRestProperties.map(property => (property.key as Identifier).name);\n if (__DEV__ && notRestNames.some(name => startsWith(name, '$'))) {\n console.warn('props name can not start with $');\n return;\n }\n\n handleRestElement(path, state, properties, notRestNames);\n}\n\nfunction handleRestElement(path, state: State, properties, notRestNames) {\n const restElement = properties.find(property => t.isRestElement(property)) as RestElement | undefined;\n path.node.params[0] = t.identifier('__props');\n\n if (restElement) {\n const restName = (restElement.argument as Identifier).name;\n if (notRestNames.length === 0) {\n path.node.params[0] = t.identifier(restName);\n } else {\n const restVariableDeclaration = createRestVariableDeclaration(state, restName, notRestNames);\n imports.add('useReactive');\n (path.node.body as t.BlockStatement).body.unshift(restVariableDeclaration);\n }\n }\n}\n\nfunction createRestVariableDeclaration(state: State, restName: string, notRestNames: string[]) {\n return 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}\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\n FunctionDeclaration: replaceProps,\n ArrowFunctionExpression: replaceProps,\n VariableDeclarator: replaceSymbol,\n ImportDeclaration: replaceImportDeclaration,\n Identifier: symbolIdentifier,\n ObjectPattern: symbolObjectPattern,\n ArrayPattern: symbolArrayPattern,\n\n JSXElement: transformJSX,\n JSXFragment: transformJSX,\n },\n };\n}\n"],"mappings":"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","names":["t","t","t","isComponent","t","value","t","t","t","t","t","t","properties"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "babel-plugin-essor",
3
- "version": "0.0.13-beta.7",
3
+ "version": "0.0.14-beta.1",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "keywords": [],
@@ -34,7 +34,7 @@
34
34
  "dependencies": {
35
35
  "@babel/core": "^7.25.8",
36
36
  "@babel/types": "^7.25.8",
37
- "@estjs/shared": "0.0.13-beta.7"
37
+ "@estjs/shared": "0.0.14-beta.1"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/babel__core": "^7.20.5",