diff --git a/src/packager/large-assets.js b/src/packager/large-assets.js index 60dc6bc..061038b 100644 --- a/src/packager/large-assets.js +++ b/src/packager/large-assets.js @@ -20,10 +20,12 @@ module.exports = { }, scaffolding: { src: 'scaffolding.js', + estimatedSize: 4775503, type: 'text' }, addons: { src: 'addons.js', + estimatedSize: 14339, type: 'text' } }; diff --git a/src/packager/lib/xhr.js b/src/packager/lib/xhr.js index 81e1580..918029c 100644 --- a/src/packager/lib/xhr.js +++ b/src/packager/lib/xhr.js @@ -1,8 +1,11 @@ +const clampProgress = (n) => Math.max(0, Math.min(1, n)); + const xhr = ({ url, type, progressCallback, - timeout + timeout, + estimatedSize }) => new Promise((resolve, reject) => { const xhr = new XMLHttpRequest(); xhr.onload = () => { @@ -19,6 +22,8 @@ const xhr = ({ xhr.onprogress = (e) => { if (e.lengthComputable) { progressCallback(e.loaded / e.total); + } else if (estimatedSize) { + progressCallback(clampProgress(e.loaded / estimatedSize)); } }; } diff --git a/src/packager/packager.js b/src/packager/packager.js index 5034fb7..763c096 100644 --- a/src/packager/packager.js +++ b/src/packager/packager.js @@ -83,6 +83,7 @@ class Packager extends EventTarget { result = await xhr({ url: asset.src, type: asset.type, + estimatedSize: asset.estimatedSize, progressCallback: (progress) => { dispatchProgress(progress); }