@3dsource/angular-unreal-module 0.0.159 → 0.0.160
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/LICENSE +14 -14
- package/README.md +212 -212
- package/fesm2022/3dsource-angular-unreal-module.mjs +304 -227
- package/fesm2022/3dsource-angular-unreal-module.mjs.map +1 -1
- package/js/stream-prefetch.js +3 -3
- package/package.json +1 -1
- package/types/3dsource-angular-unreal-module.d.ts +39 -0
package/LICENSE
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
Copyright (c) 2025 3dsource
|
|
2
|
-
All Rights Reserved.
|
|
3
|
-
|
|
4
|
-
This software and associated documentation files (the “Software”) are proprietary
|
|
5
|
-
and confidential. Unauthorized copying, modification, distribution, or any other
|
|
6
|
-
use of the Software, in whole or in part, without the prior written consent of
|
|
7
|
-
the copyright holder is strictly prohibited.
|
|
8
|
-
|
|
9
|
-
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
10
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
11
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
|
12
|
-
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
13
|
-
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
14
|
-
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
1
|
+
Copyright (c) 2025 3dsource
|
|
2
|
+
All Rights Reserved.
|
|
3
|
+
|
|
4
|
+
This software and associated documentation files (the “Software”) are proprietary
|
|
5
|
+
and confidential. Unauthorized copying, modification, distribution, or any other
|
|
6
|
+
use of the Software, in whole or in part, without the prior written consent of
|
|
7
|
+
the copyright holder is strictly prohibited.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
10
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
11
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL THE
|
|
12
|
+
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
13
|
+
IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
14
|
+
CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
package/README.md
CHANGED
|
@@ -1,212 +1,212 @@
|
|
|
1
|
-
# @3dsource/angular-unreal-module
|
|
2
|
-
|
|
3
|
-
Standalone Angular integration for Unreal Engine Pixel Streaming. The package
|
|
4
|
-
provides the scene component, WebRTC and signalling lifecycle, NgRx state,
|
|
5
|
-
command/callback APIs, reconnection, file transfer and telemetry.
|
|
6
|
-
|
|
7
|
-
## Requirements
|
|
8
|
-
|
|
9
|
-
- Angular, Angular CDK and Angular Forms `>=19.0.0 <23.0.0`
|
|
10
|
-
- NgRx Store and Effects `>=19.0.0 <23.0.0`
|
|
11
|
-
- RxJS `>=7.8.0 <8.0.0`
|
|
12
|
-
- `@3dsource/source-ui-native >=1.0.9`
|
|
13
|
-
- `@3dsource/types-unreal >=0.0.7`
|
|
14
|
-
- `@3dsource/utils >=1.0.21`
|
|
15
|
-
- `provideHttpClient()` in the host application
|
|
16
|
-
|
|
17
|
-
## Installation
|
|
18
|
-
|
|
19
|
-
```shell
|
|
20
|
-
pnpm add @3dsource/angular-unreal-module @3dsource/source-ui-native @3dsource/types-unreal @3dsource/utils
|
|
21
|
-
```
|
|
22
|
-
|
|
23
|
-
The package is standalone and does not expose an NgModule.
|
|
24
|
-
|
|
25
|
-
## Setup
|
|
26
|
-
|
|
27
|
-
### 1. Register state and configuration once
|
|
28
|
-
|
|
29
|
-
Add the Unreal feature state, HTTP client and configuration at the application
|
|
30
|
-
root. `UNREAL_CONFIG` is required, although all its fields are optional.
|
|
31
|
-
|
|
32
|
-
<!-- prettier-ignore -->
|
|
33
|
-
```typescript
|
|
34
|
-
import { provideHttpClient } from '@angular/common/http';
|
|
35
|
-
import type { ApplicationConfig } from '@angular/core';
|
|
36
|
-
import { provideStore } from '@ngrx/store';
|
|
37
|
-
import {
|
|
38
|
-
provideUnrealState,
|
|
39
|
-
UNREAL_CONFIG,
|
|
40
|
-
type UnrealInitialConfig,
|
|
41
|
-
} from '@3dsource/angular-unreal-module';
|
|
42
|
-
|
|
43
|
-
const unrealConfig = {
|
|
44
|
-
regionsPingUrl: 'https://datacenter.3dsource.com/regions/',
|
|
45
|
-
dataChannelConnectionTimeout: 8000,
|
|
46
|
-
fpsMonitor: false,
|
|
47
|
-
autoHighResolution: false,
|
|
48
|
-
} satisfies UnrealInitialConfig;
|
|
49
|
-
|
|
50
|
-
export const appConfig: ApplicationConfig = {
|
|
51
|
-
providers: [
|
|
52
|
-
provideHttpClient(),
|
|
53
|
-
provideStore(),
|
|
54
|
-
provideUnrealState(),
|
|
55
|
-
{ provide: UNREAL_CONFIG, useValue: unrealConfig },
|
|
56
|
-
],
|
|
57
|
-
};
|
|
58
|
-
```
|
|
59
|
-
|
|
60
|
-
Omit `provideStore()` when the root NgRx store is already configured.
|
|
61
|
-
|
|
62
|
-
Available configuration fields:
|
|
63
|
-
|
|
64
|
-
| Field | Purpose |
|
|
65
|
-
| ------------------------------ | ---------------------------------------------- |
|
|
66
|
-
| `regionsPingUrl` | Region latency endpoint |
|
|
67
|
-
| `dataChannelConnectionTimeout` | DataChannel connection timeout in ms |
|
|
68
|
-
| `customErrorsEndpoint` | Custom error reporting endpoint |
|
|
69
|
-
| `commandTelemetryReceiver` | Command telemetry endpoint |
|
|
70
|
-
| `streamTelemetryV2Url` | Stream lifecycle telemetry endpoint |
|
|
71
|
-
| `screenLockerContainerId` | Container used by the screen-locker overlay |
|
|
72
|
-
| `fpsMonitor` | Enables FPS monitoring |
|
|
73
|
-
| `autoHighResolution` | Raises resolution after the scene becomes idle |
|
|
74
|
-
| `playwright` | Enables the test-specific service behaviour |
|
|
75
|
-
|
|
76
|
-
Use `{ provide: UNREAL_CONFIG, useValue: {} }` for the minimal configuration.
|
|
77
|
-
|
|
78
|
-
### 2. Boot the engine on a lazy route
|
|
79
|
-
|
|
80
|
-
Lazy-load the route file from the application router:
|
|
81
|
-
|
|
82
|
-
<!-- prettier-ignore -->
|
|
83
|
-
```typescript
|
|
84
|
-
import type { Routes } from '@angular/router';
|
|
85
|
-
|
|
86
|
-
export const APP_ROUTES: Routes = [
|
|
87
|
-
{
|
|
88
|
-
path: 'stream',
|
|
89
|
-
loadChildren: () =>
|
|
90
|
-
import('./stream/stream.routes').then((module) => module.STREAM_ROUTES),
|
|
91
|
-
},
|
|
92
|
-
];
|
|
93
|
-
```
|
|
94
|
-
|
|
95
|
-
Register `provideUnrealModule()` inside that lazy route file:
|
|
96
|
-
|
|
97
|
-
<!-- prettier-ignore -->
|
|
98
|
-
```typescript
|
|
99
|
-
import type { Routes } from '@angular/router';
|
|
100
|
-
import { provideUnrealModule } from '@3dsource/angular-unreal-module';
|
|
101
|
-
import { StreamComponent } from './stream.component';
|
|
102
|
-
|
|
103
|
-
export const STREAM_ROUTES: Routes = [
|
|
104
|
-
{
|
|
105
|
-
path: '',
|
|
106
|
-
component: StreamComponent,
|
|
107
|
-
providers: [provideUnrealModule()],
|
|
108
|
-
},
|
|
109
|
-
];
|
|
110
|
-
```
|
|
111
|
-
|
|
112
|
-
Keep `provideUnrealState()` and `UNREAL_CONFIG` at the application root.
|
|
113
|
-
The `loadChildren()` boundary keeps the streaming engine out of the initial
|
|
114
|
-
bundle. Route-scoping `provideUnrealModule()` tears down its effects when the
|
|
115
|
-
route is left.
|
|
116
|
-
|
|
117
|
-
### 3. Render the scene
|
|
118
|
-
|
|
119
|
-
```typescript
|
|
120
|
-
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
121
|
-
import { UnrealSceneComponent } from '@3dsource/angular-unreal-module';
|
|
122
|
-
|
|
123
|
-
@Component({
|
|
124
|
-
selector: 'app-stream',
|
|
125
|
-
imports: [UnrealSceneComponent],
|
|
126
|
-
template: `<app-unreal-scene />`,
|
|
127
|
-
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
128
|
-
})
|
|
129
|
-
export class StreamComponent {}
|
|
130
|
-
```
|
|
131
|
-
|
|
132
|
-
`UnrealSceneComponent` also accepts `isStudio`,
|
|
133
|
-
`useContainerAsSizeProvider` and `resolutionSize` inputs, and emits
|
|
134
|
-
`changeMouseOverScene`.
|
|
135
|
-
|
|
136
|
-
## Main API
|
|
137
|
-
|
|
138
|
-
- `provideUnrealState()` — registers the `unrealFeature` NgRx state.
|
|
139
|
-
- `provideUnrealModule()` — registers effects and boots streaming services.
|
|
140
|
-
- `UnrealSceneComponent` — renders and manages the Pixel Streaming scene.
|
|
141
|
-
- `UnrealCommunicatorService` — sends commands and UI interactions.
|
|
142
|
-
- `UnrealCallbackService` — observes Unreal callbacks and command responses.
|
|
143
|
-
- `unrealFeature`, exported selectors and actions — expose connection and scene
|
|
144
|
-
lifecycle state.
|
|
145
|
-
- `FileReceiverService` and `FileHandlerService` — receive files over the
|
|
146
|
-
DataChannel.
|
|
147
|
-
|
|
148
|
-
Command packet types are provided by `@3dsource/types-unreal`.
|
|
149
|
-
|
|
150
|
-
Run `pnpm demo:start` from the repository root to see the scene component in
|
|
151
|
-
the demo application.
|
|
152
|
-
|
|
153
|
-
## Optional prefetch scripts
|
|
154
|
-
|
|
155
|
-
The package publishes two dependency-free scripts for use in the document
|
|
156
|
-
`<head>` before Angular starts:
|
|
157
|
-
|
|
158
|
-
- `region-ping-prefetch.js` measures regions early and caches the closest one.
|
|
159
|
-
- `stream-prefetch.js` opens and parks an eligible WebRTC connection so Angular
|
|
160
|
-
can adopt it after bootstrap.
|
|
161
|
-
|
|
162
|
-
<!-- prettier-ignore -->
|
|
163
|
-
```html
|
|
164
|
-
<script
|
|
165
|
-
src="https://cdn.jsdelivr.net/npm/@3dsource/angular-unreal-module/js/region-ping-prefetch.js"
|
|
166
|
-
async
|
|
167
|
-
></script>
|
|
168
|
-
<script
|
|
169
|
-
src="https://cdn.jsdelivr.net/npm/@3dsource/angular-unreal-module/js/stream-prefetch.js"
|
|
170
|
-
async
|
|
171
|
-
></script>
|
|
172
|
-
```
|
|
173
|
-
|
|
174
|
-
`stream-prefetch.js` runs by default only on
|
|
175
|
-
`metabox-configurator/{modular|basic}/...` routes. It reads the same-origin
|
|
176
|
-
`assets/config.json`; override that path with `data-config-url` when needed.
|
|
177
|
-
Pin an exact package version in production when deterministic CDN assets are
|
|
178
|
-
required.
|
|
179
|
-
|
|
180
|
-
## Repository development
|
|
181
|
-
|
|
182
|
-
Run commands from the repository root:
|
|
183
|
-
|
|
184
|
-
```shell
|
|
185
|
-
pnpm unreal:build
|
|
186
|
-
pnpm unreal:build:watch
|
|
187
|
-
pnpm unreal:lint
|
|
188
|
-
pnpm unreal:test
|
|
189
|
-
pnpm unreal:test:watch
|
|
190
|
-
pnpm unreal:test:signalling
|
|
191
|
-
pnpm unreal:test:signalling:leaks
|
|
192
|
-
```
|
|
193
|
-
|
|
194
|
-
`unreal:build` builds the local `source-ui-native`, `types-unreal` and `utils`
|
|
195
|
-
dependencies before this package.
|
|
196
|
-
|
|
197
|
-
Release commands publish only this package:
|
|
198
|
-
|
|
199
|
-
```shell
|
|
200
|
-
pnpm unreal:release:patch
|
|
201
|
-
pnpm unreal:release:dev
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
After a successful publish, the release automatically purges the matching
|
|
205
|
-
jsDelivr tag. Retry a failed purge without rerunning the release:
|
|
206
|
-
|
|
207
|
-
```shell
|
|
208
|
-
pnpm unreal:purge-cdn -- latest
|
|
209
|
-
pnpm unreal:purge-cdn -- dev
|
|
210
|
-
```
|
|
211
|
-
|
|
212
|
-
Repository tooling requires Node.js 24.16.0 or newer and pnpm 11.
|
|
1
|
+
# @3dsource/angular-unreal-module
|
|
2
|
+
|
|
3
|
+
Standalone Angular integration for Unreal Engine Pixel Streaming. The package
|
|
4
|
+
provides the scene component, WebRTC and signalling lifecycle, NgRx state,
|
|
5
|
+
command/callback APIs, reconnection, file transfer and telemetry.
|
|
6
|
+
|
|
7
|
+
## Requirements
|
|
8
|
+
|
|
9
|
+
- Angular, Angular CDK and Angular Forms `>=19.0.0 <23.0.0`
|
|
10
|
+
- NgRx Store and Effects `>=19.0.0 <23.0.0`
|
|
11
|
+
- RxJS `>=7.8.0 <8.0.0`
|
|
12
|
+
- `@3dsource/source-ui-native >=1.0.9`
|
|
13
|
+
- `@3dsource/types-unreal >=0.0.7`
|
|
14
|
+
- `@3dsource/utils >=1.0.21`
|
|
15
|
+
- `provideHttpClient()` in the host application
|
|
16
|
+
|
|
17
|
+
## Installation
|
|
18
|
+
|
|
19
|
+
```shell
|
|
20
|
+
pnpm add @3dsource/angular-unreal-module @3dsource/source-ui-native @3dsource/types-unreal @3dsource/utils
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
The package is standalone and does not expose an NgModule.
|
|
24
|
+
|
|
25
|
+
## Setup
|
|
26
|
+
|
|
27
|
+
### 1. Register state and configuration once
|
|
28
|
+
|
|
29
|
+
Add the Unreal feature state, HTTP client and configuration at the application
|
|
30
|
+
root. `UNREAL_CONFIG` is required, although all its fields are optional.
|
|
31
|
+
|
|
32
|
+
<!-- prettier-ignore -->
|
|
33
|
+
```typescript
|
|
34
|
+
import { provideHttpClient } from '@angular/common/http';
|
|
35
|
+
import type { ApplicationConfig } from '@angular/core';
|
|
36
|
+
import { provideStore } from '@ngrx/store';
|
|
37
|
+
import {
|
|
38
|
+
provideUnrealState,
|
|
39
|
+
UNREAL_CONFIG,
|
|
40
|
+
type UnrealInitialConfig,
|
|
41
|
+
} from '@3dsource/angular-unreal-module';
|
|
42
|
+
|
|
43
|
+
const unrealConfig = {
|
|
44
|
+
regionsPingUrl: 'https://datacenter.3dsource.com/regions/',
|
|
45
|
+
dataChannelConnectionTimeout: 8000,
|
|
46
|
+
fpsMonitor: false,
|
|
47
|
+
autoHighResolution: false,
|
|
48
|
+
} satisfies UnrealInitialConfig;
|
|
49
|
+
|
|
50
|
+
export const appConfig: ApplicationConfig = {
|
|
51
|
+
providers: [
|
|
52
|
+
provideHttpClient(),
|
|
53
|
+
provideStore(),
|
|
54
|
+
provideUnrealState(),
|
|
55
|
+
{ provide: UNREAL_CONFIG, useValue: unrealConfig },
|
|
56
|
+
],
|
|
57
|
+
};
|
|
58
|
+
```
|
|
59
|
+
|
|
60
|
+
Omit `provideStore()` when the root NgRx store is already configured.
|
|
61
|
+
|
|
62
|
+
Available configuration fields:
|
|
63
|
+
|
|
64
|
+
| Field | Purpose |
|
|
65
|
+
| ------------------------------ | ---------------------------------------------- |
|
|
66
|
+
| `regionsPingUrl` | Region latency endpoint |
|
|
67
|
+
| `dataChannelConnectionTimeout` | DataChannel connection timeout in ms |
|
|
68
|
+
| `customErrorsEndpoint` | Custom error reporting endpoint |
|
|
69
|
+
| `commandTelemetryReceiver` | Command telemetry endpoint |
|
|
70
|
+
| `streamTelemetryV2Url` | Stream lifecycle telemetry endpoint |
|
|
71
|
+
| `screenLockerContainerId` | Container used by the screen-locker overlay |
|
|
72
|
+
| `fpsMonitor` | Enables FPS monitoring |
|
|
73
|
+
| `autoHighResolution` | Raises resolution after the scene becomes idle |
|
|
74
|
+
| `playwright` | Enables the test-specific service behaviour |
|
|
75
|
+
|
|
76
|
+
Use `{ provide: UNREAL_CONFIG, useValue: {} }` for the minimal configuration.
|
|
77
|
+
|
|
78
|
+
### 2. Boot the engine on a lazy route
|
|
79
|
+
|
|
80
|
+
Lazy-load the route file from the application router:
|
|
81
|
+
|
|
82
|
+
<!-- prettier-ignore -->
|
|
83
|
+
```typescript
|
|
84
|
+
import type { Routes } from '@angular/router';
|
|
85
|
+
|
|
86
|
+
export const APP_ROUTES: Routes = [
|
|
87
|
+
{
|
|
88
|
+
path: 'stream',
|
|
89
|
+
loadChildren: () =>
|
|
90
|
+
import('./stream/stream.routes').then((module) => module.STREAM_ROUTES),
|
|
91
|
+
},
|
|
92
|
+
];
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
Register `provideUnrealModule()` inside that lazy route file:
|
|
96
|
+
|
|
97
|
+
<!-- prettier-ignore -->
|
|
98
|
+
```typescript
|
|
99
|
+
import type { Routes } from '@angular/router';
|
|
100
|
+
import { provideUnrealModule } from '@3dsource/angular-unreal-module';
|
|
101
|
+
import { StreamComponent } from './stream.component';
|
|
102
|
+
|
|
103
|
+
export const STREAM_ROUTES: Routes = [
|
|
104
|
+
{
|
|
105
|
+
path: '',
|
|
106
|
+
component: StreamComponent,
|
|
107
|
+
providers: [provideUnrealModule()],
|
|
108
|
+
},
|
|
109
|
+
];
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
Keep `provideUnrealState()` and `UNREAL_CONFIG` at the application root.
|
|
113
|
+
The `loadChildren()` boundary keeps the streaming engine out of the initial
|
|
114
|
+
bundle. Route-scoping `provideUnrealModule()` tears down its effects when the
|
|
115
|
+
route is left.
|
|
116
|
+
|
|
117
|
+
### 3. Render the scene
|
|
118
|
+
|
|
119
|
+
```typescript
|
|
120
|
+
import { ChangeDetectionStrategy, Component } from '@angular/core';
|
|
121
|
+
import { UnrealSceneComponent } from '@3dsource/angular-unreal-module';
|
|
122
|
+
|
|
123
|
+
@Component({
|
|
124
|
+
selector: 'app-stream',
|
|
125
|
+
imports: [UnrealSceneComponent],
|
|
126
|
+
template: `<app-unreal-scene />`,
|
|
127
|
+
changeDetection: ChangeDetectionStrategy.OnPush,
|
|
128
|
+
})
|
|
129
|
+
export class StreamComponent {}
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
`UnrealSceneComponent` also accepts `isStudio`,
|
|
133
|
+
`useContainerAsSizeProvider` and `resolutionSize` inputs, and emits
|
|
134
|
+
`changeMouseOverScene`.
|
|
135
|
+
|
|
136
|
+
## Main API
|
|
137
|
+
|
|
138
|
+
- `provideUnrealState()` — registers the `unrealFeature` NgRx state.
|
|
139
|
+
- `provideUnrealModule()` — registers effects and boots streaming services.
|
|
140
|
+
- `UnrealSceneComponent` — renders and manages the Pixel Streaming scene.
|
|
141
|
+
- `UnrealCommunicatorService` — sends commands and UI interactions.
|
|
142
|
+
- `UnrealCallbackService` — observes Unreal callbacks and command responses.
|
|
143
|
+
- `unrealFeature`, exported selectors and actions — expose connection and scene
|
|
144
|
+
lifecycle state.
|
|
145
|
+
- `FileReceiverService` and `FileHandlerService` — receive files over the
|
|
146
|
+
DataChannel.
|
|
147
|
+
|
|
148
|
+
Command packet types are provided by `@3dsource/types-unreal`.
|
|
149
|
+
|
|
150
|
+
Run `pnpm demo:start` from the repository root to see the scene component in
|
|
151
|
+
the demo application.
|
|
152
|
+
|
|
153
|
+
## Optional prefetch scripts
|
|
154
|
+
|
|
155
|
+
The package publishes two dependency-free scripts for use in the document
|
|
156
|
+
`<head>` before Angular starts:
|
|
157
|
+
|
|
158
|
+
- `region-ping-prefetch.js` measures regions early and caches the closest one.
|
|
159
|
+
- `stream-prefetch.js` opens and parks an eligible WebRTC connection so Angular
|
|
160
|
+
can adopt it after bootstrap.
|
|
161
|
+
|
|
162
|
+
<!-- prettier-ignore -->
|
|
163
|
+
```html
|
|
164
|
+
<script
|
|
165
|
+
src="https://cdn.jsdelivr.net/npm/@3dsource/angular-unreal-module/js/region-ping-prefetch.js"
|
|
166
|
+
async
|
|
167
|
+
></script>
|
|
168
|
+
<script
|
|
169
|
+
src="https://cdn.jsdelivr.net/npm/@3dsource/angular-unreal-module/js/stream-prefetch.js"
|
|
170
|
+
async
|
|
171
|
+
></script>
|
|
172
|
+
```
|
|
173
|
+
|
|
174
|
+
`stream-prefetch.js` runs by default only on
|
|
175
|
+
`metabox-configurator/{modular|basic}/...` routes. It reads the same-origin
|
|
176
|
+
`assets/config.json`; override that path with `data-config-url` when needed.
|
|
177
|
+
Pin an exact package version in production when deterministic CDN assets are
|
|
178
|
+
required.
|
|
179
|
+
|
|
180
|
+
## Repository development
|
|
181
|
+
|
|
182
|
+
Run commands from the repository root:
|
|
183
|
+
|
|
184
|
+
```shell
|
|
185
|
+
pnpm unreal:build
|
|
186
|
+
pnpm unreal:build:watch
|
|
187
|
+
pnpm unreal:lint
|
|
188
|
+
pnpm unreal:test
|
|
189
|
+
pnpm unreal:test:watch
|
|
190
|
+
pnpm unreal:test:signalling
|
|
191
|
+
pnpm unreal:test:signalling:leaks
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
`unreal:build` builds the local `source-ui-native`, `types-unreal` and `utils`
|
|
195
|
+
dependencies before this package.
|
|
196
|
+
|
|
197
|
+
Release commands publish only this package:
|
|
198
|
+
|
|
199
|
+
```shell
|
|
200
|
+
pnpm unreal:release:patch
|
|
201
|
+
pnpm unreal:release:dev
|
|
202
|
+
```
|
|
203
|
+
|
|
204
|
+
After a successful publish, the release automatically purges the matching
|
|
205
|
+
jsDelivr tag. Retry a failed purge without rerunning the release:
|
|
206
|
+
|
|
207
|
+
```shell
|
|
208
|
+
pnpm unreal:purge-cdn -- latest
|
|
209
|
+
pnpm unreal:purge-cdn -- dev
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
Repository tooling requires Node.js 24.16.0 or newer and pnpm 11.18.0.
|