Something went wrong on our end
Select Git revision
call-button.mjs
-
Volker Schukai authoredVolker Schukai authored
pipe.mjs 2.32 KiB
/**
* Copyright © schukai GmbH and all contributing authors, {{copyRightYear}}. All rights reserved.
* Node module: @schukai/monster
*
* This source code is licensed under the GNU Affero General Public License version 3 (AGPLv3).
* The full text of the license can be found at: https://www.gnu.org/licenses/agpl-3.0.en.html
*
* For those who do not wish to adhere to the AGPLv3, a commercial license is available.
* Acquiring a commercial license allows you to use this software without complying with the AGPLv3 terms.
* For more information about purchasing a commercial license, please contact schukai GmbH.
*
* SPDX-License-Identifier: AGPL-3.0
*/
import { Base } from "../types/base.mjs";
import { validateString } from "../types/validate.mjs";
import { Transformer } from "./transformer.mjs";
export { Pipe };
/**
* @private
* @type {string}
*/
const DELIMITER = "|";
/**
* The pipe class makes it possible to combine several processing steps.
*
* A pipe consists of commands whose input and output are connected with the pipe symbol `|`.
*
* With the Pipe, processing steps can be combined. Here, the value of an object is accessed via the pathfinder (path command).
* the word is then converted to uppercase letters and a prefix Hello is added. the two backslash safe the space char.
*
* @externalExample ../../example/data/pipe.mjs
* @license AGPLv3
* @since 1.5.0
* @copyright schukai GmbH
* @memberOf Monster.Data
*/
class Pipe extends Base {
/**
* @param {string} pipe a pipe consists of commands whose input and output are connected with the pipe symbol `|`.
* @throws {TypeError}
*/
constructor(pipe) {
super();
validateString(pipe);
this.pipe = pipe.split(DELIMITER).map((v) => {
return new Transformer(v);
});
}
/**
* @param {string} name
* @param {function} callback
* @param {object} context
* @returns {Transformer}
* @throws {TypeError} value is not a string
* @throws {TypeError} value is not a function
*/
setCallback(name, callback, context) {
for (const [, t] of Object.entries(this.pipe)) {
t.setCallback(name, callback, context);
}
return this;
}
/**
* run a pipe
*
* @param {*} value
* @returns {*}
*/
run(value) {
return this.pipe.reduce((accumulator, transformer, currentIndex, array) => {
return transformer.run(accumulator);
}, value);
}
}