Move some build steps to gulp (#12127)
* chore: move generate-standalone to gulp tasks * move build-flow-typings to gulp tasks * chore: move build-typescript-typings to gulp tasks * move generate-type-helpers to gulp tasks * chore: include build-typings and generate-type-helpers in gulp build * update generate-standalone comments * address review comments * chore: revert build-typings refactor * fix: run build-typings in build-no-bundle
This commit is contained in:
parent
1ef9e196d3
commit
e5b2680756
124
Gulpfile.js
124
Gulpfile.js
@ -5,6 +5,7 @@ const through = require("through2");
|
|||||||
const chalk = require("chalk");
|
const chalk = require("chalk");
|
||||||
const newer = require("gulp-newer");
|
const newer = require("gulp-newer");
|
||||||
const babel = require("gulp-babel");
|
const babel = require("gulp-babel");
|
||||||
|
const camelCase = require("lodash/camelCase");
|
||||||
const fancyLog = require("fancy-log");
|
const fancyLog = require("fancy-log");
|
||||||
const filter = require("gulp-filter");
|
const filter = require("gulp-filter");
|
||||||
const gulp = require("gulp");
|
const gulp = require("gulp");
|
||||||
@ -21,6 +22,12 @@ const rollupReplace = require("@rollup/plugin-replace");
|
|||||||
const { terser: rollupTerser } = require("rollup-plugin-terser");
|
const { terser: rollupTerser } = require("rollup-plugin-terser");
|
||||||
|
|
||||||
const defaultSourcesGlob = "./@(codemods|packages|eslint)/*/src/**/*.{js,ts}";
|
const defaultSourcesGlob = "./@(codemods|packages|eslint)/*/src/**/*.{js,ts}";
|
||||||
|
const babelStandalonePluginConfigGlob =
|
||||||
|
"./packages/babel-standalone/scripts/pluginConfig.json";
|
||||||
|
const buildTypingsWatchGlob = [
|
||||||
|
"./packages/babel-types/lib/definitions/**/*.js",
|
||||||
|
"./packages/babel-types/scripts/generators/*.js",
|
||||||
|
];
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* map source code path to the generated artifacts path
|
* map source code path to the generated artifacts path
|
||||||
@ -70,6 +77,68 @@ function rename(fn) {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
* @typedef {("asserts" | "builders" | "constants" | "validators")} HelperKind
|
||||||
|
* @param {HelperKind} helperKind
|
||||||
|
*/
|
||||||
|
function generateTypeHelpers(helperKind) {
|
||||||
|
const dest = `./packages/babel-types/src/${helperKind}/generated/`;
|
||||||
|
const formatCode = require("./scripts/utils/formatCode");
|
||||||
|
return gulp
|
||||||
|
.src(".", { base: __dirname })
|
||||||
|
.pipe(errorsLogger())
|
||||||
|
.pipe(
|
||||||
|
through.obj(function (file, enc, callback) {
|
||||||
|
file.path = "index.js";
|
||||||
|
file.contents = Buffer.from(
|
||||||
|
formatCode(
|
||||||
|
require(`./packages/babel-types/scripts/generators/${helperKind}`)(),
|
||||||
|
dest + file.path
|
||||||
|
)
|
||||||
|
);
|
||||||
|
fancyLog(`${chalk.green("✔")} Generated ${helperKind}`);
|
||||||
|
callback(null, file);
|
||||||
|
})
|
||||||
|
)
|
||||||
|
.pipe(gulp.dest(dest));
|
||||||
|
}
|
||||||
|
|
||||||
|
function generateStandalone() {
|
||||||
|
const dest = "./packages/babel-standalone/src/generated/";
|
||||||
|
const formatCode = require("./scripts/utils/formatCode");
|
||||||
|
return gulp
|
||||||
|
.src(babelStandalonePluginConfigGlob, { base: __dirname })
|
||||||
|
.pipe(
|
||||||
|
through.obj((file, enc, callback) => {
|
||||||
|
fancyLog("Generating @babel/standalone files");
|
||||||
|
const pluginConfig = JSON.parse(file.contents);
|
||||||
|
let imports = "";
|
||||||
|
let list = "";
|
||||||
|
let allList = "";
|
||||||
|
|
||||||
|
for (const plugin of pluginConfig) {
|
||||||
|
const camelPlugin = camelCase(plugin);
|
||||||
|
imports += `import ${camelPlugin} from "@babel/plugin-${plugin}";`;
|
||||||
|
list += `${camelPlugin},`;
|
||||||
|
allList += `"${plugin}": ${camelPlugin},`;
|
||||||
|
}
|
||||||
|
|
||||||
|
const fileContents = `/*
|
||||||
|
* This file is auto-generated! Do not modify it directly.
|
||||||
|
* To re-generate run 'yarn gulp generate-standalone'
|
||||||
|
*/
|
||||||
|
${imports}
|
||||||
|
export {${list}};
|
||||||
|
export const all = {${allList}};`;
|
||||||
|
file.path = "plugins.js";
|
||||||
|
file.contents = Buffer.from(formatCode(fileContents, dest));
|
||||||
|
callback(null, file);
|
||||||
|
})
|
||||||
|
)
|
||||||
|
.pipe(gulp.dest(dest));
|
||||||
|
}
|
||||||
|
|
||||||
function buildBabel(exclude, sourcesGlob = defaultSourcesGlob) {
|
function buildBabel(exclude, sourcesGlob = defaultSourcesGlob) {
|
||||||
const base = __dirname;
|
const base = __dirname;
|
||||||
|
|
||||||
@ -235,19 +304,68 @@ const standaloneBundle = [
|
|||||||
},
|
},
|
||||||
];
|
];
|
||||||
|
|
||||||
|
gulp.task("generate-type-helpers", () => {
|
||||||
|
fancyLog("Generating @babel/types dynamic functions");
|
||||||
|
return Promise.all(
|
||||||
|
["asserts", "builders", "constants", "validators"].map(helperKind =>
|
||||||
|
generateTypeHelpers(helperKind)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
gulp.task("generate-standalone", () => generateStandalone());
|
||||||
|
|
||||||
gulp.task("build-rollup", () => buildRollup(libBundles));
|
gulp.task("build-rollup", () => buildRollup(libBundles));
|
||||||
gulp.task("build-babel-standalone", () => buildRollup(standaloneBundle, true));
|
gulp.task("rollup-babel-standalone", () => buildRollup(standaloneBundle, true));
|
||||||
|
gulp.task(
|
||||||
|
"build-babel-standalone",
|
||||||
|
gulp.series("generate-standalone", "rollup-babel-standalone")
|
||||||
|
);
|
||||||
|
|
||||||
gulp.task("build-babel", () => buildBabel(/* exclude */ libBundles));
|
gulp.task("build-babel", () => buildBabel(/* exclude */ libBundles));
|
||||||
gulp.task("build", gulp.parallel("build-rollup", "build-babel"));
|
|
||||||
|
gulp.task(
|
||||||
|
"build",
|
||||||
|
gulp.series(
|
||||||
|
gulp.parallel("build-rollup", "build-babel"),
|
||||||
|
gulp.parallel(
|
||||||
|
"generate-standalone",
|
||||||
|
gulp.series(
|
||||||
|
"generate-type-helpers",
|
||||||
|
// rebuild @babel/types since type-helpers may be changed
|
||||||
|
"build-babel"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
gulp.task("default", gulp.series("build"));
|
gulp.task("default", gulp.series("build"));
|
||||||
|
|
||||||
gulp.task("build-no-bundle", () => buildBabel());
|
gulp.task("build-no-bundle", () => buildBabel());
|
||||||
|
|
||||||
|
gulp.task(
|
||||||
|
"build-dev",
|
||||||
|
gulp.series(
|
||||||
|
"build-no-bundle",
|
||||||
|
gulp.parallel(
|
||||||
|
"generate-standalone",
|
||||||
|
gulp.series(
|
||||||
|
"generate-type-helpers",
|
||||||
|
// rebuild @babel/types since type-helpers may be changed
|
||||||
|
"build-no-bundle"
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
);
|
||||||
|
|
||||||
gulp.task(
|
gulp.task(
|
||||||
"watch",
|
"watch",
|
||||||
gulp.series("build-no-bundle", function watch() {
|
gulp.series("build-dev", function watch() {
|
||||||
gulp.watch(defaultSourcesGlob, gulp.task("build-no-bundle"));
|
gulp.watch(defaultSourcesGlob, gulp.task("build-no-bundle"));
|
||||||
|
gulp.watch(
|
||||||
|
babelStandalonePluginConfigGlob,
|
||||||
|
gulp.task("generate-standalone")
|
||||||
|
);
|
||||||
|
gulp.watch(buildTypingsWatchGlob, gulp.task("generate-type-helpers"));
|
||||||
})
|
})
|
||||||
);
|
);
|
||||||
|
|||||||
12
Makefile
12
Makefile
@ -26,9 +26,6 @@ ifneq ("$(BABEL_COVERAGE)", "true")
|
|||||||
endif
|
endif
|
||||||
|
|
||||||
build-bundle: clean clean-lib
|
build-bundle: clean clean-lib
|
||||||
$(YARN) gulp build
|
|
||||||
$(MAKE) generate-standalone generate-type-helpers
|
|
||||||
# call build again as the generated files might need to be compiled again.
|
|
||||||
$(YARN) gulp build
|
$(YARN) gulp build
|
||||||
$(MAKE) build-typings
|
$(MAKE) build-typings
|
||||||
$(MAKE) build-dist
|
$(MAKE) build-dist
|
||||||
@ -39,11 +36,8 @@ build-bundle-ci: bootstrap-only
|
|||||||
generate-tsconfig:
|
generate-tsconfig:
|
||||||
$(NODE) scripts/generators/tsconfig.js
|
$(NODE) scripts/generators/tsconfig.js
|
||||||
|
|
||||||
generate-standalone:
|
|
||||||
$(NODE) packages/babel-standalone/scripts/generate.js
|
|
||||||
|
|
||||||
generate-type-helpers:
|
generate-type-helpers:
|
||||||
$(NODE) packages/babel-types/scripts/generateTypeHelpers.js
|
$(YARN) gulp generate-type-helpers
|
||||||
|
|
||||||
build-typings: build-flow-typings build-typescript-typings
|
build-typings: build-flow-typings build-typescript-typings
|
||||||
|
|
||||||
@ -76,11 +70,11 @@ build-plugin-transform-runtime-dist:
|
|||||||
$(NODE) scripts/build-dist.js
|
$(NODE) scripts/build-dist.js
|
||||||
|
|
||||||
build-no-bundle: clean clean-lib
|
build-no-bundle: clean clean-lib
|
||||||
BABEL_ENV=development $(YARN) gulp build-no-bundle
|
BABEL_ENV=development $(YARN) gulp build-dev
|
||||||
# Ensure that build artifacts for types are created during local
|
# Ensure that build artifacts for types are created during local
|
||||||
# development too.
|
# development too.
|
||||||
# Babel-transform-fixture-test-runner requires minified polyfill for performance
|
# Babel-transform-fixture-test-runner requires minified polyfill for performance
|
||||||
$(MAKE) generate-type-helpers build-typings build-polyfill-dist
|
$(MAKE) build-typings build-polyfill-dist
|
||||||
|
|
||||||
watch: build-no-bundle
|
watch: build-no-bundle
|
||||||
BABEL_ENV=development $(YARN) gulp watch
|
BABEL_ENV=development $(YARN) gulp watch
|
||||||
|
|||||||
@ -105,9 +105,7 @@
|
|||||||
"@babel/preset-env": "workspace:*",
|
"@babel/preset-env": "workspace:*",
|
||||||
"@babel/preset-flow": "workspace:*",
|
"@babel/preset-flow": "workspace:*",
|
||||||
"@babel/preset-react": "workspace:*",
|
"@babel/preset-react": "workspace:*",
|
||||||
"@babel/preset-typescript": "workspace:*",
|
"@babel/preset-typescript": "workspace:*"
|
||||||
"chalk": "^4.0.0",
|
|
||||||
"lodash": "^4.17.20"
|
|
||||||
},
|
},
|
||||||
"keywords": [
|
"keywords": [
|
||||||
"babel",
|
"babel",
|
||||||
|
|||||||
@ -1,37 +0,0 @@
|
|||||||
// @flow
|
|
||||||
const pluginConfig = require("./pluginConfig.json");
|
|
||||||
const path = require("path");
|
|
||||||
const chalk = require("chalk");
|
|
||||||
const camelCase = require("lodash/camelCase");
|
|
||||||
const format = require("../../../scripts/utils/formatCode");
|
|
||||||
const writeFile = require("../../../scripts/utils/writeFileAndMkDir");
|
|
||||||
|
|
||||||
const outputFile = path.join(__dirname, "../src/generated/plugins.js");
|
|
||||||
|
|
||||||
console.log("Generating @babel/standalone files");
|
|
||||||
|
|
||||||
let imports = "";
|
|
||||||
let list = "";
|
|
||||||
let allList = "";
|
|
||||||
|
|
||||||
for (const plugin of pluginConfig) {
|
|
||||||
const camelPlugin = camelCase(plugin);
|
|
||||||
imports += `import ${camelPlugin} from "@babel/plugin-${plugin}";`;
|
|
||||||
list += `${camelPlugin},`;
|
|
||||||
allList += `"${plugin}": ${camelPlugin},`;
|
|
||||||
}
|
|
||||||
|
|
||||||
const fileContent = `
|
|
||||||
/*
|
|
||||||
* This file is auto-generated! Do not modify it directly.
|
|
||||||
* To re-generate run 'make build'
|
|
||||||
*/
|
|
||||||
${imports}
|
|
||||||
|
|
||||||
export {${list}};
|
|
||||||
|
|
||||||
export const all = {${allList}};
|
|
||||||
`;
|
|
||||||
|
|
||||||
writeFile(outputFile, format(fileContent, outputFile));
|
|
||||||
console.log(` ${chalk.green("✔")} Generated plugin list`);
|
|
||||||
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* This file is auto-generated! Do not modify it directly.
|
* This file is auto-generated! Do not modify it directly.
|
||||||
* To re-generate run 'make build'
|
* To re-generate run 'yarn gulp generate-standalone'
|
||||||
*/
|
*/
|
||||||
import externalHelpers from "@babel/plugin-external-helpers";
|
import externalHelpers from "@babel/plugin-external-helpers";
|
||||||
import syntaxAsyncGenerators from "@babel/plugin-syntax-async-generators";
|
import syntaxAsyncGenerators from "@babel/plugin-syntax-async-generators";
|
||||||
|
|||||||
@ -29,7 +29,6 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@babel/generator": "workspace:*",
|
"@babel/generator": "workspace:*",
|
||||||
"@babel/parser": "workspace:*",
|
"@babel/parser": "workspace:*"
|
||||||
"chalk": "^4.1.0"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1,29 +0,0 @@
|
|||||||
"use strict";
|
|
||||||
const path = require("path");
|
|
||||||
const chalk = require("chalk");
|
|
||||||
const generateBuilders = require("./generators/generateBuilders");
|
|
||||||
const generateValidators = require("./generators/generateValidators");
|
|
||||||
const generateAsserts = require("./generators/generateAsserts");
|
|
||||||
const generateConstants = require("./generators/generateConstants");
|
|
||||||
const format = require("../../../scripts/utils/formatCode");
|
|
||||||
const writeFile = require("../../../scripts/utils/writeFileAndMkDir");
|
|
||||||
|
|
||||||
const baseDir = path.join(__dirname, "../src");
|
|
||||||
|
|
||||||
console.log("Generating @babel/types dynamic functions");
|
|
||||||
|
|
||||||
const buildersFile = path.join(baseDir, "builders/generated/index.js");
|
|
||||||
writeFile(buildersFile, format(generateBuilders(), buildersFile));
|
|
||||||
console.log(` ${chalk.green("✔")} Generated builders`);
|
|
||||||
|
|
||||||
const validatorsFile = path.join(baseDir, "validators/generated/index.js");
|
|
||||||
writeFile(validatorsFile, format(generateValidators(), validatorsFile));
|
|
||||||
console.log(` ${chalk.green("✔")} Generated validators`);
|
|
||||||
|
|
||||||
const assertsFile = path.join(baseDir, "asserts/generated/index.js");
|
|
||||||
writeFile(assertsFile, format(generateAsserts(), assertsFile));
|
|
||||||
console.log(` ${chalk.green("✔")} Generated asserts`);
|
|
||||||
|
|
||||||
const constantsFile = path.join(baseDir, "constants/generated/index.js");
|
|
||||||
writeFile(constantsFile, format(generateConstants(), constantsFile));
|
|
||||||
console.log(` ${chalk.green("✔")} Generated constants`);
|
|
||||||
0
packages/babel-types/src/asserts/generated/index.js
Normal file → Executable file
0
packages/babel-types/src/asserts/generated/index.js
Normal file → Executable file
0
packages/babel-types/src/builders/generated/index.js
Normal file → Executable file
0
packages/babel-types/src/builders/generated/index.js
Normal file → Executable file
0
packages/babel-types/src/constants/generated/index.js
Normal file → Executable file
0
packages/babel-types/src/constants/generated/index.js
Normal file → Executable file
0
packages/babel-types/src/validators/generated/index.js
Normal file → Executable file
0
packages/babel-types/src/validators/generated/index.js
Normal file → Executable file
@ -1,14 +0,0 @@
|
|||||||
const fs = require("fs");
|
|
||||||
const path = require("path");
|
|
||||||
|
|
||||||
module.exports = function writeFileAndMkDir(file, content) {
|
|
||||||
try {
|
|
||||||
fs.mkdirSync(path.dirname(file));
|
|
||||||
} catch (error) {
|
|
||||||
if (error.code !== "EEXIST") {
|
|
||||||
throw error;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fs.writeFileSync(file, content);
|
|
||||||
};
|
|
||||||
@ -3295,8 +3295,6 @@ __metadata:
|
|||||||
"@babel/preset-flow": "workspace:*"
|
"@babel/preset-flow": "workspace:*"
|
||||||
"@babel/preset-react": "workspace:*"
|
"@babel/preset-react": "workspace:*"
|
||||||
"@babel/preset-typescript": "workspace:*"
|
"@babel/preset-typescript": "workspace:*"
|
||||||
chalk: ^4.0.0
|
|
||||||
lodash: ^4.17.20
|
|
||||||
languageName: unknown
|
languageName: unknown
|
||||||
linkType: soft
|
linkType: soft
|
||||||
|
|
||||||
@ -3383,7 +3381,6 @@ __metadata:
|
|||||||
"@babel/generator": "workspace:*"
|
"@babel/generator": "workspace:*"
|
||||||
"@babel/helper-validator-identifier": "workspace:^7.10.4"
|
"@babel/helper-validator-identifier": "workspace:^7.10.4"
|
||||||
"@babel/parser": "workspace:*"
|
"@babel/parser": "workspace:*"
|
||||||
chalk: ^4.1.0
|
|
||||||
lodash: ^4.17.19
|
lodash: ^4.17.19
|
||||||
to-fast-properties: ^2.0.0
|
to-fast-properties: ^2.0.0
|
||||||
languageName: unknown
|
languageName: unknown
|
||||||
@ -9676,7 +9673,7 @@ fsevents@^1.2.7:
|
|||||||
languageName: node
|
languageName: node
|
||||||
linkType: hard
|
linkType: hard
|
||||||
|
|
||||||
"lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19, lodash@npm:^4.17.20":
|
"lodash@npm:^4.17.14, lodash@npm:^4.17.15, lodash@npm:^4.17.19":
|
||||||
version: 4.17.20
|
version: 4.17.20
|
||||||
resolution: "lodash@npm:4.17.20"
|
resolution: "lodash@npm:4.17.20"
|
||||||
checksum: c62101d2500c383b5f174a7e9e6fe8098149ddd6e9ccfa85f36d4789446195f5c4afd3cfba433026bcaf3da271256566b04a2bf2618e5a39f6e67f8c12030cb6
|
checksum: c62101d2500c383b5f174a7e9e6fe8098149ddd6e9ccfa85f36d4789446195f5c4afd3cfba433026bcaf3da271256566b04a2bf2618e5a39f6e67f8c12030cb6
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user