source: frontend/node_modules/@babel/helper-replace-supers/lib/index.js

Last change on this file was 9af201e, checked in by MBK <marija.karapandzova@…>, 2 weeks ago

Fix frontend appearance

  • Property mode set to 100644
File size: 10.5 KB
RevLine 
[9af201e]1"use strict";
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6exports.default = void 0;
7var _helperMemberExpressionToFunctions = require("@babel/helper-member-expression-to-functions");
8var _helperOptimiseCallExpression = require("@babel/helper-optimise-call-expression");
9var _core = require("@babel/core");
10var _traverse = require("@babel/traverse");
11const {
12 assignmentExpression,
13 callExpression,
14 cloneNode,
15 identifier,
16 memberExpression,
17 sequenceExpression,
18 stringLiteral,
19 thisExpression
20} = _core.types;
21exports.environmentVisitor = _traverse.visitors.environmentVisitor({});
22exports.skipAllButComputedKey = function skipAllButComputedKey(path) {
23 path.skip();
24 if (path.node.computed) {
25 path.context.maybeQueue(path.get("key"));
26 }
27};
28const visitor = _traverse.visitors.environmentVisitor({
29 Super(path, state) {
30 const {
31 node,
32 parentPath
33 } = path;
34 if (!parentPath.isMemberExpression({
35 object: node
36 })) return;
37 state.handle(parentPath);
38 }
39});
40const unshadowSuperBindingVisitor = _traverse.visitors.environmentVisitor({
41 Scopable(path, {
42 refName
43 }) {
44 const binding = path.scope.getOwnBinding(refName);
45 if ((binding == null ? void 0 : binding.identifier.name) === refName) {
46 path.scope.rename(refName);
47 }
48 }
49});
50const specHandlers = {
51 memoise(superMember, count) {
52 const {
53 scope,
54 node
55 } = superMember;
56 const {
57 computed,
58 property
59 } = node;
60 if (!computed) {
61 return;
62 }
63 const memo = scope.maybeGenerateMemoised(property);
64 if (!memo) {
65 return;
66 }
67 this.memoiser.set(property, memo, count);
68 },
69 prop(superMember) {
70 const {
71 computed,
72 property
73 } = superMember.node;
74 if (this.memoiser.has(property)) {
75 return cloneNode(this.memoiser.get(property));
76 }
77 if (computed) {
78 return cloneNode(property);
79 }
80 return stringLiteral(property.name);
81 },
82 _getPrototypeOfExpression() {
83 const objectRef = cloneNode(this.getObjectRef());
84 const targetRef = this.isStatic || this.isPrivateMethod ? objectRef : memberExpression(objectRef, identifier("prototype"));
85 return callExpression(this.file.addHelper("getPrototypeOf"), [targetRef]);
86 },
87 get(superMember) {
88 const objectRef = cloneNode(this.getObjectRef());
89 return callExpression(this.file.addHelper("superPropGet"), [this.isDerivedConstructor ? sequenceExpression([thisExpression(), objectRef]) : objectRef, this.prop(superMember), thisExpression(), ...(this.isStatic || this.isPrivateMethod ? [] : [_core.types.numericLiteral(1)])]);
90 },
91 _call(superMember, args, optional) {
92 const objectRef = cloneNode(this.getObjectRef());
93 let argsNode;
94 if (args.length === 1 && _core.types.isSpreadElement(args[0]) && (_core.types.isIdentifier(args[0].argument) || _core.types.isArrayExpression(args[0].argument))) {
95 argsNode = args[0].argument;
96 } else {
97 argsNode = _core.types.arrayExpression(args);
98 }
99 const call = _core.types.callExpression(this.file.addHelper("superPropGet"), [this.isDerivedConstructor ? sequenceExpression([thisExpression(), objectRef]) : objectRef, this.prop(superMember), thisExpression(), _core.types.numericLiteral(2 | (this.isStatic || this.isPrivateMethod ? 0 : 1))]);
100 if (optional) {
101 return _core.types.optionalCallExpression(call, [argsNode], true);
102 }
103 return callExpression(call, [argsNode]);
104 },
105 set(superMember, value) {
106 const objectRef = cloneNode(this.getObjectRef());
107 return callExpression(this.file.addHelper("superPropSet"), [this.isDerivedConstructor ? sequenceExpression([thisExpression(), objectRef]) : objectRef, this.prop(superMember), value, thisExpression(), _core.types.numericLiteral(superMember.isInStrictMode() ? 1 : 0), ...(this.isStatic || this.isPrivateMethod ? [] : [_core.types.numericLiteral(1)])]);
108 },
109 destructureSet(superMember) {
110 throw superMember.buildCodeFrameError(`Destructuring to a super field is not supported yet.`);
111 },
112 call(superMember, args) {
113 return this._call(superMember, args, false);
114 },
115 optionalCall(superMember, args) {
116 return this._call(superMember, args, true);
117 },
118 delete(superMember) {
119 if (superMember.node.computed) {
120 return sequenceExpression([callExpression(this.file.addHelper("toPropertyKey"), [cloneNode(superMember.node.property)]), _core.template.expression.ast`
121 function () { throw new ReferenceError("'delete super[expr]' is invalid"); }()
122 `]);
123 } else {
124 return _core.template.expression.ast`
125 function () { throw new ReferenceError("'delete super.prop' is invalid"); }()
126 `;
127 }
128 }
129};
130const specHandlers_old = {
131 memoise(superMember, count) {
132 const {
133 scope,
134 node
135 } = superMember;
136 const {
137 computed,
138 property
139 } = node;
140 if (!computed) {
141 return;
142 }
143 const memo = scope.maybeGenerateMemoised(property);
144 if (!memo) {
145 return;
146 }
147 this.memoiser.set(property, memo, count);
148 },
149 prop(superMember) {
150 const {
151 computed,
152 property
153 } = superMember.node;
154 if (this.memoiser.has(property)) {
155 return cloneNode(this.memoiser.get(property));
156 }
157 if (computed) {
158 return cloneNode(property);
159 }
160 return stringLiteral(property.name);
161 },
162 _getPrototypeOfExpression() {
163 const objectRef = cloneNode(this.getObjectRef());
164 const targetRef = this.isStatic || this.isPrivateMethod ? objectRef : memberExpression(objectRef, identifier("prototype"));
165 return callExpression(this.file.addHelper("getPrototypeOf"), [targetRef]);
166 },
167 get(superMember) {
168 return this._get(superMember);
169 },
170 _get(superMember) {
171 const proto = this._getPrototypeOfExpression();
172 return callExpression(this.file.addHelper("get"), [this.isDerivedConstructor ? sequenceExpression([thisExpression(), proto]) : proto, this.prop(superMember), thisExpression()]);
173 },
174 set(superMember, value) {
175 const proto = this._getPrototypeOfExpression();
176 return callExpression(this.file.addHelper("set"), [this.isDerivedConstructor ? sequenceExpression([thisExpression(), proto]) : proto, this.prop(superMember), value, thisExpression(), _core.types.booleanLiteral(superMember.isInStrictMode())]);
177 },
178 destructureSet(superMember) {
179 throw superMember.buildCodeFrameError(`Destructuring to a super field is not supported yet.`);
180 },
181 call(superMember, args) {
182 return (0, _helperOptimiseCallExpression.default)(this._get(superMember), thisExpression(), args, false);
183 },
184 optionalCall(superMember, args) {
185 return (0, _helperOptimiseCallExpression.default)(this._get(superMember), cloneNode(thisExpression()), args, true);
186 },
187 delete(superMember) {
188 if (superMember.node.computed) {
189 return sequenceExpression([callExpression(this.file.addHelper("toPropertyKey"), [cloneNode(superMember.node.property)]), _core.template.expression.ast`
190 function () { throw new ReferenceError("'delete super[expr]' is invalid"); }()
191 `]);
192 } else {
193 return _core.template.expression.ast`
194 function () { throw new ReferenceError("'delete super.prop' is invalid"); }()
195 `;
196 }
197 }
198};
199const looseHandlers = Object.assign({}, specHandlers, {
200 prop(superMember) {
201 const {
202 property
203 } = superMember.node;
204 if (this.memoiser.has(property)) {
205 return cloneNode(this.memoiser.get(property));
206 }
207 return cloneNode(property);
208 },
209 get(superMember) {
210 const {
211 isStatic,
212 getSuperRef
213 } = this;
214 const {
215 computed
216 } = superMember.node;
217 const prop = this.prop(superMember);
218 let object;
219 if (isStatic) {
220 var _getSuperRef;
221 object = (_getSuperRef = getSuperRef()) != null ? _getSuperRef : memberExpression(identifier("Function"), identifier("prototype"));
222 } else {
223 var _getSuperRef2;
224 object = memberExpression((_getSuperRef2 = getSuperRef()) != null ? _getSuperRef2 : identifier("Object"), identifier("prototype"));
225 }
226 return memberExpression(object, prop, computed);
227 },
228 set(superMember, value) {
229 const {
230 computed
231 } = superMember.node;
232 const prop = this.prop(superMember);
233 return assignmentExpression("=", memberExpression(thisExpression(), prop, computed), value);
234 },
235 destructureSet(superMember) {
236 const {
237 computed
238 } = superMember.node;
239 const prop = this.prop(superMember);
240 return memberExpression(thisExpression(), prop, computed);
241 },
242 call(superMember, args) {
243 return (0, _helperOptimiseCallExpression.default)(this.get(superMember), thisExpression(), args, false);
244 },
245 optionalCall(superMember, args) {
246 return (0, _helperOptimiseCallExpression.default)(this.get(superMember), thisExpression(), args, true);
247 }
248});
249class ReplaceSupers {
250 constructor(opts) {
251 var _opts$constantSuper;
252 const path = opts.methodPath;
253 this.methodPath = path;
254 this.isDerivedConstructor = path.isClassMethod({
255 kind: "constructor"
256 }) && !!opts.superRef;
257 this.isStatic = path.isObjectMethod() || path.node.static || (path.isStaticBlock == null ? void 0 : path.isStaticBlock());
258 this.isPrivateMethod = path.isPrivate() && path.isMethod();
259 this.file = opts.file;
260 this.constantSuper = (_opts$constantSuper = opts.constantSuper) != null ? _opts$constantSuper : opts.isLoose;
261 this.opts = opts;
262 }
263 getObjectRef() {
264 return cloneNode(this.opts.objectRef || this.opts.getObjectRef());
265 }
266 getSuperRef() {
267 if (this.opts.superRef) return cloneNode(this.opts.superRef);
268 if (this.opts.getSuperRef) {
269 return cloneNode(this.opts.getSuperRef());
270 }
271 }
272 replace() {
273 const {
274 methodPath
275 } = this;
276 if (this.opts.refToPreserve) {
277 methodPath.traverse(unshadowSuperBindingVisitor, {
278 refName: this.opts.refToPreserve.name
279 });
280 }
281 const handler = this.constantSuper ? looseHandlers : this.file.availableHelper("superPropSet") ? specHandlers : specHandlers_old;
282 visitor.shouldSkip = path => {
283 if (path.parentPath === methodPath) {
284 if (path.parentKey === "decorators" || path.parentKey === "key") {
285 return true;
286 }
287 }
288 };
289 (0, _helperMemberExpressionToFunctions.default)(methodPath, visitor, Object.assign({
290 file: this.file,
291 scope: this.methodPath.scope,
292 isDerivedConstructor: this.isDerivedConstructor,
293 isStatic: this.isStatic,
294 isPrivateMethod: this.isPrivateMethod,
295 getObjectRef: this.getObjectRef.bind(this),
296 getSuperRef: this.getSuperRef.bind(this),
297 boundGet: handler.get
298 }, handler));
299 }
300}
301exports.default = ReplaceSupers;
302
303//# sourceMappingURL=index.js.map
Note: See TracBrowser for help on using the repository browser.