Minor tweak to builtin plugins generation (#18566)
This commit is contained in:
1 parent
ae0e00df55
commit
d696f899ac
5 files changed
+270
-255
No files matched your search
@@ -54,10 +54,10 @@ async function getPluginData(file, pluginFile, getPluginName) {
|
||||
const pluginData = {
|
||||
name: pluginName,
|
||||
url,
|
||||
parserNames: Object.hasOwn(implementation, "parsers")
|
||||
parsers: Object.hasOwn(implementation, "parsers")
|
||||
? Object.keys(implementation.parsers)
|
||||
: undefined,
|
||||
printerNames: Object.hasOwn(implementation, "printers")
|
||||
printers: Object.hasOwn(implementation, "printers")
|
||||
? Object.keys(implementation.printers)
|
||||
: undefined,
|
||||
};
|
||||
@@ -94,40 +94,48 @@ function getImportStatements(plugins, file) {
|
||||
.join("\n");
|
||||
}
|
||||
|
||||
function getPluginExportStatement(plugin, file) {
|
||||
const properties = {
|
||||
name: JSON.stringify(plugin.name),
|
||||
importPlugin: `() => import("${getImportSource(file, plugin.url)}")`,
|
||||
};
|
||||
function getExportStatements(plugins, file) {
|
||||
const codes = sortByUrl(plugins).map((plugin) => {
|
||||
const properties = {
|
||||
name: JSON.stringify(plugin.name),
|
||||
load: `() => import("${getImportSource(file, plugin.url)}")`,
|
||||
};
|
||||
|
||||
for (const property of ["options", "languages"]) {
|
||||
if (!plugin[property]) {
|
||||
continue;
|
||||
for (const property of ["options", "languages"]) {
|
||||
if (!plugin[property]) {
|
||||
continue;
|
||||
}
|
||||
const variableNames = plugin[property].entries.map(
|
||||
({ variableName }) => variableName,
|
||||
);
|
||||
const isArray = property === "languages";
|
||||
properties[property] =
|
||||
variableNames.length === 1
|
||||
? variableNames
|
||||
: `${isArray ? "[" : "{"}${variableNames.map((variableName) => `...${variableName},`).join("")}${isArray ? "]" : "}"}`;
|
||||
}
|
||||
const variableNames = plugin[property].entries.map(
|
||||
({ variableName }) => variableName,
|
||||
);
|
||||
const isArray = property === "languages";
|
||||
properties[property] =
|
||||
variableNames.length === 1
|
||||
? variableNames
|
||||
: `${isArray ? "[" : "{"}${variableNames.map((variableName) => `...${variableName},`).join("")}${isArray ? "]" : "}"}`;
|
||||
}
|
||||
|
||||
if (plugin.parserNames) {
|
||||
properties.parserNames = JSON.stringify(plugin.parserNames);
|
||||
}
|
||||
if (plugin.parsers) {
|
||||
properties.parsers = JSON.stringify(plugin.parsers);
|
||||
}
|
||||
|
||||
if (plugin.printerNames) {
|
||||
properties.printerNames = JSON.stringify(plugin.printerNames);
|
||||
}
|
||||
if (plugin.printers) {
|
||||
properties.printers = JSON.stringify(plugin.printers);
|
||||
}
|
||||
|
||||
return outdent`
|
||||
{
|
||||
${Object.entries(properties)
|
||||
.map(([property, code]) => `${property}: ${code},`)
|
||||
.join("\n")}
|
||||
},
|
||||
`;
|
||||
});
|
||||
|
||||
return outdent`
|
||||
export const ${plugin.name} = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
${Object.entries(properties)
|
||||
.map(([property, code]) => `${property}: ${code},`)
|
||||
.join("\n")}
|
||||
});
|
||||
export const plugins = /* @__PURE__ */ toLazyLoadPlugins(
|
||||
${codes.join("\n")}
|
||||
);
|
||||
`;
|
||||
}
|
||||
|
||||
@@ -143,8 +151,8 @@ async function buildPlugins({ kind, file, pattern, getPluginName }) {
|
||||
const estreePlugin = { ...jsPlugin, name: "estree" };
|
||||
delete estreePlugin.languages;
|
||||
delete estreePlugin.options;
|
||||
delete estreePlugin.parserNames;
|
||||
delete jsPlugin.printerNames;
|
||||
delete estreePlugin.parsers;
|
||||
delete jsPlugin.printers;
|
||||
plugins.push(estreePlugin);
|
||||
}
|
||||
|
||||
@@ -155,15 +163,15 @@ async function buildPlugins({ kind, file, pattern, getPluginName }) {
|
||||
*/
|
||||
|
||||
${getImportStatements(plugins, file)}
|
||||
import {toLazyLoadPlugin} from "./utilities.js";
|
||||
import {toLazyLoadPlugins} from "./utilities.js";
|
||||
|
||||
|
||||
${sortByUrl(plugins)
|
||||
.map((plugin) => getPluginExportStatement(plugin, file))
|
||||
.join("\n")}
|
||||
${getExportStatements(plugins, file)}
|
||||
`;
|
||||
|
||||
const formatted = await format(code, { parser: "meriyah" });
|
||||
const formatted = await format(code, {
|
||||
parser: "meriyah",
|
||||
objectWrap: "collapse",
|
||||
});
|
||||
|
||||
await fs.writeFile(file, formatted);
|
||||
}
|
||||
|
||||
@@ -17,94 +17,96 @@ import markdownLanguages from "../../../language-markdown/languages.evaluate.js"
|
||||
import markdownOptions from "../../../language-markdown/options.js";
|
||||
import yamlLanguages from "../../../language-yaml/languages.evaluate.js";
|
||||
import yamlOptions from "../../../language-yaml/options.js";
|
||||
import { toLazyLoadPlugin } from "./utilities.js";
|
||||
import { toLazyLoadPlugins } from "./utilities.js";
|
||||
|
||||
export const css = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
name: "css",
|
||||
importPlugin: () => import("../../../language-css/index.js"),
|
||||
options: cssOptions,
|
||||
languages: cssLanguages,
|
||||
parserNames: ["css", "less", "scss"],
|
||||
printerNames: ["postcss"],
|
||||
});
|
||||
export const graphql = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
name: "graphql",
|
||||
importPlugin: () => import("../../../language-graphql/index.js"),
|
||||
options: graphqlOptions,
|
||||
languages: graphqlLanguages,
|
||||
parserNames: ["graphql"],
|
||||
printerNames: ["graphql"],
|
||||
});
|
||||
export const handlebars = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
name: "handlebars",
|
||||
importPlugin: () => import("../../../language-handlebars/index.js"),
|
||||
languages: handlebarsLanguages,
|
||||
parserNames: ["glimmer"],
|
||||
printerNames: ["glimmer"],
|
||||
});
|
||||
export const html = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
name: "html",
|
||||
importPlugin: () => import("../../../language-html/index.js"),
|
||||
options: htmlOptions,
|
||||
languages: htmlLanguages,
|
||||
parserNames: ["angular", "html", "lwc", "mjml", "vue"],
|
||||
printerNames: ["html"],
|
||||
});
|
||||
export const js = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
name: "js",
|
||||
importPlugin: () => import("../../../language-js/index.js"),
|
||||
options: jsOptions,
|
||||
languages: jsLanguages,
|
||||
parserNames: [
|
||||
"__babel_estree",
|
||||
"__js_expression",
|
||||
"__ng_action",
|
||||
"__ng_binding",
|
||||
"__ng_directive",
|
||||
"__ng_interpolation",
|
||||
"__ts_expression",
|
||||
"__vue_event_binding",
|
||||
"__vue_expression",
|
||||
"__vue_ts_event_binding",
|
||||
"__vue_ts_expression",
|
||||
"acorn",
|
||||
"babel",
|
||||
"babel-flow",
|
||||
"babel-ts",
|
||||
"espree",
|
||||
"flow",
|
||||
"hermes",
|
||||
"meriyah",
|
||||
"oxc",
|
||||
"oxc-ts",
|
||||
"typescript",
|
||||
],
|
||||
});
|
||||
export const estree = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
name: "estree",
|
||||
importPlugin: () => import("../../../language-js/index.js"),
|
||||
printerNames: ["estree"],
|
||||
});
|
||||
export const json = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
name: "json",
|
||||
importPlugin: () => import("../../../language-json/index.js"),
|
||||
languages: jsonLanguages,
|
||||
parserNames: ["json", "json-stringify", "json5", "jsonc"],
|
||||
printerNames: ["estree", "estree-json"],
|
||||
});
|
||||
export const markdown = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
name: "markdown",
|
||||
importPlugin: () => import("../../../language-markdown/index.js"),
|
||||
options: markdownOptions,
|
||||
languages: markdownLanguages,
|
||||
parserNames: ["markdown", "mdx", "remark"],
|
||||
printerNames: ["mdast"],
|
||||
});
|
||||
export const yaml = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
name: "yaml",
|
||||
importPlugin: () => import("../../../language-yaml/index.js"),
|
||||
options: yamlOptions,
|
||||
languages: yamlLanguages,
|
||||
parserNames: ["yaml"],
|
||||
printerNames: ["yaml"],
|
||||
});
|
||||
export const plugins = /* @__PURE__ */ toLazyLoadPlugins(
|
||||
{
|
||||
name: "css",
|
||||
load: () => import("../../../language-css/index.js"),
|
||||
options: cssOptions,
|
||||
languages: cssLanguages,
|
||||
parsers: ["css", "less", "scss"],
|
||||
printers: ["postcss"],
|
||||
},
|
||||
{
|
||||
name: "graphql",
|
||||
load: () => import("../../../language-graphql/index.js"),
|
||||
options: graphqlOptions,
|
||||
languages: graphqlLanguages,
|
||||
parsers: ["graphql"],
|
||||
printers: ["graphql"],
|
||||
},
|
||||
{
|
||||
name: "handlebars",
|
||||
load: () => import("../../../language-handlebars/index.js"),
|
||||
languages: handlebarsLanguages,
|
||||
parsers: ["glimmer"],
|
||||
printers: ["glimmer"],
|
||||
},
|
||||
{
|
||||
name: "html",
|
||||
load: () => import("../../../language-html/index.js"),
|
||||
options: htmlOptions,
|
||||
languages: htmlLanguages,
|
||||
parsers: ["angular", "html", "lwc", "mjml", "vue"],
|
||||
printers: ["html"],
|
||||
},
|
||||
{
|
||||
name: "js",
|
||||
load: () => import("../../../language-js/index.js"),
|
||||
options: jsOptions,
|
||||
languages: jsLanguages,
|
||||
parsers: [
|
||||
"__babel_estree",
|
||||
"__js_expression",
|
||||
"__ng_action",
|
||||
"__ng_binding",
|
||||
"__ng_directive",
|
||||
"__ng_interpolation",
|
||||
"__ts_expression",
|
||||
"__vue_event_binding",
|
||||
"__vue_expression",
|
||||
"__vue_ts_event_binding",
|
||||
"__vue_ts_expression",
|
||||
"acorn",
|
||||
"babel",
|
||||
"babel-flow",
|
||||
"babel-ts",
|
||||
"espree",
|
||||
"flow",
|
||||
"hermes",
|
||||
"meriyah",
|
||||
"oxc",
|
||||
"oxc-ts",
|
||||
"typescript",
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "estree",
|
||||
load: () => import("../../../language-js/index.js"),
|
||||
printers: ["estree"],
|
||||
},
|
||||
{
|
||||
name: "json",
|
||||
load: () => import("../../../language-json/index.js"),
|
||||
languages: jsonLanguages,
|
||||
parsers: ["json", "json-stringify", "json5", "jsonc"],
|
||||
printers: ["estree", "estree-json"],
|
||||
},
|
||||
{
|
||||
name: "markdown",
|
||||
load: () => import("../../../language-markdown/index.js"),
|
||||
options: markdownOptions,
|
||||
languages: markdownLanguages,
|
||||
parsers: ["markdown", "mdx", "remark"],
|
||||
printers: ["mdast"],
|
||||
},
|
||||
{
|
||||
name: "yaml",
|
||||
load: () => import("../../../language-yaml/index.js"),
|
||||
options: yamlOptions,
|
||||
languages: yamlLanguages,
|
||||
parsers: ["yaml"],
|
||||
printers: ["yaml"],
|
||||
},
|
||||
);
|
||||
@@ -17,109 +17,111 @@ import markdownLanguages from "../../../language-markdown/languages.evaluate.js"
|
||||
import markdownOptions from "../../../language-markdown/options.js";
|
||||
import yamlLanguages from "../../../language-yaml/languages.evaluate.js";
|
||||
import yamlOptions from "../../../language-yaml/options.js";
|
||||
import { toLazyLoadPlugin } from "./utilities.js";
|
||||
import { toLazyLoadPlugins } from "./utilities.js";
|
||||
|
||||
export const acorn = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
name: "acorn",
|
||||
importPlugin: () => import("../../../plugins/acorn.js"),
|
||||
parserNames: ["acorn", "espree"],
|
||||
});
|
||||
export const angular = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
name: "angular",
|
||||
importPlugin: () => import("../../../plugins/angular.js"),
|
||||
parserNames: [
|
||||
"__ng_action",
|
||||
"__ng_binding",
|
||||
"__ng_directive",
|
||||
"__ng_interpolation",
|
||||
],
|
||||
});
|
||||
export const babel = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
name: "babel",
|
||||
importPlugin: () => import("../../../plugins/babel.js"),
|
||||
parserNames: [
|
||||
"__babel_estree",
|
||||
"__js_expression",
|
||||
"__ts_expression",
|
||||
"__vue_event_binding",
|
||||
"__vue_expression",
|
||||
"__vue_ts_event_binding",
|
||||
"__vue_ts_expression",
|
||||
"babel",
|
||||
"babel-flow",
|
||||
"babel-ts",
|
||||
"json",
|
||||
"json-stringify",
|
||||
"json5",
|
||||
"jsonc",
|
||||
],
|
||||
});
|
||||
export const estree = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
name: "estree",
|
||||
importPlugin: () => import("../../../plugins/estree.js"),
|
||||
options: jsOptions,
|
||||
languages: [...jsonLanguages, ...jsLanguages],
|
||||
printerNames: ["estree", "estree-json"],
|
||||
});
|
||||
export const flow = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
name: "flow",
|
||||
importPlugin: () => import("../../../plugins/flow.js"),
|
||||
parserNames: ["flow"],
|
||||
});
|
||||
export const glimmer = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
name: "glimmer",
|
||||
importPlugin: () => import("../../../plugins/glimmer.js"),
|
||||
languages: handlebarsLanguages,
|
||||
parserNames: ["glimmer"],
|
||||
printerNames: ["glimmer"],
|
||||
});
|
||||
export const graphql = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
name: "graphql",
|
||||
importPlugin: () => import("../../../plugins/graphql.js"),
|
||||
options: graphqlOptions,
|
||||
languages: graphqlLanguages,
|
||||
parserNames: ["graphql"],
|
||||
printerNames: ["graphql"],
|
||||
});
|
||||
export const html = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
name: "html",
|
||||
importPlugin: () => import("../../../plugins/html.js"),
|
||||
options: htmlOptions,
|
||||
languages: htmlLanguages,
|
||||
parserNames: ["angular", "html", "lwc", "mjml", "vue"],
|
||||
printerNames: ["html"],
|
||||
});
|
||||
export const markdown = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
name: "markdown",
|
||||
importPlugin: () => import("../../../plugins/markdown.js"),
|
||||
options: markdownOptions,
|
||||
languages: markdownLanguages,
|
||||
parserNames: ["markdown", "mdx", "remark"],
|
||||
printerNames: ["mdast"],
|
||||
});
|
||||
export const meriyah = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
name: "meriyah",
|
||||
importPlugin: () => import("../../../plugins/meriyah.js"),
|
||||
parserNames: ["meriyah"],
|
||||
});
|
||||
export const postcss = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
name: "postcss",
|
||||
importPlugin: () => import("../../../plugins/postcss.js"),
|
||||
options: cssOptions,
|
||||
languages: cssLanguages,
|
||||
parserNames: ["css", "less", "scss"],
|
||||
printerNames: ["postcss"],
|
||||
});
|
||||
export const typescript = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
name: "typescript",
|
||||
importPlugin: () => import("../../../plugins/typescript.js"),
|
||||
parserNames: ["typescript"],
|
||||
});
|
||||
export const yaml = /* @__PURE__ */ toLazyLoadPlugin({
|
||||
name: "yaml",
|
||||
importPlugin: () => import("../../../plugins/yaml.js"),
|
||||
options: yamlOptions,
|
||||
languages: yamlLanguages,
|
||||
parserNames: ["yaml"],
|
||||
printerNames: ["yaml"],
|
||||
});
|
||||
export const plugins = /* @__PURE__ */ toLazyLoadPlugins(
|
||||
{
|
||||
name: "acorn",
|
||||
load: () => import("../../../plugins/acorn.js"),
|
||||
parsers: ["acorn", "espree"],
|
||||
},
|
||||
{
|
||||
name: "angular",
|
||||
load: () => import("../../../plugins/angular.js"),
|
||||
parsers: [
|
||||
"__ng_action",
|
||||
"__ng_binding",
|
||||
"__ng_directive",
|
||||
"__ng_interpolation",
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "babel",
|
||||
load: () => import("../../../plugins/babel.js"),
|
||||
parsers: [
|
||||
"__babel_estree",
|
||||
"__js_expression",
|
||||
"__ts_expression",
|
||||
"__vue_event_binding",
|
||||
"__vue_expression",
|
||||
"__vue_ts_event_binding",
|
||||
"__vue_ts_expression",
|
||||
"babel",
|
||||
"babel-flow",
|
||||
"babel-ts",
|
||||
"json",
|
||||
"json-stringify",
|
||||
"json5",
|
||||
"jsonc",
|
||||
],
|
||||
},
|
||||
{
|
||||
name: "estree",
|
||||
load: () => import("../../../plugins/estree.js"),
|
||||
options: jsOptions,
|
||||
languages: [...jsonLanguages, ...jsLanguages],
|
||||
printers: ["estree", "estree-json"],
|
||||
},
|
||||
{
|
||||
name: "flow",
|
||||
load: () => import("../../../plugins/flow.js"),
|
||||
parsers: ["flow"],
|
||||
},
|
||||
{
|
||||
name: "glimmer",
|
||||
load: () => import("../../../plugins/glimmer.js"),
|
||||
languages: handlebarsLanguages,
|
||||
parsers: ["glimmer"],
|
||||
printers: ["glimmer"],
|
||||
},
|
||||
{
|
||||
name: "graphql",
|
||||
load: () => import("../../../plugins/graphql.js"),
|
||||
options: graphqlOptions,
|
||||
languages: graphqlLanguages,
|
||||
parsers: ["graphql"],
|
||||
printers: ["graphql"],
|
||||
},
|
||||
{
|
||||
name: "html",
|
||||
load: () => import("../../../plugins/html.js"),
|
||||
options: htmlOptions,
|
||||
languages: htmlLanguages,
|
||||
parsers: ["angular", "html", "lwc", "mjml", "vue"],
|
||||
printers: ["html"],
|
||||
},
|
||||
{
|
||||
name: "markdown",
|
||||
load: () => import("../../../plugins/markdown.js"),
|
||||
options: markdownOptions,
|
||||
languages: markdownLanguages,
|
||||
parsers: ["markdown", "mdx", "remark"],
|
||||
printers: ["mdast"],
|
||||
},
|
||||
{
|
||||
name: "meriyah",
|
||||
load: () => import("../../../plugins/meriyah.js"),
|
||||
parsers: ["meriyah"],
|
||||
},
|
||||
{
|
||||
name: "postcss",
|
||||
load: () => import("../../../plugins/postcss.js"),
|
||||
options: cssOptions,
|
||||
languages: cssLanguages,
|
||||
parsers: ["css", "less", "scss"],
|
||||
printers: ["postcss"],
|
||||
},
|
||||
{
|
||||
name: "typescript",
|
||||
load: () => import("../../../plugins/typescript.js"),
|
||||
parsers: ["typescript"],
|
||||
},
|
||||
{
|
||||
name: "yaml",
|
||||
load: () => import("../../../plugins/yaml.js"),
|
||||
options: yamlOptions,
|
||||
languages: yamlLanguages,
|
||||
parsers: ["yaml"],
|
||||
printers: ["yaml"],
|
||||
},
|
||||
);
|
||||
@@ -1,22 +1,24 @@
|
||||
/**
|
||||
@param {{
|
||||
@typedef {{
|
||||
name: string,
|
||||
importPlugin: () => Promise<any>,
|
||||
load: () => Promise<any>,
|
||||
options?: any,
|
||||
languages?: any[],
|
||||
parserNames?: string[],
|
||||
printerNames?: string[],
|
||||
}} param0
|
||||
@returns
|
||||
parsers?: string[],
|
||||
printers?: string[],
|
||||
}} PluginInformation
|
||||
*/
|
||||
|
||||
/**
|
||||
@param {PluginInformation} param0
|
||||
*/
|
||||
function toLazyLoadPlugin({
|
||||
name,
|
||||
importPlugin,
|
||||
load,
|
||||
options,
|
||||
languages,
|
||||
parserNames,
|
||||
printerNames,
|
||||
parsers: parserNames,
|
||||
printers: printerNames,
|
||||
}) {
|
||||
const plugin = { name };
|
||||
if (options) {
|
||||
@@ -37,12 +39,12 @@ function toLazyLoadPlugin({
|
||||
name,
|
||||
process.env.NODE_ENV === "production"
|
||||
? async () => {
|
||||
const loaded = await importPlugin();
|
||||
const loaded = await load();
|
||||
Object.assign(plugin, loaded);
|
||||
return loaded[property][name];
|
||||
}
|
||||
: async () => {
|
||||
const loaded = await importPlugin();
|
||||
const loaded = await load();
|
||||
// Hide `estree` printer in js plugin
|
||||
plugin[property] = loaded[property];
|
||||
return loaded[property][name];
|
||||
@@ -55,4 +57,11 @@ function toLazyLoadPlugin({
|
||||
return plugin;
|
||||
}
|
||||
|
||||
export { toLazyLoadPlugin };
|
||||
/**
|
||||
@param {...PluginInformation} plugins
|
||||
*/
|
||||
function toLazyLoadPlugins(...plugins) {
|
||||
return plugins.map((plugin) => toLazyLoadPlugin(plugin));
|
||||
}
|
||||
|
||||
export { toLazyLoadPlugins };
|
||||
@@ -1,15 +1,9 @@
|
||||
const loadBuiltinPluginsWithoutCache =
|
||||
process.env.NODE_ENV === "production"
|
||||
? async function () {
|
||||
return Object.values(
|
||||
await import("./builtin-plugins/production-plugins.js"),
|
||||
);
|
||||
}
|
||||
: async function () {
|
||||
return Object.values(
|
||||
await import("./builtin-plugins/development-plugins.js"),
|
||||
);
|
||||
};
|
||||
? async () =>
|
||||
(await import("./builtin-plugins/production-plugins.js")).plugins
|
||||
: async () =>
|
||||
(await import("./builtin-plugins/development-plugins.js")).plugins;
|
||||
|
||||
let cache;
|
||||
function loadBuiltinPlugins() {
|
||||
|
||||
Reference in new issue
Block a user