feed-common 1.77.1 → 1.77.2

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 (108) hide show
  1. package/.vscode/settings.json +1 -1
  2. package/CHANGELOG.md +7 -0
  3. package/dist/constants/profile.constants.d.ts +12 -0
  4. package/dist/constants/profile.constants.d.ts.map +1 -1
  5. package/dist/constants/profile.constants.js +39 -1
  6. package/dist/constants/profile.constants.js.map +1 -1
  7. package/dist/index.d.ts +11 -1
  8. package/dist/index.d.ts.map +1 -1
  9. package/dist/index.js +11 -1
  10. package/dist/index.js.map +1 -1
  11. package/dist/sources/country.source.d.ts +5 -0
  12. package/dist/sources/country.source.d.ts.map +1 -0
  13. package/dist/sources/country.source.js +78 -0
  14. package/dist/sources/country.source.js.map +1 -0
  15. package/dist/sources/currency.source.d.ts.map +1 -1
  16. package/dist/sources/currency.source.js +0 -1
  17. package/dist/sources/currency.source.js.map +1 -1
  18. package/dist/sources/ebay-gallery-type.source.d.ts +5 -0
  19. package/dist/sources/ebay-gallery-type.source.d.ts.map +1 -0
  20. package/dist/sources/ebay-gallery-type.source.js +5 -0
  21. package/dist/sources/ebay-gallery-type.source.js.map +1 -0
  22. package/dist/sources/ebay-inventory-tracking.source.d.ts +3 -0
  23. package/dist/sources/ebay-inventory-tracking.source.d.ts.map +1 -0
  24. package/dist/sources/ebay-inventory-tracking.source.js +11 -0
  25. package/dist/sources/ebay-inventory-tracking.source.js.map +1 -0
  26. package/dist/sources/ebay-listing-type.source.d.ts +5 -0
  27. package/dist/sources/ebay-listing-type.source.d.ts.map +1 -0
  28. package/dist/sources/ebay-listing-type.source.js +5 -0
  29. package/dist/sources/ebay-listing-type.source.js.map +1 -0
  30. package/dist/sources/ebay-yes-no.source.d.ts +5 -0
  31. package/dist/sources/ebay-yes-no.source.d.ts.map +1 -0
  32. package/dist/sources/ebay-yes-no.source.js +2 -0
  33. package/dist/sources/ebay-yes-no.source.js.map +1 -0
  34. package/dist/sources/google-availability.source.d.ts +5 -0
  35. package/dist/sources/google-availability.source.d.ts.map +1 -0
  36. package/dist/sources/google-availability.source.js +7 -0
  37. package/dist/sources/google-availability.source.js.map +1 -0
  38. package/dist/sources/language.source.d.ts +5 -0
  39. package/dist/sources/language.source.d.ts.map +1 -0
  40. package/dist/sources/language.source.js +31 -0
  41. package/dist/sources/language.source.js.map +1 -0
  42. package/dist/utils/feed-templates/{index.d.ts → common-schemas.d.ts} +24 -29
  43. package/dist/utils/feed-templates/common-schemas.d.ts.map +1 -0
  44. package/dist/utils/feed-templates/{index.js → common-schemas.js} +668 -176
  45. package/dist/utils/feed-templates/common-schemas.js.map +1 -0
  46. package/dist/utils/feed-templates/common.d.ts +20 -0
  47. package/dist/utils/feed-templates/common.d.ts.map +1 -0
  48. package/dist/utils/feed-templates/common.js +60 -0
  49. package/dist/utils/feed-templates/common.js.map +1 -0
  50. package/dist/utils/feed-templates/ebay.template.d.ts +1 -1
  51. package/dist/utils/feed-templates/ebay.template.d.ts.map +1 -1
  52. package/dist/utils/feed-templates/ebay.template.js +189 -2
  53. package/dist/utils/feed-templates/ebay.template.js.map +1 -1
  54. package/dist/utils/feed-templates/facebook.template.d.ts.map +1 -1
  55. package/dist/utils/feed-templates/facebook.template.js +2 -1
  56. package/dist/utils/feed-templates/facebook.template.js.map +1 -1
  57. package/dist/utils/feed-templates/google-api.template.d.ts.map +1 -1
  58. package/dist/utils/feed-templates/google-api.template.js +19 -7
  59. package/dist/utils/feed-templates/google-api.template.js.map +1 -1
  60. package/dist/utils/feed-templates/google.template.d.ts.map +1 -1
  61. package/dist/utils/feed-templates/google.template.js +7 -15
  62. package/dist/utils/feed-templates/google.template.js.map +1 -1
  63. package/dist/utils/feed-templates/microsoft.template.d.ts.map +1 -1
  64. package/dist/utils/feed-templates/microsoft.template.js +11 -7
  65. package/dist/utils/feed-templates/microsoft.template.js.map +1 -1
  66. package/dist/utils/feed-templates/template-utils.d.ts +4 -0
  67. package/dist/utils/feed-templates/template-utils.d.ts.map +1 -0
  68. package/dist/utils/feed-templates/template-utils.js +29 -0
  69. package/dist/utils/feed-templates/template-utils.js.map +1 -0
  70. package/dist/utils/feed-templates/tiktok.template.d.ts.map +1 -1
  71. package/dist/utils/feed-templates/tiktok.template.js +2 -1
  72. package/dist/utils/feed-templates/tiktok.template.js.map +1 -1
  73. package/dist/utils/profile.d.ts +2 -1
  74. package/dist/utils/profile.d.ts.map +1 -1
  75. package/dist/utils/profile.js +82 -1
  76. package/dist/utils/profile.js.map +1 -1
  77. package/dist/utils/utils.d.ts +2 -0
  78. package/dist/utils/utils.d.ts.map +1 -1
  79. package/dist/utils/utils.js +23 -3
  80. package/dist/utils/utils.js.map +1 -1
  81. package/package.json +5 -4
  82. package/src/constants/profile.constants.ts +39 -1
  83. package/src/index.ts +11 -1
  84. package/src/sources/country.source.ts +77 -0
  85. package/src/sources/currency.source.ts +0 -1
  86. package/src/sources/ebay-gallery-type.source.ts +4 -0
  87. package/src/sources/ebay-inventory-tracking.source.ts +12 -0
  88. package/src/sources/ebay-listing-type.source.ts +4 -0
  89. package/src/sources/ebay-yes-no.source.ts +1 -0
  90. package/src/sources/google-availability.source.ts +6 -0
  91. package/src/sources/language.source.ts +30 -0
  92. package/src/utils/feed-templates/common-schemas.ts +1014 -0
  93. package/src/utils/feed-templates/common.ts +82 -0
  94. package/src/utils/feed-templates/ebay.template.ts +215 -4
  95. package/src/utils/feed-templates/facebook.template.ts +2 -1
  96. package/src/utils/feed-templates/google-api.template.ts +54 -29
  97. package/src/utils/feed-templates/google.template.ts +46 -52
  98. package/src/utils/feed-templates/microsoft.template.ts +26 -21
  99. package/src/utils/feed-templates/template-utils.ts +30 -0
  100. package/src/utils/feed-templates/tiktok.template.ts +4 -2
  101. package/src/utils/profile.ts +116 -2
  102. package/src/utils/utils.ts +25 -5
  103. package/tests/company.spec.ts +39 -39
  104. package/tests/profile-utils.spec.ts +38 -0
  105. package/tests/validator.spec.ts +1 -5
  106. package/dist/utils/feed-templates/index.d.ts.map +0 -1
  107. package/dist/utils/feed-templates/index.js.map +0 -1
  108. package/src/utils/feed-templates/index.ts +0 -514
@@ -1,50 +1,5 @@
1
- /* eslint-disable @typescript-eslint/no-explicit-any */
2
1
  import { z } from 'zod';
3
- import { SOURCE_FB_CATEGORY, SOURCE_GOOGLE_PRODUCT_HIGHLIGHT, XMLFeedType } from '../../constants/profile.constants.js';
4
- import { customFeedTemplate } from './custom.template.js';
5
- import { facebookFeedTemplate } from './facebook.template.js';
6
- import { googleFeedTemplate } from './google.template.js';
7
- import { tiktokFeedTemplate } from './tiktok.template.js';
8
- import { microsoftTemplate } from './microsoft.template.js';
9
- import { googleApiTemplate } from './google-api.template.js';
10
- import { getSourceTagValue } from '../utils.js';
11
- import { eBayFeedTemplate } from './ebay.template.js';
12
- export const hasMacro = (v) => /{{[^}]+}}/.test(v.replaceAll(/{{source\..+?}}/g, ''));
13
- export const removeMacro = (v) => v.replaceAll(/{{.+?}}/g, '');
14
- export function validate(value, validator, skipEmpty = true) {
15
- let valueToValidate = value;
16
- if (typeof value === 'string') {
17
- valueToValidate = removeMacro(value);
18
- }
19
- if (!value && skipEmpty) {
20
- return { success: true, data: value };
21
- }
22
- return validator.safeParse(valueToValidate);
23
- }
24
- export function validateIfNoMacro(value, validator) {
25
- if (typeof value === 'string' && hasMacro(value)) {
26
- return { success: true, data: value };
27
- }
28
- if (Array.isArray(validator)) {
29
- for (const v of validator) {
30
- const result = v.safeParse(resolveSourceMacro(value));
31
- if (!result.success) {
32
- return result;
33
- }
34
- }
35
- return { success: true, data: value };
36
- }
37
- return validator.safeParse(resolveSourceMacro(value));
38
- }
39
- export function resolveSourceMacro(macro) {
40
- if (typeof macro !== 'string') {
41
- return macro;
42
- }
43
- return macro.replace(/{{source\..+?}}/g, (macro) => {
44
- const { tag, value } = getSourceTagValue(macro.slice(2, -2));
45
- return value?.map(v => v.value)?.join(getSourceValueSeparator(tag)) ?? '';
46
- });
47
- }
2
+ import { resolveSourceMacro } from '../utils';
48
3
  export const dateRangeSchema = z
49
4
  .string()
50
5
  .refine(v => !v || v.split('/').length === 2, {
@@ -59,7 +14,6 @@ export const dateRangeSchema = z
59
14
  .refine(v => !v || new Date(v.split('/')[1]) > new Date(v.split('/')[0]), {
60
15
  message: 'Date to should be greater than date from',
61
16
  });
62
- const unitMeasureRegex = /^(?<quantity>[\d.,]+)\s*(?<units>\w+)$/;
63
17
  export const measureUnitsSchema = (units) => z.string().superRefine((v, ctx) => {
64
18
  if (!v) {
65
19
  return true;
@@ -97,81 +51,631 @@ export const sameUnitScheme = (other, errorMessage) => z.string().superRefine((v
97
51
  export const optionalUrlSchema = z
98
52
  .string()
99
53
  .refine(v => !v || z.string().url().safeParse(v).success, { message: 'invalid URL' });
100
- export function getTemplate(type) {
101
- switch (type) {
102
- case XMLFeedType.Custom:
103
- return customFeedTemplate;
104
- case XMLFeedType.Facebook:
105
- return facebookFeedTemplate;
106
- case XMLFeedType.Google:
107
- return googleFeedTemplate;
108
- case XMLFeedType.TikTok:
109
- return tiktokFeedTemplate;
110
- case XMLFeedType.Microsoft:
111
- return microsoftTemplate;
112
- case XMLFeedType.GMC_API:
113
- return googleApiTemplate;
114
- case XMLFeedType.eBay:
115
- return eBayFeedTemplate;
116
- default:
117
- throw new Error(`Invalid feed type: ${type}`);
118
- }
119
- }
120
54
  export const currencySchema = z.enum([
121
- 'AED', 'AFN', 'ALL', 'AMD', 'ANG', 'AOA', 'ARS', 'AUD', 'AWG', 'AZN', 'BAM', 'BBD',
122
- 'BDT', 'BGN', 'BHD', 'BIF', 'BMD', 'BND', 'BOB', 'BOV', 'BRL', 'BSD', 'BTN', 'BWP',
123
- 'BYN', 'BZD', 'CAD', 'CDF', 'CHE', 'CHF', 'CHW', 'CLF', 'CLP', 'CNY', 'COP', 'COU',
124
- 'CRC', 'CUC', 'CUP', 'CVE', 'CZK', 'DJF', 'DKK', 'DOP', 'DZD', 'EGP', 'ERN', 'ETB',
125
- 'EUR', 'FJD', 'FKP', 'FOK', 'GBP', 'GEL', 'GGP', 'GHS', 'GIP', 'GMD', 'GNF', 'GTQ',
126
- 'GYD', 'HKD', 'HNL', 'HRK', 'HTG', 'HUF', 'IDR', 'ILS', 'IMP', 'INR', 'IQD', 'IRR',
127
- 'ISK', 'JMD', 'JOD', 'JPY', 'KES', 'KGS', 'KHR', 'KID', 'KMF', 'KRW', 'KWD', 'KYD',
128
- 'KZT', 'LAK', 'LBP', 'LKR', 'LRD', 'LSL', 'LYD', 'MAD', 'MDL', 'MGA', 'MKD', 'MMK',
129
- 'MNT', 'MOP', 'MRU', 'MUR', 'MVR', 'MWK', 'MXN', 'MXV', 'MYR', 'MZN', 'NAD', 'NGN',
130
- 'NIO', 'NOK', 'NPR', 'NZD', 'OMR', 'PAB', 'PEN', 'PGK', 'PHP', 'PKR', 'PLN', 'PYG',
131
- 'QAR', 'RON', 'RSD', 'RUB', 'RWF', 'SAR', 'SBD', 'SCR', 'SDG', 'SEK', 'SGD', 'SHP',
132
- 'SLE', 'SLL', 'SOS', 'SRD', 'SSP', 'STN', 'SYP', 'SZL', 'THB', 'TJS', 'TMT', 'TND',
133
- 'TOP', 'TRY', 'TTD', 'TVD', 'TWD', 'TZS', 'UAH', 'UGX', 'USD', 'USN', 'UYI', 'UYU',
134
- 'UYW', 'UZS', 'VED', 'VES', 'VND', 'VUV', 'WST', 'XAF', 'XAG', 'XAU', 'XBA', 'XBB',
135
- 'XBC', 'XBD', 'XCD', 'XDR', 'XOF', 'XPD', 'XPF', 'XPT', 'XSU', 'XTS', 'XUA', 'XXX',
136
- 'YER', 'ZAR', 'ZMW', 'ZWL'
55
+ 'AED',
56
+ 'AFN',
57
+ 'ALL',
58
+ 'AMD',
59
+ 'ANG',
60
+ 'AOA',
61
+ 'ARS',
62
+ 'AUD',
63
+ 'AWG',
64
+ 'AZN',
65
+ 'BAM',
66
+ 'BBD',
67
+ 'BDT',
68
+ 'BGN',
69
+ 'BHD',
70
+ 'BIF',
71
+ 'BMD',
72
+ 'BND',
73
+ 'BOB',
74
+ 'BOV',
75
+ 'BRL',
76
+ 'BSD',
77
+ 'BTN',
78
+ 'BWP',
79
+ 'BYN',
80
+ 'BZD',
81
+ 'CAD',
82
+ 'CDF',
83
+ 'CHE',
84
+ 'CHF',
85
+ 'CHW',
86
+ 'CLF',
87
+ 'CLP',
88
+ 'CNY',
89
+ 'COP',
90
+ 'COU',
91
+ 'CRC',
92
+ 'CUC',
93
+ 'CUP',
94
+ 'CVE',
95
+ 'CZK',
96
+ 'DJF',
97
+ 'DKK',
98
+ 'DOP',
99
+ 'DZD',
100
+ 'EGP',
101
+ 'ERN',
102
+ 'ETB',
103
+ 'EUR',
104
+ 'FJD',
105
+ 'FKP',
106
+ 'FOK',
107
+ 'GBP',
108
+ 'GEL',
109
+ 'GGP',
110
+ 'GHS',
111
+ 'GIP',
112
+ 'GMD',
113
+ 'GNF',
114
+ 'GTQ',
115
+ 'GYD',
116
+ 'HKD',
117
+ 'HNL',
118
+ 'HRK',
119
+ 'HTG',
120
+ 'HUF',
121
+ 'IDR',
122
+ 'ILS',
123
+ 'IMP',
124
+ 'INR',
125
+ 'IQD',
126
+ 'IRR',
127
+ 'ISK',
128
+ 'JMD',
129
+ 'JOD',
130
+ 'JPY',
131
+ 'KES',
132
+ 'KGS',
133
+ 'KHR',
134
+ 'KID',
135
+ 'KMF',
136
+ 'KRW',
137
+ 'KWD',
138
+ 'KYD',
139
+ 'KZT',
140
+ 'LAK',
141
+ 'LBP',
142
+ 'LKR',
143
+ 'LRD',
144
+ 'LSL',
145
+ 'LYD',
146
+ 'MAD',
147
+ 'MDL',
148
+ 'MGA',
149
+ 'MKD',
150
+ 'MMK',
151
+ 'MNT',
152
+ 'MOP',
153
+ 'MRU',
154
+ 'MUR',
155
+ 'MVR',
156
+ 'MWK',
157
+ 'MXN',
158
+ 'MXV',
159
+ 'MYR',
160
+ 'MZN',
161
+ 'NAD',
162
+ 'NGN',
163
+ 'NIO',
164
+ 'NOK',
165
+ 'NPR',
166
+ 'NZD',
167
+ 'OMR',
168
+ 'PAB',
169
+ 'PEN',
170
+ 'PGK',
171
+ 'PHP',
172
+ 'PKR',
173
+ 'PLN',
174
+ 'PYG',
175
+ 'QAR',
176
+ 'RON',
177
+ 'RSD',
178
+ 'RUB',
179
+ 'RWF',
180
+ 'SAR',
181
+ 'SBD',
182
+ 'SCR',
183
+ 'SDG',
184
+ 'SEK',
185
+ 'SGD',
186
+ 'SHP',
187
+ 'SLE',
188
+ 'SLL',
189
+ 'SOS',
190
+ 'SRD',
191
+ 'SSP',
192
+ 'STN',
193
+ 'SYP',
194
+ 'SZL',
195
+ 'THB',
196
+ 'TJS',
197
+ 'TMT',
198
+ 'TND',
199
+ 'TOP',
200
+ 'TRY',
201
+ 'TTD',
202
+ 'TVD',
203
+ 'TWD',
204
+ 'TZS',
205
+ 'UAH',
206
+ 'UGX',
207
+ 'USD',
208
+ 'USN',
209
+ 'UYI',
210
+ 'UYU',
211
+ 'UYW',
212
+ 'UZS',
213
+ 'VED',
214
+ 'VES',
215
+ 'VND',
216
+ 'VUV',
217
+ 'WST',
218
+ 'XAF',
219
+ 'XAG',
220
+ 'XAU',
221
+ 'XBA',
222
+ 'XBB',
223
+ 'XBC',
224
+ 'XBD',
225
+ 'XCD',
226
+ 'XDR',
227
+ 'XOF',
228
+ 'XPD',
229
+ 'XPF',
230
+ 'XPT',
231
+ 'XSU',
232
+ 'XTS',
233
+ 'XUA',
234
+ 'XXX',
235
+ 'YER',
236
+ 'ZAR',
237
+ 'ZMW',
238
+ 'ZWL',
137
239
  ]);
138
- export const languageSchema = z.string().refine(v => !v || [
139
- 'aa', 'ab', 'ae', 'af', 'ak', 'am', 'an', 'ar', 'as', 'av', 'ay', 'az',
140
- 'ba', 'be', 'bg', 'bh', 'bi', 'bm', 'bn', 'bo', 'br', 'bs', 'ca', 'ce',
141
- 'ch', 'co', 'cr', 'cs', 'cu', 'cv', 'cy', 'da', 'de', 'dv', 'dz', 'ee',
142
- 'el', 'en', 'eo', 'es', 'et', 'eu', 'fa', 'ff', 'fi', 'fj', 'fo', 'fr',
143
- 'fy', 'ga', 'gd', 'gl', 'gn', 'gu', 'gv', 'ha', 'he', 'hi', 'ho', 'hr',
144
- 'ht', 'hu', 'hy', 'hz', 'ia', 'id', 'ie', 'ig', 'ii', 'ik', 'io', 'is',
145
- 'it', 'iu', 'ja', 'jv', 'ka', 'kg', 'ki', 'kj', 'kk', 'kl', 'km', 'kn',
146
- 'ko', 'kr', 'ks', 'ku', 'kv', 'kw', 'ky', 'la', 'lb', 'lg', 'li', 'ln',
147
- 'lo', 'lt', 'lu', 'lv', 'mg', 'mh', 'mi', 'mk', 'ml', 'mn', 'mr', 'ms',
148
- 'mt', 'my', 'na', 'nb', 'nd', 'ne', 'ng', 'nl', 'nn', 'no', 'nr', 'nv',
149
- 'ny', 'oc', 'oj', 'om', 'or', 'os', 'pa', 'pi', 'pl', 'ps', 'pt', 'qu',
150
- 'rm', 'rn', 'ro', 'ru', 'rw', 'sa', 'sc', 'sd', 'se', 'sg', 'si', 'sk',
151
- 'sl', 'sm', 'sn', 'so', 'sq', 'sr', 'ss', 'st', 'su', 'sv', 'sw', 'ta',
152
- 'te', 'tg', 'th', 'ti', 'tk', 'tl', 'tn', 'to', 'tr', 'ts', 'tt', 'tw',
153
- 'ty', 'ug', 'uk', 'ur', 'uz', 've', 'vi', 'vo', 'wa', 'wo', 'xh', 'yi',
154
- 'yo', 'za', 'zh', 'zu'
155
- ].includes(v.toLowerCase()), { message: 'Invalid language code' });
156
- export const countrySchema = z.string().refine(v => !v || [
157
- 'AD', 'AE', 'AF', 'AG', 'AI', 'AL', 'AM', 'AO', 'AQ', 'AR', 'AS', 'AT', 'AU', 'AW', 'AX', 'AZ',
158
- 'BA', 'BB', 'BD', 'BE', 'BF', 'BG', 'BH', 'BI', 'BJ', 'BL', 'BM', 'BN', 'BO', 'BQ', 'BR', 'BS',
159
- 'BT', 'BV', 'BW', 'BY', 'BZ', 'CA', 'CC', 'CD', 'CF', 'CG', 'CH', 'CI', 'CK', 'CL', 'CM', 'CN',
160
- 'CO', 'CR', 'CU', 'CV', 'CW', 'CX', 'CY', 'CZ', 'DE', 'DJ', 'DK', 'DM', 'DO', 'DZ', 'EC', 'EE',
161
- 'EG', 'EH', 'ER', 'ES', 'ET', 'FI', 'FJ', 'FM', 'FO', 'FR', 'GA', 'GB', 'GD', 'GE', 'GF', 'GG',
162
- 'GH', 'GI', 'GL', 'GM', 'GN', 'GP', 'GQ', 'GR', 'GT', 'GU', 'GW', 'GY', 'HK', 'HM', 'HN', 'HR',
163
- 'HT', 'HU', 'ID', 'IE', 'IL', 'IM', 'IN', 'IO', 'IQ', 'IR', 'IS', 'IT', 'JE', 'JM', 'JO', 'JP',
164
- 'KE', 'KG', 'KH', 'KI', 'KM', 'KN', 'KP', 'KR', 'KW', 'KY', 'KZ', 'LA', 'LB', 'LC', 'LI', 'LK',
165
- 'LR', 'LS', 'LT', 'LU', 'LV', 'LY', 'MA', 'MC', 'MD', 'ME', 'MF', 'MG', 'MH', 'MK', 'ML', 'MM',
166
- 'MN', 'MO', 'MP', 'MQ', 'MR', 'MS', 'MT', 'MU', 'MV', 'MW', 'MX', 'MY', 'MZ', 'NA', 'NC', 'NE',
167
- 'NF', 'NG', 'NI', 'NL', 'NO', 'NP', 'NR', 'NU', 'NZ', 'OM', 'PA', 'PE', 'PF', 'PG', 'PH', 'PK',
168
- 'PL', 'PM', 'PN', 'PR', 'PT', 'PW', 'PY', 'QA', 'RE', 'RO', 'RS', 'RU', 'RW', 'SA', 'SB', 'SC',
169
- 'SD', 'SE', 'SG', 'SH', 'SI', 'SJ', 'SK', 'SL', 'SM', 'SN', 'SO', 'SR', 'SS', 'ST', 'SV', 'SX',
170
- 'SY', 'SZ', 'TC', 'TD', 'TF', 'TG', 'TH', 'TJ', 'TK', 'TL', 'TM', 'TN', 'TO', 'TR', 'TT', 'TV',
171
- 'TZ', 'UA', 'UG', 'UM', 'US', 'UY', 'UZ', 'VA', 'VC', 'VE', 'VG', 'VI', 'VN', 'VU', 'WF', 'WS',
172
- 'YE', 'YT', 'ZA', 'ZM', 'ZW'
173
- ].includes(v.toUpperCase()), { message: 'Invalid country code' });
174
- export const priceRegex = /^(?<value>\d+(?:\.\d{1,2})?)\s*(?<currency>\w+)$/;
240
+ export const languageSchema = z
241
+ .string()
242
+ .refine(v => !v ||
243
+ [
244
+ 'aa',
245
+ 'ab',
246
+ 'ae',
247
+ 'af',
248
+ 'ak',
249
+ 'am',
250
+ 'an',
251
+ 'ar',
252
+ 'as',
253
+ 'av',
254
+ 'ay',
255
+ 'az',
256
+ 'ba',
257
+ 'be',
258
+ 'bg',
259
+ 'bh',
260
+ 'bi',
261
+ 'bm',
262
+ 'bn',
263
+ 'bo',
264
+ 'br',
265
+ 'bs',
266
+ 'ca',
267
+ 'ce',
268
+ 'ch',
269
+ 'co',
270
+ 'cr',
271
+ 'cs',
272
+ 'cu',
273
+ 'cv',
274
+ 'cy',
275
+ 'da',
276
+ 'de',
277
+ 'dv',
278
+ 'dz',
279
+ 'ee',
280
+ 'el',
281
+ 'en',
282
+ 'eo',
283
+ 'es',
284
+ 'et',
285
+ 'eu',
286
+ 'fa',
287
+ 'ff',
288
+ 'fi',
289
+ 'fj',
290
+ 'fo',
291
+ 'fr',
292
+ 'fy',
293
+ 'ga',
294
+ 'gd',
295
+ 'gl',
296
+ 'gn',
297
+ 'gu',
298
+ 'gv',
299
+ 'ha',
300
+ 'he',
301
+ 'hi',
302
+ 'ho',
303
+ 'hr',
304
+ 'ht',
305
+ 'hu',
306
+ 'hy',
307
+ 'hz',
308
+ 'ia',
309
+ 'id',
310
+ 'ie',
311
+ 'ig',
312
+ 'ii',
313
+ 'ik',
314
+ 'io',
315
+ 'is',
316
+ 'it',
317
+ 'iu',
318
+ 'ja',
319
+ 'jv',
320
+ 'ka',
321
+ 'kg',
322
+ 'ki',
323
+ 'kj',
324
+ 'kk',
325
+ 'kl',
326
+ 'km',
327
+ 'kn',
328
+ 'ko',
329
+ 'kr',
330
+ 'ks',
331
+ 'ku',
332
+ 'kv',
333
+ 'kw',
334
+ 'ky',
335
+ 'la',
336
+ 'lb',
337
+ 'lg',
338
+ 'li',
339
+ 'ln',
340
+ 'lo',
341
+ 'lt',
342
+ 'lu',
343
+ 'lv',
344
+ 'mg',
345
+ 'mh',
346
+ 'mi',
347
+ 'mk',
348
+ 'ml',
349
+ 'mn',
350
+ 'mr',
351
+ 'ms',
352
+ 'mt',
353
+ 'my',
354
+ 'na',
355
+ 'nb',
356
+ 'nd',
357
+ 'ne',
358
+ 'ng',
359
+ 'nl',
360
+ 'nn',
361
+ 'no',
362
+ 'nr',
363
+ 'nv',
364
+ 'ny',
365
+ 'oc',
366
+ 'oj',
367
+ 'om',
368
+ 'or',
369
+ 'os',
370
+ 'pa',
371
+ 'pi',
372
+ 'pl',
373
+ 'ps',
374
+ 'pt',
375
+ 'qu',
376
+ 'rm',
377
+ 'rn',
378
+ 'ro',
379
+ 'ru',
380
+ 'rw',
381
+ 'sa',
382
+ 'sc',
383
+ 'sd',
384
+ 'se',
385
+ 'sg',
386
+ 'si',
387
+ 'sk',
388
+ 'sl',
389
+ 'sm',
390
+ 'sn',
391
+ 'so',
392
+ 'sq',
393
+ 'sr',
394
+ 'ss',
395
+ 'st',
396
+ 'su',
397
+ 'sv',
398
+ 'sw',
399
+ 'ta',
400
+ 'te',
401
+ 'tg',
402
+ 'th',
403
+ 'ti',
404
+ 'tk',
405
+ 'tl',
406
+ 'tn',
407
+ 'to',
408
+ 'tr',
409
+ 'ts',
410
+ 'tt',
411
+ 'tw',
412
+ 'ty',
413
+ 'ug',
414
+ 'uk',
415
+ 'ur',
416
+ 'uz',
417
+ 've',
418
+ 'vi',
419
+ 'vo',
420
+ 'wa',
421
+ 'wo',
422
+ 'xh',
423
+ 'yi',
424
+ 'yo',
425
+ 'za',
426
+ 'zh',
427
+ 'zu',
428
+ ].includes(v.toLowerCase()), { message: 'Invalid language code' });
429
+ export const countrySchema = z
430
+ .string()
431
+ .refine(v => !v ||
432
+ [
433
+ 'AD',
434
+ 'AE',
435
+ 'AF',
436
+ 'AG',
437
+ 'AI',
438
+ 'AL',
439
+ 'AM',
440
+ 'AO',
441
+ 'AQ',
442
+ 'AR',
443
+ 'AS',
444
+ 'AT',
445
+ 'AU',
446
+ 'AW',
447
+ 'AX',
448
+ 'AZ',
449
+ 'BA',
450
+ 'BB',
451
+ 'BD',
452
+ 'BE',
453
+ 'BF',
454
+ 'BG',
455
+ 'BH',
456
+ 'BI',
457
+ 'BJ',
458
+ 'BL',
459
+ 'BM',
460
+ 'BN',
461
+ 'BO',
462
+ 'BQ',
463
+ 'BR',
464
+ 'BS',
465
+ 'BT',
466
+ 'BV',
467
+ 'BW',
468
+ 'BY',
469
+ 'BZ',
470
+ 'CA',
471
+ 'CC',
472
+ 'CD',
473
+ 'CF',
474
+ 'CG',
475
+ 'CH',
476
+ 'CI',
477
+ 'CK',
478
+ 'CL',
479
+ 'CM',
480
+ 'CN',
481
+ 'CO',
482
+ 'CR',
483
+ 'CU',
484
+ 'CV',
485
+ 'CW',
486
+ 'CX',
487
+ 'CY',
488
+ 'CZ',
489
+ 'DE',
490
+ 'DJ',
491
+ 'DK',
492
+ 'DM',
493
+ 'DO',
494
+ 'DZ',
495
+ 'EC',
496
+ 'EE',
497
+ 'EG',
498
+ 'EH',
499
+ 'ER',
500
+ 'ES',
501
+ 'ET',
502
+ 'FI',
503
+ 'FJ',
504
+ 'FM',
505
+ 'FO',
506
+ 'FR',
507
+ 'GA',
508
+ 'GB',
509
+ 'GD',
510
+ 'GE',
511
+ 'GF',
512
+ 'GG',
513
+ 'GH',
514
+ 'GI',
515
+ 'GL',
516
+ 'GM',
517
+ 'GN',
518
+ 'GP',
519
+ 'GQ',
520
+ 'GR',
521
+ 'GT',
522
+ 'GU',
523
+ 'GW',
524
+ 'GY',
525
+ 'HK',
526
+ 'HM',
527
+ 'HN',
528
+ 'HR',
529
+ 'HT',
530
+ 'HU',
531
+ 'ID',
532
+ 'IE',
533
+ 'IL',
534
+ 'IM',
535
+ 'IN',
536
+ 'IO',
537
+ 'IQ',
538
+ 'IR',
539
+ 'IS',
540
+ 'IT',
541
+ 'JE',
542
+ 'JM',
543
+ 'JO',
544
+ 'JP',
545
+ 'KE',
546
+ 'KG',
547
+ 'KH',
548
+ 'KI',
549
+ 'KM',
550
+ 'KN',
551
+ 'KP',
552
+ 'KR',
553
+ 'KW',
554
+ 'KY',
555
+ 'KZ',
556
+ 'LA',
557
+ 'LB',
558
+ 'LC',
559
+ 'LI',
560
+ 'LK',
561
+ 'LR',
562
+ 'LS',
563
+ 'LT',
564
+ 'LU',
565
+ 'LV',
566
+ 'LY',
567
+ 'MA',
568
+ 'MC',
569
+ 'MD',
570
+ 'ME',
571
+ 'MF',
572
+ 'MG',
573
+ 'MH',
574
+ 'MK',
575
+ 'ML',
576
+ 'MM',
577
+ 'MN',
578
+ 'MO',
579
+ 'MP',
580
+ 'MQ',
581
+ 'MR',
582
+ 'MS',
583
+ 'MT',
584
+ 'MU',
585
+ 'MV',
586
+ 'MW',
587
+ 'MX',
588
+ 'MY',
589
+ 'MZ',
590
+ 'NA',
591
+ 'NC',
592
+ 'NE',
593
+ 'NF',
594
+ 'NG',
595
+ 'NI',
596
+ 'NL',
597
+ 'NO',
598
+ 'NP',
599
+ 'NR',
600
+ 'NU',
601
+ 'NZ',
602
+ 'OM',
603
+ 'PA',
604
+ 'PE',
605
+ 'PF',
606
+ 'PG',
607
+ 'PH',
608
+ 'PK',
609
+ 'PL',
610
+ 'PM',
611
+ 'PN',
612
+ 'PR',
613
+ 'PT',
614
+ 'PW',
615
+ 'PY',
616
+ 'QA',
617
+ 'RE',
618
+ 'RO',
619
+ 'RS',
620
+ 'RU',
621
+ 'RW',
622
+ 'SA',
623
+ 'SB',
624
+ 'SC',
625
+ 'SD',
626
+ 'SE',
627
+ 'SG',
628
+ 'SH',
629
+ 'SI',
630
+ 'SJ',
631
+ 'SK',
632
+ 'SL',
633
+ 'SM',
634
+ 'SN',
635
+ 'SO',
636
+ 'SR',
637
+ 'SS',
638
+ 'ST',
639
+ 'SV',
640
+ 'SX',
641
+ 'SY',
642
+ 'SZ',
643
+ 'TC',
644
+ 'TD',
645
+ 'TF',
646
+ 'TG',
647
+ 'TH',
648
+ 'TJ',
649
+ 'TK',
650
+ 'TL',
651
+ 'TM',
652
+ 'TN',
653
+ 'TO',
654
+ 'TR',
655
+ 'TT',
656
+ 'TV',
657
+ 'TZ',
658
+ 'UA',
659
+ 'UG',
660
+ 'UM',
661
+ 'US',
662
+ 'UY',
663
+ 'UZ',
664
+ 'VA',
665
+ 'VC',
666
+ 'VE',
667
+ 'VG',
668
+ 'VI',
669
+ 'VN',
670
+ 'VU',
671
+ 'WF',
672
+ 'WS',
673
+ 'YE',
674
+ 'YT',
675
+ 'ZA',
676
+ 'ZM',
677
+ 'ZW',
678
+ ].includes(v.toUpperCase()), { message: 'Invalid country code' });
175
679
  export const priceSchema = ({ min = 0, max = 1000000 } = {}) => z.string().superRefine((v, ctx) => {
176
680
  if (!v) {
177
681
  return true;
@@ -222,21 +726,6 @@ export const salePriceSchema = ({ min = 0, max = 1000000, price = '' } = {}) =>
222
726
  });
223
727
  }
224
728
  });
225
- const ee = ['A+++', 'A++', 'A+', 'A', 'B', 'C', 'D', 'E', 'F', 'G',];
226
- /**
227
- * Check if minEfficiency is less or equal to maxEfficiency
228
- * @param minEfficiency
229
- * @param maxEfficiency
230
- * @returns
231
- */
232
- const compareEfficiency = (minEfficiency, maxEfficiency) => {
233
- const minIndex = ee.findIndex(e => e === minEfficiency);
234
- const maxIndex = ee.findIndex(e => e === maxEfficiency);
235
- if (minIndex === -1 || maxIndex === -1) {
236
- return false;
237
- }
238
- return minIndex >= maxIndex;
239
- };
240
729
  export const energyEfficiencyClassSchema = ({ minEfficiency = '', maxEfficiency } = {}) => {
241
730
  return z.string().superRefine((v, ctx) => {
242
731
  if (!v) {
@@ -345,7 +834,7 @@ export const maxEnergyEfficiencyClassSchema = ({ efficiency = '', minEfficiency
345
834
  return true;
346
835
  });
347
836
  };
348
- export const gtinSchema = z.string().refine((gtin) => {
837
+ export const gtinSchema = z.string().refine(gtin => {
349
838
  if (!gtin) {
350
839
  return true;
351
840
  }
@@ -371,14 +860,10 @@ export const requiredIfOtherPresentSchema = (other, errorMessage) => z.string().
371
860
  });
372
861
  }
373
862
  });
374
- export function splitByCommaAndTrim(str) {
375
- return typeof str === 'string'
376
- ? str
377
- .split(',')
378
- .map(s => s.trim())
379
- .filter(Boolean)
380
- : [];
381
- }
863
+ export const oneOfSchema = (values) => z.string().refine(v => values.map(v => v.value).includes(v), {
864
+ message: `Invalid value. Valid values are: ${values.map(v => v.label).join(', ')}`,
865
+ });
866
+ export const oneOfOptionalSchema = (values) => z.string().refine(v => !v || oneOfSchema(values).parse(v));
382
867
  export function parsePriceString({ price, min = 0, max = 1000000 }) {
383
868
  const match = priceRegex.exec(price);
384
869
  if (!match) {
@@ -394,42 +879,49 @@ export function parsePriceString({ price, min = 0, max = 1000000 }) {
394
879
  }
395
880
  return { value: match.groups?.value, currency: match.groups?.currency };
396
881
  }
882
+ export const unitMeasureRegex = /^(?<quantity>[\d.,]+)\s*(?<units>\w+)$/;
883
+ export const priceRegex = /^(?<value>\d+(?:\.\d{1,2})?)\s*(?<currency>\w+)$/;
884
+ export const hasMacro = (v) => /{{[^}]+}}/.test(v.replaceAll(/{{source\..+?}}/g, ''));
885
+ export const removeMacro = (v) => v.replaceAll(/{{.+?}}/g, '');
397
886
  export const dimensionRegex = /^(?<value>[\d.,]+)\s*(?<unit>\w+)$/;
398
- export function parseDimensionString({ dimension, min = 0, max = 1000000 }) {
399
- const match = dimensionRegex.exec(dimension);
400
- if (!match) {
401
- throw new Error('Invalid format');
402
- }
403
- else if (!Number.isFinite(Number(match.groups?.value)) ||
404
- Number(match.groups?.value) < min ||
405
- Number(match.groups?.value) > max) {
406
- throw new Error(`Value should be between ${min} and ${max}`);
887
+ export const ee = ['A+++', 'A++', 'A+', 'A', 'B', 'C', 'D', 'E', 'F', 'G'];
888
+ /**
889
+ * Check if minEfficiency is less or equal to maxEfficiency
890
+ * @param minEfficiency
891
+ * @param maxEfficiency
892
+ * @returns
893
+ */
894
+ export const compareEfficiency = (minEfficiency, maxEfficiency) => {
895
+ const minIndex = ee.findIndex(e => e === minEfficiency);
896
+ const maxIndex = ee.findIndex(e => e === maxEfficiency);
897
+ if (minIndex === -1 || maxIndex === -1) {
898
+ return false;
407
899
  }
408
- return { value: match.groups?.value, unit: match.groups?.unit };
409
- }
410
- export function convertToBoolean(value) {
411
- if (value === 'true') {
412
- return true;
900
+ return minIndex >= maxIndex;
901
+ };
902
+ export function validate(value, validator, skipEmpty = true) {
903
+ let valueToValidate = value;
904
+ if (typeof value === 'string') {
905
+ valueToValidate = removeMacro(value);
413
906
  }
414
- if (value === 'false') {
415
- return false;
907
+ if (!value && skipEmpty) {
908
+ return { success: true, data: value };
416
909
  }
417
- throw new Error('Invalid boolean value');
418
- }
419
- export function castToArray(value) {
420
- return Array.isArray(value) ? value : [value];
421
- }
422
- export function castToInt(value) {
423
- return typeof value === 'string' ? parseInt(value, 10) : value;
910
+ return validator.safeParse(valueToValidate);
424
911
  }
425
- export function getSourceValueSeparator(source = '') {
426
- switch (source) {
427
- case SOURCE_GOOGLE_PRODUCT_HIGHLIGHT:
428
- return '|';
429
- case SOURCE_FB_CATEGORY:
430
- return ':';
431
- default:
432
- return ',';
912
+ export function validateIfNoMacro(value, validator) {
913
+ if (typeof value === 'string' && hasMacro(value)) {
914
+ return { success: true, data: value };
915
+ }
916
+ if (Array.isArray(validator)) {
917
+ for (const v of validator) {
918
+ const result = v.safeParse(resolveSourceMacro(value));
919
+ if (!result.success) {
920
+ return result;
921
+ }
922
+ }
923
+ return { success: true, data: value };
433
924
  }
925
+ return validator.safeParse(resolveSourceMacro(value));
434
926
  }
435
- //# sourceMappingURL=index.js.map
927
+ //# sourceMappingURL=common-schemas.js.map