remote-components 0.4.8 → 0.4.10

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 (94) hide show
  1. package/dist/{chunk-JZRA6DPE.js → chunk-3PR3SWYZ.js} +7 -54
  2. package/dist/chunk-3PR3SWYZ.js.map +1 -0
  3. package/dist/{chunk-I7VKDF3E.cjs → chunk-6PZEDIAK.cjs} +5 -52
  4. package/dist/chunk-6PZEDIAK.cjs.map +1 -0
  5. package/dist/{chunk-FF4SXSSG.js → chunk-GR5FN73U.js} +3 -3
  6. package/dist/{chunk-EW5O3Q24.cjs → chunk-HZP4FWPG.cjs} +23 -23
  7. package/dist/{chunk-EW5O3Q24.cjs.map → chunk-HZP4FWPG.cjs.map} +1 -1
  8. package/dist/{chunk-WGSS7TJP.js → chunk-M6ACTSVB.js} +2 -2
  9. package/dist/{chunk-VJO4PTWG.js → chunk-N6AJM72A.js} +6 -6
  10. package/dist/chunk-N6AJM72A.js.map +1 -0
  11. package/dist/{chunk-O4ED3BUP.cjs → chunk-OSSMJQFE.cjs} +19 -19
  12. package/dist/{chunk-YJJFRORQ.cjs → chunk-PCHSF5LH.cjs} +315 -74
  13. package/dist/chunk-PCHSF5LH.cjs.map +1 -0
  14. package/dist/{chunk-KCUEMMYL.js → chunk-RHRDUJ3K.js} +3 -3
  15. package/dist/{chunk-KAFPXSRI.cjs → chunk-RZ224NSH.cjs} +18 -18
  16. package/dist/{chunk-STMO56U2.js → chunk-VFK4HGZT.js} +264 -23
  17. package/dist/chunk-VFK4HGZT.js.map +1 -0
  18. package/dist/{chunk-4MLJE6UP.cjs → chunk-XWRB6CEA.cjs} +3 -3
  19. package/dist/config/nextjs.cjs +5 -5
  20. package/dist/config/nextjs.cjs.map +1 -1
  21. package/dist/config/nextjs.js +1 -1
  22. package/dist/config/nextjs.js.map +1 -1
  23. package/dist/host/html.cjs +19 -19
  24. package/dist/host/html.js +7 -7
  25. package/dist/host/nextjs/app/client-only.cjs +11 -11
  26. package/dist/host/nextjs/app/client-only.js +6 -6
  27. package/dist/host/nextjs/pages/client-only.cjs +42 -24
  28. package/dist/host/nextjs/pages/client-only.cjs.map +1 -1
  29. package/dist/host/nextjs/pages/client-only.d.ts +1 -1
  30. package/dist/host/nextjs/pages/client-only.js +42 -24
  31. package/dist/host/nextjs/pages/client-only.js.map +1 -1
  32. package/dist/host/react.cjs +7 -7
  33. package/dist/host/react.js +6 -6
  34. package/dist/internal/config/webpack/apply-shared-modules.cjs +8 -0
  35. package/dist/internal/config/webpack/apply-shared-modules.cjs.map +1 -1
  36. package/dist/internal/config/webpack/apply-shared-modules.d.ts +6 -1
  37. package/dist/internal/config/webpack/apply-shared-modules.js +10 -0
  38. package/dist/internal/config/webpack/apply-shared-modules.js.map +1 -1
  39. package/dist/internal/config/webpack/provider-adapter.cjs +85 -0
  40. package/dist/internal/config/webpack/provider-adapter.cjs.map +1 -0
  41. package/dist/internal/config/webpack/provider-adapter.d.ts +7 -0
  42. package/dist/internal/config/webpack/provider-adapter.js +64 -0
  43. package/dist/internal/config/webpack/provider-adapter.js.map +1 -0
  44. package/dist/internal/config/webpack/shared-module-resolver.cjs +73 -0
  45. package/dist/internal/config/webpack/shared-module-resolver.cjs.map +1 -0
  46. package/dist/internal/config/webpack/shared-module-resolver.d.ts +35 -0
  47. package/dist/internal/config/webpack/shared-module-resolver.js +50 -0
  48. package/dist/internal/config/webpack/shared-module-resolver.js.map +1 -0
  49. package/dist/internal/host/shared/provider.cjs +188 -0
  50. package/dist/internal/host/shared/provider.cjs.map +1 -0
  51. package/dist/internal/host/shared/provider.d.ts +71 -0
  52. package/dist/internal/host/shared/provider.js +161 -0
  53. package/dist/internal/host/shared/provider.js.map +1 -0
  54. package/dist/internal/host/shared/shared-broker.cjs +0 -30
  55. package/dist/internal/host/shared/shared-broker.cjs.map +1 -1
  56. package/dist/internal/host/shared/shared-broker.d.ts +1 -7
  57. package/dist/internal/host/shared/shared-broker.js +0 -29
  58. package/dist/internal/host/shared/shared-broker.js.map +1 -1
  59. package/dist/internal/host/shared/shared-module-resolver.cjs +7 -29
  60. package/dist/internal/host/shared/shared-module-resolver.cjs.map +1 -1
  61. package/dist/internal/host/shared/shared-module-resolver.d.ts +13 -34
  62. package/dist/internal/host/shared/shared-module-resolver.js +5 -29
  63. package/dist/internal/host/shared/shared-module-resolver.js.map +1 -1
  64. package/dist/internal/runtime/loaders/component-loader.cjs +3 -2
  65. package/dist/internal/runtime/loaders/component-loader.cjs.map +1 -1
  66. package/dist/internal/runtime/loaders/component-loader.js +2 -4
  67. package/dist/internal/runtime/loaders/component-loader.js.map +1 -1
  68. package/dist/internal/runtime/turbopack/shared-modules.cjs +13 -19
  69. package/dist/internal/runtime/turbopack/shared-modules.cjs.map +1 -1
  70. package/dist/internal/runtime/turbopack/shared-modules.js +17 -21
  71. package/dist/internal/runtime/turbopack/shared-modules.js.map +1 -1
  72. package/dist/{turbopack-XDIGB4GI.js → turbopack-6BSS3SYN.js} +5 -5
  73. package/dist/turbopack-6BSS3SYN.js.map +1 -0
  74. package/dist/{turbopack-RXVSOWF7.cjs → turbopack-UMJ7SLJL.cjs} +12 -12
  75. package/dist/{turbopack-RXVSOWF7.cjs.map → turbopack-UMJ7SLJL.cjs.map} +1 -1
  76. package/dist/{webpack-3QXPAZN4.js → webpack-4QYGIVE6.js} +9 -7
  77. package/dist/webpack-4QYGIVE6.js.map +1 -0
  78. package/dist/{webpack-HKD7RZRE.cjs → webpack-65BVWX2U.cjs} +13 -11
  79. package/dist/webpack-65BVWX2U.cjs.map +1 -0
  80. package/package.json +1 -1
  81. package/dist/chunk-I7VKDF3E.cjs.map +0 -1
  82. package/dist/chunk-JZRA6DPE.js.map +0 -1
  83. package/dist/chunk-STMO56U2.js.map +0 -1
  84. package/dist/chunk-VJO4PTWG.js.map +0 -1
  85. package/dist/chunk-YJJFRORQ.cjs.map +0 -1
  86. package/dist/turbopack-XDIGB4GI.js.map +0 -1
  87. package/dist/webpack-3QXPAZN4.js.map +0 -1
  88. package/dist/webpack-HKD7RZRE.cjs.map +0 -1
  89. /package/dist/{chunk-FF4SXSSG.js.map → chunk-GR5FN73U.js.map} +0 -0
  90. /package/dist/{chunk-WGSS7TJP.js.map → chunk-M6ACTSVB.js.map} +0 -0
  91. /package/dist/{chunk-O4ED3BUP.cjs.map → chunk-OSSMJQFE.cjs.map} +0 -0
  92. /package/dist/{chunk-KCUEMMYL.js.map → chunk-RHRDUJ3K.js.map} +0 -0
  93. /package/dist/{chunk-KAFPXSRI.cjs.map → chunk-RZ224NSH.cjs.map} +0 -0
  94. /package/dist/{chunk-4MLJE6UP.cjs.map → chunk-XWRB6CEA.cjs.map} +0 -0
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/host/nextjs/pages-client.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport type { ConsumeRemoteComponentConfig } from '#internal/host/shared/config';\nimport type {\n OnRequestHook,\n OnResponseHook,\n} from '#internal/host/shared/fetch-interceptors';\nimport type { ResolveClientUrl } from '#internal/runtime/url/resolve-client-url';\nimport { shared } from '#remote-components/host/defaults/pages';\n\n// patch react/jsx-runtime to support the remote-component custom element\ndeclare module 'react/jsx-runtime' {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n export namespace JSX {\n interface IntrinsicElements {\n 'remote-component': {\n src?: string;\n ref?: React.Ref<HTMLElement>;\n children: React.ReactNode;\n };\n }\n }\n}\n\n// Extend HTMLElement to include onRequest/onResponse/resolveClientUrl properties from the custom element\ninterface RemoteComponentElement extends HTMLElement {\n onRequest?: OnRequestHook;\n onResponse?: OnResponseHook;\n resolveClientUrl?: ResolveClientUrl;\n}\n\n/**\n * Props for the Pages Router client-side remote component wrapper.\n *\n * Extends {@link ConsumeRemoteComponentConfig}. The `src` prop is required since\n * the client always needs a source URL to load from.\n */\nexport interface ConsumeRemoteComponentProps\n extends ConsumeRemoteComponentConfig {\n /** The source URL of the remote component. Required for client-side loading. */\n src: string;\n /** Loading fallback content displayed while the remote component is being fetched. */\n children?: React.ReactNode;\n}\n\nexport function ConsumeRemoteComponent({\n src,\n children,\n onBeforeLoad,\n onChange,\n onError,\n onLoad,\n onRequest,\n onResponse,\n resolveClientUrl,\n}: ConsumeRemoteComponentProps) {\n const elementRef = useRef<RemoteComponentElement>(null);\n\n useEffect(() => {\n const self = globalThis as typeof globalThis & {\n __remote_component_shared__?: Record<string, () => Promise<unknown>>;\n };\n // eslint-disable-next-line camelcase\n self.__remote_component_shared__ = shared;\n import('remote-components/html/host');\n }, []);\n\n useEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n\n // Set onRequest/onResponse/resolveClientUrl properties on the element before it loads\n if (onRequest) {\n element.onRequest = onRequest;\n }\n if (onResponse) {\n element.onResponse = onResponse;\n }\n if (resolveClientUrl !== undefined) {\n element.resolveClientUrl = resolveClientUrl;\n }\n\n // Set up event listeners for lifecycle hooks\n const handleBeforeLoad = (e: Event) => {\n const customEvent = e as CustomEvent & { src?: string };\n onBeforeLoad?.(customEvent.src ?? src);\n };\n const handleLoad = (e: Event) => {\n const customEvent = e as CustomEvent & { src?: string };\n onLoad?.(customEvent.src ?? src);\n };\n const handleError = (e: Event) => {\n const customEvent = e as CustomEvent & { error?: unknown };\n onError?.(customEvent.error);\n };\n const handleChange = (e: Event) => {\n const customEvent = e as CustomEvent & {\n previousSrc?: string | null;\n nextSrc?: string | null;\n previousName?: string;\n nextName?: string;\n };\n onChange?.({\n previousSrc: customEvent.previousSrc ?? null,\n nextSrc: customEvent.nextSrc ?? null,\n previousName: customEvent.previousName,\n nextName: customEvent.nextName,\n });\n };\n\n if (onBeforeLoad) element.addEventListener('beforeload', handleBeforeLoad);\n if (onLoad) element.addEventListener('load', handleLoad);\n if (onError) element.addEventListener('error', handleError);\n if (onChange) element.addEventListener('change', handleChange);\n\n return () => {\n if (onBeforeLoad)\n element.removeEventListener('beforeload', handleBeforeLoad);\n if (onLoad) element.removeEventListener('load', handleLoad);\n if (onError) element.removeEventListener('error', handleError);\n if (onChange) element.removeEventListener('change', handleChange);\n };\n }, [\n src,\n onBeforeLoad,\n onChange,\n onError,\n onLoad,\n onRequest,\n onResponse,\n resolveClientUrl,\n ]);\n\n return (\n <remote-component ref={elementRef} src={src}>\n {children}\n </remote-component>\n );\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAqII;AArIJ,mBAAkC;AAOlC,mBAAuB;AAqChB,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAgC;AAC9B,QAAM,iBAAa,qBAA+B,IAAI;AAEtD,8BAAU,MAAM;AACd,UAAM,OAAO;AAIb,SAAK,8BAA8B;AACnC,WAAO,6BAA6B;AAAA,EACtC,GAAG,CAAC,CAAC;AAEL,8BAAU,MAAM;AACd,UAAM,UAAU,WAAW;AAC3B,QAAI,CAAC;AAAS;AAGd,QAAI,WAAW;AACb,cAAQ,YAAY;AAAA,IACtB;AACA,QAAI,YAAY;AACd,cAAQ,aAAa;AAAA,IACvB;AACA,QAAI,qBAAqB,QAAW;AAClC,cAAQ,mBAAmB;AAAA,IAC7B;AAGA,UAAM,mBAAmB,CAAC,MAAa;AACrC,YAAM,cAAc;AACpB,qBAAe,YAAY,OAAO,GAAG;AAAA,IACvC;AACA,UAAM,aAAa,CAAC,MAAa;AAC/B,YAAM,cAAc;AACpB,eAAS,YAAY,OAAO,GAAG;AAAA,IACjC;AACA,UAAM,cAAc,CAAC,MAAa;AAChC,YAAM,cAAc;AACpB,gBAAU,YAAY,KAAK;AAAA,IAC7B;AACA,UAAM,eAAe,CAAC,MAAa;AACjC,YAAM,cAAc;AAMpB,iBAAW;AAAA,QACT,aAAa,YAAY,eAAe;AAAA,QACxC,SAAS,YAAY,WAAW;AAAA,QAChC,cAAc,YAAY;AAAA,QAC1B,UAAU,YAAY;AAAA,MACxB,CAAC;AAAA,IACH;AAEA,QAAI;AAAc,cAAQ,iBAAiB,cAAc,gBAAgB;AACzE,QAAI;AAAQ,cAAQ,iBAAiB,QAAQ,UAAU;AACvD,QAAI;AAAS,cAAQ,iBAAiB,SAAS,WAAW;AAC1D,QAAI;AAAU,cAAQ,iBAAiB,UAAU,YAAY;AAE7D,WAAO,MAAM;AACX,UAAI;AACF,gBAAQ,oBAAoB,cAAc,gBAAgB;AAC5D,UAAI;AAAQ,gBAAQ,oBAAoB,QAAQ,UAAU;AAC1D,UAAI;AAAS,gBAAQ,oBAAoB,SAAS,WAAW;AAC7D,UAAI;AAAU,gBAAQ,oBAAoB,UAAU,YAAY;AAAA,IAClE;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE,4CAAC,sBAAiB,KAAK,YAAY,KAChC,UACH;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/host/nextjs/pages-client.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport type { ConsumeRemoteComponentConfig } from '#internal/host/shared/config';\nimport type {\n OnRequestHook,\n OnResponseHook,\n} from '#internal/host/shared/fetch-interceptors';\nimport type { SharedModuleFactory } from '#internal/host/shared/shared-broker';\nimport type { ResolveClientUrl } from '#internal/runtime/url/resolve-client-url';\nimport { shared } from '#remote-components/host/defaults/pages';\n\n// patch react/jsx-runtime to support the remote-component custom element\ndeclare module 'react/jsx-runtime' {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n export namespace JSX {\n interface IntrinsicElements {\n 'remote-component': {\n src?: string;\n ref?: React.Ref<HTMLElement>;\n children: React.ReactNode;\n };\n }\n }\n}\n\n// Extend HTMLElement to include onRequest/onResponse/resolveClientUrl properties from the custom element\ninterface RemoteComponentElement extends HTMLElement {\n onRequest?: OnRequestHook;\n onResponse?: OnResponseHook;\n resolveClientUrl?: ResolveClientUrl;\n}\n\ntype SharedModules = Record<string, SharedModuleFactory>;\n\nfunction isPromiseLikeShared(\n value: ConsumeRemoteComponentProps['shared'],\n): value is Promise<SharedModules> {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'then' in value &&\n typeof (value as Promise<SharedModules>).then === 'function'\n );\n}\n\n/**\n * Props for the Pages Router client-side remote component wrapper.\n *\n * Extends {@link ConsumeRemoteComponentConfig}. The `src` prop is required since\n * the client always needs a source URL to load from.\n */\nexport interface ConsumeRemoteComponentProps\n extends ConsumeRemoteComponentConfig {\n /** The source URL of the remote component. Required for client-side loading. */\n src: string;\n /** Loading fallback content displayed while the remote component is being fetched. */\n children?: React.ReactNode;\n}\n\nexport function ConsumeRemoteComponent({\n src,\n children,\n onBeforeLoad,\n onChange,\n onError,\n onLoad,\n onRequest,\n onResponse,\n resolveClientUrl,\n shared: sharedProp,\n}: ConsumeRemoteComponentProps) {\n const elementRef = useRef<RemoteComponentElement>(null);\n const onErrorRef = useRef(onError);\n onErrorRef.current = onError;\n\n useEffect(() => {\n let cancelled = false;\n const self = globalThis as typeof globalThis & {\n __remote_component_shared__?: SharedModules;\n };\n\n const syncElement = async () => {\n try {\n const userShared = isPromiseLikeShared(sharedProp)\n ? await sharedProp\n : sharedProp;\n if (cancelled) return;\n\n // eslint-disable-next-line camelcase\n self.__remote_component_shared__ = {\n ...shared,\n ...userShared,\n };\n await import('remote-components/host/html');\n if (cancelled) return;\n\n const element = elementRef.current;\n if (!element) return;\n\n // Assign instance properties before setting src; the custom element\n // starts loading as soon as the src attribute changes.\n element.onRequest = onRequest;\n element.onResponse = onResponse;\n element.resolveClientUrl = resolveClientUrl;\n\n if (element.getAttribute('src') !== src) {\n element.setAttribute('src', src);\n }\n } catch (error) {\n if (!cancelled) {\n onErrorRef.current?.(error);\n }\n }\n };\n\n void syncElement();\n\n return () => {\n cancelled = true;\n };\n }, [src, onRequest, onResponse, resolveClientUrl, sharedProp]);\n\n useEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n\n // Set up event listeners for lifecycle hooks\n const handleBeforeLoad = (e: Event) => {\n const customEvent = e as CustomEvent & { src?: string };\n onBeforeLoad?.(customEvent.src ?? src);\n };\n const handleLoad = (e: Event) => {\n const customEvent = e as CustomEvent & { src?: string };\n onLoad?.(customEvent.src ?? src);\n };\n const handleError = (e: Event) => {\n const customEvent = e as CustomEvent & { error?: unknown };\n onError?.(customEvent.error);\n };\n const handleChange = (e: Event) => {\n const customEvent = e as CustomEvent & {\n previousSrc?: string | null;\n nextSrc?: string | null;\n previousName?: string;\n nextName?: string;\n };\n onChange?.({\n previousSrc: customEvent.previousSrc ?? null,\n nextSrc: customEvent.nextSrc ?? null,\n previousName: customEvent.previousName,\n nextName: customEvent.nextName,\n });\n };\n\n if (onBeforeLoad) element.addEventListener('beforeload', handleBeforeLoad);\n if (onLoad) element.addEventListener('load', handleLoad);\n if (onError) element.addEventListener('error', handleError);\n if (onChange) element.addEventListener('change', handleChange);\n\n return () => {\n if (onBeforeLoad)\n element.removeEventListener('beforeload', handleBeforeLoad);\n if (onLoad) element.removeEventListener('load', handleLoad);\n if (onError) element.removeEventListener('error', handleError);\n if (onChange) element.removeEventListener('change', handleChange);\n };\n }, [src, onBeforeLoad, onChange, onError, onLoad]);\n\n return <remote-component ref={elementRef}>{children}</remote-component>;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAuKS;AAvKT,mBAAkC;AAQlC,mBAAuB;AAyBvB,SAAS,oBACP,OACiC;AACjC,SACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,OAAQ,MAAiC,SAAS;AAEtD;AAgBO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AACV,GAAgC;AAC9B,QAAM,iBAAa,qBAA+B,IAAI;AACtD,QAAM,iBAAa,qBAAO,OAAO;AACjC,aAAW,UAAU;AAErB,8BAAU,MAAM;AACd,QAAI,YAAY;AAChB,UAAM,OAAO;AAIb,UAAM,cAAc,YAAY;AAC9B,UAAI;AACF,cAAM,aAAa,oBAAoB,UAAU,IAC7C,MAAM,aACN;AACJ,YAAI;AAAW;AAGf,aAAK,8BAA8B;AAAA,UACjC,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AACA,cAAM,OAAO,6BAA6B;AAC1C,YAAI;AAAW;AAEf,cAAM,UAAU,WAAW;AAC3B,YAAI,CAAC;AAAS;AAId,gBAAQ,YAAY;AACpB,gBAAQ,aAAa;AACrB,gBAAQ,mBAAmB;AAE3B,YAAI,QAAQ,aAAa,KAAK,MAAM,KAAK;AACvC,kBAAQ,aAAa,OAAO,GAAG;AAAA,QACjC;AAAA,MACF,SAAS,OAAP;AACA,YAAI,CAAC,WAAW;AACd,qBAAW,UAAU,KAAK;AAAA,QAC5B;AAAA,MACF;AAAA,IACF;AAEA,SAAK,YAAY;AAEjB,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,KAAK,WAAW,YAAY,kBAAkB,UAAU,CAAC;AAE7D,8BAAU,MAAM;AACd,UAAM,UAAU,WAAW;AAC3B,QAAI,CAAC;AAAS;AAGd,UAAM,mBAAmB,CAAC,MAAa;AACrC,YAAM,cAAc;AACpB,qBAAe,YAAY,OAAO,GAAG;AAAA,IACvC;AACA,UAAM,aAAa,CAAC,MAAa;AAC/B,YAAM,cAAc;AACpB,eAAS,YAAY,OAAO,GAAG;AAAA,IACjC;AACA,UAAM,cAAc,CAAC,MAAa;AAChC,YAAM,cAAc;AACpB,gBAAU,YAAY,KAAK;AAAA,IAC7B;AACA,UAAM,eAAe,CAAC,MAAa;AACjC,YAAM,cAAc;AAMpB,iBAAW;AAAA,QACT,aAAa,YAAY,eAAe;AAAA,QACxC,SAAS,YAAY,WAAW;AAAA,QAChC,cAAc,YAAY;AAAA,QAC1B,UAAU,YAAY;AAAA,MACxB,CAAC;AAAA,IACH;AAEA,QAAI;AAAc,cAAQ,iBAAiB,cAAc,gBAAgB;AACzE,QAAI;AAAQ,cAAQ,iBAAiB,QAAQ,UAAU;AACvD,QAAI;AAAS,cAAQ,iBAAiB,SAAS,WAAW;AAC1D,QAAI;AAAU,cAAQ,iBAAiB,UAAU,YAAY;AAE7D,WAAO,MAAM;AACX,UAAI;AACF,gBAAQ,oBAAoB,cAAc,gBAAgB;AAC5D,UAAI;AAAQ,gBAAQ,oBAAoB,QAAQ,UAAU;AAC1D,UAAI;AAAS,gBAAQ,oBAAoB,SAAS,WAAW;AAC7D,UAAI;AAAU,gBAAQ,oBAAoB,UAAU,YAAY;AAAA,IAClE;AAAA,EACF,GAAG,CAAC,KAAK,cAAc,UAAU,SAAS,MAAM,CAAC;AAEjD,SAAO,4CAAC,sBAAiB,KAAK,YAAa,UAAS;AACtD;","names":[]}
@@ -26,6 +26,6 @@ interface ConsumeRemoteComponentProps extends ConsumeRemoteComponentConfig {
26
26
  /** Loading fallback content displayed while the remote component is being fetched. */
27
27
  children?: React.ReactNode;
28
28
  }
29
- declare function ConsumeRemoteComponent({ src, children, onBeforeLoad, onChange, onError, onLoad, onRequest, onResponse, resolveClientUrl, }: ConsumeRemoteComponentProps): react_jsx_runtime.JSX.Element;
29
+ declare function ConsumeRemoteComponent({ src, children, onBeforeLoad, onChange, onError, onLoad, onRequest, onResponse, resolveClientUrl, shared: sharedProp, }: ConsumeRemoteComponentProps): react_jsx_runtime.JSX.Element;
30
30
 
31
31
  export { ConsumeRemoteComponent, ConsumeRemoteComponentProps };
@@ -1,6 +1,9 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
2
  import { useEffect, useRef } from "react";
3
3
  import { shared } from "#remote-components/host/defaults/pages";
4
+ function isPromiseLikeShared(value) {
5
+ return typeof value === "object" && value !== null && "then" in value && typeof value.then === "function";
6
+ }
4
7
  function ConsumeRemoteComponent({
5
8
  src,
6
9
  children,
@@ -10,27 +13,51 @@ function ConsumeRemoteComponent({
10
13
  onLoad,
11
14
  onRequest,
12
15
  onResponse,
13
- resolveClientUrl
16
+ resolveClientUrl,
17
+ shared: sharedProp
14
18
  }) {
15
19
  const elementRef = useRef(null);
20
+ const onErrorRef = useRef(onError);
21
+ onErrorRef.current = onError;
16
22
  useEffect(() => {
23
+ let cancelled = false;
17
24
  const self = globalThis;
18
- self.__remote_component_shared__ = shared;
19
- import("remote-components/html/host");
20
- }, []);
25
+ const syncElement = async () => {
26
+ try {
27
+ const userShared = isPromiseLikeShared(sharedProp) ? await sharedProp : sharedProp;
28
+ if (cancelled)
29
+ return;
30
+ self.__remote_component_shared__ = {
31
+ ...shared,
32
+ ...userShared
33
+ };
34
+ await import("remote-components/host/html");
35
+ if (cancelled)
36
+ return;
37
+ const element = elementRef.current;
38
+ if (!element)
39
+ return;
40
+ element.onRequest = onRequest;
41
+ element.onResponse = onResponse;
42
+ element.resolveClientUrl = resolveClientUrl;
43
+ if (element.getAttribute("src") !== src) {
44
+ element.setAttribute("src", src);
45
+ }
46
+ } catch (error) {
47
+ if (!cancelled) {
48
+ onErrorRef.current?.(error);
49
+ }
50
+ }
51
+ };
52
+ void syncElement();
53
+ return () => {
54
+ cancelled = true;
55
+ };
56
+ }, [src, onRequest, onResponse, resolveClientUrl, sharedProp]);
21
57
  useEffect(() => {
22
58
  const element = elementRef.current;
23
59
  if (!element)
24
60
  return;
25
- if (onRequest) {
26
- element.onRequest = onRequest;
27
- }
28
- if (onResponse) {
29
- element.onResponse = onResponse;
30
- }
31
- if (resolveClientUrl !== void 0) {
32
- element.resolveClientUrl = resolveClientUrl;
33
- }
34
61
  const handleBeforeLoad = (e) => {
35
62
  const customEvent = e;
36
63
  onBeforeLoad?.(customEvent.src ?? src);
@@ -70,17 +97,8 @@ function ConsumeRemoteComponent({
70
97
  if (onChange)
71
98
  element.removeEventListener("change", handleChange);
72
99
  };
73
- }, [
74
- src,
75
- onBeforeLoad,
76
- onChange,
77
- onError,
78
- onLoad,
79
- onRequest,
80
- onResponse,
81
- resolveClientUrl
82
- ]);
83
- return /* @__PURE__ */ jsx("remote-component", { ref: elementRef, src, children });
100
+ }, [src, onBeforeLoad, onChange, onError, onLoad]);
101
+ return /* @__PURE__ */ jsx("remote-component", { ref: elementRef, children });
84
102
  }
85
103
  export {
86
104
  ConsumeRemoteComponent
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/host/nextjs/pages-client.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport type { ConsumeRemoteComponentConfig } from '#internal/host/shared/config';\nimport type {\n OnRequestHook,\n OnResponseHook,\n} from '#internal/host/shared/fetch-interceptors';\nimport type { ResolveClientUrl } from '#internal/runtime/url/resolve-client-url';\nimport { shared } from '#remote-components/host/defaults/pages';\n\n// patch react/jsx-runtime to support the remote-component custom element\ndeclare module 'react/jsx-runtime' {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n export namespace JSX {\n interface IntrinsicElements {\n 'remote-component': {\n src?: string;\n ref?: React.Ref<HTMLElement>;\n children: React.ReactNode;\n };\n }\n }\n}\n\n// Extend HTMLElement to include onRequest/onResponse/resolveClientUrl properties from the custom element\ninterface RemoteComponentElement extends HTMLElement {\n onRequest?: OnRequestHook;\n onResponse?: OnResponseHook;\n resolveClientUrl?: ResolveClientUrl;\n}\n\n/**\n * Props for the Pages Router client-side remote component wrapper.\n *\n * Extends {@link ConsumeRemoteComponentConfig}. The `src` prop is required since\n * the client always needs a source URL to load from.\n */\nexport interface ConsumeRemoteComponentProps\n extends ConsumeRemoteComponentConfig {\n /** The source URL of the remote component. Required for client-side loading. */\n src: string;\n /** Loading fallback content displayed while the remote component is being fetched. */\n children?: React.ReactNode;\n}\n\nexport function ConsumeRemoteComponent({\n src,\n children,\n onBeforeLoad,\n onChange,\n onError,\n onLoad,\n onRequest,\n onResponse,\n resolveClientUrl,\n}: ConsumeRemoteComponentProps) {\n const elementRef = useRef<RemoteComponentElement>(null);\n\n useEffect(() => {\n const self = globalThis as typeof globalThis & {\n __remote_component_shared__?: Record<string, () => Promise<unknown>>;\n };\n // eslint-disable-next-line camelcase\n self.__remote_component_shared__ = shared;\n import('remote-components/html/host');\n }, []);\n\n useEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n\n // Set onRequest/onResponse/resolveClientUrl properties on the element before it loads\n if (onRequest) {\n element.onRequest = onRequest;\n }\n if (onResponse) {\n element.onResponse = onResponse;\n }\n if (resolveClientUrl !== undefined) {\n element.resolveClientUrl = resolveClientUrl;\n }\n\n // Set up event listeners for lifecycle hooks\n const handleBeforeLoad = (e: Event) => {\n const customEvent = e as CustomEvent & { src?: string };\n onBeforeLoad?.(customEvent.src ?? src);\n };\n const handleLoad = (e: Event) => {\n const customEvent = e as CustomEvent & { src?: string };\n onLoad?.(customEvent.src ?? src);\n };\n const handleError = (e: Event) => {\n const customEvent = e as CustomEvent & { error?: unknown };\n onError?.(customEvent.error);\n };\n const handleChange = (e: Event) => {\n const customEvent = e as CustomEvent & {\n previousSrc?: string | null;\n nextSrc?: string | null;\n previousName?: string;\n nextName?: string;\n };\n onChange?.({\n previousSrc: customEvent.previousSrc ?? null,\n nextSrc: customEvent.nextSrc ?? null,\n previousName: customEvent.previousName,\n nextName: customEvent.nextName,\n });\n };\n\n if (onBeforeLoad) element.addEventListener('beforeload', handleBeforeLoad);\n if (onLoad) element.addEventListener('load', handleLoad);\n if (onError) element.addEventListener('error', handleError);\n if (onChange) element.addEventListener('change', handleChange);\n\n return () => {\n if (onBeforeLoad)\n element.removeEventListener('beforeload', handleBeforeLoad);\n if (onLoad) element.removeEventListener('load', handleLoad);\n if (onError) element.removeEventListener('error', handleError);\n if (onChange) element.removeEventListener('change', handleChange);\n };\n }, [\n src,\n onBeforeLoad,\n onChange,\n onError,\n onLoad,\n onRequest,\n onResponse,\n resolveClientUrl,\n ]);\n\n return (\n <remote-component ref={elementRef} src={src}>\n {children}\n </remote-component>\n );\n}\n"],"mappings":"AAqII;AArIJ,SAAS,WAAW,cAAc;AAOlC,SAAS,cAAc;AAqChB,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAgC;AAC9B,QAAM,aAAa,OAA+B,IAAI;AAEtD,YAAU,MAAM;AACd,UAAM,OAAO;AAIb,SAAK,8BAA8B;AACnC,WAAO,6BAA6B;AAAA,EACtC,GAAG,CAAC,CAAC;AAEL,YAAU,MAAM;AACd,UAAM,UAAU,WAAW;AAC3B,QAAI,CAAC;AAAS;AAGd,QAAI,WAAW;AACb,cAAQ,YAAY;AAAA,IACtB;AACA,QAAI,YAAY;AACd,cAAQ,aAAa;AAAA,IACvB;AACA,QAAI,qBAAqB,QAAW;AAClC,cAAQ,mBAAmB;AAAA,IAC7B;AAGA,UAAM,mBAAmB,CAAC,MAAa;AACrC,YAAM,cAAc;AACpB,qBAAe,YAAY,OAAO,GAAG;AAAA,IACvC;AACA,UAAM,aAAa,CAAC,MAAa;AAC/B,YAAM,cAAc;AACpB,eAAS,YAAY,OAAO,GAAG;AAAA,IACjC;AACA,UAAM,cAAc,CAAC,MAAa;AAChC,YAAM,cAAc;AACpB,gBAAU,YAAY,KAAK;AAAA,IAC7B;AACA,UAAM,eAAe,CAAC,MAAa;AACjC,YAAM,cAAc;AAMpB,iBAAW;AAAA,QACT,aAAa,YAAY,eAAe;AAAA,QACxC,SAAS,YAAY,WAAW;AAAA,QAChC,cAAc,YAAY;AAAA,QAC1B,UAAU,YAAY;AAAA,MACxB,CAAC;AAAA,IACH;AAEA,QAAI;AAAc,cAAQ,iBAAiB,cAAc,gBAAgB;AACzE,QAAI;AAAQ,cAAQ,iBAAiB,QAAQ,UAAU;AACvD,QAAI;AAAS,cAAQ,iBAAiB,SAAS,WAAW;AAC1D,QAAI;AAAU,cAAQ,iBAAiB,UAAU,YAAY;AAE7D,WAAO,MAAM;AACX,UAAI;AACF,gBAAQ,oBAAoB,cAAc,gBAAgB;AAC5D,UAAI;AAAQ,gBAAQ,oBAAoB,QAAQ,UAAU;AAC1D,UAAI;AAAS,gBAAQ,oBAAoB,SAAS,WAAW;AAC7D,UAAI;AAAU,gBAAQ,oBAAoB,UAAU,YAAY;AAAA,IAClE;AAAA,EACF,GAAG;AAAA,IACD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE,oBAAC,sBAAiB,KAAK,YAAY,KAChC,UACH;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/host/nextjs/pages-client.tsx"],"sourcesContent":["import { useEffect, useRef } from 'react';\nimport type { ConsumeRemoteComponentConfig } from '#internal/host/shared/config';\nimport type {\n OnRequestHook,\n OnResponseHook,\n} from '#internal/host/shared/fetch-interceptors';\nimport type { SharedModuleFactory } from '#internal/host/shared/shared-broker';\nimport type { ResolveClientUrl } from '#internal/runtime/url/resolve-client-url';\nimport { shared } from '#remote-components/host/defaults/pages';\n\n// patch react/jsx-runtime to support the remote-component custom element\ndeclare module 'react/jsx-runtime' {\n // eslint-disable-next-line @typescript-eslint/no-namespace\n export namespace JSX {\n interface IntrinsicElements {\n 'remote-component': {\n src?: string;\n ref?: React.Ref<HTMLElement>;\n children: React.ReactNode;\n };\n }\n }\n}\n\n// Extend HTMLElement to include onRequest/onResponse/resolveClientUrl properties from the custom element\ninterface RemoteComponentElement extends HTMLElement {\n onRequest?: OnRequestHook;\n onResponse?: OnResponseHook;\n resolveClientUrl?: ResolveClientUrl;\n}\n\ntype SharedModules = Record<string, SharedModuleFactory>;\n\nfunction isPromiseLikeShared(\n value: ConsumeRemoteComponentProps['shared'],\n): value is Promise<SharedModules> {\n return (\n typeof value === 'object' &&\n value !== null &&\n 'then' in value &&\n typeof (value as Promise<SharedModules>).then === 'function'\n );\n}\n\n/**\n * Props for the Pages Router client-side remote component wrapper.\n *\n * Extends {@link ConsumeRemoteComponentConfig}. The `src` prop is required since\n * the client always needs a source URL to load from.\n */\nexport interface ConsumeRemoteComponentProps\n extends ConsumeRemoteComponentConfig {\n /** The source URL of the remote component. Required for client-side loading. */\n src: string;\n /** Loading fallback content displayed while the remote component is being fetched. */\n children?: React.ReactNode;\n}\n\nexport function ConsumeRemoteComponent({\n src,\n children,\n onBeforeLoad,\n onChange,\n onError,\n onLoad,\n onRequest,\n onResponse,\n resolveClientUrl,\n shared: sharedProp,\n}: ConsumeRemoteComponentProps) {\n const elementRef = useRef<RemoteComponentElement>(null);\n const onErrorRef = useRef(onError);\n onErrorRef.current = onError;\n\n useEffect(() => {\n let cancelled = false;\n const self = globalThis as typeof globalThis & {\n __remote_component_shared__?: SharedModules;\n };\n\n const syncElement = async () => {\n try {\n const userShared = isPromiseLikeShared(sharedProp)\n ? await sharedProp\n : sharedProp;\n if (cancelled) return;\n\n // eslint-disable-next-line camelcase\n self.__remote_component_shared__ = {\n ...shared,\n ...userShared,\n };\n await import('remote-components/host/html');\n if (cancelled) return;\n\n const element = elementRef.current;\n if (!element) return;\n\n // Assign instance properties before setting src; the custom element\n // starts loading as soon as the src attribute changes.\n element.onRequest = onRequest;\n element.onResponse = onResponse;\n element.resolveClientUrl = resolveClientUrl;\n\n if (element.getAttribute('src') !== src) {\n element.setAttribute('src', src);\n }\n } catch (error) {\n if (!cancelled) {\n onErrorRef.current?.(error);\n }\n }\n };\n\n void syncElement();\n\n return () => {\n cancelled = true;\n };\n }, [src, onRequest, onResponse, resolveClientUrl, sharedProp]);\n\n useEffect(() => {\n const element = elementRef.current;\n if (!element) return;\n\n // Set up event listeners for lifecycle hooks\n const handleBeforeLoad = (e: Event) => {\n const customEvent = e as CustomEvent & { src?: string };\n onBeforeLoad?.(customEvent.src ?? src);\n };\n const handleLoad = (e: Event) => {\n const customEvent = e as CustomEvent & { src?: string };\n onLoad?.(customEvent.src ?? src);\n };\n const handleError = (e: Event) => {\n const customEvent = e as CustomEvent & { error?: unknown };\n onError?.(customEvent.error);\n };\n const handleChange = (e: Event) => {\n const customEvent = e as CustomEvent & {\n previousSrc?: string | null;\n nextSrc?: string | null;\n previousName?: string;\n nextName?: string;\n };\n onChange?.({\n previousSrc: customEvent.previousSrc ?? null,\n nextSrc: customEvent.nextSrc ?? null,\n previousName: customEvent.previousName,\n nextName: customEvent.nextName,\n });\n };\n\n if (onBeforeLoad) element.addEventListener('beforeload', handleBeforeLoad);\n if (onLoad) element.addEventListener('load', handleLoad);\n if (onError) element.addEventListener('error', handleError);\n if (onChange) element.addEventListener('change', handleChange);\n\n return () => {\n if (onBeforeLoad)\n element.removeEventListener('beforeload', handleBeforeLoad);\n if (onLoad) element.removeEventListener('load', handleLoad);\n if (onError) element.removeEventListener('error', handleError);\n if (onChange) element.removeEventListener('change', handleChange);\n };\n }, [src, onBeforeLoad, onChange, onError, onLoad]);\n\n return <remote-component ref={elementRef}>{children}</remote-component>;\n}\n"],"mappings":"AAuKS;AAvKT,SAAS,WAAW,cAAc;AAQlC,SAAS,cAAc;AAyBvB,SAAS,oBACP,OACiC;AACjC,SACE,OAAO,UAAU,YACjB,UAAU,QACV,UAAU,SACV,OAAQ,MAAiC,SAAS;AAEtD;AAgBO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,QAAQ;AACV,GAAgC;AAC9B,QAAM,aAAa,OAA+B,IAAI;AACtD,QAAM,aAAa,OAAO,OAAO;AACjC,aAAW,UAAU;AAErB,YAAU,MAAM;AACd,QAAI,YAAY;AAChB,UAAM,OAAO;AAIb,UAAM,cAAc,YAAY;AAC9B,UAAI;AACF,cAAM,aAAa,oBAAoB,UAAU,IAC7C,MAAM,aACN;AACJ,YAAI;AAAW;AAGf,aAAK,8BAA8B;AAAA,UACjC,GAAG;AAAA,UACH,GAAG;AAAA,QACL;AACA,cAAM,OAAO,6BAA6B;AAC1C,YAAI;AAAW;AAEf,cAAM,UAAU,WAAW;AAC3B,YAAI,CAAC;AAAS;AAId,gBAAQ,YAAY;AACpB,gBAAQ,aAAa;AACrB,gBAAQ,mBAAmB;AAE3B,YAAI,QAAQ,aAAa,KAAK,MAAM,KAAK;AACvC,kBAAQ,aAAa,OAAO,GAAG;AAAA,QACjC;AAAA,MACF,SAAS,OAAP;AACA,YAAI,CAAC,WAAW;AACd,qBAAW,UAAU,KAAK;AAAA,QAC5B;AAAA,MACF;AAAA,IACF;AAEA,SAAK,YAAY;AAEjB,WAAO,MAAM;AACX,kBAAY;AAAA,IACd;AAAA,EACF,GAAG,CAAC,KAAK,WAAW,YAAY,kBAAkB,UAAU,CAAC;AAE7D,YAAU,MAAM;AACd,UAAM,UAAU,WAAW;AAC3B,QAAI,CAAC;AAAS;AAGd,UAAM,mBAAmB,CAAC,MAAa;AACrC,YAAM,cAAc;AACpB,qBAAe,YAAY,OAAO,GAAG;AAAA,IACvC;AACA,UAAM,aAAa,CAAC,MAAa;AAC/B,YAAM,cAAc;AACpB,eAAS,YAAY,OAAO,GAAG;AAAA,IACjC;AACA,UAAM,cAAc,CAAC,MAAa;AAChC,YAAM,cAAc;AACpB,gBAAU,YAAY,KAAK;AAAA,IAC7B;AACA,UAAM,eAAe,CAAC,MAAa;AACjC,YAAM,cAAc;AAMpB,iBAAW;AAAA,QACT,aAAa,YAAY,eAAe;AAAA,QACxC,SAAS,YAAY,WAAW;AAAA,QAChC,cAAc,YAAY;AAAA,QAC1B,UAAU,YAAY;AAAA,MACxB,CAAC;AAAA,IACH;AAEA,QAAI;AAAc,cAAQ,iBAAiB,cAAc,gBAAgB;AACzE,QAAI;AAAQ,cAAQ,iBAAiB,QAAQ,UAAU;AACvD,QAAI;AAAS,cAAQ,iBAAiB,SAAS,WAAW;AAC1D,QAAI;AAAU,cAAQ,iBAAiB,UAAU,YAAY;AAE7D,WAAO,MAAM;AACX,UAAI;AACF,gBAAQ,oBAAoB,cAAc,gBAAgB;AAC5D,UAAI;AAAQ,gBAAQ,oBAAoB,QAAQ,UAAU;AAC1D,UAAI;AAAS,gBAAQ,oBAAoB,SAAS,WAAW;AAC7D,UAAI;AAAU,gBAAQ,oBAAoB,UAAU,YAAY;AAAA,IAClE;AAAA,EACF,GAAG,CAAC,KAAK,cAAc,UAAU,SAAS,MAAM,CAAC;AAEjD,SAAO,oBAAC,sBAAiB,KAAK,YAAa,UAAS;AACtD;","names":[]}
@@ -1,14 +1,14 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkO4ED3BUPcjs = require('../chunk-O4ED3BUP.cjs');
5
- require('../chunk-EW5O3Q24.cjs');
6
- require('../chunk-4MLJE6UP.cjs');
7
- require('../chunk-KAFPXSRI.cjs');
8
- require('../chunk-YJJFRORQ.cjs');
4
+ var _chunkOSSMJQFEcjs = require('../chunk-OSSMJQFE.cjs');
5
+ require('../chunk-HZP4FWPG.cjs');
6
+ require('../chunk-XWRB6CEA.cjs');
7
+ require('../chunk-RZ224NSH.cjs');
8
+ require('../chunk-PCHSF5LH.cjs');
9
9
  require('../chunk-3AX5WLZD.cjs');
10
10
  require('../chunk-N3SQTOSE.cjs');
11
- require('../chunk-I7VKDF3E.cjs');
11
+ require('../chunk-6PZEDIAK.cjs');
12
12
  require('../chunk-Z2SLBFQL.cjs');
13
13
  require('../chunk-5KTAEO52.cjs');
14
14
  require('../chunk-BBXVML3D.cjs');
@@ -18,5 +18,5 @@ require('../chunk-SHFJ5OQA.cjs');
18
18
 
19
19
 
20
20
 
21
- exports.ConsumeRemoteComponent = _chunkO4ED3BUPcjs.ConsumeRemoteComponent; exports.useRemoteNavigate = _chunkO4ED3BUPcjs.useRemoteNavigate;
21
+ exports.ConsumeRemoteComponent = _chunkOSSMJQFEcjs.ConsumeRemoteComponent; exports.useRemoteNavigate = _chunkOSSMJQFEcjs.useRemoteNavigate;
22
22
  //# sourceMappingURL=react.cjs.map
@@ -1,14 +1,14 @@
1
1
  import {
2
2
  ConsumeRemoteComponent,
3
3
  useRemoteNavigate
4
- } from "../chunk-KCUEMMYL.js";
5
- import "../chunk-VJO4PTWG.js";
6
- import "../chunk-WGSS7TJP.js";
7
- import "../chunk-FF4SXSSG.js";
8
- import "../chunk-STMO56U2.js";
4
+ } from "../chunk-RHRDUJ3K.js";
5
+ import "../chunk-N6AJM72A.js";
6
+ import "../chunk-M6ACTSVB.js";
7
+ import "../chunk-GR5FN73U.js";
8
+ import "../chunk-VFK4HGZT.js";
9
9
  import "../chunk-LEKG4YWI.js";
10
10
  import "../chunk-RHGEBXPL.js";
11
- import "../chunk-JZRA6DPE.js";
11
+ import "../chunk-3PR3SWYZ.js";
12
12
  import "../chunk-D5GNZB6O.js";
13
13
  import "../chunk-STIJO4AG.js";
14
14
  import "../chunk-ULXU6XWH.js";
@@ -21,8 +21,11 @@ __export(apply_shared_modules_exports, {
21
21
  applySharedModules: () => applySharedModules
22
22
  });
23
23
  module.exports = __toCommonJS(apply_shared_modules_exports);
24
+ var import_shared_broker = require("#internal/host/shared/shared-broker");
24
25
  var import_remote_scope = require("#internal/runtime/turbopack/remote-scope");
25
26
  var import_logger = require("#internal/utils/logger");
27
+ var import_provider_adapter = require("./provider-adapter");
28
+ var import_shared_module_resolver = require("./shared-module-resolver");
26
29
  const DEDUPLICATION_SKIPPED = "shared module deduplication skipped. The remote may load its own copy of shared dependencies.";
27
30
  function applySharedModules(bundle, resolve) {
28
31
  (0, import_logger.logDebug)(
@@ -33,6 +36,11 @@ function applySharedModules(bundle, resolve) {
33
36
  "SharedModules",
34
37
  `Shared modules to resolve: ${Object.keys(resolve)}`
35
38
  );
39
+ const metadata = resolve[import_shared_module_resolver.WEBPACK_SHARED_RESOLVE_METADATA];
40
+ if (metadata?.protocol === import_shared_broker.SHARED_MODULE_MANIFEST_PROTOCOL) {
41
+ (0, import_provider_adapter.applyWebpackSharedProviderModules)(bundle, metadata.entries);
42
+ return;
43
+ }
36
44
  const self = globalThis;
37
45
  const scope = (0, import_remote_scope.getScope)(bundle);
38
46
  const webpackBundle = scope?.webpackRequire ?? self.__remote_webpack_require__?.[bundle];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/config/webpack/apply-shared-modules.ts"],"sourcesContent":["// Webpack shared module patching\n// used in multiple remote component host types\n// multiple host types includes: HTML custom element for remote components and Next.js host application\n// we are using this shared function to patch a Webpack module map\n// to use shared modules between the host application and the remote component\n\nimport { getScope } from '#internal/runtime/turbopack/remote-scope';\nimport { logDebug, logWarn } from '#internal/utils/logger';\n\nconst DEDUPLICATION_SKIPPED =\n 'shared module deduplication skipped. The remote may load its own copy of shared dependencies.';\n\nexport function applySharedModules(\n bundle: string,\n resolve: Record<string, unknown>,\n) {\n logDebug(\n 'SharedModules',\n `applySharedModules called for bundle: \"${bundle}\"`,\n );\n logDebug(\n 'SharedModules',\n `Shared modules to resolve: ${Object.keys(resolve)}`,\n );\n\n // make a typed reference to the global scope\n const self = globalThis as typeof globalThis & {\n // webpack remote module loading function scoped for each bundle\n __remote_webpack_require__?: Record<\n string,\n ((remoteId: string) => unknown) & {\n m?: Record<string | number, (module: { exports: unknown }) => void>;\n }\n >;\n // webpack module map for each bundle used in production builds\n __remote_webpack_module_map__?: Record<string, Record<string, number>>;\n } & Record<string, string[]>;\n\n // Prefer scope-based access when available.\n const scope = getScope(bundle);\n // @legacy(v0.3.4) — fall back to global __remote_webpack_require__ for hosts that\n // haven't run setupWebpackRuntime yet (e.g. HTML host's inline path).\n // Remove once all host types go through the shared pipeline (Phase 5).\n const webpackBundle =\n scope?.webpackRequire ?? self.__remote_webpack_require__?.[bundle];\n\n if (webpackBundle) {\n const modulePaths = Object.keys(\n self.__remote_webpack_module_map__?.[bundle] ?? webpackBundle.m ?? {},\n );\n logDebug(\n 'SharedModules',\n `Available module paths for bundle \"${bundle}\": ${modulePaths}`,\n );\n\n // patch all modules in the bundle to use the shared modules\n for (const [key, value] of Object.entries(resolve)) {\n const exactIds = modulePaths.filter((p) => p === key);\n const ids =\n exactIds.length > 0\n ? exactIds\n : modulePaths.filter((p) => p.includes(key));\n\n if (ids.length === 0) {\n logDebug(\n 'SharedModules',\n `No matching module path found for shared module \"${key}\"`,\n );\n }\n\n for (const id of ids) {\n if (webpackBundle.m) {\n // if we have a module map, we need to use the mapped id\n // this is required for production builds where the module ids are module id numbers\n const resolvedId = self.__remote_webpack_module_map__?.[bundle]?.[id]\n ? `${self.__remote_webpack_module_map__[bundle][id]}`\n : id;\n if (resolvedId !== id) {\n logDebug(\n 'SharedModules',\n `Mapped module id: \"${id}\" -> \"${resolvedId}\"`,\n );\n }\n // create a mock module which exports the shared module\n webpackBundle.m[resolvedId] = (module) => {\n module.exports = value;\n };\n } else {\n logWarn(\n 'SharedModules',\n `webpackBundle.m is not available for bundle \"${bundle}\" — ${DEDUPLICATION_SKIPPED}`,\n );\n }\n }\n }\n } else {\n logWarn(\n 'SharedModules',\n `No webpack require found for bundle \"${bundle}\" — ${DEDUPLICATION_SKIPPED}`,\n );\n logDebug(\n 'SharedModules',\n `Available bundles: ${Object.keys(self.__remote_webpack_require__ ?? {})}`,\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,0BAAyB;AACzB,oBAAkC;AAElC,MAAM,wBACJ;AAEK,SAAS,mBACd,QACA,SACA;AACA;AAAA,IACE;AAAA,IACA,0CAA0C;AAAA,EAC5C;AACA;AAAA,IACE;AAAA,IACA,8BAA8B,OAAO,KAAK,OAAO;AAAA,EACnD;AAGA,QAAM,OAAO;AAab,QAAM,YAAQ,8BAAS,MAAM;AAI7B,QAAM,gBACJ,OAAO,kBAAkB,KAAK,6BAA6B,MAAM;AAEnE,MAAI,eAAe;AACjB,UAAM,cAAc,OAAO;AAAA,MACzB,KAAK,gCAAgC,MAAM,KAAK,cAAc,KAAK,CAAC;AAAA,IACtE;AACA;AAAA,MACE;AAAA,MACA,sCAAsC,YAAY;AAAA,IACpD;AAGA,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClD,YAAM,WAAW,YAAY,OAAO,CAAC,MAAM,MAAM,GAAG;AACpD,YAAM,MACJ,SAAS,SAAS,IACd,WACA,YAAY,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,CAAC;AAE/C,UAAI,IAAI,WAAW,GAAG;AACpB;AAAA,UACE;AAAA,UACA,oDAAoD;AAAA,QACtD;AAAA,MACF;AAEA,iBAAW,MAAM,KAAK;AACpB,YAAI,cAAc,GAAG;AAGnB,gBAAM,aAAa,KAAK,gCAAgC,MAAM,IAAI,EAAE,IAChE,GAAG,KAAK,8BAA8B,MAAM,EAAE,EAAE,MAChD;AACJ,cAAI,eAAe,IAAI;AACrB;AAAA,cACE;AAAA,cACA,sBAAsB,WAAW;AAAA,YACnC;AAAA,UACF;AAEA,wBAAc,EAAE,UAAU,IAAI,CAACA,YAAW;AACxC,YAAAA,QAAO,UAAU;AAAA,UACnB;AAAA,QACF,OAAO;AACL;AAAA,YACE;AAAA,YACA,gDAAgD,kBAAa;AAAA,UAC/D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,OAAO;AACL;AAAA,MACE;AAAA,MACA,wCAAwC,kBAAa;AAAA,IACvD;AACA;AAAA,MACE;AAAA,MACA,sBAAsB,OAAO,KAAK,KAAK,8BAA8B,CAAC,CAAC;AAAA,IACzE;AAAA,EACF;AACF;","names":["module"]}
1
+ {"version":3,"sources":["../../../../src/config/webpack/apply-shared-modules.ts"],"sourcesContent":["// Webpack shared module patching\n// used in multiple remote component host types\n// multiple host types includes: HTML custom element for remote components and Next.js host application\n// we are using this shared function to patch a Webpack module map\n// to use shared modules between the host application and the remote component\n\nimport { SHARED_MODULE_MANIFEST_PROTOCOL } from '#internal/host/shared/shared-broker';\nimport { getScope } from '#internal/runtime/turbopack/remote-scope';\nimport { logDebug, logWarn } from '#internal/utils/logger';\nimport { applyWebpackSharedProviderModules } from './provider-adapter';\nimport {\n WEBPACK_SHARED_RESOLVE_METADATA,\n type WebpackSharedResolveMap,\n} from './shared-module-resolver';\n\nconst DEDUPLICATION_SKIPPED =\n 'shared module deduplication skipped. The remote may load its own copy of shared dependencies.';\n\nexport function applySharedModules(\n bundle: string,\n resolve: WebpackSharedResolveMap,\n) {\n logDebug(\n 'SharedModules',\n `applySharedModules called for bundle: \"${bundle}\"`,\n );\n logDebug(\n 'SharedModules',\n `Shared modules to resolve: ${Object.keys(resolve)}`,\n );\n\n const metadata = resolve[WEBPACK_SHARED_RESOLVE_METADATA];\n if (metadata?.protocol === SHARED_MODULE_MANIFEST_PROTOCOL) {\n applyWebpackSharedProviderModules(bundle, metadata.entries);\n return;\n }\n\n // @legacy(remote-components<=0.4.x): direct resolve-map patching is only for\n // old remotes that do not emit sharedManifest. Manifest-aware remotes return\n // above and must stay on the strict provider path.\n // make a typed reference to the global scope\n const self = globalThis as typeof globalThis & {\n // webpack remote module loading function scoped for each bundle\n __remote_webpack_require__?: Record<\n string,\n ((remoteId: string) => unknown) & {\n m?: Record<string | number, (module: { exports: unknown }) => void>;\n }\n >;\n // webpack module map for each bundle used in production builds\n __remote_webpack_module_map__?: Record<string, Record<string, number>>;\n } & Record<string, string[]>;\n\n // Prefer scope-based access when available.\n const scope = getScope(bundle);\n // @legacy(v0.3.4) — fall back to global __remote_webpack_require__ for hosts that\n // haven't run setupWebpackRuntime yet (e.g. HTML host's inline path).\n // Remove once all host types go through the shared pipeline (Phase 5).\n const webpackBundle =\n scope?.webpackRequire ?? self.__remote_webpack_require__?.[bundle];\n\n if (webpackBundle) {\n const modulePaths = Object.keys(\n self.__remote_webpack_module_map__?.[bundle] ?? webpackBundle.m ?? {},\n );\n logDebug(\n 'SharedModules',\n `Available module paths for bundle \"${bundle}\": ${modulePaths}`,\n );\n\n // patch all modules in the bundle to use the shared modules\n for (const [key, value] of Object.entries(resolve)) {\n const exactIds = modulePaths.filter((p) => p === key);\n const ids =\n exactIds.length > 0\n ? exactIds\n : modulePaths.filter((p) => p.includes(key));\n\n if (ids.length === 0) {\n logDebug(\n 'SharedModules',\n `No matching module path found for shared module \"${key}\"`,\n );\n }\n\n for (const id of ids) {\n if (webpackBundle.m) {\n // if we have a module map, we need to use the mapped id\n // this is required for production builds where the module ids are module id numbers\n const resolvedId = self.__remote_webpack_module_map__?.[bundle]?.[id]\n ? `${self.__remote_webpack_module_map__[bundle][id]}`\n : id;\n if (resolvedId !== id) {\n logDebug(\n 'SharedModules',\n `Mapped module id: \"${id}\" -> \"${resolvedId}\"`,\n );\n }\n // create a mock module which exports the shared module\n webpackBundle.m[resolvedId] = (module) => {\n module.exports = value;\n };\n } else {\n logWarn(\n 'SharedModules',\n `webpackBundle.m is not available for bundle \"${bundle}\" — ${DEDUPLICATION_SKIPPED}`,\n );\n }\n }\n }\n } else {\n logWarn(\n 'SharedModules',\n `No webpack require found for bundle \"${bundle}\" — ${DEDUPLICATION_SKIPPED}`,\n );\n logDebug(\n 'SharedModules',\n `Available bundles: ${Object.keys(self.__remote_webpack_require__ ?? {})}`,\n );\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAMA,2BAAgD;AAChD,0BAAyB;AACzB,oBAAkC;AAClC,8BAAkD;AAClD,oCAGO;AAEP,MAAM,wBACJ;AAEK,SAAS,mBACd,QACA,SACA;AACA;AAAA,IACE;AAAA,IACA,0CAA0C;AAAA,EAC5C;AACA;AAAA,IACE;AAAA,IACA,8BAA8B,OAAO,KAAK,OAAO;AAAA,EACnD;AAEA,QAAM,WAAW,QAAQ,6DAA+B;AACxD,MAAI,UAAU,aAAa,sDAAiC;AAC1D,mEAAkC,QAAQ,SAAS,OAAO;AAC1D;AAAA,EACF;AAMA,QAAM,OAAO;AAab,QAAM,YAAQ,8BAAS,MAAM;AAI7B,QAAM,gBACJ,OAAO,kBAAkB,KAAK,6BAA6B,MAAM;AAEnE,MAAI,eAAe;AACjB,UAAM,cAAc,OAAO;AAAA,MACzB,KAAK,gCAAgC,MAAM,KAAK,cAAc,KAAK,CAAC;AAAA,IACtE;AACA;AAAA,MACE;AAAA,MACA,sCAAsC,YAAY;AAAA,IACpD;AAGA,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClD,YAAM,WAAW,YAAY,OAAO,CAAC,MAAM,MAAM,GAAG;AACpD,YAAM,MACJ,SAAS,SAAS,IACd,WACA,YAAY,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,CAAC;AAE/C,UAAI,IAAI,WAAW,GAAG;AACpB;AAAA,UACE;AAAA,UACA,oDAAoD;AAAA,QACtD;AAAA,MACF;AAEA,iBAAW,MAAM,KAAK;AACpB,YAAI,cAAc,GAAG;AAGnB,gBAAM,aAAa,KAAK,gCAAgC,MAAM,IAAI,EAAE,IAChE,GAAG,KAAK,8BAA8B,MAAM,EAAE,EAAE,MAChD;AACJ,cAAI,eAAe,IAAI;AACrB;AAAA,cACE;AAAA,cACA,sBAAsB,WAAW;AAAA,YACnC;AAAA,UACF;AAEA,wBAAc,EAAE,UAAU,IAAI,CAACA,YAAW;AACxC,YAAAA,QAAO,UAAU;AAAA,UACnB;AAAA,QACF,OAAO;AACL;AAAA,YACE;AAAA,YACA,gDAAgD,kBAAa;AAAA,UAC/D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,OAAO;AACL;AAAA,MACE;AAAA,MACA,wCAAwC,kBAAa;AAAA,IACvD;AACA;AAAA,MACE;AAAA,MACA,sBAAsB,OAAO,KAAK,KAAK,8BAA8B,CAAC,CAAC;AAAA,IACzE;AAAA,EACF;AACF;","names":["module"]}
@@ -1,3 +1,8 @@
1
- declare function applySharedModules(bundle: string, resolve: Record<string, unknown>): void;
1
+ import { WebpackSharedResolveMap } from './shared-module-resolver.js';
2
+ import '../../host/shared/provider.js';
3
+ import '../../host/shared/shared-broker.js';
4
+ import '../../utils/logger.js';
5
+
6
+ declare function applySharedModules(bundle: string, resolve: WebpackSharedResolveMap): void;
2
7
 
3
8
  export { applySharedModules };
@@ -1,5 +1,10 @@
1
+ import { SHARED_MODULE_MANIFEST_PROTOCOL } from "#internal/host/shared/shared-broker";
1
2
  import { getScope } from "#internal/runtime/turbopack/remote-scope";
2
3
  import { logDebug, logWarn } from "#internal/utils/logger";
4
+ import { applyWebpackSharedProviderModules } from "./provider-adapter";
5
+ import {
6
+ WEBPACK_SHARED_RESOLVE_METADATA
7
+ } from "./shared-module-resolver";
3
8
  const DEDUPLICATION_SKIPPED = "shared module deduplication skipped. The remote may load its own copy of shared dependencies.";
4
9
  function applySharedModules(bundle, resolve) {
5
10
  logDebug(
@@ -10,6 +15,11 @@ function applySharedModules(bundle, resolve) {
10
15
  "SharedModules",
11
16
  `Shared modules to resolve: ${Object.keys(resolve)}`
12
17
  );
18
+ const metadata = resolve[WEBPACK_SHARED_RESOLVE_METADATA];
19
+ if (metadata?.protocol === SHARED_MODULE_MANIFEST_PROTOCOL) {
20
+ applyWebpackSharedProviderModules(bundle, metadata.entries);
21
+ return;
22
+ }
13
23
  const self = globalThis;
14
24
  const scope = getScope(bundle);
15
25
  const webpackBundle = scope?.webpackRequire ?? self.__remote_webpack_require__?.[bundle];
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/config/webpack/apply-shared-modules.ts"],"sourcesContent":["// Webpack shared module patching\n// used in multiple remote component host types\n// multiple host types includes: HTML custom element for remote components and Next.js host application\n// we are using this shared function to patch a Webpack module map\n// to use shared modules between the host application and the remote component\n\nimport { getScope } from '#internal/runtime/turbopack/remote-scope';\nimport { logDebug, logWarn } from '#internal/utils/logger';\n\nconst DEDUPLICATION_SKIPPED =\n 'shared module deduplication skipped. The remote may load its own copy of shared dependencies.';\n\nexport function applySharedModules(\n bundle: string,\n resolve: Record<string, unknown>,\n) {\n logDebug(\n 'SharedModules',\n `applySharedModules called for bundle: \"${bundle}\"`,\n );\n logDebug(\n 'SharedModules',\n `Shared modules to resolve: ${Object.keys(resolve)}`,\n );\n\n // make a typed reference to the global scope\n const self = globalThis as typeof globalThis & {\n // webpack remote module loading function scoped for each bundle\n __remote_webpack_require__?: Record<\n string,\n ((remoteId: string) => unknown) & {\n m?: Record<string | number, (module: { exports: unknown }) => void>;\n }\n >;\n // webpack module map for each bundle used in production builds\n __remote_webpack_module_map__?: Record<string, Record<string, number>>;\n } & Record<string, string[]>;\n\n // Prefer scope-based access when available.\n const scope = getScope(bundle);\n // @legacy(v0.3.4) — fall back to global __remote_webpack_require__ for hosts that\n // haven't run setupWebpackRuntime yet (e.g. HTML host's inline path).\n // Remove once all host types go through the shared pipeline (Phase 5).\n const webpackBundle =\n scope?.webpackRequire ?? self.__remote_webpack_require__?.[bundle];\n\n if (webpackBundle) {\n const modulePaths = Object.keys(\n self.__remote_webpack_module_map__?.[bundle] ?? webpackBundle.m ?? {},\n );\n logDebug(\n 'SharedModules',\n `Available module paths for bundle \"${bundle}\": ${modulePaths}`,\n );\n\n // patch all modules in the bundle to use the shared modules\n for (const [key, value] of Object.entries(resolve)) {\n const exactIds = modulePaths.filter((p) => p === key);\n const ids =\n exactIds.length > 0\n ? exactIds\n : modulePaths.filter((p) => p.includes(key));\n\n if (ids.length === 0) {\n logDebug(\n 'SharedModules',\n `No matching module path found for shared module \"${key}\"`,\n );\n }\n\n for (const id of ids) {\n if (webpackBundle.m) {\n // if we have a module map, we need to use the mapped id\n // this is required for production builds where the module ids are module id numbers\n const resolvedId = self.__remote_webpack_module_map__?.[bundle]?.[id]\n ? `${self.__remote_webpack_module_map__[bundle][id]}`\n : id;\n if (resolvedId !== id) {\n logDebug(\n 'SharedModules',\n `Mapped module id: \"${id}\" -> \"${resolvedId}\"`,\n );\n }\n // create a mock module which exports the shared module\n webpackBundle.m[resolvedId] = (module) => {\n module.exports = value;\n };\n } else {\n logWarn(\n 'SharedModules',\n `webpackBundle.m is not available for bundle \"${bundle}\" — ${DEDUPLICATION_SKIPPED}`,\n );\n }\n }\n }\n } else {\n logWarn(\n 'SharedModules',\n `No webpack require found for bundle \"${bundle}\" — ${DEDUPLICATION_SKIPPED}`,\n );\n logDebug(\n 'SharedModules',\n `Available bundles: ${Object.keys(self.__remote_webpack_require__ ?? {})}`,\n );\n }\n}\n"],"mappings":"AAMA,SAAS,gBAAgB;AACzB,SAAS,UAAU,eAAe;AAElC,MAAM,wBACJ;AAEK,SAAS,mBACd,QACA,SACA;AACA;AAAA,IACE;AAAA,IACA,0CAA0C;AAAA,EAC5C;AACA;AAAA,IACE;AAAA,IACA,8BAA8B,OAAO,KAAK,OAAO;AAAA,EACnD;AAGA,QAAM,OAAO;AAab,QAAM,QAAQ,SAAS,MAAM;AAI7B,QAAM,gBACJ,OAAO,kBAAkB,KAAK,6BAA6B,MAAM;AAEnE,MAAI,eAAe;AACjB,UAAM,cAAc,OAAO;AAAA,MACzB,KAAK,gCAAgC,MAAM,KAAK,cAAc,KAAK,CAAC;AAAA,IACtE;AACA;AAAA,MACE;AAAA,MACA,sCAAsC,YAAY;AAAA,IACpD;AAGA,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClD,YAAM,WAAW,YAAY,OAAO,CAAC,MAAM,MAAM,GAAG;AACpD,YAAM,MACJ,SAAS,SAAS,IACd,WACA,YAAY,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,CAAC;AAE/C,UAAI,IAAI,WAAW,GAAG;AACpB;AAAA,UACE;AAAA,UACA,oDAAoD;AAAA,QACtD;AAAA,MACF;AAEA,iBAAW,MAAM,KAAK;AACpB,YAAI,cAAc,GAAG;AAGnB,gBAAM,aAAa,KAAK,gCAAgC,MAAM,IAAI,EAAE,IAChE,GAAG,KAAK,8BAA8B,MAAM,EAAE,EAAE,MAChD;AACJ,cAAI,eAAe,IAAI;AACrB;AAAA,cACE;AAAA,cACA,sBAAsB,WAAW;AAAA,YACnC;AAAA,UACF;AAEA,wBAAc,EAAE,UAAU,IAAI,CAAC,WAAW;AACxC,mBAAO,UAAU;AAAA,UACnB;AAAA,QACF,OAAO;AACL;AAAA,YACE;AAAA,YACA,gDAAgD,kBAAa;AAAA,UAC/D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,OAAO;AACL;AAAA,MACE;AAAA,MACA,wCAAwC,kBAAa;AAAA,IACvD;AACA;AAAA,MACE;AAAA,MACA,sBAAsB,OAAO,KAAK,KAAK,8BAA8B,CAAC,CAAC;AAAA,IACzE;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/config/webpack/apply-shared-modules.ts"],"sourcesContent":["// Webpack shared module patching\n// used in multiple remote component host types\n// multiple host types includes: HTML custom element for remote components and Next.js host application\n// we are using this shared function to patch a Webpack module map\n// to use shared modules between the host application and the remote component\n\nimport { SHARED_MODULE_MANIFEST_PROTOCOL } from '#internal/host/shared/shared-broker';\nimport { getScope } from '#internal/runtime/turbopack/remote-scope';\nimport { logDebug, logWarn } from '#internal/utils/logger';\nimport { applyWebpackSharedProviderModules } from './provider-adapter';\nimport {\n WEBPACK_SHARED_RESOLVE_METADATA,\n type WebpackSharedResolveMap,\n} from './shared-module-resolver';\n\nconst DEDUPLICATION_SKIPPED =\n 'shared module deduplication skipped. The remote may load its own copy of shared dependencies.';\n\nexport function applySharedModules(\n bundle: string,\n resolve: WebpackSharedResolveMap,\n) {\n logDebug(\n 'SharedModules',\n `applySharedModules called for bundle: \"${bundle}\"`,\n );\n logDebug(\n 'SharedModules',\n `Shared modules to resolve: ${Object.keys(resolve)}`,\n );\n\n const metadata = resolve[WEBPACK_SHARED_RESOLVE_METADATA];\n if (metadata?.protocol === SHARED_MODULE_MANIFEST_PROTOCOL) {\n applyWebpackSharedProviderModules(bundle, metadata.entries);\n return;\n }\n\n // @legacy(remote-components<=0.4.x): direct resolve-map patching is only for\n // old remotes that do not emit sharedManifest. Manifest-aware remotes return\n // above and must stay on the strict provider path.\n // make a typed reference to the global scope\n const self = globalThis as typeof globalThis & {\n // webpack remote module loading function scoped for each bundle\n __remote_webpack_require__?: Record<\n string,\n ((remoteId: string) => unknown) & {\n m?: Record<string | number, (module: { exports: unknown }) => void>;\n }\n >;\n // webpack module map for each bundle used in production builds\n __remote_webpack_module_map__?: Record<string, Record<string, number>>;\n } & Record<string, string[]>;\n\n // Prefer scope-based access when available.\n const scope = getScope(bundle);\n // @legacy(v0.3.4) — fall back to global __remote_webpack_require__ for hosts that\n // haven't run setupWebpackRuntime yet (e.g. HTML host's inline path).\n // Remove once all host types go through the shared pipeline (Phase 5).\n const webpackBundle =\n scope?.webpackRequire ?? self.__remote_webpack_require__?.[bundle];\n\n if (webpackBundle) {\n const modulePaths = Object.keys(\n self.__remote_webpack_module_map__?.[bundle] ?? webpackBundle.m ?? {},\n );\n logDebug(\n 'SharedModules',\n `Available module paths for bundle \"${bundle}\": ${modulePaths}`,\n );\n\n // patch all modules in the bundle to use the shared modules\n for (const [key, value] of Object.entries(resolve)) {\n const exactIds = modulePaths.filter((p) => p === key);\n const ids =\n exactIds.length > 0\n ? exactIds\n : modulePaths.filter((p) => p.includes(key));\n\n if (ids.length === 0) {\n logDebug(\n 'SharedModules',\n `No matching module path found for shared module \"${key}\"`,\n );\n }\n\n for (const id of ids) {\n if (webpackBundle.m) {\n // if we have a module map, we need to use the mapped id\n // this is required for production builds where the module ids are module id numbers\n const resolvedId = self.__remote_webpack_module_map__?.[bundle]?.[id]\n ? `${self.__remote_webpack_module_map__[bundle][id]}`\n : id;\n if (resolvedId !== id) {\n logDebug(\n 'SharedModules',\n `Mapped module id: \"${id}\" -> \"${resolvedId}\"`,\n );\n }\n // create a mock module which exports the shared module\n webpackBundle.m[resolvedId] = (module) => {\n module.exports = value;\n };\n } else {\n logWarn(\n 'SharedModules',\n `webpackBundle.m is not available for bundle \"${bundle}\" — ${DEDUPLICATION_SKIPPED}`,\n );\n }\n }\n }\n } else {\n logWarn(\n 'SharedModules',\n `No webpack require found for bundle \"${bundle}\" — ${DEDUPLICATION_SKIPPED}`,\n );\n logDebug(\n 'SharedModules',\n `Available bundles: ${Object.keys(self.__remote_webpack_require__ ?? {})}`,\n );\n }\n}\n"],"mappings":"AAMA,SAAS,uCAAuC;AAChD,SAAS,gBAAgB;AACzB,SAAS,UAAU,eAAe;AAClC,SAAS,yCAAyC;AAClD;AAAA,EACE;AAAA,OAEK;AAEP,MAAM,wBACJ;AAEK,SAAS,mBACd,QACA,SACA;AACA;AAAA,IACE;AAAA,IACA,0CAA0C;AAAA,EAC5C;AACA;AAAA,IACE;AAAA,IACA,8BAA8B,OAAO,KAAK,OAAO;AAAA,EACnD;AAEA,QAAM,WAAW,QAAQ,+BAA+B;AACxD,MAAI,UAAU,aAAa,iCAAiC;AAC1D,sCAAkC,QAAQ,SAAS,OAAO;AAC1D;AAAA,EACF;AAMA,QAAM,OAAO;AAab,QAAM,QAAQ,SAAS,MAAM;AAI7B,QAAM,gBACJ,OAAO,kBAAkB,KAAK,6BAA6B,MAAM;AAEnE,MAAI,eAAe;AACjB,UAAM,cAAc,OAAO;AAAA,MACzB,KAAK,gCAAgC,MAAM,KAAK,cAAc,KAAK,CAAC;AAAA,IACtE;AACA;AAAA,MACE;AAAA,MACA,sCAAsC,YAAY;AAAA,IACpD;AAGA,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,OAAO,GAAG;AAClD,YAAM,WAAW,YAAY,OAAO,CAAC,MAAM,MAAM,GAAG;AACpD,YAAM,MACJ,SAAS,SAAS,IACd,WACA,YAAY,OAAO,CAAC,MAAM,EAAE,SAAS,GAAG,CAAC;AAE/C,UAAI,IAAI,WAAW,GAAG;AACpB;AAAA,UACE;AAAA,UACA,oDAAoD;AAAA,QACtD;AAAA,MACF;AAEA,iBAAW,MAAM,KAAK;AACpB,YAAI,cAAc,GAAG;AAGnB,gBAAM,aAAa,KAAK,gCAAgC,MAAM,IAAI,EAAE,IAChE,GAAG,KAAK,8BAA8B,MAAM,EAAE,EAAE,MAChD;AACJ,cAAI,eAAe,IAAI;AACrB;AAAA,cACE;AAAA,cACA,sBAAsB,WAAW;AAAA,YACnC;AAAA,UACF;AAEA,wBAAc,EAAE,UAAU,IAAI,CAAC,WAAW;AACxC,mBAAO,UAAU;AAAA,UACnB;AAAA,QACF,OAAO;AACL;AAAA,YACE;AAAA,YACA,gDAAgD,kBAAa;AAAA,UAC/D;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,EACF,OAAO;AACL;AAAA,MACE;AAAA,MACA,wCAAwC,kBAAa;AAAA,IACvD;AACA;AAAA,MACE;AAAA,MACA,sBAAsB,OAAO,KAAK,KAAK,8BAA8B,CAAC,CAAC;AAAA,IACzE;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,85 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var provider_adapter_exports = {};
20
+ __export(provider_adapter_exports, {
21
+ applyWebpackSharedProviderModules: () => applyWebpackSharedProviderModules
22
+ });
23
+ module.exports = __toCommonJS(provider_adapter_exports);
24
+ var import_provider = require("#internal/host/shared/provider");
25
+ var import_remote_scope = require("#internal/runtime/turbopack/remote-scope");
26
+ var import_error = require("#internal/utils/error");
27
+ var import_logger = require("#internal/utils/logger");
28
+ function applyWebpackSharedProviderModules(bundle, entries) {
29
+ (0, import_logger.logDebug)(
30
+ "SharedModules",
31
+ `applyWebpackSharedProviderModules called for bundle: "${bundle}"`
32
+ );
33
+ const self = globalThis;
34
+ const scope = (0, import_remote_scope.getScope)(bundle);
35
+ const webpackBundle = scope?.webpackRequire ?? self.__remote_webpack_require__?.[bundle];
36
+ if (!webpackBundle) {
37
+ throw new import_error.RemoteComponentsError(
38
+ `No Webpack require found for manifest-aware Remote Component bundle "${bundle}".`
39
+ );
40
+ }
41
+ if (!webpackBundle.m) {
42
+ throw new import_error.RemoteComponentsError(
43
+ `Webpack module factories are not available for manifest-aware Remote Component bundle "${bundle}".`
44
+ );
45
+ }
46
+ const modulePaths = Object.keys(
47
+ self.__remote_webpack_module_map__?.[bundle] ?? webpackBundle.m
48
+ );
49
+ for (const entry of entries) {
50
+ (0, import_provider.installSharedProviderEntry)(entry);
51
+ const ids = resolveWebpackModuleIds(bundle, modulePaths, entry.id);
52
+ if (ids.length === 0) {
53
+ continue;
54
+ }
55
+ for (const id of ids) {
56
+ const resolvedId = self.__remote_webpack_module_map__?.[bundle]?.[id] ? `${self.__remote_webpack_module_map__[bundle][id]}` : id;
57
+ webpackBundle.m[resolvedId] = (module2) => {
58
+ module2.exports = (0, import_provider.getSharedProviderModule)({
59
+ scope: entry.scope,
60
+ specifier: entry.specifier
61
+ });
62
+ };
63
+ }
64
+ }
65
+ }
66
+ function resolveWebpackModuleIds(bundle, modulePaths, id) {
67
+ const exactIds = modulePaths.filter((path) => path === id);
68
+ if (exactIds.length > 0) {
69
+ return exactIds;
70
+ }
71
+ const containedIds = modulePaths.filter((path) => path.includes(id));
72
+ if (containedIds.length > 0) {
73
+ return containedIds;
74
+ }
75
+ (0, import_logger.logDebug)(
76
+ "SharedModules",
77
+ `No matching module path found for manifest shared module "${id}" in bundle "${bundle}"`
78
+ );
79
+ return [];
80
+ }
81
+ // Annotate the CommonJS export names for ESM import in node:
82
+ 0 && (module.exports = {
83
+ applyWebpackSharedProviderModules
84
+ });
85
+ //# sourceMappingURL=provider-adapter.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/config/webpack/provider-adapter.ts"],"sourcesContent":["import {\n getSharedProviderModule,\n installSharedProviderEntry,\n type SharedProviderEntry,\n} from '#internal/host/shared/provider';\nimport { getScope } from '#internal/runtime/turbopack/remote-scope';\nimport { RemoteComponentsError } from '#internal/utils/error';\nimport { logDebug } from '#internal/utils/logger';\n\nexport function applyWebpackSharedProviderModules(\n bundle: string,\n entries: SharedProviderEntry[],\n) {\n logDebug(\n 'SharedModules',\n `applyWebpackSharedProviderModules called for bundle: \"${bundle}\"`,\n );\n\n const self = globalThis as typeof globalThis & {\n __remote_webpack_require__?: Record<\n string,\n ((remoteId: string | number) => unknown) & {\n m?: Record<string | number, (module: { exports: unknown }) => void>;\n }\n >;\n __remote_webpack_module_map__?: Record<string, Record<string, number>>;\n };\n\n const scope = getScope(bundle);\n const webpackBundle =\n scope?.webpackRequire ?? self.__remote_webpack_require__?.[bundle];\n\n if (!webpackBundle) {\n throw new RemoteComponentsError(\n `No Webpack require found for manifest-aware Remote Component bundle \"${bundle}\".`,\n );\n }\n\n if (!webpackBundle.m) {\n throw new RemoteComponentsError(\n `Webpack module factories are not available for manifest-aware Remote Component bundle \"${bundle}\".`,\n );\n }\n\n const modulePaths = Object.keys(\n self.__remote_webpack_module_map__?.[bundle] ?? webpackBundle.m,\n );\n\n for (const entry of entries) {\n installSharedProviderEntry(entry);\n\n const ids = resolveWebpackModuleIds(bundle, modulePaths, entry.id);\n if (ids.length === 0) {\n continue;\n }\n\n for (const id of ids) {\n const resolvedId = self.__remote_webpack_module_map__?.[bundle]?.[id]\n ? `${self.__remote_webpack_module_map__[bundle][id]}`\n : id;\n\n webpackBundle.m[resolvedId] = (module) => {\n module.exports = getSharedProviderModule({\n scope: entry.scope,\n specifier: entry.specifier,\n });\n };\n }\n }\n}\n\nfunction resolveWebpackModuleIds(\n bundle: string,\n modulePaths: string[],\n id: string,\n): string[] {\n const exactIds = modulePaths.filter((path) => path === id);\n if (exactIds.length > 0) {\n return exactIds;\n }\n\n const containedIds = modulePaths.filter((path) => path.includes(id));\n if (containedIds.length > 0) {\n return containedIds;\n }\n\n logDebug(\n 'SharedModules',\n `No matching module path found for manifest shared module \"${id}\" in bundle \"${bundle}\"`,\n );\n return [];\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAIO;AACP,0BAAyB;AACzB,mBAAsC;AACtC,oBAAyB;AAElB,SAAS,kCACd,QACA,SACA;AACA;AAAA,IACE;AAAA,IACA,yDAAyD;AAAA,EAC3D;AAEA,QAAM,OAAO;AAUb,QAAM,YAAQ,8BAAS,MAAM;AAC7B,QAAM,gBACJ,OAAO,kBAAkB,KAAK,6BAA6B,MAAM;AAEnE,MAAI,CAAC,eAAe;AAClB,UAAM,IAAI;AAAA,MACR,wEAAwE;AAAA,IAC1E;AAAA,EACF;AAEA,MAAI,CAAC,cAAc,GAAG;AACpB,UAAM,IAAI;AAAA,MACR,0FAA0F;AAAA,IAC5F;AAAA,EACF;AAEA,QAAM,cAAc,OAAO;AAAA,IACzB,KAAK,gCAAgC,MAAM,KAAK,cAAc;AAAA,EAChE;AAEA,aAAW,SAAS,SAAS;AAC3B,oDAA2B,KAAK;AAEhC,UAAM,MAAM,wBAAwB,QAAQ,aAAa,MAAM,EAAE;AACjE,QAAI,IAAI,WAAW,GAAG;AACpB;AAAA,IACF;AAEA,eAAW,MAAM,KAAK;AACpB,YAAM,aAAa,KAAK,gCAAgC,MAAM,IAAI,EAAE,IAChE,GAAG,KAAK,8BAA8B,MAAM,EAAE,EAAE,MAChD;AAEJ,oBAAc,EAAE,UAAU,IAAI,CAACA,YAAW;AACxC,QAAAA,QAAO,cAAU,yCAAwB;AAAA,UACvC,OAAO,MAAM;AAAA,UACb,WAAW,MAAM;AAAA,QACnB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,wBACP,QACA,aACA,IACU;AACV,QAAM,WAAW,YAAY,OAAO,CAAC,SAAS,SAAS,EAAE;AACzD,MAAI,SAAS,SAAS,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,YAAY,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;AACnE,MAAI,aAAa,SAAS,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA;AAAA,IACE;AAAA,IACA,6DAA6D,kBAAkB;AAAA,EACjF;AACA,SAAO,CAAC;AACV;","names":["module"]}
@@ -0,0 +1,7 @@
1
+ import { SharedProviderEntry } from '../../host/shared/provider.js';
2
+ import '../../host/shared/shared-broker.js';
3
+ import '../../utils/logger.js';
4
+
5
+ declare function applyWebpackSharedProviderModules(bundle: string, entries: SharedProviderEntry[]): void;
6
+
7
+ export { applyWebpackSharedProviderModules };
@@ -0,0 +1,64 @@
1
+ import {
2
+ getSharedProviderModule,
3
+ installSharedProviderEntry
4
+ } from "#internal/host/shared/provider";
5
+ import { getScope } from "#internal/runtime/turbopack/remote-scope";
6
+ import { RemoteComponentsError } from "#internal/utils/error";
7
+ import { logDebug } from "#internal/utils/logger";
8
+ function applyWebpackSharedProviderModules(bundle, entries) {
9
+ logDebug(
10
+ "SharedModules",
11
+ `applyWebpackSharedProviderModules called for bundle: "${bundle}"`
12
+ );
13
+ const self = globalThis;
14
+ const scope = getScope(bundle);
15
+ const webpackBundle = scope?.webpackRequire ?? self.__remote_webpack_require__?.[bundle];
16
+ if (!webpackBundle) {
17
+ throw new RemoteComponentsError(
18
+ `No Webpack require found for manifest-aware Remote Component bundle "${bundle}".`
19
+ );
20
+ }
21
+ if (!webpackBundle.m) {
22
+ throw new RemoteComponentsError(
23
+ `Webpack module factories are not available for manifest-aware Remote Component bundle "${bundle}".`
24
+ );
25
+ }
26
+ const modulePaths = Object.keys(
27
+ self.__remote_webpack_module_map__?.[bundle] ?? webpackBundle.m
28
+ );
29
+ for (const entry of entries) {
30
+ installSharedProviderEntry(entry);
31
+ const ids = resolveWebpackModuleIds(bundle, modulePaths, entry.id);
32
+ if (ids.length === 0) {
33
+ continue;
34
+ }
35
+ for (const id of ids) {
36
+ const resolvedId = self.__remote_webpack_module_map__?.[bundle]?.[id] ? `${self.__remote_webpack_module_map__[bundle][id]}` : id;
37
+ webpackBundle.m[resolvedId] = (module) => {
38
+ module.exports = getSharedProviderModule({
39
+ scope: entry.scope,
40
+ specifier: entry.specifier
41
+ });
42
+ };
43
+ }
44
+ }
45
+ }
46
+ function resolveWebpackModuleIds(bundle, modulePaths, id) {
47
+ const exactIds = modulePaths.filter((path) => path === id);
48
+ if (exactIds.length > 0) {
49
+ return exactIds;
50
+ }
51
+ const containedIds = modulePaths.filter((path) => path.includes(id));
52
+ if (containedIds.length > 0) {
53
+ return containedIds;
54
+ }
55
+ logDebug(
56
+ "SharedModules",
57
+ `No matching module path found for manifest shared module "${id}" in bundle "${bundle}"`
58
+ );
59
+ return [];
60
+ }
61
+ export {
62
+ applyWebpackSharedProviderModules
63
+ };
64
+ //# sourceMappingURL=provider-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/config/webpack/provider-adapter.ts"],"sourcesContent":["import {\n getSharedProviderModule,\n installSharedProviderEntry,\n type SharedProviderEntry,\n} from '#internal/host/shared/provider';\nimport { getScope } from '#internal/runtime/turbopack/remote-scope';\nimport { RemoteComponentsError } from '#internal/utils/error';\nimport { logDebug } from '#internal/utils/logger';\n\nexport function applyWebpackSharedProviderModules(\n bundle: string,\n entries: SharedProviderEntry[],\n) {\n logDebug(\n 'SharedModules',\n `applyWebpackSharedProviderModules called for bundle: \"${bundle}\"`,\n );\n\n const self = globalThis as typeof globalThis & {\n __remote_webpack_require__?: Record<\n string,\n ((remoteId: string | number) => unknown) & {\n m?: Record<string | number, (module: { exports: unknown }) => void>;\n }\n >;\n __remote_webpack_module_map__?: Record<string, Record<string, number>>;\n };\n\n const scope = getScope(bundle);\n const webpackBundle =\n scope?.webpackRequire ?? self.__remote_webpack_require__?.[bundle];\n\n if (!webpackBundle) {\n throw new RemoteComponentsError(\n `No Webpack require found for manifest-aware Remote Component bundle \"${bundle}\".`,\n );\n }\n\n if (!webpackBundle.m) {\n throw new RemoteComponentsError(\n `Webpack module factories are not available for manifest-aware Remote Component bundle \"${bundle}\".`,\n );\n }\n\n const modulePaths = Object.keys(\n self.__remote_webpack_module_map__?.[bundle] ?? webpackBundle.m,\n );\n\n for (const entry of entries) {\n installSharedProviderEntry(entry);\n\n const ids = resolveWebpackModuleIds(bundle, modulePaths, entry.id);\n if (ids.length === 0) {\n continue;\n }\n\n for (const id of ids) {\n const resolvedId = self.__remote_webpack_module_map__?.[bundle]?.[id]\n ? `${self.__remote_webpack_module_map__[bundle][id]}`\n : id;\n\n webpackBundle.m[resolvedId] = (module) => {\n module.exports = getSharedProviderModule({\n scope: entry.scope,\n specifier: entry.specifier,\n });\n };\n }\n }\n}\n\nfunction resolveWebpackModuleIds(\n bundle: string,\n modulePaths: string[],\n id: string,\n): string[] {\n const exactIds = modulePaths.filter((path) => path === id);\n if (exactIds.length > 0) {\n return exactIds;\n }\n\n const containedIds = modulePaths.filter((path) => path.includes(id));\n if (containedIds.length > 0) {\n return containedIds;\n }\n\n logDebug(\n 'SharedModules',\n `No matching module path found for manifest shared module \"${id}\" in bundle \"${bundle}\"`,\n );\n return [];\n}\n"],"mappings":"AAAA;AAAA,EACE;AAAA,EACA;AAAA,OAEK;AACP,SAAS,gBAAgB;AACzB,SAAS,6BAA6B;AACtC,SAAS,gBAAgB;AAElB,SAAS,kCACd,QACA,SACA;AACA;AAAA,IACE;AAAA,IACA,yDAAyD;AAAA,EAC3D;AAEA,QAAM,OAAO;AAUb,QAAM,QAAQ,SAAS,MAAM;AAC7B,QAAM,gBACJ,OAAO,kBAAkB,KAAK,6BAA6B,MAAM;AAEnE,MAAI,CAAC,eAAe;AAClB,UAAM,IAAI;AAAA,MACR,wEAAwE;AAAA,IAC1E;AAAA,EACF;AAEA,MAAI,CAAC,cAAc,GAAG;AACpB,UAAM,IAAI;AAAA,MACR,0FAA0F;AAAA,IAC5F;AAAA,EACF;AAEA,QAAM,cAAc,OAAO;AAAA,IACzB,KAAK,gCAAgC,MAAM,KAAK,cAAc;AAAA,EAChE;AAEA,aAAW,SAAS,SAAS;AAC3B,+BAA2B,KAAK;AAEhC,UAAM,MAAM,wBAAwB,QAAQ,aAAa,MAAM,EAAE;AACjE,QAAI,IAAI,WAAW,GAAG;AACpB;AAAA,IACF;AAEA,eAAW,MAAM,KAAK;AACpB,YAAM,aAAa,KAAK,gCAAgC,MAAM,IAAI,EAAE,IAChE,GAAG,KAAK,8BAA8B,MAAM,EAAE,EAAE,MAChD;AAEJ,oBAAc,EAAE,UAAU,IAAI,CAAC,WAAW;AACxC,eAAO,UAAU,wBAAwB;AAAA,UACvC,OAAO,MAAM;AAAA,UACb,WAAW,MAAM;AAAA,QACnB,CAAC;AAAA,MACH;AAAA,IACF;AAAA,EACF;AACF;AAEA,SAAS,wBACP,QACA,aACA,IACU;AACV,QAAM,WAAW,YAAY,OAAO,CAAC,SAAS,SAAS,EAAE;AACzD,MAAI,SAAS,SAAS,GAAG;AACvB,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,YAAY,OAAO,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;AACnE,MAAI,aAAa,SAAS,GAAG;AAC3B,WAAO;AAAA,EACT;AAEA;AAAA,IACE;AAAA,IACA,6DAA6D,kBAAkB;AAAA,EACjF;AACA,SAAO,CAAC;AACV;","names":[]}
@@ -0,0 +1,73 @@
1
+ "use strict";
2
+ var __defProp = Object.defineProperty;
3
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
+ var __getOwnPropNames = Object.getOwnPropertyNames;
5
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
6
+ var __export = (target, all) => {
7
+ for (var name in all)
8
+ __defProp(target, name, { get: all[name], enumerable: true });
9
+ };
10
+ var __copyProps = (to, from, except, desc) => {
11
+ if (from && typeof from === "object" || typeof from === "function") {
12
+ for (let key of __getOwnPropNames(from))
13
+ if (!__hasOwnProp.call(to, key) && key !== except)
14
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
15
+ }
16
+ return to;
17
+ };
18
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
+ var shared_module_resolver_exports = {};
20
+ __export(shared_module_resolver_exports, {
21
+ WEBPACK_SHARED_RESOLVE_METADATA: () => WEBPACK_SHARED_RESOLVE_METADATA,
22
+ buildWebpackResolve: () => buildWebpackResolve
23
+ });
24
+ module.exports = __toCommonJS(shared_module_resolver_exports);
25
+ var import_provider = require("#internal/host/shared/provider");
26
+ var import_shared_module_resolver = require("#internal/host/shared/shared-module-resolver");
27
+ const WEBPACK_SHARED_RESOLVE_METADATA = Symbol.for(
28
+ "remote-components.webpackSharedResolveMetadata"
29
+ );
30
+ function normalizeWebpackSharedId(id) {
31
+ return id.replace(/^\(ssr\)\/(?<relative>\.\/)?/, "");
32
+ }
33
+ async function buildWebpackResolve(hostShared, remoteShared, bundle, reactModules, callerTag = "SharedModuleResolver") {
34
+ const sharedProviderPlan = await (0, import_provider.buildSharedProviderPlan)({
35
+ bundle,
36
+ hostShared,
37
+ remoteShared,
38
+ callerTag,
39
+ normalizeId: normalizeWebpackSharedId,
40
+ additionalEntries: Object.entries(import_shared_module_resolver.CORE_REACT_SHARED_MODULE_IDS).map(
41
+ ([specifier, id]) => ({
42
+ id,
43
+ specifier,
44
+ value: reactModules[id],
45
+ required: true,
46
+ singleton: true,
47
+ scope: `remote:${bundle}`
48
+ })
49
+ )
50
+ });
51
+ const resolve = {
52
+ ...Object.fromEntries(
53
+ sharedProviderPlan.entries.map((entry) => [
54
+ entry.id,
55
+ entry.provider.get()
56
+ ])
57
+ )
58
+ };
59
+ Object.defineProperty(resolve, WEBPACK_SHARED_RESOLVE_METADATA, {
60
+ enumerable: false,
61
+ value: {
62
+ protocol: sharedProviderPlan.protocol,
63
+ entries: sharedProviderPlan.entries
64
+ }
65
+ });
66
+ return resolve;
67
+ }
68
+ // Annotate the CommonJS export names for ESM import in node:
69
+ 0 && (module.exports = {
70
+ WEBPACK_SHARED_RESOLVE_METADATA,
71
+ buildWebpackResolve
72
+ });
73
+ //# sourceMappingURL=shared-module-resolver.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/config/webpack/shared-module-resolver.ts"],"sourcesContent":["import {\n buildSharedProviderPlan,\n type SharedProviderEntry,\n} from '#internal/host/shared/provider';\nimport type {\n RemoteSharedModules,\n SHARED_MODULE_MANIFEST_PROTOCOL,\n SharedModuleFactory,\n} from '#internal/host/shared/shared-broker';\nimport { CORE_REACT_SHARED_MODULE_IDS } from '#internal/host/shared/shared-module-resolver';\nimport type { LogLocation } from '#internal/utils/logger';\n\n/**\n * React module instances keyed by Webpack module path, e.g.\n * `{ '/react/index.js': React }`. Passed into `buildWebpackResolve` so it\n * can populate the resolve map without importing React itself.\n */\nexport interface WebpackReactModules {\n '/react/index.js': unknown;\n '/react/jsx-dev-runtime.js': unknown;\n '/react/jsx-runtime.js': unknown;\n '/react-dom/index.js': unknown;\n '/react-dom/client.js': unknown;\n}\n\nexport const WEBPACK_SHARED_RESOLVE_METADATA = Symbol.for(\n 'remote-components.webpackSharedResolveMetadata',\n);\n\nexport type WebpackSharedResolveMap = Record<string, unknown> & {\n [WEBPACK_SHARED_RESOLVE_METADATA]?: {\n protocol: 'legacy' | typeof SHARED_MODULE_MANIFEST_PROTOCOL;\n entries: SharedProviderEntry[];\n };\n};\n\nfunction normalizeWebpackSharedId(id: string): string {\n return id.replace(/^\\(ssr\\)\\/(?<relative>\\.\\/)?/, '');\n}\n\n/**\n * Builds the `resolve` map passed to `applySharedModules` for the Webpack\n * runtime. Combines:\n * - Static React module path keys (`/react/index.js`, etc.)\n * - Remote shared modules matched against host shared, with `(ssr)/` prefix stripped\n *\n * After building the map, resolves any factory functions by awaiting them\n * with the given bundle name.\n */\nexport async function buildWebpackResolve(\n hostShared: Record<string, SharedModuleFactory | unknown>,\n remoteShared: RemoteSharedModules,\n bundle: string,\n reactModules: WebpackReactModules,\n callerTag: LogLocation = 'SharedModuleResolver',\n): Promise<WebpackSharedResolveMap> {\n const sharedProviderPlan = await buildSharedProviderPlan({\n bundle,\n hostShared,\n remoteShared,\n callerTag,\n normalizeId: normalizeWebpackSharedId,\n additionalEntries: Object.entries(CORE_REACT_SHARED_MODULE_IDS).map(\n ([specifier, id]) => ({\n id,\n specifier,\n value: reactModules[id as keyof WebpackReactModules],\n required: true,\n singleton: true,\n scope: `remote:${bundle}`,\n }),\n ),\n });\n // @legacy(remote-components<=0.4.x): keep the enumerable resolved-value map so\n // old applySharedModules callers can patch Webpack modules directly. Once\n // remotes without sharedManifest are unsupported, applySharedModules can read\n // only WEBPACK_SHARED_RESOLVE_METADATA and this object body can be empty.\n const resolve: WebpackSharedResolveMap = {\n ...Object.fromEntries(\n sharedProviderPlan.entries.map((entry) => [\n entry.id,\n entry.provider.get(),\n ]),\n ),\n };\n\n Object.defineProperty(resolve, WEBPACK_SHARED_RESOLVE_METADATA, {\n enumerable: false,\n value: {\n protocol: sharedProviderPlan.protocol,\n entries: sharedProviderPlan.entries,\n },\n });\n\n return resolve;\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAGO;AAMP,oCAA6C;AAgBtC,MAAM,kCAAkC,OAAO;AAAA,EACpD;AACF;AASA,SAAS,yBAAyB,IAAoB;AACpD,SAAO,GAAG,QAAQ,gCAAgC,EAAE;AACtD;AAWA,eAAsB,oBACpB,YACA,cACA,QACA,cACA,YAAyB,wBACS;AAClC,QAAM,qBAAqB,UAAM,yCAAwB;AAAA,IACvD;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA,aAAa;AAAA,IACb,mBAAmB,OAAO,QAAQ,0DAA4B,EAAE;AAAA,MAC9D,CAAC,CAAC,WAAW,EAAE,OAAO;AAAA,QACpB;AAAA,QACA;AAAA,QACA,OAAO,aAAa,EAA+B;AAAA,QACnD,UAAU;AAAA,QACV,WAAW;AAAA,QACX,OAAO,UAAU;AAAA,MACnB;AAAA,IACF;AAAA,EACF,CAAC;AAKD,QAAM,UAAmC;AAAA,IACvC,GAAG,OAAO;AAAA,MACR,mBAAmB,QAAQ,IAAI,CAAC,UAAU;AAAA,QACxC,MAAM;AAAA,QACN,MAAM,SAAS,IAAI;AAAA,MACrB,CAAC;AAAA,IACH;AAAA,EACF;AAEA,SAAO,eAAe,SAAS,iCAAiC;AAAA,IAC9D,YAAY;AAAA,IACZ,OAAO;AAAA,MACL,UAAU,mBAAmB;AAAA,MAC7B,SAAS,mBAAmB;AAAA,IAC9B;AAAA,EACF,CAAC;AAED,SAAO;AACT;","names":[]}