{"version":3,"names":["hasOwnDecorators","node","decorators","length","hasDecorators","body","some","prop","key","value","t","objectProperty","identifier","method","objectMethod","blockStatement","takeDecorators","result","arrayExpression","map","decorator","expression","undefined","getKey","computed","isIdentifier","stringLiteral","name","String","extractElementDescriptor","file","classRef","superRef","path","isMethod","isClassMethod","isPrivate","buildCodeFrameError","type","scope","isTSDeclareMethod","ReplaceSupers","methodPath","objectRef","refToPreserve","replace","properties","kind","static","booleanLiteral","filter","Boolean","id","transformed","toExpression","push","nameFunction","isClassProperty","template","statements","ast","buildUndefinedNode","remove","objectExpression","addDecorateHelper","addHelper","err","code","message","buildDecoratedClass","ref","elements","initializeId","generateUidIdentifier","isDeclaration","isStrict","isInStrictMode","superClass","cloneNode","superId","generateUidIdentifierBasedOnNode","classDecorators","definitions","element","abstract","wrapperCall","nullLiteral","arguments","directives","directive","directiveLiteral","replacement","classPathDesc","statement","instanceNodes","wrapClass","replaceWith","get"],"sources":["../src/decorators.ts"],"sourcesContent":["// TODO(Babel 8): Remove this file\n\nimport { types as t, template } from \"@babel/core\";\nimport type { File } from \"@babel/core\";\nimport type { NodePath } from \"@babel/traverse\";\nimport ReplaceSupers from \"@babel/helper-replace-supers\";\nimport nameFunction from \"@babel/helper-function-name\";\n\ntype Decorable = Extract;\n\nexport function hasOwnDecorators(node: t.Node) {\n // @ts-expect-error(flow->ts) TODO: maybe we could add t.isDecoratable to make ts happy\n return !!(node.decorators && node.decorators.length);\n}\n\nexport function hasDecorators(node: t.Class) {\n return hasOwnDecorators(node) || node.body.body.some(hasOwnDecorators);\n}\n\nfunction prop(key: string, value?: t.Expression) {\n if (!value) return null;\n return t.objectProperty(t.identifier(key), value);\n}\n\nfunction method(key: string, body: t.Statement[]) {\n return t.objectMethod(\n \"method\",\n t.identifier(key),\n [],\n t.blockStatement(body),\n );\n}\n\nfunction takeDecorators(node: Decorable) {\n let result: t.ArrayExpression | undefined;\n if (node.decorators && node.decorators.length > 0) {\n result = t.arrayExpression(\n node.decorators.map(decorator => decorator.expression),\n );\n }\n node.decorators = undefined;\n return result;\n}\n\ntype AcceptedElement = Exclude;\ntype SupportedElement = Exclude<\n AcceptedElement,\n | t.ClassPrivateMethod\n | t.ClassPrivateProperty\n | t.ClassAccessorProperty\n | t.StaticBlock\n>;\n\nfunction getKey(node: SupportedElement) {\n if (node.computed) {\n return node.key;\n } else if (t.isIdentifier(node.key)) {\n return t.stringLiteral(node.key.name);\n } else {\n return t.stringLiteral(\n String(\n // A non-identifier non-computed key\n (node.key as t.StringLiteral | t.NumericLiteral | t.BigIntLiteral)\n .value,\n ),\n );\n }\n}\n\nfunction extractElementDescriptor(\n file: File,\n classRef: t.Identifier,\n superRef: t.Identifier,\n path: NodePath,\n) {\n const isMethod = path.isClassMethod();\n if (path.isPrivate()) {\n throw path.buildCodeFrameError(\n `Private ${\n isMethod ? \"methods\" : \"fields\"\n } in decorated classes are not supported yet.`,\n );\n }\n if (path.node.type === \"ClassAccessorProperty\") {\n throw path.buildCodeFrameError(\n `Accessor properties are not supported in 2018-09 decorator transform, please specify { \"version\": \"2021-12\" } instead.`,\n );\n }\n if (path.node.type === \"StaticBlock\") {\n throw path.buildCodeFrameError(\n `Static blocks are not supported in 2018-09 decorator transform, please specify { \"version\": \"2021-12\" } instead.`,\n );\n }\n\n const { node, scope } = path as NodePath;\n\n if (!path.isTSDeclareMethod()) {\n new ReplaceSupers({\n methodPath: path as NodePath<\n Exclude\n >,\n objectRef: classRef,\n superRef,\n file,\n refToPreserve: classRef,\n }).replace();\n }\n\n const properties: t.ObjectExpression[\"properties\"] = [\n prop(\"kind\", t.stringLiteral(t.isClassMethod(node) ? node.kind : \"field\")),\n prop(\"decorators\", takeDecorators(node as Decorable)),\n prop(\"static\", node.static && t.booleanLiteral(true)),\n prop(\"key\", getKey(node)),\n ].filter(Boolean);\n\n if (t.isClassMethod(node)) {\n const id = node.computed\n ? null\n : (node.key as\n | t.Identifier\n | t.StringLiteral\n | t.NumericLiteral\n | t.BigIntLiteral);\n const transformed = t.toExpression(node);\n properties.push(\n prop(\n \"value\",\n nameFunction({ node: transformed, id, scope }) || transformed,\n ),\n );\n } else if (t.isClassProperty(node) && node.value) {\n properties.push(\n method(\"value\", template.statements.ast`return ${node.value}`),\n );\n } else {\n properties.push(prop(\"value\", scope.buildUndefinedNode()));\n }\n\n path.remove();\n\n return t.objectExpression(properties);\n}\n\nfunction addDecorateHelper(file: File) {\n try {\n return file.addHelper(\"decorate\");\n } catch (err) {\n if (err.code === \"BABEL_HELPER_UNKNOWN\") {\n err.message +=\n \"\\n '@babel/plugin-transform-decorators' in non-legacy mode\" +\n \" requires '@babel/core' version ^7.0.2 and you appear to be using\" +\n \" an older version.\";\n }\n throw err;\n }\n}\n\ntype ClassElement = t.Class[\"body\"][\"body\"][number];\ntype ClassElementPath = NodePath;\n\nexport function buildDecoratedClass(\n ref: t.Identifier,\n path: NodePath,\n elements: ClassElementPath[],\n file: File,\n) {\n const { node, scope } = path;\n const initializeId = scope.generateUidIdentifier(\"initialize\");\n const isDeclaration = node.id && path.isDeclaration();\n const isStrict = path.isInStrictMode();\n const { superClass } = node;\n\n node.type = \"ClassDeclaration\";\n if (!node.id) node.id = t.cloneNode(ref);\n\n let superId: t.Identifier;\n if (superClass) {\n superId = scope.generateUidIdentifierBasedOnNode(node.superClass, \"super\");\n node.superClass = superId;\n }\n\n const classDecorators = takeDecorators(node);\n const definitions = t.arrayExpression(\n elements\n .filter(\n element =>\n // @ts-expect-error Ignore TypeScript's abstract methods (see #10514)\n !element.node.abstract && element.node.type !== \"TSIndexSignature\",\n )\n .map(path =>\n extractElementDescriptor(\n file,\n node.id,\n superId,\n // @ts-expect-error TS can not exclude TSIndexSignature\n path,\n ),\n ),\n );\n\n const wrapperCall = template.expression.ast`\n ${addDecorateHelper(file)}(\n ${classDecorators || t.nullLiteral()},\n function (${initializeId}, ${superClass ? t.cloneNode(superId) : null}) {\n ${node}\n return { F: ${t.cloneNode(node.id)}, d: ${definitions} };\n },\n ${superClass}\n )\n ` as t.CallExpression & { arguments: [unknown, t.FunctionExpression] };\n\n if (!isStrict) {\n wrapperCall.arguments[1].body.directives.push(\n t.directive(t.directiveLiteral(\"use strict\")),\n );\n }\n\n let replacement: t.Node = wrapperCall;\n let classPathDesc = \"arguments.1.body.body.0\";\n if (isDeclaration) {\n replacement = template.statement.ast`let ${ref} = ${wrapperCall}`;\n classPathDesc = \"declarations.0.init.\" + classPathDesc;\n }\n\n return {\n instanceNodes: [template.statement.ast`${t.cloneNode(initializeId)}(this)`],\n wrapClass(path: NodePath) {\n path.replaceWith(replacement);\n return path.get(classPathDesc) as NodePath;\n },\n };\n}\n"],"mappings":"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"}