@angular-devkit/build-angular
Version:
Angular Webpack Build Facade
107 lines • 11.2 kB
JavaScript
;
/**
* @license
* Copyright Google LLC All Rights Reserved.
*
* Use of this source code is governed by an MIT-style license that can be
* found in the LICENSE file at https://angular.io/license
*/
Object.defineProperty(exports, "__esModule", { value: true });
exports.createWatcher = exports.ChangedFiles = void 0;
const chokidar_1 = require("chokidar");
class ChangedFiles {
constructor() {
this.added = new Set();
this.modified = new Set();
this.removed = new Set();
}
toDebugString() {
const content = {
added: Array.from(this.added),
modified: Array.from(this.modified),
removed: Array.from(this.removed),
};
return JSON.stringify(content, null, 2);
}
}
exports.ChangedFiles = ChangedFiles;
function createWatcher(options) {
const watcher = new chokidar_1.FSWatcher({
usePolling: options?.polling,
interval: options?.interval,
ignored: options?.ignored,
disableGlobbing: true,
ignoreInitial: true,
});
const nextQueue = [];
let currentChanges;
let nextWaitTimeout;
watcher.on('all', (event, path) => {
switch (event) {
case 'add':
currentChanges ?? (currentChanges = new ChangedFiles());
currentChanges.added.add(path);
break;
case 'change':
currentChanges ?? (currentChanges = new ChangedFiles());
currentChanges.modified.add(path);
break;
case 'unlink':
currentChanges ?? (currentChanges = new ChangedFiles());
currentChanges.removed.add(path);
break;
default:
return;
}
// Wait 250ms from next change to better capture groups of file save operations.
if (!nextWaitTimeout) {
nextWaitTimeout = setTimeout(() => {
nextWaitTimeout = undefined;
const next = nextQueue.shift();
if (next) {
const value = currentChanges;
currentChanges = undefined;
next(value);
}
}, 250);
nextWaitTimeout?.unref();
}
});
return {
[Symbol.asyncIterator]() {
return this;
},
async next() {
if (currentChanges && nextQueue.length === 0) {
const result = { value: currentChanges };
currentChanges = undefined;
return result;
}
return new Promise((resolve) => {
nextQueue.push((value) => resolve(value ? { value } : { done: true, value }));
});
},
add(paths) {
watcher.add(paths);
},
remove(paths) {
watcher.unwatch(paths);
},
async close() {
try {
await watcher.close();
if (nextWaitTimeout) {
clearTimeout(nextWaitTimeout);
}
}
finally {
let next;
while ((next = nextQueue.shift()) !== undefined) {
next();
}
}
},
};
}
exports.createWatcher = createWatcher;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2F0Y2hlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2FuZ3VsYXJfZGV2a2l0L2J1aWxkX2FuZ3VsYXIvc3JjL3Rvb2xzL2VzYnVpbGQvd2F0Y2hlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBQUE7Ozs7OztHQU1HOzs7QUFFSCx1Q0FBcUM7QUFFckMsTUFBYSxZQUFZO0lBQXpCO1FBQ1csVUFBSyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDMUIsYUFBUSxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7UUFDN0IsWUFBTyxHQUFHLElBQUksR0FBRyxFQUFVLENBQUM7SUFXdkMsQ0FBQztJQVRDLGFBQWE7UUFDWCxNQUFNLE9BQU8sR0FBRztZQUNkLEtBQUssRUFBRSxLQUFLLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDN0IsUUFBUSxFQUFFLEtBQUssQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQztZQUNuQyxPQUFPLEVBQUUsS0FBSyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO1NBQ2xDLENBQUM7UUFFRixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQztJQUMxQyxDQUFDO0NBQ0Y7QUFkRCxvQ0FjQztBQVFELFNBQWdCLGFBQWEsQ0FBQyxPQUk3QjtJQUNDLE1BQU0sT0FBTyxHQUFHLElBQUksb0JBQVMsQ0FBQztRQUM1QixVQUFVLEVBQUUsT0FBTyxFQUFFLE9BQU87UUFDNUIsUUFBUSxFQUFFLE9BQU8sRUFBRSxRQUFRO1FBQzNCLE9BQU8sRUFBRSxPQUFPLEVBQUUsT0FBTztRQUN6QixlQUFlLEVBQUUsSUFBSTtRQUNyQixhQUFhLEVBQUUsSUFBSTtLQUNwQixDQUFDLENBQUM7SUFFSCxNQUFNLFNBQVMsR0FBdUMsRUFBRSxDQUFDO0lBQ3pE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QyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQgeyBGU1dhdGNoZXIgfSBmcm9tICdjaG9raWRhcic7XG5cbmV4cG9ydCBjbGFzcyBDaGFuZ2VkRmlsZXMge1xuICByZWFkb25seSBhZGRlZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICByZWFkb25seSBtb2RpZmllZCA9IG5ldyBTZXQ8c3RyaW5nPigpO1xuICByZWFkb25seSByZW1vdmVkID0gbmV3IFNldDxzdHJpbmc+KCk7XG5cbiAgdG9EZWJ1Z1N0cmluZygpOiBzdHJpbmcge1xuICAgIGNvbnN0IGNvbnRlbnQgPSB7XG4gICAgICBhZGRlZDogQXJyYXkuZnJvbSh0aGlzLmFkZGVkKSxcbiAgICAgIG1vZGlmaWVkOiBBcnJheS5mcm9tKHRoaXMubW9kaWZpZWQpLFxuICAgICAgcmVtb3ZlZDogQXJyYXkuZnJvbSh0aGlzLnJlbW92ZWQpLFxuICAgIH07XG5cbiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkoY29udGVudCwgbnVsbCwgMik7XG4gIH1cbn1cblxuZXhwb3J0IGludGVyZmFjZSBCdWlsZFdhdGNoZXIgZXh0ZW5kcyBBc3luY0l0ZXJhYmxlSXRlcmF0b3I8Q2hhbmdlZEZpbGVzPiB7XG4gIGFkZChwYXRoczogc3RyaW5nIHwgcmVhZG9ubHkgc3RyaW5nW10pOiB2b2lkO1xuICByZW1vdmUocGF0aHM6IHN0cmluZyB8IHJlYWRvbmx5IHN0cmluZ1tdKTogdm9pZDtcbiAgY2xvc2UoKTogUHJvbWlzZTx2b2lkPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZVdhdGNoZXIob3B0aW9ucz86IHtcbiAgcG9sbGluZz86IGJvb2xlYW47XG4gIGludGVydmFsPzogbnVtYmVyO1xuICBpZ25vcmVkPzogc3RyaW5nW107XG59KTogQnVpbGRXYXRjaGVyIHtcbiAgY29uc3Qgd2F0Y2hlciA9IG5ldyBGU1dhdGNoZXIoe1xuICAgIHVzZVBvbGxpbmc6IG9wdGlvbnM/LnBvbGxpbmcsXG4gICAgaW50ZXJ2YWw6IG9wdGlvbnM/LmludGVydmFsLFxuICAgIGlnbm9yZWQ6IG9wdGlvbnM/Lmlnbm9yZWQsXG4gICAgZGlzYWJsZUdsb2JiaW5nOiB0cnVlLFxuICAgIGlnbm9yZUluaXRpYWw6IHRydWUsXG4gIH0pO1xuXG4gIGNvbnN0IG5leHRRdWV1ZTogKCh2YWx1ZT86IENoYW5nZWRGaWxlcykgPT4gdm9pZClbXSA9IFtdO1xuICBsZXQgY3VycmVudENoYW5nZXM6IENoYW5nZWRGaWxlcyB8IHVuZGVmaW5lZDtcbiAgbGV0IG5leHRXYWl0VGltZW91dDogTm9kZUpTLlRpbWVvdXQgfCB1bmRlZmluZWQ7XG5cbiAgd2F0Y2hlci5vbignYWxsJywgKGV2ZW50LCBwYXRoKSA9PiB7XG4gICAgc3dpdGNoIChldmVudCkge1xuICAgICAgY2FzZSAnYWRkJzpcbiAgICAgICAgY3VycmVudENoYW5nZXMgPz89IG5ldyBDaGFuZ2VkRmlsZXMoKTtcbiAgICAgICAgY3VycmVudENoYW5nZXMuYWRkZWQuYWRkKHBhdGgpO1xuICAgICAgICBicmVhaztcbiAgICAgIGNhc2UgJ2NoYW5nZSc6XG4gICAgICAgIGN1cnJlbnRDaGFuZ2VzID8/PSBuZXcgQ2hhbmdlZEZpbGVzKCk7XG4gICAgICAgIGN1cnJlbnRDaGFuZ2VzLm1vZGlmaWVkLmFkZChwYXRoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBjYXNlICd1bmxpbmsnOlxuICAgICAgICBjdXJyZW50Q2hhbmdlcyA/Pz0gbmV3IENoYW5nZWRGaWxlcygpO1xuICAgICAgICBjdXJyZW50Q2hhbmdlcy5yZW1vdmVkLmFkZChwYXRoKTtcbiAgICAgICAgYnJlYWs7XG4gICAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm47XG4gICAgfVxuXG4gICAgLy8gV2FpdCAyNTBtcyBmcm9tIG5leHQgY2hhbmdlIHRvIGJldHRlciBjYXB0dXJlIGdyb3VwcyBvZiBmaWxlIHNhdmUgb3BlcmF0aW9ucy5cbiAgICBpZiAoIW5leHRXYWl0VGltZW91dCkge1xuICAgICAgbmV4dFdhaXRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIG5leHRXYWl0VGltZW91dCA9IHVuZGVmaW5lZDtcbiAgICAgICAgY29uc3QgbmV4dCA9IG5leHRRdWV1ZS5zaGlmdCgpO1xuICAgICAgICBpZiAobmV4dCkge1xuICAgICAgICAgIGNvbnN0IHZhbHVlID0gY3VycmVudENoYW5nZXM7XG4gICAgICAgICAgY3VycmVudENoYW5nZXMgPSB1bmRlZmluZWQ7XG4gICAgICAgICAgbmV4dCh2YWx1ZSk7XG4gICAgICAgIH1cbiAgICAgIH0sIDI1MCk7XG4gICAgICBuZXh0V2FpdFRpbWVvdXQ/LnVucmVmKCk7XG4gICAgfVxuICB9KTtcblxuICByZXR1cm4ge1xuICAgIFtTeW1ib2wuYXN5bmNJdGVyYXRvcl0oKSB7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9LFxuXG4gICAgYXN5bmMgbmV4dCgpIHtcbiAgICAgIGlmIChjdXJyZW50Q2hhbmdlcyAmJiBuZXh0UXVldWUubGVuZ3RoID09PSAwKSB7XG4gICAgICAgIGNvbnN0IHJlc3VsdCA9IHsgdmFsdWU6IGN1cnJlbnRDaGFuZ2VzIH07XG4gICAgICAgIGN1cnJlbnRDaGFuZ2VzID0gdW5kZWZpbmVkO1xuXG4gICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICB9XG5cbiAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4ge1xuICAgICAgICBuZXh0UXVldWUucHVzaCgodmFsdWUpID0+IHJlc29sdmUodmFsdWUgPyB7IHZhbHVlIH0gOiB7IGRvbmU6IHRydWUsIHZhbHVlIH0pKTtcbiAgICAgIH0pO1xuICAgIH0sXG5cbiAgICBhZGQocGF0aHMpIHtcbiAgICAgIHdhdGNoZXIuYWRkKHBhdGhzKTtcbiAgICB9LFxuXG4gICAgcmVtb3ZlKHBhdGhzKSB7XG4gICAgICB3YXRjaGVyLnVud2F0Y2gocGF0aHMpO1xuICAgIH0sXG5cbiAgICBhc3luYyBjbG9zZSgpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIGF3YWl0IHdhdGNoZXIuY2xvc2UoKTtcbiAgICAgICAgaWYgKG5leHRXYWl0VGltZW91dCkge1xuICAgICAgICAgIGNsZWFyVGltZW91dChuZXh0V2FpdFRpbWVvdXQpO1xuICAgICAgICB9XG4gICAgICB9IGZpbmFsbHkge1xuICAgICAgICBsZXQgbmV4dDtcbiAgICAgICAgd2hpbGUgKChuZXh0ID0gbmV4dFF1ZXVlLnNoaWZ0KCkpICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICBuZXh0KCk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9LFxuICB9O1xufVxuIl19