@rimori/playwright-testing 0.3.21 → 0.3.22

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 +36 -4
  2. package/dist/core/RimoriTestEnvironment.js +160 -11
  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;
@@ -220,10 +232,13 @@ export declare class RimoriTestEnvironment {
220
232
  triggerOnSidePanelAction: (payload: SidebarAction) => Promise<void>;
221
233
  /**
222
234
  * Triggers a main panel action event as the parent application would.
223
- * This simulates how rimori-main's MainPluginHandler uses EventBus.respond to respond
224
- * to plugin's 'action.requestMain' events. When the plugin calls onMainPanelAction(),
225
- * it emits '{pluginId}.action.requestMain' and listens for the response.
226
- * This method sets up a responder that automatically responds when the plugin emits this event.
235
+ * This simulates how rimori-main sends the MainPanelAction back to the plugin after
236
+ * the plugin calls onMainPanelAction() and emits '{pluginId}.action.requestMain'.
237
+ *
238
+ * We listen for that outbound emit and respond by injecting a fresh event with
239
+ * sender='rimori-main'. This avoids the EventBus per-listener blacklist that would
240
+ * block a {type:'response'} message carrying the same eventId as the original emit.
241
+ *
227
242
  * @param payload - The main panel action payload containing plugin_id, action_key, and action parameters
228
243
  */
229
244
  triggerOnMainPanelAction: (payload: MainPanelAction) => Promise<void>;
@@ -463,6 +478,23 @@ export declare class RimoriTestEnvironment {
463
478
  };
464
479
  readonly navigation: {
465
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;
466
498
  };
467
499
  }
468
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 = {};
@@ -175,25 +216,27 @@ class RimoriTestEnvironment {
175
216
  },
176
217
  /**
177
218
  * Triggers a main panel action event as the parent application would.
178
- * This simulates how rimori-main's MainPluginHandler uses EventBus.respond to respond
179
- * to plugin's 'action.requestMain' events. When the plugin calls onMainPanelAction(),
180
- * it emits '{pluginId}.action.requestMain' and listens for the response.
181
- * This method sets up a responder that automatically responds when the plugin emits this event.
219
+ * This simulates how rimori-main sends the MainPanelAction back to the plugin after
220
+ * the plugin calls onMainPanelAction() and emits '{pluginId}.action.requestMain'.
221
+ *
222
+ * We listen for that outbound emit and respond by injecting a fresh event with
223
+ * sender='rimori-main'. This avoids the EventBus per-listener blacklist that would
224
+ * block a {type:'response'} message carrying the same eventId as the original emit.
225
+ *
182
226
  * @param payload - The main panel action payload containing plugin_id, action_key, and action parameters
183
227
  */
184
228
  triggerOnMainPanelAction: async (payload) => {
185
229
  if (!this.messageChannelSimulator) {
186
230
  throw new Error('MessageChannelSimulator not initialized. Call setup() first.');
187
231
  }
188
- // Listen for when the plugin emits 'action.requestMain' (which becomes '{pluginId}.action.requestMain')
189
- // and respond with the MainPanelAction payload, matching rimori-main's EventBus.respond behavior
190
232
  const topic = `${this.pluginId}.action.requestMain`;
191
- // Store the payload in a closure so we can respond with it
192
233
  const actionPayload = payload;
193
- // Register a persistent auto-responder (not respondOnce) because the plugin may
194
- // emit this event multiple times during its lifecycle. Using respondOnce would
195
- // only respond to the first request and ignore subsequent ones.
196
- this.messageChannelSimulator.respond(topic, actionPayload);
234
+ // When the plugin emits action.requestMain, immediately emit back the action data
235
+ // as a fresh event from 'rimori-main' (different sender bypasses the EventBus blacklist).
236
+ const off = this.messageChannelSimulator.on(topic, async () => {
237
+ await this.messageChannelSimulator.emit(topic, actionPayload, 'rimori-main');
238
+ off();
239
+ });
197
240
  },
198
241
  };
199
242
  this.ai = {
@@ -554,15 +597,121 @@ class RimoriTestEnvironment {
554
597
  };
555
598
  this.navigation = {
556
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
+ },
557
623
  };
558
624
  this.page = options.page;
559
625
  this.pluginId = options.pluginId;
626
+ this.pluginUrl = options.pluginUrl;
560
627
  this.rimoriInfo = this.getRimoriInfo(options);
561
628
  // Initialize settings state manager
562
629
  this.settingsManager = new SettingsStateManager_1.SettingsStateManager(options.settings || null, options.pluginId, this.rimoriInfo.guild.id);
563
630
  this.interceptRoutes(options.pluginUrl);
564
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
+ }
565
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
+ });
566
715
  // Intercept all /locales requests and fetch from the dev server
567
716
  this.page.route(`${pluginUrl}/locales/**`, async (route) => {
568
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.35"}}})),_=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();