Skip to content

Commit 36d1395

Browse files
committed
Fix asset error handling
1 parent ba37336 commit 36d1395

File tree

4 files changed

+77
-3
lines changed

4 files changed

+77
-3
lines changed

package-lock.json

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@puzzle-js/client-lib",
33
"main": "dist/index.js",
4-
"version": "1.6.1",
4+
"version": "1.6.2",
55
"author": "<emre.kul@trendyol.com>",
66
"license": "MIT",
77
"repository": {

src/assetHelper.ts

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,10 @@ export class AssetHelper {
3737
scriptTag.onload = () => {
3838
this.promises[asset.name].resolve();
3939
};
40+
41+
scriptTag.onerror = () => {
42+
this.promises[asset.name].reject();
43+
};
4044
} else {
4145
this.promises[asset.name].resolve();
4246
}
@@ -58,6 +62,9 @@ export class AssetHelper {
5862
linkTag.onload = () => {
5963
this.promises[asset.name].resolve();
6064
};
65+
linkTag.onerror = () => {
66+
this.promises[asset.name].reject();
67+
};
6168

6269
window.document.head.appendChild(linkTag);
6370
}
@@ -71,24 +78,32 @@ export class AssetHelper {
7178
}
7279

7380
for (let i = 0, p: any = Promise.resolve(); i < assets.length; i++) {
74-
p = p.then(() => new Promise(resolve => {
81+
p = p.then(() => new Promise((resolve, reject) => {
7582
const asset = assets[i];
7683
if (asset.type === RESOURCE_TYPE.JS) {
7784
const assetLoading = AssetHelper.loadJs(asset);
7885
assetLoading.then(() => {
7986
resolve(null);
87+
}).catch(() => {
88+
reject(null);
8089
});
8190
} else if (asset.type === RESOURCE_TYPE.CSS) {
8291
const assetLoading = AssetHelper.loadCSS(asset);
8392
assetLoading.then(() => {
8493
resolve(null);
94+
}).catch(() => {
95+
reject(null);
8596
});
8697
}
8798
}
8899
)).then(() => {
89100
if (callback && assets.length - 1 === i) {
90101
callback();
91102
}
103+
}).catch(() => {
104+
if (callback && assets.length - 1 === i) {
105+
callback();
106+
}
92107
});
93108
}
94109
}

test/assetHelper.spec.ts

Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,65 @@ describe('Module - Asset Helper', () => {
130130
});
131131
});
132132

133+
it('should call given callback when js asset has an error', async (done) => {
134+
// arrange
135+
const spy = sinon.spy();
136+
const assets: IPageLibAsset[] = [
137+
{
138+
name: faker.lorem.word(),
139+
loadMethod: RESOURCE_LOADING_TYPE.ON_FRAGMENT_RENDER,
140+
fragment: faker.lorem.word(),
141+
dependent: [],
142+
type: RESOURCE_TYPE.JS,
143+
link: faker.lorem.word(),
144+
preLoaded: false,
145+
defer: true,
146+
}
147+
];
148+
149+
// act
150+
await AssetHelper.loadAssetSeries(assets, spy);
151+
152+
AssetHelper.promises[assets[0].name].reject();
153+
154+
// assert
155+
expect(global.window.document.body.children.length).to.eq(1);
156+
157+
setTimeout(() => {
158+
expect(spy.calledOnce).to.eq(true);
159+
done();
160+
});
161+
});
162+
163+
it('should call given callback when css asset has an error', async (done) => {
164+
// arrange
165+
const spy = sinon.spy();
166+
const assets: IPageLibAsset[] = [
167+
{
168+
name: faker.lorem.word(),
169+
loadMethod: RESOURCE_LOADING_TYPE.ON_FRAGMENT_RENDER,
170+
fragment: faker.lorem.word(),
171+
dependent: [],
172+
type: RESOURCE_TYPE.CSS,
173+
link: faker.lorem.word(),
174+
preLoaded: false
175+
}
176+
];
177+
178+
// act
179+
await AssetHelper.loadAssetSeries(assets, spy);
180+
181+
AssetHelper.promises[assets[0].name].reject();
182+
183+
// assert
184+
expect(global.window.document.head.children.length).to.eq(1);
185+
186+
setTimeout(() => {
187+
expect(spy.calledOnce).to.eq(true);
188+
done();
189+
});
190+
});
191+
133192
it('should call given callback if assets length is 0', async (done) => {
134193
// arrange
135194
const spy = sinon.spy();

0 commit comments

Comments
 (0)