UNPKG

durrrrrrrrrjs

Version:

JavaScript Plugin for Nx

141 lines 6.11 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CopyAssetsHandler = exports.defaultFileEventHandler = void 0; const tslib_1 = require("tslib"); const minimatch = require("minimatch"); const path = require("path"); const fse = require("fs-extra"); const ignore_1 = require("ignore"); const fg = require("fast-glob"); const logger_1 = require("@nrwl/tao/src/shared/logger"); const defaultFileEventHandler = (events) => { const dirs = new Set(events.map((event) => path.dirname(event.dest))); dirs.forEach((d) => fse.ensureDirSync(d)); events.forEach((event) => { if (event.type === 'create' || event.type === 'update') { fse.copyFileSync(event.src, event.dest); } else if (event.type === 'delete') { fse.removeSync(event.dest); } else { logger_1.logger.error(`Unknown file event: ${event.type}`); } }); }; exports.defaultFileEventHandler = defaultFileEventHandler; class CopyAssetsHandler { constructor(opts) { var _a; this.rootDir = opts.rootDir; this.projectDir = opts.projectDir; this.outputDir = opts.outputDir; this.callback = (_a = opts.callback) !== null && _a !== void 0 ? _a : exports.defaultFileEventHandler; // TODO(jack): Should handle nested .gitignore files this.ignore = (0, ignore_1.default)(); const gitignore = path.join(opts.rootDir, '.gitignore'); const nxignore = path.join(opts.rootDir, '.nxignore'); if (fse.existsSync(gitignore)) this.ignore.add(fse.readFileSync(gitignore).toString()); if (fse.existsSync(nxignore)) this.ignore.add(fse.readFileSync(nxignore).toString()); this.assetGlobs = opts.assets.map((f) => { let isGlob = false; let pattern; // Input and output directories are normalized to be relative to root let input; let output; let ignore = null; if (typeof f === 'string') { pattern = f; input = path.relative(opts.rootDir, opts.projectDir); output = path.relative(opts.rootDir, opts.outputDir); } else { isGlob = true; pattern = path.join(f.input, f.glob); input = f.input; output = path.join(path.relative(opts.rootDir, opts.outputDir), f.output); if (f.ignore) ignore = f.ignore.map((ig) => path.join(f.input, ig)); } return { isGlob, input, pattern, ignore, output, }; }); } processAllAssetsOnce() { return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () { yield Promise.all(this.assetGlobs.map((ag) => (0, tslib_1.__awaiter)(this, void 0, void 0, function* () { let pattern; if (typeof ag === 'string') { pattern = ag; } else { pattern = ag.pattern; } // fast-glob only supports Unix paths const files = yield fg(pattern.replace(/\\/g, '/'), { cwd: this.rootDir, }); this.callback(files.reduce((acc, src) => { var _a; if (!((_a = ag.ignore) === null || _a === void 0 ? void 0 : _a.some((ig) => minimatch(src, ig))) && !this.ignore.ignores(src)) { acc.push({ type: 'create', src: path.join(this.rootDir, src), dest: path.join(this.rootDir, ag.output, path.relative(ag.input, src)), }); } return acc; }, [])); }))); }); } watchAndProcessOnAssetChange() { return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () { const watcher = yield Promise.resolve().then(() => require('@parcel/watcher')); const subscription = yield watcher.subscribe(this.projectDir, (err, events) => { var _a; if (err) { logger_1.logger.error(`Watch error: ${(_a = err === null || err === void 0 ? void 0 : err.message) !== null && _a !== void 0 ? _a : 'Unknown'}`); } else { this.processEvents(events); } }); return () => subscription.unsubscribe(); }); } processEvents(events) { var _a; return (0, tslib_1.__awaiter)(this, void 0, void 0, function* () { const fileEvents = []; for (const event of events) { const pathFromRoot = path.relative(this.rootDir, event.path); for (const ag of this.assetGlobs) { if (minimatch(pathFromRoot, ag.pattern) && !((_a = ag.ignore) === null || _a === void 0 ? void 0 : _a.some((ig) => minimatch(pathFromRoot, ig))) && !this.ignore.ignores(pathFromRoot)) { fileEvents.push({ type: event.type, src: path.join(this.rootDir, pathFromRoot), dest: path.join(this.rootDir, ag.output, path.relative(ag.input, pathFromRoot)), }); // Match first entry and skip the rest for this file. break; } } } if (fileEvents.length > 0) this.callback(fileEvents); }); } } exports.CopyAssetsHandler = CopyAssetsHandler; //# sourceMappingURL=copy-assets-handler.js.map