angular-three 2.0.0-beta.9 → 2.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (160) hide show
  1. package/README.md +221 -4
  2. package/esm2022/index.mjs +13 -14
  3. package/esm2022/lib/canvas.mjs +130 -197
  4. package/esm2022/lib/directives/args.mjs +46 -20
  5. package/esm2022/lib/directives/selection.mjs +65 -0
  6. package/esm2022/lib/dom/events.mjs +2 -2
  7. package/esm2022/lib/events.mjs +33 -31
  8. package/esm2022/lib/html.mjs +40 -0
  9. package/esm2022/lib/instance.mjs +43 -36
  10. package/esm2022/lib/loader.mjs +72 -36
  11. package/esm2022/lib/loop.mjs +29 -26
  12. package/esm2022/lib/pipes/hexify.mjs +67 -0
  13. package/esm2022/lib/portal.mjs +173 -193
  14. package/esm2022/lib/renderer/catalogue.mjs +3 -3
  15. package/esm2022/lib/renderer/constants.mjs +6 -6
  16. package/esm2022/lib/renderer/index.mjs +356 -217
  17. package/esm2022/lib/renderer/state.mjs +54 -0
  18. package/esm2022/lib/renderer/utils.mjs +120 -64
  19. package/esm2022/lib/roots.mjs +86 -62
  20. package/esm2022/lib/routed-scene.mjs +11 -8
  21. package/esm2022/lib/store.mjs +164 -195
  22. package/esm2022/lib/three-types.mjs +1 -1
  23. package/esm2022/lib/types.mjs +1 -1
  24. package/esm2022/lib/utils/apply-props.mjs +31 -28
  25. package/esm2022/lib/utils/attach.mjs +26 -12
  26. package/esm2022/lib/utils/before-render.mjs +12 -0
  27. package/esm2022/lib/utils/is.mjs +6 -5
  28. package/esm2022/lib/utils/make.mjs +19 -17
  29. package/esm2022/lib/utils/non-nullish.mjs +7 -0
  30. package/esm2022/lib/utils/object-events.mjs +91 -0
  31. package/esm2022/lib/utils/parameters.mjs +70 -0
  32. package/esm2022/lib/utils/resolve-ref.mjs +8 -0
  33. package/esm2022/lib/utils/signal-store.mjs +59 -60
  34. package/esm2022/lib/utils/update.mjs +8 -4
  35. package/esm2022/nativescript/angular-three-nativescript.mjs +5 -0
  36. package/esm2022/nativescript/index.mjs +2 -0
  37. package/esm2022/nativescript/lib/canvas.mjs +127 -0
  38. package/esm2022/testing/angular-three-testing.mjs +5 -0
  39. package/esm2022/testing/index.mjs +3 -0
  40. package/esm2022/testing/lib/test-bed.mjs +130 -0
  41. package/esm2022/testing/lib/test-canvas.mjs +45 -0
  42. package/esm2022/testing/lib/utils/mock-canvas.mjs +37 -0
  43. package/esm2022/testing/lib/utils/web-gl-rendering-context.mjs +752 -0
  44. package/fesm2022/angular-three-nativescript.mjs +134 -0
  45. package/fesm2022/angular-three-nativescript.mjs.map +1 -0
  46. package/fesm2022/angular-three-testing.mjs +966 -0
  47. package/fesm2022/angular-three-testing.mjs.map +1 -0
  48. package/fesm2022/angular-three.mjs +2271 -2306
  49. package/fesm2022/angular-three.mjs.map +1 -1
  50. package/index.d.ts +14 -14
  51. package/lib/canvas.d.ts +357 -96
  52. package/lib/directives/args.d.ts +14 -7
  53. package/lib/directives/selection.d.ts +17 -0
  54. package/lib/dom/events.d.ts +2 -3
  55. package/lib/events.d.ts +4 -80
  56. package/lib/html.d.ts +17 -0
  57. package/lib/instance.d.ts +3 -35
  58. package/lib/loader.d.ts +19 -7
  59. package/lib/loop.d.ts +11 -59
  60. package/lib/pipes/hexify.d.ts +20 -0
  61. package/lib/portal.d.ts +54 -48
  62. package/lib/renderer/catalogue.d.ts +7 -3
  63. package/lib/renderer/constants.d.ts +5 -5
  64. package/lib/renderer/index.d.ts +63 -4
  65. package/lib/renderer/state.d.ts +25 -0
  66. package/lib/renderer/utils.d.ts +10 -27
  67. package/lib/roots.d.ts +9 -7
  68. package/lib/store.d.ts +13 -141
  69. package/lib/three-types.d.ts +528 -147
  70. package/lib/types.d.ts +291 -0
  71. package/lib/utils/apply-props.d.ts +2 -3
  72. package/lib/utils/attach.d.ts +4 -6
  73. package/lib/{before-render.d.ts → utils/before-render.d.ts} +1 -1
  74. package/lib/utils/is.d.ts +13 -14
  75. package/lib/utils/make.d.ts +7 -13
  76. package/lib/utils/non-nullish.d.ts +4 -0
  77. package/lib/utils/object-events.d.ts +32 -0
  78. package/lib/utils/parameters.d.ts +20 -0
  79. package/lib/utils/resolve-ref.d.ts +2 -0
  80. package/lib/utils/signal-store.d.ts +13 -4
  81. package/lib/utils/update.d.ts +1 -1
  82. package/metadata.json +1 -1
  83. package/nativescript/README.md +5 -0
  84. package/nativescript/index.d.ts +1 -0
  85. package/nativescript/lib/canvas.d.ts +359 -0
  86. package/nativescript/package.json +3 -0
  87. package/package.json +65 -14
  88. package/plugin/generators.json +8 -30
  89. package/plugin/package.json +3 -3
  90. package/plugin/src/generators/add-soba/compat.js.map +1 -0
  91. package/plugin/src/generators/add-soba/generator.d.ts +3 -0
  92. package/plugin/src/generators/add-soba/generator.js +77 -0
  93. package/plugin/src/generators/add-soba/generator.js.map +1 -0
  94. package/plugin/src/generators/add-soba/schema.json +4 -0
  95. package/plugin/src/generators/init/compat.d.ts +1 -1
  96. package/plugin/src/generators/init/files/experience/experience.component.ts__tmpl__ +29 -0
  97. package/plugin/src/generators/init/generator.d.ts +5 -1
  98. package/plugin/src/generators/init/generator.js +131 -25
  99. package/plugin/src/generators/init/generator.js.map +1 -1
  100. package/plugin/src/generators/init/schema.json +9 -2
  101. package/plugin/src/generators/utils.d.ts +2 -0
  102. package/plugin/src/generators/utils.js +35 -0
  103. package/plugin/src/generators/utils.js.map +1 -0
  104. package/plugin/src/generators/version.d.ts +17 -0
  105. package/plugin/src/generators/version.js +21 -0
  106. package/plugin/src/generators/version.js.map +1 -0
  107. package/plugin/src/index.d.ts +0 -3
  108. package/plugin/src/index.js +0 -9
  109. package/plugin/src/index.js.map +1 -1
  110. package/testing/README.md +3 -0
  111. package/testing/index.d.ts +2 -0
  112. package/testing/lib/test-bed.d.ts +38 -0
  113. package/testing/lib/test-canvas.d.ts +11 -0
  114. package/testing/lib/utils/mock-canvas.d.ts +5 -0
  115. package/testing/lib/utils/web-gl-rendering-context.d.ts +16 -0
  116. package/testing/package.json +3 -0
  117. package/web-types.json +1 -1
  118. package/esm2022/lib/before-render.mjs +0 -13
  119. package/esm2022/lib/directives/common.mjs +0 -41
  120. package/esm2022/lib/directives/key.mjs +0 -29
  121. package/esm2022/lib/directives/parent.mjs +0 -35
  122. package/esm2022/lib/directives/repeat.mjs +0 -17
  123. package/esm2022/lib/ref.mjs +0 -48
  124. package/esm2022/lib/renderer/store.mjs +0 -405
  125. package/esm2022/lib/utils/assert-injection-context.mjs +0 -14
  126. package/esm2022/lib/utils/create-injection-token.mjs +0 -47
  127. package/esm2022/lib/utils/safe-detect-changes.mjs +0 -17
  128. package/lib/directives/common.d.ts +0 -15
  129. package/lib/directives/key.d.ts +0 -10
  130. package/lib/directives/parent.d.ts +0 -11
  131. package/lib/directives/repeat.d.ts +0 -7
  132. package/lib/ref.d.ts +0 -8
  133. package/lib/renderer/store.d.ts +0 -67
  134. package/lib/utils/assert-injection-context.d.ts +0 -2
  135. package/lib/utils/create-injection-token.d.ts +0 -27
  136. package/lib/utils/safe-detect-changes.d.ts +0 -2
  137. package/plugin/src/generators/init-cannon/compat.js.map +0 -1
  138. package/plugin/src/generators/init-cannon/generator.d.ts +0 -2
  139. package/plugin/src/generators/init-cannon/generator.js +0 -22
  140. package/plugin/src/generators/init-cannon/generator.js.map +0 -1
  141. package/plugin/src/generators/init-cannon/schema.json +0 -6
  142. package/plugin/src/generators/init-postprocessing/compat.d.ts +0 -2
  143. package/plugin/src/generators/init-postprocessing/compat.js +0 -6
  144. package/plugin/src/generators/init-postprocessing/compat.js.map +0 -1
  145. package/plugin/src/generators/init-postprocessing/generator.d.ts +0 -2
  146. package/plugin/src/generators/init-postprocessing/generator.js +0 -20
  147. package/plugin/src/generators/init-postprocessing/generator.js.map +0 -1
  148. package/plugin/src/generators/init-postprocessing/schema.json +0 -6
  149. package/plugin/src/generators/init-soba/compat.d.ts +0 -2
  150. package/plugin/src/generators/init-soba/compat.js +0 -6
  151. package/plugin/src/generators/init-soba/compat.js.map +0 -1
  152. package/plugin/src/generators/init-soba/generator.d.ts +0 -2
  153. package/plugin/src/generators/init-soba/generator.js +0 -24
  154. package/plugin/src/generators/init-soba/generator.js.map +0 -1
  155. package/plugin/src/generators/init-soba/schema.json +0 -6
  156. package/plugin/src/generators/versions.d.ts +0 -12
  157. package/plugin/src/generators/versions.js +0 -16
  158. package/plugin/src/generators/versions.js.map +0 -1
  159. /package/plugin/src/generators/{init-cannon → add-soba}/compat.d.ts +0 -0
  160. /package/plugin/src/generators/{init-cannon → add-soba}/compat.js +0 -0
@@ -1,51 +1,58 @@
1
- import { signal, untracked } from '@angular/core';
2
1
  import { signalStore } from './utils/signal-store';
3
2
  import { checkUpdate } from './utils/update';
4
3
  export function getLocalState(obj) {
5
4
  if (!obj)
6
- return {};
7
- return obj['__ngt__'] || {};
5
+ return undefined;
6
+ return obj['__ngt__'];
8
7
  }
9
8
  export function invalidateInstance(instance) {
10
- const state = getLocalState(instance).store?.get();
11
- if (state && state.internal.frames === 0)
12
- state.invalidate();
9
+ let store = getLocalState(instance)?.store;
10
+ if (store) {
11
+ while (store.snapshot.previousRoot) {
12
+ store = store.snapshot.previousRoot;
13
+ }
14
+ if (store.snapshot.internal.frames === 0) {
15
+ store.snapshot.invalidate();
16
+ }
17
+ }
13
18
  checkUpdate(instance);
14
19
  }
15
20
  export function prepare(object, localState) {
16
21
  const instance = object;
17
22
  if (localState?.primitive || !instance.__ngt__) {
18
- const { objects = signal([]), nonObjects = signal([]), ...rest } = localState || {};
23
+ const { instanceStore = signalStore({
24
+ parent: null,
25
+ objects: [],
26
+ nonObjects: [],
27
+ }), ...rest } = localState || {};
19
28
  instance.__ngt__ = {
20
29
  previousAttach: null,
21
30
  store: null,
22
- parent: signal(null),
23
31
  memoized: {},
24
32
  eventCount: 0,
25
33
  handlers: {},
26
- objects,
27
- nonObjects,
28
- nativeProps: signalStore(),
29
- add: (object, type) => {
30
- untracked(() => {
31
- const current = instance.__ngt__[type]();
32
- const foundIndex = current.indexOf((obj) => obj === object);
33
- if (foundIndex > -1) {
34
- // if we add an object with the same reference, then we switch it out
35
- current.splice(foundIndex, 1, object);
36
- instance.__ngt__[type].set(current);
37
- }
38
- else {
39
- instance.__ngt__[type].update((prev) => [...prev, object]);
40
- }
41
- notifyAncestors(instance.__ngt__.parent());
42
- });
34
+ instanceStore,
35
+ parent: instanceStore.select('parent'),
36
+ objects: instanceStore.select('objects'),
37
+ nonObjects: instanceStore.select('nonObjects'),
38
+ add(object, type) {
39
+ const current = instance.__ngt__.instanceStore.snapshot[type];
40
+ const foundIndex = current.indexOf((node) => object === node);
41
+ if (foundIndex > -1) {
42
+ current.splice(foundIndex, 1, object);
43
+ instance.__ngt__.instanceStore.update({ [type]: current });
44
+ }
45
+ else {
46
+ instance.__ngt__.instanceStore.update((prev) => ({ [type]: [...prev[type], object] }));
47
+ }
48
+ notifyAncestors(instance.__ngt__.instanceStore.snapshot.parent);
49
+ },
50
+ remove(object, type) {
51
+ instance.__ngt__.instanceStore.update((prev) => ({ [type]: prev[type].filter((node) => node !== object) }));
52
+ notifyAncestors(instance.__ngt__.instanceStore.snapshot.parent);
43
53
  },
44
- remove: (object, type) => {
45
- untracked(() => {
46
- instance.__ngt__[type].update((prev) => prev.filter((o) => o !== object));
47
- notifyAncestors(instance.__ngt__.parent());
48
- });
54
+ setParent(parent) {
55
+ instance.__ngt__.instanceStore.update({ parent });
49
56
  },
50
57
  ...rest,
51
58
  };
@@ -56,10 +63,10 @@ function notifyAncestors(instance) {
56
63
  if (!instance)
57
64
  return;
58
65
  const localState = getLocalState(instance);
59
- if (localState.objects)
60
- localState.objects.update((prev) => prev);
61
- if (localState.nonObjects)
62
- localState.nonObjects.update((prev) => prev);
63
- notifyAncestors(localState.parent());
66
+ if (!localState)
67
+ return;
68
+ const { parent, objects, nonObjects } = localState.instanceStore.snapshot;
69
+ localState.instanceStore.update({ objects: (objects || []).slice(), nonObjects: (nonObjects || []).slice() });
70
+ notifyAncestors(parent);
64
71
  }
65
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9pbnN0YW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQWdCLE1BQU0sRUFBRSxTQUFTLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBSXJGLE9BQU8sRUFBRSxXQUFXLEVBQXVCLE1BQU0sc0JBQXNCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBc0Q3QyxNQUFNLFVBQVUsYUFBYSxDQUM1QixHQUEwQjtJQUUxQixJQUFJLENBQUMsR0FBRztRQUFFLE9BQU8sRUFBc0MsQ0FBQztJQUN4RCxPQUFRLEdBQW9CLENBQUMsU0FBUyxDQUFDLElBQUssRUFBNEIsQ0FBQztBQUMxRSxDQUFDO0FBRUQsTUFBTSxVQUFVLGtCQUFrQixDQUEyQixRQUFtQjtJQUMvRSxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUMsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO0lBQ25ELElBQUksS0FBSyxJQUFJLEtBQUssQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxLQUFLLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDN0QsV0FBVyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ3ZCLENBQUM7QUFFRCxNQUFNLFVBQVUsT0FBTyxDQUN0QixNQUFpQixFQUNqQixVQUEyQztJQUUzQyxNQUFNLFFBQVEsR0FBRyxNQUErQyxDQUFDO0lBRWpFLElBQUksVUFBVSxFQUFFLFNBQVMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7UUFDL0MsTUFBTSxFQUNMLE9BQU8sR0FBRyxNQUFNLENBQW9CLEVBQUUsQ0FBQyxFQUN2QyxVQUFVLEdBQUcsTUFBTSxDQUFvQixFQUFFLENBQUMsRUFDMUMsR0FBRyxJQUFJLEVBQ1AsR0FBRyxVQUFVLElBQUksRUFBRSxDQUFDO1FBRXJCLFFBQVEsQ0FBQyxPQUFPLEdBQUc7WUFDbEIsY0FBYyxFQUFFLElBQUk7WUFDcEIsS0FBSyxFQUFFLElBQUk7WUFDWCxNQUFNLEVBQUUsTUFBTSxDQUFDLElBQUksQ0FBQztZQUNwQixRQUFRLEVBQUUsRUFBRTtZQUNaLFVBQVUsRUFBRSxDQUFDO1lBQ2IsUUFBUSxFQUFFLEVBQUU7WUFDWixPQUFPO1lBQ1AsVUFBVTtZQUNWLFdBQVcsRUFBRSxXQUFXLEVBQWdCO1lBQ3hDLEdBQUcsRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDckIsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDZCxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7b0JBQ3pDLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFvQixFQUFFLEVBQUUsQ0FBQyxHQUFHLEtBQUssTUFBTSxDQUFDLENBQUM7b0JBQzdFLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQyxFQUFFO3dCQUNwQixxRUFBcUU7d0JBQ3JFLE9BQU8sQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQzt3QkFDdEMsUUFBUSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7cUJBQ3BDO3lCQUFNO3dCQUNOLFFBQVEsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxDQUFDLEdBQUcsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUM7cUJBQzNEO29CQUNELGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxDQUFDO1lBQ0osQ0FBQztZQUNELE1BQU0sRUFBRSxDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRTtnQkFDeEIsU0FBUyxDQUFDLEdBQUcsRUFBRTtvQkFDZCxRQUFRLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLElBQUksRUFBRSxFQUFFLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQyxLQUFLLE1BQU0sQ0FBQyxDQUFDLENBQUM7b0JBQzFFLGVBQWUsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7Z0JBQzVDLENBQUMsQ0FBQyxDQUFDO1lBQ0osQ0FBQztZQUNELEdBQUcsSUFBSTtTQUNrQixDQUFDO0tBQzNCO0lBRUQsT0FBTyxRQUFRLENBQUM7QUFDakIsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLFFBQWdDO0lBQ3hELElBQUksQ0FBQyxRQUFRO1FBQUUsT0FBTztJQUN0QixNQUFNLFVBQVUsR0FBRyxhQUFhLENBQUMsUUFBUSxDQUFDLENBQUM7SUFDM0MsSUFBSSxVQUFVLENBQUMsT0FBTztRQUFFLFVBQVUsQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztJQUNsRSxJQUFJLFVBQVUsQ0FBQyxVQUFVO1FBQUUsVUFBVSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0lBQ3hFLGVBQWUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztBQUN0QyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZlbnRFbWl0dGVyLCBzaWduYWwsIHVudHJhY2tlZCwgdHlwZSBXcml0YWJsZVNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RFdmVudEhhbmRsZXJzIH0gZnJvbSAnLi9ldmVudHMnO1xuaW1wb3J0IHR5cGUgeyBOZ3RTdGF0ZSB9IGZyb20gJy4vc3RvcmUnO1xuaW1wb3J0IHR5cGUgeyBOZ3RBbnlSZWNvcmQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IHNpZ25hbFN0b3JlLCB0eXBlIE5ndFNpZ25hbFN0b3JlIH0gZnJvbSAnLi91dGlscy9zaWduYWwtc3RvcmUnO1xuaW1wb3J0IHsgY2hlY2tVcGRhdGUgfSBmcm9tICcuL3V0aWxzL3VwZGF0ZSc7XG5cbmV4cG9ydCB0eXBlIE5ndEF0dGFjaEZ1bmN0aW9uPFRDaGlsZCA9IGFueSwgVFBhcmVudCA9IGFueT4gPSAoXG5cdHBhcmVudDogVFBhcmVudCxcblx0Y2hpbGQ6IFRDaGlsZCxcblx0c3RvcmU6IE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPixcbikgPT4gdm9pZCB8ICgoKSA9PiB2b2lkKTtcblxuZXhwb3J0IHR5cGUgTmd0QWZ0ZXJBdHRhY2g8XG5cdFRQYXJlbnQgZXh0ZW5kcyBOZ3RJbnN0YW5jZU5vZGUgPSBOZ3RJbnN0YW5jZU5vZGUsXG5cdFRDaGlsZCBleHRlbmRzIE5ndEluc3RhbmNlTm9kZSA9IE5ndEluc3RhbmNlTm9kZSxcbj4gPSB7IHBhcmVudDogVFBhcmVudDsgbm9kZTogVENoaWxkIH07XG5cbmV4cG9ydCB0eXBlIE5ndEluc3RhbmNlTG9jYWxTdGF0ZSA9IHtcblx0LyoqIHRoZSBzdGF0ZSBnZXR0ZXIgb2YgdGhlIGNhbnZhcyB0aGF0IHRoZSBpbnN0YW5jZSBpcyBiZWluZyByZW5kZXJlZCB0byAqL1xuXHRzdG9yZTogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+O1xuXHQvLyBvYmplY3RzIGFuZCBwYXJlbnQgYXJlIHVzZWQgd2hlbiBjaGlsZHJlbiBhcmUgYWRkZWQgd2l0aCBgYXR0YWNoYCBpbnN0ZWFkIG9mIGJlaW5nIGFkZGVkIHRvIHRoZSBPYmplY3QzRCBzY2VuZSBncmFwaFxuXHRub25PYmplY3RzOiBXcml0YWJsZVNpZ25hbDxOZ3RJbnN0YW5jZU5vZGVbXT47XG5cdC8vIG9iamVjdHMgdGhhdCBhcmUgT2JqZWN0M0Rcblx0b2JqZWN0czogV3JpdGFibGVTaWduYWw8Tmd0SW5zdGFuY2VOb2RlW10+O1xuXHQvLyBzaG9ydGN1dCB0byBhZGQvcmVtb3ZlIG9iamVjdCB0byBsaXN0XG5cdGFkZDogKGluc3RhbmNlOiBOZ3RJbnN0YW5jZU5vZGUsIHR5cGU6ICdvYmplY3RzJyB8ICdub25PYmplY3RzJykgPT4gdm9pZDtcblx0cmVtb3ZlOiAoaW5zdGFuY2U6IE5ndEluc3RhbmNlTm9kZSwgdHlwZTogJ29iamVjdHMnIHwgJ25vbk9iamVjdHMnKSA9PiB2b2lkO1xuXHQvLyBuYXRpdmUgcHJvcHMgc2lnbmFsXG5cdG5hdGl2ZVByb3BzOiBOZ3RTaWduYWxTdG9yZTxOZ3RBbnlSZWNvcmQ+O1xuXHQvLyBwYXJlbnQgYmFzZWQgb24gYXR0YWNoIHRocmVlIGluc3RhbmNlXG5cdHBhcmVudDogV3JpdGFibGVTaWduYWw8Tmd0SW5zdGFuY2VOb2RlIHwgbnVsbD47XG5cdC8vIGlmIHRoaXMgVEhSRUUgaW5zdGFuY2UgaXMgYSBuZ3QtcHJpbWl0aXZlXG5cdHByaW1pdGl2ZT86IGJvb2xlYW47XG5cdC8vIGlmIHRoaXMgVEhSRUUgb2JqZWN0IGhhcyBhbnkgZXZlbnRzIGJvdW5kIHRvIGl0XG5cdGV2ZW50Q291bnQ6IG51bWJlcjtcblx0Ly8gbGlzdCBvZiBoYW5kbGVycyB0byBoYW5kbGUgdGhlIGV2ZW50c1xuXHRoYW5kbGVyczogUGFydGlhbDxOZ3RFdmVudEhhbmRsZXJzPjtcblx0Ly8gcHJldmlvdXMgYXJnc1xuXHRhcmdzPzogdW5rbm93bltdO1xuXHQvLyBhdHRhY2ggaW5mb3JtYXRpb24gc28gdGhhdCB3ZSBjYW4gZGV0YWNoIGFzIHdlbGwgYXMgcmVzZXRcblx0YXR0YWNoPzogc3RyaW5nW10gfCBOZ3RBdHRhY2hGdW5jdGlvbjtcblx0Ly8gcHJldmlvdXNseSBhdHRhY2ggaW5mb3JtYXRpb24gc28gd2UgY2FuIHJlc2V0IGFzIHdlbGwgYXMgY2xlYW4gdXBcblx0cHJldmlvdXNBdHRhY2g/OiB1bmtub3duIHwgKCgpID0+IHZvaWQpO1xuXHQvLyBpcyByYXcgdmFsdWVcblx0aXNSYXc/OiBib29sZWFuO1xuXHQvLyBwcmlvcml0eSBmb3IgYmVmb3JlIHJlbmRlclxuXHRwcmlvcml0eT86IG51bWJlcjtcblx0Ly8gZW1pdHRlciBhZnRlciBwcm9wcyB1cGRhdGVcblx0YWZ0ZXJVcGRhdGU/OiBFdmVudEVtaXR0ZXI8Tmd0SW5zdGFuY2VOb2RlPjtcblx0Ly8gZW1pdHRlciBhZnRlciBhdHRhY2hpbmcgdG8gcGFyZW50XG5cdGFmdGVyQXR0YWNoPzogRXZlbnRFbWl0dGVyPE5ndEFmdGVyQXR0YWNoPjtcbn07XG5cbmV4cG9ydCB0eXBlIE5ndEluc3RhbmNlTm9kZTxUTm9kZSA9IGFueT4gPSB7XG5cdF9fbmd0X186IE5ndEluc3RhbmNlTG9jYWxTdGF0ZTtcbn0gJiBOZ3RBbnlSZWNvcmQgJlxuXHRUTm9kZTtcblxuZXhwb3J0IGZ1bmN0aW9uIGdldExvY2FsU3RhdGU8VEluc3RhbmNlIGV4dGVuZHMgb2JqZWN0ID0gTmd0QW55UmVjb3JkPihcblx0b2JqOiBUSW5zdGFuY2UgfCB1bmRlZmluZWQsXG4pOiBOZ3RJbnN0YW5jZUxvY2FsU3RhdGUge1xuXHRpZiAoIW9iaikgcmV0dXJuIHt9IGFzIHVua25vd24gYXMgTmd0SW5zdGFuY2VMb2NhbFN0YXRlO1xuXHRyZXR1cm4gKG9iaiBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9fJ10gfHwgKHt9IGFzIE5ndEluc3RhbmNlTG9jYWxTdGF0ZSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZhbGlkYXRlSW5zdGFuY2U8VEluc3RhbmNlIGV4dGVuZHMgb2JqZWN0PihpbnN0YW5jZTogVEluc3RhbmNlKSB7XG5cdGNvbnN0IHN0YXRlID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSkuc3RvcmU/LmdldCgpO1xuXHRpZiAoc3RhdGUgJiYgc3RhdGUuaW50ZXJuYWwuZnJhbWVzID09PSAwKSBzdGF0ZS5pbnZhbGlkYXRlKCk7XG5cdGNoZWNrVXBkYXRlKGluc3RhbmNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmU8VEluc3RhbmNlIGV4dGVuZHMgb2JqZWN0ID0gTmd0QW55UmVjb3JkPihcblx0b2JqZWN0OiBUSW5zdGFuY2UsXG5cdGxvY2FsU3RhdGU/OiBQYXJ0aWFsPE5ndEluc3RhbmNlTG9jYWxTdGF0ZT4sXG4pOiBOZ3RJbnN0YW5jZU5vZGU8VEluc3RhbmNlPiB7XG5cdGNvbnN0IGluc3RhbmNlID0gb2JqZWN0IGFzIHVua25vd24gYXMgTmd0SW5zdGFuY2VOb2RlPFRJbnN0YW5jZT47XG5cblx0aWYgKGxvY2FsU3RhdGU/LnByaW1pdGl2ZSB8fCAhaW5zdGFuY2UuX19uZ3RfXykge1xuXHRcdGNvbnN0IHtcblx0XHRcdG9iamVjdHMgPSBzaWduYWw8Tmd0SW5zdGFuY2VOb2RlW10+KFtdKSxcblx0XHRcdG5vbk9iamVjdHMgPSBzaWduYWw8Tmd0SW5zdGFuY2VOb2RlW10+KFtdKSxcblx0XHRcdC4uLnJlc3Rcblx0XHR9ID0gbG9jYWxTdGF0ZSB8fCB7fTtcblxuXHRcdGluc3RhbmNlLl9fbmd0X18gPSB7XG5cdFx0XHRwcmV2aW91c0F0dGFjaDogbnVsbCxcblx0XHRcdHN0b3JlOiBudWxsLFxuXHRcdFx0cGFyZW50OiBzaWduYWwobnVsbCksXG5cdFx0XHRtZW1vaXplZDoge30sXG5cdFx0XHRldmVudENvdW50OiAwLFxuXHRcdFx0aGFuZGxlcnM6IHt9LFxuXHRcdFx0b2JqZWN0cyxcblx0XHRcdG5vbk9iamVjdHMsXG5cdFx0XHRuYXRpdmVQcm9wczogc2lnbmFsU3RvcmU8Tmd0QW55UmVjb3JkPigpLFxuXHRcdFx0YWRkOiAob2JqZWN0LCB0eXBlKSA9PiB7XG5cdFx0XHRcdHVudHJhY2tlZCgoKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudCA9IGluc3RhbmNlLl9fbmd0X19bdHlwZV0oKTtcblx0XHRcdFx0XHRjb25zdCBmb3VuZEluZGV4ID0gY3VycmVudC5pbmRleE9mKChvYmo6IE5ndEluc3RhbmNlTm9kZSkgPT4gb2JqID09PSBvYmplY3QpO1xuXHRcdFx0XHRcdGlmIChmb3VuZEluZGV4ID4gLTEpIHtcblx0XHRcdFx0XHRcdC8vIGlmIHdlIGFkZCBhbiBvYmplY3Qgd2l0aCB0aGUgc2FtZSByZWZlcmVuY2UsIHRoZW4gd2Ugc3dpdGNoIGl0IG91dFxuXHRcdFx0XHRcdFx0Y3VycmVudC5zcGxpY2UoZm91bmRJbmRleCwgMSwgb2JqZWN0KTtcblx0XHRcdFx0XHRcdGluc3RhbmNlLl9fbmd0X19bdHlwZV0uc2V0KGN1cnJlbnQpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRpbnN0YW5jZS5fX25ndF9fW3R5cGVdLnVwZGF0ZSgocHJldikgPT4gWy4uLnByZXYsIG9iamVjdF0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRub3RpZnlBbmNlc3RvcnMoaW5zdGFuY2UuX19uZ3RfXy5wYXJlbnQoKSk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0fSxcblx0XHRcdHJlbW92ZTogKG9iamVjdCwgdHlwZSkgPT4ge1xuXHRcdFx0XHR1bnRyYWNrZWQoKCkgPT4ge1xuXHRcdFx0XHRcdGluc3RhbmNlLl9fbmd0X19bdHlwZV0udXBkYXRlKChwcmV2KSA9PiBwcmV2LmZpbHRlcigobykgPT4gbyAhPT0gb2JqZWN0KSk7XG5cdFx0XHRcdFx0bm90aWZ5QW5jZXN0b3JzKGluc3RhbmNlLl9fbmd0X18ucGFyZW50KCkpO1xuXHRcdFx0XHR9KTtcblx0XHRcdH0sXG5cdFx0XHQuLi5yZXN0LFxuXHRcdH0gYXMgTmd0SW5zdGFuY2VMb2NhbFN0YXRlO1xuXHR9XG5cblx0cmV0dXJuIGluc3RhbmNlO1xufVxuXG5mdW5jdGlvbiBub3RpZnlBbmNlc3RvcnMoaW5zdGFuY2U6IE5ndEluc3RhbmNlTm9kZSB8IG51bGwpIHtcblx0aWYgKCFpbnN0YW5jZSkgcmV0dXJuO1xuXHRjb25zdCBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSk7XG5cdGlmIChsb2NhbFN0YXRlLm9iamVjdHMpIGxvY2FsU3RhdGUub2JqZWN0cy51cGRhdGUoKHByZXYpID0+IHByZXYpO1xuXHRpZiAobG9jYWxTdGF0ZS5ub25PYmplY3RzKSBsb2NhbFN0YXRlLm5vbk9iamVjdHMudXBkYXRlKChwcmV2KSA9PiBwcmV2KTtcblx0bm90aWZ5QW5jZXN0b3JzKGxvY2FsU3RhdGUucGFyZW50KCkpO1xufVxuIl19
72
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2NvcmUvc3JjL2xpYi9pbnN0YW5jZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFDQSxPQUFPLEVBQUUsV0FBVyxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbkQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBRTdDLE1BQU0sVUFBVSxhQUFhLENBQTJCLEdBQTBCO0lBQ2pGLElBQUksQ0FBQyxHQUFHO1FBQUUsT0FBTyxTQUFTLENBQUM7SUFDM0IsT0FBUSxHQUFvQixDQUFDLFNBQVMsQ0FBQyxDQUFDO0FBQ3pDLENBQUM7QUFFRCxNQUFNLFVBQVUsa0JBQWtCLENBQTJCLFFBQW1CO0lBQy9FLElBQUksS0FBSyxHQUFHLGFBQWEsQ0FBQyxRQUFRLENBQUMsRUFBRSxLQUFLLENBQUM7SUFFM0MsSUFBSSxLQUFLLEVBQUUsQ0FBQztRQUNYLE9BQU8sS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNwQyxLQUFLLEdBQUcsS0FBSyxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUM7UUFDckMsQ0FBQztRQUNELElBQUksS0FBSyxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsTUFBTSxLQUFLLENBQUMsRUFBRSxDQUFDO1lBQzFDLEtBQUssQ0FBQyxRQUFRLENBQUMsVUFBVSxFQUFFLENBQUM7UUFDN0IsQ0FBQztJQUNGLENBQUM7SUFFRCxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDdkIsQ0FBQztBQUVELE1BQU0sVUFBVSxPQUFPLENBQ3RCLE1BQWlCLEVBQ2pCLFVBQW1DO0lBRW5DLE1BQU0sUUFBUSxHQUFHLE1BQStDLENBQUM7SUFFakUsSUFBSSxVQUFVLEVBQUUsU0FBUyxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQ2hELE1BQU0sRUFDTCxhQUFhLEdBQUcsV0FBVyxDQUF3QjtZ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QUFDLEVBQUUsT0FBTyxFQUFFLENBQUMsT0FBTyxJQUFJLEVBQUUsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLFVBQVUsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDOUcsZUFBZSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3pCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ3RBbnlSZWNvcmQsIE5ndEluc3RhbmNlTm9kZSwgTmd0TG9jYWxJbnN0YW5jZVN0YXRlLCBOZ3RMb2NhbFN0YXRlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBzaWduYWxTdG9yZSB9IGZyb20gJy4vdXRpbHMvc2lnbmFsLXN0b3JlJztcbmltcG9ydCB7IGNoZWNrVXBkYXRlIH0gZnJvbSAnLi91dGlscy91cGRhdGUnO1xuXG5leHBvcnQgZnVuY3Rpb24gZ2V0TG9jYWxTdGF0ZTxUSW5zdGFuY2UgZXh0ZW5kcyBvYmplY3Q+KG9iajogVEluc3RhbmNlIHwgdW5kZWZpbmVkKTogTmd0TG9jYWxTdGF0ZSB8IHVuZGVmaW5lZCB7XG5cdGlmICghb2JqKSByZXR1cm4gdW5kZWZpbmVkO1xuXHRyZXR1cm4gKG9iaiBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9fJ107XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbnZhbGlkYXRlSW5zdGFuY2U8VEluc3RhbmNlIGV4dGVuZHMgb2JqZWN0PihpbnN0YW5jZTogVEluc3RhbmNlKSB7XG5cdGxldCBzdG9yZSA9IGdldExvY2FsU3RhdGUoaW5zdGFuY2UpPy5zdG9yZTtcblxuXHRpZiAoc3RvcmUpIHtcblx0XHR3aGlsZSAoc3RvcmUuc25hcHNob3QucHJldmlvdXNSb290KSB7XG5cdFx0XHRzdG9yZSA9IHN0b3JlLnNuYXBzaG90LnByZXZpb3VzUm9vdDtcblx0XHR9XG5cdFx0aWYgKHN0b3JlLnNuYXBzaG90LmludGVybmFsLmZyYW1lcyA9PT0gMCkge1xuXHRcdFx0c3RvcmUuc25hcHNob3QuaW52YWxpZGF0ZSgpO1xuXHRcdH1cblx0fVxuXG5cdGNoZWNrVXBkYXRlKGluc3RhbmNlKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByZXBhcmU8VEluc3RhbmNlIGV4dGVuZHMgb2JqZWN0ID0gTmd0QW55UmVjb3JkPihcblx0b2JqZWN0OiBUSW5zdGFuY2UsXG5cdGxvY2FsU3RhdGU/OiBQYXJ0aWFsPE5ndExvY2FsU3RhdGU+LFxuKSB7XG5cdGNvbnN0IGluc3RhbmNlID0gb2JqZWN0IGFzIHVua25vd24gYXMgTmd0SW5zdGFuY2VOb2RlPFRJbnN0YW5jZT47XG5cblx0aWYgKGxvY2FsU3RhdGU/LnByaW1pdGl2ZSB8fCAhaW5zdGFuY2UuX19uZ3RfXykge1xuXHRcdGNvbnN0IHtcblx0XHRcdGluc3RhbmNlU3RvcmUgPSBzaWduYWxTdG9yZTxOZ3RMb2NhbEluc3RhbmNlU3RhdGU+KHtcblx0XHRcdFx0cGFyZW50OiBudWxsLFxuXHRcdFx0XHRvYmplY3RzOiBbXSxcblx0XHRcdFx0bm9uT2JqZWN0czogW10sXG5cdFx0XHR9KSxcblx0XHRcdC4uLnJlc3Rcblx0XHR9ID0gbG9jYWxTdGF0ZSB8fCB7fTtcblxuXHRcdGluc3RhbmNlLl9fbmd0X18gPSB7XG5cdFx0XHRwcmV2aW91c0F0dGFjaDogbnVsbCxcblx0XHRcdHN0b3JlOiBudWxsLFxuXHRcdFx0bWVtb2l6ZWQ6IHt9LFxuXHRcdFx0ZXZlbnRDb3VudDogMCxcblx0XHRcdGhhbmRsZXJzOiB7fSxcblx0XHRcdGluc3RhbmNlU3RvcmUsXG5cdFx0XHRwYXJlbnQ6IGluc3RhbmNlU3RvcmUuc2VsZWN0KCdwYXJlbnQnKSxcblx0XHRcdG9iamVjdHM6IGluc3RhbmNlU3RvcmUuc2VsZWN0KCdvYmplY3RzJyksXG5cdFx0XHRub25PYmplY3RzOiBpbnN0YW5jZVN0b3JlLnNlbGVjdCgnbm9uT2JqZWN0cycpLFxuXHRcdFx0YWRkKG9iamVjdCwgdHlwZSkge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50ID0gaW5zdGFuY2UuX19uZ3RfXy5pbnN0YW5jZVN0b3JlLnNuYXBzaG90W3R5cGVdO1xuXHRcdFx0XHRjb25zdCBmb3VuZEluZGV4ID0gY3VycmVudC5pbmRleE9mKChub2RlOiBOZ3RJbnN0YW5jZU5vZGUpID0+IG9iamVjdCA9PT0gbm9kZSk7XG5cdFx0XHRcdGlmIChmb3VuZEluZGV4ID4gLTEpIHtcblx0XHRcdFx0XHRjdXJyZW50LnNwbGljZShmb3VuZEluZGV4LCAxLCBvYmplY3QpO1xuXHRcdFx0XHRcdGluc3RhbmNlLl9fbmd0X18uaW5zdGFuY2VTdG9yZS51cGRhdGUoeyBbdHlwZV06IGN1cnJlbnQgfSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0aW5zdGFuY2UuX19uZ3RfXy5pbnN0YW5jZVN0b3JlLnVwZGF0ZSgocHJldikgPT4gKHsgW3R5cGVdOiBbLi4ucHJldlt0eXBlXSwgb2JqZWN0XSB9KSk7XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRub3RpZnlBbmNlc3RvcnMoaW5zdGFuY2UuX19uZ3RfXy5pbnN0YW5jZVN0b3JlLnNuYXBzaG90LnBhcmVudCk7XG5cdFx0XHR9LFxuXHRcdFx0cmVtb3ZlKG9iamVjdCwgdHlwZSkge1xuXHRcdFx0XHRpbnN0YW5jZS5fX25ndF9fLmluc3RhbmNlU3RvcmUudXBkYXRlKChwcmV2KSA9PiAoeyBbdHlwZV06IHByZXZbdHlwZV0uZmlsdGVyKChub2RlKSA9PiBub2RlICE9PSBvYmplY3QpIH0pKTtcblx0XHRcdFx0bm90aWZ5QW5jZXN0b3JzKGluc3RhbmNlLl9fbmd0X18uaW5zdGFuY2VTdG9yZS5zbmFwc2hvdC5wYXJlbnQpO1xuXHRcdFx0fSxcblx0XHRcdHNldFBhcmVudChwYXJlbnQpIHtcblx0XHRcdFx0aW5zdGFuY2UuX19uZ3RfXy5pbnN0YW5jZVN0b3JlLnVwZGF0ZSh7IHBhcmVudCB9KTtcblx0XHRcdH0sXG5cdFx0XHQuLi5yZXN0LFxuXHRcdH0gYXMgTmd0TG9jYWxTdGF0ZTtcblx0fVxuXG5cdHJldHVybiBpbnN0YW5jZTtcbn1cblxuZnVuY3Rpb24gbm90aWZ5QW5jZXN0b3JzKGluc3RhbmNlOiBOZ3RJbnN0YW5jZU5vZGUgfCBudWxsKSB7XG5cdGlmICghaW5zdGFuY2UpIHJldHVybjtcblx0Y29uc3QgbG9jYWxTdGF0ZSA9IGdldExvY2FsU3RhdGUoaW5zdGFuY2UpO1xuXHRpZiAoIWxvY2FsU3RhdGUpIHJldHVybjtcblx0Y29uc3QgeyBwYXJlbnQsIG9iamVjdHMsIG5vbk9iamVjdHMgfSA9IGxvY2FsU3RhdGUuaW5zdGFuY2VTdG9yZS5zbmFwc2hvdDtcblx0bG9jYWxTdGF0ZS5pbnN0YW5jZVN0b3JlLnVwZGF0ZSh7IG9iamVjdHM6IChvYmplY3RzIHx8IFtdKS5zbGljZSgpLCBub25PYmplY3RzOiAobm9uT2JqZWN0cyB8fCBbXSkuc2xpY2UoKSB9KTtcblx0bm90aWZ5QW5jZXN0b3JzKHBhcmVudCk7XG59XG4iXX0=
@@ -1,66 +1,102 @@
1
- import { ChangeDetectorRef, effect, inject, runInInjectionContext, signal } from '@angular/core';
2
- import { assertInjectionContext } from './utils/assert-injection-context';
1
+ import { effect, signal, untracked } from '@angular/core';
2
+ import { assertInjector } from 'ngxtension/assert-injector';
3
3
  import { makeObjectGraph } from './utils/make';
4
- import { safeDetectChanges } from './utils/safe-detect-changes';
5
4
  const cached = new Map();
5
+ const memoizedLoaders = new WeakMap();
6
6
  function normalizeInputs(input) {
7
- if (Array.isArray(input))
8
- return input;
9
- if (typeof input === 'string')
10
- return [input];
11
- return Object.values(input);
7
+ let urls = [];
8
+ if (Array.isArray(input)) {
9
+ urls = input;
10
+ }
11
+ else if (typeof input === 'string') {
12
+ urls = [input];
13
+ }
14
+ else {
15
+ urls = Object.values(input);
16
+ }
17
+ return urls.map((url) => {
18
+ return url.includes('undefined') || url.includes('null') || !url ? '' : url;
19
+ });
12
20
  }
13
- function load(loaderConstructorFactory, inputs, { extensions, onProgress, } = {}) {
21
+ function load(loaderConstructorFactory, inputs, { extensions, onLoad, onProgress, } = {}) {
14
22
  return () => {
15
23
  const urls = normalizeInputs(inputs());
16
- const loader = new (loaderConstructorFactory(urls))();
24
+ let loader = memoizedLoaders.get(loaderConstructorFactory(urls));
25
+ if (!loader) {
26
+ loader = new (loaderConstructorFactory(urls))();
27
+ memoizedLoaders.set(loaderConstructorFactory(urls), loader);
28
+ }
17
29
  if (extensions)
18
30
  extensions(loader);
19
31
  // TODO: reevaluate this
20
32
  return urls.map((url) => {
33
+ if (url === '') {
34
+ return null;
35
+ }
21
36
  if (!cached.has(url)) {
22
37
  cached.set(url, new Promise((resolve, reject) => {
23
38
  loader.load(url, (data) => {
24
- if ('scene' in data)
39
+ if ('scene' in data) {
25
40
  Object.assign(data, makeObjectGraph(data['scene']));
41
+ }
42
+ if (onLoad) {
43
+ onLoad(data);
44
+ }
26
45
  resolve(data);
27
- }, onProgress, (error) => reject(new Error(`[NGT] Could not load ${url}: ${error}`)));
46
+ }, onProgress, (error) => reject(new Error(`[NGT] Could not load ${url}: ${error?.message}`)));
28
47
  }));
29
48
  }
30
49
  return cached.get(url);
31
50
  });
32
51
  };
33
52
  }
34
- export function injectNgtLoader(loaderConstructorFactory, inputs, { extensions, onProgress, injector, } = {}) {
35
- injector = assertInjectionContext(injectNgtLoader, injector);
36
- const response = signal(null);
37
- return runInInjectionContext(injector, () => {
38
- const cdr = inject(ChangeDetectorRef);
39
- const effector = load(loaderConstructorFactory, inputs, { extensions, onProgress });
53
+ function _injectLoader(loaderConstructorFactory, inputs, { extensions, onProgress, onLoad, injector, } = {}) {
54
+ return assertInjector(_injectLoader, injector, () => {
55
+ const response = signal(null);
56
+ const effector = load(loaderConstructorFactory, inputs, {
57
+ extensions,
58
+ onProgress,
59
+ onLoad: onLoad,
60
+ });
40
61
  effect(() => {
41
62
  const originalUrls = inputs();
42
- Promise.all(effector()).then((results) => {
43
- response.update(() => {
44
- if (Array.isArray(originalUrls))
45
- return results;
46
- if (typeof originalUrls === 'string')
47
- return results[0];
48
- const keys = Object.keys(originalUrls);
49
- return keys.reduce((result, key) => {
50
- result[key] = results[keys.indexOf(key)];
51
- return result;
52
- }, {});
63
+ const cachedEffect = effector();
64
+ if (cachedEffect === null && untracked(response) !== null) {
65
+ response.set(null);
66
+ }
67
+ else if (cachedEffect !== null) {
68
+ Promise.all(cachedEffect).then((results) => {
69
+ response.update(() => {
70
+ if (Array.isArray(originalUrls))
71
+ return results;
72
+ if (typeof originalUrls === 'string')
73
+ return results[0];
74
+ const keys = Object.keys(originalUrls);
75
+ return keys.reduce((result, key) => {
76
+ result[key] = results[keys.indexOf(key)];
77
+ return result;
78
+ }, {});
79
+ });
53
80
  });
54
- safeDetectChanges(cdr);
55
- });
56
- });
81
+ }
82
+ }, { allowSignalWrites: true });
57
83
  return response.asReadonly();
58
84
  });
59
85
  }
60
- injectNgtLoader['preload'] = (loaderConstructorFactory, inputs, extensions) => {
61
- Promise.all(load(loaderConstructorFactory, inputs, { extensions })());
86
+ _injectLoader.preload = (loaderConstructorFactory, inputs, extensions, onLoad) => {
87
+ const effects = load(loaderConstructorFactory, inputs, { extensions, onLoad })();
88
+ if (effects) {
89
+ void Promise.all(effects);
90
+ }
62
91
  };
63
- injectNgtLoader['destroy'] = () => {
92
+ _injectLoader.destroy = () => {
64
93
  cached.clear();
65
94
  };
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBWSxNQUFNLEVBQUUsTUFBTSxFQUFFLHFCQUFxQixFQUFFLE1BQU0sRUFBZSxNQUFNLGVBQWUsQ0FBQztBQUd4SCxPQUFPLEVBQUUsc0JBQXNCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFxQixNQUFNLGNBQWMsQ0FBQztBQUNsRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSw2QkFBNkIsQ0FBQztBQTBCaEUsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUV6QixTQUFTLGVBQWUsQ0FBQyxLQUFpRDtJQUN6RSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdkMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRUQsU0FBUyxJQUFJLENBS1osd0JBQWtFLEVBQ2xFLE1BQWtCLEVBQ2xCLEVBQ0MsVUFBVSxFQUNWLFVBQVUsTUFJUCxFQUFFO0lBRU4sT0FBTyxHQUF3QixFQUFFO1FBQ2hDLE1BQU0sSUFBSSxHQUFHLGVBQWUsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxFQUFFLENBQUM7UUFDdEQsSUFBSSxVQUFVO1lBQUUsVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1FBQ25DLHdCQUF3QjtRQUN4QixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FB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LHdCQUF3QixFQUFFLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZFLENBQUMsQ0FBQztBQUVGLGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLEVBQUU7SUFDakMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBJbmplY3RvciwgZWZmZWN0LCBpbmplY3QsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCwgc2lnbmFsLCB0eXBlIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBHTFRGIH0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2xvYWRlcnMvR0xURkxvYWRlcic7XG5pbXBvcnQgdHlwZSB7IE5ndEFueVJlY29yZCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0aW9uQ29udGV4dCB9IGZyb20gJy4vdXRpbHMvYXNzZXJ0LWluamVjdGlvbi1jb250ZXh0JztcbmltcG9ydCB7IG1ha2VPYmplY3RHcmFwaCwgdHlwZSBOZ3RPYmplY3RNYXAgfSBmcm9tICcuL3V0aWxzL21ha2UnO1xuaW1wb3J0IHsgc2FmZURldGVjdENoYW5nZXMgfSBmcm9tICcuL3V0aWxzL3NhZmUtZGV0ZWN0LWNoYW5nZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndExvYWRlcjxUPiBleHRlbmRzIFRIUkVFLkxvYWRlciB7XG5cdGxvYWQoXG5cdFx0dXJsOiBzdHJpbmcsXG5cdFx0b25Mb2FkPzogKHJlc3VsdDogVCkgPT4gdm9pZCxcblx0XHRvblByb2dyZXNzPzogKGV2ZW50OiBQcm9ncmVzc0V2ZW50KSA9PiB2b2lkLFxuXHRcdG9uRXJyb3I/OiAoZXZlbnQ6IEVycm9yRXZlbnQpID0+IHZvaWQsXG5cdCk6IHVua25vd247XG5cdGxvYWRBc3luYyh1cmw6IHN0cmluZywgb25Qcm9ncmVzcz86IChldmVudDogUHJvZ3Jlc3NFdmVudCkgPT4gdm9pZCk6IFByb21pc2U8VD47XG59XG5cbmV4cG9ydCB0eXBlIE5ndExvYWRlclByb3RvPFQ+ID0gbmV3ICguLi5hcmdzOiBhbnkpID0+IE5ndExvYWRlcjxUIGV4dGVuZHMgdW5rbm93biA/IGFueSA6IFQ+O1xuZXhwb3J0IHR5cGUgTmd0TG9hZGVyUmV0dXJuVHlwZTxULCBMIGV4dGVuZHMgTmd0TG9hZGVyUHJvdG88VD4+ID0gVCBleHRlbmRzIHVua25vd25cblx0PyBBd2FpdGVkPFJldHVyblR5cGU8SW5zdGFuY2VUeXBlPEw+Wydsb2FkQXN5bmMnXT4+XG5cdDogVDtcblxuZXhwb3J0IHR5cGUgTmd0TG9hZGVyRXh0ZW5zaW9uczxUIGV4dGVuZHMgeyBwcm90b3R5cGU6IE5ndExvYWRlclByb3RvPGFueT4gfT4gPSAobG9hZGVyOiBUWydwcm90b3R5cGUnXSkgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIE5ndENvbmRpdGlvbmFsVHlwZTxDaGlsZCwgUGFyZW50LCBUcnV0aHksIEZhbHN5PiA9IENoaWxkIGV4dGVuZHMgUGFyZW50ID8gVHJ1dGh5IDogRmFsc3k7XG5leHBvcnQgdHlwZSBOZ3RCcmFuY2hpbmdSZXR1cm48VCwgUGFyZW50LCBDb2VyY2VkPiA9IE5ndENvbmRpdGlvbmFsVHlwZTxULCBQYXJlbnQsIENvZXJjZWQsIFQ+O1xuXG5leHBvcnQgdHlwZSBOZ3RMb2FkZXJSZXN1bHRzPFxuXHRUSW5wdXQgZXh0ZW5kcyBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG5cdFRSZXR1cm4sXG4+ID0gVElucHV0IGV4dGVuZHMgc3RyaW5nW10gPyBUUmV0dXJuW10gOiBUSW5wdXQgZXh0ZW5kcyBvYmplY3QgPyB7IFtrZXkgaW4ga2V5b2YgVElucHV0XTogVFJldHVybiB9IDogVFJldHVybjtcblxuY29uc3QgY2FjaGVkID0gbmV3IE1hcCgpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVJbnB1dHMoaW5wdXQ6IHN0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuXHRpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHJldHVybiBpbnB1dDtcblx0aWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHJldHVybiBbaW5wdXRdO1xuXHRyZXR1cm4gT2JqZWN0LnZhbHVlcyhpbnB1dCk7XG59XG5cbmZ1bmN0aW9uIGxvYWQ8XG5cdFREYXRhLFxuXHRUVXJsIGV4dGVuZHMgc3RyaW5nIHwgc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuXHRUTG9hZGVyQ29uc3RydWN0b3IgZXh0ZW5kcyBOZ3RMb2FkZXJQcm90bzxURGF0YT4sXG4+KFxuXHRsb2FkZXJDb25zdHJ1Y3RvckZhY3Rvcnk6IChpbnB1dHM6IHN0cmluZ1tdKSA9PiBUTG9hZGVyQ29uc3RydWN0b3IsXG5cdGlucHV0czogKCkgPT4gVFVybCxcblx0e1xuXHRcdGV4dGVuc2lvbnMsXG5cdFx0b25Qcm9ncmVzcyxcblx0fToge1xuXHRcdGV4dGVuc2lvbnM/OiBOZ3RMb2FkZXJFeHRlbnNpb25zPFRMb2FkZXJDb25zdHJ1Y3Rvcj47XG5cdFx0b25Qcm9ncmVzcz86IChldmVudDogUHJvZ3Jlc3NFdmVudCkgPT4gdm9pZDtcblx0fSA9IHt9LFxuKSB7XG5cdHJldHVybiAoKTogQXJyYXk8UHJvbWlzZTxhbnk+PiA9PiB7XG5cdFx0Y29uc3QgdXJscyA9IG5vcm1hbGl6ZUlucHV0cyhpbnB1dHMoKSk7XG5cdFx0Y29uc3QgbG9hZGVyID0gbmV3IChsb2FkZXJDb25zdHJ1Y3RvckZhY3RvcnkodXJscykpKCk7XG5cdFx0aWYgKGV4dGVuc2lvbnMpIGV4dGVuc2lvbnMobG9hZGVyKTtcblx0XHQvLyBUT0RPOiByZWV2YWx1YXRlIHRoaXNcblx0XHRyZXR1cm4gdXJscy5tYXAoKHVybCkgPT4ge1xuXHRcdFx0aWYgKCFjYWNoZWQuaGFzKHVybCkpIHtcblx0XHRcdFx0Y2FjaGVkLnNldChcblx0XHRcdFx0XHR1cmwsXG5cdFx0XHRcdFx0bmV3IFByb21pc2U8VERhdGE+KChyZXNvbHZlLCByZWplY3QpID0+IHtcblx0XHRcdFx0XHRcdGxvYWRlci5sb2FkKFxuXHRcdFx0XHRcdFx0XHR1cmwsXG5cdFx0XHRcdFx0XHRcdChkYXRhKSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0aWYgKCdzY2VuZScgaW4gKGRhdGEgYXMgTmd0QW55UmVjb3JkKSlcblx0XHRcdFx0XHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oXG5cdFx0XHRcdFx0XHRcdFx0XHRcdGRhdGEgYXMgTmd0QW55UmVjb3JkLFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRtYWtlT2JqZWN0R3JhcGgoKGRhdGEgYXMgTmd0QW55UmVjb3JkKVsnc2NlbmUnXSksXG5cdFx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoZGF0YSk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdG9uUHJvZ3Jlc3MsXG5cdFx0XHRcdFx0XHRcdChlcnJvcikgPT4gcmVqZWN0KG5ldyBFcnJvcihgW05HVF0gQ291bGQgbm90IGxvYWQgJHt1cmx9OiAke2Vycm9yfWApKSxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY2FjaGVkLmdldCh1cmwpITtcblx0XHR9KTtcblx0fTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdE5ndExvYWRlcjxcblx0VERhdGEsXG5cdFRVcmwgZXh0ZW5kcyBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG5cdFRMb2FkZXJDb25zdHJ1Y3RvciBleHRlbmRzIE5ndExvYWRlclByb3RvPFREYXRhPixcblx0VFJldHVybiA9IE5ndExvYWRlclJldHVyblR5cGU8VERhdGEsIFRMb2FkZXJDb25zdHJ1Y3Rvcj4sXG4+KFxuXHRsb2FkZXJDb25zdHJ1Y3RvckZhY3Rvcnk6IChpbnB1dHM6IHN0cmluZ1tdKSA9PiBUTG9hZGVyQ29uc3RydWN0b3IsXG5cdGlucHV0czogKCkgPT4gVFVybCxcblx0e1xuXHRcdGV4dGVuc2lvbnMsXG5cdFx0b25Qcm9ncmVzcyxcblx0XHRpbmplY3Rvcixcblx0fToge1xuXHRcdGV4dGVuc2lvbnM/OiBOZ3RMb2FkZXJFeHRlbnNpb25zPFRMb2FkZXJDb25zdHJ1Y3Rvcj47XG5cdFx0b25Qcm9ncmVzcz86IChldmVudDogUHJvZ3Jlc3NFdmVudCkgPT4gdm9pZDtcblx0XHRpbmplY3Rvcj86IEluamVjdG9yO1xuXHR9ID0ge30sXG4pOiBTaWduYWw8Tmd0TG9hZGVyUmVzdWx0czxUVXJsLCBOZ3RCcmFuY2hpbmdSZXR1cm48VFJldHVybiwgR0xURiwgR0xURiAmIE5ndE9iamVjdE1hcD4+IHwgbnVsbD4ge1xuXHRpbmplY3RvciA9IGFzc2VydEluamVjdGlvbkNvbnRleHQoaW5qZWN0Tmd0TG9hZGVyLCBpbmplY3Rvcik7XG5cdGNvbnN0IHJlc3BvbnNlID0gc2lnbmFsPE5ndExvYWRlclJlc3VsdHM8VFVybCwgTmd0QnJhbmNoaW5nUmV0dXJuPFRSZXR1cm4sIEdMVEYsIEdMVEYgJiBOZ3RPYmplY3RNYXA+PiB8IG51bGw+KFxuXHRcdG51bGwsXG5cdCk7XG5cdHJldHVybiBydW5JbkluamVjdGlvbkNvbnRleHQoaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCBjZHIgPSBpbmplY3QoQ2hhbmdlRGV0ZWN0b3JSZWYpO1xuXHRcdGNvbnN0IGVmZmVjdG9yID0gbG9hZChsb2FkZXJDb25zdHJ1Y3RvckZhY3RvcnksIGlucHV0cywgeyBleHRlbnNpb25zLCBvblByb2dyZXNzIH0pO1xuXG5cdFx0ZWZmZWN0KCgpID0+IHtcblx0XHRcdGNvbnN0IG9yaWdpbmFsVXJscyA9IGlucHV0cygpO1xuXHRcdFx0UHJvbWlzZS5hbGwoZWZmZWN0b3IoKSkudGhlbigocmVzdWx0cykgPT4ge1xuXHRcdFx0XHRyZXNwb25zZS51cGRhdGUoKCkgPT4ge1xuXHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KG9yaWdpbmFsVXJscykpIHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdGlmICh0eXBlb2Ygb3JpZ2luYWxVcmxzID09PSAnc3RyaW5nJykgcmV0dXJuIHJlc3VsdHNbMF07XG5cdFx0XHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKG9yaWdpbmFsVXJscyk7XG5cdFx0XHRcdFx0cmV0dXJuIGtleXMucmVkdWNlKFxuXHRcdFx0XHRcdFx0KHJlc3VsdCwga2V5KSA9PiB7XG5cdFx0XHRcdFx0XHRcdChyZXN1bHQgYXMgTmd0QW55UmVjb3JkKVtrZXldID0gcmVzdWx0c1trZXlzLmluZGV4T2Yoa2V5KV07XG5cdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e30gYXMgeyBba2V5IGluIGtleW9mIFRVcmxdOiBOZ3RCcmFuY2hpbmdSZXR1cm48VFJldHVybiwgR0xURiwgR0xURiAmIE5ndE9iamVjdE1hcD4gfSxcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0c2FmZURldGVjdENoYW5nZXMoY2RyKTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIHJlc3BvbnNlLmFzUmVhZG9ubHkoKTtcblx0fSk7XG59XG5cbmluamVjdE5ndExvYWRlclsncHJlbG9hZCddID0gPFxuXHRURGF0YSxcblx0VFVybCBleHRlbmRzIHN0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPixcblx0VExvYWRlckNvbnN0cnVjdG9yIGV4dGVuZHMgTmd0TG9hZGVyUHJvdG88VERhdGE+LFxuPihcblx0bG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5OiAoaW5wdXRzOiBzdHJpbmdbXSkgPT4gVExvYWRlckNvbnN0cnVjdG9yLFxuXHRpbnB1dHM6ICgpID0+IFRVcmwsXG5cdGV4dGVuc2lvbnM/OiBOZ3RMb2FkZXJFeHRlbnNpb25zPFRMb2FkZXJDb25zdHJ1Y3Rvcj4sXG4pID0+IHtcblx0UHJvbWlzZS5hbGwobG9hZChsb2FkZXJDb25zdHJ1Y3RvckZhY3RvcnksIGlucHV0cywgeyBleHRlbnNpb25zIH0pKCkpO1xufTtcblxuaW5qZWN0Tmd0TG9hZGVyWydkZXN0cm95J10gPSAoKSA9PiB7XG5cdGNhY2hlZC5jbGVhcigpO1xufTtcbiJdfQ==
95
+ _injectLoader.clear = (urls) => {
96
+ const urlToClear = Array.isArray(urls) ? urls : [urls];
97
+ urlToClear.forEach((url) => {
98
+ cached.delete(url);
99
+ });
100
+ };
101
+ export const injectLoader = _injectLoader;
102
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsTUFBTSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBRzVELE9BQU8sRUFBZ0IsZUFBZSxFQUFFLE1BQU0sY0FBYyxDQUFDO0FBNEI3RCxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3pCLE1BQU0sZUFBZSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFFdEMsU0FBUyxlQUFlLENBQUMsS0FBaUQ7SUFDekUsSUFBSSxJQUFJLEdBQWEsRUFBRSxDQUFDO0lBQ3hCLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMsRUFBRSxDQUFDO1FBQzFCLElBQUksR0FBRyxLQUFLLENBQUM7SUFDZCxDQUFDO1NBQU0sSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRLEVBQUUsQ0FBQztRQUN0QyxJQUFJLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUNoQixDQUFDO1NBQU0sQ0FBQztRQUNQLElBQUksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzdCLENBQUM7SUFFRCxPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRTtRQUN2QixPQUFPLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUM7SUFDN0UsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDO0FBRUQsU0FBUyxJQUFJLENBTVosd0JBQWtFLEVBQ2xFLE1BQWtCLEVBQ2xCLEVBQ0MsVUFBVSxFQUNWLE1BQU0sRUFDTixVQUFVLE1BS1AsRUFBRTtJQUVOLE9BQU8sR0FBK0IsRUFBRTtRQUN2QyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUV2QyxJQUFJLE1BQU0sR0FBa0IsZUFBZSxDQUFDLEdBQUcsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBQ2hGLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUNiLE1BQU0sR0FBRyxJQUFJLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLENBQUMsRUFBRSxDQUFDO1lBQ2hELGVBQWUsQ0FBQyxHQUFHLENBQUMsd0JBQXdCLENBQUMsSUFBSSxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUM7UUFDN0QsQ0FBQztRQUVELElBQUksVUFBVTtZQUFFLFVBQVUsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNuQyx3QkFBd0I7UUFDeEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDdkIsSUFBSSxHQUFHLEtBQUssRUFBRSxFQUFFLENBQUM7Z0JBQ2hCLE9BQU8sSUFBSSxDQUFDO1lBQ2IsQ0FBQztZQUVELElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7Z0JBQ3RCLE1BQU0sQ0FBQyxHQUFHLENBQ1QsR0FBRyxFQUNILElBQUksT0FBTyxDQUFRLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxFQUFFO29CQUN0QyxNQUFNLENBQUMsSUFBSSxDQUNWLEdBQUcsRUFDSCxDQUFDLElBQUksRUFBRSxFQUFFO3dCQUNSLElBQUksT0FBTyxJQUFLLElBQXFCLEVBQUUsQ0FBQzs0QkFDdkMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxJQUFvQixFQUFFLGVBQWUsQ0FBRSxJQUFxQixDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQzt3QkFDdkYsQ0FBQzt3QkFFRCxJQUFJLE1BQU0sRUFBRSxDQUFDOzRCQUNaLE1BQU0sQ0FBQyxJQUEwQixDQUFDLENBQUM7d0JBQ3BDLENBQUM7d0JBRUQsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO29CQUNmLENBQUMsRUFDRCxVQUFVLEVBQ1YsQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxJQUFJLEtBQUssQ0FBQyx3QkFBd0IsR0FBRyxLQUFNLEtBQW9CLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQyxDQUM5RixDQUFDO2dCQUNILENBQUMsQ0FBQyxDQUNGLENBQUM7WUFDSCxDQUFDO1lBQ0QsT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBRSxDQUFDO1FBQ3pCLENBQUMsQ0FBQyxDQUFDO0lBQ0osQ0FBQyxDQUFDO0FBQ0gsQ0FBQztBQUVELFNBQVMsYUFBYSxDQU1yQix3QkFBa0UsRUFDbEUsTUFBa0IsRUFDbEIsRUFDQyxVQUFVLEVBQ1YsVUFBVSxFQUNWLE1BQU0sRUFDTixRQUFRLE1BTUwsRUFBRTtJQUVOLE9BQU8sY0FBYyxDQUFDLGFBQWEsRUFBRSxRQUFRLEVBQUUsR0FBRyxFQUFFO1FBQ25ELE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FHYixJQUFJLENBQUMsQ0FBQztRQUVoQixNQUFNLFFBQVEsR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsTUFBTSxFQUFFO1lBQ3ZELFVBQVU7WUFDVixVQUFVO1lBQ1YsTUFBTSxFQUFFLE1BQWlDO1NBQ3pDLENBQUMsQ0FBQztRQUNILE1BQU0sQ0FDTCxHQUFHLEVBQUU7WUFDSixNQUFNLFlBQVksR0FBRyxNQUFNLEVBQUUsQ0FBQztZQUM5QixNQUFNLFlBQVksR0FBRyxRQUFRLEVBQUUsQ0FBQztZQUNoQyxJQUFJLFlBQVksS0FBSyxJQUFJLElBQUksU0FBUyxDQUFDLFFBQVEsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDO2dCQUMzRCxRQUFRLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO1lBQ3BCLENBQUM7aUJBQU0sSUFBSSxZQUFZLEtBQUssSUFBSSxFQUFFLENBQUM7Z0JBQ2xDLE9BQU8sQ0FBQyxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUU7b0JBQzFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsR0FBRyxFQUFFO3dCQUNwQixJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDOzRCQUFFLE9BQU8sT0FBTyxDQUFDO3dCQUNoRCxJQUFJLE9BQU8sWUFBWSxLQUFLLFFBQVE7NEJBQUUsT0FBTyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUM7d0JBQ3hELE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUM7d0JBQ3ZDLE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FDakIsQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQUU7NEJBQ2QsTUFBdUIsQ0FBQyxHQUFHLENBQUMsR0FBRyxPQUFPLENBQUMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDOzRCQUMzRCxPQUFPLE1BQU0sQ0FBQzt3QkFDZixDQUFDLEVBQ0QsRUFBbUcsQ0FDbkcsQ0FBQztvQkFDSCxDQUFDLENBQUMsQ0FBQztnQkFDSixDQUFDLENBQUMsQ0FBQztZQUNKLENBQUM7UUFDRixDQUFDLEVBQ0QsRUFBRSxpQkFBaUIsRUFBRSxJQUFJLEVBQUUsQ0FDM0IsQ0FBQztRQUVGLE9BQU8sUUFBUSxDQUFDLFVBQVUsRUFBRSxDQUFDO0lBQzlCLENBQUMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVELGFBQWEsQ0FBQyxPQUFPLEdBQUcsQ0FLdkIsd0JBQWtFLEVBQ2xFLE1BQWtCLEVBQ2xCLFVBQW9ELEVBQ3BELE1BQXVDLEVBQ3RDLEVBQUU7SUFDSCxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztJQUNqRixJQUFJLE9BQU8sRUFBRSxDQUFDO1FBQ2IsS0FBSyxPQUFPLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQzNCLENBQUM7QUFDRixDQUFDLENBQUM7QUFFRixhQUFhLENBQUMsT0FBTyxHQUFHLEdBQUcsRUFBRTtJQUM1QixNQUFNLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDaEIsQ0FBQyxDQUFDO0FBRUYsYUFBYSxDQUFDLEtBQUssR0FBRyxDQUFDLElBQXVCLEVBQUUsRUFBRTtJQUNqRCxNQUFNLFVBQVUsR0FBRyxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQzFCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUM7QUFHRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQXNCLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yLCBTaWduYWwsIGVmZmVjdCwgc2lnbmFsLCB1bnRyYWNrZWQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHsgTG9hZGVyLCBPYmplY3QzRCB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB7IE5ndEFueVJlY29yZCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgTmd0T2JqZWN0TWFwLCBtYWtlT2JqZWN0R3JhcGggfSBmcm9tICcuL3V0aWxzL21ha2UnO1xuXG5leHBvcnQgdHlwZSBOZ3RHTFRGTGlrZSA9IHsgc2NlbmU6IE9iamVjdDNEIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0TG9hZGVyPFQ+IGV4dGVuZHMgTG9hZGVyIHtcblx0bG9hZChcblx0XHR1cmw6IHN0cmluZyxcblx0XHRvbkxvYWQ/OiAocmVzdWx0OiBUKSA9PiB2b2lkLFxuXHRcdG9uUHJvZ3Jlc3M/OiAoZXZlbnQ6IFByb2dyZXNzRXZlbnQpID0+IHZvaWQsXG5cdFx0b25FcnJvcj86IChldmVudDogdW5rbm93bikgPT4gdm9pZCxcblx0KTogdW5rbm93bjtcblx0bG9hZEFzeW5jKHVybDogc3RyaW5nLCBvblByb2dyZXNzPzogKGV2ZW50OiBQcm9ncmVzc0V2ZW50KSA9PiB2b2lkKTogUHJvbWlzZTxUPjtcbn1cblxuZXhwb3J0IHR5cGUgTmd0TG9hZGVyUHJvdG88VD4gPSBuZXcgKC4uLmFyZ3M6IGFueSkgPT4gTmd0TG9hZGVyPFQgZXh0ZW5kcyB1bmtub3duID8gYW55IDogVD47XG5leHBvcnQgdHlwZSBOZ3RMb2FkZXJSZXR1cm5UeXBlPFQsIEwgZXh0ZW5kcyBOZ3RMb2FkZXJQcm90bzxUPj4gPSBUIGV4dGVuZHMgdW5rbm93blxuXHQ/IEF3YWl0ZWQ8UmV0dXJuVHlwZTxJbnN0YW5jZVR5cGU8TD5bJ2xvYWRBc3luYyddPj5cblx0OiBUO1xuXG5leHBvcnQgdHlwZSBOZ3RMb2FkZXJFeHRlbnNpb25zPFQgZXh0ZW5kcyB7IHByb3RvdHlwZTogTmd0TG9hZGVyUHJvdG88YW55PiB9PiA9IChsb2FkZXI6IFRbJ3Byb3RvdHlwZSddKSA9PiB2b2lkO1xuZXhwb3J0IHR5cGUgTmd0Q29uZGl0aW9uYWxUeXBlPENoaWxkLCBQYXJlbnQsIFRydXRoeSwgRmFsc3k+ID0gQ2hpbGQgZXh0ZW5kcyBQYXJlbnQgPyBUcnV0aHkgOiBGYWxzeTtcbmV4cG9ydCB0eXBlIE5ndEJyYW5jaGluZ1JldHVybjxULCBQYXJlbnQsIENvZXJjZWQ+ID0gTmd0Q29uZGl0aW9uYWxUeXBlPFQsIFBhcmVudCwgQ29lcmNlZCwgVD47XG5cbmV4cG9ydCB0eXBlIE5ndExvYWRlclJlc3VsdHM8XG5cdFRJbnB1dCBleHRlbmRzIHN0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPixcblx0VFJldHVybixcbj4gPSBUSW5wdXQgZXh0ZW5kcyBzdHJpbmdbXSA/IFRSZXR1cm5bXSA6IFRJbnB1dCBleHRlbmRzIG9iamVjdCA/IHsgW2tleSBpbiBrZXlvZiBUSW5wdXRdOiBUUmV0dXJuIH0gOiBUUmV0dXJuO1xuXG5jb25zdCBjYWNoZWQgPSBuZXcgTWFwKCk7XG5jb25zdCBtZW1vaXplZExvYWRlcnMgPSBuZXcgV2Vha01hcCgpO1xuXG5mdW5jdGlvbiBub3JtYWxpemVJbnB1dHMoaW5wdXQ6IHN0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPikge1xuXHRsZXQgdXJsczogc3RyaW5nW10gPSBbXTtcblx0aWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSB7XG5cdFx0dXJscyA9IGlucHV0O1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ3N0cmluZycpIHtcblx0XHR1cmxzID0gW2lucHV0XTtcblx0fSBlbHNlIHtcblx0XHR1cmxzID0gT2JqZWN0LnZhbHVlcyhpbnB1dCk7XG5cdH1cblxuXHRyZXR1cm4gdXJscy5tYXAoKHVybCkgPT4ge1xuXHRcdHJldHVybiB1cmwuaW5jbHVkZXMoJ3VuZGVmaW5lZCcpIHx8IHVybC5pbmNsdWRlcygnbnVsbCcpIHx8ICF1cmwgPyAnJyA6IHVybDtcblx0fSk7XG59XG5cbmZ1bmN0aW9uIGxvYWQ8XG5cdFREYXRhLFxuXHRUVXJsIGV4dGVuZHMgc3RyaW5nIHwgc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuXHRUTG9hZGVyQ29uc3RydWN0b3IgZXh0ZW5kcyBOZ3RMb2FkZXJQcm90bzxURGF0YT4sXG5cdFRSZXR1cm4gPSBOZ3RMb2FkZXJSZXR1cm5UeXBlPFREYXRhLCBUTG9hZGVyQ29uc3RydWN0b3I+LFxuPihcblx0bG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5OiAoaW5wdXRzOiBzdHJpbmdbXSkgPT4gVExvYWRlckNvbnN0cnVjdG9yLFxuXHRpbnB1dHM6ICgpID0+IFRVcmwsXG5cdHtcblx0XHRleHRlbnNpb25zLFxuXHRcdG9uTG9hZCxcblx0XHRvblByb2dyZXNzLFxuXHR9OiB7XG5cdFx0ZXh0ZW5zaW9ucz86IE5ndExvYWRlckV4dGVuc2lvbnM8VExvYWRlckNvbnN0cnVjdG9yPjtcblx0XHRvbkxvYWQ/OiAoZGF0YTogTm9JbmZlcjxUUmV0dXJuPikgPT4gdm9pZDtcblx0XHRvblByb2dyZXNzPzogKGV2ZW50OiBQcm9ncmVzc0V2ZW50KSA9PiB2b2lkO1xuXHR9ID0ge30sXG4pIHtcblx0cmV0dXJuICgpOiBBcnJheTxQcm9taXNlPGFueT4+IHwgbnVsbCA9PiB7XG5cdFx0Y29uc3QgdXJscyA9IG5vcm1hbGl6ZUlucHV0cyhpbnB1dHMoKSk7XG5cblx0XHRsZXQgbG9hZGVyOiBMb2FkZXI8VERhdGE+ID0gbWVtb2l6ZWRMb2FkZXJzLmdldChsb2FkZXJDb25zdHJ1Y3RvckZhY3RvcnkodXJscykpO1xuXHRcdGlmICghbG9hZGVyKSB7XG5cdFx0XHRsb2FkZXIgPSBuZXcgKGxvYWRlckNvbnN0cnVjdG9yRmFjdG9yeSh1cmxzKSkoKTtcblx0XHRcdG1lbW9pemVkTG9hZGVycy5zZXQobG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5KHVybHMpLCBsb2FkZXIpO1xuXHRcdH1cblxuXHRcdGlmIChleHRlbnNpb25zKSBleHRlbnNpb25zKGxvYWRlcik7XG5cdFx0Ly8gVE9ETzogcmVldmFsdWF0ZSB0aGlzXG5cdFx0cmV0dXJuIHVybHMubWFwKCh1cmwpID0+IHtcblx0XHRcdGlmICh1cmwgPT09ICcnKSB7XG5cdFx0XHRcdHJldHVybiBudWxsO1xuXHRcdFx0fVxuXG5cdFx0XHRpZiAoIWNhY2hlZC5oYXModXJsKSkge1xuXHRcdFx0XHRjYWNoZWQuc2V0KFxuXHRcdFx0XHRcdHVybCxcblx0XHRcdFx0XHRuZXcgUHJvbWlzZTxURGF0YT4oKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuXHRcdFx0XHRcdFx0bG9hZGVyLmxvYWQoXG5cdFx0XHRcdFx0XHRcdHVybCxcblx0XHRcdFx0XHRcdFx0KGRhdGEpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoJ3NjZW5lJyBpbiAoZGF0YSBhcyBOZ3RBbnlSZWNvcmQpKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRPYmplY3QuYXNzaWduKGRhdGEgYXMgTmd0QW55UmVjb3JkLCBtYWtlT2JqZWN0R3JhcGgoKGRhdGEgYXMgTmd0QW55UmVjb3JkKVsnc2NlbmUnXSkpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdGlmIChvbkxvYWQpIHtcblx0XHRcdFx0XHRcdFx0XHRcdG9uTG9hZChkYXRhIGFzIHVua25vd24gYXMgVFJldHVybik7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0cmVzb2x2ZShkYXRhKTtcblx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0b25Qcm9ncmVzcyxcblx0XHRcdFx0XHRcdFx0KGVycm9yKSA9PiByZWplY3QobmV3IEVycm9yKGBbTkdUXSBDb3VsZCBub3QgbG9hZCAke3VybH06ICR7KGVycm9yIGFzIEVycm9yRXZlbnQpPy5tZXNzYWdlfWApKSxcblx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0fSksXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0XHRyZXR1cm4gY2FjaGVkLmdldCh1cmwpITtcblx0XHR9KTtcblx0fTtcbn1cblxuZnVuY3Rpb24gX2luamVjdExvYWRlcjxcblx0VERhdGEsXG5cdFRVcmwgZXh0ZW5kcyBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG5cdFRMb2FkZXJDb25zdHJ1Y3RvciBleHRlbmRzIE5ndExvYWRlclByb3RvPFREYXRhPixcblx0VFJldHVybiA9IE5ndExvYWRlclJldHVyblR5cGU8VERhdGEsIFRMb2FkZXJDb25zdHJ1Y3Rvcj4sXG4+KFxuXHRsb2FkZXJDb25zdHJ1Y3RvckZhY3Rvcnk6IChpbnB1dHM6IHN0cmluZ1tdKSA9PiBUTG9hZGVyQ29uc3RydWN0b3IsXG5cdGlucHV0czogKCkgPT4gVFVybCxcblx0e1xuXHRcdGV4dGVuc2lvbnMsXG5cdFx0b25Qcm9ncmVzcyxcblx0XHRvbkxvYWQsXG5cdFx0aW5qZWN0b3IsXG5cdH06IHtcblx0XHRleHRlbnNpb25zPzogTmd0TG9hZGVyRXh0ZW5zaW9uczxUTG9hZGVyQ29uc3RydWN0b3I+O1xuXHRcdG9uUHJvZ3Jlc3M/OiAoZXZlbnQ6IFByb2dyZXNzRXZlbnQpID0+IHZvaWQ7XG5cdFx0b25Mb2FkPzogKGRhdGE6IE5vSW5mZXI8VFJldHVybj4pID0+IHZvaWQ7XG5cdFx0aW5qZWN0b3I/OiBJbmplY3Rvcjtcblx0fSA9IHt9LFxuKTogU2lnbmFsPE5ndExvYWRlclJlc3VsdHM8VFVybCwgTmd0QnJhbmNoaW5nUmV0dXJuPFRSZXR1cm4sIE5ndEdMVEZMaWtlLCBOZ3RHTFRGTGlrZSAmIE5ndE9iamVjdE1hcD4+IHwgbnVsbD4ge1xuXHRyZXR1cm4gYXNzZXJ0SW5qZWN0b3IoX2luamVjdExvYWRlciwgaW5qZWN0b3IsICgpID0+IHtcblx0XHRjb25zdCByZXNwb25zZSA9IHNpZ25hbDxOZ3RMb2FkZXJSZXN1bHRzPFxuXHRcdFx0VFVybCxcblx0XHRcdE5ndEJyYW5jaGluZ1JldHVybjxUUmV0dXJuLCBOZ3RHTFRGTGlrZSwgTmd0R0xURkxpa2UgJiBOZ3RPYmplY3RNYXA+XG5cdFx0PiB8IG51bGw+KG51bGwpO1xuXG5cdFx0Y29uc3QgZWZmZWN0b3IgPSBsb2FkKGxvYWRlckNvbnN0cnVjdG9yRmFjdG9yeSwgaW5wdXRzLCB7XG5cdFx0XHRleHRlbnNpb25zLFxuXHRcdFx0b25Qcm9ncmVzcyxcblx0XHRcdG9uTG9hZDogb25Mb2FkIGFzIChkYXRhOiB1bmtub3duKSA9PiB2b2lkLFxuXHRcdH0pO1xuXHRcdGVmZmVjdChcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0Y29uc3Qgb3JpZ2luYWxVcmxzID0gaW5wdXRzKCk7XG5cdFx0XHRcdGNvbnN0IGNhY2hlZEVmZmVjdCA9IGVmZmVjdG9yKCk7XG5cdFx0XHRcdGlmIChjYWNoZWRFZmZlY3QgPT09IG51bGwgJiYgdW50cmFja2VkKHJlc3BvbnNlKSAhPT0gbnVsbCkge1xuXHRcdFx0XHRcdHJlc3BvbnNlLnNldChudWxsKTtcblx0XHRcdFx0fSBlbHNlIGlmIChjYWNoZWRFZmZlY3QgIT09IG51bGwpIHtcblx0XHRcdFx0XHRQcm9taXNlLmFsbChjYWNoZWRFZmZlY3QpLnRoZW4oKHJlc3VsdHMpID0+IHtcblx0XHRcdFx0XHRcdHJlc3BvbnNlLnVwZGF0ZSgoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KG9yaWdpbmFsVXJscykpIHJldHVybiByZXN1bHRzO1xuXHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIG9yaWdpbmFsVXJscyA9PT0gJ3N0cmluZycpIHJldHVybiByZXN1bHRzWzBdO1xuXHRcdFx0XHRcdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob3JpZ2luYWxVcmxzKTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIGtleXMucmVkdWNlKFxuXHRcdFx0XHRcdFx0XHRcdChyZXN1bHQsIGtleSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0KHJlc3VsdCBhcyBOZ3RBbnlSZWNvcmQpW2tleV0gPSByZXN1bHRzW2tleXMuaW5kZXhPZihrZXkpXTtcblx0XHRcdFx0XHRcdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHR7fSBhcyB7IFtrZXkgaW4ga2V5b2YgVFVybF06IE5ndEJyYW5jaGluZ1JldHVybjxUUmV0dXJuLCBOZ3RHTFRGTGlrZSwgTmd0R0xURkxpa2UgJiBOZ3RPYmplY3RNYXA+IH0sXG5cdFx0XHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHsgYWxsb3dTaWduYWxXcml0ZXM6IHRydWUgfSxcblx0XHQpO1xuXG5cdFx0cmV0dXJuIHJlc3BvbnNlLmFzUmVhZG9ubHkoKTtcblx0fSk7XG59XG5cbl9pbmplY3RMb2FkZXIucHJlbG9hZCA9IDxcblx0VERhdGEsXG5cdFRVcmwgZXh0ZW5kcyBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG5cdFRMb2FkZXJDb25zdHJ1Y3RvciBleHRlbmRzIE5ndExvYWRlclByb3RvPFREYXRhPixcbj4oXG5cdGxvYWRlckNvbnN0cnVjdG9yRmFjdG9yeTogKGlucHV0czogc3RyaW5nW10pID0+IFRMb2FkZXJDb25zdHJ1Y3Rvcixcblx0aW5wdXRzOiAoKSA9PiBUVXJsLFxuXHRleHRlbnNpb25zPzogTmd0TG9hZGVyRXh0ZW5zaW9uczxUTG9hZGVyQ29uc3RydWN0b3I+LFxuXHRvbkxvYWQ/OiAoZGF0YTogTm9JbmZlcjxURGF0YT4pID0+IHZvaWQsXG4pID0+IHtcblx0Y29uc3QgZWZmZWN0cyA9IGxvYWQobG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5LCBpbnB1dHMsIHsgZXh0ZW5zaW9ucywgb25Mb2FkIH0pKCk7XG5cdGlmIChlZmZlY3RzKSB7XG5cdFx0dm9pZCBQcm9taXNlLmFsbChlZmZlY3RzKTtcblx0fVxufTtcblxuX2luamVjdExvYWRlci5kZXN0cm95ID0gKCkgPT4ge1xuXHRjYWNoZWQuY2xlYXIoKTtcbn07XG5cbl9pbmplY3RMb2FkZXIuY2xlYXIgPSAodXJsczogc3RyaW5nIHwgc3RyaW5nW10pID0+IHtcblx0Y29uc3QgdXJsVG9DbGVhciA9IEFycmF5LmlzQXJyYXkodXJscykgPyB1cmxzIDogW3VybHNdO1xuXHR1cmxUb0NsZWFyLmZvckVhY2goKHVybCkgPT4ge1xuXHRcdGNhY2hlZC5kZWxldGUodXJsKTtcblx0fSk7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RJbmplY3RlZExvYWRlciA9IHR5cGVvZiBfaW5qZWN0TG9hZGVyO1xuZXhwb3J0IGNvbnN0IGluamVjdExvYWRlcjogTmd0SW5qZWN0ZWRMb2FkZXIgPSBfaW5qZWN0TG9hZGVyO1xuIl19
@@ -1,5 +1,5 @@
1
- import { roots } from './roots';
2
- import { createInjectionToken } from './utils/create-injection-token';
1
+ import { createInjectionToken } from 'ngxtension/create-injection-token';
2
+ export const roots = new Map();
3
3
  function createSubs(callback, subs) {
4
4
  const sub = { callback };
5
5
  subs.add(sub);
@@ -41,7 +41,7 @@ export function flushGlobalEffects(type, timestamp) {
41
41
  }
42
42
  }
43
43
  function render(timestamp, store, frame) {
44
- const state = store.get();
44
+ const state = store.snapshot;
45
45
  // Run local effects
46
46
  let delta = state.clock.getDelta();
47
47
  // In frameloop='never' mode, clock times are updated using the provided timestamp
@@ -50,11 +50,11 @@ function render(timestamp, store, frame) {
50
50
  state.clock.oldTime = state.clock.elapsedTime;
51
51
  state.clock.elapsedTime = timestamp;
52
52
  }
53
- // Call subscribers (useFrame)
53
+ // Call subscribers (beforeRender)
54
54
  const subscribers = state.internal.subscribers;
55
55
  for (let i = 0; i < subscribers.length; i++) {
56
56
  const subscription = subscribers[i];
57
- subscription.callback({ ...subscription.store.get(), delta, frame });
57
+ subscription.callback({ ...subscription.store.snapshot, delta, frame });
58
58
  }
59
59
  // Render content
60
60
  if (!state.internal.priority && state.gl.render)
@@ -67,6 +67,7 @@ function createLoop(roots) {
67
67
  let running = false;
68
68
  let repeat;
69
69
  let frame;
70
+ let beforeRenderInProgress = false;
70
71
  function loop(timestamp) {
71
72
  frame = requestAnimationFrame(loop);
72
73
  running = true;
@@ -74,8 +75,9 @@ function createLoop(roots) {
74
75
  // Run effects
75
76
  flushGlobalEffects('before', timestamp);
76
77
  // Render all roots
78
+ beforeRenderInProgress = true;
77
79
  for (const root of roots.values()) {
78
- const state = root.get();
80
+ const state = root.snapshot;
79
81
  // If the frameloop is invalidated, do not run another frame
80
82
  if (state.internal.active &&
81
83
  (state.frameloop === 'always' || state.internal.frames > 0) &&
@@ -83,6 +85,7 @@ function createLoop(roots) {
83
85
  repeat += render(timestamp, root);
84
86
  }
85
87
  }
88
+ beforeRenderInProgress = false;
86
89
  // Run after-effects
87
90
  flushGlobalEffects('after', timestamp);
88
91
  // Stop the loop if nothing invalidates it
@@ -95,13 +98,26 @@ function createLoop(roots) {
95
98
  }
96
99
  }
97
100
  function invalidate(store, frames = 1) {
98
- const state = store?.get();
101
+ const state = store?.snapshot;
99
102
  if (!state)
100
103
  return roots.forEach((root) => invalidate(root, frames));
101
104
  if (state.gl.xr?.isPresenting || !state.internal.active || state.frameloop === 'never')
102
105
  return;
103
- // Increase frames, do not go higher than 60
104
- state.internal.frames = Math.min(60, state.internal.frames + frames);
106
+ if (frames > 1) {
107
+ // legacy support for people using frames parameters
108
+ // Increase frames, do not go higher than 60
109
+ state.internal.frames = Math.min(60, state.internal.frames + frames);
110
+ }
111
+ else {
112
+ if (beforeRenderInProgress) {
113
+ //called from within a beforeRender, it means the user wants an additional frame
114
+ state.internal.frames = 2;
115
+ }
116
+ else {
117
+ //the user need a new frame, no need to increment further than 1
118
+ state.internal.frames = 1;
119
+ }
120
+ }
105
121
  // If the render-loop isn't active, start it
106
122
  if (!running) {
107
123
  running = true;
@@ -111,8 +127,7 @@ function createLoop(roots) {
111
127
  function advance(timestamp, runGlobalEffects = true, store, frame) {
112
128
  if (runGlobalEffects)
113
129
  flushGlobalEffects('before', timestamp);
114
- const state = store?.get();
115
- if (!state)
130
+ if (!store)
116
131
  for (const root of roots.values())
117
132
  render(timestamp, root);
118
133
  else
@@ -120,19 +135,7 @@ function createLoop(roots) {
120
135
  if (runGlobalEffects)
121
136
  flushGlobalEffects('after', timestamp);
122
137
  }
123
- return {
124
- loop,
125
- /**
126
- * Invalidates the view, requesting a frame to be rendered. Will globally invalidate unless passed a root's state.
127
- * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#invalidate
128
- */
129
- invalidate,
130
- /**
131
- * Advances the frameloop and runs render effects, useful for when manually rendering via `frameloop="never"`.
132
- * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#advance
133
- */
134
- advance,
135
- };
138
+ return { loop, invalidate, advance };
136
139
  }
137
- export const [injectNgtLoop, , NGT_LOOP] = createInjectionToken(() => createLoop(roots));
138
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9vcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2xvb3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQUVoQyxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsTUFBTSxnQ0FBZ0MsQ0FBQztBQU10RSxTQUFTLFVBQVUsQ0FBQyxRQUFpQyxFQUFFLElBQWtCO0lBQ3hFLE1BQU0sR0FBRyxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxNQUFNLGFBQWEsR0FBaUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUM5QyxNQUFNLGtCQUFrQixHQUFpQixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ25ELE1BQU0saUJBQWlCLEdBQWlCLElBQUksR0FBRyxFQUFFLENBQUM7QUFFbEQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsUUFBaUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUVwRzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxRQUFpQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFFOUc7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsUUFBaUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBRXRHLFNBQVMsR0FBRyxDQUFDLE9BQXFCLEVBQUUsU0FBaUI7SUFDcEQsSUFBSSxD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ICcuL3Jvb3RzJztcbmltcG9ydCB0eXBlIHsgTmd0U3RhdGUgfSBmcm9tICcuL3N0b3JlJztcbmltcG9ydCB7IGNyZWF0ZUluamVjdGlvblRva2VuIH0gZnJvbSAnLi91dGlscy9jcmVhdGUtaW5qZWN0aW9uLXRva2VuJztcbmltcG9ydCB0eXBlIHsgTmd0U2lnbmFsU3RvcmUgfSBmcm9tICcuL3V0aWxzL3NpZ25hbC1zdG9yZSc7XG5cbmV4cG9ydCB0eXBlIE5ndEdsb2JhbFJlbmRlckNhbGxiYWNrID0gKHRpbWVTdGFtcDogbnVtYmVyKSA9PiB2b2lkO1xudHlwZSBTdWJJdGVtID0geyBjYWxsYmFjazogTmd0R2xvYmFsUmVuZGVyQ2FsbGJhY2sgfTtcblxuZnVuY3Rpb24gY3JlYXRlU3VicyhjYWxsYmFjazogTmd0R2xvYmFsUmVuZGVyQ2FsbGJhY2ssIHN1YnM6IFNldDxTdWJJdGVtPik6ICgpID0+IHZvaWQge1xuXHRjb25zdCBzdWIgPSB7IGNhbGxiYWNrIH07XG5cdHN1YnMuYWRkKHN1Yik7XG5cdHJldHVybiAoKSA9PiB2b2lkIHN1YnMuZGVsZXRlKHN1Yik7XG59XG5cbmNvbnN0IGdsb2JhbEVmZmVjdHM6IFNldDxTdWJJdGVtPiA9IG5ldyBTZXQoKTtcbmNvbnN0IGdsb2JhbEFmdGVyRWZmZWN0czogU2V0PFN1Ykl0ZW0+ID0gbmV3IFNldCgpO1xuY29uc3QgZ2xvYmFsVGFpbEVmZmVjdHM6IFNldDxTdWJJdGVtPiA9IG5ldyBTZXQoKTtcblxuLyoqXG4gKiBBZGRzIGEgZ2xvYmFsIHJlbmRlciBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgZWFjaCBmcmFtZS5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLnBtbmQucnMvcmVhY3QtdGhyZWUtZmliZXIvYXBpL2FkZGl0aW9uYWwtZXhwb3J0cyNhZGRFZmZlY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEVmZmVjdCA9IChjYWxsYmFjazogTmd0R2xvYmFsUmVuZGVyQ2FsbGJhY2spID0+IGNyZWF0ZVN1YnMoY2FsbGJhY2ssIGdsb2JhbEVmZmVjdHMpO1xuXG4vKipcbiAqIEFkZHMgYSBnbG9iYWwgYWZ0ZXItcmVuZGVyIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBlYWNoIGZyYW1lLlxuICogQHNlZSBodHRwczovL2RvY3MucG1uZC5ycy9yZWFjdC10aHJlZS1maWJlci9hcGkvYWRkaXRpb25hbC1leHBvcnRzI2FkZEFmdGVyRWZmZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBhZGRBZnRlckVmZmVjdCA9IChjYWxsYmFjazogTmd0R2xvYmFsUmVuZGVyQ2FsbGJhY2spID0+IGNyZWF0ZVN1YnMoY2FsbGJhY2ssIGdsb2JhbEFmdGVyRWZmZWN0cyk7XG5cbi8qKlxuICogQWRkcyBhIGdsb2JhbCBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgd2hlbiByZW5kZXJpbmcgc3RvcHMuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5wbW5kLnJzL3JlYWN0LXRocmVlLWZpYmVyL2FwaS9hZGRpdGlvbmFsLWV4cG9ydHMjYWRkVGFpbFxuICovXG5leHBvcnQgY29uc3QgYWRkVGFpbCA9IChjYWxsYmFjazogTmd0R2xvYmFsUmVuZGVyQ2FsbGJhY2spID0+IGNyZWF0ZVN1YnMoY2FsbGJhY2ssIGdsb2JhbFRhaWxFZmZlY3RzKTtcblxuZnVuY3Rpb24gcnVuKGVmZmVjdHM6IFNldDxTdWJJdGVtPiwgdGltZXN0YW1wOiBudW1iZXIpIHtcblx0aWYgKCFlZmZlY3RzLnNpemUpIHJldHVybjtcblx0Zm9yIChjb25zdCB7IGNhbGxiYWNrIH0gb2YgZWZmZWN0cy52YWx1ZXMoKSkge1xuXHRcdGNhbGxiYWNrKHRpbWVzdGFtcCk7XG5cdH1cbn1cblxuZXhwb3J0IHR5cGUgTmd0R2xvYmFsRWZmZWN0VHlwZSA9ICdiZWZvcmUnIHwgJ2FmdGVyJyB8ICd0YWlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZsdXNoR2xvYmFsRWZmZWN0cyh0eXBlOiBOZ3RHbG9iYWxFZmZlY3RUeXBlLCB0aW1lc3RhbXA6IG51bWJlcik6IHZvaWQge1xuXHRzd2l0Y2ggKHR5cGUpIHtcblx0XHRjYXNlICdiZWZvcmUnOlxuXHRcdFx0cmV0dXJuIHJ1bihnbG9iYWxFZmZlY3RzLCB0aW1lc3RhbXApO1xuXHRcdGNhc2UgJ2FmdGVyJzpcblx0XHRcdHJldHVybiBydW4oZ2xvYmFsQWZ0ZXJFZmZlY3RzLCB0aW1lc3RhbXApO1xuXHRcdGNhc2UgJ3RhaWwnOlxuXHRcdFx0cmV0dXJuIHJ1bihnbG9iYWxUYWlsRWZmZWN0cywgdGltZXN0YW1wKTtcblx0fVxufVxuXG5mdW5jdGlvbiByZW5kZXIodGltZXN0YW1wOiBudW1iZXIsIHN0b3JlOiBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4sIGZyYW1lPzogWFJGcmFtZSkge1xuXHRjb25zdCBzdGF0ZSA9IHN0b3JlLmdldCgpO1xuXHQvLyBSdW4gbG9jYWwgZWZmZWN0c1xuXHRsZXQgZGVsdGEgPSBzdGF0ZS5jbG9jay5nZXREZWx0YSgpO1xuXHQvLyBJbiBmcmFtZWxvb3A9J25ldmVyJyBtb2RlLCBjbG9jayB0aW1lcyBhcmUgdXBkYXRlZCB1c2luZyB0aGUgcHJvdmlkZWQgdGltZXN0YW1wXG5cdGlmIChzdGF0ZS5mcmFtZWxvb3AgPT09ICduZXZlcicgJiYgdHlwZW9mIHRpbWVzdGFtcCA9PT0gJ251bWJlcicpIHtcblx0XHRkZWx0YSA9IHRpbWVzdGFtcCAtIHN0YXRlLmNsb2NrLmVsYXBzZWRUaW1lO1xuXHRcdHN0YXRlLmNsb2NrLm9sZFRpbWUgPSBzdGF0ZS5jbG9jay5lbGFwc2VkVGltZTtcblx0XHRzdGF0ZS5jbG9jay5lbGFwc2VkVGltZSA9IHRpbWVzdGFtcDtcblx0fVxuXHQvLyBDYWxsIHN1YnNjcmliZXJzICh1c2VGcmFtZSlcblx0Y29uc3Qgc3Vic2NyaWJlcnMgPSBzdGF0ZS5pbnRlcm5hbC5zdWJzY3JpYmVycztcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCBzdWJzY3JpYmVycy5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IHN1YnNjcmlwdGlvbiA9IHN1YnNjcmliZXJzW2ldO1xuXHRcdHN1YnNjcmlwdGlvbi5jYWxsYmFjayh7IC4uLnN1YnNjcmlwdGlvbi5zdG9yZS5nZXQoKSwgZGVsdGEsIGZyYW1lIH0pO1xuXHR9XG5cdC8vIFJlbmRlciBjb250ZW50XG5cdGlmICghc3RhdGUuaW50ZXJuYWwucHJpb3JpdHkgJiYgc3RhdGUuZ2wucmVuZGVyKSBzdGF0ZS5nbC5yZW5kZXIoc3RhdGUuc2NlbmUsIHN0YXRlLmNhbWVyYSk7XG5cdC8vIERlY3JlYXNlIGZyYW1lIGNvdW50XG5cdHN0YXRlLmludGVybmFsLmZyYW1lcyA9IE1hdGgubWF4KDAsIHN0YXRlLmludGVybmFsLmZyYW1lcyAtIDEpO1xuXHRyZXR1cm4gc3RhdGUuZnJhbWVsb29wID09PSAnYWx3YXlzJyA/IDEgOiBzdGF0ZS5pbnRlcm5hbC5mcmFtZXM7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUxvb3A8VENhbnZhcz4ocm9vdHM6IE1hcDxUQ2FudmFzLCBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4+KSB7XG5cdGxldCBydW5uaW5nID0gZmFsc2U7XG5cdGxldCByZXBlYXQ6IG51bWJlcjtcblx0bGV0IGZyYW1lOiBudW1iZXI7XG5cblx0ZnVuY3Rpb24gbG9vcCh0aW1lc3RhbXA6IG51bWJlcik6IHZvaWQge1xuXHRcdGZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGxvb3ApO1xuXHRcdHJ1bm5pbmcgPSB0cnVlO1xuXHRcdHJlcGVhdCA9IDA7XG5cblx0XHQvLyBSdW4gZWZmZWN0c1xuXHRcdGZsdXNoR2xvYmFsRWZmZWN0cygnYmVmb3JlJywgdGltZXN0YW1wKTtcblxuXHRcdC8vIFJlbmRlciBhbGwgcm9vdHNcblx0XHRmb3IgKGNvbnN0IHJvb3Qgb2Ygcm9vdHMudmFsdWVzKCkpIHtcblx0XHRcdGNvbnN0IHN0YXRlID0gcm9vdC5nZXQoKTtcblx0XHRcdC8vIElmIHRoZSBmcmFtZWxvb3AgaXMgaW52YWxpZGF0ZWQsIGRvIG5vdCBydW4gYW5vdGhlciBmcmFtZVxuXHRcdFx0aWYgKFxuXHRcdFx0XHRzdGF0ZS5pbnRlcm5hbC5hY3RpdmUgJiZcblx0XHRcdFx0KHN0YXRlLmZyYW1lbG9vcCA9PT0gJ2Fsd2F5cycgfHwgc3RhdGUuaW50ZXJuYWwuZnJhbWVzID4gMCkgJiZcblx0XHRcdFx0IXN0YXRlLmdsLnhyPy5pc1ByZXNlbnRpbmdcblx0XHRcdCkge1xuXHRcdFx0XHRyZXBlYXQgKz0gcmVuZGVyKHRpbWVzdGFtcCwgcm9vdCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gUnVuIGFmdGVyLWVmZmVjdHNcblx0XHRmbHVzaEdsb2JhbEVmZmVjdHMoJ2FmdGVyJywgdGltZXN0YW1wKTtcblxuXHRcdC8vIFN0b3AgdGhlIGxvb3AgaWYgbm90aGluZyBpbnZhbGlkYXRlcyBpdFxuXHRcdGlmIChyZXBlYXQgPT09IDApIHtcblx0XHRcdC8vIFRhaWwgY2FsbCBlZmZlY3RzLCB0aGV5IGFyZSBjYWxsZWQgd2hlbiByZW5kZXJpbmcgc3RvcHNcblx0XHRcdGZsdXNoR2xvYmFsRWZmZWN0cygndGFpbCcsIHRpbWVzdGFtcCk7XG5cblx0XHRcdC8vIEZsYWcgZW5kIG9mIG9wZXJhdGlvblxuXHRcdFx0cnVubmluZyA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGZyYW1lKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBpbnZhbGlkYXRlKHN0b3JlPzogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+LCBmcmFtZXMgPSAxKTogdm9pZCB7XG5cdFx0Y29uc3Qgc3RhdGUgPSBzdG9yZT8uZ2V0KCk7XG5cdFx0aWYgKCFzdGF0ZSkgcmV0dXJuIHJvb3RzLmZvckVhY2goKHJvb3QpID0+IGludmFsaWRhdGUocm9vdCwgZnJhbWVzKSk7XG5cdFx0aWYgKHN0YXRlLmdsLnhyPy5pc1ByZXNlbnRpbmcgfHwgIXN0YXRlLmludGVybmFsLmFjdGl2ZSB8fCBzdGF0ZS5mcmFtZWxvb3AgPT09ICduZXZlcicpIHJldHVybjtcblx0XHQvLyBJbmNyZWFzZSBmcmFtZXMsIGRvIG5vdCBnbyBoaWdoZXIgdGhhbiA2MFxuXHRcdHN0YXRlLmludGVybmFsLmZyYW1lcyA9IE1hdGgubWluKDYwLCBzdGF0ZS5pbnRlcm5hbC5mcmFtZXMgKyBmcmFtZXMpO1xuXHRcdC8vIElmIHRoZSByZW5kZXItbG9vcCBpc24ndCBhY3RpdmUsIHN0YXJ0IGl0XG5cdFx0aWYgKCFydW5uaW5nKSB7XG5cdFx0XHRydW5uaW5nID0gdHJ1ZTtcblx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZShsb29wKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBhZHZhbmNlKFxuXHRcdHRpbWVzdGFtcDogbnVtYmVyLFxuXHRcdHJ1bkdsb2JhbEVmZmVjdHM6IGJvb2xlYW4gPSB0cnVlLFxuXHRcdHN0b3JlPzogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+LFxuXHRcdGZyYW1lPzogWFJGcmFtZSxcblx0KTogdm9pZCB7XG5cdFx0aWYgKHJ1bkdsb2JhbEVmZmVjdHMpIGZsdXNoR2xvYmFsRWZmZWN0cygnYmVmb3JlJywgdGltZXN0YW1wKTtcblx0XHRjb25zdCBzdGF0ZSA9IHN0b3JlPy5nZXQoKTtcblx0XHRpZiAoIXN0YXRlKSBmb3IgKGNvbnN0IHJvb3Qgb2Ygcm9vdHMudmFsdWVzKCkpIHJlbmRlcih0aW1lc3RhbXAsIHJvb3QpO1xuXHRcdGVsc2UgcmVuZGVyKHRpbWVzdGFtcCwgc3RvcmUhLCBmcmFtZSk7XG5cdFx0aWYgKHJ1bkdsb2JhbEVmZmVjdHMpIGZsdXNoR2xvYmFsRWZmZWN0cygnYWZ0ZXInLCB0aW1lc3RhbXApO1xuXHR9XG5cblx0cmV0dXJuIHtcblx0XHRsb29wLFxuXHRcdC8qKlxuXHRcdCAqIEludmFsaWRhdGVzIHRoZSB2aWV3LCByZXF1ZXN0aW5nIGEgZnJhbWUgdG8gYmUgcmVuZGVyZWQuIFdpbGwgZ2xvYmFsbHkgaW52YWxpZGF0ZSB1bmxlc3MgcGFzc2VkIGEgcm9vdCdzIHN0YXRlLlxuXHRcdCAqIEBzZWUgaHR0cHM6Ly9kb2NzLnBtbmQucnMvcmVhY3QtdGhyZWUtZmliZXIvYXBpL2FkZGl0aW9uYWwtZXhwb3J0cyNpbnZhbGlkYXRlXG5cdFx0ICovXG5cdFx0aW52YWxpZGF0ZSxcblx0XHQvKipcblx0XHQgKiBBZHZhbmNlcyB0aGUgZnJhbWVsb29wIGFuZCBydW5zIHJlbmRlciBlZmZlY3RzLCB1c2VmdWwgZm9yIHdoZW4gbWFudWFsbHkgcmVuZGVyaW5nIHZpYSBgZnJhbWVsb29wPVwibmV2ZXJcImAuXG5cdFx0ICogQHNlZSBodHRwczovL2RvY3MucG1uZC5ycy9yZWFjdC10aHJlZS1maWJlci9hcGkvYWRkaXRpb25hbC1leHBvcnRzI2FkdmFuY2Vcblx0XHQgKi9cblx0XHRhZHZhbmNlLFxuXHR9O1xufVxuXG5leHBvcnQgY29uc3QgW2luamVjdE5ndExvb3AsICwgTkdUX0xPT1BdID0gY3JlYXRlSW5qZWN0aW9uVG9rZW4oKCkgPT4gY3JlYXRlTG9vcChyb290cykpO1xuXG5leHBvcnQgdHlwZSBOZ3RMb29wID0gUmV0dXJuVHlwZTx0eXBlb2YgY3JlYXRlTG9vcD47XG4iXX0=
140
+ export const [injectLoop] = createInjectionToken(() => createLoop(roots));
141
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9vcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2xvb3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFJekUsTUFBTSxDQUFDLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxFQUE4QyxDQUFDO0FBSTNFLFNBQVMsVUFBVSxDQUFDLFFBQWlDLEVBQUUsSUFBa0I7SUFDeEUsTUFBTSxHQUFHLEdBQUcsRUFBRSxRQUFRLEVBQUUsQ0FBQztJQUN6QixJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ2QsT0FBTyxHQUFHLEVBQUUsQ0FBQyxLQUFLLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEMsQ0FBQztBQUVELE1BQU0sYUFBYSxHQUFpQixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQzlDLE1BQU0sa0JBQWtCLEdBQWlCLElBQUksR0FBRyxFQUFFLENBQUM7QUFDbkQsTUFBTSxpQkFBaUIsR0FBaUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUVsRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxTQUFTLEdBQUcsQ0FBQyxRQUFpQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBRXBHOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLGNBQWMsR0FBRyxDQUFDLFFBQWlDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUU5Rzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxPQUFPLEdBQUcsQ0FBQyxRQUFpQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLGlCQUFpQixDQUFDLENBQUM7QUFFdEcsU0FBUyxHQUFHLENBQUMsT0FBcUIsRUFBRSxTQUFpQjtJ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QUFJLENBQUMsQ0FBQzs7WUFDbEUsTUFBTSxDQUFDLFNBQVMsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDLENBQUM7UUFDckMsSUFBSSxnQkFBZ0I7WUFBRSxrQkFBa0IsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLENBQUM7SUFDOUQsQ0FBQztJQUVELE9BQU8sRUFBRSxJQUFJLEVBQUUsVUFBVSxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQ3RDLENBQUM7QUFFRCxNQUFNLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLG9CQUFvQixDQUFDLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgY3JlYXRlSW5qZWN0aW9uVG9rZW4gfSBmcm9tICduZ3h0ZW5zaW9uL2NyZWF0ZS1pbmplY3Rpb24tdG9rZW4nO1xuaW1wb3J0IHsgTmd0Q2FudmFzRWxlbWVudCwgTmd0R2xvYmFsUmVuZGVyQ2FsbGJhY2ssIE5ndFN0YXRlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBOZ3RTaWduYWxTdG9yZSB9IGZyb20gJy4vdXRpbHMvc2lnbmFsLXN0b3JlJztcblxuZXhwb3J0IGNvbnN0IHJvb3RzID0gbmV3IE1hcDxOZ3RDYW52YXNFbGVtZW50LCBOZ3RTaWduYWxTdG9yZTxOZ3RTdGF0ZT4+KCk7XG5cbnR5cGUgU3ViSXRlbSA9IHsgY2FsbGJhY2s6IE5ndEdsb2JhbFJlbmRlckNhbGxiYWNrIH07XG5cbmZ1bmN0aW9uIGNyZWF0ZVN1YnMoY2FsbGJhY2s6IE5ndEdsb2JhbFJlbmRlckNhbGxiYWNrLCBzdWJzOiBTZXQ8U3ViSXRlbT4pOiAoKSA9PiB2b2lkIHtcblx0Y29uc3Qgc3ViID0geyBjYWxsYmFjayB9O1xuXHRzdWJzLmFkZChzdWIpO1xuXHRyZXR1cm4gKCkgPT4gdm9pZCBzdWJzLmRlbGV0ZShzdWIpO1xufVxuXG5jb25zdCBnbG9iYWxFZmZlY3RzOiBTZXQ8U3ViSXRlbT4gPSBuZXcgU2V0KCk7XG5jb25zdCBnbG9iYWxBZnRlckVmZmVjdHM6IFNldDxTdWJJdGVtPiA9IG5ldyBTZXQoKTtcbmNvbnN0IGdsb2JhbFRhaWxFZmZlY3RzOiBTZXQ8U3ViSXRlbT4gPSBuZXcgU2V0KCk7XG5cbi8qKlxuICogQWRkcyBhIGdsb2JhbCByZW5kZXIgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGVhY2ggZnJhbWUuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5wbW5kLnJzL3JlYWN0LXRocmVlLWZpYmVyL2FwaS9hZGRpdGlvbmFsLWV4cG9ydHMjYWRkRWZmZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBhZGRFZmZlY3QgPSAoY2FsbGJhY2s6IE5ndEdsb2JhbFJlbmRlckNhbGxiYWNrKSA9PiBjcmVhdGVTdWJzKGNhbGxiYWNrLCBnbG9iYWxFZmZlY3RzKTtcblxuLyoqXG4gKiBBZGRzIGEgZ2xvYmFsIGFmdGVyLXJlbmRlciBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgZWFjaCBmcmFtZS5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLnBtbmQucnMvcmVhY3QtdGhyZWUtZmliZXIvYXBpL2FkZGl0aW9uYWwtZXhwb3J0cyNhZGRBZnRlckVmZmVjdFxuICovXG5leHBvcnQgY29uc3QgYWRkQWZ0ZXJFZmZlY3QgPSAoY2FsbGJhY2s6IE5ndEdsb2JhbFJlbmRlckNhbGxiYWNrKSA9PiBjcmVhdGVTdWJzKGNhbGxiYWNrLCBnbG9iYWxBZnRlckVmZmVjdHMpO1xuXG4vKipcbiAqIEFkZHMgYSBnbG9iYWwgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gcmVuZGVyaW5nIHN0b3BzLlxuICogQHNlZSBodHRwczovL2RvY3MucG1uZC5ycy9yZWFjdC10aHJlZS1maWJlci9hcGkvYWRkaXRpb25hbC1leHBvcnRzI2FkZFRhaWxcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZFRhaWwgPSAoY2FsbGJhY2s6IE5ndEdsb2JhbFJlbmRlckNhbGxiYWNrKSA9PiBjcmVhdGVTdWJzKGNhbGxiYWNrLCBnbG9iYWxUYWlsRWZmZWN0cyk7XG5cbmZ1bmN0aW9uIHJ1bihlZmZlY3RzOiBTZXQ8U3ViSXRlbT4sIHRpbWVzdGFtcDogbnVtYmVyKSB7XG5cdGlmICghZWZmZWN0cy5zaXplKSByZXR1cm47XG5cdGZvciAoY29uc3QgeyBjYWxsYmFjayB9IG9mIGVmZmVjdHMudmFsdWVzKCkpIHtcblx0XHRjYWxsYmFjayh0aW1lc3RhbXApO1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIE5ndEdsb2JhbEVmZmVjdFR5cGUgPSAnYmVmb3JlJyB8ICdhZnRlcicgfCAndGFpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmbHVzaEdsb2JhbEVmZmVjdHModHlwZTogTmd0R2xvYmFsRWZmZWN0VHlwZSwgdGltZXN0YW1wOiBudW1iZXIpOiB2b2lkIHtcblx0c3dpdGNoICh0eXBlKSB7XG5cdFx0Y2FzZSAnYmVmb3JlJzpcblx0XHRcdHJldHVybiBydW4oZ2xvYmFsRWZmZWN0cywgdGltZXN0YW1wKTtcblx0XHRjYXNlICdhZnRlcic6XG5cdFx0XHRyZXR1cm4gcnVuKGdsb2JhbEFmdGVyRWZmZWN0cywgdGltZXN0YW1wKTtcblx0XHRjYXNlICd0YWlsJzpcblx0XHRcdHJldHVybiBydW4oZ2xvYmFsVGFpbEVmZmVjdHMsIHRpbWVzdGFtcCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyKHRpbWVzdGFtcDogbnVtYmVyLCBzdG9yZTogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+LCBmcmFtZT86IFhSRnJhbWUpIHtcblx0Y29uc3Qgc3RhdGUgPSBzdG9yZS5zbmFwc2hvdDtcblx0Ly8gUnVuIGxvY2FsIGVmZmVjdHNcblx0bGV0IGRlbHRhID0gc3RhdGUuY2xvY2suZ2V0RGVsdGEoKTtcblx0Ly8gSW4gZnJhbWVsb29wPSduZXZlcicgbW9kZSwgY2xvY2sgdGltZXMgYXJlIHVwZGF0ZWQgdXNpbmcgdGhlIHByb3ZpZGVkIHRpbWVzdGFtcFxuXHRpZiAoc3RhdGUuZnJhbWVsb29wID09PSAnbmV2ZXInICYmIHR5cGVvZiB0aW1lc3RhbXAgPT09ICdudW1iZXInKSB7XG5cdFx0ZGVsdGEgPSB0aW1lc3RhbXAgLSBzdGF0ZS5jbG9jay5lbGFwc2VkVGltZTtcblx0XHRzdGF0ZS5jbG9jay5vbGRUaW1lID0gc3RhdGUuY2xvY2suZWxhcHNlZFRpbWU7XG5cdFx0c3RhdGUuY2xvY2suZWxhcHNlZFRpbWUgPSB0aW1lc3RhbXA7XG5cdH1cblx0Ly8gQ2FsbCBzdWJzY3JpYmVycyAoYmVmb3JlUmVuZGVyKVxuXHRjb25zdCBzdWJzY3JpYmVycyA9IHN0YXRlLmludGVybmFsLnN1YnNjcmliZXJzO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IHN1YnNjcmliZXJzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qgc3Vic2NyaXB0aW9uID0gc3Vic2NyaWJlcnNbaV07XG5cdFx0c3Vic2NyaXB0aW9uLmNhbGxiYWNrKHsgLi4uc3Vic2NyaXB0aW9uLnN0b3JlLnNuYXBzaG90LCBkZWx0YSwgZnJhbWUgfSk7XG5cdH1cblx0Ly8gUmVuZGVyIGNvbnRlbnRcblx0aWYgKCFzdGF0ZS5pbnRlcm5hbC5wcmlvcml0eSAmJiBzdGF0ZS5nbC5yZW5kZXIpIHN0YXRlLmdsLnJlbmRlcihzdGF0ZS5zY2VuZSwgc3RhdGUuY2FtZXJhKTtcblx0Ly8gRGVjcmVhc2UgZnJhbWUgY291bnRcblx0c3RhdGUuaW50ZXJuYWwuZnJhbWVzID0gTWF0aC5tYXgoMCwgc3RhdGUuaW50ZXJuYWwuZnJhbWVzIC0gMSk7XG5cdHJldHVybiBzdGF0ZS5mcmFtZWxvb3AgPT09ICdhbHdheXMnID8gMSA6IHN0YXRlLmludGVybmFsLmZyYW1lcztcbn1cblxuZnVuY3Rpb24gY3JlYXRlTG9vcDxUQ2FudmFzPihyb290czogTWFwPFRDYW52YXMsIE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPj4pIHtcblx0bGV0IHJ1bm5pbmcgPSBmYWxzZTtcblx0bGV0IHJlcGVhdDogbnVtYmVyO1xuXHRsZXQgZnJhbWU6IG51bWJlcjtcblx0bGV0IGJlZm9yZVJlbmRlckluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuXHRmdW5jdGlvbiBsb29wKHRpbWVzdGFtcDogbnVtYmVyKTogdm9pZCB7XG5cdFx0ZnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUobG9vcCk7XG5cdFx0cnVubmluZyA9IHRydWU7XG5cdFx0cmVwZWF0ID0gMDtcblxuXHRcdC8vIFJ1biBlZmZlY3RzXG5cdFx0Zmx1c2hHbG9iYWxFZmZlY3RzKCdiZWZvcmUnLCB0aW1lc3RhbXApO1xuXG5cdFx0Ly8gUmVuZGVyIGFsbCByb290c1xuXHRcdGJlZm9yZVJlbmRlckluUHJvZ3Jlc3MgPSB0cnVlO1xuXHRcdGZvciAoY29uc3Qgcm9vdCBvZiByb290cy52YWx1ZXMoKSkge1xuXHRcdFx0Y29uc3Qgc3RhdGUgPSByb290LnNuYXBzaG90O1xuXHRcdFx0Ly8gSWYgdGhlIGZyYW1lbG9vcCBpcyBpbnZhbGlkYXRlZCwgZG8gbm90IHJ1biBhbm90aGVyIGZyYW1lXG5cdFx0XHRpZiAoXG5cdFx0XHRcdHN0YXRlLmludGVybmFsLmFjdGl2ZSAmJlxuXHRcdFx0XHQoc3RhdGUuZnJhbWVsb29wID09PSAnYWx3YXlzJyB8fCBzdGF0ZS5pbnRlcm5hbC5mcmFtZXMgPiAwKSAmJlxuXHRcdFx0XHQhc3RhdGUuZ2wueHI/LmlzUHJlc2VudGluZ1xuXHRcdFx0KSB7XG5cdFx0XHRcdHJlcGVhdCArPSByZW5kZXIodGltZXN0YW1wLCByb290KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0YmVmb3JlUmVuZGVySW5Qcm9ncmVzcyA9IGZhbHNlO1xuXG5cdFx0Ly8gUnVuIGFmdGVyLWVmZmVjdHNcblx0XHRmbHVzaEdsb2JhbEVmZmVjdHMoJ2FmdGVyJywgdGltZXN0YW1wKTtcblxuXHRcdC8vIFN0b3AgdGhlIGxvb3AgaWYgbm90aGluZyBpbnZhbGlkYXRlcyBpdFxuXHRcdGlmIChyZXBlYXQgPT09IDApIHtcblx0XHRcdC8vIFRhaWwgY2FsbCBlZmZlY3RzLCB0aGV5IGFyZSBjYWxsZWQgd2hlbiByZW5kZXJpbmcgc3RvcHNcblx0XHRcdGZsdXNoR2xvYmFsRWZmZWN0cygndGFpbCcsIHRpbWVzdGFtcCk7XG5cblx0XHRcdC8vIEZsYWcgZW5kIG9mIG9wZXJhdGlvblxuXHRcdFx0cnVubmluZyA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGZyYW1lKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBpbnZhbGlkYXRlKHN0b3JlPzogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+LCBmcmFtZXMgPSAxKTogdm9pZCB7XG5cdFx0Y29uc3Qgc3RhdGUgPSBzdG9yZT8uc25hcHNob3Q7XG5cdFx0aWYgKCFzdGF0ZSkgcmV0dXJuIHJvb3RzLmZvckVhY2goKHJvb3QpID0+IGludmFsaWRhdGUocm9vdCwgZnJhbWVzKSk7XG5cdFx0aWYgKHN0YXRlLmdsLnhyPy5pc1ByZXNlbnRpbmcgfHwgIXN0YXRlLmludGVybmFsLmFjdGl2ZSB8fCBzdGF0ZS5mcmFtZWxvb3AgPT09ICduZXZlcicpIHJldHVybjtcblx0XHRpZiAoZnJhbWVzID4gMSkge1xuXHRcdFx0Ly8gbGVnYWN5IHN1cHBvcnQgZm9yIHBlb3BsZSB1c2luZyBmcmFtZXMgcGFyYW1ldGVyc1xuXHRcdFx0Ly8gSW5jcmVhc2UgZnJhbWVzLCBkbyBub3QgZ28gaGlnaGVyIHRoYW4gNjBcblx0XHRcdHN0YXRlLmludGVybmFsLmZyYW1lcyA9IE1hdGgubWluKDYwLCBzdGF0ZS5pbnRlcm5hbC5mcmFtZXMgKyBmcmFtZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoYmVmb3JlUmVuZGVySW5Qcm9ncmVzcykge1xuXHRcdFx0XHQvL2NhbGxlZCBmcm9tIHdpdGhpbiBhIGJlZm9yZVJlbmRlciwgaXQgbWVhbnMgdGhlIHVzZXIgd2FudHMgYW4gYWRkaXRpb25hbCBmcmFtZVxuXHRcdFx0XHRzdGF0ZS5pbnRlcm5hbC5mcmFtZXMgPSAyO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly90aGUgdXNlciBuZWVkIGEgbmV3IGZyYW1lLCBubyBuZWVkIHRvIGluY3JlbWVudCBmdXJ0aGVyIHRoYW4gMVxuXHRcdFx0XHRzdGF0ZS5pbnRlcm5hbC5mcmFtZXMgPSAxO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIHRoZSByZW5kZXItbG9vcCBpc24ndCBhY3RpdmUsIHN0YXJ0IGl0XG5cdFx0aWYgKCFydW5uaW5nKSB7XG5cdFx0XHRydW5uaW5nID0gdHJ1ZTtcblx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZShsb29wKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBhZHZhbmNlKFxuXHRcdHRpbWVzdGFtcDogbnVtYmVyLFxuXHRcdHJ1bkdsb2JhbEVmZmVjdHMgPSB0cnVlLFxuXHRcdHN0b3JlPzogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+LFxuXHRcdGZyYW1lPzogWFJGcmFtZSxcblx0KTogdm9pZCB7XG5cdFx0aWYgKHJ1bkdsb2JhbEVmZmVjdHMpIGZsdXNoR2xvYmFsRWZmZWN0cygnYmVmb3JlJywgdGltZXN0YW1wKTtcblx0XHRpZiAoIXN0b3JlKSBmb3IgKGNvbnN0IHJvb3Qgb2Ygcm9vdHMudmFsdWVzKCkpIHJlbmRlcih0aW1lc3RhbXAsIHJvb3QpO1xuXHRcdGVsc2UgcmVuZGVyKHRpbWVzdGFtcCwgc3RvcmUsIGZyYW1lKTtcblx0XHRpZiAocnVuR2xvYmFsRWZmZWN0cykgZmx1c2hHbG9iYWxFZmZlY3RzKCdhZnRlcicsIHRpbWVzdGFtcCk7XG5cdH1cblxuXHRyZXR1cm4geyBsb29wLCBpbnZhbGlkYXRlLCBhZHZhbmNlIH07XG59XG5cbmV4cG9ydCBjb25zdCBbaW5qZWN0TG9vcF0gPSBjcmVhdGVJbmplY3Rpb25Ub2tlbigoKSA9PiBjcmVhdGVMb29wKHJvb3RzKSk7XG4iXX0=
@@ -0,0 +1,67 @@
1
+ import { DOCUMENT } from '@angular/common';
2
+ import { inject, Pipe } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ export class NgtHexify {
5
+ constructor() {
6
+ this.document = inject(DOCUMENT, { optional: true });
7
+ }
8
+ /**
9
+ * transforms a:
10
+ * - hex string to a hex number
11
+ * - rgb string to a hex number
12
+ * - rgba string to a hex number
13
+ * - css color string to a hex number
14
+ *
15
+ * always default to black if failed
16
+ * @param value
17
+ */
18
+ transform(value) {
19
+ if (value == null)
20
+ return 0x000000;
21
+ if (value.startsWith('#')) {
22
+ return this.hexStringToNumber(value);
23
+ }
24
+ if (!this.ctx) {
25
+ this.ctx = this.document?.createElement('canvas').getContext('2d');
26
+ }
27
+ if (!this.ctx)
28
+ return 0x000000;
29
+ this.ctx.fillStyle = value;
30
+ const computedValue = this.ctx.fillStyle;
31
+ if (computedValue.startsWith('#')) {
32
+ return this.hexStringToNumber(computedValue);
33
+ }
34
+ if (!computedValue.startsWith('rgba'))
35
+ return 0x000000;
36
+ const regex = /rgba?\((\d+),\s*(\d+),\s*(\d+),?\s*(\d*\.?\d+)?\)/;
37
+ const match = computedValue.match(regex);
38
+ if (!match)
39
+ return 0x000000;
40
+ const r = parseInt(match[1], 10);
41
+ const g = parseInt(match[2], 10);
42
+ const b = parseInt(match[3], 10);
43
+ const a = match[4] ? parseFloat(match[4]) : 1.0;
44
+ // Convert the components to hex strings
45
+ const hexR = this.componentToHex(r);
46
+ const hexG = this.componentToHex(g);
47
+ const hexB = this.componentToHex(b);
48
+ const hexA = this.componentToHex(Math.round(a * 255));
49
+ // Combine the hex components into a single hex string
50
+ const hex = `#${hexR}${hexG}${hexB}${hexA}`;
51
+ return this.hexStringToNumber(hex);
52
+ }
53
+ hexStringToNumber(hexString) {
54
+ return parseInt(hexString.replace('#', ''), 16);
55
+ }
56
+ componentToHex(component) {
57
+ const hex = component.toString(16);
58
+ return hex.length === 1 ? '0' + hex : hex;
59
+ }
60
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtHexify, deps: [], target: i0.ɵɵFactoryTarget.Pipe }); }
61
+ static { this.ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "18.2.0", ngImport: i0, type: NgtHexify, isStandalone: true, name: "hexify" }); }
62
+ }
63
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.0", ngImport: i0, type: NgtHexify, decorators: [{
64
+ type: Pipe,
65
+ args: [{ name: 'hexify', pure: true, standalone: true }]
66
+ }] });
67
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGV4aWZ5LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvcGlwZXMvaGV4aWZ5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLGVBQWUsQ0FBQzs7QUFHN0MsTUFBTSxPQUFPLFNBQVM7SUFEdEI7UUFFUyxhQUFRLEdBQUcsTUFBTSxDQUFDLFFBQVEsRUFBRSxFQUFFLFFBQVEsRUFBRSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0tBK0R4RDtJQTVEQTs7Ozs7Ozs7O09BU0c7SUFDSCxTQUFTLENBQUMsS0FBYTtRQUN0QixJQUFJLEtBQUssSUFBSSxJQUFJO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFFbkMsSUFBSSxLQUFLLENBQUMsVUFBVSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUM7WUFDM0IsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUVELElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDZixJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsQ0FBQztRQUNwRSxDQUFDO1FBRUQsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFFL0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1FBQzNCLE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDO1FBRXpDLElBQUksYUFBYSxDQUFDLFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDO1lBQ25DLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLGFBQWEsQ0FBQyxDQUFDO1FBQzlDLENBQUM7UUFFRCxJQUFJLENBQUMsYUFBYSxDQUFDLFVBQVUsQ0FBQyxNQUFNLENBQUM7WUFBRSxPQUFPLFFBQVEsQ0FBQztRQUV2RCxNQUFNLEtBQUssR0FBRyxtREFBbUQsQ0FBQztRQUNsRSxNQUFNLEtBQUssR0FBRyxhQUFhLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ3pDLElBQUksQ0FBQyxLQUFLO1lBQUUsT0FBTyxRQUFRLENBQUM7UUFFNUIsTUFBTSxDQUFDLEdBQUcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNqQyxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxHQUFHLFFBQVEsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDakMsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQztRQUVoRCx3Q0FBd0M7UUFDeEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUNwQyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3BDLE1BQU0sSUFBSSxHQUFHLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDcEMsTUFBTSxJQUFJLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBRXRELHNEQUFzRDtRQUN0RCxNQUFNLEdBQUcsR0FBRyxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksRUFBRSxDQUFDO1FBQzVDLE9BQU8sSUFBSSxDQUFDLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3BDLENBQUM7SUFFTyxpQkFBaUIsQ0FBQyxTQUFpQjtRQUMxQyxPQUFPLFFBQVEsQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUNqRCxDQUFDO0lBRU8sY0FBYyxDQUFDLFNBQWlCO1FBQ3ZDLE1BQU0sR0FBRyxHQUFHLFNBQVMsQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDbkMsT0FBTyxHQUFHLENBQUMsTUFBTSxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDO0lBQzNDLENBQUM7OEdBL0RXLFNBQVM7NEdBQVQsU0FBUzs7MkZBQVQsU0FBUztrQkFEckIsSUFBSTttQkFBQyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRE9DVU1FTlQgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IHsgaW5qZWN0LCBQaXBlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbkBQaXBlKHsgbmFtZTogJ2hleGlmeScsIHB1cmU6IHRydWUsIHN0YW5kYWxvbmU6IHRydWUgfSlcbmV4cG9ydCBjbGFzcyBOZ3RIZXhpZnkge1xuXHRwcml2YXRlIGRvY3VtZW50ID0gaW5qZWN0KERPQ1VNRU5ULCB7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXHRwcml2YXRlIGN0eD86IENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRCB8IG51bGw7XG5cblx0LyoqXG5cdCAqIHRyYW5zZm9ybXMgYTpcblx0ICogLSBoZXggc3RyaW5nIHRvIGEgaGV4IG51bWJlclxuXHQgKiAtIHJnYiBzdHJpbmcgdG8gYSBoZXggbnVtYmVyXG5cdCAqIC0gcmdiYSBzdHJpbmcgdG8gYSBoZXggbnVtYmVyXG5cdCAqIC0gY3NzIGNvbG9yIHN0cmluZyB0byBhIGhleCBudW1iZXJcblx0ICpcblx0ICogYWx3YXlzIGRlZmF1bHQgdG8gYmxhY2sgaWYgZmFpbGVkXG5cdCAqIEBwYXJhbSB2YWx1ZVxuXHQgKi9cblx0dHJhbnNmb3JtKHZhbHVlOiBzdHJpbmcpOiBudW1iZXIge1xuXHRcdGlmICh2YWx1ZSA9PSBudWxsKSByZXR1cm4gMHgwMDAwMDA7XG5cblx0XHRpZiAodmFsdWUuc3RhcnRzV2l0aCgnIycpKSB7XG5cdFx0XHRyZXR1cm4gdGhpcy5oZXhTdHJpbmdUb051bWJlcih2YWx1ZSk7XG5cdFx0fVxuXG5cdFx0aWYgKCF0aGlzLmN0eCkge1xuXHRcdFx0dGhpcy5jdHggPSB0aGlzLmRvY3VtZW50Py5jcmVhdGVFbGVtZW50KCdjYW52YXMnKS5nZXRDb250ZXh0KCcyZCcpO1xuXHRcdH1cblxuXHRcdGlmICghdGhpcy5jdHgpIHJldHVybiAweDAwMDAwMDtcblxuXHRcdHRoaXMuY3R4LmZpbGxTdHlsZSA9IHZhbHVlO1xuXHRcdGNvbnN0IGNvbXB1dGVkVmFsdWUgPSB0aGlzLmN0eC5maWxsU3R5bGU7XG5cblx0XHRpZiAoY29tcHV0ZWRWYWx1ZS5zdGFydHNXaXRoKCcjJykpIHtcblx0XHRcdHJldHVybiB0aGlzLmhleFN0cmluZ1RvTnVtYmVyKGNvbXB1dGVkVmFsdWUpO1xuXHRcdH1cblxuXHRcdGlmICghY29tcHV0ZWRWYWx1ZS5zdGFydHNXaXRoKCdyZ2JhJykpIHJldHVybiAweDAwMDAwMDtcblxuXHRcdGNvbnN0IHJlZ2V4ID0gL3JnYmE/XFwoKFxcZCspLFxccyooXFxkKyksXFxzKihcXGQrKSw/XFxzKihcXGQqXFwuP1xcZCspP1xcKS87XG5cdFx0Y29uc3QgbWF0Y2ggPSBjb21wdXRlZFZhbHVlLm1hdGNoKHJlZ2V4KTtcblx0XHRpZiAoIW1hdGNoKSByZXR1cm4gMHgwMDAwMDA7XG5cblx0XHRjb25zdCByID0gcGFyc2VJbnQobWF0Y2hbMV0sIDEwKTtcblx0XHRjb25zdCBnID0gcGFyc2VJbnQobWF0Y2hbMl0sIDEwKTtcblx0XHRjb25zdCBiID0gcGFyc2VJbnQobWF0Y2hbM10sIDEwKTtcblx0XHRjb25zdCBhID0gbWF0Y2hbNF0gPyBwYXJzZUZsb2F0KG1hdGNoWzRdKSA6IDEuMDtcblxuXHRcdC8vIENvbnZlcnQgdGhlIGNvbXBvbmVudHMgdG8gaGV4IHN0cmluZ3Ncblx0XHRjb25zdCBoZXhSID0gdGhpcy5jb21wb25lbnRUb0hleChyKTtcblx0XHRjb25zdCBoZXhHID0gdGhpcy5jb21wb25lbnRUb0hleChnKTtcblx0XHRjb25zdCBoZXhCID0gdGhpcy5jb21wb25lbnRUb0hleChiKTtcblx0XHRjb25zdCBoZXhBID0gdGhpcy5jb21wb25lbnRUb0hleChNYXRoLnJvdW5kKGEgKiAyNTUpKTtcblxuXHRcdC8vIENvbWJpbmUgdGhlIGhleCBjb21wb25lbnRzIGludG8gYSBzaW5nbGUgaGV4IHN0cmluZ1xuXHRcdGNvbnN0IGhleCA9IGAjJHtoZXhSfSR7aGV4R30ke2hleEJ9JHtoZXhBfWA7XG5cdFx0cmV0dXJuIHRoaXMuaGV4U3RyaW5nVG9OdW1iZXIoaGV4KTtcblx0fVxuXG5cdHByaXZhdGUgaGV4U3RyaW5nVG9OdW1iZXIoaGV4U3RyaW5nOiBzdHJpbmcpOiBudW1iZXIge1xuXHRcdHJldHVybiBwYXJzZUludChoZXhTdHJpbmcucmVwbGFjZSgnIycsICcnKSwgMTYpO1xuXHR9XG5cblx0cHJpdmF0ZSBjb21wb25lbnRUb0hleChjb21wb25lbnQ6IG51bWJlcik6IHN0cmluZyB7XG5cdFx0Y29uc3QgaGV4ID0gY29tcG9uZW50LnRvU3RyaW5nKDE2KTtcblx0XHRyZXR1cm4gaGV4Lmxlbmd0aCA9PT0gMSA/ICcwJyArIGhleCA6IGhleDtcblx0fVxufVxuIl19