remote-components 0.4.12 → 0.4.13

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 (63) hide show
  1. package/dist/{chunk-3PR3SWYZ.js → chunk-3DR4Z24C.js} +24 -2
  2. package/dist/chunk-3DR4Z24C.js.map +1 -0
  3. package/dist/{chunk-BEGVH64U.js → chunk-5BBEO4SE.js} +2 -2
  4. package/dist/{chunk-24LEEDHP.js → chunk-CBEDRGC7.js} +3 -3
  5. package/dist/{chunk-CLO56ON2.js → chunk-CLB2ATH2.js} +82 -4
  6. package/dist/chunk-CLB2ATH2.js.map +1 -0
  7. package/dist/{chunk-M6ACTSVB.js → chunk-IE7FXNFJ.js} +2 -2
  8. package/dist/{chunk-XWRB6CEA.cjs → chunk-KMG54QXV.cjs} +3 -3
  9. package/dist/{chunk-SULMNRMJ.cjs → chunk-KP544TQH.cjs} +23 -23
  10. package/dist/{chunk-HXCW3WDT.cjs → chunk-OI37BBBU.cjs} +25 -25
  11. package/dist/{chunk-TGE3K3TR.cjs → chunk-OVD7BRLD.cjs} +18 -18
  12. package/dist/{chunk-6PZEDIAK.cjs → chunk-OZCVXVKU.cjs} +24 -2
  13. package/dist/chunk-OZCVXVKU.cjs.map +1 -0
  14. package/dist/{chunk-YSJ4FKGI.cjs → chunk-W7RJUCZQ.cjs} +97 -19
  15. package/dist/chunk-W7RJUCZQ.cjs.map +1 -0
  16. package/dist/{chunk-RZGFQTX6.js → chunk-XEO3XD67.js} +8 -8
  17. package/dist/config/nextjs.cjs +10 -10
  18. package/dist/config/nextjs.js +7 -7
  19. package/dist/config/tailwind.cjs +53 -0
  20. package/dist/config/tailwind.cjs.map +1 -0
  21. package/dist/config/tailwind.d.ts +21 -0
  22. package/dist/config/tailwind.js +53 -0
  23. package/dist/config/tailwind.js.map +1 -0
  24. package/dist/host/html.cjs +20 -20
  25. package/dist/host/html.js +8 -8
  26. package/dist/host/nextjs/app/client-only.cjs +12 -12
  27. package/dist/host/nextjs/app/client-only.js +7 -7
  28. package/dist/host/react.cjs +8 -8
  29. package/dist/host/react.js +7 -7
  30. package/dist/internal/host/nextjs/app-client.cjs +7 -3
  31. package/dist/internal/host/nextjs/app-client.cjs.map +1 -1
  32. package/dist/internal/host/nextjs/app-client.js +7 -3
  33. package/dist/internal/host/nextjs/app-client.js.map +1 -1
  34. package/dist/internal/host/shared/remote-image-loader.cjs +23 -1
  35. package/dist/internal/host/shared/remote-image-loader.cjs.map +1 -1
  36. package/dist/internal/host/shared/remote-image-loader.js +23 -1
  37. package/dist/internal/host/shared/remote-image-loader.js.map +1 -1
  38. package/dist/remote/react/utils/portal.cjs +58 -0
  39. package/dist/remote/react/utils/portal.cjs.map +1 -0
  40. package/dist/remote/react/utils/portal.d.ts +12 -0
  41. package/dist/remote/react/utils/portal.js +58 -0
  42. package/dist/remote/react/utils/portal.js.map +1 -0
  43. package/dist/{turbopack-5VGMYUL4.cjs → turbopack-5WAY6QIC.cjs} +11 -11
  44. package/dist/{turbopack-43N2UJNN.js → turbopack-Z744H3T4.js} +4 -4
  45. package/dist/{webpack-FSN5UBA2.cjs → webpack-3GSL5AZJ.cjs} +11 -11
  46. package/dist/{webpack-LXE2UWTA.js → webpack-IQKPPBGH.js} +4 -4
  47. package/package.json +18 -1
  48. package/dist/chunk-3PR3SWYZ.js.map +0 -1
  49. package/dist/chunk-6PZEDIAK.cjs.map +0 -1
  50. package/dist/chunk-CLO56ON2.js.map +0 -1
  51. package/dist/chunk-YSJ4FKGI.cjs.map +0 -1
  52. /package/dist/{chunk-BEGVH64U.js.map → chunk-5BBEO4SE.js.map} +0 -0
  53. /package/dist/{chunk-24LEEDHP.js.map → chunk-CBEDRGC7.js.map} +0 -0
  54. /package/dist/{chunk-M6ACTSVB.js.map → chunk-IE7FXNFJ.js.map} +0 -0
  55. /package/dist/{chunk-XWRB6CEA.cjs.map → chunk-KMG54QXV.cjs.map} +0 -0
  56. /package/dist/{chunk-SULMNRMJ.cjs.map → chunk-KP544TQH.cjs.map} +0 -0
  57. /package/dist/{chunk-HXCW3WDT.cjs.map → chunk-OI37BBBU.cjs.map} +0 -0
  58. /package/dist/{chunk-TGE3K3TR.cjs.map → chunk-OVD7BRLD.cjs.map} +0 -0
  59. /package/dist/{chunk-RZGFQTX6.js.map → chunk-XEO3XD67.js.map} +0 -0
  60. /package/dist/{turbopack-5VGMYUL4.cjs.map → turbopack-5WAY6QIC.cjs.map} +0 -0
  61. /package/dist/{turbopack-43N2UJNN.js.map → turbopack-Z744H3T4.js.map} +0 -0
  62. /package/dist/{webpack-FSN5UBA2.cjs.map → webpack-3GSL5AZJ.cjs.map} +0 -0
  63. /package/dist/{webpack-LXE2UWTA.js.map → webpack-IQKPPBGH.js.map} +0 -0
@@ -0,0 +1,53 @@
1
+ // src/config/tailwind/index.ts
2
+ var DEFAULT_SELECTORS = [
3
+ ":host",
4
+ ":host *",
5
+ ":host *::before",
6
+ ":host *::after",
7
+ ":host *::backdrop",
8
+ ":host *::file-selector-button"
9
+ ];
10
+ function remoteComponentsTailwindShadowDom(options = {}) {
11
+ return {
12
+ postcssPlugin: "remote-components-tailwind-shadow-dom",
13
+ Once(root) {
14
+ const declarations = /* @__PURE__ */ new Map();
15
+ root.walkAtRules("property", (atRule) => {
16
+ const propertyName = atRule.params.trim();
17
+ if (!propertyName.startsWith("--tw-")) {
18
+ return;
19
+ }
20
+ atRule.walkDecls("initial-value", (declaration) => {
21
+ declarations.set(propertyName, declaration.value);
22
+ });
23
+ });
24
+ if (declarations.size === 0) {
25
+ return;
26
+ }
27
+ root.append({
28
+ type: "atrule",
29
+ name: "layer",
30
+ params: "properties",
31
+ raws: {},
32
+ nodes: [
33
+ {
34
+ type: "rule",
35
+ raws: {},
36
+ selector: (options.selectors ?? DEFAULT_SELECTORS).join(",\n"),
37
+ nodes: Array.from(declarations, ([prop, value]) => ({
38
+ type: "decl",
39
+ raws: {},
40
+ prop,
41
+ value
42
+ }))
43
+ }
44
+ ]
45
+ });
46
+ }
47
+ };
48
+ }
49
+ remoteComponentsTailwindShadowDom.postcss = true;
50
+ export {
51
+ remoteComponentsTailwindShadowDom
52
+ };
53
+ //# sourceMappingURL=tailwind.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../src/config/tailwind/index.ts"],"sourcesContent":["export interface RemoteComponentsTailwindShadowDomOptions {\n selectors?: string[];\n}\n\ninterface PostCssDeclaration {\n prop: string;\n value: string;\n}\n\ninterface PostCssAtRule {\n params: string;\n walkDecls(\n name: string,\n callback: (declaration: PostCssDeclaration) => void,\n ): void;\n}\n\ninterface PostCssRoot {\n walkAtRules(name: string, callback: (atRule: PostCssAtRule) => void): void;\n append(node: unknown): void;\n}\n\nconst DEFAULT_SELECTORS = [\n ':host',\n ':host *',\n ':host *::before',\n ':host *::after',\n ':host *::backdrop',\n ':host *::file-selector-button',\n];\n\nexport function remoteComponentsTailwindShadowDom(\n options: RemoteComponentsTailwindShadowDomOptions = {},\n) {\n return {\n postcssPlugin: 'remote-components-tailwind-shadow-dom',\n Once(root: PostCssRoot) {\n const declarations = new Map<string, string>();\n\n root.walkAtRules('property', (atRule) => {\n const propertyName = atRule.params.trim();\n\n if (!propertyName.startsWith('--tw-')) {\n return;\n }\n\n atRule.walkDecls('initial-value', (declaration) => {\n declarations.set(propertyName, declaration.value);\n });\n });\n\n if (declarations.size === 0) {\n return;\n }\n\n root.append({\n type: 'atrule',\n name: 'layer',\n params: 'properties',\n raws: {},\n nodes: [\n {\n type: 'rule',\n raws: {},\n selector: (options.selectors ?? DEFAULT_SELECTORS).join(',\\n'),\n nodes: Array.from(declarations, ([prop, value]) => ({\n type: 'decl',\n raws: {},\n prop,\n value,\n })),\n },\n ],\n });\n },\n };\n}\n\n(\n remoteComponentsTailwindShadowDom as typeof remoteComponentsTailwindShadowDom & {\n postcss?: boolean;\n }\n).postcss = true;\n"],"mappings":";AAsBA,IAAM,oBAAoB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,kCACd,UAAoD,CAAC,GACrD;AACA,SAAO;AAAA,IACL,eAAe;AAAA,IACf,KAAK,MAAmB;AACtB,YAAM,eAAe,oBAAI,IAAoB;AAE7C,WAAK,YAAY,YAAY,CAAC,WAAW;AACvC,cAAM,eAAe,OAAO,OAAO,KAAK;AAExC,YAAI,CAAC,aAAa,WAAW,OAAO,GAAG;AACrC;AAAA,QACF;AAEA,eAAO,UAAU,iBAAiB,CAAC,gBAAgB;AACjD,uBAAa,IAAI,cAAc,YAAY,KAAK;AAAA,QAClD,CAAC;AAAA,MACH,CAAC;AAED,UAAI,aAAa,SAAS,GAAG;AAC3B;AAAA,MACF;AAEA,WAAK,OAAO;AAAA,QACV,MAAM;AAAA,QACN,MAAM;AAAA,QACN,QAAQ;AAAA,QACR,MAAM,CAAC;AAAA,QACP,OAAO;AAAA,UACL;AAAA,YACE,MAAM;AAAA,YACN,MAAM,CAAC;AAAA,YACP,WAAW,QAAQ,aAAa,mBAAmB,KAAK,KAAK;AAAA,YAC7D,OAAO,MAAM,KAAK,cAAc,CAAC,CAAC,MAAM,KAAK,OAAO;AAAA,cAClD,MAAM;AAAA,cACN,MAAM,CAAC;AAAA,cACP;AAAA,cACA;AAAA,YACF,EAAE;AAAA,UACJ;AAAA,QACF;AAAA,MACF,CAAC;AAAA,IACH;AAAA,EACF;AACF;AAGE,kCAGA,UAAU;","names":[]}
@@ -7,16 +7,17 @@
7
7
 
8
8
 
9
9
 
10
- var _chunkHXCW3WDTcjs = require('../chunk-HXCW3WDT.cjs');
11
- require('../chunk-XWRB6CEA.cjs');
12
- require('../chunk-TGE3K3TR.cjs');
13
- require('../chunk-SULMNRMJ.cjs');
10
+ var _chunkOI37BBBUcjs = require('../chunk-OI37BBBU.cjs');
11
+ require('../chunk-TCFLEBQM.cjs');
12
+ require('../chunk-KMG54QXV.cjs');
13
+ require('../chunk-OVD7BRLD.cjs');
14
+ require('../chunk-KP544TQH.cjs');
14
15
  require('../chunk-3AX5WLZD.cjs');
15
16
 
16
17
 
17
18
 
18
19
 
19
- var _chunk6PZEDIAKcjs = require('../chunk-6PZEDIAK.cjs');
20
+ var _chunkOZCVXVKUcjs = require('../chunk-OZCVXVKU.cjs');
20
21
 
21
22
 
22
23
  var _chunkZ2SLBFQLcjs = require('../chunk-Z2SLBFQL.cjs');
@@ -28,7 +29,6 @@ require('../chunk-5KTAEO52.cjs');
28
29
 
29
30
  var _chunkBBXVML3Dcjs = require('../chunk-BBXVML3D.cjs');
30
31
  require('../chunk-KE7QPAQ4.cjs');
31
- require('../chunk-TCFLEBQM.cjs');
32
32
  require('../chunk-SHFJ5OQA.cjs');
33
33
 
34
34
  // src/host/html/index.tsx
@@ -125,10 +125,10 @@ async function getRuntime(type, url, bundle, shared, remoteShared, resolveClient
125
125
  };
126
126
  }
127
127
  if (type === "webpack") {
128
- const { webpackRuntime } = await Promise.resolve().then(() => _interopRequireWildcard(require("../webpack-FSN5UBA2.cjs")));
128
+ const { webpackRuntime } = await Promise.resolve().then(() => _interopRequireWildcard(require("../webpack-3GSL5AZJ.cjs")));
129
129
  return webpackRuntime(bundle, shared, remoteShared, resolveClientUrl);
130
130
  } else if (type === "turbopack") {
131
- const { turbopackRuntime } = await Promise.resolve().then(() => _interopRequireWildcard(require("../turbopack-5VGMYUL4.cjs")));
131
+ const { turbopackRuntime } = await Promise.resolve().then(() => _interopRequireWildcard(require("../turbopack-5WAY6QIC.cjs")));
132
132
  return turbopackRuntime(
133
133
  url,
134
134
  bundle,
@@ -149,15 +149,15 @@ async function getRuntime(type, url, bundle, shared, remoteShared, resolveClient
149
149
  var _jsxruntime = require('react/jsx-runtime');
150
150
  if (typeof HTMLElement !== "undefined") {
151
151
  class RemoteComponent extends HTMLElement {constructor(...args) { super(...args); RemoteComponent.prototype.__init.call(this);RemoteComponent.prototype.__init2.call(this);RemoteComponent.prototype.__init3.call(this);RemoteComponent.prototype.__init4.call(this);RemoteComponent.prototype.__init5.call(this);RemoteComponent.prototype.__init6.call(this);RemoteComponent.prototype.__init7.call(this); }
152
- __init() {this.name = _chunk6PZEDIAKcjs.DEFAULT_COMPONENT_NAME}
153
- __init2() {this.bundle = _chunk6PZEDIAKcjs.DEFAULT_BUNDLE_NAME}
152
+ __init() {this.name = _chunkOZCVXVKUcjs.DEFAULT_COMPONENT_NAME}
153
+ __init2() {this.bundle = _chunkOZCVXVKUcjs.DEFAULT_BUNDLE_NAME}
154
154
 
155
155
  __init3() {this.__next = null}
156
156
  __init4() {this.fouc = null}
157
- __init5() {this.hostState = _chunkHXCW3WDTcjs.createHostState.call(void 0, )}
157
+ __init5() {this.hostState = _chunkOI37BBBUcjs.createHostState.call(void 0, )}
158
158
  __init6() {this.root = null}
159
159
 
160
- __init7() {this.emitter = _chunkHXCW3WDTcjs.makeEventEmitter.call(void 0, this)}
160
+ __init7() {this.emitter = _chunkOI37BBBUcjs.makeEventEmitter.call(void 0, this)}
161
161
 
162
162
 
163
163
 
@@ -279,10 +279,10 @@ if (typeof HTMLElement !== "undefined") {
279
279
  let url = null;
280
280
  let html = this.innerHTML;
281
281
  if (src) {
282
- url = _chunkHXCW3WDTcjs.getClientOrServerUrl.call(void 0, src, window.location.href);
283
- this.name = _chunkHXCW3WDTcjs.resolveNameFromSrc.call(void 0, src, this.name);
282
+ url = _chunkOI37BBBUcjs.getClientOrServerUrl.call(void 0, src, window.location.href);
283
+ this.name = _chunkOI37BBBUcjs.resolveNameFromSrc.call(void 0, src, this.name);
284
284
  }
285
- const resolveClientUrl = url ? _chunkHXCW3WDTcjs.bindResolveClientUrl.call(void 0, this.resolveClientUrl, url.href) : void 0;
285
+ const resolveClientUrl = url ? _chunkOI37BBBUcjs.bindResolveClientUrl.call(void 0, this.resolveClientUrl, url.href) : void 0;
286
286
  if (!remoteComponentChild && url) {
287
287
  const fetchInit = {
288
288
  credentials: this.credentials || "same-origin"
@@ -293,7 +293,7 @@ if (typeof HTMLElement !== "undefined") {
293
293
  );
294
294
  let res;
295
295
  try {
296
- res = await _chunkHXCW3WDTcjs.fetchWithHooks.call(void 0, resolvedUrl, fetchInit, {
296
+ res = await _chunkOI37BBBUcjs.fetchWithHooks.call(void 0, resolvedUrl, fetchInit, {
297
297
  onRequest: this.onRequest,
298
298
  onResponse: this.onResponse,
299
299
  abortController: this.hostState.abortController
@@ -320,7 +320,7 @@ if (typeof HTMLElement !== "undefined") {
320
320
  }
321
321
  }
322
322
  const effectiveUrl = _nullishCoalesce(url, () => ( new URL(window.location.href)));
323
- const { doc, parsed } = _chunkHXCW3WDTcjs.preparePipeline.call(void 0, {
323
+ const { doc, parsed } = _chunkOI37BBBUcjs.preparePipeline.call(void 0, {
324
324
  html,
325
325
  name: this.name,
326
326
  url: effectiveUrl,
@@ -569,9 +569,9 @@ if (typeof HTMLElement !== "undefined") {
569
569
  };
570
570
  if (rsc) {
571
571
  _optionalChain([rsc, 'access', _65 => _65.parentElement, 'optionalAccess', _66 => _66.removeChild, 'call', _67 => _67(rsc)]);
572
- const rscName = `__remote_component_rsc_${_chunk6PZEDIAKcjs.escapeString.call(void 0,
572
+ const rscName = `__remote_component_rsc_${_chunkOZCVXVKUcjs.escapeString.call(void 0,
573
573
  url.href
574
- )}_${_chunk6PZEDIAKcjs.escapeString.call(void 0, this.name)}`;
574
+ )}_${_chunkOZCVXVKUcjs.escapeString.call(void 0, this.name)}`;
575
575
  const rscClone = document.createElement("script");
576
576
  rscClone.id = `${rscName}_rsc`;
577
577
  rscClone.textContent = _nullishCoalesce(_optionalChain([rsc, 'access', _68 => _68.textContent, 'optionalAccess', _69 => _69.replace, 'call', _70 => _70(
@@ -584,7 +584,7 @@ if (typeof HTMLElement !== "undefined") {
584
584
  name,
585
585
  initial
586
586
  }) => {
587
- const stream = _chunkHXCW3WDTcjs.createRSCStream.call(void 0,
587
+ const stream = _chunkOI37BBBUcjs.createRSCStream.call(void 0,
588
588
  rscName,
589
589
  _nullishCoalesce(self[rscName], () => ( [`0:[null]
590
590
  `]))
package/dist/host/html.js CHANGED
@@ -7,16 +7,17 @@ import {
7
7
  makeEventEmitter,
8
8
  preparePipeline,
9
9
  resolveNameFromSrc
10
- } from "../chunk-RZGFQTX6.js";
11
- import "../chunk-M6ACTSVB.js";
12
- import "../chunk-24LEEDHP.js";
13
- import "../chunk-BEGVH64U.js";
10
+ } from "../chunk-XEO3XD67.js";
11
+ import "../chunk-GAXJTFBV.js";
12
+ import "../chunk-IE7FXNFJ.js";
13
+ import "../chunk-CBEDRGC7.js";
14
+ import "../chunk-5BBEO4SE.js";
14
15
  import "../chunk-LEKG4YWI.js";
15
16
  import {
16
17
  DEFAULT_BUNDLE_NAME,
17
18
  DEFAULT_COMPONENT_NAME,
18
19
  escapeString
19
- } from "../chunk-3PR3SWYZ.js";
20
+ } from "../chunk-3DR4Z24C.js";
20
21
  import {
21
22
  getNamespace
22
23
  } from "../chunk-D5GNZB6O.js";
@@ -28,7 +29,6 @@ import {
28
29
  logError
29
30
  } from "../chunk-ULXU6XWH.js";
30
31
  import "../chunk-X6YKUJKH.js";
31
- import "../chunk-GAXJTFBV.js";
32
32
  import "../chunk-ENYGL5CO.js";
33
33
 
34
34
  // src/host/html/index.tsx
@@ -125,10 +125,10 @@ async function getRuntime(type, url, bundle, shared, remoteShared, resolveClient
125
125
  };
126
126
  }
127
127
  if (type === "webpack") {
128
- const { webpackRuntime } = await import("../webpack-LXE2UWTA.js");
128
+ const { webpackRuntime } = await import("../webpack-IQKPPBGH.js");
129
129
  return webpackRuntime(bundle, shared, remoteShared, resolveClientUrl);
130
130
  } else if (type === "turbopack") {
131
- const { turbopackRuntime } = await import("../turbopack-43N2UJNN.js");
131
+ const { turbopackRuntime } = await import("../turbopack-Z744H3T4.js");
132
132
  return turbopackRuntime(
133
133
  url,
134
134
  bundle,
@@ -1,26 +1,26 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true}); function _interopRequireWildcard(obj) { if (obj && obj.__esModule) { return obj; } else { var newObj = {}; if (obj != null) { for (var key in obj) { if (Object.prototype.hasOwnProperty.call(obj, key)) { newObj[key] = obj[key]; } } } newObj.default = obj; return newObj; } } function _nullishCoalesce(lhs, rhsFn) { if (lhs != null) { return lhs; } else { return rhsFn(); } } function _optionalChain(ops) { let lastAccessLHS = undefined; let value = ops[0]; let i = 1; while (i < ops.length) { const op = ops[i]; const fn = ops[i + 1]; i += 2; if ((op === 'optionalAccess' || op === 'optionalCall') && value == null) { return undefined; } if (op === 'access' || op === 'optionalAccess') { lastAccessLHS = value; value = fn(value); } else if (op === 'call' || op === 'optionalCall') { value = fn((...args) => value.call(lastAccessLHS, ...args)); lastAccessLHS = undefined; } } return value; }"use client";
2
2
 
3
3
 
4
- var _chunkYSJ4FKGIcjs = require('../../../chunk-YSJ4FKGI.cjs');
4
+ var _chunkW7RJUCZQcjs = require('../../../chunk-W7RJUCZQ.cjs');
5
5
 
6
6
 
7
- var _chunkHXCW3WDTcjs = require('../../../chunk-HXCW3WDT.cjs');
8
- require('../../../chunk-XWRB6CEA.cjs');
9
- require('../../../chunk-TGE3K3TR.cjs');
10
- require('../../../chunk-SULMNRMJ.cjs');
7
+ var _chunkOI37BBBUcjs = require('../../../chunk-OI37BBBU.cjs');
8
+ require('../../../chunk-TCFLEBQM.cjs');
9
+ require('../../../chunk-KMG54QXV.cjs');
10
+ require('../../../chunk-OVD7BRLD.cjs');
11
+ require('../../../chunk-KP544TQH.cjs');
11
12
  require('../../../chunk-3AX5WLZD.cjs');
12
13
  require('../../../chunk-N3SQTOSE.cjs');
13
14
 
14
15
 
15
16
 
16
- var _chunk6PZEDIAKcjs = require('../../../chunk-6PZEDIAK.cjs');
17
+ var _chunkOZCVXVKUcjs = require('../../../chunk-OZCVXVKU.cjs');
17
18
  require('../../../chunk-Z2SLBFQL.cjs');
18
19
  require('../../../chunk-5KTAEO52.cjs');
19
20
 
20
21
 
21
22
  var _chunkBBXVML3Dcjs = require('../../../chunk-BBXVML3D.cjs');
22
23
  require('../../../chunk-KE7QPAQ4.cjs');
23
- require('../../../chunk-TCFLEBQM.cjs');
24
24
  require('../../../chunk-SHFJ5OQA.cjs');
25
25
 
26
26
  // src/host/nextjs/app-client-only.tsx
@@ -31,8 +31,8 @@ var _react = require('react');
31
31
  function resolveForBundle(unbound, bundle) {
32
32
  if (!unbound)
33
33
  return void 0;
34
- const remoteSrc = _nullishCoalesce(_optionalChain([_chunk6PZEDIAKcjs.getScope.call(void 0, bundle), 'optionalAccess', _2 => _2.url, 'access', _3 => _3.href]), () => ( ""));
35
- return _chunkHXCW3WDTcjs.bindResolveClientUrl.call(void 0, unbound, remoteSrc);
34
+ const remoteSrc = _nullishCoalesce(_optionalChain([_chunkOZCVXVKUcjs.getScope.call(void 0, bundle), 'optionalAccess', _2 => _2.url, 'access', _3 => _3.href]), () => ( ""));
35
+ return _chunkOI37BBBUcjs.bindResolveClientUrl.call(void 0, unbound, remoteSrc);
36
36
  }
37
37
  function createImageLoaderSharedEntries({
38
38
  bound,
@@ -41,13 +41,13 @@ function createImageLoaderSharedEntries({
41
41
  const loaderEntry = (bundle) => {
42
42
  const resolveClientUrl = _nullishCoalesce(bound, () => ( resolveForBundle(unbound, bundle)));
43
43
  return Promise.resolve({
44
- default: _chunk6PZEDIAKcjs.createRemoteImageLoader.call(void 0, bundle, resolveClientUrl),
44
+ default: _chunkOZCVXVKUcjs.createRemoteImageLoader.call(void 0, bundle, resolveClientUrl),
45
45
  __esModule: true
46
46
  });
47
47
  };
48
48
  const imageEntry = async (bundle) => {
49
49
  const resolveClientUrl = _nullishCoalesce(bound, () => ( resolveForBundle(unbound, bundle)));
50
- const rawLoader = _chunk6PZEDIAKcjs.createRemoteImageLoader.call(void 0, bundle, resolveClientUrl);
50
+ const rawLoader = _chunkOZCVXVKUcjs.createRemoteImageLoader.call(void 0, bundle, resolveClientUrl);
51
51
  const remoteLoader = Object.assign(
52
52
  (p) => rawLoader({ ...p, config: { path: "/_next/image" } }),
53
53
  { __next_img_default: true }
@@ -191,7 +191,7 @@ function ConsumeRemoteComponent2(props) {
191
191
  return _nullishCoalesce(props.children, () => ( null));
192
192
  }
193
193
  return /* @__PURE__ */ _jsxruntime.jsx.call(void 0,
194
- _chunkYSJ4FKGIcjs.ConsumeRemoteComponent,
194
+ _chunkW7RJUCZQcjs.ConsumeRemoteComponent,
195
195
  {
196
196
  ...props,
197
197
  shared: sharedModules(props.shared, props.resolveClientUrl)
@@ -1,26 +1,26 @@
1
1
  "use client";
2
2
  import {
3
3
  ConsumeRemoteComponent
4
- } from "../../../chunk-CLO56ON2.js";
4
+ } from "../../../chunk-CLB2ATH2.js";
5
5
  import {
6
6
  bindResolveClientUrl
7
- } from "../../../chunk-RZGFQTX6.js";
8
- import "../../../chunk-M6ACTSVB.js";
9
- import "../../../chunk-24LEEDHP.js";
10
- import "../../../chunk-BEGVH64U.js";
7
+ } from "../../../chunk-XEO3XD67.js";
8
+ import "../../../chunk-GAXJTFBV.js";
9
+ import "../../../chunk-IE7FXNFJ.js";
10
+ import "../../../chunk-CBEDRGC7.js";
11
+ import "../../../chunk-5BBEO4SE.js";
11
12
  import "../../../chunk-LEKG4YWI.js";
12
13
  import "../../../chunk-RHGEBXPL.js";
13
14
  import {
14
15
  createRemoteImageLoader,
15
16
  getScope
16
- } from "../../../chunk-3PR3SWYZ.js";
17
+ } from "../../../chunk-3DR4Z24C.js";
17
18
  import "../../../chunk-D5GNZB6O.js";
18
19
  import "../../../chunk-STIJO4AG.js";
19
20
  import {
20
21
  logWarn
21
22
  } from "../../../chunk-ULXU6XWH.js";
22
23
  import "../../../chunk-X6YKUJKH.js";
23
- import "../../../chunk-GAXJTFBV.js";
24
24
  import "../../../chunk-ENYGL5CO.js";
25
25
 
26
26
  // src/host/nextjs/app-client-only.tsx
@@ -1,22 +1,22 @@
1
1
  "use strict";Object.defineProperty(exports, "__esModule", {value: true});
2
2
 
3
3
 
4
- var _chunkYSJ4FKGIcjs = require('../chunk-YSJ4FKGI.cjs');
5
- require('../chunk-HXCW3WDT.cjs');
6
- require('../chunk-XWRB6CEA.cjs');
7
- require('../chunk-TGE3K3TR.cjs');
8
- require('../chunk-SULMNRMJ.cjs');
4
+ var _chunkW7RJUCZQcjs = require('../chunk-W7RJUCZQ.cjs');
5
+ require('../chunk-OI37BBBU.cjs');
6
+ require('../chunk-TCFLEBQM.cjs');
7
+ require('../chunk-KMG54QXV.cjs');
8
+ require('../chunk-OVD7BRLD.cjs');
9
+ require('../chunk-KP544TQH.cjs');
9
10
  require('../chunk-3AX5WLZD.cjs');
10
11
  require('../chunk-N3SQTOSE.cjs');
11
- require('../chunk-6PZEDIAK.cjs');
12
+ require('../chunk-OZCVXVKU.cjs');
12
13
  require('../chunk-Z2SLBFQL.cjs');
13
14
  require('../chunk-5KTAEO52.cjs');
14
15
  require('../chunk-BBXVML3D.cjs');
15
16
  require('../chunk-KE7QPAQ4.cjs');
16
- require('../chunk-TCFLEBQM.cjs');
17
17
  require('../chunk-SHFJ5OQA.cjs');
18
18
 
19
19
 
20
20
 
21
- exports.ConsumeRemoteComponent = _chunkYSJ4FKGIcjs.ConsumeRemoteComponent; exports.useRemoteNavigate = _chunkYSJ4FKGIcjs.useRemoteNavigate;
21
+ exports.ConsumeRemoteComponent = _chunkW7RJUCZQcjs.ConsumeRemoteComponent; exports.useRemoteNavigate = _chunkW7RJUCZQcjs.useRemoteNavigate;
22
22
  //# sourceMappingURL=react.cjs.map
@@ -1,19 +1,19 @@
1
1
  import {
2
2
  ConsumeRemoteComponent,
3
3
  useRemoteNavigate
4
- } from "../chunk-CLO56ON2.js";
5
- import "../chunk-RZGFQTX6.js";
6
- import "../chunk-M6ACTSVB.js";
7
- import "../chunk-24LEEDHP.js";
8
- import "../chunk-BEGVH64U.js";
4
+ } from "../chunk-CLB2ATH2.js";
5
+ import "../chunk-XEO3XD67.js";
6
+ import "../chunk-GAXJTFBV.js";
7
+ import "../chunk-IE7FXNFJ.js";
8
+ import "../chunk-CBEDRGC7.js";
9
+ import "../chunk-5BBEO4SE.js";
9
10
  import "../chunk-LEKG4YWI.js";
10
11
  import "../chunk-RHGEBXPL.js";
11
- import "../chunk-3PR3SWYZ.js";
12
+ import "../chunk-3DR4Z24C.js";
12
13
  import "../chunk-D5GNZB6O.js";
13
14
  import "../chunk-STIJO4AG.js";
14
15
  import "../chunk-ULXU6XWH.js";
15
16
  import "../chunk-X6YKUJKH.js";
16
- import "../chunk-GAXJTFBV.js";
17
17
  import "../chunk-ENYGL5CO.js";
18
18
  export {
19
19
  ConsumeRemoteComponent,
@@ -182,6 +182,13 @@ function ConsumeRemoteComponentClient({
182
182
  });
183
183
  }
184
184
  }, [component, children]);
185
+ (0, import_react.useEffect)(() => {
186
+ return () => {
187
+ hostStateRef.current.abortController?.abort();
188
+ hostStateRef.current.abortController = void 0;
189
+ hostStateRef.current.stage = "idle";
190
+ };
191
+ }, []);
185
192
  (0, import_react.useEffect)(() => {
186
193
  (0, import_react.startTransition)(async () => {
187
194
  try {
@@ -266,9 +273,6 @@ function ConsumeRemoteComponentClient({
266
273
  setComponent(error);
267
274
  }
268
275
  });
269
- return () => {
270
- hostStateRef.current.abortController?.abort();
271
- };
272
276
  }, [
273
277
  component,
274
278
  name,
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/host/nextjs/app-client.tsx"],"sourcesContent":["'use client';\n\nimport {\n startTransition,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { createImageLoaderSharedEntries } from '#internal/host/nextjs/image-shared';\nimport { tryImportShared } from '#internal/host/nextjs/shared-import';\nimport { useResolveClientUrl } from '#internal/host/react/hooks/use-resolve-client-url';\nimport { getClientOrServerUrl } from '#internal/host/server/get-client-or-server-url';\nimport type { InternalResolveClientUrl } from '#internal/host/server/types';\nimport type { ConsumeClientOnlyConfig } from '#internal/host/shared/config';\nimport { runPipelineFromParsed } from '#internal/host/shared/pipeline';\nimport type { ConsumeServerData } from '#internal/host/shared/server-handoff';\nimport { createHostState } from '#internal/host/shared/state';\nimport { DEFAULT_ROUTE, RUNTIME_WEBPACK } from '#internal/runtime/constants';\nimport { loadStaticRemoteComponent } from '#internal/runtime/loaders/static-loader';\nimport type { MountOrUnmountFunction } from '#internal/runtime/types';\nimport { escapeString } from '#internal/utils';\nimport { logError } from '#internal/utils/logger';\nimport { routerImpl } from './app-compat';\nimport { RemoteComponentLinks } from './remote-component-links';\n\n/**\n * Resolves host-side shared modules (React, Next.js router, image loader, etc.)\n * and returns them as a map the loading pipeline can pass to remotes.\n */\nasync function resolveHostShared(\n resolveClientUrl: InternalResolveClientUrl | undefined,\n): Promise<Record<string, (bundle?: string) => Promise<unknown>>> {\n const shared = await tryImportShared();\n if ('__remote_components_missing_shared__' in shared) {\n await shared.__remote_components_missing_shared__();\n }\n return {\n 'next/router': routerImpl,\n ...shared,\n ...createImageLoaderSharedEntries({ bound: resolveClientUrl }),\n };\n}\n\n/**\n * Extends the RSC-serializable data with {@link ConsumeClientConfig} fields\n * (like `resolveClientUrl`) that can't cross the server→client boundary\n * but are accepted when this component is used directly as a client import.\n */\ninterface ConsumeRemoteComponentClientProps\n extends ConsumeServerData,\n ConsumeClientOnlyConfig {}\n\n/**\n * ConsumeRemoteComponentClient - Main component for rendering remote components\n *\n * This component handles the loading and rendering of remote microfrontends.\n * It supports both RSC (React Server Components) and Next.js Pages Router based components.\n */\nexport function ConsumeRemoteComponentClient({\n src,\n serverUrl,\n name,\n bundle,\n route = DEFAULT_ROUTE,\n runtime = RUNTIME_WEBPACK,\n data,\n nextData,\n scripts = [],\n links = [],\n remoteShared = {},\n isolate,\n mode = 'open',\n resolveClientUrl: resolveClientUrlProp,\n reset,\n type,\n children,\n}: ConsumeRemoteComponentClientProps) {\n const remoteComponentId = useId();\n const [component, setComponent] = useState<React.ReactNode | Error>(null);\n const url = getClientOrServerUrl(src, serverUrl);\n const resolveClientUrl = useResolveClientUrl(resolveClientUrlProp, url.href);\n const hostStateRef = useRef(createHostState());\n const metadataRef = useRef<{\n name: string;\n bundle: string;\n route: string;\n url: string;\n }>({\n name,\n bundle,\n route,\n url: url.href,\n });\n const startRef = useRef<HTMLTemplateElement | null>(null);\n const endRef = useRef<HTMLTemplateElement | null>(null);\n const prevRemoteComponentUnmountRef = useRef<{\n unmount: Set<MountOrUnmountFunction>;\n root: ShadowRoot | DocumentFragment | null;\n } | null>(null);\n\n // Handle errors by re-throwing them\n if (component instanceof Error) {\n throw component;\n }\n\n // determine whether to use children or loaded component\n const shouldUseChildren =\n (!component ||\n (component &&\n !nextData &&\n type !== 'remote-component' &&\n typeof (component as unknown as Promise<unknown>).then !==\n 'function')) &&\n // if the remote Next.js Pages Router application is in development mode\n // we don't use the provided static HTML\n // to mitigate layout shift when loading CSS using JavaScript on the client\n nextData?.buildId !== 'development';\n\n // The pathname is used so this URL is the same across server and client requests for relative src's\n const keySuffix = `${escapeString(bundle)}_${escapeString(\n url.pathname,\n )}_${escapeString(name)}`;\n const rscName = `__remote_components_rsc_${keySuffix}`;\n\n const self = globalThis as Record<\n `__remote_components_shadowroot_${string}`,\n ShadowRoot | null\n > &\n Record<`__remote_components_container_${string}`, HTMLDivElement | null>;\n const shadowRootKey = `__remote_components_shadowroot_${keySuffix}` as const;\n const shadowContainerRef = useRef<HTMLDivElement | null>(\n typeof document === 'undefined'\n ? null\n : document.querySelector(\n `[data-remote-component-id=\"shadowroot_${remoteComponentId}\"]`,\n ),\n );\n const shadowRootRef = useRef<ShadowRoot | null>(\n self[shadowRootKey] ?? shadowContainerRef.current?.shadowRoot ?? null,\n );\n const ssrShadowRootContentRef = useRef<NodeListOf<ChildNode> | null>(null);\n const ssrLinksStylesRef = useRef<(HTMLLinkElement | HTMLStyleElement)[]>([]);\n\n if (self[shadowRootKey] && shadowRootRef.current) {\n self[shadowRootKey] = null;\n }\n\n useLayoutEffect(() => {\n if (\n !shadowContainerRef.current ||\n shadowContainerRef.current !== shadowRootRef.current?.host\n ) {\n shadowRootRef.current = null;\n }\n\n if (\n isolate !== false &&\n typeof document !== 'undefined' &&\n !shadowRootRef.current\n ) {\n let shadowRootElement: ShadowRoot | null = null;\n const element = shadowContainerRef.current;\n\n shadowRootElement = self[shadowRootKey] ?? element?.shadowRoot ?? null;\n self[shadowRootKey] = null;\n\n if (!shadowRootElement && element) {\n // create a shadow root if it doesn't exist\n // this is a fallback for browsers that don't support declarative shadow DOM\n try {\n shadowRootElement = element.attachShadow({ mode });\n } catch {\n // do nothing if attachShadow fails because of existing shadow root\n }\n }\n\n if (shadowRootElement) {\n shadowRootRef.current = shadowRootElement;\n }\n }\n\n // Capture SSR content once the shadow root is available. This runs\n // while shouldUseChildren is still true (before the portal adds its\n // own content), so the query captures only server-rendered nodes.\n if (\n !ssrShadowRootContentRef.current &&\n shadowRootRef.current &&\n shouldUseChildren\n ) {\n ssrShadowRootContentRef.current =\n shadowRootRef.current.querySelectorAll('*');\n }\n\n if (\n shadowRootRef.current &&\n ssrShadowRootContentRef.current &&\n !shouldUseChildren\n ) {\n // remove all nodes from the shadow root except links\n ssrShadowRootContentRef.current.forEach((node) => {\n if (node.nodeName !== 'LINK' && node.nodeName !== 'STYLE') {\n node.parentNode?.removeChild(node);\n } else {\n ssrLinksStylesRef.current.push(\n node as HTMLLinkElement | HTMLStyleElement,\n );\n }\n });\n ssrShadowRootContentRef.current = null;\n }\n\n if (ssrLinksStylesRef.current.length > 0 && shadowRootRef.current) {\n const waitForLoad =\n shadowRootRef.current.querySelectorAll('link[data-wait]');\n if (waitForLoad.length > 0) {\n Promise.all(\n Array.from(waitForLoad).map(\n (link) =>\n new Promise<void>((resolve) => {\n link.addEventListener('load', () => resolve());\n link.addEventListener('error', () => resolve());\n }),\n ),\n )\n .then(() => {\n waitForLoad.forEach((el) => {\n el.removeAttribute('data-wait');\n });\n\n // remove SSR injected styles and links\n ssrLinksStylesRef.current.forEach((el) => {\n el.parentNode?.removeChild(el);\n });\n ssrLinksStylesRef.current = [];\n })\n .catch((e) => {\n logError('NextAppRouter', 'Error in cleanup.', e);\n });\n }\n }\n }, [isolate, mode, self, shadowRootKey, shouldUseChildren]);\n\n useEffect(() => {\n // run unmount functions when the component changes or unmounts\n if (prevRemoteComponentUnmountRef.current && component !== children) {\n const { unmount, root } = prevRemoteComponentUnmountRef.current;\n prevRemoteComponentUnmountRef.current = null;\n Promise.all(\n Array.from(unmount).map(async (unmountFn) => {\n try {\n await unmountFn(root);\n } catch (e) {\n logError('NextAppRouter', 'Error in unmount.', e);\n }\n }),\n ).catch((e) => {\n logError('NextAppRouter', 'Error in unmount cleanup.', e);\n });\n }\n }, [component, children]);\n\n useEffect(() => {\n startTransition(async () => {\n try {\n // if we have a component, we don't need to load it again\n if (\n (hostStateRef.current.stage !== 'loading' &&\n !component &&\n (isolate === false || shadowRootRef.current)) ||\n metadataRef.current.url !== url.href ||\n metadataRef.current.name !== name ||\n metadataRef.current.bundle !== bundle ||\n metadataRef.current.route !== route\n ) {\n // Abort any in-flight load before starting a new one\n hostStateRef.current.abortController?.abort();\n const controller = new AbortController();\n hostStateRef.current.abortController = controller;\n\n hostStateRef.current.stage = 'loading';\n metadataRef.current = {\n name,\n bundle,\n route,\n url: url.href,\n };\n\n // use the children as the component when type is remote-component\n if (type === 'remote-component') {\n setComponent(children);\n // load static scripts and execute mount functions\n // run this async but don't await it as we render children immediately\n loadStaticRemoteComponent(\n scripts as HTMLScriptElement[],\n url,\n resolveClientUrl,\n )\n .then(({ mount, unmount }) => {\n if (mount.size > 0) {\n let root: ShadowRoot | DocumentFragment | null =\n shadowRootRef.current;\n try {\n if (!root && startRef.current && endRef.current) {\n root = document.querySelectorAll(\n `#${startRef.current.id} ~ *:not(#${endRef.current.id}):has(~ #${endRef.current.id})`,\n ) as unknown as DocumentFragment;\n }\n } catch (e) {\n logError('NextAppRouter', 'Error finding root element.', e);\n }\n if (unmount.size > 0) {\n prevRemoteComponentUnmountRef.current = { unmount, root };\n }\n return Promise.all(\n Array.from(mount).map((mountFn) => mountFn(root)),\n );\n }\n })\n .catch((e) => {\n logError(\n 'NextAppRouter',\n 'Error loading static remote component.',\n e,\n );\n setComponent(e as Error);\n });\n return;\n }\n\n const result = await runPipelineFromParsed({\n url,\n name,\n signal: controller.signal,\n payload: {\n name,\n bundle,\n route,\n runtime,\n data,\n nextData,\n scripts,\n },\n shared: resolveHostShared(resolveClientUrl),\n remoteShared,\n container: shadowRootRef.current,\n resolveClientUrl,\n rscName,\n });\n\n if (result.status === 'aborted') {\n return;\n }\n if (result.status === 'error') {\n hostStateRef.current.stage = 'error';\n setComponent(result.error);\n } else {\n hostStateRef.current.stage = 'loaded';\n setComponent(result.component);\n }\n }\n } catch (error: unknown) {\n hostStateRef.current.stage = 'error';\n setComponent(error as Error);\n }\n });\n\n return () => {\n hostStateRef.current.abortController?.abort();\n };\n }, [\n component,\n name,\n bundle,\n route,\n runtime,\n scripts,\n data,\n nextData,\n remoteShared,\n children,\n isolate,\n type,\n rscName,\n url,\n resolveClientUrl,\n ]);\n\n if (\n nextData?.buildId === 'development' &&\n shadowRootRef.current &&\n isolate !== false &&\n reset &&\n !shadowRootRef.current.querySelector('[data-remote-components-reset]')\n ) {\n // inject reset styles into the shadow root\n const style = document.createElement('style');\n style.setAttribute('data-remote-components-reset', '');\n style.textContent = `:host { all: initial; }`;\n shadowRootRef.current.insertBefore(style, shadowRootRef.current.firstChild);\n } else if (\n shadowRootRef.current &&\n isolate !== false &&\n !reset &&\n shadowRootRef.current.querySelector('[data-remote-components-reset]')\n ) {\n // ensure reset styles are the first child in the shadow root\n const style = shadowRootRef.current.querySelector(\n '[data-remote-components-reset]',\n );\n if (style && shadowRootRef.current.firstChild !== style) {\n shadowRootRef.current.removeChild(style);\n }\n }\n\n const linksToRender = (\n <RemoteComponentLinks\n links={links}\n url={url}\n serverUrl={serverUrl}\n bundle={bundle}\n isolate={isolate}\n reset={reset}\n isDevelopment={nextData?.buildId === 'development'}\n />\n );\n\n let componentToRender = shouldUseChildren\n ? children\n : (component as React.ReactNode);\n\n if (isolate !== false) {\n componentToRender = (\n <div\n data-remote-component-id={`shadowroot_${remoteComponentId}`}\n data-remote-component-isolation-root=\"\"\n id={`shadowroot_${name}`}\n ref={shadowContainerRef}\n >\n {typeof document === 'undefined' ? (\n // eslint-disable-next-line react/no-unknown-property\n <template shadowrootmode={mode}>\n {mode === 'closed' ? (\n <div\n dangerouslySetInnerHTML={{\n __html: `<img\n alt=\"\" decoding=\"async\" style=\"display:none\"\n src=\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==\"\n onload=\"(function(el){\n const root = el.getRootNode();\n globalThis.${shadowRootKey} = root;\n el.parentElement.remove();\n })(this)\"\n />`,\n }}\n />\n ) : null}\n {linksToRender}\n {shouldUseChildren ? children : null}\n </template>\n ) : null}\n {typeof document !== 'undefined' &&\n shadowRootRef.current &&\n !shouldUseChildren\n ? createPortal(\n <>\n {linksToRender}\n {componentToRender}\n </>,\n shadowRootRef.current,\n )\n : null}\n </div>\n );\n }\n\n return (\n <>\n {isolate === false ? (\n <template id={`${name}_start`} ref={startRef} />\n ) : null}\n <script data-remote-component type=\"application/json\">\n {JSON.stringify({\n name,\n bundle,\n route,\n runtime,\n })}\n </script>\n {isolate === false ? linksToRender : null}\n {componentToRender}\n {nextData ? (\n <script\n id={`${bundle}_${route.replace(\n /[^a-zA-Z0-9]+/g,\n '_',\n )}${name}_next_data`}\n type=\"application/json\"\n >\n {JSON.stringify(nextData)}\n </script>\n ) : null}\n {isolate === false ? <template id={`${name}_end`} ref={endRef} /> : null}\n </>\n );\n}\n"],"mappings":"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","names":[]}
1
+ {"version":3,"sources":["../../../../src/host/nextjs/app-client.tsx"],"sourcesContent":["'use client';\n\nimport {\n startTransition,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n} from 'react';\nimport { createPortal } from 'react-dom';\nimport { createImageLoaderSharedEntries } from '#internal/host/nextjs/image-shared';\nimport { tryImportShared } from '#internal/host/nextjs/shared-import';\nimport { useResolveClientUrl } from '#internal/host/react/hooks/use-resolve-client-url';\nimport { getClientOrServerUrl } from '#internal/host/server/get-client-or-server-url';\nimport type { InternalResolveClientUrl } from '#internal/host/server/types';\nimport type { ConsumeClientOnlyConfig } from '#internal/host/shared/config';\nimport { runPipelineFromParsed } from '#internal/host/shared/pipeline';\nimport type { ConsumeServerData } from '#internal/host/shared/server-handoff';\nimport { createHostState } from '#internal/host/shared/state';\nimport { DEFAULT_ROUTE, RUNTIME_WEBPACK } from '#internal/runtime/constants';\nimport { loadStaticRemoteComponent } from '#internal/runtime/loaders/static-loader';\nimport type { MountOrUnmountFunction } from '#internal/runtime/types';\nimport { escapeString } from '#internal/utils';\nimport { logError } from '#internal/utils/logger';\nimport { routerImpl } from './app-compat';\nimport { RemoteComponentLinks } from './remote-component-links';\n\n/**\n * Resolves host-side shared modules (React, Next.js router, image loader, etc.)\n * and returns them as a map the loading pipeline can pass to remotes.\n */\nasync function resolveHostShared(\n resolveClientUrl: InternalResolveClientUrl | undefined,\n): Promise<Record<string, (bundle?: string) => Promise<unknown>>> {\n const shared = await tryImportShared();\n if ('__remote_components_missing_shared__' in shared) {\n await shared.__remote_components_missing_shared__();\n }\n return {\n 'next/router': routerImpl,\n ...shared,\n ...createImageLoaderSharedEntries({ bound: resolveClientUrl }),\n };\n}\n\n/**\n * Extends the RSC-serializable data with {@link ConsumeClientConfig} fields\n * (like `resolveClientUrl`) that can't cross the server→client boundary\n * but are accepted when this component is used directly as a client import.\n */\ninterface ConsumeRemoteComponentClientProps\n extends ConsumeServerData,\n ConsumeClientOnlyConfig {}\n\n/**\n * ConsumeRemoteComponentClient - Main component for rendering remote components\n *\n * This component handles the loading and rendering of remote microfrontends.\n * It supports both RSC (React Server Components) and Next.js Pages Router based components.\n */\nexport function ConsumeRemoteComponentClient({\n src,\n serverUrl,\n name,\n bundle,\n route = DEFAULT_ROUTE,\n runtime = RUNTIME_WEBPACK,\n data,\n nextData,\n scripts = [],\n links = [],\n remoteShared = {},\n isolate,\n mode = 'open',\n resolveClientUrl: resolveClientUrlProp,\n reset,\n type,\n children,\n}: ConsumeRemoteComponentClientProps) {\n const remoteComponentId = useId();\n const [component, setComponent] = useState<React.ReactNode | Error>(null);\n const url = getClientOrServerUrl(src, serverUrl);\n const resolveClientUrl = useResolveClientUrl(resolveClientUrlProp, url.href);\n const hostStateRef = useRef(createHostState());\n const metadataRef = useRef<{\n name: string;\n bundle: string;\n route: string;\n url: string;\n }>({\n name,\n bundle,\n route,\n url: url.href,\n });\n const startRef = useRef<HTMLTemplateElement | null>(null);\n const endRef = useRef<HTMLTemplateElement | null>(null);\n const prevRemoteComponentUnmountRef = useRef<{\n unmount: Set<MountOrUnmountFunction>;\n root: ShadowRoot | DocumentFragment | null;\n } | null>(null);\n\n // Handle errors by re-throwing them\n if (component instanceof Error) {\n throw component;\n }\n\n // determine whether to use children or loaded component\n const shouldUseChildren =\n (!component ||\n (component &&\n !nextData &&\n type !== 'remote-component' &&\n typeof (component as unknown as Promise<unknown>).then !==\n 'function')) &&\n // if the remote Next.js Pages Router application is in development mode\n // we don't use the provided static HTML\n // to mitigate layout shift when loading CSS using JavaScript on the client\n nextData?.buildId !== 'development';\n\n // The pathname is used so this URL is the same across server and client requests for relative src's\n const keySuffix = `${escapeString(bundle)}_${escapeString(\n url.pathname,\n )}_${escapeString(name)}`;\n const rscName = `__remote_components_rsc_${keySuffix}`;\n\n const self = globalThis as Record<\n `__remote_components_shadowroot_${string}`,\n ShadowRoot | null\n > &\n Record<`__remote_components_container_${string}`, HTMLDivElement | null>;\n const shadowRootKey = `__remote_components_shadowroot_${keySuffix}` as const;\n const shadowContainerRef = useRef<HTMLDivElement | null>(\n typeof document === 'undefined'\n ? null\n : document.querySelector(\n `[data-remote-component-id=\"shadowroot_${remoteComponentId}\"]`,\n ),\n );\n const shadowRootRef = useRef<ShadowRoot | null>(\n self[shadowRootKey] ?? shadowContainerRef.current?.shadowRoot ?? null,\n );\n const ssrShadowRootContentRef = useRef<NodeListOf<ChildNode> | null>(null);\n const ssrLinksStylesRef = useRef<(HTMLLinkElement | HTMLStyleElement)[]>([]);\n\n if (self[shadowRootKey] && shadowRootRef.current) {\n self[shadowRootKey] = null;\n }\n\n useLayoutEffect(() => {\n if (\n !shadowContainerRef.current ||\n shadowContainerRef.current !== shadowRootRef.current?.host\n ) {\n shadowRootRef.current = null;\n }\n\n if (\n isolate !== false &&\n typeof document !== 'undefined' &&\n !shadowRootRef.current\n ) {\n let shadowRootElement: ShadowRoot | null = null;\n const element = shadowContainerRef.current;\n\n shadowRootElement = self[shadowRootKey] ?? element?.shadowRoot ?? null;\n self[shadowRootKey] = null;\n\n if (!shadowRootElement && element) {\n // create a shadow root if it doesn't exist\n // this is a fallback for browsers that don't support declarative shadow DOM\n try {\n shadowRootElement = element.attachShadow({ mode });\n } catch {\n // do nothing if attachShadow fails because of existing shadow root\n }\n }\n\n if (shadowRootElement) {\n shadowRootRef.current = shadowRootElement;\n }\n }\n\n // Capture SSR content once the shadow root is available. This runs\n // while shouldUseChildren is still true (before the portal adds its\n // own content), so the query captures only server-rendered nodes.\n if (\n !ssrShadowRootContentRef.current &&\n shadowRootRef.current &&\n shouldUseChildren\n ) {\n ssrShadowRootContentRef.current =\n shadowRootRef.current.querySelectorAll('*');\n }\n\n if (\n shadowRootRef.current &&\n ssrShadowRootContentRef.current &&\n !shouldUseChildren\n ) {\n // remove all nodes from the shadow root except links\n ssrShadowRootContentRef.current.forEach((node) => {\n if (node.nodeName !== 'LINK' && node.nodeName !== 'STYLE') {\n node.parentNode?.removeChild(node);\n } else {\n ssrLinksStylesRef.current.push(\n node as HTMLLinkElement | HTMLStyleElement,\n );\n }\n });\n ssrShadowRootContentRef.current = null;\n }\n\n if (ssrLinksStylesRef.current.length > 0 && shadowRootRef.current) {\n const waitForLoad =\n shadowRootRef.current.querySelectorAll('link[data-wait]');\n if (waitForLoad.length > 0) {\n Promise.all(\n Array.from(waitForLoad).map(\n (link) =>\n new Promise<void>((resolve) => {\n link.addEventListener('load', () => resolve());\n link.addEventListener('error', () => resolve());\n }),\n ),\n )\n .then(() => {\n waitForLoad.forEach((el) => {\n el.removeAttribute('data-wait');\n });\n\n // remove SSR injected styles and links\n ssrLinksStylesRef.current.forEach((el) => {\n el.parentNode?.removeChild(el);\n });\n ssrLinksStylesRef.current = [];\n })\n .catch((e) => {\n logError('NextAppRouter', 'Error in cleanup.', e);\n });\n }\n }\n }, [isolate, mode, self, shadowRootKey, shouldUseChildren]);\n\n useEffect(() => {\n // run unmount functions when the component changes or unmounts\n if (prevRemoteComponentUnmountRef.current && component !== children) {\n const { unmount, root } = prevRemoteComponentUnmountRef.current;\n prevRemoteComponentUnmountRef.current = null;\n Promise.all(\n Array.from(unmount).map(async (unmountFn) => {\n try {\n await unmountFn(root);\n } catch (e) {\n logError('NextAppRouter', 'Error in unmount.', e);\n }\n }),\n ).catch((e) => {\n logError('NextAppRouter', 'Error in unmount cleanup.', e);\n });\n }\n }, [component, children]);\n\n useEffect(() => {\n return () => {\n hostStateRef.current.abortController?.abort();\n hostStateRef.current.abortController = undefined;\n hostStateRef.current.stage = 'idle';\n };\n }, []);\n\n useEffect(() => {\n startTransition(async () => {\n try {\n // if we have a component, we don't need to load it again\n if (\n (hostStateRef.current.stage !== 'loading' &&\n !component &&\n (isolate === false || shadowRootRef.current)) ||\n metadataRef.current.url !== url.href ||\n metadataRef.current.name !== name ||\n metadataRef.current.bundle !== bundle ||\n metadataRef.current.route !== route\n ) {\n // Abort any in-flight load before starting a new one\n hostStateRef.current.abortController?.abort();\n const controller = new AbortController();\n hostStateRef.current.abortController = controller;\n\n hostStateRef.current.stage = 'loading';\n metadataRef.current = {\n name,\n bundle,\n route,\n url: url.href,\n };\n\n // use the children as the component when type is remote-component\n if (type === 'remote-component') {\n setComponent(children);\n // load static scripts and execute mount functions\n // run this async but don't await it as we render children immediately\n loadStaticRemoteComponent(\n scripts as HTMLScriptElement[],\n url,\n resolveClientUrl,\n )\n .then(({ mount, unmount }) => {\n if (mount.size > 0) {\n let root: ShadowRoot | DocumentFragment | null =\n shadowRootRef.current;\n try {\n if (!root && startRef.current && endRef.current) {\n root = document.querySelectorAll(\n `#${startRef.current.id} ~ *:not(#${endRef.current.id}):has(~ #${endRef.current.id})`,\n ) as unknown as DocumentFragment;\n }\n } catch (e) {\n logError('NextAppRouter', 'Error finding root element.', e);\n }\n if (unmount.size > 0) {\n prevRemoteComponentUnmountRef.current = { unmount, root };\n }\n return Promise.all(\n Array.from(mount).map((mountFn) => mountFn(root)),\n );\n }\n })\n .catch((e) => {\n logError(\n 'NextAppRouter',\n 'Error loading static remote component.',\n e,\n );\n setComponent(e as Error);\n });\n return;\n }\n\n const result = await runPipelineFromParsed({\n url,\n name,\n signal: controller.signal,\n payload: {\n name,\n bundle,\n route,\n runtime,\n data,\n nextData,\n scripts,\n },\n shared: resolveHostShared(resolveClientUrl),\n remoteShared,\n container: shadowRootRef.current,\n resolveClientUrl,\n rscName,\n });\n\n if (result.status === 'aborted') {\n return;\n }\n if (result.status === 'error') {\n hostStateRef.current.stage = 'error';\n setComponent(result.error);\n } else {\n hostStateRef.current.stage = 'loaded';\n setComponent(result.component);\n }\n }\n } catch (error: unknown) {\n hostStateRef.current.stage = 'error';\n setComponent(error as Error);\n }\n });\n }, [\n component,\n name,\n bundle,\n route,\n runtime,\n scripts,\n data,\n nextData,\n remoteShared,\n children,\n isolate,\n type,\n rscName,\n url,\n resolveClientUrl,\n ]);\n\n if (\n nextData?.buildId === 'development' &&\n shadowRootRef.current &&\n isolate !== false &&\n reset &&\n !shadowRootRef.current.querySelector('[data-remote-components-reset]')\n ) {\n // inject reset styles into the shadow root\n const style = document.createElement('style');\n style.setAttribute('data-remote-components-reset', '');\n style.textContent = `:host { all: initial; }`;\n shadowRootRef.current.insertBefore(style, shadowRootRef.current.firstChild);\n } else if (\n shadowRootRef.current &&\n isolate !== false &&\n !reset &&\n shadowRootRef.current.querySelector('[data-remote-components-reset]')\n ) {\n // ensure reset styles are the first child in the shadow root\n const style = shadowRootRef.current.querySelector(\n '[data-remote-components-reset]',\n );\n if (style && shadowRootRef.current.firstChild !== style) {\n shadowRootRef.current.removeChild(style);\n }\n }\n\n const linksToRender = (\n <RemoteComponentLinks\n links={links}\n url={url}\n serverUrl={serverUrl}\n bundle={bundle}\n isolate={isolate}\n reset={reset}\n isDevelopment={nextData?.buildId === 'development'}\n />\n );\n\n let componentToRender = shouldUseChildren\n ? children\n : (component as React.ReactNode);\n\n if (isolate !== false) {\n componentToRender = (\n <div\n data-remote-component-id={`shadowroot_${remoteComponentId}`}\n data-remote-component-isolation-root=\"\"\n id={`shadowroot_${name}`}\n ref={shadowContainerRef}\n >\n {typeof document === 'undefined' ? (\n // eslint-disable-next-line react/no-unknown-property\n <template shadowrootmode={mode}>\n {mode === 'closed' ? (\n <div\n dangerouslySetInnerHTML={{\n __html: `<img\n alt=\"\" decoding=\"async\" style=\"display:none\"\n src=\"data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==\"\n onload=\"(function(el){\n const root = el.getRootNode();\n globalThis.${shadowRootKey} = root;\n el.parentElement.remove();\n })(this)\"\n />`,\n }}\n />\n ) : null}\n {linksToRender}\n {shouldUseChildren ? children : null}\n </template>\n ) : null}\n {typeof document !== 'undefined' &&\n shadowRootRef.current &&\n !shouldUseChildren\n ? createPortal(\n <>\n {linksToRender}\n {componentToRender}\n </>,\n shadowRootRef.current,\n )\n : null}\n </div>\n );\n }\n\n return (\n <>\n {isolate === false ? (\n <template id={`${name}_start`} ref={startRef} />\n ) : null}\n <script data-remote-component type=\"application/json\">\n {JSON.stringify({\n name,\n bundle,\n route,\n runtime,\n })}\n </script>\n {isolate === false ? linksToRender : null}\n {componentToRender}\n {nextData ? (\n <script\n id={`${bundle}_${route.replace(\n /[^a-zA-Z0-9]+/g,\n '_',\n )}${name}_next_data`}\n type=\"application/json\"\n >\n {JSON.stringify(nextData)}\n </script>\n ) : null}\n {isolate === false ? <template id={`${name}_end`} ref={endRef} /> : null}\n </>\n );\n}\n"],"mappings":"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","names":[]}
@@ -166,6 +166,13 @@ function ConsumeRemoteComponentClient({
166
166
  });
167
167
  }
168
168
  }, [component, children]);
169
+ useEffect(() => {
170
+ return () => {
171
+ hostStateRef.current.abortController?.abort();
172
+ hostStateRef.current.abortController = void 0;
173
+ hostStateRef.current.stage = "idle";
174
+ };
175
+ }, []);
169
176
  useEffect(() => {
170
177
  startTransition(async () => {
171
178
  try {
@@ -250,9 +257,6 @@ function ConsumeRemoteComponentClient({
250
257
  setComponent(error);
251
258
  }
252
259
  });
253
- return () => {
254
- hostStateRef.current.abortController?.abort();
255
- };
256
260
  }, [
257
261
  component,
258
262
  name,