@lukaskj/ts-utils 1.1.0 → 1.2.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cjs/cache/index.cjs +182 -0
- package/dist/cjs/colors/index.cjs +115 -0
- package/dist/cjs/index.cjs +270 -0
- package/dist/cjs/neverthrow/index.cjs +69 -0
- package/dist/esm/cache/index.mjs +137 -0
- package/dist/esm/colors/index.mjs +72 -0
- package/dist/esm/index.mjs +217 -0
- package/dist/esm/neverthrow/index.mjs +24 -0
- package/dist/{colors → types/colors}/index.d.ts +6 -0
- package/package.json +20 -36
- package/dist/cache/index.cjs +0 -182
- package/dist/cache/index.mjs +0 -137
- package/dist/colors/index.cjs +0 -109
- package/dist/colors/index.mjs +0 -66
- package/dist/index.cjs +0 -270
- package/dist/index.mjs +0 -217
- package/dist/neverthrow/index.cjs +0 -69
- package/dist/neverthrow/index.mjs +0 -24
- /package/dist/{cache → types/cache}/cacheService.d.ts +0 -0
- /package/dist/{cache → types/cache}/constants.d.ts +0 -0
- /package/dist/{cache → types/cache}/index.d.ts +0 -0
- /package/dist/{cache → types/cache}/internal/types.d.ts +0 -0
- /package/dist/{cache → types/cache}/types.d.ts +0 -0
- /package/dist/{index.d.ts → types/index.d.ts} +0 -0
- /package/dist/{neverthrow → types/neverthrow}/index.d.ts +0 -0
- /package/dist/{neverthrow → types/neverthrow}/tryCatch.d.ts +0 -0
- /package/dist/{types.d.ts → types/types.d.ts} +0 -0
- /package/dist/{utils → types/utils}/chunksToLines.d.ts +0 -0
- /package/dist/{utils → types/utils}/isCallable.d.ts +0 -0
- /package/dist/{utils → types/utils}/isNullOrUndefined.d.ts +0 -0
- /package/dist/{utils → types/utils}/isObject.d.ts +0 -0
- /package/dist/{utils → types/utils}/isPrimitive.d.ts +0 -0
- /package/dist/{utils → types/utils}/isPromise.d.ts +0 -0
- /package/dist/{utils → types/utils}/jsonParser.d.ts +0 -0
- /package/dist/{utils → types/utils}/randomString.d.ts +0 -0
- /package/dist/{utils → types/utils}/readStdinAsync.d.ts +0 -0
- /package/dist/{utils → types/utils}/sleep.d.ts +0 -0
|
@@ -0,0 +1,182 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __toESM = (mod, isNodeMode, target) => {
|
|
8
|
+
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
9
|
+
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
10
|
+
for (let key of __getOwnPropNames(mod))
|
|
11
|
+
if (!__hasOwnProp.call(to, key))
|
|
12
|
+
__defProp(to, key, {
|
|
13
|
+
get: () => mod[key],
|
|
14
|
+
enumerable: true
|
|
15
|
+
});
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
19
|
+
var __toCommonJS = (from) => {
|
|
20
|
+
var entry = __moduleCache.get(from), desc;
|
|
21
|
+
if (entry)
|
|
22
|
+
return entry;
|
|
23
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
24
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
25
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
26
|
+
get: () => from[key],
|
|
27
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
28
|
+
}));
|
|
29
|
+
__moduleCache.set(from, entry);
|
|
30
|
+
return entry;
|
|
31
|
+
};
|
|
32
|
+
var __export = (target, all) => {
|
|
33
|
+
for (var name in all)
|
|
34
|
+
__defProp(target, name, {
|
|
35
|
+
get: all[name],
|
|
36
|
+
enumerable: true,
|
|
37
|
+
configurable: true,
|
|
38
|
+
set: (newValue) => all[name] = () => newValue
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
// src/cache/index.ts
|
|
43
|
+
var exports_cache = {};
|
|
44
|
+
__export(exports_cache, {
|
|
45
|
+
Cache: () => Cache,
|
|
46
|
+
CACHE_TTL_NEVER_EXPIRE: () => CACHE_TTL_NEVER_EXPIRE
|
|
47
|
+
});
|
|
48
|
+
module.exports = __toCommonJS(exports_cache);
|
|
49
|
+
|
|
50
|
+
// src/cache/cacheService.ts
|
|
51
|
+
var import_types = require("node:util/types");
|
|
52
|
+
|
|
53
|
+
// src/utils/isCallable.ts
|
|
54
|
+
function isCallable(value) {
|
|
55
|
+
return typeof value === "function";
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// src/cache/cacheService.ts
|
|
59
|
+
var defaultCacheOptions = {
|
|
60
|
+
expirationThresholdMs: 0,
|
|
61
|
+
ttlMs: 60 * 60 * 1000
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
class Cache {
|
|
65
|
+
inMemoryCache = new Map;
|
|
66
|
+
options;
|
|
67
|
+
adapter;
|
|
68
|
+
constructor(adapter, defaultOptions) {
|
|
69
|
+
const options = adapter && !("getValue" in adapter) ? adapter : defaultOptions;
|
|
70
|
+
if (adapter && "getValue" in adapter && "setValue" in adapter) {
|
|
71
|
+
this.adapter = adapter;
|
|
72
|
+
}
|
|
73
|
+
this.options = {
|
|
74
|
+
...defaultCacheOptions,
|
|
75
|
+
...options
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
async getFromAdapter(cacheKey) {
|
|
79
|
+
if (!this.adapter) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
return this.adapter.getValue(cacheKey);
|
|
83
|
+
}
|
|
84
|
+
async saveToAdapter(cacheKey, value) {
|
|
85
|
+
if (!this.adapter) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
return this.adapter.setValue(cacheKey, value);
|
|
89
|
+
}
|
|
90
|
+
async get(cacheKey, valueLoader, options = {}) {
|
|
91
|
+
const mergedOptions = this.mergeOptions(options);
|
|
92
|
+
const cachedValue = this.tryGetFromMemory(cacheKey);
|
|
93
|
+
if (cachedValue !== undefined) {
|
|
94
|
+
return cachedValue;
|
|
95
|
+
}
|
|
96
|
+
const freshValue = await this.tryGetFromValueLoader(valueLoader);
|
|
97
|
+
if (freshValue !== undefined) {
|
|
98
|
+
await this.cacheValue(cacheKey, freshValue, mergedOptions);
|
|
99
|
+
return freshValue;
|
|
100
|
+
}
|
|
101
|
+
const adapterValue = await this.tryGetFromAdapter(cacheKey);
|
|
102
|
+
if (adapterValue !== undefined) {
|
|
103
|
+
await this.cacheValue(cacheKey, adapterValue, mergedOptions);
|
|
104
|
+
return adapterValue;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
mergeOptions(options) {
|
|
108
|
+
return {
|
|
109
|
+
ttlMs: this.options.ttlMs,
|
|
110
|
+
expirationThresholdMs: this.options.expirationThresholdMs,
|
|
111
|
+
...options
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
tryGetFromMemory(cacheKey) {
|
|
115
|
+
const cached = this.inMemoryCache.get(cacheKey);
|
|
116
|
+
if (cached && !this.isExpired(cached.metadata)) {
|
|
117
|
+
return cached.data;
|
|
118
|
+
}
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
async tryGetFromAdapter(cacheKey) {
|
|
122
|
+
const cached = await this.getFromAdapter(cacheKey);
|
|
123
|
+
if (cached && !this.isExpired(cached.metadata)) {
|
|
124
|
+
this.inMemoryCache.set(cacheKey, cached);
|
|
125
|
+
return cached.data;
|
|
126
|
+
}
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
async tryGetFromValueLoader(valueLoader) {
|
|
130
|
+
if (valueLoader === undefined) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
if (isCallable(valueLoader)) {
|
|
134
|
+
return await valueLoader();
|
|
135
|
+
}
|
|
136
|
+
if (import_types.isPromise(valueLoader)) {
|
|
137
|
+
return await valueLoader;
|
|
138
|
+
}
|
|
139
|
+
return valueLoader;
|
|
140
|
+
}
|
|
141
|
+
async cacheValue(cacheKey, value, options) {
|
|
142
|
+
const cacheData = this.createCacheEntry(value, options);
|
|
143
|
+
await this.saveToAdapter(cacheKey, cacheData);
|
|
144
|
+
this.inMemoryCache.set(cacheKey, cacheData);
|
|
145
|
+
}
|
|
146
|
+
createCacheEntry(value, options) {
|
|
147
|
+
const now = Date.now();
|
|
148
|
+
let expiresAt;
|
|
149
|
+
if (options.ttlMs < 0) {
|
|
150
|
+
expiresAt = -1;
|
|
151
|
+
} else {
|
|
152
|
+
expiresAt = now + options.ttlMs - options.expirationThresholdMs;
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
data: value,
|
|
156
|
+
metadata: {
|
|
157
|
+
createdAt: now,
|
|
158
|
+
ttlMs: options.ttlMs,
|
|
159
|
+
expirationThresholdMs: options.expirationThresholdMs,
|
|
160
|
+
expiresAt
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
isExpired(metadata) {
|
|
165
|
+
if (!metadata) {
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
if (metadata.expiresAt < 0) {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
const expirationTime = metadata.expiresAt ?? (metadata.createdAt && metadata.ttlMs ? metadata.createdAt + metadata.ttlMs : undefined);
|
|
172
|
+
if (expirationTime === undefined) {
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
return Date.now() > expirationTime;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// src/cache/constants.ts
|
|
179
|
+
var CACHE_TTL_NEVER_EXPIRE = -1;
|
|
180
|
+
|
|
181
|
+
//# debugId=F6FFA1F34A10A7B264756E2164756E21
|
|
182
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2NhY2hlL2NhY2hlU2VydmljZS50cyIsICIuLi8uLi9zcmMvdXRpbHMvaXNDYWxsYWJsZS50cyIsICIuLi8uLi9zcmMvY2FjaGUvY29uc3RhbnRzLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgImltcG9ydCB7IGlzUHJvbWlzZSB9IGZyb20gXCJub2RlOnV0aWwvdHlwZXNcIjtcbmltcG9ydCB7IGlzQ2FsbGFibGUgfSBmcm9tIFwiLi4vdXRpbHMvaXNDYWxsYWJsZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBDYWNoZU1ldGFkYXRhT3B0aW9ucywgQ2FjaGVPcHRpb25zLCBDYWNoZVdpdGhNZXRhZGF0YSwgVmFsdWVMb2FkZXIgfSBmcm9tIFwiLi9pbnRlcm5hbC90eXBlcy50c1wiO1xuaW1wb3J0IHR5cGUgeyBDYWNoZU1ldGFkYXRhLCBJQ2FjaGVBZGFwdGVyIH0gZnJvbSBcIi4vdHlwZXMudHNcIjtcblxuY29uc3QgZGVmYXVsdENhY2hlT3B0aW9uczogQ2FjaGVPcHRpb25zID0ge1xuICBleHBpcmF0aW9uVGhyZXNob2xkTXM6IDAsXG4gIHR0bE1zOiA2MCAqIDYwICogMTAwMCxcbn07XG5cbmV4cG9ydCBjbGFzcyBDYWNoZTxUQWRhcHRlciBleHRlbmRzIElDYWNoZUFkYXB0ZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+IHtcbiAgcHJpdmF0ZSBpbk1lbW9yeUNhY2hlOiBNYXA8c3RyaW5nLCBDYWNoZVdpdGhNZXRhZGF0YT4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogQ2FjaGVPcHRpb25zO1xuICBwcml2YXRlIHJlYWRvbmx5IGFkYXB0ZXI/OiBUQWRhcHRlcjtcblxuICBjb25zdHJ1Y3RvcihkZWZhdWx0T3B0aW9ucz86IFBhcnRpYWw8Q2FjaGVPcHRpb25zPik7XG4gIGNvbnN0cnVjdG9yKGFkYXB0ZXI/OiBUQWRhcHRlciwgZGVmYXVsdE9wdGlvbnM/OiBQYXJ0aWFsPENhY2hlT3B0aW9ucz4pO1xuICBjb25zdHJ1Y3RvcihhZGFwdGVyPzogVEFkYXB0ZXIgfCBQYXJ0aWFsPENhY2hlT3B0aW9ucz4sIGRlZmF1bHRPcHRpb25zPzogUGFydGlhbDxDYWNoZU9wdGlvbnM+KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGFkYXB0ZXIgJiYgIShcImdldFZhbHVlXCIgaW4gYWRhcHRlcikgPyAoYWRhcHRlciBhcyBQYXJ0aWFsPENhY2hlT3B0aW9ucz4pIDogZGVmYXVsdE9wdGlvbnM7XG4gICAgaWYgKGFkYXB0ZXIgJiYgXCJnZXRWYWx1ZVwiIGluIGFkYXB0ZXIgJiYgXCJzZXRWYWx1ZVwiIGluIGFkYXB0ZXIpIHtcbiAgICAgIHRoaXMuYWRhcHRlciA9IGFkYXB0ZXIgYXMgVEFkYXB0ZXI7XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgLi4uZGVmYXVsdENhY2hlT3B0aW9ucyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RnJvbUFkYXB0ZXI8VD4oY2FjaGVLZXk6IHN0cmluZyk6IFByb21pc2U8VCB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghdGhpcy5hZGFwdGVyKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuZ2V0VmFsdWUoY2FjaGVLZXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzYXZlVG9BZGFwdGVyPFQ+KGNhY2hlS2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmFkYXB0ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLnNldFZhbHVlPFQ+KGNhY2hlS2V5LCB2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0PFQ+KFxuICAgIGNhY2hlS2V5OiBzdHJpbmcsXG4gICAgdmFsdWVMb2FkZXI/OiBWYWx1ZUxvYWRlcjxUPixcbiAgICBvcHRpb25zOiBQYXJ0aWFsPENhY2hlTWV0YWRhdGFPcHRpb25zPiA9IHt9LFxuICApOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBtZXJnZWRPcHRpb25zID0gdGhpcy5tZXJnZU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAvLyBUcnkgaW4tbWVtb3J5IGNhY2hlIGZpcnN0XG4gICAgY29uc3QgY2FjaGVkVmFsdWUgPSB0aGlzLnRyeUdldEZyb21NZW1vcnk8VD4oY2FjaGVLZXkpO1xuICAgIGlmIChjYWNoZWRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkVmFsdWU7XG4gICAgfVxuXG4gICAgLy8gTG9hZCBmcmVzaCB2YWx1ZSBmcm9tIGxvYWRlciBmdW5jdGlvbiBmaXJzdFxuICAgIGNvbnN0IGZyZXNoVmFsdWUgPSBhd2FpdCB0aGlzLnRyeUdldEZyb21WYWx1ZUxvYWRlcih2YWx1ZUxvYWRlcik7XG4gICAgaWYgKGZyZXNoVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXdhaXQgdGhpcy5jYWNoZVZhbHVlKGNhY2hlS2V5LCBmcmVzaFZhbHVlLCBtZXJnZWRPcHRpb25zKTtcblxuICAgICAgcmV0dXJuIGZyZXNoVmFsdWU7XG4gICAgfVxuXG4gICAgLy8gVHJ5IGFkYXB0ZXIgY2FjaGUgc2Vjb25kXG4gICAgY29uc3QgYWRhcHRlclZhbHVlID0gYXdhaXQgdGhpcy50cnlHZXRGcm9tQWRhcHRlcjxUPihjYWNoZUtleSk7XG4gICAgaWYgKGFkYXB0ZXJWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhd2FpdCB0aGlzLmNhY2hlVmFsdWUoY2FjaGVLZXksIGFkYXB0ZXJWYWx1ZSwgbWVyZ2VkT3B0aW9ucyk7XG5cbiAgICAgIHJldHVybiBhZGFwdGVyVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtZXJnZU9wdGlvbnMob3B0aW9uczogUGFydGlhbDxDYWNoZU1ldGFkYXRhT3B0aW9ucz4pOiBDYWNoZU1ldGFkYXRhT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR0bE1zOiB0aGlzLm9wdGlvbnMudHRsTXMsXG4gICAgICBleHBpcmF0aW9uVGhyZXNob2xkTXM6IHRoaXMub3B0aW9ucy5leHBpcmF0aW9uVGhyZXNob2xkTXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHRyeUdldEZyb21NZW1vcnk8VD4oY2FjaGVLZXk6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuaW5NZW1vcnlDYWNoZS5nZXQoY2FjaGVLZXkpO1xuXG4gICAgaWYgKGNhY2hlZCAmJiAhdGhpcy5pc0V4cGlyZWQoY2FjaGVkLm1ldGFkYXRhKSkge1xuICAgICAgcmV0dXJuIGNhY2hlZC5kYXRhIGFzIFQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdHJ5R2V0RnJvbUFkYXB0ZXI8VD4oY2FjaGVLZXk6IHN0cmluZyk6IFByb21pc2U8VCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGNhY2hlZCA9IGF3YWl0IHRoaXMuZ2V0RnJvbUFkYXB0ZXI8Q2FjaGVXaXRoTWV0YWRhdGE8VD4+KGNhY2hlS2V5KTtcblxuICAgIGlmIChjYWNoZWQgJiYgIXRoaXMuaXNFeHBpcmVkKGNhY2hlZC5tZXRhZGF0YSkpIHtcbiAgICAgIHRoaXMuaW5NZW1vcnlDYWNoZS5zZXQoY2FjaGVLZXksIGNhY2hlZCk7XG4gICAgICByZXR1cm4gY2FjaGVkLmRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdHJ5R2V0RnJvbVZhbHVlTG9hZGVyPFQ+KHZhbHVlTG9hZGVyPzogVmFsdWVMb2FkZXI8VD4pOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAodmFsdWVMb2FkZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoaXNDYWxsYWJsZSh2YWx1ZUxvYWRlcikpIHtcbiAgICAgIHJldHVybiBhd2FpdCB2YWx1ZUxvYWRlcigpO1xuICAgIH1cblxuICAgIGlmIChpc1Byb21pc2UodmFsdWVMb2FkZXIpKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdmFsdWVMb2FkZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlTG9hZGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjYWNoZVZhbHVlPFQ+KGNhY2hlS2V5OiBzdHJpbmcsIHZhbHVlOiBULCBvcHRpb25zOiBDYWNoZU1ldGFkYXRhT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNhY2hlRGF0YSA9IHRoaXMuY3JlYXRlQ2FjaGVFbnRyeSh2YWx1ZSwgb3B0aW9ucyk7XG5cbiAgICBhd2FpdCB0aGlzLnNhdmVUb0FkYXB0ZXIoY2FjaGVLZXksIGNhY2hlRGF0YSk7XG4gICAgdGhpcy5pbk1lbW9yeUNhY2hlLnNldChjYWNoZUtleSwgY2FjaGVEYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2FjaGVFbnRyeTxUPih2YWx1ZTogVCwgb3B0aW9uczogQ2FjaGVNZXRhZGF0YU9wdGlvbnMpOiBDYWNoZVdpdGhNZXRhZGF0YTxUPiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgZXhwaXJlc0F0OiBudW1iZXI7XG4gICAgaWYgKG9wdGlvbnMudHRsTXMgPCAwKSB7XG4gICAgICBleHBpcmVzQXQgPSAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwaXJlc0F0ID0gbm93ICsgb3B0aW9ucy50dGxNcyAtIG9wdGlvbnMuZXhwaXJhdGlvblRocmVzaG9sZE1zO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiB2YWx1ZSxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIGNyZWF0ZWRBdDogbm93LFxuICAgICAgICB0dGxNczogb3B0aW9ucy50dGxNcyxcbiAgICAgICAgZXhwaXJhdGlvblRocmVzaG9sZE1zOiBvcHRpb25zLmV4cGlyYXRpb25UaHJlc2hvbGRNcyxcbiAgICAgICAgZXhwaXJlc0F0LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpc0V4cGlyZWQobWV0YWRhdGE/OiBDYWNoZU1ldGFkYXRhKTogYm9vbGVhbiB7XG4gICAgaWYgKCFtZXRhZGF0YSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG1ldGFkYXRhLmV4cGlyZXNBdCA8IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBleHBpcmF0aW9uVGltZSA9XG4gICAgICBtZXRhZGF0YS5leHBpcmVzQXQgPz8gKG1ldGFkYXRhLmNyZWF0ZWRBdCAmJiBtZXRhZGF0YS50dGxNcyA/IG1ldGFkYXRhLmNyZWF0ZWRBdCArIG1ldGFkYXRhLnR0bE1zIDogdW5kZWZpbmVkKTtcblxuICAgIGlmIChleHBpcmF0aW9uVGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gRGF0ZS5ub3coKSA+IGV4cGlyYXRpb25UaW1lO1xuICB9XG59XG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiBpc0NhbGxhYmxlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBDYWxsYWJsZUZ1bmN0aW9uIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiO1xufVxuIiwKICAgICJleHBvcnQgY29uc3QgQ0FDSEVfVFRMX05FVkVSX0VYUElSRSA9IC0xO1xuIgogIF0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBMEIsSUFBMUI7OztBQ0FPLFNBQVMsVUFBVSxDQUFDLE9BQXVDO0FBQUEsRUFDaEUsT0FBTyxPQUFPLFVBQVU7QUFBQTs7O0FESTFCLElBQU0sc0JBQW9DO0FBQUEsRUFDeEMsdUJB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QWlCLE9BQU8sT0FBTztBQUFBLElBRXRELE1BQU0sS0FBSyxjQUFjLFVBQVUsU0FBUztBQUFBLElBQzVDLEtBQUssY0FBYyxJQUFJLFVBQVUsU0FBUztBQUFBO0FBQUEsRUFHcEMsZ0JBQW1CLENBQUMsT0FBVSxTQUFxRDtBQUFBLElBQ3pGLE1BQU0sTUFBTSxLQUFLLElBQUk7QUFBQSxJQUNyQixJQUFJO0FBQUEsSUFDSixJQUFJLFFBQVEsUUFBUSxHQUFHO0FBQUEsTUFDckIsWUFBWTtBQUFBLElBQ2QsRUFBTztBQUFBLE1BQ0wsWUFBWSxNQUFNLFFBQVEsUUFBUSxRQUFRO0FBQUE7QUFBQSxJQUc1QyxPQUFPO0FBQUEsTUFDTCxNQUFNO0FBQUEsTUFDTixVQUFVO0FBQUEsUUFDUixXQUFXO0FBQUEsUUFDWCxPQUFPLFFBQVE7QUFBQSxRQUNmLHVCQUF1QixRQUFRO0FBQUEsUUFDL0I7QUFBQSxNQUNGO0FBQUEsSUFDRjtBQUFBO0FBQUEsRUFHTSxTQUFTLENBQUMsVUFBbUM7QUFBQSxJQUNuRCxJQUFJLENBQUMsVUFBVTtBQUFBLE1BQ2IsT0FBTztBQUFBLElBQ1Q7QUFBQSxJQUVBLElBQUksU0FBUyxZQUFZLEdBQUc7QUFBQSxNQUMxQixPQUFPO0FBQUEsSUFDVDtBQUFBLElBRUEsTUFBTSxpQkFDSixTQUFTLGNBQWMsU0FBUyxhQUFhLFNBQVMsUUFBUSxTQUFTLFlBQVksU0FBUyxRQUFRO0FBQUEsSUFFdEcsSUFBSSxtQkFBbUIsV0FBVztBQUFBLE1BQ2hDLE9BQU87QUFBQSxJQUNUO0FBQUEsSUFFQSxPQUFPLEtBQUssSUFBSSxJQUFJO0FBQUE7QUFFeEI7O0FFcktPLElBQU0seUJBQXlCOyIsCiAgImRlYnVnSWQiOiAiRjZGRkExRjM0QTEwQTdCMjY0NzU2RTIxNjQ3NTZFMjEiLAogICJuYW1lcyI6IFtdCn0=
|
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __toESM = (mod, isNodeMode, target) => {
|
|
8
|
+
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
9
|
+
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
10
|
+
for (let key of __getOwnPropNames(mod))
|
|
11
|
+
if (!__hasOwnProp.call(to, key))
|
|
12
|
+
__defProp(to, key, {
|
|
13
|
+
get: () => mod[key],
|
|
14
|
+
enumerable: true
|
|
15
|
+
});
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
19
|
+
var __toCommonJS = (from) => {
|
|
20
|
+
var entry = __moduleCache.get(from), desc;
|
|
21
|
+
if (entry)
|
|
22
|
+
return entry;
|
|
23
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
24
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
25
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
26
|
+
get: () => from[key],
|
|
27
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
28
|
+
}));
|
|
29
|
+
__moduleCache.set(from, entry);
|
|
30
|
+
return entry;
|
|
31
|
+
};
|
|
32
|
+
var __export = (target, all) => {
|
|
33
|
+
for (var name in all)
|
|
34
|
+
__defProp(target, name, {
|
|
35
|
+
get: all[name],
|
|
36
|
+
enumerable: true,
|
|
37
|
+
configurable: true,
|
|
38
|
+
set: (newValue) => all[name] = () => newValue
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
// src/colors/index.ts
|
|
43
|
+
var exports_colors = {};
|
|
44
|
+
__export(exports_colors, {
|
|
45
|
+
default: () => colors_default
|
|
46
|
+
});
|
|
47
|
+
module.exports = __toCommonJS(exports_colors);
|
|
48
|
+
var __reset = "\x1B[0m";
|
|
49
|
+
var COLORS_MAP;
|
|
50
|
+
((COLORS_MAP2) => {
|
|
51
|
+
COLORS_MAP2["black"] = "\x1B[0;30m";
|
|
52
|
+
COLORS_MAP2["red"] = "\x1B[0;31m";
|
|
53
|
+
COLORS_MAP2["green"] = "\x1B[0;32m";
|
|
54
|
+
COLORS_MAP2["yellow"] = "\x1B[0;33m";
|
|
55
|
+
COLORS_MAP2["blue"] = "\x1B[0;34m";
|
|
56
|
+
COLORS_MAP2["purple"] = "\x1B[0;35m";
|
|
57
|
+
COLORS_MAP2["magenta"] = "\x1B[0;35m";
|
|
58
|
+
COLORS_MAP2["cyan"] = "\x1B[0;36m";
|
|
59
|
+
COLORS_MAP2["white"] = "\x1B[0;37m";
|
|
60
|
+
COLORS_MAP2["blackBright"] = "\x1B[0;90m";
|
|
61
|
+
COLORS_MAP2["redBright"] = "\x1B[0;91m";
|
|
62
|
+
COLORS_MAP2["greenBright"] = "\x1B[0;92m";
|
|
63
|
+
COLORS_MAP2["yellowBright"] = "\x1B[0;93m";
|
|
64
|
+
COLORS_MAP2["blueBright"] = "\x1B[0;94m";
|
|
65
|
+
COLORS_MAP2["purpleBright"] = "\x1B[0;95m";
|
|
66
|
+
COLORS_MAP2["magentaBright"] = "\x1B[0;95m";
|
|
67
|
+
COLORS_MAP2["cyanBright"] = "\x1B[0;96m";
|
|
68
|
+
COLORS_MAP2["whiteBright"] = "\x1B[0;97m";
|
|
69
|
+
COLORS_MAP2["redBold"] = "\x1B[1;31m";
|
|
70
|
+
COLORS_MAP2["greenBold"] = "\x1B[1;32m";
|
|
71
|
+
COLORS_MAP2["yellowBold"] = "\x1B[1;33m";
|
|
72
|
+
COLORS_MAP2["blueBold"] = "\x1B[1;34m";
|
|
73
|
+
COLORS_MAP2["purpleBold"] = "\x1B[1;35m";
|
|
74
|
+
COLORS_MAP2["magentaBold"] = "\x1B[1;35m";
|
|
75
|
+
COLORS_MAP2["cyanBold"] = "\x1B[1;36m";
|
|
76
|
+
COLORS_MAP2["whiteBold"] = "\x1B[1;37m";
|
|
77
|
+
COLORS_MAP2["blackUnderline"] = "\x1B[4;30m";
|
|
78
|
+
COLORS_MAP2["redUnderline"] = "\x1B[4;31m";
|
|
79
|
+
COLORS_MAP2["greenUnderline"] = "\x1B[4;32m";
|
|
80
|
+
COLORS_MAP2["yellowUnderline"] = "\x1B[4;33m";
|
|
81
|
+
COLORS_MAP2["blueUnderline"] = "\x1B[4;34m";
|
|
82
|
+
COLORS_MAP2["purpleUnderline"] = "\x1B[4;35m";
|
|
83
|
+
COLORS_MAP2["magentaUnderline"] = "\x1B[4;35m";
|
|
84
|
+
COLORS_MAP2["cyanUnderline"] = "\x1B[4;36m";
|
|
85
|
+
COLORS_MAP2["whiteUnderline"] = "\x1B[4;37m";
|
|
86
|
+
COLORS_MAP2["bgBlack"] = "\x1B[40m";
|
|
87
|
+
COLORS_MAP2["bgRed"] = "\x1B[41m";
|
|
88
|
+
COLORS_MAP2["bgGreen"] = "\x1B[42m";
|
|
89
|
+
COLORS_MAP2["bgYellow"] = "\x1B[43m";
|
|
90
|
+
COLORS_MAP2["bgBlue"] = "\x1B[44m";
|
|
91
|
+
COLORS_MAP2["bgPurple"] = "\x1B[45m";
|
|
92
|
+
COLORS_MAP2["bgMagenta"] = "\x1B[45m";
|
|
93
|
+
COLORS_MAP2["bgCyan"] = "\x1B[46m";
|
|
94
|
+
COLORS_MAP2["bgWhite"] = "\x1B[47m";
|
|
95
|
+
COLORS_MAP2["bgBlackBright"] = "\x1B[100m";
|
|
96
|
+
COLORS_MAP2["bgRedBright"] = "\x1B[101m";
|
|
97
|
+
COLORS_MAP2["bgGreenBright"] = "\x1B[102m";
|
|
98
|
+
COLORS_MAP2["bgYellowBright"] = "\x1B[103m";
|
|
99
|
+
COLORS_MAP2["bgBlueBright"] = "\x1B[104m";
|
|
100
|
+
COLORS_MAP2["bgPurpleBright"] = "\x1B[105m";
|
|
101
|
+
COLORS_MAP2["bgMagentaBright"] = "\x1B[105m";
|
|
102
|
+
COLORS_MAP2["bgCyanBright"] = "\x1B[106m";
|
|
103
|
+
COLORS_MAP2["bgWhiteBright"] = "\x1B[107m";
|
|
104
|
+
})(COLORS_MAP ||= {});
|
|
105
|
+
function wrap(color) {
|
|
106
|
+
return (data) => `${color}${data}${__reset}`;
|
|
107
|
+
}
|
|
108
|
+
var colors = {};
|
|
109
|
+
for (const [colorName, colorValue] of Object.entries(COLORS_MAP)) {
|
|
110
|
+
colors[colorName] = wrap(colorValue);
|
|
111
|
+
}
|
|
112
|
+
var colors_default = colors;
|
|
113
|
+
|
|
114
|
+
//# debugId=34FC3A7A08D5655564756E2164756E21
|
|
115
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2NvbG9ycy9pbmRleC50cyJdLAogICJzb3VyY2VzQ29udGVudCI6IFsKICAgICIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS9KQmxvbmQvMmZlYTQzYTMwNDliMzgyODdlNWU5Y2VmYzg3YjIxMjRcblxuY29uc3QgX19yZXNldCA9IFwiXFx4MWJbMG1cIjtcblxuZW51bSBDT0xPUlNfTUFQIHtcbiAgYmxhY2sgPSBcIlxceDFiWzA7MzBtXCIsXG4gIHJlZCA9IFwiXFx4MWJbMDszMW1cIixcbiAgZ3JlZW4gPSBcIlxceDFiWzA7MzJtXCIsXG4gIHllbGxvdyA9IFwiXFx4MWJbMDszM21cIixcbiAgYmx1ZSA9IFwiXFx4MWJbMDszNG1cIixcbiAgcHVycGxlID0gXCJcXHgxYlswOzM1bVwiLFxuICBtYWdlbnRhID0gXCJcXHgxYlswOzM1bVwiLFxuICBjeWFuID0gXCJcXHgxYlswOzM2bVwiLFxuICB3aGl0ZSA9IFwiXFx4MWJbMDszN21cIixcblxuICBibGFja0JyaWdodCA9IFwiXFx4MWJbMDs5MG1cIixcbiAgcmVkQnJpZ2h0ID0gXCJcXHgxYlswOzkxbVwiLFxuICBncmVlbkJyaWdodCA9IFwiXFx4MWJbMDs5Mm1cIixcbiAgeWVsbG93QnJpZ2h0ID0gXCJcXHgxYlswOzkzbVwiLFxuICBibHVlQnJpZ2h0ID0gXCJcXHgxYlswOzk0bVwiLFxuICBwdXJwbGVCcmlnaHQgPSBcIlxceDFiWzA7OTVtXCIsXG4gIG1hZ2VudGFCcmlnaHQgPSBcIlxceDFiWzA7OTVtXCIsXG4gIGN5YW5CcmlnaHQgPSBcIlxceDFiWzA7OTZtXCIsXG4gIHdoaXRlQnJpZ2h0ID0gXCJcXHgxYlswOzk3bVwiLFxuXG4gIHJlZEJvbGQgPSBcIlxceDFiWzE7MzFtXCIsXG4gIGdyZWVuQm9sZCA9IFwiXFx4MWJbMTszMm1cIixcbiAgeWVsbG93Qm9sZCA9IFwiXFx4MWJbMTszM21cIixcbiAgYmx1ZUJvbGQgPSBcIlxceDFiWzE7MzRtXCIsXG4gIHB1cnBsZUJvbGQgPSBcIlxceDFiWzE7MzVtXCIsXG4gIG1hZ2VudGFCb2xkID0gXCJcXHgxYlsxOzM1bVwiLFxuICBjeWFuQm9sZCA9IFwiXFx4MWJbMTszNm1cIixcbiAgd2hpdGVCb2xkID0gXCJcXHgxYlsxOzM3bVwiLFxuXG4gIGJsYWNrVW5kZXJsaW5lID0gXCJcXHgxYls0OzMwbVwiLFxuICByZWRVbmRlcmxpbmUgPSBcIlxceDFiWzQ7MzFtXCIsXG4gIGdyZWVuVW5kZXJsaW5lID0gXCJcXHgxYls0OzMybVwiLFxuICB5ZWxsb3dVbmRlcmxpbmUgPSBcIlxceDFiWzQ7MzNtXCIsXG4gIGJsdWVVbmRlcmxpbmUgPSBcIlxceDFiWzQ7MzRtXCIsXG4gIHB1cnBsZVVuZGVybGluZSA9IFwiXFx4MWJbNDszNW1cIixcbiAgbWFnZW50YVVuZGVybGluZSA9IFwiXFx4MWJbNDszNW1cIixcbiAgY3lhblVuZGVybGluZSA9IFwiXFx4MWJbNDszNm1cIixcbiAgd2hpdGVVbmRlcmxpbmUgPSBcIlxceDFiWzQ7MzdtXCIsXG5cbiAgYmdCbGFjayA9IFwiXFx4MWJbNDBtXCIsXG4gIGJnUmVkID0gXCJcXHgxYls0MW1cIixcbiAgYmdHcmVlbiA9IFwiXFx4MWJbNDJtXCIsXG4gIGJnWWVsbG93ID0gXCJcXHgxYls0M21cIixcbiAgYmdCbHVlID0gXCJcXHgxYls0NG1cIixcbiAgYmdQdXJwbGUgPSBcIlxceDFiWzQ1bVwiLFxuICBiZ01hZ2VudGEgPSBcIlxceDFiWzQ1bVwiLFxuICBiZ0N5YW4gPSBcIlxceDFiWzQ2bVwiLFxuICBiZ1doaXRlID0gXCJcXHgxYls0N21cIixcblxuICBiZ0JsYWNrQnJpZ2h0ID0gXCJcXHgxYlsxMDBtXCIsXG4gIGJnUmVkQnJpZ2h0ID0gXCJcXHgxYlsxMDFtXCIsXG4gIGJnR3JlZW5CcmlnaHQgPSBcIlxceDFiWzEwMm1cIixcbiAgYmdZZWxsb3dCcmlnaHQgPSBcIlxceDFiWzEwM21cIixcbiAgYmdCbHVlQnJpZ2h0ID0gXCJcXHgxYlsxMDRtXCIsXG4gIGJnUHVycGxlQnJpZ2h0ID0gXCJcXHgxYlsxMDVtXCIsXG4gIGJnTWFnZW50YUJyaWdodCA9IFwiXFx4MWJbMTA1bVwiLFxuICBiZ0N5YW5CcmlnaHQgPSBcIlxceDFiWzEwNm1cIixcbiAgYmdXaGl0ZUJyaWdodCA9IFwiXFx4MWJbMTA3bVwiLFxufVxuXG5mdW5jdGlvbiB3cmFwKGNvbG9yOiBzdHJpbmcpIHtcbiAgcmV0dXJuIChkYXRhOiB1bmtub3duKSA9PiBgJHtjb2xvcn0ke2RhdGF9JHtfX3Jlc2V0fWA7XG59XG5cbmNvbnN0IGNvbG9yczogUmVjb3JkPGtleW9mIHR5cGVvZiBDT0xPUlNfTUFQLCBSZXR1cm5UeXBlPHR5cGVvZiB3cmFwPj4gPSB7fSBhcyBhbnk7XG5cbmZvciAoY29uc3QgW2NvbG9yTmFtZSwgY29sb3JWYWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoQ09MT1JTX01BUCkpIHtcbiAgY29sb3JzW2NvbG9yTmFtZSBhcyBrZXlvZiB0eXBlb2YgQ09MT1JTX01BUF0gPSB3cmFwKGNvbG9yVmFsdWUpO1xufVxuXG5leHBvcnQgZGVmYXVsdCBjb2xvcnM7XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUVBLElBQU0sVUFBVTtBQUVoQixJQUFLO0FBQUEsQ0FBTCxDQUFLLGdCQUFMO0FBQUEsRUFDRSx1QkFBUTtBQUFBLEVBQ1IscUJBQU07QUFBQSxFQUNOLHVCQUFRO0FBQUEsRUFDUix3QkFBUztBQUFBLEVBQ1Qsc0JBQU87QUFBQSxFQUNQLHdCQUFTO0FBQUEsRUFDVCx5QkFBVTtBQUFBLEVBQ1Ysc0JBQU87QUFBQSxFQUNQLHVCQUFRO0FBQUEsRUFFUiw2QkFBYztBQUFBLEVBQ2QsMkJBQVk7QUFBQSxFQUNaLDZCQUFjO0FBQUEsRUFDZCw4QkFBZTtBQUFBLEVBQ2YsNEJBQWE7QUFBQSxFQUNiLDhCQUFlO0FBQUEsRUFDZiwrQkFBZ0I7QUFBQSxFQUNoQiw0QkFBYTtBQUFBLEVBQ2IsNkJBQWM7QUFBQSxFQUVkLHlCQUFVO0FBQUEsRUFDViwyQkFBWTtBQUFBLEVBQ1osNEJBQWE7QUFBQSxFQUNiLDBCQUFXO0FBQUEsRUFDWCw0QkFBYTtBQUFBLEVBQ2IsNkJBQWM7QUFBQSxFQUNkLDBCQUFXO0FBQUEsRUFDWCwyQkFBWTtBQUFBLEVBRVosZ0NBQWlCO0FBQUEsRUFDakIsOEJBQWU7QUFBQSxFQUNmLGdDQUFpQjtBQUFBLEVBQ2pCLGlDQUFrQjtBQUFBLEVBQ2xCLCtCQUFnQjtBQUFBLEVBQ2hCLGlDQUFrQjtBQUFBLEVBQ2xCLGtDQUFtQjtBQUFBLEVBQ25CLCtCQUFnQjtBQUFBLEVBQ2hCLGdDQUFpQjtBQUFBLEVBRWpCLHlCQUFVO0FBQUEsRUFDVix1QkFBUTtBQUFBLEVBQ1IseUJBQVU7QUFBQSxFQUNWLDBCQUFXO0FBQUEsRUFDWCx3QkFBUztBQUFBLEVBQ1QsMEJBQVc7QUFBQSxFQUNYLDJCQUFZO0FBQUEsRUFDWix3QkFBUztBQUFBLEVBQ1QseUJBQVU7QUFBQSxFQUVWLCtCQUFnQjtBQUFBLEVBQ2hCLDZCQUFjO0FBQUEsRUFDZCwrQkFBZ0I7QUFBQSxFQUNoQixnQ0FBaUI7QUFBQSxFQUNqQiw4QkFBZTtBQUFBLEVBQ2YsZ0NBQWlCO0FBQUEsRUFDakIsaUNBQWtCO0FBQUEsRUFDbEIsOEJBQWU7QUFBQSxFQUNmLCtCQUFnQjtBQUFBLEdBMURiO0FBNkRMLFNBQVMsSUFBSSxDQUFDLE9BQWU7QUFBQSxFQUMzQixPQUFPLENBQUMsU0FBa0IsR0FBRyxRQUFRLE9BQU87QUFBQTtBQUc5QyxJQUFNLFNBQW1FLENBQUM7QUFFMUUsWUFBWSxXQUFXLGVBQWUsT0FBTyxRQUFRLFVBQVUsR0FBRztBQUFBLEVBQ2hFLE9BQU8sYUFBd0MsS0FBSyxVQUFVO0FBQ2hFO0FBRUEsSUFBZTsiLAogICJkZWJ1Z0lkIjogIjM0RkMzQTdBMDhENTY1NTU2NDc1NkUyMTY0NzU2RTIxIiwKICAibmFtZXMiOiBbXQp9
|
|
@@ -0,0 +1,270 @@
|
|
|
1
|
+
var __create = Object.create;
|
|
2
|
+
var __getProtoOf = Object.getPrototypeOf;
|
|
3
|
+
var __defProp = Object.defineProperty;
|
|
4
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
7
|
+
var __toESM = (mod, isNodeMode, target) => {
|
|
8
|
+
target = mod != null ? __create(__getProtoOf(mod)) : {};
|
|
9
|
+
const to = isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target;
|
|
10
|
+
for (let key of __getOwnPropNames(mod))
|
|
11
|
+
if (!__hasOwnProp.call(to, key))
|
|
12
|
+
__defProp(to, key, {
|
|
13
|
+
get: () => mod[key],
|
|
14
|
+
enumerable: true
|
|
15
|
+
});
|
|
16
|
+
return to;
|
|
17
|
+
};
|
|
18
|
+
var __moduleCache = /* @__PURE__ */ new WeakMap;
|
|
19
|
+
var __toCommonJS = (from) => {
|
|
20
|
+
var entry = __moduleCache.get(from), desc;
|
|
21
|
+
if (entry)
|
|
22
|
+
return entry;
|
|
23
|
+
entry = __defProp({}, "__esModule", { value: true });
|
|
24
|
+
if (from && typeof from === "object" || typeof from === "function")
|
|
25
|
+
__getOwnPropNames(from).map((key) => !__hasOwnProp.call(entry, key) && __defProp(entry, key, {
|
|
26
|
+
get: () => from[key],
|
|
27
|
+
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
|
|
28
|
+
}));
|
|
29
|
+
__moduleCache.set(from, entry);
|
|
30
|
+
return entry;
|
|
31
|
+
};
|
|
32
|
+
var __export = (target, all) => {
|
|
33
|
+
for (var name in all)
|
|
34
|
+
__defProp(target, name, {
|
|
35
|
+
get: all[name],
|
|
36
|
+
enumerable: true,
|
|
37
|
+
configurable: true,
|
|
38
|
+
set: (newValue) => all[name] = () => newValue
|
|
39
|
+
});
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
// src/cache/index.ts
|
|
43
|
+
var exports_cache = {};
|
|
44
|
+
__export(exports_cache, {
|
|
45
|
+
Cache: () => Cache,
|
|
46
|
+
CACHE_TTL_NEVER_EXPIRE: () => CACHE_TTL_NEVER_EXPIRE
|
|
47
|
+
});
|
|
48
|
+
module.exports = __toCommonJS(exports_cache);
|
|
49
|
+
|
|
50
|
+
// src/cache/cacheService.ts
|
|
51
|
+
var import_types = require("node:util/types");
|
|
52
|
+
|
|
53
|
+
// src/utils/isCallable.ts
|
|
54
|
+
function isCallable(value) {
|
|
55
|
+
return typeof value === "function";
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
// src/cache/cacheService.ts
|
|
59
|
+
var defaultCacheOptions = {
|
|
60
|
+
expirationThresholdMs: 0,
|
|
61
|
+
ttlMs: 60 * 60 * 1000
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
class Cache {
|
|
65
|
+
inMemoryCache = new Map;
|
|
66
|
+
options;
|
|
67
|
+
adapter;
|
|
68
|
+
constructor(adapter, defaultOptions) {
|
|
69
|
+
const options = adapter && !("getValue" in adapter) ? adapter : defaultOptions;
|
|
70
|
+
if (adapter && "getValue" in adapter && "setValue" in adapter) {
|
|
71
|
+
this.adapter = adapter;
|
|
72
|
+
}
|
|
73
|
+
this.options = {
|
|
74
|
+
...defaultCacheOptions,
|
|
75
|
+
...options
|
|
76
|
+
};
|
|
77
|
+
}
|
|
78
|
+
async getFromAdapter(cacheKey) {
|
|
79
|
+
if (!this.adapter) {
|
|
80
|
+
return;
|
|
81
|
+
}
|
|
82
|
+
return this.adapter.getValue(cacheKey);
|
|
83
|
+
}
|
|
84
|
+
async saveToAdapter(cacheKey, value) {
|
|
85
|
+
if (!this.adapter) {
|
|
86
|
+
return;
|
|
87
|
+
}
|
|
88
|
+
return this.adapter.setValue(cacheKey, value);
|
|
89
|
+
}
|
|
90
|
+
async get(cacheKey, valueLoader, options = {}) {
|
|
91
|
+
const mergedOptions = this.mergeOptions(options);
|
|
92
|
+
const cachedValue = this.tryGetFromMemory(cacheKey);
|
|
93
|
+
if (cachedValue !== undefined) {
|
|
94
|
+
return cachedValue;
|
|
95
|
+
}
|
|
96
|
+
const freshValue = await this.tryGetFromValueLoader(valueLoader);
|
|
97
|
+
if (freshValue !== undefined) {
|
|
98
|
+
await this.cacheValue(cacheKey, freshValue, mergedOptions);
|
|
99
|
+
return freshValue;
|
|
100
|
+
}
|
|
101
|
+
const adapterValue = await this.tryGetFromAdapter(cacheKey);
|
|
102
|
+
if (adapterValue !== undefined) {
|
|
103
|
+
await this.cacheValue(cacheKey, adapterValue, mergedOptions);
|
|
104
|
+
return adapterValue;
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
mergeOptions(options) {
|
|
108
|
+
return {
|
|
109
|
+
ttlMs: this.options.ttlMs,
|
|
110
|
+
expirationThresholdMs: this.options.expirationThresholdMs,
|
|
111
|
+
...options
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
tryGetFromMemory(cacheKey) {
|
|
115
|
+
const cached = this.inMemoryCache.get(cacheKey);
|
|
116
|
+
if (cached && !this.isExpired(cached.metadata)) {
|
|
117
|
+
return cached.data;
|
|
118
|
+
}
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
async tryGetFromAdapter(cacheKey) {
|
|
122
|
+
const cached = await this.getFromAdapter(cacheKey);
|
|
123
|
+
if (cached && !this.isExpired(cached.metadata)) {
|
|
124
|
+
this.inMemoryCache.set(cacheKey, cached);
|
|
125
|
+
return cached.data;
|
|
126
|
+
}
|
|
127
|
+
return;
|
|
128
|
+
}
|
|
129
|
+
async tryGetFromValueLoader(valueLoader) {
|
|
130
|
+
if (valueLoader === undefined) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
if (isCallable(valueLoader)) {
|
|
134
|
+
return await valueLoader();
|
|
135
|
+
}
|
|
136
|
+
if (import_types.isPromise(valueLoader)) {
|
|
137
|
+
return await valueLoader;
|
|
138
|
+
}
|
|
139
|
+
return valueLoader;
|
|
140
|
+
}
|
|
141
|
+
async cacheValue(cacheKey, value, options) {
|
|
142
|
+
const cacheData = this.createCacheEntry(value, options);
|
|
143
|
+
await this.saveToAdapter(cacheKey, cacheData);
|
|
144
|
+
this.inMemoryCache.set(cacheKey, cacheData);
|
|
145
|
+
}
|
|
146
|
+
createCacheEntry(value, options) {
|
|
147
|
+
const now = Date.now();
|
|
148
|
+
let expiresAt;
|
|
149
|
+
if (options.ttlMs < 0) {
|
|
150
|
+
expiresAt = -1;
|
|
151
|
+
} else {
|
|
152
|
+
expiresAt = now + options.ttlMs - options.expirationThresholdMs;
|
|
153
|
+
}
|
|
154
|
+
return {
|
|
155
|
+
data: value,
|
|
156
|
+
metadata: {
|
|
157
|
+
createdAt: now,
|
|
158
|
+
ttlMs: options.ttlMs,
|
|
159
|
+
expirationThresholdMs: options.expirationThresholdMs,
|
|
160
|
+
expiresAt
|
|
161
|
+
}
|
|
162
|
+
};
|
|
163
|
+
}
|
|
164
|
+
isExpired(metadata) {
|
|
165
|
+
if (!metadata) {
|
|
166
|
+
return true;
|
|
167
|
+
}
|
|
168
|
+
if (metadata.expiresAt < 0) {
|
|
169
|
+
return false;
|
|
170
|
+
}
|
|
171
|
+
const expirationTime = metadata.expiresAt ?? (metadata.createdAt && metadata.ttlMs ? metadata.createdAt + metadata.ttlMs : undefined);
|
|
172
|
+
if (expirationTime === undefined) {
|
|
173
|
+
return true;
|
|
174
|
+
}
|
|
175
|
+
return Date.now() > expirationTime;
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// src/cache/constants.ts
|
|
179
|
+
var CACHE_TTL_NEVER_EXPIRE = -1;
|
|
180
|
+
// src/index.ts
|
|
181
|
+
var exports_src = {};
|
|
182
|
+
__export(exports_src, {
|
|
183
|
+
tryCatchAsync: () => tryCatchAsync,
|
|
184
|
+
tryCatch: () => tryCatch,
|
|
185
|
+
streamToLines: () => streamToLines,
|
|
186
|
+
sleep: () => sleep,
|
|
187
|
+
randomString: () => randomString,
|
|
188
|
+
jsonParser: () => jsonParser,
|
|
189
|
+
isPrimitive: () => isPrimitive,
|
|
190
|
+
isObject: () => isObject,
|
|
191
|
+
isNullOrUndefined: () => isNullOrUndefined,
|
|
192
|
+
isNullOrEmptyOrUndefined: () => isNullOrEmptyOrUndefined,
|
|
193
|
+
chunksToLines: () => chunksToLines,
|
|
194
|
+
Cache: () => Cache,
|
|
195
|
+
CACHE_TTL_NEVER_EXPIRE: () => CACHE_TTL_NEVER_EXPIRE
|
|
196
|
+
});
|
|
197
|
+
module.exports = __toCommonJS(exports_src);
|
|
198
|
+
|
|
199
|
+
// src/utils/chunksToLines.ts
|
|
200
|
+
async function* streamToLines(chunks) {
|
|
201
|
+
let previous = "";
|
|
202
|
+
for await (const chunk of chunks) {
|
|
203
|
+
previous += chunk;
|
|
204
|
+
let eolIndex;
|
|
205
|
+
while ((eolIndex = previous.indexOf(`
|
|
206
|
+
`)) >= 0) {
|
|
207
|
+
const line = previous.slice(0, eolIndex + 1);
|
|
208
|
+
yield line?.trim() ?? "";
|
|
209
|
+
previous = previous.slice(eolIndex + 1);
|
|
210
|
+
}
|
|
211
|
+
}
|
|
212
|
+
if (previous.length > 0) {
|
|
213
|
+
yield previous;
|
|
214
|
+
}
|
|
215
|
+
}
|
|
216
|
+
var chunksToLines = streamToLines;
|
|
217
|
+
// src/utils/isNullOrUndefined.ts
|
|
218
|
+
var isNullOrUndefined = (value) => value === null || value === undefined;
|
|
219
|
+
function isNullOrEmptyOrUndefined(value) {
|
|
220
|
+
return value === undefined || value === null || value === "" || value.toString().trim() === "";
|
|
221
|
+
}
|
|
222
|
+
// src/utils/isObject.ts
|
|
223
|
+
function isObject(input) {
|
|
224
|
+
return Object.prototype.toString.apply(input) === "[object Object]";
|
|
225
|
+
}
|
|
226
|
+
// src/utils/isPrimitive.ts
|
|
227
|
+
function isPrimitive(value) {
|
|
228
|
+
return typeof value !== "object" && typeof value !== "function" || value === null || value instanceof Date;
|
|
229
|
+
}
|
|
230
|
+
// src/utils/jsonParser.ts
|
|
231
|
+
var import_secure_json_parse = __toESM(require("secure-json-parse"));
|
|
232
|
+
function jsonParser(input) {
|
|
233
|
+
try {
|
|
234
|
+
return { value: import_secure_json_parse.default.parse(input, { protoAction: "remove" }) };
|
|
235
|
+
} catch (err) {
|
|
236
|
+
return { err };
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
// src/utils/randomString.ts
|
|
240
|
+
function randomString(length = 6) {
|
|
241
|
+
let result = "";
|
|
242
|
+
const characters = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789";
|
|
243
|
+
const charactersLength = characters.length;
|
|
244
|
+
for (let i = 0;i < length; i++) {
|
|
245
|
+
result += characters.charAt(Math.floor(Math.random() * charactersLength));
|
|
246
|
+
}
|
|
247
|
+
return result;
|
|
248
|
+
}
|
|
249
|
+
// src/utils/sleep.ts
|
|
250
|
+
var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
251
|
+
// src/neverthrow/tryCatch.ts
|
|
252
|
+
function tryCatch(fn) {
|
|
253
|
+
try {
|
|
254
|
+
const data = fn();
|
|
255
|
+
return [data, undefined];
|
|
256
|
+
} catch (error) {
|
|
257
|
+
return [undefined, error];
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
async function tryCatchAsync(promise) {
|
|
261
|
+
try {
|
|
262
|
+
const data = await promise;
|
|
263
|
+
return [data, undefined];
|
|
264
|
+
} catch (error) {
|
|
265
|
+
return [undefined, error];
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
|
|
269
|
+
//# debugId=455FB2E697529B5064756E2164756E21
|
|
270
|
+
//# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vLi4vc3JjL2NhY2hlL2NhY2hlU2VydmljZS50cyIsICIuLi8uLi9zcmMvdXRpbHMvaXNDYWxsYWJsZS50cyIsICIuLi8uLi9zcmMvY2FjaGUvY29uc3RhbnRzLnRzIiwgIi4uLy4uL3NyYy91dGlscy9jaHVua3NUb0xpbmVzLnRzIiwgIi4uLy4uL3NyYy91dGlscy9pc051bGxPclVuZGVmaW5lZC50cyIsICIuLi8uLi9zcmMvdXRpbHMvaXNPYmplY3QudHMiLCAiLi4vLi4vc3JjL3V0aWxzL2lzUHJpbWl0aXZlLnRzIiwgIi4uLy4uL3NyYy91dGlscy9qc29uUGFyc2VyLnRzIiwgIi4uLy4uL3NyYy91dGlscy9yYW5kb21TdHJpbmcudHMiLCAiLi4vLi4vc3JjL3V0aWxzL3NsZWVwLnRzIiwgIi4uLy4uL3NyYy9uZXZlcnRocm93L3RyeUNhdGNoLnRzIl0sCiAgInNvdXJjZXNDb250ZW50IjogWwogICAgImltcG9ydCB7IGlzUHJvbWlzZSB9IGZyb20gXCJub2RlOnV0aWwvdHlwZXNcIjtcbmltcG9ydCB7IGlzQ2FsbGFibGUgfSBmcm9tIFwiLi4vdXRpbHMvaXNDYWxsYWJsZS50c1wiO1xuaW1wb3J0IHR5cGUgeyBDYWNoZU1ldGFkYXRhT3B0aW9ucywgQ2FjaGVPcHRpb25zLCBDYWNoZVdpdGhNZXRhZGF0YSwgVmFsdWVMb2FkZXIgfSBmcm9tIFwiLi9pbnRlcm5hbC90eXBlcy50c1wiO1xuaW1wb3J0IHR5cGUgeyBDYWNoZU1ldGFkYXRhLCBJQ2FjaGVBZGFwdGVyIH0gZnJvbSBcIi4vdHlwZXMudHNcIjtcblxuY29uc3QgZGVmYXVsdENhY2hlT3B0aW9uczogQ2FjaGVPcHRpb25zID0ge1xuICBleHBpcmF0aW9uVGhyZXNob2xkTXM6IDAsXG4gIHR0bE1zOiA2MCAqIDYwICogMTAwMCxcbn07XG5cbmV4cG9ydCBjbGFzcyBDYWNoZTxUQWRhcHRlciBleHRlbmRzIElDYWNoZUFkYXB0ZXIgfCB1bmRlZmluZWQgPSB1bmRlZmluZWQ+IHtcbiAgcHJpdmF0ZSBpbk1lbW9yeUNhY2hlOiBNYXA8c3RyaW5nLCBDYWNoZVdpdGhNZXRhZGF0YT4gPSBuZXcgTWFwKCk7XG4gIHByaXZhdGUgcmVhZG9ubHkgb3B0aW9uczogQ2FjaGVPcHRpb25zO1xuICBwcml2YXRlIHJlYWRvbmx5IGFkYXB0ZXI/OiBUQWRhcHRlcjtcblxuICBjb25zdHJ1Y3RvcihkZWZhdWx0T3B0aW9ucz86IFBhcnRpYWw8Q2FjaGVPcHRpb25zPik7XG4gIGNvbnN0cnVjdG9yKGFkYXB0ZXI/OiBUQWRhcHRlciwgZGVmYXVsdE9wdGlvbnM/OiBQYXJ0aWFsPENhY2hlT3B0aW9ucz4pO1xuICBjb25zdHJ1Y3RvcihhZGFwdGVyPzogVEFkYXB0ZXIgfCBQYXJ0aWFsPENhY2hlT3B0aW9ucz4sIGRlZmF1bHRPcHRpb25zPzogUGFydGlhbDxDYWNoZU9wdGlvbnM+KSB7XG4gICAgY29uc3Qgb3B0aW9ucyA9IGFkYXB0ZXIgJiYgIShcImdldFZhbHVlXCIgaW4gYWRhcHRlcikgPyAoYWRhcHRlciBhcyBQYXJ0aWFsPENhY2hlT3B0aW9ucz4pIDogZGVmYXVsdE9wdGlvbnM7XG4gICAgaWYgKGFkYXB0ZXIgJiYgXCJnZXRWYWx1ZVwiIGluIGFkYXB0ZXIgJiYgXCJzZXRWYWx1ZVwiIGluIGFkYXB0ZXIpIHtcbiAgICAgIHRoaXMuYWRhcHRlciA9IGFkYXB0ZXIgYXMgVEFkYXB0ZXI7XG4gICAgfVxuXG4gICAgdGhpcy5vcHRpb25zID0ge1xuICAgICAgLi4uZGVmYXVsdENhY2hlT3B0aW9ucyxcbiAgICAgIC4uLm9wdGlvbnMsXG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0RnJvbUFkYXB0ZXI8VD4oY2FjaGVLZXk6IHN0cmluZyk6IFByb21pc2U8VCB8IHVuZGVmaW5lZD4ge1xuICAgIGlmICghdGhpcy5hZGFwdGVyKSB7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmFkYXB0ZXIuZ2V0VmFsdWUoY2FjaGVLZXkpO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBzYXZlVG9BZGFwdGVyPFQ+KGNhY2hlS2V5OiBzdHJpbmcsIHZhbHVlOiBUKTogUHJvbWlzZTx2b2lkPiB7XG4gICAgaWYgKCF0aGlzLmFkYXB0ZXIpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICByZXR1cm4gdGhpcy5hZGFwdGVyLnNldFZhbHVlPFQ+KGNhY2hlS2V5LCB2YWx1ZSk7XG4gIH1cblxuICBwdWJsaWMgYXN5bmMgZ2V0PFQ+KFxuICAgIGNhY2hlS2V5OiBzdHJpbmcsXG4gICAgdmFsdWVMb2FkZXI/OiBWYWx1ZUxvYWRlcjxUPixcbiAgICBvcHRpb25zOiBQYXJ0aWFsPENhY2hlTWV0YWRhdGFPcHRpb25zPiA9IHt9LFxuICApOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICBjb25zdCBtZXJnZWRPcHRpb25zID0gdGhpcy5tZXJnZU9wdGlvbnMob3B0aW9ucyk7XG5cbiAgICAvLyBUcnkgaW4tbWVtb3J5IGNhY2hlIGZpcnN0XG4gICAgY29uc3QgY2FjaGVkVmFsdWUgPSB0aGlzLnRyeUdldEZyb21NZW1vcnk8VD4oY2FjaGVLZXkpO1xuICAgIGlmIChjYWNoZWRWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gY2FjaGVkVmFsdWU7XG4gICAgfVxuXG4gICAgLy8gTG9hZCBmcmVzaCB2YWx1ZSBmcm9tIGxvYWRlciBmdW5jdGlvbiBmaXJzdFxuICAgIGNvbnN0IGZyZXNoVmFsdWUgPSBhd2FpdCB0aGlzLnRyeUdldEZyb21WYWx1ZUxvYWRlcih2YWx1ZUxvYWRlcik7XG4gICAgaWYgKGZyZXNoVmFsdWUgIT09IHVuZGVmaW5lZCkge1xuICAgICAgYXdhaXQgdGhpcy5jYWNoZVZhbHVlKGNhY2hlS2V5LCBmcmVzaFZhbHVlLCBtZXJnZWRPcHRpb25zKTtcblxuICAgICAgcmV0dXJuIGZyZXNoVmFsdWU7XG4gICAgfVxuXG4gICAgLy8gVHJ5IGFkYXB0ZXIgY2FjaGUgc2Vjb25kXG4gICAgY29uc3QgYWRhcHRlclZhbHVlID0gYXdhaXQgdGhpcy50cnlHZXRGcm9tQWRhcHRlcjxUPihjYWNoZUtleSk7XG4gICAgaWYgKGFkYXB0ZXJWYWx1ZSAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICBhd2FpdCB0aGlzLmNhY2hlVmFsdWUoY2FjaGVLZXksIGFkYXB0ZXJWYWx1ZSwgbWVyZ2VkT3B0aW9ucyk7XG5cbiAgICAgIHJldHVybiBhZGFwdGVyVmFsdWU7XG4gICAgfVxuICB9XG5cbiAgcHJpdmF0ZSBtZXJnZU9wdGlvbnMob3B0aW9uczogUGFydGlhbDxDYWNoZU1ldGFkYXRhT3B0aW9ucz4pOiBDYWNoZU1ldGFkYXRhT3B0aW9ucyB7XG4gICAgcmV0dXJuIHtcbiAgICAgIHR0bE1zOiB0aGlzLm9wdGlvbnMudHRsTXMsXG4gICAgICBleHBpcmF0aW9uVGhyZXNob2xkTXM6IHRoaXMub3B0aW9ucy5leHBpcmF0aW9uVGhyZXNob2xkTXMsXG4gICAgICAuLi5vcHRpb25zLFxuICAgIH07XG4gIH1cblxuICBwcml2YXRlIHRyeUdldEZyb21NZW1vcnk8VD4oY2FjaGVLZXk6IHN0cmluZyk6IFQgfCB1bmRlZmluZWQge1xuICAgIGNvbnN0IGNhY2hlZCA9IHRoaXMuaW5NZW1vcnlDYWNoZS5nZXQoY2FjaGVLZXkpO1xuXG4gICAgaWYgKGNhY2hlZCAmJiAhdGhpcy5pc0V4cGlyZWQoY2FjaGVkLm1ldGFkYXRhKSkge1xuICAgICAgcmV0dXJuIGNhY2hlZC5kYXRhIGFzIFQ7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdHJ5R2V0RnJvbUFkYXB0ZXI8VD4oY2FjaGVLZXk6IHN0cmluZyk6IFByb21pc2U8VCB8IHVuZGVmaW5lZD4ge1xuICAgIGNvbnN0IGNhY2hlZCA9IGF3YWl0IHRoaXMuZ2V0RnJvbUFkYXB0ZXI8Q2FjaGVXaXRoTWV0YWRhdGE8VD4+KGNhY2hlS2V5KTtcblxuICAgIGlmIChjYWNoZWQgJiYgIXRoaXMuaXNFeHBpcmVkKGNhY2hlZC5tZXRhZGF0YSkpIHtcbiAgICAgIHRoaXMuaW5NZW1vcnlDYWNoZS5zZXQoY2FjaGVLZXksIGNhY2hlZCk7XG4gICAgICByZXR1cm4gY2FjaGVkLmRhdGE7XG4gICAgfVxuXG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgdHJ5R2V0RnJvbVZhbHVlTG9hZGVyPFQ+KHZhbHVlTG9hZGVyPzogVmFsdWVMb2FkZXI8VD4pOiBQcm9taXNlPFQgfCB1bmRlZmluZWQ+IHtcbiAgICBpZiAodmFsdWVMb2FkZXIgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICB9XG5cbiAgICBpZiAoaXNDYWxsYWJsZSh2YWx1ZUxvYWRlcikpIHtcbiAgICAgIHJldHVybiBhd2FpdCB2YWx1ZUxvYWRlcigpO1xuICAgIH1cblxuICAgIGlmIChpc1Byb21pc2UodmFsdWVMb2FkZXIpKSB7XG4gICAgICByZXR1cm4gYXdhaXQgdmFsdWVMb2FkZXI7XG4gICAgfVxuXG4gICAgcmV0dXJuIHZhbHVlTG9hZGVyO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBjYWNoZVZhbHVlPFQ+KGNhY2hlS2V5OiBzdHJpbmcsIHZhbHVlOiBULCBvcHRpb25zOiBDYWNoZU1ldGFkYXRhT3B0aW9ucyk6IFByb21pc2U8dm9pZD4ge1xuICAgIGNvbnN0IGNhY2hlRGF0YSA9IHRoaXMuY3JlYXRlQ2FjaGVFbnRyeSh2YWx1ZSwgb3B0aW9ucyk7XG5cbiAgICBhd2FpdCB0aGlzLnNhdmVUb0FkYXB0ZXIoY2FjaGVLZXksIGNhY2hlRGF0YSk7XG4gICAgdGhpcy5pbk1lbW9yeUNhY2hlLnNldChjYWNoZUtleSwgY2FjaGVEYXRhKTtcbiAgfVxuXG4gIHByaXZhdGUgY3JlYXRlQ2FjaGVFbnRyeTxUPih2YWx1ZTogVCwgb3B0aW9uczogQ2FjaGVNZXRhZGF0YU9wdGlvbnMpOiBDYWNoZVdpdGhNZXRhZGF0YTxUPiB7XG4gICAgY29uc3Qgbm93ID0gRGF0ZS5ub3coKTtcbiAgICBsZXQgZXhwaXJlc0F0OiBudW1iZXI7XG4gICAgaWYgKG9wdGlvbnMudHRsTXMgPCAwKSB7XG4gICAgICBleHBpcmVzQXQgPSAtMTtcbiAgICB9IGVsc2Uge1xuICAgICAgZXhwaXJlc0F0ID0gbm93ICsgb3B0aW9ucy50dGxNcyAtIG9wdGlvbnMuZXhwaXJhdGlvblRocmVzaG9sZE1zO1xuICAgIH1cblxuICAgIHJldHVybiB7XG4gICAgICBkYXRhOiB2YWx1ZSxcbiAgICAgIG1ldGFkYXRhOiB7XG4gICAgICAgIGNyZWF0ZWRBdDogbm93LFxuICAgICAgICB0dGxNczogb3B0aW9ucy50dGxNcyxcbiAgICAgICAgZXhwaXJhdGlvblRocmVzaG9sZE1zOiBvcHRpb25zLmV4cGlyYXRpb25UaHJlc2hvbGRNcyxcbiAgICAgICAgZXhwaXJlc0F0LFxuICAgICAgfSxcbiAgICB9O1xuICB9XG5cbiAgcHJpdmF0ZSBpc0V4cGlyZWQobWV0YWRhdGE/OiBDYWNoZU1ldGFkYXRhKTogYm9vbGVhbiB7XG4gICAgaWYgKCFtZXRhZGF0YSkge1xuICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuXG4gICAgaWYgKG1ldGFkYXRhLmV4cGlyZXNBdCA8IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG5cbiAgICBjb25zdCBleHBpcmF0aW9uVGltZSA9XG4gICAgICBtZXRhZGF0YS5leHBpcmVzQXQgPz8gKG1ldGFkYXRhLmNyZWF0ZWRBdCAmJiBtZXRhZGF0YS50dGxNcyA/IG1ldGFkYXRhLmNyZWF0ZWRBdCArIG1ldGFkYXRhLnR0bE1zIDogdW5kZWZpbmVkKTtcblxuICAgIGlmIChleHBpcmF0aW9uVGltZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG5cbiAgICByZXR1cm4gRGF0ZS5ub3coKSA+IGV4cGlyYXRpb25UaW1lO1xuICB9XG59XG4iLAogICAgImV4cG9ydCBmdW5jdGlvbiBpc0NhbGxhYmxlKHZhbHVlOiBhbnkpOiB2YWx1ZSBpcyBDYWxsYWJsZUZ1bmN0aW9uIHtcbiAgcmV0dXJuIHR5cGVvZiB2YWx1ZSA9PT0gXCJmdW5jdGlvblwiO1xufVxuIiwKICAgICJleHBvcnQgY29uc3QgQ0FDSEVfVFRMX05FVkVSX0VYUElSRSA9IC0xO1xuIiwKICAgICIvKipcbiAqIENvbnZlcnRzIGFuIGFzeW5jIGl0ZXJhYmxlIG9mIHN0cmluZyBvciBVaW50OEFycmF5IGNodW5rcyBpbnRvIGFuIGFzeW5jIGl0ZXJhYmxlIG9mIGxpbmVzLlxuICogSGFuZGxlcyBjYXNlcyB3aGVyZSBsaW5lcyBtYXkgYmUgc3BsaXQgYWNyb3NzIG11bHRpcGxlIGNodW5rcy5cbiAqIFVzYWdlOlxuICogYGBgdHNcbiAqIGltcG9ydCB7IHBpcGVsaW5lIH0gZnJvbSBcIm5vZGU6c3RyZWFtL3Byb21pc2VzXCI7XG4gKiBpbXBvcnQgeyBjcmVhdGVSZWFkU3RyZWFtIH0gZnJvbSBcIm5vZGU6ZnNcIjtcbiAqIGltcG9ydCB7IHN0cmVhbVRvTGluZXMgfSBmcm9tIFwiQGx1a2Fza2ovdHMtdXRpbHNcIjtcbiAqXG4gKiBhc3luYyBmdW5jdGlvbiBwcm9jZXNzTGluZShjaHVuazogQXN5bmNJdGVyYWJsZTxzdHJpbmc+KSB7XG4gKiAgIGZvciBhd2FpdCAoY29uc3QgbGluZSBvZiBjaHVuaykge1xuICogICAgIGNvbnNvbGUubG9nKGxpbmUpO1xuICogICAgIHlpZWxkIGxpbmU7XG4gKiAgIH1cbiAqIH1cbiAqIGNvbnN0IHJlYWRTdHJlYW0gPSBjcmVhdGVSZWFkU3RyZWFtKFwicGF0aC90by9maWxlLnR4dFwiLCB7IGVuY29kaW5nOiBcInV0Zi04XCIgfSk7XG4gKiBhd2FpdCBwaXBlbGluZShyZWFkU3RyZWFtLCBzdHJlYW1Ub0xpbmVzLCBwcm9jZXNzLnN0ZG91dCkuY2F0Y2goKGVycikgPT4ge1xuICogICBjb25zb2xlLmVycm9yKGVycik7XG4gKiAgIHByb2Nlc3MuZXhpdCgxKTtcbiAqIH0pO1xuICogYGBgXG4gKiBAcGFyYW0gY2h1bmtzXG4gKi9cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiogc3RyZWFtVG9MaW5lcyhjaHVua3M6IEFzeW5jSXRlcmFibGU8c3RyaW5nIHwgVWludDhBcnJheT4pIHtcbiAgbGV0IHByZXZpb3VzID0gXCJcIjtcblxuICBmb3IgYXdhaXQgKGNvbnN0IGNodW5rIG9mIGNodW5rcykge1xuICAgIHByZXZpb3VzICs9IGNodW5rO1xuICAgIGxldCBlb2xJbmRleDogbnVtYmVyO1xuXG4gICAgLy8gYmlvbWUtaWdub3JlIGxpbnQvc3VzcGljaW91cy9ub0Fzc2lnbkluRXhwcmVzc2lvbnM6IFwiZXhwbGFuYXRpb25cIlxuICAgIHdoaWxlICgoZW9sSW5kZXggPSBwcmV2aW91cy5pbmRleE9mKFwiXFxuXCIpKSA+PSAwKSB7XG4gICAgICAvLyB0aGlzIGxpbmUgaW5jbHVkZXMgdGhlIEVPTFxuICAgICAgY29uc3QgbGluZSA9IHByZXZpb3VzLnNsaWNlKDAsIGVvbEluZGV4ICsgMSk7XG4gICAgICB5aWVsZCBsaW5lPy50cmltKCkgPz8gXCJcIjtcbiAgICAgIHByZXZpb3VzID0gcHJldmlvdXMuc2xpY2UoZW9sSW5kZXggKyAxKTtcbiAgICB9XG4gIH1cblxuICBpZiAocHJldmlvdXMubGVuZ3RoID4gMCkge1xuICAgIHlpZWxkIHByZXZpb3VzO1xuICB9XG59XG5cbi8qKlxuICogQGRlcHJlY2F0ZWQgdXNlIHN0cmVhbVRvTGluZXNcbiAqL1xuZXhwb3J0IGNvbnN0IGNodW5rc1RvTGluZXMgPSBzdHJlYW1Ub0xpbmVzO1xuIiwKICAgICJleHBvcnQgY29uc3QgaXNOdWxsT3JVbmRlZmluZWQgPSAodmFsdWU6IGFueSk6IHZhbHVlIGlzIG51bGwgfCB1bmRlZmluZWQgPT4gdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IHVuZGVmaW5lZDtcblxuZXhwb3J0IGZ1bmN0aW9uIGlzTnVsbE9yRW1wdHlPclVuZGVmaW5lZCh2YWx1ZT86IGFueSB8IG51bGwpOiB2YWx1ZSBpcyBudWxsIHwgdW5kZWZpbmVkIHtcbiAgcmV0dXJuIHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwgfHwgdmFsdWUgPT09IFwiXCIgfHwgdmFsdWUudG9TdHJpbmcoKS50cmltKCkgPT09IFwiXCI7XG59XG4iLAogICAgIi8qKlxuICogVHlwZSBndWFyZCB0aGF0IGNoZWNrcyBpZiB0aGUgaW5wdXQgaXMgYSBwbGFpbiBKYXZhU2NyaXB0IG9iamVjdC5cbiAqIEBwYXJhbSB7YW55fSBpbnB1dCAtIFRoZSB2YWx1ZSB0byBjaGVja1xuICogQHJldHVybnMge2Jvb2xlYW59IFRydWUgaWYgdGhlIGlucHV0IGlzIGEgcGxhaW4gb2JqZWN0LCBmYWxzZSBvdGhlcndpc2VcbiAqIEB0eXBlUGFyYW0ge1JlY29yZDxzdHJpbmcsIGFueT59IFR5cGUgZ3VhcmQgbmFycm93cyB0aGUgaW5wdXQgdHlwZSB0byBhIHN0cmluZy1rZXllZCBvYmplY3RcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzT2JqZWN0KGlucHV0OiBhbnkpOiBpbnB1dCBpcyBSZWNvcmQ8c3RyaW5nLCBhbnk+IHtcbiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuYXBwbHkoaW5wdXQpID09PSBcIltvYmplY3QgT2JqZWN0XVwiO1xufVxuIiwKICAgICJleHBvcnQgZnVuY3Rpb24gaXNQcmltaXRpdmUodmFsdWU6IHVua25vd24pOiBib29sZWFuIHtcbiAgcmV0dXJuICh0eXBlb2YgdmFsdWUgIT09IFwib2JqZWN0XCIgJiYgdHlwZW9mIHZhbHVlICE9PSBcImZ1bmN0aW9uXCIpIHx8IHZhbHVlID09PSBudWxsIHx8IHZhbHVlIGluc3RhbmNlb2YgRGF0ZTtcbn1cbiIsCiAgICAiaW1wb3J0IHNqcyBmcm9tIFwic2VjdXJlLWpzb24tcGFyc2VcIjtcblxuLyoqXG4gKiBTYWZlbHkgcGFyc2VzIEpTT04gaW5wdXQgdXNpbmcgc2VjdXJlLWpzb24tcGFyc2Ugd2l0aCBwcm90b3R5cGUgcG9sbHV0aW9uIHByb3RlY3Rpb24uXG4gKiBAcGFyYW0ge2FueX0gaW5wdXQgLSBUaGUgaW5wdXQgdG8gYmUgcGFyc2VkIGFzIEpTT05cbiAqIEByZXR1cm5zIHt7IHZhbHVlPzogYW55LCBlcnI/OiBFcnJvciB9fSBBbiBvYmplY3QgY29udGFpbmluZyBlaXRoZXIgdGhlIHBhcnNlZCB2YWx1ZSBvciBhbiBlcnJvciBpZiBwYXJzaW5nIGZhaWxlZFxuICovXG5leHBvcnQgZnVuY3Rpb24ganNvblBhcnNlcihpbnB1dDogYW55KSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIHsgdmFsdWU6IHNqcy5wYXJzZShpbnB1dCwgeyBwcm90b0FjdGlvbjogXCJyZW1vdmVcIiB9KSB9O1xuICB9IGNhdGNoIChlcnIpIHtcbiAgICByZXR1cm4geyBlcnIgfTtcbiAgfVxufVxuIiwKICAgICJleHBvcnQgZnVuY3Rpb24gcmFuZG9tU3RyaW5nKGxlbmd0aDogbnVtYmVyID0gNik6IHN0cmluZyB7XG4gIGxldCByZXN1bHQgPSBcIlwiO1xuICBjb25zdCBjaGFyYWN0ZXJzID0gXCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OVwiO1xuICBjb25zdCBjaGFyYWN0ZXJzTGVuZ3RoID0gY2hhcmFjdGVycy5sZW5ndGg7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICByZXN1bHQgKz0gY2hhcmFjdGVycy5jaGFyQXQoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogY2hhcmFjdGVyc0xlbmd0aCkpO1xuICB9XG4gIHJldHVybiByZXN1bHQ7XG59XG4iLAogICAgImV4cG9ydCBjb25zdCBzbGVlcCA9IChtczogbnVtYmVyKSA9PiBuZXcgUHJvbWlzZSgocmVzb2x2ZSkgPT4gc2V0VGltZW91dChyZXNvbHZlLCBtcykpO1xuIiwKICAgICIvLyBodHRwczovL2dpc3QuZ2l0aHViLmNvbS90M2RvdGdnL2E0ODZjNGFlNjZkMzJiZjE3YzA5YzczNjA5ZGFjYzViXG4vLyBUeXBlcyBmb3IgdGhlIHJlc3VsdCBvYmplY3Qgd2l0aCBkaXNjcmltaW5hdGVkIHVuaW9uXG4vLyB0eXBlIFN1Y2Nlc3M8VD4gPSB7XG4vLyAgIGRhdGE6IFQ7XG4vLyAgIGVycm9yOiBudWxsO1xuLy8gfTtcblxuLy8gdHlwZSBGYWlsdXJlPEU+ID0ge1xuLy8gICBkYXRhOiBudWxsO1xuLy8gICBlcnJvcjogRTtcbi8vIH07XG5cbi8vIGV4cG9ydCB0eXBlIFJlc3VsdDxULCBFID0gRXJyb3I+ID0gU3VjY2VzczxUPiB8IEZhaWx1cmU8RT47XG5cbmV4cG9ydCB0eXBlIFJlc3VsdDxULCBFPiA9IFt1bmRlZmluZWQsIEVdIHwgW1QsIHVuZGVmaW5lZF07XG5leHBvcnQgdHlwZSBQcm9taXNlUmVzdWx0PFQsIEU+ID0gUHJvbWlzZTxSZXN1bHQ8VCwgRT4+O1xuXG4vKipcbiAqIFdyYXBzIGEgc3luY2hyb25vdXMgZnVuY3Rpb24gaW4gYSB0cnktY2F0Y2ggYmxvY2sgYW5kIHJldHVybnMgYSBSZXN1bHQgdHVwbGUgY29udGFpbmluZyBlaXRoZXIgdGhlIHJldHVybmVkIHZhbHVlIG9yIHRoZSBjYXVnaHQgZXJyb3JcbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIHRoZSBzdWNjZXNzZnVsIHJlc3VsdCB2YWx1ZVxuICogQHRlbXBsYXRlIEUgLSBUaGUgdHlwZSBvZiB0aGUgZXJyb3IgdmFsdWUsIG11c3QgZXh0ZW5kIEVycm9yXG4gKiBAcGFyYW0geygpID0+IFR9IGZuIC0gVGhlIGZ1bmN0aW9uIHRvIGJlIGV4ZWN1dGVkXG4gKiBAcmV0dXJucyB7UmVzdWx0PFQsIEU+fSBBIHR1cGxlIGNvbnRhaW5pbmcgZWl0aGVyIFtkYXRhLCB1bmRlZmluZWRdIG9yIFt1bmRlZmluZWQsIGVycm9yXVxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBbZGF0YSwgZXJyb3JdID0gdHJ5Q2F0Y2goKCkgPT4gc29tZVJpc2t5T3BlcmF0aW9uKCkpO1xuICogaWYgKGVycm9yKSB7XG4gKiAgIGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xuICogfSBlbHNlIHtcbiAqICAgY29uc29sZS5sb2coZGF0YSk7XG4gKiB9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiB0cnlDYXRjaDxULCBFIGV4dGVuZHMgRXJyb3I+KGZuOiAoKSA9PiBUKTogUmVzdWx0PFQsIEU+IHtcbiAgdHJ5IHtcbiAgICBjb25zdCBkYXRhID0gZm4oKTtcbiAgICByZXR1cm4gW2RhdGEgYXMgVCwgdW5kZWZpbmVkXTtcbiAgfSBjYXRjaCAoZXJyb3IpIHtcbiAgICByZXR1cm4gW3VuZGVmaW5lZCwgZXJyb3IgYXMgRV07XG4gIH1cbn1cblxuLyoqXG4gKiBXcmFwcyBhIFByb21pc2UgaW4gYSB0cnktY2F0Y2ggYmxvY2sgYW5kIHJldHVybnMgYSBSZXN1bHQgb2JqZWN0IGNvbnRhaW5pbmcgZWl0aGVyIHRoZSByZXNvbHZlZCBkYXRhIG9yIHRoZSBjYXVnaHQgZXJyb3JcbiAqXG4gKiBAdGVtcGxhdGUgVCAtIFRoZSB0eXBlIG9mIHRoZSBzdWNjZXNzZnVsIHJlc3VsdCB2YWx1ZVxuICogQHRlbXBsYXRlIEUgLSBUaGUgdHlwZSBvZiB0aGUgZXJyb3IgdmFsdWUsIGRlZmF1bHRzIHRvIEVycm9yXG4gKiBAcGFyYW0ge1Byb21pc2U8VD59IHByb21pc2UgLSBUaGUgcHJvbWlzZSB0byBiZSBleGVjdXRlZFxuICogQHJldHVybnMge1Byb21pc2U8UmVzdWx0PFQsIEU+Pn0gQSBQcm9taXNlIHRoYXQgcmVzb2x2ZXMgdG8gYSBSZXN1bHQgb2JqZWN0IGNvbnRhaW5pbmcgZWl0aGVyIHRoZSBkYXRhIG9yIGVycm9yXG4gKlxuICogQGV4YW1wbGVcbiAqIGNvbnN0IHtkYXRhLCBlcnJvcn0gPSBhd2FpdCB0cnlDYXRjaEFzeW5jKHNvbWVQcm9taXNlKTtcbiAqIGlmIChlcnJvcikge1xuICogICBjb25zb2xlLmVycm9yKHJlc3VsdC5lcnJvcik7XG4gKiB9IGVsc2Uge1xuICogICBjb25zb2xlLmxvZyhkYXRhKTtcbiAqIH1cbiAqL1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIHRyeUNhdGNoQXN5bmM8VCwgRSBleHRlbmRzIEVycm9yPihwcm9taXNlOiBQcm9taXNlPFQ+KTogUHJvbWlzZVJlc3VsdDxULCBFPiB7XG4gIHRyeSB7XG4gICAgY29uc3QgZGF0YSA9IGF3YWl0IHByb21pc2U7XG4gICAgcmV0dXJuIFtkYXRhIGFzIFQsIHVuZGVmaW5lZF07XG4gIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgcmV0dXJuIFt1bmRlZmluZWQsIGVycm9yIGFzIEVdO1xuICB9XG59XG4iCiAgXSwKICAibWFwcGluZ3MiOiAiOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUEwQixJQUExQjs7O0FDQU8sU0FBUyxVQUFVLENBQUMsT0FBdUM7QUFBQSxFQUNoRSxPQUFPLE9BQU8sVUFBVTtBQUFBOzs7QURJMUIsSUFBTSxzQkFBb0M7QUFBQSxFQUN4Qyx1QkFBdUI7QUFBQSxFQUN2QixPQUFPLEtBQUssS0FBSztBQUNuQjtBQUFBO0FBRU8sTUFBTSxNQUE4RDtBQUFBLEVBQ2pFLGdCQUFnRCxJQUFJO0FBQUEsRUFDM0M7QUFBQSxFQUNBO0FBQUEsRUFJakIsV0FBVyxDQUFDLFNBQTRDLGdCQUF3QztBQUFBLElBQzlGLE1BQU0sVUFBVSxXQUFXLEVBQUUsY0FBYyxXQUFZLFVBQW9DO0FBQUEsSUFDM0YsSUFBSSxXQUFXLGNBQWMsV0FBVyxjQUFjLFNBQVM7QUFBQSxNQUM3RCxLQUFLLFVBQVU7QUFBQSxJQUNqQjtBQUFBLElBRUEsS0FBSyxVQUFVO0FBQUEsU0FDVjtBQUFBLFNBQ0E7QUFBQSxJQUNMO0FBQUE7QUFBQSxPQUdZLGVBQWlCLENBQUMsVUFBMEM7QUFBQSxJQUN4RSxJQUFJLENBQUMsS0FBSyxTQUFTO0FBQUEsTUFDakI7QUFBQSxJQUNGO0FBQUEsSUFFQSxPQUFPLEtBQUssUUFBUSxTQUFTLFFBQVE7QUFBQTtBQUFBLE9BR3pCLGNBQWdCLENBQUMsVUFBa0IsT0FBeUI7QUFBQSxJQUN4RSxJQUFJLENBQUMsS0FBSyxTQUFTO0FBQUEsTUFDakI7QUFBQSxJQUNGO0FBQUEsSUFFQSxPQUFPLEtBQUss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
|