UNPKG

@tai-kun/surrealdb

Version:

The SurrealDB SDK for JavaScript

226 lines (224 loc) 26.5 kB
"use strict"; var __defProp = Object.defineProperty; var __getOwnPropDesc = Object.getOwnPropertyDescriptor; var __getOwnPropNames = Object.getOwnPropertyNames; var __hasOwnProp = Object.prototype.hasOwnProperty; var __name = (target, value) => __defProp(target, "name", { value, configurable: true }); var __export = (target, all) => { for (var name in all) __defProp(target, name, { get: all[name], enumerable: true }); }; var __copyProps = (to, from, except, desc) => { if (from && typeof from === "object" || typeof from === "function") { for (let key of __getOwnPropNames(from)) if (!__hasOwnProp.call(to, key) && key !== except) __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); } return to; }; var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); // src/data-types/standard/datetime.ts var datetime_exports = {}; __export(datetime_exports, { default: () => Datetime }); module.exports = __toCommonJS(datetime_exports); var import_encodable_datatypes = require("../encodable/index.cjs"); var import_errors = require("../../errors/index.cjs"); var import_utils = require("../../utils/index.cjs"); var import_datetime = require("../_internals/datetime.cjs"); var import_define = require("../_internals/define.cjs"); var MILLISECONDS_PER_SECOND = 1e3; var NANOSECONDS_PER_SECOND = 1e9; var NANOSECONDS_PER_SECOND_BIG = 1000000000n; var NANOSECONDS_PER_MILLISECOND_BIG = 1000000n; var NANOSECONDS_PER_MICROSECOND_BIG = 1000n; var MAX_DATE_MILLISECONDS = 864e13; var MIN_DATE_MILLISECONDS = -864e13; var toBigInt = /* @__PURE__ */ __name((v) => typeof v === "bigint" ? v : (0, import_utils.isSafeNumber)(v) ? BigInt(Math.trunc(v)) : null, "toBigInt"); var _Datetime = class _Datetime extends Date { processNsTime(nsTime) { if (nsTime == null) { return super.setTime(NaN); } let ns = Math.abs(Number(nsTime % NANOSECONDS_PER_SECOND_BIG)); const msTime = super.setTime( Number(nsTime / NANOSECONDS_PER_MILLISECOND_BIG) ); if (ns > 0) { if (msTime < 0) { ns = NANOSECONDS_PER_SECOND - ns; } if (msTime >= MAX_DATE_MILLISECONDS || msTime <= MIN_DATE_MILLISECONDS) { return super.setTime(NaN); } } return msTime === msTime ? ns : NaN; } constructor(...args) { super(); if (args[0] === void 0) { const msTime = toBigInt(super.getTime()); this._nanoseconds = msTime === null ? NaN : this.processNsTime(msTime * NANOSECONDS_PER_MILLISECOND_BIG); } else if (args.length === 1) { const v = args[0]; let nsTime; if (Array.isArray(v)) { const s = toBigInt(v[0]); const ns = toBigInt(v[1]); if (s !== null && ns !== null) { nsTime = s * NANOSECONDS_PER_SECOND_BIG + ns; } } else if (typeof v === "object" && v && "seconds" in v && "nanoseconds" in v) { const s = toBigInt(v.seconds); const ns = toBigInt(v.nanoseconds); if (s !== null && ns !== null) { nsTime = s * NANOSECONDS_PER_SECOND_BIG + ns; } } else if (typeof v === "string" || typeof v === "number" || v instanceof Date) { const msTime = toBigInt( typeof v === "string" ? Date.parse(v) : typeof v === "number" ? v : v.getTime() ); if (msTime !== null) { nsTime = msTime * NANOSECONDS_PER_MILLISECOND_BIG; } } else { nsTime = v; } this._nanoseconds = this.processNsTime(nsTime); } else if (typeof args[0] === "number" && typeof args[1] === "number" && (() => { for (let i = 8, required = false; i >= 2; i--) { if (typeof args[i] === "number") { required = true; } else if (args[i] === void 0) { if (required) { return false; } } else { return false; } } return true; })()) { const parts = args.filter((a) => a !== void 0); const time = Date.UTC(...parts); const nsTimeOfMs = toBigInt(time); const nsTimeOfUs = toBigInt(args[7] ?? 0); const nsTimeOfNs = toBigInt(args[8] ?? 0); const nsTime = nsTimeOfMs === null || nsTimeOfUs === null || nsTimeOfNs === null ? null : nsTimeOfMs * NANOSECONDS_PER_MILLISECOND_BIG + nsTimeOfUs * NANOSECONDS_PER_MICROSECOND_BIG + nsTimeOfNs; this._nanoseconds = this.processNsTime(nsTime); } else { throw new import_errors.SurrealValueError( "Date, BigInt, Array or Object arguments", String(args) ); } (0, import_define.defineAsDatetime)(this); } get seconds() { let s = Math.trunc(super.getTime() / MILLISECONDS_PER_SECOND); if (s <= 0 && this._nanoseconds > 0) { s -= 1; } return s; } set seconds(s) { this.setCompact([s, this.nanoseconds]); } get nanoseconds() { return this._nanoseconds; } set nanoseconds(ns) { this.setCompact([this.seconds, ns]); } getCompact() { return [this.seconds, this.nanoseconds]; } setCompact(compact) { const s = toBigInt(compact[0]); const ns = toBigInt(compact[1]); const nsTime = s !== null && ns !== null ? s * NANOSECONDS_PER_SECOND_BIG + ns : null; this._nanoseconds = this.processNsTime(nsTime); return super.getTime(); } getMicroseconds() { return Math.trunc(this.nanoseconds / 1e3) % 1e3; } setMicroseconds(us) { this.nanoseconds = // マイクロ秒 3 桁分を 0 にする。 this.nanoseconds - this.getMicroseconds() * 1e3 + us * 1e3; return this.getTime(); } getUTCMicroseconds() { return this.getMicroseconds(); } setUTCMicroseconds(us) { return this.setMicroseconds(us); } getNanoseconds() { return this.nanoseconds % 1e3; } setNanoseconds(ns) { this.nanoseconds = // ナノ秒 3 桁分を 0 にする。 this.nanoseconds - this.getNanoseconds() + ns; return this.getTime(); } getUTCNanoseconds() { return this.getNanoseconds(); } setUTCNanoseconds(ns) { return this.setNanoseconds(ns); } setTime(time) { if (typeof time === "number") { const msTime = super.setTime(time); const ns = msTime % 1e3 * 1e6; this._nanoseconds = msTime < 0 && ns > 0 ? NANOSECONDS_PER_SECOND - ns : ns; } else { this._nanoseconds = this.processNsTime(time); } return super.getTime(); } setMilliseconds(ms) { const time = super.setMilliseconds(ms); return this.setCompact([ time / 1e3, time % 1e3 * 1e6 + this.nanoseconds % 1e6 ]); } setUTCMilliseconds(ms) { return this.setMilliseconds(ms); } toISOString() { return (0, import_datetime.toISOString)(this, this.nanoseconds); } toDate() { return new Date(this.seconds * 1e3 + this.nanoseconds / 1e6); } toCBOR() { return [ import_encodable_datatypes.CBOR_TAG_DATETIME, [this.seconds, this.nanoseconds] ]; } toJSON() { return this.toISOString(); } toSurql() { const iso = this.toISOString(); return "d" + (0, import_utils.quoteStr)(iso); } toPlainObject() { return { seconds: this.seconds, nanoseconds: this.nanoseconds }; } clone() { const This = this.constructor; return new This(this); } }; __name(_Datetime, "Datetime"); var Datetime = _Datetime; //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vLi4vc3JjL2RhdGEtdHlwZXMvc3RhbmRhcmQvZGF0ZXRpbWUudHMiXSwKICAic291cmNlc0NvbnRlbnQiOiBbImltcG9ydCB7XG4gIENCT1JfVEFHX0RBVEVUSU1FLFxuICB0eXBlIERhdGV0aW1lU291cmNlLFxuICB0eXBlIEVuY29kYWJsZSxcbn0gZnJvbSBcIkB0YWkta3VuL3N1cnJlYWxkYi9lbmNvZGFibGUtZGF0YXR5cGVzXCI7XG5pbXBvcnQgeyBTdXJyZWFsVmFsdWVFcnJvciB9IGZyb20gXCJAdGFpLWt1bi9zdXJyZWFsZGIvZXJyb3JzXCI7XG5pbXBvcnQgeyBpc1NhZmVOdW1iZXIsIHF1b3RlU3RyIH0gZnJvbSBcIkB0YWkta3VuL3N1cnJlYWxkYi91dGlsc1wiO1xuaW1wb3J0IHsgdG9JU09TdHJpbmcgfSBmcm9tIFwiLi4vX2ludGVybmFscy9kYXRldGltZVwiO1xuaW1wb3J0IHsgZGVmaW5lQXNEYXRldGltZSB9IGZyb20gXCIuLi9faW50ZXJuYWxzL2RlZmluZVwiO1xuXG5leHBvcnQgdHlwZSAqIGZyb20gXCIuLi9lbmNvZGFibGUvZGF0ZXRpbWVcIjtcblxuY29uc3QgTUlMTElTRUNPTkRTX1BFUl9TRUNPTkQgPSAxZTM7XG5jb25zdCBOQU5PU0VDT05EU19QRVJfU0VDT05EID0gMWU5O1xuXG5jb25zdCBOQU5PU0VDT05EU19QRVJfU0VDT05EX0JJRyA9IDFfMDAwXzAwMF8wMDBuO1xuY29uc3QgTkFOT1NFQ09ORFNfUEVSX01JTExJU0VDT05EX0JJRyA9IDFfMDAwXzAwMG47XG5jb25zdCBOQU5PU0VDT05EU19QRVJfTUlDUk9TRUNPTkRfQklHID0gMV8wMDBuO1xuXG5jb25zdCBNQVhfREFURV9NSUxMSVNFQ09ORFMgPSA4XzY0MF8wMDBfMDAwXzAwMF8wMDA7XG5jb25zdCBNSU5fREFURV9NSUxMSVNFQ09ORFMgPSAtOF82NDBfMDAwXzAwMF8wMDBfMDAwO1xuXG5jb25zdCB0b0JpZ0ludCA9ICh2OiBudW1iZXIgfCBiaWdpbnQpOiBiaWdpbnQgfCBudWxsID0+XG4gIHR5cGVvZiB2ID09PSBcImJpZ2ludFwiXG4gICAgPyB2XG4gICAgOiBpc1NhZmVOdW1iZXIodilcbiAgICA/IEJpZ0ludChNYXRoLnRydW5jKHYpKVxuICAgIDogbnVsbDtcblxuZXhwb3J0IGludGVyZmFjZSBEYXRldGltZUxpa2Uge1xuICByZWFkb25seSBzZWNvbmRzOiBudW1iZXI7XG4gIHJlYWRvbmx5IG5hbm9zZWNvbmRzOiBudW1iZXI7XG59XG5cbi8qKlxuICogW0FQSSBSZWZlcmVuY2VdKGh0dHBzOi8vdGFpLWt1bi5naXRodWIuaW8vc3VycmVhbGRiLmpzL3YyL2FwaS9kYXRhL2RhdGV0aW1lKVxuICovXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBEYXRldGltZSBleHRlbmRzIERhdGUgaW1wbGVtZW50cyBFbmNvZGFibGUge1xuICBwcm90ZWN0ZWQgX25hbm9zZWNvbmRzOiBudW1iZXI7XG5cbiAgcHJvdGVjdGVkIHByb2Nlc3NOc1RpbWUobnNUaW1lOiBiaWdpbnQgfCBudWxsIHwgdW5kZWZpbmVkKTogbnVtYmVyIHtcbiAgICBpZiAobnNUaW1lID09IG51bGwpIHtcbiAgICAgIHJldHVybiBzdXBlci5zZXRUaW1lKE5hTik7IC8vIGFuZCByZXR1cm5zIE5hTlxuICAgIH1cblxuICAgIGxldCBucyA9IE1hdGguYWJzKE51bWJlcihuc1RpbWUgJSBOQU5PU0VDT05EU19QRVJfU0VDT05EX0JJRykpO1xuICAgIGNvbnN0IG1zVGltZSA9IHN1cGVyLnNldFRpbWUoXG4gICAgICBOdW1iZXIobnNUaW1lIC8gTkFOT1NFQ09ORFNfUEVSX01JTExJU0VDT05EX0JJRyksXG4gICAgKTtcblxuICAgIGlmIChucyA+IDApIHtcbiAgICAgIGlmIChtc1RpbWUgPCAwKSB7XG4gICAgICAgIG5zID0gTkFOT1NFQ09ORFNfUEVSX1NFQ09ORCAtIG5zO1xuICAgICAgfVxuXG4gICAgICAvLyBcdTMwREZcdTMwRUFcdTc5RDJcdTY2NDJcdTUyM0JcdTMwNENcdTRFMEFcdTk2NTBcdTUwMjQvXHU0RTBCXHU5NjUwXHU1MDI0XHUzMDZBXHUzMDg5XHUzMDAxXHUzMERFXHUzMEE0XHUzMEFGXHUzMEVEXHU3OUQyXHU0RUU1XHU0RTBCXHUzMDZGIDAgXHUzMDg4XHUzMDhBXHU1OTI3XHUzMDREXHUzMDRGXHUzMDZBXHUzMDhDXHUzMDZBXHUzMDQ0XHUzMDAyXG4gICAgICBpZiAobXNUaW1lID49IE1BWF9EQVRFX01JTExJU0VDT05EUyB8fCBtc1RpbWUgPD0gTUlOX0RBVEVfTUlMTElTRUNPTkRTKSB7XG4gICAgICAgIHJldHVybiBzdXBlci5zZXRUaW1lKE5hTik7IC8vIGFuZCByZXR1cm5zIE5hTlxuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBtc1RpbWUgPT09IG1zVGltZVxuICAgICAgPyBuc1xuICAgICAgOiBOYU47XG4gIH1cblxuICBjb25zdHJ1Y3RvcihcbiAgICB2YWx1ZT86XG4gICAgICB8IERhdGV0aW1lU291cmNlXG4gICAgICB8IG51bWJlclxuICAgICAgfCBiaWdpbnRcbiAgICAgIHwgRGF0ZVxuICAgICAgfCBEYXRldGltZUxpa2VcbiAgICAgIHwgdW5kZWZpbmVkLFxuICApO1xuXG4gIGNvbnN0cnVjdG9yKFxuICAgIHllYXI6IG51bWJlcixcbiAgICBtb250aEluZGV4OiBudW1iZXIsXG4gICAgZGF0ZT86IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgICBob3Vycz86IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgICBtaW51dGVzPzogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICAgIHNlY29uZHM/OiBudW1iZXIgfCB1bmRlZmluZWQsXG4gICAgbWlsbGlzZWNvbmRzPzogbnVtYmVyIHwgdW5kZWZpbmVkLFxuICAgIG1pY3Jvc2Vjb25kcz86IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgICBuYW5vc2Vjb25kcz86IG51bWJlciB8IHVuZGVmaW5lZCxcbiAgKTtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAuLi5hcmdzOiBbXG4gICAgICAoXG4gICAgICAgIHwgRGF0ZXRpbWVTb3VyY2VcbiAgICAgICAgfCBudW1iZXJcbiAgICAgICAgfCBiaWdpbnRcbiAgICAgICAgfCBEYXRlXG4gICAgICAgIHwgRGF0ZXRpbWVMaWtlXG4gICAgICAgIHwgdW5kZWZpbmVkXG4gICAgICApPyxcbiAgICBdIHwgW1xuICAgICAgbnVtYmVyLFxuICAgICAgbnVtYmVyLFxuICAgICAgKG51bWJlciB8IHVuZGVmaW5lZCk/LFxuICAgICAgKG51bWJlciB8IHVuZGVmaW5lZCk/LFxuICAgICAgKG51bWJlciB8IHVuZGVmaW5lZCk/LFxuICAgICAgKG51bWJlciB8IHVuZGVmaW5lZCk/LFxuICAgICAgKG51bWJlciB8IHVuZGVmaW5lZCk/LFxuICAgICAgKG51bWJlciB8IHVuZGVmaW5lZCk/LFxuICAgICAgKG51bWJlciB8IHVuZGVmaW5lZCk/LFxuICAgIF1cbiAgKSB7XG4gICAgc3VwZXIoKTtcblxuICAgIGlmIChhcmdzWzBdID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGNvbnN0IG1zVGltZSA9IHRvQmlnSW50KHN1cGVyLmdldFRpbWUoKSk7XG4gICAgICB0aGlzLl9uYW5vc2Vjb25kcyA9IG1zVGltZSA9PT0gbnVsbFxuICAgICAgICA/IE5hTlxuICAgICAgICA6IHRoaXMucHJvY2Vzc05zVGltZShtc1RpbWUgKiBOQU5PU0VDT05EU19QRVJfTUlMTElTRUNPTkRfQklHKTtcbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICBjb25zdCB2ID0gYXJnc1swXSE7XG4gICAgICBsZXQgbnNUaW1lOiBiaWdpbnQgfCB1bmRlZmluZWQ7XG5cbiAgICAgIGlmIChBcnJheS5pc0FycmF5KHYpKSB7XG4gICAgICAgIGNvbnN0IHMgPSB0b0JpZ0ludCh2WzBdKTtcbiAgICAgICAgY29uc3QgbnMgPSB0b0JpZ0ludCh2WzFdKTtcblxuICAgICAgICBpZiAocyAhPT0gbnVsbCAmJiBucyAhPT0gbnVsbCkge1xuICAgICAgICAgIG5zVGltZSA9IHMgKiBOQU5PU0VDT05EU19QRVJfU0VDT05EX0JJRyArIG5zO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0eXBlb2YgdiA9PT0gXCJvYmplY3RcIlxuICAgICAgICAmJiB2XG4gICAgICAgICYmIFwic2Vjb25kc1wiIGluIHZcbiAgICAgICAgJiYgXCJuYW5vc2Vjb25kc1wiIGluIHZcbiAgICAgICkge1xuICAgICAgICBjb25zdCBzID0gdG9CaWdJbnQodi5zZWNvbmRzKTtcbiAgICAgICAgY29uc3QgbnMgPSB0b0JpZ0ludCh2Lm5hbm9zZWNvbmRzKTtcblxuICAgICAgICBpZiAocyAhPT0gbnVsbCAmJiBucyAhPT0gbnVsbCkge1xuICAgICAgICAgIG5zVGltZSA9IHMgKiBOQU5PU0VDT05EU19QRVJfU0VDT05EX0JJRyArIG5zO1xuICAgICAgICB9XG4gICAgICB9IGVsc2UgaWYgKFxuICAgICAgICB0eXBlb2YgdiA9PT0gXCJzdHJpbmdcIlxuICAgICAgICB8fCB0eXBlb2YgdiA9PT0gXCJudW1iZXJcIlxuICAgICAgICB8fCB2IGluc3RhbmNlb2YgRGF0ZVxuICAgICAgKSB7XG4gICAgICAgIGNvbnN0IG1zVGltZSA9IHRvQmlnSW50KFxuICAgICAgICAgIHR5cGVvZiB2ID09PSBcInN0cmluZ1wiXG4gICAgICAgICAgICA/IERhdGUucGFyc2UodilcbiAgICAgICAgICAgIDogdHlwZW9mIHYgPT09IFwibnVtYmVyXCJcbiAgICAgICAgICAgID8gdlxuICAgICAgICAgICAgOiB2LmdldFRpbWUoKSxcbiAgICAgICAgKTtcblxuICAgICAgICBpZiAobXNUaW1lICE9PSBudWxsKSB7XG4gICAgICAgICAgbnNUaW1lID0gbXNUaW1lICogTkFOT1NFQ09ORFNfUEVSX01JTExJU0VDT05EX0JJRztcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgbnNUaW1lID0gdjtcbiAgICAgIH1cblxuICAgICAgdGhpcy5fbmFub3NlY29uZHMgPSB0aGlzLnByb2Nlc3NOc1RpbWUobnNUaW1lKTtcbiAgICB9IGVsc2UgaWYgKFxuICAgICAgdHlwZW9mIGFyZ3NbMF0gPT09IFwibnVtYmVyXCJcbiAgICAgICYmIHR5cGVvZiBhcmdzWzFdID09PSBcIm51bWJlclwiXG4gICAgICAmJiAoKCkgPT4ge1xuICAgICAgICBmb3IgKGxldCBpID0gOCwgcmVxdWlyZWQgPSBmYWxzZTsgaSA+PSAyOyBpLS0pIHtcbiAgICAgICAgICBpZiAodHlwZW9mIGFyZ3NbaV0gPT09IFwibnVtYmVyXCIpIHtcbiAgICAgICAgICAgIHJlcXVpcmVkID0gdHJ1ZTtcbiAgICAgICAgICB9IGVsc2UgaWYgKGFyZ3NbaV0gPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgaWYgKHJlcXVpcmVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgfSkoKVxuICAgICkge1xuICAgICAgY29uc3QgcGFydHMgPSBhcmdzLmZpbHRlcihhID0+IGEgIT09IHVuZGVmaW5lZCkgYXMgW2FueSwgYW55XTtcbiAgICAgIGNvbnN0IHRpbWUgPSBEYXRlLlVUQyguLi5wYXJ0cyk7XG4gICAgICBjb25zdCBuc1RpbWVPZk1zID0gdG9CaWdJbnQodGltZSk7XG4gICAgICBjb25zdCBuc1RpbWVPZlVzID0gdG9CaWdJbnQoYXJnc1s3XSA/PyAwKTtcbiAgICAgIGNvbnN0IG5zVGltZU9mTnMgPSB0b0JpZ0ludChhcmdzWzhdID8/IDApO1xuICAgICAgY29uc3QgbnNUaW1lID1cbiAgICAgICAgbnNUaW1lT2ZNcyA9PT0gbnVsbCB8fCBuc1RpbWVPZlVzID09PSBudWxsIHx8IG5zVGltZU9mTnMgPT09IG51bGxcbiAgICAgICAgICA/IG51bGxcbiAgICAgICAgICA6IChuc1RpbWVPZk1zICogTkFOT1NFQ09ORFNfUEVSX01JTExJU0VDT05EX0JJRylcbiAgICAgICAgICAgICsgKG5zVGltZU9mVXMgKiBOQU5PU0VDT05EU19QRVJfTUlDUk9TRUNPTkRfQklHKVxuICAgICAgICAgICAgKyBuc1RpbWVPZk5zO1xuXG4gICAgICB0aGlzLl9uYW5vc2Vjb25kcyA9IHRoaXMucHJvY2Vzc05zVGltZShuc1RpbWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aHJvdyBuZXcgU3VycmVhbFZhbHVlRXJyb3IoXG4gICAgICAgIFwiRGF0ZSwgQmlnSW50LCBBcnJheSBvciBPYmplY3QgYXJndW1lbnRzXCIsXG4gICAgICAgIFN0cmluZyhhcmdzKSxcbiAgICAgICk7XG4gICAgfVxuXG4gICAgZGVmaW5lQXNEYXRldGltZSh0aGlzKTtcbiAgfVxuXG4gIGdldCBzZWNvbmRzKCk6IG51bWJlciB7XG4gICAgbGV0IHMgPSBNYXRoLnRydW5jKHN1cGVyLmdldFRpbWUoKSAvIE1JTExJU0VDT05EU19QRVJfU0VDT05EKTtcblxuICAgIGlmIChzIDw9IDAgJiYgdGhpcy5fbmFub3NlY29uZHMgPiAwKSB7XG4gICAgICBzIC09IDE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHM7XG4gIH1cblxuICBzZXQgc2Vjb25kcyhzOiBudW1iZXIpIHtcbiAgICB0aGlzLnNldENvbXBhY3QoW3MsIHRoaXMubmFub3NlY29uZHNdKTtcbiAgfVxuXG4gIGdldCBuYW5vc2Vjb25kcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLl9uYW5vc2Vjb25kcztcbiAgfVxuXG4gIHNldCBuYW5vc2Vjb25kcyhuczogbnVtYmVyKSB7XG4gICAgdGhpcy5zZXRDb21wYWN0KFt0aGlzLnNlY29uZHMsIG5zXSk7XG4gIH1cblxuICBnZXRDb21wYWN0KCk6IFtzZWNvbmRzOiBudW1iZXIsIG5hbm9zZWNvbmRzOiBudW1iZXJdIHtcbiAgICByZXR1cm4gW3RoaXMuc2Vjb25kcywgdGhpcy5uYW5vc2Vjb25kc107XG4gIH1cblxuICBzZXRDb21wYWN0KGNvbXBhY3Q6IHJlYWRvbmx5IFtzZWNvbmRzOiBudW1iZXIsIG5hbm9zZWNvbmRzOiBudW1iZXJdKTogbnVtYmVyIHtcbiAgICBjb25zdCBzID0gdG9CaWdJbnQoY29tcGFjdFswXSk7XG4gICAgY29uc3QgbnMgPSB0b0JpZ0ludChjb21wYWN0WzFdKTtcbiAgICBjb25zdCBuc1RpbWUgPSBzICE9PSBudWxsICYmIG5zICE9PSBudWxsXG4gICAgICA/IHMgKiBOQU5PU0VDT05EU19QRVJfU0VDT05EX0JJRyArIG5zXG4gICAgICA6IG51bGw7XG4gICAgdGhpcy5fbmFub3NlY29uZHMgPSB0aGlzLnByb2Nlc3NOc1RpbWUobnNUaW1lKTtcblxuICAgIHJldHVybiBzdXBlci5nZXRUaW1lKCk7XG4gIH1cblxuICBnZXRNaWNyb3NlY29uZHMoKTogbnVtYmVyIHtcbiAgICByZXR1cm4gTWF0aC50cnVuYyh0aGlzLm5hbm9zZWNvbmRzIC8gMWUzKSAlIDFlMztcbiAgfVxuXG4gIHNldE1pY3Jvc2Vjb25kcyh1czogbnVtYmVyKTogbnVtYmVyIHtcbiAgICB0aGlzLm5hbm9zZWNvbmRzID1cbiAgICAgIC8vIFx1MzBERVx1MzBBNFx1MzBBRlx1MzBFRFx1NzlEMiAzIFx1Njg0MVx1NTIwNlx1MzA5MiAwIFx1MzA2Qlx1MzA1OVx1MzA4Qlx1MzAwMlxuICAgICAgdGhpcy5uYW5vc2Vjb25kcyAtIHRoaXMuZ2V0TWljcm9zZWNvbmRzKCkgKiAxZTNcbiAgICAgIC8vIFx1NTdDQlx1MzA4MVx1NzZGNFx1MzA1OVx1MzAwMlxuICAgICAgKyB1cyAqIDFlMztcblxuICAgIHJldHVybiB0aGlzLmdldFRpbWUoKTtcbiAgfVxuXG4gIGdldFVUQ01pY3Jvc2Vjb25kcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLmdldE1pY3Jvc2Vjb25kcygpO1xuICB9XG5cbiAgc2V0VVRDTWljcm9zZWNvbmRzKHVzOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNldE1pY3Jvc2Vjb25kcyh1cyk7XG4gIH1cblxuICBnZXROYW5vc2Vjb25kcygpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLm5hbm9zZWNvbmRzICUgMWUzO1xuICB9XG5cbiAgc2V0TmFub3NlY29uZHMobnM6IG51bWJlcik6IG51bWJlciB7XG4gICAgdGhpcy5uYW5vc2Vjb25kcyA9XG4gICAgICAvLyBcdTMwQ0FcdTMwQ0VcdTc5RDIgMyBcdTY4NDFcdTUyMDZcdTMwOTIgMCBcdTMwNkJcdTMwNTlcdTMwOEJcdTMwMDJcbiAgICAgIHRoaXMubmFub3NlY29uZHMgLSB0aGlzLmdldE5hbm9zZWNvbmRzKClcbiAgICAgIC8vIFx1NTdDQlx1MzA4MVx1NzZGNFx1MzA1OVx1MzAwMlxuICAgICAgKyBucztcblxuICAgIHJldHVybiB0aGlzLmdldFRpbWUoKTtcbiAgfVxuXG4gIGdldFVUQ05hbm9zZWNvbmRzKCk6IG51bWJlciB7XG4gICAgcmV0dXJuIHRoaXMuZ2V0TmFub3NlY29uZHMoKTtcbiAgfVxuXG4gIHNldFVUQ05hbm9zZWNvbmRzKG5zOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNldE5hbm9zZWNvbmRzKG5zKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHNldFRpbWUodGltZTogbnVtYmVyIHwgYmlnaW50KTogbnVtYmVyIHtcbiAgICBpZiAodHlwZW9mIHRpbWUgPT09IFwibnVtYmVyXCIpIHtcbiAgICAgIGNvbnN0IG1zVGltZSA9IHN1cGVyLnNldFRpbWUodGltZSk7XG4gICAgICBjb25zdCBucyA9IG1zVGltZSAlIDFlMyAqIDFlNjtcbiAgICAgIHRoaXMuX25hbm9zZWNvbmRzID0gbXNUaW1lIDwgMCAmJiBucyA+IDBcbiAgICAgICAgPyBOQU5PU0VDT05EU19QRVJfU0VDT05EIC0gbnNcbiAgICAgICAgOiBucztcbiAgICB9IGVsc2Uge1xuICAgICAgdGhpcy5fbmFub3NlY29uZHMgPSB0aGlzLnByb2Nlc3NOc1RpbWUodGltZSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHN1cGVyLmdldFRpbWUoKTtcbiAgfVxuXG4gIG92ZXJyaWRlIHNldE1pbGxpc2Vjb25kcyhtczogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCB0aW1lID0gc3VwZXIuc2V0TWlsbGlzZWNvbmRzKG1zKTtcblxuICAgIHJldHVybiB0aGlzLnNldENvbXBhY3QoW1xuICAgICAgdGltZSAvIDFlMyxcbiAgICAgIHRpbWUgJSAxZTMgKiAxZTYgKyB0aGlzLm5hbm9zZWNvbmRzICUgMWU2LFxuICAgIF0pO1xuICB9XG5cbiAgb3ZlcnJpZGUgc2V0VVRDTWlsbGlzZWNvbmRzKG1zOiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiB0aGlzLnNldE1pbGxpc2Vjb25kcyhtcyk7XG4gIH1cblxuICBvdmVycmlkZSB0b0lTT1N0cmluZygpOiBzdHJpbmcge1xuICAgIHJldHVybiB0b0lTT1N0cmluZyh0aGlzLCB0aGlzLm5hbm9zZWNvbmRzKTtcbiAgfVxuXG4gIHRvRGF0ZSgpOiBEYXRlIHtcbiAgICByZXR1cm4gbmV3IERhdGUodGhpcy5zZWNvbmRzICogMWUzICsgdGhpcy5uYW5vc2Vjb25kcyAvIDFlNik7XG4gIH1cblxuICB0b0NCT1IoKTogW1xuICAgIHRhZzogdHlwZW9mIENCT1JfVEFHX0RBVEVUSU1FLFxuICAgIHZhbHVlOiBbc2Vjb25kczogbnVtYmVyLCBuYW5vc2Vjb25kczogbnVtYmVyXSxcbiAgXSB7XG4gICAgcmV0dXJuIFtcbiAgICAgIENCT1JfVEFHX0RBVEVUSU1FLFxuICAgICAgW3RoaXMuc2Vjb25kcywgdGhpcy5uYW5vc2Vjb25kc10sXG4gICAgXTtcbiAgfVxuXG4gIG92ZXJyaWRlIHRvSlNPTigpOiBzdHJpbmcge1xuICAgIC8vIHN1cGVyLnRvSlNPTigpIFx1MzA2Rlx1NzEyMVx1NTJCOVx1MzA2QVx1NjVFNVx1NEVEOFx1MzA5MiBudWxsIFx1MzA2Qlx1MzA1N1x1MzA2Nlx1MzA1N1x1MzA3RVx1MzA0Nlx1MzA0Q1x1MzAwMVx1MzA1M1x1MzA1M1x1MzA2N1x1MzA2Rlx1MzBBOFx1MzBFOVx1MzBGQ1x1MzA5Mlx1NjI5NVx1MzA1Mlx1MzA4Qlx1MzA4OFx1MzA0Nlx1MzA2Qlx1MzA1OVx1MzA4Qlx1MzAwMlxuICAgIHJldHVybiB0aGlzLnRvSVNPU3RyaW5nKCk7XG4gIH1cblxuICB0b1N1cnFsKCk6IHN0cmluZyB7XG4gICAgY29uc3QgaXNvID0gdGhpcy50b0lTT1N0cmluZygpO1xuXG4gICAgLy8gVE9ETyh0YWkta3VuKTogU3VycmVhbERCIFx1MzA2Rlx1NjJFMVx1NUYzNVx1MzA1NVx1MzA4Q1x1MzA1Rlx1NUU3NFx1MzA5Mlx1NjI3MVx1MzA0OFx1MzA2QVx1MzA0NFx1MzA1Rlx1MzA4MVx1MzAwMVx1MzA1M1x1MzA1M1x1MzA2N1x1MzBBOFx1MzBFOVx1MzBGQ1x1MzA5Mlx1NjI5NVx1MzA1Mlx1MzA4Qlx1NUZDNVx1ODk4MVx1MzA0Q1x1MzA0Mlx1MzA4Qlx1MzAwMlxuICAgIC8vIGlmIChpc29bMF0gPT09IFwiK1wiIHx8IGlzb1swXSA9PT0gXCItXCIpIHtcbiAgICAvLyAgIHRocm93IG5ldyBOdW1iZXJSYW5nZUVycm9yKCk7XG4gICAgLy8gfVxuXG4gICAgcmV0dXJuIFwiZFwiICsgcXVvdGVTdHIoaXNvKTtcbiAgfVxuXG4gIHRvUGxhaW5PYmplY3QoKToge1xuICAgIHNlY29uZHM6IG51bWJlcjtcbiAgICBuYW5vc2Vjb25kczogbnVtYmVyO1xuICB9IHtcbiAgICByZXR1cm4ge1xuICAgICAgc2Vjb25kczogdGhpcy5zZWNvbmRzLFxuICAgICAgbmFub3NlY29uZHM6IHRoaXMubmFub3NlY29uZHMsXG4gICAgfTtcbiAgfVxuXG4gIGNsb25lKCk6IHRoaXMge1xuICAgIGNvbnN0IFRoaXMgPSB0aGlzLmNvbnN0cnVjdG9yIGFzIHR5cGVvZiBEYXRldGltZTtcblxuICAgIHJldHVybiBuZXcgVGhpcyh0aGlzKSBhcyB0aGlzO1xuICB9XG59XG4iXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQTtBQUFBO0FBQUE7QUFBQTtBQUFBO0FBQUEsaUNB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