microsoft/vscode-react-native

Public

mirrored from https://github.com/microsoft/vscode-react-nativeAvailable

CodeCommitsIssuesPull requestsActionsInsightsSecurity
test-signed1

Branches

Tags

  • No tags available.
0Branches0Tags
Go to file
Add file
Code

Clone

HTTPS

Download ZIP

gulp_scripts/builder.js

131lines · modeblame

b7b3768bbenjaminbi3 years ago1const gulp = require("gulp");
2const { series } = require("gulp");
3const getFormatter = require("./formatter");
4const getWebpackBundle = require("./webpackBundle");
5const getCleaner = require("./cleaner");
6const ts = require("gulp-typescript");
7const sourcemaps = require("gulp-sourcemaps");
8const nls = require("vscode-nls-dev");
9const filter = require("gulp-filter");
10const minimist = require("minimist");
11const log = require("fancy-log");
12const preprocess = require("gulp-preprocess");
13const es = require("event-stream");
14
15const tsProject = ts.createProject("tsconfig.json");
16const knownOptions = {
17string: "env",
18default: { env: "production" },
19};
20const options = minimist(process.argv.slice(2), knownOptions);
21
22const buildTask = gulp.series(getFormatter.lint, function runBuild(done) {
23build(true, true).once("finish", () => {
24done();
25});
26});
27
28// Generates ./dist/nls.bundle.<language_id>.json from files in ./i18n/** *//<src_path>/<filename>.i18n.json
29// Localized strings are read from these files at runtime.
30const generateSrcLocBundle = () => {
31// Transpile the TS to JS, and let vscode-nls-dev scan the files for calls to localize.
32return tsProject
33.src()
34.pipe(sourcemaps.init())
35.pipe(tsProject())
36.js.pipe(nls.createMetaDataFiles())
37.pipe(nls.createAdditionalLanguageFiles(defaultLanguages, "i18n"))
38.pipe(nls.bundleMetaDataFiles(fullExtensionName, "dist"))
39.pipe(nls.bundleLanguageFiles())
40.pipe(
41filter([
42"**/nls.bundle.*.json",
43"**/nls.metadata.header.json",
44"**/nls.metadata.json",
45"!src/**",
46]),
47)
48.pipe(gulp.dest("dist"));
49};
50
51const defaultLanguages = [
52{ id: "zh-tw", folderName: "cht", transifexId: "zh-hant" },
53{ id: "zh-cn", folderName: "chs", transifexId: "zh-hans" },
54{ id: "ja", folderName: "jpn" },
55{ id: "ko", folderName: "kor" },
56{ id: "de", folderName: "deu" },
57{ id: "fr", folderName: "fra" },
58{ id: "es", folderName: "esn" },
59{ id: "ru", folderName: "rus" },
60{ id: "it", folderName: "ita" },
61
62// These language-pack languages are included for VS but excluded from the vscode package
63{ id: "cs", folderName: "csy" },
64{ id: "tr", folderName: "trk" },
65{ id: "pt-br", folderName: "ptb", transifexId: "pt-BR" },
66{ id: "pl", folderName: "plk" },
67];
68
69/**
70* Whether we're running a nightly build.
71*/
72const isNightly = process.argv.includes("--nightly");
73
74const fullExtensionName = isNightly
75? "msjsdiag.vscode-react-native-preview"
76: "msjsdiag.vscode-react-native";
77
78function build(failOnError, buildNls) {
79const isProd = options.env === "production";
80const preprocessorContext = isProd ? { PROD: true } : { DEBUG: true };
81let gotError = false;
82log(`Building with preprocessor context: ${JSON.stringify(preprocessorContext)}`);
83const tsResult = tsProject
84.src()
85.pipe(preprocess({ context: preprocessorContext })) //To set environment variables in-line
86.pipe(sourcemaps.init())
87.pipe(tsProject());
88
89return tsResult.js
90.pipe(buildNls ? nls.rewriteLocalizeCalls() : es.through())
91.pipe(
92buildNls
93? nls.createAdditionalLanguageFiles(defaultLanguages, "i18n", ".")
94: es.through(),
95)
96.pipe(buildNls ? nls.bundleMetaDataFiles(fullExtensionName, ".") : es.through())
97.pipe(buildNls ? nls.bundleLanguageFiles() : es.through())
98.pipe(sourcemaps.write(".", { includeContent: false, sourceRoot: "." }))
99.pipe(gulp.dest(file => file.cwd))
100.once("error", () => {
101gotError = true;
102})
103.once("finish", () => {
104if (failOnError && gotError) {
105process.exit(1);
106}
107});
108}
109
110// TODO: The file property should point to the generated source (this implementation adds an extra folder to the path)
111// We should also make sure that we always generate urls in all the path properties (We shouldn"t have \\s. This seems to
112// be an issue on Windows platforms)
113function runBuild(done) {
114build(true, true).once("finish", () => {
115done();
116});
117}
118
119function buildDev(done) {
120build(true, false).once("finish", () => {
121done();
122});
123}
124
125const buildProd = series(getCleaner.clean, getWebpackBundle.webpackBundle, generateSrcLocBundle);
126
127module.exports = {
128buildTask,
129buildDev,
130buildProd,
e4001e74benjaminbi3 years ago131};