iobroker.shoppingroute 0.3.9 → 0.4.0
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.
- package/README.md +8 -1
- package/README_DE.md +8 -1
- package/admin/custom/review/assets/{review-editor-components-CWyNDqPF.js → review-editor-components-BI-kqJQu.js} +2 -2
- package/admin/custom/review/assets/{virtualExposes-BDTLizpE.js → virtualExposes-g5zs8oe1.js} +1 -1
- package/admin/custom/review/mf-manifest.json +1 -1
- package/admin/custom/review/mf-stats.json +1 -1
- package/admin/custom/review/reviewEditor.js +2 -2
- package/admin/jsonConfig.json +1 -7
- package/build/lib/review-tools.js +15 -6
- package/build/lib/sorter.js +0 -3
- package/build/main.js +13 -7
- package/io-package.json +14 -14
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|

|
|
4
4
|
|
|
5
|
-
**Current version: 0.
|
|
5
|
+
**Current version: 0.4.0**
|
|
6
6
|
|
|
7
7
|
ShoppingRoute sorts Alexa shopping-list entries by market, product group and each store's individual walking route. It assigns visible two-digit keys such as `20> Bananas` and `40> ═════ ALDI ═════`; managed lists must therefore be set to **A–Z** in the Alexa app. ShoppingRoute reuses the local Alexa2 authentication for direct item updates, deletes and batch creates, while Alexa2 list states remain the external change trigger.
|
|
8
8
|
|
|
@@ -40,6 +40,13 @@ See `README_DE.md` for the detailed German documentation.
|
|
|
40
40
|
|
|
41
41
|
## Changelog
|
|
42
42
|
|
|
43
|
+
### 0.4.0 (2026-09-12)
|
|
44
|
+
|
|
45
|
+
- Fixes the complete review workflow: immediately accepted rows are reliably removed after saving and restarting the adapter without duplicating the product.
|
|
46
|
+
- Keeps “Available markets” as an array throughout the review queue and product catalogue so multiple selections survive editing, accepting and saving.
|
|
47
|
+
- Persists startup-only review cleanup and legacy product-market normalization even when no product needs to be accepted again.
|
|
48
|
+
- Adds an end-to-end regression test covering edit, accept, save and startup cleanup.
|
|
49
|
+
|
|
43
50
|
### 0.3.9 (2026-09-11)
|
|
44
51
|
|
|
45
52
|
- Replaces incomplete 0.3.8 snapshots that may have been installed directly from GitHub with an unambiguous newer version.
|
package/README_DE.md
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|

|
|
4
4
|
|
|
5
|
-
**Aktuelle Version: 0.
|
|
5
|
+
**Aktuelle Version: 0.4.0**
|
|
6
6
|
|
|
7
7
|
ShoppingRoute sortiert Alexa-Einkaufslisteneinträge nach Markt, Produktgruppe und dem individuellen Laufweg durch den jeweiligen Markt. Dazu vergibt es sichtbare zweistellige Schlüssel wie `20> Bananen` und `40> ═════ ALDI ═════`; verwaltete Listen müssen deshalb in der Alexa-App auf **A–Z** stehen. ShoppingRoute übernimmt lokal die Alexa2-Authentifizierung für direkte Updates, Deletes und Batch-Creates; Alexa2-Listenstates bleiben die Triggerquelle für externe Änderungen.
|
|
8
8
|
|
|
@@ -73,6 +73,13 @@ ShoppingRoute wird unter der **MIT-Lizenz** veröffentlicht. Frühere bereits ve
|
|
|
73
73
|
|
|
74
74
|
## Changelog
|
|
75
75
|
|
|
76
|
+
### 0.4.0 (2026-09-12)
|
|
77
|
+
|
|
78
|
+
- Behebt den vollständigen Prüflistenablauf: Sofort übernommene Einträge werden nach Speichern und Adapterneustart zuverlässig aus der Prüfliste entfernt, ohne den Artikel zu duplizieren.
|
|
79
|
+
- „Verfügbare Märkte“ bleibt in Prüfliste und Artikelstamm durchgehend ein Array; mehrere ausgewählte Märkte gehen beim Bearbeiten, Übernehmen oder Speichern nicht mehr verloren.
|
|
80
|
+
- Speichert auch eine reine Startbereinigung und die Normalisierung älterer Artikelmarkt-Strings, wenn kein Artikel erneut übernommen werden muss.
|
|
81
|
+
- Ergänzt einen End-to-End-Regressionstest für Bearbeiten, Übernehmen, Speichern und anschließende Startbereinigung.
|
|
82
|
+
|
|
76
83
|
### 0.3.9 (2026-09-11)
|
|
77
84
|
|
|
78
85
|
- Ersetzt unvollständige 0.3.8-Zwischenstände, die möglicherweise direkt von GitHub installiert wurden, durch eine eindeutig neuere Version.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import"../reviewEditor.js";import{_ as x,a as A}from"./_virtual_mf___mfe_internal__ShoppingRouteReviewSet__mf_owner__1__loadShare__react__loadShare__.js-DDD1Hp7v.js";import"./vite-preload-helper-Dp1pzeXC.js";import"./index-2HOz3j7B.js";var g={exports:{}};const y=x||A,s=y.createElement,p=(t,e)=>(typeof navigator<"u"?String(navigator.language||"").toLowerCase():"de").startsWith("de")?t:e,d=t=>String(t||"").trim().toLocaleLowerCase("de"),S=t=>String(t||"").trim().toLocaleLowerCase("de").normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/ß/g,"ss").replace(/[^a-z0-9]+/g," ").trim();function f(t){let e=S(t).replace(/\s+/g,"");return(e.length>6&&e.endsWith("en")||e.length>6&&e.endsWith("n"))&&(e=e.slice(0,-1)),e}function m(t){const e=Array.isArray(t)?t:String(t||"").split(/[;,]/),r=new Set;return e.map(i=>String(i||"").trim()).filter(i=>{const l=d(i);return!l||r.has(l)?!1:(r.add(l),!0)})
|
|
1
|
+
import"../reviewEditor.js";import{_ as x,a as A}from"./_virtual_mf___mfe_internal__ShoppingRouteReviewSet__mf_owner__1__loadShare__react__loadShare__.js-DDD1Hp7v.js";import"./vite-preload-helper-Dp1pzeXC.js";import"./index-2HOz3j7B.js";var g={exports:{}};const y=x||A,s=y.createElement,p=(t,e)=>(typeof navigator<"u"?String(navigator.language||"").toLowerCase():"de").startsWith("de")?t:e,d=t=>String(t||"").trim().toLocaleLowerCase("de"),S=t=>String(t||"").trim().toLocaleLowerCase("de").normalize("NFD").replace(/[\u0300-\u036f]/g,"").replace(/ß/g,"ss").replace(/[^a-z0-9]+/g," ").trim();function f(t){let e=S(t).replace(/\s+/g,"");return(e.length>6&&e.endsWith("en")||e.length>6&&e.endsWith("n"))&&(e=e.slice(0,-1)),e}function m(t){const e=Array.isArray(t)?t:String(t||"").split(/[;,]/),r=new Set;return e.map(i=>String(i||"").trim()).filter(i=>{const l=d(i);return!l||r.has(l)?!1:(r.add(l),!0)})}function C(t){const e=[],r=new Set;for(const i of Array.isArray(t==null?void 0:t.markets)?t.markets:[]){if(!i||i.enabled===!1)continue;const l=String(i.name||"").trim(),o=d(l);!l||r.has(o)||(r.add(o),e.push(l))}return e.sort((i,l)=>i.localeCompare(l,"de",{sensitivity:"base"}))}function _(t){const e=new Set;return(Array.isArray(t==null?void 0:t.productGroups)?t.productGroups:[]).map(r=>String((r==null?void 0:r.name)||"").trim()).filter(r=>{const i=d(r);return!i||e.has(i)?!1:(e.add(i),!0)}).sort((r,i)=>r.localeCompare(i,"de",{sensitivity:"base"}))}function M(t){return[t==null?void 0:t.name,...String((t==null?void 0:t.aliases)||"").split(/[;,]/)].map(f).filter(Boolean)}function k(t,e){const r=f(e);return r?t.findIndex(i=>M(i).includes(r)):-1}function I(t,e){const r=[],i=new Set;for(const l of`${t||""},${e||""}`.split(/[;,]/)){const o=String(l||"").trim(),n=d(o);!o||i.has(n)||(i.add(n),r.push(o))}return r.join(",")}function h(t,e,r){const i=(Array.isArray(t==null?void 0:t.reviewItems)?t.reviewItems:[]).map((l,o)=>o===e?{...l,...r}:{...l});return{...t||{},reviewItems:i}}function v(t,e){const r=new Set(e),i=(Array.isArray(t==null?void 0:t.products)?t.products:[]).map(o=>({...o})),l=(Array.isArray(t==null?void 0:t.reviewItems)?t.reviewItems:[]).map(o=>({...o}));for(let o=0;o<l.length;o++){if(!r.has(o))continue;const n=l[o],c=String(n.product||"").trim();if(!c)continue;const u=k(i,c);if(u>=0){const a={...i[u]};n.category&&(a.category=String(n.category)),n.defaultMarket!==void 0&&(a.defaultMarket=String(n.defaultMarket||"")),n.availableMarkets!==void 0&&(a.availableMarkets=m(n.availableMarkets)),n.aliases&&(a.aliases=I(a.aliases,n.aliases)),i[u]=a}else i.push({name:c,aliases:String(n.aliases||""),category:String(n.category||n.guessedCategory||"Sonstiges"),defaultMarket:String(n.defaultMarket||""),availableMarkets:m(n.availableMarkets)});l[o]={...n,availableMarkets:m(n.availableMarkets),action:"accepted"}}return i.sort((o,n)=>String(o.name||"").localeCompare(String(n.name||""),"de",{sensitivity:"base"})),{...t||{},products:i,reviewItems:l}}const P=`
|
|
2
2
|
.shoppingroute-review-toolbar{display:flex;flex-wrap:wrap;gap:10px;align-items:center;margin:0 0 14px}
|
|
3
3
|
.shoppingroute-review-button{min-height:38px;padding:7px 16px;border:1px solid currentColor;border-radius:5px;background:transparent;color:inherit;cursor:pointer;font-weight:600}
|
|
4
4
|
.shoppingroute-review-button:disabled{opacity:.45;cursor:default}
|
|
@@ -22,4 +22,4 @@ import"../reviewEditor.js";import{_ as x,a as A}from"./_virtual_mf___mfe_interna
|
|
|
22
22
|
.shoppingroute-review-delete{justify-self:start}
|
|
23
23
|
.shoppingroute-review-button{width:100%}
|
|
24
24
|
}
|
|
25
|
-
`;class R extends y.Component{change(e){this.props.onChange(e,!0)}update(e,r){this.change(h(this.props.data||{},e,r))}accept(e){const r=h(this.props.data||{},e,{action:"accept"});this.change(v(r,[e]))}acceptAll(){var i;const e=Array.isArray((i=this.props.data)==null?void 0:i.reviewItems)?this.props.data.reviewItems:[],r=e.map((l,o)=>o).filter(l=>{var o;return((o=e[l])==null?void 0:o.action)!=="accepted"});r.length&&this.change(v(this.props.data||{},r))}remove(e){const r=this.props.data||{},i=(Array.isArray(r.reviewItems)?r.reviewItems:[]).filter((l,o)=>o!==e).map(l=>({...l}));this.change({...r,reviewItems:i})}renderRow(e,r,i,l){const o=new Set(String(e.availableMarkets||"").split(/[;,]/).map(a=>d(a)).filter(Boolean)),n=e.action==="accepted",c=[s("option",{key:"pending",value:"pending"},p("Offen","Pending")),s("option",{key:"accept",value:"accept"},p("Übernehmen","Accept")),n?s("option",{key:"accepted",value:"accepted"},p("Übernommen","Accepted")):null,s("option",{key:"ignore",value:"ignore"},p("Ignorieren","Ignore"))].filter(Boolean),u=n?{opacity:.78}:void 0;return s("div",{key:`${e.key||e.product||"review"}-${r}`,className:"shoppingroute-review-row",style:u},[s("div",{key:"product",className:"shoppingroute-review-product"},[s("input",{key:"input",value:String(e.product||""),"aria-label":p("Artikel","Product"),onChange:a=>this.update(r,{product:a.target.value,action:n?"pending":e.action})}),s("small",{key:"source"},String(e.text||""))]),s("select",{key:"category",value:String(e.category||e.guessedCategory||""),"aria-label":p("Produktgruppe","Product group"),onChange:a=>this.update(r,{category:a.target.value,action:n?"pending":e.action})},[...new Set([String(e.category||e.guessedCategory||""),...i].filter(Boolean))].map(a=>s("option",{key:a,value:a},a))),s("select",{key:"defaultMarket",value:String(e.defaultMarket||""),"aria-label":p("Standardmarkt","Default market"),onChange:a=>this.update(r,{defaultMarket:a.target.value,action:n?"pending":e.action})},[s("option",{key:"__none__",value:""},"—"),...l.map(a=>s("option",{key:a,value:a},a))]),s("select",{key:"availableMarkets",multiple:!0,value:l.filter(a=>o.has(d(a))),"aria-label":p("Verfügbare Märkte","Available markets"),onChange:a=>{const w=[...a.target.selectedOptions].map(b=>b.value);this.update(r,{availableMarkets:w
|
|
25
|
+
`;class R extends y.Component{change(e){this.props.onChange(e,!0)}update(e,r){this.change(h(this.props.data||{},e,r))}accept(e){const r=h(this.props.data||{},e,{action:"accept"});this.change(v(r,[e]))}acceptAll(){var i;const e=Array.isArray((i=this.props.data)==null?void 0:i.reviewItems)?this.props.data.reviewItems:[],r=e.map((l,o)=>o).filter(l=>{var o;return((o=e[l])==null?void 0:o.action)!=="accepted"});r.length&&this.change(v(this.props.data||{},r))}remove(e){const r=this.props.data||{},i=(Array.isArray(r.reviewItems)?r.reviewItems:[]).filter((l,o)=>o!==e).map(l=>({...l}));this.change({...r,reviewItems:i})}renderRow(e,r,i,l){const o=new Set(String(e.availableMarkets||"").split(/[;,]/).map(a=>d(a)).filter(Boolean)),n=e.action==="accepted",c=[s("option",{key:"pending",value:"pending"},p("Offen","Pending")),s("option",{key:"accept",value:"accept"},p("Übernehmen","Accept")),n?s("option",{key:"accepted",value:"accepted"},p("Übernommen","Accepted")):null,s("option",{key:"ignore",value:"ignore"},p("Ignorieren","Ignore"))].filter(Boolean),u=n?{opacity:.78}:void 0;return s("div",{key:`${e.key||e.product||"review"}-${r}`,className:"shoppingroute-review-row",style:u},[s("div",{key:"product",className:"shoppingroute-review-product"},[s("input",{key:"input",value:String(e.product||""),"aria-label":p("Artikel","Product"),onChange:a=>this.update(r,{product:a.target.value,action:n?"pending":e.action})}),s("small",{key:"source"},String(e.text||""))]),s("select",{key:"category",value:String(e.category||e.guessedCategory||""),"aria-label":p("Produktgruppe","Product group"),onChange:a=>this.update(r,{category:a.target.value,action:n?"pending":e.action})},[...new Set([String(e.category||e.guessedCategory||""),...i].filter(Boolean))].map(a=>s("option",{key:a,value:a},a))),s("select",{key:"defaultMarket",value:String(e.defaultMarket||""),"aria-label":p("Standardmarkt","Default market"),onChange:a=>this.update(r,{defaultMarket:a.target.value,action:n?"pending":e.action})},[s("option",{key:"__none__",value:""},"—"),...l.map(a=>s("option",{key:a,value:a},a))]),s("select",{key:"availableMarkets",multiple:!0,value:l.filter(a=>o.has(d(a))),"aria-label":p("Verfügbare Märkte","Available markets"),onChange:a=>{const w=[...a.target.selectedOptions].map(b=>b.value);this.update(r,{availableMarkets:w,action:n?"pending":e.action})}},l.map(a=>s("option",{key:a,value:a},a))),s("input",{key:"aliases",value:String(e.aliases||""),placeholder:p("Aliase","Aliases"),"aria-label":p("Aliase","Aliases"),onChange:a=>this.update(r,{aliases:a.target.value,action:n?"pending":e.action})}),s("select",{key:"action",value:String(e.action||"pending"),"aria-label":p("Aktion","Action"),onChange:a=>{a.target.value==="accept"?this.accept(r):this.update(r,{action:a.target.value})}},c),s("button",{key:"delete",type:"button",className:"shoppingroute-review-delete",title:p("Aus Prüfliste entfernen","Remove from review list"),onClick:()=>this.remove(r)},"×")])}render(){const e=this.props.data||{},r=Array.isArray(e.reviewItems)?e.reviewItems:[],i=_(e),l=C(e),o=r.filter(c=>(c==null?void 0:c.action)!=="accepted").length,n=[s("style",{key:"styles"},P)];return n.push(s("div",{key:"toolbar",className:"shoppingroute-review-toolbar"},[s("button",{key:"acceptAll",type:"button",className:"shoppingroute-review-button",disabled:o===0,onClick:()=>this.acceptAll()},o?p(`Alle übernehmen (${o})`,`Accept all (${o})`):p("Alles übernommen","All accepted")),s("span",{key:"hint",style:{opacity:.7}},p("„Übernehmen“ aktualisiert Artikelstamm und Status sofort; danach normal speichern.","“Accept” updates catalogue and status immediately; then save normally."))])),r.length?(n.push(s("div",{key:"list",className:"shoppingroute-review-list"},[s("div",{key:"head",className:"shoppingroute-review-row shoppingroute-review-head"},[s("div",{key:"product"},p("Artikel / Alexa-Text","Product / Alexa text")),s("div",{key:"group"},p("Produktgruppe","Product group")),s("div",{key:"default"},p("Standardmarkt","Default market")),s("div",{key:"available"},p("Verfügbare Märkte","Available markets")),s("div",{key:"aliases"},p("Aliase","Aliases")),s("div",{key:"action"},p("Status","Status")),s("div",{key:"delete"},"")]),...r.map((c,u)=>this.renderRow(c||{},u,i,l))])),s("div",{style:{width:"100%"}},n)):(n.push(s("div",{key:"empty",style:{opacity:.7,padding:"12px 0"}},p("Keine unbekannten Artikel vorhanden.","No unknown products."))),s("div",{style:{width:"100%"}},n))}}g.exports={Components:{ReviewEditor:R},ReviewEditorModel:{normalizeMarketSelection:m,updateReviewRow:h,acceptReviewRows:v,findProductIndex:k}};const N=(g.exports==null?{}:g.exports).default||g.exports,B=N.Components;export{B as default};
|
package/admin/custom/review/assets/{virtualExposes-BDTLizpE.js → virtualExposes-g5zs8oe1.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
const c={},i=new Set,r=new Map;function m(t,n){let e=r.get(t);return e||(e=Promise.resolve().then(n).catch(o=>{throw r.delete(t),o}),r.set(t,e)),e}async function u(t){if(typeof document>"u")return;const n=c[t]||[];await Promise.all(n.map(e=>{const o=new URL(e,import.meta.url).href;return i.has(o)||(i.add(o),document.querySelector(`link[rel="stylesheet"][href="${o}"]`))?Promise.resolve():new Promise((a,l)=>{const s=document.createElement("link");s.rel="stylesheet",s.href=o,s.onload=()=>a(),s.onerror=()=>l(new Error(`[Module Federation] Failed to load CSS asset: ${o}`)),document.head.appendChild(s)})}))}const f={"./Components":async()=>{await u("./Components"),await Promise.all([]);const t=await m("./Components",()=>import("./review-editor-components-
|
|
1
|
+
const c={},i=new Set,r=new Map;function m(t,n){let e=r.get(t);return e||(e=Promise.resolve().then(n).catch(o=>{throw r.delete(t),o}),r.set(t,e)),e}async function u(t){if(typeof document>"u")return;const n=c[t]||[];await Promise.all(n.map(e=>{const o=new URL(e,import.meta.url).href;return i.has(o)||(i.add(o),document.querySelector(`link[rel="stylesheet"][href="${o}"]`))?Promise.resolve():new Promise((a,l)=>{const s=document.createElement("link");s.rel="stylesheet",s.href=o,s.onload=()=>a(),s.onerror=()=>l(new Error(`[Module Federation] Failed to load CSS asset: ${o}`)),document.head.appendChild(s)})}))}const f={"./Components":async()=>{await u("./Components"),await Promise.all([]);const t=await m("./Components",()=>import("./review-editor-components-BI-kqJQu.js")),n=t&&t.__mf_remote_dependency_pending;n&&typeof n.then=="function"&&await n;const e={};return Object.assign(e,t),Object.defineProperty(e,"__esModule",{value:!0,enumerable:!1}),e}};export{f as default};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"ShoppingRouteReviewSet","name":"ShoppingRouteReviewSet","metaData":{"name":"ShoppingRouteReviewSet","type":"app","buildInfo":{"buildVersion":"1.0.0","buildName":"ShoppingRouteReviewSet"},"remoteEntry":{"name":"reviewEditor.js","path":"","type":"module"},"ssrRemoteEntry":{"name":"reviewEditor.ssr.js","path":"","type":"module"},"types":{"path":"","name":""},"globalName":"ShoppingRouteReviewSet","pluginVersion":"0.2.5","publicPath":"auto"},"shared":[{"id":"ShoppingRouteReviewSet:react","name":"react","version":"18.3.1","singleton":true,"requiredVersion":">=18","assets":{"js":{"async":[],"sync":["assets/_virtual_mf___mfe_internal__ShoppingRouteReviewSet__mf_owner__1__loadShare__react__loadShare__.js-DDD1Hp7v.js"]},"css":{"async":[],"sync":[]}}}],"remotes":[],"exposes":[{"id":"ShoppingRouteReviewSet:Components","name":"Components","assets":{"js":{"async":[],"sync":["assets/vite-preload-helper-Dp1pzeXC.js","assets/index-2HOz3j7B.js","assets/_virtual_mf-localSharedImportMap___mfe_internal__ShoppingRouteReviewSet__mf_owner__1-DXSRuGUo.js","assets/virtualExposes-
|
|
1
|
+
{"id":"ShoppingRouteReviewSet","name":"ShoppingRouteReviewSet","metaData":{"name":"ShoppingRouteReviewSet","type":"app","buildInfo":{"buildVersion":"1.0.0","buildName":"ShoppingRouteReviewSet"},"remoteEntry":{"name":"reviewEditor.js","path":"","type":"module"},"ssrRemoteEntry":{"name":"reviewEditor.ssr.js","path":"","type":"module"},"types":{"path":"","name":""},"globalName":"ShoppingRouteReviewSet","pluginVersion":"0.2.5","publicPath":"auto"},"shared":[{"id":"ShoppingRouteReviewSet:react","name":"react","version":"18.3.1","singleton":true,"requiredVersion":">=18","assets":{"js":{"async":[],"sync":["assets/_virtual_mf___mfe_internal__ShoppingRouteReviewSet__mf_owner__1__loadShare__react__loadShare__.js-DDD1Hp7v.js"]},"css":{"async":[],"sync":[]}}}],"remotes":[],"exposes":[{"id":"ShoppingRouteReviewSet:Components","name":"Components","assets":{"js":{"async":[],"sync":["assets/vite-preload-helper-Dp1pzeXC.js","assets/index-2HOz3j7B.js","assets/_virtual_mf-localSharedImportMap___mfe_internal__ShoppingRouteReviewSet__mf_owner__1-DXSRuGUo.js","assets/virtualExposes-g5zs8oe1.js","assets/review-editor-components-BI-kqJQu.js","reviewEditor.js","assets/_virtual_mf___mfe_internal__ShoppingRouteReviewSet__mf_owner__1__loadShare__react__loadShare__.js-DDD1Hp7v.js"]},"css":{"async":[],"sync":[]}},"path":"./Components"}]}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"id":"ShoppingRouteReviewSet","name":"ShoppingRouteReviewSet","metaData":{"name":"ShoppingRouteReviewSet","type":"app","buildInfo":{"buildVersion":"1.0.0","buildName":"ShoppingRouteReviewSet"},"remoteEntry":{"name":"reviewEditor.js","path":"","type":"module"},"ssrRemoteEntry":{"name":"reviewEditor.ssr.js","path":"","type":"module"},"types":{"path":"","name":""},"globalName":"ShoppingRouteReviewSet","pluginVersion":"0.2.5","publicPath":"auto"},"shared":[{"id":"ShoppingRouteReviewSet:react","name":"react","version":"18.3.1","singleton":true,"requiredVersion":">=18","assets":{"js":{"async":[],"sync":["assets/_virtual_mf___mfe_internal__ShoppingRouteReviewSet__mf_owner__1__loadShare__react__loadShare__.js-DDD1Hp7v.js"]},"css":{"async":[],"sync":[]}}}],"remotes":[],"exposes":[{"id":"ShoppingRouteReviewSet:Components","name":"Components","assets":{"js":{"async":[],"sync":["assets/vite-preload-helper-Dp1pzeXC.js","assets/index-2HOz3j7B.js","assets/_virtual_mf-localSharedImportMap___mfe_internal__ShoppingRouteReviewSet__mf_owner__1-DXSRuGUo.js","assets/virtualExposes-
|
|
1
|
+
{"id":"ShoppingRouteReviewSet","name":"ShoppingRouteReviewSet","metaData":{"name":"ShoppingRouteReviewSet","type":"app","buildInfo":{"buildVersion":"1.0.0","buildName":"ShoppingRouteReviewSet"},"remoteEntry":{"name":"reviewEditor.js","path":"","type":"module"},"ssrRemoteEntry":{"name":"reviewEditor.ssr.js","path":"","type":"module"},"types":{"path":"","name":""},"globalName":"ShoppingRouteReviewSet","pluginVersion":"0.2.5","publicPath":"auto"},"shared":[{"id":"ShoppingRouteReviewSet:react","name":"react","version":"18.3.1","singleton":true,"requiredVersion":">=18","assets":{"js":{"async":[],"sync":["assets/_virtual_mf___mfe_internal__ShoppingRouteReviewSet__mf_owner__1__loadShare__react__loadShare__.js-DDD1Hp7v.js"]},"css":{"async":[],"sync":[]}}}],"remotes":[],"exposes":[{"id":"ShoppingRouteReviewSet:Components","name":"Components","assets":{"js":{"async":[],"sync":["assets/vite-preload-helper-Dp1pzeXC.js","assets/index-2HOz3j7B.js","assets/_virtual_mf-localSharedImportMap___mfe_internal__ShoppingRouteReviewSet__mf_owner__1-DXSRuGUo.js","assets/virtualExposes-g5zs8oe1.js","assets/review-editor-components-BI-kqJQu.js","reviewEditor.js","assets/_virtual_mf___mfe_internal__ShoppingRouteReviewSet__mf_owner__1__loadShare__react__loadShare__.js-DDD1Hp7v.js"]},"css":{"async":[],"sync":[]}},"path":"./Components"}],"buildOutput":[{"fileName":"reviewEditor.js","type":"chunk","isEntry":false,"size":18701},{"fileName":"assets/vite-preload-helper-Dp1pzeXC.js","type":"chunk","isEntry":false,"size":1266},{"fileName":"assets/_virtual_mf___mfe_internal__ShoppingRouteReviewSet__mf_owner__1__loadShare__react__loadShare__.js-DDD1Hp7v.js","type":"chunk","isEntry":false,"size":11509},{"fileName":"assets/hostInit-BfEpvyuX.js","type":"chunk","isEntry":false,"size":2478},{"fileName":"assets/review-editor-components-BI-kqJQu.js","type":"chunk","isEntry":true,"size":9584},{"fileName":"assets/virtualExposes-g5zs8oe1.js","type":"chunk","isEntry":false,"size":1070},{"fileName":"assets/_virtual_mf-localSharedImportMap___mfe_internal__ShoppingRouteReviewSet__mf_owner__1-DXSRuGUo.js","type":"chunk","isEntry":false,"size":727},{"fileName":"assets/index-2HOz3j7B.js","type":"chunk","isEntry":false,"size":66321},{"fileName":"mf-manifest.json","type":"asset","isEntry":false,"size":1329}],"assetAnalysis":{"./src-admin/review-editor-components.mjs":{"js":{"sync":["assets/vite-preload-helper-Dp1pzeXC.js","assets/index-2HOz3j7B.js","assets/_virtual_mf-localSharedImportMap___mfe_internal__ShoppingRouteReviewSet__mf_owner__1-DXSRuGUo.js","assets/virtualExposes-g5zs8oe1.js","assets/review-editor-components-BI-kqJQu.js","reviewEditor.js","assets/_virtual_mf___mfe_internal__ShoppingRouteReviewSet__mf_owner__1__loadShare__react__loadShare__.js-DDD1Hp7v.js"],"async":[]},"css":{"sync":[],"async":[]}},"react":{"js":{"sync":["assets/_virtual_mf___mfe_internal__ShoppingRouteReviewSet__mf_owner__1__loadShare__react__loadShare__.js-DDD1Hp7v.js"],"async":[]},"css":{"sync":[],"async":[]}}}}
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import{h as ct,i as lt}from"./assets/index-2HOz3j7B.js";const dt=ct.share;typeof __VUE_HMR_RUNTIME__>"u"&&(globalThis.__VUE_HMR_RUNTIME__={createRecord(){},rerender(){},reload(){}});const Ne="__mf_init__virtual:mf:__mfe_internal__ShoppingRouteReviewSet__mf_owner__1__mf_v__runtimeInit__mf_v__.js__";let de=globalThis[Ne];if(!de){let s,f;const u=new Promise((h,C)=>{s=h,f=C});de=globalThis[Ne]={initPromise:u,initResolve:s,initReject:f}}const ut=de.initResolve,ne="__mf_module_cache__";globalThis[ne]||={share:{},remote:{}};globalThis[ne].share||={};globalThis[ne].remote||={};const d=globalThis[ne];for(const s of Object.keys(d.share))if(s.startsWith("default:")){const f=s.slice(8);d.share[f]===void 0&&(d.share[f]=d.share[s])}else if(!s.includes(":")){const f="default:"+s;d.share[f]===void 0&&(d.share[f]=d.share[s])}const Te={},mt=Array.isArray("default")?"default":["default"],Fe="default",D="ShoppingRouteReviewSet",ce=[["react"]];let ee,te,ue;async function _e(s){for(let f=0;;f++)try{return await s()}catch(u){throw u}}const Le=Symbol("mf.originalSharedProvider"),_t={emit:s=>s},ht=(s,f)=>{if(f!=="version-first")return s;const u={};for(const[h,C]of Object.entries(s))u[h]=Object.assign({},C,{[Le]:C});return u},le=(s,f)=>{if(!f)return;const u=Object.entries(s||{}),h=u.find(([,p])=>p===f);if(h)return{version:h[0],provider:f,registered:!0};if(typeof f.version=="string"&&f.version)return{version:f.version,provider:f,registered:!1};const C=u.filter(([,p])=>p===f||!!(f.from&&(p==null?void 0:p.from)===f.from));if(C.length===1)return{version:C[0][0],provider:f,registered:!1}},me=(s,f,u,h)=>{var E;if(!s||!u)return;const C=Array.isArray(u.scope)?u.scope:[u.scope||"default"],p=ht(s,h),x={};for(const N of C)x[N||"default"]={[f]:p};const P=(E=dt.getRegisteredShare(x,f,{...u,scope:C,strategy:h},_t))==null?void 0:E.shared;return(P==null?void 0:P[Le])||P},U=(s,f,u,h)=>{var P;const C=E=>z(E,u),p=Object.fromEntries(Object.entries(s||{}).filter(([,E])=>{var N;return!C(E)&&((N=E==null?void 0:E.shareConfig)==null?void 0:N.import)!==!1}));u!=null&&u.version&&((P=u.shareConfig)==null?void 0:P.import)!==!1&&(p[u.version]||(p[u.version]=u));const x=me(p,f,u,h);return C(x)?void 0:x},z=(s,f)=>s===f||!!(f!=null&&f.from&&(s==null?void 0:s.from)===f.from),gt=(s,f,u,h,C,p,x,P,E)=>{var B,J,W;if(!P)return;const N=(J=(B=f==null?void 0:f.options)==null?void 0:B.shared)==null?void 0:J[C],K=Array.isArray(N)?N.find(L=>(L==null?void 0:L.version)===p):void 0,V=((P==null?void 0:P.from)===((W=f==null?void 0:f.options)==null?void 0:W.name)?P:void 0)||(z(K,P)?K:f?void 0:P);return V&&s.some(L=>{var q,M;return L!==f&&((q=L==null?void 0:L.options)==null?void 0:q.name)===(x==null?void 0:x.from)&&((M=L==null?void 0:L.shareScopeMap)==null?void 0:M[h])===u})?V:void 0},bt=(s,f,u,h,C,p,x,P,E)=>{const N=p.registered?gt(s,f,u,h,C,p.version,p.provider,P):void 0,K=N||x;if(K&&!(p.registered&&!z(K,P)))return{provider:K,scopeRootProvider:N}};async function yt(){return ee||(ee=_e(()=>import("./assets/_virtual_mf-localSharedImportMap___mfe_internal__ShoppingRouteReviewSet__mf_owner__1-DXSRuGUo.js")).catch(s=>{throw ee=void 0,s})),ee}async function St(){return te||(te=_e(()=>import("./assets/virtualExposes-BDTLizpE.js")).then(s=>s.default??s).catch(s=>{throw te=void 0,s})),te}async function Pt(s={},f=[]){var we,je,Re,Ce,Ee;const u=(t,e,n,r)=>{const o=(Array.isArray(r)?r[0]:r)||"default",c=e||!n?t:t+"@"+n,a={canonical:o+":"+c};return o==="default"&&(a.aliases=[c]),a},h=(t,e)=>{const n=t[e.canonical];if(n!==void 0)return n;const r=e.aliases||[];for(const i of r){if(!Object.prototype.hasOwnProperty.call(t,i))continue;const o=t[i];if(o!==void 0)return t[e.canonical]=o,o}},C=Symbol.for("module-federation.shared-cache-listeners"),p=Symbol.for("module-federation.shared-cache-owners"),x=t=>{let e=t[p];return e===void 0&&(e=Object.create(null),Object.defineProperty(t,p,{value:e,enumerable:!1,configurable:!1,writable:!1})),e},P=(t,e)=>{var n;return(n=t[p])==null?void 0:n[e.canonical]},E=(t,e,n,r)=>{var a;t[e.canonical]=n;const i=e.aliases||[];for(const l of i)Object.defineProperty(t,l,{value:n,enumerable:!0,configurable:!0,writable:!0});const o=t[p];r===void 0?o&&delete o[e.canonical]:x(t)[e.canonical]=r;const c=(a=t[C])==null?void 0:a[e.canonical];if(c)for(const l of c)l(n);return n},N=Symbol.for("module-federation.tree-shaking-shared-cache"),K=t=>{let e=t[N];return e===void 0&&(e=Object.create(null),Object.defineProperty(t,N,{value:e,enumerable:!1,configurable:!1,writable:!1})),e},he=(t,e,n,r)=>{if(!Array.isArray(n))return r;const i=[...new Set(n)].sort(),o=K(t),c=o[e.canonical]||=[],a=c.find(l=>l.providedExports.length===i.length&&l.providedExports.every((y,m)=>y===i[m]));return a?a.value=r:c.push({providedExports:i,value:r}),r},V=Symbol.for("module-federation.tree-shaking-shared-selection-cache"),ge=t=>{let e=t[V];return e===void 0&&(e=Object.create(null),Object.defineProperty(t,V,{value:e,enumerable:!1,configurable:!1,writable:!1})),e},B=(t,e,n)=>{var i,o;const r=h(t,e);return r!==void 0?r:(o=(i=t[V])==null?void 0:i[e.canonical])==null?void 0:o[n]},J=(t,e,n,r)=>{const i=ge(t),o=i[e.canonical]||=Object.create(null);return o[n]=r,r},W=((we=globalThis.__FEDERATION__)==null?void 0:we.__INSTANCES__)||[],L=(je=f.find(t=>t==null?void 0:t.from))==null?void 0:je.from,q=W.find(t=>{var e,n;return((e=t==null?void 0:t.options)==null?void 0:e.name)===L&&((n=t==null?void 0:t.shareScopeMap)==null?void 0:n.default)===s})||W.find(t=>{var e,n;return((e=t==null?void 0:t.options)==null?void 0:e.name)!==D&&((n=t==null?void 0:t.shareScopeMap)==null?void 0:n.default)===s}),M=Object.create(null),Ae=t=>{const e=Object.create(null);for(const[n,r]of Object.entries(t||{}))e[n]=Object.assign(Object.create(null),r);return e},De=(t,e)=>{const n=!q&&Object.values(e||{}).some(i=>Object.values(i||{}).some(Q)),r=n?Ae(e):e;return M[t]={host:e,runtime:r,isWebpackScope:n},r},ze=()=>{const t=Object.values(M).filter(({isWebpackScope:e})=>e);if(t.length!==0)for(const{host:e,runtime:n}of t)for(const[r,i]of Object.entries(e||{})){const o=n[r]||=Object.create(null);for(const[c,a]of Object.entries(i||{}))o[c]=a}},k=Object.create(null);for(const[t,e]of Object.entries(s)){const n=k[t]=Object.create(null);for(const[r,i]of Object.entries(e))n[r]=Object.assign({},i)}const{usedShared:I,usedRemotes:ke}=await yt();function Q(t){if(typeof(t==null?void 0:t.get)!="function")return!1;const e=Function.prototype.toString.call(t.get);return e.includes("__webpack_require__")||/\.\s*e\s*\([^)]*\)\s*\.then\s*\(/.test(e)}const Ke=Object.values(k).some(t=>Object.values(t||{}).some(Q)),Be=t=>{const e=t.split("/");return t.startsWith("@")?e.slice(0,2).join("/"):e[0]},re=(t,e,n)=>{if(typeof U!="function")return;const r=Be(t),i=r===t?[[t,e]]:[[t,e],[r,I[r]]];for(const[o,c]of i){if(!c)continue;const a=n?o===t?n:k[o]:s[o],l=U(a,o,c,"version-first");if(l&&Q(l)&&!l.lib&&!l.loaded)return l}};var X=Te[Fe];if(X||(X=Te[Fe]={from:D}),f.indexOf(X)>=0)return;f.push(X);const be=t=>{let e=t;for(let n=0;n<5;n++){const r=e==null?void 0:e.default;if(!r||typeof r!="object"||Object.keys(r).length===0)break;const i=Object.keys(e).filter(o=>o!=="default").map(o=>e[o]);if(i.length>0&&i.some(o=>o!==void 0))break;e=r}return e},Ge=[],Ve=typeof globalThis.window>"u"?await Promise.all([]):[],oe="__mf_vite_runtime_share_load_id__";let We=0;const ie=new Map,se=new Map,H=lt({name:D,remotes:ke,shared:I,plugins:[He(),Ue(),...Ge,...Ve],shareStrategy:"version-first"});H.initShareScopeMap("default",De("default",s));function He(){return{name:"vite-share-pin-lifecycle-plugin",resolveShare(t){var i;const e=(i=t.shareInfo)==null?void 0:i[oe],n=e===void 0?void 0:se.get(e);if(!n)return t;const r=t.resolver;return t.resolver=(...o)=>(n.pinned.reapply(),r(...o)),n.pinned.reveal(),t}}}function Ue(){return{name:"vite-real-name-snapshot-plugin",afterLoadSnapshot(t){const e=t&&t.remoteSnapshot,n=e&&e.globalName,r=e&&e.version;if(!n||!r||!e.remoteEntry)return t;const i=globalThis.__FEDERATION__&&globalThis.__FEDERATION__.moduleInfo,o=n+":"+r;return i&&!i[o]&&(i[o]=e),t}}}const qe=H.sharedHandler.hooks.lifecycle.resolveShare,Y=new WeakMap;qe.on(t=>{var i;const e=(i=t.shareInfo)==null?void 0:i[oe],n=t.resolver;if(typeof n!="function")return t;const r=(...o)=>{const c=n(...o),a=c==null?void 0:c.shared;return a&&(typeof a=="object"||typeof a=="function")&&!Y.has(a)&&Y.set(a,{from:a.from}),e!==void 0&&a&&ie.set(e,a),c};return t.resolver=r,t});const Me=(t,e,n,r)=>{if(!t||t[e]!==n)return;const i=Object.assign({},r,{version:r.version??e,scope:r.scope??(n==null?void 0:n.scope)??["default"],strategy:"loaded-first"}),o=r.from;t[e]=i;const c=()=>n===void 0?t[e]===void 0:t[e]===n;return{provider:i,reveal(){return t[e]!==i?!1:(n===void 0?delete t[e]:t[e]=n,!0)},reapply(){return c()?(t[e]=i,!0):!1},release(a,l=!0){return r.from=o,t[e]!==i?!l&&c():l?a?(i.from=o,a&&i.lib&&(i.loaded=!0),r.strategy===void 0?delete i.strategy:i.strategy=r.strategy,!0):(n===void 0?delete t[e]:t[e]=n,!1):(n===void 0?delete t[e]:t[e]=n,!0)}}},Je=t=>Object.entries(t||{}).map(([e,n])=>({provider:n,version:e,from:n.from,registered:!0})),Qe=(t,e)=>{if(e===void 0)return;let n;for(const r of t){const i=r.provider,o=i.treeShaking||i;if(!(r.loadedFactory!==e&&i.lib!==e&&o.lib!==e)){if(n)return;n=r}}return n},Xe=async(t,e,n)=>{const r=++We;se.set(r,{pinned:n});try{const i=await H.loadShare(t,{customShareInfo:{shareConfig:e,[oe]:r}});return{factory:i===!1?void 0:i,selectedProvider:ie.get(r)}}finally{ie.delete(r),se.delete(r)}},ye=async(t,e,n,r,i,o,c=!0)=>{const a=o.from,l=Me(n,r,i,o);if(!l)return;let y;try{y=await Xe(t,e,l)}catch(j){throw l.release(!1),j}const m=y==null?void 0:y.factory;if(m===void 0){l.release(!1);return}const _=Je(n),g=l.provider.treeShaking||l.provider,R=l.provider.lib===m||g.lib===m;if(!c&&R){const j=_.findIndex(v=>v.provider===l.provider);j!==-1&&_.splice(j,1)}!c&&!_.some(j=>j.provider===o)&&_.push({provider:o,version:r,from:a,registered:!1,loadedFactory:R?m:void 0});const O=!c&&y.selectedProvider===l.provider&&R?o:y.selectedProvider;if(O&&!_.some(j=>j.provider===O)){const j=Y.get(O),v=typeof O.version=="string"&&O.version?O.version:r;_.push({provider:O,version:v,from:j?j.from:O.from,registered:(n==null?void 0:n[v])===O,loadedFactory:m})}const b=_.find(j=>j.provider===O)??Qe(_,m);if(!l.release(!0,(b==null?void 0:b.provider)===l.provider)||!b)return;const S=Y.get(b.provider);b.from=b.provider===o?a:S?S.from:b.provider.from,S&&(b.provider.from=S.from);const A=typeof m=="function"?m():m,w=await Promise.resolve(A);if(!(b.registered&&(n==null?void 0:n[b.version])!==b.provider))return{provider:b.provider,selection:b,resolved:w}},fe=new Set,ae=new Map,Ye=async(t,e,n)=>{var i;const r=!!((i=e.shareConfig)!=null&&i.singleton);if(!r&&e.canLiveRebind!==!1)try{const o=U(n,t,e,"version-first"),c=le(n,o);if(!c)return;const{version:a}=c;if(!r&&a!==e.version||!o.lib&&!o.loading&&!(o.loaded&&typeof o.get=="function"))return;const l=u(t,r,e.version,e.scope);if(h(d.share,l)!==void 0)return;const y=s[t],m=y==null?void 0:y[a];if(c.registered&&!z(m,o))return;let _,g=o.lib;if(!g&&Q(o)||(!g&&o.loading&&(g=await o.loading),!g&&o.loaded&&typeof o.get=="function"&&(g=await o.get()),!g))return;const R=typeof g=="function"?g():g,O=await Promise.resolve(R),b=c.registered?m:o;_={provider:b,selection:{provider:b,version:a,from:o.from,registered:c.registered},resolved:O};const T=_==null?void 0:_.provider,S=_==null?void 0:_.selection;if(!S)return;const A=_==null?void 0:_.resolved;if(A===void 0||h(d.share,l)!==void 0||S.registered&&(y==null?void 0:y[S.version])!==T)return;E(d.share,l,be(A),S.from),fe.add(T)}catch(o){console.error('[Module Federation] Failed to bridge materialized shared module "'+t+'"',o)}},Se=async(t,e,n,r,i)=>{var o,c;try{const a=u(t,(o=e.shareConfig)==null?void 0:o.singleton,e.version,e.scope),l=h(d.share,a),y=P(d.share,a),m=U(n,t,e,"version-first"),_=m||me(n,t,e,"version-first")||e,g=le(n,_);if(!g)return;const R=z(_,e),{version:O}=g;if(!((c=e.shareConfig)!=null&&c.singleton)&&O!==e.version)return;const b=r==null?void 0:r[O],T=bt(W,q,s,"default",t,g,m,b,"version-first");if(!T&&!R)return;const{provider:S,scopeRootProvider:A}=T||{provider:_,scopeRootProvider:void 0};if(e.canLiveRebind===!1||l!==void 0&&y!==D)return;const w=s[t],j=w==null?void 0:w[O];if(g.registered&&!A&&!z(j,S))return;const v=await ye(t,e.shareConfig,w,O,j,S,g.registered&&!R),G=v==null?void 0:v.provider,F=v==null?void 0:v.selection;if(!F||z(G,e)||i&&(i.version!==F.version||!z({from:F.from},i.provider))||fe.has(G))return;const Ie=v==null?void 0:v.resolved;if(Ie===void 0)return;const st=h(d.share,a),ft=P(d.share,a);if(st!==void 0&&ft!==D||F.registered&&(w==null?void 0:w[F.version])!==G)return;i||ae.set(t,{version:F.version,provider:{from:F.from}}),fe.add(G);const at=be(Ie);E(d.share,a,at,F.from)}catch(a){console.error('[Module Federation] Failed to bridge external shared module "'+t+'"',a)}};for(const t of ce)await Promise.all(t.map(async e=>{const n=I[e];!n||n.materialize===!1||n.treeShaking||await Ye(e,n,k[e])}));for(const[t,e]of Object.entries(I)){if(e.treeShaking)continue;const n=u(t,(Re=e.shareConfig)==null?void 0:Re.singleton,e.version,e.scope);if(h(d.share,n)!==void 0)continue;const r=u(t,!0,e.version,e.scope),i=h(d.share,r);i!==void 0&&E(d.share,n,i,P(d.share,r))}const Ze=["react"],$e=[["react"]],Z=Ze.filter(t=>{var e;return I[t]&&(I[t].materialize!==!1||((e=I[t].shareConfig)==null?void 0:e.import)===!1)});d.providerInit||=new Map;const et=(t,e)=>{const n=d.providerInit.get(t);if(n)return n;const r=Promise.resolve().then(e);return d.providerInit.set(t,r),r.catch(()=>d.providerInit.delete(t)),r};var ve=async t=>{const e=new Set(t);for(const n of $e)await Promise.all(n.filter(r=>e.has(r)).map(async r=>{var O,b;const i=I[r],o=u(r,(O=i.shareConfig)==null?void 0:O.singleton,i.version,i.scope);if(((b=i.shareConfig)==null?void 0:b.import)===!1||i.treeShaking||h(d.share,o)!==void 0)return;const c=u(r,!0,i.version,i.scope),a=h(d.share,c);if(a!==void 0){E(d.share,o,a,P(d.share,c));return}const l=typeof re=="function"?re(r,i):void 0;if(l&&!l.lib&&!l.loaded)return;const y=o.canonical,m=await et(y,async()=>{const T=await i.get(),S=typeof T=="function"?T():T;return Promise.resolve(S)}),g=(T=>{let S=T;for(let A=0;A<5;A++){const w=S==null?void 0:S.default;if(!w||typeof w!="object"||Object.keys(w).length===0)break;const j=Object.keys(S).filter(v=>v!=="default").map(v=>S[v]);if(j.length>0&&j.some(v=>v!==void 0))break;S=w}return S})(m),R=g===m?{...m}:g;R.__esModule!==!0&&Object.defineProperty(R,"__esModule",{value:!0,enumerable:!1}),E(d.share,o,R,D)}))};const pe=t=>{var r,i;const e=I[t];if(!e.treeShaking&&((r=e.shareConfig)==null?void 0:r.import)!==!1)return!1;const n=u(t,(i=e.shareConfig)==null?void 0:i.singleton,e.version,e.scope);return e.treeShaking?B(d.share,n,D)===void 0&&h(d.share,n)===void 0:h(d.share,n)===void 0},tt=t=>{var i,o;const e=I[t],n=u(t,(i=e.shareConfig)==null?void 0:i.singleton,e.version,e.scope);return(e.treeShaking?B(d.share,n,D)??h(d.share,n):h(d.share,n))!==void 0?!1:e.treeShaking||((o=e.shareConfig)==null?void 0:o.import)===!1?!0:typeof U!="function"?!1:!!U(k[t],t,e,"version-first")},$=Z.findIndex(tt),nt=$===-1?Z:Z.slice(0,$);var rt=$===-1?[]:Z.slice($);await ve(nt);try{await _e(async()=>{await Promise.all(await H.initializeSharing("default",{strategy:"version-first",from:"build",initScope:f}))})}catch(t){console.error("[Module Federation]",t)}ze();const Pe=async()=>{for(const t of ce)await Promise.all(t.map(async e=>{const n=I[e];!n||n.materialize===!1||n.treeShaking||await Se(e,n,s[e],k[e],void 0)}))};await Pe(),Ke&&(ue=Pe);try{const t=(Ce=globalThis.__FEDERATION__)==null?void 0:Ce.__SHARE__,e=Object.create(null);if(t)for(const[,n]of Object.entries(t))for(const r of mt){const i=n==null?void 0:n[r];if(i)for(const[o,c]of Object.entries(i)){const a=I==null?void 0:I[o],l=k[o],y=ae.get(o);if(!a||!l||!y||a.treeShaking)continue;const m=e[o]||(e[o]=Object.create(null));for(const[_,g]of Object.entries(c)){if(!g.lib||y.version!==_||!z(g,y.provider))continue;const R=l[_];(g===R||R!=null&&R.from&&g.from===R.from)&&(g===a||a.from&&g.from===a.from||m[_]===void 0&&(m[_]=g))}}}for(const n of ce)await Promise.all(n.map(async r=>{const i=e[r];i&&await Se(r,I[r],i,k[r],ae.get(r))}))}catch(t){console.error("[Module Federation] Failed to bridge external shared modules",t)}const ot=async()=>{},it=async(t,e)=>{var T,S;const n=u(t,(T=e.shareConfig)==null?void 0:T.singleton,e.version,e.scope),r=e.treeShaking?B(d.share,n,D):h(d.share,n);if(((S=e.shareConfig)==null?void 0:S.import)!==!1||r!==void 0||re(t,e,k[t]))return;const i=A=>{let w=A;for(let j=0;j<5;j++){const v=w==null?void 0:w.default;if(!v||typeof v!="object"||Object.keys(v).length===0)break;const G=Object.keys(w).filter(F=>F!=="default").map(F=>w[F]);if(G.length>0&&G.some(F=>F!==void 0))break;w=v}return w},o=s==null?void 0:s[t],c=me(o,t,e,"version-first")||e,a=le(o,c);if(!a)return;const{version:l}=a,y=o==null?void 0:o[l],m=await ye(t,e.shareConfig,o,l,y,c,a.registered&&!z(c,e)),_=m==null?void 0:m.selection,g=m==null?void 0:m.provider,R=m==null?void 0:m.resolved;if(!_||z(g,e)||R===void 0||(e.treeShaking?B(d.share,n,D):h(d.share,n))!==void 0||_.registered&&(o==null?void 0:o[_.version])!==g)return;const b=i(R);if(e.treeShaking){const A=e.treeShaking.providedExports??e.treeShaking.usedExports??[];he(d.share,n,A,b),J(d.share,n,D,b)}else E(d.share,n,b,_.from)},Oe=[];for(const t of rt){const e=I[t];if(pe(t))try{e.treeShaking?await ot(t,e):((Ee=e.shareConfig)==null?void 0:Ee.import)===!1&&await it(t,e)}catch(n){console.error(`[Module Federation] Failed to resolve runtime-only shared module "${t}"`,n);break}if(pe(t))break;Oe.push(t)}return await ve(Oe),ut(H),H}async function Ot(s){const f=await St();if(!(s in f))throw new Error(`[Module Federation] Module ${s} does not exist in container.`);return ue&&await ue(),d.pendingShareLoads&&await Promise.all(d.pendingShareLoads),f[s]().then(u=>()=>u)}export{Ot as get,Pt as init};
|
|
1
|
+
import{h as ct,i as lt}from"./assets/index-2HOz3j7B.js";const dt=ct.share;typeof __VUE_HMR_RUNTIME__>"u"&&(globalThis.__VUE_HMR_RUNTIME__={createRecord(){},rerender(){},reload(){}});const Ne="__mf_init__virtual:mf:__mfe_internal__ShoppingRouteReviewSet__mf_owner__1__mf_v__runtimeInit__mf_v__.js__";let de=globalThis[Ne];if(!de){let s,f;const u=new Promise((h,C)=>{s=h,f=C});de=globalThis[Ne]={initPromise:u,initResolve:s,initReject:f}}const ut=de.initResolve,ne="__mf_module_cache__";globalThis[ne]||={share:{},remote:{}};globalThis[ne].share||={};globalThis[ne].remote||={};const d=globalThis[ne];for(const s of Object.keys(d.share))if(s.startsWith("default:")){const f=s.slice(8);d.share[f]===void 0&&(d.share[f]=d.share[s])}else if(!s.includes(":")){const f="default:"+s;d.share[f]===void 0&&(d.share[f]=d.share[s])}const Te={},mt=Array.isArray("default")?"default":["default"],Fe="default",D="ShoppingRouteReviewSet",ce=[["react"]];let ee,te,ue;async function _e(s){for(let f=0;;f++)try{return await s()}catch(u){throw u}}const Le=Symbol("mf.originalSharedProvider"),_t={emit:s=>s},ht=(s,f)=>{if(f!=="version-first")return s;const u={};for(const[h,C]of Object.entries(s))u[h]=Object.assign({},C,{[Le]:C});return u},le=(s,f)=>{if(!f)return;const u=Object.entries(s||{}),h=u.find(([,p])=>p===f);if(h)return{version:h[0],provider:f,registered:!0};if(typeof f.version=="string"&&f.version)return{version:f.version,provider:f,registered:!1};const C=u.filter(([,p])=>p===f||!!(f.from&&(p==null?void 0:p.from)===f.from));if(C.length===1)return{version:C[0][0],provider:f,registered:!1}},me=(s,f,u,h)=>{var E;if(!s||!u)return;const C=Array.isArray(u.scope)?u.scope:[u.scope||"default"],p=ht(s,h),x={};for(const N of C)x[N||"default"]={[f]:p};const P=(E=dt.getRegisteredShare(x,f,{...u,scope:C,strategy:h},_t))==null?void 0:E.shared;return(P==null?void 0:P[Le])||P},U=(s,f,u,h)=>{var P;const C=E=>z(E,u),p=Object.fromEntries(Object.entries(s||{}).filter(([,E])=>{var N;return!C(E)&&((N=E==null?void 0:E.shareConfig)==null?void 0:N.import)!==!1}));u!=null&&u.version&&((P=u.shareConfig)==null?void 0:P.import)!==!1&&(p[u.version]||(p[u.version]=u));const x=me(p,f,u,h);return C(x)?void 0:x},z=(s,f)=>s===f||!!(f!=null&&f.from&&(s==null?void 0:s.from)===f.from),gt=(s,f,u,h,C,p,x,P,E)=>{var B,J,W;if(!P)return;const N=(J=(B=f==null?void 0:f.options)==null?void 0:B.shared)==null?void 0:J[C],K=Array.isArray(N)?N.find(L=>(L==null?void 0:L.version)===p):void 0,V=((P==null?void 0:P.from)===((W=f==null?void 0:f.options)==null?void 0:W.name)?P:void 0)||(z(K,P)?K:f?void 0:P);return V&&s.some(L=>{var q,M;return L!==f&&((q=L==null?void 0:L.options)==null?void 0:q.name)===(x==null?void 0:x.from)&&((M=L==null?void 0:L.shareScopeMap)==null?void 0:M[h])===u})?V:void 0},bt=(s,f,u,h,C,p,x,P,E)=>{const N=p.registered?gt(s,f,u,h,C,p.version,p.provider,P):void 0,K=N||x;if(K&&!(p.registered&&!z(K,P)))return{provider:K,scopeRootProvider:N}};async function yt(){return ee||(ee=_e(()=>import("./assets/_virtual_mf-localSharedImportMap___mfe_internal__ShoppingRouteReviewSet__mf_owner__1-DXSRuGUo.js")).catch(s=>{throw ee=void 0,s})),ee}async function St(){return te||(te=_e(()=>import("./assets/virtualExposes-g5zs8oe1.js")).then(s=>s.default??s).catch(s=>{throw te=void 0,s})),te}async function Pt(s={},f=[]){var we,je,Re,Ce,Ee;const u=(t,e,n,r)=>{const o=(Array.isArray(r)?r[0]:r)||"default",c=e||!n?t:t+"@"+n,a={canonical:o+":"+c};return o==="default"&&(a.aliases=[c]),a},h=(t,e)=>{const n=t[e.canonical];if(n!==void 0)return n;const r=e.aliases||[];for(const i of r){if(!Object.prototype.hasOwnProperty.call(t,i))continue;const o=t[i];if(o!==void 0)return t[e.canonical]=o,o}},C=Symbol.for("module-federation.shared-cache-listeners"),p=Symbol.for("module-federation.shared-cache-owners"),x=t=>{let e=t[p];return e===void 0&&(e=Object.create(null),Object.defineProperty(t,p,{value:e,enumerable:!1,configurable:!1,writable:!1})),e},P=(t,e)=>{var n;return(n=t[p])==null?void 0:n[e.canonical]},E=(t,e,n,r)=>{var a;t[e.canonical]=n;const i=e.aliases||[];for(const l of i)Object.defineProperty(t,l,{value:n,enumerable:!0,configurable:!0,writable:!0});const o=t[p];r===void 0?o&&delete o[e.canonical]:x(t)[e.canonical]=r;const c=(a=t[C])==null?void 0:a[e.canonical];if(c)for(const l of c)l(n);return n},N=Symbol.for("module-federation.tree-shaking-shared-cache"),K=t=>{let e=t[N];return e===void 0&&(e=Object.create(null),Object.defineProperty(t,N,{value:e,enumerable:!1,configurable:!1,writable:!1})),e},he=(t,e,n,r)=>{if(!Array.isArray(n))return r;const i=[...new Set(n)].sort(),o=K(t),c=o[e.canonical]||=[],a=c.find(l=>l.providedExports.length===i.length&&l.providedExports.every((y,m)=>y===i[m]));return a?a.value=r:c.push({providedExports:i,value:r}),r},V=Symbol.for("module-federation.tree-shaking-shared-selection-cache"),ge=t=>{let e=t[V];return e===void 0&&(e=Object.create(null),Object.defineProperty(t,V,{value:e,enumerable:!1,configurable:!1,writable:!1})),e},B=(t,e,n)=>{var i,o;const r=h(t,e);return r!==void 0?r:(o=(i=t[V])==null?void 0:i[e.canonical])==null?void 0:o[n]},J=(t,e,n,r)=>{const i=ge(t),o=i[e.canonical]||=Object.create(null);return o[n]=r,r},W=((we=globalThis.__FEDERATION__)==null?void 0:we.__INSTANCES__)||[],L=(je=f.find(t=>t==null?void 0:t.from))==null?void 0:je.from,q=W.find(t=>{var e,n;return((e=t==null?void 0:t.options)==null?void 0:e.name)===L&&((n=t==null?void 0:t.shareScopeMap)==null?void 0:n.default)===s})||W.find(t=>{var e,n;return((e=t==null?void 0:t.options)==null?void 0:e.name)!==D&&((n=t==null?void 0:t.shareScopeMap)==null?void 0:n.default)===s}),M=Object.create(null),Ae=t=>{const e=Object.create(null);for(const[n,r]of Object.entries(t||{}))e[n]=Object.assign(Object.create(null),r);return e},De=(t,e)=>{const n=!q&&Object.values(e||{}).some(i=>Object.values(i||{}).some(Q)),r=n?Ae(e):e;return M[t]={host:e,runtime:r,isWebpackScope:n},r},ze=()=>{const t=Object.values(M).filter(({isWebpackScope:e})=>e);if(t.length!==0)for(const{host:e,runtime:n}of t)for(const[r,i]of Object.entries(e||{})){const o=n[r]||=Object.create(null);for(const[c,a]of Object.entries(i||{}))o[c]=a}},k=Object.create(null);for(const[t,e]of Object.entries(s)){const n=k[t]=Object.create(null);for(const[r,i]of Object.entries(e))n[r]=Object.assign({},i)}const{usedShared:I,usedRemotes:ke}=await yt();function Q(t){if(typeof(t==null?void 0:t.get)!="function")return!1;const e=Function.prototype.toString.call(t.get);return e.includes("__webpack_require__")||/\.\s*e\s*\([^)]*\)\s*\.then\s*\(/.test(e)}const Ke=Object.values(k).some(t=>Object.values(t||{}).some(Q)),Be=t=>{const e=t.split("/");return t.startsWith("@")?e.slice(0,2).join("/"):e[0]},re=(t,e,n)=>{if(typeof U!="function")return;const r=Be(t),i=r===t?[[t,e]]:[[t,e],[r,I[r]]];for(const[o,c]of i){if(!c)continue;const a=n?o===t?n:k[o]:s[o],l=U(a,o,c,"version-first");if(l&&Q(l)&&!l.lib&&!l.loaded)return l}};var X=Te[Fe];if(X||(X=Te[Fe]={from:D}),f.indexOf(X)>=0)return;f.push(X);const be=t=>{let e=t;for(let n=0;n<5;n++){const r=e==null?void 0:e.default;if(!r||typeof r!="object"||Object.keys(r).length===0)break;const i=Object.keys(e).filter(o=>o!=="default").map(o=>e[o]);if(i.length>0&&i.some(o=>o!==void 0))break;e=r}return e},Ge=[],Ve=typeof globalThis.window>"u"?await Promise.all([]):[],oe="__mf_vite_runtime_share_load_id__";let We=0;const ie=new Map,se=new Map,H=lt({name:D,remotes:ke,shared:I,plugins:[He(),Ue(),...Ge,...Ve],shareStrategy:"version-first"});H.initShareScopeMap("default",De("default",s));function He(){return{name:"vite-share-pin-lifecycle-plugin",resolveShare(t){var i;const e=(i=t.shareInfo)==null?void 0:i[oe],n=e===void 0?void 0:se.get(e);if(!n)return t;const r=t.resolver;return t.resolver=(...o)=>(n.pinned.reapply(),r(...o)),n.pinned.reveal(),t}}}function Ue(){return{name:"vite-real-name-snapshot-plugin",afterLoadSnapshot(t){const e=t&&t.remoteSnapshot,n=e&&e.globalName,r=e&&e.version;if(!n||!r||!e.remoteEntry)return t;const i=globalThis.__FEDERATION__&&globalThis.__FEDERATION__.moduleInfo,o=n+":"+r;return i&&!i[o]&&(i[o]=e),t}}}const qe=H.sharedHandler.hooks.lifecycle.resolveShare,Y=new WeakMap;qe.on(t=>{var i;const e=(i=t.shareInfo)==null?void 0:i[oe],n=t.resolver;if(typeof n!="function")return t;const r=(...o)=>{const c=n(...o),a=c==null?void 0:c.shared;return a&&(typeof a=="object"||typeof a=="function")&&!Y.has(a)&&Y.set(a,{from:a.from}),e!==void 0&&a&&ie.set(e,a),c};return t.resolver=r,t});const Me=(t,e,n,r)=>{if(!t||t[e]!==n)return;const i=Object.assign({},r,{version:r.version??e,scope:r.scope??(n==null?void 0:n.scope)??["default"],strategy:"loaded-first"}),o=r.from;t[e]=i;const c=()=>n===void 0?t[e]===void 0:t[e]===n;return{provider:i,reveal(){return t[e]!==i?!1:(n===void 0?delete t[e]:t[e]=n,!0)},reapply(){return c()?(t[e]=i,!0):!1},release(a,l=!0){return r.from=o,t[e]!==i?!l&&c():l?a?(i.from=o,a&&i.lib&&(i.loaded=!0),r.strategy===void 0?delete i.strategy:i.strategy=r.strategy,!0):(n===void 0?delete t[e]:t[e]=n,!1):(n===void 0?delete t[e]:t[e]=n,!0)}}},Je=t=>Object.entries(t||{}).map(([e,n])=>({provider:n,version:e,from:n.from,registered:!0})),Qe=(t,e)=>{if(e===void 0)return;let n;for(const r of t){const i=r.provider,o=i.treeShaking||i;if(!(r.loadedFactory!==e&&i.lib!==e&&o.lib!==e)){if(n)return;n=r}}return n},Xe=async(t,e,n)=>{const r=++We;se.set(r,{pinned:n});try{const i=await H.loadShare(t,{customShareInfo:{shareConfig:e,[oe]:r}});return{factory:i===!1?void 0:i,selectedProvider:ie.get(r)}}finally{ie.delete(r),se.delete(r)}},ye=async(t,e,n,r,i,o,c=!0)=>{const a=o.from,l=Me(n,r,i,o);if(!l)return;let y;try{y=await Xe(t,e,l)}catch(j){throw l.release(!1),j}const m=y==null?void 0:y.factory;if(m===void 0){l.release(!1);return}const _=Je(n),g=l.provider.treeShaking||l.provider,R=l.provider.lib===m||g.lib===m;if(!c&&R){const j=_.findIndex(v=>v.provider===l.provider);j!==-1&&_.splice(j,1)}!c&&!_.some(j=>j.provider===o)&&_.push({provider:o,version:r,from:a,registered:!1,loadedFactory:R?m:void 0});const O=!c&&y.selectedProvider===l.provider&&R?o:y.selectedProvider;if(O&&!_.some(j=>j.provider===O)){const j=Y.get(O),v=typeof O.version=="string"&&O.version?O.version:r;_.push({provider:O,version:v,from:j?j.from:O.from,registered:(n==null?void 0:n[v])===O,loadedFactory:m})}const b=_.find(j=>j.provider===O)??Qe(_,m);if(!l.release(!0,(b==null?void 0:b.provider)===l.provider)||!b)return;const S=Y.get(b.provider);b.from=b.provider===o?a:S?S.from:b.provider.from,S&&(b.provider.from=S.from);const A=typeof m=="function"?m():m,w=await Promise.resolve(A);if(!(b.registered&&(n==null?void 0:n[b.version])!==b.provider))return{provider:b.provider,selection:b,resolved:w}},fe=new Set,ae=new Map,Ye=async(t,e,n)=>{var i;const r=!!((i=e.shareConfig)!=null&&i.singleton);if(!r&&e.canLiveRebind!==!1)try{const o=U(n,t,e,"version-first"),c=le(n,o);if(!c)return;const{version:a}=c;if(!r&&a!==e.version||!o.lib&&!o.loading&&!(o.loaded&&typeof o.get=="function"))return;const l=u(t,r,e.version,e.scope);if(h(d.share,l)!==void 0)return;const y=s[t],m=y==null?void 0:y[a];if(c.registered&&!z(m,o))return;let _,g=o.lib;if(!g&&Q(o)||(!g&&o.loading&&(g=await o.loading),!g&&o.loaded&&typeof o.get=="function"&&(g=await o.get()),!g))return;const R=typeof g=="function"?g():g,O=await Promise.resolve(R),b=c.registered?m:o;_={provider:b,selection:{provider:b,version:a,from:o.from,registered:c.registered},resolved:O};const T=_==null?void 0:_.provider,S=_==null?void 0:_.selection;if(!S)return;const A=_==null?void 0:_.resolved;if(A===void 0||h(d.share,l)!==void 0||S.registered&&(y==null?void 0:y[S.version])!==T)return;E(d.share,l,be(A),S.from),fe.add(T)}catch(o){console.error('[Module Federation] Failed to bridge materialized shared module "'+t+'"',o)}},Se=async(t,e,n,r,i)=>{var o,c;try{const a=u(t,(o=e.shareConfig)==null?void 0:o.singleton,e.version,e.scope),l=h(d.share,a),y=P(d.share,a),m=U(n,t,e,"version-first"),_=m||me(n,t,e,"version-first")||e,g=le(n,_);if(!g)return;const R=z(_,e),{version:O}=g;if(!((c=e.shareConfig)!=null&&c.singleton)&&O!==e.version)return;const b=r==null?void 0:r[O],T=bt(W,q,s,"default",t,g,m,b,"version-first");if(!T&&!R)return;const{provider:S,scopeRootProvider:A}=T||{provider:_,scopeRootProvider:void 0};if(e.canLiveRebind===!1||l!==void 0&&y!==D)return;const w=s[t],j=w==null?void 0:w[O];if(g.registered&&!A&&!z(j,S))return;const v=await ye(t,e.shareConfig,w,O,j,S,g.registered&&!R),G=v==null?void 0:v.provider,F=v==null?void 0:v.selection;if(!F||z(G,e)||i&&(i.version!==F.version||!z({from:F.from},i.provider))||fe.has(G))return;const Ie=v==null?void 0:v.resolved;if(Ie===void 0)return;const st=h(d.share,a),ft=P(d.share,a);if(st!==void 0&&ft!==D||F.registered&&(w==null?void 0:w[F.version])!==G)return;i||ae.set(t,{version:F.version,provider:{from:F.from}}),fe.add(G);const at=be(Ie);E(d.share,a,at,F.from)}catch(a){console.error('[Module Federation] Failed to bridge external shared module "'+t+'"',a)}};for(const t of ce)await Promise.all(t.map(async e=>{const n=I[e];!n||n.materialize===!1||n.treeShaking||await Ye(e,n,k[e])}));for(const[t,e]of Object.entries(I)){if(e.treeShaking)continue;const n=u(t,(Re=e.shareConfig)==null?void 0:Re.singleton,e.version,e.scope);if(h(d.share,n)!==void 0)continue;const r=u(t,!0,e.version,e.scope),i=h(d.share,r);i!==void 0&&E(d.share,n,i,P(d.share,r))}const Ze=["react"],$e=[["react"]],Z=Ze.filter(t=>{var e;return I[t]&&(I[t].materialize!==!1||((e=I[t].shareConfig)==null?void 0:e.import)===!1)});d.providerInit||=new Map;const et=(t,e)=>{const n=d.providerInit.get(t);if(n)return n;const r=Promise.resolve().then(e);return d.providerInit.set(t,r),r.catch(()=>d.providerInit.delete(t)),r};var ve=async t=>{const e=new Set(t);for(const n of $e)await Promise.all(n.filter(r=>e.has(r)).map(async r=>{var O,b;const i=I[r],o=u(r,(O=i.shareConfig)==null?void 0:O.singleton,i.version,i.scope);if(((b=i.shareConfig)==null?void 0:b.import)===!1||i.treeShaking||h(d.share,o)!==void 0)return;const c=u(r,!0,i.version,i.scope),a=h(d.share,c);if(a!==void 0){E(d.share,o,a,P(d.share,c));return}const l=typeof re=="function"?re(r,i):void 0;if(l&&!l.lib&&!l.loaded)return;const y=o.canonical,m=await et(y,async()=>{const T=await i.get(),S=typeof T=="function"?T():T;return Promise.resolve(S)}),g=(T=>{let S=T;for(let A=0;A<5;A++){const w=S==null?void 0:S.default;if(!w||typeof w!="object"||Object.keys(w).length===0)break;const j=Object.keys(S).filter(v=>v!=="default").map(v=>S[v]);if(j.length>0&&j.some(v=>v!==void 0))break;S=w}return S})(m),R=g===m?{...m}:g;R.__esModule!==!0&&Object.defineProperty(R,"__esModule",{value:!0,enumerable:!1}),E(d.share,o,R,D)}))};const pe=t=>{var r,i;const e=I[t];if(!e.treeShaking&&((r=e.shareConfig)==null?void 0:r.import)!==!1)return!1;const n=u(t,(i=e.shareConfig)==null?void 0:i.singleton,e.version,e.scope);return e.treeShaking?B(d.share,n,D)===void 0&&h(d.share,n)===void 0:h(d.share,n)===void 0},tt=t=>{var i,o;const e=I[t],n=u(t,(i=e.shareConfig)==null?void 0:i.singleton,e.version,e.scope);return(e.treeShaking?B(d.share,n,D)??h(d.share,n):h(d.share,n))!==void 0?!1:e.treeShaking||((o=e.shareConfig)==null?void 0:o.import)===!1?!0:typeof U!="function"?!1:!!U(k[t],t,e,"version-first")},$=Z.findIndex(tt),nt=$===-1?Z:Z.slice(0,$);var rt=$===-1?[]:Z.slice($);await ve(nt);try{await _e(async()=>{await Promise.all(await H.initializeSharing("default",{strategy:"version-first",from:"build",initScope:f}))})}catch(t){console.error("[Module Federation]",t)}ze();const Pe=async()=>{for(const t of ce)await Promise.all(t.map(async e=>{const n=I[e];!n||n.materialize===!1||n.treeShaking||await Se(e,n,s[e],k[e],void 0)}))};await Pe(),Ke&&(ue=Pe);try{const t=(Ce=globalThis.__FEDERATION__)==null?void 0:Ce.__SHARE__,e=Object.create(null);if(t)for(const[,n]of Object.entries(t))for(const r of mt){const i=n==null?void 0:n[r];if(i)for(const[o,c]of Object.entries(i)){const a=I==null?void 0:I[o],l=k[o],y=ae.get(o);if(!a||!l||!y||a.treeShaking)continue;const m=e[o]||(e[o]=Object.create(null));for(const[_,g]of Object.entries(c)){if(!g.lib||y.version!==_||!z(g,y.provider))continue;const R=l[_];(g===R||R!=null&&R.from&&g.from===R.from)&&(g===a||a.from&&g.from===a.from||m[_]===void 0&&(m[_]=g))}}}for(const n of ce)await Promise.all(n.map(async r=>{const i=e[r];i&&await Se(r,I[r],i,k[r],ae.get(r))}))}catch(t){console.error("[Module Federation] Failed to bridge external shared modules",t)}const ot=async()=>{},it=async(t,e)=>{var T,S;const n=u(t,(T=e.shareConfig)==null?void 0:T.singleton,e.version,e.scope),r=e.treeShaking?B(d.share,n,D):h(d.share,n);if(((S=e.shareConfig)==null?void 0:S.import)!==!1||r!==void 0||re(t,e,k[t]))return;const i=A=>{let w=A;for(let j=0;j<5;j++){const v=w==null?void 0:w.default;if(!v||typeof v!="object"||Object.keys(v).length===0)break;const G=Object.keys(w).filter(F=>F!=="default").map(F=>w[F]);if(G.length>0&&G.some(F=>F!==void 0))break;w=v}return w},o=s==null?void 0:s[t],c=me(o,t,e,"version-first")||e,a=le(o,c);if(!a)return;const{version:l}=a,y=o==null?void 0:o[l],m=await ye(t,e.shareConfig,o,l,y,c,a.registered&&!z(c,e)),_=m==null?void 0:m.selection,g=m==null?void 0:m.provider,R=m==null?void 0:m.resolved;if(!_||z(g,e)||R===void 0||(e.treeShaking?B(d.share,n,D):h(d.share,n))!==void 0||_.registered&&(o==null?void 0:o[_.version])!==g)return;const b=i(R);if(e.treeShaking){const A=e.treeShaking.providedExports??e.treeShaking.usedExports??[];he(d.share,n,A,b),J(d.share,n,D,b)}else E(d.share,n,b,_.from)},Oe=[];for(const t of rt){const e=I[t];if(pe(t))try{e.treeShaking?await ot(t,e):((Ee=e.shareConfig)==null?void 0:Ee.import)===!1&&await it(t,e)}catch(n){console.error(`[Module Federation] Failed to resolve runtime-only shared module "${t}"`,n);break}if(pe(t))break;Oe.push(t)}return await ve(Oe),ut(H),H}async function Ot(s){const f=await St();if(!(s in f))throw new Error(`[Module Federation] Module ${s} does not exist in container.`);return ue&&await ue(),d.pendingShareLoads&&await Promise.all(d.pendingShareLoads),f[s]().then(u=>()=>u)}export{Ot as get,Pt as init};
|
|
2
2
|
|
|
3
3
|
if (typeof document !== 'undefined' && document.head) {
|
|
4
4
|
try {
|
|
5
|
-
for (const __mfWarmupPath of ["assets/virtualExposes-
|
|
5
|
+
for (const __mfWarmupPath of ["assets/virtualExposes-g5zs8oe1.js","assets/_virtual_mf-localSharedImportMap___mfe_internal__ShoppingRouteReviewSet__mf_owner__1-DXSRuGUo.js","assets/vite-preload-helper-Dp1pzeXC.js","assets/index-2HOz3j7B.js"]) {
|
|
6
6
|
const __mfWarmupLink = document.createElement('link');
|
|
7
7
|
__mfWarmupLink.rel = 'modulepreload';
|
|
8
8
|
__mfWarmupLink.crossOrigin = '';
|
package/admin/jsonConfig.json
CHANGED
|
@@ -572,10 +572,7 @@
|
|
|
572
572
|
"sm": 12,
|
|
573
573
|
"md": 12,
|
|
574
574
|
"lg": 12,
|
|
575
|
-
"xl": 12
|
|
576
|
-
"onChange": {
|
|
577
|
-
"calculateFunc": "(data.products || []).map(row => ({...row,availableMarkets:Array.isArray(row.availableMarkets)?row.availableMarkets.map(v=>typeof v==='string'?v.trim():'').filter(Boolean).join(','):String(row.availableMarkets || '')}))"
|
|
578
|
-
}
|
|
575
|
+
"xl": 12
|
|
579
576
|
}
|
|
580
577
|
}
|
|
581
578
|
},
|
|
@@ -706,9 +703,6 @@
|
|
|
706
703
|
"md": 12,
|
|
707
704
|
"lg": 12,
|
|
708
705
|
"xl": 12,
|
|
709
|
-
"onChange": {
|
|
710
|
-
"calculateFunc": "(data.reviewItems || []).map(row => ({...row,availableMarkets:Array.isArray(row.availableMarkets)?row.availableMarkets.map(v=>typeof v==='string'?v.trim():'').filter(Boolean).join(','):String(row.availableMarkets || '')}))"
|
|
711
|
-
},
|
|
712
706
|
"hidden": "true"
|
|
713
707
|
}
|
|
714
708
|
}
|
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.normalizeAvailableMarkets = normalizeAvailableMarkets;
|
|
4
|
+
exports.normalizeProductAvailableMarkets = normalizeProductAvailableMarkets;
|
|
3
5
|
exports.markAllReviewItemsAccept = markAllReviewItemsAccept;
|
|
6
|
+
function normalizeAvailableMarkets(value) {
|
|
7
|
+
const values = Array.isArray(value) ? value : typeof value === 'string' ? value.split(/[;,]/) : [];
|
|
8
|
+
return [...new Set(values
|
|
9
|
+
.map(entry => typeof entry === 'string' ? entry.trim() : '')
|
|
10
|
+
.filter(Boolean))];
|
|
11
|
+
}
|
|
12
|
+
function normalizeProductAvailableMarkets(products) {
|
|
13
|
+
return products.map(product => ({
|
|
14
|
+
...product,
|
|
15
|
+
availableMarkets: normalizeAvailableMarkets(product.availableMarkets),
|
|
16
|
+
}));
|
|
17
|
+
}
|
|
4
18
|
/**
|
|
5
19
|
* Apply the Admin review-table bulk action without dropping any row fields.
|
|
6
20
|
*
|
|
@@ -9,12 +23,7 @@ exports.markAllReviewItemsAccept = markAllReviewItemsAccept;
|
|
|
9
23
|
function markAllReviewItemsAccept(rows) {
|
|
10
24
|
return rows.map(item => ({
|
|
11
25
|
...item,
|
|
12
|
-
availableMarkets:
|
|
13
|
-
? item.availableMarkets
|
|
14
|
-
.map(value => typeof value === 'string' ? value.trim() : '')
|
|
15
|
-
.filter(Boolean)
|
|
16
|
-
.join(',')
|
|
17
|
-
: String(item.availableMarkets || ''),
|
|
26
|
+
availableMarkets: normalizeAvailableMarkets(item.availableMarkets),
|
|
18
27
|
action: 'accept',
|
|
19
28
|
}));
|
|
20
29
|
}
|
package/build/lib/sorter.js
CHANGED
|
@@ -110,7 +110,6 @@ function applyReviewActions(products, reviewItems) {
|
|
|
110
110
|
const remaining = [];
|
|
111
111
|
for (const review of reviewItems) {
|
|
112
112
|
if (review.action === 'accepted') {
|
|
113
|
-
remaining.push({ ...review });
|
|
114
113
|
continue;
|
|
115
114
|
}
|
|
116
115
|
if (review.action !== 'accept') {
|
|
@@ -138,7 +137,6 @@ function applyReviewActions(products, reviewItems) {
|
|
|
138
137
|
existing.aliases = [...aliases].join(',');
|
|
139
138
|
}
|
|
140
139
|
accepted.push({ ...existing });
|
|
141
|
-
remaining.push({ ...review, action: 'accepted' });
|
|
142
140
|
continue;
|
|
143
141
|
}
|
|
144
142
|
const product = {
|
|
@@ -152,7 +150,6 @@ function applyReviewActions(products, reviewItems) {
|
|
|
152
150
|
};
|
|
153
151
|
merged.push(product);
|
|
154
152
|
accepted.push(product);
|
|
155
|
-
remaining.push({ ...review, action: 'accepted' });
|
|
156
153
|
}
|
|
157
154
|
return {
|
|
158
155
|
products: merged.sort((a, b) => a.name.localeCompare(b.name, 'de', { sensitivity: 'base' })),
|
package/build/main.js
CHANGED
|
@@ -49,7 +49,7 @@ const review_tools_1 = require("./lib/review-tools");
|
|
|
49
49
|
const manual_order_1 = require("./lib/manual-order");
|
|
50
50
|
const state_change_1 = require("./lib/state-change");
|
|
51
51
|
const direct_sort_lifecycle_1 = require("./lib/direct-sort-lifecycle");
|
|
52
|
-
const VERSION = '0.
|
|
52
|
+
const VERSION = '0.4.0';
|
|
53
53
|
const COLLECT_WINDOW_MS = 5000;
|
|
54
54
|
const MAX_ACTIVE_ITEMS = 99;
|
|
55
55
|
const OWN_REFRESH_MAX_MS = 30000;
|
|
@@ -195,9 +195,11 @@ class ShoppingRoute extends utils.Adapter {
|
|
|
195
195
|
return state;
|
|
196
196
|
}
|
|
197
197
|
async onReady() {
|
|
198
|
-
|
|
199
|
-
.filter(product => product?.name).map(product => ({ ...product }))
|
|
198
|
+
const configuredProducts = (Array.isArray(this.cfg.products) ? this.cfg.products : [])
|
|
199
|
+
.filter(product => product?.name).map(product => ({ ...product }));
|
|
200
|
+
this.runtimeProducts = (0, review_tools_1.normalizeProductAvailableMarkets)(configuredProducts)
|
|
200
201
|
.sort((a, b) => a.name.localeCompare(b.name, 'de', { sensitivity: 'base' }));
|
|
202
|
+
this.productsDirty = JSON.stringify(this.runtimeProducts) !== JSON.stringify(configuredProducts);
|
|
201
203
|
this.runtimeReviews = (Array.isArray(this.cfg.reviewItems) ? this.cfg.reviewItems : []).map(item => ({ ...item }));
|
|
202
204
|
this.runtimeRoutes = (0, config_tools_1.normalizeRoutesForAdmin)(Array.isArray(this.cfg.routes) ? this.cfg.routes.filter(Boolean) : []);
|
|
203
205
|
this.routesDirty = JSON.stringify(this.runtimeRoutes) !== JSON.stringify(Array.isArray(this.cfg.routes) ? this.cfg.routes : []);
|
|
@@ -205,13 +207,17 @@ class ShoppingRoute extends utils.Adapter {
|
|
|
205
207
|
await this.loadStatistics();
|
|
206
208
|
await this.loadManualOverrides();
|
|
207
209
|
const reviewResult = (0, sorter_1.applyReviewActions)(this.runtimeProducts, this.runtimeReviews);
|
|
208
|
-
|
|
210
|
+
const reviewQueueChanged = JSON.stringify(reviewResult.remainingReviews) !== JSON.stringify(this.runtimeReviews);
|
|
211
|
+
if (reviewResult.accepted.length || reviewQueueChanged) {
|
|
209
212
|
this.runtimeProducts = reviewResult.products;
|
|
210
213
|
this.runtimeReviews = reviewResult.remainingReviews;
|
|
211
|
-
|
|
214
|
+
if (reviewResult.accepted.length)
|
|
215
|
+
this.productsDirty = true;
|
|
212
216
|
this.reviewsDirty = true;
|
|
213
|
-
|
|
214
|
-
|
|
217
|
+
if (reviewResult.accepted.length) {
|
|
218
|
+
this.statistics.reviewAccepted += reviewResult.accepted.length;
|
|
219
|
+
await this.persistStatistics();
|
|
220
|
+
}
|
|
215
221
|
}
|
|
216
222
|
await this.ensureProductGroupsConfig();
|
|
217
223
|
await this.updateTemporaryMarketStateOptions();
|
package/io-package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"common": {
|
|
3
3
|
"name": "shoppingroute",
|
|
4
|
-
"version": "0.
|
|
4
|
+
"version": "0.4.0",
|
|
5
5
|
"titleLang": {
|
|
6
6
|
"en": "ShoppingRoute",
|
|
7
7
|
"de": "ShoppingRoute",
|
|
@@ -60,6 +60,19 @@
|
|
|
60
60
|
"icon": "shoppingroute.png",
|
|
61
61
|
"tier": 3,
|
|
62
62
|
"news": {
|
|
63
|
+
"0.4.0": {
|
|
64
|
+
"en": "Fixes the complete review workflow: accepted rows are removed after saving and restart, products are not duplicated, and all selected available markets remain arrays.",
|
|
65
|
+
"de": "Behebt den vollständigen Prüflistenablauf: Übernommene Zeilen werden nach Speichern und Neustart entfernt, Artikel nicht dupliziert und alle ausgewählten verfügbaren Märkte bleiben Arrays.",
|
|
66
|
+
"ru": "Исправляет полный цикл проверки: принятые строки удаляются после сохранения и перезапуска, товары не дублируются, а выбранные доступные магазины остаются массивами.",
|
|
67
|
+
"pt": "Corrige o fluxo completo de revisão: as linhas aceites são removidas após guardar e reiniciar, os artigos não são duplicados e os mercados disponíveis selecionados permanecem arrays.",
|
|
68
|
+
"nl": "Herstelt de volledige controleworkflow: geaccepteerde regels verdwijnen na opslaan en herstarten, artikelen worden niet gedupliceerd en geselecteerde beschikbare winkels blijven arrays.",
|
|
69
|
+
"fr": "Corrige le flux complet de vérification : les lignes acceptées sont supprimées après enregistrement et redémarrage, les articles ne sont pas dupliqués et les magasins disponibles restent des tableaux.",
|
|
70
|
+
"it": "Corregge il flusso completo di revisione: le righe accettate vengono rimosse dopo salvataggio e riavvio, gli articoli non vengono duplicati e i negozi disponibili restano array.",
|
|
71
|
+
"es": "Corrige el flujo completo de revisión: las filas aceptadas se eliminan tras guardar y reiniciar, los artículos no se duplican y los mercados disponibles seleccionados permanecen como arrays.",
|
|
72
|
+
"pl": "Naprawia pełny proces weryfikacji: zaakceptowane wiersze są usuwane po zapisaniu i restarcie, artykuły nie są duplikowane, a wybrane dostępne sklepy pozostają tablicami.",
|
|
73
|
+
"uk": "Виправляє повний цикл перевірки: прийняті рядки видаляються після збереження й перезапуску, товари не дублюються, а вибрані доступні магазини залишаються масивами.",
|
|
74
|
+
"zh-cn": "修复完整审核流程:已接受的行会在保存和重启后移除,商品不会重复,所有选中的可用商店始终以数组保存。"
|
|
75
|
+
},
|
|
63
76
|
"0.3.9": {
|
|
64
77
|
"en": "Replaces incomplete GitHub-installed 0.3.8 snapshots. Normalizes available-market selections, removes accepted review rows and orphaned market headings, and delivers the corrected single-column shopping-list view.",
|
|
65
78
|
"de": "Ersetzt unvollständige, direkt von GitHub installierte 0.3.8-Zwischenstände. Vereinheitlicht verfügbare Märkte, entfernt übernommene Prüflistenzeilen und verwaiste Marktüberschriften und liefert die korrigierte einspaltige Einkaufslistenansicht.",
|
|
@@ -137,19 +150,6 @@
|
|
|
137
150
|
"pl": "Dodano zgodność niestandardowych komponentów panelu z Admin 8, poprawiono opcjonalny dziennik podsumowania sortowania i nagłówki sklepów, naprawiono akcję „Zaakceptuj wszystko” w kolejce weryfikacji, wprowadzono wymóg potwierdzonych wartości dla zewnętrznych stanów Alexa2 oraz usunięto przestarzałą konfigurację, wewnętrzne sprawdzanie npm i zaciemnianie kodu dla lepszej zgodności z repozytorium.",
|
|
138
151
|
"uk": "Додано сумісність користувацьких компонентів Admin з Admin 8, покращено необов’язковий підсумковий журнал сортування та заголовки магазинів, виправлено дію «Прийняти все» в черзі перевірки, для зовнішніх станів Alexa2 тепер потрібні підтверджені значення, а застарілі налаштування, внутрішню перевірку npm і обфускацію коду видалено для кращої сумісності з репозиторієм.",
|
|
139
152
|
"zh-cn": "新增自定义管理组件的 Admin 8 兼容性,改进可选排序摘要日志和商店标题,修复审核队列的“全部接受”操作,要求外部 Alexa2 状态使用已确认值,并移除过时配置、内部 npm 检查和代码混淆,以提高仓库兼容性。"
|
|
140
|
-
},
|
|
141
|
-
"0.3.3": {
|
|
142
|
-
"en": "New direct 00>–99> prefix sorting for Alexa lists in A–Z, with very fast incremental insertion into free number gaps, suffix rebuilds only when a gap is exhausted, direct Amazon confirmation and final verification.",
|
|
143
|
-
"de": "Neue direkte 00>–99>-Präfixsortierung für Alexa-Listen in A–Z mit sehr schnellen inkrementellen Einfügungen in freie Nummernlücken, Suffix-Rebuild nur bei ausgeschöpfter Lücke, direkter Amazon-Bestätigung und abschließender Verifikation.",
|
|
144
|
-
"ru": "Новая прямая сортировка по префиксам 00>–99> для списков Alexa в режиме A–Z: очень быстрая поэтапная вставка в свободные числовые промежутки, перестроение суффикса только при отсутствии места, прямое подтверждение Amazon и итоговая проверка.",
|
|
145
|
-
"pt": "Nova ordenação direta por prefixos 00>–99> para listas Alexa em A–Z, com inserções incrementais muito rápidas em intervalos numéricos livres, reconstrução do sufixo apenas quando o intervalo se esgota, confirmação direta da Amazon e verificação final.",
|
|
146
|
-
"nl": "Nieuwe directe 00>–99>-prefixsortering voor Alexa-lijsten in A–Z, met zeer snelle incrementele invoegingen in vrije nummergaten, alleen een suffix-rebuild als een gat vol is, directe Amazon-bevestiging en eindcontrole.",
|
|
147
|
-
"fr": "Nouveau tri direct par préfixes 00>–99> pour les listes Alexa en A–Z, avec insertions incrémentales très rapides dans les intervalles numériques libres, reconstruction du suffixe uniquement quand l’intervalle est épuisé, confirmation Amazon directe et vérification finale.",
|
|
148
|
-
"it": "Nuovo ordinamento diretto con prefissi 00>–99> per le liste Alexa in A–Z, con inserimenti incrementali molto rapidi negli intervalli numerici liberi, ricostruzione del suffisso solo quando lo spazio è esaurito, conferma Amazon diretta e verifica finale.",
|
|
149
|
-
"es": "Nueva ordenación directa por prefijos 00>–99> para listas Alexa en A–Z, con inserciones incrementales muy rápidas en huecos numéricos libres, reconstrucción del sufijo solo cuando se agota el hueco, confirmación directa de Amazon y verificación final.",
|
|
150
|
-
"pl": "Nowe bezpośrednie sortowanie prefiksami 00>–99> dla list Alexa w trybie A–Z, z bardzo szybkim wstawianiem przyrostowym w wolne luki numeracji, przebudową sufiksu tylko po wyczerpaniu luki, bezpośrednim potwierdzeniem Amazon i końcową weryfikacją.",
|
|
151
|
-
"uk": "Нове пряме сортування за префіксами 00>–99> для списків Alexa в режимі A–Z: дуже швидке інкрементне вставлення у вільні числові проміжки, перебудова суфікса лише за відсутності місця, пряме підтвердження Amazon і фінальна перевірка.",
|
|
152
|
-
"zh-cn": "全新的 Alexa A–Z 列表直接 00>–99> 前缀排序:可快速增量插入空闲编号间隙,仅在间隙耗尽时重建后缀,并使用 Amazon 直接确认和最终校验。"
|
|
153
153
|
}
|
|
154
154
|
},
|
|
155
155
|
"extIcon": "https://raw.githubusercontent.com/RaviniZib/ioBroker.shoppingroute/main/admin/shoppingroute.png",
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "iobroker.shoppingroute",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.0",
|
|
4
4
|
"description": "Smart Alexa shopping-list routing by market, product group and individual store walking route with learning, multi-list support and API protection.",
|
|
5
5
|
"author": "RaviniZib",
|
|
6
6
|
"license": "MIT",
|