Improved meshcore/meshcmd minification.

Ylian Saint-Hilaire committed Aug 18, 2022 at 13:47 UTC 115d80113a804e03462c6c3099ef9150c89fe0d1
5 files changed +110 -37
agents/compressModules-new.bat new
+11
@@ -0,0 +1,11 @@
1 +@ECHO OFF
2 +MD modules_meshcmd_min
3 +MD modules_meshcore_min
4 +
5 +%LOCALAPPDATA%\..\Roaming\nvm\v14.16.0\node ..\translate\translate.js minify meshcmd.js
6 +RENAME meshcmd.js.min meshcmd.min.js
7 +%LOCALAPPDATA%\..\Roaming\nvm\v14.16.0\node ..\translate\translate.js minify meshcore.js
8 +RENAME meshcore.js.min meshcore.min.js
9 +
10 +%LOCALAPPDATA%\..\Roaming\nvm\v14.16.0\node ..\translate\translate.js minifydir C:\Users\Default.DESKTOP-9CGK2DI\Desktop\AmtWebApp\meshcentral\agents\modules_meshcore C:\Users\Default.DESKTOP-9CGK2DI\Desktop\AmtWebApp\meshcentral\agents\modules_meshcore_min
11 +%LOCALAPPDATA%\..\Roaming\nvm\v14.16.0\node ..\translate\translate.js minifydir C:\Users\Default.DESKTOP-9CGK2DI\Desktop\AmtWebApp\meshcentral\agents\modules_meshcmd C:\Users\Default.DESKTOP-9CGK2DI\Desktop\AmtWebApp\meshcentral\agents\modules_meshcmd_min
agents/compressModules-old.bat new
+20
@@ -0,0 +1,20 @@
1 +@ECHO OFF
2 +MD modules_meshcmd_min
3 +MD modules_meshcore_min
4 +"..\..\WebSiteCompiler\bin\Debug\WebSiteCompiler.exe" compressalljs "modules_meshcore" "modules_meshcore_min"
5 +"..\..\WebSiteCompiler\bin\Debug\WebSiteCompiler.exe" compressalljs "modules_meshcmd" "modules_meshcmd_min"
6 +"..\..\WebSiteCompiler\bin\Debug\WebSiteCompiler.exe" meshcore.js
7 +"..\..\WebSiteCompiler\bin\Debug\WebSiteCompiler.exe" meshcmd.js
8 +
9 +REM del meshcore.min.js
10 +REM %LOCALAPPDATA%\..\Roaming\nvm\v14.16.0\node ..\translate\translate.js minify meshcore.js
11 +REM rename meshcore.js.min meshcore.min.js
12 +
13 +REM del meshcmd.min.js
14 +REM %LOCALAPPDATA%\..\Roaming\nvm\v14.16.0\node ..\translate\translate.js minify meshcmd.js
15 +REM rename meshcmd.js.min meshcmd.min.js
16 +
17 +REM Minify the translations
18 +%LOCALAPPDATA%\..\Roaming\nvm\v14.16.0\node ..\translate\translate.js minify modules_meshcore\coretranslations.json
19 +COPY modules_meshcore\coretranslations.json.min modules_meshcore_min\coretranslations.json
20 +DEL modules_meshcore\coretranslations.json.min
\ No newline at end of file
agents/compressModules.bat
+3 -14
@@ -1,20 +1,9 @@
1 @ECHO OFF
2 MD modules_meshcmd_min
3 MD modules_meshcore_min
4 -"..\..\WebSiteCompiler\bin\Debug\WebSiteCompiler.exe" compressalljs "modules_meshcore" "modules_meshcore_min"
5 -"..\..\WebSiteCompiler\bin\Debug\WebSiteCompiler.exe" compressalljs "modules_meshcmd" "modules_meshcmd_min"
4 +
5 "..\..\WebSiteCompiler\bin\Debug\WebSiteCompiler.exe" meshcore.js
6 "..\..\WebSiteCompiler\bin\Debug\WebSiteCompiler.exe" meshcmd.js
7
9 -REM del meshcore.min.js
10 -REM %LOCALAPPDATA%\..\Roaming\nvm\v14.16.0\node ..\translate\translate.js minify meshcore.js
11 -REM rename meshcore.js.min meshcore.min.js
12 -
13 -REM del meshcmd.min.js
14 -REM %LOCALAPPDATA%\..\Roaming\nvm\v14.16.0\node ..\translate\translate.js minify meshcmd.js
15 -REM rename meshcmd.js.min meshcmd.min.js
16 -
17 -REM Minify the translations
18 -%LOCALAPPDATA%\..\Roaming\nvm\v14.16.0\node ..\translate\translate.js minify modules_meshcore\coretranslations.json
19 -COPY modules_meshcore\coretranslations.json.min modules_meshcore_min\coretranslations.json
20 -DEL modules_meshcore\coretranslations.json.min
\ No newline at end of file
8 +%LOCALAPPDATA%\..\Roaming\nvm\v14.16.0\node ..\translate\translate.js minifydir C:\Users\Default.DESKTOP-9CGK2DI\Desktop\AmtWebApp\meshcentral\agents\modules_meshcore C:\Users\Default.DESKTOP-9CGK2DI\Desktop\AmtWebApp\meshcentral\agents\modules_meshcore_min
9 +%LOCALAPPDATA%\..\Roaming\nvm\v14.16.0\node ..\translate\translate.js minifydir C:\Users\Default.DESKTOP-9CGK2DI\Desktop\AmtWebApp\meshcentral\agents\modules_meshcmd C:\Users\Default.DESKTOP-9CGK2DI\Desktop\AmtWebApp\meshcentral\agents\modules_meshcmd_min
agents/hashagents.json
+22 -22
@@ -3,132 +3,132 @@
3 "filename": "MeshService.exe",
4 "hash": "C0E5DB22DE5DED510C48141D7CFE4807F98B8205D680F5FC8A5D15950F17A1465E0953B7BFA7FAEED72019E765E1C8E1",
5 "size": 3680256,
6 - "mtime": "2022-08-14T04:42:12Z"
6 + "mtime": "1985-10-26T08:15:00Z"
7 },
8 "4": {
9 "filename": "MeshService64.exe",
10 "hash": "47A927806EDB6DFAC2C79467719FADA0F3625010D551C6D0EA6EA7DB99F088C088E70F562416FC1809B014913CFEA7E0",
11 "size": 3293184,
12 - "mtime": "2022-08-14T04:42:12Z"
12 + "mtime": "1985-10-26T08:15:00Z"
13 },
14 "5": {
15 "filename": "meshagent_x86",
16 "hash": "E984791A6FB96E06191AEA1D7B3066AB8B2170DC7B8A64D7C9A605CDC79B463541D994587E85E3FD4644359329344734",
17 "size": 3650016,
18 - "mtime": "2022-08-14T04:42:13Z"
18 + "mtime": "2022-08-17T21:09:41Z"
19 },
20 "6": {
21 "filename": "meshagent_x86-64",
22 "hash": "F6A48178D7BCE798CDF36AC8F49D9650674E38E266DB396A84657EE8FD81BF85FA998456245F2AFE4A20FDD08CD73D2E",
23 "size": 3724624,
24 - "mtime": "2022-08-14T04:42:13Z"
24 + "mtime": "2022-08-17T21:09:41Z"
25 },
26 "7": {
27 "filename": "meshagent_mips",
28 "hash": "2D913C118114219CF127D9415174645A3F11464A4B13D07A702AFC2A836381C52C4A2854403215DAFF4582C058E8B824",
29 "size": 4522304,
30 - "mtime": "2022-08-14T04:42:12Z"
30 + "mtime": "2022-08-17T21:09:41Z"
31 },
32 "9": {
33 "filename": "meshagent_arm",
34 "hash": "AD1C9D2A1E468AEB26FD6443581C3CE3F5F8D0A3779BA0EA5BA06C20B5094B095B5F0D0F104B2F26053877E5D005FBAB",
35 "size": 3132180,
36 - "mtime": "2022-08-14T04:42:12Z"
36 + "mtime": "2022-08-17T21:09:41Z"
37 },
38 "13": {
39 "filename": "meshagent_pogo",
40 "hash": "F9E19D72922732BC4C9F84F90CAB380E6A3851B8137A69AB648E1B145BA4F257B5C2C47BBE36CBE62E364328854DD844",
41 "size": 3140884,
42 - "mtime": "2022-08-14T04:42:12Z"
42 + "mtime": "2022-08-17T21:09:41Z"
43 },
44 "15": {
45 "filename": "meshagent_poky",
46 "hash": "DFBF910AC01FE7D8BD2E6649908E0BBE0C553C12ACADB4C73C32BC65BCDCCDF336C39BA47A08C6659F9CB8E475C3677F",
47 "size": 3776024,
48 - "mtime": "2022-08-14T04:42:12Z"
48 + "mtime": "2022-08-17T21:09:41Z"
49 },
50 "16": {
51 "filename": "meshagent_osx-x86-64",
52 "hash": "77A87BCAE3534061CE15060C4F8971074B7AEBC88957CC9FF50BF8F6B234E3AFAE48DCB9A44681A24393F20191BB3DA1",
53 "size": 4391904,
54 - "mtime": "2022-08-14T04:42:12Z"
54 + "mtime": "2022-08-17T21:09:41Z"
55 },
56 "18": {
57 "filename": "meshagent_poky64",
58 "hash": "0DDF6A2CABC3B1D40CBE9CA4A6EB2103308F228D5332F64E3C9B01A54BC968B0120D2A50B71111D70682435A07577ABD",
59 "size": 3478872,
60 - "mtime": "2022-08-14T04:42:13Z"
60 + "mtime": "2022-08-17T21:09:41Z"
61 },
62 "19": {
63 "filename": "meshagent_x86_nokvm",
64 "hash": "2AFC43684BD2A2601FAA32BF86F35EAEB29CDD00ABE3BEB3446448EC44E3151E459909569044681C507FE11A82139914",
65 "size": 3365188,
66 - "mtime": "2022-08-14T04:42:13Z"
66 + "mtime": "2022-08-17T21:09:42Z"
67 },
68 "20": {
69 "filename": "meshagent_x86-64_nokvm",
70 "hash": "1B198D624FA99E4D6B52AD139A19259B491FA233A2783F5E4C46955A6AD37DDF5053D7F022C95C8F04684CCADFD2CC3D",
71 "size": 3425584,
72 - "mtime": "2022-08-14T04:42:13Z"
72 + "mtime": "2022-08-17T21:09:41Z"
73 },
74 "24": {
75 "filename": "meshagent_arm-linaro",
76 "hash": "2F5D211E983A738ABE31A6EAF4B73629FD937D34D5BD8380A420BAB7108040CA2320EADA8F02CFEF763A3C1D0EA8F1A2",
77 "size": 2194704,
78 - "mtime": "2022-08-14T04:42:12Z"
78 + "mtime": "2022-08-17T21:09:41Z"
79 },
80 "25": {
81 "filename": "meshagent_armhf",
82 "hash": "37F717A44CDA07F88D51A5FF9FD220FEA7F61307BD3A418CC8D9E45D9B9EDB1CB069A9398318E0DF2042C4D204657F7D",
83 "size": 3166784,
84 - "mtime": "2022-08-14T04:42:12Z"
84 + "mtime": "2022-08-17T21:09:41Z"
85 },
86 "27": {
87 "filename": "meshagent_armhf2",
88 "hash": "0AE840520D3B677B9767EA097F3AA5A1E24212529E688200F43935DB1541AB9FB441EC2C7BA8002D45299B04695FD037",
89 "size": 2837724,
90 - "mtime": "2022-08-14T04:42:12Z"
90 + "mtime": "2022-08-17T21:09:41Z"
91 },
92 "28": {
93 "filename": "meshagent_mips24kc",
94 "hash": "636B02BD3DD7DED0BB79FAF1B991F7DB89FF23DC1373D3F5E3EA76897B4BF44E8F00A57A3B6C87EBECA8142D9AD5B7B9",
95 "size": 4163768,
96 - "mtime": "2022-08-14T04:42:12Z"
96 + "mtime": "2022-08-17T21:09:41Z"
97 },
98 "29": {
99 "filename": "meshagent_osx-arm-64",
100 "hash": "D1D8CDAF59105E4E8A753CCC9032F1653AE4DB973765E3E009CA9F352BA7B3C8E487B4F34BB9A0C4A629C29DE55FFF69",
101 "size": 3911880,
102 - "mtime": "2022-08-14T04:42:12Z"
102 + "mtime": "2022-08-17T21:09:41Z"
103 },
104 "30": {
105 "filename": "meshagent_freebsd_x86-64",
106 "hash": "4EA888AAD34D104E7FD898E4F331A9A65EB2EB85C7181DADF1E2A5C04B8F22B91B46AEBDC512D714D11D04B4C2B1EA3E",
107 "size": 4657032,
108 - "mtime": "2022-08-14T04:42:12Z"
108 + "mtime": "2022-08-17T21:09:41Z"
109 },
110 "32": {
111 "filename": "meshagent_aarch64",
112 "hash": "27B50D0696EA3156BA91CBE0EFC2775217A2DCB1BC7AB0B079DCDE52E7D2B3E2A2647FDC6F74087C4D8D748FD90F59AD",
113 "size": 3227888,
114 - "mtime": "2022-08-14T04:42:12Z"
114 + "mtime": "2022-08-17T21:09:41Z"
115 },
116 "40": {
117 "filename": "meshagent_mipsel24kc",
118 "hash": "31F3377C4703CFFDD6905FC0EFC96C4BB328474CE62BECB2E79860C5841CA9019EFC6945974847D03797EE49529DDDE0",
119 "size": 4160072,
120 - "mtime": "2022-08-14T04:42:12Z"
120 + "mtime": "2022-08-17T21:09:41Z"
121 },
122 "41": {
123 "filename": "meshagent_aarch64-cortex-a53",
124 "hash": "E6D65EB2F8013E4DB811E2E73150C063EB41DF8C9D8321D1F2CA2FAEEA7DBA203032AD4E95A467A0D8FD836E18EE3D0D",
125 "size": 3059896,
126 - "mtime": "2022-08-14T04:42:12Z"
126 + "mtime": "2022-08-17T21:09:41Z"
127 },
128 "10005": {
129 "filename": "meshagent_osx-universal-64",
130 "hash": "5AB5C0580E9B7B0689C20FD01561997D7B17CA5E14C747E981888C74B8CCECEE827E141ECF6CBD76C5040051C09DE840",
131 "size": 8335560,
132 - "mtime": "2022-08-14T04:42:12Z"
132 + "mtime": "2022-08-17T21:09:41Z"
133 }
134 }
translate/translate.js
+54 -1
@@ -173,7 +173,7 @@ function startEx(argv) {
173
174 var command = null;
175 if (argv.length > 2) { command = argv[2].toLowerCase(); }
176 - if (['minify', 'check', 'extract', 'extractall', 'translate', 'translateall', 'minifyall', 'merge', 'totext', 'fromtext', 'remove'].indexOf(command) == -1) { command = null; }
176 + if (['minify', 'check', 'extract', 'extractall', 'translate', 'translateall', 'minifyall', 'minifydir', 'merge', 'totext', 'fromtext', 'remove'].indexOf(command) == -1) { command = null; }
177
178 if (directRun) { log('MeshCentral web site translator'); }
179 if (command == null) {
@@ -198,6 +198,9 @@ function startEx(argv) {
198 log(' MINIFY [sourcefile]');
199 log(' Minify a single file.');
200 log('');
201 + log(' MINIFYDIR [sourcedir] [destinationdir]');
202 + log(' Minify all files in a directory.');
203 + log('');
204 log(' MINIFYALL');
205 log(' Minify the main MeshCentral english web pages.');
206 log('');
@@ -342,6 +345,56 @@ function startEx(argv) {
345 translate(lang, langFile, sources, subdir);
346 }
347
348 + if (command == 'minifydir') {
349 + if (argv.length < 4) { log("Command source and/or destination folders missing."); process.exit(); return; }
350 + const sourceFiles = fs.readdirSync(argv[3]);
351 + for (var i in sourceFiles) {
352 + if (sourceFiles[i].endsWith('.js') || sourceFiles[i].endsWith('.json')) {
353 + console.log("Processing " + sourceFiles[i] + "...");
354 + const sourceFile = path.join(argv[3], sourceFiles[i]);
355 + if (sourceFiles[i].endsWith('.js')) {
356 + // Minify the file .js file
357 + const destinationFile = path.join(argv[4], sourceFiles[i].substring(0, sourceFiles[i].length - 3) + '.min.js');
358 + if (minifyLib = 2) {
359 + var inFile = fs.readFileSync(sourceFile).toString();
360 +
361 + // Perform minification pre-processing
362 + if (sourceFile.endsWith('.handlebars') >= 0) { inFile = inFile.split('{{{pluginHandler}}}').join('"{{{pluginHandler}}}"'); }
363 + if (sourceFile.endsWith('.js')) { inFile = '<script>' + inFile + '</script>'; }
364 +
365 + var minifiedOut = minify(inFile, {
366 + collapseBooleanAttributes: true,
367 + collapseInlineTagWhitespace: false, // This is not good.
368 + collapseWhitespace: true,
369 + minifyCSS: true,
370 + minifyJS: true,
371 + removeComments: true,
372 + removeOptionalTags: true,
373 + removeEmptyAttributes: true,
374 + removeAttributeQuotes: true,
375 + removeRedundantAttributes: true,
376 + removeScriptTypeAttributes: true,
377 + removeTagWhitespace: true,
378 + preserveLineBreaks: false,
379 + useShortDoctype: true
380 + });
381 +
382 + // Perform minification post-processing
383 + if (sourceFile.endsWith('.js')) { minifiedOut = minifiedOut.substring(8, minifiedOut.length - 9); }
384 + if (sourceFile.endsWith('.handlebars') >= 0) { minifiedOut = minifiedOut.split('"{{{pluginHandler}}}"').join('{{{pluginHandler}}}'); }
385 + fs.writeFileSync(destinationFile, minifiedOut, { flag: 'w+' });
386 + }
387 + } else if (sourceFiles[i].endsWith('.json')) {
388 + // Minify the file .json file
389 + const destinationFile = path.join(argv[4], sourceFiles[i]);
390 + var inFile = JSON.parse(fs.readFileSync(sourceFile).toString());
391 + fs.writeFileSync(destinationFile, JSON.stringify(inFile), { flag: 'w+' });
392 + }
393 +
394 + }
395 + }
396 + }
397 +
398 if (command == 'minifyall') {
399 for (var i in minifyMeshCentralSourceFiles) {
400 var outname = minifyMeshCentralSourceFiles[i];