@cloudbase/container 2.5.29-beta.0
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/.eslintignore +2 -0
- package/.eslintrc.js +15 -0
- package/LICENSE +202 -0
- package/dist/cjs/go_wams_exec.d.ts +2 -0
- package/dist/cjs/go_wams_exec.js +538 -0
- package/dist/cjs/index.d.ts +2 -0
- package/dist/cjs/index.js +383 -0
- package/dist/esm/go_wams_exec.d.ts +2 -0
- package/dist/esm/go_wams_exec.js +536 -0
- package/dist/esm/index.d.ts +2 -0
- package/dist/esm/index.js +376 -0
- package/package.json +38 -0
- package/src/go_wams_exec.ts +590 -0
- package/src/index.ts +330 -0
- package/tsconfig.esm.json +16 -0
- package/tsconfig.json +16 -0
|
@@ -0,0 +1,383 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __extends = (this && this.__extends) || (function () {
|
|
3
|
+
var extendStatics = function (d, b) {
|
|
4
|
+
extendStatics = Object.setPrototypeOf ||
|
|
5
|
+
({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||
|
|
6
|
+
function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };
|
|
7
|
+
return extendStatics(d, b);
|
|
8
|
+
};
|
|
9
|
+
return function (d, b) {
|
|
10
|
+
if (typeof b !== "function" && b !== null)
|
|
11
|
+
throw new TypeError("Class extends value " + String(b) + " is not a constructor or null");
|
|
12
|
+
extendStatics(d, b);
|
|
13
|
+
function __() { this.constructor = d; }
|
|
14
|
+
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
|
|
15
|
+
};
|
|
16
|
+
})();
|
|
17
|
+
var __assign = (this && this.__assign) || function () {
|
|
18
|
+
__assign = Object.assign || function(t) {
|
|
19
|
+
for (var s, i = 1, n = arguments.length; i < n; i++) {
|
|
20
|
+
s = arguments[i];
|
|
21
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p))
|
|
22
|
+
t[p] = s[p];
|
|
23
|
+
}
|
|
24
|
+
return t;
|
|
25
|
+
};
|
|
26
|
+
return __assign.apply(this, arguments);
|
|
27
|
+
};
|
|
28
|
+
var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
|
|
29
|
+
var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
|
|
30
|
+
if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
|
|
31
|
+
else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
|
|
32
|
+
return c > 3 && r && Object.defineProperty(target, key, r), r;
|
|
33
|
+
};
|
|
34
|
+
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
35
|
+
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
36
|
+
};
|
|
37
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
38
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
39
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
40
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
41
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
42
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
43
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
47
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
48
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
49
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
50
|
+
function step(op) {
|
|
51
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
52
|
+
while (g && (g = 0, op[0] && (_ = 0)), _) try {
|
|
53
|
+
if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
|
|
54
|
+
if (y = 0, t) op = [op[0] & 2, t.value];
|
|
55
|
+
switch (op[0]) {
|
|
56
|
+
case 0: case 1: t = op; break;
|
|
57
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
58
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
59
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
60
|
+
default:
|
|
61
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
62
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
63
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
64
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
65
|
+
if (t[2]) _.ops.pop();
|
|
66
|
+
_.trys.pop(); continue;
|
|
67
|
+
}
|
|
68
|
+
op = body.call(thisArg, _);
|
|
69
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
70
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
71
|
+
}
|
|
72
|
+
};
|
|
73
|
+
var __rest = (this && this.__rest) || function (s, e) {
|
|
74
|
+
var t = {};
|
|
75
|
+
for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
|
|
76
|
+
t[p] = s[p];
|
|
77
|
+
if (s != null && typeof Object.getOwnPropertySymbols === "function")
|
|
78
|
+
for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
|
|
79
|
+
if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
|
|
80
|
+
t[p[i]] = s[p[i]];
|
|
81
|
+
}
|
|
82
|
+
return t;
|
|
83
|
+
};
|
|
84
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
85
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
86
|
+
};
|
|
87
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
88
|
+
exports.registerContainers = void 0;
|
|
89
|
+
var utilities_1 = require("@cloudbase/utilities");
|
|
90
|
+
var decompress_1 = __importDefault(require("brotli/decompress"));
|
|
91
|
+
var go_wams_exec_1 = __importDefault(require("./go_wams_exec"));
|
|
92
|
+
var getSdkName = utilities_1.constants.getSdkName, ERRORS = utilities_1.constants.ERRORS, COMMUNITY_SITE_URL = utilities_1.constants.COMMUNITY_SITE_URL;
|
|
93
|
+
var execCallback = utilities_1.utils.execCallback, printWarn = utilities_1.utils.printWarn;
|
|
94
|
+
var catchErrorsDecorator = utilities_1.helpers.catchErrorsDecorator;
|
|
95
|
+
var COMPONENT_NAME = 'container';
|
|
96
|
+
function request(_a) {
|
|
97
|
+
var url = _a.url, _b = _a.method, method = _b === void 0 ? 'GET' : _b, _c = _a.header, header = _c === void 0 ? {} : _c, data = _a.data, _d = _a.timeout, timeout = _d === void 0 ? 60000 : _d, _e = _a.dataType, dataType = _e === void 0 ? 'json' : _e, _f = _a.responseType, responseType = _f === void 0 ? 'text' : _f;
|
|
98
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
99
|
+
var headers, _g, signal, abort;
|
|
100
|
+
return __generator(this, function (_h) {
|
|
101
|
+
headers = __assign({}, header);
|
|
102
|
+
if (typeof data === 'object' && !(data instanceof ArrayBuffer || ArrayBuffer.isView(data))) {
|
|
103
|
+
if (!headers['Content-Type'] && !headers['content-type']) {
|
|
104
|
+
headers['Content-Type'] = 'application/json';
|
|
105
|
+
}
|
|
106
|
+
try {
|
|
107
|
+
data = JSON.stringify(data);
|
|
108
|
+
}
|
|
109
|
+
catch (e) {
|
|
110
|
+
throw new Error(JSON.stringify({
|
|
111
|
+
code: ERRORS.INVALID_PARAMS,
|
|
112
|
+
msg: "[".concat(COMPONENT_NAME, ".callContainer] invalid data with content-type: application/json"),
|
|
113
|
+
}));
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
_g = new AbortController(), signal = _g.signal, abort = _g.abort;
|
|
117
|
+
return [2, Promise.race([
|
|
118
|
+
new Promise(function (_, reject) {
|
|
119
|
+
setTimeout(function () {
|
|
120
|
+
var error = new Error('请求超时');
|
|
121
|
+
error.code = 'SERVER_TIMEOUT';
|
|
122
|
+
reject(error);
|
|
123
|
+
abort();
|
|
124
|
+
}, timeout);
|
|
125
|
+
}),
|
|
126
|
+
fetch(url, {
|
|
127
|
+
method: method,
|
|
128
|
+
headers: headers,
|
|
129
|
+
body: data,
|
|
130
|
+
signal: signal,
|
|
131
|
+
}).then(function (response) {
|
|
132
|
+
if (responseType === 'arrayBuffer') {
|
|
133
|
+
return response.arrayBuffer();
|
|
134
|
+
}
|
|
135
|
+
if (dataType === 'json') {
|
|
136
|
+
try {
|
|
137
|
+
return response.json();
|
|
138
|
+
}
|
|
139
|
+
catch (e) {
|
|
140
|
+
throw new Error("[".concat(getSdkName(), "][").concat(ERRORS.INVALID_PARAMS, "][").concat(COMPONENT_NAME, ".callContainer] response data must be json"));
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
return response.text();
|
|
144
|
+
}),
|
|
145
|
+
])];
|
|
146
|
+
});
|
|
147
|
+
});
|
|
148
|
+
}
|
|
149
|
+
var InvalieParamsError = (function (_super) {
|
|
150
|
+
__extends(InvalieParamsError, _super);
|
|
151
|
+
function InvalieParamsError(scope, message) {
|
|
152
|
+
var msg = JSON.stringify({
|
|
153
|
+
code: ERRORS.INVALID_PARAMS,
|
|
154
|
+
msg: "[".concat(scope, "] ").concat(message),
|
|
155
|
+
});
|
|
156
|
+
return _super.call(this, msg) || this;
|
|
157
|
+
}
|
|
158
|
+
return InvalieParamsError;
|
|
159
|
+
}(Error));
|
|
160
|
+
var CloudbaseContainers = (function () {
|
|
161
|
+
function CloudbaseContainers(config) {
|
|
162
|
+
this.config = config;
|
|
163
|
+
if (!this.config.wasmUrl) {
|
|
164
|
+
throw new Error(JSON.stringify({
|
|
165
|
+
code: ERRORS.INVALID_PARAMS,
|
|
166
|
+
msg: "[".concat(COMPONENT_NAME, "] \u7F3A\u5C11 wasmUrl"),
|
|
167
|
+
}));
|
|
168
|
+
}
|
|
169
|
+
this.wasm = getExportFunction(this.config.wasmUrl, {
|
|
170
|
+
utils: {
|
|
171
|
+
info: function (e) {
|
|
172
|
+
console.log(e);
|
|
173
|
+
},
|
|
174
|
+
request: request,
|
|
175
|
+
},
|
|
176
|
+
});
|
|
177
|
+
}
|
|
178
|
+
CloudbaseContainers.prototype.callContainer = function (options, callback) {
|
|
179
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
180
|
+
var callContainer, url, _a, method, _b, header, data, _c, timeout, _d, dataType, _e, responseType, restOptions, res, e_1;
|
|
181
|
+
return __generator(this, function (_f) {
|
|
182
|
+
switch (_f.label) {
|
|
183
|
+
case 0: return [4, this.initContainer(this.config)];
|
|
184
|
+
case 1:
|
|
185
|
+
_f.sent();
|
|
186
|
+
return [4, this.wasm];
|
|
187
|
+
case 2:
|
|
188
|
+
callContainer = (_f.sent()).callContainer;
|
|
189
|
+
url = options.url, _a = options.method, method = _a === void 0 ? 'GET' : _a, _b = options.header, header = _b === void 0 ? {} : _b, data = options.data, _c = options.timeout, timeout = _c === void 0 ? 60000 : _c, _d = options.dataType, dataType = _d === void 0 ? 'json' : _d, _e = options.responseType, responseType = _e === void 0 ? 'text' : _e, restOptions = __rest(options, ["url", "method", "header", "data", "timeout", "dataType", "responseType"]);
|
|
190
|
+
if (!url) {
|
|
191
|
+
throw new InvalieParamsError("".concat(COMPONENT_NAME, ".callContainer"), 'invalid request url');
|
|
192
|
+
}
|
|
193
|
+
_f.label = 3;
|
|
194
|
+
case 3:
|
|
195
|
+
_f.trys.push([3, 5, , 6]);
|
|
196
|
+
return [4, new Promise(function (resolve, reject) {
|
|
197
|
+
var params = __assign({ url: url, method: method, header: header, data: data, timeout: timeout, dataType: dataType, responseType: responseType }, restOptions);
|
|
198
|
+
callContainer(__assign(__assign({}, params), { success: resolve, fail: function (res) {
|
|
199
|
+
var data = (res || {}).data;
|
|
200
|
+
var error = new Error((data === null || data === void 0 ? void 0 : data.message) || 'call container error');
|
|
201
|
+
error.code = (data === null || data === void 0 ? void 0 : data.code) || 'UNKNOWN_ERROR';
|
|
202
|
+
reject(error);
|
|
203
|
+
} }));
|
|
204
|
+
})];
|
|
205
|
+
case 4:
|
|
206
|
+
res = _f.sent();
|
|
207
|
+
return [2, execCallback(callback, null, res)];
|
|
208
|
+
case 5:
|
|
209
|
+
e_1 = _f.sent();
|
|
210
|
+
execCallback(callback, e_1);
|
|
211
|
+
return [3, 6];
|
|
212
|
+
case 6: return [2];
|
|
213
|
+
}
|
|
214
|
+
});
|
|
215
|
+
});
|
|
216
|
+
};
|
|
217
|
+
CloudbaseContainers.prototype.initContainer = function (config) {
|
|
218
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
219
|
+
var initContainer;
|
|
220
|
+
return __generator(this, function (_a) {
|
|
221
|
+
switch (_a.label) {
|
|
222
|
+
case 0: return [4, this.wasm];
|
|
223
|
+
case 1:
|
|
224
|
+
initContainer = (_a.sent()).initContainer;
|
|
225
|
+
if (!this.containerInitPromise) {
|
|
226
|
+
this.containerInitPromise = new Promise(function (resolve, reject) {
|
|
227
|
+
initContainer({
|
|
228
|
+
config: config,
|
|
229
|
+
success: function (res) {
|
|
230
|
+
if (String(res.statusCode) !== '200') {
|
|
231
|
+
reject(new Error(JSON.stringify({
|
|
232
|
+
code: 'INIT_ERROR',
|
|
233
|
+
msg: "[".concat(COMPONENT_NAME, "] ").concat(res.statusCode, " ").concat(JSON.stringify(res.data)),
|
|
234
|
+
})));
|
|
235
|
+
}
|
|
236
|
+
resolve(res);
|
|
237
|
+
},
|
|
238
|
+
fail: function (res) {
|
|
239
|
+
reject(new Error(JSON.stringify({
|
|
240
|
+
code: 'INIT_ERROR',
|
|
241
|
+
msg: "[".concat(COMPONENT_NAME, "] ").concat(JSON.stringify(res.data)),
|
|
242
|
+
})));
|
|
243
|
+
this._containerInitPromis = null;
|
|
244
|
+
},
|
|
245
|
+
});
|
|
246
|
+
});
|
|
247
|
+
}
|
|
248
|
+
return [2, this.containerInitPromise];
|
|
249
|
+
}
|
|
250
|
+
});
|
|
251
|
+
});
|
|
252
|
+
};
|
|
253
|
+
__decorate([
|
|
254
|
+
catchErrorsDecorator({
|
|
255
|
+
customInfo: {
|
|
256
|
+
className: 'Cloudbase',
|
|
257
|
+
methodName: 'callContainer',
|
|
258
|
+
},
|
|
259
|
+
title: '调用失败',
|
|
260
|
+
messages: [
|
|
261
|
+
'请确认以下各项:',
|
|
262
|
+
' 1 - 调用 callContainer() 的语法或参数是否正确',
|
|
263
|
+
' 2 - 域名 & 路径是否存在',
|
|
264
|
+
"\u5982\u679C\u95EE\u9898\u4F9D\u7136\u5B58\u5728\uFF0C\u5EFA\u8BAE\u5230\u5B98\u65B9\u95EE\u7B54\u793E\u533A\u63D0\u95EE\u6216\u5BFB\u627E\u5E2E\u52A9\uFF1A".concat(COMMUNITY_SITE_URL),
|
|
265
|
+
],
|
|
266
|
+
}),
|
|
267
|
+
__metadata("design:type", Function),
|
|
268
|
+
__metadata("design:paramtypes", [Object, Function]),
|
|
269
|
+
__metadata("design:returntype", Promise)
|
|
270
|
+
], CloudbaseContainers.prototype, "callContainer", null);
|
|
271
|
+
return CloudbaseContainers;
|
|
272
|
+
}());
|
|
273
|
+
var component = {
|
|
274
|
+
name: COMPONENT_NAME,
|
|
275
|
+
namespace: 'container',
|
|
276
|
+
entity: function (config) {
|
|
277
|
+
if (this.containerInstance) {
|
|
278
|
+
printWarn(ERRORS.INVALID_OPERATION, 'every cloudbase instance should has only one container object');
|
|
279
|
+
return this.containerInstance;
|
|
280
|
+
}
|
|
281
|
+
var instance = new CloudbaseContainers(config);
|
|
282
|
+
this.containerInstance = instance;
|
|
283
|
+
this.callContainer = instance.callContainer.bind(instance);
|
|
284
|
+
return this.containerInstance;
|
|
285
|
+
},
|
|
286
|
+
};
|
|
287
|
+
try {
|
|
288
|
+
cloudbase.registerComponent(component);
|
|
289
|
+
}
|
|
290
|
+
catch (e) { }
|
|
291
|
+
function registerContainers(app) {
|
|
292
|
+
try {
|
|
293
|
+
app.registerComponent(component);
|
|
294
|
+
}
|
|
295
|
+
catch (e) {
|
|
296
|
+
console.warn(e);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
exports.registerContainers = registerContainers;
|
|
300
|
+
function getExportFunction(url, module, mode) {
|
|
301
|
+
if (mode === void 0) { mode = 'go'; }
|
|
302
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
303
|
+
function instantiateStreaming(resp, importObject, brotliCompressed) {
|
|
304
|
+
if (brotliCompressed === void 0) { brotliCompressed = false; }
|
|
305
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
306
|
+
var source, buffer;
|
|
307
|
+
return __generator(this, function (_a) {
|
|
308
|
+
switch (_a.label) {
|
|
309
|
+
case 0:
|
|
310
|
+
if (!(brotliCompressed || !WebAssembly.instantiateStreaming)) return [3, 3];
|
|
311
|
+
return [4, resp];
|
|
312
|
+
case 1: return [4, (_a.sent()).arrayBuffer()];
|
|
313
|
+
case 2:
|
|
314
|
+
source = _a.sent();
|
|
315
|
+
buffer = brotliCompressed ? (0, decompress_1.default)(new Int8Array(source)) : source;
|
|
316
|
+
return [2, WebAssembly.instantiate(buffer, importObject)];
|
|
317
|
+
case 3: return [2, WebAssembly.instantiateStreaming(resp, importObject)];
|
|
318
|
+
}
|
|
319
|
+
});
|
|
320
|
+
});
|
|
321
|
+
}
|
|
322
|
+
var importObject, go, brotliCompressed, reuslt;
|
|
323
|
+
return __generator(this, function (_a) {
|
|
324
|
+
switch (_a.label) {
|
|
325
|
+
case 0:
|
|
326
|
+
importObject = __assign({ env: {
|
|
327
|
+
memoryBase: 0,
|
|
328
|
+
tableBase: 0,
|
|
329
|
+
memory: new WebAssembly.Memory({
|
|
330
|
+
initial: 256,
|
|
331
|
+
}),
|
|
332
|
+
} }, module);
|
|
333
|
+
brotliCompressed = isBrotliCompressed(url);
|
|
334
|
+
if (mode === 'go') {
|
|
335
|
+
go = new go_wams_exec_1.default();
|
|
336
|
+
go._initedModulePromise = new Promise(function (resolve) {
|
|
337
|
+
go._initedModuleResolve = resolve;
|
|
338
|
+
});
|
|
339
|
+
importObject = __assign(__assign({}, go.importObject), { env: __assign(__assign({}, go.importObject.env), { exportModule: function (module) {
|
|
340
|
+
return go._initedModuleResolve(module);
|
|
341
|
+
} }) });
|
|
342
|
+
}
|
|
343
|
+
return [4, instantiateStreaming(fetch(url), importObject, brotliCompressed)];
|
|
344
|
+
case 1:
|
|
345
|
+
reuslt = _a.sent();
|
|
346
|
+
if (!(mode === 'go')) return [3, 3];
|
|
347
|
+
return [4, Promise.race([
|
|
348
|
+
go.run(reuslt.instance),
|
|
349
|
+
new Promise(function (resolve) { return setTimeout(function () {
|
|
350
|
+
resolve(null);
|
|
351
|
+
}, 500); }),
|
|
352
|
+
])];
|
|
353
|
+
case 2:
|
|
354
|
+
_a.sent();
|
|
355
|
+
return [2, { callContainer: window.callContainer, initContainer: window.initContainer }];
|
|
356
|
+
case 3: return [2, reuslt.instance.exports];
|
|
357
|
+
}
|
|
358
|
+
});
|
|
359
|
+
});
|
|
360
|
+
}
|
|
361
|
+
function isBrotliCompressed(url) {
|
|
362
|
+
var brotliCompressed = false;
|
|
363
|
+
var pathname = '';
|
|
364
|
+
try {
|
|
365
|
+
var a = document.createElement('a');
|
|
366
|
+
a.href = url;
|
|
367
|
+
pathname = a.pathname;
|
|
368
|
+
}
|
|
369
|
+
catch (e) {
|
|
370
|
+
try {
|
|
371
|
+
var res = new URL(url);
|
|
372
|
+
pathname = res === null || res === void 0 ? void 0 : res.pathname;
|
|
373
|
+
}
|
|
374
|
+
catch (e) {
|
|
375
|
+
pathname = url;
|
|
376
|
+
}
|
|
377
|
+
}
|
|
378
|
+
if (/\.br$/.test(pathname)) {
|
|
379
|
+
brotliCompressed = true;
|
|
380
|
+
}
|
|
381
|
+
return brotliCompressed;
|
|
382
|
+
}
|
|
383
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQUdBLGtEQUFnRTtBQUVoRSxpRUFBMEM7QUFFMUMsZ0VBQStCO0FBSXZCLElBQUEsVUFBVSxHQUFpQyxxQkFBUyxXQUExQyxFQUFFLE1BQU0sR0FBeUIscUJBQVMsT0FBbEMsRUFBRSxrQkFBa0IsR0FBSyxxQkFBUyxtQkFBZCxDQUFjO0FBQ3BELElBQUEsWUFBWSxHQUFnQixpQkFBSyxhQUFyQixFQUFFLFNBQVMsR0FBSyxpQkFBSyxVQUFWLENBQVU7QUFDakMsSUFBQSxvQkFBb0IsR0FBSyxtQkFBTyxxQkFBWixDQUFZO0FBRXhDLElBQU0sY0FBYyxHQUFHLFdBQVcsQ0FBQTtBQUtsQyxTQUFlLE9BQU8sQ0FBQyxFQWdCdEI7UUFmQyxHQUFHLFNBQUEsRUFDSCxjQUFjLEVBQWQsTUFBTSxtQkFBRyxLQUFLLEtBQUEsRUFDZCxjQUFXLEVBQVgsTUFBTSxtQkFBRyxFQUFFLEtBQUEsRUFDWCxJQUFJLFVBQUEsRUFDSixlQUFlLEVBQWYsT0FBTyxtQkFBRyxLQUFLLEtBQUEsRUFDZixnQkFBaUIsRUFBakIsUUFBUSxtQkFBRyxNQUFNLEtBQUEsRUFDakIsb0JBQXFCLEVBQXJCLFlBQVksbUJBQUcsTUFBTSxLQUFBOzs7O1lBVWYsT0FBTyxnQkFBUSxNQUFNLENBQUUsQ0FBQTtZQUU3QixJQUFJLE9BQU8sSUFBSSxLQUFLLFFBQVEsSUFBSSxDQUFDLENBQUMsSUFBSSxZQUFZLFdBQVcsSUFBSSxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUU7Z0JBQzFGLElBQUksQ0FBQyxPQUFPLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxPQUFPLENB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ICdAY2xvdWRiYXNlL3R5cGVzJ1xuaW1wb3J0IHsgSUNsb3VkYmFzZUNvbXBvbmVudCB9IGZyb20gJ0BjbG91ZGJhc2UvdHlwZXMvY29tcG9uZW50J1xuaW1wb3J0IHsgSUNhbGxDb250YWluZXJPcHRpb25zLCBJQ29udGlhbmVyQ29uZmlnIH0gZnJvbSAnQGNsb3VkYmFzZS90eXBlcy9jb250YWluZXInXG5pbXBvcnQgeyBjb25zdGFudHMsIHV0aWxzLCBoZWxwZXJzIH0gZnJvbSAnQGNsb3VkYmFzZS91dGlsaXRpZXMnXG4vLyBpbXBvcnQgYnJvdGxpUHJvbWlzZSBmcm9tICdicm90bGktZGVjLXdhc20nIC8vIEltcG9ydCB0aGUgZGVmYXVsdCBleHBvcnRcbmltcG9ydCBkZWNvbXByZXNzIGZyb20gJ2Jyb3RsaS9kZWNvbXByZXNzJ1xuXG5pbXBvcnQgR28gZnJvbSAnLi9nb193YW1zX2V4ZWMnXG5cbmRlY2xhcmUgY29uc3QgY2xvdWRiYXNlOiBJQ2xvdWRiYXNlXG5cbmNvbnN0IHsgZ2V0U2RrTmFtZSwgRVJST1JTLCBDT01NVU5JVFlfU0lURV9VUkwgfSA9IGNvbnN0YW50c1xuY29uc3QgeyBleGVjQ2FsbGJhY2ssIHByaW50V2FybiB9ID0gdXRpbHNcbmNvbnN0IHsgY2F0Y2hFcnJvcnNEZWNvcmF0b3IgfSA9IGhlbHBlcnNcblxuY29uc3QgQ09NUE9ORU5UX05BTUUgPSAnY29udGFpbmVyJ1xuXG4vKipcbiAqIOWwgeijheWvuem9kCB3eC5yZXF1ZXN0XG4gKi9cbmFzeW5jIGZ1bmN0aW9uIHJlcXVlc3Qoe1xuICB1cmwsXG4gIG1ldGhvZCA9ICdHRVQnLFxuICBoZWFkZXIgPSB7fSxcbiAgZGF0YSxcbiAgdGltZW91dCA9IDYwMDAwLFxuICBkYXRhVHlwZSA9ICdqc29uJyxcbiAgcmVzcG9uc2VUeXBlID0gJ3RleHQnLFxufToge1xuICB1cmw6IHN0cmluZ1xuICBkYXRhPzogc3RyaW5nIHwgb2JqZWN0IHwgQXJyYXlCdWZmZXJcbiAgaGVhZGVyPzogUmVjb3JkPHN0cmluZywgc3RyaW5nPlxuICB0aW1lb3V0PzogbnVtYmVyXG4gIG1ldGhvZD86IHN0cmluZ1xuICBkYXRhVHlwZT86ICdqc29uJyB8IHN0cmluZ1xuICByZXNwb25zZVR5cGU/OiAndGV4dCcgfCAnYXJyYXlCdWZmZXInXG59KSB7XG4gIGNvbnN0IGhlYWRlcnMgPSB7IC4uLmhlYWRlciB9XG5cbiAgaWYgKHR5cGVvZiBkYXRhID09PSAnb2JqZWN0JyAmJiAhKGRhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlciB8fCBBcnJheUJ1ZmZlci5pc1ZpZXcoZGF0YSkpKSB7XG4gICAgaWYgKCFoZWFkZXJzWydDb250ZW50LVR5cGUnXSAmJiAhaGVhZGVyc1snY29udGVudC10eXBlJ10pIHtcbiAgICAgIGhlYWRlcnNbJ0NvbnRlbnQtVHlwZSddID0gJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgfVxuICAgIHRyeSB7XG4gICAgICBkYXRhID0gSlNPTi5zdHJpbmdpZnkoZGF0YSlcbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICBjb2RlOiBFUlJPUlMuSU5WQUxJRF9QQVJBTVMsXG4gICAgICAgIG1zZzogYFske0NPTVBPTkVOVF9OQU1FfS5jYWxsQ29udGFpbmVyXSBpbnZhbGlkIGRhdGEgd2l0aCBjb250ZW50LXR5cGU6IGFwcGxpY2F0aW9uL2pzb25gLFxuICAgICAgfSksKVxuICAgIH1cbiAgfVxuXG4gIGNvbnN0IHsgc2lnbmFsLCBhYm9ydCB9ID0gbmV3IEFib3J0Q29udHJvbGxlcigpXG5cbiAgcmV0dXJuIFByb21pc2UucmFjZShbXG4gICAgbmV3IFByb21pc2UoKF8sIHJlamVjdCkgPT4ge1xuICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgIGNvbnN0IGVycm9yID0gbmV3IEVycm9yKCfor7fmsYLotoXml7YnKVxuICAgICAgICA7KGVycm9yIGFzIGFueSkuY29kZSA9ICdTRVJWRVJfVElNRU9VVCdcbiAgICAgICAgcmVqZWN0KGVycm9yKVxuICAgICAgICBhYm9ydCgpXG4gICAgICB9LCB0aW1lb3V0KVxuICAgIH0pLFxuICAgIGZldGNoKHVybCwge1xuICAgICAgbWV0aG9kLFxuICAgICAgaGVhZGVycyxcbiAgICAgIGJvZHk6IGRhdGEsXG4gICAgICBzaWduYWwsXG4gICAgfSkudGhlbigocmVzcG9uc2UpID0+IHtcbiAgICAgIGlmIChyZXNwb25zZVR5cGUgPT09ICdhcnJheUJ1ZmZlcicpIHtcbiAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmFycmF5QnVmZmVyKClcbiAgICAgIH1cbiAgICAgIGlmIChkYXRhVHlwZSA9PT0gJ2pzb24nKSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKVxuICAgICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbJHtnZXRTZGtOYW1lKCl9XVske0VSUk9SUy5JTlZBTElEX1BBUkFNU31dWyR7Q09NUE9ORU5UX05BTUV9LmNhbGxDb250YWluZXJdIHJlc3BvbnNlIGRhdGEgbXVzdCBiZSBqc29uYCwpXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiByZXNwb25zZS50ZXh0KClcbiAgICB9KSxcbiAgXSlcbn1cblxuY2xhc3MgSW52YWxpZVBhcmFtc0Vycm9yIGV4dGVuZHMgRXJyb3Ige1xuICBjb25zdHJ1Y3RvcihzY29wZSwgbWVzc2FnZSkge1xuICAgIGNvbnN0IG1zZyA9IEpTT04uc3RyaW5naWZ5KHtcbiAgICAgIGNvZGU6IEVSUk9SUy5JTlZBTElEX1BBUkFNUyxcbiAgICAgIG1zZzogYFske3Njb3BlfV0gJHttZXNzYWdlfWAsXG4gICAgfSlcbiAgICBzdXBlcihtc2cpXG4gIH1cbn1cblxuaW50ZXJmYWNlIElDYWxsVGNiQ29udGFpbmVyT3B0aW9ucyBleHRlbmRzIElDYWxsQ29udGFpbmVyT3B0aW9ucyB7XG4gIHN1Y2Nlc3M6IChyZXM6IHsgc3RhdHVzQ29kZTogc3RyaW5nIHwgbnVtYmVyOyBoZWFkZXI6IElDYWxsQ29udGFpbmVyT3B0aW9uc1snaGVhZGVyJ107IGRhdGE6IGFueSB9KSA9PiB2b2lkXG4gIGZhaWw6IChyZXM6IHsgZGF0YTogeyBjb2RlOiBudW1iZXI7IG1lc3NhZ2U6IHN0cmluZyB9IH0pID0+IHZvaWRcbn1cblxuaW50ZXJmYWNlIElJbml0VGNiQ29udGFpbmVyT3B0aW9ucyB7XG4gIGNvbmZpZzogT21pdDxJQ29udGlhbmVyQ29uZmlnLCAnd2FzbVVybCc+XG4gIHN1Y2Nlc3M6IChyZXM6IHsgc3RhdHVzQ29kZTogc3RyaW5nIHwgbnVtYmVyOyBoZWFkZXI6IElDYWxsQ29udGFpbmVyT3B0aW9uc1snaGVhZGVyJ107IGRhdGE6IGFueSB9KSA9PiB2b2lkXG4gIGZhaWw6IChyZXM6IHsgZGF0YTogeyBjb2RlOiBudW1iZXI7IG1lc3NhZ2U6IHN0cmluZyB9IH0pID0+IHZvaWRcbn1cblxuY2xhc3MgQ2xvdWRiYXNlQ29udGFpbmVycyB7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlnOiBJQ29udGlhbmVyQ29uZmlnXG4gIHByaXZhdGUgd2FzbTogUHJvbWlzZTxXZWJBc3NlbWJseS5FeHBvcnRzPlxuICBwcml2YXRlIGNvbnRhaW5lckluaXRQcm9taXNlOiAvKiBQcm9taXNlPGFueT4qLyBhbnkgfCBudWxsXG5cbiAgY29uc3RydWN0b3IoY29uZmlnOiBJQ29udGlhbmVyQ29uZmlnKSB7XG4gICAgdGhpcy5jb25maWcgPSBjb25maWdcbiAgICBpZiAoIXRoaXMuY29uZmlnLndhc21VcmwpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgIGNvZGU6IEVSUk9SUy5JTlZBTElEX1BBUkFNUyxcbiAgICAgICAgbXNnOiBgWyR7Q09NUE9ORU5UX05BTUV9XSDnvLrlsJEgd2FzbVVybGAsXG4gICAgICB9KSwpXG4gICAgfVxuICAgIHRoaXMud2FzbSA9IGdldEV4cG9ydEZ1bmN0aW9uKHRoaXMuY29uZmlnLndhc21VcmwsIHtcbiAgICAgIHV0aWxzOiB7XG4gICAgICAgIGluZm8oZSkge1xuICAgICAgICAgIGNvbnNvbGUubG9nKGUpXG4gICAgICAgIH0sXG4gICAgICAgIHJlcXVlc3QsXG4gICAgICB9LFxuICAgIH0pXG4gIH1cblxuICBAY2F0Y2hFcnJvcnNEZWNvcmF0b3Ioe1xuICAgIGN1c3RvbUluZm86IHtcbiAgICAgIGNsYXNzTmFtZTogJ0Nsb3VkYmFzZScsXG4gICAgICBtZXRob2ROYW1lOiAnY2FsbENvbnRhaW5lcicsXG4gICAgfSxcbiAgICB0aXRsZTogJ+iwg+eUqOWksei0pScsXG4gICAgbWVzc2FnZXM6IFtcbiAgICAgICfor7fnoa7orqTku6XkuIvlkITpobnvvJonLFxuICAgICAgJyAgMSAtIOiwg+eUqCBjYWxsQ29udGFpbmVyKCkg55qE6K+t5rOV5oiW5Y+C5pWw5piv5ZCm5q2j56GuJyxcbiAgICAgICcgIDIgLSDln5/lkI0gJiDot6/lvoTmmK/lkKblrZjlnKgnLFxuICAgICAgYOWmguaenOmXrumimOS+neeEtuWtmOWcqO+8jOW7uuiuruWIsOWumOaWuemXruetlOekvuWMuuaPkOmXruaIluWvu+aJvuW4ruWKqe+8miR7Q09NTVVOSVRZX1NJVEVfVVJMfWAsXG4gICAgXSxcbiAgfSlcbiAgcHVibGljIGFzeW5jIGNhbGxDb250YWluZXIob3B0aW9uczogSUNhbGxDb250YWluZXJPcHRpb25zLCBjYWxsYmFjaz86IEZ1bmN0aW9uKSB7XG4gICAgYXdhaXQgdGhpcy5pbml0Q29udGFpbmVyKHRoaXMuY29uZmlnKVxuICAgIGNvbnN0IHsgY2FsbENvbnRhaW5lciB9OiB7IGNhbGxDb250YWluZXI6IChvcHRpb25zOiBJQ2FsbFRjYkNvbnRhaW5lck9wdGlvbnMpID0+IHZvaWQgfSA9IChhd2FpdCB0aGlzLndhc20pIGFzIGFueVxuXG4gICAgY29uc3Qge1xuICAgICAgdXJsLFxuICAgICAgbWV0aG9kID0gJ0dFVCcsXG4gICAgICBoZWFkZXIgPSB7fSxcbiAgICAgIGRhdGEsXG4gICAgICB0aW1lb3V0ID0gNjAwMDAsXG4gICAgICBkYXRhVHlwZSA9ICdqc29uJyxcbiAgICAgIHJlc3BvbnNlVHlwZSA9ICd0ZXh0JyxcbiAgICAgIC4uLnJlc3RPcHRpb25zXG4gICAgfSA9IG9wdGlvbnNcblxuICAgIGlmICghdXJsKSB7XG4gICAgICB0aHJvdyBuZXcgSW52YWxpZVBhcmFtc0Vycm9yKGAke0NPTVBPTkVOVF9OQU1FfS5jYWxsQ29udGFpbmVyYCwgJ2ludmFsaWQgcmVxdWVzdCB1cmwnKVxuICAgIH1cblxuICAgIC8vIEB0cy1pZ25vcmVcblxuICAgIHRyeSB7XG4gICAgICBjb25zdCByZXMgPSBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGNvbnN0IHBhcmFtcyA9IHsgdXJsLCBtZXRob2QsIGhlYWRlciwgZGF0YSwgdGltZW91dCwgZGF0YVR5cGUsIHJlc3BvbnNlVHlwZSwgLi4ucmVzdE9wdGlvbnMgfVxuXG4gICAgICAgIGNhbGxDb250YWluZXIoe1xuICAgICAgICAgIC4uLnBhcmFtcyxcbiAgICAgICAgICBzdWNjZXNzOiByZXNvbHZlLFxuICAgICAgICAgIGZhaWw6IChyZXMpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgZGF0YSB9ID0gcmVzIHx8IHt9XG4gICAgICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBFcnJvcihkYXRhPy5tZXNzYWdlIHx8ICdjYWxsIGNvbnRhaW5lciBlcnJvcicpXG4gICAgICAgICAgICA7KGVycm9yIGFzIGFueSkuY29kZSA9IGRhdGE/LmNvZGUgfHwgJ1VOS05PV05fRVJST1InXG4gICAgICAgICAgICByZWplY3QoZXJyb3IpXG4gICAgICAgICAgfSxcbiAgICAgICAgfSlcbiAgICAgIH0pXG4gICAgICByZXR1cm4gZXhlY0NhbGxiYWNrKGNhbGxiYWNrLCBudWxsLCByZXMpXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgZXhlY0NhbGxiYWNrKGNhbGxiYWNrLCBlKVxuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGluaXRDb250YWluZXIoY29uZmlnOiBPbWl0PElDb250aWFuZXJDb25maWcsICd3YXNtVXJsJz4pIHtcbiAgICBjb25zdCB7IGluaXRDb250YWluZXIgfTogeyBpbml0Q29udGFpbmVyOiAob3B0aW9uczogSUluaXRUY2JDb250YWluZXJPcHRpb25zKSA9PiB2b2lkIH0gPSAoYXdhaXQgdGhpcy53YXNtKSBhcyBhbnlcbiAgICBpZiAoIXRoaXMuY29udGFpbmVySW5pdFByb21pc2UpIHtcbiAgICAgIHRoaXMuY29udGFpbmVySW5pdFByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgICAgIGluaXRDb250YWluZXIoe1xuICAgICAgICAgIGNvbmZpZyxcbiAgICAgICAgICBzdWNjZXNzKHJlcykge1xuICAgICAgICAgICAgaWYgKFN0cmluZyhyZXMuc3RhdHVzQ29kZSkgIT09ICcyMDAnKSB7XG4gICAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoSlNPTi5zdHJpbmdpZnkoe1xuICAgICAgICAgICAgICAgIGNvZGU6ICdJTklUX0VSUk9SJyxcbiAgICAgICAgICAgICAgICBtc2c6IGBbJHtDT01QT05FTlRfTkFNRX1dICR7cmVzLnN0YXR1c0NvZGV9ICR7SlNPTi5zdHJpbmdpZnkocmVzLmRhdGEpfWAsXG4gICAgICAgICAgICAgIH0pLCksKVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzb2x2ZShyZXMpXG4gICAgICAgICAgfSxcbiAgICAgICAgICBmYWlsKHJlcykge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcihKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgICAgIGNvZGU6ICdJTklUX0VSUk9SJyxcbiAgICAgICAgICAgICAgbXNnOiBgWyR7Q09NUE9ORU5UX05BTUV9XSAke0pTT04uc3RyaW5naWZ5KHJlcy5kYXRhKX1gLFxuICAgICAgICAgICAgfSksKSwpXG4gICAgICAgICAgICB0aGlzLl9jb250YWluZXJJbml0UHJvbWlzID0gbnVsbFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pXG4gICAgICB9KVxuICAgIH1cblxuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lckluaXRQcm9taXNlXG4gIH1cbn1cblxuY29uc3QgY29tcG9uZW50OiBJQ2xvdWRiYXNlQ29tcG9uZW50ID0ge1xuICBuYW1lOiBDT01QT05FTlRfTkFNRSxcbiAgbmFtZXNwYWNlOiAnY29udGFpbmVyJyxcbiAgZW50aXR5KGNvbmZpZzogSUNvbnRpYW5lckNvbmZpZykge1xuICAgIGlmICh0aGlzLmNvbnRhaW5lckluc3RhbmNlKSB7XG4gICAgICBwcmludFdhcm4oRVJST1JTLklOVkFMSURfT1BFUkFUSU9OLCAnZXZlcnkgY2xvdWRiYXNlIGluc3RhbmNlIHNob3VsZCBoYXMgb25seSBvbmUgY29udGFpbmVyIG9iamVjdCcpXG4gICAgICByZXR1cm4gdGhpcy5jb250YWluZXJJbnN0YW5jZVxuICAgIH1cblxuICAgIGNvbnN0IGluc3RhbmNlID0gbmV3IENsb3VkYmFzZUNvbnRhaW5lcnMoY29uZmlnKVxuICAgIHRoaXMuY29udGFpbmVySW5zdGFuY2UgPSBpbnN0YW5jZVxuICAgIHRoaXMuY2FsbENvbnRhaW5lciA9IGluc3RhbmNlLmNhbGxDb250YWluZXIuYmluZChpbnN0YW5jZSlcblxuICAgIHJldHVybiB0aGlzLmNvbnRhaW5lckluc3RhbmNlXG4gIH0sXG59XG50cnkge1xuICBjbG91ZGJhc2UucmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50KVxufSBjYXRjaCAoZSkge31cblxuZXhwb3J0IGZ1bmN0aW9uIHJlZ2lzdGVyQ29udGFpbmVycyhhcHA6IFBpY2s8SUNsb3VkYmFzZSwgJ3JlZ2lzdGVyQ29tcG9uZW50Jz4pIHtcbiAgdHJ5IHtcbiAgICBhcHAucmVnaXN0ZXJDb21wb25lbnQoY29tcG9uZW50KVxuICB9IGNhdGNoIChlKSB7XG4gICAgY29uc29sZS53YXJuKGUpXG4gIH1cbn1cblxuYXN5bmMgZnVuY3Rpb24gZ2V0RXhwb3J0RnVuY3Rpb24odXJsLCBtb2R1bGUsIG1vZGUgPSAnZ28nKSB7XG4gIGFzeW5jIGZ1bmN0aW9uIGluc3RhbnRpYXRlU3RyZWFtaW5nKHJlc3AsIGltcG9ydE9iamVjdCwgYnJvdGxpQ29tcHJlc3NlZCA9IGZhbHNlKSB7XG4gICAgaWYgKGJyb3RsaUNvbXByZXNzZWQgfHwgIVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlU3RyZWFtaW5nKSB7XG4gICAgICBjb25zdCBzb3VyY2UgPSBhd2FpdCAoYXdhaXQgcmVzcCkuYXJyYXlCdWZmZXIoKVxuICAgICAgY29uc3QgYnVmZmVyID0gYnJvdGxpQ29tcHJlc3NlZCA/IGRlY29tcHJlc3MobmV3IEludDhBcnJheShzb3VyY2UpKSA6IHNvdXJjZVxuICAgICAgcmV0dXJuIFdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKGJ1ZmZlciwgaW1wb3J0T2JqZWN0KVxuICAgIH1cblxuICAgIHJldHVybiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhyZXNwLCBpbXBvcnRPYmplY3QpXG4gIH1cblxuICBsZXQgaW1wb3J0T2JqZWN0ID0ge1xuICAgIGVudjoge1xuICAgICAgbWVtb3J5QmFzZTogMCxcbiAgICAgIHRhYmxlQmFzZTogMCxcbiAgICAgIG1lbW9yeTogbmV3IFdlYkFzc2VtYmx5Lk1lbW9yeSh7XG4gICAgICAgIGluaXRpYWw6IDI1NixcbiAgICAgIH0pLFxuICAgICAgLy8gdGFibGU6IG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7XG4gICAgICAvLyAgIGluaXRpYWw6IDIsXG4gICAgICAvLyAgIGVsZW1lbnQ6ICdhbnlmdW5jJyxcbiAgICAgIC8vIH0pLFxuICAgIH0sXG4gICAgLi4ubW9kdWxlLFxuICB9XG4gIGxldCBnb1xuICBjb25zdCBicm90bGlDb21wcmVzc2VkID0gaXNCcm90bGlDb21wcmVzc2VkKHVybClcblxuICBpZiAobW9kZSA9PT0gJ2dvJykge1xuICAgIGdvID0gbmV3IEdvKClcbiAgICBnby5faW5pdGVkTW9kdWxlUHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlKSA9PiB7XG4gICAgICBnby5faW5pdGVkTW9kdWxlUmVzb2x2ZSA9IHJlc29sdmVcbiAgICB9KVxuICAgIGltcG9ydE9iamVjdCA9IHtcbiAgICAgIC4uLmdvLmltcG9ydE9iamVjdCxcbiAgICAgIGVudjoge1xuICAgICAgICAuLi5nby5pbXBvcnRPYmplY3QuZW52LFxuICAgICAgICBleHBvcnRNb2R1bGUobW9kdWxlKSB7XG4gICAgICAgICAgcmV0dXJuIGdvLl9pbml0ZWRNb2R1bGVSZXNvbHZlKG1vZHVsZSlcbiAgICAgICAgfSxcbiAgICAgIH0sXG4gICAgfVxuICB9XG5cbiAgY29uc3QgcmV1c2x0ID0gYXdhaXQgaW5zdGFudGlhdGVTdHJlYW1pbmcoZmV0Y2godXJsKSwgaW1wb3J0T2JqZWN0LCBicm90bGlDb21wcmVzc2VkKVxuXG4gIGlmIChtb2RlID09PSAnZ28nKSB7XG4gICAgYXdhaXQgUHJvbWlzZS5yYWNlKFtcbiAgICAgIGdvLnJ1bihyZXVzbHQuaW5zdGFuY2UpLFxuICAgICAgbmV3IFByb21pc2UocmVzb2x2ZSA9PiBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgcmVzb2x2ZShudWxsKVxuICAgICAgfSwgNTAwKSwpLFxuICAgIF0pXG5cbiAgICByZXR1cm4geyBjYWxsQ29udGFpbmVyOiAod2luZG93IGFzIGFueSkuY2FsbENvbnRhaW5lciwgaW5pdENvbnRhaW5lcjogKHdpbmRvdyBhcyBhbnkpLmluaXRDb250YWluZXIgfVxuICB9XG5cbiAgLy8gaWYgKG1vZGUgPT09ICdnbycpIHtcbiAgLy8gICBnby5ydW4ocmV1c2x0Lmluc3RhbmNlKVxuICAvLyAgIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGdvLl9pbml0ZWRNb2R1bGVQcm9taXNlXG4gIC8vICAgcmV0dXJuIG1vZHVsZVxuICAvLyB9XG5cbiAgcmV0dXJuIHJldXNsdC5pbnN0YW5jZS5leHBvcnRzXG59XG5cbmZ1bmN0aW9uIGlzQnJvdGxpQ29tcHJlc3NlZCh1cmwpIHtcbiAgbGV0IGJyb3RsaUNvbXByZXNzZWQgPSBmYWxzZVxuXG4gIGxldCBwYXRobmFtZSA9ICcnXG4gIHRyeSB7XG4gICAgY29uc3QgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKVxuICAgIGEuaHJlZiA9IHVybFxuICAgIHBhdGhuYW1lID0gYS5wYXRobmFtZVxuICB9IGNhdGNoIChlKSB7XG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IHJlcyA9IG5ldyBVUkwodXJsKVxuICAgICAgcGF0aG5hbWUgPSByZXM/LnBhdGhuYW1lXG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgcGF0aG5hbWUgPSB1cmxcbiAgICB9XG4gIH1cblxuICBpZiAoL1xcLmJyJC8udGVzdChwYXRobmFtZSkpIHtcbiAgICBicm90bGlDb21wcmVzc2VkID0gdHJ1ZVxuICB9XG4gIHJldHVybiBicm90bGlDb21wcmVzc2VkXG59XG4iXX0=
|