angular-three 0.0.7 → 1.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (441) hide show
  1. package/esm2020/angular-three.mjs +1 -1
  2. package/esm2020/index.mjs +2 -35
  3. package/esm2020/lib/canvas.mjs +141 -128
  4. package/esm2020/lib/di/catalogue.mjs +7 -0
  5. package/esm2020/lib/directives/args.mjs +37 -17
  6. package/esm2020/lib/directives/repeat.mjs +5 -8
  7. package/esm2020/lib/events.mjs +341 -52
  8. package/esm2020/lib/loader.mjs +55 -0
  9. package/esm2020/lib/loop.mjs +137 -0
  10. package/esm2020/lib/renderer/di.mjs +3 -0
  11. package/esm2020/lib/renderer/enums.mjs +2 -0
  12. package/esm2020/lib/renderer/provider.mjs +19 -0
  13. package/esm2020/lib/renderer/renderer.mjs +293 -0
  14. package/esm2020/lib/renderer/state.mjs +350 -0
  15. package/esm2020/lib/renderer/utils.mjs +177 -0
  16. package/esm2020/lib/stores/rx-store.mjs +99 -0
  17. package/esm2020/lib/stores/store.mjs +190 -239
  18. package/esm2020/lib/types.mjs +1 -1
  19. package/esm2020/lib/utils/apply-props.mjs +37 -80
  20. package/esm2020/lib/utils/attach.mjs +29 -0
  21. package/esm2020/lib/utils/instance.mjs +43 -28
  22. package/esm2020/lib/utils/is.mjs +7 -11
  23. package/esm2020/lib/utils/make.mjs +30 -10
  24. package/esm2020/lib/utils/update.mjs +37 -0
  25. package/esm2020/lib/web/events.mjs +68 -0
  26. package/fesm2015/angular-three.mjs +2053 -2046
  27. package/fesm2015/angular-three.mjs.map +1 -1
  28. package/fesm2020/angular-three.mjs +2003 -1990
  29. package/fesm2020/angular-three.mjs.map +1 -1
  30. package/index.d.ts +1 -34
  31. package/lib/canvas.d.ts +29 -28
  32. package/lib/di/catalogue.d.ts +3 -0
  33. package/lib/directives/args.d.ts +8 -12
  34. package/lib/events.d.ts +7 -2
  35. package/lib/loader.d.ts +15 -0
  36. package/lib/{utils/loop.d.ts → loop.d.ts} +7 -6
  37. package/lib/renderer/di.d.ts +2 -0
  38. package/lib/renderer/enums.d.ts +25 -0
  39. package/lib/renderer/provider.d.ts +25 -0
  40. package/lib/renderer/renderer.d.ts +49 -0
  41. package/lib/renderer/state.d.ts +59 -0
  42. package/lib/renderer/utils.d.ts +20 -0
  43. package/lib/stores/rx-store.d.ts +17 -0
  44. package/lib/stores/store.d.ts +6 -23
  45. package/lib/types.d.ts +182 -191
  46. package/lib/utils/apply-props.d.ts +2 -6
  47. package/lib/utils/attach.d.ts +3 -0
  48. package/lib/utils/instance.d.ts +3 -3
  49. package/lib/utils/is.d.ts +6 -10
  50. package/lib/utils/make.d.ts +5 -2
  51. package/lib/utils/update.d.ts +4 -0
  52. package/lib/web/events.d.ts +4 -0
  53. package/package.json +30 -99
  54. package/attributes/README.md +0 -3
  55. package/attributes/index.d.ts +0 -22
  56. package/attributes/lib/buffer-attribute/buffer-attribute.d.ts +0 -8
  57. package/attributes/lib/color-attribute/color-attribute.d.ts +0 -8
  58. package/attributes/lib/common.d.ts +0 -1
  59. package/attributes/lib/float16-buffer-attribute/float16-buffer-attribute.d.ts +0 -8
  60. package/attributes/lib/float32-buffer-attribute/float32-buffer-attribute.d.ts +0 -8
  61. package/attributes/lib/float64-buffer-attribute/float64-buffer-attribute.d.ts +0 -8
  62. package/attributes/lib/fog-attribute/fog-attribute.d.ts +0 -8
  63. package/attributes/lib/fog-exp2-attribute/fog-exp2-attribute.d.ts +0 -8
  64. package/attributes/lib/instanced-buffer-attribute/instanced-buffer-attribute.d.ts +0 -8
  65. package/attributes/lib/int16-buffer-attribute/int16-buffer-attribute.d.ts +0 -8
  66. package/attributes/lib/int32-buffer-attribute/int32-buffer-attribute.d.ts +0 -8
  67. package/attributes/lib/int8-buffer-attribute/int8-buffer-attribute.d.ts +0 -8
  68. package/attributes/lib/interleaved-buffer-attribute/interleaved-buffer-attribute.d.ts +0 -8
  69. package/attributes/lib/matrix3-attribute/matrix3-attribute.d.ts +0 -8
  70. package/attributes/lib/matrix4-attribute/matrix4-attribute.d.ts +0 -8
  71. package/attributes/lib/uint16-buffer-attribute/uint16-buffer-attribute.d.ts +0 -8
  72. package/attributes/lib/uint32-buffer-attribute/uint32-buffer-attribute.d.ts +0 -8
  73. package/attributes/lib/uint8-buffer-attribute/uint8-buffer-attribute.d.ts +0 -8
  74. package/attributes/lib/uint8-clamped-buffer-attribute/uint8-clamped-buffer-attribute.d.ts +0 -8
  75. package/attributes/lib/value-attribute/value-attribute.d.ts +0 -8
  76. package/attributes/lib/vector2-attribute/vector2-attribute.d.ts +0 -8
  77. package/attributes/lib/vector3-attribute/vector3-attribute.d.ts +0 -8
  78. package/attributes/lib/vector4-attribute/vector4-attribute.d.ts +0 -8
  79. package/audios/README.md +0 -3
  80. package/audios/index.d.ts +0 -3
  81. package/audios/lib/audio/audio.d.ts +0 -49
  82. package/audios/lib/audio-listener/audio-listener.d.ts +0 -35
  83. package/audios/lib/common.d.ts +0 -3
  84. package/audios/lib/positional-audio/positional-audio.d.ts +0 -49
  85. package/cameras/README.md +0 -3
  86. package/cameras/index.d.ts +0 -5
  87. package/cameras/lib/array-camera/array-camera.d.ts +0 -56
  88. package/cameras/lib/common.d.ts +0 -3
  89. package/cameras/lib/cube-camera/cube-camera.d.ts +0 -36
  90. package/cameras/lib/orthographic-camera/orthographic-camera.d.ts +0 -54
  91. package/cameras/lib/perspective-camera/perspective-camera.d.ts +0 -55
  92. package/cameras/lib/stereo-camera/stereo-camera.d.ts +0 -42
  93. package/esm2020/attributes/angular-three-attributes.mjs +0 -5
  94. package/esm2020/attributes/index.mjs +0 -24
  95. package/esm2020/attributes/lib/buffer-attribute/buffer-attribute.mjs +0 -26
  96. package/esm2020/attributes/lib/color-attribute/color-attribute.mjs +0 -26
  97. package/esm2020/attributes/lib/common.mjs +0 -13
  98. package/esm2020/attributes/lib/float16-buffer-attribute/float16-buffer-attribute.mjs +0 -26
  99. package/esm2020/attributes/lib/float32-buffer-attribute/float32-buffer-attribute.mjs +0 -26
  100. package/esm2020/attributes/lib/float64-buffer-attribute/float64-buffer-attribute.mjs +0 -26
  101. package/esm2020/attributes/lib/fog-attribute/fog-attribute.mjs +0 -26
  102. package/esm2020/attributes/lib/fog-exp2-attribute/fog-exp2-attribute.mjs +0 -26
  103. package/esm2020/attributes/lib/instanced-buffer-attribute/instanced-buffer-attribute.mjs +0 -26
  104. package/esm2020/attributes/lib/int16-buffer-attribute/int16-buffer-attribute.mjs +0 -26
  105. package/esm2020/attributes/lib/int32-buffer-attribute/int32-buffer-attribute.mjs +0 -26
  106. package/esm2020/attributes/lib/int8-buffer-attribute/int8-buffer-attribute.mjs +0 -26
  107. package/esm2020/attributes/lib/interleaved-buffer-attribute/interleaved-buffer-attribute.mjs +0 -30
  108. package/esm2020/attributes/lib/matrix3-attribute/matrix3-attribute.mjs +0 -26
  109. package/esm2020/attributes/lib/matrix4-attribute/matrix4-attribute.mjs +0 -26
  110. package/esm2020/attributes/lib/uint16-buffer-attribute/uint16-buffer-attribute.mjs +0 -26
  111. package/esm2020/attributes/lib/uint32-buffer-attribute/uint32-buffer-attribute.mjs +0 -26
  112. package/esm2020/attributes/lib/uint8-buffer-attribute/uint8-buffer-attribute.mjs +0 -26
  113. package/esm2020/attributes/lib/uint8-clamped-buffer-attribute/uint8-clamped-buffer-attribute.mjs +0 -26
  114. package/esm2020/attributes/lib/value-attribute/value-attribute.mjs +0 -28
  115. package/esm2020/attributes/lib/vector2-attribute/vector2-attribute.mjs +0 -26
  116. package/esm2020/attributes/lib/vector3-attribute/vector3-attribute.mjs +0 -26
  117. package/esm2020/attributes/lib/vector4-attribute/vector4-attribute.mjs +0 -26
  118. package/esm2020/audios/angular-three-audios.mjs +0 -5
  119. package/esm2020/audios/index.mjs +0 -5
  120. package/esm2020/audios/lib/audio/audio.mjs +0 -45
  121. package/esm2020/audios/lib/audio-listener/audio-listener.mjs +0 -38
  122. package/esm2020/audios/lib/common.mjs +0 -54
  123. package/esm2020/audios/lib/positional-audio/positional-audio.mjs +0 -45
  124. package/esm2020/cameras/angular-three-cameras.mjs +0 -5
  125. package/esm2020/cameras/index.mjs +0 -7
  126. package/esm2020/cameras/lib/array-camera/array-camera.mjs +0 -44
  127. package/esm2020/cameras/lib/common.mjs +0 -54
  128. package/esm2020/cameras/lib/cube-camera/cube-camera.mjs +0 -30
  129. package/esm2020/cameras/lib/orthographic-camera/orthographic-camera.mjs +0 -42
  130. package/esm2020/cameras/lib/perspective-camera/perspective-camera.mjs +0 -43
  131. package/esm2020/cameras/lib/stereo-camera/stereo-camera.mjs +0 -38
  132. package/esm2020/geometries/angular-three-geometries.mjs +0 -5
  133. package/esm2020/geometries/index.mjs +0 -25
  134. package/esm2020/geometries/lib/box-geometry/box-geometry.mjs +0 -26
  135. package/esm2020/geometries/lib/buffer-geometry/buffer-geometry.mjs +0 -26
  136. package/esm2020/geometries/lib/capsule-geometry/capsule-geometry.mjs +0 -26
  137. package/esm2020/geometries/lib/circle-geometry/circle-geometry.mjs +0 -26
  138. package/esm2020/geometries/lib/common.mjs +0 -13
  139. package/esm2020/geometries/lib/cone-geometry/cone-geometry.mjs +0 -26
  140. package/esm2020/geometries/lib/cylinder-geometry/cylinder-geometry.mjs +0 -26
  141. package/esm2020/geometries/lib/dodecahedron-geometry/dodecahedron-geometry.mjs +0 -26
  142. package/esm2020/geometries/lib/edges-geometry/edges-geometry.mjs +0 -26
  143. package/esm2020/geometries/lib/extrude-geometry/extrude-geometry.mjs +0 -26
  144. package/esm2020/geometries/lib/icosahedron-geometry/icosahedron-geometry.mjs +0 -26
  145. package/esm2020/geometries/lib/instanced-buffer-geometry/instanced-buffer-geometry.mjs +0 -26
  146. package/esm2020/geometries/lib/lathe-geometry/lathe-geometry.mjs +0 -26
  147. package/esm2020/geometries/lib/octahedron-geometry/octahedron-geometry.mjs +0 -26
  148. package/esm2020/geometries/lib/plane-geometry/plane-geometry.mjs +0 -26
  149. package/esm2020/geometries/lib/polyhedron-geometry/polyhedron-geometry.mjs +0 -26
  150. package/esm2020/geometries/lib/ring-geometry/ring-geometry.mjs +0 -26
  151. package/esm2020/geometries/lib/shape-geometry/shape-geometry.mjs +0 -26
  152. package/esm2020/geometries/lib/sphere-geometry/sphere-geometry.mjs +0 -26
  153. package/esm2020/geometries/lib/tetrahedron-geometry/tetrahedron-geometry.mjs +0 -26
  154. package/esm2020/geometries/lib/torus-geometry/torus-geometry.mjs +0 -26
  155. package/esm2020/geometries/lib/torus-knot-geometry/torus-knot-geometry.mjs +0 -26
  156. package/esm2020/geometries/lib/tube-geometry/tube-geometry.mjs +0 -26
  157. package/esm2020/geometries/lib/wireframe-geometry/wireframe-geometry.mjs +0 -26
  158. package/esm2020/helpers/angular-three-helpers.mjs +0 -5
  159. package/esm2020/helpers/index.mjs +0 -15
  160. package/esm2020/helpers/lib/arrow-helper/arrow-helper.mjs +0 -26
  161. package/esm2020/helpers/lib/axes-helper/axes-helper.mjs +0 -26
  162. package/esm2020/helpers/lib/box-helper/box-helper.mjs +0 -36
  163. package/esm2020/helpers/lib/box3-helper/box3-helper.mjs +0 -36
  164. package/esm2020/helpers/lib/camera-helper/camera-helper.mjs +0 -36
  165. package/esm2020/helpers/lib/common.mjs +0 -13
  166. package/esm2020/helpers/lib/directional-light-helper/directional-light-helper.mjs +0 -36
  167. package/esm2020/helpers/lib/grid-helper/grid-helper.mjs +0 -26
  168. package/esm2020/helpers/lib/hemisphere-light-helper/hemisphere-light-helper.mjs +0 -36
  169. package/esm2020/helpers/lib/plane-helper/plane-helper.mjs +0 -36
  170. package/esm2020/helpers/lib/point-light-helper/point-light-helper.mjs +0 -36
  171. package/esm2020/helpers/lib/polar-grid-helper/polar-grid-helper.mjs +0 -26
  172. package/esm2020/helpers/lib/skeleton-helper/skeleton-helper.mjs +0 -36
  173. package/esm2020/helpers/lib/spot-light-helper/spot-light-helper.mjs +0 -36
  174. package/esm2020/lib/di/resize.mjs +0 -19
  175. package/esm2020/lib/di/window.mjs +0 -13
  176. package/esm2020/lib/directives/cursor.mjs +0 -35
  177. package/esm2020/lib/instance.mjs +0 -368
  178. package/esm2020/lib/pipes/math.mjs +0 -15
  179. package/esm2020/lib/pipes/pi.mjs +0 -14
  180. package/esm2020/lib/pipes/radian.mjs +0 -14
  181. package/esm2020/lib/pipes/side.mjs +0 -22
  182. package/esm2020/lib/ref.mjs +0 -15
  183. package/esm2020/lib/services/loader.mjs +0 -45
  184. package/esm2020/lib/services/resize.mjs +0 -127
  185. package/esm2020/lib/stores/component-store.mjs +0 -137
  186. package/esm2020/lib/utils/build-graph.mjs +0 -15
  187. package/esm2020/lib/utils/camera.mjs +0 -28
  188. package/esm2020/lib/utils/capitalize.mjs +0 -4
  189. package/esm2020/lib/utils/check-update.mjs +0 -22
  190. package/esm2020/lib/utils/events.mjs +0 -353
  191. package/esm2020/lib/utils/get-instance-local-state.mjs +0 -6
  192. package/esm2020/lib/utils/inject.mjs +0 -18
  193. package/esm2020/lib/utils/loop.mjs +0 -139
  194. package/esm2020/lib/utils/mutate.mjs +0 -24
  195. package/esm2020/lib/utils/proxy.mjs +0 -99
  196. package/esm2020/lib/utils/renderer.mjs +0 -15
  197. package/esm2020/lights/angular-three-lights.mjs +0 -5
  198. package/esm2020/lights/index.mjs +0 -11
  199. package/esm2020/lights/lib/ambient-light/ambient-light.mjs +0 -30
  200. package/esm2020/lights/lib/ambient-light-probe/ambient-light-probe.mjs +0 -30
  201. package/esm2020/lights/lib/common.mjs +0 -54
  202. package/esm2020/lights/lib/directional-light/directional-light.mjs +0 -30
  203. package/esm2020/lights/lib/hemisphere-light/hemisphere-light.mjs +0 -30
  204. package/esm2020/lights/lib/hemisphere-light-probe/hemisphere-light-probe.mjs +0 -30
  205. package/esm2020/lights/lib/light-probe/light-probe.mjs +0 -30
  206. package/esm2020/lights/lib/point-light/point-light.mjs +0 -30
  207. package/esm2020/lights/lib/rect-area-light/rect-area-light.mjs +0 -30
  208. package/esm2020/lights/lib/spot-light/spot-light.mjs +0 -42
  209. package/esm2020/materials/angular-three-materials.mjs +0 -5
  210. package/esm2020/materials/index.mjs +0 -19
  211. package/esm2020/materials/lib/common.mjs +0 -13
  212. package/esm2020/materials/lib/line-basic-material/line-basic-material.mjs +0 -77
  213. package/esm2020/materials/lib/line-dashed-material/line-dashed-material.mjs +0 -80
  214. package/esm2020/materials/lib/mesh-basic-material/mesh-basic-material.mjs +0 -89
  215. package/esm2020/materials/lib/mesh-depth-material/mesh-depth-material.mjs +0 -80
  216. package/esm2020/materials/lib/mesh-distance-material/mesh-distance-material.mjs +0 -80
  217. package/esm2020/materials/lib/mesh-lambert-material/mesh-lambert-material.mjs +0 -100
  218. package/esm2020/materials/lib/mesh-matcap-material/mesh-matcap-material.mjs +0 -86
  219. package/esm2020/materials/lib/mesh-normal-material/mesh-normal-material.mjs +0 -83
  220. package/esm2020/materials/lib/mesh-phong-material/mesh-phong-material.mjs +0 -103
  221. package/esm2020/materials/lib/mesh-physical-material/mesh-physical-material.mjs +0 -119
  222. package/esm2020/materials/lib/mesh-standard-material/mesh-standard-material.mjs +0 -100
  223. package/esm2020/materials/lib/mesh-toon-material/mesh-toon-material.mjs +0 -96
  224. package/esm2020/materials/lib/points-material/points-material.mjs +0 -78
  225. package/esm2020/materials/lib/raw-shader-material/raw-shader-material.mjs +0 -83
  226. package/esm2020/materials/lib/shader-material/shader-material.mjs +0 -83
  227. package/esm2020/materials/lib/shadow-material/shadow-material.mjs +0 -74
  228. package/esm2020/materials/lib/sprite-material/sprite-material.mjs +0 -78
  229. package/esm2020/objects/angular-three-objects.mjs +0 -5
  230. package/esm2020/objects/index.mjs +0 -14
  231. package/esm2020/objects/lib/bone/bone.mjs +0 -27
  232. package/esm2020/objects/lib/common.mjs +0 -54
  233. package/esm2020/objects/lib/group/group.mjs +0 -27
  234. package/esm2020/objects/lib/instanced-mesh/instanced-mesh.mjs +0 -40
  235. package/esm2020/objects/lib/line/line.mjs +0 -30
  236. package/esm2020/objects/lib/line-loop/line-loop.mjs +0 -30
  237. package/esm2020/objects/lib/line-segments/line-segments.mjs +0 -30
  238. package/esm2020/objects/lib/lod/lod.mjs +0 -30
  239. package/esm2020/objects/lib/mesh/mesh.mjs +0 -30
  240. package/esm2020/objects/lib/points/points.mjs +0 -30
  241. package/esm2020/objects/lib/skeleton/skeleton.mjs +0 -41
  242. package/esm2020/objects/lib/skinned-mesh/skinned-mesh.mjs +0 -39
  243. package/esm2020/objects/lib/sprite/sprite.mjs +0 -30
  244. package/esm2020/primitives/angular-three-primitives.mjs +0 -5
  245. package/esm2020/primitives/index.mjs +0 -3
  246. package/esm2020/primitives/lib/common.mjs +0 -54
  247. package/esm2020/primitives/lib/object-primitive/object-primitive.mjs +0 -27
  248. package/esm2020/primitives/lib/primitive/primitive.mjs +0 -38
  249. package/esm2020/stats/angular-three-stats.mjs +0 -5
  250. package/esm2020/stats/index.mjs +0 -2
  251. package/esm2020/stats/lib/stats/stats.mjs +0 -54
  252. package/esm2020/textures/angular-three-textures.mjs +0 -5
  253. package/esm2020/textures/index.mjs +0 -12
  254. package/esm2020/textures/lib/canvas-texture/canvas-texture.mjs +0 -26
  255. package/esm2020/textures/lib/common.mjs +0 -13
  256. package/esm2020/textures/lib/compressed-array-texture/compressed-array-texture.mjs +0 -26
  257. package/esm2020/textures/lib/compressed-texture/compressed-texture.mjs +0 -26
  258. package/esm2020/textures/lib/cube-texture/cube-texture.mjs +0 -26
  259. package/esm2020/textures/lib/data-array-texture/data-array-texture.mjs +0 -26
  260. package/esm2020/textures/lib/data-texture/data-texture.mjs +0 -26
  261. package/esm2020/textures/lib/data3-dtexture/data3-dtexture.mjs +0 -26
  262. package/esm2020/textures/lib/depth-texture/depth-texture.mjs +0 -26
  263. package/esm2020/textures/lib/framebuffer-texture/framebuffer-texture.mjs +0 -26
  264. package/esm2020/textures/lib/video-texture/video-texture.mjs +0 -26
  265. package/fesm2015/angular-three-attributes.mjs +0 -475
  266. package/fesm2015/angular-three-attributes.mjs.map +0 -1
  267. package/fesm2015/angular-three-audios.mjs +0 -179
  268. package/fesm2015/angular-three-audios.mjs.map +0 -1
  269. package/fesm2015/angular-three-cameras.mjs +0 -236
  270. package/fesm2015/angular-three-cameras.mjs.map +0 -1
  271. package/fesm2015/angular-three-geometries.mjs +0 -488
  272. package/fesm2015/angular-three-geometries.mjs.map +0 -1
  273. package/fesm2015/angular-three-helpers.mjs +0 -378
  274. package/fesm2015/angular-three-helpers.mjs.map +0 -1
  275. package/fesm2015/angular-three-lights.mjs +0 -297
  276. package/fesm2015/angular-three-lights.mjs.map +0 -1
  277. package/fesm2015/angular-three-materials.mjs +0 -1415
  278. package/fesm2015/angular-three-materials.mjs.map +0 -1
  279. package/fesm2015/angular-three-objects.mjs +0 -381
  280. package/fesm2015/angular-three-objects.mjs.map +0 -1
  281. package/fesm2015/angular-three-primitives.mjs +0 -120
  282. package/fesm2015/angular-three-primitives.mjs.map +0 -1
  283. package/fesm2015/angular-three-stats.mjs +0 -62
  284. package/fesm2015/angular-three-stats.mjs.map +0 -1
  285. package/fesm2015/angular-three-textures.mjs +0 -228
  286. package/fesm2015/angular-three-textures.mjs.map +0 -1
  287. package/fesm2020/angular-three-attributes.mjs +0 -475
  288. package/fesm2020/angular-three-attributes.mjs.map +0 -1
  289. package/fesm2020/angular-three-audios.mjs +0 -179
  290. package/fesm2020/angular-three-audios.mjs.map +0 -1
  291. package/fesm2020/angular-three-cameras.mjs +0 -236
  292. package/fesm2020/angular-three-cameras.mjs.map +0 -1
  293. package/fesm2020/angular-three-geometries.mjs +0 -488
  294. package/fesm2020/angular-three-geometries.mjs.map +0 -1
  295. package/fesm2020/angular-three-helpers.mjs +0 -378
  296. package/fesm2020/angular-three-helpers.mjs.map +0 -1
  297. package/fesm2020/angular-three-lights.mjs +0 -297
  298. package/fesm2020/angular-three-lights.mjs.map +0 -1
  299. package/fesm2020/angular-three-materials.mjs +0 -1415
  300. package/fesm2020/angular-three-materials.mjs.map +0 -1
  301. package/fesm2020/angular-three-objects.mjs +0 -381
  302. package/fesm2020/angular-three-objects.mjs.map +0 -1
  303. package/fesm2020/angular-three-primitives.mjs +0 -120
  304. package/fesm2020/angular-three-primitives.mjs.map +0 -1
  305. package/fesm2020/angular-three-stats.mjs +0 -62
  306. package/fesm2020/angular-three-stats.mjs.map +0 -1
  307. package/fesm2020/angular-three-textures.mjs +0 -228
  308. package/fesm2020/angular-three-textures.mjs.map +0 -1
  309. package/geometries/README.md +0 -3
  310. package/geometries/index.d.ts +0 -23
  311. package/geometries/lib/box-geometry/box-geometry.d.ts +0 -8
  312. package/geometries/lib/buffer-geometry/buffer-geometry.d.ts +0 -8
  313. package/geometries/lib/capsule-geometry/capsule-geometry.d.ts +0 -8
  314. package/geometries/lib/circle-geometry/circle-geometry.d.ts +0 -8
  315. package/geometries/lib/common.d.ts +0 -1
  316. package/geometries/lib/cone-geometry/cone-geometry.d.ts +0 -8
  317. package/geometries/lib/cylinder-geometry/cylinder-geometry.d.ts +0 -8
  318. package/geometries/lib/dodecahedron-geometry/dodecahedron-geometry.d.ts +0 -8
  319. package/geometries/lib/edges-geometry/edges-geometry.d.ts +0 -8
  320. package/geometries/lib/extrude-geometry/extrude-geometry.d.ts +0 -8
  321. package/geometries/lib/icosahedron-geometry/icosahedron-geometry.d.ts +0 -8
  322. package/geometries/lib/instanced-buffer-geometry/instanced-buffer-geometry.d.ts +0 -8
  323. package/geometries/lib/lathe-geometry/lathe-geometry.d.ts +0 -8
  324. package/geometries/lib/octahedron-geometry/octahedron-geometry.d.ts +0 -8
  325. package/geometries/lib/plane-geometry/plane-geometry.d.ts +0 -8
  326. package/geometries/lib/polyhedron-geometry/polyhedron-geometry.d.ts +0 -8
  327. package/geometries/lib/ring-geometry/ring-geometry.d.ts +0 -8
  328. package/geometries/lib/shape-geometry/shape-geometry.d.ts +0 -8
  329. package/geometries/lib/sphere-geometry/sphere-geometry.d.ts +0 -8
  330. package/geometries/lib/tetrahedron-geometry/tetrahedron-geometry.d.ts +0 -8
  331. package/geometries/lib/torus-geometry/torus-geometry.d.ts +0 -8
  332. package/geometries/lib/torus-knot-geometry/torus-knot-geometry.d.ts +0 -8
  333. package/geometries/lib/tube-geometry/tube-geometry.d.ts +0 -8
  334. package/geometries/lib/wireframe-geometry/wireframe-geometry.d.ts +0 -8
  335. package/helpers/README.md +0 -3
  336. package/helpers/index.d.ts +0 -13
  337. package/helpers/lib/arrow-helper/arrow-helper.d.ts +0 -8
  338. package/helpers/lib/axes-helper/axes-helper.d.ts +0 -8
  339. package/helpers/lib/box-helper/box-helper.d.ts +0 -8
  340. package/helpers/lib/box3-helper/box3-helper.d.ts +0 -8
  341. package/helpers/lib/camera-helper/camera-helper.d.ts +0 -8
  342. package/helpers/lib/common.d.ts +0 -1
  343. package/helpers/lib/directional-light-helper/directional-light-helper.d.ts +0 -8
  344. package/helpers/lib/grid-helper/grid-helper.d.ts +0 -8
  345. package/helpers/lib/hemisphere-light-helper/hemisphere-light-helper.d.ts +0 -8
  346. package/helpers/lib/plane-helper/plane-helper.d.ts +0 -8
  347. package/helpers/lib/point-light-helper/point-light-helper.d.ts +0 -8
  348. package/helpers/lib/polar-grid-helper/polar-grid-helper.d.ts +0 -8
  349. package/helpers/lib/skeleton-helper/skeleton-helper.d.ts +0 -8
  350. package/helpers/lib/spot-light-helper/spot-light-helper.d.ts +0 -8
  351. package/lib/di/resize.d.ts +0 -12
  352. package/lib/di/window.d.ts +0 -1
  353. package/lib/directives/cursor.d.ts +0 -7
  354. package/lib/instance.d.ts +0 -81
  355. package/lib/pipes/math.d.ts +0 -7
  356. package/lib/pipes/pi.d.ts +0 -7
  357. package/lib/pipes/radian.d.ts +0 -7
  358. package/lib/pipes/side.d.ts +0 -8
  359. package/lib/ref.d.ts +0 -5
  360. package/lib/services/loader.d.ts +0 -11
  361. package/lib/services/resize.d.ts +0 -19
  362. package/lib/stores/component-store.d.ts +0 -69
  363. package/lib/utils/build-graph.d.ts +0 -3
  364. package/lib/utils/camera.d.ts +0 -4
  365. package/lib/utils/capitalize.d.ts +0 -1
  366. package/lib/utils/check-update.d.ts +0 -2
  367. package/lib/utils/events.d.ts +0 -6
  368. package/lib/utils/get-instance-local-state.d.ts +0 -2
  369. package/lib/utils/inject.d.ts +0 -9
  370. package/lib/utils/mutate.d.ts +0 -2
  371. package/lib/utils/proxy.d.ts +0 -7
  372. package/lib/utils/renderer.d.ts +0 -3
  373. package/lights/README.md +0 -3
  374. package/lights/index.d.ts +0 -9
  375. package/lights/lib/ambient-light/ambient-light.d.ts +0 -39
  376. package/lights/lib/ambient-light-probe/ambient-light-probe.d.ts +0 -40
  377. package/lights/lib/common.d.ts +0 -3
  378. package/lights/lib/directional-light/directional-light.d.ts +0 -40
  379. package/lights/lib/hemisphere-light/hemisphere-light.d.ts +0 -41
  380. package/lights/lib/hemisphere-light-probe/hemisphere-light-probe.d.ts +0 -42
  381. package/lights/lib/light-probe/light-probe.d.ts +0 -40
  382. package/lights/lib/point-light/point-light.d.ts +0 -42
  383. package/lights/lib/rect-area-light/rect-area-light.d.ts +0 -42
  384. package/lights/lib/spot-light/spot-light.d.ts +0 -45
  385. package/materials/README.md +0 -3
  386. package/materials/index.d.ts +0 -17
  387. package/materials/lib/common.d.ts +0 -1
  388. package/materials/lib/line-basic-material/line-basic-material.d.ts +0 -55
  389. package/materials/lib/line-dashed-material/line-dashed-material.d.ts +0 -58
  390. package/materials/lib/mesh-basic-material/mesh-basic-material.d.ts +0 -67
  391. package/materials/lib/mesh-depth-material/mesh-depth-material.d.ts +0 -58
  392. package/materials/lib/mesh-distance-material/mesh-distance-material.d.ts +0 -58
  393. package/materials/lib/mesh-lambert-material/mesh-lambert-material.d.ts +0 -78
  394. package/materials/lib/mesh-matcap-material/mesh-matcap-material.d.ts +0 -64
  395. package/materials/lib/mesh-normal-material/mesh-normal-material.d.ts +0 -61
  396. package/materials/lib/mesh-phong-material/mesh-phong-material.d.ts +0 -81
  397. package/materials/lib/mesh-physical-material/mesh-physical-material.d.ts +0 -97
  398. package/materials/lib/mesh-standard-material/mesh-standard-material.d.ts +0 -78
  399. package/materials/lib/mesh-toon-material/mesh-toon-material.d.ts +0 -74
  400. package/materials/lib/points-material/points-material.d.ts +0 -56
  401. package/materials/lib/raw-shader-material/raw-shader-material.d.ts +0 -68
  402. package/materials/lib/shader-material/shader-material.d.ts +0 -68
  403. package/materials/lib/shadow-material/shadow-material.d.ts +0 -52
  404. package/materials/lib/sprite-material/sprite-material.d.ts +0 -56
  405. package/objects/README.md +0 -3
  406. package/objects/index.d.ts +0 -12
  407. package/objects/lib/bone/bone.d.ts +0 -35
  408. package/objects/lib/common.d.ts +0 -3
  409. package/objects/lib/group/group.d.ts +0 -35
  410. package/objects/lib/instanced-mesh/instanced-mesh.d.ts +0 -44
  411. package/objects/lib/line/line.d.ts +0 -41
  412. package/objects/lib/line-loop/line-loop.d.ts +0 -41
  413. package/objects/lib/line-segments/line-segments.d.ts +0 -41
  414. package/objects/lib/lod/lod.d.ts +0 -40
  415. package/objects/lib/mesh/mesh.d.ts +0 -41
  416. package/objects/lib/points/points.d.ts +0 -41
  417. package/objects/lib/skeleton/skeleton.d.ts +0 -16
  418. package/objects/lib/skinned-mesh/skinned-mesh.d.ts +0 -45
  419. package/objects/lib/sprite/sprite.d.ts +0 -38
  420. package/primitives/README.md +0 -3
  421. package/primitives/index.d.ts +0 -2
  422. package/primitives/lib/common.d.ts +0 -3
  423. package/primitives/lib/object-primitive/object-primitive.d.ts +0 -35
  424. package/primitives/lib/primitive/primitive.d.ts +0 -10
  425. package/schematics/README.md +0 -11
  426. package/stats/README.md +0 -3
  427. package/stats/index.d.ts +0 -1
  428. package/stats/lib/stats/stats.d.ts +0 -16
  429. package/textures/README.md +0 -3
  430. package/textures/index.d.ts +0 -10
  431. package/textures/lib/canvas-texture/canvas-texture.d.ts +0 -8
  432. package/textures/lib/common.d.ts +0 -1
  433. package/textures/lib/compressed-array-texture/compressed-array-texture.d.ts +0 -8
  434. package/textures/lib/compressed-texture/compressed-texture.d.ts +0 -8
  435. package/textures/lib/cube-texture/cube-texture.d.ts +0 -8
  436. package/textures/lib/data-array-texture/data-array-texture.d.ts +0 -8
  437. package/textures/lib/data-texture/data-texture.d.ts +0 -8
  438. package/textures/lib/data3-dtexture/data3-dtexture.d.ts +0 -8
  439. package/textures/lib/depth-texture/depth-texture.d.ts +0 -8
  440. package/textures/lib/framebuffer-texture/framebuffer-texture.d.ts +0 -8
  441. package/textures/lib/video-texture/video-texture.d.ts +0 -8
@@ -0,0 +1,137 @@
1
+ function createSubs(callback, subs) {
2
+ const sub = { callback };
3
+ subs.add(sub);
4
+ return () => void subs.delete(sub);
5
+ }
6
+ const globalEffects = new Set();
7
+ const globalAfterEffects = new Set();
8
+ const globalTailEffects = new Set();
9
+ /**
10
+ * Adds a global render callback which is called each frame.
11
+ * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addEffect
12
+ */
13
+ export const addEffect = (callback) => createSubs(callback, globalEffects);
14
+ /**
15
+ * Adds a global after-render callback which is called each frame.
16
+ * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addAfterEffect
17
+ */
18
+ export const addAfterEffect = (callback) => createSubs(callback, globalAfterEffects);
19
+ /**
20
+ * Adds a global callback which is called when rendering stops.
21
+ * @see https://docs.pmnd.rs/react-three-fiber/api/additional-exports#addTail
22
+ */
23
+ export const addTail = (callback) => createSubs(callback, globalTailEffects);
24
+ function run(effects, timestamp) {
25
+ if (!effects.size)
26
+ return;
27
+ for (const { callback } of effects.values()) {
28
+ callback(timestamp);
29
+ }
30
+ }
31
+ export function flushGlobalEffects(type, timestamp) {
32
+ switch (type) {
33
+ case 'before':
34
+ return run(globalEffects, timestamp);
35
+ case 'after':
36
+ return run(globalAfterEffects, timestamp);
37
+ case 'tail':
38
+ return run(globalTailEffects, timestamp);
39
+ }
40
+ }
41
+ function render(timestamp, store, frame) {
42
+ const state = store.get();
43
+ // Run local effects
44
+ let delta = state.clock.getDelta();
45
+ // In frameloop='never' mode, clock times are updated using the provided timestamp
46
+ if (state.frameloop === 'never' && typeof timestamp === 'number') {
47
+ delta = timestamp - state.clock.elapsedTime;
48
+ state.clock.oldTime = state.clock.elapsedTime;
49
+ state.clock.elapsedTime = timestamp;
50
+ }
51
+ // Call subscribers (useFrame)
52
+ // subscribers = state.internal.subscribers;
53
+ for (let i = 0; i < state.internal.subscribers.length; i++) {
54
+ const subscriber = state.internal.subscribers[i];
55
+ subscriber.callback({ ...state, delta, frame });
56
+ }
57
+ // Render content
58
+ if (!state.internal.priority && state.gl.render) {
59
+ state.gl.render(state.scene, state.camera);
60
+ }
61
+ // Decrease frame count
62
+ state.internal.frames = Math.max(0, state.internal.frames - 1);
63
+ return state.frameloop === 'always' ? 1 : state.internal.frames;
64
+ }
65
+ export function createLoop(roots) {
66
+ let running = false;
67
+ let repeat;
68
+ let frame;
69
+ function loop(timestamp) {
70
+ frame = requestAnimationFrame(loop);
71
+ running = true;
72
+ repeat = 0;
73
+ // Run effects
74
+ flushGlobalEffects('before', timestamp);
75
+ // Render all roots
76
+ for (const root of roots.values()) {
77
+ const state = root.get();
78
+ // If the frameloop is invalidated, do not run another frame
79
+ if (state.internal.active &&
80
+ (state.frameloop === 'always' || state.internal.frames > 0) &&
81
+ !state.gl.xr?.isPresenting) {
82
+ repeat += render(timestamp, root);
83
+ }
84
+ }
85
+ // Run after-effects
86
+ flushGlobalEffects('after', timestamp);
87
+ // Stop the loop if nothing invalidates it
88
+ if (repeat === 0) {
89
+ // Tail call effects, they are called when rendering stops
90
+ flushGlobalEffects('tail', timestamp);
91
+ // Flag end of operation
92
+ running = false;
93
+ return cancelAnimationFrame(frame);
94
+ }
95
+ }
96
+ function invalidate(store, frames = 1) {
97
+ const state = store?.get();
98
+ if (!state)
99
+ return roots.forEach((root) => invalidate(root, frames));
100
+ if (state.gl.xr?.isPresenting || !state.internal.active || state.frameloop === 'never')
101
+ return;
102
+ // Increase frames, do not go higher than 60
103
+ state.internal.frames = Math.min(60, state.internal.frames + frames);
104
+ // If the render-loop isn't active, start it
105
+ if (!running) {
106
+ running = true;
107
+ requestAnimationFrame(loop);
108
+ }
109
+ }
110
+ function advance(timestamp, runGlobalEffects = true, store, frame) {
111
+ const state = store?.get();
112
+ if (runGlobalEffects)
113
+ flushGlobalEffects('before', timestamp);
114
+ if (!state)
115
+ for (const root of roots.values())
116
+ render(timestamp, root);
117
+ // safe to assume store is available here
118
+ else
119
+ render(timestamp, store, frame);
120
+ if (runGlobalEffects)
121
+ flushGlobalEffects('after', timestamp);
122
+ }
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
+ };
136
+ }
137
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9vcC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS9zcmMvbGliL2xvb3AudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBTUEsU0FBUyxVQUFVLENBQUMsUUFBaUMsRUFBRSxJQUFxQjtJQUN4RSxNQUFNLEdBQUcsR0FBRyxFQUFFLFFBQVEsRUFBRSxDQUFDO0lBQ3pCLElBQUksQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7SUFDZCxPQUFPLEdBQUcsRUFBRSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBRUQsTUFBTSxhQUFhLEdBQW9CLElBQUksR0FBRyxFQUFFLENBQUM7QUFDakQsTUFBTSxrQkFBa0IsR0FBb0IsSUFBSSxHQUFHLEVBQUUsQ0FBQztBQUN0RCxNQUFNLGlCQUFpQixHQUFvQixJQUFJLEdBQUcsRUFBRSxDQUFDO0FBRXJEOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLFNBQVMsR0FBRyxDQUFDLFFBQWlDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFFcEc7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFHLENBQUMsUUFBaUMsRUFBRSxFQUFFLENBQUMsVUFBVSxDQUFDLFFBQVEsRUFBRSxrQkFBa0IsQ0FBQyxDQUFDO0FBRTlHOzs7R0FHRztBQUNILE1BQU0sQ0FBQyxNQUFNLE9BQU8sR0FBRyxDQUFDLFFBQWlDLEVBQUUsRUFBRSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsaUJBQWlCLENBQUMsQ0FBQztBQUV0RyxTQUFTLEdBQUcsQ0FBQyxPQUF3QixFQUFFLFNBQWlCO0lBQ3BELElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSTtRQUFFLE9BQU87SUFDMUIsS0FBSyxNQUFNLEVBQUUsUUFBUSxFQUFFLElBQUksT0FBTyxDQUFDLE1B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QUFDLEVBQUUsRUFBRSxLQUFLLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQztRQUNyRSw0Q0FBNEM7UUFDNUMsSUFBSSxDQUFDLE9BQU8sRUFBRTtZQUNWLE9BQU8sR0FBRyxJQUFJLENBQUM7WUFDZixxQkFBcUIsQ0FBQyxJQUFJLENBQUMsQ0FBQztTQUMvQjtJQUNMLENBQUM7SUFFRCxTQUFTLE9BQU8sQ0FDWixTQUFpQixFQUNqQixtQkFBNEIsSUFBSSxFQUNoQyxLQUE0QixFQUM1QixLQUFlO1FBRWYsTUFBTSxLQUFLLEdBQUcsS0FBSyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzNCLElBQUksZ0JBQWdCO1lBQUUsa0JBQWtCLENBQUMsUUFBUSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzlELElBQUksQ0FBQyxLQUFLO1lBQUUsS0FBSyxNQUFNLElBQUksSUFBSSxLQUFLLENBQUMsTUFBTSxFQUFFO2dCQUFFLE1BQU0sQ0FBQyxTQUFTLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkUseUNBQXlDOztZQUNwQyxNQUFNLENBQUMsU0FBUyxFQUFFLEtBQU0sRUFBRSxLQUFLLENBQUMsQ0FBQztRQUN0QyxJQUFJLGdCQUFnQjtZQUFFLGtCQUFrQixDQUFDLE9BQU8sRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNqRSxDQUFDO0lBRUQsT0FBTztRQUNILElBQUk7UUFDSjs7O1dBR0c7UUFDSCxVQUFVO1FBQ1Y7OztXQUdHO1FBQ0gsT0FBTztLQUNWLENBQUM7QUFDTixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgTmd0UnhTdG9yZSB9IGZyb20gJy4vc3RvcmVzL3J4LXN0b3JlJztcbmltcG9ydCB0eXBlIHsgTmd0U3RhdGUgfSBmcm9tICcuL3R5cGVzJztcblxuZXhwb3J0IHR5cGUgTmd0R2xvYmFsUmVuZGVyQ2FsbGJhY2sgPSAodGltZXN0YW1wOiBudW1iZXIpID0+IHZvaWQ7XG50eXBlIE5ndFN1Ykl0ZW0gPSB7IGNhbGxiYWNrOiBOZ3RHbG9iYWxSZW5kZXJDYWxsYmFjayB9O1xuXG5mdW5jdGlvbiBjcmVhdGVTdWJzKGNhbGxiYWNrOiBOZ3RHbG9iYWxSZW5kZXJDYWxsYmFjaywgc3ViczogU2V0PE5ndFN1Ykl0ZW0+KTogKCkgPT4gdm9pZCB7XG4gICAgY29uc3Qgc3ViID0geyBjYWxsYmFjayB9O1xuICAgIHN1YnMuYWRkKHN1Yik7XG4gICAgcmV0dXJuICgpID0+IHZvaWQgc3Vicy5kZWxldGUoc3ViKTtcbn1cblxuY29uc3QgZ2xvYmFsRWZmZWN0czogU2V0PE5ndFN1Ykl0ZW0+ID0gbmV3IFNldCgpO1xuY29uc3QgZ2xvYmFsQWZ0ZXJFZmZlY3RzOiBTZXQ8Tmd0U3ViSXRlbT4gPSBuZXcgU2V0KCk7XG5jb25zdCBnbG9iYWxUYWlsRWZmZWN0czogU2V0PE5ndFN1Ykl0ZW0+ID0gbmV3IFNldCgpO1xuXG4vKipcbiAqIEFkZHMgYSBnbG9iYWwgcmVuZGVyIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCBlYWNoIGZyYW1lLlxuICogQHNlZSBodHRwczovL2RvY3MucG1uZC5ycy9yZWFjdC10aHJlZS1maWJlci9hcGkvYWRkaXRpb25hbC1leHBvcnRzI2FkZEVmZmVjdFxuICovXG5leHBvcnQgY29uc3QgYWRkRWZmZWN0ID0gKGNhbGxiYWNrOiBOZ3RHbG9iYWxSZW5kZXJDYWxsYmFjaykgPT4gY3JlYXRlU3VicyhjYWxsYmFjaywgZ2xvYmFsRWZmZWN0cyk7XG5cbi8qKlxuICogQWRkcyBhIGdsb2JhbCBhZnRlci1yZW5kZXIgY2FsbGJhY2sgd2hpY2ggaXMgY2FsbGVkIGVhY2ggZnJhbWUuXG4gKiBAc2VlIGh0dHBzOi8vZG9jcy5wbW5kLnJzL3JlYWN0LXRocmVlLWZpYmVyL2FwaS9hZGRpdGlvbmFsLWV4cG9ydHMjYWRkQWZ0ZXJFZmZlY3RcbiAqL1xuZXhwb3J0IGNvbnN0IGFkZEFmdGVyRWZmZWN0ID0gKGNhbGxiYWNrOiBOZ3RHbG9iYWxSZW5kZXJDYWxsYmFjaykgPT4gY3JlYXRlU3VicyhjYWxsYmFjaywgZ2xvYmFsQWZ0ZXJFZmZlY3RzKTtcblxuLyoqXG4gKiBBZGRzIGEgZ2xvYmFsIGNhbGxiYWNrIHdoaWNoIGlzIGNhbGxlZCB3aGVuIHJlbmRlcmluZyBzdG9wcy5cbiAqIEBzZWUgaHR0cHM6Ly9kb2NzLnBtbmQucnMvcmVhY3QtdGhyZWUtZmliZXIvYXBpL2FkZGl0aW9uYWwtZXhwb3J0cyNhZGRUYWlsXG4gKi9cbmV4cG9ydCBjb25zdCBhZGRUYWlsID0gKGNhbGxiYWNrOiBOZ3RHbG9iYWxSZW5kZXJDYWxsYmFjaykgPT4gY3JlYXRlU3VicyhjYWxsYmFjaywgZ2xvYmFsVGFpbEVmZmVjdHMpO1xuXG5mdW5jdGlvbiBydW4oZWZmZWN0czogU2V0PE5ndFN1Ykl0ZW0+LCB0aW1lc3RhbXA6IG51bWJlcikge1xuICAgIGlmICghZWZmZWN0cy5zaXplKSByZXR1cm47XG4gICAgZm9yIChjb25zdCB7IGNhbGxiYWNrIH0gb2YgZWZmZWN0cy52YWx1ZXMoKSkge1xuICAgICAgICBjYWxsYmFjayh0aW1lc3RhbXApO1xuICAgIH1cbn1cblxuZXhwb3J0IHR5cGUgR2xvYmFsRWZmZWN0VHlwZSA9ICdiZWZvcmUnIHwgJ2FmdGVyJyB8ICd0YWlsJztcblxuZXhwb3J0IGZ1bmN0aW9uIGZsdXNoR2xvYmFsRWZmZWN0cyh0eXBlOiBHbG9iYWxFZmZlY3RUeXBlLCB0aW1lc3RhbXA6IG51bWJlcik6IHZvaWQge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlICdiZWZvcmUnOlxuICAgICAgICAgICAgcmV0dXJuIHJ1bihnbG9iYWxFZmZlY3RzLCB0aW1lc3RhbXApO1xuICAgICAgICBjYXNlICdhZnRlcic6XG4gICAgICAgICAgICByZXR1cm4gcnVuKGdsb2JhbEFmdGVyRWZmZWN0cywgdGltZXN0YW1wKTtcbiAgICAgICAgY2FzZSAndGFpbCc6XG4gICAgICAgICAgICByZXR1cm4gcnVuKGdsb2JhbFRhaWxFZmZlY3RzLCB0aW1lc3RhbXApO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gcmVuZGVyKHRpbWVzdGFtcDogbnVtYmVyLCBzdG9yZTogTmd0UnhTdG9yZTxOZ3RTdGF0ZT4sIGZyYW1lPzogWFJGcmFtZSkge1xuICAgIGNvbnN0IHN0YXRlID0gc3RvcmUuZ2V0KCk7XG4gICAgLy8gUnVuIGxvY2FsIGVmZmVjdHNcbiAgICBsZXQgZGVsdGEgPSBzdGF0ZS5jbG9jay5nZXREZWx0YSgpO1xuICAgIC8vIEluIGZyYW1lbG9vcD0nbmV2ZXInIG1vZGUsIGNsb2NrIHRpbWVzIGFyZSB1cGRhdGVkIHVzaW5nIHRoZSBwcm92aWRlZCB0aW1lc3RhbXBcbiAgICBpZiAoc3RhdGUuZnJhbWVsb29wID09PSAnbmV2ZXInICYmIHR5cGVvZiB0aW1lc3RhbXAgPT09ICdudW1iZXInKSB7XG4gICAgICAgIGRlbHRhID0gdGltZXN0YW1wIC0gc3RhdGUuY2xvY2suZWxhcHNlZFRpbWU7XG4gICAgICAgIHN0YXRlLmNsb2NrLm9sZFRpbWUgPSBzdGF0ZS5jbG9jay5lbGFwc2VkVGltZTtcbiAgICAgICAgc3RhdGUuY2xvY2suZWxhcHNlZFRpbWUgPSB0aW1lc3RhbXA7XG4gICAgfVxuICAgIC8vIENhbGwgc3Vic2NyaWJlcnMgKHVzZUZyYW1lKVxuICAgIC8vIHN1YnNjcmliZXJzID0gc3RhdGUuaW50ZXJuYWwuc3Vic2NyaWJlcnM7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzdGF0ZS5pbnRlcm5hbC5zdWJzY3JpYmVycy5sZW5ndGg7IGkrKykge1xuICAgICAgICBjb25zdCBzdWJzY3JpYmVyID0gc3RhdGUuaW50ZXJuYWwuc3Vic2NyaWJlcnNbaV07XG4gICAgICAgIHN1YnNjcmliZXIuY2FsbGJhY2soeyAuLi5zdGF0ZSwgZGVsdGEsIGZyYW1lIH0pO1xuICAgIH1cbiAgICAvLyBSZW5kZXIgY29udGVudFxuICAgIGlmICghc3RhdGUuaW50ZXJuYWwucHJpb3JpdHkgJiYgc3RhdGUuZ2wucmVuZGVyKSB7XG4gICAgICAgIHN0YXRlLmdsLnJlbmRlcihzdGF0ZS5zY2VuZSwgc3RhdGUuY2FtZXJhKTtcbiAgICB9XG4gICAgLy8gRGVjcmVhc2UgZnJhbWUgY291bnRcbiAgICBzdGF0ZS5pbnRlcm5hbC5mcmFtZXMgPSBNYXRoLm1heCgwLCBzdGF0ZS5pbnRlcm5hbC5mcmFtZXMgLSAxKTtcbiAgICByZXR1cm4gc3RhdGUuZnJhbWVsb29wID09PSAnYWx3YXlzJyA/IDEgOiBzdGF0ZS5pbnRlcm5hbC5mcmFtZXM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVMb29wPFRDYW52YXM+KHJvb3RzOiBNYXA8VENhbnZhcywgTmd0UnhTdG9yZTxOZ3RTdGF0ZT4+KSB7XG4gICAgbGV0IHJ1bm5pbmcgPSBmYWxzZTtcbiAgICBsZXQgcmVwZWF0OiBudW1iZXI7XG4gICAgbGV0IGZyYW1lOiBudW1iZXI7XG5cbiAgICBmdW5jdGlvbiBsb29wKHRpbWVzdGFtcDogbnVtYmVyKTogdm9pZCB7XG4gICAgICAgIGZyYW1lID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKGxvb3ApO1xuICAgICAgICBydW5uaW5nID0gdHJ1ZTtcbiAgICAgICAgcmVwZWF0ID0gMDtcblxuICAgICAgICAvLyBSdW4gZWZmZWN0c1xuICAgICAgICBmbHVzaEdsb2JhbEVmZmVjdHMoJ2JlZm9yZScsIHRpbWVzdGFtcCk7XG5cbiAgICAgICAgLy8gUmVuZGVyIGFsbCByb290c1xuICAgICAgICBmb3IgKGNvbnN0IHJvb3Qgb2Ygcm9vdHMudmFsdWVzKCkpIHtcbiAgICAgICAgICAgIGNvbnN0IHN0YXRlID0gcm9vdC5nZXQoKTtcbiAgICAgICAgICAgIC8vIElmIHRoZSBmcmFtZWxvb3AgaXMgaW52YWxpZGF0ZWQsIGRvIG5vdCBydW4gYW5vdGhlciBmcmFtZVxuICAgICAgICAgICAgaWYgKFxuICAgICAgICAgICAgICAgIHN0YXRlLmludGVybmFsLmFjdGl2ZSAmJlxuICAgICAgICAgICAgICAgIChzdGF0ZS5mcmFtZWxvb3AgPT09ICdhbHdheXMnIHx8IHN0YXRlLmludGVybmFsLmZyYW1lcyA+IDApICYmXG4gICAgICAgICAgICAgICAgIXN0YXRlLmdsLnhyPy5pc1ByZXNlbnRpbmdcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHJlcGVhdCArPSByZW5kZXIodGltZXN0YW1wLCByb290KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIC8vIFJ1biBhZnRlci1lZmZlY3RzXG4gICAgICAgIGZsdXNoR2xvYmFsRWZmZWN0cygnYWZ0ZXInLCB0aW1lc3RhbXApO1xuXG4gICAgICAgIC8vIFN0b3AgdGhlIGxvb3AgaWYgbm90aGluZyBpbnZhbGlkYXRlcyBpdFxuICAgICAgICBpZiAocmVwZWF0ID09PSAwKSB7XG4gICAgICAgICAgICAvLyBUYWlsIGNhbGwgZWZmZWN0cywgdGhleSBhcmUgY2FsbGVkIHdoZW4gcmVuZGVyaW5nIHN0b3BzXG4gICAgICAgICAgICBmbHVzaEdsb2JhbEVmZmVjdHMoJ3RhaWwnLCB0aW1lc3RhbXApO1xuXG4gICAgICAgICAgICAvLyBGbGFnIGVuZCBvZiBvcGVyYXRpb25cbiAgICAgICAgICAgIHJ1bm5pbmcgPSBmYWxzZTtcbiAgICAgICAgICAgIHJldHVybiBjYW5jZWxBbmltYXRpb25GcmFtZShmcmFtZSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmdW5jdGlvbiBpbnZhbGlkYXRlKHN0b3JlPzogTmd0UnhTdG9yZTxOZ3RTdGF0ZT4sIGZyYW1lcyA9IDEpOiB2b2lkIHtcbiAgICAgICAgY29uc3Qgc3RhdGUgPSBzdG9yZT8uZ2V0KCk7XG4gICAgICAgIGlmICghc3RhdGUpIHJldHVybiByb290cy5mb3JFYWNoKChyb290KSA9PiBpbnZhbGlkYXRlKHJvb3QsIGZyYW1lcykpO1xuICAgICAgICBpZiAoc3RhdGUuZ2wueHI/LmlzUHJlc2VudGluZyB8fCAhc3RhdGUuaW50ZXJuYWwuYWN0aXZlIHx8IHN0YXRlLmZyYW1lbG9vcCA9PT0gJ25ldmVyJykgcmV0dXJuO1xuICAgICAgICAvLyBJbmNyZWFzZSBmcmFtZXMsIGRvIG5vdCBnbyBoaWdoZXIgdGhhbiA2MFxuICAgICAgICBzdGF0ZS5pbnRlcm5hbC5mcmFtZXMgPSBNYXRoLm1pbig2MCwgc3RhdGUuaW50ZXJuYWwuZnJhbWVzICsgZnJhbWVzKTtcbiAgICAgICAgLy8gSWYgdGhlIHJlbmRlci1sb29wIGlzbid0IGFjdGl2ZSwgc3RhcnQgaXRcbiAgICAgICAgaWYgKCFydW5uaW5nKSB7XG4gICAgICAgICAgICBydW5uaW5nID0gdHJ1ZTtcbiAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZShsb29wKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGZ1bmN0aW9uIGFkdmFuY2UoXG4gICAgICAgIHRpbWVzdGFtcDogbnVtYmVyLFxuICAgICAgICBydW5HbG9iYWxFZmZlY3RzOiBib29sZWFuID0gdHJ1ZSxcbiAgICAgICAgc3RvcmU/OiBOZ3RSeFN0b3JlPE5ndFN0YXRlPixcbiAgICAgICAgZnJhbWU/OiBYUkZyYW1lXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGNvbnN0IHN0YXRlID0gc3RvcmU/LmdldCgpO1xuICAgICAgICBpZiAocnVuR2xvYmFsRWZmZWN0cykgZmx1c2hHbG9iYWxFZmZlY3RzKCdiZWZvcmUnLCB0aW1lc3RhbXApO1xuICAgICAgICBpZiAoIXN0YXRlKSBmb3IgKGNvbnN0IHJvb3Qgb2Ygcm9vdHMudmFsdWVzKCkpIHJlbmRlcih0aW1lc3RhbXAsIHJvb3QpO1xuICAgICAgICAvLyBzYWZlIHRvIGFzc3VtZSBzdG9yZSBpcyBhdmFpbGFibGUgaGVyZVxuICAgICAgICBlbHNlIHJlbmRlcih0aW1lc3RhbXAsIHN0b3JlISwgZnJhbWUpO1xuICAgICAgICBpZiAocnVuR2xvYmFsRWZmZWN0cykgZmx1c2hHbG9iYWxFZmZlY3RzKCdhZnRlcicsIHRpbWVzdGFtcCk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHtcbiAgICAgICAgbG9vcCxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEludmFsaWRhdGVzIHRoZSB2aWV3LCByZXF1ZXN0aW5nIGEgZnJhbWUgdG8gYmUgcmVuZGVyZWQuIFdpbGwgZ2xvYmFsbHkgaW52YWxpZGF0ZSB1bmxlc3MgcGFzc2VkIGEgcm9vdCdzIHN0YXRlLlxuICAgICAgICAgKiBAc2VlIGh0dHBzOi8vZG9jcy5wbW5kLnJzL3JlYWN0LXRocmVlLWZpYmVyL2FwaS9hZGRpdGlvbmFsLWV4cG9ydHMjaW52YWxpZGF0ZVxuICAgICAgICAgKi9cbiAgICAgICAgaW52YWxpZGF0ZSxcbiAgICAgICAgLyoqXG4gICAgICAgICAqIEFkdmFuY2VzIHRoZSBmcmFtZWxvb3AgYW5kIHJ1bnMgcmVuZGVyIGVmZmVjdHMsIHVzZWZ1bCBmb3Igd2hlbiBtYW51YWxseSByZW5kZXJpbmcgdmlhIGBmcmFtZWxvb3A9XCJuZXZlclwiYC5cbiAgICAgICAgICogQHNlZSBodHRwczovL2RvY3MucG1uZC5ycy9yZWFjdC10aHJlZS1maWJlci9hcGkvYWRkaXRpb25hbC1leHBvcnRzI2FkdmFuY2VcbiAgICAgICAgICovXG4gICAgICAgIGFkdmFuY2UsXG4gICAgfTtcbn1cbiJdfQ==
@@ -0,0 +1,3 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export const NGT_COMPOUND_PREFIXES = new InjectionToken('NgtCompoundPrefixes');
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9yZW5kZXJlci9kaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRS9DLE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUFXLHFCQUFxQixDQUFDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5leHBvcnQgY29uc3QgTkdUX0NPTVBPVU5EX1BSRUZJWEVTID0gbmV3IEluamVjdGlvblRva2VuPHN0cmluZ1tdPignTmd0Q29tcG91bmRQcmVmaXhlcycpO1xuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZW51bXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9yZW5kZXJlci9lbnVtcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IGNvbnN0IGVudW0gTmd0UmVuZGVyZXJDbGFzc0lkIHtcbiAgICB0eXBlLFxuICAgIHBhcmVudCxcbiAgICBjaGlsZHJlbixcbiAgICBkZXN0cm95ZWQsXG4gICAgY29tcG91bmQsXG4gICAgY29tcG91bmRQYXJlbnQsXG4gICAgY29tcG91bmRlZCxcbiAgICBxdWV1ZU9wcyxcbiAgICBhdHRyaWJ1dGVzLFxuICAgIHByb3BlcnRpZXMsXG4gICAgcmF3VmFsdWUsXG4gICAgcmVmLFxuICAgIHBvcnRhbENvbnRhaW5lcixcbiAgICBpbmplY3RvckZhY3RvcnksXG59XG5cbmV4cG9ydCBjb25zdCBlbnVtIE5ndENvbXBvdW5kQ2xhc3NJZCB7XG4gICAgYXBwbHlGaXJzdCxcbiAgICBwcm9wcyxcbn1cblxuZXhwb3J0IGNvbnN0IGVudW0gTmd0UXVldWVPcENsYXNzSWQge1xuICAgIHR5cGUsXG4gICAgb3AsXG4gICAgZG9uZSxcbn1cbiJdfQ==
@@ -0,0 +1,19 @@
1
+ import { ChangeDetectorRef, RendererFactory2 } from '@angular/core';
2
+ import { NgtStore } from '../stores/store';
3
+ import { NGT_COMPOUND_PREFIXES } from './di';
4
+ import { NgtRendererFactory } from './renderer';
5
+ export function provideNgtRenderer({ store, changeDetectorRef, compoundPrefixes = [] }) {
6
+ if (!compoundPrefixes.includes('ngts')) {
7
+ compoundPrefixes.push('ngts');
8
+ }
9
+ if (!compoundPrefixes.includes('ngtp')) {
10
+ compoundPrefixes.push('ngtp');
11
+ }
12
+ return [
13
+ { provide: RendererFactory2, useClass: NgtRendererFactory },
14
+ { provide: NgtStore, useValue: store },
15
+ { provide: ChangeDetectorRef, useValue: changeDetectorRef },
16
+ { provide: NGT_COMPOUND_PREFIXES, useValue: compoundPrefixes },
17
+ ];
18
+ }
19
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJvdmlkZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9yZW5kZXJlci9wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsZ0JBQWdCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDcEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQzNDLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM3QyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxZQUFZLENBQUM7QUFRaEQsTUFBTSxVQUFVLGtCQUFrQixDQUFDLEVBQUUsS0FBSyxFQUFFLGlCQUFpQixFQUFFLGdCQUFnQixHQUFHLEVBQUUsRUFBOEI7SUFDOUcsSUFBSSxDQUFDLGdCQUFnQixDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsRUFBRTtRQUNwQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDakM7SUFFRCxJQUFJLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxFQUFFO1FBQ3BDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNqQztJQUVELE9BQU87UUFDSCxFQUFFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxRQUFRLEVBQUUsa0JBQWtCLEVBQUU7UUFDM0QsRUFBRSxPQUFPLEVBQUUsUUFBUSxFQUFFLFFBQVEsRUFBRSxLQUFLLEVBQUU7UUFDdEMsRUFBRSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLGlCQUFpQixFQUFFO1FBQzNELEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLFFBQVEsRUFBRSxnQkFBZ0IsRUFBRTtLQUNqRSxDQUFDO0FBQ04sQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENoYW5nZURldGVjdG9yUmVmLCBSZW5kZXJlckZhY3RvcnkyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBOZ3RTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9zdG9yZSc7XG5pbXBvcnQgeyBOR1RfQ09NUE9VTkRfUFJFRklYRVMgfSBmcm9tICcuL2RpJztcbmltcG9ydCB7IE5ndFJlbmRlcmVyRmFjdG9yeSB9IGZyb20gJy4vcmVuZGVyZXInO1xuXG5leHBvcnQgdHlwZSBOZ3RSZW5kZXJlclByb3ZpZGVyT3B0aW9ucyA9IHtcbiAgICBzdG9yZTogTmd0U3RvcmU7XG4gICAgY2hhbmdlRGV0ZWN0b3JSZWY6IENoYW5nZURldGVjdG9yUmVmO1xuICAgIGNvbXBvdW5kUHJlZml4ZXM/OiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlTmd0UmVuZGVyZXIoeyBzdG9yZSwgY2hhbmdlRGV0ZWN0b3JSZWYsIGNvbXBvdW5kUHJlZml4ZXMgPSBbXSB9OiBOZ3RSZW5kZXJlclByb3ZpZGVyT3B0aW9ucykge1xuICAgIGlmICghY29tcG91bmRQcmVmaXhlcy5pbmNsdWRlcygnbmd0cycpKSB7XG4gICAgICAgIGNvbXBvdW5kUHJlZml4ZXMucHVzaCgnbmd0cycpO1xuICAgIH1cblxuICAgIGlmICghY29tcG91bmRQcmVmaXhlcy5pbmNsdWRlcygnbmd0cCcpKSB7XG4gICAgICAgIGNvbXBvdW5kUHJlZml4ZXMucHVzaCgnbmd0cCcpO1xuICAgIH1cblxuICAgIHJldHVybiBbXG4gICAgICAgIHsgcHJvdmlkZTogUmVuZGVyZXJGYWN0b3J5MiwgdXNlQ2xhc3M6IE5ndFJlbmRlcmVyRmFjdG9yeSB9LFxuICAgICAgICB7IHByb3ZpZGU6IE5ndFN0b3JlLCB1c2VWYWx1ZTogc3RvcmUgfSxcbiAgICAgICAgeyBwcm92aWRlOiBDaGFuZ2VEZXRlY3RvclJlZiwgdXNlVmFsdWU6IGNoYW5nZURldGVjdG9yUmVmIH0sXG4gICAgICAgIHsgcHJvdmlkZTogTkdUX0NPTVBPVU5EX1BSRUZJWEVTLCB1c2VWYWx1ZTogY29tcG91bmRQcmVmaXhlcyB9LFxuICAgIF07XG59XG4iXX0=
@@ -0,0 +1,293 @@
1
+ import { ChangeDetectorRef, inject, Injectable } from '@angular/core';
2
+ import { ɵDomRendererFactory2 as DomRendererFactory2 } from '@angular/platform-browser';
3
+ import { NGT_CATALOGUE } from '../di/catalogue';
4
+ import { NgtStore } from '../stores/store';
5
+ import { getLocalState, prepare } from '../utils/instance';
6
+ import { is } from '../utils/is';
7
+ import { NGT_COMPOUND_PREFIXES } from './di';
8
+ import { NgtRendererStore } from './state';
9
+ import { attachThreeChild, kebabToPascal, processThreeEvent, removeThreeChild, SPECIAL_DOM_TAG } from './utils';
10
+ import * as i0 from "@angular/core";
11
+ export class NgtRendererFactory {
12
+ constructor() {
13
+ this.domRendererFactory = inject(DomRendererFactory2);
14
+ this.cdr = inject(ChangeDetectorRef);
15
+ this.store = inject(NgtStore);
16
+ this.catalogue = inject(NGT_CATALOGUE);
17
+ this.compoundPrefixes = inject(NGT_COMPOUND_PREFIXES);
18
+ this.rendererStore = new NgtRendererStore({
19
+ store: this.store,
20
+ cdr: this.cdr,
21
+ compoundPrefixes: this.compoundPrefixes,
22
+ });
23
+ }
24
+ createRenderer(hostElement, type) {
25
+ // TODO we might need to check on "type" to return DomRenderer for that particular type to support HTML
26
+ if (!this.renderer) {
27
+ const domRenderer = this.domRendererFactory.createRenderer(hostElement, type);
28
+ this.renderer = new NgtRenderer(domRenderer, this.rendererStore, this.catalogue);
29
+ }
30
+ return this.renderer;
31
+ }
32
+ }
33
+ NgtRendererFactory.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtRendererFactory, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
34
+ NgtRendererFactory.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtRendererFactory });
35
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtRendererFactory, decorators: [{
36
+ type: Injectable
37
+ }] });
38
+ export class NgtRenderer {
39
+ constructor(domRenderer, store, catalogue) {
40
+ this.domRenderer = domRenderer;
41
+ this.store = store;
42
+ this.catalogue = catalogue;
43
+ this.first = false;
44
+ this.createText = this.domRenderer.createText.bind(this.domRenderer);
45
+ this.destroy = this.domRenderer.destroy.bind(this.domRenderer);
46
+ this.destroyNode = null;
47
+ this.selectRootElement = this.domRenderer.selectRootElement.bind(this.domRenderer);
48
+ this.nextSibling = this.domRenderer.nextSibling.bind(this.domRenderer);
49
+ this.removeAttribute = this.domRenderer.removeAttribute.bind(this.domRenderer);
50
+ this.addClass = this.domRenderer.addClass.bind(this.domRenderer);
51
+ this.removeClass = this.domRenderer.removeClass.bind(this.domRenderer);
52
+ this.setStyle = this.domRenderer.setStyle.bind(this.domRenderer);
53
+ this.removeStyle = this.domRenderer.removeStyle.bind(this.domRenderer);
54
+ this.setValue = this.domRenderer.setValue.bind(this.domRenderer);
55
+ }
56
+ createElement(name, namespace) {
57
+ const element = this.domRenderer.createElement(name, namespace);
58
+ // on first pass, we return the Root Scene as the root node
59
+ if (!this.first) {
60
+ this.first = true;
61
+ return this.store.createNode('three', this.store.rootScene);
62
+ }
63
+ // handle compound
64
+ if (this.store.isCompound(name))
65
+ return this.store.createNode('compound', element);
66
+ // handle portal
67
+ if (name === SPECIAL_DOM_TAG.NGT_PORTAL) {
68
+ return this.store.createNode('portal', element);
69
+ }
70
+ // handle raw value
71
+ if (name === SPECIAL_DOM_TAG.NGT_VALUE) {
72
+ return this.store.createNode('three', Object.assign({ __ngt_renderer__: { rawValue: undefined } }, { __ngt__: { isRaw: true } }));
73
+ }
74
+ const { injectedArgs, store } = this.store.getCreationState();
75
+ // handle primitive
76
+ if (name === SPECIAL_DOM_TAG.NGT_PRIMITIVE) {
77
+ if (!injectedArgs[0])
78
+ throw new Error(`[NGT] ngt-primitive without args is invalid`);
79
+ const object = injectedArgs[0];
80
+ let localState = getLocalState(object);
81
+ if (!Object.keys(localState).length) {
82
+ prepare(object, { store, args: injectedArgs, primitive: true });
83
+ localState = getLocalState(object);
84
+ }
85
+ if (!localState.store)
86
+ localState.store = store;
87
+ return this.store.createNode('three', object);
88
+ }
89
+ const threeTag = name.startsWith('ngt') ? name.slice(4) : name;
90
+ const threeName = kebabToPascal(threeTag);
91
+ const threeTarget = this.catalogue[threeName];
92
+ // we have the THREE constructor here, handle it
93
+ if (threeTarget) {
94
+ const instance = prepare(new threeTarget(...injectedArgs), { store, args: injectedArgs });
95
+ const node = this.store.createNode('three', instance);
96
+ const localState = getLocalState(instance);
97
+ if (is.geometry(instance)) {
98
+ localState.attach = ['geometry'];
99
+ }
100
+ else if (is.material(instance)) {
101
+ localState.attach = ['material'];
102
+ }
103
+ return node;
104
+ }
105
+ return this.store.createNode('dom', element);
106
+ }
107
+ createComment(value) {
108
+ const comment = this.domRenderer.createComment(value);
109
+ return this.store.createNode('comment', comment);
110
+ }
111
+ appendChild(parent, newChild) {
112
+ // TODO: just ignore text node for now
113
+ if (newChild instanceof Text)
114
+ return;
115
+ if (newChild.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'comment') {
116
+ this.store.setParent(newChild, parent);
117
+ return;
118
+ }
119
+ this.store.setParent(newChild, parent);
120
+ this.store.addChild(parent, newChild);
121
+ // if new chlid is a portal
122
+ if (newChild.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'portal') {
123
+ this.store.processPortalContainer(newChild);
124
+ if (newChild.__ngt_renderer__[12 /* NgtRendererClassId.portalContainer */]) {
125
+ this.appendChild(parent, newChild.__ngt_renderer__[12 /* NgtRendererClassId.portalContainer */]);
126
+ }
127
+ return;
128
+ }
129
+ // if parent is a portal
130
+ if (parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'portal') {
131
+ this.store.processPortalContainer(parent);
132
+ if (parent.__ngt_renderer__[12 /* NgtRendererClassId.portalContainer */]) {
133
+ this.appendChild(parent.__ngt_renderer__[12 /* NgtRendererClassId.portalContainer */], newChild);
134
+ }
135
+ return;
136
+ }
137
+ // if both are three instances, straightforward case
138
+ if (parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three' &&
139
+ newChild.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three') {
140
+ attachThreeChild(parent, newChild);
141
+ // here, we handle the special case of if the parent has a compoundParent, which means this child is part of a compound parent template
142
+ if (!newChild.__ngt_renderer__[4 /* NgtRendererClassId.compound */])
143
+ return;
144
+ const closestGrandparentWithCompound = this.store.getClosestParentWithCompound(parent);
145
+ if (!closestGrandparentWithCompound)
146
+ return;
147
+ this.appendChild(closestGrandparentWithCompound, newChild);
148
+ return;
149
+ }
150
+ // if only the parent is the THREE instance
151
+ if (parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three') {
152
+ if (newChild.__ngt_renderer__[2 /* NgtRendererClassId.children */].length) {
153
+ for (const renderChild of newChild.__ngt_renderer__[2 /* NgtRendererClassId.children */]) {
154
+ this.appendChild(parent, renderChild);
155
+ }
156
+ }
157
+ }
158
+ // if parent is a compound
159
+ if (parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'compound') {
160
+ // if compound doesn't have a THREE instance set yet
161
+ if (!parent.__ngt_renderer__[6 /* NgtRendererClassId.compounded */] &&
162
+ newChild.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three') {
163
+ // if child is indeed an ngtCompound
164
+ if (newChild.__ngt_renderer__[4 /* NgtRendererClassId.compound */]) {
165
+ this.store.setCompound(parent, newChild);
166
+ }
167
+ else {
168
+ // if not, we track the parent (that is supposedly the compound component) on this three instance
169
+ if (!newChild.__ngt_renderer__[5 /* NgtRendererClassId.compoundParent */]) {
170
+ newChild.__ngt_renderer__[5 /* NgtRendererClassId.compoundParent */] = parent;
171
+ }
172
+ }
173
+ }
174
+ // reset the compound if it's changed
175
+ if (parent.__ngt_renderer__[6 /* NgtRendererClassId.compounded */] &&
176
+ newChild.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three' &&
177
+ newChild.__ngt_renderer__[4 /* NgtRendererClassId.compound */] &&
178
+ parent.__ngt_renderer__[6 /* NgtRendererClassId.compounded */] !== newChild) {
179
+ this.store.setCompound(parent, newChild);
180
+ }
181
+ }
182
+ if (newChild.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three' && !getLocalState(newChild).parent) {
183
+ // we'll try to get the grandparent instance here so that we can run appendChild with both instances
184
+ const closestGrandparentInstance = this.store.getClosestParentWithInstance(parent);
185
+ if (closestGrandparentInstance) {
186
+ this.appendChild(closestGrandparentInstance, newChild);
187
+ }
188
+ return;
189
+ }
190
+ if (parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'dom' &&
191
+ newChild.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'dom') {
192
+ const closestGrandparentInstance = this.store.getClosestParentWithInstance(parent);
193
+ if (closestGrandparentInstance) {
194
+ this.appendChild(closestGrandparentInstance, newChild);
195
+ }
196
+ }
197
+ }
198
+ insertBefore(parent, newChild
199
+ // TODO we might need these?
200
+ // refChild: NgtRendererNode,
201
+ // isMove?: boolean | undefined
202
+ ) {
203
+ if (!parent.__ngt_renderer__)
204
+ return;
205
+ this.appendChild(parent, newChild);
206
+ }
207
+ removeChild(parent, oldChild, isHostElement) {
208
+ if (parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three' &&
209
+ oldChild.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three') {
210
+ removeThreeChild(parent, oldChild, true);
211
+ this.store.destroy(oldChild, parent);
212
+ return;
213
+ }
214
+ if (parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'compound' &&
215
+ parent.__ngt_renderer__[1 /* NgtRendererClassId.parent */]) {
216
+ this.removeChild(parent.__ngt_renderer__[1 /* NgtRendererClassId.parent */], oldChild, isHostElement);
217
+ return;
218
+ }
219
+ if (parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three') {
220
+ this.store.destroy(oldChild, parent);
221
+ return;
222
+ }
223
+ const closestGrandparentInstance = this.store.getClosestParentWithInstance(parent);
224
+ if (closestGrandparentInstance) {
225
+ this.removeChild(closestGrandparentInstance, oldChild, isHostElement);
226
+ }
227
+ this.store.destroy(oldChild, closestGrandparentInstance);
228
+ }
229
+ parentNode(node) {
230
+ if (node.__ngt_renderer__?.[1 /* NgtRendererClassId.parent */])
231
+ return node.__ngt_renderer__[1 /* NgtRendererClassId.parent */];
232
+ return this.domRenderer.parentNode(node);
233
+ }
234
+ setAttribute(el, name, value, namespace) {
235
+ if (el.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'compound') {
236
+ // we don't have the compound instance yet
237
+ el.__ngt_renderer__[8 /* NgtRendererClassId.attributes */][name] = value;
238
+ if (!el.__ngt_renderer__[6 /* NgtRendererClassId.compounded */]) {
239
+ this.store.queueOperation(el, ['op', () => this.setAttribute(el, name, value, namespace)]);
240
+ return;
241
+ }
242
+ this.setAttribute(el.__ngt_renderer__[6 /* NgtRendererClassId.compounded */], name, value, namespace);
243
+ return;
244
+ }
245
+ if (el.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three') {
246
+ this.store.applyAttribute(el, name, value);
247
+ }
248
+ }
249
+ setProperty(el, name, value) {
250
+ if (el.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'compound') {
251
+ // we don't have the compound instance yet
252
+ el.__ngt_renderer__[9 /* NgtRendererClassId.properties */][name] = value;
253
+ if (!el.__ngt_renderer__[6 /* NgtRendererClassId.compounded */]) {
254
+ this.store.queueOperation(el, ['op', () => this.setProperty(el, name, value)]);
255
+ return;
256
+ }
257
+ if (el.__ngt_renderer__[6 /* NgtRendererClassId.compounded */].__ngt_renderer__[4 /* NgtRendererClassId.compound */]) {
258
+ Object.assign(el.__ngt_renderer__[6 /* NgtRendererClassId.compounded */].__ngt_renderer__[4 /* NgtRendererClassId.compound */], {
259
+ props: {
260
+ ...el.__ngt_renderer__[6 /* NgtRendererClassId.compounded */].__ngt_renderer__[4 /* NgtRendererClassId.compound */],
261
+ [name]: value,
262
+ },
263
+ });
264
+ }
265
+ this.setProperty(el.__ngt_renderer__[6 /* NgtRendererClassId.compounded */], name, value);
266
+ return;
267
+ }
268
+ if (el.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three') {
269
+ this.store.applyProperty(el, name, value);
270
+ }
271
+ }
272
+ listen(target, eventName, callback) {
273
+ if (target.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three' ||
274
+ (target.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'compound' &&
275
+ target.__ngt_renderer__[6 /* NgtRendererClassId.compounded */])) {
276
+ const instance = target.__ngt_renderer__[6 /* NgtRendererClassId.compounded */] || target;
277
+ const priority = getLocalState(target).priority;
278
+ return processThreeEvent(instance, priority || 0, eventName, callback, this.store.rootCdr);
279
+ }
280
+ if (target.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'compound' &&
281
+ !target.__ngt_renderer__[6 /* NgtRendererClassId.compounded */]) {
282
+ this.store.queueOperation(target, [
283
+ 'op',
284
+ () => this.store.queueOperation(target, ['cleanUp', this.listen(target, eventName, callback)]),
285
+ ]);
286
+ }
287
+ return () => { };
288
+ }
289
+ get data() {
290
+ return this.domRenderer.data;
291
+ }
292
+ }
293
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVuZGVyZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9yZW5kZXJlci9yZW5kZXJlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxFQUFFLFVBQVUsRUFBOEMsTUFBTSxlQUFlLENBQUM7QUFDbEgsT0FBTyxFQUFFLG9CQUFvQixJQUFJLG1CQUFtQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDeEYsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQ2hELE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMzQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE9BQU8sRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQzNELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFDakMsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRTdDLE9BQU8sRUFBbUIsZ0JBQWdCLEVBQUUsTUFBTSxTQUFTLENBQUM7QUFDNUQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGFBQWEsRUFBRSxpQkFBaUIsRUFBRSxnQkFBZ0IsRUFBRSxlQUFlLEVBQUUsTUFBTSxTQUFTLENBQUM7O0FBR2hILE1BQU0sT0FBTyxrQkFBa0I7SUFEL0I7UUFFcUIsdUJBQWtCLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLENBQUM7UUFDakQsUUFBRyxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDO1FBQ2hDLFVBQUssR0FBRyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDekIsY0FBUyxHQUFHLE1BQU0sQ0FBQyxhQUFhLENBQUMsQ0FBQztRQUNsQyxxQkFBZ0IsR0FBRyxNQUFNLENBQUMscUJBQXFCLENBQUMsQ0FBQztRQUVqRCxrQkFBYSxHQUFHLElBQUksZ0JBQWdC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STtRQUNKLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxJQUFJLENBQUM7SUFDakMsQ0FBQztDQVlKIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ2hhbmdlRGV0ZWN0b3JSZWYsIGluamVjdCwgSW5qZWN0YWJsZSwgUmVuZGVyZXIyLCBSZW5kZXJlckZhY3RvcnkyLCBSZW5kZXJlclR5cGUyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyDJtURvbVJlbmRlcmVyRmFjdG9yeTIgYXMgRG9tUmVuZGVyZXJGYWN0b3J5MiB9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHsgTkdUX0NBVEFMT0dVRSB9IGZyb20gJy4uL2RpL2NhdGFsb2d1ZSc7XG5pbXBvcnQgeyBOZ3RTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9zdG9yZSc7XG5pbXBvcnQgeyBnZXRMb2NhbFN0YXRlLCBwcmVwYXJlIH0gZnJvbSAnLi4vdXRpbHMvaW5zdGFuY2UnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi91dGlscy9pcyc7XG5pbXBvcnQgeyBOR1RfQ09NUE9VTkRfUFJFRklYRVMgfSBmcm9tICcuL2RpJztcbmltcG9ydCB7IE5ndFJlbmRlcmVyQ2xhc3NJZCB9IGZyb20gJy4vZW51bXMnO1xuaW1wb3J0IHsgTmd0UmVuZGVyZXJOb2RlLCBOZ3RSZW5kZXJlclN0b3JlIH0gZnJvbSAnLi9zdGF0ZSc7XG5pbXBvcnQgeyBhdHRhY2hUaHJlZUNoaWxkLCBrZWJhYlRvUGFzY2FsLCBwcm9jZXNzVGhyZWVFdmVudCwgcmVtb3ZlVGhyZWVDaGlsZCwgU1BFQ0lBTF9ET01fVEFHIH0gZnJvbSAnLi91dGlscyc7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBOZ3RSZW5kZXJlckZhY3RvcnkgaW1wbGVtZW50cyBSZW5kZXJlckZhY3RvcnkyIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGRvbVJlbmRlcmVyRmFjdG9yeSA9IGluamVjdChEb21SZW5kZXJlckZhY3RvcnkyKTtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNkciA9IGluamVjdChDaGFuZ2VEZXRlY3RvclJlZik7XG4gICAgcHJpdmF0ZSByZWFkb25seSBzdG9yZSA9IGluamVjdChOZ3RTdG9yZSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjYXRhbG9ndWUgPSBpbmplY3QoTkdUX0NBVEFMT0dVRSk7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjb21wb3VuZFByZWZpeGVzID0gaW5qZWN0KE5HVF9DT01QT1VORF9QUkVGSVhFUyk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHJlbmRlcmVyU3RvcmUgPSBuZXcgTmd0UmVuZGVyZXJTdG9yZSh7XG4gICAgICAgIHN0b3JlOiB0aGlzLnN0b3JlLFxuICAgICAgICBjZHI6IHRoaXMuY2RyLFxuICAgICAgICBjb21wb3VuZFByZWZpeGVzOiB0aGlzLmNvbXBvdW5kUHJlZml4ZXMsXG4gICAgfSk7XG5cbiAgICBwcml2YXRlIHJlbmRlcmVyPzogTmd0UmVuZGVyZXI7XG5cbiAgICBjcmVhdGVSZW5kZXJlcihob3N0RWxlbWVudDogYW55LCB0eXBlOiBSZW5kZXJlclR5cGUyIHwgbnVsbCk6IFJlbmRlcmVyMiB7XG4gICAgICAgIC8vIFRPRE8gIHdlIG1pZ2h0IG5lZWQgdG8gY2hlY2sgb24gXCJ0eXBlXCIgdG8gcmV0dXJuIERvbVJlbmRlcmVyIGZvciB0aGF0IHBhcnRpY3VsYXIgdHlwZSB0byBzdXBwb3J0IEhUTUxcbiAgICAgICAgaWYgKCF0aGlzLnJlbmRlcmVyKSB7XG4gICAgICAgICAgICBjb25zdCBkb21SZW5kZXJlciA9IHRoaXMuZG9tUmVuZGVyZXJGYWN0b3J5LmNyZWF0ZVJlbmRlcmVyKGhvc3RFbGVtZW50LCB0eXBlKTtcbiAgICAgICAgICAgIHRoaXMucmVuZGVyZXIgPSBuZXcgTmd0UmVuZGVyZXIoZG9tUmVuZGVyZXIsIHRoaXMucmVuZGVyZXJTdG9yZSwgdGhpcy5jYXRhbG9ndWUpO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0aGlzLnJlbmRlcmVyO1xuICAgIH1cbn1cblxuZXhwb3J0IGNsYXNzIE5ndFJlbmRlcmVyIGltcGxlbWVudHMgUmVuZGVyZXIyIHtcbiAgICBwcml2YXRlIGZpcnN0ID0gZmFsc2U7XG5cbiAgICBjb25zdHJ1Y3RvcihcbiAgICAgICAgcHJpdmF0ZSByZWFkb25seSBkb21SZW5kZXJlcjogUmVuZGVyZXIyLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IHN0b3JlOiBOZ3RSZW5kZXJlclN0b3JlLFxuICAgICAgICBwcml2YXRlIHJlYWRvbmx5IGNhdGFsb2d1ZTogUmVjb3JkPHN0cmluZywgbmV3ICguLi5hcmdzOiBhbnlbXSkgPT4gYW55PlxuICAgICkge31cblxuICAgIGNyZWF0ZUVsZW1lbnQobmFtZTogc3RyaW5nLCBuYW1lc3BhY2U/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmRvbVJlbmRlcmVyLmNyZWF0ZUVsZW1lbnQobmFtZSwgbmFtZXNwYWNlKTtcblxuICAgICAgICAvLyBvbiBmaXJzdCBwYXNzLCB3ZSByZXR1cm4gdGhlIFJvb3QgU2NlbmUgYXMgdGhlIHJvb3Qgbm9kZVxuICAgICAgICBpZiAoIXRoaXMuZmlyc3QpIHtcbiAgICAgICAgICAgIHRoaXMuZmlyc3QgPSB0cnVlO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgndGhyZWUnLCB0aGlzLnN0b3JlLnJvb3RTY2VuZSk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBoYW5kbGUgY29tcG91bmRcbiAgICAgICAgaWYgKHRoaXMuc3RvcmUuaXNDb21wb3VuZChuYW1lKSkgcmV0dXJuIHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgnY29tcG91bmQnLCBlbGVtZW50KTtcblxuICAgICAgICAvLyBoYW5kbGUgcG9ydGFsXG4gICAgICAgIGlmIChuYW1lID09PSBTUEVDSUFMX0RPTV9UQUcuTkdUX1BPUlRBTCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgncG9ydGFsJywgZWxlbWVudCk7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBoYW5kbGUgcmF3IHZhbHVlXG4gICAgICAgIGlmIChuYW1lID09PSBTUEVDSUFMX0RPTV9UQUcuTkdUX1ZBTFVFKSB7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKFxuICAgICAgICAgICAgICAgICd0aHJlZScsXG4gICAgICAgICAgICAgICAgT2JqZWN0LmFzc2lnbih7IF9fbmd0X3JlbmRlcmVyX186IHsgcmF3VmFsdWU6IHVuZGVmaW5lZCB9IH0sIHsgX19uZ3RfXzogeyBpc1JhdzogdHJ1ZSB9IH0pXG4gICAgICAgICAgICApO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgeyBpbmplY3RlZEFyZ3MsIHN0b3JlIH0gPSB0aGlzLnN0b3JlLmdldENyZWF0aW9uU3RhdGUoKTtcblxuICAgICAgICAvLyBoYW5kbGUgcHJpbWl0aXZlXG4gICAgICAgIGlmIChuYW1lID09PSBTUEVDSUFMX0RPTV9UQUcuTkdUX1BSSU1JVElWRSkge1xuICAgICAgICAgICAgaWYgKCFpbmplY3RlZEFyZ3NbMF0pIHRocm93IG5ldyBFcnJvcihgW05HVF0gbmd0LXByaW1pdGl2ZSB3aXRob3V0IGFyZ3MgaXMgaW52YWxpZGApO1xuICAgICAgICAgICAgY29uc3Qgb2JqZWN0ID0gaW5qZWN0ZWRBcmdzWzBdO1xuICAgICAgICAgICAgbGV0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKG9iamVjdCk7XG4gICAgICAgICAgICBpZiAoIU9iamVjdC5rZXlzKGxvY2FsU3RhdGUpLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIHByZXBhcmUob2JqZWN0LCB7IHN0b3JlLCBhcmdzOiBpbmplY3RlZEFyZ3MsIHByaW1pdGl2ZTogdHJ1ZSB9KTtcbiAgICAgICAgICAgICAgICBsb2NhbFN0YXRlID0gZ2V0TG9jYWxTdGF0ZShvYmplY3QpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKCFsb2NhbFN0YXRlLnN0b3JlKSBsb2NhbFN0YXRlLnN0b3JlID0gc3RvcmU7XG4gICAgICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCd0aHJlZScsIG9iamVjdCk7XG4gICAgICAgIH1cblxuICAgICAgICBjb25zdCB0aHJlZVRhZyA9IG5hbWUuc3RhcnRzV2l0aCgnbmd0JykgPyBuYW1lLnNsaWNlKDQpIDogbmFtZTtcbiAgICAgICAgY29uc3QgdGhyZWVOYW1lID0ga2ViYWJUb1Bhc2NhbCh0aHJlZVRhZyk7XG4gICAgICAgIGNvbnN0IHRocmVlVGFyZ2V0ID0gdGhpcy5jYXRhbG9ndWVbdGhyZWVOYW1lXTtcbiAgICAgICAgLy8gd2UgaGF2ZSB0aGUgVEhSRUUgY29uc3RydWN0b3IgaGVyZSwgaGFuZGxlIGl0XG4gICAgICAgIGlmICh0aHJlZVRhcmdldCkge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBwcmVwYXJlKG5ldyB0aHJlZVRhcmdldCguLi5pbmplY3RlZEFyZ3MpLCB7IHN0b3JlLCBhcmdzOiBpbmplY3RlZEFyZ3MgfSk7XG4gICAgICAgICAgICBjb25zdCBub2RlID0gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCd0aHJlZScsIGluc3RhbmNlKTtcbiAgICAgICAgICAgIGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGluc3RhbmNlKTtcbiAgICAgICAgICAgIGlmIChpcy5nZW9tZXRyeShpbnN0YW5jZSkpIHtcbiAgICAgICAgICAgICAgICBsb2NhbFN0YXRlLmF0dGFjaCA9IFsnZ2VvbWV0cnknXTtcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoaXMubWF0ZXJpYWwoaW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdGF0ZS5hdHRhY2ggPSBbJ21hdGVyaWFsJ107XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiBub2RlO1xuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIHRoaXMuc3RvcmUuY3JlYXRlTm9kZSgnZG9tJywgZWxlbWVudCk7XG4gICAgfVxuXG4gICAgY3JlYXRlQ29tbWVudCh2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGNvbnN0IGNvbW1lbnQgPSB0aGlzLmRvbVJlbmRlcmVyLmNyZWF0ZUNvbW1lbnQodmFsdWUpO1xuICAgICAgICByZXR1cm4gdGhpcy5zdG9yZS5jcmVhdGVOb2RlKCdjb21tZW50JywgY29tbWVudCk7XG4gICAgfVxuXG4gICAgYXBwZW5kQ2hpbGQocGFyZW50OiBOZ3RSZW5kZXJlck5vZGUsIG5ld0NoaWxkOiBOZ3RSZW5kZXJlck5vZGUpOiB2b2lkIHtcbiAgICAgICAgLy8gVE9ETzoganVzdCBpZ25vcmUgdGV4dCBub2RlIGZvciBub3dcbiAgICAgICAgaWYgKG5ld0NoaWxkIGluc3RhbmNlb2YgVGV4dCkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbW1lbnQnKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnNldFBhcmVudChuZXdDaGlsZCwgcGFyZW50KTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIHRoaXMuc3RvcmUuc2V0UGFyZW50KG5ld0NoaWxkLCBwYXJlbnQpO1xuICAgICAgICB0aGlzLnN0b3JlLmFkZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQpO1xuXG4gICAgICAgIC8vIGlmIG5ldyBjaGxpZCBpcyBhIHBvcnRhbFxuICAgICAgICBpZiAobmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdwb3J0YWwnKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnByb2Nlc3NQb3J0YWxDb250YWluZXIobmV3Q2hpbGQpO1xuICAgICAgICAgICAgaWYgKG5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBvcnRhbENvbnRhaW5lcl0pIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKHBhcmVudCwgbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBwYXJlbnQgaXMgYSBwb3J0YWxcbiAgICAgICAgaWYgKHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3BvcnRhbCcpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUucHJvY2Vzc1BvcnRhbENvbnRhaW5lcihwYXJlbnQpO1xuICAgICAgICAgICAgaWYgKHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gaWYgYm90aCBhcmUgdGhyZWUgaW5zdGFuY2VzLCBzdHJhaWdodGZvcndhcmQgY2FzZVxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiZcbiAgICAgICAgICAgIG5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnXG4gICAgICAgICkge1xuICAgICAgICAgICAgYXR0YWNoVGhyZWVDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcbiAgICAgICAgICAgIC8vIGhlcmUsIHdlIGhhbmRsZSB0aGUgc3BlY2lhbCBjYXNlIG9mIGlmIHRoZSBwYXJlbnQgaGFzIGEgY29tcG91bmRQYXJlbnQsIHdoaWNoIG1lYW5zIHRoaXMgY2hpbGQgaXMgcGFydCBvZiBhIGNvbXBvdW5kIHBhcmVudCB0ZW1wbGF0ZVxuICAgICAgICAgICAgaWYgKCFuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0pIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IGNsb3Nlc3RHcmFuZHBhcmVudFdpdGhDb21wb3VuZCA9IHRoaXMuc3RvcmUuZ2V0Q2xvc2VzdFBhcmVudFdpdGhDb21wb3VuZChwYXJlbnQpO1xuICAgICAgICAgICAgaWYgKCFjbG9zZXN0R3JhbmRwYXJlbnRXaXRoQ29tcG91bmQpIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuYXBwZW5kQ2hpbGQoY2xvc2VzdEdyYW5kcGFyZW50V2l0aENvbXBvdW5kLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBvbmx5IHRoZSBwYXJlbnQgaXMgdGhlIFRIUkVFIGluc3RhbmNlXG4gICAgICAgIGlmIChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcbiAgICAgICAgICAgIGlmIChuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0ubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgZm9yIChjb25zdCByZW5kZXJDaGlsZCBvZiBuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChwYXJlbnQsIHJlbmRlckNoaWxkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICAvLyBpZiBwYXJlbnQgaXMgYSBjb21wb3VuZFxuICAgICAgICBpZiAocGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnKSB7XG4gICAgICAgICAgICAvLyBpZiBjb21wb3VuZCBkb2Vzbid0IGhhdmUgYSBUSFJFRSBpbnN0YW5jZSBzZXQgeWV0XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgIXBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSAmJlxuICAgICAgICAgICAgICAgIG5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAvLyBpZiBjaGlsZCBpcyBpbmRlZWQgYW4gbmd0Q29tcG91bmRcbiAgICAgICAgICAgICAgICBpZiAobmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRdKSB7XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUuc2V0Q29tcG91bmQocGFyZW50LCBuZXdDaGlsZCk7XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gaWYgbm90LCB3ZSB0cmFjayB0aGUgcGFyZW50ICh0aGF0IGlzIHN1cHBvc2VkbHkgdGhlIGNvbXBvdW5kIGNvbXBvbmVudCkgb24gdGhpcyB0aHJlZSBpbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICBpZiAoIW5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kUGFyZW50XSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdID0gcGFyZW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyByZXNldCB0aGUgY29tcG91bmQgaWYgaXQncyBjaGFuZ2VkXG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdICYmXG4gICAgICAgICAgICAgICAgbmV3Q2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgJiZcbiAgICAgICAgICAgICAgICBuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0gJiZcbiAgICAgICAgICAgICAgICBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0gIT09IG5ld0NoaWxkXG4gICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICB0aGlzLnN0b3JlLnNldENvbXBvdW5kKHBhcmVudCwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKG5ld0NoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmICFnZXRMb2NhbFN0YXRlKG5ld0NoaWxkKS5wYXJlbnQpIHtcbiAgICAgICAgICAgIC8vIHdlJ2xsIHRyeSB0byBnZXQgdGhlIGdyYW5kcGFyZW50IGluc3RhbmNlIGhlcmUgc28gdGhhdCB3ZSBjYW4gcnVuIGFwcGVuZENoaWxkIHdpdGggYm90aCBpbnN0YW5jZXNcbiAgICAgICAgICAgIGNvbnN0IGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlID0gdGhpcy5zdG9yZS5nZXRDbG9zZXN0UGFyZW50V2l0aEluc3RhbmNlKHBhcmVudCk7XG4gICAgICAgICAgICBpZiAoY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGVuZENoaWxkKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlLCBuZXdDaGlsZCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdkb20nICYmXG4gICAgICAgICAgICBuZXdDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2RvbSdcbiAgICAgICAgKSB7XG4gICAgICAgICAgICBjb25zdCBjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSA9IHRoaXMuc3RvcmUuZ2V0Q2xvc2VzdFBhcmVudFdpdGhJbnN0YW5jZShwYXJlbnQpO1xuICAgICAgICAgICAgaWYgKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSwgbmV3Q2hpbGQpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgaW5zZXJ0QmVmb3JlKFxuICAgICAgICBwYXJlbnQ6IE5ndFJlbmRlcmVyTm9kZSxcbiAgICAgICAgbmV3Q2hpbGQ6IE5ndFJlbmRlcmVyTm9kZVxuICAgICAgICAvLyBUT0RPICB3ZSBtaWdodCBuZWVkIHRoZXNlP1xuICAgICAgICAvLyByZWZDaGlsZDogTmd0UmVuZGVyZXJOb2RlLFxuICAgICAgICAvLyBpc01vdmU/OiBib29sZWFuIHwgdW5kZWZpbmVkXG4gICAgKTogdm9pZCB7XG4gICAgICAgIGlmICghcGFyZW50Ll9fbmd0X3JlbmRlcmVyX18pIHJldHVybjtcbiAgICAgICAgdGhpcy5hcHBlbmRDaGlsZChwYXJlbnQsIG5ld0NoaWxkKTtcbiAgICB9XG5cbiAgICByZW1vdmVDaGlsZChwYXJlbnQ6IE5ndFJlbmRlcmVyTm9kZSwgb2xkQ2hpbGQ6IE5ndFJlbmRlcmVyTm9kZSwgaXNIb3N0RWxlbWVudD86IGJvb2xlYW4gfCB1bmRlZmluZWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmXG4gICAgICAgICAgICBvbGRDaGlsZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJ1xuICAgICAgICApIHtcbiAgICAgICAgICAgIHJlbW92ZVRocmVlQ2hpbGQocGFyZW50LCBvbGRDaGlsZCwgdHJ1ZSk7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLmRlc3Ryb3kob2xkQ2hpbGQsIHBhcmVudCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcgJiZcbiAgICAgICAgICAgIHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wYXJlbnRdXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZChwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSwgb2xkQ2hpbGQsIGlzSG9zdEVsZW1lbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5kZXN0cm95KG9sZENoaWxkLCBwYXJlbnQpO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3QgY2xvc2VzdEdyYW5kcGFyZW50SW5zdGFuY2UgPSB0aGlzLnN0b3JlLmdldENsb3Nlc3RQYXJlbnRXaXRoSW5zdGFuY2UocGFyZW50KTtcbiAgICAgICAgaWYgKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlKSB7XG4gICAgICAgICAgICB0aGlzLnJlbW92ZUNoaWxkKGNsb3Nlc3RHcmFuZHBhcmVudEluc3RhbmNlLCBvbGRDaGlsZCwgaXNIb3N0RWxlbWVudCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zdG9yZS5kZXN0cm95KG9sZENoaWxkLCBjbG9zZXN0R3JhbmRwYXJlbnRJbnN0YW5jZSBhcyBOZ3RSZW5kZXJlck5vZGUpO1xuICAgIH1cblxuICAgIHBhcmVudE5vZGUobm9kZTogTmd0UmVuZGVyZXJOb2RlKSB7XG4gICAgICAgIGlmIChub2RlLl9fbmd0X3JlbmRlcmVyX18/LltOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSkgcmV0dXJuIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XTtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9tUmVuZGVyZXIucGFyZW50Tm9kZShub2RlKTtcbiAgICB9XG5cbiAgICBzZXRBdHRyaWJ1dGUoZWw6IE5ndFJlbmRlcmVyTm9kZSwgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nLCBuYW1lc3BhY2U/OiBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkKTogdm9pZCB7XG4gICAgICAgIGlmIChlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJykge1xuICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0aGUgY29tcG91bmQgaW5zdGFuY2UgeWV0XG4gICAgICAgICAgICBlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5hdHRyaWJ1dGVzXVtuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCFlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUucXVldWVPcGVyYXRpb24oZWwsIFsnb3AnLCAoKSA9PiB0aGlzLnNldEF0dHJpYnV0ZShlbCwgbmFtZSwgdmFsdWUsIG5hbWVzcGFjZSldKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKGVsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdLCBuYW1lLCB2YWx1ZSwgbmFtZXNwYWNlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJykge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5hcHBseUF0dHJpYnV0ZShlbCwgbmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgc2V0UHJvcGVydHkoZWw6IE5ndFJlbmRlcmVyTm9kZSwgbmFtZTogc3RyaW5nLCB2YWx1ZTogYW55KTogdm9pZCB7XG4gICAgICAgIGlmIChlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbXBvdW5kJykge1xuICAgICAgICAgICAgLy8gd2UgZG9uJ3QgaGF2ZSB0aGUgY29tcG91bmQgaW5zdGFuY2UgeWV0XG4gICAgICAgICAgICBlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wcm9wZXJ0aWVzXVtuYW1lXSA9IHZhbHVlO1xuICAgICAgICAgICAgaWYgKCFlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXSkge1xuICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUucXVldWVPcGVyYXRpb24oZWwsIFsnb3AnLCAoKSA9PiB0aGlzLnNldFByb3BlcnR5KGVsLCBuYW1lLCB2YWx1ZSldKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0pIHtcbiAgICAgICAgICAgICAgICBPYmplY3QuYXNzaWduKFxuICAgICAgICAgICAgICAgICAgICBlbC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZGVkXS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0sXG4gICAgICAgICAgICAgICAgICAgIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3BzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uZWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0uX19uZ3RfcmVuZGVyZXJfX1tcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBbbmFtZV06IHZhbHVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgfSxcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLnNldFByb3BlcnR5KGVsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdLCBuYW1lLCB2YWx1ZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoZWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcbiAgICAgICAgICAgIHRoaXMuc3RvcmUuYXBwbHlQcm9wZXJ0eShlbCwgbmFtZSwgdmFsdWUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgbGlzdGVuKHRhcmdldDogTmd0UmVuZGVyZXJOb2RlLCBldmVudE5hbWU6IHN0cmluZywgY2FsbGJhY2s6IChldmVudDogYW55KSA9PiBib29sZWFuIHwgdm9pZCk6ICgpID0+IHZvaWQge1xuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0YXJnZXQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScgfHxcbiAgICAgICAgICAgICh0YXJnZXQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcgJiZcbiAgICAgICAgICAgICAgICB0YXJnZXQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0pXG4gICAgICAgICkge1xuICAgICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSB0YXJnZXQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0gfHwgdGFyZ2V0O1xuICAgICAgICAgICAgY29uc3QgcHJpb3JpdHkgPSBnZXRMb2NhbFN0YXRlKHRhcmdldCkucHJpb3JpdHk7XG4gICAgICAgICAgICByZXR1cm4gcHJvY2Vzc1RocmVlRXZlbnQoaW5zdGFuY2UsIHByaW9yaXR5IHx8IDAsIGV2ZW50TmFtZSwgY2FsbGJhY2ssIHRoaXMuc3RvcmUucm9vdENkcik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0YXJnZXQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcgJiZcbiAgICAgICAgICAgICF0YXJnZXQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF1cbiAgICAgICAgKSB7XG4gICAgICAgICAgICB0aGlzLnN0b3JlLnF1ZXVlT3BlcmF0aW9uKHRhcmdldCwgW1xuICAgICAgICAgICAgICAgICdvcCcsXG4gICAgICAgICAgICAgICAgKCkgPT4gdGhpcy5zdG9yZS5xdWV1ZU9wZXJhdGlvbih0YXJnZXQsIFsnY2xlYW5VcCcsIHRoaXMubGlzdGVuKHRhcmdldCwgZXZlbnROYW1lLCBjYWxsYmFjayldKSxcbiAgICAgICAgICAgIF0pO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiAoKSA9PiB7fTtcbiAgICB9XG5cbiAgICBnZXQgZGF0YSgpOiB7IFtrZXk6IHN0cmluZ106IGFueSB9IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZG9tUmVuZGVyZXIuZGF0YTtcbiAgICB9XG4gICAgY3JlYXRlVGV4dCA9IHRoaXMuZG9tUmVuZGVyZXIuY3JlYXRlVGV4dC5iaW5kKHRoaXMuZG9tUmVuZGVyZXIpO1xuICAgIGRlc3Ryb3kgPSB0aGlzLmRvbVJlbmRlcmVyLmRlc3Ryb3kuYmluZCh0aGlzLmRvbVJlbmRlcmVyKTtcbiAgICBkZXN0cm95Tm9kZTogKChub2RlOiBhbnkpID0+IHZvaWQpIHwgbnVsbCA9IG51bGw7XG4gICAgc2VsZWN0Um9vdEVsZW1lbnQgPSB0aGlzLmRvbVJlbmRlcmVyLnNlbGVjdFJvb3RFbGVtZW50LmJpbmQodGhpcy5kb21SZW5kZXJlcik7XG4gICAgbmV4dFNpYmxpbmcgPSB0aGlzLmRvbVJlbmRlcmVyLm5leHRTaWJsaW5nLmJpbmQodGhpcy5kb21SZW5kZXJlcik7XG4gICAgcmVtb3ZlQXR0cmlidXRlID0gdGhpcy5kb21SZW5kZXJlci5yZW1vdmVBdHRyaWJ1dGUuYmluZCh0aGlzLmRvbVJlbmRlcmVyKTtcbiAgICBhZGRDbGFzcyA9IHRoaXMuZG9tUmVuZGVyZXIuYWRkQ2xhc3MuYmluZCh0aGlzLmRvbVJlbmRlcmVyKTtcbiAgICByZW1vdmVDbGFzcyA9IHRoaXMuZG9tUmVuZGVyZXIucmVtb3ZlQ2xhc3MuYmluZCh0aGlzLmRvbVJlbmRlcmVyKTtcbiAgICBzZXRTdHlsZSA9IHRoaXMuZG9tUmVuZGVyZXIuc2V0U3R5bGUuYmluZCh0aGlzLmRvbVJlbmRlcmVyKTtcbiAgICByZW1vdmVTdHlsZSA9IHRoaXMuZG9tUmVuZGVyZXIucmVtb3ZlU3R5bGUuYmluZCh0aGlzLmRvbVJlbmRlcmVyKTtcbiAgICBzZXRWYWx1ZSA9IHRoaXMuZG9tUmVuZGVyZXIuc2V0VmFsdWUuYmluZCh0aGlzLmRvbVJlbmRlcmVyKTtcbn1cbiJdfQ==