UNPKG

10 kBJavaScriptView Raw
1"use strict";
2function __export(m) {
3 for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
4}
5Object.defineProperty(exports, "__esModule", { value: true });
6/**
7 * The resource manager. Design to be able to use in both nodejs and browser environment.
8 * @template T The type of the resource content. If you use this in node, it's probably `Buffer`. If you are in browser, it might be `string`. Just align this with your `ResourceSource`
9 */
10class ResourceManager {
11 constructor(list = []) {
12 this.list = list;
13 this.cache = {};
14 }
15 get allResourcePacks() { return this.list.map((l) => l.info); }
16 /**
17 * Add a new resource source to the end of the resource list.
18 */
19 async addResourcePack(resourcePack) {
20 let info;
21 try {
22 info = await resourcePack.info();
23 }
24 catch (_a) {
25 info = { pack_format: -1, description: "" };
26 }
27 const domains = await resourcePack.domains();
28 const wrapper = { info, source: resourcePack, domains };
29 this.list.push(wrapper);
30 }
31 /**
32 * Clear all cache
33 */
34 clearCache() { this.cache = {}; }
35 /**
36 * Clear all resource source and cache
37 */
38 clearAll() {
39 this.cache = {};
40 this.list.splice(0, this.list.length);
41 }
42 /**
43 * Swap the resource source priority.
44 */
45 swap(first, second) {
46 if (first >= this.list.length || first < 0 || second >= this.list.length || second < 0) {
47 throw new Error("Illegal index");
48 }
49 const fir = this.list[first];
50 this.list[first] = this.list[second];
51 this.list[second] = fir;
52 this.clearCache();
53 }
54 /**
55 * Invalidate the resource cache
56 */
57 invalidate(location) {
58 delete this.cache[`${location.domain}:${location.path}`];
59 }
60 /**
61 * Load the resource in that location. This will walk through current resource source list to load the resource.
62 * @param location The resource location
63 * @param urlOnly If true, it will force return uri, else it will return the normal resource content
64 */
65 async load(location, urlOnly = false) {
66 const cached = this.cache[`${location.domain}:${location.path}`];
67 if (cached) {
68 return cached;
69 }
70 for (const src of this.list) {
71 const loaded = await src.source.load(location, urlOnly);
72 if (!loaded) {
73 continue;
74 }
75 this.putCache(loaded);
76 return loaded;
77 }
78 return undefined;
79 }
80 putCache(res) {
81 this.cache[`${res.location.domain}:${res.location.path}`] = res;
82 }
83}
84exports.ResourceManager = ResourceManager;
85__export(require("./model-loader"));
86//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyJpbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7OztBQVFBOzs7R0FHRztBQUNILE1BQWEsZUFBZTtJQUl4QixZQUFvQixPQUFxQyxFQUFFO1FBQXZDLFNBQUksR0FBSixJQUFJLENBQW1DO1FBRm5ELFVBQUssR0FBaUQsRUFBRSxDQUFDO0lBRUYsQ0FBQztJQUhoRSxJQUFJLGdCQUFnQixLQUFLLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7SUFLL0Q7O09BRUc7SUFDSCxLQUFLLENBQUMsZUFBZSxDQUFDLFlBQTBCO1FBQzVDLElBQUksSUFBSSxDQUFDO1FBQ1QsSUFBSTtZQUNBLElBQUksR0FBRyxNQUFNLFlBQVksQ0FBQyxJQUFJLEVBQUUsQ0FBQztTQUNwQztRQUFDLFdBQUs7WUFDSCxJQUFJLEdBQUcsRUFBRSxXQUFXLEVBQUUsQ0FBQyxDQUFDLEVBQUUsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDO1NBQy9DO1FBQ0QsTUFBTSxPQUFPLEdBQUcsTUFBTSxZQUFZLENBQUMsT0FBTyxFQUFFLENBQUM7UUFDN0MsTUFBTSxPQUFPLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLFlBQVksRUFBRSxPQUFPLEVBQUUsQ0FBQztRQUV4RCxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUM1QixDQUFDO0lBRUQ7O09BRUc7SUFDSCxVQUFVLEtBQUssSUFBSSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ2pDOztPQUVHO0lBQ0gsUUFBUTtRQUNKLElBQUksQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQ2hCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQzFDLENBQUM7SUFFRDs7T0FFRztJQUNILElBQUksQ0FBQyxLQUFhLEVBQUUsTUFBYztRQUM5QixJQUFJLEtBQUssSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxLQUFLLEdBQUcsQ0FBQyxJQUFJLE1BQU0sSUFBSSxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sSUFBSSxNQUFNLEdBQUcsQ0FBQyxFQUFFO1lBQ3BGLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7U0FDcEM7UUFFRCxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdCLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUNyQyxJQUFJLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUV4QixJQUFJLENBQUMsVUFBVSxFQUFFLENBQUM7SUFDdEIsQ0FBQztJQUVEOztPQUVHO0lBQ0gsVUFBVSxDQUFDLFFBQTBCO1FBQ2pDLE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLElBQUksUUFBUSxDQUFDLElBQUksRUFBRSxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUtEOzs7O09BSUc7SUFDSCxLQUFLLENBQUMsSUFBSSxDQUFDLFFBQTBCLEVBQUUsVUFBbUIsS0FBSztRQUMzRCxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLEdBQUcsUUFBUSxDQUFDLE1BQU0sSUFBSSxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNqRSxJQUFJLE1BQU0sRUFBRTtZQUFFLE9BQU8sTUFBTSxDQUFDO1NBQUU7UUFDOUIsS0FBSyxNQUFNLEdBQUcsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFO1lBQ3pCLE1BQU0sTUFBTSxHQUFHLE1BQU0sR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO1lBQ3hELElBQUksQ0FBQyxNQUFNLEVBQUU7Z0JBQUUsU0FBUzthQUFFO1lBQzFCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDdEIsT0FBTyxNQUFNLENBQUM7U0FDakI7UUFFRCxPQUFPLFNBQVMsQ0FBQztJQUNyQixDQUFDO0lBRU8sUUFBUSxDQUFDLEdBQWE7UUFDMUIsSUFBSSxDQUFDLEtBQUssQ0FBQyxHQUFHLEdBQUcsQ0FBQyxRQUFRLENBQUMsTUFBTSxJQUFJLEdBQUcsQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7SUFDcEUsQ0FBQztDQUNKO0FBaEZELDBDQWdGQztBQUVELG9DQUErQiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFBhY2tNZXRhLCBSZXNvdXJjZVBhY2ssIFJlc291cmNlLCBSZXNvdXJjZUxvY2F0aW9uIH0gZnJvbSBcIkB4bWNsL3Jlc291cmNlcGFja1wiO1xuXG5pbnRlcmZhY2UgUmVzb3VyY2VTb3VyY2VXcmFwcGVyIHtcbiAgICBzb3VyY2U6IFJlc291cmNlUGFjaztcbiAgICBpbmZvOiBQYWNrTWV0YS5QYWNrO1xuICAgIGRvbWFpbnM6IHN0cmluZ1tdO1xufVxuXG4vKipcbiAqIFRoZSByZXNvdXJjZSBtYW5hZ2VyLiBEZXNpZ24gdG8gYmUgYWJsZSB0byB1c2UgaW4gYm90aCBub2RlanMgYW5kIGJyb3dzZXIgZW52aXJvbm1lbnQuXG4gKiBAdGVtcGxhdGUgVCBUaGUgdHlwZSBvZiB0aGUgcmVzb3VyY2UgY29udGVudC4gSWYgeW91IHVzZSB0aGlzIGluIG5vZGUsIGl0J3MgcHJvYmFibHkgYEJ1ZmZlcmAuIElmIHlvdSBhcmUgaW4gYnJvd3NlciwgaXQgbWlnaHQgYmUgYHN0cmluZ2AuIEp1c3QgYWxpZ24gdGhpcyB3aXRoIHlvdXIgYFJlc291cmNlU291cmNlYFxuICovXG5leHBvcnQgY2xhc3MgUmVzb3VyY2VNYW5hZ2VyIHtcbiAgICBnZXQgYWxsUmVzb3VyY2VQYWNrcygpIHsgcmV0dXJuIHRoaXMubGlzdC5tYXAoKGwpID0+IGwuaW5mbyk7IH1cbiAgICBwcml2YXRlIGNhY2hlOiB7IFtsb2NhdGlvbjogc3RyaW5nXTogUmVzb3VyY2UgfCB1bmRlZmluZWQgfSA9IHt9O1xuXG4gICAgY29uc3RydWN0b3IocHJpdmF0ZSBsaXN0OiBBcnJheTxSZXNvdXJjZVNvdXJjZVdyYXBwZXI+ID0gW10pIHsgfVxuXG4gICAgLyoqXG4gICAgICogQWRkIGEgbmV3IHJlc291cmNlIHNvdXJjZSB0byB0aGUgZW5kIG9mIHRoZSByZXNvdXJjZSBsaXN0LlxuICAgICAqL1xuICAgIGFzeW5jIGFkZFJlc291cmNlUGFjayhyZXNvdXJjZVBhY2s6IFJlc291cmNlUGFjaykge1xuICAgICAgICBsZXQgaW5mbztcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGluZm8gPSBhd2FpdCByZXNvdXJjZVBhY2suaW5mbygpO1xuICAgICAgICB9IGNhdGNoe1xuICAgICAgICAgICAgaW5mbyA9IHsgcGFja19mb3JtYXQ6IC0xLCBkZXNjcmlwdGlvbjogXCJcIiB9O1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGRvbWFpbnMgPSBhd2FpdCByZXNvdXJjZVBhY2suZG9tYWlucygpO1xuICAgICAgICBjb25zdCB3cmFwcGVyID0geyBpbmZvLCBzb3VyY2U6IHJlc291cmNlUGFjaywgZG9tYWlucyB9O1xuXG4gICAgICAgIHRoaXMubGlzdC5wdXNoKHdyYXBwZXIpO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIENsZWFyIGFsbCBjYWNoZVxuICAgICAqL1xuICAgIGNsZWFyQ2FjaGUoKSB7IHRoaXMuY2FjaGUgPSB7fTsgfVxuICAgIC8qKlxuICAgICAqIENsZWFyIGFsbCByZXNvdXJjZSBzb3VyY2UgYW5kIGNhY2hlXG4gICAgICovXG4gICAgY2xlYXJBbGwoKSB7XG4gICAgICAgIHRoaXMuY2FjaGUgPSB7fTtcbiAgICAgICAgdGhpcy5saXN0LnNwbGljZSgwLCB0aGlzLmxpc3QubGVuZ3RoKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBTd2FwIHRoZSByZXNvdXJjZSBzb3VyY2UgcHJpb3JpdHkuXG4gICAgICovXG4gICAgc3dhcChmaXJzdDogbnVtYmVyLCBzZWNvbmQ6IG51bWJlcikge1xuICAgICAgICBpZiAoZmlyc3QgPj0gdGhpcy5saXN0Lmxlbmd0aCB8fCBmaXJzdCA8IDAgfHwgc2Vjb25kID49IHRoaXMubGlzdC5sZW5ndGggfHwgc2Vjb25kIDwgMCkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiSWxsZWdhbCBpbmRleFwiKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IGZpciA9IHRoaXMubGlzdFtmaXJzdF07XG4gICAgICAgIHRoaXMubGlzdFtmaXJzdF0gPSB0aGlzLmxpc3Rbc2Vjb25kXTtcbiAgICAgICAgdGhpcy5saXN0W3NlY29uZF0gPSBmaXI7XG5cbiAgICAgICAgdGhpcy5jbGVhckNhY2hlKCk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogSW52YWxpZGF0ZSB0aGUgcmVzb3VyY2UgY2FjaGVcbiAgICAgKi9cbiAgICBpbnZhbGlkYXRlKGxvY2F0aW9uOiBSZXNvdXJjZUxvY2F0aW9uKSB7XG4gICAgICAgIGRlbGV0ZSB0aGlzLmNhY2hlW2Ake2xvY2F0aW9uLmRvbWFpbn06JHtsb2NhdGlvbi5wYXRofWBdO1xuICAgIH1cblxuICAgIGxvYWQobG9jYXRpb246IFJlc291cmNlTG9jYXRpb24pOiBQcm9taXNlPFJlc291cmNlIHwgdW5kZWZpbmVkPjtcbiAgICBsb2FkKGxvY2F0aW9uOiBSZXNvdXJjZUxvY2F0aW9uLCB1cmxPbmx5OiBmYWxzZSk6IFByb21pc2U8UmVzb3VyY2UgfCB1bmRlZmluZWQ+O1xuICAgIGxvYWQobG9jYXRpb246IFJlc291cmNlTG9jYXRpb24sIHVybE9ubHk6IHRydWUpOiBQcm9taXNlPFJlc291cmNlIHwgdW5kZWZpbmVkPjtcbiAgICAvKipcbiAgICAgKiBMb2FkIHRoZSByZXNvdXJjZSBpbiB0aGF0IGxvY2F0aW9uLiBUaGlzIHdpbGwgd2FsayB0aHJvdWdoIGN1cnJlbnQgcmVzb3VyY2Ugc291cmNlIGxpc3QgdG8gbG9hZCB0aGUgcmVzb3VyY2UuXG4gICAgICogQHBhcmFtIGxvY2F0aW9uIFRoZSByZXNvdXJjZSBsb2NhdGlvblxuICAgICAqIEBwYXJhbSB1cmxPbmx5IElmIHRydWUsIGl0IHdpbGwgZm9yY2UgcmV0dXJuIHVyaSwgZWxzZSBpdCB3aWxsIHJldHVybiB0aGUgbm9ybWFsIHJlc291cmNlIGNvbnRlbnRcbiAgICAgKi9cbiAgICBhc3luYyBsb2FkKGxvY2F0aW9uOiBSZXNvdXJjZUxvY2F0aW9uLCB1cmxPbmx5OiBib29sZWFuID0gZmFsc2UpOiBQcm9taXNlPGFueT4ge1xuICAgICAgICBjb25zdCBjYWNoZWQgPSB0aGlzLmNhY2hlW2Ake2xvY2F0aW9uLmRvbWFpbn06JHtsb2NhdGlvbi5wYXRofWBdO1xuICAgICAgICBpZiAoY2FjaGVkKSB7IHJldHVybiBjYWNoZWQ7IH1cbiAgICAgICAgZm9yIChjb25zdCBzcmMgb2YgdGhpcy5saXN0KSB7XG4gICAgICAgICAgICBjb25zdCBsb2FkZWQgPSBhd2FpdCBzcmMuc291cmNlLmxvYWQobG9jYXRpb24sIHVybE9ubHkpO1xuICAgICAgICAgICAgaWYgKCFsb2FkZWQpIHsgY29udGludWU7IH1cbiAgICAgICAgICAgIHRoaXMucHV0Q2FjaGUobG9hZGVkKTtcbiAgICAgICAgICAgIHJldHVybiBsb2FkZWQ7XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cblxuICAgIHByaXZhdGUgcHV0Q2FjaGUocmVzOiBSZXNvdXJjZSkge1xuICAgICAgICB0aGlzLmNhY2hlW2Ake3Jlcy5sb2NhdGlvbi5kb21haW59OiR7cmVzLmxvY2F0aW9uLnBhdGh9YF0gPSByZXM7XG4gICAgfVxufVxuXG5leHBvcnQgKiBmcm9tIFwiLi9tb2RlbC1sb2FkZXJcIjtcbiJdfQ==
\No newline at end of file