@aethervtt/shard-platform-web 0.1.0 → 0.2.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/dist/audio-cache.d.ts +44 -0
- package/dist/audio-cache.js +215 -0
- package/dist/audio-compat.d.ts +4 -0
- package/dist/audio-compat.js +34 -0
- package/dist/audio-graph.d.ts +35 -0
- package/dist/audio-graph.js +365 -0
- package/dist/audio-preview.d.ts +59 -0
- package/dist/audio-preview.js +142 -0
- package/dist/audio.d.ts +8 -12
- package/dist/audio.js +835 -248
- package/dist/index.d.ts +1 -0
- package/dist/index.js +22 -1
- package/dist/performance.js +66 -1
- package/package.json +4 -4
package/dist/index.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export interface WebPlatformOptions {
|
|
|
9
9
|
}
|
|
10
10
|
export declare function createWebPlatform(options?: WebPlatformOptions): Platform;
|
|
11
11
|
export { createWebAudioBackend, type WebAudioBackend } from './audio.js';
|
|
12
|
+
export { type AudioRenderPlan, audioBufferWav, measureAudioBuffer, renderAudioPreview, } from './audio-preview.js';
|
|
12
13
|
export { createDomInputSource, type DomInputOptions } from './input.js';
|
|
13
14
|
export { createWebPerformance } from './performance.js';
|
|
14
15
|
export { createIndexedDbStorage } from './storage.js';
|
package/dist/index.js
CHANGED
|
@@ -21,9 +21,22 @@ function createWebPlatform(options = {}) {
|
|
|
21
21
|
return res;
|
|
22
22
|
};
|
|
23
23
|
const fs = {
|
|
24
|
+
resolveUrl: (path) => new URL(path, baseUrl).href,
|
|
24
25
|
writable: false,
|
|
25
26
|
readText: async (path) => (await fetchOk(path)).text(),
|
|
26
27
|
readBytes: async (path) => new Uint8Array(await (await fetchOk(path)).arrayBuffer()),
|
|
28
|
+
readRange: async (path, offset, length) => {
|
|
29
|
+
const res = await fetch(new URL(path, baseUrl), {
|
|
30
|
+
headers: { Range: `bytes=${offset}-${offset + length - 1}` }
|
|
31
|
+
});
|
|
32
|
+
if (!res.ok) {
|
|
33
|
+
throw new ShardError("platform/fs-not-found", `Failed to fetch "${path}" (${res.status})`, {
|
|
34
|
+
path
|
|
35
|
+
});
|
|
36
|
+
}
|
|
37
|
+
const bytes = new Uint8Array(await res.arrayBuffer());
|
|
38
|
+
return res.status === 206 ? bytes : bytes.subarray(offset, offset + length);
|
|
39
|
+
},
|
|
27
40
|
writeText: async (path) => readOnly(path),
|
|
28
41
|
writeBytes: async (path) => readOnly(path),
|
|
29
42
|
exists: async (path) => (await fetch(new URL(path, baseUrl), { method: "HEAD" })).ok
|
|
@@ -51,15 +64,23 @@ function createWebPlatform(options = {}) {
|
|
|
51
64
|
};
|
|
52
65
|
}
|
|
53
66
|
import { createWebAudioBackend as createWebAudioBackend2 } from "./audio.js";
|
|
67
|
+
import {
|
|
68
|
+
audioBufferWav,
|
|
69
|
+
measureAudioBuffer,
|
|
70
|
+
renderAudioPreview
|
|
71
|
+
} from "./audio-preview.js";
|
|
54
72
|
import { createDomInputSource } from "./input.js";
|
|
55
73
|
import { createWebPerformance as createWebPerformance2 } from "./performance.js";
|
|
56
74
|
import { createIndexedDbStorage as createIndexedDbStorage2 } from "./storage.js";
|
|
57
75
|
import { createWebWorkers as createWebWorkers2 } from "./workers.js";
|
|
58
76
|
export {
|
|
77
|
+
audioBufferWav,
|
|
59
78
|
createDomInputSource,
|
|
60
79
|
createIndexedDbStorage2 as createIndexedDbStorage,
|
|
61
80
|
createWebAudioBackend2 as createWebAudioBackend,
|
|
62
81
|
createWebPerformance2 as createWebPerformance,
|
|
63
82
|
createWebPlatform,
|
|
64
|
-
createWebWorkers2 as createWebWorkers
|
|
83
|
+
createWebWorkers2 as createWebWorkers,
|
|
84
|
+
measureAudioBuffer,
|
|
85
|
+
renderAudioPreview
|
|
65
86
|
};
|
package/dist/performance.js
CHANGED
|
@@ -28,10 +28,75 @@ function createWebPerformance() {
|
|
|
28
28
|
return () => void listeners.delete(listener);
|
|
29
29
|
}
|
|
30
30
|
},
|
|
31
|
-
...timing && { downloads }
|
|
31
|
+
...timing && { downloads },
|
|
32
|
+
heap,
|
|
33
|
+
startSampler,
|
|
34
|
+
measure
|
|
32
35
|
};
|
|
33
36
|
return shared;
|
|
34
37
|
}
|
|
38
|
+
const MEMORY_EVERY_MS = 5e3;
|
|
39
|
+
let measured;
|
|
40
|
+
let measuring = false;
|
|
41
|
+
let measuredAt = Number.NEGATIVE_INFINITY;
|
|
42
|
+
function heap() {
|
|
43
|
+
const page = performance;
|
|
44
|
+
if (globalThis.crossOriginIsolated && page.measureUserAgentSpecificMemory) {
|
|
45
|
+
const now = performance.now();
|
|
46
|
+
if (!measuring && now - measuredAt >= MEMORY_EVERY_MS) {
|
|
47
|
+
measuring = true;
|
|
48
|
+
measuredAt = now;
|
|
49
|
+
page.measureUserAgentSpecificMemory().then((r) => {
|
|
50
|
+
measured = { usedBytes: r.bytes, source: "measureUserAgentSpecificMemory" };
|
|
51
|
+
}).catch(() => {
|
|
52
|
+
}).finally(() => {
|
|
53
|
+
measuring = false;
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
if (measured) return measured;
|
|
57
|
+
}
|
|
58
|
+
const memory = page.memory;
|
|
59
|
+
if (!memory) return void 0;
|
|
60
|
+
return {
|
|
61
|
+
usedBytes: memory.usedJSHeapSize,
|
|
62
|
+
totalBytes: memory.totalJSHeapSize,
|
|
63
|
+
limitBytes: memory.jsHeapSizeLimit,
|
|
64
|
+
source: "performance.memory"
|
|
65
|
+
};
|
|
66
|
+
}
|
|
67
|
+
const SAMPLE_INTERVAL_MS = 1;
|
|
68
|
+
async function startSampler() {
|
|
69
|
+
const Ctor = globalThis.Profiler;
|
|
70
|
+
if (!Ctor) return void 0;
|
|
71
|
+
let profiler;
|
|
72
|
+
try {
|
|
73
|
+
profiler = new Ctor({ sampleInterval: SAMPLE_INTERVAL_MS, maxBufferSize: 1e5 });
|
|
74
|
+
} catch {
|
|
75
|
+
return void 0;
|
|
76
|
+
}
|
|
77
|
+
return {
|
|
78
|
+
stop: async () => {
|
|
79
|
+
const trace = await profiler.stop();
|
|
80
|
+
const { hottestFromSelfProfile, samplesFromSelfProfile } = await import("@aethervtt/shard-core/capture");
|
|
81
|
+
return {
|
|
82
|
+
hottest: hottestFromSelfProfile(trace, SAMPLE_INTERVAL_MS),
|
|
83
|
+
samples: samplesFromSelfProfile(trace, SAMPLE_INTERVAL_MS)
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
};
|
|
87
|
+
}
|
|
88
|
+
function measure(name, track, start, ms) {
|
|
89
|
+
try {
|
|
90
|
+
performance.measure(name, {
|
|
91
|
+
start,
|
|
92
|
+
end: start + ms,
|
|
93
|
+
detail: {
|
|
94
|
+
devtools: { dataType: "track-entry", track: `shard ${track}`, trackGroup: "Shard" }
|
|
95
|
+
}
|
|
96
|
+
});
|
|
97
|
+
} catch {
|
|
98
|
+
}
|
|
99
|
+
}
|
|
35
100
|
function downloads() {
|
|
36
101
|
const result = { transferred: 0, decoded: 0 };
|
|
37
102
|
const add = (entry) => {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@aethervtt/shard-platform-web",
|
|
3
|
-
"version": "0.1
|
|
3
|
+
"version": "0.2.1",
|
|
4
4
|
"license": "MIT",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"sideEffects": false,
|
|
@@ -16,8 +16,8 @@
|
|
|
16
16
|
"README.md"
|
|
17
17
|
],
|
|
18
18
|
"dependencies": {
|
|
19
|
-
"@aethervtt/shard-core": "0.1
|
|
20
|
-
"@aethervtt/shard-platform": "0.1
|
|
19
|
+
"@aethervtt/shard-core": "0.2.1",
|
|
20
|
+
"@aethervtt/shard-platform": "0.2.1"
|
|
21
21
|
},
|
|
22
22
|
"repository": {
|
|
23
23
|
"type": "git",
|
|
@@ -29,6 +29,6 @@
|
|
|
29
29
|
"provenance": true
|
|
30
30
|
},
|
|
31
31
|
"shard": {
|
|
32
|
-
"buildSha": "
|
|
32
|
+
"buildSha": "772eb0d2b8a5fc499105708f4ae92c58788cc9ea"
|
|
33
33
|
}
|
|
34
34
|
}
|