UNPKG

@farris/build-angular

Version:

Angular Webpack Build Facade

133 lines 17.6 kB
"use strict"; 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=