@rimori/playwright-testing 0.3.21-next.1 → 0.3.21-next.2

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.
Files changed (27) hide show
  1. package/dist/core/RimoriTestEnvironment.d.ts +29 -0
  2. package/dist/core/RimoriTestEnvironment.js +147 -0
  3. package/dist/harness/__mfe_internal__rimori_mf_2_scenario_mf_2_host__loadShare___mf_0_rimori_mf_1_client__loadShare__.js.js +1 -0
  4. package/dist/harness/__mfe_internal__rimori_mf_2_scenario_mf_2_host__loadShare___mf_0_rimori_mf_1_react_mf_2_client__loadShare__.js.js +1 -0
  5. package/dist/harness/__mfe_internal__rimori_mf_2_scenario_mf_2_host__loadShare__react__loadShare__.js.js +1 -0
  6. package/dist/harness/__mfe_internal__rimori_mf_2_scenario_mf_2_host__loadShare__react__loadShare__.js_commonjs-proxy.js +1 -0
  7. package/dist/harness/__mfe_internal__rimori_mf_2_scenario_mf_2_host__loadShare__react_mf_1_jsx_mf_2_runtime__loadShare__.js.js +1 -0
  8. package/dist/harness/__mfe_internal__rimori_mf_2_scenario_mf_2_host__loadShare__react_mf_2_dom__loadShare__.js.js +1 -0
  9. package/dist/harness/__mfe_internal__rimori_mf_2_scenario_mf_2_host__loadShare__react_mf_2_dom__loadShare__.js_commonjs-proxy.js +1 -0
  10. package/dist/harness/hostInit.js +1 -0
  11. package/dist/harness/html2canvas.esm.js +22 -0
  12. package/dist/harness/index.html +24 -0
  13. package/dist/harness/index.js +25 -0
  14. package/dist/harness/index2.js +8 -0
  15. package/dist/harness/index3.js +148 -0
  16. package/dist/harness/index4.js +1 -0
  17. package/dist/harness/index5.js +9 -0
  18. package/dist/harness/index6.js +9 -0
  19. package/dist/harness/index7.js +1 -0
  20. package/dist/harness/jsx-dev-runtime.js +9 -0
  21. package/dist/harness/jsx-runtime.js +9 -0
  22. package/dist/harness/localSharedImportMap.js +1 -0
  23. package/dist/harness/preload-helper.js +1 -0
  24. package/dist/harness/remoteEntry.js +1 -0
  25. package/dist/harness/virtualExposes.js +1 -0
  26. package/dist/harness/virtual_mf-REMOTE_ENTRY_ID___mfe_internal__rimori-scenario-host__remoteEntry-_hash_.js +8 -0
  27. package/package.json +17 -5
@@ -41,12 +41,24 @@ interface MockOptions {
41
41
  export declare class RimoriTestEnvironment {
42
42
  private readonly page;
43
43
  private readonly pluginId;
44
+ private readonly pluginUrl;
44
45
  private rimoriInfo;
45
46
  private backendRoutes;
46
47
  private supabaseRoutes;
47
48
  private messageChannelSimulator;
48
49
  private settingsManager;
49
50
  constructor(options: RimoriTestEnvironmentOptions);
51
+ /**
52
+ * Fetches the plugin's standalone `dist/index.html` over HTTP (served by the plugin
53
+ * dev server's middleware at `/__rimori_dist_index__.html`) and extracts its
54
+ * `<link rel="stylesheet">` tags. The hrefs already point at `/assets/*` which the
55
+ * same dev server serves from `dist/`, so the harness page picks up the plugin's
56
+ * Tailwind base + theme without any filesystem path resolution.
57
+ *
58
+ * Returns empty string if the plugin hasn't been built (`yarn build:scenario`)
59
+ * or the dev server doesn't expose `/__rimori_dist_index__.html`.
60
+ */
61
+ private collectPluginStylesheets;
50
62
  private interceptRoutes;
51
63
  setup(): Promise<void>;
52
64
  private getRimoriInfo;
@@ -466,6 +478,23 @@ export declare class RimoriTestEnvironment {
466
478
  };
467
479
  readonly navigation: {
468
480
  mockToDashboard: () => void;
481
+ /**
482
+ * Navigates to a path inside the federated plugin via the scenario harness.
483
+ * The harness URL (`<pluginUrl>/__rimori_harness__.html`) is the base; whatever
484
+ * is passed in `route` is appended verbatim. Tests are responsible for the
485
+ * leading `#/` (HashRouter) or `/` (future BrowserRouter) so the same helper
486
+ * works regardless of which router the plugin uses.
487
+ *
488
+ * @param route - Suffix appended to the harness URL (e.g. `#/`, `#/deck/1`).
489
+ */
490
+ to: (route?: string) => Promise<void>;
491
+ /**
492
+ * Returns the part of the current URL that follows the harness base
493
+ * (`<pluginUrl>/__rimori_harness__.html`). For HashRouter this includes the
494
+ * leading `#/...`; for BrowserRouter it would be the path/query.
495
+ * Returns an empty string if the page isn't currently on the harness URL.
496
+ */
497
+ get: () => string;
469
498
  };
470
499
  }
471
500
  export {};
@@ -1,9 +1,50 @@
1
1
  "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
2
35
  Object.defineProperty(exports, "__esModule", { value: true });
3
36
  exports.RimoriTestEnvironment = void 0;
4
37
  const default_user_info_1 = require("../fixtures/default-user-info");
5
38
  const MessageChannelSimulator_1 = require("./MessageChannelSimulator");
6
39
  const SettingsStateManager_1 = require("./SettingsStateManager");
40
+ const fs = __importStar(require("fs"));
41
+ const path = __importStar(require("path"));
42
+ // Harness served by interceptRoutes so scenario tests can exercise the real
43
+ // federation boundary (./MainPanel expose + singleton dedup) instead of the
44
+ // standalone App.tsx. Built from src/harness/ via harness.vite.config.ts.
45
+ const HARNESS_DIR = path.resolve(__dirname, '..', '..', 'dist', 'harness');
46
+ const HARNESS_HTML_URL = '/__rimori_harness__.html';
47
+ const HARNESS_ASSETS_PREFIX = '/__rimori_harness__/';
7
48
  class RimoriTestEnvironment {
8
49
  constructor(options) {
9
50
  this.backendRoutes = {};
@@ -556,15 +597,121 @@ class RimoriTestEnvironment {
556
597
  };
557
598
  this.navigation = {
558
599
  mockToDashboard: () => { },
600
+ /**
601
+ * Navigates to a path inside the federated plugin via the scenario harness.
602
+ * The harness URL (`<pluginUrl>/__rimori_harness__.html`) is the base; whatever
603
+ * is passed in `route` is appended verbatim. Tests are responsible for the
604
+ * leading `#/` (HashRouter) or `/` (future BrowserRouter) so the same helper
605
+ * works regardless of which router the plugin uses.
606
+ *
607
+ * @param route - Suffix appended to the harness URL (e.g. `#/`, `#/deck/1`).
608
+ */
609
+ to: async (route = '') => {
610
+ await this.page.goto(`${this.pluginUrl}/__rimori_harness__.html${route}`);
611
+ },
612
+ /**
613
+ * Returns the part of the current URL that follows the harness base
614
+ * (`<pluginUrl>/__rimori_harness__.html`). For HashRouter this includes the
615
+ * leading `#/...`; for BrowserRouter it would be the path/query.
616
+ * Returns an empty string if the page isn't currently on the harness URL.
617
+ */
618
+ get: () => {
619
+ const url = this.page.url();
620
+ const base = `${this.pluginUrl}/__rimori_harness__.html`;
621
+ return url.startsWith(base) ? url.slice(base.length) : '';
622
+ },
559
623
  };
560
624
  this.page = options.page;
561
625
  this.pluginId = options.pluginId;
626
+ this.pluginUrl = options.pluginUrl;
562
627
  this.rimoriInfo = this.getRimoriInfo(options);
563
628
  // Initialize settings state manager
564
629
  this.settingsManager = new SettingsStateManager_1.SettingsStateManager(options.settings || null, options.pluginId, this.rimoriInfo.guild.id);
565
630
  this.interceptRoutes(options.pluginUrl);
566
631
  }
632
+ /**
633
+ * Fetches the plugin's standalone `dist/index.html` over HTTP (served by the plugin
634
+ * dev server's middleware at `/__rimori_dist_index__.html`) and extracts its
635
+ * `<link rel="stylesheet">` tags. The hrefs already point at `/assets/*` which the
636
+ * same dev server serves from `dist/`, so the harness page picks up the plugin's
637
+ * Tailwind base + theme without any filesystem path resolution.
638
+ *
639
+ * Returns empty string if the plugin hasn't been built (`yarn build:scenario`)
640
+ * or the dev server doesn't expose `/__rimori_dist_index__.html`.
641
+ */
642
+ async collectPluginStylesheets(pluginUrl) {
643
+ const indexUrl = `${pluginUrl}/__rimori_dist_index__.html`;
644
+ try {
645
+ const response = await fetch(indexUrl);
646
+ if (!response.ok) {
647
+ console.warn(`[rimori-harness] Plugin index.html not served at ${indexUrl} (status ${response.status}). ` +
648
+ `Ensure the plugin's vite.config.ts middleware serves it from dist/, and that ` +
649
+ `\`yarn build:scenario\` has been run.`);
650
+ return '';
651
+ }
652
+ const html = await response.text();
653
+ const linkRegex = /<link[^>]*rel=["']stylesheet["'][^>]*>/gi;
654
+ const links = html.match(linkRegex) ?? [];
655
+ const rewritten = links
656
+ .map((tag) => tag.replace(/href=["']\.?\/?(assets\/[^"']+)["']/i, 'href="/$1"'))
657
+ .join('\n ');
658
+ // console.log(`[rimori-harness] Injecting ${links.length} plugin stylesheet(s) from ${indexUrl}`);
659
+ return rewritten;
660
+ }
661
+ catch (err) {
662
+ console.warn(`[rimori-harness] Failed to fetch ${indexUrl}:`, err.message);
663
+ return '';
664
+ }
665
+ }
567
666
  interceptRoutes(pluginUrl) {
667
+ // HTML entry — inject the runtime config and serve the built index.html.
668
+ // Script references already use absolute paths (base: '/__rimori_harness__/')
669
+ // so the browser fetches them via the assets wildcard handler below.
670
+ this.page.route(`${pluginUrl}${HARNESS_HTML_URL}`, async (route) => {
671
+ try {
672
+ const htmlPath = path.join(HARNESS_DIR, 'index.html');
673
+ if (!fs.existsSync(htmlPath)) {
674
+ throw new Error(`Harness bundle missing at ${HARNESS_DIR}. Run \`yarn --cwd plugins/playwright-testing build:harness\` first.`);
675
+ }
676
+ const configScript = `<script>window.__RIMORI_HARNESS__ = ${JSON.stringify({
677
+ pluginId: this.pluginId,
678
+ remoteUrl: `${pluginUrl}/remoteEntry.js`,
679
+ })};</script>`;
680
+ // Lift `<link rel="stylesheet">` tags from the plugin's standalone dist/index.html
681
+ // so the harness page picks up the same Tailwind base + theme variables that
682
+ // production rimori-main provides. The plugin's vite dev-server middleware already
683
+ // serves /assets/* from dist/, so the (rewritten-to-absolute) hrefs resolve same-origin.
684
+ const pluginStylesheets = await this.collectPluginStylesheets(pluginUrl);
685
+ const html = fs.readFileSync(htmlPath, 'utf-8')
686
+ .replace('<!-- RIMORI_HARNESS_CONFIG_INJECTION -->', configScript)
687
+ .replace('</head>', `${pluginStylesheets}\n</head>`);
688
+ await route.fulfill({ status: 200, headers: { 'Content-Type': 'text/html; charset=utf-8' }, body: html });
689
+ }
690
+ catch (error) {
691
+ await route.fulfill({ status: 500, headers: { 'Content-Type': 'text/plain' }, body: String(error?.message ?? error) });
692
+ }
693
+ });
694
+ // Assets wildcard — serve any JS/CSS chunk that the federation host build emitted.
695
+ // Vite emits files like bootstrap.js, vendor chunks, CSS, etc. all into dist/harness/.
696
+ this.page.route(`${pluginUrl}${HARNESS_ASSETS_PREFIX}**`, async (route) => {
697
+ try {
698
+ const url = new URL(route.request().url());
699
+ const fileName = url.pathname.slice(HARNESS_ASSETS_PREFIX.length);
700
+ const filePath = path.join(HARNESS_DIR, fileName);
701
+ if (!fs.existsSync(filePath)) {
702
+ await route.continue();
703
+ return;
704
+ }
705
+ const ext = path.extname(fileName);
706
+ const contentType = ext === '.js' ? 'application/javascript; charset=utf-8'
707
+ : ext === '.css' ? 'text/css; charset=utf-8'
708
+ : 'application/octet-stream';
709
+ await route.fulfill({ status: 200, headers: { 'Content-Type': contentType }, body: fs.readFileSync(filePath) });
710
+ }
711
+ catch (error) {
712
+ await route.fulfill({ status: 500, headers: { 'Content-Type': 'text/plain' }, body: String(error?.message ?? error) });
713
+ }
714
+ });
568
715
  // Intercept all /locales requests and fetch from the dev server
569
716
  this.page.route(`${pluginUrl}/locales/**`, async (route) => {
570
717
  const request = route.request();
@@ -0,0 +1 @@
1
+ const n="__mf_init____mf__virtual/__mfe_internal__rimori_mf_2_scenario_mf_2_host__mf_v__runtimeInit__mf_v__.js__";let i=globalThis[n];if(!i){let e,t;const o=new Promise((r,f)=>{e=r,t=f});i=globalThis[n]={initPromise:o,initResolve:e,initReject:t},typeof window>"u"&&e({loadRemote:function(){return Promise.resolve(void 0)},loadShare:function(){return Promise.resolve(void 0)}})}const s=i.initPromise,m=s.then(e=>e.loadShare("@rimori/client",{customShareInfo:{shareConfig:{singleton:!0,strictVersion:!1,requiredVersion:"^2.5.34-next.0"}}})),_=await m.then(e=>typeof e=="function"?e():e);_.__esModule?_.default:_.default;const{setupWorker:l,AudioController:a,Translator:u,TIER_ORDER:d,ROLE_ORDER:c,StorageModule:g,EventBusHandler:v,EventBus:R,RimoriClient:h,StandaloneClient:P,MessageSender:S,getDifficultyLevel:b,getDifficultyLabel:p,getNeighborDifficultyLevel:E,compareLanguageLevels:L,RimoriCommunicationHandler:C}=_;export{P as _,h as a,v as b,R as c,a as d,S as e};
@@ -0,0 +1 @@
1
+ const o="__mf_init____mf__virtual/__mfe_internal__rimori_mf_2_scenario_mf_2_host__mf_v__runtimeInit__mf_v__.js__";let i=globalThis[o];if(!i){let _,t;const n=new Promise((r,s)=>{_=r,t=s});i=globalThis[o]={initPromise:n,initResolve:_,initReject:t},typeof window>"u"&&_({loadRemote:function(){return Promise.resolve(void 0)},loadShare:function(){return Promise.resolve(void 0)}})}const m=i.initPromise,f=m.then(_=>_.loadShare("@rimori/react-client",{customShareInfo:{shareConfig:{singleton:!0,strictVersion:!1,requiredVersion:"^0.4.21"}}})),e=await f.then(_=>typeof _=="function"?_():_);e.__esModule?e.default:e.default;const{useTranslation:a,Avatar:l,BuddyAssistant:u,VoiceRecorder:d,MarkdownEditor:c,extractImageUrls:P,injectFederationCss:h,useChat:v,useSettings:g,useExerciseTracker:p,PluginProvider:w,useRimori:R,AudioPlayOptions:S,AudioPlayer:x}=e;export{w as _};
@@ -0,0 +1 @@
1
+ function i(e,n){for(var f=0;f<n.length;f++){const _=n[f];if(typeof _!="string"&&!Array.isArray(_)){for(const t in _)if(t!=="default"&&!(t in e)){const r=Object.getOwnPropertyDescriptor(_,t);r&&Object.defineProperty(e,t,r.get?r:{enumerable:!0,get:()=>_[t]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}const a="__mf_init____mf__virtual/__mfe_internal__rimori_mf_2_scenario_mf_2_host__mf_v__runtimeInit__mf_v__.js__";let o=globalThis[a];if(!o){let e,n;const f=new Promise((_,t)=>{e=_,n=t});o=globalThis[a]={initPromise:f,initResolve:e,initReject:n},typeof window>"u"&&e({loadRemote:function(){return Promise.resolve(void 0)},loadShare:function(){return Promise.resolve(void 0)}})}const m=o.initPromise,u=m.then(e=>e.loadShare("react",{customShareInfo:{shareConfig:{singleton:!0,strictVersion:!1,requiredVersion:"^19.2.5"}}})),s=await u.then(e=>typeof e=="function"?e():e),c=s,l=s.__esModule?s.default:s.default??s,{Activity:d,Children:E,Component:S,Fragment:R,Profiler:h,PureComponent:p,StrictMode:C,Suspense:g,__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE:P,__COMPILER_RUNTIME:T,cache:N,cacheSignal:O,cloneElement:b,createContext:v,createElement:y,createRef:I,forwardRef:A,isValidElement:M,lazy:x,memo:D,startTransition:L,unstable_useCacheRefresh:U,use:V,useActionState:j,useCallback:w,useContext:k,useDebugValue:H,useDeferredValue:z,useEffect:G,useEffectEvent:F,useId:W,useImperativeHandle:Y,useInsertionEffect:q,useLayoutEffect:K,useMemo:B,useOptimistic:J,useReducer:Q,useRef:X,useState:Z,useSyncExternalStore:$,useTransition:ee,version:_e}=s,te=i({__proto__:null,Activity:d,Children:E,Component:S,Fragment:R,Profiler:h,PureComponent:p,StrictMode:C,Suspense:g,__CLIENT_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE:P,__COMPILER_RUNTIME:T,cache:N,cacheSignal:O,cloneElement:b,createContext:v,createElement:y,createRef:I,default:l,forwardRef:A,isValidElement:M,lazy:x,memo:D,startTransition:L,unstable_useCacheRefresh:U,use:V,useActionState:j,useCallback:w,useContext:k,useDebugValue:H,useDeferredValue:z,useEffect:G,useEffectEvent:F,useId:W,useImperativeHandle:Y,useInsertionEffect:q,useLayoutEffect:K,useMemo:B,useOptimistic:J,useReducer:Q,useRef:X,useState:Z,useSyncExternalStore:$,useTransition:ee,version:_e},[c]);export{l as R,te as _,Z as a,X as b,G as c,k as d,v as e,w as f,K as g,A as h,Y as i,B as j,H as k,$ as l};
@@ -0,0 +1 @@
1
+ import{_ as u}from"./__mfe_internal__rimori_mf_2_scenario_mf_2_host__loadShare__react__loadShare__.js.js";function c(e){return e&&e.__esModule&&Object.prototype.hasOwnProperty.call(e,"default")?e.default:e}function a(e){if(e.__esModule)return e;var o=e.default;if(typeof o=="function"){var t=function r(){return this instanceof r?Reflect.construct(o,arguments,this.constructor):o.apply(this,arguments)};t.prototype=o.prototype}else t={};return Object.defineProperty(t,"__esModule",{value:!0}),Object.keys(e).forEach(function(r){var n=Object.getOwnPropertyDescriptor(e,r);Object.defineProperty(t,r,n.get?n:{enumerable:!0,get:function(){return e[r]}})}),t}const f=a(u);export{c as a,a as g,f as r};
@@ -0,0 +1 @@
1
+ const t="__mf_init____mf__virtual/__mfe_internal__rimori_mf_2_scenario_mf_2_host__mf_v__runtimeInit__mf_v__.js__";let i=globalThis[t];if(!i){let e,n;const o=new Promise((s,r)=>{e=s,n=r});i=globalThis[t]={initPromise:o,initResolve:e,initReject:n},typeof window>"u"&&e({loadRemote:function(){return Promise.resolve(void 0)},loadShare:function(){return Promise.resolve(void 0)}})}const m=i.initPromise,f=m.then(e=>e.loadShare("react/jsx-runtime",{customShareInfo:{shareConfig:{singleton:!0,strictVersion:!1,requiredVersion:"^19.2.5"}}})),_=await f.then(e=>typeof e=="function"?e():e);_.__esModule?_.default:_.default;const{Fragment:a,jsx:l,jsxs:u}=_;export{l as _,u as a,a as b};
@@ -0,0 +1 @@
1
+ function f(e,o){for(var n=0;n<o.length;n++){const _=o[n];if(typeof _!="string"&&!Array.isArray(_)){for(const t in _)if(t!=="default"&&!(t in e)){const i=Object.getOwnPropertyDescriptor(_,t);i&&Object.defineProperty(e,t,i.get?i:{enumerable:!0,get:()=>_[t]})}}}return Object.freeze(Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}))}const a="__mf_init____mf__virtual/__mfe_internal__rimori_mf_2_scenario_mf_2_host__mf_v__runtimeInit__mf_v__.js__";let s=globalThis[a];if(!s){let e,o;const n=new Promise((_,t)=>{e=_,o=t});s=globalThis[a]={initPromise:n,initResolve:e,initReject:o},typeof window>"u"&&e({loadRemote:function(){return Promise.resolve(void 0)},loadShare:function(){return Promise.resolve(void 0)}})}const m=s.initPromise,l=m.then(e=>e.loadShare("react-dom",{customShareInfo:{shareConfig:{singleton:!0,strictVersion:!1,requiredVersion:"^19.2.5"}}})),r=await l.then(e=>typeof e=="function"?e():e),u=r,c=r.__esModule?r.default:r.default??r,{__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE:d,createPortal:p,flushSync:S,preconnect:h,prefetchDNS:R,preinit:O,preinitModule:N,preload:P,preloadModule:b,requestFormReset:g,unstable_batchedUpdates:E,useFormState:T,useFormStatus:v,version:y}=r,A=f({__proto__:null,__DOM_INTERNALS_DO_NOT_USE_OR_WARN_USERS_THEY_CANNOT_UPGRADE:d,createPortal:p,default:c,flushSync:S,preconnect:h,prefetchDNS:R,preinit:O,preinitModule:N,preload:P,preloadModule:b,requestFormReset:g,unstable_batchedUpdates:E,useFormState:T,useFormStatus:v,version:y},[u]);export{c as R,A as _};
@@ -0,0 +1 @@
1
+ import{g as _}from"./__mfe_internal__rimori_mf_2_scenario_mf_2_host__loadShare__react__loadShare__.js_commonjs-proxy.js";import{_ as r}from"./__mfe_internal__rimori_mf_2_scenario_mf_2_host__loadShare__react_mf_2_dom__loadShare__.js.js";const m=_(r);export{m as r};
@@ -0,0 +1 @@
1
+ import{_ as t}from"./preload-helper.js";const i=await t(()=>import("./remoteEntry.js"),[]);await i.init();