@replohq/sdk 1.7.1 → 1.7.3
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.
- package/_vendor/replo-utils/lib/string.d.ts +0 -2
- package/_vendor/schemas/errors.d.ts +2 -3
- package/_vendor/schemas/generated/errors.d.ts +3 -0
- package/_vendor/schemas/loaderKeys.mjs +0 -1
- package/_vendor/schemas/money.d.ts +1 -1
- package/_vendor/schemas/money.mjs +1 -7
- package/_vendor/schemas/routing/locale.mjs +1 -1
- package/_vendor/schemas/routing/rules.mjs +1 -2
- package/analytics/analytics-provider.js +0 -1
- package/analytics/analytics-sink.js +0 -1
- package/analytics/get-analytics-sinks.js +0 -1
- package/analytics/hooks/use-product-viewed-analytics.js +0 -1
- package/analytics/replo-first-party-pixel.js +0 -1
- package/analytics/replo-pixel-script.js +0 -1
- package/analytics/sinks/converge-event-mapper.js +0 -1
- package/analytics/sinks/converge-sink.js +0 -1
- package/analytics/sinks/elevar-sink.js +0 -1
- package/analytics/sinks/ga4-sink.js +0 -4
- package/analytics/sinks/meta-sink.js +0 -4
- package/analytics/sinks/northbeam-sink.js +0 -1
- package/analytics/sinks/pinterest-sink.js +0 -4
- package/analytics/sinks/reddit-sink.js +0 -4
- package/analytics/sinks/replo-sink.js +0 -2
- package/analytics/sinks/snapchat-sink.js +0 -4
- package/analytics/sinks/tiktok-sink.js +0 -4
- package/analytics/sinks/window-sink.js +0 -3
- package/analytics/utils/analytics-utils.js +0 -1
- package/analytics/utils/navigation-tracker.js +0 -1
- package/analytics/utils/shopify-funnel-gate.js +0 -1
- package/cart/buy-now-action.js +0 -3
- package/cart/cart-actions.js +0 -1
- package/cart/cart-loader.js +0 -1
- package/cart/cart-provider.js +1 -2
- package/cart/cart-schema.js +0 -1
- package/cart/cart-types.js +0 -1
- package/cart/gateways/cart-constants.js +0 -2
- package/cart/gateways/cart-gateway.js +0 -1
- package/cart/gateways/cookie-cart-gateway.js +0 -5
- package/cart/gateways/default-cart-gateway.js +0 -1
- package/cart/gateways/resolver-cart-gateway.js +0 -5
- package/cart/gateways/stripe-cart-gateway.js +0 -1
- package/cart/hooks/use-add-to-cart.js +0 -4
- package/cart/hooks/use-buy-now.js +0 -1
- package/cart/return-urls.js +0 -1
- package/cart/storefront-urls.js +0 -1
- package/cart/utils/cart-adjustments.js +0 -1
- package/cart/utils/cart-analytics.js +0 -1
- package/cart/utils/cart-error.js +0 -1
- package/cart/utils/cart-utils.js +0 -1
- package/cart/utils/cookie-cart-persistence.js +0 -1
- package/cart/utils/variant-to-cart-line.js +0 -6
- package/chunk-7OPH5UFQ.mjs +0 -1
- package/chunk-AL3F36PH.mjs +5 -127
- package/chunk-EUQVEPSD.mjs +0 -1
- package/chunk-GV5FY7ZZ.mjs +0 -11
- package/chunk-UJCSKKID.mjs +0 -4
- package/chunk-VKO7P3ED.mjs +0 -2
- package/chunk-VPEVERWE.mjs +0 -1
- package/{chunk-5M7VU32I.mjs → chunk-YJQVNUW7.mjs} +1 -12
- package/consent/consent-action.js +0 -1
- package/consent/consent-actions.js +0 -1
- package/consent/consent-platform.js +0 -3
- package/consent/consent-store.js +0 -5
- package/consent/cookie.js +0 -1
- package/consent/inject-script-descriptors.js +0 -1
- package/consent/replo-scripts.js +0 -1
- package/consent/script-registration-store.js +0 -2
- package/consent/script-snippets.js +0 -7
- package/consent/types.js +0 -1
- package/consent/window-api.js +0 -1
- package/content.js +0 -1
- package/env.js +0 -1
- package/gateways/canopy-api.js +0 -10
- package/hooks/use-client-value.d.ts +1 -1
- package/hooks/use-client-value.js +0 -1
- package/hooks/use-formatted-price.js +0 -1
- package/lib/buildMetadata.js +3 -3
- package/lib/canopy-error.js +0 -1
- package/lib/external-navigation.d.ts +1 -1
- package/lib/external-navigation.js +0 -1
- package/lib/get-query-client.js +0 -1
- package/lib/integration-utils.js +0 -1
- package/lib/shopify-utils.js +0 -1
- package/lib/url-utils.js +0 -1
- package/loaders/collection-loader-args.js +0 -1
- package/loaders/collection-loader.js +0 -1
- package/loaders/collection-products-loader-args.js +0 -1
- package/loaders/collection-products-loader.js +0 -1
- package/loaders/contentful-entries-loader.js +0 -1
- package/loaders/contentful-entry-loader.js +0 -1
- package/loaders/invoke-loader-action.js +0 -1
- package/loaders/invoke-loader-server.js +0 -1
- package/loaders/invoke-loader.js +0 -1
- package/loaders/judgeme-review-aggregate-loader.js +0 -1
- package/loaders/judgeme-reviews-loader.js +0 -1
- package/loaders/levanta-product-loader.js +0 -1
- package/loaders/loader-error-boundary.d.ts +11 -2
- package/loaders/loader-error-boundary.js +52 -9
- package/loaders/loader-error-details.d.ts +2 -0
- package/loaders/loader-error-details.js +7 -0
- package/loaders/loader-keys.js +0 -1
- package/loaders/loader-schemas.js +0 -4
- package/loaders/loox-review-aggregate-loader.js +0 -1
- package/loaders/loox-reviews-loader.js +0 -1
- package/loaders/metaobject-loader.js +0 -1
- package/loaders/metaobjects-loader.js +0 -1
- package/loaders/okendo-review-aggregate-loader.js +0 -1
- package/loaders/okendo-reviews-loader.js +0 -1
- package/loaders/prefetch-loaders.js +0 -1
- package/loaders/preview-placeholder.js +0 -5
- package/loaders/product-loader-args.js +0 -1
- package/loaders/product-loader.js +0 -1
- package/loaders/rebuy-recommendations-loader.js +0 -1
- package/loaders/reviews-io-review-aggregate-loader.js +0 -1
- package/loaders/reviews-io-reviews-loader.js +0 -1
- package/loaders/smile-earning-rules-loader.js +0 -1
- package/loaders/smile-rewards-loader.js +0 -1
- package/loaders/smile-vip-tiers-loader.js +0 -1
- package/loaders/statsig-experiment-loader.js +0 -1
- package/loaders/yotpo-review-aggregate-loader.js +0 -1
- package/loaders/yotpo-reviews-loader.js +0 -1
- package/money.js +0 -1
- package/next/config.js +0 -18
- package/next/image-loader.js +6 -5
- package/next/open-next.js +0 -1
- package/orders/order-status-schema.js +0 -4
- package/orders/order-status.js +0 -3
- package/package.json +4 -4
- package/providers/query-provider.js +0 -1
- package/providers/replo-provider.js +4 -3
- package/routing/evaluate.js +0 -1
- package/routing/geo.js +0 -1
- package/routing/locale.js +0 -1
- package/routing/rules.js +0 -1
- package/analytics/analytics-provider.js.map +0 -7
- package/analytics/analytics-sink.js.map +0 -7
- package/analytics/get-analytics-sinks.js.map +0 -7
- package/analytics/hooks/use-product-viewed-analytics.js.map +0 -7
- package/analytics/replo-first-party-pixel.js.map +0 -7
- package/analytics/replo-pixel-script.js.map +0 -7
- package/analytics/sinks/converge-event-mapper.js.map +0 -7
- package/analytics/sinks/converge-sink.js.map +0 -7
- package/analytics/sinks/elevar-sink.js.map +0 -7
- package/analytics/sinks/ga4-sink.js.map +0 -7
- package/analytics/sinks/meta-sink.js.map +0 -7
- package/analytics/sinks/northbeam-sink.js.map +0 -7
- package/analytics/sinks/pinterest-sink.js.map +0 -7
- package/analytics/sinks/reddit-sink.js.map +0 -7
- package/analytics/sinks/replo-sink.js.map +0 -7
- package/analytics/sinks/snapchat-sink.js.map +0 -7
- package/analytics/sinks/tiktok-sink.js.map +0 -7
- package/analytics/sinks/window-sink.js.map +0 -7
- package/analytics/utils/analytics-utils.js.map +0 -7
- package/analytics/utils/navigation-tracker.js.map +0 -7
- package/analytics/utils/shopify-funnel-gate.js.map +0 -7
- package/cart/buy-now-action.js.map +0 -7
- package/cart/cart-actions.js.map +0 -7
- package/cart/cart-loader.js.map +0 -7
- package/cart/cart-provider.js.map +0 -7
- package/cart/cart-schema.js.map +0 -7
- package/cart/cart-types.js.map +0 -7
- package/cart/gateways/cart-constants.js.map +0 -7
- package/cart/gateways/cart-gateway.js.map +0 -7
- package/cart/gateways/cookie-cart-gateway.js.map +0 -7
- package/cart/gateways/default-cart-gateway.js.map +0 -7
- package/cart/gateways/resolver-cart-gateway.js.map +0 -7
- package/cart/gateways/stripe-cart-gateway.js.map +0 -7
- package/cart/hooks/use-add-to-cart.js.map +0 -7
- package/cart/hooks/use-buy-now.js.map +0 -7
- package/cart/return-urls.js.map +0 -7
- package/cart/storefront-urls.js.map +0 -7
- package/cart/utils/cart-adjustments.js.map +0 -7
- package/cart/utils/cart-analytics.js.map +0 -7
- package/cart/utils/cart-error.js.map +0 -7
- package/cart/utils/cart-utils.js.map +0 -7
- package/cart/utils/cookie-cart-persistence.js.map +0 -7
- package/cart/utils/variant-to-cart-line.js.map +0 -7
- package/consent/consent-action.js.map +0 -7
- package/consent/consent-actions.js.map +0 -7
- package/consent/consent-platform.js.map +0 -7
- package/consent/consent-store.js.map +0 -7
- package/consent/cookie.js.map +0 -7
- package/consent/inject-script-descriptors.js.map +0 -7
- package/consent/replo-scripts.js.map +0 -7
- package/consent/script-registration-store.js.map +0 -7
- package/consent/script-snippets.js.map +0 -7
- package/consent/types.js.map +0 -7
- package/consent/window-api.js.map +0 -7
- package/content.js.map +0 -7
- package/env.js.map +0 -7
- package/gateways/canopy-api.js.map +0 -7
- package/hooks/use-client-value.js.map +0 -7
- package/hooks/use-formatted-price.js.map +0 -7
- package/lib/buildMetadata.js.map +0 -7
- package/lib/canopy-error.js.map +0 -7
- package/lib/external-navigation.js.map +0 -7
- package/lib/get-query-client.js.map +0 -7
- package/lib/integration-utils.js.map +0 -7
- package/lib/shopify-utils.js.map +0 -7
- package/lib/url-utils.js.map +0 -7
- package/loaders/collection-loader-args.js.map +0 -7
- package/loaders/collection-loader.js.map +0 -7
- package/loaders/collection-products-loader-args.js.map +0 -7
- package/loaders/collection-products-loader.js.map +0 -7
- package/loaders/contentful-entries-loader.js.map +0 -7
- package/loaders/contentful-entry-loader.js.map +0 -7
- package/loaders/invoke-loader-action.js.map +0 -7
- package/loaders/invoke-loader-server.js.map +0 -7
- package/loaders/invoke-loader.js.map +0 -7
- package/loaders/judgeme-review-aggregate-loader.js.map +0 -7
- package/loaders/judgeme-reviews-loader.js.map +0 -7
- package/loaders/levanta-product-loader.js.map +0 -7
- package/loaders/loader-error-boundary.js.map +0 -7
- package/loaders/loader-keys.js.map +0 -7
- package/loaders/loader-schemas.js.map +0 -7
- package/loaders/loox-review-aggregate-loader.js.map +0 -7
- package/loaders/loox-reviews-loader.js.map +0 -7
- package/loaders/metaobject-loader.js.map +0 -7
- package/loaders/metaobjects-loader.js.map +0 -7
- package/loaders/okendo-review-aggregate-loader.js.map +0 -7
- package/loaders/okendo-reviews-loader.js.map +0 -7
- package/loaders/prefetch-loaders.js.map +0 -7
- package/loaders/preview-placeholder.js.map +0 -7
- package/loaders/product-loader-args.js.map +0 -7
- package/loaders/product-loader.js.map +0 -7
- package/loaders/rebuy-recommendations-loader.js.map +0 -7
- package/loaders/reviews-io-review-aggregate-loader.js.map +0 -7
- package/loaders/reviews-io-reviews-loader.js.map +0 -7
- package/loaders/smile-earning-rules-loader.js.map +0 -7
- package/loaders/smile-rewards-loader.js.map +0 -7
- package/loaders/smile-vip-tiers-loader.js.map +0 -7
- package/loaders/statsig-experiment-loader.js.map +0 -7
- package/loaders/yotpo-review-aggregate-loader.js.map +0 -7
- package/loaders/yotpo-reviews-loader.js.map +0 -7
- package/money.js.map +0 -7
- package/next/config.js.map +0 -7
- package/next/image-loader.js.map +0 -7
- package/next/open-next.js.map +0 -7
- package/orders/order-status-schema.js.map +0 -7
- package/orders/order-status.js.map +0 -7
- package/providers/query-provider.js.map +0 -7
- package/providers/replo-provider.js.map +0 -7
- package/routing/evaluate.js.map +0 -7
- package/routing/geo.js.map +0 -7
- package/routing/locale.js.map +0 -7
- package/routing/rules.js.map +0 -7
package/lib/url-utils.js.map
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../lib/url-utils.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Builds a base URL from an API host, using http for local hosts and https otherwise.\n */\nexport function buildBaseUrl(apiHost: string): string {\n const isLocal =\n apiHost.startsWith(\"localhost\") ||\n apiHost.startsWith(\"127.0.0.1\") ||\n apiHost.startsWith(\"host.docker.internal\");\n return `${isLocal ? \"http\" : \"https\"}://${apiHost}`;\n}\n"],
|
|
5
|
-
"mappings": "AAGO,SAAS,aAAa,SAAyB;AACpD,QAAM,UACJ,QAAQ,WAAW,WAAW,KAC9B,QAAQ,WAAW,WAAW,KAC9B,QAAQ,WAAW,sBAAsB;AAC3C,SAAO,GAAG,UAAU,SAAS,OAAO,MAAM,OAAO;AACnD;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/collection-loader-args.ts"],
|
|
4
|
-
"sourcesContent": ["export type CollectionLoaderArgs = {\n handle?: string;\n collectionGid?: string;\n language?: string;\n country?: string;\n};\n\n/**\n * Builds the single object used as BOTH the React Query key and the loader\n * payload. They must stay identical: `PrefetchedLoaders` seeds the cache under\n * `[loaderKey, args]`, so an arg sent to the loader but missing from the key\n * (or vice versa) silently misses the prefetch.\n *\n * Keys left `undefined` drop out of React Query's key hash, so omitting a field\n * here hashes the same as a prefetch that never passed it.\n */\nexport function buildCollectionLoaderArgs({\n handle,\n collectionGid,\n language,\n country,\n}: CollectionLoaderArgs): CollectionLoaderArgs {\n return {\n handle,\n collectionGid,\n language,\n country,\n };\n}\n"],
|
|
5
|
-
"mappings": "AAgBO,SAAS,0BAA0B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA+C;AAC7C,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/collection-loader.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport type { CollectionLoaderArgs } from \"./collection-loader-args\";\nimport type { FullCollection } from \"./loader-schemas\";\n\nimport { Suspense } from \"react\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\n\nimport { buildCollectionLoaderArgs } from \"./collection-loader-args\";\nimport { invokeLoader } from \"./invoke-loader\";\nimport { LoaderErrorBoundary } from \"./loader-error-boundary\";\nimport { fullCollectionSchema } from \"./loader-schemas\";\nimport { useReportPreviewPlaceholderRender } from \"./preview-placeholder\";\n\ntype CollectionLoaderProps = CollectionLoaderArgs & {\n loaderKey: string;\n children: (data: FullCollection) => ReactNode;\n fallback?: ReactNode;\n};\n\nfunction CollectionLoaderInner({\n loaderKey,\n args,\n children,\n}: {\n loaderKey: string;\n args: CollectionLoaderArgs;\n children: (data: FullCollection) => ReactNode;\n}) {\n const queryResult = useSuspenseQuery({\n queryKey: [loaderKey, args],\n queryFn: async () => {\n const loadedData = await invokeLoader({\n loaderKey,\n args,\n });\n return fullCollectionSchema.parse(loadedData);\n },\n });\n useReportPreviewPlaceholderRender(queryResult.data);\n\n return <>{children(queryResult.data)}</>;\n}\n\nexport function CollectionLoader({\n loaderKey,\n handle,\n collectionGid,\n language,\n country,\n children,\n fallback,\n}: CollectionLoaderProps) {\n const args = buildCollectionLoaderArgs({\n handle,\n collectionGid,\n language,\n country,\n });\n\n return (\n <LoaderErrorBoundary\n fallback={fallback ?? null}\n resetKey={`${loaderKey}:${JSON.stringify(args)}`}\n >\n <Suspense fallback={fallback ?? null}>\n <CollectionLoaderInner loaderKey={loaderKey} args={args}>\n {children}\n </CollectionLoaderInner>\n </Suspense>\n </LoaderErrorBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": ";AA2CS;AArCT,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AAEjC,SAAS,iCAAiC;AAC1C,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AACpC,SAAS,4BAA4B;AACrC,SAAS,yCAAyC;AAQlD,SAAS,sBAAsB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,cAAc,iBAAiB;AAAA,IACnC,UAAU,CAAC,WAAW,IAAI;AAAA,IAC1B,SAAS,YAAY;AACnB,YAAM,aAAa,MAAM,aAAa;AAAA,QACpC;AAAA,QACA;AAAA,MACF,CAAC;AACD,aAAO,qBAAqB,MAAM,UAAU;AAAA,IAC9C;AAAA,EACF,CAAC;AACD,oCAAkC,YAAY,IAAI;AAElD,SAAO,gCAAG,mBAAS,YAAY,IAAI,GAAE;AACvC;AAEO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,QAAM,OAAO,0BAA0B;AAAA,IACrC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,YAAY;AAAA,MACtB,UAAU,GAAG,SAAS,IAAI,KAAK,UAAU,IAAI,CAAC;AAAA,MAE9C,8BAAC,YAAS,UAAU,YAAY,MAC9B,8BAAC,yBAAsB,WAAsB,MAC1C,UACH,GACF;AAAA;AAAA,EACF;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/collection-products-loader-args.ts"],
|
|
4
|
-
"sourcesContent": ["export type CollectionProductsLoaderArgs = {\n collectionGid: string;\n first?: number;\n after?: string;\n language?: string;\n country?: string;\n};\n\n/**\n * Builds the single object used as BOTH the React Query key and the loader\n * payload. They must stay identical: `PrefetchedLoaders` seeds the cache under\n * `[loaderKey, args]`, so an arg sent to the loader but missing from the key\n * (or vice versa) silently misses the prefetch.\n *\n * Keys left `undefined` drop out of React Query's key hash, so omitting a field\n * here hashes the same as a prefetch that never passed it.\n */\nexport function buildCollectionProductsLoaderArgs({\n collectionGid,\n first,\n after,\n language,\n country,\n}: CollectionProductsLoaderArgs): CollectionProductsLoaderArgs {\n return {\n collectionGid,\n first,\n after,\n language,\n country,\n };\n}\n"],
|
|
5
|
-
"mappings": "AAiBO,SAAS,kCAAkC;AAAA,EAChD;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA+D;AAC7D,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/collection-products-loader.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport type { CollectionProductsLoaderArgs } from \"./collection-products-loader-args\";\nimport type { PaginatedProducts } from \"./loader-schemas\";\n\nimport { Suspense } from \"react\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\n\nimport { buildCollectionProductsLoaderArgs } from \"./collection-products-loader-args\";\nimport { invokeLoader } from \"./invoke-loader\";\nimport { LoaderErrorBoundary } from \"./loader-error-boundary\";\nimport { paginatedProductsSchema } from \"./loader-schemas\";\nimport { useReportPreviewPlaceholderRender } from \"./preview-placeholder\";\n\ntype CollectionProductsLoaderProps = CollectionProductsLoaderArgs & {\n loaderKey: string;\n children: (data: PaginatedProducts) => ReactNode;\n fallback?: ReactNode;\n};\n\nfunction CollectionProductsLoaderInner({\n loaderKey,\n args,\n children,\n}: {\n loaderKey: string;\n args: CollectionProductsLoaderArgs;\n children: (data: PaginatedProducts) => ReactNode;\n}) {\n const queryResult = useSuspenseQuery({\n queryKey: [loaderKey, args],\n queryFn: async () => {\n const loadedData = await invokeLoader({\n loaderKey,\n args,\n });\n return paginatedProductsSchema.parse(loadedData);\n },\n });\n useReportPreviewPlaceholderRender(queryResult.data);\n\n return <>{children(queryResult.data)}</>;\n}\n\nexport function CollectionProductsLoader({\n loaderKey,\n collectionGid,\n first,\n after,\n language,\n country,\n children,\n fallback,\n}: CollectionProductsLoaderProps) {\n const args = buildCollectionProductsLoaderArgs({\n collectionGid,\n first,\n after,\n language,\n country,\n });\n\n return (\n <LoaderErrorBoundary\n fallback={fallback ?? null}\n resetKey={`${loaderKey}:${JSON.stringify(args)}`}\n >\n <Suspense fallback={fallback ?? null}>\n <CollectionProductsLoaderInner loaderKey={loaderKey} args={args}>\n {children}\n </CollectionProductsLoaderInner>\n </Suspense>\n </LoaderErrorBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": ";AA2CS;AArCT,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AAEjC,SAAS,yCAAyC;AAClD,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AACpC,SAAS,+BAA+B;AACxC,SAAS,yCAAyC;AAQlD,SAAS,8BAA8B;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,cAAc,iBAAiB;AAAA,IACnC,UAAU,CAAC,WAAW,IAAI;AAAA,IAC1B,SAAS,YAAY;AACnB,YAAM,aAAa,MAAM,aAAa;AAAA,QACpC;AAAA,QACA;AAAA,MACF,CAAC;AACD,aAAO,wBAAwB,MAAM,UAAU;AAAA,IACjD;AAAA,EACF,CAAC;AACD,oCAAkC,YAAY,IAAI;AAElD,SAAO,gCAAG,mBAAS,YAAY,IAAI,GAAE;AACvC;AAEO,SAAS,yBAAyB;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAkC;AAChC,QAAM,OAAO,kCAAkC;AAAA,IAC7C;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,YAAY;AAAA,MACtB,UAAU,GAAG,SAAS,IAAI,KAAK,UAAU,IAAI,CAAC;AAAA,MAE9C,8BAAC,YAAS,UAAU,YAAY,MAC9B,8BAAC,iCAA8B,WAAsB,MAClD,UACH,GACF;AAAA;AAAA,EACF;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/contentful-entries-loader.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport type { ContentfulEntriesLoaderOutput } from \"./loader-schemas\";\n\nimport { Suspense } from \"react\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\n\nimport { invokeLoader } from \"./invoke-loader\";\nimport { LoaderErrorBoundary } from \"./loader-error-boundary\";\nimport { contentfulEntriesLoaderOutputSchema } from \"./loader-schemas\";\n\ntype ContentfulEntriesLoaderProps = {\n loaderKey: string;\n spaceId: string;\n contentType: string;\n environmentId?: string;\n locale?: string;\n order?: string;\n limit?: number;\n skip?: number;\n include?: number;\n children: (data: ContentfulEntriesLoaderOutput) => ReactNode;\n fallback?: ReactNode;\n};\n\nfunction buildArgs({\n spaceId,\n contentType,\n environmentId,\n locale,\n order,\n limit,\n skip,\n include,\n}: Omit<ContentfulEntriesLoaderProps, \"loaderKey\" | \"children\" | \"fallback\">) {\n return {\n spaceId,\n contentType,\n ...(environmentId !== undefined ? { environmentId } : {}),\n ...(locale !== undefined ? { locale } : {}),\n ...(order !== undefined ? { order } : {}),\n ...(limit !== undefined ? { limit } : {}),\n ...(skip !== undefined ? { skip } : {}),\n ...(include !== undefined ? { include } : {}),\n };\n}\n\nfunction ContentfulEntriesLoaderInner({\n loaderKey,\n args,\n children,\n}: {\n loaderKey: string;\n args: ReturnType<typeof buildArgs>;\n children: (data: ContentfulEntriesLoaderOutput) => ReactNode;\n}) {\n const { data } = useSuspenseQuery({\n queryKey: [loaderKey, args],\n queryFn: async () => {\n const loadedData = await invokeLoader({ loaderKey, args });\n return contentfulEntriesLoaderOutputSchema.parse(loadedData);\n },\n });\n\n return <>{children(data)}</>;\n}\n\nexport function ContentfulEntriesLoader({\n loaderKey,\n spaceId,\n contentType,\n environmentId,\n locale,\n order,\n limit,\n skip,\n include,\n children,\n fallback,\n}: ContentfulEntriesLoaderProps) {\n const args = buildArgs({\n spaceId,\n contentType,\n environmentId,\n locale,\n order,\n limit,\n skip,\n include,\n });\n\n return (\n <LoaderErrorBoundary\n fallback={fallback ?? null}\n resetKey={`${loaderKey}:${JSON.stringify(args)}`}\n >\n <Suspense fallback={fallback ?? null}>\n <ContentfulEntriesLoaderInner loaderKey={loaderKey} args={args}>\n {children}\n </ContentfulEntriesLoaderInner>\n </Suspense>\n </LoaderErrorBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": ";AAkES;AA7DT,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AAEjC,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AACpC,SAAS,2CAA2C;AAgBpD,SAAS,UAAU;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA8E;AAC5E,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,GAAI,kBAAkB,SAAY,EAAE,cAAc,IAAI,CAAC;AAAA,IACvD,GAAI,WAAW,SAAY,EAAE,OAAO,IAAI,CAAC;AAAA,IACzC,GAAI,UAAU,SAAY,EAAE,MAAM,IAAI,CAAC;AAAA,IACvC,GAAI,UAAU,SAAY,EAAE,MAAM,IAAI,CAAC;AAAA,IACvC,GAAI,SAAS,SAAY,EAAE,KAAK,IAAI,CAAC;AAAA,IACrC,GAAI,YAAY,SAAY,EAAE,QAAQ,IAAI,CAAC;AAAA,EAC7C;AACF;AAEA,SAAS,6BAA6B;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,EAAE,KAAK,IAAI,iBAAiB;AAAA,IAChC,UAAU,CAAC,WAAW,IAAI;AAAA,IAC1B,SAAS,YAAY;AACnB,YAAM,aAAa,MAAM,aAAa,EAAE,WAAW,KAAK,CAAC;AACzD,aAAO,oCAAoC,MAAM,UAAU;AAAA,IAC7D;AAAA,EACF,CAAC;AAED,SAAO,gCAAG,mBAAS,IAAI,GAAE;AAC3B;AAEO,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAiC;AAC/B,QAAM,OAAO,UAAU;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,YAAY;AAAA,MACtB,UAAU,GAAG,SAAS,IAAI,KAAK,UAAU,IAAI,CAAC;AAAA,MAE9C,8BAAC,YAAS,UAAU,YAAY,MAC9B,8BAAC,gCAA6B,WAAsB,MACjD,UACH,GACF;AAAA;AAAA,EACF;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/contentful-entry-loader.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport type { ContentfulEntryLoaderOutput } from \"./loader-schemas\";\n\nimport { Suspense } from \"react\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\n\nimport { invokeLoader } from \"./invoke-loader\";\nimport { LoaderErrorBoundary } from \"./loader-error-boundary\";\nimport { contentfulEntryLoaderOutputSchema } from \"./loader-schemas\";\n\ntype ContentfulEntryLoaderProps = {\n loaderKey: string;\n spaceId: string;\n entryId: string;\n environmentId?: string;\n locale?: string;\n include?: number;\n children: (data: ContentfulEntryLoaderOutput) => ReactNode;\n fallback?: ReactNode;\n};\n\nfunction buildArgs({\n spaceId,\n entryId,\n environmentId,\n locale,\n include,\n}: Omit<ContentfulEntryLoaderProps, \"loaderKey\" | \"children\" | \"fallback\">) {\n return {\n spaceId,\n entryId,\n ...(environmentId !== undefined ? { environmentId } : {}),\n ...(locale !== undefined ? { locale } : {}),\n ...(include !== undefined ? { include } : {}),\n };\n}\n\nfunction ContentfulEntryLoaderInner({\n loaderKey,\n args,\n children,\n}: {\n loaderKey: string;\n args: ReturnType<typeof buildArgs>;\n children: (data: ContentfulEntryLoaderOutput) => ReactNode;\n}) {\n const { data } = useSuspenseQuery({\n queryKey: [loaderKey, args],\n queryFn: async () => {\n const loadedData = await invokeLoader({ loaderKey, args });\n return contentfulEntryLoaderOutputSchema.parse(loadedData);\n },\n });\n\n return <>{children(data)}</>;\n}\n\nexport function ContentfulEntryLoader({\n loaderKey,\n spaceId,\n entryId,\n environmentId,\n locale,\n include,\n children,\n fallback,\n}: ContentfulEntryLoaderProps) {\n const args = buildArgs({ spaceId, entryId, environmentId, locale, include });\n\n return (\n <LoaderErrorBoundary\n fallback={fallback ?? null}\n resetKey={`${loaderKey}:${JSON.stringify(args)}`}\n >\n <Suspense fallback={fallback ?? null}>\n <ContentfulEntryLoaderInner loaderKey={loaderKey} args={args}>\n {children}\n </ContentfulEntryLoaderInner>\n </Suspense>\n </LoaderErrorBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": ";AAyDS;AApDT,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AAEjC,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AACpC,SAAS,yCAAyC;AAalD,SAAS,UAAU;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA4E;AAC1E,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,GAAI,kBAAkB,SAAY,EAAE,cAAc,IAAI,CAAC;AAAA,IACvD,GAAI,WAAW,SAAY,EAAE,OAAO,IAAI,CAAC;AAAA,IACzC,GAAI,YAAY,SAAY,EAAE,QAAQ,IAAI,CAAC;AAAA,EAC7C;AACF;AAEA,SAAS,2BAA2B;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,EAAE,KAAK,IAAI,iBAAiB;AAAA,IAChC,UAAU,CAAC,WAAW,IAAI;AAAA,IAC1B,SAAS,YAAY;AACnB,YAAM,aAAa,MAAM,aAAa,EAAE,WAAW,KAAK,CAAC;AACzD,aAAO,kCAAkC,MAAM,UAAU;AAAA,IAC3D;AAAA,EACF,CAAC;AAED,SAAO,gCAAG,mBAAS,IAAI,GAAE;AAC3B;AAEO,SAAS,sBAAsB;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA+B;AAC7B,QAAM,OAAO,UAAU,EAAE,SAAS,SAAS,eAAe,QAAQ,QAAQ,CAAC;AAE3E,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,YAAY;AAAA,MACtB,UAAU,GAAG,SAAS,IAAI,KAAK,UAAU,IAAI,CAAC;AAAA,MAE9C,8BAAC,YAAS,UAAU,YAAY,MAC9B,8BAAC,8BAA2B,WAAsB,MAC/C,UACH,GACF;AAAA;AAAA,EACF;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/invoke-loader-action.ts"],
|
|
4
|
-
"sourcesContent": ["\"use server\";\n\nimport { getCanopyApiGateway } from \"../gateways/canopy-api\";\n\n/**\n * Server action that invokes a data loader via the canopy-api gateway.\n * Called from client-side loader components when React Query needs to\n * fetch data in the browser (e.g., client-side navigation, cache miss).\n * This runs on the server \u2014 Next.js handles the client/server boundary\n * automatically.\n */\nexport async function invokeLoaderAction({\n loaderKey,\n args,\n}: {\n loaderKey: string;\n args: Record<string, unknown>;\n}) {\n const gateway = await getCanopyApiGateway();\n const response = await gateway.invokeLoader({ loaderKey, args });\n return response.data;\n}\n"],
|
|
5
|
-
"mappings": ";AAEA,SAAS,2BAA2B;AASpC,eAAsB,mBAAmB;AAAA,EACvC;AAAA,EACA;AACF,GAGG;AACD,QAAM,UAAU,MAAM,oBAAoB;AAC1C,QAAM,WAAW,MAAM,QAAQ,aAAa,EAAE,WAAW,KAAK,CAAC;AAC/D,SAAO,SAAS;AAClB;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/invoke-loader-server.ts"],
|
|
4
|
-
"sourcesContent": ["import { unstable_cache } from \"next/cache\";\n\nimport {\n CanopyApiGatewayError,\n getCanopyApiGateway,\n shouldIncludeInactiveProducts,\n} from \"../gateways/canopy-api\";\nimport { resolvePreviewPlaceholderData } from \"./preview-placeholder\";\n\nconst DEFAULT_REVALIDATE_SECONDS = 60;\n\n// NOTE (Max, 2026-09-11): cached values are wrapped so the not-found marker\n// stays disjoint from every possible loader payload.\ntype CachedLoaderInvocation =\n | { kind: \"data\"; data: unknown }\n | { kind: \"notFound\" };\n\nclass LoaderDataNotFoundError extends CanopyApiGatewayError {\n constructor({ loaderKey }: { loaderKey: string }) {\n super({\n message: \"Loader data not found\",\n statusCode: 404,\n additionalData: { loaderKey },\n });\n }\n}\n\nfunction buildStableCacheKeyParts({\n loaderKey,\n args,\n includeInactiveProducts,\n}: {\n loaderKey: string;\n args: Record<string, unknown>;\n includeInactiveProducts: boolean;\n}): string[] {\n const sortedArgsJson = JSON.stringify(\n Object.entries(args)\n .sort(([keyA], [keyB]) => keyA.localeCompare(keyB))\n .map(([key, value]) => [key, value]),\n );\n return [\n \"loader\",\n loaderKey,\n sortedArgsJson,\n `includeInactiveProducts:${includeInactiveProducts}`,\n ];\n}\n\n/**\n * Server-only loader invocation that calls the canopy-api gateway directly.\n * Used by PrefetchedLoaders to seed the React Query cache during SSR.\n *\n * Results are cached via Next.js `unstable_cache` so repeated SSR renders\n * for the same loader+args return instantly without a network round-trip\n * to canopy-api. The canopy-api's own in-memory cache still acts as a second\n * layer for cold starts and cross-instance sharing.\n *\n * A canopy 404 is cached as a not-found marker and rethrown as a 404\n * `CanopyApiGatewayError`, so a successful revalidation can displace a stale\n * entry once the underlying data disappears (e.g. a product goes draft).\n *\n * @param revalidateSeconds - How long (in seconds) the cached result is\n * considered fresh. Defaults to 60. Set to `false` to cache indefinitely\n * (use tag-based invalidation via `revalidateTag` to purge).\n */\nexport async function invokeLoaderServer({\n loaderKey,\n args,\n revalidateSeconds = DEFAULT_REVALIDATE_SECONDS,\n}: {\n loaderKey: string;\n args: Record<string, unknown>;\n revalidateSeconds?: number | false;\n}) {\n // Dev-server previews of an unfilled dynamic route prefetch sample data\n // instead of fetching \u2014 a real fetch with the literal bracket param can only\n // 404, and the thrown error marks the whole preview frame as broken. Kept\n // outside unstable_cache so sample data never enters the loader cache.\n const placeholderData = resolvePreviewPlaceholderData({ loaderKey, args });\n if (placeholderData !== null) {\n return placeholderData;\n }\n const cacheKeyParts = buildStableCacheKeyParts({\n loaderKey,\n args,\n includeInactiveProducts: shouldIncludeInactiveProducts(),\n });\n\n const cachedInvocation = await unstable_cache(\n async (): Promise<CachedLoaderInvocation> => {\n const gateway = await getCanopyApiGateway();\n try {\n const response = await gateway.invokeLoader({ loaderKey, args });\n return { kind: \"data\", data: response.data };\n } catch (error) {\n // NOTE (Max, 2026-09-10): unstable_cache serves a stale entry forever\n // when every background revalidation rejects, so a 404 must resolve\n // with a cacheable marker that displaces the stale payload (REPL-31653).\n if (\n error instanceof CanopyApiGatewayError &&\n error.statusCode === 404\n ) {\n return { kind: \"notFound\" };\n }\n throw error;\n }\n },\n cacheKeyParts,\n {\n revalidate: revalidateSeconds,\n tags: [`loader:${loaderKey}`, ...cacheKeyParts],\n },\n )();\n\n if (cachedInvocation.kind === \"notFound\") {\n throw new LoaderDataNotFoundError({ loaderKey });\n }\n return cachedInvocation.data;\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,sBAAsB;AAE/B;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AACP,SAAS,qCAAqC;AAE9C,MAAM,6BAA6B;AAQnC,MAAM,gCAAgC,sBAAsB;AAAA,EAC1D,YAAY,EAAE,UAAU,GAA0B;AAChD,UAAM;AAAA,MACJ,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB,EAAE,UAAU;AAAA,IAC9B,CAAC;AAAA,EACH;AACF;AAEA,SAAS,yBAAyB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AACF,GAIa;AACX,QAAM,iBAAiB,KAAK;AAAA,IAC1B,OAAO,QAAQ,IAAI,EAChB,KAAK,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,MAAM,KAAK,cAAc,IAAI,CAAC,EACjD,IAAI,CAAC,CAAC,KAAK,KAAK,MAAM,CAAC,KAAK,KAAK,CAAC;AAAA,EACvC;AACA,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA,2BAA2B,uBAAuB;AAAA,EACpD;AACF;AAmBA,eAAsB,mBAAmB;AAAA,EACvC;AAAA,EACA;AAAA,EACA,oBAAoB;AACtB,GAIG;AAKD,QAAM,kBAAkB,8BAA8B,EAAE,WAAW,KAAK,CAAC;AACzE,MAAI,oBAAoB,MAAM;AAC5B,WAAO;AAAA,EACT;AACA,QAAM,gBAAgB,yBAAyB;AAAA,IAC7C;AAAA,IACA;AAAA,IACA,yBAAyB,8BAA8B;AAAA,EACzD,CAAC;AAED,QAAM,mBAAmB,MAAM;AAAA,IAC7B,YAA6C;AAC3C,YAAM,UAAU,MAAM,oBAAoB;AAC1C,UAAI;AACF,cAAM,WAAW,MAAM,QAAQ,aAAa,EAAE,WAAW,KAAK,CAAC;AAC/D,eAAO,EAAE,MAAM,QAAQ,MAAM,SAAS,KAAK;AAAA,MAC7C,SAAS,OAAO;AAId,YACE,iBAAiB,yBACjB,MAAM,eAAe,KACrB;AACA,iBAAO,EAAE,MAAM,WAAW;AAAA,QAC5B;AACA,cAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA;AAAA,IACA;AAAA,MACE,YAAY;AAAA,MACZ,MAAM,CAAC,UAAU,SAAS,IAAI,GAAG,aAAa;AAAA,IAChD;AAAA,EACF,EAAE;AAEF,MAAI,iBAAiB,SAAS,YAAY;AACxC,UAAM,IAAI,wBAAwB,EAAE,UAAU,CAAC;AAAA,EACjD;AACA,SAAO,iBAAiB;AAC1B;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/invoke-loader.ts"],
|
|
4
|
-
"sourcesContent": ["import { CanopyError } from \"../lib/canopy-error\";\nimport { resolvePreviewPlaceholderData } from \"./preview-placeholder\";\n\n/** Scoped error for loader invocation failures. */\nexport class LoaderInvokeError extends CanopyError {}\n\n/**\n * Invokes a data loader. During SSR, calls the canopy-api gateway directly.\n * In the browser, dynamically imports a server action so React 19 never sees\n * the \"use server\" reference during render.\n *\n * In an editor iframe previewing an unfilled dynamic route, returns sample\n * data instead of fetching \u2014 see `preview-placeholder.ts`.\n */\nexport async function invokeLoader({\n loaderKey,\n args,\n}: {\n loaderKey: string;\n args: Record<string, unknown>;\n}) {\n const placeholderData = resolvePreviewPlaceholderData({ loaderKey, args });\n if (placeholderData !== null) {\n return placeholderData;\n }\n try {\n if (typeof window === \"undefined\") {\n const { getCanopyApiGateway } = await import(\"../gateways/canopy-api\");\n const gateway = await getCanopyApiGateway();\n const response = await gateway.invokeLoader({ loaderKey, args });\n return response.data;\n }\n\n const { invokeLoaderAction } = await import(\"./invoke-loader-action\");\n return await invokeLoaderAction({ loaderKey, args });\n } catch (error) {\n if (error instanceof LoaderInvokeError) {\n throw error;\n }\n throw new LoaderInvokeError({\n message: `Loader ${loaderKey} failed: ${error instanceof Error ? error.message : String(error)}`,\n cause: error,\n additionalData: { loaderKey },\n });\n }\n}\n"],
|
|
5
|
-
"mappings": "AAAA,SAAS,mBAAmB;AAC5B,SAAS,qCAAqC;AAGvC,MAAM,0BAA0B,YAAY;AAAC;AAUpD,eAAsB,aAAa;AAAA,EACjC;AAAA,EACA;AACF,GAGG;AACD,QAAM,kBAAkB,8BAA8B,EAAE,WAAW,KAAK,CAAC;AACzE,MAAI,oBAAoB,MAAM;AAC5B,WAAO;AAAA,EACT;AACA,MAAI;AACF,QAAI,OAAO,WAAW,aAAa;AACjC,YAAM,EAAE,oBAAoB,IAAI,MAAM,OAAO,wBAAwB;AACrE,YAAM,UAAU,MAAM,oBAAoB;AAC1C,YAAM,WAAW,MAAM,QAAQ,aAAa,EAAE,WAAW,KAAK,CAAC;AAC/D,aAAO,SAAS;AAAA,IAClB;AAEA,UAAM,EAAE,mBAAmB,IAAI,MAAM,OAAO,wBAAwB;AACpE,WAAO,MAAM,mBAAmB,EAAE,WAAW,KAAK,CAAC;AAAA,EACrD,SAAS,OAAO;AACd,QAAI,iBAAiB,mBAAmB;AACtC,YAAM;AAAA,IACR;AACA,UAAM,IAAI,kBAAkB;AAAA,MAC1B,SAAS,UAAU,SAAS,YAAY,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,MAC9F,OAAO;AAAA,MACP,gBAAgB,EAAE,UAAU;AAAA,IAC9B,CAAC;AAAA,EACH;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/judgeme-review-aggregate-loader.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\n\nimport { Suspense } from \"react\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { z } from \"zod\";\n\nimport { invokeLoader } from \"./invoke-loader\";\nimport { LoaderErrorBoundary } from \"./loader-error-boundary\";\nimport { judgemeProductReviewAggregateLoaderOutputSchema } from \"./loader-schemas\";\n\ntype JudgemeReviewAggregateData = z.infer<\n typeof judgemeProductReviewAggregateLoaderOutputSchema\n>;\n\ntype JudgemeReviewAggregateLoaderProps = {\n loaderKey: string;\n productId: string;\n children: (data: JudgemeReviewAggregateData) => ReactNode;\n fallback?: ReactNode;\n};\n\nfunction JudgemeReviewAggregateLoaderInner({\n loaderKey,\n productId,\n children,\n}: Omit<JudgemeReviewAggregateLoaderProps, \"fallback\">) {\n const { data } = useSuspenseQuery({\n queryKey: [loaderKey, { productId }],\n queryFn: async () => {\n const loadedData = await invokeLoader({\n loaderKey,\n args: { productId },\n });\n return judgemeProductReviewAggregateLoaderOutputSchema.parse(loadedData);\n },\n });\n\n return <>{children(data)}</>;\n}\n\nexport function JudgemeReviewAggregateLoader({\n loaderKey,\n productId,\n children,\n fallback,\n}: JudgemeReviewAggregateLoaderProps) {\n return (\n <LoaderErrorBoundary\n fallback={fallback ?? null}\n resetKey={`${loaderKey}:${productId}`}\n >\n <Suspense fallback={fallback ?? null}>\n <JudgemeReviewAggregateLoaderInner\n loaderKey={loaderKey}\n productId={productId}\n >\n {children}\n </JudgemeReviewAggregateLoaderInner>\n </Suspense>\n </LoaderErrorBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": ";AAwCS;AApCT,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AAGjC,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AACpC,SAAS,uDAAuD;AAahE,SAAS,kCAAkC;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AACF,GAAwD;AACtD,QAAM,EAAE,KAAK,IAAI,iBAAiB;AAAA,IAChC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC;AAAA,IACnC,SAAS,YAAY;AACnB,YAAM,aAAa,MAAM,aAAa;AAAA,QACpC;AAAA,QACA,MAAM,EAAE,UAAU;AAAA,MACpB,CAAC;AACD,aAAO,gDAAgD,MAAM,UAAU;AAAA,IACzE;AAAA,EACF,CAAC;AAED,SAAO,gCAAG,mBAAS,IAAI,GAAE;AAC3B;AAEO,SAAS,6BAA6B;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAsC;AACpC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,YAAY;AAAA,MACtB,UAAU,GAAG,SAAS,IAAI,SAAS;AAAA,MAEnC,8BAAC,YAAS,UAAU,YAAY,MAC9B;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UAEC;AAAA;AAAA,MACH,GACF;AAAA;AAAA,EACF;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/judgeme-reviews-loader.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\n\nimport { Suspense } from \"react\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { z } from \"zod\";\n\nimport { invokeLoader } from \"./invoke-loader\";\nimport { LoaderErrorBoundary } from \"./loader-error-boundary\";\nimport { judgemeProductReviewsLoaderOutputSchema } from \"./loader-schemas\";\n\ntype JudgemeReviewsData = z.infer<\n typeof judgemeProductReviewsLoaderOutputSchema\n>;\n\ntype JudgemeReviewsLoaderProps = {\n loaderKey: string;\n productId: string;\n perPage?: number;\n page?: number;\n children: (data: JudgemeReviewsData) => ReactNode;\n fallback?: ReactNode;\n};\n\n// Only forward pagination args when set so the queryKey and prefetch args\n// match (a prefetch that omits page/perPage must hydrate a component that also\n// omits them). React Query keys are structural, so undefined entries would\n// break the prefetch \u2192 client cache handoff.\nfunction buildReviewsArgs({\n productId,\n perPage,\n page,\n}: {\n productId: string;\n perPage?: number;\n page?: number;\n}) {\n return {\n productId,\n ...(perPage !== undefined ? { perPage } : {}),\n ...(page !== undefined ? { page } : {}),\n };\n}\n\nfunction JudgemeReviewsLoaderInner({\n loaderKey,\n productId,\n perPage,\n page,\n children,\n}: Omit<JudgemeReviewsLoaderProps, \"fallback\">) {\n const args = buildReviewsArgs({ productId, perPage, page });\n const { data } = useSuspenseQuery({\n queryKey: [loaderKey, args],\n queryFn: async () => {\n const loadedData = await invokeLoader({ loaderKey, args });\n return judgemeProductReviewsLoaderOutputSchema.parse(loadedData);\n },\n });\n\n return <>{children(data)}</>;\n}\n\nexport function JudgemeReviewsLoader({\n loaderKey,\n productId,\n perPage,\n page,\n children,\n fallback,\n}: JudgemeReviewsLoaderProps) {\n return (\n <LoaderErrorBoundary\n fallback={fallback ?? null}\n resetKey={`${loaderKey}:${productId}:${perPage ?? \"\"}:${page ?? \"\"}`}\n >\n <Suspense fallback={fallback ?? null}>\n <JudgemeReviewsLoaderInner\n loaderKey={loaderKey}\n productId={productId}\n perPage={perPage}\n page={page}\n >\n {children}\n </JudgemeReviewsLoaderInner>\n </Suspense>\n </LoaderErrorBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": ";AA8DS;AA1DT,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AAGjC,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AACpC,SAAS,+CAA+C;AAmBxD,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,SAAO;AAAA,IACL;AAAA,IACA,GAAI,YAAY,SAAY,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC3C,GAAI,SAAS,SAAY,EAAE,KAAK,IAAI,CAAC;AAAA,EACvC;AACF;AAEA,SAAS,0BAA0B;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAgD;AAC9C,QAAM,OAAO,iBAAiB,EAAE,WAAW,SAAS,KAAK,CAAC;AAC1D,QAAM,EAAE,KAAK,IAAI,iBAAiB;AAAA,IAChC,UAAU,CAAC,WAAW,IAAI;AAAA,IAC1B,SAAS,YAAY;AACnB,YAAM,aAAa,MAAM,aAAa,EAAE,WAAW,KAAK,CAAC;AACzD,aAAO,wCAAwC,MAAM,UAAU;AAAA,IACjE;AAAA,EACF,CAAC;AAED,SAAO,gCAAG,mBAAS,IAAI,GAAE;AAC3B;AAEO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA8B;AAC5B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,YAAY;AAAA,MACtB,UAAU,GAAG,SAAS,IAAI,SAAS,IAAI,WAAW,EAAE,IAAI,QAAQ,EAAE;AAAA,MAElE,8BAAC,YAAS,UAAU,YAAY,MAC9B;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UAEC;AAAA;AAAA,MACH,GACF;AAAA;AAAA,EACF;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/levanta-product-loader.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport type { LevantaProductFull } from \"./loader-schemas\";\n\nimport { Suspense } from \"react\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\n\nimport { invokeLoader } from \"./invoke-loader\";\nimport { LoaderErrorBoundary } from \"./loader-error-boundary\";\nimport { levantaProductFullSchema } from \"./loader-schemas\";\n\ntype LevantaProductLoaderProps = {\n loaderKey: string;\n asin: string;\n marketplace?: string;\n children: (data: LevantaProductFull) => ReactNode;\n fallback?: ReactNode;\n};\n\nfunction LevantaProductLoaderInner({\n loaderKey,\n asin,\n marketplace,\n children,\n}: Omit<LevantaProductLoaderProps, \"fallback\">) {\n const queryResult = useSuspenseQuery({\n queryKey: [loaderKey, { asin, marketplace }],\n queryFn: async () => {\n const loadedData = await invokeLoader({\n loaderKey,\n args: { asin, marketplace },\n });\n return levantaProductFullSchema.parse(loadedData);\n },\n });\n\n return <>{children(queryResult.data)}</>;\n}\n\nexport function LevantaProductLoader({\n loaderKey,\n asin,\n marketplace,\n children,\n fallback,\n}: LevantaProductLoaderProps) {\n return (\n <LoaderErrorBoundary\n fallback={fallback ?? null}\n resetKey={`${loaderKey}:${asin}:${marketplace ?? \"\"}`}\n >\n <Suspense fallback={fallback ?? null}>\n <LevantaProductLoaderInner\n loaderKey={loaderKey}\n asin={asin}\n marketplace={marketplace}\n >\n {children}\n </LevantaProductLoaderInner>\n </Suspense>\n </LoaderErrorBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": ";AAsCS;AAjCT,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AAEjC,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AACpC,SAAS,gCAAgC;AAUzC,SAAS,0BAA0B;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAgD;AAC9C,QAAM,cAAc,iBAAiB;AAAA,IACnC,UAAU,CAAC,WAAW,EAAE,MAAM,YAAY,CAAC;AAAA,IAC3C,SAAS,YAAY;AACnB,YAAM,aAAa,MAAM,aAAa;AAAA,QACpC;AAAA,QACA,MAAM,EAAE,MAAM,YAAY;AAAA,MAC5B,CAAC;AACD,aAAO,yBAAyB,MAAM,UAAU;AAAA,IAClD;AAAA,EACF,CAAC;AAED,SAAO,gCAAG,mBAAS,YAAY,IAAI,GAAE;AACvC;AAEO,SAAS,qBAAqB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA8B;AAC5B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,YAAY;AAAA,MACtB,UAAU,GAAG,SAAS,IAAI,IAAI,IAAI,eAAe,EAAE;AAAA,MAEnD,8BAAC,YAAS,UAAU,YAAY,MAC9B;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UAEC;AAAA;AAAA,MACH,GACF;AAAA;AAAA,EACF;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/loader-error-boundary.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\n\nimport * as React from \"react\";\n\ninterface LoaderErrorBoundaryState {\n hasError: boolean;\n resetKey: string;\n}\n\ntype LoaderErrorBoundaryProps = React.PropsWithChildren<{\n fallback: ReactNode;\n resetKey: string;\n}>;\n\n/**\n * Error boundary for loader components that renders the fallback instead of\n * crashing the page when a loader fails (e.g. product not published to the\n * Online Store sales channel, deleted collection, etc.).\n *\n * When resetKey changes (e.g. navigating to a different product), the error\n * state is cleared so the new loader gets a chance to render.\n */\nexport class LoaderErrorBoundary extends React.Component<\n LoaderErrorBoundaryProps,\n LoaderErrorBoundaryState\n> {\n state: LoaderErrorBoundaryState = { hasError: false, resetKey: \"\" };\n\n static getDerivedStateFromError(): Partial<LoaderErrorBoundaryState> {\n return { hasError: true };\n }\n\n static getDerivedStateFromProps(\n props: LoaderErrorBoundaryProps,\n state: LoaderErrorBoundaryState,\n ): Partial<LoaderErrorBoundaryState> | null {\n if (props.resetKey !== state.resetKey) {\n return { hasError: false, resetKey: props.resetKey };\n }\n return null;\n }\n\n render() {\n if (this.state.hasError) {\n return this.props.fallback;\n }\n return this.props.children;\n }\n}\n"],
|
|
5
|
-
"mappings": ";AAIA,YAAY,WAAW;AAoBhB,MAAM,4BAA4B,MAAM,UAG7C;AAAA,EACA,QAAkC,EAAE,UAAU,OAAO,UAAU,GAAG;AAAA,EAElE,OAAO,2BAA8D;AACnE,WAAO,EAAE,UAAU,KAAK;AAAA,EAC1B;AAAA,EAEA,OAAO,yBACL,OACA,OAC0C;AAC1C,QAAI,MAAM,aAAa,MAAM,UAAU;AACrC,aAAO,EAAE,UAAU,OAAO,UAAU,MAAM,SAAS;AAAA,IACrD;AACA,WAAO;AAAA,EACT;AAAA,EAEA,SAAS;AACP,QAAI,KAAK,MAAM,UAAU;AACvB,aAAO,KAAK,MAAM;AAAA,IACpB;AACA,WAAO,KAAK,MAAM;AAAA,EACpB;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/loader-keys.ts"],
|
|
4
|
-
"sourcesContent": ["// NOTE (Ryan, 2026-07-23, REPL-27611): Canonical loader-key constants for the\n// published-page surface. the SDK owns this copy so nothing shipped to a\n// generated site imports from `schemas`. The backend keeps its own copy in\n// `schemas/loaderKeys.ts` (consumed by the integration registry + tool\n// metadata, which cannot depend on the SDK without a cycle); the two are\n// kept in lockstep by the drift guard in `loader-keys.spec.ts`.\n\n/**\n * Shared data-loader key constants. Loader components and prefetch queries\n * import from here so the strings are never duplicated across a generated site.\n *\n * These keys serve double duty: they identify which backend loader to invoke\n * AND are used as React Query cache key prefixes. Loader components internally\n * construct queryKey as `[loaderKey, args]`.\n *\n * Naming convention: `<integration>.<objectType>` or\n * `<integration>.<objectType>_<qualifier>`.\n */\nexport const DATA_LOADER_KEYS = {\n SHOPIFY_PRODUCT: \"shopify_storefront.product\",\n SHOPIFY_COLLECTION: \"shopify_storefront.collection\",\n SHOPIFY_COLLECTION_PRODUCTS: \"shopify_storefront.collection_products\",\n SHOPIFY_METAOBJECT: \"shopify_storefront.metaobject\",\n SHOPIFY_METAOBJECTS: \"shopify_storefront.metaobjects\",\n REPLO_PRODUCT: \"replo_products.product\",\n OKENDO_PRODUCT_REVIEWS: \"okendo.product_reviews\",\n OKENDO_PRODUCT_REVIEW_AGGREGATE: \"okendo.product_review_aggregate\",\n REBUY_RECOMMENDATIONS: \"rebuy.recommendations\",\n LEVANTA_PRODUCT: \"levanta_products.product\",\n SMILE_IO_VIP_TIERS: \"smile_io.vip_tiers\",\n SMILE_IO_EARNING_RULES: \"smile_io.earning_rules\",\n SMILE_IO_REWARDS: \"smile_io.rewards\",\n YOTPO_PRODUCT_REVIEWS: \"yotpo.product_reviews\",\n YOTPO_PRODUCT_REVIEW_AGGREGATE: \"yotpo.product_review_aggregate\",\n REVIEWS_IO_PRODUCT_REVIEWS: \"reviews_io.product_reviews\",\n REVIEWS_IO_PRODUCT_REVIEW_AGGREGATE: \"reviews_io.product_review_aggregate\",\n LOOX_PRODUCT_REVIEWS: \"loox.product_reviews\",\n LOOX_PRODUCT_REVIEW_AGGREGATE: \"loox.product_review_aggregate\",\n JUDGEME_PRODUCT_REVIEWS: \"judgeme.product_reviews\",\n JUDGEME_PRODUCT_REVIEW_AGGREGATE: \"judgeme.product_review_aggregate\",\n STATSIG_EXPERIMENT: \"statsig.experiment\",\n CONTENTFUL_ENTRY: \"contentful.entry\",\n CONTENTFUL_ENTRIES: \"contentful.entries\",\n} as const;\n\nexport type DataLoaderKey =\n (typeof DATA_LOADER_KEYS)[keyof typeof DATA_LOADER_KEYS];\n"],
|
|
5
|
-
"mappings": "AAkBO,MAAM,mBAAmB;AAAA,EAC9B,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,6BAA6B;AAAA,EAC7B,oBAAoB;AAAA,EACpB,qBAAqB;AAAA,EACrB,eAAe;AAAA,EACf,wBAAwB;AAAA,EACxB,iCAAiC;AAAA,EACjC,uBAAuB;AAAA,EACvB,iBAAiB;AAAA,EACjB,oBAAoB;AAAA,EACpB,wBAAwB;AAAA,EACxB,kBAAkB;AAAA,EAClB,uBAAuB;AAAA,EACvB,gCAAgC;AAAA,EAChC,4BAA4B;AAAA,EAC5B,qCAAqC;AAAA,EACrC,sBAAsB;AAAA,EACtB,+BAA+B;AAAA,EAC/B,yBAAyB;AAAA,EACzB,kCAAkC;AAAA,EAClC,oBAAoB;AAAA,EACpB,kBAAkB;AAAA,EAClB,oBAAoB;AACtB;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/loader-schemas.ts"],
|
|
4
|
-
"sourcesContent": ["import { z } from \"zod\";\n\n// NOTE (Ryan, 2026-07-23, REPL-27611): Self-contained copies of the loader\n// output contracts (and the `objectType` / `sellingPlan` sub-schemas they\n// compose) that the SDK validates on published pages. These live here \u2014 not\n// imported from `schemas` \u2014 so nothing shipped to a generated site depends on\n// the `schemas` workspace package. The backend keeps the canonical definitions\n// in `schemas` because its integration registry + tool-metadata generation\n// consume them and cannot depend on the SDK without an import cycle. The two\n// sides are kept structurally in lockstep by `loader-schemas.spec.ts`.\n\n// ---------------------------------------------------------------------------\n// Shared sub-schemas (mirrors of schemas/objectType.ts)\n// ---------------------------------------------------------------------------\n\nexport const imageSchema = z.object({\n url: z.string(),\n altText: z.string().nullable(),\n width: z.number().nullable(),\n height: z.number().nullable(),\n});\n\nexport const mediaImageSchema = z.object({\n type: z.literal(\"image\"),\n alt: z.string().nullable(),\n url: z.string(),\n width: z.number().nullable(),\n height: z.number().nullable(),\n});\n\nexport const videoSourceSchema = z.object({\n url: z.string(),\n mimeType: z.string(),\n format: z.string(),\n width: z.number().nullable(),\n height: z.number().nullable(),\n});\n\nexport const previewImageSchema = z.object({\n alt: z.string().nullable(),\n url: z.string(),\n width: z.number().nullable(),\n height: z.number().nullable(),\n});\n\nexport const videoSchema = z.object({\n type: z.literal(\"video\"),\n alt: z.string().nullable(),\n sources: z.array(videoSourceSchema),\n previewImage: previewImageSchema.nullable(),\n});\n\nexport const externalVideoSchema = z.object({\n type: z.literal(\"externalVideo\"),\n alt: z.string().nullable(),\n embedUrl: z.string(),\n host: z.string(),\n originUrl: z.string(),\n previewImage: previewImageSchema.nullable(),\n});\n\nexport const mediaSchema = z.discriminatedUnion(\"type\", [\n mediaImageSchema,\n videoSchema,\n externalVideoSchema,\n]);\n\nexport const priceSchema = z.object({\n amount: z.string(),\n currencyCode: z.string(),\n});\n\nexport const selectedOptionSchema = z.object({\n name: z.string(),\n value: z.string(),\n});\n\nexport const optionValueSwatchSchema = z.object({\n color: z.string().nullable(),\n imageUrl: z.string().nullable(),\n});\n\nexport const optionValueSchema = z.object({\n id: z.string(),\n value: z.string(),\n swatch: optionValueSwatchSchema.nullable(),\n});\n\nexport const productOptionSchema = z.object({\n id: z.string().optional(),\n name: z.string(),\n values: z.array(z.string()),\n optionValues: z.array(optionValueSchema).optional(),\n});\n\nexport const metafieldSchema = z.object({\n key: z.string(),\n namespace: z.string(),\n type: z.string(),\n value: z.string(),\n});\n\n// ---------------------------------------------------------------------------\n// Selling plan schemas (mirror of schemas/sellingPlan.ts)\n// ---------------------------------------------------------------------------\n\nexport const sellingPlanPriceAdjustmentSchema = z.object({\n value: z.number(),\n valueType: z.enum([\"percentage\", \"fixedAmount\", \"price\"]),\n});\n\nexport const sellingPlanOptionValueSchema = z.object({\n name: z.string().optional(),\n value: z.string(),\n});\n\nexport const sellingPlanSchema = z.object({\n id: z.string(),\n name: z.string(),\n description: z.string().nullable(),\n optionValues: z.array(sellingPlanOptionValueSchema),\n priceAdjustments: z.array(sellingPlanPriceAdjustmentSchema),\n appId: z.string().nullish(),\n price: z.string().optional(),\n externalId: z.string().nullable(),\n});\n\nexport const sellingPlanGroupSchema = z\n .object({\n appId: z.string().nullable(),\n options: z.array(\n z.object({\n name: z.string(),\n values: z.array(z.union([z.string(), z.null()])),\n }),\n ),\n sellingPlans: z.array(sellingPlanSchema),\n })\n .describe(\"SellingPlanGroup\");\n\nexport type SellingPlanGroup = z.infer<typeof sellingPlanGroupSchema>;\n\n// ---------------------------------------------------------------------------\n// Canonical Product / Variant (mostly-optional; mirror of objectType.ts).\n// Used by the collection-products (paginated) and rebuy loaders, and as the\n// cart's cache-resolution product shape.\n// ---------------------------------------------------------------------------\n\nexport const variantSchema = z.object({\n id: z.string(),\n title: z.string().optional(),\n availableForSale: z.boolean().optional(),\n isLowStock: z.boolean().optional(),\n sku: z.string().nullish(),\n selectedOptions: z.array(selectedOptionSchema).optional(),\n image: imageSchema.nullish(),\n price: priceSchema.optional(),\n compareAtPrice: priceSchema.nullish(),\n sellingPlanIds: z.array(z.string()).optional(),\n});\n\nexport const productSchema = z.object({\n id: z.string(),\n handle: z.string().optional(),\n title: z.string().optional(),\n description: z.string().nullish(),\n descriptionHtml: z.string().nullish(),\n availableForSale: z.boolean().optional(),\n // NOTE (Berkley, 2026-07-30): Admin-sourced status; Storefront loader data\n // never includes it. Kept in lockstep with `schemas/objectType` by the\n // drift-guard spec.\n status: z.enum([\"ACTIVE\", \"DRAFT\", \"ARCHIVED\", \"UNLISTED\"]).optional(),\n featuredImage: imageSchema.nullish(),\n options: z.array(productOptionSchema).optional(),\n variants: z.array(variantSchema).optional(),\n minPrice: priceSchema.optional(),\n maxPrice: priceSchema.optional(),\n compareAtMinPrice: priceSchema.optional(),\n compareAtMaxPrice: priceSchema.optional(),\n images: z.array(imageSchema).optional(),\n media: z.array(mediaSchema).optional(),\n vendor: z.string().nullish(),\n productType: z.string().nullish(),\n tags: z.array(z.string()).optional(),\n sellingPlanGroups: z.array(sellingPlanGroupSchema).optional(),\n metafields: z.array(metafieldSchema).optional(),\n});\n\nexport type Product = z.infer<typeof productSchema>;\n\nexport const okendoReviewSchema = z\n .object({\n id: z.string(),\n title: z.string().optional(),\n body: z.string().optional(),\n rating: z.number().optional(),\n productName: z.string().optional(),\n reviewerName: z.string().optional(),\n dateCreated: z.string().optional(),\n status: z.string().optional(),\n })\n .describe(\"OkendoReview\");\n\n// ---------------------------------------------------------------------------\n// Full loader outputs (mirror of\n// schemas/agentTools/customIntegrations/loaders/product.ts)\n// ---------------------------------------------------------------------------\n\nexport const fullVariantSchema = z.object({\n id: z.string(),\n title: z.string(),\n availableForSale: z.boolean(),\n isLowStock: z.boolean().optional(),\n sku: z.string().nullable(),\n selectedOptions: z.array(selectedOptionSchema),\n image: imageSchema.nullable(),\n price: priceSchema,\n compareAtPrice: priceSchema.nullable(),\n sellingPlanIds: z.array(z.string()),\n metafields: z.array(metafieldSchema).optional(),\n});\n\nexport const fullProductSchema = z.object({\n id: z.string(),\n handle: z.string(),\n title: z.string(),\n description: z.string().nullable(),\n descriptionHtml: z.string().nullable(),\n availableForSale: z.boolean(),\n featuredImage: imageSchema.nullable(),\n options: z.array(productOptionSchema),\n variants: z.array(fullVariantSchema),\n images: z.array(imageSchema),\n media: z.array(mediaSchema),\n vendor: z.string().nullable(),\n productType: z.string().nullable(),\n tags: z.array(z.string()),\n sellingPlanGroups: z.array(sellingPlanGroupSchema),\n metafields: z.array(metafieldSchema),\n});\n\nexport const fullCollectionSchema = z.object({\n id: z.string(),\n handle: z.string(),\n title: z.string(),\n descriptionHtml: z.string().nullable(),\n image: imageSchema.nullable(),\n metafields: z.array(metafieldSchema).optional(),\n});\n\nexport const paginatedProductsSchema = z.object({\n products: z.array(productSchema),\n pageInfo: z.object({\n hasNextPage: z.boolean(),\n endCursor: z.string().nullable(),\n }),\n});\n\nexport type FullProduct = z.infer<typeof fullProductSchema>;\nexport type FullCollection = z.infer<typeof fullCollectionSchema>;\nexport type FullVariant = z.infer<typeof fullVariantSchema>;\nexport type PaginatedProducts = z.infer<typeof paginatedProductsSchema>;\n\n// ---------------------------------------------------------------------------\n// Levanta loader output (mirror of\n// schemas/agentTools/customIntegrations/loaders/levanta.ts)\n// ---------------------------------------------------------------------------\n\nconst levantaAffiliateLinkSchema = z.object({\n linkId: z.string(),\n url: z.string(),\n});\n\nexport const levantaProductFullSchema = z\n .object({\n id: z.string(),\n asin: z.string(),\n title: z.string(),\n price: z\n .string()\n .describe('Product price as a decimal string in USD (e.g. \"34.99\").'),\n commission: z\n .string()\n .describe(\n 'Creator commission rate as a decimal string percentage (e.g. \"8.5\" meaning 8.5%).',\n ),\n imageUrl: z.string().nullable(),\n brand: z.object({ id: z.string(), name: z.string() }).nullable(),\n inStock: z.boolean(),\n marketplace: z.string(),\n affiliateLink: levantaAffiliateLinkSchema.nullable(),\n })\n .describe(\"LevantaProductFull\");\n\nexport type LevantaProductFull = z.infer<typeof levantaProductFullSchema>;\n\n// ---------------------------------------------------------------------------\n// Yotpo loader outputs (mirror of\n// schemas/agentTools/customIntegrations/loaders/yotpo.ts)\n// ---------------------------------------------------------------------------\n\nexport const yotpoReviewLoaderItemSchema = z.object({\n id: z.string(),\n title: z.string().nullable(),\n content: z.string().nullable(),\n score: z.number().nullable(),\n createdAt: z.string().nullable(),\n verifiedBuyer: z.boolean(),\n reviewerName: z.string().nullable(),\n});\n\nexport const yotpoProductReviewsLoaderOutputSchema = z.object({\n reviews: z.array(yotpoReviewLoaderItemSchema),\n});\n\nexport const yotpoProductReviewAggregateLoaderOutputSchema = z.object({\n averageScore: z.number(),\n totalReviews: z.number(),\n starDistribution: z.record(z.string(), z.number()),\n});\n\n// ---------------------------------------------------------------------------\n// Reviews.io loader outputs (mirror of\n// schemas/agentTools/customIntegrations/loaders/reviewsIo.ts)\n// ---------------------------------------------------------------------------\n\nexport const reviewsIoReviewLoaderItemSchema = z.object({\n id: z.string(),\n title: z.string().nullable(),\n body: z.string().nullable(),\n rating: z.number().nullable(),\n createdAt: z.string().nullable(),\n verifiedBuyer: z.boolean(),\n reviewerName: z.string().nullable(),\n productName: z.string().nullable(),\n sku: z.string().nullable(),\n});\n\nexport const reviewsIoProductReviewsLoaderOutputSchema = z.object({\n reviews: z.array(reviewsIoReviewLoaderItemSchema),\n reviewCount: z.number(),\n reviewAverageValue: z.number(),\n});\n\nexport const reviewsIoProductReviewAggregateLoaderOutputSchema = z.object({\n reviewCount: z.number(),\n reviewAverageValue: z.number(),\n});\n\n// ---------------------------------------------------------------------------\n// Loox loader outputs (mirror of\n// schemas/agentTools/customIntegrations/loaders/loox.ts)\n// ---------------------------------------------------------------------------\n\nexport const looxReviewMediaSchema = z.object({\n type: z.string().nullable(),\n url: z.string(),\n thumbnailUrl: z.string().nullable(),\n});\n\nexport const looxReviewLoaderItemSchema = z.object({\n id: z.string(),\n rating: z.number().nullable(),\n body: z.string().nullable(),\n createdAt: z.string().nullable(),\n verified: z.boolean(),\n reviewerName: z.string().nullable(),\n productName: z.string().nullable(),\n media: z.array(looxReviewMediaSchema),\n});\n\nexport const looxProductReviewsLoaderOutputSchema = z.object({\n reviews: z.array(looxReviewLoaderItemSchema),\n});\n\nexport const looxProductReviewAggregateLoaderOutputSchema = z.object({\n totalReviews: z.number(),\n averageRating: z.number(),\n ratingDistribution: z.record(z.string(), z.number()),\n});\n\n// ---------------------------------------------------------------------------\n// Judge.me loader outputs (mirror of\n// schemas/agentTools/customIntegrations/loaders/judgeme.ts)\n// ---------------------------------------------------------------------------\n\nexport const judgemeReviewLoaderItemSchema = z.object({\n id: z.string(),\n title: z.string().nullable(),\n content: z.string().nullable(),\n score: z.number().nullable(),\n createdAt: z.string().nullable(),\n verifiedBuyer: z.boolean(),\n reviewerName: z.string().nullable(),\n});\n\nexport const judgemeProductReviewsLoaderOutputSchema = z.object({\n reviews: z.array(judgemeReviewLoaderItemSchema),\n});\n\nexport const judgemeProductReviewAggregateLoaderOutputSchema = z.object({\n averageScore: z.number(),\n totalReviews: z.number(),\n starDistribution: z.record(z.string(), z.number()),\n});\n\n// ---------------------------------------------------------------------------\n// Statsig loader outputs (mirror of\n// schemas/agentTools/customIntegrations/loaders/statsig.ts)\n// ---------------------------------------------------------------------------\n\nexport const statsigExperimentLoaderOutputSchema = z.object({\n experimentName: z.string(),\n groupName: z\n .string()\n .nullable()\n .describe(\"The assigned variant group name (e.g. Control, Test).\"),\n ruleId: z\n .string()\n .nullable()\n .describe(\"The Statsig rule ID that produced this assignment.\"),\n value: z\n .record(z.string(), z.unknown())\n .describe(\"The parameter values for the assigned group.\"),\n reason: z\n .string()\n .describe(\"The evaluation reason reported by Statsig (for debugging).\"),\n});\n\nexport type StatsigExperimentAssignment = z.infer<\n typeof statsigExperimentLoaderOutputSchema\n>;\n\n// ---------------------------------------------------------------------------\n// Contentful loader outputs (mirror of\n// schemas/agentTools/customIntegrations/loaders/contentful.ts)\n// ---------------------------------------------------------------------------\n\nexport const contentfulEntryObjectSchema = z\n .object({\n id: z.string(),\n contentTypeId: z.string().nullable(),\n createdAt: z.string().nullable(),\n updatedAt: z.string().nullable(),\n fields: z.record(z.string(), z.unknown()),\n })\n .describe(\"ContentfulEntryObject\");\n\nexport const contentfulAssetObjectSchema = z\n .object({\n id: z.string(),\n title: z.string().nullable(),\n description: z.string().nullable(),\n fileName: z.string().nullable(),\n contentType: z.string().nullable(),\n url: z.string().nullable(),\n width: z.number().nullable(),\n height: z.number().nullable(),\n })\n .describe(\"ContentfulAssetObject\");\n\nexport const contentfulIncludesSchema = z\n .object({\n entries: z.array(contentfulEntryObjectSchema),\n assets: z.array(contentfulAssetObjectSchema),\n })\n .describe(\"ContentfulIncludes\");\n\nexport const contentfulEntryLoaderOutputSchema = z\n .object({\n entry: contentfulEntryObjectSchema,\n includes: contentfulIncludesSchema,\n })\n .describe(\"ContentfulEntryLoaderOutput\");\n\nexport const contentfulEntriesLoaderOutputSchema = z\n .object({\n items: z.array(contentfulEntryObjectSchema),\n includes: contentfulIncludesSchema,\n total: z.number(),\n skip: z.number(),\n limit: z.number(),\n })\n .describe(\"ContentfulEntriesLoaderOutput\");\n\nexport type ContentfulEntryObject = z.infer<typeof contentfulEntryObjectSchema>;\nexport type ContentfulAssetObject = z.infer<typeof contentfulAssetObjectSchema>;\nexport type ContentfulEntryLoaderOutput = z.infer<\n typeof contentfulEntryLoaderOutputSchema\n>;\nexport type ContentfulEntriesLoaderOutput = z.infer<\n typeof contentfulEntriesLoaderOutputSchema\n>;\n\n// ---------------------------------------------------------------------------\n// Shopify metaobjects (mirror of\n// schemas/agentTools/customIntegrations/loaders/shopify.ts)\n// ---------------------------------------------------------------------------\n\nexport const storefrontMetaobjectSchema = z\n .object({\n id: z.string(),\n type: z.string(),\n handle: z.string(),\n updatedAt: z.string().nullable(),\n fields: z.array(\n z.object({\n key: z.string(),\n type: z.string(),\n value: z.string().nullable(),\n }),\n ),\n })\n .describe(\"StorefrontMetaobject\");\n\nexport const shopifyMetaobjectLoaderOutputSchema = storefrontMetaobjectSchema;\n\nexport const shopifyMetaobjectsLoaderOutputSchema = z\n .object({\n metaobjects: z.array(storefrontMetaobjectSchema),\n pageInfo: z.object({\n hasNextPage: z.boolean(),\n endCursor: z.string().nullable(),\n }),\n })\n .describe(\"ShopifyMetaobjectsLoaderOutput\");\n\nexport type StorefrontMetaobject = z.infer<typeof storefrontMetaobjectSchema>;\nexport type ShopifyMetaobjectLoaderOutput = z.infer<\n typeof shopifyMetaobjectLoaderOutputSchema\n>;\nexport type ShopifyMetaobjectsLoaderOutput = z.infer<\n typeof shopifyMetaobjectsLoaderOutputSchema\n>;\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/loox-review-aggregate-loader.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\n\nimport { Suspense } from \"react\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { z } from \"zod\";\n\nimport { invokeLoader } from \"./invoke-loader\";\nimport { LoaderErrorBoundary } from \"./loader-error-boundary\";\nimport { looxProductReviewAggregateLoaderOutputSchema } from \"./loader-schemas\";\n\ntype LooxReviewAggregateData = z.infer<\n typeof looxProductReviewAggregateLoaderOutputSchema\n>;\n\ntype LooxReviewAggregateLoaderProps = {\n loaderKey: string;\n shopifyProductId: string;\n children: (data: LooxReviewAggregateData) => ReactNode;\n fallback?: ReactNode;\n};\n\nfunction LooxReviewAggregateLoaderInner({\n loaderKey,\n shopifyProductId,\n children,\n}: Omit<LooxReviewAggregateLoaderProps, \"fallback\">) {\n const queryResult = useSuspenseQuery({\n queryKey: [loaderKey, { shopifyProductId }],\n queryFn: async () => {\n const loadedData = await invokeLoader({\n loaderKey,\n args: { shopifyProductId },\n });\n return looxProductReviewAggregateLoaderOutputSchema.parse(loadedData);\n },\n });\n\n return <>{children(queryResult.data)}</>;\n}\n\nexport function LooxReviewAggregateLoader({\n loaderKey,\n shopifyProductId,\n children,\n fallback,\n}: LooxReviewAggregateLoaderProps) {\n return (\n <LoaderErrorBoundary\n fallback={fallback ?? null}\n resetKey={`${loaderKey}:${shopifyProductId}`}\n >\n <Suspense fallback={fallback ?? null}>\n <LooxReviewAggregateLoaderInner\n loaderKey={loaderKey}\n shopifyProductId={shopifyProductId}\n >\n {children}\n </LooxReviewAggregateLoaderInner>\n </Suspense>\n </LoaderErrorBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": ";AAwCS;AApCT,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AAGjC,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AACpC,SAAS,oDAAoD;AAa7D,SAAS,+BAA+B;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACF,GAAqD;AACnD,QAAM,cAAc,iBAAiB;AAAA,IACnC,UAAU,CAAC,WAAW,EAAE,iBAAiB,CAAC;AAAA,IAC1C,SAAS,YAAY;AACnB,YAAM,aAAa,MAAM,aAAa;AAAA,QACpC;AAAA,QACA,MAAM,EAAE,iBAAiB;AAAA,MAC3B,CAAC;AACD,aAAO,6CAA6C,MAAM,UAAU;AAAA,IACtE;AAAA,EACF,CAAC;AAED,SAAO,gCAAG,mBAAS,YAAY,IAAI,GAAE;AACvC;AAEO,SAAS,0BAA0B;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAmC;AACjC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,YAAY;AAAA,MACtB,UAAU,GAAG,SAAS,IAAI,gBAAgB;AAAA,MAE1C,8BAAC,YAAS,UAAU,YAAY,MAC9B;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UAEC;AAAA;AAAA,MACH,GACF;AAAA;AAAA,EACF;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/loox-reviews-loader.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\n\nimport { Suspense } from \"react\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { z } from \"zod\";\n\nimport { invokeLoader } from \"./invoke-loader\";\nimport { LoaderErrorBoundary } from \"./loader-error-boundary\";\nimport { looxProductReviewsLoaderOutputSchema } from \"./loader-schemas\";\n\ntype LooxReviewsData = z.infer<typeof looxProductReviewsLoaderOutputSchema>;\n\ntype LooxReviewsLoaderProps = {\n loaderKey: string;\n shopifyProductId: string;\n children: (data: LooxReviewsData) => ReactNode;\n fallback?: ReactNode;\n};\n\nfunction LooxReviewsLoaderInner({\n loaderKey,\n shopifyProductId,\n children,\n}: Omit<LooxReviewsLoaderProps, \"fallback\">) {\n const queryResult = useSuspenseQuery({\n queryKey: [loaderKey, { shopifyProductId }],\n queryFn: async () => {\n const loadedData = await invokeLoader({\n loaderKey,\n args: { shopifyProductId },\n });\n return looxProductReviewsLoaderOutputSchema.parse(loadedData);\n },\n });\n\n return <>{children(queryResult.data)}</>;\n}\n\nexport function LooxReviewsLoader({\n loaderKey,\n shopifyProductId,\n children,\n fallback,\n}: LooxReviewsLoaderProps) {\n return (\n <LoaderErrorBoundary\n fallback={fallback ?? null}\n resetKey={`${loaderKey}:${shopifyProductId}`}\n >\n <Suspense fallback={fallback ?? null}>\n <LooxReviewsLoaderInner\n loaderKey={loaderKey}\n shopifyProductId={shopifyProductId}\n >\n {children}\n </LooxReviewsLoaderInner>\n </Suspense>\n </LoaderErrorBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": ";AAsCS;AAlCT,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AAGjC,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AACpC,SAAS,4CAA4C;AAWrD,SAAS,uBAAuB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AACF,GAA6C;AAC3C,QAAM,cAAc,iBAAiB;AAAA,IACnC,UAAU,CAAC,WAAW,EAAE,iBAAiB,CAAC;AAAA,IAC1C,SAAS,YAAY;AACnB,YAAM,aAAa,MAAM,aAAa;AAAA,QACpC;AAAA,QACA,MAAM,EAAE,iBAAiB;AAAA,MAC3B,CAAC;AACD,aAAO,qCAAqC,MAAM,UAAU;AAAA,IAC9D;AAAA,EACF,CAAC;AAED,SAAO,gCAAG,mBAAS,YAAY,IAAI,GAAE;AACvC;AAEO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA2B;AACzB,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,YAAY;AAAA,MACtB,UAAU,GAAG,SAAS,IAAI,gBAAgB;AAAA,MAE1C,8BAAC,YAAS,UAAU,YAAY,MAC9B;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UAEC;AAAA;AAAA,MACH,GACF;AAAA;AAAA,EACF;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/metaobject-loader.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport type { ShopifyMetaobjectLoaderOutput } from \"./loader-schemas\";\n\nimport { Suspense } from \"react\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\n\nimport { invokeLoader } from \"./invoke-loader\";\nimport { LoaderErrorBoundary } from \"./loader-error-boundary\";\nimport { shopifyMetaobjectLoaderOutputSchema } from \"./loader-schemas\";\n\ntype MetaobjectLoaderProps = {\n loaderKey: string;\n type?: string;\n handle?: string;\n id?: string;\n children: (data: ShopifyMetaobjectLoaderOutput) => ReactNode;\n fallback?: ReactNode;\n};\n\nfunction buildArgs({\n type,\n handle,\n id,\n}: Omit<MetaobjectLoaderProps, \"loaderKey\" | \"children\" | \"fallback\">) {\n return {\n ...(type !== undefined ? { type } : {}),\n ...(handle !== undefined ? { handle } : {}),\n ...(id !== undefined ? { id } : {}),\n };\n}\n\nfunction MetaobjectLoaderInner({\n loaderKey,\n args,\n children,\n}: {\n loaderKey: string;\n args: ReturnType<typeof buildArgs>;\n children: (data: ShopifyMetaobjectLoaderOutput) => ReactNode;\n}) {\n const { data } = useSuspenseQuery({\n queryKey: [loaderKey, args],\n queryFn: async () => {\n const loadedData = await invokeLoader({ loaderKey, args });\n return shopifyMetaobjectLoaderOutputSchema.parse(loadedData);\n },\n });\n\n return <>{children(data)}</>;\n}\n\nexport function MetaobjectLoader({\n loaderKey,\n type,\n handle,\n id,\n children,\n fallback,\n}: MetaobjectLoaderProps) {\n const args = buildArgs({ type, handle, id });\n\n return (\n <LoaderErrorBoundary\n fallback={fallback ?? null}\n resetKey={`${loaderKey}:${JSON.stringify(args)}`}\n >\n <Suspense fallback={fallback ?? null}>\n <MetaobjectLoaderInner loaderKey={loaderKey} args={args}>\n {children}\n </MetaobjectLoaderInner>\n </Suspense>\n </LoaderErrorBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": ";AAmDS;AA9CT,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AAEjC,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AACpC,SAAS,2CAA2C;AAWpD,SAAS,UAAU;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AACF,GAAuE;AACrE,SAAO;AAAA,IACL,GAAI,SAAS,SAAY,EAAE,KAAK,IAAI,CAAC;AAAA,IACrC,GAAI,WAAW,SAAY,EAAE,OAAO,IAAI,CAAC;AAAA,IACzC,GAAI,OAAO,SAAY,EAAE,GAAG,IAAI,CAAC;AAAA,EACnC;AACF;AAEA,SAAS,sBAAsB;AAAA,EAC7B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,EAAE,KAAK,IAAI,iBAAiB;AAAA,IAChC,UAAU,CAAC,WAAW,IAAI;AAAA,IAC1B,SAAS,YAAY;AACnB,YAAM,aAAa,MAAM,aAAa,EAAE,WAAW,KAAK,CAAC;AACzD,aAAO,oCAAoC,MAAM,UAAU;AAAA,IAC7D;AAAA,EACF,CAAC;AAED,SAAO,gCAAG,mBAAS,IAAI,GAAE;AAC3B;AAEO,SAAS,iBAAiB;AAAA,EAC/B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA0B;AACxB,QAAM,OAAO,UAAU,EAAE,MAAM,QAAQ,GAAG,CAAC;AAE3C,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,YAAY;AAAA,MACtB,UAAU,GAAG,SAAS,IAAI,KAAK,UAAU,IAAI,CAAC;AAAA,MAE9C,8BAAC,YAAS,UAAU,YAAY,MAC9B,8BAAC,yBAAsB,WAAsB,MAC1C,UACH,GACF;AAAA;AAAA,EACF;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/metaobjects-loader.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport type { ShopifyMetaobjectsLoaderOutput } from \"./loader-schemas\";\n\nimport { Suspense } from \"react\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\n\nimport { invokeLoader } from \"./invoke-loader\";\nimport { LoaderErrorBoundary } from \"./loader-error-boundary\";\nimport { shopifyMetaobjectsLoaderOutputSchema } from \"./loader-schemas\";\n\ntype MetaobjectsLoaderProps = {\n loaderKey: string;\n type: string;\n first?: number;\n after?: string;\n sortKey?: string;\n reverse?: boolean;\n children: (data: ShopifyMetaobjectsLoaderOutput) => ReactNode;\n fallback?: ReactNode;\n};\n\nfunction buildArgs({\n type,\n first,\n after,\n sortKey,\n reverse,\n}: Omit<MetaobjectsLoaderProps, \"loaderKey\" | \"children\" | \"fallback\">) {\n return {\n type,\n ...(first !== undefined ? { first } : {}),\n ...(after !== undefined ? { after } : {}),\n ...(sortKey !== undefined ? { sortKey } : {}),\n ...(reverse !== undefined ? { reverse } : {}),\n };\n}\n\nfunction MetaobjectsLoaderInner({\n loaderKey,\n args,\n children,\n}: {\n loaderKey: string;\n args: ReturnType<typeof buildArgs>;\n children: (data: ShopifyMetaobjectsLoaderOutput) => ReactNode;\n}) {\n const { data } = useSuspenseQuery({\n queryKey: [loaderKey, args],\n queryFn: async () => {\n const loadedData = await invokeLoader({ loaderKey, args });\n return shopifyMetaobjectsLoaderOutputSchema.parse(loadedData);\n },\n });\n\n return <>{children(data)}</>;\n}\n\nexport function MetaobjectsLoader({\n loaderKey,\n type,\n first,\n after,\n sortKey,\n reverse,\n children,\n fallback,\n}: MetaobjectsLoaderProps) {\n const args = buildArgs({ type, first, after, sortKey, reverse });\n\n return (\n <LoaderErrorBoundary\n fallback={fallback ?? null}\n resetKey={`${loaderKey}:${JSON.stringify(args)}`}\n >\n <Suspense fallback={fallback ?? null}>\n <MetaobjectsLoaderInner loaderKey={loaderKey} args={args}>\n {children}\n </MetaobjectsLoaderInner>\n </Suspense>\n </LoaderErrorBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": ";AAyDS;AApDT,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AAEjC,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AACpC,SAAS,4CAA4C;AAarD,SAAS,UAAU;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAwE;AACtE,SAAO;AAAA,IACL;AAAA,IACA,GAAI,UAAU,SAAY,EAAE,MAAM,IAAI,CAAC;AAAA,IACvC,GAAI,UAAU,SAAY,EAAE,MAAM,IAAI,CAAC;AAAA,IACvC,GAAI,YAAY,SAAY,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC3C,GAAI,YAAY,SAAY,EAAE,QAAQ,IAAI,CAAC;AAAA,EAC7C;AACF;AAEA,SAAS,uBAAuB;AAAA,EAC9B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,EAAE,KAAK,IAAI,iBAAiB;AAAA,IAChC,UAAU,CAAC,WAAW,IAAI;AAAA,IAC1B,SAAS,YAAY;AACnB,YAAM,aAAa,MAAM,aAAa,EAAE,WAAW,KAAK,CAAC;AACzD,aAAO,qCAAqC,MAAM,UAAU;AAAA,IAC9D;AAAA,EACF,CAAC;AAED,SAAO,gCAAG,mBAAS,IAAI,GAAE;AAC3B;AAEO,SAAS,kBAAkB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA2B;AACzB,QAAM,OAAO,UAAU,EAAE,MAAM,OAAO,OAAO,SAAS,QAAQ,CAAC;AAE/D,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,YAAY;AAAA,MACtB,UAAU,GAAG,SAAS,IAAI,KAAK,UAAU,IAAI,CAAC;AAAA,MAE9C,8BAAC,YAAS,UAAU,YAAY,MAC9B,8BAAC,0BAAuB,WAAsB,MAC3C,UACH,GACF;AAAA;AAAA,EACF;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/okendo-review-aggregate-loader.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\n\nimport { Suspense } from \"react\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { z } from \"zod\";\n\nimport { invokeLoader } from \"./invoke-loader\";\nimport { LoaderErrorBoundary } from \"./loader-error-boundary\";\n\nconst okendoReviewAggregateOutputSchema = z.object({\n reviewCount: z.number(),\n reviewAverageValue: z.number(),\n reviewStarDistribution: z.record(z.string(), z.number()),\n recommendedPercentage: z.number(),\n});\n\ntype OkendoReviewAggregateData = z.infer<\n typeof okendoReviewAggregateOutputSchema\n>;\n\ntype OkendoReviewAggregateLoaderProps = {\n loaderKey: string;\n shopifyProductId: string;\n children: (data: OkendoReviewAggregateData) => ReactNode;\n fallback?: ReactNode;\n};\n\nfunction OkendoReviewAggregateLoaderInner({\n loaderKey,\n shopifyProductId,\n children,\n}: Omit<OkendoReviewAggregateLoaderProps, \"fallback\">) {\n const queryResult = useSuspenseQuery({\n queryKey: [loaderKey, { shopifyProductId }],\n queryFn: async () => {\n const loadedData = await invokeLoader({\n loaderKey,\n args: { shopifyProductId },\n });\n return okendoReviewAggregateOutputSchema.parse(loadedData);\n },\n });\n\n return <>{children(queryResult.data)}</>;\n}\n\nexport function OkendoReviewAggregateLoader({\n loaderKey,\n shopifyProductId,\n children,\n fallback,\n}: OkendoReviewAggregateLoaderProps) {\n return (\n <LoaderErrorBoundary\n fallback={fallback ?? null}\n resetKey={`${loaderKey}:${shopifyProductId}`}\n >\n <Suspense fallback={fallback ?? null}>\n <OkendoReviewAggregateLoaderInner\n loaderKey={loaderKey}\n shopifyProductId={shopifyProductId}\n >\n {children}\n </OkendoReviewAggregateLoaderInner>\n </Suspense>\n </LoaderErrorBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": ";AA8CS;AA1CT,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AACjC,SAAS,SAAS;AAElB,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AAEpC,MAAM,oCAAoC,EAAE,OAAO;AAAA,EACjD,aAAa,EAAE,OAAO;AAAA,EACtB,oBAAoB,EAAE,OAAO;AAAA,EAC7B,wBAAwB,EAAE,OAAO,EAAE,OAAO,GAAG,EAAE,OAAO,CAAC;AAAA,EACvD,uBAAuB,EAAE,OAAO;AAClC,CAAC;AAaD,SAAS,iCAAiC;AAAA,EACxC;AAAA,EACA;AAAA,EACA;AACF,GAAuD;AACrD,QAAM,cAAc,iBAAiB;AAAA,IACnC,UAAU,CAAC,WAAW,EAAE,iBAAiB,CAAC;AAAA,IAC1C,SAAS,YAAY;AACnB,YAAM,aAAa,MAAM,aAAa;AAAA,QACpC;AAAA,QACA,MAAM,EAAE,iBAAiB;AAAA,MAC3B,CAAC;AACD,aAAO,kCAAkC,MAAM,UAAU;AAAA,IAC3D;AAAA,EACF,CAAC;AAED,SAAO,gCAAG,mBAAS,YAAY,IAAI,GAAE;AACvC;AAEO,SAAS,4BAA4B;AAAA,EAC1C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAqC;AACnC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,YAAY;AAAA,MACtB,UAAU,GAAG,SAAS,IAAI,gBAAgB;AAAA,MAE1C,8BAAC,YAAS,UAAU,YAAY,MAC9B;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UAEC;AAAA;AAAA,MACH,GACF;AAAA;AAAA,EACF;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/okendo-reviews-loader.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\n\nimport { Suspense } from \"react\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { z } from \"zod\";\n\nimport { invokeLoader } from \"./invoke-loader\";\nimport { LoaderErrorBoundary } from \"./loader-error-boundary\";\nimport { okendoReviewSchema } from \"./loader-schemas\";\n\nconst okendoReviewsOutputSchema = z.object({\n reviews: z.array(okendoReviewSchema),\n});\n\ntype OkendoReviewsData = z.infer<typeof okendoReviewsOutputSchema>;\n\ntype OkendoReviewsLoaderProps = {\n loaderKey: string;\n shopifyProductId: string;\n children: (data: OkendoReviewsData) => ReactNode;\n fallback?: ReactNode;\n};\n\nfunction OkendoReviewsLoaderInner({\n loaderKey,\n shopifyProductId,\n children,\n}: Omit<OkendoReviewsLoaderProps, \"fallback\">) {\n const queryResult = useSuspenseQuery({\n queryKey: [loaderKey, { shopifyProductId }],\n queryFn: async () => {\n const loadedData = await invokeLoader({\n loaderKey,\n args: { shopifyProductId },\n });\n return okendoReviewsOutputSchema.parse(loadedData);\n },\n });\n\n return <>{children(queryResult.data)}</>;\n}\n\nexport function OkendoReviewsLoader({\n loaderKey,\n shopifyProductId,\n children,\n fallback,\n}: OkendoReviewsLoaderProps) {\n return (\n <LoaderErrorBoundary\n fallback={fallback ?? null}\n resetKey={`${loaderKey}:${shopifyProductId}`}\n >\n <Suspense fallback={fallback ?? null}>\n <OkendoReviewsLoaderInner\n loaderKey={loaderKey}\n shopifyProductId={shopifyProductId}\n >\n {children}\n </OkendoReviewsLoaderInner>\n </Suspense>\n </LoaderErrorBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": ";AA0CS;AAtCT,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AACjC,SAAS,SAAS;AAElB,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AACpC,SAAS,0BAA0B;AAEnC,MAAM,4BAA4B,EAAE,OAAO;AAAA,EACzC,SAAS,EAAE,MAAM,kBAAkB;AACrC,CAAC;AAWD,SAAS,yBAAyB;AAAA,EAChC;AAAA,EACA;AAAA,EACA;AACF,GAA+C;AAC7C,QAAM,cAAc,iBAAiB;AAAA,IACnC,UAAU,CAAC,WAAW,EAAE,iBAAiB,CAAC;AAAA,IAC1C,SAAS,YAAY;AACnB,YAAM,aAAa,MAAM,aAAa;AAAA,QACpC;AAAA,QACA,MAAM,EAAE,iBAAiB;AAAA,MAC3B,CAAC;AACD,aAAO,0BAA0B,MAAM,UAAU;AAAA,IACnD;AAAA,EACF,CAAC;AAED,SAAO,gCAAG,mBAAS,YAAY,IAAI,GAAE;AACvC;AAEO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA6B;AAC3B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,YAAY;AAAA,MACtB,UAAU,GAAG,SAAS,IAAI,gBAAgB;AAAA,MAE1C,8BAAC,YAAS,UAAU,YAAY,MAC9B;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UAEC;AAAA;AAAA,MACH,GACF;AAAA;AAAA,EACF;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/prefetch-loaders.tsx"],
|
|
4
|
-
"sourcesContent": ["import {\n dehydrate,\n HydrationBoundary,\n QueryClient,\n} from \"@tanstack/react-query\";\n\nimport { invokeLoaderServer } from \"./invoke-loader-server\";\n\ntype PrefetchLoaderConfig = {\n loaderKey: string;\n args: Record<string, unknown>;\n /** How long the server-side cache entry is fresh. Defaults to 60s. Use `false` for indefinite (tag-based invalidation only). */\n revalidateSeconds?: number | false;\n};\n\n/**\n * Server component that prefetches one or more loader queries and seeds the\n * React Query cache via HydrationBoundary. Client components that use\n * useSuspenseQuery with the same queryKey will get the data immediately\n * in the initial HTML \u2014 no loading state on first paint.\n *\n * The queryKey is derived internally as `[loaderKey, args]`, matching the\n * convention used by all loader components.\n *\n * Usage:\n * import { DATA_LOADER_KEYS } from \"@replohq/sdk/loaders/loader-keys\";\n *\n * <PrefetchedLoaders\n * queries={[\n * {\n * loaderKey: DATA_LOADER_KEYS.SHOPIFY_PRODUCT,\n * args: { productId: \"gid://shopify/Product/123\" },\n * },\n * ]}\n * >\n * <ProductPreview productId=\"gid://shopify/Product/123\" />\n * </PrefetchedLoaders>\n */\nexport async function PrefetchedLoaders({\n queries,\n children,\n}: React.PropsWithChildren<{\n queries: PrefetchLoaderConfig[];\n}>) {\n const queryClient = new QueryClient({\n defaultOptions: {\n queries: { staleTime: 60 * 1000 },\n },\n });\n\n await Promise.all(\n queries.map((query) => {\n return queryClient.prefetchQuery({\n queryKey: [query.loaderKey, query.args],\n queryFn: () => {\n return invokeLoaderServer({\n loaderKey: query.loaderKey,\n args: query.args,\n revalidateSeconds: query.revalidateSeconds,\n });\n },\n });\n }),\n );\n\n return (\n <HydrationBoundary\n state={dehydrate(queryClient, {\n shouldDehydrateQuery: (query) => {\n return (\n query.state.status === \"success\" || query.state.status === \"pending\"\n );\n },\n })}\n >\n {children}\n </HydrationBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": "AAkEI;AAlEJ;AAAA,EACE;AAAA,EACA;AAAA,EACA;AAAA,OACK;AAEP,SAAS,0BAA0B;AAgCnC,eAAsB,kBAAkB;AAAA,EACtC;AAAA,EACA;AACF,GAEI;AACF,QAAM,cAAc,IAAI,YAAY;AAAA,IAClC,gBAAgB;AAAA,MACd,SAAS,EAAE,WAAW,KAAK,IAAK;AAAA,IAClC;AAAA,EACF,CAAC;AAED,QAAM,QAAQ;AAAA,IACZ,QAAQ,IAAI,CAAC,UAAU;AACrB,aAAO,YAAY,cAAc;AAAA,QAC/B,UAAU,CAAC,MAAM,WAAW,MAAM,IAAI;AAAA,QACtC,SAAS,MAAM;AACb,iBAAO,mBAAmB;AAAA,YACxB,WAAW,MAAM;AAAA,YACjB,MAAM,MAAM;AAAA,YACZ,mBAAmB,MAAM;AAAA,UAC3B,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAEA,SACE;AAAA,IAAC;AAAA;AAAA,MACC,OAAO,UAAU,aAAa;AAAA,QAC5B,sBAAsB,CAAC,UAAU;AAC/B,iBACE,MAAM,MAAM,WAAW,aAAa,MAAM,MAAM,WAAW;AAAA,QAE/D;AAAA,MACF,CAAC;AAAA,MAEA;AAAA;AAAA,EACH;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/preview-placeholder.ts"],
|
|
4
|
-
"sourcesContent": ["/**\n * Sample-data substitution for previewing dynamic routes inside the editor.\n *\n * When the editor previews an unfilled Next.js dynamic route (the literal\n * `/products/[handle]` URL), the page receives the bracket token itself as its\n * param, every lookup misses, and the preview 404s. Loader invocations detect\n * that exact case \u2014 editor iframe + a bracket-token arg \u2014 and substitute a\n * type-correct sample fixture so the page renders its real layout with sample\n * data. A `replo:preview:placeholder-render` message tells the embedding\n * editor the preview is showing sample data (mirrors `replo:preview:status`\n * from NextErrorReporter).\n *\n * Substitution is gated to editor iframes only: production traffic to a\n * bracket URL still misses lookups and 404s, so this can never soft-404 a\n * published site.\n */\nimport type {\n FullCollection,\n FullProduct,\n PaginatedProducts,\n} from \"./loader-schemas\";\n\nimport { useEffect } from \"react\";\n\nimport { z } from \"zod\";\n\nimport { DATA_LOADER_KEYS } from \"./loader-keys\";\n\nconst PLACEHOLDER_RENDER_MESSAGE_TYPE = \"replo:preview:placeholder-render\";\n\n// Matches a literal Next.js dynamic segment passed through as a param value:\n// `[handle]`, `[...slug]`, or `[[...slug]]`.\nconst UNFILLED_ROUTE_PARAM_RE = /^\\[{1,2}(?:\\.\\.\\.)?[^\\]]+\\]{1,2}$/;\n\n// Every fixture id carries this prefix so substituted data is recognizable\n// after it round-trips through SSR + React Query hydration (where the client\n// never re-invokes the loader and can't observe the substitution directly).\nconst SAMPLE_ID_PREFIX = \"replo-sample-\";\n\n// The sample option matrix. Sizes carry the price so switching variants\n// visibly updates pricing; colors carry swatches so pickers render them.\nconst SAMPLE_SIZES = [\n { value: \"Small\", priceAmount: \"42.00\" },\n { value: \"Medium\", priceAmount: \"46.00\" },\n { value: \"Large\", priceAmount: \"50.00\" },\n];\nconst SAMPLE_COLORS = [\n { value: \"Slate\", swatchColor: \"#64748b\" },\n { value: \"Sand\", swatchColor: \"#d6bc8a\" },\n];\n// One sold-out combination so disabled buttons / \"Sold out\" states render.\nconst SOLD_OUT_COMBINATION = { size: \"Large\", color: \"Sand\" };\n\nfunction toSampleSlug(value: string): string {\n return value.toLowerCase().replace(/\\s+/g, \"-\");\n}\n\n// Generated as the full size x color cartesian product: agent-built pages\n// match every selected-options combination to a variant, and a combination\n// with no variant breaks their pickers mid-interaction.\nconst SAMPLE_VARIANTS: FullProduct[\"variants\"] = SAMPLE_SIZES.flatMap(\n (size) => {\n return SAMPLE_COLORS.map((color) => {\n const isSoldOut =\n size.value === SOLD_OUT_COMBINATION.size &&\n color.value === SOLD_OUT_COMBINATION.color;\n const slug = `${toSampleSlug(size.value)}-${toSampleSlug(color.value)}`;\n return {\n id: `replo-sample-variant-${slug}`,\n title: `${size.value} / ${color.value}`,\n availableForSale: !isSoldOut,\n sku: `REPLO-SAMPLE-${slug.toUpperCase()}`,\n selectedOptions: [\n { name: \"Size\", value: size.value },\n { name: \"Color\", value: color.value },\n ],\n image: null,\n price: { amount: size.priceAmount, currencyCode: \"USD\" },\n // Every variant is \"on sale\" so strikethrough pricing renders.\n compareAtPrice: { amount: \"56.00\", currencyCode: \"USD\" },\n sellingPlanIds: [],\n };\n });\n },\n);\n\nconst SAMPLE_PRODUCT: FullProduct = {\n id: \"replo-sample-product\",\n handle: \"sample-product\",\n title: \"Sample product\",\n description:\n \"This is sample product data for previewing this page. Open the page from a real product link to see live details. Sizes, colors, sale pricing, and a sold-out variant are included so every part of the layout has something to show.\",\n descriptionHtml:\n \"<p>This is sample product data for previewing this page. Open the page from a real product link to see live details.</p><p>The sample includes:</p><ul><li>Three sizes and two colors to try the option pickers</li><li>Sale pricing with a compare-at price</li><li>One sold-out combination (Large / Sand)</li></ul>\",\n availableForSale: true,\n featuredImage: null,\n // `id` is optional in the schema but always present on real data, and\n // generated pages key option lists on it \u2014 omit it and previews log React\n // \"missing key\" console errors, which the dev overlay counts as page errors.\n options: [\n {\n id: \"replo-sample-option-size\",\n name: \"Size\",\n values: SAMPLE_SIZES.map((size) => size.value),\n optionValues: SAMPLE_SIZES.map((size) => ({\n id: `replo-sample-option-value-${toSampleSlug(size.value)}`,\n value: size.value,\n swatch: null,\n })),\n },\n {\n id: \"replo-sample-option-color\",\n name: \"Color\",\n values: SAMPLE_COLORS.map((color) => color.value),\n optionValues: SAMPLE_COLORS.map((color) => ({\n id: `replo-sample-option-value-${toSampleSlug(color.value)}`,\n value: color.value,\n swatch: { color: color.swatchColor, imageUrl: null },\n })),\n },\n ],\n variants: SAMPLE_VARIANTS,\n images: [],\n media: [],\n vendor: \"Sample Supply Co.\",\n productType: \"Sample\",\n tags: [\"sample-data\", \"new-arrival\", \"bestseller\"],\n sellingPlanGroups: [],\n metafields: [],\n};\n\nconst SAMPLE_COLLECTION: FullCollection = {\n id: \"replo-sample-collection\",\n handle: \"sample-collection\",\n title: \"Sample collection\",\n descriptionHtml:\n \"<p>This is sample collection data for previewing this page.</p>\",\n image: null,\n};\n\n// Three grid cards, each exercising a distinct card state: a price range, a\n// compare-at sale (grids gate strikethroughs on `amount > 0`, per the loader\n// contract where \"0.0\" means no discount), and a sold-out product.\nconst SAMPLE_GRID_CARDS = [\n {\n slug: \"range\",\n title: \"Sample product with a price range\",\n minAmount: \"42.00\",\n maxAmount: \"50.00\",\n compareAtAmount: \"0.0\",\n availableForSale: true,\n },\n {\n slug: \"sale\",\n title: \"Sample product on sale\",\n minAmount: \"42.00\",\n maxAmount: \"42.00\",\n compareAtAmount: \"56.00\",\n availableForSale: true,\n },\n {\n slug: \"sold-out\",\n title: \"Sample product that sold out\",\n minAmount: \"46.00\",\n maxAmount: \"46.00\",\n compareAtAmount: \"0.0\",\n availableForSale: false,\n },\n];\n\nconst SAMPLE_PAGINATED_PRODUCTS: PaginatedProducts = {\n products: SAMPLE_GRID_CARDS.map((card) => ({\n id: `replo-sample-product-${card.slug}`,\n handle: `sample-product-${card.slug}`,\n title: card.title,\n availableForSale: card.availableForSale,\n featuredImage: null,\n options: [\n {\n id: `replo-sample-option-color-${card.slug}`,\n name: \"Color\",\n values: SAMPLE_COLORS.map((color) => color.value),\n optionValues: SAMPLE_COLORS.map((color) => ({\n id: `replo-sample-option-value-${card.slug}-${toSampleSlug(color.value)}`,\n value: color.value,\n swatch: { color: color.swatchColor, imageUrl: null },\n })),\n },\n ],\n variants: SAMPLE_COLORS.map((color) => ({\n id: `replo-sample-variant-${card.slug}-${toSampleSlug(color.value)}`,\n title: color.value,\n availableForSale: card.availableForSale,\n sku: `REPLO-SAMPLE-${card.slug.toUpperCase()}-${toSampleSlug(color.value).toUpperCase()}`,\n selectedOptions: [{ name: \"Color\", value: color.value }],\n image: null,\n price: { amount: card.minAmount, currencyCode: \"USD\" },\n compareAtPrice:\n Number(card.compareAtAmount) > 0\n ? { amount: card.compareAtAmount, currencyCode: \"USD\" }\n : null,\n })),\n minPrice: { amount: card.minAmount, currencyCode: \"USD\" },\n maxPrice: { amount: card.maxAmount, currencyCode: \"USD\" },\n compareAtMinPrice: { amount: card.compareAtAmount, currencyCode: \"USD\" },\n compareAtMaxPrice: { amount: card.compareAtAmount, currencyCode: \"USD\" },\n })),\n pageInfo: { hasNextPage: false, endCursor: null },\n};\n\nconst PLACEHOLDER_DATA_BY_LOADER_KEY: Record<string, unknown> = {\n [DATA_LOADER_KEYS.SHOPIFY_PRODUCT]: SAMPLE_PRODUCT,\n [DATA_LOADER_KEYS.REPLO_PRODUCT]: SAMPLE_PRODUCT,\n [DATA_LOADER_KEYS.SHOPIFY_COLLECTION]: SAMPLE_COLLECTION,\n [DATA_LOADER_KEYS.SHOPIFY_COLLECTION_PRODUCTS]: SAMPLE_PAGINATED_PRODUCTS,\n};\n\nfunction isUnfilledRouteParamValue(value: string): boolean {\n if (UNFILLED_ROUTE_PARAM_RE.test(value)) {\n return true;\n }\n // Next.js hands params over URL-encoded, so the literal `[handle]` segment\n // arrives as `%5Bhandle%5D`.\n try {\n return UNFILLED_ROUTE_PARAM_RE.test(decodeURIComponent(value));\n } catch {\n return false;\n }\n}\n\nexport function hasUnfilledRouteParam(args: Record<string, unknown>): boolean {\n return Object.values(args).some(\n (value) => typeof value === \"string\" && isUnfilledRouteParamValue(value),\n );\n}\n\n/**\n * Sample data for a loader invoked with an unfilled dynamic-route param, or\n * null when the invocation should proceed normally.\n *\n * On the server, substitution happens only on dev servers (`next dev` \u2014 how\n * every sandbox preview runs); production builds keep fetching so bracket\n * URLs keep their real miss/404 semantics. Substituting during SSR keeps the\n * doomed fetch from erroring the dev overlay mid-stream. In the browser,\n * substitution happens only inside an editor iframe.\n */\nexport function resolvePreviewPlaceholderData({\n loaderKey,\n args,\n}: {\n loaderKey: string;\n args: Record<string, unknown>;\n}): unknown {\n if (!hasUnfilledRouteParam(args)) {\n return null;\n }\n const placeholderData = PLACEHOLDER_DATA_BY_LOADER_KEY[loaderKey];\n if (placeholderData === undefined) {\n return null;\n }\n if (typeof window === \"undefined\") {\n return process.env.NODE_ENV === \"development\" ? placeholderData : null;\n }\n return window.parent === window ? null : placeholderData;\n}\n\nconst placeholderIdSchema = z.object({ id: z.string() });\nconst placeholderProductsSchema = z.object({\n products: z.array(z.object({ id: z.string() })).min(1),\n});\n\n/** Whether loader output is one of this module's sample fixtures. */\nexport function isPreviewPlaceholderData(data: unknown): boolean {\n const withId = placeholderIdSchema.safeParse(data);\n if (withId.success) {\n return withId.data.id.startsWith(SAMPLE_ID_PREFIX);\n }\n const withProducts = placeholderProductsSchema.safeParse(data);\n return (\n withProducts.success &&\n (withProducts.data.products[0]?.id.startsWith(SAMPLE_ID_PREFIX) ?? false)\n );\n}\n\n/**\n * Notify the embedding editor when a loader component rendered sample data.\n * The single reporting path: inspecting rendered data (rather than hooking\n * loader invocation) covers client fetches and SSR-hydrated data alike \u2014\n * hydration never re-invokes the loader on the client. Receivers treat the\n * message as idempotent, so no dedupe is needed.\n */\nexport function useReportPreviewPlaceholderRender(data: unknown) {\n // eslint-disable-next-line replo/no-use-effect -- Posts to the embedding editor window, an external system.\n useEffect(() => {\n if (window.parent !== window && isPreviewPlaceholderData(data)) {\n window.parent.postMessage(\n {\n type: PLACEHOLDER_RENDER_MESSAGE_TYPE,\n route: window.location.pathname,\n },\n \"*\",\n );\n }\n }, [data]);\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/product-loader-args.ts"],
|
|
4
|
-
"sourcesContent": ["export type MetafieldIdentifier = {\n namespace: string;\n key: string;\n};\n\nexport type ProductLoaderArgs = {\n handle?: string;\n productId?: string;\n productMetafieldIdentifiers?: MetafieldIdentifier[];\n variantMetafieldIdentifiers?: MetafieldIdentifier[];\n language?: string;\n country?: string;\n};\n\n/**\n * Builds the single object used as BOTH the React Query key and the loader\n * payload. They must stay identical: `PrefetchedLoaders` seeds the cache under\n * `[loaderKey, args]`, so an arg sent to the loader but missing from the key\n * (or vice versa) silently misses the prefetch \u2014 the client refetches without\n * it and the page renders incomplete data instead of erroring.\n *\n * Keys left `undefined` drop out of React Query's key hash, so omitting a field\n * here hashes the same as a prefetch that never passed it.\n */\nexport function buildProductLoaderArgs({\n handle,\n productId,\n productMetafieldIdentifiers,\n variantMetafieldIdentifiers,\n language,\n country,\n}: ProductLoaderArgs): ProductLoaderArgs {\n return {\n handle,\n productId,\n productMetafieldIdentifiers,\n variantMetafieldIdentifiers,\n language,\n country,\n };\n}\n"],
|
|
5
|
-
"mappings": "AAwBO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAyC;AACvC,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/product-loader.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport type { FullProduct } from \"./loader-schemas\";\nimport type { ProductLoaderArgs } from \"./product-loader-args\";\n\nimport { Suspense } from \"react\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\n\nimport { invokeLoader } from \"./invoke-loader\";\nimport { LoaderErrorBoundary } from \"./loader-error-boundary\";\nimport { fullProductSchema } from \"./loader-schemas\";\nimport { useReportPreviewPlaceholderRender } from \"./preview-placeholder\";\nimport { buildProductLoaderArgs } from \"./product-loader-args\";\n\ntype ProductLoaderProps = ProductLoaderArgs & {\n loaderKey: string;\n children: (data: FullProduct) => ReactNode;\n fallback?: ReactNode;\n loadingFallback?: ReactNode;\n};\n\nfunction ProductLoaderInner({\n loaderKey,\n args,\n children,\n}: {\n loaderKey: string;\n args: ProductLoaderArgs;\n children: (data: FullProduct) => ReactNode;\n}) {\n const queryResult = useSuspenseQuery({\n queryKey: [loaderKey, args],\n queryFn: async () => {\n const loadedData = await invokeLoader({ loaderKey, args });\n return fullProductSchema.parse(loadedData);\n },\n });\n useReportPreviewPlaceholderRender(queryResult.data);\n\n return <>{children(queryResult.data)}</>;\n}\n\nexport function ProductLoader({\n loaderKey,\n handle,\n productId,\n productMetafieldIdentifiers,\n variantMetafieldIdentifiers,\n language,\n country,\n children,\n fallback,\n loadingFallback = fallback,\n}: ProductLoaderProps) {\n const args = buildProductLoaderArgs({\n handle,\n productId,\n productMetafieldIdentifiers,\n variantMetafieldIdentifiers,\n language,\n country,\n });\n\n return (\n <LoaderErrorBoundary\n fallback={fallback ?? null}\n resetKey={`${loaderKey}:${JSON.stringify(args)}`}\n >\n <Suspense fallback={loadingFallback ?? null}>\n <ProductLoaderInner loaderKey={loaderKey} args={args}>\n {children}\n </ProductLoaderInner>\n </Suspense>\n </LoaderErrorBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": ";AAyCS;AAnCT,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AAEjC,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AACpC,SAAS,yBAAyB;AAClC,SAAS,yCAAyC;AAClD,SAAS,8BAA8B;AASvC,SAAS,mBAAmB;AAAA,EAC1B;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,QAAM,cAAc,iBAAiB;AAAA,IACnC,UAAU,CAAC,WAAW,IAAI;AAAA,IAC1B,SAAS,YAAY;AACnB,YAAM,aAAa,MAAM,aAAa,EAAE,WAAW,KAAK,CAAC;AACzD,aAAO,kBAAkB,MAAM,UAAU;AAAA,IAC3C;AAAA,EACF,CAAC;AACD,oCAAkC,YAAY,IAAI;AAElD,SAAO,gCAAG,mBAAS,YAAY,IAAI,GAAE;AACvC;AAEO,SAAS,cAAc;AAAA,EAC5B;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,kBAAkB;AACpB,GAAuB;AACrB,QAAM,OAAO,uBAAuB;AAAA,IAClC;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AAED,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,YAAY;AAAA,MACtB,UAAU,GAAG,SAAS,IAAI,KAAK,UAAU,IAAI,CAAC;AAAA,MAE9C,8BAAC,YAAS,UAAU,mBAAmB,MACrC,8BAAC,sBAAmB,WAAsB,MACvC,UACH,GACF;AAAA;AAAA,EACF;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/rebuy-recommendations-loader.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\n\nimport { Suspense } from \"react\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { z } from \"zod\";\n\nimport { invokeLoader } from \"./invoke-loader\";\nimport { LoaderErrorBoundary } from \"./loader-error-boundary\";\nimport { productSchema } from \"./loader-schemas\";\n\nconst rebuyRecommendationsOutputSchema = z.object({\n products: z.array(productSchema),\n});\n\ntype RebuyRecommendationsData = z.infer<\n typeof rebuyRecommendationsOutputSchema\n>;\n\ntype RebuyRecommendationsLoaderProps = {\n loaderKey: string;\n shopifyProductIds: string;\n limit?: number;\n children: (data: RebuyRecommendationsData) => ReactNode;\n fallback?: ReactNode;\n};\n\nfunction RebuyRecommendationsLoaderInner({\n loaderKey,\n shopifyProductIds,\n limit,\n children,\n}: Omit<RebuyRecommendationsLoaderProps, \"fallback\">) {\n const queryResult = useSuspenseQuery({\n queryKey: [loaderKey, { shopifyProductIds, limit }],\n queryFn: async () => {\n const loadedData = await invokeLoader({\n loaderKey,\n args: { shopifyProductIds, limit },\n });\n return rebuyRecommendationsOutputSchema.parse(loadedData);\n },\n });\n\n return <>{children(queryResult.data)}</>;\n}\n\nexport function RebuyRecommendationsLoader({\n loaderKey,\n shopifyProductIds,\n limit,\n children,\n fallback,\n}: RebuyRecommendationsLoaderProps) {\n return (\n <LoaderErrorBoundary\n fallback={fallback ?? null}\n resetKey={`${loaderKey}:${shopifyProductIds}:${limit ?? \"\"}`}\n >\n <Suspense fallback={fallback ?? null}>\n <RebuyRecommendationsLoaderInner\n loaderKey={loaderKey}\n shopifyProductIds={shopifyProductIds}\n limit={limit}\n >\n {children}\n </RebuyRecommendationsLoaderInner>\n </Suspense>\n </LoaderErrorBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": ";AA8CS;AA1CT,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AACjC,SAAS,SAAS;AAElB,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AACpC,SAAS,qBAAqB;AAE9B,MAAM,mCAAmC,EAAE,OAAO;AAAA,EAChD,UAAU,EAAE,MAAM,aAAa;AACjC,CAAC;AAcD,SAAS,gCAAgC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAsD;AACpD,QAAM,cAAc,iBAAiB;AAAA,IACnC,UAAU,CAAC,WAAW,EAAE,mBAAmB,MAAM,CAAC;AAAA,IAClD,SAAS,YAAY;AACnB,YAAM,aAAa,MAAM,aAAa;AAAA,QACpC;AAAA,QACA,MAAM,EAAE,mBAAmB,MAAM;AAAA,MACnC,CAAC;AACD,aAAO,iCAAiC,MAAM,UAAU;AAAA,IAC1D;AAAA,EACF,CAAC;AAED,SAAO,gCAAG,mBAAS,YAAY,IAAI,GAAE;AACvC;AAEO,SAAS,2BAA2B;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAoC;AAClC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,YAAY;AAAA,MACtB,UAAU,GAAG,SAAS,IAAI,iBAAiB,IAAI,SAAS,EAAE;AAAA,MAE1D,8BAAC,YAAS,UAAU,YAAY,MAC9B;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UAEC;AAAA;AAAA,MACH,GACF;AAAA;AAAA,EACF;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/reviews-io-review-aggregate-loader.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\n\nimport { Suspense } from \"react\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { z } from \"zod\";\n\nimport { invokeLoader } from \"./invoke-loader\";\nimport { LoaderErrorBoundary } from \"./loader-error-boundary\";\nimport { reviewsIoProductReviewAggregateLoaderOutputSchema } from \"./loader-schemas\";\n\ntype ReviewsIoReviewAggregateData = z.infer<\n typeof reviewsIoProductReviewAggregateLoaderOutputSchema\n>;\n\ntype ReviewsIoReviewAggregateLoaderProps = {\n loaderKey: string;\n sku: string;\n children: (data: ReviewsIoReviewAggregateData) => ReactNode;\n fallback?: ReactNode;\n};\n\nfunction ReviewsIoReviewAggregateLoaderInner({\n loaderKey,\n sku,\n children,\n}: Omit<ReviewsIoReviewAggregateLoaderProps, \"fallback\">) {\n const args = { sku };\n const { data } = useSuspenseQuery({\n queryKey: [loaderKey, args],\n queryFn: async () => {\n const loadedData = await invokeLoader({ loaderKey, args });\n return reviewsIoProductReviewAggregateLoaderOutputSchema.parse(\n loadedData,\n );\n },\n });\n\n return <>{children(data)}</>;\n}\n\nexport function ReviewsIoReviewAggregateLoader({\n loaderKey,\n sku,\n children,\n fallback,\n}: ReviewsIoReviewAggregateLoaderProps) {\n return (\n <LoaderErrorBoundary\n fallback={fallback ?? null}\n resetKey={`${loaderKey}:${sku}`}\n >\n <Suspense fallback={fallback ?? null}>\n <ReviewsIoReviewAggregateLoaderInner loaderKey={loaderKey} sku={sku}>\n {children}\n </ReviewsIoReviewAggregateLoaderInner>\n </Suspense>\n </LoaderErrorBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": ";AAwCS;AApCT,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AAGjC,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AACpC,SAAS,yDAAyD;AAalE,SAAS,oCAAoC;AAAA,EAC3C;AAAA,EACA;AAAA,EACA;AACF,GAA0D;AACxD,QAAM,OAAO,EAAE,IAAI;AACnB,QAAM,EAAE,KAAK,IAAI,iBAAiB;AAAA,IAChC,UAAU,CAAC,WAAW,IAAI;AAAA,IAC1B,SAAS,YAAY;AACnB,YAAM,aAAa,MAAM,aAAa,EAAE,WAAW,KAAK,CAAC;AACzD,aAAO,kDAAkD;AAAA,QACvD;AAAA,MACF;AAAA,IACF;AAAA,EACF,CAAC;AAED,SAAO,gCAAG,mBAAS,IAAI,GAAE;AAC3B;AAEO,SAAS,+BAA+B;AAAA,EAC7C;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAwC;AACtC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,YAAY;AAAA,MACtB,UAAU,GAAG,SAAS,IAAI,GAAG;AAAA,MAE7B,8BAAC,YAAS,UAAU,YAAY,MAC9B,8BAAC,uCAAoC,WAAsB,KACxD,UACH,GACF;AAAA;AAAA,EACF;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/reviews-io-reviews-loader.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\n\nimport { Suspense } from \"react\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { z } from \"zod\";\n\nimport { invokeLoader } from \"./invoke-loader\";\nimport { LoaderErrorBoundary } from \"./loader-error-boundary\";\nimport { reviewsIoProductReviewsLoaderOutputSchema } from \"./loader-schemas\";\n\ntype ReviewsIoReviewsData = z.infer<\n typeof reviewsIoProductReviewsLoaderOutputSchema\n>;\n\ntype ReviewsIoReviewsLoaderProps = {\n loaderKey: string;\n sku: string;\n perPage?: number;\n page?: number;\n children: (data: ReviewsIoReviewsData) => ReactNode;\n fallback?: ReactNode;\n};\n\nfunction buildReviewsArgs({\n sku,\n perPage,\n page,\n}: {\n sku: string;\n perPage?: number;\n page?: number;\n}) {\n return {\n sku,\n ...(perPage !== undefined ? { perPage } : {}),\n ...(page !== undefined ? { page } : {}),\n };\n}\n\nfunction ReviewsIoReviewsLoaderInner({\n loaderKey,\n sku,\n perPage,\n page,\n children,\n}: Omit<ReviewsIoReviewsLoaderProps, \"fallback\">) {\n const args = buildReviewsArgs({ sku, perPage, page });\n const { data } = useSuspenseQuery({\n queryKey: [loaderKey, args],\n queryFn: async () => {\n const loadedData = await invokeLoader({ loaderKey, args });\n return reviewsIoProductReviewsLoaderOutputSchema.parse(loadedData);\n },\n });\n\n return <>{children(data)}</>;\n}\n\nexport function ReviewsIoReviewsLoader({\n loaderKey,\n sku,\n perPage,\n page,\n children,\n fallback,\n}: ReviewsIoReviewsLoaderProps) {\n return (\n <LoaderErrorBoundary\n fallback={fallback ?? null}\n resetKey={`${loaderKey}:${sku}:${perPage ?? \"\"}:${page ?? \"\"}`}\n >\n <Suspense fallback={fallback ?? null}>\n <ReviewsIoReviewsLoaderInner\n loaderKey={loaderKey}\n sku={sku}\n perPage={perPage}\n page={page}\n >\n {children}\n </ReviewsIoReviewsLoaderInner>\n </Suspense>\n </LoaderErrorBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": ";AA0DS;AAtDT,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AAGjC,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AACpC,SAAS,iDAAiD;AAe1D,SAAS,iBAAiB;AAAA,EACxB;AAAA,EACA;AAAA,EACA;AACF,GAIG;AACD,SAAO;AAAA,IACL;AAAA,IACA,GAAI,YAAY,SAAY,EAAE,QAAQ,IAAI,CAAC;AAAA,IAC3C,GAAI,SAAS,SAAY,EAAE,KAAK,IAAI,CAAC;AAAA,EACvC;AACF;AAEA,SAAS,4BAA4B;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAkD;AAChD,QAAM,OAAO,iBAAiB,EAAE,KAAK,SAAS,KAAK,CAAC;AACpD,QAAM,EAAE,KAAK,IAAI,iBAAiB;AAAA,IAChC,UAAU,CAAC,WAAW,IAAI;AAAA,IAC1B,SAAS,YAAY;AACnB,YAAM,aAAa,MAAM,aAAa,EAAE,WAAW,KAAK,CAAC;AACzD,aAAO,0CAA0C,MAAM,UAAU;AAAA,IACnE;AAAA,EACF,CAAC;AAED,SAAO,gCAAG,mBAAS,IAAI,GAAE;AAC3B;AAEO,SAAS,uBAAuB;AAAA,EACrC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAgC;AAC9B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,YAAY;AAAA,MACtB,UAAU,GAAG,SAAS,IAAI,GAAG,IAAI,WAAW,EAAE,IAAI,QAAQ,EAAE;AAAA,MAE5D,8BAAC,YAAS,UAAU,YAAY,MAC9B;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UAEC;AAAA;AAAA,MACH,GACF;AAAA;AAAA,EACF;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/smile-earning-rules-loader.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\n\nimport { Suspense } from \"react\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { z } from \"zod\";\n\nimport { invokeLoader } from \"./invoke-loader\";\nimport { LoaderErrorBoundary } from \"./loader-error-boundary\";\n\nconst smileEarningRuleSchema = z.object({\n id: z.number(),\n name: z.string(),\n pointsAwarded: z.number().nullable(),\n pointsAwardedType: z.string(),\n activityToken: z.string(),\n});\n\nconst smileEarningRulesOutputSchema = z.object({\n earningRules: z.array(smileEarningRuleSchema),\n});\n\nexport type SmileEarningRule = z.infer<typeof smileEarningRuleSchema>;\n\ntype SmileEarningRulesLoaderProps = {\n loaderKey: string;\n children: (data: { earningRules: SmileEarningRule[] }) => ReactNode;\n fallback?: ReactNode;\n};\n\nfunction SmileEarningRulesLoaderInner({\n loaderKey,\n children,\n}: Omit<SmileEarningRulesLoaderProps, \"fallback\">) {\n const queryResult = useSuspenseQuery({\n queryKey: [loaderKey, {}],\n queryFn: async () => {\n const loadedData = await invokeLoader({\n loaderKey,\n args: {},\n });\n return smileEarningRulesOutputSchema.parse(loadedData);\n },\n });\n\n return <>{children(queryResult.data)}</>;\n}\n\nexport function SmileEarningRulesLoader({\n loaderKey,\n children,\n fallback,\n}: SmileEarningRulesLoaderProps) {\n return (\n <LoaderErrorBoundary fallback={fallback ?? null} resetKey={loaderKey}>\n <Suspense fallback={fallback ?? null}>\n <SmileEarningRulesLoaderInner loaderKey={loaderKey}>\n {children}\n </SmileEarningRulesLoaderInner>\n </Suspense>\n </LoaderErrorBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": ";AA+CS;AA3CT,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AACjC,SAAS,SAAS;AAElB,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AAEpC,MAAM,yBAAyB,EAAE,OAAO;AAAA,EACtC,IAAI,EAAE,OAAO;AAAA,EACb,MAAM,EAAE,OAAO;AAAA,EACf,eAAe,EAAE,OAAO,EAAE,SAAS;AAAA,EACnC,mBAAmB,EAAE,OAAO;AAAA,EAC5B,eAAe,EAAE,OAAO;AAC1B,CAAC;AAED,MAAM,gCAAgC,EAAE,OAAO;AAAA,EAC7C,cAAc,EAAE,MAAM,sBAAsB;AAC9C,CAAC;AAUD,SAAS,6BAA6B;AAAA,EACpC;AAAA,EACA;AACF,GAAmD;AACjD,QAAM,cAAc,iBAAiB;AAAA,IACnC,UAAU,CAAC,WAAW,CAAC,CAAC;AAAA,IACxB,SAAS,YAAY;AACnB,YAAM,aAAa,MAAM,aAAa;AAAA,QACpC;AAAA,QACA,MAAM,CAAC;AAAA,MACT,CAAC;AACD,aAAO,8BAA8B,MAAM,UAAU;AAAA,IACvD;AAAA,EACF,CAAC;AAED,SAAO,gCAAG,mBAAS,YAAY,IAAI,GAAE;AACvC;AAEO,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AACF,GAAiC;AAC/B,SACE,oBAAC,uBAAoB,UAAU,YAAY,MAAM,UAAU,WACzD,8BAAC,YAAS,UAAU,YAAY,MAC9B,8BAAC,gCAA6B,WAC3B,UACH,GACF,GACF;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/smile-rewards-loader.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\n\nimport { Suspense } from \"react\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { z } from \"zod\";\n\nimport { invokeLoader } from \"./invoke-loader\";\nimport { LoaderErrorBoundary } from \"./loader-error-boundary\";\n\nconst smileRewardSchema = z.object({\n id: z.number(),\n name: z.string(),\n pointsCost: z.number(),\n rewardType: z.string(),\n discountValue: z.string().nullable(),\n});\n\nconst smileRewardsOutputSchema = z.object({\n rewards: z.array(smileRewardSchema),\n});\n\nexport type SmileReward = z.infer<typeof smileRewardSchema>;\n\ntype SmileRewardsLoaderProps = {\n loaderKey: string;\n children: (data: { rewards: SmileReward[] }) => ReactNode;\n fallback?: ReactNode;\n};\n\nfunction SmileRewardsLoaderInner({\n loaderKey,\n children,\n}: Omit<SmileRewardsLoaderProps, \"fallback\">) {\n const queryResult = useSuspenseQuery({\n queryKey: [loaderKey, {}],\n queryFn: async () => {\n const loadedData = await invokeLoader({\n loaderKey,\n args: {},\n });\n return smileRewardsOutputSchema.parse(loadedData);\n },\n });\n\n return <>{children(queryResult.data)}</>;\n}\n\nexport function SmileRewardsLoader({\n loaderKey,\n children,\n fallback,\n}: SmileRewardsLoaderProps) {\n return (\n <LoaderErrorBoundary fallback={fallback ?? null} resetKey={loaderKey}>\n <Suspense fallback={fallback ?? null}>\n <SmileRewardsLoaderInner loaderKey={loaderKey}>\n {children}\n </SmileRewardsLoaderInner>\n </Suspense>\n </LoaderErrorBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": ";AA+CS;AA3CT,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AACjC,SAAS,SAAS;AAElB,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AAEpC,MAAM,oBAAoB,EAAE,OAAO;AAAA,EACjC,IAAI,EAAE,OAAO;AAAA,EACb,MAAM,EAAE,OAAO;AAAA,EACf,YAAY,EAAE,OAAO;AAAA,EACrB,YAAY,EAAE,OAAO;AAAA,EACrB,eAAe,EAAE,OAAO,EAAE,SAAS;AACrC,CAAC;AAED,MAAM,2BAA2B,EAAE,OAAO;AAAA,EACxC,SAAS,EAAE,MAAM,iBAAiB;AACpC,CAAC;AAUD,SAAS,wBAAwB;AAAA,EAC/B;AAAA,EACA;AACF,GAA8C;AAC5C,QAAM,cAAc,iBAAiB;AAAA,IACnC,UAAU,CAAC,WAAW,CAAC,CAAC;AAAA,IACxB,SAAS,YAAY;AACnB,YAAM,aAAa,MAAM,aAAa;AAAA,QACpC;AAAA,QACA,MAAM,CAAC;AAAA,MACT,CAAC;AACD,aAAO,yBAAyB,MAAM,UAAU;AAAA,IAClD;AAAA,EACF,CAAC;AAED,SAAO,gCAAG,mBAAS,YAAY,IAAI,GAAE;AACvC;AAEO,SAAS,mBAAmB;AAAA,EACjC;AAAA,EACA;AAAA,EACA;AACF,GAA4B;AAC1B,SACE,oBAAC,uBAAoB,UAAU,YAAY,MAAM,UAAU,WACzD,8BAAC,YAAS,UAAU,YAAY,MAC9B,8BAAC,2BAAwB,WACtB,UACH,GACF,GACF;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/smile-vip-tiers-loader.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\n\nimport { Suspense } from \"react\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { z } from \"zod\";\n\nimport { invokeLoader } from \"./invoke-loader\";\nimport { LoaderErrorBoundary } from \"./loader-error-boundary\";\n\nconst smileVipTierSchema = z.object({\n id: z.number(),\n name: z.string(),\n minimumPointsRequired: z.number(),\n color: z.string().nullable(),\n});\n\nconst smileVipTiersOutputSchema = z.object({\n vipTiers: z.array(smileVipTierSchema),\n});\n\nexport type SmileVipTier = z.infer<typeof smileVipTierSchema>;\n\ntype SmileVipTiersLoaderProps = {\n loaderKey: string;\n children: (data: { vipTiers: SmileVipTier[] }) => ReactNode;\n fallback?: ReactNode;\n};\n\nfunction SmileVipTiersLoaderInner({\n loaderKey,\n children,\n}: Omit<SmileVipTiersLoaderProps, \"fallback\">) {\n const queryResult = useSuspenseQuery({\n queryKey: [loaderKey, {}],\n queryFn: async () => {\n const loadedData = await invokeLoader({\n loaderKey,\n args: {},\n });\n return smileVipTiersOutputSchema.parse(loadedData);\n },\n });\n\n return <>{children(queryResult.data)}</>;\n}\n\nexport function SmileVipTiersLoader({\n loaderKey,\n children,\n fallback,\n}: SmileVipTiersLoaderProps) {\n return (\n <LoaderErrorBoundary fallback={fallback ?? null} resetKey={loaderKey}>\n <Suspense fallback={fallback ?? null}>\n <SmileVipTiersLoaderInner loaderKey={loaderKey}>\n {children}\n </SmileVipTiersLoaderInner>\n </Suspense>\n </LoaderErrorBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": ";AA8CS;AA1CT,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AACjC,SAAS,SAAS;AAElB,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AAEpC,MAAM,qBAAqB,EAAE,OAAO;AAAA,EAClC,IAAI,EAAE,OAAO;AAAA,EACb,MAAM,EAAE,OAAO;AAAA,EACf,uBAAuB,EAAE,OAAO;AAAA,EAChC,OAAO,EAAE,OAAO,EAAE,SAAS;AAC7B,CAAC;AAED,MAAM,4BAA4B,EAAE,OAAO;AAAA,EACzC,UAAU,EAAE,MAAM,kBAAkB;AACtC,CAAC;AAUD,SAAS,yBAAyB;AAAA,EAChC;AAAA,EACA;AACF,GAA+C;AAC7C,QAAM,cAAc,iBAAiB;AAAA,IACnC,UAAU,CAAC,WAAW,CAAC,CAAC;AAAA,IACxB,SAAS,YAAY;AACnB,YAAM,aAAa,MAAM,aAAa;AAAA,QACpC;AAAA,QACA,MAAM,CAAC;AAAA,MACT,CAAC;AACD,aAAO,0BAA0B,MAAM,UAAU;AAAA,IACnD;AAAA,EACF,CAAC;AAED,SAAO,gCAAG,mBAAS,YAAY,IAAI,GAAE;AACvC;AAEO,SAAS,oBAAoB;AAAA,EAClC;AAAA,EACA;AAAA,EACA;AACF,GAA6B;AAC3B,SACE,oBAAC,uBAAoB,UAAU,YAAY,MAAM,UAAU,WACzD,8BAAC,YAAS,UAAU,YAAY,MAC9B,8BAAC,4BAAyB,WACvB,UACH,GACF,GACF;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/statsig-experiment-loader.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\nimport type { StatsigExperimentAssignment } from \"./loader-schemas\";\n\nimport { Suspense } from \"react\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\n\nimport { invokeLoader } from \"./invoke-loader\";\nimport { LoaderErrorBoundary } from \"./loader-error-boundary\";\nimport { statsigExperimentLoaderOutputSchema } from \"./loader-schemas\";\n\ntype StatsigExperimentLoaderProps = {\n loaderKey: string;\n experimentName: string;\n /**\n * Durable per-visitor identifier. Read it from the `statsig_stable_id` cookie\n * in the page's server component and pass the same value to both\n * `PrefetchedLoaders` and this component so the SSR-prefetched assignment\n * hydrates without a refetch and stays consistent across renders.\n */\n stableId: string;\n userId?: string;\n environmentTier?: string;\n customAttributes?: Record<string, string>;\n children: (assignment: StatsigExperimentAssignment) => ReactNode;\n fallback?: ReactNode;\n};\n\nfunction buildArgs({\n experimentName,\n stableId,\n userId,\n environmentTier,\n customAttributes,\n}: Omit<StatsigExperimentLoaderProps, \"loaderKey\" | \"children\" | \"fallback\">) {\n return {\n experimentName,\n stableId,\n ...(userId !== undefined ? { userId } : {}),\n ...(environmentTier !== undefined ? { environmentTier } : {}),\n ...(customAttributes !== undefined ? { customAttributes } : {}),\n };\n}\n\nfunction StatsigExperimentLoaderInner({\n loaderKey,\n experimentName,\n stableId,\n userId,\n environmentTier,\n customAttributes,\n children,\n}: Omit<StatsigExperimentLoaderProps, \"fallback\">) {\n const args = buildArgs({\n experimentName,\n stableId,\n userId,\n environmentTier,\n customAttributes,\n });\n const { data } = useSuspenseQuery({\n queryKey: [loaderKey, args],\n queryFn: async () => {\n const loadedData = await invokeLoader({ loaderKey, args });\n return statsigExperimentLoaderOutputSchema.parse(loadedData);\n },\n });\n\n return <>{children(data)}</>;\n}\n\nexport function StatsigExperimentLoader({\n loaderKey,\n experimentName,\n stableId,\n userId,\n environmentTier,\n customAttributes,\n children,\n fallback,\n}: StatsigExperimentLoaderProps) {\n return (\n <LoaderErrorBoundary\n fallback={fallback ?? null}\n resetKey={`${loaderKey}:${experimentName}:${stableId}`}\n >\n <Suspense fallback={fallback ?? null}>\n <StatsigExperimentLoaderInner\n loaderKey={loaderKey}\n experimentName={experimentName}\n stableId={stableId}\n userId={userId}\n environmentTier={environmentTier}\n customAttributes={customAttributes}\n >\n {children}\n </StatsigExperimentLoaderInner>\n </Suspense>\n </LoaderErrorBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": ";AAsES;AAjET,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AAEjC,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AACpC,SAAS,2CAA2C;AAmBpD,SAAS,UAAU;AAAA,EACjB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAA8E;AAC5E,SAAO;AAAA,IACL;AAAA,IACA;AAAA,IACA,GAAI,WAAW,SAAY,EAAE,OAAO,IAAI,CAAC;AAAA,IACzC,GAAI,oBAAoB,SAAY,EAAE,gBAAgB,IAAI,CAAC;AAAA,IAC3D,GAAI,qBAAqB,SAAY,EAAE,iBAAiB,IAAI,CAAC;AAAA,EAC/D;AACF;AAEA,SAAS,6BAA6B;AAAA,EACpC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAmD;AACjD,QAAM,OAAO,UAAU;AAAA,IACrB;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,IACA;AAAA,EACF,CAAC;AACD,QAAM,EAAE,KAAK,IAAI,iBAAiB;AAAA,IAChC,UAAU,CAAC,WAAW,IAAI;AAAA,IAC1B,SAAS,YAAY;AACnB,YAAM,aAAa,MAAM,aAAa,EAAE,WAAW,KAAK,CAAC;AACzD,aAAO,oCAAoC,MAAM,UAAU;AAAA,IAC7D;AAAA,EACF,CAAC;AAED,SAAO,gCAAG,mBAAS,IAAI,GAAE;AAC3B;AAEO,SAAS,wBAAwB;AAAA,EACtC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAiC;AAC/B,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,YAAY;AAAA,MACtB,UAAU,GAAG,SAAS,IAAI,cAAc,IAAI,QAAQ;AAAA,MAEpD,8BAAC,YAAS,UAAU,YAAY,MAC9B;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UACA;AAAA,UAEC;AAAA;AAAA,MACH,GACF;AAAA;AAAA,EACF;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../../loaders/yotpo-review-aggregate-loader.tsx"],
|
|
4
|
-
"sourcesContent": ["\"use client\";\n\nimport type { ReactNode } from \"react\";\n\nimport { Suspense } from \"react\";\n\nimport { useSuspenseQuery } from \"@tanstack/react-query\";\nimport { z } from \"zod\";\n\nimport { invokeLoader } from \"./invoke-loader\";\nimport { LoaderErrorBoundary } from \"./loader-error-boundary\";\nimport { yotpoProductReviewAggregateLoaderOutputSchema } from \"./loader-schemas\";\n\ntype YotpoReviewAggregateData = z.infer<\n typeof yotpoProductReviewAggregateLoaderOutputSchema\n>;\n\ntype YotpoReviewAggregateLoaderProps = {\n loaderKey: string;\n productId: string;\n children: (data: YotpoReviewAggregateData) => ReactNode;\n fallback?: ReactNode;\n};\n\nfunction YotpoReviewAggregateLoaderInner({\n loaderKey,\n productId,\n children,\n}: Omit<YotpoReviewAggregateLoaderProps, \"fallback\">) {\n const queryResult = useSuspenseQuery({\n queryKey: [loaderKey, { productId }],\n queryFn: async () => {\n const loadedData = await invokeLoader({\n loaderKey,\n args: { productId },\n });\n return yotpoProductReviewAggregateLoaderOutputSchema.parse(loadedData);\n },\n });\n\n return <>{children(queryResult.data)}</>;\n}\n\nexport function YotpoReviewAggregateLoader({\n loaderKey,\n productId,\n children,\n fallback,\n}: YotpoReviewAggregateLoaderProps) {\n return (\n <LoaderErrorBoundary\n fallback={fallback ?? null}\n resetKey={`${loaderKey}:${productId}`}\n >\n <Suspense fallback={fallback ?? null}>\n <YotpoReviewAggregateLoaderInner\n loaderKey={loaderKey}\n productId={productId}\n >\n {children}\n </YotpoReviewAggregateLoaderInner>\n </Suspense>\n </LoaderErrorBoundary>\n );\n}\n"],
|
|
5
|
-
"mappings": ";AAwCS;AApCT,SAAS,gBAAgB;AAEzB,SAAS,wBAAwB;AAGjC,SAAS,oBAAoB;AAC7B,SAAS,2BAA2B;AACpC,SAAS,qDAAqD;AAa9D,SAAS,gCAAgC;AAAA,EACvC;AAAA,EACA;AAAA,EACA;AACF,GAAsD;AACpD,QAAM,cAAc,iBAAiB;AAAA,IACnC,UAAU,CAAC,WAAW,EAAE,UAAU,CAAC;AAAA,IACnC,SAAS,YAAY;AACnB,YAAM,aAAa,MAAM,aAAa;AAAA,QACpC;AAAA,QACA,MAAM,EAAE,UAAU;AAAA,MACpB,CAAC;AACD,aAAO,8CAA8C,MAAM,UAAU;AAAA,IACvE;AAAA,EACF,CAAC;AAED,SAAO,gCAAG,mBAAS,YAAY,IAAI,GAAE;AACvC;AAEO,SAAS,2BAA2B;AAAA,EACzC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF,GAAoC;AAClC,SACE;AAAA,IAAC;AAAA;AAAA,MACC,UAAU,YAAY;AAAA,MACtB,UAAU,GAAG,SAAS,IAAI,SAAS;AAAA,MAEnC,8BAAC,YAAS,UAAU,YAAY,MAC9B;AAAA,QAAC;AAAA;AAAA,UACC;AAAA,UACA;AAAA,UAEC;AAAA;AAAA,MACH,GACF;AAAA;AAAA,EACF;AAEJ;",
|
|
6
|
-
"names": []
|
|
7
|
-
}
|