Skip to content

Commit aa8f5d3

Browse files
committed
feat: filecount by extension
1 parent 90a8d30 commit aa8f5d3

File tree

5 files changed

+55
-7
lines changed

5 files changed

+55
-7
lines changed

demo/esp32/include/svelteesp32async.h

Lines changed: 8 additions & 1 deletion
Large diffs are not rendered by default.

demo/esp32/include/svelteesp32psychic.h

Lines changed: 8 additions & 1 deletion
Large diffs are not rendered by default.

demo/esp32/src/main.cpp

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,10 @@
1212
#error Missing index file
1313
#endif
1414

15+
#if SVELTEESP32_CSS_FILES > 1
16+
#error Too much CSS files
17+
#endif
18+
1519
AsyncWebServer server(80);
1620
void setup()
1721
{
@@ -34,6 +38,10 @@ void loop() {}
3438
#error Missing index file
3539
#endif
3640

41+
#if SVELTEESP32_CSS_FILES > 1
42+
#error Too much CSS files
43+
#endif
44+
3745
PsychicHttpServer server;
3846
void setup()
3947
{

src/cppCode.ts

Lines changed: 20 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@ import { compile as handlebarsCompile } from 'handlebars';
22

33
import { cmdLine } from './commandLine';
44

5-
export type cppCodeSource = {
5+
export type CppCodeSource = {
66
filename: string;
77
dataname: string;
88
datanameUpperCase: string;
@@ -11,6 +11,13 @@ export type cppCodeSource = {
1111
isGzip: boolean;
1212
md5: string;
1313
};
14+
export type CppCodeSources = CppCodeSource[];
15+
16+
export type ExtensionGroup = {
17+
extension: string;
18+
count: number;
19+
};
20+
export type ExtensionGroups = ExtensionGroup[];
1421

1522
const psychicTemplate = `
1623
//engine: PsychicHttpServer
@@ -25,10 +32,15 @@ const psychicTemplate = `
2532
2633
#define {{definePrefix}}_COUNT {{fileCount}}
2734
#define {{definePrefix}}_SIZE {{fileSize}}
35+
2836
{{#each sources}}
2937
#define {{../definePrefix}}_FILE_{{this.datanameUpperCase}}
3038
{{/each}}
3139
40+
{{#each filesByExtension}}
41+
#define {{../definePrefix}}_{{this.extension}}_FILES {{this.count}}
42+
{{/each}}
43+
3244
{{#each sources}}
3345
const uint8_t data_{{this.dataname}}[{{this.length}}] = { {{this.bytes}} };
3446
{{#if ../isEtag}}
@@ -73,10 +85,15 @@ const asyncTemplate = `
7385
7486
#define {{definePrefix}}_COUNT {{fileCount}}
7587
#define {{definePrefix}}_SIZE {{fileSize}}
88+
7689
{{#each sources}}
7790
#define {{../definePrefix}}_FILE_{{this.datanameUpperCase}}
7891
{{/each}}
7992
93+
{{#each filesByExtension}}
94+
#define {{../definePrefix}}_{{this.extension}}_FILES {{this.count}}
95+
{{/each}}
96+
8097
{{#each sources}}
8198
const uint8_t data_{{this.dataname}}[{{this.length}}] PROGMEM = { {{this.bytes}} };
8299
{{#if ../isEtag}}
@@ -110,7 +127,7 @@ void {{methodName}}(AsyncWebServer * server) {
110127
{{/each}}
111128
}`;
112129

113-
export const getCppCode = (sources: cppCodeSource[]): string =>
130+
export const getCppCode = (sources: CppCodeSources, filesByExtension: ExtensionGroups): string =>
114131
handlebarsCompile(cmdLine.engine === 'psychic' ? psychicTemplate : asyncTemplate)({
115132
commandLine: process.argv.slice(2).join(' '),
116133
now: `${new Date().toLocaleDateString()} ${new Date().toLocaleTimeString()}`,
@@ -122,6 +139,7 @@ export const getCppCode = (sources: cppCodeSource[]): string =>
122139
bytes: [...s.content].map((v) => `0x${v.toString(16)}`).join(', '),
123140
isDefault: s.filename.startsWith('index.htm')
124141
})),
142+
filesByExtension,
125143
isEtag: cmdLine.etag,
126144
methodName: cmdLine.espmethod,
127145
definePrefix: cmdLine.define

src/index.ts

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import { gzipSync } from 'node:zlib';
77
import { lookup } from 'mime-types';
88

99
import { cmdLine } from './commandLine';
10-
import { cppCodeSource, getCppCode } from './cppCode';
10+
import { CppCodeSources, ExtensionGroups, getCppCode } from './cppCode';
1111
import { getFiles } from './file';
1212

1313
const summary = {
@@ -16,7 +16,8 @@ const summary = {
1616
gzipsize: 0
1717
};
1818

19-
const sources: cppCodeSource[] = [];
19+
const sources: CppCodeSources = [];
20+
const filesByExtension: ExtensionGroups = [];
2021
const files = getFiles();
2122
if (files.length === 0) {
2223
console.error(`Directory ${cmdLine.sourcepath} is empty`);
@@ -30,6 +31,12 @@ for (const file of files) {
3031

3132
const filename = file.replace(/\\/g, '/');
3233
const dataname = filename.replace(/[./-]/g, '_');
34+
let extension = path.extname(filename).toUpperCase();
35+
if (extension.startsWith('.')) extension = extension.slice(1);
36+
37+
const group = filesByExtension.find((fe) => fe.extension === extension);
38+
if (group) group.count += 1;
39+
else filesByExtension.push({ extension, count: 1 });
3340

3441
const rawContent = readFileSync(path.join(cmdLine.sourcepath, file), { flag: 'r' });
3542
const md5 = createHash('md5').update(rawContent).digest('hex');
@@ -75,8 +82,9 @@ for (const file of files) {
7582

7683
console.log('');
7784
}
85+
filesByExtension.sort((left, right) => left.extension.localeCompare(right.extension));
7886

79-
const cppFile = getCppCode(sources);
87+
const cppFile = getCppCode(sources, filesByExtension);
8088
writeFileSync(cmdLine.outputfile, cppFile);
8189

8290
if (cmdLine['no-gzip']) {

0 commit comments

Comments
 (0)