@replohq/sdk 1.22.0 → 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.
- package/_vendor/replo-utils/lib/json.mjs +4 -5
- package/_vendor/replo-utils/lib/misc.mjs +4 -3
- package/_vendor/replo-utils/lib/object.d.ts +16 -1
- package/_vendor/replo-utils/lib/object.mjs +3 -4
- package/_vendor/schemas/contentEntry.mjs +3 -3
- package/_vendor/schemas/contentManifest.mjs +6 -6
- package/_vendor/schemas/errors.d.ts +3 -43
- package/_vendor/schemas/{money.d.ts → moneyFormat.d.ts} +1 -8
- package/_vendor/schemas/{money.mjs → moneyFormat.mjs} +5 -16
- package/_vendor/schemas/reploError.d.ts +43 -0
- package/_vendor/schemas/routing/locale.mjs +6 -4
- package/_vendor/schemas/routing/rules.mjs +6 -4
- package/analytics/analytics-sink.d.ts +126 -14
- package/analytics/combine-sinks.js +36 -13
- package/analytics/hooks/use-product-viewed-analytics.d.ts +1 -17
- package/analytics/hooks/use-product-viewed-analytics.js +5 -14
- package/analytics/legacy-checkout.d.ts +2 -0
- package/analytics/legacy-checkout.js +26 -0
- package/analytics/sinks/converge-event-mapper.d.ts +10 -11
- package/analytics/sinks/converge-event-mapper.js +50 -133
- package/analytics/sinks/converge-sink.d.ts +8 -7
- package/analytics/sinks/converge-sink.js +21 -3
- package/analytics/sinks/elevar-sink.d.ts +9 -7
- package/analytics/sinks/elevar-sink.js +37 -128
- package/analytics/sinks/ga4-sink.d.ts +9 -8
- package/analytics/sinks/ga4-sink.js +9 -8
- package/analytics/sinks/intelligems-sink.d.ts +9 -8
- package/analytics/sinks/intelligems-sink.js +3 -1
- package/analytics/sinks/meta-sink.d.ts +5 -4
- package/analytics/sinks/meta-sink.js +7 -3
- package/analytics/sinks/northbeam-sink.d.ts +1 -0
- package/analytics/sinks/northbeam-sink.js +2 -0
- package/analytics/sinks/pinterest-sink.d.ts +7 -6
- package/analytics/sinks/pinterest-sink.js +14 -20
- package/analytics/sinks/reddit-sink.d.ts +8 -7
- package/analytics/sinks/reddit-sink.js +13 -20
- package/analytics/sinks/replo-sink.d.ts +21 -9
- package/analytics/sinks/replo-sink.js +37 -39
- package/analytics/sinks/snapchat-sink.d.ts +6 -5
- package/analytics/sinks/snapchat-sink.js +8 -8
- package/analytics/sinks/tiktok-sink.d.ts +8 -7
- package/analytics/sinks/tiktok-sink.js +10 -15
- package/analytics/sinks/window-sink.d.ts +11 -9
- package/analytics/sinks/window-sink.js +5 -1
- package/analytics/sinks/x-sink.d.ts +5 -4
- package/analytics/sinks/x-sink.js +19 -50
- package/analytics/test-fixtures.d.ts +5 -0
- package/analytics/test-fixtures.js +18 -0
- package/analytics/utils/analytics-products.d.ts +0 -30
- package/analytics/utils/analytics-products.js +1 -51
- package/analytics/utils/collection-analytics.d.ts +2 -15
- package/analytics/utils/collection-analytics.js +14 -18
- package/analytics/utils/product-analytics.d.ts +23 -0
- package/analytics/utils/product-analytics.js +21 -0
- package/cart/hooks/use-add-to-cart.js +1 -1
- package/cart/utils/cart-analytics.d.ts +3 -23
- package/cart/utils/cart-analytics.js +1 -1
- package/cart/utils/cart-utils.js +1 -1
- package/cart/utils/variant-to-cart-line.js +1 -1
- package/chunk-CKRRL66R.mjs +28 -0
- package/{chunk-VVB7BEDE.mjs → chunk-O4QBR4QC.mjs} +9 -4
- package/{chunk-EUIVDITZ.mjs → chunk-OPKMOW43.mjs} +1 -1
- package/{chunk-C37TXOGI.mjs → chunk-PSYP2DYM.mjs} +1 -1
- package/{chunk-ACQS4AG5.mjs → chunk-TTEBDCWT.mjs} +272 -109
- package/{chunk-HFKL4ZR5.mjs → chunk-XGXJOHUY.mjs} +2 -1
- package/{chunk-AQG3256R.mjs → chunk-XSMYSAKY.mjs} +0 -26
- package/{chunk-SSBIMQES.mjs → chunk-XWWFRIXV.mjs} +36 -99
- package/chunk-ZPDXVFCR.mjs +66 -0
- package/hooks/use-formatted-price.js +1 -1
- package/lib/buildMetadata.js +3 -3
- package/loaders/collection-loader.js +8 -6
- package/loaders/collection-products-loader.js +8 -6
- package/loaders/contentful-entries-loader.js +5 -3
- package/loaders/contentful-entry-loader.js +5 -3
- package/loaders/integration-loader-schemas.d.ts +260 -0
- package/loaders/integration-loader-schemas.js +55 -0
- package/loaders/invoke-loader.d.ts +5 -0
- package/loaders/invoke-loader.js +1 -1
- package/loaders/judgeme-review-aggregate-loader.d.ts +1 -1
- package/loaders/judgeme-review-aggregate-loader.js +10 -6
- package/loaders/judgeme-reviews-loader.d.ts +1 -1
- package/loaders/judgeme-reviews-loader.js +5 -3
- package/loaders/kaching-bundles-loader.js +5 -3
- package/loaders/levanta-product-loader.js +8 -6
- package/loaders/loox-review-aggregate-loader.d.ts +1 -1
- package/loaders/loox-review-aggregate-loader.js +10 -6
- package/loaders/loox-reviews-loader.d.ts +1 -1
- package/loaders/loox-reviews-loader.js +8 -6
- package/loaders/metaobject-loader.js +5 -3
- package/loaders/metaobjects-loader.js +5 -3
- package/loaders/okendo-review-aggregate-loader.d.ts +2 -7
- package/loaders/okendo-review-aggregate-loader.js +8 -12
- package/loaders/okendo-reviews-loader.d.ts +2 -42
- package/loaders/okendo-reviews-loader.js +5 -8
- package/loaders/product-loader.js +5 -3
- package/loaders/rebuy-recommendations-loader.d.ts +2 -167
- package/loaders/rebuy-recommendations-loader.js +8 -10
- package/loaders/reviews-io-review-aggregate-loader.d.ts +1 -1
- package/loaders/reviews-io-review-aggregate-loader.js +5 -3
- package/loaders/reviews-io-reviews-loader.d.ts +1 -1
- package/loaders/reviews-io-reviews-loader.js +7 -3
- package/loaders/shopify-integration-details-loader.js +10 -6
- package/loaders/smile-earning-rules-loader.d.ts +2 -8
- package/loaders/smile-earning-rules-loader.js +8 -16
- package/loaders/smile-rewards-loader.d.ts +2 -8
- package/loaders/smile-rewards-loader.js +8 -16
- package/loaders/smile-vip-tiers-loader.d.ts +2 -7
- package/loaders/smile-vip-tiers-loader.js +8 -15
- package/loaders/statsig-experiment-loader.js +5 -3
- package/loaders/yotpo-review-aggregate-loader.d.ts +1 -1
- package/loaders/yotpo-review-aggregate-loader.js +10 -6
- package/loaders/yotpo-reviews-loader.d.ts +1 -1
- package/loaders/yotpo-reviews-loader.js +5 -3
- package/money.d.ts +1 -1
- package/money.js +1 -1
- package/package.json +8 -4
- package/chunk-CQYCPDPI.mjs +0 -166
|
@@ -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 { yotpoProductReviewsLoaderOutputSchema } from "./loader-schemas";
|
|
8
7
|
function buildReviewsArgs({
|
|
9
8
|
productId,
|
|
10
9
|
perPage,
|
|
@@ -27,8 +26,11 @@ function YotpoReviewsLoaderInner({
|
|
|
27
26
|
const queryResult = useSuspenseQuery({
|
|
28
27
|
queryKey: [loaderKey, args],
|
|
29
28
|
queryFn: async () => {
|
|
30
|
-
const loadedData = await
|
|
31
|
-
|
|
29
|
+
const [loadedData, schemas] = await Promise.all([
|
|
30
|
+
invokeLoader({ loaderKey, args }),
|
|
31
|
+
import("./loader-schemas")
|
|
32
|
+
]);
|
|
33
|
+
return schemas.yotpoProductReviewsLoaderOutputSchema.parse(loadedData);
|
|
32
34
|
}
|
|
33
35
|
});
|
|
34
36
|
return /* @__PURE__ */ jsx(Fragment, { children: children(queryResult.data) });
|
package/money.d.ts
CHANGED
|
@@ -6,4 +6,4 @@
|
|
|
6
6
|
* APIs that speak decimal money.
|
|
7
7
|
* @module
|
|
8
8
|
*/
|
|
9
|
-
export { formatAmount, fromMinorUnitsToMajorUnits, fromMinorUnitsToMajorUnitsString, fromMajorUnitsToMinorUnits, } from "./_vendor/schemas/
|
|
9
|
+
export { formatAmount, fromMinorUnitsToMajorUnits, fromMinorUnitsToMajorUnitsString, fromMajorUnitsToMinorUnits, } from "./_vendor/schemas/moneyFormat";
|
package/money.js
CHANGED
package/package.json
CHANGED
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@replohq/sdk",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"reploBuild": {
|
|
5
5
|
"packageName": "@replohq/sdk",
|
|
6
|
-
"version": "
|
|
6
|
+
"version": "2.0.0",
|
|
7
7
|
"branch": "HEAD",
|
|
8
|
-
"commit": "
|
|
9
|
-
"builtAt": "2026-10-
|
|
8
|
+
"commit": "17bbe81f0395ba343461c4ec1df4662e1ede00bd",
|
|
9
|
+
"builtAt": "2026-10-19T23:10:20.892Z"
|
|
10
10
|
},
|
|
11
11
|
"description": "Replo SDK — cart, analytics, and data loaders for agent-built Next.js sites.",
|
|
12
12
|
"license": "SEE LICENSE IN LICENSE",
|
|
@@ -89,6 +89,10 @@
|
|
|
89
89
|
"types": "./analytics/analytics-provider.d.ts",
|
|
90
90
|
"default": "./analytics/analytics-provider.js"
|
|
91
91
|
},
|
|
92
|
+
"./analytics/analytics-sink": {
|
|
93
|
+
"types": "./analytics/analytics-sink.d.ts",
|
|
94
|
+
"default": "./analytics/analytics-sink.js"
|
|
95
|
+
},
|
|
92
96
|
"./analytics/sinks/intelligems-sink": {
|
|
93
97
|
"types": "./analytics/sinks/intelligems-sink.d.ts",
|
|
94
98
|
"default": "./analytics/sinks/intelligems-sink.js"
|
package/chunk-CQYCPDPI.mjs
DELETED
|
@@ -1,166 +0,0 @@
|
|
|
1
|
-
import { CONTENT_SEO_VALUE_KEYS, CONTENT_RELATED_VALUE_STORAGE_KEY, CONTENT_PRIVATE_VALUE_KEYS, isContentPrivateValueKey, LEGACY_CONTENT_ENTRY_STATUSES, getContentFieldValueSchema } from './chunk-RQ76VK3L.mjs';
|
|
2
|
-
import { pickBy_default } from './chunk-ACQS4AG5.mjs';
|
|
3
|
-
import { stringify, parseDocument } from 'yaml';
|
|
4
|
-
import * as z2 from 'zod';
|
|
5
|
-
|
|
6
|
-
var frontmatterDataSchema = z2.record(z2.string(), z2.unknown());
|
|
7
|
-
var CONTENT_FRONTMATTER_PATTERN = /^---\r?\n([\s\S]*?)\r?\n---\r?\n?/u;
|
|
8
|
-
function parseContentFrontmatterYaml(yamlText) {
|
|
9
|
-
try {
|
|
10
|
-
const document = parseDocument(yamlText, {
|
|
11
|
-
merge: false,
|
|
12
|
-
schema: "core",
|
|
13
|
-
strict: true,
|
|
14
|
-
uniqueKeys: true
|
|
15
|
-
});
|
|
16
|
-
if (document.errors.length > 0) {
|
|
17
|
-
return null;
|
|
18
|
-
}
|
|
19
|
-
const parsed = frontmatterDataSchema.safeParse(
|
|
20
|
-
document.toJS({ maxAliasCount: 20 })
|
|
21
|
-
);
|
|
22
|
-
return parsed.success ? parsed.data : null;
|
|
23
|
-
} catch {
|
|
24
|
-
return null;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
function parseContentFrontmatter(raw) {
|
|
28
|
-
const match = raw.match(CONTENT_FRONTMATTER_PATTERN);
|
|
29
|
-
if (!match) {
|
|
30
|
-
return null;
|
|
31
|
-
}
|
|
32
|
-
const values = parseContentFrontmatterYaml(match[1] ?? "");
|
|
33
|
-
if (values === null) {
|
|
34
|
-
return null;
|
|
35
|
-
}
|
|
36
|
-
return {
|
|
37
|
-
values,
|
|
38
|
-
body: raw.slice(match[0].length).replace(/^\r?\n/u, "")
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
var CONTENT_MANAGED_ENTRY_VALUE_KEYS = [
|
|
42
|
-
"slug",
|
|
43
|
-
"title",
|
|
44
|
-
"status",
|
|
45
|
-
"author",
|
|
46
|
-
"authorInitials",
|
|
47
|
-
"excerpt",
|
|
48
|
-
"coverImage",
|
|
49
|
-
"coverImageAlt",
|
|
50
|
-
"tags",
|
|
51
|
-
"updatedAt",
|
|
52
|
-
"publishedAt",
|
|
53
|
-
"archivedAt",
|
|
54
|
-
...CONTENT_SEO_VALUE_KEYS,
|
|
55
|
-
CONTENT_RELATED_VALUE_STORAGE_KEY,
|
|
56
|
-
...CONTENT_PRIVATE_VALUE_KEYS
|
|
57
|
-
];
|
|
58
|
-
var contentEntryFrontmatterSchema = z2.object({
|
|
59
|
-
slug: z2.unknown().optional(),
|
|
60
|
-
title: z2.string().nullish(),
|
|
61
|
-
author: z2.string().nullish(),
|
|
62
|
-
authorInitials: z2.string().nullish(),
|
|
63
|
-
excerpt: z2.string().nullish(),
|
|
64
|
-
coverImage: z2.string().nullish(),
|
|
65
|
-
coverImageAlt: z2.string().nullish(),
|
|
66
|
-
tags: z2.array(z2.string()).nullish(),
|
|
67
|
-
updatedAt: z2.string().nullish(),
|
|
68
|
-
publishedAt: z2.string().nullish(),
|
|
69
|
-
archivedAt: z2.string().nullish(),
|
|
70
|
-
seoTitle: z2.string().nullish(),
|
|
71
|
-
seoDescription: z2.string().nullish(),
|
|
72
|
-
related: z2.array(z2.string()).nullish(),
|
|
73
|
-
scratchpad: z2.unknown().optional(),
|
|
74
|
-
backlinks: z2.unknown().optional()
|
|
75
|
-
}).passthrough();
|
|
76
|
-
function parseContentEntryDocument(raw) {
|
|
77
|
-
const frontmatter = parseContentFrontmatter(raw);
|
|
78
|
-
if (!frontmatter) {
|
|
79
|
-
return {
|
|
80
|
-
status: "invalid",
|
|
81
|
-
message: "Entry frontmatter is missing or contains invalid YAML."
|
|
82
|
-
};
|
|
83
|
-
}
|
|
84
|
-
const parsedValues = contentEntryFrontmatterSchema.safeParse(
|
|
85
|
-
frontmatter.values
|
|
86
|
-
);
|
|
87
|
-
if (!parsedValues.success) {
|
|
88
|
-
const issue = parsedValues.error.issues[0];
|
|
89
|
-
const field = issue?.path.join(".");
|
|
90
|
-
return {
|
|
91
|
-
status: "invalid",
|
|
92
|
-
message: `${field ? `Invalid ${field}: ` : ""}${issue?.message ?? "Invalid entry fields."}`
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
return {
|
|
96
|
-
status: "ready",
|
|
97
|
-
document: {
|
|
98
|
-
values: parsedValues.data,
|
|
99
|
-
body: frontmatter.body
|
|
100
|
-
}
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
function serializeContentEntryDocument({
|
|
104
|
-
values,
|
|
105
|
-
body
|
|
106
|
-
}) {
|
|
107
|
-
const yamlText = stringify(values).replace(/\n+$/u, "");
|
|
108
|
-
const normalizedBody = `${body.replace(/\s+$/u, "")}
|
|
109
|
-
`;
|
|
110
|
-
return `---
|
|
111
|
-
${yamlText}
|
|
112
|
-
---
|
|
113
|
-
|
|
114
|
-
${normalizedBody}`;
|
|
115
|
-
}
|
|
116
|
-
function getContentRenderableEntryValues({
|
|
117
|
-
document,
|
|
118
|
-
slug
|
|
119
|
-
}) {
|
|
120
|
-
const publicFrontmatterValues = pickBy_default(document.values, (_value, fieldId) => {
|
|
121
|
-
return !isContentPrivateValueKey(fieldId);
|
|
122
|
-
});
|
|
123
|
-
return {
|
|
124
|
-
...publicFrontmatterValues,
|
|
125
|
-
relatedContent: publicFrontmatterValues[CONTENT_RELATED_VALUE_STORAGE_KEY] ?? [],
|
|
126
|
-
body: document.body,
|
|
127
|
-
slug
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
function convertLegacyContentEntryDocument(raw) {
|
|
131
|
-
const parsed = parseContentEntryDocument(raw);
|
|
132
|
-
if (parsed.status === "invalid") {
|
|
133
|
-
return null;
|
|
134
|
-
}
|
|
135
|
-
const { status, archivedAt, ...values } = parsed.document.values;
|
|
136
|
-
if (status === void 0 && archivedAt === void 0) {
|
|
137
|
-
return { legacyStatus: null, content: raw };
|
|
138
|
-
}
|
|
139
|
-
return {
|
|
140
|
-
legacyStatus: LEGACY_CONTENT_ENTRY_STATUSES.find((candidate) => candidate === status) ?? "draft",
|
|
141
|
-
content: serializeContentEntryDocument({
|
|
142
|
-
values,
|
|
143
|
-
body: parsed.document.body
|
|
144
|
-
})
|
|
145
|
-
};
|
|
146
|
-
}
|
|
147
|
-
function getContentEntryFieldValidationIssues({
|
|
148
|
-
fields,
|
|
149
|
-
values,
|
|
150
|
-
requireRequiredFields
|
|
151
|
-
}) {
|
|
152
|
-
return fields.flatMap((field) => {
|
|
153
|
-
if (!field.enabled || isContentPrivateValueKey(field.id)) {
|
|
154
|
-
return [];
|
|
155
|
-
}
|
|
156
|
-
const value = values[field.id];
|
|
157
|
-
const isMissing = value === void 0 || value === null || value === "";
|
|
158
|
-
if (isMissing) {
|
|
159
|
-
return requireRequiredFields && field.required ? [{ fieldId: field.id, message: "Required value is missing." }] : [];
|
|
160
|
-
}
|
|
161
|
-
const parsedValue = getContentFieldValueSchema(field.type).safeParse(value);
|
|
162
|
-
return parsedValue.success ? [] : [{ fieldId: field.id, message: "Value has the wrong format." }];
|
|
163
|
-
});
|
|
164
|
-
}
|
|
165
|
-
|
|
166
|
-
export { CONTENT_MANAGED_ENTRY_VALUE_KEYS, contentEntryFrontmatterSchema, convertLegacyContentEntryDocument, getContentEntryFieldValidationIssues, getContentRenderableEntryValues, parseContentEntryDocument, serializeContentEntryDocument };
|