@preact/signals-react-transform
Version:
Manage state with style in React
1 lines • 46.6 kB
Source Map (JSON)
{"version":3,"file":"signals-transform.mjs","sources":["../src/index.ts"],"sourcesContent":["import {\n\ttypes as BabelTypes,\n\ttemplate as BabelTemplate,\n\tPluginObj,\n\tPluginPass,\n\tNodePath,\n\ttemplate,\n} from \"@babel/core\";\nimport { isModule, addNamed } from \"@babel/helper-module-imports\";\nimport type { Scope, VisitNodeObject } from \"@babel/traverse\";\nimport debug from \"debug\";\n\ninterface PluginArgs {\n\ttypes: typeof BabelTypes;\n\ttemplate: typeof BabelTemplate;\n}\n\nconst optOutCommentIdentifier = /(^|\\s)@no(Use|Track)Signals(\\s|$)/;\nconst optInCommentIdentifier = /(^|\\s)@(use|track)Signals(\\s|$)/;\nconst dataNamespace = \"@preact/signals-react-transform\";\nconst defaultImportSource = \"@preact/signals-react/runtime\";\nconst importName = \"useSignals\";\nconst getHookIdentifier = \"getHookIdentifier\";\nconst maybeUsesSignal = \"maybeUsesSignal\";\nconst containsJSX = \"containsJSX\";\nconst alreadyTransformed = \"alreadyTransformed\";\nconst jsxIdentifiers = \"jsxIdentifiers\";\nconst jsxObjects = \"jsxObjects\";\n\nconst UNMANAGED = \"0\";\nconst MANAGED_COMPONENT = \"1\";\nconst MANAGED_HOOK = \"2\";\ntype HookUsage =\n\t| typeof UNMANAGED\n\t| typeof MANAGED_COMPONENT\n\t| typeof MANAGED_HOOK;\n\nconst logger = {\n\ttransformed: debug(\"signals:react-transform:transformed\"),\n\tskipped: debug(\"signals:react-transform:skipped\"),\n};\n\nconst get = (pass: PluginPass, name: any) =>\n\tpass.get(`${dataNamespace}/${name}`);\nconst set = (pass: PluginPass, name: string, v: any) =>\n\tpass.set(`${dataNamespace}/${name}`, v);\n\ninterface DataContainer {\n\tgetData(name: string): any;\n\tsetData(name: string, value: any): void;\n}\nconst setData = (node: DataContainer, name: string, value: any) =>\n\tnode.setData(`${dataNamespace}/${name}`, value);\nconst getData = (node: DataContainer, name: string) =>\n\tnode.getData(`${dataNamespace}/${name}`);\n\nfunction getComponentFunctionDeclaration(\n\tpath: NodePath,\n\tfilename: string | undefined,\n\tprev?: Scope\n): Scope | null {\n\tconst functionScope = path.scope.getFunctionParent();\n\n\tif (functionScope) {\n\t\tconst parent = functionScope.path.parent;\n\t\tlet functionName = getFunctionName(functionScope.path as any);\n\t\tif (functionName === DefaultExportSymbol) {\n\t\t\tfunctionName = filename || null;\n\t\t}\n\t\tif (isComponentFunction(functionScope.path as any, functionName)) {\n\t\t\treturn functionScope;\n\t\t} else if (\n\t\t\tparent.type === \"CallExpression\" &&\n\t\t\tparent.callee.type === \"Identifier\" &&\n\t\t\tparent.callee.name.startsWith(\"use\") &&\n\t\t\tparent.callee.name[3] === parent.callee.name[3].toUpperCase()\n\t\t) {\n\t\t\treturn null;\n\t\t}\n\t\treturn getComponentFunctionDeclaration(\n\t\t\tfunctionScope.parent.path,\n\t\t\tfilename,\n\t\t\tfunctionScope\n\t\t);\n\t} else {\n\t\treturn prev || null;\n\t}\n}\n\nfunction setOnFunctionScope(\n\tpath: NodePath,\n\tkey: string,\n\tvalue: any,\n\tfilename: string | undefined\n) {\n\tconst functionScope = getComponentFunctionDeclaration(path, filename);\n\tif (functionScope) {\n\t\tsetData(functionScope, key, value);\n\t}\n}\n\ntype FunctionLike =\n\t| BabelTypes.ArrowFunctionExpression\n\t| BabelTypes.FunctionExpression\n\t| BabelTypes.FunctionDeclaration\n\t| BabelTypes.ObjectMethod;\n\n/**\n * Simple \"best effort\" to get the base name of a file path. Not fool proof but\n * works in browsers and servers. Good enough for our purposes.\n */\nfunction basename(filename: string | undefined): string | undefined {\n\treturn filename?.split(/[\\\\/]/).pop();\n}\n\nconst DefaultExportSymbol = Symbol(\"DefaultExportSymbol\");\n\nfunction getObjectPropertyKey(\n\tnode: BabelTypes.ObjectProperty | BabelTypes.ObjectMethod\n): string | null {\n\tif (node.key.type === \"Identifier\") {\n\t\treturn node.key.name;\n\t} else if (node.key.type === \"StringLiteral\") {\n\t\treturn node.key.value;\n\t}\n\n\treturn null;\n}\n\n/**\n * If the function node has a name (i.e. is a function declaration with a\n * name), return that. Else return null.\n */\nfunction getFunctionNodeName(node: FunctionLike): string | null {\n\tif (\n\t\t(node.type === \"FunctionDeclaration\" ||\n\t\t\tnode.type === \"FunctionExpression\") &&\n\t\tnode.id\n\t) {\n\t\treturn node.id.name;\n\t} else if (node.type === \"ObjectMethod\") {\n\t\treturn getObjectPropertyKey(node);\n\t}\n\n\treturn null;\n}\n\n/**\n * Given a function path's parent path, determine the \"name\" associated with the\n * function. If the function is an inline default export (e.g. `export default\n * () => {}`), returns a symbol indicating it is a default export. If the\n * function is an anonymous function wrapped in higher order functions (e.g.\n * memo(() => {})) we'll climb through the higher order functions to find the\n * name of the variable that the function is assigned to, if any. Other cases\n * handled too (see implementation). Else returns null.\n */\nfunction getFunctionNameFromParent(\n\tparentPath: NodePath<BabelTypes.Node>\n): string | null | typeof DefaultExportSymbol {\n\tif (\n\t\tparentPath.node.type === \"VariableDeclarator\" &&\n\t\tparentPath.node.id.type === \"Identifier\"\n\t) {\n\t\treturn parentPath.node.id.name;\n\t} else if (parentPath.node.type === \"AssignmentExpression\") {\n\t\tconst left = parentPath.node.left;\n\t\tif (left.type === \"Identifier\") {\n\t\t\treturn left.name;\n\t\t} else if (left.type === \"MemberExpression\") {\n\t\t\tlet property = left.property;\n\t\t\twhile (property.type === \"MemberExpression\") {\n\t\t\t\tproperty = property.property;\n\t\t\t}\n\n\t\t\tif (property.type === \"Identifier\") {\n\t\t\t\treturn property.name;\n\t\t\t} else if (property.type === \"StringLiteral\") {\n\t\t\t\treturn property.value;\n\t\t\t}\n\n\t\t\treturn null;\n\t\t} else {\n\t\t\treturn null;\n\t\t}\n\t} else if (parentPath.node.type === \"ObjectProperty\") {\n\t\treturn getObjectPropertyKey(parentPath.node);\n\t} else if (parentPath.node.type === \"ExportDefaultDeclaration\") {\n\t\treturn DefaultExportSymbol;\n\t} else if (\n\t\tparentPath.node.type === \"CallExpression\" &&\n\t\tparentPath.parentPath != null\n\t) {\n\t\t// If our parent is a Call Expression, then this function expression is\n\t\t// wrapped in some higher order functions. Recurse through the higher order\n\t\t// functions to determine if this expression is assigned to a name we can\n\t\t// use as the function name\n\t\treturn getFunctionNameFromParent(parentPath.parentPath);\n\t} else {\n\t\treturn null;\n\t}\n}\n\n/* Determine the name of a function */\nfunction getFunctionName(\n\tpath: NodePath<FunctionLike>\n): string | typeof DefaultExportSymbol | null {\n\tlet nodeName = getFunctionNodeName(path.node);\n\tif (nodeName) {\n\t\treturn nodeName;\n\t}\n\n\treturn getFunctionNameFromParent(path.parentPath);\n}\n\nfunction isComponentName(name: string | null): boolean {\n\treturn name?.match(/^[A-Z]/) != null;\n}\nfunction isCustomHookName(name: string | null): boolean {\n\treturn name?.match(/^use[A-Z]/) != null;\n}\n\nfunction hasLeadingComment(path: NodePath, comment: RegExp): boolean {\n\tconst comments = path.node.leadingComments;\n\treturn comments?.some(c => c.value.match(comment) !== null) ?? false;\n}\n\nfunction hasLeadingOptInComment(path: NodePath) {\n\treturn hasLeadingComment(path, optInCommentIdentifier);\n}\n\nfunction hasLeadingOptOutComment(path: NodePath) {\n\treturn hasLeadingComment(path, optOutCommentIdentifier);\n}\n\nfunction isOptedIntoSignalTracking(path: NodePath | null): boolean {\n\tif (!path) return false;\n\n\tswitch (path.node.type) {\n\t\tcase \"ArrowFunctionExpression\":\n\t\tcase \"FunctionExpression\":\n\t\tcase \"FunctionDeclaration\":\n\t\tcase \"ObjectMethod\":\n\t\tcase \"ObjectExpression\":\n\t\tcase \"VariableDeclarator\":\n\t\tcase \"VariableDeclaration\":\n\t\tcase \"AssignmentExpression\":\n\t\tcase \"CallExpression\":\n\t\t\treturn (\n\t\t\t\thasLeadingOptInComment(path) ||\n\t\t\t\tisOptedIntoSignalTracking(path.parentPath)\n\t\t\t);\n\t\tcase \"ExportDefaultDeclaration\":\n\t\tcase \"ExportNamedDeclaration\":\n\t\tcase \"ObjectProperty\":\n\t\tcase \"ExpressionStatement\":\n\t\t\treturn hasLeadingOptInComment(path);\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nfunction isOptedOutOfSignalTracking(path: NodePath | null): boolean {\n\tif (!path) return false;\n\n\tswitch (path.node.type) {\n\t\tcase \"ArrowFunctionExpression\":\n\t\tcase \"FunctionExpression\":\n\t\tcase \"FunctionDeclaration\":\n\t\tcase \"ObjectMethod\":\n\t\tcase \"ObjectExpression\":\n\t\tcase \"VariableDeclarator\":\n\t\tcase \"VariableDeclaration\":\n\t\tcase \"AssignmentExpression\":\n\t\tcase \"CallExpression\":\n\t\t\treturn (\n\t\t\t\thasLeadingOptOutComment(path) ||\n\t\t\t\tisOptedOutOfSignalTracking(path.parentPath)\n\t\t\t);\n\t\tcase \"ExportDefaultDeclaration\":\n\t\tcase \"ExportNamedDeclaration\":\n\t\tcase \"ObjectProperty\":\n\t\tcase \"ExpressionStatement\":\n\t\t\treturn hasLeadingOptOutComment(path);\n\t\tdefault:\n\t\t\treturn false;\n\t}\n}\n\nfunction isComponentFunction(\n\tpath: NodePath<FunctionLike>,\n\tfunctionName: string | null\n): boolean {\n\treturn (\n\t\tgetData(path.scope, containsJSX) === true && // Function contains JSX\n\t\tisComponentName(functionName) // Function name indicates it's a component\n\t);\n}\n\nfunction shouldTransform(\n\tpath: NodePath<FunctionLike>,\n\tfunctionName: string | null,\n\toptions: PluginOptions\n): boolean {\n\t// Opt-out takes first precedence\n\tif (isOptedOutOfSignalTracking(path)) return false;\n\t// Opt-in opts in to transformation regardless of mode\n\tif (isOptedIntoSignalTracking(path)) return true;\n\n\tif (options.mode === \"all\") {\n\t\treturn isComponentFunction(path, functionName);\n\t}\n\n\tif (options.mode == null || options.mode === \"auto\") {\n\t\treturn (\n\t\t\tgetData(path.scope, maybeUsesSignal) === true && // Function appears to use signals;\n\t\t\t(isComponentFunction(path, functionName) ||\n\t\t\t\tisCustomHookName(functionName))\n\t\t);\n\t}\n\n\treturn false;\n}\n\nfunction isValueMemberExpression(\n\tpath: NodePath<BabelTypes.MemberExpression>\n): boolean {\n\treturn (\n\t\t(path.node.property.type === \"Identifier\" &&\n\t\t\tpath.node.property.name === \"value\") ||\n\t\t(path.node.property.type === \"StringLiteral\" &&\n\t\t\tpath.node.property.value === \"value\")\n\t);\n}\n\nfunction isJSXAlternativeCall(\n\tpath: NodePath<BabelTypes.CallExpression>,\n\tstate: PluginPass\n): boolean {\n\tconst jsxIdentifierSet = get(state, jsxIdentifiers) as Set<string>;\n\tconst jsxObjectMap = get(state, jsxObjects) as Map<string, string[]>;\n\tconst callee = path.get(\"callee\");\n\n\t// Check direct function calls like _jsx(\"div\", props) or createElement(\"div\", props)\n\tif (callee.isIdentifier()) {\n\t\treturn jsxIdentifierSet?.has(callee.node.name) ?? false;\n\t}\n\n\t// Check member expression calls like React.createElement(\"div\", props) or jsxRuntime.jsx(\"div\", props)\n\tif (callee.isMemberExpression()) {\n\t\tconst object = callee.get(\"object\");\n\t\tconst property = callee.get(\"property\");\n\n\t\tif (object.isIdentifier() && property.isIdentifier()) {\n\t\t\tconst objectName = object.node.name;\n\t\t\tconst methodName = property.node.name;\n\t\t\tconst allowedMethods = jsxObjectMap?.get(objectName);\n\t\t\treturn allowedMethods?.includes(methodName) ?? false;\n\t\t}\n\t}\n\n\treturn false;\n}\n\nfunction hasValuePropertyInPattern(pattern: BabelTypes.ObjectPattern): boolean {\n\tfor (const property of pattern.properties) {\n\t\tif (BabelTypes.isObjectProperty(property)) {\n\t\t\tconst key = property.key;\n\n\t\t\tif (BabelTypes.isIdentifier(key, { name: \"value\" })) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t}\n\treturn false;\n}\n\nconst tryCatchTemplate = template.statements`var STORE_IDENTIFIER = HOOK_IDENTIFIER(HOOK_USAGE);\ntry {\n\tBODY\n} finally {\n\tSTORE_IDENTIFIER.f();\n}`;\n\nfunction wrapInTryFinally(\n\tt: typeof BabelTypes,\n\tpath: NodePath<FunctionLike>,\n\tstate: PluginPass,\n\thookUsage: HookUsage\n): BabelTypes.BlockStatement {\n\tconst stopTrackingIdentifier = path.scope.generateUidIdentifier(\"effect\");\n\n\treturn t.blockStatement(\n\t\ttryCatchTemplate({\n\t\t\tSTORE_IDENTIFIER: stopTrackingIdentifier,\n\t\t\tHOOK_IDENTIFIER: get(state, getHookIdentifier)(),\n\t\t\tHOOK_USAGE: hookUsage,\n\t\t\tBODY: t.isBlockStatement(path.node.body)\n\t\t\t\t? path.node.body.body // TODO: Is it okay to elide the block statement here?\n\t\t\t\t: t.returnStatement(path.node.body),\n\t\t})\n\t);\n}\n\nfunction prependUseSignals<T extends FunctionLike>(\n\tt: typeof BabelTypes,\n\tpath: NodePath<T>,\n\tstate: PluginPass\n): BabelTypes.BlockStatement {\n\tconst body = t.blockStatement([\n\t\tt.expressionStatement(\n\t\t\tt.callExpression(get(state, getHookIdentifier)(), [])\n\t\t),\n\t]);\n\tif (t.isBlockStatement(path.node.body)) {\n\t\t// TODO: Is it okay to elide the block statement here?\n\t\tbody.body.push(...path.node.body.body);\n\t} else {\n\t\tbody.body.push(t.returnStatement(path.node.body));\n\t}\n\n\treturn body;\n}\n\nfunction transformFunction(\n\tt: typeof BabelTypes,\n\toptions: PluginOptions,\n\tpath: NodePath<FunctionLike>,\n\tfunctionName: string | null,\n\tstate: PluginPass\n) {\n\tconst isHook = isCustomHookName(functionName);\n\tconst isComponent = isComponentName(functionName);\n\tconst hookUsage = options.experimental?.noTryFinally\n\t\t? UNMANAGED\n\t\t: isHook\n\t\t? MANAGED_HOOK\n\t\t: isComponent\n\t\t? MANAGED_COMPONENT\n\t\t: UNMANAGED;\n\n\tlet newBody: BabelTypes.BlockStatement;\n\tif (hookUsage !== UNMANAGED) {\n\t\tnewBody = wrapInTryFinally(t, path, state, hookUsage);\n\t} else {\n\t\tnewBody = prependUseSignals(t, path, state);\n\t}\n\n\tsetData(path, alreadyTransformed, true);\n\tpath.get(\"body\").replaceWith(newBody);\n}\n\nfunction createImportLazily(\n\ttypes: typeof BabelTypes,\n\tpass: PluginPass,\n\tpath: NodePath<BabelTypes.Program>,\n\timportName: string,\n\tsource: string\n): () => BabelTypes.Identifier {\n\treturn () => {\n\t\tif (isModule(path)) {\n\t\t\tlet reference: BabelTypes.Identifier = get(pass, `imports/${importName}`);\n\t\t\tif (reference) return types.cloneNode(reference);\n\t\t\treference = addNamed(path, importName, source, {\n\t\t\t\timportedInterop: \"uncompiled\",\n\t\t\t\timportPosition: \"after\",\n\t\t\t});\n\t\t\tset(pass, `imports/${importName}`, reference);\n\n\t\t\t/** Helper function to determine if an import declaration's specifier matches the given importName */\n\t\t\tconst matchesImportName = (\n\t\t\t\ts: BabelTypes.ImportDeclaration[\"specifiers\"][0]\n\t\t\t) => {\n\t\t\t\tif (s.type !== \"ImportSpecifier\") return false;\n\t\t\t\treturn (\n\t\t\t\t\t(s.imported.type === \"Identifier\" &&\n\t\t\t\t\t\ts.imported.name === importName) ||\n\t\t\t\t\t(s.imported.type === \"StringLiteral\" &&\n\t\t\t\t\t\ts.imported.value === importName)\n\t\t\t\t);\n\t\t\t};\n\n\t\t\tfor (let statement of path.get(\"body\")) {\n\t\t\t\tif (\n\t\t\t\t\tstatement.isImportDeclaration() &&\n\t\t\t\t\tstatement.node.source.value === source &&\n\t\t\t\t\tstatement.node.specifiers.some(matchesImportName)\n\t\t\t\t) {\n\t\t\t\t\tpath.scope.registerDeclaration(statement);\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\treturn reference;\n\t\t} else {\n\t\t\t// This code originates from\n\t\t\t// https://github.com/XantreDev/preact-signals/blob/%40preact-signals/safe-react%400.6.1/packages/react/src/babel.ts#L390-L400\n\t\t\tlet reference = get(pass, `requires/${importName}`);\n\t\t\tif (reference) {\n\t\t\t\treference = types.cloneNode(reference);\n\t\t\t} else {\n\t\t\t\treference = addNamed(path, importName, source, {\n\t\t\t\t\timportedInterop: \"uncompiled\",\n\t\t\t\t});\n\t\t\t\tset(pass, `requires/${importName}`, reference);\n\t\t\t}\n\n\t\t\treturn reference;\n\t\t}\n\t};\n}\n\nfunction detectJSXAlternativeImports(\n\tpath: NodePath<BabelTypes.Program>,\n\tstate: PluginPass\n) {\n\tconst jsxIdentifierSet = new Set<string>();\n\tconst jsxObjectMap = new Map<string, string[]>();\n\n\tconst jsxPackages = {\n\t\t\"react/jsx-runtime\": [\"jsx\", \"jsxs\"],\n\t\t\"react/jsx-dev-runtime\": [\"jsxDEV\"],\n\t\treact: [\"createElement\"],\n\t};\n\n\tpath.traverse({\n\t\tImportDeclaration(importPath) {\n\t\t\tconst packageName = importPath.node.source.value;\n\t\t\tconst jsxMethods = jsxPackages[packageName as keyof typeof jsxPackages];\n\n\t\t\tif (!jsxMethods) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tfor (const specifier of importPath.node.specifiers) {\n\t\t\t\tif (\n\t\t\t\t\tspecifier.type === \"ImportSpecifier\" &&\n\t\t\t\t\tspecifier.imported.type === \"Identifier\"\n\t\t\t\t) {\n\t\t\t\t\t// Check if this is a function we care about\n\t\t\t\t\tif (jsxMethods.includes(specifier.imported.name)) {\n\t\t\t\t\t\tjsxIdentifierSet.add(specifier.local.name);\n\t\t\t\t\t}\n\t\t\t\t} else if (specifier.type === \"ImportDefaultSpecifier\") {\n\t\t\t\t\t// Handle default imports - add to objects map for member access\n\t\t\t\t\tjsxObjectMap.set(specifier.local.name, jsxMethods);\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\tVariableDeclarator(varPath) {\n\t\t\tconst init = varPath.get(\"init\");\n\n\t\t\tif (init.isCallExpression()) {\n\t\t\t\tconst callee = init.get(\"callee\");\n\t\t\t\tconst args = init.get(\"arguments\");\n\n\t\t\t\tif (\n\t\t\t\t\tcallee.isIdentifier() &&\n\t\t\t\t\tcallee.node.type === \"Identifier\" &&\n\t\t\t\t\tcallee.node.name === \"require\" &&\n\t\t\t\t\targs.length > 0 &&\n\t\t\t\t\targs[0].isStringLiteral()\n\t\t\t\t) {\n\t\t\t\t\tconst packageName = args[0].node.value;\n\t\t\t\t\tconst jsxMethods =\n\t\t\t\t\t\tjsxPackages[packageName as keyof typeof jsxPackages];\n\n\t\t\t\t\tif (jsxMethods) {\n\t\t\t\t\t\tif (varPath.node.id.type === \"Identifier\") {\n\t\t\t\t\t\t\t// Handle CJS require like: const React = require(\"react\")\n\t\t\t\t\t\t\tjsxObjectMap.set(varPath.node.id.name, jsxMethods);\n\t\t\t\t\t\t} else if (varPath.node.id.type === \"ObjectPattern\") {\n\t\t\t\t\t\t\t// Handle destructured CJS require like: const { createElement } = require(\"react\")\n\t\t\t\t\t\t\tfor (const prop of varPath.node.id.properties) {\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tprop.type === \"ObjectProperty\" &&\n\t\t\t\t\t\t\t\t\tprop.key.type === \"Identifier\" &&\n\t\t\t\t\t\t\t\t\tprop.value.type === \"Identifier\" &&\n\t\t\t\t\t\t\t\t\tjsxMethods.includes(prop.key.name)\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\tjsxIdentifierSet.add(prop.value.name);\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t});\n\n\tset(state, jsxIdentifiers, jsxIdentifierSet);\n\tset(state, jsxObjects, jsxObjectMap);\n}\n\nexport interface PluginOptions {\n\t/**\n\t * Specify the mode to use:\n\t * - `auto`: Automatically wrap all components that use signals.\n\t * - `manual`: Only wrap components that are annotated with `@useSignals` in a JSX comment.\n\t * - `all`: Makes all components reactive to signals.\n\t */\n\tmode?: \"auto\" | \"manual\" | \"all\";\n\t/** Specify a custom package to import the `useSignals` hook from. */\n\timportSource?: string;\n\t/**\n\t * Detect JSX elements created using alternative methods like jsx-runtime or createElement calls.\n\t * When enabled, detects patterns from react/jsx-runtime and react packages.\n\t * @default false\n\t */\n\tdetectTransformedJSX?: boolean;\n\texperimental?: {\n\t\t/**\n\t\t * If set to true, the component body will not be wrapped in a try/finally\n\t\t * block and instead the next component render or a microtick will stop\n\t\t * tracking signals for this component. This is an experimental feature and\n\t\t * may be removed in the future.\n\t\t * @default false\n\t\t */\n\t\tnoTryFinally?: boolean;\n\t};\n}\n\nfunction log(\n\ttransformed: boolean,\n\tpath: NodePath<FunctionLike>,\n\tfunctionName: string | null,\n\tcurrentFile: string | undefined\n) {\n\tif (!logger.transformed.enabled && !logger.skipped.enabled) return;\n\n\tlet cwd = \"\";\n\tif (typeof process !== undefined && typeof process.cwd == \"function\") {\n\t\tcwd = process.cwd().replace(/\\\\([^ ])/g, \"/$1\");\n\t\tcwd = cwd.endsWith(\"/\") ? cwd : cwd + \"/\";\n\t}\n\n\tconst relativePath = currentFile?.replace(cwd, \"\") ?? \"\";\n\tconst lineNum = path.node.loc?.start.line;\n\tfunctionName = functionName ?? \"<anonymous>\";\n\n\tif (transformed) {\n\t\tlogger.transformed(`${functionName} (${relativePath}:${lineNum})`);\n\t} else {\n\t\tlogger.skipped(`${functionName} (${relativePath}:${lineNum}) %o`, {\n\t\t\thasSignals: getData(path.scope, maybeUsesSignal) ?? false,\n\t\t\thasJSX: getData(path.scope, containsJSX) ?? false,\n\t\t});\n\t}\n}\n\nfunction isComponentLike(\n\tpath: NodePath<FunctionLike>,\n\tfunctionName: string | null\n): boolean {\n\treturn !getData(path, alreadyTransformed) && isComponentName(functionName);\n}\n\nexport default function signalsTransform(\n\t{ types: t }: PluginArgs,\n\toptions: PluginOptions\n): PluginObj {\n\t// TODO: Consider alternate implementation, where on enter of a function\n\t// expression, we run our own manual scan the AST to determine if the\n\t// function uses signals and is a component. This manual scan once upon\n\t// seeing a function would probably be faster than running an entire\n\t// babel pass with plugins on components twice.\n\tconst visitFunction: VisitNodeObject<PluginPass, FunctionLike> = {\n\t\texit(path, state) {\n\t\t\tif (getData(path, alreadyTransformed) === true) return false;\n\n\t\t\tlet functionName = getFunctionName(path);\n\t\t\tif (functionName === DefaultExportSymbol) {\n\t\t\t\tfunctionName = basename(this.filename) ?? null;\n\t\t\t}\n\n\t\t\tif (shouldTransform(path, functionName, state.opts)) {\n\t\t\t\ttransformFunction(t, state.opts, path, functionName, state);\n\t\t\t\tlog(true, path, functionName, this.filename);\n\t\t\t} else if (isComponentLike(path, functionName)) {\n\t\t\t\tlog(false, path, functionName, this.filename);\n\t\t\t}\n\t\t},\n\t};\n\n\treturn {\n\t\tname: \"@preact/signals-transform\",\n\t\tvisitor: {\n\t\t\tProgram: {\n\t\t\t\tenter(path, state) {\n\t\t\t\t\t// Following the pattern of babel-plugin-transform-react-jsx, we\n\t\t\t\t\t// lazily create the import statement for the useSignalTracking hook.\n\t\t\t\t\t// We create a function and store it in the PluginPass object, so that\n\t\t\t\t\t// on the first usage of the hook, we can create the import statement.\n\t\t\t\t\tset(\n\t\t\t\t\t\tstate,\n\t\t\t\t\t\tgetHookIdentifier,\n\t\t\t\t\t\tcreateImportLazily(\n\t\t\t\t\t\t\tt,\n\t\t\t\t\t\t\tstate,\n\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\timportName,\n\t\t\t\t\t\t\toptions.importSource ?? defaultImportSource\n\t\t\t\t\t\t)\n\t\t\t\t\t);\n\n\t\t\t\t\tif (options.detectTransformedJSX) {\n\t\t\t\t\t\tdetectJSXAlternativeImports(path, state);\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t},\n\n\t\t\tArrowFunctionExpression: visitFunction,\n\t\t\tFunctionExpression: visitFunction,\n\t\t\tFunctionDeclaration: visitFunction,\n\t\t\tObjectMethod: visitFunction,\n\n\t\t\tCallExpression(path, state) {\n\t\t\t\tif (options.detectTransformedJSX) {\n\t\t\t\t\tif (isJSXAlternativeCall(path, state)) {\n\t\t\t\t\t\tsetOnFunctionScope(path, containsJSX, true, this.filename);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tMemberExpression(path) {\n\t\t\t\tif (isValueMemberExpression(path)) {\n\t\t\t\t\tsetOnFunctionScope(path, maybeUsesSignal, true, this.filename);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tObjectPattern(path) {\n\t\t\t\tif (hasValuePropertyInPattern(path.node)) {\n\t\t\t\t\tsetOnFunctionScope(path, maybeUsesSignal, true, this.filename);\n\t\t\t\t}\n\t\t\t},\n\n\t\t\tJSXElement(path) {\n\t\t\t\tsetOnFunctionScope(path, containsJSX, true, this.filename);\n\t\t\t},\n\t\t\tJSXFragment(path) {\n\t\t\t\tsetOnFunctionScope(path, containsJSX, true, this.filename);\n\t\t\t},\n\t\t},\n\t};\n}\n"],"names":["optOutCommentIdentifier","optInCommentIdentifier","dataNamespace","defaultImportSource","importName","getHookIdentifier","maybeUsesSignal","containsJSX","alreadyTransformed","jsxIdentifiers","jsxObjects","UNMANAGED","MANAGED_COMPONENT","MANAGED_HOOK","logger","transformed","debug","skipped","get","pass","name","set","v","setData","node","value","getData","getComponentFunctionDeclaration","path","filename","prev","functionScope","scope","getFunctionParent","parent","functionName","getFunctionName","DefaultExportSymbol","isComponentFunction","type","callee","startsWith","toUpperCase","setOnFunctionScope","key","basename","split","pop","Symbol","getObjectPropertyKey","getFunctionNodeName","id","getFunctionNameFromParent","parentPath","left","property","nodeName","isComponentName","match","isCustomHookName","hasLeadingComment","comment","_comments$some","comments","leadingComments","some","c","hasLeadingOptInComment","hasLeadingOptOutComment","isOptedIntoSignalTracking","isOptedOutOfSignalTracking","shouldTransform","options","mode","isValueMemberExpression","isJSXAlternativeCall","state","jsxIdentifierSet","jsxObjectMap","isIdentifier","_jsxIdentifierSet$has","has","isMemberExpression","object","_allowedMethods$inclu","objectName","methodName","allowedMethods","includes","hasValuePropertyInPattern","pattern","properties","BabelTypes","isObjectProperty","tryCatchTemplate","template","statements","_t","_","wrapInTryFinally","t","hookUsage","stopTrackingIdentifier","generateUidIdentifier","blockStatement","STORE_IDENTIFIER","HOOK_IDENTIFIER","HOOK_USAGE","BODY","isBlockStatement","body","returnStatement","prependUseSignals","expressionStatement","callExpression","push","transformFunction","_options$experimental","isHook","isComponent","experimental","noTryFinally","newBody","replaceWith","createImportLazily","types","source","isModule","reference","cloneNode","addNamed","importedInterop","importPosition","matchesImportName","s","imported","statement","isImportDeclaration","specifiers","registerDeclaration","detectJSXAlternativeImports","Set","Map","jsxPackages","react","traverse","ImportDeclaration","importPath","packageName","jsxMethods","specifier","add","local","VariableDeclarator","varPath","init","isCallExpression","args","length","isStringLiteral","prop","log","currentFile","_currentFile$replace","_path$node$loc","_functionName","enabled","cwd","process","undefined","replace","endsWith","relativePath","lineNum","loc","start","line","_getData","_getData2","hasSignals","hasJSX","isComponentLike","signalsTransform","visitFunction","exit","_basename","opts","visitor","Program","enter","_options$importSource","importSource","detectTransformedJSX","ArrowFunctionExpression","FunctionExpression","FunctionDeclaration","ObjectMethod","CallExpression","MemberExpression","ObjectPattern","JSXElement","JSXFragment"],"mappings":"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"}