summaryrefslogtreecommitdiff
path: root/node_modules/@babel/helper-create-class-features-plugin/lib/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/@babel/helper-create-class-features-plugin/lib/index.js')
-rw-r--r--node_modules/@babel/helper-create-class-features-plugin/lib/index.js230
1 files changed, 230 insertions, 0 deletions
diff --git a/node_modules/@babel/helper-create-class-features-plugin/lib/index.js b/node_modules/@babel/helper-create-class-features-plugin/lib/index.js
new file mode 100644
index 00000000..8bb71f8d
--- /dev/null
+++ b/node_modules/@babel/helper-create-class-features-plugin/lib/index.js
@@ -0,0 +1,230 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+Object.defineProperty(exports, "FEATURES", {
+ enumerable: true,
+ get: function () {
+ return _features.FEATURES;
+ }
+});
+Object.defineProperty(exports, "buildCheckInRHS", {
+ enumerable: true,
+ get: function () {
+ return _fields.buildCheckInRHS;
+ }
+});
+exports.createClassFeaturePlugin = createClassFeaturePlugin;
+Object.defineProperty(exports, "enableFeature", {
+ enumerable: true,
+ get: function () {
+ return _features.enableFeature;
+ }
+});
+Object.defineProperty(exports, "injectInitialization", {
+ enumerable: true,
+ get: function () {
+ return _misc.injectInitialization;
+ }
+});
+var _core = require("@babel/core");
+var _helperFunctionName = require("@babel/helper-function-name");
+var _helperSplitExportDeclaration = require("@babel/helper-split-export-declaration");
+var _semver = require("semver");
+var _fields = require("./fields.js");
+var _decorators = require("./decorators.js");
+var _misc = require("./misc.js");
+var _features = require("./features.js");
+var _typescript = require("./typescript.js");
+const versionKey = "@babel/plugin-class-features/version";
+function createClassFeaturePlugin({
+ name,
+ feature,
+ loose,
+ manipulateOptions,
+ api,
+ inherits
+}) {
+ {
+ var _api;
+ (_api = api) != null ? _api : api = {
+ assumption: () => void 0
+ };
+ }
+ const setPublicClassFields = api.assumption("setPublicClassFields");
+ const privateFieldsAsSymbols = api.assumption("privateFieldsAsSymbols");
+ const privateFieldsAsProperties = api.assumption("privateFieldsAsProperties");
+ const constantSuper = api.assumption("constantSuper");
+ const noDocumentAll = api.assumption("noDocumentAll");
+ if (privateFieldsAsProperties && privateFieldsAsSymbols) {
+ throw new Error(`Cannot enable both the "privateFieldsAsProperties" and ` + `"privateFieldsAsSymbols" assumptions as the same time.`);
+ }
+ const privateFieldsAsSymbolsOrProperties = privateFieldsAsProperties || privateFieldsAsSymbols;
+ if (loose === true) {
+ const explicit = [];
+ if (setPublicClassFields !== undefined) {
+ explicit.push(`"setPublicClassFields"`);
+ }
+ if (privateFieldsAsProperties !== undefined) {
+ explicit.push(`"privateFieldsAsProperties"`);
+ }
+ if (privateFieldsAsSymbols !== undefined) {
+ explicit.push(`"privateFieldsAsSymbols"`);
+ }
+ if (explicit.length !== 0) {
+ console.warn(`[${name}]: You are using the "loose: true" option and you are` + ` explicitly setting a value for the ${explicit.join(" and ")}` + ` assumption${explicit.length > 1 ? "s" : ""}. The "loose" option` + ` can cause incompatibilities with the other class features` + ` plugins, so it's recommended that you replace it with the` + ` following top-level option:\n` + `\t"assumptions": {\n` + `\t\t"setPublicClassFields": true,\n` + `\t\t"privateFieldsAsSymbols": true\n` + `\t}`);
+ }
+ }
+ return {
+ name,
+ manipulateOptions,
+ inherits,
+ pre(file) {
+ (0, _features.enableFeature)(file, feature, loose);
+ {
+ if (typeof file.get(versionKey) === "number") {
+ file.set(versionKey, "7.22.15");
+ return;
+ }
+ }
+ if (!file.get(versionKey) || _semver.lt(file.get(versionKey), "7.22.15")) {
+ file.set(versionKey, "7.22.15");
+ }
+ },
+ visitor: {
+ Class(path, {
+ file
+ }) {
+ var _ref;
+ if (file.get(versionKey) !== "7.22.15") return;
+ if (!(0, _features.shouldTransform)(path, file)) return;
+ const pathIsClassDeclaration = path.isClassDeclaration();
+ if (pathIsClassDeclaration) (0, _typescript.assertFieldTransformed)(path);
+ const loose = (0, _features.isLoose)(file, feature);
+ let constructor;
+ const isDecorated = (0, _decorators.hasDecorators)(path.node);
+ const props = [];
+ const elements = [];
+ const computedPaths = [];
+ const privateNames = new Set();
+ const body = path.get("body");
+ for (const path of body.get("body")) {
+ if ((path.isClassProperty() || path.isClassMethod()) && path.node.computed) {
+ computedPaths.push(path);
+ }
+ if (path.isPrivate()) {
+ const {
+ name
+ } = path.node.key.id;
+ const getName = `get ${name}`;
+ const setName = `set ${name}`;
+ if (path.isClassPrivateMethod()) {
+ if (path.node.kind === "get") {
+ if (privateNames.has(getName) || privateNames.has(name) && !privateNames.has(setName)) {
+ throw path.buildCodeFrameError("Duplicate private field");
+ }
+ privateNames.add(getName).add(name);
+ } else if (path.node.kind === "set") {
+ if (privateNames.has(setName) || privateNames.has(name) && !privateNames.has(getName)) {
+ throw path.buildCodeFrameError("Duplicate private field");
+ }
+ privateNames.add(setName).add(name);
+ }
+ } else {
+ if (privateNames.has(name) && !privateNames.has(getName) && !privateNames.has(setName) || privateNames.has(name) && (privateNames.has(getName) || privateNames.has(setName))) {
+ throw path.buildCodeFrameError("Duplicate private field");
+ }
+ privateNames.add(name);
+ }
+ }
+ if (path.isClassMethod({
+ kind: "constructor"
+ })) {
+ constructor = path;
+ } else {
+ elements.push(path);
+ if (path.isProperty() || path.isPrivate() || path.isStaticBlock != null && path.isStaticBlock()) {
+ props.push(path);
+ }
+ }
+ }
+ {
+ if (!props.length && !isDecorated) return;
+ }
+ const innerBinding = path.node.id;
+ let ref;
+ if (!innerBinding || !pathIsClassDeclaration) {
+ (0, _helperFunctionName.default)(path);
+ ref = path.scope.generateUidIdentifier("class");
+ }
+ const classRefForDefine = (_ref = ref) != null ? _ref : _core.types.cloneNode(innerBinding);
+ const privateNamesMap = (0, _fields.buildPrivateNamesMap)(props);
+ const privateNamesNodes = (0, _fields.buildPrivateNamesNodes)(privateNamesMap, privateFieldsAsProperties != null ? privateFieldsAsProperties : loose, privateFieldsAsSymbols != null ? privateFieldsAsSymbols : false, file);
+ (0, _fields.transformPrivateNamesUsage)(classRefForDefine, path, privateNamesMap, {
+ privateFieldsAsProperties: privateFieldsAsSymbolsOrProperties != null ? privateFieldsAsSymbolsOrProperties : loose,
+ noDocumentAll,
+ innerBinding
+ }, file);
+ let keysNodes, staticNodes, instanceNodes, pureStaticNodes, classBindingNode, wrapClass;
+ {
+ if (isDecorated) {
+ staticNodes = pureStaticNodes = keysNodes = [];
+ ({
+ instanceNodes,
+ wrapClass
+ } = (0, _decorators.buildDecoratedClass)(classRefForDefine, path, elements, file));
+ } else {
+ keysNodes = (0, _misc.extractComputedKeys)(path, computedPaths, file);
+ ({
+ staticNodes,
+ pureStaticNodes,
+ instanceNodes,
+ classBindingNode,
+ wrapClass
+ } = (0, _fields.buildFieldsInitNodes)(ref, path.node.superClass, props, privateNamesMap, file, setPublicClassFields != null ? setPublicClassFields : loose, privateFieldsAsSymbolsOrProperties != null ? privateFieldsAsSymbolsOrProperties : loose, constantSuper != null ? constantSuper : loose, innerBinding));
+ }
+ }
+ if (instanceNodes.length > 0) {
+ (0, _misc.injectInitialization)(path, constructor, instanceNodes, (referenceVisitor, state) => {
+ {
+ if (isDecorated) return;
+ }
+ for (const prop of props) {
+ if (_core.types.isStaticBlock != null && _core.types.isStaticBlock(prop.node) || prop.node.static) continue;
+ prop.traverse(referenceVisitor, state);
+ }
+ });
+ }
+ const wrappedPath = wrapClass(path);
+ wrappedPath.insertBefore([...privateNamesNodes, ...keysNodes]);
+ if (staticNodes.length > 0) {
+ wrappedPath.insertAfter(staticNodes);
+ }
+ if (pureStaticNodes.length > 0) {
+ wrappedPath.find(parent => parent.isStatement() || parent.isDeclaration()).insertAfter(pureStaticNodes);
+ }
+ if (classBindingNode != null && pathIsClassDeclaration) {
+ wrappedPath.insertAfter(classBindingNode);
+ }
+ },
+ ExportDefaultDeclaration(path, {
+ file
+ }) {
+ {
+ if (file.get(versionKey) !== "7.22.15") return;
+ const decl = path.get("declaration");
+ if (decl.isClassDeclaration() && (0, _decorators.hasDecorators)(decl.node)) {
+ if (decl.node.id) {
+ (0, _helperSplitExportDeclaration.default)(path);
+ } else {
+ decl.node.type = "ClassExpression";
+ }
+ }
+ }
+ }
+ }
+ };
+}
+
+//# sourceMappingURL=index.js.map