summaryrefslogtreecommitdiffstats
path: root/devtools/client/shared/build/build.js
diff options
context:
space:
mode:
Diffstat (limited to 'devtools/client/shared/build/build.js')
-rw-r--r--devtools/client/shared/build/build.js78
1 files changed, 78 insertions, 0 deletions
diff --git a/devtools/client/shared/build/build.js b/devtools/client/shared/build/build.js
new file mode 100644
index 0000000000..7bb00d5145
--- /dev/null
+++ b/devtools/client/shared/build/build.js
@@ -0,0 +1,78 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at <http://mozilla.org/MPL/2.0/>. */
+/* globals process, __filename, __dirname */
+
+/* Usage: node build.js [LIST_OF_SOURCE_FILES...] OUTPUT_DIR
+ * Compiles all source files and places the results of the compilation in
+ * OUTPUT_DIR.
+ */
+
+"use strict";
+
+const Babel = require("./babel");
+const fs = require("fs");
+const _path = require("path");
+
+const defaultPlugins = ["proposal-class-properties"];
+
+function transform(filePath) {
+ // Use the extra plugins only for the debugger
+ const plugins = filePath.includes("devtools/client/debugger")
+ ? require("./build-debugger")(filePath)
+ : defaultPlugins;
+
+ const doc = fs.readFileSync(filePath, "utf8");
+
+ let out;
+ try {
+ out = Babel.transform(doc, { plugins });
+ } catch (err) {
+ throw new Error(`
+========================
+NODE COMPILATION ERROR!
+
+File: ${filePath}
+Stack:
+
+${err.stack}
+
+========================
+`);
+ }
+
+ return out.code;
+}
+
+// fs.mkdirSync's "recursive" option appears not to work, so I'm writing a
+// simple version of the function myself.
+function mkdirs(filePath) {
+ if (fs.existsSync(filePath)) {
+ return;
+ }
+ mkdirs(_path.dirname(filePath));
+ try {
+ fs.mkdirSync(filePath);
+ } catch (err) {
+ // Ignore any errors resulting from the directory already existing.
+ if (err.code != "EEXIST") {
+ throw err;
+ }
+ }
+}
+
+const deps = [__filename, _path.resolve(__dirname, "babel.js")];
+const outputDir = process.argv[process.argv.length - 1];
+mkdirs(outputDir);
+
+for (let i = 2; i < process.argv.length - 1; i++) {
+ const srcPath = process.argv[i];
+ const code = transform(srcPath);
+ const fullPath = _path.join(outputDir, _path.basename(srcPath));
+ fs.writeFileSync(fullPath, code);
+ deps.push(srcPath);
+}
+
+// Print all dependencies prefixed with 'dep:' in order to help node.py, the script that
+// calls this module, to report back the precise list of all dependencies.
+console.log(deps.map(file => "dep:" + file).join("\n"));