Skip to content

Commit 5eac36e

Browse files
Adding stats and feedback from Lars
1 parent f433de3 commit 5eac36e

File tree

3 files changed

+102
-22
lines changed

3 files changed

+102
-22
lines changed

src/compiler/build/build-stats.ts

+33-16
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
import { byteSize } from '@utils';
1+
import { byteSize, sortBy } from '@utils';
22
import type * as d from '../../declarations';
33

44
/**
@@ -10,14 +10,15 @@ import type * as d from '../../declarations';
1010
*/
1111
export function generateBuildStats(config: d.Config, buildCtx: d.BuildCtx) {
1212
const buildResults = buildCtx.buildResults;
13-
let jsonData: any;
1413

15-
if (buildResults.hasError) {
16-
jsonData = {
17-
diagnostics: buildResults.diagnostics,
18-
};
19-
} else {
20-
try {
14+
let jsonData: d.CompilerBuildStats | { diagnostics: d.Diagnostic[] };
15+
16+
try {
17+
if (buildResults.hasError) {
18+
jsonData = {
19+
diagnostics: buildResults.diagnostics,
20+
};
21+
} else {
2122
const stats: d.CompilerBuildStats = {
2223
timestamp: buildResults.timestamp,
2324
compiler: {
@@ -39,22 +40,27 @@ export function generateBuildStats(config: d.Config, buildCtx: d.BuildCtx) {
3940
hashedFileNameLength: config.hashedFileNameLength,
4041
buildEs5: config.buildEs5,
4142
},
42-
esmBrowser: sanitizeBundlesForStats(buildCtx.esmBrowserComponentBundle),
43-
esm: sanitizeBundlesForStats(buildCtx.esmComponentBundle),
44-
es5: sanitizeBundlesForStats(buildCtx.es5ComponentBundle),
45-
system: sanitizeBundlesForStats(buildCtx.systemComponentBundle),
46-
commonjs: sanitizeBundlesForStats(buildCtx.commonJsComponentBundle),
43+
formats: {
44+
esmBrowser: sanitizeBundlesForStats(buildCtx.esmBrowserComponentBundle),
45+
esm: sanitizeBundlesForStats(buildCtx.esmComponentBundle),
46+
es5: sanitizeBundlesForStats(buildCtx.es5ComponentBundle),
47+
system: sanitizeBundlesForStats(buildCtx.systemComponentBundle),
48+
commonjs: sanitizeBundlesForStats(buildCtx.commonJsComponentBundle),
49+
},
4750
components: getComponentsFileMap(config, buildCtx),
4851
entries: buildCtx.entryModules,
49-
sourceGraph: buildResults.componentGraph,
52+
componentGraph: buildResults.componentGraph,
53+
sourceGraph: getSourceGraph(config, buildCtx),
5054
rollupResults: buildCtx.rollupResults,
5155
collections: getCollections(config, buildCtx),
5256
};
5357

5458
jsonData = stats;
55-
} catch (e) {
56-
console.log(e);
5759
}
60+
} catch (e) {
61+
jsonData = {
62+
diagnostics: [e.message],
63+
};
5864
}
5965

6066
return jsonData;
@@ -96,6 +102,17 @@ function sanitizeBundlesForStats(bundleArray: d.BundleModule[]): d.CompilerBuild
96102
});
97103
}
98104

105+
function getSourceGraph(config: d.Config, buildCtx: d.BuildCtx) {
106+
let sourceGraph: d.BuildSourceGraph = {};
107+
108+
sortBy(buildCtx.moduleFiles, (m) => m.sourceFilePath).forEach((moduleFile) => {
109+
const key = relativePath(config, moduleFile.sourceFilePath);
110+
sourceGraph[key] = moduleFile.localImports.map((localImport) => relativePath(config, localImport)).sort();
111+
});
112+
113+
return sourceGraph;
114+
}
115+
99116
function getAppOutputs(config: d.Config, buildResults: d.CompilerBuildResults) {
100117
return buildResults.outputs.map((output) => {
101118
return {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
import type * as d from '@stencil/core/declarations';
2+
import { mockConfig, mockCompilerCtx, mockBuildCtx } from '@stencil/core/testing';
3+
import { generateBuildResults } from '../build-results';
4+
import { generateBuildStats } from '../build-stats';
5+
import path from 'path';
6+
7+
describe('generateBuildStats', () => {
8+
const root = path.resolve('/');
9+
const config = mockConfig();
10+
let compilerCtx: d.CompilerCtx;
11+
let buildCtx: d.BuildCtx;
12+
13+
beforeEach(() => {
14+
compilerCtx = mockCompilerCtx(config);
15+
buildCtx = mockBuildCtx(config, compilerCtx);
16+
});
17+
18+
it('should return a structured json object', async () => {
19+
buildCtx.buildResults = generateBuildResults(config, compilerCtx, buildCtx);
20+
21+
const result = generateBuildStats(config, buildCtx);
22+
23+
if (result.hasOwnProperty('timestamp')) {
24+
delete result.timestamp;
25+
}
26+
27+
expect(result).toStrictEqual({
28+
app: { bundles: 0, components: 0, entries: 0, fsNamespace: undefined, namespace: 'Testing', outputs: [] },
29+
collections: [],
30+
compiler: { name: 'in-memory', version: '0.0.0-dev.20210827160156' },
31+
componentGraph: {},
32+
components: [],
33+
entries: [],
34+
formats: { commonjs: [], es5: [], esm: [], esmBrowser: [], system: [] },
35+
options: {
36+
buildEs5: false,
37+
hashFileNames: false,
38+
hashedFileNameLength: undefined,
39+
minifyCss: false,
40+
minifyJs: false,
41+
},
42+
rollupResults: undefined,
43+
sourceGraph: {},
44+
});
45+
});
46+
47+
it('should return diagnostics if an error is hit', async () => {
48+
buildCtx.buildResults = generateBuildResults(config, compilerCtx, buildCtx);
49+
50+
buildCtx.buildResults.hasError = true;
51+
buildCtx.buildResults.diagnostics = ['Something bad happened'];
52+
53+
const result = generateBuildStats(config, buildCtx);
54+
55+
expect(result).toStrictEqual({
56+
diagnostics: ['Something bad happened'],
57+
});
58+
});
59+
});

src/declarations/stencil-private.ts

+10-6
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
import { BuildResultsComponentGraph } from '.';
12
import type {
23
BuildEvents,
34
BuildLog,
@@ -287,15 +288,18 @@ export interface CompilerBuildStats {
287288
hashedFileNameLength: number;
288289
buildEs5: boolean | 'prod';
289290
};
290-
esmBrowser: CompilerBuildStatBundle[];
291-
esm: CompilerBuildStatBundle[];
292-
es5: CompilerBuildStatBundle[];
293-
system: CompilerBuildStatBundle[];
294-
commonjs: CompilerBuildStatBundle[];
291+
formats: {
292+
esmBrowser: CompilerBuildStatBundle[];
293+
esm: CompilerBuildStatBundle[];
294+
es5: CompilerBuildStatBundle[];
295+
system: CompilerBuildStatBundle[];
296+
commonjs: CompilerBuildStatBundle[];
297+
};
295298
components: BuildComponent[];
296299
entries: EntryModule[];
297300
rollupResults: RollupResults;
298-
sourceGraph: BuildSourceGraph;
301+
sourceGraph?: BuildSourceGraph;
302+
componentGraph: BuildResultsComponentGraph;
299303
collections: {
300304
name: string;
301305
source: string;

0 commit comments

Comments
 (0)