@makeswift/runtime 0.23.1-canary.0 → 0.23.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/dist/cjs/jest-setup.js +3 -0
  2. package/dist/cjs/jest-setup.js.map +1 -1
  3. package/dist/cjs/next/api-handler/handlers/manifest.js +1 -1
  4. package/dist/cjs/next/api-handler/handlers/proxy-draft-mode.js +12 -2
  5. package/dist/cjs/next/api-handler/handlers/proxy-draft-mode.js.map +1 -1
  6. package/dist/cjs/next/components/tests/controls/color-control/fixtures.js +51 -0
  7. package/dist/cjs/next/components/tests/controls/color-control/fixtures.js.map +1 -0
  8. package/dist/cjs/next/components/tests/controls/page-control-prop-rendering.js +91 -35
  9. package/dist/cjs/next/components/tests/controls/page-control-prop-rendering.js.map +1 -1
  10. package/dist/cjs/next/components/tests/controls/rich-text-v2-control/fixtures.js +91 -0
  11. package/dist/cjs/next/components/tests/controls/rich-text-v2-control/fixtures.js.map +1 -0
  12. package/dist/cjs/next/components/tests/controls/style-control/fixtures.js +60 -0
  13. package/dist/cjs/next/components/tests/controls/style-control/fixtures.js.map +1 -0
  14. package/dist/cjs/next/components/tests/prop-controllers/page-prop-controller.js +20 -11
  15. package/dist/cjs/next/components/tests/prop-controllers/page-prop-controller.js.map +1 -1
  16. package/dist/cjs/next/root-style-registry.js +20 -19
  17. package/dist/cjs/next/root-style-registry.js.map +1 -1
  18. package/dist/cjs/runtimes/react/hooks/use-resolved-props.js +3 -2
  19. package/dist/cjs/runtimes/react/hooks/use-resolved-props.js.map +1 -1
  20. package/dist/cjs/{utils/tests/breakpoint-test-util.js → runtimes/react/testing/breakpoints.js} +4 -4
  21. package/dist/cjs/runtimes/react/testing/breakpoints.js.map +1 -0
  22. package/dist/cjs/{utils/tests/element-data-test-test.js → runtimes/react/testing/element-data.js} +33 -7
  23. package/dist/cjs/runtimes/react/testing/element-data.js.map +1 -0
  24. package/dist/cjs/runtimes/react/testing/index.js +27 -0
  25. package/dist/cjs/runtimes/react/testing/index.js.map +1 -0
  26. package/dist/cjs/runtimes/react/testing/react-provider.js +38 -0
  27. package/dist/cjs/runtimes/react/testing/react-provider.js.map +1 -0
  28. package/dist/cjs/runtimes/react/use-style.js +2 -2
  29. package/dist/cjs/runtimes/react/use-style.js.map +1 -1
  30. package/dist/esm/jest-setup.js +4 -1
  31. package/dist/esm/jest-setup.js.map +1 -1
  32. package/dist/esm/next/api-handler/handlers/manifest.js +1 -1
  33. package/dist/esm/next/api-handler/handlers/proxy-draft-mode.js +12 -2
  34. package/dist/esm/next/api-handler/handlers/proxy-draft-mode.js.map +1 -1
  35. package/dist/esm/next/components/tests/controls/color-control/fixtures.js +24 -0
  36. package/dist/esm/next/components/tests/controls/color-control/fixtures.js.map +1 -0
  37. package/dist/esm/next/components/tests/controls/page-control-prop-rendering.js +82 -39
  38. package/dist/esm/next/components/tests/controls/page-control-prop-rendering.js.map +1 -1
  39. package/dist/esm/next/components/tests/controls/rich-text-v2-control/fixtures.js +56 -0
  40. package/dist/esm/next/components/tests/controls/rich-text-v2-control/fixtures.js.map +1 -0
  41. package/dist/esm/next/components/tests/controls/style-control/fixtures.js +35 -0
  42. package/dist/esm/next/components/tests/controls/style-control/fixtures.js.map +1 -0
  43. package/dist/esm/next/components/tests/prop-controllers/page-prop-controller.js +7 -11
  44. package/dist/esm/next/components/tests/prop-controllers/page-prop-controller.js.map +1 -1
  45. package/dist/esm/next/root-style-registry.js +20 -19
  46. package/dist/esm/next/root-style-registry.js.map +1 -1
  47. package/dist/esm/runtimes/react/hooks/use-resolved-props.js +3 -2
  48. package/dist/esm/runtimes/react/hooks/use-resolved-props.js.map +1 -1
  49. package/dist/esm/{utils/tests/breakpoint-test-util.js → runtimes/react/testing/breakpoints.js} +1 -1
  50. package/dist/esm/runtimes/react/testing/breakpoints.js.map +1 -0
  51. package/dist/esm/{utils/tests/element-data-test-test.js → runtimes/react/testing/element-data.js} +29 -4
  52. package/dist/esm/runtimes/react/testing/element-data.js.map +1 -0
  53. package/dist/esm/runtimes/react/testing/index.js +4 -0
  54. package/dist/esm/runtimes/react/testing/index.js.map +1 -0
  55. package/dist/esm/runtimes/react/testing/react-provider.js +14 -0
  56. package/dist/esm/runtimes/react/testing/react-provider.js.map +1 -0
  57. package/dist/esm/runtimes/react/use-style.js +2 -2
  58. package/dist/esm/runtimes/react/use-style.js.map +1 -1
  59. package/dist/types/next/api-handler/handlers/proxy-draft-mode.test.d.ts +2 -0
  60. package/dist/types/next/api-handler/handlers/proxy-draft-mode.test.d.ts.map +1 -0
  61. package/dist/types/next/components/tests/controls/color-control/client.test.d.ts +3 -0
  62. package/dist/types/next/components/tests/controls/color-control/client.test.d.ts.map +1 -0
  63. package/dist/types/next/components/tests/controls/color-control/fixtures.d.ts +11 -0
  64. package/dist/types/next/components/tests/controls/color-control/fixtures.d.ts.map +1 -0
  65. package/dist/types/next/components/tests/controls/color-control/server.test.d.ts +2 -0
  66. package/dist/types/next/components/tests/controls/color-control/server.test.d.ts.map +1 -0
  67. package/dist/types/next/components/tests/controls/page-control-prop-rendering.d.ts +2 -3
  68. package/dist/types/next/components/tests/controls/page-control-prop-rendering.d.ts.map +1 -1
  69. package/dist/types/next/components/tests/controls/rich-text-v2-control/client.test.d.ts +2 -0
  70. package/dist/types/next/components/tests/controls/rich-text-v2-control/client.test.d.ts.map +1 -0
  71. package/dist/types/next/components/tests/controls/rich-text-v2-control/fixtures.d.ts +42 -0
  72. package/dist/types/next/components/tests/controls/rich-text-v2-control/fixtures.d.ts.map +1 -0
  73. package/dist/types/next/components/tests/controls/rich-text-v2-control/server.test.d.ts +2 -0
  74. package/dist/types/next/components/tests/controls/rich-text-v2-control/server.test.d.ts.map +1 -0
  75. package/dist/types/next/components/tests/controls/style-control/client.test.d.ts +2 -0
  76. package/dist/types/next/components/tests/controls/style-control/client.test.d.ts.map +1 -0
  77. package/dist/types/next/components/tests/controls/style-control/fixtures.d.ts +6 -0
  78. package/dist/types/next/components/tests/controls/style-control/fixtures.d.ts.map +1 -0
  79. package/dist/types/next/components/tests/controls/style-control/server.test.d.ts +2 -0
  80. package/dist/types/next/components/tests/controls/style-control/server.test.d.ts.map +1 -0
  81. package/dist/types/next/components/tests/prop-controllers/page-prop-controller.d.ts.map +1 -1
  82. package/dist/types/next/root-style-registry.d.ts.map +1 -1
  83. package/dist/types/runtimes/react/hooks/use-resolved-props.d.ts.map +1 -1
  84. package/dist/types/{utils/tests/breakpoint-test-util.d.ts → runtimes/react/testing/breakpoints.d.ts} +1 -1
  85. package/dist/types/runtimes/react/testing/breakpoints.d.ts.map +1 -0
  86. package/dist/types/{utils/tests/element-data-test-test.d.ts → runtimes/react/testing/element-data.d.ts} +7 -3
  87. package/dist/types/runtimes/react/testing/element-data.d.ts.map +1 -0
  88. package/dist/types/runtimes/react/testing/index.d.ts +4 -0
  89. package/dist/types/runtimes/react/testing/index.d.ts.map +1 -0
  90. package/dist/types/runtimes/react/testing/react-provider.d.ts +8 -0
  91. package/dist/types/runtimes/react/testing/react-provider.d.ts.map +1 -0
  92. package/package.json +5 -3
  93. package/dist/cjs/utils/tests/breakpoint-test-util.js.map +0 -1
  94. package/dist/cjs/utils/tests/element-data-test-test.js.map +0 -1
  95. package/dist/esm/utils/tests/breakpoint-test-util.js.map +0 -1
  96. package/dist/esm/utils/tests/element-data-test-test.js.map +0 -1
  97. package/dist/types/next/components/tests/controls/color-control.test.d.ts +0 -3
  98. package/dist/types/next/components/tests/controls/color-control.test.d.ts.map +0 -1
  99. package/dist/types/next/components/tests/controls/rich-text-v2-control.test.d.ts +0 -2
  100. package/dist/types/next/components/tests/controls/rich-text-v2-control.test.d.ts.map +0 -1
  101. package/dist/types/next/components/tests/controls/style-control.test.d.ts +0 -2
  102. package/dist/types/next/components/tests/controls/style-control.test.d.ts.map +0 -1
  103. package/dist/types/utils/tests/breakpoint-test-util.d.ts.map +0 -1
  104. package/dist/types/utils/tests/element-data-test-test.d.ts.map +0 -1
@@ -6,6 +6,9 @@ beforeAll(() => import_server.server.listen());
6
6
  afterEach(() => import_server.server.resetHandlers());
7
7
  afterAll(() => import_server.server.close());
8
8
  expect.extend(import_jest.matchers);
9
+ if (typeof window !== "undefined") {
10
+ expect.addSnapshotSerializer((0, import_jest.createSerializer)());
11
+ }
9
12
  jest.mock("uuid", () => ({
10
13
  v4: jest.fn(() => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"),
11
14
  v5: jest.fn(() => "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx")
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/jest-setup.ts"],"sourcesContent":["import '@testing-library/jest-dom'\nimport { matchers } from '@emotion/jest'\nimport { server } from './mocks/server'\n\nbeforeAll(() => server.listen())\nafterEach(() => server.resetHandlers())\nafterAll(() => server.close())\n\nexpect.extend(matchers)\n\njest.mock('uuid', () => ({\n v4: jest.fn(() => 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'),\n v5: jest.fn(() => 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'),\n}))\n\nif (typeof window !== 'undefined') {\n Object.defineProperty(window, 'matchMedia', {\n writable: true,\n value: jest.fn().mockImplementation(query => ({\n matches: false,\n media: query,\n onchange: null,\n addListener: jest.fn(), // deprecated\n removeListener: jest.fn(), // deprecated\n addEventListener: jest.fn(),\n removeEventListener: jest.fn(),\n dispatchEvent: jest.fn(),\n })),\n })\n\n Object.defineProperty(window, 'IntersectionObserver', {\n writable: true,\n value: jest.fn().mockImplementation(() => ({\n observe: jest.fn(),\n unobserve: jest.fn(),\n disconnect: jest.fn(),\n })),\n })\n}\n"],"mappings":";AAAA,sBAAO;AACP,kBAAyB;AACzB,oBAAuB;AAEvB,UAAU,MAAM,qBAAO,OAAO,CAAC;AAC/B,UAAU,MAAM,qBAAO,cAAc,CAAC;AACtC,SAAS,MAAM,qBAAO,MAAM,CAAC;AAE7B,OAAO,OAAO,oBAAQ;AAEtB,KAAK,KAAK,QAAQ,OAAO;AAAA,EACvB,IAAI,KAAK,GAAG,MAAM,sCAAsC;AAAA,EACxD,IAAI,KAAK,GAAG,MAAM,sCAAsC;AAC1D,EAAE;AAEF,IAAI,OAAO,WAAW,aAAa;AACjC,SAAO,eAAe,QAAQ,cAAc;AAAA,IAC1C,UAAU;AAAA,IACV,OAAO,KAAK,GAAG,EAAE,mBAAmB,YAAU;AAAA,MAC5C,SAAS;AAAA,MACT,OAAO;AAAA,MACP,UAAU;AAAA,MACV,aAAa,KAAK,GAAG;AAAA;AAAA,MACrB,gBAAgB,KAAK,GAAG;AAAA;AAAA,MACxB,kBAAkB,KAAK,GAAG;AAAA,MAC1B,qBAAqB,KAAK,GAAG;AAAA,MAC7B,eAAe,KAAK,GAAG;AAAA,IACzB,EAAE;AAAA,EACJ,CAAC;AAED,SAAO,eAAe,QAAQ,wBAAwB;AAAA,IACpD,UAAU;AAAA,IACV,OAAO,KAAK,GAAG,EAAE,mBAAmB,OAAO;AAAA,MACzC,SAAS,KAAK,GAAG;AAAA,MACjB,WAAW,KAAK,GAAG;AAAA,MACnB,YAAY,KAAK,GAAG;AAAA,IACtB,EAAE;AAAA,EACJ,CAAC;AACH;","names":[]}
1
+ {"version":3,"sources":["../../src/jest-setup.ts"],"sourcesContent":["import '@testing-library/jest-dom'\nimport { matchers, createSerializer } from '@emotion/jest'\nimport { server } from './mocks/server'\n\nbeforeAll(() => server.listen())\nafterEach(() => server.resetHandlers())\nafterAll(() => server.close())\n\nexpect.extend(matchers)\nif (typeof window !== 'undefined') {\n // jest-environment jsdom\n expect.addSnapshotSerializer(createSerializer())\n}\n\njest.mock('uuid', () => ({\n v4: jest.fn(() => 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'),\n v5: jest.fn(() => 'xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx'),\n}))\n\nif (typeof window !== 'undefined') {\n Object.defineProperty(window, 'matchMedia', {\n writable: true,\n value: jest.fn().mockImplementation(query => ({\n matches: false,\n media: query,\n onchange: null,\n addListener: jest.fn(), // deprecated\n removeListener: jest.fn(), // deprecated\n addEventListener: jest.fn(),\n removeEventListener: jest.fn(),\n dispatchEvent: jest.fn(),\n })),\n })\n\n Object.defineProperty(window, 'IntersectionObserver', {\n writable: true,\n value: jest.fn().mockImplementation(() => ({\n observe: jest.fn(),\n unobserve: jest.fn(),\n disconnect: jest.fn(),\n })),\n })\n}\n"],"mappings":";AAAA,sBAAO;AACP,kBAA2C;AAC3C,oBAAuB;AAEvB,UAAU,MAAM,qBAAO,OAAO,CAAC;AAC/B,UAAU,MAAM,qBAAO,cAAc,CAAC;AACtC,SAAS,MAAM,qBAAO,MAAM,CAAC;AAE7B,OAAO,OAAO,oBAAQ;AACtB,IAAI,OAAO,WAAW,aAAa;AAEjC,SAAO,0BAAsB,8BAAiB,CAAC;AACjD;AAEA,KAAK,KAAK,QAAQ,OAAO;AAAA,EACvB,IAAI,KAAK,GAAG,MAAM,sCAAsC;AAAA,EACxD,IAAI,KAAK,GAAG,MAAM,sCAAsC;AAC1D,EAAE;AAEF,IAAI,OAAO,WAAW,aAAa;AACjC,SAAO,eAAe,QAAQ,cAAc;AAAA,IAC1C,UAAU;AAAA,IACV,OAAO,KAAK,GAAG,EAAE,mBAAmB,YAAU;AAAA,MAC5C,SAAS;AAAA,MACT,OAAO;AAAA,MACP,UAAU;AAAA,MACV,aAAa,KAAK,GAAG;AAAA;AAAA,MACrB,gBAAgB,KAAK,GAAG;AAAA;AAAA,MACxB,kBAAkB,KAAK,GAAG;AAAA,MAC1B,qBAAqB,KAAK,GAAG;AAAA,MAC7B,eAAe,KAAK,GAAG;AAAA,IACzB,EAAE;AAAA,EACJ,CAAC;AAED,SAAO,eAAe,QAAQ,wBAAwB;AAAA,IACpD,UAAU;AAAA,IACV,OAAO,KAAK,GAAG,EAAE,mBAAmB,OAAO;AAAA,MACzC,SAAS,KAAK,GAAG;AAAA,MACjB,WAAW,KAAK,GAAG;AAAA,MACnB,YAAY,KAAK,GAAG;AAAA,IACtB,EAAE;AAAA,EACJ,CAAC;AACH;","names":[]}
@@ -37,7 +37,7 @@ async function handler(...args) {
37
37
  const supportsDraftMode = (0, import_ts_pattern.match)(args).with(routeHandlerPattern, () => true).with(apiRoutePattern, () => false).exhaustive();
38
38
  const supportsWebhook = (0, import_ts_pattern.match)(args).with(routeHandlerPattern, () => true).with(apiRoutePattern, () => false).exhaustive();
39
39
  const body = {
40
- version: "0.23.1-canary.0",
40
+ version: "0.23.2",
41
41
  previewMode: supportsPreviewMode,
42
42
  draftMode: supportsDraftMode,
43
43
  interactionMode: true,
@@ -42,9 +42,19 @@ async function proxyDraftModeRouteHandler(request, _context, { apiKey }) {
42
42
  const draft = await (0, import_headers.draftMode)();
43
43
  draft.enable();
44
44
  const proxyUrl = request.nextUrl.clone();
45
+ if (process.env.FORCE_HTTP == null) {
46
+ proxyUrl.protocol = request.headers.get("x-forwarded-proto") ?? request.nextUrl.protocol;
47
+ } else {
48
+ proxyUrl.protocol = "http";
49
+ }
50
+ const forwardingHost = request.headers.get("x-forwarded-host") ?? request.headers.get("host");
51
+ if (forwardingHost) {
52
+ proxyUrl.host = forwardingHost;
53
+ }
45
54
  proxyUrl.searchParams.delete("x-makeswift-draft-mode");
46
- const proxyRequest = new import_server.NextRequest(proxyUrl, { headers: request.headers });
47
- proxyRequest.headers.delete("x-makeswift-draft-mode");
55
+ const proxyHeaders = new Headers(request.headers);
56
+ proxyHeaders.delete("X-Makeswift-Draft-Mode");
57
+ const proxyRequest = new import_server.NextRequest(proxyUrl, { headers: proxyHeaders });
48
58
  const draftModeCookie = (await (0, import_headers.cookies)()).get("__prerender_bypass");
49
59
  if (draftModeCookie) {
50
60
  proxyRequest.cookies.set(draftModeCookie);
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../src/next/api-handler/handlers/proxy-draft-mode.ts"],"sourcesContent":["import { NextApiRequest, NextApiResponse } from 'next'\nimport { NextRequest, NextResponse } from 'next/server'\nimport { P, match } from 'ts-pattern'\nimport { cookies, draftMode } from 'next/headers'\n\nimport { MAKESWIFT_DRAFT_MODE_DATA_COOKIE, MakeswiftDraftData } from '../../draft-mode'\nimport { MakeswiftSiteVersion } from '../../preview-mode'\n\ntype Context = { params: { [key: string]: string | string[] } }\n\ntype ProxyDraftModeError = string\n\ntype ProxyResponse = { __brand: 'ProxyResponse' }\n\nexport type ProxyDraftModeResponse = ProxyDraftModeError | ProxyResponse\n\ntype ProxyDraftModeHandlerArgs =\n | [request: NextRequest, context: Context, params: { apiKey: string }]\n | [req: NextApiRequest, res: NextApiResponse<ProxyDraftModeResponse>, params: { apiKey: string }]\n\nconst routeHandlerPattern = [P.instanceOf(Request), P.any, P.any] as const\nconst apiRoutePattern = [P.any, P.any, P.any] as const\n\nexport default async function proxyDraftMode(\n request: NextRequest,\n context: Context,\n { apiKey }: { apiKey: string },\n): Promise<NextResponse<ProxyDraftModeResponse>>\nexport default async function proxyDraftMode(\n req: NextApiRequest,\n res: NextApiResponse<ProxyDraftModeResponse>,\n { apiKey }: { apiKey: string },\n): Promise<void>\nexport default async function proxyDraftMode(\n ...args: ProxyDraftModeHandlerArgs\n): Promise<NextResponse<ProxyDraftModeResponse> | void> {\n return match(args)\n .with(routeHandlerPattern, args => proxyDraftModeRouteHandler(...args))\n .with(apiRoutePattern, args => proxyDraftModeApiRouteHandler(...args))\n .exhaustive()\n}\n\nasync function proxyDraftModeRouteHandler(\n request: NextRequest,\n _context: Context,\n { apiKey }: { apiKey: string },\n): Promise<NextResponse<ProxyDraftModeResponse>> {\n const secret =\n request.nextUrl.searchParams.get('x-makeswift-draft-mode') ??\n request.headers.get('X-Makeswift-Draft-Mode')\n\n if (secret !== apiKey) return new NextResponse('Unauthorized', { status: 401 })\n\n const draftModeData: MakeswiftDraftData = {\n makeswift: true,\n siteVersion: MakeswiftSiteVersion.Working,\n }\n\n const draft = await draftMode()\n draft.enable()\n\n const proxyUrl = request.nextUrl.clone()\n proxyUrl.searchParams.delete('x-makeswift-draft-mode')\n\n const proxyRequest = new NextRequest(proxyUrl, { headers: request.headers })\n proxyRequest.headers.delete('x-makeswift-draft-mode')\n\n const draftModeCookie = (await cookies()).get('__prerender_bypass')\n if (draftModeCookie) {\n proxyRequest.cookies.set(draftModeCookie)\n proxyRequest.cookies.set(MAKESWIFT_DRAFT_MODE_DATA_COOKIE, JSON.stringify(draftModeData))\n }\n\n draft.disable()\n\n const proxyResponse = await fetch(proxyRequest)\n\n const response = new NextResponse<ProxyResponse>(proxyResponse.body, {\n headers: proxyResponse.headers,\n status: proxyResponse.status,\n })\n\n // `fetch` automatically decompresses the response, but the response headers will keep the\n // `content-encoding` and `content-length` headers. This will cause decoding issues if the client\n // attempts to decompress the response again. To prevent this, we remove these headers.\n //\n // See https://github.com/nodejs/undici/issues/2514.\n if (response.headers.has('content-encoding')) {\n response.headers.delete('content-encoding')\n response.headers.delete('content-length')\n }\n\n return response\n}\n\nasync function proxyDraftModeApiRouteHandler(\n _req: NextApiRequest,\n res: NextApiResponse<ProxyDraftModeResponse>,\n {}: { apiKey: string },\n): Promise<void> {\n const message =\n 'Cannot request draft endpoint from an API handler registered in `pages`. Move your Makeswift API handler to the `app` directory'\n console.error(message)\n return res.status(500).send(message)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAA0C;AAC1C,wBAAyB;AACzB,qBAAmC;AAEnC,wBAAqE;AACrE,0BAAqC;AAcrC,MAAM,sBAAsB,CAAC,oBAAE,WAAW,OAAO,GAAG,oBAAE,KAAK,oBAAE,GAAG;AAChE,MAAM,kBAAkB,CAAC,oBAAE,KAAK,oBAAE,KAAK,oBAAE,GAAG;AAY5C,eAAO,kBACF,MACmD;AACtD,aAAO,yBAAM,IAAI,EACd,KAAK,qBAAqB,CAAAA,UAAQ,2BAA2B,GAAGA,KAAI,CAAC,EACrE,KAAK,iBAAiB,CAAAA,UAAQ,8BAA8B,GAAGA,KAAI,CAAC,EACpE,WAAW;AAChB;AAEA,eAAe,2BACb,SACA,UACA,EAAE,OAAO,GACsC;AAC/C,QAAM,SACJ,QAAQ,QAAQ,aAAa,IAAI,wBAAwB,KACzD,QAAQ,QAAQ,IAAI,wBAAwB;AAE9C,MAAI,WAAW;AAAQ,WAAO,IAAI,2BAAa,gBAAgB,EAAE,QAAQ,IAAI,CAAC;AAE9E,QAAM,gBAAoC;AAAA,IACxC,WAAW;AAAA,IACX,aAAa,yCAAqB;AAAA,EACpC;AAEA,QAAM,QAAQ,UAAM,0BAAU;AAC9B,QAAM,OAAO;AAEb,QAAM,WAAW,QAAQ,QAAQ,MAAM;AACvC,WAAS,aAAa,OAAO,wBAAwB;AAErD,QAAM,eAAe,IAAI,0BAAY,UAAU,EAAE,SAAS,QAAQ,QAAQ,CAAC;AAC3E,eAAa,QAAQ,OAAO,wBAAwB;AAEpD,QAAM,mBAAmB,UAAM,wBAAQ,GAAG,IAAI,oBAAoB;AAClE,MAAI,iBAAiB;AACnB,iBAAa,QAAQ,IAAI,eAAe;AACxC,iBAAa,QAAQ,IAAI,oDAAkC,KAAK,UAAU,aAAa,CAAC;AAAA,EAC1F;AAEA,QAAM,QAAQ;AAEd,QAAM,gBAAgB,MAAM,MAAM,YAAY;AAE9C,QAAM,WAAW,IAAI,2BAA4B,cAAc,MAAM;AAAA,IACnE,SAAS,cAAc;AAAA,IACvB,QAAQ,cAAc;AAAA,EACxB,CAAC;AAOD,MAAI,SAAS,QAAQ,IAAI,kBAAkB,GAAG;AAC5C,aAAS,QAAQ,OAAO,kBAAkB;AAC1C,aAAS,QAAQ,OAAO,gBAAgB;AAAA,EAC1C;AAEA,SAAO;AACT;AAEA,eAAe,8BACb,MACA,KACA,CAAC,GACc;AACf,QAAM,UACJ;AACF,UAAQ,MAAM,OAAO;AACrB,SAAO,IAAI,OAAO,GAAG,EAAE,KAAK,OAAO;AACrC;","names":["args"]}
1
+ {"version":3,"sources":["../../../../../src/next/api-handler/handlers/proxy-draft-mode.ts"],"sourcesContent":["import { NextApiRequest, NextApiResponse } from 'next'\nimport { NextRequest, NextResponse } from 'next/server'\nimport { P, match } from 'ts-pattern'\nimport { cookies, draftMode } from 'next/headers'\n\nimport { MAKESWIFT_DRAFT_MODE_DATA_COOKIE, MakeswiftDraftData } from '../../draft-mode'\nimport { MakeswiftSiteVersion } from '../../preview-mode'\n\ntype Context = { params: { [key: string]: string | string[] } }\n\ntype ProxyDraftModeError = string\n\ntype ProxyResponse = { __brand: 'ProxyResponse' }\n\nexport type ProxyDraftModeResponse = ProxyDraftModeError | ProxyResponse\n\ntype ProxyDraftModeHandlerArgs =\n | [request: NextRequest, context: Context, params: { apiKey: string }]\n | [req: NextApiRequest, res: NextApiResponse<ProxyDraftModeResponse>, params: { apiKey: string }]\n\nconst routeHandlerPattern = [P.instanceOf(Request), P.any, P.any] as const\nconst apiRoutePattern = [P.any, P.any, P.any] as const\n\nexport default async function proxyDraftMode(\n request: NextRequest,\n context: Context,\n { apiKey }: { apiKey: string },\n): Promise<NextResponse<ProxyDraftModeResponse>>\nexport default async function proxyDraftMode(\n req: NextApiRequest,\n res: NextApiResponse<ProxyDraftModeResponse>,\n { apiKey }: { apiKey: string },\n): Promise<void>\nexport default async function proxyDraftMode(\n ...args: ProxyDraftModeHandlerArgs\n): Promise<NextResponse<ProxyDraftModeResponse> | void> {\n return match(args)\n .with(routeHandlerPattern, args => proxyDraftModeRouteHandler(...args))\n .with(apiRoutePattern, args => proxyDraftModeApiRouteHandler(...args))\n .exhaustive()\n}\n\nasync function proxyDraftModeRouteHandler(\n request: NextRequest,\n _context: Context,\n { apiKey }: { apiKey: string },\n): Promise<NextResponse<ProxyDraftModeResponse>> {\n const secret =\n request.nextUrl.searchParams.get('x-makeswift-draft-mode') ??\n request.headers.get('X-Makeswift-Draft-Mode')\n\n if (secret !== apiKey) return new NextResponse('Unauthorized', { status: 401 })\n\n const draftModeData: MakeswiftDraftData = {\n makeswift: true,\n siteVersion: MakeswiftSiteVersion.Working,\n }\n\n const draft = await draftMode()\n draft.enable()\n\n const proxyUrl = request.nextUrl.clone() \n \n if (process.env.FORCE_HTTP == null) {\n proxyUrl.protocol = request.headers.get('x-forwarded-proto') ?? request.nextUrl.protocol\n } else {\n proxyUrl.protocol = 'http'\n }\n\n const forwardingHost = request.headers.get('x-forwarded-host') ?? request.headers.get('host') \n if (forwardingHost) {\n proxyUrl.host = forwardingHost\n }\n \n proxyUrl.searchParams.delete('x-makeswift-draft-mode')\n\n const proxyHeaders = new Headers(request.headers)\n proxyHeaders.delete('X-Makeswift-Draft-Mode')\n\n const proxyRequest = new NextRequest(proxyUrl, { headers: proxyHeaders })\n const draftModeCookie = (await cookies()).get('__prerender_bypass')\n if (draftModeCookie) {\n proxyRequest.cookies.set(draftModeCookie)\n proxyRequest.cookies.set(MAKESWIFT_DRAFT_MODE_DATA_COOKIE, JSON.stringify(draftModeData))\n }\n\n draft.disable()\n\n const proxyResponse = await fetch(proxyRequest)\n\n const response = new NextResponse<ProxyResponse>(proxyResponse.body, {\n headers: proxyResponse.headers,\n status: proxyResponse.status,\n })\n\n // `fetch` automatically decompresses the response, but the response headers will keep the\n // `content-encoding` and `content-length` headers. This will cause decoding issues if the client\n // attempts to decompress the response again. To prevent this, we remove these headers.\n //\n // See https://github.com/nodejs/undici/issues/2514.\n if (response.headers.has('content-encoding')) {\n response.headers.delete('content-encoding')\n response.headers.delete('content-length')\n }\n\n return response\n}\n\nasync function proxyDraftModeApiRouteHandler(\n _req: NextApiRequest,\n res: NextApiResponse<ProxyDraftModeResponse>,\n {}: { apiKey: string },\n): Promise<void> {\n const message =\n 'Cannot request draft endpoint from an API handler registered in `pages`. Move your Makeswift API handler to the `app` directory'\n console.error(message)\n return res.status(500).send(message)\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AACA,oBAA0C;AAC1C,wBAAyB;AACzB,qBAAmC;AAEnC,wBAAqE;AACrE,0BAAqC;AAcrC,MAAM,sBAAsB,CAAC,oBAAE,WAAW,OAAO,GAAG,oBAAE,KAAK,oBAAE,GAAG;AAChE,MAAM,kBAAkB,CAAC,oBAAE,KAAK,oBAAE,KAAK,oBAAE,GAAG;AAY5C,eAAO,kBACF,MACmD;AACtD,aAAO,yBAAM,IAAI,EACd,KAAK,qBAAqB,CAAAA,UAAQ,2BAA2B,GAAGA,KAAI,CAAC,EACrE,KAAK,iBAAiB,CAAAA,UAAQ,8BAA8B,GAAGA,KAAI,CAAC,EACpE,WAAW;AAChB;AAEA,eAAe,2BACb,SACA,UACA,EAAE,OAAO,GACsC;AAC/C,QAAM,SACJ,QAAQ,QAAQ,aAAa,IAAI,wBAAwB,KACzD,QAAQ,QAAQ,IAAI,wBAAwB;AAE9C,MAAI,WAAW;AAAQ,WAAO,IAAI,2BAAa,gBAAgB,EAAE,QAAQ,IAAI,CAAC;AAE9E,QAAM,gBAAoC;AAAA,IACxC,WAAW;AAAA,IACX,aAAa,yCAAqB;AAAA,EACpC;AAEA,QAAM,QAAQ,UAAM,0BAAU;AAC9B,QAAM,OAAO;AAEb,QAAM,WAAW,QAAQ,QAAQ,MAAM;AAEvC,MAAI,QAAQ,IAAI,cAAc,MAAM;AAClC,aAAS,WAAW,QAAQ,QAAQ,IAAI,mBAAmB,KAAK,QAAQ,QAAQ;AAAA,EAClF,OAAO;AACL,aAAS,WAAW;AAAA,EACtB;AAEA,QAAM,iBAAiB,QAAQ,QAAQ,IAAI,kBAAkB,KAAK,QAAQ,QAAQ,IAAI,MAAM;AAC5F,MAAI,gBAAgB;AAClB,aAAS,OAAO;AAAA,EAClB;AAEA,WAAS,aAAa,OAAO,wBAAwB;AAErD,QAAM,eAAe,IAAI,QAAQ,QAAQ,OAAO;AAChD,eAAa,OAAO,wBAAwB;AAE5C,QAAM,eAAe,IAAI,0BAAY,UAAU,EAAE,SAAS,aAAa,CAAC;AACxE,QAAM,mBAAmB,UAAM,wBAAQ,GAAG,IAAI,oBAAoB;AAClE,MAAI,iBAAiB;AACnB,iBAAa,QAAQ,IAAI,eAAe;AACxC,iBAAa,QAAQ,IAAI,oDAAkC,KAAK,UAAU,aAAa,CAAC;AAAA,EAC1F;AAEA,QAAM,QAAQ;AAEd,QAAM,gBAAgB,MAAM,MAAM,YAAY;AAE9C,QAAM,WAAW,IAAI,2BAA4B,cAAc,MAAM;AAAA,IACnE,SAAS,cAAc;AAAA,IACvB,QAAQ,cAAc;AAAA,EACxB,CAAC;AAOD,MAAI,SAAS,QAAQ,IAAI,kBAAkB,GAAG;AAC5C,aAAS,QAAQ,OAAO,kBAAkB;AAC1C,aAAS,QAAQ,OAAO,gBAAgB;AAAA,EAC1C;AAEA,SAAO;AACT;AAEA,eAAe,8BACb,MACA,KACA,CAAC,GACc;AACf,QAAM,UACJ;AACF,UAAQ,MAAM,OAAO;AACrB,SAAO,IAAI,OAAO,GAAG,EAAE,KAAK,OAAO;AACrC;","names":["args"]}
@@ -0,0 +1,51 @@
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 fixtures_exports = {};
20
+ __export(fixtures_exports, {
21
+ cacheData: () => cacheData,
22
+ swatch: () => swatch,
23
+ swatchId: () => swatchId,
24
+ value: () => value
25
+ });
26
+ module.exports = __toCommonJS(fixtures_exports);
27
+ var import_api = require("../../../../../api");
28
+ const swatchId = "[swatch-test-id]";
29
+ const swatch = {
30
+ __typename: import_api.APIResourceType.Swatch,
31
+ hue: 238,
32
+ saturation: 87,
33
+ lightness: 49
34
+ };
35
+ const value = {
36
+ swatchId,
37
+ alpha: 0.5
38
+ };
39
+ const cacheData = (swatch2) => ({
40
+ apiResources: {
41
+ Swatch: [{ id: swatchId, value: swatch2 == null ? null : { id: swatchId, ...swatch2 } }]
42
+ }
43
+ });
44
+ // Annotate the CommonJS export names for ESM import in node:
45
+ 0 && (module.exports = {
46
+ cacheData,
47
+ swatch,
48
+ swatchId,
49
+ value
50
+ });
51
+ //# sourceMappingURL=fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/next/components/tests/controls/color-control/fixtures.ts"],"sourcesContent":["import { type ValueType } from '@makeswift/controls'\nimport { ColorDefinition } from '@makeswift/controls'\n\nimport { APIResourceType, type Swatch } from '../../../../../api'\nimport { type CacheData } from '../../../../../api/react'\n\ntype SwatchData = Omit<Swatch, 'id'>\n\nexport const swatchId = '[swatch-test-id]'\nexport const swatch: SwatchData = {\n __typename: APIResourceType.Swatch,\n hue: 238,\n saturation: 87,\n lightness: 49,\n}\n\nexport const value: ValueType<ColorDefinition> = {\n swatchId,\n alpha: 0.5,\n}\n\nexport const cacheData = (swatch: SwatchData | null): Partial<CacheData> => ({\n apiResources: {\n Swatch: [{ id: swatchId, value: swatch == null ? null : { id: swatchId, ...swatch } }],\n },\n})\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,iBAA6C;AAKtC,MAAM,WAAW;AACjB,MAAM,SAAqB;AAAA,EAChC,YAAY,2BAAgB;AAAA,EAC5B,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,WAAW;AACb;AAEO,MAAM,QAAoC;AAAA,EAC/C;AAAA,EACA,OAAO;AACT;AAEO,MAAM,YAAY,CAACA,aAAmD;AAAA,EAC3E,cAAc;AAAA,IACZ,QAAQ,CAAC,EAAE,IAAI,UAAU,OAAOA,WAAU,OAAO,OAAO,EAAE,IAAI,UAAU,GAAGA,QAAO,EAAE,CAAC;AAAA,EACvF;AACF;","names":["swatch"]}
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
  var page_control_prop_rendering_exports = {};
20
30
  __export(page_control_prop_rendering_exports, {
@@ -23,18 +33,51 @@ __export(page_control_prop_rendering_exports, {
23
33
  module.exports = __toCommonJS(page_control_prop_rendering_exports);
24
34
  var import_jsx_runtime = require("react/jsx-runtime");
25
35
  var import_react = require("react");
36
+ var import_server = require("react-dom/server");
37
+ var import_jsdom = require("jsdom");
26
38
  var import_test_utils = require("react-dom/test-utils");
27
39
  var import_react2 = require("@testing-library/react");
28
40
  var import_jest_dom = require("@testing-library/jest-dom");
29
- var import_page = require("../../page");
30
- var import_react3 = require("../../../../runtimes/react");
41
+ var import_navigation = require("next/navigation");
31
42
  var import_react4 = require("../../../../react");
32
- var import_element_data_test_test = require("../../../../utils/tests/element-data-test-test");
43
+ var import_MakeswiftComponent = require("../../MakeswiftComponent");
44
+ var import_page = require("../../page");
45
+ var import_is_server = require("../../../../utils/is-server");
46
+ var Testing = __toESM(require("../../../../runtimes/react/testing"));
33
47
  const ROOT_ID = "00000000-0000-0000-0000-000000000000";
34
48
  const ELEMENT_ID = "11111111-1111-1111-1111-111111111111";
35
49
  const renderProp = (prop) => prop === void 0 ? "undefined" : (0, import_react.isValidElement)(prop) ? prop : JSON.stringify(prop);
36
- const propSnapshot = (prop) => prop.childElementCount ? prop.childNodes : parseStringifiedProp(prop.textContent ?? "");
50
+ const propSnapshot = (prop) => prop?.childElementCount ? prop.childNodes : parseStringifiedProp(prop?.textContent ?? "");
37
51
  const parseStringifiedProp = (prop) => prop === "undefined" ? void 0 : JSON.parse(prop);
52
+ async function streamToString(stream) {
53
+ const reader = stream.getReader();
54
+ const decoder = new TextDecoder();
55
+ let result = "";
56
+ while (true) {
57
+ const { done, value } = await reader.read();
58
+ if (done)
59
+ break;
60
+ result += decoder.decode(value, { stream: true });
61
+ }
62
+ return result;
63
+ }
64
+ async function renderToString(element) {
65
+ return await streamToString(await (0, import_server.renderToReadableStream)(element));
66
+ }
67
+ async function serverSideRender(children) {
68
+ const serverInsertedCallbacks = [];
69
+ const elementTree = /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_navigation.ServerInsertedHTMLContext.Provider, { value: (handler) => serverInsertedCallbacks.push(handler), children });
70
+ const elementsHTML = await renderToString(elementTree);
71
+ const serverInsertedNodes = serverInsertedCallbacks.map((callback, index) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react.Fragment, { children: callback() }, "__next_server_inserted__" + index));
72
+ const headHTML = await renderToString(serverInsertedNodes);
73
+ const dom = new import_jsdom.JSDOM(
74
+ `<!DOCTYPE html><head>${headHTML}</head><body><div id="root">${elementsHTML}</div></body></div>`,
75
+ {
76
+ runScripts: "dangerously"
77
+ }
78
+ );
79
+ return dom.window.document;
80
+ }
38
81
  async function testPageControlPropRendering(controlDefinition, {
39
82
  toData,
40
83
  value,
@@ -46,23 +89,19 @@ async function testPageControlPropRendering(controlDefinition, {
46
89
  rootElements = []
47
90
  }) {
48
91
  const controlData = value !== void 0 ? toData ? toData(value) : controlDefinition.toData(value) : void 0;
49
- const TestComponentType = "TestComponent";
92
+ const testComponentMeta = {
93
+ type: "TestComponent",
94
+ label: "Test Component"
95
+ };
50
96
  const testId = "test-id";
51
97
  const renderCountTestId = "render-count-test-id";
52
- const elementData = (0, import_element_data_test_test.createRootComponent)(
53
- [
54
- {
55
- key: ELEMENT_ID,
56
- type: TestComponentType,
57
- props: {
58
- propKey: controlData
59
- }
60
- },
61
- ...rootElements
62
- ],
63
- ROOT_ID
64
- );
65
- const snapshot = (0, import_element_data_test_test.createMakeswiftPageSnapshot)(elementData, { locale, cacheData });
98
+ const elementData = {
99
+ key: ELEMENT_ID,
100
+ type: testComponentMeta.type,
101
+ props: {
102
+ propKey: controlData
103
+ }
104
+ };
66
105
  const runtime = new import_react4.ReactRuntime();
67
106
  registerComponents?.(runtime);
68
107
  runtime.registerComponent(
@@ -75,27 +114,44 @@ async function testPageControlPropRendering(controlDefinition, {
75
114
  ] });
76
115
  }),
77
116
  {
78
- type: TestComponentType,
79
- label: "TestComponent",
117
+ ...testComponentMeta,
80
118
  props: {
81
119
  propKey: controlDefinition
82
120
  }
83
121
  }
84
122
  );
85
- await (0, import_test_utils.act)(
86
- async () => (0, import_react2.render)(
87
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react3.ReactRuntimeProvider, { runtime, previewMode: false, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_page.Page, { snapshot }) })
88
- )
89
- );
90
- if (action) {
91
- await (0, import_test_utils.act)(async () => {
92
- await action(import_react2.screen.getByTestId(testId));
93
- });
94
- }
95
- expect(snapshot).toMatchSnapshot("snapshot");
96
- expect(propSnapshot(import_react2.screen.getByTestId(testId))).toMatchSnapshot("resolvedValue");
97
- if (expectedRenders != null) {
98
- expect(Number(import_react2.screen.getByTestId(renderCountTestId).textContent)).toBe(expectedRenders);
123
+ const testElementTree = (component) => /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Testing.ReactProvider, { runtime, children: component });
124
+ if (!(0, import_is_server.isServer)()) {
125
+ const rootElementData = Testing.createRootComponent(
126
+ [elementData, ...rootElements],
127
+ ROOT_ID
128
+ );
129
+ const snapshot = Testing.createMakeswiftPageSnapshot(rootElementData, { locale, cacheData });
130
+ await (0, import_test_utils.act)(async () => (0, import_react2.render)(testElementTree(/* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_page.Page, { snapshot }))));
131
+ if (action) {
132
+ await (0, import_test_utils.act)(async () => {
133
+ await action(import_react2.screen.getByTestId(testId));
134
+ });
135
+ }
136
+ expect(snapshot).toMatchSnapshot("snapshot");
137
+ expect(propSnapshot(import_react2.screen.getByTestId(testId))).toMatchSnapshot("resolvedValue");
138
+ if (expectedRenders != null) {
139
+ expect(Number(import_react2.screen.getByTestId(renderCountTestId).textContent)).toBe(expectedRenders);
140
+ }
141
+ } else {
142
+ console.assert(action == null);
143
+ console.assert(rootElements.length === 0);
144
+ const snapshot = Testing.createMakeswiftComponentSnapshot(elementData, { locale, cacheData });
145
+ const elementTree = testElementTree(
146
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_MakeswiftComponent.MakeswiftComponent, { snapshot, ...testComponentMeta })
147
+ );
148
+ const document = await serverSideRender(elementTree);
149
+ const getByTestId = (id) => document.querySelector(`[data-testid="${id}"]`);
150
+ expect(propSnapshot(getByTestId(testId))).toMatchSnapshot("resolvedValue");
151
+ expect([...document.querySelectorAll("style")].map((n) => n.textContent)).toMatchSnapshot(
152
+ "component styles"
153
+ );
154
+ expect(Number(getByTestId(renderCountTestId)?.textContent)).toBe(1);
99
155
  }
100
156
  }
101
157
  // Annotate the CommonJS export names for ESM import in node:
@@ -1 +1 @@
1
- {"version":3,"sources":["../../../../../../src/next/components/tests/controls/page-control-prop-rendering.tsx"],"sourcesContent":["/** @jest-environment jsdom */\n\nimport { forwardRef, useRef, isValidElement } from 'react'\nimport { act } from 'react-dom/test-utils'\nimport { render, screen } from '@testing-library/react'\nimport '@testing-library/jest-dom'\n\nimport { type Data, type ValueType, type DataType, ControlDefinition } from '@makeswift/controls'\n\nimport { ElementData } from '../../../../state/react-page'\nimport { Page } from '../../page'\nimport { ReactRuntimeProvider } from '../../../../runtimes/react'\nimport { ReactRuntime } from '../../../../react'\n\nimport {\n createMakeswiftPageSnapshot,\n createRootComponent,\n} from '../../../../utils/tests/element-data-test-test'\n\nimport { type MakeswiftPageSnapshot } from '../../../../next'\n\nconst ROOT_ID = '00000000-0000-0000-0000-000000000000'\nconst ELEMENT_ID = '11111111-1111-1111-1111-111111111111'\n\nconst renderProp = (prop: any) =>\n prop === undefined ? 'undefined' : isValidElement(prop) ? prop : JSON.stringify(prop)\n\nconst propSnapshot = (prop: HTMLElement) =>\n prop.childElementCount ? prop.childNodes : parseStringifiedProp(prop.textContent ?? '')\n\nconst parseStringifiedProp = (prop: string) => (prop === 'undefined' ? undefined : JSON.parse(prop))\n\nexport async function testPageControlPropRendering<D extends ControlDefinition>(\n controlDefinition: D,\n {\n toData,\n value,\n locale,\n cacheData,\n expectedRenders,\n registerComponents,\n action,\n rootElements = [],\n }: {\n toData?: (value: ValueType<D>) => DataType<D>\n value: ValueType<D> | undefined\n locale?: string | null\n cacheData?: Partial<MakeswiftPageSnapshot['cacheData']>\n expectedRenders?: number\n registerComponents?: (runtime: ReactRuntime) => void\n action?: (element: HTMLElement) => Promise<void>\n rootElements?: ElementData[]\n },\n) {\n // Arrange\n const controlData: DataType<D> | Data =\n value !== undefined ? (toData ? toData(value) : controlDefinition.toData(value)) : undefined\n\n const TestComponentType = 'TestComponent'\n const testId = 'test-id'\n const renderCountTestId = 'render-count-test-id'\n const elementData: ElementData = createRootComponent(\n [\n {\n key: ELEMENT_ID,\n type: TestComponentType,\n props: {\n propKey: controlData,\n },\n },\n ...rootElements,\n ],\n ROOT_ID,\n )\n const snapshot = createMakeswiftPageSnapshot(elementData, { locale, cacheData })\n const runtime = new ReactRuntime()\n registerComponents?.(runtime)\n\n // Act\n runtime.registerComponent(\n forwardRef<HTMLDivElement, { propKey?: any }>(({ propKey }, ref) => {\n const renderCount = useRef(0)\n ++renderCount.current\n\n return (\n <div ref={ref}>\n <div data-testid={renderCountTestId}>{renderCount.current}</div>\n <div data-testid={testId}>{renderProp(propKey)}</div>\n </div>\n )\n }),\n {\n type: TestComponentType,\n label: 'TestComponent',\n props: {\n propKey: controlDefinition as any,\n },\n },\n )\n\n // Assert\n await act(async () =>\n render(\n <ReactRuntimeProvider runtime={runtime} previewMode={false}>\n <Page snapshot={snapshot} />\n </ReactRuntimeProvider>,\n ),\n )\n\n if (action) {\n await act(async () => {\n await action(screen.getByTestId(testId))\n })\n }\n\n expect(snapshot).toMatchSnapshot('snapshot')\n expect(propSnapshot(screen.getByTestId(testId))).toMatchSnapshot('resolvedValue')\n\n if (expectedRenders != null) {\n expect(Number(screen.getByTestId(renderCountTestId).textContent)).toBe(expectedRenders)\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAqFQ;AAnFR,mBAAmD;AACnD,wBAAoB;AACpB,IAAAA,gBAA+B;AAC/B,sBAAO;AAKP,kBAAqB;AACrB,IAAAA,gBAAqC;AACrC,IAAAA,gBAA6B;AAE7B,oCAGO;AAIP,MAAM,UAAU;AAChB,MAAM,aAAa;AAEnB,MAAM,aAAa,CAAC,SAClB,SAAS,SAAY,kBAAc,6BAAe,IAAI,IAAI,OAAO,KAAK,UAAU,IAAI;AAEtF,MAAM,eAAe,CAAC,SACpB,KAAK,oBAAoB,KAAK,aAAa,qBAAqB,KAAK,eAAe,EAAE;AAExF,MAAM,uBAAuB,CAAC,SAAkB,SAAS,cAAc,SAAY,KAAK,MAAM,IAAI;AAElG,eAAsB,6BACpB,mBACA;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,eAAe,CAAC;AAClB,GAUA;AAEA,QAAM,cACJ,UAAU,SAAa,SAAS,OAAO,KAAK,IAAI,kBAAkB,OAAO,KAAK,IAAK;AAErF,QAAM,oBAAoB;AAC1B,QAAM,SAAS;AACf,QAAM,oBAAoB;AAC1B,QAAM,kBAA2B;AAAA,IAC/B;AAAA,MACE;AAAA,QACE,KAAK;AAAA,QACL,MAAM;AAAA,QACN,OAAO;AAAA,UACL,SAAS;AAAA,QACX;AAAA,MACF;AAAA,MACA,GAAG;AAAA,IACL;AAAA,IACA;AAAA,EACF;AACA,QAAM,eAAW,2DAA4B,aAAa,EAAE,QAAQ,UAAU,CAAC;AAC/E,QAAM,UAAU,IAAI,2BAAa;AACjC,uBAAqB,OAAO;AAG5B,UAAQ;AAAA,QACN,yBAA8C,CAAC,EAAE,QAAQ,GAAG,QAAQ;AAClE,YAAM,kBAAc,qBAAO,CAAC;AAC5B,QAAE,YAAY;AAEd,aACE,6CAAC,SAAI,KACH;AAAA,oDAAC,SAAI,eAAa,mBAAoB,sBAAY,SAAQ;AAAA,QAC1D,4CAAC,SAAI,eAAa,QAAS,qBAAW,OAAO,GAAE;AAAA,SACjD;AAAA,IAEJ,CAAC;AAAA,IACD;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,OAAO;AAAA,QACL,SAAS;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAGA,YAAM;AAAA,IAAI,gBACR;AAAA,MACE,4CAAC,sCAAqB,SAAkB,aAAa,OACnD,sDAAC,oBAAK,UAAoB,GAC5B;AAAA,IACF;AAAA,EACF;AAEA,MAAI,QAAQ;AACV,cAAM,uBAAI,YAAY;AACpB,YAAM,OAAO,qBAAO,YAAY,MAAM,CAAC;AAAA,IACzC,CAAC;AAAA,EACH;AAEA,SAAO,QAAQ,EAAE,gBAAgB,UAAU;AAC3C,SAAO,aAAa,qBAAO,YAAY,MAAM,CAAC,CAAC,EAAE,gBAAgB,eAAe;AAEhF,MAAI,mBAAmB,MAAM;AAC3B,WAAO,OAAO,qBAAO,YAAY,iBAAiB,EAAE,WAAW,CAAC,EAAE,KAAK,eAAe;AAAA,EACxF;AACF;","names":["import_react"]}
1
+ {"version":3,"sources":["../../../../../../src/next/components/tests/controls/page-control-prop-rendering.tsx"],"sourcesContent":["import { type ReactNode, Fragment, forwardRef, useRef, isValidElement } from 'react'\nimport { renderToReadableStream } from 'react-dom/server'\nimport { JSDOM } from 'jsdom'\nimport { act } from 'react-dom/test-utils'\nimport { render, screen } from '@testing-library/react'\nimport '@testing-library/jest-dom'\nimport { ServerInsertedHTMLContext } from 'next/navigation'\n\nimport { type Data, type ValueType, type DataType, ControlDefinition } from '@makeswift/controls'\n\nimport { type CacheData } from '../../../../api/react'\nimport { ElementData } from '../../../../state/react-page'\nimport { ReactRuntime } from '../../../../react'\nimport { MakeswiftComponent } from '../../MakeswiftComponent'\nimport { Page } from '../../page'\nimport { isServer } from '../../../../utils/is-server'\nimport * as Testing from '../../../../runtimes/react/testing'\n\nconst ROOT_ID = '00000000-0000-0000-0000-000000000000'\nconst ELEMENT_ID = '11111111-1111-1111-1111-111111111111'\n\nconst renderProp = (prop: any) =>\n prop === undefined ? 'undefined' : isValidElement(prop) ? prop : JSON.stringify(prop)\n\nconst propSnapshot = (prop: HTMLElement | null) =>\n prop?.childElementCount ? prop.childNodes : parseStringifiedProp(prop?.textContent ?? '')\n\nconst parseStringifiedProp = (prop: string) => (prop === 'undefined' ? undefined : JSON.parse(prop))\n\nasync function streamToString(stream: ReadableStream) {\n const reader = stream.getReader()\n const decoder = new TextDecoder()\n\n let result = ''\n\n while (true) {\n const { done, value } = await reader.read()\n if (done) break\n result += decoder.decode(value, { stream: true })\n }\n\n return result\n}\n\nasync function renderToString(element: ReactNode) {\n return await streamToString(await renderToReadableStream(element))\n}\n\nasync function serverSideRender(children: ReactNode) {\n // wrap the children in a context provider to capture server-inserted HTML, see\n // https://github.com/vercel/next.js/blob/canary/packages/next/src/server/app-render/server-inserted-html.tsx\n const serverInsertedCallbacks: (() => React.ReactNode)[] = []\n\n const elementTree = (\n <ServerInsertedHTMLContext.Provider value={handler => serverInsertedCallbacks.push(handler)}>\n {children}\n </ServerInsertedHTMLContext.Provider>\n )\n\n const elementsHTML = await renderToString(elementTree)\n\n const serverInsertedNodes = serverInsertedCallbacks.map((callback, index) => (\n <Fragment key={'__next_server_inserted__' + index}>{callback()}</Fragment>\n ))\n\n const headHTML = await renderToString(serverInsertedNodes)\n\n const dom = new JSDOM(\n `<!DOCTYPE html><head>${headHTML}</head><body><div id=\"root\">${elementsHTML}</div></body></div>`,\n {\n runScripts: 'dangerously',\n },\n )\n\n return dom.window.document\n}\n\nexport async function testPageControlPropRendering<D extends ControlDefinition>(\n controlDefinition: D,\n {\n toData,\n value,\n locale,\n cacheData,\n expectedRenders,\n registerComponents,\n action,\n rootElements = [],\n }: {\n toData?: (value: ValueType<D>) => DataType<D>\n value: ValueType<D> | undefined\n locale?: string | null\n cacheData?: Partial<CacheData>\n expectedRenders?: number\n registerComponents?: (runtime: ReactRuntime) => void\n action?: (element: HTMLElement) => Promise<void>\n rootElements?: ElementData[]\n },\n) {\n // Arrange\n const controlData: DataType<D> | Data =\n value !== undefined ? (toData ? toData(value) : controlDefinition.toData(value)) : undefined\n\n const testComponentMeta = {\n type: 'TestComponent',\n label: 'Test Component',\n }\n\n const testId = 'test-id'\n const renderCountTestId = 'render-count-test-id'\n const elementData: ElementData = {\n key: ELEMENT_ID,\n type: testComponentMeta.type,\n props: {\n propKey: controlData,\n },\n }\n\n const runtime = new ReactRuntime()\n registerComponents?.(runtime)\n\n // Act\n runtime.registerComponent(\n forwardRef<HTMLDivElement, { propKey?: any }>(({ propKey }, ref) => {\n const renderCount = useRef(0)\n ++renderCount.current\n\n return (\n <div ref={ref}>\n <div data-testid={renderCountTestId}>{renderCount.current}</div>\n <div data-testid={testId}>{renderProp(propKey)}</div>\n </div>\n )\n }),\n {\n ...testComponentMeta,\n props: {\n propKey: controlDefinition as any,\n },\n },\n )\n\n const testElementTree = (component: ReactNode) => (\n <Testing.ReactProvider runtime={runtime}>{component}</Testing.ReactProvider>\n )\n\n if (!isServer()) {\n const rootElementData: ElementData = Testing.createRootComponent(\n [elementData, ...rootElements],\n ROOT_ID,\n )\n\n const snapshot = Testing.createMakeswiftPageSnapshot(rootElementData, { locale, cacheData })\n\n // Assert\n await act(async () => render(testElementTree(<Page snapshot={snapshot} />)))\n\n if (action) {\n await act(async () => {\n await action(screen.getByTestId(testId))\n })\n }\n\n expect(snapshot).toMatchSnapshot('snapshot')\n expect(propSnapshot(screen.getByTestId(testId))).toMatchSnapshot('resolvedValue')\n\n if (expectedRenders != null) {\n expect(Number(screen.getByTestId(renderCountTestId).textContent)).toBe(expectedRenders)\n }\n } else {\n // test server-side rendering using a component snapshot\n console.assert(action == null)\n console.assert(rootElements.length === 0)\n\n const snapshot = Testing.createMakeswiftComponentSnapshot(elementData, { locale, cacheData })\n const elementTree = testElementTree(\n <MakeswiftComponent snapshot={snapshot} {...testComponentMeta} />,\n )\n\n const document = await serverSideRender(elementTree)\n const getByTestId = (id: string): HTMLElement | null =>\n document.querySelector(`[data-testid=\"${id}\"]`)\n\n expect(propSnapshot(getByTestId(testId))).toMatchSnapshot('resolvedValue')\n expect([...document.querySelectorAll('style')].map(n => n.textContent)).toMatchSnapshot(\n 'component styles',\n )\n expect(Number(getByTestId(renderCountTestId)?.textContent)).toBe(1)\n }\n}\n"],"mappings":"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","names":["import_react"]}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+ var fixtures_exports = {};
30
+ __export(fixtures_exports, {
31
+ cacheData: () => cacheData,
32
+ value: () => value
33
+ });
34
+ module.exports = __toCommonJS(fixtures_exports);
35
+ var import_api = require("../../../../../api");
36
+ var Fixture = __toESM(require("../fixtures/rich-text-v2"));
37
+ const swatchId = "U3dhdGNoOmJkODYxMWM5LTNiZjItNDM3MS1iMmU4LTBmMmNlMDZjNDE1OA==";
38
+ const swatch = {
39
+ __typename: import_api.APIResourceType.Swatch,
40
+ id: swatchId,
41
+ hue: 238,
42
+ saturation: 87,
43
+ lightness: 49
44
+ };
45
+ const typographyId = "VHlwb2dyYXBoeTowNGI4OTZlMC0wZWEyLTRkMTMtYmU3ZS0xYmY1M2VmMjBiZjc=";
46
+ const typography = {
47
+ __typename: import_api.APIResourceType.Typography,
48
+ id: typographyId,
49
+ name: "Body",
50
+ style: [
51
+ {
52
+ deviceId: "desktop",
53
+ value: {
54
+ fontFamily: "Lato",
55
+ fontSize: { value: 16, unit: "px" },
56
+ color: null,
57
+ lineHeight: null,
58
+ letterSpacing: null,
59
+ fontWeight: null,
60
+ textAlign: null,
61
+ uppercase: null,
62
+ underline: null,
63
+ strikethrough: null,
64
+ italic: null
65
+ }
66
+ }
67
+ ]
68
+ };
69
+ const value = Fixture.data;
70
+ const cacheData = () => ({
71
+ apiResources: {
72
+ Swatch: [
73
+ {
74
+ id: swatchId,
75
+ value: swatch
76
+ }
77
+ ],
78
+ Typography: [
79
+ {
80
+ id: typographyId,
81
+ value: typography
82
+ }
83
+ ]
84
+ }
85
+ });
86
+ // Annotate the CommonJS export names for ESM import in node:
87
+ 0 && (module.exports = {
88
+ cacheData,
89
+ value
90
+ });
91
+ //# sourceMappingURL=fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/next/components/tests/controls/rich-text-v2-control/fixtures.tsx"],"sourcesContent":["import { APIResourceType, type Swatch, type Typography } from '../../../../../api'\n\nimport * as Fixture from '../fixtures/rich-text-v2'\nimport { type CacheData } from '../../../../../api/react'\n\nconst swatchId = 'U3dhdGNoOmJkODYxMWM5LTNiZjItNDM3MS1iMmU4LTBmMmNlMDZjNDE1OA=='\nconst swatch: Swatch = {\n __typename: APIResourceType.Swatch,\n id: swatchId,\n hue: 238,\n saturation: 87,\n lightness: 49,\n}\n\nconst typographyId = 'VHlwb2dyYXBoeTowNGI4OTZlMC0wZWEyLTRkMTMtYmU3ZS0xYmY1M2VmMjBiZjc='\nconst typography: Typography = {\n __typename: APIResourceType.Typography,\n id: typographyId,\n name: 'Body',\n style: [\n {\n deviceId: 'desktop',\n value: {\n fontFamily: 'Lato',\n fontSize: { value: 16, unit: 'px' },\n color: null,\n lineHeight: null,\n letterSpacing: null,\n fontWeight: null,\n textAlign: null,\n uppercase: null,\n underline: null,\n strikethrough: null,\n italic: null,\n },\n },\n ],\n}\n\nexport const value = Fixture.data\nexport const cacheData = (): Partial<CacheData> => ({\n apiResources: {\n Swatch: [\n {\n id: swatchId,\n value: swatch,\n },\n ],\n Typography: [\n {\n id: typographyId,\n value: typography,\n },\n ],\n },\n})\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iBAA8D;AAE9D,cAAyB;AAGzB,MAAM,WAAW;AACjB,MAAM,SAAiB;AAAA,EACrB,YAAY,2BAAgB;AAAA,EAC5B,IAAI;AAAA,EACJ,KAAK;AAAA,EACL,YAAY;AAAA,EACZ,WAAW;AACb;AAEA,MAAM,eAAe;AACrB,MAAM,aAAyB;AAAA,EAC7B,YAAY,2BAAgB;AAAA,EAC5B,IAAI;AAAA,EACJ,MAAM;AAAA,EACN,OAAO;AAAA,IACL;AAAA,MACE,UAAU;AAAA,MACV,OAAO;AAAA,QACL,YAAY;AAAA,QACZ,UAAU,EAAE,OAAO,IAAI,MAAM,KAAK;AAAA,QAClC,OAAO;AAAA,QACP,YAAY;AAAA,QACZ,eAAe;AAAA,QACf,YAAY;AAAA,QACZ,WAAW;AAAA,QACX,WAAW;AAAA,QACX,WAAW;AAAA,QACX,eAAe;AAAA,QACf,QAAQ;AAAA,MACV;AAAA,IACF;AAAA,EACF;AACF;AAEO,MAAM,QAAQ,QAAQ;AACtB,MAAM,YAAY,OAA2B;AAAA,EAClD,cAAc;AAAA,IACZ,QAAQ;AAAA,MACN;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,MACT;AAAA,IACF;AAAA,IACA,YAAY;AAAA,MACV;AAAA,QACE,IAAI;AAAA,QACJ,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;AACF;","names":[]}
@@ -0,0 +1,60 @@
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 fixtures_exports = {};
20
+ __export(fixtures_exports, {
21
+ registerComponents: () => registerComponents,
22
+ value: () => value
23
+ });
24
+ module.exports = __toCommonJS(fixtures_exports);
25
+ var import_jsx_runtime = require("react/jsx-runtime");
26
+ var import_controls2 = require("../../../../../controls");
27
+ var import_constants = require("../../../../../components/builtin/constants");
28
+ function Button({ className, title }) {
29
+ return /* @__PURE__ */ (0, import_jsx_runtime.jsx)("button", { className, children: title });
30
+ }
31
+ const value = {
32
+ width: [{ deviceId: "desktop", value: { value: 80, unit: "%" } }],
33
+ margin: [
34
+ {
35
+ deviceId: "desktop",
36
+ value: {
37
+ marginTop: { value: 4, unit: "px" },
38
+ marginLeft: void 0,
39
+ marginRight: void 0,
40
+ marginBottom: void 0
41
+ }
42
+ }
43
+ ]
44
+ };
45
+ const registerComponents = (runtime) => {
46
+ runtime.registerComponent(Button, {
47
+ type: import_constants.MakeswiftComponentType.Button,
48
+ label: "Button",
49
+ props: {
50
+ className: (0, import_controls2.Style)(),
51
+ title: (0, import_controls2.TextInput)({ defaultValue: "Button" })
52
+ }
53
+ });
54
+ };
55
+ // Annotate the CommonJS export names for ESM import in node:
56
+ 0 && (module.exports = {
57
+ registerComponents,
58
+ value
59
+ });
60
+ //# sourceMappingURL=fixtures.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../../../../src/next/components/tests/controls/style-control/fixtures.tsx"],"sourcesContent":["import { type ValueType } from '@makeswift/controls'\nimport { Style, StyleDefinition, TextInput } from '../../../../../controls'\nimport { MakeswiftComponentType } from '../../../../../components/builtin/constants'\nimport { ReactRuntime } from '../../../../../react'\n\nfunction Button({ className, title }: { className: string; title: string }) {\n return <button className={className}>{title}</button>\n}\n\nexport const value: ValueType<StyleDefinition> = {\n width: [{ deviceId: 'desktop', value: { value: 80, unit: '%' } }],\n margin: [\n {\n deviceId: 'desktop',\n value: {\n marginTop: { value: 4, unit: 'px' },\n marginLeft: undefined,\n marginRight: undefined,\n marginBottom: undefined,\n },\n },\n ],\n}\n\nexport const registerComponents = (runtime: ReactRuntime) => {\n runtime.registerComponent(Button, {\n type: MakeswiftComponentType.Button,\n label: 'Button',\n props: {\n className: Style(),\n title: TextInput({ defaultValue: 'Button' }),\n },\n })\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAMS;AALT,IAAAA,mBAAkD;AAClD,uBAAuC;AAGvC,SAAS,OAAO,EAAE,WAAW,MAAM,GAAyC;AAC1E,SAAO,4CAAC,YAAO,WAAuB,iBAAM;AAC9C;AAEO,MAAM,QAAoC;AAAA,EAC/C,OAAO,CAAC,EAAE,UAAU,WAAW,OAAO,EAAE,OAAO,IAAI,MAAM,IAAI,EAAE,CAAC;AAAA,EAChE,QAAQ;AAAA,IACN;AAAA,MACE,UAAU;AAAA,MACV,OAAO;AAAA,QACL,WAAW,EAAE,OAAO,GAAG,MAAM,KAAK;AAAA,QAClC,YAAY;AAAA,QACZ,aAAa;AAAA,QACb,cAAc;AAAA,MAChB;AAAA,IACF;AAAA,EACF;AACF;AAEO,MAAM,qBAAqB,CAAC,YAA0B;AAC3D,UAAQ,kBAAkB,QAAQ;AAAA,IAChC,MAAM,wCAAuB;AAAA,IAC7B,OAAO;AAAA,IACP,OAAO;AAAA,MACL,eAAW,wBAAM;AAAA,MACjB,WAAO,4BAAU,EAAE,cAAc,SAAS,CAAC;AAAA,IAC7C;AAAA,EACF,CAAC;AACH;","names":["import_controls"]}
@@ -1,7 +1,9 @@
1
1
  "use strict";
2
+ var __create = Object.create;
2
3
  var __defProp = Object.defineProperty;
3
4
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
5
  var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
5
7
  var __hasOwnProp = Object.prototype.hasOwnProperty;
6
8
  var __export = (target, all) => {
7
9
  for (var name in all)
@@ -15,6 +17,14 @@ var __copyProps = (to, from, except, desc) => {
15
17
  }
16
18
  return to;
17
19
  };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
18
28
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
19
29
  var page_prop_controller_exports = {};
20
30
  __export(page_prop_controller_exports, {
@@ -28,9 +38,8 @@ var import_prop_controllers = require("@makeswift/prop-controllers");
28
38
  var import_crypto = require("crypto");
29
39
  var import_page = require("../../page");
30
40
  var import_test_utils = require("react-dom/test-utils");
31
- var import_react2 = require("../../../../runtimes/react");
32
- var import_react3 = require("../../../../react");
33
- var import_element_data_test_test = require("../../../../utils/tests/element-data-test-test");
41
+ var import_react2 = require("../../../../react");
42
+ var Testing = __toESM(require("../../../../runtimes/react/testing"));
34
43
  const pagePropControllerTest = (propDef, value, component, assert, options) => describe("Page", () => {
35
44
  test(`can render ${propDef.type} v0 data`, async () => {
36
45
  const descriptorV0 = {
@@ -39,7 +48,7 @@ const pagePropControllerTest = (propDef, value, component, assert, options) => d
39
48
  };
40
49
  const TestComponentType = "TestComponent";
41
50
  const testId = "test-id";
42
- const elementData = (0, import_element_data_test_test.createRootComponent)([
51
+ const elementData = Testing.createRootComponent([
43
52
  {
44
53
  key: (0, import_crypto.randomUUID)(),
45
54
  type: TestComponentType,
@@ -48,8 +57,8 @@ const pagePropControllerTest = (propDef, value, component, assert, options) => d
48
57
  }
49
58
  }
50
59
  ]);
51
- const snapshot = (0, import_element_data_test_test.createMakeswiftPageSnapshot)(elementData);
52
- const runtime = new import_react3.ReactRuntime();
60
+ const snapshot = Testing.createMakeswiftPageSnapshot(elementData);
61
+ const runtime = new import_react2.ReactRuntime();
53
62
  runtime.registerComponent(component(testId), {
54
63
  type: TestComponentType,
55
64
  label: "TestComponent",
@@ -59,7 +68,7 @@ const pagePropControllerTest = (propDef, value, component, assert, options) => d
59
68
  });
60
69
  await (0, import_test_utils.act)(
61
70
  async () => (0, import_react.render)(
62
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react2.ReactRuntimeProvider, { runtime, previewMode: false, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_page.Page, { snapshot }) })
71
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Testing.ReactProvider, { runtime, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_page.Page, { snapshot }) })
63
72
  )
64
73
  );
65
74
  assert(import_react.screen.getByTestId(testId));
@@ -72,7 +81,7 @@ const pagePropControllerTest = (propDef, value, component, assert, options) => d
72
81
  };
73
82
  const TestComponentType = "TestComponent";
74
83
  const testId = "test-id";
75
- const elementData = (0, import_element_data_test_test.createRootComponent)([
84
+ const elementData = Testing.createRootComponent([
76
85
  {
77
86
  key: (0, import_crypto.randomUUID)(),
78
87
  type: TestComponentType,
@@ -81,8 +90,8 @@ const pagePropControllerTest = (propDef, value, component, assert, options) => d
81
90
  }
82
91
  }
83
92
  ]);
84
- const snapshot = (0, import_element_data_test_test.createMakeswiftPageSnapshot)(elementData);
85
- const runtime = new import_react3.ReactRuntime();
93
+ const snapshot = Testing.createMakeswiftPageSnapshot(elementData);
94
+ const runtime = new import_react2.ReactRuntime();
86
95
  runtime.registerComponent(component(testId), {
87
96
  type: TestComponentType,
88
97
  label: "TestComponent",
@@ -92,7 +101,7 @@ const pagePropControllerTest = (propDef, value, component, assert, options) => d
92
101
  });
93
102
  await (0, import_test_utils.act)(
94
103
  async () => (0, import_react.render)(
95
- /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_react2.ReactRuntimeProvider, { runtime, previewMode: false, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_page.Page, { snapshot }) })
104
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(Testing.ReactProvider, { runtime, children: /* @__PURE__ */ (0, import_jsx_runtime.jsx)(import_page.Page, { snapshot }) })
96
105
  )
97
106
  );
98
107
  assert(import_react.screen.getByTestId(testId));