@vived/app 6.7.1 → 6.8.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 +145 -1
- package/dist/cjs/BaseApp/UC/RenderCanvasUC.js.map +1 -1
- package/dist/cjs/BaseApp/UC/RenderCanvasUC.test.js.map +1 -1
- package/dist/cjs/Challenge/Factories/ChallengeFeatureFactory.js.map +1 -1
- package/dist/cjs/Challenge/Factories/ChallengeFeatureFactory.test.js.map +1 -1
- package/dist/cjs/EventSystem/Entities/EventEntity.js.map +1 -1
- package/dist/cjs/EventSystem/Entities/EventEntity.test.js +4 -1
- package/dist/cjs/EventSystem/Entities/EventEntity.test.js.map +1 -1
- package/dist/cjs/EventSystem/Entities/index.js.map +1 -1
- package/dist/cjs/EventSystem/EventSystem.integration.test.js.map +1 -1
- package/dist/cjs/EventSystem/Factories/EventSystemFeatureFactory.js.map +1 -1
- package/dist/cjs/EventSystem/Factories/EventSystemFeatureFactory.test.js.map +1 -1
- package/dist/cjs/EventSystem/Factories/index.js.map +1 -1
- package/dist/cjs/EventSystem/Mocks/MockEventEntity.js.map +1 -1
- package/dist/cjs/EventSystem/Mocks/index.js.map +1 -1
- package/dist/cjs/EventSystem/index.js.map +1 -1
- package/dist/cjs/EventSystem/types.js.map +1 -1
- package/dist/cjs/LabelDrop/Factories/LabelDropFeatureFactory.js.map +1 -1
- package/dist/cjs/LabelDrop/UseCases/SubmitLabelDropResultUC.js.map +1 -1
- package/dist/cjs/LabelDrop/UseCases/SubmitLabelDropResultUC.test.js.map +1 -1
- package/dist/cjs/LabelDrop/UseCases/index.js.map +1 -1
- package/dist/cjs/Procedure/Adapters/index.js.map +1 -1
- package/dist/cjs/Procedure/Adapters/procedureAdapter.js.map +1 -1
- package/dist/cjs/Procedure/Adapters/procedureAdapter.test.js.map +1 -1
- package/dist/cjs/Procedure/Adapters/procedureAuthoringAdapter.js.map +1 -1
- package/dist/cjs/Procedure/Adapters/procedureAuthoringAdapter.test.js.map +1 -1
- package/dist/cjs/Procedure/Adapters/procedureHintAdapter.js.map +1 -1
- package/dist/cjs/Procedure/Adapters/procedureHintAdapter.test.js.map +1 -1
- package/dist/cjs/Procedure/Adapters/procedureProgressAdapter.js.map +1 -1
- package/dist/cjs/Procedure/Adapters/procedureProgressAdapter.test.js.map +1 -1
- package/dist/cjs/Procedure/Adapters/procedureQuizResultAdapter.js.map +1 -1
- package/dist/cjs/Procedure/Adapters/procedureQuizResultAdapter.test.js +3 -1
- package/dist/cjs/Procedure/Adapters/procedureQuizResultAdapter.test.js.map +1 -1
- package/dist/cjs/Procedure/Entities/HintRegistry.js.map +1 -1
- package/dist/cjs/Procedure/Entities/HintRegistry.test.js.map +1 -1
- package/dist/cjs/Procedure/Entities/ProcedureEntity.js.map +1 -1
- package/dist/cjs/Procedure/Entities/ProcedureEntity.test.js +1 -12
- package/dist/cjs/Procedure/Entities/ProcedureEntity.test.js.map +1 -1
- package/dist/cjs/Procedure/Entities/index.js.map +1 -1
- package/dist/cjs/Procedure/Factories/ProcedureFeatureFactory.js.map +1 -1
- package/dist/cjs/Procedure/Factories/ProcedureFeatureFactory.test.js +3 -1
- package/dist/cjs/Procedure/Factories/ProcedureFeatureFactory.test.js.map +1 -1
- package/dist/cjs/Procedure/Factories/index.js.map +1 -1
- package/dist/cjs/Procedure/Mocks/MockProcedureEntity.js.map +1 -1
- package/dist/cjs/Procedure/Mocks/MockProcedurePM.js.map +1 -1
- package/dist/cjs/Procedure/Mocks/index.js.map +1 -1
- package/dist/cjs/Procedure/PM/ProcedurePM.js.map +1 -1
- package/dist/cjs/Procedure/PM/ProcedurePM.test.js +1 -1
- package/dist/cjs/Procedure/PM/ProcedurePM.test.js.map +1 -1
- package/dist/cjs/Procedure/PM/index.js.map +1 -1
- package/dist/cjs/Procedure/ProcedureEventSystem.integration.test.js.map +1 -1
- package/dist/cjs/Procedure/UCs/AddProcedureEventUC.js.map +1 -1
- package/dist/cjs/Procedure/UCs/AddProcedureEventUC.test.js +1 -4
- package/dist/cjs/Procedure/UCs/AddProcedureEventUC.test.js.map +1 -1
- package/dist/cjs/Procedure/UCs/MoveProcedureEventDownUC.js.map +1 -1
- package/dist/cjs/Procedure/UCs/MoveProcedureEventDownUC.test.js.map +1 -1
- package/dist/cjs/Procedure/UCs/MoveProcedureEventUpUC.js.map +1 -1
- package/dist/cjs/Procedure/UCs/MoveProcedureEventUpUC.test.js.map +1 -1
- package/dist/cjs/Procedure/UCs/RecordProcedureEventUC.js.map +1 -1
- package/dist/cjs/Procedure/UCs/RecordProcedureEventUC.test.js.map +1 -1
- package/dist/cjs/Procedure/UCs/RecordProcedureSessionUC.js.map +1 -1
- package/dist/cjs/Procedure/UCs/RecordProcedureSessionUC.test.js +22 -4
- package/dist/cjs/Procedure/UCs/RecordProcedureSessionUC.test.js.map +1 -1
- package/dist/cjs/Procedure/UCs/RemoveProcedureEventUC.js.map +1 -1
- package/dist/cjs/Procedure/UCs/RemoveProcedureEventUC.test.js.map +1 -1
- package/dist/cjs/Procedure/UCs/ResetProcedureProgressUC.js.map +1 -1
- package/dist/cjs/Procedure/UCs/ResetProcedureProgressUC.test.js.map +1 -1
- package/dist/cjs/Procedure/UCs/SerializeProcedure.js.map +1 -1
- package/dist/cjs/Procedure/UCs/SerializeProcedure.test.js +6 -1
- package/dist/cjs/Procedure/UCs/SerializeProcedure.test.js.map +1 -1
- package/dist/cjs/Procedure/UCs/SetProcedureIsQuizUC.js.map +1 -1
- package/dist/cjs/Procedure/UCs/SetProcedureIsQuizUC.test.js.map +1 -1
- package/dist/cjs/Procedure/UCs/SetProcedureOrderMattersUC.js.map +1 -1
- package/dist/cjs/Procedure/UCs/SetProcedureOrderMattersUC.test.js.map +1 -1
- package/dist/cjs/Procedure/UCs/SetProcedureShowHintsUC.js.map +1 -1
- package/dist/cjs/Procedure/UCs/SetProcedureShowHintsUC.test.js.map +1 -1
- package/dist/cjs/Procedure/UCs/SubmitProcedureQuizUC.js.map +1 -1
- package/dist/cjs/Procedure/UCs/SubmitProcedureQuizUC.test.js.map +1 -1
- package/dist/cjs/Procedure/UCs/UpdateProcedureEventsUCHook.js.map +1 -1
- package/dist/cjs/Procedure/UCs/UpdateProcedureEventsUCHook.test.js.map +1 -1
- package/dist/cjs/Procedure/UCs/index.js.map +1 -1
- package/dist/cjs/Procedure/index.js.map +1 -1
- package/dist/cjs/Procedure/types.js.map +1 -1
- package/dist/cjs/RequestHandler/UC/SetThemeColorUC.test.js +9 -0
- package/dist/cjs/RequestHandler/UC/SetThemeColorUC.test.js.map +1 -1
- package/dist/cjs/ThemeColors/Entities/ThemeColors.js +24 -0
- package/dist/cjs/ThemeColors/Entities/ThemeColors.js.map +1 -1
- package/dist/cjs/ThemeColors/Entities/ThemeColors.test.js +20 -0
- package/dist/cjs/ThemeColors/Entities/ThemeColors.test.js.map +1 -1
- package/dist/cjs/TouchController/UC/UpdateTouchInoutBound.test.js.map +1 -1
- package/dist/cjs/TouchController/UC/UpdateTouchInputBound.js.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/esm/BaseApp/UC/RenderCanvasUC.js.map +1 -1
- package/dist/esm/BaseApp/UC/RenderCanvasUC.test.js.map +1 -1
- package/dist/esm/Challenge/Factories/ChallengeFeatureFactory.js.map +1 -1
- package/dist/esm/Challenge/Factories/ChallengeFeatureFactory.test.js.map +1 -1
- package/dist/esm/EventSystem/Entities/EventEntity.js.map +1 -1
- package/dist/esm/EventSystem/Entities/EventEntity.test.js +4 -1
- package/dist/esm/EventSystem/Entities/EventEntity.test.js.map +1 -1
- package/dist/esm/EventSystem/Entities/index.js.map +1 -1
- package/dist/esm/EventSystem/EventSystem.integration.test.js.map +1 -1
- package/dist/esm/EventSystem/Factories/EventSystemFeatureFactory.js.map +1 -1
- package/dist/esm/EventSystem/Factories/EventSystemFeatureFactory.test.js.map +1 -1
- package/dist/esm/EventSystem/Factories/index.js.map +1 -1
- package/dist/esm/EventSystem/Mocks/MockEventEntity.js.map +1 -1
- package/dist/esm/EventSystem/Mocks/index.js.map +1 -1
- package/dist/esm/EventSystem/index.js.map +1 -1
- package/dist/esm/EventSystem/types.js.map +1 -1
- package/dist/esm/LabelDrop/Factories/LabelDropFeatureFactory.js.map +1 -1
- package/dist/esm/LabelDrop/UseCases/SubmitLabelDropResultUC.js.map +1 -1
- package/dist/esm/LabelDrop/UseCases/SubmitLabelDropResultUC.test.js.map +1 -1
- package/dist/esm/LabelDrop/UseCases/index.js.map +1 -1
- package/dist/esm/Procedure/Adapters/index.js.map +1 -1
- package/dist/esm/Procedure/Adapters/procedureAdapter.js.map +1 -1
- package/dist/esm/Procedure/Adapters/procedureAdapter.test.js.map +1 -1
- package/dist/esm/Procedure/Adapters/procedureAuthoringAdapter.js.map +1 -1
- package/dist/esm/Procedure/Adapters/procedureAuthoringAdapter.test.js.map +1 -1
- package/dist/esm/Procedure/Adapters/procedureHintAdapter.js.map +1 -1
- package/dist/esm/Procedure/Adapters/procedureHintAdapter.test.js.map +1 -1
- package/dist/esm/Procedure/Adapters/procedureProgressAdapter.js.map +1 -1
- package/dist/esm/Procedure/Adapters/procedureProgressAdapter.test.js.map +1 -1
- package/dist/esm/Procedure/Adapters/procedureQuizResultAdapter.js.map +1 -1
- package/dist/esm/Procedure/Adapters/procedureQuizResultAdapter.test.js +3 -1
- package/dist/esm/Procedure/Adapters/procedureQuizResultAdapter.test.js.map +1 -1
- package/dist/esm/Procedure/Entities/HintRegistry.js.map +1 -1
- package/dist/esm/Procedure/Entities/HintRegistry.test.js.map +1 -1
- package/dist/esm/Procedure/Entities/ProcedureEntity.js.map +1 -1
- package/dist/esm/Procedure/Entities/ProcedureEntity.test.js +1 -12
- package/dist/esm/Procedure/Entities/ProcedureEntity.test.js.map +1 -1
- package/dist/esm/Procedure/Entities/index.js.map +1 -1
- package/dist/esm/Procedure/Factories/ProcedureFeatureFactory.js.map +1 -1
- package/dist/esm/Procedure/Factories/ProcedureFeatureFactory.test.js +5 -3
- package/dist/esm/Procedure/Factories/ProcedureFeatureFactory.test.js.map +1 -1
- package/dist/esm/Procedure/Factories/index.js.map +1 -1
- package/dist/esm/Procedure/Mocks/MockProcedureEntity.js.map +1 -1
- package/dist/esm/Procedure/Mocks/MockProcedurePM.js.map +1 -1
- package/dist/esm/Procedure/Mocks/index.js.map +1 -1
- package/dist/esm/Procedure/PM/ProcedurePM.js.map +1 -1
- package/dist/esm/Procedure/PM/ProcedurePM.test.js +2 -2
- package/dist/esm/Procedure/PM/ProcedurePM.test.js.map +1 -1
- package/dist/esm/Procedure/PM/index.js.map +1 -1
- package/dist/esm/Procedure/ProcedureEventSystem.integration.test.js +2 -2
- package/dist/esm/Procedure/ProcedureEventSystem.integration.test.js.map +1 -1
- package/dist/esm/Procedure/UCs/AddProcedureEventUC.js.map +1 -1
- package/dist/esm/Procedure/UCs/AddProcedureEventUC.test.js +3 -6
- package/dist/esm/Procedure/UCs/AddProcedureEventUC.test.js.map +1 -1
- package/dist/esm/Procedure/UCs/MoveProcedureEventDownUC.js.map +1 -1
- package/dist/esm/Procedure/UCs/MoveProcedureEventDownUC.test.js +2 -2
- package/dist/esm/Procedure/UCs/MoveProcedureEventDownUC.test.js.map +1 -1
- package/dist/esm/Procedure/UCs/MoveProcedureEventUpUC.js.map +1 -1
- package/dist/esm/Procedure/UCs/MoveProcedureEventUpUC.test.js +2 -2
- package/dist/esm/Procedure/UCs/MoveProcedureEventUpUC.test.js.map +1 -1
- package/dist/esm/Procedure/UCs/RecordProcedureEventUC.js.map +1 -1
- package/dist/esm/Procedure/UCs/RecordProcedureEventUC.test.js +2 -2
- package/dist/esm/Procedure/UCs/RecordProcedureEventUC.test.js.map +1 -1
- package/dist/esm/Procedure/UCs/RecordProcedureSessionUC.js.map +1 -1
- package/dist/esm/Procedure/UCs/RecordProcedureSessionUC.test.js +22 -4
- package/dist/esm/Procedure/UCs/RecordProcedureSessionUC.test.js.map +1 -1
- package/dist/esm/Procedure/UCs/RemoveProcedureEventUC.js.map +1 -1
- package/dist/esm/Procedure/UCs/RemoveProcedureEventUC.test.js +2 -2
- package/dist/esm/Procedure/UCs/RemoveProcedureEventUC.test.js.map +1 -1
- package/dist/esm/Procedure/UCs/ResetProcedureProgressUC.js.map +1 -1
- package/dist/esm/Procedure/UCs/ResetProcedureProgressUC.test.js +2 -2
- package/dist/esm/Procedure/UCs/ResetProcedureProgressUC.test.js.map +1 -1
- package/dist/esm/Procedure/UCs/SerializeProcedure.js.map +1 -1
- package/dist/esm/Procedure/UCs/SerializeProcedure.test.js +8 -3
- package/dist/esm/Procedure/UCs/SerializeProcedure.test.js.map +1 -1
- package/dist/esm/Procedure/UCs/SetProcedureIsQuizUC.js.map +1 -1
- package/dist/esm/Procedure/UCs/SetProcedureIsQuizUC.test.js +1 -1
- package/dist/esm/Procedure/UCs/SetProcedureIsQuizUC.test.js.map +1 -1
- package/dist/esm/Procedure/UCs/SetProcedureOrderMattersUC.js.map +1 -1
- package/dist/esm/Procedure/UCs/SetProcedureOrderMattersUC.test.js +1 -1
- package/dist/esm/Procedure/UCs/SetProcedureOrderMattersUC.test.js.map +1 -1
- package/dist/esm/Procedure/UCs/SetProcedureShowHintsUC.js.map +1 -1
- package/dist/esm/Procedure/UCs/SetProcedureShowHintsUC.test.js +1 -1
- package/dist/esm/Procedure/UCs/SetProcedureShowHintsUC.test.js.map +1 -1
- package/dist/esm/Procedure/UCs/SubmitProcedureQuizUC.js.map +1 -1
- package/dist/esm/Procedure/UCs/SubmitProcedureQuizUC.test.js +2 -2
- package/dist/esm/Procedure/UCs/SubmitProcedureQuizUC.test.js.map +1 -1
- package/dist/esm/Procedure/UCs/UpdateProcedureEventsUCHook.js.map +1 -1
- package/dist/esm/Procedure/UCs/UpdateProcedureEventsUCHook.test.js +1 -1
- package/dist/esm/Procedure/UCs/UpdateProcedureEventsUCHook.test.js.map +1 -1
- package/dist/esm/Procedure/UCs/index.js.map +1 -1
- package/dist/esm/Procedure/index.js.map +1 -1
- package/dist/esm/Procedure/types.js.map +1 -1
- package/dist/esm/RequestHandler/UC/SetThemeColorUC.test.js +9 -0
- package/dist/esm/RequestHandler/UC/SetThemeColorUC.test.js.map +1 -1
- package/dist/esm/ThemeColors/Entities/ThemeColors.js +24 -0
- package/dist/esm/ThemeColors/Entities/ThemeColors.js.map +1 -1
- package/dist/esm/ThemeColors/Entities/ThemeColors.test.js +20 -0
- package/dist/esm/ThemeColors/Entities/ThemeColors.test.js.map +1 -1
- package/dist/esm/TouchController/UC/UpdateTouchInoutBound.test.js.map +1 -1
- package/dist/esm/TouchController/UC/UpdateTouchInputBound.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/types/Procedure/Entities/ProcedureEntity.d.ts.map +1 -1
- package/dist/types/Procedure/Mocks/MockProcedureEntity.d.ts.map +1 -1
- package/dist/types/Procedure/UCs/AddProcedureEventUC.d.ts.map +1 -1
- package/dist/types/Procedure/UCs/RecordProcedureSessionUC.d.ts.map +1 -1
- package/dist/types/Procedure/UCs/SetProcedureIsQuizUC.d.ts.map +1 -1
- package/dist/types/Procedure/UCs/SubmitProcedureQuizUC.d.ts.map +1 -1
- package/dist/types/Procedure/types.d.ts.map +1 -1
- package/dist/types/ThemeColors/Entities/ThemeColors.d.ts +12 -0
- package/dist/types/ThemeColors/Entities/ThemeColors.d.ts.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -1 +1,145 @@
|
|
|
1
|
-
|
|
1
|
+
# @vived/app
|
|
2
|
+
|
|
3
|
+
The shared **Feature Library** that VIVED Slide Apps are built from — a published collection
|
|
4
|
+
of reusable Features, built on [`@vived/core`](https://github.com/vivedlearning/vived_core)'s
|
|
5
|
+
AppObject architecture, that a Slide App pulls in and composes.
|
|
6
|
+
|
|
7
|
+
It is **not** a Slide App and **not** a Host. It runs *inside* a Slide App, and it includes the
|
|
8
|
+
code that implements the App's side of the App↔Host boundary.
|
|
9
|
+
|
|
10
|
+
## Install
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
npm install @vived/app
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
`@vived/core` is a peer dependency:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
npm install @vived/core
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
Ships ESM, CJS and type declarations. Requires `@vived/core` `>=2.0.0`.
|
|
23
|
+
|
|
24
|
+
## Composing Features
|
|
25
|
+
|
|
26
|
+
The unit of consumption is a **Feature** (`src/<Feature>/`). Each one is wired by its
|
|
27
|
+
`FeatureFactory` — a `DomainFactory` subclass that builds the Feature in phases. Register the
|
|
28
|
+
Features you want with a `DomainFactoryRepo`, then run one phased setup so cross-Feature
|
|
29
|
+
dependencies resolve in the right order:
|
|
30
|
+
|
|
31
|
+
```ts
|
|
32
|
+
import { makeAppObjectRepo, makeDomainFactoryRepo } from "@vived/core";
|
|
33
|
+
import {
|
|
34
|
+
makeChallengeFeatureFactory,
|
|
35
|
+
makeDispatcherFeatureFactory,
|
|
36
|
+
makeObjectPickFeatureFactory,
|
|
37
|
+
makeRequestHandlerFeatureFactory,
|
|
38
|
+
makeStateMachineFeatureFactory,
|
|
39
|
+
} from "@vived/app";
|
|
40
|
+
|
|
41
|
+
const appObjects = makeAppObjectRepo();
|
|
42
|
+
const factories = makeDomainFactoryRepo(appObjects);
|
|
43
|
+
|
|
44
|
+
// The Host boundary. `hostHandler` is the function the Host gave you to receive
|
|
45
|
+
// the App's outbound Requests.
|
|
46
|
+
makeDispatcherFeatureFactory(appObjects, hostHandler);
|
|
47
|
+
makeRequestHandlerFeatureFactory(appObjects);
|
|
48
|
+
|
|
49
|
+
// Whatever else this Slide App needs.
|
|
50
|
+
makeStateMachineFeatureFactory(appObjects);
|
|
51
|
+
makeChallengeFeatureFactory(appObjects);
|
|
52
|
+
makeObjectPickFeatureFactory(appObjects);
|
|
53
|
+
|
|
54
|
+
// Runs every factory's setupEntities, then every setupUCs, then setupPMs,
|
|
55
|
+
// then finalSetup — so a Feature can depend on another Feature's entities.
|
|
56
|
+
factories.setupDomain();
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
Order of registration is not significant: the phased orchestration is what resolves
|
|
60
|
+
cross-Feature dependencies. Object Pick registers itself as a Challenge kind during
|
|
61
|
+
`finalSetup`, after every Feature's entities exist.
|
|
62
|
+
|
|
63
|
+
A Feature you don't register simply isn't there. Declining an optional subsystem is a
|
|
64
|
+
supported state and is not an error.
|
|
65
|
+
|
|
66
|
+
### Legacy `setup<Feature>` functions
|
|
67
|
+
|
|
68
|
+
Older `setup<Feature>(appObjects)` functions still exist alongside the factories and are being
|
|
69
|
+
retired one Feature at a time. **Prefer the `FeatureFactory`** — it is the canonical wiring, and
|
|
70
|
+
where the two have drifted the factory is the source of truth. The legacy functions run
|
|
71
|
+
immediately rather than in phases, so they are order-sensitive in ways the factories are not.
|
|
72
|
+
|
|
73
|
+
## The Host boundary
|
|
74
|
+
|
|
75
|
+
A Slide App and its Host talk only through **Requests** — typed, versioned messages of the
|
|
76
|
+
shape `{ type, version, payload }`. The boundary is two one-way streets, named from the App's
|
|
77
|
+
point of view:
|
|
78
|
+
|
|
79
|
+
| Direction | Feature | What it does |
|
|
80
|
+
| --- | --- | --- |
|
|
81
|
+
| Outbound (App → Host) | `Dispatcher` | One UC per request type — `appIsReady`, `submitHitResult`, `getAssetBlobURL`… |
|
|
82
|
+
| Inbound (Host → App) | `RequestHandler` | Routes each incoming Request to a registered UC — `START_APP`, `SET_APP_STATE`, `SET_IS_AUTHORING`… |
|
|
83
|
+
|
|
84
|
+
An outbound Request is answered by a **response callback** passed in its own payload, never by
|
|
85
|
+
the Host sending an inbound Request back.
|
|
86
|
+
|
|
87
|
+
See [`docs/dispatcher-reference.md`](./docs/dispatcher-reference.md) and
|
|
88
|
+
[`docs/feature-factories-reference.md`](./docs/feature-factories-reference.md).
|
|
89
|
+
|
|
90
|
+
## State and serialization
|
|
91
|
+
|
|
92
|
+
**State** is one Slide's serialized snapshot. Each independently-serialized dimension of it is a
|
|
93
|
+
**System** — dissectable meshes, callouts, landmarks, stored view each register as one, and each
|
|
94
|
+
versions and (de)serializes only its own slice. The app-side `StateMachineEntity` gathers every
|
|
95
|
+
registered System into a `SerializedStates` envelope and applies an incoming one
|
|
96
|
+
System-by-System. It does not sequence Slides; the Host owns that.
|
|
97
|
+
|
|
98
|
+
See [`docs/statemachine-serialization-reference.md`](./docs/statemachine-serialization-reference.md).
|
|
99
|
+
|
|
100
|
+
## The framework-free rule
|
|
101
|
+
|
|
102
|
+
Everything in this package is **Domain** code and may not depend on any external framework
|
|
103
|
+
([ADR-0001](./docs/adr/0001-framework-free-domain.md)). Where the domain needs a framework
|
|
104
|
+
capability — rendering, picking — it declares an **abstract** class and the consuming Slide App
|
|
105
|
+
supplies the concrete implementation from its own Frameworks folder.
|
|
106
|
+
|
|
107
|
+
## Features
|
|
108
|
+
|
|
109
|
+
`Babylon` · `BaseApp` · `Callouts` · `Camera` · `Challenge` · `ChannelModel` · `Dispatcher` ·
|
|
110
|
+
`Enablement` · `Environment` · `EventSystem` · `FeatureFlags` · `FramedScreen` · `GLBModel` ·
|
|
111
|
+
`Hideable` · `HoverLabel` · `InspectorTab` · `KeyboardInput` · `Label` · `LabelDrop` ·
|
|
112
|
+
`Landmarks` · `Mesh` · `MouseInput` · `ObjectPick` · `OverlayColor` · `Procedure` · `Question` ·
|
|
113
|
+
`RequestHandler` · `SceneRoot` · `Selection` · `StateMachine` · `Stick` · `StoredView` ·
|
|
114
|
+
`Stylus` · `ThemeColors` · `Tools` · `TouchController` · `Transform3D` · `Transparency` ·
|
|
115
|
+
`UndoRedo` · `Workplane` · `XR` · `zSpace`
|
|
116
|
+
|
|
117
|
+
Every Feature is organized by AppObject component type — Entities, UCs, PMs, Controllers,
|
|
118
|
+
Adapters, Factories, Mocks. Each ships a `Mocks/` folder for testing against it.
|
|
119
|
+
|
|
120
|
+
## Documentation
|
|
121
|
+
|
|
122
|
+
| Document | What it covers |
|
|
123
|
+
| --- | --- |
|
|
124
|
+
| [`CONTEXT.md`](./CONTEXT.md) | The glossary — package identity, Host boundary, State & Systems, component conventions |
|
|
125
|
+
| [`CONTEXT-MAP.md`](./CONTEXT-MAP.md) | How context is organized across the Features |
|
|
126
|
+
| [`CHANGELOG.md`](./CHANGELOG.md) | Release notes |
|
|
127
|
+
| [`docs/adr/`](./docs/adr/) | Architecture decision records |
|
|
128
|
+
| [`CLAUDE.md`](./CLAUDE.md) | Guidance for agents working in this repo |
|
|
129
|
+
|
|
130
|
+
## Development
|
|
131
|
+
|
|
132
|
+
```bash
|
|
133
|
+
npm install
|
|
134
|
+
npm test # jest, watch mode
|
|
135
|
+
npm run testOnce
|
|
136
|
+
npm run lint # tslint
|
|
137
|
+
npm run format # prettier
|
|
138
|
+
npm run build # tsc → ESM + CJS + types under dist/
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
Tests are co-located as `*.test.ts` next to the code they cover.
|
|
142
|
+
|
|
143
|
+
## License
|
|
144
|
+
|
|
145
|
+
ISC
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderCanvasUC.js","sourceRoot":"","sources":["../../../../src/BaseApp/UC/RenderCanvasUC.ts"],"names":[],"mappings":"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","sourcesContent":["import {\
|
|
1
|
+
{"version":3,"file":"RenderCanvasUC.js","sourceRoot":"","sources":["../../../../src/BaseApp/UC/RenderCanvasUC.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AppObject,\n AppObjectRepo,\n AppObjectUC,\n getSingletonComponent,\n} from \"@vived/core\";\nimport { BabylonRenderingUC } from \"../../Babylon\";\nimport { KeyboardInputEntity } from \"../../KeyboardInput\";\nimport { TouchInputEntity } from \"../../TouchController\";\nimport { MouseInputEntity } from \"../../MouseInput\";\n\nexport abstract class RenderCanvasUC extends AppObjectUC {\n static readonly type = \"RenderCanvasUC\";\n\n abstract submitCanvas(canvas: HTMLCanvasElement): void;\n abstract clearCanvas(): void;\n\n static get = (appObjects: AppObjectRepo): RenderCanvasUC | undefined =>\n getSingletonComponent(RenderCanvasUC.type, appObjects);\n}\n\nexport function makeRenderCanvasUC(appObject: AppObject): RenderCanvasUC {\n return new RenderCanvasUCImp(appObject);\n}\n\nclass RenderCanvasUCImp extends RenderCanvasUC {\n submitCanvas(canvas: HTMLCanvasElement): void {\n const appObjects = this.appObject.appObjectRepo;\n\n // The DOM input subsystems are optional. A composition may decline them\n // (input handled natively by the renderer, for example), so absence is a\n // supported state and is skipped silently. hasSingleton is checked first\n // because the entity getters warn when the lookup misses.\n if (appObjects.hasSingleton(KeyboardInputEntity.type)) {\n KeyboardInputEntity.get(appObjects)?.setEventElement(canvas);\n }\n\n if (appObjects.hasSingleton(TouchInputEntity.type)) {\n TouchInputEntity.get(appObjects)?.setEventElement(canvas);\n }\n\n if (appObjects.hasSingleton(MouseInputEntity.type)) {\n MouseInputEntity.get(appObjects)?.setEventElement(canvas);\n }\n\n const babylonRendering = BabylonRenderingUC.get(appObjects);\n if (babylonRendering) {\n babylonRendering.submitRenderCanvas(canvas);\n } else {\n this.warn(\"Unable to find BabylonRenderingUC\");\n }\n\n canvas.addEventListener(\n \"contextmenu\",\n (e) => {\n e.preventDefault();\n },\n false,\n );\n }\n\n clearCanvas(): void {\n const appObjects = this.appObject.appObjectRepo;\n\n // Optional input subsystems - see submitCanvas.\n if (appObjects.hasSingleton(KeyboardInputEntity.type)) {\n KeyboardInputEntity.get(appObjects)?.clearInputElement();\n }\n\n if (appObjects.hasSingleton(TouchInputEntity.type)) {\n TouchInputEntity.get(appObjects)?.clearInputElement();\n }\n\n if (appObjects.hasSingleton(MouseInputEntity.type)) {\n MouseInputEntity.get(appObjects)?.clearInputElement();\n }\n\n const babylonRendering = BabylonRenderingUC.get(appObjects);\n if (babylonRendering) {\n babylonRendering.clearRenderCanvas();\n } else {\n this.warn(\"Unable to find BabylonRenderingUC\");\n }\n }\n\n constructor(appObject: AppObject) {\n super(appObject, RenderCanvasUC.type);\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"RenderCanvasUC.test.js","sourceRoot":"","sources":["../../../../src/BaseApp/UC/RenderCanvasUC.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\r\nimport { makeRenderCanvasUC, RenderCanvasUC } from \"./RenderCanvasUC\";\r\nimport { MockKeyboardInput } from \"../../KeyboardInput/Mocks/MockKeyboardInput\";\r\nimport { MockMouseInput } from \"../../MouseInput/Mocks/MockMouseInput\";\r\nimport { MockTouchInputEntity } from \"../../TouchController/Mock/MockTouchInput\";\r\nimport { makeMockBabylonRenderingUC } from \"../../Babylon\";\r\n\r\nfunction makeTestRig() {\r\n const appObjects = makeAppObjectRepo();\r\n const app = appObjects.getOrCreate(\"App\");\r\n const renderUC = makeRenderCanvasUC(app);\r\n const mockKeybaord = new MockKeyboardInput(app);\r\n const mockBabylon = makeMockBabylonRenderingUC(appObjects);\r\n const mockMouse = new MockMouseInput(app);\r\n const mockTouch = new MockTouchInputEntity(app);\r\n\r\n // Convert mouse input methods to jest mocks\r\n mockMouse.setEventElement = jest.fn();\r\n mockMouse.clearInputElement = jest.fn();\r\n\r\n // Convert babylon rendering methods to jest mocks\r\n mockBabylon.submitRenderCanvas = jest.fn();\r\n mockBabylon.clearRenderCanvas = jest.fn();\r\n\r\n const mockWarn = jest.fn();\r\n appObjects.submitWarning = mockWarn;\r\n\r\n return {\r\n appObjects,\r\n renderUC,\r\n mockBabylon,\r\n mockKeybaord,\r\n mockWarn,\r\n mockTouch,\r\n mockMouse,\r\n };\r\n}\r\n\r\ndescribe(\"Render Canvas UC\", () => {\r\n it(\"Submits the canvas to the keyboard input\", () => {\r\n const { mockKeybaord, renderUC } = makeTestRig();\r\n const renderCanvas = document.createElement(\"canvas\");\r\n\r\n renderUC.submitCanvas(renderCanvas);\r\n\r\n expect(mockKeybaord.setEventElement).toHaveBeenCalledWith(renderCanvas);\r\n });\r\n\r\n it(\"Skips the keyboard input silently when it is absent and a canvas is submitted\", () => {\r\n const { mockKeybaord, renderUC, mockWarn } = makeTestRig();\r\n const renderCanvas = document.createElement(\"canvas\");\r\n mockKeybaord.dispose();\r\n\r\n expect(() => renderUC.submitCanvas(renderCanvas)).not.toThrow();\r\n expect(mockWarn).not.toHaveBeenCalled();\r\n });\r\n\r\n it(\"Clears the input element from keyboard input\", () => {\r\n const { mockKeybaord, renderUC } = makeTestRig();\r\n\r\n renderUC.clearCanvas();\r\n\r\n expect(mockKeybaord.clearInputElement).toHaveBeenCalled();\r\n });\r\n\r\n it(\"Skips the keyboard input silently when it is absent and a canvas is cleared\", () => {\r\n const { mockKeybaord, renderUC, mockWarn } = makeTestRig();\r\n\r\n mockKeybaord.dispose();\r\n\r\n expect(() => renderUC.clearCanvas()).not.toThrow();\r\n expect(mockWarn).not.toHaveBeenCalled();\r\n });\r\n\r\n it(\"Submits the canvas to the mouse input\", () => {\r\n const { mockMouse, renderUC } = makeTestRig();\r\n const renderCanvas = document.createElement(\"canvas\");\r\n\r\n renderUC.submitCanvas(renderCanvas);\r\n\r\n expect(mockMouse.setEventElement).toHaveBeenCalledWith(renderCanvas);\r\n });\r\n\r\n it(\"Skips the mouse input silently when it is absent and a canvas is submitted\", () => {\r\n const { mockMouse, renderUC, mockWarn } = makeTestRig();\r\n const renderCanvas = document.createElement(\"canvas\");\r\n mockMouse.dispose();\r\n\r\n expect(() => renderUC.submitCanvas(renderCanvas)).not.toThrow();\r\n expect(mockWarn).not.toHaveBeenCalled();\r\n });\r\n\r\n it(\"Clears the input element from mouse input\", () => {\r\n const { mockMouse, renderUC } = makeTestRig();\r\n\r\n renderUC.clearCanvas();\r\n\r\n expect(mockMouse.clearInputElement).toHaveBeenCalled();\r\n });\r\n\r\n it(\"Skips the mouse input silently when it is absent and a canvas is cleared\", () => {\r\n const { mockMouse, renderUC, mockWarn } = makeTestRig();\r\n\r\n mockMouse.dispose();\r\n\r\n expect(() => renderUC.clearCanvas()).not.toThrow();\r\n expect(mockWarn).not.toHaveBeenCalled();\r\n });\r\n\r\n it(\"Submits the canvas to the touch input\", () => {\r\n const { mockTouch, renderUC } = makeTestRig();\r\n const renderCanvas = document.createElement(\"canvas\");\r\n\r\n renderUC.submitCanvas(renderCanvas);\r\n\r\n expect(mockTouch.setEventElement).toHaveBeenCalledWith(renderCanvas);\r\n });\r\n\r\n it(\"Skips the touch input silently when it is absent and a canvas is submitted\", () => {\r\n const { mockTouch, renderUC, mockWarn } = makeTestRig();\r\n const renderCanvas = document.createElement(\"canvas\");\r\n mockTouch.dispose();\r\n\r\n expect(() => renderUC.submitCanvas(renderCanvas)).not.toThrow();\r\n expect(mockWarn).not.toHaveBeenCalled();\r\n });\r\n\r\n it(\"Clears the input element from touch input\", () => {\r\n const { mockTouch, renderUC } = makeTestRig();\r\n\r\n renderUC.clearCanvas();\r\n\r\n expect(mockTouch.clearInputElement).toHaveBeenCalled();\r\n });\r\n\r\n it(\"Skips the touch input silently when it is absent and a canvas is cleared\", () => {\r\n const { mockTouch, renderUC, mockWarn } = makeTestRig();\r\n\r\n mockTouch.dispose();\r\n\r\n expect(() => renderUC.clearCanvas()).not.toThrow();\r\n expect(mockWarn).not.toHaveBeenCalled();\r\n });\r\n\r\n it(\"Submits the canvas to the babylon rendering\", () => {\r\n const { mockBabylon, renderUC } = makeTestRig();\r\n const renderCanvas = document.createElement(\"canvas\");\r\n\r\n renderUC.submitCanvas(renderCanvas);\r\n\r\n expect(mockBabylon.submitRenderCanvas).toHaveBeenCalledWith(renderCanvas);\r\n });\r\n\r\n it(\"Warns if it can't find the babylon rendering when a canvas is submitted\", () => {\r\n const { mockBabylon, renderUC, mockWarn } = makeTestRig();\r\n const renderCanvas = document.createElement(\"canvas\");\r\n mockBabylon.dispose();\r\n renderUC.submitCanvas(renderCanvas);\r\n\r\n expect(mockWarn).toHaveBeenCalled();\r\n });\r\n\r\n it(\"Clears the input element from babylon rendering\", () => {\r\n const { mockBabylon, renderUC } = makeTestRig();\r\n\r\n renderUC.clearCanvas();\r\n\r\n expect(mockBabylon.clearRenderCanvas).toHaveBeenCalled();\r\n });\r\n\r\n it(\"Warns if it can't find the babylon rendering when a canvas is cleared\", () => {\r\n const { mockBabylon, renderUC, mockWarn } = makeTestRig();\r\n\r\n mockBabylon.dispose();\r\n renderUC.clearCanvas();\r\n\r\n expect(mockWarn).toHaveBeenCalled();\r\n });\r\n\r\n it(\"Gets the UC\", () => {\r\n const { renderUC, appObjects } = makeTestRig();\r\n\r\n expect(RenderCanvasUC.get(appObjects)).toEqual(renderUC);\r\n });\r\n\r\n it(\"Warns and returns undefined if there is no UC\", () => {\r\n const { renderUC, appObjects, mockWarn } = makeTestRig();\r\n renderUC.dispose();\r\n\r\n expect(RenderCanvasUC.get(appObjects)).toBeUndefined();\r\n expect(mockWarn).toHaveBeenCalled();\r\n });\r\n\r\n it(\"Warns if there are more than two UCs found\", () => {\r\n const { appObjects, mockWarn } = makeTestRig();\r\n const newAO = appObjects.getOrCreate(\"newAO\");\r\n\r\n makeRenderCanvasUC(newAO);\r\n\r\n expect(RenderCanvasUC.get(appObjects)).not.toBeUndefined();\r\n expect(mockWarn).toHaveBeenCalled();\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"RenderCanvasUC.test.js","sourceRoot":"","sources":["../../../../src/BaseApp/UC/RenderCanvasUC.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { makeAppObjectRepo } from \"@vived/core\";\nimport { makeRenderCanvasUC, RenderCanvasUC } from \"./RenderCanvasUC\";\nimport { MockKeyboardInput } from \"../../KeyboardInput/Mocks/MockKeyboardInput\";\nimport { MockMouseInput } from \"../../MouseInput/Mocks/MockMouseInput\";\nimport { MockTouchInputEntity } from \"../../TouchController/Mock/MockTouchInput\";\nimport { makeMockBabylonRenderingUC } from \"../../Babylon\";\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n const app = appObjects.getOrCreate(\"App\");\n const renderUC = makeRenderCanvasUC(app);\n const mockKeybaord = new MockKeyboardInput(app);\n const mockBabylon = makeMockBabylonRenderingUC(appObjects);\n const mockMouse = new MockMouseInput(app);\n const mockTouch = new MockTouchInputEntity(app);\n\n // Convert mouse input methods to jest mocks\n mockMouse.setEventElement = jest.fn();\n mockMouse.clearInputElement = jest.fn();\n\n // Convert babylon rendering methods to jest mocks\n mockBabylon.submitRenderCanvas = jest.fn();\n mockBabylon.clearRenderCanvas = jest.fn();\n\n const mockWarn = jest.fn();\n appObjects.submitWarning = mockWarn;\n\n return {\n appObjects,\n renderUC,\n mockBabylon,\n mockKeybaord,\n mockWarn,\n mockTouch,\n mockMouse,\n };\n}\n\ndescribe(\"Render Canvas UC\", () => {\n it(\"Submits the canvas to the keyboard input\", () => {\n const { mockKeybaord, renderUC } = makeTestRig();\n const renderCanvas = document.createElement(\"canvas\");\n\n renderUC.submitCanvas(renderCanvas);\n\n expect(mockKeybaord.setEventElement).toHaveBeenCalledWith(renderCanvas);\n });\n\n it(\"Skips the keyboard input silently when it is absent and a canvas is submitted\", () => {\n const { mockKeybaord, renderUC, mockWarn } = makeTestRig();\n const renderCanvas = document.createElement(\"canvas\");\n mockKeybaord.dispose();\n\n expect(() => renderUC.submitCanvas(renderCanvas)).not.toThrow();\n expect(mockWarn).not.toHaveBeenCalled();\n });\n\n it(\"Clears the input element from keyboard input\", () => {\n const { mockKeybaord, renderUC } = makeTestRig();\n\n renderUC.clearCanvas();\n\n expect(mockKeybaord.clearInputElement).toHaveBeenCalled();\n });\n\n it(\"Skips the keyboard input silently when it is absent and a canvas is cleared\", () => {\n const { mockKeybaord, renderUC, mockWarn } = makeTestRig();\n\n mockKeybaord.dispose();\n\n expect(() => renderUC.clearCanvas()).not.toThrow();\n expect(mockWarn).not.toHaveBeenCalled();\n });\n\n it(\"Submits the canvas to the mouse input\", () => {\n const { mockMouse, renderUC } = makeTestRig();\n const renderCanvas = document.createElement(\"canvas\");\n\n renderUC.submitCanvas(renderCanvas);\n\n expect(mockMouse.setEventElement).toHaveBeenCalledWith(renderCanvas);\n });\n\n it(\"Skips the mouse input silently when it is absent and a canvas is submitted\", () => {\n const { mockMouse, renderUC, mockWarn } = makeTestRig();\n const renderCanvas = document.createElement(\"canvas\");\n mockMouse.dispose();\n\n expect(() => renderUC.submitCanvas(renderCanvas)).not.toThrow();\n expect(mockWarn).not.toHaveBeenCalled();\n });\n\n it(\"Clears the input element from mouse input\", () => {\n const { mockMouse, renderUC } = makeTestRig();\n\n renderUC.clearCanvas();\n\n expect(mockMouse.clearInputElement).toHaveBeenCalled();\n });\n\n it(\"Skips the mouse input silently when it is absent and a canvas is cleared\", () => {\n const { mockMouse, renderUC, mockWarn } = makeTestRig();\n\n mockMouse.dispose();\n\n expect(() => renderUC.clearCanvas()).not.toThrow();\n expect(mockWarn).not.toHaveBeenCalled();\n });\n\n it(\"Submits the canvas to the touch input\", () => {\n const { mockTouch, renderUC } = makeTestRig();\n const renderCanvas = document.createElement(\"canvas\");\n\n renderUC.submitCanvas(renderCanvas);\n\n expect(mockTouch.setEventElement).toHaveBeenCalledWith(renderCanvas);\n });\n\n it(\"Skips the touch input silently when it is absent and a canvas is submitted\", () => {\n const { mockTouch, renderUC, mockWarn } = makeTestRig();\n const renderCanvas = document.createElement(\"canvas\");\n mockTouch.dispose();\n\n expect(() => renderUC.submitCanvas(renderCanvas)).not.toThrow();\n expect(mockWarn).not.toHaveBeenCalled();\n });\n\n it(\"Clears the input element from touch input\", () => {\n const { mockTouch, renderUC } = makeTestRig();\n\n renderUC.clearCanvas();\n\n expect(mockTouch.clearInputElement).toHaveBeenCalled();\n });\n\n it(\"Skips the touch input silently when it is absent and a canvas is cleared\", () => {\n const { mockTouch, renderUC, mockWarn } = makeTestRig();\n\n mockTouch.dispose();\n\n expect(() => renderUC.clearCanvas()).not.toThrow();\n expect(mockWarn).not.toHaveBeenCalled();\n });\n\n it(\"Submits the canvas to the babylon rendering\", () => {\n const { mockBabylon, renderUC } = makeTestRig();\n const renderCanvas = document.createElement(\"canvas\");\n\n renderUC.submitCanvas(renderCanvas);\n\n expect(mockBabylon.submitRenderCanvas).toHaveBeenCalledWith(renderCanvas);\n });\n\n it(\"Warns if it can't find the babylon rendering when a canvas is submitted\", () => {\n const { mockBabylon, renderUC, mockWarn } = makeTestRig();\n const renderCanvas = document.createElement(\"canvas\");\n mockBabylon.dispose();\n renderUC.submitCanvas(renderCanvas);\n\n expect(mockWarn).toHaveBeenCalled();\n });\n\n it(\"Clears the input element from babylon rendering\", () => {\n const { mockBabylon, renderUC } = makeTestRig();\n\n renderUC.clearCanvas();\n\n expect(mockBabylon.clearRenderCanvas).toHaveBeenCalled();\n });\n\n it(\"Warns if it can't find the babylon rendering when a canvas is cleared\", () => {\n const { mockBabylon, renderUC, mockWarn } = makeTestRig();\n\n mockBabylon.dispose();\n renderUC.clearCanvas();\n\n expect(mockWarn).toHaveBeenCalled();\n });\n\n it(\"Gets the UC\", () => {\n const { renderUC, appObjects } = makeTestRig();\n\n expect(RenderCanvasUC.get(appObjects)).toEqual(renderUC);\n });\n\n it(\"Warns and returns undefined if there is no UC\", () => {\n const { renderUC, appObjects, mockWarn } = makeTestRig();\n renderUC.dispose();\n\n expect(RenderCanvasUC.get(appObjects)).toBeUndefined();\n expect(mockWarn).toHaveBeenCalled();\n });\n\n it(\"Warns if there are more than two UCs found\", () => {\n const { appObjects, mockWarn } = makeTestRig();\n const newAO = appObjects.getOrCreate(\"newAO\");\n\n makeRenderCanvasUC(newAO);\n\n expect(RenderCanvasUC.get(appObjects)).not.toBeUndefined();\n expect(mockWarn).toHaveBeenCalled();\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChallengeFeatureFactory.js","sourceRoot":"","sources":["../../../../src/Challenge/Factories/ChallengeFeatureFactory.ts"],"names":[],"mappings":";;;AAmGA,kEAKC;AAxGD,sCAAsE;AACtE,0CAAkD;AAClD,gCAIgB;AAChB,gCAKgB;AAEhB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAa,uBAAwB,SAAQ,oBAAa;IAA1D;;QACE,gBAAW,GAAG,yBAAyB,CAAC;IAqD1C,CAAC;IAnDC;;;;;OAKG;IACH,aAAa;QACX,IAAA,8BAAmB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED;;;;;;;;OAQG;IACH,QAAQ;QACN,yEAAyE;QACzE,IAAI,0BAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAA,wBAAkB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnC,IAAA,6BAAuB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,IAAA,6BAAuB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;OAMG;IACH,QAAQ;QACN,MAAM;QACN,IAAA,+BAAyB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAA,iCAA2B,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAA,6BAAuB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;OAMG;IACH,UAAU;QACR,uDAAuD;IACzD,CAAC;CACF;AAtDD,0DAsDC;AAED;;;;;;;;GAQG;AACH,SAAgB,2BAA2B,CACzC,aAA4B;IAE5B,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACzD,OAAO,IAAI,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAChD,CAAC","sourcesContent":["import { DomainFactory, AppObject, AppObjectRepo } from \"@vived/core\";\
|
|
1
|
+
{"version":3,"file":"ChallengeFeatureFactory.js","sourceRoot":"","sources":["../../../../src/Challenge/Factories/ChallengeFeatureFactory.ts"],"names":[],"mappings":";;;AAmGA,kEAKC;AAxGD,sCAAsE;AACtE,0CAAkD;AAClD,gCAIgB;AAChB,gCAKgB;AAEhB;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAa,uBAAwB,SAAQ,oBAAa;IAA1D;;QACE,gBAAW,GAAG,yBAAyB,CAAC;IAqD1C,CAAC;IAnDC;;;;;OAKG;IACH,aAAa;QACX,IAAA,8BAAmB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,CAAC;IAED;;;;;;;;OAQG;IACH,QAAQ;QACN,yEAAyE;QACzE,IAAI,0BAAoB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACzC,IAAA,wBAAkB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACnC,IAAA,6BAAuB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACxC,IAAA,6BAAuB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;OAMG;IACH,QAAQ;QACN,MAAM;QACN,IAAA,+BAAyB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC1C,IAAA,iCAA2B,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QAC5C,IAAA,6BAAuB,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED;;;;;;OAMG;IACH,UAAU;QACR,uDAAuD;IACzD,CAAC;CACF;AAtDD,0DAsDC;AAED;;;;;;;;GAQG;AACH,SAAgB,2BAA2B,CACzC,aAA4B;IAE5B,MAAM,SAAS,GAAG,aAAa,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;IACzD,OAAO,IAAI,uBAAuB,CAAC,SAAS,CAAC,CAAC;AAChD,CAAC","sourcesContent":["import { DomainFactory, AppObject, AppObjectRepo } from \"@vived/core\";\nimport { makeChallengeEntity } from \"../Entities\";\nimport {\n makeChallengeAuthorHelpPM,\n makeChallengeConsumerHelpPM,\n makeSelectedChallengePM,\n} from \"../PMs\";\nimport {\n makeSetChallengeUC,\n makeShowChallengeHelpUC,\n makeTryChallengeAgainUC,\n SerializeChallengeUC,\n} from \"../UCs\";\n\n/**\n * Factory responsible for setting up the Challenge Feature domain components.\n *\n * This factory initializes all entities, use cases, and presentation models\n * required for the Challenge Feature functionality. It follows the domain-driven\n * design pattern by organizing components into their respective layers.\n *\n * The factory creates:\n * - 1 Entity: Challenge entity for managing challenge state and registration\n * - 4 Use Cases: SerializeChallengeUC (class constructor), makeSetChallengeUC,\n * makeShowChallengeHelpUC, makeTryChallengeAgainUC (factory functions)\n * - 3 Presentation Models: makeChallengeAuthorHelpPM, makeChallengeConsumerHelpPM,\n * makeSelectedChallengePM\n *\n * Challenge kinds are not registered here. Each kind self-registers with the\n * Challenge entity from its own feature factory, so a composition that declines\n * a kind simply never registers it.\n *\n * @extends DomainFactory\n */\nexport class ChallengeFeatureFactory extends DomainFactory {\n factoryName = \"ChallengeFeatureFactory\";\n\n /**\n * Sets up all entities required for the Challenge Feature.\n *\n * Initializes the Challenge entity that maintains the state and business\n * logic for challenge functionality and challenge registration.\n */\n setupEntities(): void {\n makeChallengeEntity(this.appObject);\n }\n\n /**\n * Sets up all use cases for the Challenge Feature.\n *\n * Initializes use cases that define the business operations and\n * workflows available in the challenge feature. This includes both\n * class constructor patterns (SerializeChallengeUC) and factory\n * function patterns (makeSetChallengeUC, makeShowChallengeHelpUC,\n * makeTryChallengeAgainUC).\n */\n setupUCs(): void {\n // UCs - mixed creation patterns (class constructor vs factory functions)\n new SerializeChallengeUC(this.appObject);\n makeSetChallengeUC(this.appObject);\n makeShowChallengeHelpUC(this.appObject);\n makeTryChallengeAgainUC(this.appObject);\n }\n\n /**\n * Sets up all presentation models for the Challenge Feature.\n *\n * Initializes presentation models that handle the view logic and\n * state management for UI components related to challenge help and\n * selection functionality.\n */\n setupPMs(): void {\n // PMs\n makeChallengeAuthorHelpPM(this.appObject);\n makeChallengeConsumerHelpPM(this.appObject);\n makeSelectedChallengePM(this.appObject);\n }\n\n /**\n * Performs final setup operations after all components are initialized.\n *\n * Nothing to do. Challenge kinds register themselves with the Challenge\n * entity from their own feature factories, so this factory has no external\n * wiring left to perform. Required by DomainFactory.\n */\n finalSetup(): void {\n // Intentionally empty - challenge kinds self-register.\n }\n}\n\n/**\n * Factory function to create a new ChallengeFeatureFactory\n *\n * Creates and returns a new instance of ChallengeFeatureFactory that can be\n * used to set up all Challenge Feature domain components.\n *\n * @param appObjectRepo The AppObjectRepo to create the Challenge AppObject from\n * @returns A new ChallengeFeatureFactory instance\n */\nexport function makeChallengeFeatureFactory(\n appObjectRepo: AppObjectRepo,\n): ChallengeFeatureFactory {\n const appObject = appObjectRepo.getOrCreate(\"Challenge\");\n return new ChallengeFeatureFactory(appObject);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ChallengeFeatureFactory.test.js","sourceRoot":"","sources":["../../../../src/Challenge/Factories/ChallengeFeatureFactory.test.ts"],"names":[],"mappings":";;AAAA,sCAIqB;AACrB,oEAAqE;AACrE,iDAAwD;AACxD,qDAA4D;AAC5D,iEAA8D;AAC9D,uEAGmC;AAEnC,SAAS,YAAY,CAAC,UAAyB;IAC7C,MAAM,OAAO,GAAG,IAAA,qDAA2B,EAAC,UAAU,CAAC,CAAC;IACxD,OAAO,CAAC,aAAa,EAAE,CAAC;IACxB,OAAO,CAAC,QAAQ,EAAE,CAAC;IACnB,OAAO,CAAC,QAAQ,EAAE,CAAC;IACnB,OAAO,CAAC,UAAU,EAAE,CAAC;IACrB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,WAAW;IAClB,MAAM,UAAU,GAAG,IAAA,wBAAiB,GAAE,CAAC;IAEvC,0DAA0D;IAC1D,IAAI,wBAAiB,CAAC,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;IAE/D,0EAA0E;IAC1E,yEAAyE;IACzE,IAAA,+BAAgB,EAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;IACpD,IAAA,qCAAsB,EAAC,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;IAE/D,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAC3B,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC;IACnC,UAAU,CAAC,aAAa,GAAG,QAAQ,CAAC;IAEpC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAC7C,CAAC;AAED,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAErC,YAAY,CAAC,UAAU,CAAC,CAAC;QAEzB,MAAM,CAAC,iCAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;QAE1D,YAAY,CAAC,UAAU,CAAC,CAAC;QAEzB,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACzC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,IAAA,iCAAoB,EACrC,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CACrC,CAAC;QAEF,YAAY,CAAC,UAAU,CAAC,CAAC;QAEzB,MAAM,UAAU,GAAG,iCAAe,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC,aAAa,CAAC,GAAG,CACnE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,CACrC,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import {\
|
|
1
|
+
{"version":3,"file":"ChallengeFeatureFactory.test.js","sourceRoot":"","sources":["../../../../src/Challenge/Factories/ChallengeFeatureFactory.test.ts"],"names":[],"mappings":";;AAAA,sCAIqB;AACrB,oEAAqE;AACrE,iDAAwD;AACxD,qDAA4D;AAC5D,iEAA8D;AAC9D,uEAGmC;AAEnC,SAAS,YAAY,CAAC,UAAyB;IAC7C,MAAM,OAAO,GAAG,IAAA,qDAA2B,EAAC,UAAU,CAAC,CAAC;IACxD,OAAO,CAAC,aAAa,EAAE,CAAC;IACxB,OAAO,CAAC,QAAQ,EAAE,CAAC;IACnB,OAAO,CAAC,QAAQ,EAAE,CAAC;IACnB,OAAO,CAAC,UAAU,EAAE,CAAC;IACrB,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,SAAS,WAAW;IAClB,MAAM,UAAU,GAAG,IAAA,wBAAiB,GAAE,CAAC;IAEvC,0DAA0D;IAC1D,IAAI,wBAAiB,CAAC,UAAU,CAAC,WAAW,CAAC,eAAe,CAAC,CAAC,CAAC;IAE/D,0EAA0E;IAC1E,yEAAyE;IACzE,IAAA,+BAAgB,EAAC,UAAU,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;IACpD,IAAA,qCAAsB,EAAC,UAAU,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC,CAAC;IAE/D,MAAM,SAAS,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,EAAE,EAAE,CAAC;IAC3B,UAAU,CAAC,WAAW,GAAG,SAAS,CAAC;IACnC,UAAU,CAAC,aAAa,GAAG,QAAQ,CAAC;IAEpC,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC;AAC7C,CAAC;AAED,QAAQ,CAAC,2BAA2B,EAAE,GAAG,EAAE;IACzC,EAAE,CAAC,8BAA8B,EAAE,GAAG,EAAE;QACtC,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QAErC,YAAY,CAAC,UAAU,CAAC,CAAC;QAEzB,MAAM,CAAC,iCAAe,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;IACxD,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,6DAA6D,EAAE,GAAG,EAAE;QACrE,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,WAAW,EAAE,CAAC;QAE1D,YAAY,CAAC,UAAU,CAAC,CAAC;QAEzB,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;QACzC,MAAM,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC;IAC1C,CAAC,CAAC,CAAC;IAEH,EAAE,CAAC,gEAAgE,EAAE,GAAG,EAAE;QACxE,MAAM,EAAE,UAAU,EAAE,GAAG,WAAW,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,IAAA,iCAAoB,EACrC,UAAU,CAAC,WAAW,CAAC,YAAY,CAAC,CACrC,CAAC;QAEF,YAAY,CAAC,UAAU,CAAC,CAAC;QAEzB,MAAM,UAAU,GAAG,iCAAe,CAAC,GAAG,CAAC,UAAU,CAAE,CAAC,aAAa,CAAC,GAAG,CACnE,CAAC,SAAS,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,CACrC,CAAC;QACF,MAAM,CAAC,UAAU,CAAC,CAAC,GAAG,CAAC,SAAS,CAAC,UAAU,CAAC,WAAW,CAAC,CAAC;IAC3D,CAAC,CAAC,CAAC;AACL,CAAC,CAAC,CAAC","sourcesContent":["import {\n AppObjectRepo,\n DomainFactoryRepo,\n makeAppObjectRepo,\n} from \"@vived/core\";\nimport { makeBaseAppState } from \"../../BaseApp/Entity/BaseAppState\";\nimport { makeObjectPickEntity } from \"../../ObjectPick\";\nimport { makeStateMachineEntity } from \"../../StateMachine\";\nimport { ChallengeEntity } from \"../Entities/ChallengeEntity\";\nimport {\n ChallengeFeatureFactory,\n makeChallengeFeatureFactory,\n} from \"./ChallengeFeatureFactory\";\n\nfunction setupFeature(appObjects: AppObjectRepo): ChallengeFeatureFactory {\n const factory = makeChallengeFeatureFactory(appObjects);\n factory.setupEntities();\n factory.setupUCs();\n factory.setupPMs();\n factory.finalSetup();\n return factory;\n}\n\nfunction makeTestRig() {\n const appObjects = makeAppObjectRepo();\n\n // DomainFactory auto-registers with this on construction.\n new DomainFactoryRepo(appObjects.getOrCreate(\"DomainFactory\"));\n\n // Boundary singletons the Challenge feature genuinely needs: the PMs read\n // BaseAppState and SerializeChallengeUC registers with the StateMachine.\n makeBaseAppState(appObjects.getOrCreate(\"BaseApp\"));\n makeStateMachineEntity(appObjects.getOrCreate(\"StateMachine\"));\n\n const mockError = jest.fn();\n const mockWarn = jest.fn();\n appObjects.submitError = mockError;\n appObjects.submitWarning = mockWarn;\n\n return { appObjects, mockError, mockWarn };\n}\n\ndescribe(\"Challenge Feature Factory\", () => {\n it(\"Creates the Challenge entity\", () => {\n const { appObjects } = makeTestRig();\n\n setupFeature(appObjects);\n\n expect(ChallengeEntity.get(appObjects)).toBeDefined();\n });\n\n it(\"Wires without complaint when no challenge kinds are present\", () => {\n const { appObjects, mockError, mockWarn } = makeTestRig();\n\n setupFeature(appObjects);\n\n expect(mockError).not.toHaveBeenCalled();\n expect(mockWarn).not.toHaveBeenCalled();\n });\n\n it(\"Registers no challenge kinds itself - each kind self-registers\", () => {\n const { appObjects } = makeTestRig();\n const objectPick = makeObjectPickEntity(\n appObjects.getOrCreate(\"ObjectPick\"),\n );\n\n setupFeature(appObjects);\n\n const registered = ChallengeEntity.get(appObjects)!.allChallenges.map(\n (challenge) => challenge.challengeID,\n );\n expect(registered).not.toContain(objectPick.challengeID);\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventEntity.js","sourceRoot":"","sources":["../../../../src/EventSystem/Entities/EventEntity.ts"],"names":[],"mappings":";;;AAyDA,0CAEC;AA3DD,sCAMqB;AAOrB;;;GAGG;AACH,MAAsB,WAAY,SAAQ,sBAAe;;AAAzD,kCAsCC;AArCiB,gBAAI,GAAG,aAAa,CAAC;AAmC9B,eAAG,GAAG,CAAC,UAAyB,EAA2B,EAAE,CAClE,IAAA,4BAAqB,EAAC,WAAW,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;AAGxD,SAAgB,eAAe,CAAC,SAAoB;IAClD,OAAO,IAAI,cAAc,CAAC,SAAS,CAAC,CAAC;AACvC,CAAC;AAED,MAAM,cAAe,SAAQ,WAAW;IAMtC,QAAQ,
|
|
1
|
+
{"version":3,"file":"EventEntity.js","sourceRoot":"","sources":["../../../../src/EventSystem/Entities/EventEntity.ts"],"names":[],"mappings":"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","sourcesContent":["import {\n AppObject,\n AppObjectEntity,\n AppObjectRepo,\n getSingletonComponent,\n MemoizedString,\n} from \"@vived/core\";\nimport {\n EventCategory,\n EventDefinition,\n EventRegistrationOptions,\n} from \"../types\";\n\n/**\n * EventEntity represents a global singleton for event registration and logging.\n * Only one instance exists in the application.\n */\nexport abstract class EventEntity extends AppObjectEntity {\n static readonly type = \"EventEntity\";\n\n /**\n * Register an event. `options.category` classifies it for scoring\n * (`\"assessed\"` by default, or `\"instructional\"` for quiz-neutral guidance);\n * see `EventCategory`. The two-argument form is unchanged.\n */\n abstract register(\n id: string,\n name: string,\n options?: EventRegistrationOptions,\n ): void;\n abstract emit(id: string): void;\n abstract reset(): void;\n abstract getRegisteredEvents(): EventDefinition[];\n abstract getEmittedEvents(): string[];\n abstract getLastEmittedId(): string | null;\n\n /**\n * The category an event was registered with. Unregistered ids and\n * registrations that omitted the option are `\"assessed\"`, so every legacy\n * consumer is classified exactly as before categories existed.\n */\n abstract getEventCategory(id: string): EventCategory;\n\n /**\n * Register a callback that is invoked on every emission, with the emitted\n * event ID. Unlike addChangeObserver, this fires for every emit() call —\n * including consecutive emissions of the same event ID.\n */\n abstract addEmissionListener(callback: (eventId: string) => void): void;\n\n /** Remove a previously registered emission listener. */\n abstract removeEmissionListener(callback: (eventId: string) => void): void;\n\n static get = (appObjects: AppObjectRepo): EventEntity | undefined =>\n getSingletonComponent(EventEntity.type, appObjects);\n}\n\nexport function makeEventEntity(appObject: AppObject): EventEntity {\n return new EventEntityImp(appObject);\n}\n\nclass EventEntityImp extends EventEntity {\n private eventRegistry = new Map<string, EventDefinition>();\n private eventLog: string[] = [];\n private memoizedLastEmittedId = new MemoizedString(\"\", this.notifyOnChange);\n private emissionListeners = new Set<(eventId: string) => void>();\n\n register(id: string, name: string, options?: EventRegistrationOptions): void {\n if (this.eventRegistry.has(id)) {\n this.appObjects.submitWarning(\n \"EventEntity\",\n `Event with id '${id}' is already registered`,\n );\n return;\n }\n\n // Store the category only when the caller passed one, so the definitions\n // handed to existing consumers (e.g. a Procedure's availableEvents) stay\n // byte-identical; getEventCategory normalizes the default.\n const definition: EventDefinition = { id, name };\n if (options?.category) {\n definition.category = options.category;\n }\n\n this.eventRegistry.set(id, definition);\n this.notifyOnChange();\n }\n\n getEventCategory(id: string): EventCategory {\n return this.eventRegistry.get(id)?.category ?? \"assessed\";\n }\n\n emit(id: string): void {\n if (!this.eventRegistry.has(id)) {\n this.appObjects.submitWarning(\n \"EventEntity\",\n `Cannot emit unknown event with id '${id}'`,\n );\n return;\n }\n\n this.eventLog.push(id);\n this.memoizedLastEmittedId.val = id;\n\n for (const listener of this.emissionListeners) {\n listener(id);\n }\n }\n\n reset(): void {\n this.eventLog = [];\n this.memoizedLastEmittedId.val = \"\";\n }\n\n getRegisteredEvents(): EventDefinition[] {\n return Array.from(this.eventRegistry.values());\n }\n\n getEmittedEvents(): string[] {\n return [...this.eventLog];\n }\n\n getLastEmittedId(): string | null {\n const lastId = this.memoizedLastEmittedId.val;\n return lastId === \"\" ? null : lastId;\n }\n\n addEmissionListener(callback: (eventId: string) => void): void {\n this.emissionListeners.add(callback);\n }\n\n removeEmissionListener(callback: (eventId: string) => void): void {\n this.emissionListeners.delete(callback);\n }\n\n constructor(appObject: AppObject) {\n super(appObject, EventEntity.type);\n this.appObjects.registerSingleton(this);\n }\n}\n"]}
|
|
@@ -206,7 +206,10 @@ describe("EventEntity", () => {
|
|
|
206
206
|
{ id: "lever", name: "Pull lever" },
|
|
207
207
|
{ id: "valve", name: "Open valve" },
|
|
208
208
|
]);
|
|
209
|
-
expect(Object.keys(entity.getRegisteredEvents()[0])).toEqual([
|
|
209
|
+
expect(Object.keys(entity.getRegisteredEvents()[0])).toEqual([
|
|
210
|
+
"id",
|
|
211
|
+
"name",
|
|
212
|
+
]);
|
|
210
213
|
expect(entity.getEventCategory("lever")).toBe("assessed");
|
|
211
214
|
expect(entity.getEventCategory("valve")).toBe("assessed");
|
|
212
215
|
});
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventEntity.test.js","sourceRoot":"","sources":["../../../../src/EventSystem/Entities/EventEntity.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\r\nimport { EventEntity, makeEventEntity } from \"./EventEntity\";\r\n\r\ndescribe(\"EventEntity\", () => {\r\n let appObjects: AppObjectRepo;\r\n let entity: EventEntity;\r\n let registerSingletonSpy: jest.SpyInstance;\r\n let submitWarningSpy: jest.SpyInstance;\r\n\r\n beforeEach(() => {\r\n appObjects = makeAppObjectRepo();\r\n registerSingletonSpy = jest.spyOn(appObjects, \"registerSingleton\");\r\n submitWarningSpy = jest.spyOn(appObjects, \"submitWarning\");\r\n\r\n entity = makeEventEntity(appObjects.getOrCreate(\"test-entity\"));\r\n });\r\n\r\n it(\"registers itself as a singleton\", () => {\r\n expect(registerSingletonSpy).toHaveBeenCalledWith(entity);\r\n });\r\n\r\n it(\"should be accessible through the static getter\", () => {\r\n appObjects.getOrCreate(\"another-object\");\r\n const retrievedEntity = EventEntity.get(appObjects);\r\n expect(retrievedEntity).toBe(entity);\r\n });\r\n\r\n it(\"registers new events successfully\", () => {\r\n entity.register(\"button_click\", \"Button Click Event\");\r\n\r\n const registeredEvents = entity.getRegisteredEvents();\r\n expect(registeredEvents).toHaveLength(1);\r\n expect(registeredEvents[0]).toEqual({\r\n id: \"button_click\",\r\n name: \"Button Click Event\",\r\n });\r\n });\r\n\r\n it(\"should register multiple events\", () => {\r\n entity.register(\"button_click\", \"Button Click Event\");\r\n entity.register(\"page_load\", \"Page Load Event\");\r\n\r\n const registeredEvents = entity.getRegisteredEvents();\r\n expect(registeredEvents).toHaveLength(2);\r\n\r\n const eventIds = registeredEvents.map((e) => e.id);\r\n expect(eventIds).toContain(\"button_click\");\r\n expect(eventIds).toContain(\"page_load\");\r\n });\r\n\r\n it(\"should warn on duplicate registration\", () => {\r\n entity.register(\"button_click\", \"Button Click Event\");\r\n entity.register(\"button_click\", \"Another Button Click\");\r\n\r\n expect(submitWarningSpy).toHaveBeenCalledWith(\r\n \"EventEntity\",\r\n \"Event with id 'button_click' is already registered\",\r\n );\r\n\r\n const registeredEvents = entity.getRegisteredEvents();\r\n expect(registeredEvents).toHaveLength(1);\r\n });\r\n\r\n it(\"emits known events successfully\", () => {\r\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\r\n entity.register(\"manual_step\", \"Manual Step\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n\r\n const emittedEvents = entity.getEmittedEvents();\r\n expect(emittedEvents).toEqual([\"auto_cycle_clicked\"]);\r\n expect(entity.getLastEmittedId()).toBe(\"auto_cycle_clicked\");\r\n });\r\n\r\n it(\"maintains chronological order of emissions\", () => {\r\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\r\n entity.register(\"manual_step\", \"Manual Step\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n entity.emit(\"manual_step\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n\r\n const emittedEvents = entity.getEmittedEvents();\r\n expect(emittedEvents).toEqual([\r\n \"auto_cycle_clicked\",\r\n \"manual_step\",\r\n \"auto_cycle_clicked\",\r\n ]);\r\n expect(entity.getLastEmittedId()).toBe(\"auto_cycle_clicked\");\r\n });\r\n\r\n it(\"allows duplicate emissions\", () => {\r\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\r\n entity.register(\"manual_step\", \"Manual Step\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n entity.emit(\"auto_cycle_clicked\");\r\n\r\n const emittedEvents = entity.getEmittedEvents();\r\n expect(emittedEvents).toHaveLength(3);\r\n expect(\r\n emittedEvents.every((id) => id === \"auto_cycle_clicked\"),\r\n ).toBe(true);\r\n });\r\n\r\n it(\"warns and ignores unknown event emissions\", () => {\r\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\r\n entity.register(\"manual_step\", \"Manual Step\");\r\n entity.emit(\"unknown_event\");\r\n\r\n expect(submitWarningSpy).toHaveBeenCalledWith(\r\n \"EventEntity\",\r\n \"Cannot emit unknown event with id 'unknown_event'\",\r\n );\r\n\r\n const emittedEvents = entity.getEmittedEvents();\r\n expect(emittedEvents).toHaveLength(0);\r\n expect(entity.getLastEmittedId()).toBeNull();\r\n });\r\n\r\n it(\"allows late registration after emission attempt\", () => {\r\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\r\n entity.register(\"manual_step\", \"Manual Step\");\r\n entity.emit(\"late_event\");\r\n expect(submitWarningSpy).toHaveBeenCalled();\r\n\r\n entity.register(\"late_event\", \"Late Event\");\r\n\r\n entity.emit(\"late_event\");\r\n const emittedEvents = entity.getEmittedEvents();\r\n expect(emittedEvents).toEqual([\"late_event\"]);\r\n });\r\n\r\n it(\"clears event log while preserving registry after reset\", () => {\r\n entity.register(\"event1\", \"Event One\");\r\n entity.register(\"event2\", \"Event Two\");\r\n entity.emit(\"event1\");\r\n entity.emit(\"event2\");\r\n entity.emit(\"event1\");\r\n expect(entity.getEmittedEvents()).toHaveLength(3);\r\n expect(entity.getLastEmittedId()).toBe(\"event1\");\r\n\r\n entity.reset();\r\n\r\n expect(entity.getEmittedEvents()).toHaveLength(0);\r\n expect(entity.getLastEmittedId()).toBeNull();\r\n\r\n const registeredEvents = entity.getRegisteredEvents();\r\n expect(registeredEvents).toHaveLength(2);\r\n expect(registeredEvents.map((e) => e.id)).toContain(\"event1\");\r\n expect(registeredEvents.map((e) => e.id)).toContain(\"event2\");\r\n });\r\n\r\n it(\"allows emissions after reset\", () => {\r\n entity.register(\"event1\", \"Event One\");\r\n entity.register(\"event2\", \"Event Two\");\r\n entity.emit(\"event1\");\r\n entity.emit(\"event2\");\r\n entity.emit(\"event1\");\r\n entity.reset();\r\n\r\n entity.emit(\"event1\");\r\n expect(entity.getEmittedEvents()).toEqual([\"event1\"]);\r\n expect(entity.getLastEmittedId()).toBe(\"event1\");\r\n });\r\n\r\n it(\"notifies observers when events are emitted\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n const mockObserver = jest.fn();\r\n entity.addChangeObserver(mockObserver);\r\n\r\n entity.emit(\"test_event\");\r\n\r\n expect(mockObserver).toHaveBeenCalledTimes(1);\r\n });\r\n\r\n it(\"notifies observers on reset\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n entity.emit(\"test_event\");\r\n\r\n const mockObserver = jest.fn();\r\n entity.addChangeObserver(mockObserver);\r\n\r\n entity.reset();\r\n\r\n expect(mockObserver).toHaveBeenCalledTimes(1);\r\n });\r\n\r\n it(\"does not notify observers for unknown event emissions\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n const mockObserver = jest.fn();\r\n entity.addChangeObserver(mockObserver);\r\n\r\n entity.emit(\"unknown_event\");\r\n\r\n expect(mockObserver).not.toHaveBeenCalled();\r\n });\r\n\r\n it(\"fires emission listener on every emit\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n const listener = jest.fn();\r\n entity.addEmissionListener(listener);\r\n\r\n entity.emit(\"test_event\");\r\n entity.emit(\"test_event\");\r\n\r\n expect(listener).toHaveBeenCalledTimes(2);\r\n expect(listener).toHaveBeenCalledWith(\"test_event\");\r\n });\r\n\r\n it(\"does not fire emission listener for unknown events\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n const listener = jest.fn();\r\n entity.addEmissionListener(listener);\r\n\r\n entity.emit(\"unknown_event\");\r\n\r\n expect(listener).not.toHaveBeenCalled();\r\n });\r\n\r\n it(\"allows removing emission listeners\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n const listener = jest.fn();\r\n entity.addEmissionListener(listener);\r\n\r\n entity.emit(\"test_event\");\r\n expect(listener).toHaveBeenCalledTimes(1);\r\n\r\n entity.removeEmissionListener(listener);\r\n entity.emit(\"test_event\");\r\n expect(listener).toHaveBeenCalledTimes(1);\r\n });\r\n\r\n it(\"returns empty arrays and null initially\", () => {\r\n expect(entity.getRegisteredEvents()).toEqual([]);\r\n expect(entity.getEmittedEvents()).toEqual([]);\r\n expect(entity.getLastEmittedId()).toBeNull();\r\n });\r\n\r\n it(\"returns copies of arrays to prevent external mutation\", () => {\r\n entity.register(\"test_event\", \"Test Event\");\r\n entity.emit(\"test_event\");\r\n\r\n const registeredEvents = entity.getRegisteredEvents();\r\n const emittedEvents = entity.getEmittedEvents();\r\n\r\n registeredEvents.push({ id: \"fake\", name: \"Fake\" });\r\n emittedEvents.push(\"fake_emission\");\r\n\r\n expect(entity.getRegisteredEvents()).toHaveLength(1);\r\n expect(entity.getEmittedEvents()).toHaveLength(1);\r\n });\r\n\r\n describe(\"event categories (#53)\", () => {\r\n it(\"stores an explicit category on the definition\", () => {\r\n entity.register(\"navigate-to-overhead\", \"Go to overhead\", {\r\n category: \"instructional\",\r\n });\r\n\r\n expect(entity.getRegisteredEvents()[0]).toEqual({\r\n id: \"navigate-to-overhead\",\r\n name: \"Go to overhead\",\r\n category: \"instructional\",\r\n });\r\n expect(entity.getEventCategory(\"navigate-to-overhead\")).toBe(\r\n \"instructional\",\r\n );\r\n });\r\n\r\n it(\"defaults an omitted category to assessed without adding a key to the definition\", () => {\r\n entity.register(\"lever\", \"Pull lever\");\r\n entity.register(\"valve\", \"Open valve\", {});\r\n\r\n expect(entity.getRegisteredEvents()).toEqual([\r\n { id: \"lever\", name: \"Pull lever\" },\r\n { id: \"valve\", name: \"Open valve\" },\r\n ]);\r\n expect(Object.keys(entity.getRegisteredEvents()[0])).toEqual([\"id\", \"name\"]);\r\n expect(entity.getEventCategory(\"lever\")).toBe(\"assessed\");\r\n expect(entity.getEventCategory(\"valve\")).toBe(\"assessed\");\r\n });\r\n\r\n it(\"treats an unregistered id as assessed\", () => {\r\n expect(entity.getEventCategory(\"legacy-step\")).toBe(\"assessed\");\r\n });\r\n\r\n it(\"keeps the first registration's category on a duplicate registration\", () => {\r\n entity.register(\"lever\", \"Pull lever\");\r\n entity.register(\"lever\", \"Pull lever again\", {\r\n category: \"instructional\",\r\n });\r\n\r\n expect(entity.getEventCategory(\"lever\")).toBe(\"assessed\");\r\n });\r\n\r\n it(\"emits an instructional event exactly like an assessed one\", () => {\r\n entity.register(\"navigate-to-overhead\", \"Go to overhead\", {\r\n category: \"instructional\",\r\n });\r\n const listener = jest.fn();\r\n entity.addEmissionListener(listener);\r\n\r\n entity.emit(\"navigate-to-overhead\");\r\n\r\n expect(listener).toHaveBeenCalledWith(\"navigate-to-overhead\");\r\n expect(entity.getEmittedEvents()).toEqual([\"navigate-to-overhead\"]);\r\n expect(entity.getLastEmittedId()).toBe(\"navigate-to-overhead\");\r\n });\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"EventEntity.test.js","sourceRoot":"","sources":["../../../../src/EventSystem/Entities/EventEntity.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\nimport { EventEntity, makeEventEntity } from \"./EventEntity\";\n\ndescribe(\"EventEntity\", () => {\n let appObjects: AppObjectRepo;\n let entity: EventEntity;\n let registerSingletonSpy: jest.SpyInstance;\n let submitWarningSpy: jest.SpyInstance;\n\n beforeEach(() => {\n appObjects = makeAppObjectRepo();\n registerSingletonSpy = jest.spyOn(appObjects, \"registerSingleton\");\n submitWarningSpy = jest.spyOn(appObjects, \"submitWarning\");\n\n entity = makeEventEntity(appObjects.getOrCreate(\"test-entity\"));\n });\n\n it(\"registers itself as a singleton\", () => {\n expect(registerSingletonSpy).toHaveBeenCalledWith(entity);\n });\n\n it(\"should be accessible through the static getter\", () => {\n appObjects.getOrCreate(\"another-object\");\n const retrievedEntity = EventEntity.get(appObjects);\n expect(retrievedEntity).toBe(entity);\n });\n\n it(\"registers new events successfully\", () => {\n entity.register(\"button_click\", \"Button Click Event\");\n\n const registeredEvents = entity.getRegisteredEvents();\n expect(registeredEvents).toHaveLength(1);\n expect(registeredEvents[0]).toEqual({\n id: \"button_click\",\n name: \"Button Click Event\",\n });\n });\n\n it(\"should register multiple events\", () => {\n entity.register(\"button_click\", \"Button Click Event\");\n entity.register(\"page_load\", \"Page Load Event\");\n\n const registeredEvents = entity.getRegisteredEvents();\n expect(registeredEvents).toHaveLength(2);\n\n const eventIds = registeredEvents.map((e) => e.id);\n expect(eventIds).toContain(\"button_click\");\n expect(eventIds).toContain(\"page_load\");\n });\n\n it(\"should warn on duplicate registration\", () => {\n entity.register(\"button_click\", \"Button Click Event\");\n entity.register(\"button_click\", \"Another Button Click\");\n\n expect(submitWarningSpy).toHaveBeenCalledWith(\n \"EventEntity\",\n \"Event with id 'button_click' is already registered\",\n );\n\n const registeredEvents = entity.getRegisteredEvents();\n expect(registeredEvents).toHaveLength(1);\n });\n\n it(\"emits known events successfully\", () => {\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\n entity.register(\"manual_step\", \"Manual Step\");\n entity.emit(\"auto_cycle_clicked\");\n\n const emittedEvents = entity.getEmittedEvents();\n expect(emittedEvents).toEqual([\"auto_cycle_clicked\"]);\n expect(entity.getLastEmittedId()).toBe(\"auto_cycle_clicked\");\n });\n\n it(\"maintains chronological order of emissions\", () => {\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\n entity.register(\"manual_step\", \"Manual Step\");\n entity.emit(\"auto_cycle_clicked\");\n entity.emit(\"manual_step\");\n entity.emit(\"auto_cycle_clicked\");\n\n const emittedEvents = entity.getEmittedEvents();\n expect(emittedEvents).toEqual([\n \"auto_cycle_clicked\",\n \"manual_step\",\n \"auto_cycle_clicked\",\n ]);\n expect(entity.getLastEmittedId()).toBe(\"auto_cycle_clicked\");\n });\n\n it(\"allows duplicate emissions\", () => {\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\n entity.register(\"manual_step\", \"Manual Step\");\n entity.emit(\"auto_cycle_clicked\");\n entity.emit(\"auto_cycle_clicked\");\n entity.emit(\"auto_cycle_clicked\");\n\n const emittedEvents = entity.getEmittedEvents();\n expect(emittedEvents).toHaveLength(3);\n expect(emittedEvents.every((id) => id === \"auto_cycle_clicked\")).toBe(true);\n });\n\n it(\"warns and ignores unknown event emissions\", () => {\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\n entity.register(\"manual_step\", \"Manual Step\");\n entity.emit(\"unknown_event\");\n\n expect(submitWarningSpy).toHaveBeenCalledWith(\n \"EventEntity\",\n \"Cannot emit unknown event with id 'unknown_event'\",\n );\n\n const emittedEvents = entity.getEmittedEvents();\n expect(emittedEvents).toHaveLength(0);\n expect(entity.getLastEmittedId()).toBeNull();\n });\n\n it(\"allows late registration after emission attempt\", () => {\n entity.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\n entity.register(\"manual_step\", \"Manual Step\");\n entity.emit(\"late_event\");\n expect(submitWarningSpy).toHaveBeenCalled();\n\n entity.register(\"late_event\", \"Late Event\");\n\n entity.emit(\"late_event\");\n const emittedEvents = entity.getEmittedEvents();\n expect(emittedEvents).toEqual([\"late_event\"]);\n });\n\n it(\"clears event log while preserving registry after reset\", () => {\n entity.register(\"event1\", \"Event One\");\n entity.register(\"event2\", \"Event Two\");\n entity.emit(\"event1\");\n entity.emit(\"event2\");\n entity.emit(\"event1\");\n expect(entity.getEmittedEvents()).toHaveLength(3);\n expect(entity.getLastEmittedId()).toBe(\"event1\");\n\n entity.reset();\n\n expect(entity.getEmittedEvents()).toHaveLength(0);\n expect(entity.getLastEmittedId()).toBeNull();\n\n const registeredEvents = entity.getRegisteredEvents();\n expect(registeredEvents).toHaveLength(2);\n expect(registeredEvents.map((e) => e.id)).toContain(\"event1\");\n expect(registeredEvents.map((e) => e.id)).toContain(\"event2\");\n });\n\n it(\"allows emissions after reset\", () => {\n entity.register(\"event1\", \"Event One\");\n entity.register(\"event2\", \"Event Two\");\n entity.emit(\"event1\");\n entity.emit(\"event2\");\n entity.emit(\"event1\");\n entity.reset();\n\n entity.emit(\"event1\");\n expect(entity.getEmittedEvents()).toEqual([\"event1\"]);\n expect(entity.getLastEmittedId()).toBe(\"event1\");\n });\n\n it(\"notifies observers when events are emitted\", () => {\n entity.register(\"test_event\", \"Test Event\");\n const mockObserver = jest.fn();\n entity.addChangeObserver(mockObserver);\n\n entity.emit(\"test_event\");\n\n expect(mockObserver).toHaveBeenCalledTimes(1);\n });\n\n it(\"notifies observers on reset\", () => {\n entity.register(\"test_event\", \"Test Event\");\n entity.emit(\"test_event\");\n\n const mockObserver = jest.fn();\n entity.addChangeObserver(mockObserver);\n\n entity.reset();\n\n expect(mockObserver).toHaveBeenCalledTimes(1);\n });\n\n it(\"does not notify observers for unknown event emissions\", () => {\n entity.register(\"test_event\", \"Test Event\");\n const mockObserver = jest.fn();\n entity.addChangeObserver(mockObserver);\n\n entity.emit(\"unknown_event\");\n\n expect(mockObserver).not.toHaveBeenCalled();\n });\n\n it(\"fires emission listener on every emit\", () => {\n entity.register(\"test_event\", \"Test Event\");\n const listener = jest.fn();\n entity.addEmissionListener(listener);\n\n entity.emit(\"test_event\");\n entity.emit(\"test_event\");\n\n expect(listener).toHaveBeenCalledTimes(2);\n expect(listener).toHaveBeenCalledWith(\"test_event\");\n });\n\n it(\"does not fire emission listener for unknown events\", () => {\n entity.register(\"test_event\", \"Test Event\");\n const listener = jest.fn();\n entity.addEmissionListener(listener);\n\n entity.emit(\"unknown_event\");\n\n expect(listener).not.toHaveBeenCalled();\n });\n\n it(\"allows removing emission listeners\", () => {\n entity.register(\"test_event\", \"Test Event\");\n const listener = jest.fn();\n entity.addEmissionListener(listener);\n\n entity.emit(\"test_event\");\n expect(listener).toHaveBeenCalledTimes(1);\n\n entity.removeEmissionListener(listener);\n entity.emit(\"test_event\");\n expect(listener).toHaveBeenCalledTimes(1);\n });\n\n it(\"returns empty arrays and null initially\", () => {\n expect(entity.getRegisteredEvents()).toEqual([]);\n expect(entity.getEmittedEvents()).toEqual([]);\n expect(entity.getLastEmittedId()).toBeNull();\n });\n\n it(\"returns copies of arrays to prevent external mutation\", () => {\n entity.register(\"test_event\", \"Test Event\");\n entity.emit(\"test_event\");\n\n const registeredEvents = entity.getRegisteredEvents();\n const emittedEvents = entity.getEmittedEvents();\n\n registeredEvents.push({ id: \"fake\", name: \"Fake\" });\n emittedEvents.push(\"fake_emission\");\n\n expect(entity.getRegisteredEvents()).toHaveLength(1);\n expect(entity.getEmittedEvents()).toHaveLength(1);\n });\n\n describe(\"event categories (#53)\", () => {\n it(\"stores an explicit category on the definition\", () => {\n entity.register(\"navigate-to-overhead\", \"Go to overhead\", {\n category: \"instructional\",\n });\n\n expect(entity.getRegisteredEvents()[0]).toEqual({\n id: \"navigate-to-overhead\",\n name: \"Go to overhead\",\n category: \"instructional\",\n });\n expect(entity.getEventCategory(\"navigate-to-overhead\")).toBe(\n \"instructional\",\n );\n });\n\n it(\"defaults an omitted category to assessed without adding a key to the definition\", () => {\n entity.register(\"lever\", \"Pull lever\");\n entity.register(\"valve\", \"Open valve\", {});\n\n expect(entity.getRegisteredEvents()).toEqual([\n { id: \"lever\", name: \"Pull lever\" },\n { id: \"valve\", name: \"Open valve\" },\n ]);\n expect(Object.keys(entity.getRegisteredEvents()[0])).toEqual([\n \"id\",\n \"name\",\n ]);\n expect(entity.getEventCategory(\"lever\")).toBe(\"assessed\");\n expect(entity.getEventCategory(\"valve\")).toBe(\"assessed\");\n });\n\n it(\"treats an unregistered id as assessed\", () => {\n expect(entity.getEventCategory(\"legacy-step\")).toBe(\"assessed\");\n });\n\n it(\"keeps the first registration's category on a duplicate registration\", () => {\n entity.register(\"lever\", \"Pull lever\");\n entity.register(\"lever\", \"Pull lever again\", {\n category: \"instructional\",\n });\n\n expect(entity.getEventCategory(\"lever\")).toBe(\"assessed\");\n });\n\n it(\"emits an instructional event exactly like an assessed one\", () => {\n entity.register(\"navigate-to-overhead\", \"Go to overhead\", {\n category: \"instructional\",\n });\n const listener = jest.fn();\n entity.addEmissionListener(listener);\n\n entity.emit(\"navigate-to-overhead\");\n\n expect(listener).toHaveBeenCalledWith(\"navigate-to-overhead\");\n expect(entity.getEmittedEvents()).toEqual([\"navigate-to-overhead\"]);\n expect(entity.getLastEmittedId()).toBe(\"navigate-to-overhead\");\n });\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/EventSystem/Entities/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B","sourcesContent":["export * from \"./EventEntity\";\
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/EventSystem/Entities/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,gDAA8B","sourcesContent":["export * from \"./EventEntity\";\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventSystem.integration.test.js","sourceRoot":"","sources":["../../../src/EventSystem/EventSystem.integration.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\r\nimport { makeEventSystemFeatureFactory } from \"./Factories/EventSystemFeatureFactory\";\r\nimport { EventEntity } from \"./Entities/EventEntity\";\r\n\r\ndescribe(\"EventSystem Integration\", () => {\r\n let appObjects: AppObjectRepo;\r\n let submitWarningSpy: jest.SpyInstance;\r\n\r\n beforeEach(() => {\r\n appObjects = makeAppObjectRepo();\r\n submitWarningSpy = jest.spyOn(appObjects, \"submitWarning\");\r\n });\r\n\r\n it(\"registers and emits known events successfully\", () => {\r\n const factory = makeEventSystemFeatureFactory(appObjects);\r\n factory.setupEntities();\r\n\r\n const eventEntity = EventEntity.get(appObjects);\r\n expect(eventEntity).toBeDefined();\r\n\r\n eventEntity!.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\r\n\r\n const registeredEvents = eventEntity!.getRegisteredEvents();\r\n expect(registeredEvents).toHaveLength(1);\r\n expect(registeredEvents[0]).toEqual({\r\n id: \"auto_cycle_clicked\",\r\n name: \"Auto Cycle Clicked\",\r\n });\r\n\r\n eventEntity!.emit(\"auto_cycle_clicked\");\r\n\r\n const emittedEvents = eventEntity!.getEmittedEvents();\r\n expect(emittedEvents).toEqual([\"auto_cycle_clicked\"]);\r\n expect(eventEntity!.getLastEmittedId()).toBe(\"auto_cycle_clicked\");\r\n });\r\n\r\n it(\"should handle multiple events and maintain chronological order\", () => {\r\n const factory = makeEventSystemFeatureFactory(appObjects);\r\n factory.setupEntities();\r\n const eventEntity = EventEntity.get(appObjects)!;\r\n\r\n eventEntity.register(\"button_click\", \"Button Click\");\r\n eventEntity.register(\"page_load\", \"Page Load\");\r\n eventEntity.register(\"user_action\", \"User Action\");\r\n\r\n eventEntity.emit(\"page_load\");\r\n eventEntity.emit(\"button_click\");\r\n eventEntity.emit(\"user_action\");\r\n eventEntity.emit(\"button_click\");\r\n\r\n const emittedEvents = eventEntity.getEmittedEvents();\r\n expect(emittedEvents).toEqual([\r\n \"page_load\",\r\n \"button_click\",\r\n \"user_action\",\r\n \"button_click\",\r\n ]);\r\n expect(eventEntity.getLastEmittedId()).toBe(\"button_click\");\r\n });\r\n\r\n it(\"warns and ignores unknown event emissions\", () => {\r\n const factory = makeEventSystemFeatureFactory(appObjects);\r\n factory.setupEntities();\r\n const eventEntity = EventEntity.get(appObjects)!;\r\n\r\n eventEntity.emit(\"unknown_event_id\");\r\n\r\n expect(submitWarningSpy).toHaveBeenCalledWith(\r\n \"EventEntity\",\r\n \"Cannot emit unknown event with id 'unknown_event_id'\",\r\n );\r\n\r\n expect(eventEntity.getEmittedEvents()).toHaveLength(0);\r\n expect(eventEntity.getLastEmittedId()).toBeNull();\r\n expect(eventEntity.getRegisteredEvents()).toHaveLength(0);\r\n });\r\n\r\n it(\"should allow late registration after emission attempt\", () => {\r\n const factory = makeEventSystemFeatureFactory(appObjects);\r\n factory.setupEntities();\r\n const eventEntity = EventEntity.get(appObjects)!;\r\n\r\n eventEntity.emit(\"late_registration_event\");\r\n expect(submitWarningSpy).toHaveBeenCalledWith(\r\n \"EventEntity\",\r\n \"Cannot emit unknown event with id 'late_registration_event'\",\r\n );\r\n\r\n eventEntity.register(\"late_registration_event\", \"Late Registration Event\");\r\n eventEntity.emit(\"late_registration_event\");\r\n expect(eventEntity.getEmittedEvents()).toEqual([\"late_registration_event\"]);\r\n expect(eventEntity.getLastEmittedId()).toBe(\"late_registration_event\");\r\n });\r\n\r\n it(\"clears log while preserving registry\", () => {\r\n const factory = makeEventSystemFeatureFactory(appObjects);\r\n factory.setupEntities();\r\n const eventEntity = EventEntity.get(appObjects)!;\r\n\r\n eventEntity.register(\"event1\", \"Event One\");\r\n eventEntity.register(\"event2\", \"Event Two\");\r\n eventEntity.emit(\"event1\");\r\n eventEntity.emit(\"event2\");\r\n eventEntity.emit(\"event1\");\r\n\r\n expect(eventEntity.getEmittedEvents()).toHaveLength(3);\r\n expect(eventEntity.getRegisteredEvents()).toHaveLength(2);\r\n expect(eventEntity.getLastEmittedId()).toBe(\"event1\");\r\n\r\n eventEntity.reset();\r\n\r\n expect(eventEntity.getEmittedEvents()).toHaveLength(0);\r\n expect(eventEntity.getLastEmittedId()).toBeNull();\r\n expect(eventEntity.getRegisteredEvents()).toHaveLength(2);\r\n\r\n eventEntity.emit(\"event2\");\r\n expect(eventEntity.getEmittedEvents()).toEqual([\"event2\"]);\r\n expect(eventEntity.getLastEmittedId()).toBe(\"event2\");\r\n });\r\n\r\n it(\"notifies observers when events are emitted\", () => {\r\n const factory = makeEventSystemFeatureFactory(appObjects);\r\n factory.setupEntities();\r\n const eventEntity = EventEntity.get(appObjects)!;\r\n\r\n eventEntity.register(\"observable_event\", \"Observable Event\");\r\n const mockObserver = jest.fn();\r\n eventEntity.addChangeObserver(mockObserver);\r\n\r\n eventEntity.emit(\"observable_event\");\r\n\r\n expect(mockObserver).toHaveBeenCalledTimes(1);\r\n });\r\n\r\n it(\"should notify observers on reset\", () => {\r\n const factory = makeEventSystemFeatureFactory(appObjects);\r\n factory.setupEntities();\r\n const eventEntity = EventEntity.get(appObjects)!;\r\n\r\n eventEntity.register(\"test_event\", \"Test Event\");\r\n eventEntity.emit(\"test_event\");\r\n\r\n const mockObserver = jest.fn();\r\n eventEntity.addChangeObserver(mockObserver);\r\n\r\n eventEntity.reset();\r\n expect(mockObserver).toHaveBeenCalledTimes(1);\r\n });\r\n\r\n it(\"creates functional EventEntity through factory\", () => {\r\n const factory = makeEventSystemFeatureFactory(appObjects);\r\n\r\n expect(factory.getEventEntity()).toBeUndefined();\r\n\r\n factory.setupEntities();\r\n\r\n const eventEntity = factory.getEventEntity();\r\n expect(eventEntity).toBeDefined();\r\n expect(eventEntity).toBeInstanceOf(EventEntity);\r\n });\r\n\r\n it(\"should maintain singleton behavior across factory operations\", () => {\r\n const factory1 = makeEventSystemFeatureFactory(appObjects);\r\n factory1.setupEntities();\r\n\r\n const factory2 = makeEventSystemFeatureFactory(appObjects);\r\n\r\n const entity1 = factory1.getEventEntity();\r\n const entity2 = factory2.getEventEntity();\r\n\r\n expect(entity1).toBe(entity2);\r\n });\r\n});\r\n"]}
|
|
1
|
+
{"version":3,"file":"EventSystem.integration.test.js","sourceRoot":"","sources":["../../../src/EventSystem/EventSystem.integration.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\nimport { makeEventSystemFeatureFactory } from \"./Factories/EventSystemFeatureFactory\";\nimport { EventEntity } from \"./Entities/EventEntity\";\n\ndescribe(\"EventSystem Integration\", () => {\n let appObjects: AppObjectRepo;\n let submitWarningSpy: jest.SpyInstance;\n\n beforeEach(() => {\n appObjects = makeAppObjectRepo();\n submitWarningSpy = jest.spyOn(appObjects, \"submitWarning\");\n });\n\n it(\"registers and emits known events successfully\", () => {\n const factory = makeEventSystemFeatureFactory(appObjects);\n factory.setupEntities();\n\n const eventEntity = EventEntity.get(appObjects);\n expect(eventEntity).toBeDefined();\n\n eventEntity!.register(\"auto_cycle_clicked\", \"Auto Cycle Clicked\");\n\n const registeredEvents = eventEntity!.getRegisteredEvents();\n expect(registeredEvents).toHaveLength(1);\n expect(registeredEvents[0]).toEqual({\n id: \"auto_cycle_clicked\",\n name: \"Auto Cycle Clicked\",\n });\n\n eventEntity!.emit(\"auto_cycle_clicked\");\n\n const emittedEvents = eventEntity!.getEmittedEvents();\n expect(emittedEvents).toEqual([\"auto_cycle_clicked\"]);\n expect(eventEntity!.getLastEmittedId()).toBe(\"auto_cycle_clicked\");\n });\n\n it(\"should handle multiple events and maintain chronological order\", () => {\n const factory = makeEventSystemFeatureFactory(appObjects);\n factory.setupEntities();\n const eventEntity = EventEntity.get(appObjects)!;\n\n eventEntity.register(\"button_click\", \"Button Click\");\n eventEntity.register(\"page_load\", \"Page Load\");\n eventEntity.register(\"user_action\", \"User Action\");\n\n eventEntity.emit(\"page_load\");\n eventEntity.emit(\"button_click\");\n eventEntity.emit(\"user_action\");\n eventEntity.emit(\"button_click\");\n\n const emittedEvents = eventEntity.getEmittedEvents();\n expect(emittedEvents).toEqual([\n \"page_load\",\n \"button_click\",\n \"user_action\",\n \"button_click\",\n ]);\n expect(eventEntity.getLastEmittedId()).toBe(\"button_click\");\n });\n\n it(\"warns and ignores unknown event emissions\", () => {\n const factory = makeEventSystemFeatureFactory(appObjects);\n factory.setupEntities();\n const eventEntity = EventEntity.get(appObjects)!;\n\n eventEntity.emit(\"unknown_event_id\");\n\n expect(submitWarningSpy).toHaveBeenCalledWith(\n \"EventEntity\",\n \"Cannot emit unknown event with id 'unknown_event_id'\",\n );\n\n expect(eventEntity.getEmittedEvents()).toHaveLength(0);\n expect(eventEntity.getLastEmittedId()).toBeNull();\n expect(eventEntity.getRegisteredEvents()).toHaveLength(0);\n });\n\n it(\"should allow late registration after emission attempt\", () => {\n const factory = makeEventSystemFeatureFactory(appObjects);\n factory.setupEntities();\n const eventEntity = EventEntity.get(appObjects)!;\n\n eventEntity.emit(\"late_registration_event\");\n expect(submitWarningSpy).toHaveBeenCalledWith(\n \"EventEntity\",\n \"Cannot emit unknown event with id 'late_registration_event'\",\n );\n\n eventEntity.register(\"late_registration_event\", \"Late Registration Event\");\n eventEntity.emit(\"late_registration_event\");\n expect(eventEntity.getEmittedEvents()).toEqual([\"late_registration_event\"]);\n expect(eventEntity.getLastEmittedId()).toBe(\"late_registration_event\");\n });\n\n it(\"clears log while preserving registry\", () => {\n const factory = makeEventSystemFeatureFactory(appObjects);\n factory.setupEntities();\n const eventEntity = EventEntity.get(appObjects)!;\n\n eventEntity.register(\"event1\", \"Event One\");\n eventEntity.register(\"event2\", \"Event Two\");\n eventEntity.emit(\"event1\");\n eventEntity.emit(\"event2\");\n eventEntity.emit(\"event1\");\n\n expect(eventEntity.getEmittedEvents()).toHaveLength(3);\n expect(eventEntity.getRegisteredEvents()).toHaveLength(2);\n expect(eventEntity.getLastEmittedId()).toBe(\"event1\");\n\n eventEntity.reset();\n\n expect(eventEntity.getEmittedEvents()).toHaveLength(0);\n expect(eventEntity.getLastEmittedId()).toBeNull();\n expect(eventEntity.getRegisteredEvents()).toHaveLength(2);\n\n eventEntity.emit(\"event2\");\n expect(eventEntity.getEmittedEvents()).toEqual([\"event2\"]);\n expect(eventEntity.getLastEmittedId()).toBe(\"event2\");\n });\n\n it(\"notifies observers when events are emitted\", () => {\n const factory = makeEventSystemFeatureFactory(appObjects);\n factory.setupEntities();\n const eventEntity = EventEntity.get(appObjects)!;\n\n eventEntity.register(\"observable_event\", \"Observable Event\");\n const mockObserver = jest.fn();\n eventEntity.addChangeObserver(mockObserver);\n\n eventEntity.emit(\"observable_event\");\n\n expect(mockObserver).toHaveBeenCalledTimes(1);\n });\n\n it(\"should notify observers on reset\", () => {\n const factory = makeEventSystemFeatureFactory(appObjects);\n factory.setupEntities();\n const eventEntity = EventEntity.get(appObjects)!;\n\n eventEntity.register(\"test_event\", \"Test Event\");\n eventEntity.emit(\"test_event\");\n\n const mockObserver = jest.fn();\n eventEntity.addChangeObserver(mockObserver);\n\n eventEntity.reset();\n expect(mockObserver).toHaveBeenCalledTimes(1);\n });\n\n it(\"creates functional EventEntity through factory\", () => {\n const factory = makeEventSystemFeatureFactory(appObjects);\n\n expect(factory.getEventEntity()).toBeUndefined();\n\n factory.setupEntities();\n\n const eventEntity = factory.getEventEntity();\n expect(eventEntity).toBeDefined();\n expect(eventEntity).toBeInstanceOf(EventEntity);\n });\n\n it(\"should maintain singleton behavior across factory operations\", () => {\n const factory1 = makeEventSystemFeatureFactory(appObjects);\n factory1.setupEntities();\n\n const factory2 = makeEventSystemFeatureFactory(appObjects);\n\n const entity1 = factory1.getEventEntity();\n const entity2 = factory2.getEventEntity();\n\n expect(entity1).toBe(entity2);\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventSystemFeatureFactory.js","sourceRoot":"","sources":["../../../../src/EventSystem/Factories/EventSystemFeatureFactory.ts"],"names":[],"mappings":";;;AA+BA,sEAKC;AApCD,sCAA2D;AAC3D,yDAAuE;AAEvE;;;;;GAKG;AACH,MAAa,yBAA0B,SAAQ,oBAAa;IAA5D;;QACE,gBAAW,GAAG,2BAA2B,CAAC;IAe5C,CAAC;IAbC,aAAa;QACX,IAAA,6BAAe,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,QAAQ,KAAU,CAAC;IAEnB,QAAQ,KAAU,CAAC;IAEnB,UAAU,KAAU,CAAC;IAErB,cAAc;QACZ,OAAO,yBAAW,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;CACF;AAhBD,8DAgBC;AAEY,QAAA,4BAA4B,GAAG;IAC1C,eAAe,EAAE,yBAAW,CAAC,IAAI;CAClC,CAAC;AAEF,SAAgB,6BAA6B,CAC3C,UAAyB;IAEzB,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACxD,OAAO,IAAI,yBAAyB,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC","sourcesContent":["import { AppObjectRepo, DomainFactory } from \"@vived/core\";\
|
|
1
|
+
{"version":3,"file":"EventSystemFeatureFactory.js","sourceRoot":"","sources":["../../../../src/EventSystem/Factories/EventSystemFeatureFactory.ts"],"names":[],"mappings":";;;AA+BA,sEAKC;AApCD,sCAA2D;AAC3D,yDAAuE;AAEvE;;;;;GAKG;AACH,MAAa,yBAA0B,SAAQ,oBAAa;IAA5D;;QACE,gBAAW,GAAG,2BAA2B,CAAC;IAe5C,CAAC;IAbC,aAAa;QACX,IAAA,6BAAe,EAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAClC,CAAC;IAED,QAAQ,KAAU,CAAC;IAEnB,QAAQ,KAAU,CAAC;IAEnB,UAAU,KAAU,CAAC;IAErB,cAAc;QACZ,OAAO,yBAAW,CAAC,GAAG,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IAC1C,CAAC;CACF;AAhBD,8DAgBC;AAEY,QAAA,4BAA4B,GAAG;IAC1C,eAAe,EAAE,yBAAW,CAAC,IAAI;CAClC,CAAC;AAEF,SAAgB,6BAA6B,CAC3C,UAAyB;IAEzB,MAAM,SAAS,GAAG,UAAU,CAAC,WAAW,CAAC,aAAa,CAAC,CAAC;IACxD,OAAO,IAAI,yBAAyB,CAAC,SAAS,CAAC,CAAC;AAClD,CAAC","sourcesContent":["import { AppObjectRepo, DomainFactory } from \"@vived/core\";\nimport { makeEventEntity, EventEntity } from \"../Entities/EventEntity\";\n\n/**\n * EventSystemFeatureFactory\n *\n * Creates and wires the EventSystem singleton entity.\n * Provides a single entry point for initializing the EventSystem feature.\n */\nexport class EventSystemFeatureFactory extends DomainFactory {\n factoryName = \"EventSystemFeatureFactory\";\n\n setupEntities(): void {\n makeEventEntity(this.appObject);\n }\n\n setupUCs(): void {}\n\n setupPMs(): void {}\n\n finalSetup(): void {}\n\n getEventEntity(): EventEntity | undefined {\n return EventEntity.get(this.appObjects);\n }\n}\n\nexport const EventSystemFeatureComponents = {\n eventEntityType: EventEntity.type,\n};\n\nexport function makeEventSystemFeatureFactory(\n appObjects: AppObjectRepo,\n): EventSystemFeatureFactory {\n const appObject = appObjects.getOrCreate(\"EventSystem\");\n return new EventSystemFeatureFactory(appObject);\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"EventSystemFeatureFactory.test.js","sourceRoot":"","sources":["../../../../src/EventSystem/Factories/EventSystemFeatureFactory.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\
|
|
1
|
+
{"version":3,"file":"EventSystemFeatureFactory.test.js","sourceRoot":"","sources":["../../../../src/EventSystem/Factories/EventSystemFeatureFactory.test.ts"],"names":[],"mappings":"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","sourcesContent":["import { AppObjectRepo, makeAppObjectRepo } from \"@vived/core\";\nimport {\n EventSystemFeatureFactory,\n makeEventSystemFeatureFactory,\n} from \"./EventSystemFeatureFactory\";\nimport { EventEntity } from \"../Entities/EventEntity\";\n\ndescribe(\"EventSystemFeatureFactory\", () => {\n let appObjects: AppObjectRepo;\n let factory: EventSystemFeatureFactory;\n\n beforeEach(() => {\n appObjects = makeAppObjectRepo();\n factory = makeEventSystemFeatureFactory(appObjects);\n });\n\n it(\"creates factory instance successfully\", () => {\n expect(factory).toBeInstanceOf(EventSystemFeatureFactory);\n expect(factory.factoryName).toBe(\"EventSystemFeatureFactory\");\n });\n\n it(\"creates EventEntity singleton on setupEntities\", () => {\n factory.setupEntities();\n const eventEntity = EventEntity.get(appObjects);\n expect(eventEntity).toBeDefined();\n });\n\n it(\"makes EventEntity accessible through factory\", () => {\n factory.setupEntities();\n const eventEntity = factory.getEventEntity();\n expect(eventEntity).toBeDefined();\n });\n\n it(\"completes setup without errors\", () => {\n expect(() => {\n factory.setupEntities();\n factory.setupUCs();\n factory.setupPMs();\n factory.finalSetup();\n }).not.toThrow();\n });\n\n it(\"creates functional EventEntity after setup\", () => {\n factory.setupEntities();\n factory.setupUCs();\n factory.setupPMs();\n factory.finalSetup();\n\n const eventEntity = factory.getEventEntity()!;\n\n eventEntity.register(\"test_event\", \"Test Event\");\n eventEntity.emit(\"test_event\");\n\n expect(eventEntity.getRegisteredEvents()).toHaveLength(1);\n expect(eventEntity.getEmittedEvents()).toEqual([\"test_event\"]);\n expect(eventEntity.getLastEmittedId()).toBe(\"test_event\");\n });\n\n it(\"integrates warning system with appObjects\", () => {\n const submitWarningSpy = jest.spyOn(appObjects, \"submitWarning\");\n\n factory.setupEntities();\n const eventEntity = factory.getEventEntity()!;\n\n eventEntity.emit(\"unknown_event\");\n\n expect(submitWarningSpy).toHaveBeenCalledWith(\n \"EventEntity\",\n \"Cannot emit unknown event with id 'unknown_event'\",\n );\n });\n\n it(\"maintains singleton across different AppObjects\", () => {\n factory.setupEntities();\n\n const eventEntity1 = factory.getEventEntity();\n const eventEntity2 = EventEntity.get(appObjects);\n\n expect(eventEntity1).toBe(eventEntity2);\n });\n});\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/EventSystem/Factories/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8DAA4C","sourcesContent":["export * from \"./EventSystemFeatureFactory\";\
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/EventSystem/Factories/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;AAAA,8DAA4C","sourcesContent":["export * from \"./EventSystemFeatureFactory\";\n"]}
|