Security update for Core, with self-updated composer
[yaffs-website] / web / core / scripts / js / babel-es6-build.js
index e073f6a4311887358b62b287fb506ba09ad500a9..0bbdfebd546dd66a64b2facd04725ab611647ab5 100644 (file)
@@ -1,7 +1,14 @@
 /**
  * @file
  *
- * Compile *.es6.js files to ES5.
+ * Provides the build:js command to compile *.es6.js files to ES5.
+ *
+ * Run build:js with --file to only parse a specific file. Using the --check
+ * flag build:js can be run to check if files are compiled correctly.
+ * @example <caption>Only process misc/drupal.es6.js and misc/drupal.init.es6.js</caption
+ * yarn run build:js -- --file misc/drupal.es6.js --file misc/drupal.init.es6.js
+ * @example <caption>Check if all files have been compiled correctly</caption
+ * yarn run build:js -- --check
  *
  * @internal This file is part of the core javascript build process and is only
  * meant to be used in that context.
 
 'use strict';
 
-const fs = require('fs');
-const path = require('path');
-const babel = require('babel-core');
 const glob = require('glob');
+const argv = require('minimist')(process.argv.slice(2));
+const changeOrAdded = require('./changeOrAdded');
+const check = require('./check');
+const log = require('./log');
 
-// Logging human-readable timestamp.
-const log = function (message) {
-  // eslint-disable-next-line no-console
-  console.log(`[${new Date().toTimeString().slice(0, 8)}] ${message}`);
-};
-
-function addSourceMappingUrl(code, loc) {
-  return code + '\n\n//# sourceMappingURL=' + path.basename(loc);
-}
-
-const changedOrAdded = (filePath) => {
-  babel.transformFile(filePath, {
-    sourceMaps: true,
-    comments: false
-  }, function (err, result) {
-    const fileName = filePath.slice(0, -7);
-    // we've requested for a sourcemap to be written to disk
-    let mapLoc = `${fileName}.js.map`;
-
-    fs.writeFile(mapLoc, JSON.stringify(result.map));
-    fs.writeFile(`${fileName}.js`, addSourceMappingUrl(result.code, mapLoc));
-
-    log(`'${filePath}' is being processed.`);
-  });
-};
-
+// Match only on .es6.js files.
 const fileMatch = './**/*.es6.js';
+// Ignore everything in node_modules
 const globOptions = {
-  ignore: 'node_modules/**'
+  ignore: './node_modules/**'
 };
 const processFiles = (error, filePaths) => {
   if (error) {
     process.exitCode = 1;
   }
-  filePaths.forEach(changedOrAdded);
+  // Process all the found files.
+  let callback = changeOrAdded;
+  if (argv.check) {
+    callback = check;
+  }
+  filePaths.forEach(callback);
 };
-glob(fileMatch, globOptions, processFiles);
+
+if (argv.file) {
+  processFiles(null, [].concat(argv.file));
+}
+else {
+  glob(fileMatch, globOptions, processFiles);
+}
 process.exitCode = 0;