@dcl/sdk 7.23.4-26770223094.commit-52b9415 → 7.24.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/composite-provider.js +59 -19
- package/ethereum-provider/text-encoder.d.ts +1 -1
- package/ethereum-provider/text-encoder.js +5 -8
- package/index.js +4 -2
- package/package.json +6 -6
- package/src/composite-provider.ts +59 -18
- package/src/ethereum-provider/text-encoder.ts +4 -8
- package/src/index.ts +4 -1
- package/src/text-codec.ts +23 -0
- package/text-codec.d.ts +13 -0
- package/text-codec.js +23 -0
package/composite-provider.js
CHANGED
|
@@ -1,32 +1,72 @@
|
|
|
1
1
|
import { compositeFromLoader } from '~sdk/all-composites';
|
|
2
|
-
import {
|
|
3
|
-
|
|
2
|
+
import { readFile } from '~system/Runtime';
|
|
3
|
+
import { Composite, getGlobal } from '@dcl/ecs';
|
|
4
|
+
const composites = new Map();
|
|
5
|
+
function findCached(src) {
|
|
6
|
+
return composites.get(src) ?? null;
|
|
7
|
+
}
|
|
8
|
+
function cache(src, composite) {
|
|
9
|
+
const existing = findCached(src);
|
|
10
|
+
if (existing)
|
|
11
|
+
return existing;
|
|
12
|
+
const resource = { src, composite };
|
|
13
|
+
composites.set(src, resource);
|
|
14
|
+
return resource;
|
|
15
|
+
}
|
|
16
|
+
function decodeFromLoader(src, fromLoader) {
|
|
17
|
+
if (fromLoader instanceof Uint8Array)
|
|
18
|
+
return Composite.fromBinary(fromLoader);
|
|
19
|
+
if (typeof fromLoader === 'string')
|
|
20
|
+
return Composite.fromJson(JSON.parse(fromLoader));
|
|
21
|
+
if (typeof fromLoader === 'object' && fromLoader !== null)
|
|
22
|
+
return Composite.fromJson(fromLoader);
|
|
23
|
+
return null;
|
|
24
|
+
}
|
|
25
|
+
function decodeFromBytes(content) {
|
|
26
|
+
// .composite files are JSON (UTF-8); .composite.bin files are protobuf binary.
|
|
27
|
+
// The first-byte check is a fast path; a JSON.parse failure falls back to fromBinary
|
|
28
|
+
// because a protobuf message can also begin with 0x7b.
|
|
29
|
+
if (content[0] === 0x7b /* '{' */) {
|
|
30
|
+
const TD = getGlobal('TextDecoder');
|
|
31
|
+
if (!TD) {
|
|
32
|
+
throw new Error('loadComposite: TextDecoder is not available in this runtime. ' +
|
|
33
|
+
'Use a .composite.bin file, or import `@dcl/sdk/ethereum-provider` ' +
|
|
34
|
+
'to install the TextEncoder/TextDecoder polyfill.');
|
|
35
|
+
}
|
|
36
|
+
try {
|
|
37
|
+
return Composite.fromJson(JSON.parse(new TD().decode(content)));
|
|
38
|
+
}
|
|
39
|
+
catch {
|
|
40
|
+
return Composite.fromBinary(content);
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
return Composite.fromBinary(content);
|
|
44
|
+
}
|
|
4
45
|
// @public
|
|
5
46
|
export const compositeProvider = {
|
|
6
|
-
|
|
7
|
-
|
|
47
|
+
schemas: [],
|
|
48
|
+
getCompositeOrNull(src) {
|
|
8
49
|
const fromLoader = compositeFromLoader[src];
|
|
9
50
|
if (fromLoader) {
|
|
10
51
|
try {
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
}
|
|
15
|
-
else if (typeof fromLoader === 'string') {
|
|
16
|
-
const composite = Composite.fromJson(JSON.parse(fromLoader));
|
|
17
|
-
composites.push({ src, composite });
|
|
18
|
-
}
|
|
19
|
-
else if (typeof fromLoader === 'object') {
|
|
20
|
-
const composite = Composite.fromJson(fromLoader);
|
|
21
|
-
composites.push({ src, composite });
|
|
22
|
-
}
|
|
52
|
+
const composite = decodeFromLoader(src, fromLoader);
|
|
53
|
+
if (composite)
|
|
54
|
+
cache(src, composite);
|
|
23
55
|
}
|
|
24
56
|
catch (err) {
|
|
25
|
-
console.error(err);
|
|
57
|
+
console.error(`compositeProvider: failed to decode composite "${src}"`, err);
|
|
26
58
|
}
|
|
27
59
|
delete compositeFromLoader[src];
|
|
28
60
|
}
|
|
29
|
-
return
|
|
61
|
+
return findCached(src);
|
|
62
|
+
},
|
|
63
|
+
async loadComposite(src) {
|
|
64
|
+
const cached = findCached(src);
|
|
65
|
+
if (cached)
|
|
66
|
+
return cached;
|
|
67
|
+
const { content } = await readFile({ fileName: src });
|
|
68
|
+
const composite = decodeFromBytes(content);
|
|
69
|
+
return cache(src, composite);
|
|
30
70
|
}
|
|
31
71
|
};
|
|
32
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
72
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29tcG9zaXRlLXByb3ZpZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsic3JjL2NvbXBvc2l0ZS1wcm92aWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQTtBQUN6RCxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0saUJBQWlCLENBQUE7QUFDMUMsT0FBTyxFQUFFLFNBQVMsRUFBRSxTQUFTLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFL0MsTUFBTSxVQUFVLEdBQUcsSUFBSSxHQUFHLEVBQThCLENBQUE7QUFFeEQsU0FBUyxVQUFVLENBQUMsR0FBVztJQUM3QixPQUFPLFVBQVUsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksSUFBSSxDQUFBO0FBQ3BDLENBQUM7QUFFRCxTQUFTLEtBQUssQ0FBQyxHQUFXLEVBQUUsU0FBK0I7SUFDekQsTUFBTSxRQUFRLEdBQUcsVUFBVSxDQUFDLEdBQUcsQ0FBQyxDQUFBO0lBQ2hDLElBQUksUUFBUTtRQUFFLE9BQU8sUUFBUSxDQUFBO0lBQzdCLE1BQU0sUUFBUSxHQUF1QixFQUFFLEdBQUcsRUFBRSxTQUFTLEVBQUUsQ0FBQTtJQUN2RCxVQUFVLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxRQUFRLENBQUMsQ0FBQTtJQUM3QixPQUFPLFFBQVEsQ0FBQTtBQUNqQixDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxHQUFXLEVBQUUsVUFBbUI7SUFDeEQsSUFBSSxVQUFVLFlBQVksVUFBVTtRQUFFLE9BQU8sU0FBUyxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsQ0FBQTtJQUM3RSxJQUFJLE9BQU8sVUFBVSxLQUFLLFFBQVE7UUFBRSxPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFBO0lBQ3JGLElBQUksT0FBTyxVQUFVLEtBQUssUUFBUSxJQUFJLFVBQVUsS0FBSyxJQUFJO1FBQUUsT0FBTyxTQUFTLENBQUMsUUFBUSxDQUFDLFVBQVUsQ0FBQyxDQUFBO0lBQ2hHLE9BQU8sSUFBSSxDQUFBO0FBQ2IsQ0FBQztBQUVELFNBQVMsZUFBZSxDQUFDLE9BQW1CO0lBQzFDLCtFQUErRTtJQUMvRSxxRkFBcUY7SUFDckYsdURBQXVEO0lBQ3ZELElBQUksT0FBTyxDQUFDLENBQUMsQ0FBQyxLQUFLLElBQUksQ0FBQyxTQUFTLEVBQUU7UUFDakMsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFrRCxhQUFhLENBQUMsQ0FBQTtRQUNwRixJQUFJLENBQUMsRUFBRSxFQUFFO1lBQ1AsTUFBTSxJQUFJLEtBQUssQ0FDYiwrREFBK0Q7Z0JBQzdELG9FQUFvRTtnQkFDcEUsa0RBQWtELENBQ3JELENBQUE7U0FDRjtRQUNELElBQUk7WUFDRixPQUFPLFNBQVMsQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDLENBQUE7U0FDaEU7UUFBQyxNQUFNO1lBQ04sT0FBTyxTQUFTLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1NBQ3JDO0tBQ0Y7SUFDRCxPQUFPLFNBQVMsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUE7QUFDdEMsQ0FBQztBQUVELFVBQVU7QUFDVixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBdUI7SUFDbkQsT0FBTyxFQUFFLEVBQUU7SUFDWCxrQkFBa0IsQ0FBQyxHQUFXO1FBQzVCLE1BQU0sVUFBVSxHQUFHLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFBO1FBQzNDLElBQUksVUFBVSxFQUFFO1lBQ2QsSUFBSTtnQkFDRixNQUFNLFNBQVMsR0FBRyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsVUFBVSxDQUFDLENBQUE7Z0JBQ25ELElBQUksU0FBUztvQkFBRSxLQUFLLENBQUMsR0FBRyxFQUFFLFNBQVMsQ0FBQyxDQUFBO2FBQ3JDO1lBQUMsT0FBTyxHQUFHLEVBQUU7Z0JBQ1osT0FBTyxDQUFDLEtBQUssQ0FBQyxrREFBa0QsR0FBRyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUE7YUFDN0U7WUFDRCxPQUFPLG1CQUFtQixDQUFDLEdBQUcsQ0FBQyxDQUFBO1NBQ2hDO1FBRUQsT0FBTyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7SUFDeEIsQ0FBQztJQUVELEtBQUssQ0FBQyxhQUFhLENBQUMsR0FBVztRQUM3QixNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7UUFDOUIsSUFBSSxNQUFNO1lBQUUsT0FBTyxNQUFNLENBQUE7UUFFekIsTUFBTSxFQUFFLE9BQU8sRUFBRSxHQUFHLE1BQU0sUUFBUSxDQUFDLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUE7UUFDckQsTUFBTSxTQUFTLEdBQUcsZUFBZSxDQUFDLE9BQU8sQ0FBQyxDQUFBO1FBQzFDLE9BQU8sS0FBSyxDQUFDLEdBQUcsRUFBRSxTQUFTLENBQUMsQ0FBQTtJQUM5QixDQUFDO0NBQ0YsQ0FBQSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IGNvbXBvc2l0ZUZyb21Mb2FkZXIgfSBmcm9tICd+c2RrL2FsbC1jb21wb3NpdGVzJ1xuaW1wb3J0IHsgcmVhZEZpbGUgfSBmcm9tICd+c3lzdGVtL1J1bnRpbWUnXG5pbXBvcnQgeyBDb21wb3NpdGUsIGdldEdsb2JhbCB9IGZyb20gJ0BkY2wvZWNzJ1xuXG5jb25zdCBjb21wb3NpdGVzID0gbmV3IE1hcDxzdHJpbmcsIENvbXBvc2l0ZS5SZXNvdXJjZT4oKVxuXG5mdW5jdGlvbiBmaW5kQ2FjaGVkKHNyYzogc3RyaW5nKTogQ29tcG9zaXRlLlJlc291cmNlIHwgbnVsbCB7XG4gIHJldHVybiBjb21wb3NpdGVzLmdldChzcmMpID8/IG51bGxcbn1cblxuZnVuY3Rpb24gY2FjaGUoc3JjOiBzdHJpbmcsIGNvbXBvc2l0ZTogQ29tcG9zaXRlLkRlZmluaXRpb24pOiBDb21wb3NpdGUuUmVzb3VyY2Uge1xuICBjb25zdCBleGlzdGluZyA9IGZpbmRDYWNoZWQoc3JjKVxuICBpZiAoZXhpc3RpbmcpIHJldHVybiBleGlzdGluZ1xuICBjb25zdCByZXNvdXJjZTogQ29tcG9zaXRlLlJlc291cmNlID0geyBzcmMsIGNvbXBvc2l0ZSB9XG4gIGNvbXBvc2l0ZXMuc2V0KHNyYywgcmVzb3VyY2UpXG4gIHJldHVybiByZXNvdXJjZVxufVxuXG5mdW5jdGlvbiBkZWNvZGVGcm9tTG9hZGVyKHNyYzogc3RyaW5nLCBmcm9tTG9hZGVyOiB1bmtub3duKTogQ29tcG9zaXRlLkRlZmluaXRpb24gfCBudWxsIHtcbiAgaWYgKGZyb21Mb2FkZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5KSByZXR1cm4gQ29tcG9zaXRlLmZyb21CaW5hcnkoZnJvbUxvYWRlcilcbiAgaWYgKHR5cGVvZiBmcm9tTG9hZGVyID09PSAnc3RyaW5nJykgcmV0dXJuIENvbXBvc2l0ZS5mcm9tSnNvbihKU09OLnBhcnNlKGZyb21Mb2FkZXIpKVxuICBpZiAodHlwZW9mIGZyb21Mb2FkZXIgPT09ICdvYmplY3QnICYmIGZyb21Mb2FkZXIgIT09IG51bGwpIHJldHVybiBDb21wb3NpdGUuZnJvbUpzb24oZnJvbUxvYWRlcilcbiAgcmV0dXJuIG51bGxcbn1cblxuZnVuY3Rpb24gZGVjb2RlRnJvbUJ5dGVzKGNvbnRlbnQ6IFVpbnQ4QXJyYXkpOiBDb21wb3NpdGUuRGVmaW5pdGlvbiB7XG4gIC8vIC5jb21wb3NpdGUgZmlsZXMgYXJlIEpTT04gKFVURi04KTsgLmNvbXBvc2l0ZS5iaW4gZmlsZXMgYXJlIHByb3RvYnVmIGJpbmFyeS5cbiAgLy8gVGhlIGZpcnN0LWJ5dGUgY2hlY2sgaXMgYSBmYXN0IHBhdGg7IGEgSlNPTi5wYXJzZSBmYWlsdXJlIGZhbGxzIGJhY2sgdG8gZnJvbUJpbmFyeVxuICAvLyBiZWNhdXNlIGEgcHJvdG9idWYgbWVzc2FnZSBjYW4gYWxzbyBiZWdpbiB3aXRoIDB4N2IuXG4gIGlmIChjb250ZW50WzBdID09PSAweDdiIC8qICd7JyAqLykge1xuICAgIGNvbnN0IFREID0gZ2V0R2xvYmFsPG5ldyAoKSA9PiB7IGRlY29kZShpbnB1dDogVWludDhBcnJheSk6IHN0cmluZyB9PignVGV4dERlY29kZXInKVxuICAgIGlmICghVEQpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ2xvYWRDb21wb3NpdGU6IFRleHREZWNvZGVyIGlzIG5vdCBhdmFpbGFibGUgaW4gdGhpcyBydW50aW1lLiAnICtcbiAgICAgICAgICAnVXNlIGEgLmNvbXBvc2l0ZS5iaW4gZmlsZSwgb3IgaW1wb3J0IGBAZGNsL3Nkay9ldGhlcmV1bS1wcm92aWRlcmAgJyArXG4gICAgICAgICAgJ3RvIGluc3RhbGwgdGhlIFRleHRFbmNvZGVyL1RleHREZWNvZGVyIHBvbHlmaWxsLidcbiAgICAgIClcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgIHJldHVybiBDb21wb3NpdGUuZnJvbUpzb24oSlNPTi5wYXJzZShuZXcgVEQoKS5kZWNvZGUoY29udGVudCkpKVxuICAgIH0gY2F0Y2gge1xuICAgICAgcmV0dXJuIENvbXBvc2l0ZS5mcm9tQmluYXJ5KGNvbnRlbnQpXG4gICAgfVxuICB9XG4gIHJldHVybiBDb21wb3NpdGUuZnJvbUJpbmFyeShjb250ZW50KVxufVxuXG4vLyBAcHVibGljXG5leHBvcnQgY29uc3QgY29tcG9zaXRlUHJvdmlkZXI6IENvbXBvc2l0ZS5Qcm92aWRlciA9IHtcbiAgc2NoZW1hczogW10sXG4gIGdldENvbXBvc2l0ZU9yTnVsbChzcmM6IHN0cmluZykge1xuICAgIGNvbnN0IGZyb21Mb2FkZXIgPSBjb21wb3NpdGVGcm9tTG9hZGVyW3NyY11cbiAgICBpZiAoZnJvbUxvYWRlcikge1xuICAgICAgdHJ5IHtcbiAgICAgICAgY29uc3QgY29tcG9zaXRlID0gZGVjb2RlRnJvbUxvYWRlcihzcmMsIGZyb21Mb2FkZXIpXG4gICAgICAgIGlmIChjb21wb3NpdGUpIGNhY2hlKHNyYywgY29tcG9zaXRlKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUuZXJyb3IoYGNvbXBvc2l0ZVByb3ZpZGVyOiBmYWlsZWQgdG8gZGVjb2RlIGNvbXBvc2l0ZSBcIiR7c3JjfVwiYCwgZXJyKVxuICAgICAgfVxuICAgICAgZGVsZXRlIGNvbXBvc2l0ZUZyb21Mb2FkZXJbc3JjXVxuICAgIH1cblxuICAgIHJldHVybiBmaW5kQ2FjaGVkKHNyYylcbiAgfSxcblxuICBhc3luYyBsb2FkQ29tcG9zaXRlKHNyYzogc3RyaW5nKTogUHJvbWlzZTxDb21wb3NpdGUuUmVzb3VyY2U+IHtcbiAgICBjb25zdCBjYWNoZWQgPSBmaW5kQ2FjaGVkKHNyYylcbiAgICBpZiAoY2FjaGVkKSByZXR1cm4gY2FjaGVkXG5cbiAgICBjb25zdCB7IGNvbnRlbnQgfSA9IGF3YWl0IHJlYWRGaWxlKHsgZmlsZU5hbWU6IHNyYyB9KVxuICAgIGNvbnN0IGNvbXBvc2l0ZSA9IGRlY29kZUZyb21CeXRlcyhjb250ZW50KVxuICAgIHJldHVybiBjYWNoZShzcmMsIGNvbXBvc2l0ZSlcbiAgfVxufVxuIl19
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export
|
|
1
|
+
export { polyfillTextEncoder } from '../text-codec';
|
|
@@ -1,8 +1,5 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
export
|
|
5
|
-
|
|
6
|
-
setGlobalPolyfill('TextDecoder', TextEncodingPolyfill.TextDecoder);
|
|
7
|
-
}
|
|
8
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lbmNvZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2V0aGVyZXVtLXByb3ZpZGVyL3RleHQtZW5jb2Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLG9CQUFvQixNQUFNLGVBQWUsQ0FBQTtBQUNoRCxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxVQUFVLENBQUE7QUFFNUMsZUFBZTtBQUNmLE1BQU0sVUFBVSxtQkFBbUI7SUFDakMsaUJBQWlCLENBQUMsYUFBYSxFQUFFLG9CQUFvQixDQUFDLFdBQVcsQ0FBQyxDQUFBO0lBQ2xFLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQTtBQUNwRSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IFRleHRFbmNvZGluZ1BvbHlmaWxsIGZyb20gJ3RleHQtZW5jb2RpbmcnXG5pbXBvcnQgeyBzZXRHbG9iYWxQb2x5ZmlsbCB9IGZyb20gJ0BkY2wvZWNzJ1xuXG4vKiBAX19QVVJFX18gKi9cbmV4cG9ydCBmdW5jdGlvbiBwb2x5ZmlsbFRleHRFbmNvZGVyKCkge1xuICBzZXRHbG9iYWxQb2x5ZmlsbCgnVGV4dEVuY29kZXInLCBUZXh0RW5jb2RpbmdQb2x5ZmlsbC5UZXh0RW5jb2RlcilcbiAgc2V0R2xvYmFsUG9seWZpbGwoJ1RleHREZWNvZGVyJywgVGV4dEVuY29kaW5nUG9seWZpbGwuVGV4dERlY29kZXIpXG59XG4iXX0=
|
|
1
|
+
// The TextEncoder/TextDecoder polyfill now lives in the lean `@dcl/sdk/text-codec`
|
|
2
|
+
// subpath so it can be installed without pulling in the ethereum provider. This
|
|
3
|
+
// re-export keeps the historical `./text-encoder` import path working.
|
|
4
|
+
export { polyfillTextEncoder } from '../text-codec';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1lbmNvZGVyLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vc3JjL2V0aGVyZXVtLXByb3ZpZGVyL3RleHQtZW5jb2Rlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxtRkFBbUY7QUFDbkYsZ0ZBQWdGO0FBQ2hGLHVFQUF1RTtBQUN2RSxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsTUFBTSxlQUFlLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyIvLyBUaGUgVGV4dEVuY29kZXIvVGV4dERlY29kZXIgcG9seWZpbGwgbm93IGxpdmVzIGluIHRoZSBsZWFuIGBAZGNsL3Nkay90ZXh0LWNvZGVjYFxuLy8gc3VicGF0aCBzbyBpdCBjYW4gYmUgaW5zdGFsbGVkIHdpdGhvdXQgcHVsbGluZyBpbiB0aGUgZXRoZXJldW0gcHJvdmlkZXIuIFRoaXNcbi8vIHJlLWV4cG9ydCBrZWVwcyB0aGUgaGlzdG9yaWNhbCBgLi90ZXh0LWVuY29kZXJgIGltcG9ydCBwYXRoIHdvcmtpbmcuXG5leHBvcnQgeyBwb2x5ZmlsbFRleHRFbmNvZGVyIH0gZnJvbSAnLi4vdGV4dC1jb2RlYydcbiJdfQ==
|
package/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** @alpha THIS FILE INITIALIZES THE DECENTRALAND RUNTIME. WILL CHANGE SOON */
|
|
2
|
-
import { Composite, engine } from '@dcl/ecs';
|
|
2
|
+
import { Composite, engine, setCompositeProvider } from '@dcl/ecs';
|
|
3
3
|
import { crdtGetState, crdtSendToRenderer, sendBatch } from '~system/EngineApi';
|
|
4
4
|
import { createRendererTransport } from './internal/transports/rendererTransport';
|
|
5
5
|
import { pollEvents } from './observables';
|
|
@@ -8,6 +8,8 @@ import { compositeProvider } from './composite-provider';
|
|
|
8
8
|
// @internal
|
|
9
9
|
export const rendererTransport = createRendererTransport({ crdtSendToRenderer });
|
|
10
10
|
engine.addTransport(rendererTransport);
|
|
11
|
+
// Register composite provider at module-load (pre-seal); also registers any provider.schemas on the engine.
|
|
12
|
+
setCompositeProvider(engine, compositeProvider);
|
|
11
13
|
export async function onUpdate(deltaTime) {
|
|
12
14
|
engine.seal();
|
|
13
15
|
await engine.update(deltaTime);
|
|
@@ -40,4 +42,4 @@ export async function onStart() {
|
|
|
40
42
|
}
|
|
41
43
|
}
|
|
42
44
|
}
|
|
43
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
45
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJzcmMvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsOEVBQThFO0FBQzlFLE9BQU8sRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLG9CQUFvQixFQUFFLE1BQU0sVUFBVSxDQUFBO0FBQ2xFLE9BQU8sRUFBRSxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsU0FBUyxFQUFFLE1BQU0sbUJBQW1CLENBQUE7QUFDL0UsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0seUNBQXlDLENBQUE7QUFDakYsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQTtBQUMxQyxPQUFPLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQTtBQUV4RCx3QkFBd0I7QUFDeEIsWUFBWTtBQUNaLE1BQU0sQ0FBQyxNQUFNLGlCQUFpQixHQUFHLHVCQUF1QixDQUFDLEVBQUUsa0JBQWtCLEVBQUUsQ0FBQyxDQUFBO0FBQ2hGLE1BQU0sQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQTtBQUV0Qyw0R0FBNEc7QUFDNUcsb0JBQW9CLENBQUMsTUFBTSxFQUFFLGlCQUFpQixDQUFDLENBQUE7QUFFL0MsTUFBTSxDQUFDLEtBQUssVUFBVSxRQUFRLENBQUMsU0FBaUI7SUFDOUMsTUFBTSxDQUFDLElBQUksRUFBRSxDQUFBO0lBQ2IsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0lBQzlCLE1BQU0sVUFBVSxDQUFDLFNBQVMsQ0FBQyxDQUFBO0FBQzdCLENBQUM7QUFFRDs7O0dBR0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLE9BQU87SUFDM0IsTUFBTSxRQUFRLEdBQUcsTUFBTSxZQUFZLENBQUMsRUFBRSxJQUFJLEVBQUUsSUFBSSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUE7SUFFL0QsdUlBQXVJO0lBQ3ZJLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFO1FBQ3pCLE1BQU0sYUFBYSxHQUFHLGlCQUFpQixDQUFDLGtCQUFrQixDQUFDLGdCQUFnQixDQUFDLENBQUE7UUFDNUUsSUFBSSxhQUFhLEVBQUU7WUFDakIsSUFBSTtnQkFDRixTQUFTLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRSxhQUFhLEVBQUUsaUJBQWlCLENBQUMsQ0FBQTthQUM3RDtZQUFDLE9BQU8sR0FBRyxFQUFFO2dCQUNaLE9BQU8sQ0FBQyxHQUFHLENBQUMsZ0RBQWdELENBQUMsQ0FBQTtnQkFDN0QsT0FBTyxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQTthQUNuQjtTQUNGO0tBQ0Y7SUFFRCxJQUFJLENBQUMsQ0FBQyxpQkFBaUIsQ0FBQyxTQUFTLEVBQUU7UUFDakMsSUFBSSxRQUFRLElBQUksUUFBUSxDQUFDLElBQUksSUFBSSxRQUFRLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRTtZQUNyRCxLQUFLLE1BQU0sU0FBUyxJQUFJLFFBQVEsQ0FBQyxJQUFJLEVBQUU7Z0JBQ3JDLGlCQUFpQixDQUFDLFNBQVMsQ0FBQyxTQUFTLENBQUMsQ0FBQTthQUN2QztTQUNGO0tBQ0Y7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqIEBhbHBoYSBUSElTIEZJTEUgSU5JVElBTElaRVMgVEhFIERFQ0VOVFJBTEFORCBSVU5USU1FLiBXSUxMIENIQU5HRSBTT09OICovXG5pbXBvcnQgeyBDb21wb3NpdGUsIGVuZ2luZSwgc2V0Q29tcG9zaXRlUHJvdmlkZXIgfSBmcm9tICdAZGNsL2VjcydcbmltcG9ydCB7IGNyZHRHZXRTdGF0ZSwgY3JkdFNlbmRUb1JlbmRlcmVyLCBzZW5kQmF0Y2ggfSBmcm9tICd+c3lzdGVtL0VuZ2luZUFwaSdcbmltcG9ydCB7IGNyZWF0ZVJlbmRlcmVyVHJhbnNwb3J0IH0gZnJvbSAnLi9pbnRlcm5hbC90cmFuc3BvcnRzL3JlbmRlcmVyVHJhbnNwb3J0J1xuaW1wb3J0IHsgcG9sbEV2ZW50cyB9IGZyb20gJy4vb2JzZXJ2YWJsZXMnXG5pbXBvcnQgeyBjb21wb3NpdGVQcm92aWRlciB9IGZyb20gJy4vY29tcG9zaXRlLXByb3ZpZGVyJ1xuXG4vLyBBdHRhY2ggQ1JEVCB0cmFuc3BvcnRcbi8vIEBpbnRlcm5hbFxuZXhwb3J0IGNvbnN0IHJlbmRlcmVyVHJhbnNwb3J0ID0gY3JlYXRlUmVuZGVyZXJUcmFuc3BvcnQoeyBjcmR0U2VuZFRvUmVuZGVyZXIgfSlcbmVuZ2luZS5hZGRUcmFuc3BvcnQocmVuZGVyZXJUcmFuc3BvcnQpXG5cbi8vIFJlZ2lzdGVyIGNvbXBvc2l0ZSBwcm92aWRlciBhdCBtb2R1bGUtbG9hZCAocHJlLXNlYWwpOyBhbHNvIHJlZ2lzdGVycyBhbnkgcHJvdmlkZXIuc2NoZW1hcyBvbiB0aGUgZW5naW5lLlxuc2V0Q29tcG9zaXRlUHJvdmlkZXIoZW5naW5lLCBjb21wb3NpdGVQcm92aWRlcilcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG9uVXBkYXRlKGRlbHRhVGltZTogbnVtYmVyKSB7XG4gIGVuZ2luZS5zZWFsKClcbiAgYXdhaXQgZW5naW5lLnVwZGF0ZShkZWx0YVRpbWUpXG4gIGF3YWl0IHBvbGxFdmVudHMoc2VuZEJhdGNoKVxufVxuXG4vKipcbiAqIEBpbnRlcm5hbFxuICogRnVuY3Rpb24gdGhhdCBpcyBjYWxsZWQgYmVmb3JlIHRoZSBmaXJzdCB1cGRhdGUgYW5kIGFmdGVyIHRoZSBldmFsdWF0aW9uIG9mIHRoZSBjb2RlLlxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gb25TdGFydCgpIHtcbiAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBjcmR0R2V0U3RhdGUoeyBkYXRhOiBuZXcgVWludDhBcnJheSgpIH0pXG5cbiAgLy8gd2hlbiB0aGlzIGNvbmRpdGlvbiBpcyB0cnVlIHNvbWV0aGluZyBsaWtlIGBtYWluLmNyZHRgIHdhcyBwcmUtbG9hZGVkIGZyb20gdGhlIHJ1bnRpbWUsIHdlIGRvbid0IG5lZWQgdG8gaW5zdGFuY2UgdGhlIG1haW4uY29tcG9zaXRlXG4gIGlmICghcmVzcG9uc2UuaGFzRW50aXRpZXMpIHtcbiAgICBjb25zdCBtYWluQ29tcG9zaXRlID0gY29tcG9zaXRlUHJvdmlkZXIuZ2V0Q29tcG9zaXRlT3JOdWxsKCdtYWluLmNvbXBvc2l0ZScpXG4gICAgaWYgKG1haW5Db21wb3NpdGUpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIENvbXBvc2l0ZS5pbnN0YW5jZShlbmdpbmUsIG1haW5Db21wb3NpdGUsIGNvbXBvc2l0ZVByb3ZpZGVyKVxuICAgICAgfSBjYXRjaCAoZXJyKSB7XG4gICAgICAgIGNvbnNvbGUubG9nKGBXYXJuaW5nOiBtYWluLmNvbXBvc2l0ZSBjb3VsZG4ndCBiZSBpbnN0YW5jZWQuYClcbiAgICAgICAgY29uc29sZS5lcnJvcihlcnIpXG4gICAgICB9XG4gICAgfVxuICB9XG5cbiAgaWYgKCEhcmVuZGVyZXJUcmFuc3BvcnQub25tZXNzYWdlKSB7XG4gICAgaWYgKHJlc3BvbnNlICYmIHJlc3BvbnNlLmRhdGEgJiYgcmVzcG9uc2UuZGF0YS5sZW5ndGgpIHtcbiAgICAgIGZvciAoY29uc3QgYnl0ZUFycmF5IG9mIHJlc3BvbnNlLmRhdGEpIHtcbiAgICAgICAgcmVuZGVyZXJUcmFuc3BvcnQub25tZXNzYWdlKGJ5dGVBcnJheSlcbiAgICAgIH1cbiAgICB9XG4gIH1cbn1cbiJdfQ==
|
package/package.json
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@dcl/sdk",
|
|
3
3
|
"description": "",
|
|
4
|
-
"version": "7.
|
|
4
|
+
"version": "7.24.0",
|
|
5
5
|
"author": "Decentraland",
|
|
6
6
|
"dependencies": {
|
|
7
|
-
"@dcl/ecs": "7.
|
|
7
|
+
"@dcl/ecs": "7.24.0",
|
|
8
8
|
"@dcl/ecs-math": "2.1.0",
|
|
9
9
|
"@dcl/explorer": "1.0.164509-20240802172549.commit-fb95b9b",
|
|
10
|
-
"@dcl/js-runtime": "7.
|
|
11
|
-
"@dcl/react-ecs": "7.
|
|
12
|
-
"@dcl/sdk-commands": "7.
|
|
10
|
+
"@dcl/js-runtime": "7.24.0",
|
|
11
|
+
"@dcl/react-ecs": "7.24.0",
|
|
12
|
+
"@dcl/sdk-commands": "7.24.0",
|
|
13
13
|
"text-encoding": "0.7.0"
|
|
14
14
|
},
|
|
15
15
|
"keywords": [],
|
|
@@ -35,5 +35,5 @@
|
|
|
35
35
|
},
|
|
36
36
|
"types": "./index.d.ts",
|
|
37
37
|
"typings": "./index.d.ts",
|
|
38
|
-
"commit": "
|
|
38
|
+
"commit": "5d040fd6fe9e018eb005a5c2a85e3419e1ea87a4"
|
|
39
39
|
}
|
|
@@ -1,33 +1,74 @@
|
|
|
1
1
|
import { compositeFromLoader } from '~sdk/all-composites'
|
|
2
|
-
import {
|
|
2
|
+
import { readFile } from '~system/Runtime'
|
|
3
|
+
import { Composite, getGlobal } from '@dcl/ecs'
|
|
3
4
|
|
|
4
|
-
const composites
|
|
5
|
+
const composites = new Map<string, Composite.Resource>()
|
|
6
|
+
|
|
7
|
+
function findCached(src: string): Composite.Resource | null {
|
|
8
|
+
return composites.get(src) ?? null
|
|
9
|
+
}
|
|
10
|
+
|
|
11
|
+
function cache(src: string, composite: Composite.Definition): Composite.Resource {
|
|
12
|
+
const existing = findCached(src)
|
|
13
|
+
if (existing) return existing
|
|
14
|
+
const resource: Composite.Resource = { src, composite }
|
|
15
|
+
composites.set(src, resource)
|
|
16
|
+
return resource
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
function decodeFromLoader(src: string, fromLoader: unknown): Composite.Definition | null {
|
|
20
|
+
if (fromLoader instanceof Uint8Array) return Composite.fromBinary(fromLoader)
|
|
21
|
+
if (typeof fromLoader === 'string') return Composite.fromJson(JSON.parse(fromLoader))
|
|
22
|
+
if (typeof fromLoader === 'object' && fromLoader !== null) return Composite.fromJson(fromLoader)
|
|
23
|
+
return null
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
function decodeFromBytes(content: Uint8Array): Composite.Definition {
|
|
27
|
+
// .composite files are JSON (UTF-8); .composite.bin files are protobuf binary.
|
|
28
|
+
// The first-byte check is a fast path; a JSON.parse failure falls back to fromBinary
|
|
29
|
+
// because a protobuf message can also begin with 0x7b.
|
|
30
|
+
if (content[0] === 0x7b /* '{' */) {
|
|
31
|
+
const TD = getGlobal<new () => { decode(input: Uint8Array): string }>('TextDecoder')
|
|
32
|
+
if (!TD) {
|
|
33
|
+
throw new Error(
|
|
34
|
+
'loadComposite: TextDecoder is not available in this runtime. ' +
|
|
35
|
+
'Use a .composite.bin file, or import `@dcl/sdk/ethereum-provider` ' +
|
|
36
|
+
'to install the TextEncoder/TextDecoder polyfill.'
|
|
37
|
+
)
|
|
38
|
+
}
|
|
39
|
+
try {
|
|
40
|
+
return Composite.fromJson(JSON.parse(new TD().decode(content)))
|
|
41
|
+
} catch {
|
|
42
|
+
return Composite.fromBinary(content)
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
return Composite.fromBinary(content)
|
|
46
|
+
}
|
|
5
47
|
|
|
6
48
|
// @public
|
|
7
49
|
export const compositeProvider: Composite.Provider = {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
50
|
+
schemas: [],
|
|
51
|
+
getCompositeOrNull(src: string) {
|
|
11
52
|
const fromLoader = compositeFromLoader[src]
|
|
12
53
|
if (fromLoader) {
|
|
13
54
|
try {
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
composites.push({ src, composite })
|
|
17
|
-
} else if (typeof fromLoader === 'string') {
|
|
18
|
-
const composite = Composite.fromJson(JSON.parse(fromLoader))
|
|
19
|
-
composites.push({ src, composite })
|
|
20
|
-
} else if (typeof fromLoader === 'object') {
|
|
21
|
-
const composite = Composite.fromJson(fromLoader)
|
|
22
|
-
composites.push({ src, composite })
|
|
23
|
-
}
|
|
55
|
+
const composite = decodeFromLoader(src, fromLoader)
|
|
56
|
+
if (composite) cache(src, composite)
|
|
24
57
|
} catch (err) {
|
|
25
|
-
console.error(err)
|
|
58
|
+
console.error(`compositeProvider: failed to decode composite "${src}"`, err)
|
|
26
59
|
}
|
|
27
|
-
|
|
28
60
|
delete compositeFromLoader[src]
|
|
29
61
|
}
|
|
30
62
|
|
|
31
|
-
return
|
|
63
|
+
return findCached(src)
|
|
64
|
+
},
|
|
65
|
+
|
|
66
|
+
async loadComposite(src: string): Promise<Composite.Resource> {
|
|
67
|
+
const cached = findCached(src)
|
|
68
|
+
if (cached) return cached
|
|
69
|
+
|
|
70
|
+
const { content } = await readFile({ fileName: src })
|
|
71
|
+
const composite = decodeFromBytes(content)
|
|
72
|
+
return cache(src, composite)
|
|
32
73
|
}
|
|
33
74
|
}
|
|
@@ -1,8 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
export function polyfillTextEncoder() {
|
|
6
|
-
setGlobalPolyfill('TextEncoder', TextEncodingPolyfill.TextEncoder)
|
|
7
|
-
setGlobalPolyfill('TextDecoder', TextEncodingPolyfill.TextDecoder)
|
|
8
|
-
}
|
|
1
|
+
// The TextEncoder/TextDecoder polyfill now lives in the lean `@dcl/sdk/text-codec`
|
|
2
|
+
// subpath so it can be installed without pulling in the ethereum provider. This
|
|
3
|
+
// re-export keeps the historical `./text-encoder` import path working.
|
|
4
|
+
export { polyfillTextEncoder } from '../text-codec'
|
package/src/index.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
/** @alpha THIS FILE INITIALIZES THE DECENTRALAND RUNTIME. WILL CHANGE SOON */
|
|
2
|
-
import { Composite, engine } from '@dcl/ecs'
|
|
2
|
+
import { Composite, engine, setCompositeProvider } from '@dcl/ecs'
|
|
3
3
|
import { crdtGetState, crdtSendToRenderer, sendBatch } from '~system/EngineApi'
|
|
4
4
|
import { createRendererTransport } from './internal/transports/rendererTransport'
|
|
5
5
|
import { pollEvents } from './observables'
|
|
@@ -10,6 +10,9 @@ import { compositeProvider } from './composite-provider'
|
|
|
10
10
|
export const rendererTransport = createRendererTransport({ crdtSendToRenderer })
|
|
11
11
|
engine.addTransport(rendererTransport)
|
|
12
12
|
|
|
13
|
+
// Register composite provider at module-load (pre-seal); also registers any provider.schemas on the engine.
|
|
14
|
+
setCompositeProvider(engine, compositeProvider)
|
|
15
|
+
|
|
13
16
|
export async function onUpdate(deltaTime: number) {
|
|
14
17
|
engine.seal()
|
|
15
18
|
await engine.update(deltaTime)
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import TextEncodingPolyfill from 'text-encoding'
|
|
2
|
+
import { setGlobalPolyfill } from '@dcl/ecs'
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Install the `TextEncoder` / `TextDecoder` polyfill on `globalThis`.
|
|
6
|
+
*
|
|
7
|
+
* The QuickJS scene runtime ships no native `TextEncoder` / `TextDecoder`, yet
|
|
8
|
+
* `compositeProvider.loadComposite` decodes `.composite` JSON file bytes via
|
|
9
|
+
* `TextDecoder`. Callers that load composites at runtime (e.g. `@dcl/asset-packs`'
|
|
10
|
+
* `SPAWN_ENTITY`) must install this first.
|
|
11
|
+
*
|
|
12
|
+
* Exposed from the lean `@dcl/sdk/text-codec` subpath so consumers can install
|
|
13
|
+
* the polyfill without pulling in the ethereum provider, and without bundling
|
|
14
|
+
* `text-encoding` into scenes that never reach this module.
|
|
15
|
+
*/
|
|
16
|
+
// NOTE: this function mutates globalThis — it is NOT pure. Do not annotate
|
|
17
|
+
// with /* @__PURE__ */; minifiers would treat the call as dead code and drop
|
|
18
|
+
// the polyfill installation, breaking runtime callers like
|
|
19
|
+
// compositeProvider.loadComposite that rely on globalThis.TextDecoder.
|
|
20
|
+
export function polyfillTextEncoder() {
|
|
21
|
+
setGlobalPolyfill('TextEncoder', TextEncodingPolyfill.TextEncoder)
|
|
22
|
+
setGlobalPolyfill('TextDecoder', TextEncodingPolyfill.TextDecoder)
|
|
23
|
+
}
|
package/text-codec.d.ts
ADDED
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Install the `TextEncoder` / `TextDecoder` polyfill on `globalThis`.
|
|
3
|
+
*
|
|
4
|
+
* The QuickJS scene runtime ships no native `TextEncoder` / `TextDecoder`, yet
|
|
5
|
+
* `compositeProvider.loadComposite` decodes `.composite` JSON file bytes via
|
|
6
|
+
* `TextDecoder`. Callers that load composites at runtime (e.g. `@dcl/asset-packs`'
|
|
7
|
+
* `SPAWN_ENTITY`) must install this first.
|
|
8
|
+
*
|
|
9
|
+
* Exposed from the lean `@dcl/sdk/text-codec` subpath so consumers can install
|
|
10
|
+
* the polyfill without pulling in the ethereum provider, and without bundling
|
|
11
|
+
* `text-encoding` into scenes that never reach this module.
|
|
12
|
+
*/
|
|
13
|
+
export declare function polyfillTextEncoder(): void;
|
package/text-codec.js
ADDED
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import TextEncodingPolyfill from 'text-encoding';
|
|
2
|
+
import { setGlobalPolyfill } from '@dcl/ecs';
|
|
3
|
+
/**
|
|
4
|
+
* Install the `TextEncoder` / `TextDecoder` polyfill on `globalThis`.
|
|
5
|
+
*
|
|
6
|
+
* The QuickJS scene runtime ships no native `TextEncoder` / `TextDecoder`, yet
|
|
7
|
+
* `compositeProvider.loadComposite` decodes `.composite` JSON file bytes via
|
|
8
|
+
* `TextDecoder`. Callers that load composites at runtime (e.g. `@dcl/asset-packs`'
|
|
9
|
+
* `SPAWN_ENTITY`) must install this first.
|
|
10
|
+
*
|
|
11
|
+
* Exposed from the lean `@dcl/sdk/text-codec` subpath so consumers can install
|
|
12
|
+
* the polyfill without pulling in the ethereum provider, and without bundling
|
|
13
|
+
* `text-encoding` into scenes that never reach this module.
|
|
14
|
+
*/
|
|
15
|
+
// NOTE: this function mutates globalThis — it is NOT pure. Do not annotate
|
|
16
|
+
// with /* @__PURE__ */; minifiers would treat the call as dead code and drop
|
|
17
|
+
// the polyfill installation, breaking runtime callers like
|
|
18
|
+
// compositeProvider.loadComposite that rely on globalThis.TextDecoder.
|
|
19
|
+
export function polyfillTextEncoder() {
|
|
20
|
+
setGlobalPolyfill('TextEncoder', TextEncodingPolyfill.TextEncoder);
|
|
21
|
+
setGlobalPolyfill('TextDecoder', TextEncodingPolyfill.TextDecoder);
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGV4dC1jb2RlYy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbInNyYy90ZXh0LWNvZGVjLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sb0JBQW9CLE1BQU0sZUFBZSxDQUFBO0FBQ2hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLFVBQVUsQ0FBQTtBQUU1Qzs7Ozs7Ozs7Ozs7R0FXRztBQUNILDJFQUEyRTtBQUMzRSw2RUFBNkU7QUFDN0UsMkRBQTJEO0FBQzNELHVFQUF1RTtBQUN2RSxNQUFNLFVBQVUsbUJBQW1CO0lBQ2pDLGlCQUFpQixDQUFDLGFBQWEsRUFBRSxvQkFBb0IsQ0FBQyxXQUFXLENBQUMsQ0FBQTtJQUNsRSxpQkFBaUIsQ0FBQyxhQUFhLEVBQUUsb0JBQW9CLENBQUMsV0FBVyxDQUFDLENBQUE7QUFDcEUsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCBUZXh0RW5jb2RpbmdQb2x5ZmlsbCBmcm9tICd0ZXh0LWVuY29kaW5nJ1xuaW1wb3J0IHsgc2V0R2xvYmFsUG9seWZpbGwgfSBmcm9tICdAZGNsL2VjcydcblxuLyoqXG4gKiBJbnN0YWxsIHRoZSBgVGV4dEVuY29kZXJgIC8gYFRleHREZWNvZGVyYCBwb2x5ZmlsbCBvbiBgZ2xvYmFsVGhpc2AuXG4gKlxuICogVGhlIFF1aWNrSlMgc2NlbmUgcnVudGltZSBzaGlwcyBubyBuYXRpdmUgYFRleHRFbmNvZGVyYCAvIGBUZXh0RGVjb2RlcmAsIHlldFxuICogYGNvbXBvc2l0ZVByb3ZpZGVyLmxvYWRDb21wb3NpdGVgIGRlY29kZXMgYC5jb21wb3NpdGVgIEpTT04gZmlsZSBieXRlcyB2aWFcbiAqIGBUZXh0RGVjb2RlcmAuIENhbGxlcnMgdGhhdCBsb2FkIGNvbXBvc2l0ZXMgYXQgcnVudGltZSAoZS5nLiBgQGRjbC9hc3NldC1wYWNrc2AnXG4gKiBgU1BBV05fRU5USVRZYCkgbXVzdCBpbnN0YWxsIHRoaXMgZmlyc3QuXG4gKlxuICogRXhwb3NlZCBmcm9tIHRoZSBsZWFuIGBAZGNsL3Nkay90ZXh0LWNvZGVjYCBzdWJwYXRoIHNvIGNvbnN1bWVycyBjYW4gaW5zdGFsbFxuICogdGhlIHBvbHlmaWxsIHdpdGhvdXQgcHVsbGluZyBpbiB0aGUgZXRoZXJldW0gcHJvdmlkZXIsIGFuZCB3aXRob3V0IGJ1bmRsaW5nXG4gKiBgdGV4dC1lbmNvZGluZ2AgaW50byBzY2VuZXMgdGhhdCBuZXZlciByZWFjaCB0aGlzIG1vZHVsZS5cbiAqL1xuLy8gTk9URTogdGhpcyBmdW5jdGlvbiBtdXRhdGVzIGdsb2JhbFRoaXMg4oCUIGl0IGlzIE5PVCBwdXJlLiBEbyBub3QgYW5ub3RhdGVcbi8vIHdpdGggLyogQF9fUFVSRV9fICovOyBtaW5pZmllcnMgd291bGQgdHJlYXQgdGhlIGNhbGwgYXMgZGVhZCBjb2RlIGFuZCBkcm9wXG4vLyB0aGUgcG9seWZpbGwgaW5zdGFsbGF0aW9uLCBicmVha2luZyBydW50aW1lIGNhbGxlcnMgbGlrZVxuLy8gY29tcG9zaXRlUHJvdmlkZXIubG9hZENvbXBvc2l0ZSB0aGF0IHJlbHkgb24gZ2xvYmFsVGhpcy5UZXh0RGVjb2Rlci5cbmV4cG9ydCBmdW5jdGlvbiBwb2x5ZmlsbFRleHRFbmNvZGVyKCkge1xuICBzZXRHbG9iYWxQb2x5ZmlsbCgnVGV4dEVuY29kZXInLCBUZXh0RW5jb2RpbmdQb2x5ZmlsbC5UZXh0RW5jb2RlcilcbiAgc2V0R2xvYmFsUG9seWZpbGwoJ1RleHREZWNvZGVyJywgVGV4dEVuY29kaW5nUG9seWZpbGwuVGV4dERlY29kZXIpXG59XG4iXX0=
|