appscms-tools-theme 3.1.8 → 3.1.9

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,1868 @@
1
+ /* Partytown 0.7.5 - MIT builder.io */
2
+ (self => {
3
+ const WinIdKey = Symbol();
4
+ const InstanceIdKey = Symbol();
5
+ const InstanceDataKey = Symbol();
6
+ const NamespaceKey = Symbol();
7
+ const ApplyPathKey = Symbol();
8
+ const InstanceStateKey = Symbol();
9
+ const HookContinue = Symbol();
10
+ const HookPrevent = Symbol();
11
+ const webWorkerInstances = new Map;
12
+ const webWorkerRefsByRefId = {};
13
+ const webWorkerRefIdsByRef = new WeakMap;
14
+ const postMessages = [];
15
+ const webWorkerCtx = {};
16
+ const webWorkerlocalStorage = new Map;
17
+ const webWorkerSessionStorage = new Map;
18
+ const environments = {};
19
+ const cachedDimensions = new Map;
20
+ const cachedStructure = new Map;
21
+ const commaSplit = str => str.split(",");
22
+ const partytownLibUrl = url => {
23
+ url = webWorkerCtx.$libPath$ + url;
24
+ if (new URL(url).origin != location.origin) {
25
+ throw "Invalid " + url;
26
+ }
27
+ return url;
28
+ };
29
+ const getterDimensionPropNames = commaSplit("clientWidth,clientHeight,clientTop,clientLeft,innerWidth,innerHeight,offsetWidth,offsetHeight,offsetTop,offsetLeft,outerWidth,outerHeight,pageXOffset,pageYOffset,scrollWidth,scrollHeight,scrollTop,scrollLeft");
30
+ const elementStructurePropNames = commaSplit("childElementCount,children,firstElementChild,lastElementChild,nextElementSibling,previousElementSibling");
31
+ const structureChangingMethodNames = commaSplit("insertBefore,remove,removeChild,replaceChild");
32
+ const dimensionChangingSetterNames = commaSplit("className,width,height,hidden,innerHTML,innerText,textContent");
33
+ const dimensionChangingMethodNames = commaSplit("setAttribute,setAttributeNS,setProperty");
34
+ const eventTargetMethods = commaSplit("addEventListener,dispatchEvent,removeEventListener");
35
+ const nonBlockingMethods = eventTargetMethods.concat(dimensionChangingMethodNames, commaSplit("add,observe,remove,unobserve"));
36
+ const IS_TAG_REG = /^[A-Z_]([A-Z0-9-]*[A-Z0-9])?$/;
37
+ const noop = () => {};
38
+ const len = obj => obj.length;
39
+ const getConstructorName = obj => {
40
+ var _a, _b, _c;
41
+ try {
42
+ const constructorName = null === (_a = null == obj ? void 0 : obj.constructor) || void 0 === _a ? void 0 : _a.name;
43
+ if (constructorName) {
44
+ return constructorName;
45
+ }
46
+ } catch (e) {}
47
+ try {
48
+ const zoneJsConstructorName = null === (_c = null === (_b = null == obj ? void 0 : obj.__zone_symbol__originalInstance) || void 0 === _b ? void 0 : _b.constructor) || void 0 === _c ? void 0 : _c.name;
49
+ if (zoneJsConstructorName) {
50
+ return zoneJsConstructorName;
51
+ }
52
+ } catch (e) {}
53
+ return "";
54
+ };
55
+ const EMPTY_ARRAY = [];
56
+ const randomId = () => Math.round(Math.random() * Number.MAX_SAFE_INTEGER).toString(36);
57
+ const SCRIPT_TYPE = "text/partytown";
58
+ const defineProperty = (obj, memberName, descriptor) => Object.defineProperty(obj, memberName, {
59
+ ...descriptor,
60
+ configurable: true
61
+ });
62
+ const defineConstructorName = (Cstr, value) => defineProperty(Cstr, "name", {
63
+ value: value
64
+ });
65
+ const definePrototypeProperty = (Cstr, memberName, descriptor) => defineProperty(Cstr.prototype, memberName, descriptor);
66
+ const definePrototypePropertyDescriptor = (Cstr, propertyDescriptorMap) => Object.defineProperties(Cstr.prototype, propertyDescriptorMap);
67
+ const definePrototypeValue = (Cstr, memberName, value) => definePrototypeProperty(Cstr, memberName, {
68
+ value: value,
69
+ writable: true
70
+ });
71
+ const hasInstanceStateValue = (instance, stateKey) => stateKey in instance[InstanceStateKey];
72
+ const getInstanceStateValue = (instance, stateKey) => instance[InstanceStateKey][stateKey];
73
+ const setInstanceStateValue = (instance, stateKey, stateValue) => instance[InstanceStateKey][stateKey] = stateValue;
74
+ const setWorkerRef = (ref, refId) => {
75
+ if (!(refId = webWorkerRefIdsByRef.get(ref))) {
76
+ webWorkerRefIdsByRef.set(ref, refId = randomId());
77
+ webWorkerRefsByRefId[refId] = ref;
78
+ }
79
+ return refId;
80
+ };
81
+ const getOrCreateNodeInstance = (winId, instanceId, nodeName, namespace, instance) => {
82
+ instance = webWorkerInstances.get(instanceId);
83
+ if (!instance && nodeName && environments[winId]) {
84
+ instance = environments[winId].$createNode$(nodeName, instanceId, namespace);
85
+ webWorkerInstances.set(instanceId, instance);
86
+ }
87
+ return instance;
88
+ };
89
+ const definePrototypeNodeType = (Cstr, nodeType) => definePrototypeValue(Cstr, "nodeType", nodeType);
90
+ const cachedTreeProps = (Cstr, treeProps) => treeProps.map((propName => definePrototypeProperty(Cstr, propName, {
91
+ get() {
92
+ let cacheKey = getInstanceCacheKey(this, propName);
93
+ let result = cachedStructure.get(cacheKey);
94
+ if (!result) {
95
+ result = getter(this, [ propName ]);
96
+ cachedStructure.set(cacheKey, result);
97
+ }
98
+ return result;
99
+ }
100
+ })));
101
+ const getInstanceCacheKey = (instance, memberName, args) => [ instance[WinIdKey], instance[InstanceIdKey], memberName, ...(args || EMPTY_ARRAY).map((arg => String(arg && arg[WinIdKey] ? arg[InstanceIdKey] : arg))) ].join(".");
102
+ const cachedProps = (Cstr, propNames) => commaSplit(propNames).map((propName => definePrototypeProperty(Cstr, propName, {
103
+ get() {
104
+ hasInstanceStateValue(this, propName) || setInstanceStateValue(this, propName, getter(this, [ propName ]));
105
+ return getInstanceStateValue(this, propName);
106
+ },
107
+ set(val) {
108
+ getInstanceStateValue(this, propName) !== val && setter(this, [ propName ], val);
109
+ setInstanceStateValue(this, propName, val);
110
+ }
111
+ })));
112
+ const cachedDimensionProps = Cstr => getterDimensionPropNames.map((propName => definePrototypeProperty(Cstr, propName, {
113
+ get() {
114
+ const dimension = cachedDimensions.get(getInstanceCacheKey(this, propName));
115
+ if ("number" == typeof dimension) {
116
+ return dimension;
117
+ }
118
+ const groupedDimensions = getter(this, [ propName ], getterDimensionPropNames);
119
+ if (groupedDimensions && "object" == typeof groupedDimensions) {
120
+ Object.entries(groupedDimensions).map((([dimensionPropName, value]) => cachedDimensions.set(getInstanceCacheKey(this, dimensionPropName), value)));
121
+ return groupedDimensions[propName];
122
+ }
123
+ return groupedDimensions;
124
+ }
125
+ })));
126
+ const cachedDimensionMethods = (Cstr, dimensionMethodNames) => dimensionMethodNames.map((methodName => {
127
+ Cstr.prototype[methodName] = function(...args) {
128
+ let cacheKey = getInstanceCacheKey(this, methodName, args);
129
+ let dimensions = cachedDimensions.get(cacheKey);
130
+ if (!dimensions) {
131
+ dimensions = callMethod(this, [ methodName ], args);
132
+ cachedDimensions.set(cacheKey, dimensions);
133
+ }
134
+ return dimensions;
135
+ };
136
+ }));
137
+ const serializeForMain = ($winId$, $instanceId$, value, added, type) => void 0 !== value && (type = typeof value) ? "string" === type || "boolean" === type || "number" === type || null == value ? [ 0, value ] : "function" === type ? [ 4, {
138
+ $winId$: $winId$,
139
+ $instanceId$: $instanceId$,
140
+ $refId$: setWorkerRef(value)
141
+ } ] : (added = added || new Set) && Array.isArray(value) ? added.has(value) ? [ 1, [] ] : added.add(value) && [ 1, value.map((v => serializeForMain($winId$, $instanceId$, v, added))) ] : "object" === type ? value[InstanceIdKey] ? [ 3, [ value[WinIdKey], value[InstanceIdKey] ] ] : value instanceof Event ? [ 5, serializeObjectForMain($winId$, $instanceId$, value, false, added) ] : supportsTrustedHTML && value instanceof TrustedHTML ? [ 0, value.toString() ] : value instanceof ArrayBuffer ? [ 8, value ] : ArrayBuffer.isView(value) ? [ 9, value.buffer, getConstructorName(value) ] : [ 2, serializeObjectForMain($winId$, $instanceId$, value, true, added) ] : void 0 : value;
142
+ const supportsTrustedHTML = "undefined" != typeof TrustedHTML;
143
+ const serializeObjectForMain = (winId, instanceId, obj, includeFunctions, added, serializedObj, propName, propValue) => {
144
+ serializedObj = {};
145
+ if (!added.has(obj)) {
146
+ added.add(obj);
147
+ for (propName in obj) {
148
+ propValue = obj[propName];
149
+ (includeFunctions || "function" != typeof propValue) && (serializedObj[propName] = serializeForMain(winId, instanceId, propValue, added));
150
+ }
151
+ }
152
+ return serializedObj;
153
+ };
154
+ const serializeInstanceForMain = (instance, value) => instance ? serializeForMain(instance[WinIdKey], instance[InstanceIdKey], value) : [ 0, value ];
155
+ const deserializeFromMain = (winId, instanceId, applyPath, serializedValueTransfer, serializedType, serializedValue, obj, key) => {
156
+ if (serializedValueTransfer) {
157
+ serializedType = serializedValueTransfer[0];
158
+ serializedValue = serializedValueTransfer[1];
159
+ if (0 === serializedType || 11 === serializedType || 12 === serializedType) {
160
+ return serializedValue;
161
+ }
162
+ if (4 === serializedType) {
163
+ return deserializeRefFromMain(applyPath, serializedValue);
164
+ }
165
+ if (6 === serializedType) {
166
+ return winId && applyPath.length > 0 ? (...args) => callMethod(environments[winId].$window$, applyPath, args, 1) : noop;
167
+ }
168
+ if (3 === serializedType) {
169
+ return getOrCreateSerializedInstance(serializedValue);
170
+ }
171
+ if (7 === serializedType) {
172
+ return new NodeList(serializedValue.map(getOrCreateSerializedInstance));
173
+ }
174
+ if (10 === serializedType) {
175
+ return new Attr(serializedValue);
176
+ }
177
+ if (1 === serializedType) {
178
+ return serializedValue.map((v => deserializeFromMain(winId, instanceId, applyPath, v)));
179
+ }
180
+ if (14 === serializedType) {
181
+ return new CustomError(serializedValue);
182
+ }
183
+ obj = {};
184
+ for (key in serializedValue) {
185
+ obj[key] = deserializeFromMain(winId, instanceId, [ ...applyPath, key ], serializedValue[key]);
186
+ }
187
+ if (13 === serializedType) {
188
+ return new environments[winId].$window$.CSSStyleDeclaration(winId, instanceId, applyPath, obj);
189
+ }
190
+ if (5 === serializedType) {
191
+ if ("message" === obj.type && obj.origin) {
192
+ let postMessageKey = JSON.stringify(obj.data);
193
+ let postMessageData = postMessages.find((pm => pm.$data$ === postMessageKey));
194
+ let env;
195
+ if (postMessageData) {
196
+ env = environments[postMessageData.$winId$];
197
+ if (env) {
198
+ obj.source = env.$window$;
199
+ obj.origin = env.$location$.origin;
200
+ }
201
+ }
202
+ }
203
+ return new Proxy(new Event(obj.type, obj), {
204
+ get: (target, propName) => propName in obj ? obj[propName] : "function" == typeof target[String(propName)] ? noop : target[String(propName)]
205
+ });
206
+ }
207
+ if (2 === serializedType) {
208
+ return obj;
209
+ }
210
+ }
211
+ };
212
+ const getOrCreateSerializedInstance = ([winId, instanceId, nodeName]) => instanceId === winId && environments[winId] ? environments[winId].$window$ : getOrCreateNodeInstance(winId, instanceId, nodeName);
213
+ const deserializeRefFromMain = (applyPath, {$winId$: $winId$, $instanceId$: $instanceId$, $nodeName$: $nodeName$, $refId$: $refId$}) => {
214
+ webWorkerRefsByRefId[$refId$] || webWorkerRefIdsByRef.set(webWorkerRefsByRefId[$refId$] = function(...args) {
215
+ const instance = getOrCreateNodeInstance($winId$, $instanceId$, $nodeName$);
216
+ return callMethod(instance, applyPath, args);
217
+ }, $refId$);
218
+ return webWorkerRefsByRefId[$refId$];
219
+ };
220
+ class CustomError extends Error {
221
+ constructor(errorObject) {
222
+ super(errorObject.message);
223
+ this.name = errorObject.name;
224
+ this.message = errorObject.message;
225
+ this.stack = errorObject.stack;
226
+ }
227
+ }
228
+ class NodeList {
229
+ constructor(nodes) {
230
+ (this._ = nodes).map(((node, index) => this[index] = node));
231
+ }
232
+ entries() {
233
+ return this._.entries();
234
+ }
235
+ forEach(cb, thisArg) {
236
+ this._.map(cb, thisArg);
237
+ }
238
+ item(index) {
239
+ return this[index];
240
+ }
241
+ keys() {
242
+ return this._.keys();
243
+ }
244
+ get length() {
245
+ return len(this._);
246
+ }
247
+ values() {
248
+ return this._.values();
249
+ }
250
+ [Symbol.iterator]() {
251
+ return this._[Symbol.iterator]();
252
+ }
253
+ }
254
+ const Attr = class {
255
+ constructor(serializedAttr) {
256
+ this.name = serializedAttr[0];
257
+ this.value = serializedAttr[1];
258
+ }
259
+ get nodeName() {
260
+ return this.name;
261
+ }
262
+ get nodeType() {
263
+ return 2;
264
+ }
265
+ };
266
+ const warnCrossOrgin = (apiType, apiName, env) => console.warn(`Partytown unable to ${apiType} cross-origin ${apiName}: ` + env.$location$);
267
+ const logWorker = (msg, winId) => {
268
+ try {
269
+ const config = webWorkerCtx.$config$;
270
+ if (config.logStackTraces) {
271
+ const frames = (new Error).stack.split("\n");
272
+ const i = frames.findIndex((f => f.includes("logWorker")));
273
+ msg += "\n" + frames.slice(i + 1).join("\n");
274
+ }
275
+ let prefix;
276
+ let color;
277
+ if (winId) {
278
+ prefix = `Worker (${normalizedWinId(winId)}) 🎉`;
279
+ color = winColor(winId);
280
+ } else {
281
+ prefix = self.name;
282
+ color = "#9844bf";
283
+ }
284
+ if (webWorkerCtx.lastLog !== msg) {
285
+ webWorkerCtx.lastLog = msg;
286
+ console.debug.apply(console, [ `%c${prefix}`, `background: ${color}; color: white; padding: 2px 3px; border-radius: 2px; font-size: 0.8em;`, msg ]);
287
+ }
288
+ } catch (e) {}
289
+ };
290
+ const winIds = [];
291
+ const normalizedWinId = winId => {
292
+ winIds.includes(winId) || winIds.push(winId);
293
+ return winIds.indexOf(winId) + 1;
294
+ };
295
+ const winColor = winId => {
296
+ const colors = [ "#00309e", "#ea3655", "#eea727" ];
297
+ const index = normalizedWinId(winId) - 1;
298
+ return colors[index] || colors[colors.length - 1];
299
+ };
300
+ const getTargetProp = (target, applyPath) => {
301
+ let n = "";
302
+ if (target) {
303
+ const cstrName = getConstructorName(target);
304
+ if ("Window" === cstrName) {
305
+ n = "";
306
+ } else if ("string" == typeof target[InstanceDataKey]) {
307
+ let nodeName = target[InstanceDataKey];
308
+ n = "#text" === nodeName ? "textNode." : "#comment" === nodeName ? "commentNode." : "#document" === nodeName ? "document." : "html" === nodeName ? "doctype." : nodeName.toLowerCase() + ".";
309
+ } else {
310
+ n = "nodeType" in target && 2 === target.nodeType ? "attributes." : "CanvasRenderingContext2D" === cstrName ? "context2D." : "CanvasRenderingContextWebGL" === cstrName ? "contextWebGL." : "CSSStyleDeclaration" === cstrName ? "style." : "MutationObserver" === cstrName ? "mutationObserver." : "NamedNodeMap" === cstrName ? "namedNodeMap." : "ResizeObserver" === cstrName ? "resizeObserver." : cstrName.substring(0, 1).toLowerCase() + cstrName.substring(1) + ".";
311
+ }
312
+ target[ApplyPathKey] && target[ApplyPathKey].length && (n += [ ...target[ApplyPathKey] ].join(".") + ".");
313
+ }
314
+ if (applyPath.length > 1) {
315
+ const first = applyPath.slice(0, applyPath.length - 1);
316
+ const last = applyPath[applyPath.length - 1];
317
+ if (!isNaN(last)) {
318
+ return n + `${first.join(".")}[${last}]`;
319
+ }
320
+ }
321
+ return n + applyPath.join(".");
322
+ };
323
+ const getLogValue = (applyPath, v) => {
324
+ const type = typeof v;
325
+ if (void 0 === v) {
326
+ return "undefined";
327
+ }
328
+ if ("boolean" === type || "number" === type || null == v) {
329
+ return JSON.stringify(v);
330
+ }
331
+ if ("string" === type) {
332
+ return applyPath.includes("cookie") ? JSON.stringify(v.slice(0, 10) + "...") : JSON.stringify(v.length > 50 ? v.slice(0, 40) + "..." : v);
333
+ }
334
+ if (Array.isArray(v)) {
335
+ return `[${v.map(getLogValue).join(", ")}]`;
336
+ }
337
+ if ("object" === type) {
338
+ const instanceId = v[InstanceIdKey];
339
+ const cstrName = getConstructorName(v);
340
+ if ("string" == typeof instanceId) {
341
+ if ("Window" === cstrName) {
342
+ return "window";
343
+ }
344
+ if ("string" == typeof v[InstanceDataKey]) {
345
+ if (1 === v.nodeType) {
346
+ return `<${v[InstanceDataKey].toLowerCase()}>`;
347
+ }
348
+ if (10 === v.nodeType) {
349
+ return `<!DOCTYPE ${v[InstanceDataKey]}>`;
350
+ }
351
+ if (v.nodeType <= 11) {
352
+ return v[InstanceDataKey];
353
+ }
354
+ }
355
+ return "¯\\_(ツ)_/¯ instance obj";
356
+ }
357
+ return v[Symbol.iterator] ? `[${Array.from(v).map((i => getLogValue(applyPath, i))).join(", ")}]` : "value" in v ? "string" == typeof v.value ? `"${v.value}"` : objToString(v.value) : objToString(v);
358
+ }
359
+ return (v => "object" == typeof v && v && v.then)(v) ? "Promise" : "function" === type ? `ƒ() ${v.name || ""}`.trim() : `¯\\_(ツ)_/¯ ${String(v)}`.trim();
360
+ };
361
+ const objToString = obj => {
362
+ const s = [];
363
+ for (let key in obj) {
364
+ const value = obj[key];
365
+ const type = typeof value;
366
+ "string" === type ? s.push(`${key}: "${value}"`) : "function" === type ? s.push(`${key}: ƒ`) : Array.isArray(type) ? s.push(`${key}: [..]`) : "object" === type && value ? s.push(`${key}: {..}`) : s.push(`${key}: ${String(value)}`);
367
+ }
368
+ let str = s.join(", ");
369
+ str.length > 200 && (str = str.substring(0, 200) + "..");
370
+ return `{ ${str} }`;
371
+ };
372
+ const logDimensionCacheClearStyle = (target, propName) => {
373
+ (webWorkerCtx.$config$.logGetters || webWorkerCtx.$config$.logSetters) && logWorker(`Dimension cache cleared from style.${propName} setter`, target[WinIdKey]);
374
+ };
375
+ const logDimensionCacheClearMethod = (target, methodName) => {
376
+ (webWorkerCtx.$config$.logGetters || webWorkerCtx.$config$.logCalls) && logWorker(`Dimension cache cleared from method call ${methodName}()`, target[WinIdKey]);
377
+ };
378
+ const taskQueue = [];
379
+ const queue = (instance, $applyPath$, callType, $assignInstanceId$, $groupedGetters$, buffer) => {
380
+ if (instance[ApplyPathKey]) {
381
+ taskQueue.push({
382
+ $winId$: instance[WinIdKey],
383
+ $instanceId$: instance[InstanceIdKey],
384
+ $applyPath$: [ ...instance[ApplyPathKey], ...$applyPath$ ],
385
+ $assignInstanceId$: $assignInstanceId$,
386
+ $groupedGetters$: $groupedGetters$
387
+ });
388
+ taskQueue[len(taskQueue) - 1].$debug$ = ((target, applyPath, callType) => {
389
+ let m = getTargetProp(target, applyPath);
390
+ 1 === callType ? m += " (blocking)" : 2 === callType ? m += " (non-blocking)" : 3 === callType && (m += " (non-blocking, no-side-effect)");
391
+ return m.trim();
392
+ })(instance, $applyPath$, callType);
393
+ buffer && 3 !== callType && console.error("buffer must be sent NonBlockingNoSideEffect");
394
+ if (3 === callType) {
395
+ webWorkerCtx.$postMessage$([ 12, {
396
+ $msgId$: randomId(),
397
+ $tasks$: [ ...taskQueue ]
398
+ } ], buffer ? [ buffer instanceof ArrayBuffer ? buffer : buffer.buffer ] : void 0);
399
+ taskQueue.length = 0;
400
+ } else if (1 === callType) {
401
+ return sendToMain(true);
402
+ }
403
+ webWorkerCtx.$asyncMsgTimer$ = setTimeout(sendToMain, 20);
404
+ }
405
+ };
406
+ const sendToMain = isBlocking => {
407
+ clearTimeout(webWorkerCtx.$asyncMsgTimer$);
408
+ if (len(taskQueue)) {
409
+ webWorkerCtx.$config$.logMainAccess && logWorker(`Main access, tasks sent: ${taskQueue.length}`);
410
+ const endTask = taskQueue[len(taskQueue) - 1];
411
+ const accessReq = {
412
+ $msgId$: randomId(),
413
+ $tasks$: [ ...taskQueue ]
414
+ };
415
+ taskQueue.length = 0;
416
+ if (isBlocking) {
417
+ const accessRsp = ((webWorkerCtx, accessReq) => {
418
+ const xhr = new XMLHttpRequest;
419
+ xhr.open("POST", partytownLibUrl("proxytown"), false);
420
+ xhr.send(JSON.stringify(accessReq));
421
+ return JSON.parse(xhr.responseText);
422
+ })(0, accessReq);
423
+ const isPromise = accessRsp.$isPromise$;
424
+ const rtnValue = deserializeFromMain(endTask.$winId$, endTask.$instanceId$, endTask.$applyPath$, accessRsp.$rtnValue$);
425
+ if (accessRsp.$error$) {
426
+ if (isPromise) {
427
+ return Promise.reject(accessRsp.$error$);
428
+ }
429
+ throw new Error(accessRsp.$error$);
430
+ }
431
+ return isPromise ? Promise.resolve(rtnValue) : rtnValue;
432
+ }
433
+ webWorkerCtx.$postMessage$([ 12, accessReq ]);
434
+ }
435
+ };
436
+ const getter = (instance, applyPath, groupedGetters, rtnValue) => {
437
+ if (webWorkerCtx.$config$.get) {
438
+ rtnValue = webWorkerCtx.$config$.get(createHookOptions(instance, applyPath));
439
+ if (rtnValue !== HookContinue) {
440
+ return rtnValue;
441
+ }
442
+ }
443
+ rtnValue = queue(instance, applyPath, 1, void 0, groupedGetters);
444
+ ((target, applyPath, rtnValue, restrictedToWorker = false, groupedGetters = false) => {
445
+ if (webWorkerCtx.$config$.logGetters) {
446
+ try {
447
+ const msg = `Get ${getTargetProp(target, applyPath)}, returned: ${getLogValue(applyPath, rtnValue)}${restrictedToWorker ? " (restricted to worker)" : ""}${groupedGetters ? " (grouped getter)" : ""}`;
448
+ msg.includes("Symbol(") || logWorker(msg, target[WinIdKey]);
449
+ } catch (e) {}
450
+ }
451
+ })(instance, applyPath, rtnValue, false, !!groupedGetters);
452
+ return rtnValue;
453
+ };
454
+ const setter = (instance, applyPath, value, hookSetterValue) => {
455
+ if (webWorkerCtx.$config$.set) {
456
+ hookSetterValue = webWorkerCtx.$config$.set({
457
+ value: value,
458
+ prevent: HookPrevent,
459
+ ...createHookOptions(instance, applyPath)
460
+ });
461
+ if (hookSetterValue === HookPrevent) {
462
+ return;
463
+ }
464
+ hookSetterValue !== HookContinue && (value = hookSetterValue);
465
+ }
466
+ if (dimensionChangingSetterNames.some((s => applyPath.includes(s)))) {
467
+ cachedDimensions.clear();
468
+ ((target, propName) => {
469
+ (webWorkerCtx.$config$.logGetters || webWorkerCtx.$config$.logSetters) && logWorker(`Dimension cache cleared from setter "${propName}"`, target[WinIdKey]);
470
+ })(instance, applyPath[applyPath.length - 1]);
471
+ }
472
+ applyPath = [ ...applyPath, serializeInstanceForMain(instance, value), 0 ];
473
+ ((target, applyPath, value, restrictedToWorker = false) => {
474
+ if (webWorkerCtx.$config$.logSetters) {
475
+ try {
476
+ applyPath = applyPath.slice(0, applyPath.length - 2);
477
+ logWorker(`Set ${getTargetProp(target, applyPath)}, value: ${getLogValue(applyPath, value)}${restrictedToWorker ? " (restricted to worker)" : ""}`, target[WinIdKey]);
478
+ } catch (e) {}
479
+ }
480
+ })(instance, applyPath, value);
481
+ queue(instance, applyPath, 2);
482
+ };
483
+ const callMethod = (instance, applyPath, args, callType, assignInstanceId, buffer, rtnValue, methodName) => {
484
+ if (webWorkerCtx.$config$.apply) {
485
+ rtnValue = webWorkerCtx.$config$.apply({
486
+ args: args,
487
+ ...createHookOptions(instance, applyPath)
488
+ });
489
+ if (rtnValue !== HookContinue) {
490
+ return rtnValue;
491
+ }
492
+ }
493
+ methodName = applyPath[len(applyPath) - 1];
494
+ applyPath = [ ...applyPath, serializeInstanceForMain(instance, args) ];
495
+ callType = callType || (nonBlockingMethods.includes(methodName) ? 2 : 1);
496
+ if ("setAttribute" === methodName && hasInstanceStateValue(instance, args[0])) {
497
+ setInstanceStateValue(instance, args[0], args[1]);
498
+ } else if (structureChangingMethodNames.includes(methodName)) {
499
+ cachedDimensions.clear();
500
+ cachedStructure.clear();
501
+ ((target, methodName) => {
502
+ (webWorkerCtx.$config$.logGetters || webWorkerCtx.$config$.logCalls) && logWorker(`Dimension and DOM structure cache cleared from method call ${methodName}()`, target[WinIdKey]);
503
+ })(instance, methodName);
504
+ } else if (dimensionChangingMethodNames.includes(methodName)) {
505
+ callType = 2;
506
+ cachedDimensions.clear();
507
+ logDimensionCacheClearMethod(instance, methodName);
508
+ }
509
+ rtnValue = queue(instance, applyPath, callType, assignInstanceId, void 0, buffer);
510
+ ((target, applyPath, args, rtnValue) => {
511
+ if (webWorkerCtx.$config$.logCalls) {
512
+ try {
513
+ applyPath = applyPath.slice(0, applyPath.length - 1);
514
+ logWorker(`Call ${getTargetProp(target, applyPath)}(${args.map((v => getLogValue(applyPath, v))).join(", ")}), returned: ${getLogValue(applyPath, rtnValue)}`, target[WinIdKey]);
515
+ } catch (e) {}
516
+ }
517
+ })(instance, applyPath, args, rtnValue);
518
+ return rtnValue;
519
+ };
520
+ const constructGlobal = (instance, cstrName, args) => {
521
+ ((target, cstrName, args) => {
522
+ if (webWorkerCtx.$config$.logCalls) {
523
+ try {
524
+ logWorker(`Construct new ${cstrName}(${args.map((v => getLogValue([], v))).join(", ")})`, target[WinIdKey]);
525
+ } catch (e) {}
526
+ }
527
+ })(instance, cstrName, args);
528
+ queue(instance, [ 1, cstrName, serializeInstanceForMain(instance, args) ], 1);
529
+ };
530
+ const createHookOptions = (instance, applyPath) => ({
531
+ name: applyPath.join("."),
532
+ continue: HookContinue,
533
+ nodeName: instance[InstanceDataKey],
534
+ constructor: getConstructorName(instance),
535
+ instance: instance,
536
+ window: environments[instance[WinIdKey]].$window$
537
+ });
538
+ const addStorageApi = (win, storageName, storages, isSameOrigin, env) => {
539
+ let getItems = items => {
540
+ items = storages.get(win.origin);
541
+ items || storages.set(win.origin, items = []);
542
+ return items;
543
+ };
544
+ let getIndexByKey = key => getItems().findIndex((i => i[STORAGE_KEY] === key));
545
+ let index;
546
+ let item;
547
+ let storage = {
548
+ getItem(key) {
549
+ index = getIndexByKey(key);
550
+ return index > -1 ? getItems()[index][STORAGE_VALUE] : null;
551
+ },
552
+ setItem(key, value) {
553
+ index = getIndexByKey(key);
554
+ index > -1 ? getItems()[index][STORAGE_VALUE] = value : getItems().push([ key, value ]);
555
+ isSameOrigin ? callMethod(win, [ storageName, "setItem" ], [ key, value ], 2) : warnCrossOrgin("set", storageName, env);
556
+ },
557
+ removeItem(key) {
558
+ index = getIndexByKey(key);
559
+ index > -1 && getItems().splice(index, 1);
560
+ isSameOrigin ? callMethod(win, [ storageName, "removeItem" ], [ key ], 2) : warnCrossOrgin("remove", storageName, env);
561
+ },
562
+ key(index) {
563
+ item = getItems()[index];
564
+ return item ? item[STORAGE_KEY] : null;
565
+ },
566
+ clear() {
567
+ getItems().length = 0;
568
+ isSameOrigin ? callMethod(win, [ storageName, "clear" ], EMPTY_ARRAY, 2) : warnCrossOrgin("clear", storageName, env);
569
+ },
570
+ get length() {
571
+ return getItems().length;
572
+ }
573
+ };
574
+ win[storageName] = new Proxy(storage, {
575
+ get: (target, key) => Reflect.has(target, key) ? Reflect.get(target, key) : target.getItem(key),
576
+ set(target, key, value) {
577
+ target.setItem(key, value);
578
+ return true;
579
+ },
580
+ has: (target, key) => !!Reflect.has(target, key) || "string" == typeof key && null !== target.getItem(key),
581
+ deleteProperty(target, key) {
582
+ target.removeItem(key);
583
+ return true;
584
+ }
585
+ });
586
+ };
587
+ const STORAGE_KEY = 0;
588
+ const STORAGE_VALUE = 1;
589
+ const createCSSStyleDeclarationCstr = (win, WorkerBase, cstrName) => {
590
+ win[cstrName] = defineConstructorName(class extends WorkerBase {
591
+ constructor(winId, instanceId, applyPath, styles) {
592
+ super(winId, instanceId, applyPath, styles || {});
593
+ return new Proxy(this, {
594
+ get(target, propName) {
595
+ if (target[propName]) {
596
+ return target[propName];
597
+ }
598
+ target[propName] || "string" != typeof propName || target[InstanceDataKey][propName] || (target[InstanceDataKey][propName] = getter(target, [ propName ]));
599
+ return target[InstanceDataKey][propName];
600
+ },
601
+ set(target, propName, propValue) {
602
+ target[InstanceDataKey][propName] = propValue;
603
+ setter(target, [ propName ], propValue);
604
+ logDimensionCacheClearStyle(target, propName);
605
+ cachedDimensions.clear();
606
+ return true;
607
+ }
608
+ });
609
+ }
610
+ setProperty(...args) {
611
+ this[InstanceDataKey][args[0]] = args[1];
612
+ callMethod(this, [ "setProperty" ], args, 2);
613
+ logDimensionCacheClearStyle(this, args[0]);
614
+ cachedDimensions.clear();
615
+ }
616
+ getPropertyValue(propName) {
617
+ return this[propName];
618
+ }
619
+ removeProperty(propName) {
620
+ let value = this[InstanceDataKey][propName];
621
+ callMethod(this, [ "removeProperty" ], [ propName ], 2);
622
+ logDimensionCacheClearStyle(this, propName);
623
+ cachedDimensions.clear();
624
+ this[InstanceDataKey][propName] = void 0;
625
+ return value;
626
+ }
627
+ }, cstrName);
628
+ };
629
+ const createCSSStyleSheetConstructor = (win, cssStyleSheetCstrName) => {
630
+ win[cssStyleSheetCstrName] = defineConstructorName(class {
631
+ constructor(ownerNode) {
632
+ this.ownerNode = ownerNode;
633
+ }
634
+ get cssRules() {
635
+ const ownerNode = this.ownerNode;
636
+ return new Proxy({}, {
637
+ get(target, propKey) {
638
+ const propName = String(propKey);
639
+ return "item" === propName ? index => getCssRule(ownerNode, index) : "length" === propName ? getCssRules(ownerNode).length : isNaN(propName) ? target[propKey] : getCssRule(ownerNode, propName);
640
+ }
641
+ });
642
+ }
643
+ insertRule(ruleText, index) {
644
+ const cssRules = getCssRules(this.ownerNode);
645
+ index = void 0 === index ? 0 : index;
646
+ if (index >= 0 && index <= cssRules.length) {
647
+ callMethod(this.ownerNode, [ "sheet", "insertRule" ], [ ruleText, index ], 2);
648
+ cssRules.splice(index, 0, 0);
649
+ }
650
+ logDimensionCacheClearMethod(this.ownerNode, "insertRule");
651
+ cachedDimensions.clear();
652
+ return index;
653
+ }
654
+ deleteRule(index) {
655
+ callMethod(this.ownerNode, [ "sheet", "deleteRule" ], [ index ], 2);
656
+ getCssRules(this.ownerNode).splice(index, 1);
657
+ logDimensionCacheClearMethod(this.ownerNode, "deleteRule");
658
+ cachedDimensions.clear();
659
+ }
660
+ get type() {
661
+ return "text/css";
662
+ }
663
+ }, cssStyleSheetCstrName);
664
+ const HTMLStyleDescriptorMap = {
665
+ sheet: {
666
+ get() {
667
+ return new win[cssStyleSheetCstrName](this);
668
+ }
669
+ }
670
+ };
671
+ definePrototypePropertyDescriptor(win.HTMLStyleElement, HTMLStyleDescriptorMap);
672
+ };
673
+ const getCssRules = (ownerNode, cssRules) => {
674
+ cssRules = getInstanceStateValue(ownerNode, 2);
675
+ if (!cssRules) {
676
+ cssRules = getter(ownerNode, [ "sheet", "cssRules" ]);
677
+ setInstanceStateValue(ownerNode, 2, cssRules);
678
+ }
679
+ return cssRules;
680
+ };
681
+ const getCssRule = (ownerNode, index, cssRules) => {
682
+ cssRules = getCssRules(ownerNode);
683
+ 0 === cssRules[index] && (cssRules[index] = getter(ownerNode, [ "sheet", "cssRules", parseInt(index, 10) ]));
684
+ return cssRules[index];
685
+ };
686
+ const runScriptContent = (env, instanceId, scriptContent, winId, errorMsg) => {
687
+ try {
688
+ webWorkerCtx.$config$.logScriptExecution && logWorker(`Execute script: ${scriptContent.substring(0, 100).split("\n").map((l => l.trim())).join(" ").trim().substring(0, 60)}...`, winId);
689
+ env.$currentScriptId$ = instanceId;
690
+ run(env, scriptContent);
691
+ } catch (contentError) {
692
+ console.error(scriptContent, contentError);
693
+ errorMsg = String(contentError.stack || contentError);
694
+ }
695
+ env.$currentScriptId$ = "";
696
+ return errorMsg;
697
+ };
698
+ const run = (env, scriptContent, scriptUrl) => {
699
+ env.$runWindowLoadEvent$ = 1;
700
+ scriptContent = `with(this){${scriptContent.replace(/\bthis\b/g, "(thi$(this)?window:this)").replace(/\/\/# so/g, "//Xso")}\n;function thi$(t){return t===this}};${(webWorkerCtx.$config$.globalFns || []).filter((globalFnName => /[a-zA-Z_$][0-9a-zA-Z_$]*/.test(globalFnName))).map((g => `(typeof ${g}=='function'&&(this.${g}=${g}))`)).join(";")};` + (scriptUrl ? "\n//# sourceURL=" + scriptUrl : "");
701
+ env.$isSameOrigin$ || (scriptContent = scriptContent.replace(/.postMessage\(/g, `.postMessage('${env.$winId$}',`));
702
+ new Function(scriptContent).call(env.$window$);
703
+ env.$runWindowLoadEvent$ = 0;
704
+ };
705
+ const runStateLoadHandlers = (instance, type, handlers) => {
706
+ handlers = getInstanceStateValue(instance, type);
707
+ handlers && setTimeout((() => handlers.map((cb => cb({
708
+ type: type
709
+ })))));
710
+ };
711
+ const resolveToUrl = (env, url, type, baseLocation, resolvedUrl, configResolvedUrl) => {
712
+ baseLocation = env.$location$;
713
+ while (!baseLocation.host) {
714
+ env = environments[env.$parentWinId$];
715
+ baseLocation = env.$location$;
716
+ if (env.$winId$ === env.$parentWinId$) {
717
+ break;
718
+ }
719
+ }
720
+ resolvedUrl = new URL(url || "", baseLocation);
721
+ if (type && webWorkerCtx.$config$.resolveUrl) {
722
+ configResolvedUrl = webWorkerCtx.$config$.resolveUrl(resolvedUrl, baseLocation, type);
723
+ if (configResolvedUrl) {
724
+ return configResolvedUrl;
725
+ }
726
+ }
727
+ return resolvedUrl;
728
+ };
729
+ const resolveUrl = (env, url, type) => resolveToUrl(env, url, type) + "";
730
+ const getPartytownScript = () => `<script src="${partytownLibUrl("partytown.js?v=0.7.5")}"><\/script>`;
731
+ const createImageConstructor = env => class HTMLImageElement {
732
+ constructor() {
733
+ this.s = "";
734
+ this.l = [];
735
+ this.e = [];
736
+ this.style = {};
737
+ }
738
+ get src() {
739
+ return this.s;
740
+ }
741
+ set src(src) {
742
+ webWorkerCtx.$config$.logImageRequests && logWorker(`Image() request: ${resolveUrl(env, src, "image")}`, env.$winId$);
743
+ this.s = src;
744
+ fetch(resolveUrl(env, src, "image"), {
745
+ mode: "no-cors",
746
+ credentials: "include",
747
+ keepalive: true
748
+ }).then((rsp => {
749
+ rsp.ok || 0 === rsp.status ? this.l.map((cb => cb({
750
+ type: "load"
751
+ }))) : this.e.map((cb => cb({
752
+ type: "error"
753
+ })));
754
+ }), (() => this.e.forEach((cb => cb({
755
+ type: "error"
756
+ })))));
757
+ }
758
+ addEventListener(eventName, cb) {
759
+ "load" === eventName && this.l.push(cb);
760
+ "error" === eventName && this.e.push(cb);
761
+ }
762
+ get onload() {
763
+ return this.l[0];
764
+ }
765
+ set onload(cb) {
766
+ this.l = [ cb ];
767
+ }
768
+ get onerror() {
769
+ return this.e[0];
770
+ }
771
+ set onerror(cb) {
772
+ this.e = [ cb ];
773
+ }
774
+ };
775
+ const HTMLSrcElementDescriptorMap = {
776
+ addEventListener: {
777
+ value(...args) {
778
+ const eventName = args[0];
779
+ const callbacks = getInstanceStateValue(this, eventName) || [];
780
+ callbacks.push(args[1]);
781
+ setInstanceStateValue(this, eventName, callbacks);
782
+ }
783
+ },
784
+ async: {
785
+ get: noop,
786
+ set: noop
787
+ },
788
+ defer: {
789
+ get: noop,
790
+ set: noop
791
+ },
792
+ onload: {
793
+ get() {
794
+ let callbacks = getInstanceStateValue(this, "load");
795
+ return callbacks && callbacks[0] || null;
796
+ },
797
+ set(cb) {
798
+ setInstanceStateValue(this, "load", cb ? [ cb ] : null);
799
+ }
800
+ },
801
+ onerror: {
802
+ get() {
803
+ let callbacks = getInstanceStateValue(this, "error");
804
+ return callbacks && callbacks[0] || null;
805
+ },
806
+ set(cb) {
807
+ setInstanceStateValue(this, "error", cb ? [ cb ] : null);
808
+ }
809
+ },
810
+ getAttribute: {
811
+ value(attrName) {
812
+ return "src" === attrName ? this.src : callMethod(this, [ "getAttribute" ], [ attrName ]);
813
+ }
814
+ },
815
+ setAttribute: {
816
+ value(attrName, attrValue) {
817
+ scriptAttrPropNames.includes(attrName) ? this[attrName] = attrValue : callMethod(this, [ "setAttribute" ], [ attrName, attrValue ]);
818
+ }
819
+ }
820
+ };
821
+ const scriptAttrPropNames = commaSplit("src,type");
822
+ const patchHTMLScriptElement = (WorkerHTMLScriptElement, env) => {
823
+ const HTMLScriptDescriptorMap = {
824
+ innerHTML: innerHTMLDescriptor,
825
+ innerText: innerHTMLDescriptor,
826
+ src: {
827
+ get() {
828
+ return getInstanceStateValue(this, 4) || "";
829
+ },
830
+ set(url) {
831
+ const orgUrl = resolveUrl(env, url, null);
832
+ const config = webWorkerCtx.$config$;
833
+ url = resolveUrl(env, url, "script");
834
+ setInstanceStateValue(this, 4, url);
835
+ setter(this, [ "src" ], url);
836
+ orgUrl !== url && setter(this, [ "dataset", "ptsrc" ], orgUrl);
837
+ if (this.type && config.loadScriptsOnMainThread) {
838
+ const shouldExecuteScriptViaMainThread = config.loadScriptsOnMainThread.some((scriptUrl => scriptUrl === url));
839
+ shouldExecuteScriptViaMainThread && setter(this, [ "type" ], "text/javascript");
840
+ }
841
+ }
842
+ },
843
+ textContent: innerHTMLDescriptor,
844
+ type: {
845
+ get() {
846
+ return getter(this, [ "type" ]);
847
+ },
848
+ set(type) {
849
+ if (!isScriptJsType(type)) {
850
+ setInstanceStateValue(this, 5, type);
851
+ setter(this, [ "type" ], type);
852
+ }
853
+ }
854
+ },
855
+ ...HTMLSrcElementDescriptorMap
856
+ };
857
+ definePrototypePropertyDescriptor(WorkerHTMLScriptElement, HTMLScriptDescriptorMap);
858
+ };
859
+ const innerHTMLDescriptor = {
860
+ get() {
861
+ const type = getter(this, [ "type" ]);
862
+ return isScriptJsType(type) ? getInstanceStateValue(this, 3) || "" : getter(this, [ "innerHTML" ]);
863
+ },
864
+ set(scriptContent) {
865
+ setInstanceStateValue(this, 3, scriptContent);
866
+ }
867
+ };
868
+ const isScriptJsType = scriptType => !scriptType || "text/javascript" === scriptType;
869
+ const createNodeCstr = (win, env, WorkerBase) => {
870
+ const config = webWorkerCtx.$config$;
871
+ const WorkerNode = defineConstructorName(class extends WorkerBase {
872
+ appendChild(node) {
873
+ return this.insertBefore(node, null);
874
+ }
875
+ get href() {}
876
+ set href(_) {}
877
+ insertBefore(newNode, referenceNode) {
878
+ var _a, _b;
879
+ const winId = newNode[WinIdKey] = this[WinIdKey];
880
+ const instanceId = newNode[InstanceIdKey];
881
+ const nodeName = newNode[InstanceDataKey];
882
+ const isScript = "SCRIPT" === nodeName;
883
+ const isIFrame = "IFRAME" === nodeName;
884
+ if (isScript) {
885
+ const scriptContent = getInstanceStateValue(newNode, 3);
886
+ const scriptType = getInstanceStateValue(newNode, 5);
887
+ if (scriptContent) {
888
+ if (isScriptJsType(scriptType)) {
889
+ const scriptId = newNode.id;
890
+ const loadOnMainThread = scriptId && (null === (_b = null === (_a = config.loadScriptsOnMainThread) || void 0 === _a ? void 0 : _a.includes) || void 0 === _b ? void 0 : _b.call(_a, scriptId));
891
+ if (loadOnMainThread) {
892
+ setter(newNode, [ "type" ], "text/javascript");
893
+ } else {
894
+ const errorMsg = runScriptContent(env, instanceId, scriptContent, winId, "");
895
+ const datasetType = errorMsg ? "pterror" : "ptid";
896
+ const datasetValue = errorMsg || instanceId;
897
+ setter(newNode, [ "type" ], "text/partytown-x");
898
+ setter(newNode, [ "dataset", datasetType ], datasetValue);
899
+ }
900
+ }
901
+ setter(newNode, [ "innerHTML" ], scriptContent);
902
+ }
903
+ }
904
+ callMethod(this, [ "insertBefore" ], [ newNode, referenceNode ], 2);
905
+ if (isIFrame) {
906
+ const src = getInstanceStateValue(newNode, 0);
907
+ if (src && src.startsWith("javascript:")) {
908
+ const scriptContent = src.split("javascript:")[1];
909
+ runScriptContent(env, instanceId, scriptContent, winId, "");
910
+ }
911
+ ((winId, iframe) => {
912
+ let i = 0;
913
+ let type;
914
+ let handlers;
915
+ let callback = () => {
916
+ if (environments[winId] && environments[winId].$isInitialized$ && !environments[winId].$isLoading$) {
917
+ type = getInstanceStateValue(iframe, 1) ? "error" : "load";
918
+ handlers = getInstanceStateValue(iframe, type);
919
+ handlers && handlers.map((handler => handler({
920
+ type: type
921
+ })));
922
+ } else if (i++ > 2e3) {
923
+ handlers = getInstanceStateValue(iframe, "error");
924
+ handlers && handlers.map((handler => handler({
925
+ type: "error"
926
+ })));
927
+ } else {
928
+ setTimeout(callback, 9);
929
+ }
930
+ };
931
+ callback();
932
+ })(instanceId, newNode);
933
+ }
934
+ if (isScript) {
935
+ sendToMain(true);
936
+ webWorkerCtx.$postMessage$([ 7, winId ]);
937
+ }
938
+ return newNode;
939
+ }
940
+ get nodeName() {
941
+ return "#s" === this[InstanceDataKey] ? "#document-fragment" : this[InstanceDataKey];
942
+ }
943
+ get nodeType() {
944
+ return 3;
945
+ }
946
+ get ownerDocument() {
947
+ return env.$document$;
948
+ }
949
+ }, "Node");
950
+ cachedTreeProps(WorkerNode, commaSplit("childNodes,firstChild,isConnected,lastChild,nextSibling,parentElement,parentNode,previousSibling"));
951
+ win.Node = WorkerNode;
952
+ };
953
+ const htmlMedia = commaSplit("AUDIO,CANVAS,VIDEO");
954
+ const windowMediaConstructors = commaSplit("Audio,MediaSource");
955
+ const patchDocument = (WorkerDocument, env, isDocumentImplementation) => {
956
+ const DocumentDescriptorMap = {
957
+ body: {
958
+ get: () => env.$body$
959
+ },
960
+ cookie: {
961
+ get() {
962
+ if (env.$isSameOrigin$) {
963
+ return getter(this, [ "cookie" ]);
964
+ }
965
+ warnCrossOrgin("get", "cookie", env);
966
+ return "";
967
+ },
968
+ set(value) {
969
+ if (env.$isSameOrigin$) {
970
+ setter(this, [ "cookie" ], value);
971
+ } else {
972
+ warnCrossOrgin("set", "cookie", env);
973
+ }
974
+ }
975
+ },
976
+ createElement: {
977
+ value(tagName) {
978
+ tagName = tagName.toUpperCase();
979
+ if (!IS_TAG_REG.test(tagName)) {
980
+ throw tagName + " not valid";
981
+ }
982
+ const isIframe = "IFRAME" === tagName;
983
+ const winId = this[WinIdKey];
984
+ const instanceId = (isIframe ? "f_" : "") + randomId();
985
+ callMethod(this, [ "createElement" ], [ tagName ], 2, instanceId);
986
+ const elm = getOrCreateNodeInstance(winId, instanceId, tagName);
987
+ if (isIframe) {
988
+ const env = createEnvironment({
989
+ $winId$: instanceId,
990
+ $parentWinId$: winId,
991
+ $url$: "about:blank"
992
+ }, true);
993
+ env.$window$.fetch = fetch;
994
+ setter(elm, [ "srcdoc" ], getPartytownScript());
995
+ } else if ("SCRIPT" === tagName) {
996
+ const scriptType = getInstanceStateValue(elm, 5);
997
+ isScriptJsType(scriptType) && setter(elm, [ "type" ], "text/partytown");
998
+ }
999
+ return elm;
1000
+ }
1001
+ },
1002
+ createElementNS: {
1003
+ value(namespace, tagName) {
1004
+ const instanceId = randomId();
1005
+ const nsElm = getOrCreateNodeInstance(this[WinIdKey], instanceId, tagName, namespace);
1006
+ callMethod(this, [ "createElementNS" ], [ namespace, tagName ], 2, instanceId);
1007
+ return nsElm;
1008
+ }
1009
+ },
1010
+ createTextNode: {
1011
+ value(text) {
1012
+ const winId = this[WinIdKey];
1013
+ const instanceId = randomId();
1014
+ const textNode = getOrCreateNodeInstance(winId, instanceId, "#text");
1015
+ callMethod(this, [ "createTextNode" ], [ text ], 2, instanceId);
1016
+ return textNode;
1017
+ }
1018
+ },
1019
+ createEvent: {
1020
+ value: type => new Event(type)
1021
+ },
1022
+ currentScript: {
1023
+ get() {
1024
+ return env.$currentScriptId$ ? getOrCreateNodeInstance(this[WinIdKey], env.$currentScriptId$, "SCRIPT") : null;
1025
+ }
1026
+ },
1027
+ defaultView: {
1028
+ get: () => isDocumentImplementation ? null : env.$window$
1029
+ },
1030
+ documentElement: {
1031
+ get: () => env.$documentElement$
1032
+ },
1033
+ getElementsByTagName: {
1034
+ value(tagName) {
1035
+ tagName = tagName.toUpperCase();
1036
+ return "BODY" === tagName ? [ env.$body$ ] : "HEAD" === tagName ? [ env.$head$ ] : callMethod(this, [ "getElementsByTagName" ], [ tagName ]);
1037
+ }
1038
+ },
1039
+ head: {
1040
+ get: () => env.$head$
1041
+ },
1042
+ images: {
1043
+ get() {
1044
+ return getter(this, [ "images" ]);
1045
+ }
1046
+ },
1047
+ implementation: {
1048
+ get() {
1049
+ return {
1050
+ hasFeature: () => true,
1051
+ createHTMLDocument: title => {
1052
+ const $winId$ = randomId();
1053
+ callMethod(this, [ "implementation", "createHTMLDocument" ], [ title ], 1, {
1054
+ $winId$: $winId$
1055
+ });
1056
+ const docEnv = createEnvironment({
1057
+ $winId$: $winId$,
1058
+ $parentWinId$: $winId$,
1059
+ $url$: env.$location$ + "",
1060
+ $visibilityState$: "hidden"
1061
+ }, true, true);
1062
+ return docEnv.$document$;
1063
+ }
1064
+ };
1065
+ }
1066
+ },
1067
+ location: {
1068
+ get: () => env.$location$,
1069
+ set(url) {
1070
+ env.$location$.href = url + "";
1071
+ }
1072
+ },
1073
+ nodeType: {
1074
+ value: 9
1075
+ },
1076
+ parentNode: {
1077
+ value: null
1078
+ },
1079
+ parentElement: {
1080
+ value: null
1081
+ },
1082
+ readyState: {
1083
+ value: "complete"
1084
+ },
1085
+ visibilityState: {
1086
+ get: () => env.$visibilityState$ || "visible"
1087
+ }
1088
+ };
1089
+ definePrototypePropertyDescriptor(WorkerDocument, DocumentDescriptorMap);
1090
+ cachedProps(WorkerDocument, "compatMode,referrer,forms");
1091
+ };
1092
+ const patchDocumentElementChild = (WokerDocumentElementChild, env) => {
1093
+ const DocumentElementChildDescriptorMap = {
1094
+ parentElement: {
1095
+ get() {
1096
+ return this.parentNode;
1097
+ }
1098
+ },
1099
+ parentNode: {
1100
+ get: () => env.$documentElement$
1101
+ }
1102
+ };
1103
+ definePrototypePropertyDescriptor(WokerDocumentElementChild, DocumentElementChildDescriptorMap);
1104
+ };
1105
+ const patchElement = (WorkerElement, WorkerHTMLElement) => {
1106
+ const ElementDescriptorMap = {
1107
+ localName: {
1108
+ get() {
1109
+ return this[InstanceDataKey].toLowerCase();
1110
+ }
1111
+ },
1112
+ namespaceURI: {
1113
+ get() {
1114
+ return this[NamespaceKey] || "http://www.w3.org/1999/xhtml";
1115
+ }
1116
+ },
1117
+ nodeType: {
1118
+ value: 1
1119
+ },
1120
+ tagName: {
1121
+ get() {
1122
+ return this[InstanceDataKey];
1123
+ }
1124
+ }
1125
+ };
1126
+ definePrototypePropertyDescriptor(WorkerElement, ElementDescriptorMap);
1127
+ cachedTreeProps(WorkerElement, elementStructurePropNames);
1128
+ cachedProps(WorkerElement, "id");
1129
+ cachedDimensionProps(WorkerHTMLElement);
1130
+ cachedDimensionMethods(WorkerHTMLElement, commaSplit("getClientRects,getBoundingClientRect"));
1131
+ };
1132
+ const patchHTMLAnchorElement = (WorkerHTMLAnchorElement, env) => {
1133
+ const HTMLAnchorDescriptorMap = {};
1134
+ commaSplit("hash,host,hostname,href,origin,pathname,port,protocol,search").map((anchorProp => {
1135
+ HTMLAnchorDescriptorMap[anchorProp] = {
1136
+ get() {
1137
+ let value = getInstanceStateValue(this, 4);
1138
+ let href;
1139
+ if ("string" != typeof value) {
1140
+ href = getter(this, [ "href" ]);
1141
+ setInstanceStateValue(this, 4, href);
1142
+ value = new URL(href)[anchorProp];
1143
+ }
1144
+ return resolveToUrl(env, value, null)[anchorProp];
1145
+ },
1146
+ set(value) {
1147
+ let url;
1148
+ if ("href" === anchorProp) {
1149
+ if ((url => {
1150
+ try {
1151
+ new URL(url);
1152
+ return true;
1153
+ } catch (_) {
1154
+ return false;
1155
+ }
1156
+ })(value)) {
1157
+ url = new URL(value);
1158
+ } else {
1159
+ const baseHref = env.$location$.href;
1160
+ url = resolveToUrl(env, baseHref, null);
1161
+ url.href = new URL(value + "", url.href);
1162
+ }
1163
+ } else {
1164
+ url = resolveToUrl(env, this.href, null);
1165
+ url[anchorProp] = value;
1166
+ }
1167
+ setInstanceStateValue(this, 4, url.href);
1168
+ setter(this, [ "href" ], url.href);
1169
+ }
1170
+ };
1171
+ }));
1172
+ definePrototypePropertyDescriptor(WorkerHTMLAnchorElement, HTMLAnchorDescriptorMap);
1173
+ };
1174
+ const patchHTMLIFrameElement = (WorkerHTMLIFrameElement, env) => {
1175
+ const HTMLIFrameDescriptorMap = {
1176
+ contentDocument: {
1177
+ get() {
1178
+ return getIframeEnv(this).$document$;
1179
+ }
1180
+ },
1181
+ contentWindow: {
1182
+ get() {
1183
+ return getIframeEnv(this).$window$;
1184
+ }
1185
+ },
1186
+ src: {
1187
+ get() {
1188
+ let src = getInstanceStateValue(this, 0);
1189
+ if (src && src.startsWith("javascript:")) {
1190
+ return src;
1191
+ }
1192
+ src = getIframeEnv(this).$location$.href;
1193
+ return src.startsWith("about:") ? "" : src;
1194
+ },
1195
+ set(src) {
1196
+ if (src) {
1197
+ if (src.startsWith("javascript:")) {
1198
+ setInstanceStateValue(this, 0, src);
1199
+ } else if (!src.startsWith("about:")) {
1200
+ let xhr = new XMLHttpRequest;
1201
+ let xhrStatus;
1202
+ let env = getIframeEnv(this);
1203
+ env.$location$.href = src = resolveUrl(env, src, "iframe");
1204
+ env.$isLoading$ = 1;
1205
+ setInstanceStateValue(this, 1, void 0);
1206
+ xhr.open("GET", src, false);
1207
+ xhr.send();
1208
+ xhrStatus = xhr.status;
1209
+ if (xhrStatus > 199 && xhrStatus < 300) {
1210
+ setter(this, [ "srcdoc" ], `<base href="${src}">` + function(text) {
1211
+ return text.replace(SCRIPT_TAG_REGEXP, ((_, attrs) => {
1212
+ const parts = [];
1213
+ let hasType = false;
1214
+ let match;
1215
+ while (match = ATTR_REGEXP.exec(attrs)) {
1216
+ let [keyValue] = match;
1217
+ if (keyValue.startsWith("type=")) {
1218
+ hasType = true;
1219
+ keyValue = keyValue.replace(/(application|text)\/javascript/, SCRIPT_TYPE);
1220
+ }
1221
+ parts.push(keyValue);
1222
+ }
1223
+ hasType || parts.push('type="text/partytown"');
1224
+ return `<script ${parts.join(" ")}>`;
1225
+ }));
1226
+ }(xhr.responseText) + getPartytownScript());
1227
+ sendToMain(true);
1228
+ webWorkerCtx.$postMessage$([ 7, env.$winId$ ]);
1229
+ } else {
1230
+ setInstanceStateValue(this, 1, xhrStatus);
1231
+ env.$isLoading$ = 0;
1232
+ }
1233
+ }
1234
+ }
1235
+ }
1236
+ },
1237
+ ...HTMLSrcElementDescriptorMap
1238
+ };
1239
+ definePrototypePropertyDescriptor(WorkerHTMLIFrameElement, HTMLIFrameDescriptorMap);
1240
+ };
1241
+ const ATTR_REGEXP_STR = "((?:\\w|-)+(?:=(?:(?:\\w|-)+|'[^']*'|\"[^\"]*\")?)?)";
1242
+ const SCRIPT_TAG_REGEXP = new RegExp(`<script\\s*((${ATTR_REGEXP_STR}\\s*)*)>`, "mg");
1243
+ const ATTR_REGEXP = new RegExp(ATTR_REGEXP_STR, "mg");
1244
+ const getIframeEnv = iframe => {
1245
+ const $winId$ = iframe[InstanceIdKey];
1246
+ environments[$winId$] || createEnvironment({
1247
+ $winId$: $winId$,
1248
+ $parentWinId$: iframe[WinIdKey],
1249
+ $url$: getter(iframe, [ "src" ]) || "about:blank"
1250
+ }, true);
1251
+ return environments[$winId$];
1252
+ };
1253
+ const patchSvgElement = WorkerSVGGraphicsElement => {
1254
+ const getMatrix = (elm, methodName) => {
1255
+ const {a: a, b: b, c: c, d: d, e: e, f: f} = callMethod(elm, [ methodName ], EMPTY_ARRAY);
1256
+ return new DOMMatrixReadOnly([ a, b, c, d, e, f ]);
1257
+ };
1258
+ const SVGGraphicsElementDescriptorMap = {
1259
+ ...WorkerSVGGraphicsElement,
1260
+ getCTM: {
1261
+ value: function() {
1262
+ return getMatrix(this, "getCTM");
1263
+ }
1264
+ },
1265
+ getScreenCTM: {
1266
+ value: function() {
1267
+ return getMatrix(this, "getScreenCTM");
1268
+ }
1269
+ }
1270
+ };
1271
+ definePrototypePropertyDescriptor(WorkerSVGGraphicsElement, SVGGraphicsElementDescriptorMap);
1272
+ };
1273
+ const createNamedNodeMapCstr = (win, WorkerBase) => {
1274
+ win.NamedNodeMap = defineConstructorName(class NamedNodeMap extends WorkerBase {
1275
+ constructor(winId, instanceId, applyPath) {
1276
+ super(winId, instanceId, applyPath);
1277
+ return new Proxy(this, {
1278
+ get(target, propName) {
1279
+ const handler = NAMED_NODE_MAP_HANDLERS[propName];
1280
+ return handler ? handler.bind(target, [ propName ]) : getter(target, [ propName ]);
1281
+ },
1282
+ set(target, propName, propValue) {
1283
+ const handler = NAMED_NODE_MAP_HANDLERS[propName];
1284
+ if (handler) {
1285
+ throw new Error("Can't set read-only property: " + String(propName));
1286
+ }
1287
+ setter(target, [ propName ], propValue);
1288
+ return true;
1289
+ }
1290
+ });
1291
+ }
1292
+ }, "NamedNodeMap");
1293
+ };
1294
+ function method(applyPath, ...args) {
1295
+ return callMethod(this, applyPath, args, 1);
1296
+ }
1297
+ const NAMED_NODE_MAP_HANDLERS = {
1298
+ getNamedItem: method,
1299
+ getNamedItemNS: method,
1300
+ item: method,
1301
+ removeNamedItem: method,
1302
+ removeNamedItemNS: method,
1303
+ setNamedItem: method,
1304
+ setNamedItemNS: method
1305
+ };
1306
+ const createWindow = ($winId$, $parentWinId$, url, $visibilityState$, isIframeWindow, isDocumentImplementation) => {
1307
+ let cstrInstanceId;
1308
+ let cstrNodeName;
1309
+ let cstrNamespace;
1310
+ const WorkerBase = class {
1311
+ constructor(winId, instanceId, applyPath, instanceData, namespace) {
1312
+ this[WinIdKey] = winId || $winId$;
1313
+ this[InstanceIdKey] = instanceId || cstrInstanceId || randomId();
1314
+ this[ApplyPathKey] = applyPath || [];
1315
+ this[InstanceDataKey] = instanceData || cstrNodeName;
1316
+ this[NamespaceKey] = namespace || cstrNamespace;
1317
+ this[InstanceStateKey] = {};
1318
+ cstrInstanceId = cstrNodeName = cstrNamespace = void 0;
1319
+ }
1320
+ };
1321
+ const WorkerLocation = defineConstructorName(class extends URL {
1322
+ assign() {
1323
+ logWorker("location.assign(), noop");
1324
+ }
1325
+ reload() {
1326
+ logWorker("location.reload(), noop");
1327
+ }
1328
+ replace() {
1329
+ logWorker("location.replace(), noop");
1330
+ }
1331
+ }, "Location");
1332
+ const $location$ = new WorkerLocation(url);
1333
+ const $isSameOrigin$ = $location$.origin === webWorkerCtx.$origin$ || "about:blank" === $location$.origin;
1334
+ const $isTopWindow$ = $parentWinId$ === $winId$;
1335
+ const env = {};
1336
+ const getChildEnvs = () => {
1337
+ let childEnv = [];
1338
+ let envWinId;
1339
+ let otherEnv;
1340
+ for (envWinId in environments) {
1341
+ otherEnv = environments[envWinId];
1342
+ otherEnv.$parentWinId$ !== $winId$ || otherEnv.$isTopWindow$ || childEnv.push(otherEnv);
1343
+ }
1344
+ return childEnv;
1345
+ };
1346
+ const WorkerWindow = defineConstructorName(class extends WorkerBase {
1347
+ constructor() {
1348
+ super($winId$, $winId$);
1349
+ let win = this;
1350
+ let value;
1351
+ let historyState;
1352
+ let hasInitializedMedia = 0;
1353
+ let initWindowMedia = () => {
1354
+ if (!hasInitializedMedia) {
1355
+ (() => {
1356
+ if (!webWorkerCtx.$initWindowMedia$) {
1357
+ self.$bridgeToMedia$ = [ getter, setter, callMethod, constructGlobal, definePrototypePropertyDescriptor, randomId, WinIdKey, InstanceIdKey, ApplyPathKey ];
1358
+ webWorkerCtx.$importScripts$(partytownLibUrl("partytown-media.js?v=0.7.5"));
1359
+ webWorkerCtx.$initWindowMedia$ = self.$bridgeFromMedia$;
1360
+ delete self.$bridgeFromMedia$;
1361
+ }
1362
+ return webWorkerCtx.$initWindowMedia$;
1363
+ })()(WorkerBase, WorkerEventTargetProxy, env, win, windowMediaConstructors);
1364
+ hasInitializedMedia = 1;
1365
+ }
1366
+ };
1367
+ let nodeCstrs = {};
1368
+ let $createNode$ = (nodeName, instanceId, namespace) => {
1369
+ htmlMedia.includes(nodeName) && initWindowMedia();
1370
+ const NodeCstr = nodeCstrs[nodeName] ? nodeCstrs[nodeName] : nodeName.includes("-") ? nodeCstrs.UNKNOWN : nodeCstrs.I;
1371
+ cstrInstanceId = instanceId;
1372
+ cstrNodeName = nodeName;
1373
+ cstrNamespace = namespace;
1374
+ return new NodeCstr;
1375
+ };
1376
+ win.Window = WorkerWindow;
1377
+ win.name = name + `${normalizedWinId($winId$)} (${$winId$})`;
1378
+ createNodeCstr(win, env, WorkerBase);
1379
+ (win => {
1380
+ win.NodeList = defineConstructorName(NodeList, "NodeList");
1381
+ })(win);
1382
+ createNamedNodeMapCstr(win, WorkerBase);
1383
+ createCSSStyleDeclarationCstr(win, WorkerBase, "CSSStyleDeclaration");
1384
+ ((win, WorkerBase, cstrName) => {
1385
+ win[cstrName] = defineConstructorName(class extends WorkerBase {
1386
+ now() {
1387
+ return performance.now();
1388
+ }
1389
+ }, cstrName);
1390
+ })(win, WorkerBase, "Performance");
1391
+ ((win, nodeCstrs) => {
1392
+ const registry = new Map;
1393
+ win.customElements = {
1394
+ define(tagName, Cstr, opts) {
1395
+ registry.set(tagName, Cstr);
1396
+ nodeCstrs[tagName.toUpperCase()] = Cstr;
1397
+ const ceData = [ Cstr.name, Cstr.observedAttributes ];
1398
+ callMethod(win, [ "customElements", "define" ], [ tagName, ceData, opts ]);
1399
+ },
1400
+ get: tagName => registry.get(tagName) || callMethod(win, [ "customElements", "get" ], [ tagName ]),
1401
+ whenDefined: tagName => registry.has(tagName) ? Promise.resolve() : callMethod(win, [ "customElements", "whenDefined" ], [ tagName ]),
1402
+ upgrade: elm => callMethod(win, [ "customElements", "upgrade" ], [ elm ])
1403
+ };
1404
+ })(win, nodeCstrs);
1405
+ webWorkerCtx.$interfaces$.map((([cstrName, superCstrName, members, interfaceType, nodeName]) => {
1406
+ const SuperCstr = TrapConstructors[cstrName] ? WorkerTrapProxy : "EventTarget" === superCstrName ? WorkerEventTargetProxy : "Object" === superCstrName ? WorkerBase : win[superCstrName];
1407
+ const Cstr = win[cstrName] = defineConstructorName(12 === interfaceType ? class extends WorkerBase {
1408
+ constructor(...args) {
1409
+ super();
1410
+ constructGlobal(this, cstrName, args);
1411
+ }
1412
+ } : win[cstrName] || class extends SuperCstr {}, cstrName);
1413
+ nodeName && (nodeCstrs[nodeName] = Cstr);
1414
+ members.map((([memberName, memberType, staticValue]) => {
1415
+ memberName in Cstr.prototype || memberName in SuperCstr.prototype || ("string" == typeof memberType ? definePrototypeProperty(Cstr, memberName, {
1416
+ get() {
1417
+ if (!hasInstanceStateValue(this, memberName)) {
1418
+ const instanceId = this[InstanceIdKey];
1419
+ const applyPath = [ ...this[ApplyPathKey], memberName ];
1420
+ const PropCstr = win[memberType];
1421
+ PropCstr && setInstanceStateValue(this, memberName, new PropCstr($winId$, instanceId, applyPath));
1422
+ }
1423
+ return getInstanceStateValue(this, memberName);
1424
+ },
1425
+ set(value) {
1426
+ setInstanceStateValue(this, memberName, value);
1427
+ }
1428
+ }) : 5 === memberType ? definePrototypeValue(Cstr, memberName, (function(...args) {
1429
+ return callMethod(this, [ memberName ], args);
1430
+ })) : memberType > 0 && (void 0 !== staticValue ? definePrototypeValue(Cstr, memberName, staticValue) : definePrototypeProperty(Cstr, memberName, {
1431
+ get() {
1432
+ return getter(this, [ memberName ]);
1433
+ },
1434
+ set(value) {
1435
+ return setter(this, [ memberName ], value);
1436
+ }
1437
+ })));
1438
+ }));
1439
+ }));
1440
+ commaSplit("atob,btoa,crypto,indexedDB,setTimeout,setInterval,clearTimeout,clearInterval").map((globalName => {
1441
+ delete WorkerWindow.prototype[globalName];
1442
+ if (!(globalName in win)) {
1443
+ value = self[globalName];
1444
+ null != value && (win[globalName] = "function" != typeof value || value.toString().startsWith("class") ? value : value.bind(self));
1445
+ }
1446
+ }));
1447
+ Object.getOwnPropertyNames(self).map((globalName => {
1448
+ globalName in win || (win[globalName] = self[globalName]);
1449
+ }));
1450
+ windowMediaConstructors.map((cstrName => defineProperty(win, cstrName, {
1451
+ get() {
1452
+ initWindowMedia();
1453
+ return win[cstrName];
1454
+ }
1455
+ })));
1456
+ "trustedTypes" in self && (win.trustedTypes = self.trustedTypes);
1457
+ patchElement(win.Element, win.HTMLElement);
1458
+ patchDocument(win.Document, env, isDocumentImplementation);
1459
+ (WorkerDocumentFragment => {
1460
+ definePrototypeNodeType(WorkerDocumentFragment, 11);
1461
+ cachedTreeProps(WorkerDocumentFragment, elementStructurePropNames);
1462
+ })(win.DocumentFragment);
1463
+ patchHTMLAnchorElement(win.HTMLAnchorElement, env);
1464
+ (WorkerHTMLFormElement => {
1465
+ definePrototypePropertyDescriptor(WorkerHTMLFormElement, {});
1466
+ cachedProps(WorkerHTMLFormElement, "elements");
1467
+ })(win.HTMLFormElement);
1468
+ patchHTMLIFrameElement(win.HTMLIFrameElement);
1469
+ patchHTMLScriptElement(win.HTMLScriptElement, env);
1470
+ patchSvgElement(win.SVGGraphicsElement);
1471
+ patchDocumentElementChild(win.HTMLHeadElement, env);
1472
+ patchDocumentElementChild(win.HTMLBodyElement, env);
1473
+ ((WorkerHTMLHtmlElement, env) => {
1474
+ const DocumentElementDescriptorMap = {
1475
+ parentElement: {
1476
+ value: null
1477
+ },
1478
+ parentNode: {
1479
+ get: () => env.$document$
1480
+ }
1481
+ };
1482
+ definePrototypePropertyDescriptor(WorkerHTMLHtmlElement, DocumentElementDescriptorMap);
1483
+ })(win.HTMLHtmlElement, env);
1484
+ createCSSStyleSheetConstructor(win, "CSSStyleSheet");
1485
+ definePrototypeNodeType(win.Comment, 8);
1486
+ definePrototypeNodeType(win.DocumentType, 10);
1487
+ Object.assign(env, {
1488
+ $winId$: $winId$,
1489
+ $parentWinId$: $parentWinId$,
1490
+ $window$: new Proxy(win, {
1491
+ get: (win, propName) => {
1492
+ var _a;
1493
+ if ("string" != typeof propName || isNaN(propName)) {
1494
+ return (null === (_a = webWorkerCtx.$config$.mainWindowAccessors) || void 0 === _a ? void 0 : _a.includes(propName)) ? getter(this, [ propName ]) : win[propName];
1495
+ }
1496
+ {
1497
+ let frame = getChildEnvs()[propName];
1498
+ return frame ? frame.$window$ : void 0;
1499
+ }
1500
+ },
1501
+ has: () => true
1502
+ }),
1503
+ $document$: $createNode$("#document", $winId$ + ".d"),
1504
+ $documentElement$: $createNode$("HTML", $winId$ + ".e"),
1505
+ $head$: $createNode$("HEAD", $winId$ + ".h"),
1506
+ $body$: $createNode$("BODY", $winId$ + ".b"),
1507
+ $location$: $location$,
1508
+ $visibilityState$: $visibilityState$,
1509
+ $isSameOrigin$: $isSameOrigin$,
1510
+ $isTopWindow$: $isTopWindow$,
1511
+ $createNode$: $createNode$
1512
+ });
1513
+ win.requestAnimationFrame = cb => setTimeout((() => cb(performance.now())), 9);
1514
+ win.cancelAnimationFrame = id => clearTimeout(id);
1515
+ win.requestIdleCallback = (cb, start) => {
1516
+ start = Date.now();
1517
+ return setTimeout((() => cb({
1518
+ didTimeout: false,
1519
+ timeRemaining: () => Math.max(0, 50 - (Date.now() - start))
1520
+ })), 1);
1521
+ };
1522
+ win.cancelIdleCallback = id => clearTimeout(id);
1523
+ addStorageApi(win, "localStorage", webWorkerlocalStorage, $isSameOrigin$, env);
1524
+ addStorageApi(win, "sessionStorage", webWorkerSessionStorage, $isSameOrigin$, env);
1525
+ $isSameOrigin$ || (win.indexeddb = void 0);
1526
+ if (isIframeWindow) {
1527
+ historyState = {};
1528
+ win.history = {
1529
+ pushState(stateObj) {
1530
+ historyState = stateObj;
1531
+ },
1532
+ replaceState(stateObj) {
1533
+ historyState = stateObj;
1534
+ },
1535
+ get state() {
1536
+ return historyState;
1537
+ },
1538
+ length: 0
1539
+ };
1540
+ win.indexeddb = void 0;
1541
+ } else {
1542
+ const originalPushState = win.history.pushState.bind(win.history);
1543
+ const originalReplaceState = win.history.replaceState.bind(win.history);
1544
+ win.history.pushState = (stateObj, _, newUrl) => {
1545
+ false !== env.$propagateHistoryChange$ && originalPushState(stateObj, _, newUrl);
1546
+ };
1547
+ win.history.replaceState = (stateObj, _, newUrl) => {
1548
+ false !== env.$propagateHistoryChange$ && originalReplaceState(stateObj, _, newUrl);
1549
+ };
1550
+ }
1551
+ win.Worker = void 0;
1552
+ }
1553
+ addEventListener(...args) {
1554
+ "load" === args[0] ? env.$runWindowLoadEvent$ && setTimeout((() => args[1]({
1555
+ type: "load"
1556
+ }))) : callMethod(this, [ "addEventListener" ], args, 2);
1557
+ }
1558
+ get body() {
1559
+ return env.$body$;
1560
+ }
1561
+ get document() {
1562
+ return env.$document$;
1563
+ }
1564
+ get documentElement() {
1565
+ return env.$documentElement$;
1566
+ }
1567
+ fetch(input, init) {
1568
+ input = "string" == typeof input || input instanceof URL ? String(input) : input.url;
1569
+ return fetch(resolveUrl(env, input, "fetch"), init);
1570
+ }
1571
+ get frames() {
1572
+ return env.$window$;
1573
+ }
1574
+ get frameElement() {
1575
+ return $isTopWindow$ ? null : getOrCreateNodeInstance($parentWinId$, $winId$, "IFRAME");
1576
+ }
1577
+ get globalThis() {
1578
+ return env.$window$;
1579
+ }
1580
+ get head() {
1581
+ return env.$head$;
1582
+ }
1583
+ get length() {
1584
+ return getChildEnvs().length;
1585
+ }
1586
+ get location() {
1587
+ return $location$;
1588
+ }
1589
+ set location(loc) {
1590
+ $location$.href = loc + "";
1591
+ }
1592
+ get Image() {
1593
+ return createImageConstructor(env);
1594
+ }
1595
+ get navigator() {
1596
+ return (env => {
1597
+ let key;
1598
+ let nav = {
1599
+ sendBeacon: (url, body) => {
1600
+ if (webWorkerCtx.$config$.logSendBeaconRequests) {
1601
+ try {
1602
+ logWorker(`sendBeacon: ${resolveUrl(env, url, null)}${body ? ", data: " + JSON.stringify(body) : ""}`);
1603
+ } catch (e) {
1604
+ console.error(e);
1605
+ }
1606
+ }
1607
+ try {
1608
+ fetch(resolveUrl(env, url, null), {
1609
+ method: "POST",
1610
+ body: body,
1611
+ mode: "no-cors",
1612
+ keepalive: true
1613
+ });
1614
+ return true;
1615
+ } catch (e) {
1616
+ console.error(e);
1617
+ return false;
1618
+ }
1619
+ }
1620
+ };
1621
+ for (key in navigator) {
1622
+ nav[key] = navigator[key];
1623
+ }
1624
+ return nav;
1625
+ })(env);
1626
+ }
1627
+ get origin() {
1628
+ return $location$.origin;
1629
+ }
1630
+ set origin(_) {}
1631
+ get parent() {
1632
+ for (let envWinId in environments) {
1633
+ if (environments[envWinId].$winId$ === $parentWinId$) {
1634
+ return environments[envWinId].$window$;
1635
+ }
1636
+ }
1637
+ return env.$window$;
1638
+ }
1639
+ postMessage(...args) {
1640
+ if (environments[args[0]]) {
1641
+ len(postMessages) > 50 && postMessages.splice(0, 5);
1642
+ postMessages.push({
1643
+ $winId$: args[0],
1644
+ $data$: JSON.stringify(args[1])
1645
+ });
1646
+ args = args.slice(1);
1647
+ }
1648
+ callMethod(this, [ "postMessage" ], args, 3);
1649
+ }
1650
+ get self() {
1651
+ return env.$window$;
1652
+ }
1653
+ get top() {
1654
+ for (let envWinId in environments) {
1655
+ if (environments[envWinId].$isTopWindow$) {
1656
+ return environments[envWinId].$window$;
1657
+ }
1658
+ }
1659
+ return env.$window$;
1660
+ }
1661
+ get window() {
1662
+ return env.$window$;
1663
+ }
1664
+ get XMLHttpRequest() {
1665
+ const Xhr = XMLHttpRequest;
1666
+ const str = String(Xhr);
1667
+ const ExtendedXhr = defineConstructorName(class extends Xhr {
1668
+ open(...args) {
1669
+ args[1] = resolveUrl(env, args[1], "xhr");
1670
+ super.open(...args);
1671
+ }
1672
+ set withCredentials(_) {}
1673
+ toString() {
1674
+ return str;
1675
+ }
1676
+ }, getConstructorName(Xhr));
1677
+ ExtendedXhr.prototype.constructor.toString = () => str;
1678
+ return ExtendedXhr;
1679
+ }
1680
+ }, "Window");
1681
+ const WorkerTrapProxy = class extends WorkerBase {
1682
+ constructor(winId, instanceId, applyPath, nodeName) {
1683
+ super(winId, instanceId, applyPath, nodeName);
1684
+ return new Proxy(this, {
1685
+ get: (instance, propName) => getter(instance, [ propName ]),
1686
+ set(instance, propName, propValue) {
1687
+ setter(instance, [ propName ], propValue);
1688
+ return true;
1689
+ }
1690
+ });
1691
+ }
1692
+ };
1693
+ const WorkerEventTargetProxy = class extends WorkerBase {};
1694
+ eventTargetMethods.map((methodName => WorkerEventTargetProxy.prototype[methodName] = function(...args) {
1695
+ return callMethod(this, [ methodName ], args, 2);
1696
+ }));
1697
+ cachedProps(WorkerWindow, "devicePixelRatio");
1698
+ cachedDimensionProps(WorkerWindow);
1699
+ cachedDimensionMethods(WorkerWindow, [ "getComputedStyle" ]);
1700
+ new WorkerWindow;
1701
+ return env;
1702
+ };
1703
+ const TrapConstructors = {
1704
+ DOMStringMap: 1,
1705
+ NamedNodeMap: 1
1706
+ };
1707
+ const createEnvironment = ({$winId$: $winId$, $parentWinId$: $parentWinId$, $url$: $url$, $visibilityState$: $visibilityState$}, isIframeWindow, isDocumentImplementation) => {
1708
+ if (!environments[$winId$]) {
1709
+ environments[$winId$] = createWindow($winId$, $parentWinId$, $url$, $visibilityState$, isIframeWindow, isDocumentImplementation);
1710
+ {
1711
+ const winType = $winId$ === $parentWinId$ ? "top" : "iframe";
1712
+ logWorker(`Created ${winType} window ${normalizedWinId($winId$)} environment`, $winId$);
1713
+ }
1714
+ }
1715
+ webWorkerCtx.$postMessage$([ 7, $winId$ ]);
1716
+ return environments[$winId$];
1717
+ };
1718
+ const queuedEvents = [];
1719
+ const receiveMessageFromSandboxToWorker = ev => {
1720
+ const msg = ev.data;
1721
+ const msgType = msg[0];
1722
+ const msgValue = msg[1];
1723
+ if (webWorkerCtx.$isInitialized$) {
1724
+ if (7 === msgType) {
1725
+ (async initScript => {
1726
+ let winId = initScript.$winId$;
1727
+ let instanceId = initScript.$instanceId$;
1728
+ let instance = getOrCreateNodeInstance(winId, instanceId, "SCRIPT");
1729
+ let scriptContent = initScript.$content$;
1730
+ let scriptSrc = initScript.$url$;
1731
+ let scriptOrgSrc = initScript.$orgUrl$;
1732
+ let errorMsg = "";
1733
+ let env = environments[winId];
1734
+ let rsp;
1735
+ let javascriptContentTypes = [ "text/jscript", "text/javascript", "text/x-javascript", "application/javascript", "application/x-javascript", "text/ecmascript", "text/x-ecmascript", "application/ecmascript" ];
1736
+ if (scriptSrc) {
1737
+ try {
1738
+ scriptSrc = resolveToUrl(env, scriptSrc, "script") + "";
1739
+ setInstanceStateValue(instance, 4, scriptSrc);
1740
+ webWorkerCtx.$config$.logScriptExecution && logWorker(`Execute script src: ${scriptOrgSrc}`, winId);
1741
+ rsp = await fetch(scriptSrc);
1742
+ if (rsp.ok) {
1743
+ let responseContentType = rsp.headers.get("content-type");
1744
+ let shouldExecute = javascriptContentTypes.some((ct => {
1745
+ var _a, _b, _c;
1746
+ return null === (_c = null === (_a = null == responseContentType ? void 0 : responseContentType.toLowerCase) || void 0 === _a ? void 0 : (_b = _a.call(responseContentType)).includes) || void 0 === _c ? void 0 : _c.call(_b, ct);
1747
+ }));
1748
+ if (shouldExecute) {
1749
+ scriptContent = await rsp.text();
1750
+ env.$currentScriptId$ = instanceId;
1751
+ run(env, scriptContent, scriptOrgSrc || scriptSrc);
1752
+ }
1753
+ runStateLoadHandlers(instance, "load");
1754
+ } else {
1755
+ errorMsg = rsp.statusText;
1756
+ runStateLoadHandlers(instance, "error");
1757
+ }
1758
+ } catch (urlError) {
1759
+ console.error(urlError);
1760
+ errorMsg = String(urlError.stack || urlError);
1761
+ runStateLoadHandlers(instance, "error");
1762
+ }
1763
+ } else {
1764
+ scriptContent && (errorMsg = runScriptContent(env, instanceId, scriptContent, winId, errorMsg));
1765
+ }
1766
+ env.$currentScriptId$ = "";
1767
+ webWorkerCtx.$postMessage$([ 6, winId, instanceId, errorMsg ]);
1768
+ })(msgValue);
1769
+ } else if (9 === msgType) {
1770
+ (({$winId$: $winId$, $instanceId$: $instanceId$, $refId$: $refId$, $thisArg$: $thisArg$, $args$: $args$}) => {
1771
+ if (webWorkerRefsByRefId[$refId$]) {
1772
+ try {
1773
+ webWorkerRefsByRefId[$refId$].apply(deserializeFromMain($winId$, $instanceId$, [], $thisArg$), deserializeFromMain($winId$, $instanceId$, [], $args$));
1774
+ } catch (e) {
1775
+ console.error(e);
1776
+ }
1777
+ }
1778
+ })(msgValue);
1779
+ } else if (10 === msgType) {
1780
+ (({$winId$: $winId$, $forward$: $forward$, $args$: $args$}) => {
1781
+ try {
1782
+ let target = environments[$winId$].$window$;
1783
+ let i = 0;
1784
+ let l = len($forward$);
1785
+ for (;i < l; i++) {
1786
+ i + 1 < l ? target = target[$forward$[i]] : target[$forward$[i]].apply(target, deserializeFromMain(null, $winId$, [], $args$));
1787
+ }
1788
+ } catch (e) {
1789
+ console.error(e);
1790
+ }
1791
+ })(msgValue);
1792
+ } else if (5 === msgType) {
1793
+ createEnvironment(msgValue);
1794
+ } else if (8 === msgType) {
1795
+ if (1 !== environments[msgValue].$isInitialized$) {
1796
+ const winId = msgValue;
1797
+ const env = environments[winId];
1798
+ const winType = env.$winId$ === env.$parentWinId$ ? "top" : "iframe";
1799
+ logWorker(`Initialized ${winType} window ${normalizedWinId(winId)} environment 🎉`, winId);
1800
+ }
1801
+ environments[msgValue].$isInitialized$ = 1;
1802
+ environments[msgValue].$isLoading$ = 0;
1803
+ } else if (14 === msgType) {
1804
+ environments[msgValue].$visibilityState$ = msg[2];
1805
+ } else if (13 === msgType) {
1806
+ const $winId$ = msgValue.$winId$;
1807
+ const env = environments[$winId$];
1808
+ env.$location$.href = msgValue.url;
1809
+ !function($winId$, env, data) {
1810
+ const history = env.$window$.history;
1811
+ switch (data.type) {
1812
+ case 0:
1813
+ env.$propagateHistoryChange$ = false;
1814
+ try {
1815
+ history.pushState(data.state, "", data.newUrl);
1816
+ } catch (e) {}
1817
+ env.$propagateHistoryChange$ = true;
1818
+ break;
1819
+
1820
+ case 1:
1821
+ env.$propagateHistoryChange$ = false;
1822
+ try {
1823
+ history.replaceState(data.state, "", data.newUrl);
1824
+ } catch (e) {}
1825
+ env.$propagateHistoryChange$ = true;
1826
+ }
1827
+ }(msgValue.$winId$, env, msgValue);
1828
+ } else {
1829
+ 15 === msgType && ((_type, winId, instanceId, callbackName, args) => {
1830
+ const elm = getOrCreateNodeInstance(winId, instanceId);
1831
+ elm && "function" == typeof elm[callbackName] && elm[callbackName].apply(elm, args);
1832
+ })(...msg);
1833
+ }
1834
+ } else if (1 === msgType) {
1835
+ (initWebWorkerData => {
1836
+ const config = webWorkerCtx.$config$ = JSON.parse(initWebWorkerData.$config$);
1837
+ const locOrigin = initWebWorkerData.$origin$;
1838
+ webWorkerCtx.$importScripts$ = importScripts.bind(self);
1839
+ webWorkerCtx.$interfaces$ = initWebWorkerData.$interfaces$;
1840
+ webWorkerCtx.$libPath$ = initWebWorkerData.$libPath$;
1841
+ webWorkerCtx.$origin$ = locOrigin;
1842
+ webWorkerCtx.$postMessage$ = postMessage.bind(self);
1843
+ webWorkerCtx.$sharedDataBuffer$ = initWebWorkerData.$sharedDataBuffer$;
1844
+ webWorkerlocalStorage.set(locOrigin, initWebWorkerData.$localStorage$);
1845
+ webWorkerSessionStorage.set(locOrigin, initWebWorkerData.$sessionStorage$);
1846
+ self.importScripts = void 0;
1847
+ delete self.postMessage;
1848
+ delete self.WorkerGlobalScope;
1849
+ commaSplit("resolveUrl,get,set,apply").map((configName => {
1850
+ config[configName] && (config[configName] = new Function("return " + config[configName])());
1851
+ }));
1852
+ })(msgValue);
1853
+ webWorkerCtx.$postMessage$([ 2 ]);
1854
+ } else if (3 === msgType) {
1855
+ webWorkerCtx.$interfaces$ = [ ...webWorkerCtx.$interfaces$, ...msgValue ];
1856
+ webWorkerCtx.$isInitialized$ = 1;
1857
+ logWorker("Initialized web worker");
1858
+ webWorkerCtx.$postMessage$([ 4 ]);
1859
+ queuedEvents.length && logWorker(`Queued ready messages: ${queuedEvents.length}`);
1860
+ [ ...queuedEvents ].map(receiveMessageFromSandboxToWorker);
1861
+ queuedEvents.length = 0;
1862
+ } else {
1863
+ queuedEvents.push(ev);
1864
+ }
1865
+ };
1866
+ self.onmessage = receiveMessageFromSandboxToWorker;
1867
+ postMessage([ 0 ]);
1868
+ })(self);