From b14a989141a5e74f53f4bdf34e8d200a11a1f5d5 Mon Sep 17 00:00:00 2001 From: Yuri Kuznetsov Date: Mon, 27 Jun 2022 10:54:59 +0300 Subject: [PATCH] original js libs --- Gruntfile.js | 25 ++++++----- .../Client/DevModeJsFileListProvider.php | 2 +- .../Crm/Resources/metadata/app/jsLibs.json | 4 +- .../Espo/Resources/metadata/app/jsLibs.json | 28 ++++++------ js/build-utils.js | 44 +++++++++++++++++-- js/diff.js | 30 +++++++++---- ...are-bundled.js => prepare-lib-original.js} | 24 +++++----- package.json | 2 +- 8 files changed, 106 insertions(+), 53 deletions(-) rename js/scripts/{prepare-bundled.js => prepare-lib-original.js} (74%) diff --git a/Gruntfile.js b/Gruntfile.js index c93e1661c5..74251b11e6 100644 --- a/Gruntfile.js +++ b/Gruntfile.js @@ -40,17 +40,18 @@ module.exports = grunt => { const bundleConfig = require('./frontend/bundle-config.json'); const libs = require('./frontend/libs.json'); - const bundledDir = 'client/lib/bundled'; + const originalLibDir = 'client/lib/original'; - let bundleJsFileList = buildUtils.getPreparedBundleLibList(libs).concat(bundledDir + '/espo.js'); + let bundleJsFileList = buildUtils.getPreparedBundleLibList(libs).concat(originalLibDir + '/espo.js'); let copyJsFileList = buildUtils.getCopyLibDataList(libs); let minifyLibFileList = copyJsFileList .filter(item => item.minify) - .reduce((map, item) => ( - map[item.dest] = item.dest, - map - ), {}); + .reduce((map, item) => { + map[item.dest] = item.originalDest; + + return map; + }, {}); let currentPath = path.dirname(fs.realpathSync(__filename)); @@ -254,16 +255,16 @@ module.exports = grunt => { let contents = (new Bundler()).bundle(bundleConfig.jsFiles); - if (!fs.existsSync(bundledDir)) { - fs.mkdirSync(bundledDir); + if (!fs.existsSync(originalLibDir)) { + fs.mkdirSync(originalLibDir); } - fs.writeFileSync(bundledDir + '/espo.js', contents, 'utf8'); + fs.writeFileSync(originalLibDir + '/espo.js', contents, 'utf8'); }); - grunt.registerTask('prepare-bundled-libs', () => { + grunt.registerTask('prepare-lib-original', () => { // Even though `npm ci` runs the same script, 'clean:start' deletes files. - cp.execSync("node js/scripts/prepare-bundled"); + cp.execSync("node js/scripts/prepare-lib-original"); }); grunt.registerTask('chmod-folders', () => { @@ -439,7 +440,7 @@ module.exports = grunt => { 'less', 'cssmin', 'espo-bundle', - 'prepare-bundled-libs', + 'prepare-lib-original', 'uglify:bundle', 'copy:frontendLib', 'uglify:lib', diff --git a/application/Espo/Core/Utils/Client/DevModeJsFileListProvider.php b/application/Espo/Core/Utils/Client/DevModeJsFileListProvider.php index bd3f4b426d..28ee4551fe 100644 --- a/application/Espo/Core/Utils/Client/DevModeJsFileListProvider.php +++ b/application/Espo/Core/Utils/Client/DevModeJsFileListProvider.php @@ -98,6 +98,6 @@ class DevModeJsFileListProvider { $arr = explode('/', $path); - return 'client/lib/bundled/' . array_slice($arr, -1)[0]; + return 'client/lib/original/' . array_slice($arr, -1)[0]; } } diff --git a/application/Espo/Modules/Crm/Resources/metadata/app/jsLibs.json b/application/Espo/Modules/Crm/Resources/metadata/app/jsLibs.json index cdf79d70f7..d731819596 100644 --- a/application/Espo/Modules/Crm/Resources/metadata/app/jsLibs.json +++ b/application/Espo/Modules/Crm/Resources/metadata/app/jsLibs.json @@ -1,13 +1,13 @@ { "full-calendar": { "path": "client/modules/crm/lib/fullcalendar.js", - "devPath": "node_modules/fullcalendar/dist/fullcalendar.js", + "devPath": "client/modules/crm/lib/original/fullcalendar.js", "exportsTo": "$.fn", "exportsAs": "fullCalendar" }, "vis": { "path": "client/modules/crm/lib/vis.js", - "devPath": "node_modules/vis/dist/vis.js", + "devPath": "client/modules/crm/lib/original/vis.js", "exportsAs": "vis" } } diff --git a/application/Espo/Resources/metadata/app/jsLibs.json b/application/Espo/Resources/metadata/app/jsLibs.json index a345bc46c1..8e146361d9 100644 --- a/application/Espo/Resources/metadata/app/jsLibs.json +++ b/application/Espo/Resources/metadata/app/jsLibs.json @@ -1,7 +1,7 @@ { "Flotr": { "path": "client/lib/flotr2.js", - "devPath": "node_modules/flotr2/flotr2.js", + "devPath": "client/lib/original/flotr2.js", "exportsTo": "window", "exportsAs": "Flotr" }, @@ -11,13 +11,13 @@ }, "espo-funnel-chart": { "path": "client/lib/espo-funnel-chart.js", - "devPath": "node_modules/espo-funnel-chart/build/espo-funnel-chart.js", + "devPath": "client/lib/original/espo-funnel-chart.js", "exportsTo": "window", "exportsAs": "EspoFunnel" }, "Summernote": { "path": "client/lib/summernote.js", - "devPath": "node_modules/summernote/dist/summernote.js", + "devPath": "client/lib/original/summernote.js", "exportsTo": "$.fn", "exportsAs": "summernote" }, @@ -27,19 +27,19 @@ }, "Selectize": { "path": "client/lib/selectize.js", - "devPath": "node_modules/selectize/dist/js/standalone/selectize.js", + "devPath": "client/lib/original/selectize.js", "exportsTo": "window", "exportsAs": "Selectize" }, "cronstrue": { "path": "client/lib/cronstrue-i18n.js", - "devPath": "node_modules/cronstrue/dist/cronstrue-i18n.js", + "devPath": "client/lib/original/cronstrue-i18n.js", "exportsTo": "window", "exportsAs": "cronstrue" }, "Cropper": { "path": "client/lib/cropper.js", - "devPath": "node_modules/cropper/dist/cropper.js", + "devPath": "client/lib/original/cropper.js", "exportsTo": "$.fn", "exportsAs": "cropper" }, @@ -49,49 +49,49 @@ }, "Colorpicker": { "path": "client/lib/bootstrap-colorpicker.js", - "devPath": "node_modules/bootstrap-colorpicker/dist/js/bootstrap-colorpicker.js", + "devPath": "client/lib/original/bootstrap-colorpicker.js", "exportsTo": "$.fn", "exportsAs": "colorpicker" }, "exif": { "path": "client/lib/exif.js", - "devPath": "node_modules/exif-js/exif.js", + "devPath": "client/lib/original/exif.js", "exportsTo": "window", "exportsAs": "EXIF" }, "JsBarcode": { "path": "client/lib/JsBarcode.all.js", - "devPath": "node_modules/jsbarcode/dist/JsBarcode.all.js", + "devPath": "client/lib/original/JsBarcode.all.js", "exportsTo": "window", "exportsAs": "JsBarcode" }, "qrcode": { "path": "client/lib/qrcode.js", - "devPath": "node_modules/qrcodejs/qrcode.js", + "devPath": "client/lib/original/qrcode.js", "exportsTo": "window", "exportsAs": "QRCode" }, "ace": { "path": "client/lib/ace.js", - "devPath": "node_modules/ace-builds/src-noconflict/ace.js", + "devPath": "client/lib/original/ace.js", "exportsTo": "window", "exportsAs": "ace" }, "ace-mode-javascript": { "path": "client/lib/ace-mode-javascript.js", - "devPath": "node_modules/ace-builds/src-noconflict/mode-javascript.js", + "devPath": "client/lib/original/ace-mode-javascript.js", "exportsTo": "ace.require.define.modules", "exportsAs": "ace/mode/javascript" }, "ace-ext-language_tools": { "path": "client/lib/ace-ext-language_tools.js", - "devPath": "node_modules/ace-builds/src-noconflict/ext-language_tools.js", + "devPath": "client/lib/original/ace-ext-language_tools.js", "exportsTo": "ace.require.define.modules", "exportsAs": "ace/ext/language_tools" }, "ace-theme-tomorrow_night": { "path": "client/lib/ace-theme-tomorrow_night.js", - "devPath": "node_modules/ace-builds/src-noconflict/theme-tomorrow_night.js", + "devPath": "client/lib/original/ace-theme-tomorrow_night.js", "exportsTo": "ace.require.define.modules", "exportsAs": "ace/theme/tomorrow_night" } diff --git a/js/build-utils.js b/js/build-utils.js index fb109606a1..4a97a19515 100644 --- a/js/build-utils.js +++ b/js/build-utils.js @@ -53,24 +53,59 @@ let BuildUtils = { getPreparedBundleLibList: function (libs) { return BuildUtils.getBundleLibList(libs) - .map(file => 'client/lib/bundled/' + file.split('/').slice(-1)); + .map(file => 'client/lib/original/' + file.split('/').slice(-1)); }, + destToOriginalDest: function (dest) { + let path = dest.split('/'); + + return path.slice(0, -1) + .concat('original') + .concat(path.slice(-1)) + .join('/'); + }, + + /** + * @param {Object[]} libs + * @return {{ + * src: string, + * dest: string, + * originalDest: string|null, + * minify: boolean + * }[]} + */ getCopyLibDataList: function (libs) { let list = []; + /** + * @param {Object} item + * @return {string} + */ + let getItemDest = item => item.dest || 'client/lib/' + item.src.split('/').pop(); + + /** + * @param {Object} item + * @return {string} + */ + let getItemOriginalDest = item => { + return BuildUtils.destToOriginalDest( + getItemDest(item) + ); + }; + libs.forEach(item => { if (item.bundle) { return; } - let minify = item.minify; + let minify = !!item.minify; if (item.files) { item.files.forEach(item => { list.push({ src: item.src, - dest: item.dest || 'client/lib/' + item.src.split('/').pop(), + dest: getItemDest(item), + originalDest: minify ? getItemOriginalDest(item) : null, minify: minify, }); }); @@ -84,7 +119,8 @@ let BuildUtils = { list.push({ src: item.src, - dest: item.dest || 'client/lib/' + item.src.split('/').pop(), + dest: getItemDest(item), + originalDest: minify ? getItemOriginalDest(item) : null, minify: minify, }); }); diff --git a/js/diff.js b/js/diff.js index e0929db22d..d45d1bd582 100644 --- a/js/diff.js +++ b/js/diff.js @@ -31,6 +31,7 @@ const sys = require('util'); const cp = require('child_process'); const archiver = require('archiver'); const process = require('process'); +const buildUtils = require('./build-utils'); const exec = cp.exec; const execSync = cp.execSync; @@ -260,7 +261,7 @@ class Diff fileList.push('client/lib/espo.min.js'); fileList.push('client/lib/espo.min.js.map'); - fileList.push('client/lib/bundled/espo.js'); + fileList.push('client/lib/original/espo.js'); fs.readdirSync('client/css/espo/').forEach(file => { fileList.push('client/css/espo/' + file); @@ -536,7 +537,7 @@ class Diff let resolveItemDest = item => item.dest || 'client/lib/' + item.src.split('/').pop(); - let resolveBundledItemDest = item => 'client/lib/bundled/' + item.src.split('/').pop(); + let resolveBundledItemDest = item => 'client/lib/original/' + item.src.split('/').pop(); let resolveItemName = item => { if (item.name) { @@ -618,9 +619,13 @@ class Diff ); if (minify) { - item.files.forEach(item => - data.filesToCopy.push(resolveItemDest(item) + '.map') - ); + item.files.forEach(item => { + data.filesToCopy.push(resolveItemDest(item) + '.map'); + data.filesToCopy.push( + buildUtils.destToOriginalDest(resolveItemDest(item)) + ); + }); + } return; @@ -630,6 +635,9 @@ class Diff if (minify) { data.filesToCopy.push(resolveItemDest(item) + '.map'); + data.filesToCopy.push( + buildUtils.destToOriginalDest(resolveItemDest(item)) + ); } }); @@ -657,9 +665,12 @@ class Diff ); if (minify) { - item.files.forEach(item => - data.filesToDelete.push(resolveItemDest(item) + '.map') - ); + item.files.forEach(item => { + data.filesToDelete.push(resolveItemDest(item) + '.map'); + data.filesToDelete.push( + buildUtils.destToOriginalDest(resolveItemDest(item)) + ); + }); } return; @@ -669,6 +680,9 @@ class Diff if (minify) { data.filesToDelete.push(resolveItemDest(item) + '.map'); + data.filesToDelete.push( + buildUtils.destToOriginalDest(resolveItemDest(item)) + ); } }); diff --git a/js/scripts/prepare-bundled.js b/js/scripts/prepare-lib-original.js similarity index 74% rename from js/scripts/prepare-bundled.js rename to js/scripts/prepare-lib-original.js index 2b67025d3e..6f0306c632 100644 --- a/js/scripts/prepare-bundled.js +++ b/js/scripts/prepare-lib-original.js @@ -32,25 +32,27 @@ const buildUtils = require('../build-utils'); const libs = require('./../../frontend/libs.json'); const libDir = './client/lib'; -const bundledDir = './client/lib/bundled'; +const originalLibDir = './client/lib/original'; +const libCrmDir = './client/modules/crm/lib'; +const originalLibCrmDir = './client/modules/crm/lib/original'; -if (!fs.existsSync(libDir)) { - fs.mkdirSync(libDir); -} +[libDir, originalLibDir, libCrmDir, originalLibCrmDir] + .filter(path => !fs.existsSync(path)) + .forEach(path => fs.mkdirSync(path)) -if (!fs.existsSync(bundledDir)) { - fs.mkdirSync(bundledDir); -} - -fs.readdirSync(bundledDir) +fs.readdirSync(originalLibDir) .filter(file => file !== 'espo.js') - .forEach(file => fs.unlinkSync(bundledDir + '/' + file)); + .forEach(file => fs.unlinkSync(originalLibDir + '/' + file)); /** @var {string[]} */ const libSrcList = buildUtils.getBundleLibList(libs); libSrcList.forEach(src => { - let dest = bundledDir + '/' + src.split('/').slice(-1); + let dest = originalLibDir + '/' + src.split('/').slice(-1); fs.copyFileSync(src, dest); }); + +buildUtils.getCopyLibDataList(libs) + .filter(item => item.minify) + .forEach(item => fs.copyFileSync(item.src, item.originalDest)) diff --git a/package.json b/package.json index f718898cd7..221e9e8dc3 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,7 @@ "test": "grunt run-tests", "test-unit": "grunt run-unit-tests", "test-integration": "grunt run-integration-tests", - "postinstall": "node js/scripts/postinstall-cleanup && node js/scripts/prepare-bundled" + "postinstall": "node js/scripts/postinstall-cleanup && node js/scripts/prepare-lib-original.js" }, "author": "Yurii Kuznietsov, Taras Machyshyn, Oleksii Avramenko", "license": "GPL-3.0",