@standhigher/besttrack-page-extension 0.5.10 → 0.5.11
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 +3 -3
- package/dist/index.js +69 -17
- package/package.json +1 -1
package/dist/index.d.ts
CHANGED
|
@@ -17,19 +17,19 @@ type SearchTab = 'order' | 'tracking';
|
|
|
17
17
|
type TrackingNode = {
|
|
18
18
|
node: string;
|
|
19
19
|
description: string;
|
|
20
|
-
time
|
|
20
|
+
time?: string | null;
|
|
21
21
|
location: string;
|
|
22
22
|
country: string;
|
|
23
23
|
state: string;
|
|
24
24
|
city: string;
|
|
25
25
|
street: string;
|
|
26
|
-
carrier
|
|
26
|
+
carrier?: string;
|
|
27
27
|
};
|
|
28
28
|
type RawEvent = {
|
|
29
29
|
stage: string;
|
|
30
30
|
sub_status: string;
|
|
31
31
|
description: string;
|
|
32
|
-
time
|
|
32
|
+
time?: string | null;
|
|
33
33
|
location: string;
|
|
34
34
|
country: string;
|
|
35
35
|
state: string;
|
package/dist/index.js
CHANGED
|
@@ -106,6 +106,11 @@ function formatTrackingDateTime(time, locale, options = {}) {
|
|
|
106
106
|
}).format(date);
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
+
// src/shopify-track-page/pages/home/asText.ts
|
|
110
|
+
function asText(value) {
|
|
111
|
+
return typeof value === "string" ? value : "";
|
|
112
|
+
}
|
|
113
|
+
|
|
109
114
|
// src/shopify-track-page/timeline.ts
|
|
110
115
|
var DEFAULT_INFO_NODE = {
|
|
111
116
|
node: "InfoReceived",
|
|
@@ -202,7 +207,7 @@ var legacyNodeStepMap = /* @__PURE__ */ new Map([
|
|
|
202
207
|
["Returning", "delivered"]
|
|
203
208
|
]);
|
|
204
209
|
var getStepKeyForStatus = (status) => {
|
|
205
|
-
const normalized = status
|
|
210
|
+
const normalized = asText(status).trim();
|
|
206
211
|
if (!normalized) return null;
|
|
207
212
|
const exactMatch = subStatusStepMap.get(normalized) ?? legacyNodeStepMap.get(normalized);
|
|
208
213
|
if (exactMatch) return exactMatch;
|
|
@@ -234,16 +239,16 @@ var buildStepsFromStatusRecords = (records, locale) => {
|
|
|
234
239
|
};
|
|
235
240
|
var buildStepsFromRawEvents = (events, locale) => buildStepsFromStatusRecords(
|
|
236
241
|
events.map((event) => ({
|
|
237
|
-
status: event.sub_status || event.stage
|
|
238
|
-
fallbackStatus: event.stage,
|
|
239
|
-
time: event.time
|
|
242
|
+
status: asText(event.sub_status) || asText(event.stage),
|
|
243
|
+
fallbackStatus: asText(event.stage) || void 0,
|
|
244
|
+
time: asText(event.time)
|
|
240
245
|
})),
|
|
241
246
|
locale
|
|
242
247
|
);
|
|
243
248
|
var buildStepsFromNodes = (nodeList, locale) => buildStepsFromStatusRecords(
|
|
244
249
|
nodeList.map((node) => ({
|
|
245
|
-
status: node.node,
|
|
246
|
-
time: node.time
|
|
250
|
+
status: asText(node.node),
|
|
251
|
+
time: asText(node.time)
|
|
247
252
|
})),
|
|
248
253
|
locale
|
|
249
254
|
);
|
|
@@ -273,7 +278,7 @@ var monthIndexMap = /* @__PURE__ */ new Map([
|
|
|
273
278
|
["dec", 11],
|
|
274
279
|
["december", 11]
|
|
275
280
|
]);
|
|
276
|
-
var normalizeNodeTime = (time) => time.replace(/\s+/g, " ").trim();
|
|
281
|
+
var normalizeNodeTime = (time) => asText(time).replace(/\s+/g, " ").trim();
|
|
277
282
|
var toParsedNodeTime = ({
|
|
278
283
|
year,
|
|
279
284
|
monthIndex,
|
|
@@ -367,8 +372,8 @@ var formatNodeTime = (time, locale) => formatTrackingDateTime(normalizeNodeTime(
|
|
|
367
372
|
var formatNodeDateLabel = (time, locale) => formatTrackingDateLabel(normalizeNodeTime(time), locale);
|
|
368
373
|
function formatEstimatedDelivery(estimatedDelivery, locale) {
|
|
369
374
|
if (!estimatedDelivery || !locale) return null;
|
|
370
|
-
const from = estimatedDelivery.from.trim();
|
|
371
|
-
const to = estimatedDelivery.to.trim();
|
|
375
|
+
const from = asText(estimatedDelivery.from).trim();
|
|
376
|
+
const to = asText(estimatedDelivery.to).trim();
|
|
372
377
|
if (!from || !to) return null;
|
|
373
378
|
const dateText = from === to ? formatTrackingDateLabel(from, locale) : `${formatTrackingDateLabel(from, locale)}-${formatTrackingDateLabel(to, locale)}`;
|
|
374
379
|
return {
|
|
@@ -401,7 +406,7 @@ var getLatestTrackingTimestamp = (milestone, now = /* @__PURE__ */ new Date()) =
|
|
|
401
406
|
};
|
|
402
407
|
var hasActualDelivery = (milestone) => {
|
|
403
408
|
const statuses = milestone.rawEventList?.length ? milestone.rawEventList.flatMap((event) => [event.sub_status, event.stage]) : milestone.nodeList.map((node) => node.node);
|
|
404
|
-
return statuses.some((status) => /^delivered(?:_|$)/i.test(status.trim()));
|
|
409
|
+
return statuses.some((status) => /^delivered(?:_|$)/i.test(asText(status).trim()));
|
|
405
410
|
};
|
|
406
411
|
function shouldShowEstimatedDelivery(milestone, now = /* @__PURE__ */ new Date()) {
|
|
407
412
|
const estimatedDelivery = milestone?.estimated_delivery;
|
|
@@ -469,14 +474,14 @@ var sortShippingDetailsByTime = (details, syntheticPrefixLength = 0) => {
|
|
|
469
474
|
};
|
|
470
475
|
var buildShippingDetailsFromRecords = (records, locale) => {
|
|
471
476
|
const filtered = records.filter(
|
|
472
|
-
(record) => record.location.trim() || record.description.trim() || record.time.trim()
|
|
477
|
+
(record) => asText(record.location).trim() || asText(record.description).trim() || asText(record.time).trim()
|
|
473
478
|
);
|
|
474
479
|
if (filtered.length === 0) return [];
|
|
475
480
|
const rawDetails = filtered.map((record, index) => {
|
|
476
481
|
const timeMeta = getNodeTimeMeta(record.time);
|
|
477
482
|
return {
|
|
478
483
|
index,
|
|
479
|
-
description: [record.location.trim(), record.description.trim()].filter(Boolean).join(", "),
|
|
484
|
+
description: [asText(record.location).trim(), asText(record.description).trim()].filter(Boolean).join(", "),
|
|
480
485
|
time: formatNodeTime(record.time, locale),
|
|
481
486
|
timestamp: timeMeta?.timestamp ?? null,
|
|
482
487
|
hasYear: timeMeta?.hasYear ?? false
|
|
@@ -491,10 +496,10 @@ var buildShippingDetailsFromRecords = (records, locale) => {
|
|
|
491
496
|
};
|
|
492
497
|
var buildShippingDetails = (nodeList, locale) => buildShippingDetailsFromRecords(nodeList, locale);
|
|
493
498
|
var hasRawTrackingSignal = (event) => Boolean(
|
|
494
|
-
event.sub_status.trim() || event.location.trim() || event.country.trim() || event.state.trim() || event.city.trim() || event.street.trim() || getStepKeyForStatus(event.stage)
|
|
499
|
+
asText(event.sub_status).trim() || asText(event.location).trim() || asText(event.country).trim() || asText(event.state).trim() || asText(event.city).trim() || asText(event.street).trim() || getStepKeyForStatus(event.stage)
|
|
495
500
|
);
|
|
496
501
|
var getSyntheticRawEventPrefixLength = (events) => {
|
|
497
|
-
const firstEventStage = events[0]?.stage.trim().toLowerCase();
|
|
502
|
+
const firstEventStage = asText(events[0]?.stage).trim().toLowerCase();
|
|
498
503
|
if (firstEventStage !== "order confirmed" && firstEventStage !== "package picked up") {
|
|
499
504
|
return 0;
|
|
500
505
|
}
|
|
@@ -519,7 +524,7 @@ function buildShippingDetailsFromMilestone(milestone, locale) {
|
|
|
519
524
|
}
|
|
520
525
|
var buildShippingDetailsFromRawEvents = (events, locale) => {
|
|
521
526
|
const filtered = events.filter(
|
|
522
|
-
(event) => event.location.trim() || event.description.trim() || event.time.trim()
|
|
527
|
+
(event) => asText(event.location).trim() || asText(event.description).trim() || asText(event.time).trim()
|
|
523
528
|
);
|
|
524
529
|
if (filtered.length === 0) return [];
|
|
525
530
|
const syntheticPrefixLength = getSyntheticRawEventPrefixLength(filtered);
|
|
@@ -527,7 +532,7 @@ var buildShippingDetailsFromRawEvents = (events, locale) => {
|
|
|
527
532
|
const timeMeta = getNodeTimeMeta(event.time);
|
|
528
533
|
return {
|
|
529
534
|
index,
|
|
530
|
-
description: [event.location.trim(), event.description.trim()].filter(Boolean).join(", "),
|
|
535
|
+
description: [asText(event.location).trim(), asText(event.description).trim()].filter(Boolean).join(", "),
|
|
531
536
|
time: formatNodeTime(event.time, locale),
|
|
532
537
|
timestamp: timeMeta?.timestamp ?? null,
|
|
533
538
|
hasYear: timeMeta?.hasYear ?? false
|
|
@@ -540,6 +545,53 @@ var buildShippingDetailsFromRawEvents = (events, locale) => {
|
|
|
540
545
|
isLatest: index === 0
|
|
541
546
|
}));
|
|
542
547
|
};
|
|
548
|
+
var sanitizeTrackingNode = (node) => ({
|
|
549
|
+
node: asText(node?.node),
|
|
550
|
+
description: asText(node?.description),
|
|
551
|
+
time: asText(node?.time),
|
|
552
|
+
location: asText(node?.location),
|
|
553
|
+
country: asText(node?.country),
|
|
554
|
+
state: asText(node?.state),
|
|
555
|
+
city: asText(node?.city),
|
|
556
|
+
street: asText(node?.street),
|
|
557
|
+
carrier: asText(node?.carrier)
|
|
558
|
+
});
|
|
559
|
+
var sanitizeRawEvent = (event) => ({
|
|
560
|
+
stage: asText(event?.stage),
|
|
561
|
+
sub_status: asText(event?.sub_status),
|
|
562
|
+
description: asText(event?.description),
|
|
563
|
+
time: asText(event?.time),
|
|
564
|
+
location: asText(event?.location),
|
|
565
|
+
country: asText(event?.country),
|
|
566
|
+
state: asText(event?.state),
|
|
567
|
+
city: asText(event?.city),
|
|
568
|
+
street: asText(event?.street)
|
|
569
|
+
});
|
|
570
|
+
var sanitizePackageItem = (item) => ({
|
|
571
|
+
product_id: asText(item?.product_id),
|
|
572
|
+
variant_id: asText(item?.variant_id),
|
|
573
|
+
title: asText(item?.title),
|
|
574
|
+
variant_title: asText(item?.variant_title),
|
|
575
|
+
image_url: asText(item?.image_url),
|
|
576
|
+
quantity: typeof item?.quantity === "number" && Number.isFinite(item.quantity) ? item.quantity : 0
|
|
577
|
+
});
|
|
578
|
+
var sanitizeEstimatedDelivery = (estimatedDelivery) => {
|
|
579
|
+
if (!estimatedDelivery) return void 0;
|
|
580
|
+
return {
|
|
581
|
+
...estimatedDelivery,
|
|
582
|
+
from: asText(estimatedDelivery.from),
|
|
583
|
+
to: asText(estimatedDelivery.to)
|
|
584
|
+
};
|
|
585
|
+
};
|
|
586
|
+
var sanitizeMilestone = (milestone) => ({
|
|
587
|
+
tracking_number: asText(milestone?.tracking_number),
|
|
588
|
+
nodeList: Array.isArray(milestone?.nodeList) ? milestone.nodeList.map(sanitizeTrackingNode) : [],
|
|
589
|
+
rawEventList: Array.isArray(milestone?.rawEventList) ? milestone.rawEventList.map(sanitizeRawEvent) : void 0,
|
|
590
|
+
carrier: asText(milestone?.carrier),
|
|
591
|
+
package_items: Array.isArray(milestone?.package_items) ? milestone.package_items.map(sanitizePackageItem) : [],
|
|
592
|
+
estimated_delivery: sanitizeEstimatedDelivery(milestone?.estimated_delivery)
|
|
593
|
+
});
|
|
594
|
+
var sanitizeMilestones = (milestones) => Array.isArray(milestones) ? milestones.map(sanitizeMilestone) : [];
|
|
543
595
|
function normalizeOrderValue(value) {
|
|
544
596
|
return value.trim();
|
|
545
597
|
}
|
|
@@ -819,7 +871,7 @@ function mapShopifyTrackQueryResponse(response, request, locale = "EN") {
|
|
|
819
871
|
return emptyResult();
|
|
820
872
|
}
|
|
821
873
|
const data = response.data;
|
|
822
|
-
const milestones = data?.mileStoneList
|
|
874
|
+
const milestones = sanitizeMilestones(data?.mileStoneList);
|
|
823
875
|
const shipments = milestones.map((milestone, index) => mapMilestone(milestone, locale, index));
|
|
824
876
|
const primary = shipments[0] ?? mapMilestone(void 0, locale, 0);
|
|
825
877
|
const trackingNumber = request.mode === "tracking" ? request.trackingNumber.trim() : primary.trackingNumber || "";
|