@vived/core 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.
- package/README.md +29 -0
- package/babel.config.js +12 -0
- package/dist/AppObject/AppObject.d.ts +15 -0
- package/dist/AppObject/AppObject.d.ts.map +1 -0
- package/dist/AppObject/AppObject.js +54 -0
- package/dist/AppObject/AppObject.js.map +1 -0
- package/dist/AppObject/AppObject.test.d.ts +7 -0
- package/dist/AppObject/AppObject.test.d.ts.map +1 -0
- package/dist/AppObject/AppObject.test.js +110 -0
- package/dist/AppObject/AppObject.test.js.map +1 -0
- package/dist/AppObject/AppObjectComponent.d.ts +26 -0
- package/dist/AppObject/AppObjectComponent.d.ts.map +1 -0
- package/dist/AppObject/AppObjectComponent.js +78 -0
- package/dist/AppObject/AppObjectComponent.js.map +1 -0
- package/dist/AppObject/AppObjectComponent.test.d.ts +2 -0
- package/dist/AppObject/AppObjectComponent.test.d.ts.map +1 -0
- package/dist/AppObject/AppObjectComponent.test.js +130 -0
- package/dist/AppObject/AppObjectComponent.test.js.map +1 -0
- package/dist/AppObject/AppObjectController.d.ts +5 -0
- package/dist/AppObject/AppObjectController.d.ts.map +1 -0
- package/dist/AppObject/AppObjectController.js +8 -0
- package/dist/AppObject/AppObjectController.js.map +1 -0
- package/dist/AppObject/AppObjectEntity.d.ts +16 -0
- package/dist/AppObject/AppObjectEntity.d.ts.map +1 -0
- package/dist/AppObject/AppObjectEntity.js +34 -0
- package/dist/AppObject/AppObjectEntity.js.map +1 -0
- package/dist/AppObject/AppObjectEntity.test.d.ts +2 -0
- package/dist/AppObject/AppObjectEntity.test.d.ts.map +1 -0
- package/dist/AppObject/AppObjectEntity.test.js +106 -0
- package/dist/AppObject/AppObjectEntity.test.js.map +1 -0
- package/dist/AppObject/AppObjectEntityRepo.d.ts +16 -0
- package/dist/AppObject/AppObjectEntityRepo.d.ts.map +1 -0
- package/dist/AppObject/AppObjectEntityRepo.js +52 -0
- package/dist/AppObject/AppObjectEntityRepo.js.map +1 -0
- package/dist/AppObject/AppObjectEntityRepo.test.d.ts +2 -0
- package/dist/AppObject/AppObjectEntityRepo.test.d.ts.map +1 -0
- package/dist/AppObject/AppObjectEntityRepo.test.js +147 -0
- package/dist/AppObject/AppObjectEntityRepo.test.js.map +1 -0
- package/dist/AppObject/AppObjectPM.d.ts +13 -0
- package/dist/AppObject/AppObjectPM.d.ts.map +1 -0
- package/dist/AppObject/AppObjectPM.js +36 -0
- package/dist/AppObject/AppObjectPM.js.map +1 -0
- package/dist/AppObject/AppObjectPM.test.d.ts +2 -0
- package/dist/AppObject/AppObjectPM.test.d.ts.map +1 -0
- package/dist/AppObject/AppObjectPM.test.js +101 -0
- package/dist/AppObject/AppObjectPM.test.js.map +1 -0
- package/dist/AppObject/AppObjectRepo.d.ts +26 -0
- package/dist/AppObject/AppObjectRepo.d.ts.map +1 -0
- package/dist/AppObject/AppObjectRepo.js +128 -0
- package/dist/AppObject/AppObjectRepo.js.map +1 -0
- package/dist/AppObject/AppObjectRepo.test.d.ts +2 -0
- package/dist/AppObject/AppObjectRepo.test.d.ts.map +1 -0
- package/dist/AppObject/AppObjectRepo.test.js +211 -0
- package/dist/AppObject/AppObjectRepo.test.js.map +1 -0
- package/dist/AppObject/AppObjectUC.d.ts +5 -0
- package/dist/AppObject/AppObjectUC.d.ts.map +1 -0
- package/dist/AppObject/AppObjectUC.js +8 -0
- package/dist/AppObject/AppObjectUC.js.map +1 -0
- package/dist/AppObject/AppObjectView.d.ts +5 -0
- package/dist/AppObject/AppObjectView.d.ts.map +1 -0
- package/dist/AppObject/AppObjectView.js +8 -0
- package/dist/AppObject/AppObjectView.js.map +1 -0
- package/dist/AppObject/getSingletonComponent.d.ts +4 -0
- package/dist/AppObject/getSingletonComponent.d.ts.map +1 -0
- package/dist/AppObject/getSingletonComponent.js +4 -0
- package/dist/AppObject/getSingletonComponent.js.map +1 -0
- package/dist/AppObject/getSingletonComponent.test.d.ts +2 -0
- package/dist/AppObject/getSingletonComponent.test.d.ts.map +1 -0
- package/dist/AppObject/getSingletonComponent.test.js +11 -0
- package/dist/AppObject/getSingletonComponent.test.js.map +1 -0
- package/dist/AppObject/index.d.ts +11 -0
- package/dist/AppObject/index.d.ts.map +1 -0
- package/dist/AppObject/index.js +11 -0
- package/dist/AppObject/index.js.map +1 -0
- package/dist/AppObject/printAppObjectDetails.d.ts +3 -0
- package/dist/AppObject/printAppObjectDetails.d.ts.map +1 -0
- package/dist/AppObject/printAppObjectDetails.js +15 -0
- package/dist/AppObject/printAppObjectDetails.js.map +1 -0
- package/dist/Entities/MemoizedAngle.d.ts +10 -0
- package/dist/Entities/MemoizedAngle.d.ts.map +1 -0
- package/dist/Entities/MemoizedAngle.js +19 -0
- package/dist/Entities/MemoizedAngle.js.map +1 -0
- package/dist/Entities/MemoizedAngle.test.d.ts +2 -0
- package/dist/Entities/MemoizedAngle.test.d.ts.map +1 -0
- package/dist/Entities/MemoizedAngle.test.js +28 -0
- package/dist/Entities/MemoizedAngle.test.js.map +1 -0
- package/dist/Entities/MemoizedBoolean.d.ts +9 -0
- package/dist/Entities/MemoizedBoolean.d.ts.map +1 -0
- package/dist/Entities/MemoizedBoolean.js +19 -0
- package/dist/Entities/MemoizedBoolean.js.map +1 -0
- package/dist/Entities/MemoizedBoolean.test.d.ts +2 -0
- package/dist/Entities/MemoizedBoolean.test.d.ts.map +1 -0
- package/dist/Entities/MemoizedBoolean.test.js +32 -0
- package/dist/Entities/MemoizedBoolean.test.js.map +1 -0
- package/dist/Entities/MemoizedColor.d.ts +10 -0
- package/dist/Entities/MemoizedColor.d.ts.map +1 -0
- package/dist/Entities/MemoizedColor.js +20 -0
- package/dist/Entities/MemoizedColor.js.map +1 -0
- package/dist/Entities/MemoizedColor.test.d.ts +2 -0
- package/dist/Entities/MemoizedColor.test.d.ts.map +1 -0
- package/dist/Entities/MemoizedColor.test.js +30 -0
- package/dist/Entities/MemoizedColor.test.js.map +1 -0
- package/dist/Entities/MemoizedNumber.d.ts +9 -0
- package/dist/Entities/MemoizedNumber.d.ts.map +1 -0
- package/dist/Entities/MemoizedNumber.js +19 -0
- package/dist/Entities/MemoizedNumber.js.map +1 -0
- package/dist/Entities/MemoizedNumber.test.d.ts +2 -0
- package/dist/Entities/MemoizedNumber.test.d.ts.map +1 -0
- package/dist/Entities/MemoizedNumber.test.js +27 -0
- package/dist/Entities/MemoizedNumber.test.js.map +1 -0
- package/dist/Entities/MemoizedQuaternion.d.ts +10 -0
- package/dist/Entities/MemoizedQuaternion.d.ts.map +1 -0
- package/dist/Entities/MemoizedQuaternion.js +20 -0
- package/dist/Entities/MemoizedQuaternion.js.map +1 -0
- package/dist/Entities/MemoizedQuaternion.test.d.ts +2 -0
- package/dist/Entities/MemoizedQuaternion.test.d.ts.map +1 -0
- package/dist/Entities/MemoizedQuaternion.test.js +30 -0
- package/dist/Entities/MemoizedQuaternion.test.js.map +1 -0
- package/dist/Entities/MemoizedString.d.ts +9 -0
- package/dist/Entities/MemoizedString.d.ts.map +1 -0
- package/dist/Entities/MemoizedString.js +19 -0
- package/dist/Entities/MemoizedString.js.map +1 -0
- package/dist/Entities/MemoizedString.test.d.ts +2 -0
- package/dist/Entities/MemoizedString.test.d.ts.map +1 -0
- package/dist/Entities/MemoizedString.test.js +27 -0
- package/dist/Entities/MemoizedString.test.js.map +1 -0
- package/dist/Entities/MemoizedVector2.d.ts +10 -0
- package/dist/Entities/MemoizedVector2.d.ts.map +1 -0
- package/dist/Entities/MemoizedVector2.js +20 -0
- package/dist/Entities/MemoizedVector2.js.map +1 -0
- package/dist/Entities/MemoizedVector2.test.d.ts +2 -0
- package/dist/Entities/MemoizedVector2.test.d.ts.map +1 -0
- package/dist/Entities/MemoizedVector2.test.js +30 -0
- package/dist/Entities/MemoizedVector2.test.js.map +1 -0
- package/dist/Entities/MemoizedVector3.d.ts +10 -0
- package/dist/Entities/MemoizedVector3.d.ts.map +1 -0
- package/dist/Entities/MemoizedVector3.js +20 -0
- package/dist/Entities/MemoizedVector3.js.map +1 -0
- package/dist/Entities/MemoizedVector3.test.d.ts +2 -0
- package/dist/Entities/MemoizedVector3.test.d.ts.map +1 -0
- package/dist/Entities/MemoizedVector3.test.js +30 -0
- package/dist/Entities/MemoizedVector3.test.js.map +1 -0
- package/dist/Entities/ObservableEntity.d.ts +8 -0
- package/dist/Entities/ObservableEntity.d.ts.map +1 -0
- package/dist/Entities/ObservableEntity.js +16 -0
- package/dist/Entities/ObservableEntity.js.map +1 -0
- package/dist/Entities/ObservableEntity.test.d.ts +2 -0
- package/dist/Entities/ObservableEntity.test.d.ts.map +1 -0
- package/dist/Entities/ObservableEntity.test.js +23 -0
- package/dist/Entities/ObservableEntity.test.js.map +1 -0
- package/dist/Entities/ObserverList.d.ts +8 -0
- package/dist/Entities/ObserverList.d.ts.map +1 -0
- package/dist/Entities/ObserverList.js +23 -0
- package/dist/Entities/ObserverList.js.map +1 -0
- package/dist/Entities/ObserverList.test.d.ts +2 -0
- package/dist/Entities/ObserverList.test.d.ts.map +1 -0
- package/dist/Entities/ObserverList.test.js +42 -0
- package/dist/Entities/ObserverList.test.js.map +1 -0
- package/dist/Entities/index.d.ts +11 -0
- package/dist/Entities/index.d.ts.map +1 -0
- package/dist/Entities/index.js +11 -0
- package/dist/Entities/index.js.map +1 -0
- package/dist/Types/AppBoundary.d.ts +11 -0
- package/dist/Types/AppBoundary.d.ts.map +1 -0
- package/dist/Types/AppBoundary.js +2 -0
- package/dist/Types/AppBoundary.js.map +1 -0
- package/dist/Types/EaseFn.d.ts +2 -0
- package/dist/Types/EaseFn.d.ts.map +1 -0
- package/dist/Types/EaseFn.js +2 -0
- package/dist/Types/EaseFn.js.map +1 -0
- package/dist/Types/PmAdapter.d.ts +7 -0
- package/dist/Types/PmAdapter.d.ts.map +1 -0
- package/dist/Types/PmAdapter.js +2 -0
- package/dist/Types/PmAdapter.js.map +1 -0
- package/dist/Types/SingletonPmAdapter.d.ts +7 -0
- package/dist/Types/SingletonPmAdapter.d.ts.map +1 -0
- package/dist/Types/SingletonPmAdapter.js +2 -0
- package/dist/Types/SingletonPmAdapter.js.map +1 -0
- package/dist/Types/index.d.ts +5 -0
- package/dist/Types/index.d.ts.map +1 -0
- package/dist/Types/index.js +5 -0
- package/dist/Types/index.js.map +1 -0
- package/dist/ValueObjects/Angle.d.ts +27 -0
- package/dist/ValueObjects/Angle.d.ts.map +1 -0
- package/dist/ValueObjects/Angle.js +43 -0
- package/dist/ValueObjects/Angle.js.map +1 -0
- package/dist/ValueObjects/Angle.test.d.ts +2 -0
- package/dist/ValueObjects/Angle.test.d.ts.map +1 -0
- package/dist/ValueObjects/Angle.test.js +26 -0
- package/dist/ValueObjects/Angle.test.js.map +1 -0
- package/dist/ValueObjects/Color.d.ts +83 -0
- package/dist/ValueObjects/Color.d.ts.map +1 -0
- package/dist/ValueObjects/Color.js +855 -0
- package/dist/ValueObjects/Color.js.map +1 -0
- package/dist/ValueObjects/Color.test.d.ts +2 -0
- package/dist/ValueObjects/Color.test.d.ts.map +1 -0
- package/dist/ValueObjects/Color.test.js +145 -0
- package/dist/ValueObjects/Color.test.js.map +1 -0
- package/dist/ValueObjects/LineSegment2D.d.ts +12 -0
- package/dist/ValueObjects/LineSegment2D.d.ts.map +1 -0
- package/dist/ValueObjects/LineSegment2D.js +68 -0
- package/dist/ValueObjects/LineSegment2D.js.map +1 -0
- package/dist/ValueObjects/LineSegment2D.test.d.ts +2 -0
- package/dist/ValueObjects/LineSegment2D.test.d.ts.map +1 -0
- package/dist/ValueObjects/LineSegment2D.test.js +100 -0
- package/dist/ValueObjects/LineSegment2D.test.js.map +1 -0
- package/dist/ValueObjects/Matrix.d.ts +124 -0
- package/dist/ValueObjects/Matrix.d.ts.map +1 -0
- package/dist/ValueObjects/Matrix.js +462 -0
- package/dist/ValueObjects/Matrix.js.map +1 -0
- package/dist/ValueObjects/Matrix.test.d.ts +2 -0
- package/dist/ValueObjects/Matrix.test.d.ts.map +1 -0
- package/dist/ValueObjects/Matrix.test.js +383 -0
- package/dist/ValueObjects/Matrix.test.js.map +1 -0
- package/dist/ValueObjects/ParametricLine.d.ts +31 -0
- package/dist/ValueObjects/ParametricLine.d.ts.map +1 -0
- package/dist/ValueObjects/ParametricLine.js +73 -0
- package/dist/ValueObjects/ParametricLine.js.map +1 -0
- package/dist/ValueObjects/ParametricLine.test.d.ts +2 -0
- package/dist/ValueObjects/ParametricLine.test.d.ts.map +1 -0
- package/dist/ValueObjects/ParametricLine.test.js +124 -0
- package/dist/ValueObjects/ParametricLine.test.js.map +1 -0
- package/dist/ValueObjects/ParametricPlane.d.ts +21 -0
- package/dist/ValueObjects/ParametricPlane.d.ts.map +1 -0
- package/dist/ValueObjects/ParametricPlane.js +61 -0
- package/dist/ValueObjects/ParametricPlane.js.map +1 -0
- package/dist/ValueObjects/ParametricPlane.test.d.ts +2 -0
- package/dist/ValueObjects/ParametricPlane.test.d.ts.map +1 -0
- package/dist/ValueObjects/ParametricPlane.test.js +99 -0
- package/dist/ValueObjects/ParametricPlane.test.js.map +1 -0
- package/dist/ValueObjects/Quaternion.d.ts +113 -0
- package/dist/ValueObjects/Quaternion.d.ts.map +1 -0
- package/dist/ValueObjects/Quaternion.js +286 -0
- package/dist/ValueObjects/Quaternion.js.map +1 -0
- package/dist/ValueObjects/Quaternion.test.d.ts +2 -0
- package/dist/ValueObjects/Quaternion.test.d.ts.map +1 -0
- package/dist/ValueObjects/Quaternion.test.js +238 -0
- package/dist/ValueObjects/Quaternion.test.js.map +1 -0
- package/dist/ValueObjects/Rectangle.d.ts +16 -0
- package/dist/ValueObjects/Rectangle.d.ts.map +1 -0
- package/dist/ValueObjects/Rectangle.js +20 -0
- package/dist/ValueObjects/Rectangle.js.map +1 -0
- package/dist/ValueObjects/Rectangle.test.d.ts +2 -0
- package/dist/ValueObjects/Rectangle.test.d.ts.map +1 -0
- package/dist/ValueObjects/Rectangle.test.js +30 -0
- package/dist/ValueObjects/Rectangle.test.js.map +1 -0
- package/dist/ValueObjects/Vector2.d.ts +121 -0
- package/dist/ValueObjects/Vector2.d.ts.map +1 -0
- package/dist/ValueObjects/Vector2.js +180 -0
- package/dist/ValueObjects/Vector2.js.map +1 -0
- package/dist/ValueObjects/Vector2.test.d.ts +2 -0
- package/dist/ValueObjects/Vector2.test.d.ts.map +1 -0
- package/dist/ValueObjects/Vector2.test.js +134 -0
- package/dist/ValueObjects/Vector2.test.js.map +1 -0
- package/dist/ValueObjects/Vector3.d.ts +150 -0
- package/dist/ValueObjects/Vector3.d.ts.map +1 -0
- package/dist/ValueObjects/Vector3.js +227 -0
- package/dist/ValueObjects/Vector3.js.map +1 -0
- package/dist/ValueObjects/Vector3.test.d.ts +2 -0
- package/dist/ValueObjects/Vector3.test.d.ts.map +1 -0
- package/dist/ValueObjects/Vector3.test.js +186 -0
- package/dist/ValueObjects/Vector3.test.js.map +1 -0
- package/dist/ValueObjects/index.d.ts +11 -0
- package/dist/ValueObjects/index.d.ts.map +1 -0
- package/dist/ValueObjects/index.js +11 -0
- package/dist/ValueObjects/index.js.map +1 -0
- package/dist/index.d.ts +5 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +5 -0
- package/dist/index.js.map +1 -0
- package/jestconfig.json +10 -0
- package/package.json +41 -0
- package/src/AppObject/AppObject.test.ts +158 -0
- package/src/AppObject/AppObject.ts +83 -0
- package/src/AppObject/AppObjectComponent.test.ts +219 -0
- package/src/AppObject/AppObjectComponent.ts +100 -0
- package/src/AppObject/AppObjectController.ts +8 -0
- package/src/AppObject/AppObjectEntity.test.ts +151 -0
- package/src/AppObject/AppObjectEntity.ts +45 -0
- package/src/AppObject/AppObjectEntityRepo.test.ts +211 -0
- package/src/AppObject/AppObjectEntityRepo.ts +61 -0
- package/src/AppObject/AppObjectPM.test.ts +152 -0
- package/src/AppObject/AppObjectPM.ts +43 -0
- package/src/AppObject/AppObjectRepo.test.ts +317 -0
- package/src/AppObject/AppObjectRepo.ts +203 -0
- package/src/AppObject/AppObjectUC.ts +5 -0
- package/src/AppObject/AppObjectView.ts +5 -0
- package/src/AppObject/getSingletonComponent.test.ts +17 -0
- package/src/AppObject/getSingletonComponent.ts +9 -0
- package/src/AppObject/index.ts +10 -0
- package/src/AppObject/printAppObjectDetails.ts +17 -0
- package/src/Entities/MemoizedAngle.test.ts +38 -0
- package/src/Entities/MemoizedAngle.ts +25 -0
- package/src/Entities/MemoizedBoolean.test.ts +45 -0
- package/src/Entities/MemoizedBoolean.ts +23 -0
- package/src/Entities/MemoizedColor.test.ts +39 -0
- package/src/Entities/MemoizedColor.ts +27 -0
- package/src/Entities/MemoizedNumber.test.ts +37 -0
- package/src/Entities/MemoizedNumber.ts +23 -0
- package/src/Entities/MemoizedQuaternion.test.ts +39 -0
- package/src/Entities/MemoizedQuaternion.ts +27 -0
- package/src/Entities/MemoizedString.test.ts +37 -0
- package/src/Entities/MemoizedString.ts +23 -0
- package/src/Entities/MemoizedVector2.test.ts +39 -0
- package/src/Entities/MemoizedVector2.ts +27 -0
- package/src/Entities/MemoizedVector3.test.ts +39 -0
- package/src/Entities/MemoizedVector3.ts +27 -0
- package/src/Entities/ObservableEntity.test.ts +28 -0
- package/src/Entities/ObservableEntity.ts +17 -0
- package/src/Entities/ObserverList.test.ts +61 -0
- package/src/Entities/ObserverList.ts +24 -0
- package/src/Entities/index.ts +10 -0
- package/src/Types/AppBoundary.ts +13 -0
- package/src/Types/EaseFn.ts +1 -0
- package/src/Types/PmAdapter.ts +15 -0
- package/src/Types/SingletonPmAdapter.ts +7 -0
- package/src/Types/index.ts +4 -0
- package/src/ValueObjects/Angle.test.ts +30 -0
- package/src/ValueObjects/Angle.ts +47 -0
- package/src/ValueObjects/Color.test.ts +181 -0
- package/src/ValueObjects/Color.ts +891 -0
- package/src/ValueObjects/LineSegment2D.test.ts +144 -0
- package/src/ValueObjects/LineSegment2D.ts +93 -0
- package/src/ValueObjects/Matrix.test.ts +498 -0
- package/src/ValueObjects/Matrix.ts +567 -0
- package/src/ValueObjects/ParametricLine.test.ts +155 -0
- package/src/ValueObjects/ParametricLine.ts +114 -0
- package/src/ValueObjects/ParametricPlane.test.ts +122 -0
- package/src/ValueObjects/ParametricPlane.ts +82 -0
- package/src/ValueObjects/Quaternion.test.ts +356 -0
- package/src/ValueObjects/Quaternion.ts +353 -0
- package/src/ValueObjects/Rectangle.test.ts +32 -0
- package/src/ValueObjects/Rectangle.ts +33 -0
- package/src/ValueObjects/Vector2.test.ts +167 -0
- package/src/ValueObjects/Vector2.ts +209 -0
- package/src/ValueObjects/Vector3.test.ts +228 -0
- package/src/ValueObjects/Vector3.ts +269 -0
- package/src/ValueObjects/index.ts +14 -0
- package/src/index.ts +4 -0
- package/tsconfig.json +18 -0
- package/tslint.json +11 -0
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
import { AppObject, makeAppObject } from "./AppObject";
|
|
2
|
+
import { AppObjectEntity } from "./AppObjectEntity";
|
|
3
|
+
import { AppObjectEntityRepo } from "./AppObjectEntityRepo";
|
|
4
|
+
import { makeAppObjectRepo } from "./AppObjectRepo";
|
|
5
|
+
|
|
6
|
+
class MockAppEntity extends AppObjectEntity {
|
|
7
|
+
static type: string = "mockEntity";
|
|
8
|
+
|
|
9
|
+
constructor(appObject: AppObject) {
|
|
10
|
+
super(appObject, MockAppEntity.type)
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
class MockEntityRepoImp extends AppObjectEntityRepo<MockAppEntity> {
|
|
15
|
+
static type: string = "Mock Repo";
|
|
16
|
+
|
|
17
|
+
makeEntity(appObj: AppObject): MockAppEntity {
|
|
18
|
+
return new MockAppEntity(appObj);
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
constructor(appObject: AppObject) {
|
|
22
|
+
super(appObject, MockAppEntity.type)
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function makeTestRig() {
|
|
27
|
+
const appObjects = makeAppObjectRepo();
|
|
28
|
+
const repoAppObj = makeAppObject("repo", appObjects);
|
|
29
|
+
const repo = new MockEntityRepoImp(repoAppObj);
|
|
30
|
+
|
|
31
|
+
const appObj = makeAppObject("appObjID", appObjects);
|
|
32
|
+
const observer = jest.fn();
|
|
33
|
+
repo.addChangeObserver(observer);
|
|
34
|
+
|
|
35
|
+
return { repo, observer, appObj };
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
describe("Observable Entity Repo", () => {
|
|
39
|
+
it("Allows an entity to be added", () => {
|
|
40
|
+
const { repo, appObj } = makeTestRig();
|
|
41
|
+
const entity = new MockAppEntity(appObj);
|
|
42
|
+
|
|
43
|
+
expect(repo.hasForAppObject("appObjID")).toEqual(false);
|
|
44
|
+
|
|
45
|
+
repo.add(entity);
|
|
46
|
+
|
|
47
|
+
expect(repo.hasForAppObject("appObjID")).toEqual(true);
|
|
48
|
+
});
|
|
49
|
+
|
|
50
|
+
it("Notifies when an entity is added", () => {
|
|
51
|
+
const { repo, observer, appObj } = makeTestRig();
|
|
52
|
+
const entity =new MockAppEntity(appObj);
|
|
53
|
+
repo.add(entity);
|
|
54
|
+
|
|
55
|
+
expect(observer).toBeCalled();
|
|
56
|
+
});
|
|
57
|
+
|
|
58
|
+
it("Forwards notification from an added entity", () => {
|
|
59
|
+
const { repo, observer, appObj } = makeTestRig();
|
|
60
|
+
const entity =new MockAppEntity(appObj);
|
|
61
|
+
repo.add(entity);
|
|
62
|
+
|
|
63
|
+
observer.mockClear();
|
|
64
|
+
|
|
65
|
+
entity.notifyOnChange();
|
|
66
|
+
|
|
67
|
+
expect(observer).toBeCalled();
|
|
68
|
+
});
|
|
69
|
+
|
|
70
|
+
it("Stops notifying if adding an entity replaces and exisitng entity", () => {
|
|
71
|
+
const { repo, observer, appObj } = makeTestRig();
|
|
72
|
+
|
|
73
|
+
console.warn = jest.fn(); // Replacing warns. This keeps the console clean
|
|
74
|
+
|
|
75
|
+
const original =new MockAppEntity(appObj);
|
|
76
|
+
repo.add(original);
|
|
77
|
+
|
|
78
|
+
const replacement =new MockAppEntity(appObj);
|
|
79
|
+
repo.add(replacement);
|
|
80
|
+
observer.mockClear();
|
|
81
|
+
|
|
82
|
+
original.notifyOnChange();
|
|
83
|
+
|
|
84
|
+
expect(observer).not.toBeCalled();
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
it("Removes an entity", () => {
|
|
88
|
+
const { repo, appObj } = makeTestRig();
|
|
89
|
+
const entity =new MockAppEntity(appObj);
|
|
90
|
+
|
|
91
|
+
repo.add(entity);
|
|
92
|
+
|
|
93
|
+
expect(repo.hasForAppObject("appObjID")).toEqual(true);
|
|
94
|
+
|
|
95
|
+
repo.removeForAppObject("appObjID");
|
|
96
|
+
|
|
97
|
+
expect(repo.hasForAppObject("appObjID")).toEqual(false);
|
|
98
|
+
});
|
|
99
|
+
|
|
100
|
+
it("Notifies if an entity is removed", () => {
|
|
101
|
+
const { repo, observer, appObj } = makeTestRig();
|
|
102
|
+
const entity =new MockAppEntity(appObj);
|
|
103
|
+
|
|
104
|
+
repo.add(entity);
|
|
105
|
+
observer.mockClear();
|
|
106
|
+
|
|
107
|
+
repo.removeForAppObject("appObjID");
|
|
108
|
+
|
|
109
|
+
expect(observer).toBeCalled();
|
|
110
|
+
});
|
|
111
|
+
|
|
112
|
+
it("Does not notifyOnChange if the entity to be removed cannot be found", () => {
|
|
113
|
+
const { repo, observer } = makeTestRig();
|
|
114
|
+
|
|
115
|
+
repo.removeForAppObject("someId");
|
|
116
|
+
repo.removeForAppObject("someId");
|
|
117
|
+
repo.removeForAppObject("someId");
|
|
118
|
+
|
|
119
|
+
expect(observer).not.toBeCalled();
|
|
120
|
+
});
|
|
121
|
+
|
|
122
|
+
it("Stops observing a removed entity", () => {
|
|
123
|
+
const { repo, observer, appObj } = makeTestRig();
|
|
124
|
+
const entity =new MockAppEntity(appObj);
|
|
125
|
+
|
|
126
|
+
repo.add(entity);
|
|
127
|
+
repo.removeForAppObject("appObjID");
|
|
128
|
+
|
|
129
|
+
observer.mockClear();
|
|
130
|
+
|
|
131
|
+
entity.notifyOnChange();
|
|
132
|
+
|
|
133
|
+
expect(observer).not.toBeCalled();
|
|
134
|
+
});
|
|
135
|
+
|
|
136
|
+
it("Gets an entity", () => {
|
|
137
|
+
const { repo, appObj } = makeTestRig();
|
|
138
|
+
const entity =new MockAppEntity(appObj);
|
|
139
|
+
repo.add(entity);
|
|
140
|
+
|
|
141
|
+
expect(repo.getForAppObject("appObjID")).toEqual(entity);
|
|
142
|
+
});
|
|
143
|
+
|
|
144
|
+
it("Gets all entities", () => {
|
|
145
|
+
const { repo, appObj } = makeTestRig();
|
|
146
|
+
const entity =new MockAppEntity(appObj);
|
|
147
|
+
repo.add(entity);
|
|
148
|
+
|
|
149
|
+
expect(repo.getAll()).toEqual([entity]);
|
|
150
|
+
});
|
|
151
|
+
|
|
152
|
+
it("Returns undefined for an unknown entity", () => {
|
|
153
|
+
const { repo } = makeTestRig();
|
|
154
|
+
|
|
155
|
+
expect(repo.getForAppObject("unknownID")).toBeUndefined();
|
|
156
|
+
});
|
|
157
|
+
|
|
158
|
+
|
|
159
|
+
it("Supports notifying an observer when an entity is added", () => {
|
|
160
|
+
const { repo, appObj } = makeTestRig();
|
|
161
|
+
|
|
162
|
+
const addEntityObserver = jest.fn();
|
|
163
|
+
repo.addEntityAddedObserver(addEntityObserver);
|
|
164
|
+
|
|
165
|
+
const ent =new MockAppEntity(appObj);
|
|
166
|
+
repo.add(ent);
|
|
167
|
+
|
|
168
|
+
expect(addEntityObserver).toBeCalledWith(ent);
|
|
169
|
+
});
|
|
170
|
+
|
|
171
|
+
it("Add entity observer can be removed", () => {
|
|
172
|
+
const { repo, appObj } = makeTestRig();
|
|
173
|
+
|
|
174
|
+
const addEntityObserver = jest.fn();
|
|
175
|
+
repo.addEntityAddedObserver(addEntityObserver);
|
|
176
|
+
repo.removeEntityAddedObserver(addEntityObserver);
|
|
177
|
+
|
|
178
|
+
const ent =new MockAppEntity(appObj);
|
|
179
|
+
repo.add(ent);
|
|
180
|
+
|
|
181
|
+
expect(addEntityObserver).not.toBeCalled();
|
|
182
|
+
});
|
|
183
|
+
|
|
184
|
+
it("Supports notifying an observer when an entity is removed", () => {
|
|
185
|
+
const { repo, appObj } = makeTestRig();
|
|
186
|
+
|
|
187
|
+
const removeEntityObserver = jest.fn();
|
|
188
|
+
repo.addEntityRemovedObserver(removeEntityObserver);
|
|
189
|
+
|
|
190
|
+
const ent =new MockAppEntity(appObj);
|
|
191
|
+
repo.add(ent);
|
|
192
|
+
|
|
193
|
+
repo.removeForAppObject("appObjID");
|
|
194
|
+
|
|
195
|
+
expect(removeEntityObserver).toBeCalledWith(ent);
|
|
196
|
+
});
|
|
197
|
+
|
|
198
|
+
it("Remove entity observer can be removed", () => {
|
|
199
|
+
const { repo, appObj } = makeTestRig();
|
|
200
|
+
|
|
201
|
+
const removeEntityObserver = jest.fn();
|
|
202
|
+
repo.addEntityRemovedObserver(removeEntityObserver);
|
|
203
|
+
repo.removeEntityRemovedObserver(removeEntityObserver);
|
|
204
|
+
|
|
205
|
+
const ent =new MockAppEntity(appObj);
|
|
206
|
+
repo.add(ent);
|
|
207
|
+
repo.removeForAppObject("appObjID");
|
|
208
|
+
|
|
209
|
+
expect(removeEntityObserver).not.toBeCalled();
|
|
210
|
+
});
|
|
211
|
+
});
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { ObserverList } from "../Entities";
|
|
2
|
+
import { AppObjectEntity } from "./AppObjectEntity";
|
|
3
|
+
|
|
4
|
+
export class AppObjectEntityRepo<
|
|
5
|
+
T extends AppObjectEntity
|
|
6
|
+
> extends AppObjectEntity {
|
|
7
|
+
|
|
8
|
+
private entityLookup = new Map<string, T>();
|
|
9
|
+
|
|
10
|
+
private onEntityAddedObservers = new ObserverList<T>();
|
|
11
|
+
addEntityAddedObserver = (observer: (addedEntity: T) => void) => {
|
|
12
|
+
this.onEntityAddedObservers.add(observer);
|
|
13
|
+
};
|
|
14
|
+
removeEntityAddedObserver = (observer: (addedEntity: T) => void): void => {
|
|
15
|
+
this.onEntityAddedObservers.remove(observer);
|
|
16
|
+
};
|
|
17
|
+
|
|
18
|
+
private onEntityRemovedObservers = new ObserverList<T>();
|
|
19
|
+
addEntityRemovedObserver = (observer: (removedEntity: T) => void) => {
|
|
20
|
+
this.onEntityRemovedObservers.add(observer);
|
|
21
|
+
};
|
|
22
|
+
removeEntityRemovedObserver = (
|
|
23
|
+
observer: (removedEntity: T) => void
|
|
24
|
+
): void => {
|
|
25
|
+
this.onEntityRemovedObservers.remove(observer);
|
|
26
|
+
};
|
|
27
|
+
|
|
28
|
+
hasForAppObject = (appObjectID: string): boolean => {
|
|
29
|
+
return this.entityLookup.has(appObjectID);
|
|
30
|
+
};
|
|
31
|
+
|
|
32
|
+
add(entity: T) {
|
|
33
|
+
const existing = this.entityLookup.get(entity.appObject.id);
|
|
34
|
+
if (existing) {
|
|
35
|
+
existing.removeChangeObserver(this.notifyOnChange);
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
this.entityLookup.set(entity.appObject.id, entity);
|
|
39
|
+
entity.addChangeObserver(this.notifyOnChange);
|
|
40
|
+
this.notifyOnChange();
|
|
41
|
+
this.onEntityAddedObservers.notify(entity);
|
|
42
|
+
};
|
|
43
|
+
|
|
44
|
+
removeForAppObject = (id: string) => {
|
|
45
|
+
const existing = this.entityLookup.get(id);
|
|
46
|
+
if (!existing) return;
|
|
47
|
+
|
|
48
|
+
this.entityLookup.delete(id);
|
|
49
|
+
existing.removeChangeObserver(this.notifyOnChange);
|
|
50
|
+
this.notifyOnChange();
|
|
51
|
+
this.onEntityRemovedObservers.notify(existing);
|
|
52
|
+
};
|
|
53
|
+
|
|
54
|
+
getForAppObject = (appObjectID: string): T | undefined => {
|
|
55
|
+
return this.entityLookup.get(appObjectID);
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
getAll = (): T[] => {
|
|
59
|
+
return Array.from(this.entityLookup.values());
|
|
60
|
+
};
|
|
61
|
+
}
|
|
@@ -0,0 +1,152 @@
|
|
|
1
|
+
import { AppObject } from "./AppObject";
|
|
2
|
+
import { AppObjectComponentType } from "./AppObjectComponent";
|
|
3
|
+
import { AppObjectPM } from "./AppObjectPM";
|
|
4
|
+
import { makeAppObjectRepo } from "./AppObjectRepo";
|
|
5
|
+
|
|
6
|
+
interface MockVM {
|
|
7
|
+
val: number;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
class MockPM extends AppObjectPM<MockVM> {
|
|
11
|
+
static readonly type = "MockPM";
|
|
12
|
+
|
|
13
|
+
readonly defaultVM = { val: 0 };
|
|
14
|
+
get currentVM(): MockVM {
|
|
15
|
+
return { val: 5 };
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
vmsAreEqual(a: MockVM, b: MockVM): boolean {
|
|
19
|
+
return a.val === b.val;
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
constructor(appObj: AppObject) {
|
|
23
|
+
super(appObj, MockPM.type);
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
function makeTestRig() {
|
|
28
|
+
const appObjects = makeAppObjectRepo();
|
|
29
|
+
const appObj = appObjects.getOrCreate("appObj");
|
|
30
|
+
|
|
31
|
+
return { appObj, appObjects };
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
describe("App Object PM", () => {
|
|
35
|
+
it("Initializes with the last VM if it has been set", () => {
|
|
36
|
+
const { appObj } = makeTestRig();
|
|
37
|
+
const pm = new MockPM(appObj);
|
|
38
|
+
const view = jest.fn();
|
|
39
|
+
|
|
40
|
+
pm.doUpdateView({ val: 6 });
|
|
41
|
+
|
|
42
|
+
pm.addView(view);
|
|
43
|
+
|
|
44
|
+
expect(view).toBeCalledWith({ val: 6 });
|
|
45
|
+
});
|
|
46
|
+
|
|
47
|
+
it("Adds a view but does not call it if no VM has been set", () => {
|
|
48
|
+
const { appObj } = makeTestRig();
|
|
49
|
+
const pm = new MockPM(appObj);
|
|
50
|
+
const view = jest.fn();
|
|
51
|
+
|
|
52
|
+
pm.addView(view);
|
|
53
|
+
|
|
54
|
+
expect(view).not.toBeCalled();
|
|
55
|
+
});
|
|
56
|
+
|
|
57
|
+
it("Doesn't notify if the vms are equal", () => {
|
|
58
|
+
const { appObj } = makeTestRig();
|
|
59
|
+
const pm = new MockPM(appObj);
|
|
60
|
+
const view = jest.fn();
|
|
61
|
+
|
|
62
|
+
pm.doUpdateView({ val: 6 });
|
|
63
|
+
pm.addView(view);
|
|
64
|
+
|
|
65
|
+
view.mockClear();
|
|
66
|
+
|
|
67
|
+
pm.doUpdateView({ val: 6 });
|
|
68
|
+
pm.doUpdateView({ val: 6 });
|
|
69
|
+
pm.doUpdateView({ val: 6 });
|
|
70
|
+
|
|
71
|
+
expect(view).not.toBeCalled();
|
|
72
|
+
});
|
|
73
|
+
|
|
74
|
+
it("Removes a view", () => {
|
|
75
|
+
const { appObj } = makeTestRig();
|
|
76
|
+
const pm = new MockPM(appObj);
|
|
77
|
+
const view = jest.fn();
|
|
78
|
+
|
|
79
|
+
pm.addView(view);
|
|
80
|
+
|
|
81
|
+
view.mockClear();
|
|
82
|
+
|
|
83
|
+
pm.removeView(view);
|
|
84
|
+
|
|
85
|
+
pm.doUpdateView({ val: 10 });
|
|
86
|
+
|
|
87
|
+
expect(view).not.toBeCalled();
|
|
88
|
+
});
|
|
89
|
+
|
|
90
|
+
it("Can be disposed", () => {
|
|
91
|
+
const { appObj } = makeTestRig();
|
|
92
|
+
const pm = new MockPM(appObj);
|
|
93
|
+
const view = jest.fn();
|
|
94
|
+
|
|
95
|
+
pm.addView(view);
|
|
96
|
+
view.mockClear();
|
|
97
|
+
|
|
98
|
+
pm.dispose();
|
|
99
|
+
|
|
100
|
+
pm.doUpdateView({ val: 10 });
|
|
101
|
+
|
|
102
|
+
expect(view).not.toBeCalled();
|
|
103
|
+
});
|
|
104
|
+
|
|
105
|
+
it("Adds itself to the App Object", () => {
|
|
106
|
+
const { appObj } = makeTestRig();
|
|
107
|
+
|
|
108
|
+
expect(appObj.hasComponent(MockPM.type)).toEqual(false);
|
|
109
|
+
|
|
110
|
+
const pm = new MockPM(appObj);
|
|
111
|
+
|
|
112
|
+
expect(appObj.hasComponent(MockPM.type)).toEqual(true);
|
|
113
|
+
});
|
|
114
|
+
|
|
115
|
+
it("Removes itself from the App Object when disposed", () => {
|
|
116
|
+
const { appObj } = makeTestRig();
|
|
117
|
+
const pm = new MockPM(appObj);
|
|
118
|
+
|
|
119
|
+
expect(appObj.hasComponent(MockPM.type)).toEqual(true);
|
|
120
|
+
|
|
121
|
+
pm.dispose();
|
|
122
|
+
|
|
123
|
+
expect(appObj.hasComponent(MockPM.type)).toEqual(false);
|
|
124
|
+
});
|
|
125
|
+
|
|
126
|
+
it("Returns the repo", () => {
|
|
127
|
+
const { appObj, appObjects } = makeTestRig();
|
|
128
|
+
|
|
129
|
+
const pm = new MockPM(appObj);
|
|
130
|
+
expect(pm.appObjects).toEqual(appObjects);
|
|
131
|
+
});
|
|
132
|
+
|
|
133
|
+
it("Forwards a warn to the App Object Repo warn", () => {
|
|
134
|
+
const { appObj, appObjects } = makeTestRig();
|
|
135
|
+
appObjects.submitWarning = jest.fn();
|
|
136
|
+
|
|
137
|
+
const pm = new MockPM(appObj);
|
|
138
|
+
pm.warn("Some warning");
|
|
139
|
+
|
|
140
|
+
expect(appObjects.submitWarning).toBeCalledWith(
|
|
141
|
+
`appObj/MockPM`,
|
|
142
|
+
"Some warning"
|
|
143
|
+
);
|
|
144
|
+
});
|
|
145
|
+
|
|
146
|
+
it("Sets Component type to PM", () => {
|
|
147
|
+
const { appObj } = makeTestRig();
|
|
148
|
+
const pm = new MockPM(appObj);
|
|
149
|
+
|
|
150
|
+
expect(pm.componentType).toEqual(AppObjectComponentType.PM);
|
|
151
|
+
});
|
|
152
|
+
});
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { ObserverList } from "../Entities";
|
|
2
|
+
import { AppObjectComponent, AppObjectComponentType } from "./AppObjectComponent";
|
|
3
|
+
|
|
4
|
+
export abstract class AppObjectPM<T> extends AppObjectComponent {
|
|
5
|
+
readonly componentType = AppObjectComponentType.PM;
|
|
6
|
+
abstract vmsAreEqual(a: T, b: T): boolean;
|
|
7
|
+
|
|
8
|
+
private _lastVM?: T;
|
|
9
|
+
get lastVM(): T | undefined {
|
|
10
|
+
return this._lastVM;
|
|
11
|
+
}
|
|
12
|
+
|
|
13
|
+
private observerList = new ObserverList<T>();
|
|
14
|
+
|
|
15
|
+
addView(updateView: (vm: T) => void): void {
|
|
16
|
+
this.observerList.add(updateView);
|
|
17
|
+
|
|
18
|
+
if (this._lastVM !== undefined) {
|
|
19
|
+
updateView(this._lastVM);
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
removeView(updateView: (vm: T) => void): void {
|
|
24
|
+
this.observerList.remove(updateView);
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
doUpdateView(vm: T) {
|
|
28
|
+
if (this._lastVM && this.vmsAreEqual(this._lastVM, vm)) {
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
|
|
32
|
+
this._lastVM = vm;
|
|
33
|
+
this.observerList.notify(vm);
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
dispose() {
|
|
37
|
+
this.observerList.clear();
|
|
38
|
+
if (this.appObject.getComponent(this.type) === this) {
|
|
39
|
+
this.appObject.removeComponent(this.type);
|
|
40
|
+
}
|
|
41
|
+
super.dispose();
|
|
42
|
+
}
|
|
43
|
+
}
|