svelteesp32 1.4.0 → 1.4.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,9 +1,9 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.redLog = exports.yellowLog = exports.greenLog = void 0;
4
- const greenLog = (s) => `\u001B[32m ${s} \u001B[0m`;
4
+ const greenLog = (s) => `\u001B[32m${s}\u001B[0m`;
5
5
  exports.greenLog = greenLog;
6
- const yellowLog = (s) => `\u001B[33m ${s} \u001B[0m`;
6
+ const yellowLog = (s) => `\u001B[33m${s}\u001B[0m`;
7
7
  exports.yellowLog = yellowLog;
8
- const redLog = (s) => `\u001B[31m ${s} \u001B[0m`;
8
+ const redLog = (s) => `\u001B[31m${s}\u001B[0m`;
9
9
  exports.redLog = redLog;
package/dist/file.d.ts CHANGED
@@ -1 +1 @@
1
- export declare const getFiles: () => string[];
1
+ export declare const getFiles: () => Map<string, Buffer>;
package/dist/file.js CHANGED
@@ -4,23 +4,45 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
4
4
  };
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  exports.getFiles = void 0;
7
+ const node_crypto_1 = require("node:crypto");
8
+ const node_fs_1 = require("node:fs");
7
9
  const node_path_1 = __importDefault(require("node:path"));
8
10
  const glob_1 = require("glob");
9
11
  const commandLine_1 = require("./commandLine");
10
12
  const consoleColor_1 = require("./consoleColor");
13
+ const findSimilarFiles = (files) => {
14
+ const contentComparer = new Map();
15
+ for (const [filename, content] of files.entries()) {
16
+ const hash = (0, node_crypto_1.createHash)('sha256').update(content).digest('hex');
17
+ if (contentComparer.has(hash))
18
+ contentComparer.get(hash).push(filename);
19
+ else
20
+ contentComparer.set(hash, [filename]);
21
+ }
22
+ const result = [];
23
+ for (const filenames of contentComparer.values())
24
+ if (filenames.length > 1)
25
+ result.push(filenames);
26
+ return result;
27
+ };
11
28
  const getFiles = () => {
12
- let files = (0, glob_1.globSync)('**/*', { cwd: commandLine_1.cmdLine.sourcepath, nodir: true });
13
- files = files.filter((filename) => {
29
+ let filenames = (0, glob_1.globSync)('**/*', { cwd: commandLine_1.cmdLine.sourcepath, nodir: true });
30
+ filenames = filenames.filter((filename) => {
14
31
  const extension = node_path_1.default.extname(filename);
15
32
  if (['.gz', '.brottli', '.br'].includes(extension)) {
16
33
  const original = filename.slice(0, -1 * extension.length);
17
- if (files.includes(original)) {
18
- console.log((0, consoleColor_1.redLog)(`${filename} skipped because is perhaps a compressed version of ${original}`));
34
+ if (filenames.includes(original)) {
35
+ console.log((0, consoleColor_1.redLog)(` ${filename} skipped because is perhaps a compressed version of ${original}`));
19
36
  return false;
20
37
  }
21
38
  }
22
39
  return true;
23
40
  });
24
- return files.sort();
41
+ const result = new Map();
42
+ for (const filename of filenames)
43
+ result.set(filename, (0, node_fs_1.readFileSync)(node_path_1.default.join(commandLine_1.cmdLine.sourcepath, filename), { flag: 'r' }));
44
+ for (const sameFile of findSimilarFiles(result))
45
+ console.log((0, consoleColor_1.yellowLog)(` ${sameFile.join(', ')} files look like identical`));
46
+ return result;
25
47
  };
26
48
  exports.getFiles = getFiles;
package/dist/index.js CHANGED
@@ -19,16 +19,19 @@ const summary = {
19
19
  };
20
20
  const sources = [];
21
21
  const filesByExtension = [];
22
+ console.log('Collecting source files');
22
23
  const files = (0, file_1.getFiles)();
23
- if (files.length === 0) {
24
+ if (files.size === 0) {
24
25
  console.error(`Directory ${commandLine_1.cmdLine.sourcepath} is empty`);
25
26
  process.exit(1);
26
27
  }
27
- const rightPad = files.reduce((p, c) => (c.length > p ? c.length : p), 0);
28
- for (const file of files) {
29
- const mime = (0, mime_types_1.lookup)(file) || 'text/plain';
28
+ console.log();
29
+ console.log('Translation to header file');
30
+ const longestFilename = [...files.keys()].reduce((p, c) => (c.length > p ? c.length : p), 0);
31
+ for (const [originalFilename, content] of files) {
32
+ const mime = (0, mime_types_1.lookup)(originalFilename) || 'text/plain';
30
33
  summary.filecount++;
31
- const filename = file.replace(/\\/g, '/');
34
+ const filename = originalFilename.replace(/\\/g, '/');
32
35
  const dataname = filename.replace(/[./-]/g, '_');
33
36
  let extension = node_path_1.default.extname(filename).toUpperCase();
34
37
  if (extension.startsWith('.'))
@@ -38,7 +41,6 @@ for (const file of files) {
38
41
  group.count += 1;
39
42
  else
40
43
  filesByExtension.push({ extension, count: 1 });
41
- const content = (0, node_fs_1.readFileSync)(node_path_1.default.join(commandLine_1.cmdLine.sourcepath, file), { flag: 'r' });
42
44
  const md5 = (0, node_crypto_1.createHash)('md5').update(content).digest('hex');
43
45
  summary.size += content.length;
44
46
  const zipContent = (0, node_zlib_1.gzipSync)(content, { level: 9 });
@@ -55,7 +57,7 @@ for (const file of files) {
55
57
  mime,
56
58
  md5
57
59
  });
58
- console.log((0, consoleColor_1.greenLog)(`[${file}] ${' '.repeat(rightPad - file.length)} ✓ gzip used (${content.length} -> ${zipContent.length} = ${zipRatio}%)`));
60
+ console.log((0, consoleColor_1.greenLog)(` [${originalFilename}] ${' '.repeat(longestFilename - originalFilename.length)} ✓ gzip used (${content.length} -> ${zipContent.length} = ${zipRatio}%)`));
59
61
  }
60
62
  else {
61
63
  sources.push({
@@ -68,7 +70,7 @@ for (const file of files) {
68
70
  mime,
69
71
  md5
70
72
  });
71
- console.log((0, consoleColor_1.yellowLog)(`[${file}] ${' '.repeat(rightPad - file.length)} x gzip unused ${content.length <= 1024 ? `(too small) ` : ''}(${content.length} -> ${zipContent.length} = ${zipRatio}%)`));
73
+ console.log((0, consoleColor_1.yellowLog)(` [${originalFilename}] ${' '.repeat(longestFilename - originalFilename.length)} x gzip unused ${content.length <= 1024 ? `(too small) ` : ''}(${content.length} -> ${zipContent.length} = ${zipRatio}%)`));
72
74
  }
73
75
  }
74
76
  console.log('');
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "svelteesp32",
3
- "version": "1.4.0",
3
+ "version": "1.4.1",
4
4
  "description": "Convert Svelte (or any frontend) JS application to serve it from ESP32 webserver (PsychicHttp)",
5
5
  "author": "BCsabaEngine",
6
6
  "license": "ISC",
@@ -37,7 +37,8 @@
37
37
  "format:fix": "prettier --write .",
38
38
  "lint:check": "eslint .",
39
39
  "lint:fix": "eslint --fix .",
40
- "fix": "npm run format:fix && npm run lint:fix"
40
+ "fix": "npm run format:fix && npm run lint:fix",
41
+ "npm:reinstall": "rm -rf ./node_modules && rm -f ./package-lock.json && npm i"
41
42
  },
42
43
  "keywords": [
43
44
  "svelte",
@@ -52,7 +53,7 @@
52
53
  ],
53
54
  "devDependencies": {
54
55
  "@types/mime-types": "^2.1.4",
55
- "@types/node": "^22.4.0",
56
+ "@types/node": "^22.4.1",
56
57
  "@typescript-eslint/eslint-plugin": "^8.1.0",
57
58
  "@typescript-eslint/parser": "^8.1.0",
58
59
  "eslint": "^9.9.0",