angular-three-cannon 2.0.0-beta.21 → 2.0.0-beta.227
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/body/README.md +3 -0
- package/body/index.d.ts +2 -0
- package/body/lib/body.d.ts +57 -0
- package/body/lib/types.d.ts +38 -0
- package/body/lib/utils.d.ts +50 -0
- package/constraint/README.md +3 -0
- package/constraint/index.d.ts +1 -0
- package/constraint/lib/constraint.d.ts +26 -0
- package/debug/lib/debug.d.ts +15 -14
- package/esm2022/body/angular-three-cannon-body.mjs +5 -0
- package/esm2022/body/index.mjs +2 -0
- package/esm2022/body/lib/body.mjs +83 -0
- package/esm2022/body/lib/types.mjs +2 -0
- package/esm2022/body/lib/utils.mjs +205 -0
- package/esm2022/constraint/angular-three-cannon-constraint.mjs +5 -0
- package/esm2022/constraint/index.mjs +2 -0
- package/esm2022/constraint/lib/constraint.mjs +50 -0
- package/esm2022/debug/lib/debug.mjs +34 -46
- package/esm2022/lib/physics.mjs +70 -153
- package/fesm2022/angular-three-cannon-body.mjs +292 -0
- package/fesm2022/angular-three-cannon-body.mjs.map +1 -0
- package/fesm2022/angular-three-cannon-constraint.mjs +57 -0
- package/fesm2022/angular-three-cannon-constraint.mjs.map +1 -0
- package/fesm2022/angular-three-cannon-debug.mjs +33 -45
- package/fesm2022/angular-three-cannon-debug.mjs.map +1 -1
- package/fesm2022/angular-three-cannon.mjs +70 -153
- package/fesm2022/angular-three-cannon.mjs.map +1 -1
- package/lib/physics.d.ts +50 -43
- package/package.json +19 -13
- package/esm2022/services/angular-three-cannon-services.mjs +0 -5
- package/esm2022/services/index.mjs +0 -7
- package/esm2022/services/lib/body.mjs +0 -293
- package/esm2022/services/lib/constraints.mjs +0 -59
- package/esm2022/services/lib/contact-material.mjs +0 -20
- package/esm2022/services/lib/ray.mjs +0 -30
- package/esm2022/services/lib/raycast-vehicle.mjs +0 -68
- package/esm2022/services/lib/spring.mjs +0 -31
- package/fesm2022/angular-three-cannon-services.mjs +0 -490
- package/fesm2022/angular-three-cannon-services.mjs.map +0 -1
- package/services/README.md +0 -3
- package/services/index.d.ts +0 -6
- package/services/lib/body.d.ts +0 -60
- package/services/lib/constraints.d.ts +0 -31
- package/services/lib/contact-material.d.ts +0 -9
- package/services/lib/ray.d.ts +0 -12
- package/services/lib/raycast-vehicle.d.ts +0 -30
- package/services/lib/spring.d.ts +0 -19
package/body/README.md
ADDED
package/body/index.d.ts
ADDED
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { Injector } from '@angular/core';
|
|
2
|
+
import type { BodyShapeType, BoxProps, CompoundBodyProps, ConvexPolyhedronArgs, ConvexPolyhedronProps, CylinderArgs, CylinderProps, HeightfieldArgs, HeightfieldProps, ParticleProps, PlaneProps, SphereArgs, SphereProps, TrimeshArgs, TrimeshProps, Triplet } from '@pmndrs/cannon-worker-api';
|
|
3
|
+
import { type NgtInjectedRef } from 'angular-three';
|
|
4
|
+
import { Object3D } from 'three';
|
|
5
|
+
import type { NgtcBodyPublicApi, NgtcGetByIndex, NgtcTransformArg } from './types';
|
|
6
|
+
interface NgtcBodyProps {
|
|
7
|
+
Plane: {
|
|
8
|
+
props: PlaneProps;
|
|
9
|
+
args: unknown[];
|
|
10
|
+
};
|
|
11
|
+
Box: {
|
|
12
|
+
props: BoxProps;
|
|
13
|
+
args: Triplet;
|
|
14
|
+
};
|
|
15
|
+
Trimesh: {
|
|
16
|
+
props: TrimeshProps;
|
|
17
|
+
args: TrimeshArgs;
|
|
18
|
+
};
|
|
19
|
+
Cylinder: {
|
|
20
|
+
props: CylinderProps;
|
|
21
|
+
args: CylinderArgs;
|
|
22
|
+
};
|
|
23
|
+
Heightfield: {
|
|
24
|
+
props: HeightfieldProps;
|
|
25
|
+
args: HeightfieldArgs;
|
|
26
|
+
};
|
|
27
|
+
ConvexPolyhedron: {
|
|
28
|
+
props: ConvexPolyhedronProps;
|
|
29
|
+
args: ConvexPolyhedronArgs<Triplet>;
|
|
30
|
+
};
|
|
31
|
+
Particle: {
|
|
32
|
+
props: ParticleProps;
|
|
33
|
+
args: unknown[];
|
|
34
|
+
};
|
|
35
|
+
Sphere: {
|
|
36
|
+
props: SphereProps;
|
|
37
|
+
args: SphereArgs;
|
|
38
|
+
};
|
|
39
|
+
Compound: {
|
|
40
|
+
props: CompoundBodyProps;
|
|
41
|
+
args: unknown[];
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
export interface NgtcBodyResult {
|
|
45
|
+
ref: NgtInjectedRef<Object3D>;
|
|
46
|
+
api: NgtcBodyPublicApi;
|
|
47
|
+
}
|
|
48
|
+
interface NgtcBodyOptions<TType extends BodyShapeType = BodyShapeType> {
|
|
49
|
+
getPropFn: NgtcGetByIndex<NgtcBodyProps[TType]['props']>;
|
|
50
|
+
transformArgs?: NgtcTransformArg<NgtcBodyProps[TType]['args']>;
|
|
51
|
+
}
|
|
52
|
+
export declare function injectBody<TType extends BodyShapeType>(type: TType, getPropFn: NgtcBodyOptions<TType>['getPropFn'], { injector, ref, transformArgs, }?: {
|
|
53
|
+
injector?: Injector;
|
|
54
|
+
ref?: NgtInjectedRef<Object3D>;
|
|
55
|
+
transformArgs?: NgtcBodyOptions<TType>['transformArgs'];
|
|
56
|
+
}): NgtcBodyResult;
|
|
57
|
+
export {};
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import type { AtomicName, AtomicProps, BodyProps, Quad, Triplet, VectorName } from '@pmndrs/cannon-worker-api';
|
|
2
|
+
import type { Euler, Quaternion, Vector3 } from 'three';
|
|
3
|
+
export type NgtcAtomicApi<K extends AtomicName> = {
|
|
4
|
+
set: (value: AtomicProps[K]) => void;
|
|
5
|
+
subscribe: (callback: (value: AtomicProps[K]) => void) => () => void;
|
|
6
|
+
};
|
|
7
|
+
export type 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 type 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 type NgtcGetByIndex<T extends BodyProps> = (index: number) => T;
|
|
38
|
+
export type NgtcTransformArg<T extends unknown[]> = (args: T) => T;
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import { type ElementRef, type Signal } from '@angular/core';
|
|
2
|
+
import type { BodyProps, CannonWorkerAPI, ConvexPolyhedronArgs, CylinderArgs, HeightfieldArgs, SphereArgs, TrimeshArgs, Triplet } from '@pmndrs/cannon-worker-api';
|
|
3
|
+
import type { NgtcCannonEvents, NgtcPhysicsApi } from 'angular-three-cannon';
|
|
4
|
+
import { type Object3D } from 'three';
|
|
5
|
+
import type { NgtcWorkerApi } from './types';
|
|
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 makeApi(worker: Signal<CannonWorkerAPI>, bodyRef: ElementRef<Object3D>, { subscriptions, bodies, 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: unknown[]) => never[];
|
|
42
|
+
Box: (args?: Triplet) => Triplet;
|
|
43
|
+
Trimesh: (args: TrimeshArgs) => TrimeshArgs;
|
|
44
|
+
Cylinder: (args?: CylinderArgs) => never[];
|
|
45
|
+
Heightfield: (args: HeightfieldArgs) => HeightfieldArgs;
|
|
46
|
+
ConvexPolyhedron: ([vertices, faces, normals, axes, boundingSphereRadius]?: ConvexPolyhedronArgs<Triplet>) => (number | number[][] | undefined)[];
|
|
47
|
+
Particle: (args: unknown[]) => never[];
|
|
48
|
+
Sphere: (args?: SphereArgs) => number[];
|
|
49
|
+
Compound: (args: unknown[]) => unknown[];
|
|
50
|
+
};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export * from './lib/constraint';
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { Injector } from '@angular/core';
|
|
2
|
+
import type { ConstraintOptns, ConstraintTypes, HingeConstraintOpts } from '@pmndrs/cannon-worker-api';
|
|
3
|
+
import { type NgtInjectedRef } from 'angular-three';
|
|
4
|
+
import { Object3D } from 'three';
|
|
5
|
+
export interface NgtcConstraintOptions<TConstraintType extends 'Hinge' | ConstraintTypes, TOptions extends HingeConstraintOpts | ConstraintOptns = TConstraintType extends 'Hinge' ? HingeConstraintOpts : ConstraintOptns> {
|
|
6
|
+
injector?: Injector;
|
|
7
|
+
options?: TOptions;
|
|
8
|
+
}
|
|
9
|
+
export interface NgtcConstraintApi {
|
|
10
|
+
disable: () => void;
|
|
11
|
+
enable: () => void;
|
|
12
|
+
remove: () => void;
|
|
13
|
+
}
|
|
14
|
+
export interface NgtcHingeConstraintApi extends NgtcConstraintApi {
|
|
15
|
+
disableMotor: () => void;
|
|
16
|
+
enableMotor: () => void;
|
|
17
|
+
setMotorMaxForce: (value: number) => void;
|
|
18
|
+
setMotorSpeed: (value: number) => void;
|
|
19
|
+
}
|
|
20
|
+
export type NgtcConstraintORHingeApi<T extends 'Hinge' | ConstraintTypes> = T extends ConstraintTypes ? NgtcConstraintApi : NgtcHingeConstraintApi;
|
|
21
|
+
export interface NgtcConstraintResult<T extends 'Hinge' | ConstraintTypes, TObjectA extends Object3D = Object3D, TObjectB extends Object3D = Object3D> {
|
|
22
|
+
bodyA: NgtInjectedRef<TObjectA>;
|
|
23
|
+
bodyB: NgtInjectedRef<TObjectB>;
|
|
24
|
+
api: NgtcConstraintORHingeApi<T>;
|
|
25
|
+
}
|
|
26
|
+
export declare function injectConstraint<TType extends ConstraintTypes | 'Hinge', TBodyA extends Object3D = Object3D, TBodyB extends Object3D = Object3D>(type: TType, bodyA: TBodyA | NgtInjectedRef<TBodyA>, bodyB: TBodyB | NgtInjectedRef<TBodyB>, { injector, options }?: NgtcConstraintOptions<TType>): NgtcConstraintResult<TType, TBodyA, TBodyB>;
|
package/debug/lib/debug.d.ts
CHANGED
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
import { type OnInit } from '@angular/core';
|
|
2
1
|
import { type BodyProps, type BodyShapeType } from '@pmndrs/cannon-worker-api';
|
|
3
2
|
import CannonDebugger from 'cannon-es-debugger';
|
|
4
3
|
import * as THREE from 'three';
|
|
@@ -10,34 +9,36 @@ export declare const injectNgtcDebugApi: {
|
|
|
10
9
|
};
|
|
11
10
|
(injectOptions: import("@angular/core").InjectOptions & {
|
|
12
11
|
optional?: false | undefined;
|
|
12
|
+
} & {
|
|
13
|
+
injector?: import("@angular/core").Injector | undefined;
|
|
13
14
|
}): {
|
|
14
15
|
add: (uuid: string, props: BodyProps, type: BodyShapeType) => void;
|
|
15
16
|
remove: (id: string) => void;
|
|
16
17
|
};
|
|
17
|
-
(injectOptions: import("@angular/core").InjectOptions
|
|
18
|
+
(injectOptions: import("@angular/core").InjectOptions & {
|
|
19
|
+
injector?: import("@angular/core").Injector | undefined;
|
|
20
|
+
}): {
|
|
18
21
|
add: (uuid: string, props: BodyProps, type: BodyShapeType) => void;
|
|
19
22
|
remove: (id: string) => void;
|
|
20
23
|
} | null;
|
|
21
|
-
}, provideNgtcDebugApi: (
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
impl: typeof CannonDebugger;
|
|
29
|
-
disabled: boolean;
|
|
24
|
+
}, provideNgtcDebugApi: () => import("@angular/core").Provider;
|
|
25
|
+
export declare class NgtcDebug {
|
|
26
|
+
color: import("@angular/core").InputSignal<string>;
|
|
27
|
+
scale: import("@angular/core").InputSignal<number>;
|
|
28
|
+
impl: import("@angular/core").InputSignal<typeof CannonDebugger>;
|
|
29
|
+
debug: import("@angular/core").InputSignalWithTransform<boolean, unknown>;
|
|
30
|
+
protected scene: THREE.Scene;
|
|
30
31
|
private bodies;
|
|
31
32
|
private bodyMap;
|
|
33
|
+
private store;
|
|
34
|
+
private defaultScene;
|
|
32
35
|
private physicsApi;
|
|
33
|
-
scene: THREE.Scene;
|
|
34
36
|
private cannonDebugger;
|
|
35
37
|
api: {
|
|
36
38
|
add: (uuid: string, props: BodyProps, type: BodyShapeType) => void;
|
|
37
39
|
remove: (id: string) => void;
|
|
38
40
|
};
|
|
39
41
|
constructor();
|
|
40
|
-
ngOnInit(): void;
|
|
41
42
|
static ɵfac: i0.ɵɵFactoryDeclaration<NgtcDebug, never>;
|
|
42
|
-
static
|
|
43
|
+
static ɵdir: i0.ɵɵDirectiveDeclaration<NgtcDebug, "ngtc-physics[debug]", never, { "color": { "alias": "color"; "required": false; "isSignal": true; }; "scale": { "alias": "scale"; "required": false; "isSignal": true; }; "impl": { "alias": "impl"; "required": false; "isSignal": true; }; "debug": { "alias": "debug"; "required": false; "isSignal": true; }; }, {}, never, never, true, never>;
|
|
43
44
|
}
|
|
@@ -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,83 @@
|
|
|
1
|
+
import { afterNextRender, effect, inject, Injector } from '@angular/core';
|
|
2
|
+
import { injectNgtRef } from 'angular-three';
|
|
3
|
+
import { injectNgtcPhysicsApi } from 'angular-three-cannon';
|
|
4
|
+
import { injectNgtcDebugApi } from 'angular-three-cannon/debug';
|
|
5
|
+
import { assertInjector } from 'ngxtension/assert-injector';
|
|
6
|
+
import { DynamicDrawUsage, InstancedMesh, Object3D } from 'three';
|
|
7
|
+
import { defaultTransformArgs, makeApi, prepare, setupCollision } from './utils';
|
|
8
|
+
export function injectBody(type, getPropFn, { injector, ref, transformArgs, } = {}) {
|
|
9
|
+
return assertInjector(injectBody, injector, () => {
|
|
10
|
+
const assertedInjector = inject(Injector);
|
|
11
|
+
const physicsApi = injectNgtcPhysicsApi();
|
|
12
|
+
const debugApi = injectNgtcDebugApi({ optional: true });
|
|
13
|
+
const [{ add: addToDebug, remove: removeFromDebug }, physics, worker] = [
|
|
14
|
+
debugApi || {},
|
|
15
|
+
physicsApi.get(),
|
|
16
|
+
physicsApi.select('worker'),
|
|
17
|
+
];
|
|
18
|
+
const transform = transformArgs ?? defaultTransformArgs[type];
|
|
19
|
+
const bodyResult = { ref: ref ?? injectNgtRef() };
|
|
20
|
+
afterNextRender(() => {
|
|
21
|
+
Object.assign(bodyResult, { api: makeApi(worker, bodyResult.ref, physics) });
|
|
22
|
+
effect((onCleanup) => {
|
|
23
|
+
const currentWorker = worker();
|
|
24
|
+
if (!currentWorker)
|
|
25
|
+
return;
|
|
26
|
+
if (!bodyResult.ref.nativeElement) {
|
|
27
|
+
bodyResult.ref.nativeElement = new Object3D();
|
|
28
|
+
return;
|
|
29
|
+
}
|
|
30
|
+
const object = bodyResult.ref.nativeElement;
|
|
31
|
+
const [uuid, props] = (() => {
|
|
32
|
+
let uuids = [];
|
|
33
|
+
let temp;
|
|
34
|
+
if (object instanceof InstancedMesh) {
|
|
35
|
+
object.instanceMatrix.setUsage(DynamicDrawUsage);
|
|
36
|
+
uuids = new Array(object.count).fill(0).map((_, i) => `${object.uuid}/${i}`);
|
|
37
|
+
temp = new Object3D();
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
uuids = [object.uuid];
|
|
41
|
+
}
|
|
42
|
+
return [
|
|
43
|
+
uuids,
|
|
44
|
+
uuids.map((id, index) => {
|
|
45
|
+
const props = getPropFn(index);
|
|
46
|
+
if (temp) {
|
|
47
|
+
prepare(temp, props);
|
|
48
|
+
object.setMatrixAt(index, temp.matrix);
|
|
49
|
+
object.instanceMatrix.needsUpdate = true;
|
|
50
|
+
}
|
|
51
|
+
else {
|
|
52
|
+
prepare(object, props);
|
|
53
|
+
}
|
|
54
|
+
physics.refs[id] = object;
|
|
55
|
+
addToDebug?.(id, props, type);
|
|
56
|
+
setupCollision(physics.events, props, id);
|
|
57
|
+
// @ts-expect-error - if args is undefined, there's default
|
|
58
|
+
return { ...props, args: transform(props.args) };
|
|
59
|
+
}),
|
|
60
|
+
];
|
|
61
|
+
})();
|
|
62
|
+
// Register on mount, unregister on unmount
|
|
63
|
+
currentWorker.addBodies({
|
|
64
|
+
props: props.map(({ onCollide, onCollideBegin, onCollideEnd, ...serializableProps }) => {
|
|
65
|
+
return { onCollide: Boolean(onCollide), ...serializableProps };
|
|
66
|
+
}),
|
|
67
|
+
type,
|
|
68
|
+
uuid,
|
|
69
|
+
});
|
|
70
|
+
onCleanup(() => {
|
|
71
|
+
uuid.forEach((id) => {
|
|
72
|
+
delete physics.refs[id];
|
|
73
|
+
removeFromDebug?.(id);
|
|
74
|
+
delete physics.events[id];
|
|
75
|
+
});
|
|
76
|
+
currentWorker.removeBodies({ uuid: uuid });
|
|
77
|
+
});
|
|
78
|
+
}, { injector: assertedInjector });
|
|
79
|
+
});
|
|
80
|
+
return bodyResult;
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYm9keS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL2JvZHkvc3JjL2xpYi9ib2R5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFtQjFFLE9BQU8sRUFBRSxZQUFZLEVBQXVCLE1BQU0sZUFBZSxDQUFDO0FBQ2xFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQzVELE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSw0QkFBNEIsQ0FBQztBQUM1RCxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsYUFBYSxFQUFFLFFBQVEsRUFBRSxNQUFNLE9BQU8sQ0FBQztBQUVsRSxPQUFPLEVBQUUsb0JBQW9CLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxTQUFTLENBQUM7QUF3QmpGLE1BQU0sVUFBVSxVQUFVLENBQ3pCLElBQVcsRUFDWCxTQUE4QyxFQUM5QyxFQUNDLFFBQVEsRUFDUixHQUFHLEVBQ0gsYUFBYSxNQUtWLEVBQUU7SUFFTixPQUFPLGNBQWMsQ0FBQyxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRTtRQUNoRCxNQUFNLGdCQUFnQixHQUFHLE1BQU0sQ0FBQyxRQUFRLENBQUMsQ0FBQztRQUUxQyxNQUFNLFVBQVUsR0FBRyxvQkFBb0IsRUFBRSxDQUFDO1FBQzFDLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDLEVBQUUsUUFBUSxFQUFFLElBQUksRUFBRSxDQUFDLENBQUM7UUFFeEQsTUFBTSxDQUFDLEVBQUUsR0FBRyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsZUFBZSxFQUFFLEVBQUUsT0FBTyxFQUFFLE1BQU0sQ0FBQyxHQUFH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QUM7cUJBQ08sQ0FBQztnQkFDWixDQUFDLENBQUMsRUFBRSxDQUFDO2dCQUVMLDJDQUEyQztnQkFDM0MsYUFBYSxDQUFDLFNBQVMsQ0FBQztvQkFDdkIsS0FBSyxFQUFFLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFFLEdBQUcsaUJBQWlCLEVBQUUsRUFBRSxFQUFFO3dCQUN0RixPQUFPLEVBQUUsU0FBUyxFQUFFLE9BQU8sQ0FBQyxTQUFTLENBQUMsRUFBRSxHQUFHLGlCQUFpQixFQUFFLENBQUM7b0JBQ2hFLENBQUMsQ0FBQztvQkFDRixJQUFJO29CQUNKLElBQUk7aUJBQ0osQ0FBQyxDQUFDO2dCQUVILFNBQVMsQ0FBQyxHQUFHLEVBQUU7b0JBQ2QsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEVBQUUsRUFBRSxFQUFFO3dCQUNuQixPQUFPLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7d0JBQ3hCLGVBQWUsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUN0QixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7b0JBQzNCLENBQUMsQ0FBQyxDQUFDO29CQUNILGFBQWEsQ0FBQyxZQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztnQkFDNUMsQ0FBQyxDQUFDLENBQUM7WUFDSixDQUFDLEVBQ0QsRUFBRSxRQUFRLEVBQUUsZ0JBQWdCLEVBQUUsQ0FDOUIsQ0FBQztRQUNILENBQUMsQ0FBQyxDQUFDO1FBRUgsT0FBTyxVQUFVLENBQUM7SUFDbkIsQ0FBQyxDQUFDLENBQUM7QUFDSixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgYWZ0ZXJOZXh0UmVuZGVyLCBlZmZlY3QsIGluamVjdCwgSW5qZWN0b3IgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB0eXBlIHtcblx0Qm9keVNoYXBlVHlwZSxcblx0Qm94UHJvcHMsXG5cdENvbXBvdW5kQm9keVByb3BzLFxuXHRDb252ZXhQb2x5aGVkcm9uQXJncyxcblx0Q29udmV4UG9seWhlZHJvblByb3BzLFxuXHRDeWxpbmRlckFyZ3MsXG5cdEN5bGluZGVyUHJvcHMsXG5cdEhlaWdodGZpZWxkQXJncyxcblx0SGVpZ2h0ZmllbGRQcm9wcyxcblx0UGFydGljbGVQcm9wcyxcblx0UGxhbmVQcm9wcyxcblx0U3BoZXJlQXJncyxcblx0U3BoZXJlUHJvcHMsXG5cdFRyaW1lc2hBcmdzLFxuXHRUcmltZXNoUHJvcHMsXG5cdFRyaXBsZXQsXG59IGZyb20gJ0BwbW5kcnMvY2Fubm9uLXdvcmtlci1hcGknO1xuaW1wb3J0IHsgaW5qZWN0Tmd0UmVmLCB0eXBlIE5ndEluamVjdGVkUmVmIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgeyBpbmplY3ROZ3RjUGh5c2ljc0FwaSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtY2Fubm9uJztcbmltcG9ydCB7IGluamVjdE5ndGNEZWJ1Z0FwaSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUtY2Fubm9uL2RlYnVnJztcbmltcG9ydCB7IGFzc2VydEluamVjdG9yIH0gZnJvbSAnbmd4dGVuc2lvbi9hc3NlcnQtaW5qZWN0b3InO1xuaW1wb3J0IHsgRHluYW1pY0RyYXdVc2FnZSwgSW5zdGFuY2VkTWVzaCwgT2JqZWN0M0QgfSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgdHlwZSB7IE5ndGNCb2R5UHVibGljQXBpLCBOZ3RjR2V0QnlJbmRleCwgTmd0Y1RyYW5zZm9ybUFyZyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgZGVmYXVsdFRyYW5zZm9ybUFyZ3MsIG1ha2VBcGksIHByZXBhcmUsIHNldHVwQ29sbGlzaW9uIH0gZnJvbSAnLi91dGlscyc7XG5cbmludGVyZmFjZSBOZ3RjQm9keVByb3BzIHtcblx0UGxhbmU6IHsgcHJvcHM6IFBsYW5lUHJvcHM7IGFyZ3M6IHVua25vd25bXSB9O1xuXHRCb3g6IHsgcHJvcHM6IEJveFByb3BzOyBhcmdzOiBUcmlwbGV0IH07XG5cdFRyaW1lc2g6IHsgcHJvcHM6IFRyaW1lc2hQcm9wczsgYXJnczogVHJpbWVzaEFyZ3MgfTtcblx0Q3lsaW5kZXI6IHsgcHJvcHM6IEN5bGluZGVyUHJvcHM7IGFyZ3M6IEN5bGluZGVyQXJncyB9O1xuXHRIZWlnaHRmaWVsZDogeyBwcm9wczogSGVpZ2h0ZmllbGRQcm9wczsgYXJnczogSGVpZ2h0ZmllbGRBcmdzIH07XG5cdENvbnZleFBvbHloZWRyb246IHsgcHJvcHM6IENvbnZleFBvbHloZWRyb25Qcm9wczsgYXJnczogQ29udmV4UG9seWhlZHJvbkFyZ3M8VHJpcGxldD4gfTtcblx0UGFydGljbGU6IHsgcHJvcHM6IFBhcnRpY2xlUHJvcHM7IGFyZ3M6IHVua25vd25bXSB9O1xuXHRTcGhlcmU6IHsgcHJvcHM6IFNwaGVyZVByb3BzOyBhcmdzOiBTcGhlcmVBcmdzIH07XG5cdENvbXBvdW5kOiB7IHByb3BzOiBDb21wb3VuZEJvZHlQcm9wczsgYXJnczogdW5rbm93bltdIH07XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Y0JvZHlSZXN1bHQge1xuXHRyZWY6IE5ndEluamVjdGVkUmVmPE9iamVjdDNEPjtcblx0YXBpOiBOZ3RjQm9keVB1YmxpY0FwaTtcbn1cblxuaW50ZXJmYWNlIE5ndGNCb2R5T3B0aW9uczxUVHlwZSBleHRlbmRzIEJvZHlTaGFwZVR5cGUgPSBCb2R5U2hhcGVUeXBlPiB7XG5cdGdldFByb3BGbjogTmd0Y0dldEJ5SW5kZXg8Tmd0Y0JvZHlQcm9wc1tUVHlwZV1bJ3Byb3BzJ10+O1xuXHR0cmFuc2Zvcm1BcmdzPzogTmd0Y1RyYW5zZm9ybUFyZzxOZ3RjQm9keVByb3BzW1RUeXBlXVsnYXJncyddPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGluamVjdEJvZHk8VFR5cGUgZXh0ZW5kcyBCb2R5U2hhcGVUeXBlPihcblx0dHlwZTogVFR5cGUsXG5cdGdldFByb3BGbjogTmd0Y0JvZHlPcHRpb25zPFRUeXBlPlsnZ2V0UHJvcEZuJ10sXG5cdHtcblx0XHRpbmplY3Rvcixcblx0XHRyZWYsXG5cdFx0dHJhbnNmb3JtQXJncyxcblx0fToge1xuXHRcdGluamVjdG9yPzogSW5qZWN0b3I7XG5cdFx0cmVmPzogTmd0SW5qZWN0ZWRSZWY8T2JqZWN0M0Q+O1xuXHRcdHRyYW5zZm9ybUFyZ3M/OiBOZ3RjQm9keU9wdGlvbnM8VFR5cGU+Wyd0cmFuc2Zvcm1BcmdzJ107XG5cdH0gPSB7fSxcbik6IE5ndGNCb2R5UmVzdWx0IHtcblx0cmV0dXJuIGFzc2VydEluamVjdG9yKGluamVjdEJvZHksIGluamVjdG9yLCAoKSA9PiB7XG5cdFx0Y29uc3QgYXNzZXJ0ZWRJbmplY3RvciA9IGluamVjdChJbmplY3Rvcik7XG5cblx0XHRjb25zdCBwaHlzaWNzQXBpID0gaW5qZWN0Tmd0Y1BoeXNpY3NBcGkoKTtcblx0XHRjb25zdCBkZWJ1Z0FwaSA9IGluamVjdE5ndGNEZWJ1Z0FwaSh7IG9wdGlvbmFsOiB0cnVlIH0pO1xuXG5cdFx0Y29uc3QgW3sgYWRkOiBhZGRUb0RlYnVnLCByZW1vdmU6IHJlbW92ZUZyb21EZWJ1ZyB9LCBwaHlzaWNzLCB3b3JrZXJdID0gW1xuXHRcdFx0ZGVidWdBcGkgfHwge30sXG5cdFx0XHRwaHlzaWNzQXBpLmdldCgpLFxuXHRcdFx0cGh5c2ljc0FwaS5zZWxlY3QoJ3dvcmtlcicpLFxuXHRcdF07XG5cdFx0Y29uc3QgdHJhbnNmb3JtID0gdHJhbnNmb3JtQXJncyA/PyBkZWZhdWx0VHJhbnNmb3JtQXJnc1t0eXBlXTtcblxuXHRcdGNvbnN0IGJvZHlSZXN1bHQgPSB7IHJlZjogcmVmID8/IGluamVjdE5ndFJlZigpIH0gYXMgTmd0Y0JvZHlSZXN1bHQ7XG5cblx0XHRhZnRlck5leHRSZW5kZXIoKCkgPT4ge1xuXHRcdFx0T2JqZWN0LmFzc2lnbihib2R5UmVzdWx0LCB7IGFwaTogbWFrZUFwaSh3b3JrZXIsIGJvZHlSZXN1bHQucmVmLCBwaHlzaWNzKSB9KTtcblxuXHRcdFx0ZWZmZWN0KFxuXHRcdFx0XHQob25DbGVhbnVwKSA9PiB7XG5cdFx0XHRcdFx0Y29uc3QgY3VycmVudFdvcmtlciA9IHdvcmtlcigpO1xuXHRcdFx0XHRcdGlmICghY3VycmVudFdvcmtlcikgcmV0dXJuO1xuXG5cdFx0XHRcdFx0aWYgKCFib2R5UmVzdWx0LnJlZi5uYXRpdmVFbGVtZW50KSB7XG5cdFx0XHRcdFx0XHRib2R5UmVzdWx0LnJlZi5uYXRpdmVFbGVtZW50ID0gbmV3IE9iamVjdDNEKCk7XG5cdFx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdFx0fVxuXG5cdFx0XHRcdFx0Y29uc3Qgb2JqZWN0ID0gYm9keVJlc3VsdC5yZWYubmF0aXZlRWxlbWVudDtcblxuXHRcdFx0XHRcdGNvbnN0IFt1dWlkLCBwcm9wc10gPSAoKCkgPT4ge1xuXHRcdFx0XHRcdFx0bGV0IHV1aWRzOiBzdHJpbmdbXSA9IFtdO1xuXHRcdFx0XHRcdFx0bGV0IHRlbXA6IE9iamVjdDNEO1xuXG5cdFx0XHRcdFx0XHRpZiAob2JqZWN0IGluc3RhbmNlb2YgSW5zdGFuY2VkTWVzaCkge1xuXHRcdFx0XHRcdFx0XHRvYmplY3QuaW5zdGFuY2VNYXRyaXguc2V0VXNhZ2UoRHluYW1pY0RyYXdVc2FnZSk7XG5cdFx0XHRcdFx0XHRcdHV1aWRzID0gbmV3IEFycmF5KG9iamVjdC5jb3VudCkuZmlsbCgwKS5tYXAoKF8sIGkpID0+IGAke29iamVjdC51dWlkfS8ke2l9YCk7XG5cdFx0XHRcdFx0XHRcdHRlbXAgPSBuZXcgT2JqZWN0M0QoKTtcblx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdHV1aWRzID0gW29iamVjdC51dWlkXTtcblx0XHRcdFx0XHRcdH1cblxuXHRcdFx0XHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0XHRcdFx0dXVpZHMsXG5cdFx0XHRcdFx0XHRcdHV1aWRzLm1hcCgoaWQsIGluZGV4KSA9PiB7XG5cdFx0XHRcdFx0XHRcdFx0Y29uc3QgcHJvcHMgPSBnZXRQcm9wRm4oaW5kZXgpO1xuXHRcdFx0XHRcdFx0XHRcdGlmICh0ZW1wKSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcmVwYXJlKHRlbXAsIHByb3BzKTtcblx0XHRcdFx0XHRcdFx0XHRcdChvYmplY3QgYXMgSW5zdGFuY2VkTWVzaCkuc2V0TWF0cml4QXQoaW5kZXgsIHRlbXAubWF0cml4KTtcblx0XHRcdFx0XHRcdFx0XHRcdChvYmplY3QgYXMgSW5zdGFuY2VkTWVzaCkuaW5zdGFuY2VNYXRyaXgubmVlZHNVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0XHRcdFx0XHRwcmVwYXJlKG9iamVjdCwgcHJvcHMpO1xuXHRcdFx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRcdFx0XHRwaHlzaWNzLnJlZnNbaWRdID0gb2JqZWN0O1xuXHRcdFx0XHRcdFx0XHRcdGFkZFRvRGVidWc/LihpZCwgcHJvcHMsIHR5cGUpO1xuXHRcdFx0XHRcdFx0XHRcdHNldHVwQ29sbGlzaW9uKHBoeXNpY3MuZXZlbnRzLCBwcm9wcywgaWQpO1xuXHRcdFx0XHRcdFx0XHRcdC8vIEB0cy1leHBlY3QtZXJyb3IgLSBpZiBhcmdzIGlzIHVuZGVmaW5lZCwgdGhlcmUncyBkZWZhdWx0XG5cdFx0XHRcdFx0XHRcdFx0cmV0dXJuIHsgLi4ucHJvcHMsIGFyZ3M6IHRyYW5zZm9ybShwcm9wcy5hcmdzKSB9O1xuXHRcdFx0XHRcdFx0XHR9KSxcblx0XHRcdFx0XHRcdF0gYXMgY29uc3Q7XG5cdFx0XHRcdFx0fSkoKTtcblxuXHRcdFx0XHRcdC8vIFJlZ2lzdGVyIG9uIG1vdW50LCB1bnJlZ2lzdGVyIG9uIHVubW91bnRcblx0XHRcdFx0XHRjdXJyZW50V29ya2VyLmFkZEJvZGllcyh7XG5cdFx0XHRcdFx0XHRwcm9wczogcHJvcHMubWFwKCh7IG9uQ29sbGlkZSwgb25Db2xsaWRlQmVnaW4sIG9uQ29sbGlkZUVuZCwgLi4uc2VyaWFsaXphYmxlUHJvcHMgfSkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4geyBvbkNvbGxpZGU6IEJvb2xlYW4ob25Db2xsaWRlKSwgLi4uc2VyaWFsaXphYmxlUHJvcHMgfTtcblx0XHRcdFx0XHRcdH0pLFxuXHRcdFx0XHRcdFx0dHlwZSxcblx0XHRcdFx0XHRcdHV1aWQsXG5cdFx0XHRcdFx0fSk7XG5cblx0XHRcdFx0XHRvbkNsZWFudXAoKCkgPT4ge1xuXHRcdFx0XHRcdFx0dXVpZC5mb3JFYWNoKChpZCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgcGh5c2ljcy5yZWZzW2lkXTtcblx0XHRcdFx0XHRcdFx0cmVtb3ZlRnJvbURlYnVnPy4oaWQpO1xuXHRcdFx0XHRcdFx0XHRkZWxldGUgcGh5c2ljcy5ldmVudHNbaWRdO1xuXHRcdFx0XHRcdFx0fSk7XG5cdFx0XHRcdFx0XHRjdXJyZW50V29ya2VyLnJlbW92ZUJvZGllcyh7IHV1aWQ6IHV1aWQgfSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHsgaW5qZWN0b3I6IGFzc2VydGVkSW5qZWN0b3IgfSxcblx0XHRcdCk7XG5cdFx0fSk7XG5cblx0XHRyZXR1cm4gYm9keVJlc3VsdDtcblx0fSk7XG59XG4iXX0=
|
|
@@ -0,0 +1,2 @@
|
|
|
1
|
+
export {};
|
|
2
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nhbm5vbi9ib2R5L3NyYy9saWIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB0eXBlIHsgQXRvbWljTmFtZSwgQXRvbWljUHJvcHMsIEJvZHlQcm9wcywgUXVhZCwgVHJpcGxldCwgVmVjdG9yTmFtZSB9IGZyb20gJ0BwbW5kcnMvY2Fubm9uLXdvcmtlci1hcGknO1xuaW1wb3J0IHR5cGUgeyBFdWxlciwgUXVhdGVybmlvbiwgVmVjdG9yMyB9IGZyb20gJ3RocmVlJztcblxuZXhwb3J0IHR5cGUgTmd0Y0F0b21pY0FwaTxLIGV4dGVuZHMgQXRvbWljTmFtZT4gPSB7XG5cdHNldDogKHZhbHVlOiBBdG9taWNQcm9wc1tLXSkgPT4gdm9pZDtcblx0c3Vic2NyaWJlOiAoY2FsbGJhY2s6ICh2YWx1ZTogQXRvbWljUHJvcHNbS10pID0+IHZvaWQpID0+ICgpID0+IHZvaWQ7XG59O1xuZXhwb3J0IHR5cGUgTmd0Y1F1YXRlcm5pb25BcGkgPSB7XG5cdGNvcHk6ICh7IHcsIHgsIHksIHogfTogUXVhdGVybmlvbikgPT4gdm9pZDtcblx0c2V0OiAoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciwgdzogbnVtYmVyKSA9PiB2b2lkO1xuXHRzdWJzY3JpYmU6IChjYWxsYmFjazogKHZhbHVlOiBRdWFkKSA9PiB2b2lkKSA9PiAoKSA9PiB2b2lkO1xufTtcbmV4cG9ydCB0eXBlIE5ndGNWZWN0b3JBcGkgPSB7XG5cdGNvcHk6ICh7IHgsIHksIHogfTogVmVjdG9yMyB8IEV1bGVyKSA9PiB2b2lkO1xuXHRzZXQ6ICh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyKSA9PiB2b2lkO1xuXHRzdWJzY3JpYmU6IChjYWxsYmFjazogKHZhbHVlOiBUcmlwbGV0KSA9PiB2b2lkKSA9PiAoKSA9PiB2b2lkO1xufTtcbmV4cG9ydCB0eXBlIE5ndGNXb3JrZXJBcGkgPSB7XG5cdFtLIGluIEF0b21pY05hbWVdOiBOZ3RjQXRvbWljQXBpPEs+O1xufSAmIHtcblx0W0sgaW4gVmVjdG9yTmFtZV06IE5ndGNWZWN0b3JBcGk7XG59ICYge1xuXHRhcHBseUZvcmNlOiAoZm9yY2U6IFRyaXBsZXQsIHdvcmxkUG9pbnQ6IFRyaXBsZXQpID0+IHZvaWQ7XG5cdGFwcGx5SW1wdWxzZTogKGltcHVsc2U6IFRyaXBsZXQsIHdvcmxkUG9pbnQ6IFRyaXBsZXQpID0+IHZvaWQ7XG5cdGFwcGx5TG9jYWxGb3JjZTogKGZvcmNlOiBUcmlwbGV0LCBsb2NhbFBvaW50OiBUcmlwbGV0KSA9PiB2b2lkO1xuXHRhcHBseUxvY2FsSW1wdWxzZTogKGltcHVsc2U6IFRyaXBsZXQsIGxvY2FsUG9pbnQ6IFRyaXBsZXQpID0+IHZvaWQ7XG5cdGFwcGx5VG9ycXVlOiAodG9ycXVlOiBUcmlwbGV0KSA9PiB2b2lkO1xuXHRxdWF0ZXJuaW9uOiBOZ3RjUXVhdGVybmlvbkFwaTtcblx0cm90YXRpb246IE5ndGNWZWN0b3JBcGk7XG5cdHNjYWxlT3ZlcnJpZGU6IChzY2FsZTogVHJpcGxldCkgPT4gdm9pZDtcblx0c2xlZXA6ICgpID0+IHZvaWQ7XG5cdHdha2VVcDogKCkgPT4gdm9pZDtcblx0cmVtb3ZlOiAoKSA9PiB2b2lkO1xufTtcblxuZXhwb3J0IGludGVyZmFjZSBOZ3RjQm9keVB1YmxpY0FwaSBleHRlbmRzIE5ndGNXb3JrZXJBcGkge1xuXHRhdDogKGluZGV4OiBudW1iZXIpID0+IE5ndGNXb3JrZXJBcGk7XG59XG5cbmV4cG9ydCB0eXBlIE5ndGNHZXRCeUluZGV4PFQgZXh0ZW5kcyBCb2R5UHJvcHM+ID0gKGluZGV4OiBudW1iZXIpID0+IFQ7XG5leHBvcnQgdHlwZSBOZ3RjVHJhbnNmb3JtQXJnPFQgZXh0ZW5kcyB1bmtub3duW10+ID0gKGFyZ3M6IFQpID0+IFQ7XG4iXX0=
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
import {} from '@angular/core';
|
|
2
|
+
import { Euler, Quaternion, Vector3 } from 'three';
|
|
3
|
+
function capitalize(str) {
|
|
4
|
+
return (str.charAt(0).toUpperCase() + str.slice(1));
|
|
5
|
+
}
|
|
6
|
+
function getUUID(ref, index) {
|
|
7
|
+
const suffix = index === undefined ? '' : `/${index}`;
|
|
8
|
+
if (typeof ref === 'function')
|
|
9
|
+
return null;
|
|
10
|
+
return ref && ref.nativeElement && `${ref.nativeElement.uuid}${suffix}`;
|
|
11
|
+
}
|
|
12
|
+
const e = new Euler();
|
|
13
|
+
const q = new Quaternion();
|
|
14
|
+
function quaternionToRotation(callback) {
|
|
15
|
+
return (v) => callback(e.setFromQuaternion(q.fromArray(v)).toArray());
|
|
16
|
+
}
|
|
17
|
+
let incrementingId = 0;
|
|
18
|
+
function createSubscribe(ref, worker, subscriptions, type, index, target = 'bodies') {
|
|
19
|
+
return (callback) => {
|
|
20
|
+
const id = incrementingId++;
|
|
21
|
+
subscriptions[id] = { [type]: callback };
|
|
22
|
+
const uuid = getUUID(ref, index);
|
|
23
|
+
uuid && worker.subscribe({ props: { id, target, type }, uuid });
|
|
24
|
+
return () => {
|
|
25
|
+
delete subscriptions[id];
|
|
26
|
+
worker.unsubscribe({ props: id });
|
|
27
|
+
};
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
function makeTriplet(v) {
|
|
31
|
+
return v instanceof Vector3 ? [v.x, v.y, v.z] : v;
|
|
32
|
+
}
|
|
33
|
+
export function prepare(object, { position = [0, 0, 0], rotation = [0, 0, 0], userData = {} }) {
|
|
34
|
+
object.userData = userData;
|
|
35
|
+
object.position.set(...position);
|
|
36
|
+
object.rotation.set(...rotation);
|
|
37
|
+
object.updateMatrix();
|
|
38
|
+
}
|
|
39
|
+
export function setupCollision(events, { onCollide, onCollideBegin, onCollideEnd }, uuid) {
|
|
40
|
+
events[uuid] = {
|
|
41
|
+
collide: onCollide,
|
|
42
|
+
collideBegin: onCollideBegin,
|
|
43
|
+
collideEnd: onCollideEnd,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export function makeApi(worker, bodyRef, { subscriptions, bodies, scaleOverrides }) {
|
|
47
|
+
const makeAtomic = (type, index) => {
|
|
48
|
+
const op = `set${capitalize(type)}`;
|
|
49
|
+
return {
|
|
50
|
+
set: (value) => {
|
|
51
|
+
const uuid = getUUID(bodyRef, index);
|
|
52
|
+
uuid &&
|
|
53
|
+
worker()[op]({
|
|
54
|
+
props: value,
|
|
55
|
+
uuid,
|
|
56
|
+
});
|
|
57
|
+
},
|
|
58
|
+
subscribe: createSubscribe(bodyRef, worker(), subscriptions, type, index),
|
|
59
|
+
};
|
|
60
|
+
};
|
|
61
|
+
const makeQuaternion = (index) => {
|
|
62
|
+
const type = 'quaternion';
|
|
63
|
+
return {
|
|
64
|
+
copy: ({ w, x, y, z }) => {
|
|
65
|
+
const uuid = getUUID(bodyRef, index);
|
|
66
|
+
uuid && bodies[uuid] != null && worker().setQuaternion({ props: [x, y, z, w], uuid });
|
|
67
|
+
},
|
|
68
|
+
set: (x, y, z, w) => {
|
|
69
|
+
const uuid = getUUID(bodyRef, index);
|
|
70
|
+
uuid && bodies[uuid] != null && worker().setQuaternion({ props: [x, y, z, w], uuid });
|
|
71
|
+
},
|
|
72
|
+
subscribe: createSubscribe(bodyRef, worker(), subscriptions, type, index),
|
|
73
|
+
};
|
|
74
|
+
};
|
|
75
|
+
const makeRotation = (index) => {
|
|
76
|
+
return {
|
|
77
|
+
copy: ({ x, y, z }) => {
|
|
78
|
+
const uuid = getUUID(bodyRef, index);
|
|
79
|
+
uuid && bodies[uuid] != null && worker().setRotation({ props: [x, y, z], uuid });
|
|
80
|
+
},
|
|
81
|
+
set: (x, y, z) => {
|
|
82
|
+
const uuid = getUUID(bodyRef, index);
|
|
83
|
+
uuid && bodies[uuid] != null && worker().setRotation({ props: [x, y, z], uuid });
|
|
84
|
+
},
|
|
85
|
+
subscribe: (callback) => {
|
|
86
|
+
const id = incrementingId++;
|
|
87
|
+
const target = 'bodies';
|
|
88
|
+
const type = 'quaternion';
|
|
89
|
+
const uuid = getUUID(bodyRef, index);
|
|
90
|
+
subscriptions[id] = { [type]: quaternionToRotation(callback) };
|
|
91
|
+
uuid && bodies[uuid] != null && worker().subscribe({ props: { id, target, type }, uuid });
|
|
92
|
+
return () => {
|
|
93
|
+
delete subscriptions[id];
|
|
94
|
+
worker().unsubscribe({ props: id });
|
|
95
|
+
};
|
|
96
|
+
},
|
|
97
|
+
};
|
|
98
|
+
};
|
|
99
|
+
const makeVec = (type, index) => {
|
|
100
|
+
const op = `set${capitalize(type)}`;
|
|
101
|
+
return {
|
|
102
|
+
copy: ({ x, y, z }) => {
|
|
103
|
+
const uuid = getUUID(bodyRef, index);
|
|
104
|
+
uuid && bodies[uuid] != null && worker()[op]({ props: [x, y, z], uuid });
|
|
105
|
+
},
|
|
106
|
+
set: (x, y, z) => {
|
|
107
|
+
const uuid = getUUID(bodyRef, index);
|
|
108
|
+
uuid && bodies[uuid] != null && worker()[op]({ props: [x, y, z], uuid });
|
|
109
|
+
},
|
|
110
|
+
subscribe: createSubscribe(bodyRef, worker(), subscriptions, type, index),
|
|
111
|
+
};
|
|
112
|
+
};
|
|
113
|
+
const makeRemove = (index) => {
|
|
114
|
+
const uuid = getUUID(bodyRef, index);
|
|
115
|
+
return () => {
|
|
116
|
+
if (uuid)
|
|
117
|
+
worker().removeBodies({ uuid: [uuid] });
|
|
118
|
+
};
|
|
119
|
+
};
|
|
120
|
+
function makeApi(index) {
|
|
121
|
+
return {
|
|
122
|
+
allowSleep: makeAtomic('allowSleep', index),
|
|
123
|
+
angularDamping: makeAtomic('angularDamping', index),
|
|
124
|
+
angularFactor: makeVec('angularFactor', index),
|
|
125
|
+
angularVelocity: makeVec('angularVelocity', index),
|
|
126
|
+
applyForce(force, worldPoint) {
|
|
127
|
+
const uuid = getUUID(bodyRef, index);
|
|
128
|
+
uuid && bodies[uuid] != null && worker().applyForce({ props: [force, worldPoint], uuid });
|
|
129
|
+
},
|
|
130
|
+
applyImpulse(impulse, worldPoint) {
|
|
131
|
+
const uuid = getUUID(bodyRef, index);
|
|
132
|
+
uuid && bodies[uuid] != null && worker().applyImpulse({ props: [impulse, worldPoint], uuid });
|
|
133
|
+
},
|
|
134
|
+
applyLocalForce(force, localPoint) {
|
|
135
|
+
const uuid = getUUID(bodyRef, index);
|
|
136
|
+
uuid && bodies[uuid] != null && worker().applyLocalForce({ props: [force, localPoint], uuid });
|
|
137
|
+
},
|
|
138
|
+
applyLocalImpulse(impulse, localPoint) {
|
|
139
|
+
const uuid = getUUID(bodyRef, index);
|
|
140
|
+
uuid && bodies[uuid] != null && worker().applyLocalImpulse({ props: [impulse, localPoint], uuid });
|
|
141
|
+
},
|
|
142
|
+
applyTorque(torque) {
|
|
143
|
+
const uuid = getUUID(bodyRef, index);
|
|
144
|
+
uuid && bodies[uuid] != null && worker().applyTorque({ props: [torque], uuid });
|
|
145
|
+
},
|
|
146
|
+
collisionFilterGroup: makeAtomic('collisionFilterGroup', index),
|
|
147
|
+
collisionFilterMask: makeAtomic('collisionFilterMask', index),
|
|
148
|
+
collisionResponse: makeAtomic('collisionResponse', index),
|
|
149
|
+
fixedRotation: makeAtomic('fixedRotation', index),
|
|
150
|
+
isTrigger: makeAtomic('isTrigger', index),
|
|
151
|
+
linearDamping: makeAtomic('linearDamping', index),
|
|
152
|
+
linearFactor: makeVec('linearFactor', index),
|
|
153
|
+
mass: makeAtomic('mass', index),
|
|
154
|
+
material: makeAtomic('material', index),
|
|
155
|
+
position: makeVec('position', index),
|
|
156
|
+
quaternion: makeQuaternion(index),
|
|
157
|
+
rotation: makeRotation(index),
|
|
158
|
+
scaleOverride(scale) {
|
|
159
|
+
const uuid = getUUID(bodyRef, index);
|
|
160
|
+
if (uuid)
|
|
161
|
+
scaleOverrides[uuid] = new Vector3(...scale);
|
|
162
|
+
},
|
|
163
|
+
sleep() {
|
|
164
|
+
const uuid = getUUID(bodyRef, index);
|
|
165
|
+
uuid && bodies[uuid] != null && worker().sleep({ uuid });
|
|
166
|
+
},
|
|
167
|
+
sleepSpeedLimit: makeAtomic('sleepSpeedLimit', index),
|
|
168
|
+
sleepTimeLimit: makeAtomic('sleepTimeLimit', index),
|
|
169
|
+
userData: makeAtomic('userData', index),
|
|
170
|
+
velocity: makeVec('velocity', index),
|
|
171
|
+
remove: makeRemove(index),
|
|
172
|
+
wakeUp() {
|
|
173
|
+
const uuid = getUUID(bodyRef, index);
|
|
174
|
+
uuid && bodies[uuid] != null && worker().wakeUp({ uuid });
|
|
175
|
+
},
|
|
176
|
+
};
|
|
177
|
+
}
|
|
178
|
+
const cache = {};
|
|
179
|
+
return {
|
|
180
|
+
...makeApi(undefined),
|
|
181
|
+
at: (index) => cache[index] || (cache[index] = makeApi(index)),
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
export const defaultTransformArgs = {
|
|
185
|
+
Plane: (args) => [],
|
|
186
|
+
Box: (args = [1, 1, 1]) => args,
|
|
187
|
+
Trimesh: (args) => args,
|
|
188
|
+
Cylinder: (args = []) => [],
|
|
189
|
+
Heightfield: (args) => args,
|
|
190
|
+
ConvexPolyhedron: ([vertices, faces, normals, axes, boundingSphereRadius] = []) => [
|
|
191
|
+
vertices && vertices.map(makeTriplet),
|
|
192
|
+
faces,
|
|
193
|
+
normals && normals.map(makeTriplet),
|
|
194
|
+
axes && axes.map(makeTriplet),
|
|
195
|
+
boundingSphereRadius,
|
|
196
|
+
],
|
|
197
|
+
Particle: (args) => [],
|
|
198
|
+
Sphere: (args = [1]) => {
|
|
199
|
+
if (!Array.isArray(args))
|
|
200
|
+
throw new Error('Sphere body args must be an array');
|
|
201
|
+
return [args[0]];
|
|
202
|
+
},
|
|
203
|
+
Compound: (args) => args,
|
|
204
|
+
};
|
|
205
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2Nhbm5vbi9ib2R5L3NyYy9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFnQyxNQUFNLGVBQWUsQ0FBQztBQW9CN0QsT0FBTyxFQUFFLEtBQUssRUFBRSxVQUFVLEVBQUUsT0FBTyxFQUFpQixNQUFNLE9BQU8sQ0FBQztBQUdsRSxTQUFTLFVBQVUsQ0FBbUIsR0FBTTtJQUMzQyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxXQUFXLEVBQUUsR0FBRyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFrQixDQUFDO0FBQ3RFLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxHQUF5QixFQUFFLEtBQWM7SUFDekQsTUFBTSxNQUFNLEdBQUcsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO0lBQ3RELElBQUksT0FBTyxHQUFHLEtBQUssVUFBVTtRQUFFLE9BQU8sSUFBSSxDQUFDO0lBQzNDLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLElBQUksR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztBQUN6RSxDQUFDO0FBRUQsTUFBTSxDQUFDLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUN0QixNQUFNLENBQUMsR0FBRyxJQUFJLFVBQVUsRUFBRSxDQUFDO0FBRTNCLFNBQVMsb0JBQW9CLENBQUMsUUFBOEI7SUFDM0QsT0FBTyxDQUFDLENBQU8sRUFBRSxFQUFFLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFhLENBQUMsQ0FBQztBQUN4RixD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QUUsQ0FBQyxJQUFJO0lBQzVDLGdCQUFnQixFQUFFLENBQUMsQ0FBQyxRQUFRLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxJQUFJLEVBQUUsb0JBQW9CLElBQW1DLEVBQUUsRUFBRSxFQUFFLENBQUM7UUFDakgsUUFBUSxJQUFJLFFBQVEsQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO1FBQ3JDLEtBQUs7UUFDTCxPQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUM7UUFDbkMsSUFBSSxJQUFJLElBQUksQ0FBQyxHQUFHLENBQUMsV0FBVyxDQUFDO1FBQzdCLG9CQUFvQjtLQUNwQjtJQUNELFFBQVEsRUFBRSxDQUFDLElBQWUsRUFBRSxFQUFFLENBQUMsRUFBRTtJQUNqQyxNQUFNLEVBQUUsQ0FBQyxPQUFtQixDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUU7UUFDbEMsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDO1lBQUUsTUFBTSxJQUFJLEtBQUssQ0FBQyxtQ0FBbUMsQ0FBQyxDQUFDO1FBQy9FLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztJQUNsQixDQUFDO0lBQ0QsUUFBUSxFQUFFLENBQUMsSUFBZSxFQUFFLEVBQUUsQ0FBQyxJQUFJO0NBQ25DLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyB0eXBlIEVsZW1lbnRSZWYsIHR5cGUgU2lnbmFsIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgdHlwZSB7XG5cdEF0b21pY05hbWUsXG5cdEJvZHlQcm9wcyxcblx0Q2Fubm9uV29ya2VyQVBJLFxuXHRDb252ZXhQb2x5aGVkcm9uQXJncyxcblx0Q3lsaW5kZXJBcmdzLFxuXHRIZWlnaHRmaWVsZEFyZ3MsXG5cdFByb3BWYWx1ZSxcblx0UXVhZCxcblx0U2V0T3BOYW1lLFxuXHRTcGhlcmVBcmdzLFxuXHRTdWJzY3JpcHRpb25OYW1lLFxuXHRTdWJzY3JpcHRpb25UYXJnZXQsXG5cdFN1YnNjcmlwdGlvbnMsXG5cdFRyaW1lc2hBcmdzLFxuXHRUcmlwbGV0LFxuXHRWZWN0b3JOYW1lLFxufSBmcm9tICdAcG1uZHJzL2Nhbm5vbi13b3JrZXItYXBpJztcbmltcG9ydCB0eXBlIHsgTmd0Y0Nhbm5vbkV2ZW50cywgTmd0Y1BoeXNpY3NBcGkgfSBmcm9tICdhbmd1bGFyLXRocmVlLWNhbm5vbic7XG5pbXBvcnQgeyBFdWxlciwgUXVhdGVybmlvbiwgVmVjdG9yMywgdHlwZSBPYmplY3QzRCB9IGZyb20gJ3RocmVlJztcbmltcG9ydCB0eXBlIHsgTmd0Y1dvcmtlckFwaSB9IGZyb20gJy4vdHlwZXMnO1xuXG5mdW5jdGlvbiBjYXBpdGFsaXplPFQgZXh0ZW5kcyBzdHJpbmc+KHN0cjogVCk6IENhcGl0YWxpemU8VD4ge1xuXHRyZXR1cm4gKHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKSkgYXMgQ2FwaXRhbGl6ZTxUPjtcbn1cblxuZnVuY3Rpb24gZ2V0VVVJRChyZWY6IEVsZW1lbnRSZWY8T2JqZWN0M0Q+LCBpbmRleD86IG51bWJlcik6IHN0cmluZyB8IG51bGwge1xuXHRjb25zdCBzdWZmaXggPSBpbmRleCA9PT0gdW5kZWZpbmVkID8gJycgOiBgLyR7aW5kZXh9YDtcblx0aWYgKHR5cGVvZiByZWYgPT09ICdmdW5jdGlvbicpIHJldHVybiBudWxsO1xuXHRyZXR1cm4gcmVmICYmIHJlZi5uYXRpdmVFbGVtZW50ICYmIGAke3JlZi5uYXRpdmVFbGVtZW50LnV1aWR9JHtzdWZmaXh9YDtcbn1cblxuY29uc3QgZSA9IG5ldyBFdWxlcigpO1xuY29uc3QgcSA9IG5ldyBRdWF0ZXJuaW9uKCk7XG5cbmZ1bmN0aW9uIHF1YXRlcm5pb25Ub1JvdGF0aW9uKGNhbGxiYWNrOiAodjogVHJpcGxldCkgPT4gdm9pZCkge1xuXHRyZXR1cm4gKHY6IFF1YWQpID0+IGNhbGxiYWNrKGUuc2V0RnJvbVF1YXRlcm5pb24ocS5mcm9tQXJyYXkodikpLnRvQXJyYXkoKSBhcyBUcmlwbGV0KTtcbn1cblxubGV0IGluY3JlbWVudGluZ0lkID0gMDtcbmZ1bmN0aW9uIGNyZWF0ZVN1YnNjcmliZTxUIGV4dGVuZHMgU3Vic2NyaXB0aW9uTmFtZT4oXG5cdHJlZjogRWxlbWVudFJlZjxPYmplY3QzRD4sXG5cdHdvcmtlcjogQ2Fubm9uV29ya2VyQVBJLFxuXHRzdWJzY3JpcHRpb25zOiBTdWJzY3JpcHRpb25zLFxuXHR0eXBlOiBULFxuXHRpbmRleD86IG51bWJlcixcblx0dGFyZ2V0OiBTdWJzY3JpcHRpb25UYXJnZXQgPSAnYm9kaWVzJyxcbikge1xuXHRyZXR1cm4gKGNhbGxiYWNrOiAodmFsdWU6IFByb3BWYWx1ZTxUPikgPT4gdm9pZCkgPT4ge1xuXHRcdGNvbnN0IGlkID0gaW5jcmVtZW50aW5nSWQrKztcblx0XHRzdWJzY3JpcHRpb25zW2lkXSA9IHsgW3R5cGVdOiBjYWxsYmFjayB9O1xuXHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKHJlZiwgaW5kZXgpO1xuXHRcdHV1aWQgJiYgd29ya2VyLnN1YnNjcmliZSh7IHByb3BzOiB7IGlkLCB0YXJnZXQsIHR5cGUgfSwgdXVpZCB9KTtcblx0XHRyZXR1cm4gKCkgPT4ge1xuXHRcdFx0ZGVsZXRlIHN1YnNjcmlwdGlvbnNbaWRdO1xuXHRcdFx0d29ya2VyLnVuc3Vic2NyaWJlKHsgcHJvcHM6IGlkIH0pO1xuXHRcdH07XG5cdH07XG59XG5cbmZ1bmN0aW9uIG1ha2VUcmlwbGV0KHY6IFZlY3RvcjMgfCBUcmlwbGV0KTogVHJpcGxldCB7XG5cdHJldHVybiB2IGluc3RhbmNlb2YgVmVjdG9yMyA/IFt2LngsIHYueSwgdi56XSA6IHY7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcmVwYXJlKG9iamVjdDogT2JqZWN0M0QsIHsgcG9zaXRpb24gPSBbMCwgMCwgMF0sIHJvdGF0aW9uID0gWzAsIDAsIDBdLCB1c2VyRGF0YSA9IHt9IH06IEJvZHlQcm9wcykge1xuXHRvYmplY3QudXNlckRhdGEgPSB1c2VyRGF0YTtcblx0b2JqZWN0LnBvc2l0aW9uLnNldCguLi5wb3NpdGlvbik7XG5cdG9iamVjdC5yb3RhdGlvbi5zZXQoLi4ucm90YXRpb24pO1xuXHRvYmplY3QudXBkYXRlTWF0cml4KCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXR1cENvbGxpc2lvbihcblx0ZXZlbnRzOiBOZ3RjQ2Fubm9uRXZlbnRzLFxuXHR7IG9uQ29sbGlkZSwgb25Db2xsaWRlQmVnaW4sIG9uQ29sbGlkZUVuZCB9OiBQYXJ0aWFsPEJvZHlQcm9wcz4sXG5cdHV1aWQ6IHN0cmluZyxcbikge1xuXHRldmVudHNbdXVpZF0gPSB7XG5cdFx0Y29sbGlkZTogb25Db2xsaWRlLFxuXHRcdGNvbGxpZGVCZWdpbjogb25Db2xsaWRlQmVnaW4sXG5cdFx0Y29sbGlkZUVuZDogb25Db2xsaWRlRW5kLFxuXHR9O1xufVxuXG5leHBvcnQgZnVuY3Rpb24gbWFrZUFwaShcblx0d29ya2VyOiBTaWduYWw8Q2Fubm9uV29ya2VyQVBJPixcblx0Ym9keVJlZjogRWxlbWVudFJlZjxPYmplY3QzRD4sXG5cdHsgc3Vic2NyaXB0aW9ucywgYm9kaWVzLCBzY2FsZU92ZXJyaWRlcyB9OiBOZ3RjUGh5c2ljc0FwaSxcbikge1xuXHRjb25zdCBtYWtlQXRvbWljID0gPFQgZXh0ZW5kcyBBdG9taWNOYW1lPih0eXBlOiBULCBpbmRleD86IG51bWJlcikgPT4ge1xuXHRcdGNvbnN0IG9wOiBTZXRPcE5hbWU8VD4gPSBgc2V0JHtjYXBpdGFsaXplKHR5cGUpfWA7XG5cblx0XHRyZXR1cm4ge1xuXHRcdFx0c2V0OiAodmFsdWU6IFByb3BWYWx1ZTxUPikgPT4ge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiZcblx0XHRcdFx0XHR3b3JrZXIoKVtvcF0oe1xuXHRcdFx0XHRcdFx0cHJvcHM6IHZhbHVlLFxuXHRcdFx0XHRcdFx0dXVpZCxcblx0XHRcdFx0XHR9IGFzIG5ldmVyKTtcblx0XHRcdH0sXG5cdFx0XHRzdWJzY3JpYmU6IGNyZWF0ZVN1YnNjcmliZShib2R5UmVmLCB3b3JrZXIoKSwgc3Vic2NyaXB0aW9ucywgdHlwZSwgaW5kZXgpLFxuXHRcdH07XG5cdH07XG5cblx0Y29uc3QgbWFrZVF1YXRlcm5pb24gPSAoaW5kZXg/OiBudW1iZXIpID0+IHtcblx0XHRjb25zdCB0eXBlID0gJ3F1YXRlcm5pb24nO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjb3B5OiAoeyB3LCB4LCB5LCB6IH06IFF1YXRlcm5pb24pID0+IHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdFx0XHR1dWlkICYmIGJvZGllc1t1dWlkXSAhPSBudWxsICYmIHdvcmtlcigpLnNldFF1YXRlcm5pb24oeyBwcm9wczogW3gsIHksIHosIHddLCB1dWlkIH0pO1xuXHRcdFx0fSxcblx0XHRcdHNldDogKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIsIHc6IG51bWJlcikgPT4ge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiYgYm9kaWVzW3V1aWRdICE9IG51bGwgJiYgd29ya2VyKCkuc2V0UXVhdGVybmlvbih7IHByb3BzOiBbeCwgeSwgeiwgd10sIHV1aWQgfSk7XG5cdFx0XHR9LFxuXHRcdFx0c3Vic2NyaWJlOiBjcmVhdGVTdWJzY3JpYmUoYm9keVJlZiwgd29ya2VyKCksIHN1YnNjcmlwdGlvbnMsIHR5cGUsIGluZGV4KSxcblx0XHR9O1xuXHR9O1xuXG5cdGNvbnN0IG1ha2VSb3RhdGlvbiA9IChpbmRleD86IG51bWJlcikgPT4ge1xuXHRcdHJldHVybiB7XG5cdFx0XHRjb3B5OiAoeyB4LCB5LCB6IH06IFZlY3RvcjMgfCBFdWxlcikgPT4ge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiYgYm9kaWVzW3V1aWRdICE9IG51bGwgJiYgd29ya2VyKCkuc2V0Um90YXRpb24oeyBwcm9wczogW3gsIHksIHpdLCB1dWlkIH0pO1xuXHRcdFx0fSxcblx0XHRcdHNldDogKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIpID0+IHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdFx0XHR1dWlkICYmIGJvZGllc1t1dWlkXSAhPSBudWxsICYmIHdvcmtlcigpLnNldFJvdGF0aW9uKHsgcHJvcHM6IFt4LCB5LCB6XSwgdXVpZCB9KTtcblx0XHRcdH0sXG5cdFx0XHRzdWJzY3JpYmU6IChjYWxsYmFjazogKHZhbHVlOiBUcmlwbGV0KSA9PiB2b2lkKSA9PiB7XG5cdFx0XHRcdGNvbnN0IGlkID0gaW5jcmVtZW50aW5nSWQrKztcblx0XHRcdFx0Y29uc3QgdGFyZ2V0ID0gJ2JvZGllcyc7XG5cdFx0XHRcdGNvbnN0IHR5cGUgPSAncXVhdGVybmlvbic7XG5cdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblxuXHRcdFx0XHRzdWJzY3JpcHRpb25zW2lkXSA9IHsgW3R5cGVdOiBxdWF0ZXJuaW9uVG9Sb3RhdGlvbihjYWxsYmFjaykgfTtcblx0XHRcdFx0dXVpZCAmJiBib2RpZXNbdXVpZF0gIT0gbnVsbCAmJiB3b3JrZXIoKS5zdWJzY3JpYmUoeyBwcm9wczogeyBpZCwgdGFyZ2V0LCB0eXBlIH0sIHV1aWQgfSk7XG5cdFx0XHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRcdFx0ZGVsZXRlIHN1YnNjcmlwdGlvbnNbaWRdO1xuXHRcdFx0XHRcdHdvcmtlcigpLnVuc3Vic2NyaWJlKHsgcHJvcHM6IGlkIH0pO1xuXHRcdFx0XHR9O1xuXHRcdFx0fSxcblx0XHR9O1xuXHR9O1xuXG5cdGNvbnN0IG1ha2VWZWMgPSAodHlwZTogVmVjdG9yTmFtZSwgaW5kZXg/OiBudW1iZXIpID0+IHtcblx0XHRjb25zdCBvcDogU2V0T3BOYW1lPFZlY3Rvck5hbWU+ID0gYHNldCR7Y2FwaXRhbGl6ZSh0eXBlKX1gO1xuXHRcdHJldHVybiB7XG5cdFx0XHRjb3B5OiAoeyB4LCB5LCB6IH06IFZlY3RvcjMgfCBFdWxlcikgPT4ge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiYgYm9kaWVzW3V1aWRdICE9IG51bGwgJiYgd29ya2VyKClbb3BdKHsgcHJvcHM6IFt4LCB5LCB6XSwgdXVpZCB9KTtcblx0XHRcdH0sXG5cdFx0XHRzZXQ6ICh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyKSA9PiB7XG5cdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblx0XHRcdFx0dXVpZCAmJiBib2RpZXNbdXVpZF0gIT0gbnVsbCAmJiB3b3JrZXIoKVtvcF0oeyBwcm9wczogW3gsIHksIHpdLCB1dWlkIH0pO1xuXHRcdFx0fSxcblx0XHRcdHN1YnNjcmliZTogY3JlYXRlU3Vic2NyaWJlKGJvZHlSZWYsIHdvcmtlcigpLCBzdWJzY3JpcHRpb25zLCB0eXBlLCBpbmRleCksXG5cdFx0fTtcblx0fTtcblxuXHRjb25zdCBtYWtlUmVtb3ZlID0gKGluZGV4PzogbnVtYmVyKSA9PiB7XG5cdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdHJldHVybiAoKSA9PiB7XG5cdFx0XHRpZiAodXVpZCkgd29ya2VyKCkucmVtb3ZlQm9kaWVzKHsgdXVpZDogW3V1aWRdIH0pO1xuXHRcdH07XG5cdH07XG5cblx0ZnVuY3Rpb24gbWFrZUFwaShpbmRleD86IG51bWJlcik6IE5ndGNXb3JrZXJBcGkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRhbGxvd1NsZWVwOiBtYWtlQXRvbWljKCdhbGxvd1NsZWVwJywgaW5kZXgpLFxuXHRcdFx0YW5ndWxhckRhbXBpbmc6IG1ha2VBdG9taWMoJ2FuZ3VsYXJEYW1waW5nJywgaW5kZXgpLFxuXHRcdFx0YW5ndWxhckZhY3RvcjogbWFrZVZlYygnYW5ndWxhckZhY3RvcicsIGluZGV4KSxcblx0XHRcdGFuZ3VsYXJWZWxvY2l0eTogbWFrZVZlYygnYW5ndWxhclZlbG9jaXR5JywgaW5kZXgpLFxuXHRcdFx0YXBwbHlGb3JjZShmb3JjZTogVHJpcGxldCwgd29ybGRQb2ludDogVHJpcGxldCkge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiYgYm9kaWVzW3V1aWRdICE9IG51bGwgJiYgd29ya2VyKCkuYXBwbHlGb3JjZSh7IHByb3BzOiBbZm9yY2UsIHdvcmxkUG9pbnRdLCB1dWlkIH0pO1xuXHRcdFx0fSxcblx0XHRcdGFwcGx5SW1wdWxzZShpbXB1bHNlOiBUcmlwbGV0LCB3b3JsZFBvaW50OiBUcmlwbGV0KSB7XG5cdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblx0XHRcdFx0dXVpZCAmJiBib2RpZXNbdXVpZF0gIT0gbnVsbCAmJiB3b3JrZXIoKS5hcHBseUltcHVsc2UoeyBwcm9wczogW2ltcHVsc2UsIHdvcmxkUG9pbnRdLCB1dWlkIH0pO1xuXHRcdFx0fSxcblx0XHRcdGFwcGx5TG9jYWxGb3JjZShmb3JjZTogVHJpcGxldCwgbG9jYWxQb2ludDogVHJpcGxldCkge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiYgYm9kaWVzW3V1aWRdICE9IG51bGwgJiYgd29ya2VyKCkuYXBwbHlMb2NhbEZvcmNlKHsgcHJvcHM6IFtmb3JjZSwgbG9jYWxQb2ludF0sIHV1aWQgfSk7XG5cdFx0XHR9LFxuXHRcdFx0YXBwbHlMb2NhbEltcHVsc2UoaW1wdWxzZTogVHJpcGxldCwgbG9jYWxQb2ludDogVHJpcGxldCkge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiYgYm9kaWVzW3V1aWRdICE9IG51bGwgJiYgd29ya2VyKCkuYXBwbHlMb2NhbEltcHVsc2UoeyBwcm9wczogW2ltcHVsc2UsIGxvY2FsUG9pbnRdLCB1dWlkIH0pO1xuXHRcdFx0fSxcblx0XHRcdGFwcGx5VG9ycXVlKHRvcnF1ZTogVHJpcGxldCkge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiYgYm9kaWVzW3V1aWRdICE9IG51bGwgJiYgd29ya2VyKCkuYXBwbHlUb3JxdWUoeyBwcm9wczogW3RvcnF1ZV0sIHV1aWQgfSk7XG5cdFx0XHR9LFxuXHRcdFx0Y29sbGlzaW9uRmlsdGVyR3JvdXA6IG1ha2VBdG9taWMoJ2NvbGxpc2lvbkZpbHRlckdyb3VwJywgaW5kZXgpLFxuXHRcdFx0Y29sbGlzaW9uRmlsdGVyTWFzazogbWFrZUF0b21pYygnY29sbGlzaW9uRmlsdGVyTWFzaycsIGluZGV4KSxcblx0XHRcdGNvbGxpc2lvblJlc3BvbnNlOiBtYWtlQXRvbWljKCdjb2xsaXNpb25SZXNwb25zZScsIGluZGV4KSxcblx0XHRcdGZpeGVkUm90YXRpb246IG1ha2VBdG9taWMoJ2ZpeGVkUm90YXRpb24nLCBpbmRleCksXG5cdFx0XHRpc1RyaWdnZXI6IG1ha2VBdG9taWMoJ2lzVHJpZ2dlcicsIGluZGV4KSxcblx0XHRcdGxpbmVhckRhbXBpbmc6IG1ha2VBdG9taWMoJ2xpbmVhckRhbXBpbmcnLCBpbmRleCksXG5cdFx0XHRsaW5lYXJGYWN0b3I6IG1ha2VWZWMoJ2xpbmVhckZhY3RvcicsIGluZGV4KSxcblx0XHRcdG1hc3M6IG1ha2VBdG9taWMoJ21hc3MnLCBpbmRleCksXG5cdFx0XHRtYXRlcmlhbDogbWFrZUF0b21pYygnbWF0ZXJpYWwnLCBpbmRleCksXG5cdFx0XHRwb3NpdGlvbjogbWFrZVZlYygncG9zaXRpb24nLCBpbmRleCksXG5cdFx0XHRxdWF0ZXJuaW9uOiBtYWtlUXVhdGVybmlvbihpbmRleCksXG5cdFx0XHRyb3RhdGlvbjogbWFrZVJvdGF0aW9uKGluZGV4KSxcblx0XHRcdHNjYWxlT3ZlcnJpZGUoc2NhbGUpIHtcblx0XHRcdFx0Y29uc3QgdXVpZCA9IGdldFVVSUQoYm9keVJlZiwgaW5kZXgpO1xuXHRcdFx0XHRpZiAodXVpZCkgc2NhbGVPdmVycmlkZXNbdXVpZF0gPSBuZXcgVmVjdG9yMyguLi5zY2FsZSk7XG5cdFx0XHR9LFxuXHRcdFx0c2xlZXAoKSB7XG5cdFx0XHRcdGNvbnN0IHV1aWQgPSBnZXRVVUlEKGJvZHlSZWYsIGluZGV4KTtcblx0XHRcdFx0dXVpZCAmJiBib2RpZXNbdXVpZF0gIT0gbnVsbCAmJiB3b3JrZXIoKS5zbGVlcCh7IHV1aWQgfSk7XG5cdFx0XHR9LFxuXHRcdFx0c2xlZXBTcGVlZExpbWl0OiBtYWtlQXRvbWljKCdzbGVlcFNwZWVkTGltaXQnLCBpbmRleCksXG5cdFx0XHRzbGVlcFRpbWVMaW1pdDogbWFrZUF0b21pYygnc2xlZXBUaW1lTGltaXQnLCBpbmRleCksXG5cdFx0XHR1c2VyRGF0YTogbWFrZUF0b21pYygndXNlckRhdGEnLCBpbmRleCksXG5cdFx0XHR2ZWxvY2l0eTogbWFrZVZlYygndmVsb2NpdHknLCBpbmRleCksXG5cdFx0XHRyZW1vdmU6IG1ha2VSZW1vdmUoaW5kZXgpLFxuXHRcdFx0d2FrZVVwKCkge1xuXHRcdFx0XHRjb25zdCB1dWlkID0gZ2V0VVVJRChib2R5UmVmLCBpbmRleCk7XG5cdFx0XHRcdHV1aWQgJiYgYm9kaWVzW3V1aWRdICE9IG51bGwgJiYgd29ya2VyKCkud2FrZVVwKHsgdXVpZCB9KTtcblx0XHRcdH0sXG5cdFx0fTtcblx0fVxuXG5cdGNvbnN0IGNhY2hlOiB7IFtpbmRleDogbnVtYmVyXTogTmd0Y1dvcmtlckFwaSB9ID0ge307XG5cdHJldHVybiB7XG5cdFx0Li4ubWFrZUFwaSh1bmRlZmluZWQpLFxuXHRcdGF0OiAoaW5kZXg6IG51bWJlcikgPT4gY2FjaGVbaW5kZXhdIHx8IChjYWNoZVtpbmRleF0gPSBtYWtlQXBpKGluZGV4KSksXG5cdH07XG59XG5cbmV4cG9ydCBjb25zdCBkZWZhdWx0VHJhbnNmb3JtQXJncyA9IHtcblx0UGxhbmU6IChhcmdzOiB1bmtub3duW10pID0+IFtdLFxuXHRCb3g6IChhcmdzOiBUcmlwbGV0ID0gWzEsIDEsIDFdKSA9PiBhcmdzLFxuXHRUcmltZXNoOiAoYXJnczogVHJpbWVzaEFyZ3MpID0+IGFyZ3MsXG5cdEN5bGluZGVyOiAoYXJnczogQ3lsaW5kZXJBcmdzID0gW10pID0+IFtdLFxuXHRIZWlnaHRmaWVsZDogKGFyZ3M6IEhlaWdodGZpZWxkQXJncykgPT4gYXJncyxcblx0Q29udmV4UG9seWhlZHJvbjogKFt2ZXJ0aWNlcywgZmFjZXMsIG5vcm1hbHMsIGF4ZXMsIGJvdW5kaW5nU3BoZXJlUmFkaXVzXTogQ29udmV4UG9seWhlZHJvbkFyZ3M8VHJpcGxldD4gPSBbXSkgPT4gW1xuXHRcdHZlcnRpY2VzICYmIHZlcnRpY2VzLm1hcChtYWtlVHJpcGxldCksXG5cdFx0ZmFjZXMsXG5cdFx0bm9ybWFscyAmJiBub3JtYWxzLm1hcChtYWtlVHJpcGxldCksXG5cdFx0YXhlcyAmJiBheGVzLm1hcChtYWtlVHJpcGxldCksXG5cdFx0Ym91bmRpbmdTcGhlcmVSYWRpdXMsXG5cdF0sXG5cdFBhcnRpY2xlOiAoYXJnczogdW5rbm93bltdKSA9PiBbXSxcblx0U3BoZXJlOiAoYXJnczogU3BoZXJlQXJncyA9IFsxXSkgPT4ge1xuXHRcdGlmICghQXJyYXkuaXNBcnJheShhcmdzKSkgdGhyb3cgbmV3IEVycm9yKCdTcGhlcmUgYm9keSBhcmdzIG11c3QgYmUgYW4gYXJyYXknKTtcblx0XHRyZXR1cm4gW2FyZ3NbMF1dO1xuXHR9LFxuXHRDb21wb3VuZDogKGFyZ3M6IHVua25vd25bXSkgPT4gYXJncyxcbn07XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './index';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1jYW5ub24tY29uc3RyYWludC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY2Fubm9uL2NvbnN0cmFpbnQvc3JjL2FuZ3VsYXItdGhyZWUtY2Fubm9uLWNvbnN0cmFpbnQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
|