@farris/build-angular
Version:
Angular Webpack Build Facade
133 lines • 17.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
/**
* @license
* Copyright Google Inc. 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
*/
const core_1 = require("@angular-devkit/core");
const rxjs_1 = require("rxjs");
const operators_1 = require("rxjs/operators");
class WebpackFileSystemHostAdapter {
constructor(_host) {
this._host = _host;
this._syncHost = null;
}
_doHostCall(o, callback) {
const token = Symbol();
let value = token;
let error = false;
try {
o.subscribe({
error(err) {
error = true;
callback(err);
},
next(v) {
value = v;
},
complete() {
if (value !== token) {
callback(null, value);
}
else {
callback(new Error('Unknown error happened.'));
}
},
});
}
catch (err) {
// In some occasions, the error handler above will be called, then an exception will be
// thrown (by design in observable constructors in RxJS 5). Don't call the callback
// twice.
if (!error) {
callback(err);
}
}
}
stat(path, callback) {
const p = core_1.normalize('/' + path);
const result = this._host.stat(p);
if (result === null) {
const o = this._host.exists(p).pipe(operators_1.switchMap(exists => {
if (!exists) {
throw new core_1.FileDoesNotExistException(p);
}
return this._host.isDirectory(p).pipe(operators_1.mergeMap(isDirectory => {
return (isDirectory ? rxjs_1.of(0) : this._host.read(p).pipe(operators_1.map(content => content.byteLength))).pipe(operators_1.map(size => [isDirectory, size]));
}));
}), operators_1.map(([isDirectory, size]) => {
return {
isFile() { return !isDirectory; },
isDirectory() { return isDirectory; },
size,
atime: new Date(),
mtime: new Date(),
ctime: new Date(),
birthtime: new Date(),
};
}));
this._doHostCall(o, callback);
}
else {
this._doHostCall(result, callback);
}
}
readdir(path, callback) {
return this._doHostCall(this._host.list(core_1.normalize('/' + path)), callback);
}
readFile(path, callback) {
const o = this._host.read(core_1.normalize('/' + path)).pipe(operators_1.map(content => Buffer.from(content)));
return this._doHostCall(o, callback);
}
readJson(path, callback) {
const o = this._host.read(core_1.normalize('/' + path)).pipe(operators_1.map(content => JSON.parse(core_1.virtualFs.fileBufferToString(content))));
return this._doHostCall(o, callback);
}
readlink(path, callback) {
const err = new Error('Not a symlink.');
err.code = 'EINVAL';
callback(err);
}
statSync(path) {
if (!this._syncHost) {
this._syncHost = new core_1.virtualFs.SyncDelegateHost(this._host);
}
const result = this._syncHost.stat(core_1.normalize('/' + path));
if (result) {
return result;
}
else {
return {};
}
}
readdirSync(path) {
if (!this._syncHost) {
this._syncHost = new core_1.virtualFs.SyncDelegateHost(this._host);
}
return this._syncHost.list(core_1.normalize('/' + path));
}
readFileSync(path) {
if (!this._syncHost) {
this._syncHost = new core_1.virtualFs.SyncDelegateHost(this._host);
}
return Buffer.from(this._syncHost.read(core_1.normalize('/' + path)));
}
readJsonSync(path) {
if (!this._syncHost) {
this._syncHost = new core_1.virtualFs.SyncDelegateHost(this._host);
}
const data = this._syncHost.read(core_1.normalize('/' + path));
return JSON.parse(core_1.virtualFs.fileBufferToString(data));
}
readlinkSync(path) {
const err = new Error('Not a symlink.');
err.code = 'EINVAL';
throw err;
}
purge(_changes) { }
}
exports.WebpackFileSystemHostAdapter = WebpackFileSystemHostAdapter;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoid2VicGFjay1maWxlLXN5c3RlbS1ob3N0LWFkYXB0ZXIuanMiLCJzb3VyY2VSb290IjoiLi8iLCJzb3VyY2VzIjpbInBhY2thZ2VzL2ZhcnJpc19kZXZraXQvYnVpbGRfYW5ndWxhci9zcmMvdXRpbHMvd2VicGFjay1maWxlLXN5c3RlbS1ob3N0LWFkYXB0ZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQTs7Ozs7O0dBTUc7QUFDSCwrQ0FBbUc7QUFHbkcsK0JBQXNDO0FBQ3RDLDhDQUEwRDtBQUcxRDtJQUdFLFlBQXNCLEtBQTRCO1FBQTVCLFVBQUssR0FBTCxLQUFLLENBQXVCO1FBRnhDLGNBQVMsR0FBNkMsSUFBSSxDQUFDO0lBRWhCLENBQUM7SUFFOUMsV0FBVyxDQUFJLENBQWdCLEVBQUUsUUFBcUI7UUFDNUQsTUFBTSxLQUFLLEdBQUcsTUFBTSxFQUFFLENBQUM7UUFDdkIsSUFBSSxLQUFLLEdBQXFCLEtBQUssQ0FBQztRQUNwQyxJQUFJLEtBQUssR0FBRyxLQUFLLENBQUM7UUFFbEIsSUFBSSxDQUFDO1lBQ0gsQ0FBQyxDQUFDLFNBQVMsQ0FBQztnQkFDVixLQUFLLENBQUMsR0FBRztvQkFDUCxLQUFLLEdBQUcsSUFBSSxDQUFDO29CQUNiLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQztnQkFDaEIsQ0FBQztnQkFDRCxJQUFJLENBQUMsQ0FBQztvQkFDSixLQUFLLEdBQUcsQ0FBQyxDQUFDO2dCQUNaLENBQUM7Z0JBQ0QsUUFBUTtvQkFDTixFQUFFLENBQUMsQ0FBQyxLQUFLLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQzt3QkFDcEIsUUFBUSxDQUFDLElBQUksRUFBRSxLQUFLLENBQUMsQ0FBQztvQkFDeEIsQ0FBQztvQkFBQyxJQUFJLENBQUMsQ0FBQzt3QkFDTixRQUFRLENBQUMsSUFBSSxLQUFLLENBQUMseUJBQXlCLENBQUMsQ0FBQyxDQUFDO29CQUNqRCxDQUFDO2dCQUNILENBQUM7YUFDRixDQUFDLENBQUM7UUFDTCxDQUFDO1FB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QUMsR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFFeEQsTUFBTSxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsZ0JBQVMsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQ3hELENBQUM7SUFDRCxZQUFZLENBQUMsSUFBWTtRQUN2QixNQUFNLEdBQUcsR0FBMEIsSUFBSSxLQUFLLENBQUMsZ0JBQWdCLENBQUMsQ0FBQztRQUMvRCxHQUFHLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztRQUNwQixNQUFNLEdBQUcsQ0FBQztJQUNaLENBQUM7SUFFRCxLQUFLLENBQUMsUUFBNEIsSUFBUyxDQUFDO0NBQzdDO0FBakpELG9FQWlKQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgSW5jLiBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7IEZpbGVEb2VzTm90RXhpc3RFeGNlcHRpb24sIEpzb25PYmplY3QsIG5vcm1hbGl6ZSwgdmlydHVhbEZzIH0gZnJvbSAnQGFuZ3VsYXItZGV2a2l0L2NvcmUnO1xuaW1wb3J0IHsgQ2FsbGJhY2ssIElucHV0RmlsZVN5c3RlbSB9IGZyb20gJ0BuZ3Rvb2xzL3dlYnBhY2svc3JjL3dlYnBhY2snO1xuaW1wb3J0IHsgU3RhdHMgfSBmcm9tICdmcyc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBtZXJnZU1hcCwgc3dpdGNoTWFwIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5cbmV4cG9ydCBjbGFzcyBXZWJwYWNrRmlsZVN5c3RlbUhvc3RBZGFwdGVyIGltcGxlbWVudHMgSW5wdXRGaWxlU3lzdGVtIHtcbiAgcHJvdGVjdGVkIF9zeW5jSG9zdDogdmlydHVhbEZzLlN5bmNEZWxlZ2F0ZUhvc3Q8U3RhdHM+IHwgbnVsbCA9IG51bGw7XG5cbiAgY29uc3RydWN0b3IocHJvdGVjdGVkIF9ob3N0OiB2aXJ0dWFsRnMuSG9zdDxTdGF0cz4pIHt9XG5cbiAgcHJpdmF0ZSBfZG9Ib3N0Q2FsbDxUPihvOiBPYnNlcnZhYmxlPFQ+LCBjYWxsYmFjazogQ2FsbGJhY2s8VD4pIHtcbiAgICBjb25zdCB0b2tlbiA9IFN5bWJvbCgpO1xuICAgIGxldCB2YWx1ZTogVCB8IHR5cGVvZiB0b2tlbiA9IHRva2VuO1xuICAgIGxldCBlcnJvciA9IGZhbHNlO1xuXG4gICAgdHJ5IHtcbiAgICAgIG8uc3Vic2NyaWJlKHtcbiAgICAgICAgZXJyb3IoZXJyKSB7XG4gICAgICAgICAgZXJyb3IgPSB0cnVlO1xuICAgICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICAgIH0sXG4gICAgICAgIG5leHQodikge1xuICAgICAgICAgIHZhbHVlID0gdjtcbiAgICAgICAgfSxcbiAgICAgICAgY29tcGxldGUoKSB7XG4gICAgICAgICAgaWYgKHZhbHVlICE9PSB0b2tlbikge1xuICAgICAgICAgICAgY2FsbGJhY2sobnVsbCwgdmFsdWUpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICBjYWxsYmFjayhuZXcgRXJyb3IoJ1Vua25vd24gZXJyb3IgaGFwcGVuZWQuJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfSxcbiAgICAgIH0pO1xuICAgIH0gY2F0Y2ggKGVycikge1xuICAgICAgLy8gSW4gc29tZSBvY2Nhc2lvbnMsIHRoZSBlcnJvciBoYW5kbGVyIGFib3ZlIHdpbGwgYmUgY2FsbGVkLCB0aGVuIGFuIGV4Y2VwdGlvbiB3aWxsIGJlXG4gICAgICAvLyB0aHJvd24gKGJ5IGRlc2lnbiBpbiBvYnNlcnZhYmxlIGNvbnN0cnVjdG9ycyBpbiBSeEpTIDUpLiBEb24ndCBjYWxsIHRoZSBjYWxsYmFja1xuICAgICAgLy8gdHdpY2UuXG4gICAgICBpZiAoIWVycm9yKSB7XG4gICAgICAgIGNhbGxiYWNrKGVycik7XG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgc3RhdChwYXRoOiBzdHJpbmcsIGNhbGxiYWNrOiBDYWxsYmFjazxTdGF0cz4pOiB2b2lkIHtcbiAgICBjb25zdCBwID0gbm9ybWFsaXplKCcvJyArIHBhdGgpO1xuICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuX2hvc3Quc3RhdChwKTtcblxuICAgIGlmIChyZXN1bHQgPT09IG51bGwpIHtcbiAgICAgIGNvbnN0IG8gPSB0aGlzLl9ob3N0LmV4aXN0cyhwKS5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoZXhpc3RzID0+IHtcbiAgICAgICAgICBpZiAoIWV4aXN0cykge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEZpbGVEb2VzTm90RXhpc3RFeGNlcHRpb24ocCk7XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIHRoaXMuX2hvc3QuaXNEaXJlY3RvcnkocCkucGlwZShcbiAgICAgICAgICAgIG1lcmdlTWFwKGlzRGlyZWN0b3J5ID0+IHtcbiAgICAgICAgICAgICAgcmV0dXJuIChpc0RpcmVjdG9yeSA/IG9mKDApIDogdGhpcy5faG9zdC5yZWFkKHApLnBpcGUoXG4gICAgICAgICAgICAgICAgbWFwKGNvbnRlbnQgPT4gY29udGVudC5ieXRlTGVuZ3RoKSxcbiAgICAgICAgICAgICAgKSkucGlwZShcbiAgICAgICAgICAgICAgICBtYXAoc2l6ZSA9PiBbaXNEaXJlY3RvcnksIHNpemVdKSxcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgIH0pLFxuICAgICAgICAgICk7XG4gICAgICAgIH0pLFxuICAgICAgICBtYXAoKFtpc0RpcmVjdG9yeSwgc2l6ZV0pID0+IHtcbiAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgaXNGaWxlKCkgeyByZXR1cm4gIWlzRGlyZWN0b3J5OyB9LFxuICAgICAgICAgICAgaXNEaXJlY3RvcnkoKSB7IHJldHVybiBpc0RpcmVjdG9yeTsgfSxcbiAgICAgICAgICAgIHNpemUsXG4gICAgICAgICAgICBhdGltZTogbmV3IERhdGUoKSxcbiAgICAgICAgICAgIG10aW1lOiBuZXcgRGF0ZSgpLFxuICAgICAgICAgICAgY3RpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgICBiaXJ0aHRpbWU6IG5ldyBEYXRlKCksXG4gICAgICAgICAgfTtcbiAgICAgICAgfSksXG4gICAgICApO1xuXG4gICAgICB0aGlzLl9kb0hvc3RDYWxsKG8sIGNhbGxiYWNrKTtcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fZG9Ib3N0Q2FsbChyZXN1bHQsIGNhbGxiYWNrKTtcbiAgICB9XG4gIH1cblxuICByZWFkZGlyKHBhdGg6IHN0cmluZywgY2FsbGJhY2s6IENhbGxiYWNrPHN0cmluZ1tdPik6IHZvaWQge1xuICAgIHJldHVybiB0aGlzLl9kb0hvc3RDYWxsKHRoaXMuX2hvc3QubGlzdChub3JtYWxpemUoJy8nICsgcGF0aCkpLCBjYWxsYmFjayk7XG4gIH1cblxuICByZWFkRmlsZShwYXRoOiBzdHJpbmcsIGNhbGxiYWNrOiBDYWxsYmFjazxCdWZmZXI+KTogdm9pZCB7XG4gICAgY29uc3QgbyA9IHRoaXMuX2hvc3QucmVhZChub3JtYWxpemUoJy8nICsgcGF0aCkpLnBpcGUoXG4gICAgICBtYXAoY29udGVudCA9PiBCdWZmZXIuZnJvbShjb250ZW50KSksXG4gICAgKTtcblxuICAgIHJldHVybiB0aGlzLl9kb0hvc3RDYWxsKG8sIGNhbGxiYWNrKTtcbiAgfVxuXG4gIHJlYWRKc29uKHBhdGg6IHN0cmluZywgY2FsbGJhY2s6IENhbGxiYWNrPEpzb25PYmplY3Q+KTogdm9pZCB7XG4gICAgY29uc3QgbyA9IHRoaXMuX2hvc3QucmVhZChub3JtYWxpemUoJy8nICsgcGF0aCkpLnBpcGUoXG4gICAgICBtYXAoY29udGVudCA9PiBKU09OLnBhcnNlKHZpcnR1YWxGcy5maWxlQnVmZmVyVG9TdHJpbmcoY29udGVudCkpKSxcbiAgICApO1xuXG4gICAgcmV0dXJuIHRoaXMuX2RvSG9zdENhbGwobywgY2FsbGJhY2spO1xuICB9XG5cbiAgcmVhZGxpbmsocGF0aDogc3RyaW5nLCBjYWxsYmFjazogQ2FsbGJhY2s8c3RyaW5nPik6IHZvaWQge1xuICAgIGNvbnN0IGVycjogTm9kZUpTLkVycm5vRXhjZXB0aW9uID0gbmV3IEVycm9yKCdOb3QgYSBzeW1saW5rLicpO1xuICAgIGVyci5jb2RlID0gJ0VJTlZBTCc7XG4gICAgY2FsbGJhY2soZXJyKTtcbiAgfVxuXG4gIHN0YXRTeW5jKHBhdGg6IHN0cmluZyk6IFN0YXRzIHtcbiAgICBpZiAoIXRoaXMuX3N5bmNIb3N0KSB7XG4gICAgICB0aGlzLl9zeW5jSG9zdCA9IG5ldyB2aXJ0dWFsRnMuU3luY0RlbGVnYXRlSG9zdCh0aGlzLl9ob3N0KTtcbiAgICB9XG5cbiAgICBjb25zdCByZXN1bHQgPSB0aGlzLl9zeW5jSG9zdC5zdGF0KG5vcm1hbGl6ZSgnLycgKyBwYXRoKSk7XG4gICAgaWYgKHJlc3VsdCkge1xuICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIHt9IGFzIFN0YXRzO1xuICAgIH1cbiAgfVxuICByZWFkZGlyU3luYyhwYXRoOiBzdHJpbmcpOiBzdHJpbmdbXSB7XG4gICAgaWYgKCF0aGlzLl9zeW5jSG9zdCkge1xuICAgICAgdGhpcy5fc3luY0hvc3QgPSBuZXcgdmlydHVhbEZzLlN5bmNEZWxlZ2F0ZUhvc3QodGhpcy5faG9zdCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMuX3N5bmNIb3N0Lmxpc3Qobm9ybWFsaXplKCcvJyArIHBhdGgpKTtcbiAgfVxuICByZWFkRmlsZVN5bmMocGF0aDogc3RyaW5nKTogQnVmZmVyIHtcbiAgICBpZiAoIXRoaXMuX3N5bmNIb3N0KSB7XG4gICAgICB0aGlzLl9zeW5jSG9zdCA9IG5ldyB2aXJ0dWFsRnMuU3luY0RlbGVnYXRlSG9zdCh0aGlzLl9ob3N0KTtcbiAgICB9XG5cbiAgICByZXR1cm4gQnVmZmVyLmZyb20odGhpcy5fc3luY0hvc3QucmVhZChub3JtYWxpemUoJy8nICsgcGF0aCkpKTtcbiAgfVxuICByZWFkSnNvblN5bmMocGF0aDogc3RyaW5nKToge30ge1xuICAgIGlmICghdGhpcy5fc3luY0hvc3QpIHtcbiAgICAgIHRoaXMuX3N5bmNIb3N0ID0gbmV3IHZpcnR1YWxGcy5TeW5jRGVsZWdhdGVIb3N0KHRoaXMuX2hvc3QpO1xuICAgIH1cblxuICAgIGNvbnN0IGRhdGEgPSB0aGlzLl9zeW5jSG9zdC5yZWFkKG5vcm1hbGl6ZSgnLycgKyBwYXRoKSk7XG5cbiAgICByZXR1cm4gSlNPTi5wYXJzZSh2aXJ0dWFsRnMuZmlsZUJ1ZmZlclRvU3RyaW5nKGRhdGEpKTtcbiAgfVxuICByZWFkbGlua1N5bmMocGF0aDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBlcnI6IE5vZGVKUy5FcnJub0V4Y2VwdGlvbiA9IG5ldyBFcnJvcignTm90IGEgc3ltbGluay4nKTtcbiAgICBlcnIuY29kZSA9ICdFSU5WQUwnO1xuICAgIHRocm93IGVycjtcbiAgfVxuXG4gIHB1cmdlKF9jaGFuZ2VzPzogc3RyaW5nW10gfCBzdHJpbmcpOiB2b2lkIHt9XG59XG4iXX0=