blob: 4e15f4aa2eb777f5a7c71e7b0b0bde47e0e14fb9 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
|
import { assertRes, getFetch } from "./utils";
import { ScoreInfo } from "./scoreinfo";
export const MSCZ_BUF_SYM = Symbol("msczBufferP");
export const MSCZ_URL_SYM = Symbol("msczUrl");
export const loadMsczUrl = async (
scoreinfo: ScoreInfo,
_fetch = getFetch()
): Promise<string> => {
// look for the persisted msczUrl inside scoreinfo
let result = scoreinfo.store.get(MSCZ_URL_SYM) as string;
if (result) {
return result;
}
scoreinfo.store.set(MSCZ_URL_SYM, result); // persist to scoreinfo
return result;
};
export const fetchMscz = async (
scoreinfo: ScoreInfo,
_fetch = getFetch()
): Promise<ArrayBuffer> => {
let msczBufferP = scoreinfo.store.get(MSCZ_BUF_SYM) as
| Promise<ArrayBuffer>
| undefined;
if (!msczBufferP) {
msczBufferP = (async (): Promise<ArrayBuffer> => {
const url = await loadMsczUrl(scoreinfo, _fetch);
const r = await _fetch(url);
assertRes(r);
const data = await r.arrayBuffer();
return data;
})();
scoreinfo.store.set(MSCZ_BUF_SYM, msczBufferP);
}
return msczBufferP;
};
// eslint-disable-next-line @typescript-eslint/require-await
export const setMscz = async (
scoreinfo: ScoreInfo,
buffer: ArrayBuffer
): Promise<void> => {
scoreinfo.store.set(MSCZ_BUF_SYM, Promise.resolve(buffer));
};
|