angular-three-cannon 2.0.0-beta.25 → 2.0.0-beta.251

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/body/README.md +3 -0
  2. package/body/index.d.ts +2 -0
  3. package/body/lib/body.d.ts +17 -0
  4. package/body/lib/types.d.ts +49 -0
  5. package/body/lib/utils.d.ts +50 -0
  6. package/constraint/README.md +3 -0
  7. package/constraint/index.d.ts +1 -0
  8. package/constraint/lib/constraint.d.ts +32 -0
  9. package/debug/lib/debug.d.ts +22 -19
  10. package/esm2022/body/angular-three-cannon-body.mjs +5 -0
  11. package/esm2022/body/index.mjs +2 -0
  12. package/esm2022/body/lib/body.mjs +108 -0
  13. package/esm2022/body/lib/types.mjs +2 -0
  14. package/esm2022/body/lib/utils.mjs +193 -0
  15. package/esm2022/constraint/angular-three-cannon-constraint.mjs +5 -0
  16. package/esm2022/constraint/index.mjs +2 -0
  17. package/esm2022/constraint/lib/constraint.mjs +72 -0
  18. package/esm2022/debug/lib/debug.mjs +49 -62
  19. package/esm2022/lib/physics.mjs +84 -177
  20. package/fesm2022/angular-three-cannon-body.mjs +306 -0
  21. package/fesm2022/angular-three-cannon-body.mjs.map +1 -0
  22. package/fesm2022/angular-three-cannon-constraint.mjs +79 -0
  23. package/fesm2022/angular-three-cannon-constraint.mjs.map +1 -0
  24. package/fesm2022/angular-three-cannon-debug.mjs +48 -61
  25. package/fesm2022/angular-three-cannon-debug.mjs.map +1 -1
  26. package/fesm2022/angular-three-cannon.mjs +84 -177
  27. package/fesm2022/angular-three-cannon.mjs.map +1 -1
  28. package/lib/physics.d.ts +33 -48
  29. package/package.json +18 -12
  30. package/esm2022/services/angular-three-cannon-services.mjs +0 -5
  31. package/esm2022/services/index.mjs +0 -7
  32. package/esm2022/services/lib/body.mjs +0 -293
  33. package/esm2022/services/lib/constraints.mjs +0 -59
  34. package/esm2022/services/lib/contact-material.mjs +0 -20
  35. package/esm2022/services/lib/ray.mjs +0 -30
  36. package/esm2022/services/lib/raycast-vehicle.mjs +0 -68
  37. package/esm2022/services/lib/spring.mjs +0 -31
  38. package/fesm2022/angular-three-cannon-services.mjs +0 -490
  39. package/fesm2022/angular-three-cannon-services.mjs.map +0 -1
  40. package/services/README.md +0 -3
  41. package/services/index.d.ts +0 -6
  42. package/services/lib/body.d.ts +0 -60
  43. package/services/lib/constraints.d.ts +0 -31
  44. package/services/lib/contact-material.d.ts +0 -9
  45. package/services/lib/ray.d.ts +0 -12
  46. package/services/lib/raycast-vehicle.d.ts +0 -30
  47. package/services/lib/spring.d.ts +0 -19
package/body/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # angular-three-cannon/body
2
+
3
+ Secondary entry point of `angular-three-cannon`. It can be used by importing from `angular-three-cannon/body`.
@@ -0,0 +1,2 @@
1
+ export * from './lib/body';
2
+ export type * from './lib/types';
@@ -0,0 +1,17 @@
1
+ import { ElementRef, Injector, Signal } from '@angular/core';
2
+ import { BodyShapeType } from '@pmndrs/cannon-worker-api';
3
+ import { Object3D } from 'three';
4
+ import { NgtcArgFn, NgtcBodyPropsMap, NgtcBodyPublicApi, NgtcGetByIndex } from './types';
5
+ export interface NgtcBodyOptions<TShape extends BodyShapeType> {
6
+ transformArgs?: NgtcArgFn<NgtcBodyPropsMap[TShape]>;
7
+ injector?: Injector;
8
+ }
9
+ export declare const injectBox: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").BoxProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Box"> | undefined) => Signal<NgtcBodyPublicApi | null>;
10
+ export declare const injectConvexPolyhedron: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").ConvexPolyhedronProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"ConvexPolyhedron"> | undefined) => Signal<NgtcBodyPublicApi | null>;
11
+ export declare const injectCylinder: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").CylinderProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Cylinder"> | undefined) => Signal<NgtcBodyPublicApi | null>;
12
+ export declare const injectHeightfield: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").HeightfieldProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Heightfield"> | undefined) => Signal<NgtcBodyPublicApi | null>;
13
+ export declare const injectParticle: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").ParticleProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Particle"> | undefined) => Signal<NgtcBodyPublicApi | null>;
14
+ export declare const injectPlane: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").PlaneProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Plane"> | undefined) => Signal<NgtcBodyPublicApi | null>;
15
+ export declare const injectSphere: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").SphereProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Sphere"> | undefined) => Signal<NgtcBodyPublicApi | null>;
16
+ export declare const injectTrimesh: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").TrimeshProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Trimesh"> | undefined) => Signal<NgtcBodyPublicApi | null>;
17
+ export declare const injectCompound: <TObject extends Object3D<import("three").Object3DEventMap>>(getPropFn: NgtcGetByIndex<import("@pmndrs/cannon-worker-api").CompoundBodyProps>, ref: TObject | ElementRef<TObject> | Signal<TObject | ElementRef<TObject> | undefined>, options?: NgtcBodyOptions<"Compound"> | undefined) => Signal<NgtcBodyPublicApi | null>;
@@ -0,0 +1,49 @@
1
+ import { AtomicName, AtomicProps, BodyProps, BoxProps, CompoundBodyProps, ConvexPolyhedronProps, CylinderProps, HeightfieldProps, ParticleProps, PlaneProps, Quad, SphereProps, TrimeshProps, Triplet, VectorName } from '@pmndrs/cannon-worker-api';
2
+ import { Euler, Quaternion, Vector3 } from 'three';
3
+ export interface NgtcAtomicApi<K extends AtomicName> {
4
+ set: (value: AtomicProps[K]) => void;
5
+ subscribe: (callback: (value: AtomicProps[K]) => void) => () => void;
6
+ }
7
+ export interface NgtcQuaternionApi {
8
+ copy: ({ w, x, y, z }: Quaternion) => void;
9
+ set: (x: number, y: number, z: number, w: number) => void;
10
+ subscribe: (callback: (value: Quad) => void) => () => void;
11
+ }
12
+ export interface NgtcVectorApi {
13
+ copy: ({ x, y, z }: Vector3 | Euler) => void;
14
+ set: (x: number, y: number, z: number) => void;
15
+ subscribe: (callback: (value: Triplet) => void) => () => void;
16
+ }
17
+ export type NgtcWorkerApi = {
18
+ [K in AtomicName]: NgtcAtomicApi<K>;
19
+ } & {
20
+ [K in VectorName]: NgtcVectorApi;
21
+ } & {
22
+ applyForce: (force: Triplet, worldPoint: Triplet) => void;
23
+ applyImpulse: (impulse: Triplet, worldPoint: Triplet) => void;
24
+ applyLocalForce: (force: Triplet, localPoint: Triplet) => void;
25
+ applyLocalImpulse: (impulse: Triplet, localPoint: Triplet) => void;
26
+ applyTorque: (torque: Triplet) => void;
27
+ quaternion: NgtcQuaternionApi;
28
+ rotation: NgtcVectorApi;
29
+ scaleOverride: (scale: Triplet) => void;
30
+ sleep: () => void;
31
+ wakeUp: () => void;
32
+ remove: () => void;
33
+ };
34
+ export interface NgtcBodyPublicApi extends NgtcWorkerApi {
35
+ at: (index: number) => NgtcWorkerApi;
36
+ }
37
+ export interface NgtcBodyPropsMap {
38
+ Plane: PlaneProps;
39
+ Box: BoxProps;
40
+ Particle: ParticleProps;
41
+ Cylinder: CylinderProps;
42
+ Sphere: SphereProps;
43
+ Trimesh: TrimeshProps;
44
+ Heightfield: HeightfieldProps;
45
+ ConvexPolyhedron: ConvexPolyhedronProps;
46
+ Compound: CompoundBodyProps;
47
+ }
48
+ export type NgtcGetByIndex<T extends BodyProps> = (index: number) => T;
49
+ export type NgtcArgFn<T extends BodyProps> = (args: NonNullable<T['args']>) => typeof args;
@@ -0,0 +1,50 @@
1
+ import { BodyProps, BoxProps, CannonWorkerAPI, CompoundBodyProps, ConvexPolyhedronArgs, CylinderArgs, HeightfieldArgs, ParticleProps, PlaneProps, PropValue, SphereArgs, SubscriptionName, SubscriptionTarget, Subscriptions, TrimeshArgs, Triplet } from '@pmndrs/cannon-worker-api';
2
+ import { NgtcCannonEvents, NgtcPhysicsApi } from 'angular-three-cannon';
3
+ import { Object3D } from 'three';
4
+ import { NgtcWorkerApi } from './types';
5
+ export declare function createSubscribe<T extends SubscriptionName>(body: Object3D, worker: CannonWorkerAPI, subscriptions: Subscriptions, type: T, index?: number, target?: SubscriptionTarget): (callback: (value: PropValue<T>) => void) => () => void;
6
+ export declare function prepare(object: Object3D, { position, rotation, userData }: BodyProps): void;
7
+ export declare function setupCollision(events: NgtcCannonEvents, { onCollide, onCollideBegin, onCollideEnd }: Partial<BodyProps>, uuid: string): void;
8
+ export declare function makeBodyApi(body: Object3D, worker: CannonWorkerAPI, { subscriptions, scaleOverrides }: NgtcPhysicsApi): {
9
+ at: (index: number) => NgtcWorkerApi;
10
+ allowSleep: import("./types").NgtcAtomicApi<"allowSleep">;
11
+ angularDamping: import("./types").NgtcAtomicApi<"angularDamping">;
12
+ collisionFilterGroup: import("./types").NgtcAtomicApi<"collisionFilterGroup">;
13
+ collisionFilterMask: import("./types").NgtcAtomicApi<"collisionFilterMask">;
14
+ collisionResponse: import("./types").NgtcAtomicApi<"collisionResponse">;
15
+ fixedRotation: import("./types").NgtcAtomicApi<"fixedRotation">;
16
+ isTrigger: import("./types").NgtcAtomicApi<"isTrigger">;
17
+ linearDamping: import("./types").NgtcAtomicApi<"linearDamping">;
18
+ mass: import("./types").NgtcAtomicApi<"mass">;
19
+ material: import("./types").NgtcAtomicApi<"material">;
20
+ sleepSpeedLimit: import("./types").NgtcAtomicApi<"sleepSpeedLimit">;
21
+ sleepTimeLimit: import("./types").NgtcAtomicApi<"sleepTimeLimit">;
22
+ userData: import("./types").NgtcAtomicApi<"userData">;
23
+ angularFactor: import("./types").NgtcVectorApi;
24
+ angularVelocity: import("./types").NgtcVectorApi;
25
+ linearFactor: import("./types").NgtcVectorApi;
26
+ position: import("./types").NgtcVectorApi;
27
+ velocity: import("./types").NgtcVectorApi;
28
+ applyForce: (force: Triplet, worldPoint: Triplet) => void;
29
+ applyImpulse: (impulse: Triplet, worldPoint: Triplet) => void;
30
+ applyLocalForce: (force: Triplet, localPoint: Triplet) => void;
31
+ applyLocalImpulse: (impulse: Triplet, localPoint: Triplet) => void;
32
+ applyTorque: (torque: Triplet) => void;
33
+ quaternion: import("./types").NgtcQuaternionApi;
34
+ rotation: import("./types").NgtcVectorApi;
35
+ scaleOverride: (scale: Triplet) => void;
36
+ sleep: () => void;
37
+ wakeUp: () => void;
38
+ remove: () => void;
39
+ };
40
+ export declare const defaultTransformArgs: {
41
+ Plane: (args: PlaneProps['args']) => never[];
42
+ Box: (args?: BoxProps['args']) => Triplet;
43
+ Trimesh: (args: TrimeshArgs) => TrimeshArgs;
44
+ Cylinder: (args?: CylinderArgs) => never[];
45
+ Heightfield: (args: HeightfieldArgs) => HeightfieldArgs;
46
+ ConvexPolyhedron: ([vertices, faces, normals, axes, boundingSphereRadius]?: ConvexPolyhedronArgs) => (number | number[][] | undefined)[];
47
+ Particle: (args: ParticleProps['args']) => never[];
48
+ Sphere: (args?: SphereArgs) => number[];
49
+ Compound: (args: CompoundBodyProps['args']) => unknown[] | undefined;
50
+ };
@@ -0,0 +1,3 @@
1
+ # angular-three-cannon/constraint
2
+
3
+ Secondary entry point of `angular-three-cannon`. It can be used by importing from `angular-three-cannon/constraint`.
@@ -0,0 +1 @@
1
+ export * from './lib/constraint';
@@ -0,0 +1,32 @@
1
+ import { ElementRef, Injector, Signal } from '@angular/core';
2
+ import { ConeTwistConstraintOpts, ConstraintTypes, DistanceConstraintOpts, HingeConstraintOpts, LockConstraintOpts, PointToPointConstraintOpts } from '@pmndrs/cannon-worker-api';
3
+ import { Object3D } from 'three';
4
+ export interface NgtcConstraintApi {
5
+ disable: () => void;
6
+ enable: () => void;
7
+ remove: () => void;
8
+ }
9
+ export interface NgtcHingeConstraintApi extends NgtcConstraintApi {
10
+ disableMotor: () => void;
11
+ enableMotor: () => void;
12
+ setMotorMaxForce: (value: number) => void;
13
+ setMotorSpeed: (value: number) => void;
14
+ }
15
+ export type NgtcConstraintORHingeApi<T extends 'Hinge' | ConstraintTypes> = T extends ConstraintTypes ? NgtcConstraintApi : NgtcHingeConstraintApi;
16
+ export type NgtcConstraintOptionsMap = {
17
+ ConeTwist: ConeTwistConstraintOpts;
18
+ PointToPoint: PointToPointConstraintOpts;
19
+ Distance: DistanceConstraintOpts;
20
+ Lock: LockConstraintOpts;
21
+ Hinge: HingeConstraintOpts;
22
+ };
23
+ export type NgtcConstraintOptions<TConstraintType extends 'Hinge' | ConstraintTypes> = {
24
+ injector?: Injector;
25
+ disableOnStart?: boolean;
26
+ options?: NgtcConstraintOptionsMap[TConstraintType];
27
+ };
28
+ export declare const injectPointToPoint: <A extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>, B extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"PointToPoint"> | undefined) => Signal<NgtcConstraintApi | null>;
29
+ export declare const injectConeTwist: <A extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>, B extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"ConeTwist"> | undefined) => Signal<NgtcConstraintApi | null>;
30
+ export declare const injectDistance: <A extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>, B extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"Distance"> | undefined) => Signal<NgtcConstraintApi | null>;
31
+ export declare const injectLock: <A extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>, B extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"Lock"> | undefined) => Signal<NgtcConstraintApi | null>;
32
+ export declare const injectHinge: <A extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>, B extends Object3D<import("three").Object3DEventMap> = Object3D<import("three").Object3DEventMap>>(bodyA: A | ElementRef<A> | Signal<A | ElementRef<A> | undefined>, bodyB: B | ElementRef<B> | Signal<B | ElementRef<B> | undefined>, options?: NgtcConstraintOptions<"Hinge"> | undefined) => Signal<NgtcConstraintApi | null>;
@@ -1,43 +1,46 @@
1
- import { type OnInit } from '@angular/core';
2
- import { type BodyProps, type BodyShapeType } from '@pmndrs/cannon-worker-api';
1
+ import { BodyProps, BodyShapeType } from '@pmndrs/cannon-worker-api';
3
2
  import CannonDebugger from 'cannon-es-debugger';
4
- import * as THREE from 'three';
5
3
  import * as i0 from "@angular/core";
6
4
  export declare const injectNgtcDebugApi: {
7
5
  (): {
8
6
  add: (uuid: string, props: BodyProps, type: BodyShapeType) => void;
9
- remove: (id: string) => void;
7
+ remove: (uuid: string) => void;
10
8
  };
11
9
  (injectOptions: import("@angular/core").InjectOptions & {
12
10
  optional?: false | undefined;
11
+ } & {
12
+ injector?: import("@angular/core").Injector | undefined;
13
13
  }): {
14
14
  add: (uuid: string, props: BodyProps, type: BodyShapeType) => void;
15
- remove: (id: string) => void;
15
+ remove: (uuid: string) => void;
16
16
  };
17
- (injectOptions: import("@angular/core").InjectOptions): {
17
+ (injectOptions: import("@angular/core").InjectOptions & {
18
+ injector?: import("@angular/core").Injector | undefined;
19
+ }): {
18
20
  add: (uuid: string, props: BodyProps, type: BodyShapeType) => void;
19
- remove: (id: string) => void;
21
+ remove: (uuid: string) => void;
20
22
  } | null;
21
- }, provideNgtcDebugApi: (value?: {
22
- add: (uuid: string, props: BodyProps, type: BodyShapeType) => void;
23
- remove: (id: string) => void;
24
- } | undefined) => import("@angular/core").Provider;
25
- export declare class NgtcDebug implements OnInit {
23
+ }, provideNgtcDebugApi: () => import("@angular/core").Provider;
24
+ export interface NgtcDebugInputs {
25
+ enabled: boolean;
26
26
  color: string;
27
- scale: number;
28
27
  impl: typeof CannonDebugger;
29
- disabled: boolean;
28
+ scale: number;
29
+ }
30
+ export declare class NgtcDebug {
31
+ private store;
32
+ private physicsApi;
33
+ debug: import("@angular/core").InputSignalWithTransform<NgtcDebugInputs, "" | Partial<NgtcDebugInputs>>;
34
+ private defaultScene;
35
+ private scene;
30
36
  private bodies;
31
37
  private bodyMap;
32
- private physicsApi;
33
- scene: THREE.Scene;
34
38
  private cannonDebugger;
35
39
  api: {
36
40
  add: (uuid: string, props: BodyProps, type: BodyShapeType) => void;
37
- remove: (id: string) => void;
41
+ remove: (uuid: string) => void;
38
42
  };
39
43
  constructor();
40
- ngOnInit(): void;
41
44
  static ɵfac: i0.ɵɵFactoryDeclaration<NgtcDebug, never>;
42
- static ɵcmp: i0.ɵɵComponentDeclaration<NgtcDebug, "ngtc-debug", never, { "color": { "alias": "color"; "required": false; }; "scale": { "alias": "scale"; "required": false; }; "impl": { "alias": "impl"; "required": false; }; "disabled": { "alias": "disabled"; "required": false; }; }, {}, never, ["*"], true, never>;
45
+ static ɵdir: i0.ɵɵDirectiveDeclaration<NgtcDebug, "ngtc-physics[debug]", never, { "debug": { "alias": "debug"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
43
46
  }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1jYW5ub24tYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL2JvZHkvc3JjL2FuZ3VsYXItdGhyZWUtY2Fubm9uLWJvZHkudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -0,0 +1,2 @@
1
+ export * from './lib/body';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2Nhbm5vbi9ib2R5L3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2JvZHknO1xuZXhwb3J0IHR5cGUgKiBmcm9tICcuL2xpYi90eXBlcyc7XG4iXX0=
@@ -0,0 +1,108 @@
1
+ import { afterNextRender, computed, isSignal, signal, untracked, } from '@angular/core';
2
+ import { resolveRef } from 'angular-three';
3
+ import { injectPhysicsApi } from 'angular-three-cannon';
4
+ import { injectNgtcDebugApi } from 'angular-three-cannon/debug';
5
+ import { assertInjector } from 'ngxtension/assert-injector';
6
+ import { injectAutoEffect } from 'ngxtension/auto-effect';
7
+ import { DynamicDrawUsage, InstancedMesh, Object3D } from 'three';
8
+ import { defaultTransformArgs, makeBodyApi, prepare, setupCollision } from './utils';
9
+ function createInjectBody(type) {
10
+ return (getPropFn, ref, options) => injectBody(type, getPropFn, ref, options);
11
+ }
12
+ function injectBody(type, getPropFn, ref, { transformArgs, injector } = {}) {
13
+ return assertInjector(injectBody, injector, () => {
14
+ const physicsApi = injectPhysicsApi({ optional: true });
15
+ if (!physicsApi) {
16
+ throw new Error(`[NGT Cannon] injectBody was called outside of <ngtc-physics>`);
17
+ }
18
+ const autoEffect = injectAutoEffect();
19
+ const debugApi = injectNgtcDebugApi({ optional: true });
20
+ const { add: addToDebug, remove: removeFromDebug } = debugApi || {};
21
+ const transform = transformArgs ?? defaultTransformArgs[type];
22
+ const bodyRef = isSignal(ref) ? ref : signal(ref);
23
+ const body = computed(() => resolveRef(bodyRef()));
24
+ const api = computed(() => {
25
+ const _body = body();
26
+ if (!_body)
27
+ return null;
28
+ const { worker, ...rest } = physicsApi;
29
+ if (!worker())
30
+ return null;
31
+ return makeBodyApi(_body, worker(), physicsApi);
32
+ });
33
+ afterNextRender(() => {
34
+ autoEffect(() => {
35
+ const currentWorker = physicsApi.worker();
36
+ if (!currentWorker)
37
+ return;
38
+ const object = body();
39
+ if (!isSignal(ref) && !object) {
40
+ untracked(() => {
41
+ bodyRef.set(resolveRef(ref));
42
+ });
43
+ return;
44
+ }
45
+ if (!object)
46
+ return;
47
+ const [uuid, props] = (() => {
48
+ let uuids = [];
49
+ let temp;
50
+ if (object instanceof InstancedMesh) {
51
+ object.instanceMatrix.setUsage(DynamicDrawUsage);
52
+ uuids = new Array(object.count).fill(0).map((_, i) => `${object.uuid}/${i}`);
53
+ temp = new Object3D();
54
+ }
55
+ else {
56
+ uuids = [object.uuid];
57
+ }
58
+ return [
59
+ uuids,
60
+ uuids.map((id, index) => {
61
+ const props = getPropFn(index);
62
+ if (temp) {
63
+ prepare(temp, props);
64
+ object.setMatrixAt(index, temp.matrix);
65
+ object.instanceMatrix.needsUpdate = true;
66
+ }
67
+ else {
68
+ prepare(object, props);
69
+ }
70
+ physicsApi.refs[id] = object;
71
+ addToDebug?.(id, props, type);
72
+ setupCollision(physicsApi.events, props, id);
73
+ // @ts-expect-error - if args is undefined, there's default
74
+ return { ...props, args: transform(props.args) };
75
+ }),
76
+ ];
77
+ })();
78
+ // Register on mount, unregister on unmount
79
+ currentWorker.addBodies({
80
+ props: props.map(({ onCollide, onCollideBegin, onCollideEnd, ...serializableProps }) => {
81
+ return { onCollide: Boolean(onCollide), ...serializableProps };
82
+ }),
83
+ type,
84
+ uuid,
85
+ });
86
+ return () => {
87
+ uuid.forEach((id) => {
88
+ delete physicsApi.refs[id];
89
+ removeFromDebug?.(id);
90
+ delete physicsApi.events[id];
91
+ });
92
+ currentWorker.removeBodies({ uuid });
93
+ };
94
+ });
95
+ });
96
+ return api;
97
+ });
98
+ }
99
+ export const injectBox = createInjectBody('Box');
100
+ export const injectConvexPolyhedron = createInjectBody('ConvexPolyhedron');
101
+ export const injectCylinder = createInjectBody('Cylinder');
102
+ export const injectHeightfield = createInjectBody('Heightfield');
103
+ export const injectParticle = createInjectBody('Particle');
104
+ export const injectPlane = createInjectBody('Plane');
105
+ export const injectSphere = createInjectBody('Sphere');
106
+ export const injectTrimesh = createInjectBody('Trimesh');
107
+ export const injectCompound = createInjectBody('Compound');
108
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL2JvZHkvc3JjL2xpYi9ib2R5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFLTixlQUFlLEVBQ2YsUUFBUSxFQUNSLFFBQVEsRUFDUixNQUFNLEVBQ04sU0FBUyxHQUNULE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDM0MsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDeEQsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sNEJBQTRCLENBQUM7QUFDaEUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQzVELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQzFELE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sT0FBTyxDQUFDO0FBRWxFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLFNBQVMsQ0FBQztBQU9yRixTQUFTLGdCQUFnQixDQUErQixJQUFZO0lBQ25FLE9BQU8sQ0FDTixTQUFtRCxFQUNuRCxHQUFzRixFQUN0RixPQUFpQyxFQUNoQyxFQUFFLENBQUMsVUFBVSxDQUFrQixJQUFJLEVBQUUsU0FBUyxFQUFFLEdBQUcsRUFBRSxPQUFPLENBQUMsQ0FBQztBQUNqRSxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQ2xCLElBQVksRUFDWixTQUFtRCxFQUNuRCxHQUFzRixFQUN0RixFQUFFLGFBQWEsRUFBRSxRQUFRLEtBQThCLEVBQUU7SUFFekQsT0FBTyxjQUFjLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxHQUFHLEVBQUU7UUFDaEQsTUFBTSxVQUFVLEdBQUcsZ0JBQWdCLENBQUMsRUFB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LENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuXHRFbGVtZW50UmVmLFxuXHRJbmplY3Rvcixcblx0U2lnbmFsLFxuXHRXcml0YWJsZVNpZ25hbCxcblx0YWZ0ZXJOZXh0UmVuZGVyLFxuXHRjb21wdXRlZCxcblx0aXNTaWduYWwsXG5cdHNpZ25hbCxcblx0dW50cmFja2VkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJvZHlTaGFwZVR5cGUgfSBmcm9tICdAcG1uZHJzL2Nhbm5vbi13b3JrZXItYXBpJztcbmltcG9ydCB7IHJlc29sdmVSZWYgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IGluamVjdFBoeXNpY3NBcGkgfSBmcm9tICdhbmd1bGFyLXRocmVlLWNhbm5vbic7XG5pbXBvcnQgeyBpbmplY3ROZ3RjRGVidWdBcGkgfSBmcm9tICdhbmd1bGFyLXRocmVlLWNhbm5vbi9kZWJ1Zyc7XG5pbXBvcnQgeyBhc3NlcnRJbmplY3RvciB9IGZyb20gJ25neHRlbnNpb24vYXNzZXJ0LWluamVjdG9yJztcbmltcG9ydCB7IGluamVjdEF1dG9FZmZlY3QgfSBmcm9tICduZ3h0ZW5zaW9uL2F1dG8tZWZmZWN0JztcbmltcG9ydCB7IER5bmFtaWNEcmF3VXNhZ2UsIEluc3RhbmNlZE1lc2gsIE9iamVjdDNEIH0gZnJvbSAndGhyZWUnO1xuaW1wb3J0IHsgTmd0Y0FyZ0ZuLCBOZ3RjQm9keVByb3BzTWFwLCBOZ3RjQm9keVB1YmxpY0FwaSwgTmd0Y0dldEJ5SW5kZXggfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IGRlZmF1bHRUcmFuc2Zvcm1BcmdzLCBtYWtlQm9keUFwaSwgcHJlcGFyZSwgc2V0dXBDb2xsaXNpb24gfSBmcm9tICcuL3V0aWxzJztcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RjQm9keU9wdGlvbnM8VFNoYXBlIGV4dGVuZHMgQm9keVNoYXBlVHlwZT4ge1xuXHR0cmFuc2Zvcm1BcmdzPzogTmd0Y0FyZ0ZuPE5ndGNCb2R5UHJvcHNNYXBbVFNoYXBlXT47XG5cdGluamVjdG9yPzogSW5qZWN0b3I7XG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUluamVjdEJvZHk8VFNoYXBlIGV4dGVuZHMgQm9keVNoYXBlVHlwZT4odHlwZTogVFNoYXBlKSB7XG5cdHJldHVybiA8VE9iamVjdCBleHRlbmRzIE9iamVjdDNEPihcblx0XHRnZXRQcm9wRm46IE5ndGNHZXRCeUluZGV4PE5ndGNCb2R5UHJvcHNNYXBbVFNoYXBlXT4sXG5cdFx0cmVmOiBFbGVtZW50UmVmPFRPYmplY3Q+IHwgVE9iamVjdCB8IFNpZ25hbDxFbGVtZW50UmVmPFRPYmplY3Q+IHwgVE9iamVjdCB8IHVuZGVmaW5lZD4sXG5cdFx0b3B0aW9ucz86IE5ndGNCb2R5T3B0aW9uczxUU2hhcGU+LFxuXHQpID0+IGluamVjdEJvZHk8VFNoYXBlLCBUT2JqZWN0Pih0eXBlLCBnZXRQcm9wRm4sIHJlZiwgb3B0aW9ucyk7XG59XG5cbmZ1bmN0aW9uIGluamVjdEJvZHk8VFNoYXBlIGV4dGVuZHMgQm9keVNoYXBlVHlwZSwgVE9iamVjdCBleHRlbmRzIE9iamVjdDNEPihcblx0dHlwZTogVFNoYXBlLFxuXHRnZXRQcm9wRm46IE5ndGNHZXRCeUluZGV4PE5ndGNCb2R5UHJvcHNNYXBbVFNoYXBlXT4sXG5cdHJlZjogRWxlbWVudFJlZjxUT2JqZWN0PiB8IFRPYmplY3QgfCBTaWduYWw8RWxlbWVudFJlZjxUT2JqZWN0PiB8IFRPYmplY3QgfCB1bmRlZmluZWQ+LFxuXHR7IHRyYW5zZm9ybUFyZ3MsIGluamVjdG9yIH06IE5ndGNCb2R5T3B0aW9uczxUU2hhcGU+ID0ge30sXG4pOiBTaWduYWw8Tmd0Y0JvZHlQdWJsaWNBcGkgfCBudWxsPiB7XG5cdHJldHVybiBhc3NlcnRJbmplY3RvcihpbmplY3RCb2R5LCBpbmplY3RvciwgKCkgPT4ge1xuXHRcdGNvbnN0IHBoeXNpY3NBcGkgPSBpbmplY3RQaHlzaWNzQXBpKHsgb3B0aW9uYWw6IHRydWUgfSk7XG5cblx0XHRpZiAoIXBoeXNpY3NBcGkpIHtcblx0XHRcdHRocm93IG5ldyBFcnJvcihgW05HVCBDYW5ub25dIGluamVjdEJvZHkgd2FzIGNhbGxlZCBvdXRzaWRlIG9mIDxuZ3RjLXBoeXNpY3M+YCk7XG5cdFx0fVxuXG5cdFx0Y29uc3QgYXV0b0VmZmVjdCA9IGluamVjdEF1dG9FZmZlY3QoKTtcblx0XHRjb25zdCBkZWJ1Z0FwaSA9IGluamVjdE5ndGNEZWJ1Z0FwaSh7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG5cdFx0Y29uc3QgeyBhZGQ6IGFkZFRvRGVidWcsIHJlbW92ZTogcmVtb3ZlRnJvbURlYnVnIH0gPSBkZWJ1Z0FwaSB8fCB7fTtcblx0XHRjb25zdCB0cmFuc2Zvcm0gPSB0cmFuc2Zvcm1BcmdzID8/IGRlZmF1bHRUcmFuc2Zvcm1BcmdzW3R5cGVdO1xuXHRcdGNvbnN0IGJvZHlSZWYgPSBpc1NpZ25hbChyZWYpID8gcmVmIDogc2lnbmFsKHJlZik7XG5cdFx0Y29uc3QgYm9keSA9IGNvbXB1dGVkKCgpID0+IHJlc29sdmVSZWYoYm9keVJlZigpKSk7XG5cblx0XHRjb25zdCBhcGkgPSBjb21wdXRlZCgoKSA9PiB7XG5cdFx0XHRjb25zdCBfYm9keSA9IGJvZHkoKTtcblx0XHRcdGlmICghX2JvZHkpIHJldHVybiBudWxsO1xuXHRcdFx0Y29uc3QgeyB3b3JrZXIsIC4uLnJlc3QgfSA9IHBoeXNpY3NBcGk7XG5cdFx0XHRpZiAoIXdvcmtlcigpKSByZXR1cm4gbnVsbDtcblx0XHRcdHJldHVybiBtYWtlQm9keUFwaShfYm9keSwgd29ya2VyKCksIHBoeXNpY3NBcGkpO1xuXHRcdH0pO1xuXG5cdFx0YWZ0ZXJOZXh0UmVuZGVyKCgpID0+IHtcblx0XHRcdGF1dG9FZmZlY3QoKCkgPT4ge1xuXHRcdFx0XHRjb25zdCBjdXJyZW50V29ya2VyID0gcGh5c2ljc0FwaS53b3JrZXIoKTtcblx0XHRcdFx0aWYgKCFjdXJyZW50V29ya2VyKSByZXR1cm47XG5cblx0XHRcdFx0Y29uc3Qgb2JqZWN0ID0gYm9keSgpO1xuXG5cdFx0XHRcdGlmICghaXNTaWduYWwocmVmKSAmJiAhb2JqZWN0KSB7XG5cdFx0XHRcdFx0dW50cmFja2VkKCgpID0+IHtcblx0XHRcdFx0XHRcdChib2R5UmVmIGFzIFdyaXRhYmxlU2lnbmFsPFRPYmplY3QgfCB1bmRlZmluZWQ+KS5zZXQocmVzb2x2ZVJlZihyZWYpKTtcblx0XHRcdFx0XHR9KTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoIW9iamVjdCkgcmV0dXJuO1xuXG5cdFx0XHRcdGNvbnN0IFt1dWlkLCBwcm9wc10gPSAoKCkgPT4ge1xuXHRcdFx0XHRcdGxldCB1dWlkczogc3RyaW5nW10gPSBbXTtcblx0XHRcdFx0XHRsZXQgdGVtcDogT2JqZWN0M0Q7XG5cdFx0XHRcdFx0aWYgKG9iamVjdCBpbnN0YW5jZW9mIEluc3RhbmNlZE1lc2gpIHtcblx0XHRcdFx0XHRcdG9iamVjdC5pbnN0YW5jZU1hdHJpeC5zZXRVc2FnZShEeW5hbWljRHJhd1VzYWdlKTtcblx0XHRcdFx0XHRcdHV1aWRzID0gbmV3IEFycmF5KG9iamVjdC5jb3VudCkuZmlsbCgwKS5tYXAoKF8sIGkpID0+IGAke29iamVjdC51dWlkfS8ke2l9YCk7XG5cdFx0XHRcdFx0XHR0ZW1wID0gbmV3IE9iamVjdDNEKCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHV1aWRzID0gW29iamVjdC51dWlkXTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0XHRcdHV1aWRzLFxuXHRcdFx0XHRcdFx0dXVpZHMubWFwKChpZCwgaW5kZXgpID0+IHtcblx0XHRcdFx0XHRcdFx0Y29uc3QgcHJvcHMgPSBnZXRQcm9wRm4oaW5kZXgpO1xuXHRcdFx0XHRcdFx0XHRpZiAodGVtcCkge1xuXHRcdFx0XHRcdFx0XHRcdHByZXBhcmUodGVtcCwgcHJvcHMpO1xuXHRcdFx0XHRcdFx0XHRcdChvYmplY3QgYXMgdW5rbm93biBhcyBJbnN0YW5jZWRNZXNoKS5zZXRNYXRyaXhBdChpbmRleCwgdGVtcC5tYXRyaXgpO1xuXHRcdFx0XHRcdFx0XHRcdChvYmplY3QgYXMgdW5rbm93biBhcyBJbnN0YW5jZWRNZXNoKS5pbnN0YW5jZU1hdHJpeC5uZWVkc1VwZGF0ZSA9IHRydWU7XG5cdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0cHJlcGFyZShvYmplY3QsIHByb3BzKTtcblx0XHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdFx0XHRwaHlzaWNzQXBpLnJlZnNbaWRdID0gb2JqZWN0O1xuXHRcdFx0XHRcdFx0XHRhZGRUb0RlYnVnPy4oaWQsIHByb3BzLCB0eXBlKTtcblx0XHRcdFx0XHRcdFx0c2V0dXBDb2xsaXNpb24ocGh5c2ljc0FwaS5ldmVudHMsIHByb3BzLCBpZCk7XG5cdFx0XHRcdFx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpZiBhcmdzIGlzIHVuZGVmaW5lZCwgdGhlcmUncyBkZWZhdWx0XG5cdFx0XHRcdFx0XHRcdHJldHVybiB7IC4uLnByb3BzLCBhcmdzOiB0cmFuc2Zvcm0ocHJvcHMuYXJncykgfTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdF07XG5cdFx0XHRcdH0pKCk7XG5cdFx0XHRcdC8vIFJlZ2lzdGVyIG9uIG1vdW50LCB1bnJlZ2lzdGVyIG9uIHVubW91bnRcblx0XHRcdFx0Y3VycmVudFdvcmtlci5hZGRCb2RpZXMoe1xuXHRcdFx0XHRcdHByb3BzOiBwcm9wcy5tYXAoKHsgb25Db2xsaWRlLCBvbkNvbGxpZGVCZWdpbiwgb25Db2xsaWRlRW5kLCAuLi5zZXJpYWxpemFibGVQcm9wcyB9KSA9PiB7XG5cdFx0XHRcdFx0XHRyZXR1cm4geyBvbkNvbGxpZGU6IEJvb2xlYW4ob25Db2xsaWRlKSwgLi4uc2VyaWFsaXphYmxlUHJvcHMgfTtcblx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHR0eXBlLFxuXHRcdFx0XHRcdHV1aWQsXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdFx0dXVpZC5mb3JFYWNoKChpZCkgPT4ge1xuXHRcdFx0XHRcdFx0ZGVsZXRlIHBoeXNpY3NBcGkucmVmc1tpZF07XG5cdFx0XHRcdFx0XHRyZW1vdmVGcm9tRGVidWc/LihpZCk7XG5cdFx0XHRcdFx0XHRkZWxldGUgcGh5c2ljc0FwaS5ldmVudHNbaWRdO1xuXHRcdFx0XHRcdH0pO1xuXHRcdFx0XHRcdGN1cnJlbnRXb3JrZXIucmVtb3ZlQm9kaWVzKHsgdXVpZCB9KTtcblx0XHRcdFx0fTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXG5cdFx0cmV0dXJuIGFwaTtcblx0fSk7XG59XG5cbmV4cG9ydCBjb25zdCBpbmplY3RCb3ggPSBjcmVhdGVJbmplY3RCb2R5KCdCb3gnKTtcbmV4cG9ydCBjb25zdCBpbmplY3RDb252ZXhQb2x5aGVkcm9uID0gY3JlYXRlSW5qZWN0Qm9keSgnQ29udmV4UG9seWhlZHJvbicpO1xuZXhwb3J0IGNvbnN0IGluamVjdEN5bGluZGVyID0gY3JlYXRlSW5qZWN0Qm9keSgnQ3lsaW5kZXInKTtcbmV4cG9ydCBjb25zdCBpbmplY3RIZWlnaHRmaWVsZCA9IGNyZWF0ZUluamVjdEJvZHkoJ0hlaWdodGZpZWxkJyk7XG5leHBvcnQgY29uc3QgaW5qZWN0UGFydGljbGUgPSBjcmVhdGVJbmplY3RCb2R5KCdQYXJ0aWNsZScpO1xuZXhwb3J0IGNvbnN0IGluamVjdFBsYW5lID0gY3JlYXRlSW5qZWN0Qm9keSgnUGxhbmUnKTtcbmV4cG9ydCBjb25zdCBpbmplY3RTcGhlcmUgPSBjcmVhdGVJbmplY3RCb2R5KCdTcGhlcmUnKTtcbmV4cG9ydCBjb25zdCBpbmplY3RUcmltZXNoID0gY3JlYXRlSW5qZWN0Qm9keSgnVHJpbWVzaCcpO1xuZXhwb3J0IGNvbnN0IGluamVjdENvbXBvdW5kID0gY3JlYXRlSW5qZWN0Qm9keSgnQ29tcG91bmQnKTtcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nhbm5vbi9ib2R5L3NyYy9saWIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG5cdEF0b21pY05hbWUsXG5cdEF0b21pY1Byb3BzLFxuXHRCb2R5UHJvcHMsXG5cdEJveFByb3BzLFxuXHRDb21wb3VuZEJvZHlQcm9wcyxcblx0Q29udmV4UG9seWhlZHJvblByb3BzLFxuXHRDeWxpbmRlclByb3BzLFxuXHRIZWlnaHRmaWVsZFByb3BzLFxuXHRQYXJ0aWNsZVByb3BzLFxuXHRQbGFuZVByb3BzLFxuXHRRdWFkLFxuXHRTcGhlcmVQcm9wcyxcblx0VHJpbWVzaFByb3BzLFxuXHRUcmlwbGV0LFxuXHRWZWN0b3JOYW1lLFxufSBmcm9tICdAcG1uZHJzL2Nhbm5vbi13b3JrZXItYXBpJztcbmltcG9ydCB7IEV1bGVyLCBRdWF0ZXJuaW9uLCBWZWN0b3IzIH0gZnJvbSAndGhyZWUnO1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndGNBdG9taWNBcGk8SyBleHRlbmRzIEF0b21pY05hbWU+IHtcblx0c2V0OiAodmFsdWU6IEF0b21pY1Byb3BzW0tdKSA9PiB2b2lkO1xuXHRzdWJzY3JpYmU6IChjYWxsYmFjazogKHZhbHVlOiBBdG9taWNQcm9wc1tLXSkgPT4gdm9pZCkgPT4gKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RjUXVhdGVybmlvbkFwaSB7XG5cdGNvcHk6ICh7IHcsIHgsIHksIHogfTogUXVhdGVybmlvbikgPT4gdm9pZDtcblx0c2V0OiAoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciwgdzogbnVtYmVyKSA9PiB2b2lkO1xuXHRzdWJzY3JpYmU6IChjYWxsYmFjazogKHZhbHVlOiBRdWFkKSA9PiB2b2lkKSA9PiAoKSA9PiB2b2lkO1xufVxuXG5leHBvcnQgaW50ZXJmYWNlIE5ndGNWZWN0b3JBcGkge1xuXHRjb3B5OiAoeyB4LCB5LCB6IH06IFZlY3RvcjMgfCBFdWxlcikgPT4gdm9pZDtcblx0c2V0OiAoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcikgPT4gdm9pZDtcblx0c3Vic2NyaWJlOiAoY2FsbGJhY2s6ICh2YWx1ZTogVHJpcGxldCkgPT4gdm9pZCkgPT4gKCkgPT4gdm9pZDtcbn1cblxuZXhwb3J0IHR5cGUgTmd0Y1dvcmtlckFwaSA9IHtcblx0W0sgaW4gQXRvbWljTmFtZV06IE5ndGNBdG9taWNBcGk8Sz47XG59ICYge1xuXHRbSyBpbiBWZWN0b3JOYW1lXTogTmd0Y1ZlY3RvckFwaTtcbn0gJiB7XG5cdGFwcGx5Rm9yY2U6IChmb3JjZTogVHJpcGxldCwgd29ybGRQb2ludDogVHJpcGxldCkgPT4gdm9pZDtcblx0YXBwbHlJbXB1bHNlOiAoaW1wdWxzZTogVHJpcGxldCwgd29ybGRQb2ludDogVHJpcGxldCkgPT4gdm9pZDtcblx0YXBwbHlMb2NhbEZvcmNlOiAoZm9yY2U6IFRyaXBsZXQsIGxvY2FsUG9pbnQ6IFRyaXBsZXQpID0+IHZvaWQ7XG5cdGFwcGx5TG9jYWxJbXB1bHNlOiAoaW1wdWxzZTogVHJpcGxldCwgbG9jYWxQb2ludDogVHJpcGxldCkgPT4gdm9pZDtcblx0YXBwbHlUb3JxdWU6ICh0b3JxdWU6IFRyaXBsZXQpID0+IHZvaWQ7XG5cdHF1YXRlcm5pb246IE5ndGNRdWF0ZXJuaW9uQXBpO1xuXHRyb3RhdGlvbjogTmd0Y1ZlY3RvckFwaTtcblx0c2NhbGVPdmVycmlkZTogKHNjYWxlOiBUcmlwbGV0KSA9PiB2b2lkO1xuXHRzbGVlcDogKCkgPT4gdm9pZDtcblx0d2FrZVVwOiAoKSA9PiB2b2lkO1xuXHRyZW1vdmU6ICgpID0+IHZvaWQ7XG59O1xuXG5leHBvcnQgaW50ZXJmYWNlIE5ndGNCb2R5UHVibGljQXBpIGV4dGVuZHMgTmd0Y1dvcmtlckFwaSB7XG5cdGF0OiAoaW5kZXg6IG51bWJlcikgPT4gTmd0Y1dvcmtlckFwaTtcbn1cblxuZXhwb3J0IGludGVyZmFjZSBOZ3RjQm9keVByb3BzTWFwIHtcblx0UGxhbmU6IFBsYW5lUHJvcHM7XG5cdEJveDogQm94UHJvcHM7XG5cdFBhcnRpY2xlOiBQYXJ0aWNsZVByb3BzO1xuXHRDeWxpbmRlcjogQ3lsaW5kZXJQcm9wcztcblx0U3BoZXJlOiBTcGhlcmVQcm9wcztcblx0VHJpbWVzaDogVHJpbWVzaFByb3BzO1xuXHRIZWlnaHRmaWVsZDogSGVpZ2h0ZmllbGRQcm9wcztcblx0Q29udmV4UG9seWhlZHJvbjogQ29udmV4UG9seWhlZHJvblByb3BzO1xuXHRDb21wb3VuZDogQ29tcG91bmRCb2R5UHJvcHM7XG59XG5cbmV4cG9ydCB0eXBlIE5ndGNHZXRCeUluZGV4PFQgZXh0ZW5kcyBCb2R5UHJvcHM+ID0gKGluZGV4OiBudW1iZXIpID0+IFQ7XG5leHBvcnQgdHlwZSBOZ3RjQXJnRm48VCBleHRlbmRzIEJvZHlQcm9wcz4gPSAoYXJnczogTm9uTnVsbGFibGU8VFsnYXJncyddPikgPT4gdHlwZW9mIGFyZ3M7XG4iXX0=