angular-three 2.0.0-beta.27 → 2.0.0-beta.271

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 (124) hide show
  1. package/README.md +221 -4
  2. package/esm2022/index.mjs +6 -13
  3. package/esm2022/lib/canvas.mjs +131 -196
  4. package/esm2022/lib/directives/args.mjs +46 -20
  5. package/esm2022/lib/dom/events.mjs +2 -2
  6. package/esm2022/lib/events.mjs +33 -31
  7. package/esm2022/lib/html.mjs +39 -0
  8. package/esm2022/lib/instance.mjs +43 -36
  9. package/esm2022/lib/loader.mjs +60 -33
  10. package/esm2022/lib/loop.mjs +28 -25
  11. package/esm2022/lib/portal.mjs +173 -193
  12. package/esm2022/lib/renderer/catalogue.mjs +3 -3
  13. package/esm2022/lib/renderer/constants.mjs +5 -6
  14. package/esm2022/lib/renderer/index.mjs +357 -231
  15. package/esm2022/lib/renderer/state.mjs +49 -0
  16. package/esm2022/lib/renderer/utils.mjs +84 -87
  17. package/esm2022/lib/roots.mjs +99 -76
  18. package/esm2022/lib/routed-scene.mjs +6 -7
  19. package/esm2022/lib/store.mjs +170 -194
  20. package/esm2022/lib/three-types.mjs +2 -2
  21. package/esm2022/lib/utils/apply-props.mjs +24 -28
  22. package/esm2022/lib/utils/attach.mjs +13 -10
  23. package/esm2022/lib/utils/before-render.mjs +12 -0
  24. package/esm2022/lib/utils/is.mjs +6 -5
  25. package/esm2022/lib/utils/make.mjs +19 -17
  26. package/esm2022/lib/utils/object-events.mjs +29 -0
  27. package/esm2022/lib/utils/parameters.mjs +78 -0
  28. package/esm2022/lib/utils/resolve-ref.mjs +8 -0
  29. package/esm2022/lib/utils/signal-store.mjs +59 -60
  30. package/esm2022/lib/utils/update.mjs +6 -2
  31. package/fesm2022/angular-three.mjs +2346 -2662
  32. package/fesm2022/angular-three.mjs.map +1 -1
  33. package/index.d.ts +8 -12
  34. package/lib/canvas.d.ts +398 -53
  35. package/lib/directives/args.d.ts +14 -7
  36. package/lib/dom/events.d.ts +3 -3
  37. package/lib/events.d.ts +15 -15
  38. package/lib/html.d.ts +17 -0
  39. package/lib/instance.d.ts +25 -20
  40. package/lib/loader.d.ts +19 -7
  41. package/lib/loop.d.ts +10 -58
  42. package/lib/portal.d.ts +55 -48
  43. package/lib/renderer/catalogue.d.ts +7 -3
  44. package/lib/renderer/constants.d.ts +4 -5
  45. package/lib/renderer/index.d.ts +65 -4
  46. package/lib/renderer/state.d.ts +24 -0
  47. package/lib/renderer/utils.d.ts +8 -26
  48. package/lib/roots.d.ts +13 -7
  49. package/lib/store.d.ts +30 -33
  50. package/lib/three-types.d.ts +148 -147
  51. package/lib/utils/apply-props.d.ts +2 -3
  52. package/lib/utils/attach.d.ts +6 -6
  53. package/lib/{before-render.d.ts → utils/before-render.d.ts} +1 -1
  54. package/lib/utils/is.d.ts +15 -14
  55. package/lib/utils/make.d.ts +10 -13
  56. package/lib/utils/object-events.d.ts +9 -0
  57. package/lib/utils/parameters.d.ts +17 -0
  58. package/lib/utils/resolve-ref.d.ts +2 -0
  59. package/lib/utils/signal-store.d.ts +13 -4
  60. package/lib/utils/update.d.ts +1 -1
  61. package/metadata.json +1 -1
  62. package/package.json +30 -11
  63. package/web-types.json +1 -1
  64. package/esm2022/lib/before-render.mjs +0 -13
  65. package/esm2022/lib/directives/common.mjs +0 -41
  66. package/esm2022/lib/directives/key.mjs +0 -29
  67. package/esm2022/lib/directives/parent.mjs +0 -35
  68. package/esm2022/lib/directives/repeat.mjs +0 -17
  69. package/esm2022/lib/ref.mjs +0 -48
  70. package/esm2022/lib/renderer/store.mjs +0 -408
  71. package/esm2022/lib/utils/assert-injector.mjs +0 -6
  72. package/esm2022/lib/utils/create-injection-token.mjs +0 -47
  73. package/esm2022/lib/utils/safe-detect-changes.mjs +0 -17
  74. package/lib/directives/common.d.ts +0 -15
  75. package/lib/directives/key.d.ts +0 -10
  76. package/lib/directives/parent.d.ts +0 -11
  77. package/lib/directives/repeat.d.ts +0 -7
  78. package/lib/ref.d.ts +0 -8
  79. package/lib/renderer/store.d.ts +0 -67
  80. package/lib/utils/assert-injector.d.ts +0 -2
  81. package/lib/utils/create-injection-token.d.ts +0 -27
  82. package/lib/utils/safe-detect-changes.d.ts +0 -2
  83. package/plugin/README.md +0 -11
  84. package/plugin/generators.json +0 -49
  85. package/plugin/package.json +0 -6
  86. package/plugin/src/generators/init/compat.d.ts +0 -4
  87. package/plugin/src/generators/init/compat.js +0 -6
  88. package/plugin/src/generators/init/compat.js.map +0 -1
  89. package/plugin/src/generators/init/files/experience/experience.component.html__tmpl__ +0 -4
  90. package/plugin/src/generators/init/files/experience/experience.component.ts__tmpl__ +0 -18
  91. package/plugin/src/generators/init/generator.d.ts +0 -6
  92. package/plugin/src/generators/init/generator.js +0 -160
  93. package/plugin/src/generators/init/generator.js.map +0 -1
  94. package/plugin/src/generators/init/schema.json +0 -17
  95. package/plugin/src/generators/init-cannon/compat.d.ts +0 -2
  96. package/plugin/src/generators/init-cannon/compat.js +0 -6
  97. package/plugin/src/generators/init-cannon/compat.js.map +0 -1
  98. package/plugin/src/generators/init-cannon/generator.d.ts +0 -2
  99. package/plugin/src/generators/init-cannon/generator.js +0 -22
  100. package/plugin/src/generators/init-cannon/generator.js.map +0 -1
  101. package/plugin/src/generators/init-cannon/schema.json +0 -6
  102. package/plugin/src/generators/init-postprocessing/compat.d.ts +0 -2
  103. package/plugin/src/generators/init-postprocessing/compat.js +0 -6
  104. package/plugin/src/generators/init-postprocessing/compat.js.map +0 -1
  105. package/plugin/src/generators/init-postprocessing/generator.d.ts +0 -2
  106. package/plugin/src/generators/init-postprocessing/generator.js +0 -20
  107. package/plugin/src/generators/init-postprocessing/generator.js.map +0 -1
  108. package/plugin/src/generators/init-postprocessing/schema.json +0 -6
  109. package/plugin/src/generators/init-soba/compat.d.ts +0 -2
  110. package/plugin/src/generators/init-soba/compat.js +0 -6
  111. package/plugin/src/generators/init-soba/compat.js.map +0 -1
  112. package/plugin/src/generators/init-soba/generator.d.ts +0 -2
  113. package/plugin/src/generators/init-soba/generator.js +0 -26
  114. package/plugin/src/generators/init-soba/generator.js.map +0 -1
  115. package/plugin/src/generators/init-soba/schema.json +0 -6
  116. package/plugin/src/generators/utils.d.ts +0 -2
  117. package/plugin/src/generators/utils.js +0 -34
  118. package/plugin/src/generators/utils.js.map +0 -1
  119. package/plugin/src/generators/versions.d.ts +0 -12
  120. package/plugin/src/generators/versions.js +0 -16
  121. package/plugin/src/generators/versions.js.map +0 -1
  122. package/plugin/src/index.d.ts +0 -3
  123. package/plugin/src/index.js +0 -10
  124. package/plugin/src/index.js.map +0 -1
@@ -1,8 +1,9 @@
1
- import { ChangeDetectorRef, Injector, effect, inject, runInInjectionContext, signal } from '@angular/core';
2
- import { assertInjector } from './utils/assert-injector';
1
+ import { afterNextRender, signal } from '@angular/core';
2
+ import { assertInjector } from 'ngxtension/assert-injector';
3
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
3
4
  import { makeObjectGraph } from './utils/make';
4
- import { safeDetectChanges } from './utils/safe-detect-changes';
5
5
  const cached = new Map();
6
+ const memoizedLoaders = new WeakMap();
6
7
  function normalizeInputs(input) {
7
8
  if (Array.isArray(input))
8
9
  return input;
@@ -10,10 +11,16 @@ function normalizeInputs(input) {
10
11
  return [input];
11
12
  return Object.values(input);
12
13
  }
13
- function load(loaderConstructorFactory, inputs, { extensions, onProgress, } = {}) {
14
+ function load(loaderConstructorFactory, inputs, { extensions, onLoad, onProgress, } = {}) {
14
15
  return () => {
15
16
  const urls = normalizeInputs(inputs());
16
- const loader = new (loaderConstructorFactory(urls))();
17
+ if (urls.some((url) => url.includes('undefined')))
18
+ return null;
19
+ let loader = memoizedLoaders.get(loaderConstructorFactory(urls));
20
+ if (!loader) {
21
+ loader = new (loaderConstructorFactory(urls))();
22
+ memoizedLoaders.set(loaderConstructorFactory(urls), loader);
23
+ }
17
24
  if (extensions)
18
25
  extensions(loader);
19
26
  // TODO: reevaluate this
@@ -21,46 +28,66 @@ function load(loaderConstructorFactory, inputs, { extensions, onProgress, } = {}
21
28
  if (!cached.has(url)) {
22
29
  cached.set(url, new Promise((resolve, reject) => {
23
30
  loader.load(url, (data) => {
24
- if ('scene' in data)
31
+ if ('scene' in data) {
25
32
  Object.assign(data, makeObjectGraph(data['scene']));
33
+ }
34
+ if (onLoad) {
35
+ onLoad(data);
36
+ }
26
37
  resolve(data);
27
- }, onProgress, (error) => reject(new Error(`[NGT] Could not load ${url}: ${error}`)));
38
+ }, onProgress, (error) => reject(new Error(`[NGT] Could not load ${url}: ${error?.message}`)));
28
39
  }));
29
40
  }
30
41
  return cached.get(url);
31
42
  });
32
43
  };
33
44
  }
34
- export function injectNgtLoader(loaderConstructorFactory, inputs, { extensions, onProgress, injector, } = {}) {
35
- injector = assertInjector(injectNgtLoader, injector);
36
- const response = signal(null);
37
- return runInInjectionContext(injector, () => {
38
- const cdr = inject(ChangeDetectorRef);
39
- const effector = load(loaderConstructorFactory, inputs, { extensions, onProgress });
40
- effect(() => {
41
- 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
- }, {});
53
- });
54
- safeDetectChanges(cdr);
55
- });
45
+ function _injectLoader(loaderConstructorFactory, inputs, { extensions, onProgress, onLoad, injector, } = {}) {
46
+ return assertInjector(_injectLoader, injector, () => {
47
+ const autoEffect = injectAutoEffect();
48
+ const response = signal(null);
49
+ afterNextRender(() => {
50
+ const effector = load(loaderConstructorFactory, inputs, { extensions, onProgress, onLoad });
51
+ autoEffect(() => {
52
+ const originalUrls = inputs();
53
+ const cachedEffect = effector();
54
+ if (cachedEffect === null) {
55
+ response.set(null);
56
+ }
57
+ else {
58
+ Promise.all(cachedEffect).then((results) => {
59
+ response.update(() => {
60
+ if (Array.isArray(originalUrls))
61
+ return results;
62
+ if (typeof originalUrls === 'string')
63
+ return results[0];
64
+ const keys = Object.keys(originalUrls);
65
+ return keys.reduce((result, key) => {
66
+ result[key] = results[keys.indexOf(key)];
67
+ return result;
68
+ }, {});
69
+ });
70
+ });
71
+ }
72
+ }, { allowSignalWrites: true });
56
73
  });
57
74
  return response.asReadonly();
58
75
  });
59
76
  }
60
- injectNgtLoader['preload'] = (loaderConstructorFactory, inputs, extensions) => {
61
- Promise.all(load(loaderConstructorFactory, inputs, { extensions })());
77
+ _injectLoader.preload = (loaderConstructorFactory, inputs, extensions) => {
78
+ const effects = load(loaderConstructorFactory, inputs, { extensions })();
79
+ if (effects) {
80
+ void Promise.all(effects);
81
+ }
62
82
  };
63
- injectNgtLoader['destroy'] = () => {
83
+ _injectLoader.destroy = () => {
64
84
  cached.clear();
65
85
  };
66
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLEVBQWUsTUFBTSxlQUFlLENBQUM7QUFHeEgsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3pELE9BQU8sRUFBRSxlQUFlLEVBQXFCLE1BQU0sY0FBYyxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLDZCQUE2QixDQUFDO0FBMEJoRSxNQUFNLE1BQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBRXpCLFNBQVMsZUFBZSxDQUFDLEtBQWlEO0lBQ3pFLElBQUksS0FBSyxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUM7UUFBRSxPQUFPLEtBQUssQ0FBQztJQUN2QyxJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVE7UUFBRSxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDOUMsT0FBTyxNQUFNLENBQUMsTUFBTSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzdCLENBQUM7QUFFRCxTQUFTLElBQUksQ0FLWix3QkFBa0UsRUFDbEUsTUFBa0IsRUFDbEIsRUFDQyxVQUFVLEVBQ1YsVUFBVSxNQUlQLEVBQUU7SUFFTixPQUFPLEdBQXdCLEVBQUU7UUFDaEMsTUFBTSxJQUFJLEdBQUcsZUFBZSxDQUFDLE1BQU0sRUFBRSxDQUFDLENBQUM7UUFDdkMsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLHdCQUF3QixDQUFDLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQztRQUN0RCxJQUFJLFVBQVU7WUFBRSxVQUFVLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDbkMsd0JBQXdCO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLEdBQUcs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SSxDQUFDLHdCQUF3QixFQUFFLE1BQU0sRUFBRSxFQUFFLFVBQVUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZFLENBQUMsQ0FBQztBQUVGLGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxHQUFHLEVBQUU7SUFDakMsTUFBTSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ2hCLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBJbmplY3RvciwgZWZmZWN0LCBpbmplY3QsIHJ1bkluSW5qZWN0aW9uQ29udGV4dCwgc2lnbmFsLCB0eXBlIFNpZ25hbCB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUgeyBHTFRGIH0gZnJvbSAndGhyZWUvZXhhbXBsZXMvanNtL2xvYWRlcnMvR0xURkxvYWRlcic7XG5pbXBvcnQgdHlwZSB7IE5ndEFueVJlY29yZCB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgYXNzZXJ0SW5qZWN0b3IgfSBmcm9tICcuL3V0aWxzL2Fzc2VydC1pbmplY3Rvcic7XG5pbXBvcnQgeyBtYWtlT2JqZWN0R3JhcGgsIHR5cGUgTmd0T2JqZWN0TWFwIH0gZnJvbSAnLi91dGlscy9tYWtlJztcbmltcG9ydCB7IHNhZmVEZXRlY3RDaGFuZ2VzIH0gZnJvbSAnLi91dGlscy9zYWZlLWRldGVjdC1jaGFuZ2VzJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RMb2FkZXI8VD4gZXh0ZW5kcyBUSFJFRS5Mb2FkZXIge1xuXHRsb2FkKFxuXHRcdHVybDogc3RyaW5nLFxuXHRcdG9uTG9hZD86IChyZXN1bHQ6IFQpID0+IHZvaWQsXG5cdFx0b25Qcm9ncmVzcz86IChldmVudDogUHJvZ3Jlc3NFdmVudCkgPT4gdm9pZCxcblx0XHRvbkVycm9yPzogKGV2ZW50OiBFcnJvckV2ZW50KSA9PiB2b2lkLFxuXHQpOiB1bmtub3duO1xuXHRsb2FkQXN5bmModXJsOiBzdHJpbmcsIG9uUHJvZ3Jlc3M/OiAoZXZlbnQ6IFByb2dyZXNzRXZlbnQpID0+IHZvaWQpOiBQcm9taXNlPFQ+O1xufVxuXG5leHBvcnQgdHlwZSBOZ3RMb2FkZXJQcm90bzxUPiA9IG5ldyAoLi4uYXJnczogYW55KSA9PiBOZ3RMb2FkZXI8VCBleHRlbmRzIHVua25vd24gPyBhbnkgOiBUPjtcbmV4cG9ydCB0eXBlIE5ndExvYWRlclJldHVyblR5cGU8VCwgTCBleHRlbmRzIE5ndExvYWRlclByb3RvPFQ+PiA9IFQgZXh0ZW5kcyB1bmtub3duXG5cdD8gQXdhaXRlZDxSZXR1cm5UeXBlPEluc3RhbmNlVHlwZTxMPlsnbG9hZEFzeW5jJ10+PlxuXHQ6IFQ7XG5cbmV4cG9ydCB0eXBlIE5ndExvYWRlckV4dGVuc2lvbnM8VCBleHRlbmRzIHsgcHJvdG90eXBlOiBOZ3RMb2FkZXJQcm90bzxhbnk+IH0+ID0gKGxvYWRlcjogVFsncHJvdG90eXBlJ10pID0+IHZvaWQ7XG5leHBvcnQgdHlwZSBOZ3RDb25kaXRpb25hbFR5cGU8Q2hpbGQsIFBhcmVudCwgVHJ1dGh5LCBGYWxzeT4gPSBDaGlsZCBleHRlbmRzIFBhcmVudCA/IFRydXRoeSA6IEZhbHN5O1xuZXhwb3J0IHR5cGUgTmd0QnJhbmNoaW5nUmV0dXJuPFQsIFBhcmVudCwgQ29lcmNlZD4gPSBOZ3RDb25kaXRpb25hbFR5cGU8VCwgUGFyZW50LCBDb2VyY2VkLCBUPjtcblxuZXhwb3J0IHR5cGUgTmd0TG9hZGVyUmVzdWx0czxcblx0VElucHV0IGV4dGVuZHMgc3RyaW5nIHwgc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuXHRUUmV0dXJuLFxuPiA9IFRJbnB1dCBleHRlbmRzIHN0cmluZ1tdID8gVFJldHVybltdIDogVElucHV0IGV4dGVuZHMgb2JqZWN0ID8geyBba2V5IGluIGtleW9mIFRJbnB1dF06IFRSZXR1cm4gfSA6IFRSZXR1cm47XG5cbmNvbnN0IGNhY2hlZCA9IG5ldyBNYXAoKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplSW5wdXRzKGlucHV0OiBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcblx0aWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG5cdGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSByZXR1cm4gW2lucHV0XTtcblx0cmV0dXJuIE9iamVjdC52YWx1ZXMoaW5wdXQpO1xufVxuXG5mdW5jdGlvbiBsb2FkPFxuXHRURGF0YSxcblx0VFVybCBleHRlbmRzIHN0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPixcblx0VExvYWRlckNvbnN0cnVjdG9yIGV4dGVuZHMgTmd0TG9hZGVyUHJvdG88VERhdGE+LFxuPihcblx0bG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5OiAoaW5wdXRzOiBzdHJpbmdbXSkgPT4gVExvYWRlckNvbnN0cnVjdG9yLFxuXHRpbnB1dHM6ICgpID0+IFRVcmwsXG5cdHtcblx0XHRleHRlbnNpb25zLFxuXHRcdG9uUHJvZ3Jlc3MsXG5cdH06IHtcblx0XHRleHRlbnNpb25zPzogTmd0TG9hZGVyRXh0ZW5zaW9uczxUTG9hZGVyQ29uc3RydWN0b3I+O1xuXHRcdG9uUHJvZ3Jlc3M/OiAoZXZlbnQ6IFByb2dyZXNzRXZlbnQpID0+IHZvaWQ7XG5cdH0gPSB7fSxcbikge1xuXHRyZXR1cm4gKCk6IEFycmF5PFByb21pc2U8YW55Pj4gPT4ge1xuXHRcdGNvbnN0IHVybHMgPSBub3JtYWxpemVJbnB1dHMoaW5wdXRzKCkpO1xuXHRcdGNvbnN0IGxvYWRlciA9IG5ldyAobG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5KHVybHMpKSgpO1xuXHRcdGlmIChleHRlbnNpb25zKSBleHRlbnNpb25zKGxvYWRlcik7XG5cdFx0Ly8gVE9ETzogcmVldmFsdWF0ZSB0aGlzXG5cdFx0cmV0dXJuIHVybHMubWFwKCh1cmwpID0+IHtcblx0XHRcdGlmICghY2FjaGVkLmhhcyh1cmwpKSB7XG5cdFx0XHRcdGNhY2hlZC5zZXQoXG5cdFx0XHRcdFx0dXJsLFxuXHRcdFx0XHRcdG5ldyBQcm9taXNlPFREYXRhPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdFx0XHRsb2FkZXIubG9hZChcblx0XHRcdFx0XHRcdFx0dXJsLFxuXHRcdFx0XHRcdFx0XHQoZGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmICgnc2NlbmUnIGluIChkYXRhIGFzIE5ndEFueVJlY29yZCkpXG5cdFx0XHRcdFx0XHRcdFx0XHRPYmplY3QuYXNzaWduKFxuXHRcdFx0XHRcdFx0XHRcdFx0XHRkYXRhIGFzIE5ndEFueVJlY29yZCxcblx0XHRcdFx0XHRcdFx0XHRcdFx0bWFrZU9iamVjdEdyYXBoKChkYXRhIGFzIE5ndEFueVJlY29yZClbJ3NjZW5lJ10pLFxuXHRcdFx0XHRcdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRcdFx0XHRyZXNvbHZlKGRhdGEpO1xuXHRcdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0XHRvblByb2dyZXNzLFxuXHRcdFx0XHRcdFx0XHQoZXJyb3IpID0+IHJlamVjdChuZXcgRXJyb3IoYFtOR1RdIENvdWxkIG5vdCBsb2FkICR7dXJsfTogJHtlcnJvcn1gKSksXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGNhY2hlZC5nZXQodXJsKSE7XG5cdFx0fSk7XG5cdH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3ROZ3RMb2FkZXI8XG5cdFREYXRhLFxuXHRUVXJsIGV4dGVuZHMgc3RyaW5nIHwgc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuXHRUTG9hZGVyQ29uc3RydWN0b3IgZXh0ZW5kcyBOZ3RMb2FkZXJQcm90bzxURGF0YT4sXG5cdFRSZXR1cm4gPSBOZ3RMb2FkZXJSZXR1cm5UeXBlPFREYXRhLCBUTG9hZGVyQ29uc3RydWN0b3I+LFxuPihcblx0bG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5OiAoaW5wdXRzOiBzdHJpbmdbXSkgPT4gVExvYWRlckNvbnN0cnVjdG9yLFxuXHRpbnB1dHM6ICgpID0+IFRVcmwsXG5cdHtcblx0XHRleHRlbnNpb25zLFxuXHRcdG9uUHJvZ3Jlc3MsXG5cdFx0aW5qZWN0b3IsXG5cdH06IHtcblx0XHRleHRlbnNpb25zPzogTmd0TG9hZGVyRXh0ZW5zaW9uczxUTG9hZGVyQ29uc3RydWN0b3I+O1xuXHRcdG9uUHJvZ3Jlc3M/OiAoZXZlbnQ6IFByb2dyZXNzRXZlbnQpID0+IHZvaWQ7XG5cdFx0aW5qZWN0b3I/OiBJbmplY3Rvcjtcblx0fSA9IHt9LFxuKTogU2lnbmFsPE5ndExvYWRlclJlc3VsdHM8VFVybCwgTmd0QnJhbmNoaW5nUmV0dXJuPFRSZXR1cm4sIEdMVEYsIEdMVEYgJiBOZ3RPYmplY3RNYXA+PiB8IG51bGw+IHtcblx0aW5qZWN0b3IgPSBhc3NlcnRJbmplY3RvcihpbmplY3ROZ3RMb2FkZXIsIGluamVjdG9yKTtcblx0Y29uc3QgcmVzcG9uc2UgPSBzaWduYWw8Tmd0TG9hZGVyUmVzdWx0czxUVXJsLCBOZ3RCcmFuY2hpbmdSZXR1cm48VFJldHVybiwgR0xURiwgR0xURiAmIE5ndE9iamVjdE1hcD4+IHwgbnVsbD4oXG5cdFx0bnVsbCxcblx0KTtcblx0cmV0dXJuIHJ1bkluSW5qZWN0aW9uQ29udGV4dChpbmplY3RvciwgKCkgPT4ge1xuXHRcdGNvbnN0IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG5cdFx0Y29uc3QgZWZmZWN0b3IgPSBsb2FkKGxvYWRlckNvbnN0cnVjdG9yRmFjdG9yeSwgaW5wdXRzLCB7IGV4dGVuc2lvbnMsIG9uUHJvZ3Jlc3MgfSk7XG5cblx0XHRlZmZlY3QoKCkgPT4ge1xuXHRcdFx0Y29uc3Qgb3JpZ2luYWxVcmxzID0gaW5wdXRzKCk7XG5cdFx0XHRQcm9taXNlLmFsbChlZmZlY3RvcigpKS50aGVuKChyZXN1bHRzKSA9PiB7XG5cdFx0XHRcdHJlc3BvbnNlLnVwZGF0ZSgoKSA9PiB7XG5cdFx0XHRcdFx0aWYgKEFycmF5LmlzQXJyYXkob3JpZ2luYWxVcmxzKSkgcmV0dXJuIHJlc3VsdHM7XG5cdFx0XHRcdFx0aWYgKHR5cGVvZiBvcmlnaW5hbFVybHMgPT09ICdzdHJpbmcnKSByZXR1cm4gcmVzdWx0c1swXTtcblx0XHRcdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMob3JpZ2luYWxVcmxzKTtcblx0XHRcdFx0XHRyZXR1cm4ga2V5cy5yZWR1Y2UoXG5cdFx0XHRcdFx0XHQocmVzdWx0LCBrZXkpID0+IHtcblx0XHRcdFx0XHRcdFx0KHJlc3VsdCBhcyBOZ3RBbnlSZWNvcmQpW2tleV0gPSByZXN1bHRzW2tleXMuaW5kZXhPZihrZXkpXTtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHR7fSBhcyB7IFtrZXkgaW4ga2V5b2YgVFVybF06IE5ndEJyYW5jaGluZ1JldHVybjxUUmV0dXJuLCBHTFRGLCBHTFRGICYgTmd0T2JqZWN0TWFwPiB9LFxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRzYWZlRGV0ZWN0Q2hhbmdlcyhjZHIpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gcmVzcG9uc2UuYXNSZWFkb25seSgpO1xuXHR9KTtcbn1cblxuaW5qZWN0Tmd0TG9hZGVyWydwcmVsb2FkJ10gPSA8XG5cdFREYXRhLFxuXHRUVXJsIGV4dGVuZHMgc3RyaW5nIHwgc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuXHRUTG9hZGVyQ29uc3RydWN0b3IgZXh0ZW5kcyBOZ3RMb2FkZXJQcm90bzxURGF0YT4sXG4+KFxuXHRsb2FkZXJDb25zdHJ1Y3RvckZhY3Rvcnk6IChpbnB1dHM6IHN0cmluZ1tdKSA9PiBUTG9hZGVyQ29uc3RydWN0b3IsXG5cdGlucHV0czogKCkgPT4gVFVybCxcblx0ZXh0ZW5zaW9ucz86IE5ndExvYWRlckV4dGVuc2lvbnM8VExvYWRlckNvbnN0cnVjdG9yPixcbikgPT4ge1xuXHRQcm9taXNlLmFsbChsb2FkKGxvYWRlckNvbnN0cnVjdG9yRmFjdG9yeSwgaW5wdXRzLCB7IGV4dGVuc2lvbnMgfSkoKSk7XG59O1xuXG5pbmplY3ROZ3RMb2FkZXJbJ2Rlc3Ryb3knXSA9ICgpID0+IHtcblx0Y2FjaGVkLmNsZWFyKCk7XG59O1xuIl19
86
+ _injectLoader.clear = (urls) => {
87
+ const urlToClear = Array.isArray(urls) ? urls : [urls];
88
+ urlToClear.forEach((url) => {
89
+ cached.delete(url);
90
+ });
91
+ };
92
+ export const injectLoader = _injectLoader;
93
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy9jb3JlL3NyYy9saWIvbG9hZGVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBb0IsZUFBZSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMxRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFHMUQsT0FBTyxFQUFnQixlQUFlLEVBQUUsTUFBTSxjQUFjLENBQUM7QUE0QjdELE1BQU0sTUFBTSxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDekIsTUFBTSxlQUFlLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUV0QyxTQUFTLGVBQWUsQ0FBQyxLQUFpRDtJQUN6RSxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDO1FBQUUsT0FBTyxLQUFLLENBQUM7SUFDdkMsSUFBSSxPQUFPLEtBQUssS0FBSyxRQUFRO1FBQUUsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBQzlDLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM3QixDQUFDO0FBRUQsU0FBUyxJQUFJLENBS1osd0JBQWtFLEVBQ2xFLE1BQWtCLEVBQ2xCLEVBQ0MsVUFBVSxFQUNWLE1BQU0sRUFDTixVQUFVLE1BS1AsRUFBRTtJQUVOLE9BQU8sR0FBK0IsRUFBRTtRQUN2QyxNQUFNLElBQUksR0FBRyxlQUFlLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQztRQUV2QyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLENBQUM7WUFBRSxPQUFPLElBQUksQ0FBQztRQUUvRCxJQUFJLE1BQU0sR0FBa0IsZUFBZSxDQUFDLEdB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QUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUM7SUFDdkQsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1FBQzFCLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDcEIsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDLENBQUM7QUFHRixNQUFNLENBQUMsTUFBTSxZQUFZLEdBQXNCLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdG9yLCBTaWduYWwsIGFmdGVyTmV4dFJlbmRlciwgc2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBhc3NlcnRJbmplY3RvciB9IGZyb20gJ25neHRlbnNpb24vYXNzZXJ0LWluamVjdG9yJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IExvYWRlciwgT2JqZWN0M0QgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBOZ3RBbnlSZWNvcmQgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IE5ndE9iamVjdE1hcCwgbWFrZU9iamVjdEdyYXBoIH0gZnJvbSAnLi91dGlscy9tYWtlJztcblxuZXhwb3J0IHR5cGUgTmd0R0xURkxpa2UgPSB7IHNjZW5lOiBPYmplY3QzRCB9O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndExvYWRlcjxUPiBleHRlbmRzIExvYWRlciB7XG5cdGxvYWQoXG5cdFx0dXJsOiBzdHJpbmcsXG5cdFx0b25Mb2FkPzogKHJlc3VsdDogVCkgPT4gdm9pZCxcblx0XHRvblByb2dyZXNzPzogKGV2ZW50OiBQcm9ncmVzc0V2ZW50KSA9PiB2b2lkLFxuXHRcdG9uRXJyb3I/OiAoZXZlbnQ6IHVua25vd24pID0+IHZvaWQsXG5cdCk6IHVua25vd247XG5cdGxvYWRBc3luYyh1cmw6IHN0cmluZywgb25Qcm9ncmVzcz86IChldmVudDogUHJvZ3Jlc3NFdmVudCkgPT4gdm9pZCk6IFByb21pc2U8VD47XG59XG5cbmV4cG9ydCB0eXBlIE5ndExvYWRlclByb3RvPFQ+ID0gbmV3ICguLi5hcmdzOiBhbnkpID0+IE5ndExvYWRlcjxUIGV4dGVuZHMgdW5rbm93biA/IGFueSA6IFQ+O1xuZXhwb3J0IHR5cGUgTmd0TG9hZGVyUmV0dXJuVHlwZTxULCBMIGV4dGVuZHMgTmd0TG9hZGVyUHJvdG88VD4+ID0gVCBleHRlbmRzIHVua25vd25cblx0PyBBd2FpdGVkPFJldHVyblR5cGU8SW5zdGFuY2VUeXBlPEw+Wydsb2FkQXN5bmMnXT4+XG5cdDogVDtcblxuZXhwb3J0IHR5cGUgTmd0TG9hZGVyRXh0ZW5zaW9uczxUIGV4dGVuZHMgeyBwcm90b3R5cGU6IE5ndExvYWRlclByb3RvPGFueT4gfT4gPSAobG9hZGVyOiBUWydwcm90b3R5cGUnXSkgPT4gdm9pZDtcbmV4cG9ydCB0eXBlIE5ndENvbmRpdGlvbmFsVHlwZTxDaGlsZCwgUGFyZW50LCBUcnV0aHksIEZhbHN5PiA9IENoaWxkIGV4dGVuZHMgUGFyZW50ID8gVHJ1dGh5IDogRmFsc3k7XG5leHBvcnQgdHlwZSBOZ3RCcmFuY2hpbmdSZXR1cm48VCwgUGFyZW50LCBDb2VyY2VkPiA9IE5ndENvbmRpdGlvbmFsVHlwZTxULCBQYXJlbnQsIENvZXJjZWQsIFQ+O1xuXG5leHBvcnQgdHlwZSBOZ3RMb2FkZXJSZXN1bHRzPFxuXHRUSW5wdXQgZXh0ZW5kcyBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4sXG5cdFRSZXR1cm4sXG4+ID0gVElucHV0IGV4dGVuZHMgc3RyaW5nW10gPyBUUmV0dXJuW10gOiBUSW5wdXQgZXh0ZW5kcyBvYmplY3QgPyB7IFtrZXkgaW4ga2V5b2YgVElucHV0XTogVFJldHVybiB9IDogVFJldHVybjtcblxuY29uc3QgY2FjaGVkID0gbmV3IE1hcCgpO1xuY29uc3QgbWVtb2l6ZWRMb2FkZXJzID0gbmV3IFdlYWtNYXAoKTtcblxuZnVuY3Rpb24gbm9ybWFsaXplSW5wdXRzKGlucHV0OiBzdHJpbmcgfCBzdHJpbmdbXSB8IFJlY29yZDxzdHJpbmcsIHN0cmluZz4pIHtcblx0aWYgKEFycmF5LmlzQXJyYXkoaW5wdXQpKSByZXR1cm4gaW5wdXQ7XG5cdGlmICh0eXBlb2YgaW5wdXQgPT09ICdzdHJpbmcnKSByZXR1cm4gW2lucHV0XTtcblx0cmV0dXJuIE9iamVjdC52YWx1ZXMoaW5wdXQpO1xufVxuXG5mdW5jdGlvbiBsb2FkPFxuXHRURGF0YSxcblx0VFVybCBleHRlbmRzIHN0cmluZyB8IHN0cmluZ1tdIHwgUmVjb3JkPHN0cmluZywgc3RyaW5nPixcblx0VExvYWRlckNvbnN0cnVjdG9yIGV4dGVuZHMgTmd0TG9hZGVyUHJvdG88VERhdGE+LFxuPihcblx0bG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5OiAoaW5wdXRzOiBzdHJpbmdbXSkgPT4gVExvYWRlckNvbnN0cnVjdG9yLFxuXHRpbnB1dHM6ICgpID0+IFRVcmwsXG5cdHtcblx0XHRleHRlbnNpb25zLFxuXHRcdG9uTG9hZCxcblx0XHRvblByb2dyZXNzLFxuXHR9OiB7XG5cdFx0ZXh0ZW5zaW9ucz86IE5ndExvYWRlckV4dGVuc2lvbnM8VExvYWRlckNvbnN0cnVjdG9yPjtcblx0XHRvbkxvYWQ/OiAoZGF0YTogVERhdGEpID0+IHZvaWQ7XG5cdFx0b25Qcm9ncmVzcz86IChldmVudDogUHJvZ3Jlc3NFdmVudCkgPT4gdm9pZDtcblx0fSA9IHt9LFxuKSB7XG5cdHJldHVybiAoKTogQXJyYXk8UHJvbWlzZTxhbnk+PiB8IG51bGwgPT4ge1xuXHRcdGNvbnN0IHVybHMgPSBub3JtYWxpemVJbnB1dHMoaW5wdXRzKCkpO1xuXG5cdFx0aWYgKHVybHMuc29tZSgodXJsKSA9PiB1cmwuaW5jbHVkZXMoJ3VuZGVmaW5lZCcpKSkgcmV0dXJuIG51bGw7XG5cblx0XHRsZXQgbG9hZGVyOiBMb2FkZXI8VERhdGE+ID0gbWVtb2l6ZWRMb2FkZXJzLmdldChsb2FkZXJDb25zdHJ1Y3RvckZhY3RvcnkodXJscykpO1xuXHRcdGlmICghbG9hZGVyKSB7XG5cdFx0XHRsb2FkZXIgPSBuZXcgKGxvYWRlckNvbnN0cnVjdG9yRmFjdG9yeSh1cmxzKSkoKTtcblx0XHRcdG1lbW9pemVkTG9hZGVycy5zZXQobG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5KHVybHMpLCBsb2FkZXIpO1xuXHRcdH1cblxuXHRcdGlmIChleHRlbnNpb25zKSBleHRlbnNpb25zKGxvYWRlcik7XG5cdFx0Ly8gVE9ETzogcmVldmFsdWF0ZSB0aGlzXG5cdFx0cmV0dXJuIHVybHMubWFwKCh1cmwpID0+IHtcblx0XHRcdGlmICghY2FjaGVkLmhhcyh1cmwpKSB7XG5cdFx0XHRcdGNhY2hlZC5zZXQoXG5cdFx0XHRcdFx0dXJsLFxuXHRcdFx0XHRcdG5ldyBQcm9taXNlPFREYXRhPigocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG5cdFx0XHRcdFx0XHRsb2FkZXIubG9hZChcblx0XHRcdFx0XHRcdFx0dXJsLFxuXHRcdFx0XHRcdFx0XHQoZGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdGlmICgnc2NlbmUnIGluIChkYXRhIGFzIE5ndEFueVJlY29yZCkpIHtcblx0XHRcdFx0XHRcdFx0XHRcdE9iamVjdC5hc3NpZ24oZGF0YSBhcyBOZ3RBbnlSZWNvcmQsIG1ha2VPYmplY3RHcmFwaCgoZGF0YSBhcyBOZ3RBbnlSZWNvcmQpWydzY2VuZSddKSk7XG5cdFx0XHRcdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0XHRcdFx0aWYgKG9uTG9hZCkge1xuXHRcdFx0XHRcdFx0XHRcdFx0b25Mb2FkKGRhdGEpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0XHRcdHJlc29sdmUoZGF0YSk7XG5cdFx0XHRcdFx0XHRcdH0sXG5cdFx0XHRcdFx0XHRcdG9uUHJvZ3Jlc3MsXG5cdFx0XHRcdFx0XHRcdChlcnJvcikgPT4gcmVqZWN0KG5ldyBFcnJvcihgW05HVF0gQ291bGQgbm90IGxvYWQgJHt1cmx9OiAkeyhlcnJvciBhcyBFcnJvckV2ZW50KT8ubWVzc2FnZX1gKSksXG5cdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdH0pLFxuXHRcdFx0XHQpO1xuXHRcdFx0fVxuXHRcdFx0cmV0dXJuIGNhY2hlZC5nZXQodXJsKSE7XG5cdFx0fSk7XG5cdH07XG59XG5cbmZ1bmN0aW9uIF9pbmplY3RMb2FkZXI8XG5cdFREYXRhLFxuXHRUVXJsIGV4dGVuZHMgc3RyaW5nIHwgc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuXHRUTG9hZGVyQ29uc3RydWN0b3IgZXh0ZW5kcyBOZ3RMb2FkZXJQcm90bzxURGF0YT4sXG5cdFRSZXR1cm4gPSBOZ3RMb2FkZXJSZXR1cm5UeXBlPFREYXRhLCBUTG9hZGVyQ29uc3RydWN0b3I+LFxuPihcblx0bG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5OiAoaW5wdXRzOiBzdHJpbmdbXSkgPT4gVExvYWRlckNvbnN0cnVjdG9yLFxuXHRpbnB1dHM6ICgpID0+IFRVcmwsXG5cdHtcblx0XHRleHRlbnNpb25zLFxuXHRcdG9uUHJvZ3Jlc3MsXG5cdFx0b25Mb2FkLFxuXHRcdGluamVjdG9yLFxuXHR9OiB7XG5cdFx0ZXh0ZW5zaW9ucz86IE5ndExvYWRlckV4dGVuc2lvbnM8VExvYWRlckNvbnN0cnVjdG9yPjtcblx0XHRvblByb2dyZXNzPzogKGV2ZW50OiBQcm9ncmVzc0V2ZW50KSA9PiB2b2lkO1xuXHRcdG9uTG9hZD86IChkYXRhOiBURGF0YSkgPT4gdm9pZDtcblx0XHRpbmplY3Rvcj86IEluamVjdG9yO1xuXHR9ID0ge30sXG4pOiBTaWduYWw8Tmd0TG9hZGVyUmVzdWx0czxUVXJsLCBOZ3RCcmFuY2hpbmdSZXR1cm48VFJldHVybiwgTmd0R0xURkxpa2UsIE5ndEdMVEZMaWtlICYgTmd0T2JqZWN0TWFwPj4gfCBudWxsPiB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihfaW5qZWN0TG9hZGVyLCBpbmplY3RvciwgKCkgPT4ge1xuXHRcdGNvbnN0IGF1dG9FZmZlY3QgPSBpbmplY3RBdXRvRWZmZWN0KCk7XG5cdFx0Y29uc3QgcmVzcG9uc2UgPSBzaWduYWw8Tmd0TG9hZGVyUmVzdWx0czxcblx0XHRcdFRVcmwsXG5cdFx0XHROZ3RCcmFuY2hpbmdSZXR1cm48VFJldHVybiwgTmd0R0xURkxpa2UsIE5ndEdMVEZMaWtlICYgTmd0T2JqZWN0TWFwPlxuXHRcdD4gfCBudWxsPihudWxsKTtcblxuXHRcdGFmdGVyTmV4dFJlbmRlcigoKSA9PiB7XG5cdFx0XHRjb25zdCBlZmZlY3RvciA9IGxvYWQobG9hZGVyQ29uc3RydWN0b3JGYWN0b3J5LCBpbnB1dHMsIHsgZXh0ZW5zaW9ucywgb25Qcm9ncmVzcywgb25Mb2FkIH0pO1xuXHRcdFx0YXV0b0VmZmVjdChcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdGNvbnN0IG9yaWdpbmFsVXJscyA9IGlucHV0cygpO1xuXHRcdFx0XHRcdGNvbnN0IGNhY2hlZEVmZmVjdCA9IGVmZmVjdG9yKCk7XG5cdFx0XHRcdFx0aWYgKGNhY2hlZEVmZmVjdCA9PT0gbnVsbCkge1xuXHRcdFx0XHRcdFx0cmVzcG9uc2Uuc2V0KG51bGwpO1xuXHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRQcm9taXNlLmFsbChjYWNoZWRFZmZlY3QpLnRoZW4oKHJlc3VsdHMpID0+IHtcblx0XHRcdFx0XHRcdFx0cmVzcG9uc2UudXBkYXRlKCgpID0+IHtcblx0XHRcdFx0XHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheShvcmlnaW5hbFVybHMpKSByZXR1cm4gcmVzdWx0cztcblx0XHRcdFx0XHRcdFx0XHRpZiAodHlwZW9mIG9yaWdpbmFsVXJscyA9PT0gJ3N0cmluZycpIHJldHVybiByZXN1bHRzWzBdO1xuXHRcdFx0XHRcdFx0XHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhvcmlnaW5hbFVybHMpO1xuXHRcdFx0XHRcdFx0XHRcdHJldHVybiBrZXlzLnJlZHVjZShcblx0XHRcdFx0XHRcdFx0XHRcdChyZXN1bHQsIGtleSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRcdFx0XHQocmVzdWx0IGFzIE5ndEFueVJlY29yZClba2V5XSA9IHJlc3VsdHNba2V5cy5pbmRleE9mKGtleSldO1xuXHRcdFx0XHRcdFx0XHRcdFx0XHRyZXR1cm4gcmVzdWx0O1xuXHRcdFx0XHRcdFx0XHRcdFx0fSxcblx0XHRcdFx0XHRcdFx0XHRcdHt9IGFzIHsgW2tleSBpbiBrZXlvZiBUVXJsXTogTmd0QnJhbmNoaW5nUmV0dXJuPFRSZXR1cm4sIE5ndEdMVEZMaWtlLCBOZ3RHTFRGTGlrZSAmIE5ndE9iamVjdE1hcD4gfSxcblx0XHRcdFx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0fSxcblx0XHRcdFx0eyBhbGxvd1NpZ25hbFdyaXRlczogdHJ1ZSB9LFxuXHRcdFx0KTtcblx0XHR9KTtcblxuXHRcdHJldHVybiByZXNwb25zZS5hc1JlYWRvbmx5KCk7XG5cdH0pO1xufVxuXG5faW5qZWN0TG9hZGVyLnByZWxvYWQgPSA8XG5cdFREYXRhLFxuXHRUVXJsIGV4dGVuZHMgc3RyaW5nIHwgc3RyaW5nW10gfCBSZWNvcmQ8c3RyaW5nLCBzdHJpbmc+LFxuXHRUTG9hZGVyQ29uc3RydWN0b3IgZXh0ZW5kcyBOZ3RMb2FkZXJQcm90bzxURGF0YT4sXG4+KFxuXHRsb2FkZXJDb25zdHJ1Y3RvckZhY3Rvcnk6IChpbnB1dHM6IHN0cmluZ1tdKSA9PiBUTG9hZGVyQ29uc3RydWN0b3IsXG5cdGlucHV0czogKCkgPT4gVFVybCxcblx0ZXh0ZW5zaW9ucz86IE5ndExvYWRlckV4dGVuc2lvbnM8VExvYWRlckNvbnN0cnVjdG9yPixcbikgPT4ge1xuXHRjb25zdCBlZmZlY3RzID0gbG9hZChsb2FkZXJDb25zdHJ1Y3RvckZhY3RvcnksIGlucHV0cywgeyBleHRlbnNpb25zIH0pKCk7XG5cdGlmIChlZmZlY3RzKSB7XG5cdFx0dm9pZCBQcm9taXNlLmFsbChlZmZlY3RzKTtcblx0fVxufTtcblxuX2luamVjdExvYWRlci5kZXN0cm95ID0gKCkgPT4ge1xuXHRjYWNoZWQuY2xlYXIoKTtcbn07XG5cbl9pbmplY3RMb2FkZXIuY2xlYXIgPSAodXJsczogc3RyaW5nIHwgc3RyaW5nW10pID0+IHtcblx0Y29uc3QgdXJsVG9DbGVhciA9IEFycmF5LmlzQXJyYXkodXJscykgPyB1cmxzIDogW3VybHNdO1xuXHR1cmxUb0NsZWFyLmZvckVhY2goKHVybCkgPT4ge1xuXHRcdGNhY2hlZC5kZWxldGUodXJsKTtcblx0fSk7XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RJbmplY3RlZExvYWRlciA9IHR5cGVvZiBfaW5qZWN0TG9hZGVyO1xuZXhwb3J0IGNvbnN0IGluamVjdExvYWRlcjogTmd0SW5qZWN0ZWRMb2FkZXIgPSBfaW5qZWN0TG9hZGVyO1xuIl19
@@ -1,5 +1,5 @@
1
+ import { createInjectionToken } from 'ngxtension/create-injection-token';
1
2
  import { roots } from './roots';
2
- import { createInjectionToken } from './utils/create-injection-token';
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,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9vcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29yZS9zcmMvbGliL2xvb3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sbUNBQW1DLENBQUM7QUFDekUsT0FBTyxFQUFFLEtBQUssRUFBRSxNQUFNLFNBQVMsQ0FBQztBQU9oQyxTQUFTLFVBQVUsQ0FBQyxRQUFpQyxFQUFFLElBQWtCO0lBQ3hFLE1BQU0sR0FBRyxHQUFHLEVBQUUsUUFBUSxFQUFFLENBQUM7SUFDekIsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztJQUNkLE9BQU8sR0FBRyxFQUFFLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLENBQUM7QUFFRCxNQUFNLGFBQWEsR0FBaUIsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUM5QyxNQUFNLGtCQUFrQixHQUFpQixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ25ELE1BQU0saUJBQWlCLEdBQWlCLElBQUksR0FBRyxFQUFFLENBQUM7QUFFbEQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sU0FBUyxHQUFHLENBQUMsUUFBaUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUVwRzs7O0dBR0c7QUFDSCxNQUFNLENBQUMsTUFBTSxjQUFjLEdBQUcsQ0FBQyxRQUFpQyxFQUFFLEVBQUUsQ0FBQyxVQUFVLENBQUMsUUFBUSxFQUFFLGtCQUFrQixDQUFDLENBQUM7QUFFOUc7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sT0FBTyxHQUFHLENBQUMsUUFBaUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxpQkFBaUIsQ0FBQyxDQUFDO0FBRXRHLFNBQVMsR0FBRyxDQUFDLE9BQXFCLEVBQUUsU0FBaUI7SUFDcEQsSUFBSSxD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QUNsRSxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNyQyxJQUFJLGdCQUFnQjtZQUFFLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsT0FBTyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFFLENBQUM7QUFDdEMsQ0FBQztBQUVELE1BQU0sQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLEdBQUcsb0JBQW9CLENBQUMsR0FBRyxFQUFFLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBjcmVhdGVJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ25neHRlbnNpb24vY3JlYXRlLWluamVjdGlvbi10b2tlbic7XG5pbXBvcnQgeyByb290cyB9IGZyb20gJy4vcm9vdHMnO1xuaW1wb3J0IHsgTmd0U3RhdGUgfSBmcm9tICcuL3N0b3JlJztcbmltcG9ydCB7IE5ndFNpZ25hbFN0b3JlIH0gZnJvbSAnLi91dGlscy9zaWduYWwtc3RvcmUnO1xuXG5leHBvcnQgdHlwZSBOZ3RHbG9iYWxSZW5kZXJDYWxsYmFjayA9ICh0aW1lU3RhbXA6IG51bWJlcikgPT4gdm9pZDtcbnR5cGUgU3ViSXRlbSA9IHsgY2FsbGJhY2s6IE5ndEdsb2JhbFJlbmRlckNhbGxiYWNrIH07XG5cbmZ1bmN0aW9uIGNyZWF0ZVN1YnMoY2FsbGJhY2s6IE5ndEdsb2JhbFJlbmRlckNhbGxiYWNrLCBzdWJzOiBTZXQ8U3ViSXRlbT4pOiAoKSA9PiB2b2lkIHtcblx0Y29uc3Qgc3ViID0geyBjYWxsYmFjayB9O1xuXHRzdWJzLmFkZChzdWIpO1xuXHRyZXR1cm4gKCkgPT4gdm9pZCBzdWJzLmRlbGV0ZShzdWIpO1xufVxuXG5jb25zdCBnbG9iYWxFZmZlY3RzOiBTZXQ8U3ViSXRlbT4gPSBuZXcgU2V0KCk7XG5jb25zdCBnbG9iYWxBZnRlckVmZmVjdHM6IFNldDxTdWJJdGVtPiA9IG5ldyBTZXQoKTtcbmNvbnN0IGdsb2JhbFRhaWxFZmZlY3RzOiBTZXQ8U3ViSXRlbT4gPSBuZXcgU2V0KCk7XG5cbi8qKlxuICogQWRkcyBhIGdsb2JhbCByZW5kZXIgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGVhY2ggZnJhbWUuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5wbW5kLnJzL3JlYWN0LXRocmVlLWZpYmVyL2FwaS9hZGRpdGlvbmFsLWV4cG9ydHMjYWRkRWZmZWN0XG4gKi9cbmV4cG9ydCBjb25zdCBhZGRFZmZlY3QgPSAoY2FsbGJhY2s6IE5ndEdsb2JhbFJlbmRlckNhbGxiYWNrKSA9PiBjcmVhdGVTdWJzKGNhbGxiYWNrLCBnbG9iYWxFZmZlY3RzKTtcblxuLyoqXG4gKiBBZGRzIGEgZ2xvYmFsIGFmdGVyLXJlbmRlciBjYWxsYmFjayB3aGljaCBpcyBjYWxsZWQgZWFjaCBmcmFtZS5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLnBtbmQucnMvcmVhY3QtdGhyZWUtZmliZXIvYXBpL2FkZGl0aW9uYWwtZXhwb3J0cyNhZGRBZnRlckVmZmVjdFxuICovXG5leHBvcnQgY29uc3QgYWRkQWZ0ZXJFZmZlY3QgPSAoY2FsbGJhY2s6IE5ndEdsb2JhbFJlbmRlckNhbGxiYWNrKSA9PiBjcmVhdGVTdWJzKGNhbGxiYWNrLCBnbG9iYWxBZnRlckVmZmVjdHMpO1xuXG4vKipcbiAqIEFkZHMgYSBnbG9iYWwgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIHdoZW4gcmVuZGVyaW5nIHN0b3BzLlxuICogQHNlZSBodHRwczovL2RvY3MucG1uZC5ycy9yZWFjdC10aHJlZS1maWJlci9hcGkvYWRkaXRpb25hbC1leHBvcnRzI2FkZFRhaWxcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZFRhaWwgPSAoY2FsbGJhY2s6IE5ndEdsb2JhbFJlbmRlckNhbGxiYWNrKSA9PiBjcmVhdGVTdWJzKGNhbGxiYWNrLCBnbG9iYWxUYWlsRWZmZWN0cyk7XG5cbmZ1bmN0aW9uIHJ1bihlZmZlY3RzOiBTZXQ8U3ViSXRlbT4sIHRpbWVzdGFtcDogbnVtYmVyKSB7XG5cdGlmICghZWZmZWN0cy5zaXplKSByZXR1cm47XG5cdGZvciAoY29uc3QgeyBjYWxsYmFjayB9IG9mIGVmZmVjdHMudmFsdWVzKCkpIHtcblx0XHRjYWxsYmFjayh0aW1lc3RhbXApO1xuXHR9XG59XG5cbmV4cG9ydCB0eXBlIE5ndEdsb2JhbEVmZmVjdFR5cGUgPSAnYmVmb3JlJyB8ICdhZnRlcicgfCAndGFpbCc7XG5cbmV4cG9ydCBmdW5jdGlvbiBmbHVzaEdsb2JhbEVmZmVjdHModHlwZTogTmd0R2xvYmFsRWZmZWN0VHlwZSwgdGltZXN0YW1wOiBudW1iZXIpOiB2b2lkIHtcblx0c3dpdGNoICh0eXBlKSB7XG5cdFx0Y2FzZSAnYmVmb3JlJzpcblx0XHRcdHJldHVybiBydW4oZ2xvYmFsRWZmZWN0cywgdGltZXN0YW1wKTtcblx0XHRjYXNlICdhZnRlcic6XG5cdFx0XHRyZXR1cm4gcnVuKGdsb2JhbEFmdGVyRWZmZWN0cywgdGltZXN0YW1wKTtcblx0XHRjYXNlICd0YWlsJzpcblx0XHRcdHJldHVybiBydW4oZ2xvYmFsVGFpbEVmZmVjdHMsIHRpbWVzdGFtcCk7XG5cdH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyKHRpbWVzdGFtcDogbnVtYmVyLCBzdG9yZTogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+LCBmcmFtZT86IFhSRnJhbWUpIHtcblx0Y29uc3Qgc3RhdGUgPSBzdG9yZS5zbmFwc2hvdDtcblx0Ly8gUnVuIGxvY2FsIGVmZmVjdHNcblx0bGV0IGRlbHRhID0gc3RhdGUuY2xvY2suZ2V0RGVsdGEoKTtcblx0Ly8gSW4gZnJhbWVsb29wPSduZXZlcicgbW9kZSwgY2xvY2sgdGltZXMgYXJlIHVwZGF0ZWQgdXNpbmcgdGhlIHByb3ZpZGVkIHRpbWVzdGFtcFxuXHRpZiAoc3RhdGUuZnJhbWVsb29wID09PSAnbmV2ZXInICYmIHR5cGVvZiB0aW1lc3RhbXAgPT09ICdudW1iZXInKSB7XG5cdFx0ZGVsdGEgPSB0aW1lc3RhbXAgLSBzdGF0ZS5jbG9jay5lbGFwc2VkVGltZTtcblx0XHRzdGF0ZS5jbG9jay5vbGRUaW1lID0gc3RhdGUuY2xvY2suZWxhcHNlZFRpbWU7XG5cdFx0c3RhdGUuY2xvY2suZWxhcHNlZFRpbWUgPSB0aW1lc3RhbXA7XG5cdH1cblx0Ly8gQ2FsbCBzdWJzY3JpYmVycyAoYmVmb3JlUmVuZGVyKVxuXHRjb25zdCBzdWJzY3JpYmVycyA9IHN0YXRlLmludGVybmFsLnN1YnNjcmliZXJzO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IHN1YnNjcmliZXJzLmxlbmd0aDsgaSsrKSB7XG5cdFx0Y29uc3Qgc3Vic2NyaXB0aW9uID0gc3Vic2NyaWJlcnNbaV07XG5cdFx0c3Vic2NyaXB0aW9uLmNhbGxiYWNrKHsgLi4uc3Vic2NyaXB0aW9uLnN0b3JlLnNuYXBzaG90LCBkZWx0YSwgZnJhbWUgfSk7XG5cdH1cblx0Ly8gUmVuZGVyIGNvbnRlbnRcblx0aWYgKCFzdGF0ZS5pbnRlcm5hbC5wcmlvcml0eSAmJiBzdGF0ZS5nbC5yZW5kZXIpIHN0YXRlLmdsLnJlbmRlcihzdGF0ZS5zY2VuZSwgc3RhdGUuY2FtZXJhKTtcblx0Ly8gRGVjcmVhc2UgZnJhbWUgY291bnRcblx0c3RhdGUuaW50ZXJuYWwuZnJhbWVzID0gTWF0aC5tYXgoMCwgc3RhdGUuaW50ZXJuYWwuZnJhbWVzIC0gMSk7XG5cdHJldHVybiBzdGF0ZS5mcmFtZWxvb3AgPT09ICdhbHdheXMnID8gMSA6IHN0YXRlLmludGVybmFsLmZyYW1lcztcbn1cblxuZnVuY3Rpb24gY3JlYXRlTG9vcDxUQ2FudmFzPihyb290czogTWFwPFRDYW52YXMsIE5ndFNpZ25hbFN0b3JlPE5ndFN0YXRlPj4pIHtcblx0bGV0IHJ1bm5pbmcgPSBmYWxzZTtcblx0bGV0IHJlcGVhdDogbnVtYmVyO1xuXHRsZXQgZnJhbWU6IG51bWJlcjtcblx0bGV0IGJlZm9yZVJlbmRlckluUHJvZ3Jlc3MgPSBmYWxzZTtcblxuXHRmdW5jdGlvbiBsb29wKHRpbWVzdGFtcDogbnVtYmVyKTogdm9pZCB7XG5cdFx0ZnJhbWUgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUobG9vcCk7XG5cdFx0cnVubmluZyA9IHRydWU7XG5cdFx0cmVwZWF0ID0gMDtcblxuXHRcdC8vIFJ1biBlZmZlY3RzXG5cdFx0Zmx1c2hHbG9iYWxFZmZlY3RzKCdiZWZvcmUnLCB0aW1lc3RhbXApO1xuXG5cdFx0Ly8gUmVuZGVyIGFsbCByb290c1xuXHRcdGJlZm9yZVJlbmRlckluUHJvZ3Jlc3MgPSB0cnVlO1xuXHRcdGZvciAoY29uc3Qgcm9vdCBvZiByb290cy52YWx1ZXMoKSkge1xuXHRcdFx0Y29uc3Qgc3RhdGUgPSByb290LnNuYXBzaG90O1xuXHRcdFx0Ly8gSWYgdGhlIGZyYW1lbG9vcCBpcyBpbnZhbGlkYXRlZCwgZG8gbm90IHJ1biBhbm90aGVyIGZyYW1lXG5cdFx0XHRpZiAoXG5cdFx0XHRcdHN0YXRlLmludGVybmFsLmFjdGl2ZSAmJlxuXHRcdFx0XHQoc3RhdGUuZnJhbWVsb29wID09PSAnYWx3YXlzJyB8fCBzdGF0ZS5pbnRlcm5hbC5mcmFtZXMgPiAwKSAmJlxuXHRcdFx0XHQhc3RhdGUuZ2wueHI/LmlzUHJlc2VudGluZ1xuXHRcdFx0KSB7XG5cdFx0XHRcdHJlcGVhdCArPSByZW5kZXIodGltZXN0YW1wLCByb290KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0YmVmb3JlUmVuZGVySW5Qcm9ncmVzcyA9IGZhbHNlO1xuXG5cdFx0Ly8gUnVuIGFmdGVyLWVmZmVjdHNcblx0XHRmbHVzaEdsb2JhbEVmZmVjdHMoJ2FmdGVyJywgdGltZXN0YW1wKTtcblxuXHRcdC8vIFN0b3AgdGhlIGxvb3AgaWYgbm90aGluZyBpbnZhbGlkYXRlcyBpdFxuXHRcdGlmIChyZXBlYXQgPT09IDApIHtcblx0XHRcdC8vIFRhaWwgY2FsbCBlZmZlY3RzLCB0aGV5IGFyZSBjYWxsZWQgd2hlbiByZW5kZXJpbmcgc3RvcHNcblx0XHRcdGZsdXNoR2xvYmFsRWZmZWN0cygndGFpbCcsIHRpbWVzdGFtcCk7XG5cblx0XHRcdC8vIEZsYWcgZW5kIG9mIG9wZXJhdGlvblxuXHRcdFx0cnVubmluZyA9IGZhbHNlO1xuXHRcdFx0cmV0dXJuIGNhbmNlbEFuaW1hdGlvbkZyYW1lKGZyYW1lKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBpbnZhbGlkYXRlKHN0b3JlPzogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+LCBmcmFtZXMgPSAxKTogdm9pZCB7XG5cdFx0Y29uc3Qgc3RhdGUgPSBzdG9yZT8uc25hcHNob3Q7XG5cdFx0aWYgKCFzdGF0ZSkgcmV0dXJuIHJvb3RzLmZvckVhY2goKHJvb3QpID0+IGludmFsaWRhdGUocm9vdCwgZnJhbWVzKSk7XG5cdFx0aWYgKHN0YXRlLmdsLnhyPy5pc1ByZXNlbnRpbmcgfHwgIXN0YXRlLmludGVybmFsLmFjdGl2ZSB8fCBzdGF0ZS5mcmFtZWxvb3AgPT09ICduZXZlcicpIHJldHVybjtcblx0XHRpZiAoZnJhbWVzID4gMSkge1xuXHRcdFx0Ly8gbGVnYWN5IHN1cHBvcnQgZm9yIHBlb3BsZSB1c2luZyBmcmFtZXMgcGFyYW1ldGVyc1xuXHRcdFx0Ly8gSW5jcmVhc2UgZnJhbWVzLCBkbyBub3QgZ28gaGlnaGVyIHRoYW4gNjBcblx0XHRcdHN0YXRlLmludGVybmFsLmZyYW1lcyA9IE1hdGgubWluKDYwLCBzdGF0ZS5pbnRlcm5hbC5mcmFtZXMgKyBmcmFtZXMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAoYmVmb3JlUmVuZGVySW5Qcm9ncmVzcykge1xuXHRcdFx0XHQvL2NhbGxlZCBmcm9tIHdpdGhpbiBhIGJlZm9yZVJlbmRlciwgaXQgbWVhbnMgdGhlIHVzZXIgd2FudHMgYW4gYWRkaXRpb25hbCBmcmFtZVxuXHRcdFx0XHRzdGF0ZS5pbnRlcm5hbC5mcmFtZXMgPSAyO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Ly90aGUgdXNlciBuZWVkIGEgbmV3IGZyYW1lLCBubyBuZWVkIHRvIGluY3JlbWVudCBmdXJ0aGVyIHRoYW4gMVxuXHRcdFx0XHRzdGF0ZS5pbnRlcm5hbC5mcmFtZXMgPSAxO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdC8vIElmIHRoZSByZW5kZXItbG9vcCBpc24ndCBhY3RpdmUsIHN0YXJ0IGl0XG5cdFx0aWYgKCFydW5uaW5nKSB7XG5cdFx0XHRydW5uaW5nID0gdHJ1ZTtcblx0XHRcdHJlcXVlc3RBbmltYXRpb25GcmFtZShsb29wKTtcblx0XHR9XG5cdH1cblxuXHRmdW5jdGlvbiBhZHZhbmNlKFxuXHRcdHRpbWVzdGFtcDogbnVtYmVyLFxuXHRcdHJ1bkdsb2JhbEVmZmVjdHM6IGJvb2xlYW4gPSB0cnVlLFxuXHRcdHN0b3JlPzogTmd0U2lnbmFsU3RvcmU8Tmd0U3RhdGU+LFxuXHRcdGZyYW1lPzogWFJGcmFtZSxcblx0KTogdm9pZCB7XG5cdFx0aWYgKHJ1bkdsb2JhbEVmZmVjdHMpIGZsdXNoR2xvYmFsRWZmZWN0cygnYmVmb3JlJywgdGltZXN0YW1wKTtcblx0XHRpZiAoIXN0b3JlKSBmb3IgKGNvbnN0IHJvb3Qgb2Ygcm9vdHMudmFsdWVzKCkpIHJlbmRlcih0aW1lc3RhbXAsIHJvb3QpO1xuXHRcdGVsc2UgcmVuZGVyKHRpbWVzdGFtcCwgc3RvcmUsIGZyYW1lKTtcblx0XHRpZiAocnVuR2xvYmFsRWZmZWN0cykgZmx1c2hHbG9iYWxFZmZlY3RzKCdhZnRlcicsIHRpbWVzdGFtcCk7XG5cdH1cblxuXHRyZXR1cm4geyBsb29wLCBpbnZhbGlkYXRlLCBhZHZhbmNlIH07XG59XG5cbmV4cG9ydCBjb25zdCBbaW5qZWN0TG9vcF0gPSBjcmVhdGVJbmplY3Rpb25Ub2tlbigoKSA9PiBjcmVhdGVMb29wKHJvb3RzKSk7XG4iXX0=