@makeswift/runtime 0.25.0-canary.5 → 0.25.0-canary.6

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 (56) hide show
  1. package/dist/cjs/api-handler/handlers/manifest.js +1 -1
  2. package/dist/cjs/next/components/framework-provider/app-router/HeadSnippet.js +2 -2
  3. package/dist/cjs/next/components/framework-provider/app-router/HeadSnippet.js.map +1 -1
  4. package/dist/cjs/next/components/framework-provider/index.js +5 -2
  5. package/dist/cjs/next/components/framework-provider/index.js.map +1 -1
  6. package/dist/cjs/next/components/framework-provider/pages-router/HeadSnippet.js +6 -2
  7. package/dist/cjs/next/components/framework-provider/pages-router/HeadSnippet.js.map +1 -1
  8. package/dist/cjs/next/components/tests/__fixtures__/page-document.js +46 -0
  9. package/dist/cjs/next/components/tests/__fixtures__/page-document.js.map +1 -0
  10. package/dist/cjs/next/testing/element-data.js +4 -3
  11. package/dist/cjs/next/testing/element-data.js.map +1 -1
  12. package/dist/cjs/next/testing/index.js +3 -1
  13. package/dist/cjs/next/testing/index.js.map +1 -1
  14. package/dist/cjs/next/testing/page-rendering.js +52 -0
  15. package/dist/cjs/next/testing/page-rendering.js.map +1 -0
  16. package/dist/cjs/next/testing/react-provider.js +5 -3
  17. package/dist/cjs/next/testing/react-provider.js.map +1 -1
  18. package/dist/cjs/runtimes/react/components/page/HeadSnippet.js +3 -3
  19. package/dist/cjs/runtimes/react/components/page/HeadSnippet.js.map +1 -1
  20. package/dist/esm/api-handler/handlers/manifest.js +1 -1
  21. package/dist/esm/next/components/framework-provider/app-router/HeadSnippet.js +3 -3
  22. package/dist/esm/next/components/framework-provider/app-router/HeadSnippet.js.map +1 -1
  23. package/dist/esm/next/components/framework-provider/index.js +5 -2
  24. package/dist/esm/next/components/framework-provider/index.js.map +1 -1
  25. package/dist/esm/next/components/framework-provider/pages-router/HeadSnippet.js +9 -5
  26. package/dist/esm/next/components/framework-provider/pages-router/HeadSnippet.js.map +1 -1
  27. package/dist/esm/next/components/tests/__fixtures__/page-document.js +22 -0
  28. package/dist/esm/next/components/tests/__fixtures__/page-document.js.map +1 -0
  29. package/dist/esm/next/testing/element-data.js +4 -3
  30. package/dist/esm/next/testing/element-data.js.map +1 -1
  31. package/dist/esm/next/testing/index.js +1 -0
  32. package/dist/esm/next/testing/index.js.map +1 -1
  33. package/dist/esm/next/testing/page-rendering.js +28 -0
  34. package/dist/esm/next/testing/page-rendering.js.map +1 -0
  35. package/dist/esm/next/testing/react-provider.js +5 -3
  36. package/dist/esm/next/testing/react-provider.js.map +1 -1
  37. package/dist/esm/runtimes/react/components/page/HeadSnippet.js +2 -2
  38. package/dist/esm/runtimes/react/components/page/HeadSnippet.js.map +1 -1
  39. package/dist/types/next/components/framework-provider/index.d.ts +3 -1
  40. package/dist/types/next/components/framework-provider/index.d.ts.map +1 -1
  41. package/dist/types/next/components/framework-provider/pages-router/HeadSnippet.d.ts.map +1 -1
  42. package/dist/types/next/components/tests/__fixtures__/page-document.d.ts +3 -0
  43. package/dist/types/next/components/tests/__fixtures__/page-document.d.ts.map +1 -0
  44. package/dist/types/next/components/tests/makeswift-page-snippets-rendering.test.d.ts +3 -0
  45. package/dist/types/next/components/tests/makeswift-page-snippets-rendering.test.d.ts.map +1 -0
  46. package/dist/types/next/testing/element-data.d.ts +2 -2
  47. package/dist/types/next/testing/element-data.d.ts.map +1 -1
  48. package/dist/types/next/testing/index.d.ts +1 -0
  49. package/dist/types/next/testing/index.d.ts.map +1 -1
  50. package/dist/types/next/testing/page-rendering.d.ts +7 -0
  51. package/dist/types/next/testing/page-rendering.d.ts.map +1 -0
  52. package/dist/types/next/testing/react-provider.d.ts +2 -1
  53. package/dist/types/next/testing/react-provider.d.ts.map +1 -1
  54. package/dist/types/runtimes/react/components/page/HeadSnippet.d.ts +1 -1
  55. package/dist/types/runtimes/react/components/page/HeadSnippet.d.ts.map +1 -1
  56. package/package.json +2 -2
@@ -28,7 +28,7 @@ async function manifestHandler(req, { apiKey, manifest }) {
28
28
  return import_request_response.ApiResponse.json({ message: "Unauthorized" }, { status: 401 });
29
29
  }
30
30
  return import_request_response.ApiResponse.json({
31
- version: "0.25.0-canary.5",
31
+ version: "0.25.0-canary.6",
32
32
  previewMode: false,
33
33
  draftMode: false,
34
34
  interactionMode: true,
@@ -26,13 +26,13 @@ var import_react = require("react");
26
26
  var import_navigation = require("next/navigation");
27
27
  var import_HeadSnippet = require("../../../../runtimes/react/components/page/HeadSnippet");
28
28
  function HeadSnippet({ snippet }) {
29
- const headSnippetElement = (0, import_HeadSnippet.snippetToElement)(snippet);
29
+ const headSnippetElements = (0, import_HeadSnippet.snippetToElements)(snippet);
30
30
  const insertedServerHTML = (0, import_react.useRef)(false);
31
31
  (0, import_navigation.useServerInsertedHTML)(() => {
32
32
  if (insertedServerHTML.current)
33
33
  return;
34
34
  insertedServerHTML.current = true;
35
- return headSnippetElement;
35
+ return headSnippetElements;
36
36
  });
37
37
  return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_HeadSnippet.BaseHeadSnippet, { snippet });
38
38
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/next/components/framework-provider/app-router/HeadSnippet.tsx"],"sourcesContent":["import { useRef } from 'react'\nimport { useServerInsertedHTML } from 'next/navigation'\n\nimport { type Snippet } from '../../../../client'\n\nimport {\n BaseHeadSnippet,\n snippetToElement,\n} from '../../../../runtimes/react/components/page/HeadSnippet'\n\nexport function HeadSnippet({ snippet }: { snippet: Snippet }) {\n const headSnippetElement = snippetToElement(snippet)\n const insertedServerHTML = useRef(false)\n\n useServerInsertedHTML(() => {\n if (insertedServerHTML.current) return\n\n insertedServerHTML.current = true\n\n return headSnippetElement\n })\n\n return <BaseHeadSnippet snippet={snippet} />\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBS;AAtBT,mBAAuB;AACvB,wBAAsC;AAItC,yBAGO;AAEA,SAAS,YAAY,EAAE,QAAQ,GAAyB;AAC7D,QAAM,yBAAqB,qCAAiB,OAAO;AACnD,QAAM,yBAAqB,qBAAO,KAAK;AAEvC,+CAAsB,MAAM;AAC1B,QAAI,mBAAmB;AAAS;AAEhC,uBAAmB,UAAU;AAE7B,WAAO;AAAA,EACT,CAAC;AAED,SAAO,4CAAC,sCAAgB,SAAkB;AAC5C;","names":[]}
1
+ {"version":3,"sources":["../../../../../../src/next/components/framework-provider/app-router/HeadSnippet.tsx"],"sourcesContent":["import { useRef } from 'react'\nimport { useServerInsertedHTML } from 'next/navigation'\n\nimport { type Snippet } from '../../../../client'\n\nimport {\n BaseHeadSnippet,\n snippetToElements,\n} from '../../../../runtimes/react/components/page/HeadSnippet'\n\nexport function HeadSnippet({ snippet }: { snippet: Snippet }) {\n const headSnippetElements = snippetToElements(snippet)\n const insertedServerHTML = useRef(false)\n\n useServerInsertedHTML(() => {\n if (insertedServerHTML.current) return\n\n insertedServerHTML.current = true\n\n return headSnippetElements\n })\n\n return <BaseHeadSnippet snippet={snippet} />\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAsBS;AAtBT,mBAAuB;AACvB,wBAAsC;AAItC,yBAGO;AAEA,SAAS,YAAY,EAAE,QAAQ,GAAyB;AAC7D,QAAM,0BAAsB,sCAAkB,OAAO;AACrD,QAAM,yBAAqB,qBAAO,KAAK;AAEvC,+CAAsB,MAAM;AAC1B,QAAI,mBAAmB;AAAS;AAEhC,uBAAmB,UAAU;AAE7B,WAAO;AAAA,EACT,CAAC;AAED,SAAO,4CAAC,sCAAgB,SAAkB;AAC5C;","names":[]}
@@ -28,8 +28,11 @@ var import_use_is_pages_router = require("../../hooks/use-is-pages-router");
28
28
  var import_app_router = require("./app-router");
29
29
  var import_pages_router = require("./pages-router");
30
30
  var import_framework_context = require("../../../runtimes/react/components/framework-context");
31
- function FrameworkProvider({ children }) {
32
- const isPagesRouter = (0, import_use_is_pages_router.useIsPagesRouter)();
31
+ function FrameworkProvider({
32
+ children,
33
+ forcePagesRouter
34
+ }) {
35
+ const isPagesRouter = (0, import_use_is_pages_router.useIsPagesRouter)() || forcePagesRouter;
33
36
  const context = (0, import_react.useMemo)(
34
37
  () => isPagesRouter ? import_pages_router.context : import_app_router.context,
35
38
  [isPagesRouter]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/next/components/framework-provider/index.tsx"],"sourcesContent":["'use client'\n\nimport { type PropsWithChildren, useMemo } from 'react'\nimport { useIsPagesRouter } from '../../hooks/use-is-pages-router'\n\nimport { context as appRouterContext } from './app-router'\nimport { context as pagesRouterContext } from './pages-router'\nimport { FrameworkContext } from '../../../runtimes/react/components/framework-context'\n\nexport function FrameworkProvider({ children }: PropsWithChildren) {\n const isPagesRouter = useIsPagesRouter()\n const context = useMemo(\n () => (isPagesRouter ? pagesRouterContext : appRouterContext),\n [isPagesRouter],\n )\n\n return <FrameworkContext.Provider value={context}>{children}</FrameworkContext.Provider>\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBS;AAdT,mBAAgD;AAChD,iCAAiC;AAEjC,wBAA4C;AAC5C,0BAA8C;AAC9C,+BAAiC;AAE1B,SAAS,kBAAkB,EAAE,SAAS,GAAsB;AACjE,QAAM,oBAAgB,6CAAiB;AACvC,QAAM,cAAU;AAAA,IACd,MAAO,gBAAgB,oBAAAA,UAAqB,kBAAAC;AAAA,IAC5C,CAAC,aAAa;AAAA,EAChB;AAEA,SAAO,4CAAC,0CAAiB,UAAjB,EAA0B,OAAO,SAAU,UAAS;AAC9D;","names":["pagesRouterContext","appRouterContext"]}
1
+ {"version":3,"sources":["../../../../../src/next/components/framework-provider/index.tsx"],"sourcesContent":["'use client'\n\nimport { type PropsWithChildren, useMemo } from 'react'\nimport { useIsPagesRouter } from '../../hooks/use-is-pages-router'\n\nimport { context as appRouterContext } from './app-router'\nimport { context as pagesRouterContext } from './pages-router'\nimport { FrameworkContext } from '../../../runtimes/react/components/framework-context'\n\nexport function FrameworkProvider({\n children,\n forcePagesRouter,\n}: PropsWithChildren<{ forcePagesRouter?: boolean }>) {\n const isPagesRouter = useIsPagesRouter() || forcePagesRouter\n const context = useMemo(\n () => (isPagesRouter ? pagesRouterContext : appRouterContext),\n [isPagesRouter],\n )\n\n return <FrameworkContext.Provider value={context}>{children}</FrameworkContext.Provider>\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBS;AAjBT,mBAAgD;AAChD,iCAAiC;AAEjC,wBAA4C;AAC5C,0BAA8C;AAC9C,+BAAiC;AAE1B,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AACF,GAAsD;AACpD,QAAM,oBAAgB,6CAAiB,KAAK;AAC5C,QAAM,cAAU;AAAA,IACd,MAAO,gBAAgB,oBAAAA,UAAqB,kBAAAC;AAAA,IAC5C,CAAC,aAAa;AAAA,EAChB;AAEA,SAAO,4CAAC,0CAAiB,UAAjB,EAA0B,OAAO,SAAU,UAAS;AAC9D;","names":["pagesRouterContext","appRouterContext"]}
@@ -34,7 +34,9 @@ module.exports = __toCommonJS(HeadSnippet_exports);
34
34
  var import_jsx_runtime = require("react/jsx-runtime");
35
35
  var import_react = require("react");
36
36
  var import_head = __toESM(require("next/head"));
37
+ var import_script = __toESM(require("next/script"));
37
38
  var import_HeadSnippet = require("../../../../runtimes/react/components/page/HeadSnippet");
39
+ const isScriptElement = (element) => (0, import_react.isValidElement)(element) && element.type === "script";
38
40
  function HeadSnippet({ snippet }) {
39
41
  (0, import_react.useEffect)(() => {
40
42
  return () => {
@@ -44,8 +46,10 @@ function HeadSnippet({ snippet }) {
44
46
  (0, import_HeadSnippet.cleanUpSnippet)(snippet);
45
47
  };
46
48
  }, [snippet]);
47
- const headSnippetElement = (0, import_HeadSnippet.snippetToElement)(snippet);
48
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head.default, { children: headSnippetElement });
49
+ const headSnippetElements = (0, import_HeadSnippet.snippetToElements)(snippet);
50
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, { children: headSnippetElements.map(
51
+ (element, i) => isScriptElement(element) ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_script.default, { ...element.props, strategy: "beforeInteractive" }, element.key) : /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_head.default, { children: element }, (0, import_react.isValidElement)(element) ? element.key : i)
52
+ ) });
49
53
  }
50
54
  // Annotate the CommonJS export names for ESM import in node:
51
55
  0 && (module.exports = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/next/components/framework-provider/pages-router/HeadSnippet.tsx"],"sourcesContent":["import { useEffect } from 'react'\n\nimport Head from 'next/head'\n\nimport { type Snippet } from '../../../../client'\n\nimport {\n snippetToElement,\n getSnippetElementsFromDOM,\n cleanUpSnippet,\n} from '../../../../runtimes/react/components/page/HeadSnippet'\n\nexport function HeadSnippet({ snippet }: { snippet: Snippet }) {\n useEffect(() => {\n return () => {\n const snippetElements = getSnippetElementsFromDOM(snippet)\n if (snippetElements.length > 0) return\n cleanUpSnippet(snippet)\n }\n }, [snippet])\n\n const headSnippetElement = snippetToElement(snippet)\n\n return <Head>{headSnippetElement}</Head>\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAuBS;AAvBT,mBAA0B;AAE1B,kBAAiB;AAIjB,yBAIO;AAEA,SAAS,YAAY,EAAE,QAAQ,GAAyB;AAC7D,8BAAU,MAAM;AACd,WAAO,MAAM;AACX,YAAM,sBAAkB,8CAA0B,OAAO;AACzD,UAAI,gBAAgB,SAAS;AAAG;AAChC,6CAAe,OAAO;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,yBAAqB,qCAAiB,OAAO;AAEnD,SAAO,4CAAC,YAAAA,SAAA,EAAM,8BAAmB;AACnC;","names":["Head"]}
1
+ {"version":3,"sources":["../../../../../../src/next/components/framework-provider/pages-router/HeadSnippet.tsx"],"sourcesContent":["import { type ReactElement, useEffect, isValidElement } from 'react'\n\nimport Head from 'next/head'\nimport Script from 'next/script'\n\nimport { type Snippet } from '../../../../client'\n\nimport {\n snippetToElements,\n getSnippetElementsFromDOM,\n cleanUpSnippet,\n} from '../../../../runtimes/react/components/page/HeadSnippet'\n\nconst isScriptElement = (element: string | JSX.Element): element is ReactElement<any, 'script'> =>\n isValidElement(element) && element.type === 'script'\n\nexport function HeadSnippet({ snippet }: { snippet: Snippet }) {\n useEffect(() => {\n return () => {\n const snippetElements = getSnippetElementsFromDOM(snippet)\n if (snippetElements.length > 0) return\n cleanUpSnippet(snippet)\n }\n }, [snippet])\n\n const headSnippetElements = snippetToElements(snippet)\n\n return (\n <>\n {headSnippetElements.map((element, i) =>\n isScriptElement(element) ? (\n <Script key={element.key} {...element.props} strategy=\"beforeInteractive\" />\n ) : (\n <Head key={isValidElement(element) ? element.key : i}>{element}</Head>\n ),\n )}\n </>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AA4BI;AA5BJ,mBAA6D;AAE7D,kBAAiB;AACjB,oBAAmB;AAInB,yBAIO;AAEP,MAAM,kBAAkB,CAAC,gBACvB,6BAAe,OAAO,KAAK,QAAQ,SAAS;AAEvC,SAAS,YAAY,EAAE,QAAQ,GAAyB;AAC7D,8BAAU,MAAM;AACd,WAAO,MAAM;AACX,YAAM,sBAAkB,8CAA0B,OAAO;AACzD,UAAI,gBAAgB,SAAS;AAAG;AAChC,6CAAe,OAAO;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,0BAAsB,sCAAkB,OAAO;AAErD,SACE,2EACG,8BAAoB;AAAA,IAAI,CAAC,SAAS,MACjC,gBAAgB,OAAO,IACrB,4CAAC,cAAAA,SAAA,EAA0B,GAAG,QAAQ,OAAO,UAAS,uBAAzC,QAAQ,GAAqD,IAE1E,4CAAC,YAAAC,SAAA,EAAsD,yBAA5C,6BAAe,OAAO,IAAI,QAAQ,MAAM,CAAY;AAAA,EAEnE,GACF;AAEJ;","names":["Script","Head"]}
@@ -0,0 +1,46 @@
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 page_document_exports = {};
20
+ __export(page_document_exports, {
21
+ pageDocument: () => pageDocument
22
+ });
23
+ module.exports = __toCommonJS(page_document_exports);
24
+ var import_components = require("../../../../components");
25
+ const pageDocument = {
26
+ id: "2222-2222-2222-2222",
27
+ site: {
28
+ id: "1111-1111-1111-1111"
29
+ },
30
+ data: {
31
+ type: import_components.MakeswiftComponentType.Root,
32
+ key: "0000-0000-0000-0000",
33
+ props: {}
34
+ },
35
+ snippets: [],
36
+ fonts: [],
37
+ localizedPages: [],
38
+ locale: null,
39
+ meta: {},
40
+ seo: {}
41
+ };
42
+ // Annotate the CommonJS export names for ESM import in node:
43
+ 0 && (module.exports = {
44
+ pageDocument
45
+ });
46
+ //# sourceMappingURL=page-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/next/components/tests/__fixtures__/page-document.ts"],"sourcesContent":["import { type MakeswiftPageDocument } from '../../../../client'\nimport { MakeswiftComponentType } from '../../../../components'\n\nexport const pageDocument: MakeswiftPageDocument = {\n id: '2222-2222-2222-2222',\n site: {\n id: '1111-1111-1111-1111',\n },\n data: {\n type: MakeswiftComponentType.Root,\n key: '0000-0000-0000-0000',\n props: {},\n },\n snippets: [],\n fonts: [],\n localizedPages: [],\n locale: null,\n meta: {},\n seo: {},\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,wBAAuC;AAEhC,MAAM,eAAsC;AAAA,EACjD,IAAI;AAAA,EACJ,MAAM;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,MAAM;AAAA,IACJ,MAAM,yCAAuB;AAAA,IAC7B,KAAK;AAAA,IACL,OAAO,CAAC;AAAA,EACV;AAAA,EACA,UAAU,CAAC;AAAA,EACX,OAAO,CAAC;AAAA,EACR,gBAAgB,CAAC;AAAA,EACjB,QAAQ;AAAA,EACR,MAAM,CAAC;AAAA,EACP,KAAK,CAAC;AACR;","names":[]}
@@ -46,15 +46,16 @@ function createRootComponent(elements, rootId) {
46
46
  }
47
47
  };
48
48
  }
49
- function createMakeswiftPageSnapshot(elementData, {
49
+ const isDocument = (elementDataOrDocument) => "snippets" in elementDataOrDocument || "fonts" in elementDataOrDocument || "meta" in elementDataOrDocument || "seo" in elementDataOrDocument;
50
+ function createMakeswiftPageSnapshot(elementDataOrDocument, {
50
51
  cacheData = {},
51
52
  locale = null
52
53
  } = {}) {
53
54
  return {
54
- document: {
55
+ document: isDocument(elementDataOrDocument) ? elementDataOrDocument : {
55
56
  id: "test-page-id",
56
57
  site: { id: "test-site-id" },
57
- data: elementData,
58
+ data: elementDataOrDocument,
58
59
  snippets: [],
59
60
  fonts: [],
60
61
  meta: {},
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/next/testing/element-data.ts"],"sourcesContent":["import { randomUUID } from 'crypto'\n\nimport { type MakeswiftPageSnapshot, type MakeswiftComponentSnapshot } from '../../client'\nimport { CacheData } from '../../api/react'\nimport { type ElementData } from '../../state/react-page'\nimport { MakeswiftComponentType } from '../../components'\n\nexport function createRootComponent(elements: ElementData[], rootId?: string) {\n return {\n key: rootId ?? randomUUID(),\n type: MakeswiftComponentType.Root,\n props: {\n children: {\n columns: [\n {\n deviceId: 'desktop',\n value: {\n count: 12,\n spans: elements?.map(() => [12]),\n },\n },\n ],\n elements,\n },\n },\n }\n}\n\nexport function createMakeswiftPageSnapshot(\n elementData: ElementData,\n {\n cacheData = {},\n locale = null,\n }: { cacheData?: Partial<MakeswiftPageSnapshot['cacheData']>; locale?: string | null } = {},\n): MakeswiftPageSnapshot {\n return {\n document: {\n id: 'test-page-id',\n site: { id: 'test-site-id' },\n data: elementData,\n snippets: [],\n fonts: [],\n meta: {},\n seo: {},\n localizedPages: [],\n locale,\n },\n cacheData: {\n ...CacheData.empty(),\n ...cacheData,\n },\n }\n}\n\nexport function createMakeswiftComponentSnapshot(\n elementData: ElementData,\n {\n cacheData = {},\n locale = null,\n }: { cacheData?: Partial<MakeswiftComponentSnapshot['cacheData']>; locale?: string | null } = {},\n): MakeswiftComponentSnapshot {\n return {\n key: randomUUID(),\n document: {\n id: 'test-component-id',\n name: 'Test Component Document',\n siteId: 'test-site-id',\n data: elementData,\n inheritsFromParent: false,\n locale,\n },\n meta: {\n allowLocaleFallback: false,\n requestedLocale: locale,\n },\n cacheData: {\n ...CacheData.empty(),\n ...cacheData,\n },\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA2B;AAG3B,mBAA0B;AAE1B,wBAAuC;AAEhC,SAAS,oBAAoB,UAAyB,QAAiB;AAC5E,SAAO;AAAA,IACL,KAAK,cAAU,0BAAW;AAAA,IAC1B,MAAM,yCAAuB;AAAA,IAC7B,OAAO;AAAA,MACL,UAAU;AAAA,QACR,SAAS;AAAA,UACP;AAAA,YACE,UAAU;AAAA,YACV,OAAO;AAAA,cACL,OAAO;AAAA,cACP,OAAO,UAAU,IAAI,MAAM,CAAC,EAAE,CAAC;AAAA,YACjC;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,4BACd,aACA;AAAA,EACE,YAAY,CAAC;AAAA,EACb,SAAS;AACX,IAAyF,CAAC,GACnE;AACvB,SAAO;AAAA,IACL,UAAU;AAAA,MACR,IAAI;AAAA,MACJ,MAAM,EAAE,IAAI,eAAe;AAAA,MAC3B,MAAM;AAAA,MACN,UAAU,CAAC;AAAA,MACX,OAAO,CAAC;AAAA,MACR,MAAM,CAAC;AAAA,MACP,KAAK,CAAC;AAAA,MACN,gBAAgB,CAAC;AAAA,MACjB;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,GAAG,uBAAU,MAAM;AAAA,MACnB,GAAG;AAAA,IACL;AAAA,EACF;AACF;AAEO,SAAS,iCACd,aACA;AAAA,EACE,YAAY,CAAC;AAAA,EACb,SAAS;AACX,IAA8F,CAAC,GACnE;AAC5B,SAAO;AAAA,IACL,SAAK,0BAAW;AAAA,IAChB,UAAU;AAAA,MACR,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,oBAAoB;AAAA,MACpB;AAAA,IACF;AAAA,IACA,MAAM;AAAA,MACJ,qBAAqB;AAAA,MACrB,iBAAiB;AAAA,IACnB;AAAA,IACA,WAAW;AAAA,MACT,GAAG,uBAAU,MAAM;AAAA,MACnB,GAAG;AAAA,IACL;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/next/testing/element-data.ts"],"sourcesContent":["import { randomUUID } from 'crypto'\n\nimport {\n type MakeswiftPageSnapshot,\n type MakeswiftPageDocument,\n type MakeswiftComponentSnapshot,\n} from '../../client'\nimport { CacheData } from '../../api/react'\nimport { type ElementData } from '../../state/react-page'\nimport { MakeswiftComponentType } from '../../components'\n\nexport function createRootComponent(elements: ElementData[], rootId?: string) {\n return {\n key: rootId ?? randomUUID(),\n type: MakeswiftComponentType.Root,\n props: {\n children: {\n columns: [\n {\n deviceId: 'desktop',\n value: {\n count: 12,\n spans: elements?.map(() => [12]),\n },\n },\n ],\n elements,\n },\n },\n }\n}\n\nconst isDocument = (\n elementDataOrDocument: ElementData | MakeswiftPageDocument,\n): elementDataOrDocument is MakeswiftPageDocument =>\n 'snippets' in elementDataOrDocument ||\n 'fonts' in elementDataOrDocument ||\n 'meta' in elementDataOrDocument ||\n 'seo' in elementDataOrDocument\n\nexport function createMakeswiftPageSnapshot(\n elementDataOrDocument: ElementData | MakeswiftPageDocument,\n {\n cacheData = {},\n locale = null,\n }: { cacheData?: Partial<MakeswiftPageSnapshot['cacheData']>; locale?: string | null } = {},\n): MakeswiftPageSnapshot {\n return {\n document: isDocument(elementDataOrDocument)\n ? elementDataOrDocument\n : {\n id: 'test-page-id',\n site: { id: 'test-site-id' },\n data: elementDataOrDocument,\n snippets: [],\n fonts: [],\n meta: {},\n seo: {},\n localizedPages: [],\n locale,\n },\n cacheData: {\n ...CacheData.empty(),\n ...cacheData,\n },\n }\n}\n\nexport function createMakeswiftComponentSnapshot(\n elementData: ElementData,\n {\n cacheData = {},\n locale = null,\n }: { cacheData?: Partial<MakeswiftComponentSnapshot['cacheData']>; locale?: string | null } = {},\n): MakeswiftComponentSnapshot {\n return {\n key: randomUUID(),\n document: {\n id: 'test-component-id',\n name: 'Test Component Document',\n siteId: 'test-site-id',\n data: elementData,\n inheritsFromParent: false,\n locale,\n },\n meta: {\n allowLocaleFallback: false,\n requestedLocale: locale,\n },\n cacheData: {\n ...CacheData.empty(),\n ...cacheData,\n },\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,oBAA2B;AAO3B,mBAA0B;AAE1B,wBAAuC;AAEhC,SAAS,oBAAoB,UAAyB,QAAiB;AAC5E,SAAO;AAAA,IACL,KAAK,cAAU,0BAAW;AAAA,IAC1B,MAAM,yCAAuB;AAAA,IAC7B,OAAO;AAAA,MACL,UAAU;AAAA,QACR,SAAS;AAAA,UACP;AAAA,YACE,UAAU;AAAA,YACV,OAAO;AAAA,cACL,OAAO;AAAA,cACP,OAAO,UAAU,IAAI,MAAM,CAAC,EAAE,CAAC;AAAA,YACjC;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,MAAM,aAAa,CACjB,0BAEA,cAAc,yBACd,WAAW,yBACX,UAAU,yBACV,SAAS;AAEJ,SAAS,4BACd,uBACA;AAAA,EACE,YAAY,CAAC;AAAA,EACb,SAAS;AACX,IAAyF,CAAC,GACnE;AACvB,SAAO;AAAA,IACL,UAAU,WAAW,qBAAqB,IACtC,wBACA;AAAA,MACE,IAAI;AAAA,MACJ,MAAM,EAAE,IAAI,eAAe;AAAA,MAC3B,MAAM;AAAA,MACN,UAAU,CAAC;AAAA,MACX,OAAO,CAAC;AAAA,MACR,MAAM,CAAC;AAAA,MACP,KAAK,CAAC;AAAA,MACN,gBAAgB,CAAC;AAAA,MACjB;AAAA,IACF;AAAA,IACJ,WAAW;AAAA,MACT,GAAG,uBAAU,MAAM;AAAA,MACnB,GAAG;AAAA,IACL;AAAA,EACF;AACF;AAEO,SAAS,iCACd,aACA;AAAA,EACE,YAAY,CAAC;AAAA,EACb,SAAS;AACX,IAA8F,CAAC,GACnE;AAC5B,SAAO;AAAA,IACL,SAAK,0BAAW;AAAA,IAChB,UAAU;AAAA,MACR,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,oBAAoB;AAAA,MACpB;AAAA,IACF;AAAA,IACA,MAAM;AAAA,MACJ,qBAAqB;AAAA,MACrB,iBAAiB;AAAA,IACnB;AAAA,IACA,WAAW;AAAA,MACT,GAAG,uBAAU,MAAM;AAAA,MACnB,GAAG;AAAA,IACL;AAAA,EACF;AACF;","names":[]}
@@ -18,10 +18,12 @@ module.exports = __toCommonJS(testing_exports);
18
18
  __reExport(testing_exports, require("./breakpoints"), module.exports);
19
19
  __reExport(testing_exports, require("./element-data"), module.exports);
20
20
  __reExport(testing_exports, require("./react-provider"), module.exports);
21
+ __reExport(testing_exports, require("./page-rendering"), module.exports);
21
22
  // Annotate the CommonJS export names for ESM import in node:
22
23
  0 && (module.exports = {
23
24
  ...require("./breakpoints"),
24
25
  ...require("./element-data"),
25
- ...require("./react-provider")
26
+ ...require("./react-provider"),
27
+ ...require("./page-rendering")
26
28
  });
27
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/next/testing/index.ts"],"sourcesContent":["export * from './breakpoints'\nexport * from './element-data'\nexport * from './react-provider'\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,4BAAc,0BAAd;AACA,4BAAc,2BADd;AAEA,4BAAc,6BAFd;","names":[]}
1
+ {"version":3,"sources":["../../../../src/next/testing/index.ts"],"sourcesContent":["export * from './breakpoints'\nexport * from './element-data'\nexport * from './react-provider'\nexport * from './page-rendering'\n"],"mappings":";;;;;;;;;;;;;;;AAAA;AAAA;AAAA,4BAAc,0BAAd;AACA,4BAAc,2BADd;AAEA,4BAAc,6BAFd;AAGA,4BAAc,6BAHd;","names":[]}
@@ -0,0 +1,52 @@
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 page_rendering_exports = {};
20
+ __export(page_rendering_exports, {
21
+ testMakeswiftPageHeadRendering: () => testMakeswiftPageHeadRendering
22
+ });
23
+ module.exports = __toCommonJS(page_rendering_exports);
24
+ var import_jsx_runtime = require("react/jsx-runtime");
25
+ var import_jest_dom = require("@testing-library/jest-dom");
26
+ var import_test_utils = require("react-dom/test-utils");
27
+ var import_react2 = require("@testing-library/react");
28
+ var import_react_runtime = require("../../runtimes/react/react-runtime");
29
+ var import_components = require("../../components");
30
+ var import_page = require("../components/page");
31
+ var import_react_provider = require("./react-provider");
32
+ async function testMakeswiftPageHeadRendering(props, { forcePagesRouter = false } = {}) {
33
+ const runtime = new import_react_runtime.ReactRuntime();
34
+ runtime.registerComponent(() => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_jsx_runtime.Fragment, {}), {
35
+ type: import_components.MakeswiftComponentType.Root,
36
+ label: "Root",
37
+ props: {}
38
+ });
39
+ return await (0, import_test_utils.act)(
40
+ async () => (0, import_react2.render)(
41
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react_provider.ReactProvider, { runtime, previewMode: false, forcePagesRouter, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_page.Page, { ...props }) }),
42
+ {
43
+ container: document.body.appendChild(document.createElement("head"))
44
+ }
45
+ )
46
+ );
47
+ }
48
+ // Annotate the CommonJS export names for ESM import in node:
49
+ 0 && (module.exports = {
50
+ testMakeswiftPageHeadRendering
51
+ });
52
+ //# sourceMappingURL=page-rendering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/next/testing/page-rendering.tsx"],"sourcesContent":["import { type ComponentPropsWithoutRef } from 'react'\n\nimport '@testing-library/jest-dom'\nimport { act } from 'react-dom/test-utils'\nimport { render } from '@testing-library/react'\n\nimport { ReactRuntime } from '../../runtimes/react/react-runtime'\nimport { MakeswiftComponentType } from '../../components'\n\nimport { Page as MakeswiftPage } from '../components/page'\n\nimport { ReactProvider } from './react-provider'\n\nexport async function testMakeswiftPageHeadRendering(\n props: ComponentPropsWithoutRef<typeof MakeswiftPage>,\n { forcePagesRouter = false }: { forcePagesRouter?: boolean } = {},\n) {\n const runtime = new ReactRuntime()\n\n runtime.registerComponent(() => <></>, {\n type: MakeswiftComponentType.Root,\n label: 'Root',\n props: {},\n })\n\n return await act(async () =>\n render(\n <ReactProvider runtime={runtime} previewMode={false} forcePagesRouter={forcePagesRouter}>\n <MakeswiftPage {...props} />\n </ReactProvider>,\n {\n container: document.body.appendChild(document.createElement('head')),\n },\n ),\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAmBkC;AAjBlC,sBAAO;AACP,wBAAoB;AACpB,IAAAA,gBAAuB;AAEvB,2BAA6B;AAC7B,wBAAuC;AAEvC,kBAAsC;AAEtC,4BAA8B;AAE9B,eAAsB,+BACpB,OACA,EAAE,mBAAmB,MAAM,IAAoC,CAAC,GAChE;AACA,QAAM,UAAU,IAAI,kCAAa;AAEjC,UAAQ,kBAAkB,MAAM,2EAAE,GAAK;AAAA,IACrC,MAAM,yCAAuB;AAAA,IAC7B,OAAO;AAAA,IACP,OAAO,CAAC;AAAA,EACV,CAAC;AAED,SAAO,UAAM;AAAA,IAAI,gBACf;AAAA,MACE,4CAAC,uCAAc,SAAkB,aAAa,OAAO,kBACnD,sDAAC,YAAAC,MAAA,EAAe,GAAG,OAAO,GAC5B;AAAA,MACA;AAAA,QACE,WAAW,SAAS,KAAK,YAAY,SAAS,cAAc,MAAM,CAAC;AAAA,MACrE;AAAA,IACF;AAAA,EACF;AACF;","names":["import_react","MakeswiftPage"]}
@@ -22,14 +22,16 @@ __export(react_provider_exports, {
22
22
  });
23
23
  module.exports = __toCommonJS(react_provider_exports);
24
24
  var import_jsx_runtime = require("react/jsx-runtime");
25
+ var import_RuntimeProvider = require("../../runtimes/react/components/RuntimeProvider");
26
+ var import_framework_provider = require("../components/framework-provider");
25
27
  var import_root_style_registry = require("../root-style-registry");
26
- var import_runtime_provider = require("../runtime-provider");
27
28
  function ReactProvider({
28
29
  children,
29
30
  runtime,
30
- previewMode = false
31
+ previewMode = false,
32
+ forcePagesRouter = false
31
33
  }) {
32
- return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_runtime_provider.NextRuntimeProvider, { previewMode, runtime, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_root_style_registry.RootStyleRegistry, { children }) });
34
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_framework_provider.FrameworkProvider, { forcePagesRouter, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_RuntimeProvider.RuntimeProvider, { previewMode, runtime, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_root_style_registry.RootStyleRegistry, { children }) }) });
33
35
  }
34
36
  // Annotate the CommonJS export names for ESM import in node:
35
37
  0 && (module.exports = {
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/next/testing/react-provider.tsx"],"sourcesContent":["import { ReactRuntime } from '../../runtimes/react/react-runtime'\n\nimport { RootStyleRegistry } from '../root-style-registry'\nimport { NextRuntimeProvider } from '../runtime-provider'\n\nexport function ReactProvider({\n children,\n runtime,\n previewMode = false,\n}: {\n children: React.ReactNode\n runtime: ReactRuntime\n previewMode?: boolean\n}) {\n return (\n <NextRuntimeProvider previewMode={previewMode} runtime={runtime}>\n <RootStyleRegistry>{children}</RootStyleRegistry>\n </NextRuntimeProvider>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAgBM;AAdN,iCAAkC;AAClC,8BAAoC;AAE7B,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,cAAc;AAChB,GAIG;AACD,SACE,4CAAC,+CAAoB,aAA0B,SAC7C,sDAAC,gDAAmB,UAAS,GAC/B;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/next/testing/react-provider.tsx"],"sourcesContent":["import { ReactRuntime } from '../../runtimes/react/react-runtime'\nimport { RuntimeProvider } from '../../runtimes/react/components/RuntimeProvider'\n\nimport { FrameworkProvider } from '../components/framework-provider'\nimport { RootStyleRegistry } from '../root-style-registry'\n\nexport function ReactProvider({\n children,\n runtime,\n previewMode = false,\n forcePagesRouter = false,\n}: {\n children: React.ReactNode\n runtime: ReactRuntime\n previewMode?: boolean\n forcePagesRouter?: boolean\n}) {\n return (\n <FrameworkProvider forcePagesRouter={forcePagesRouter}>\n <RuntimeProvider previewMode={previewMode} runtime={runtime}>\n <RootStyleRegistry>{children}</RootStyleRegistry>\n </RuntimeProvider>\n </FrameworkProvider>\n )\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAoBQ;AAnBR,6BAAgC;AAEhC,gCAAkC;AAClC,iCAAkC;AAE3B,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,mBAAmB;AACrB,GAKG;AACD,SACE,4CAAC,+CAAkB,kBACjB,sDAAC,0CAAgB,aAA0B,SACzC,sDAAC,gDAAmB,UAAS,GAC/B,GACF;AAEJ;","names":[]}
@@ -32,7 +32,7 @@ __export(HeadSnippet_exports, {
32
32
  cleanUpSnippet: () => cleanUpSnippet,
33
33
  getSnippetElementsFromDOM: () => getSnippetElementsFromDOM,
34
34
  renderSnippetAndExecuteScripts: () => renderSnippetAndExecuteScripts,
35
- snippetToElement: () => snippetToElement
35
+ snippetToElements: () => snippetToElements
36
36
  });
37
37
  module.exports = __toCommonJS(HeadSnippet_exports);
38
38
  var import_react = require("react");
@@ -58,7 +58,7 @@ const VALID_HEAD_ELEMENT_TYPES = [
58
58
  "noscript",
59
59
  "template"
60
60
  ];
61
- function snippetToElement(snippet) {
61
+ function snippetToElements(snippet) {
62
62
  return import_react.Children.map((0, import_html_react_parser.default)(snippet.code), (element) => {
63
63
  if (typeof element === "string")
64
64
  return element;
@@ -113,6 +113,6 @@ function getSnippetElementsFromDOM(snippet) {
113
113
  cleanUpSnippet,
114
114
  getSnippetElementsFromDOM,
115
115
  renderSnippetAndExecuteScripts,
116
- snippetToElement
116
+ snippetToElements
117
117
  });
118
118
  //# sourceMappingURL=HeadSnippet.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/runtimes/react/components/page/HeadSnippet.tsx"],"sourcesContent":["import { Children, createElement, useEffect } from 'react'\nimport parse from 'html-react-parser'\n\nimport { type Snippet } from '../../../../client'\n\nexport function BaseHeadSnippet({ snippet }: { snippet: Snippet }) {\n useEffect(() => {\n const snippetElements = getSnippetElementsFromDOM(snippet)\n const isAlreadyInTheDOM = snippetElements.length > 0\n\n if (isAlreadyInTheDOM) return\n\n return renderSnippetAndExecuteScripts(snippet, window.document.head)\n }, [snippet])\n\n return null\n}\n\nconst SNIPPET_ID_ATRIBUTE_NAME = 'data-makeswift-snippet-id'\n\nconst VALID_HEAD_ELEMENT_TYPES = [\n 'title',\n 'base',\n 'link',\n 'style',\n 'meta',\n 'script',\n 'noscript',\n 'template',\n]\n\nexport function snippetToElement(snippet: Pick<Snippet, 'id' | 'code'>): (string | JSX.Element)[] {\n return Children.map(parse(snippet.code), element => {\n if (typeof element === 'string') return element\n\n if (!VALID_HEAD_ELEMENT_TYPES.includes(element.type as string)) return null\n\n const key = element.key ? `${snippet.id}:${element.key}` : snippet.id\n\n return createElement(element.type, {\n ...element.props,\n key,\n [SNIPPET_ID_ATRIBUTE_NAME]: snippet.id,\n })\n })\n}\n\nexport function renderSnippetAndExecuteScripts(\n snippet: Snippet,\n container: HTMLElement,\n): () => void {\n const virtualContainer = container.ownerDocument.createElement(container.tagName)\n\n virtualContainer.innerHTML = snippet.code\n\n const elements = Array.from(virtualContainer.querySelectorAll('*'))\n const scripts = elements.filter(el => el instanceof HTMLScriptElement)\n\n scripts.forEach(script => {\n const clone = script.ownerDocument.createElement(script.tagName)\n\n clone.textContent = script.textContent\n Array.from(script.attributes).forEach(({ name, value }) => {\n clone.setAttribute(name, value)\n })\n clone.setAttribute(SNIPPET_ID_ATRIBUTE_NAME, snippet.id)\n script.parentNode?.replaceChild(clone, script)\n })\n\n const nodes = Array.from(virtualContainer.childNodes)\n container.append(...nodes)\n\n return () => {\n nodes.forEach(node => {\n node.parentNode?.removeChild(node)\n })\n\n cleanUpSnippet(snippet)\n }\n}\n\nexport function cleanUpSnippet(snippet: Snippet): void {\n if (snippet.cleanup == null) return\n try {\n const cleanUp = new Function(snippet.cleanup)\n cleanUp()\n } catch {\n // Ignore errors from user input.\n }\n}\n\nexport function getSnippetElementsFromDOM(snippet: Snippet) {\n return document.head.querySelectorAll(`[${SNIPPET_ID_ATRIBUTE_NAME}=\"${snippet.id}\"]`)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAmD;AACnD,+BAAkB;AAIX,SAAS,gBAAgB,EAAE,QAAQ,GAAyB;AACjE,8BAAU,MAAM;AACd,UAAM,kBAAkB,0BAA0B,OAAO;AACzD,UAAM,oBAAoB,gBAAgB,SAAS;AAEnD,QAAI;AAAmB;AAEvB,WAAO,+BAA+B,SAAS,OAAO,SAAS,IAAI;AAAA,EACrE,GAAG,CAAC,OAAO,CAAC;AAEZ,SAAO;AACT;AAEA,MAAM,2BAA2B;AAEjC,MAAM,2BAA2B;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,iBAAiB,SAAiE;AAChG,SAAO,sBAAS,QAAI,yBAAAA,SAAM,QAAQ,IAAI,GAAG,aAAW;AAClD,QAAI,OAAO,YAAY;AAAU,aAAO;AAExC,QAAI,CAAC,yBAAyB,SAAS,QAAQ,IAAc;AAAG,aAAO;AAEvE,UAAM,MAAM,QAAQ,MAAM,GAAG,QAAQ,EAAE,IAAI,QAAQ,GAAG,KAAK,QAAQ;AAEnE,eAAO,4BAAc,QAAQ,MAAM;AAAA,MACjC,GAAG,QAAQ;AAAA,MACX;AAAA,MACA,CAAC,wBAAwB,GAAG,QAAQ;AAAA,IACtC,CAAC;AAAA,EACH,CAAC;AACH;AAEO,SAAS,+BACd,SACA,WACY;AACZ,QAAM,mBAAmB,UAAU,cAAc,cAAc,UAAU,OAAO;AAEhF,mBAAiB,YAAY,QAAQ;AAErC,QAAM,WAAW,MAAM,KAAK,iBAAiB,iBAAiB,GAAG,CAAC;AAClE,QAAM,UAAU,SAAS,OAAO,QAAM,cAAc,iBAAiB;AAErE,UAAQ,QAAQ,YAAU;AACxB,UAAM,QAAQ,OAAO,cAAc,cAAc,OAAO,OAAO;AAE/D,UAAM,cAAc,OAAO;AAC3B,UAAM,KAAK,OAAO,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,MAAM,MAAM;AACzD,YAAM,aAAa,MAAM,KAAK;AAAA,IAChC,CAAC;AACD,UAAM,aAAa,0BAA0B,QAAQ,EAAE;AACvD,WAAO,YAAY,aAAa,OAAO,MAAM;AAAA,EAC/C,CAAC;AAED,QAAM,QAAQ,MAAM,KAAK,iBAAiB,UAAU;AACpD,YAAU,OAAO,GAAG,KAAK;AAEzB,SAAO,MAAM;AACX,UAAM,QAAQ,UAAQ;AACpB,WAAK,YAAY,YAAY,IAAI;AAAA,IACnC,CAAC;AAED,mBAAe,OAAO;AAAA,EACxB;AACF;AAEO,SAAS,eAAe,SAAwB;AACrD,MAAI,QAAQ,WAAW;AAAM;AAC7B,MAAI;AACF,UAAM,UAAU,IAAI,SAAS,QAAQ,OAAO;AAC5C,YAAQ;AAAA,EACV,QAAQ;AAAA,EAER;AACF;AAEO,SAAS,0BAA0B,SAAkB;AAC1D,SAAO,SAAS,KAAK,iBAAiB,IAAI,wBAAwB,KAAK,QAAQ,EAAE,IAAI;AACvF;","names":["parse"]}
1
+ {"version":3,"sources":["../../../../../../src/runtimes/react/components/page/HeadSnippet.tsx"],"sourcesContent":["import { Children, createElement, useEffect } from 'react'\nimport parse from 'html-react-parser'\n\nimport { type Snippet } from '../../../../client'\n\nexport function BaseHeadSnippet({ snippet }: { snippet: Snippet }) {\n useEffect(() => {\n const snippetElements = getSnippetElementsFromDOM(snippet)\n const isAlreadyInTheDOM = snippetElements.length > 0\n\n if (isAlreadyInTheDOM) return\n\n return renderSnippetAndExecuteScripts(snippet, window.document.head)\n }, [snippet])\n\n return null\n}\n\nconst SNIPPET_ID_ATRIBUTE_NAME = 'data-makeswift-snippet-id'\n\nconst VALID_HEAD_ELEMENT_TYPES = [\n 'title',\n 'base',\n 'link',\n 'style',\n 'meta',\n 'script',\n 'noscript',\n 'template',\n]\n\nexport function snippetToElements(snippet: Pick<Snippet, 'id' | 'code'>): (string | JSX.Element)[] {\n return Children.map(parse(snippet.code), element => {\n if (typeof element === 'string') return element\n\n if (!VALID_HEAD_ELEMENT_TYPES.includes(element.type as string)) return null\n\n const key = element.key ? `${snippet.id}:${element.key}` : snippet.id\n\n return createElement(element.type, {\n ...element.props,\n key,\n [SNIPPET_ID_ATRIBUTE_NAME]: snippet.id,\n })\n })\n}\n\nexport function renderSnippetAndExecuteScripts(\n snippet: Snippet,\n container: HTMLElement,\n): () => void {\n const virtualContainer = container.ownerDocument.createElement(container.tagName)\n\n virtualContainer.innerHTML = snippet.code\n\n const elements = Array.from(virtualContainer.querySelectorAll('*'))\n const scripts = elements.filter(el => el instanceof HTMLScriptElement)\n\n scripts.forEach(script => {\n const clone = script.ownerDocument.createElement(script.tagName)\n\n clone.textContent = script.textContent\n Array.from(script.attributes).forEach(({ name, value }) => {\n clone.setAttribute(name, value)\n })\n clone.setAttribute(SNIPPET_ID_ATRIBUTE_NAME, snippet.id)\n script.parentNode?.replaceChild(clone, script)\n })\n\n const nodes = Array.from(virtualContainer.childNodes)\n container.append(...nodes)\n\n return () => {\n nodes.forEach(node => {\n node.parentNode?.removeChild(node)\n })\n\n cleanUpSnippet(snippet)\n }\n}\n\nexport function cleanUpSnippet(snippet: Snippet): void {\n if (snippet.cleanup == null) return\n try {\n const cleanUp = new Function(snippet.cleanup)\n cleanUp()\n } catch {\n // Ignore errors from user input.\n }\n}\n\nexport function getSnippetElementsFromDOM(snippet: Snippet) {\n return document.head.querySelectorAll(`[${SNIPPET_ID_ATRIBUTE_NAME}=\"${snippet.id}\"]`)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAmD;AACnD,+BAAkB;AAIX,SAAS,gBAAgB,EAAE,QAAQ,GAAyB;AACjE,8BAAU,MAAM;AACd,UAAM,kBAAkB,0BAA0B,OAAO;AACzD,UAAM,oBAAoB,gBAAgB,SAAS;AAEnD,QAAI;AAAmB;AAEvB,WAAO,+BAA+B,SAAS,OAAO,SAAS,IAAI;AAAA,EACrE,GAAG,CAAC,OAAO,CAAC;AAEZ,SAAO;AACT;AAEA,MAAM,2BAA2B;AAEjC,MAAM,2BAA2B;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,kBAAkB,SAAiE;AACjG,SAAO,sBAAS,QAAI,yBAAAA,SAAM,QAAQ,IAAI,GAAG,aAAW;AAClD,QAAI,OAAO,YAAY;AAAU,aAAO;AAExC,QAAI,CAAC,yBAAyB,SAAS,QAAQ,IAAc;AAAG,aAAO;AAEvE,UAAM,MAAM,QAAQ,MAAM,GAAG,QAAQ,EAAE,IAAI,QAAQ,GAAG,KAAK,QAAQ;AAEnE,eAAO,4BAAc,QAAQ,MAAM;AAAA,MACjC,GAAG,QAAQ;AAAA,MACX;AAAA,MACA,CAAC,wBAAwB,GAAG,QAAQ;AAAA,IACtC,CAAC;AAAA,EACH,CAAC;AACH;AAEO,SAAS,+BACd,SACA,WACY;AACZ,QAAM,mBAAmB,UAAU,cAAc,cAAc,UAAU,OAAO;AAEhF,mBAAiB,YAAY,QAAQ;AAErC,QAAM,WAAW,MAAM,KAAK,iBAAiB,iBAAiB,GAAG,CAAC;AAClE,QAAM,UAAU,SAAS,OAAO,QAAM,cAAc,iBAAiB;AAErE,UAAQ,QAAQ,YAAU;AACxB,UAAM,QAAQ,OAAO,cAAc,cAAc,OAAO,OAAO;AAE/D,UAAM,cAAc,OAAO;AAC3B,UAAM,KAAK,OAAO,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,MAAM,MAAM;AACzD,YAAM,aAAa,MAAM,KAAK;AAAA,IAChC,CAAC;AACD,UAAM,aAAa,0BAA0B,QAAQ,EAAE;AACvD,WAAO,YAAY,aAAa,OAAO,MAAM;AAAA,EAC/C,CAAC;AAED,QAAM,QAAQ,MAAM,KAAK,iBAAiB,UAAU;AACpD,YAAU,OAAO,GAAG,KAAK;AAEzB,SAAO,MAAM;AACX,UAAM,QAAQ,UAAQ;AACpB,WAAK,YAAY,YAAY,IAAI;AAAA,IACnC,CAAC;AAED,mBAAe,OAAO;AAAA,EACxB;AACF;AAEO,SAAS,eAAe,SAAwB;AACrD,MAAI,QAAQ,WAAW;AAAM;AAC7B,MAAI;AACF,UAAM,UAAU,IAAI,SAAS,QAAQ,OAAO;AAC5C,YAAQ;AAAA,EACV,QAAQ;AAAA,EAER;AACF;AAEO,SAAS,0BAA0B,SAAkB;AAC1D,SAAO,SAAS,KAAK,iBAAiB,IAAI,wBAAwB,KAAK,QAAQ,EAAE,IAAI;AACvF;","names":["parse"]}
@@ -8,7 +8,7 @@ async function manifestHandler(req, { apiKey, manifest }) {
8
8
  return ApiResponse.json({ message: "Unauthorized" }, { status: 401 });
9
9
  }
10
10
  return ApiResponse.json({
11
- version: "0.25.0-canary.5",
11
+ version: "0.25.0-canary.6",
12
12
  previewMode: false,
13
13
  draftMode: false,
14
14
  interactionMode: true,
@@ -3,16 +3,16 @@ import { useRef } from "react";
3
3
  import { useServerInsertedHTML } from "next/navigation";
4
4
  import {
5
5
  BaseHeadSnippet,
6
- snippetToElement
6
+ snippetToElements
7
7
  } from "../../../../runtimes/react/components/page/HeadSnippet";
8
8
  function HeadSnippet({ snippet }) {
9
- const headSnippetElement = snippetToElement(snippet);
9
+ const headSnippetElements = snippetToElements(snippet);
10
10
  const insertedServerHTML = useRef(false);
11
11
  useServerInsertedHTML(() => {
12
12
  if (insertedServerHTML.current)
13
13
  return;
14
14
  insertedServerHTML.current = true;
15
- return headSnippetElement;
15
+ return headSnippetElements;
16
16
  });
17
17
  return /* @__PURE__ */ jsx(BaseHeadSnippet, { snippet });
18
18
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/next/components/framework-provider/app-router/HeadSnippet.tsx"],"sourcesContent":["import { useRef } from 'react'\nimport { useServerInsertedHTML } from 'next/navigation'\n\nimport { type Snippet } from '../../../../client'\n\nimport {\n BaseHeadSnippet,\n snippetToElement,\n} from '../../../../runtimes/react/components/page/HeadSnippet'\n\nexport function HeadSnippet({ snippet }: { snippet: Snippet }) {\n const headSnippetElement = snippetToElement(snippet)\n const insertedServerHTML = useRef(false)\n\n useServerInsertedHTML(() => {\n if (insertedServerHTML.current) return\n\n insertedServerHTML.current = true\n\n return headSnippetElement\n })\n\n return <BaseHeadSnippet snippet={snippet} />\n}\n"],"mappings":"AAsBS;AAtBT,SAAS,cAAc;AACvB,SAAS,6BAA6B;AAItC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEA,SAAS,YAAY,EAAE,QAAQ,GAAyB;AAC7D,QAAM,qBAAqB,iBAAiB,OAAO;AACnD,QAAM,qBAAqB,OAAO,KAAK;AAEvC,wBAAsB,MAAM;AAC1B,QAAI,mBAAmB;AAAS;AAEhC,uBAAmB,UAAU;AAE7B,WAAO;AAAA,EACT,CAAC;AAED,SAAO,oBAAC,mBAAgB,SAAkB;AAC5C;","names":[]}
1
+ {"version":3,"sources":["../../../../../../src/next/components/framework-provider/app-router/HeadSnippet.tsx"],"sourcesContent":["import { useRef } from 'react'\nimport { useServerInsertedHTML } from 'next/navigation'\n\nimport { type Snippet } from '../../../../client'\n\nimport {\n BaseHeadSnippet,\n snippetToElements,\n} from '../../../../runtimes/react/components/page/HeadSnippet'\n\nexport function HeadSnippet({ snippet }: { snippet: Snippet }) {\n const headSnippetElements = snippetToElements(snippet)\n const insertedServerHTML = useRef(false)\n\n useServerInsertedHTML(() => {\n if (insertedServerHTML.current) return\n\n insertedServerHTML.current = true\n\n return headSnippetElements\n })\n\n return <BaseHeadSnippet snippet={snippet} />\n}\n"],"mappings":"AAsBS;AAtBT,SAAS,cAAc;AACvB,SAAS,6BAA6B;AAItC;AAAA,EACE;AAAA,EACA;AAAA,OACK;AAEA,SAAS,YAAY,EAAE,QAAQ,GAAyB;AAC7D,QAAM,sBAAsB,kBAAkB,OAAO;AACrD,QAAM,qBAAqB,OAAO,KAAK;AAEvC,wBAAsB,MAAM;AAC1B,QAAI,mBAAmB;AAAS;AAEhC,uBAAmB,UAAU;AAE7B,WAAO;AAAA,EACT,CAAC;AAED,SAAO,oBAAC,mBAAgB,SAAkB;AAC5C;","names":[]}
@@ -5,8 +5,11 @@ import { useIsPagesRouter } from "../../hooks/use-is-pages-router";
5
5
  import { context as appRouterContext } from "./app-router";
6
6
  import { context as pagesRouterContext } from "./pages-router";
7
7
  import { FrameworkContext } from "../../../runtimes/react/components/framework-context";
8
- function FrameworkProvider({ children }) {
9
- const isPagesRouter = useIsPagesRouter();
8
+ function FrameworkProvider({
9
+ children,
10
+ forcePagesRouter
11
+ }) {
12
+ const isPagesRouter = useIsPagesRouter() || forcePagesRouter;
10
13
  const context = useMemo(
11
14
  () => isPagesRouter ? pagesRouterContext : appRouterContext,
12
15
  [isPagesRouter]
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/next/components/framework-provider/index.tsx"],"sourcesContent":["'use client'\n\nimport { type PropsWithChildren, useMemo } from 'react'\nimport { useIsPagesRouter } from '../../hooks/use-is-pages-router'\n\nimport { context as appRouterContext } from './app-router'\nimport { context as pagesRouterContext } from './pages-router'\nimport { FrameworkContext } from '../../../runtimes/react/components/framework-context'\n\nexport function FrameworkProvider({ children }: PropsWithChildren) {\n const isPagesRouter = useIsPagesRouter()\n const context = useMemo(\n () => (isPagesRouter ? pagesRouterContext : appRouterContext),\n [isPagesRouter],\n )\n\n return <FrameworkContext.Provider value={context}>{children}</FrameworkContext.Provider>\n}\n"],"mappings":";AAgBS;AAdT,SAAiC,eAAe;AAChD,SAAS,wBAAwB;AAEjC,SAAS,WAAW,wBAAwB;AAC5C,SAAS,WAAW,0BAA0B;AAC9C,SAAS,wBAAwB;AAE1B,SAAS,kBAAkB,EAAE,SAAS,GAAsB;AACjE,QAAM,gBAAgB,iBAAiB;AACvC,QAAM,UAAU;AAAA,IACd,MAAO,gBAAgB,qBAAqB;AAAA,IAC5C,CAAC,aAAa;AAAA,EAChB;AAEA,SAAO,oBAAC,iBAAiB,UAAjB,EAA0B,OAAO,SAAU,UAAS;AAC9D;","names":[]}
1
+ {"version":3,"sources":["../../../../../src/next/components/framework-provider/index.tsx"],"sourcesContent":["'use client'\n\nimport { type PropsWithChildren, useMemo } from 'react'\nimport { useIsPagesRouter } from '../../hooks/use-is-pages-router'\n\nimport { context as appRouterContext } from './app-router'\nimport { context as pagesRouterContext } from './pages-router'\nimport { FrameworkContext } from '../../../runtimes/react/components/framework-context'\n\nexport function FrameworkProvider({\n children,\n forcePagesRouter,\n}: PropsWithChildren<{ forcePagesRouter?: boolean }>) {\n const isPagesRouter = useIsPagesRouter() || forcePagesRouter\n const context = useMemo(\n () => (isPagesRouter ? pagesRouterContext : appRouterContext),\n [isPagesRouter],\n )\n\n return <FrameworkContext.Provider value={context}>{children}</FrameworkContext.Provider>\n}\n"],"mappings":";AAmBS;AAjBT,SAAiC,eAAe;AAChD,SAAS,wBAAwB;AAEjC,SAAS,WAAW,wBAAwB;AAC5C,SAAS,WAAW,0BAA0B;AAC9C,SAAS,wBAAwB;AAE1B,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AACF,GAAsD;AACpD,QAAM,gBAAgB,iBAAiB,KAAK;AAC5C,QAAM,UAAU;AAAA,IACd,MAAO,gBAAgB,qBAAqB;AAAA,IAC5C,CAAC,aAAa;AAAA,EAChB;AAEA,SAAO,oBAAC,iBAAiB,UAAjB,EAA0B,OAAO,SAAU,UAAS;AAC9D;","names":[]}
@@ -1,11 +1,13 @@
1
- import { jsx } from "react/jsx-runtime";
2
- import { useEffect } from "react";
1
+ import { Fragment, jsx } from "react/jsx-runtime";
2
+ import { useEffect, isValidElement } from "react";
3
3
  import Head from "next/head";
4
+ import Script from "next/script";
4
5
  import {
5
- snippetToElement,
6
+ snippetToElements,
6
7
  getSnippetElementsFromDOM,
7
8
  cleanUpSnippet
8
9
  } from "../../../../runtimes/react/components/page/HeadSnippet";
10
+ const isScriptElement = (element) => isValidElement(element) && element.type === "script";
9
11
  function HeadSnippet({ snippet }) {
10
12
  useEffect(() => {
11
13
  return () => {
@@ -15,8 +17,10 @@ function HeadSnippet({ snippet }) {
15
17
  cleanUpSnippet(snippet);
16
18
  };
17
19
  }, [snippet]);
18
- const headSnippetElement = snippetToElement(snippet);
19
- return /* @__PURE__ */ jsx(Head, { children: headSnippetElement });
20
+ const headSnippetElements = snippetToElements(snippet);
21
+ return /* @__PURE__ */ jsx(Fragment, { children: headSnippetElements.map(
22
+ (element, i) => isScriptElement(element) ? /* @__PURE__ */ jsx(Script, { ...element.props, strategy: "beforeInteractive" }, element.key) : /* @__PURE__ */ jsx(Head, { children: element }, isValidElement(element) ? element.key : i)
23
+ ) });
20
24
  }
21
25
  export {
22
26
  HeadSnippet
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/next/components/framework-provider/pages-router/HeadSnippet.tsx"],"sourcesContent":["import { useEffect } from 'react'\n\nimport Head from 'next/head'\n\nimport { type Snippet } from '../../../../client'\n\nimport {\n snippetToElement,\n getSnippetElementsFromDOM,\n cleanUpSnippet,\n} from '../../../../runtimes/react/components/page/HeadSnippet'\n\nexport function HeadSnippet({ snippet }: { snippet: Snippet }) {\n useEffect(() => {\n return () => {\n const snippetElements = getSnippetElementsFromDOM(snippet)\n if (snippetElements.length > 0) return\n cleanUpSnippet(snippet)\n }\n }, [snippet])\n\n const headSnippetElement = snippetToElement(snippet)\n\n return <Head>{headSnippetElement}</Head>\n}\n"],"mappings":"AAuBS;AAvBT,SAAS,iBAAiB;AAE1B,OAAO,UAAU;AAIjB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEA,SAAS,YAAY,EAAE,QAAQ,GAAyB;AAC7D,YAAU,MAAM;AACd,WAAO,MAAM;AACX,YAAM,kBAAkB,0BAA0B,OAAO;AACzD,UAAI,gBAAgB,SAAS;AAAG;AAChC,qBAAe,OAAO;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,qBAAqB,iBAAiB,OAAO;AAEnD,SAAO,oBAAC,QAAM,8BAAmB;AACnC;","names":[]}
1
+ {"version":3,"sources":["../../../../../../src/next/components/framework-provider/pages-router/HeadSnippet.tsx"],"sourcesContent":["import { type ReactElement, useEffect, isValidElement } from 'react'\n\nimport Head from 'next/head'\nimport Script from 'next/script'\n\nimport { type Snippet } from '../../../../client'\n\nimport {\n snippetToElements,\n getSnippetElementsFromDOM,\n cleanUpSnippet,\n} from '../../../../runtimes/react/components/page/HeadSnippet'\n\nconst isScriptElement = (element: string | JSX.Element): element is ReactElement<any, 'script'> =>\n isValidElement(element) && element.type === 'script'\n\nexport function HeadSnippet({ snippet }: { snippet: Snippet }) {\n useEffect(() => {\n return () => {\n const snippetElements = getSnippetElementsFromDOM(snippet)\n if (snippetElements.length > 0) return\n cleanUpSnippet(snippet)\n }\n }, [snippet])\n\n const headSnippetElements = snippetToElements(snippet)\n\n return (\n <>\n {headSnippetElements.map((element, i) =>\n isScriptElement(element) ? (\n <Script key={element.key} {...element.props} strategy=\"beforeInteractive\" />\n ) : (\n <Head key={isValidElement(element) ? element.key : i}>{element}</Head>\n ),\n )}\n </>\n )\n}\n"],"mappings":"AA4BI,mBAGM,WAHN;AA5BJ,SAA4B,WAAW,sBAAsB;AAE7D,OAAO,UAAU;AACjB,OAAO,YAAY;AAInB;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,MAAM,kBAAkB,CAAC,YACvB,eAAe,OAAO,KAAK,QAAQ,SAAS;AAEvC,SAAS,YAAY,EAAE,QAAQ,GAAyB;AAC7D,YAAU,MAAM;AACd,WAAO,MAAM;AACX,YAAM,kBAAkB,0BAA0B,OAAO;AACzD,UAAI,gBAAgB,SAAS;AAAG;AAChC,qBAAe,OAAO;AAAA,IACxB;AAAA,EACF,GAAG,CAAC,OAAO,CAAC;AAEZ,QAAM,sBAAsB,kBAAkB,OAAO;AAErD,SACE,gCACG,8BAAoB;AAAA,IAAI,CAAC,SAAS,MACjC,gBAAgB,OAAO,IACrB,oBAAC,UAA0B,GAAG,QAAQ,OAAO,UAAS,uBAAzC,QAAQ,GAAqD,IAE1E,oBAAC,QAAsD,qBAA5C,eAAe,OAAO,IAAI,QAAQ,MAAM,CAAY;AAAA,EAEnE,GACF;AAEJ;","names":[]}
@@ -0,0 +1,22 @@
1
+ import { MakeswiftComponentType } from "../../../../components";
2
+ const pageDocument = {
3
+ id: "2222-2222-2222-2222",
4
+ site: {
5
+ id: "1111-1111-1111-1111"
6
+ },
7
+ data: {
8
+ type: MakeswiftComponentType.Root,
9
+ key: "0000-0000-0000-0000",
10
+ props: {}
11
+ },
12
+ snippets: [],
13
+ fonts: [],
14
+ localizedPages: [],
15
+ locale: null,
16
+ meta: {},
17
+ seo: {}
18
+ };
19
+ export {
20
+ pageDocument
21
+ };
22
+ //# sourceMappingURL=page-document.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../src/next/components/tests/__fixtures__/page-document.ts"],"sourcesContent":["import { type MakeswiftPageDocument } from '../../../../client'\nimport { MakeswiftComponentType } from '../../../../components'\n\nexport const pageDocument: MakeswiftPageDocument = {\n id: '2222-2222-2222-2222',\n site: {\n id: '1111-1111-1111-1111',\n },\n data: {\n type: MakeswiftComponentType.Root,\n key: '0000-0000-0000-0000',\n props: {},\n },\n snippets: [],\n fonts: [],\n localizedPages: [],\n locale: null,\n meta: {},\n seo: {},\n}\n"],"mappings":"AACA,SAAS,8BAA8B;AAEhC,MAAM,eAAsC;AAAA,EACjD,IAAI;AAAA,EACJ,MAAM;AAAA,IACJ,IAAI;AAAA,EACN;AAAA,EACA,MAAM;AAAA,IACJ,MAAM,uBAAuB;AAAA,IAC7B,KAAK;AAAA,IACL,OAAO,CAAC;AAAA,EACV;AAAA,EACA,UAAU,CAAC;AAAA,EACX,OAAO,CAAC;AAAA,EACR,gBAAgB,CAAC;AAAA,EACjB,QAAQ;AAAA,EACR,MAAM,CAAC;AAAA,EACP,KAAK,CAAC;AACR;","names":[]}
@@ -21,15 +21,16 @@ function createRootComponent(elements, rootId) {
21
21
  }
22
22
  };
23
23
  }
24
- function createMakeswiftPageSnapshot(elementData, {
24
+ const isDocument = (elementDataOrDocument) => "snippets" in elementDataOrDocument || "fonts" in elementDataOrDocument || "meta" in elementDataOrDocument || "seo" in elementDataOrDocument;
25
+ function createMakeswiftPageSnapshot(elementDataOrDocument, {
25
26
  cacheData = {},
26
27
  locale = null
27
28
  } = {}) {
28
29
  return {
29
- document: {
30
+ document: isDocument(elementDataOrDocument) ? elementDataOrDocument : {
30
31
  id: "test-page-id",
31
32
  site: { id: "test-site-id" },
32
- data: elementData,
33
+ data: elementDataOrDocument,
33
34
  snippets: [],
34
35
  fonts: [],
35
36
  meta: {},
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/next/testing/element-data.ts"],"sourcesContent":["import { randomUUID } from 'crypto'\n\nimport { type MakeswiftPageSnapshot, type MakeswiftComponentSnapshot } from '../../client'\nimport { CacheData } from '../../api/react'\nimport { type ElementData } from '../../state/react-page'\nimport { MakeswiftComponentType } from '../../components'\n\nexport function createRootComponent(elements: ElementData[], rootId?: string) {\n return {\n key: rootId ?? randomUUID(),\n type: MakeswiftComponentType.Root,\n props: {\n children: {\n columns: [\n {\n deviceId: 'desktop',\n value: {\n count: 12,\n spans: elements?.map(() => [12]),\n },\n },\n ],\n elements,\n },\n },\n }\n}\n\nexport function createMakeswiftPageSnapshot(\n elementData: ElementData,\n {\n cacheData = {},\n locale = null,\n }: { cacheData?: Partial<MakeswiftPageSnapshot['cacheData']>; locale?: string | null } = {},\n): MakeswiftPageSnapshot {\n return {\n document: {\n id: 'test-page-id',\n site: { id: 'test-site-id' },\n data: elementData,\n snippets: [],\n fonts: [],\n meta: {},\n seo: {},\n localizedPages: [],\n locale,\n },\n cacheData: {\n ...CacheData.empty(),\n ...cacheData,\n },\n }\n}\n\nexport function createMakeswiftComponentSnapshot(\n elementData: ElementData,\n {\n cacheData = {},\n locale = null,\n }: { cacheData?: Partial<MakeswiftComponentSnapshot['cacheData']>; locale?: string | null } = {},\n): MakeswiftComponentSnapshot {\n return {\n key: randomUUID(),\n document: {\n id: 'test-component-id',\n name: 'Test Component Document',\n siteId: 'test-site-id',\n data: elementData,\n inheritsFromParent: false,\n locale,\n },\n meta: {\n allowLocaleFallback: false,\n requestedLocale: locale,\n },\n cacheData: {\n ...CacheData.empty(),\n ...cacheData,\n },\n }\n}\n"],"mappings":"AAAA,SAAS,kBAAkB;AAG3B,SAAS,iBAAiB;AAE1B,SAAS,8BAA8B;AAEhC,SAAS,oBAAoB,UAAyB,QAAiB;AAC5E,SAAO;AAAA,IACL,KAAK,UAAU,WAAW;AAAA,IAC1B,MAAM,uBAAuB;AAAA,IAC7B,OAAO;AAAA,MACL,UAAU;AAAA,QACR,SAAS;AAAA,UACP;AAAA,YACE,UAAU;AAAA,YACV,OAAO;AAAA,cACL,OAAO;AAAA,cACP,OAAO,UAAU,IAAI,MAAM,CAAC,EAAE,CAAC;AAAA,YACjC;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEO,SAAS,4BACd,aACA;AAAA,EACE,YAAY,CAAC;AAAA,EACb,SAAS;AACX,IAAyF,CAAC,GACnE;AACvB,SAAO;AAAA,IACL,UAAU;AAAA,MACR,IAAI;AAAA,MACJ,MAAM,EAAE,IAAI,eAAe;AAAA,MAC3B,MAAM;AAAA,MACN,UAAU,CAAC;AAAA,MACX,OAAO,CAAC;AAAA,MACR,MAAM,CAAC;AAAA,MACP,KAAK,CAAC;AAAA,MACN,gBAAgB,CAAC;AAAA,MACjB;AAAA,IACF;AAAA,IACA,WAAW;AAAA,MACT,GAAG,UAAU,MAAM;AAAA,MACnB,GAAG;AAAA,IACL;AAAA,EACF;AACF;AAEO,SAAS,iCACd,aACA;AAAA,EACE,YAAY,CAAC;AAAA,EACb,SAAS;AACX,IAA8F,CAAC,GACnE;AAC5B,SAAO;AAAA,IACL,KAAK,WAAW;AAAA,IAChB,UAAU;AAAA,MACR,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,oBAAoB;AAAA,MACpB;AAAA,IACF;AAAA,IACA,MAAM;AAAA,MACJ,qBAAqB;AAAA,MACrB,iBAAiB;AAAA,IACnB;AAAA,IACA,WAAW;AAAA,MACT,GAAG,UAAU,MAAM;AAAA,MACnB,GAAG;AAAA,IACL;AAAA,EACF;AACF;","names":[]}
1
+ {"version":3,"sources":["../../../../src/next/testing/element-data.ts"],"sourcesContent":["import { randomUUID } from 'crypto'\n\nimport {\n type MakeswiftPageSnapshot,\n type MakeswiftPageDocument,\n type MakeswiftComponentSnapshot,\n} from '../../client'\nimport { CacheData } from '../../api/react'\nimport { type ElementData } from '../../state/react-page'\nimport { MakeswiftComponentType } from '../../components'\n\nexport function createRootComponent(elements: ElementData[], rootId?: string) {\n return {\n key: rootId ?? randomUUID(),\n type: MakeswiftComponentType.Root,\n props: {\n children: {\n columns: [\n {\n deviceId: 'desktop',\n value: {\n count: 12,\n spans: elements?.map(() => [12]),\n },\n },\n ],\n elements,\n },\n },\n }\n}\n\nconst isDocument = (\n elementDataOrDocument: ElementData | MakeswiftPageDocument,\n): elementDataOrDocument is MakeswiftPageDocument =>\n 'snippets' in elementDataOrDocument ||\n 'fonts' in elementDataOrDocument ||\n 'meta' in elementDataOrDocument ||\n 'seo' in elementDataOrDocument\n\nexport function createMakeswiftPageSnapshot(\n elementDataOrDocument: ElementData | MakeswiftPageDocument,\n {\n cacheData = {},\n locale = null,\n }: { cacheData?: Partial<MakeswiftPageSnapshot['cacheData']>; locale?: string | null } = {},\n): MakeswiftPageSnapshot {\n return {\n document: isDocument(elementDataOrDocument)\n ? elementDataOrDocument\n : {\n id: 'test-page-id',\n site: { id: 'test-site-id' },\n data: elementDataOrDocument,\n snippets: [],\n fonts: [],\n meta: {},\n seo: {},\n localizedPages: [],\n locale,\n },\n cacheData: {\n ...CacheData.empty(),\n ...cacheData,\n },\n }\n}\n\nexport function createMakeswiftComponentSnapshot(\n elementData: ElementData,\n {\n cacheData = {},\n locale = null,\n }: { cacheData?: Partial<MakeswiftComponentSnapshot['cacheData']>; locale?: string | null } = {},\n): MakeswiftComponentSnapshot {\n return {\n key: randomUUID(),\n document: {\n id: 'test-component-id',\n name: 'Test Component Document',\n siteId: 'test-site-id',\n data: elementData,\n inheritsFromParent: false,\n locale,\n },\n meta: {\n allowLocaleFallback: false,\n requestedLocale: locale,\n },\n cacheData: {\n ...CacheData.empty(),\n ...cacheData,\n },\n }\n}\n"],"mappings":"AAAA,SAAS,kBAAkB;AAO3B,SAAS,iBAAiB;AAE1B,SAAS,8BAA8B;AAEhC,SAAS,oBAAoB,UAAyB,QAAiB;AAC5E,SAAO;AAAA,IACL,KAAK,UAAU,WAAW;AAAA,IAC1B,MAAM,uBAAuB;AAAA,IAC7B,OAAO;AAAA,MACL,UAAU;AAAA,QACR,SAAS;AAAA,UACP;AAAA,YACE,UAAU;AAAA,YACV,OAAO;AAAA,cACL,OAAO;AAAA,cACP,OAAO,UAAU,IAAI,MAAM,CAAC,EAAE,CAAC;AAAA,YACjC;AAAA,UACF;AAAA,QACF;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,EACF;AACF;AAEA,MAAM,aAAa,CACjB,0BAEA,cAAc,yBACd,WAAW,yBACX,UAAU,yBACV,SAAS;AAEJ,SAAS,4BACd,uBACA;AAAA,EACE,YAAY,CAAC;AAAA,EACb,SAAS;AACX,IAAyF,CAAC,GACnE;AACvB,SAAO;AAAA,IACL,UAAU,WAAW,qBAAqB,IACtC,wBACA;AAAA,MACE,IAAI;AAAA,MACJ,MAAM,EAAE,IAAI,eAAe;AAAA,MAC3B,MAAM;AAAA,MACN,UAAU,CAAC;AAAA,MACX,OAAO,CAAC;AAAA,MACR,MAAM,CAAC;AAAA,MACP,KAAK,CAAC;AAAA,MACN,gBAAgB,CAAC;AAAA,MACjB;AAAA,IACF;AAAA,IACJ,WAAW;AAAA,MACT,GAAG,UAAU,MAAM;AAAA,MACnB,GAAG;AAAA,IACL;AAAA,EACF;AACF;AAEO,SAAS,iCACd,aACA;AAAA,EACE,YAAY,CAAC;AAAA,EACb,SAAS;AACX,IAA8F,CAAC,GACnE;AAC5B,SAAO;AAAA,IACL,KAAK,WAAW;AAAA,IAChB,UAAU;AAAA,MACR,IAAI;AAAA,MACJ,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,oBAAoB;AAAA,MACpB;AAAA,IACF;AAAA,IACA,MAAM;AAAA,MACJ,qBAAqB;AAAA,MACrB,iBAAiB;AAAA,IACnB;AAAA,IACA,WAAW;AAAA,MACT,GAAG,UAAU,MAAM;AAAA,MACnB,GAAG;AAAA,IACL;AAAA,EACF;AACF;","names":[]}
@@ -1,4 +1,5 @@
1
1
  export * from "./breakpoints";
2
2
  export * from "./element-data";
3
3
  export * from "./react-provider";
4
+ export * from "./page-rendering";
4
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/next/testing/index.ts"],"sourcesContent":["export * from './breakpoints'\nexport * from './element-data'\nexport * from './react-provider'\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
1
+ {"version":3,"sources":["../../../../src/next/testing/index.ts"],"sourcesContent":["export * from './breakpoints'\nexport * from './element-data'\nexport * from './react-provider'\nexport * from './page-rendering'\n"],"mappings":"AAAA,cAAc;AACd,cAAc;AACd,cAAc;AACd,cAAc;","names":[]}
@@ -0,0 +1,28 @@
1
+ import { Fragment, jsx } from "react/jsx-runtime";
2
+ import "@testing-library/jest-dom";
3
+ import { act } from "react-dom/test-utils";
4
+ import { render } from "@testing-library/react";
5
+ import { ReactRuntime } from "../../runtimes/react/react-runtime";
6
+ import { MakeswiftComponentType } from "../../components";
7
+ import { Page as MakeswiftPage } from "../components/page";
8
+ import { ReactProvider } from "./react-provider";
9
+ async function testMakeswiftPageHeadRendering(props, { forcePagesRouter = false } = {}) {
10
+ const runtime = new ReactRuntime();
11
+ runtime.registerComponent(() => /* @__PURE__ */ jsx(Fragment, {}), {
12
+ type: MakeswiftComponentType.Root,
13
+ label: "Root",
14
+ props: {}
15
+ });
16
+ return await act(
17
+ async () => render(
18
+ /* @__PURE__ */ jsx(ReactProvider, { runtime, previewMode: false, forcePagesRouter, children: /* @__PURE__ */ jsx(MakeswiftPage, { ...props }) }),
19
+ {
20
+ container: document.body.appendChild(document.createElement("head"))
21
+ }
22
+ )
23
+ );
24
+ }
25
+ export {
26
+ testMakeswiftPageHeadRendering
27
+ };
28
+ //# sourceMappingURL=page-rendering.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/next/testing/page-rendering.tsx"],"sourcesContent":["import { type ComponentPropsWithoutRef } from 'react'\n\nimport '@testing-library/jest-dom'\nimport { act } from 'react-dom/test-utils'\nimport { render } from '@testing-library/react'\n\nimport { ReactRuntime } from '../../runtimes/react/react-runtime'\nimport { MakeswiftComponentType } from '../../components'\n\nimport { Page as MakeswiftPage } from '../components/page'\n\nimport { ReactProvider } from './react-provider'\n\nexport async function testMakeswiftPageHeadRendering(\n props: ComponentPropsWithoutRef<typeof MakeswiftPage>,\n { forcePagesRouter = false }: { forcePagesRouter?: boolean } = {},\n) {\n const runtime = new ReactRuntime()\n\n runtime.registerComponent(() => <></>, {\n type: MakeswiftComponentType.Root,\n label: 'Root',\n props: {},\n })\n\n return await act(async () =>\n render(\n <ReactProvider runtime={runtime} previewMode={false} forcePagesRouter={forcePagesRouter}>\n <MakeswiftPage {...props} />\n </ReactProvider>,\n {\n container: document.body.appendChild(document.createElement('head')),\n },\n ),\n )\n}\n"],"mappings":"AAmBkC;AAjBlC,OAAO;AACP,SAAS,WAAW;AACpB,SAAS,cAAc;AAEvB,SAAS,oBAAoB;AAC7B,SAAS,8BAA8B;AAEvC,SAAS,QAAQ,qBAAqB;AAEtC,SAAS,qBAAqB;AAE9B,eAAsB,+BACpB,OACA,EAAE,mBAAmB,MAAM,IAAoC,CAAC,GAChE;AACA,QAAM,UAAU,IAAI,aAAa;AAEjC,UAAQ,kBAAkB,MAAM,gCAAE,GAAK;AAAA,IACrC,MAAM,uBAAuB;AAAA,IAC7B,OAAO;AAAA,IACP,OAAO,CAAC;AAAA,EACV,CAAC;AAED,SAAO,MAAM;AAAA,IAAI,YACf;AAAA,MACE,oBAAC,iBAAc,SAAkB,aAAa,OAAO,kBACnD,8BAAC,iBAAe,GAAG,OAAO,GAC5B;AAAA,MACA;AAAA,QACE,WAAW,SAAS,KAAK,YAAY,SAAS,cAAc,MAAM,CAAC;AAAA,MACrE;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -1,12 +1,14 @@
1
1
  import { jsx } from "react/jsx-runtime";
2
+ import { RuntimeProvider } from "../../runtimes/react/components/RuntimeProvider";
3
+ import { FrameworkProvider } from "../components/framework-provider";
2
4
  import { RootStyleRegistry } from "../root-style-registry";
3
- import { NextRuntimeProvider } from "../runtime-provider";
4
5
  function ReactProvider({
5
6
  children,
6
7
  runtime,
7
- previewMode = false
8
+ previewMode = false,
9
+ forcePagesRouter = false
8
10
  }) {
9
- return /* @__PURE__ */ jsx(NextRuntimeProvider, { previewMode, runtime, children: /* @__PURE__ */ jsx(RootStyleRegistry, { children }) });
11
+ return /* @__PURE__ */ jsx(FrameworkProvider, { forcePagesRouter, children: /* @__PURE__ */ jsx(RuntimeProvider, { previewMode, runtime, children: /* @__PURE__ */ jsx(RootStyleRegistry, { children }) }) });
10
12
  }
11
13
  export {
12
14
  ReactProvider
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../src/next/testing/react-provider.tsx"],"sourcesContent":["import { ReactRuntime } from '../../runtimes/react/react-runtime'\n\nimport { RootStyleRegistry } from '../root-style-registry'\nimport { NextRuntimeProvider } from '../runtime-provider'\n\nexport function ReactProvider({\n children,\n runtime,\n previewMode = false,\n}: {\n children: React.ReactNode\n runtime: ReactRuntime\n previewMode?: boolean\n}) {\n return (\n <NextRuntimeProvider previewMode={previewMode} runtime={runtime}>\n <RootStyleRegistry>{children}</RootStyleRegistry>\n </NextRuntimeProvider>\n )\n}\n"],"mappings":"AAgBM;AAdN,SAAS,yBAAyB;AAClC,SAAS,2BAA2B;AAE7B,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,cAAc;AAChB,GAIG;AACD,SACE,oBAAC,uBAAoB,aAA0B,SAC7C,8BAAC,qBAAmB,UAAS,GAC/B;AAEJ;","names":[]}
1
+ {"version":3,"sources":["../../../../src/next/testing/react-provider.tsx"],"sourcesContent":["import { ReactRuntime } from '../../runtimes/react/react-runtime'\nimport { RuntimeProvider } from '../../runtimes/react/components/RuntimeProvider'\n\nimport { FrameworkProvider } from '../components/framework-provider'\nimport { RootStyleRegistry } from '../root-style-registry'\n\nexport function ReactProvider({\n children,\n runtime,\n previewMode = false,\n forcePagesRouter = false,\n}: {\n children: React.ReactNode\n runtime: ReactRuntime\n previewMode?: boolean\n forcePagesRouter?: boolean\n}) {\n return (\n <FrameworkProvider forcePagesRouter={forcePagesRouter}>\n <RuntimeProvider previewMode={previewMode} runtime={runtime}>\n <RootStyleRegistry>{children}</RootStyleRegistry>\n </RuntimeProvider>\n </FrameworkProvider>\n )\n}\n"],"mappings":"AAoBQ;AAnBR,SAAS,uBAAuB;AAEhC,SAAS,yBAAyB;AAClC,SAAS,yBAAyB;AAE3B,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA,cAAc;AAAA,EACd,mBAAmB;AACrB,GAKG;AACD,SACE,oBAAC,qBAAkB,kBACjB,8BAAC,mBAAgB,aAA0B,SACzC,8BAAC,qBAAmB,UAAS,GAC/B,GACF;AAEJ;","names":[]}
@@ -21,7 +21,7 @@ const VALID_HEAD_ELEMENT_TYPES = [
21
21
  "noscript",
22
22
  "template"
23
23
  ];
24
- function snippetToElement(snippet) {
24
+ function snippetToElements(snippet) {
25
25
  return Children.map(parse(snippet.code), (element) => {
26
26
  if (typeof element === "string")
27
27
  return element;
@@ -75,6 +75,6 @@ export {
75
75
  cleanUpSnippet,
76
76
  getSnippetElementsFromDOM,
77
77
  renderSnippetAndExecuteScripts,
78
- snippetToElement
78
+ snippetToElements
79
79
  };
80
80
  //# sourceMappingURL=HeadSnippet.js.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/runtimes/react/components/page/HeadSnippet.tsx"],"sourcesContent":["import { Children, createElement, useEffect } from 'react'\nimport parse from 'html-react-parser'\n\nimport { type Snippet } from '../../../../client'\n\nexport function BaseHeadSnippet({ snippet }: { snippet: Snippet }) {\n useEffect(() => {\n const snippetElements = getSnippetElementsFromDOM(snippet)\n const isAlreadyInTheDOM = snippetElements.length > 0\n\n if (isAlreadyInTheDOM) return\n\n return renderSnippetAndExecuteScripts(snippet, window.document.head)\n }, [snippet])\n\n return null\n}\n\nconst SNIPPET_ID_ATRIBUTE_NAME = 'data-makeswift-snippet-id'\n\nconst VALID_HEAD_ELEMENT_TYPES = [\n 'title',\n 'base',\n 'link',\n 'style',\n 'meta',\n 'script',\n 'noscript',\n 'template',\n]\n\nexport function snippetToElement(snippet: Pick<Snippet, 'id' | 'code'>): (string | JSX.Element)[] {\n return Children.map(parse(snippet.code), element => {\n if (typeof element === 'string') return element\n\n if (!VALID_HEAD_ELEMENT_TYPES.includes(element.type as string)) return null\n\n const key = element.key ? `${snippet.id}:${element.key}` : snippet.id\n\n return createElement(element.type, {\n ...element.props,\n key,\n [SNIPPET_ID_ATRIBUTE_NAME]: snippet.id,\n })\n })\n}\n\nexport function renderSnippetAndExecuteScripts(\n snippet: Snippet,\n container: HTMLElement,\n): () => void {\n const virtualContainer = container.ownerDocument.createElement(container.tagName)\n\n virtualContainer.innerHTML = snippet.code\n\n const elements = Array.from(virtualContainer.querySelectorAll('*'))\n const scripts = elements.filter(el => el instanceof HTMLScriptElement)\n\n scripts.forEach(script => {\n const clone = script.ownerDocument.createElement(script.tagName)\n\n clone.textContent = script.textContent\n Array.from(script.attributes).forEach(({ name, value }) => {\n clone.setAttribute(name, value)\n })\n clone.setAttribute(SNIPPET_ID_ATRIBUTE_NAME, snippet.id)\n script.parentNode?.replaceChild(clone, script)\n })\n\n const nodes = Array.from(virtualContainer.childNodes)\n container.append(...nodes)\n\n return () => {\n nodes.forEach(node => {\n node.parentNode?.removeChild(node)\n })\n\n cleanUpSnippet(snippet)\n }\n}\n\nexport function cleanUpSnippet(snippet: Snippet): void {\n if (snippet.cleanup == null) return\n try {\n const cleanUp = new Function(snippet.cleanup)\n cleanUp()\n } catch {\n // Ignore errors from user input.\n }\n}\n\nexport function getSnippetElementsFromDOM(snippet: Snippet) {\n return document.head.querySelectorAll(`[${SNIPPET_ID_ATRIBUTE_NAME}=\"${snippet.id}\"]`)\n}\n"],"mappings":"AAAA,SAAS,UAAU,eAAe,iBAAiB;AACnD,OAAO,WAAW;AAIX,SAAS,gBAAgB,EAAE,QAAQ,GAAyB;AACjE,YAAU,MAAM;AACd,UAAM,kBAAkB,0BAA0B,OAAO;AACzD,UAAM,oBAAoB,gBAAgB,SAAS;AAEnD,QAAI;AAAmB;AAEvB,WAAO,+BAA+B,SAAS,OAAO,SAAS,IAAI;AAAA,EACrE,GAAG,CAAC,OAAO,CAAC;AAEZ,SAAO;AACT;AAEA,MAAM,2BAA2B;AAEjC,MAAM,2BAA2B;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,iBAAiB,SAAiE;AAChG,SAAO,SAAS,IAAI,MAAM,QAAQ,IAAI,GAAG,aAAW;AAClD,QAAI,OAAO,YAAY;AAAU,aAAO;AAExC,QAAI,CAAC,yBAAyB,SAAS,QAAQ,IAAc;AAAG,aAAO;AAEvE,UAAM,MAAM,QAAQ,MAAM,GAAG,QAAQ,EAAE,IAAI,QAAQ,GAAG,KAAK,QAAQ;AAEnE,WAAO,cAAc,QAAQ,MAAM;AAAA,MACjC,GAAG,QAAQ;AAAA,MACX;AAAA,MACA,CAAC,wBAAwB,GAAG,QAAQ;AAAA,IACtC,CAAC;AAAA,EACH,CAAC;AACH;AAEO,SAAS,+BACd,SACA,WACY;AACZ,QAAM,mBAAmB,UAAU,cAAc,cAAc,UAAU,OAAO;AAEhF,mBAAiB,YAAY,QAAQ;AAErC,QAAM,WAAW,MAAM,KAAK,iBAAiB,iBAAiB,GAAG,CAAC;AAClE,QAAM,UAAU,SAAS,OAAO,QAAM,cAAc,iBAAiB;AAErE,UAAQ,QAAQ,YAAU;AACxB,UAAM,QAAQ,OAAO,cAAc,cAAc,OAAO,OAAO;AAE/D,UAAM,cAAc,OAAO;AAC3B,UAAM,KAAK,OAAO,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,MAAM,MAAM;AACzD,YAAM,aAAa,MAAM,KAAK;AAAA,IAChC,CAAC;AACD,UAAM,aAAa,0BAA0B,QAAQ,EAAE;AACvD,WAAO,YAAY,aAAa,OAAO,MAAM;AAAA,EAC/C,CAAC;AAED,QAAM,QAAQ,MAAM,KAAK,iBAAiB,UAAU;AACpD,YAAU,OAAO,GAAG,KAAK;AAEzB,SAAO,MAAM;AACX,UAAM,QAAQ,UAAQ;AACpB,WAAK,YAAY,YAAY,IAAI;AAAA,IACnC,CAAC;AAED,mBAAe,OAAO;AAAA,EACxB;AACF;AAEO,SAAS,eAAe,SAAwB;AACrD,MAAI,QAAQ,WAAW;AAAM;AAC7B,MAAI;AACF,UAAM,UAAU,IAAI,SAAS,QAAQ,OAAO;AAC5C,YAAQ;AAAA,EACV,QAAQ;AAAA,EAER;AACF;AAEO,SAAS,0BAA0B,SAAkB;AAC1D,SAAO,SAAS,KAAK,iBAAiB,IAAI,wBAAwB,KAAK,QAAQ,EAAE,IAAI;AACvF;","names":[]}
1
+ {"version":3,"sources":["../../../../../../src/runtimes/react/components/page/HeadSnippet.tsx"],"sourcesContent":["import { Children, createElement, useEffect } from 'react'\nimport parse from 'html-react-parser'\n\nimport { type Snippet } from '../../../../client'\n\nexport function BaseHeadSnippet({ snippet }: { snippet: Snippet }) {\n useEffect(() => {\n const snippetElements = getSnippetElementsFromDOM(snippet)\n const isAlreadyInTheDOM = snippetElements.length > 0\n\n if (isAlreadyInTheDOM) return\n\n return renderSnippetAndExecuteScripts(snippet, window.document.head)\n }, [snippet])\n\n return null\n}\n\nconst SNIPPET_ID_ATRIBUTE_NAME = 'data-makeswift-snippet-id'\n\nconst VALID_HEAD_ELEMENT_TYPES = [\n 'title',\n 'base',\n 'link',\n 'style',\n 'meta',\n 'script',\n 'noscript',\n 'template',\n]\n\nexport function snippetToElements(snippet: Pick<Snippet, 'id' | 'code'>): (string | JSX.Element)[] {\n return Children.map(parse(snippet.code), element => {\n if (typeof element === 'string') return element\n\n if (!VALID_HEAD_ELEMENT_TYPES.includes(element.type as string)) return null\n\n const key = element.key ? `${snippet.id}:${element.key}` : snippet.id\n\n return createElement(element.type, {\n ...element.props,\n key,\n [SNIPPET_ID_ATRIBUTE_NAME]: snippet.id,\n })\n })\n}\n\nexport function renderSnippetAndExecuteScripts(\n snippet: Snippet,\n container: HTMLElement,\n): () => void {\n const virtualContainer = container.ownerDocument.createElement(container.tagName)\n\n virtualContainer.innerHTML = snippet.code\n\n const elements = Array.from(virtualContainer.querySelectorAll('*'))\n const scripts = elements.filter(el => el instanceof HTMLScriptElement)\n\n scripts.forEach(script => {\n const clone = script.ownerDocument.createElement(script.tagName)\n\n clone.textContent = script.textContent\n Array.from(script.attributes).forEach(({ name, value }) => {\n clone.setAttribute(name, value)\n })\n clone.setAttribute(SNIPPET_ID_ATRIBUTE_NAME, snippet.id)\n script.parentNode?.replaceChild(clone, script)\n })\n\n const nodes = Array.from(virtualContainer.childNodes)\n container.append(...nodes)\n\n return () => {\n nodes.forEach(node => {\n node.parentNode?.removeChild(node)\n })\n\n cleanUpSnippet(snippet)\n }\n}\n\nexport function cleanUpSnippet(snippet: Snippet): void {\n if (snippet.cleanup == null) return\n try {\n const cleanUp = new Function(snippet.cleanup)\n cleanUp()\n } catch {\n // Ignore errors from user input.\n }\n}\n\nexport function getSnippetElementsFromDOM(snippet: Snippet) {\n return document.head.querySelectorAll(`[${SNIPPET_ID_ATRIBUTE_NAME}=\"${snippet.id}\"]`)\n}\n"],"mappings":"AAAA,SAAS,UAAU,eAAe,iBAAiB;AACnD,OAAO,WAAW;AAIX,SAAS,gBAAgB,EAAE,QAAQ,GAAyB;AACjE,YAAU,MAAM;AACd,UAAM,kBAAkB,0BAA0B,OAAO;AACzD,UAAM,oBAAoB,gBAAgB,SAAS;AAEnD,QAAI;AAAmB;AAEvB,WAAO,+BAA+B,SAAS,OAAO,SAAS,IAAI;AAAA,EACrE,GAAG,CAAC,OAAO,CAAC;AAEZ,SAAO;AACT;AAEA,MAAM,2BAA2B;AAEjC,MAAM,2BAA2B;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,SAAS,kBAAkB,SAAiE;AACjG,SAAO,SAAS,IAAI,MAAM,QAAQ,IAAI,GAAG,aAAW;AAClD,QAAI,OAAO,YAAY;AAAU,aAAO;AAExC,QAAI,CAAC,yBAAyB,SAAS,QAAQ,IAAc;AAAG,aAAO;AAEvE,UAAM,MAAM,QAAQ,MAAM,GAAG,QAAQ,EAAE,IAAI,QAAQ,GAAG,KAAK,QAAQ;AAEnE,WAAO,cAAc,QAAQ,MAAM;AAAA,MACjC,GAAG,QAAQ;AAAA,MACX;AAAA,MACA,CAAC,wBAAwB,GAAG,QAAQ;AAAA,IACtC,CAAC;AAAA,EACH,CAAC;AACH;AAEO,SAAS,+BACd,SACA,WACY;AACZ,QAAM,mBAAmB,UAAU,cAAc,cAAc,UAAU,OAAO;AAEhF,mBAAiB,YAAY,QAAQ;AAErC,QAAM,WAAW,MAAM,KAAK,iBAAiB,iBAAiB,GAAG,CAAC;AAClE,QAAM,UAAU,SAAS,OAAO,QAAM,cAAc,iBAAiB;AAErE,UAAQ,QAAQ,YAAU;AACxB,UAAM,QAAQ,OAAO,cAAc,cAAc,OAAO,OAAO;AAE/D,UAAM,cAAc,OAAO;AAC3B,UAAM,KAAK,OAAO,UAAU,EAAE,QAAQ,CAAC,EAAE,MAAM,MAAM,MAAM;AACzD,YAAM,aAAa,MAAM,KAAK;AAAA,IAChC,CAAC;AACD,UAAM,aAAa,0BAA0B,QAAQ,EAAE;AACvD,WAAO,YAAY,aAAa,OAAO,MAAM;AAAA,EAC/C,CAAC;AAED,QAAM,QAAQ,MAAM,KAAK,iBAAiB,UAAU;AACpD,YAAU,OAAO,GAAG,KAAK;AAEzB,SAAO,MAAM;AACX,UAAM,QAAQ,UAAQ;AACpB,WAAK,YAAY,YAAY,IAAI;AAAA,IACnC,CAAC;AAED,mBAAe,OAAO;AAAA,EACxB;AACF;AAEO,SAAS,eAAe,SAAwB;AACrD,MAAI,QAAQ,WAAW;AAAM;AAC7B,MAAI;AACF,UAAM,UAAU,IAAI,SAAS,QAAQ,OAAO;AAC5C,YAAQ;AAAA,EACV,QAAQ;AAAA,EAER;AACF;AAEO,SAAS,0BAA0B,SAAkB;AAC1D,SAAO,SAAS,KAAK,iBAAiB,IAAI,wBAAwB,KAAK,QAAQ,EAAE,IAAI;AACvF;","names":[]}
@@ -1,3 +1,5 @@
1
1
  import { type PropsWithChildren } from 'react';
2
- export declare function FrameworkProvider({ children }: PropsWithChildren): import("react/jsx-runtime").JSX.Element;
2
+ export declare function FrameworkProvider({ children, forcePagesRouter, }: PropsWithChildren<{
3
+ forcePagesRouter?: boolean;
4
+ }>): import("react/jsx-runtime").JSX.Element;
3
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/next/components/framework-provider/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,iBAAiB,EAAW,MAAM,OAAO,CAAA;AAOvD,wBAAgB,iBAAiB,CAAC,EAAE,QAAQ,EAAE,EAAE,iBAAiB,2CAQhE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../src/next/components/framework-provider/index.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,iBAAiB,EAAW,MAAM,OAAO,CAAA;AAOvD,wBAAgB,iBAAiB,CAAC,EAChC,QAAQ,EACR,gBAAgB,GACjB,EAAE,iBAAiB,CAAC;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,2CAQnD"}
@@ -1 +1 @@
1
- {"version":3,"file":"HeadSnippet.d.ts","sourceRoot":"","sources":["../../../../../../src/next/components/framework-provider/pages-router/HeadSnippet.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAQjD,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,2CAY5D"}
1
+ {"version":3,"file":"HeadSnippet.d.ts","sourceRoot":"","sources":["../../../../../../src/next/components/framework-provider/pages-router/HeadSnippet.tsx"],"names":[],"mappings":"AAKA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAWjD,wBAAgB,WAAW,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,2CAsB5D"}
@@ -0,0 +1,3 @@
1
+ import { type MakeswiftPageDocument } from '../../../../client';
2
+ export declare const pageDocument: MakeswiftPageDocument;
3
+ //# sourceMappingURL=page-document.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-document.d.ts","sourceRoot":"","sources":["../../../../../../src/next/components/tests/__fixtures__/page-document.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,qBAAqB,EAAE,MAAM,oBAAoB,CAAA;AAG/D,eAAO,MAAM,YAAY,EAAE,qBAgB1B,CAAA"}
@@ -0,0 +1,3 @@
1
+ /** @jest-environment jsdom */
2
+ import '@testing-library/jest-dom';
3
+ //# sourceMappingURL=makeswift-page-snippets-rendering.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"makeswift-page-snippets-rendering.test.d.ts","sourceRoot":"","sources":["../../../../../src/next/components/tests/makeswift-page-snippets-rendering.test.tsx"],"names":[],"mappings":"AAAA,8BAA8B;AAE9B,OAAO,2BAA2B,CAAA"}
@@ -1,4 +1,4 @@
1
- import { type MakeswiftPageSnapshot, type MakeswiftComponentSnapshot } from '../../client';
1
+ import { type MakeswiftPageSnapshot, type MakeswiftPageDocument, type MakeswiftComponentSnapshot } from '../../client';
2
2
  import { type ElementData } from '../../state/react-page';
3
3
  export declare function createRootComponent(elements: ElementData[], rootId?: string): {
4
4
  key: string;
@@ -44,7 +44,7 @@ export declare function createRootComponent(elements: ElementData[], rootId?: st
44
44
  };
45
45
  };
46
46
  };
47
- export declare function createMakeswiftPageSnapshot(elementData: ElementData, { cacheData, locale, }?: {
47
+ export declare function createMakeswiftPageSnapshot(elementDataOrDocument: ElementData | MakeswiftPageDocument, { cacheData, locale, }?: {
48
48
  cacheData?: Partial<MakeswiftPageSnapshot['cacheData']>;
49
49
  locale?: string | null;
50
50
  }): MakeswiftPageSnapshot;
@@ -1 +1 @@
1
- {"version":3,"file":"element-data.d.ts","sourceRoot":"","sources":["../../../../src/next/testing/element-data.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,qBAAqB,EAAE,KAAK,0BAA0B,EAAE,MAAM,cAAc,CAAA;AAE1F,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAGzD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmB3E;AAED,wBAAgB,2BAA2B,CACzC,WAAW,EAAE,WAAW,EACxB,EACE,SAAc,EACd,MAAa,GACd,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,GAC1F,qBAAqB,CAkBvB;AAED,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,WAAW,EACxB,EACE,SAAc,EACd,MAAa,GACd,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,GAC/F,0BAA0B,CAoB5B"}
1
+ {"version":3,"file":"element-data.d.ts","sourceRoot":"","sources":["../../../../src/next/testing/element-data.ts"],"names":[],"mappings":"AAEA,OAAO,EACL,KAAK,qBAAqB,EAC1B,KAAK,qBAAqB,EAC1B,KAAK,0BAA0B,EAChC,MAAM,cAAc,CAAA;AAErB,OAAO,EAAE,KAAK,WAAW,EAAE,MAAM,wBAAwB,CAAA;AAGzD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,WAAW,EAAE,EAAE,MAAM,CAAC,EAAE,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAmB3E;AAUD,wBAAgB,2BAA2B,CACzC,qBAAqB,EAAE,WAAW,GAAG,qBAAqB,EAC1D,EACE,SAAc,EACd,MAAa,GACd,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,GAC1F,qBAAqB,CAoBvB;AAED,wBAAgB,gCAAgC,CAC9C,WAAW,EAAE,WAAW,EACxB,EACE,SAAc,EACd,MAAa,GACd,GAAE;IAAE,SAAS,CAAC,EAAE,OAAO,CAAC,0BAA0B,CAAC,WAAW,CAAC,CAAC,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAAO,GAC/F,0BAA0B,CAoB5B"}
@@ -1,4 +1,5 @@
1
1
  export * from './breakpoints';
2
2
  export * from './element-data';
3
3
  export * from './react-provider';
4
+ export * from './page-rendering';
4
5
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/next/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/next/testing/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAA;AAC7B,cAAc,gBAAgB,CAAA;AAC9B,cAAc,kBAAkB,CAAA;AAChC,cAAc,kBAAkB,CAAA"}
@@ -0,0 +1,7 @@
1
+ import { type ComponentPropsWithoutRef } from 'react';
2
+ import '@testing-library/jest-dom';
3
+ import { Page as MakeswiftPage } from '../components/page';
4
+ export declare function testMakeswiftPageHeadRendering(props: ComponentPropsWithoutRef<typeof MakeswiftPage>, { forcePagesRouter }?: {
5
+ forcePagesRouter?: boolean;
6
+ }): Promise<import("@testing-library/react").RenderResult<import("@testing-library/react").Queries, HTMLHeadElement, HTMLHeadElement>>;
7
+ //# sourceMappingURL=page-rendering.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"page-rendering.d.ts","sourceRoot":"","sources":["../../../../src/next/testing/page-rendering.tsx"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,wBAAwB,EAAE,MAAM,OAAO,CAAA;AAErD,OAAO,2BAA2B,CAAA;AAOlC,OAAO,EAAE,IAAI,IAAI,aAAa,EAAE,MAAM,oBAAoB,CAAA;AAI1D,wBAAsB,8BAA8B,CAClD,KAAK,EAAE,wBAAwB,CAAC,OAAO,aAAa,CAAC,EACrD,EAAE,gBAAwB,EAAE,GAAE;IAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAAO,sIAoBlE"}
@@ -1,8 +1,9 @@
1
1
  /// <reference types="react" />
2
2
  import { ReactRuntime } from '../../runtimes/react/react-runtime';
3
- export declare function ReactProvider({ children, runtime, previewMode, }: {
3
+ export declare function ReactProvider({ children, runtime, previewMode, forcePagesRouter, }: {
4
4
  children: React.ReactNode;
5
5
  runtime: ReactRuntime;
6
6
  previewMode?: boolean;
7
+ forcePagesRouter?: boolean;
7
8
  }): import("react/jsx-runtime").JSX.Element;
8
9
  //# sourceMappingURL=react-provider.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"react-provider.d.ts","sourceRoot":"","sources":["../../../../src/next/testing/react-provider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAKjE,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,OAAO,EACP,WAAmB,GACpB,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,OAAO,EAAE,YAAY,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;CACtB,2CAMA"}
1
+ {"version":3,"file":"react-provider.d.ts","sourceRoot":"","sources":["../../../../src/next/testing/react-provider.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oCAAoC,CAAA;AAMjE,wBAAgB,aAAa,CAAC,EAC5B,QAAQ,EACR,OAAO,EACP,WAAmB,EACnB,gBAAwB,GACzB,EAAE;IACD,QAAQ,EAAE,KAAK,CAAC,SAAS,CAAA;IACzB,OAAO,EAAE,YAAY,CAAA;IACrB,WAAW,CAAC,EAAE,OAAO,CAAA;IACrB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B,2CAQA"}
@@ -3,7 +3,7 @@ import { type Snippet } from '../../../../client';
3
3
  export declare function BaseHeadSnippet({ snippet }: {
4
4
  snippet: Snippet;
5
5
  }): null;
6
- export declare function snippetToElement(snippet: Pick<Snippet, 'id' | 'code'>): (string | JSX.Element)[];
6
+ export declare function snippetToElements(snippet: Pick<Snippet, 'id' | 'code'>): (string | JSX.Element)[];
7
7
  export declare function renderSnippetAndExecuteScripts(snippet: Snippet, container: HTMLElement): () => void;
8
8
  export declare function cleanUpSnippet(snippet: Snippet): void;
9
9
  export declare function getSnippetElementsFromDOM(snippet: Snippet): NodeListOf<Element>;
@@ -1 +1 @@
1
- {"version":3,"file":"HeadSnippet.d.ts","sourceRoot":"","sources":["../../../../../../src/runtimes/react/components/page/HeadSnippet.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAEjD,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,QAWhE;AAeD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,CAchG;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,WAAW,GACrB,MAAM,IAAI,CA6BZ;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQrD;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,uBAEzD"}
1
+ {"version":3,"file":"HeadSnippet.d.ts","sourceRoot":"","sources":["../../../../../../src/runtimes/react/components/page/HeadSnippet.tsx"],"names":[],"mappings":";AAGA,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,oBAAoB,CAAA;AAEjD,wBAAgB,eAAe,CAAC,EAAE,OAAO,EAAE,EAAE;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,QAWhE;AAeD,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,GAAG,MAAM,CAAC,GAAG,CAAC,MAAM,GAAG,GAAG,CAAC,OAAO,CAAC,EAAE,CAcjG;AAED,wBAAgB,8BAA8B,CAC5C,OAAO,EAAE,OAAO,EAChB,SAAS,EAAE,WAAW,GACrB,MAAM,IAAI,CA6BZ;AAED,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQrD;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,OAAO,uBAEzD"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@makeswift/runtime",
3
- "version": "0.25.0-canary.5",
3
+ "version": "0.25.0-canary.6",
4
4
  "license": "MIT",
5
5
  "files": [
6
6
  "dist",
@@ -173,8 +173,8 @@
173
173
  "use-sync-external-store": "^1.0.0-rc.0",
174
174
  "uuid": "^9.0.0",
175
175
  "zod": "^3.21.4",
176
- "@makeswift/controls": "0.1.12",
177
176
  "@makeswift/next-plugin": "0.4.1",
177
+ "@makeswift/controls": "0.1.12",
178
178
  "@makeswift/prop-controllers": "0.4.6-canary.1"
179
179
  },
180
180
  "devDependencies": {