Просмотр исходного кода

fix: separate keys in `deps` by type

...because the same URL may be listed in `@require` and `@resource`
tophf 4 лет назад
Родитель
Сommit
ddead119df
2 измененных файлов с 9 добавлено и 7 удалено
  1. 5 4
      src/common/ui/externals.vue
  2. 4 3
      src/confirm/views/app.vue

+ 5 - 4
src/common/ui/externals.vue

@@ -47,8 +47,8 @@ export default {
       const { require = [], resources = {} } = this.value.meta || {};
       return [
         ...mainUrl ? [[this.i18n('editNavCode'), mainUrl, code]] : [],
-        ...require.map(url => ['@require', url, deps[url]]),
-        ...objectEntries(resources).map(([name, url]) => [`@resource ${name}`, url, deps[url]]),
+        ...require.map(url => ['@require', url, deps[`0${url}`]]),
+        ...objectEntries(resources).map(([id, url]) => [`@resource ${id}`, url, deps[`1${url}`]]),
       ];
     },
   },
@@ -68,6 +68,7 @@ export default {
       const { install } = this;
       const isMain = install && !index;
       const isReq = !isMain && type === '@require';
+      const depsUrl = `${+!isReq}${url}`;
       let code;
       let contentType;
       let img;
@@ -76,7 +77,7 @@ export default {
         code = install.code;
       } else {
         if (install) {
-          raw = install.deps[url];
+          raw = install.deps[depsUrl];
         } else {
           const key = this.value.custom.pathMap?.[url] || url;
           raw = await storage[isReq ? 'require' : 'cache'].getOne(key);
@@ -104,7 +105,7 @@ export default {
       this.img = img;
       this.mode = contentType === 'text/css' || /\.css([#&?]|$)/i.test(url) ? 'css' : null;
       this.code = code;
-      this.$set(this.deps, url, code);
+      this.$set(this.deps, depsUrl, code);
     },
     value() {
       this.$nextTick(() => {

+ 4 - 3
src/confirm/views/app.vue

@@ -137,7 +137,7 @@ export default {
       },
       confirmHotkey: CONFIRM_HOTKEY,
       info: {},
-      deps: {}, // combines `this.require` and `this.resources` = all loaded deps
+      deps: {}, // combines `this.require` and `this.resources` = all actually loaded deps
       descr: '',
       error: null,
       heading: this.i18n('msgLoadingData'),
@@ -271,14 +271,15 @@ export default {
       /** @returns {string|undefined} URL in case of error or `undefined` on success */
       const download = async (url, target, isBlob) => {
         const fullUrl = getFullUrl(url, this.info.url);
+        const depsUrl = `${+isBlob}${url}`; // the same URL may be listed in both categories
         try {
           const file = await this.getFile(fullUrl, { isBlob, useCache: true });
           target[fullUrl] = file;
-          this.deps[url] = file;
+          this.deps[depsUrl] = file;
           finished += 1;
           updateStatus();
         } catch (e) {
-          this.deps[url] = false;
+          this.deps[depsUrl] = false;
           return url;
         }
       };