Skip to content

Commit d84fb2a

Browse files
authored
Merge pull request #5 from puzzle-js/feature/conditional-asset-fetch
Feature/conditional asset fetch
2 parents c3b71df + 79bc79c commit d84fb2a

File tree

6 files changed

+59
-6
lines changed

6 files changed

+59
-6
lines changed

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.1.6",
4+
"version": "1.1.7",
55
"author": "<emre.kul@trendyol.com>",
66
"license": "MIT",
77
"repository": {

src/core.ts

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import {Module} from "./module";
22
import {EVENT, RESOURCE_LOADING_TYPE} from "./enums";
33
import {IPageFragmentConfig, IPageLibAsset, IPageLibConfiguration} from "./types";
44
import {on} from "./decorators";
5-
import {AssetHelper} from "./assetHelper";
5+
import { AssetHelper } from "./assetHelper";
66

77
export class Core extends Module {
88
private static observer: IntersectionObserver | undefined;
@@ -55,7 +55,13 @@ export class Core extends Module {
5555

5656
@on(EVENT.ON_PAGE_LOAD)
5757
static pageLoaded() {
58-
const onFragmentRenderAssets = Core.__pageConfiguration.assets.filter(asset => asset.loadMethod === RESOURCE_LOADING_TYPE.ON_PAGE_RENDER && !asset.preLoaded);
58+
const onFragmentRenderAssets = Core.__pageConfiguration.assets.filter(asset => {
59+
if(asset.loadMethod === RESOURCE_LOADING_TYPE.ON_PAGE_RENDER && !asset.preLoaded) {
60+
const fragment = Core.__pageConfiguration.fragments.find(fragment => fragment.name === asset.fragment);
61+
return fragment && fragment.attributes.if !== "false";
62+
}
63+
return false;
64+
});
5965

6066
const scripts = Core.createLoadQueue(onFragmentRenderAssets);
6167

src/modules/storage.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ export class Storage extends Module {
2020

2121
static async printApplicationCacheInfo() {
2222
const cacheNames = await caches.keys();
23-
let storageList: { [key: string]: any } = {
23+
const storageList: { [key: string]: any } = {
2424
total: 0
2525
};
2626

test/core.spec.ts

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,14 @@ import {JSDOM} from "jsdom";
33
import {PuzzleJs} from "../src/puzzle";
44
import {Core} from "../src/core";
55
import {createPageLibConfiguration} from "./mock";
6+
import sinon from "sinon";
7+
import {AssetHelper} from "../src/assetHelper";
68
import * as faker from "faker";
79
import {IPageLibAsset, IPageLibConfiguration, IPageLibDependency} from "../src/types";
810
import {RESOURCE_LOADING_TYPE, RESOURCE_TYPE} from "../src/enums";
911

12+
const sandbox = sinon.createSandbox();
13+
1014
declare global {
1115
interface Window {
1216
[key: string]: any;
@@ -25,6 +29,7 @@ declare var global: Global;
2529
describe('Module - Core', () => {
2630
beforeEach(() => {
2731
global.window = (new JSDOM(``, {runScripts: "outside-only"})).window;
32+
sandbox.verifyAndRestore();
2833
});
2934

3035
afterEach(() => {
@@ -164,4 +169,46 @@ describe('Module - Core', () => {
164169
expect(queue).to.deep.eq(
165170
[]);
166171
});
172+
173+
it('should create true load queue for js assets excluding conditional fragments', function () {
174+
const assets = [
175+
{
176+
name: 'bundle1',
177+
dependent: ['vendor1'],
178+
preLoaded: false,
179+
link: 'bundle1.js',
180+
fragment: 'test',
181+
loadMethod: RESOURCE_LOADING_TYPE.ON_PAGE_RENDER,
182+
type: RESOURCE_TYPE.JS
183+
}
184+
] as IPageLibAsset[];
185+
const dependencies = [
186+
{
187+
name: 'vendor1',
188+
link: 'vendor1.js',
189+
preLoaded: false
190+
}
191+
] as IPageLibDependency[];
192+
const config = {
193+
dependencies,
194+
assets,
195+
fragments: [{
196+
name: 'test',
197+
attributes: {
198+
if: "false"
199+
},
200+
chunked: true,
201+
clientAsync: false,
202+
source: undefined
203+
}],
204+
page: 'page'
205+
} as IPageLibConfiguration;
206+
207+
const mockLoadJsSeries = sandbox.mock(AssetHelper);
208+
209+
Core.config(JSON.stringify(config));
210+
Core.pageLoaded();
211+
212+
mockLoadJsSeries.expects("loadJsSeries").calledWith([]);
213+
});
167214
});

test/mock.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,5 +9,5 @@ export const createPageLibConfiguration = (providedConfiguration?: object) => {
99
}],
1010
page: 'test-page',
1111
...providedConfiguration
12-
} as unknown as IPageLibConfiguration
12+
} as unknown as IPageLibConfiguration;
1313
};

test/puzzle.spec.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ describe('PuzzleJs', () => {
3333

3434
PuzzleJs.inject({module: Module});
3535

36-
expect((<any>PuzzleJs)['module'].m).to.eq(Module.m);
36+
expect((PuzzleJs as any)['module'].m).to.eq(Module.m);
3737
});
3838

3939
it('should register listeners', function () {

0 commit comments

Comments
 (0)