summaryrefslogtreecommitdiff
path: root/node_modules/@babel/plugin-transform-private-property-in-object/lib/index.js
diff options
context:
space:
mode:
authorlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:31:11 +0800
committerlittleblack111 <littleblack11111@gmail.com>2023-10-14 15:31:11 +0800
commitaa773172311dcada759dfbaac485f4bc6e00bc21 (patch)
treeca6d9a5eff3ab8f689f9acb4f0df791d9486813d /node_modules/@babel/plugin-transform-private-property-in-object/lib/index.js
parentc5a5384e846f242e901e859fe600d695d8990a9a (diff)
added babel
Diffstat (limited to 'node_modules/@babel/plugin-transform-private-property-in-object/lib/index.js')
-rw-r--r--node_modules/@babel/plugin-transform-private-property-in-object/lib/index.js127
1 files changed, 127 insertions, 0 deletions
diff --git a/node_modules/@babel/plugin-transform-private-property-in-object/lib/index.js b/node_modules/@babel/plugin-transform-private-property-in-object/lib/index.js
new file mode 100644
index 00000000..d3910662
--- /dev/null
+++ b/node_modules/@babel/plugin-transform-private-property-in-object/lib/index.js
@@ -0,0 +1,127 @@
+"use strict";
+
+Object.defineProperty(exports, "__esModule", {
+ value: true
+});
+exports.default = void 0;
+var _helperPluginUtils = require("@babel/helper-plugin-utils");
+var _helperCreateClassFeaturesPlugin = require("@babel/helper-create-class-features-plugin");
+var _helperAnnotateAsPure = require("@babel/helper-annotate-as-pure");
+var _default = (0, _helperPluginUtils.declare)((api, opt) => {
+ api.assertVersion(7);
+ const {
+ types: t,
+ template
+ } = api;
+ const {
+ loose
+ } = opt;
+ const classWeakSets = new WeakMap();
+ const fieldsWeakSets = new WeakMap();
+ function unshadow(name, targetScope, scope) {
+ while (scope !== targetScope) {
+ if (scope.hasOwnBinding(name)) scope.rename(name);
+ scope = scope.parent;
+ }
+ }
+ function injectToFieldInit(fieldPath, expr, before = false) {
+ if (fieldPath.node.value) {
+ const value = fieldPath.get("value");
+ if (before) {
+ value.insertBefore(expr);
+ } else {
+ value.insertAfter(expr);
+ }
+ } else {
+ fieldPath.set("value", t.unaryExpression("void", expr));
+ }
+ }
+ function injectInitialization(classPath, init) {
+ let firstFieldPath;
+ let constructorPath;
+ for (const el of classPath.get("body.body")) {
+ if ((el.isClassProperty() || el.isClassPrivateProperty()) && !el.node.static) {
+ firstFieldPath = el;
+ break;
+ }
+ if (!constructorPath && el.isClassMethod({
+ kind: "constructor"
+ })) {
+ constructorPath = el;
+ }
+ }
+ if (firstFieldPath) {
+ injectToFieldInit(firstFieldPath, init, true);
+ } else {
+ (0, _helperCreateClassFeaturesPlugin.injectInitialization)(classPath, constructorPath, [t.expressionStatement(init)]);
+ }
+ }
+ function getWeakSetId(weakSets, outerClass, reference, name = "", inject) {
+ let id = weakSets.get(reference.node);
+ if (!id) {
+ id = outerClass.scope.generateUidIdentifier(`${name || ""} brandCheck`);
+ weakSets.set(reference.node, id);
+ inject(reference, template.expression.ast`${t.cloneNode(id)}.add(this)`);
+ const newExpr = t.newExpression(t.identifier("WeakSet"), []);
+ (0, _helperAnnotateAsPure.default)(newExpr);
+ outerClass.insertBefore(template.ast`var ${id} = ${newExpr}`);
+ }
+ return t.cloneNode(id);
+ }
+ return {
+ name: "transform-private-property-in-object",
+ inherits: require("@babel/plugin-syntax-private-property-in-object").default,
+ pre() {
+ (0, _helperCreateClassFeaturesPlugin.enableFeature)(this.file, _helperCreateClassFeaturesPlugin.FEATURES.privateIn, loose);
+ },
+ visitor: {
+ BinaryExpression(path, state) {
+ const {
+ node
+ } = path;
+ const {
+ file
+ } = state;
+ if (node.operator !== "in") return;
+ if (!t.isPrivateName(node.left)) return;
+ const {
+ name
+ } = node.left.id;
+ let privateElement;
+ const outerClass = path.findParent(path => {
+ if (!path.isClass()) return false;
+ privateElement = path.get("body.body").find(({
+ node
+ }) => t.isPrivate(node) && node.key.id.name === name);
+ return !!privateElement;
+ });
+ if (outerClass.parentPath.scope.path.isPattern()) {
+ outerClass.replaceWith(template.ast`(() => ${outerClass.node})()`);
+ return;
+ }
+ if (privateElement.node.type === "ClassPrivateMethod") {
+ if (privateElement.node.static) {
+ if (outerClass.node.id) {
+ unshadow(outerClass.node.id.name, outerClass.scope, path.scope);
+ } else {
+ outerClass.set("id", path.scope.generateUidIdentifier("class"));
+ }
+ path.replaceWith(template.expression.ast`
+ ${t.cloneNode(outerClass.node.id)} === ${(0, _helperCreateClassFeaturesPlugin.buildCheckInRHS)(node.right, file)}
+ `);
+ } else {
+ var _outerClass$node$id;
+ const id = getWeakSetId(classWeakSets, outerClass, outerClass, (_outerClass$node$id = outerClass.node.id) == null ? void 0 : _outerClass$node$id.name, injectInitialization);
+ path.replaceWith(template.expression.ast`${id}.has(${(0, _helperCreateClassFeaturesPlugin.buildCheckInRHS)(node.right, file)})`);
+ }
+ } else {
+ const id = getWeakSetId(fieldsWeakSets, outerClass, privateElement, privateElement.node.key.id.name, injectToFieldInit);
+ path.replaceWith(template.expression.ast`${id}.has(${(0, _helperCreateClassFeaturesPlugin.buildCheckInRHS)(node.right, file)})`);
+ }
+ }
+ }
+ };
+});
+exports.default = _default;
+
+//# sourceMappingURL=index.js.map