babel-plugin-essor 0.0.10 → 0.0.12-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
@@ -71,8 +71,8 @@ var transformProgram = {
71
71
  state.opts = __spreadValues(__spreadValues({}, defaultOption), state.opts);
72
72
  path.state = {
73
73
  h: path.scope.generateUidIdentifier("h$"),
74
- renderTemplate: path.scope.generateUidIdentifier("renderTemplate$"),
75
74
  template: path.scope.generateUidIdentifier("template$"),
75
+ ssg: path.scope.generateUidIdentifier("ssg$"),
76
76
  useSignal: path.scope.generateUidIdentifier("signal$"),
77
77
  useComputed: path.scope.generateUidIdentifier("computed$"),
78
78
  useReactive: path.scope.generateUidIdentifier("reactive$"),
@@ -208,9 +208,13 @@ var svgTags = [
208
208
 
209
209
  // src/jsx/index.ts
210
210
  var isSsg = false;
211
- function addToTemplate(result, content) {
211
+ function addToTemplate(result, content, join = false) {
212
212
  if (isSsg) {
213
- result.template.push(content);
213
+ if (join && result.template.length > 0) {
214
+ result.template[result.template.length - 1] += content;
215
+ } else {
216
+ result.template.push(content);
217
+ }
214
218
  } else {
215
219
  result.template += content;
216
220
  }
@@ -246,10 +250,15 @@ function createEssorNode(path, result) {
246
250
  const args = [tmpl, createProps(result.props)];
247
251
  const key = result.props.key || ((_a = result.props[0]) == null ? void 0 : _a.key);
248
252
  if (key) {
249
- args.push(key);
253
+ args.push(import_core3.types.identifier(`${key}`));
254
+ }
255
+ if (isSsg) {
256
+ imports.add("ssg");
257
+ return import_core3.types.callExpression(state.ssg, args);
258
+ } else {
259
+ imports.add("h");
260
+ return import_core3.types.callExpression(state.h, args);
250
261
  }
251
- imports.add(isSsg ? "renderTemplate" : "h");
252
- return import_core3.types.callExpression(isSsg ? state.renderTemplate : state.h, args);
253
262
  }
254
263
  function createProps(props) {
255
264
  const toAstNode = (value) => {
@@ -288,7 +297,7 @@ function transformJSXElement(path, result, isRoot = false) {
288
297
  const tagIsComponent = isComponent(tagName);
289
298
  const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);
290
299
  const isSvg = svgTags.includes(tagName) && result.index === 1;
291
- const props = getAttrProps(path);
300
+ const { props, hasExpression } = getAttrProps(path);
292
301
  if (tagIsComponent) {
293
302
  if (isRoot) {
294
303
  result.props = props;
@@ -305,12 +314,12 @@ function transformJSXElement(path, result, isRoot = false) {
305
314
  if (isSvg) {
306
315
  result.template = isSsg ? ["<svg _svg_>"] : "<svg _svg_>";
307
316
  }
308
- addToTemplate(result, `<${tagName}`);
317
+ addToTemplate(result, `<${tagName}`, true);
309
318
  handleAttributes(props, result);
310
- addToTemplate(result, isSelfClose ? "/>" : ">");
319
+ addToTemplate(result, isSelfClose ? "/>" : ">", !hasExpression);
311
320
  if (!isSelfClose) {
312
321
  transformChildren(path, result);
313
- if (hasSiblingElement(path)) {
322
+ if (hasSiblingElement(path) || isSsg) {
314
323
  addToTemplate(result, `</${tagName}>`);
315
324
  }
316
325
  }
@@ -474,6 +483,7 @@ function isValidChild(path) {
474
483
  }
475
484
  function getAttrProps(path) {
476
485
  const props = {};
486
+ let hasExpression = false;
477
487
  path.get("openingElement").get("attributes").forEach((attribute) => {
478
488
  if (attribute.isJSXAttribute()) {
479
489
  const name = getAttrName(attribute.node);
@@ -493,6 +503,7 @@ function getAttrProps(path) {
493
503
  transformJSX(expression);
494
504
  props[name] = expression.node;
495
505
  } else if (expression.isExpression()) {
506
+ hasExpression = true;
496
507
  if (/^key|ref|on.+$/.test(name)) {
497
508
  props[name] = expression.node;
498
509
  } else if (/^bind:.+/.test(name)) {
@@ -518,11 +529,15 @@ function getAttrProps(path) {
518
529
  }
519
530
  } else if (attribute.isJSXSpreadAttribute()) {
520
531
  props._$spread$ = attribute.get("argument").node;
532
+ hasExpression = true;
521
533
  } else {
522
534
  throw new Error("Unsupported attribute type");
523
535
  }
524
536
  });
525
- return props;
537
+ return {
538
+ props,
539
+ hasExpression
540
+ };
526
541
  }
527
542
 
528
543
  // src/signal/symbol.ts
@@ -713,7 +728,7 @@ function src_default() {
713
728
  };
714
729
  }
715
730
  /**
716
- * @estjs/shared v0.0.10
731
+ * @estjs/shared v0.0.12-beta.1
717
732
  * (c) 2023-Present jiangxd <jiangxd2016@gmail.com>
718
733
  * @license MIT
719
734
  **/
@@ -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 } from '@estjs/shared';\nimport { imports } from '../program';\nimport {\n type JSXChild,\n type JSXElement,\n getAttrName,\n getTagName,\n hasSiblingElement,\n isComponent,\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): void {\n if (isSsg) {\n (result.template as string[]).push(content);\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\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n\n let tmpl: t.Identifier;\n if (path.isJSXElement() && isComponent(getTagName(path.node))) {\n tmpl = t.identifier(getTagName(path.node));\n } else {\n tmpl = path.scope.generateUidIdentifier('_tmpl$');\n\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 const declarator = t.variableDeclarator(tmpl, template);\n state.tmplDeclaration.declarations.push(declarator);\n if (!isSsg) {\n imports.add('template');\n }\n }\n\n const args = [tmpl, createProps(result.props)];\n const key = result.props.key || result.props[0]?.key;\n if (key) {\n args.push(key);\n }\n imports.add(isSsg ? 'renderTemplate' : 'h');\n return t.callExpression(isSsg ? state.renderTemplate : state.h, args);\n}\n\nfunction createProps(props) {\n const toAstNode = value => {\n if (Array.isArray(value)) {\n return t.arrayExpression(value.map(toAstNode));\n }\n if (value && typeof value === 'object' && !t.isNode(value)) {\n return createProps(value);\n }\n\n switch (typeof value) {\n case 'string':\n return t.stringLiteral(value);\n case 'number':\n return t.numericLiteral(value);\n case 'boolean':\n return t.booleanLiteral(value);\n case 'undefined':\n return t.tsUndefinedKeyword();\n case undefined:\n return t.tsUndefinedKeyword();\n case null:\n return t.nullLiteral();\n default:\n return value;\n }\n };\n\n const result = Object.keys(props)\n .filter(prop => prop !== 'key')\n .map(prop => {\n const value = toAstNode(props[prop]);\n return prop === '_$spread$'\n ? t.spreadElement(value)\n : t.objectProperty(t.stringLiteral(prop), value);\n });\n\n return t.objectExpression(result);\n}\nfunction transformJSXElement(\n path: NodePath<JSXElement>,\n result: Result,\n isRoot: boolean = false,\n): void {\n if (path.isJSXElement()) {\n const tagName = getTagName(path.node);\n const tagIsComponent = isComponent(tagName);\n const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);\n const isSvg = svgTags.includes(tagName) && result.index === 1;\n const props = getAttrProps(path);\n if (tagIsComponent) {\n if (isRoot) {\n result.props = props;\n const children = getChildren(path) as any;\n if (children.length > 0) {\n const childrenGenerator =\n children.length === 1 ? children[0] : t.arrayExpression(children);\n result.props.children = childrenGenerator;\n }\n } else {\n transformJSX(path);\n replaceChild(path.node, result);\n }\n } else {\n if (isSvg) {\n result.template = isSsg ? ['<svg _svg_>'] : '<svg _svg_>';\n }\n\n addToTemplate(result, `<${tagName}`);\n handleAttributes(props, result);\n addToTemplate(result, isSelfClose ? '/>' : '>');\n if (!isSelfClose) {\n transformChildren(path, result);\n\n if (hasSiblingElement(path)) {\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 = isSsg ? result.template.length : 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, String(expression.node.value));\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else if (t.isJSXEmptyExpression(expression.node)) {\n // it is empty expression\n // do nothing\n } else {\n throw new Error('Unsupported child type');\n }\n } else if (child.isJSXText()) {\n addToTemplate(result, String(child.node.value));\n } else {\n throw new Error('Unsupported child type');\n }\n}\n\nfunction getNodeText(path: NodePath<JSXChild>): string {\n if (path.isJSXText()) {\n return path.node.value;\n }\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n return String(expression.node.value);\n }\n }\n return '';\n}\n\nfunction handleAttributes(props: Record<string, any>, result: Result): void {\n let klass = '';\n let style = '';\n\n for (const prop in props) {\n let value = props[prop];\n\n if (prop === 'class' && typeof value === 'string') {\n klass += ` ${value}`;\n delete props[prop];\n continue;\n }\n\n if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\n delete props[prop];\n continue;\n }\n\n if (value === true) {\n addToTemplate(result, ` ${prop}`);\n delete props[prop];\n }\n if (value === false) {\n delete props[prop];\n }\n if (typeof value === 'string' || typeof value === 'number') {\n addToTemplate(result, ` ${prop}=\"${value}\"`);\n delete props[prop];\n }\n\n // if value is conditional expression\n if (t.isConditionalExpression(value)) {\n const { test, consequent, alternate } = value;\n value = t.arrowFunctionExpression([], t.conditionalExpression(test, consequent, alternate));\n props[prop] = value;\n }\n\n // if value is object expression and has conditional\n if (t.isObjectExpression(value)) {\n let hasConditional = false;\n value.properties.forEach(property => {\n if (t.isObjectProperty(property) && t.isConditionalExpression(property.value)) {\n hasConditional = true;\n }\n });\n if (hasConditional) {\n value = t.arrowFunctionExpression([], value);\n props[prop] = value;\n } else {\n // TODO: For the time being, only support style\n 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\n delete props[prop];\n }\n }\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 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(child.node.value));\n } else {\n throw new Error('Unsupported child type');\n }\n return child.node;\n });\n}\n\nexport function isValidChild(path: NodePath<JSXChild>): boolean {\n const regex = /^\\s*$/;\n if (path.isStringLiteral() || path.isJSXText()) {\n return !regex.test(path.node.value);\n }\n return Object.keys(path.node).length > 0;\n}\nexport function getAttrProps(path: NodePath<t.JSXElement>): Record<string, any> {\n const props: Record<string, any> = {};\n\n path\n .get('openingElement')\n .get('attributes')\n .forEach(attribute => {\n if (attribute.isJSXAttribute()) {\n const name = getAttrName(attribute.node);\n const value = attribute.get('value');\n\n if (!value.node) {\n props[name] = true;\n } else if (value.isStringLiteral()) {\n props[name] = value.node.value;\n } else {\n if (value.isJSXExpressionContainer()) {\n const expression = value.get('expression');\n\n if (expression.isStringLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isNumericLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isJSXElement() || expression.isJSXFragment()) {\n transformJSX(expression);\n props[name] = expression.node;\n } else if (expression.isExpression()) {\n if (/^key|ref|on.+$/.test(name)) {\n props[name] = expression.node;\n } else if (/^bind:.+/.test(name)) {\n 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 } else {\n throw new Error('Unsupported attribute type');\n }\n });\n\n return props;\n}\n","import { _toString } from './comm';\n\nexport const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object';\nexport function isPromise(val: any): boolean {\n return _toString.call(val) === '[object Promise]';\n}\n\nexport const isArray = Array.isArray;\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\nexport function isNull(val: any): val is null {\n return val === null;\n}\nexport function isSymbol(val: unknown): val is symbol {\n return typeof val === 'symbol';\n}\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","import { 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 Array.isArray(data) ? (data.flat() as T[]) : [data];\n}\nexport const hasChanged = (value, oldValue) =>\n value !== oldValue && (value === value || oldValue === oldValue);\nexport const noop = Function.prototype as () => void;\n\n/**\n * A function that checks if a string starts with a specific substring.\n * indexOf faster under normal circumstances\n * @see https://www.measurethat.net/Benchmarks/Show/12350/0/startswith-vs-test-vs-match-vs-indexof#latest_results_block\n\n * @param {string} str - The input string to check.\n * @param {string} searchString - The substring to check for at the beginning of the input string.\n * @return {boolean} Returns true if the input string starts with the specified substring, otherwise false.\n */\nexport function startsWith(str, searchString) {\n if (!isString(str)) {\n return false;\n }\n return str.indexOf(searchString) === 0;\n}\n\n/**\n * 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 Array.isArray(exclude)\n ? exclude.includes(key)\n : isFunction(exclude)\n ? exclude(key)\n : false;\n}\n","export const kebabCase = (string: string): string => {\n return string.replaceAll(/[A-Z]+/g, (match, offset) => {\n return `${offset > 0 ? '-' : ''}${match.toLocaleLowerCase()}`;\n });\n};\n\nexport const camelCase = (str: string): string => {\n const s = str.replaceAll(/[\\s_-]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));\n return s[0].toLowerCase() + s.slice(1);\n};\n/**\n * Capitalizes the first letter of a string.\n *\n * @param {string} inputString - The input string to capitalize the first letter.\n * @return {string} The string with the first letter capitalized.\n */\nexport const capitalizeFirstLetter = (inputString: string): string => {\n return inputString.charAt(0).toUpperCase() + inputString.slice(1);\n};\n","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 renderTemplate: path.scope.generateUidIdentifier('renderTemplate$'),\n template: path.scope.generateUidIdentifier('template$'),\n\n useSignal: path.scope.generateUidIdentifier('signal$'),\n useComputed: path.scope.generateUidIdentifier('computed$'),\n useReactive: path.scope.generateUidIdentifier('reactive$'),\n\n tmplDeclaration: t.variableDeclaration('const', []),\n opts: state.opts,\n } as State;\n },\n exit(path: NodePath<t.Program>) {\n const state: State = path.state;\n if (state.tmplDeclaration.declarations.length > 0) {\n const index = path.node.body.findIndex(\n node => !t.isImportDeclaration(node) && !t.isExportDeclaration(node),\n );\n path.node.body.splice(index, 0, state.tmplDeclaration);\n }\n if (imports.size > 0) {\n path.node.body.unshift(createImport(state, 'essor'));\n }\n },\n};\nfunction createImport(state: State, from: string) {\n const ImportSpecifier: t.ImportSpecifier[] = [];\n imports.forEach(name => {\n const local = t.identifier(state[name].name);\n const imported = t.identifier(name);\n ImportSpecifier.push(t.importSpecifier(local, imported));\n });\n\n const importSource = t.stringLiteral(from);\n return t.importDeclaration(ImportSpecifier, importSource);\n}\n","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 = path.node.init;\n\n const variableName = (path.node.id as Identifier).name;\n\n if (t.isObjectPattern(path.node.id) || t.isArrayPattern(path.node.id)) {\n return;\n }\n\n if (!isSymbolStart(path, variableName)) {\n return;\n }\n\n if (\n init &&\n (t.isFunctionExpression(init) || t.isArrowFunctionExpression(init)) &&\n (path.parent as t.VariableDeclaration).kind === 'const'\n ) {\n const newInit = t.callExpression(t.identifier(path.state.useComputed.name), init ? [init] : []);\n imports.add('useComputed');\n path.node.init = newInit;\n } else {\n const newInit = t.callExpression(t.identifier(path.state.useSignal.name), init ? [init] : []);\n imports.add('useSignal');\n path.node.init = newInit;\n }\n}\n\nexport function symbolIdentifier(path) {\n const parentPath = path.parentPath;\n\n if (\n !parentPath ||\n t.isVariableDeclarator(parentPath) ||\n t.isImportSpecifier(parentPath) ||\n t.isObjectProperty(parentPath) ||\n t.isArrayPattern(parentPath) ||\n t.isObjectPattern(parentPath)\n ) {\n return;\n }\n\n const { node } = path;\n\n if (isSymbolStart(path, node.name)) {\n // check is has .value\n let currentPath = path;\n while (currentPath.parentPath && !currentPath.parentPath.isProgram()) {\n if (\n currentPath.parentPath.isMemberExpression() &&\n currentPath.parentPath.node.property.name === 'value'\n ) {\n return;\n }\n currentPath = currentPath.parentPath;\n }\n\n // add with .value\n const newNode = t.memberExpression(t.identifier(node.name), t.identifier('value'));\n\n path.replaceWith(newNode);\n }\n}\n\nexport function symbolObjectPattern(path) {\n path.node.properties.forEach(property => {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n isSymbolStart(path, property.key.name)\n ) {\n const newKey = t.identifier(property.key.name);\n property.key = newKey;\n }\n });\n}\n\nexport function symbolArrayPattern(path) {\n path.node.elements.forEach(element => {\n if (t.isIdentifier(element) && element.name.startsWith('$')) {\n const newElement = t.identifier(element.name);\n element.name = newElement.name;\n } else if (t.isObjectPattern(element)) {\n element.properties.forEach(property => {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n isSymbolStart(path, property.key.name)\n ) {\n const newKey = t.identifier(property.key.name);\n property.key = newKey;\n }\n });\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 const imports = path.node.specifiers;\n imports.forEach(specifier => {\n const variableName = specifier.local.name;\n\n if (startsWith(variableName, '$') && !isVariableUsedAsObject(path, variableName)) {\n path.scope.rename(variableName, `${variableName}.value`);\n specifier.local.name = `${variableName}`;\n }\n });\n}\nfunction isVariableUsedAsObject(path, variableName) {\n const binding = path.scope.getBinding(variableName);\n let isUsedObject = false;\n\n if (!binding || !binding.referencePaths) {\n return isUsedObject;\n }\n\n for (const referencePath of binding.referencePaths) {\n if (t.isMemberExpression(referencePath.parent)) {\n const memberExprParent = referencePath.parent;\n\n if (t.isIdentifier(memberExprParent.object, { name: variableName })) {\n const newMemberExpr = t.memberExpression(\n t.memberExpression(memberExprParent.object, t.identifier('value')),\n memberExprParent.property,\n );\n referencePath.parentPath.replaceWith(newMemberExpr);\n isUsedObject = true;\n }\n }\n }\n\n return isUsedObject;\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\n const firstParam = path.node.params[0];\n\n if (!firstParam || !t.isObjectPattern(firstParam)) {\n return;\n }\n\n const returnStatement = path\n .get('body')\n .get('body')\n .find(statement => statement.isReturnStatement());\n\n if (!returnStatement) {\n return;\n }\n\n const returnValue = (returnStatement.node as any)?.argument;\n if (!t.isJSXElement(returnValue)) {\n return;\n }\n\n function replaceProperties(properties: (ObjectProperty | RestElement)[], parentPath: string) {\n properties.forEach(property => {\n if (t.isObjectProperty(property)) {\n const keyName = (property.key as Identifier).name;\n\n if (t.isIdentifier(property.value)) {\n const propertyName = property.value.name;\n const newName = `${parentPath}${keyName}`;\n path.scope.rename(propertyName, newName);\n } else if (t.isObjectPattern(property.value)) {\n replaceProperties(property.value.properties, `${parentPath}${keyName}.`);\n }\n }\n });\n }\n\n const properties = firstParam.properties;\n replaceProperties(\n properties.filter(property => !t.isRestElement(property)),\n '__props.',\n );\n const notRestProperties = properties.filter(property => !t.isRestElement(property));\n const notRestNames = notRestProperties.map(\n property => ((property as ObjectProperty).key as Identifier).name,\n );\n if (__DEV__ && notRestNames.some(name => startsWith(name, '$'))) {\n console.warn('props name can not start with $');\n return;\n }\n\n const restElement = properties.find(property => t.isRestElement(property)) as\n | RestElement\n | undefined;\n path.node.params[0] = t.identifier('__props');\n\n if (restElement) {\n const restName = (restElement.argument as any).name;\n if (notRestProperties.length === 0) {\n path.node.params[0] = t.identifier(restName);\n } else {\n const restVariableDeclaration = t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(restName),\n t.callExpression(state.useReactive, [\n t.identifier('__props'),\n t.arrayExpression(notRestNames.map(name => t.stringLiteral(name))),\n ]),\n ),\n ]);\n imports.add('useReactive');\n\n (path.node.body as any).body.unshift(restVariableDeclaration);\n }\n }\n}\n"],"mappings":"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","names":["import_core","t","import_core","t","t","value","import_core","t","import_core","imports","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 } from '@estjs/shared';\nimport { imports } from '../program';\nimport {\n type JSXChild,\n type JSXElement,\n getAttrName,\n getTagName,\n hasSiblingElement,\n isComponent,\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\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n\n let tmpl: t.Identifier;\n if (path.isJSXElement() && isComponent(getTagName(path.node))) {\n tmpl = t.identifier(getTagName(path.node));\n } else {\n tmpl = path.scope.generateUidIdentifier('_tmpl$');\n\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 const declarator = t.variableDeclarator(tmpl, template);\n state.tmplDeclaration.declarations.push(declarator);\n if (!isSsg) {\n imports.add('template');\n }\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 if (isSsg) {\n imports.add('ssg');\n return t.callExpression(state.ssg, args);\n } else {\n imports.add('h');\n return t.callExpression(state.h, args);\n }\n}\n\nfunction createProps(props) {\n const toAstNode = value => {\n if (Array.isArray(value)) {\n return t.arrayExpression(value.map(toAstNode));\n }\n if (value && typeof value === 'object' && !t.isNode(value)) {\n return createProps(value);\n }\n\n switch (typeof value) {\n case 'string':\n return t.stringLiteral(value);\n case 'number':\n return t.numericLiteral(value);\n case 'boolean':\n return t.booleanLiteral(value);\n case 'undefined':\n return t.tsUndefinedKeyword();\n case undefined:\n return t.tsUndefinedKeyword();\n case null:\n return t.nullLiteral();\n default:\n return value;\n }\n };\n\n const result = Object.keys(props)\n .filter(prop => prop !== 'key')\n .map(prop => {\n const value = toAstNode(props[prop]);\n return prop === '_$spread$'\n ? t.spreadElement(value)\n : t.objectProperty(t.stringLiteral(prop), value);\n });\n\n return t.objectExpression(result);\n}\nfunction transformJSXElement(\n path: NodePath<JSXElement>,\n result: Result,\n isRoot: boolean = false,\n): void {\n if (path.isJSXElement()) {\n const tagName = getTagName(path.node);\n const tagIsComponent = isComponent(tagName);\n const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);\n const isSvg = svgTags.includes(tagName) && result.index === 1;\n const { props, hasExpression } = getAttrProps(path);\n if (tagIsComponent) {\n if (isRoot) {\n result.props = props;\n const children = getChildren(path) as any;\n if (children.length > 0) {\n const childrenGenerator =\n children.length === 1 ? children[0] : t.arrayExpression(children);\n result.props.children = childrenGenerator;\n }\n } else {\n transformJSX(path);\n replaceChild(path.node, result);\n }\n } else {\n if (isSvg) {\n result.template = isSsg ? ['<svg _svg_>'] : '<svg _svg_>';\n }\n\n addToTemplate(result, `<${tagName}`, true);\n handleAttributes(props, result);\n\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 = isSsg ? result.template.length : 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, String(expression.node.value));\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else if (t.isJSXEmptyExpression(expression.node)) {\n // it is empty expression\n // do nothing\n } else {\n throw new Error('Unsupported child type');\n }\n } else if (child.isJSXText()) {\n addToTemplate(result, String(child.node.value));\n } else {\n throw new Error('Unsupported child type');\n }\n}\n\nfunction getNodeText(path: NodePath<JSXChild>): string {\n if (path.isJSXText()) {\n return path.node.value;\n }\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n return String(expression.node.value);\n }\n }\n return '';\n}\n\nfunction handleAttributes(props: Record<string, any>, result: Result): void {\n let klass = '';\n let style = '';\n\n for (const prop in props) {\n let value = props[prop];\n\n if (prop === 'class' && typeof value === 'string') {\n klass += ` ${value}`;\n delete props[prop];\n continue;\n }\n\n if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\n delete props[prop];\n continue;\n }\n\n if (value === true) {\n addToTemplate(result, ` ${prop}`);\n delete props[prop];\n }\n if (value === false) {\n delete props[prop];\n }\n if (typeof value === 'string' || typeof value === 'number') {\n addToTemplate(result, ` ${prop}=\"${value}\"`);\n delete props[prop];\n }\n\n // if value is conditional expression\n if (t.isConditionalExpression(value)) {\n const { test, consequent, alternate } = value;\n value = t.arrowFunctionExpression([], t.conditionalExpression(test, consequent, alternate));\n props[prop] = value;\n }\n\n // if value is object expression and has conditional\n if (t.isObjectExpression(value)) {\n let hasConditional = false;\n value.properties.forEach(property => {\n if (t.isObjectProperty(property) && t.isConditionalExpression(property.value)) {\n hasConditional = true;\n }\n });\n if (hasConditional) {\n value = t.arrowFunctionExpression([], value);\n props[prop] = value;\n } else {\n // TODO: For the time being, only support style\n 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\n delete props[prop];\n }\n }\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 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(child.node.value));\n } else {\n throw new Error('Unsupported child type');\n }\n return child.node;\n });\n}\n\nexport function isValidChild(path: NodePath<JSXChild>): boolean {\n const regex = /^\\s*$/;\n if (path.isStringLiteral() || path.isJSXText()) {\n return !regex.test(path.node.value);\n }\n return Object.keys(path.node).length > 0;\n}\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\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): boolean {\n return _toString.call(val) === '[object Promise]';\n}\n\nexport const isArray = Array.isArray;\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\nexport function isNull(val: any): val is null {\n return val === null;\n}\nexport function isSymbol(val: unknown): val is symbol {\n return typeof val === 'symbol';\n}\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","import { 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 Array.isArray(data) ? (data.flat() as T[]) : [data];\n}\nexport const hasChanged = (value, oldValue) =>\n value !== oldValue && (value === value || oldValue === oldValue);\nexport const noop = Function.prototype as () => void;\n\n/**\n * A function that checks if a string starts with a specific substring.\n * indexOf faster under normal circumstances\n * @see https://www.measurethat.net/Benchmarks/Show/12350/0/startswith-vs-test-vs-match-vs-indexof#latest_results_block\n\n * @param {string} str - The input string to check.\n * @param {string} searchString - The substring to check for at the beginning of the input string.\n * @return {boolean} Returns true if the input string starts with the specified substring, otherwise false.\n */\nexport function startsWith(str, searchString) {\n if (!isString(str)) {\n return false;\n }\n return str.indexOf(searchString) === 0;\n}\n\n/**\n * 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 Array.isArray(exclude)\n ? exclude.includes(key)\n : isFunction(exclude)\n ? exclude(key)\n : 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 = path.node.init;\n\n const variableName = (path.node.id as Identifier).name;\n\n if (t.isObjectPattern(path.node.id) || t.isArrayPattern(path.node.id)) {\n return;\n }\n\n if (!isSymbolStart(path, variableName)) {\n return;\n }\n\n if (\n init &&\n (t.isFunctionExpression(init) || t.isArrowFunctionExpression(init)) &&\n (path.parent as t.VariableDeclaration).kind === 'const'\n ) {\n const newInit = t.callExpression(t.identifier(path.state.useComputed.name), init ? [init] : []);\n imports.add('useComputed');\n path.node.init = newInit;\n } else {\n const newInit = t.callExpression(t.identifier(path.state.useSignal.name), init ? [init] : []);\n imports.add('useSignal');\n path.node.init = newInit;\n }\n}\n\nexport function symbolIdentifier(path) {\n const parentPath = path.parentPath;\n\n if (\n !parentPath ||\n t.isVariableDeclarator(parentPath) ||\n t.isImportSpecifier(parentPath) ||\n t.isObjectProperty(parentPath) ||\n t.isArrayPattern(parentPath) ||\n t.isObjectPattern(parentPath)\n ) {\n return;\n }\n\n const { node } = path;\n\n if (isSymbolStart(path, node.name)) {\n // check is has .value\n let currentPath = path;\n while (currentPath.parentPath && !currentPath.parentPath.isProgram()) {\n if (\n currentPath.parentPath.isMemberExpression() &&\n currentPath.parentPath.node.property.name === 'value'\n ) {\n return;\n }\n currentPath = currentPath.parentPath;\n }\n\n // add with .value\n const newNode = t.memberExpression(t.identifier(node.name), t.identifier('value'));\n\n path.replaceWith(newNode);\n }\n}\n\nexport function symbolObjectPattern(path) {\n path.node.properties.forEach(property => {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n isSymbolStart(path, property.key.name)\n ) {\n const newKey = t.identifier(property.key.name);\n property.key = newKey;\n }\n });\n}\n\nexport function symbolArrayPattern(path) {\n path.node.elements.forEach(element => {\n if (t.isIdentifier(element) && element.name.startsWith('$')) {\n const newElement = t.identifier(element.name);\n element.name = newElement.name;\n } else if (t.isObjectPattern(element)) {\n element.properties.forEach(property => {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n isSymbolStart(path, property.key.name)\n ) {\n const newKey = t.identifier(property.key.name);\n property.key = newKey;\n }\n });\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 const imports = path.node.specifiers;\n imports.forEach(specifier => {\n const variableName = specifier.local.name;\n\n if (startsWith(variableName, '$') && !isVariableUsedAsObject(path, variableName)) {\n path.scope.rename(variableName, `${variableName}.value`);\n specifier.local.name = `${variableName}`;\n }\n });\n}\nfunction isVariableUsedAsObject(path, variableName) {\n const binding = path.scope.getBinding(variableName);\n let isUsedObject = false;\n\n if (!binding || !binding.referencePaths) {\n return isUsedObject;\n }\n\n for (const referencePath of binding.referencePaths) {\n if (t.isMemberExpression(referencePath.parent)) {\n const memberExprParent = referencePath.parent;\n\n if (t.isIdentifier(memberExprParent.object, { name: variableName })) {\n const newMemberExpr = t.memberExpression(\n t.memberExpression(memberExprParent.object, t.identifier('value')),\n memberExprParent.property,\n );\n referencePath.parentPath.replaceWith(newMemberExpr);\n isUsedObject = true;\n }\n }\n }\n\n return isUsedObject;\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\n const firstParam = path.node.params[0];\n\n if (!firstParam || !t.isObjectPattern(firstParam)) {\n return;\n }\n\n const returnStatement = path\n .get('body')\n .get('body')\n .find(statement => statement.isReturnStatement());\n\n if (!returnStatement) {\n return;\n }\n\n const returnValue = (returnStatement.node as any)?.argument;\n if (!t.isJSXElement(returnValue)) {\n return;\n }\n\n function replaceProperties(properties: (ObjectProperty | RestElement)[], parentPath: string) {\n properties.forEach(property => {\n if (t.isObjectProperty(property)) {\n const keyName = (property.key as Identifier).name;\n\n if (t.isIdentifier(property.value)) {\n const propertyName = property.value.name;\n const newName = `${parentPath}${keyName}`;\n path.scope.rename(propertyName, newName);\n } else if (t.isObjectPattern(property.value)) {\n replaceProperties(property.value.properties, `${parentPath}${keyName}.`);\n }\n }\n });\n }\n\n const properties = firstParam.properties;\n replaceProperties(\n properties.filter(property => !t.isRestElement(property)),\n '__props.',\n );\n const notRestProperties = properties.filter(property => !t.isRestElement(property));\n const notRestNames = notRestProperties.map(\n property => ((property as ObjectProperty).key as Identifier).name,\n );\n if (__DEV__ && notRestNames.some(name => startsWith(name, '$'))) {\n console.warn('props name can not start with $');\n return;\n }\n\n const restElement = properties.find(property => t.isRestElement(property)) as\n | RestElement\n | undefined;\n path.node.params[0] = t.identifier('__props');\n\n if (restElement) {\n const restName = (restElement.argument as any).name;\n if (notRestProperties.length === 0) {\n path.node.params[0] = t.identifier(restName);\n } else {\n const restVariableDeclaration = t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(restName),\n t.callExpression(state.useReactive, [\n t.identifier('__props'),\n t.arrayExpression(notRestNames.map(name => t.stringLiteral(name))),\n ]),\n ),\n ]);\n imports.add('useReactive');\n\n (path.node.body as any).body.unshift(restVariableDeclaration);\n }\n }\n}\n"],"mappings":"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","names":["import_core","t","import_core","t","t","value","import_core","t","import_core","imports","t","import_core","t","properties"]}
package/dist/index.d.cts CHANGED
@@ -3,7 +3,7 @@ import { types, PluginObj } from '@babel/core';
3
3
  interface State {
4
4
  h: types.Identifier;
5
5
  template: types.Identifier;
6
- renderTemplate: types.Identifier;
6
+ ssg: types.Identifier;
7
7
  useSignal: types.Identifier;
8
8
  useComputed: types.Identifier;
9
9
  useReactive: types.Identifier;
package/dist/index.d.ts CHANGED
@@ -3,7 +3,7 @@ import { types, PluginObj } from '@babel/core';
3
3
  interface State {
4
4
  h: types.Identifier;
5
5
  template: types.Identifier;
6
- renderTemplate: types.Identifier;
6
+ ssg: types.Identifier;
7
7
  useSignal: types.Identifier;
8
8
  useComputed: types.Identifier;
9
9
  useReactive: types.Identifier;
package/dist/index.js CHANGED
@@ -48,8 +48,8 @@ var transformProgram = {
48
48
  state.opts = __spreadValues(__spreadValues({}, defaultOption), state.opts);
49
49
  path.state = {
50
50
  h: path.scope.generateUidIdentifier("h$"),
51
- renderTemplate: path.scope.generateUidIdentifier("renderTemplate$"),
52
51
  template: path.scope.generateUidIdentifier("template$"),
52
+ ssg: path.scope.generateUidIdentifier("ssg$"),
53
53
  useSignal: path.scope.generateUidIdentifier("signal$"),
54
54
  useComputed: path.scope.generateUidIdentifier("computed$"),
55
55
  useReactive: path.scope.generateUidIdentifier("reactive$"),
@@ -185,9 +185,13 @@ var svgTags = [
185
185
 
186
186
  // src/jsx/index.ts
187
187
  var isSsg = false;
188
- function addToTemplate(result, content) {
188
+ function addToTemplate(result, content, join = false) {
189
189
  if (isSsg) {
190
- result.template.push(content);
190
+ if (join && result.template.length > 0) {
191
+ result.template[result.template.length - 1] += content;
192
+ } else {
193
+ result.template.push(content);
194
+ }
191
195
  } else {
192
196
  result.template += content;
193
197
  }
@@ -223,10 +227,15 @@ function createEssorNode(path, result) {
223
227
  const args = [tmpl, createProps(result.props)];
224
228
  const key = result.props.key || ((_a = result.props[0]) == null ? void 0 : _a.key);
225
229
  if (key) {
226
- args.push(key);
230
+ args.push(t3.identifier(`${key}`));
231
+ }
232
+ if (isSsg) {
233
+ imports.add("ssg");
234
+ return t3.callExpression(state.ssg, args);
235
+ } else {
236
+ imports.add("h");
237
+ return t3.callExpression(state.h, args);
227
238
  }
228
- imports.add(isSsg ? "renderTemplate" : "h");
229
- return t3.callExpression(isSsg ? state.renderTemplate : state.h, args);
230
239
  }
231
240
  function createProps(props) {
232
241
  const toAstNode = (value) => {
@@ -265,7 +274,7 @@ function transformJSXElement(path, result, isRoot = false) {
265
274
  const tagIsComponent = isComponent(tagName);
266
275
  const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);
267
276
  const isSvg = svgTags.includes(tagName) && result.index === 1;
268
- const props = getAttrProps(path);
277
+ const { props, hasExpression } = getAttrProps(path);
269
278
  if (tagIsComponent) {
270
279
  if (isRoot) {
271
280
  result.props = props;
@@ -282,12 +291,12 @@ function transformJSXElement(path, result, isRoot = false) {
282
291
  if (isSvg) {
283
292
  result.template = isSsg ? ["<svg _svg_>"] : "<svg _svg_>";
284
293
  }
285
- addToTemplate(result, `<${tagName}`);
294
+ addToTemplate(result, `<${tagName}`, true);
286
295
  handleAttributes(props, result);
287
- addToTemplate(result, isSelfClose ? "/>" : ">");
296
+ addToTemplate(result, isSelfClose ? "/>" : ">", !hasExpression);
288
297
  if (!isSelfClose) {
289
298
  transformChildren(path, result);
290
- if (hasSiblingElement(path)) {
299
+ if (hasSiblingElement(path) || isSsg) {
291
300
  addToTemplate(result, `</${tagName}>`);
292
301
  }
293
302
  }
@@ -451,6 +460,7 @@ function isValidChild(path) {
451
460
  }
452
461
  function getAttrProps(path) {
453
462
  const props = {};
463
+ let hasExpression = false;
454
464
  path.get("openingElement").get("attributes").forEach((attribute) => {
455
465
  if (attribute.isJSXAttribute()) {
456
466
  const name = getAttrName(attribute.node);
@@ -470,6 +480,7 @@ function getAttrProps(path) {
470
480
  transformJSX(expression);
471
481
  props[name] = expression.node;
472
482
  } else if (expression.isExpression()) {
483
+ hasExpression = true;
473
484
  if (/^key|ref|on.+$/.test(name)) {
474
485
  props[name] = expression.node;
475
486
  } else if (/^bind:.+/.test(name)) {
@@ -495,11 +506,15 @@ function getAttrProps(path) {
495
506
  }
496
507
  } else if (attribute.isJSXSpreadAttribute()) {
497
508
  props._$spread$ = attribute.get("argument").node;
509
+ hasExpression = true;
498
510
  } else {
499
511
  throw new Error("Unsupported attribute type");
500
512
  }
501
513
  });
502
- return props;
514
+ return {
515
+ props,
516
+ hasExpression
517
+ };
503
518
  }
504
519
 
505
520
  // src/signal/symbol.ts
@@ -693,7 +708,7 @@ export {
693
708
  src_default as default
694
709
  };
695
710
  /**
696
- * @estjs/shared v0.0.10
711
+ * @estjs/shared v0.0.12-beta.1
697
712
  * (c) 2023-Present jiangxd <jiangxd2016@gmail.com>
698
713
  * @license MIT
699
714
  **/
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 } from '@estjs/shared';\nimport { imports } from '../program';\nimport {\n type JSXChild,\n type JSXElement,\n getAttrName,\n getTagName,\n hasSiblingElement,\n isComponent,\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): void {\n if (isSsg) {\n (result.template as string[]).push(content);\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\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n\n let tmpl: t.Identifier;\n if (path.isJSXElement() && isComponent(getTagName(path.node))) {\n tmpl = t.identifier(getTagName(path.node));\n } else {\n tmpl = path.scope.generateUidIdentifier('_tmpl$');\n\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 const declarator = t.variableDeclarator(tmpl, template);\n state.tmplDeclaration.declarations.push(declarator);\n if (!isSsg) {\n imports.add('template');\n }\n }\n\n const args = [tmpl, createProps(result.props)];\n const key = result.props.key || result.props[0]?.key;\n if (key) {\n args.push(key);\n }\n imports.add(isSsg ? 'renderTemplate' : 'h');\n return t.callExpression(isSsg ? state.renderTemplate : state.h, args);\n}\n\nfunction createProps(props) {\n const toAstNode = value => {\n if (Array.isArray(value)) {\n return t.arrayExpression(value.map(toAstNode));\n }\n if (value && typeof value === 'object' && !t.isNode(value)) {\n return createProps(value);\n }\n\n switch (typeof value) {\n case 'string':\n return t.stringLiteral(value);\n case 'number':\n return t.numericLiteral(value);\n case 'boolean':\n return t.booleanLiteral(value);\n case 'undefined':\n return t.tsUndefinedKeyword();\n case undefined:\n return t.tsUndefinedKeyword();\n case null:\n return t.nullLiteral();\n default:\n return value;\n }\n };\n\n const result = Object.keys(props)\n .filter(prop => prop !== 'key')\n .map(prop => {\n const value = toAstNode(props[prop]);\n return prop === '_$spread$'\n ? t.spreadElement(value)\n : t.objectProperty(t.stringLiteral(prop), value);\n });\n\n return t.objectExpression(result);\n}\nfunction transformJSXElement(\n path: NodePath<JSXElement>,\n result: Result,\n isRoot: boolean = false,\n): void {\n if (path.isJSXElement()) {\n const tagName = getTagName(path.node);\n const tagIsComponent = isComponent(tagName);\n const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);\n const isSvg = svgTags.includes(tagName) && result.index === 1;\n const props = getAttrProps(path);\n if (tagIsComponent) {\n if (isRoot) {\n result.props = props;\n const children = getChildren(path) as any;\n if (children.length > 0) {\n const childrenGenerator =\n children.length === 1 ? children[0] : t.arrayExpression(children);\n result.props.children = childrenGenerator;\n }\n } else {\n transformJSX(path);\n replaceChild(path.node, result);\n }\n } else {\n if (isSvg) {\n result.template = isSsg ? ['<svg _svg_>'] : '<svg _svg_>';\n }\n\n addToTemplate(result, `<${tagName}`);\n handleAttributes(props, result);\n addToTemplate(result, isSelfClose ? '/>' : '>');\n if (!isSelfClose) {\n transformChildren(path, result);\n\n if (hasSiblingElement(path)) {\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 = isSsg ? result.template.length : 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, String(expression.node.value));\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else if (t.isJSXEmptyExpression(expression.node)) {\n // it is empty expression\n // do nothing\n } else {\n throw new Error('Unsupported child type');\n }\n } else if (child.isJSXText()) {\n addToTemplate(result, String(child.node.value));\n } else {\n throw new Error('Unsupported child type');\n }\n}\n\nfunction getNodeText(path: NodePath<JSXChild>): string {\n if (path.isJSXText()) {\n return path.node.value;\n }\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n return String(expression.node.value);\n }\n }\n return '';\n}\n\nfunction handleAttributes(props: Record<string, any>, result: Result): void {\n let klass = '';\n let style = '';\n\n for (const prop in props) {\n let value = props[prop];\n\n if (prop === 'class' && typeof value === 'string') {\n klass += ` ${value}`;\n delete props[prop];\n continue;\n }\n\n if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\n delete props[prop];\n continue;\n }\n\n if (value === true) {\n addToTemplate(result, ` ${prop}`);\n delete props[prop];\n }\n if (value === false) {\n delete props[prop];\n }\n if (typeof value === 'string' || typeof value === 'number') {\n addToTemplate(result, ` ${prop}=\"${value}\"`);\n delete props[prop];\n }\n\n // if value is conditional expression\n if (t.isConditionalExpression(value)) {\n const { test, consequent, alternate } = value;\n value = t.arrowFunctionExpression([], t.conditionalExpression(test, consequent, alternate));\n props[prop] = value;\n }\n\n // if value is object expression and has conditional\n if (t.isObjectExpression(value)) {\n let hasConditional = false;\n value.properties.forEach(property => {\n if (t.isObjectProperty(property) && t.isConditionalExpression(property.value)) {\n hasConditional = true;\n }\n });\n if (hasConditional) {\n value = t.arrowFunctionExpression([], value);\n props[prop] = value;\n } else {\n // TODO: For the time being, only support style\n 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\n delete props[prop];\n }\n }\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 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(child.node.value));\n } else {\n throw new Error('Unsupported child type');\n }\n return child.node;\n });\n}\n\nexport function isValidChild(path: NodePath<JSXChild>): boolean {\n const regex = /^\\s*$/;\n if (path.isStringLiteral() || path.isJSXText()) {\n return !regex.test(path.node.value);\n }\n return Object.keys(path.node).length > 0;\n}\nexport function getAttrProps(path: NodePath<t.JSXElement>): Record<string, any> {\n const props: Record<string, any> = {};\n\n path\n .get('openingElement')\n .get('attributes')\n .forEach(attribute => {\n if (attribute.isJSXAttribute()) {\n const name = getAttrName(attribute.node);\n const value = attribute.get('value');\n\n if (!value.node) {\n props[name] = true;\n } else if (value.isStringLiteral()) {\n props[name] = value.node.value;\n } else {\n if (value.isJSXExpressionContainer()) {\n const expression = value.get('expression');\n\n if (expression.isStringLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isNumericLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isJSXElement() || expression.isJSXFragment()) {\n transformJSX(expression);\n props[name] = expression.node;\n } else if (expression.isExpression()) {\n if (/^key|ref|on.+$/.test(name)) {\n props[name] = expression.node;\n } else if (/^bind:.+/.test(name)) {\n 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 } else {\n throw new Error('Unsupported attribute type');\n }\n });\n\n return props;\n}\n","import { _toString } from './comm';\n\nexport const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object';\nexport function isPromise(val: any): boolean {\n return _toString.call(val) === '[object Promise]';\n}\n\nexport const isArray = Array.isArray;\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\nexport function isNull(val: any): val is null {\n return val === null;\n}\nexport function isSymbol(val: unknown): val is symbol {\n return typeof val === 'symbol';\n}\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","import { 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 Array.isArray(data) ? (data.flat() as T[]) : [data];\n}\nexport const hasChanged = (value, oldValue) =>\n value !== oldValue && (value === value || oldValue === oldValue);\nexport const noop = Function.prototype as () => void;\n\n/**\n * A function that checks if a string starts with a specific substring.\n * indexOf faster under normal circumstances\n * @see https://www.measurethat.net/Benchmarks/Show/12350/0/startswith-vs-test-vs-match-vs-indexof#latest_results_block\n\n * @param {string} str - The input string to check.\n * @param {string} searchString - The substring to check for at the beginning of the input string.\n * @return {boolean} Returns true if the input string starts with the specified substring, otherwise false.\n */\nexport function startsWith(str, searchString) {\n if (!isString(str)) {\n return false;\n }\n return str.indexOf(searchString) === 0;\n}\n\n/**\n * 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 Array.isArray(exclude)\n ? exclude.includes(key)\n : isFunction(exclude)\n ? exclude(key)\n : false;\n}\n","export const kebabCase = (string: string): string => {\n return string.replaceAll(/[A-Z]+/g, (match, offset) => {\n return `${offset > 0 ? '-' : ''}${match.toLocaleLowerCase()}`;\n });\n};\n\nexport const camelCase = (str: string): string => {\n const s = str.replaceAll(/[\\s_-]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));\n return s[0].toLowerCase() + s.slice(1);\n};\n/**\n * Capitalizes the first letter of a string.\n *\n * @param {string} inputString - The input string to capitalize the first letter.\n * @return {string} The string with the first letter capitalized.\n */\nexport const capitalizeFirstLetter = (inputString: string): string => {\n return inputString.charAt(0).toUpperCase() + inputString.slice(1);\n};\n","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 renderTemplate: path.scope.generateUidIdentifier('renderTemplate$'),\n template: path.scope.generateUidIdentifier('template$'),\n\n useSignal: path.scope.generateUidIdentifier('signal$'),\n useComputed: path.scope.generateUidIdentifier('computed$'),\n useReactive: path.scope.generateUidIdentifier('reactive$'),\n\n tmplDeclaration: t.variableDeclaration('const', []),\n opts: state.opts,\n } as State;\n },\n exit(path: NodePath<t.Program>) {\n const state: State = path.state;\n if (state.tmplDeclaration.declarations.length > 0) {\n const index = path.node.body.findIndex(\n node => !t.isImportDeclaration(node) && !t.isExportDeclaration(node),\n );\n path.node.body.splice(index, 0, state.tmplDeclaration);\n }\n if (imports.size > 0) {\n path.node.body.unshift(createImport(state, 'essor'));\n }\n },\n};\nfunction createImport(state: State, from: string) {\n const ImportSpecifier: t.ImportSpecifier[] = [];\n imports.forEach(name => {\n const local = t.identifier(state[name].name);\n const imported = t.identifier(name);\n ImportSpecifier.push(t.importSpecifier(local, imported));\n });\n\n const importSource = t.stringLiteral(from);\n return t.importDeclaration(ImportSpecifier, importSource);\n}\n","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 = path.node.init;\n\n const variableName = (path.node.id as Identifier).name;\n\n if (t.isObjectPattern(path.node.id) || t.isArrayPattern(path.node.id)) {\n return;\n }\n\n if (!isSymbolStart(path, variableName)) {\n return;\n }\n\n if (\n init &&\n (t.isFunctionExpression(init) || t.isArrowFunctionExpression(init)) &&\n (path.parent as t.VariableDeclaration).kind === 'const'\n ) {\n const newInit = t.callExpression(t.identifier(path.state.useComputed.name), init ? [init] : []);\n imports.add('useComputed');\n path.node.init = newInit;\n } else {\n const newInit = t.callExpression(t.identifier(path.state.useSignal.name), init ? [init] : []);\n imports.add('useSignal');\n path.node.init = newInit;\n }\n}\n\nexport function symbolIdentifier(path) {\n const parentPath = path.parentPath;\n\n if (\n !parentPath ||\n t.isVariableDeclarator(parentPath) ||\n t.isImportSpecifier(parentPath) ||\n t.isObjectProperty(parentPath) ||\n t.isArrayPattern(parentPath) ||\n t.isObjectPattern(parentPath)\n ) {\n return;\n }\n\n const { node } = path;\n\n if (isSymbolStart(path, node.name)) {\n // check is has .value\n let currentPath = path;\n while (currentPath.parentPath && !currentPath.parentPath.isProgram()) {\n if (\n currentPath.parentPath.isMemberExpression() &&\n currentPath.parentPath.node.property.name === 'value'\n ) {\n return;\n }\n currentPath = currentPath.parentPath;\n }\n\n // add with .value\n const newNode = t.memberExpression(t.identifier(node.name), t.identifier('value'));\n\n path.replaceWith(newNode);\n }\n}\n\nexport function symbolObjectPattern(path) {\n path.node.properties.forEach(property => {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n isSymbolStart(path, property.key.name)\n ) {\n const newKey = t.identifier(property.key.name);\n property.key = newKey;\n }\n });\n}\n\nexport function symbolArrayPattern(path) {\n path.node.elements.forEach(element => {\n if (t.isIdentifier(element) && element.name.startsWith('$')) {\n const newElement = t.identifier(element.name);\n element.name = newElement.name;\n } else if (t.isObjectPattern(element)) {\n element.properties.forEach(property => {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n isSymbolStart(path, property.key.name)\n ) {\n const newKey = t.identifier(property.key.name);\n property.key = newKey;\n }\n });\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 const imports = path.node.specifiers;\n imports.forEach(specifier => {\n const variableName = specifier.local.name;\n\n if (startsWith(variableName, '$') && !isVariableUsedAsObject(path, variableName)) {\n path.scope.rename(variableName, `${variableName}.value`);\n specifier.local.name = `${variableName}`;\n }\n });\n}\nfunction isVariableUsedAsObject(path, variableName) {\n const binding = path.scope.getBinding(variableName);\n let isUsedObject = false;\n\n if (!binding || !binding.referencePaths) {\n return isUsedObject;\n }\n\n for (const referencePath of binding.referencePaths) {\n if (t.isMemberExpression(referencePath.parent)) {\n const memberExprParent = referencePath.parent;\n\n if (t.isIdentifier(memberExprParent.object, { name: variableName })) {\n const newMemberExpr = t.memberExpression(\n t.memberExpression(memberExprParent.object, t.identifier('value')),\n memberExprParent.property,\n );\n referencePath.parentPath.replaceWith(newMemberExpr);\n isUsedObject = true;\n }\n }\n }\n\n return isUsedObject;\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\n const firstParam = path.node.params[0];\n\n if (!firstParam || !t.isObjectPattern(firstParam)) {\n return;\n }\n\n const returnStatement = path\n .get('body')\n .get('body')\n .find(statement => statement.isReturnStatement());\n\n if (!returnStatement) {\n return;\n }\n\n const returnValue = (returnStatement.node as any)?.argument;\n if (!t.isJSXElement(returnValue)) {\n return;\n }\n\n function replaceProperties(properties: (ObjectProperty | RestElement)[], parentPath: string) {\n properties.forEach(property => {\n if (t.isObjectProperty(property)) {\n const keyName = (property.key as Identifier).name;\n\n if (t.isIdentifier(property.value)) {\n const propertyName = property.value.name;\n const newName = `${parentPath}${keyName}`;\n path.scope.rename(propertyName, newName);\n } else if (t.isObjectPattern(property.value)) {\n replaceProperties(property.value.properties, `${parentPath}${keyName}.`);\n }\n }\n });\n }\n\n const properties = firstParam.properties;\n replaceProperties(\n properties.filter(property => !t.isRestElement(property)),\n '__props.',\n );\n const notRestProperties = properties.filter(property => !t.isRestElement(property));\n const notRestNames = notRestProperties.map(\n property => ((property as ObjectProperty).key as Identifier).name,\n );\n if (__DEV__ && notRestNames.some(name => startsWith(name, '$'))) {\n console.warn('props name can not start with $');\n return;\n }\n\n const restElement = properties.find(property => t.isRestElement(property)) as\n | RestElement\n | undefined;\n path.node.params[0] = t.identifier('__props');\n\n if (restElement) {\n const restName = (restElement.argument as any).name;\n if (notRestProperties.length === 0) {\n path.node.params[0] = t.identifier(restName);\n } else {\n const restVariableDeclaration = t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(restName),\n t.callExpression(state.useReactive, [\n t.identifier('__props'),\n t.arrayExpression(notRestNames.map(name => t.stringLiteral(name))),\n ]),\n ),\n ]);\n imports.add('useReactive');\n\n (path.node.body as any).body.unshift(restVariableDeclaration);\n }\n }\n}\n","import { transformJSX } from './jsx';\nimport { transformProgram } from './program';\nimport {\n replaceSymbol,\n symbolArrayPattern,\n symbolIdentifier,\n symbolObjectPattern,\n} from './signal/symbol';\nimport { replaceImportDeclaration } from './signal/import';\nimport { replaceProps } from './signal/props';\nimport type { PluginObj } from '@babel/core';\nexport { Options, State } from './types';\nexport default function (): PluginObj {\n return {\n name: 'babel-plugin-essor',\n manipulateOptions({ filename }, parserOpts) {\n if (filename.endsWith('.ts') || filename.endsWith('.tsx')) {\n parserOpts.plugins.push('typescript');\n }\n parserOpts.plugins.push('jsx');\n },\n visitor: {\n Program: transformProgram,\n\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","t","value","t","t","t","imports","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 } from '@estjs/shared';\nimport { imports } from '../program';\nimport {\n type JSXChild,\n type JSXElement,\n getAttrName,\n getTagName,\n hasSiblingElement,\n isComponent,\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\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n\n let tmpl: t.Identifier;\n if (path.isJSXElement() && isComponent(getTagName(path.node))) {\n tmpl = t.identifier(getTagName(path.node));\n } else {\n tmpl = path.scope.generateUidIdentifier('_tmpl$');\n\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 const declarator = t.variableDeclarator(tmpl, template);\n state.tmplDeclaration.declarations.push(declarator);\n if (!isSsg) {\n imports.add('template');\n }\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 if (isSsg) {\n imports.add('ssg');\n return t.callExpression(state.ssg, args);\n } else {\n imports.add('h');\n return t.callExpression(state.h, args);\n }\n}\n\nfunction createProps(props) {\n const toAstNode = value => {\n if (Array.isArray(value)) {\n return t.arrayExpression(value.map(toAstNode));\n }\n if (value && typeof value === 'object' && !t.isNode(value)) {\n return createProps(value);\n }\n\n switch (typeof value) {\n case 'string':\n return t.stringLiteral(value);\n case 'number':\n return t.numericLiteral(value);\n case 'boolean':\n return t.booleanLiteral(value);\n case 'undefined':\n return t.tsUndefinedKeyword();\n case undefined:\n return t.tsUndefinedKeyword();\n case null:\n return t.nullLiteral();\n default:\n return value;\n }\n };\n\n const result = Object.keys(props)\n .filter(prop => prop !== 'key')\n .map(prop => {\n const value = toAstNode(props[prop]);\n return prop === '_$spread$'\n ? t.spreadElement(value)\n : t.objectProperty(t.stringLiteral(prop), value);\n });\n\n return t.objectExpression(result);\n}\nfunction transformJSXElement(\n path: NodePath<JSXElement>,\n result: Result,\n isRoot: boolean = false,\n): void {\n if (path.isJSXElement()) {\n const tagName = getTagName(path.node);\n const tagIsComponent = isComponent(tagName);\n const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);\n const isSvg = svgTags.includes(tagName) && result.index === 1;\n const { props, hasExpression } = getAttrProps(path);\n if (tagIsComponent) {\n if (isRoot) {\n result.props = props;\n const children = getChildren(path) as any;\n if (children.length > 0) {\n const childrenGenerator =\n children.length === 1 ? children[0] : t.arrayExpression(children);\n result.props.children = childrenGenerator;\n }\n } else {\n transformJSX(path);\n replaceChild(path.node, result);\n }\n } else {\n if (isSvg) {\n result.template = isSsg ? ['<svg _svg_>'] : '<svg _svg_>';\n }\n\n addToTemplate(result, `<${tagName}`, true);\n handleAttributes(props, result);\n\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 = isSsg ? result.template.length : 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, String(expression.node.value));\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else if (t.isJSXEmptyExpression(expression.node)) {\n // it is empty expression\n // do nothing\n } else {\n throw new Error('Unsupported child type');\n }\n } else if (child.isJSXText()) {\n addToTemplate(result, String(child.node.value));\n } else {\n throw new Error('Unsupported child type');\n }\n}\n\nfunction getNodeText(path: NodePath<JSXChild>): string {\n if (path.isJSXText()) {\n return path.node.value;\n }\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n return String(expression.node.value);\n }\n }\n return '';\n}\n\nfunction handleAttributes(props: Record<string, any>, result: Result): void {\n let klass = '';\n let style = '';\n\n for (const prop in props) {\n let value = props[prop];\n\n if (prop === 'class' && typeof value === 'string') {\n klass += ` ${value}`;\n delete props[prop];\n continue;\n }\n\n if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\n delete props[prop];\n continue;\n }\n\n if (value === true) {\n addToTemplate(result, ` ${prop}`);\n delete props[prop];\n }\n if (value === false) {\n delete props[prop];\n }\n if (typeof value === 'string' || typeof value === 'number') {\n addToTemplate(result, ` ${prop}=\"${value}\"`);\n delete props[prop];\n }\n\n // if value is conditional expression\n if (t.isConditionalExpression(value)) {\n const { test, consequent, alternate } = value;\n value = t.arrowFunctionExpression([], t.conditionalExpression(test, consequent, alternate));\n props[prop] = value;\n }\n\n // if value is object expression and has conditional\n if (t.isObjectExpression(value)) {\n let hasConditional = false;\n value.properties.forEach(property => {\n if (t.isObjectProperty(property) && t.isConditionalExpression(property.value)) {\n hasConditional = true;\n }\n });\n if (hasConditional) {\n value = t.arrowFunctionExpression([], value);\n props[prop] = value;\n } else {\n // TODO: For the time being, only support style\n 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\n delete props[prop];\n }\n }\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 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(child.node.value));\n } else {\n throw new Error('Unsupported child type');\n }\n return child.node;\n });\n}\n\nexport function isValidChild(path: NodePath<JSXChild>): boolean {\n const regex = /^\\s*$/;\n if (path.isStringLiteral() || path.isJSXText()) {\n return !regex.test(path.node.value);\n }\n return Object.keys(path.node).length > 0;\n}\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\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): boolean {\n return _toString.call(val) === '[object Promise]';\n}\n\nexport const isArray = Array.isArray;\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\nexport function isNull(val: any): val is null {\n return val === null;\n}\nexport function isSymbol(val: unknown): val is symbol {\n return typeof val === 'symbol';\n}\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","import { 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 Array.isArray(data) ? (data.flat() as T[]) : [data];\n}\nexport const hasChanged = (value, oldValue) =>\n value !== oldValue && (value === value || oldValue === oldValue);\nexport const noop = Function.prototype as () => void;\n\n/**\n * A function that checks if a string starts with a specific substring.\n * indexOf faster under normal circumstances\n * @see https://www.measurethat.net/Benchmarks/Show/12350/0/startswith-vs-test-vs-match-vs-indexof#latest_results_block\n\n * @param {string} str - The input string to check.\n * @param {string} searchString - The substring to check for at the beginning of the input string.\n * @return {boolean} Returns true if the input string starts with the specified substring, otherwise false.\n */\nexport function startsWith(str, searchString) {\n if (!isString(str)) {\n return false;\n }\n return str.indexOf(searchString) === 0;\n}\n\n/**\n * 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 Array.isArray(exclude)\n ? exclude.includes(key)\n : isFunction(exclude)\n ? exclude(key)\n : 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 = path.node.init;\n\n const variableName = (path.node.id as Identifier).name;\n\n if (t.isObjectPattern(path.node.id) || t.isArrayPattern(path.node.id)) {\n return;\n }\n\n if (!isSymbolStart(path, variableName)) {\n return;\n }\n\n if (\n init &&\n (t.isFunctionExpression(init) || t.isArrowFunctionExpression(init)) &&\n (path.parent as t.VariableDeclaration).kind === 'const'\n ) {\n const newInit = t.callExpression(t.identifier(path.state.useComputed.name), init ? [init] : []);\n imports.add('useComputed');\n path.node.init = newInit;\n } else {\n const newInit = t.callExpression(t.identifier(path.state.useSignal.name), init ? [init] : []);\n imports.add('useSignal');\n path.node.init = newInit;\n }\n}\n\nexport function symbolIdentifier(path) {\n const parentPath = path.parentPath;\n\n if (\n !parentPath ||\n t.isVariableDeclarator(parentPath) ||\n t.isImportSpecifier(parentPath) ||\n t.isObjectProperty(parentPath) ||\n t.isArrayPattern(parentPath) ||\n t.isObjectPattern(parentPath)\n ) {\n return;\n }\n\n const { node } = path;\n\n if (isSymbolStart(path, node.name)) {\n // check is has .value\n let currentPath = path;\n while (currentPath.parentPath && !currentPath.parentPath.isProgram()) {\n if (\n currentPath.parentPath.isMemberExpression() &&\n currentPath.parentPath.node.property.name === 'value'\n ) {\n return;\n }\n currentPath = currentPath.parentPath;\n }\n\n // add with .value\n const newNode = t.memberExpression(t.identifier(node.name), t.identifier('value'));\n\n path.replaceWith(newNode);\n }\n}\n\nexport function symbolObjectPattern(path) {\n path.node.properties.forEach(property => {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n isSymbolStart(path, property.key.name)\n ) {\n const newKey = t.identifier(property.key.name);\n property.key = newKey;\n }\n });\n}\n\nexport function symbolArrayPattern(path) {\n path.node.elements.forEach(element => {\n if (t.isIdentifier(element) && element.name.startsWith('$')) {\n const newElement = t.identifier(element.name);\n element.name = newElement.name;\n } else if (t.isObjectPattern(element)) {\n element.properties.forEach(property => {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n isSymbolStart(path, property.key.name)\n ) {\n const newKey = t.identifier(property.key.name);\n property.key = newKey;\n }\n });\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 const imports = path.node.specifiers;\n imports.forEach(specifier => {\n const variableName = specifier.local.name;\n\n if (startsWith(variableName, '$') && !isVariableUsedAsObject(path, variableName)) {\n path.scope.rename(variableName, `${variableName}.value`);\n specifier.local.name = `${variableName}`;\n }\n });\n}\nfunction isVariableUsedAsObject(path, variableName) {\n const binding = path.scope.getBinding(variableName);\n let isUsedObject = false;\n\n if (!binding || !binding.referencePaths) {\n return isUsedObject;\n }\n\n for (const referencePath of binding.referencePaths) {\n if (t.isMemberExpression(referencePath.parent)) {\n const memberExprParent = referencePath.parent;\n\n if (t.isIdentifier(memberExprParent.object, { name: variableName })) {\n const newMemberExpr = t.memberExpression(\n t.memberExpression(memberExprParent.object, t.identifier('value')),\n memberExprParent.property,\n );\n referencePath.parentPath.replaceWith(newMemberExpr);\n isUsedObject = true;\n }\n }\n }\n\n return isUsedObject;\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\n const firstParam = path.node.params[0];\n\n if (!firstParam || !t.isObjectPattern(firstParam)) {\n return;\n }\n\n const returnStatement = path\n .get('body')\n .get('body')\n .find(statement => statement.isReturnStatement());\n\n if (!returnStatement) {\n return;\n }\n\n const returnValue = (returnStatement.node as any)?.argument;\n if (!t.isJSXElement(returnValue)) {\n return;\n }\n\n function replaceProperties(properties: (ObjectProperty | RestElement)[], parentPath: string) {\n properties.forEach(property => {\n if (t.isObjectProperty(property)) {\n const keyName = (property.key as Identifier).name;\n\n if (t.isIdentifier(property.value)) {\n const propertyName = property.value.name;\n const newName = `${parentPath}${keyName}`;\n path.scope.rename(propertyName, newName);\n } else if (t.isObjectPattern(property.value)) {\n replaceProperties(property.value.properties, `${parentPath}${keyName}.`);\n }\n }\n });\n }\n\n const properties = firstParam.properties;\n replaceProperties(\n properties.filter(property => !t.isRestElement(property)),\n '__props.',\n );\n const notRestProperties = properties.filter(property => !t.isRestElement(property));\n const notRestNames = notRestProperties.map(\n property => ((property as ObjectProperty).key as Identifier).name,\n );\n if (__DEV__ && notRestNames.some(name => startsWith(name, '$'))) {\n console.warn('props name can not start with $');\n return;\n }\n\n const restElement = properties.find(property => t.isRestElement(property)) as\n | RestElement\n | undefined;\n path.node.params[0] = t.identifier('__props');\n\n if (restElement) {\n const restName = (restElement.argument as any).name;\n if (notRestProperties.length === 0) {\n path.node.params[0] = t.identifier(restName);\n } else {\n const restVariableDeclaration = t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(restName),\n t.callExpression(state.useReactive, [\n t.identifier('__props'),\n t.arrayExpression(notRestNames.map(name => t.stringLiteral(name))),\n ]),\n ),\n ]);\n imports.add('useReactive');\n\n (path.node.body as any).body.unshift(restVariableDeclaration);\n }\n }\n}\n","import { transformJSX } from './jsx';\nimport { transformProgram } from './program';\nimport {\n replaceSymbol,\n symbolArrayPattern,\n symbolIdentifier,\n symbolObjectPattern,\n} from './signal/symbol';\nimport { replaceImportDeclaration } from './signal/import';\nimport { replaceProps } from './signal/props';\nimport type { PluginObj } from '@babel/core';\nexport { Options, State } from './types';\nexport default function (): PluginObj {\n return {\n name: 'babel-plugin-essor',\n manipulateOptions({ filename }, parserOpts) {\n if (filename.endsWith('.ts') || filename.endsWith('.tsx')) {\n parserOpts.plugins.push('typescript');\n }\n parserOpts.plugins.push('jsx');\n },\n visitor: {\n Program: transformProgram,\n\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","t","value","t","t","t","imports","t","t","t","properties"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "babel-plugin-essor",
3
- "version": "0.0.10",
3
+ "version": "0.0.12-beta.1",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "keywords": [],
@@ -34,11 +34,11 @@
34
34
  "dependencies": {
35
35
  "@babel/core": "^7.25.2",
36
36
  "@babel/types": "^7.25.6",
37
- "@estjs/shared": "0.0.10"
37
+ "@estjs/shared": "0.0.12-beta.1"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/babel__core": "^7.20.5",
41
- "typescript": "^5.5.4"
41
+ "typescript": "^5.6.2"
42
42
  },
43
43
  "scripts": {
44
44
  "build": "tsup",