| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133 | 
							- "use strict";
 
- Object.defineProperty(exports, "__esModule", {
 
-   value: true
 
- });
 
- exports.validateUsage = validateUsage;
 
- var _core = require("@babel/core");
 
- function validateUsage(path, state, tdzEnabled) {
 
-   const dynamicTDZNames = [];
 
-   for (const name of Object.keys(path.getBindingIdentifiers())) {
 
-     const binding = path.scope.getBinding(name);
 
-     if (!binding) continue;
 
-     if (tdzEnabled) {
 
-       if (injectTDZChecks(binding, state)) dynamicTDZNames.push(name);
 
-     }
 
-     if (path.node.kind === "const") {
 
-       disallowConstantViolations(name, binding, state);
 
-     }
 
-   }
 
-   return dynamicTDZNames;
 
- }
 
- function disallowConstantViolations(name, binding, state) {
 
-   for (const violation of binding.constantViolations) {
 
-     const readOnlyError = state.addHelper("readOnlyError");
 
-     const throwNode = _core.types.callExpression(readOnlyError, [_core.types.stringLiteral(name)]);
 
-     if (violation.isAssignmentExpression()) {
 
-       const {
 
-         operator,
 
-         left,
 
-         right
 
-       } = violation.node;
 
-       if (operator === "=") {
 
-         const exprs = [right];
 
-         exprs.push(throwNode);
 
-         violation.replaceWith(_core.types.sequenceExpression(exprs));
 
-       } else if (["&&=", "||=", "??="].includes(operator)) {
 
-         violation.replaceWith(_core.types.logicalExpression(operator.slice(0, -1), left, _core.types.sequenceExpression([right, throwNode])));
 
-       } else {
 
-         violation.replaceWith(_core.types.sequenceExpression([_core.types.binaryExpression(operator.slice(0, -1), left, right), throwNode]));
 
-       }
 
-     } else if (violation.isUpdateExpression()) {
 
-       violation.replaceWith(_core.types.sequenceExpression([_core.types.unaryExpression("+", violation.get("argument").node), throwNode]));
 
-     } else if (violation.isForXStatement()) {
 
-       violation.ensureBlock();
 
-       violation.get("left").replaceWith(_core.types.variableDeclaration("var", [_core.types.variableDeclarator(violation.scope.generateUidIdentifier(name))]));
 
-       violation.node.body.body.unshift(_core.types.expressionStatement(throwNode));
 
-     }
 
-   }
 
- }
 
- function getTDZStatus(refPath, bindingPath) {
 
-   const executionStatus = bindingPath._guessExecutionStatusRelativeTo(refPath);
 
-   if (executionStatus === "before") {
 
-     return "outside";
 
-   } else if (executionStatus === "after") {
 
-     return "inside";
 
-   } else {
 
-     return "maybe";
 
-   }
 
- }
 
- const skipTDZChecks = new WeakSet();
 
- function buildTDZAssert(status, node, state) {
 
-   if (status === "maybe") {
 
-     const clone = _core.types.cloneNode(node);
 
-     skipTDZChecks.add(clone);
 
-     return _core.types.callExpression(state.addHelper("temporalRef"), [clone, _core.types.stringLiteral(node.name)]);
 
-   } else {
 
-     return _core.types.callExpression(state.addHelper("tdz"), [_core.types.stringLiteral(node.name)]);
 
-   }
 
- }
 
- function getTDZReplacement(path, state, id = path.node) {
 
-   var _path$scope$getBindin;
 
-   if (skipTDZChecks.has(id)) return;
 
-   skipTDZChecks.add(id);
 
-   const bindingPath = (_path$scope$getBindin = path.scope.getBinding(id.name)) == null ? void 0 : _path$scope$getBindin.path;
 
-   if (!bindingPath || bindingPath.isFunctionDeclaration()) return;
 
-   const status = getTDZStatus(path, bindingPath);
 
-   if (status === "outside") return;
 
-   if (status === "maybe") {
 
-     bindingPath.parent._tdzThis = true;
 
-   }
 
-   return {
 
-     status,
 
-     node: buildTDZAssert(status, id, state)
 
-   };
 
- }
 
- function injectTDZChecks(binding, state) {
 
-   const allUsages = new Set(binding.referencePaths);
 
-   binding.constantViolations.forEach(allUsages.add, allUsages);
 
-   let dynamicTdz = false;
 
-   for (const path of binding.constantViolations) {
 
-     const {
 
-       node
 
-     } = path;
 
-     if (skipTDZChecks.has(node)) continue;
 
-     skipTDZChecks.add(node);
 
-     if (path.isUpdateExpression()) {
 
-       const arg = path.get("argument");
 
-       const replacement = getTDZReplacement(path, state, arg.node);
 
-       if (!replacement) continue;
 
-       if (replacement.status === "maybe") {
 
-         dynamicTdz = true;
 
-         path.insertBefore(replacement.node);
 
-       } else {
 
-         path.replaceWith(replacement.node);
 
-       }
 
-     } else if (path.isAssignmentExpression()) {
 
-       const nodes = [];
 
-       const ids = path.getBindingIdentifiers();
 
-       for (const name of Object.keys(ids)) {
 
-         const replacement = getTDZReplacement(path, state, ids[name]);
 
-         if (replacement) {
 
-           nodes.push(_core.types.expressionStatement(replacement.node));
 
-           if (replacement.status === "inside") break;
 
-           if (replacement.status === "maybe") dynamicTdz = true;
 
-         }
 
-       }
 
-       if (nodes.length > 0) path.insertBefore(nodes);
 
-     }
 
-   }
 
-   for (const path of binding.referencePaths) {
 
-     if (path.parentPath.isUpdateExpression()) continue;
 
-     if (path.parentPath.isFor({
 
-       left: path.node
 
-     })) continue;
 
-     const replacement = getTDZReplacement(path, state);
 
-     if (!replacement) continue;
 
-     if (replacement.status === "maybe") dynamicTdz = true;
 
-     path.replaceWith(replacement.node);
 
-   }
 
-   return dynamicTdz;
 
- }
 
- //# sourceMappingURL=validation.js.map
 
 
  |