pulsar/script/lib/transpile-packages-with-custom-transpiler-paths.js
2019-05-31 18:33:56 +02:00

89 lines
2.7 KiB
JavaScript

'use strict';
const CompileCache = require('../../src/compile-cache');
const fs = require('fs-extra');
const glob = require('glob');
const path = require('path');
const CONFIG = require('../config');
const backupNodeModules = require('./backup-node-modules');
const runApmInstall = require('./run-apm-install');
require('colors');
module.exports = function() {
console.log(
`Transpiling packages with custom transpiler configurations in ${
CONFIG.intermediateAppPath
}`
);
for (let packageName of Object.keys(CONFIG.appMetadata.packageDependencies)) {
const rootPackagePath = path.join(
CONFIG.repositoryRootPath,
'node_modules',
packageName
);
const intermediatePackagePath = path.join(
CONFIG.intermediateAppPath,
'node_modules',
packageName
);
const metadataPath = path.join(intermediatePackagePath, 'package.json');
const metadata = require(metadataPath);
if (metadata.atomTranspilers) {
console.log(' transpiling for package '.cyan + packageName.cyan);
const rootPackageBackup = backupNodeModules(rootPackagePath);
const intermediatePackageBackup = backupNodeModules(
intermediatePackagePath
);
// Run `apm install` in the *root* package's path, so we get devDeps w/o apm's weird caching
// Then copy this folder into the intermediate package's path so we can run the transpilation in-line.
runApmInstall(rootPackagePath);
if (fs.existsSync(intermediatePackageBackup.nodeModulesPath)) {
fs.removeSync(intermediatePackageBackup.nodeModulesPath);
}
fs.copySync(
rootPackageBackup.nodeModulesPath,
intermediatePackageBackup.nodeModulesPath
);
CompileCache.addTranspilerConfigForPath(
intermediatePackagePath,
metadata.name,
metadata,
metadata.atomTranspilers
);
for (let config of metadata.atomTranspilers) {
const pathsToCompile = glob.sync(
path.join(intermediatePackagePath, config.glob),
{ nodir: true }
);
pathsToCompile.forEach(transpilePath);
}
// Now that we've transpiled everything in-place, we no longer want Atom to try to transpile
// the same files when they're being required.
delete metadata.atomTranspilers;
fs.writeFileSync(
metadataPath,
JSON.stringify(metadata, null, ' '),
'utf8'
);
CompileCache.removeTranspilerConfigForPath(intermediatePackagePath);
rootPackageBackup.restore();
intermediatePackageBackup.restore();
}
}
};
function transpilePath(path) {
fs.writeFileSync(
path,
CompileCache.addPathToCache(path, CONFIG.atomHomeDirPath)
);
}