forked from playcanvas/engine
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbundle.js
More file actions
87 lines (73 loc) · 2.28 KB
/
bundle.js
File metadata and controls
87 lines (73 loc) · 2.28 KB
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
import { platform } from '../core/platform.js';
import { http, Http } from '../net/http.js';
import { Bundle } from '../bundles/bundle.js';
import { Untar, UntarWorker } from './untar.js';
/**
* @private
* @class
* @name BundleHandler
* @implements {ResourceHandler}
* @param {AssetRegistry} assets - The asset registry.
* @classdesc Loads Bundle Assets.
*/
class BundleHandler {
constructor(assets) {
this._assets = assets;
this._worker = null;
this.maxRetries = 0;
}
load(url, callback) {
if (typeof url === 'string') {
url = {
load: url,
original: url
};
}
const self = this;
http.get(url.load, {
responseType: Http.ResponseType.ARRAY_BUFFER,
retry: this.maxRetries > 0,
maxRetries: this.maxRetries
}, function (err, response) {
if (! err) {
try {
self._untar(response, callback);
} catch (ex) {
callback("Error loading bundle resource " + url.original + ": " + ex);
}
} else {
callback("Error loading bundle resource " + url.original + ": " + err);
}
});
}
_untar(response, callback) {
const self = this;
// use web workers if available otherwise
// fallback to untar'ing in the main thread
if (platform.workers) {
// create web worker if necessary
if (!self._worker) {
self._worker = new UntarWorker(self._assets.prefix);
}
self._worker.untar(response, function (err, files) {
callback(err, files);
// if we have no more requests for this worker then
// destroy it
if (! self._worker.hasPendingRequests()) {
self._worker.destroy();
self._worker = null;
}
});
} else {
const archive = new Untar(response);
const files = archive.untar(self._assets.prefix);
callback(null, files);
}
}
open(url, data) {
return new Bundle(data);
}
patch(asset, assets) {
}
}
export { BundleHandler };