| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155 | "use strict";Object.defineProperty(exports, "__esModule", {  value: true});exports.default = void 0;var _helperPluginUtils = require("@babel/helper-plugin-utils");var _pluginTransformDestructuring = require("@babel/plugin-transform-destructuring");var _core = require("@babel/core");function isAnonymousFunctionDefinition(node) {  return _core.types.isArrowFunctionExpression(node) || (_core.types.isFunctionExpression(node) || _core.types.isClassExpression(node)) && !node.id;}function emitSetFunctionNameCall(state, expression, name) {  return _core.types.callExpression(state.addHelper("setFunctionName"), [expression, _core.types.stringLiteral(name)]);}var _default = exports.default = (0, _helperPluginUtils.declare)(api => {  api.assertVersion("^7.23.9 || >8.0.0-alpha <8.0.0-beta");  const TOP_LEVEL_USING = new Map();  function isUsingDeclaration(node) {    if (!_core.types.isVariableDeclaration(node)) return false;    return node.kind === "using" || node.kind === "await using" || TOP_LEVEL_USING.has(node);  }  const transformUsingDeclarationsVisitor = {    ForOfStatement(path) {      const {        left      } = path.node;      if (!isUsingDeclaration(left)) return;      const {        id      } = left.declarations[0];      const tmpId = path.scope.generateUidIdentifierBasedOnNode(id);      left.declarations[0].id = tmpId;      left.kind = "const";      path.ensureBlock();      (0, _pluginTransformDestructuring.unshiftForXStatementBody)(path, [_core.types.variableDeclaration("using", [_core.types.variableDeclarator(id, _core.types.cloneNode(tmpId))])]);    },    "BlockStatement|StaticBlock"(path, state) {      let ctx = null;      let needsAwait = false;      const scope = path.scope;      for (const node of path.node.body) {        if (!isUsingDeclaration(node)) continue;        ctx != null ? ctx : ctx = scope.generateUidIdentifier("usingCtx");        const isAwaitUsing = node.kind === "await using" || TOP_LEVEL_USING.get(node) === 1;        needsAwait || (needsAwait = isAwaitUsing);        if (!TOP_LEVEL_USING.delete(node)) {          node.kind = "const";        }        for (const decl of node.declarations) {          const currentInit = decl.init;          decl.init = _core.types.callExpression(_core.types.memberExpression(_core.types.cloneNode(ctx), isAwaitUsing ? _core.types.identifier("a") : _core.types.identifier("u")), [isAnonymousFunctionDefinition(currentInit) && _core.types.isIdentifier(decl.id) ? emitSetFunctionNameCall(state, currentInit, decl.id.name) : currentInit]);        }      }      if (!ctx) return;      const disposeCall = _core.types.callExpression(_core.types.memberExpression(_core.types.cloneNode(ctx), _core.types.identifier("d")), []);      const replacement = _core.template.statement.ast`        try {          var ${_core.types.cloneNode(ctx)} = ${state.addHelper("usingCtx")}();          ${path.node.body}        } catch (_) {          ${_core.types.cloneNode(ctx)}.e = _;        } finally {          ${needsAwait ? _core.types.awaitExpression(disposeCall) : disposeCall}        }      `;      _core.types.inherits(replacement, path.node);      const {        parentPath      } = path;      if (parentPath.isFunction() || parentPath.isTryStatement() || parentPath.isCatchClause()) {        path.replaceWith(_core.types.blockStatement([replacement]));      } else if (path.isStaticBlock()) {        path.node.body = [replacement];      } else {        path.replaceWith(replacement);      }    }  };  const transformUsingDeclarationsVisitorSkipFn = _core.traverse.visitors.merge([transformUsingDeclarationsVisitor, {    Function(path) {      path.skip();    }  }]);  return {    name: "transform-explicit-resource-management",    manipulateOptions: (_, p) => p.plugins.push("explicitResourceManagement"),    visitor: _core.traverse.visitors.merge([transformUsingDeclarationsVisitor, {      Program(path) {        TOP_LEVEL_USING.clear();        if (path.node.sourceType !== "module") return;        if (!path.node.body.some(isUsingDeclaration)) return;        const innerBlockBody = [];        for (const stmt of path.get("body")) {          if (stmt.isFunctionDeclaration() || stmt.isImportDeclaration()) {            continue;          }          let node = stmt.node;          let shouldRemove = true;          if (stmt.isExportDefaultDeclaration()) {            let {              declaration            } = stmt.node;            let varId;            if (_core.types.isClassDeclaration(declaration)) {              varId = declaration.id;              declaration.id = _core.types.cloneNode(varId);              declaration = _core.types.toExpression(declaration);            } else if (!_core.types.isExpression(declaration)) {              continue;            }            varId != null ? varId : varId = path.scope.generateUidIdentifier("_default");            innerBlockBody.push(_core.types.variableDeclaration("var", [_core.types.variableDeclarator(varId, declaration)]));            stmt.replaceWith(_core.types.exportNamedDeclaration(null, [_core.types.exportSpecifier(_core.types.cloneNode(varId), _core.types.identifier("default"))]));            continue;          }          if (stmt.isExportNamedDeclaration()) {            node = stmt.node.declaration;            if (!node || _core.types.isFunction(node)) continue;            stmt.replaceWith(_core.types.exportNamedDeclaration(null, Object.keys(_core.types.getOuterBindingIdentifiers(node, false)).map(id => _core.types.exportSpecifier(_core.types.identifier(id), _core.types.identifier(id)))));            shouldRemove = false;          } else if (stmt.isExportDeclaration()) {            continue;          }          if (_core.types.isClassDeclaration(node)) {            const {              id            } = node;            node.id = _core.types.cloneNode(id);            innerBlockBody.push(_core.types.variableDeclaration("var", [_core.types.variableDeclarator(id, _core.types.toExpression(node))]));          } else if (_core.types.isVariableDeclaration(node)) {            if (node.kind === "using") {              TOP_LEVEL_USING.set(stmt.node, 0);            } else if (node.kind === "await using") {              TOP_LEVEL_USING.set(stmt.node, 1);            }            node.kind = "var";            innerBlockBody.push(node);          } else {            innerBlockBody.push(stmt.node);          }          if (shouldRemove) stmt.remove();        }        path.pushContainer("body", _core.types.blockStatement(innerBlockBody));      },      Function(path, state) {        if (path.node.async) {          path.traverse(transformUsingDeclarationsVisitorSkipFn, state);        }      }    }])  };});//# sourceMappingURL=index.js.map
 |