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.
- package/esm2020/angular-three.mjs +1 -1
- package/esm2020/index.mjs +2 -35
- package/esm2020/lib/canvas.mjs +141 -128
- package/esm2020/lib/di/catalogue.mjs +7 -0
- package/esm2020/lib/directives/args.mjs +37 -17
- package/esm2020/lib/directives/repeat.mjs +5 -8
- package/esm2020/lib/events.mjs +341 -52
- package/esm2020/lib/loader.mjs +55 -0
- package/esm2020/lib/loop.mjs +137 -0
- package/esm2020/lib/renderer/di.mjs +3 -0
- package/esm2020/lib/renderer/enums.mjs +2 -0
- package/esm2020/lib/renderer/provider.mjs +19 -0
- package/esm2020/lib/renderer/renderer.mjs +293 -0
- package/esm2020/lib/renderer/state.mjs +350 -0
- package/esm2020/lib/renderer/utils.mjs +177 -0
- package/esm2020/lib/stores/rx-store.mjs +99 -0
- package/esm2020/lib/stores/store.mjs +190 -239
- package/esm2020/lib/types.mjs +1 -1
- package/esm2020/lib/utils/apply-props.mjs +37 -80
- package/esm2020/lib/utils/attach.mjs +29 -0
- package/esm2020/lib/utils/instance.mjs +43 -28
- package/esm2020/lib/utils/is.mjs +7 -11
- package/esm2020/lib/utils/make.mjs +30 -10
- package/esm2020/lib/utils/update.mjs +37 -0
- package/esm2020/lib/web/events.mjs +68 -0
- package/fesm2015/angular-three.mjs +2053 -2046
- package/fesm2015/angular-three.mjs.map +1 -1
- package/fesm2020/angular-three.mjs +2003 -1990
- package/fesm2020/angular-three.mjs.map +1 -1
- package/index.d.ts +1 -34
- package/lib/canvas.d.ts +29 -28
- package/lib/di/catalogue.d.ts +3 -0
- package/lib/directives/args.d.ts +8 -12
- package/lib/events.d.ts +7 -2
- package/lib/loader.d.ts +15 -0
- package/lib/{utils/loop.d.ts → loop.d.ts} +7 -6
- package/lib/renderer/di.d.ts +2 -0
- package/lib/renderer/enums.d.ts +25 -0
- package/lib/renderer/provider.d.ts +25 -0
- package/lib/renderer/renderer.d.ts +49 -0
- package/lib/renderer/state.d.ts +59 -0
- package/lib/renderer/utils.d.ts +20 -0
- package/lib/stores/rx-store.d.ts +17 -0
- package/lib/stores/store.d.ts +6 -23
- package/lib/types.d.ts +182 -191
- package/lib/utils/apply-props.d.ts +2 -6
- package/lib/utils/attach.d.ts +3 -0
- package/lib/utils/instance.d.ts +3 -3
- package/lib/utils/is.d.ts +6 -10
- package/lib/utils/make.d.ts +5 -2
- package/lib/utils/update.d.ts +4 -0
- package/lib/web/events.d.ts +4 -0
- package/package.json +30 -99
- package/attributes/README.md +0 -3
- package/attributes/index.d.ts +0 -22
- package/attributes/lib/buffer-attribute/buffer-attribute.d.ts +0 -8
- package/attributes/lib/color-attribute/color-attribute.d.ts +0 -8
- package/attributes/lib/common.d.ts +0 -1
- package/attributes/lib/float16-buffer-attribute/float16-buffer-attribute.d.ts +0 -8
- package/attributes/lib/float32-buffer-attribute/float32-buffer-attribute.d.ts +0 -8
- package/attributes/lib/float64-buffer-attribute/float64-buffer-attribute.d.ts +0 -8
- package/attributes/lib/fog-attribute/fog-attribute.d.ts +0 -8
- package/attributes/lib/fog-exp2-attribute/fog-exp2-attribute.d.ts +0 -8
- package/attributes/lib/instanced-buffer-attribute/instanced-buffer-attribute.d.ts +0 -8
- package/attributes/lib/int16-buffer-attribute/int16-buffer-attribute.d.ts +0 -8
- package/attributes/lib/int32-buffer-attribute/int32-buffer-attribute.d.ts +0 -8
- package/attributes/lib/int8-buffer-attribute/int8-buffer-attribute.d.ts +0 -8
- package/attributes/lib/interleaved-buffer-attribute/interleaved-buffer-attribute.d.ts +0 -8
- package/attributes/lib/matrix3-attribute/matrix3-attribute.d.ts +0 -8
- package/attributes/lib/matrix4-attribute/matrix4-attribute.d.ts +0 -8
- package/attributes/lib/uint16-buffer-attribute/uint16-buffer-attribute.d.ts +0 -8
- package/attributes/lib/uint32-buffer-attribute/uint32-buffer-attribute.d.ts +0 -8
- package/attributes/lib/uint8-buffer-attribute/uint8-buffer-attribute.d.ts +0 -8
- package/attributes/lib/uint8-clamped-buffer-attribute/uint8-clamped-buffer-attribute.d.ts +0 -8
- package/attributes/lib/value-attribute/value-attribute.d.ts +0 -8
- package/attributes/lib/vector2-attribute/vector2-attribute.d.ts +0 -8
- package/attributes/lib/vector3-attribute/vector3-attribute.d.ts +0 -8
- package/attributes/lib/vector4-attribute/vector4-attribute.d.ts +0 -8
- package/audios/README.md +0 -3
- package/audios/index.d.ts +0 -3
- package/audios/lib/audio/audio.d.ts +0 -49
- package/audios/lib/audio-listener/audio-listener.d.ts +0 -35
- package/audios/lib/common.d.ts +0 -3
- package/audios/lib/positional-audio/positional-audio.d.ts +0 -49
- package/cameras/README.md +0 -3
- package/cameras/index.d.ts +0 -5
- package/cameras/lib/array-camera/array-camera.d.ts +0 -56
- package/cameras/lib/common.d.ts +0 -3
- package/cameras/lib/cube-camera/cube-camera.d.ts +0 -36
- package/cameras/lib/orthographic-camera/orthographic-camera.d.ts +0 -54
- package/cameras/lib/perspective-camera/perspective-camera.d.ts +0 -55
- package/cameras/lib/stereo-camera/stereo-camera.d.ts +0 -42
- package/esm2020/attributes/angular-three-attributes.mjs +0 -5
- package/esm2020/attributes/index.mjs +0 -24
- package/esm2020/attributes/lib/buffer-attribute/buffer-attribute.mjs +0 -26
- package/esm2020/attributes/lib/color-attribute/color-attribute.mjs +0 -26
- package/esm2020/attributes/lib/common.mjs +0 -13
- package/esm2020/attributes/lib/float16-buffer-attribute/float16-buffer-attribute.mjs +0 -26
- package/esm2020/attributes/lib/float32-buffer-attribute/float32-buffer-attribute.mjs +0 -26
- package/esm2020/attributes/lib/float64-buffer-attribute/float64-buffer-attribute.mjs +0 -26
- package/esm2020/attributes/lib/fog-attribute/fog-attribute.mjs +0 -26
- package/esm2020/attributes/lib/fog-exp2-attribute/fog-exp2-attribute.mjs +0 -26
- package/esm2020/attributes/lib/instanced-buffer-attribute/instanced-buffer-attribute.mjs +0 -26
- package/esm2020/attributes/lib/int16-buffer-attribute/int16-buffer-attribute.mjs +0 -26
- package/esm2020/attributes/lib/int32-buffer-attribute/int32-buffer-attribute.mjs +0 -26
- package/esm2020/attributes/lib/int8-buffer-attribute/int8-buffer-attribute.mjs +0 -26
- package/esm2020/attributes/lib/interleaved-buffer-attribute/interleaved-buffer-attribute.mjs +0 -30
- package/esm2020/attributes/lib/matrix3-attribute/matrix3-attribute.mjs +0 -26
- package/esm2020/attributes/lib/matrix4-attribute/matrix4-attribute.mjs +0 -26
- package/esm2020/attributes/lib/uint16-buffer-attribute/uint16-buffer-attribute.mjs +0 -26
- package/esm2020/attributes/lib/uint32-buffer-attribute/uint32-buffer-attribute.mjs +0 -26
- package/esm2020/attributes/lib/uint8-buffer-attribute/uint8-buffer-attribute.mjs +0 -26
- package/esm2020/attributes/lib/uint8-clamped-buffer-attribute/uint8-clamped-buffer-attribute.mjs +0 -26
- package/esm2020/attributes/lib/value-attribute/value-attribute.mjs +0 -28
- package/esm2020/attributes/lib/vector2-attribute/vector2-attribute.mjs +0 -26
- package/esm2020/attributes/lib/vector3-attribute/vector3-attribute.mjs +0 -26
- package/esm2020/attributes/lib/vector4-attribute/vector4-attribute.mjs +0 -26
- package/esm2020/audios/angular-three-audios.mjs +0 -5
- package/esm2020/audios/index.mjs +0 -5
- package/esm2020/audios/lib/audio/audio.mjs +0 -45
- package/esm2020/audios/lib/audio-listener/audio-listener.mjs +0 -38
- package/esm2020/audios/lib/common.mjs +0 -54
- package/esm2020/audios/lib/positional-audio/positional-audio.mjs +0 -45
- package/esm2020/cameras/angular-three-cameras.mjs +0 -5
- package/esm2020/cameras/index.mjs +0 -7
- package/esm2020/cameras/lib/array-camera/array-camera.mjs +0 -44
- package/esm2020/cameras/lib/common.mjs +0 -54
- package/esm2020/cameras/lib/cube-camera/cube-camera.mjs +0 -30
- package/esm2020/cameras/lib/orthographic-camera/orthographic-camera.mjs +0 -42
- package/esm2020/cameras/lib/perspective-camera/perspective-camera.mjs +0 -43
- package/esm2020/cameras/lib/stereo-camera/stereo-camera.mjs +0 -38
- package/esm2020/geometries/angular-three-geometries.mjs +0 -5
- package/esm2020/geometries/index.mjs +0 -25
- package/esm2020/geometries/lib/box-geometry/box-geometry.mjs +0 -26
- package/esm2020/geometries/lib/buffer-geometry/buffer-geometry.mjs +0 -26
- package/esm2020/geometries/lib/capsule-geometry/capsule-geometry.mjs +0 -26
- package/esm2020/geometries/lib/circle-geometry/circle-geometry.mjs +0 -26
- package/esm2020/geometries/lib/common.mjs +0 -13
- package/esm2020/geometries/lib/cone-geometry/cone-geometry.mjs +0 -26
- package/esm2020/geometries/lib/cylinder-geometry/cylinder-geometry.mjs +0 -26
- package/esm2020/geometries/lib/dodecahedron-geometry/dodecahedron-geometry.mjs +0 -26
- package/esm2020/geometries/lib/edges-geometry/edges-geometry.mjs +0 -26
- package/esm2020/geometries/lib/extrude-geometry/extrude-geometry.mjs +0 -26
- package/esm2020/geometries/lib/icosahedron-geometry/icosahedron-geometry.mjs +0 -26
- package/esm2020/geometries/lib/instanced-buffer-geometry/instanced-buffer-geometry.mjs +0 -26
- package/esm2020/geometries/lib/lathe-geometry/lathe-geometry.mjs +0 -26
- package/esm2020/geometries/lib/octahedron-geometry/octahedron-geometry.mjs +0 -26
- package/esm2020/geometries/lib/plane-geometry/plane-geometry.mjs +0 -26
- package/esm2020/geometries/lib/polyhedron-geometry/polyhedron-geometry.mjs +0 -26
- package/esm2020/geometries/lib/ring-geometry/ring-geometry.mjs +0 -26
- package/esm2020/geometries/lib/shape-geometry/shape-geometry.mjs +0 -26
- package/esm2020/geometries/lib/sphere-geometry/sphere-geometry.mjs +0 -26
- package/esm2020/geometries/lib/tetrahedron-geometry/tetrahedron-geometry.mjs +0 -26
- package/esm2020/geometries/lib/torus-geometry/torus-geometry.mjs +0 -26
- package/esm2020/geometries/lib/torus-knot-geometry/torus-knot-geometry.mjs +0 -26
- package/esm2020/geometries/lib/tube-geometry/tube-geometry.mjs +0 -26
- package/esm2020/geometries/lib/wireframe-geometry/wireframe-geometry.mjs +0 -26
- package/esm2020/helpers/angular-three-helpers.mjs +0 -5
- package/esm2020/helpers/index.mjs +0 -15
- package/esm2020/helpers/lib/arrow-helper/arrow-helper.mjs +0 -26
- package/esm2020/helpers/lib/axes-helper/axes-helper.mjs +0 -26
- package/esm2020/helpers/lib/box-helper/box-helper.mjs +0 -36
- package/esm2020/helpers/lib/box3-helper/box3-helper.mjs +0 -36
- package/esm2020/helpers/lib/camera-helper/camera-helper.mjs +0 -36
- package/esm2020/helpers/lib/common.mjs +0 -13
- package/esm2020/helpers/lib/directional-light-helper/directional-light-helper.mjs +0 -36
- package/esm2020/helpers/lib/grid-helper/grid-helper.mjs +0 -26
- package/esm2020/helpers/lib/hemisphere-light-helper/hemisphere-light-helper.mjs +0 -36
- package/esm2020/helpers/lib/plane-helper/plane-helper.mjs +0 -36
- package/esm2020/helpers/lib/point-light-helper/point-light-helper.mjs +0 -36
- package/esm2020/helpers/lib/polar-grid-helper/polar-grid-helper.mjs +0 -26
- package/esm2020/helpers/lib/skeleton-helper/skeleton-helper.mjs +0 -36
- package/esm2020/helpers/lib/spot-light-helper/spot-light-helper.mjs +0 -36
- package/esm2020/lib/di/resize.mjs +0 -19
- package/esm2020/lib/di/window.mjs +0 -13
- package/esm2020/lib/directives/cursor.mjs +0 -35
- package/esm2020/lib/instance.mjs +0 -368
- package/esm2020/lib/pipes/math.mjs +0 -15
- package/esm2020/lib/pipes/pi.mjs +0 -14
- package/esm2020/lib/pipes/radian.mjs +0 -14
- package/esm2020/lib/pipes/side.mjs +0 -22
- package/esm2020/lib/ref.mjs +0 -15
- package/esm2020/lib/services/loader.mjs +0 -45
- package/esm2020/lib/services/resize.mjs +0 -127
- package/esm2020/lib/stores/component-store.mjs +0 -137
- package/esm2020/lib/utils/build-graph.mjs +0 -15
- package/esm2020/lib/utils/camera.mjs +0 -28
- package/esm2020/lib/utils/capitalize.mjs +0 -4
- package/esm2020/lib/utils/check-update.mjs +0 -22
- package/esm2020/lib/utils/events.mjs +0 -353
- package/esm2020/lib/utils/get-instance-local-state.mjs +0 -6
- package/esm2020/lib/utils/inject.mjs +0 -18
- package/esm2020/lib/utils/loop.mjs +0 -139
- package/esm2020/lib/utils/mutate.mjs +0 -24
- package/esm2020/lib/utils/proxy.mjs +0 -99
- package/esm2020/lib/utils/renderer.mjs +0 -15
- package/esm2020/lights/angular-three-lights.mjs +0 -5
- package/esm2020/lights/index.mjs +0 -11
- package/esm2020/lights/lib/ambient-light/ambient-light.mjs +0 -30
- package/esm2020/lights/lib/ambient-light-probe/ambient-light-probe.mjs +0 -30
- package/esm2020/lights/lib/common.mjs +0 -54
- package/esm2020/lights/lib/directional-light/directional-light.mjs +0 -30
- package/esm2020/lights/lib/hemisphere-light/hemisphere-light.mjs +0 -30
- package/esm2020/lights/lib/hemisphere-light-probe/hemisphere-light-probe.mjs +0 -30
- package/esm2020/lights/lib/light-probe/light-probe.mjs +0 -30
- package/esm2020/lights/lib/point-light/point-light.mjs +0 -30
- package/esm2020/lights/lib/rect-area-light/rect-area-light.mjs +0 -30
- package/esm2020/lights/lib/spot-light/spot-light.mjs +0 -42
- package/esm2020/materials/angular-three-materials.mjs +0 -5
- package/esm2020/materials/index.mjs +0 -19
- package/esm2020/materials/lib/common.mjs +0 -13
- package/esm2020/materials/lib/line-basic-material/line-basic-material.mjs +0 -77
- package/esm2020/materials/lib/line-dashed-material/line-dashed-material.mjs +0 -80
- package/esm2020/materials/lib/mesh-basic-material/mesh-basic-material.mjs +0 -89
- package/esm2020/materials/lib/mesh-depth-material/mesh-depth-material.mjs +0 -80
- package/esm2020/materials/lib/mesh-distance-material/mesh-distance-material.mjs +0 -80
- package/esm2020/materials/lib/mesh-lambert-material/mesh-lambert-material.mjs +0 -100
- package/esm2020/materials/lib/mesh-matcap-material/mesh-matcap-material.mjs +0 -86
- package/esm2020/materials/lib/mesh-normal-material/mesh-normal-material.mjs +0 -83
- package/esm2020/materials/lib/mesh-phong-material/mesh-phong-material.mjs +0 -103
- package/esm2020/materials/lib/mesh-physical-material/mesh-physical-material.mjs +0 -119
- package/esm2020/materials/lib/mesh-standard-material/mesh-standard-material.mjs +0 -100
- package/esm2020/materials/lib/mesh-toon-material/mesh-toon-material.mjs +0 -96
- package/esm2020/materials/lib/points-material/points-material.mjs +0 -78
- package/esm2020/materials/lib/raw-shader-material/raw-shader-material.mjs +0 -83
- package/esm2020/materials/lib/shader-material/shader-material.mjs +0 -83
- package/esm2020/materials/lib/shadow-material/shadow-material.mjs +0 -74
- package/esm2020/materials/lib/sprite-material/sprite-material.mjs +0 -78
- package/esm2020/objects/angular-three-objects.mjs +0 -5
- package/esm2020/objects/index.mjs +0 -14
- package/esm2020/objects/lib/bone/bone.mjs +0 -27
- package/esm2020/objects/lib/common.mjs +0 -54
- package/esm2020/objects/lib/group/group.mjs +0 -27
- package/esm2020/objects/lib/instanced-mesh/instanced-mesh.mjs +0 -40
- package/esm2020/objects/lib/line/line.mjs +0 -30
- package/esm2020/objects/lib/line-loop/line-loop.mjs +0 -30
- package/esm2020/objects/lib/line-segments/line-segments.mjs +0 -30
- package/esm2020/objects/lib/lod/lod.mjs +0 -30
- package/esm2020/objects/lib/mesh/mesh.mjs +0 -30
- package/esm2020/objects/lib/points/points.mjs +0 -30
- package/esm2020/objects/lib/skeleton/skeleton.mjs +0 -41
- package/esm2020/objects/lib/skinned-mesh/skinned-mesh.mjs +0 -39
- package/esm2020/objects/lib/sprite/sprite.mjs +0 -30
- package/esm2020/primitives/angular-three-primitives.mjs +0 -5
- package/esm2020/primitives/index.mjs +0 -3
- package/esm2020/primitives/lib/common.mjs +0 -54
- package/esm2020/primitives/lib/object-primitive/object-primitive.mjs +0 -27
- package/esm2020/primitives/lib/primitive/primitive.mjs +0 -38
- package/esm2020/stats/angular-three-stats.mjs +0 -5
- package/esm2020/stats/index.mjs +0 -2
- package/esm2020/stats/lib/stats/stats.mjs +0 -54
- package/esm2020/textures/angular-three-textures.mjs +0 -5
- package/esm2020/textures/index.mjs +0 -12
- package/esm2020/textures/lib/canvas-texture/canvas-texture.mjs +0 -26
- package/esm2020/textures/lib/common.mjs +0 -13
- package/esm2020/textures/lib/compressed-array-texture/compressed-array-texture.mjs +0 -26
- package/esm2020/textures/lib/compressed-texture/compressed-texture.mjs +0 -26
- package/esm2020/textures/lib/cube-texture/cube-texture.mjs +0 -26
- package/esm2020/textures/lib/data-array-texture/data-array-texture.mjs +0 -26
- package/esm2020/textures/lib/data-texture/data-texture.mjs +0 -26
- package/esm2020/textures/lib/data3-dtexture/data3-dtexture.mjs +0 -26
- package/esm2020/textures/lib/depth-texture/depth-texture.mjs +0 -26
- package/esm2020/textures/lib/framebuffer-texture/framebuffer-texture.mjs +0 -26
- package/esm2020/textures/lib/video-texture/video-texture.mjs +0 -26
- package/fesm2015/angular-three-attributes.mjs +0 -475
- package/fesm2015/angular-three-attributes.mjs.map +0 -1
- package/fesm2015/angular-three-audios.mjs +0 -179
- package/fesm2015/angular-three-audios.mjs.map +0 -1
- package/fesm2015/angular-three-cameras.mjs +0 -236
- package/fesm2015/angular-three-cameras.mjs.map +0 -1
- package/fesm2015/angular-three-geometries.mjs +0 -488
- package/fesm2015/angular-three-geometries.mjs.map +0 -1
- package/fesm2015/angular-three-helpers.mjs +0 -378
- package/fesm2015/angular-three-helpers.mjs.map +0 -1
- package/fesm2015/angular-three-lights.mjs +0 -297
- package/fesm2015/angular-three-lights.mjs.map +0 -1
- package/fesm2015/angular-three-materials.mjs +0 -1415
- package/fesm2015/angular-three-materials.mjs.map +0 -1
- package/fesm2015/angular-three-objects.mjs +0 -381
- package/fesm2015/angular-three-objects.mjs.map +0 -1
- package/fesm2015/angular-three-primitives.mjs +0 -120
- package/fesm2015/angular-three-primitives.mjs.map +0 -1
- package/fesm2015/angular-three-stats.mjs +0 -62
- package/fesm2015/angular-three-stats.mjs.map +0 -1
- package/fesm2015/angular-three-textures.mjs +0 -228
- package/fesm2015/angular-three-textures.mjs.map +0 -1
- package/fesm2020/angular-three-attributes.mjs +0 -475
- package/fesm2020/angular-three-attributes.mjs.map +0 -1
- package/fesm2020/angular-three-audios.mjs +0 -179
- package/fesm2020/angular-three-audios.mjs.map +0 -1
- package/fesm2020/angular-three-cameras.mjs +0 -236
- package/fesm2020/angular-three-cameras.mjs.map +0 -1
- package/fesm2020/angular-three-geometries.mjs +0 -488
- package/fesm2020/angular-three-geometries.mjs.map +0 -1
- package/fesm2020/angular-three-helpers.mjs +0 -378
- package/fesm2020/angular-three-helpers.mjs.map +0 -1
- package/fesm2020/angular-three-lights.mjs +0 -297
- package/fesm2020/angular-three-lights.mjs.map +0 -1
- package/fesm2020/angular-three-materials.mjs +0 -1415
- package/fesm2020/angular-three-materials.mjs.map +0 -1
- package/fesm2020/angular-three-objects.mjs +0 -381
- package/fesm2020/angular-three-objects.mjs.map +0 -1
- package/fesm2020/angular-three-primitives.mjs +0 -120
- package/fesm2020/angular-three-primitives.mjs.map +0 -1
- package/fesm2020/angular-three-stats.mjs +0 -62
- package/fesm2020/angular-three-stats.mjs.map +0 -1
- package/fesm2020/angular-three-textures.mjs +0 -228
- package/fesm2020/angular-three-textures.mjs.map +0 -1
- package/geometries/README.md +0 -3
- package/geometries/index.d.ts +0 -23
- package/geometries/lib/box-geometry/box-geometry.d.ts +0 -8
- package/geometries/lib/buffer-geometry/buffer-geometry.d.ts +0 -8
- package/geometries/lib/capsule-geometry/capsule-geometry.d.ts +0 -8
- package/geometries/lib/circle-geometry/circle-geometry.d.ts +0 -8
- package/geometries/lib/common.d.ts +0 -1
- package/geometries/lib/cone-geometry/cone-geometry.d.ts +0 -8
- package/geometries/lib/cylinder-geometry/cylinder-geometry.d.ts +0 -8
- package/geometries/lib/dodecahedron-geometry/dodecahedron-geometry.d.ts +0 -8
- package/geometries/lib/edges-geometry/edges-geometry.d.ts +0 -8
- package/geometries/lib/extrude-geometry/extrude-geometry.d.ts +0 -8
- package/geometries/lib/icosahedron-geometry/icosahedron-geometry.d.ts +0 -8
- package/geometries/lib/instanced-buffer-geometry/instanced-buffer-geometry.d.ts +0 -8
- package/geometries/lib/lathe-geometry/lathe-geometry.d.ts +0 -8
- package/geometries/lib/octahedron-geometry/octahedron-geometry.d.ts +0 -8
- package/geometries/lib/plane-geometry/plane-geometry.d.ts +0 -8
- package/geometries/lib/polyhedron-geometry/polyhedron-geometry.d.ts +0 -8
- package/geometries/lib/ring-geometry/ring-geometry.d.ts +0 -8
- package/geometries/lib/shape-geometry/shape-geometry.d.ts +0 -8
- package/geometries/lib/sphere-geometry/sphere-geometry.d.ts +0 -8
- package/geometries/lib/tetrahedron-geometry/tetrahedron-geometry.d.ts +0 -8
- package/geometries/lib/torus-geometry/torus-geometry.d.ts +0 -8
- package/geometries/lib/torus-knot-geometry/torus-knot-geometry.d.ts +0 -8
- package/geometries/lib/tube-geometry/tube-geometry.d.ts +0 -8
- package/geometries/lib/wireframe-geometry/wireframe-geometry.d.ts +0 -8
- package/helpers/README.md +0 -3
- package/helpers/index.d.ts +0 -13
- package/helpers/lib/arrow-helper/arrow-helper.d.ts +0 -8
- package/helpers/lib/axes-helper/axes-helper.d.ts +0 -8
- package/helpers/lib/box-helper/box-helper.d.ts +0 -8
- package/helpers/lib/box3-helper/box3-helper.d.ts +0 -8
- package/helpers/lib/camera-helper/camera-helper.d.ts +0 -8
- package/helpers/lib/common.d.ts +0 -1
- package/helpers/lib/directional-light-helper/directional-light-helper.d.ts +0 -8
- package/helpers/lib/grid-helper/grid-helper.d.ts +0 -8
- package/helpers/lib/hemisphere-light-helper/hemisphere-light-helper.d.ts +0 -8
- package/helpers/lib/plane-helper/plane-helper.d.ts +0 -8
- package/helpers/lib/point-light-helper/point-light-helper.d.ts +0 -8
- package/helpers/lib/polar-grid-helper/polar-grid-helper.d.ts +0 -8
- package/helpers/lib/skeleton-helper/skeleton-helper.d.ts +0 -8
- package/helpers/lib/spot-light-helper/spot-light-helper.d.ts +0 -8
- package/lib/di/resize.d.ts +0 -12
- package/lib/di/window.d.ts +0 -1
- package/lib/directives/cursor.d.ts +0 -7
- package/lib/instance.d.ts +0 -81
- package/lib/pipes/math.d.ts +0 -7
- package/lib/pipes/pi.d.ts +0 -7
- package/lib/pipes/radian.d.ts +0 -7
- package/lib/pipes/side.d.ts +0 -8
- package/lib/ref.d.ts +0 -5
- package/lib/services/loader.d.ts +0 -11
- package/lib/services/resize.d.ts +0 -19
- package/lib/stores/component-store.d.ts +0 -69
- package/lib/utils/build-graph.d.ts +0 -3
- package/lib/utils/camera.d.ts +0 -4
- package/lib/utils/capitalize.d.ts +0 -1
- package/lib/utils/check-update.d.ts +0 -2
- package/lib/utils/events.d.ts +0 -6
- package/lib/utils/get-instance-local-state.d.ts +0 -2
- package/lib/utils/inject.d.ts +0 -9
- package/lib/utils/mutate.d.ts +0 -2
- package/lib/utils/proxy.d.ts +0 -7
- package/lib/utils/renderer.d.ts +0 -3
- package/lights/README.md +0 -3
- package/lights/index.d.ts +0 -9
- package/lights/lib/ambient-light/ambient-light.d.ts +0 -39
- package/lights/lib/ambient-light-probe/ambient-light-probe.d.ts +0 -40
- package/lights/lib/common.d.ts +0 -3
- package/lights/lib/directional-light/directional-light.d.ts +0 -40
- package/lights/lib/hemisphere-light/hemisphere-light.d.ts +0 -41
- package/lights/lib/hemisphere-light-probe/hemisphere-light-probe.d.ts +0 -42
- package/lights/lib/light-probe/light-probe.d.ts +0 -40
- package/lights/lib/point-light/point-light.d.ts +0 -42
- package/lights/lib/rect-area-light/rect-area-light.d.ts +0 -42
- package/lights/lib/spot-light/spot-light.d.ts +0 -45
- package/materials/README.md +0 -3
- package/materials/index.d.ts +0 -17
- package/materials/lib/common.d.ts +0 -1
- package/materials/lib/line-basic-material/line-basic-material.d.ts +0 -55
- package/materials/lib/line-dashed-material/line-dashed-material.d.ts +0 -58
- package/materials/lib/mesh-basic-material/mesh-basic-material.d.ts +0 -67
- package/materials/lib/mesh-depth-material/mesh-depth-material.d.ts +0 -58
- package/materials/lib/mesh-distance-material/mesh-distance-material.d.ts +0 -58
- package/materials/lib/mesh-lambert-material/mesh-lambert-material.d.ts +0 -78
- package/materials/lib/mesh-matcap-material/mesh-matcap-material.d.ts +0 -64
- package/materials/lib/mesh-normal-material/mesh-normal-material.d.ts +0 -61
- package/materials/lib/mesh-phong-material/mesh-phong-material.d.ts +0 -81
- package/materials/lib/mesh-physical-material/mesh-physical-material.d.ts +0 -97
- package/materials/lib/mesh-standard-material/mesh-standard-material.d.ts +0 -78
- package/materials/lib/mesh-toon-material/mesh-toon-material.d.ts +0 -74
- package/materials/lib/points-material/points-material.d.ts +0 -56
- package/materials/lib/raw-shader-material/raw-shader-material.d.ts +0 -68
- package/materials/lib/shader-material/shader-material.d.ts +0 -68
- package/materials/lib/shadow-material/shadow-material.d.ts +0 -52
- package/materials/lib/sprite-material/sprite-material.d.ts +0 -56
- package/objects/README.md +0 -3
- package/objects/index.d.ts +0 -12
- package/objects/lib/bone/bone.d.ts +0 -35
- package/objects/lib/common.d.ts +0 -3
- package/objects/lib/group/group.d.ts +0 -35
- package/objects/lib/instanced-mesh/instanced-mesh.d.ts +0 -44
- package/objects/lib/line/line.d.ts +0 -41
- package/objects/lib/line-loop/line-loop.d.ts +0 -41
- package/objects/lib/line-segments/line-segments.d.ts +0 -41
- package/objects/lib/lod/lod.d.ts +0 -40
- package/objects/lib/mesh/mesh.d.ts +0 -41
- package/objects/lib/points/points.d.ts +0 -41
- package/objects/lib/skeleton/skeleton.d.ts +0 -16
- package/objects/lib/skinned-mesh/skinned-mesh.d.ts +0 -45
- package/objects/lib/sprite/sprite.d.ts +0 -38
- package/primitives/README.md +0 -3
- package/primitives/index.d.ts +0 -2
- package/primitives/lib/common.d.ts +0 -3
- package/primitives/lib/object-primitive/object-primitive.d.ts +0 -35
- package/primitives/lib/primitive/primitive.d.ts +0 -10
- package/schematics/README.md +0 -11
- package/stats/README.md +0 -3
- package/stats/index.d.ts +0 -1
- package/stats/lib/stats/stats.d.ts +0 -16
- package/textures/README.md +0 -3
- package/textures/index.d.ts +0 -10
- package/textures/lib/canvas-texture/canvas-texture.d.ts +0 -8
- package/textures/lib/common.d.ts +0 -1
- package/textures/lib/compressed-array-texture/compressed-array-texture.d.ts +0 -8
- package/textures/lib/compressed-texture/compressed-texture.d.ts +0 -8
- package/textures/lib/cube-texture/cube-texture.d.ts +0 -8
- package/textures/lib/data-array-texture/data-array-texture.d.ts +0 -8
- package/textures/lib/data-texture/data-texture.d.ts +0 -8
- package/textures/lib/data3-dtexture/data3-dtexture.d.ts +0 -8
- package/textures/lib/depth-texture/depth-texture.d.ts +0 -8
- package/textures/lib/framebuffer-texture/framebuffer-texture.d.ts +0 -8
- package/textures/lib/video-texture/video-texture.d.ts +0 -8
|
@@ -0,0 +1,350 @@
|
|
|
1
|
+
import { getDebugNode } from '@angular/core';
|
|
2
|
+
import { NgtArgs } from '../directives/args';
|
|
3
|
+
import { NgtStore } from '../stores/store';
|
|
4
|
+
import { applyProps } from '../utils/apply-props';
|
|
5
|
+
import { getLocalState } from '../utils/instance';
|
|
6
|
+
import { is } from '../utils/is';
|
|
7
|
+
import { attachThreeChild, removeThreeChild, SPECIAL_PROPERTIES } from './utils';
|
|
8
|
+
export class NgtRendererStore {
|
|
9
|
+
constructor(root) {
|
|
10
|
+
this.root = root;
|
|
11
|
+
this.comments = [];
|
|
12
|
+
this.portals = [];
|
|
13
|
+
}
|
|
14
|
+
createNode(type, node) {
|
|
15
|
+
const state = [
|
|
16
|
+
type,
|
|
17
|
+
null,
|
|
18
|
+
[],
|
|
19
|
+
false,
|
|
20
|
+
undefined,
|
|
21
|
+
undefined,
|
|
22
|
+
undefined,
|
|
23
|
+
undefined,
|
|
24
|
+
undefined,
|
|
25
|
+
undefined,
|
|
26
|
+
undefined,
|
|
27
|
+
undefined,
|
|
28
|
+
undefined,
|
|
29
|
+
undefined,
|
|
30
|
+
];
|
|
31
|
+
const rendererNode = Object.assign(node, { __ngt_renderer__: state });
|
|
32
|
+
if (state[0 /* NgtRendererClassId.type */] === 'comment') {
|
|
33
|
+
state[13 /* NgtRendererClassId.injectorFactory */] = () => getDebugNode(rendererNode).injector;
|
|
34
|
+
// we attach an arrow function to the Comment node
|
|
35
|
+
// In our directives, we can call this function to then start tracking the RendererNode
|
|
36
|
+
rendererNode['__ngt_renderer_add_comment__'] = () => {
|
|
37
|
+
this.comments.push(rendererNode);
|
|
38
|
+
};
|
|
39
|
+
return rendererNode;
|
|
40
|
+
}
|
|
41
|
+
if (state[0 /* NgtRendererClassId.type */] === 'portal') {
|
|
42
|
+
state[13 /* NgtRendererClassId.injectorFactory */] = () => getDebugNode(rendererNode).injector;
|
|
43
|
+
this.portals.push(rendererNode);
|
|
44
|
+
return rendererNode;
|
|
45
|
+
}
|
|
46
|
+
if (state[0 /* NgtRendererClassId.type */] === 'compound') {
|
|
47
|
+
state[7 /* NgtRendererClassId.queueOps */] = new Set();
|
|
48
|
+
state[8 /* NgtRendererClassId.attributes */] = {};
|
|
49
|
+
state[9 /* NgtRendererClassId.properties */] = {};
|
|
50
|
+
return rendererNode;
|
|
51
|
+
}
|
|
52
|
+
return rendererNode;
|
|
53
|
+
}
|
|
54
|
+
setParent(node, parent) {
|
|
55
|
+
if (!node.__ngt_renderer__[1 /* NgtRendererClassId.parent */]) {
|
|
56
|
+
node.__ngt_renderer__[1 /* NgtRendererClassId.parent */] = parent;
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
addChild(node, child) {
|
|
60
|
+
if (!node.__ngt_renderer__[2 /* NgtRendererClassId.children */].includes(child)) {
|
|
61
|
+
node.__ngt_renderer__[2 /* NgtRendererClassId.children */].push(child);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
removeChild(node, child) {
|
|
65
|
+
const index = node.__ngt_renderer__[2 /* NgtRendererClassId.children */].findIndex((c) => child === c);
|
|
66
|
+
if (index >= 0) {
|
|
67
|
+
node.__ngt_renderer__[2 /* NgtRendererClassId.children */].splice(index, 1);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
setCompound(compound, instance) {
|
|
71
|
+
compound.__ngt_renderer__[6 /* NgtRendererClassId.compounded */] = instance;
|
|
72
|
+
const attributes = Object.keys(compound.__ngt_renderer__[8 /* NgtRendererClassId.attributes */]);
|
|
73
|
+
const properties = Object.keys(compound.__ngt_renderer__[9 /* NgtRendererClassId.properties */]);
|
|
74
|
+
if (attributes.length) {
|
|
75
|
+
for (const key of attributes) {
|
|
76
|
+
this.applyAttribute(instance, key, compound.__ngt_renderer__[8 /* NgtRendererClassId.attributes */][key]);
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
if (properties.length) {
|
|
80
|
+
for (const key of properties) {
|
|
81
|
+
this.applyProperty(instance, key, compound.__ngt_renderer__[9 /* NgtRendererClassId.properties */][key]);
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
this.executeOperation(compound);
|
|
85
|
+
}
|
|
86
|
+
queueOperation(node, op) {
|
|
87
|
+
node.__ngt_renderer__[7 /* NgtRendererClassId.queueOps */].add(op);
|
|
88
|
+
}
|
|
89
|
+
executeOperation(node, type = 'op') {
|
|
90
|
+
if (node.__ngt_renderer__[7 /* NgtRendererClassId.queueOps */]?.size) {
|
|
91
|
+
node.__ngt_renderer__[7 /* NgtRendererClassId.queueOps */].forEach((op) => {
|
|
92
|
+
if (op[0 /* NgtQueueOpClassId.type */] === type) {
|
|
93
|
+
op[1 /* NgtQueueOpClassId.op */]();
|
|
94
|
+
node.__ngt_renderer__[7 /* NgtRendererClassId.queueOps */].delete(op);
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
}
|
|
98
|
+
}
|
|
99
|
+
processPortalContainer(portal) {
|
|
100
|
+
const injectorFactory = portal.__ngt_renderer__[13 /* NgtRendererClassId.injectorFactory */];
|
|
101
|
+
const injector = injectorFactory?.();
|
|
102
|
+
if (!injector)
|
|
103
|
+
return;
|
|
104
|
+
const portalStore = injector.get(NgtStore, null);
|
|
105
|
+
if (!portalStore)
|
|
106
|
+
return;
|
|
107
|
+
const portalContainer = portalStore.get('scene');
|
|
108
|
+
if (!portalContainer)
|
|
109
|
+
return;
|
|
110
|
+
portal.__ngt_renderer__[12 /* NgtRendererClassId.portalContainer */] = this.createNode('three', portalContainer);
|
|
111
|
+
}
|
|
112
|
+
applyAttribute(node, name, value) {
|
|
113
|
+
if (node.__ngt_renderer__[3 /* NgtRendererClassId.destroyed */])
|
|
114
|
+
return;
|
|
115
|
+
if (name === SPECIAL_PROPERTIES.RENDER_PRIORITY) {
|
|
116
|
+
// priority needs to be set as an attribute string so that they can be set as early as possible
|
|
117
|
+
// we convert that string to a number. if it's invalid, 0
|
|
118
|
+
let priority = Number(value);
|
|
119
|
+
if (isNaN(priority)) {
|
|
120
|
+
priority = 0;
|
|
121
|
+
console.warn(`[NGT] "priority" is an invalid number, default to 0`);
|
|
122
|
+
}
|
|
123
|
+
getLocalState(node).priority = priority;
|
|
124
|
+
}
|
|
125
|
+
if (name === SPECIAL_PROPERTIES.COMPOUND) {
|
|
126
|
+
// we set the compound property on instance node now so we know that this instance is being compounded
|
|
127
|
+
node.__ngt_renderer__[4 /* NgtRendererClassId.compound */] = [value === '' || value === 'first', {}];
|
|
128
|
+
return;
|
|
129
|
+
}
|
|
130
|
+
if (name === SPECIAL_PROPERTIES.ATTACH) {
|
|
131
|
+
// handle attach as tring
|
|
132
|
+
const paths = value.split('.');
|
|
133
|
+
if (paths.length)
|
|
134
|
+
getLocalState(node).attach = paths;
|
|
135
|
+
return;
|
|
136
|
+
}
|
|
137
|
+
if (name === SPECIAL_PROPERTIES.VALUE) {
|
|
138
|
+
// TODO the last time we tried this here, this didn't work
|
|
139
|
+
// coercion
|
|
140
|
+
let maybeCoerced = value;
|
|
141
|
+
if (maybeCoerced === '' || maybeCoerced === 'true' || maybeCoerced === 'false') {
|
|
142
|
+
maybeCoerced = maybeCoerced === 'true' || maybeCoerced === '';
|
|
143
|
+
}
|
|
144
|
+
else if (!isNaN(Number(maybeCoerced))) {
|
|
145
|
+
maybeCoerced = Number(maybeCoerced);
|
|
146
|
+
}
|
|
147
|
+
node.__ngt_renderer__[10 /* NgtRendererClassId.rawValue */] = maybeCoerced;
|
|
148
|
+
return;
|
|
149
|
+
}
|
|
150
|
+
applyProps(node, { [name]: value });
|
|
151
|
+
}
|
|
152
|
+
applyProperty(node, name, value) {
|
|
153
|
+
if (node.__ngt_renderer__[3 /* NgtRendererClassId.destroyed */])
|
|
154
|
+
return;
|
|
155
|
+
// setup [ref] here
|
|
156
|
+
if (name === SPECIAL_PROPERTIES.REF && is.ref(value)) {
|
|
157
|
+
node.__ngt_renderer__[11 /* NgtRendererClassId.ref */] = value;
|
|
158
|
+
value.nativeElement = node;
|
|
159
|
+
return;
|
|
160
|
+
}
|
|
161
|
+
const parent = getLocalState(node).parent || node.__ngt_renderer__[1 /* NgtRendererClassId.parent */];
|
|
162
|
+
// rawValue
|
|
163
|
+
if (getLocalState(node).isRaw && name === SPECIAL_PROPERTIES.VALUE) {
|
|
164
|
+
node.__ngt_renderer__[10 /* NgtRendererClassId.rawValue */] = value;
|
|
165
|
+
attachThreeChild(parent, node);
|
|
166
|
+
return;
|
|
167
|
+
}
|
|
168
|
+
// attach
|
|
169
|
+
if (name === SPECIAL_PROPERTIES.ATTACH) {
|
|
170
|
+
getLocalState(node).attach = Array.isArray(value) ? value.map((v) => v.toString()) : value;
|
|
171
|
+
attachThreeChild(parent, node);
|
|
172
|
+
return;
|
|
173
|
+
}
|
|
174
|
+
const compound = node.__ngt_renderer__[4 /* NgtRendererClassId.compound */];
|
|
175
|
+
if (compound?.[1 /* NgtCompoundClassId.props */] &&
|
|
176
|
+
name in compound[1 /* NgtCompoundClassId.props */] &&
|
|
177
|
+
!compound[0 /* NgtCompoundClassId.applyFirst */]) {
|
|
178
|
+
value = compound[1 /* NgtCompoundClassId.props */][name];
|
|
179
|
+
}
|
|
180
|
+
applyProps(node, { [name]: value });
|
|
181
|
+
}
|
|
182
|
+
isCompound(name) {
|
|
183
|
+
return this.root.compoundPrefixes.some((prefix) => name.startsWith(prefix));
|
|
184
|
+
}
|
|
185
|
+
get rootScene() {
|
|
186
|
+
return this.root.store.get('scene');
|
|
187
|
+
}
|
|
188
|
+
get rootCdr() {
|
|
189
|
+
return this.root.cdr;
|
|
190
|
+
}
|
|
191
|
+
getClosestParentWithInstance(node) {
|
|
192
|
+
let parent = node.__ngt_renderer__[1 /* NgtRendererClassId.parent */];
|
|
193
|
+
while (parent && parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] !== 'three') {
|
|
194
|
+
parent = parent.__ngt_renderer__[12 /* NgtRendererClassId.portalContainer */]
|
|
195
|
+
? parent.__ngt_renderer__[12 /* NgtRendererClassId.portalContainer */]
|
|
196
|
+
: parent.__ngt_renderer__[1 /* NgtRendererClassId.parent */];
|
|
197
|
+
}
|
|
198
|
+
return parent;
|
|
199
|
+
}
|
|
200
|
+
getClosestParentWithCompound(node) {
|
|
201
|
+
if (node.__ngt_renderer__[5 /* NgtRendererClassId.compoundParent */]) {
|
|
202
|
+
return node.__ngt_renderer__[5 /* NgtRendererClassId.compoundParent */];
|
|
203
|
+
}
|
|
204
|
+
let parent = node.__ngt_renderer__[1 /* NgtRendererClassId.parent */];
|
|
205
|
+
if (parent &&
|
|
206
|
+
parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'compound' &&
|
|
207
|
+
!parent.__ngt_renderer__[6 /* NgtRendererClassId.compounded */]) {
|
|
208
|
+
return parent;
|
|
209
|
+
}
|
|
210
|
+
while (parent &&
|
|
211
|
+
(parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three' ||
|
|
212
|
+
!parent.__ngt_renderer__[5 /* NgtRendererClassId.compoundParent */] ||
|
|
213
|
+
parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] !== 'compound')) {
|
|
214
|
+
parent = parent.__ngt_renderer__[1 /* NgtRendererClassId.parent */];
|
|
215
|
+
}
|
|
216
|
+
if (!parent)
|
|
217
|
+
return;
|
|
218
|
+
if (parent.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three' &&
|
|
219
|
+
parent.__ngt_renderer__[5 /* NgtRendererClassId.compoundParent */]) {
|
|
220
|
+
return parent.__ngt_renderer__[5 /* NgtRendererClassId.compoundParent */];
|
|
221
|
+
}
|
|
222
|
+
if (!parent.__ngt_renderer__[6 /* NgtRendererClassId.compounded */]) {
|
|
223
|
+
return parent;
|
|
224
|
+
}
|
|
225
|
+
return null;
|
|
226
|
+
}
|
|
227
|
+
getCreationState() {
|
|
228
|
+
const injectedArgs = this.firstNonInjectedDirective(NgtArgs)?.args || [];
|
|
229
|
+
const store = this.tryGetPortalStore();
|
|
230
|
+
return { injectedArgs, store };
|
|
231
|
+
}
|
|
232
|
+
destroy(node, parent) {
|
|
233
|
+
const state = node.__ngt_renderer__;
|
|
234
|
+
if (state[3 /* NgtRendererClassId.destroyed */])
|
|
235
|
+
return;
|
|
236
|
+
if (state[0 /* NgtRendererClassId.type */] === 'three') {
|
|
237
|
+
state[4 /* NgtRendererClassId.compound */] = undefined;
|
|
238
|
+
state[5 /* NgtRendererClassId.compoundParent */] = undefined;
|
|
239
|
+
const localState = getLocalState(node);
|
|
240
|
+
if (localState.objects) {
|
|
241
|
+
localState.objects.value.forEach((obj) => this.destroy(obj, parent));
|
|
242
|
+
localState.objects.complete();
|
|
243
|
+
}
|
|
244
|
+
if (localState.nonObjects) {
|
|
245
|
+
localState.nonObjects.value.forEach((obj) => this.destroy(obj, parent));
|
|
246
|
+
localState.nonObjects.complete();
|
|
247
|
+
}
|
|
248
|
+
if (localState.afterUpdate)
|
|
249
|
+
localState.afterUpdate.complete();
|
|
250
|
+
if (localState.afterAttach)
|
|
251
|
+
localState.afterAttach.complete();
|
|
252
|
+
delete localState['objects'];
|
|
253
|
+
delete localState['nonObjects'];
|
|
254
|
+
delete localState['add'];
|
|
255
|
+
delete localState['remove'];
|
|
256
|
+
delete localState['afterUpdate'];
|
|
257
|
+
delete localState['afterAttach'];
|
|
258
|
+
delete localState['store'];
|
|
259
|
+
delete localState['handlers'];
|
|
260
|
+
if (!localState.primitive) {
|
|
261
|
+
delete node['__ngt__'];
|
|
262
|
+
}
|
|
263
|
+
}
|
|
264
|
+
if (state[0 /* NgtRendererClassId.type */] === 'comment') {
|
|
265
|
+
state[13 /* NgtRendererClassId.injectorFactory */] = null;
|
|
266
|
+
delete node['__ngt_renderer_add_comment__'];
|
|
267
|
+
const index = this.comments.findIndex((comment) => comment === node);
|
|
268
|
+
if (index > -1) {
|
|
269
|
+
this.comments.splice(index, 1);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (state[0 /* NgtRendererClassId.type */] === 'portal') {
|
|
273
|
+
state[13 /* NgtRendererClassId.injectorFactory */] = null;
|
|
274
|
+
const index = this.portals.findIndex((portal) => portal === node);
|
|
275
|
+
if (index > -1) {
|
|
276
|
+
this.portals.splice(index, 1);
|
|
277
|
+
}
|
|
278
|
+
}
|
|
279
|
+
if (state[0 /* NgtRendererClassId.type */] === 'compound') {
|
|
280
|
+
state[6 /* NgtRendererClassId.compounded */] = undefined;
|
|
281
|
+
state[8 /* NgtRendererClassId.attributes */] = null;
|
|
282
|
+
state[9 /* NgtRendererClassId.properties */] = null;
|
|
283
|
+
this.executeOperation(node, 'cleanUp');
|
|
284
|
+
state[7 /* NgtRendererClassId.queueOps */].clear();
|
|
285
|
+
state[7 /* NgtRendererClassId.queueOps */] = null;
|
|
286
|
+
}
|
|
287
|
+
if (state[11 /* NgtRendererClassId.ref */]) {
|
|
288
|
+
// nullify ref
|
|
289
|
+
state[11 /* NgtRendererClassId.ref */].nativeElement = null;
|
|
290
|
+
state[11 /* NgtRendererClassId.ref */] = undefined;
|
|
291
|
+
}
|
|
292
|
+
// nullify parent
|
|
293
|
+
state[1 /* NgtRendererClassId.parent */] = null;
|
|
294
|
+
for (const renderChild of state[2 /* NgtRendererClassId.children */] || []) {
|
|
295
|
+
if (renderChild.__ngt_renderer__[0 /* NgtRendererClassId.type */] === 'three' && parent) {
|
|
296
|
+
removeThreeChild(parent, renderChild, true);
|
|
297
|
+
}
|
|
298
|
+
this.destroy(renderChild, parent);
|
|
299
|
+
}
|
|
300
|
+
state[2 /* NgtRendererClassId.children */] = [];
|
|
301
|
+
state[3 /* NgtRendererClassId.destroyed */] = true;
|
|
302
|
+
if (parent) {
|
|
303
|
+
this.removeChild(parent, node);
|
|
304
|
+
}
|
|
305
|
+
}
|
|
306
|
+
firstNonInjectedDirective(dir) {
|
|
307
|
+
let directive;
|
|
308
|
+
let i = this.comments.length - 1;
|
|
309
|
+
while (i >= 0) {
|
|
310
|
+
const comment = this.comments[i];
|
|
311
|
+
if (comment.__ngt_renderer__[3 /* NgtRendererClassId.destroyed */]) {
|
|
312
|
+
i--;
|
|
313
|
+
continue;
|
|
314
|
+
}
|
|
315
|
+
const injector = comment.__ngt_renderer__[13 /* NgtRendererClassId.injectorFactory */]();
|
|
316
|
+
if (!injector) {
|
|
317
|
+
i--;
|
|
318
|
+
continue;
|
|
319
|
+
}
|
|
320
|
+
const instance = injector.get(dir, null);
|
|
321
|
+
if (instance && instance.validate()) {
|
|
322
|
+
directive = instance;
|
|
323
|
+
break;
|
|
324
|
+
}
|
|
325
|
+
i--;
|
|
326
|
+
}
|
|
327
|
+
return directive;
|
|
328
|
+
}
|
|
329
|
+
tryGetPortalStore() {
|
|
330
|
+
let store;
|
|
331
|
+
// we only care about the portal states because NgtStore only differs per Portal
|
|
332
|
+
let i = this.portals.length - 1;
|
|
333
|
+
while (i >= 0) {
|
|
334
|
+
// loop through the portal state backwards to find the closest NgtStore
|
|
335
|
+
const injector = this.portals[i].__ngt_renderer__[13 /* NgtRendererClassId.injectorFactory */]();
|
|
336
|
+
if (!injector) {
|
|
337
|
+
i--;
|
|
338
|
+
continue;
|
|
339
|
+
}
|
|
340
|
+
const instance = injector.get(NgtStore, null);
|
|
341
|
+
if (instance) {
|
|
342
|
+
store = instance;
|
|
343
|
+
break;
|
|
344
|
+
}
|
|
345
|
+
i--;
|
|
346
|
+
}
|
|
347
|
+
return store || this.root.store;
|
|
348
|
+
}
|
|
349
|
+
}
|
|
350
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9yZW5kZXJlci9zdGF0ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFlBQVksRUFBa0IsTUFBTSxlQUFlLENBQUM7QUFDaEYsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzdDLE9BQU8sRUFBRSxRQUFRLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUUzQyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLG1CQUFtQixDQUFDO0FBQ2xELE9BQU8sRUFBRSxFQUFFLEVBQUUsTUFBTSxhQUFhLENBQUM7QUFFakMsT0FBTyxFQUFFLGdCQUFnQixFQUFFLGdCQUFnQixFQUFFLGtCQUFrQixFQUFFLE1BQU0sU0FBUyxDQUFDO0FBK0JqRixNQUFNLE9BQU8sZ0JBQWdCO0lBSXpCLFlBQTZCLElBQTBCO1FBQTFCLFNBQUksR0FBSixJQUFJLENBQXNCO1FBSHRDLGFBQVEsR0FBRyxFQUE0QixDQUFDO1FBQ3hDLFlBQU8sR0FBRyxFQUE0QixDQUFDO0lBRUUsQ0FBQztJQUUzRCxVQUFVLENBQUMsSUFBK0MsRUFBRSxJQUFrQjtRQUMxRSxNQUFNLEtBQUssR0FBRztZQUNWLElBQUk7WUFDSixJQUFJO1lBQ0osRUFBRTtZQUNGLEtBQUs7WUFDTCxTQUFVO1lBQ1YsU0FBVTtZQUNWLFNBQVU7WUFDVixTQUFVO1lBQ1YsU0FBVTtZQUNWLFNBQVU7WUFDVixTQUFVO1lBQ1YsU0FBVTtZQUNWLFNBQVU7WUFDVixTQUFVO1NBQ08sQ0FBQztRQUV0QixNQUFNLFlBQVksR0FBRyxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksRUFBRSxFQUFFLGdCQUFnQixFQUFFLEtBQUssRUFBRSxDQUFDLENBQUM7UUFFdEUs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QUFRLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxnQkFBZ0IsNkNBQW9DLEVBQUUsQ0FBQztZQUN4RixJQUFJLENBQUMsUUFBUSxFQUFFO2dCQUNYLENBQUMsRUFBRSxDQUFDO2dCQUNKLFNBQVM7YUFDWjtZQUNELE1BQU0sUUFBUSxHQUFHLFFBQVEsQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxDQUFDO1lBQzlDLElBQUksUUFBUSxFQUFFO2dCQUNWLEtBQUssR0FBRyxRQUFRLENBQUM7Z0JBQ2pCLE1BQU07YUFDVDtZQUNELENBQUMsRUFBRSxDQUFDO1NBQ1A7UUFDRCxPQUFPLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQztJQUNwQyxDQUFDO0NBQ0oiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgZ2V0RGVidWdOb2RlLCBJbmplY3RvciwgVHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgTmd0QXJncyB9IGZyb20gJy4uL2RpcmVjdGl2ZXMvYXJncyc7XG5pbXBvcnQgeyBOZ3RTdG9yZSB9IGZyb20gJy4uL3N0b3Jlcy9zdG9yZSc7XG5pbXBvcnQgdHlwZSB7IE5ndEFueVJlY29yZCB9IGZyb20gJy4uL3R5cGVzJztcbmltcG9ydCB7IGFwcGx5UHJvcHMgfSBmcm9tICcuLi91dGlscy9hcHBseS1wcm9wcyc7XG5pbXBvcnQgeyBnZXRMb2NhbFN0YXRlIH0gZnJvbSAnLi4vdXRpbHMvaW5zdGFuY2UnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi91dGlscy9pcyc7XG5pbXBvcnQgeyBOZ3RDb21wb3VuZENsYXNzSWQsIE5ndFF1ZXVlT3BDbGFzc0lkLCBOZ3RSZW5kZXJlckNsYXNzSWQgfSBmcm9tICcuL2VudW1zJztcbmltcG9ydCB7IGF0dGFjaFRocmVlQ2hpbGQsIHJlbW92ZVRocmVlQ2hpbGQsIFNQRUNJQUxfUFJPUEVSVElFUyB9IGZyb20gJy4vdXRpbHMnO1xuXG5leHBvcnQgdHlwZSBOZ3RSZW5kZXJlclJvb3RTdGF0ZSA9IHtcbiAgICBzdG9yZTogTmd0U3RvcmU7XG4gICAgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZjtcbiAgICBjb21wb3VuZFByZWZpeGVzOiBzdHJpbmdbXTtcbn07XG5cbmV4cG9ydCB0eXBlIE5ndFF1ZXVlT3AgPSBbdHlwZTogJ29wJyB8ICdjbGVhblVwJywgb3A6ICgpID0+IHZvaWQsIGRvbmU/OiB0cnVlXTtcblxuZXhwb3J0IHR5cGUgTmd0UmVuZGVyZXJTdGF0ZSA9IFtcbiAgICB0eXBlOiAndGhyZWUnIHwgJ2NvbXBvdW5kJyB8ICdwb3J0YWwnIHwgJ2NvbW1lbnQnIHwgJ2RvbScsXG4gICAgcGFyZW50OiBOZ3RSZW5kZXJlck5vZGUgfCBudWxsLFxuICAgIGNoaWxkcmVuOiBOZ3RSZW5kZXJlck5vZGVbXSxcbiAgICBkZXN0cm95ZWQ6IGJvb2xlYW4sXG4gICAgY29tcG91bmQ6IFthcHBseUZpcnN0OiBib29sZWFuLCBwcm9wczogUmVjb3JkPHN0cmluZywgYW55Pl0sXG4gICAgY29tcG91bmRQYXJlbnQ6IE5ndFJlbmRlcmVyTm9kZSxcbiAgICBjb21wb3VuZGVkOiBOZ3RSZW5kZXJlck5vZGUsXG4gICAgcXVldWVPcHM6IFNldDxOZ3RRdWV1ZU9wPixcbiAgICBhdHRyaWJ1dGVzOiBSZWNvcmQ8c3RyaW5nLCBhbnk+LFxuICAgIHByb3BlcnRpZXM6IFJlY29yZDxzdHJpbmcsIGFueT4sXG4gICAgcmF3VmFsdWU6IGFueSxcbiAgICByZWY6IGFueSxcbiAgICBwb3J0YWxDb250YWluZXI6IE5ndFJlbmRlcmVyTm9kZSxcbiAgICBpbmplY3RvckZhY3Rvcnk6ICgpID0+IEluamVjdG9yXG5dO1xuXG5leHBvcnQgdHlwZSBOZ3RSZW5kZXJlck5vZGUgPSB7XG4gICAgX19uZ3RfcmVuZGVyZXJfXzogTmd0UmVuZGVyZXJTdGF0ZTtcbn07XG5cbmV4cG9ydCBjbGFzcyBOZ3RSZW5kZXJlclN0b3JlIHtcbiAgICBwcml2YXRlIHJlYWRvbmx5IGNvbW1lbnRzID0gW10gYXMgQXJyYXk8Tmd0UmVuZGVyZXJOb2RlPjtcbiAgICBwcml2YXRlIHJlYWRvbmx5IHBvcnRhbHMgPSBbXSBhcyBBcnJheTxOZ3RSZW5kZXJlck5vZGU+O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSByZWFkb25seSByb290OiBOZ3RSZW5kZXJlclJvb3RTdGF0ZSkge31cblxuICAgIGNyZWF0ZU5vZGUodHlwZTogTmd0UmVuZGVyZXJTdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0sIG5vZGU6IE5ndEFueVJlY29yZCkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IFtcbiAgICAgICAgICAgIHR5cGUsXG4gICAgICAgICAgICBudWxsLFxuICAgICAgICAgICAgW10sXG4gICAgICAgICAgICBmYWxzZSxcbiAgICAgICAgICAgIHVuZGVmaW5lZCEsXG4gICAgICAgICAgICB1bmRlZmluZWQhLFxuICAgICAgICAgICAgdW5kZWZpbmVkISxcbiAgICAgICAgICAgIHVuZGVmaW5lZCEsXG4gICAgICAgICAgICB1bmRlZmluZWQhLFxuICAgICAgICAgICAgdW5kZWZpbmVkISxcbiAgICAgICAgICAgIHVuZGVmaW5lZCEsXG4gICAgICAgICAgICB1bmRlZmluZWQhLFxuICAgICAgICAgICAgdW5kZWZpbmVkISxcbiAgICAgICAgICAgIHVuZGVmaW5lZCEsXG4gICAgICAgIF0gYXMgTmd0UmVuZGVyZXJTdGF0ZTtcblxuICAgICAgICBjb25zdCByZW5kZXJlck5vZGUgPSBPYmplY3QuYXNzaWduKG5vZGUsIHsgX19uZ3RfcmVuZGVyZXJfXzogc3RhdGUgfSk7XG5cbiAgICAgICAgaWYgKHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ2NvbW1lbnQnKSB7XG4gICAgICAgICAgICBzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSA9ICgpID0+IGdldERlYnVnTm9kZShyZW5kZXJlck5vZGUpIS5pbmplY3RvcjtcbiAgICAgICAgICAgIC8vIHdlIGF0dGFjaCBhbiBhcnJvdyBmdW5jdGlvbiB0byB0aGUgQ29tbWVudCBub2RlXG4gICAgICAgICAgICAvLyBJbiBvdXIgZGlyZWN0aXZlcywgd2UgY2FuIGNhbGwgdGhpcyBmdW5jdGlvbiB0byB0aGVuIHN0YXJ0IHRyYWNraW5nIHRoZSBSZW5kZXJlck5vZGVcbiAgICAgICAgICAgIHJlbmRlcmVyTm9kZVsnX19uZ3RfcmVuZGVyZXJfYWRkX2NvbW1lbnRfXyddID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgIHRoaXMuY29tbWVudHMucHVzaChyZW5kZXJlck5vZGUpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgICAgIHJldHVybiByZW5kZXJlck5vZGU7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAncG9ydGFsJykge1xuICAgICAgICAgICAgc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0gPSAoKSA9PiBnZXREZWJ1Z05vZGUocmVuZGVyZXJOb2RlKSEuaW5qZWN0b3I7XG4gICAgICAgICAgICB0aGlzLnBvcnRhbHMucHVzaChyZW5kZXJlck5vZGUpO1xuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyTm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcpIHtcbiAgICAgICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5xdWV1ZU9wc10gPSBuZXcgU2V0KCk7XG4gICAgICAgICAgICBzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQuYXR0cmlidXRlc10gPSB7fTtcbiAgICAgICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5wcm9wZXJ0aWVzXSA9IHt9O1xuICAgICAgICAgICAgcmV0dXJuIHJlbmRlcmVyTm9kZTtcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiByZW5kZXJlck5vZGU7XG4gICAgfVxuXG4gICAgc2V0UGFyZW50KG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgcGFyZW50OiBOZ3RSZW5kZXJlck5vZGUpIHtcbiAgICAgICAgaWYgKCFub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF0pIHtcbiAgICAgICAgICAgIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSA9IHBhcmVudDtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGFkZENoaWxkKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgY2hpbGQ6IE5ndFJlbmRlcmVyTm9kZSkge1xuICAgICAgICBpZiAoIW5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dLmluY2x1ZGVzKGNoaWxkKSkge1xuICAgICAgICAgICAgbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jaGlsZHJlbl0ucHVzaChjaGlsZCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZW1vdmVDaGlsZChub2RlOiBOZ3RSZW5kZXJlck5vZGUsIGNoaWxkOiBOZ3RSZW5kZXJlck5vZGUpIHtcbiAgICAgICAgY29uc3QgaW5kZXggPSBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNoaWxkcmVuXS5maW5kSW5kZXgoKGMpID0+IGNoaWxkID09PSBjKTtcbiAgICAgICAgaWYgKGluZGV4ID49IDApIHtcbiAgICAgICAgICAgIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXRDb21wb3VuZChjb21wb3VuZDogTmd0UmVuZGVyZXJOb2RlLCBpbnN0YW5jZTogTmd0UmVuZGVyZXJOb2RlKSB7XG4gICAgICAgIGNvbXBvdW5kLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kZWRdID0gaW5zdGFuY2U7XG4gICAgICAgIGNvbnN0IGF0dHJpYnV0ZXMgPSBPYmplY3Qua2V5cyhjb21wb3VuZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5hdHRyaWJ1dGVzXSk7XG4gICAgICAgIGNvbnN0IHByb3BlcnRpZXMgPSBPYmplY3Qua2V5cyhjb21wb3VuZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wcm9wZXJ0aWVzXSk7XG5cbiAgICAgICAgaWYgKGF0dHJpYnV0ZXMubGVuZ3RoKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBhdHRyaWJ1dGVzKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5hcHBseUF0dHJpYnV0ZShpbnN0YW5jZSwga2V5LCBjb21wb3VuZC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5hdHRyaWJ1dGVzXVtrZXldKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAocHJvcGVydGllcy5sZW5ndGgpIHtcbiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5IG9mIHByb3BlcnRpZXMpIHtcbiAgICAgICAgICAgICAgICB0aGlzLmFwcGx5UHJvcGVydHkoaW5zdGFuY2UsIGtleSwgY29tcG91bmQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucHJvcGVydGllc11ba2V5XSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLmV4ZWN1dGVPcGVyYXRpb24oY29tcG91bmQpO1xuICAgIH1cblxuICAgIHF1ZXVlT3BlcmF0aW9uKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgb3A6IE5ndFF1ZXVlT3ApIHtcbiAgICAgICAgbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5xdWV1ZU9wc10uYWRkKG9wKTtcbiAgICB9XG5cbiAgICBleGVjdXRlT3BlcmF0aW9uKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgdHlwZTogTmd0UXVldWVPcFtOZ3RRdWV1ZU9wQ2xhc3NJZC50eXBlXSA9ICdvcCcpIHtcbiAgICAgICAgaWYgKG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucXVldWVPcHNdPy5zaXplKSB7XG4gICAgICAgICAgICBub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnF1ZXVlT3BzXS5mb3JFYWNoKChvcCkgPT4ge1xuICAgICAgICAgICAgICAgIGlmIChvcFtOZ3RRdWV1ZU9wQ2xhc3NJZC50eXBlXSA9PT0gdHlwZSkge1xuICAgICAgICAgICAgICAgICAgICBvcFtOZ3RRdWV1ZU9wQ2xhc3NJZC5vcF0oKTtcbiAgICAgICAgICAgICAgICAgICAgbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5xdWV1ZU9wc10uZGVsZXRlKG9wKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByb2Nlc3NQb3J0YWxDb250YWluZXIocG9ydGFsOiBOZ3RSZW5kZXJlck5vZGUpIHtcbiAgICAgICAgY29uc3QgaW5qZWN0b3JGYWN0b3J5ID0gcG9ydGFsLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV07XG4gICAgICAgIGNvbnN0IGluamVjdG9yID0gaW5qZWN0b3JGYWN0b3J5Py4oKTtcbiAgICAgICAgaWYgKCFpbmplY3RvcikgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHBvcnRhbFN0b3JlID0gaW5qZWN0b3IuZ2V0KE5ndFN0b3JlLCBudWxsKTtcbiAgICAgICAgaWYgKCFwb3J0YWxTdG9yZSkgcmV0dXJuO1xuXG4gICAgICAgIGNvbnN0IHBvcnRhbENvbnRhaW5lciA9IHBvcnRhbFN0b3JlLmdldCgnc2NlbmUnKTtcbiAgICAgICAgaWYgKCFwb3J0YWxDb250YWluZXIpIHJldHVybjtcblxuICAgICAgICBwb3J0YWwuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXSA9IHRoaXMuY3JlYXRlTm9kZSgndGhyZWUnLCBwb3J0YWxDb250YWluZXIpO1xuICAgIH1cblxuICAgIGFwcGx5QXR0cmlidXRlKG5vZGU6IE5ndFJlbmRlcmVyTm9kZSwgbmFtZTogc3RyaW5nLCB2YWx1ZTogc3RyaW5nKSB7XG4gICAgICAgIGlmIChub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHJldHVybjtcbiAgICAgICAgaWYgKG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5SRU5ERVJfUFJJT1JJVFkpIHtcbiAgICAgICAgICAgIC8vIHByaW9yaXR5IG5lZWRzIHRvIGJlIHNldCBhcyBhbiBhdHRyaWJ1dGUgc3RyaW5nIHNvIHRoYXQgdGhleSBjYW4gYmUgc2V0IGFzIGVhcmx5IGFzIHBvc3NpYmxlXG4gICAgICAgICAgICAvLyB3ZSBjb252ZXJ0IHRoYXQgc3RyaW5nIHRvIGEgbnVtYmVyLiBpZiBpdCdzIGludmFsaWQsIDBcbiAgICAgICAgICAgIGxldCBwcmlvcml0eSA9IE51bWJlcih2YWx1ZSk7XG4gICAgICAgICAgICBpZiAoaXNOYU4ocHJpb3JpdHkpKSB7XG4gICAgICAgICAgICAgICAgcHJpb3JpdHkgPSAwO1xuICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihgW05HVF0gXCJwcmlvcml0eVwiIGlzIGFuIGludmFsaWQgbnVtYmVyLCBkZWZhdWx0IHRvIDBgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGdldExvY2FsU3RhdGUobm9kZSkucHJpb3JpdHkgPSBwcmlvcml0eTtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuQ09NUE9VTkQpIHtcbiAgICAgICAgICAgIC8vIHdlIHNldCB0aGUgY29tcG91bmQgcHJvcGVydHkgb24gaW5zdGFuY2Ugbm9kZSBub3cgc28gd2Uga25vdyB0aGF0IHRoaXMgaW5zdGFuY2UgaXMgYmVpbmcgY29tcG91bmRlZFxuICAgICAgICAgICAgbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0gPSBbdmFsdWUgPT09ICcnIHx8IHZhbHVlID09PSAnZmlyc3QnLCB7fV07XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBpZiAobmFtZSA9PT0gU1BFQ0lBTF9QUk9QRVJUSUVTLkFUVEFDSCkge1xuICAgICAgICAgICAgLy8gaGFuZGxlIGF0dGFjaCBhcyB0cmluZ1xuICAgICAgICAgICAgY29uc3QgcGF0aHMgPSB2YWx1ZS5zcGxpdCgnLicpO1xuICAgICAgICAgICAgaWYgKHBhdGhzLmxlbmd0aCkgZ2V0TG9jYWxTdGF0ZShub2RlKS5hdHRhY2ggPSBwYXRocztcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuVkFMVUUpIHtcbiAgICAgICAgICAgIC8vIFRPRE8gIHRoZSBsYXN0IHRpbWUgd2UgdHJpZWQgdGhpcyBoZXJlLCB0aGlzIGRpZG4ndCB3b3JrXG5cbiAgICAgICAgICAgIC8vIGNvZXJjaW9uXG4gICAgICAgICAgICBsZXQgbWF5YmVDb2VyY2VkOiBhbnkgPSB2YWx1ZTtcbiAgICAgICAgICAgIGlmIChtYXliZUNvZXJjZWQgPT09ICcnIHx8IG1heWJlQ29lcmNlZCA9PT0gJ3RydWUnIHx8IG1heWJlQ29lcmNlZCA9PT0gJ2ZhbHNlJykge1xuICAgICAgICAgICAgICAgIG1heWJlQ29lcmNlZCA9IG1heWJlQ29lcmNlZCA9PT0gJ3RydWUnIHx8IG1heWJlQ29lcmNlZCA9PT0gJyc7XG4gICAgICAgICAgICB9IGVsc2UgaWYgKCFpc05hTihOdW1iZXIobWF5YmVDb2VyY2VkKSkpIHtcbiAgICAgICAgICAgICAgICBtYXliZUNvZXJjZWQgPSBOdW1iZXIobWF5YmVDb2VyY2VkKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucmF3VmFsdWVdID0gbWF5YmVDb2VyY2VkO1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG5cbiAgICAgICAgYXBwbHlQcm9wcyhub2RlLCB7IFtuYW1lXTogdmFsdWUgfSk7XG4gICAgfVxuXG4gICAgYXBwbHlQcm9wZXJ0eShub2RlOiBOZ3RSZW5kZXJlck5vZGUsIG5hbWU6IHN0cmluZywgdmFsdWU6IGFueSkge1xuICAgICAgICBpZiAobm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5kZXN0cm95ZWRdKSByZXR1cm47XG4gICAgICAgIC8vIHNldHVwIFtyZWZdIGhlcmVcbiAgICAgICAgaWYgKG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5SRUYgJiYgaXMucmVmKHZhbHVlKSkge1xuICAgICAgICAgICAgbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5yZWZdID0gdmFsdWU7XG4gICAgICAgICAgICB2YWx1ZS5uYXRpdmVFbGVtZW50ID0gbm9kZTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IHBhcmVudCA9IGdldExvY2FsU3RhdGUobm9kZSkucGFyZW50IHx8IG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XTtcblxuICAgICAgICAvLyByYXdWYWx1ZVxuICAgICAgICBpZiAoZ2V0TG9jYWxTdGF0ZShub2RlKS5pc1JhdyAmJiBuYW1lID09PSBTUEVDSUFMX1BST1BFUlRJRVMuVkFMVUUpIHtcbiAgICAgICAgICAgIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucmF3VmFsdWVdID0gdmFsdWU7XG4gICAgICAgICAgICBhdHRhY2hUaHJlZUNoaWxkKHBhcmVudCwgbm9kZSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICAvLyBhdHRhY2hcbiAgICAgICAgaWYgKG5hbWUgPT09IFNQRUNJQUxfUFJPUEVSVElFUy5BVFRBQ0gpIHtcbiAgICAgICAgICAgIGdldExvY2FsU3RhdGUobm9kZSkuYXR0YWNoID0gQXJyYXkuaXNBcnJheSh2YWx1ZSkgPyB2YWx1ZS5tYXAoKHYpID0+IHYudG9TdHJpbmcoKSkgOiB2YWx1ZTtcbiAgICAgICAgICAgIGF0dGFjaFRocmVlQ2hpbGQocGFyZW50LCBub2RlKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGNvbXBvdW5kID0gbm9kZS5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF07XG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIGNvbXBvdW5kPy5bTmd0Q29tcG91bmRDbGFzc0lkLnByb3BzXSAmJlxuICAgICAgICAgICAgbmFtZSBpbiBjb21wb3VuZFtOZ3RDb21wb3VuZENsYXNzSWQucHJvcHNdICYmXG4gICAgICAgICAgICAhY29tcG91bmRbTmd0Q29tcG91bmRDbGFzc0lkLmFwcGx5Rmlyc3RdXG4gICAgICAgICkge1xuICAgICAgICAgICAgdmFsdWUgPSBjb21wb3VuZFtOZ3RDb21wb3VuZENsYXNzSWQucHJvcHNdW25hbWVdO1xuICAgICAgICB9XG4gICAgICAgIGFwcGx5UHJvcHMobm9kZSwgeyBbbmFtZV06IHZhbHVlIH0pO1xuICAgIH1cblxuICAgIGlzQ29tcG91bmQobmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnJvb3QuY29tcG91bmRQcmVmaXhlcy5zb21lKChwcmVmaXgpID0+IG5hbWUuc3RhcnRzV2l0aChwcmVmaXgpKTtcbiAgICB9XG5cbiAgICBnZXQgcm9vdFNjZW5lKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5yb290LnN0b3JlLmdldCgnc2NlbmUnKTtcbiAgICB9XG5cbiAgICBnZXQgcm9vdENkcigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucm9vdC5jZHI7XG4gICAgfVxuXG4gICAgZ2V0Q2xvc2VzdFBhcmVudFdpdGhJbnN0YW5jZShub2RlOiBOZ3RSZW5kZXJlck5vZGUpOiBOZ3RSZW5kZXJlck5vZGUgfCBudWxsIHtcbiAgICAgICAgbGV0IHBhcmVudCA9IG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XTtcbiAgICAgICAgd2hpbGUgKHBhcmVudCAmJiBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gIT09ICd0aHJlZScpIHtcbiAgICAgICAgICAgIHBhcmVudCA9IHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5wb3J0YWxDb250YWluZXJdXG4gICAgICAgICAgICAgICAgPyBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucG9ydGFsQ29udGFpbmVyXVxuICAgICAgICAgICAgICAgIDogcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgIH1cblxuICAgIGdldENsb3Nlc3RQYXJlbnRXaXRoQ29tcG91bmQobm9kZTogTmd0UmVuZGVyZXJOb2RlKSB7XG4gICAgICAgIGlmIChub2RlLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kUGFyZW50XSkge1xuICAgICAgICAgICAgcmV0dXJuIG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgbGV0IHBhcmVudCA9IG5vZGUuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XTtcbiAgICAgICAgaWYgKFxuICAgICAgICAgICAgcGFyZW50ICYmXG4gICAgICAgICAgICBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21wb3VuZCcgJiZcbiAgICAgICAgICAgICFwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF1cbiAgICAgICAgKSB7XG4gICAgICAgICAgICByZXR1cm4gcGFyZW50O1xuICAgICAgICB9XG5cbiAgICAgICAgd2hpbGUgKFxuICAgICAgICAgICAgcGFyZW50ICYmXG4gICAgICAgICAgICAocGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnIHx8XG4gICAgICAgICAgICAgICAgIXBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZFBhcmVudF0gfHxcbiAgICAgICAgICAgICAgICBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gIT09ICdjb21wb3VuZCcpXG4gICAgICAgICkge1xuICAgICAgICAgICAgcGFyZW50ID0gcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnBhcmVudF07XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoIXBhcmVudCkgcmV0dXJuO1xuXG4gICAgICAgIGlmIChcbiAgICAgICAgICAgIHBhcmVudC5fX25ndF9yZW5kZXJlcl9fW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3RocmVlJyAmJlxuICAgICAgICAgICAgcGFyZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kUGFyZW50XVxuICAgICAgICApIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRQYXJlbnRdO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKCFwYXJlbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0pIHtcbiAgICAgICAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gbnVsbDtcbiAgICB9XG5cbiAgICBnZXRDcmVhdGlvblN0YXRlKCkge1xuICAgICAgICBjb25zdCBpbmplY3RlZEFyZ3MgPSB0aGlzLmZpcnN0Tm9uSW5qZWN0ZWREaXJlY3RpdmUoTmd0QXJncyk/LmFyZ3MgfHwgW107XG4gICAgICAgIGNvbnN0IHN0b3JlID0gdGhpcy50cnlHZXRQb3J0YWxTdG9yZSgpO1xuICAgICAgICByZXR1cm4geyBpbmplY3RlZEFyZ3MsIHN0b3JlIH07XG4gICAgfVxuXG4gICAgZGVzdHJveShub2RlOiBOZ3RSZW5kZXJlck5vZGUsIHBhcmVudD86IE5ndFJlbmRlcmVyTm9kZSkge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IG5vZGUuX19uZ3RfcmVuZGVyZXJfXztcbiAgICAgICAgaWYgKHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5kZXN0cm95ZWRdKSByZXR1cm47XG4gICAgICAgIGlmIChzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICd0aHJlZScpIHtcbiAgICAgICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5jb21wb3VuZF0gPSB1bmRlZmluZWQhO1xuICAgICAgICAgICAgc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLmNvbXBvdW5kUGFyZW50XSA9IHVuZGVmaW5lZCE7XG5cbiAgICAgICAgICAgIGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKG5vZGUpO1xuICAgICAgICAgICAgaWYgKGxvY2FsU3RhdGUub2JqZWN0cykge1xuICAgICAgICAgICAgICAgIGxvY2FsU3RhdGUub2JqZWN0cy52YWx1ZS5mb3JFYWNoKChvYmopID0+IHRoaXMuZGVzdHJveShvYmosIHBhcmVudCkpO1xuICAgICAgICAgICAgICAgIGxvY2FsU3RhdGUub2JqZWN0cy5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAobG9jYWxTdGF0ZS5ub25PYmplY3RzKSB7XG4gICAgICAgICAgICAgICAgbG9jYWxTdGF0ZS5ub25PYmplY3RzLnZhbHVlLmZvckVhY2goKG9iaikgPT4gdGhpcy5kZXN0cm95KG9iaiwgcGFyZW50KSk7XG4gICAgICAgICAgICAgICAgbG9jYWxTdGF0ZS5ub25PYmplY3RzLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChsb2NhbFN0YXRlLmFmdGVyVXBkYXRlKSBsb2NhbFN0YXRlLmFmdGVyVXBkYXRlLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICBpZiAobG9jYWxTdGF0ZS5hZnRlckF0dGFjaCkgbG9jYWxTdGF0ZS5hZnRlckF0dGFjaC5jb21wbGV0ZSgpO1xuXG4gICAgICAgICAgICBkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnb2JqZWN0cyddO1xuICAgICAgICAgICAgZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ25vbk9iamVjdHMnXTtcbiAgICAgICAgICAgIGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydhZGQnXTtcbiAgICAgICAgICAgIGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydyZW1vdmUnXTtcbiAgICAgICAgICAgIGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydhZnRlclVwZGF0ZSddO1xuICAgICAgICAgICAgZGVsZXRlIChsb2NhbFN0YXRlIGFzIE5ndEFueVJlY29yZClbJ2FmdGVyQXR0YWNoJ107XG4gICAgICAgICAgICBkZWxldGUgKGxvY2FsU3RhdGUgYXMgTmd0QW55UmVjb3JkKVsnc3RvcmUnXTtcbiAgICAgICAgICAgIGRlbGV0ZSAobG9jYWxTdGF0ZSBhcyBOZ3RBbnlSZWNvcmQpWydoYW5kbGVycyddO1xuXG4gICAgICAgICAgICBpZiAoIWxvY2FsU3RhdGUucHJpbWl0aXZlKSB7XG4gICAgICAgICAgICAgICAgZGVsZXRlIChub2RlIGFzIE5ndEFueVJlY29yZClbJ19fbmd0X18nXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQudHlwZV0gPT09ICdjb21tZW50Jykge1xuICAgICAgICAgICAgc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLmluamVjdG9yRmFjdG9yeV0gPSBudWxsITtcbiAgICAgICAgICAgIGRlbGV0ZSAobm9kZSBhcyBOZ3RBbnlSZWNvcmQpWydfX25ndF9yZW5kZXJlcl9hZGRfY29tbWVudF9fJ107XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMuY29tbWVudHMuZmluZEluZGV4KChjb21tZW50KSA9PiBjb21tZW50ID09PSBub2RlKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5jb21tZW50cy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC50eXBlXSA9PT0gJ3BvcnRhbCcpIHtcbiAgICAgICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5pbmplY3RvckZhY3RvcnldID0gbnVsbCE7XG4gICAgICAgICAgICBjb25zdCBpbmRleCA9IHRoaXMucG9ydGFscy5maW5kSW5kZXgoKHBvcnRhbCkgPT4gcG9ydGFsID09PSBub2RlKTtcbiAgICAgICAgICAgIGlmIChpbmRleCA+IC0xKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5wb3J0YWxzLnNwbGljZShpbmRleCwgMSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAnY29tcG91bmQnKSB7XG4gICAgICAgICAgICBzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQuY29tcG91bmRlZF0gPSB1bmRlZmluZWQhO1xuICAgICAgICAgICAgc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLmF0dHJpYnV0ZXNdID0gbnVsbCE7XG4gICAgICAgICAgICBzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQucHJvcGVydGllc10gPSBudWxsITtcbiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZU9wZXJhdGlvbihub2RlLCAnY2xlYW5VcCcpO1xuICAgICAgICAgICAgc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnF1ZXVlT3BzXS5jbGVhcigpO1xuICAgICAgICAgICAgc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnF1ZXVlT3BzXSA9IG51bGwhO1xuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5yZWZdKSB7XG4gICAgICAgICAgICAvLyBudWxsaWZ5IHJlZlxuICAgICAgICAgICAgc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLnJlZl0ubmF0aXZlRWxlbWVudCA9IG51bGw7XG4gICAgICAgICAgICBzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQucmVmXSA9IHVuZGVmaW5lZCE7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBudWxsaWZ5IHBhcmVudFxuICAgICAgICBzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQucGFyZW50XSA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgcmVuZGVyQ2hpbGQgb2Ygc3RhdGVbTmd0UmVuZGVyZXJDbGFzc0lkLmNoaWxkcmVuXSB8fCBbXSkge1xuICAgICAgICAgICAgaWYgKHJlbmRlckNoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnR5cGVdID09PSAndGhyZWUnICYmIHBhcmVudCkge1xuICAgICAgICAgICAgICAgIHJlbW92ZVRocmVlQ2hpbGQocGFyZW50LCByZW5kZXJDaGlsZCwgdHJ1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLmRlc3Ryb3kocmVuZGVyQ2hpbGQsIHBhcmVudCk7XG4gICAgICAgIH1cblxuICAgICAgICBzdGF0ZVtOZ3RSZW5kZXJlckNsYXNzSWQuY2hpbGRyZW5dID0gW107XG4gICAgICAgIHN0YXRlW05ndFJlbmRlcmVyQ2xhc3NJZC5kZXN0cm95ZWRdID0gdHJ1ZTtcbiAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgdGhpcy5yZW1vdmVDaGlsZChwYXJlbnQsIG5vZGUpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmaXJzdE5vbkluamVjdGVkRGlyZWN0aXZlKGRpcjogVHlwZTxOZ3RBcmdzPikge1xuICAgICAgICBsZXQgZGlyZWN0aXZlOiBOZ3RBcmdzIHwgdW5kZWZpbmVkO1xuXG4gICAgICAgIGxldCBpID0gdGhpcy5jb21tZW50cy5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoaSA+PSAwKSB7XG4gICAgICAgICAgICBjb25zdCBjb21tZW50ID0gdGhpcy5jb21tZW50c1tpXTtcbiAgICAgICAgICAgIGlmIChjb21tZW50Ll9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLmRlc3Ryb3llZF0pIHtcbiAgICAgICAgICAgICAgICBpLS07XG4gICAgICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBpbmplY3RvciA9IGNvbW1lbnQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSgpO1xuICAgICAgICAgICAgaWYgKCFpbmplY3Rvcikge1xuICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5qZWN0b3IuZ2V0KGRpciwgbnVsbCk7XG4gICAgICAgICAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UudmFsaWRhdGUoKSkge1xuICAgICAgICAgICAgICAgIGRpcmVjdGl2ZSA9IGluc3RhbmNlO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpLS07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gZGlyZWN0aXZlO1xuICAgIH1cblxuICAgIHRyeUdldFBvcnRhbFN0b3JlKCkge1xuICAgICAgICBsZXQgc3RvcmU6IE5ndFN0b3JlIHwgdW5kZWZpbmVkO1xuICAgICAgICAvLyB3ZSBvbmx5IGNhcmUgYWJvdXQgdGhlIHBvcnRhbCBzdGF0ZXMgYmVjYXVzZSBOZ3RTdG9yZSBvbmx5IGRpZmZlcnMgcGVyIFBvcnRhbFxuICAgICAgICBsZXQgaSA9IHRoaXMucG9ydGFscy5sZW5ndGggLSAxO1xuICAgICAgICB3aGlsZSAoaSA+PSAwKSB7XG4gICAgICAgICAgICAvLyBsb29wIHRocm91Z2ggdGhlIHBvcnRhbCBzdGF0ZSBiYWNrd2FyZHMgdG8gZmluZCB0aGUgY2xvc2VzdCBOZ3RTdG9yZVxuICAgICAgICAgICAgY29uc3QgaW5qZWN0b3IgPSB0aGlzLnBvcnRhbHNbaV0uX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQuaW5qZWN0b3JGYWN0b3J5XSgpO1xuICAgICAgICAgICAgaWYgKCFpbmplY3Rvcikge1xuICAgICAgICAgICAgICAgIGktLTtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvbnN0IGluc3RhbmNlID0gaW5qZWN0b3IuZ2V0KE5ndFN0b3JlLCBudWxsKTtcbiAgICAgICAgICAgIGlmIChpbnN0YW5jZSkge1xuICAgICAgICAgICAgICAgIHN0b3JlID0gaW5zdGFuY2U7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBpLS07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHN0b3JlIHx8IHRoaXMucm9vdC5zdG9yZTtcbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,177 @@
|
|
|
1
|
+
import { EventEmitter } from '@angular/core';
|
|
2
|
+
import { removeInteractivity } from '../events';
|
|
3
|
+
import { attach, detach } from '../utils/attach';
|
|
4
|
+
import { getLocalState, invalidateInstance } from '../utils/instance';
|
|
5
|
+
import { is } from '../utils/is';
|
|
6
|
+
export const SPECIAL_DOM_TAG = {
|
|
7
|
+
NGT_PORTAL: 'ngt-portal',
|
|
8
|
+
NGT_PRIMITIVE: 'ngt-primitive',
|
|
9
|
+
NGT_VALUE: 'ngt-value',
|
|
10
|
+
};
|
|
11
|
+
export const SPECIAL_PROPERTIES = {
|
|
12
|
+
COMPOUND: 'ngtCompound',
|
|
13
|
+
RENDER_PRIORITY: 'priority',
|
|
14
|
+
ATTACH: 'attach',
|
|
15
|
+
VALUE: 'rawValue',
|
|
16
|
+
REF: 'ref',
|
|
17
|
+
};
|
|
18
|
+
const SPECIAL_EVENTS = {
|
|
19
|
+
BEFORE_RENDER: 'beforeRender',
|
|
20
|
+
AFTER_UPDATE: 'afterUpdate',
|
|
21
|
+
AFTER_ATTACH: 'afterAttach',
|
|
22
|
+
};
|
|
23
|
+
export function attachThreeChild(parent, child) {
|
|
24
|
+
const pLS = getLocalState(parent);
|
|
25
|
+
const cLS = getLocalState(child);
|
|
26
|
+
if (!pLS || !cLS) {
|
|
27
|
+
throw new Error(`[NGT] THREE instances need to be prepared with local state.`);
|
|
28
|
+
}
|
|
29
|
+
// whether the child is added to the parent with parent.add()
|
|
30
|
+
let added = false;
|
|
31
|
+
// assign store on child if not already exist
|
|
32
|
+
if (!cLS.store) {
|
|
33
|
+
cLS.store = pLS.store;
|
|
34
|
+
}
|
|
35
|
+
if (cLS.attach) {
|
|
36
|
+
const attachProp = cLS.attach;
|
|
37
|
+
if (typeof attachProp === 'function') {
|
|
38
|
+
const attachCleanUp = attachProp(parent, child, cLS.store);
|
|
39
|
+
if (attachCleanUp)
|
|
40
|
+
cLS.previousAttach = attachCleanUp;
|
|
41
|
+
}
|
|
42
|
+
else {
|
|
43
|
+
// we skip attach none if set explicitly
|
|
44
|
+
if (attachProp[0] === 'none') {
|
|
45
|
+
invalidateInstance(child);
|
|
46
|
+
return;
|
|
47
|
+
}
|
|
48
|
+
// handle material array
|
|
49
|
+
if (attachProp[0] === 'material' &&
|
|
50
|
+
attachProp[1] &&
|
|
51
|
+
typeof Number(attachProp[1]) === 'number' &&
|
|
52
|
+
is.material(child) &&
|
|
53
|
+
!Array.isArray(parent['material'])) {
|
|
54
|
+
parent['material'] = [];
|
|
55
|
+
}
|
|
56
|
+
// attach
|
|
57
|
+
if (cLS.isRaw) {
|
|
58
|
+
cLS.parent = parent;
|
|
59
|
+
// at this point we don't have rawValue yet, so we bail and wait until the Renderer recalls attach
|
|
60
|
+
if (child.__ngt_renderer__[10 /* NgtRendererClassId.rawValue */] === undefined)
|
|
61
|
+
return;
|
|
62
|
+
attach(parent, child.__ngt_renderer__[10 /* NgtRendererClassId.rawValue */], attachProp);
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
attach(parent, child, attachProp);
|
|
66
|
+
}
|
|
67
|
+
// save value
|
|
68
|
+
cLS.previousAttach = attachProp.reduce((value, property) => value[property], parent);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
else if (is.object3D(parent) && is.object3D(child)) {
|
|
72
|
+
parent.add(child);
|
|
73
|
+
added = true;
|
|
74
|
+
}
|
|
75
|
+
pLS.add(child, added ? 'objects' : 'nonObjects');
|
|
76
|
+
cLS.parent = parent;
|
|
77
|
+
if (cLS.afterAttach) {
|
|
78
|
+
cLS.afterAttach.emit({ parent, node: child });
|
|
79
|
+
}
|
|
80
|
+
invalidateInstance(child);
|
|
81
|
+
invalidateInstance(parent);
|
|
82
|
+
}
|
|
83
|
+
export function removeThreeChild(parent, child, dispose) {
|
|
84
|
+
const pLS = getLocalState(parent);
|
|
85
|
+
const cLS = getLocalState(child);
|
|
86
|
+
// clear parent ref
|
|
87
|
+
cLS.parent = null;
|
|
88
|
+
// remove child from parent
|
|
89
|
+
if (pLS.objects) {
|
|
90
|
+
pLS.remove(child, 'objects');
|
|
91
|
+
}
|
|
92
|
+
if (pLS.nonObjects) {
|
|
93
|
+
pLS.remove(child, 'nonObjects');
|
|
94
|
+
}
|
|
95
|
+
if (cLS.attach) {
|
|
96
|
+
detach(parent, child, cLS.attach);
|
|
97
|
+
}
|
|
98
|
+
else if (is.object3D(parent) && is.object3D(child)) {
|
|
99
|
+
parent.remove(child);
|
|
100
|
+
removeInteractivity(cLS.store || pLS.store, child);
|
|
101
|
+
}
|
|
102
|
+
const isPrimitive = cLS.primitive;
|
|
103
|
+
if (!isPrimitive) {
|
|
104
|
+
removeThreeRecursive(cLS.objects?.value || [], child, !!dispose);
|
|
105
|
+
removeThreeRecursive(child.childre, child, !!dispose);
|
|
106
|
+
}
|
|
107
|
+
// dispose
|
|
108
|
+
if (child['dispose'] && !is.scene(child)) {
|
|
109
|
+
queueMicrotask(() => child['dispose']());
|
|
110
|
+
}
|
|
111
|
+
invalidateInstance(parent);
|
|
112
|
+
}
|
|
113
|
+
function removeThreeRecursive(array, parent, dispose) {
|
|
114
|
+
if (array)
|
|
115
|
+
[...array].forEach((child) => removeThreeChild(parent, child, dispose));
|
|
116
|
+
}
|
|
117
|
+
export function processThreeEvent(instance, priority, eventName, callback, cdr) {
|
|
118
|
+
const lS = getLocalState(instance);
|
|
119
|
+
if (eventName === SPECIAL_EVENTS.BEFORE_RENDER) {
|
|
120
|
+
return lS.store
|
|
121
|
+
.get('internal')
|
|
122
|
+
.subscribe((state) => callback({ state, object: instance }), priority || lS.priority || 0);
|
|
123
|
+
}
|
|
124
|
+
if (eventName === SPECIAL_EVENTS.AFTER_UPDATE || eventName === SPECIAL_EVENTS.AFTER_ATTACH) {
|
|
125
|
+
if (!lS[eventName]) {
|
|
126
|
+
lS[eventName] = new EventEmitter();
|
|
127
|
+
}
|
|
128
|
+
const sub = lS[eventName]?.subscribe(callback);
|
|
129
|
+
return sub.unsubscribe.bind(sub);
|
|
130
|
+
}
|
|
131
|
+
if (!lS.handlers) {
|
|
132
|
+
lS.handlers = {};
|
|
133
|
+
}
|
|
134
|
+
// try to get the previous handler. compound might have one, the THREE object might also have one with the same name
|
|
135
|
+
const previousHandler = lS.handlers[eventName];
|
|
136
|
+
// readjust the callback
|
|
137
|
+
const updatedCallback = (event) => {
|
|
138
|
+
if (previousHandler)
|
|
139
|
+
previousHandler(event);
|
|
140
|
+
callback(event);
|
|
141
|
+
};
|
|
142
|
+
lS.handlers = {
|
|
143
|
+
...lS.handlers,
|
|
144
|
+
[eventName]: eventToHandler(updatedCallback, cdr),
|
|
145
|
+
};
|
|
146
|
+
// increment the count everytime
|
|
147
|
+
lS.eventCount += 1;
|
|
148
|
+
// but only add the instance (target) to the interaction array (so that it is handled by the EventManager with Raycast)
|
|
149
|
+
// the first time eventCount is incremented
|
|
150
|
+
if (lS.eventCount === 1 && instance['raycast']) {
|
|
151
|
+
lS.store.get('addInteraction')(instance);
|
|
152
|
+
}
|
|
153
|
+
// clean up the event listener by removing the target from the interaction array
|
|
154
|
+
return () => {
|
|
155
|
+
const localState = getLocalState(instance);
|
|
156
|
+
if (localState && localState.eventCount) {
|
|
157
|
+
localState.store.get('removeInteraction')(instance['uuid']);
|
|
158
|
+
}
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
export function eventToHandler(callback, cdr) {
|
|
162
|
+
return (event) => {
|
|
163
|
+
callback(event);
|
|
164
|
+
cdr.detectChanges();
|
|
165
|
+
};
|
|
166
|
+
}
|
|
167
|
+
export function kebabToPascal(str) {
|
|
168
|
+
// split the string at each hyphen
|
|
169
|
+
const parts = str.split('-');
|
|
170
|
+
// map over the parts, capitalizing the first letter of each part
|
|
171
|
+
const pascalParts = parts.map((part) => {
|
|
172
|
+
return part.charAt(0).toUpperCase() + part.slice(1);
|
|
173
|
+
});
|
|
174
|
+
// join the parts together to create the final PascalCase string
|
|
175
|
+
return pascalParts.join('');
|
|
176
|
+
}
|
|
177
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUvc3JjL2xpYi9yZW5kZXJlci91dGlscy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQXFCLFlBQVksRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNoRSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFFaEQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsYUFBYSxFQUFFLGtCQUFrQixFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDdEUsT0FBTyxFQUFFLEVBQUUsRUFBRSxNQUFNLGFBQWEsQ0FBQztBQUlqQyxNQUFNLENBQUMsTUFBTSxlQUFlLEdBQUc7SUFDM0IsVUFBVSxFQUFFLFlBQVk7SUFDeEIsYUFBYSxFQUFFLGVBQWU7SUFDOUIsU0FBUyxFQUFFLFdBQVc7Q0FDaEIsQ0FBQztBQUVYLE1BQU0sQ0FBQyxNQUFNLGtCQUFrQixHQUFHO0lBQzlCLFFBQVEsRUFBRSxhQUFhO0lBQ3ZCLGVBQWUsRUFBRSxVQUFVO0lBQzNCLE1BQU0sRUFBRSxRQUFRO0lBQ2hCLEtBQUssRUFBRSxVQUFVO0lBQ2pCLEdBQUcsRUFBRSxLQUFLO0NBQ0osQ0FBQztBQUVYLE1BQU0sY0FBYyxHQUFHO0lBQ25CLGFBQWEsRUFBRSxjQUFjO0lBQzdCLFlBQVksRUFBRSxhQUFhO0lBQzNCLFlBQVksRUFBRSxhQUFhO0NBQ3JCLENBQUM7QUFFWCxNQUFNLFVBQVUsZ0JBQWdCLENBQUMsTUFBdUIsRUFBRSxLQUFzQjtJQUM1RSxNQUFNLEdBQUcsR0FBRyxhQUFhLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDbEMsTUFBTSxHQUFHLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0lBRWpDLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLEVB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QUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7U0FDL0Q7SUFDTCxDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQsTUFBTSxVQUFVLGNBQWMsQ0FBQyxRQUE4QixFQUFFLEdBQXNCO0lBQ2pGLE9BQU8sQ0FBQyxLQUE0RixFQUFFLEVBQUU7UUFDcEcsUUFBUSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQ2hCLEdBQUcsQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN4QixDQUFDLENBQUM7QUFDTixDQUFDO0FBRUQsTUFBTSxVQUFVLGFBQWEsQ0FBQyxHQUFXO0lBQ3JDLGtDQUFrQztJQUNsQyxNQUFNLEtBQUssR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBRTdCLGlFQUFpRTtJQUNqRSxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7UUFDbkMsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDeEQsQ0FBQyxDQUFDLENBQUM7SUFFSCxnRUFBZ0U7SUFDaEUsT0FBTyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2hDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3RvclJlZiwgRXZlbnRFbWl0dGVyIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyByZW1vdmVJbnRlcmFjdGl2aXR5IH0gZnJvbSAnLi4vZXZlbnRzJztcbmltcG9ydCB0eXBlIHsgTmd0RXZlbnRIYW5kbGVycywgTmd0SW5zdGFuY2VOb2RlIH0gZnJvbSAnLi4vdHlwZXMnO1xuaW1wb3J0IHsgYXR0YWNoLCBkZXRhY2ggfSBmcm9tICcuLi91dGlscy9hdHRhY2gnO1xuaW1wb3J0IHsgZ2V0TG9jYWxTdGF0ZSwgaW52YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSAnLi4vdXRpbHMvaW5zdGFuY2UnO1xuaW1wb3J0IHsgaXMgfSBmcm9tICcuLi91dGlscy9pcyc7XG5pbXBvcnQgeyBzdXBwb3J0ZWRFdmVudHMgfSBmcm9tICcuLi93ZWIvZXZlbnRzJztcbmltcG9ydCB7IE5ndFJlbmRlcmVyQ2xhc3NJZCB9IGZyb20gJy4vZW51bXMnO1xuXG5leHBvcnQgY29uc3QgU1BFQ0lBTF9ET01fVEFHID0ge1xuICAgIE5HVF9QT1JUQUw6ICduZ3QtcG9ydGFsJyxcbiAgICBOR1RfUFJJTUlUSVZFOiAnbmd0LXByaW1pdGl2ZScsXG4gICAgTkdUX1ZBTFVFOiAnbmd0LXZhbHVlJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBTUEVDSUFMX1BST1BFUlRJRVMgPSB7XG4gICAgQ09NUE9VTkQ6ICduZ3RDb21wb3VuZCcsXG4gICAgUkVOREVSX1BSSU9SSVRZOiAncHJpb3JpdHknLFxuICAgIEFUVEFDSDogJ2F0dGFjaCcsXG4gICAgVkFMVUU6ICdyYXdWYWx1ZScsXG4gICAgUkVGOiAncmVmJyxcbn0gYXMgY29uc3Q7XG5cbmNvbnN0IFNQRUNJQUxfRVZFTlRTID0ge1xuICAgIEJFRk9SRV9SRU5ERVI6ICdiZWZvcmVSZW5kZXInLFxuICAgIEFGVEVSX1VQREFURTogJ2FmdGVyVXBkYXRlJyxcbiAgICBBRlRFUl9BVFRBQ0g6ICdhZnRlckF0dGFjaCcsXG59IGFzIGNvbnN0O1xuXG5leHBvcnQgZnVuY3Rpb24gYXR0YWNoVGhyZWVDaGlsZChwYXJlbnQ6IE5ndEluc3RhbmNlTm9kZSwgY2hpbGQ6IE5ndEluc3RhbmNlTm9kZSkge1xuICAgIGNvbnN0IHBMUyA9IGdldExvY2FsU3RhdGUocGFyZW50KTtcbiAgICBjb25zdCBjTFMgPSBnZXRMb2NhbFN0YXRlKGNoaWxkKTtcblxuICAgIGlmICghcExTIHx8ICFjTFMpIHtcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBbTkdUXSBUSFJFRSBpbnN0YW5jZXMgbmVlZCB0byBiZSBwcmVwYXJlZCB3aXRoIGxvY2FsIHN0YXRlLmApO1xuICAgIH1cblxuICAgIC8vIHdoZXRoZXIgdGhlIGNoaWxkIGlzIGFkZGVkIHRvIHRoZSBwYXJlbnQgd2l0aCBwYXJlbnQuYWRkKClcbiAgICBsZXQgYWRkZWQgPSBmYWxzZTtcblxuICAgIC8vIGFzc2lnbiBzdG9yZSBvbiBjaGlsZCBpZiBub3QgYWxyZWFkeSBleGlzdFxuICAgIGlmICghY0xTLnN0b3JlKSB7XG4gICAgICAgIGNMUy5zdG9yZSA9IHBMUy5zdG9yZTtcbiAgICB9XG5cbiAgICBpZiAoY0xTLmF0dGFjaCkge1xuICAgICAgICBjb25zdCBhdHRhY2hQcm9wID0gY0xTLmF0dGFjaDtcblxuICAgICAgICBpZiAodHlwZW9mIGF0dGFjaFByb3AgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNvbnN0IGF0dGFjaENsZWFuVXAgPSBhdHRhY2hQcm9wKHBhcmVudCwgY2hpbGQsIGNMUy5zdG9yZSk7XG4gICAgICAgICAgICBpZiAoYXR0YWNoQ2xlYW5VcCkgY0xTLnByZXZpb3VzQXR0YWNoID0gYXR0YWNoQ2xlYW5VcDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIC8vIHdlIHNraXAgYXR0YWNoIG5vbmUgaWYgc2V0IGV4cGxpY2l0bHlcbiAgICAgICAgICAgIGlmIChhdHRhY2hQcm9wWzBdID09PSAnbm9uZScpIHtcbiAgICAgICAgICAgICAgICBpbnZhbGlkYXRlSW5zdGFuY2UoY2hpbGQpO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gaGFuZGxlIG1hdGVyaWFsIGFycmF5XG4gICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgYXR0YWNoUHJvcFswXSA9PT0gJ21hdGVyaWFsJyAmJlxuICAgICAgICAgICAgICAgIGF0dGFjaFByb3BbMV0gJiZcbiAgICAgICAgICAgICAgICB0eXBlb2YgTnVtYmVyKGF0dGFjaFByb3BbMV0pID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgICAgIGlzLm1hdGVyaWFsKGNoaWxkKSAmJlxuICAgICAgICAgICAgICAgICFBcnJheS5pc0FycmF5KHBhcmVudFsnbWF0ZXJpYWwnXSlcbiAgICAgICAgICAgICkge1xuICAgICAgICAgICAgICAgIHBhcmVudFsnbWF0ZXJpYWwnXSA9IFtdO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBhdHRhY2hcbiAgICAgICAgICAgIGlmIChjTFMuaXNSYXcpIHtcbiAgICAgICAgICAgICAgICBjTFMucGFyZW50ID0gcGFyZW50O1xuICAgICAgICAgICAgICAgIC8vIGF0IHRoaXMgcG9pbnQgd2UgZG9uJ3QgaGF2ZSByYXdWYWx1ZSB5ZXQsIHNvIHdlIGJhaWwgYW5kIHdhaXQgdW50aWwgdGhlIFJlbmRlcmVyIHJlY2FsbHMgYXR0YWNoXG4gICAgICAgICAgICAgICAgaWYgKGNoaWxkLl9fbmd0X3JlbmRlcmVyX19bTmd0UmVuZGVyZXJDbGFzc0lkLnJhd1ZhbHVlXSA9PT0gdW5kZWZpbmVkKSByZXR1cm47XG4gICAgICAgICAgICAgICAgYXR0YWNoKHBhcmVudCwgY2hpbGQuX19uZ3RfcmVuZGVyZXJfX1tOZ3RSZW5kZXJlckNsYXNzSWQucmF3VmFsdWVdLCBhdHRhY2hQcm9wKTtcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgYXR0YWNoKHBhcmVudCwgY2hpbGQsIGF0dGFjaFByb3ApO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gc2F2ZSB2YWx1ZVxuICAgICAgICAgICAgY0xTLnByZXZpb3VzQXR0YWNoID0gYXR0YWNoUHJvcC5yZWR1Y2UoKHZhbHVlLCBwcm9wZXJ0eSkgPT4gdmFsdWVbcHJvcGVydHldLCBwYXJlbnQpO1xuICAgICAgICB9XG4gICAgfSBlbHNlIGlmIChpcy5vYmplY3QzRChwYXJlbnQpICYmIGlzLm9iamVjdDNEKGNoaWxkKSkge1xuICAgICAgICBwYXJlbnQuYWRkKGNoaWxkKTtcbiAgICAgICAgYWRkZWQgPSB0cnVlO1xuICAgIH1cblxuICAgIHBMUy5hZGQoY2hpbGQsIGFkZGVkID8gJ29iamVjdHMnIDogJ25vbk9iamVjdHMnKTtcblxuICAgIGNMUy5wYXJlbnQgPSBwYXJlbnQ7XG5cbiAgICBpZiAoY0xTLmFmdGVyQXR0YWNoKSB7XG4gICAgICAgIGNMUy5hZnRlckF0dGFjaC5lbWl0KHsgcGFyZW50LCBub2RlOiBjaGlsZCB9KTtcbiAgICB9XG5cbiAgICBpbnZhbGlkYXRlSW5zdGFuY2UoY2hpbGQpO1xuICAgIGludmFsaWRhdGVJbnN0YW5jZShwYXJlbnQpO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcmVtb3ZlVGhyZWVDaGlsZChwYXJlbnQ6IE5ndEluc3RhbmNlTm9kZSwgY2hpbGQ6IE5ndEluc3RhbmNlTm9kZSwgZGlzcG9zZT86IGJvb2xlYW4pIHtcbiAgICBjb25zdCBwTFMgPSBnZXRMb2NhbFN0YXRlKHBhcmVudCk7XG4gICAgY29uc3QgY0xTID0gZ2V0TG9jYWxTdGF0ZShjaGlsZCk7XG5cbiAgICAvLyBjbGVhciBwYXJlbnQgcmVmXG4gICAgY0xTLnBhcmVudCA9IG51bGw7XG5cbiAgICAvLyByZW1vdmUgY2hpbGQgZnJvbSBwYXJlbnRcbiAgICBpZiAocExTLm9iamVjdHMpIHtcbiAgICAgICAgcExTLnJlbW92ZShjaGlsZCwgJ29iamVjdHMnKTtcbiAgICB9XG5cbiAgICBpZiAocExTLm5vbk9iamVjdHMpIHtcbiAgICAgICAgcExTLnJlbW92ZShjaGlsZCwgJ25vbk9iamVjdHMnKTtcbiAgICB9XG5cbiAgICBpZiAoY0xTLmF0dGFjaCkge1xuICAgICAgICBkZXRhY2gocGFyZW50LCBjaGlsZCwgY0xTLmF0dGFjaCk7XG4gICAgfSBlbHNlIGlmIChpcy5vYmplY3QzRChwYXJlbnQpICYmIGlzLm9iamVjdDNEKGNoaWxkKSkge1xuICAgICAgICBwYXJlbnQucmVtb3ZlKGNoaWxkKTtcbiAgICAgICAgcmVtb3ZlSW50ZXJhY3Rpdml0eShjTFMuc3RvcmUgfHwgcExTLnN0b3JlLCBjaGlsZCk7XG4gICAgfVxuXG4gICAgY29uc3QgaXNQcmltaXRpdmUgPSBjTFMucHJpbWl0aXZlO1xuICAgIGlmICghaXNQcmltaXRpdmUpIHtcbiAgICAgICAgcmVtb3ZlVGhyZWVSZWN1cnNpdmUoY0xTLm9iamVjdHM/LnZhbHVlIHx8IFtdLCBjaGlsZCwgISFkaXNwb3NlKTtcbiAgICAgICAgcmVtb3ZlVGhyZWVSZWN1cnNpdmUoY2hpbGQuY2hpbGRyZSwgY2hpbGQsICEhZGlzcG9zZSk7XG4gICAgfVxuXG4gICAgLy8gZGlzcG9zZVxuICAgIGlmIChjaGlsZFsnZGlzcG9zZSddICYmICFpcy5zY2VuZShjaGlsZCkpIHtcbiAgICAgICAgcXVldWVNaWNyb3Rhc2soKCkgPT4gY2hpbGRbJ2Rpc3Bvc2UnXSgpKTtcbiAgICB9XG5cbiAgICBpbnZhbGlkYXRlSW5zdGFuY2UocGFyZW50KTtcbn1cblxuZnVuY3Rpb24gcmVtb3ZlVGhyZWVSZWN1cnNpdmUoYXJyYXk6IE5ndEluc3RhbmNlTm9kZVtdLCBwYXJlbnQ6IE5ndEluc3RhbmNlTm9kZSwgZGlzcG9zZTogYm9vbGVhbikge1xuICAgIGlmIChhcnJheSkgWy4uLmFycmF5XS5mb3JFYWNoKChjaGlsZCkgPT4gcmVtb3ZlVGhyZWVDaGlsZChwYXJlbnQsIGNoaWxkLCBkaXNwb3NlKSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm9jZXNzVGhyZWVFdmVudChcbiAgICBpbnN0YW5jZTogTmd0SW5zdGFuY2VOb2RlLFxuICAgIHByaW9yaXR5OiBudW1iZXIsXG4gICAgZXZlbnROYW1lOiBzdHJpbmcsXG4gICAgY2FsbGJhY2s6IChldmVudDogYW55KSA9PiB2b2lkLFxuICAgIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWZcbik6ICgpID0+IHZvaWQge1xuICAgIGNvbnN0IGxTID0gZ2V0TG9jYWxTdGF0ZShpbnN0YW5jZSk7XG4gICAgaWYgKGV2ZW50TmFtZSA9PT0gU1BFQ0lBTF9FVkVOVFMuQkVGT1JFX1JFTkRFUikge1xuICAgICAgICByZXR1cm4gbFMuc3RvcmVcbiAgICAgICAgICAgIC5nZXQoJ2ludGVybmFsJylcbiAgICAgICAgICAgIC5zdWJzY3JpYmUoKHN0YXRlKSA9PiBjYWxsYmFjayh7IHN0YXRlLCBvYmplY3Q6IGluc3RhbmNlIH0pLCBwcmlvcml0eSB8fCBsUy5wcmlvcml0eSB8fCAwKTtcbiAgICB9XG5cbiAgICBpZiAoZXZlbnROYW1lID09PSBTUEVDSUFMX0VWRU5UUy5BRlRFUl9VUERBVEUgfHwgZXZlbnROYW1lID09PSBTUEVDSUFMX0VWRU5UUy5BRlRFUl9BVFRBQ0gpIHtcbiAgICAgICAgaWYgKCFsU1tldmVudE5hbWVdKSB7XG4gICAgICAgICAgICBsU1tldmVudE5hbWVdID0gbmV3IEV2ZW50RW1pdHRlcigpO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IHN1YiA9IGxTW2V2ZW50TmFtZV0/LnN1YnNjcmliZShjYWxsYmFjayk7XG4gICAgICAgIHJldHVybiBzdWIhLnVuc3Vic2NyaWJlLmJpbmQoc3ViKTtcbiAgICB9XG5cbiAgICBpZiAoIWxTLmhhbmRsZXJzKSB7XG4gICAgICAgIGxTLmhhbmRsZXJzID0ge307XG4gICAgfVxuXG4gICAgLy8gdHJ5IHRvIGdldCB0aGUgcHJldmlvdXMgaGFuZGxlci4gY29tcG91bmQgbWlnaHQgaGF2ZSBvbmUsIHRoZSBUSFJFRSBvYmplY3QgbWlnaHQgYWxzbyBoYXZlIG9uZSB3aXRoIHRoZSBzYW1lIG5hbWVcbiAgICBjb25zdCBwcmV2aW91c0hhbmRsZXIgPSBsUy5oYW5kbGVyc1tldmVudE5hbWUgYXMga2V5b2YgdHlwZW9mIGxTLmhhbmRsZXJzXTtcbiAgICAvLyByZWFkanVzdCB0aGUgY2FsbGJhY2tcbiAgICBjb25zdCB1cGRhdGVkQ2FsbGJhY2s6IHR5cGVvZiBjYWxsYmFjayA9IChldmVudCkgPT4ge1xuICAgICAgICBpZiAocHJldmlvdXNIYW5kbGVyKSBwcmV2aW91c0hhbmRsZXIoZXZlbnQpO1xuICAgICAgICBjYWxsYmFjayhldmVudCk7XG4gICAgfTtcblxuICAgIGxTLmhhbmRsZXJzID0ge1xuICAgICAgICAuLi5sUy5oYW5kbGVycyxcbiAgICAgICAgW2V2ZW50TmFtZV06IGV2ZW50VG9IYW5kbGVyKHVwZGF0ZWRDYWxsYmFjaywgY2RyKSxcbiAgICB9O1xuICAgIC8vIGluY3JlbWVudCB0aGUgY291bnQgZXZlcnl0aW1lXG4gICAgbFMuZXZlbnRDb3VudCArPSAxO1xuICAgIC8vIGJ1dCBvbmx5IGFkZCB0aGUgaW5zdGFuY2UgKHRhcmdldCkgdG8gdGhlIGludGVyYWN0aW9uIGFycmF5IChzbyB0aGF0IGl0IGlzIGhhbmRsZWQgYnkgdGhlIEV2ZW50TWFuYWdlciB3aXRoIFJheWNhc3QpXG4gICAgLy8gdGhlIGZpcnN0IHRpbWUgZXZlbnRDb3VudCBpcyBpbmNyZW1lbnRlZFxuICAgIGlmIChsUy5ldmVudENvdW50ID09PSAxICYmIGluc3RhbmNlWydyYXljYXN0J10pIHtcbiAgICAgICAgbFMuc3RvcmUuZ2V0KCdhZGRJbnRlcmFjdGlvbicpKGluc3RhbmNlKTtcbiAgICB9XG5cbiAgICAvLyBjbGVhbiB1cCB0aGUgZXZlbnQgbGlzdGVuZXIgYnkgcmVtb3ZpbmcgdGhlIHRhcmdldCBmcm9tIHRoZSBpbnRlcmFjdGlvbiBhcnJheVxuICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgIGNvbnN0IGxvY2FsU3RhdGUgPSBnZXRMb2NhbFN0YXRlKGluc3RhbmNlKTtcbiAgICAgICAgaWYgKGxvY2FsU3RhdGUgJiYgbG9jYWxTdGF0ZS5ldmVudENvdW50KSB7XG4gICAgICAgICAgICBsb2NhbFN0YXRlLnN0b3JlLmdldCgncmVtb3ZlSW50ZXJhY3Rpb24nKShpbnN0YW5jZVsndXVpZCddKTtcbiAgICAgICAgfVxuICAgIH07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBldmVudFRvSGFuZGxlcihjYWxsYmFjazogKGV2ZW50OiBhbnkpID0+IHZvaWQsIGNkcjogQ2hhbmdlRGV0ZWN0b3JSZWYpIHtcbiAgICByZXR1cm4gKGV2ZW50OiBQYXJhbWV0ZXJzPEV4Y2x1ZGU8Tmd0RXZlbnRIYW5kbGVyc1sodHlwZW9mIHN1cHBvcnRlZEV2ZW50cylbbnVtYmVyXV0sIHVuZGVmaW5lZD4+WzBdKSA9PiB7XG4gICAgICAgIGNhbGxiYWNrKGV2ZW50KTtcbiAgICAgICAgY2RyLmRldGVjdENoYW5nZXMoKTtcbiAgICB9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24ga2ViYWJUb1Bhc2NhbChzdHI6IHN0cmluZyk6IHN0cmluZyB7XG4gICAgLy8gc3BsaXQgdGhlIHN0cmluZyBhdCBlYWNoIGh5cGhlblxuICAgIGNvbnN0IHBhcnRzID0gc3RyLnNwbGl0KCctJyk7XG5cbiAgICAvLyBtYXAgb3ZlciB0aGUgcGFydHMsIGNhcGl0YWxpemluZyB0aGUgZmlyc3QgbGV0dGVyIG9mIGVhY2ggcGFydFxuICAgIGNvbnN0IHBhc2NhbFBhcnRzID0gcGFydHMubWFwKChwYXJ0KSA9PiB7XG4gICAgICAgIHJldHVybiBwYXJ0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgcGFydC5zbGljZSgxKTtcbiAgICB9KTtcblxuICAgIC8vIGpvaW4gdGhlIHBhcnRzIHRvZ2V0aGVyIHRvIGNyZWF0ZSB0aGUgZmluYWwgUGFzY2FsQ2FzZSBzdHJpbmdcbiAgICByZXR1cm4gcGFzY2FsUGFydHMuam9pbignJyk7XG59XG4iXX0=
|