@standhigher/besttrack-page-extension 0.5.10 → 0.5.12
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/dist/index.d.ts +128 -108
- package/dist/index.js +979 -779
- package/dist/validation.js +6 -3
- package/package.json +2 -2
- package/dist/{chunk-KEW42Y26.js → chunk-KD7KFFFK.js} +28 -28
package/dist/validation.js
CHANGED
|
@@ -2,7 +2,7 @@ import {
|
|
|
2
2
|
isSafeTrackingPageUrl,
|
|
3
3
|
isShopifyResourceReference,
|
|
4
4
|
isValidTrackingNumber
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-KD7KFFFK.js";
|
|
6
6
|
|
|
7
7
|
// src/validation.ts
|
|
8
8
|
var textField = { field: "besttrack.validation.text", control: "text" };
|
|
@@ -78,7 +78,9 @@ var brandedContracts = [
|
|
|
78
78
|
block("besttrack.branded.tracking-experience", 1, ["heading", "submitLabel", "trackAnotherLabel", "defaultTrackingNumber", "defaultOrderNumber", "defaultQueryMode", "trackingTabLabel", "orderTabLabel", "shipmentLabels", "heroImageUrl"], ["brand", "compact"], void 0, ["heroImageUrl"]),
|
|
79
79
|
block("besttrack.branded.query", 1, ["heading", "submitLabel", "defaultTrackingNumber", "defaultOrderNumber", "defaultQueryMode", "trackingTabLabel", "orderTabLabel", "shipmentLabels", "heroImageUrl"], ["brand", "compact"], void 0, ["heroImageUrl"]),
|
|
80
80
|
block("besttrack.branded.order-items", 1, ["heading"], ["brand", "minimal"]),
|
|
81
|
-
|
|
81
|
+
// 服务端文档契约同步新增的商家选品字段,最后一项声明 products 控件,避免把商品数组当文本校验。
|
|
82
|
+
// hideWhenEmpty 继续接收旧文档数据;实际 Web 显隐已统一,不再受这个遗留值控制。
|
|
83
|
+
block("besttrack.branded.recommendations", 1, ["heading", "hideWhenEmpty", "products"], ["brand", "editorial"], void 0, [], [], ["products"]),
|
|
82
84
|
block("besttrack.branded.quick-links", 1, ["heading", "primaryLabel", "primaryHref", "secondaryLabel", "secondaryHref"], ["brand"], void 0, ["primaryHref", "secondaryHref"]),
|
|
83
85
|
block("besttrack.branded.blog", 1, ["heading", "articleTitle", "excerpt", "articleHref", "linkLabel"], ["brand"], void 0, ["articleHref"])
|
|
84
86
|
];
|
|
@@ -90,7 +92,8 @@ var salesContracts = [
|
|
|
90
92
|
block("besttrack.sales.service-cards", 1, ["heading", "firstTitle", "firstDescription", "secondTitle", "secondDescription"], ["hero", "commerce"], textProps([["heading", 120], ["firstTitle", 120], ["firstDescription", 280], ["secondTitle", 120], ["secondDescription", 280]])),
|
|
91
93
|
block("besttrack.sales.product-categories", 3, ["heading", "collection"], ["hero", "commerce", "grid"], validateCategories, [], ["collection"]),
|
|
92
94
|
block("besttrack.sales.featured-product", 1, ["heading", "product"], ["hero", "commerce"], validateFeaturedProduct, [], ["product"]),
|
|
93
|
-
|
|
95
|
+
// 与 Sales 编辑器字段定义同步;只校验文档里的选品配置,不把 Runtime 推荐结果写入文档。
|
|
96
|
+
block("besttrack.sales.recommendations", 1, ["heading", "products"], ["hero", "commerce", "grid"], textProps([["heading", 120]]), [], [], ["products"])
|
|
94
97
|
];
|
|
95
98
|
function template(id, version, requiredBlocks) {
|
|
96
99
|
return {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@standhigher/besttrack-page-extension",
|
|
3
|
-
"version": "0.5.
|
|
3
|
+
"version": "0.5.12",
|
|
4
4
|
"description": "BestTrack business extension entry point for @standhigher/puck-page-builder.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"files": [
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"dependencies": {
|
|
23
23
|
"embla-carousel-autoplay": "^8.6.0",
|
|
24
24
|
"embla-carousel-react": "^8.6.0",
|
|
25
|
-
"@standhigher/puck-page-builder": "0.12.
|
|
25
|
+
"@standhigher/puck-page-builder": "0.12.12"
|
|
26
26
|
},
|
|
27
27
|
"devDependencies": {
|
|
28
28
|
"tsup": "^8.5.1",
|
|
@@ -1,29 +1,3 @@
|
|
|
1
|
-
// src/tracking-page-url.ts
|
|
2
|
-
function hasControlCharacter(value) {
|
|
3
|
-
return [...value].some((character) => character.charCodeAt(0) < 32);
|
|
4
|
-
}
|
|
5
|
-
function isLocalDevelopmentHost(hostname) {
|
|
6
|
-
return hostname === "localhost" || hostname === "127.0.0.1" || hostname === "[::1]";
|
|
7
|
-
}
|
|
8
|
-
function allowsLocalhostByDefault() {
|
|
9
|
-
return typeof window !== "undefined" && isLocalDevelopmentHost(window.location.hostname);
|
|
10
|
-
}
|
|
11
|
-
function safeTrackingPageUrl(value, options = {}) {
|
|
12
|
-
if (typeof value !== "string" || !value || value.trim() !== value || hasControlCharacter(value)) return void 0;
|
|
13
|
-
try {
|
|
14
|
-
const url = new URL(value);
|
|
15
|
-
if (url.username || url.password) return void 0;
|
|
16
|
-
if (url.protocol === "https:" && !isLocalDevelopmentHost(url.hostname)) return url.toString();
|
|
17
|
-
if (url.protocol === "http:" && isLocalDevelopmentHost(url.hostname) && (options.allowLocalhost ?? allowsLocalhostByDefault())) return url.toString();
|
|
18
|
-
return void 0;
|
|
19
|
-
} catch {
|
|
20
|
-
return void 0;
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
function isSafeTrackingPageUrl(value, options) {
|
|
24
|
-
return safeTrackingPageUrl(value, options) !== void 0;
|
|
25
|
-
}
|
|
26
|
-
|
|
27
1
|
// src/tracking-page-runtime.ts
|
|
28
2
|
function isValidTrackingNumber(value) {
|
|
29
3
|
return /^[A-Za-z0-9_-]{6,64}$/.test(value);
|
|
@@ -53,6 +27,32 @@ function formatTrackingPageMoney(value, locale = "en-US") {
|
|
|
53
27
|
}
|
|
54
28
|
}
|
|
55
29
|
|
|
30
|
+
// src/tracking-page-url.ts
|
|
31
|
+
function hasControlCharacter(value) {
|
|
32
|
+
return [...value].some((character) => character.charCodeAt(0) < 32);
|
|
33
|
+
}
|
|
34
|
+
function isLocalDevelopmentHost(hostname) {
|
|
35
|
+
return hostname === "localhost" || hostname === "127.0.0.1" || hostname === "[::1]";
|
|
36
|
+
}
|
|
37
|
+
function allowsLocalhostByDefault() {
|
|
38
|
+
return typeof window !== "undefined" && isLocalDevelopmentHost(window.location.hostname);
|
|
39
|
+
}
|
|
40
|
+
function safeTrackingPageUrl(value, options = {}) {
|
|
41
|
+
if (typeof value !== "string" || !value || value.trim() !== value || hasControlCharacter(value)) return void 0;
|
|
42
|
+
try {
|
|
43
|
+
const url = new URL(value);
|
|
44
|
+
if (url.username || url.password) return void 0;
|
|
45
|
+
if (url.protocol === "https:" && !isLocalDevelopmentHost(url.hostname)) return url.toString();
|
|
46
|
+
if (url.protocol === "http:" && isLocalDevelopmentHost(url.hostname) && (options.allowLocalhost ?? allowsLocalhostByDefault())) return url.toString();
|
|
47
|
+
return void 0;
|
|
48
|
+
} catch {
|
|
49
|
+
return void 0;
|
|
50
|
+
}
|
|
51
|
+
}
|
|
52
|
+
function isSafeTrackingPageUrl(value, options) {
|
|
53
|
+
return safeTrackingPageUrl(value, options) !== void 0;
|
|
54
|
+
}
|
|
55
|
+
|
|
56
56
|
// src/shopify-resource-contract.ts
|
|
57
57
|
var resourcePattern = /^gid:\/\/shopify\/(Product|Collection)\/[1-9]\d*$/;
|
|
58
58
|
function isShopifyResourceReference(value, kind) {
|
|
@@ -112,14 +112,14 @@ function getShopifyResourceResolutionError(reference, resolution) {
|
|
|
112
112
|
}
|
|
113
113
|
|
|
114
114
|
export {
|
|
115
|
-
safeTrackingPageUrl,
|
|
116
|
-
isSafeTrackingPageUrl,
|
|
117
115
|
isValidTrackingNumber,
|
|
118
116
|
isValidOrderNumber,
|
|
119
117
|
isValidOrderEmail,
|
|
120
118
|
isEmptyTrackingPageResult,
|
|
121
119
|
isTrackingPageResourceReference,
|
|
122
120
|
formatTrackingPageMoney,
|
|
121
|
+
safeTrackingPageUrl,
|
|
122
|
+
isSafeTrackingPageUrl,
|
|
123
123
|
isShopifyResourceReference,
|
|
124
124
|
resolveShopifyResources,
|
|
125
125
|
getResolvedShopifyResource,
|