57 lines
2.3 KiB
JavaScript
57 lines
2.3 KiB
JavaScript
"use strict";
|
|
// Copyright (c) Microsoft Corporation. All rights reserved. Licensed under the MIT license.
|
|
// See LICENSE in the project root for license information.
|
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
exports.TerminalTransform = void 0;
|
|
const TerminalWritable_1 = require("./TerminalWritable");
|
|
/**
|
|
* The abstract base class for {@link TerminalWritable} objects that receive an input,
|
|
* transform it somehow, and then write the output to another `TerminalWritable`.
|
|
*
|
|
* @remarks
|
|
*
|
|
* The `TerminalTransform` and {@link SplitterTransform} base classes formalize the idea
|
|
* of modeling data flow as a directed acyclic graph of reusable transforms, whose
|
|
* final outputs are `TerminalWritable` objects.
|
|
*
|
|
* The design is based loosely on the `WritableStream` and `TransformStream` classes from
|
|
* the system {@link https://developer.mozilla.org/en-US/docs/Web/API/Streams_API/Concepts
|
|
* | Streams API}, except that instead of asynchronous byte streams, the `TerminalWritable`
|
|
* system synchronously transmits human readable messages intended to be rendered on a
|
|
* text console or log file.
|
|
*
|
|
* The main feature of the `TerminalTransform` class is its {@link TerminalTransform.destination}
|
|
* property, which tracks the next link in the graph.
|
|
*
|
|
* @public
|
|
*/
|
|
class TerminalTransform extends TerminalWritable_1.TerminalWritable {
|
|
constructor(options) {
|
|
super();
|
|
this.destination = options.destination;
|
|
this.preventDestinationAutoclose = !!options.preventDestinationAutoclose;
|
|
}
|
|
/** @override */
|
|
onClose() {
|
|
this.autocloseDestination();
|
|
}
|
|
/**
|
|
* The default implementation of {@link TerminalTransform.onClose} calls this
|
|
* method, which closes the {@link TerminalTransform.destination} if appropriate.
|
|
*
|
|
* @remarks
|
|
* The destination will not be closed if its {@link TerminalWritable.preventAutoclose}
|
|
* property is `true`. The destination will not be closed if
|
|
* {@link ITerminalTransformOptions.preventDestinationAutoclose}
|
|
* is `true`.
|
|
*
|
|
* @sealed
|
|
*/
|
|
autocloseDestination() {
|
|
if (!this.preventDestinationAutoclose && !this.destination.preventAutoclose) {
|
|
this.destination.close();
|
|
}
|
|
}
|
|
}
|
|
exports.TerminalTransform = TerminalTransform;
|
|
//# sourceMappingURL=TerminalTransform.js.map
|