Skip to content

Commit 4919021

Browse files
committed
chore(): refine identify react chunk
1 parent 3a073b2 commit 4919021

File tree

1 file changed

+90
-59
lines changed

1 file changed

+90
-59
lines changed

cypress/size-check.spec.js

Lines changed: 90 additions & 59 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@
33

44
const homepage = "http://localhost:8081/-size-check-";
55
const resourceUrlPrefix = "http://localhost:8081/sa-static/-/bricks/";
6-
const reactChunkRegExp = /\/chunks\/(?:(?:40)?41|3?144)\.[0-9a-f]+\.js$/;
76

87
describe("brick size check", () => {
98
it("all together", () => {
@@ -20,31 +19,36 @@ describe("brick size check", () => {
2019
});
2120
cy.get("@console.error").should("not.be.called");
2221

23-
cy.window().then((win) => {
22+
cy.window().then(async (win) => {
2423
const { performance } = win;
2524
const resources = performance.getEntriesByType("resource");
2625
let others = 0;
2726
let total = 0;
2827
let react = 0;
2928
const deps = new Map();
30-
resources.map((resource) => {
31-
if (resource.name.startsWith(resourceUrlPrefix)) {
32-
total += resource.transferSize;
33-
if (reactChunkRegExp.test(resource.name)) {
34-
react += resource.transferSize;
29+
await Promise.all(
30+
resources.map(async (resource) => {
31+
if (
32+
resource.name.startsWith(resourceUrlPrefix) &&
33+
!resource.name.endsWith(".LICENSE.txt")
34+
) {
35+
total += resource.transferSize;
36+
if (await isReactChunk(resource.name)) {
37+
react += resource.transferSize;
38+
} else {
39+
const resourcePkg = resource.name
40+
.substring(resourceUrlPrefix.length)
41+
.split("/", 1)[0];
42+
deps.set(
43+
resourcePkg,
44+
(deps.get(resourcePkg) ?? 0) + resource.transferSize
45+
);
46+
}
3547
} else {
36-
const resourcePkg = resource.name
37-
.substring(resourceUrlPrefix.length)
38-
.split("/", 1)[0];
39-
deps.set(
40-
resourcePkg,
41-
(deps.get(resourcePkg) ?? 0) + resource.transferSize
42-
);
48+
others += resource.transferSize;
4349
}
44-
} else {
45-
others += resource.transferSize;
46-
}
47-
});
50+
})
51+
);
4852
const lines = [];
4953
lines.push(
5054
`Core: ${getSizeInKB(others)}`,
@@ -87,33 +91,38 @@ describe("brick size check", () => {
8791
cy.contains("This is size-check!");
8892
cy.get("@console.error").should("not.be.called");
8993

90-
cy.window().then((win) => {
94+
cy.window().then(async (win) => {
9195
const { performance } = win;
9296
const resources = performance.getEntriesByType("resource");
9397
let total = 0;
9498
let self = 0;
9599
let react = 0;
96100
const deps = new Map();
97-
resources.map((resource) => {
98-
if (resource.name.startsWith(resourceUrlPrefix)) {
99-
total += resource.transferSize;
100-
if (reactChunkRegExp.test(resource.name)) {
101-
react += resource.transferSize;
102-
} else {
103-
const resourcePkg = resource.name
104-
.substring(resourceUrlPrefix.length)
105-
.split("/", 1)[0];
106-
if (resourcePkg === pkgName) {
107-
self += resource.transferSize;
101+
await Promise.all(
102+
resources.map(async (resource) => {
103+
if (
104+
resource.name.startsWith(resourceUrlPrefix) &&
105+
!resource.name.endsWith(".LICENSE.txt")
106+
) {
107+
total += resource.transferSize;
108+
if (await isReactChunk(resource.name)) {
109+
react += resource.transferSize;
108110
} else {
109-
deps.set(
110-
resourcePkg,
111-
(deps.get(resourcePkg) ?? 0) + resource.transferSize
112-
);
111+
const resourcePkg = resource.name
112+
.substring(resourceUrlPrefix.length)
113+
.split("/", 1)[0];
114+
if (resourcePkg === pkgName) {
115+
self += resource.transferSize;
116+
} else {
117+
deps.set(
118+
resourcePkg,
119+
(deps.get(resourcePkg) ?? 0) + resource.transferSize
120+
);
121+
}
113122
}
114123
}
115-
}
116-
});
124+
})
125+
);
117126

118127
const lines = [];
119128
lines.push(`${pkgName}:`, ` total: ${getSizeInKB(total)}`);
@@ -162,39 +171,45 @@ describe("brick size check", () => {
162171
cy.contains("This is size-check!");
163172
cy.get("@console.error").should("not.be.called");
164173

165-
cy.window().then((win) => {
174+
cy.window().then(async (win) => {
166175
const { performance } = win;
167176
const resources = performance.getEntriesByType("resource");
168177
let total = 0;
169178
let self = 0;
170179
let react = 0;
171180
const deps = new Map();
172181
const byFiles = new Map();
173-
resources.map((resource) => {
174-
if (resource.name.startsWith(resourceUrlPrefix)) {
175-
total += resource.transferSize;
176-
if (reactChunkRegExp.test(resource.name)) {
177-
react += resource.transferSize;
178-
} else {
179-
const resourcePkg = resource.name
180-
.substring(resourceUrlPrefix.length)
181-
.split("/", 1)[0];
182-
if (resourcePkg === pkgName) {
183-
self += resource.transferSize;
182+
183+
await Promise.all(
184+
resources.map(async (resource) => {
185+
if (
186+
resource.name.startsWith(resourceUrlPrefix) &&
187+
!resource.name.endsWith(".LICENSE.txt")
188+
) {
189+
total += resource.transferSize;
190+
if (await isReactChunk(resource.name)) {
191+
react += resource.transferSize;
184192
} else {
185-
deps.set(
186-
resourcePkg,
187-
(deps.get(resourcePkg) ?? 0) + resource.transferSize
188-
);
193+
const resourcePkg = resource.name
194+
.substring(resourceUrlPrefix.length)
195+
.split("/", 1)[0];
196+
if (resourcePkg === pkgName) {
197+
self += resource.transferSize;
198+
} else {
199+
deps.set(
200+
resourcePkg,
201+
(deps.get(resourcePkg) ?? 0) + resource.transferSize
202+
);
203+
}
189204
}
205+
// Remove the version part from the file path
206+
const filePath = resource.name
207+
.substring(resourceUrlPrefix.length)
208+
.replace(/([^/]+\/)\d+\.\d+\.\d+\//, "$1");
209+
byFiles.set(filePath, resource.transferSize);
190210
}
191-
// Remove the version part from the file path
192-
const filePath = resource.name
193-
.substring(resourceUrlPrefix.length)
194-
.replace(/([^/]+\/)\d+\.\d+\.\d+\//, "$1");
195-
byFiles.set(filePath, resource.transferSize);
196-
}
197-
});
211+
})
212+
);
198213

199214
const lines = [];
200215
lines.push(`${brick}:`, ` total: ${getSizeInKB(total)}`);
@@ -229,3 +244,19 @@ describe("brick size check", () => {
229244
function getSizeInKB(size) {
230245
return `${(+(size / 1024).toFixed(2)).toLocaleString()} KB`;
231246
}
247+
248+
async function isReactChunk(resourceName) {
249+
const response = await fetch(`${resourceName}.LICENSE.txt`);
250+
if (response.ok) {
251+
const license = await response.text();
252+
if (
253+
license.includes("@license React") &&
254+
/(?:react(?:-dom(?:-client)?)?|scheduler)\.production(?:\.min)?\.js/.test(
255+
license
256+
)
257+
) {
258+
return true;
259+
}
260+
}
261+
return false;
262+
}

0 commit comments

Comments
 (0)