1 line
18 KiB
Plaintext
1 line
18 KiB
Plaintext
{"version":3,"names":["version","split","reduce","v","x","versionKey","createClassFeaturePlugin","name","feature","loose","manipulateOptions","api","assumption","inherits","setPublicClassFields","privateFieldsAsProperties","constantSuper","noDocumentAll","explicit","undefined","push","length","console","warn","join","pre","file","enableFeature","get","set","visitor","Class","path","shouldTransform","isClassDeclaration","assertFieldTransformed","isLoose","constructor","isDecorated","hasDecorators","node","props","elements","computedPaths","privateNames","Set","body","isClassProperty","isClassMethod","computed","isPrivate","key","id","getName","setName","isClassPrivateMethod","kind","has","buildCodeFrameError","add","isProperty","isStaticBlock","innerBinding","ref","isClassExpression","nameFunction","scope","generateUidIdentifier","t","cloneNode","privateNamesMap","buildPrivateNamesMap","privateNamesNodes","buildPrivateNamesNodes","transformPrivateNamesUsage","keysNodes","staticNodes","instanceNodes","pureStaticNodes","wrapClass","buildDecoratedClass","extractComputedKeys","buildFieldsInitNodes","superClass","injectInitialization","referenceVisitor","state","prop","static","traverse","wrappedPath","insertBefore","insertAfter","find","parent","isStatement","isDeclaration","ExportDefaultDeclaration","decl","splitExportDeclaration","type"],"sources":["../src/index.ts"],"sourcesContent":["import { types as t } from \"@babel/core\";\nimport type { PluginAPI, PluginObject } from \"@babel/core\";\nimport type { NodePath } from \"@babel/traverse\";\nimport nameFunction from \"@babel/helper-function-name\";\nimport splitExportDeclaration from \"@babel/helper-split-export-declaration\";\nimport {\n buildPrivateNamesNodes,\n buildPrivateNamesMap,\n transformPrivateNamesUsage,\n buildFieldsInitNodes,\n buildCheckInRHS,\n} from \"./fields\";\nimport type { PropPath } from \"./fields\";\nimport { buildDecoratedClass, hasDecorators } from \"./decorators\";\nimport { injectInitialization, extractComputedKeys } from \"./misc\";\nimport { enableFeature, FEATURES, isLoose, shouldTransform } from \"./features\";\nimport { assertFieldTransformed } from \"./typescript\";\n\nexport { FEATURES, enableFeature, injectInitialization, buildCheckInRHS };\n\ndeclare const PACKAGE_JSON: { name: string; version: string };\n\n// Note: Versions are represented as an integer. e.g. 7.1.5 is represented\n// as 70000100005. This method is easier than using a semver-parsing\n// package, but it breaks if we release x.y.z where x, y or z are\n// greater than 99_999.\nconst version = PACKAGE_JSON.version\n .split(\".\")\n .reduce((v, x) => v * 1e5 + +x, 0);\nconst versionKey = \"@babel/plugin-class-features/version\";\n\ninterface Options {\n name: string;\n feature: number;\n loose?: boolean;\n inherits?: PluginObject[\"inherits\"];\n manipulateOptions?: PluginObject[\"manipulateOptions\"];\n api?: PluginAPI;\n}\n\nexport function createClassFeaturePlugin({\n name,\n feature,\n loose,\n manipulateOptions,\n // @ts-ignore(Babel 7 vs Babel 8) TODO(Babel 8): Remove the default value\n api = { assumption: () => void 0 },\n inherits,\n}: Options): PluginObject {\n const setPublicClassFields = api.assumption(\"setPublicClassFields\");\n const privateFieldsAsProperties = api.assumption(\"privateFieldsAsProperties\");\n const constantSuper = api.assumption(\"constantSuper\");\n const noDocumentAll = api.assumption(\"noDocumentAll\");\n\n if (loose === true) {\n const explicit = [];\n\n if (setPublicClassFields !== undefined) {\n explicit.push(`\"setPublicClassFields\"`);\n }\n if (privateFieldsAsProperties !== undefined) {\n explicit.push(`\"privateFieldsAsProperties\"`);\n }\n if (explicit.length !== 0) {\n console.warn(\n `[${name}]: You are using the \"loose: true\" option and you are` +\n ` explicitly setting a value for the ${explicit.join(\" and \")}` +\n ` assumption${explicit.length > 1 ? \"s\" : \"\"}. The \"loose\" option` +\n ` can cause incompatibilities with the other class features` +\n ` plugins, so it's recommended that you replace it with the` +\n ` following top-level option:\\n` +\n `\\t\"assumptions\": {\\n` +\n `\\t\\t\"setPublicClassFields\": true,\\n` +\n `\\t\\t\"privateFieldsAsProperties\": true\\n` +\n `\\t}`,\n );\n }\n }\n\n return {\n name,\n manipulateOptions,\n inherits,\n\n pre(file) {\n enableFeature(file, feature, loose);\n\n if (!file.get(versionKey) || file.get(versionKey) < version) {\n file.set(versionKey, version);\n }\n },\n\n visitor: {\n Class(path, { file }) {\n if (file.get(versionKey) !== version) return;\n\n if (!shouldTransform(path, file)) return;\n\n if (path.isClassDeclaration()) assertFieldTransformed(path);\n\n const loose = isLoose(file, feature);\n\n let constructor: NodePath<t.ClassMethod>;\n const isDecorated = hasDecorators(path.node);\n const props: PropPath[] = [];\n const elements = [];\n const computedPaths: NodePath<t.ClassProperty | t.ClassMethod>[] = [];\n const privateNames = new Set<string>();\n const body = path.get(\"body\");\n\n for (const path of body.get(\"body\")) {\n if (\n // check path.node.computed is enough, but ts will complain\n (path.isClassProperty() || path.isClassMethod()) &&\n path.node.computed\n ) {\n computedPaths.push(path);\n }\n\n if (path.isPrivate()) {\n const { name } = path.node.key.id;\n const getName = `get ${name}`;\n const setName = `set ${name}`;\n\n if (path.isClassPrivateMethod()) {\n if (path.node.kind === \"get\") {\n if (\n privateNames.has(getName) ||\n (privateNames.has(name) && !privateNames.has(setName))\n ) {\n throw path.buildCodeFrameError(\"Duplicate private field\");\n }\n privateNames.add(getName).add(name);\n } else if (path.node.kind === \"set\") {\n if (\n privateNames.has(setName) ||\n (privateNames.has(name) && !privateNames.has(getName))\n ) {\n throw path.buildCodeFrameError(\"Duplicate private field\");\n }\n privateNames.add(setName).add(name);\n }\n } else {\n if (\n (privateNames.has(name) &&\n !privateNames.has(getName) &&\n !privateNames.has(setName)) ||\n (privateNames.has(name) &&\n (privateNames.has(getName) || privateNames.has(setName)))\n ) {\n throw path.buildCodeFrameError(\"Duplicate private field\");\n }\n\n privateNames.add(name);\n }\n }\n\n if (path.isClassMethod({ kind: \"constructor\" })) {\n constructor = path;\n } else {\n elements.push(path);\n if (\n path.isProperty() ||\n path.isPrivate() ||\n path.isStaticBlock?.()\n ) {\n props.push(path as PropPath);\n }\n }\n }\n\n if (process.env.BABEL_8_BREAKING) {\n if (!props.length) return;\n } else {\n if (!props.length && !isDecorated) return;\n }\n\n const innerBinding = path.node.id;\n let ref: t.Identifier;\n if (!innerBinding || path.isClassExpression()) {\n nameFunction(path);\n ref = path.scope.generateUidIdentifier(\"class\");\n } else {\n ref = t.cloneNode(path.node.id);\n }\n\n // NODE: These three functions don't support decorators yet,\n // but verifyUsedFeatures throws if there are both\n // decorators and private fields.\n const privateNamesMap = buildPrivateNamesMap(props);\n const privateNamesNodes = buildPrivateNamesNodes(\n privateNamesMap,\n privateFieldsAsProperties ?? loose,\n file,\n );\n\n transformPrivateNamesUsage(\n ref,\n path,\n privateNamesMap,\n {\n privateFieldsAsProperties: privateFieldsAsProperties ?? loose,\n noDocumentAll,\n innerBinding,\n },\n file,\n );\n\n let keysNodes: t.Statement[],\n staticNodes: t.Statement[],\n instanceNodes: t.Statement[],\n pureStaticNodes: t.FunctionDeclaration[],\n wrapClass: (path: NodePath<t.Class>) => NodePath;\n\n if (!process.env.BABEL_8_BREAKING) {\n if (isDecorated) {\n staticNodes = pureStaticNodes = keysNodes = [];\n ({ instanceNodes, wrapClass } = buildDecoratedClass(\n ref,\n path,\n elements,\n file,\n ));\n } else {\n keysNodes = extractComputedKeys(path, computedPaths, file);\n ({ staticNodes, pureStaticNodes, instanceNodes, wrapClass } =\n buildFieldsInitNodes(\n ref,\n path.node.superClass,\n props,\n privateNamesMap,\n file,\n setPublicClassFields ?? loose,\n privateFieldsAsProperties ?? loose,\n constantSuper ?? loose,\n innerBinding,\n ));\n }\n } else {\n keysNodes = extractComputedKeys(path, computedPaths, file);\n ({ staticNodes, pureStaticNodes, instanceNodes, wrapClass } =\n buildFieldsInitNodes(\n ref,\n path.node.superClass,\n props,\n privateNamesMap,\n file,\n setPublicClassFields ?? loose,\n privateFieldsAsProperties ?? loose,\n constantSuper ?? loose,\n innerBinding,\n ));\n }\n\n if (instanceNodes.length > 0) {\n injectInitialization(\n path,\n constructor,\n instanceNodes,\n (referenceVisitor, state) => {\n if (!process.env.BABEL_8_BREAKING) {\n if (isDecorated) return;\n }\n for (const prop of props) {\n // @ts-expect-error: TS doesn't infer that prop.node is not a StaticBlock\n if (t.isStaticBlock?.(prop.node) || prop.node.static) continue;\n prop.traverse(referenceVisitor, state);\n }\n },\n );\n }\n\n // rename to make ts happy\n const wrappedPath = wrapClass(path);\n wrappedPath.insertBefore([...privateNamesNodes, ...keysNodes]);\n if (staticNodes.length > 0) {\n wrappedPath.insertAfter(staticNodes);\n }\n if (pureStaticNodes.length > 0) {\n wrappedPath\n .find(parent => parent.isStatement() || parent.isDeclaration())\n .insertAfter(pureStaticNodes);\n }\n },\n\n ExportDefaultDeclaration(path, { file }) {\n if (!process.env.BABEL_8_BREAKING) {\n if (file.get(versionKey) !== version) return;\n\n const decl = path.get(\"declaration\");\n\n if (decl.isClassDeclaration() && hasDecorators(decl.node)) {\n if (decl.node.id) {\n // export default class Foo {}\n // -->\n // class Foo {} export { Foo as default }\n splitExportDeclaration(path);\n } else {\n // @ts-expect-error Anonymous class declarations can be\n // transformed as if they were expressions\n decl.node.type = \"ClassExpression\";\n }\n }\n }\n },\n },\n };\n}\n"],"mappings":"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"} |