angular-three 0.0.2 → 0.0.3
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/attributes/README.md +3 -0
- package/attributes/index.d.ts +22 -0
- package/attributes/lib/buffer-attribute/buffer-attribute.d.ts +8 -0
- package/attributes/lib/color-attribute/color-attribute.d.ts +8 -0
- package/attributes/lib/float16-buffer-attribute/float16-buffer-attribute.d.ts +8 -0
- package/attributes/lib/float32-buffer-attribute/float32-buffer-attribute.d.ts +8 -0
- package/attributes/lib/float64-buffer-attribute/float64-buffer-attribute.d.ts +8 -0
- package/attributes/lib/fog-attribute/fog-attribute.d.ts +8 -0
- package/attributes/lib/fog-exp2-attribute/fog-exp2-attribute.d.ts +8 -0
- package/attributes/lib/instanced-buffer-attribute/instanced-buffer-attribute.d.ts +8 -0
- package/attributes/lib/int16-buffer-attribute/int16-buffer-attribute.d.ts +8 -0
- package/attributes/lib/int32-buffer-attribute/int32-buffer-attribute.d.ts +8 -0
- package/attributes/lib/int8-buffer-attribute/int8-buffer-attribute.d.ts +8 -0
- package/attributes/lib/interleaved-buffer-attribute/interleaved-buffer-attribute.d.ts +8 -0
- package/attributes/lib/matrix3-attribute/matrix3-attribute.d.ts +8 -0
- package/attributes/lib/matrix4-attribute/matrix4-attribute.d.ts +8 -0
- package/attributes/lib/uint16-buffer-attribute/uint16-buffer-attribute.d.ts +8 -0
- package/attributes/lib/uint32-buffer-attribute/uint32-buffer-attribute.d.ts +8 -0
- package/attributes/lib/uint8-buffer-attribute/uint8-buffer-attribute.d.ts +8 -0
- package/attributes/lib/uint8-clamped-buffer-attribute/uint8-clamped-buffer-attribute.d.ts +8 -0
- package/attributes/lib/value-attribute/value-attribute.d.ts +8 -0
- package/attributes/lib/vector2-attribute/vector2-attribute.d.ts +8 -0
- package/attributes/lib/vector3-attribute/vector3-attribute.d.ts +8 -0
- package/attributes/lib/vector4-attribute/vector4-attribute.d.ts +8 -0
- package/audios/README.md +3 -0
- package/audios/index.d.ts +3 -0
- package/audios/lib/audio/audio.d.ts +49 -0
- package/audios/lib/audio-listener/audio-listener.d.ts +35 -0
- package/audios/lib/positional-audio/positional-audio.d.ts +49 -0
- package/cameras/README.md +3 -0
- package/cameras/index.d.ts +5 -0
- package/cameras/lib/array-camera/array-camera.d.ts +56 -0
- package/cameras/lib/cube-camera/cube-camera.d.ts +36 -0
- package/cameras/lib/orthographic-camera/orthographic-camera.d.ts +54 -0
- package/cameras/lib/perspective-camera/perspective-camera.d.ts +55 -0
- package/cameras/lib/stereo-camera/stereo-camera.d.ts +42 -0
- package/esm2020/attributes/angular-three-attributes.mjs +5 -0
- package/esm2020/attributes/index.mjs +24 -0
- package/esm2020/attributes/lib/buffer-attribute/buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/color-attribute/color-attribute.mjs +25 -0
- package/esm2020/attributes/lib/float16-buffer-attribute/float16-buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/float32-buffer-attribute/float32-buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/float64-buffer-attribute/float64-buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/fog-attribute/fog-attribute.mjs +25 -0
- package/esm2020/attributes/lib/fog-exp2-attribute/fog-exp2-attribute.mjs +25 -0
- package/esm2020/attributes/lib/instanced-buffer-attribute/instanced-buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/int16-buffer-attribute/int16-buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/int32-buffer-attribute/int32-buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/int8-buffer-attribute/int8-buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/interleaved-buffer-attribute/interleaved-buffer-attribute.mjs +29 -0
- package/esm2020/attributes/lib/matrix3-attribute/matrix3-attribute.mjs +25 -0
- package/esm2020/attributes/lib/matrix4-attribute/matrix4-attribute.mjs +25 -0
- package/esm2020/attributes/lib/uint16-buffer-attribute/uint16-buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/uint32-buffer-attribute/uint32-buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/uint8-buffer-attribute/uint8-buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/uint8-clamped-buffer-attribute/uint8-clamped-buffer-attribute.mjs +25 -0
- package/esm2020/attributes/lib/value-attribute/value-attribute.mjs +27 -0
- package/esm2020/attributes/lib/vector2-attribute/vector2-attribute.mjs +25 -0
- package/esm2020/attributes/lib/vector3-attribute/vector3-attribute.mjs +25 -0
- package/esm2020/attributes/lib/vector4-attribute/vector4-attribute.mjs +25 -0
- package/esm2020/audios/angular-three-audios.mjs +5 -0
- package/esm2020/audios/index.mjs +5 -0
- package/esm2020/audios/lib/audio/audio.mjs +68 -0
- package/esm2020/audios/lib/audio-listener/audio-listener.mjs +65 -0
- package/esm2020/audios/lib/positional-audio/positional-audio.mjs +68 -0
- package/esm2020/cameras/angular-three-cameras.mjs +5 -0
- package/esm2020/cameras/index.mjs +7 -0
- package/esm2020/cameras/lib/array-camera/array-camera.mjs +67 -0
- package/esm2020/cameras/lib/cube-camera/cube-camera.mjs +55 -0
- package/esm2020/cameras/lib/orthographic-camera/orthographic-camera.mjs +65 -0
- package/esm2020/cameras/lib/perspective-camera/perspective-camera.mjs +66 -0
- package/esm2020/cameras/lib/stereo-camera/stereo-camera.mjs +61 -0
- package/esm2020/geometries/angular-three-geometries.mjs +5 -0
- package/esm2020/geometries/index.mjs +25 -0
- package/esm2020/geometries/lib/box-geometry/box-geometry.mjs +25 -0
- package/esm2020/geometries/lib/buffer-geometry/buffer-geometry.mjs +25 -0
- package/esm2020/geometries/lib/capsule-geometry/capsule-geometry.mjs +25 -0
- package/esm2020/geometries/lib/circle-geometry/circle-geometry.mjs +25 -0
- package/esm2020/geometries/lib/cone-geometry/cone-geometry.mjs +25 -0
- package/esm2020/geometries/lib/cylinder-geometry/cylinder-geometry.mjs +25 -0
- package/esm2020/geometries/lib/dodecahedron-geometry/dodecahedron-geometry.mjs +25 -0
- package/esm2020/geometries/lib/edges-geometry/edges-geometry.mjs +25 -0
- package/esm2020/geometries/lib/extrude-geometry/extrude-geometry.mjs +25 -0
- package/esm2020/geometries/lib/icosahedron-geometry/icosahedron-geometry.mjs +25 -0
- package/esm2020/geometries/lib/instanced-buffer-geometry/instanced-buffer-geometry.mjs +25 -0
- package/esm2020/geometries/lib/lathe-geometry/lathe-geometry.mjs +25 -0
- package/esm2020/geometries/lib/octahedron-geometry/octahedron-geometry.mjs +25 -0
- package/esm2020/geometries/lib/plane-geometry/plane-geometry.mjs +25 -0
- package/esm2020/geometries/lib/polyhedron-geometry/polyhedron-geometry.mjs +25 -0
- package/esm2020/geometries/lib/ring-geometry/ring-geometry.mjs +25 -0
- package/esm2020/geometries/lib/shape-geometry/shape-geometry.mjs +25 -0
- package/esm2020/geometries/lib/sphere-geometry/sphere-geometry.mjs +25 -0
- package/esm2020/geometries/lib/tetrahedron-geometry/tetrahedron-geometry.mjs +25 -0
- package/esm2020/geometries/lib/torus-geometry/torus-geometry.mjs +25 -0
- package/esm2020/geometries/lib/torus-knot-geometry/torus-knot-geometry.mjs +25 -0
- package/esm2020/geometries/lib/tube-geometry/tube-geometry.mjs +25 -0
- package/esm2020/geometries/lib/wireframe-geometry/wireframe-geometry.mjs +25 -0
- package/esm2020/helpers/angular-three-helpers.mjs +5 -0
- package/esm2020/helpers/index.mjs +15 -0
- package/esm2020/helpers/lib/arrow-helper/arrow-helper.mjs +25 -0
- package/esm2020/helpers/lib/axes-helper/axes-helper.mjs +25 -0
- package/esm2020/helpers/lib/box-helper/box-helper.mjs +35 -0
- package/esm2020/helpers/lib/box3-helper/box3-helper.mjs +35 -0
- package/esm2020/helpers/lib/camera-helper/camera-helper.mjs +35 -0
- package/esm2020/helpers/lib/directional-light-helper/directional-light-helper.mjs +35 -0
- package/esm2020/helpers/lib/grid-helper/grid-helper.mjs +25 -0
- package/esm2020/helpers/lib/hemisphere-light-helper/hemisphere-light-helper.mjs +35 -0
- package/esm2020/helpers/lib/plane-helper/plane-helper.mjs +35 -0
- package/esm2020/helpers/lib/point-light-helper/point-light-helper.mjs +35 -0
- package/esm2020/helpers/lib/polar-grid-helper/polar-grid-helper.mjs +25 -0
- package/esm2020/helpers/lib/skeleton-helper/skeleton-helper.mjs +35 -0
- package/esm2020/helpers/lib/spot-light-helper/spot-light-helper.mjs +35 -0
- package/esm2020/index.mjs +12 -2
- package/esm2020/lib/canvas.mjs +227 -0
- package/esm2020/lib/di/resize.mjs +19 -0
- package/esm2020/lib/di/window.mjs +13 -0
- package/esm2020/lib/directives/args.mjs +30 -0
- package/esm2020/lib/events.mjs +53 -0
- package/esm2020/lib/instance.mjs +358 -0
- package/esm2020/lib/ref.mjs +15 -0
- package/esm2020/lib/services/loader.mjs +45 -0
- package/esm2020/lib/services/resize.mjs +127 -0
- package/esm2020/lib/stores/component-store.mjs +137 -0
- package/esm2020/lib/stores/store.mjs +433 -0
- package/esm2020/lib/types.mjs +2 -0
- package/esm2020/lib/utils/apply-props.mjs +135 -0
- package/esm2020/lib/utils/build-graph.mjs +15 -0
- package/esm2020/lib/utils/camera.mjs +28 -0
- package/esm2020/lib/utils/capitalize.mjs +4 -0
- package/esm2020/lib/utils/check-update.mjs +22 -0
- package/esm2020/lib/utils/events.mjs +353 -0
- package/esm2020/lib/utils/get-instance-local-state.mjs +6 -0
- package/esm2020/lib/utils/inject.mjs +18 -0
- package/esm2020/lib/utils/instance.mjs +35 -0
- package/esm2020/lib/utils/is.mjs +54 -0
- package/esm2020/lib/utils/loop.mjs +139 -0
- package/esm2020/lib/utils/make.mjs +30 -0
- package/esm2020/lib/utils/mutate.mjs +24 -0
- package/esm2020/lib/utils/proxy.mjs +99 -0
- package/esm2020/lib/utils/renderer.mjs +15 -0
- package/esm2020/lights/angular-three-lights.mjs +5 -0
- package/esm2020/lights/index.mjs +11 -0
- package/esm2020/lights/lib/ambient-light/ambient-light.mjs +68 -0
- package/esm2020/lights/lib/ambient-light-probe/ambient-light-probe.mjs +69 -0
- package/esm2020/lights/lib/directional-light/directional-light.mjs +69 -0
- package/esm2020/lights/lib/hemisphere-light/hemisphere-light.mjs +70 -0
- package/esm2020/lights/lib/hemisphere-light-probe/hemisphere-light-probe.mjs +71 -0
- package/esm2020/lights/lib/light-probe/light-probe.mjs +69 -0
- package/esm2020/lights/lib/point-light/point-light.mjs +71 -0
- package/esm2020/lights/lib/rect-area-light/rect-area-light.mjs +71 -0
- package/esm2020/lights/lib/spot-light/spot-light.mjs +74 -0
- package/esm2020/materials/angular-three-materials.mjs +5 -0
- package/esm2020/materials/index.mjs +19 -0
- package/esm2020/materials/lib/line-basic-material/line-basic-material.mjs +76 -0
- package/esm2020/materials/lib/line-dashed-material/line-dashed-material.mjs +79 -0
- package/esm2020/materials/lib/mesh-basic-material/mesh-basic-material.mjs +88 -0
- package/esm2020/materials/lib/mesh-depth-material/mesh-depth-material.mjs +79 -0
- package/esm2020/materials/lib/mesh-distance-material/mesh-distance-material.mjs +79 -0
- package/esm2020/materials/lib/mesh-lambert-material/mesh-lambert-material.mjs +99 -0
- package/esm2020/materials/lib/mesh-matcap-material/mesh-matcap-material.mjs +85 -0
- package/esm2020/materials/lib/mesh-normal-material/mesh-normal-material.mjs +82 -0
- package/esm2020/materials/lib/mesh-phong-material/mesh-phong-material.mjs +102 -0
- package/esm2020/materials/lib/mesh-physical-material/mesh-physical-material.mjs +118 -0
- package/esm2020/materials/lib/mesh-standard-material/mesh-standard-material.mjs +99 -0
- package/esm2020/materials/lib/mesh-toon-material/mesh-toon-material.mjs +95 -0
- package/esm2020/materials/lib/points-material/points-material.mjs +77 -0
- package/esm2020/materials/lib/raw-shader-material/raw-shader-material.mjs +82 -0
- package/esm2020/materials/lib/shader-material/shader-material.mjs +82 -0
- package/esm2020/materials/lib/shadow-material/shadow-material.mjs +73 -0
- package/esm2020/materials/lib/sprite-material/sprite-material.mjs +77 -0
- package/esm2020/objects/angular-three-objects.mjs +5 -0
- package/esm2020/objects/index.mjs +14 -0
- package/esm2020/objects/lib/bone/bone.mjs +54 -0
- package/esm2020/objects/lib/group/group.mjs +54 -0
- package/esm2020/objects/lib/instanced-mesh/instanced-mesh.mjs +63 -0
- package/esm2020/objects/lib/line/line.mjs +58 -0
- package/esm2020/objects/lib/line-loop/line-loop.mjs +58 -0
- package/esm2020/objects/lib/line-segments/line-segments.mjs +58 -0
- package/esm2020/objects/lib/lod/lod.mjs +57 -0
- package/esm2020/objects/lib/mesh/mesh.mjs +58 -0
- package/esm2020/objects/lib/points/points.mjs +58 -0
- package/esm2020/objects/lib/skeleton/skeleton.mjs +49 -0
- package/esm2020/objects/lib/skinned-mesh/skinned-mesh.mjs +62 -0
- package/esm2020/objects/lib/sprite/sprite.mjs +57 -0
- package/esm2020/primitives/angular-three-primitives.mjs +5 -0
- package/esm2020/primitives/index.mjs +3 -0
- package/esm2020/primitives/lib/object-primitive/object-primitive.mjs +54 -0
- package/esm2020/primitives/lib/primitive/primitive.mjs +37 -0
- package/esm2020/stats/angular-three-stats.mjs +5 -0
- package/esm2020/stats/index.mjs +2 -0
- package/esm2020/stats/lib/stats/stats.mjs +54 -0
- package/esm2020/textures/angular-three-textures.mjs +5 -0
- package/esm2020/textures/index.mjs +12 -0
- package/esm2020/textures/lib/canvas-texture/canvas-texture.mjs +25 -0
- package/esm2020/textures/lib/compressed-array-texture/compressed-array-texture.mjs +25 -0
- package/esm2020/textures/lib/compressed-texture/compressed-texture.mjs +25 -0
- package/esm2020/textures/lib/cube-texture/cube-texture.mjs +25 -0
- package/esm2020/textures/lib/data-array-texture/data-array-texture.mjs +25 -0
- package/esm2020/textures/lib/data-texture/data-texture.mjs +25 -0
- package/esm2020/textures/lib/data3-dtexture/data3-dtexture.mjs +25 -0
- package/esm2020/textures/lib/depth-texture/depth-texture.mjs +25 -0
- package/esm2020/textures/lib/framebuffer-texture/framebuffer-texture.mjs +25 -0
- package/esm2020/textures/lib/video-texture/video-texture.mjs +25 -0
- package/fesm2015/angular-three-attributes.mjs +462 -0
- package/fesm2015/angular-three-attributes.mjs.map +1 -0
- package/fesm2015/angular-three-audios.mjs +200 -0
- package/fesm2015/angular-three-audios.mjs.map +1 -0
- package/fesm2015/angular-three-cameras.mjs +304 -0
- package/fesm2015/angular-three-cameras.mjs.map +1 -0
- package/fesm2015/angular-three-geometries.mjs +475 -0
- package/fesm2015/angular-three-geometries.mjs.map +1 -0
- package/fesm2015/angular-three-helpers.mjs +365 -0
- package/fesm2015/angular-three-helpers.mjs.map +1 -0
- package/fesm2015/angular-three-lights.mjs +602 -0
- package/fesm2015/angular-three-lights.mjs.map +1 -0
- package/fesm2015/angular-three-materials.mjs +1402 -0
- package/fesm2015/angular-three-materials.mjs.map +1 -0
- package/fesm2015/angular-three-objects.mjs +641 -0
- package/fesm2015/angular-three-objects.mjs.map +1 -0
- package/fesm2015/angular-three-primitives.mjs +95 -0
- package/fesm2015/angular-three-primitives.mjs.map +1 -0
- package/fesm2015/angular-three-stats.mjs +62 -0
- package/fesm2015/angular-three-stats.mjs.map +1 -0
- package/fesm2015/angular-three-textures.mjs +215 -0
- package/fesm2015/angular-three-textures.mjs.map +1 -0
- package/fesm2015/angular-three.mjs +2327 -10
- package/fesm2015/angular-three.mjs.map +1 -1
- package/fesm2020/angular-three-attributes.mjs +462 -0
- package/fesm2020/angular-three-attributes.mjs.map +1 -0
- package/fesm2020/angular-three-audios.mjs +200 -0
- package/fesm2020/angular-three-audios.mjs.map +1 -0
- package/fesm2020/angular-three-cameras.mjs +304 -0
- package/fesm2020/angular-three-cameras.mjs.map +1 -0
- package/fesm2020/angular-three-geometries.mjs +475 -0
- package/fesm2020/angular-three-geometries.mjs.map +1 -0
- package/fesm2020/angular-three-helpers.mjs +365 -0
- package/fesm2020/angular-three-helpers.mjs.map +1 -0
- package/fesm2020/angular-three-lights.mjs +602 -0
- package/fesm2020/angular-three-lights.mjs.map +1 -0
- package/fesm2020/angular-three-materials.mjs +1402 -0
- package/fesm2020/angular-three-materials.mjs.map +1 -0
- package/fesm2020/angular-three-objects.mjs +641 -0
- package/fesm2020/angular-three-objects.mjs.map +1 -0
- package/fesm2020/angular-three-primitives.mjs +95 -0
- package/fesm2020/angular-three-primitives.mjs.map +1 -0
- package/fesm2020/angular-three-stats.mjs +62 -0
- package/fesm2020/angular-three-stats.mjs.map +1 -0
- package/fesm2020/angular-three-textures.mjs +215 -0
- package/fesm2020/angular-three-textures.mjs.map +1 -0
- package/fesm2020/angular-three.mjs +2344 -10
- package/fesm2020/angular-three.mjs.map +1 -1
- package/geometries/README.md +3 -0
- package/geometries/index.d.ts +23 -0
- package/geometries/lib/box-geometry/box-geometry.d.ts +8 -0
- package/geometries/lib/buffer-geometry/buffer-geometry.d.ts +8 -0
- package/geometries/lib/capsule-geometry/capsule-geometry.d.ts +8 -0
- package/geometries/lib/circle-geometry/circle-geometry.d.ts +8 -0
- package/geometries/lib/cone-geometry/cone-geometry.d.ts +8 -0
- package/geometries/lib/cylinder-geometry/cylinder-geometry.d.ts +8 -0
- package/geometries/lib/dodecahedron-geometry/dodecahedron-geometry.d.ts +8 -0
- package/geometries/lib/edges-geometry/edges-geometry.d.ts +8 -0
- package/geometries/lib/extrude-geometry/extrude-geometry.d.ts +8 -0
- package/geometries/lib/icosahedron-geometry/icosahedron-geometry.d.ts +8 -0
- package/geometries/lib/instanced-buffer-geometry/instanced-buffer-geometry.d.ts +8 -0
- package/geometries/lib/lathe-geometry/lathe-geometry.d.ts +8 -0
- package/geometries/lib/octahedron-geometry/octahedron-geometry.d.ts +8 -0
- package/geometries/lib/plane-geometry/plane-geometry.d.ts +8 -0
- package/geometries/lib/polyhedron-geometry/polyhedron-geometry.d.ts +8 -0
- package/geometries/lib/ring-geometry/ring-geometry.d.ts +8 -0
- package/geometries/lib/shape-geometry/shape-geometry.d.ts +8 -0
- package/geometries/lib/sphere-geometry/sphere-geometry.d.ts +8 -0
- package/geometries/lib/tetrahedron-geometry/tetrahedron-geometry.d.ts +8 -0
- package/geometries/lib/torus-geometry/torus-geometry.d.ts +8 -0
- package/geometries/lib/torus-knot-geometry/torus-knot-geometry.d.ts +8 -0
- package/geometries/lib/tube-geometry/tube-geometry.d.ts +8 -0
- package/geometries/lib/wireframe-geometry/wireframe-geometry.d.ts +8 -0
- package/helpers/README.md +3 -0
- package/helpers/index.d.ts +13 -0
- package/helpers/lib/arrow-helper/arrow-helper.d.ts +8 -0
- package/helpers/lib/axes-helper/axes-helper.d.ts +8 -0
- package/helpers/lib/box-helper/box-helper.d.ts +8 -0
- package/helpers/lib/box3-helper/box3-helper.d.ts +8 -0
- package/helpers/lib/camera-helper/camera-helper.d.ts +8 -0
- package/helpers/lib/directional-light-helper/directional-light-helper.d.ts +8 -0
- package/helpers/lib/grid-helper/grid-helper.d.ts +8 -0
- package/helpers/lib/hemisphere-light-helper/hemisphere-light-helper.d.ts +8 -0
- package/helpers/lib/plane-helper/plane-helper.d.ts +8 -0
- package/helpers/lib/point-light-helper/point-light-helper.d.ts +8 -0
- package/helpers/lib/polar-grid-helper/polar-grid-helper.d.ts +8 -0
- package/helpers/lib/skeleton-helper/skeleton-helper.d.ts +8 -0
- package/helpers/lib/spot-light-helper/spot-light-helper.d.ts +8 -0
- package/index.d.ts +11 -1
- package/lib/canvas.d.ts +46 -0
- package/lib/di/resize.d.ts +12 -0
- package/lib/di/window.d.ts +1 -0
- package/lib/directives/args.d.ts +19 -0
- package/lib/events.d.ts +2 -0
- package/lib/instance.d.ts +81 -0
- package/lib/ref.d.ts +5 -0
- package/lib/services/loader.d.ts +11 -0
- package/lib/services/resize.d.ts +19 -0
- package/lib/stores/component-store.d.ts +69 -0
- package/lib/stores/store.d.ts +32 -0
- package/lib/types.d.ts +358 -0
- package/lib/utils/apply-props.d.ts +6 -0
- package/lib/utils/build-graph.d.ts +3 -0
- package/lib/utils/camera.d.ts +4 -0
- package/lib/utils/capitalize.d.ts +1 -0
- package/lib/utils/check-update.d.ts +2 -0
- package/lib/utils/events.d.ts +6 -0
- package/lib/utils/get-instance-local-state.d.ts +2 -0
- package/lib/utils/inject.d.ts +9 -0
- package/lib/utils/instance.d.ts +4 -0
- package/lib/utils/is.d.ts +21 -0
- package/lib/utils/loop.d.ts +32 -0
- package/lib/utils/make.d.ts +4 -0
- package/lib/utils/mutate.d.ts +2 -0
- package/lib/utils/proxy.d.ts +7 -0
- package/lib/utils/renderer.d.ts +3 -0
- package/lights/README.md +3 -0
- package/lights/index.d.ts +9 -0
- package/lights/lib/ambient-light/ambient-light.d.ts +49 -0
- package/lights/lib/ambient-light-probe/ambient-light-probe.d.ts +50 -0
- package/lights/lib/directional-light/directional-light.d.ts +50 -0
- package/lights/lib/hemisphere-light/hemisphere-light.d.ts +51 -0
- package/lights/lib/hemisphere-light-probe/hemisphere-light-probe.d.ts +52 -0
- package/lights/lib/light-probe/light-probe.d.ts +50 -0
- package/lights/lib/point-light/point-light.d.ts +52 -0
- package/lights/lib/rect-area-light/rect-area-light.d.ts +52 -0
- package/lights/lib/spot-light/spot-light.d.ts +55 -0
- package/materials/README.md +3 -0
- package/materials/index.d.ts +17 -0
- package/materials/lib/line-basic-material/line-basic-material.d.ts +55 -0
- package/materials/lib/line-dashed-material/line-dashed-material.d.ts +58 -0
- package/materials/lib/mesh-basic-material/mesh-basic-material.d.ts +67 -0
- package/materials/lib/mesh-depth-material/mesh-depth-material.d.ts +58 -0
- package/materials/lib/mesh-distance-material/mesh-distance-material.d.ts +58 -0
- package/materials/lib/mesh-lambert-material/mesh-lambert-material.d.ts +78 -0
- package/materials/lib/mesh-matcap-material/mesh-matcap-material.d.ts +64 -0
- package/materials/lib/mesh-normal-material/mesh-normal-material.d.ts +61 -0
- package/materials/lib/mesh-phong-material/mesh-phong-material.d.ts +81 -0
- package/materials/lib/mesh-physical-material/mesh-physical-material.d.ts +97 -0
- package/materials/lib/mesh-standard-material/mesh-standard-material.d.ts +78 -0
- package/materials/lib/mesh-toon-material/mesh-toon-material.d.ts +74 -0
- package/materials/lib/points-material/points-material.d.ts +56 -0
- package/materials/lib/raw-shader-material/raw-shader-material.d.ts +68 -0
- package/materials/lib/shader-material/shader-material.d.ts +68 -0
- package/materials/lib/shadow-material/shadow-material.d.ts +52 -0
- package/materials/lib/sprite-material/sprite-material.d.ts +56 -0
- package/objects/README.md +3 -0
- package/objects/index.d.ts +12 -0
- package/objects/lib/bone/bone.d.ts +35 -0
- package/objects/lib/group/group.d.ts +35 -0
- package/objects/lib/instanced-mesh/instanced-mesh.d.ts +44 -0
- package/objects/lib/line/line.d.ts +41 -0
- package/objects/lib/line-loop/line-loop.d.ts +41 -0
- package/objects/lib/line-segments/line-segments.d.ts +41 -0
- package/objects/lib/lod/lod.d.ts +41 -0
- package/objects/lib/mesh/mesh.d.ts +41 -0
- package/objects/lib/points/points.d.ts +41 -0
- package/objects/lib/skeleton/skeleton.d.ts +17 -0
- package/objects/lib/skinned-mesh/skinned-mesh.d.ts +45 -0
- package/objects/lib/sprite/sprite.d.ts +38 -0
- package/package.json +93 -2
- package/primitives/README.md +3 -0
- package/primitives/index.d.ts +2 -0
- package/primitives/lib/object-primitive/object-primitive.d.ts +35 -0
- package/primitives/lib/primitive/primitive.d.ts +10 -0
- package/schematics/src/generators/init/generator.d.ts +1 -1
- package/schematics/src/generators/init/generator.js +4 -4
- package/schematics/src/generators/init/generator.js.map +1 -1
- package/stats/README.md +3 -0
- package/stats/index.d.ts +1 -0
- package/stats/lib/stats/stats.d.ts +16 -0
- package/textures/README.md +3 -0
- package/textures/index.d.ts +10 -0
- package/textures/lib/canvas-texture/canvas-texture.d.ts +8 -0
- package/textures/lib/compressed-array-texture/compressed-array-texture.d.ts +8 -0
- package/textures/lib/compressed-texture/compressed-texture.d.ts +8 -0
- package/textures/lib/cube-texture/cube-texture.d.ts +8 -0
- package/textures/lib/data-array-texture/data-array-texture.d.ts +8 -0
- package/textures/lib/data-texture/data-texture.d.ts +8 -0
- package/textures/lib/data3-dtexture/data3-dtexture.d.ts +8 -0
- package/textures/lib/depth-texture/depth-texture.d.ts +8 -0
- package/textures/lib/framebuffer-texture/framebuffer-texture.d.ts +8 -0
- package/textures/lib/video-texture/video-texture.d.ts +8 -0
- package/esm2020/lib/angular-three.module.mjs +0 -15
- package/lib/angular-three.module.d.ts +0 -7
|
@@ -0,0 +1,358 @@
|
|
|
1
|
+
import { Directive, EventEmitter, inject, InjectionToken, Input, NgZone, Output, } from '@angular/core';
|
|
2
|
+
import { filter, tap } from 'rxjs';
|
|
3
|
+
import { NgtRef } from './ref';
|
|
4
|
+
import { NgtComponentStore, tapEffect } from './stores/component-store';
|
|
5
|
+
import { NgtStore } from './stores/store';
|
|
6
|
+
import { applyProps } from './utils/apply-props';
|
|
7
|
+
import { removeInteractivity } from './utils/events';
|
|
8
|
+
import { getInstanceLocalState } from './utils/get-instance-local-state';
|
|
9
|
+
import { invalidateInstance } from './utils/instance';
|
|
10
|
+
import { is } from './utils/is';
|
|
11
|
+
import { mutate } from './utils/mutate';
|
|
12
|
+
import * as i0 from "@angular/core";
|
|
13
|
+
export const NGT_PROXY_INSTANCE = Symbol.for('__ngt__proxy__instance__');
|
|
14
|
+
export const NGT_INSTANCE_REF_FACTORY = new InjectionToken('NgtInstance[instanceRef] factory');
|
|
15
|
+
export function provideInstanceRef(ctor, factory) {
|
|
16
|
+
return {
|
|
17
|
+
provide: NGT_INSTANCE_REF_FACTORY,
|
|
18
|
+
useFactory: (instance) => {
|
|
19
|
+
if (factory) {
|
|
20
|
+
return () => factory(instance);
|
|
21
|
+
}
|
|
22
|
+
return () => instance['instanceRef'] || instance['instance']['instanceRef'];
|
|
23
|
+
},
|
|
24
|
+
deps: [ctor],
|
|
25
|
+
};
|
|
26
|
+
}
|
|
27
|
+
export function injectInstanceRef(options = {}) {
|
|
28
|
+
return inject(NGT_INSTANCE_REF_FACTORY, options);
|
|
29
|
+
}
|
|
30
|
+
export function injectInstance(options = {}) {
|
|
31
|
+
return inject(NgtInstance, options);
|
|
32
|
+
}
|
|
33
|
+
const supportedEvents = [
|
|
34
|
+
'click',
|
|
35
|
+
'contextmenu',
|
|
36
|
+
'dblclick',
|
|
37
|
+
'pointerup',
|
|
38
|
+
'pointerdown',
|
|
39
|
+
'pointerover',
|
|
40
|
+
'pointerout',
|
|
41
|
+
'pointerenter',
|
|
42
|
+
'pointerleave',
|
|
43
|
+
'pointermove',
|
|
44
|
+
'pointermissed',
|
|
45
|
+
'pointercancel',
|
|
46
|
+
'wheel',
|
|
47
|
+
];
|
|
48
|
+
export class NgtInstance extends NgtComponentStore {
|
|
49
|
+
constructor() {
|
|
50
|
+
super(...arguments);
|
|
51
|
+
this.priority = 0;
|
|
52
|
+
this.click = new EventEmitter();
|
|
53
|
+
this.contextmenu = new EventEmitter();
|
|
54
|
+
this.dblclick = new EventEmitter();
|
|
55
|
+
this.pointerup = new EventEmitter();
|
|
56
|
+
this.pointerdown = new EventEmitter();
|
|
57
|
+
this.pointerover = new EventEmitter();
|
|
58
|
+
this.pointerout = new EventEmitter();
|
|
59
|
+
this.pointerenter = new EventEmitter();
|
|
60
|
+
this.pointerleave = new EventEmitter();
|
|
61
|
+
this.pointermove = new EventEmitter();
|
|
62
|
+
this.pointermissed = new EventEmitter();
|
|
63
|
+
this.pointercancel = new EventEmitter();
|
|
64
|
+
this.wheel = new EventEmitter();
|
|
65
|
+
this.zone = inject(NgZone);
|
|
66
|
+
this.store = inject(NgtStore);
|
|
67
|
+
this.parentRef = injectInstanceRef({ skipSelf: true, optional: true });
|
|
68
|
+
this._isRaw = false;
|
|
69
|
+
this.hasEmittedAlready = false;
|
|
70
|
+
this.instanceReady = this.effect(tapEffect(() => {
|
|
71
|
+
this.handleEvents();
|
|
72
|
+
let attachToParentSubscription;
|
|
73
|
+
if (this.parentRef) {
|
|
74
|
+
attachToParentSubscription = this.attachToParent(this.parent.pipe(filter((parent) => !!parent)));
|
|
75
|
+
}
|
|
76
|
+
let beforeRenderCleanUp;
|
|
77
|
+
if (this.beforeRender && is.object3d(this.instanceValue) && is.object3d(this.proxyInstance)) {
|
|
78
|
+
beforeRenderCleanUp = this.store
|
|
79
|
+
.read((s) => s.internal)
|
|
80
|
+
.subscribe((state, object) => this.beforeRender(state, object), this.priority, this.store.read, this.proxyInstance);
|
|
81
|
+
}
|
|
82
|
+
if (this.readyCallback)
|
|
83
|
+
this.readyCallback(this.instanceValue);
|
|
84
|
+
return () => {
|
|
85
|
+
beforeRenderCleanUp?.();
|
|
86
|
+
attachToParentSubscription?.unsubscribe();
|
|
87
|
+
};
|
|
88
|
+
}));
|
|
89
|
+
this.handleEvents = this.effect(tapEffect(() => {
|
|
90
|
+
if (this.instanceValue && is.object3d(this.instanceValue)) {
|
|
91
|
+
const observedEvents = supportedEvents.reduce((result, event) => {
|
|
92
|
+
const controllerEvent = this[event].observed ? this[event] : null;
|
|
93
|
+
if (controllerEvent) {
|
|
94
|
+
result.handlers[event] = this.eventNameToHandler(controllerEvent);
|
|
95
|
+
result.eventCount += 1;
|
|
96
|
+
}
|
|
97
|
+
return result;
|
|
98
|
+
}, { handlers: {}, eventCount: 0 });
|
|
99
|
+
// patch __ngt__ with events
|
|
100
|
+
applyProps(this.__ngt__, observedEvents);
|
|
101
|
+
// add as an interaction if there are events observed
|
|
102
|
+
if (observedEvents.eventCount > 0) {
|
|
103
|
+
getInstanceLocalState(this.instanceValue)?.rootFactory().addInteraction(this.instanceValue);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
return () => {
|
|
107
|
+
if (is.object3d(this.instanceValue) && this.__ngt__.eventCount > 0) {
|
|
108
|
+
getInstanceLocalState(this.instanceValue)?.rootFactory().removeInteraction(this.instanceValue.uuid);
|
|
109
|
+
}
|
|
110
|
+
};
|
|
111
|
+
}));
|
|
112
|
+
this.attachToParent = this.effect(tap(() => {
|
|
113
|
+
const attach = this.read((s) => s.attach);
|
|
114
|
+
let parentInstanceRef = this.__ngt__?.parentRef;
|
|
115
|
+
// if no parentInstance, try re-run the factory due to late init
|
|
116
|
+
if (!parentInstanceRef || !parentInstanceRef.value) {
|
|
117
|
+
// return early if failed to retrieve
|
|
118
|
+
if (!this.parent?.value)
|
|
119
|
+
return;
|
|
120
|
+
// reassign on instance internal state
|
|
121
|
+
if (this.__ngt__) {
|
|
122
|
+
this.__ngt__.parentRef = this.parent;
|
|
123
|
+
}
|
|
124
|
+
parentInstanceRef = this.parent;
|
|
125
|
+
}
|
|
126
|
+
if (typeof attach === 'function') {
|
|
127
|
+
const attachCleanUp = attach(parentInstanceRef, this.instanceRef, this.store.read);
|
|
128
|
+
if (attachCleanUp) {
|
|
129
|
+
this.__ngt__.attach = attachCleanUp;
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
else {
|
|
133
|
+
const propertyToAttach = [...attach];
|
|
134
|
+
// if propertyToAttach is empty
|
|
135
|
+
if (propertyToAttach.length === 0) {
|
|
136
|
+
// this might be the case where we are attaching an object3D to the parent object3D
|
|
137
|
+
if (is.object3d(this.instanceValue) &&
|
|
138
|
+
is.object3d(this.proxyInstance) &&
|
|
139
|
+
is.object3d(this.parent?.value)) {
|
|
140
|
+
this.parent?.value.add(this.proxyInstance);
|
|
141
|
+
}
|
|
142
|
+
}
|
|
143
|
+
else {
|
|
144
|
+
// array material handling
|
|
145
|
+
if (propertyToAttach[0] === 'material' &&
|
|
146
|
+
propertyToAttach[1] &&
|
|
147
|
+
typeof Number(propertyToAttach[1]) === 'number' &&
|
|
148
|
+
is.material(this.instanceValue)) {
|
|
149
|
+
if (!Array.isArray(parentInstanceRef.value.material)) {
|
|
150
|
+
parentInstanceRef.value.material = [];
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
// retrieve the current value on the parentInstance, so we can reset it later
|
|
154
|
+
if (this.__ngt__) {
|
|
155
|
+
this.__ngt__.attachValue = propertyToAttach.reduce((value, property) => value[property], parentInstanceRef.value);
|
|
156
|
+
}
|
|
157
|
+
// attach the instance value on the parent
|
|
158
|
+
mutate(parentInstanceRef.value, this.proxyInstance, propertyToAttach);
|
|
159
|
+
}
|
|
160
|
+
// validate on the instance
|
|
161
|
+
invalidateInstance(this.instanceValue);
|
|
162
|
+
// validate on the parent
|
|
163
|
+
if (getInstanceLocalState(parentInstanceRef.value)) {
|
|
164
|
+
invalidateInstance(parentInstanceRef.value);
|
|
165
|
+
}
|
|
166
|
+
// save the attach
|
|
167
|
+
if (this.__ngt__) {
|
|
168
|
+
this.__ngt__.attach = propertyToAttach;
|
|
169
|
+
}
|
|
170
|
+
this.write({ attach: propertyToAttach });
|
|
171
|
+
}
|
|
172
|
+
}));
|
|
173
|
+
}
|
|
174
|
+
set ref(instance) {
|
|
175
|
+
this.write({ instanceRef: is.ref(instance) ? instance : new NgtRef(instance) });
|
|
176
|
+
}
|
|
177
|
+
set skipWrapper(skipWrapper) {
|
|
178
|
+
this.write({ skipWrapper });
|
|
179
|
+
this.write({ skipWrapperExplicit: true });
|
|
180
|
+
}
|
|
181
|
+
set skipInit(skipInit) {
|
|
182
|
+
this.write({ skipInit });
|
|
183
|
+
this.write({ skipInitExplicit: true });
|
|
184
|
+
}
|
|
185
|
+
set noAttach(noAttach) {
|
|
186
|
+
this.write({ noAttach });
|
|
187
|
+
this.write({ noAttachExplicit: true });
|
|
188
|
+
}
|
|
189
|
+
set attach(value) {
|
|
190
|
+
if (value) {
|
|
191
|
+
const attach = typeof value === 'function'
|
|
192
|
+
? value
|
|
193
|
+
: Array.isArray(value)
|
|
194
|
+
? value.map((item) => (typeof item === 'number' ? item.toString() : item))
|
|
195
|
+
: [value];
|
|
196
|
+
this.write({ attach, attachExplicit: true });
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
set isRaw(val) {
|
|
200
|
+
this._isRaw = val;
|
|
201
|
+
}
|
|
202
|
+
initialize() {
|
|
203
|
+
super.initialize();
|
|
204
|
+
this.write({
|
|
205
|
+
instanceRef: new NgtRef(null),
|
|
206
|
+
attach: [],
|
|
207
|
+
noAttach: false,
|
|
208
|
+
skipWrapper: false,
|
|
209
|
+
skipInit: false,
|
|
210
|
+
});
|
|
211
|
+
}
|
|
212
|
+
ngOnInit() {
|
|
213
|
+
this.zone.runOutsideAngular(() => {
|
|
214
|
+
this.store.onReady(() => {
|
|
215
|
+
this.instanceReady(this.instanceRef.pipe(filter((instance) => !!instance)));
|
|
216
|
+
});
|
|
217
|
+
});
|
|
218
|
+
}
|
|
219
|
+
get instanceRef() {
|
|
220
|
+
return this.read((s) => s.instanceRef);
|
|
221
|
+
}
|
|
222
|
+
get instanceValue() {
|
|
223
|
+
if (!this.instanceRef.value)
|
|
224
|
+
return this.instanceRef.value;
|
|
225
|
+
return this._isRaw ? this.instanceRef.value?.valueOf() : this.instanceRef.value;
|
|
226
|
+
}
|
|
227
|
+
get proxyInstance() {
|
|
228
|
+
return this.instanceValue?.[NGT_PROXY_INSTANCE];
|
|
229
|
+
}
|
|
230
|
+
get __ngt__() {
|
|
231
|
+
return getInstanceLocalState(this._isRaw ? this.instanceRef.value : this.instanceValue);
|
|
232
|
+
}
|
|
233
|
+
get parent() {
|
|
234
|
+
return this.parentRef?.();
|
|
235
|
+
}
|
|
236
|
+
ngOnDestroy() {
|
|
237
|
+
this.zone.runOutsideAngular(() => {
|
|
238
|
+
this.destroy();
|
|
239
|
+
});
|
|
240
|
+
super.ngOnDestroy();
|
|
241
|
+
}
|
|
242
|
+
destroy() {
|
|
243
|
+
if (this.instanceValue) {
|
|
244
|
+
if (is.object3d(this.instanceValue)) {
|
|
245
|
+
const parentInstance = this.parent;
|
|
246
|
+
if (parentInstance && is.object3d(parentInstance.value)) {
|
|
247
|
+
removeInteractivity(this.__ngt__.stateFactory.bind(this.__ngt__), this.instanceValue);
|
|
248
|
+
parentInstance.value.remove(this.instanceValue);
|
|
249
|
+
invalidateInstance(parentInstance.value);
|
|
250
|
+
}
|
|
251
|
+
if (this.instanceValue.clear != null) {
|
|
252
|
+
this.instanceValue.clear();
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
if (this.__ngt__) {
|
|
257
|
+
// non-scene objects
|
|
258
|
+
const previousAttach = this.__ngt__.attach;
|
|
259
|
+
if (previousAttach != null) {
|
|
260
|
+
if (typeof previousAttach === 'function') {
|
|
261
|
+
previousAttach();
|
|
262
|
+
}
|
|
263
|
+
else {
|
|
264
|
+
const previousAttachValue = this.__ngt__.attachValue;
|
|
265
|
+
if (this.__ngt__.parentRef && this.__ngt__.parentRef.value) {
|
|
266
|
+
mutate(this.__ngt__.parentRef.value, previousAttachValue, previousAttach);
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
if (this.__ngt__.parentRef && this.__ngt__.parentRef.value) {
|
|
270
|
+
invalidateInstance(this.__ngt__.parentRef.value);
|
|
271
|
+
}
|
|
272
|
+
}
|
|
273
|
+
}
|
|
274
|
+
}
|
|
275
|
+
const dispose = this.instanceValue['dispose'];
|
|
276
|
+
if (dispose && typeof dispose === 'function') {
|
|
277
|
+
dispose.apply(this.instanceValue);
|
|
278
|
+
}
|
|
279
|
+
}
|
|
280
|
+
this.write({ attach: [] });
|
|
281
|
+
this.instanceRef.complete();
|
|
282
|
+
}
|
|
283
|
+
eventNameToHandler(controllerEvent) {
|
|
284
|
+
return (event) => {
|
|
285
|
+
// go back into Angular Zone so that state updates on these events trigger CD
|
|
286
|
+
this.zone.run(() => {
|
|
287
|
+
controllerEvent.emit(event);
|
|
288
|
+
});
|
|
289
|
+
};
|
|
290
|
+
}
|
|
291
|
+
}
|
|
292
|
+
NgtInstance.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtInstance, deps: null, target: i0.ɵɵFactoryTarget.Directive });
|
|
293
|
+
NgtInstance.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "15.0.0", type: NgtInstance, isStandalone: true, selector: "[ngtInstance]", inputs: { ref: "ref", skipWrapper: "skipWrapper", skipInit: "skipInit", noAttach: "noAttach", attach: "attach", priority: "priority", beforeRender: "beforeRender", readyCallback: "readyCallback", updateCallback: "updateCallback" }, outputs: { click: "click", contextmenu: "contextmenu", dblclick: "dblclick", pointerup: "pointerup", pointerdown: "pointerdown", pointerover: "pointerover", pointerout: "pointerout", pointerenter: "pointerenter", pointerleave: "pointerleave", pointermove: "pointermove", pointermissed: "pointermissed", pointercancel: "pointercancel", wheel: "wheel" }, exportAs: ["ngtInstance"], usesInheritance: true, ngImport: i0 });
|
|
294
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtInstance, decorators: [{
|
|
295
|
+
type: Directive,
|
|
296
|
+
args: [{
|
|
297
|
+
selector: '[ngtInstance]',
|
|
298
|
+
exportAs: 'ngtInstance',
|
|
299
|
+
standalone: true,
|
|
300
|
+
}]
|
|
301
|
+
}], propDecorators: { ref: [{
|
|
302
|
+
type: Input
|
|
303
|
+
}], skipWrapper: [{
|
|
304
|
+
type: Input
|
|
305
|
+
}], skipInit: [{
|
|
306
|
+
type: Input
|
|
307
|
+
}], noAttach: [{
|
|
308
|
+
type: Input
|
|
309
|
+
}], attach: [{
|
|
310
|
+
type: Input
|
|
311
|
+
}], priority: [{
|
|
312
|
+
type: Input
|
|
313
|
+
}], beforeRender: [{
|
|
314
|
+
type: Input
|
|
315
|
+
}], readyCallback: [{
|
|
316
|
+
type: Input
|
|
317
|
+
}], updateCallback: [{
|
|
318
|
+
type: Input
|
|
319
|
+
}], click: [{
|
|
320
|
+
type: Output
|
|
321
|
+
}], contextmenu: [{
|
|
322
|
+
type: Output
|
|
323
|
+
}], dblclick: [{
|
|
324
|
+
type: Output
|
|
325
|
+
}], pointerup: [{
|
|
326
|
+
type: Output
|
|
327
|
+
}], pointerdown: [{
|
|
328
|
+
type: Output
|
|
329
|
+
}], pointerover: [{
|
|
330
|
+
type: Output
|
|
331
|
+
}], pointerout: [{
|
|
332
|
+
type: Output
|
|
333
|
+
}], pointerenter: [{
|
|
334
|
+
type: Output
|
|
335
|
+
}], pointerleave: [{
|
|
336
|
+
type: Output
|
|
337
|
+
}], pointermove: [{
|
|
338
|
+
type: Output
|
|
339
|
+
}], pointermissed: [{
|
|
340
|
+
type: Output
|
|
341
|
+
}], pointercancel: [{
|
|
342
|
+
type: Output
|
|
343
|
+
}], wheel: [{
|
|
344
|
+
type: Output
|
|
345
|
+
}] } });
|
|
346
|
+
export const NGT_INSTANCE_INPUTS = [
|
|
347
|
+
'ref',
|
|
348
|
+
'attach',
|
|
349
|
+
'skipWrapper',
|
|
350
|
+
'skipInit',
|
|
351
|
+
'noAttach',
|
|
352
|
+
'beforeRender',
|
|
353
|
+
'priority',
|
|
354
|
+
'updateCallback',
|
|
355
|
+
'readyCallback',
|
|
356
|
+
];
|
|
357
|
+
export const NGT_INSTANCE_OUTPUTS = [...supportedEvents];
|
|
358
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdGFuY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9hbmd1bGFyLXRocmVlL3NyYy9saWIvaW5zdGFuY2UudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNILFNBQVMsRUFDVCxZQUFZLEVBQ1osTUFBTSxFQUNOLGNBQWMsRUFFZCxLQUFLLEVBQ0wsTUFBTSxFQUdOLE1BQU0sR0FDVCxNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsTUFBTSxFQUFnQixHQUFHLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFDakQsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLE1BQU0sMEJBQTBCLENBQUM7QUFDeEUsT0FBTyxFQUFFLFFBQVEsRUFBRSxNQUFNLGdCQUFnQixDQUFDO0FBWTFDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUNqRCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUNyRCxPQUFPLEVBQUUscUJBQXFCLEVBQUUsTUFBTSxrQ0FBa0MsQ0FBQztBQUN6RSxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsRUFBRSxFQUFFLE1BQU0sWUFBWSxDQUFDO0FBQ2hDLE9BQU8sRUFBRSxNQUFNLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFFeEMsTUFBTSxDQUFDLE1BQU0sa0JBQWtCLEdBQUcsTUFBTSxDQUFDLEdBQUcsQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBRXpFLE1BQU0sQ0FBQyxNQUFNLHdCQUF3QixHQUFHLElBQUksY0FBYyxDQUF5QixrQ0FBa0MsQ0FBQyxDQUFDO0FBQ3ZILE1BQU0sVUFBVSxrQkFBa0IsQ0FHaEMsSUFBVyxFQUFFLE9BQW1EO0lBQzlELE9BQU87UUFDSCxPQUFP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QUFNO2dCQUNHLFdBQVc7c0JBQXBCLE1BQU07Z0JBQ0csV0FBVztzQkFBcEIsTUFBTTtnQkFDRyxVQUFVO3NCQUFuQixNQUFNO2dCQUNHLFlBQVk7c0JBQXJCLE1BQU07Z0JBQ0csWUFBWTtzQkFBckIsTUFBTTtnQkFDRyxXQUFXO3NCQUFwQixNQUFNO2dCQUNHLGFBQWE7c0JBQXRCLE1BQU07Z0JBQ0csYUFBYTtzQkFBdEIsTUFBTTtnQkFDRyxLQUFLO3NCQUFkLE1BQU07O0FBK25CWCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRztJQUMvQixLQUFLO0lBQ0wsUUFBUTtJQUNSLGFBQWE7SUFDYixVQUFVO0lBQ1YsVUFBVTtJQUNWLGNBQWM7SUFDZCxVQUFVO0lBQ1YsZ0JBQWdCO0lBQ2hCLGVBQWU7Q0FDbEIsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLG9CQUFvQixHQUFHLENBQUMsR0FBRyxlQUFlLENBQUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gICAgRGlyZWN0aXZlLFxuICAgIEV2ZW50RW1pdHRlcixcbiAgICBpbmplY3QsXG4gICAgSW5qZWN0aW9uVG9rZW4sXG4gICAgSW5qZWN0T3B0aW9ucyxcbiAgICBJbnB1dCxcbiAgICBOZ1pvbmUsXG4gICAgT25EZXN0cm95LFxuICAgIE9uSW5pdCxcbiAgICBPdXRwdXQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgZmlsdGVyLCBTdWJzY3JpcHRpb24sIHRhcCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgTmd0UmVmIH0gZnJvbSAnLi9yZWYnO1xuaW1wb3J0IHsgTmd0Q29tcG9uZW50U3RvcmUsIHRhcEVmZmVjdCB9IGZyb20gJy4vc3RvcmVzL2NvbXBvbmVudC1zdG9yZSc7XG5pbXBvcnQgeyBOZ3RTdG9yZSB9IGZyb20gJy4vc3RvcmVzL3N0b3JlJztcbmltcG9ydCB0eXBlIHtcbiAgICBOZ3RBbnlDdG9yLFxuICAgIE5ndEFueUZ1bmN0aW9uLFxuICAgIE5ndEFueVJlY29yZCxcbiAgICBOZ3RBdHRhY2hGdW5jdGlvbixcbiAgICBOZ3RCZWZvcmVSZW5kZXJDYWxsYmFjayxcbiAgICBOZ3RFdmVudEhhbmRsZXJzLFxuICAgIE5ndEluc3RhbmNlTG9jYWxTdGF0ZSxcbiAgICBOZ3RPYnNlcnZhYmxlSW5wdXQsXG4gICAgTmd0VGhyZWVFdmVudCxcbn0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQgeyBhcHBseVByb3BzIH0gZnJvbSAnLi91dGlscy9hcHBseS1wcm9wcyc7XG5pbXBvcnQgeyByZW1vdmVJbnRlcmFjdGl2aXR5IH0gZnJvbSAnLi91dGlscy9ldmVudHMnO1xuaW1wb3J0IHsgZ2V0SW5zdGFuY2VMb2NhbFN0YXRlIH0gZnJvbSAnLi91dGlscy9nZXQtaW5zdGFuY2UtbG9jYWwtc3RhdGUnO1xuaW1wb3J0IHsgaW52YWxpZGF0ZUluc3RhbmNlIH0gZnJvbSAnLi91dGlscy9pbnN0YW5jZSc7XG5pbXBvcnQgeyBpcyB9IGZyb20gJy4vdXRpbHMvaXMnO1xuaW1wb3J0IHsgbXV0YXRlIH0gZnJvbSAnLi91dGlscy9tdXRhdGUnO1xuXG5leHBvcnQgY29uc3QgTkdUX1BST1hZX0lOU1RBTkNFID0gU3ltYm9sLmZvcignX19uZ3RfX3Byb3h5X19pbnN0YW5jZV9fJyk7XG5cbmV4cG9ydCBjb25zdCBOR1RfSU5TVEFOQ0VfUkVGX0ZBQ1RPUlkgPSBuZXcgSW5qZWN0aW9uVG9rZW48Tmd0QW55RnVuY3Rpb248Tmd0UmVmPj4oJ05ndEluc3RhbmNlW2luc3RhbmNlUmVmXSBmYWN0b3J5Jyk7XG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZUluc3RhbmNlUmVmPFxuICAgIFRJbnN0YW5jZVR5cGUgZXh0ZW5kcyBvYmplY3QgPSBhbnksXG4gICAgVEN0b3IgZXh0ZW5kcyBOZ3RBbnlDdG9yPFRJbnN0YW5jZVR5cGU+ID0gTmd0QW55Q3RvcjxUSW5zdGFuY2VUeXBlPlxuPihjdG9yOiBUQ3RvciwgZmFjdG9yeT86IChpbnN0YW5jZTogSW5zdGFuY2VUeXBlPFRDdG9yPikgPT4gTmd0UmVmKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgcHJvdmlkZTogTkdUX0lOU1RBTkNFX1JFRl9GQUNUT1JZLFxuICAgICAgICB1c2VGYWN0b3J5OiAoaW5zdGFuY2U6IEluc3RhbmNlVHlwZTxUQ3Rvcj4pID0+IHtcbiAgICAgICAgICAgIGlmIChmYWN0b3J5KSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IGZhY3RvcnkoaW5zdGFuY2UpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gKCkgPT5cbiAgICAgICAgICAgICAgICAoaW5zdGFuY2UgYXMgTmd0QW55UmVjb3JkKVsnaW5zdGFuY2VSZWYnXSB8fCAoaW5zdGFuY2UgYXMgTmd0QW55UmVjb3JkKVsnaW5zdGFuY2UnXVsnaW5zdGFuY2VSZWYnXTtcbiAgICAgICAgfSxcbiAgICAgICAgZGVwczogW2N0b3JdLFxuICAgIH07XG59XG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0SW5zdGFuY2VSZWYoKTogTmd0QW55RnVuY3Rpb248Tmd0UmVmPjtcbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RJbnN0YW5jZVJlZihvcHRpb25zOiBJbmplY3RPcHRpb25zICYgeyBvcHRpb25hbD86IGZhbHNlIH0pOiBOZ3RBbnlGdW5jdGlvbjxOZ3RSZWY+O1xuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEluc3RhbmNlUmVmKG9wdGlvbnM6IEluamVjdE9wdGlvbnMgJiB7IG9wdGlvbmFsPzogdHJ1ZSB9KTogTmd0QW55RnVuY3Rpb248Tmd0UmVmPiB8IG51bGw7XG5leHBvcnQgZnVuY3Rpb24gaW5qZWN0SW5zdGFuY2VSZWYob3B0aW9uczogSW5qZWN0T3B0aW9ucyA9IHt9KSB7XG4gICAgcmV0dXJuIGluamVjdChOR1RfSU5TVEFOQ0VfUkVGX0ZBQ1RPUlksIG9wdGlvbnMpO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndEluc3RhbmNlU3RhdGU8VEluc3RhbmNlIGV4dGVuZHMgb2JqZWN0ID0gTmd0QW55UmVjb3JkPiB7XG4gICAgaW5zdGFuY2VSZWY6IE5ndFJlZjxUSW5zdGFuY2U+O1xuICAgIGluc3RhbmNlQXJnczogdW5rbm93bltdO1xuICAgIGF0dGFjaDogc3RyaW5nW10gfCBOZ3RBdHRhY2hGdW5jdGlvbjtcbiAgICBub0F0dGFjaDogYm9vbGVhbjtcbiAgICBza2lwV3JhcHBlcjogYm9vbGVhbjtcbiAgICBza2lwSW5pdDogYm9vbGVhbjtcbn1cbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RJbnN0YW5jZTxUIGV4dGVuZHMgb2JqZWN0PigpOiBOZ3RJbnN0YW5jZTxUPjtcbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RJbnN0YW5jZTxUIGV4dGVuZHMgb2JqZWN0PihvcHRpb25zOiBJbmplY3RPcHRpb25zICYgeyBvcHRpb25hbD86IGZhbHNlIH0pOiBOZ3RJbnN0YW5jZTxUPjtcbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RJbnN0YW5jZTxUIGV4dGVuZHMgb2JqZWN0PihvcHRpb25zOiBJbmplY3RPcHRpb25zICYgeyBvcHRpb25hbD86IHRydWUgfSk6IE5ndEluc3RhbmNlPFQ+IHwgbnVsbDtcbmV4cG9ydCBmdW5jdGlvbiBpbmplY3RJbnN0YW5jZShvcHRpb25zOiBJbmplY3RPcHRpb25zID0ge30pIHtcbiAgICByZXR1cm4gaW5qZWN0KE5ndEluc3RhbmNlLCBvcHRpb25zKTtcbn1cblxuY29uc3Qgc3VwcG9ydGVkRXZlbnRzID0gW1xuICAgICdjbGljaycsXG4gICAgJ2NvbnRleHRtZW51JyxcbiAgICAnZGJsY2xpY2snLFxuICAgICdwb2ludGVydXAnLFxuICAgICdwb2ludGVyZG93bicsXG4gICAgJ3BvaW50ZXJvdmVyJyxcbiAgICAncG9pbnRlcm91dCcsXG4gICAgJ3BvaW50ZXJlbnRlcicsXG4gICAgJ3BvaW50ZXJsZWF2ZScsXG4gICAgJ3BvaW50ZXJtb3ZlJyxcbiAgICAncG9pbnRlcm1pc3NlZCcsXG4gICAgJ3BvaW50ZXJjYW5jZWwnLFxuICAgICd3aGVlbCcsXG5dIGFzIGNvbnN0O1xuXG5ARGlyZWN0aXZlKHtcbiAgICBzZWxlY3RvcjogJ1tuZ3RJbnN0YW5jZV0nLFxuICAgIGV4cG9ydEFzOiAnbmd0SW5zdGFuY2UnLFxuICAgIHN0YW5kYWxvbmU6IHRydWUsXG59KVxuZXhwb3J0IGNsYXNzIE5ndEluc3RhbmNlPFxuICAgICAgICBUSW5zdGFuY2UgZXh0ZW5kcyBvYmplY3QgPSBhbnksXG4gICAgICAgIFRJbnN0YW5jZVN0YXRlIGV4dGVuZHMgTmd0SW5zdGFuY2VTdGF0ZTxUSW5zdGFuY2U+ID0gTmd0SW5zdGFuY2VTdGF0ZTxUSW5zdGFuY2U+XG4gICAgPlxuICAgIGV4dGVuZHMgTmd0Q29tcG9uZW50U3RvcmU8VEluc3RhbmNlU3RhdGU+XG4gICAgaW1wbGVtZW50cyBPbkluaXQsIE9uRGVzdHJveVxue1xuICAgIEBJbnB1dCgpIHNldCByZWYoaW5zdGFuY2U6IFRJbnN0YW5jZSB8IE5ndFJlZjxUSW5zdGFuY2U+KSB7XG4gICAgICAgIHRoaXMud3JpdGUoeyBpbnN0YW5jZVJlZjogaXMucmVmKGluc3RhbmNlKSA/IGluc3RhbmNlIDogbmV3IE5ndFJlZihpbnN0YW5jZSkgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNraXBXcmFwcGVyKHNraXBXcmFwcGVyOiBOZ3RPYnNlcnZhYmxlSW5wdXQ8Ym9vbGVhbj4pIHtcbiAgICAgICAgdGhpcy53cml0ZSh7IHNraXBXcmFwcGVyIH0pO1xuICAgICAgICB0aGlzLndyaXRlKHsgc2tpcFdyYXBwZXJFeHBsaWNpdDogdHJ1ZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc2tpcEluaXQoc2tpcEluaXQ6IE5ndE9ic2VydmFibGVJbnB1dDxib29sZWFuPikge1xuICAgICAgICB0aGlzLndyaXRlKHsgc2tpcEluaXQgfSk7XG4gICAgICAgIHRoaXMud3JpdGUoeyBza2lwSW5pdEV4cGxpY2l0OiB0cnVlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBub0F0dGFjaChub0F0dGFjaDogTmd0T2JzZXJ2YWJsZUlucHV0PGJvb2xlYW4+KSB7XG4gICAgICAgIHRoaXMud3JpdGUoeyBub0F0dGFjaCB9KTtcbiAgICAgICAgdGhpcy53cml0ZSh7IG5vQXR0YWNoRXhwbGljaXQ6IHRydWUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGF0dGFjaCh2YWx1ZTogc3RyaW5nIHwgc3RyaW5nW10gfCBbc3RyaW5nLCAuLi4oc3RyaW5nIHwgbnVtYmVyKVtdXSB8IE5ndEF0dGFjaEZ1bmN0aW9uIHwgdW5kZWZpbmVkKSB7XG4gICAgICAgIGlmICh2YWx1ZSkge1xuICAgICAgICAgICAgY29uc3QgYXR0YWNoID1cbiAgICAgICAgICAgICAgICB0eXBlb2YgdmFsdWUgPT09ICdmdW5jdGlvbidcbiAgICAgICAgICAgICAgICAgICAgPyB2YWx1ZVxuICAgICAgICAgICAgICAgICAgICA6IEFycmF5LmlzQXJyYXkodmFsdWUpXG4gICAgICAgICAgICAgICAgICAgID8gdmFsdWUubWFwKChpdGVtKSA9PiAodHlwZW9mIGl0ZW0gPT09ICdudW1iZXInID8gaXRlbS50b1N0cmluZygpIDogaXRlbSkpXG4gICAgICAgICAgICAgICAgICAgIDogW3ZhbHVlXTtcblxuICAgICAgICAgICAgdGhpcy53cml0ZSh7IGF0dGFjaCwgYXR0YWNoRXhwbGljaXQ6IHRydWUgfSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBASW5wdXQoKSBwcmlvcml0eSA9IDA7XG4gICAgQElucHV0KCkgYmVmb3JlUmVuZGVyPzogTmd0QmVmb3JlUmVuZGVyQ2FsbGJhY2s8VEluc3RhbmNlPjtcblxuICAgIEBJbnB1dCgpIHJlYWR5Q2FsbGJhY2s/OiAoKGluc3RhbmNlOiBUSW5zdGFuY2UpID0+IHZvaWQpIHwgKCgpID0+IHZvaWQpO1xuICAgIEBJbnB1dCgpIHVwZGF0ZUNhbGxiYWNrPzogKChpbnN0YW5jZTogVEluc3RhbmNlKSA9PiB2b2lkKSB8ICgoKSA9PiB2b2lkKTtcblxuICAgIEBPdXRwdXQoKSBjbGljayA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxNb3VzZUV2ZW50Pj4oKTtcbiAgICBAT3V0cHV0KCkgY29udGV4dG1lbnUgPSBuZXcgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8TW91c2VFdmVudD4+KCk7XG4gICAgQE91dHB1dCgpIGRibGNsaWNrID0gbmV3IEV2ZW50RW1pdHRlcjxOZ3RUaHJlZUV2ZW50PE1vdXNlRXZlbnQ+PigpO1xuICAgIEBPdXRwdXQoKSBwb2ludGVydXAgPSBuZXcgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pj4oKTtcbiAgICBAT3V0cHV0KCkgcG9pbnRlcmRvd24gPSBuZXcgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pj4oKTtcbiAgICBAT3V0cHV0KCkgcG9pbnRlcm92ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pj4oKTtcbiAgICBAT3V0cHV0KCkgcG9pbnRlcm91dCA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+PigpO1xuICAgIEBPdXRwdXQoKSBwb2ludGVyZW50ZXIgPSBuZXcgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pj4oKTtcbiAgICBAT3V0cHV0KCkgcG9pbnRlcmxlYXZlID0gbmV3IEV2ZW50RW1pdHRlcjxOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4+KCk7XG4gICAgQE91dHB1dCgpIHBvaW50ZXJtb3ZlID0gbmV3IEV2ZW50RW1pdHRlcjxOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4+KCk7XG4gICAgQE91dHB1dCgpIHBvaW50ZXJtaXNzZWQgPSBuZXcgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8UG9pbnRlckV2ZW50Pj4oKTtcbiAgICBAT3V0cHV0KCkgcG9pbnRlcmNhbmNlbCA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxQb2ludGVyRXZlbnQ+PigpO1xuICAgIEBPdXRwdXQoKSB3aGVlbCA9IG5ldyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxXaGVlbEV2ZW50Pj4oKTtcblxuICAgIHByaXZhdGUgcmVhZG9ubHkgem9uZSA9IGluamVjdChOZ1pvbmUpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgc3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuXG4gICAgcHJpdmF0ZSByZWFkb25seSBwYXJlbnRSZWYgPSBpbmplY3RJbnN0YW5jZVJlZih7IHNraXBTZWxmOiB0cnVlLCBvcHRpb25hbDogdHJ1ZSB9KTtcbiAgICBwcml2YXRlIF9pc1JhdyA9IGZhbHNlO1xuXG4gICAgc2V0IGlzUmF3KHZhbDogYm9vbGVhbikge1xuICAgICAgICB0aGlzLl9pc1JhdyA9IHZhbDtcbiAgICB9XG5cbiAgICBwcml2YXRlIGhhc0VtaXR0ZWRBbHJlYWR5ID0gZmFsc2U7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGluc3RhbmNlUmVhZHkgPSB0aGlzLmVmZmVjdChcbiAgICAgICAgdGFwRWZmZWN0KCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXZlbnRzKCk7XG5cbiAgICAgICAgICAgIGxldCBhdHRhY2hUb1BhcmVudFN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uO1xuICAgICAgICAgICAgaWYgKHRoaXMucGFyZW50UmVmKSB7XG4gICAgICAgICAgICAgICAgYXR0YWNoVG9QYXJlbnRTdWJzY3JpcHRpb24gPSB0aGlzLmF0dGFjaFRvUGFyZW50KHRoaXMucGFyZW50IS5waXBlKGZpbHRlcigocGFyZW50KSA9PiAhIXBhcmVudCkpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgbGV0IGJlZm9yZVJlbmRlckNsZWFuVXA6ICgpID0+IHZvaWQ7XG4gICAgICAgICAgICBpZiAodGhpcy5iZWZvcmVSZW5kZXIgJiYgaXMub2JqZWN0M2QodGhpcy5pbnN0YW5jZVZhbHVlKSAmJiBpcy5vYmplY3QzZCh0aGlzLnByb3h5SW5zdGFuY2UpKSB7XG4gICAgICAgICAgICAgICAgYmVmb3JlUmVuZGVyQ2xlYW5VcCA9IHRoaXMuc3RvcmVcbiAgICAgICAgICAgICAgICAgICAgLnJlYWQoKHMpID0+IHMuaW50ZXJuYWwpXG4gICAgICAgICAgICAgICAgICAgIC5zdWJzY3JpYmUoXG4gICAgICAgICAgICAgICAgICAgICAgICAoc3RhdGUsIG9iamVjdCkgPT4gdGhpcy5iZWZvcmVSZW5kZXIhKHN0YXRlLCBvYmplY3QpLFxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5wcmlvcml0eSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc3RvcmUucmVhZCxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMucHJveHlJbnN0YW5jZVxuICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5yZWFkeUNhbGxiYWNrKSB0aGlzLnJlYWR5Q2FsbGJhY2sodGhpcy5pbnN0YW5jZVZhbHVlKTtcblxuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBiZWZvcmVSZW5kZXJDbGVhblVwPy4oKTtcbiAgICAgICAgICAgICAgICBhdHRhY2hUb1BhcmVudFN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIHByaXZhdGUgaGFuZGxlRXZlbnRzID0gdGhpcy5lZmZlY3Q8dm9pZD4oXG4gICAgICAgIHRhcEVmZmVjdCgoKSA9PiB7XG4gICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZVZhbHVlICYmIGlzLm9iamVjdDNkKHRoaXMuaW5zdGFuY2VWYWx1ZSkpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBvYnNlcnZlZEV2ZW50cyA9IHN1cHBvcnRlZEV2ZW50cy5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgIChyZXN1bHQsIGV2ZW50KSA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sbGVyRXZlbnQgPSB0aGlzW2V2ZW50XS5vYnNlcnZlZCA/IHRoaXNbZXZlbnRdIDogbnVsbDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChjb250cm9sbGVyRXZlbnQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXN1bHQuaGFuZGxlcnNbZXZlbnRdID0gdGhpcy5ldmVudE5hbWVUb0hhbmRsZXIoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRyb2xsZXJFdmVudCBhcyBFdmVudEVtaXR0ZXI8Tmd0VGhyZWVFdmVudDxhbnk+PlxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzdWx0LmV2ZW50Q291bnQgKz0gMTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHJldHVybiByZXN1bHQ7XG4gICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgIHsgaGFuZGxlcnM6IHt9LCBldmVudENvdW50OiAwIH0gYXMge1xuICAgICAgICAgICAgICAgICAgICAgICAgaGFuZGxlcnM6IE5ndEV2ZW50SGFuZGxlcnM7XG4gICAgICAgICAgICAgICAgICAgICAgICBldmVudENvdW50OiBudW1iZXI7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICApO1xuXG4gICAgICAgICAgICAgICAgLy8gcGF0Y2ggX19uZ3RfXyB3aXRoIGV2ZW50c1xuICAgICAgICAgICAgICAgIGFwcGx5UHJvcHModGhpcy5fX25ndF9fLCBvYnNlcnZlZEV2ZW50cyk7XG5cbiAgICAgICAgICAgICAgICAvLyBhZGQgYXMgYW4gaW50ZXJhY3Rpb24gaWYgdGhlcmUgYXJlIGV2ZW50cyBvYnNlcnZlZFxuICAgICAgICAgICAgICAgIGlmIChvYnNlcnZlZEV2ZW50cy5ldmVudENvdW50ID4gMCkge1xuICAgICAgICAgICAgICAgICAgICBnZXRJbnN0YW5jZUxvY2FsU3RhdGUodGhpcy5pbnN0YW5jZVZhbHVlKT8ucm9vdEZhY3RvcnkoKS5hZGRJbnRlcmFjdGlvbih0aGlzLmluc3RhbmNlVmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJldHVybiAoKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKGlzLm9iamVjdDNkKHRoaXMuaW5zdGFuY2VWYWx1ZSkgJiYgdGhpcy5fX25ndF9fLmV2ZW50Q291bnQgPiAwKSB7XG4gICAgICAgICAgICAgICAgICAgIGdldEluc3RhbmNlTG9jYWxTdGF0ZSh0aGlzLmluc3RhbmNlVmFsdWUpPy5yb290RmFjdG9yeSgpLnJlbW92ZUludGVyYWN0aW9uKHRoaXMuaW5zdGFuY2VWYWx1ZS51dWlkKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IGF0dGFjaFRvUGFyZW50ID0gdGhpcy5lZmZlY3QoXG4gICAgICAgIHRhcCgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBhdHRhY2ggPSB0aGlzLnJlYWQoKHMpID0+IHMuYXR0YWNoKTtcblxuICAgICAgICAgICAgbGV0IHBhcmVudEluc3RhbmNlUmVmID0gdGhpcy5fX25ndF9fPy5wYXJlbnRSZWY7XG5cbiAgICAgICAgICAgIC8vIGlmIG5vIHBhcmVudEluc3RhbmNlLCB0cnkgcmUtcnVuIHRoZSBmYWN0b3J5IGR1ZSB0byBsYXRlIGluaXRcbiAgICAgICAgICAgIGlmICghcGFyZW50SW5zdGFuY2VSZWYgfHwgIXBhcmVudEluc3RhbmNlUmVmLnZhbHVlKSB7XG4gICAgICAgICAgICAgICAgLy8gcmV0dXJuIGVhcmx5IGlmIGZhaWxlZCB0byByZXRyaWV2ZVxuICAgICAgICAgICAgICAgIGlmICghdGhpcy5wYXJlbnQ/LnZhbHVlKSByZXR1cm47XG5cbiAgICAgICAgICAgICAgICAvLyByZWFzc2lnbiBvbiBpbnN0YW5jZSBpbnRlcm5hbCBzdGF0ZVxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fbmd0X18pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fX25ndF9fLnBhcmVudFJlZiA9IHRoaXMucGFyZW50O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBwYXJlbnRJbnN0YW5jZVJlZiA9IHRoaXMucGFyZW50O1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodHlwZW9mIGF0dGFjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGF0dGFjaENsZWFuVXAgPSBhdHRhY2gocGFyZW50SW5zdGFuY2VSZWYsIHRoaXMuaW5zdGFuY2VSZWYsIHRoaXMuc3RvcmUucmVhZCk7XG4gICAgICAgICAgICAgICAgaWYgKGF0dGFjaENsZWFuVXApIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fX25ndF9fLmF0dGFjaCA9IGF0dGFjaENsZWFuVXA7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVRvQXR0YWNoID0gWy4uLmF0dGFjaF07XG5cbiAgICAgICAgICAgICAgICAvLyBpZiBwcm9wZXJ0eVRvQXR0YWNoIGlzIGVtcHR5XG4gICAgICAgICAgICAgICAgaWYgKHByb3BlcnR5VG9BdHRhY2gubGVuZ3RoID09PSAwKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIHRoaXMgbWlnaHQgYmUgdGhlIGNhc2Ugd2hlcmUgd2UgYXJlIGF0dGFjaGluZyBhbiBvYmplY3QzRCB0byB0aGUgcGFyZW50IG9iamVjdDNEXG4gICAgICAgICAgICAgICAgICAgIGlmIChcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzLm9iamVjdDNkKHRoaXMuaW5zdGFuY2VWYWx1ZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzLm9iamVjdDNkKHRoaXMucHJveHlJbnN0YW5jZSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgIGlzLm9iamVjdDNkKHRoaXMucGFyZW50Py52YWx1ZSlcbiAgICAgICAgICAgICAgICAgICAgKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnBhcmVudD8udmFsdWUuYWRkKHRoaXMucHJveHlJbnN0YW5jZSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAvLyBhcnJheSBtYXRlcmlhbCBoYW5kbGluZ1xuICAgICAgICAgICAgICAgICAgICBpZiAoXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVRvQXR0YWNoWzBdID09PSAnbWF0ZXJpYWwnICYmXG4gICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eVRvQXR0YWNoWzFdICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlb2YgTnVtYmVyKHByb3BlcnR5VG9BdHRhY2hbMV0pID09PSAnbnVtYmVyJyAmJlxuICAgICAgICAgICAgICAgICAgICAgICAgaXMubWF0ZXJpYWwodGhpcy5pbnN0YW5jZVZhbHVlKVxuICAgICAgICAgICAgICAgICAgICApIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShwYXJlbnRJbnN0YW5jZVJlZi52YWx1ZS5tYXRlcmlhbCkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwYXJlbnRJbnN0YW5jZVJlZi52YWx1ZS5tYXRlcmlhbCA9IFtdO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gcmV0cmlldmUgdGhlIGN1cnJlbnQgdmFsdWUgb24gdGhlIHBhcmVudEluc3RhbmNlLCBzbyB3ZSBjYW4gcmVzZXQgaXQgbGF0ZXJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX19uZ3RfXykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fX25ndF9fLmF0dGFjaFZhbHVlID0gcHJvcGVydHlUb0F0dGFjaC5yZWR1Y2UoXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgKHZhbHVlLCBwcm9wZXJ0eSkgPT4gdmFsdWVbcHJvcGVydHldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcmVudEluc3RhbmNlUmVmLnZhbHVlXG4gICAgICAgICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAgICAgLy8gYXR0YWNoIHRoZSBpbnN0YW5jZSB2YWx1ZSBvbiB0aGUgcGFyZW50XG4gICAgICAgICAgICAgICAgICAgIG11dGF0ZShwYXJlbnRJbnN0YW5jZVJlZi52YWx1ZSwgdGhpcy5wcm94eUluc3RhbmNlLCBwcm9wZXJ0eVRvQXR0YWNoKTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICAvLyB2YWxpZGF0ZSBvbiB0aGUgaW5zdGFuY2VcbiAgICAgICAgICAgICAgICBpbnZhbGlkYXRlSW5zdGFuY2UodGhpcy5pbnN0YW5jZVZhbHVlKTtcblxuICAgICAgICAgICAgICAgIC8vIHZhbGlkYXRlIG9uIHRoZSBwYXJlbnRcbiAgICAgICAgICAgICAgICBpZiAoZ2V0SW5zdGFuY2VMb2NhbFN0YXRlKHBhcmVudEluc3RhbmNlUmVmLnZhbHVlKSkge1xuICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlSW5zdGFuY2UocGFyZW50SW5zdGFuY2VSZWYudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIC8vIHNhdmUgdGhlIGF0dGFjaFxuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fbmd0X18pIHtcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fX25ndF9fLmF0dGFjaCA9IHByb3BlcnR5VG9BdHRhY2g7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHRoaXMud3JpdGUoeyBhdHRhY2g6IHByb3BlcnR5VG9BdHRhY2ggfSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pXG4gICAgKTtcblxuICAgIG92ZXJyaWRlIGluaXRpYWxpemUoKSB7XG4gICAgICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAgICAgdGhpcy53cml0ZSh7XG4gICAgICAgICAgICBpbnN0YW5jZVJlZjogbmV3IE5ndFJlZihudWxsKSxcbiAgICAgICAgICAgIGF0dGFjaDogW10sXG4gICAgICAgICAgICBub0F0dGFjaDogZmFsc2UsXG4gICAgICAgICAgICBza2lwV3JhcHBlcjogZmFsc2UsXG4gICAgICAgICAgICBza2lwSW5pdDogZmFsc2UsXG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLnpvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5zdG9yZS5vblJlYWR5KCgpID0+IHtcbiAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlUmVhZHkodGhpcy5pbnN0YW5jZVJlZi5waXBlKGZpbHRlcigoaW5zdGFuY2UpID0+ICEhaW5zdGFuY2UpKSk7XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgZ2V0IGluc3RhbmNlUmVmKCk6IE5ndFJlZjxUSW5zdGFuY2U+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMucmVhZCgocykgPT4gcy5pbnN0YW5jZVJlZik7XG4gICAgfVxuXG4gICAgZ2V0IGluc3RhbmNlVmFsdWUoKTogVEluc3RhbmNlIHtcbiAgICAgICAgaWYgKCF0aGlzLmluc3RhbmNlUmVmLnZhbHVlKSByZXR1cm4gdGhpcy5pbnN0YW5jZVJlZi52YWx1ZTtcbiAgICAgICAgcmV0dXJuIHRoaXMuX2lzUmF3ID8gKHRoaXMuaW5zdGFuY2VSZWYudmFsdWU/LnZhbHVlT2YoKSBhcyBUSW5zdGFuY2UpIDogdGhpcy5pbnN0YW5jZVJlZi52YWx1ZTtcbiAgICB9XG5cbiAgICBnZXQgcHJveHlJbnN0YW5jZSgpOiBUSW5zdGFuY2Uge1xuICAgICAgICByZXR1cm4gKHRoaXMuaW5zdGFuY2VWYWx1ZSBhcyBhbnkpPy5bTkdUX1BST1hZX0lOU1RBTkNFXTtcbiAgICB9XG5cbiAgICBnZXQgX19uZ3RfXygpOiBOZ3RJbnN0YW5jZUxvY2FsU3RhdGUge1xuICAgICAgICByZXR1cm4gZ2V0SW5zdGFuY2VMb2NhbFN0YXRlKFxuICAgICAgICAgICAgdGhpcy5faXNSYXcgPyB0aGlzLmluc3RhbmNlUmVmLnZhbHVlIDogdGhpcy5pbnN0YW5jZVZhbHVlXG4gICAgICAgICkgYXMgTmd0SW5zdGFuY2VMb2NhbFN0YXRlO1xuICAgIH1cblxuICAgIGdldCBwYXJlbnQoKTogTmd0UmVmIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMucGFyZW50UmVmPy4oKTtcbiAgICB9XG5cbiAgICBvdmVycmlkZSBuZ09uRGVzdHJveSgpIHtcbiAgICAgICAgdGhpcy56b25lLnJ1bk91dHNpZGVBbmd1bGFyKCgpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZGVzdHJveSgpO1xuICAgICAgICB9KTtcbiAgICAgICAgc3VwZXIubmdPbkRlc3Ryb3koKTtcbiAgICB9XG5cbiAgICBwcml2YXRlIGRlc3Ryb3koKSB7XG4gICAgICAgIGlmICh0aGlzLmluc3RhbmNlVmFsdWUpIHtcbiAgICAgICAgICAgIGlmIChpcy5vYmplY3QzZCh0aGlzLmluc3RhbmNlVmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcGFyZW50SW5zdGFuY2UgPSB0aGlzLnBhcmVudDtcbiAgICAgICAgICAgICAgICBpZiAocGFyZW50SW5zdGFuY2UgJiYgaXMub2JqZWN0M2QocGFyZW50SW5zdGFuY2UudmFsdWUpKSB7XG4gICAgICAgICAgICAgICAgICAgIHJlbW92ZUludGVyYWN0aXZpdHkodGhpcy5fX25ndF9fLnN0YXRlRmFjdG9yeS5iaW5kKHRoaXMuX19uZ3RfXyksIHRoaXMuaW5zdGFuY2VWYWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgIHBhcmVudEluc3RhbmNlLnZhbHVlLnJlbW92ZSh0aGlzLmluc3RhbmNlVmFsdWUpO1xuICAgICAgICAgICAgICAgICAgICBpbnZhbGlkYXRlSW5zdGFuY2UocGFyZW50SW5zdGFuY2UudmFsdWUpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmICh0aGlzLmluc3RhbmNlVmFsdWUuY2xlYXIgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmluc3RhbmNlVmFsdWUuY2xlYXIoKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fbmd0X18pIHtcbiAgICAgICAgICAgICAgICAgICAgLy8gbm9uLXNjZW5lIG9iamVjdHNcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNBdHRhY2ggPSB0aGlzLl9fbmd0X18uYXR0YWNoO1xuICAgICAgICAgICAgICAgICAgICBpZiAocHJldmlvdXNBdHRhY2ggIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwcmV2aW91c0F0dGFjaCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByZXZpb3VzQXR0YWNoKCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQXR0YWNoVmFsdWUgPSB0aGlzLl9fbmd0X18uYXR0YWNoVmFsdWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX19uZ3RfXy5wYXJlbnRSZWYgJiYgdGhpcy5fX25ndF9fLnBhcmVudFJlZi52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUodGhpcy5fX25ndF9fLnBhcmVudFJlZi52YWx1ZSwgcHJldmlvdXNBdHRhY2hWYWx1ZSwgcHJldmlvdXNBdHRhY2gpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX19uZ3RfXy5wYXJlbnRSZWYgJiYgdGhpcy5fX25ndF9fLnBhcmVudFJlZi52YWx1ZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludmFsaWRhdGVJbnN0YW5jZSh0aGlzLl9fbmd0X18ucGFyZW50UmVmLnZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgY29uc3QgZGlzcG9zZSA9ICh0aGlzLmluc3RhbmNlVmFsdWUgYXMgTmd0QW55UmVjb3JkKVsnZGlzcG9zZSddO1xuICAgICAgICAgICAgaWYgKGRpc3Bvc2UgJiYgdHlwZW9mIGRpc3Bvc2UgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgICAgICBkaXNwb3NlLmFwcGx5KHRoaXMuaW5zdGFuY2VWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICB0aGlzLndyaXRlKHsgYXR0YWNoOiBbXSB9KTtcbiAgICAgICAgdGhpcy5pbnN0YW5jZVJlZi5jb21wbGV0ZSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgZXZlbnROYW1lVG9IYW5kbGVyKFxuICAgICAgICBjb250cm9sbGVyRXZlbnQ6IEV2ZW50RW1pdHRlcjxOZ3RUaHJlZUV2ZW50PFBvaW50ZXJFdmVudD4+IHwgRXZlbnRFbWl0dGVyPE5ndFRocmVlRXZlbnQ8V2hlZWxFdmVudD4+XG4gICAgKSB7XG4gICAgICAgIHJldHVybiAoZXZlbnQ6IFBhcmFtZXRlcnM8RXhjbHVkZTxOZ3RFdmVudEhhbmRsZXJzW3R5cGVvZiBzdXBwb3J0ZWRFdmVudHNbbnVtYmVyXV0sIHVuZGVmaW5lZD4+WzBdKSA9PiB7XG4gICAgICAgICAgICAvLyBnbyBiYWNrIGludG8gQW5ndWxhciBab25lIHNvIHRoYXQgc3RhdGUgdXBkYXRlcyBvbiB0aGVzZSBldmVudHMgdHJpZ2dlciBDRFxuICAgICAgICAgICAgdGhpcy56b25lLnJ1bigoKSA9PiB7XG4gICAgICAgICAgICAgICAgY29udHJvbGxlckV2ZW50LmVtaXQoZXZlbnQgYXMgTmd0VGhyZWVFdmVudDxhbnk+KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9O1xuICAgIH1cblxuICAgIC8vIHByb3RlY3RlZCBnZXQgb3B0aW9uc0ZpZWxkcygpOiBzdHJpbmdbXSB7XG4gICAgLy8gICAgIHJldHVybiBbXTtcbiAgICAvLyB9XG4gICAgLy9cbiAgICAvLyAvKipcbiAgICAvLyAgKiBTdWJjbGFzc2VzIGNhbiBjdXN0b21pemUgdGhpcyB0byBydW4gc2V0T3B0aW9ucyBvbiBjdXN0b20gdHJpZ2dlclxuICAgIC8vICAqIEBwcm90ZWN0ZWRcbiAgICAvLyAgKi9cbiAgICAvLyBwcm90ZWN0ZWQgc2V0T3B0aW9uc1RyaWdnZXIkOiBPYnNlcnZhYmxlPHt9PiA9IG9mKHt9KTtcbiAgICAvL1xuICAgIC8vIHByaXZhdGUgcmVhZG9ubHkgaW5pdCA9IHRoaXMuZWZmZWN0KHRhcEVmZmVjdCgoKSA9PiB0aGlzLmluaXRGbih0aGlzLnByZXBhcmVJbnN0YW5jZS5iaW5kKHRoaXMpKSkpO1xuICAgIC8vXG4gICAgLy8gcHJvdGVjdGVkIGFic3RyYWN0IGluaXRGbihwcmVwYXJlSW5zdGFuY2U6IE5ndFByZXBhcmVJbnN0YW5jZUZuPFRJbnN0YW5jZT4pOiAoKCkgPT4gdm9pZCkgfCB2b2lkIHwgdW5kZWZpbmVkO1xuICAgIC8vXG4gICAgLy8gcHJvdGVjdGVkIGluaXRUcmlnZ2VyJDogT2JzZXJ2YWJsZTxhbnk+ID0gdGhpcy5pbnN0YW5jZUFyZ3MkO1xuICAgIC8vXG4gICAgLy8gcHJpdmF0ZSByZWFkb25seSBzZXRPcHRpb25zID0gdGhpcy5lZmZlY3Q8c3RyaW5nW10+KFxuICAgIC8vICAgICB0YXAoKG5ld09wdGlvbnNLZXlzKSA9PiB7XG4gICAgLy8gICAgICAgICAvLyBubyBvcHRpb25zOyByZXR1cm4gZWFybHlcbiAgICAvLyAgICAgICAgIGlmIChuZXdPcHRpb25zS2V5cy5sZW5ndGggPT09IDApIHJldHVybjtcbiAgICAvL1xuICAgIC8vICAgICAgICAgY29uc3QgaW5zdGFuY2VTdGF0ZSA9IHRoaXMuZ2V0U3RhdGUoKTtcbiAgICAvLyAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fSBhcyBOZ3RBbnlSZWNvcmQ7XG4gICAgLy9cbiAgICAvLyAgICAgICAgIC8vIGhhbmRsaW5nIHJvdGF0aW9uIGFuZCBxdWF0ZXJuaW9uXG4gICAgLy8gICAgICAgICBpZiAobmV3T3B0aW9uc0tleXMuaW5jbHVkZXMoJ3JvdGF0aW9uJykpIHtcbiAgICAvLyAgICAgICAgICAgICBvcHRpb25zWydyb3RhdGlvbiddID0gaW5zdGFuY2VTdGF0ZVsncm90YXRpb24nXTtcbiAgICAvLyAgICAgICAgIH0gZWxzZSBpZiAobmV3T3B0aW9uc0tleXMuaW5jbHVkZXMoJ3F1YXRlcm5pb24nKSkge1xuICAgIC8vICAgICAgICAgICAgIG9wdGlvbnNbJ3F1YXRlcm5pb24nXSA9IGluc3RhbmNlU3RhdGVbJ3F1YXRlcm5pb24nXTtcbiAgICAvLyAgICAgICAgIH1cbiAgICAvL1xuICAgIC8vICAgICAgICAgY29uc3QgaXNNYXRlcmlhbCA9IGlzLm1hdGVyaWFsKHRoaXMuaW5zdGFuY2VWYWx1ZSk7XG4gICAgLy8gICAgICAgICBmb3IgKGNvbnN0IGtleSBvZiBuZXdPcHRpb25zS2V5cykge1xuICAgIC8vICAgICAgICAgICAgIC8vIHNraXAgcm90YXRpb24gYW5kIHF1YXRlcm5pb24gYmVjYXVzZSB3ZSBhbHJlYWR5IGhhbmRsZWQgdGhlbVxuICAgIC8vICAgICAgICAgICAgIGlmIChbJ3JvdGF0aW9uJywgJ3F1YXRlcm5pb24nXS5pbmNsdWRlcyhrZXkpKSBjb250aW51ZTtcbiAgICAvLyAgICAgICAgICAgICBjb25zdCBzaG91bGRVc2VPcHRpb24gPSBpc01hdGVyaWFsID8gaW5zdGFuY2VTdGF0ZVtrZXldICE9PSB1bmRlZmluZWQgOiBpbnN0YW5jZVN0YXRlW2tleV0gIT09IG51bGw7XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICBpZiAoc2hvdWxkVXNlT3B0aW9uKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIG9wdGlvbnNba2V5XSA9IGluc3RhbmNlU3RhdGVba2V5XTtcbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICB9XG4gICAgLy9cbiAgICAvLyAgICAgICAgIGlmIChpc01hdGVyaWFsKSB7XG4gICAgLy8gICAgICAgICAgICAgaWYgKCd1bmlmb3JtcycgaW4gdGhpcy5pbnN0YW5jZVZhbHVlICYmIG5ld09wdGlvbnNLZXlzLmluY2x1ZGVzKCd1bmlmb3JtcycpKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIG9wdGlvbnNbJ3VuaWZvcm1zJ10gPSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAuLi4odGhpcy5pbnN0YW5jZVZhbHVlIGFzIHVua25vd24gYXMgVEhSRUUuU2hhZGVyTWF0ZXJpYWwpWyd1bmlmb3JtcyddLFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgLi4uaW5zdGFuY2VTdGF0ZVsndW5pZm9ybXMnXSxcbiAgICAvLyAgICAgICAgICAgICAgICAgfTtcbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICB9XG4gICAgLy9cbiAgICAvLyAgICAgICAgIGFwcGx5UHJvcHModGhpcy5pbnN0YW5jZVZhbHVlLCBvcHRpb25zKTtcbiAgICAvL1xuICAgIC8vICAgICAgICAgdGhpcy5wb3N0U2V0T3B0aW9ucyh0aGlzLmluc3RhbmNlVmFsdWUpO1xuICAgIC8vXG4gICAgLy8gICAgICAgICBjaGVja1VwZGF0ZSh0aGlzLmluc3RhbmNlVmFsdWUpO1xuICAgIC8vXG4gICAgLy8gICAgICAgICBpZiAodGhpcy51cGRhdGUub2JzZXJ2ZWQpIHtcbiAgICAvLyAgICAgICAgICAgICB0aGlzLnVwZGF0ZS5lbWl0KHRoaXMuaW5zdGFuY2VWYWx1ZSk7XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgIH0pXG4gICAgLy8gKTtcbiAgICAvL1xuICAgIC8vIHByaXZhdGUgcmVhZG9ubHkgYXR0YWNoVG9QYXJlbnQgPSB0aGlzLmVmZmVjdChcbiAgICAvLyAgICAgdGFwKCgpID0+IHtcbiAgICAvLyAgICAgICAgIGNvbnN0IGF0dGFjaCA9IHRoaXMuZ2V0U3RhdGUoKHMpID0+IHMuYXR0YWNoKTtcbiAgICAvL1xuICAgIC8vICAgICAgICAgbGV0IHBhcmVudEluc3RhbmNlUmVmID0gdGhpcy5fX25ndF9fLnBhcmVudFJlZjtcbiAgICAvL1xuICAgIC8vICAgICAgICAgLy8gaWYgbm8gcGFyZW50SW5zdGFuY2UsIHRyeSByZS1ydW4gdGhlIGZhY3RvcnkgZHVlIHRvIGxhdGUgaW5pdFxuICAgIC8vICAgICAgICAgaWYgKCFwYXJlbnRJbnN0YW5jZVJlZiB8fCAhcGFyZW50SW5zdGFuY2VSZWYudmFsdWUpIHtcbiAgICAvLyAgICAgICAgICAgICAvLyByZXR1cm4gZWFybHkgaWYgZmFpbGVkIHRvIHJldHJpZXZlXG4gICAgLy8gICAgICAgICAgICAgaWYgKCF0aGlzLnBhcmVudD8udmFsdWUpIHJldHVybjtcbiAgICAvL1xuICAgIC8vICAgICAgICAgICAgIC8vIHJlYXNzaWduIG9uIGluc3RhbmNlIGludGVybmFsIHN0YXRlXG4gICAgLy8gICAgICAgICAgICAgdGhpcy5fX25ndF9fLnBhcmVudFJlZiA9IHRoaXMucGFyZW50O1xuICAgIC8vICAgICAgICAgICAgIHBhcmVudEluc3RhbmNlUmVmID0gdGhpcy5wYXJlbnQ7XG4gICAgLy8gICAgICAgICB9XG4gICAgLy9cbiAgICAvLyAgICAgICAgIGlmICh0eXBlb2YgYXR0YWNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gICAgICAgICAgICAgY29uc3QgYXR0YWNoQ2xlYW5VcCA9IGF0dGFjaChwYXJlbnRJbnN0YW5jZVJlZiwgdGhpcy5pbnN0YW5jZVJlZik7XG4gICAgLy8gICAgICAgICAgICAgaWYgKGF0dGFjaENsZWFuVXApIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5fX25ndF9fLmF0dGFjaCA9IGF0dGFjaENsZWFuVXA7XG4gICAgLy8gICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgICAgICBjb25zdCBwcm9wZXJ0eVRvQXR0YWNoID0gWy4uLmF0dGFjaF07XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICAvLyBpZiBwcm9wZXJ0eVRvQXR0YWNoIGlzIGVtcHR5XG4gICAgLy8gICAgICAgICAgICAgaWYgKHByb3BlcnR5VG9BdHRhY2gubGVuZ3RoID09PSAwKSByZXR1cm47XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICAvLyBhcnJheSBtYXRlcmlhbCBoYW5kbGluZ1xuICAgIC8vICAgICAgICAgICAgIGlmIChcbiAgICAvLyAgICAgICAgICAgICAgICAgcHJvcGVydHlUb0F0dGFjaFswXSA9PT0gJ21hdGVyaWFsJyAmJlxuICAgIC8vICAgICAgICAgICAgICAgICBwcm9wZXJ0eVRvQXR0YWNoWzFdICYmXG4gICAgLy8gICAgICAgICAgICAgICAgIHR5cGVvZiBOdW1iZXIocHJvcGVydHlUb0F0dGFjaFsxXSkgPT09ICdudW1iZXInICYmXG4gICAgLy8gICAgICAgICAgICAgICAgIGlzLm1hdGVyaWFsKHRoaXMuaW5zdGFuY2VWYWx1ZSlcbiAgICAvLyAgICAgICAgICAgICApIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KChwYXJlbnRJbnN0YW5jZVJlZi52YWx1ZSBhcyB1bmtub3duIGFzIFRIUkVFLk1lc2gpLm1hdGVyaWFsKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgKHBhcmVudEluc3RhbmNlUmVmLnZhbHVlIGFzIHVua25vd24gYXMgVEhSRUUuTWVzaCkubWF0ZXJpYWwgPSBbXTtcbiAgICAvLyAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvL1xuICAgIC8vICAgICAgICAgICAgIC8vIHJldHJpZXZlIHRoZSBjdXJyZW50IHZhbHVlIG9uIHRoZSBwYXJlbnRJbnN0YW5jZSwgc28gd2UgY2FuIHJlc2V0IGl0IGxhdGVyXG4gICAgLy8gICAgICAgICAgICAgdGhpcy5fX25ndF9fLmF0dGFjaFZhbHVlID0gcHJvcGVydHlUb0F0dGFjaC5yZWR1Y2UoXG4gICAgLy8gICAgICAgICAgICAgICAgICh2YWx1ZSwgcHJvcGVydHkpID0+IHZhbHVlW3Byb3BlcnR5XSxcbiAgICAvLyAgICAgICAgICAgICAgICAgcGFyZW50SW5zdGFuY2VSZWYudmFsdWVcbiAgICAvLyAgICAgICAgICAgICApO1xuICAgIC8vXG4gICAgLy8gICAgICAgICAgICAgLy8gYXR0YWNoIHRoZSBpbnN0YW5jZSB2YWx1ZSBvbiB0aGUgcGFyZW50XG4gICAgLy8gICAgICAgICAgICAgbXV0YXRlKHBhcmVudEluc3RhbmNlUmVmLnZhbHVlLCB0aGlzLmluc3RhbmNlVmFsdWUsIHByb3BlcnR5VG9BdHRhY2gpO1xuICAgIC8vXG4gICAgLy8gICAgICAgICAgICAgLy8gdmFsaWRhdGUgb24gdGhlIGluc3RhbmNlXG4gICAgLy8gICAgICAgICAgICAgaW52YWxpZGF0ZUluc3RhbmNlKHRoaXMuaW5zdGFuY2VWYWx1ZSk7XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICAvLyB2YWxpZGF0ZSBvbiB0aGUgcGFyZW50XG4gICAgLy8gICAgICAgICAgICAgaWYgKHBhcmVudEluc3RhbmNlUmVmLnZhbHVlLl9fbmd0X18pIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgaW52YWxpZGF0ZUluc3RhbmNlKHBhcmVudEluc3RhbmNlUmVmLnZhbHVlKTtcbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICB0aGlzLl9fbmd0X18uYXR0YWNoID0gcHJvcGVydHlUb0F0dGFjaDtcbiAgICAvLyAgICAgICAgICAgICB0aGlzLnNldCh7IGF0dGFjaDogcHJvcGVydHlUb0F0dGFjaCB9KTtcbiAgICAvLyAgICAgICAgIH1cbiAgICAvL1xuICAgIC8vICAgICAgICAgY2hlY2tVcGRhdGUocGFyZW50SW5zdGFuY2VSZWYudmFsdWUpO1xuICAgIC8vICAgICAgICAgY2hlY2tVcGRhdGUodGhpcy5pbnN0YW5jZVZhbHVlKTtcbiAgICAvLyAgICAgfSlcbiAgICAvLyApO1xuICAgIC8vXG4gICAgLy8gcHJpdmF0ZSByZWFkb25seSBpbnN0YW5jZVJlYWR5ID0gdGhpcy5lZmZlY3QoXG4gICAgLy8gICAgIHRhcEVmZmVjdCgoKSA9PiB7XG4gICAgLy8gICAgICAgICB0aGlzLnBvc3RJbml0KCk7XG4gICAgLy9cbiAgICAvLyAgICAgICAgIGlmICh0aGlzLmNhbkluaXQpIHtcbiAgICAvLyAgICAgICAgICAgICAvLyBhc3NpZ25pbmcgb3B0aW9uc1xuICAgIC8vXG4gICAgLy8gICAgICAgICAgICAgY29uc3Qgc2V0T3B0aW9uc1N1YiA9IHRoaXMuc2V0T3B0aW9ucyhcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3QoXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBvcHRpb25zRmllbGRzVG9LZXlzJCh0aGlzLCB0aGlzLm9wdGlvbnNGaWVsZHMsIGlzLm1hdGVyaWFsKHRoaXMuaW5zdGFuY2VWYWx1ZSkpLFxuICAgIC8vICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRPcHRpb25zVHJpZ2dlciQsXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICAob3B0aW9uc0tleXMpID0+IG9wdGlvbnNLZXlzXG4gICAgLy8gICAgICAgICAgICAgICAgIClcbiAgICAvLyAgICAgICAgICAgICApO1xuICAgIC8vXG4gICAgLy8gICAgICAgICAgICAgLy8gYXR0YWNoaW5nXG4gICAgLy8gICAgICAgICAgICAgaWYgKCF0aGlzLmdldFN0YXRlKChzKSA9PiBzLm5vQXR0YWNoKSkge1xuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLmF0dGFjaFRvUGFyZW50KHRoaXMucGFyZW50KTtcbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICAvLyBlbWl0dGluZ1xuICAgIC8vICAgICAgICAgICAgIGlmICghdGhpcy5oYXNFbWl0dGVkQWxyZWFkeSkge1xuICAgIC8vICAgICAgICAgICAgICAgICB0aGlzLnJlYWR5LmVtaXQodGhpcy5pbnN0YW5jZVZhbHVlKTtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5oYXNFbWl0dGVkQWxyZWFkeSA9IHRydWU7XG4gICAgLy8gICAgICAgICAgICAgfVxuICAgIC8vXG4gICAgLy8gICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAvLyAgICAgICAgICAgICAgICAgc2V0T3B0aW9uc1N1Yi51bnN1YnNjcmliZSgpO1xuICAgIC8vICAgICAgICAgICAgIH07XG4gICAgLy8gICAgICAgICB9XG4gICAgLy8gICAgIH0pXG4gICAgLy8gKTtcbiAgICAvL1xuICAgIC8vIC8qKlxuICAgIC8vICAqIFN1YmNsYXNzZXMgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIHJ1biBsb2dpYyAqKmJlZm9yZSoqIE5ndFN0b3JlIGlzIHJlYWR5XG4gICAgLy8gICogQHByb3RlY3RlZFxuICAgIC8vICAqL1xuICAgIC8vIHByb3RlY3RlZCBwcmVTdG9yZVJlYWR5KCkge1xuICAgIC8vICAgICByZXR1cm47XG4gICAgLy8gfVxuICAgIC8vXG4gICAgLy8gLyoqXG4gICAgLy8gICogU3ViY2xhc3NlcyBjYW4gdXNlIHRoaXMgZnVuY3Rpb24gdG8gcnVuIGxvZ2ljICoqYWZ0ZXIqKiBOZ3RTdG9yZSBpcyByZWFkeVxuICAgIC8vICAqIEBwcm90ZWN0ZWRcbiAgICAvLyAgKi9cbiAgICAvLyBwcm90ZWN0ZWQgcG9zdFN0b3JlUmVhZHkoKSB7XG4gICAgLy8gICAgIHJldHVybjtcbiAgICAvLyB9XG4gICAgLy9cbiAgICAvLyAvKipcbiAgICAvLyAgKiBTdWJjbGFzc2VzIGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byBydW4gcG9zdC1pbml0IGxvZ2ljXG4gICAgLy8gICogQHByb3RlY3RlZFxuICAgIC8vICAqL1xuICAgIC8vIHByb3RlY3RlZCBwb3N0SW5pdCgpIHtcbiAgICAvLyAgICAgcmV0dXJuO1xuICAgIC8vIH1cbiAgICAvL1xuICAgIC8vIC8qKlxuICAgIC8vICAqIENhbiBiZSB1c2VkIGJ5IHN1YmNsYXNzZXMgdG8gcnVuIGFkZGl0aW9uYWwgbG9naWMgYWZ0ZXIgb3B0aW9ucyBhcmUgc2V0XG4gICAgLy8gICogQHByb3RlY3RlZFxuICAgIC8vICAqL1xuICAgIC8vIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tdW51c2VkLXZhcnNcbiAgICAvLyBwcm90ZWN0ZWQgcG9zdFNldE9wdGlvbnMoXzogVEluc3RhbmNlKSB7XG4gICAgLy8gICAgIHJldHVybjtcbiAgICAvLyB9XG4gICAgLy9cbiAgICAvLyAvKipcbiAgICAvLyAgKiBTdWJjbGFzc2VzIGNhbiB1c2UgdGhpcyBmdW5jdGlvbiB0byBjYWxjdWxhdGUgaW5zdGFuY2UgYXJndW1lbnRzXG4gICAgLy8gICogQHBhcmFtIGluc3RhbmNlQXJnc1xuICAgIC8vICAqIEBwcm90ZWN0ZWRcbiAgICAvLyAgKi9cbiAgICAvLyBwcm90ZWN0ZWQgaW5pdEluc3RhbmNlQXJncyhpbnN0YW5jZUFyZ3M6IHVua25vd25bXSkge1xuICAgIC8vICAgICByZXR1cm4gaW5zdGFuY2VBcmdzO1xuICAgIC8vIH1cbiAgICAvL1xuICAgIC8vIG92ZXJyaWRlIGluaXRpYWxpemUoKSB7XG4gICAgLy8gICAgIHN1cGVyLmluaXRpYWxpemUoKTtcbiAgICAvLyAgICAgdGhpcy5zZXQoe1xuICAgIC8vICAgICAgICAgaW5zdGFuY2VSZWY6IG5ldyBOZ3RSZWYobnVsbCksXG4gICAgLy8gICAgICAgICBpbnN0YW5jZUFyZ3M6IFtdLFxuICAgIC8vICAgICAgICAgYXR0YWNoOiBbXSxcbiAgICAvLyAgICAgICAgIG5vQXR0YWNoOiBmYWxzZSxcbiAgICAvLyAgICAgICAgIHNraXBXcmFwcGVyOiBmYWxzZSxcbiAgICAvLyAgICAgICAgIHNraXBJbml0OiBmYWxzZSxcbiAgICAvLyAgICAgICAgIG5vQXR0YWNoRXhwbGljaXQ6IGZhbHNlLFxuICAgIC8vICAgICAgICAgc2tpcFdyYXBwZXJFeHBsaWNpdDogZmFsc2UsXG4gICAgLy8gICAgICAgICBza2lwSW5pdEV4cGxpY2l0OiBmYWxzZSxcbiAgICAvLyAgICAgICAgIGF0dGFjaEV4cGxpY2l0OiBmYWxzZSxcbiAgICAvLyAgICAgfSk7XG4gICAgLy8gfVxuICAgIC8vXG4gICAgLy8gbmdPbkluaXQoKSB7XG4gICAgLy8gICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgLy8gICAgICAgICAvLyBydW4gbG9naWMgYmVmb3JlIHRoZSBzdG9yZSBpcyByZWFkeTsgYWthIGJlZm9yZSB0aGUgY2FudmFzIGVudGl0aWVzIGFyZSBjcmVhdGVkIGFuZCByZWFkeVxuICAgIC8vICAgICAgICAgdGhpcy5wcmVTdG9yZVJlYWR5KCk7XG4gICAgLy9cbiAgICAvLyAgICAgICAgIHRoaXMuc3RvcmUub25SZWFkeSgoKSA9PiB7XG4gICAgLy8gICAgICAgICAgICAgdGhpcy5wb3N0U3RvcmVSZWFkeSgpO1xuICAgIC8vXG4gICAgLy8gICAgICAgICAgICAgLy8gbm93IHJ1biBpbml0LCBidXQgb25seSBpZiB0aGlzIGlzIE5PVCBhIHdyYXBwZXIgYW5kIHRoZSBza2lwSW5pdCBmbGFnIGlzIG5vdCBzZXRcbiAgICAvLyAgICAgICAgICAgICBpZiAodGhpcy5jYW5Jbml0KSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIHRoaXMuaW5pdCh0aGlzLmluaXRUcmlnZ2VyJCk7XG4gICAgLy8gICAgICAgICAgICAgfVxuICAgIC8vXG4gICAgLy8gICAgICAgICAgICAgLy8gbWFrZSBzdXJlIGBpbnN0YW5jZWAgaXMgYXZhaWxhYmxlIGJlZm9yZSBkb2luZyBhbnl0aGluZ1xuICAgIC8vICAgICAgICAgICAgIHRoaXMuaW5zdGFuY2VSZWFkeSh0aGlzLmluc3RhbmNlUmVmLnBpcGUoZmlsdGVyKChpbnN0YW5jZSkgPT4gaW5zdGFuY2UgIT09IG51bGwpKSk7XG4gICAgLy8gICAgICAgICB9KTtcbiAgICAvLyAgICAgfSk7XG4gICAgLy8gfVxuICAgIC8vXG4gICAgLy8gb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgLy8gICAgIHRoaXMuem9uZS5ydW5PdXRzaWRlQW5ndWxhcigoKSA9PiB7XG4gICAgLy8gICAgICAgICB0aGlzLmRlc3Ryb3koKTtcbiAgICAvLyAgICAgfSk7XG4gICAgLy8gICAgIHN1cGVyLm5nT25EZXN0cm95KCk7XG4gICAgLy8gfVxuICAgIC8vXG4gICAgLy8gcHJvdGVjdGVkIGRlc3Ryb3koKSB7XG4gICAgLy8gICAgIGlmICh0aGlzLmluc3RhbmNlVmFsdWUpIHtcbiAgICAvLyAgICAgICAgIGlmIChpcy5vYmplY3QzZCh0aGlzLmluc3RhbmNlVmFsdWUpKSB7XG4gICAgLy8gICAgICAgICAgICAgY29uc3QgcGFyZW50SW5zdGFuY2UgPSB0aGlzLnBhcmVudDtcbiAgICAvLyAgICAgICAgICAgICBpZiAocGFyZW50SW5zdGFuY2UgJiYgaXMub2JqZWN0M2QocGFyZW50SW5zdGFuY2UudmFsdWUpKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIHJlbW92ZUludGVyYWN0aXZpdHkodGhpcy5fX25ndF9fLnN0YXRlR2V0dGVyLmJpbmQodGhpcy5fX25ndF9fKSwgdGhpcy5pbnN0YW5jZVZhbHVlKTtcbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICBpZiAodGhpcy5pbnN0YW5jZVZhbHVlLmNsZWFyICE9IG51bGwpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgdGhpcy5pbnN0YW5jZVZhbHVlLmNsZWFyKCk7XG4gICAgLy8gICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgfSBlbHNlIHtcbiAgICAvLyAgICAgICAgICAgICAvLyBub24tc2NlbmUgb2JqZWN0c1xuICAgIC8vICAgICAgICAgICAgIGNvbnN0IHByZXZpb3VzQXR0YWNoID0gdGhpcy5fX25ndF9fLmF0dGFjaDtcbiAgICAvLyAgICAgICAgICAgICBpZiAocHJldmlvdXNBdHRhY2ggIT0gbnVsbCkge1xuICAgIC8vICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIHByZXZpb3VzQXR0YWNoID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgICAgICBwcmV2aW91c0F0dGFjaCgpO1xuICAgIC8vICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY29uc3QgcHJldmlvdXNBdHRhY2hWYWx1ZSA9IHRoaXMuX19uZ3RfXy5hdHRhY2hWYWx1ZTtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLl9fbmd0X18ucGFyZW50UmVmICYmIHRoaXMuX19uZ3RfXy5wYXJlbnRSZWYudmFsdWUpIHtcbiAgICAvLyAgICAgICAgICAgICAgICAgICAgICAgICBtdXRhdGUodGhpcy5fX25ndF9fLnBhcmVudFJlZi52YWx1ZSwgcHJldmlvdXNBdHRhY2hWYWx1ZSwgcHJldmlvdXNBdHRhY2gpO1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgfVxuICAgIC8vICAgICAgICAgICAgICAgICB9XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICAgICAgaWYgKHRoaXMuX19uZ3RfXy5wYXJlbnRSZWYgJiYgdGhpcy5fX25ndF9fLnBhcmVudFJlZi52YWx1ZSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgY2hlY2tVcGRhdGUodGhpcy5fX25ndF9fLnBhcmVudFJlZi52YWx1ZSk7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICB9XG4gICAgLy8gICAgICAgICB9XG4gICAgLy9cbiAgICAvLyAgICAgICAgIGNvbnN0IGRpc3Bvc2UgPSAodGhpcy5pbnN0YW5jZVZhbHVlIGFzIE5ndEFueVJlY29yZClbJ2Rpc3Bvc2UnXTtcbiAgICAvLyAgICAgICAgIGlmIChkaXNwb3NlICYmIHR5cGVvZiBkaXNwb3NlID09PSAnZnVuY3Rpb24nKSB7XG4gICAgLy8gICAgICAgICAgICAgZGlzcG9zZS5hcHBseSh0aGlzLmluc3RhbmNlVmFsdWUpO1xuICAgIC8vICAgICAgICAgfVxuICAgIC8vICAgICB9XG4gICAgLy9cbiAgICAvLyAgICAgdGhpcy5zZXQoeyBhdHRhY2g6IFtdIH0pO1xuICAgIC8vICAgICB0aGlzLmluc3RhbmNlUmVmLmNvbXBsZXRlKCk7XG4gICAgLy8gfVxuICAgIC8vXG4gICAgLy8gcHJpdmF0ZSBwcmVwYXJlSW5zdGFuY2UoXG4gICAgLy8gICAgIGluc3RhbmNlOiBUSW5zdGFuY2UsXG4gICAgLy8gICAgIHByZXBhcmVPcHRpb25zOiB7XG4gICAgLy8gICAgICAgICBwYXJlbnRTdGF0ZUdldHRlcj86IE5ndFN0YXRlR2V0dGVyO1xuICAgIC8vICAgICAgICAgcm9vdFN0YXRlR2V0dGVyPzogTmd0U3RhdGVHZXR0ZXI7XG4gICAgLy8gICAgICAgICB1dWlkPzogc3RyaW5nO1xuICAgIC8vICAgICB9ID0ge31cbiAgICAvLyApOiBOZ3RJbnN0YW5jZU5vZGU8VEluc3RhbmNlPiB7XG4gICAgLy8gICAgIGlmICghcHJlcGFyZU9wdGlvbnMucGFyZW50U3RhdGVHZXR0ZXIpIHtcbiAgICAvLyAgICAgICAgIHByZXBhcmVPcHRpb25zLnBhcmVudFN0YXRlR2V0dGVyID0gdGhpcy5zdG9yZS5nZXRTdGF0ZTtcbiAgICAvLyAgICAgfVxuICAgIC8vXG4gICAgLy8gICAgIGlmICghcHJlcGFyZU9wdGlvbnMucm9vdFN0YXRlR2V0dGVyKSB7XG4gICAgLy8gICAgICAgICBwcmVwYXJlT3B0aW9ucy5yb290U3RhdGVHZXR0ZXIgPSB0aGlzLnN0b3JlLnJvb3RTdGF0ZUdldHRlcjtcbiAgICAvLyAgICAgfVxuICAgIC8vXG4gICAgLy8gICAgIGlmIChwcmVwYXJlT3B0aW9ucy51dWlkICYmICd1dWlkJyBpbiBpbnN0YW5jZSkge1xuICAgIC8vICAgICAgICAgKGluc3RhbmNlIGFzIE5ndEFueVJlY29yZClbJ3V1aWQnXSA9IHByZXBhcmVPcHRpb25zLnV1aWQ7XG4gICAgLy8gICAgIH1cbiAgICAvL1xuICAgIC8vICAgICBjb25zdCBwcmVwSW5zdGFuY2UgPSBwcmVwYXJlKFxuICAgIC8vICAgICAgICAgaW5zdGFuY2UsXG4gICAgLy8gICAgICAgICBwcmVwYXJlT3B0aW9ucy5wYXJlbnRTdGF0ZUdldHRlciEsXG4gICAgLy8gICAgICAgICBwcmVwYXJlT3B0aW9ucy5yb290U3RhdGVHZXR0ZXIhLFxuICAgIC8vICAgICAgICAgdGhpcy5wYXJlbnQsXG4gICAgLy8gICAgICAgICB0aGlzLmluc3RhbmNlUmVmLFxuICAgIC8vICAgICAgICAgdGhpcy5pc1ByaW1pdGl2ZVxuICAgIC8vICAgICApO1xuICAgIC8vXG4gICAgLy8gICAgIHRoaXMuaW5zdGFuY2VSZWYuc2V0KHByZXBJbnN0YW5jZSk7XG4gICAgLy9cbiAgICAvLyAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHtcbiAgICAvLyAgICAgICAgIGNvbnN0IHsgbm9BdHRhY2gsIHNraXBXcmFwcGVyIH0gPSB0aGlzLmdldFN0YXRlKCk7XG4gICAgLy8gICAgICAgICBpZiAoIW5vQXR0YWNoICYmICFza2lwV3JhcHBlcikge1xuICAgIC8vICAgICAgICAgICAgIGNvbnN0IHBhcmVudEluc3RhbmNlTm9kZSA9IGdldEluc3RhbmNlTG9jYWxTdGF0ZShnZXRJbnN0YW5jZUxvY2FsU3RhdGUocHJlcEluc3RhbmNlKT8ucGFyZW50UmVmPy52YWx1ZSk7XG4gICAgLy9cbiAgICAvLyAgICAgICAgICAgICBpZiAocGFyZW50SW5zdGFuY2VOb2RlKSB7XG4gICAgLy8gICAgICAgICAgICAgICAgIGlmIChwcmVwSW5zdGFuY2VbJ2lzR3JvdXAnXSkge1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgLy8gZGVidWdnZXI7XG4gICAgLy8gICAgICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgICAgICAgICAgY29uc3QgY29sbGVjdGlvbnMgPSBpcy5vYmplY3QzZChwcmVwSW5zdGFuY2UpXG4gICAgLy8gICAgICAgICAgICAgICAgICAgICA/IHBhcmVudEluc3RhbmNlTm9kZS5vYmplY3RzUmVmc1xuICAgIC8vICAgICAgICAgICAgICAgICAgICAgOiBwYXJlbnRJbnN0YW5jZU5vZGUuaW5zdGFuY2VzUmVmcztcbiAgICAvLyAgICAgICAgICAgICAgICAgY29sbGVjdGlvbnMuc2V0KChzKSA9PiBbLi4ucywgdGhpcy5pbnN0YW5jZVJlZl0pO1xuICAgIC8vICAgICAgICAgICAgIH1cbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgfSk7XG4gICAgLy9cbiAgICAvLyAgICAgcmV0dXJuIHByZXBJbnN0YW5jZTtcbiAgICAvLyB9XG4gICAgLy9cbiAgICAvLyBnZXQgaW5zdGFuY2VSZWYoKTogTmd0UmVmPFRJbnN0YW5jZT4ge1xuICAgIC8vICAgICByZXR1cm4gdGhpcy5nZXRTdGF0ZSgocykgPT4gcy5pbnN0YW5jZVJlZik7XG4gICAgLy8gfVxuICAgIC8vXG4gICAgLy8gZ2V0IGluc3RhbmNlVmFsdWUoKTogVEluc3RhbmNlIHtcbiAgICAvLyAgICAgcmV0dXJuIHRoaXMuaXNSYXcgPyAodGhpcy5pbnN0YW5jZVJlZi52YWx1ZT8udmFsdWVPZigpIGFzIFRJbnN0YW5jZSkgOiB0aGlzLmluc3RhbmNlUmVmLnZhbHVlO1xuICAgIC8vIH1cbiAgICAvL1xuICAgIC8vIGdldCBpbnN0YW5jZUFyZ3MkKCkge1xuICAgIC8vICAgICByZXR1cm4gdGhpcy5zZWxlY3QoKHMpID0+IHMuaW5zdGFuY2VBcmdzKTtcbiAgICAvLyB9XG4gICAgLy9cbiAgICAvLyBnZXQgaW5zdGFuY2VBcmdzKCk6IHVua25vd25bXSB7XG4gICAgLy8gICAgIHJldHVybiB0aGlzLmdldFN0YXRlKChzKSA9PiBzLmluc3RhbmNlQXJncyk7XG4gICAgLy8gfVxuICAgIC8vXG4gICAgLy8gc2V0IGluc3RhbmNlQXJncyh2OiB1bmtub3duIHwgdW5rbm93bltdKSB7XG4gICAgLy8gICAgIGNvbnN0IGFyZ3MgPSBBcnJheS5pc0FycmF5KHYpID8gdiA6IFt2XTtcbiAgICAvLyAgICAgdGhpcy5zZXQoeyBpbnN0YW5jZUFyZ3M6IGFyZ3MgfSk7XG4gICAgLy8gICAgIGlmICh0aGlzLmluc3RhbmNlUmVmICYmIHRoaXMuX19uZ3RfXykge1xuICAgIC8vICAgICAgICAgaWYgKCF0aGlzLl9fbmd0X18ubWVtb2l6ZWQpIHtcbiAgICAvLyAgICAgICAgICAgICB0aGlzLl9fbmd0X18ubWVtb2l6ZWQgPSB7fTtcbiAgICAvLyAgICAgICAgIH1cbiAgICAvLyAgICAgICAgIHRoaXMuX19uZ3RfXy5tZW1vaXplZFsnYXJncyddID0gYXJncztcbiAgICAvLyAgICAgfVxuICAgIC8vIH1cbiAgICAvL1xuICAgIC8vIGdldCBfX25ndF9fKCk6IE5ndEluc3RhbmNlTG9jYWxTdGF0ZSB7XG4gICAgLy8gICAgIHJldHVybiBnZXRJbnN0YW5jZUxvY2FsU3RhdGUodGhpcy5pc1JhdyA/IHRoaXMuaW5zdGFuY2VSZWYudmFsdWUgOiB0aGlzLmluc3RhbmNlVmFsdWUpIGFzIE5ndEluc3RhbmNlTG9jYWxTdGF0ZTtcbiAgICAvLyB9XG4gICAgLy9cbiAgICAvLyBnZXQgcGFyZW50KCk6IE5ndFJlZiB7XG4gICAgLy8gICAgIGlmICghdGhpcy5nZXRTdGF0ZSgocykgPT4gcy5za2lwV3JhcHBlcikpIHJldHVybiB0aGlzLnBhcmVudFJlZj8uKCk7XG4gICAgLy8gICAgIHJldHVybiB0aGlzLnBhcmVudEhvc3RSZWY/LigpIHx8IHRoaXMucGFyZW50UmVmPy4oKTtcbiAgICAvLyB9XG4gICAgLy9cbiAgICAvLyBnZXQgY2FuSW5pdCgpIHtcbiAgICAvLyAgICAgcmV0dXJuICF0aGlzLmlzV3JhcHBlciAmJiAhdGhpcy5nZXRTdGF0ZSgocykgPT4gcy5za2lwSW5pdCk7XG4gICAgLy8gfVxufVxuXG5leHBvcnQgY29uc3QgTkdUX0lOU1RBTkNFX0lOUFVUUyA9IFtcbiAgICAncmVmJyxcbiAgICAnYXR0YWNoJyxcbiAgICAnc2tpcFdyYXBwZXInLFxuICAgICdza2lwSW5pdCcsXG4gICAgJ25vQXR0YWNoJyxcbiAgICAnYmVmb3JlUmVuZGVyJyxcbiAgICAncHJpb3JpdHknLFxuICAgICd1cGRhdGVDYWxsYmFjaycsXG4gICAgJ3JlYWR5Q2FsbGJhY2snLFxuXTtcblxuZXhwb3J0IGNvbnN0IE5HVF9JTlNUQU5DRV9PVVRQVVRTID0gWy4uLnN1cHBvcnRlZEV2ZW50c107XG4iXX0=
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { BehaviorSubject } from 'rxjs';
|
|
2
|
+
export class NgtRef extends BehaviorSubject {
|
|
3
|
+
constructor(value) {
|
|
4
|
+
super(value ? value : null);
|
|
5
|
+
}
|
|
6
|
+
set(valueOrFactory) {
|
|
7
|
+
if (typeof valueOrFactory === 'function') {
|
|
8
|
+
this.next(valueOrFactory(this.value));
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
this.next(valueOrFactory);
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVmLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci10aHJlZS9zcmMvbGliL3JlZi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBRXZDLE1BQU0sT0FBTyxNQUFnQixTQUFRLGVBQWtCO0lBQ25ELFlBQVksS0FBZ0I7UUFDeEIsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxJQUFLLENBQUMsQ0FBQztJQUNqQyxDQUFDO0lBRUQsR0FBRyxDQUFDLGNBQXdDO1FBQ3hDLElBQUksT0FBTyxjQUFjLEtBQUssVUFBVSxFQUFFO1lBQ3RDLElBQUksQ0FBQyxJQUFJLENBQUUsY0FBcUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztTQUNqRTthQUFNO1lBQ0gsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztTQUM3QjtJQUNMLENBQUM7Q0FDSiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEJlaGF2aW9yU3ViamVjdCB9IGZyb20gJ3J4anMnO1xuXG5leHBvcnQgY2xhc3MgTmd0UmVmPFQgPSBhbnk+IGV4dGVuZHMgQmVoYXZpb3JTdWJqZWN0PFQ+IHtcbiAgICBjb25zdHJ1Y3Rvcih2YWx1ZT86IFQgfCBudWxsKSB7XG4gICAgICAgIHN1cGVyKHZhbHVlID8gdmFsdWUgOiBudWxsISk7XG4gICAgfVxuXG4gICAgc2V0KHZhbHVlT3JGYWN0b3J5OiBUIHwgKChwcmV2aW91czogVCkgPT4gVCkpIHtcbiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZU9yRmFjdG9yeSA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgdGhpcy5uZXh0KCh2YWx1ZU9yRmFjdG9yeSBhcyAocHJldmlvdXM6IFQpID0+IFQpKHRoaXMudmFsdWUpKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMubmV4dCh2YWx1ZU9yRmFjdG9yeSk7XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Injectable } from '@angular/core';
|
|
2
|
+
import { catchError, forkJoin, from, map, of, ReplaySubject, retry, share, tap } from 'rxjs';
|
|
3
|
+
import { buildGraph } from '../utils/build-graph';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
export class NgtLoader {
|
|
6
|
+
constructor() {
|
|
7
|
+
this.cached = new Map();
|
|
8
|
+
}
|
|
9
|
+
use(loadConstructor, input, extensions, onProgress) {
|
|
10
|
+
const urls = Array.isArray(input) ? input : [input];
|
|
11
|
+
const loader = new loadConstructor();
|
|
12
|
+
if (extensions) {
|
|
13
|
+
extensions(loader);
|
|
14
|
+
}
|
|
15
|
+
const observables$ = urls.map((url) => {
|
|
16
|
+
if (!this.cached.has(url)) {
|
|
17
|
+
this.cached.set(url, from(loader.loadAsync(url, onProgress)).pipe(tap((data) => {
|
|
18
|
+
if (data.scene) {
|
|
19
|
+
Object.assign(data, buildGraph(data.scene));
|
|
20
|
+
}
|
|
21
|
+
}), retry(2), catchError((err) => {
|
|
22
|
+
console.error(`[NgtLoader]: Error loading ${url}: ${err.message}`);
|
|
23
|
+
return of(null);
|
|
24
|
+
}), share({
|
|
25
|
+
connector: () => new ReplaySubject(1),
|
|
26
|
+
resetOnComplete: true,
|
|
27
|
+
resetOnRefCountZero: true,
|
|
28
|
+
resetOnError: true,
|
|
29
|
+
})));
|
|
30
|
+
}
|
|
31
|
+
return this.cached.get(url);
|
|
32
|
+
});
|
|
33
|
+
return forkJoin(observables$).pipe(map((results) => (Array.isArray(input) ? results : results[0])));
|
|
34
|
+
}
|
|
35
|
+
destroy() {
|
|
36
|
+
this.cached.clear();
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
NgtLoader.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtLoader, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
40
|
+
NgtLoader.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtLoader, providedIn: 'root' });
|
|
41
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.0.0", ngImport: i0, type: NgtLoader, decorators: [{
|
|
42
|
+
type: Injectable,
|
|
43
|
+
args: [{ providedIn: 'root' }]
|
|
44
|
+
}] });
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibG9hZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvYW5ndWxhci10aHJlZS9zcmMvbGliL3NlcnZpY2VzL2xvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxHQUFHLEVBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLEdBQUcsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQVN6RyxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7O0FBR2xELE1BQU0sT0FBTyxTQUFTO0lBRHRCO1FBRXFCLFdBQU0sR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0tBa0R2QztJQWhERyxHQUFHLENBQ0MsZUFBZ0UsRUFDaEUsS0FBVyxFQUNYLFVBQWdDLEVBQ2hDLFVBQTJDO1FBSTNDLE1BQU0sSUFBSSxHQUFHLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUNwRCxNQUFNLE1BQU0sR0FBRyxJQUFJLGVBQWUsRUFBRSxDQUFDO1FBQ3JDLElBQUksVUFBVSxFQUFFO1lBQ1osVUFBVSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1NBQ3RCO1FBRUQsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQ2xDLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDdkIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQ1gsR0FBRyxFQUNILElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEdBQUcsRUFBRSxVQUFVLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FDeEMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUU7b0JBQ1QsSUFBSSxJQUFJLENBQUMsS0FBSyxFQUFFO3dCQUNaLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLFVBQVUsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQztxQkFDL0M7Z0JBQ0wsQ0FBQyxDQUFDLEVBQ0YsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUNSLFVBQVUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO29CQUNmLE9BQU8sQ0FBQyxLQUFLLENBQUMsOEJBQThCLEdBQUcsS0FBSyxHQUFHLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztvQkFDbkUsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7Z0JBQ3BCLENBQUMsQ0FBQyxFQUNGLEtBQUssQ0FBQztvQkFDRixTQUFTLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxhQUFhLENBQUMsQ0FBQyxDQUFDO29CQUNyQyxlQUFlLEVBQUUsSUFBSTtvQkFDckIsbUJBQW1CLEVBQUUsSUFBSTtvQkFDekIsWUFBWSxFQUFFLElBQUk7aUJBQ3JCLENBQUMsQ0FDTCxDQUNKLENBQUM7YUFDTDtZQUVELE9BQU8sSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDaEMsQ0FBQyxDQUFDLENBQUM7UUFFSCxPQUFPLFFBQVEsQ0FBQyxZQUFZLENBQUMsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQyxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0lBQ3hHLENBQUM7SUFFRCxPQUFPO1FBQ0gsSUFBSSxDQUFDLE1BQU0sQ0FBQyxLQUFLLEVBQUUsQ0FBQztJQUN4QixDQUFDOztzR0FsRFEsU0FBUzswR0FBVCxTQUFTLGNBREksTUFBTTsyRkFDbkIsU0FBUztrQkFEckIsVUFBVTttQkFBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBjYXRjaEVycm9yLCBmb3JrSm9pbiwgZnJvbSwgbWFwLCBPYnNlcnZhYmxlLCBvZiwgUmVwbGF5U3ViamVjdCwgcmV0cnksIHNoYXJlLCB0YXAgfSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEdMVEYgfSBmcm9tICd0aHJlZS9leGFtcGxlcy9qc20vbG9hZGVycy9HTFRGTG9hZGVyJztcbmltcG9ydCB0eXBlIHtcbiAgICBOZ3RBbnlDb25zdHJ1Y3RvcixcbiAgICBOZ3RCcmFuY2hpbmdSZXR1cm4sXG4gICAgTmd0TG9hZGVyRXh0ZW5zaW9ucyxcbiAgICBOZ3RMb2FkZXJSZXN1bHQsXG4gICAgTmd0T2JqZWN0TWFwLFxufSBmcm9tICcuLi90eXBlcyc7XG5pbXBvcnQgeyBidWlsZEdyYXBoIH0gZnJvbSAnLi4vdXRpbHMvYnVpbGQtZ3JhcGgnO1xuXG5ASW5qZWN0YWJsZSh7IHByb3ZpZGVkSW46ICdyb290JyB9KVxuZXhwb3J0IGNsYXNzIE5ndExvYWRlciB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBjYWNoZWQgPSBuZXcgTWFwKCk7XG5cbiAgICB1c2U8VFJldHVyblR5cGUsIFRVcmwgZXh0ZW5kcyBzdHJpbmcgfCBzdHJpbmdbXT4oXG4gICAgICAgIGxvYWRDb25zdHJ1Y3RvcjogTmd0QW55Q29uc3RydWN0b3I8Tmd0TG9hZGVyUmVzdWx0PFRSZXR1cm5UeXBlPj4sXG4gICAgICAgIGlucHV0OiBUVXJsLFxuICAgICAgICBleHRlbnNpb25zPzogTmd0TG9hZGVyRXh0ZW5zaW9ucyxcbiAgICAgICAgb25Qcm9ncmVzcz86IChldmVudDogUHJvZ3Jlc3NFdmVudCkgPT4gdm9pZFxuICAgICk6IFRVcmwgZXh0ZW5kcyBzdHJpbmdbXVxuICAgICAgICA/IE9ic2VydmFibGU8QXJyYXk8Tmd0QnJhbmNoaW5nUmV0dXJuPFRSZXR1cm5UeXBlLCBHTFRGLCBHTFRGICYgTmd0T2JqZWN0TWFwPj4+XG4gICAgICAgIDogT2JzZXJ2YWJsZTxOZ3RCcmFuY2hpbmdSZXR1cm48VFJldHVyblR5cGUsIEdMVEYsIEdMVEYgJiBOZ3RPYmplY3RNYXA+PiB7XG4gICAgICAgIGNvbnN0IHVybHMgPSBBcnJheS5pc0FycmF5KGlucHV0KSA/IGlucHV0IDogW2lucHV0XTtcbiAgICAgICAgY29uc3QgbG9hZGVyID0gbmV3IGxvYWRDb25zdHJ1Y3RvcigpO1xuICAgICAgICBpZiAoZXh0ZW5zaW9ucykge1xuICAgICAgICAgICAgZXh0ZW5zaW9ucyhsb2FkZXIpO1xuICAgICAgICB9XG5cbiAgICAgICAgY29uc3Qgb2JzZXJ2YWJsZXMkID0gdXJscy5tYXAoKHVybCkgPT4ge1xuICAgICAgICAgICAgaWYgKCF0aGlzLmNhY2hlZC5oYXModXJsKSkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2FjaGVkLnNldChcbiAgICAgICAgICAgICAgICAgICAgdXJsLFxuICAgICAgICAgICAgICAgICAgICBmcm9tKGxvYWRlci5sb2FkQXN5bmModXJsLCBvblByb2dyZXNzKSkucGlwZShcbiAgICAgICAgICAgICAgICAgICAgICAgIHRhcCgoZGF0YSkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChkYXRhLnNjZW5lKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9iamVjdC5hc3NpZ24oZGF0YSwgYnVpbGRHcmFwaChkYXRhLnNjZW5lKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfSksXG4gICAgICAgICAgICAgICAgICAgICAgICByZXRyeSgyKSxcbiAgICAgICAgICAgICAgICAgICAgICAgIGNhdGNoRXJyb3IoKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFtOZ3RMb2FkZXJdOiBFcnJvciBsb2FkaW5nICR7dXJsfTogJHtlcnIubWVzc2FnZX1gKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2YobnVsbCk7XG4gICAgICAgICAgICAgICAgICAgICAgICB9KSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYXJlKHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25uZWN0b3I6ICgpID0+IG5ldyBSZXBsYXlTdWJqZWN0KDEpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0T25Db21wbGV0ZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXNldE9uUmVmQ291bnRaZXJvOiB0cnVlLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJlc2V0T25FcnJvcjogdHJ1ZSxcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICAgICAgICAgIClcbiAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gdGhpcy5jYWNoZWQuZ2V0KHVybCk7XG4gICAgICAgIH0pO1xuXG4gICAgICAgIHJldHVybiBmb3JrSm9pbihvYnNlcnZhYmxlcyQpLnBpcGUobWFwKChyZXN1bHRzKSA9PiAoQXJyYXkuaXNBcnJheShpbnB1dCkgPyByZXN1bHRzIDogcmVzdWx0c1swXSkpKTtcbiAgICB9XG5cbiAgICBkZXN0cm95KCkge1xuICAgICAgICB0aGlzLmNhY2hlZC5jbGVhcigpO1xuICAgIH1cbn1cbiJdfQ==
|