UNPKG

@polyfill-io-aot/builder

Version:

This is the builder module for polyfill-io-aot.

67 lines 2.66 kB
"use strict"; const Bluebird = require("bluebird"); const fs = require("fs-extra"); const path_1 = require("path"); const CopyPath_1 = require("../CopyPath"); const Executor_1 = require("../Executor"); const BuildEvent_1 = require("../interfaces/BuildEvent"); const symbols_1 = require("../symbols"); /** @internal */ class FormatSourceDirsExecutor extends Executor_1.Executor { execute() { this.emit(BuildEvent_1.BuildEvent.FORMAT_DIRS_BEGIN); this._ora.start('Formatting source directory paths'); const out = []; const extraCopies$ = []; Bluebird .reduce(this.conf.dirs, (acc, dir) => this.createReducer(dir, extraCopies$)(acc, dir), out) .then(() => { this._ora.succeed('Source directories formatted'); this.builder[symbols_1.COPY_DIRS] = out; this.builder[symbols_1.COPY_FILES] = extraCopies$; this.emit(BuildEvent_1.BuildEvent.FORMAT_DIRS_OK); }, (e) => { this._ora.fail(`Failed formatting source dirs: ${this.formatError(e)}`); this.onError(e); }); } createReducer(root, extraCopies$) { const reducer = async (acc, dir) => { try { dir = path_1.resolve(dir); this.emit(BuildEvent_1.BuildEvent.FORMAT_DIR_BEGIN, dir); let hasSubdirs = false; const entries = (await fs.readdir(dir)) .map((p) => path_1.join(dir, p)); const stats = {}; for (const entry of entries) { const stat = await fs.stat(entry); stats[entry] = stat; if (stat.isDirectory()) { hasSubdirs = true; await reducer(acc, entry); } } if (hasSubdirs) { for (const entry of entries) { if (stats[entry].isFile()) { extraCopies$.push(new CopyPath_1.CopyPath(entry, root)); } } } else { acc.push(new CopyPath_1.CopyPath(dir, root)); } this.emit(BuildEvent_1.BuildEvent.FORMAT_DIR_OK, dir); this._ora.text = `Formatted ${dir}`; return acc; } catch (e) { this.emit(BuildEvent_1.BuildEvent.FORMAT_DIR_ERR, dir, e); } }; return reducer; } } module.exports = FormatSourceDirsExecutor; //# sourceMappingURL=FormatSourceDirsExecutor.js.map