@codextech/commerce-platform 0.1.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 (50) hide show
  1. package/README.md +51 -0
  2. package/dist/cart/index.d.ts +41 -0
  3. package/dist/cart/index.d.ts.map +1 -0
  4. package/dist/cart/index.js +278 -0
  5. package/dist/cart/index.js.map +1 -0
  6. package/dist/catalog/index.d.ts +4 -0
  7. package/dist/catalog/index.d.ts.map +1 -0
  8. package/dist/catalog/index.js +2 -0
  9. package/dist/catalog/index.js.map +1 -0
  10. package/dist/connectors/pinnacle/catalog.d.ts +63 -0
  11. package/dist/connectors/pinnacle/catalog.d.ts.map +1 -0
  12. package/dist/connectors/pinnacle/catalog.js +238 -0
  13. package/dist/connectors/pinnacle/catalog.js.map +1 -0
  14. package/dist/connectors/pinnacle/index.d.ts +3 -0
  15. package/dist/connectors/pinnacle/index.d.ts.map +1 -0
  16. package/dist/connectors/pinnacle/index.js +3 -0
  17. package/dist/connectors/pinnacle/index.js.map +1 -0
  18. package/dist/connectors/pinnacle/taxonomy.d.ts +53 -0
  19. package/dist/connectors/pinnacle/taxonomy.d.ts.map +1 -0
  20. package/dist/connectors/pinnacle/taxonomy.js +206 -0
  21. package/dist/connectors/pinnacle/taxonomy.js.map +1 -0
  22. package/dist/errors/index.d.ts +47 -0
  23. package/dist/errors/index.d.ts.map +1 -0
  24. package/dist/errors/index.js +257 -0
  25. package/dist/errors/index.js.map +1 -0
  26. package/dist/images/index.d.ts +31 -0
  27. package/dist/images/index.d.ts.map +1 -0
  28. package/dist/images/index.js +39 -0
  29. package/dist/images/index.js.map +1 -0
  30. package/dist/index.d.ts +10 -0
  31. package/dist/index.d.ts.map +1 -0
  32. package/dist/index.js +9 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/money/index.d.ts +5 -0
  35. package/dist/money/index.d.ts.map +1 -0
  36. package/dist/money/index.js +29 -0
  37. package/dist/money/index.js.map +1 -0
  38. package/dist/react-router/index.d.ts +3 -0
  39. package/dist/react-router/index.d.ts.map +1 -0
  40. package/dist/react-router/index.js +2 -0
  41. package/dist/react-router/index.js.map +1 -0
  42. package/dist/shopify/index.d.ts +107 -0
  43. package/dist/shopify/index.d.ts.map +1 -0
  44. package/dist/shopify/index.js +524 -0
  45. package/dist/shopify/index.js.map +1 -0
  46. package/dist/types/index.d.ts +172 -0
  47. package/dist/types/index.d.ts.map +1 -0
  48. package/dist/types/index.js +2 -0
  49. package/dist/types/index.js.map +1 -0
  50. package/package.json +72 -0
@@ -0,0 +1,238 @@
1
+ import { categoryLabelFromSlug, categoryQueryForSlug, categorySlugFromLabel, extractTagValue, getPinnacleTaxonomy, labelFromPinnacleCode, normalizePinnacleCode, slugifyCatalogValue, } from "./taxonomy.js";
2
+ export const PINNACLE_CATALOG_PAGE_SIZE = 24;
3
+ const VALID_SORTS = new Set(["relevance", "price-low", "price-high", "newest", "deals"]);
4
+ export function parsePinnacleCatalogState(searchParams, routeCategorySlug) {
5
+ const categoryParam = searchParams.get("category") ?? routeCategorySlug ?? null;
6
+ const categorySlug = normalizeCategorySlug(categoryParam);
7
+ const sort = searchParams.get("sort") ?? "relevance";
8
+ const availableParam = searchParams.get("available");
9
+ const before = cleanParam(searchParams.get("before"));
10
+ const after = before ? null : cleanParam(searchParams.get("after"));
11
+ return {
12
+ categorySlug,
13
+ categoryLabel: categoryLabelFromSlug(categorySlug),
14
+ q: cleanParam(searchParams.get("q") ?? searchParams.get("query")) ?? "",
15
+ sort: VALID_SORTS.has(sort) ? sort : "relevance",
16
+ makes: normalizeListParams(searchParams, ["make", "makes"]),
17
+ models: normalizeListParams(searchParams, ["model", "models"]),
18
+ years: normalizeListParams(searchParams, ["year", "years"], false),
19
+ minPrice: normalizePriceParam(searchParams.get("minPrice") ?? searchParams.get("min")),
20
+ maxPrice: normalizePriceParam(searchParams.get("maxPrice") ?? searchParams.get("max")),
21
+ available: !availableParam || !["all", "false", "0", "no"].includes(availableParam.toLowerCase()),
22
+ after,
23
+ before,
24
+ pageSize: normalizePageSize(searchParams.get("limit")),
25
+ };
26
+ }
27
+ export function pinnacleSearchInputFromState(state) {
28
+ const rawQueryParts = [];
29
+ const categoryQuery = categoryQueryForSlug(state.categorySlug);
30
+ if (categoryQuery)
31
+ rawQueryParts.push(categoryQuery);
32
+ const makeQuery = buildMakeQuery(state.makes);
33
+ if (makeQuery)
34
+ rawQueryParts.push(makeQuery);
35
+ const modelQuery = buildTagQuery("Model", state.models);
36
+ if (modelQuery)
37
+ rawQueryParts.push(modelQuery);
38
+ const yearQuery = buildTagQuery("Year", state.years);
39
+ if (yearQuery)
40
+ rawQueryParts.push(yearQuery);
41
+ return {
42
+ query: state.q || null,
43
+ rawQueryParts,
44
+ minPrice: state.minPrice,
45
+ maxPrice: state.maxPrice,
46
+ available: state.available ? true : null,
47
+ first: state.before ? null : state.pageSize,
48
+ last: state.before ? state.pageSize : null,
49
+ after: state.after,
50
+ before: state.before,
51
+ sortMode: state.sort,
52
+ };
53
+ }
54
+ export function buildPinnacleCatalogFacets(products, state, shopifyFilters = []) {
55
+ const makeCounts = new Map();
56
+ const modelCounts = new Map();
57
+ const yearCounts = new Map();
58
+ const prices = [];
59
+ for (const product of products) {
60
+ const taxonomy = getPinnacleTaxonomy(product);
61
+ const price = Number.parseFloat(product.priceRange.minVariantPrice.amount);
62
+ if (Number.isFinite(price)) {
63
+ prices.push(price);
64
+ }
65
+ if (taxonomy.make) {
66
+ incrementFacet(makeCounts, taxonomy.make, taxonomy.makeLabel ?? labelFromPinnacleCode(taxonomy.make));
67
+ }
68
+ if (taxonomy.model) {
69
+ incrementFacet(modelCounts, taxonomy.model, taxonomy.modelLabel ?? labelFromPinnacleCode(taxonomy.model));
70
+ }
71
+ if (taxonomy.year) {
72
+ incrementFacet(yearCounts, taxonomy.year, taxonomy.year);
73
+ }
74
+ }
75
+ addShopifyMakeFacets(makeCounts, shopifyFilters);
76
+ for (const make of state.makes) {
77
+ ensureFacet(makeCounts, make, labelFromPinnacleCode(make));
78
+ }
79
+ for (const model of state.models) {
80
+ ensureFacet(modelCounts, model, labelFromPinnacleCode(model));
81
+ }
82
+ for (const year of state.years) {
83
+ ensureFacet(yearCounts, year, year);
84
+ }
85
+ const minFromState = parsePriceNumber(state.minPrice);
86
+ const maxFromState = parsePriceNumber(state.maxPrice);
87
+ const priceMin = Math.min(...prices, minFromState ?? 50);
88
+ const priceMax = Math.max(...prices, maxFromState ?? 2500);
89
+ return {
90
+ makeOptions: sortFacetOptions(makeCounts),
91
+ modelOptions: sortFacetOptions(modelCounts),
92
+ yearOptions: sortFacetOptions(yearCounts),
93
+ priceBounds: {
94
+ min: Math.max(0, roundPriceDown(Number.isFinite(priceMin) ? priceMin : 50)),
95
+ max: roundPriceUp(Number.isFinite(priceMax) ? priceMax : 2500),
96
+ },
97
+ };
98
+ }
99
+ export function buildPinnacleCatalogHref(requestUrl, updates) {
100
+ const url = new URL(requestUrl);
101
+ const params = new URLSearchParams(url.searchParams);
102
+ for (const [key, value] of Object.entries(updates)) {
103
+ params.delete(key);
104
+ if (value === null || value === undefined || value === "" || value === false) {
105
+ continue;
106
+ }
107
+ if (Array.isArray(value)) {
108
+ for (const item of value) {
109
+ if (item)
110
+ params.append(key, String(item));
111
+ }
112
+ continue;
113
+ }
114
+ params.set(key, String(value));
115
+ }
116
+ const query = params.toString();
117
+ return `${url.pathname}${query ? `?${query}` : ""}`;
118
+ }
119
+ export function buildPinnaclePaginationHrefs(requestUrl, pageInfo) {
120
+ return {
121
+ previousHref: pageInfo.hasPreviousPage && pageInfo.startCursor
122
+ ? buildPinnacleCatalogHref(requestUrl, { before: pageInfo.startCursor, after: null })
123
+ : null,
124
+ nextHref: pageInfo.hasNextPage && pageInfo.endCursor
125
+ ? buildPinnacleCatalogHref(requestUrl, { after: pageInfo.endCursor, before: null })
126
+ : null,
127
+ };
128
+ }
129
+ export function categoryParamFromLabel(category) {
130
+ const slug = categorySlugFromLabel(category);
131
+ return slug === "all" ? null : slug;
132
+ }
133
+ export { categoryLabelFromSlug, categorySlugFromLabel, slugifyCatalogValue };
134
+ function normalizeCategorySlug(value) {
135
+ const slug = slugifyCatalogValue(value ?? "");
136
+ return slug && categoryLabelFromSlug(slug) !== "All" ? slug : null;
137
+ }
138
+ function normalizeListParams(searchParams, names, normalize = true) {
139
+ const values = names.flatMap((name) => searchParams.getAll(name)).flatMap((value) => value.split(","));
140
+ const normalized = values.map((value) => {
141
+ const clean = cleanParam(value);
142
+ return clean ? (normalize ? normalizePinnacleCode(clean) : clean.trim()) : "";
143
+ });
144
+ return [...new Set(normalized.filter(Boolean))];
145
+ }
146
+ function cleanParam(value) {
147
+ const clean = String(value ?? "").trim();
148
+ return clean || null;
149
+ }
150
+ function normalizePriceParam(value) {
151
+ const parsed = parsePriceNumber(value);
152
+ return parsed === null ? null : parsed.toFixed(2);
153
+ }
154
+ function parsePriceNumber(value) {
155
+ if (!value)
156
+ return null;
157
+ const parsed = Number.parseFloat(value);
158
+ return Number.isFinite(parsed) && parsed >= 0 ? parsed : null;
159
+ }
160
+ function normalizePageSize(value) {
161
+ const parsed = Number.parseInt(value ?? "", 10);
162
+ if (!Number.isFinite(parsed))
163
+ return PINNACLE_CATALOG_PAGE_SIZE;
164
+ return Math.min(Math.max(parsed, 1), 100);
165
+ }
166
+ function buildMakeQuery(makes) {
167
+ const parts = makes.flatMap((make) => {
168
+ const label = labelFromPinnacleCode(make);
169
+ return [
170
+ fieldQuery("tag", `Make_${make}`),
171
+ fieldQuery("vendor", make),
172
+ label && label !== make ? fieldQuery("vendor", label) : null,
173
+ ];
174
+ });
175
+ return buildOrGroup(parts);
176
+ }
177
+ function buildTagQuery(key, values) {
178
+ return buildOrGroup(values.map((value) => fieldQuery("tag", `${key}_${normalizePinnacleCode(value)}`)));
179
+ }
180
+ function fieldQuery(field, value) {
181
+ if (!value)
182
+ return null;
183
+ return `${field}:${quoteFieldValue(value)}`;
184
+ }
185
+ function buildOrGroup(parts) {
186
+ const uniqueParts = [...new Set(parts.filter(Boolean))];
187
+ if (uniqueParts.length === 0)
188
+ return null;
189
+ if (uniqueParts.length === 1)
190
+ return uniqueParts[0] ?? null;
191
+ return `(${uniqueParts.join(" OR ")})`;
192
+ }
193
+ function quoteFieldValue(value) {
194
+ return /^[A-Za-z0-9_]+$/u.test(value) ? value : `"${value.replace(/"/gu, '\\"')}"`;
195
+ }
196
+ function incrementFacet(map, value, label) {
197
+ const current = map.get(value);
198
+ if (current) {
199
+ current.count += 1;
200
+ return;
201
+ }
202
+ map.set(value, { value, label, count: 1 });
203
+ }
204
+ function ensureFacet(map, value, label) {
205
+ if (!map.has(value)) {
206
+ map.set(value, { value, label, count: 0 });
207
+ }
208
+ }
209
+ function addShopifyMakeFacets(map, filters) {
210
+ for (const filter of filters ?? []) {
211
+ const looksLikeMakeFilter = /vendor|make|brand/iu.test(`${filter.id} ${filter.label}`);
212
+ for (const value of filter.values ?? []) {
213
+ const tagMake = extractTagValue([value.label], "Make");
214
+ const rawMake = tagMake || (looksLikeMakeFilter ? normalizePinnacleCode(value.label) : "");
215
+ if (!rawMake)
216
+ continue;
217
+ const label = tagMake ? labelFromPinnacleCode(tagMake) : value.label;
218
+ const current = map.get(rawMake);
219
+ if (!current || current.count === 0) {
220
+ map.set(rawMake, {
221
+ value: rawMake,
222
+ label,
223
+ count: value.count,
224
+ });
225
+ }
226
+ }
227
+ }
228
+ }
229
+ function sortFacetOptions(map) {
230
+ return [...map.values()].sort((a, b) => b.count - a.count || a.label.localeCompare(b.label));
231
+ }
232
+ function roundPriceDown(value) {
233
+ return Math.floor(value / 50) * 50;
234
+ }
235
+ function roundPriceUp(value) {
236
+ return Math.max(50, Math.ceil(value / 50) * 50);
237
+ }
238
+ //# sourceMappingURL=catalog.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../../src/connectors/pinnacle/catalog.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ export * from "./taxonomy.js";
2
+ export * from "./catalog.js";
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/connectors/pinnacle/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,3 @@
1
+ export * from "./taxonomy.js";
2
+ export * from "./catalog.js";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/connectors/pinnacle/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,cAAc,CAAC"}
@@ -0,0 +1,53 @@
1
+ import type { StorefrontProduct } from "../../types/index.js";
2
+ export declare const PINNACLE_CATEGORIES: readonly [{
3
+ readonly id: "batteries";
4
+ readonly label: "Batteries";
5
+ }, {
6
+ readonly id: "engines";
7
+ readonly label: "Engines";
8
+ }, {
9
+ readonly id: "transmissions";
10
+ readonly label: "Transmissions";
11
+ }, {
12
+ readonly id: "body-panels";
13
+ readonly label: "Body Panels";
14
+ }, {
15
+ readonly id: "electrical";
16
+ readonly label: "Electrical";
17
+ }, {
18
+ readonly id: "suspension";
19
+ readonly label: "Suspension";
20
+ }, {
21
+ readonly id: "braking";
22
+ readonly label: "Braking";
23
+ }, {
24
+ readonly id: "wheels";
25
+ readonly label: "Wheels";
26
+ }];
27
+ export type PinnacleCategoryId = (typeof PINNACLE_CATEGORIES)[number]["id"];
28
+ export interface PinnacleProductLike {
29
+ title: string;
30
+ vendor: string;
31
+ productType: string;
32
+ tags: readonly string[];
33
+ }
34
+ export interface PinnacleTaxonomy {
35
+ categoryId: PinnacleCategoryId;
36
+ categoryLabel: string;
37
+ make: string | null;
38
+ makeLabel: string | null;
39
+ model: string | null;
40
+ modelLabel: string | null;
41
+ year: string | null;
42
+ productType: string;
43
+ }
44
+ export declare function slugifyCatalogValue(value: string): string;
45
+ export declare function categoryLabelFromSlug(slug?: string | null): "Batteries" | "Engines" | "Transmissions" | "Body Panels" | "Electrical" | "Suspension" | "Braking" | "Wheels" | "All";
46
+ export declare function categorySlugFromLabel(label: string): string;
47
+ export declare function categoryProductTypesForSlug(slug?: string | null): string[];
48
+ export declare function categoryQueryForSlug(slug?: string | null): string | null;
49
+ export declare function normalizePinnacleCode(value?: string | null): string;
50
+ export declare function labelFromPinnacleCode(value?: string | null): string;
51
+ export declare function getPinnacleTaxonomy<TProduct extends PinnacleProductLike | StorefrontProduct>(product: TProduct): PinnacleTaxonomy;
52
+ export declare function extractTagValue(tags: readonly string[], key: string): string | null;
53
+ //# sourceMappingURL=taxonomy.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taxonomy.d.ts","sourceRoot":"","sources":["../../../src/connectors/pinnacle/taxonomy.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,sBAAsB,CAAC;AAE9D,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;;;;;;;;EAStB,CAAC;AAEX,MAAM,MAAM,kBAAkB,GAAG,CAAC,OAAO,mBAAmB,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAE5E,MAAM,WAAW,mBAAmB;IAClC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,UAAU,EAAE,kBAAkB,CAAC;IAC/B,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAC;IACzB,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;IACrB,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;CACrB;AAoHD,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,UAMhD;AAED,wBAAgB,qBAAqB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,0HAGzD;AAED,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,MAAM,UAIlD;AAED,wBAAgB,2BAA2B,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,YAG/D;AAED,wBAAgB,oBAAoB,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,iBAMxD;AAED,wBAAgB,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,UAQ1D;AAED,wBAAgB,qBAAqB,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,UAU1D;AAED,wBAAgB,mBAAmB,CAAC,QAAQ,SAAS,mBAAmB,GAAG,iBAAiB,EAAE,OAAO,EAAE,QAAQ,GAAG,gBAAgB,CAiBjI;AAED,wBAAgB,eAAe,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,iBAInE"}
@@ -0,0 +1,206 @@
1
+ export const PINNACLE_CATEGORIES = [
2
+ { id: "batteries", label: "Batteries" },
3
+ { id: "engines", label: "Engines" },
4
+ { id: "transmissions", label: "Transmissions" },
5
+ { id: "body-panels", label: "Body Panels" },
6
+ { id: "electrical", label: "Electrical" },
7
+ { id: "suspension", label: "Suspension" },
8
+ { id: "braking", label: "Braking" },
9
+ { id: "wheels", label: "Wheels" },
10
+ ];
11
+ const CATEGORY_LABEL_BY_ID = new Map(PINNACLE_CATEGORIES.map((category) => [category.id, category.label]));
12
+ const CATEGORY_PRODUCT_TYPES = {
13
+ batteries: ["BATTERY", "HIGH_VOLTAGE_BATTERY", "HYBRID_BATTERY", "AUXILIARY_BATTERY"],
14
+ engines: [
15
+ "ENGINE",
16
+ "ENGINE_ASSEMBLY",
17
+ "TURBOCHARGER",
18
+ "SUPERCHARGER",
19
+ "RADIATOR",
20
+ "OVERFLOW_BOTTLE",
21
+ "FUEL_PUMP",
22
+ "INJECTOR",
23
+ "AIR_FLOW_METER",
24
+ "THROTTLE_BODY",
25
+ "AC_COMPRESSOR",
26
+ "INTERCOOLER",
27
+ "COOLING_FAN",
28
+ "FAN",
29
+ ],
30
+ transmissions: [
31
+ "TRANSMISSION",
32
+ "AUTO_TRANSMISSION",
33
+ "MANUAL_TRANSMISSION",
34
+ "GEARBOX",
35
+ "TRANSFER_CASE",
36
+ "DIFFERENTIAL",
37
+ "TAIL_SHAFT",
38
+ "DRIVE_SHAFT",
39
+ "PROPELLER_SHAFT",
40
+ "CV_SHAFT",
41
+ ],
42
+ "body-panels": [
43
+ "BONNET",
44
+ "BOOTLID_TAILGATE",
45
+ "LEFT_FRONT_DOOR",
46
+ "RIGHT_FRONT_DOOR",
47
+ "LEFT_REAR_DOOR",
48
+ "RIGHT_REAR_DOOR",
49
+ "DOOR",
50
+ "FRONT_BUMPER",
51
+ "REAR_BUMPER",
52
+ "BUMPER_BAR",
53
+ "BUMPER_REINFORCEMENT",
54
+ "GUARD",
55
+ "LEFT_GUARD",
56
+ "RIGHT_GUARD",
57
+ "LEFT_DOOR_MIRROR",
58
+ "RIGHT_DOOR_MIRROR",
59
+ "DOOR_MIRROR",
60
+ "GRILLE",
61
+ "REAR_GARNISH",
62
+ "WHEEL_ARCH_FLARE",
63
+ "GARNISH",
64
+ "PANEL",
65
+ ],
66
+ electrical: [
67
+ "RADIO_CD_DVD_SAT_TV",
68
+ "COMBINATION_SWITCH",
69
+ "LEFT_HEADLAMP",
70
+ "RIGHT_HEADLAMP",
71
+ "HEADLAMP",
72
+ "HEADLIGHT",
73
+ "LEFT_TAILLIGHT",
74
+ "RIGHT_TAILLIGHT",
75
+ "TAIL_LIGHT",
76
+ "TAIL_LAMP",
77
+ "ALTERNATOR",
78
+ "STARTER_MOTOR",
79
+ "ECU",
80
+ "AIRBAG_MODULE_SENSOR",
81
+ "SENSOR",
82
+ "WIPER_MOTOR",
83
+ "FUSE_BOX",
84
+ "INSTRUMENT_CLUSTER",
85
+ "CLOCKSPRING",
86
+ "HEATER_AC_CONTROLS",
87
+ ],
88
+ suspension: [
89
+ "SHOCK_ABSORBER",
90
+ "STRUT",
91
+ "CONTROL_ARM",
92
+ "LOWER_CONTROL_ARM",
93
+ "UPPER_CONTROL_ARM",
94
+ "STEERING_RACK",
95
+ "STEERING_COLUMN",
96
+ "HUB",
97
+ "WHEEL_HUB",
98
+ "SUSPENSION_ARM",
99
+ "SPRING",
100
+ ],
101
+ braking: ["BRAKE_BOOSTER", "BRAKE_CALIPER", "BRAKE_MASTER_CYLINDER", "ABS_PUMP", "DISC_ROTOR", "BRAKE_DISC", "BRAKE_DRUM"],
102
+ wheels: ["WHEEL", "ALLOY_WHEEL", "ROAD_WHEEL", "SPARE_WHEEL", "WHEEL_RIM", "RIM", "TYRE", "TIRE", "HUBCAP", "WHEEL_COVER"],
103
+ };
104
+ const CATEGORY_BY_PRODUCT_TYPE = new Map(Object.entries(CATEGORY_PRODUCT_TYPES).flatMap(([categoryId, productTypes]) => productTypes.map((productType) => [productType, categoryId])));
105
+ const CATEGORY_PRODUCT_TYPE_KEYWORDS = [
106
+ { id: "wheels", keywords: ["WHEEL", "TYRE", "TIRE", "RIM", "HUBCAP", "ALLOY"] },
107
+ { id: "braking", keywords: ["BRAKE", "CALIPER", "ROTOR", "DISC", "ABS_PUMP"] },
108
+ { id: "suspension", keywords: ["STRUT", "SHOCK", "SUSPENSION", "CONTROL_ARM", "PROP_SHAFT", "DRIVE_SHAFT", "STEERING", "HUB"] },
109
+ { id: "transmissions", keywords: ["TRANSMISSION", "GEARBOX", "DIFFERENTIAL", "TRANSFER"] },
110
+ { id: "engines", keywords: ["ENGINE", "MOTOR", "TURBO", "RADIATOR", "OVERFLOW", "FUEL", "INJECTOR", "COMPRESSOR", "THROTTLE"] },
111
+ { id: "batteries", keywords: ["BATTERY", "BATTERIES"] },
112
+ { id: "electrical", keywords: ["RADIO", "CD", "DVD", "SAT_TV", "SWITCH", "LIGHT", "TAILLIGHT", "HEADLIGHT", "LAMP", "ALTERNATOR", "STARTER", "SENSOR", "MODULE", "WIPER", "ECU"] },
113
+ { id: "body-panels", keywords: ["DOOR", "MIRROR", "BUMPER", "BAR", "BRACKET", "REINFO", "REINFORC", "GARNISH", "GUARD", "PANEL", "BONNET", "BOOTLID", "TAILGATE", "FENDER", "GRILLE", "FLARE"] },
114
+ ];
115
+ const KEEP_UPPERCASE = new Set(["BMW", "HSV", "MG", "LDV", "VW", "GWM", "BYD", "KIA"]);
116
+ export function slugifyCatalogValue(value) {
117
+ return String(value || "")
118
+ .toLowerCase()
119
+ .replace(/&/gu, "and")
120
+ .replace(/[^a-z0-9]+/gu, "-")
121
+ .replace(/^-+|-+$/gu, "");
122
+ }
123
+ export function categoryLabelFromSlug(slug) {
124
+ if (!slug || slug === "all")
125
+ return "All";
126
+ return CATEGORY_LABEL_BY_ID.get(slugifyCatalogValue(slug)) ?? "All";
127
+ }
128
+ export function categorySlugFromLabel(label) {
129
+ if (!label || label === "All")
130
+ return "all";
131
+ const known = PINNACLE_CATEGORIES.find((category) => category.label.toLowerCase() === label.toLowerCase());
132
+ return known?.id ?? slugifyCatalogValue(label);
133
+ }
134
+ export function categoryProductTypesForSlug(slug) {
135
+ const categoryId = slugifyCatalogValue(slug ?? "");
136
+ return CATEGORY_PRODUCT_TYPES[categoryId] ?? [];
137
+ }
138
+ export function categoryQueryForSlug(slug) {
139
+ const productTypes = categoryProductTypesForSlug(slug);
140
+ if (!productTypes.length)
141
+ return null;
142
+ const fieldedTerms = productTypes.map((productType) => fieldQuery("product_type", productType));
143
+ return `(${fieldedTerms.join(" OR ")})`;
144
+ }
145
+ export function normalizePinnacleCode(value) {
146
+ return String(value || "")
147
+ .trim()
148
+ .replace(/\s+/gu, "_")
149
+ .replace(/-+/gu, "_")
150
+ .replace(/_+/gu, "_")
151
+ .replace(/^_+|_+$/gu, "")
152
+ .toUpperCase();
153
+ }
154
+ export function labelFromPinnacleCode(value) {
155
+ const normalized = normalizePinnacleCode(value);
156
+ if (!normalized)
157
+ return "";
158
+ if (KEEP_UPPERCASE.has(normalized))
159
+ return normalized;
160
+ return normalized
161
+ .split("_")
162
+ .filter(Boolean)
163
+ .map((part) => (KEEP_UPPERCASE.has(part) ? part : `${part.charAt(0)}${part.slice(1).toLowerCase()}`))
164
+ .join(" ");
165
+ }
166
+ export function getPinnacleTaxonomy(product) {
167
+ const productType = normalizePinnacleCode(product.productType);
168
+ const categoryId = categoryFromProductType(productType, product.title, product.tags);
169
+ const make = extractTagValue(product.tags, "Make") ?? normalizePinnacleCode(product.vendor);
170
+ const model = extractTagValue(product.tags, "Model");
171
+ const year = extractTagValue(product.tags, "Year") ?? product.tags.find((tag) => /^\d{4}$/u.test(tag.trim())) ?? null;
172
+ return {
173
+ categoryId,
174
+ categoryLabel: CATEGORY_LABEL_BY_ID.get(categoryId) ?? "Used Auto Parts",
175
+ make: make || null,
176
+ makeLabel: make ? labelFromPinnacleCode(make) : null,
177
+ model,
178
+ modelLabel: model ? labelFromPinnacleCode(model) : null,
179
+ year,
180
+ productType,
181
+ };
182
+ }
183
+ export function extractTagValue(tags, key) {
184
+ const prefix = `${key}_`.toLowerCase();
185
+ const match = tags.find((tag) => tag.toLowerCase().startsWith(prefix));
186
+ return match ? normalizePinnacleCode(match.slice(prefix.length)) : null;
187
+ }
188
+ function categoryFromProductType(productType, title, tags) {
189
+ const exactCategory = CATEGORY_BY_PRODUCT_TYPE.get(productType);
190
+ if (exactCategory)
191
+ return exactCategory;
192
+ const haystack = `${productType} ${title} ${tags.join(" ")}`.toUpperCase();
193
+ for (const category of CATEGORY_PRODUCT_TYPE_KEYWORDS) {
194
+ if (category.keywords.some((keyword) => haystack.includes(keyword))) {
195
+ return category.id;
196
+ }
197
+ }
198
+ return "body-panels";
199
+ }
200
+ function quoteQueryTerm(term) {
201
+ return /^[A-Za-z0-9_]+$/u.test(term) ? term : `"${term.replace(/"/gu, '\\"')}"`;
202
+ }
203
+ function fieldQuery(field, value) {
204
+ return `${field}:${quoteQueryTerm(value)}`;
205
+ }
206
+ //# sourceMappingURL=taxonomy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"taxonomy.js","sourceRoot":"","sources":["../../../src/connectors/pinnacle/taxonomy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,47 @@
1
+ export type RouteErrorSurface = "root" | "home" | "catalog" | "search" | "product" | "cart" | "page" | "policy" | "collection";
2
+ export type RouteErrorVariant = "not-found" | "bad-request" | "auth" | "catalog" | "product" | "cart" | "page" | "generic";
3
+ export interface RouteErrorAction {
4
+ label: string;
5
+ url: string;
6
+ kind?: "link" | "phone";
7
+ }
8
+ export interface ClassifiedRouteError {
9
+ status: number;
10
+ title: string;
11
+ message: string;
12
+ variant: RouteErrorVariant;
13
+ primaryAction: RouteErrorAction;
14
+ secondaryAction?: RouteErrorAction;
15
+ contactAction?: RouteErrorAction | undefined;
16
+ callAction?: RouteErrorAction | undefined;
17
+ showRetry: boolean;
18
+ showContact: boolean;
19
+ showCall: boolean;
20
+ }
21
+ export interface RouteErrorClassifierOptions {
22
+ homeAction?: RouteErrorAction;
23
+ catalogAction?: RouteErrorAction;
24
+ contactAction?: RouteErrorAction;
25
+ callAction?: RouteErrorAction;
26
+ }
27
+ export declare function classifyRouteError(error: unknown, surface?: RouteErrorSurface, options?: RouteErrorClassifierOptions): ClassifiedRouteError;
28
+ export declare function getRouteErrorStatus(error: unknown): number;
29
+ export declare function shouldLogRouteError(error: unknown): boolean;
30
+ export declare function routeErrorLogFields(error: unknown, request: Request, source?: string): {
31
+ source: string;
32
+ timestamp: string;
33
+ method: string;
34
+ path: string;
35
+ queryPresent: boolean;
36
+ status: number;
37
+ errorType: string;
38
+ errorName: string;
39
+ shopifyStatus: number | null | undefined;
40
+ shopifyErrorCount: number | undefined;
41
+ };
42
+ export declare function isRouteErrorResponseLike(error: unknown): error is {
43
+ status: number;
44
+ data?: unknown;
45
+ statusText?: string;
46
+ };
47
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,iBAAiB,GACzB,MAAM,GACN,MAAM,GACN,SAAS,GACT,QAAQ,GACR,SAAS,GACT,MAAM,GACN,MAAM,GACN,QAAQ,GACR,YAAY,CAAC;AAEjB,MAAM,MAAM,iBAAiB,GACzB,WAAW,GACX,aAAa,GACb,MAAM,GACN,SAAS,GACT,SAAS,GACT,MAAM,GACN,MAAM,GACN,SAAS,CAAC;AAEd,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,aAAa,EAAE,gBAAgB,CAAC;IAChC,eAAe,CAAC,EAAE,gBAAgB,CAAC;IACnC,aAAa,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC7C,UAAU,CAAC,EAAE,gBAAgB,GAAG,SAAS,CAAC;IAC1C,SAAS,EAAE,OAAO,CAAC;IACnB,WAAW,EAAE,OAAO,CAAC;IACrB,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,2BAA2B;IAC1C,UAAU,CAAC,EAAE,gBAAgB,CAAC;IAC9B,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACjC,aAAa,CAAC,EAAE,gBAAgB,CAAC;IACjC,UAAU,CAAC,EAAE,gBAAgB,CAAC;CAC/B;AAMD,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,OAAO,EACd,OAAO,GAAE,iBAA0B,EACnC,OAAO,GAAE,2BAAgC,GACxC,oBAAoB,CAuCtB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAK1D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,GAAG,OAAO,CAK3D;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAiB;;;;;;;;;;;EAgB5F;AAkMD,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,UAAU,CAAC,EAAE,MAAM,CAAA;CAAE,CAOzH"}