angular-three-cannon 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (48) hide show
  1. package/README.md +7 -0
  2. package/debug/README.md +3 -0
  3. package/debug/index.d.ts +1 -0
  4. package/debug/lib/debug.d.ts +26 -0
  5. package/esm2020/angular-three-cannon.mjs +5 -0
  6. package/esm2020/debug/angular-three-cannon-debug.mjs +5 -0
  7. package/esm2020/debug/index.mjs +2 -0
  8. package/esm2020/debug/lib/debug.mjs +117 -0
  9. package/esm2020/index.mjs +4 -0
  10. package/esm2020/lib/physics.mjs +261 -0
  11. package/esm2020/lib/store.mjs +21 -0
  12. package/esm2020/lib/utils.mjs +47 -0
  13. package/esm2020/services/angular-three-cannon-services.mjs +5 -0
  14. package/esm2020/services/index.mjs +2 -0
  15. package/esm2020/services/lib/body.mjs +293 -0
  16. package/fesm2015/angular-three-cannon-debug.mjs +124 -0
  17. package/fesm2015/angular-three-cannon-debug.mjs.map +1 -0
  18. package/fesm2015/angular-three-cannon-services.mjs +299 -0
  19. package/fesm2015/angular-three-cannon-services.mjs.map +1 -0
  20. package/fesm2015/angular-three-cannon.mjs +333 -0
  21. package/fesm2015/angular-three-cannon.mjs.map +1 -0
  22. package/fesm2020/angular-three-cannon-debug.mjs +124 -0
  23. package/fesm2020/angular-three-cannon-debug.mjs.map +1 -0
  24. package/fesm2020/angular-three-cannon-services.mjs +300 -0
  25. package/fesm2020/angular-three-cannon-services.mjs.map +1 -0
  26. package/fesm2020/angular-three-cannon.mjs +331 -0
  27. package/fesm2020/angular-three-cannon.mjs.map +1 -0
  28. package/index.d.ts +3 -0
  29. package/lib/physics.d.ts +43 -0
  30. package/lib/store.d.ts +34 -0
  31. package/lib/utils.d.ts +16 -0
  32. package/package.json +56 -0
  33. package/plugin/README.md +11 -0
  34. package/plugin/generators.json +19 -0
  35. package/plugin/package.json +10 -0
  36. package/plugin/src/generators/init/compat.d.ts +2 -0
  37. package/plugin/src/generators/init/compat.js +6 -0
  38. package/plugin/src/generators/init/compat.js.map +1 -0
  39. package/plugin/src/generators/init/init.d.ts +5 -0
  40. package/plugin/src/generators/init/init.js +28 -0
  41. package/plugin/src/generators/init/init.js.map +1 -0
  42. package/plugin/src/generators/init/schema.json +7 -0
  43. package/plugin/src/index.d.ts +1 -0
  44. package/plugin/src/index.js +6 -0
  45. package/plugin/src/index.js.map +1 -0
  46. package/services/README.md +3 -0
  47. package/services/index.d.ts +1 -0
  48. package/services/lib/body.d.ts +80 -0
package/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # angular-three-cannon
2
+
3
+ This library was generated with [Nx](https://nx.dev).
4
+
5
+ ## Running unit tests
6
+
7
+ Run `nx test angular-three-cannon` to execute the unit tests.
@@ -0,0 +1,3 @@
1
+ # angular-three-cannon/debug
2
+
3
+ Secondary entry point of `angular-three-cannon`. It can be used by importing from `angular-three-cannon/debug`.
@@ -0,0 +1 @@
1
+ export * from './lib/debug';
@@ -0,0 +1,26 @@
1
+ import { InjectionToken, OnInit } from '@angular/core';
2
+ import { BodyProps, BodyShapeType } from '@pmndrs/cannon-worker-api';
3
+ import { Body } from 'cannon-es';
4
+ import CannonDebugger from 'cannon-es-debugger';
5
+ import * as THREE from 'three';
6
+ import * as i0 from "@angular/core";
7
+ export type NgtcDebugApi = {
8
+ add(id: string, props: BodyProps, type: BodyShapeType): void;
9
+ remove(id: string): void;
10
+ };
11
+ export declare const NGTC_DEBUG_API: InjectionToken<NgtcDebugApi>;
12
+ export declare class NgtcDebug implements OnInit {
13
+ color: string;
14
+ scale: number;
15
+ impl: typeof CannonDebugger;
16
+ disabled: boolean;
17
+ readonly bodies: Body[];
18
+ readonly bodyMap: Record<string, Body>;
19
+ readonly scene: THREE.Scene;
20
+ private readonly physicsStore;
21
+ private cannonDebugger;
22
+ constructor();
23
+ ngOnInit(): void;
24
+ static ɵfac: i0.ɵɵFactoryDeclaration<NgtcDebug, never>;
25
+ static ɵcmp: i0.ɵɵComponentDeclaration<NgtcDebug, "ngtc-debug", never, { "color": "color"; "scale": "scale"; "impl": "impl"; "disabled": "disabled"; }, {}, never, ["*"], true, never>;
26
+ }
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1jYW5ub24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtY2Fubm9uL3NyYy9hbmd1bGFyLXRocmVlLWNhbm5vbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1jYW5ub24tZGVidWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtY2Fubm9uL2RlYnVnL3NyYy9hbmd1bGFyLXRocmVlLWNhbm5vbi1kZWJ1Zy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './lib/debug';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtY2Fubm9uL2RlYnVnL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2RlYnVnJztcbiJdfQ==
@@ -0,0 +1,117 @@
1
+ import { Component, CUSTOM_ELEMENTS_SCHEMA, inject, InjectionToken, Input } from '@angular/core';
2
+ import { propsToBody } from '@pmndrs/cannon-worker-api';
3
+ import { injectBeforeRender, NgtArgs } from 'angular-three';
4
+ import { NgtcStore } from 'angular-three-cannon';
5
+ import CannonDebugger from 'cannon-es-debugger';
6
+ import * as THREE from 'three';
7
+ import * as i0 from "@angular/core";
8
+ const q = new THREE.Quaternion();
9
+ const s = new THREE.Vector3(1, 1, 1);
10
+ const v = new THREE.Vector3();
11
+ const m = new THREE.Matrix4();
12
+ function getMatrix(o) {
13
+ if (o instanceof THREE.InstancedMesh) {
14
+ o.getMatrixAt(parseInt(o.uuid.split('/')[1]), m);
15
+ return m;
16
+ }
17
+ return o.matrix;
18
+ }
19
+ export const NGTC_DEBUG_API = new InjectionToken('NgtcDebug API');
20
+ export class NgtcDebug {
21
+ constructor() {
22
+ this.color = 'black';
23
+ this.scale = 1;
24
+ this.impl = CannonDebugger;
25
+ this.disabled = false;
26
+ this.bodies = [];
27
+ this.bodyMap = {};
28
+ this.scene = new THREE.Scene();
29
+ this.physicsStore = inject(NgtcStore, { skipSelf: true });
30
+ injectBeforeRender(() => {
31
+ if (!this.cannonDebugger)
32
+ return;
33
+ const refs = this.physicsStore.get('refs');
34
+ for (const uuid in this.bodyMap) {
35
+ getMatrix(refs[uuid]).decompose(v, q, s);
36
+ this.bodyMap[uuid].position.copy(v);
37
+ this.bodyMap[uuid].quaternion.copy(q);
38
+ }
39
+ for (const child of this.scene.children) {
40
+ child.visible = !this.disabled;
41
+ }
42
+ if (!this.disabled) {
43
+ this.cannonDebugger.update();
44
+ }
45
+ });
46
+ }
47
+ ngOnInit() {
48
+ this.cannonDebugger = this.impl(this.scene, { bodies: this.bodies }, {
49
+ color: this.color,
50
+ scale: this.scale,
51
+ });
52
+ }
53
+ }
54
+ NgtcDebug.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtcDebug, deps: [], target: i0.ɵɵFactoryTarget.Component });
55
+ NgtcDebug.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: NgtcDebug, isStandalone: true, selector: "ngtc-debug", inputs: { color: "color", scale: "scale", impl: "impl", disabled: "disabled" }, providers: [
56
+ {
57
+ provide: NGTC_DEBUG_API,
58
+ useFactory: (debug) => ({
59
+ add: (uuid, props, type) => {
60
+ const body = propsToBody({ uuid, props, type });
61
+ debug.bodies.push(body);
62
+ debug.bodyMap[uuid] = body;
63
+ },
64
+ remove: (id) => {
65
+ const debugBodyIndex = debug.bodies.indexOf(debug.bodyMap[id]);
66
+ if (debugBodyIndex > -1)
67
+ debug.bodies.splice(debugBodyIndex, 1);
68
+ delete debug.bodyMap[id];
69
+ },
70
+ }),
71
+ deps: [NgtcDebug],
72
+ },
73
+ ], ngImport: i0, template: `
74
+ <ngt-primitive *args="[scene]" />
75
+ <ng-content />
76
+ `, isInline: true, dependencies: [{ kind: "directive", type: NgtArgs, selector: "[args]", inputs: ["args"] }] });
77
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtcDebug, decorators: [{
78
+ type: Component,
79
+ args: [{
80
+ selector: 'ngtc-debug',
81
+ standalone: true,
82
+ template: `
83
+ <ngt-primitive *args="[scene]" />
84
+ <ng-content />
85
+ `,
86
+ providers: [
87
+ {
88
+ provide: NGTC_DEBUG_API,
89
+ useFactory: (debug) => ({
90
+ add: (uuid, props, type) => {
91
+ const body = propsToBody({ uuid, props, type });
92
+ debug.bodies.push(body);
93
+ debug.bodyMap[uuid] = body;
94
+ },
95
+ remove: (id) => {
96
+ const debugBodyIndex = debug.bodies.indexOf(debug.bodyMap[id]);
97
+ if (debugBodyIndex > -1)
98
+ debug.bodies.splice(debugBodyIndex, 1);
99
+ delete debug.bodyMap[id];
100
+ },
101
+ }),
102
+ deps: [NgtcDebug],
103
+ },
104
+ ],
105
+ imports: [NgtArgs],
106
+ schemas: [CUSTOM_ELEMENTS_SCHEMA],
107
+ }]
108
+ }], ctorParameters: function () { return []; }, propDecorators: { color: [{
109
+ type: Input
110
+ }], scale: [{
111
+ type: Input
112
+ }], impl: [{
113
+ type: Input
114
+ }], disabled: [{
115
+ type: Input
116
+ }] } });
117
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVidWcuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtY2Fubm9uL2RlYnVnL3NyYy9saWIvZGVidWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxzQkFBc0IsRUFBRSxNQUFNLEVBQUUsY0FBYyxFQUFFLEtBQUssRUFBVSxNQUFNLGVBQWUsQ0FBQztBQUN6RyxPQUFPLEVBQTRCLFdBQVcsRUFBRSxNQUFNLDJCQUEyQixDQUFDO0FBQ2xGLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxPQUFPLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDNUQsT0FBTyxFQUFFLFNBQVMsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBRWpELE9BQU8sY0FBYyxNQUFNLG9CQUFvQixDQUFDO0FBQ2hELE9BQU8sS0FBSyxLQUFLLE1BQU0sT0FBTyxDQUFDOztBQUUvQixNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNqQyxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyQyxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QixNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUU5QixTQUFTLFNBQVMsQ0FBQyxDQUFpQjtJQUNoQyxJQUFJLENBQUMsWUFBWSxLQUFLLENBQUMsYUFBYSxFQUFFO1FBQ2xDLENBQUMsQ0FBQyxXQUFXLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDakQsT0FBTyxDQUFDLENBQUM7S0FDWjtJQUNELE9BQU8sQ0FB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Q0YsSUFBSSxFQUFFLFdBQVc7eUJBQ3BCO3FCQUNKO29CQUNELE9BQU8sRUFBRSxDQUFDLE9BQU8sQ0FBQztvQkFDbEIsT0FBTyxFQUFFLENBQUMsc0JBQXNCLENBQUM7aUJBQ3BDOzBFQUVZLEtBQUs7c0JBQWIsS0FBSztnQkFDRyxLQUFLO3NCQUFiLEtBQUs7Z0JBQ0csSUFBSTtzQkFBWixLQUFLO2dCQUNHLFFBQVE7c0JBQWhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIENVU1RPTV9FTEVNRU5UU19TQ0hFTUEsIGluamVjdCwgSW5qZWN0aW9uVG9rZW4sIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IEJvZHlQcm9wcywgQm9keVNoYXBlVHlwZSwgcHJvcHNUb0JvZHkgfSBmcm9tICdAcG1uZHJzL2Nhbm5vbi13b3JrZXItYXBpJztcbmltcG9ydCB7IGluamVjdEJlZm9yZVJlbmRlciwgTmd0QXJncyB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgTmd0Y1N0b3JlIH0gZnJvbSAnYW5ndWxhci10aHJlZS1jYW5ub24nO1xuaW1wb3J0IHsgQm9keSwgUXVhdGVybmlvbiBhcyBDUXVhcnRlcm5pb24sIFZlYzMsIFdvcmxkIH0gZnJvbSAnY2Fubm9uLWVzJztcbmltcG9ydCBDYW5ub25EZWJ1Z2dlciBmcm9tICdjYW5ub24tZXMtZGVidWdnZXInO1xuaW1wb3J0ICogYXMgVEhSRUUgZnJvbSAndGhyZWUnO1xuXG5jb25zdCBxID0gbmV3IFRIUkVFLlF1YXRlcm5pb24oKTtcbmNvbnN0IHMgPSBuZXcgVEhSRUUuVmVjdG9yMygxLCAxLCAxKTtcbmNvbnN0IHYgPSBuZXcgVEhSRUUuVmVjdG9yMygpO1xuY29uc3QgbSA9IG5ldyBUSFJFRS5NYXRyaXg0KCk7XG5cbmZ1bmN0aW9uIGdldE1hdHJpeChvOiBUSFJFRS5PYmplY3QzRCk6IFRIUkVFLk1hdHJpeDQge1xuICAgIGlmIChvIGluc3RhbmNlb2YgVEhSRUUuSW5zdGFuY2VkTWVzaCkge1xuICAgICAgICBvLmdldE1hdHJpeEF0KHBhcnNlSW50KG8udXVpZC5zcGxpdCgnLycpWzFdKSwgbSk7XG4gICAgICAgIHJldHVybiBtO1xuICAgIH1cbiAgICByZXR1cm4gby5tYXRyaXg7XG59XG5cbmV4cG9ydCB0eXBlIE5ndGNEZWJ1Z0FwaSA9IHtcbiAgICBhZGQoaWQ6IHN0cmluZywgcHJvcHM6IEJvZHlQcm9wcywgdHlwZTogQm9keVNoYXBlVHlwZSk6IHZvaWQ7XG4gICAgcmVtb3ZlKGlkOiBzdHJpbmcpOiB2b2lkO1xufTtcblxuZXhwb3J0IGNvbnN0IE5HVENfREVCVUdfQVBJID0gbmV3IEluamVjdGlvblRva2VuPE5ndGNEZWJ1Z0FwaT4oJ05ndGNEZWJ1ZyBBUEknKTtcblxuQENvbXBvbmVudCh7XG4gICAgc2VsZWN0b3I6ICduZ3RjLWRlYnVnJyxcbiAgICBzdGFuZGFsb25lOiB0cnVlLFxuICAgIHRlbXBsYXRlOiBgXG4gICAgICAgIDxuZ3QtcHJpbWl0aXZlICphcmdzPVwiW3NjZW5lXVwiIC8+XG4gICAgICAgIDxuZy1jb250ZW50IC8+XG4gICAgYCxcbiAgICBwcm92aWRlcnM6IFtcbiAgICAgICAge1xuICAgICAgICAgICAgcHJvdmlkZTogTkdUQ19ERUJVR19BUEksXG4gICAgICAgICAgICB1c2VGYWN0b3J5OiAoZGVidWc6IE5ndGNEZWJ1ZykgPT4gKHtcbiAgICAgICAgICAgICAgICBhZGQ6ICh1dWlkOiBzdHJpbmcsIHByb3BzOiBCb2R5UHJvcHMsIHR5cGU6IEJvZHlTaGFwZVR5cGUpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgYm9keSA9IHByb3BzVG9Cb2R5KHsgdXVpZCwgcHJvcHMsIHR5cGUgfSk7XG4gICAgICAgICAgICAgICAgICAgIGRlYnVnLmJvZGllcy5wdXNoKGJvZHkpO1xuICAgICAgICAgICAgICAgICAgICBkZWJ1Zy5ib2R5TWFwW3V1aWRdID0gYm9keTtcbiAgICAgICAgICAgICAgICB9LFxuICAgICAgICAgICAgICAgIHJlbW92ZTogKGlkOiBzdHJpbmcpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgZGVidWdCb2R5SW5kZXggPSBkZWJ1Zy5ib2RpZXMuaW5kZXhPZihkZWJ1Zy5ib2R5TWFwW2lkXSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChkZWJ1Z0JvZHlJbmRleCA+IC0xKSBkZWJ1Zy5ib2RpZXMuc3BsaWNlKGRlYnVnQm9keUluZGV4LCAxKTtcbiAgICAgICAgICAgICAgICAgICAgZGVsZXRlIGRlYnVnLmJvZHlNYXBbaWRdO1xuICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIGRlcHM6IFtOZ3RjRGVidWddLFxuICAgICAgICB9LFxuICAgIF0sXG4gICAgaW1wb3J0czogW05ndEFyZ3NdLFxuICAgIHNjaGVtYXM6IFtDVVNUT01fRUxFTUVOVFNfU0NIRU1BXSxcbn0pXG5leHBvcnQgY2xhc3MgTmd0Y0RlYnVnIGltcGxlbWVudHMgT25Jbml0IHtcbiAgICBASW5wdXQoKSBjb2xvciA9ICdibGFjayc7XG4gICAgQElucHV0KCkgc2NhbGUgPSAxO1xuICAgIEBJbnB1dCgpIGltcGwgPSBDYW5ub25EZWJ1Z2dlcjtcbiAgICBASW5wdXQoKSBkaXNhYmxlZCA9IGZhbHNlO1xuXG4gICAgcmVhZG9ubHkgYm9kaWVzOiBCb2R5W10gPSBbXTtcbiAgICByZWFkb25seSBib2R5TWFwOiBSZWNvcmQ8c3RyaW5nLCBCb2R5PiA9IHt9O1xuICAgIHJlYWRvbmx5IHNjZW5lID0gbmV3IFRIUkVFLlNjZW5lKCk7XG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IHBoeXNpY3NTdG9yZSA9IGluamVjdChOZ3RjU3RvcmUsIHsgc2tpcFNlbGY6IHRydWUgfSk7XG5cbiAgICBwcml2YXRlIGNhbm5vbkRlYnVnZ2VyITogUmV0dXJuVHlwZTx0eXBlb2YgQ2Fubm9uRGVidWdnZXI+O1xuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIGluamVjdEJlZm9yZVJlbmRlcigoKSA9PiB7XG4gICAgICAgICAgICBpZiAoIXRoaXMuY2Fubm9uRGVidWdnZXIpIHJldHVybjtcbiAgICAgICAgICAgIGNvbnN0IHJlZnMgPSB0aGlzLnBoeXNpY3NTdG9yZS5nZXQoJ3JlZnMnKTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgdXVpZCBpbiB0aGlzLmJvZHlNYXApIHtcbiAgICAgICAgICAgICAgICBnZXRNYXRyaXgocmVmc1t1dWlkXSkuZGVjb21wb3NlKHYsIHEsIHMpO1xuICAgICAgICAgICAgICAgIHRoaXMuYm9keU1hcFt1dWlkXS5wb3NpdGlvbi5jb3B5KHYgYXMgdW5rbm93biBhcyBWZWMzKTtcbiAgICAgICAgICAgICAgICB0aGlzLmJvZHlNYXBbdXVpZF0ucXVhdGVybmlvbi5jb3B5KHEgYXMgdW5rbm93biBhcyBDUXVhcnRlcm5pb24pO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIHRoaXMuc2NlbmUuY2hpbGRyZW4pIHtcbiAgICAgICAgICAgICAgICBjaGlsZC52aXNpYmxlID0gIXRoaXMuZGlzYWJsZWQ7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmICghdGhpcy5kaXNhYmxlZCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY2Fubm9uRGVidWdnZXIudXBkYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIG5nT25Jbml0KCkge1xuICAgICAgICB0aGlzLmNhbm5vbkRlYnVnZ2VyID0gdGhpcy5pbXBsKHRoaXMuc2NlbmUsIHsgYm9kaWVzOiB0aGlzLmJvZGllcyB9IGFzIFdvcmxkLCB7XG4gICAgICAgICAgICBjb2xvcjogdGhpcy5jb2xvcixcbiAgICAgICAgICAgIHNjYWxlOiB0aGlzLnNjYWxlLFxuICAgICAgICB9KTtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,4 @@
1
+ export * from './lib/physics';
2
+ export * from './lib/store';
3
+ export * from './lib/utils';
4
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtY2Fubm9uL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLGVBQWUsQ0FBQztBQUM5QixjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLGFBQWEsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL3BoeXNpY3MnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvc3RvcmUnO1xuZXhwb3J0ICogZnJvbSAnLi9saWIvdXRpbHMnO1xuIl19
@@ -0,0 +1,261 @@
1
+ import { Component, inject, Input } from '@angular/core';
2
+ import { CannonWorkerAPI, } from '@pmndrs/cannon-worker-api';
3
+ import { injectBeforeRender, NgtRxStore, NgtStore } from 'angular-three';
4
+ import { filter } from 'rxjs';
5
+ import * as THREE from 'three';
6
+ import { NgtcStore } from './store';
7
+ import * as i0 from "@angular/core";
8
+ const v = new THREE.Vector3();
9
+ const s = new THREE.Vector3(1, 1, 1);
10
+ const q = new THREE.Quaternion();
11
+ const m = new THREE.Matrix4();
12
+ function apply(index, positions, quaternions, scale = s, object) {
13
+ if (index !== undefined) {
14
+ m.compose(v.fromArray(positions, index * 3), q.fromArray(quaternions, index * 4), scale);
15
+ if (object) {
16
+ object.matrixAutoUpdate = false;
17
+ object.matrix.copy(m);
18
+ }
19
+ return m;
20
+ }
21
+ return m.identity();
22
+ }
23
+ export class NgtcPhysics extends NgtRxStore {
24
+ initialize() {
25
+ super.initialize();
26
+ this.set({
27
+ allowSleep: false,
28
+ axisIndex: 0,
29
+ broadphase: 'Naive',
30
+ defaultContactMaterial: { contactEquationStiffness: 1e6 },
31
+ frictionGravity: null,
32
+ gravity: [0, -9.81, 0],
33
+ isPaused: false,
34
+ iterations: 5,
35
+ maxSubSteps: 10,
36
+ quatNormalizeFast: false,
37
+ quatNormalizeSkip: 0,
38
+ shouldInvalidate: true,
39
+ size: 1000,
40
+ solver: 'GS',
41
+ stepSize: 1 / 60,
42
+ tolerance: 0.001,
43
+ });
44
+ }
45
+ set allowSleep(allowSleep) {
46
+ this.set({ allowSleep });
47
+ }
48
+ set axisIndex(axisIndex) {
49
+ this.set({ axisIndex });
50
+ }
51
+ set broadphase(broadphase) {
52
+ this.set({ broadphase });
53
+ }
54
+ set defaultContactMaterial(defaultContactMaterial) {
55
+ this.set({ defaultContactMaterial });
56
+ }
57
+ set frictionGravity(frictionGravity) {
58
+ this.set({ frictionGravity });
59
+ }
60
+ set gravity(gravity) {
61
+ this.set({ gravity });
62
+ }
63
+ set iterations(iterations) {
64
+ this.set({ iterations });
65
+ }
66
+ set quatNormalizeFast(quatNormalizeFast) {
67
+ this.set({ quatNormalizeFast });
68
+ }
69
+ set quatNormalizeSkip(quatNormalizeSkip) {
70
+ this.set({ quatNormalizeSkip });
71
+ }
72
+ set solver(solver) {
73
+ this.set({ solver });
74
+ }
75
+ set tolerance(tolerance) {
76
+ this.set({ tolerance });
77
+ }
78
+ set size(size) {
79
+ this.set({ size });
80
+ }
81
+ set isPaused(isPaused) {
82
+ this.set({ isPaused });
83
+ }
84
+ set maxSubSteps(maxSubSteps) {
85
+ this.set({ maxSubSteps });
86
+ }
87
+ set shouldInvalidate(shouldInvalidate) {
88
+ this.set({ shouldInvalidate });
89
+ }
90
+ set stepSize(stepSize) {
91
+ this.set({ stepSize });
92
+ }
93
+ constructor() {
94
+ super();
95
+ this.ngtStore = inject(NgtStore);
96
+ this.physicsStore = inject(NgtcStore);
97
+ let timeSinceLastCalled = 0;
98
+ injectBeforeRender(({ delta }) => {
99
+ const { isPaused, maxSubSteps, stepSize } = this.get();
100
+ const worker = this.physicsStore.get('worker');
101
+ if (isPaused || !worker)
102
+ return;
103
+ timeSinceLastCalled += delta;
104
+ worker.step({ maxSubSteps, timeSinceLastCalled, stepSize: stepSize });
105
+ timeSinceLastCalled = 0;
106
+ });
107
+ }
108
+ ngOnInit() {
109
+ this.physicsStore.set({ worker: new CannonWorkerAPI(this.get()) });
110
+ this.connectWorker();
111
+ this.updateWorkerProp('axisIndex');
112
+ this.updateWorkerProp('broadphase');
113
+ this.updateWorkerProp('gravity');
114
+ this.updateWorkerProp('iterations');
115
+ this.updateWorkerProp('tolerance');
116
+ }
117
+ ngOnDestroy() {
118
+ const worker = this.physicsStore.get('worker');
119
+ if (worker) {
120
+ worker.terminate();
121
+ worker.removeAllListeners();
122
+ }
123
+ super.ngOnDestroy();
124
+ }
125
+ connectWorker() {
126
+ this.hold(this.physicsStore.select('worker').pipe(filter((w) => !!w)), () => {
127
+ const worker = this.physicsStore.get('worker');
128
+ if (worker) {
129
+ worker.connect();
130
+ worker.init();
131
+ worker.on('collide', this.collideHandler.bind(this));
132
+ worker.on('collideBegin', this.collideBeginHandler.bind(this));
133
+ worker.on('collideEnd', this.collideEndHandler.bind(this));
134
+ worker.on('frame', this.frameHandler.bind(this));
135
+ worker.on('rayhit', this.rayHitHandler.bind(this));
136
+ }
137
+ });
138
+ }
139
+ updateWorkerProp(prop) {
140
+ this.effect(this.select(prop), () => {
141
+ const value = this.get(prop);
142
+ const worker = this.physicsStore.get('worker');
143
+ if (worker)
144
+ worker[prop] = value;
145
+ });
146
+ }
147
+ collideHandler({ body, contact: { bi, bj, ...contactRest }, target, ...rest }) {
148
+ const { events, refs } = this.physicsStore.get();
149
+ const cb = events[target]?.collide;
150
+ if (cb) {
151
+ cb({
152
+ body: refs[body],
153
+ contact: { bi: refs[bi], bj: refs[bj], ...contactRest },
154
+ target: refs[target],
155
+ ...rest,
156
+ });
157
+ }
158
+ }
159
+ collideBeginHandler({ bodyA, bodyB }) {
160
+ const { events, refs } = this.physicsStore.get();
161
+ const cbA = events[bodyA]?.collideBegin;
162
+ if (cbA)
163
+ cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideBegin' });
164
+ const cbB = events[bodyB]?.collideBegin;
165
+ if (cbB)
166
+ cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideBegin' });
167
+ }
168
+ collideEndHandler({ bodyA, bodyB }) {
169
+ const { events, refs } = this.physicsStore.get();
170
+ const cbA = events[bodyA]?.collideEnd;
171
+ if (cbA)
172
+ cbA({ body: refs[bodyB], op: 'event', target: refs[bodyA], type: 'collideEnd' });
173
+ const cbB = events[bodyB]?.collideEnd;
174
+ if (cbB)
175
+ cbB({ body: refs[bodyA], op: 'event', target: refs[bodyB], type: 'collideEnd' });
176
+ }
177
+ frameHandler({ active, bodies: uuids = [], observations, positions, quaternions, }) {
178
+ const { bodies, subscriptions, refs, scaleOverrides } = this.physicsStore.get();
179
+ const invalidate = this.ngtStore.get('invalidate');
180
+ const shouldInvalidate = this.get('shouldInvalidate');
181
+ for (let i = 0; i < uuids.length; i++) {
182
+ bodies[uuids[i]] = i;
183
+ }
184
+ observations.forEach(([id, value, type]) => {
185
+ const subscription = subscriptions[id] || {};
186
+ const cb = subscription[type];
187
+ // HELP: We clearly know the type of the callback, but typescript can't deal with it
188
+ cb && cb(value);
189
+ });
190
+ if (active) {
191
+ for (const ref of Object.values(refs)) {
192
+ if (ref instanceof THREE.InstancedMesh) {
193
+ for (let i = 0; i < ref.count; i++) {
194
+ const uuid = `${ref.uuid}/${i}`;
195
+ const index = bodies[uuid];
196
+ if (index !== undefined) {
197
+ ref.setMatrixAt(i, apply(index, positions, quaternions, scaleOverrides[uuid]));
198
+ ref.instanceMatrix.needsUpdate = true;
199
+ }
200
+ }
201
+ }
202
+ else {
203
+ const scale = scaleOverrides[ref.uuid] || ref.scale;
204
+ apply(bodies[ref.uuid], positions, quaternions, scale, ref);
205
+ }
206
+ }
207
+ if (shouldInvalidate)
208
+ invalidate();
209
+ }
210
+ }
211
+ rayHitHandler({ body, ray: { uuid, ...rayRest }, ...rest }) {
212
+ const { events, refs } = this.physicsStore.get();
213
+ const cb = events[uuid]?.rayhit;
214
+ if (cb)
215
+ cb({ body: body ? refs[body] : null, ray: { uuid, ...rayRest }, ...rest });
216
+ }
217
+ }
218
+ NgtcPhysics.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtcPhysics, deps: [], target: i0.ɵɵFactoryTarget.Component });
219
+ NgtcPhysics.ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "15.1.1", type: NgtcPhysics, isStandalone: true, selector: "ngtc-physics", inputs: { allowSleep: "allowSleep", axisIndex: "axisIndex", broadphase: "broadphase", defaultContactMaterial: "defaultContactMaterial", frictionGravity: "frictionGravity", gravity: "gravity", iterations: "iterations", quatNormalizeFast: "quatNormalizeFast", quatNormalizeSkip: "quatNormalizeSkip", solver: "solver", tolerance: "tolerance", size: "size", isPaused: "isPaused", maxSubSteps: "maxSubSteps", shouldInvalidate: "shouldInvalidate", stepSize: "stepSize" }, providers: [NgtcStore], usesInheritance: true, ngImport: i0, template: '<ng-content />', isInline: true });
220
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtcPhysics, decorators: [{
221
+ type: Component,
222
+ args: [{
223
+ selector: 'ngtc-physics',
224
+ standalone: true,
225
+ template: '<ng-content />',
226
+ providers: [NgtcStore],
227
+ }]
228
+ }], ctorParameters: function () { return []; }, propDecorators: { allowSleep: [{
229
+ type: Input
230
+ }], axisIndex: [{
231
+ type: Input
232
+ }], broadphase: [{
233
+ type: Input
234
+ }], defaultContactMaterial: [{
235
+ type: Input
236
+ }], frictionGravity: [{
237
+ type: Input
238
+ }], gravity: [{
239
+ type: Input
240
+ }], iterations: [{
241
+ type: Input
242
+ }], quatNormalizeFast: [{
243
+ type: Input
244
+ }], quatNormalizeSkip: [{
245
+ type: Input
246
+ }], solver: [{
247
+ type: Input
248
+ }], tolerance: [{
249
+ type: Input
250
+ }], size: [{
251
+ type: Input
252
+ }], isPaused: [{
253
+ type: Input
254
+ }], maxSubSteps: [{
255
+ type: Input
256
+ }], shouldInvalidate: [{
257
+ type: Input
258
+ }], stepSize: [{
259
+ type: Input
260
+ }] } });
261
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGh5c2ljcy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvYW5ndWxhci10aHJlZS1jYW5ub24vc3JjL2xpYi9waHlzaWNzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBcUIsTUFBTSxlQUFlLENBQUM7QUFDNUUsT0FBTyxFQUNILGVBQWUsR0FPbEIsTUFBTSwyQkFBMkIsQ0FBQztBQUNuQyxPQUFPLEVBQUUsa0JBQWtCLEVBQWdCLFVBQVUsRUFBRSxRQUFRLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDdkYsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM5QixPQUFPLEtBQUssS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMvQixPQUFPLEVBQUUsU0FBUyxFQUFFLE1BQU0sU0FBUyxDQUFDOztBQUVwQyxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUM5QixNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNyQyxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNqQyxNQUFNLENBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUU5QixTQUFTLEtBQUssQ0FBQyxLQUFhLEVBQUUsU0FBdUIsRUFBRSxXQUF5QixFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUUsTUFBdUI7SUFDaEgsSUFBSSxLQUFLLEtBQUssU0FBUyxFQUFFO1FBQ3JCLENBQUMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsV0FBVyxFQUFFLEtBQUssR0FBRyxD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QmdCLFVBQVU7c0JBQXRCLEtBQUs7Z0JBSU8sU0FBUztzQkFBckIsS0FBSztnQkFJTyxVQUFVO3NCQUF0QixLQUFLO2dCQUlPLHNCQUFzQjtzQkFBbEMsS0FBSztnQkFJTyxlQUFlO3NCQUEzQixLQUFLO2dCQUlPLE9BQU87c0JBQW5CLEtBQUs7Z0JBSU8sVUFBVTtzQkFBdEIsS0FBSztnQkFJTyxpQkFBaUI7c0JBQTdCLEtBQUs7Z0JBSU8saUJBQWlCO3NCQUE3QixLQUFLO2dCQUlPLE1BQU07c0JBQWxCLEtBQUs7Z0JBSU8sU0FBUztzQkFBckIsS0FBSztnQkFJTyxJQUFJO3NCQUFoQixLQUFLO2dCQUlPLFFBQVE7c0JBQXBCLEtBQUs7Z0JBSU8sV0FBVztzQkFBdkIsS0FBSztnQkFJTyxnQkFBZ0I7c0JBQTVCLEtBQUs7Z0JBSU8sUUFBUTtzQkFBcEIsS0FBSyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IENvbXBvbmVudCwgaW5qZWN0LCBJbnB1dCwgT25EZXN0cm95LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7XG4gICAgQ2Fubm9uV29ya2VyQVBJLFxuICAgIENhbm5vbldvcmtlclByb3BzLFxuICAgIFdvcmtlckNvbGxpZGVCZWdpbkV2ZW50LFxuICAgIFdvcmtlckNvbGxpZGVFbmRFdmVudCxcbiAgICBXb3JrZXJDb2xsaWRlRXZlbnQsXG4gICAgV29ya2VyRnJhbWVNZXNzYWdlLFxuICAgIFdvcmtlclJheWhpdEV2ZW50LFxufSBmcm9tICdAcG1uZHJzL2Nhbm5vbi13b3JrZXItYXBpJztcbmltcG9ydCB7IGluamVjdEJlZm9yZVJlbmRlciwgTmd0QW55UmVjb3JkLCBOZ3RSeFN0b3JlLCBOZ3RTdG9yZSB9IGZyb20gJ2FuZ3VsYXItdGhyZWUnO1xuaW1wb3J0IHsgZmlsdGVyIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5pbXBvcnQgeyBOZ3RjU3RvcmUgfSBmcm9tICcuL3N0b3JlJztcblxuY29uc3QgdiA9IG5ldyBUSFJFRS5WZWN0b3IzKCk7XG5jb25zdCBzID0gbmV3IFRIUkVFLlZlY3RvcjMoMSwgMSwgMSk7XG5jb25zdCBxID0gbmV3IFRIUkVFLlF1YXRlcm5pb24oKTtcbmNvbnN0IG0gPSBuZXcgVEhSRUUuTWF0cml4NCgpO1xuXG5mdW5jdGlvbiBhcHBseShpbmRleDogbnVtYmVyLCBwb3NpdGlvbnM6IEZsb2F0MzJBcnJheSwgcXVhdGVybmlvbnM6IEZsb2F0MzJBcnJheSwgc2NhbGUgPSBzLCBvYmplY3Q/OiBUSFJFRS5PYmplY3QzRCkge1xuICAgIGlmIChpbmRleCAhPT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIG0uY29tcG9zZSh2LmZyb21BcnJheShwb3NpdGlvbnMsIGluZGV4ICogMyksIHEuZnJvbUFycmF5KHF1YXRlcm5pb25zLCBpbmRleCAqIDQpLCBzY2FsZSk7XG4gICAgICAgIGlmIChvYmplY3QpIHtcbiAgICAgICAgICAgIG9iamVjdC5tYXRyaXhBdXRvVXBkYXRlID0gZmFsc2U7XG4gICAgICAgICAgICBvYmplY3QubWF0cml4LmNvcHkobSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG07XG4gICAgfVxuICAgIHJldHVybiBtLmlkZW50aXR5KCk7XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Y1BoeXNpY3NJbnB1dHMgZXh0ZW5kcyBDYW5ub25Xb3JrZXJQcm9wcyB7XG4gICAgaXNQYXVzZWQ/OiBib29sZWFuO1xuICAgIG1heFN1YlN0ZXBzPzogbnVtYmVyO1xuICAgIHNob3VsZEludmFsaWRhdGU/OiBib29sZWFuO1xuICAgIHN0ZXBTaXplPzogbnVtYmVyO1xufVxuXG5AQ29tcG9uZW50KHtcbiAgICBzZWxlY3RvcjogJ25ndGMtcGh5c2ljcycsXG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICB0ZW1wbGF0ZTogJzxuZy1jb250ZW50IC8+JyxcbiAgICBwcm92aWRlcnM6IFtOZ3RjU3RvcmVdLFxufSlcbmV4cG9ydCBjbGFzcyBOZ3RjUGh5c2ljcyBleHRlbmRzIE5ndFJ4U3RvcmU8Tmd0Y1BoeXNpY3NJbnB1dHM+IGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3kge1xuICAgIHByaXZhdGUgcmVhZG9ubHkgbmd0U3RvcmUgPSBpbmplY3QoTmd0U3RvcmUpO1xuICAgIHByaXZhdGUgcmVhZG9ubHkgcGh5c2ljc1N0b3JlID0gaW5qZWN0KE5ndGNTdG9yZSk7XG5cbiAgICBvdmVycmlkZSBpbml0aWFsaXplKCkge1xuICAgICAgICBzdXBlci5pbml0aWFsaXplKCk7XG4gICAgICAgIHRoaXMuc2V0KHtcbiAgICAgICAgICAgIGFsbG93U2xlZXA6IGZhbHNlLFxuICAgICAgICAgICAgYXhpc0luZGV4OiAwLFxuICAgICAgICAgICAgYnJvYWRwaGFzZTogJ05haXZlJyxcbiAgICAgICAgICAgIGRlZmF1bHRDb250YWN0TWF0ZXJpYWw6IHsgY29udGFjdEVxdWF0aW9uU3RpZmZuZXNzOiAxZTYgfSxcbiAgICAgICAgICAgIGZyaWN0aW9uR3Jhdml0eTogbnVsbCxcbiAgICAgICAgICAgIGdyYXZpdHk6IFswLCAtOS44MSwgMF0sXG4gICAgICAgICAgICBpc1BhdXNlZDogZmFsc2UsXG4gICAgICAgICAgICBpdGVyYXRpb25zOiA1LFxuICAgICAgICAgICAgbWF4U3ViU3RlcHM6IDEwLFxuICAgICAgICAgICAgcXVhdE5vcm1hbGl6ZUZhc3Q6IGZhbHNlLFxuICAgICAgICAgICAgcXVhdE5vcm1hbGl6ZVNraXA6IDAsXG4gICAgICAgICAgICBzaG91bGRJbnZhbGlkYXRlOiB0cnVlLFxuICAgICAgICAgICAgc2l6ZTogMTAwMCxcbiAgICAgICAgICAgIHNvbHZlcjogJ0dTJyxcbiAgICAgICAgICAgIHN0ZXBTaXplOiAxIC8gNjAsXG4gICAgICAgICAgICB0b2xlcmFuY2U6IDAuMDAxLFxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgYWxsb3dTbGVlcChhbGxvd1NsZWVwOiBOZ3RjUGh5c2ljc0lucHV0c1snYWxsb3dTbGVlcCddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYWxsb3dTbGVlcCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgYXhpc0luZGV4KGF4aXNJbmRleDogTmd0Y1BoeXNpY3NJbnB1dHNbJ2F4aXNJbmRleCddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgYXhpc0luZGV4IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBicm9hZHBoYXNlKGJyb2FkcGhhc2U6IE5ndGNQaHlzaWNzSW5wdXRzWydicm9hZHBoYXNlJ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBicm9hZHBoYXNlIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBkZWZhdWx0Q29udGFjdE1hdGVyaWFsKGRlZmF1bHRDb250YWN0TWF0ZXJpYWw6IE5ndGNQaHlzaWNzSW5wdXRzWydkZWZhdWx0Q29udGFjdE1hdGVyaWFsJ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBkZWZhdWx0Q29udGFjdE1hdGVyaWFsIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBmcmljdGlvbkdyYXZpdHkoZnJpY3Rpb25HcmF2aXR5OiBOZ3RjUGh5c2ljc0lucHV0c1snZnJpY3Rpb25HcmF2aXR5J10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBmcmljdGlvbkdyYXZpdHkgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGdyYXZpdHkoZ3Jhdml0eTogTmd0Y1BoeXNpY3NJbnB1dHNbJ2dyYXZpdHknXSkge1xuICAgICAgICB0aGlzLnNldCh7IGdyYXZpdHkgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGl0ZXJhdGlvbnMoaXRlcmF0aW9uczogTmd0Y1BoeXNpY3NJbnB1dHNbJ2l0ZXJhdGlvbnMnXSkge1xuICAgICAgICB0aGlzLnNldCh7IGl0ZXJhdGlvbnMgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHF1YXROb3JtYWxpemVGYXN0KHF1YXROb3JtYWxpemVGYXN0OiBOZ3RjUGh5c2ljc0lucHV0c1sncXVhdE5vcm1hbGl6ZUZhc3QnXSkge1xuICAgICAgICB0aGlzLnNldCh7IHF1YXROb3JtYWxpemVGYXN0IH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBxdWF0Tm9ybWFsaXplU2tpcChxdWF0Tm9ybWFsaXplU2tpcDogTmd0Y1BoeXNpY3NJbnB1dHNbJ3F1YXROb3JtYWxpemVTa2lwJ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBxdWF0Tm9ybWFsaXplU2tpcCB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc29sdmVyKHNvbHZlcjogTmd0Y1BoeXNpY3NJbnB1dHNbJ3NvbHZlciddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc29sdmVyIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCB0b2xlcmFuY2UodG9sZXJhbmNlOiBOZ3RjUGh5c2ljc0lucHV0c1sndG9sZXJhbmNlJ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyB0b2xlcmFuY2UgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IHNpemUoc2l6ZTogTmd0Y1BoeXNpY3NJbnB1dHNbJ3NpemUnXSkge1xuICAgICAgICB0aGlzLnNldCh7IHNpemUgfSk7XG4gICAgfVxuXG4gICAgQElucHV0KCkgc2V0IGlzUGF1c2VkKGlzUGF1c2VkOiBOZ3RjUGh5c2ljc0lucHV0c1snaXNQYXVzZWQnXSkge1xuICAgICAgICB0aGlzLnNldCh7IGlzUGF1c2VkIH0pO1xuICAgIH1cblxuICAgIEBJbnB1dCgpIHNldCBtYXhTdWJTdGVwcyhtYXhTdWJTdGVwczogTmd0Y1BoeXNpY3NJbnB1dHNbJ21heFN1YlN0ZXBzJ10pIHtcbiAgICAgICAgdGhpcy5zZXQoeyBtYXhTdWJTdGVwcyB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc2hvdWxkSW52YWxpZGF0ZShzaG91bGRJbnZhbGlkYXRlOiBOZ3RjUGh5c2ljc0lucHV0c1snc2hvdWxkSW52YWxpZGF0ZSddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc2hvdWxkSW52YWxpZGF0ZSB9KTtcbiAgICB9XG5cbiAgICBASW5wdXQoKSBzZXQgc3RlcFNpemUoc3RlcFNpemU6IE5ndGNQaHlzaWNzSW5wdXRzWydzdGVwU2l6ZSddKSB7XG4gICAgICAgIHRoaXMuc2V0KHsgc3RlcFNpemUgfSk7XG4gICAgfVxuXG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHN1cGVyKCk7XG4gICAgICAgIGxldCB0aW1lU2luY2VMYXN0Q2FsbGVkID0gMDtcbiAgICAgICAgaW5qZWN0QmVmb3JlUmVuZGVyKCh7IGRlbHRhIH0pID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHsgaXNQYXVzZWQsIG1heFN1YlN0ZXBzLCBzdGVwU2l6ZSB9ID0gdGhpcy5nZXQoKTtcbiAgICAgICAgICAgIGNvbnN0IHdvcmtlciA9IHRoaXMucGh5c2ljc1N0b3JlLmdldCgnd29ya2VyJyk7XG4gICAgICAgICAgICBpZiAoaXNQYXVzZWQgfHwgIXdvcmtlcikgcmV0dXJuO1xuICAgICAgICAgICAgdGltZVNpbmNlTGFzdENhbGxlZCArPSBkZWx0YTtcbiAgICAgICAgICAgIHdvcmtlci5zdGVwKHsgbWF4U3ViU3RlcHMsIHRpbWVTaW5jZUxhc3RDYWxsZWQsIHN0ZXBTaXplOiBzdGVwU2l6ZSEgfSk7XG4gICAgICAgICAgICB0aW1lU2luY2VMYXN0Q2FsbGVkID0gMDtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgbmdPbkluaXQoKSB7XG4gICAgICAgIHRoaXMucGh5c2ljc1N0b3JlLnNldCh7IHdvcmtlcjogbmV3IENhbm5vbldvcmtlckFQSSh0aGlzLmdldCgpKSB9KTtcbiAgICAgICAgdGhpcy5jb25uZWN0V29ya2VyKCk7XG4gICAgICAgIHRoaXMudXBkYXRlV29ya2VyUHJvcCgnYXhpc0luZGV4Jyk7XG4gICAgICAgIHRoaXMudXBkYXRlV29ya2VyUHJvcCgnYnJvYWRwaGFzZScpO1xuICAgICAgICB0aGlzLnVwZGF0ZVdvcmtlclByb3AoJ2dyYXZpdHknKTtcbiAgICAgICAgdGhpcy51cGRhdGVXb3JrZXJQcm9wKCdpdGVyYXRpb25zJyk7XG4gICAgICAgIHRoaXMudXBkYXRlV29ya2VyUHJvcCgndG9sZXJhbmNlJyk7XG4gICAgfVxuXG4gICAgb3ZlcnJpZGUgbmdPbkRlc3Ryb3koKSB7XG4gICAgICAgIGNvbnN0IHdvcmtlciA9IHRoaXMucGh5c2ljc1N0b3JlLmdldCgnd29ya2VyJyk7XG4gICAgICAgIGlmICh3b3JrZXIpIHtcbiAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICh3b3JrZXIgYXMgdW5rbm93biBhcyB7IHJlbW92ZUFsbExpc3RlbmVyczogKCkgPT4gdm9pZCB9KS5yZW1vdmVBbGxMaXN0ZW5lcnMoKTtcbiAgICAgICAgfVxuICAgICAgICBzdXBlci5uZ09uRGVzdHJveSgpO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29ubmVjdFdvcmtlcigpIHtcbiAgICAgICAgdGhpcy5ob2xkKHRoaXMucGh5c2ljc1N0b3JlLnNlbGVjdCgnd29ya2VyJykucGlwZShmaWx0ZXIoKHcpID0+ICEhdykpLCAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3b3JrZXIgPSB0aGlzLnBoeXNpY3NTdG9yZS5nZXQoJ3dvcmtlcicpO1xuICAgICAgICAgICAgaWYgKHdvcmtlcikge1xuICAgICAgICAgICAgICAgIHdvcmtlci5jb25uZWN0KCk7XG4gICAgICAgICAgICAgICAgd29ya2VyLmluaXQoKTtcblxuICAgICAgICAgICAgICAgIHR5cGUgQW55RnVuY3Rpb24gPSAoLi4uYXJnczogYW55W10pID0+IGFueTtcbiAgICAgICAgICAgICAgICAod29ya2VyIGFzIHVua25vd24gYXMgeyBvbjogQW55RnVuY3Rpb24gfSkub24oJ2NvbGxpZGUnLCB0aGlzLmNvbGxpZGVIYW5kbGVyLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgICh3b3JrZXIgYXMgdW5rbm93biBhcyB7IG9uOiBBbnlGdW5jdGlvbiB9KS5vbignY29sbGlkZUJlZ2luJywgdGhpcy5jb2xsaWRlQmVnaW5IYW5kbGVyLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgICh3b3JrZXIgYXMgdW5rbm93biBhcyB7IG9uOiBBbnlGdW5jdGlvbiB9KS5vbignY29sbGlkZUVuZCcsIHRoaXMuY29sbGlkZUVuZEhhbmRsZXIuYmluZCh0aGlzKSk7XG4gICAgICAgICAgICAgICAgKHdvcmtlciBhcyB1bmtub3duIGFzIHsgb246IEFueUZ1bmN0aW9uIH0pLm9uKCdmcmFtZScsIHRoaXMuZnJhbWVIYW5kbGVyLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgICAgICh3b3JrZXIgYXMgdW5rbm93biBhcyB7IG9uOiBBbnlGdW5jdGlvbiB9KS5vbigncmF5aGl0JywgdGhpcy5yYXlIaXRIYW5kbGVyLmJpbmQodGhpcykpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG5cbiAgICBwcml2YXRlIHVwZGF0ZVdvcmtlclByb3AocHJvcDoga2V5b2YgTmd0Y1BoeXNpY3NJbnB1dHMpIHtcbiAgICAgICAgdGhpcy5lZmZlY3QodGhpcy5zZWxlY3QocHJvcCksICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy5nZXQocHJvcCk7XG4gICAgICAgICAgICBjb25zdCB3b3JrZXIgPSB0aGlzLnBoeXNpY3NTdG9yZS5nZXQoJ3dvcmtlcicpO1xuICAgICAgICAgICAgaWYgKHdvcmtlcikgKHdvcmtlciBhcyBOZ3RBbnlSZWNvcmQpW3Byb3BdID0gdmFsdWU7XG4gICAgICAgIH0pO1xuICAgIH1cblxuICAgIHByaXZhdGUgY29sbGlkZUhhbmRsZXIoeyBib2R5LCBjb250YWN0OiB7IGJpLCBiaiwgLi4uY29udGFjdFJlc3QgfSwgdGFyZ2V0LCAuLi5yZXN0IH06IFdvcmtlckNvbGxpZGVFdmVudFsnZGF0YSddKSB7XG4gICAgICAgIGNvbnN0IHsgZXZlbnRzLCByZWZzIH0gPSB0aGlzLnBoeXNpY3NTdG9yZS5nZXQoKTtcbiAgICAgICAgY29uc3QgY2IgPSBldmVudHNbdGFyZ2V0XT8uY29sbGlkZTtcblxuICAgICAgICBpZiAoY2IpIHtcbiAgICAgICAgICAgIGNiKHtcbiAgICAgICAgICAgICAgICBib2R5OiByZWZzW2JvZHldLFxuICAgICAgICAgICAgICAgIGNvbnRhY3Q6IHsgYmk6IHJlZnNbYmldLCBiajogcmVmc1tial0sIC4uLmNvbnRhY3RSZXN0IH0sXG4gICAgICAgICAgICAgICAgdGFyZ2V0OiByZWZzW3RhcmdldF0sXG4gICAgICAgICAgICAgICAgLi4ucmVzdCxcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb2xsaWRlQmVnaW5IYW5kbGVyKHsgYm9keUEsIGJvZHlCIH06IFdvcmtlckNvbGxpZGVCZWdpbkV2ZW50WydkYXRhJ10pIHtcbiAgICAgICAgY29uc3QgeyBldmVudHMsIHJlZnMgfSA9IHRoaXMucGh5c2ljc1N0b3JlLmdldCgpO1xuXG4gICAgICAgIGNvbnN0IGNiQSA9IGV2ZW50c1tib2R5QV0/LmNvbGxpZGVCZWdpbjtcbiAgICAgICAgaWYgKGNiQSkgY2JBKHsgYm9keTogcmVmc1tib2R5Ql0sIG9wOiAnZXZlbnQnLCB0YXJnZXQ6IHJlZnNbYm9keUFdLCB0eXBlOiAnY29sbGlkZUJlZ2luJyB9KTtcblxuICAgICAgICBjb25zdCBjYkIgPSBldmVudHNbYm9keUJdPy5jb2xsaWRlQmVnaW47XG4gICAgICAgIGlmIChjYkIpIGNiQih7IGJvZHk6IHJlZnNbYm9keUFdLCBvcDogJ2V2ZW50JywgdGFyZ2V0OiByZWZzW2JvZHlCXSwgdHlwZTogJ2NvbGxpZGVCZWdpbicgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBjb2xsaWRlRW5kSGFuZGxlcih7IGJvZHlBLCBib2R5QiB9OiBXb3JrZXJDb2xsaWRlRW5kRXZlbnRbJ2RhdGEnXSkge1xuICAgICAgICBjb25zdCB7IGV2ZW50cywgcmVmcyB9ID0gdGhpcy5waHlzaWNzU3RvcmUuZ2V0KCk7XG5cbiAgICAgICAgY29uc3QgY2JBID0gZXZlbnRzW2JvZHlBXT8uY29sbGlkZUVuZDtcbiAgICAgICAgaWYgKGNiQSkgY2JBKHsgYm9keTogcmVmc1tib2R5Ql0sIG9wOiAnZXZlbnQnLCB0YXJnZXQ6IHJlZnNbYm9keUFdLCB0eXBlOiAnY29sbGlkZUVuZCcgfSk7XG5cbiAgICAgICAgY29uc3QgY2JCID0gZXZlbnRzW2JvZHlCXT8uY29sbGlkZUVuZDtcbiAgICAgICAgaWYgKGNiQikgY2JCKHsgYm9keTogcmVmc1tib2R5QV0sIG9wOiAnZXZlbnQnLCB0YXJnZXQ6IHJlZnNbYm9keUJdLCB0eXBlOiAnY29sbGlkZUVuZCcgfSk7XG4gICAgfVxuXG4gICAgcHJpdmF0ZSBmcmFtZUhhbmRsZXIoe1xuICAgICAgICBhY3RpdmUsXG4gICAgICAgIGJvZGllczogdXVpZHMgPSBbXSxcbiAgICAgICAgb2JzZXJ2YXRpb25zLFxuICAgICAgICBwb3NpdGlvbnMsXG4gICAgICAgIHF1YXRlcm5pb25zLFxuICAgIH06IFdvcmtlckZyYW1lTWVzc2FnZVsnZGF0YSddKSB7XG4gICAgICAgIGNvbnN0IHsgYm9kaWVzLCBzdWJzY3JpcHRpb25zLCByZWZzLCBzY2FsZU92ZXJyaWRlcyB9ID0gdGhpcy5waHlzaWNzU3RvcmUuZ2V0KCk7XG4gICAgICAgIGNvbnN0IGludmFsaWRhdGUgPSB0aGlzLm5ndFN0b3JlLmdldCgnaW52YWxpZGF0ZScpO1xuICAgICAgICBjb25zdCBzaG91bGRJbnZhbGlkYXRlID0gdGhpcy5nZXQoJ3Nob3VsZEludmFsaWRhdGUnKTtcblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHV1aWRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBib2RpZXNbdXVpZHNbaV1dID0gaTtcbiAgICAgICAgfVxuXG4gICAgICAgIG9ic2VydmF0aW9ucy5mb3JFYWNoKChbaWQsIHZhbHVlLCB0eXBlXSkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gc3Vic2NyaXB0aW9uc1tpZF0gfHwge307XG4gICAgICAgICAgICBjb25zdCBjYiA9IHN1YnNjcmlwdGlvblt0eXBlXTtcbiAgICAgICAgICAgIC8vIEhFTFA6IFdlIGNsZWFybHkga25vdyB0aGUgdHlwZSBvZiB0aGUgY2FsbGJhY2ssIGJ1dCB0eXBlc2NyaXB0IGNhbid0IGRlYWwgd2l0aCBpdFxuICAgICAgICAgICAgY2IgJiYgY2IodmFsdWUgYXMgbmV2ZXIpO1xuICAgICAgICB9KTtcblxuICAgICAgICBpZiAoYWN0aXZlKSB7XG4gICAgICAgICAgICBmb3IgKGNvbnN0IHJlZiBvZiBPYmplY3QudmFsdWVzKHJlZnMpKSB7XG4gICAgICAgICAgICAgICAgaWYgKHJlZiBpbnN0YW5jZW9mIFRIUkVFLkluc3RhbmNlZE1lc2gpIHtcbiAgICAgICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZWYuY291bnQ7IGkrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgdXVpZCA9IGAke3JlZi51dWlkfS8ke2l9YDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGluZGV4ID0gYm9kaWVzW3V1aWRdO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGluZGV4ICE9PSB1bmRlZmluZWQpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByZWYuc2V0TWF0cml4QXQoaSwgYXBwbHkoaW5kZXgsIHBvc2l0aW9ucywgcXVhdGVybmlvbnMsIHNjYWxlT3ZlcnJpZGVzW3V1aWRdKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVmLmluc3RhbmNlTWF0cml4Lm5lZWRzVXBkYXRlID0gdHJ1ZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHNjYWxlID0gc2NhbGVPdmVycmlkZXNbcmVmLnV1aWRdIHx8IHJlZi5zY2FsZTtcbiAgICAgICAgICAgICAgICAgICAgYXBwbHkoYm9kaWVzW3JlZi51dWlkXSwgcG9zaXRpb25zLCBxdWF0ZXJuaW9ucywgc2NhbGUsIHJlZik7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHNob3VsZEludmFsaWRhdGUpIGludmFsaWRhdGUoKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHByaXZhdGUgcmF5SGl0SGFuZGxlcih7IGJvZHksIHJheTogeyB1dWlkLCAuLi5yYXlSZXN0IH0sIC4uLnJlc3QgfTogV29ya2VyUmF5aGl0RXZlbnRbJ2RhdGEnXSkge1xuICAgICAgICBjb25zdCB7IGV2ZW50cywgcmVmcyB9ID0gdGhpcy5waHlzaWNzU3RvcmUuZ2V0KCk7XG4gICAgICAgIGNvbnN0IGNiID0gZXZlbnRzW3V1aWRdPy5yYXloaXQ7XG4gICAgICAgIGlmIChjYikgY2IoeyBib2R5OiBib2R5ID8gcmVmc1tib2R5XSA6IG51bGwsIHJheTogeyB1dWlkLCAuLi5yYXlSZXN0IH0sIC4uLnJlc3QgfSk7XG4gICAgfVxufVxuIl19
@@ -0,0 +1,21 @@
1
+ import { NgtRxStore } from 'angular-three';
2
+ import { Injectable } from '@angular/core';
3
+ import * as i0 from "@angular/core";
4
+ export class NgtcStore extends NgtRxStore {
5
+ initialize() {
6
+ super.initialize();
7
+ this.set({
8
+ bodies: {},
9
+ events: {},
10
+ refs: {},
11
+ scaleOverrides: {},
12
+ subscriptions: {},
13
+ });
14
+ }
15
+ }
16
+ NgtcStore.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtcStore, deps: null, target: i0.ɵɵFactoryTarget.Injectable });
17
+ NgtcStore.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtcStore });
18
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.1.1", ngImport: i0, type: NgtcStore, decorators: [{
19
+ type: Injectable
20
+ }] });
21
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RvcmUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtY2Fubm9uL3NyYy9saWIvc3RvcmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsVUFBVSxFQUFhLE1BQU0sZUFBZSxDQUFDOztBQWtDdEQsTUFBTSxPQUFPLFNBQVUsU0FBUSxVQUFxQjtJQUN2QyxVQUFVO1FBQ2YsS0FBSyxDQUFDLFVBQVUsRUFBRSxDQUFDO1FBQ25CLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDTCxNQUFNLEVBQUUsRUFBRTtZQUNWLE1BQU0sRUFBRSxFQUFFO1lBQ1YsSUFBSSxFQUFFLEVBQUU7WUFDUixjQUFjLEVBQUUsRUFBRTtZQUNsQixhQUFhLEVBQUUsRUFBRTtTQUNwQixDQUFDLENBQUM7SUFDUCxDQUFDOztzR0FWUSxTQUFTOzBHQUFULFNBQVM7MkZBQVQsU0FBUztrQkFEckIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5ndFJ4U3RvcmUgfSBmcm9tICdhbmd1bGFyLXRocmVlJztcbmltcG9ydCB7IEluamVjdGFibGUsIE9uRGVzdHJveSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHR5cGUge1xuICAgIENhbm5vbldvcmtlckFQSSxcbiAgICBDYW5ub25Xb3JrZXJQcm9wcyxcbiAgICBDb2xsaWRlQmVnaW5FdmVudCxcbiAgICBDb2xsaWRlRW5kRXZlbnQsXG4gICAgQ29sbGlkZUV2ZW50LFxuICAgIFJheWhpdEV2ZW50LFxuICAgIFJlZnMsXG4gICAgU3Vic2NyaXB0aW9ucyxcbn0gZnJvbSAnQHBtbmRycy9jYW5ub24td29ya2VyLWFwaSc7XG5cbmV4cG9ydCB0eXBlIE5ndGNFdmVudCA9IENvbGxpZGVCZWdpbkV2ZW50IHwgQ29sbGlkZUVuZEV2ZW50IHwgQ29sbGlkZUV2ZW50IHwgUmF5aGl0RXZlbnQ7XG5leHBvcnQgdHlwZSBOZ3RjQ2FsbGJhY2tCeVR5cGU8VCBleHRlbmRzIHsgdHlwZTogc3RyaW5nIH0+ID0ge1xuICAgIFtLIGluIFRbJ3R5cGUnXV0/OiBUIGV4dGVuZHMgeyB0eXBlOiBLIH0gPyAoZTogVCkgPT4gdm9pZCA6IG5ldmVyO1xufTtcblxuZXhwb3J0IHR5cGUgTmd0Y0V2ZW50cyA9IHtcbiAgICBbdXVpZDogc3RyaW5nXTogUGFydGlhbDxOZ3RjQ2FsbGJhY2tCeVR5cGU8Tmd0Y0V2ZW50Pj47XG59O1xuXG5leHBvcnQgdHlwZSBOZ3RjU2NhbGVPdmVycmlkZXMgPSB7IFt1dWlkOiBzdHJpbmddOiBUSFJFRS5WZWN0b3IzIH07XG5cbmV4cG9ydCBpbnRlcmZhY2UgTmd0Y1N0YXRlIHtcbiAgICBib2RpZXM6IHsgW3V1aWQ6IHN0cmluZ106IG51bWJlciB9O1xuICAgIGV2ZW50czogTmd0Y0V2ZW50cztcbiAgICByZWZzOiBSZWZzO1xuICAgIHNjYWxlT3ZlcnJpZGVzOiBOZ3RjU2NhbGVPdmVycmlkZXM7XG4gICAgc3Vic2NyaXB0aW9uczogU3Vic2NyaXB0aW9ucztcbiAgICB3b3JrZXI6IENhbm5vbldvcmtlckFQSTtcbiAgICBpbml0OiAoaW5wdXRzOiBDYW5ub25Xb3JrZXJQcm9wcykgPT4gdm9pZDtcbn1cblxuQEluamVjdGFibGUoKVxuZXhwb3J0IGNsYXNzIE5ndGNTdG9yZSBleHRlbmRzIE5ndFJ4U3RvcmU8Tmd0Y1N0YXRlPiBpbXBsZW1lbnRzIE9uRGVzdHJveSB7XG4gICAgb3ZlcnJpZGUgaW5pdGlhbGl6ZSgpIHtcbiAgICAgICAgc3VwZXIuaW5pdGlhbGl6ZSgpO1xuICAgICAgICB0aGlzLnNldCh7XG4gICAgICAgICAgICBib2RpZXM6IHt9LFxuICAgICAgICAgICAgZXZlbnRzOiB7fSxcbiAgICAgICAgICAgIHJlZnM6IHt9LFxuICAgICAgICAgICAgc2NhbGVPdmVycmlkZXM6IHt9LFxuICAgICAgICAgICAgc3Vic2NyaXB0aW9uczoge30sXG4gICAgICAgIH0pO1xuICAgIH1cbn1cbiJdfQ==
@@ -0,0 +1,47 @@
1
+ import * as THREE from 'three';
2
+ export class NgtcUtils {
3
+ static getUUID(ref, index) {
4
+ const suffix = index === undefined ? '' : `/${index}`;
5
+ if (typeof ref === 'function')
6
+ return null;
7
+ return ref && ref.nativeElement && `${ref.nativeElement.uuid}${suffix}`;
8
+ }
9
+ static subscribe(ref, worker, subscriptions, type, index, target = 'bodies') {
10
+ return (callback) => {
11
+ const id = this.incrementingId++;
12
+ subscriptions[id] = { [type]: callback };
13
+ const uuid = this.getUUID(ref, index);
14
+ uuid && worker.subscribe({ props: { id, target, type }, uuid });
15
+ return () => {
16
+ delete subscriptions[id];
17
+ worker.unsubscribe({ props: id });
18
+ };
19
+ };
20
+ }
21
+ static prepare(object, { position = [0, 0, 0], rotation = [0, 0, 0], userData = {} }) {
22
+ object.userData = userData;
23
+ object.position.set(...position);
24
+ object.rotation.set(...rotation);
25
+ object.updateMatrix();
26
+ }
27
+ static setupCollision(events, { onCollide, onCollideBegin, onCollideEnd }, uuid) {
28
+ events[uuid] = {
29
+ collide: onCollide,
30
+ collideBegin: onCollideBegin,
31
+ collideEnd: onCollideEnd,
32
+ };
33
+ }
34
+ static capitalize(str) {
35
+ return (str.charAt(0).toUpperCase() + str.slice(1));
36
+ }
37
+ static quaternionToRotation(callback) {
38
+ return (v) => callback(this.e.setFromQuaternion(this.q.fromArray(v)).toArray());
39
+ }
40
+ static makeTriplet(v) {
41
+ return v instanceof THREE.Vector3 ? [v.x, v.y, v.z] : v;
42
+ }
43
+ }
44
+ NgtcUtils.incrementingId = 0;
45
+ NgtcUtils.e = new THREE.Euler();
46
+ NgtcUtils.q = new THREE.Quaternion();
47
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtY2Fubm9uL3NyYy9saWIvdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBWUEsT0FBTyxLQUFLLEtBQUssTUFBTSxPQUFPLENBQUM7QUFFL0IsTUFBTSxPQUFPLFNBQVM7SUFLbEIsTUFBTSxDQUFDLE9BQU8sQ0FDVixHQUE0QixFQUM1QixLQUFjO1FBRWQsTUFBTSxNQUFNLEdBQUcsS0FBSyxLQUFLLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLEtBQUssRUFBRSxDQUFDO1FBQ3RELElBQUksT0FBTyxHQUFHLEtBQUssVUFBVTtZQUFFLE9BQU8sSUFBSSxDQUFDO1FBQzNDLE9BQU8sR0FBRyxJQUFJLEdBQUcsQ0FBQyxhQUFhLElBQUksR0FBRyxHQUFHLENBQUMsYUFBYSxDQUFDLElBQUksR0FBRyxNQUFNLEVBQUUsQ0FBQztJQUM1RSxDQUFDO0lBRUQsTUFBTSxDQUFDLFNBQVMsQ0FDWixHQUE0QixFQUM1QixNQUF1QixFQUN2QixhQUE0QixFQUM1QixJQUFPLEVBQ1AsS0FBYyxFQUNkLFNBQTZCLFFBQVE7UUFFckMsT0FBTyxDQUFDLFFBQXVDLEVBQUUsRUFBRTtZQUMvQyxNQUFNLEVBQUUsR0FBRyxJQUFJLENBQUMsY0FBYyxFQUFFLENBQUM7WUFDakMsYUFBYSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsRUFBRSxRQUFRLEVBQUUsQ0FBQztZQUN6QyxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLEdBQUcsRUFBRSxLQUFLLENBQUMsQ0FBQztZQUN0QyxJQUFJLElBQUksTUFBTSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztZQUNoRSxPQUFPLEdBQUcsRUFBRTtnQkFDUixPQUFPLGFBQWEsQ0FBQyxFQUFFLENBQUMsQ0FBQztnQkFDekIsTUFBTSxDQUFDLFdBQVcsQ0FBQyxFQUFFLEtBQUssRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQ3RDLENBQUMsQ0FBQztRQUNOLENBQUMsQ0FBQztJQUNOLENBQUM7SUFFRCxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQXNCLEVBQUUsRUFBRSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLFFBQVEsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsUUFBUSxHQUFHLEVBQUUsRUFBYTtRQUMzRyxNQUFNLENBQUMsUUFBUSxHQUFHLFFBQVEsQ0FBQztRQUMzQixNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUM7UUFDakMsTUFBTSxDQUFDLFlBQVksRUFBRSxDQUFDO0lBQzFCLENBQUM7SUFFRCxNQUFNLENBQUMsY0FBYyxDQUNqQixNQUFrQixFQUNsQixFQUFFLFNBQVMsRUFBRSxjQUFjLEVBQUUsWUFBWSxFQUFzQixFQUMvRCxJQUFZO1FBRVosTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHO1lBQ1gsT0FBTyxFQUFFLFNBQVM7WUFDbEIsWUFBWSxFQUFFLGNBQWM7WUFDNUIsVUFBVSxFQUFFLFlBQVk7U0FDM0IsQ0FBQztJQUNOLENBQUM7SUFFRCxNQUFNLENBQUMsVUFBVSxDQUFtQixHQUFNO1FBQ3RDLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFdBQVcsRUFBRSxHQUFHLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQWtCLENBQUM7SUFDekUsQ0FBQztJQUVELE1BQU0sQ0FBQyxvQkFBb0IsQ0FBQyxRQUE4QjtRQUN0RCxPQUFPLENBQUMsQ0FBTyxFQUFFLEVBQUUsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBYSxDQUFDLENBQUM7SUFDckcsQ0FBQztJQUVELE1BQU0sQ0FBQyxXQUFXLENBQUMsQ0FBMEI7UUFDekMsT0FBTyxDQUFDLFlBQVksS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFDNUQsQ0FBQzs7QUE5RE0sd0JBQWMsR0FBRyxDQUFDLENBQUM7QUFDbkIsV0FBQyxHQUFHLElBQUksS0FBSyxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQ3RCLFdBQUMsR0FBRyxJQUFJLEtBQUssQ0FBQyxVQUFVLEVBQUUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IE5ndEluamVjdGVkUmVmIH0gZnJvbSAnYW5ndWxhci10aHJlZSc7XG5pbXBvcnQgdHlwZSB7XG4gICAgQm9keVByb3BzLFxuICAgIENhbm5vbldvcmtlckFQSSxcbiAgICBQcm9wVmFsdWUsXG4gICAgUXVhZCxcbiAgICBTdWJzY3JpcHRpb25OYW1lLFxuICAgIFN1YnNjcmlwdGlvbnMsXG4gICAgU3Vic2NyaXB0aW9uVGFyZ2V0LFxuICAgIFRyaXBsZXQsXG59IGZyb20gJ0BwbW5kcnMvY2Fubm9uLXdvcmtlci1hcGknO1xuaW1wb3J0IHR5cGUgeyBOZ3RjRXZlbnRzIH0gZnJvbSAnLi9zdG9yZSc7XG5pbXBvcnQgKiBhcyBUSFJFRSBmcm9tICd0aHJlZSc7XG5cbmV4cG9ydCBjbGFzcyBOZ3RjVXRpbHMge1xuICAgIHN0YXRpYyBpbmNyZW1lbnRpbmdJZCA9IDA7XG4gICAgc3RhdGljIGUgPSBuZXcgVEhSRUUuRXVsZXIoKTtcbiAgICBzdGF0aWMgcSA9IG5ldyBUSFJFRS5RdWF0ZXJuaW9uKCk7XG5cbiAgICBzdGF0aWMgZ2V0VVVJRDxUT2JqZWN0IGV4dGVuZHMgVEhSRUUuT2JqZWN0M0QgPSBUSFJFRS5PYmplY3QzRD4oXG4gICAgICAgIHJlZjogTmd0SW5qZWN0ZWRSZWY8VE9iamVjdD4sXG4gICAgICAgIGluZGV4PzogbnVtYmVyXG4gICAgKTogc3RyaW5nIHwgbnVsbCB7XG4gICAgICAgIGNvbnN0IHN1ZmZpeCA9IGluZGV4ID09PSB1bmRlZmluZWQgPyAnJyA6IGAvJHtpbmRleH1gO1xuICAgICAgICBpZiAodHlwZW9mIHJlZiA9PT0gJ2Z1bmN0aW9uJykgcmV0dXJuIG51bGw7XG4gICAgICAgIHJldHVybiByZWYgJiYgcmVmLm5hdGl2ZUVsZW1lbnQgJiYgYCR7cmVmLm5hdGl2ZUVsZW1lbnQudXVpZH0ke3N1ZmZpeH1gO1xuICAgIH1cblxuICAgIHN0YXRpYyBzdWJzY3JpYmU8VCBleHRlbmRzIFN1YnNjcmlwdGlvbk5hbWUsIFRPYmplY3QgZXh0ZW5kcyBUSFJFRS5PYmplY3QzRCA9IFRIUkVFLk9iamVjdDNEPihcbiAgICAgICAgcmVmOiBOZ3RJbmplY3RlZFJlZjxUT2JqZWN0PixcbiAgICAgICAgd29ya2VyOiBDYW5ub25Xb3JrZXJBUEksXG4gICAgICAgIHN1YnNjcmlwdGlvbnM6IFN1YnNjcmlwdGlvbnMsXG4gICAgICAgIHR5cGU6IFQsXG4gICAgICAgIGluZGV4PzogbnVtYmVyLFxuICAgICAgICB0YXJnZXQ6IFN1YnNjcmlwdGlvblRhcmdldCA9ICdib2RpZXMnXG4gICAgKSB7XG4gICAgICAgIHJldHVybiAoY2FsbGJhY2s6ICh2YWx1ZTogUHJvcFZhbHVlPFQ+KSA9PiB2b2lkKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuaW5jcmVtZW50aW5nSWQrKztcbiAgICAgICAgICAgIHN1YnNjcmlwdGlvbnNbaWRdID0geyBbdHlwZV06IGNhbGxiYWNrIH07XG4gICAgICAgICAgICBjb25zdCB1dWlkID0gdGhpcy5nZXRVVUlEKHJlZiwgaW5kZXgpO1xuICAgICAgICAgICAgdXVpZCAmJiB3b3JrZXIuc3Vic2NyaWJlKHsgcHJvcHM6IHsgaWQsIHRhcmdldCwgdHlwZSB9LCB1dWlkIH0pO1xuICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICBkZWxldGUgc3Vic2NyaXB0aW9uc1tpZF07XG4gICAgICAgICAgICAgICAgd29ya2VyLnVuc3Vic2NyaWJlKHsgcHJvcHM6IGlkIH0pO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfTtcbiAgICB9XG5cbiAgICBzdGF0aWMgcHJlcGFyZShvYmplY3Q6IFRIUkVFLk9iamVjdDNELCB7IHBvc2l0aW9uID0gWzAsIDAsIDBdLCByb3RhdGlvbiA9IFswLCAwLCAwXSwgdXNlckRhdGEgPSB7fSB9OiBCb2R5UHJvcHMpIHtcbiAgICAgICAgb2JqZWN0LnVzZXJEYXRhID0gdXNlckRhdGE7XG4gICAgICAgIG9iamVjdC5wb3NpdGlvbi5zZXQoLi4ucG9zaXRpb24pO1xuICAgICAgICBvYmplY3Qucm90YXRpb24uc2V0KC4uLnJvdGF0aW9uKTtcbiAgICAgICAgb2JqZWN0LnVwZGF0ZU1hdHJpeCgpO1xuICAgIH1cblxuICAgIHN0YXRpYyBzZXR1cENvbGxpc2lvbihcbiAgICAgICAgZXZlbnRzOiBOZ3RjRXZlbnRzLFxuICAgICAgICB7IG9uQ29sbGlkZSwgb25Db2xsaWRlQmVnaW4sIG9uQ29sbGlkZUVuZCB9OiBQYXJ0aWFsPEJvZHlQcm9wcz4sXG4gICAgICAgIHV1aWQ6IHN0cmluZ1xuICAgICkge1xuICAgICAgICBldmVudHNbdXVpZF0gPSB7XG4gICAgICAgICAgICBjb2xsaWRlOiBvbkNvbGxpZGUsXG4gICAgICAgICAgICBjb2xsaWRlQmVnaW46IG9uQ29sbGlkZUJlZ2luLFxuICAgICAgICAgICAgY29sbGlkZUVuZDogb25Db2xsaWRlRW5kLFxuICAgICAgICB9O1xuICAgIH1cblxuICAgIHN0YXRpYyBjYXBpdGFsaXplPFQgZXh0ZW5kcyBzdHJpbmc+KHN0cjogVCk6IENhcGl0YWxpemU8VD4ge1xuICAgICAgICByZXR1cm4gKHN0ci5jaGFyQXQoMCkudG9VcHBlckNhc2UoKSArIHN0ci5zbGljZSgxKSkgYXMgQ2FwaXRhbGl6ZTxUPjtcbiAgICB9XG5cbiAgICBzdGF0aWMgcXVhdGVybmlvblRvUm90YXRpb24oY2FsbGJhY2s6ICh2OiBUcmlwbGV0KSA9PiB2b2lkKSB7XG4gICAgICAgIHJldHVybiAodjogUXVhZCkgPT4gY2FsbGJhY2sodGhpcy5lLnNldEZyb21RdWF0ZXJuaW9uKHRoaXMucS5mcm9tQXJyYXkodikpLnRvQXJyYXkoKSBhcyBUcmlwbGV0KTtcbiAgICB9XG5cbiAgICBzdGF0aWMgbWFrZVRyaXBsZXQodjogVEhSRUUuVmVjdG9yMyB8IFRyaXBsZXQpOiBUcmlwbGV0IHtcbiAgICAgICAgcmV0dXJuIHYgaW5zdGFuY2VvZiBUSFJFRS5WZWN0b3IzID8gW3YueCwgdi55LCB2LnpdIDogdjtcbiAgICB9XG59XG4iXX0=
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Generated bundle index. Do not edit.
3
+ */
4
+ export * from './index';
5
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci10aHJlZS1jYW5ub24tc2VydmljZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtY2Fubm9uL3NlcnZpY2VzL3NyYy9hbmd1bGFyLXRocmVlLWNhbm5vbi1zZXJ2aWNlcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export * from './lib/body';
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL2FuZ3VsYXItdGhyZWUtY2Fubm9uL3NlcnZpY2VzL3NyYy9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxjQUFjLFlBQVksQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImV4cG9ydCAqIGZyb20gJy4vbGliL2JvZHknO1xuIl19