From d7f76e34f34352292b696ed3d090e5ec5622d90c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Hu=C3=A1ng=20J=C3=B9nli=C3=A0ng?= Date: Mon, 21 Oct 2019 11:58:19 -0400 Subject: [PATCH] pass babel.File to helpers.ensure --- .../src/tools/build-external-helpers.js | 2 ++ .../src/transformation/file/file.js | 2 +- packages/babel-helpers/package.json | 3 -- packages/babel-helpers/src/index.js | 28 ++++++++++++------- .../scripts/build-dist.js | 1 + 5 files changed, 22 insertions(+), 14 deletions(-) diff --git a/packages/babel-core/src/tools/build-external-helpers.js b/packages/babel-core/src/tools/build-external-helpers.js index c6aa2bf6d21a..6c35dc1bb025 100644 --- a/packages/babel-core/src/tools/build-external-helpers.js +++ b/packages/babel-core/src/tools/build-external-helpers.js @@ -2,6 +2,7 @@ import * as helpers from "@babel/helpers"; import generator from "@babel/generator"; import template from "@babel/template"; import * as t from "@babel/types"; +import File from ".."; // Wrapped to avoid wasting time parsing this when almost no-one uses // build-external-helpers. @@ -136,6 +137,7 @@ function buildHelpers(body, namespace, whitelist) { const ref = (refs[name] = getHelperReference(name)); + helpers.ensure(name, File); const { nodes } = helpers.get(name, getHelperReference, ref); body.push(...nodes); diff --git a/packages/babel-core/src/transformation/file/file.js b/packages/babel-core/src/transformation/file/file.js index 1aa6070c73c2..c341d838877b 100644 --- a/packages/babel-core/src/transformation/file/file.js +++ b/packages/babel-core/src/transformation/file/file.js @@ -204,7 +204,7 @@ export default class File { } // make sure that the helper exists - helpers.ensure(name); + helpers.ensure(name, File); const uid = (this.declarations[name] = this.scope.generateUidIdentifier( name, diff --git a/packages/babel-helpers/package.json b/packages/babel-helpers/package.json index 44a91b51289a..555a469caa6f 100644 --- a/packages/babel-helpers/package.json +++ b/packages/babel-helpers/package.json @@ -17,8 +17,5 @@ }, "devDependencies": { "@babel/helper-plugin-test-runner": "^7.0.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" } } diff --git a/packages/babel-helpers/src/index.js b/packages/babel-helpers/src/index.js index 643458607384..b7aa97dff1ae 100644 --- a/packages/babel-helpers/src/index.js +++ b/packages/babel-helpers/src/index.js @@ -1,4 +1,3 @@ -import { File } from "@babel/core"; import traverse from "@babel/traverse"; import * as t from "@babel/types"; import helpers from "./helpers"; @@ -14,6 +13,7 @@ function makePath(path) { return parts.reverse().join("."); } +let fileClass = undefined; /** * Given a file AST for a given helper, get a bunch of metadata about it so that Babel can quickly render * the helper is whatever context it is needed in. @@ -243,13 +243,16 @@ function loadHelper(name) { } const fn = () => { - const ast = t.file(helper.ast()); - return new File( - { - filename: `babel-helper://${name}`, - }, - { ast }, - ); + const file = { ast: t.file(helper.ast()) }; + if (fileClass) { + return new fileClass( + { + filename: `babel-helper://${name}`, + }, + file, + ); + } + return file; }; const metadata = getHelperMetadata(fn()); @@ -260,7 +263,7 @@ function loadHelper(name) { permuteHelperAST(file, metadata, id, localBindings, getDependency); return { - nodes: file.path.node.body, + nodes: file.ast.program.body, globals: metadata.globals, }; }, @@ -291,7 +294,12 @@ export function getDependencies(name: string): $ReadOnlyArray { return Array.from(loadHelper(name).dependencies.values()); } -export function ensure(name: string) { +export function ensure(name: string, newFileClass?) { + if (!fileClass) { + // optional fileClass used to wrap helper snippets into File instance, + // offering `path.hub` support during traversal + fileClass = newFileClass; + } loadHelper(name); } diff --git a/packages/babel-plugin-transform-runtime/scripts/build-dist.js b/packages/babel-plugin-transform-runtime/scripts/build-dist.js index e36ef0c68b0a..214f76b7fbe1 100644 --- a/packages/babel-plugin-transform-runtime/scripts/build-dist.js +++ b/packages/babel-plugin-transform-runtime/scripts/build-dist.js @@ -133,6 +133,7 @@ function buildHelper( if (!esm) { bindings = []; + helpers.ensure(helperName, babel.File); for (const dep of helpers.getDependencies(helperName)) { const id = (dependencies[dep] = t.identifier(t.toIdentifier(dep))); tree.body.push(template.statement.ast`