babel-plugin-essor 0.0.14-beta.2 → 0.0.14-beta.21

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
@@ -53,9 +53,26 @@ function startsWith(str, searchString) {
53
53
  }
54
54
  return str.indexOf(searchString) === 0;
55
55
  }
56
- var capitalizeFirstLetter = (inputString) => {
57
- return inputString.charAt(0).toUpperCase() + inputString.slice(1);
56
+ var cacheStringFunction = (fn) => {
57
+ const cache = /* @__PURE__ */ Object.create(null);
58
+ return (str) => {
59
+ const hit = cache[str];
60
+ return hit || (cache[str] = fn(str));
61
+ };
58
62
  };
63
+ var hyphenateRE = /\B([A-Z])/g;
64
+ var kebabCase = cacheStringFunction(
65
+ (str) => str.replaceAll(hyphenateRE, "-$1").toLowerCase()
66
+ );
67
+ var camelizeRE = /-(\w)/g;
68
+ var camelCase = cacheStringFunction((str) => {
69
+ return str.replaceAll(camelizeRE, (_, c) => c ? c.toUpperCase() : "");
70
+ });
71
+ var capitalize = cacheStringFunction(
72
+ (str) => {
73
+ return str.charAt(0).toUpperCase() + str.slice(1);
74
+ }
75
+ );
59
76
 
60
77
  // src/program.ts
61
78
  var import_core = require("@babel/core");
@@ -73,9 +90,10 @@ var transformProgram = {
73
90
  h: path.scope.generateUidIdentifier("h$"),
74
91
  template: path.scope.generateUidIdentifier("template$"),
75
92
  ssg: path.scope.generateUidIdentifier("ssg$"),
76
- useSignal: path.scope.generateUidIdentifier("signal$"),
77
- useComputed: path.scope.generateUidIdentifier("computed$"),
78
- useReactive: path.scope.generateUidIdentifier("reactive$"),
93
+ Fragment: path.scope.generateUidIdentifier("fragment$"),
94
+ signal: path.scope.generateUidIdentifier("signal$"),
95
+ computed: path.scope.generateUidIdentifier("computed$"),
96
+ reactive: path.scope.generateUidIdentifier("reactive$"),
79
97
  tmplDeclaration: import_core.types.variableDeclaration("const", []),
80
98
  opts: state.opts
81
99
  };
@@ -236,53 +254,63 @@ function replaceSpace(node) {
236
254
  return node.value.replaceAll(/\s+/g, " ").trim();
237
255
  }
238
256
  function createEssorNode(path, result) {
257
+ var _a, _b;
239
258
  const state = path.state;
259
+ const isJSXFragment = path.isJSXFragment();
240
260
  const isComponent2 = path.isJSXElement() && isComponent(getTagName(path.node));
241
261
  const tmpl = isComponent2 ? import_core3.types.identifier(getTagName(path.node)) : path.scope.generateUidIdentifier("_tmpl$");
262
+ let templateNode;
242
263
  if (!isComponent2) {
243
- const template = isSSG ? import_core3.types.arrayExpression(result.template.map(import_core3.types.stringLiteral)) : import_core3.types.callExpression(state.template, [import_core3.types.stringLiteral(result.template)]);
244
- state.tmplDeclaration.declarations.push(import_core3.types.variableDeclarator(tmpl, template));
264
+ templateNode = isSSG ? import_core3.types.arrayExpression(result.template.map(import_core3.types.stringLiteral)) : import_core3.types.callExpression(state.template, [import_core3.types.stringLiteral(result.template)]);
265
+ state.tmplDeclaration.declarations.push(import_core3.types.variableDeclarator(tmpl, templateNode));
245
266
  if (!isSSG) {
246
267
  imports.add("template");
247
268
  }
248
269
  }
249
- const key = result.props.key;
250
- delete result.props.key;
251
- const args = [tmpl, createProps(result.props)];
270
+ const key = (_b = result.props.key) != null ? _b : (_a = result.props[0]) == null ? void 0 : _a.key;
271
+ const propsArg = createProps(result.props);
272
+ const args = isComponent2 && getTagName(path.node) === "Fragment" ? [import_core3.types.stringLiteral(""), propsArg] : [tmpl, propsArg];
252
273
  if (key) {
253
274
  args.push(key);
254
275
  }
255
- const fnName = isSSG ? "ssg" : "h";
276
+ const fnName = isSSG ? "ssg" : isJSXFragment || isComponent2 && getTagName(path.node) === "Fragment" ? "Fragment" : "h";
256
277
  imports.add(fnName);
257
278
  return import_core3.types.callExpression(state[fnName], args);
258
279
  }
259
280
  function createProps(props) {
260
- const toAstNode = (value) => {
261
- if (isArray(value)) {
262
- return import_core3.types.arrayExpression(value.map(toAstNode));
281
+ const result = [];
282
+ for (const prop in props) {
283
+ let value = props[prop];
284
+ if (prop === "key") {
285
+ continue;
263
286
  }
264
- if (value && typeof value === "object" && !import_core3.types.isNode(value)) {
265
- return createProps(value);
287
+ if (Array.isArray(value)) {
288
+ value = import_core3.types.arrayExpression(value);
266
289
  }
267
- switch (typeof value) {
268
- case "string":
269
- return import_core3.types.stringLiteral(value);
270
- case "number":
271
- return import_core3.types.numericLiteral(value);
272
- case "boolean":
273
- return import_core3.types.booleanLiteral(value);
274
- case "undefined":
275
- case void 0:
276
- return import_core3.types.tsUndefinedKeyword();
277
- case null:
278
- return import_core3.types.nullLiteral();
279
- default:
280
- return value;
290
+ if (typeof value === "object" && value !== null && !import_core3.types.isNode(value)) {
291
+ value = createProps(value);
281
292
  }
282
- };
283
- const result = Object.entries(props).map(
284
- ([prop, value]) => prop === "_$spread$" ? import_core3.types.spreadElement(toAstNode(value)) : import_core3.types.objectProperty(import_core3.types.stringLiteral(prop), toAstNode(value))
285
- );
293
+ if (typeof value === "string") {
294
+ value = import_core3.types.stringLiteral(value);
295
+ }
296
+ if (typeof value === "number") {
297
+ value = import_core3.types.numericLiteral(value);
298
+ }
299
+ if (typeof value === "boolean") {
300
+ value = import_core3.types.booleanLiteral(value);
301
+ }
302
+ if (value === void 0) {
303
+ value = import_core3.types.tsUndefinedKeyword();
304
+ }
305
+ if (value === null) {
306
+ value = import_core3.types.nullLiteral();
307
+ }
308
+ if (prop === "_$spread$") {
309
+ result.push(import_core3.types.spreadElement(value));
310
+ } else {
311
+ result.push(import_core3.types.objectProperty(import_core3.types.stringLiteral(prop), value));
312
+ }
313
+ }
286
314
  return import_core3.types.objectExpression(result);
287
315
  }
288
316
  function transformJSXElement(path, result, isRoot = false) {
@@ -292,10 +320,6 @@ function transformJSXElement(path, result, isRoot = false) {
292
320
  const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);
293
321
  const isSvg = svgTags.includes(tagName) && result.index === 1;
294
322
  const { props, hasExpression } = getAttrProps(path);
295
- if (props.key) {
296
- result.props.key = props.key;
297
- delete props.key;
298
- }
299
323
  if (tagIsComponent) {
300
324
  handleComponentElement(path, result, isRoot, props);
301
325
  } else {
@@ -312,7 +336,11 @@ function handleComponentElement(path, result, isRoot, props) {
312
336
  const children = getChildren(path);
313
337
  if (children.length > 0) {
314
338
  const childrenGenerator = children.length === 1 ? children[0] : import_core3.types.arrayExpression(children);
315
- result.props.children = childrenGenerator;
339
+ if (import_core3.types.isConditionalExpression(childrenGenerator)) {
340
+ result.props.children = import_core3.types.arrowFunctionExpression([], childrenGenerator);
341
+ } else {
342
+ result.props.children = childrenGenerator;
343
+ }
316
344
  }
317
345
  } else {
318
346
  transformJSX(path);
@@ -383,6 +411,9 @@ function getNodeText(path) {
383
411
  }
384
412
  return "";
385
413
  }
414
+ function isStyleClassName(name) {
415
+ return name === "class" || name === "style";
416
+ }
386
417
  function handleAttributes(props, result) {
387
418
  let klass = "";
388
419
  let style = "";
@@ -404,7 +435,15 @@ function handleAttributes(props, result) {
404
435
  } else if (import_core3.types.isConditionalExpression(value)) {
405
436
  props[prop] = import_core3.types.arrowFunctionExpression([], value);
406
437
  } else if (import_core3.types.isObjectExpression(value)) {
407
- handleObjectExpression(prop, value, props, style);
438
+ const val = handleObjectExpression(prop, value, props, isStyleClassName(prop));
439
+ if (val) {
440
+ if (prop === "class") {
441
+ klass += ` ${val}`;
442
+ }
443
+ if (prop === "style") {
444
+ style += `${val}${val.at(-1) === ";" ? "" : ";"}`;
445
+ }
446
+ }
408
447
  }
409
448
  }
410
449
  if (Object.keys(props).length > 0) {
@@ -417,20 +456,22 @@ function handleAttributes(props, result) {
417
456
  addToTemplate(result, ` style="${style.trim()}"`);
418
457
  }
419
458
  }
420
- function handleObjectExpression(prop, value, props, style) {
459
+ function handleObjectExpression(prop, value, props, isCt = false) {
460
+ let ct = "";
421
461
  const hasConditional = value.properties.some(
422
462
  (property) => import_core3.types.isObjectProperty(property) && import_core3.types.isConditionalExpression(property.value)
423
463
  );
424
464
  if (hasConditional) {
425
465
  props[prop] = import_core3.types.arrowFunctionExpression([], value);
426
- } else if (prop === "style") {
466
+ } else if (isCt) {
427
467
  value.properties.forEach((property) => {
428
468
  if (import_core3.types.isObjectProperty(property)) {
429
- style += `${property.key.name}:${property.value.value};`;
469
+ ct += `${property.key.name || property.key.value}:${property.value.value};`;
430
470
  }
431
471
  });
432
472
  delete props[prop];
433
473
  }
474
+ return ct;
434
475
  }
435
476
  function replaceChild(node, result) {
436
477
  var _a, _b, _c, _d, _e;
@@ -498,7 +539,7 @@ function getAttrProps(path) {
498
539
  const value2 = path.scope.generateUidIdentifier("value");
499
540
  const bindName = name.slice(5).toLocaleLowerCase();
500
541
  props[bindName] = expression.node;
501
- props[`update${capitalizeFirstLetter(bindName)}`] = import_core3.types.arrowFunctionExpression(
542
+ props[`update${capitalize(bindName)}`] = import_core3.types.arrowFunctionExpression(
502
543
  [value2],
503
544
  import_core3.types.assignmentExpression("=", expression.node, value2)
504
545
  );
@@ -535,7 +576,7 @@ function replaceSymbol(path) {
535
576
  const variableName = id.name;
536
577
  if (import_core4.types.isObjectPattern(id) || import_core4.types.isArrayPattern(id) || !isSymbolStart(path, variableName)) return;
537
578
  const isComputed = init && (import_core4.types.isFunctionExpression(init) || import_core4.types.isArrowFunctionExpression(init)) && path.parent.kind === "const";
538
- const hookName = isComputed ? "useComputed" : "useSignal";
579
+ const hookName = isComputed ? "computed" : "signal";
539
580
  const newInit = import_core4.types.callExpression(import_core4.types.identifier(path.state[hookName].name), init ? [init] : []);
540
581
  imports.add(hookName);
541
582
  path.node.init = newInit;
@@ -619,7 +660,9 @@ function replaceProps(path) {
619
660
  });
620
661
  };
621
662
  const properties = firstParam.properties;
622
- const notRestProperties = properties.filter((property) => !import_core6.types.isRestElement(property));
663
+ const notRestProperties = properties.filter(
664
+ (property) => !import_core6.types.isRestElement(property)
665
+ );
623
666
  replaceProperties(notRestProperties, "__props.");
624
667
  const notRestNames = notRestProperties.map((property) => property.key.name);
625
668
  if (notRestNames.some((name) => startsWith(name, "$"))) {
@@ -637,7 +680,7 @@ function handleRestElement(path, state, properties, notRestNames) {
637
680
  path.node.params[0] = import_core6.types.identifier(restName);
638
681
  } else {
639
682
  const restVariableDeclaration = createRestVariableDeclaration(state, restName, notRestNames);
640
- imports.add("useReactive");
683
+ imports.add("reactive");
641
684
  path.node.body.body.unshift(restVariableDeclaration);
642
685
  }
643
686
  }
@@ -646,7 +689,7 @@ function createRestVariableDeclaration(state, restName, notRestNames) {
646
689
  return import_core6.types.variableDeclaration("const", [
647
690
  import_core6.types.variableDeclarator(
648
691
  import_core6.types.identifier(restName),
649
- import_core6.types.callExpression(state.useReactive, [
692
+ import_core6.types.callExpression(state.reactive, [
650
693
  import_core6.types.identifier("__props"),
651
694
  import_core6.types.arrayExpression(notRestNames.map((name) => import_core6.types.stringLiteral(name)))
652
695
  ])
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/jsx/index.ts","../../shared/src/is.ts","../../shared/src/comm.ts","../../shared/src/name.ts","../../shared/src/console.ts","../src/program.ts","../src/shared.ts","../src/jsx/constants.ts","../src/signal/symbol.ts","../src/signal/import.ts","../src/signal/props.ts"],"sourcesContent":["import { transformJSX } from './jsx';\nimport { transformProgram } from './program';\nimport {\n replaceSymbol,\n symbolArrayPattern,\n symbolIdentifier,\n symbolObjectPattern,\n} from './signal/symbol';\nimport { replaceImportDeclaration } from './signal/import';\nimport { replaceProps } from './signal/props';\nimport type { PluginObj } from '@babel/core';\nexport { Options, State } from './types';\nexport default function (): PluginObj {\n return {\n name: 'babel-plugin-essor',\n manipulateOptions({ filename }, parserOpts) {\n if (filename.endsWith('.ts') || filename.endsWith('.tsx')) {\n parserOpts.plugins.push('typescript');\n }\n parserOpts.plugins.push('jsx');\n },\n visitor: {\n Program: transformProgram,\n\n FunctionDeclaration: replaceProps,\n ArrowFunctionExpression: replaceProps,\n VariableDeclarator: replaceSymbol,\n ImportDeclaration: replaceImportDeclaration,\n Identifier: symbolIdentifier,\n ObjectPattern: symbolObjectPattern,\n ArrayPattern: symbolArrayPattern,\n\n JSXElement: transformJSX,\n JSXFragment: transformJSX,\n },\n };\n}\n","import { types as t } from '@babel/core';\nimport { capitalizeFirstLetter, isArray } from '@estjs/shared';\nimport { imports } from '../program';\nimport {\n type JSXChild,\n type JSXElement,\n getAttrName,\n getTagName,\n hasSiblingElement,\n isComponent as isComponentName,\n isTextChild,\n setNodeText,\n} from '../shared';\nimport { selfClosingTags, svgTags } from './constants';\nimport type { Identifier, OptionalMemberExpression, StringLiteral } from '@babel/types';\nimport type { State } from '../types';\nimport type { NodePath } from '@babel/core';\n\nexport interface Result {\n index: number;\n isLastChild: boolean;\n parentIndex: number;\n props: Record<string, any>;\n template: string | string[];\n}\n\nlet isSSG = false;\n\nfunction addToTemplate(result: Result, content: string, join = false): void {\n if (isSSG) {\n if (join && result.template.length > 0) {\n (result.template as string[])[result.template.length - 1] += content;\n } else {\n (result.template as string[]).push(content);\n }\n } else {\n result.template += content;\n }\n}\n\nexport function transformJSX(path: NodePath<JSXElement>): void {\n const state: State = path.state;\n isSSG = state.opts.ssg;\n\n const result: Result = {\n index: 1,\n isLastChild: false,\n parentIndex: 0,\n props: {},\n template: isSSG ? [] : '',\n };\n transformJSXElement(path, result, true);\n\n path.replaceWith(createEssorNode(path, result));\n}\n// Trim and replace multiple spaces/newlines with a single space\nfunction replaceSpace(node: t.JSXText): string {\n return node.value.replaceAll(/\\s+/g, ' ').trim();\n}\n\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n const isComponent = path.isJSXElement() && isComponentName(getTagName(path.node));\n\n const tmpl = isComponent\n ? t.identifier(getTagName(path.node))\n : path.scope.generateUidIdentifier('_tmpl$');\n\n if (!isComponent) {\n const template = isSSG\n ? t.arrayExpression((result.template as string[]).map(t.stringLiteral))\n : t.callExpression(state.template, [t.stringLiteral(result.template as string)]);\n state.tmplDeclaration.declarations.push(t.variableDeclarator(tmpl, template));\n if (!isSSG) {\n imports.add('template');\n }\n }\n\n const key = result.props.key;\n delete result.props.key;\n\n const args = [tmpl, createProps(result.props)];\n if (key) {\n args.push(key);\n }\n\n const fnName = isSSG ? 'ssg' : 'h';\n imports.add(fnName);\n return t.callExpression(state[fnName], args);\n}\n\nfunction createProps(props: Record<string, any>): t.ObjectExpression {\n const toAstNode = value => {\n if (isArray(value)) {\n return t.arrayExpression(value.map(toAstNode));\n }\n if (value && typeof value === 'object' && !t.isNode(value)) {\n return createProps(value);\n }\n\n switch (typeof value) {\n case 'string':\n return t.stringLiteral(value);\n case 'number':\n return t.numericLiteral(value);\n case 'boolean':\n return t.booleanLiteral(value);\n case 'undefined':\n case undefined:\n return t.tsUndefinedKeyword();\n case null:\n return t.nullLiteral();\n default:\n return value;\n }\n };\n\n const result = Object.entries(props).map(([prop, value]) =>\n prop === '_$spread$'\n ? t.spreadElement(toAstNode(value))\n : t.objectProperty(t.stringLiteral(prop), toAstNode(value)),\n );\n\n return t.objectExpression(result);\n}\n\nfunction transformJSXElement(\n path: NodePath<JSXElement>,\n result: Result,\n isRoot: boolean = false,\n): void {\n if (path.isJSXElement()) {\n const tagName = getTagName(path.node);\n const tagIsComponent = isComponentName(tagName);\n const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);\n const isSvg = svgTags.includes(tagName) && result.index === 1;\n const { props, hasExpression } = getAttrProps(path);\n\n // key\n if (props.key) {\n result.props.key = props.key;\n delete props.key;\n }\n\n if (tagIsComponent) {\n handleComponentElement(path, result, isRoot, props);\n } else {\n handleHTMLElement(path, result, tagName, isSelfClose, isSvg, props, hasExpression);\n }\n } else {\n result.index--;\n transformChildren(path, result);\n }\n}\n\nfunction handleComponentElement(\n path: NodePath<JSXElement>,\n result: Result,\n isRoot: boolean,\n props: Record<string, any>,\n): void {\n if (isRoot) {\n result.props = props;\n const children = getChildren(path);\n if (children.length > 0) {\n const childrenGenerator =\n children.length === 1 ? children[0] : t.arrayExpression(children as JSXElement[]);\n result.props.children = childrenGenerator;\n }\n } else {\n transformJSX(path);\n replaceChild(path.node, result);\n }\n}\n\nfunction handleHTMLElement(\n path: NodePath<JSXElement>,\n result: Result,\n tagName: string,\n isSelfClose: boolean,\n isSvg: boolean,\n props: Record<string, any>,\n hasExpression: boolean,\n): void {\n if (isSvg) {\n result.template = isSSG ? [`<svg _svg_ data-hk=\"${result.index}\">`] : `<svg _svg_ >`;\n }\n\n addToTemplate(result, `<${tagName}${isSSG ? ` data-hk=\"${result.index}\"` : ''}`, true);\n handleAttributes(props, result);\n addToTemplate(result, isSelfClose ? '/>' : '>', !hasExpression);\n\n if (!isSelfClose) {\n transformChildren(path, result);\n if (hasSiblingElement(path) || isSSG) {\n addToTemplate(result, `</${tagName}>`);\n }\n }\n}\n\nfunction transformChildren(path: NodePath<JSXElement>, result: Result): void {\n const parentIndex = result.index;\n path\n .get('children')\n .reduce((pre, cur) => {\n if (isValidChild(cur)) {\n const lastChild = pre.at(-1);\n if (lastChild && isTextChild(cur) && isTextChild(lastChild)) {\n setNodeText(lastChild, getNodeText(lastChild) + getNodeText(cur));\n } else {\n pre.push(cur);\n }\n }\n return pre;\n }, [] as NodePath<JSXChild>[])\n .forEach((child, i, arr) => {\n result.parentIndex = parentIndex;\n result.isLastChild = i === arr.length - 1;\n transformChild(child, result);\n });\n}\n\nfunction transformChild(child: NodePath<JSXChild>, result: Result): void {\n result.index++;\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSXElement(child, result, false);\n } else if (child.isJSXExpressionContainer()) {\n const expression = child.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n addToTemplate(result, `${expression.node.value}`, true);\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else if (t.isJSXEmptyExpression(expression.node)) {\n // it is empty expression\n // just for tracking value\n } else {\n throw new Error('Unsupported child type');\n }\n } else if (child.isJSXText()) {\n addToTemplate(result, replaceSpace(child.node), true);\n } else {\n throw new Error('Unsupported child type');\n }\n}\nfunction getNodeText(path: NodePath<JSXChild>): string {\n if (path.isJSXText()) {\n return replaceSpace(path.node);\n }\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n return String(expression.node.value);\n }\n }\n return '';\n}\n\nfunction handleAttributes(props: Record<string, any>, result: Result): void {\n let klass = '';\n let style = '';\n\n for (const [prop, value] of Object.entries(props)) {\n if (prop === 'class' && typeof value === 'string') {\n klass += ` ${value}`;\n delete props[prop];\n } else if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\n delete props[prop];\n } else if (value === true) {\n addToTemplate(result, ` ${prop}`);\n delete props[prop];\n } else if (value === false) {\n delete props[prop];\n } else if (typeof value === 'string' || typeof value === 'number') {\n addToTemplate(result, ` ${prop}=\"${value}\"`);\n delete props[prop];\n } else if (t.isConditionalExpression(value)) {\n props[prop] = t.arrowFunctionExpression([], value);\n } else if (t.isObjectExpression(value)) {\n handleObjectExpression(prop, value, props, style);\n }\n }\n\n if (Object.keys(props).length > 0) {\n result.props[result.index] = props;\n }\n\n if (klass.trim()) {\n addToTemplate(result, ` class=\"${klass.trim()}\"`);\n }\n if (style.trim()) {\n addToTemplate(result, ` style=\"${style.trim()}\"`);\n }\n}\n\nfunction handleObjectExpression(\n prop: string,\n value: t.ObjectExpression,\n props: Record<string, any>,\n // eslint-disable-next-line unused-imports/no-unused-vars\n style: string,\n): void {\n const hasConditional = value.properties.some(\n property => t.isObjectProperty(property) && t.isConditionalExpression(property.value),\n );\n\n if (hasConditional) {\n props[prop] = t.arrowFunctionExpression([], value);\n } else if (prop === 'style') {\n value.properties.forEach(property => {\n if (t.isObjectProperty(property)) {\n style += `${(property.key as Identifier).name}:${(property.value as StringLiteral).value};`;\n }\n });\n delete props[prop];\n }\n}\n\nfunction replaceChild(node: t.Expression, result: Result): void {\n if (result.isLastChild) {\n result.index--;\n } else {\n addToTemplate(result, '<!>');\n }\n result.props[result.parentIndex] ??= {};\n result.props[result.parentIndex].children ??= [];\n result.props[result.parentIndex].children.push(\n t.arrayExpression([\n t.arrowFunctionExpression([], node),\n result.isLastChild ? t.nullLiteral() : t.identifier(String(result.index)),\n ]),\n );\n}\n\nfunction getChildren(path: NodePath<JSXElement>): JSXChild[] {\n return path\n .get('children')\n .filter(child => isValidChild(child))\n .map(child => {\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSX(child);\n } else if (child.isJSXExpressionContainer()) {\n child.replaceWith(child.get('expression'));\n } else if (child.isJSXText()) {\n child.replaceWith(t.stringLiteral(replaceSpace(child.node)));\n } else {\n throw new Error('Unsupported child type');\n }\n return child.node;\n });\n}\n\nexport function isValidChild(path: NodePath<JSXChild>): boolean {\n const regex = /^\\s*$/;\n if (path.isStringLiteral() || path.isJSXText()) {\n return !regex.test(path.node.value);\n }\n return Object.keys(path.node).length > 0;\n}\n\nexport function getAttrProps(path: NodePath<t.JSXElement>): Record<string, any> {\n const props: Record<string, any> = {};\n let hasExpression = false;\n path\n .get('openingElement')\n .get('attributes')\n .forEach(attribute => {\n if (attribute.isJSXAttribute()) {\n const name = getAttrName(attribute.node);\n const value = attribute.get('value');\n\n if (!value.node) {\n props[name] = true;\n } else if (value.isStringLiteral()) {\n props[name] = value.node.value;\n } else {\n if (value.isJSXExpressionContainer()) {\n const expression = value.get('expression');\n if (expression.isStringLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isNumericLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isJSXElement() || expression.isJSXFragment()) {\n transformJSX(expression);\n props[name] = expression.node;\n } else if (expression.isExpression()) {\n hasExpression = true;\n if (/^key|ref|on.+$/.test(name)) {\n props[name] = expression.node;\n } else if (/^bind:.+/.test(name)) {\n const value = path.scope.generateUidIdentifier('value');\n const bindName = name.slice(5).toLocaleLowerCase();\n props[bindName] = expression.node;\n // props[bindName] = t.memberExpression(\n // t.identifier((expression.node as Identifier).name),\n // t.identifier('value'),\n // );\n props[`update${capitalizeFirstLetter(bindName)}`] = t.arrowFunctionExpression(\n [value],\n t.assignmentExpression('=', expression.node as OptionalMemberExpression, value),\n );\n } else {\n if (expression.isConditionalExpression()) {\n props[name] = t.arrowFunctionExpression([], expression.node);\n } else {\n props[name] = expression.node;\n }\n }\n }\n } else if (value.isJSXElement() || value.isJSXFragment()) {\n transformJSX(value);\n props[name] = value.node;\n }\n }\n } else if (attribute.isJSXSpreadAttribute()) {\n props._$spread$ = attribute.get('argument').node;\n hasExpression = true;\n } else {\n throw new Error('Unsupported attribute type');\n }\n });\n return {\n props,\n hasExpression,\n };\n}\n","import { _toString } from './comm';\n\nexport const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object';\nexport function isPromise(val: any): val is Promise<any> {\n return _toString.call(val) === '[object Promise]';\n}\n\nexport const isArray = Array.isArray;\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\nexport function isNull(val: any): val is null {\n return val === null;\n}\nexport function isSymbol(val: unknown): val is symbol {\n return typeof val === 'symbol';\n}\n\nexport function isSet(val: any): val is Set<any> {\n return _toString.call(val) === '[object Set]';\n}\nexport function isWeakMap(val: any): val is WeakMap<any, any> {\n return _toString.call(val) === '[object WeakMap]';\n}\nexport function isWeakSet(val: any): val is WeakSet<any> {\n return _toString.call(val) === '[object WeakSet]';\n}\n\nexport function isMap(val: unknown): val is Map<any, any> {\n return _toString.call(val) === '[object Map]';\n}\nexport function isNil(x: any): x is null | undefined {\n return x === null || x === undefined;\n}\n\nexport const isFunction = (val: unknown): val is Function => typeof val === 'function';\n\nexport function isFalsy(x: any): x is false | null | undefined {\n return x === false || x === null || x === undefined;\n}\n\nexport const isPrimitive = (\n val: unknown,\n): val is string | number | boolean | symbol | null | undefined =>\n ['string', 'number', 'boolean', 'symbol', 'undefined'].includes(typeof val) || isNull(val);\n\nexport function isHTMLElement(obj) {\n if (!obj) return false;\n return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName === 'string';\n}\n\nexport const isPlainObject = (val: unknown): val is object =>\n _toString.call(val) === '[object Object]';\n\nexport type StringNumber = `${number}`;\nexport function isStringNumber(val: unknown): val is StringNumber {\n if (!isString(val)) {\n return false;\n }\n return !Number.isNaN(Number(val));\n}\n","import { isArray, isFunction, isString } from './is';\n\nexport const _toString = Object.prototype.toString;\nexport const extend = Object.assign;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nexport const hasOwn = (val: object, key: string | symbol): key is keyof typeof val =>\n hasOwnProperty.call(val, key);\n\nexport function coerceArray<T>(data: T | T[]): T[] {\n return isArray(data) ? (data.flat() as T[]) : [data];\n}\nexport const hasChanged = (value, oldValue) =>\n value !== oldValue && (value === value || oldValue === oldValue);\nexport const noop = Function.prototype as () => void;\n\n/**\n * A function that checks if a string starts with a specific substring.\n * indexOf faster under normal circumstances\n * @see https://www.measurethat.net/Benchmarks/Show/12350/0/startswith-vs-test-vs-match-vs-indexof#latest_results_block\n\n * @param {string} str - The input string to check.\n * @param {string} searchString - The substring to check for at the beginning of the input string.\n * @return {boolean} Returns true if the input string starts with the specified substring, otherwise false.\n */\nexport function startsWith(str, searchString) {\n if (!isString(str)) {\n return false;\n }\n return str.indexOf(searchString) === 0;\n}\n\n/**\n * Escapes special HTML characters in a string.\n * @param str - The string to escape.\n * @returns The escaped string.\n */\nexport function escape(str: string): string {\n return str.replaceAll(/[\"&'<>]/g, char => {\n switch (char) {\n case '&':\n return '&amp;';\n case '<':\n return '&lt;';\n case '>':\n return '&gt;';\n case '\"':\n return '&quot;';\n case \"'\":\n return '&#039;';\n default:\n return char;\n }\n });\n}\n\nexport type ExcludeType = ((key: string | symbol) => boolean) | (string | symbol)[];\n\n/**\n * Checks if a key should be excluded based on the provided exclude criteria.\n * @param key - The key to check.\n * @param exclude - The exclusion criteria.\n * @returns True if the key should be excluded, otherwise false.\n */\nexport function isExclude(key: string | symbol, exclude?: ExcludeType): boolean {\n return isArray(exclude) ? exclude.includes(key) : isFunction(exclude) ? exclude(key) : false;\n}\n\n/**\n * Generates a unique random 8 character string ID.\n * The generated IDs only contain alphanumeric characters.\n * @returns A unique random 8 character string ID.\n */\nexport function generateUniqueId() {\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result = '';\n const charactersLength = characters.length;\n for (let i = 0; i < 8; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n}\n\n/**\n * Checks if the current environment is a browser.\n * @returns True if the current environment is a browser, otherwise false.\n */\nexport function isBrowser() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n","export const kebabCase = (string: string): string => {\n return string.replaceAll(/[A-Z]+/g, (match, offset) => {\n return `${offset > 0 ? '-' : ''}${match.toLocaleLowerCase()}`;\n });\n};\n\nexport const camelCase = (str: string): string => {\n const s = str.replaceAll(/[\\s_-]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));\n return s[0].toLowerCase() + s.slice(1);\n};\n/**\n * Capitalizes the first letter of a string.\n *\n * @param {string} inputString - The input string to capitalize the first letter.\n * @return {string} The string with the first letter capitalized.\n */\nexport const capitalizeFirstLetter = (inputString: string): string => {\n return inputString.charAt(0).toUpperCase() + inputString.slice(1);\n};\n","export function warn(msg: string, ..._args: any[]): void;\nexport function warn(msg: string, ...args): void {\n // eslint-disable-next-line prefer-spread\n console.warn.apply(console, [`[Essor warn]: ${msg}`].concat(args) as [string, ...any[]]);\n}\n\nexport function info(msg: string, ..._args: any[]): void;\nexport function info(msg: string, ...args): void {\n // eslint-disable-next-line prefer-spread, no-console\n console.info.apply(console, [`[Essor info]: ${msg}`].concat(args) as [string, ...any[]]);\n}\n\nexport function error(msg: string, ..._args: any[]): void;\nexport function error(msg: string, ...args): void {\n // eslint-disable-next-line prefer-spread\n console.error.apply(console, [`[Essor error]: ${msg}`].concat(args) as [string, ...any[]]);\n}\n","import { type NodePath, types as t } from '@babel/core';\nimport type { Options, State } from './types';\nexport const imports = new Set<string>();\n\nconst defaultOption: Options = {\n ssg: false,\n symbol: '$',\n props: true,\n};\n\nexport const transformProgram = {\n enter(path: NodePath<t.Program>, state) {\n imports.clear();\n\n // merge options\n state.opts = { ...defaultOption, ...state.opts };\n\n path.state = {\n h: path.scope.generateUidIdentifier('h$'),\n template: path.scope.generateUidIdentifier('template$'),\n ssg: path.scope.generateUidIdentifier('ssg$'),\n\n useSignal: path.scope.generateUidIdentifier('signal$'),\n useComputed: path.scope.generateUidIdentifier('computed$'),\n useReactive: path.scope.generateUidIdentifier('reactive$'),\n\n tmplDeclaration: t.variableDeclaration('const', []),\n opts: state.opts,\n } as State;\n },\n exit(path: NodePath<t.Program>) {\n const state: State = path.state;\n if (state.tmplDeclaration.declarations.length > 0) {\n const index = path.node.body.findIndex(\n node => !t.isImportDeclaration(node) && !t.isExportDeclaration(node),\n );\n path.node.body.splice(index, 0, state.tmplDeclaration);\n }\n if (imports.size > 0) {\n path.node.body.unshift(createImport(state, 'essor'));\n }\n },\n};\nfunction createImport(state: State, from: string) {\n const ImportSpecifier: t.ImportSpecifier[] = [];\n imports.forEach(name => {\n const local = t.identifier(state[name].name);\n const imported = t.identifier(name);\n ImportSpecifier.push(t.importSpecifier(local, imported));\n });\n\n const importSource = t.stringLiteral(from);\n return t.importDeclaration(ImportSpecifier, importSource);\n}\n","import { type NodePath, types as t } from '@babel/core';\nimport { startsWith } from '@estjs/shared';\nimport type { State } from './types';\n\nexport type JSXElement = t.JSXElement | t.JSXFragment;\n\nexport type JSXChild =\n | t.JSXElement\n | t.JSXFragment\n | t.JSXExpressionContainer\n | t.JSXSpreadChild\n | t.JSXText;\n\n/**\n * Checks if the given Babel path has a sibling element.\n *\n * @param {NodePath} path - The Babel path to check.\n * @return {boolean} True if the path has a sibling element, false otherwise.\n */\nexport function hasSiblingElement(path) {\n // Get all siblings (both previous and next)\n const siblings = path.getAllPrevSiblings().concat(path.getAllNextSiblings());\n\n // Check for non-self-closing sibling elements or JSXExpressionContainer\n const hasSibling = siblings.some(\n siblingPath => siblingPath.isJSXElement() || siblingPath.isJSXExpressionContainer(),\n );\n\n return hasSibling;\n}\n/**\n * Retrieves the name of a JSX attribute.\n *\n * @param {t.JSXAttribute} attribute - The JSX attribute to retrieve the name from.\n * @return {string} The name of the attribute.\n * @throws {Error} If the attribute type is unsupported.\n */\nexport function getAttrName(attribute: t.JSXAttribute): string {\n if (t.isJSXIdentifier(attribute.name)) {\n return attribute.name.name;\n }\n if (t.isJSXNamespacedName(attribute.name)) {\n return `${attribute.name.namespace.name}:${attribute.name.name.name}`;\n }\n throw new Error('Unsupported attribute type');\n}\n\n/**\n * Retrieves the tag name of a JSX element.\n *\n * @param {t.JSXElement} node - The JSX element.\n * @return {string} The tag name of the JSX element.\n */\nexport function getTagName(node: t.JSXElement): string {\n const tag = node.openingElement.name;\n return jsxElementNameToString(tag);\n}\n\n/**\n * Converts a JSX element name to a string representation.\n *\n * case1: <MyComponent />\n * case2: <SomeLibrary.SomeComponent />;\n * case3: <namespace:ComponentName />;\n * case4: <SomeLibrary.Nested.ComponentName />;\n *\n * @param {t.JSXMemberExpression | t.JSXIdentifier | t.JSXNamespacedName} node The JSX element name to convert.\n * @returns {string} The string representation of the JSX element name.\n */\nexport function jsxElementNameToString(\n node: t.JSXMemberExpression | t.JSXIdentifier | t.JSXNamespacedName,\n) {\n if (t.isJSXMemberExpression(node)) {\n return `${jsxElementNameToString(node.object)}.${jsxElementNameToString(node.property)}`;\n }\n\n if (t.isJSXIdentifier(node) || t.isIdentifier(node)) {\n return node.name;\n }\n\n return `${node.namespace.name}:${node.name.name}`;\n}\n\n/**\n * Determines if the given tagName is a component.\n *\n * case1: <MyComponent />\n * case2: <SomeLibrary.SomeComponent />;\n * case3: <_component />;\n *\n * @param {string} tagName - The name of the tag to check.\n * @return {boolean} True if the tagName is a component, false otherwise.\n */\nexport function isComponent(tagName: string): boolean {\n return (\n (tagName[0] && tagName[0].toLowerCase() !== tagName[0]) ||\n tagName.includes('.') ||\n /[^a-z]/i.test(tagName[0])\n );\n}\n\n/**\n * Determines if the given path represents a text child node in a JSX expression.\n *\n * @param {NodePath<JSXChild>} path - The path to the potential text child node.\n * @return {boolean} True if the path represents a text child node, false otherwise.\n */\nexport function isTextChild(path: NodePath<JSXChild>): boolean {\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isJSXText() || expression.isStringLiteral() || expression.isNumericLiteral()) {\n return true;\n }\n }\n if (path.isJSXText() || path.isStringLiteral() || path.isNullLiteral()) {\n return true;\n }\n return false;\n}\n\n/**\n * Sets the text content of a JSX node.\n *\n * @param {NodePath<JSXChild>} path - The path to the JSX node.\n * @param {string} text - The text to set.\n * @return {void}\n */\nexport function setNodeText(path: NodePath<JSXChild>, text: string): void {\n if (path.isJSXText()) {\n path.node.value = text;\n }\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n expression.replaceWith(t.stringLiteral(text));\n }\n }\n}\n\n/**\n * get the symbol start with\n */\nexport function isSymbolStart(path: NodePath<any>, name: string) {\n const state: State = path.state;\n const { symbol } = state?.opts || '$';\n\n return startsWith(name, symbol);\n}\n","export const selfClosingTags = [\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n];\n\nexport const svgTags = [\n 'circle',\n 'clipPath',\n 'defs',\n 'ellipse',\n 'filter',\n 'g',\n 'line',\n 'linearGradient',\n 'mask',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialGradient',\n 'rect',\n 'stop',\n 'symbol',\n 'text',\n 'use',\n];\n","import { types as t } from '@babel/core';\nimport { imports } from '../program';\nimport { isSymbolStart } from '../shared';\nimport type { Identifier, VariableDeclarator } from '@babel/types';\nimport type { NodePath } from '@babel/core';\n\n/**\n * Replaces the symbol in a variable declarator with a computed or signal expression.\n *\n * case 1: let $a = 1 => let $a = useSignal(1);\n * case 2: const $a = ()=>{return $a} => const $a = useComputed(()=>{return $a})\n *\n * @param {NodePath<VariableDeclarator>} path - The path to the variable declarator node.\n * @return {void}\n */\nexport function replaceSymbol(path: NodePath<VariableDeclarator>) {\n const { init, id } = path.node;\n const variableName = (id as Identifier).name;\n\n if (t.isObjectPattern(id) || t.isArrayPattern(id) || !isSymbolStart(path, variableName)) return;\n\n const isComputed =\n init &&\n (t.isFunctionExpression(init) || t.isArrowFunctionExpression(init)) &&\n (path.parent as t.VariableDeclaration).kind === 'const';\n\n const hookName = isComputed ? 'useComputed' : 'useSignal';\n const newInit = t.callExpression(t.identifier(path.state[hookName].name), init ? [init] : []);\n\n imports.add(hookName);\n path.node.init = newInit;\n}\n\nexport function symbolIdentifier(path) {\n const parentPath = path.parentPath;\n if (!shouldProcessIdentifier(parentPath)) return;\n\n const { node } = path;\n if (!isSymbolStart(path, node.name)) return;\n\n if (!path.findParent(p => p.isMemberExpression() && p.node.property.name === 'value')) {\n path.replaceWith(t.memberExpression(t.identifier(node.name), t.identifier('value')));\n }\n}\n\nfunction shouldProcessIdentifier(parentPath) {\n return (\n parentPath &&\n !t.isVariableDeclarator(parentPath) &&\n !t.isImportSpecifier(parentPath) &&\n !t.isObjectProperty(parentPath) &&\n !t.isArrayPattern(parentPath) &&\n !t.isObjectPattern(parentPath)\n );\n}\n\nexport function symbolObjectPattern(path) {\n path.node.properties.forEach(property => {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n isSymbolStart(path, property.key.name)\n ) {\n property.key = t.identifier(property.key.name);\n }\n });\n}\n\nexport function symbolArrayPattern(path) {\n path.node.elements.forEach(element => {\n if (t.isIdentifier(element) && element.name.startsWith('$')) {\n element.name = t.identifier(element.name).name;\n } else if (t.isObjectPattern(element)) {\n symbolObjectPattern({ node: element } as NodePath);\n }\n });\n}\n","import { types as t } from '@babel/core';\nimport { startsWith } from '@estjs/shared';\n\n/**\n * Replaces import declarations\n *\n * case1: import { $a } from 'a';console.log(a) => import { $a } from 'a';console.log($a.value)\n * case2: import $a from 'a';console.log(a) => import $a from 'a';console.log($a.value)\n *\n * @param {object} path - The path to replace import declarations.\n * @return {void}\n */\nexport function replaceImportDeclaration(path) {\n path.node.specifiers.forEach(specifier => {\n const variableName = specifier.local.name;\n if (startsWith(variableName, '$') && !isVariableUsedAsObject(path, variableName)) {\n path.scope.rename(variableName, `${variableName}.value`);\n specifier.local.name = variableName;\n }\n });\n}\n\n/**\n * Checks if a variable is used as an object.\n *\n * @param path - The path to the variable.\n * @param variableName - The name of the variable.\n * @returns {boolean} - Whether the variable is used as an object.\n */\nfunction isVariableUsedAsObject(path, variableName) {\n const binding = path.scope.getBinding(variableName);\n return (\n binding?.referencePaths?.some(referencePath => {\n if (t.isMemberExpression(referencePath.parent)) {\n const { object, property } = referencePath.parent;\n if (t.isIdentifier(object, { name: variableName })) {\n referencePath.parentPath.replaceWith(\n t.memberExpression(t.memberExpression(object, t.identifier('value')), property),\n );\n return true;\n }\n }\n return false;\n }) || false\n );\n}\n","import { startsWith } from '@estjs/shared';\nimport { type NodePath, types as t } from '@babel/core';\nimport { imports } from '../program';\nimport type { State } from '../types';\nimport type {\n ArrowFunctionExpression,\n FunctionDeclaration,\n Identifier,\n ObjectProperty,\n RestElement,\n} from '@babel/types';\n\n/**\n * Replaces the properties of a function's first parameter with new names.\n *\n * auto replace pattern to props object\n *\n * rule1: function argument\n * rule2: first argument is object and it pattern\n * rule3: function has return\n *\n * transform case\n * case1 ({a, b}) => <div>{a.value}</div> to=> (_props)=><div>{_props.a.value}</div>\n * case2 ({a, b, ...rest}) => <div>{a.value}{rest}</div> to=> (_props)=> {const restProps = reactive(props,[a,b]);return <div>{_props.a.value}{reset}</div>}\n *\n * not transform case\n * case1 ([a,b])=> <div>{a.value}</div>\n * case2 ({a.,b}) ={}\n *\n * @param {NodePath<FunctionDeclaration | ArrowFunctionExpression>} path - The path to the function node.\n * @return {void}\n */\nexport function replaceProps(path: NodePath<FunctionDeclaration | ArrowFunctionExpression>) {\n const state: State = path.state;\n const firstParam = path.node.params[0];\n\n if (!firstParam || !t.isObjectPattern(firstParam)) return;\n\n const returnStatement = path\n .get('body')\n .get('body')\n .find(statement => statement.isReturnStatement());\n\n if (!returnStatement || !t.isJSXElement((returnStatement.node as any)?.argument)) return;\n\n const replaceProperties = (properties: (ObjectProperty | RestElement)[], parentPath: string) => {\n properties.forEach(property => {\n if (t.isObjectProperty(property) && t.isIdentifier(property.key)) {\n const keyName = property.key.name;\n if (t.isIdentifier(property.value)) {\n path.scope.rename(property.value.name, `${parentPath}${keyName}`);\n } else if (t.isObjectPattern(property.value)) {\n replaceProperties(property.value.properties, `${parentPath}${keyName}.`);\n }\n }\n });\n };\n\n const properties = firstParam.properties;\n const notRestProperties = properties.filter(property => !t.isRestElement(property)) as ObjectProperty[];\n replaceProperties(notRestProperties, '__props.');\n\n const notRestNames = notRestProperties.map(property => (property.key as Identifier).name);\n if (__DEV__ && notRestNames.some(name => startsWith(name, '$'))) {\n console.warn('props name can not start with $');\n return;\n }\n\n handleRestElement(path, state, properties, notRestNames);\n}\n\nfunction handleRestElement(path, state: State, properties, notRestNames) {\n const restElement = properties.find(property => t.isRestElement(property)) as RestElement | undefined;\n path.node.params[0] = t.identifier('__props');\n\n if (restElement) {\n const restName = (restElement.argument as Identifier).name;\n if (notRestNames.length === 0) {\n path.node.params[0] = t.identifier(restName);\n } else {\n const restVariableDeclaration = createRestVariableDeclaration(state, restName, notRestNames);\n imports.add('useReactive');\n (path.node.body as t.BlockStatement).body.unshift(restVariableDeclaration);\n }\n }\n}\n\nfunction createRestVariableDeclaration(state: State, restName: string, notRestNames: string[]) {\n return t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(restName),\n t.callExpression(state.useReactive, [\n t.identifier('__props'),\n t.arrayExpression(notRestNames.map(name => t.stringLiteral(name))),\n ])\n ),\n ]);\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAA,IAAAA,eAA2B;;;ACQpB,IAAM,UAAU,MAAM;AAEtB,SAAS,SAAS,KAA6B;AACpD,SAAO,OAAO,QAAQ;AACxB;ACCO,IAAM,OAAO,SAAS;AAWtB,SAAS,WAAW,KAAK,cAAc;AAC5C,MAAI,CAAC,SAAS,GAAG,GAAG;AAClB,WAAO;EACT;AACA,SAAO,IAAI,QAAQ,YAAY,MAAM;AACvC;ACbO,IAAM,wBAAwB,CAAC,gBAAgC;AACpE,SAAO,YAAY,OAAO,CAAC,EAAE,YAAY,IAAI,YAAY,MAAM,CAAC;AAClE;;;AElBA,kBAA0C;AAEnC,IAAM,UAAU,oBAAI,IAAY;AAEvC,IAAM,gBAAyB;AAAA,EAC7B,KAAK;AAAA,EACL,QAAQ;AAAA,EACR,OAAO;AACT;AAEO,IAAM,mBAAmB;AAAA,EAC9B,MAAM,MAA2B,OAAO;AACtC,YAAQ,MAAM;AAGd,UAAM,OAAO,kCAAK,gBAAkB,MAAM;AAE1C,SAAK,QAAQ;AAAA,MACX,GAAG,KAAK,MAAM,sBAAsB,IAAI;AAAA,MACxC,UAAU,KAAK,MAAM,sBAAsB,WAAW;AAAA,MACtD,KAAK,KAAK,MAAM,sBAAsB,MAAM;AAAA,MAE5C,WAAW,KAAK,MAAM,sBAAsB,SAAS;AAAA,MACrD,aAAa,KAAK,MAAM,sBAAsB,WAAW;AAAA,MACzD,aAAa,KAAK,MAAM,sBAAsB,WAAW;AAAA,MAEzD,iBAAiB,YAAAC,MAAE,oBAAoB,SAAS,CAAC,CAAC;AAAA,MAClD,MAAM,MAAM;AAAA,IACd;AAAA,EACF;AAAA,EACA,KAAK,MAA2B;AAC9B,UAAM,QAAe,KAAK;AAC1B,QAAI,MAAM,gBAAgB,aAAa,SAAS,GAAG;AACjD,YAAM,QAAQ,KAAK,KAAK,KAAK;AAAA,QAC3B,UAAQ,CAAC,YAAAA,MAAE,oBAAoB,IAAI,KAAK,CAAC,YAAAA,MAAE,oBAAoB,IAAI;AAAA,MACrE;AACA,WAAK,KAAK,KAAK,OAAO,OAAO,GAAG,MAAM,eAAe;AAAA,IACvD;AACA,QAAI,QAAQ,OAAO,GAAG;AACpB,WAAK,KAAK,KAAK,QAAQ,aAAa,OAAO,OAAO,CAAC;AAAA,IACrD;AAAA,EACF;AACF;AACA,SAAS,aAAa,OAAc,MAAc;AAChD,QAAM,kBAAuC,CAAC;AAC9C,UAAQ,QAAQ,UAAQ;AACtB,UAAM,QAAQ,YAAAA,MAAE,WAAW,MAAM,IAAI,EAAE,IAAI;AAC3C,UAAM,WAAW,YAAAA,MAAE,WAAW,IAAI;AAClC,oBAAgB,KAAK,YAAAA,MAAE,gBAAgB,OAAO,QAAQ,CAAC;AAAA,EACzD,CAAC;AAED,QAAM,eAAe,YAAAA,MAAE,cAAc,IAAI;AACzC,SAAO,YAAAA,MAAE,kBAAkB,iBAAiB,YAAY;AAC1D;;;ACrDA,IAAAC,eAA0C;AAmBnC,SAAS,kBAAkB,MAAM;AAEtC,QAAM,WAAW,KAAK,mBAAmB,EAAE,OAAO,KAAK,mBAAmB,CAAC;AAG3E,QAAM,aAAa,SAAS;AAAA,IAC1B,iBAAe,YAAY,aAAa,KAAK,YAAY,yBAAyB;AAAA,EACpF;AAEA,SAAO;AACT;AAQO,SAAS,YAAY,WAAmC;AAC7D,MAAI,aAAAC,MAAE,gBAAgB,UAAU,IAAI,GAAG;AACrC,WAAO,UAAU,KAAK;AAAA,EACxB;AACA,MAAI,aAAAA,MAAE,oBAAoB,UAAU,IAAI,GAAG;AACzC,WAAO,GAAG,UAAU,KAAK,UAAU,IAAI,IAAI,UAAU,KAAK,KAAK,IAAI;AAAA,EACrE;AACA,QAAM,IAAI,MAAM,4BAA4B;AAC9C;AAQO,SAAS,WAAW,MAA4B;AACrD,QAAM,MAAM,KAAK,eAAe;AAChC,SAAO,uBAAuB,GAAG;AACnC;AAaO,SAAS,uBACd,MACA;AACA,MAAI,aAAAA,MAAE,sBAAsB,IAAI,GAAG;AACjC,WAAO,GAAG,uBAAuB,KAAK,MAAM,CAAC,IAAI,uBAAuB,KAAK,QAAQ,CAAC;AAAA,EACxF;AAEA,MAAI,aAAAA,MAAE,gBAAgB,IAAI,KAAK,aAAAA,MAAE,aAAa,IAAI,GAAG;AACnD,WAAO,KAAK;AAAA,EACd;AAEA,SAAO,GAAG,KAAK,UAAU,IAAI,IAAI,KAAK,KAAK,IAAI;AACjD;AAYO,SAAS,YAAY,SAA0B;AACpD,SACG,QAAQ,CAAC,KAAK,QAAQ,CAAC,EAAE,YAAY,MAAM,QAAQ,CAAC,KACrD,QAAQ,SAAS,GAAG,KACpB,UAAU,KAAK,QAAQ,CAAC,CAAC;AAE7B;AAQO,SAAS,YAAY,MAAmC;AAC7D,MAAI,KAAK,yBAAyB,GAAG;AACnC,UAAM,aAAa,KAAK,IAAI,YAAY;AACxC,QAAI,WAAW,UAAU,KAAK,WAAW,gBAAgB,KAAK,WAAW,iBAAiB,GAAG;AAC3F,aAAO;AAAA,IACT;AAAA,EACF;AACA,MAAI,KAAK,UAAU,KAAK,KAAK,gBAAgB,KAAK,KAAK,cAAc,GAAG;AACtE,WAAO;AAAA,EACT;AACA,SAAO;AACT;AASO,SAAS,YAAY,MAA0B,MAAoB;AACxE,MAAI,KAAK,UAAU,GAAG;AACpB,SAAK,KAAK,QAAQ;AAAA,EACpB;AACA,MAAI,KAAK,yBAAyB,GAAG;AACnC,UAAM,aAAa,KAAK,IAAI,YAAY;AACxC,QAAI,WAAW,gBAAgB,KAAK,WAAW,iBAAiB,GAAG;AACjE,iBAAW,YAAY,aAAAA,MAAE,cAAc,IAAI,CAAC;AAAA,IAC9C;AAAA,EACF;AACF;AAKO,SAAS,cAAc,MAAqB,MAAc;AAC/D,QAAM,QAAe,KAAK;AAC1B,QAAM,EAAE,OAAO,KAAI,+BAAO,SAAQ;AAElC,SAAO,WAAW,MAAM,MAAM;AAChC;;;ACnJO,IAAM,kBAAkB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,UAAU;AAAA,EACrB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;;;APXA,IAAI,QAAQ;AAEZ,SAAS,cAAc,QAAgB,SAAiB,OAAO,OAAa;AAC1E,MAAI,OAAO;AACT,QAAI,QAAQ,OAAO,SAAS,SAAS,GAAG;AACtC,MAAC,OAAO,SAAsB,OAAO,SAAS,SAAS,CAAC,KAAK;AAAA,IAC/D,OAAO;AACL,MAAC,OAAO,SAAsB,KAAK,OAAO;AAAA,IAC5C;AAAA,EACF,OAAO;AACL,WAAO,YAAY;AAAA,EACrB;AACF;AAEO,SAAS,aAAa,MAAkC;AAC7D,QAAM,QAAe,KAAK;AAC1B,UAAQ,MAAM,KAAK;AAEnB,QAAM,SAAiB;AAAA,IACrB,OAAO;AAAA,IACP,aAAa;AAAA,IACb,aAAa;AAAA,IACb,OAAO,CAAC;AAAA,IACR,UAAU,QAAQ,CAAC,IAAI;AAAA,EACzB;AACA,sBAAoB,MAAM,QAAQ,IAAI;AAEtC,OAAK,YAAY,gBAAgB,MAAM,MAAM,CAAC;AAChD;AAEA,SAAS,aAAa,MAAyB;AAC7C,SAAO,KAAK,MAAM,WAAW,QAAQ,GAAG,EAAE,KAAK;AACjD;AAEA,SAAS,gBAAgB,MAA4B,QAAkC;AACrF,QAAM,QAAe,KAAK;AAC1B,QAAMC,eAAc,KAAK,aAAa,KAAK,YAAgB,WAAW,KAAK,IAAI,CAAC;AAEhF,QAAM,OAAOA,eACT,aAAAC,MAAE,WAAW,WAAW,KAAK,IAAI,CAAC,IAClC,KAAK,MAAM,sBAAsB,QAAQ;AAE7C,MAAI,CAACD,cAAa;AAChB,UAAM,WAAW,QACb,aAAAC,MAAE,gBAAiB,OAAO,SAAsB,IAAI,aAAAA,MAAE,aAAa,CAAC,IACpE,aAAAA,MAAE,eAAe,MAAM,UAAU,CAAC,aAAAA,MAAE,cAAc,OAAO,QAAkB,CAAC,CAAC;AACjF,UAAM,gBAAgB,aAAa,KAAK,aAAAA,MAAE,mBAAmB,MAAM,QAAQ,CAAC;AAC5E,QAAI,CAAC,OAAO;AACV,cAAQ,IAAI,UAAU;AAAA,IACxB;AAAA,EACF;AAEA,QAAM,MAAM,OAAO,MAAM;AACzB,SAAO,OAAO,MAAM;AAEpB,QAAM,OAAO,CAAC,MAAM,YAAY,OAAO,KAAK,CAAC;AAC7C,MAAI,KAAK;AACP,SAAK,KAAK,GAAG;AAAA,EACf;AAEA,QAAM,SAAS,QAAQ,QAAQ;AAC/B,UAAQ,IAAI,MAAM;AAClB,SAAO,aAAAA,MAAE,eAAe,MAAM,MAAM,GAAG,IAAI;AAC7C;AAEA,SAAS,YAAY,OAAgD;AACnE,QAAM,YAAY,WAAS;AACzB,QAAI,QAAQ,KAAK,GAAG;AAClB,aAAO,aAAAA,MAAE,gBAAgB,MAAM,IAAI,SAAS,CAAC;AAAA,IAC/C;AACA,QAAI,SAAS,OAAO,UAAU,YAAY,CAAC,aAAAA,MAAE,OAAO,KAAK,GAAG;AAC1D,aAAO,YAAY,KAAK;AAAA,IAC1B;AAEA,YAAQ,OAAO,OAAO;AAAA,MACpB,KAAK;AACH,eAAO,aAAAA,MAAE,cAAc,KAAK;AAAA,MAC9B,KAAK;AACH,eAAO,aAAAA,MAAE,eAAe,KAAK;AAAA,MAC/B,KAAK;AACH,eAAO,aAAAA,MAAE,eAAe,KAAK;AAAA,MAC/B,KAAK;AAAA,MACL,KAAK;AACH,eAAO,aAAAA,MAAE,mBAAmB;AAAA,MAC9B,KAAK;AACH,eAAO,aAAAA,MAAE,YAAY;AAAA,MACvB;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAEA,QAAM,SAAS,OAAO,QAAQ,KAAK,EAAE;AAAA,IAAI,CAAC,CAAC,MAAM,KAAK,MACpD,SAAS,cACL,aAAAA,MAAE,cAAc,UAAU,KAAK,CAAC,IAChC,aAAAA,MAAE,eAAe,aAAAA,MAAE,cAAc,IAAI,GAAG,UAAU,KAAK,CAAC;AAAA,EAC9D;AAEA,SAAO,aAAAA,MAAE,iBAAiB,MAAM;AAClC;AAEA,SAAS,oBACP,MACA,QACA,SAAkB,OACZ;AACN,MAAI,KAAK,aAAa,GAAG;AACvB,UAAM,UAAU,WAAW,KAAK,IAAI;AACpC,UAAM,iBAAiB,YAAgB,OAAO;AAC9C,UAAM,cAAc,CAAC,kBAAkB,gBAAgB,SAAS,OAAO;AACvE,UAAM,QAAQ,QAAQ,SAAS,OAAO,KAAK,OAAO,UAAU;AAC5D,UAAM,EAAE,OAAO,cAAc,IAAI,aAAa,IAAI;AAGlD,QAAI,MAAM,KAAK;AACb,aAAO,MAAM,MAAM,MAAM;AACzB,aAAO,MAAM;AAAA,IACf;AAEA,QAAI,gBAAgB;AAClB,6BAAuB,MAAM,QAAQ,QAAQ,KAAK;AAAA,IACpD,OAAO;AACL,wBAAkB,MAAM,QAAQ,SAAS,aAAa,OAAO,OAAO,aAAa;AAAA,IACnF;AAAA,EACF,OAAO;AACL,WAAO;AACP,sBAAkB,MAAM,MAAM;AAAA,EAChC;AACF;AAEA,SAAS,uBACP,MACA,QACA,QACA,OACM;AACN,MAAI,QAAQ;AACV,WAAO,QAAQ;AACf,UAAM,WAAW,YAAY,IAAI;AACjC,QAAI,SAAS,SAAS,GAAG;AACvB,YAAM,oBACJ,SAAS,WAAW,IAAI,SAAS,CAAC,IAAI,aAAAA,MAAE,gBAAgB,QAAwB;AAClF,aAAO,MAAM,WAAW;AAAA,IAC1B;AAAA,EACF,OAAO;AACL,iBAAa,IAAI;AACjB,iBAAa,KAAK,MAAM,MAAM;AAAA,EAChC;AACF;AAEA,SAAS,kBACP,MACA,QACA,SACA,aACA,OACA,OACA,eACM;AACN,MAAI,OAAO;AACT,WAAO,WAAW,QAAQ,CAAC,wBAAwB,OAAO,KAAK,IAAI,IAAI;AAAA,EACzE;AAEA,gBAAc,QAAQ,IAAI,OAAO,GAAG,QAAQ,aAAa,OAAO,KAAK,MAAM,EAAE,IAAI,IAAI;AACrF,mBAAiB,OAAO,MAAM;AAC9B,gBAAc,QAAQ,cAAc,OAAO,KAAK,CAAC,aAAa;AAE9D,MAAI,CAAC,aAAa;AAChB,sBAAkB,MAAM,MAAM;AAC9B,QAAI,kBAAkB,IAAI,KAAK,OAAO;AACpC,oBAAc,QAAQ,KAAK,OAAO,GAAG;AAAA,IACvC;AAAA,EACF;AACF;AAEA,SAAS,kBAAkB,MAA4B,QAAsB;AAC3E,QAAM,cAAc,OAAO;AAC3B,OACG,IAAI,UAAU,EACd,OAAO,CAAC,KAAK,QAAQ;AACpB,QAAI,aAAa,GAAG,GAAG;AACrB,YAAM,YAAY,IAAI,GAAG,EAAE;AAC3B,UAAI,aAAa,YAAY,GAAG,KAAK,YAAY,SAAS,GAAG;AAC3D,oBAAY,WAAW,YAAY,SAAS,IAAI,YAAY,GAAG,CAAC;AAAA,MAClE,OAAO;AACL,YAAI,KAAK,GAAG;AAAA,MACd;AAAA,IACF;AACA,WAAO;AAAA,EACT,GAAG,CAAC,CAAyB,EAC5B,QAAQ,CAAC,OAAO,GAAG,QAAQ;AAC1B,WAAO,cAAc;AACrB,WAAO,cAAc,MAAM,IAAI,SAAS;AACxC,mBAAe,OAAO,MAAM;AAAA,EAC9B,CAAC;AACL;AAEA,SAAS,eAAe,OAA2B,QAAsB;AACvE,SAAO;AACP,MAAI,MAAM,aAAa,KAAK,MAAM,cAAc,GAAG;AACjD,wBAAoB,OAAO,QAAQ,KAAK;AAAA,EAC1C,WAAW,MAAM,yBAAyB,GAAG;AAC3C,UAAM,aAAa,MAAM,IAAI,YAAY;AACzC,QAAI,WAAW,gBAAgB,KAAK,WAAW,iBAAiB,GAAG;AACjE,oBAAc,QAAQ,GAAG,WAAW,KAAK,KAAK,IAAI,IAAI;AAAA,IACxD,WAAW,WAAW,aAAa,GAAG;AACpC,mBAAa,WAAW,MAAM,MAAM;AAAA,IACtC,WAAW,aAAAA,MAAE,qBAAqB,WAAW,IAAI,GAAG;AAAA,IAGpD,OAAO;AACL,YAAM,IAAI,MAAM,wBAAwB;AAAA,IAC1C;AAAA,EACF,WAAW,MAAM,UAAU,GAAG;AAC5B,kBAAc,QAAQ,aAAa,MAAM,IAAI,GAAG,IAAI;AAAA,EACtD,OAAO;AACL,UAAM,IAAI,MAAM,wBAAwB;AAAA,EAC1C;AACF;AACA,SAAS,YAAY,MAAkC;AACrD,MAAI,KAAK,UAAU,GAAG;AACpB,WAAO,aAAa,KAAK,IAAI;AAAA,EAC/B;AACA,MAAI,KAAK,yBAAyB,GAAG;AACnC,UAAM,aAAa,KAAK,IAAI,YAAY;AACxC,QAAI,WAAW,gBAAgB,KAAK,WAAW,iBAAiB,GAAG;AACjE,aAAO,OAAO,WAAW,KAAK,KAAK;AAAA,IACrC;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,iBAAiB,OAA4B,QAAsB;AAC1E,MAAI,QAAQ;AACZ,MAAI,QAAQ;AAEZ,aAAW,CAAC,MAAM,KAAK,KAAK,OAAO,QAAQ,KAAK,GAAG;AACjD,QAAI,SAAS,WAAW,OAAO,UAAU,UAAU;AACjD,eAAS,IAAI,KAAK;AAClB,aAAO,MAAM,IAAI;AAAA,IACnB,WAAW,SAAS,WAAW,OAAO,UAAU,UAAU;AACxD,eAAS,GAAG,KAAK,GAAG,MAAM,GAAG,EAAE,MAAM,MAAM,KAAK,GAAG;AACnD,aAAO,MAAM,IAAI;AAAA,IACnB,WAAW,UAAU,MAAM;AACzB,oBAAc,QAAQ,IAAI,IAAI,EAAE;AAChC,aAAO,MAAM,IAAI;AAAA,IACnB,WAAW,UAAU,OAAO;AAC1B,aAAO,MAAM,IAAI;AAAA,IACnB,WAAW,OAAO,UAAU,YAAY,OAAO,UAAU,UAAU;AACjE,oBAAc,QAAQ,IAAI,IAAI,KAAK,KAAK,GAAG;AAC3C,aAAO,MAAM,IAAI;AAAA,IACnB,WAAW,aAAAA,MAAE,wBAAwB,KAAK,GAAG;AAC3C,YAAM,IAAI,IAAI,aAAAA,MAAE,wBAAwB,CAAC,GAAG,KAAK;AAAA,IACnD,WAAW,aAAAA,MAAE,mBAAmB,KAAK,GAAG;AACtC,6BAAuB,MAAM,OAAO,OAAO,KAAK;AAAA,IAClD;AAAA,EACF;AAEA,MAAI,OAAO,KAAK,KAAK,EAAE,SAAS,GAAG;AACjC,WAAO,MAAM,OAAO,KAAK,IAAI;AAAA,EAC/B;AAEA,MAAI,MAAM,KAAK,GAAG;AAChB,kBAAc,QAAQ,WAAW,MAAM,KAAK,CAAC,GAAG;AAAA,EAClD;AACA,MAAI,MAAM,KAAK,GAAG;AAChB,kBAAc,QAAQ,WAAW,MAAM,KAAK,CAAC,GAAG;AAAA,EAClD;AACF;AAEA,SAAS,uBACP,MACA,OACA,OAEA,OACM;AACN,QAAM,iBAAiB,MAAM,WAAW;AAAA,IACtC,cAAY,aAAAA,MAAE,iBAAiB,QAAQ,KAAK,aAAAA,MAAE,wBAAwB,SAAS,KAAK;AAAA,EACtF;AAEA,MAAI,gBAAgB;AAClB,UAAM,IAAI,IAAI,aAAAA,MAAE,wBAAwB,CAAC,GAAG,KAAK;AAAA,EACnD,WAAW,SAAS,SAAS;AAC3B,UAAM,WAAW,QAAQ,cAAY;AACnC,UAAI,aAAAA,MAAE,iBAAiB,QAAQ,GAAG;AAChC,iBAAS,GAAI,SAAS,IAAmB,IAAI,IAAK,SAAS,MAAwB,KAAK;AAAA,MAC1F;AAAA,IACF,CAAC;AACD,WAAO,MAAM,IAAI;AAAA,EACnB;AACF;AAEA,SAAS,aAAa,MAAoB,QAAsB;AA9ThE;AA+TE,MAAI,OAAO,aAAa;AACtB,WAAO;AAAA,EACT,OAAO;AACL,kBAAc,QAAQ,KAAK;AAAA,EAC7B;AACA,qBAAO,OAAP,KAAa,OAAO,iBAApB,qBAAqC,CAAC;AACtC,qBAAO,MAAM,OAAO,WAAW,GAAE,aAAjC,eAAiC,WAAa,CAAC;AAC/C,SAAO,MAAM,OAAO,WAAW,EAAE,SAAS;AAAA,IACxC,aAAAA,MAAE,gBAAgB;AAAA,MAChB,aAAAA,MAAE,wBAAwB,CAAC,GAAG,IAAI;AAAA,MAClC,OAAO,cAAc,aAAAA,MAAE,YAAY,IAAI,aAAAA,MAAE,WAAW,OAAO,OAAO,KAAK,CAAC;AAAA,IAC1E,CAAC;AAAA,EACH;AACF;AAEA,SAAS,YAAY,MAAwC;AAC3D,SAAO,KACJ,IAAI,UAAU,EACd,OAAO,WAAS,aAAa,KAAK,CAAC,EACnC,IAAI,WAAS;AACZ,QAAI,MAAM,aAAa,KAAK,MAAM,cAAc,GAAG;AACjD,mBAAa,KAAK;AAAA,IACpB,WAAW,MAAM,yBAAyB,GAAG;AAC3C,YAAM,YAAY,MAAM,IAAI,YAAY,CAAC;AAAA,IAC3C,WAAW,MAAM,UAAU,GAAG;AAC5B,YAAM,YAAY,aAAAA,MAAE,cAAc,aAAa,MAAM,IAAI,CAAC,CAAC;AAAA,IAC7D,OAAO;AACL,YAAM,IAAI,MAAM,wBAAwB;AAAA,IAC1C;AACA,WAAO,MAAM;AAAA,EACf,CAAC;AACL;AAEO,SAAS,aAAa,MAAmC;AAC9D,QAAM,QAAQ;AACd,MAAI,KAAK,gBAAgB,KAAK,KAAK,UAAU,GAAG;AAC9C,WAAO,CAAC,MAAM,KAAK,KAAK,KAAK,KAAK;AAAA,EACpC;AACA,SAAO,OAAO,KAAK,KAAK,IAAI,EAAE,SAAS;AACzC;AAEO,SAAS,aAAa,MAAmD;AAC9E,QAAM,QAA6B,CAAC;AACpC,MAAI,gBAAgB;AACpB,OACG,IAAI,gBAAgB,EACpB,IAAI,YAAY,EAChB,QAAQ,eAAa;AACpB,QAAI,UAAU,eAAe,GAAG;AAC9B,YAAM,OAAO,YAAY,UAAU,IAAI;AACvC,YAAM,QAAQ,UAAU,IAAI,OAAO;AAEnC,UAAI,CAAC,MAAM,MAAM;AACf,cAAM,IAAI,IAAI;AAAA,MAChB,WAAW,MAAM,gBAAgB,GAAG;AAClC,cAAM,IAAI,IAAI,MAAM,KAAK;AAAA,MAC3B,OAAO;AACL,YAAI,MAAM,yBAAyB,GAAG;AACpC,gBAAM,aAAa,MAAM,IAAI,YAAY;AACzC,cAAI,WAAW,gBAAgB,GAAG;AAChC,kBAAM,IAAI,IAAI,WAAW,KAAK;AAAA,UAChC,WAAW,WAAW,iBAAiB,GAAG;AACxC,kBAAM,IAAI,IAAI,WAAW,KAAK;AAAA,UAChC,WAAW,WAAW,aAAa,KAAK,WAAW,cAAc,GAAG;AAClE,yBAAa,UAAU;AACvB,kBAAM,IAAI,IAAI,WAAW;AAAA,UAC3B,WAAW,WAAW,aAAa,GAAG;AACpC,4BAAgB;AAChB,gBAAI,iBAAiB,KAAK,IAAI,GAAG;AAC/B,oBAAM,IAAI,IAAI,WAAW;AAAA,YAC3B,WAAW,WAAW,KAAK,IAAI,GAAG;AAChC,oBAAMC,SAAQ,KAAK,MAAM,sBAAsB,OAAO;AACtD,oBAAM,WAAW,KAAK,MAAM,CAAC,EAAE,kBAAkB;AACjD,oBAAM,QAAQ,IAAI,WAAW;AAK7B,oBAAM,SAAS,sBAAsB,QAAQ,CAAC,EAAE,IAAI,aAAAD,MAAE;AAAA,gBACpD,CAACC,MAAK;AAAA,gBACN,aAAAD,MAAE,qBAAqB,KAAK,WAAW,MAAkCC,MAAK;AAAA,cAChF;AAAA,YACF,OAAO;AACL,kBAAI,WAAW,wBAAwB,GAAG;AACxC,sBAAM,IAAI,IAAI,aAAAD,MAAE,wBAAwB,CAAC,GAAG,WAAW,IAAI;AAAA,cAC7D,OAAO;AACL,sBAAM,IAAI,IAAI,WAAW;AAAA,cAC3B;AAAA,YACF;AAAA,UACF;AAAA,QACF,WAAW,MAAM,aAAa,KAAK,MAAM,cAAc,GAAG;AACxD,uBAAa,KAAK;AAClB,gBAAM,IAAI,IAAI,MAAM;AAAA,QACtB;AAAA,MACF;AAAA,IACF,WAAW,UAAU,qBAAqB,GAAG;AAC3C,YAAM,YAAY,UAAU,IAAI,UAAU,EAAE;AAC5C,sBAAgB;AAAA,IAClB,OAAO;AACL,YAAM,IAAI,MAAM,4BAA4B;AAAA,IAC9C;AAAA,EACF,CAAC;AACH,SAAO;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACF;;;AQzaA,IAAAE,eAA2B;AAepB,SAAS,cAAc,MAAoC;AAChE,QAAM,EAAE,MAAM,GAAG,IAAI,KAAK;AAC1B,QAAM,eAAgB,GAAkB;AAExC,MAAI,aAAAC,MAAE,gBAAgB,EAAE,KAAK,aAAAA,MAAE,eAAe,EAAE,KAAK,CAAC,cAAc,MAAM,YAAY,EAAG;AAEzF,QAAM,aACJ,SACC,aAAAA,MAAE,qBAAqB,IAAI,KAAK,aAAAA,MAAE,0BAA0B,IAAI,MAChE,KAAK,OAAiC,SAAS;AAElD,QAAM,WAAW,aAAa,gBAAgB;AAC9C,QAAM,UAAU,aAAAA,MAAE,eAAe,aAAAA,MAAE,WAAW,KAAK,MAAM,QAAQ,EAAE,IAAI,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC;AAE5F,UAAQ,IAAI,QAAQ;AACpB,OAAK,KAAK,OAAO;AACnB;AAEO,SAAS,iBAAiB,MAAM;AACrC,QAAM,aAAa,KAAK;AACxB,MAAI,CAAC,wBAAwB,UAAU,EAAG;AAE1C,QAAM,EAAE,KAAK,IAAI;AACjB,MAAI,CAAC,cAAc,MAAM,KAAK,IAAI,EAAG;AAErC,MAAI,CAAC,KAAK,WAAW,OAAK,EAAE,mBAAmB,KAAK,EAAE,KAAK,SAAS,SAAS,OAAO,GAAG;AACrF,SAAK,YAAY,aAAAA,MAAE,iBAAiB,aAAAA,MAAE,WAAW,KAAK,IAAI,GAAG,aAAAA,MAAE,WAAW,OAAO,CAAC,CAAC;AAAA,EACrF;AACF;AAEA,SAAS,wBAAwB,YAAY;AAC3C,SACE,cACA,CAAC,aAAAA,MAAE,qBAAqB,UAAU,KAClC,CAAC,aAAAA,MAAE,kBAAkB,UAAU,KAC/B,CAAC,aAAAA,MAAE,iBAAiB,UAAU,KAC9B,CAAC,aAAAA,MAAE,eAAe,UAAU,KAC5B,CAAC,aAAAA,MAAE,gBAAgB,UAAU;AAEjC;AAEO,SAAS,oBAAoB,MAAM;AACxC,OAAK,KAAK,WAAW,QAAQ,cAAY;AACvC,QACE,aAAAA,MAAE,iBAAiB,QAAQ,KAC3B,aAAAA,MAAE,aAAa,SAAS,GAAG,KAC3B,cAAc,MAAM,SAAS,IAAI,IAAI,GACrC;AACA,eAAS,MAAM,aAAAA,MAAE,WAAW,SAAS,IAAI,IAAI;AAAA,IAC/C;AAAA,EACF,CAAC;AACH;AAEO,SAAS,mBAAmB,MAAM;AACvC,OAAK,KAAK,SAAS,QAAQ,aAAW;AACpC,QAAI,aAAAA,MAAE,aAAa,OAAO,KAAK,QAAQ,KAAK,WAAW,GAAG,GAAG;AAC3D,cAAQ,OAAO,aAAAA,MAAE,WAAW,QAAQ,IAAI,EAAE;AAAA,IAC5C,WAAW,aAAAA,MAAE,gBAAgB,OAAO,GAAG;AACrC,0BAAoB,EAAE,MAAM,QAAQ,CAAa;AAAA,IACnD;AAAA,EACF,CAAC;AACH;;;AC5EA,IAAAC,eAA2B;AAYpB,SAAS,yBAAyB,MAAM;AAC7C,OAAK,KAAK,WAAW,QAAQ,eAAa;AACxC,UAAM,eAAe,UAAU,MAAM;AACrC,QAAI,WAAW,cAAc,GAAG,KAAK,CAAC,uBAAuB,MAAM,YAAY,GAAG;AAChF,WAAK,MAAM,OAAO,cAAc,GAAG,YAAY,QAAQ;AACvD,gBAAU,MAAM,OAAO;AAAA,IACzB;AAAA,EACF,CAAC;AACH;AASA,SAAS,uBAAuB,MAAM,cAAc;AA7BpD;AA8BE,QAAM,UAAU,KAAK,MAAM,WAAW,YAAY;AAClD,WACE,wCAAS,mBAAT,mBAAyB,KAAK,mBAAiB;AAC7C,QAAI,aAAAC,MAAE,mBAAmB,cAAc,MAAM,GAAG;AAC9C,YAAM,EAAE,QAAQ,SAAS,IAAI,cAAc;AAC3C,UAAI,aAAAA,MAAE,aAAa,QAAQ,EAAE,MAAM,aAAa,CAAC,GAAG;AAClD,sBAAc,WAAW;AAAA,UACvB,aAAAA,MAAE,iBAAiB,aAAAA,MAAE,iBAAiB,QAAQ,aAAAA,MAAE,WAAW,OAAO,CAAC,GAAG,QAAQ;AAAA,QAChF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO;AAAA,EACT,OAAM;AAEV;;;AC5CA,IAAAC,eAA0C;AA+BnC,SAAS,aAAa,MAA+D;AAhC5F;AAiCE,QAAM,QAAe,KAAK;AAC1B,QAAM,aAAa,KAAK,KAAK,OAAO,CAAC;AAErC,MAAI,CAAC,cAAc,CAAC,aAAAC,MAAE,gBAAgB,UAAU,EAAG;AAEnD,QAAM,kBAAkB,KACrB,IAAI,MAAM,EACV,IAAI,MAAM,EACV,KAAK,eAAa,UAAU,kBAAkB,CAAC;AAElD,MAAI,CAAC,mBAAmB,CAAC,aAAAA,MAAE,cAAc,qBAAgB,SAAhB,mBAA8B,QAAQ,EAAG;AAElF,QAAM,oBAAoB,CAACC,aAA8C,eAAuB;AAC9F,IAAAA,YAAW,QAAQ,cAAY;AAC7B,UAAI,aAAAD,MAAE,iBAAiB,QAAQ,KAAK,aAAAA,MAAE,aAAa,SAAS,GAAG,GAAG;AAChE,cAAM,UAAU,SAAS,IAAI;AAC7B,YAAI,aAAAA,MAAE,aAAa,SAAS,KAAK,GAAG;AAClC,eAAK,MAAM,OAAO,SAAS,MAAM,MAAM,GAAG,UAAU,GAAG,OAAO,EAAE;AAAA,QAClE,WAAW,aAAAA,MAAE,gBAAgB,SAAS,KAAK,GAAG;AAC5C,4BAAkB,SAAS,MAAM,YAAY,GAAG,UAAU,GAAG,OAAO,GAAG;AAAA,QACzE;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;AAEA,QAAM,aAAa,WAAW;AAC9B,QAAM,oBAAoB,WAAW,OAAO,cAAY,CAAC,aAAAA,MAAE,cAAc,QAAQ,CAAC;AAClF,oBAAkB,mBAAmB,UAAU;AAE/C,QAAM,eAAe,kBAAkB,IAAI,cAAa,SAAS,IAAmB,IAAI;AACxF,MAAe,aAAa,KAAK,UAAQ,WAAW,MAAM,GAAG,CAAC,GAAG;AAC/D,YAAQ,KAAK,iCAAiC;AAC9C;AAAA,EACF;AAEA,oBAAkB,MAAM,OAAO,YAAY,YAAY;AACzD;AAEA,SAAS,kBAAkB,MAAM,OAAc,YAAY,cAAc;AACvE,QAAM,cAAc,WAAW,KAAK,cAAY,aAAAA,MAAE,cAAc,QAAQ,CAAC;AACzE,OAAK,KAAK,OAAO,CAAC,IAAI,aAAAA,MAAE,WAAW,SAAS;AAE5C,MAAI,aAAa;AACf,UAAM,WAAY,YAAY,SAAwB;AACtD,QAAI,aAAa,WAAW,GAAG;AAC7B,WAAK,KAAK,OAAO,CAAC,IAAI,aAAAA,MAAE,WAAW,QAAQ;AAAA,IAC7C,OAAO;AACL,YAAM,0BAA0B,8BAA8B,OAAO,UAAU,YAAY;AAC3F,cAAQ,IAAI,aAAa;AACzB,MAAC,KAAK,KAAK,KAA0B,KAAK,QAAQ,uBAAuB;AAAA,IAC3E;AAAA,EACF;AACF;AAEA,SAAS,8BAA8B,OAAc,UAAkB,cAAwB;AAC7F,SAAO,aAAAA,MAAE,oBAAoB,SAAS;AAAA,IACpC,aAAAA,MAAE;AAAA,MACA,aAAAA,MAAE,WAAW,QAAQ;AAAA,MACrB,aAAAA,MAAE,eAAe,MAAM,aAAa;AAAA,QAClC,aAAAA,MAAE,WAAW,SAAS;AAAA,QACtB,aAAAA,MAAE,gBAAgB,aAAa,IAAI,UAAQ,aAAAA,MAAE,cAAc,IAAI,CAAC,CAAC;AAAA,MACnE,CAAC;AAAA,IACH;AAAA,EACF,CAAC;AACH;;;AXrFe,SAAR,cAA+B;AACpC,SAAO;AAAA,IACL,MAAM;AAAA,IACN,kBAAkB,EAAE,SAAS,GAAG,YAAY;AAC1C,UAAI,SAAS,SAAS,KAAK,KAAK,SAAS,SAAS,MAAM,GAAG;AACzD,mBAAW,QAAQ,KAAK,YAAY;AAAA,MACtC;AACA,iBAAW,QAAQ,KAAK,KAAK;AAAA,IAC/B;AAAA,IACA,SAAS;AAAA,MACP,SAAS;AAAA,MAET,qBAAqB;AAAA,MACrB,yBAAyB;AAAA,MACzB,oBAAoB;AAAA,MACpB,mBAAmB;AAAA,MACnB,YAAY;AAAA,MACZ,eAAe;AAAA,MACf,cAAc;AAAA,MAEd,YAAY;AAAA,MACZ,aAAa;AAAA,IACf;AAAA,EACF;AACF;","names":["import_core","t","import_core","t","isComponent","t","value","import_core","t","import_core","t","import_core","t","properties"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/jsx/index.ts","../../shared/src/is.ts","../../shared/src/comm.ts","../../shared/src/name.ts","../../shared/src/console.ts","../src/program.ts","../src/shared.ts","../src/jsx/constants.ts","../src/signal/symbol.ts","../src/signal/import.ts","../src/signal/props.ts"],"sourcesContent":["import { transformJSX } from './jsx';\nimport { transformProgram } from './program';\nimport {\n replaceSymbol,\n symbolArrayPattern,\n symbolIdentifier,\n symbolObjectPattern,\n} from './signal/symbol';\nimport { replaceImportDeclaration } from './signal/import';\nimport { replaceProps } from './signal/props';\nimport type { PluginObj } from '@babel/core';\nexport { Options, State } from './types';\nexport default function (): PluginObj {\n return {\n name: 'babel-plugin-essor',\n manipulateOptions({ filename }, parserOpts) {\n if (filename.endsWith('.ts') || filename.endsWith('.tsx')) {\n parserOpts.plugins.push('typescript');\n }\n parserOpts.plugins.push('jsx');\n },\n visitor: {\n Program: transformProgram,\n\n FunctionDeclaration: replaceProps,\n ArrowFunctionExpression: replaceProps,\n VariableDeclarator: replaceSymbol,\n ImportDeclaration: replaceImportDeclaration,\n Identifier: symbolIdentifier,\n ObjectPattern: symbolObjectPattern,\n ArrayPattern: symbolArrayPattern,\n\n JSXElement: transformJSX,\n JSXFragment: transformJSX,\n },\n };\n}\n","import { types as t } from '@babel/core';\nimport { capitalize } from '@estjs/shared';\nimport { imports } from '../program';\nimport {\n type JSXChild,\n type JSXElement,\n getAttrName,\n getTagName,\n hasSiblingElement,\n isComponent as isComponentName,\n isTextChild,\n setNodeText,\n} from '../shared';\nimport { selfClosingTags, svgTags } from './constants';\nimport type { Identifier, OptionalMemberExpression, StringLiteral } from '@babel/types';\nimport type { State } from '../types';\nimport type { NodePath } from '@babel/core';\n\nexport interface Result {\n index: number;\n isLastChild: boolean;\n parentIndex: number;\n props: Record<string, any>;\n template: string | string[];\n}\n\nlet isSSG = false;\n\nfunction addToTemplate(result: Result, content: string, join = false): void {\n if (isSSG) {\n if (join && result.template.length > 0) {\n (result.template as string[])[result.template.length - 1] += content;\n } else {\n (result.template as string[]).push(content);\n }\n } else {\n result.template += content;\n }\n}\n\nexport function transformJSX(path: NodePath<JSXElement>): void {\n const state: State = path.state;\n isSSG = state.opts.ssg;\n\n const result: Result = {\n index: 1,\n isLastChild: false,\n parentIndex: 0,\n props: {},\n template: isSSG ? [] : '',\n };\n transformJSXElement(path, result, true);\n\n path.replaceWith(createEssorNode(path, result));\n}\n// Trim and replace multiple spaces/newlines with a single space\nfunction replaceSpace(node: t.JSXText): string {\n return node.value.replaceAll(/\\s+/g, ' ').trim();\n}\n\n/**\n * Creates an expression node for a JSX element or fragment.\n * @param path - The path to the JSX element.\n * @param result - The result containing template and props.\n * @returns A CallExpression representing the JSX element or fragment.\n */\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n const isJSXFragment = path.isJSXFragment();\n const isComponent = path.isJSXElement() && isComponentName(getTagName(path.node));\n\n const tmpl = isComponent\n ? t.identifier(getTagName(path.node))\n : path.scope.generateUidIdentifier('_tmpl$');\n\n let templateNode;\n if (!isComponent) {\n templateNode = isSSG\n ? t.arrayExpression((result.template as string[]).map(t.stringLiteral))\n : t.callExpression(state.template, [t.stringLiteral(result.template as string)]);\n\n state.tmplDeclaration.declarations.push(t.variableDeclarator(tmpl, templateNode));\n if (!isSSG) {\n imports.add('template');\n }\n }\n\n const key = result.props.key ?? result.props[0]?.key;\n\n const propsArg = createProps(result.props);\n const args =\n isComponent && getTagName(path.node) === 'Fragment'\n ? [t.stringLiteral(''), propsArg]\n : [tmpl, propsArg];\n\n if (key) {\n args.push(key);\n }\n\n const fnName = isSSG\n ? 'ssg'\n : isJSXFragment || (isComponent && getTagName(path.node) === 'Fragment')\n ? 'Fragment'\n : 'h';\n imports.add(fnName);\n\n return t.callExpression(state[fnName], args);\n}\n\nfunction createProps(props: Record<string, any>): t.ObjectExpression {\n const result: (t.ObjectProperty | t.SpreadElement)[] = [];\n for (const prop in props) {\n let value = props[prop];\n if (prop === 'key') {\n continue;\n }\n if (Array.isArray(value)) {\n value = t.arrayExpression(value);\n }\n if (typeof value === 'object' && value !== null && !t.isNode(value)) {\n value = createProps(value);\n }\n if (typeof value === 'string') {\n value = t.stringLiteral(value);\n }\n if (typeof value === 'number') {\n value = t.numericLiteral(value);\n }\n if (typeof value === 'boolean') {\n value = t.booleanLiteral(value);\n }\n if (value === undefined) {\n value = t.tsUndefinedKeyword();\n }\n if (value === null) {\n value = t.nullLiteral();\n }\n if (prop === '_$spread$') {\n result.push(t.spreadElement(value));\n } else {\n result.push(t.objectProperty(t.stringLiteral(prop), value));\n }\n }\n return t.objectExpression(result);\n}\n\nfunction transformJSXElement(\n path: NodePath<JSXElement>,\n result: Result,\n isRoot: boolean = false,\n): void {\n if (path.isJSXElement()) {\n const tagName = getTagName(path.node);\n const tagIsComponent = isComponentName(tagName);\n const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);\n const isSvg = svgTags.includes(tagName) && result.index === 1;\n const { props, hasExpression } = getAttrProps(path);\n\n if (tagIsComponent) {\n handleComponentElement(path, result, isRoot, props);\n } else {\n handleHTMLElement(path, result, tagName, isSelfClose, isSvg, props, hasExpression);\n }\n } else {\n result.index--;\n transformChildren(path, result);\n }\n}\n\nfunction handleComponentElement(\n path: NodePath<JSXElement>,\n result: Result,\n isRoot: boolean,\n props: Record<string, any>,\n): void {\n if (isRoot) {\n result.props = props;\n const children = getChildren(path);\n if (children.length > 0) {\n const childrenGenerator =\n children.length === 1 ? children[0] : t.arrayExpression(children as JSXElement[]);\n\n // Check if children is a conditional expression\n if (t.isConditionalExpression(childrenGenerator)) {\n result.props.children = t.arrowFunctionExpression([], childrenGenerator);\n } else {\n result.props.children = childrenGenerator;\n }\n }\n } else {\n transformJSX(path);\n replaceChild(path.node, result);\n }\n}\n\nfunction handleHTMLElement(\n path: NodePath<JSXElement>,\n result: Result,\n tagName: string,\n isSelfClose: boolean,\n isSvg: boolean,\n props: Record<string, any>,\n hasExpression: boolean,\n): void {\n if (isSvg) {\n result.template = isSSG ? [`<svg _svg_ data-hk=\"${result.index}\">`] : `<svg _svg_ >`;\n }\n\n addToTemplate(result, `<${tagName}${isSSG ? ` data-hk=\"${result.index}\"` : ''}`, true);\n handleAttributes(props, result);\n addToTemplate(result, isSelfClose ? '/>' : '>', !hasExpression);\n\n if (!isSelfClose) {\n transformChildren(path, result);\n if (hasSiblingElement(path) || isSSG) {\n addToTemplate(result, `</${tagName}>`);\n }\n }\n}\n\nfunction transformChildren(path: NodePath<JSXElement>, result: Result): void {\n const parentIndex = result.index;\n path\n .get('children')\n .reduce((pre, cur) => {\n if (isValidChild(cur)) {\n const lastChild = pre.at(-1);\n if (lastChild && isTextChild(cur) && isTextChild(lastChild)) {\n setNodeText(lastChild, getNodeText(lastChild) + getNodeText(cur));\n } else {\n pre.push(cur);\n }\n }\n return pre;\n }, [] as NodePath<JSXChild>[])\n .forEach((child, i, arr) => {\n result.parentIndex = parentIndex;\n result.isLastChild = i === arr.length - 1;\n transformChild(child, result);\n });\n}\n\nfunction transformChild(child: NodePath<JSXChild>, result: Result): void {\n result.index++;\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSXElement(child, result, false);\n } else if (child.isJSXExpressionContainer()) {\n const expression = child.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n addToTemplate(result, `${expression.node.value}`, true);\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else if (t.isJSXEmptyExpression(expression.node)) {\n // it is empty expression\n // just for tracking value\n } else {\n throw new Error('Unsupported child type');\n }\n } else if (child.isJSXText()) {\n addToTemplate(result, replaceSpace(child.node), true);\n } else {\n throw new Error('Unsupported child type');\n }\n}\nfunction getNodeText(path: NodePath<JSXChild>): string {\n if (path.isJSXText()) {\n return replaceSpace(path.node);\n }\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n return String(expression.node.value);\n }\n }\n return '';\n}\n\nfunction isStyleClassName(name: string): name is 'style' | 'class' {\n return name === 'class' || name === 'style';\n}\n\nfunction handleAttributes(props: Record<string, any>, result: Result): void {\n let klass = '';\n let style = '';\n\n for (const [prop, value] of Object.entries(props)) {\n if (prop === 'class' && typeof value === 'string') {\n klass += ` ${value}`;\n delete props[prop];\n } else if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\n delete props[prop];\n } else if (value === true) {\n addToTemplate(result, ` ${prop}`);\n delete props[prop];\n } else if (value === false) {\n delete props[prop];\n } else if (typeof value === 'string' || typeof value === 'number') {\n addToTemplate(result, ` ${prop}=\"${value}\"`);\n delete props[prop];\n } else if (t.isConditionalExpression(value)) {\n props[prop] = t.arrowFunctionExpression([], value);\n } else if (t.isObjectExpression(value)) {\n const val = handleObjectExpression(prop, value, props, isStyleClassName(prop));\n if (val) {\n if (prop === 'class') {\n klass += ` ${val}`;\n }\n if (prop === 'style') {\n style += `${val}${val.at(-1) === ';' ? '' : ';'}`;\n }\n }\n }\n }\n\n if (Object.keys(props).length > 0) {\n result.props[result.index] = props;\n }\n\n if (klass.trim()) {\n addToTemplate(result, ` class=\"${klass.trim()}\"`);\n }\n if (style.trim()) {\n addToTemplate(result, ` style=\"${style.trim()}\"`);\n }\n}\n\nfunction handleObjectExpression(\n prop: string,\n value: t.ObjectExpression,\n props: Record<string, any>,\n isCt = false,\n): string {\n let ct = '';\n const hasConditional = value.properties.some(\n property => t.isObjectProperty(property) && t.isConditionalExpression(property.value),\n );\n\n if (hasConditional) {\n props[prop] = t.arrowFunctionExpression([], value);\n } else if (isCt) {\n value.properties.forEach(property => {\n if (t.isObjectProperty(property)) {\n ct += `${(property.key as Identifier).name || (property.key as StringLiteral).value}:${(property.value as StringLiteral).value};`;\n }\n });\n\n delete props[prop];\n }\n return ct;\n}\n\nfunction replaceChild(node: t.Expression, result: Result): void {\n if (result.isLastChild) {\n result.index--;\n } else {\n addToTemplate(result, '<!>');\n }\n result.props[result.parentIndex] ??= {};\n result.props[result.parentIndex].children ??= [];\n result.props[result.parentIndex].children.push(\n t.arrayExpression([\n t.arrowFunctionExpression([], node),\n result.isLastChild ? t.nullLiteral() : t.identifier(String(result.index)),\n ]),\n );\n}\n\nfunction getChildren(path: NodePath<JSXElement>): JSXChild[] {\n return path\n .get('children')\n .filter(child => isValidChild(child))\n .map(child => {\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSX(child);\n } else if (child.isJSXExpressionContainer()) {\n child.replaceWith(child.get('expression'));\n } else if (child.isJSXText()) {\n child.replaceWith(t.stringLiteral(replaceSpace(child.node)));\n } else {\n throw new Error('Unsupported child type');\n }\n return child.node;\n });\n}\n\nexport function isValidChild(path: NodePath<JSXChild>): boolean {\n const regex = /^\\s*$/;\n if (path.isStringLiteral() || path.isJSXText()) {\n return !regex.test(path.node.value);\n }\n return Object.keys(path.node).length > 0;\n}\n\nexport function getAttrProps(path: NodePath<t.JSXElement>): Record<string, any> {\n const props: Record<string, any> = {};\n let hasExpression = false;\n path\n .get('openingElement')\n .get('attributes')\n .forEach(attribute => {\n if (attribute.isJSXAttribute()) {\n const name = getAttrName(attribute.node);\n const value = attribute.get('value');\n\n if (!value.node) {\n props[name] = true;\n } else if (value.isStringLiteral()) {\n props[name] = value.node.value;\n } else {\n if (value.isJSXExpressionContainer()) {\n const expression = value.get('expression');\n if (expression.isStringLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isNumericLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isJSXElement() || expression.isJSXFragment()) {\n transformJSX(expression);\n props[name] = expression.node;\n } else if (expression.isExpression()) {\n hasExpression = true;\n if (/^key|ref|on.+$/.test(name)) {\n props[name] = expression.node;\n } else if (/^bind:.+/.test(name)) {\n const value = path.scope.generateUidIdentifier('value');\n const bindName = name.slice(5).toLocaleLowerCase();\n props[bindName] = expression.node;\n // props[bindName] = t.memberExpression(\n // t.identifier((expression.node as Identifier).name),\n // t.identifier('value'),\n // );\n props[`update${capitalize(bindName)}`] = t.arrowFunctionExpression(\n [value],\n t.assignmentExpression('=', expression.node as OptionalMemberExpression, value),\n );\n } else {\n if (expression.isConditionalExpression()) {\n props[name] = t.arrowFunctionExpression([], expression.node);\n } else {\n props[name] = expression.node;\n }\n }\n }\n } else if (value.isJSXElement() || value.isJSXFragment()) {\n transformJSX(value);\n props[name] = value.node;\n }\n }\n } else if (attribute.isJSXSpreadAttribute()) {\n props._$spread$ = attribute.get('argument').node;\n hasExpression = true;\n } else {\n throw new Error('Unsupported attribute type');\n }\n });\n return {\n props,\n hasExpression,\n };\n}\n","import { _toString } from './comm';\n\nexport const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object';\nexport function isPromise(val: any): val is Promise<any> {\n return _toString.call(val) === '[object Promise]';\n}\n\nexport const isArray = Array.isArray;\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\nexport function isNull(val: any): val is null {\n return val === null;\n}\nexport function isSymbol(val: unknown): val is symbol {\n return typeof val === 'symbol';\n}\n\nexport function isSet(val: any): val is Set<any> {\n return _toString.call(val) === '[object Set]';\n}\nexport function isWeakMap(val: any): val is WeakMap<any, any> {\n return _toString.call(val) === '[object WeakMap]';\n}\nexport function isWeakSet(val: any): val is WeakSet<any> {\n return _toString.call(val) === '[object WeakSet]';\n}\n\nexport function isMap(val: unknown): val is Map<any, any> {\n return _toString.call(val) === '[object Map]';\n}\nexport function isNil(x: any): x is null | undefined {\n return x === null || x === undefined;\n}\n\nexport const isFunction = (val: unknown): val is Function => typeof val === 'function';\n\nexport function isFalsy(x: any): x is false | null | undefined {\n return x === false || x === null || x === undefined;\n}\n\nexport const isPrimitive = (\n val: unknown,\n): val is string | number | boolean | symbol | null | undefined =>\n ['string', 'number', 'boolean', 'symbol', 'undefined'].includes(typeof val) || isNull(val);\n\nexport function isHTMLElement(obj) {\n if (!obj) return false;\n return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName === 'string';\n}\n\nexport const isPlainObject = (val: unknown): val is object =>\n _toString.call(val) === '[object Object]';\n\nexport type StringNumber = `${number}`;\nexport function isStringNumber(val: unknown): val is StringNumber {\n if (!isString(val)) {\n return false;\n }\n return !Number.isNaN(Number(val));\n}\n","import { isArray, isFunction, isString } from './is';\n\nexport const _toString = Object.prototype.toString;\nexport const extend = Object.assign;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nexport const hasOwn = (val: object, key: string | symbol): key is keyof typeof val =>\n hasOwnProperty.call(val, key);\n\nexport function coerceArray<T>(data: T | T[]): T[] {\n return isArray(data) ? (data.flat() as T[]) : [data];\n}\nexport const hasChanged = (value, oldValue) =>\n value !== oldValue && (value === value || oldValue === oldValue);\nexport const noop = Function.prototype as () => void;\n\n/**\n * A function that checks if a string starts with a specific substring.\n * indexOf faster under normal circumstances\n * @see https://www.measurethat.net/Benchmarks/Show/12350/0/startswith-vs-test-vs-match-vs-indexof#latest_results_block\n\n * @param {string} str - The input string to check.\n * @param {string} searchString - The substring to check for at the beginning of the input string.\n * @return {boolean} Returns true if the input string starts with the specified substring, otherwise false.\n */\nexport function startsWith(str, searchString) {\n if (!isString(str)) {\n return false;\n }\n return str.indexOf(searchString) === 0;\n}\n\n/**\n * Escapes special HTML characters in a string.\n * @param str - The string to escape.\n * @returns The escaped string.\n */\nexport function escape(str: string): string {\n return str.replaceAll(/[\"&'<>]/g, char => {\n switch (char) {\n case '&':\n return '&amp;';\n case '<':\n return '&lt;';\n case '>':\n return '&gt;';\n case '\"':\n return '&quot;';\n case \"'\":\n return '&#039;';\n default:\n return char;\n }\n });\n}\n\nexport type ExcludeType = ((key: string | symbol) => boolean) | (string | symbol)[];\n\n/**\n * Checks if a key should be excluded based on the provided exclude criteria.\n * @param key - The key to check.\n * @param exclude - The exclusion criteria.\n * @returns True if the key should be excluded, otherwise false.\n */\nexport function isExclude(key: string | symbol, exclude?: ExcludeType): boolean {\n return isArray(exclude) ? exclude.includes(key) : isFunction(exclude) ? exclude(key) : false;\n}\n\n/**\n * Generates a unique random 8 character string ID.\n * The generated IDs only contain alphanumeric characters.\n * @returns A unique random 8 character string ID.\n */\nexport function generateUniqueId() {\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result = '';\n const charactersLength = characters.length;\n for (let i = 0; i < 8; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n}\n\n/**\n * Checks if the current environment is a browser.\n * @returns True if the current environment is a browser, otherwise false.\n */\nexport function isBrowser() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\nexport const cacheStringFunction = <T extends (str: string) => string>(fn: T): T => {\n const cache: Record<string, string> = Object.create(null);\n return ((str: string) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n }) as T;\n};\n","import { cacheStringFunction } from './comm';\n\nconst hyphenateRE = /\\B([A-Z])/g;\nexport const kebabCase: (str: string) => string = cacheStringFunction((str: string) =>\n str.replaceAll(hyphenateRE, '-$1').toLowerCase(),\n);\n\nconst camelizeRE = /-(\\w)/g;\nexport const camelCase: (str: string) => string = cacheStringFunction((str: string): string => {\n return str.replaceAll(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\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 capitalize: <T extends string>(str: T) => Capitalize<T> = cacheStringFunction(\n <T extends string>(str: T) => {\n return (str.charAt(0).toUpperCase() + str.slice(1)) as Capitalize<T>;\n },\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 Fragment: path.scope.generateUidIdentifier('fragment$'),\n\n signal: path.scope.generateUidIdentifier('signal$'),\n computed: path.scope.generateUidIdentifier('computed$'),\n reactive: 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 = signal(1);\n * case 2: const $a = ()=>{return $a} => const $a = computed(()=>{return $a})\n *\n * @param {NodePath<VariableDeclarator>} path - The path to the variable declarator node.\n * @return {void}\n */\nexport function replaceSymbol(path: NodePath<VariableDeclarator>) {\n const { init, id } = path.node;\n const variableName = (id as Identifier).name;\n\n if (t.isObjectPattern(id) || t.isArrayPattern(id) || !isSymbolStart(path, variableName)) return;\n\n const isComputed =\n init &&\n (t.isFunctionExpression(init) || t.isArrowFunctionExpression(init)) &&\n (path.parent as t.VariableDeclaration).kind === 'const';\n\n const hookName = isComputed ? 'computed' : 'signal';\n const newInit = t.callExpression(t.identifier(path.state[hookName].name), init ? [init] : []);\n\n imports.add(hookName);\n path.node.init = newInit;\n}\n\nexport function symbolIdentifier(path) {\n const parentPath = path.parentPath;\n if (!shouldProcessIdentifier(parentPath)) return;\n\n const { node } = path;\n if (!isSymbolStart(path, node.name)) return;\n\n if (!path.findParent(p => p.isMemberExpression() && p.node.property.name === 'value')) {\n path.replaceWith(t.memberExpression(t.identifier(node.name), t.identifier('value')));\n }\n}\n\nfunction shouldProcessIdentifier(parentPath) {\n return (\n parentPath &&\n !t.isVariableDeclarator(parentPath) &&\n !t.isImportSpecifier(parentPath) &&\n !t.isObjectProperty(parentPath) &&\n !t.isArrayPattern(parentPath) &&\n !t.isObjectPattern(parentPath)\n );\n}\n\nexport function symbolObjectPattern(path) {\n path.node.properties.forEach(property => {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n isSymbolStart(path, property.key.name)\n ) {\n property.key = t.identifier(property.key.name);\n }\n });\n}\n\nexport function symbolArrayPattern(path) {\n path.node.elements.forEach(element => {\n if (t.isIdentifier(element) && element.name.startsWith('$')) {\n element.name = t.identifier(element.name).name;\n } else if (t.isObjectPattern(element)) {\n symbolObjectPattern({ node: element } as NodePath);\n }\n });\n}\n","import { types as t } from '@babel/core';\nimport { startsWith } from '@estjs/shared';\n\n/**\n * Replaces import declarations\n *\n * case1: import { $a } from 'a';console.log(a) => import { $a } from 'a';console.log($a.value)\n * case2: import $a from 'a';console.log(a) => import $a from 'a';console.log($a.value)\n *\n * @param {object} path - The path to replace import declarations.\n * @return {void}\n */\nexport function replaceImportDeclaration(path) {\n path.node.specifiers.forEach(specifier => {\n const variableName = specifier.local.name;\n if (startsWith(variableName, '$') && !isVariableUsedAsObject(path, variableName)) {\n path.scope.rename(variableName, `${variableName}.value`);\n specifier.local.name = variableName;\n }\n });\n}\n\n/**\n * Checks if a variable is used as an object.\n *\n * @param path - The path to the variable.\n * @param variableName - The name of the variable.\n * @returns {boolean} - Whether the variable is used as an object.\n */\nfunction isVariableUsedAsObject(path, variableName) {\n const binding = path.scope.getBinding(variableName);\n return (\n binding?.referencePaths?.some(referencePath => {\n if (t.isMemberExpression(referencePath.parent)) {\n const { object, property } = referencePath.parent;\n if (t.isIdentifier(object, { name: variableName })) {\n referencePath.parentPath.replaceWith(\n t.memberExpression(t.memberExpression(object, t.identifier('value')), property),\n );\n return true;\n }\n }\n return false;\n }) || false\n );\n}\n","import { startsWith } from '@estjs/shared';\nimport { type NodePath, types as t } from '@babel/core';\nimport { imports } from '../program';\nimport type { State } from '../types';\nimport type {\n ArrowFunctionExpression,\n FunctionDeclaration,\n Identifier,\n ObjectProperty,\n RestElement,\n} from '@babel/types';\n\n/**\n * Replaces the properties of a function's first parameter with new names.\n *\n * auto replace pattern to props object\n *\n * rule1: function argument\n * rule2: first argument is object and it pattern\n * rule3: function has return\n *\n * transform case\n * case1 ({a, b}) => <div>{a.value}</div> to=> (_props)=><div>{_props.a.value}</div>\n * case2 ({a, b, ...rest}) => <div>{a.value}{rest}</div> to=> (_props)=> {const restProps = reactive(props,[a,b]);return <div>{_props.a.value}{reset}</div>}\n *\n * not transform case\n * case1 ([a,b])=> <div>{a.value}</div>\n * case2 ({a.,b}) ={}\n *\n * @param {NodePath<FunctionDeclaration | ArrowFunctionExpression>} path - The path to the function node.\n * @return {void}\n */\nexport function replaceProps(path: NodePath<FunctionDeclaration | ArrowFunctionExpression>) {\n const state: State = path.state;\n const firstParam = path.node.params[0];\n\n if (!firstParam || !t.isObjectPattern(firstParam)) return;\n\n const returnStatement = path\n .get('body')\n .get('body')\n .find(statement => statement.isReturnStatement());\n\n if (!returnStatement || !t.isJSXElement((returnStatement.node as any)?.argument)) return;\n\n const replaceProperties = (properties: (ObjectProperty | RestElement)[], parentPath: string) => {\n properties.forEach(property => {\n if (t.isObjectProperty(property) && t.isIdentifier(property.key)) {\n const keyName = property.key.name;\n if (t.isIdentifier(property.value)) {\n path.scope.rename(property.value.name, `${parentPath}${keyName}`);\n } else if (t.isObjectPattern(property.value)) {\n replaceProperties(property.value.properties, `${parentPath}${keyName}.`);\n }\n }\n });\n };\n\n const properties = firstParam.properties;\n const notRestProperties = properties.filter(\n property => !t.isRestElement(property),\n ) as ObjectProperty[];\n replaceProperties(notRestProperties, '__props.');\n\n const notRestNames = notRestProperties.map(property => (property.key as Identifier).name);\n if (__DEV__ && notRestNames.some(name => startsWith(name, '$'))) {\n console.warn('props name can not start with $');\n return;\n }\n\n handleRestElement(path, state, properties, notRestNames);\n}\n\nfunction handleRestElement(path, state: State, properties, notRestNames) {\n const restElement = properties.find(property => t.isRestElement(property)) as\n | RestElement\n | undefined;\n path.node.params[0] = t.identifier('__props');\n\n if (restElement) {\n const restName = (restElement.argument as Identifier).name;\n if (notRestNames.length === 0) {\n path.node.params[0] = t.identifier(restName);\n } else {\n const restVariableDeclaration = createRestVariableDeclaration(state, restName, notRestNames);\n imports.add('reactive');\n (path.node.body as t.BlockStatement).body.unshift(restVariableDeclaration);\n }\n }\n}\n\nfunction createRestVariableDeclaration(state: State, restName: string, notRestNames: string[]) {\n return t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(restName),\n t.callExpression(state.reactive, [\n t.identifier('__props'),\n t.arrayExpression(notRestNames.map(name => t.stringLiteral(name))),\n ]),\n ),\n ]);\n}\n"],"mappings":"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","names":["import_core","t","import_core","t","isComponent","t","value","import_core","t","import_core","t","import_core","t","properties"]}
package/dist/index.d.cts CHANGED
@@ -4,9 +4,10 @@ interface State {
4
4
  h: types.Identifier;
5
5
  template: types.Identifier;
6
6
  ssg: types.Identifier;
7
- useSignal: types.Identifier;
8
- useComputed: types.Identifier;
9
- useReactive: types.Identifier;
7
+ Fragment: types.Identifier;
8
+ signal: types.Identifier;
9
+ computed: types.Identifier;
10
+ reactive: types.Identifier;
10
11
  tmplDeclaration: types.VariableDeclaration;
11
12
  opts: Options;
12
13
  }
package/dist/index.d.ts CHANGED
@@ -4,9 +4,10 @@ interface State {
4
4
  h: types.Identifier;
5
5
  template: types.Identifier;
6
6
  ssg: types.Identifier;
7
- useSignal: types.Identifier;
8
- useComputed: types.Identifier;
9
- useReactive: types.Identifier;
7
+ Fragment: types.Identifier;
8
+ signal: types.Identifier;
9
+ computed: types.Identifier;
10
+ reactive: types.Identifier;
10
11
  tmplDeclaration: types.VariableDeclaration;
11
12
  opts: Options;
12
13
  }
package/dist/index.js CHANGED
@@ -30,9 +30,26 @@ function startsWith(str, searchString) {
30
30
  }
31
31
  return str.indexOf(searchString) === 0;
32
32
  }
33
- var capitalizeFirstLetter = (inputString) => {
34
- return inputString.charAt(0).toUpperCase() + inputString.slice(1);
33
+ var cacheStringFunction = (fn) => {
34
+ const cache = /* @__PURE__ */ Object.create(null);
35
+ return (str) => {
36
+ const hit = cache[str];
37
+ return hit || (cache[str] = fn(str));
38
+ };
35
39
  };
40
+ var hyphenateRE = /\B([A-Z])/g;
41
+ var kebabCase = cacheStringFunction(
42
+ (str) => str.replaceAll(hyphenateRE, "-$1").toLowerCase()
43
+ );
44
+ var camelizeRE = /-(\w)/g;
45
+ var camelCase = cacheStringFunction((str) => {
46
+ return str.replaceAll(camelizeRE, (_, c) => c ? c.toUpperCase() : "");
47
+ });
48
+ var capitalize = cacheStringFunction(
49
+ (str) => {
50
+ return str.charAt(0).toUpperCase() + str.slice(1);
51
+ }
52
+ );
36
53
 
37
54
  // src/program.ts
38
55
  import { types as t } from "@babel/core";
@@ -50,9 +67,10 @@ var transformProgram = {
50
67
  h: path.scope.generateUidIdentifier("h$"),
51
68
  template: path.scope.generateUidIdentifier("template$"),
52
69
  ssg: path.scope.generateUidIdentifier("ssg$"),
53
- useSignal: path.scope.generateUidIdentifier("signal$"),
54
- useComputed: path.scope.generateUidIdentifier("computed$"),
55
- useReactive: path.scope.generateUidIdentifier("reactive$"),
70
+ Fragment: path.scope.generateUidIdentifier("fragment$"),
71
+ signal: path.scope.generateUidIdentifier("signal$"),
72
+ computed: path.scope.generateUidIdentifier("computed$"),
73
+ reactive: path.scope.generateUidIdentifier("reactive$"),
56
74
  tmplDeclaration: t.variableDeclaration("const", []),
57
75
  opts: state.opts
58
76
  };
@@ -213,53 +231,63 @@ function replaceSpace(node) {
213
231
  return node.value.replaceAll(/\s+/g, " ").trim();
214
232
  }
215
233
  function createEssorNode(path, result) {
234
+ var _a, _b;
216
235
  const state = path.state;
236
+ const isJSXFragment = path.isJSXFragment();
217
237
  const isComponent2 = path.isJSXElement() && isComponent(getTagName(path.node));
218
238
  const tmpl = isComponent2 ? t3.identifier(getTagName(path.node)) : path.scope.generateUidIdentifier("_tmpl$");
239
+ let templateNode;
219
240
  if (!isComponent2) {
220
- const template = isSSG ? t3.arrayExpression(result.template.map(t3.stringLiteral)) : t3.callExpression(state.template, [t3.stringLiteral(result.template)]);
221
- state.tmplDeclaration.declarations.push(t3.variableDeclarator(tmpl, template));
241
+ templateNode = isSSG ? t3.arrayExpression(result.template.map(t3.stringLiteral)) : t3.callExpression(state.template, [t3.stringLiteral(result.template)]);
242
+ state.tmplDeclaration.declarations.push(t3.variableDeclarator(tmpl, templateNode));
222
243
  if (!isSSG) {
223
244
  imports.add("template");
224
245
  }
225
246
  }
226
- const key = result.props.key;
227
- delete result.props.key;
228
- const args = [tmpl, createProps(result.props)];
247
+ const key = (_b = result.props.key) != null ? _b : (_a = result.props[0]) == null ? void 0 : _a.key;
248
+ const propsArg = createProps(result.props);
249
+ const args = isComponent2 && getTagName(path.node) === "Fragment" ? [t3.stringLiteral(""), propsArg] : [tmpl, propsArg];
229
250
  if (key) {
230
251
  args.push(key);
231
252
  }
232
- const fnName = isSSG ? "ssg" : "h";
253
+ const fnName = isSSG ? "ssg" : isJSXFragment || isComponent2 && getTagName(path.node) === "Fragment" ? "Fragment" : "h";
233
254
  imports.add(fnName);
234
255
  return t3.callExpression(state[fnName], args);
235
256
  }
236
257
  function createProps(props) {
237
- const toAstNode = (value) => {
238
- if (isArray(value)) {
239
- return t3.arrayExpression(value.map(toAstNode));
258
+ const result = [];
259
+ for (const prop in props) {
260
+ let value = props[prop];
261
+ if (prop === "key") {
262
+ continue;
240
263
  }
241
- if (value && typeof value === "object" && !t3.isNode(value)) {
242
- return createProps(value);
264
+ if (Array.isArray(value)) {
265
+ value = t3.arrayExpression(value);
243
266
  }
244
- switch (typeof value) {
245
- case "string":
246
- return t3.stringLiteral(value);
247
- case "number":
248
- return t3.numericLiteral(value);
249
- case "boolean":
250
- return t3.booleanLiteral(value);
251
- case "undefined":
252
- case void 0:
253
- return t3.tsUndefinedKeyword();
254
- case null:
255
- return t3.nullLiteral();
256
- default:
257
- return value;
267
+ if (typeof value === "object" && value !== null && !t3.isNode(value)) {
268
+ value = createProps(value);
258
269
  }
259
- };
260
- const result = Object.entries(props).map(
261
- ([prop, value]) => prop === "_$spread$" ? t3.spreadElement(toAstNode(value)) : t3.objectProperty(t3.stringLiteral(prop), toAstNode(value))
262
- );
270
+ if (typeof value === "string") {
271
+ value = t3.stringLiteral(value);
272
+ }
273
+ if (typeof value === "number") {
274
+ value = t3.numericLiteral(value);
275
+ }
276
+ if (typeof value === "boolean") {
277
+ value = t3.booleanLiteral(value);
278
+ }
279
+ if (value === void 0) {
280
+ value = t3.tsUndefinedKeyword();
281
+ }
282
+ if (value === null) {
283
+ value = t3.nullLiteral();
284
+ }
285
+ if (prop === "_$spread$") {
286
+ result.push(t3.spreadElement(value));
287
+ } else {
288
+ result.push(t3.objectProperty(t3.stringLiteral(prop), value));
289
+ }
290
+ }
263
291
  return t3.objectExpression(result);
264
292
  }
265
293
  function transformJSXElement(path, result, isRoot = false) {
@@ -269,10 +297,6 @@ function transformJSXElement(path, result, isRoot = false) {
269
297
  const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);
270
298
  const isSvg = svgTags.includes(tagName) && result.index === 1;
271
299
  const { props, hasExpression } = getAttrProps(path);
272
- if (props.key) {
273
- result.props.key = props.key;
274
- delete props.key;
275
- }
276
300
  if (tagIsComponent) {
277
301
  handleComponentElement(path, result, isRoot, props);
278
302
  } else {
@@ -289,7 +313,11 @@ function handleComponentElement(path, result, isRoot, props) {
289
313
  const children = getChildren(path);
290
314
  if (children.length > 0) {
291
315
  const childrenGenerator = children.length === 1 ? children[0] : t3.arrayExpression(children);
292
- result.props.children = childrenGenerator;
316
+ if (t3.isConditionalExpression(childrenGenerator)) {
317
+ result.props.children = t3.arrowFunctionExpression([], childrenGenerator);
318
+ } else {
319
+ result.props.children = childrenGenerator;
320
+ }
293
321
  }
294
322
  } else {
295
323
  transformJSX(path);
@@ -360,6 +388,9 @@ function getNodeText(path) {
360
388
  }
361
389
  return "";
362
390
  }
391
+ function isStyleClassName(name) {
392
+ return name === "class" || name === "style";
393
+ }
363
394
  function handleAttributes(props, result) {
364
395
  let klass = "";
365
396
  let style = "";
@@ -381,7 +412,15 @@ function handleAttributes(props, result) {
381
412
  } else if (t3.isConditionalExpression(value)) {
382
413
  props[prop] = t3.arrowFunctionExpression([], value);
383
414
  } else if (t3.isObjectExpression(value)) {
384
- handleObjectExpression(prop, value, props, style);
415
+ const val = handleObjectExpression(prop, value, props, isStyleClassName(prop));
416
+ if (val) {
417
+ if (prop === "class") {
418
+ klass += ` ${val}`;
419
+ }
420
+ if (prop === "style") {
421
+ style += `${val}${val.at(-1) === ";" ? "" : ";"}`;
422
+ }
423
+ }
385
424
  }
386
425
  }
387
426
  if (Object.keys(props).length > 0) {
@@ -394,20 +433,22 @@ function handleAttributes(props, result) {
394
433
  addToTemplate(result, ` style="${style.trim()}"`);
395
434
  }
396
435
  }
397
- function handleObjectExpression(prop, value, props, style) {
436
+ function handleObjectExpression(prop, value, props, isCt = false) {
437
+ let ct = "";
398
438
  const hasConditional = value.properties.some(
399
439
  (property) => t3.isObjectProperty(property) && t3.isConditionalExpression(property.value)
400
440
  );
401
441
  if (hasConditional) {
402
442
  props[prop] = t3.arrowFunctionExpression([], value);
403
- } else if (prop === "style") {
443
+ } else if (isCt) {
404
444
  value.properties.forEach((property) => {
405
445
  if (t3.isObjectProperty(property)) {
406
- style += `${property.key.name}:${property.value.value};`;
446
+ ct += `${property.key.name || property.key.value}:${property.value.value};`;
407
447
  }
408
448
  });
409
449
  delete props[prop];
410
450
  }
451
+ return ct;
411
452
  }
412
453
  function replaceChild(node, result) {
413
454
  var _a, _b, _c, _d, _e;
@@ -475,7 +516,7 @@ function getAttrProps(path) {
475
516
  const value2 = path.scope.generateUidIdentifier("value");
476
517
  const bindName = name.slice(5).toLocaleLowerCase();
477
518
  props[bindName] = expression.node;
478
- props[`update${capitalizeFirstLetter(bindName)}`] = t3.arrowFunctionExpression(
519
+ props[`update${capitalize(bindName)}`] = t3.arrowFunctionExpression(
479
520
  [value2],
480
521
  t3.assignmentExpression("=", expression.node, value2)
481
522
  );
@@ -512,7 +553,7 @@ function replaceSymbol(path) {
512
553
  const variableName = id.name;
513
554
  if (t4.isObjectPattern(id) || t4.isArrayPattern(id) || !isSymbolStart(path, variableName)) return;
514
555
  const isComputed = init && (t4.isFunctionExpression(init) || t4.isArrowFunctionExpression(init)) && path.parent.kind === "const";
515
- const hookName = isComputed ? "useComputed" : "useSignal";
556
+ const hookName = isComputed ? "computed" : "signal";
516
557
  const newInit = t4.callExpression(t4.identifier(path.state[hookName].name), init ? [init] : []);
517
558
  imports.add(hookName);
518
559
  path.node.init = newInit;
@@ -596,7 +637,9 @@ function replaceProps(path) {
596
637
  });
597
638
  };
598
639
  const properties = firstParam.properties;
599
- const notRestProperties = properties.filter((property) => !t6.isRestElement(property));
640
+ const notRestProperties = properties.filter(
641
+ (property) => !t6.isRestElement(property)
642
+ );
600
643
  replaceProperties(notRestProperties, "__props.");
601
644
  const notRestNames = notRestProperties.map((property) => property.key.name);
602
645
  if (notRestNames.some((name) => startsWith(name, "$"))) {
@@ -614,7 +657,7 @@ function handleRestElement(path, state, properties, notRestNames) {
614
657
  path.node.params[0] = t6.identifier(restName);
615
658
  } else {
616
659
  const restVariableDeclaration = createRestVariableDeclaration(state, restName, notRestNames);
617
- imports.add("useReactive");
660
+ imports.add("reactive");
618
661
  path.node.body.body.unshift(restVariableDeclaration);
619
662
  }
620
663
  }
@@ -623,7 +666,7 @@ function createRestVariableDeclaration(state, restName, notRestNames) {
623
666
  return t6.variableDeclaration("const", [
624
667
  t6.variableDeclarator(
625
668
  t6.identifier(restName),
626
- t6.callExpression(state.useReactive, [
669
+ t6.callExpression(state.reactive, [
627
670
  t6.identifier("__props"),
628
671
  t6.arrayExpression(notRestNames.map((name) => t6.stringLiteral(name)))
629
672
  ])
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/jsx/index.ts","../../shared/src/is.ts","../../shared/src/comm.ts","../../shared/src/name.ts","../../shared/src/console.ts","../src/program.ts","../src/shared.ts","../src/jsx/constants.ts","../src/signal/symbol.ts","../src/signal/import.ts","../src/signal/props.ts","../src/index.ts"],"sourcesContent":["import { types as t } from '@babel/core';\nimport { capitalizeFirstLetter, isArray } from '@estjs/shared';\nimport { imports } from '../program';\nimport {\n type JSXChild,\n type JSXElement,\n getAttrName,\n getTagName,\n hasSiblingElement,\n isComponent as isComponentName,\n isTextChild,\n setNodeText,\n} from '../shared';\nimport { selfClosingTags, svgTags } from './constants';\nimport type { Identifier, OptionalMemberExpression, StringLiteral } from '@babel/types';\nimport type { State } from '../types';\nimport type { NodePath } from '@babel/core';\n\nexport interface Result {\n index: number;\n isLastChild: boolean;\n parentIndex: number;\n props: Record<string, any>;\n template: string | string[];\n}\n\nlet isSSG = false;\n\nfunction addToTemplate(result: Result, content: string, join = false): void {\n if (isSSG) {\n if (join && result.template.length > 0) {\n (result.template as string[])[result.template.length - 1] += content;\n } else {\n (result.template as string[]).push(content);\n }\n } else {\n result.template += content;\n }\n}\n\nexport function transformJSX(path: NodePath<JSXElement>): void {\n const state: State = path.state;\n isSSG = state.opts.ssg;\n\n const result: Result = {\n index: 1,\n isLastChild: false,\n parentIndex: 0,\n props: {},\n template: isSSG ? [] : '',\n };\n transformJSXElement(path, result, true);\n\n path.replaceWith(createEssorNode(path, result));\n}\n// Trim and replace multiple spaces/newlines with a single space\nfunction replaceSpace(node: t.JSXText): string {\n return node.value.replaceAll(/\\s+/g, ' ').trim();\n}\n\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n const isComponent = path.isJSXElement() && isComponentName(getTagName(path.node));\n\n const tmpl = isComponent\n ? t.identifier(getTagName(path.node))\n : path.scope.generateUidIdentifier('_tmpl$');\n\n if (!isComponent) {\n const template = isSSG\n ? t.arrayExpression((result.template as string[]).map(t.stringLiteral))\n : t.callExpression(state.template, [t.stringLiteral(result.template as string)]);\n state.tmplDeclaration.declarations.push(t.variableDeclarator(tmpl, template));\n if (!isSSG) {\n imports.add('template');\n }\n }\n\n const key = result.props.key;\n delete result.props.key;\n\n const args = [tmpl, createProps(result.props)];\n if (key) {\n args.push(key);\n }\n\n const fnName = isSSG ? 'ssg' : 'h';\n imports.add(fnName);\n return t.callExpression(state[fnName], args);\n}\n\nfunction createProps(props: Record<string, any>): t.ObjectExpression {\n const toAstNode = value => {\n if (isArray(value)) {\n return t.arrayExpression(value.map(toAstNode));\n }\n if (value && typeof value === 'object' && !t.isNode(value)) {\n return createProps(value);\n }\n\n switch (typeof value) {\n case 'string':\n return t.stringLiteral(value);\n case 'number':\n return t.numericLiteral(value);\n case 'boolean':\n return t.booleanLiteral(value);\n case 'undefined':\n case undefined:\n return t.tsUndefinedKeyword();\n case null:\n return t.nullLiteral();\n default:\n return value;\n }\n };\n\n const result = Object.entries(props).map(([prop, value]) =>\n prop === '_$spread$'\n ? t.spreadElement(toAstNode(value))\n : t.objectProperty(t.stringLiteral(prop), toAstNode(value)),\n );\n\n return t.objectExpression(result);\n}\n\nfunction transformJSXElement(\n path: NodePath<JSXElement>,\n result: Result,\n isRoot: boolean = false,\n): void {\n if (path.isJSXElement()) {\n const tagName = getTagName(path.node);\n const tagIsComponent = isComponentName(tagName);\n const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);\n const isSvg = svgTags.includes(tagName) && result.index === 1;\n const { props, hasExpression } = getAttrProps(path);\n\n // key\n if (props.key) {\n result.props.key = props.key;\n delete props.key;\n }\n\n if (tagIsComponent) {\n handleComponentElement(path, result, isRoot, props);\n } else {\n handleHTMLElement(path, result, tagName, isSelfClose, isSvg, props, hasExpression);\n }\n } else {\n result.index--;\n transformChildren(path, result);\n }\n}\n\nfunction handleComponentElement(\n path: NodePath<JSXElement>,\n result: Result,\n isRoot: boolean,\n props: Record<string, any>,\n): void {\n if (isRoot) {\n result.props = props;\n const children = getChildren(path);\n if (children.length > 0) {\n const childrenGenerator =\n children.length === 1 ? children[0] : t.arrayExpression(children as JSXElement[]);\n result.props.children = childrenGenerator;\n }\n } else {\n transformJSX(path);\n replaceChild(path.node, result);\n }\n}\n\nfunction handleHTMLElement(\n path: NodePath<JSXElement>,\n result: Result,\n tagName: string,\n isSelfClose: boolean,\n isSvg: boolean,\n props: Record<string, any>,\n hasExpression: boolean,\n): void {\n if (isSvg) {\n result.template = isSSG ? [`<svg _svg_ data-hk=\"${result.index}\">`] : `<svg _svg_ >`;\n }\n\n addToTemplate(result, `<${tagName}${isSSG ? ` data-hk=\"${result.index}\"` : ''}`, true);\n handleAttributes(props, result);\n addToTemplate(result, isSelfClose ? '/>' : '>', !hasExpression);\n\n if (!isSelfClose) {\n transformChildren(path, result);\n if (hasSiblingElement(path) || isSSG) {\n addToTemplate(result, `</${tagName}>`);\n }\n }\n}\n\nfunction transformChildren(path: NodePath<JSXElement>, result: Result): void {\n const parentIndex = result.index;\n path\n .get('children')\n .reduce((pre, cur) => {\n if (isValidChild(cur)) {\n const lastChild = pre.at(-1);\n if (lastChild && isTextChild(cur) && isTextChild(lastChild)) {\n setNodeText(lastChild, getNodeText(lastChild) + getNodeText(cur));\n } else {\n pre.push(cur);\n }\n }\n return pre;\n }, [] as NodePath<JSXChild>[])\n .forEach((child, i, arr) => {\n result.parentIndex = parentIndex;\n result.isLastChild = i === arr.length - 1;\n transformChild(child, result);\n });\n}\n\nfunction transformChild(child: NodePath<JSXChild>, result: Result): void {\n result.index++;\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSXElement(child, result, false);\n } else if (child.isJSXExpressionContainer()) {\n const expression = child.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n addToTemplate(result, `${expression.node.value}`, true);\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else if (t.isJSXEmptyExpression(expression.node)) {\n // it is empty expression\n // just for tracking value\n } else {\n throw new Error('Unsupported child type');\n }\n } else if (child.isJSXText()) {\n addToTemplate(result, replaceSpace(child.node), true);\n } else {\n throw new Error('Unsupported child type');\n }\n}\nfunction getNodeText(path: NodePath<JSXChild>): string {\n if (path.isJSXText()) {\n return replaceSpace(path.node);\n }\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n return String(expression.node.value);\n }\n }\n return '';\n}\n\nfunction handleAttributes(props: Record<string, any>, result: Result): void {\n let klass = '';\n let style = '';\n\n for (const [prop, value] of Object.entries(props)) {\n if (prop === 'class' && typeof value === 'string') {\n klass += ` ${value}`;\n delete props[prop];\n } else if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\n delete props[prop];\n } else if (value === true) {\n addToTemplate(result, ` ${prop}`);\n delete props[prop];\n } else if (value === false) {\n delete props[prop];\n } else if (typeof value === 'string' || typeof value === 'number') {\n addToTemplate(result, ` ${prop}=\"${value}\"`);\n delete props[prop];\n } else if (t.isConditionalExpression(value)) {\n props[prop] = t.arrowFunctionExpression([], value);\n } else if (t.isObjectExpression(value)) {\n handleObjectExpression(prop, value, props, style);\n }\n }\n\n if (Object.keys(props).length > 0) {\n result.props[result.index] = props;\n }\n\n if (klass.trim()) {\n addToTemplate(result, ` class=\"${klass.trim()}\"`);\n }\n if (style.trim()) {\n addToTemplate(result, ` style=\"${style.trim()}\"`);\n }\n}\n\nfunction handleObjectExpression(\n prop: string,\n value: t.ObjectExpression,\n props: Record<string, any>,\n // eslint-disable-next-line unused-imports/no-unused-vars\n style: string,\n): void {\n const hasConditional = value.properties.some(\n property => t.isObjectProperty(property) && t.isConditionalExpression(property.value),\n );\n\n if (hasConditional) {\n props[prop] = t.arrowFunctionExpression([], value);\n } else if (prop === 'style') {\n value.properties.forEach(property => {\n if (t.isObjectProperty(property)) {\n style += `${(property.key as Identifier).name}:${(property.value as StringLiteral).value};`;\n }\n });\n delete props[prop];\n }\n}\n\nfunction replaceChild(node: t.Expression, result: Result): void {\n if (result.isLastChild) {\n result.index--;\n } else {\n addToTemplate(result, '<!>');\n }\n result.props[result.parentIndex] ??= {};\n result.props[result.parentIndex].children ??= [];\n result.props[result.parentIndex].children.push(\n t.arrayExpression([\n t.arrowFunctionExpression([], node),\n result.isLastChild ? t.nullLiteral() : t.identifier(String(result.index)),\n ]),\n );\n}\n\nfunction getChildren(path: NodePath<JSXElement>): JSXChild[] {\n return path\n .get('children')\n .filter(child => isValidChild(child))\n .map(child => {\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSX(child);\n } else if (child.isJSXExpressionContainer()) {\n child.replaceWith(child.get('expression'));\n } else if (child.isJSXText()) {\n child.replaceWith(t.stringLiteral(replaceSpace(child.node)));\n } else {\n throw new Error('Unsupported child type');\n }\n return child.node;\n });\n}\n\nexport function isValidChild(path: NodePath<JSXChild>): boolean {\n const regex = /^\\s*$/;\n if (path.isStringLiteral() || path.isJSXText()) {\n return !regex.test(path.node.value);\n }\n return Object.keys(path.node).length > 0;\n}\n\nexport function getAttrProps(path: NodePath<t.JSXElement>): Record<string, any> {\n const props: Record<string, any> = {};\n let hasExpression = false;\n path\n .get('openingElement')\n .get('attributes')\n .forEach(attribute => {\n if (attribute.isJSXAttribute()) {\n const name = getAttrName(attribute.node);\n const value = attribute.get('value');\n\n if (!value.node) {\n props[name] = true;\n } else if (value.isStringLiteral()) {\n props[name] = value.node.value;\n } else {\n if (value.isJSXExpressionContainer()) {\n const expression = value.get('expression');\n if (expression.isStringLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isNumericLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isJSXElement() || expression.isJSXFragment()) {\n transformJSX(expression);\n props[name] = expression.node;\n } else if (expression.isExpression()) {\n hasExpression = true;\n if (/^key|ref|on.+$/.test(name)) {\n props[name] = expression.node;\n } else if (/^bind:.+/.test(name)) {\n const value = path.scope.generateUidIdentifier('value');\n const bindName = name.slice(5).toLocaleLowerCase();\n props[bindName] = expression.node;\n // props[bindName] = t.memberExpression(\n // t.identifier((expression.node as Identifier).name),\n // t.identifier('value'),\n // );\n props[`update${capitalizeFirstLetter(bindName)}`] = t.arrowFunctionExpression(\n [value],\n t.assignmentExpression('=', expression.node as OptionalMemberExpression, value),\n );\n } else {\n if (expression.isConditionalExpression()) {\n props[name] = t.arrowFunctionExpression([], expression.node);\n } else {\n props[name] = expression.node;\n }\n }\n }\n } else if (value.isJSXElement() || value.isJSXFragment()) {\n transformJSX(value);\n props[name] = value.node;\n }\n }\n } else if (attribute.isJSXSpreadAttribute()) {\n props._$spread$ = attribute.get('argument').node;\n hasExpression = true;\n } else {\n throw new Error('Unsupported attribute type');\n }\n });\n return {\n props,\n hasExpression,\n };\n}\n","import { _toString } from './comm';\n\nexport const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object';\nexport function isPromise(val: any): val is Promise<any> {\n return _toString.call(val) === '[object Promise]';\n}\n\nexport const isArray = Array.isArray;\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\nexport function isNull(val: any): val is null {\n return val === null;\n}\nexport function isSymbol(val: unknown): val is symbol {\n return typeof val === 'symbol';\n}\n\nexport function isSet(val: any): val is Set<any> {\n return _toString.call(val) === '[object Set]';\n}\nexport function isWeakMap(val: any): val is WeakMap<any, any> {\n return _toString.call(val) === '[object WeakMap]';\n}\nexport function isWeakSet(val: any): val is WeakSet<any> {\n return _toString.call(val) === '[object WeakSet]';\n}\n\nexport function isMap(val: unknown): val is Map<any, any> {\n return _toString.call(val) === '[object Map]';\n}\nexport function isNil(x: any): x is null | undefined {\n return x === null || x === undefined;\n}\n\nexport const isFunction = (val: unknown): val is Function => typeof val === 'function';\n\nexport function isFalsy(x: any): x is false | null | undefined {\n return x === false || x === null || x === undefined;\n}\n\nexport const isPrimitive = (\n val: unknown,\n): val is string | number | boolean | symbol | null | undefined =>\n ['string', 'number', 'boolean', 'symbol', 'undefined'].includes(typeof val) || isNull(val);\n\nexport function isHTMLElement(obj) {\n if (!obj) return false;\n return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName === 'string';\n}\n\nexport const isPlainObject = (val: unknown): val is object =>\n _toString.call(val) === '[object Object]';\n\nexport type StringNumber = `${number}`;\nexport function isStringNumber(val: unknown): val is StringNumber {\n if (!isString(val)) {\n return false;\n }\n return !Number.isNaN(Number(val));\n}\n","import { isArray, isFunction, isString } from './is';\n\nexport const _toString = Object.prototype.toString;\nexport const extend = Object.assign;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nexport const hasOwn = (val: object, key: string | symbol): key is keyof typeof val =>\n hasOwnProperty.call(val, key);\n\nexport function coerceArray<T>(data: T | T[]): T[] {\n return isArray(data) ? (data.flat() as T[]) : [data];\n}\nexport const hasChanged = (value, oldValue) =>\n value !== oldValue && (value === value || oldValue === oldValue);\nexport const noop = Function.prototype as () => void;\n\n/**\n * A function that checks if a string starts with a specific substring.\n * indexOf faster under normal circumstances\n * @see https://www.measurethat.net/Benchmarks/Show/12350/0/startswith-vs-test-vs-match-vs-indexof#latest_results_block\n\n * @param {string} str - The input string to check.\n * @param {string} searchString - The substring to check for at the beginning of the input string.\n * @return {boolean} Returns true if the input string starts with the specified substring, otherwise false.\n */\nexport function startsWith(str, searchString) {\n if (!isString(str)) {\n return false;\n }\n return str.indexOf(searchString) === 0;\n}\n\n/**\n * Escapes special HTML characters in a string.\n * @param str - The string to escape.\n * @returns The escaped string.\n */\nexport function escape(str: string): string {\n return str.replaceAll(/[\"&'<>]/g, char => {\n switch (char) {\n case '&':\n return '&amp;';\n case '<':\n return '&lt;';\n case '>':\n return '&gt;';\n case '\"':\n return '&quot;';\n case \"'\":\n return '&#039;';\n default:\n return char;\n }\n });\n}\n\nexport type ExcludeType = ((key: string | symbol) => boolean) | (string | symbol)[];\n\n/**\n * Checks if a key should be excluded based on the provided exclude criteria.\n * @param key - The key to check.\n * @param exclude - The exclusion criteria.\n * @returns True if the key should be excluded, otherwise false.\n */\nexport function isExclude(key: string | symbol, exclude?: ExcludeType): boolean {\n return isArray(exclude) ? exclude.includes(key) : isFunction(exclude) ? exclude(key) : false;\n}\n\n/**\n * Generates a unique random 8 character string ID.\n * The generated IDs only contain alphanumeric characters.\n * @returns A unique random 8 character string ID.\n */\nexport function generateUniqueId() {\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result = '';\n const charactersLength = characters.length;\n for (let i = 0; i < 8; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n}\n\n/**\n * Checks if the current environment is a browser.\n * @returns True if the current environment is a browser, otherwise false.\n */\nexport function isBrowser() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n","export const kebabCase = (string: string): string => {\n return string.replaceAll(/[A-Z]+/g, (match, offset) => {\n return `${offset > 0 ? '-' : ''}${match.toLocaleLowerCase()}`;\n });\n};\n\nexport const camelCase = (str: string): string => {\n const s = str.replaceAll(/[\\s_-]+(.)?/g, (_, c) => (c ? c.toUpperCase() : ''));\n return s[0].toLowerCase() + s.slice(1);\n};\n/**\n * Capitalizes the first letter of a string.\n *\n * @param {string} inputString - The input string to capitalize the first letter.\n * @return {string} The string with the first letter capitalized.\n */\nexport const capitalizeFirstLetter = (inputString: string): string => {\n return inputString.charAt(0).toUpperCase() + inputString.slice(1);\n};\n","export function warn(msg: string, ..._args: any[]): void;\nexport function warn(msg: string, ...args): void {\n // eslint-disable-next-line prefer-spread\n console.warn.apply(console, [`[Essor warn]: ${msg}`].concat(args) as [string, ...any[]]);\n}\n\nexport function info(msg: string, ..._args: any[]): void;\nexport function info(msg: string, ...args): void {\n // eslint-disable-next-line prefer-spread, no-console\n console.info.apply(console, [`[Essor info]: ${msg}`].concat(args) as [string, ...any[]]);\n}\n\nexport function error(msg: string, ..._args: any[]): void;\nexport function error(msg: string, ...args): void {\n // eslint-disable-next-line prefer-spread\n console.error.apply(console, [`[Essor error]: ${msg}`].concat(args) as [string, ...any[]]);\n}\n","import { type NodePath, types as t } from '@babel/core';\nimport type { Options, State } from './types';\nexport const imports = new Set<string>();\n\nconst defaultOption: Options = {\n ssg: false,\n symbol: '$',\n props: true,\n};\n\nexport const transformProgram = {\n enter(path: NodePath<t.Program>, state) {\n imports.clear();\n\n // merge options\n state.opts = { ...defaultOption, ...state.opts };\n\n path.state = {\n h: path.scope.generateUidIdentifier('h$'),\n template: path.scope.generateUidIdentifier('template$'),\n ssg: path.scope.generateUidIdentifier('ssg$'),\n\n useSignal: path.scope.generateUidIdentifier('signal$'),\n useComputed: path.scope.generateUidIdentifier('computed$'),\n useReactive: path.scope.generateUidIdentifier('reactive$'),\n\n tmplDeclaration: t.variableDeclaration('const', []),\n opts: state.opts,\n } as State;\n },\n exit(path: NodePath<t.Program>) {\n const state: State = path.state;\n if (state.tmplDeclaration.declarations.length > 0) {\n const index = path.node.body.findIndex(\n node => !t.isImportDeclaration(node) && !t.isExportDeclaration(node),\n );\n path.node.body.splice(index, 0, state.tmplDeclaration);\n }\n if (imports.size > 0) {\n path.node.body.unshift(createImport(state, 'essor'));\n }\n },\n};\nfunction createImport(state: State, from: string) {\n const ImportSpecifier: t.ImportSpecifier[] = [];\n imports.forEach(name => {\n const local = t.identifier(state[name].name);\n const imported = t.identifier(name);\n ImportSpecifier.push(t.importSpecifier(local, imported));\n });\n\n const importSource = t.stringLiteral(from);\n return t.importDeclaration(ImportSpecifier, importSource);\n}\n","import { type NodePath, types as t } from '@babel/core';\nimport { startsWith } from '@estjs/shared';\nimport type { State } from './types';\n\nexport type JSXElement = t.JSXElement | t.JSXFragment;\n\nexport type JSXChild =\n | t.JSXElement\n | t.JSXFragment\n | t.JSXExpressionContainer\n | t.JSXSpreadChild\n | t.JSXText;\n\n/**\n * Checks if the given Babel path has a sibling element.\n *\n * @param {NodePath} path - The Babel path to check.\n * @return {boolean} True if the path has a sibling element, false otherwise.\n */\nexport function hasSiblingElement(path) {\n // Get all siblings (both previous and next)\n const siblings = path.getAllPrevSiblings().concat(path.getAllNextSiblings());\n\n // Check for non-self-closing sibling elements or JSXExpressionContainer\n const hasSibling = siblings.some(\n siblingPath => siblingPath.isJSXElement() || siblingPath.isJSXExpressionContainer(),\n );\n\n return hasSibling;\n}\n/**\n * Retrieves the name of a JSX attribute.\n *\n * @param {t.JSXAttribute} attribute - The JSX attribute to retrieve the name from.\n * @return {string} The name of the attribute.\n * @throws {Error} If the attribute type is unsupported.\n */\nexport function getAttrName(attribute: t.JSXAttribute): string {\n if (t.isJSXIdentifier(attribute.name)) {\n return attribute.name.name;\n }\n if (t.isJSXNamespacedName(attribute.name)) {\n return `${attribute.name.namespace.name}:${attribute.name.name.name}`;\n }\n throw new Error('Unsupported attribute type');\n}\n\n/**\n * Retrieves the tag name of a JSX element.\n *\n * @param {t.JSXElement} node - The JSX element.\n * @return {string} The tag name of the JSX element.\n */\nexport function getTagName(node: t.JSXElement): string {\n const tag = node.openingElement.name;\n return jsxElementNameToString(tag);\n}\n\n/**\n * Converts a JSX element name to a string representation.\n *\n * case1: <MyComponent />\n * case2: <SomeLibrary.SomeComponent />;\n * case3: <namespace:ComponentName />;\n * case4: <SomeLibrary.Nested.ComponentName />;\n *\n * @param {t.JSXMemberExpression | t.JSXIdentifier | t.JSXNamespacedName} node The JSX element name to convert.\n * @returns {string} The string representation of the JSX element name.\n */\nexport function jsxElementNameToString(\n node: t.JSXMemberExpression | t.JSXIdentifier | t.JSXNamespacedName,\n) {\n if (t.isJSXMemberExpression(node)) {\n return `${jsxElementNameToString(node.object)}.${jsxElementNameToString(node.property)}`;\n }\n\n if (t.isJSXIdentifier(node) || t.isIdentifier(node)) {\n return node.name;\n }\n\n return `${node.namespace.name}:${node.name.name}`;\n}\n\n/**\n * Determines if the given tagName is a component.\n *\n * case1: <MyComponent />\n * case2: <SomeLibrary.SomeComponent />;\n * case3: <_component />;\n *\n * @param {string} tagName - The name of the tag to check.\n * @return {boolean} True if the tagName is a component, false otherwise.\n */\nexport function isComponent(tagName: string): boolean {\n return (\n (tagName[0] && tagName[0].toLowerCase() !== tagName[0]) ||\n tagName.includes('.') ||\n /[^a-z]/i.test(tagName[0])\n );\n}\n\n/**\n * Determines if the given path represents a text child node in a JSX expression.\n *\n * @param {NodePath<JSXChild>} path - The path to the potential text child node.\n * @return {boolean} True if the path represents a text child node, false otherwise.\n */\nexport function isTextChild(path: NodePath<JSXChild>): boolean {\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isJSXText() || expression.isStringLiteral() || expression.isNumericLiteral()) {\n return true;\n }\n }\n if (path.isJSXText() || path.isStringLiteral() || path.isNullLiteral()) {\n return true;\n }\n return false;\n}\n\n/**\n * Sets the text content of a JSX node.\n *\n * @param {NodePath<JSXChild>} path - The path to the JSX node.\n * @param {string} text - The text to set.\n * @return {void}\n */\nexport function setNodeText(path: NodePath<JSXChild>, text: string): void {\n if (path.isJSXText()) {\n path.node.value = text;\n }\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n expression.replaceWith(t.stringLiteral(text));\n }\n }\n}\n\n/**\n * get the symbol start with\n */\nexport function isSymbolStart(path: NodePath<any>, name: string) {\n const state: State = path.state;\n const { symbol } = state?.opts || '$';\n\n return startsWith(name, symbol);\n}\n","export const selfClosingTags = [\n 'area',\n 'base',\n 'br',\n 'col',\n 'embed',\n 'hr',\n 'img',\n 'input',\n 'link',\n 'meta',\n 'param',\n 'source',\n 'track',\n 'wbr',\n];\n\nexport const svgTags = [\n 'circle',\n 'clipPath',\n 'defs',\n 'ellipse',\n 'filter',\n 'g',\n 'line',\n 'linearGradient',\n 'mask',\n 'path',\n 'pattern',\n 'polygon',\n 'polyline',\n 'radialGradient',\n 'rect',\n 'stop',\n 'symbol',\n 'text',\n 'use',\n];\n","import { types as t } from '@babel/core';\nimport { imports } from '../program';\nimport { isSymbolStart } from '../shared';\nimport type { Identifier, VariableDeclarator } from '@babel/types';\nimport type { NodePath } from '@babel/core';\n\n/**\n * Replaces the symbol in a variable declarator with a computed or signal expression.\n *\n * case 1: let $a = 1 => let $a = useSignal(1);\n * case 2: const $a = ()=>{return $a} => const $a = useComputed(()=>{return $a})\n *\n * @param {NodePath<VariableDeclarator>} path - The path to the variable declarator node.\n * @return {void}\n */\nexport function replaceSymbol(path: NodePath<VariableDeclarator>) {\n const { init, id } = path.node;\n const variableName = (id as Identifier).name;\n\n if (t.isObjectPattern(id) || t.isArrayPattern(id) || !isSymbolStart(path, variableName)) return;\n\n const isComputed =\n init &&\n (t.isFunctionExpression(init) || t.isArrowFunctionExpression(init)) &&\n (path.parent as t.VariableDeclaration).kind === 'const';\n\n const hookName = isComputed ? 'useComputed' : 'useSignal';\n const newInit = t.callExpression(t.identifier(path.state[hookName].name), init ? [init] : []);\n\n imports.add(hookName);\n path.node.init = newInit;\n}\n\nexport function symbolIdentifier(path) {\n const parentPath = path.parentPath;\n if (!shouldProcessIdentifier(parentPath)) return;\n\n const { node } = path;\n if (!isSymbolStart(path, node.name)) return;\n\n if (!path.findParent(p => p.isMemberExpression() && p.node.property.name === 'value')) {\n path.replaceWith(t.memberExpression(t.identifier(node.name), t.identifier('value')));\n }\n}\n\nfunction shouldProcessIdentifier(parentPath) {\n return (\n parentPath &&\n !t.isVariableDeclarator(parentPath) &&\n !t.isImportSpecifier(parentPath) &&\n !t.isObjectProperty(parentPath) &&\n !t.isArrayPattern(parentPath) &&\n !t.isObjectPattern(parentPath)\n );\n}\n\nexport function symbolObjectPattern(path) {\n path.node.properties.forEach(property => {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n isSymbolStart(path, property.key.name)\n ) {\n property.key = t.identifier(property.key.name);\n }\n });\n}\n\nexport function symbolArrayPattern(path) {\n path.node.elements.forEach(element => {\n if (t.isIdentifier(element) && element.name.startsWith('$')) {\n element.name = t.identifier(element.name).name;\n } else if (t.isObjectPattern(element)) {\n symbolObjectPattern({ node: element } as NodePath);\n }\n });\n}\n","import { types as t } from '@babel/core';\nimport { startsWith } from '@estjs/shared';\n\n/**\n * Replaces import declarations\n *\n * case1: import { $a } from 'a';console.log(a) => import { $a } from 'a';console.log($a.value)\n * case2: import $a from 'a';console.log(a) => import $a from 'a';console.log($a.value)\n *\n * @param {object} path - The path to replace import declarations.\n * @return {void}\n */\nexport function replaceImportDeclaration(path) {\n path.node.specifiers.forEach(specifier => {\n const variableName = specifier.local.name;\n if (startsWith(variableName, '$') && !isVariableUsedAsObject(path, variableName)) {\n path.scope.rename(variableName, `${variableName}.value`);\n specifier.local.name = variableName;\n }\n });\n}\n\n/**\n * Checks if a variable is used as an object.\n *\n * @param path - The path to the variable.\n * @param variableName - The name of the variable.\n * @returns {boolean} - Whether the variable is used as an object.\n */\nfunction isVariableUsedAsObject(path, variableName) {\n const binding = path.scope.getBinding(variableName);\n return (\n binding?.referencePaths?.some(referencePath => {\n if (t.isMemberExpression(referencePath.parent)) {\n const { object, property } = referencePath.parent;\n if (t.isIdentifier(object, { name: variableName })) {\n referencePath.parentPath.replaceWith(\n t.memberExpression(t.memberExpression(object, t.identifier('value')), property),\n );\n return true;\n }\n }\n return false;\n }) || false\n );\n}\n","import { startsWith } from '@estjs/shared';\nimport { type NodePath, types as t } from '@babel/core';\nimport { imports } from '../program';\nimport type { State } from '../types';\nimport type {\n ArrowFunctionExpression,\n FunctionDeclaration,\n Identifier,\n ObjectProperty,\n RestElement,\n} from '@babel/types';\n\n/**\n * Replaces the properties of a function's first parameter with new names.\n *\n * auto replace pattern to props object\n *\n * rule1: function argument\n * rule2: first argument is object and it pattern\n * rule3: function has return\n *\n * transform case\n * case1 ({a, b}) => <div>{a.value}</div> to=> (_props)=><div>{_props.a.value}</div>\n * case2 ({a, b, ...rest}) => <div>{a.value}{rest}</div> to=> (_props)=> {const restProps = reactive(props,[a,b]);return <div>{_props.a.value}{reset}</div>}\n *\n * not transform case\n * case1 ([a,b])=> <div>{a.value}</div>\n * case2 ({a.,b}) ={}\n *\n * @param {NodePath<FunctionDeclaration | ArrowFunctionExpression>} path - The path to the function node.\n * @return {void}\n */\nexport function replaceProps(path: NodePath<FunctionDeclaration | ArrowFunctionExpression>) {\n const state: State = path.state;\n const firstParam = path.node.params[0];\n\n if (!firstParam || !t.isObjectPattern(firstParam)) return;\n\n const returnStatement = path\n .get('body')\n .get('body')\n .find(statement => statement.isReturnStatement());\n\n if (!returnStatement || !t.isJSXElement((returnStatement.node as any)?.argument)) return;\n\n const replaceProperties = (properties: (ObjectProperty | RestElement)[], parentPath: string) => {\n properties.forEach(property => {\n if (t.isObjectProperty(property) && t.isIdentifier(property.key)) {\n const keyName = property.key.name;\n if (t.isIdentifier(property.value)) {\n path.scope.rename(property.value.name, `${parentPath}${keyName}`);\n } else if (t.isObjectPattern(property.value)) {\n replaceProperties(property.value.properties, `${parentPath}${keyName}.`);\n }\n }\n });\n };\n\n const properties = firstParam.properties;\n const notRestProperties = properties.filter(property => !t.isRestElement(property)) as ObjectProperty[];\n replaceProperties(notRestProperties, '__props.');\n\n const notRestNames = notRestProperties.map(property => (property.key as Identifier).name);\n if (__DEV__ && notRestNames.some(name => startsWith(name, '$'))) {\n console.warn('props name can not start with $');\n return;\n }\n\n handleRestElement(path, state, properties, notRestNames);\n}\n\nfunction handleRestElement(path, state: State, properties, notRestNames) {\n const restElement = properties.find(property => t.isRestElement(property)) as RestElement | undefined;\n path.node.params[0] = t.identifier('__props');\n\n if (restElement) {\n const restName = (restElement.argument as Identifier).name;\n if (notRestNames.length === 0) {\n path.node.params[0] = t.identifier(restName);\n } else {\n const restVariableDeclaration = createRestVariableDeclaration(state, restName, notRestNames);\n imports.add('useReactive');\n (path.node.body as t.BlockStatement).body.unshift(restVariableDeclaration);\n }\n }\n}\n\nfunction createRestVariableDeclaration(state: State, restName: string, notRestNames: string[]) {\n return t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(restName),\n t.callExpression(state.useReactive, [\n t.identifier('__props'),\n t.arrayExpression(notRestNames.map(name => t.stringLiteral(name))),\n ])\n ),\n ]);\n}\n","import { transformJSX } from './jsx';\nimport { transformProgram } from './program';\nimport {\n replaceSymbol,\n symbolArrayPattern,\n symbolIdentifier,\n symbolObjectPattern,\n} from './signal/symbol';\nimport { replaceImportDeclaration } from './signal/import';\nimport { replaceProps } from './signal/props';\nimport type { PluginObj } from '@babel/core';\nexport { Options, State } from './types';\nexport default function (): PluginObj {\n return {\n name: 'babel-plugin-essor',\n manipulateOptions({ filename }, parserOpts) {\n if (filename.endsWith('.ts') || filename.endsWith('.tsx')) {\n parserOpts.plugins.push('typescript');\n }\n parserOpts.plugins.push('jsx');\n },\n visitor: {\n Program: transformProgram,\n\n FunctionDeclaration: replaceProps,\n ArrowFunctionExpression: replaceProps,\n VariableDeclarator: replaceSymbol,\n ImportDeclaration: replaceImportDeclaration,\n Identifier: symbolIdentifier,\n ObjectPattern: symbolObjectPattern,\n ArrayPattern: symbolArrayPattern,\n\n JSXElement: transformJSX,\n JSXFragment: transformJSX,\n },\n };\n}\n"],"mappings":"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","names":["t","t","t","isComponent","t","value","t","t","t","t","t","t","properties"]}
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 { capitalize } from '@estjs/shared';\nimport { imports } from '../program';\nimport {\n type JSXChild,\n type JSXElement,\n getAttrName,\n getTagName,\n hasSiblingElement,\n isComponent as isComponentName,\n isTextChild,\n setNodeText,\n} from '../shared';\nimport { selfClosingTags, svgTags } from './constants';\nimport type { Identifier, OptionalMemberExpression, StringLiteral } from '@babel/types';\nimport type { State } from '../types';\nimport type { NodePath } from '@babel/core';\n\nexport interface Result {\n index: number;\n isLastChild: boolean;\n parentIndex: number;\n props: Record<string, any>;\n template: string | string[];\n}\n\nlet isSSG = false;\n\nfunction addToTemplate(result: Result, content: string, join = false): void {\n if (isSSG) {\n if (join && result.template.length > 0) {\n (result.template as string[])[result.template.length - 1] += content;\n } else {\n (result.template as string[]).push(content);\n }\n } else {\n result.template += content;\n }\n}\n\nexport function transformJSX(path: NodePath<JSXElement>): void {\n const state: State = path.state;\n isSSG = state.opts.ssg;\n\n const result: Result = {\n index: 1,\n isLastChild: false,\n parentIndex: 0,\n props: {},\n template: isSSG ? [] : '',\n };\n transformJSXElement(path, result, true);\n\n path.replaceWith(createEssorNode(path, result));\n}\n// Trim and replace multiple spaces/newlines with a single space\nfunction replaceSpace(node: t.JSXText): string {\n return node.value.replaceAll(/\\s+/g, ' ').trim();\n}\n\n/**\n * Creates an expression node for a JSX element or fragment.\n * @param path - The path to the JSX element.\n * @param result - The result containing template and props.\n * @returns A CallExpression representing the JSX element or fragment.\n */\nfunction createEssorNode(path: NodePath<JSXElement>, result: Result): t.CallExpression {\n const state: State = path.state;\n const isJSXFragment = path.isJSXFragment();\n const isComponent = path.isJSXElement() && isComponentName(getTagName(path.node));\n\n const tmpl = isComponent\n ? t.identifier(getTagName(path.node))\n : path.scope.generateUidIdentifier('_tmpl$');\n\n let templateNode;\n if (!isComponent) {\n templateNode = isSSG\n ? t.arrayExpression((result.template as string[]).map(t.stringLiteral))\n : t.callExpression(state.template, [t.stringLiteral(result.template as string)]);\n\n state.tmplDeclaration.declarations.push(t.variableDeclarator(tmpl, templateNode));\n if (!isSSG) {\n imports.add('template');\n }\n }\n\n const key = result.props.key ?? result.props[0]?.key;\n\n const propsArg = createProps(result.props);\n const args =\n isComponent && getTagName(path.node) === 'Fragment'\n ? [t.stringLiteral(''), propsArg]\n : [tmpl, propsArg];\n\n if (key) {\n args.push(key);\n }\n\n const fnName = isSSG\n ? 'ssg'\n : isJSXFragment || (isComponent && getTagName(path.node) === 'Fragment')\n ? 'Fragment'\n : 'h';\n imports.add(fnName);\n\n return t.callExpression(state[fnName], args);\n}\n\nfunction createProps(props: Record<string, any>): t.ObjectExpression {\n const result: (t.ObjectProperty | t.SpreadElement)[] = [];\n for (const prop in props) {\n let value = props[prop];\n if (prop === 'key') {\n continue;\n }\n if (Array.isArray(value)) {\n value = t.arrayExpression(value);\n }\n if (typeof value === 'object' && value !== null && !t.isNode(value)) {\n value = createProps(value);\n }\n if (typeof value === 'string') {\n value = t.stringLiteral(value);\n }\n if (typeof value === 'number') {\n value = t.numericLiteral(value);\n }\n if (typeof value === 'boolean') {\n value = t.booleanLiteral(value);\n }\n if (value === undefined) {\n value = t.tsUndefinedKeyword();\n }\n if (value === null) {\n value = t.nullLiteral();\n }\n if (prop === '_$spread$') {\n result.push(t.spreadElement(value));\n } else {\n result.push(t.objectProperty(t.stringLiteral(prop), value));\n }\n }\n return t.objectExpression(result);\n}\n\nfunction transformJSXElement(\n path: NodePath<JSXElement>,\n result: Result,\n isRoot: boolean = false,\n): void {\n if (path.isJSXElement()) {\n const tagName = getTagName(path.node);\n const tagIsComponent = isComponentName(tagName);\n const isSelfClose = !tagIsComponent && selfClosingTags.includes(tagName);\n const isSvg = svgTags.includes(tagName) && result.index === 1;\n const { props, hasExpression } = getAttrProps(path);\n\n if (tagIsComponent) {\n handleComponentElement(path, result, isRoot, props);\n } else {\n handleHTMLElement(path, result, tagName, isSelfClose, isSvg, props, hasExpression);\n }\n } else {\n result.index--;\n transformChildren(path, result);\n }\n}\n\nfunction handleComponentElement(\n path: NodePath<JSXElement>,\n result: Result,\n isRoot: boolean,\n props: Record<string, any>,\n): void {\n if (isRoot) {\n result.props = props;\n const children = getChildren(path);\n if (children.length > 0) {\n const childrenGenerator =\n children.length === 1 ? children[0] : t.arrayExpression(children as JSXElement[]);\n\n // Check if children is a conditional expression\n if (t.isConditionalExpression(childrenGenerator)) {\n result.props.children = t.arrowFunctionExpression([], childrenGenerator);\n } else {\n result.props.children = childrenGenerator;\n }\n }\n } else {\n transformJSX(path);\n replaceChild(path.node, result);\n }\n}\n\nfunction handleHTMLElement(\n path: NodePath<JSXElement>,\n result: Result,\n tagName: string,\n isSelfClose: boolean,\n isSvg: boolean,\n props: Record<string, any>,\n hasExpression: boolean,\n): void {\n if (isSvg) {\n result.template = isSSG ? [`<svg _svg_ data-hk=\"${result.index}\">`] : `<svg _svg_ >`;\n }\n\n addToTemplate(result, `<${tagName}${isSSG ? ` data-hk=\"${result.index}\"` : ''}`, true);\n handleAttributes(props, result);\n addToTemplate(result, isSelfClose ? '/>' : '>', !hasExpression);\n\n if (!isSelfClose) {\n transformChildren(path, result);\n if (hasSiblingElement(path) || isSSG) {\n addToTemplate(result, `</${tagName}>`);\n }\n }\n}\n\nfunction transformChildren(path: NodePath<JSXElement>, result: Result): void {\n const parentIndex = result.index;\n path\n .get('children')\n .reduce((pre, cur) => {\n if (isValidChild(cur)) {\n const lastChild = pre.at(-1);\n if (lastChild && isTextChild(cur) && isTextChild(lastChild)) {\n setNodeText(lastChild, getNodeText(lastChild) + getNodeText(cur));\n } else {\n pre.push(cur);\n }\n }\n return pre;\n }, [] as NodePath<JSXChild>[])\n .forEach((child, i, arr) => {\n result.parentIndex = parentIndex;\n result.isLastChild = i === arr.length - 1;\n transformChild(child, result);\n });\n}\n\nfunction transformChild(child: NodePath<JSXChild>, result: Result): void {\n result.index++;\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSXElement(child, result, false);\n } else if (child.isJSXExpressionContainer()) {\n const expression = child.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n addToTemplate(result, `${expression.node.value}`, true);\n } else if (expression.isExpression()) {\n replaceChild(expression.node, result);\n } else if (t.isJSXEmptyExpression(expression.node)) {\n // it is empty expression\n // just for tracking value\n } else {\n throw new Error('Unsupported child type');\n }\n } else if (child.isJSXText()) {\n addToTemplate(result, replaceSpace(child.node), true);\n } else {\n throw new Error('Unsupported child type');\n }\n}\nfunction getNodeText(path: NodePath<JSXChild>): string {\n if (path.isJSXText()) {\n return replaceSpace(path.node);\n }\n if (path.isJSXExpressionContainer()) {\n const expression = path.get('expression');\n if (expression.isStringLiteral() || expression.isNumericLiteral()) {\n return String(expression.node.value);\n }\n }\n return '';\n}\n\nfunction isStyleClassName(name: string): name is 'style' | 'class' {\n return name === 'class' || name === 'style';\n}\n\nfunction handleAttributes(props: Record<string, any>, result: Result): void {\n let klass = '';\n let style = '';\n\n for (const [prop, value] of Object.entries(props)) {\n if (prop === 'class' && typeof value === 'string') {\n klass += ` ${value}`;\n delete props[prop];\n } else if (prop === 'style' && typeof value === 'string') {\n style += `${value}${value.at(-1) === ';' ? '' : ';'}`;\n delete props[prop];\n } else if (value === true) {\n addToTemplate(result, ` ${prop}`);\n delete props[prop];\n } else if (value === false) {\n delete props[prop];\n } else if (typeof value === 'string' || typeof value === 'number') {\n addToTemplate(result, ` ${prop}=\"${value}\"`);\n delete props[prop];\n } else if (t.isConditionalExpression(value)) {\n props[prop] = t.arrowFunctionExpression([], value);\n } else if (t.isObjectExpression(value)) {\n const val = handleObjectExpression(prop, value, props, isStyleClassName(prop));\n if (val) {\n if (prop === 'class') {\n klass += ` ${val}`;\n }\n if (prop === 'style') {\n style += `${val}${val.at(-1) === ';' ? '' : ';'}`;\n }\n }\n }\n }\n\n if (Object.keys(props).length > 0) {\n result.props[result.index] = props;\n }\n\n if (klass.trim()) {\n addToTemplate(result, ` class=\"${klass.trim()}\"`);\n }\n if (style.trim()) {\n addToTemplate(result, ` style=\"${style.trim()}\"`);\n }\n}\n\nfunction handleObjectExpression(\n prop: string,\n value: t.ObjectExpression,\n props: Record<string, any>,\n isCt = false,\n): string {\n let ct = '';\n const hasConditional = value.properties.some(\n property => t.isObjectProperty(property) && t.isConditionalExpression(property.value),\n );\n\n if (hasConditional) {\n props[prop] = t.arrowFunctionExpression([], value);\n } else if (isCt) {\n value.properties.forEach(property => {\n if (t.isObjectProperty(property)) {\n ct += `${(property.key as Identifier).name || (property.key as StringLiteral).value}:${(property.value as StringLiteral).value};`;\n }\n });\n\n delete props[prop];\n }\n return ct;\n}\n\nfunction replaceChild(node: t.Expression, result: Result): void {\n if (result.isLastChild) {\n result.index--;\n } else {\n addToTemplate(result, '<!>');\n }\n result.props[result.parentIndex] ??= {};\n result.props[result.parentIndex].children ??= [];\n result.props[result.parentIndex].children.push(\n t.arrayExpression([\n t.arrowFunctionExpression([], node),\n result.isLastChild ? t.nullLiteral() : t.identifier(String(result.index)),\n ]),\n );\n}\n\nfunction getChildren(path: NodePath<JSXElement>): JSXChild[] {\n return path\n .get('children')\n .filter(child => isValidChild(child))\n .map(child => {\n if (child.isJSXElement() || child.isJSXFragment()) {\n transformJSX(child);\n } else if (child.isJSXExpressionContainer()) {\n child.replaceWith(child.get('expression'));\n } else if (child.isJSXText()) {\n child.replaceWith(t.stringLiteral(replaceSpace(child.node)));\n } else {\n throw new Error('Unsupported child type');\n }\n return child.node;\n });\n}\n\nexport function isValidChild(path: NodePath<JSXChild>): boolean {\n const regex = /^\\s*$/;\n if (path.isStringLiteral() || path.isJSXText()) {\n return !regex.test(path.node.value);\n }\n return Object.keys(path.node).length > 0;\n}\n\nexport function getAttrProps(path: NodePath<t.JSXElement>): Record<string, any> {\n const props: Record<string, any> = {};\n let hasExpression = false;\n path\n .get('openingElement')\n .get('attributes')\n .forEach(attribute => {\n if (attribute.isJSXAttribute()) {\n const name = getAttrName(attribute.node);\n const value = attribute.get('value');\n\n if (!value.node) {\n props[name] = true;\n } else if (value.isStringLiteral()) {\n props[name] = value.node.value;\n } else {\n if (value.isJSXExpressionContainer()) {\n const expression = value.get('expression');\n if (expression.isStringLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isNumericLiteral()) {\n props[name] = expression.node.value;\n } else if (expression.isJSXElement() || expression.isJSXFragment()) {\n transformJSX(expression);\n props[name] = expression.node;\n } else if (expression.isExpression()) {\n hasExpression = true;\n if (/^key|ref|on.+$/.test(name)) {\n props[name] = expression.node;\n } else if (/^bind:.+/.test(name)) {\n const value = path.scope.generateUidIdentifier('value');\n const bindName = name.slice(5).toLocaleLowerCase();\n props[bindName] = expression.node;\n // props[bindName] = t.memberExpression(\n // t.identifier((expression.node as Identifier).name),\n // t.identifier('value'),\n // );\n props[`update${capitalize(bindName)}`] = t.arrowFunctionExpression(\n [value],\n t.assignmentExpression('=', expression.node as OptionalMemberExpression, value),\n );\n } else {\n if (expression.isConditionalExpression()) {\n props[name] = t.arrowFunctionExpression([], expression.node);\n } else {\n props[name] = expression.node;\n }\n }\n }\n } else if (value.isJSXElement() || value.isJSXFragment()) {\n transformJSX(value);\n props[name] = value.node;\n }\n }\n } else if (attribute.isJSXSpreadAttribute()) {\n props._$spread$ = attribute.get('argument').node;\n hasExpression = true;\n } else {\n throw new Error('Unsupported attribute type');\n }\n });\n return {\n props,\n hasExpression,\n };\n}\n","import { _toString } from './comm';\n\nexport const isObject = (val: unknown): val is Record<any, any> =>\n val !== null && typeof val === 'object';\nexport function isPromise(val: any): val is Promise<any> {\n return _toString.call(val) === '[object Promise]';\n}\n\nexport const isArray = Array.isArray;\n\nexport function isString(val: unknown): val is string {\n return typeof val === 'string';\n}\nexport function isNull(val: any): val is null {\n return val === null;\n}\nexport function isSymbol(val: unknown): val is symbol {\n return typeof val === 'symbol';\n}\n\nexport function isSet(val: any): val is Set<any> {\n return _toString.call(val) === '[object Set]';\n}\nexport function isWeakMap(val: any): val is WeakMap<any, any> {\n return _toString.call(val) === '[object WeakMap]';\n}\nexport function isWeakSet(val: any): val is WeakSet<any> {\n return _toString.call(val) === '[object WeakSet]';\n}\n\nexport function isMap(val: unknown): val is Map<any, any> {\n return _toString.call(val) === '[object Map]';\n}\nexport function isNil(x: any): x is null | undefined {\n return x === null || x === undefined;\n}\n\nexport const isFunction = (val: unknown): val is Function => typeof val === 'function';\n\nexport function isFalsy(x: any): x is false | null | undefined {\n return x === false || x === null || x === undefined;\n}\n\nexport const isPrimitive = (\n val: unknown,\n): val is string | number | boolean | symbol | null | undefined =>\n ['string', 'number', 'boolean', 'symbol', 'undefined'].includes(typeof val) || isNull(val);\n\nexport function isHTMLElement(obj) {\n if (!obj) return false;\n return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName === 'string';\n}\n\nexport const isPlainObject = (val: unknown): val is object =>\n _toString.call(val) === '[object Object]';\n\nexport type StringNumber = `${number}`;\nexport function isStringNumber(val: unknown): val is StringNumber {\n if (!isString(val)) {\n return false;\n }\n return !Number.isNaN(Number(val));\n}\n","import { isArray, isFunction, isString } from './is';\n\nexport const _toString = Object.prototype.toString;\nexport const extend = Object.assign;\nconst hasOwnProperty = Object.prototype.hasOwnProperty;\nexport const hasOwn = (val: object, key: string | symbol): key is keyof typeof val =>\n hasOwnProperty.call(val, key);\n\nexport function coerceArray<T>(data: T | T[]): T[] {\n return isArray(data) ? (data.flat() as T[]) : [data];\n}\nexport const hasChanged = (value, oldValue) =>\n value !== oldValue && (value === value || oldValue === oldValue);\nexport const noop = Function.prototype as () => void;\n\n/**\n * A function that checks if a string starts with a specific substring.\n * indexOf faster under normal circumstances\n * @see https://www.measurethat.net/Benchmarks/Show/12350/0/startswith-vs-test-vs-match-vs-indexof#latest_results_block\n\n * @param {string} str - The input string to check.\n * @param {string} searchString - The substring to check for at the beginning of the input string.\n * @return {boolean} Returns true if the input string starts with the specified substring, otherwise false.\n */\nexport function startsWith(str, searchString) {\n if (!isString(str)) {\n return false;\n }\n return str.indexOf(searchString) === 0;\n}\n\n/**\n * Escapes special HTML characters in a string.\n * @param str - The string to escape.\n * @returns The escaped string.\n */\nexport function escape(str: string): string {\n return str.replaceAll(/[\"&'<>]/g, char => {\n switch (char) {\n case '&':\n return '&amp;';\n case '<':\n return '&lt;';\n case '>':\n return '&gt;';\n case '\"':\n return '&quot;';\n case \"'\":\n return '&#039;';\n default:\n return char;\n }\n });\n}\n\nexport type ExcludeType = ((key: string | symbol) => boolean) | (string | symbol)[];\n\n/**\n * Checks if a key should be excluded based on the provided exclude criteria.\n * @param key - The key to check.\n * @param exclude - The exclusion criteria.\n * @returns True if the key should be excluded, otherwise false.\n */\nexport function isExclude(key: string | symbol, exclude?: ExcludeType): boolean {\n return isArray(exclude) ? exclude.includes(key) : isFunction(exclude) ? exclude(key) : false;\n}\n\n/**\n * Generates a unique random 8 character string ID.\n * The generated IDs only contain alphanumeric characters.\n * @returns A unique random 8 character string ID.\n */\nexport function generateUniqueId() {\n const characters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789';\n let result = '';\n const charactersLength = characters.length;\n for (let i = 0; i < 8; i++) {\n result += characters.charAt(Math.floor(Math.random() * charactersLength));\n }\n return result;\n}\n\n/**\n * Checks if the current environment is a browser.\n * @returns True if the current environment is a browser, otherwise false.\n */\nexport function isBrowser() {\n return typeof window !== 'undefined' && typeof document !== 'undefined';\n}\n\nexport const cacheStringFunction = <T extends (str: string) => string>(fn: T): T => {\n const cache: Record<string, string> = Object.create(null);\n return ((str: string) => {\n const hit = cache[str];\n return hit || (cache[str] = fn(str));\n }) as T;\n};\n","import { cacheStringFunction } from './comm';\n\nconst hyphenateRE = /\\B([A-Z])/g;\nexport const kebabCase: (str: string) => string = cacheStringFunction((str: string) =>\n str.replaceAll(hyphenateRE, '-$1').toLowerCase(),\n);\n\nconst camelizeRE = /-(\\w)/g;\nexport const camelCase: (str: string) => string = cacheStringFunction((str: string): string => {\n return str.replaceAll(camelizeRE, (_, c) => (c ? c.toUpperCase() : ''));\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 capitalize: <T extends string>(str: T) => Capitalize<T> = cacheStringFunction(\n <T extends string>(str: T) => {\n return (str.charAt(0).toUpperCase() + str.slice(1)) as Capitalize<T>;\n },\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 Fragment: path.scope.generateUidIdentifier('fragment$'),\n\n signal: path.scope.generateUidIdentifier('signal$'),\n computed: path.scope.generateUidIdentifier('computed$'),\n reactive: 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 = signal(1);\n * case 2: const $a = ()=>{return $a} => const $a = computed(()=>{return $a})\n *\n * @param {NodePath<VariableDeclarator>} path - The path to the variable declarator node.\n * @return {void}\n */\nexport function replaceSymbol(path: NodePath<VariableDeclarator>) {\n const { init, id } = path.node;\n const variableName = (id as Identifier).name;\n\n if (t.isObjectPattern(id) || t.isArrayPattern(id) || !isSymbolStart(path, variableName)) return;\n\n const isComputed =\n init &&\n (t.isFunctionExpression(init) || t.isArrowFunctionExpression(init)) &&\n (path.parent as t.VariableDeclaration).kind === 'const';\n\n const hookName = isComputed ? 'computed' : 'signal';\n const newInit = t.callExpression(t.identifier(path.state[hookName].name), init ? [init] : []);\n\n imports.add(hookName);\n path.node.init = newInit;\n}\n\nexport function symbolIdentifier(path) {\n const parentPath = path.parentPath;\n if (!shouldProcessIdentifier(parentPath)) return;\n\n const { node } = path;\n if (!isSymbolStart(path, node.name)) return;\n\n if (!path.findParent(p => p.isMemberExpression() && p.node.property.name === 'value')) {\n path.replaceWith(t.memberExpression(t.identifier(node.name), t.identifier('value')));\n }\n}\n\nfunction shouldProcessIdentifier(parentPath) {\n return (\n parentPath &&\n !t.isVariableDeclarator(parentPath) &&\n !t.isImportSpecifier(parentPath) &&\n !t.isObjectProperty(parentPath) &&\n !t.isArrayPattern(parentPath) &&\n !t.isObjectPattern(parentPath)\n );\n}\n\nexport function symbolObjectPattern(path) {\n path.node.properties.forEach(property => {\n if (\n t.isObjectProperty(property) &&\n t.isIdentifier(property.key) &&\n isSymbolStart(path, property.key.name)\n ) {\n property.key = t.identifier(property.key.name);\n }\n });\n}\n\nexport function symbolArrayPattern(path) {\n path.node.elements.forEach(element => {\n if (t.isIdentifier(element) && element.name.startsWith('$')) {\n element.name = t.identifier(element.name).name;\n } else if (t.isObjectPattern(element)) {\n symbolObjectPattern({ node: element } as NodePath);\n }\n });\n}\n","import { types as t } from '@babel/core';\nimport { startsWith } from '@estjs/shared';\n\n/**\n * Replaces import declarations\n *\n * case1: import { $a } from 'a';console.log(a) => import { $a } from 'a';console.log($a.value)\n * case2: import $a from 'a';console.log(a) => import $a from 'a';console.log($a.value)\n *\n * @param {object} path - The path to replace import declarations.\n * @return {void}\n */\nexport function replaceImportDeclaration(path) {\n path.node.specifiers.forEach(specifier => {\n const variableName = specifier.local.name;\n if (startsWith(variableName, '$') && !isVariableUsedAsObject(path, variableName)) {\n path.scope.rename(variableName, `${variableName}.value`);\n specifier.local.name = variableName;\n }\n });\n}\n\n/**\n * Checks if a variable is used as an object.\n *\n * @param path - The path to the variable.\n * @param variableName - The name of the variable.\n * @returns {boolean} - Whether the variable is used as an object.\n */\nfunction isVariableUsedAsObject(path, variableName) {\n const binding = path.scope.getBinding(variableName);\n return (\n binding?.referencePaths?.some(referencePath => {\n if (t.isMemberExpression(referencePath.parent)) {\n const { object, property } = referencePath.parent;\n if (t.isIdentifier(object, { name: variableName })) {\n referencePath.parentPath.replaceWith(\n t.memberExpression(t.memberExpression(object, t.identifier('value')), property),\n );\n return true;\n }\n }\n return false;\n }) || false\n );\n}\n","import { startsWith } from '@estjs/shared';\nimport { type NodePath, types as t } from '@babel/core';\nimport { imports } from '../program';\nimport type { State } from '../types';\nimport type {\n ArrowFunctionExpression,\n FunctionDeclaration,\n Identifier,\n ObjectProperty,\n RestElement,\n} from '@babel/types';\n\n/**\n * Replaces the properties of a function's first parameter with new names.\n *\n * auto replace pattern to props object\n *\n * rule1: function argument\n * rule2: first argument is object and it pattern\n * rule3: function has return\n *\n * transform case\n * case1 ({a, b}) => <div>{a.value}</div> to=> (_props)=><div>{_props.a.value}</div>\n * case2 ({a, b, ...rest}) => <div>{a.value}{rest}</div> to=> (_props)=> {const restProps = reactive(props,[a,b]);return <div>{_props.a.value}{reset}</div>}\n *\n * not transform case\n * case1 ([a,b])=> <div>{a.value}</div>\n * case2 ({a.,b}) ={}\n *\n * @param {NodePath<FunctionDeclaration | ArrowFunctionExpression>} path - The path to the function node.\n * @return {void}\n */\nexport function replaceProps(path: NodePath<FunctionDeclaration | ArrowFunctionExpression>) {\n const state: State = path.state;\n const firstParam = path.node.params[0];\n\n if (!firstParam || !t.isObjectPattern(firstParam)) return;\n\n const returnStatement = path\n .get('body')\n .get('body')\n .find(statement => statement.isReturnStatement());\n\n if (!returnStatement || !t.isJSXElement((returnStatement.node as any)?.argument)) return;\n\n const replaceProperties = (properties: (ObjectProperty | RestElement)[], parentPath: string) => {\n properties.forEach(property => {\n if (t.isObjectProperty(property) && t.isIdentifier(property.key)) {\n const keyName = property.key.name;\n if (t.isIdentifier(property.value)) {\n path.scope.rename(property.value.name, `${parentPath}${keyName}`);\n } else if (t.isObjectPattern(property.value)) {\n replaceProperties(property.value.properties, `${parentPath}${keyName}.`);\n }\n }\n });\n };\n\n const properties = firstParam.properties;\n const notRestProperties = properties.filter(\n property => !t.isRestElement(property),\n ) as ObjectProperty[];\n replaceProperties(notRestProperties, '__props.');\n\n const notRestNames = notRestProperties.map(property => (property.key as Identifier).name);\n if (__DEV__ && notRestNames.some(name => startsWith(name, '$'))) {\n console.warn('props name can not start with $');\n return;\n }\n\n handleRestElement(path, state, properties, notRestNames);\n}\n\nfunction handleRestElement(path, state: State, properties, notRestNames) {\n const restElement = properties.find(property => t.isRestElement(property)) as\n | RestElement\n | undefined;\n path.node.params[0] = t.identifier('__props');\n\n if (restElement) {\n const restName = (restElement.argument as Identifier).name;\n if (notRestNames.length === 0) {\n path.node.params[0] = t.identifier(restName);\n } else {\n const restVariableDeclaration = createRestVariableDeclaration(state, restName, notRestNames);\n imports.add('reactive');\n (path.node.body as t.BlockStatement).body.unshift(restVariableDeclaration);\n }\n }\n}\n\nfunction createRestVariableDeclaration(state: State, restName: string, notRestNames: string[]) {\n return t.variableDeclaration('const', [\n t.variableDeclarator(\n t.identifier(restName),\n t.callExpression(state.reactive, [\n t.identifier('__props'),\n t.arrayExpression(notRestNames.map(name => t.stringLiteral(name))),\n ]),\n ),\n ]);\n}\n","import { transformJSX } from './jsx';\nimport { transformProgram } from './program';\nimport {\n replaceSymbol,\n symbolArrayPattern,\n symbolIdentifier,\n symbolObjectPattern,\n} from './signal/symbol';\nimport { replaceImportDeclaration } from './signal/import';\nimport { replaceProps } from './signal/props';\nimport type { PluginObj } from '@babel/core';\nexport { Options, State } from './types';\nexport default function (): PluginObj {\n return {\n name: 'babel-plugin-essor',\n manipulateOptions({ filename }, parserOpts) {\n if (filename.endsWith('.ts') || filename.endsWith('.tsx')) {\n parserOpts.plugins.push('typescript');\n }\n parserOpts.plugins.push('jsx');\n },\n visitor: {\n Program: transformProgram,\n\n FunctionDeclaration: replaceProps,\n ArrowFunctionExpression: replaceProps,\n VariableDeclarator: replaceSymbol,\n ImportDeclaration: replaceImportDeclaration,\n Identifier: symbolIdentifier,\n ObjectPattern: symbolObjectPattern,\n ArrayPattern: symbolArrayPattern,\n\n JSXElement: transformJSX,\n JSXFragment: transformJSX,\n },\n };\n}\n"],"mappings":"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","names":["t","t","t","isComponent","t","value","t","t","t","t","t","t","properties"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "babel-plugin-essor",
3
- "version": "0.0.14-beta.2",
3
+ "version": "0.0.14-beta.21",
4
4
  "description": "",
5
5
  "type": "module",
6
6
  "keywords": [],
@@ -32,9 +32,9 @@
32
32
  },
33
33
  "sideEffects": false,
34
34
  "dependencies": {
35
- "@babel/core": "^7.25.8",
36
- "@babel/types": "^7.25.8",
37
- "@estjs/shared": "0.0.14-beta.2"
35
+ "@babel/core": "^7.26.0",
36
+ "@babel/types": "^7.26.0",
37
+ "@estjs/shared": "0.0.14-beta.21"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@types/babel__core": "^7.20.5",