This commit is contained in:
Yuri Kuznetsov
2023-06-02 19:45:02 +03:00
parent 598a87c349
commit dac6d74fd1
4 changed files with 38 additions and 28 deletions
+17 -7
View File
@@ -76,8 +76,10 @@
this._internalModuleListIsSet = false; this._internalModuleListIsSet = false;
this._bundleFileMap = {}; this._bundleFileMap = {};
this._bundleMapping = {}; this._bundleMapping = {};
/** @type Object.<string, string[]> */ /** @type {Object.<string, string[]>} */
this._bundleDependenciesMap = {}; this._bundleDependenciesMap = {};
/** @type {Object.<string, boolean>} */
this._bundleIsLoadedMap = {};
this._addLibsConfigCallCount = 0; this._addLibsConfigCallCount = 0;
this._addLibsConfigCallMaxCount = 2; this._addLibsConfigCallMaxCount = 2;
@@ -507,7 +509,7 @@
if (name in this._bundleMapping) { if (name in this._bundleMapping) {
let bundleName = this._bundleMapping[name]; let bundleName = this._bundleMapping[name];
this._addBundle(bundleName).then(() => { this._requireBundle(bundleName).then(() => {
let classObj = this._getClass(name); let classObj = this._getClass(name);
if (!classObj) { if (!classObj) {
@@ -606,11 +608,15 @@
* @param {string} name * @param {string} name
* @return {Promise} * @return {Promise}
*/ */
_addBundle: function (name) { _requireBundle: function (name) {
if (this._bundleIsLoadedMap[name]) {
return Promise.resolve();
}
let dependencies = this._bundleDependenciesMap[name] || []; let dependencies = this._bundleDependenciesMap[name] || [];
if (!dependencies.length) { if (!dependencies.length) {
return this._addBundleInternal(name); return this._addBundle(name);
} }
return new Promise(resolve => { return new Promise(resolve => {
@@ -618,7 +624,7 @@
Promise.all(list) Promise.all(list)
.then(() => { .then(() => {
return this._addBundleInternal(name); return this._addBundle(name);
}) })
.then(() => resolve()); .then(() => resolve());
}); });
@@ -629,7 +635,7 @@
* @param {string} name * @param {string} name
* @return {Promise} * @return {Promise}
*/ */
_addBundleInternal: function (name) { _addBundle: function (name) {
let src = this._bundleFileMap[name]; let src = this._bundleFileMap[name];
if (!src) { if (!src) {
@@ -656,7 +662,11 @@
return new Promise(resolve => { return new Promise(resolve => {
document.head.appendChild(scriptEl); document.head.appendChild(scriptEl);
scriptEl.addEventListener('load', () => resolve()); scriptEl.addEventListener('load', () => {
this._bundleIsLoadedMap[name] = true;
resolve();
});
}); });
}, },
+10 -10
View File
@@ -107,7 +107,7 @@
"templatePatterns": [ "templatePatterns": [
"client/modules/crm/res/templates/**/*.tpl" "client/modules/crm/res/templates/**/*.tpl"
], ],
"allPatterns": [ "lookupPatterns": [
"client/modules/crm/src/**/*.js" "client/modules/crm/src/**/*.js"
] ]
}, },
@@ -119,8 +119,8 @@
"dependentOn": [ "dependentOn": [
"lib!Summernote" "lib!Summernote"
], ],
"libs": ["Summernote"], "requiredLibs": ["Summernote"],
"allPatterns": [ "lookupPatterns": [
"client/modules/crm/src/**/*.js" "client/modules/crm/src/**/*.js"
] ]
}, },
@@ -132,8 +132,8 @@
"lib!Flotr", "lib!Flotr",
"lib!espo-funnel-chart" "lib!espo-funnel-chart"
], ],
"libs": ["Flotr", "espo-funnel-chart"], "requiredLibs": ["Flotr", "espo-funnel-chart"],
"allPatterns": [ "lookupPatterns": [
"client/modules/crm/src/**/*.js" "client/modules/crm/src/**/*.js"
] ]
}, },
@@ -144,8 +144,8 @@
"dependentOn": [ "dependentOn": [
"lib!full-calendar" "lib!full-calendar"
], ],
"libs": ["full-calendar"], "requiredLibs": ["full-calendar"],
"allPatterns": [ "lookupPatterns": [
"client/modules/crm/src/**/*.js" "client/modules/crm/src/**/*.js"
] ]
}, },
@@ -156,8 +156,8 @@
"dependentOn": [ "dependentOn": [
"lib!vis" "lib!vis"
], ],
"libs": ["vis"], "requiredLibs": ["vis"],
"allPatterns": [ "lookupPatterns": [
"client/modules/crm/src/**/*.js" "client/modules/crm/src/**/*.js"
] ]
}, },
@@ -174,7 +174,7 @@
"modulePaths": { "modulePaths": {
"crm": "client/modules/crm" "crm": "client/modules/crm"
}, },
"allPatterns": [ "lookupPatterns": [
"client/src/**/*.js" "client/src/**/*.js"
] ]
} }
+8 -8
View File
@@ -36,14 +36,14 @@ class BundlerGeneral {
* chunks: Object.<string, { * chunks: Object.<string, {
* files?: string[], * files?: string[],
* patterns?: string[], * patterns?: string[],
* allPatterns?: string[], * lookupPatterns?: string[],
* templatePatterns?: string[], * templatePatterns?: string[],
* noDuplicates?: boolean, * noDuplicates?: boolean,
* dependentOn?: string[], * dependentOn?: string[],
* libs?: string[], * requiredLibs?: string[],
* }>, * }>,
* modulePaths?: Record.<string, string>, * modulePaths?: Record.<string, string>,
* allPatterns: string[], * lookupPatterns: string[],
* order: string[], * order: string[],
* }} config * }} config
* @param {{ * @param {{
@@ -97,7 +97,7 @@ class BundlerGeneral {
let bundleFile = this.filePattern.replace('{*}', name); let bundleFile = this.filePattern.replace('{*}', name);
let libs = this.config.chunks[name].libs; let libs = this.config.chunks[name].requiredLibs;
if (libs) { if (libs) {
let part = JSON.stringify(libs.map(item => 'lib!' + item)); let part = JSON.stringify(libs.map(item => 'lib!' + item));
@@ -150,9 +150,9 @@ class BundlerGeneral {
let params = this.config.chunks[name]; let params = this.config.chunks[name];
let patterns = params.patterns; let patterns = params.patterns;
let allPatterns = [] let lookupPatterns = []
.concat(this.config.allPatterns) .concat(this.config.lookupPatterns)
.concat(params.allPatterns || []); .concat(params.lookupPatterns || []);
let bundledFiles = []; let bundledFiles = [];
let bundledTemplateFiles = []; let bundledTemplateFiles = [];
@@ -171,7 +171,7 @@ class BundlerGeneral {
let data = bundler.bundle({ let data = bundler.bundle({
files: params.files, files: params.files,
patterns: patterns, patterns: patterns,
allPatterns: allPatterns, lookupPatterns: lookupPatterns,
libs: this.libs, libs: this.libs,
ignoreFiles: ignoreFiles, ignoreFiles: ignoreFiles,
dependentOn: params.dependentOn, dependentOn: params.dependentOn,
+3 -3
View File
@@ -57,7 +57,7 @@ class Bundler {
* @param {{ * @param {{
* files?: string[], * files?: string[],
* patterns: string[], * patterns: string[],
* allPatterns?: string[], * lookupPatterns?: string[],
* ignoreFiles?: string[], * ignoreFiles?: string[],
* dependentOn?: string[], * dependentOn?: string[],
* libs: { * libs: {
@@ -79,7 +79,7 @@ class Bundler {
.concat(this.#obtainFiles(params.patterns, params.files)) .concat(this.#obtainFiles(params.patterns, params.files))
.filter(file => !params.ignoreFiles.includes(file)); .filter(file => !params.ignoreFiles.includes(file));
let allFiles = this.#obtainFiles(params.allPatterns || params.patterns); let allFiles = this.#obtainFiles(params.lookupPatterns || params.patterns);
let ignoreLibs = params.libs let ignoreLibs = params.libs
.filter(item => item.key && !item.bundle) .filter(item => item.key && !item.bundle)
@@ -229,7 +229,7 @@ class Bundler {
let modulePaths = modules.map(name => { let modulePaths = modules.map(name => {
if (!moduleFileMap[name]) { if (!moduleFileMap[name]) {
throw Error(`Can't obtain ${name}. Might be missing in allPatterns.`); throw Error(`Can't obtain ${name}. Might be missing in lookupPatterns.`);
} }
return moduleFileMap[name]; return moduleFileMap[name];