@aptpod/iscp-ts
Version:
iSCP 2.0 client library for TypeScript
158 lines • 6.87 kB
JavaScript
;
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