Remove plugins from standalone build (#14570)

This commit is contained in:
fisker Cheung authored and GitHub committed 2023-03-23 15:18:10 +08:00
1 parent 68c7f2f6dc
commit 413a76d798
9 files changed
+70 -24

No files matched your search

+5 -3
View File
@@ -71,9 +71,11 @@ async function buildPlaygroundFiles() {
continue;
}
const plugin = require(dist);
for (const parser of Object.keys(plugin.parsers)) {
parsersLocation[parser] = fileName;
const pluginModule = require(dist);
const plugin = pluginModule.default ?? pluginModule;
const parserNames = Object.keys(plugin.parsers ?? {});
for (const parserName of parserNames) {
parsersLocation[parserName] = fileName;
}
}
+6 -1
View File
@@ -44,7 +44,12 @@ async function buildPackageJson({ file, files }) {
"./esm/standalone.mjs": "./standalone.mjs",
...Object.fromEntries(
files
.filter((file) => file.isPlugin && file.output.format === "umd")
.filter(
(file) =>
file.isPlugin &&
file.output.format === "umd" &&
file.output.file !== "plugins/estree.js"
)
.flatMap((file) => {
let basename = path.basename(file.output.file, ".js");
if (basename === "acorn-and-espree") {
+21 -13
View File
@@ -1,8 +1,9 @@
import fs from "node:fs";
import path from "node:path";
import url from "node:url";
import { isValidIdentifier } from "@babel/types";
import { outdent } from "outdent";
import { PROJECT_ROOT, DIST_DIR, writeFile } from "../utils/index.mjs";
import { format } from "../../index.js";
async function typesFileBuilder({ file }) {
/**
@@ -25,29 +26,36 @@ async function typesFileBuilder({ file }) {
await writeFile(path.join(DIST_DIR, file.output.file), text);
}
function toPropertyKey(name) {
return isValidIdentifier(name) ? name : JSON.stringify(name);
}
async function buildPluginTypes({ file: { input, output } }) {
const plugin = await import(
const pluginModule = await import(
url.pathToFileURL(path.join(PROJECT_ROOT, input))
);
const plugin = pluginModule.default ?? pluginModule;
const parserNames = Object.keys(plugin.parsers ?? {});
await writeFile(
path.join(DIST_DIR, output.file),
await format(
/* indent */ `
// We only add `parsers` to types file, printers should not be used alone
// For `estree` plugin, we just write an empty file
const code =
parserNames.length === 0
? ""
: outdent`
import { Parser } from "../index.js";
export declare const parsers: {
${Object.keys(plugin.parsers)
${parserNames
.map(
(parserName) =>
`${" ".repeat(4)}${JSON.stringify(parserName)}: Parser;`
`${" ".repeat(2)}${toPropertyKey(parserName)}: Parser;`
)
.join("\n")}
};
`,
{ parser: "typescript" }
)
);
};\n
`;
await writeFile(path.join(DIST_DIR, output.file), code);
}
function buildTypes(options) {
+2 -1
View File
@@ -86,6 +86,7 @@ const extensions = {
};
const pluginFiles = [
"src/plugins/estree.js",
{
input: "src/language-js/parse/babel.js",
replaceModule: [
@@ -355,7 +356,7 @@ const pluginFiles = [
let { input, umdPropertyName, outputBaseName, ...buildOptions } = file;
outputBaseName ??= (
input.match(/\/(?:parser-|parse\/)(?<outputBaseName>.*?)\.js$/) ??
input.match(/\/(?:parser-|parse\/|plugins\/)(?<outputBaseName>.*?)\.js$/) ??
input.match(/\/language-(?<outputBaseName>.*?)\/index\.js$/)
).groups.outputBaseName;