@lynx-js/react 0.109.1 → 0.109.2

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/CHANGELOG.md CHANGED
@@ -1,5 +1,17 @@
1
1
  # @lynx-js/react
2
2
 
3
+ ## 0.109.2
4
+
5
+ ### Patch Changes
6
+
7
+ - Support for locating errors in the source code directly on the device when exceptions occur when using MTS. ([#1019](https://github.com/lynx-family/lynx-stack/pull/1019))
8
+
9
+ This requires Lynx engine v3.4 or later.
10
+
11
+ - Fix the "main-thread.js exception: ReferenceError: `__webpack_require__` is not defined" error in HMR. ([#985](https://github.com/lynx-family/lynx-stack/pull/985))
12
+
13
+ This error occurred when setting `output.iife: true`, which is the default value in `@lynx-js/rspeedy` v0.9.8.
14
+
3
15
  ## 0.109.1
4
16
 
5
17
  ### Patch Changes
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@lynx-js/react",
3
- "version": "0.109.1",
3
+ "version": "0.109.2",
4
4
  "description": "ReactLynx is a framework for developing Lynx applications with familiar React.",
5
5
  "repository": {
6
6
  "type": "git",
@@ -163,7 +163,7 @@
163
163
  "devDependencies": {
164
164
  "@lynx-js/types": "3.3.0",
165
165
  "@microsoft/api-extractor": "7.52.8",
166
- "@types/react": "^18.3.22"
166
+ "@types/react": "^18.3.23"
167
167
  },
168
168
  "peerDependencies": {
169
169
  "@lynx-js/types": "*",
@@ -5,4 +5,4 @@
5
5
 
6
6
  dist/index.js 11.4kb
7
7
 
8
- ⚡ Done in 21ms
8
+ ⚡ Done in 23ms
@@ -16,6 +16,6 @@
16
16
  "@lynx-js/react": "workspace:*",
17
17
  "@prefresh/core": "^1.5.3",
18
18
  "@prefresh/utils": "^1.2.0",
19
- "esbuild": "^0.25.4"
19
+ "esbuild": "^0.25.5"
20
20
  }
21
21
  }
@@ -113,11 +113,18 @@ export function snapshotPatchApply(snapshotPatch) {
113
113
  }
114
114
  }
115
115
  }
116
+ /* v8 ignore start */
116
117
  /**
117
118
  * Evaluates a string as code with ReactLynx runtime injected.
118
119
  * Used for HMR (Hot Module Replacement) to update snapshot definitions.
119
120
  */
120
121
  function evaluate(code) {
121
- return new Function(`return ${code}`)();
122
+ if (__DEV__) {
123
+ // We are using `eval` here to make the updated snapshot to access variables like `__webpack_require__`.
124
+ // See: https://github.com/lynx-family/lynx-stack/issues/983.
125
+ return eval(`(() => ${code})()`);
126
+ }
127
+ throw new Error('unreachable: evaluate is not supported in production');
122
128
  }
129
+ /* v8 ignore stop */
123
130
  //# sourceMappingURL=snapshotPatchApply.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"snapshotPatchApply.js","sourceRoot":"","sources":["../../../src/lifecycle/patch/snapshotPatchApply.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"snapshotPatchApply.js","sourceRoot":"","sources":["../../../src/lifecycle/patch/snapshotPatchApply.ts"],"names":[],"mappings":"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"}
@@ -129,10 +129,17 @@ export function snapshotPatchApply(snapshotPatch: SnapshotPatch): void {
129
129
  }
130
130
  }
131
131
 
132
+ /* v8 ignore start */
132
133
  /**
133
134
  * Evaluates a string as code with ReactLynx runtime injected.
134
135
  * Used for HMR (Hot Module Replacement) to update snapshot definitions.
135
136
  */
136
137
  function evaluate<T>(code: string): T {
137
- return new Function(`return ${code}`)();
138
+ if (__DEV__) {
139
+ // We are using `eval` here to make the updated snapshot to access variables like `__webpack_require__`.
140
+ // See: https://github.com/lynx-family/lynx-stack/issues/983.
141
+ return eval(`(() => ${code})()`);
142
+ }
143
+ throw new Error('unreachable: evaluate is not supported in production');
138
144
  }
145
+ /* v8 ignore stop */
@@ -1,5 +1,5 @@
1
- import * as __WEBPACK_EXTERNAL_MODULE_vitest_environments_fd1a84b1__ from "vitest/environments";
2
- import * as __WEBPACK_EXTERNAL_MODULE_events__ from "events";
1
+ import { builtinEnvironments } from "vitest/environments";
2
+ import external_events_default from "events";
3
3
  function util_define(object, properties) {
4
4
  for (const name of Object.getOwnPropertyNames(properties)){
5
5
  const propDesc = Object.getOwnPropertyDescriptor(properties, name);
@@ -321,7 +321,7 @@ function createPolyfills() {
321
321
  ]);
322
322
  }
323
323
  };
324
- const ee = new __WEBPACK_EXTERNAL_MODULE_events__["default"]();
324
+ const ee = new external_events_default();
325
325
  ee.dispatchEvent = ({ type, data })=>{
326
326
  const isMainThread = __MAIN_THREAD__;
327
327
  lynxTestingEnv.switchToBackgroundThread();
@@ -427,7 +427,7 @@ function injectBackgroundThreadGlobals(target, polyfills) {
427
427
  updateData: {}
428
428
  }
429
429
  };
430
- const globalEventEmitter = new __WEBPACK_EXTERNAL_MODULE_events__["default"]();
430
+ const globalEventEmitter = new external_events_default();
431
431
  globalEventEmitter.trigger = globalEventEmitter.emit;
432
432
  globalEventEmitter.toggle = globalEventEmitter.emit;
433
433
  target.lynx = {
@@ -531,7 +531,7 @@ const env = {
531
531
  transformMode: 'web',
532
532
  async setup (global1) {
533
533
  const fakeGlobal = {};
534
- await __WEBPACK_EXTERNAL_MODULE_vitest_environments_fd1a84b1__.builtinEnvironments.jsdom.setup(fakeGlobal, {});
534
+ await builtinEnvironments.jsdom.setup(fakeGlobal, {});
535
535
  global1.jsdom = fakeGlobal.jsdom;
536
536
  const lynxTestingEnv1 = new LynxTestingEnv();
537
537
  global1.lynxTestingEnv = lynxTestingEnv1;
@@ -1,12 +1,12 @@
1
- import * as __WEBPACK_EXTERNAL_MODULE__pure_js_8326ae41__ from "./pure.js";
1
+ import { cleanup } from "./pure.js";
2
2
  export * from "./pure.js";
3
3
  if ('undefined' == typeof process || 'true' !== process.env.PTL_SKIP_AUTO_CLEANUP) {
4
4
  if ('function' == typeof afterEach) afterEach(()=>{
5
- (0, __WEBPACK_EXTERNAL_MODULE__pure_js_8326ae41__.cleanup)();
5
+ cleanup();
6
6
  lynxTestingEnv.reset();
7
7
  });
8
8
  else if ('function' == typeof teardown) teardown(()=>{
9
- (0, __WEBPACK_EXTERNAL_MODULE__pure_js_8326ae41__.cleanup)();
9
+ cleanup();
10
10
  lynxTestingEnv.reset();
11
11
  });
12
12
  }
@@ -1,92 +1,92 @@
1
1
  /*! For license information please see pure.js.LICENSE.txt */
2
- import * as __WEBPACK_EXTERNAL_MODULE__lynx_js_react_jsx_runtime_3b157905__ from "@lynx-js/react/jsx-runtime";
3
- import * as __WEBPACK_EXTERNAL_MODULE_preact__ from "preact";
4
- import * as __WEBPACK_EXTERNAL_MODULE_preact_hooks_ad43f81f__ from "preact/hooks";
5
- import * as __WEBPACK_EXTERNAL_MODULE_preact_test_utils_c2734169__ from "preact/test-utils";
6
- import * as __WEBPACK_EXTERNAL_MODULE__lynx_js_react_internal_08331b1f__ from "@lynx-js/react/internal";
7
- import * as __WEBPACK_EXTERNAL_MODULE__runtime_lib_lynx_tt_js_37d9bcb1__ from "../../runtime/lib/lynx/tt.js";
8
- import * as __WEBPACK_EXTERNAL_MODULE__runtime_lib_snapshot_js_675dfde4__ from "../../runtime/lib/snapshot.js";
2
+ import { jsx } from "@lynx-js/react/jsx-runtime";
3
+ import { cloneElement, createRef, h, render } from "preact";
4
+ import { useEffect } from "preact/hooks";
5
+ import { act } from "preact/test-utils";
6
+ import { __root } from "@lynx-js/react/internal";
7
+ import { flushDelayedLifecycleEvents } from "../../runtime/lib/lynx/tt.js";
8
+ import { clearPage } from "../../runtime/lib/snapshot.js";
9
9
  var __webpack_modules__ = {
10
10
  "../../../node_modules/.pnpm/@testing-library+dom@10.4.0/node_modules/@testing-library/dom/dist/@testing-library/dom.esm.js": function(module, __webpack_exports__, __webpack_require__) {
11
11
  __webpack_require__.d(__webpack_exports__, {
12
- kG: ()=>wrapSingleQueryWithSuggestion,
13
- Cn: ()=>getByTitle,
14
- SU: ()=>findAllByTitle,
15
- UK: ()=>getAllByTestId,
16
- iJ: ()=>getAllByDisplayValue,
17
- xx: ()=>findByPlaceholderText,
18
- dB: ()=>getAllByTitle,
19
- nG: ()=>getElementError,
20
- F3: ()=>getRoles,
21
- VF: ()=>queryAllByRoleWithSuggestions,
22
- Z2: ()=>queryAllByTextWithSuggestions,
23
- sp: ()=>screen,
24
- Gi: ()=>buildQueries,
12
+ qg: ()=>getNodeText,
13
+ j: ()=>findAllByPlaceholderText,
25
14
  Qc: ()=>findByAltText,
26
- Ox: ()=>queryAllByAttribute,
15
+ FE: ()=>getAllByText,
16
+ Jh: ()=>queryAllByDisplayValueWithSuggestions,
17
+ zZ: ()=>queryByText,
18
+ Rr: ()=>findAllByRole,
27
19
  Sd: ()=>queryAllByTestIdWithSuggestions,
28
- si: ()=>getByTestId,
29
- DP: ()=>queryAllByPlaceholderTextWithSuggestions,
30
- fl: ()=>findAllByText,
31
- pP: ()=>findByTitle,
32
- gF: ()=>getByDisplayValue,
33
- u7: ()=>getByPlaceholderText,
34
- kt: ()=>makeGetAllQuery,
35
- fV: ()=>makeSingleQuery,
36
20
  m_: ()=>build,
37
- j: ()=>findAllByPlaceholderText,
38
- cp: ()=>queryAllByTitleWithSuggestions,
39
- MS: ()=>getByText,
40
- PD: ()=>queryAllByAltTextWithSuggestions,
41
- jQ: ()=>configure,
42
- QU: ()=>queryAllByLabelTextWithSuggestions,
43
- hq: ()=>queryByDisplayValue,
44
- $S: ()=>getAllByRole,
45
21
  Lr: ()=>getAllByAltText,
46
- Qz: ()=>getSuggestedQuery,
47
- J$: ()=>logDOM,
48
- c6: ()=>getMultipleElementsFoundError,
49
- nE: ()=>getByAltText,
50
- CZ: ()=>dom_esm_isInaccessible,
51
- Rr: ()=>findAllByRole,
52
- KS: ()=>queryByPlaceholderText,
53
- X_: ()=>waitForWrapper,
22
+ iE: ()=>getConfig,
23
+ Op: ()=>getAllByPlaceholderText,
24
+ dB: ()=>getAllByTitle,
25
+ DR: ()=>findByDisplayValue,
26
+ MY: ()=>findAllByTestId,
27
+ o$: ()=>queries,
54
28
  mz: ()=>waitForElementToBeRemoved,
55
- zZ: ()=>queryByText,
56
- uh: ()=>getQueriesForElement,
57
29
  Do: ()=>findAllByLabelText,
30
+ YA: ()=>getByRole,
31
+ bH: ()=>wrapAllByQueryWithSuggestion,
58
32
  BX: ()=>fireEvent,
33
+ pP: ()=>findByTitle,
34
+ DP: ()=>queryAllByPlaceholderTextWithSuggestions,
35
+ SU: ()=>findAllByTitle,
36
+ aT: ()=>findAllByDisplayValue,
59
37
  YS: ()=>getByLabelTextWithSuggestions,
60
- MM: ()=>queryByTitle,
61
- iE: ()=>getConfig,
62
- yM: ()=>createEvent,
63
- xG: ()=>getDefaultNormalizer,
64
- M: ()=>findByText,
65
- vF: ()=>prettyDOM,
66
- DR: ()=>findByDisplayValue,
67
- Uv: ()=>makeFindQuery,
68
- YA: ()=>getByRole,
69
- hN: ()=>findByRole,
38
+ Qz: ()=>getSuggestedQuery,
39
+ iJ: ()=>getAllByDisplayValue,
40
+ X_: ()=>waitForWrapper,
41
+ J$: ()=>logDOM,
42
+ UK: ()=>getAllByTestId,
43
+ $S: ()=>getAllByRole,
44
+ gm: ()=>findByLabelText,
45
+ Cn: ()=>getByTitle,
46
+ si: ()=>getByTestId,
47
+ Gi: ()=>buildQueries,
48
+ c6: ()=>getMultipleElementsFoundError,
49
+ MS: ()=>getByText,
50
+ CZ: ()=>dom_esm_isInaccessible,
51
+ VF: ()=>queryAllByRoleWithSuggestions,
70
52
  JU: ()=>queryByAttribute,
71
- fn: ()=>queryByLabelText,
72
53
  zx: ()=>queryHelpers,
73
- RG: ()=>queryByRole,
74
- aT: ()=>findAllByDisplayValue,
75
- gm: ()=>findByLabelText,
54
+ cp: ()=>queryAllByTitleWithSuggestions,
55
+ hq: ()=>queryByDisplayValue,
56
+ fn: ()=>queryByLabelText,
57
+ nG: ()=>getElementError,
58
+ sp: ()=>screen,
59
+ nd: ()=>findByTestId,
60
+ u7: ()=>getByPlaceholderText,
61
+ kG: ()=>wrapSingleQueryWithSuggestion,
62
+ uh: ()=>getQueriesForElement,
63
+ QU: ()=>queryAllByLabelTextWithSuggestions,
76
64
  kd: ()=>findAllByAltText,
77
- qg: ()=>getNodeText,
78
- o$: ()=>queries,
79
- Xv: ()=>queryByTestId,
80
- MY: ()=>findAllByTestId,
65
+ fl: ()=>findAllByText,
81
66
  T6: ()=>getAllByLabelTextWithSuggestions,
82
- Op: ()=>getAllByPlaceholderText,
83
- nd: ()=>findByTestId,
84
- FE: ()=>getAllByText,
67
+ nE: ()=>getByAltText,
68
+ vF: ()=>prettyDOM,
69
+ PD: ()=>queryAllByAltTextWithSuggestions,
70
+ M: ()=>findByText,
71
+ RG: ()=>queryByRole,
72
+ Xv: ()=>queryByTestId,
73
+ Ox: ()=>queryAllByAttribute,
74
+ Uv: ()=>makeFindQuery,
75
+ xG: ()=>getDefaultNormalizer,
76
+ yM: ()=>createEvent,
77
+ xx: ()=>findByPlaceholderText,
78
+ fV: ()=>makeSingleQuery,
79
+ jQ: ()=>configure,
80
+ Z2: ()=>queryAllByTextWithSuggestions,
81
+ hN: ()=>findByRole,
85
82
  W2: ()=>getQueriesForElement,
86
83
  m2: ()=>logRoles,
87
- Jh: ()=>queryAllByDisplayValueWithSuggestions,
88
84
  rf: ()=>queryByAltText,
89
- bH: ()=>wrapAllByQueryWithSuggestion
85
+ KS: ()=>queryByPlaceholderText,
86
+ kt: ()=>makeGetAllQuery,
87
+ F3: ()=>getRoles,
88
+ MM: ()=>queryByTitle,
89
+ gF: ()=>getByDisplayValue
90
90
  });
91
91
  var build = __webpack_require__("../../../node_modules/.pnpm/pretty-format@27.5.1/node_modules/pretty-format/build/index.js");
92
92
  var toStr = Object.prototype.toString;
@@ -14566,33 +14566,33 @@ function waitSchedule() {
14566
14566
  (0, dom_esm.jQ)({
14567
14567
  asyncWrapper: async (cb)=>{
14568
14568
  let result;
14569
- await (0, __WEBPACK_EXTERNAL_MODULE_preact_test_utils_c2734169__.act)(()=>{
14569
+ await act(()=>{
14570
14570
  result = cb();
14571
14571
  });
14572
14572
  return result;
14573
14573
  },
14574
14574
  eventWrapper: (cb)=>{
14575
14575
  let result;
14576
- (0, __WEBPACK_EXTERNAL_MODULE_preact_test_utils_c2734169__.act)(()=>{
14576
+ act(()=>{
14577
14577
  result = cb();
14578
14578
  });
14579
14579
  return result;
14580
14580
  }
14581
14581
  });
14582
- function render(ui, { queries, wrapper: WrapperComponent, enableMainThread = false, enableBackgroundThread = true } = {}) {
14582
+ function pure_render(ui, { queries, wrapper: WrapperComponent, enableMainThread = false, enableBackgroundThread = true } = {}) {
14583
14583
  if (!enableMainThread && !enableBackgroundThread) throw new Error('You must enable at least one thread for rendering (enableMainThread or enableBackgroundThread)');
14584
- const wrapUiIfNeeded = (innerElement)=>WrapperComponent ? (0, __WEBPACK_EXTERNAL_MODULE_preact__.h)(WrapperComponent, null, innerElement) : innerElement;
14584
+ const wrapUiIfNeeded = (innerElement)=>WrapperComponent ? h(WrapperComponent, null, innerElement) : innerElement;
14585
14585
  const comp = wrapUiIfNeeded(ui);
14586
- const compMainThread = (0, __WEBPACK_EXTERNAL_MODULE_preact__.cloneElement)(comp);
14587
- const compBackgroundThread = (0, __WEBPACK_EXTERNAL_MODULE_preact__.cloneElement)(comp);
14586
+ const compMainThread = cloneElement(comp);
14587
+ const compBackgroundThread = cloneElement(comp);
14588
14588
  globalThis.lynxTestingEnv.switchToMainThread();
14589
- __WEBPACK_EXTERNAL_MODULE__lynx_js_react_internal_08331b1f__.__root.__jsx = enableMainThread ? compMainThread : null;
14589
+ __root.__jsx = enableMainThread ? compMainThread : null;
14590
14590
  renderPage();
14591
14591
  if (enableBackgroundThread) {
14592
14592
  globalThis.lynxTestingEnv.switchToBackgroundThread();
14593
- (0, __WEBPACK_EXTERNAL_MODULE_preact_test_utils_c2734169__.act)(()=>{
14594
- (0, __WEBPACK_EXTERNAL_MODULE_preact__.render)(compBackgroundThread, __WEBPACK_EXTERNAL_MODULE__lynx_js_react_internal_08331b1f__.__root);
14595
- (0, __WEBPACK_EXTERNAL_MODULE__runtime_lib_lynx_tt_js_37d9bcb1__.flushDelayedLifecycleEvents)();
14593
+ act(()=>{
14594
+ render(compBackgroundThread, __root);
14595
+ flushDelayedLifecycleEvents();
14596
14596
  });
14597
14597
  }
14598
14598
  return {
@@ -14600,7 +14600,7 @@ function render(ui, { queries, wrapper: WrapperComponent, enableMainThread = fal
14600
14600
  unmount: cleanup,
14601
14601
  rerender: (rerenderUi)=>{
14602
14602
  lynxTestingEnv.reset();
14603
- return render(wrapUiIfNeeded(rerenderUi), {
14603
+ return pure_render(wrapUiIfNeeded(rerenderUi), {
14604
14604
  queries,
14605
14605
  wrapper: WrapperComponent,
14606
14606
  enableMainThread,
@@ -14613,31 +14613,31 @@ function render(ui, { queries, wrapper: WrapperComponent, enableMainThread = fal
14613
14613
  function cleanup() {
14614
14614
  const isMainThread = __MAIN_THREAD__;
14615
14615
  globalThis.lynxTestingEnv.switchToBackgroundThread();
14616
- (0, __WEBPACK_EXTERNAL_MODULE_preact_test_utils_c2734169__.act)(()=>{
14617
- (0, __WEBPACK_EXTERNAL_MODULE_preact__.render)(null, __WEBPACK_EXTERNAL_MODULE__lynx_js_react_internal_08331b1f__.__root);
14616
+ act(()=>{
14617
+ render(null, __root);
14618
14618
  });
14619
14619
  lynxTestingEnv.mainThread.elementTree.root = void 0;
14620
- (0, __WEBPACK_EXTERNAL_MODULE__runtime_lib_snapshot_js_675dfde4__.clearPage)();
14620
+ clearPage();
14621
14621
  lynxTestingEnv.jsdom.window.document.body.innerHTML = '';
14622
14622
  if (isMainThread) globalThis.lynxTestingEnv.switchToMainThread();
14623
14623
  }
14624
14624
  function renderHook(renderCallback, options) {
14625
14625
  const { initialProps, wrapper } = options || {};
14626
- const result = (0, __WEBPACK_EXTERNAL_MODULE_preact__.createRef)();
14626
+ const result = createRef();
14627
14627
  function TestComponent({ renderCallbackProps }) {
14628
14628
  const pendingResult = renderCallback(renderCallbackProps);
14629
- (0, __WEBPACK_EXTERNAL_MODULE_preact_hooks_ad43f81f__.useEffect)(()=>{
14629
+ useEffect(()=>{
14630
14630
  result.current = pendingResult;
14631
14631
  });
14632
14632
  return null;
14633
14633
  }
14634
- const { rerender: baseRerender, unmount } = render(/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE__lynx_js_react_jsx_runtime_3b157905__.jsx)(TestComponent, {
14634
+ const { rerender: baseRerender, unmount } = pure_render(/*#__PURE__*/ jsx(TestComponent, {
14635
14635
  renderCallbackProps: initialProps
14636
14636
  }), {
14637
14637
  wrapper
14638
14638
  });
14639
14639
  function rerender(rerenderCallbackProps) {
14640
- return baseRerender(/*#__PURE__*/ (0, __WEBPACK_EXTERNAL_MODULE__lynx_js_react_jsx_runtime_3b157905__.jsx)(TestComponent, {
14640
+ return baseRerender(/*#__PURE__*/ jsx(TestComponent, {
14641
14641
  renderCallbackProps: rerenderCallbackProps
14642
14642
  }));
14643
14643
  }
@@ -14724,4 +14724,4 @@ var __webpack_exports__waitForElementToBeRemoved = dom_esm.mz;
14724
14724
  var __webpack_exports__within = dom_esm.uh;
14725
14725
  var __webpack_exports__wrapAllByQueryWithSuggestion = dom_esm.bH;
14726
14726
  var __webpack_exports__wrapSingleQueryWithSuggestion = dom_esm.kG;
14727
- export { cleanup, fireEvent, render, renderHook, waitSchedule, __webpack_exports__buildQueries as buildQueries, __webpack_exports__configure as configure, __webpack_exports__createEvent as createEvent, __webpack_exports__findAllByAltText as findAllByAltText, __webpack_exports__findAllByDisplayValue as findAllByDisplayValue, __webpack_exports__findAllByLabelText as findAllByLabelText, __webpack_exports__findAllByPlaceholderText as findAllByPlaceholderText, __webpack_exports__findAllByRole as findAllByRole, __webpack_exports__findAllByTestId as findAllByTestId, __webpack_exports__findAllByText as findAllByText, __webpack_exports__findAllByTitle as findAllByTitle, __webpack_exports__findByAltText as findByAltText, __webpack_exports__findByDisplayValue as findByDisplayValue, __webpack_exports__findByLabelText as findByLabelText, __webpack_exports__findByPlaceholderText as findByPlaceholderText, __webpack_exports__findByRole as findByRole, __webpack_exports__findByTestId as findByTestId, __webpack_exports__findByText as findByText, __webpack_exports__findByTitle as findByTitle, __webpack_exports__getAllByAltText as getAllByAltText, __webpack_exports__getAllByDisplayValue as getAllByDisplayValue, __webpack_exports__getAllByLabelText as getAllByLabelText, __webpack_exports__getAllByPlaceholderText as getAllByPlaceholderText, __webpack_exports__getAllByRole as getAllByRole, __webpack_exports__getAllByTestId as getAllByTestId, __webpack_exports__getAllByText as getAllByText, __webpack_exports__getAllByTitle as getAllByTitle, __webpack_exports__getByAltText as getByAltText, __webpack_exports__getByDisplayValue as getByDisplayValue, __webpack_exports__getByLabelText as getByLabelText, __webpack_exports__getByPlaceholderText as getByPlaceholderText, __webpack_exports__getByRole as getByRole, __webpack_exports__getByTestId as getByTestId, __webpack_exports__getByText as getByText, __webpack_exports__getByTitle as getByTitle, __webpack_exports__getConfig as getConfig, __webpack_exports__getDefaultNormalizer as getDefaultNormalizer, __webpack_exports__getElementError as getElementError, __webpack_exports__getMultipleElementsFoundError as getMultipleElementsFoundError, __webpack_exports__getNodeText as getNodeText, __webpack_exports__getQueriesForElement as getQueriesForElement, __webpack_exports__getRoles as getRoles, __webpack_exports__getSuggestedQuery as getSuggestedQuery, __webpack_exports__isInaccessible as isInaccessible, __webpack_exports__logDOM as logDOM, __webpack_exports__logRoles as logRoles, __webpack_exports__makeFindQuery as makeFindQuery, __webpack_exports__makeGetAllQuery as makeGetAllQuery, __webpack_exports__makeSingleQuery as makeSingleQuery, __webpack_exports__prettyDOM as prettyDOM, __webpack_exports__prettyFormat as prettyFormat, __webpack_exports__queries as queries, __webpack_exports__queryAllByAltText as queryAllByAltText, __webpack_exports__queryAllByAttribute as queryAllByAttribute, __webpack_exports__queryAllByDisplayValue as queryAllByDisplayValue, __webpack_exports__queryAllByLabelText as queryAllByLabelText, __webpack_exports__queryAllByPlaceholderText as queryAllByPlaceholderText, __webpack_exports__queryAllByRole as queryAllByRole, __webpack_exports__queryAllByTestId as queryAllByTestId, __webpack_exports__queryAllByText as queryAllByText, __webpack_exports__queryAllByTitle as queryAllByTitle, __webpack_exports__queryByAltText as queryByAltText, __webpack_exports__queryByAttribute as queryByAttribute, __webpack_exports__queryByDisplayValue as queryByDisplayValue, __webpack_exports__queryByLabelText as queryByLabelText, __webpack_exports__queryByPlaceholderText as queryByPlaceholderText, __webpack_exports__queryByRole as queryByRole, __webpack_exports__queryByTestId as queryByTestId, __webpack_exports__queryByText as queryByText, __webpack_exports__queryByTitle as queryByTitle, __webpack_exports__queryHelpers as queryHelpers, __webpack_exports__screen as screen, __webpack_exports__waitFor as waitFor, __webpack_exports__waitForElementToBeRemoved as waitForElementToBeRemoved, __webpack_exports__within as within, __webpack_exports__wrapAllByQueryWithSuggestion as wrapAllByQueryWithSuggestion, __webpack_exports__wrapSingleQueryWithSuggestion as wrapSingleQueryWithSuggestion };
14727
+ export { cleanup, fireEvent, pure_render as render, renderHook, waitSchedule, __webpack_exports__buildQueries as buildQueries, __webpack_exports__configure as configure, __webpack_exports__createEvent as createEvent, __webpack_exports__findAllByAltText as findAllByAltText, __webpack_exports__findAllByDisplayValue as findAllByDisplayValue, __webpack_exports__findAllByLabelText as findAllByLabelText, __webpack_exports__findAllByPlaceholderText as findAllByPlaceholderText, __webpack_exports__findAllByRole as findAllByRole, __webpack_exports__findAllByTestId as findAllByTestId, __webpack_exports__findAllByText as findAllByText, __webpack_exports__findAllByTitle as findAllByTitle, __webpack_exports__findByAltText as findByAltText, __webpack_exports__findByDisplayValue as findByDisplayValue, __webpack_exports__findByLabelText as findByLabelText, __webpack_exports__findByPlaceholderText as findByPlaceholderText, __webpack_exports__findByRole as findByRole, __webpack_exports__findByTestId as findByTestId, __webpack_exports__findByText as findByText, __webpack_exports__findByTitle as findByTitle, __webpack_exports__getAllByAltText as getAllByAltText, __webpack_exports__getAllByDisplayValue as getAllByDisplayValue, __webpack_exports__getAllByLabelText as getAllByLabelText, __webpack_exports__getAllByPlaceholderText as getAllByPlaceholderText, __webpack_exports__getAllByRole as getAllByRole, __webpack_exports__getAllByTestId as getAllByTestId, __webpack_exports__getAllByText as getAllByText, __webpack_exports__getAllByTitle as getAllByTitle, __webpack_exports__getByAltText as getByAltText, __webpack_exports__getByDisplayValue as getByDisplayValue, __webpack_exports__getByLabelText as getByLabelText, __webpack_exports__getByPlaceholderText as getByPlaceholderText, __webpack_exports__getByRole as getByRole, __webpack_exports__getByTestId as getByTestId, __webpack_exports__getByText as getByText, __webpack_exports__getByTitle as getByTitle, __webpack_exports__getConfig as getConfig, __webpack_exports__getDefaultNormalizer as getDefaultNormalizer, __webpack_exports__getElementError as getElementError, __webpack_exports__getMultipleElementsFoundError as getMultipleElementsFoundError, __webpack_exports__getNodeText as getNodeText, __webpack_exports__getQueriesForElement as getQueriesForElement, __webpack_exports__getRoles as getRoles, __webpack_exports__getSuggestedQuery as getSuggestedQuery, __webpack_exports__isInaccessible as isInaccessible, __webpack_exports__logDOM as logDOM, __webpack_exports__logRoles as logRoles, __webpack_exports__makeFindQuery as makeFindQuery, __webpack_exports__makeGetAllQuery as makeGetAllQuery, __webpack_exports__makeSingleQuery as makeSingleQuery, __webpack_exports__prettyDOM as prettyDOM, __webpack_exports__prettyFormat as prettyFormat, __webpack_exports__queries as queries, __webpack_exports__queryAllByAltText as queryAllByAltText, __webpack_exports__queryAllByAttribute as queryAllByAttribute, __webpack_exports__queryAllByDisplayValue as queryAllByDisplayValue, __webpack_exports__queryAllByLabelText as queryAllByLabelText, __webpack_exports__queryAllByPlaceholderText as queryAllByPlaceholderText, __webpack_exports__queryAllByRole as queryAllByRole, __webpack_exports__queryAllByTestId as queryAllByTestId, __webpack_exports__queryAllByText as queryAllByText, __webpack_exports__queryAllByTitle as queryAllByTitle, __webpack_exports__queryByAltText as queryByAltText, __webpack_exports__queryByAttribute as queryByAttribute, __webpack_exports__queryByDisplayValue as queryByDisplayValue, __webpack_exports__queryByLabelText as queryByLabelText, __webpack_exports__queryByPlaceholderText as queryByPlaceholderText, __webpack_exports__queryByRole as queryByRole, __webpack_exports__queryByTestId as queryByTestId, __webpack_exports__queryByText as queryByText, __webpack_exports__queryByTitle as queryByTitle, __webpack_exports__queryHelpers as queryHelpers, __webpack_exports__screen as screen, __webpack_exports__waitFor as waitFor, __webpack_exports__waitForElementToBeRemoved as waitForElementToBeRemoved, __webpack_exports__within as within, __webpack_exports__wrapAllByQueryWithSuggestion as wrapAllByQueryWithSuggestion, __webpack_exports__wrapSingleQueryWithSuggestion as wrapSingleQueryWithSuggestion };
@@ -1,20 +1,20 @@
1
- import * as __WEBPACK_EXTERNAL_MODULE_preact__ from "preact";
2
- import * as __WEBPACK_EXTERNAL_MODULE__runtime_lib_backgroundSnapshot_js_d70e0888__ from "../../runtime/lib/backgroundSnapshot.js";
3
- import * as __WEBPACK_EXTERNAL_MODULE__runtime_lib_lifecycle_patch_commit_js_9adc7328__ from "../../runtime/lib/lifecycle/patch/commit.js";
4
- import * as __WEBPACK_EXTERNAL_MODULE__runtime_lib_lifecycle_patch_snapshotPatch_js_c1ebb33c__ from "../../runtime/lib/lifecycle/patch/snapshotPatch.js";
5
- import * as __WEBPACK_EXTERNAL_MODULE__runtime_lib_lifecycle_patch_updateMainThread_js_dca3a751__ from "../../runtime/lib/lifecycle/patch/updateMainThread.js";
6
- import * as __WEBPACK_EXTERNAL_MODULE__runtime_lib_lynx_calledByNative_js_f689039d__ from "../../runtime/lib/lynx/calledByNative.js";
7
- import * as __WEBPACK_EXTERNAL_MODULE__runtime_lib_lynx_tt_js_37d9bcb1__ from "../../runtime/lib/lynx/tt.js";
8
- import * as __WEBPACK_EXTERNAL_MODULE__runtime_lib_root_js_27522aef__ from "../../runtime/lib/root.js";
9
- import * as __WEBPACK_EXTERNAL_MODULE__runtime_lib_snapshot_js_675dfde4__ from "../../runtime/lib/snapshot.js";
10
- import * as __WEBPACK_EXTERNAL_MODULE__runtime_lib_worklet_destroy_js_8a273fd1__ from "../../runtime/lib/worklet/destroy.js";
11
- import * as __WEBPACK_EXTERNAL_MODULE__worklet_runtime_lib_api_lynxApi_js_c6dc2d67__ from "../../worklet-runtime/lib/api/lynxApi.js";
12
- import * as __WEBPACK_EXTERNAL_MODULE__worklet_runtime_lib_listeners_js_9f7cd330__ from "../../worklet-runtime/lib/listeners.js";
13
- import * as __WEBPACK_EXTERNAL_MODULE__worklet_runtime_lib_workletRuntime_js_e9debbe1__ from "../../worklet-runtime/lib/workletRuntime.js";
1
+ import { options } from "preact";
2
+ import { BackgroundSnapshotInstance } from "../../runtime/lib/backgroundSnapshot.js";
3
+ import { clearCommitTaskId, replaceCommitHook } from "../../runtime/lib/lifecycle/patch/commit.js";
4
+ import { deinitGlobalSnapshotPatch } from "../../runtime/lib/lifecycle/patch/snapshotPatch.js";
5
+ import { injectUpdateMainThread } from "../../runtime/lib/lifecycle/patch/updateMainThread.js";
6
+ import { injectCalledByNative } from "../../runtime/lib/lynx/calledByNative.js";
7
+ import { flushDelayedLifecycleEvents, injectTt } from "../../runtime/lib/lynx/tt.js";
8
+ import { setRoot } from "../../runtime/lib/root.js";
9
+ import { SnapshotInstance, backgroundSnapshotInstanceManager, snapshotInstanceManager } from "../../runtime/lib/snapshot.js";
10
+ import { destroyWorklet } from "../../runtime/lib/worklet/destroy.js";
11
+ import { initApiEnv } from "../../worklet-runtime/lib/api/lynxApi.js";
12
+ import { initEventListeners } from "../../worklet-runtime/lib/listeners.js";
13
+ import { initWorklet } from "../../worklet-runtime/lib/workletRuntime.js";
14
14
  const { onInjectMainThreadGlobals, onInjectBackgroundThreadGlobals, onResetLynxTestingEnv, onSwitchedToMainThread, onSwitchedToBackgroundThread, onInitWorkletRuntime } = globalThis;
15
- (0, __WEBPACK_EXTERNAL_MODULE__runtime_lib_lynx_calledByNative_js_f689039d__.injectCalledByNative)();
16
- (0, __WEBPACK_EXTERNAL_MODULE__runtime_lib_lifecycle_patch_updateMainThread_js_dca3a751__.injectUpdateMainThread)();
17
- (0, __WEBPACK_EXTERNAL_MODULE__runtime_lib_lifecycle_patch_commit_js_9adc7328__.replaceCommitHook)();
15
+ injectCalledByNative();
16
+ injectUpdateMainThread();
17
+ replaceCommitHook();
18
18
  globalThis.onInitWorkletRuntime = ()=>{
19
19
  if (onInitWorkletRuntime) onInitWorkletRuntime();
20
20
  if (process.env.DEBUG) console.log('initWorkletRuntime');
@@ -22,26 +22,26 @@ globalThis.onInitWorkletRuntime = ()=>{
22
22
  lynx.setInterval = setInterval;
23
23
  lynx.clearTimeout = clearTimeout;
24
24
  lynx.clearInterval = clearInterval;
25
- (0, __WEBPACK_EXTERNAL_MODULE__worklet_runtime_lib_workletRuntime_js_e9debbe1__.initWorklet)();
26
- (0, __WEBPACK_EXTERNAL_MODULE__worklet_runtime_lib_api_lynxApi_js_c6dc2d67__.initApiEnv)();
27
- (0, __WEBPACK_EXTERNAL_MODULE__worklet_runtime_lib_listeners_js_9f7cd330__.initEventListeners)();
25
+ initWorklet();
26
+ initApiEnv();
27
+ initEventListeners();
28
28
  return true;
29
29
  };
30
30
  globalThis.onInjectMainThreadGlobals = (target)=>{
31
31
  if (onInjectMainThreadGlobals) onInjectMainThreadGlobals();
32
32
  if (process.env.DEBUG) console.log('onInjectMainThreadGlobals');
33
- __WEBPACK_EXTERNAL_MODULE__runtime_lib_snapshot_js_675dfde4__.snapshotInstanceManager.clear();
34
- __WEBPACK_EXTERNAL_MODULE__runtime_lib_snapshot_js_675dfde4__.snapshotInstanceManager.nextId = 0;
35
- target.__root = new __WEBPACK_EXTERNAL_MODULE__runtime_lib_snapshot_js_675dfde4__.SnapshotInstance('root');
33
+ snapshotInstanceManager.clear();
34
+ snapshotInstanceManager.nextId = 0;
35
+ target.__root = new SnapshotInstance('root');
36
36
  function setupDocument(document) {
37
37
  document.createElement = function(type) {
38
- return new __WEBPACK_EXTERNAL_MODULE__runtime_lib_snapshot_js_675dfde4__.SnapshotInstance(type);
38
+ return new SnapshotInstance(type);
39
39
  };
40
40
  document.createElementNS = function(_ns, type) {
41
- return new __WEBPACK_EXTERNAL_MODULE__runtime_lib_snapshot_js_675dfde4__.SnapshotInstance(type);
41
+ return new SnapshotInstance(type);
42
42
  };
43
43
  document.createTextNode = function(text) {
44
- const i = new __WEBPACK_EXTERNAL_MODULE__runtime_lib_snapshot_js_675dfde4__.SnapshotInstance(null);
44
+ const i = new SnapshotInstance(null);
45
45
  i.setAttribute(0, text);
46
46
  Object.defineProperty(i, 'data', {
47
47
  set (v) {
@@ -58,18 +58,18 @@ globalThis.onInjectMainThreadGlobals = (target)=>{
58
58
  globalThis.onInjectBackgroundThreadGlobals = (target)=>{
59
59
  if (onInjectBackgroundThreadGlobals) onInjectBackgroundThreadGlobals();
60
60
  if (process.env.DEBUG) console.log('onInjectBackgroundThreadGlobals');
61
- __WEBPACK_EXTERNAL_MODULE__runtime_lib_snapshot_js_675dfde4__.backgroundSnapshotInstanceManager.clear();
62
- __WEBPACK_EXTERNAL_MODULE__runtime_lib_snapshot_js_675dfde4__.backgroundSnapshotInstanceManager.nextId = 0;
63
- target.__root = new __WEBPACK_EXTERNAL_MODULE__runtime_lib_backgroundSnapshot_js_d70e0888__.BackgroundSnapshotInstance('root');
61
+ backgroundSnapshotInstanceManager.clear();
62
+ backgroundSnapshotInstanceManager.nextId = 0;
63
+ target.__root = new BackgroundSnapshotInstance('root');
64
64
  function setupBackgroundDocument(document) {
65
65
  document.createElement = function(type) {
66
- return new __WEBPACK_EXTERNAL_MODULE__runtime_lib_backgroundSnapshot_js_d70e0888__.BackgroundSnapshotInstance(type);
66
+ return new BackgroundSnapshotInstance(type);
67
67
  };
68
68
  document.createElementNS = function(_ns, type) {
69
- return new __WEBPACK_EXTERNAL_MODULE__runtime_lib_backgroundSnapshot_js_d70e0888__.BackgroundSnapshotInstance(type);
69
+ return new BackgroundSnapshotInstance(type);
70
70
  };
71
71
  document.createTextNode = function(text) {
72
- const i = new __WEBPACK_EXTERNAL_MODULE__runtime_lib_backgroundSnapshot_js_d70e0888__.BackgroundSnapshotInstance(null);
72
+ const i = new BackgroundSnapshotInstance(null);
73
73
  i.setAttribute(0, text);
74
74
  Object.defineProperty(i, 'data', {
75
75
  set (v) {
@@ -84,7 +84,7 @@ globalThis.onInjectBackgroundThreadGlobals = (target)=>{
84
84
  target.globalPipelineOptions = void 0;
85
85
  const oldLynxCoreInject = globalThis.lynxCoreInject;
86
86
  globalThis.lynxCoreInject = target.lynxCoreInject;
87
- (0, __WEBPACK_EXTERNAL_MODULE__runtime_lib_lynx_tt_js_37d9bcb1__.injectTt)();
87
+ injectTt();
88
88
  globalThis.lynxCoreInject = oldLynxCoreInject;
89
89
  target.lynx.requireModuleAsync = async (url, callback)=>{
90
90
  try {
@@ -93,29 +93,29 @@ globalThis.onInjectBackgroundThreadGlobals = (target)=>{
93
93
  callback(err, null);
94
94
  }
95
95
  };
96
- (0, __WEBPACK_EXTERNAL_MODULE__runtime_lib_lifecycle_patch_snapshotPatch_js_c1ebb33c__.deinitGlobalSnapshotPatch)();
97
- (0, __WEBPACK_EXTERNAL_MODULE__runtime_lib_lifecycle_patch_commit_js_9adc7328__.clearCommitTaskId)();
96
+ deinitGlobalSnapshotPatch();
97
+ clearCommitTaskId();
98
98
  };
99
99
  globalThis.onResetLynxTestingEnv = ()=>{
100
100
  if (onResetLynxTestingEnv) onResetLynxTestingEnv();
101
101
  if (process.env.DEBUG) console.log('onResetLynxTestingEnv');
102
- (0, __WEBPACK_EXTERNAL_MODULE__runtime_lib_lynx_tt_js_37d9bcb1__.flushDelayedLifecycleEvents)();
103
- (0, __WEBPACK_EXTERNAL_MODULE__runtime_lib_worklet_destroy_js_8a273fd1__.destroyWorklet)();
102
+ flushDelayedLifecycleEvents();
103
+ destroyWorklet();
104
104
  lynxTestingEnv.switchToMainThread();
105
- (0, __WEBPACK_EXTERNAL_MODULE__worklet_runtime_lib_listeners_js_9f7cd330__.initEventListeners)();
105
+ initEventListeners();
106
106
  lynxTestingEnv.switchToBackgroundThread();
107
107
  };
108
108
  globalThis.onSwitchedToMainThread = ()=>{
109
109
  if (onSwitchedToMainThread) onSwitchedToMainThread();
110
110
  if (process.env.DEBUG) console.log('onSwitchedToMainThread');
111
- (0, __WEBPACK_EXTERNAL_MODULE__runtime_lib_root_js_27522aef__.setRoot)(globalThis.__root);
112
- __WEBPACK_EXTERNAL_MODULE_preact__.options.document = globalThis._document;
111
+ setRoot(globalThis.__root);
112
+ options.document = globalThis._document;
113
113
  };
114
114
  globalThis.onSwitchedToBackgroundThread = ()=>{
115
115
  if (onSwitchedToBackgroundThread) onSwitchedToBackgroundThread();
116
116
  if (process.env.DEBUG) console.log('onSwitchedToBackgroundThread');
117
- (0, __WEBPACK_EXTERNAL_MODULE__runtime_lib_root_js_27522aef__.setRoot)(globalThis.__root);
118
- __WEBPACK_EXTERNAL_MODULE_preact__.options.document = globalThis._document;
117
+ setRoot(globalThis.__root);
118
+ options.document = globalThis._document;
119
119
  };
120
120
  globalThis.onInjectMainThreadGlobals(globalThis.lynxTestingEnv.mainThread.globalThis);
121
121
  globalThis.onInjectBackgroundThreadGlobals(globalThis.lynxTestingEnv.backgroundThread.globalThis);
@@ -1,13 +1,13 @@
1
- import * as __WEBPACK_EXTERNAL_MODULE_vitest_config_02c5e5a4__ from "vitest/config";
2
- import * as __WEBPACK_EXTERNAL_MODULE_vitest_node_ace4f808__ from "vitest/node";
3
- import * as __WEBPACK_EXTERNAL_MODULE_path__ from "path";
4
- import * as __WEBPACK_EXTERNAL_MODULE_url__ from "url";
5
- import * as __WEBPACK_EXTERNAL_MODULE_module__ from "module";
6
- const vitest_config_filename = (0, __WEBPACK_EXTERNAL_MODULE_url__.fileURLToPath)(import.meta.url);
7
- const vitest_config_dirname = __WEBPACK_EXTERNAL_MODULE_path__["default"].dirname(vitest_config_filename);
8
- const vitest_config_require = (0, __WEBPACK_EXTERNAL_MODULE_module__.createRequire)(import.meta.url);
1
+ import { defineConfig } from "vitest/config";
2
+ import { VitestPackageInstaller } from "vitest/node";
3
+ import external_path_default from "path";
4
+ import { fileURLToPath } from "url";
5
+ import { createRequire } from "module";
6
+ const vitest_config_filename = fileURLToPath(import.meta.url);
7
+ const vitest_config_dirname = external_path_default.dirname(vitest_config_filename);
8
+ const vitest_config_require = createRequire(import.meta.url);
9
9
  async function ensurePackagesInstalled() {
10
- const installer = new __WEBPACK_EXTERNAL_MODULE_vitest_node_ace4f808__.VitestPackageInstaller();
10
+ const installer = new VitestPackageInstaller();
11
11
  const installed = await installer.ensureInstalled('jsdom', process.cwd());
12
12
  if (!installed) {
13
13
  console.log('ReactLynx Testing Library requires jsdom to be installed.');
@@ -28,8 +28,8 @@ const createVitestConfig = async (options)=>{
28
28
  return '';
29
29
  }
30
30
  const { transformReactLynxSync } = vitest_config_require('@lynx-js/react/transform');
31
- const relativePath = __WEBPACK_EXTERNAL_MODULE_path__["default"].relative(vitest_config_dirname, sourcePath);
32
- const basename = __WEBPACK_EXTERNAL_MODULE_path__["default"].basename(sourcePath);
31
+ const relativePath = normalizeSlashes(external_path_default.relative(vitest_config_dirname, sourcePath));
32
+ const basename = external_path_default.basename(sourcePath);
33
33
  const result = transformReactLynxSync(sourceText, {
34
34
  mode: 'test',
35
35
  pluginName: '',
@@ -67,11 +67,11 @@ const createVitestConfig = async (options)=>{
67
67
  }
68
68
  };
69
69
  }
70
- return (0, __WEBPACK_EXTERNAL_MODULE_vitest_config_02c5e5a4__.defineConfig)({
70
+ return defineConfig({
71
71
  server: {
72
72
  fs: {
73
73
  allow: [
74
- __WEBPACK_EXTERNAL_MODULE_path__["default"].join(vitest_config_dirname, '..')
74
+ external_path_default.join(vitest_config_dirname, '..')
75
75
  ]
76
76
  }
77
77
  },
@@ -82,9 +82,12 @@ const createVitestConfig = async (options)=>{
82
82
  environment: vitest_config_require.resolve('./env/vitest'),
83
83
  globals: true,
84
84
  setupFiles: [
85
- __WEBPACK_EXTERNAL_MODULE_path__["default"].join(vitest_config_dirname, 'vitest-global-setup')
85
+ external_path_default.join(vitest_config_dirname, 'vitest-global-setup')
86
86
  ]
87
87
  }
88
88
  });
89
89
  };
90
+ function normalizeSlashes(file) {
91
+ return file.replaceAll(external_path_default.win32.sep, '/');
92
+ }
90
93
  export { createVitestConfig };
@@ -518,4 +518,4 @@
518
518
  initEventListeners();
519
519
  }
520
520
  })();
521
- //# sourceMappingURL=dev.js.map
521
+ //# sourceMappingURL=data:application/json;base64,ewogICJ2ZXJzaW9uIjogMywKICAic291cmNlcyI6IFsiLi4vc3JjL2FwaS9lbGVtZW50LnRzIiwgIi4uL3NyYy9hcGkvbGVwdXNRdWVyeVNlbGVjdG9yLnRzIiwgIi4uL3NyYy91dGlscy92ZXJzaW9uLnRzIiwgIi4uL3NyYy9hcGkvbHlueEFwaS50cyIsICIuLi9zcmMvdXRpbHMvcHJvZmlsZS50cyIsICIuLi9zcmMvd29ya2xldFJlZi50cyIsICIuLi9zcmMvbGlzdGVuZXJzLnRzIiwgIi4uL3NyYy9kZWxheVJ1bk9uQmFja2dyb3VuZC50cyIsICIuLi9zcmMvZGVsYXlXb3JrbGV0RXZlbnQudHMiLCAiLi4vc3JjL2h5ZHJhdGUudHMiLCAiLi4vc3JjL2pzRnVuY3Rpb25MaWZlY3ljbGUudHMiLCAiLi4vc3JjL3dvcmtsZXRSdW50aW1lLnRzIiwgIi4uL3NyYy9pbmRleC50cyJdLAogICJzb3VyY2VSb290IjogIi9ob21lL3J1bm5lci93b3JrL2x5bngtc3RhY2svbHlueC1zdGFjay9wYWNrYWdlcy9yZWFjdC93b3JrbGV0LXJ1bnRpbWUvc3JjIiwKICAic291cmNlc0NvbnRlbnQiOiBbIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5leHBvcnQgY2xhc3MgRWxlbWVudCB7XG4gIHByaXZhdGUgc3RhdGljIHdpbGxGbHVzaCA9IGZhbHNlO1xuXG4gIC8vIEB0cy1leHBlY3QtZXJyb3Igc2V0IGluIGNvbnN0cnVjdG9yXG4gIHByaXZhdGUgcmVhZG9ubHkgZWxlbWVudDogRWxlbWVudE5vZGU7XG5cbiAgY29uc3RydWN0b3IoZWxlbWVudDogRWxlbWVudE5vZGUpIHtcbiAgICAvLyBJbiBMeW54IHZlcnNpb25zIHByaW9yIHRvIGFuZCBpbmNsdWRpbmcgMi4xNSxcbiAgICAvLyBhIGNyYXNoIG9jY3VycyB3aGVuIHByaW50aW5nIG9yIHRyYW5zZmVycmluZyByZWZDb3VudGVkIGFjcm9zcyB0aHJlYWRzLlxuICAgIC8vIEJ5cGFzcyB0aGlzIHByb2JsZW0gYnkgaGlkaW5nIHRoZSBlbGVtZW50IG9iamVjdC5cbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywgJ2VsZW1lbnQnLCB7XG4gICAgICBnZXQoKSB7XG4gICAgICAgIHJldHVybiBlbGVtZW50O1xuICAgICAgfSxcbiAgICB9KTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRBdHRyaWJ1dGUobmFtZTogc3RyaW5nLCB2YWx1ZTogdW5rbm93bik6IHZvaWQge1xuICAgIF9fU2V0QXR0cmlidXRlKHRoaXMuZWxlbWVudCwgbmFtZSwgdmFsdWUpO1xuICAgIHRoaXMuZmx1c2hFbGVtZW50VHJlZSgpO1xuICB9XG5cbiAgcHVibGljIHNldFN0eWxlUHJvcGVydHkobmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKTogdm9pZCB7XG4gICAgX19BZGRJbmxpbmVTdHlsZSh0aGlzLmVsZW1lbnQsIG5hbWUsIHZhbHVlKTtcbiAgICB0aGlzLmZsdXNoRWxlbWVudFRyZWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBzZXRTdHlsZVByb3BlcnRpZXMoc3R5bGVzOiBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+KTogdm9pZCB7XG4gICAgZm9yIChjb25zdCBrZXkgaW4gc3R5bGVzKSB7XG4gICAgICBfX0FkZElubGluZVN0eWxlKHRoaXMuZWxlbWVudCwga2V5LCBzdHlsZXNba2V5XSEpO1xuICAgIH1cbiAgICB0aGlzLmZsdXNoRWxlbWVudFRyZWUoKTtcbiAgfVxuXG4gIHB1YmxpYyBnZXRBdHRyaWJ1dGUoYXR0cmlidXRlTmFtZTogc3RyaW5nKTogdW5rbm93biB7XG4gICAgcmV0dXJuIF9fR2V0QXR0cmlidXRlQnlOYW1lKHRoaXMuZWxlbWVudCwgYXR0cmlidXRlTmFtZSk7XG4gIH1cblxuICBwdWJsaWMgZ2V0QXR0cmlidXRlTmFtZXMoKTogc3RyaW5nW10ge1xuICAgIHJldHVybiBfX0dldEF0dHJpYnV0ZU5hbWVzKHRoaXMuZWxlbWVudCk7XG4gIH1cblxuICBwdWJsaWMgcXVlcnlTZWxlY3RvcihzZWxlY3Rvcjogc3RyaW5nKTogRWxlbWVudCB8IG51bGwge1xuICAgIGNvbnN0IHJlZiA9IF9fUXVlcnlTZWxlY3Rvcih0aGlzLmVsZW1lbnQsIHNlbGVjdG9yLCB7fSk7XG4gICAgcmV0dXJuIHJlZiA/IG5ldyBFbGVtZW50KHJlZikgOiBudWxsO1xuICB9XG5cbiAgcHVibGljIHF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3I6IHN0cmluZyk6IEVsZW1lbnRbXSB7XG4gICAgcmV0dXJuIF9fUXVlcnlTZWxlY3RvckFsbCh0aGlzLmVsZW1lbnQsIHNlbGVjdG9yLCB7fSkubWFwKChlbGVtZW50KSA9PiB7XG4gICAgICByZXR1cm4gbmV3IEVsZW1lbnQoZWxlbWVudCk7XG4gICAgfSk7XG4gIH1cblxuICBwdWJsaWMgaW52b2tlKFxuICAgIG1ldGhvZE5hbWU6IHN0cmluZyxcbiAgICBwYXJhbXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPixcbiAgKTogUHJvbWlzZTx1bmtub3duPiB7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICAgIF9fSW52b2tlVUlNZXRob2QoXG4gICAgICAgIHRoaXMuZWxlbWVudCxcbiAgICAgICAgbWV0aG9kTmFtZSxcbiAgICAgICAgcGFyYW1zID8/IHt9LFxuICAgICAgICAocmVzOiB7IGNvZGU6IG51bWJlcjsgZGF0YTogdW5rbm93biB9KSA9PiB7XG4gICAgICAgICAgaWYgKHJlcy5jb2RlID09PSAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKHJlcy5kYXRhKTtcbiAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgcmVqZWN0KG5ldyBFcnJvcignVUkgbWV0aG9kIGludm9rZTogJyArIEpTT04uc3RyaW5naWZ5KHJlcykpKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICApO1xuICAgICAgdGhpcy5mbHVzaEVsZW1lbnRUcmVlKCk7XG4gICAgfSk7XG4gIH1cblxuICBwcml2YXRlIGZsdXNoRWxlbWVudFRyZWUoKSB7XG4gICAgaWYgKEVsZW1lbnQud2lsbEZsdXNoKSB7XG4gICAgICByZXR1cm47XG4gICAgfVxuICAgIEVsZW1lbnQud2lsbEZsdXNoID0gdHJ1ZTtcbiAgICB2b2lkIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4ge1xuICAgICAgRWxlbWVudC53aWxsRmx1c2ggPSBmYWxzZTtcbiAgICAgIF9fRmx1c2hFbGVtZW50VHJlZSgpO1xuICAgIH0pO1xuICB9XG59XG4iLCAiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tICcuL2VsZW1lbnQuanMnO1xuXG5jbGFzcyBQYWdlRWxlbWVudCB7XG4gIHByaXZhdGUgc3RhdGljIHBhZ2VFbGVtZW50OiBFbGVtZW50Tm9kZSB8IHVuZGVmaW5lZDtcblxuICBzdGF0aWMgZ2V0KCkge1xuICAgIFBhZ2VFbGVtZW50LnBhZ2VFbGVtZW50ID8/PSBfX0dldFBhZ2VFbGVtZW50KCk7XG4gICAgcmV0dXJuIFBhZ2VFbGVtZW50LnBhZ2VFbGVtZW50O1xuICB9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeVNlbGVjdG9yKGNzc1NlbGVjdG9yOiBzdHJpbmcpOiBFbGVtZW50IHwgbnVsbCB7XG4gIGNvbnN0IGVsZW1lbnQgPSBfX1F1ZXJ5U2VsZWN0b3IoUGFnZUVsZW1lbnQuZ2V0KCksIGNzc1NlbGVjdG9yLCB7fSk7XG4gIHJldHVybiBlbGVtZW50ID8gbmV3IEVsZW1lbnQoZWxlbWVudCkgOiBudWxsO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcXVlcnlTZWxlY3RvckFsbChjc3NTZWxlY3Rvcjogc3RyaW5nKTogRWxlbWVudFtdIHtcbiAgcmV0dXJuIF9fUXVlcnlTZWxlY3RvckFsbChQYWdlRWxlbWVudC5nZXQoKSwgY3NzU2VsZWN0b3IsIHt9KS5tYXAoXG4gICAgKGVsZW1lbnQpID0+IHtcbiAgICAgIHJldHVybiBuZXcgRWxlbWVudChlbGVtZW50KTtcbiAgICB9LFxuICApO1xufVxuIiwgIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5leHBvcnQgZnVuY3Rpb24gaXNTZGtWZXJzaW9uR3QobWFqb3I6IG51bWJlciwgbWlub3I6IG51bWJlcik6IGJvb2xlYW4ge1xuICBjb25zdCBseW54U2RrVmVyc2lvbjogc3RyaW5nID0gU3lzdGVtSW5mby5seW54U2RrVmVyc2lvbiA/PyAnMS4wJztcbiAgY29uc3QgdmVyc2lvbiA9IGx5bnhTZGtWZXJzaW9uLnNwbGl0KCcuJyk7XG4gIHJldHVybiAoXG4gICAgTnVtYmVyKHZlcnNpb25bMF0pID4gbWFqb3JcbiAgICB8fCAoTnVtYmVyKHZlcnNpb25bMF0pID09IG1ham9yICYmIE51bWJlcih2ZXJzaW9uWzFdKSA+IG1pbm9yKVxuICApO1xufVxuIiwgIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBxdWVyeVNlbGVjdG9yLCBxdWVyeVNlbGVjdG9yQWxsIH0gZnJvbSAnLi9sZXB1c1F1ZXJ5U2VsZWN0b3IuanMnO1xuaW1wb3J0IHsgaXNTZGtWZXJzaW9uR3QgfSBmcm9tICcuLi91dGlscy92ZXJzaW9uLmpzJztcblxuZnVuY3Rpb24gaW5pdEFwaUVudigpOiB2b2lkIHtcbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gIGx5bngucXVlcnlTZWxlY3RvciA9IHF1ZXJ5U2VsZWN0b3I7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICBseW54LnF1ZXJ5U2VsZWN0b3JBbGwgPSBxdWVyeVNlbGVjdG9yQWxsO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgZ2xvYmFsVGhpcy5zZXRUaW1lb3V0ID0gbHlueC5zZXRUaW1lb3V0IGFzIChjYjogKCkgPT4gdm9pZCwgdGltZW91dDogbnVtYmVyKSA9PiBudW1iZXI7XG4gIC8vIEB0cy1leHBlY3QtZXJyb3IgdHlwZVxuICBnbG9iYWxUaGlzLnNldEludGVydmFsID0gbHlueC5zZXRJbnRlcnZhbCBhcyAoY2I6ICgpID0+IHZvaWQsIHRpbWVvdXQ6IG51bWJlcikgPT4gbnVtYmVyO1xuICAvLyBAdHMtZXhwZWN0LWVycm9yIHR5cGVcbiAgZ2xvYmFsVGhpcy5jbGVhclRpbWVvdXQgPSBseW54LmNsZWFyVGltZW91dCBhcyAodGltZW91dDogbnVtYmVyKSA9PiB2b2lkO1xuICAvLyBJbiBseW54IDIuMTQgYGNsZWFySW50ZXJ2YWxgIGlzIG1pc3Rha2VubHkgc3BlbGxlZCBhcyBgY2xlYXJUaW1lSW50ZXJ2YWxgLiBUaGlzIGlzIGZpeGVkIGluIGx5bnggMi4xNS5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gIGdsb2JhbFRoaXMuY2xlYXJJbnRlcnZhbCA9IChseW54LmNsZWFySW50ZXJ2YWwgPz8gbHlueC5jbGVhclRpbWVJbnRlcnZhbCkgYXMgKHRpbWVvdXQ6IG51bWJlcikgPT4gdm9pZDtcblxuICB7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gICAgY29uc3QgcmVxdWVzdEFuaW1hdGlvbkZyYW1lID0gbHlueC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgYXMgKGNhbGxiYWNrOiAoKSA9PiB2b2lkKSA9PiBudW1iZXI7XG4gICAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gICAgbHlueC5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUgPSBnbG9iYWxUaGlzLnJlcXVlc3RBbmltYXRpb25GcmFtZSA9IChcbiAgICAgIGNhbGxiYWNrOiAoKSA9PiB2b2lkLFxuICAgICkgPT4ge1xuICAgICAgaWYgKCFpc1Nka1ZlcnNpb25HdCgyLCAxNSkpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAgICdyZXF1ZXN0QW5pbWF0aW9uRnJhbWUgaW4gbWFpbiB0aHJlYWQgc2NyaXB0IHJlcXVpcmVzIEx5bnggc2RrIHZlcnNpb24gMi4xNicsXG4gICAgICAgICk7XG4gICAgICB9XG4gICAgICByZXR1cm4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGNhbGxiYWNrKTtcbiAgICB9O1xuICB9XG5cbiAgLy8gQHRzLWV4cGVjdC1lcnJvciB0eXBlXG4gIGdsb2JhbFRoaXMuY2FuY2VsQW5pbWF0aW9uRnJhbWUgPSBseW54LmNhbmNlbEFuaW1hdGlvbkZyYW1lIGFzIChyZXF1ZXN0SWQ6IG51bWJlcikgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHsgaW5pdEFwaUVudiB9O1xuIiwgIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5leHBvcnQgZnVuY3Rpb24gcHJvZmlsZTxSZXQsIEZuIGV4dGVuZHMgKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gUmV0PihcbiAgc2xpY2VOYW1lOiBzdHJpbmcsXG4gIGY6IEZuLFxuKTogUmV0IHtcbiAgLyogdjggaWdub3JlIG5leHQgOSAqL1xuICAvLyBUT0RPOiBjaGFuZ2UgaXQgdG8gX19QUk9GSUxFX19cbiAgaWYgKF9fREVWX18pIHtcbiAgICBjb25zb2xlLnByb2ZpbGUoc2xpY2VOYW1lKTtcbiAgICB0cnkge1xuICAgICAgcmV0dXJuIGYoKTtcbiAgICB9IGZpbmFsbHkge1xuICAgICAgY29uc29sZS5wcm9maWxlRW5kKCk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBmKCk7XG4gIH1cbn1cbiIsICIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgRWxlbWVudCB9IGZyb20gJy4vYXBpL2VsZW1lbnQuanMnO1xuaW1wb3J0IHR5cGUgeyBXb3JrbGV0UmVmLCBXb3JrbGV0UmVmSWQsIFdvcmtsZXRSZWZJbXBsIH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5pbXBvcnQgeyBwcm9maWxlIH0gZnJvbSAnLi91dGlscy9wcm9maWxlLmpzJztcblxuaW50ZXJmYWNlIFJlZkltcGwge1xuICBfd29ya2xldFJlZk1hcDogUmVjb3JkPFdvcmtsZXRSZWZJZCwgV29ya2xldFJlZjx1bmtub3duPj47XG4gIF9maXJzdFNjcmVlbldvcmtsZXRSZWZNYXA6IFJlY29yZDxXb3JrbGV0UmVmSWQsIFdvcmtsZXRSZWY8dW5rbm93bj4+O1xuICB1cGRhdGVXb3JrbGV0UmVmKFxuICAgIHJlZkltcGw6IFdvcmtsZXRSZWZJbXBsPEVsZW1lbnQgfCBudWxsPixcbiAgICBlbGVtZW50OiBFbGVtZW50Tm9kZSB8IG51bGwsXG4gICk6IHZvaWQ7XG4gIHVwZGF0ZVdvcmtsZXRSZWZJbml0VmFsdWVDaGFuZ2VzKHBhdGNoOiBbbnVtYmVyLCB1bmtub3duXVtdKTogdm9pZDtcbiAgY2xlYXJGaXJzdFNjcmVlbldvcmtsZXRSZWZNYXAoKTogdm9pZDtcbn1cblxubGV0IGltcGw6IFJlZkltcGwgfCB1bmRlZmluZWQ7XG5cbmZ1bmN0aW9uIGluaXRXb3JrbGV0UmVmKCk6IFJlZkltcGwge1xuICByZXR1cm4gKGltcGwgPSB7XG4gICAgX3dvcmtsZXRSZWZNYXA6IHt9LFxuICAgIC8qKlxuICAgICAqIE1hcCBvZiB3b3JrbGV0IHJlZnMgdGhhdCBhcmUgY3JlYXRlZCBkdXJpbmcgZmlyc3Qgc2NyZWVuIHJlbmRlcmluZy5cbiAgICAgKiBUaGVzZSByZWZzIGFyZSBjcmVhdGVkIHdpdGggbmVnYXRpdmUgSURzIGFuZCBuZWVkIHRvIGJlIGh5ZHJhdGVkXG4gICAgICogd2hlbiB0aGUgYXBwIHN0YXJ0cy4gVGhlIG1hcCBpcyBjbGVhcmVkIGFmdGVyIGh5ZHJhdGlvbiBpcyBjb21wbGV0ZVxuICAgICAqIHRvIGZyZWUgdXAgbWVtb3J5LlxuICAgICAqL1xuICAgIF9maXJzdFNjcmVlbldvcmtsZXRSZWZNYXA6IHt9LFxuICAgIHVwZGF0ZVdvcmtsZXRSZWYsXG4gICAgdXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMsXG4gICAgY2xlYXJGaXJzdFNjcmVlbldvcmtsZXRSZWZNYXAsXG4gIH0pO1xufVxuXG5jb25zdCBjcmVhdGVXb3JrbGV0UmVmID0gPFQ+KFxuICBpZDogV29ya2xldFJlZklkLFxuICB2YWx1ZTogVCxcbik6IFdvcmtsZXRSZWY8VD4gPT4ge1xuICByZXR1cm4ge1xuICAgIGN1cnJlbnQ6IHZhbHVlLFxuICAgIF93dmlkOiBpZCxcbiAgfTtcbn07XG5cbmNvbnN0IGdldEZyb21Xb3JrbGV0UmVmTWFwID0gPFQ+KFxuICByZWZJbXBsOiBXb3JrbGV0UmVmSW1wbDxUPixcbik6IFdvcmtsZXRSZWY8VD4gPT4ge1xuICBjb25zdCBpZCA9IHJlZkltcGwuX3d2aWQ7XG4gIGxldCB2YWx1ZTtcbiAgaWYgKGlkIDwgMCkge1xuICAgIC8vIEF0IHRoZSBmaXJzdCBzY3JlZW4gcmVuZGVyaW5nLCB0aGUgd29ya2xldCByZWYgaXMgY3JlYXRlZCB3aXRoIGEgbmVnYXRpdmUgSUQuXG4gICAgLy8gTWlnaHQgYmUgY2FsbGVkIGluIHR3byBzY2VuYXJpb3M6XG4gICAgLy8gMS4gSW4gTVRTIGV2ZW50c1xuICAgIC8vIDIuIEluIGBtYWluLXRocmVhZDpyZWZgXG4gICAgdmFsdWUgPSBpbXBsIS5fZmlyc3RTY3JlZW5Xb3JrbGV0UmVmTWFwW2lkXSBhcyBXb3JrbGV0UmVmPFQ+O1xuICAgIGlmICghdmFsdWUpIHtcbiAgICAgIHZhbHVlID0gaW1wbCEuX2ZpcnN0U2NyZWVuV29ya2xldFJlZk1hcFtpZF0gPSBjcmVhdGVXb3JrbGV0UmVmKGlkLCByZWZJbXBsLl9pbml0VmFsdWUpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGltcGwhLl93b3JrbGV0UmVmTWFwW2lkXSBhcyBXb3JrbGV0UmVmPFQ+O1xuICB9XG5cbiAgLyogdjggaWdub3JlIG5leHQgMyAqL1xuICBpZiAoX19ERVZfXyAmJiB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdXb3JrbGV0OiByZWYgaXMgbm90IGluaXRpYWxpemVkOiAnICsgaWQpO1xuICB9XG4gIHJldHVybiB2YWx1ZTtcbn07XG5cbmZ1bmN0aW9uIHJlbW92ZVZhbHVlRnJvbVdvcmtsZXRSZWZNYXAoaWQ6IFdvcmtsZXRSZWZJZCk6IHZvaWQge1xuICBkZWxldGUgaW1wbCEuX3dvcmtsZXRSZWZNYXBbaWRdO1xufVxuXG4vKipcbiAqIENyZWF0ZSBhbiBlbGVtZW50IGluc3RhbmNlIG9mIHRoZSBnaXZlbiBlbGVtZW50IG5vZGUsIHRoZW4gc2V0IHRoZSB3b3JrbGV0IHZhbHVlIHRvIGl0LlxuICogVGhpcyBpcyBjYWxsZWQgaW4gYHNuYXBzaG90Q29udGV4dFVwZGF0ZVdvcmtsZXRSZWZgLlxuICogQHBhcmFtIGhhbmRsZSBoYW5kbGUgb2YgdGhlIHdvcmtsZXQgdmFsdWUuXG4gKiBAcGFyYW0gZWxlbWVudCB0aGUgZWxlbWVudCBub2RlLlxuICovXG5mdW5jdGlvbiB1cGRhdGVXb3JrbGV0UmVmKFxuICBoYW5kbGU6IFdvcmtsZXRSZWZJbXBsPEVsZW1lbnQgfCBudWxsPixcbiAgZWxlbWVudDogRWxlbWVudE5vZGUgfCBudWxsLFxuKTogdm9pZCB7XG4gIGdldEZyb21Xb3JrbGV0UmVmTWFwKGhhbmRsZSkuY3VycmVudCA9IGVsZW1lbnRcbiAgICA/IG5ldyBFbGVtZW50KGVsZW1lbnQpXG4gICAgOiBudWxsO1xufVxuXG5mdW5jdGlvbiB1cGRhdGVXb3JrbGV0UmVmSW5pdFZhbHVlQ2hhbmdlcyhcbiAgcGF0Y2g6IFtXb3JrbGV0UmVmSWQsIHVua25vd25dW10sXG4pOiB2b2lkIHtcbiAgcHJvZmlsZSgndXBkYXRlV29ya2xldFJlZkluaXRWYWx1ZUNoYW5nZXMnLCAoKSA9PiB7XG4gICAgcGF0Y2guZm9yRWFjaCgoW2lkLCB2YWx1ZV0pID0+IHtcbiAgICAgIGlmICghaW1wbCEuX3dvcmtsZXRSZWZNYXBbaWRdKSB7XG4gICAgICAgIGltcGwhLl93b3JrbGV0UmVmTWFwW2lkXSA9IGNyZWF0ZVdvcmtsZXRSZWYoaWQsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9KTtcbiAgfSk7XG59XG5cbmZ1bmN0aW9uIGNsZWFyRmlyc3RTY3JlZW5Xb3JrbGV0UmVmTWFwKCk6IHZvaWQge1xuICBpbXBsIS5fZmlyc3RTY3JlZW5Xb3JrbGV0UmVmTWFwID0ge307XG59XG5cbmV4cG9ydCB7XG4gIHR5cGUgUmVmSW1wbCxcbiAgY3JlYXRlV29ya2xldFJlZixcbiAgaW5pdFdvcmtsZXRSZWYsXG4gIGdldEZyb21Xb3JrbGV0UmVmTWFwLFxuICByZW1vdmVWYWx1ZUZyb21Xb3JrbGV0UmVmTWFwLFxuICB1cGRhdGVXb3JrbGV0UmVmSW5pdFZhbHVlQ2hhbmdlcyxcbn07XG4iLCAiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IFdvcmtsZXRFdmVudHMgfSBmcm9tICcuL2JpbmRpbmdzL2V2ZW50cy5qcyc7XG5pbXBvcnQgdHlwZSB7IFJlbGVhc2VXb3JrbGV0UmVmRGF0YSwgUnVuV29ya2xldEN0eERhdGEsIFJ1bldvcmtsZXRDdHhSZXREYXRhIH0gZnJvbSAnLi9iaW5kaW5ncy9ldmVudHMuanMnO1xuaW1wb3J0IHR5cGUgeyBDbG9zdXJlVmFsdWVUeXBlIH0gZnJvbSAnLi9iaW5kaW5ncy90eXBlcy5qcyc7XG5pbXBvcnQgdHlwZSB7IEV2ZW50IH0gZnJvbSAnLi90eXBlcy9ydW50aW1lUHJveHkuanMnO1xuaW1wb3J0IHsgcmVtb3ZlVmFsdWVGcm9tV29ya2xldFJlZk1hcCB9IGZyb20gJy4vd29ya2xldFJlZi5qcyc7XG5cbmZ1bmN0aW9uIGluaXRFdmVudExpc3RlbmVycygpOiB2b2lkIHtcbiAgY29uc3QganNDb250ZXh0ID0gbHlueC5nZXRKU0NvbnRleHQoKTtcbiAganNDb250ZXh0LmFkZEV2ZW50TGlzdGVuZXIoXG4gICAgV29ya2xldEV2ZW50cy5ydW5Xb3JrbGV0Q3R4LFxuICAgIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIGNvbnN0IGRhdGEgPSBKU09OLnBhcnNlKGV2ZW50LmRhdGEgYXMgc3RyaW5nKSBhcyBSdW5Xb3JrbGV0Q3R4RGF0YTtcbiAgICAgIGNvbnN0IHJldHVyblZhbHVlID0gcnVuV29ya2xldChkYXRhLndvcmtsZXQsIGRhdGEucGFyYW1zIGFzIENsb3N1cmVWYWx1ZVR5cGVbXSk7XG4gICAgICBqc0NvbnRleHQuZGlzcGF0Y2hFdmVudCh7XG4gICAgICAgIHR5cGU6IFdvcmtsZXRFdmVudHMuRnVuY3Rpb25DYWxsUmV0LFxuICAgICAgICBkYXRhOiBKU09OLnN0cmluZ2lmeSh7XG4gICAgICAgICAgcmVzb2x2ZUlkOiBkYXRhLnJlc29sdmVJZCxcbiAgICAgICAgICByZXR1cm5WYWx1ZSxcbiAgICAgICAgfSBhcyBSdW5Xb3JrbGV0Q3R4UmV0RGF0YSksXG4gICAgICB9KTtcbiAgICB9LFxuICApO1xuICBqc0NvbnRleHQuYWRkRXZlbnRMaXN0ZW5lcihcbiAgICBXb3JrbGV0RXZlbnRzLnJlbGVhc2VXb3JrbGV0UmVmLFxuICAgIChldmVudDogRXZlbnQpID0+IHtcbiAgICAgIHJlbW92ZVZhbHVlRnJvbVdvcmtsZXRSZWZNYXAoKGV2ZW50LmRhdGEgYXMgUmVsZWFzZVdvcmtsZXRSZWZEYXRhKS5pZCk7XG4gICAgfSxcbiAgKTtcbn1cblxuZXhwb3J0IHsgaW5pdEV2ZW50TGlzdGVuZXJzIH07XG4iLCAiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB0eXBlIHsgSnNGbkhhbmRsZSB9IGZyb20gJy4vYmluZGluZ3MvdHlwZXMuanMnO1xuXG5pbnRlcmZhY2UgRGV0YWlscyB7XG4gIHRhc2s6IChmbklkOiBudW1iZXIsIGV4ZWNJZDogbnVtYmVyKSA9PiB2b2lkO1xuXG4gIC8vIFRoaXMgY29tZXMgZnJvbSB0aGUgYmFja2dyb3VuZCB0aHJlYWQsIGluc2VydGVkIGhlcmUgZHVyaW5nIGN0eCBoeWRyYXRpb24uXG4gIGpzRm5IYW5kbGU/OiBKc0ZuSGFuZGxlO1xufVxuXG5pbnRlcmZhY2UgUnVuT25CYWNrZ3JvdW5kRGVsYXlJbXBsIHtcbiAgLy8gRWxlbWVudHMgc2hvdWxkIGtlZXAgdGhlIG9yZGVyIGJlaW5nIGNhbGxlZCBieSB0aGUgdXNlci5cbiAgZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5OiBEZXRhaWxzW107XG4gIGRlbGF5UnVuT25CYWNrZ3JvdW5kKGZuT2JqOiBKc0ZuSGFuZGxlLCBmbjogKGZuSWQ6IG51bWJlciwgZXhlY0lkOiBudW1iZXIpID0+IHZvaWQpOiB2b2lkO1xuICBydW5EZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9ucygpOiB2b2lkO1xufVxuXG5sZXQgaW1wbDogUnVuT25CYWNrZ3JvdW5kRGVsYXlJbXBsIHwgdW5kZWZpbmVkO1xuXG5mdW5jdGlvbiBpbml0UnVuT25CYWNrZ3JvdW5kRGVsYXkoKTogUnVuT25CYWNrZ3JvdW5kRGVsYXlJbXBsIHtcbiAgcmV0dXJuIChpbXBsID0ge1xuICAgIGRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25BcnJheTogW10sXG4gICAgZGVsYXlSdW5PbkJhY2tncm91bmQsXG4gICAgcnVuRGVsYXllZEJhY2tncm91bmRGdW5jdGlvbnMsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkZWxheVJ1bk9uQmFja2dyb3VuZChmbk9iajogSnNGbkhhbmRsZSwgdGFzazogKGZuSWQ6IG51bWJlciwgZXhlY0lkOiBudW1iZXIpID0+IHZvaWQpIHtcbiAgaW1wbCEuZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5LnB1c2goeyB0YXNrIH0pO1xuICBjb25zdCBkZWxheUluZGljZXMgPSBmbk9iai5fZGVsYXlJbmRpY2VzID8/PSBbXTtcbiAgZGVsYXlJbmRpY2VzLnB1c2goaW1wbCEuZGVsYXllZEJhY2tncm91bmRGdW5jdGlvbkFycmF5Lmxlbmd0aCAtIDEpO1xufVxuXG5mdW5jdGlvbiBydW5EZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9ucygpOiB2b2lkIHtcbiAgZm9yIChjb25zdCBkZXRhaWxzIG9mIGltcGwhLmRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25BcnJheSkge1xuICAgIGlmIChkZXRhaWxzLmpzRm5IYW5kbGUpIHtcbiAgICAgIGRldGFpbHMudGFzayhkZXRhaWxzLmpzRm5IYW5kbGUuX2pzRm5JZCEsIGRldGFpbHMuanNGbkhhbmRsZS5fZXhlY0lkISk7XG4gICAgfVxuICB9XG4gIGltcGwhLmRlbGF5ZWRCYWNrZ3JvdW5kRnVuY3Rpb25BcnJheS5sZW5ndGggPSAwO1xufVxuXG5leHBvcnQgeyB0eXBlIFJ1bk9uQmFja2dyb3VuZERlbGF5SW1wbCwgaW5pdFJ1bk9uQmFja2dyb3VuZERlbGF5IH07XG4iLCAiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB0eXBlIHsgQ2xvc3VyZVZhbHVlVHlwZSwgV29ya2xldCB9IGZyb20gJy4vYmluZGluZ3MvdHlwZXMuanMnO1xuaW1wb3J0IHsgcHJvZmlsZSB9IGZyb20gJy4vdXRpbHMvcHJvZmlsZS5qcyc7XG5cbmludGVyZmFjZSBFdmVudERlbGF5SW1wbCB7XG4gIF9kZWxheWVkV29ya2xldFBhcmFtc01hcDogTWFwPHN0cmluZywgQ2xvc3VyZVZhbHVlVHlwZVtdW10+O1xuICBydW5EZWxheWVkV29ya2xldCh3b3JrbGV0OiBXb3JrbGV0LCBlbGVtZW50OiBFbGVtZW50Tm9kZSk6IHZvaWQ7XG4gIGNsZWFyRGVsYXllZFdvcmtsZXRzKCk6IHZvaWQ7XG59XG5cbmxldCBpbXBsOiBFdmVudERlbGF5SW1wbCB8IHVuZGVmaW5lZDtcblxuZnVuY3Rpb24gaW5pdEV2ZW50RGVsYXkoKTogRXZlbnREZWxheUltcGwge1xuICByZXR1cm4gKGltcGwgPSB7XG4gICAgX2RlbGF5ZWRXb3JrbGV0UGFyYW1zTWFwOiBuZXcgTWFwKCksXG4gICAgcnVuRGVsYXllZFdvcmtsZXQsXG4gICAgY2xlYXJEZWxheWVkV29ya2xldHMsXG4gIH0pO1xufVxuXG5mdW5jdGlvbiBkZWxheUV4ZWNVbnRpbEpzUmVhZHkoXG4gIGhhc2g6IHN0cmluZyxcbiAgcGFyYW1zOiBDbG9zdXJlVmFsdWVUeXBlW10sXG4pOiB2b2lkIHtcbiAgcHJvZmlsZSgnZGVsYXlFeGVjVW50aWxKc1JlYWR5OiAnICsgaGFzaCwgKCkgPT4ge1xuICAgIGNvbnN0IG1hcCA9IGltcGwhLl9kZWxheWVkV29ya2xldFBhcmFtc01hcDtcbiAgICBjb25zdCBwYXJhbVZlYyA9IG1hcC5nZXQoaGFzaCk7XG4gICAgaWYgKHBhcmFtVmVjKSB7XG4gICAgICBwYXJhbVZlYy5wdXNoKHBhcmFtcyk7XG4gICAgfSBlbHNlIHtcbiAgICAgIG1hcC5zZXQoaGFzaCwgW3BhcmFtc10pO1xuICAgIH1cbiAgfSk7XG59XG5cbmZ1bmN0aW9uIHJ1bkRlbGF5ZWRXb3JrbGV0KHdvcmtsZXQ6IFdvcmtsZXQsIGVsZW1lbnQ6IEVsZW1lbnROb2RlKTogdm9pZCB7XG4gIHByb2ZpbGUoJ2NvbW1pdERlbGF5ZWRXb3JrbGV0JywgKCkgPT4ge1xuICAgIGNvbnN0IHBhcmFtc1ZlYyA9IGltcGwhLl9kZWxheWVkV29ya2xldFBhcmFtc01hcC5nZXQoXG4gICAgICB3b3JrbGV0Ll93a2x0SWQsXG4gICAgKTtcbiAgICBpZiAocGFyYW1zVmVjID09PSB1bmRlZmluZWQpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgY29uc3QgbGVmdFBhcmFtc1ZlYzogQ2xvc3VyZVZhbHVlVHlwZVtdW10gPSBbXTtcbiAgICBwYXJhbXNWZWMuZm9yRWFjaCgocGFyYW1zKSA9PiB7XG4gICAgICBjb25zdCBmaXJzdFBhcmFtID0gcGFyYW1zWzBdIGFzIHsgY3VycmVudFRhcmdldD86IHsgZWxlbWVudFJlZnB0cj86IEVsZW1lbnROb2RlIH0gfSB8IHVuZGVmaW5lZDtcbiAgICAgIGlmIChmaXJzdFBhcmFtPy5jdXJyZW50VGFyZ2V0Py5lbGVtZW50UmVmcHRyID09PSBlbGVtZW50KSB7XG4gICAgICAgIHNldFRpbWVvdXQoKCkgPT4ge1xuICAgICAgICAgIHByb2ZpbGUoJ3J1bkRlbGF5ZWRXb3JrbGV0JywgKCkgPT4ge1xuICAgICAgICAgICAgcnVuV29ya2xldCh3b3JrbGV0LCBwYXJhbXMpO1xuICAgICAgICAgIH0pO1xuICAgICAgICB9LCAwKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGxlZnRQYXJhbXNWZWMucHVzaChwYXJhbXMpO1xuICAgICAgfVxuICAgIH0pO1xuICAgIGltcGwhLl9kZWxheWVkV29ya2xldFBhcmFtc01hcC5zZXQoXG4gICAgICB3b3JrbGV0Ll93a2x0SWQsXG4gICAgICBsZWZ0UGFyYW1zVmVjLFxuICAgICk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBjbGVhckRlbGF5ZWRXb3JrbGV0cygpOiB2b2lkIHtcbiAgaW1wbCEuX2RlbGF5ZWRXb3JrbGV0UGFyYW1zTWFwLmNsZWFyKCk7XG59XG5cbmV4cG9ydCB7IHR5cGUgRXZlbnREZWxheUltcGwsIGluaXRFdmVudERlbGF5LCBkZWxheUV4ZWNVbnRpbEpzUmVhZHksIHJ1bkRlbGF5ZWRXb3JrbGV0LCBjbGVhckRlbGF5ZWRXb3JrbGV0cyB9O1xuIiwgIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tICcuL2FwaS9lbGVtZW50LmpzJztcbmltcG9ydCB0eXBlIHsgQ2xvc3VyZVZhbHVlVHlwZSwgSnNGbkhhbmRsZSwgV29ya2xldCwgV29ya2xldFJlZklkLCBXb3JrbGV0UmVmSW1wbCB9IGZyb20gJy4vYmluZGluZ3MvaW5kZXguanMnO1xuaW1wb3J0IHsgcHJvZmlsZSB9IGZyb20gJy4vdXRpbHMvcHJvZmlsZS5qcyc7XG5cbi8qKlxuICogSHlkcmF0ZXMgYSBXb3JrbGV0IGNvbnRleHQgd2l0aCBkYXRhIGZyb20gYSBmaXJzdC1zY3JlZW4gV29ya2xldCBjb250ZXh0LlxuICogVGhpcyBwcm9jZXNzIGlzIHR5cGljYWxseSB1c2VkIHRvIHJ1biBhbGwgZGVsYXllZCBgcnVuT25CYWNrZ3JvdW5kYCBmdW5jdGlvbnNcbiAqIGFuZCBpbml0aWFsaXplIGBXb3JrbGV0UmVmYCB2YWx1ZXMgbW9kaWZpZWQgYmVmb3JlIGh5ZHJhdGlvbi5cbiAqXG4gKiBAcGFyYW0gY3R4IFRoZSB0YXJnZXQgV29ya2xldCBjb250ZXh0IHRvIGJlIGh5ZHJhdGVkLlxuICogQHBhcmFtIGZpcnN0U2NyZWVuQ3R4IFRoZSBXb3JrbGV0IGNvbnRleHQgZnJvbSB0aGUgZmlyc3Qgc2NyZWVuIHJlbmRlcmluZyxcbiAqICAgICAgICAgICAgICAgICAgICAgICBjb250YWluaW5nIHRoZSBkYXRhIHRvIGh5ZHJhdGUgd2l0aC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGh5ZHJhdGVDdHgoY3R4OiBXb3JrbGV0LCBmaXJzdFNjcmVlbkN0eDogV29ya2xldCk6IHZvaWQge1xuICBwcm9maWxlKCdoeWRyYXRlQ3R4JywgKCkgPT4ge1xuICAgIGh5ZHJhdGVDdHhJbXBsKGN0eCwgZmlyc3RTY3JlZW5DdHgsIGN0eC5fZXhlY0lkISk7XG4gIH0pO1xufVxuXG5mdW5jdGlvbiBoeWRyYXRlQ3R4SW1wbChjdHg6IENsb3N1cmVWYWx1ZVR5cGUsIGZpcnN0U2NyZWVuQ3R4OiBDbG9zdXJlVmFsdWVUeXBlLCBleGVjSWQ6IG51bWJlcik6IHZvaWQge1xuICBpZiAoIWN0eCB8fCB0eXBlb2YgY3R4ICE9PSAnb2JqZWN0JyB8fCAhZmlyc3RTY3JlZW5DdHggfHwgdHlwZW9mIGZpcnN0U2NyZWVuQ3R4ICE9PSAnb2JqZWN0JykgcmV0dXJuO1xuXG4gIGNvbnN0IGN0eE9iaiA9IGN0eCBhcyBSZWNvcmQ8c3RyaW5nLCBDbG9zdXJlVmFsdWVUeXBlPjtcbiAgY29uc3QgZmlyc3RTY3JlZW5DdHhPYmogPSBmaXJzdFNjcmVlbkN0eCBhcyBSZWNvcmQ8c3RyaW5nLCBDbG9zdXJlVmFsdWVUeXBlPjtcblxuICBpZiAoY3R4T2JqWydfd2tsdElkJ10gJiYgY3R4T2JqWydfd2tsdElkJ10gIT09IGZpcnN0U2NyZWVuQ3R4T2JqWydfd2tsdElkJ10pIHtcbiAgICByZXR1cm47XG4gIH1cblxuICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgQHR5cGVzY3JpcHQtZXNsaW50L25vLWZvci1pbi1hcnJheVxuICBmb3IgKGNvbnN0IGtleSBpbiBjdHgpIHtcbiAgICBpZiAoa2V5ID09PSAnX3d2aWQnKSB7XG4gICAgICBoeWRyYXRlTWFpblRocmVhZFJlZihjdHhPYmpba2V5XSBhcyBXb3JrbGV0UmVmSWQsIGZpcnN0U2NyZWVuQ3R4T2JqIGFzIHVua25vd24gYXMgV29ya2xldFJlZkltcGw8dW5rbm93bj4pO1xuICAgIH0gZWxzZSBpZiAoa2V5ID09PSAnX2pzRm4nKSB7XG4gICAgICBoeWRyYXRlRGVsYXlSdW5PbkJhY2tncm91bmRUYXNrcyhcbiAgICAgICAgY3R4T2JqW2tleV0gYXMgUmVjb3JkPHN0cmluZywgSnNGbkhhbmRsZT4sXG4gICAgICAgIGZpcnN0U2NyZWVuQ3R4T2JqW2tleV0gYXMgUmVjb3JkPHN0cmluZywgSnNGbkhhbmRsZT4sXG4gICAgICAgIGV4ZWNJZCxcbiAgICAgICk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IGZpcnN0U2NyZWVuVmFsdWUgPSB0eXBlb2YgZmlyc3RTY3JlZW5DdHhPYmpba2V5XSA9PT0gJ2Z1bmN0aW9uJ1xuICAgICAgICA/IChmaXJzdFNjcmVlbkN0eE9ialtrZXldIGFzIHsgY3R4OiBDbG9zdXJlVmFsdWVUeXBlIH0pLmN0eFxuICAgICAgICA6IGZpcnN0U2NyZWVuQ3R4T2JqW2tleV07XG4gICAgICBoeWRyYXRlQ3R4SW1wbChjdHhPYmpba2V5XSwgZmlyc3RTY3JlZW5WYWx1ZSwgZXhlY0lkKTtcbiAgICB9XG4gIH1cbn1cblxuLyoqXG4gKiBIeWRyYXRlcyBhIFdvcmtsZXRSZWYgb24gdGhlIG1haW4gdGhyZWFkLlxuICogVGhpcyBpcyB1c2VkIHRvIHVwZGF0ZSB0aGUgV29ya2xldFJlZidzIGJhY2tncm91bmQgaW5pdGlhbCB2YWx1ZSBiYXNlZCBvbiBjaGFuZ2VzXG4gKiB0aGF0IG9jY3VycmVkIGluIHRoZSBmaXJzdC1zY3JlZW4gV29ya2xldCBjb250ZXh0IGJlZm9yZSBoeWRyYXRpb24uXG4gKlxuICogQHBhcmFtIHJlZklkIFRoZSBJRCBvZiB0aGUgV29ya2xldFJlZiB0byBoeWRyYXRlLlxuICogQHBhcmFtIHZhbHVlIFRoZSBuZXcgdmFsdWUgZm9yIHRoZSBXb3JrbGV0UmVmLlxuICovXG5mdW5jdGlvbiBoeWRyYXRlTWFpblRocmVhZFJlZihyZWZJZDogV29ya2xldFJlZklkLCB2YWx1ZTogV29ya2xldFJlZkltcGw8dW5rbm93bj4gfCB7IGN1cnJlbnQ6IHVua25vd24gfSkge1xuICBpZiAoJ19pbml0VmFsdWUnIGluIHZhbHVlKSB7XG4gICAgLy8gVGhlIHJlZiBoYXMgbm90IGJlZW4gYWNjZXNzZWQgeWV0LlxuICAgIHJldHVybjtcbiAgfVxuICBjb25zdCByZWYgPSBseW54V29ya2xldEltcGwhLl9yZWZJbXBsLl93b3JrbGV0UmVmTWFwW3JlZklkXSE7XG4gIGlmIChyZWYuY3VycmVudCBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcbiAgICAvLyBNb2RpZmllZCBieSBgbWFpbi10aHJlYWQ6cmVmYFxuICAgIHJldHVybjtcbiAgfVxuICByZWYuY3VycmVudCA9IHZhbHVlLmN1cnJlbnQ7XG59XG5cbi8qKlxuICogSHlkcmF0ZXMgZGVsYXllZCBgcnVuT25CYWNrZ3JvdW5kYCB0YXNrcy5cbiAqIFRoaXMgZnVuY3Rpb24gZW5zdXJlcyB0aGF0IGFueSBgcnVuT25CYWNrZ3JvdW5kYCBjYWxscyB0aGF0IHdlcmUgZGVsYXllZFxuICogZHVyaW5nIHRoZSBmaXJzdC1zY3JlZW4gcmVuZGVyaW5nIGFyZSBjb3JyZWN0bHkgYXNzb2NpYXRlZCB3aXRoIHRoZWlyXG4gKiByZXNwZWN0aXZlIEphdmFTY3JpcHQgZnVuY3Rpb24gaGFuZGxlcyBpbiB0aGUgaHlkcmF0ZWQgV29ya2xldCBjb250ZXh0LlxuICovXG5mdW5jdGlvbiBoeWRyYXRlRGVsYXlSdW5PbkJhY2tncm91bmRUYXNrcyhcbiAgZm5PYmpzOiBSZWNvcmQ8c3RyaW5nLCBKc0ZuSGFuZGxlPiwgLy8gZXhhbXBsZToge1wiX2pzRm4xXCI6e1wiX2pzRm5JZFwiOjF9fVxuICBmaXJzdFNjcmVlbkZuT2JqczogUmVjb3JkPHN0cmluZywgSnNGbkhhbmRsZT4sIC8vIGV4YW1wbGU6IHtcIl9qc0ZuMVwiOntcIl9pc0ZpcnN0U2NyZWVuXCI6dHJ1ZSxcIl9kZWxheUluZGljZXNcIjpbMF19fVxuICBleGVjSWQ6IG51bWJlcixcbikge1xuICBmb3IgKGNvbnN0IGZuTmFtZSBpbiBmbk9ianMpIHtcbiAgICBjb25zdCBmbk9iaiA9IGZuT2Jqc1tmbk5hbWVdITtcbiAgICBjb25zdCBmaXJzdFNjcmVlbkZuT2JqOiBKc0ZuSGFuZGxlIHwgdW5kZWZpbmVkID0gZmlyc3RTY3JlZW5Gbk9ianNbZm5OYW1lXTtcbiAgICBpZiAoIWZpcnN0U2NyZWVuRm5PYmo/Ll9kZWxheUluZGljZXMpIHtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGZpcnN0U2NyZWVuRm5PYmouX2RlbGF5SW5kaWNlcykge1xuICAgICAgY29uc3QgZGV0YWlscyA9IGx5bnhXb3JrbGV0SW1wbCEuX3J1bk9uQmFja2dyb3VuZERlbGF5SW1wbC5kZWxheWVkQmFja2dyb3VuZEZ1bmN0aW9uQXJyYXlbaW5kZXhdITtcbiAgICAgIGZuT2JqLl9leGVjSWQgPSBleGVjSWQ7XG4gICAgICBkZXRhaWxzLmpzRm5IYW5kbGUgPSBmbk9iajtcbiAgICB9XG4gIH1cbn1cbiIsICIvLyBDb3B5cmlnaHQgMjAyNCBUaGUgTHlueCBBdXRob3JzLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuLy8gTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlIFZlcnNpb24gMi4wIHRoYXQgY2FuIGJlIGZvdW5kIGluIHRoZVxuLy8gTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLlxuaW1wb3J0IHsgV29ya2xldEV2ZW50cyB9IGZyb20gJy4vYmluZGluZ3MvZXZlbnRzLmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuaW1wb3J0IHsgaXNTZGtWZXJzaW9uR3QgfSBmcm9tICcuL3V0aWxzL3ZlcnNpb24uanMnO1xuXG4vKipcbiAqIGBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlcmAgbW9uaXRvcnMgcmVmZXJlbmNlcyB0byBKUyBmdW5jdGlvbiBoYW5kbGVzIHRvIGJlIGNhbGxlZCBieSBgcnVuT25CYWNrZ3JvdW5kKClgLlxuICogSW4gSlMgY29udGV4dCwgZnVuY3Rpb25zIHRvIGJlIGNhbGxlZCBieSBgcnVuT25CYWNrZ3JvdW5kKClgIGlzIHJlZmVyZW5jZWQgYnkgYEpzRm5IYW5kbGVgcyBhbmQgZmluYWxseSBieSBgZXhlY0lkYC5cbiAqIFdoZW4gYWxsIGBKc0ZuSGFuZGxlYHMgaW4gbGVwdXMgYXJlIHJlbGVhc2VkLCBhbiBldmVudCB3aWxsIGJlIHNlbnQgdG8gSlMgY29udGV4dCB0byBkZS1yZWYgdGhlIGBleGVjSWRgLFxuICogcmVzdWx0aW5nIGEgZGUtcmVmIHRvIHRoZSBqcyBmdW5jdGlvbiBpbiBKUyBjb250ZXh0LlxuICovXG5jbGFzcyBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlciB7XG4gIHByaXZhdGUgZXhlY0lkUmVmQ291bnQgPSBuZXcgTWFwPG51bWJlciwgbnVtYmVyPigpO1xuICBwcml2YXRlIGV4ZWNJZFNldFRvRmlyZSA9IG5ldyBTZXQ8bnVtYmVyPigpO1xuICBwcml2YXRlIHdpbGxGaXJlID0gZmFsc2U7XG4gIHByaXZhdGUgcmVnaXN0cnk/OiBGaW5hbGl6YXRpb25SZWdpc3RyeTxudW1iZXI+ID0gdW5kZWZpbmVkO1xuXG4gIGNvbnN0cnVjdG9yKCkge1xuICAgIHRoaXMucmVnaXN0cnkgPSBuZXcgRmluYWxpemF0aW9uUmVnaXN0cnk8bnVtYmVyPih0aGlzLnJlbW92ZVJlZi5iaW5kKHRoaXMpKTtcbiAgfVxuXG4gIGFkZFJlZihleGVjSWQ6IG51bWJlciwgb2JqVG9SZWY6IG9iamVjdCk6IHZvaWQge1xuICAgIHRoaXMuZXhlY0lkUmVmQ291bnQuc2V0KFxuICAgICAgZXhlY0lkLFxuICAgICAgKHRoaXMuZXhlY0lkUmVmQ291bnQuZ2V0KGV4ZWNJZCkgPz8gMCkgKyAxLFxuICAgICk7XG4gICAgdGhpcy5yZWdpc3RyeSEucmVnaXN0ZXIob2JqVG9SZWYsIGV4ZWNJZCk7XG4gIH1cblxuICByZW1vdmVSZWYoZXhlY0lkOiBudW1iZXIpOiB2b2lkIHtcbiAgICBjb25zdCByYyA9IHRoaXMuZXhlY0lkUmVmQ291bnQuZ2V0KGV4ZWNJZCkhO1xuICAgIGlmIChyYyA+IDEpIHtcbiAgICAgIHRoaXMuZXhlY0lkUmVmQ291bnQuc2V0KGV4ZWNJZCwgcmMgLSAxKTtcbiAgICAgIHJldHVybjtcbiAgICB9XG4gICAgdGhpcy5leGVjSWRSZWZDb3VudC5kZWxldGUoZXhlY0lkKTtcbiAgICB0aGlzLmV4ZWNJZFNldFRvRmlyZS5hZGQoZXhlY0lkKTtcbiAgICBpZiAoIXRoaXMud2lsbEZpcmUpIHtcbiAgICAgIHRoaXMud2lsbEZpcmUgPSB0cnVlO1xuICAgICAgdm9pZCBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHtcbiAgICAgICAgdGhpcy5maXJlKCk7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cblxuICBmaXJlKCk6IHZvaWQge1xuICAgIHByb2ZpbGUoJ0pzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyLmZpcmUnLCAoKSA9PiB7XG4gICAgICBseW54LmdldEpTQ29udGV4dCgpLmRpc3BhdGNoRXZlbnQoe1xuICAgICAgICB0eXBlOiBXb3JrbGV0RXZlbnRzLnJlbGVhc2VCYWNrZ3JvdW5kV29ya2xldEN0eCxcbiAgICAgICAgZGF0YTogQXJyYXkuZnJvbSh0aGlzLmV4ZWNJZFNldFRvRmlyZSksXG4gICAgICB9KTtcbiAgICAgIHRoaXMuZXhlY0lkU2V0VG9GaXJlLmNsZWFyKCk7XG4gICAgICB0aGlzLndpbGxGaXJlID0gZmFsc2U7XG4gICAgfSk7XG4gIH1cbn1cblxuZnVuY3Rpb24gaXNSdW5PbkJhY2tncm91bmRFbmFibGVkKCk6IGJvb2xlYW4ge1xuICByZXR1cm4gaXNTZGtWZXJzaW9uR3QoMiwgMTUpO1xufVxuXG5leHBvcnQgeyBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlciwgaXNSdW5PbkJhY2tncm91bmRFbmFibGVkIH07XG4iLCAiLy8gQ29weXJpZ2h0IDIwMjQgVGhlIEx5bnggQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC5cbi8vIExpY2Vuc2VkIHVuZGVyIHRoZSBBcGFjaGUgTGljZW5zZSBWZXJzaW9uIDIuMCB0aGF0IGNhbiBiZSBmb3VuZCBpbiB0aGVcbi8vIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS5cbmltcG9ydCB7IEVsZW1lbnQgfSBmcm9tICcuL2FwaS9lbGVtZW50LmpzJztcbmltcG9ydCB0eXBlIHsgQ2xvc3VyZVZhbHVlVHlwZSwgV29ya2xldCwgV29ya2xldFJlZkltcGwgfSBmcm9tICcuL2JpbmRpbmdzL3R5cGVzLmpzJztcbmltcG9ydCB7IGluaXRSdW5PbkJhY2tncm91bmREZWxheSB9IGZyb20gJy4vZGVsYXlSdW5PbkJhY2tncm91bmQuanMnO1xuaW1wb3J0IHsgZGVsYXlFeGVjVW50aWxKc1JlYWR5LCBpbml0RXZlbnREZWxheSB9IGZyb20gJy4vZGVsYXlXb3JrbGV0RXZlbnQuanMnO1xuaW1wb3J0IHsgaHlkcmF0ZUN0eCB9IGZyb20gJy4vaHlkcmF0ZS5qcyc7XG5pbXBvcnQgeyBKc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlciwgaXNSdW5PbkJhY2tncm91bmRFbmFibGVkIH0gZnJvbSAnLi9qc0Z1bmN0aW9uTGlmZWN5Y2xlLmpzJztcbmltcG9ydCB7IHByb2ZpbGUgfSBmcm9tICcuL3V0aWxzL3Byb2ZpbGUuanMnO1xuaW1wb3J0IHsgZ2V0RnJvbVdvcmtsZXRSZWZNYXAsIGluaXRXb3JrbGV0UmVmIH0gZnJvbSAnLi93b3JrbGV0UmVmLmpzJztcblxuZnVuY3Rpb24gaW5pdFdvcmtsZXQoKTogdm9pZCB7XG4gIGdsb2JhbFRoaXMubHlueFdvcmtsZXRJbXBsID0ge1xuICAgIF93b3JrbGV0TWFwOiB7fSxcbiAgICBfcmVmSW1wbDogaW5pdFdvcmtsZXRSZWYoKSxcbiAgICBfcnVuT25CYWNrZ3JvdW5kRGVsYXlJbXBsOiBpbml0UnVuT25CYWNrZ3JvdW5kRGVsYXkoKSxcbiAgICBfaHlkcmF0ZUN0eDogaHlkcmF0ZUN0eCxcbiAgICBfZXZlbnREZWxheUltcGw6IGluaXRFdmVudERlbGF5KCksXG4gIH07XG5cbiAgaWYgKGlzUnVuT25CYWNrZ3JvdW5kRW5hYmxlZCgpKSB7XG4gICAgZ2xvYmFsVGhpcy5seW54V29ya2xldEltcGwuX2pzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyID0gbmV3IEpzRnVuY3Rpb25MaWZlY3ljbGVNYW5hZ2VyKCk7XG4gIH1cblxuICBnbG9iYWxUaGlzLnJlZ2lzdGVyV29ya2xldCA9IHJlZ2lzdGVyV29ya2xldDtcbiAgZ2xvYmFsVGhpcy5yZWdpc3RlcldvcmtsZXRJbnRlcm5hbCA9IHJlZ2lzdGVyV29ya2xldDtcbiAgZ2xvYmFsVGhpcy5ydW5Xb3JrbGV0ID0gcnVuV29ya2xldDtcbn1cblxuLyoqXG4gKiBSZWdpc3RlciBhIHdvcmtsZXQgZnVuY3Rpb24sIGFsbG93aW5nIGl0IHRvIGJlIGV4ZWN1dGVkIGJ5IGBydW5Xb3JrbGV0KClgLlxuICogVGhpcyBpcyBjYWxsZWQgaW4gbGVwdXMuanMuXG4gKiBAcGFyYW0gX3R5cGUgd29ya2xldCB0eXBlLCAnbWFpbi10aHJlYWQnIG9yICd1aSdcbiAqIEBwYXJhbSBpZCB3b3JrbGV0IGhhc2hcbiAqIEBwYXJhbSB3b3JrbGV0IHdvcmtsZXQgZnVuY3Rpb25cbiAqL1xuZnVuY3Rpb24gcmVnaXN0ZXJXb3JrbGV0KF90eXBlOiBzdHJpbmcsIGlkOiBzdHJpbmcsIHdvcmtsZXQ6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24pOiB2b2lkIHtcbiAgbHlueFdvcmtsZXRJbXBsLl93b3JrbGV0TWFwW2lkXSA9IHdvcmtsZXQ7XG59XG5cbi8qKlxuICogRW50cmFuY2Ugb2YgYWxsIHdvcmtsZXQgY2FsbHMuXG4gKiBOYXRpdmUgZXZlbnQgdG91Y2ggaGFuZGxlciB3aWxsIGNhbGwgdGhpcyBmdW5jdGlvbi5cbiAqIEBwYXJhbSBjdHggd29ya2xldCBvYmplY3QuXG4gKiBAcGFyYW0gcGFyYW1zIHdvcmtsZXQgcGFyYW1zLlxuICovXG5mdW5jdGlvbiBydW5Xb3JrbGV0KGN0eDogV29ya2xldCwgcGFyYW1zOiBDbG9zdXJlVmFsdWVUeXBlW10pOiB1bmtub3duIHtcbiAgaWYgKCF2YWxpZGF0ZVdvcmtsZXQoY3R4KSkge1xuICAgIGNvbnNvbGUud2FybignV29ya2xldDogSW52YWxpZCB3b3JrbGV0IG9iamVjdDogJyArIEpTT04uc3RyaW5naWZ5KGN0eCkpO1xuICAgIHJldHVybjtcbiAgfVxuICBpZiAoJ19sZXB1c1dvcmtsZXRIYXNoJyBpbiBjdHgpIHtcbiAgICBkZWxheUV4ZWNVbnRpbEpzUmVhZHkoY3R4Ll9sZXB1c1dvcmtsZXRIYXNoLCBwYXJhbXMpO1xuICAgIHJldHVybjtcbiAgfVxuICByZXR1cm4gcnVuV29ya2xldEltcGwoY3R4LCBwYXJhbXMpO1xufVxuXG5mdW5jdGlvbiBydW5Xb3JrbGV0SW1wbChjdHg6IFdvcmtsZXQsIHBhcmFtczogQ2xvc3VyZVZhbHVlVHlwZVtdKTogdW5rbm93biB7XG4gIGNvbnN0IHdvcmtsZXQ6ICguLi5hcmdzOiB1bmtub3duW10pID0+IHVua25vd24gPSBwcm9maWxlKFxuICAgICd0cmFuc2Zvcm1Xb3JrbGV0Q3R4ICcgKyBjdHguX3drbHRJZCxcbiAgICAoKSA9PiB0cmFuc2Zvcm1Xb3JrbGV0KGN0eCwgdHJ1ZSksXG4gICk7XG4gIGNvbnN0IHBhcmFtc186IENsb3N1cmVWYWx1ZVR5cGVbXSA9IHByb2ZpbGUoXG4gICAgJ3RyYW5zZm9ybVdvcmtsZXRQYXJhbXMnLFxuICAgICgpID0+IHRyYW5zZm9ybVdvcmtsZXQocGFyYW1zIHx8IFtdLCBmYWxzZSksXG4gICk7XG4gIHJldHVybiBwcm9maWxlKCdydW5Xb3JrbGV0JywgKCkgPT4gd29ya2xldCguLi5wYXJhbXNfKSk7XG59XG5cbmZ1bmN0aW9uIHZhbGlkYXRlV29ya2xldChjdHg6IHVua25vd24pOiBjdHggaXMgV29ya2xldCB7XG4gIHJldHVybiB0eXBlb2YgY3R4ID09PSAnb2JqZWN0JyAmJiBjdHggIT09IG51bGwgJiYgKCdfd2tsdElkJyBpbiBjdHggfHwgJ19sZXB1c1dvcmtsZXRIYXNoJyBpbiBjdHgpO1xufVxuXG5jb25zdCB3b3JrbGV0Q2FjaGUgPSBuZXcgV2Vha01hcDxvYmplY3QsIENsb3N1cmVWYWx1ZVR5cGUgfCAoKC4uLmFyZ3M6IHVua25vd25bXSkgPT4gdW5rbm93bik+KCk7XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVdvcmtsZXQoY3R4OiBXb3JrbGV0LCBpc1dvcmtsZXQ6IHRydWUpOiAoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duO1xuZnVuY3Rpb24gdHJhbnNmb3JtV29ya2xldChcbiAgY3R4OiBDbG9zdXJlVmFsdWVUeXBlW10sXG4gIGlzV29ya2xldDogZmFsc2UsXG4pOiBDbG9zdXJlVmFsdWVUeXBlW107XG5cbmZ1bmN0aW9uIHRyYW5zZm9ybVdvcmtsZXQoXG4gIGN0eDogQ2xvc3VyZVZhbHVlVHlwZSxcbiAgaXNXb3JrbGV0OiBib29sZWFuLFxuKTogQ2xvc3VyZVZhbHVlVHlwZSB8ICgoLi4uYXJnczogdW5rbm93bltdKSA9PiB1bmtub3duKSB7XG4gIC8qIHY4IGlnbm9yZSBuZXh0IDMgKi9cbiAgaWYgKHR5cGVvZiBjdHggIT09ICdvYmplY3QnIHx8IGN0eCA9PT0gbnVsbCkge1xuICAgIHJldHVybiBjdHg7XG4gIH1cblxuICBpZiAoaXNXb3JrbGV0KSB7XG4gICAgY29uc3QgcmVzID0gd29ya2xldENhY2hlLmdldChjdHgpO1xuICAgIGlmIChyZXMpIHtcbiAgICAgIHJldHVybiByZXM7XG4gICAgfVxuICB9XG5cbiAgY29uc3Qgd29ya2xldCA9IHsgbWFpbjogY3R4IH07XG4gIHRyYW5zZm9ybVdvcmtsZXRJbm5lcih3b3JrbGV0LCAwLCBjdHgpO1xuXG4gIGlmIChpc1dvcmtsZXQpIHtcbiAgICB3b3JrbGV0Q2FjaGUuc2V0KGN0eCwgd29ya2xldC5tYWluKTtcbiAgfVxuICByZXR1cm4gd29ya2xldC5tYWluO1xufVxuXG5jb25zdCB0cmFuc2Zvcm1Xb3JrbGV0SW5uZXIgPSAoXG4gIHZhbHVlOiBDbG9zdXJlVmFsdWVUeXBlLFxuICBkZXB0aDogbnVtYmVyLFxuICBjdHg6IHVua25vd24sXG4pID0+IHtcbiAgY29uc3QgbGltaXQgPSAxMDAwO1xuICBpZiAoKytkZXB0aCA+PSBsaW1pdCkge1xuICAgIHRocm93IG5ldyBFcnJvcignRGVwdGggb2YgdmFsdWUgZXhjZWVkcyBsaW1pdCBvZiAnICsgbGltaXQgKyAnLicpO1xuICB9XG4gIC8qIHY4IGlnbm9yZSBuZXh0IDMgKi9cbiAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ29iamVjdCcgfHwgdmFsdWUgPT09IG51bGwpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgY29uc3Qgb2JqID0gdmFsdWUgYXMgUmVjb3JkPHN0cmluZywgQ2xvc3VyZVZhbHVlVHlwZT47XG5cbiAgZm9yIChjb25zdCBrZXkgaW4gb2JqKSB7XG4gICAgY29uc3Qgc3ViT2JqOiBDbG9zdXJlVmFsdWVUeXBlID0gb2JqW2tleV07XG4gICAgaWYgKHR5cGVvZiBzdWJPYmogIT09ICdvYmplY3QnIHx8IHN1Yk9iaiA9PT0gbnVsbCkge1xuICAgICAgY29udGludWU7XG4gICAgfVxuXG4gICAgY29uc3QgaXNFdmVudFRhcmdldCA9ICdlbGVtZW50UmVmcHRyJyBpbiBzdWJPYmo7XG4gICAgaWYgKCFpc0V2ZW50VGFyZ2V0KSB7XG4gICAgICB0cmFuc2Zvcm1Xb3JrbGV0SW5uZXIoc3ViT2JqLCBkZXB0aCwgY3R4KTtcbiAgICB9XG5cbiAgICBpZiAoaXNFdmVudFRhcmdldCkge1xuICAgICAgb2JqW2tleV0gPSBuZXcgRWxlbWVudChzdWJPYmpbJ2VsZW1lbnRSZWZwdHInXSBhcyBFbGVtZW50Tm9kZSk7XG4gICAgICBjb250aW51ZTtcbiAgICB9XG4gICAgY29uc3QgaXNXb3JrbGV0UmVmID0gJ193dmlkJyBpbiAoc3ViT2JqIGFzIG9iamVjdCk7XG4gICAgaWYgKGlzV29ya2xldFJlZikge1xuICAgICAgb2JqW2tleV0gPSBnZXRGcm9tV29ya2xldFJlZk1hcChcbiAgICAgICAgc3ViT2JqIGFzIHVua25vd24gYXMgV29ya2xldFJlZkltcGw8dW5rbm93bj4sXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICAgIGNvbnN0IGlzV29ya2xldCA9ICdfd2tsdElkJyBpbiBzdWJPYmo7XG4gICAgaWYgKGlzV29ya2xldCkge1xuICAgICAgLy8gYHN1Yk9iamAgaXMgd29ya2xldCBjdHguIFNoYWxsb3cgY29weSBpdCB0byBwcmV2ZW50IHRoZSB0cmFuc2Zvcm1lZCB3b3JrbGV0IGZyb20gcmVmZXJlbmNpbmcgY3R4LlxuICAgICAgLy8gVGhpcyB3b3VsZCByZXN1bHQgaW4gdGhlIHZhbHVlIG9mIGB3b3JrbGV0Q2FjaGVgIHJlZmVyZW5jaW5nIGl0cyBrZXkuXG4gICAgICBvYmpba2V5XSA9IGx5bnhXb3JrbGV0SW1wbC5fd29ya2xldE1hcFsoc3ViT2JqIGFzIFdvcmtsZXQpLl93a2x0SWRdIVxuICAgICAgICAuYmluZCh7IC4uLnN1Yk9iaiB9KTtcbiAgICAgIG9ialtrZXldLmN0eCA9IHN1Yk9iajtcbiAgICAgIGNvbnRpbnVlO1xuICAgIH1cbiAgICBjb25zdCBpc0pzRm4gPSAnX2pzRm5JZCcgaW4gc3ViT2JqO1xuICAgIGlmIChpc0pzRm4pIHtcbiAgICAgIHN1Yk9ialsnX2V4ZWNJZCddID0gKGN0eCBhcyBXb3JrbGV0KS5fZXhlY0lkO1xuICAgICAgbHlueFdvcmtsZXRJbXBsLl9qc0Z1bmN0aW9uTGlmZWN5Y2xlTWFuYWdlcj8uYWRkUmVmKFxuICAgICAgICAoY3R4IGFzIFdvcmtsZXQpLl9leGVjSWQhLFxuICAgICAgICBzdWJPYmosXG4gICAgICApO1xuICAgICAgY29udGludWU7XG4gICAgfVxuICB9XG59O1xuXG5leHBvcnQgeyBpbml0V29ya2xldCB9O1xuIiwgIi8vIENvcHlyaWdodCAyMDI0IFRoZSBMeW54IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG4vLyBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UgVmVyc2lvbiAyLjAgdGhhdCBjYW4gYmUgZm91bmQgaW4gdGhlXG4vLyBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuXG5pbXBvcnQgeyBpbml0QXBpRW52IH0gZnJvbSAnLi9hcGkvbHlueEFwaS5qcyc7XG5pbXBvcnQgeyBpbml0RXZlbnRMaXN0ZW5lcnMgfSBmcm9tICcuL2xpc3RlbmVycy5qcyc7XG5pbXBvcnQgeyBpbml0V29ya2xldCB9IGZyb20gJy4vd29ya2xldFJ1bnRpbWUuanMnO1xuXG5pZiAoZ2xvYmFsVGhpcy5seW54V29ya2xldEltcGwgPT09IHVuZGVmaW5lZCkge1xuICBpbml0V29ya2xldCgpO1xuICBpbml0QXBpRW52KCk7XG4gIGluaXRFdmVudExpc3RlbmVycygpO1xufVxuIl0sCiAgIm1hcHBpbmdzIjogIjs7Ozs7OztBQUdPLE1BQU0sV0FBTixNQUFNLFNBQVE7QUFBQSxJQU1uQixZQUFZLFNBQXNCO0FBRmxDO0FBQUEsMEJBQWlCO0FBTWYsYUFBTyxlQUFlLE1BQU0sV0FBVztBQUFBLFFBQ3JDLE1BQU07QUFDSixpQkFBTztBQUFBLFFBQ1Q7QUFBQSxNQUNGLENBQUM7QUFBQSxJQUNIO0FBQUEsSUFFTyxhQUFhLE1BQWMsT0FBc0I7QUFDdEQscUJBQWUsS0FBSyxTQUFTLE1BQU0sS0FBSztBQUN4QyxXQUFLLGlCQUFpQjtBQUFBLElBQ3hCO0FBQUEsSUFFTyxpQkFBaUIsTUFBYyxPQUFxQjtBQUN6RCx1QkFBaUIsS0FBSyxTQUFTLE1BQU0sS0FBSztBQUMxQyxXQUFLLGlCQUFpQjtBQUFBLElBQ3hCO0FBQUEsSUFFTyxtQkFBbUIsUUFBc0M7QUFDOUQsaUJBQVcsT0FBTyxRQUFRO0FBQ3hCLHlCQUFpQixLQUFLLFNBQVMsS0FBSyxPQUFPLEdBQUcsQ0FBRTtBQUFBLE1BQ2xEO0FBQ0EsV0FBSyxpQkFBaUI7QUFBQSxJQUN4QjtBQUFBLElBRU8sYUFBYSxlQUFnQztBQUNsRCxhQUFPLHFCQUFxQixLQUFLLFNBQVMsYUFBYTtBQUFBLElBQ3pEO0FBQUEsSUFFTyxvQkFBOEI7QUFDbkMsYUFBTyxvQkFBb0IsS0FBSyxPQUFPO0FBQUEsSUFDekM7QUFBQSxJQUVPLGNBQWMsVUFBa0M7QUFDckQsWUFBTSxNQUFNLGdCQUFnQixLQUFLLFNBQVMsVUFBVSxDQUFDLENBQUM7QUFDdEQsYUFBTyxNQUFNLElBQUksU0FBUSxHQUFHLElBQUk7QUFBQSxJQUNsQztBQUFBLElBRU8saUJBQWlCLFVBQTZCO0FBQ25ELGFBQU8sbUJBQW1CLEtBQUssU0FBUyxVQUFVLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FB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
@@ -518,4 +518,3 @@
518
518
  initEventListeners();
519
519
  }
520
520
  })();
521
- //# sourceMappingURL=main.js.map
@@ -11,4 +11,4 @@ declare function runWorkletCtx(worklet: Worklet, params: ClosureValueType[]): un
11
11
  * @param patch - An array containing the index and new value of the worklet value.
12
12
  */
13
13
  declare function updateWorkletRefInitValueChanges(patch?: [number, unknown][]): void;
14
- export { onWorkletCtxUpdate, runWorkletCtx, updateWorkletRef, updateWorkletRefInitValueChanges, onHydrationFinished, registerWorklet, delayRunOnBackground, };
14
+ export { runWorkletCtx, updateWorkletRef, updateWorkletRefInitValueChanges, registerWorklet, delayRunOnBackground };
@@ -1,22 +1,6 @@
1
1
  // Copyright 2024 The Lynx Authors. All rights reserved.
2
2
  // Licensed under the Apache License Version 2.0 that can be found in the
3
3
  // LICENSE file in the root directory of this source tree.
4
- /**
5
- * This function must be called when a worklet context is updated.
6
- *
7
- * @param worklet - The worklet to be updated
8
- * @param oldWorklet - The old worklet context
9
- * @param isFirstScreen - Whether it is before the hydration is finished
10
- * @param element - The element
11
- * @internal
12
- */
13
- function onWorkletCtxUpdate(worklet, oldWorklet, isFirstScreen, element) {
14
- globalThis.lynxWorkletImpl?._jsFunctionLifecycleManager?.addRef(worklet._execId, worklet);
15
- if (isFirstScreen && oldWorklet) {
16
- globalThis.lynxWorkletImpl?._hydrateCtx(worklet, oldWorklet);
17
- }
18
- globalThis.lynxWorkletImpl?._eventDelayImpl.runDelayedWorklet(worklet, element);
19
- }
20
4
  /**
21
5
  * Executes the worklet ctx.
22
6
  * @param worklet - The Worklet ctx to run.
@@ -45,15 +29,6 @@ function updateWorkletRefInitValueChanges(patch) {
45
29
  globalThis.lynxWorkletImpl?._refImpl.updateWorkletRefInitValueChanges(patch);
46
30
  }
47
31
  }
48
- /**
49
- * This must be called when the hydration is finished.
50
- *
51
- * @internal
52
- */
53
- function onHydrationFinished() {
54
- globalThis.lynxWorkletImpl?._runOnBackgroundDelayImpl.runDelayedBackgroundFunctions();
55
- globalThis.lynxWorkletImpl?._refImpl.clearFirstScreenWorkletRefMap();
56
- }
57
32
  /**
58
33
  * Register a worklet.
59
34
  *
@@ -70,5 +45,5 @@ function registerWorklet(type, id, worklet) {
70
45
  function delayRunOnBackground(fnObj, fn) {
71
46
  globalThis.lynxWorkletImpl?._runOnBackgroundDelayImpl.delayRunOnBackground(fnObj, fn);
72
47
  }
73
- export { onWorkletCtxUpdate, runWorkletCtx, updateWorkletRef, updateWorkletRefInitValueChanges, onHydrationFinished, registerWorklet, delayRunOnBackground, };
48
+ export { runWorkletCtx, updateWorkletRef, updateWorkletRefInitValueChanges, registerWorklet, delayRunOnBackground };
74
49
  //# sourceMappingURL=bindings.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../src/bindings/bindings.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAK1D;;;;;;;;GAQG;AACH,SAAS,kBAAkB,CACzB,OAAgB,EAChB,UAAsC,EACtC,aAAsB,EACtB,OAAoB;IAEpB,UAAU,CAAC,eAAe,EAAE,2BAA2B,EAAE,MAAM,CAAC,OAAO,CAAC,OAAQ,EAAE,OAAO,CAAC,CAAC;IAC3F,IAAI,aAAa,IAAI,UAAU,EAAE,CAAC;QAChC,UAAU,CAAC,eAAe,EAAE,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC/D,CAAC;IACD,UAAU,CAAC,eAAe,EAAE,eAAe,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAClF,CAAC;AAED;;;;GAIG;AACH,SAAS,aAAa,CAAC,OAAgB,EAAE,MAA0B;IACjE,OAAO,UAAU,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,UAAmC,EAAE,OAA2B;IACxF,UAAU,CAAC,eAAe,EAAE,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC7E,CAAC;AAED;;;;GAIG;AACH,SAAS,gCAAgC,CAAC,KAA2B;IACnE,IAAI,KAAK,EAAE,CAAC;QACV,UAAU,CAAC,eAAe,EAAE,QAAQ,CAAC,gCAAgC,CAAC,KAAK,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB;IAC1B,UAAU,CAAC,eAAe,EAAE,yBAAyB,CAAC,6BAA6B,EAAE,CAAC;IACtF,UAAU,CAAC,eAAe,EAAE,QAAQ,CAAC,6BAA6B,EAAE,CAAC;AACvE,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,IAAY,EAAE,EAAU,EAAE,OAAwC;IACzF,UAAU,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,KAAiB,EAAE,EAA0C;IACzF,UAAU,CAAC,eAAe,EAAE,yBAAyB,CAAC,oBAAoB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACxF,CAAC;AAED,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,gCAAgC,EAChC,mBAAmB,EACnB,eAAe,EACf,oBAAoB,GACrB,CAAC"}
1
+ {"version":3,"file":"bindings.js","sourceRoot":"","sources":["../../src/bindings/bindings.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAK1D;;;;GAIG;AACH,SAAS,aAAa,CAAC,OAAgB,EAAE,MAA0B;IACjE,OAAO,UAAU,CAAC,UAAU,EAAE,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAClD,CAAC;AAED;;;;;;GAMG;AACH,SAAS,gBAAgB,CAAC,UAAmC,EAAE,OAA2B;IACxF,UAAU,CAAC,eAAe,EAAE,QAAQ,CAAC,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC7E,CAAC;AAED;;;;GAIG;AACH,SAAS,gCAAgC,CAAC,KAA2B;IACnE,IAAI,KAAK,EAAE,CAAC;QACV,UAAU,CAAC,eAAe,EAAE,QAAQ,CAAC,gCAAgC,CAAC,KAAK,CAAC,CAAC;IAC/E,CAAC;AACH,CAAC;AAED;;;;GAIG;AACH,SAAS,eAAe,CAAC,IAAY,EAAE,EAAU,EAAE,OAAwC;IACzF,UAAU,CAAC,eAAe,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;AAED;;;;GAIG;AACH,SAAS,oBAAoB,CAAC,KAAiB,EAAE,EAA0C;IACzF,UAAU,CAAC,eAAe,EAAE,yBAAyB,CAAC,oBAAoB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACxF,CAAC;AAED,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,gCAAgC,EAAE,eAAe,EAAE,oBAAoB,EAAE,CAAC"}
@@ -1,4 +1,5 @@
1
1
  export { loadWorkletRuntime } from './loadRuntime.js';
2
- export { onWorkletCtxUpdate, runWorkletCtx, updateWorkletRef, updateWorkletRefInitValueChanges, onHydrationFinished, delayRunOnBackground, } from './bindings.js';
2
+ export * from './bindings.js';
3
+ export * from './observers.js';
3
4
  export type * from './types.js';
4
5
  export { WorkletEvents, type RunWorkletCtxData, type RunWorkletCtxRetData } from './events.js';
@@ -2,6 +2,7 @@
2
2
  // Licensed under the Apache License Version 2.0 that can be found in the
3
3
  // LICENSE file in the root directory of this source tree.
4
4
  export { loadWorkletRuntime } from './loadRuntime.js';
5
- export { onWorkletCtxUpdate, runWorkletCtx, updateWorkletRef, updateWorkletRefInitValueChanges, onHydrationFinished, delayRunOnBackground, } from './bindings.js';
5
+ export * from './bindings.js';
6
+ export * from './observers.js';
6
7
  export { WorkletEvents } from './events.js';
7
8
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bindings/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,OAAO,EACL,kBAAkB,EAClB,aAAa,EACb,gBAAgB,EAChB,gCAAgC,EAChC,mBAAmB,EACnB,oBAAoB,GACrB,MAAM,eAAe,CAAC;AAIvB,OAAO,EAAE,aAAa,EAAqD,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/bindings/index.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAC1D,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AAEtD,cAAc,eAAe,CAAC;AAE9B,cAAc,gBAAgB,CAAC;AAI/B,OAAO,EAAE,aAAa,EAAqD,MAAM,aAAa,CAAC"}
@@ -0,0 +1 @@
1
+ export { onWorkletCtxUpdate, onHydrationFinished };
@@ -0,0 +1,31 @@
1
+ // Copyright 2025 The Lynx Authors. All rights reserved.
2
+ // Licensed under the Apache License Version 2.0 that can be found in the
3
+ // LICENSE file in the root directory of this source tree.
4
+ /**
5
+ * This function must be called when a worklet context is updated.
6
+ *
7
+ * @param worklet - The worklet to be updated
8
+ * @param oldWorklet - The old worklet context
9
+ * @param isFirstScreen - Whether it is before the hydration is finished
10
+ * @param element - The element
11
+ * @internal
12
+ */
13
+ function onWorkletCtxUpdate(worklet, oldWorklet, isFirstScreen, element) {
14
+ globalThis.lynxWorkletImpl?._jsFunctionLifecycleManager?.addRef(worklet._execId, worklet);
15
+ if (isFirstScreen && oldWorklet) {
16
+ globalThis.lynxWorkletImpl?._hydrateCtx(worklet, oldWorklet);
17
+ }
18
+ // For old version dynamic component compatibility.
19
+ globalThis.lynxWorkletImpl?._eventDelayImpl.runDelayedWorklet(worklet, element);
20
+ }
21
+ /**
22
+ * This must be called when the hydration is finished.
23
+ *
24
+ * @internal
25
+ */
26
+ function onHydrationFinished() {
27
+ globalThis.lynxWorkletImpl?._runOnBackgroundDelayImpl.runDelayedBackgroundFunctions();
28
+ globalThis.lynxWorkletImpl?._refImpl.clearFirstScreenWorkletRefMap();
29
+ }
30
+ export { onWorkletCtxUpdate, onHydrationFinished };
31
+ //# sourceMappingURL=observers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"observers.js","sourceRoot":"","sources":["../../src/bindings/observers.ts"],"names":[],"mappings":"AAAA,wDAAwD;AACxD,yEAAyE;AACzE,0DAA0D;AAI1D;;;;;;;;GAQG;AACH,SAAS,kBAAkB,CACzB,OAAgB,EAChB,UAAsC,EACtC,aAAsB,EACtB,OAAoB;IAEpB,UAAU,CAAC,eAAe,EAAE,2BAA2B,EAAE,MAAM,CAAC,OAAO,CAAC,OAAQ,EAAE,OAAO,CAAC,CAAC;IAC3F,IAAI,aAAa,IAAI,UAAU,EAAE,CAAC;QAChC,UAAU,CAAC,eAAe,EAAE,WAAW,CAAC,OAAO,EAAE,UAAU,CAAC,CAAC;IAC/D,CAAC;IACD,mDAAmD;IACnD,UAAU,CAAC,eAAe,EAAE,eAAe,CAAC,iBAAiB,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;AAClF,CAAC;AAED;;;;GAIG;AACH,SAAS,mBAAmB;IAC1B,UAAU,CAAC,eAAe,EAAE,yBAAyB,CAAC,6BAA6B,EAAE,CAAC;IACtF,UAAU,CAAC,eAAe,EAAE,QAAQ,CAAC,6BAA6B,EAAE,CAAC;AACvE,CAAC;AAED,OAAO,EAAE,kBAAkB,EAAE,mBAAmB,EAAE,CAAC"}
@@ -1,8 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/api/element.ts", "../src/api/lepusQuerySelector.ts", "../src/utils/version.ts", "../src/api/lynxApi.ts", "../src/utils/profile.ts", "../src/workletRef.ts", "../src/listeners.ts", "../src/delayRunOnBackground.ts", "../src/delayWorkletEvent.ts", "../src/hydrate.ts", "../src/jsFunctionLifecycle.ts", "../src/workletRuntime.ts", "../src/index.ts"],
4
- "sourceRoot": "/home/runner/work/lynx-stack/lynx-stack/packages/react/worklet-runtime/src",
5
- "sourcesContent": ["// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nexport class Element {\n private static willFlush = false;\n\n // @ts-expect-error set in constructor\n private readonly element: ElementNode;\n\n constructor(element: ElementNode) {\n // In Lynx versions prior to and including 2.15,\n // a crash occurs when printing or transferring refCounted across threads.\n // Bypass this problem by hiding the element object.\n Object.defineProperty(this, 'element', {\n get() {\n return element;\n },\n });\n }\n\n public setAttribute(name: string, value: unknown): void {\n __SetAttribute(this.element, name, value);\n this.flushElementTree();\n }\n\n public setStyleProperty(name: string, value: string): void {\n __AddInlineStyle(this.element, name, value);\n this.flushElementTree();\n }\n\n public setStyleProperties(styles: Record<string, string>): void {\n for (const key in styles) {\n __AddInlineStyle(this.element, key, styles[key]!);\n }\n this.flushElementTree();\n }\n\n public getAttribute(attributeName: string): unknown {\n return __GetAttributeByName(this.element, attributeName);\n }\n\n public getAttributeNames(): string[] {\n return __GetAttributeNames(this.element);\n }\n\n public querySelector(selector: string): Element | null {\n const ref = __QuerySelector(this.element, selector, {});\n return ref ? new Element(ref) : null;\n }\n\n public querySelectorAll(selector: string): Element[] {\n return __QuerySelectorAll(this.element, selector, {}).map((element) => {\n return new Element(element);\n });\n }\n\n public invoke(\n methodName: string,\n params?: Record<string, unknown>,\n ): Promise<unknown> {\n return new Promise((resolve, reject) => {\n __InvokeUIMethod(\n this.element,\n methodName,\n params ?? {},\n (res: { code: number; data: unknown }) => {\n if (res.code === 0) {\n resolve(res.data);\n } else {\n reject(new Error('UI method invoke: ' + JSON.stringify(res)));\n }\n },\n );\n this.flushElementTree();\n });\n }\n\n private flushElementTree() {\n if (Element.willFlush) {\n return;\n }\n Element.willFlush = true;\n void Promise.resolve().then(() => {\n Element.willFlush = false;\n __FlushElementTree();\n });\n }\n}\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { Element } from './element.js';\n\nclass PageElement {\n private static pageElement: ElementNode | undefined;\n\n static get() {\n PageElement.pageElement ??= __GetPageElement();\n return PageElement.pageElement;\n }\n}\n\nexport function querySelector(cssSelector: string): Element | null {\n const element = __QuerySelector(PageElement.get(), cssSelector, {});\n return element ? new Element(element) : null;\n}\n\nexport function querySelectorAll(cssSelector: string): Element[] {\n return __QuerySelectorAll(PageElement.get(), cssSelector, {}).map(\n (element) => {\n return new Element(element);\n },\n );\n}\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nexport function isSdkVersionGt(major: number, minor: number): boolean {\n const lynxSdkVersion: string = SystemInfo.lynxSdkVersion ?? '1.0';\n const version = lynxSdkVersion.split('.');\n return (\n Number(version[0]) > major\n || (Number(version[0]) == major && Number(version[1]) > minor)\n );\n}\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { querySelector, querySelectorAll } from './lepusQuerySelector.js';\nimport { isSdkVersionGt } from '../utils/version.js';\n\nfunction initApiEnv(): void {\n // @ts-expect-error type\n lynx.querySelector = querySelector;\n // @ts-expect-error type\n lynx.querySelectorAll = querySelectorAll;\n // @ts-expect-error type\n globalThis.setTimeout = lynx.setTimeout as (cb: () => void, timeout: number) => number;\n // @ts-expect-error type\n globalThis.setInterval = lynx.setInterval as (cb: () => void, timeout: number) => number;\n // @ts-expect-error type\n globalThis.clearTimeout = lynx.clearTimeout as (timeout: number) => void;\n // In lynx 2.14 `clearInterval` is mistakenly spelled as `clearTimeInterval`. This is fixed in lynx 2.15.\n // @ts-expect-error type\n globalThis.clearInterval = (lynx.clearInterval ?? lynx.clearTimeInterval) as (timeout: number) => void;\n\n {\n // @ts-expect-error type\n const requestAnimationFrame = lynx.requestAnimationFrame as (callback: () => void) => number;\n // @ts-expect-error type\n lynx.requestAnimationFrame = globalThis.requestAnimationFrame = (\n callback: () => void,\n ) => {\n if (!isSdkVersionGt(2, 15)) {\n throw new Error(\n 'requestAnimationFrame in main thread script requires Lynx sdk version 2.16',\n );\n }\n return requestAnimationFrame(callback);\n };\n }\n\n // @ts-expect-error type\n globalThis.cancelAnimationFrame = lynx.cancelAnimationFrame as (requestId: number) => void;\n}\n\nexport { initApiEnv };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nexport function profile<Ret, Fn extends (...args: unknown[]) => Ret>(\n sliceName: string,\n f: Fn,\n): Ret {\n /* v8 ignore next 9 */\n // TODO: change it to __PROFILE__\n if (__DEV__) {\n console.profile(sliceName);\n try {\n return f();\n } finally {\n console.profileEnd();\n }\n } else {\n return f();\n }\n}\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { Element } from './api/element.js';\nimport type { WorkletRef, WorkletRefId, WorkletRefImpl } from './bindings/types.js';\nimport { profile } from './utils/profile.js';\n\ninterface RefImpl {\n _workletRefMap: Record<WorkletRefId, WorkletRef<unknown>>;\n _firstScreenWorkletRefMap: Record<WorkletRefId, WorkletRef<unknown>>;\n updateWorkletRef(\n refImpl: WorkletRefImpl<Element | null>,\n element: ElementNode | null,\n ): void;\n updateWorkletRefInitValueChanges(patch: [number, unknown][]): void;\n clearFirstScreenWorkletRefMap(): void;\n}\n\nlet impl: RefImpl | undefined;\n\nfunction initWorkletRef(): RefImpl {\n return (impl = {\n _workletRefMap: {},\n /**\n * Map of worklet refs that are created during first screen rendering.\n * These refs are created with negative IDs and need to be hydrated\n * when the app starts. The map is cleared after hydration is complete\n * to free up memory.\n */\n _firstScreenWorkletRefMap: {},\n updateWorkletRef,\n updateWorkletRefInitValueChanges,\n clearFirstScreenWorkletRefMap,\n });\n}\n\nconst createWorkletRef = <T>(\n id: WorkletRefId,\n value: T,\n): WorkletRef<T> => {\n return {\n current: value,\n _wvid: id,\n };\n};\n\nconst getFromWorkletRefMap = <T>(\n refImpl: WorkletRefImpl<T>,\n): WorkletRef<T> => {\n const id = refImpl._wvid;\n let value;\n if (id < 0) {\n // At the first screen rendering, the worklet ref is created with a negative ID.\n // Might be called in two scenarios:\n // 1. In MTS events\n // 2. In `main-thread:ref`\n value = impl!._firstScreenWorkletRefMap[id] as WorkletRef<T>;\n if (!value) {\n value = impl!._firstScreenWorkletRefMap[id] = createWorkletRef(id, refImpl._initValue);\n }\n } else {\n value = impl!._workletRefMap[id] as WorkletRef<T>;\n }\n\n /* v8 ignore next 3 */\n if (__DEV__ && value === undefined) {\n throw new Error('Worklet: ref is not initialized: ' + id);\n }\n return value;\n};\n\nfunction removeValueFromWorkletRefMap(id: WorkletRefId): void {\n delete impl!._workletRefMap[id];\n}\n\n/**\n * Create an element instance of the given element node, then set the worklet value to it.\n * This is called in `snapshotContextUpdateWorkletRef`.\n * @param handle handle of the worklet value.\n * @param element the element node.\n */\nfunction updateWorkletRef(\n handle: WorkletRefImpl<Element | null>,\n element: ElementNode | null,\n): void {\n getFromWorkletRefMap(handle).current = element\n ? new Element(element)\n : null;\n}\n\nfunction updateWorkletRefInitValueChanges(\n patch: [WorkletRefId, unknown][],\n): void {\n profile('updateWorkletRefInitValueChanges', () => {\n patch.forEach(([id, value]) => {\n if (!impl!._workletRefMap[id]) {\n impl!._workletRefMap[id] = createWorkletRef(id, value);\n }\n });\n });\n}\n\nfunction clearFirstScreenWorkletRefMap(): void {\n impl!._firstScreenWorkletRefMap = {};\n}\n\nexport {\n type RefImpl,\n createWorkletRef,\n initWorkletRef,\n getFromWorkletRefMap,\n removeValueFromWorkletRefMap,\n updateWorkletRefInitValueChanges,\n};\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { WorkletEvents } from './bindings/events.js';\nimport type { ReleaseWorkletRefData, RunWorkletCtxData, RunWorkletCtxRetData } from './bindings/events.js';\nimport type { ClosureValueType } from './bindings/types.js';\nimport type { Event } from './types/runtimeProxy.js';\nimport { removeValueFromWorkletRefMap } from './workletRef.js';\n\nfunction initEventListeners(): void {\n const jsContext = lynx.getJSContext();\n jsContext.addEventListener(\n WorkletEvents.runWorkletCtx,\n (event: Event) => {\n const data = JSON.parse(event.data as string) as RunWorkletCtxData;\n const returnValue = runWorklet(data.worklet, data.params as ClosureValueType[]);\n jsContext.dispatchEvent({\n type: WorkletEvents.FunctionCallRet,\n data: JSON.stringify({\n resolveId: data.resolveId,\n returnValue,\n } as RunWorkletCtxRetData),\n });\n },\n );\n jsContext.addEventListener(\n WorkletEvents.releaseWorkletRef,\n (event: Event) => {\n removeValueFromWorkletRefMap((event.data as ReleaseWorkletRefData).id);\n },\n );\n}\n\nexport { initEventListeners };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport type { JsFnHandle } from './bindings/types.js';\n\ninterface Details {\n task: (fnId: number, execId: number) => void;\n\n // This comes from the background thread, inserted here during ctx hydration.\n jsFnHandle?: JsFnHandle;\n}\n\ninterface RunOnBackgroundDelayImpl {\n // Elements should keep the order being called by the user.\n delayedBackgroundFunctionArray: Details[];\n delayRunOnBackground(fnObj: JsFnHandle, fn: (fnId: number, execId: number) => void): void;\n runDelayedBackgroundFunctions(): void;\n}\n\nlet impl: RunOnBackgroundDelayImpl | undefined;\n\nfunction initRunOnBackgroundDelay(): RunOnBackgroundDelayImpl {\n return (impl = {\n delayedBackgroundFunctionArray: [],\n delayRunOnBackground,\n runDelayedBackgroundFunctions,\n });\n}\n\nfunction delayRunOnBackground(fnObj: JsFnHandle, task: (fnId: number, execId: number) => void) {\n impl!.delayedBackgroundFunctionArray.push({ task });\n const delayIndices = fnObj._delayIndices ??= [];\n delayIndices.push(impl!.delayedBackgroundFunctionArray.length - 1);\n}\n\nfunction runDelayedBackgroundFunctions(): void {\n for (const details of impl!.delayedBackgroundFunctionArray) {\n if (details.jsFnHandle) {\n details.task(details.jsFnHandle._jsFnId!, details.jsFnHandle._execId!);\n }\n }\n impl!.delayedBackgroundFunctionArray.length = 0;\n}\n\nexport { type RunOnBackgroundDelayImpl, initRunOnBackgroundDelay };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport type { ClosureValueType, Worklet } from './bindings/types.js';\nimport { profile } from './utils/profile.js';\n\ninterface EventDelayImpl {\n _delayedWorkletParamsMap: Map<string, ClosureValueType[][]>;\n runDelayedWorklet(worklet: Worklet, element: ElementNode): void;\n clearDelayedWorklets(): void;\n}\n\nlet impl: EventDelayImpl | undefined;\n\nfunction initEventDelay(): EventDelayImpl {\n return (impl = {\n _delayedWorkletParamsMap: new Map(),\n runDelayedWorklet,\n clearDelayedWorklets,\n });\n}\n\nfunction delayExecUntilJsReady(\n hash: string,\n params: ClosureValueType[],\n): void {\n profile('delayExecUntilJsReady: ' + hash, () => {\n const map = impl!._delayedWorkletParamsMap;\n const paramVec = map.get(hash);\n if (paramVec) {\n paramVec.push(params);\n } else {\n map.set(hash, [params]);\n }\n });\n}\n\nfunction runDelayedWorklet(worklet: Worklet, element: ElementNode): void {\n profile('commitDelayedWorklet', () => {\n const paramsVec = impl!._delayedWorkletParamsMap.get(\n worklet._wkltId,\n );\n if (paramsVec === undefined) {\n return;\n }\n const leftParamsVec: ClosureValueType[][] = [];\n paramsVec.forEach((params) => {\n const firstParam = params[0] as { currentTarget?: { elementRefptr?: ElementNode } } | undefined;\n if (firstParam?.currentTarget?.elementRefptr === element) {\n setTimeout(() => {\n profile('runDelayedWorklet', () => {\n runWorklet(worklet, params);\n });\n }, 0);\n } else {\n leftParamsVec.push(params);\n }\n });\n impl!._delayedWorkletParamsMap.set(\n worklet._wkltId,\n leftParamsVec,\n );\n });\n}\n\nfunction clearDelayedWorklets(): void {\n impl!._delayedWorkletParamsMap.clear();\n}\n\nexport { type EventDelayImpl, initEventDelay, delayExecUntilJsReady, runDelayedWorklet, clearDelayedWorklets };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\n\nimport { Element } from './api/element.js';\nimport type { ClosureValueType, JsFnHandle, Worklet, WorkletRefId, WorkletRefImpl } from './bindings/index.js';\nimport { profile } from './utils/profile.js';\n\n/**\n * Hydrates a Worklet context with data from a first-screen Worklet context.\n * This process is typically used to run all delayed `runOnBackground` functions\n * and initialize `WorkletRef` values modified before hydration.\n *\n * @param ctx The target Worklet context to be hydrated.\n * @param firstScreenCtx The Worklet context from the first screen rendering,\n * containing the data to hydrate with.\n */\nexport function hydrateCtx(ctx: Worklet, firstScreenCtx: Worklet): void {\n profile('hydrateCtx', () => {\n hydrateCtxImpl(ctx, firstScreenCtx, ctx._execId!);\n });\n}\n\nfunction hydrateCtxImpl(ctx: ClosureValueType, firstScreenCtx: ClosureValueType, execId: number): void {\n if (!ctx || typeof ctx !== 'object' || !firstScreenCtx || typeof firstScreenCtx !== 'object') return;\n\n const ctxObj = ctx as Record<string, ClosureValueType>;\n const firstScreenCtxObj = firstScreenCtx as Record<string, ClosureValueType>;\n\n if (ctxObj['_wkltId'] && ctxObj['_wkltId'] !== firstScreenCtxObj['_wkltId']) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-for-in-array\n for (const key in ctx) {\n if (key === '_wvid') {\n hydrateMainThreadRef(ctxObj[key] as WorkletRefId, firstScreenCtxObj as unknown as WorkletRefImpl<unknown>);\n } else if (key === '_jsFn') {\n hydrateDelayRunOnBackgroundTasks(\n ctxObj[key] as Record<string, JsFnHandle>,\n firstScreenCtxObj[key] as Record<string, JsFnHandle>,\n execId,\n );\n } else {\n const firstScreenValue = typeof firstScreenCtxObj[key] === 'function'\n ? (firstScreenCtxObj[key] as { ctx: ClosureValueType }).ctx\n : firstScreenCtxObj[key];\n hydrateCtxImpl(ctxObj[key], firstScreenValue, execId);\n }\n }\n}\n\n/**\n * Hydrates a WorkletRef on the main thread.\n * This is used to update the WorkletRef's background initial value based on changes\n * that occurred in the first-screen Worklet context before hydration.\n *\n * @param refId The ID of the WorkletRef to hydrate.\n * @param value The new value for the WorkletRef.\n */\nfunction hydrateMainThreadRef(refId: WorkletRefId, value: WorkletRefImpl<unknown> | { current: unknown }) {\n if ('_initValue' in value) {\n // The ref has not been accessed yet.\n return;\n }\n const ref = lynxWorkletImpl!._refImpl._workletRefMap[refId]!;\n if (ref.current instanceof Element) {\n // Modified by `main-thread:ref`\n return;\n }\n ref.current = value.current;\n}\n\n/**\n * Hydrates delayed `runOnBackground` tasks.\n * This function ensures that any `runOnBackground` calls that were delayed\n * during the first-screen rendering are correctly associated with their\n * respective JavaScript function handles in the hydrated Worklet context.\n */\nfunction hydrateDelayRunOnBackgroundTasks(\n fnObjs: Record<string, JsFnHandle>, // example: {\"_jsFn1\":{\"_jsFnId\":1}}\n firstScreenFnObjs: Record<string, JsFnHandle>, // example: {\"_jsFn1\":{\"_isFirstScreen\":true,\"_delayIndices\":[0]}}\n execId: number,\n) {\n for (const fnName in fnObjs) {\n const fnObj = fnObjs[fnName]!;\n const firstScreenFnObj: JsFnHandle | undefined = firstScreenFnObjs[fnName];\n if (!firstScreenFnObj?._delayIndices) {\n continue;\n }\n for (const index of firstScreenFnObj._delayIndices) {\n const details = lynxWorkletImpl!._runOnBackgroundDelayImpl.delayedBackgroundFunctionArray[index]!;\n fnObj._execId = execId;\n details.jsFnHandle = fnObj;\n }\n }\n}\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { WorkletEvents } from './bindings/events.js';\nimport { profile } from './utils/profile.js';\nimport { isSdkVersionGt } from './utils/version.js';\n\n/**\n * `JsFunctionLifecycleManager` monitors references to JS function handles to be called by `runOnBackground()`.\n * In JS context, functions to be called by `runOnBackground()` is referenced by `JsFnHandle`s and finally by `execId`.\n * When all `JsFnHandle`s in lepus are released, an event will be sent to JS context to de-ref the `execId`,\n * resulting a de-ref to the js function in JS context.\n */\nclass JsFunctionLifecycleManager {\n private execIdRefCount = new Map<number, number>();\n private execIdSetToFire = new Set<number>();\n private willFire = false;\n private registry?: FinalizationRegistry<number> = undefined;\n\n constructor() {\n this.registry = new FinalizationRegistry<number>(this.removeRef.bind(this));\n }\n\n addRef(execId: number, objToRef: object): void {\n this.execIdRefCount.set(\n execId,\n (this.execIdRefCount.get(execId) ?? 0) + 1,\n );\n this.registry!.register(objToRef, execId);\n }\n\n removeRef(execId: number): void {\n const rc = this.execIdRefCount.get(execId)!;\n if (rc > 1) {\n this.execIdRefCount.set(execId, rc - 1);\n return;\n }\n this.execIdRefCount.delete(execId);\n this.execIdSetToFire.add(execId);\n if (!this.willFire) {\n this.willFire = true;\n void Promise.resolve().then(() => {\n this.fire();\n });\n }\n }\n\n fire(): void {\n profile('JsFunctionLifecycleManager.fire', () => {\n lynx.getJSContext().dispatchEvent({\n type: WorkletEvents.releaseBackgroundWorkletCtx,\n data: Array.from(this.execIdSetToFire),\n });\n this.execIdSetToFire.clear();\n this.willFire = false;\n });\n }\n}\n\nfunction isRunOnBackgroundEnabled(): boolean {\n return isSdkVersionGt(2, 15);\n}\n\nexport { JsFunctionLifecycleManager, isRunOnBackgroundEnabled };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { Element } from './api/element.js';\nimport type { ClosureValueType, Worklet, WorkletRefImpl } from './bindings/types.js';\nimport { initRunOnBackgroundDelay } from './delayRunOnBackground.js';\nimport { delayExecUntilJsReady, initEventDelay } from './delayWorkletEvent.js';\nimport { hydrateCtx } from './hydrate.js';\nimport { JsFunctionLifecycleManager, isRunOnBackgroundEnabled } from './jsFunctionLifecycle.js';\nimport { profile } from './utils/profile.js';\nimport { getFromWorkletRefMap, initWorkletRef } from './workletRef.js';\n\nfunction initWorklet(): void {\n globalThis.lynxWorkletImpl = {\n _workletMap: {},\n _refImpl: initWorkletRef(),\n _runOnBackgroundDelayImpl: initRunOnBackgroundDelay(),\n _hydrateCtx: hydrateCtx,\n _eventDelayImpl: initEventDelay(),\n };\n\n if (isRunOnBackgroundEnabled()) {\n globalThis.lynxWorkletImpl._jsFunctionLifecycleManager = new JsFunctionLifecycleManager();\n }\n\n globalThis.registerWorklet = registerWorklet;\n globalThis.registerWorkletInternal = registerWorklet;\n globalThis.runWorklet = runWorklet;\n}\n\n/**\n * Register a worklet function, allowing it to be executed by `runWorklet()`.\n * This is called in lepus.js.\n * @param _type worklet type, 'main-thread' or 'ui'\n * @param id worklet hash\n * @param worklet worklet function\n */\nfunction registerWorklet(_type: string, id: string, worklet: (...args: unknown[]) => unknown): void {\n lynxWorkletImpl._workletMap[id] = worklet;\n}\n\n/**\n * Entrance of all worklet calls.\n * Native event touch handler will call this function.\n * @param ctx worklet object.\n * @param params worklet params.\n */\nfunction runWorklet(ctx: Worklet, params: ClosureValueType[]): unknown {\n if (!validateWorklet(ctx)) {\n console.warn('Worklet: Invalid worklet object: ' + JSON.stringify(ctx));\n return;\n }\n if ('_lepusWorkletHash' in ctx) {\n delayExecUntilJsReady(ctx._lepusWorkletHash, params);\n return;\n }\n return runWorkletImpl(ctx, params);\n}\n\nfunction runWorkletImpl(ctx: Worklet, params: ClosureValueType[]): unknown {\n const worklet: (...args: unknown[]) => unknown = profile(\n 'transformWorkletCtx ' + ctx._wkltId,\n () => transformWorklet(ctx, true),\n );\n const params_: ClosureValueType[] = profile(\n 'transformWorkletParams',\n () => transformWorklet(params || [], false),\n );\n return profile('runWorklet', () => worklet(...params_));\n}\n\nfunction validateWorklet(ctx: unknown): ctx is Worklet {\n return typeof ctx === 'object' && ctx !== null && ('_wkltId' in ctx || '_lepusWorkletHash' in ctx);\n}\n\nconst workletCache = new WeakMap<object, ClosureValueType | ((...args: unknown[]) => unknown)>();\n\nfunction transformWorklet(ctx: Worklet, isWorklet: true): (...args: unknown[]) => unknown;\nfunction transformWorklet(\n ctx: ClosureValueType[],\n isWorklet: false,\n): ClosureValueType[];\n\nfunction transformWorklet(\n ctx: ClosureValueType,\n isWorklet: boolean,\n): ClosureValueType | ((...args: unknown[]) => unknown) {\n /* v8 ignore next 3 */\n if (typeof ctx !== 'object' || ctx === null) {\n return ctx;\n }\n\n if (isWorklet) {\n const res = workletCache.get(ctx);\n if (res) {\n return res;\n }\n }\n\n const worklet = { main: ctx };\n transformWorkletInner(worklet, 0, ctx);\n\n if (isWorklet) {\n workletCache.set(ctx, worklet.main);\n }\n return worklet.main;\n}\n\nconst transformWorkletInner = (\n value: ClosureValueType,\n depth: number,\n ctx: unknown,\n) => {\n const limit = 1000;\n if (++depth >= limit) {\n throw new Error('Depth of value exceeds limit of ' + limit + '.');\n }\n /* v8 ignore next 3 */\n if (typeof value !== 'object' || value === null) {\n return;\n }\n const obj = value as Record<string, ClosureValueType>;\n\n for (const key in obj) {\n const subObj: ClosureValueType = obj[key];\n if (typeof subObj !== 'object' || subObj === null) {\n continue;\n }\n\n const isEventTarget = 'elementRefptr' in subObj;\n if (!isEventTarget) {\n transformWorkletInner(subObj, depth, ctx);\n }\n\n if (isEventTarget) {\n obj[key] = new Element(subObj['elementRefptr'] as ElementNode);\n continue;\n }\n const isWorkletRef = '_wvid' in (subObj as object);\n if (isWorkletRef) {\n obj[key] = getFromWorkletRefMap(\n subObj as unknown as WorkletRefImpl<unknown>,\n );\n continue;\n }\n const isWorklet = '_wkltId' in subObj;\n if (isWorklet) {\n // `subObj` is worklet ctx. Shallow copy it to prevent the transformed worklet from referencing ctx.\n // This would result in the value of `workletCache` referencing its key.\n obj[key] = lynxWorkletImpl._workletMap[(subObj as Worklet)._wkltId]!\n .bind({ ...subObj });\n obj[key].ctx = subObj;\n continue;\n }\n const isJsFn = '_jsFnId' in subObj;\n if (isJsFn) {\n subObj['_execId'] = (ctx as Worklet)._execId;\n lynxWorkletImpl._jsFunctionLifecycleManager?.addRef(\n (ctx as Worklet)._execId!,\n subObj,\n );\n continue;\n }\n }\n};\n\nexport { initWorklet };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { initApiEnv } from './api/lynxApi.js';\nimport { initEventListeners } from './listeners.js';\nimport { initWorklet } from './workletRuntime.js';\n\nif (globalThis.lynxWorkletImpl === undefined) {\n initWorklet();\n initApiEnv();\n initEventListeners();\n}\n"],
6
- "mappings": "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",
7
- "names": ["impl", "impl", "runWorklet"]
8
- }
@@ -1,8 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../src/api/element.ts", "../src/api/lepusQuerySelector.ts", "../src/utils/version.ts", "../src/api/lynxApi.ts", "../src/utils/profile.ts", "../src/workletRef.ts", "../src/listeners.ts", "../src/delayRunOnBackground.ts", "../src/delayWorkletEvent.ts", "../src/hydrate.ts", "../src/jsFunctionLifecycle.ts", "../src/workletRuntime.ts", "../src/index.ts"],
4
- "sourceRoot": "/home/runner/work/lynx-stack/lynx-stack/packages/react/worklet-runtime/src",
5
- "sourcesContent": ["// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nexport class Element {\n private static willFlush = false;\n\n // @ts-expect-error set in constructor\n private readonly element: ElementNode;\n\n constructor(element: ElementNode) {\n // In Lynx versions prior to and including 2.15,\n // a crash occurs when printing or transferring refCounted across threads.\n // Bypass this problem by hiding the element object.\n Object.defineProperty(this, 'element', {\n get() {\n return element;\n },\n });\n }\n\n public setAttribute(name: string, value: unknown): void {\n __SetAttribute(this.element, name, value);\n this.flushElementTree();\n }\n\n public setStyleProperty(name: string, value: string): void {\n __AddInlineStyle(this.element, name, value);\n this.flushElementTree();\n }\n\n public setStyleProperties(styles: Record<string, string>): void {\n for (const key in styles) {\n __AddInlineStyle(this.element, key, styles[key]!);\n }\n this.flushElementTree();\n }\n\n public getAttribute(attributeName: string): unknown {\n return __GetAttributeByName(this.element, attributeName);\n }\n\n public getAttributeNames(): string[] {\n return __GetAttributeNames(this.element);\n }\n\n public querySelector(selector: string): Element | null {\n const ref = __QuerySelector(this.element, selector, {});\n return ref ? new Element(ref) : null;\n }\n\n public querySelectorAll(selector: string): Element[] {\n return __QuerySelectorAll(this.element, selector, {}).map((element) => {\n return new Element(element);\n });\n }\n\n public invoke(\n methodName: string,\n params?: Record<string, unknown>,\n ): Promise<unknown> {\n return new Promise((resolve, reject) => {\n __InvokeUIMethod(\n this.element,\n methodName,\n params ?? {},\n (res: { code: number; data: unknown }) => {\n if (res.code === 0) {\n resolve(res.data);\n } else {\n reject(new Error('UI method invoke: ' + JSON.stringify(res)));\n }\n },\n );\n this.flushElementTree();\n });\n }\n\n private flushElementTree() {\n if (Element.willFlush) {\n return;\n }\n Element.willFlush = true;\n void Promise.resolve().then(() => {\n Element.willFlush = false;\n __FlushElementTree();\n });\n }\n}\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { Element } from './element.js';\n\nclass PageElement {\n private static pageElement: ElementNode | undefined;\n\n static get() {\n PageElement.pageElement ??= __GetPageElement();\n return PageElement.pageElement;\n }\n}\n\nexport function querySelector(cssSelector: string): Element | null {\n const element = __QuerySelector(PageElement.get(), cssSelector, {});\n return element ? new Element(element) : null;\n}\n\nexport function querySelectorAll(cssSelector: string): Element[] {\n return __QuerySelectorAll(PageElement.get(), cssSelector, {}).map(\n (element) => {\n return new Element(element);\n },\n );\n}\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nexport function isSdkVersionGt(major: number, minor: number): boolean {\n const lynxSdkVersion: string = SystemInfo.lynxSdkVersion ?? '1.0';\n const version = lynxSdkVersion.split('.');\n return (\n Number(version[0]) > major\n || (Number(version[0]) == major && Number(version[1]) > minor)\n );\n}\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { querySelector, querySelectorAll } from './lepusQuerySelector.js';\nimport { isSdkVersionGt } from '../utils/version.js';\n\nfunction initApiEnv(): void {\n // @ts-expect-error type\n lynx.querySelector = querySelector;\n // @ts-expect-error type\n lynx.querySelectorAll = querySelectorAll;\n // @ts-expect-error type\n globalThis.setTimeout = lynx.setTimeout as (cb: () => void, timeout: number) => number;\n // @ts-expect-error type\n globalThis.setInterval = lynx.setInterval as (cb: () => void, timeout: number) => number;\n // @ts-expect-error type\n globalThis.clearTimeout = lynx.clearTimeout as (timeout: number) => void;\n // In lynx 2.14 `clearInterval` is mistakenly spelled as `clearTimeInterval`. This is fixed in lynx 2.15.\n // @ts-expect-error type\n globalThis.clearInterval = (lynx.clearInterval ?? lynx.clearTimeInterval) as (timeout: number) => void;\n\n {\n // @ts-expect-error type\n const requestAnimationFrame = lynx.requestAnimationFrame as (callback: () => void) => number;\n // @ts-expect-error type\n lynx.requestAnimationFrame = globalThis.requestAnimationFrame = (\n callback: () => void,\n ) => {\n if (!isSdkVersionGt(2, 15)) {\n throw new Error(\n 'requestAnimationFrame in main thread script requires Lynx sdk version 2.16',\n );\n }\n return requestAnimationFrame(callback);\n };\n }\n\n // @ts-expect-error type\n globalThis.cancelAnimationFrame = lynx.cancelAnimationFrame as (requestId: number) => void;\n}\n\nexport { initApiEnv };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nexport function profile<Ret, Fn extends (...args: unknown[]) => Ret>(\n sliceName: string,\n f: Fn,\n): Ret {\n /* v8 ignore next 9 */\n // TODO: change it to __PROFILE__\n if (__DEV__) {\n console.profile(sliceName);\n try {\n return f();\n } finally {\n console.profileEnd();\n }\n } else {\n return f();\n }\n}\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { Element } from './api/element.js';\nimport type { WorkletRef, WorkletRefId, WorkletRefImpl } from './bindings/types.js';\nimport { profile } from './utils/profile.js';\n\ninterface RefImpl {\n _workletRefMap: Record<WorkletRefId, WorkletRef<unknown>>;\n _firstScreenWorkletRefMap: Record<WorkletRefId, WorkletRef<unknown>>;\n updateWorkletRef(\n refImpl: WorkletRefImpl<Element | null>,\n element: ElementNode | null,\n ): void;\n updateWorkletRefInitValueChanges(patch: [number, unknown][]): void;\n clearFirstScreenWorkletRefMap(): void;\n}\n\nlet impl: RefImpl | undefined;\n\nfunction initWorkletRef(): RefImpl {\n return (impl = {\n _workletRefMap: {},\n /**\n * Map of worklet refs that are created during first screen rendering.\n * These refs are created with negative IDs and need to be hydrated\n * when the app starts. The map is cleared after hydration is complete\n * to free up memory.\n */\n _firstScreenWorkletRefMap: {},\n updateWorkletRef,\n updateWorkletRefInitValueChanges,\n clearFirstScreenWorkletRefMap,\n });\n}\n\nconst createWorkletRef = <T>(\n id: WorkletRefId,\n value: T,\n): WorkletRef<T> => {\n return {\n current: value,\n _wvid: id,\n };\n};\n\nconst getFromWorkletRefMap = <T>(\n refImpl: WorkletRefImpl<T>,\n): WorkletRef<T> => {\n const id = refImpl._wvid;\n let value;\n if (id < 0) {\n // At the first screen rendering, the worklet ref is created with a negative ID.\n // Might be called in two scenarios:\n // 1. In MTS events\n // 2. In `main-thread:ref`\n value = impl!._firstScreenWorkletRefMap[id] as WorkletRef<T>;\n if (!value) {\n value = impl!._firstScreenWorkletRefMap[id] = createWorkletRef(id, refImpl._initValue);\n }\n } else {\n value = impl!._workletRefMap[id] as WorkletRef<T>;\n }\n\n /* v8 ignore next 3 */\n if (__DEV__ && value === undefined) {\n throw new Error('Worklet: ref is not initialized: ' + id);\n }\n return value;\n};\n\nfunction removeValueFromWorkletRefMap(id: WorkletRefId): void {\n delete impl!._workletRefMap[id];\n}\n\n/**\n * Create an element instance of the given element node, then set the worklet value to it.\n * This is called in `snapshotContextUpdateWorkletRef`.\n * @param handle handle of the worklet value.\n * @param element the element node.\n */\nfunction updateWorkletRef(\n handle: WorkletRefImpl<Element | null>,\n element: ElementNode | null,\n): void {\n getFromWorkletRefMap(handle).current = element\n ? new Element(element)\n : null;\n}\n\nfunction updateWorkletRefInitValueChanges(\n patch: [WorkletRefId, unknown][],\n): void {\n profile('updateWorkletRefInitValueChanges', () => {\n patch.forEach(([id, value]) => {\n if (!impl!._workletRefMap[id]) {\n impl!._workletRefMap[id] = createWorkletRef(id, value);\n }\n });\n });\n}\n\nfunction clearFirstScreenWorkletRefMap(): void {\n impl!._firstScreenWorkletRefMap = {};\n}\n\nexport {\n type RefImpl,\n createWorkletRef,\n initWorkletRef,\n getFromWorkletRefMap,\n removeValueFromWorkletRefMap,\n updateWorkletRefInitValueChanges,\n};\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { WorkletEvents } from './bindings/events.js';\nimport type { ReleaseWorkletRefData, RunWorkletCtxData, RunWorkletCtxRetData } from './bindings/events.js';\nimport type { ClosureValueType } from './bindings/types.js';\nimport type { Event } from './types/runtimeProxy.js';\nimport { removeValueFromWorkletRefMap } from './workletRef.js';\n\nfunction initEventListeners(): void {\n const jsContext = lynx.getJSContext();\n jsContext.addEventListener(\n WorkletEvents.runWorkletCtx,\n (event: Event) => {\n const data = JSON.parse(event.data as string) as RunWorkletCtxData;\n const returnValue = runWorklet(data.worklet, data.params as ClosureValueType[]);\n jsContext.dispatchEvent({\n type: WorkletEvents.FunctionCallRet,\n data: JSON.stringify({\n resolveId: data.resolveId,\n returnValue,\n } as RunWorkletCtxRetData),\n });\n },\n );\n jsContext.addEventListener(\n WorkletEvents.releaseWorkletRef,\n (event: Event) => {\n removeValueFromWorkletRefMap((event.data as ReleaseWorkletRefData).id);\n },\n );\n}\n\nexport { initEventListeners };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport type { JsFnHandle } from './bindings/types.js';\n\ninterface Details {\n task: (fnId: number, execId: number) => void;\n\n // This comes from the background thread, inserted here during ctx hydration.\n jsFnHandle?: JsFnHandle;\n}\n\ninterface RunOnBackgroundDelayImpl {\n // Elements should keep the order being called by the user.\n delayedBackgroundFunctionArray: Details[];\n delayRunOnBackground(fnObj: JsFnHandle, fn: (fnId: number, execId: number) => void): void;\n runDelayedBackgroundFunctions(): void;\n}\n\nlet impl: RunOnBackgroundDelayImpl | undefined;\n\nfunction initRunOnBackgroundDelay(): RunOnBackgroundDelayImpl {\n return (impl = {\n delayedBackgroundFunctionArray: [],\n delayRunOnBackground,\n runDelayedBackgroundFunctions,\n });\n}\n\nfunction delayRunOnBackground(fnObj: JsFnHandle, task: (fnId: number, execId: number) => void) {\n impl!.delayedBackgroundFunctionArray.push({ task });\n const delayIndices = fnObj._delayIndices ??= [];\n delayIndices.push(impl!.delayedBackgroundFunctionArray.length - 1);\n}\n\nfunction runDelayedBackgroundFunctions(): void {\n for (const details of impl!.delayedBackgroundFunctionArray) {\n if (details.jsFnHandle) {\n details.task(details.jsFnHandle._jsFnId!, details.jsFnHandle._execId!);\n }\n }\n impl!.delayedBackgroundFunctionArray.length = 0;\n}\n\nexport { type RunOnBackgroundDelayImpl, initRunOnBackgroundDelay };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport type { ClosureValueType, Worklet } from './bindings/types.js';\nimport { profile } from './utils/profile.js';\n\ninterface EventDelayImpl {\n _delayedWorkletParamsMap: Map<string, ClosureValueType[][]>;\n runDelayedWorklet(worklet: Worklet, element: ElementNode): void;\n clearDelayedWorklets(): void;\n}\n\nlet impl: EventDelayImpl | undefined;\n\nfunction initEventDelay(): EventDelayImpl {\n return (impl = {\n _delayedWorkletParamsMap: new Map(),\n runDelayedWorklet,\n clearDelayedWorklets,\n });\n}\n\nfunction delayExecUntilJsReady(\n hash: string,\n params: ClosureValueType[],\n): void {\n profile('delayExecUntilJsReady: ' + hash, () => {\n const map = impl!._delayedWorkletParamsMap;\n const paramVec = map.get(hash);\n if (paramVec) {\n paramVec.push(params);\n } else {\n map.set(hash, [params]);\n }\n });\n}\n\nfunction runDelayedWorklet(worklet: Worklet, element: ElementNode): void {\n profile('commitDelayedWorklet', () => {\n const paramsVec = impl!._delayedWorkletParamsMap.get(\n worklet._wkltId,\n );\n if (paramsVec === undefined) {\n return;\n }\n const leftParamsVec: ClosureValueType[][] = [];\n paramsVec.forEach((params) => {\n const firstParam = params[0] as { currentTarget?: { elementRefptr?: ElementNode } } | undefined;\n if (firstParam?.currentTarget?.elementRefptr === element) {\n setTimeout(() => {\n profile('runDelayedWorklet', () => {\n runWorklet(worklet, params);\n });\n }, 0);\n } else {\n leftParamsVec.push(params);\n }\n });\n impl!._delayedWorkletParamsMap.set(\n worklet._wkltId,\n leftParamsVec,\n );\n });\n}\n\nfunction clearDelayedWorklets(): void {\n impl!._delayedWorkletParamsMap.clear();\n}\n\nexport { type EventDelayImpl, initEventDelay, delayExecUntilJsReady, runDelayedWorklet, clearDelayedWorklets };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\n\nimport { Element } from './api/element.js';\nimport type { ClosureValueType, JsFnHandle, Worklet, WorkletRefId, WorkletRefImpl } from './bindings/index.js';\nimport { profile } from './utils/profile.js';\n\n/**\n * Hydrates a Worklet context with data from a first-screen Worklet context.\n * This process is typically used to run all delayed `runOnBackground` functions\n * and initialize `WorkletRef` values modified before hydration.\n *\n * @param ctx The target Worklet context to be hydrated.\n * @param firstScreenCtx The Worklet context from the first screen rendering,\n * containing the data to hydrate with.\n */\nexport function hydrateCtx(ctx: Worklet, firstScreenCtx: Worklet): void {\n profile('hydrateCtx', () => {\n hydrateCtxImpl(ctx, firstScreenCtx, ctx._execId!);\n });\n}\n\nfunction hydrateCtxImpl(ctx: ClosureValueType, firstScreenCtx: ClosureValueType, execId: number): void {\n if (!ctx || typeof ctx !== 'object' || !firstScreenCtx || typeof firstScreenCtx !== 'object') return;\n\n const ctxObj = ctx as Record<string, ClosureValueType>;\n const firstScreenCtxObj = firstScreenCtx as Record<string, ClosureValueType>;\n\n if (ctxObj['_wkltId'] && ctxObj['_wkltId'] !== firstScreenCtxObj['_wkltId']) {\n return;\n }\n\n // eslint-disable-next-line @typescript-eslint/no-for-in-array\n for (const key in ctx) {\n if (key === '_wvid') {\n hydrateMainThreadRef(ctxObj[key] as WorkletRefId, firstScreenCtxObj as unknown as WorkletRefImpl<unknown>);\n } else if (key === '_jsFn') {\n hydrateDelayRunOnBackgroundTasks(\n ctxObj[key] as Record<string, JsFnHandle>,\n firstScreenCtxObj[key] as Record<string, JsFnHandle>,\n execId,\n );\n } else {\n const firstScreenValue = typeof firstScreenCtxObj[key] === 'function'\n ? (firstScreenCtxObj[key] as { ctx: ClosureValueType }).ctx\n : firstScreenCtxObj[key];\n hydrateCtxImpl(ctxObj[key], firstScreenValue, execId);\n }\n }\n}\n\n/**\n * Hydrates a WorkletRef on the main thread.\n * This is used to update the WorkletRef's background initial value based on changes\n * that occurred in the first-screen Worklet context before hydration.\n *\n * @param refId The ID of the WorkletRef to hydrate.\n * @param value The new value for the WorkletRef.\n */\nfunction hydrateMainThreadRef(refId: WorkletRefId, value: WorkletRefImpl<unknown> | { current: unknown }) {\n if ('_initValue' in value) {\n // The ref has not been accessed yet.\n return;\n }\n const ref = lynxWorkletImpl!._refImpl._workletRefMap[refId]!;\n if (ref.current instanceof Element) {\n // Modified by `main-thread:ref`\n return;\n }\n ref.current = value.current;\n}\n\n/**\n * Hydrates delayed `runOnBackground` tasks.\n * This function ensures that any `runOnBackground` calls that were delayed\n * during the first-screen rendering are correctly associated with their\n * respective JavaScript function handles in the hydrated Worklet context.\n */\nfunction hydrateDelayRunOnBackgroundTasks(\n fnObjs: Record<string, JsFnHandle>, // example: {\"_jsFn1\":{\"_jsFnId\":1}}\n firstScreenFnObjs: Record<string, JsFnHandle>, // example: {\"_jsFn1\":{\"_isFirstScreen\":true,\"_delayIndices\":[0]}}\n execId: number,\n) {\n for (const fnName in fnObjs) {\n const fnObj = fnObjs[fnName]!;\n const firstScreenFnObj: JsFnHandle | undefined = firstScreenFnObjs[fnName];\n if (!firstScreenFnObj?._delayIndices) {\n continue;\n }\n for (const index of firstScreenFnObj._delayIndices) {\n const details = lynxWorkletImpl!._runOnBackgroundDelayImpl.delayedBackgroundFunctionArray[index]!;\n fnObj._execId = execId;\n details.jsFnHandle = fnObj;\n }\n }\n}\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { WorkletEvents } from './bindings/events.js';\nimport { profile } from './utils/profile.js';\nimport { isSdkVersionGt } from './utils/version.js';\n\n/**\n * `JsFunctionLifecycleManager` monitors references to JS function handles to be called by `runOnBackground()`.\n * In JS context, functions to be called by `runOnBackground()` is referenced by `JsFnHandle`s and finally by `execId`.\n * When all `JsFnHandle`s in lepus are released, an event will be sent to JS context to de-ref the `execId`,\n * resulting a de-ref to the js function in JS context.\n */\nclass JsFunctionLifecycleManager {\n private execIdRefCount = new Map<number, number>();\n private execIdSetToFire = new Set<number>();\n private willFire = false;\n private registry?: FinalizationRegistry<number> = undefined;\n\n constructor() {\n this.registry = new FinalizationRegistry<number>(this.removeRef.bind(this));\n }\n\n addRef(execId: number, objToRef: object): void {\n this.execIdRefCount.set(\n execId,\n (this.execIdRefCount.get(execId) ?? 0) + 1,\n );\n this.registry!.register(objToRef, execId);\n }\n\n removeRef(execId: number): void {\n const rc = this.execIdRefCount.get(execId)!;\n if (rc > 1) {\n this.execIdRefCount.set(execId, rc - 1);\n return;\n }\n this.execIdRefCount.delete(execId);\n this.execIdSetToFire.add(execId);\n if (!this.willFire) {\n this.willFire = true;\n void Promise.resolve().then(() => {\n this.fire();\n });\n }\n }\n\n fire(): void {\n profile('JsFunctionLifecycleManager.fire', () => {\n lynx.getJSContext().dispatchEvent({\n type: WorkletEvents.releaseBackgroundWorkletCtx,\n data: Array.from(this.execIdSetToFire),\n });\n this.execIdSetToFire.clear();\n this.willFire = false;\n });\n }\n}\n\nfunction isRunOnBackgroundEnabled(): boolean {\n return isSdkVersionGt(2, 15);\n}\n\nexport { JsFunctionLifecycleManager, isRunOnBackgroundEnabled };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { Element } from './api/element.js';\nimport type { ClosureValueType, Worklet, WorkletRefImpl } from './bindings/types.js';\nimport { initRunOnBackgroundDelay } from './delayRunOnBackground.js';\nimport { delayExecUntilJsReady, initEventDelay } from './delayWorkletEvent.js';\nimport { hydrateCtx } from './hydrate.js';\nimport { JsFunctionLifecycleManager, isRunOnBackgroundEnabled } from './jsFunctionLifecycle.js';\nimport { profile } from './utils/profile.js';\nimport { getFromWorkletRefMap, initWorkletRef } from './workletRef.js';\n\nfunction initWorklet(): void {\n globalThis.lynxWorkletImpl = {\n _workletMap: {},\n _refImpl: initWorkletRef(),\n _runOnBackgroundDelayImpl: initRunOnBackgroundDelay(),\n _hydrateCtx: hydrateCtx,\n _eventDelayImpl: initEventDelay(),\n };\n\n if (isRunOnBackgroundEnabled()) {\n globalThis.lynxWorkletImpl._jsFunctionLifecycleManager = new JsFunctionLifecycleManager();\n }\n\n globalThis.registerWorklet = registerWorklet;\n globalThis.registerWorkletInternal = registerWorklet;\n globalThis.runWorklet = runWorklet;\n}\n\n/**\n * Register a worklet function, allowing it to be executed by `runWorklet()`.\n * This is called in lepus.js.\n * @param _type worklet type, 'main-thread' or 'ui'\n * @param id worklet hash\n * @param worklet worklet function\n */\nfunction registerWorklet(_type: string, id: string, worklet: (...args: unknown[]) => unknown): void {\n lynxWorkletImpl._workletMap[id] = worklet;\n}\n\n/**\n * Entrance of all worklet calls.\n * Native event touch handler will call this function.\n * @param ctx worklet object.\n * @param params worklet params.\n */\nfunction runWorklet(ctx: Worklet, params: ClosureValueType[]): unknown {\n if (!validateWorklet(ctx)) {\n console.warn('Worklet: Invalid worklet object: ' + JSON.stringify(ctx));\n return;\n }\n if ('_lepusWorkletHash' in ctx) {\n delayExecUntilJsReady(ctx._lepusWorkletHash, params);\n return;\n }\n return runWorkletImpl(ctx, params);\n}\n\nfunction runWorkletImpl(ctx: Worklet, params: ClosureValueType[]): unknown {\n const worklet: (...args: unknown[]) => unknown = profile(\n 'transformWorkletCtx ' + ctx._wkltId,\n () => transformWorklet(ctx, true),\n );\n const params_: ClosureValueType[] = profile(\n 'transformWorkletParams',\n () => transformWorklet(params || [], false),\n );\n return profile('runWorklet', () => worklet(...params_));\n}\n\nfunction validateWorklet(ctx: unknown): ctx is Worklet {\n return typeof ctx === 'object' && ctx !== null && ('_wkltId' in ctx || '_lepusWorkletHash' in ctx);\n}\n\nconst workletCache = new WeakMap<object, ClosureValueType | ((...args: unknown[]) => unknown)>();\n\nfunction transformWorklet(ctx: Worklet, isWorklet: true): (...args: unknown[]) => unknown;\nfunction transformWorklet(\n ctx: ClosureValueType[],\n isWorklet: false,\n): ClosureValueType[];\n\nfunction transformWorklet(\n ctx: ClosureValueType,\n isWorklet: boolean,\n): ClosureValueType | ((...args: unknown[]) => unknown) {\n /* v8 ignore next 3 */\n if (typeof ctx !== 'object' || ctx === null) {\n return ctx;\n }\n\n if (isWorklet) {\n const res = workletCache.get(ctx);\n if (res) {\n return res;\n }\n }\n\n const worklet = { main: ctx };\n transformWorkletInner(worklet, 0, ctx);\n\n if (isWorklet) {\n workletCache.set(ctx, worklet.main);\n }\n return worklet.main;\n}\n\nconst transformWorkletInner = (\n value: ClosureValueType,\n depth: number,\n ctx: unknown,\n) => {\n const limit = 1000;\n if (++depth >= limit) {\n throw new Error('Depth of value exceeds limit of ' + limit + '.');\n }\n /* v8 ignore next 3 */\n if (typeof value !== 'object' || value === null) {\n return;\n }\n const obj = value as Record<string, ClosureValueType>;\n\n for (const key in obj) {\n const subObj: ClosureValueType = obj[key];\n if (typeof subObj !== 'object' || subObj === null) {\n continue;\n }\n\n const isEventTarget = 'elementRefptr' in subObj;\n if (!isEventTarget) {\n transformWorkletInner(subObj, depth, ctx);\n }\n\n if (isEventTarget) {\n obj[key] = new Element(subObj['elementRefptr'] as ElementNode);\n continue;\n }\n const isWorkletRef = '_wvid' in (subObj as object);\n if (isWorkletRef) {\n obj[key] = getFromWorkletRefMap(\n subObj as unknown as WorkletRefImpl<unknown>,\n );\n continue;\n }\n const isWorklet = '_wkltId' in subObj;\n if (isWorklet) {\n // `subObj` is worklet ctx. Shallow copy it to prevent the transformed worklet from referencing ctx.\n // This would result in the value of `workletCache` referencing its key.\n obj[key] = lynxWorkletImpl._workletMap[(subObj as Worklet)._wkltId]!\n .bind({ ...subObj });\n obj[key].ctx = subObj;\n continue;\n }\n const isJsFn = '_jsFnId' in subObj;\n if (isJsFn) {\n subObj['_execId'] = (ctx as Worklet)._execId;\n lynxWorkletImpl._jsFunctionLifecycleManager?.addRef(\n (ctx as Worklet)._execId!,\n subObj,\n );\n continue;\n }\n }\n};\n\nexport { initWorklet };\n", "// Copyright 2024 The Lynx Authors. All rights reserved.\n// Licensed under the Apache License Version 2.0 that can be found in the\n// LICENSE file in the root directory of this source tree.\nimport { initApiEnv } from './api/lynxApi.js';\nimport { initEventListeners } from './listeners.js';\nimport { initWorklet } from './workletRuntime.js';\n\nif (globalThis.lynxWorkletImpl === undefined) {\n initWorklet();\n initApiEnv();\n initEventListeners();\n}\n"],
6
- "mappings": "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",
7
- "names": ["impl", "impl", "runWorklet"]
8
- }