@replohq/sdk 1.21.1 → 2.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/_vendor/replo-utils/lib/json.mjs +4 -5
  2. package/_vendor/replo-utils/lib/misc.mjs +4 -3
  3. package/_vendor/replo-utils/lib/object.d.ts +16 -1
  4. package/_vendor/replo-utils/lib/object.mjs +3 -4
  5. package/_vendor/schemas/contentEntry.mjs +3 -3
  6. package/_vendor/schemas/contentManifest.mjs +6 -6
  7. package/_vendor/schemas/errors.d.ts +3 -43
  8. package/_vendor/schemas/{money.d.ts → moneyFormat.d.ts} +1 -8
  9. package/_vendor/schemas/{money.mjs → moneyFormat.mjs} +5 -16
  10. package/_vendor/schemas/reploError.d.ts +43 -0
  11. package/_vendor/schemas/routing/locale.mjs +6 -4
  12. package/_vendor/schemas/routing/rules.mjs +6 -4
  13. package/analytics/analytics-sink.d.ts +126 -14
  14. package/analytics/combine-sinks.js +36 -13
  15. package/analytics/hooks/use-product-viewed-analytics.d.ts +1 -17
  16. package/analytics/hooks/use-product-viewed-analytics.js +5 -14
  17. package/analytics/legacy-checkout.d.ts +2 -0
  18. package/analytics/legacy-checkout.js +26 -0
  19. package/analytics/sinks/converge-event-mapper.d.ts +10 -11
  20. package/analytics/sinks/converge-event-mapper.js +50 -133
  21. package/analytics/sinks/converge-sink.d.ts +8 -7
  22. package/analytics/sinks/converge-sink.js +21 -3
  23. package/analytics/sinks/elevar-sink.d.ts +9 -7
  24. package/analytics/sinks/elevar-sink.js +37 -128
  25. package/analytics/sinks/ga4-sink.d.ts +9 -8
  26. package/analytics/sinks/ga4-sink.js +9 -8
  27. package/analytics/sinks/intelligems-sink.d.ts +9 -8
  28. package/analytics/sinks/intelligems-sink.js +3 -1
  29. package/analytics/sinks/meta-sink.d.ts +5 -4
  30. package/analytics/sinks/meta-sink.js +7 -3
  31. package/analytics/sinks/northbeam-sink.d.ts +1 -0
  32. package/analytics/sinks/northbeam-sink.js +2 -0
  33. package/analytics/sinks/pinterest-sink.d.ts +7 -6
  34. package/analytics/sinks/pinterest-sink.js +14 -20
  35. package/analytics/sinks/reddit-sink.d.ts +8 -7
  36. package/analytics/sinks/reddit-sink.js +13 -20
  37. package/analytics/sinks/replo-sink.d.ts +21 -9
  38. package/analytics/sinks/replo-sink.js +37 -39
  39. package/analytics/sinks/snapchat-sink.d.ts +6 -5
  40. package/analytics/sinks/snapchat-sink.js +8 -8
  41. package/analytics/sinks/tiktok-sink.d.ts +8 -7
  42. package/analytics/sinks/tiktok-sink.js +10 -15
  43. package/analytics/sinks/window-sink.d.ts +11 -9
  44. package/analytics/sinks/window-sink.js +5 -1
  45. package/analytics/sinks/x-sink.d.ts +5 -4
  46. package/analytics/sinks/x-sink.js +19 -50
  47. package/analytics/test-fixtures.d.ts +5 -0
  48. package/analytics/test-fixtures.js +18 -0
  49. package/analytics/utils/analytics-products.d.ts +0 -30
  50. package/analytics/utils/analytics-products.js +1 -51
  51. package/analytics/utils/collection-analytics.d.ts +2 -15
  52. package/analytics/utils/collection-analytics.js +14 -18
  53. package/analytics/utils/product-analytics.d.ts +23 -0
  54. package/analytics/utils/product-analytics.js +21 -0
  55. package/cart/hooks/use-add-to-cart.js +1 -1
  56. package/cart/utils/cart-analytics.d.ts +3 -23
  57. package/cart/utils/cart-analytics.js +1 -1
  58. package/cart/utils/cart-utils.js +1 -1
  59. package/cart/utils/variant-to-cart-line.js +1 -1
  60. package/chunk-CKRRL66R.mjs +28 -0
  61. package/{chunk-VVB7BEDE.mjs → chunk-O4QBR4QC.mjs} +9 -4
  62. package/{chunk-EUIVDITZ.mjs → chunk-OPKMOW43.mjs} +1 -1
  63. package/{chunk-C37TXOGI.mjs → chunk-PSYP2DYM.mjs} +1 -1
  64. package/{chunk-ACQS4AG5.mjs → chunk-TTEBDCWT.mjs} +272 -109
  65. package/{chunk-HFKL4ZR5.mjs → chunk-XGXJOHUY.mjs} +2 -1
  66. package/{chunk-AQG3256R.mjs → chunk-XSMYSAKY.mjs} +0 -26
  67. package/{chunk-SSBIMQES.mjs → chunk-XWWFRIXV.mjs} +36 -99
  68. package/chunk-ZPDXVFCR.mjs +66 -0
  69. package/hooks/use-formatted-price.js +1 -1
  70. package/lib/buildMetadata.js +3 -3
  71. package/loaders/collection-loader.js +8 -6
  72. package/loaders/collection-products-loader.js +8 -6
  73. package/loaders/contentful-entries-loader.js +5 -3
  74. package/loaders/contentful-entry-loader.js +5 -3
  75. package/loaders/integration-loader-schemas.d.ts +260 -0
  76. package/loaders/integration-loader-schemas.js +55 -0
  77. package/loaders/invoke-loader.d.ts +5 -0
  78. package/loaders/invoke-loader.js +1 -1
  79. package/loaders/judgeme-review-aggregate-loader.d.ts +1 -1
  80. package/loaders/judgeme-review-aggregate-loader.js +10 -6
  81. package/loaders/judgeme-reviews-loader.d.ts +1 -1
  82. package/loaders/judgeme-reviews-loader.js +5 -3
  83. package/loaders/kaching-bundles-loader.js +5 -3
  84. package/loaders/levanta-product-loader.js +8 -6
  85. package/loaders/loox-review-aggregate-loader.d.ts +1 -1
  86. package/loaders/loox-review-aggregate-loader.js +10 -6
  87. package/loaders/loox-reviews-loader.d.ts +1 -1
  88. package/loaders/loox-reviews-loader.js +8 -6
  89. package/loaders/metaobject-loader.js +5 -3
  90. package/loaders/metaobjects-loader.js +5 -3
  91. package/loaders/okendo-review-aggregate-loader.d.ts +2 -7
  92. package/loaders/okendo-review-aggregate-loader.js +8 -12
  93. package/loaders/okendo-reviews-loader.d.ts +2 -42
  94. package/loaders/okendo-reviews-loader.js +5 -8
  95. package/loaders/product-loader.js +5 -3
  96. package/loaders/rebuy-recommendations-loader.d.ts +2 -167
  97. package/loaders/rebuy-recommendations-loader.js +8 -10
  98. package/loaders/reviews-io-review-aggregate-loader.d.ts +1 -1
  99. package/loaders/reviews-io-review-aggregate-loader.js +5 -3
  100. package/loaders/reviews-io-reviews-loader.d.ts +1 -1
  101. package/loaders/reviews-io-reviews-loader.js +7 -3
  102. package/loaders/shopify-integration-details-loader.js +10 -6
  103. package/loaders/smile-earning-rules-loader.d.ts +2 -8
  104. package/loaders/smile-earning-rules-loader.js +8 -16
  105. package/loaders/smile-rewards-loader.d.ts +2 -8
  106. package/loaders/smile-rewards-loader.js +8 -16
  107. package/loaders/smile-vip-tiers-loader.d.ts +2 -7
  108. package/loaders/smile-vip-tiers-loader.js +8 -15
  109. package/loaders/statsig-experiment-loader.js +5 -3
  110. package/loaders/yotpo-review-aggregate-loader.d.ts +1 -1
  111. package/loaders/yotpo-review-aggregate-loader.js +10 -6
  112. package/loaders/yotpo-reviews-loader.d.ts +1 -1
  113. package/loaders/yotpo-reviews-loader.js +5 -3
  114. package/money.d.ts +1 -1
  115. package/money.js +1 -1
  116. package/next/config.js +4 -0
  117. package/next/image-loader.js +3 -3
  118. package/package.json +8 -4
  119. package/chunk-CQYCPDPI.mjs +0 -166
@@ -0,0 +1,260 @@
1
+ import * as z from "zod";
2
+ export declare const okendoReviewAggregateOutputSchema: z.ZodObject<{
3
+ reviewCount: z.ZodNumber;
4
+ reviewAverageValue: z.ZodNumber;
5
+ reviewStarDistribution: z.ZodRecord<z.ZodString, z.ZodNumber>;
6
+ recommendedPercentage: z.ZodNumber;
7
+ }, z.core.$strip>;
8
+ export declare const okendoReviewsOutputSchema: z.ZodObject<{
9
+ reviews: z.ZodArray<z.ZodObject<{
10
+ id: z.ZodString;
11
+ title: z.ZodOptional<z.ZodString>;
12
+ body: z.ZodOptional<z.ZodString>;
13
+ rating: z.ZodOptional<z.ZodNumber>;
14
+ productName: z.ZodOptional<z.ZodString>;
15
+ productVariantName: z.ZodOptional<z.ZodString>;
16
+ reviewerName: z.ZodOptional<z.ZodString>;
17
+ reviewerIsVerified: z.ZodOptional<z.ZodBoolean>;
18
+ reviewerLocation: z.ZodOptional<z.ZodString>;
19
+ reviewerCountryCode: z.ZodOptional<z.ZodString>;
20
+ reviewerAvatarUrl: z.ZodOptional<z.ZodString>;
21
+ reviewerVerifiedStatus: z.ZodOptional<z.ZodString>;
22
+ reviewerSocialConnection: z.ZodOptional<z.ZodString>;
23
+ source: z.ZodOptional<z.ZodString>;
24
+ dateCreated: z.ZodOptional<z.ZodString>;
25
+ status: z.ZodOptional<z.ZodString>;
26
+ isRecommended: z.ZodOptional<z.ZodBoolean>;
27
+ helpfulCount: z.ZodOptional<z.ZodNumber>;
28
+ media: z.ZodOptional<z.ZodArray<z.ZodObject<{
29
+ type: z.ZodString;
30
+ thumbnailUrl: z.ZodOptional<z.ZodString>;
31
+ largeUrl: z.ZodOptional<z.ZodString>;
32
+ fullSizeUrl: z.ZodOptional<z.ZodString>;
33
+ largePortraitThumbnailUrl: z.ZodOptional<z.ZodString>;
34
+ videoPosterUrl: z.ZodOptional<z.ZodString>;
35
+ videoWebmUrl: z.ZodOptional<z.ZodString>;
36
+ alt: z.ZodOptional<z.ZodString>;
37
+ }, z.core.$strip>>>;
38
+ attributes: z.ZodOptional<z.ZodArray<z.ZodObject<{
39
+ title: z.ZodString;
40
+ value: z.ZodString;
41
+ }, z.core.$strip>>>;
42
+ reply: z.ZodOptional<z.ZodObject<{
43
+ body: z.ZodString;
44
+ dateCreated: z.ZodOptional<z.ZodString>;
45
+ }, z.core.$strip>>;
46
+ }, z.core.$strip>>;
47
+ nextCursor: z.ZodOptional<z.ZodNullable<z.ZodString>>;
48
+ }, z.core.$strip>;
49
+ export declare const rebuyRecommendationsOutputSchema: z.ZodObject<{
50
+ products: z.ZodArray<z.ZodObject<{
51
+ id: z.ZodString;
52
+ handle: z.ZodOptional<z.ZodString>;
53
+ title: z.ZodOptional<z.ZodString>;
54
+ description: z.ZodOptional<z.ZodNullable<z.ZodString>>;
55
+ descriptionHtml: z.ZodOptional<z.ZodNullable<z.ZodString>>;
56
+ availableForSale: z.ZodOptional<z.ZodBoolean>;
57
+ status: z.ZodOptional<z.ZodEnum<{
58
+ ACTIVE: "ACTIVE";
59
+ DRAFT: "DRAFT";
60
+ ARCHIVED: "ARCHIVED";
61
+ UNLISTED: "UNLISTED";
62
+ }>>;
63
+ featuredImage: z.ZodOptional<z.ZodNullable<z.ZodObject<{
64
+ url: z.ZodString;
65
+ altText: z.ZodNullable<z.ZodString>;
66
+ width: z.ZodNullable<z.ZodNumber>;
67
+ height: z.ZodNullable<z.ZodNumber>;
68
+ }, z.core.$strip>>>;
69
+ options: z.ZodOptional<z.ZodArray<z.ZodObject<{
70
+ id: z.ZodOptional<z.ZodString>;
71
+ name: z.ZodString;
72
+ values: z.ZodArray<z.ZodString>;
73
+ optionValues: z.ZodOptional<z.ZodArray<z.ZodObject<{
74
+ id: z.ZodString;
75
+ value: z.ZodString;
76
+ swatch: z.ZodNullable<z.ZodObject<{
77
+ color: z.ZodNullable<z.ZodString>;
78
+ imageUrl: z.ZodNullable<z.ZodString>;
79
+ }, z.core.$strip>>;
80
+ }, z.core.$strip>>>;
81
+ }, z.core.$strip>>>;
82
+ variants: z.ZodOptional<z.ZodArray<z.ZodObject<{
83
+ id: z.ZodString;
84
+ title: z.ZodOptional<z.ZodString>;
85
+ availableForSale: z.ZodOptional<z.ZodBoolean>;
86
+ isLowStock: z.ZodOptional<z.ZodBoolean>;
87
+ sku: z.ZodOptional<z.ZodNullable<z.ZodString>>;
88
+ selectedOptions: z.ZodOptional<z.ZodArray<z.ZodObject<{
89
+ name: z.ZodString;
90
+ value: z.ZodString;
91
+ }, z.core.$strip>>>;
92
+ image: z.ZodOptional<z.ZodNullable<z.ZodObject<{
93
+ url: z.ZodString;
94
+ altText: z.ZodNullable<z.ZodString>;
95
+ width: z.ZodNullable<z.ZodNumber>;
96
+ height: z.ZodNullable<z.ZodNumber>;
97
+ }, z.core.$strip>>>;
98
+ price: z.ZodOptional<z.ZodObject<{
99
+ amount: z.ZodString;
100
+ currencyCode: z.ZodString;
101
+ }, z.core.$strip>>;
102
+ compareAtPrice: z.ZodOptional<z.ZodNullable<z.ZodObject<{
103
+ amount: z.ZodString;
104
+ currencyCode: z.ZodString;
105
+ }, z.core.$strip>>>;
106
+ sellingPlanIds: z.ZodOptional<z.ZodArray<z.ZodString>>;
107
+ }, z.core.$strip>>>;
108
+ minPrice: z.ZodOptional<z.ZodObject<{
109
+ amount: z.ZodString;
110
+ currencyCode: z.ZodString;
111
+ }, z.core.$strip>>;
112
+ maxPrice: z.ZodOptional<z.ZodObject<{
113
+ amount: z.ZodString;
114
+ currencyCode: z.ZodString;
115
+ }, z.core.$strip>>;
116
+ compareAtMinPrice: z.ZodOptional<z.ZodObject<{
117
+ amount: z.ZodString;
118
+ currencyCode: z.ZodString;
119
+ }, z.core.$strip>>;
120
+ compareAtMaxPrice: z.ZodOptional<z.ZodObject<{
121
+ amount: z.ZodString;
122
+ currencyCode: z.ZodString;
123
+ }, z.core.$strip>>;
124
+ images: z.ZodOptional<z.ZodArray<z.ZodObject<{
125
+ url: z.ZodString;
126
+ altText: z.ZodNullable<z.ZodString>;
127
+ width: z.ZodNullable<z.ZodNumber>;
128
+ height: z.ZodNullable<z.ZodNumber>;
129
+ }, z.core.$strip>>>;
130
+ media: z.ZodOptional<z.ZodArray<z.ZodDiscriminatedUnion<[z.ZodObject<{
131
+ type: z.ZodLiteral<"image">;
132
+ alt: z.ZodNullable<z.ZodString>;
133
+ url: z.ZodString;
134
+ width: z.ZodNullable<z.ZodNumber>;
135
+ height: z.ZodNullable<z.ZodNumber>;
136
+ }, z.core.$strip>, z.ZodObject<{
137
+ type: z.ZodLiteral<"video">;
138
+ alt: z.ZodNullable<z.ZodString>;
139
+ sources: z.ZodArray<z.ZodObject<{
140
+ url: z.ZodString;
141
+ mimeType: z.ZodString;
142
+ format: z.ZodString;
143
+ width: z.ZodNullable<z.ZodNumber>;
144
+ height: z.ZodNullable<z.ZodNumber>;
145
+ }, z.core.$strip>>;
146
+ previewImage: z.ZodNullable<z.ZodObject<{
147
+ alt: z.ZodNullable<z.ZodString>;
148
+ url: z.ZodString;
149
+ width: z.ZodNullable<z.ZodNumber>;
150
+ height: z.ZodNullable<z.ZodNumber>;
151
+ }, z.core.$strip>>;
152
+ }, z.core.$strip>, z.ZodObject<{
153
+ type: z.ZodLiteral<"externalVideo">;
154
+ alt: z.ZodNullable<z.ZodString>;
155
+ embedUrl: z.ZodString;
156
+ host: z.ZodString;
157
+ originUrl: z.ZodString;
158
+ previewImage: z.ZodNullable<z.ZodObject<{
159
+ alt: z.ZodNullable<z.ZodString>;
160
+ url: z.ZodString;
161
+ width: z.ZodNullable<z.ZodNumber>;
162
+ height: z.ZodNullable<z.ZodNumber>;
163
+ }, z.core.$strip>>;
164
+ }, z.core.$strip>], "type">>>;
165
+ vendor: z.ZodOptional<z.ZodNullable<z.ZodString>>;
166
+ productType: z.ZodOptional<z.ZodNullable<z.ZodString>>;
167
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
168
+ sellingPlanGroups: z.ZodOptional<z.ZodArray<z.ZodObject<{
169
+ appId: z.ZodNullable<z.ZodString>;
170
+ options: z.ZodArray<z.ZodObject<{
171
+ name: z.ZodString;
172
+ values: z.ZodArray<z.ZodUnion<readonly [z.ZodString, z.ZodNull]>>;
173
+ }, z.core.$strip>>;
174
+ sellingPlans: z.ZodArray<z.ZodObject<{
175
+ id: z.ZodString;
176
+ name: z.ZodString;
177
+ description: z.ZodNullable<z.ZodString>;
178
+ optionValues: z.ZodArray<z.ZodObject<{
179
+ name: z.ZodOptional<z.ZodString>;
180
+ value: z.ZodString;
181
+ }, z.core.$strip>>;
182
+ priceAdjustments: z.ZodArray<z.ZodObject<{
183
+ value: z.ZodNumber;
184
+ valueType: z.ZodEnum<{
185
+ price: "price";
186
+ percentage: "percentage";
187
+ fixedAmount: "fixedAmount";
188
+ }>;
189
+ }, z.core.$strip>>;
190
+ appId: z.ZodOptional<z.ZodNullable<z.ZodString>>;
191
+ price: z.ZodOptional<z.ZodString>;
192
+ externalId: z.ZodNullable<z.ZodString>;
193
+ }, z.core.$strip>>;
194
+ }, z.core.$strip>>>;
195
+ requiresSellingPlan: z.ZodOptional<z.ZodBoolean>;
196
+ metafields: z.ZodOptional<z.ZodArray<z.ZodObject<{
197
+ key: z.ZodString;
198
+ namespace: z.ZodString;
199
+ type: z.ZodString;
200
+ value: z.ZodString;
201
+ reference: z.ZodOptional<z.ZodNullable<z.ZodDiscriminatedUnion<[z.ZodObject<{
202
+ kind: z.ZodLiteral<"image">;
203
+ url: z.ZodNullable<z.ZodString>;
204
+ }, z.core.$strip>, z.ZodObject<{
205
+ kind: z.ZodLiteral<"file">;
206
+ url: z.ZodNullable<z.ZodString>;
207
+ }, z.core.$strip>, z.ZodObject<{
208
+ kind: z.ZodLiteral<"video">;
209
+ url: z.ZodNullable<z.ZodString>;
210
+ previewUrl: z.ZodNullable<z.ZodString>;
211
+ }, z.core.$strip>], "kind">>>;
212
+ }, z.core.$strip>>>;
213
+ }, z.core.$strip>>;
214
+ }, z.core.$strip>;
215
+ export declare const smileEarningRuleSchema: z.ZodObject<{
216
+ id: z.ZodNumber;
217
+ name: z.ZodString;
218
+ pointsAwarded: z.ZodNullable<z.ZodNumber>;
219
+ pointsAwardedType: z.ZodString;
220
+ activityToken: z.ZodString;
221
+ }, z.core.$strip>;
222
+ export declare const smileEarningRulesOutputSchema: z.ZodObject<{
223
+ earningRules: z.ZodArray<z.ZodObject<{
224
+ id: z.ZodNumber;
225
+ name: z.ZodString;
226
+ pointsAwarded: z.ZodNullable<z.ZodNumber>;
227
+ pointsAwardedType: z.ZodString;
228
+ activityToken: z.ZodString;
229
+ }, z.core.$strip>>;
230
+ }, z.core.$strip>;
231
+ export declare const smileRewardSchema: z.ZodObject<{
232
+ id: z.ZodNumber;
233
+ name: z.ZodString;
234
+ pointsCost: z.ZodNumber;
235
+ rewardType: z.ZodString;
236
+ discountValue: z.ZodNullable<z.ZodString>;
237
+ }, z.core.$strip>;
238
+ export declare const smileRewardsOutputSchema: z.ZodObject<{
239
+ rewards: z.ZodArray<z.ZodObject<{
240
+ id: z.ZodNumber;
241
+ name: z.ZodString;
242
+ pointsCost: z.ZodNumber;
243
+ rewardType: z.ZodString;
244
+ discountValue: z.ZodNullable<z.ZodString>;
245
+ }, z.core.$strip>>;
246
+ }, z.core.$strip>;
247
+ export declare const smileVipTierSchema: z.ZodObject<{
248
+ id: z.ZodNumber;
249
+ name: z.ZodString;
250
+ minimumPointsRequired: z.ZodNumber;
251
+ color: z.ZodNullable<z.ZodString>;
252
+ }, z.core.$strip>;
253
+ export declare const smileVipTiersOutputSchema: z.ZodObject<{
254
+ vipTiers: z.ZodArray<z.ZodObject<{
255
+ id: z.ZodNumber;
256
+ name: z.ZodString;
257
+ minimumPointsRequired: z.ZodNumber;
258
+ color: z.ZodNullable<z.ZodString>;
259
+ }, z.core.$strip>>;
260
+ }, z.core.$strip>;
@@ -0,0 +1,55 @@
1
+ import * as z from "zod";
2
+ import { okendoReviewSchema, productSchema } from "./loader-schemas";
3
+ const okendoReviewAggregateOutputSchema = z.object({
4
+ reviewCount: z.number(),
5
+ reviewAverageValue: z.number(),
6
+ reviewStarDistribution: z.record(z.string(), z.number()),
7
+ recommendedPercentage: z.number()
8
+ });
9
+ const okendoReviewsOutputSchema = z.object({
10
+ reviews: z.array(okendoReviewSchema),
11
+ nextCursor: z.string().nullish()
12
+ });
13
+ const rebuyRecommendationsOutputSchema = z.object({
14
+ products: z.array(productSchema)
15
+ });
16
+ const smileEarningRuleSchema = z.object({
17
+ id: z.number(),
18
+ name: z.string(),
19
+ pointsAwarded: z.number().nullable(),
20
+ pointsAwardedType: z.string(),
21
+ activityToken: z.string()
22
+ });
23
+ const smileEarningRulesOutputSchema = z.object({
24
+ earningRules: z.array(smileEarningRuleSchema)
25
+ });
26
+ const smileRewardSchema = z.object({
27
+ id: z.number(),
28
+ name: z.string(),
29
+ pointsCost: z.number(),
30
+ rewardType: z.string(),
31
+ discountValue: z.string().nullable()
32
+ });
33
+ const smileRewardsOutputSchema = z.object({
34
+ rewards: z.array(smileRewardSchema)
35
+ });
36
+ const smileVipTierSchema = z.object({
37
+ id: z.number(),
38
+ name: z.string(),
39
+ minimumPointsRequired: z.number(),
40
+ color: z.string().nullable()
41
+ });
42
+ const smileVipTiersOutputSchema = z.object({
43
+ vipTiers: z.array(smileVipTierSchema)
44
+ });
45
+ export {
46
+ okendoReviewAggregateOutputSchema,
47
+ okendoReviewsOutputSchema,
48
+ rebuyRecommendationsOutputSchema,
49
+ smileEarningRuleSchema,
50
+ smileEarningRulesOutputSchema,
51
+ smileRewardSchema,
52
+ smileRewardsOutputSchema,
53
+ smileVipTierSchema,
54
+ smileVipTiersOutputSchema
55
+ };
@@ -7,6 +7,11 @@ export declare class LoaderInvokeError extends CanopyError {
7
7
  * In the browser, dynamically imports a server action so React 19 never sees
8
8
  * the "use server" reference during render.
9
9
  *
10
+ * Next defines `process.env.NEXT_RUNTIME` as "" in browser bundles, so the
11
+ * bundler drops the server branch and never emits the gateway, its env
12
+ * handling, or its Zod schemas as a client chunk. `typeof window` is not
13
+ * replaced at build time and would keep that chunk.
14
+ *
10
15
  * In an editor iframe previewing an unfilled dynamic route, returns sample
11
16
  * data instead of fetching — see `preview-placeholder.ts`.
12
17
  */
@@ -11,7 +11,7 @@ async function invokeLoader({
11
11
  return placeholderData;
12
12
  }
13
13
  try {
14
- if (typeof window === "undefined") {
14
+ if (process.env.NEXT_RUNTIME) {
15
15
  const { getCanopyApiGateway } = await import("../gateways/canopy-api");
16
16
  const gateway = await getCanopyApiGateway();
17
17
  const response = await gateway.invokeLoader({ loaderKey, args });
@@ -1,6 +1,6 @@
1
1
  import type { ReactNode } from "react";
2
2
  import type { z } from "zod";
3
- import { judgemeProductReviewAggregateLoaderOutputSchema } from "./loader-schemas";
3
+ import type { judgemeProductReviewAggregateLoaderOutputSchema } from "./loader-schemas";
4
4
  type JudgemeReviewAggregateData = z.infer<typeof judgemeProductReviewAggregateLoaderOutputSchema>;
5
5
  type JudgemeReviewAggregateLoaderProps = {
6
6
  loaderKey: string;
@@ -4,7 +4,6 @@ import { Suspense } from "react";
4
4
  import { useSuspenseQuery } from "@tanstack/react-query";
5
5
  import { invokeLoader } from "./invoke-loader";
6
6
  import { LoaderErrorBoundary } from "./loader-error-boundary";
7
- import { judgemeProductReviewAggregateLoaderOutputSchema } from "./loader-schemas";
8
7
  function JudgemeReviewAggregateLoaderInner({
9
8
  loaderKey,
10
9
  productId,
@@ -13,11 +12,16 @@ function JudgemeReviewAggregateLoaderInner({
13
12
  const { data } = useSuspenseQuery({
14
13
  queryKey: [loaderKey, { productId }],
15
14
  queryFn: async () => {
16
- const loadedData = await invokeLoader({
17
- loaderKey,
18
- args: { productId }
19
- });
20
- return judgemeProductReviewAggregateLoaderOutputSchema.parse(loadedData);
15
+ const [loadedData, schemas] = await Promise.all([
16
+ invokeLoader({
17
+ loaderKey,
18
+ args: { productId }
19
+ }),
20
+ import("./loader-schemas")
21
+ ]);
22
+ return schemas.judgemeProductReviewAggregateLoaderOutputSchema.parse(
23
+ loadedData
24
+ );
21
25
  }
22
26
  });
23
27
  return /* @__PURE__ */ jsx(Fragment, { children: children(data) });
@@ -1,6 +1,6 @@
1
1
  import type { ReactNode } from "react";
2
2
  import type { z } from "zod";
3
- import { judgemeProductReviewsLoaderOutputSchema } from "./loader-schemas";
3
+ import type { judgemeProductReviewsLoaderOutputSchema } from "./loader-schemas";
4
4
  type JudgemeReviewsData = z.infer<typeof judgemeProductReviewsLoaderOutputSchema>;
5
5
  type JudgemeReviewsLoaderProps = {
6
6
  loaderKey: string;
@@ -4,7 +4,6 @@ import { Suspense } from "react";
4
4
  import { useSuspenseQuery } from "@tanstack/react-query";
5
5
  import { invokeLoader } from "./invoke-loader";
6
6
  import { LoaderErrorBoundary } from "./loader-error-boundary";
7
- import { judgemeProductReviewsLoaderOutputSchema } from "./loader-schemas";
8
7
  function buildReviewsArgs({
9
8
  productId,
10
9
  perPage,
@@ -27,8 +26,11 @@ function JudgemeReviewsLoaderInner({
27
26
  const { data } = useSuspenseQuery({
28
27
  queryKey: [loaderKey, args],
29
28
  queryFn: async () => {
30
- const loadedData = await invokeLoader({ loaderKey, args });
31
- return judgemeProductReviewsLoaderOutputSchema.parse(loadedData);
29
+ const [loadedData, schemas] = await Promise.all([
30
+ invokeLoader({ loaderKey, args }),
31
+ import("./loader-schemas")
32
+ ]);
33
+ return schemas.judgemeProductReviewsLoaderOutputSchema.parse(loadedData);
32
34
  }
33
35
  });
34
36
  return /* @__PURE__ */ jsx(Fragment, { children: children(data) });
@@ -5,7 +5,6 @@ import { KachingBundle } from "@kachingappz/bundles-react";
5
5
  import { useSuspenseQuery } from "@tanstack/react-query";
6
6
  import { invokeLoader } from "./invoke-loader";
7
7
  import { LoaderErrorBoundary } from "./loader-error-boundary";
8
- import { shopifyKachingBundlesLoaderOutputSchema } from "./loader-schemas";
9
8
  function KachingBundlesLoaderInner({
10
9
  loaderKey,
11
10
  args,
@@ -17,8 +16,11 @@ function KachingBundlesLoaderInner({
17
16
  const { data } = useSuspenseQuery({
18
17
  queryKey: [loaderKey, args],
19
18
  queryFn: async () => {
20
- const loadedData = await invokeLoader({ loaderKey, args });
21
- return shopifyKachingBundlesLoaderOutputSchema.parse(loadedData);
19
+ const [loadedData, schemas] = await Promise.all([
20
+ invokeLoader({ loaderKey, args }),
21
+ import("./loader-schemas")
22
+ ]);
23
+ return schemas.shopifyKachingBundlesLoaderOutputSchema.parse(loadedData);
22
24
  }
23
25
  });
24
26
  if (data.bundles === null) {
@@ -4,7 +4,6 @@ import { Suspense } from "react";
4
4
  import { useSuspenseQuery } from "@tanstack/react-query";
5
5
  import { invokeLoader } from "./invoke-loader";
6
6
  import { LoaderErrorBoundary } from "./loader-error-boundary";
7
- import { levantaProductFullSchema } from "./loader-schemas";
8
7
  function LevantaProductLoaderInner({
9
8
  loaderKey,
10
9
  asin,
@@ -14,11 +13,14 @@ function LevantaProductLoaderInner({
14
13
  const queryResult = useSuspenseQuery({
15
14
  queryKey: [loaderKey, { asin, marketplace }],
16
15
  queryFn: async () => {
17
- const loadedData = await invokeLoader({
18
- loaderKey,
19
- args: { asin, marketplace }
20
- });
21
- return levantaProductFullSchema.parse(loadedData);
16
+ const [loadedData, schemas] = await Promise.all([
17
+ invokeLoader({
18
+ loaderKey,
19
+ args: { asin, marketplace }
20
+ }),
21
+ import("./loader-schemas")
22
+ ]);
23
+ return schemas.levantaProductFullSchema.parse(loadedData);
22
24
  }
23
25
  });
24
26
  return /* @__PURE__ */ jsx(Fragment, { children: children(queryResult.data) });
@@ -1,6 +1,6 @@
1
1
  import type { ReactNode } from "react";
2
2
  import type { z } from "zod";
3
- import { looxProductReviewAggregateLoaderOutputSchema } from "./loader-schemas";
3
+ import type { looxProductReviewAggregateLoaderOutputSchema } from "./loader-schemas";
4
4
  type LooxReviewAggregateData = z.infer<typeof looxProductReviewAggregateLoaderOutputSchema>;
5
5
  type LooxReviewAggregateLoaderProps = {
6
6
  loaderKey: string;
@@ -4,7 +4,6 @@ import { Suspense } from "react";
4
4
  import { useSuspenseQuery } from "@tanstack/react-query";
5
5
  import { invokeLoader } from "./invoke-loader";
6
6
  import { LoaderErrorBoundary } from "./loader-error-boundary";
7
- import { looxProductReviewAggregateLoaderOutputSchema } from "./loader-schemas";
8
7
  function LooxReviewAggregateLoaderInner({
9
8
  loaderKey,
10
9
  shopifyProductId,
@@ -13,11 +12,16 @@ function LooxReviewAggregateLoaderInner({
13
12
  const queryResult = useSuspenseQuery({
14
13
  queryKey: [loaderKey, { shopifyProductId }],
15
14
  queryFn: async () => {
16
- const loadedData = await invokeLoader({
17
- loaderKey,
18
- args: { shopifyProductId }
19
- });
20
- return looxProductReviewAggregateLoaderOutputSchema.parse(loadedData);
15
+ const [loadedData, schemas] = await Promise.all([
16
+ invokeLoader({
17
+ loaderKey,
18
+ args: { shopifyProductId }
19
+ }),
20
+ import("./loader-schemas")
21
+ ]);
22
+ return schemas.looxProductReviewAggregateLoaderOutputSchema.parse(
23
+ loadedData
24
+ );
21
25
  }
22
26
  });
23
27
  return /* @__PURE__ */ jsx(Fragment, { children: children(queryResult.data) });
@@ -1,6 +1,6 @@
1
1
  import type { ReactNode } from "react";
2
2
  import type { z } from "zod";
3
- import { looxProductReviewsLoaderOutputSchema } from "./loader-schemas";
3
+ import type { looxProductReviewsLoaderOutputSchema } from "./loader-schemas";
4
4
  type LooxReviewsData = z.infer<typeof looxProductReviewsLoaderOutputSchema>;
5
5
  type LooxReviewsLoaderProps = {
6
6
  loaderKey: string;
@@ -4,7 +4,6 @@ import { Suspense } from "react";
4
4
  import { useSuspenseQuery } from "@tanstack/react-query";
5
5
  import { invokeLoader } from "./invoke-loader";
6
6
  import { LoaderErrorBoundary } from "./loader-error-boundary";
7
- import { looxProductReviewsLoaderOutputSchema } from "./loader-schemas";
8
7
  function LooxReviewsLoaderInner({
9
8
  loaderKey,
10
9
  shopifyProductId,
@@ -13,11 +12,14 @@ function LooxReviewsLoaderInner({
13
12
  const queryResult = useSuspenseQuery({
14
13
  queryKey: [loaderKey, { shopifyProductId }],
15
14
  queryFn: async () => {
16
- const loadedData = await invokeLoader({
17
- loaderKey,
18
- args: { shopifyProductId }
19
- });
20
- return looxProductReviewsLoaderOutputSchema.parse(loadedData);
15
+ const [loadedData, schemas] = await Promise.all([
16
+ invokeLoader({
17
+ loaderKey,
18
+ args: { shopifyProductId }
19
+ }),
20
+ import("./loader-schemas")
21
+ ]);
22
+ return schemas.looxProductReviewsLoaderOutputSchema.parse(loadedData);
21
23
  }
22
24
  });
23
25
  return /* @__PURE__ */ jsx(Fragment, { children: children(queryResult.data) });
@@ -4,7 +4,6 @@ import { Suspense } from "react";
4
4
  import { useSuspenseQuery } from "@tanstack/react-query";
5
5
  import { invokeLoader } from "./invoke-loader";
6
6
  import { LoaderErrorBoundary } from "./loader-error-boundary";
7
- import { shopifyMetaobjectLoaderOutputSchema } from "./loader-schemas";
8
7
  function buildArgs({
9
8
  type,
10
9
  handle,
@@ -24,8 +23,11 @@ function MetaobjectLoaderInner({
24
23
  const { data } = useSuspenseQuery({
25
24
  queryKey: [loaderKey, args],
26
25
  queryFn: async () => {
27
- const loadedData = await invokeLoader({ loaderKey, args });
28
- return shopifyMetaobjectLoaderOutputSchema.parse(loadedData);
26
+ const [loadedData, schemas] = await Promise.all([
27
+ invokeLoader({ loaderKey, args }),
28
+ import("./loader-schemas")
29
+ ]);
30
+ return schemas.shopifyMetaobjectLoaderOutputSchema.parse(loadedData);
29
31
  }
30
32
  });
31
33
  return /* @__PURE__ */ jsx(Fragment, { children: children(data) });
@@ -4,7 +4,6 @@ import { Suspense } from "react";
4
4
  import { useSuspenseQuery } from "@tanstack/react-query";
5
5
  import { invokeLoader } from "./invoke-loader";
6
6
  import { LoaderErrorBoundary } from "./loader-error-boundary";
7
- import { shopifyMetaobjectsLoaderOutputSchema } from "./loader-schemas";
8
7
  function buildArgs({
9
8
  type,
10
9
  first,
@@ -28,8 +27,11 @@ function MetaobjectsLoaderInner({
28
27
  const { data } = useSuspenseQuery({
29
28
  queryKey: [loaderKey, args],
30
29
  queryFn: async () => {
31
- const loadedData = await invokeLoader({ loaderKey, args });
32
- return shopifyMetaobjectsLoaderOutputSchema.parse(loadedData);
30
+ const [loadedData, schemas] = await Promise.all([
31
+ invokeLoader({ loaderKey, args }),
32
+ import("./loader-schemas")
33
+ ]);
34
+ return schemas.shopifyMetaobjectsLoaderOutputSchema.parse(loadedData);
33
35
  }
34
36
  });
35
37
  return /* @__PURE__ */ jsx(Fragment, { children: children(data) });
@@ -1,11 +1,6 @@
1
1
  import type { ReactNode } from "react";
2
- import * as z from "zod";
3
- declare const okendoReviewAggregateOutputSchema: z.ZodObject<{
4
- reviewCount: z.ZodNumber;
5
- reviewAverageValue: z.ZodNumber;
6
- reviewStarDistribution: z.ZodRecord<z.ZodString, z.ZodNumber>;
7
- recommendedPercentage: z.ZodNumber;
8
- }, z.core.$strip>;
2
+ import type { z } from "zod";
3
+ import type { okendoReviewAggregateOutputSchema } from "./integration-loader-schemas";
9
4
  type OkendoReviewAggregateData = z.infer<typeof okendoReviewAggregateOutputSchema>;
10
5
  type OkendoReviewAggregateLoaderProps = {
11
6
  loaderKey: string;
@@ -2,15 +2,8 @@
2
2
  import { Fragment, jsx } from "react/jsx-runtime";
3
3
  import { Suspense } from "react";
4
4
  import { useSuspenseQuery } from "@tanstack/react-query";
5
- import * as z from "zod";
6
5
  import { invokeLoader } from "./invoke-loader";
7
6
  import { LoaderErrorBoundary } from "./loader-error-boundary";
8
- const okendoReviewAggregateOutputSchema = z.object({
9
- reviewCount: z.number(),
10
- reviewAverageValue: z.number(),
11
- reviewStarDistribution: z.record(z.string(), z.number()),
12
- recommendedPercentage: z.number()
13
- });
14
7
  function OkendoReviewAggregateLoaderInner({
15
8
  loaderKey,
16
9
  shopifyProductId,
@@ -19,11 +12,14 @@ function OkendoReviewAggregateLoaderInner({
19
12
  const queryResult = useSuspenseQuery({
20
13
  queryKey: [loaderKey, { shopifyProductId }],
21
14
  queryFn: async () => {
22
- const loadedData = await invokeLoader({
23
- loaderKey,
24
- args: { shopifyProductId }
25
- });
26
- return okendoReviewAggregateOutputSchema.parse(loadedData);
15
+ const [loadedData, schemas] = await Promise.all([
16
+ invokeLoader({
17
+ loaderKey,
18
+ args: { shopifyProductId }
19
+ }),
20
+ import("./integration-loader-schemas")
21
+ ]);
22
+ return schemas.okendoReviewAggregateOutputSchema.parse(loadedData);
27
23
  }
28
24
  });
29
25
  return /* @__PURE__ */ jsx(Fragment, { children: children(queryResult.data) });