@blcklab/anyo-player 0.5.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/CHANGELOG.md +19 -0
- package/LICENSE +21 -0
- package/README.md +304 -0
- package/dist/createAnyoPlayer.d.ts +3 -0
- package/dist/createAnyoPlayer.d.ts.map +1 -0
- package/dist/createAnyoPlayer.js +5 -0
- package/dist/createAnyoPlayer.js.map +1 -0
- package/dist/element-define.d.ts +2 -0
- package/dist/element-define.d.ts.map +1 -0
- package/dist/element-define.js +4 -0
- package/dist/element-define.js.map +1 -0
- package/dist/element.d.ts +66 -0
- package/dist/element.d.ts.map +1 -0
- package/dist/element.js +363 -0
- package/dist/element.js.map +1 -0
- package/dist/errors.d.ts +11 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +21 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +10 -0
- package/dist/index.js.map +1 -0
- package/dist/inputBindings.d.ts +3 -0
- package/dist/inputBindings.d.ts.map +1 -0
- package/dist/inputBindings.js +3 -0
- package/dist/inputBindings.js.map +1 -0
- package/dist/internal/AccessibilityController.d.ts +50 -0
- package/dist/internal/AccessibilityController.d.ts.map +1 -0
- package/dist/internal/AccessibilityController.js +212 -0
- package/dist/internal/AccessibilityController.js.map +1 -0
- package/dist/internal/AnyoPlayerCore.d.ts +357 -0
- package/dist/internal/AnyoPlayerCore.d.ts.map +1 -0
- package/dist/internal/AnyoPlayerCore.js +3880 -0
- package/dist/internal/AnyoPlayerCore.js.map +1 -0
- package/dist/internal/AudioController.d.ts +37 -0
- package/dist/internal/AudioController.d.ts.map +1 -0
- package/dist/internal/AudioController.js +167 -0
- package/dist/internal/AudioController.js.map +1 -0
- package/dist/internal/CaptionController.d.ts +16 -0
- package/dist/internal/CaptionController.d.ts.map +1 -0
- package/dist/internal/CaptionController.js +83 -0
- package/dist/internal/CaptionController.js.map +1 -0
- package/dist/internal/ContainerHost.d.ts +17 -0
- package/dist/internal/ContainerHost.d.ts.map +1 -0
- package/dist/internal/ContainerHost.js +110 -0
- package/dist/internal/ContainerHost.js.map +1 -0
- package/dist/internal/DesktopInputController.d.ts +80 -0
- package/dist/internal/DesktopInputController.d.ts.map +1 -0
- package/dist/internal/DesktopInputController.js +367 -0
- package/dist/internal/DesktopInputController.js.map +1 -0
- package/dist/internal/EmbeddingController.d.ts +33 -0
- package/dist/internal/EmbeddingController.d.ts.map +1 -0
- package/dist/internal/EmbeddingController.js +161 -0
- package/dist/internal/EmbeddingController.js.map +1 -0
- package/dist/internal/EventHub.d.ts +7 -0
- package/dist/internal/EventHub.d.ts.map +1 -0
- package/dist/internal/EventHub.js +27 -0
- package/dist/internal/EventHub.js.map +1 -0
- package/dist/internal/FrameworkAdapterController.d.ts +46 -0
- package/dist/internal/FrameworkAdapterController.d.ts.map +1 -0
- package/dist/internal/FrameworkAdapterController.js +165 -0
- package/dist/internal/FrameworkAdapterController.js.map +1 -0
- package/dist/internal/FullscreenController.d.ts +29 -0
- package/dist/internal/FullscreenController.d.ts.map +1 -0
- package/dist/internal/FullscreenController.js +122 -0
- package/dist/internal/FullscreenController.js.map +1 -0
- package/dist/internal/GamepadController.d.ts +54 -0
- package/dist/internal/GamepadController.d.ts.map +1 -0
- package/dist/internal/GamepadController.js +276 -0
- package/dist/internal/GamepadController.js.map +1 -0
- package/dist/internal/InputBindingsController.d.ts +34 -0
- package/dist/internal/InputBindingsController.d.ts.map +1 -0
- package/dist/internal/InputBindingsController.js +223 -0
- package/dist/internal/InputBindingsController.js.map +1 -0
- package/dist/internal/InteractionPresentationController.d.ts +38 -0
- package/dist/internal/InteractionPresentationController.d.ts.map +1 -0
- package/dist/internal/InteractionPresentationController.js +208 -0
- package/dist/internal/InteractionPresentationController.js.map +1 -0
- package/dist/internal/MapController.d.ts +16 -0
- package/dist/internal/MapController.d.ts.map +1 -0
- package/dist/internal/MapController.js +68 -0
- package/dist/internal/MapController.js.map +1 -0
- package/dist/internal/PerformanceController.d.ts +94 -0
- package/dist/internal/PerformanceController.d.ts.map +1 -0
- package/dist/internal/PerformanceController.js +455 -0
- package/dist/internal/PerformanceController.js.map +1 -0
- package/dist/internal/PlayerCameraController.d.ts +79 -0
- package/dist/internal/PlayerCameraController.d.ts.map +1 -0
- package/dist/internal/PlayerCameraController.js +551 -0
- package/dist/internal/PlayerCameraController.js.map +1 -0
- package/dist/internal/ResponsiveController.d.ts +37 -0
- package/dist/internal/ResponsiveController.d.ts.map +1 -0
- package/dist/internal/ResponsiveController.js +143 -0
- package/dist/internal/ResponsiveController.js.map +1 -0
- package/dist/internal/RuntimeFactory.d.ts +42 -0
- package/dist/internal/RuntimeFactory.d.ts.map +1 -0
- package/dist/internal/RuntimeFactory.js +93 -0
- package/dist/internal/RuntimeFactory.js.map +1 -0
- package/dist/internal/ScreenshotController.d.ts +8 -0
- package/dist/internal/ScreenshotController.d.ts.map +1 -0
- package/dist/internal/ScreenshotController.js +47 -0
- package/dist/internal/ScreenshotController.js.map +1 -0
- package/dist/internal/SessionController.d.ts +44 -0
- package/dist/internal/SessionController.d.ts.map +1 -0
- package/dist/internal/SessionController.js +411 -0
- package/dist/internal/SessionController.js.map +1 -0
- package/dist/internal/SourceResolver.d.ts +31 -0
- package/dist/internal/SourceResolver.d.ts.map +1 -0
- package/dist/internal/SourceResolver.js +362 -0
- package/dist/internal/SourceResolver.js.map +1 -0
- package/dist/internal/StateMachine.d.ts +10 -0
- package/dist/internal/StateMachine.d.ts.map +1 -0
- package/dist/internal/StateMachine.js +35 -0
- package/dist/internal/StateMachine.js.map +1 -0
- package/dist/internal/StyleController.d.ts +14 -0
- package/dist/internal/StyleController.d.ts.map +1 -0
- package/dist/internal/StyleController.js +116 -0
- package/dist/internal/StyleController.js.map +1 -0
- package/dist/internal/TelemetryController.d.ts +28 -0
- package/dist/internal/TelemetryController.d.ts.map +1 -0
- package/dist/internal/TelemetryController.js +113 -0
- package/dist/internal/TelemetryController.js.map +1 -0
- package/dist/internal/TouchInputController.d.ts +73 -0
- package/dist/internal/TouchInputController.d.ts.map +1 -0
- package/dist/internal/TouchInputController.js +379 -0
- package/dist/internal/TouchInputController.js.map +1 -0
- package/dist/internal/VfxController.d.ts +11 -0
- package/dist/internal/VfxController.d.ts.map +1 -0
- package/dist/internal/VfxController.js +23 -0
- package/dist/internal/VfxController.js.map +1 -0
- package/dist/internal/ViewPreferenceController.d.ts +40 -0
- package/dist/internal/ViewPreferenceController.d.ts.map +1 -0
- package/dist/internal/ViewPreferenceController.js +132 -0
- package/dist/internal/ViewPreferenceController.js.map +1 -0
- package/dist/internal/VisibilityController.d.ts +26 -0
- package/dist/internal/VisibilityController.d.ts.map +1 -0
- package/dist/internal/VisibilityController.js +62 -0
- package/dist/internal/VisibilityController.js.map +1 -0
- package/dist/internal/XRController.d.ts +42 -0
- package/dist/internal/XRController.d.ts.map +1 -0
- package/dist/internal/XRController.js +169 -0
- package/dist/internal/XRController.js.map +1 -0
- package/dist/internal/sourceUrls.d.ts +6 -0
- package/dist/internal/sourceUrls.d.ts.map +1 -0
- package/dist/internal/sourceUrls.js +79 -0
- package/dist/internal/sourceUrls.js.map +1 -0
- package/dist/react.d.ts +44 -0
- package/dist/react.d.ts.map +1 -0
- package/dist/react.js +115 -0
- package/dist/react.js.map +1 -0
- package/dist/session.d.ts +3 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +3 -0
- package/dist/session.js.map +1 -0
- package/dist/styleText.d.ts +2 -0
- package/dist/styleText.d.ts.map +1 -0
- package/dist/styleText.js +2 -0
- package/dist/styleText.js.map +1 -0
- package/dist/styles.css +573 -0
- package/dist/types.d.ts +1476 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +2 -0
- package/dist/types.js.map +1 -0
- package/dist/ui/PlayerUI.d.ts +193 -0
- package/dist/ui/PlayerUI.d.ts.map +1 -0
- package/dist/ui/PlayerUI.js +1201 -0
- package/dist/ui/PlayerUI.js.map +1 -0
- package/dist/vue.d.ts +97 -0
- package/dist/vue.d.ts.map +1 -0
- package/dist/vue.js +126 -0
- package/dist/vue.js.map +1 -0
- package/dist/worldCache.d.ts +16 -0
- package/dist/worldCache.d.ts.map +1 -0
- package/dist/worldCache.js +46 -0
- package/dist/worldCache.js.map +1 -0
- package/dist/worldSources.d.ts +19 -0
- package/dist/worldSources.d.ts.map +1 -0
- package/dist/worldSources.js +51 -0
- package/dist/worldSources.js.map +1 -0
- package/package.json +114 -0
|
@@ -0,0 +1,362 @@
|
|
|
1
|
+
import { migrateWorldDocument } from '@blcklab/anyo';
|
|
2
|
+
import { AnyoPlayerError, isAbortError } from '../errors.js';
|
|
3
|
+
import { resolveDocumentResourceUrls, resolveDocumentResourceUrlsWith } from './sourceUrls.js';
|
|
4
|
+
function isRecord(value) {
|
|
5
|
+
return Boolean(value && typeof value === 'object' && !Array.isArray(value));
|
|
6
|
+
}
|
|
7
|
+
function isWorldDocument(value) {
|
|
8
|
+
return isRecord(value) && typeof value.version === 'string';
|
|
9
|
+
}
|
|
10
|
+
function isUrlSource(value) {
|
|
11
|
+
return isRecord(value) && 'url' in value && (typeof value.url === 'string' || value.url instanceof URL);
|
|
12
|
+
}
|
|
13
|
+
function isJsonSource(value) {
|
|
14
|
+
return isRecord(value) && typeof value.json === 'string';
|
|
15
|
+
}
|
|
16
|
+
function isDocumentSource(value) {
|
|
17
|
+
return isRecord(value) && 'document' in value && isWorldDocument(value.document);
|
|
18
|
+
}
|
|
19
|
+
function isBlobSource(value) {
|
|
20
|
+
return isRecord(value) && value.blob instanceof Blob;
|
|
21
|
+
}
|
|
22
|
+
function isFileMapSource(value) {
|
|
23
|
+
return isRecord(value) && 'files' in value && (value.files instanceof Map || isRecord(value.files));
|
|
24
|
+
}
|
|
25
|
+
function isArchiveSource(value) {
|
|
26
|
+
return isRecord(value) && 'archive' in value && (value.archive instanceof Blob || value.archive instanceof ArrayBuffer);
|
|
27
|
+
}
|
|
28
|
+
function cloneDocument(document) { return structuredClone(document); }
|
|
29
|
+
function currentLocationHref() { return typeof globalThis.location?.href === 'string' ? globalThis.location.href : undefined; }
|
|
30
|
+
function normalizeLoading(value) {
|
|
31
|
+
if (value === false)
|
|
32
|
+
return { cache: null, cacheMode: 'network-only', migrate: true, verifyIntegrity: true, maxDocumentBytes: 16 * 1024 * 1024, archiveDecoder: undefined };
|
|
33
|
+
const maxDocumentBytes = value?.maxDocumentBytes ?? 16 * 1024 * 1024;
|
|
34
|
+
if (!Number.isFinite(maxDocumentBytes) || maxDocumentBytes < 1024 || maxDocumentBytes > 256 * 1024 * 1024) {
|
|
35
|
+
throw new TypeError('loading.maxDocumentBytes must be between 1 KiB and 256 MiB.');
|
|
36
|
+
}
|
|
37
|
+
const cacheMode = value?.cacheMode ?? 'network-first';
|
|
38
|
+
if (!['network-first', 'cache-first', 'offline-first', 'network-only'].includes(cacheMode))
|
|
39
|
+
throw new TypeError('loading.cacheMode is invalid.');
|
|
40
|
+
return {
|
|
41
|
+
cache: value?.cache === false || !value?.cache ? null : value.cache,
|
|
42
|
+
cacheMode,
|
|
43
|
+
migrate: value?.migrate !== false,
|
|
44
|
+
verifyIntegrity: value?.verifyIntegrity !== false,
|
|
45
|
+
maxDocumentBytes: Math.trunc(maxDocumentBytes),
|
|
46
|
+
archiveDecoder: value?.archiveDecoder,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
function utf8Bytes(value) { return new TextEncoder().encode(value); }
|
|
50
|
+
function parseJson(json) {
|
|
51
|
+
let value;
|
|
52
|
+
try {
|
|
53
|
+
value = JSON.parse(json);
|
|
54
|
+
}
|
|
55
|
+
catch (error) {
|
|
56
|
+
throw new AnyoPlayerError('PLAYER_JSON_PARSE_FAILED', 'The Anyo Player source contains invalid JSON.', { cause: error });
|
|
57
|
+
}
|
|
58
|
+
if (!isWorldDocument(value))
|
|
59
|
+
throw new AnyoPlayerError('PLAYER_INVALID_SOURCE', 'The parsed Anyo Player source must be a JSON object with a string version field.');
|
|
60
|
+
return value;
|
|
61
|
+
}
|
|
62
|
+
function normalizePath(value) {
|
|
63
|
+
const parts = [];
|
|
64
|
+
for (const part of value.replaceAll('\\', '/').split('/')) {
|
|
65
|
+
if (!part || part === '.')
|
|
66
|
+
continue;
|
|
67
|
+
if (part === '..')
|
|
68
|
+
parts.pop();
|
|
69
|
+
else
|
|
70
|
+
parts.push(part);
|
|
71
|
+
}
|
|
72
|
+
return parts.join('/');
|
|
73
|
+
}
|
|
74
|
+
function directoryOf(path) {
|
|
75
|
+
const normalized = normalizePath(path);
|
|
76
|
+
const index = normalized.lastIndexOf('/');
|
|
77
|
+
return index < 0 ? '' : normalized.slice(0, index + 1);
|
|
78
|
+
}
|
|
79
|
+
function isAbsoluteResource(value) {
|
|
80
|
+
return /^(?:[a-z][a-z0-9+.-]*:|\/\/|#)/i.test(value);
|
|
81
|
+
}
|
|
82
|
+
function toMap(files) {
|
|
83
|
+
const result = new Map();
|
|
84
|
+
const entries = files instanceof Map ? files.entries() : Object.entries(files);
|
|
85
|
+
for (const [key, value] of entries)
|
|
86
|
+
result.set(normalizePath(key), value);
|
|
87
|
+
return result;
|
|
88
|
+
}
|
|
89
|
+
function selectEntry(files, requested) {
|
|
90
|
+
if (requested) {
|
|
91
|
+
const normalized = normalizePath(requested);
|
|
92
|
+
if (!files.has(normalized))
|
|
93
|
+
throw new AnyoPlayerError('PLAYER_PACKAGE_ENTRY_MISSING', `World package entry "${normalized}" does not exist.`);
|
|
94
|
+
return normalized;
|
|
95
|
+
}
|
|
96
|
+
const preferred = ['world.anyo.json', 'world.json', 'anyo.json'];
|
|
97
|
+
for (const value of preferred)
|
|
98
|
+
if (files.has(value))
|
|
99
|
+
return value;
|
|
100
|
+
const candidates = [...files.keys()].filter(value => value.endsWith('.anyo.json') || value.endsWith('.json')).sort();
|
|
101
|
+
const first = candidates[0];
|
|
102
|
+
if (!first)
|
|
103
|
+
throw new AnyoPlayerError('PLAYER_PACKAGE_ENTRY_MISSING', 'World package contains no .anyo.json or .json entry.');
|
|
104
|
+
return first;
|
|
105
|
+
}
|
|
106
|
+
async function asBytes(value, signal) {
|
|
107
|
+
if (signal.aborted)
|
|
108
|
+
throw signal.reason;
|
|
109
|
+
if (typeof value === 'string')
|
|
110
|
+
return utf8Bytes(value);
|
|
111
|
+
if (value instanceof ArrayBuffer)
|
|
112
|
+
return new Uint8Array(value);
|
|
113
|
+
return new Uint8Array(await value.arrayBuffer());
|
|
114
|
+
}
|
|
115
|
+
function bytesToText(bytes) { return new TextDecoder().decode(bytes); }
|
|
116
|
+
function encodeBase64(bytes) {
|
|
117
|
+
let binary = '';
|
|
118
|
+
for (const value of bytes)
|
|
119
|
+
binary += String.fromCharCode(value);
|
|
120
|
+
if (typeof btoa === 'function')
|
|
121
|
+
return btoa(binary);
|
|
122
|
+
const BufferValue = globalThis.Buffer;
|
|
123
|
+
if (BufferValue)
|
|
124
|
+
return BufferValue.from(bytes).toString('base64');
|
|
125
|
+
throw new TypeError('Base64 encoding is unavailable.');
|
|
126
|
+
}
|
|
127
|
+
function toDigestBuffer(bytes) {
|
|
128
|
+
const buffer = bytes.buffer;
|
|
129
|
+
if (buffer instanceof ArrayBuffer) {
|
|
130
|
+
if (bytes.byteOffset === 0 && bytes.byteLength === buffer.byteLength)
|
|
131
|
+
return buffer;
|
|
132
|
+
return buffer.slice(bytes.byteOffset, bytes.byteOffset + bytes.byteLength);
|
|
133
|
+
}
|
|
134
|
+
return Uint8Array.from(bytes).buffer;
|
|
135
|
+
}
|
|
136
|
+
async function verifyIntegrity(bytes, integrity, required) {
|
|
137
|
+
if (!integrity)
|
|
138
|
+
return 'not-requested';
|
|
139
|
+
const subtle = globalThis.crypto?.subtle;
|
|
140
|
+
if (!subtle) {
|
|
141
|
+
if (required)
|
|
142
|
+
throw new AnyoPlayerError('PLAYER_INTEGRITY_UNAVAILABLE', 'SHA-256 integrity verification is unavailable in this environment.');
|
|
143
|
+
return 'unavailable';
|
|
144
|
+
}
|
|
145
|
+
const digest = new Uint8Array(await subtle.digest('SHA-256', toDigestBuffer(bytes)));
|
|
146
|
+
const expected = integrity.trim();
|
|
147
|
+
const actualBase64 = `sha256-${encodeBase64(digest)}`;
|
|
148
|
+
const actualHex = [...digest].map(value => value.toString(16).padStart(2, '0')).join('');
|
|
149
|
+
const matches = expected === actualBase64 || expected.toLowerCase() === `sha256:${actualHex}` || expected.toLowerCase() === actualHex;
|
|
150
|
+
if (!matches)
|
|
151
|
+
throw new AnyoPlayerError('PLAYER_INTEGRITY_FAILED', 'The Anyo world source failed SHA-256 integrity verification.');
|
|
152
|
+
return 'verified';
|
|
153
|
+
}
|
|
154
|
+
export class SourceResolver {
|
|
155
|
+
baseUrl;
|
|
156
|
+
fetchImplementation;
|
|
157
|
+
loading;
|
|
158
|
+
constructor(options = {}) {
|
|
159
|
+
const fallbackBase = currentLocationHref();
|
|
160
|
+
if (options.baseUrl !== undefined) {
|
|
161
|
+
try {
|
|
162
|
+
this.baseUrl = new URL(String(options.baseUrl), fallbackBase).href;
|
|
163
|
+
}
|
|
164
|
+
catch (error) {
|
|
165
|
+
throw new AnyoPlayerError('PLAYER_INVALID_SOURCE', `Invalid Anyo Player baseUrl "${String(options.baseUrl)}".`, { cause: error });
|
|
166
|
+
}
|
|
167
|
+
}
|
|
168
|
+
else
|
|
169
|
+
this.baseUrl = fallbackBase;
|
|
170
|
+
const fetchImplementation = options.fetch ?? globalThis.fetch;
|
|
171
|
+
this.fetchImplementation = fetchImplementation ? ((input, init) => Reflect.apply(fetchImplementation, globalThis, [input, init])) : undefined;
|
|
172
|
+
this.loading = normalizeLoading(options.loading);
|
|
173
|
+
}
|
|
174
|
+
async resolve(source, signal) {
|
|
175
|
+
if (signal.aborted)
|
|
176
|
+
throw this.abortedError(signal.reason);
|
|
177
|
+
if (source instanceof URL)
|
|
178
|
+
return this.fetchUrl({ url: source }, signal);
|
|
179
|
+
if (source instanceof Blob)
|
|
180
|
+
return this.resolveBlob({ blob: source, name: 'world.anyo.json' }, signal);
|
|
181
|
+
if (typeof source === 'string') {
|
|
182
|
+
const trimmed = source.trimStart();
|
|
183
|
+
if (trimmed.startsWith('{'))
|
|
184
|
+
return this.finish(parseJson(source), { kind: 'json', bytes: utf8Bytes(source).byteLength }, undefined, undefined, 'not-requested');
|
|
185
|
+
return this.fetchUrl({ url: source }, signal);
|
|
186
|
+
}
|
|
187
|
+
if (isWorldDocument(source))
|
|
188
|
+
return this.finish(cloneDocument(source), { kind: 'document', bytes: null }, undefined, undefined, 'not-requested');
|
|
189
|
+
if (isDocumentSource(source))
|
|
190
|
+
return this.finish(cloneDocument(source.document), { kind: 'document', bytes: null }, undefined, undefined, 'not-requested');
|
|
191
|
+
if (isJsonSource(source))
|
|
192
|
+
return this.resolveJson(source, signal);
|
|
193
|
+
if (isUrlSource(source))
|
|
194
|
+
return this.fetchUrl(source, signal);
|
|
195
|
+
if (isBlobSource(source))
|
|
196
|
+
return this.resolveBlob(source, signal);
|
|
197
|
+
if (isFileMapSource(source))
|
|
198
|
+
return this.resolveFileMap(source, signal);
|
|
199
|
+
if (isArchiveSource(source))
|
|
200
|
+
return this.resolveArchive(source, signal);
|
|
201
|
+
throw new AnyoPlayerError('PLAYER_INVALID_SOURCE', 'Unsupported Anyo Player source. Use a WorldDocument, JSON, URL, Blob/File, virtual file map, or archive source.');
|
|
202
|
+
}
|
|
203
|
+
async resolveJson(source, signal) {
|
|
204
|
+
const bytes = utf8Bytes(source.json);
|
|
205
|
+
this.assertSize(bytes.byteLength);
|
|
206
|
+
const integrity = await verifyIntegrity(bytes, source.integrity, this.loading.verifyIntegrity);
|
|
207
|
+
const documentUrl = source.baseUrl ? new URL(String(source.baseUrl), this.baseUrl).href : undefined;
|
|
208
|
+
return this.finish(parseJson(source.json), { kind: 'json', bytes: bytes.byteLength }, documentUrl, undefined, integrity);
|
|
209
|
+
}
|
|
210
|
+
async resolveBlob(source, signal) {
|
|
211
|
+
const bytes = await asBytes(source.blob, signal);
|
|
212
|
+
this.assertSize(bytes.byteLength);
|
|
213
|
+
const integrity = await verifyIntegrity(bytes, source.integrity, this.loading.verifyIntegrity);
|
|
214
|
+
const documentUrl = source.baseUrl ? new URL(String(source.baseUrl), this.baseUrl).href : undefined;
|
|
215
|
+
return this.finish(parseJson(bytesToText(bytes)), { kind: 'blob', bytes: bytes.byteLength }, documentUrl, undefined, integrity);
|
|
216
|
+
}
|
|
217
|
+
async resolveArchive(source, signal) {
|
|
218
|
+
const decoder = source.decoder ?? this.loading.archiveDecoder;
|
|
219
|
+
if (!decoder)
|
|
220
|
+
throw new AnyoPlayerError('PLAYER_ARCHIVE_DECODER_REQUIRED', 'Archive loading requires a trusted host-provided decoder.');
|
|
221
|
+
const bytes = await asBytes(source.archive, signal);
|
|
222
|
+
this.assertSize(bytes.byteLength);
|
|
223
|
+
const integrity = await verifyIntegrity(bytes, source.integrity, this.loading.verifyIntegrity);
|
|
224
|
+
const decoded = await decoder(source.archive, signal);
|
|
225
|
+
const resolved = await this.resolveFileMap({ ...decoded, ...(source.entry ? { entry: source.entry } : {}) }, signal);
|
|
226
|
+
return { ...resolved, info: { ...resolved.info, kind: 'archive', bytes: bytes.byteLength, integrity } };
|
|
227
|
+
}
|
|
228
|
+
async resolveFileMap(source, signal) {
|
|
229
|
+
const files = toMap(source.files);
|
|
230
|
+
const entry = selectEntry(files, source.entry);
|
|
231
|
+
const entryValue = files.get(entry);
|
|
232
|
+
if (entryValue === undefined)
|
|
233
|
+
throw new AnyoPlayerError('PLAYER_PACKAGE_ENTRY_MISSING', `World package entry "${entry}" is missing.`);
|
|
234
|
+
const bytes = await asBytes(entryValue, signal);
|
|
235
|
+
this.assertSize(bytes.byteLength);
|
|
236
|
+
const integrity = await verifyIntegrity(bytes, source.integrity, this.loading.verifyIntegrity);
|
|
237
|
+
const createdUrls = [];
|
|
238
|
+
const entryDirectory = directoryOf(entry);
|
|
239
|
+
const baseUrl = source.baseUrl ? new URL(String(source.baseUrl), this.baseUrl).href : undefined;
|
|
240
|
+
const resolver = (value) => {
|
|
241
|
+
if (isAbsoluteResource(value))
|
|
242
|
+
return value;
|
|
243
|
+
const path = normalizePath(`${entryDirectory}${value}`);
|
|
244
|
+
const asset = files.get(path);
|
|
245
|
+
if (asset === undefined) {
|
|
246
|
+
if (baseUrl) {
|
|
247
|
+
try {
|
|
248
|
+
return new URL(value, baseUrl).href;
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
return value;
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
return value;
|
|
255
|
+
}
|
|
256
|
+
if (!globalThis.URL?.createObjectURL)
|
|
257
|
+
return value;
|
|
258
|
+
const blob = asset instanceof Blob ? asset : new Blob([asset]);
|
|
259
|
+
const url = URL.createObjectURL(blob);
|
|
260
|
+
createdUrls.push(url);
|
|
261
|
+
return url;
|
|
262
|
+
};
|
|
263
|
+
const cleanup = () => { for (const url of createdUrls.splice(0))
|
|
264
|
+
URL.revokeObjectURL?.(url); };
|
|
265
|
+
const parsed = parseJson(bytesToText(bytes));
|
|
266
|
+
const migrated = this.migrate(parsed);
|
|
267
|
+
const document = resolveDocumentResourceUrlsWith(migrated.document, resolver);
|
|
268
|
+
return {
|
|
269
|
+
document,
|
|
270
|
+
info: {
|
|
271
|
+
kind: 'file-map', url: null, bytes: bytes.byteLength, cache: 'none', integrity,
|
|
272
|
+
migratedFrom: migrated.from, documentVersion: document.version,
|
|
273
|
+
},
|
|
274
|
+
cleanup,
|
|
275
|
+
};
|
|
276
|
+
}
|
|
277
|
+
async fetchUrl(source, signal) {
|
|
278
|
+
if (!this.fetchImplementation)
|
|
279
|
+
throw new AnyoPlayerError('PLAYER_FETCH_UNAVAILABLE', 'Loading an Anyo world URL requires fetch support.');
|
|
280
|
+
let url;
|
|
281
|
+
try {
|
|
282
|
+
url = new URL(String(source.url), this.baseUrl);
|
|
283
|
+
}
|
|
284
|
+
catch (error) {
|
|
285
|
+
throw new AnyoPlayerError('PLAYER_INVALID_SOURCE', `Cannot resolve Anyo world URL "${String(source.url)}" without a valid base URL.`, { cause: error });
|
|
286
|
+
}
|
|
287
|
+
const cacheKey = source.cacheKey?.trim() || url.href;
|
|
288
|
+
const cache = this.loading.cache;
|
|
289
|
+
if (cache && ['cache-first', 'offline-first'].includes(this.loading.cacheMode)) {
|
|
290
|
+
const cached = await cache.get(cacheKey);
|
|
291
|
+
if (cached)
|
|
292
|
+
return this.fromCache(cached, url.href, source.integrity, 'hit');
|
|
293
|
+
if (this.loading.cacheMode === 'offline-first') {
|
|
294
|
+
// Offline-first still attempts the network after a miss; failure is reported clearly below.
|
|
295
|
+
}
|
|
296
|
+
}
|
|
297
|
+
try {
|
|
298
|
+
const response = await this.fetchImplementation(url, { ...source.request, signal });
|
|
299
|
+
if (!response.ok)
|
|
300
|
+
throw new AnyoPlayerError('PLAYER_FETCH_FAILED', `Failed to fetch Anyo world "${url.href}": ${response.status} ${response.statusText}.`);
|
|
301
|
+
const buffer = await response.arrayBuffer();
|
|
302
|
+
const bytes = new Uint8Array(buffer);
|
|
303
|
+
this.assertSize(bytes.byteLength);
|
|
304
|
+
const integrity = await verifyIntegrity(bytes, source.integrity, this.loading.verifyIntegrity);
|
|
305
|
+
const parsed = parseJson(bytesToText(bytes));
|
|
306
|
+
const migrated = this.migrate(parsed);
|
|
307
|
+
if (cache && this.loading.cacheMode !== 'network-only') {
|
|
308
|
+
const entry = { key: cacheKey, storedAt: new Date().toISOString(), document: migrated.document, documentUrl: url.href, ...(source.integrity ? { integrity: source.integrity } : {}) };
|
|
309
|
+
await cache.set(cacheKey, entry);
|
|
310
|
+
}
|
|
311
|
+
return {
|
|
312
|
+
document: resolveDocumentResourceUrls(migrated.document, url.href),
|
|
313
|
+
documentUrl: url.href,
|
|
314
|
+
info: { kind: 'url', url: url.href, bytes: bytes.byteLength, cache: cache ? 'stored' : 'none', integrity, migratedFrom: migrated.from, documentVersion: migrated.document.version },
|
|
315
|
+
};
|
|
316
|
+
}
|
|
317
|
+
catch (error) {
|
|
318
|
+
if (signal.aborted || isAbortError(error))
|
|
319
|
+
throw this.abortedError(signal.reason ?? error);
|
|
320
|
+
if (cache && this.loading.cacheMode !== 'network-only') {
|
|
321
|
+
const cached = await cache.get(cacheKey);
|
|
322
|
+
if (cached)
|
|
323
|
+
return this.fromCache(cached, url.href, source.integrity, 'fallback');
|
|
324
|
+
}
|
|
325
|
+
if (error instanceof AnyoPlayerError)
|
|
326
|
+
throw error;
|
|
327
|
+
throw new AnyoPlayerError('PLAYER_FETCH_FAILED', `Failed to fetch Anyo world "${url.href}".`, { cause: error });
|
|
328
|
+
}
|
|
329
|
+
}
|
|
330
|
+
async fromCache(entry, fallbackUrl, requestedIntegrity, cacheState) {
|
|
331
|
+
if (requestedIntegrity && entry.integrity && requestedIntegrity !== entry.integrity)
|
|
332
|
+
throw new AnyoPlayerError('PLAYER_INTEGRITY_FAILED', 'Cached world integrity metadata does not match the requested source.');
|
|
333
|
+
const migrated = this.migrate(cloneDocument(entry.document));
|
|
334
|
+
const documentUrl = entry.documentUrl ?? fallbackUrl;
|
|
335
|
+
return {
|
|
336
|
+
document: resolveDocumentResourceUrls(migrated.document, documentUrl),
|
|
337
|
+
documentUrl,
|
|
338
|
+
info: { kind: 'cache', url: documentUrl, bytes: null, cache: cacheState, integrity: requestedIntegrity ? 'verified' : 'not-requested', migratedFrom: migrated.from, documentVersion: migrated.document.version },
|
|
339
|
+
};
|
|
340
|
+
}
|
|
341
|
+
finish(input, partial, documentUrl, cleanup, integrity = 'not-requested') {
|
|
342
|
+
const migrated = this.migrate(input);
|
|
343
|
+
return {
|
|
344
|
+
document: documentUrl ? resolveDocumentResourceUrls(migrated.document, documentUrl) : migrated.document,
|
|
345
|
+
...(documentUrl ? { documentUrl } : {}),
|
|
346
|
+
info: { kind: partial.kind, url: documentUrl ?? null, bytes: partial.bytes, cache: 'none', integrity, migratedFrom: migrated.from, documentVersion: migrated.document.version },
|
|
347
|
+
...(cleanup ? { cleanup } : {}),
|
|
348
|
+
};
|
|
349
|
+
}
|
|
350
|
+
migrate(document) {
|
|
351
|
+
if (!this.loading.migrate)
|
|
352
|
+
return { document: cloneDocument(document), from: null };
|
|
353
|
+
const result = migrateWorldDocument(document);
|
|
354
|
+
return { document: result.document, from: result.document.version === document.version ? null : document.version };
|
|
355
|
+
}
|
|
356
|
+
assertSize(bytes) {
|
|
357
|
+
if (bytes > this.loading.maxDocumentBytes)
|
|
358
|
+
throw new AnyoPlayerError('PLAYER_SOURCE_TOO_LARGE', `Anyo world document exceeds the configured ${this.loading.maxDocumentBytes}-byte limit.`);
|
|
359
|
+
}
|
|
360
|
+
abortedError(cause) { return new AnyoPlayerError('PLAYER_FETCH_ABORTED', 'Anyo world loading was aborted.', { cause }); }
|
|
361
|
+
}
|
|
362
|
+
//# sourceMappingURL=SourceResolver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"SourceResolver.js","sourceRoot":"","sources":["../../src/internal/SourceResolver.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { AnyoPlayerState } from '../types.js';
|
|
2
|
+
export declare class StateMachine {
|
|
3
|
+
private current;
|
|
4
|
+
get state(): AnyoPlayerState;
|
|
5
|
+
transition(next: AnyoPlayerState): {
|
|
6
|
+
previous: AnyoPlayerState;
|
|
7
|
+
state: AnyoPlayerState;
|
|
8
|
+
} | null;
|
|
9
|
+
}
|
|
10
|
+
//# sourceMappingURL=StateMachine.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StateMachine.d.ts","sourceRoot":"","sources":["../../src/internal/StateMachine.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,aAAa,CAAA;AAkBlD,qBAAa,YAAY;IACvB,OAAO,CAAC,OAAO,CAA0B;IAEzC,IAAI,KAAK,IAAI,eAAe,CAE3B;IAED,UAAU,CAAC,IAAI,EAAE,eAAe,GAAG;QAAE,QAAQ,EAAE,eAAe,CAAC;QAAC,KAAK,EAAE,eAAe,CAAA;KAAE,GAAG,IAAI;CAchG"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { AnyoPlayerError } from '../errors.js';
|
|
2
|
+
const ALLOWED_TRANSITIONS = {
|
|
3
|
+
idle: new Set(['loading', 'error', 'disposing']),
|
|
4
|
+
loading: new Set(['ready', 'error', 'disposing']),
|
|
5
|
+
ready: new Set(['entering', 'paused', 'replacing', 'vr-entering', 'error', 'disposing']),
|
|
6
|
+
entering: new Set(['running', 'ready', 'paused', 'replacing', 'vr-entering', 'error', 'disposing']),
|
|
7
|
+
running: new Set(['ready', 'paused', 'replacing', 'vr-entering', 'error', 'disposing']),
|
|
8
|
+
paused: new Set(['ready', 'replacing', 'error', 'disposing']),
|
|
9
|
+
replacing: new Set(['ready', 'paused', 'error', 'disposing']),
|
|
10
|
+
'vr-entering': new Set(['vr-active', 'ready', 'error', 'disposing']),
|
|
11
|
+
'vr-active': new Set(['vr-exiting', 'ready', 'error', 'disposing']),
|
|
12
|
+
'vr-exiting': new Set(['vr-active', 'ready', 'error', 'disposing']),
|
|
13
|
+
error: new Set(['loading', 'disposing']),
|
|
14
|
+
disposing: new Set(['disposed']),
|
|
15
|
+
disposed: new Set(),
|
|
16
|
+
};
|
|
17
|
+
export class StateMachine {
|
|
18
|
+
current = 'idle';
|
|
19
|
+
get state() {
|
|
20
|
+
return this.current;
|
|
21
|
+
}
|
|
22
|
+
transition(next) {
|
|
23
|
+
if (this.current === next)
|
|
24
|
+
return null;
|
|
25
|
+
if (!ALLOWED_TRANSITIONS[this.current].has(next)) {
|
|
26
|
+
throw new AnyoPlayerError(this.current === 'disposed' || this.current === 'disposing'
|
|
27
|
+
? 'PLAYER_DISPOSED'
|
|
28
|
+
: 'PLAYER_INVALID_STATE', `Cannot transition Anyo Player from "${this.current}" to "${next}".`);
|
|
29
|
+
}
|
|
30
|
+
const previous = this.current;
|
|
31
|
+
this.current = next;
|
|
32
|
+
return { previous, state: next };
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=StateMachine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StateMachine.js","sourceRoot":"","sources":["../../src/internal/StateMachine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAG9C,MAAM,mBAAmB,GAAoE;IAC3F,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAChD,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACjD,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,UAAU,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACxF,QAAQ,EAAE,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACnG,OAAO,EAAE,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,WAAW,EAAE,aAAa,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACvF,MAAM,EAAE,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,WAAW,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC7D,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IAC7D,aAAa,EAAE,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACpE,WAAW,EAAE,IAAI,GAAG,CAAC,CAAC,YAAY,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACnE,YAAY,EAAE,IAAI,GAAG,CAAC,CAAC,WAAW,EAAE,OAAO,EAAE,OAAO,EAAE,WAAW,CAAC,CAAC;IACnE,KAAK,EAAE,IAAI,GAAG,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACxC,SAAS,EAAE,IAAI,GAAG,CAAC,CAAC,UAAU,CAAC,CAAC;IAChC,QAAQ,EAAE,IAAI,GAAG,EAAE;CACpB,CAAA;AAED,MAAM,OAAO,YAAY;IACf,OAAO,GAAoB,MAAM,CAAA;IAEzC,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED,UAAU,CAAC,IAAqB;QAC9B,IAAI,IAAI,CAAC,OAAO,KAAK,IAAI;YAAE,OAAO,IAAI,CAAA;QACtC,IAAI,CAAC,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;YACjD,MAAM,IAAI,eAAe,CACvB,IAAI,CAAC,OAAO,KAAK,UAAU,IAAI,IAAI,CAAC,OAAO,KAAK,WAAW;gBACzD,CAAC,CAAC,iBAAiB;gBACnB,CAAC,CAAC,sBAAsB,EAC1B,uCAAuC,IAAI,CAAC,OAAO,SAAS,IAAI,IAAI,CACrE,CAAA;QACH,CAAC;QACD,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,CAAA;QAC7B,IAAI,CAAC,OAAO,GAAG,IAAI,CAAA;QACnB,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,CAAA;IAClC,CAAC;CACF"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { AnyoPlayerThemeTokens, AnyoPlayerUiStyleOptions } from '../types.js';
|
|
2
|
+
export declare class StyleController {
|
|
3
|
+
private readonly container;
|
|
4
|
+
private readonly originalValues;
|
|
5
|
+
private styleElement;
|
|
6
|
+
private themeValue;
|
|
7
|
+
private disposed;
|
|
8
|
+
constructor(container: HTMLElement, styles: false | AnyoPlayerUiStyleOptions | undefined, theme: AnyoPlayerThemeTokens | undefined);
|
|
9
|
+
get theme(): Readonly<AnyoPlayerThemeTokens>;
|
|
10
|
+
setTheme(input: AnyoPlayerThemeTokens | null): Readonly<AnyoPlayerThemeTokens>;
|
|
11
|
+
dispose(): void;
|
|
12
|
+
private installStyles;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=StyleController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StyleController.d.ts","sourceRoot":"","sources":["../../src/internal/StyleController.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,qBAAqB,EACrB,wBAAwB,EACzB,MAAM,aAAa,CAAA;AAwDpB,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAa;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAA4B;IAC3D,OAAO,CAAC,YAAY,CAAgC;IACpD,OAAO,CAAC,UAAU,CAA4B;IAC9C,OAAO,CAAC,QAAQ,CAAQ;gBAGtB,SAAS,EAAE,WAAW,EACtB,MAAM,EAAE,KAAK,GAAG,wBAAwB,GAAG,SAAS,EACpD,KAAK,EAAE,qBAAqB,GAAG,SAAS;IAO1C,IAAI,KAAK,IAAI,QAAQ,CAAC,qBAAqB,CAAC,CAE3C;IAED,QAAQ,CAAC,KAAK,EAAE,qBAAqB,GAAG,IAAI,GAAG,QAAQ,CAAC,qBAAqB,CAAC;IAc9E,OAAO,IAAI,IAAI;IAWf,OAAO,CAAC,aAAa;CAiBtB"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import { ANYO_PLAYER_CSS_TEXT } from '../styleText.js';
|
|
2
|
+
const TOKEN_PROPERTIES = {
|
|
3
|
+
background: '--anyo-player-ui-background',
|
|
4
|
+
surface: '--anyo-player-ui-surface',
|
|
5
|
+
text: '--anyo-player-ui-text',
|
|
6
|
+
muted: '--anyo-player-ui-muted',
|
|
7
|
+
border: '--anyo-player-ui-border',
|
|
8
|
+
accent: '--anyo-player-ui-accent',
|
|
9
|
+
accentText: '--anyo-player-ui-accent-text',
|
|
10
|
+
warning: '--anyo-player-ui-warning',
|
|
11
|
+
error: '--anyo-player-ui-error',
|
|
12
|
+
panelRadius: '--anyo-player-ui-panel-radius',
|
|
13
|
+
controlRadius: '--anyo-player-ui-control-radius',
|
|
14
|
+
fontFamily: '--anyo-player-ui-font-family',
|
|
15
|
+
backdropBlur: '--anyo-player-ui-backdrop-blur',
|
|
16
|
+
};
|
|
17
|
+
function isAppendableRoot(value) {
|
|
18
|
+
return Boolean(value && typeof value === 'object' && 'appendChild' in value && typeof value.appendChild === 'function');
|
|
19
|
+
}
|
|
20
|
+
function isDocumentRoot(value) {
|
|
21
|
+
return 'createElement' in value && typeof value.createElement === 'function';
|
|
22
|
+
}
|
|
23
|
+
function isShadowLike(value, ownerDocument) {
|
|
24
|
+
return Boolean(value && value !== ownerDocument && isAppendableRoot(value) && 'host' in value);
|
|
25
|
+
}
|
|
26
|
+
function discoverRoot(container, configured) {
|
|
27
|
+
if (configured)
|
|
28
|
+
return configured;
|
|
29
|
+
const discovered = typeof container.getRootNode === 'function' ? container.getRootNode() : null;
|
|
30
|
+
if (isAppendableRoot(discovered))
|
|
31
|
+
return discovered;
|
|
32
|
+
return container.ownerDocument;
|
|
33
|
+
}
|
|
34
|
+
function styleParent(root) {
|
|
35
|
+
if (!isDocumentRoot(root))
|
|
36
|
+
return root;
|
|
37
|
+
return root.head ?? root.documentElement ?? null;
|
|
38
|
+
}
|
|
39
|
+
function normalizeTheme(input) {
|
|
40
|
+
if (!input)
|
|
41
|
+
return {};
|
|
42
|
+
const output = {};
|
|
43
|
+
for (const key of Object.keys(TOKEN_PROPERTIES)) {
|
|
44
|
+
const value = input[key];
|
|
45
|
+
if (value === undefined)
|
|
46
|
+
continue;
|
|
47
|
+
const normalized = String(value).trim();
|
|
48
|
+
if (!normalized)
|
|
49
|
+
throw new TypeError(`ui.theme.${key} must not be empty.`);
|
|
50
|
+
output[key] = normalized;
|
|
51
|
+
}
|
|
52
|
+
return output;
|
|
53
|
+
}
|
|
54
|
+
export class StyleController {
|
|
55
|
+
container;
|
|
56
|
+
originalValues = new Map();
|
|
57
|
+
styleElement = null;
|
|
58
|
+
themeValue = {};
|
|
59
|
+
disposed = false;
|
|
60
|
+
constructor(container, styles, theme) {
|
|
61
|
+
this.container = container;
|
|
62
|
+
this.installStyles(styles);
|
|
63
|
+
this.setTheme(theme ?? {});
|
|
64
|
+
}
|
|
65
|
+
get theme() {
|
|
66
|
+
return Object.freeze({ ...this.themeValue });
|
|
67
|
+
}
|
|
68
|
+
setTheme(input) {
|
|
69
|
+
if (this.disposed)
|
|
70
|
+
return this.theme;
|
|
71
|
+
const next = normalizeTheme(input);
|
|
72
|
+
for (const [key, property] of Object.entries(TOKEN_PROPERTIES)) {
|
|
73
|
+
if (!this.originalValues.has(property)) {
|
|
74
|
+
this.originalValues.set(property, this.container.style.getPropertyValue(property));
|
|
75
|
+
}
|
|
76
|
+
const value = next[key];
|
|
77
|
+
this.container.style.setProperty(property, value ?? this.originalValues.get(property) ?? '');
|
|
78
|
+
}
|
|
79
|
+
this.themeValue = next;
|
|
80
|
+
return this.theme;
|
|
81
|
+
}
|
|
82
|
+
dispose() {
|
|
83
|
+
if (this.disposed)
|
|
84
|
+
return;
|
|
85
|
+
this.disposed = true;
|
|
86
|
+
for (const [property, value] of this.originalValues) {
|
|
87
|
+
this.container.style.setProperty(property, value);
|
|
88
|
+
}
|
|
89
|
+
this.originalValues.clear();
|
|
90
|
+
if (this.styleElement?.parentNode)
|
|
91
|
+
this.styleElement.parentNode.removeChild(this.styleElement);
|
|
92
|
+
this.styleElement = null;
|
|
93
|
+
}
|
|
94
|
+
installStyles(styles) {
|
|
95
|
+
if (styles === false)
|
|
96
|
+
return;
|
|
97
|
+
const options = styles ?? {};
|
|
98
|
+
const mode = options.mode ?? 'auto';
|
|
99
|
+
const root = discoverRoot(this.container, options.root);
|
|
100
|
+
const shouldInject = mode === 'inject' || (mode === 'auto' && isShadowLike(root, this.container.ownerDocument));
|
|
101
|
+
if (!shouldInject)
|
|
102
|
+
return;
|
|
103
|
+
const parent = styleParent(root);
|
|
104
|
+
const document = isDocumentRoot(root) ? root : this.container.ownerDocument;
|
|
105
|
+
if (!parent || typeof document.createElement !== 'function')
|
|
106
|
+
return;
|
|
107
|
+
const style = document.createElement('style');
|
|
108
|
+
style.setAttribute('data-anyo-player-styles', '');
|
|
109
|
+
if (options.nonce)
|
|
110
|
+
style.setAttribute('nonce', options.nonce);
|
|
111
|
+
style.textContent = ANYO_PLAYER_CSS_TEXT;
|
|
112
|
+
parent.appendChild(style);
|
|
113
|
+
this.styleElement = style;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
//# sourceMappingURL=StyleController.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"StyleController.js","sourceRoot":"","sources":["../../src/internal/StyleController.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
import { AnyoPlayerError } from '../errors.js';
|
|
2
|
+
import type { AnyoPlayerAnalyticsOptions, AnyoPlayerAnalyticsSink, AnyoPlayerLoadingPhase, AnyoPlayerState, AnyoPlayerTelemetryCategory, AnyoPlayerTelemetryEvent } from '../types.js';
|
|
3
|
+
interface TelemetryCallbacks {
|
|
4
|
+
onEvent(event: AnyoPlayerTelemetryEvent): void;
|
|
5
|
+
onError(error: AnyoPlayerError, event: AnyoPlayerTelemetryEvent): void;
|
|
6
|
+
}
|
|
7
|
+
interface TrackContext {
|
|
8
|
+
state: AnyoPlayerState;
|
|
9
|
+
phase: AnyoPlayerLoadingPhase;
|
|
10
|
+
}
|
|
11
|
+
export declare class TelemetryController {
|
|
12
|
+
private readonly enabledValue;
|
|
13
|
+
private readonly categories;
|
|
14
|
+
private readonly bufferSize;
|
|
15
|
+
private readonly callbacks;
|
|
16
|
+
private readonly now;
|
|
17
|
+
private readonly sinks;
|
|
18
|
+
private readonly historyValue;
|
|
19
|
+
private sequence;
|
|
20
|
+
constructor(options: false | AnyoPlayerAnalyticsOptions | undefined, callbacks: TelemetryCallbacks, now?: () => Date);
|
|
21
|
+
get enabled(): boolean;
|
|
22
|
+
get history(): readonly AnyoPlayerTelemetryEvent[];
|
|
23
|
+
register(sink: AnyoPlayerAnalyticsSink): () => void;
|
|
24
|
+
clear(): void;
|
|
25
|
+
track(name: string, category: AnyoPlayerTelemetryCategory, context: TrackContext, details?: Record<string, unknown>): AnyoPlayerTelemetryEvent | null;
|
|
26
|
+
}
|
|
27
|
+
export {};
|
|
28
|
+
//# sourceMappingURL=TelemetryController.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"TelemetryController.d.ts","sourceRoot":"","sources":["../../src/internal/TelemetryController.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,OAAO,KAAK,EACV,0BAA0B,EAC1B,uBAAuB,EACvB,sBAAsB,EACtB,eAAe,EACf,2BAA2B,EAC3B,wBAAwB,EACzB,MAAM,aAAa,CAAA;AAEpB,UAAU,kBAAkB;IAC1B,OAAO,CAAC,KAAK,EAAE,wBAAwB,GAAG,IAAI,CAAA;IAC9C,OAAO,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,EAAE,wBAAwB,GAAG,IAAI,CAAA;CACvE;AAED,UAAU,YAAY;IACpB,KAAK,EAAE,eAAe,CAAA;IACtB,KAAK,EAAE,sBAAsB,CAAA;CAC9B;AAkCD,qBAAa,mBAAmB;IAC9B,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAiD;IAC5E,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAQ;IACnC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAoB;IAC9C,OAAO,CAAC,QAAQ,CAAC,GAAG,CAAY;IAChC,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAqC;IAC3D,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAiC;IAC9D,OAAO,CAAC,QAAQ,CAAI;gBAGlB,OAAO,EAAE,KAAK,GAAG,0BAA0B,GAAG,SAAS,EACvD,SAAS,EAAE,kBAAkB,EAC7B,GAAG,GAAE,MAAM,IAAuB;IAepC,IAAI,OAAO,IAAI,OAAO,CAA6B;IACnD,IAAI,OAAO,IAAI,SAAS,wBAAwB,EAAE,CAAkE;IAEpH,QAAQ,CAAC,IAAI,EAAE,uBAAuB,GAAG,MAAM,IAAI;IAMnD,KAAK,IAAI,IAAI;IAEb,KAAK,CACH,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,2BAA2B,EACrC,OAAO,EAAE,YAAY,EACrB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAChC,wBAAwB,GAAG,IAAI;CAwCnC"}
|