UNPKG

@aptpod/iscp-ts

Version:

iSCP 2.0 client library for TypeScript

158 lines 6.87 kB
"use strict"; var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) { if (kind === "m") throw new TypeError("Private method is not writable"); if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it"); return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value; }; var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) { if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter"); if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it"); return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver); }; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; var _FlushPolicy_config; Object.defineProperty(exports, "__esModule", { value: true }); exports.FlushPolicyHelper = exports.FlushPolicy = void 0; const lodash_clonedeep_1 = __importDefault(require("lodash.clonedeep")); const exceptions_1 = require("./exceptions"); const ticker_1 = require("./utils/ticker"); /** * Upstreamのフラッシュの方法について定義します。 * @category Flush Policy */ class FlushPolicy { /** * 即時フラッシュを行う{@link FlushPolicy}を作成します。 */ static immediately() { return new FlushPolicy({ oneofKind: FlushPolicy.TYPE.IMMEDIATELY, }); } /** * インターバルによるフラッシュを行う{@link FlushPolicy}を作成します。 * @param interval フラッシュインターバル(秒)。引数を省略、または `undefined` を指定した時は、{@link FlushPolicy}.{@link FlushPolicy.DEFAULT_INTERVAL}が使用されます。 */ static intervalOnly(interval = FlushPolicy.DEFAULT_INTERVAL) { return new FlushPolicy({ oneofKind: FlushPolicy.TYPE.INTERVAL_ONLY, config: { interval, }, }); } /** * バッファサイズによるフラッシュを行う{@link FlushPolicy}を作成します。 * @param bufferSize バッファサイズ(Byte)。引数を省略、または `undefined` を指定した時は、{@link FlushPolicy}.{@link FlushPolicy.DEFAULT_BUFFER_SIZE}が使用されます。 */ static bufferSizeOnly(bufferSize = FlushPolicy.DEFAULT_BUFFER_SIZE) { return new FlushPolicy({ oneofKind: FlushPolicy.TYPE.BUFFER_SIZE_ONLY, config: { bufferSize, }, }); } /** * インターバル、またはバッファサイズによるフラッシュを行う{@link FlushPolicy}を作成します。 * @param interval フラッシュインターバル(秒)。 引数を省略、または `undefined` を指定した時は、{@link FlushPolicy}.{@link FlushPolicy.DEFAULT_INTERVAL}が使用されます。 * @param bufferSize バッファサイズ(Byte)。引数を省略、または `undefined` を指定した時は、{@link FlushPolicy}.{@link FlushPolicy.DEFAULT_BUFFER_SIZE}が使用されます。 */ static intervalOrBufferSize(interval = FlushPolicy.DEFAULT_INTERVAL, bufferSize = FlushPolicy.DEFAULT_BUFFER_SIZE) { return new FlushPolicy({ oneofKind: FlushPolicy.TYPE.INTERVAL_OR_BUFFER_SIZE, config: { interval, bufferSize, }, }); } /** * フラッシュを行わない{@link FlushPolicy}を作成します。 * このFlushPolicyを指定した場合は、明示的にフラッシュを行う必要があります。 */ static noFlush() { return new FlushPolicy({ oneofKind: FlushPolicy.TYPE.NO_FLUSH, }); } /** * @internal */ constructor(config) { _FlushPolicy_config.set(this, void 0); __classPrivateFieldSet(this, _FlushPolicy_config, (0, lodash_clonedeep_1.default)(config), "f"); } /** * @hidden */ getConfig() { return __classPrivateFieldGet(this, _FlushPolicy_config, "f"); } } exports.FlushPolicy = FlushPolicy; _FlushPolicy_config = new WeakMap(); /** バッファサイズのデフォルト値です(Byte)。*/ FlushPolicy.DEFAULT_BUFFER_SIZE = 100000; /** インターバルのデフォルト値です(秒)。*/ FlushPolicy.DEFAULT_INTERVAL = 1; /** * @internal */ FlushPolicy.TYPE = { IMMEDIATELY: 'Immediately', INTERVAL_ONLY: 'IntervalOnly', BUFFER_SIZE_ONLY: 'BufferSizeOnly', INTERVAL_OR_BUFFER_SIZE: 'IntervalOrBufferSize', NO_FLUSH: 'NoFlush', }; /** * @internal */ class FlushPolicyHelper { static isFlush(flushPolicy, bufferSize) { const config = flushPolicy.getConfig(); switch (config.oneofKind) { case FlushPolicy.TYPE.IMMEDIATELY: return true; case FlushPolicy.TYPE.INTERVAL_ONLY: return false; case FlushPolicy.TYPE.BUFFER_SIZE_ONLY: return bufferSize >= config.config.bufferSize; case FlushPolicy.TYPE.INTERVAL_OR_BUFFER_SIZE: return bufferSize >= config.config.bufferSize; case FlushPolicy.TYPE.NO_FLUSH: return false; default: throw new exceptions_1.ISCPException('Unrecognized FlushPolicy type.'); } } static ticker(flushPolicy, signal) { const config = flushPolicy.getConfig(); switch (config.oneofKind) { case FlushPolicy.TYPE.IMMEDIATELY: return undefined; case FlushPolicy.TYPE.INTERVAL_ONLY: return ticker_1.Ticker.of({ delayMs: config.config.interval * 1e3, signal, }); case FlushPolicy.TYPE.BUFFER_SIZE_ONLY: return undefined; case FlushPolicy.TYPE.INTERVAL_OR_BUFFER_SIZE: return ticker_1.Ticker.of({ delayMs: config.config.interval * 1e3, signal, }); case FlushPolicy.TYPE.NO_FLUSH: return undefined; default: throw new exceptions_1.ISCPException('Unrecognized FlushPolicy type.'); } } } exports.FlushPolicyHelper = FlushPolicyHelper; //# sourceMappingURL=flush-policy.js.map