Skip to content

Commit 01c89a2

Browse files
committed
add generateStats
1 parent ae1449b commit 01c89a2

File tree

6 files changed

+435
-0
lines changed

6 files changed

+435
-0
lines changed

browser/gulpfile.js

+5
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@ gulp.task('updateBrowser', gulp.series(
3636
browser.findSamples,
3737
browser.copySamples,
3838
browser.updateCodeViewer,
39+
browser.generateStats,
3940
// browser.copyBootstrapCss,
4041
));
4142

@@ -94,3 +95,7 @@ gulp.task('copyBootstrapCss', browser.copyBootstrapCss);
9495

9596
gulp.task('updateBootstrap', browser.updateBootstrap);
9697

98+
gulp.task('generateStats', gulp.series(
99+
browser.findSamples,
100+
browser.generateStats,
101+
));

browser/scripts/browser.js

+12
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ const path = require("path");
1515
const es = require("event-stream");
1616
const del = require("del");
1717
const utils = require("./utils.js")
18+
const stats = require("./stats.js")
1819

1920
const EOL = '\r\n';
2021

@@ -295,6 +296,17 @@ function findSamples(cb) {
295296

296297
} exports.findSamples = findSamples;
297298

299+
exports.generateStats = function generateStats(cb) {
300+
var combinedSamples = [];
301+
for (const info of samplesDatabase) {
302+
// console.log(info);
303+
var samplePath = info.SourcePath.replace('samples/', '').replace('../','');
304+
combinedSamples.push(samplePath);
305+
break;
306+
}
307+
stats.generate(cb, combinedSamples);
308+
}
309+
298310
// this function is copying source files for individual samples to browser
299311
// generates modules for samples, routing data, and routing modules
300312
function copySamples(cb) {

browser/scripts/stats.js

+99
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,99 @@
1+
// this script generates JSON file with stats on:
2+
// - which samples are in the browser (DOC samples)
3+
// - which samples are excluded from browser (DEV samples)
4+
// - which samples are imported from xplat repo
5+
6+
const gulp = require("gulp");
7+
const chmod = require("gulp-chmod");
8+
const flatten = require("gulp-flatten");
9+
const fs = require("fs");
10+
const path = require("path");
11+
12+
const path = require("path");
13+
const es = require("event-stream");
14+
const del = require("del");
15+
16+
// NOTE you can comment out strings in this array to run these function only on a subset of samples
17+
var samplesRepoPath = [
18+
// including samples for all components
19+
'../samples/**/package.json',
20+
21+
// including specific samples
22+
// '../samples/charts/doughnut-chart/overview/package.json',
23+
// '../samples/charts/category-chart/area-chart-multiple-sources/package.json',
24+
// '../samples/gauges/**/measures/package.json',
25+
// '../samples/charts/sparkline/grid/package.json',
26+
// '../samples/maps/**/display-heat-imagery/package.json',
27+
// '../samples/excel/**/operations-on-workbooks/package.json',
28+
// '../samples/charts/zoomslider/overview/package.json',
29+
30+
// including samples for specific components
31+
// '../samples/charts/**/package.json',
32+
// '../samples/maps/**/package.json',
33+
// '../samples/excel/**/package.json',
34+
// '../samples/gauges//**/package.json',
35+
// '../samples/grids/**/package.json',
36+
// '../samples/layouts/**/package.json',
37+
// '../samples/editors/**/package.json',
38+
39+
// excluding package.json in node_modules sub folders in case they are installed locally
40+
// '!../samples/**/charts/financial-chart/theming/package.json',
41+
'!../samples/**/node_modules/**/package.json',
42+
'!../samples/**/node_modules/**',
43+
'!../samples/**/node_modules',
44+
];
45+
46+
function generate(cb, samplesInBrowser) {
47+
48+
var sampleStats = {};
49+
gulp.src(samplesRepoPath, {allowEmpty: true})
50+
.pipe(es.map(function(file, fileCallback) {
51+
//log("getting: " + file.dirname);
52+
// saving info for each samples in samplesDatabase
53+
// log("sample: " + file.dirname);
54+
var samplePath = file.dirname.toString().split('\\samples\\')[1].split('\\').join('/');
55+
sampleStats[samplePath] = { browser: false, xplat: false, path: samplePath, }
56+
57+
fileCallback(null, file);
58+
}))
59+
.on("end", function() {
60+
61+
for (const samplePath of samplesInBrowser) {
62+
if (sampleStats[samplePath]) {
63+
sampleStats[samplePath].browser = true;
64+
} else {
65+
console.log(sampleStats);
66+
throw new Error("Cannot find a sample in all samples: " + samplePath);
67+
}
68+
}
69+
70+
var jsonStats = [];
71+
var keys = Object.keys(sampleStats);
72+
for (const samplePath of keys) {
73+
var info = sampleStats[samplePath];
74+
jsonStats.push( ' { "browser": ' + info.browser + ', "xplat": ' + info.xplat + ', "path": "' + info.path + '" }' );
75+
// jsonStats.push(sampleStats[samplePath]);
76+
// if (sampleStats[samplePath])
77+
}
78+
var jsonData = jsonStats.join(',\n').replace(/true,/g, 'true, ');
79+
jsonData = "[\n" + jsonData + "\n]"
80+
// var json = JSON.stringify(jsonStats, null, ' ').replace(/\",\n/g, '\",')
81+
// .replace(/ /g, ' ')
82+
// // .replace(/true,/g, 'true, ')
83+
// .replace(/\"\n*.\}/g, '\" \}')
84+
// .replace(/\{\n*.\"/g, '\{ \"')
85+
// ;
86+
87+
// console.log(jsonStats);
88+
// console.log(sampleStats);
89+
// console.log("generate... done = " + sampleStats.length);
90+
91+
const jsonPath = "./src/assets/stats.json";
92+
fs.writeFileSync(jsonPath, jsonData);
93+
// console.log(jsonData);
94+
console.log("saved " + jsonStats.length + " samples stats to " + jsonPath);
95+
96+
if (cb) cb();
97+
});
98+
99+
} exports.generate = generate;

browser/src/app/app-routing.module.ts

+2
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,8 @@ export const samplesRoutes: Routes = [
1616
// note these section is auto-generated - do not change it:
1717
// Auto-Insert-Modules-Start
1818
{ path: "charts", data: ["SamplesForCharts"], loadChildren: () => import("../samples/charts/samples-modules").then(m => m.SamplesForCharts) },
19+
{ path: "excel", data: ["SamplesForExcel"], loadChildren: () => import("../samples/excel/samples-modules").then(m => m.SamplesForExcel) },
20+
{ path: "gauges", data: ["SamplesForGauges"], loadChildren: () => import("../samples/gauges/samples-modules").then(m => m.SamplesForGauges) },
1921
{ path: "maps", data: ["SamplesForMaps"], loadChildren: () => import("../samples/maps/samples-modules").then(m => m.SamplesForMaps) }
2022

2123

browser/src/app/index/index.component.ts

+4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,8 @@ import BrowserInfo from "../../browser-info.json";
99
// note these section is auto-generated - do not change it:
1010
// Auto-Insert-Imports-RoutingData-Start
1111
import { RoutingDataForCharts } from "../../samples/charts/routing-data";
12+
import { RoutingDataForExcel } from "../../samples/excel/routing-data";
13+
import { RoutingDataForGauges } from "../../samples/gauges/routing-data";
1214
import { RoutingDataForMaps } from "../../samples/maps/routing-data";
1315

1416

@@ -46,6 +48,8 @@ export class IndexComponent implements OnInit, AfterViewInit {
4648
private modulesRoutes = [
4749
// Auto-Insert-SamplesRoutingArray-Start
4850
{ path: "charts", routesData: RoutingDataForCharts },
51+
{ path: "excel", routesData: RoutingDataForExcel },
52+
{ path: "gauges", routesData: RoutingDataForGauges },
4953
{ path: "maps", routesData: RoutingDataForMaps }
5054

5155

0 commit comments

Comments
 (0)