@realitycollective/service-framework-iwsdk 1.0.0 → 1.0.1-preview.1
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/CHANGELOG.md +51 -0
- package/Examples/main.ts +3 -3
- package/README.md +17 -8
- package/dist/bootstrap.d.ts +0 -1
- package/dist/bootstrap.js.map +1 -1
- package/dist/index.d.ts +0 -1
- package/dist/index.js.map +1 -1
- package/dist/iwsdk-adapter.d.ts +1 -2
- package/dist/iwsdk-adapter.js +1 -1
- package/dist/iwsdk-adapter.js.map +1 -1
- package/dist/iwsdk-host.d.ts +0 -1
- package/dist/iwsdk-host.js.map +1 -1
- package/dist/mock-runtime-adapter.d.ts +0 -1
- package/dist/mock-runtime-adapter.js.map +1 -1
- package/dist/runtime-adapter.d.ts +0 -1
- package/dist/runtime-adapter.js.map +1 -1
- package/dist/service-bridge-system.d.ts +1 -2
- package/dist/service-bridge-system.js.map +1 -1
- package/dist/snapshot-service.d.ts +2 -3
- package/dist/snapshot-service.js +2 -2
- package/dist/snapshot-service.js.map +1 -1
- package/package.json +3 -11
- package/dist/bootstrap.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/iwsdk-adapter.d.ts.map +0 -1
- package/dist/iwsdk-host.d.ts.map +0 -1
- package/dist/mock-runtime-adapter.d.ts.map +0 -1
- package/dist/runtime-adapter.d.ts.map +0 -1
- package/dist/service-bridge-system.d.ts.map +0 -1
- package/dist/snapshot-service.d.ts.map +0 -1
package/CHANGELOG.md
ADDED
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
Change log for the Reality Collective Service Framework for TypeScript. All packages in this repository are versioned and released together; the version below is the one carried by the `v<version>` release tag.
|
|
4
|
+
|
|
5
|
+
The format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and the project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). Preview builds are not listed separately. The entry for a version accumulates while its previews are published, and is dated when that version is released.
|
|
6
|
+
|
|
7
|
+
## [1.0.1]
|
|
8
|
+
|
|
9
|
+
Packaging, tooling and documentation. No runtime behaviour changed, and no public API was added, removed or altered.
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- Updated documentation packs for all projects.
|
|
14
|
+
- Improved release scripting and validation to improve delivery coherance.
|
|
15
|
+
- `scripts/release.config.json` - names the core package and the publish order, so the release tooling is identical across every Reality Collective TypeScript repository.
|
|
16
|
+
- A deploy stage in CI for `runtime-examples/*`, which were never built by CI before.
|
|
17
|
+
- `.gitattributes`, pinning the repository to LF and marking lockfiles as generated.
|
|
18
|
+
|
|
19
|
+
### Changed
|
|
20
|
+
|
|
21
|
+
- CI and deployment merged into one workflow. They previously ran concurrently and repeated the same install, build, typecheck and test on every pull request. The deploy jobs now consume the artifacts the build job already produced.
|
|
22
|
+
- CI runs on every pull request regardless of target branch, and reports through merge queues.
|
|
23
|
+
- Published sourcemaps embed their sources (`inlineSources`), so stepping into the framework works for consumers. Declaration maps are no longer emitted, because they can only resolve against a `src` directory that is not shipped. Each package is roughly 12% smaller as a result.
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
|
|
27
|
+
- `@realitycollective/service-framework-iwsdk` could not be installed alongside `@iwsdk/core` 0.5.x. Its peer range was `>=0.4.0 <0.5.0`, which npm reports as `ERESOLVE` on a clean install and therefore on `npm ci`, regardless of the entry being optional. Consumers needed a local `overrides` block to install at all; that workaround can be deleted once this version is published.
|
|
28
|
+
- `runtime-examples/*` white-screened with `Cannot read properties of null (reading 'useMemo')`. The Vite aliases point into `../../packages`, so the framework's React binding resolved React from the repository root while the app used its own copy. Two React instances leave the hook dispatcher null. Both example configs now set `resolve.dedupe`.
|
|
29
|
+
|
|
30
|
+
### Removed
|
|
31
|
+
|
|
32
|
+
- The `@iwsdk/core` peer dependency on `@realitycollective/service-framework-iwsdk`, rather than widening it to `<0.6.0`. The bridge never imports `@iwsdk/core`: the primitives it needs (`World`, `createSystem`, `VisibilityState.Visible` and the visibility signal) are typed structurally and passed in by the consumer, and those four contracts are identical across 0.4.x and 0.5.x. A range that constrains nothing while still being able to fail a consumer's install is a liability, so there is now no entry of any kind. The package is verified against IWSDK 0.4.x and 0.5.x, and its example remains engine-free because it mocks those primitives.
|
|
33
|
+
- Build output is no longer committed: 72 files under `packages/*/dist/` and 44 compiled `.js`, `.d.ts` and `.map` files that sat beside the sources in `packages/*/src/`. The test suite had been executing that committed JavaScript rather than the TypeScript, so coverage now measures `src/**/*.ts`.
|
|
34
|
+
- The generated `coverage/` report, which every test run rewrote with a new timestamp.
|
|
35
|
+
|
|
36
|
+
## [1.0.0] - 2026-06-18
|
|
37
|
+
|
|
38
|
+
First release. Six packages, published together.
|
|
39
|
+
|
|
40
|
+
### Added
|
|
41
|
+
|
|
42
|
+
- `@realitycollective/service-framework` - the core runtime: `ServiceManager` with dependency-ordered start and stop, `BaseService` and `BaseServiceModule`, type-safe resolution through `createServiceToken`, the scheduler channels, an event service for service-to-service messaging, profile-based configuration and environment description.
|
|
43
|
+
- `@realitycollective/service-framework-react` - `ServiceFrameworkProvider` plus the `useServiceManager`, `useService` and `useServices` hooks.
|
|
44
|
+
- `@realitycollective/service-framework-three` - `ThreeRenderLoopBridge`, connecting `renderer.setAnimationLoop()` to the `renderTick` channel. Accepts anything with `setAnimationLoop`, so a renderer or a test double both work.
|
|
45
|
+
- `@realitycollective/service-framework-client` - the React and three.js pieces wired together, so an app starts from a working runtime instead of assembling the scheduler and bridge by hand.
|
|
46
|
+
- `@realitycollective/service-framework-babylon` - Babylon.js bindings, connecting `engine.runRenderLoop()` to the same `renderTick` channel the three.js bridge uses. A service written against `BaseService<TConfig>` runs unchanged on either renderer.
|
|
47
|
+
- `@realitycollective/service-framework-iwsdk` - Meta IWSDK (WebXR) bindings. IWSDK owns its own render loop, so this package is a passive frame source: one system relays each frame to services and maps `visibilityState` onto focus and pause, so services pause when the headset comes off. Services depend only on `RuntimeAdapter`, never on `@iwsdk/core`.
|
|
48
|
+
- A worked example in every package's `Examples/` folder, and two runnable Vite apps in `runtime-examples/`.
|
|
49
|
+
|
|
50
|
+
[1.0.1]: https://github.com/realitycollective/com.realitycollective.service-framework.ts/compare/v1.0.0...HEAD
|
|
51
|
+
[1.0.0]: https://github.com/realitycollective/com.realitycollective.service-framework.ts/releases/tag/v1.0.0
|
package/Examples/main.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* service-framework-iwsdk
|
|
2
|
+
* service-framework-iwsdk - minimal usage example
|
|
3
3
|
*
|
|
4
4
|
* Mirrors the three.js / Babylon.js examples, but for the Meta IWSDK frame
|
|
5
5
|
* source. IWSDK owns the render loop, so instead of a bridge that owns
|
|
@@ -39,7 +39,7 @@ import {
|
|
|
39
39
|
|
|
40
40
|
// ---------------------------------------------------------------------------
|
|
41
41
|
// A leaf service that owns its state and decays energy once per frame.
|
|
42
|
-
// It depends only on RuntimeAdapter
|
|
42
|
+
// It depends only on RuntimeAdapter - never on @iwsdk/core - so it is portable
|
|
43
43
|
// and unit-testable headless against MockRuntimeAdapter.
|
|
44
44
|
// ---------------------------------------------------------------------------
|
|
45
45
|
|
|
@@ -81,7 +81,7 @@ function createEnergyProfile(adapter: IWSDKAdapter): ServiceProfile {
|
|
|
81
81
|
}
|
|
82
82
|
|
|
83
83
|
// ---------------------------------------------------------------------------
|
|
84
|
-
// Mock @iwsdk/core primitives
|
|
84
|
+
// Mock @iwsdk/core primitives - swap for the real ones in an IWSDK app.
|
|
85
85
|
// ---------------------------------------------------------------------------
|
|
86
86
|
|
|
87
87
|
const VISIBLE: string = "visible";
|
package/README.md
CHANGED
|
@@ -8,9 +8,13 @@ Lets `@realitycollective/service-framework` services run inside the [IWSDK](http
|
|
|
8
8
|
|
|
9
9
|
## How it differs from the render-loop bridges
|
|
10
10
|
|
|
11
|
-
`service-framework-three` and `service-framework-babylon` **own** the loop
|
|
11
|
+
`service-framework-three` and `service-framework-babylon` **own** the render loop: the bridge calls `renderer.setAnimationLoop(...)` or `engine.runRenderLoop(...)` itself.
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
IWSDK is different. It already owns the render loop, the XR session, input, and its Entity Component System (ECS, the pattern IWSDK uses to organise scene objects and the code that runs on them). So this package must not start a loop of its own.
|
|
14
|
+
|
|
15
|
+
Instead it is a **passive frame source**: it receives frames rather than producing them.
|
|
16
|
+
|
|
17
|
+
IWSDK calls one system, `ServiceBridgeSystem`, once per frame. That system hands the frame to every subscribed service through `IWSDKAdapter`. It also maps IWSDK's `visibilityState` onto the manager's focus and pause signals, so services pause when the headset comes off.
|
|
14
18
|
|
|
15
19
|
```
|
|
16
20
|
IWSDK World (render loop, XR session, input, ECS)
|
|
@@ -26,15 +30,15 @@ IWSDKAdapter (RuntimeAdapter) → onFrame fan-out → services
|
|
|
26
30
|
ServiceManager → your SnapshotService graph
|
|
27
31
|
```
|
|
28
32
|
|
|
29
|
-
**Invariant:** services depend only on `RuntimeAdapter`, never on `@iwsdk/core`. That is what keeps them unit-testable headless
|
|
33
|
+
**Invariant:** services depend only on `RuntimeAdapter`, never on `@iwsdk/core`. That is what keeps them unit-testable headless - swap `IWSDKAdapter` for `MockRuntimeAdapter`.
|
|
30
34
|
|
|
31
35
|
---
|
|
32
36
|
|
|
33
37
|
## No hard dependency on `@iwsdk/core`
|
|
34
38
|
|
|
35
|
-
Like the three.js and Babylon.js bridges keep their renderer packages at arm's length, this package **never imports `@iwsdk/core`**. The IWSDK primitives the bridge needs
|
|
39
|
+
Like the three.js and Babylon.js bridges keep their renderer packages at arm's length, this package **never imports `@iwsdk/core`**. The IWSDK primitives the bridge needs - `createSystem` and the `VisibilityState.Visible` value - are passed in by the consumer (who owns IWSDK). This keeps the package tree-shakeable, version-tolerant across IWSDK `0.4.x` and `0.5.x`, and trivially mockable in unit tests.
|
|
36
40
|
|
|
37
|
-
`@iwsdk/core` is declared as an
|
|
41
|
+
`@iwsdk/core` is **not declared as a dependency of any kind** - not even an optional peer. The four contracts this bridge relies on (`World`, `createSystem`, `VisibilityState.Visible` and the visibility signal) are structurally typed and passed in, and they are identical across 0.4.x and 0.5.x. A peer range here would constrain nothing while still being able to fail a consumer's clean install, so there is deliberately no entry.
|
|
38
42
|
|
|
39
43
|
---
|
|
40
44
|
|
|
@@ -67,13 +71,13 @@ world.registerSystem(
|
|
|
67
71
|
);
|
|
68
72
|
```
|
|
69
73
|
|
|
70
|
-
Game logic ticks **only while the session is visible/focused**
|
|
74
|
+
Game logic ticks **only while the session is visible/focused** - in the browser / 2D preview the host app shows its own "Enter VR" gate and services stay idle until the player enters VR.
|
|
71
75
|
|
|
72
76
|
---
|
|
73
77
|
|
|
74
78
|
## Services own their state: `SnapshotService`
|
|
75
79
|
|
|
76
|
-
`SnapshotService<TConfig, TSnapshot>` is the "services own state" base
|
|
80
|
+
`SnapshotService<TConfig, TSnapshot>` is the "services own state" base - one immutable snapshot plus pub/sub. Subscribers receive the current value immediately, then every publish. It has **no IWSDK dependency**.
|
|
77
81
|
|
|
78
82
|
```typescript
|
|
79
83
|
import { SnapshotService, type ServiceContext, type RuntimeAdapter } from "@realitycollective/service-framework-iwsdk";
|
|
@@ -123,7 +127,7 @@ No `@iwsdk/core` import appears anywhere in the test.
|
|
|
123
127
|
|
|
124
128
|
## Capabilities
|
|
125
129
|
|
|
126
|
-
`AdapterCapabilities` (`immersive`, `handTracking`, `planeDetection`, `passthrough`) is what gating services read (`adapter.getCapabilities()`) or subscribe to (`adapter.onCapabilitiesChange(cb)`
|
|
130
|
+
`AdapterCapabilities` (`immersive`, `handTracking`, `planeDetection`, `passthrough`) is what gating services read (`adapter.getCapabilities()`) or subscribe to (`adapter.onCapabilitiesChange(cb)` - mirrors `onFrame`, so gates don't poll every frame). Refine them with `adapter.setCapabilities({ ... })`.
|
|
127
131
|
|
|
128
132
|
> **One gap still to close:** deriving capabilities from the live `XRSession` (enabled features, blend mode, hand input sources) is intentionally left to the host wiring because it needs IWSDK session internals. Until that is wired, the adapter reports `DEFAULT_CAPABILITIES` (all-false) and gating services behave conservatively. `IWSDKAdapter.getWorld()` exposes the bound world as the source for that derivation, and `onCapabilitiesChange` is the notification channel for when it lands.
|
|
129
133
|
|
|
@@ -166,6 +170,11 @@ The example mocks the `@iwsdk/core` primitives so it runs in plain Node.js: it d
|
|
|
166
170
|
|
|
167
171
|
---
|
|
168
172
|
|
|
173
|
+
## Live examples
|
|
174
|
+
|
|
175
|
+
- Weather client walkthrough: **[service-framework-weather.pages.dev](https://service-framework-weather.pages.dev)**
|
|
176
|
+
- Client runtime reference: **[service-framework-client-app.pages.dev](https://service-framework-client-app.pages.dev)**
|
|
177
|
+
|
|
169
178
|
## License
|
|
170
179
|
|
|
171
180
|
MIT
|
package/dist/bootstrap.d.ts
CHANGED
|
@@ -17,4 +17,3 @@ export interface ServiceRuntime {
|
|
|
17
17
|
* `(adapter) => createServiceProfile("my-app", [...])`.
|
|
18
18
|
*/
|
|
19
19
|
export declare function startServiceRuntime(world: IWSDKWorldLike, profileFactory: (adapter: IWSDKAdapter) => ServiceProfile): ServiceRuntime;
|
|
20
|
-
//# sourceMappingURL=bootstrap.d.ts.map
|
package/dist/bootstrap.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQlD;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAqB,EACrB,cAAyD;IAEzD,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;IACrC,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC"}
|
|
1
|
+
{"version":3,"file":"bootstrap.js","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAQlD;;;;GAIG;AACH,MAAM,UAAU,mBAAmB,CACjC,KAAqB,EACrB,cAAyD;IAEzD,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC;IACxC,MAAM,OAAO,GAAG,IAAI,cAAc,EAAE,CAAC;IACrC,OAAO,CAAC,iBAAiB,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACnD,OAAO,CAAC,KAAK,EAAE,CAAC;IAChB,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,CAAC;AAC9B,CAAC","sourcesContent":["/**\n * Non-React bootstrap for an IWSDK client: build the adapter, stand up the\n * ServiceManager from the app's profile, and start it. The caller registers\n * {@link makeServiceBridgeSystem} with the IWSDK world to pump per-frame ticks.\n */\nimport { ServiceManager } from \"@realitycollective/service-framework\";\nimport type { ServiceProfile } from \"@realitycollective/service-framework\";\nimport { IWSDKAdapter } from \"./iwsdk-adapter.js\";\nimport type { IWSDKWorldLike } from \"./iwsdk-host.js\";\n\nexport interface ServiceRuntime {\n readonly manager: ServiceManager;\n readonly adapter: IWSDKAdapter;\n}\n\n/**\n * @param world the IWSDK world (owns the loop / XR session).\n * @param profileFactory builds the app service graph from the adapter, e.g.\n * `(adapter) => createServiceProfile(\"my-app\", [...])`.\n */\nexport function startServiceRuntime(\n world: IWSDKWorldLike,\n profileFactory: (adapter: IWSDKAdapter) => ServiceProfile,\n): ServiceRuntime {\n const adapter = new IWSDKAdapter(world);\n const manager = new ServiceManager();\n manager.initializeProfile(profileFactory(adapter));\n manager.start();\n return { manager, adapter };\n}\n"]}
|
package/dist/index.d.ts
CHANGED
|
@@ -9,4 +9,3 @@ export { makeServiceBridgeSystem } from "./service-bridge-system.js";
|
|
|
9
9
|
export type { ServiceBridgeSystemOptions } from "./service-bridge-system.js";
|
|
10
10
|
export { startServiceRuntime } from "./bootstrap.js";
|
|
11
11
|
export type { ServiceRuntime } from "./bootstrap.js";
|
|
12
|
-
//# sourceMappingURL=index.d.ts.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAkB5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAGrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAkB5D,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AAGxD,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AAGrE,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC","sourcesContent":["export { DEFAULT_CAPABILITIES } from \"./runtime-adapter.js\";\nexport type {\n AdapterCapabilities,\n CapabilitiesListener,\n FrameInfo,\n FrameListener,\n RuntimeAdapter,\n Unsubscribe,\n} from \"./runtime-adapter.js\";\n\nexport type {\n CreateSystemLike,\n IWSDKSignalLike,\n IWSDKSystemConstructor,\n IWSDKSystemLike,\n IWSDKWorldLike,\n} from \"./iwsdk-host.js\";\n\nexport { IWSDKAdapter } from \"./iwsdk-adapter.js\";\nexport { MockRuntimeAdapter } from \"./mock-runtime-adapter.js\";\n\nexport { SnapshotService } from \"./snapshot-service.js\";\nexport type { ServiceContext, SnapshotListener } from \"./snapshot-service.js\";\n\nexport { makeServiceBridgeSystem } from \"./service-bridge-system.js\";\nexport type { ServiceBridgeSystemOptions } from \"./service-bridge-system.js\";\n\nexport { startServiceRuntime } from \"./bootstrap.js\";\nexport type { ServiceRuntime } from \"./bootstrap.js\";\n"]}
|
package/dist/iwsdk-adapter.d.ts
CHANGED
|
@@ -19,7 +19,7 @@ export declare class IWSDKAdapter implements RuntimeAdapter {
|
|
|
19
19
|
/**
|
|
20
20
|
* The IWSDK `World` this adapter is bound to. Reserved for capability
|
|
21
21
|
* derivation from the live XR session (see the package README "Capabilities"
|
|
22
|
-
* section)
|
|
22
|
+
* section) - the one piece still to be wired to the real IWSDK session API.
|
|
23
23
|
*/
|
|
24
24
|
getWorld(): IWSDKWorldLike;
|
|
25
25
|
/** Refine capabilities once the XR session reports them; notifies subscribers. */
|
|
@@ -27,4 +27,3 @@ export declare class IWSDKAdapter implements RuntimeAdapter {
|
|
|
27
27
|
/** Called once per frame by the ECS bridge system. */
|
|
28
28
|
emitFrame(timestamp: number, delta: number): void;
|
|
29
29
|
}
|
|
30
|
-
//# sourceMappingURL=iwsdk-adapter.d.ts.map
|
package/dist/iwsdk-adapter.js
CHANGED
|
@@ -32,7 +32,7 @@ export class IWSDKAdapter {
|
|
|
32
32
|
/**
|
|
33
33
|
* The IWSDK `World` this adapter is bound to. Reserved for capability
|
|
34
34
|
* derivation from the live XR session (see the package README "Capabilities"
|
|
35
|
-
* section)
|
|
35
|
+
* section) - the one piece still to be wired to the real IWSDK session API.
|
|
36
36
|
*/
|
|
37
37
|
getWorld() {
|
|
38
38
|
return this.world;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iwsdk-adapter.js","sourceRoot":"","sources":["../src/iwsdk-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EACL,oBAAoB,GAOrB,MAAM,sBAAsB,CAAC;AAG9B,MAAM,OAAO,YAAY;IAKa;IAJnB,cAAc,GAAG,IAAI,GAAG,EAAiB,CAAC;IAC1C,qBAAqB,GAAG,IAAI,GAAG,EAAwB,CAAC;IACjE,YAAY,GAAwB,oBAAoB,CAAC;IAEjE,YAAoC,KAAqB;QAArB,UAAK,GAAL,KAAK,CAAgB;IAAG,CAAC;IAEtD,OAAO,CAAC,QAAuB;QACpC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC;IACJ,CAAC;IAEM,eAAe;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEM,oBAAoB,CAAC,QAA8B;QACxD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACI,QAAQ;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,kFAAkF;IAC3E,eAAe,CAAC,YAA0C;QAC/D,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,YAAY,EAAE,CAAC;QAC9D,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,sDAAsD;IAC/C,SAAS,CAAC,SAAiB,EAAE,KAAa;QAC/C,MAAM,KAAK,GAAc,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC9C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7D,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"iwsdk-adapter.js","sourceRoot":"","sources":["../src/iwsdk-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EACL,oBAAoB,GAOrB,MAAM,sBAAsB,CAAC;AAG9B,MAAM,OAAO,YAAY;IAKa;IAJnB,cAAc,GAAG,IAAI,GAAG,EAAiB,CAAC;IAC1C,qBAAqB,GAAG,IAAI,GAAG,EAAwB,CAAC;IACjE,YAAY,GAAwB,oBAAoB,CAAC;IAEjE,YAAoC,KAAqB;QAArB,UAAK,GAAL,KAAK,CAAgB;IAAG,CAAC;IAEtD,OAAO,CAAC,QAAuB;QACpC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC;IACJ,CAAC;IAEM,eAAe;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEM,oBAAoB,CAAC,QAA8B;QACxD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC,CAAC;IACJ,CAAC;IAED;;;;OAIG;IACI,QAAQ;QACb,OAAO,IAAI,CAAC,KAAK,CAAC;IACpB,CAAC;IAED,kFAAkF;IAC3E,eAAe,CAAC,YAA0C;QAC/D,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,YAAY,EAAE,CAAC;QAC9D,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,sDAAsD;IAC/C,SAAS,CAAC,SAAiB,EAAE,KAAa;QAC/C,MAAM,KAAK,GAAc,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC;QAC9C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;IAC7D,CAAC;CACF","sourcesContent":["/**\n * IWSDK implementation of {@link RuntimeAdapter}. IWSDK owns the render loop, so\n * the adapter is a passive fan-out: the `ServiceBridgeSystem` (a normal IWSDK\n * system) calls {@link IWSDKAdapter.emitFrame} once per frame and the adapter\n * notifies subscribed services. Capabilities are refined from the XR session via\n * {@link IWSDKAdapter.setCapabilities}.\n */\nimport {\n DEFAULT_CAPABILITIES,\n type AdapterCapabilities,\n type CapabilitiesListener,\n type FrameInfo,\n type FrameListener,\n type RuntimeAdapter,\n type Unsubscribe,\n} from \"./runtime-adapter.js\";\nimport type { IWSDKWorldLike } from \"./iwsdk-host.js\";\n\nexport class IWSDKAdapter implements RuntimeAdapter {\n private readonly frameListeners = new Set<FrameListener>();\n private readonly capabilitiesListeners = new Set<CapabilitiesListener>();\n private capabilities: AdapterCapabilities = DEFAULT_CAPABILITIES;\n\n public constructor(private readonly world: IWSDKWorldLike) {}\n\n public onFrame(listener: FrameListener): Unsubscribe {\n this.frameListeners.add(listener);\n return () => {\n this.frameListeners.delete(listener);\n };\n }\n\n public getCapabilities(): AdapterCapabilities {\n return this.capabilities;\n }\n\n public onCapabilitiesChange(listener: CapabilitiesListener): Unsubscribe {\n this.capabilitiesListeners.add(listener);\n return () => {\n this.capabilitiesListeners.delete(listener);\n };\n }\n\n /**\n * The IWSDK `World` this adapter is bound to. Reserved for capability\n * derivation from the live XR session (see the package README \"Capabilities\"\n * section) - the one piece still to be wired to the real IWSDK session API.\n */\n public getWorld(): IWSDKWorldLike {\n return this.world;\n }\n\n /** Refine capabilities once the XR session reports them; notifies subscribers. */\n public setCapabilities(capabilities: Partial<AdapterCapabilities>): void {\n this.capabilities = { ...this.capabilities, ...capabilities };\n this.capabilitiesListeners.forEach((listener) => listener(this.capabilities));\n }\n\n /** Called once per frame by the ECS bridge system. */\n public emitFrame(timestamp: number, delta: number): void {\n const frame: FrameInfo = { timestamp, delta };\n this.frameListeners.forEach((listener) => listener(frame));\n }\n}\n"]}
|
package/dist/iwsdk-host.d.ts
CHANGED
|
@@ -28,4 +28,3 @@ export type IWSDKSystemConstructor = new (...args: unknown[]) => IWSDKSystemLike
|
|
|
28
28
|
* empty schema because it queries no ECS components.
|
|
29
29
|
*/
|
|
30
30
|
export type CreateSystemLike = (schema?: Record<string, unknown>) => IWSDKSystemConstructor;
|
|
31
|
-
//# sourceMappingURL=iwsdk-host.d.ts.map
|
package/dist/iwsdk-host.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"iwsdk-host.js","sourceRoot":"","sources":["../src/iwsdk-host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG"}
|
|
1
|
+
{"version":3,"file":"iwsdk-host.js","sourceRoot":"","sources":["../src/iwsdk-host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG","sourcesContent":["/**\n * Structural contracts for the slice of `@iwsdk/core` this shim touches.\n *\n * Mirrors the approach the three.js and Babylon.js bridges take with their\n * engine packages: the shim never imports `@iwsdk/core` directly, so it builds\n * and unit-tests with no IWSDK / WebXR / headset present, and any 0.4.x IWSDK\n * works without bumping this package. Consumers pass the real `World`,\n * `createSystem` and `VisibilityState.Visible` value through\n * {@link makeServiceBridgeSystem}.\n */\n\n/** IWSDK exposes reactive values as `{ value }` signals; the bridge only reads `.value`. */\nexport interface IWSDKSignalLike<TValue> {\n readonly value: TValue;\n}\n\n/** The slice of an IWSDK `World` the bridge reads: the visibility signal. */\nexport interface IWSDKWorldLike<TVisibility = unknown> {\n readonly visibilityState: IWSDKSignalLike<TVisibility>;\n}\n\n/** The per-frame entry point IWSDK invokes on a registered system. */\nexport interface IWSDKSystemLike {\n update(delta: number, time: number): void;\n}\n\n/** Constructor shape of the base class IWSDK's `createSystem` returns. */\nexport type IWSDKSystemConstructor = new (...args: unknown[]) => IWSDKSystemLike;\n\n/**\n * Structural shape of IWSDK's `createSystem` factory. `createSystem(schema)`\n * returns a base system class that the bridge extends; the bridge passes an\n * empty schema because it queries no ECS components.\n */\nexport type CreateSystemLike = (schema?: Record<string, unknown>) => IWSDKSystemConstructor;\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mock-runtime-adapter.js","sourceRoot":"","sources":["../src/mock-runtime-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,oBAAoB,GAMrB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,OAAO,kBAAkB;IACZ,cAAc,GAAG,IAAI,GAAG,EAAiB,CAAC;IAC1C,qBAAqB,GAAG,IAAI,GAAG,EAAwB,CAAC;IACjE,YAAY,CAAsB;IAE1C,YAAmB,eAA6C,EAAE;QAChE,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,oBAAoB,EAAE,GAAG,YAAY,EAAE,CAAC;IACnE,CAAC;IAEM,OAAO,CAAC,QAAuB;QACpC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC;IACJ,CAAC;IAEM,eAAe;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEM,oBAAoB,CAAC,QAA8B;QACxD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC,CAAC;IACJ,CAAC;IAED,0DAA0D;IACnD,eAAe,CAAC,YAA0C;QAC/D,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,YAAY,EAAE,CAAC;QAC9D,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,8BAA8B;IACvB,SAAS,CAAC,SAAS,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,EAAE;QAC5C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"mock-runtime-adapter.js","sourceRoot":"","sources":["../src/mock-runtime-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EACL,oBAAoB,GAMrB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,OAAO,kBAAkB;IACZ,cAAc,GAAG,IAAI,GAAG,EAAiB,CAAC;IAC1C,qBAAqB,GAAG,IAAI,GAAG,EAAwB,CAAC;IACjE,YAAY,CAAsB;IAE1C,YAAmB,eAA6C,EAAE;QAChE,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,oBAAoB,EAAE,GAAG,YAAY,EAAE,CAAC;IACnE,CAAC;IAEM,OAAO,CAAC,QAAuB;QACpC,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAClC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QACvC,CAAC,CAAC;IACJ,CAAC;IAEM,eAAe;QACpB,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAEM,oBAAoB,CAAC,QAA8B;QACxD,IAAI,CAAC,qBAAqB,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzC,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,qBAAqB,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAC9C,CAAC,CAAC;IACJ,CAAC;IAED,0DAA0D;IACnD,eAAe,CAAC,YAA0C;QAC/D,IAAI,CAAC,YAAY,GAAG,EAAE,GAAG,IAAI,CAAC,YAAY,EAAE,GAAG,YAAY,EAAE,CAAC;QAC9D,IAAI,CAAC,qBAAqB,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC;IAChF,CAAC;IAED,8BAA8B;IACvB,SAAS,CAAC,SAAS,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,GAAG,EAAE;QAC5C,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC,CAAC;IAC5E,CAAC;CACF","sourcesContent":["/**\n * Headless {@link RuntimeAdapter} for tests. Services run against this with no\n * IWSDK / renderer / headset; tests drive the loop by calling\n * {@link MockRuntimeAdapter.emitFrame} and refine gating with\n * {@link MockRuntimeAdapter.setCapabilities}.\n */\nimport {\n DEFAULT_CAPABILITIES,\n type AdapterCapabilities,\n type CapabilitiesListener,\n type FrameListener,\n type RuntimeAdapter,\n type Unsubscribe,\n} from \"./runtime-adapter.js\";\n\nexport class MockRuntimeAdapter implements RuntimeAdapter {\n private readonly frameListeners = new Set<FrameListener>();\n private readonly capabilitiesListeners = new Set<CapabilitiesListener>();\n private capabilities: AdapterCapabilities;\n\n public constructor(capabilities: Partial<AdapterCapabilities> = {}) {\n this.capabilities = { ...DEFAULT_CAPABILITIES, ...capabilities };\n }\n\n public onFrame(listener: FrameListener): Unsubscribe {\n this.frameListeners.add(listener);\n return () => {\n this.frameListeners.delete(listener);\n };\n }\n\n public getCapabilities(): AdapterCapabilities {\n return this.capabilities;\n }\n\n public onCapabilitiesChange(listener: CapabilitiesListener): Unsubscribe {\n this.capabilitiesListeners.add(listener);\n return () => {\n this.capabilitiesListeners.delete(listener);\n };\n }\n\n /** Refine capabilities in tests; notifies subscribers. */\n public setCapabilities(capabilities: Partial<AdapterCapabilities>): void {\n this.capabilities = { ...this.capabilities, ...capabilities };\n this.capabilitiesListeners.forEach((listener) => listener(this.capabilities));\n }\n\n /** Drive a frame in tests. */\n public emitFrame(timestamp = 0, delta = 1 / 72): void {\n this.frameListeners.forEach((listener) => listener({ timestamp, delta }));\n }\n}\n"]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-adapter.js","sourceRoot":"","sources":["../src/runtime-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmBH,MAAM,CAAC,MAAM,oBAAoB,GAAwB;IACvD,SAAS,EAAE,KAAK;IAChB,YAAY,EAAE,KAAK;IACnB,cAAc,EAAE,KAAK;IACrB,WAAW,EAAE,KAAK;CACnB,CAAC"}
|
|
1
|
+
{"version":3,"file":"runtime-adapter.js","sourceRoot":"","sources":["../src/runtime-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAmBH,MAAM,CAAC,MAAM,oBAAoB,GAAwB;IACvD,SAAS,EAAE,KAAK;IAChB,YAAY,EAAE,KAAK;IACnB,cAAc,EAAE,KAAK;IACrB,WAAW,EAAE,KAAK;CACnB,CAAC","sourcesContent":["/**\n * Runtime adapter contract (IWSDK-only, minimal frame-source).\n *\n * Trimmed to what an IWSDK-only client needs: a per-frame fan-out and\n * capability flags. IWSDK already owns sessions, input and rendering, so the\n * adapter deliberately does NOT re-abstract those. {@link MockRuntimeAdapter}\n * implements this same interface so services can be unit-tested headless.\n */\n\nexport type Unsubscribe = () => void;\n\nexport interface FrameInfo {\n /** Frame timestamp in milliseconds (IWSDK system `time`). */\n readonly timestamp: number;\n /** Seconds elapsed since the previous frame (IWSDK system `delta`). */\n readonly delta: number;\n}\n\n/** XR capabilities services gate on (e.g. passthrough requires `immersive`). */\nexport interface AdapterCapabilities {\n readonly immersive: boolean;\n readonly handTracking: boolean;\n readonly planeDetection: boolean;\n readonly passthrough: boolean;\n}\n\nexport const DEFAULT_CAPABILITIES: AdapterCapabilities = {\n immersive: false,\n handTracking: false,\n planeDetection: false,\n passthrough: false,\n};\n\nexport type FrameListener = (frame: FrameInfo) => void;\nexport type CapabilitiesListener = (capabilities: AdapterCapabilities) => void;\n\nexport interface RuntimeAdapter {\n /** Subscribe to per-frame updates; returns an unsubscribe handle. */\n onFrame(listener: FrameListener): Unsubscribe;\n /** Current XR capabilities (may change once a session is established). */\n getCapabilities(): AdapterCapabilities;\n /**\n * Subscribe to capability changes; returns an unsubscribe handle. Mirrors\n * {@link RuntimeAdapter.onFrame} so gating services can react to a session\n * coming online instead of polling {@link RuntimeAdapter.getCapabilities}\n * every frame.\n */\n onCapabilitiesChange(listener: CapabilitiesListener): Unsubscribe;\n}\n"]}
|
|
@@ -11,7 +11,7 @@
|
|
|
11
11
|
* This is the only place the engine loop touches the service layer; services
|
|
12
12
|
* themselves never see IWSDK. The IWSDK primitives (`createSystem` and the
|
|
13
13
|
* `VisibilityState.Visible` value) are injected so this package never imports
|
|
14
|
-
* `@iwsdk/core`
|
|
14
|
+
* `@iwsdk/core` - mirroring how the three.js / Babylon.js bridges keep their
|
|
15
15
|
* engine packages at arm's length.
|
|
16
16
|
*/
|
|
17
17
|
import type { ServiceManager } from "@realitycollective/service-framework";
|
|
@@ -43,4 +43,3 @@ export declare function makeServiceBridgeSystem<TVisibility>(options: ServiceBri
|
|
|
43
43
|
update(delta: number, time: number): void;
|
|
44
44
|
};
|
|
45
45
|
};
|
|
46
|
-
//# sourceMappingURL=service-bridge-system.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"service-bridge-system.js","sourceRoot":"","sources":["../src/service-bridge-system.ts"],"names":[],"mappings":"AAqCA;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAgD;IAEhD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IACxE,IAAI,WAAgC,CAAC;IAErC,OAAO,MAAM,mBAAoB,SAAQ,YAAY,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,KAAa,EAAE,IAAY;YAChD,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,CAAC,KAAK,KAAK,YAAY,CAAC;YAE7D,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;gBAC5B,WAAW,GAAG,OAAO,CAAC;gBACtB,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;gBACjC,OAAO,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;YAChD,CAAC;YAED,oEAAoE;YACpE,8DAA8D;YAC9D,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"service-bridge-system.js","sourceRoot":"","sources":["../src/service-bridge-system.ts"],"names":[],"mappings":"AAqCA;;;;GAIG;AACH,MAAM,UAAU,uBAAuB,CACrC,OAAgD;IAEhD,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,GAAG,OAAO,CAAC;IACxE,IAAI,WAAgC,CAAC;IAErC,OAAO,MAAM,mBAAoB,SAAQ,YAAY,CAAC,EAAE,CAAC;QACvC,MAAM,CAAC,KAAa,EAAE,IAAY;YAChD,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,CAAC,KAAK,KAAK,YAAY,CAAC;YAE7D,IAAI,OAAO,KAAK,WAAW,EAAE,CAAC;gBAC5B,WAAW,GAAG,OAAO,CAAC;gBACtB,OAAO,CAAC,eAAe,CAAC,OAAO,CAAC,CAAC;gBACjC,OAAO,CAAC,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC,OAAO,EAAE,CAAC,CAAC;YAChD,CAAC;YAED,oEAAoE;YACpE,8DAA8D;YAC9D,IAAI,OAAO,EAAE,CAAC;gBACZ,OAAO,CAAC,SAAS,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;YACjC,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC","sourcesContent":["/**\n * The single ECS-services bridge. A normal IWSDK system that, each frame:\n * - maps IWSDK `visibilityState` to manager focus/pause (auto-pause when the\n * headset is removed), and\n * - drives the adapter's per-frame fan-out via {@link IWSDKAdapter.emitFrame}.\n *\n * Game logic is only ticked while the session is visible/focused: in the\n * browser / 2D preview the host app shows its own gate (e.g. an \"Enter VR\"\n * overlay) and the services stay idle until the player enters VR.\n *\n * This is the only place the engine loop touches the service layer; services\n * themselves never see IWSDK. The IWSDK primitives (`createSystem` and the\n * `VisibilityState.Visible` value) are injected so this package never imports\n * `@iwsdk/core` - mirroring how the three.js / Babylon.js bridges keep their\n * engine packages at arm's length.\n */\nimport type { ServiceManager } from \"@realitycollective/service-framework\";\nimport type { IWSDKAdapter } from \"./iwsdk-adapter.js\";\nimport type { CreateSystemLike, IWSDKWorldLike } from \"./iwsdk-host.js\";\n\nexport interface ServiceBridgeSystemOptions<TVisibility = unknown> {\n /** The passive frame source fanned out to services. */\n readonly adapter: IWSDKAdapter;\n /** The service manager whose focus/pause signals are driven by visibility. */\n readonly manager: ServiceManager;\n /** The IWSDK world whose `visibilityState` is read each frame. */\n readonly world: IWSDKWorldLike<TVisibility>;\n /** IWSDK's `createSystem` factory (from `@iwsdk/core`). */\n readonly createSystem: CreateSystemLike;\n /**\n * The `VisibilityState` value that means the session is visible/focused\n * (IWSDK `VisibilityState.Visible`). The bridge ticks services only while\n * `world.visibilityState.value === visibleState`.\n */\n readonly visibleState: TVisibility;\n}\n\n/**\n * Builds the IWSDK `ServiceBridgeSystem` class. Register the returned class with\n * the world (`world.registerSystem(makeServiceBridgeSystem({ ... }))`); IWSDK\n * then calls its `update(delta, time)` once per frame.\n */\nexport function makeServiceBridgeSystem<TVisibility>(\n options: ServiceBridgeSystemOptions<TVisibility>,\n) {\n const { adapter, manager, world, createSystem, visibleState } = options;\n let lastFocused: boolean | undefined;\n\n return class ServiceBridgeSystem extends createSystem({}) {\n public override update(delta: number, time: number): void {\n const focused = world.visibilityState.value === visibleState;\n\n if (focused !== lastFocused) {\n lastFocused = focused;\n manager.emitFocusChange(focused);\n manager.emitPauseChange({ paused: !focused });\n }\n\n // Only run game logic while visible/focused; idle in the 2D/browser\n // preview and while the headset is removed (visible-blurred).\n if (focused) {\n adapter.emitFrame(time, delta);\n }\n }\n };\n}\n"]}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `SnapshotService` base
|
|
2
|
+
* `SnapshotService` base - the "services own state" pattern. A snapshot service
|
|
3
3
|
* owns one immutable state object and a pub/sub list: consumers (other services,
|
|
4
4
|
* or the ECS presentation layer) subscribe and receive the current value
|
|
5
5
|
* immediately, then every subsequent publish.
|
|
6
6
|
*
|
|
7
|
-
* It has no IWSDK dependency
|
|
7
|
+
* It has no IWSDK dependency - only `@realitycollective/service-framework` - so
|
|
8
8
|
* services that extend it stay unit-testable headless against
|
|
9
9
|
* {@link MockRuntimeAdapter}.
|
|
10
10
|
*/
|
|
@@ -25,4 +25,3 @@ export declare abstract class SnapshotService<TConfig, TSnapshot> extends BaseSe
|
|
|
25
25
|
protected publishSnapshot(snapshot: TSnapshot): void;
|
|
26
26
|
protected updateSnapshot(partial: Partial<TSnapshot>): void;
|
|
27
27
|
}
|
|
28
|
-
//# sourceMappingURL=snapshot-service.d.ts.map
|
package/dist/snapshot-service.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* `SnapshotService` base
|
|
2
|
+
* `SnapshotService` base - the "services own state" pattern. A snapshot service
|
|
3
3
|
* owns one immutable state object and a pub/sub list: consumers (other services,
|
|
4
4
|
* or the ECS presentation layer) subscribe and receive the current value
|
|
5
5
|
* immediately, then every subsequent publish.
|
|
6
6
|
*
|
|
7
|
-
* It has no IWSDK dependency
|
|
7
|
+
* It has no IWSDK dependency - only `@realitycollective/service-framework` - so
|
|
8
8
|
* services that extend it stay unit-testable headless against
|
|
9
9
|
* {@link MockRuntimeAdapter}.
|
|
10
10
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot-service.js","sourceRoot":"","sources":["../src/snapshot-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAYnE,MAAM,OAAgB,eAAoC,SAAQ,WAAoB;IAC1E,QAAQ,CAAY;IACb,SAAS,GAAG,IAAI,GAAG,EAA+B,CAAC;IAEpE,YAAsB,OAAgC,EAAE,eAA0B;QAChF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC;IAClC,CAAC;IAEM,WAAW;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAEM,SAAS,CAAC,QAAqC;QACpD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC;IAES,eAAe,CAAC,QAAmB;QAC3C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChE,CAAC;IAES,cAAc,CAAC,OAA2B;QAClD,IAAI,CAAC,eAAe,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC;CACF"}
|
|
1
|
+
{"version":3,"file":"snapshot-service.js","sourceRoot":"","sources":["../src/snapshot-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAYnE,MAAM,OAAgB,eAAoC,SAAQ,WAAoB;IAC1E,QAAQ,CAAY;IACb,SAAS,GAAG,IAAI,GAAG,EAA+B,CAAC;IAEpE,YAAsB,OAAgC,EAAE,eAA0B;QAChF,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,QAAQ,GAAG,eAAe,CAAC;IAClC,CAAC;IAEM,WAAW;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IAEM,SAAS,CAAC,QAAqC;QACpD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC7B,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;QACxB,OAAO,GAAG,EAAE;YACV,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;QAClC,CAAC,CAAC;IACJ,CAAC;IAES,eAAe,CAAC,QAAmB;QAC3C,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,QAAQ,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC;IAChE,CAAC;IAES,cAAc,CAAC,OAA2B;QAClD,IAAI,CAAC,eAAe,CAAC,EAAE,GAAG,IAAI,CAAC,QAAQ,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;IACzD,CAAC;CACF","sourcesContent":["/**\n * `SnapshotService` base - the \"services own state\" pattern. A snapshot service\n * owns one immutable state object and a pub/sub list: consumers (other services,\n * or the ECS presentation layer) subscribe and receive the current value\n * immediately, then every subsequent publish.\n *\n * It has no IWSDK dependency - only `@realitycollective/service-framework` - so\n * services that extend it stay unit-testable headless against\n * {@link MockRuntimeAdapter}.\n */\nimport { BaseService } from \"@realitycollective/service-framework\";\n\n/**\n * The activation-context type a service constructor receives. Aliased here so\n * every service uses one consistent, framework-correct shape (matches the\n * `useFactory(context)` parameter the ServiceManager passes).\n */\nexport type ServiceContext<TConfig = unknown> =\n ConstructorParameters<typeof BaseService<TConfig>>[0];\n\nexport type SnapshotListener<TSnapshot> = (snapshot: TSnapshot) => void;\n\nexport abstract class SnapshotService<TConfig, TSnapshot> extends BaseService<TConfig> {\n protected snapshot: TSnapshot;\n private readonly listeners = new Set<SnapshotListener<TSnapshot>>();\n\n protected constructor(context: ServiceContext<TConfig>, initialSnapshot: TSnapshot) {\n super(context);\n this.snapshot = initialSnapshot;\n }\n\n public getSnapshot(): TSnapshot {\n return this.snapshot;\n }\n\n public subscribe(listener: SnapshotListener<TSnapshot>): () => void {\n this.listeners.add(listener);\n listener(this.snapshot);\n return () => {\n this.listeners.delete(listener);\n };\n }\n\n protected publishSnapshot(snapshot: TSnapshot): void {\n this.snapshot = snapshot;\n this.listeners.forEach((listener) => listener(this.snapshot));\n }\n\n protected updateSnapshot(partial: Partial<TSnapshot>): void {\n this.publishSnapshot({ ...this.snapshot, ...partial });\n }\n}\n"]}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@realitycollective/service-framework-iwsdk",
|
|
3
|
-
"version": "1.0.
|
|
3
|
+
"version": "1.0.1-preview.1",
|
|
4
4
|
"description": "Meta IWSDK (WebXR) frame-source bindings for the Reality Collective TypeScript Service Framework.",
|
|
5
5
|
"author": "Reality Collective",
|
|
6
6
|
"license": "MIT",
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
"files": [
|
|
17
17
|
"dist",
|
|
18
18
|
"Examples",
|
|
19
|
-
"
|
|
19
|
+
"CHANGELOG.md"
|
|
20
20
|
],
|
|
21
21
|
"keywords": [
|
|
22
22
|
"service-framework",
|
|
@@ -35,16 +35,8 @@
|
|
|
35
35
|
"bugs": {
|
|
36
36
|
"url": "https://github.com/realitycollective/com.realitycollective.service-framework.ts/issues"
|
|
37
37
|
},
|
|
38
|
-
"peerDependencies": {
|
|
39
|
-
"@iwsdk/core": ">=0.4.0 <0.5.0"
|
|
40
|
-
},
|
|
41
|
-
"peerDependenciesMeta": {
|
|
42
|
-
"@iwsdk/core": {
|
|
43
|
-
"optional": true
|
|
44
|
-
}
|
|
45
|
-
},
|
|
46
38
|
"dependencies": {
|
|
47
|
-
"@realitycollective/service-framework": "^1.0.
|
|
39
|
+
"@realitycollective/service-framework": "^1.0.1-preview.1"
|
|
48
40
|
},
|
|
49
41
|
"scripts": {
|
|
50
42
|
"build": "tsc -p tsconfig.build.json",
|
package/dist/bootstrap.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"bootstrap.d.ts","sourceRoot":"","sources":["../src/bootstrap.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AACtE,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;CAChC;AAED;;;;GAIG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,cAAc,EACrB,cAAc,EAAE,CAAC,OAAO,EAAE,YAAY,KAAK,cAAc,GACxD,cAAc,CAMhB"}
|
package/dist/index.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,YAAY,EACV,mBAAmB,EACnB,oBAAoB,EACpB,SAAS,EACT,aAAa,EACb,cAAc,EACd,WAAW,GACZ,MAAM,sBAAsB,CAAC;AAE9B,YAAY,EACV,gBAAgB,EAChB,eAAe,EACf,sBAAsB,EACtB,eAAe,EACf,cAAc,GACf,MAAM,iBAAiB,CAAC;AAEzB,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,2BAA2B,CAAC;AAE/D,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AACxD,YAAY,EAAE,cAAc,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAE9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,4BAA4B,CAAC;AACrE,YAAY,EAAE,0BAA0B,EAAE,MAAM,4BAA4B,CAAC;AAE7E,OAAO,EAAE,mBAAmB,EAAE,MAAM,gBAAgB,CAAC;AACrD,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"iwsdk-adapter.d.ts","sourceRoot":"","sources":["../src/iwsdk-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EAEzB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAEtD,qBAAa,YAAa,YAAW,cAAc;IAK9B,OAAO,CAAC,QAAQ,CAAC,KAAK;IAJzC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;IAC3D,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAmC;IACzE,OAAO,CAAC,YAAY,CAA6C;gBAE7B,KAAK,EAAE,cAAc;IAElD,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,WAAW;IAO7C,eAAe,IAAI,mBAAmB;IAItC,oBAAoB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,WAAW;IAOxE;;;;OAIG;IACI,QAAQ,IAAI,cAAc;IAIjC,kFAAkF;IAC3E,eAAe,CAAC,YAAY,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI;IAKxE,sDAAsD;IAC/C,SAAS,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,IAAI;CAIzD"}
|
package/dist/iwsdk-host.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"iwsdk-host.d.ts","sourceRoot":"","sources":["../src/iwsdk-host.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,4FAA4F;AAC5F,MAAM,WAAW,eAAe,CAAC,MAAM;IACrC,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,6EAA6E;AAC7E,MAAM,WAAW,cAAc,CAAC,WAAW,GAAG,OAAO;IACnD,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAC,WAAW,CAAC,CAAC;CACxD;AAED,sEAAsE;AACtE,MAAM,WAAW,eAAe;IAC9B,MAAM,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;CAC3C;AAED,0EAA0E;AAC1E,MAAM,MAAM,sBAAsB,GAAG,KAAK,GAAG,IAAI,EAAE,OAAO,EAAE,KAAK,eAAe,CAAC;AAEjF;;;;GAIG;AACH,MAAM,MAAM,gBAAgB,GAAG,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,KAAK,sBAAsB,CAAC"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"mock-runtime-adapter.d.ts","sourceRoot":"","sources":["../src/mock-runtime-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,OAAO,EAEL,KAAK,mBAAmB,EACxB,KAAK,oBAAoB,EACzB,KAAK,aAAa,EAClB,KAAK,cAAc,EACnB,KAAK,WAAW,EACjB,MAAM,sBAAsB,CAAC;AAE9B,qBAAa,kBAAmB,YAAW,cAAc;IACvD,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;IAC3D,OAAO,CAAC,QAAQ,CAAC,qBAAqB,CAAmC;IACzE,OAAO,CAAC,YAAY,CAAsB;gBAEvB,YAAY,GAAE,OAAO,CAAC,mBAAmB,CAAM;IAI3D,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,WAAW;IAO7C,eAAe,IAAI,mBAAmB;IAItC,oBAAoB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,WAAW;IAOxE,0DAA0D;IACnD,eAAe,CAAC,YAAY,EAAE,OAAO,CAAC,mBAAmB,CAAC,GAAG,IAAI;IAKxE,8BAA8B;IACvB,SAAS,CAAC,SAAS,SAAI,EAAE,KAAK,SAAS,GAAG,IAAI;CAGtD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"runtime-adapter.d.ts","sourceRoot":"","sources":["../src/runtime-adapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,MAAM,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC;AAErC,MAAM,WAAW,SAAS;IACxB,6DAA6D;IAC7D,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,uEAAuE;IACvE,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,gFAAgF;AAChF,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,SAAS,EAAE,OAAO,CAAC;IAC5B,QAAQ,CAAC,YAAY,EAAE,OAAO,CAAC;IAC/B,QAAQ,CAAC,cAAc,EAAE,OAAO,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC;CAC/B;AAED,eAAO,MAAM,oBAAoB,EAAE,mBAKlC,CAAC;AAEF,MAAM,MAAM,aAAa,GAAG,CAAC,KAAK,EAAE,SAAS,KAAK,IAAI,CAAC;AACvD,MAAM,MAAM,oBAAoB,GAAG,CAAC,YAAY,EAAE,mBAAmB,KAAK,IAAI,CAAC;AAE/E,MAAM,WAAW,cAAc;IAC7B,qEAAqE;IACrE,OAAO,CAAC,QAAQ,EAAE,aAAa,GAAG,WAAW,CAAC;IAC9C,0EAA0E;IAC1E,eAAe,IAAI,mBAAmB,CAAC;IACvC;;;;;OAKG;IACH,oBAAoB,CAAC,QAAQ,EAAE,oBAAoB,GAAG,WAAW,CAAC;CACnE"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"service-bridge-system.d.ts","sourceRoot":"","sources":["../src/service-bridge-system.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AACH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,sCAAsC,CAAC;AAC3E,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAExE,MAAM,WAAW,0BAA0B,CAAC,WAAW,GAAG,OAAO;IAC/D,uDAAuD;IACvD,QAAQ,CAAC,OAAO,EAAE,YAAY,CAAC;IAC/B,8EAA8E;IAC9E,QAAQ,CAAC,OAAO,EAAE,cAAc,CAAC;IACjC,kEAAkE;IAClE,QAAQ,CAAC,KAAK,EAAE,cAAc,CAAC,WAAW,CAAC,CAAC;IAC5C,2DAA2D;IAC3D,QAAQ,CAAC,YAAY,EAAE,gBAAgB,CAAC;IACxC;;;;OAIG;IACH,QAAQ,CAAC,YAAY,EAAE,WAAW,CAAC;CACpC;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,WAAW,EACjD,OAAO,EAAE,0BAA0B,CAAC,WAAW,CAAC;;sBAMhB,MAAM,QAAQ,MAAM,GAAG,IAAI;;EAgB5D"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"snapshot-service.d.ts","sourceRoot":"","sources":["../src/snapshot-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,WAAW,EAAE,MAAM,sCAAsC,CAAC;AAEnE;;;;GAIG;AACH,MAAM,MAAM,cAAc,CAAC,OAAO,GAAG,OAAO,IAC1C,qBAAqB,CAAC,OAAO,WAAW,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAExD,MAAM,MAAM,gBAAgB,CAAC,SAAS,IAAI,CAAC,QAAQ,EAAE,SAAS,KAAK,IAAI,CAAC;AAExE,8BAAsB,eAAe,CAAC,OAAO,EAAE,SAAS,CAAE,SAAQ,WAAW,CAAC,OAAO,CAAC;IACpF,SAAS,CAAC,QAAQ,EAAE,SAAS,CAAC;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAA0C;IAEpE,SAAS,aAAa,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,EAAE,eAAe,EAAE,SAAS;IAK3E,WAAW,IAAI,SAAS;IAIxB,SAAS,CAAC,QAAQ,EAAE,gBAAgB,CAAC,SAAS,CAAC,GAAG,MAAM,IAAI;IAQnE,SAAS,CAAC,eAAe,CAAC,QAAQ,EAAE,SAAS,GAAG,IAAI;IAKpD,SAAS,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,SAAS,CAAC,GAAG,IAAI;CAG5D"}
|