UNPKG

@angular-devkit/core

Version:

Angular DevKit - Core Utility Library

93 lines (92 loc) 3.14 kB
"use strict"; /** * @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.dev/license */ Object.defineProperty(exports, "__esModule", { value: true }); exports.SyncDelegateHost = exports.SynchronousDelegateExpectedException = void 0; const exception_1 = require("../../exception"); class SynchronousDelegateExpectedException extends exception_1.BaseException { constructor() { super(`Expected a synchronous delegate but got an asynchronous one.`); } } exports.SynchronousDelegateExpectedException = SynchronousDelegateExpectedException; /** * Implement a synchronous-only host interface (remove the Observable parts). */ class SyncDelegateHost { _delegate; constructor(_delegate) { this._delegate = _delegate; if (!_delegate.capabilities.synchronous) { throw new SynchronousDelegateExpectedException(); } } _doSyncCall(observable) { let completed = false; let result = undefined; let errorResult = undefined; // Perf note: this is not using an observer object to avoid a performance penalty in RxJS. // See https://github.com/ReactiveX/rxjs/pull/5646 for details. observable.subscribe((x) => (result = x), (err) => (errorResult = err), () => (completed = true)); if (errorResult !== undefined) { throw errorResult; } if (!completed) { throw new SynchronousDelegateExpectedException(); } // The non-null operation is to work around `void` type. We don't allow to return undefined // but ResultT could be void, which is undefined in JavaScript, so this doesn't change the // behaviour. // eslint-disable-next-line @typescript-eslint/no-non-null-assertion return result; } get capabilities() { return this._delegate.capabilities; } get delegate() { return this._delegate; } write(path, content) { return this._doSyncCall(this._delegate.write(path, content)); } read(path) { return this._doSyncCall(this._delegate.read(path)); } delete(path) { return this._doSyncCall(this._delegate.delete(path)); } rename(from, to) { return this._doSyncCall(this._delegate.rename(from, to)); } list(path) { return this._doSyncCall(this._delegate.list(path)); } exists(path) { return this._doSyncCall(this._delegate.exists(path)); } isDirectory(path) { return this._doSyncCall(this._delegate.isDirectory(path)); } isFile(path) { return this._doSyncCall(this._delegate.isFile(path)); } // Some hosts may not support stat. stat(path) { const result = this._delegate.stat(path); if (result) { return this._doSyncCall(result); } else { return null; } } watch(path, options) { return this._delegate.watch(path, options); } } exports.SyncDelegateHost = SyncDelegateHost;