feed-common 1.77.0 → 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.
- package/.vscode/settings.json +1 -1
- package/CHANGELOG.md +14 -0
- package/dist/constants/profile.constants.d.ts +14 -1
- package/dist/constants/profile.constants.d.ts.map +1 -1
- package/dist/constants/profile.constants.js +40 -1
- package/dist/constants/profile.constants.js.map +1 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +11 -1
- package/dist/index.js.map +1 -1
- package/dist/sources/country.source.d.ts +5 -0
- package/dist/sources/country.source.d.ts.map +1 -0
- package/dist/sources/country.source.js +78 -0
- package/dist/sources/country.source.js.map +1 -0
- package/dist/sources/currency.source.d.ts.map +1 -1
- package/dist/sources/currency.source.js +0 -1
- package/dist/sources/currency.source.js.map +1 -1
- package/dist/sources/ebay-gallery-type.source.d.ts +5 -0
- package/dist/sources/ebay-gallery-type.source.d.ts.map +1 -0
- package/dist/sources/ebay-gallery-type.source.js +5 -0
- package/dist/sources/ebay-gallery-type.source.js.map +1 -0
- package/dist/sources/ebay-inventory-tracking.source.d.ts +3 -0
- package/dist/sources/ebay-inventory-tracking.source.d.ts.map +1 -0
- package/dist/sources/ebay-inventory-tracking.source.js +11 -0
- package/dist/sources/ebay-inventory-tracking.source.js.map +1 -0
- package/dist/sources/ebay-listing-type.source.d.ts +5 -0
- package/dist/sources/ebay-listing-type.source.d.ts.map +1 -0
- package/dist/sources/ebay-listing-type.source.js +5 -0
- package/dist/sources/ebay-listing-type.source.js.map +1 -0
- package/dist/sources/ebay-yes-no.source.d.ts +5 -0
- package/dist/sources/ebay-yes-no.source.d.ts.map +1 -0
- package/dist/sources/ebay-yes-no.source.js +2 -0
- package/dist/sources/ebay-yes-no.source.js.map +1 -0
- package/dist/sources/google-availability.source.d.ts +5 -0
- package/dist/sources/google-availability.source.d.ts.map +1 -0
- package/dist/sources/google-availability.source.js +7 -0
- package/dist/sources/google-availability.source.js.map +1 -0
- package/dist/sources/language.source.d.ts +5 -0
- package/dist/sources/language.source.d.ts.map +1 -0
- package/dist/sources/language.source.js +31 -0
- package/dist/sources/language.source.js.map +1 -0
- package/dist/utils/feed-templates/{index.d.ts → common-schemas.d.ts} +24 -29
- package/dist/utils/feed-templates/common-schemas.d.ts.map +1 -0
- package/dist/utils/feed-templates/{index.js → common-schemas.js} +668 -173
- package/dist/utils/feed-templates/common-schemas.js.map +1 -0
- package/dist/utils/feed-templates/common.d.ts +20 -0
- package/dist/utils/feed-templates/common.d.ts.map +1 -0
- package/dist/utils/feed-templates/common.js +60 -0
- package/dist/utils/feed-templates/common.js.map +1 -0
- package/dist/utils/feed-templates/ebay.template.d.ts +2 -2
- package/dist/utils/feed-templates/ebay.template.d.ts.map +1 -1
- package/dist/utils/feed-templates/ebay.template.js +190 -3
- package/dist/utils/feed-templates/ebay.template.js.map +1 -1
- package/dist/utils/feed-templates/facebook.template.d.ts.map +1 -1
- package/dist/utils/feed-templates/facebook.template.js +2 -1
- package/dist/utils/feed-templates/facebook.template.js.map +1 -1
- package/dist/utils/feed-templates/google-api.template.d.ts.map +1 -1
- package/dist/utils/feed-templates/google-api.template.js +19 -7
- package/dist/utils/feed-templates/google-api.template.js.map +1 -1
- package/dist/utils/feed-templates/google.template.d.ts.map +1 -1
- package/dist/utils/feed-templates/google.template.js +7 -15
- package/dist/utils/feed-templates/google.template.js.map +1 -1
- package/dist/utils/feed-templates/microsoft.template.d.ts.map +1 -1
- package/dist/utils/feed-templates/microsoft.template.js +11 -7
- package/dist/utils/feed-templates/microsoft.template.js.map +1 -1
- package/dist/utils/feed-templates/template-utils.d.ts +4 -0
- package/dist/utils/feed-templates/template-utils.d.ts.map +1 -0
- package/dist/utils/feed-templates/template-utils.js +29 -0
- package/dist/utils/feed-templates/template-utils.js.map +1 -0
- package/dist/utils/feed-templates/tiktok.template.d.ts.map +1 -1
- package/dist/utils/feed-templates/tiktok.template.js +2 -1
- package/dist/utils/feed-templates/tiktok.template.js.map +1 -1
- package/dist/utils/profile.d.ts +2 -1
- package/dist/utils/profile.d.ts.map +1 -1
- package/dist/utils/profile.js +82 -1
- package/dist/utils/profile.js.map +1 -1
- package/dist/utils/utils.d.ts +2 -0
- package/dist/utils/utils.d.ts.map +1 -1
- package/dist/utils/utils.js +23 -3
- package/dist/utils/utils.js.map +1 -1
- package/package.json +5 -4
- package/src/constants/profile.constants.ts +40 -1
- package/src/index.ts +11 -1
- package/src/sources/country.source.ts +77 -0
- package/src/sources/currency.source.ts +0 -1
- package/src/sources/ebay-gallery-type.source.ts +4 -0
- package/src/sources/ebay-inventory-tracking.source.ts +12 -0
- package/src/sources/ebay-listing-type.source.ts +4 -0
- package/src/sources/ebay-yes-no.source.ts +1 -0
- package/src/sources/google-availability.source.ts +6 -0
- package/src/sources/language.source.ts +30 -0
- package/src/utils/feed-templates/common-schemas.ts +1014 -0
- package/src/utils/feed-templates/common.ts +82 -0
- package/src/utils/feed-templates/ebay.template.ts +216 -5
- package/src/utils/feed-templates/facebook.template.ts +2 -1
- package/src/utils/feed-templates/google-api.template.ts +54 -29
- package/src/utils/feed-templates/google.template.ts +46 -52
- package/src/utils/feed-templates/microsoft.template.ts +26 -21
- package/src/utils/feed-templates/template-utils.ts +30 -0
- package/src/utils/feed-templates/tiktok.template.ts +4 -2
- package/src/utils/profile.ts +116 -2
- package/src/utils/utils.ts +25 -5
- package/tests/company.spec.ts +39 -39
- package/tests/profile-utils.spec.ts +38 -0
- package/tests/validator.spec.ts +1 -5
- package/dist/utils/feed-templates/index.d.ts.map +0 -1
- package/dist/utils/feed-templates/index.js.map +0 -1
- package/src/utils/feed-templates/index.ts +0 -511
@@ -1,49 +1,5 @@
|
|
1
|
-
/* eslint-disable @typescript-eslint/no-explicit-any */
|
2
1
|
import { z } from 'zod';
|
3
|
-
import {
|
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
|
-
export const hasMacro = (v) => /{{[^}]+}}/.test(v.replaceAll(/{{source\..+?}}/g, ''));
|
12
|
-
export const removeMacro = (v) => v.replaceAll(/{{.+?}}/g, '');
|
13
|
-
export function validate(value, validator, skipEmpty = true) {
|
14
|
-
let valueToValidate = value;
|
15
|
-
if (typeof value === 'string') {
|
16
|
-
valueToValidate = removeMacro(value);
|
17
|
-
}
|
18
|
-
if (!value && skipEmpty) {
|
19
|
-
return { success: true, data: value };
|
20
|
-
}
|
21
|
-
return validator.safeParse(valueToValidate);
|
22
|
-
}
|
23
|
-
export function validateIfNoMacro(value, validator) {
|
24
|
-
if (typeof value === 'string' && hasMacro(value)) {
|
25
|
-
return { success: true, data: value };
|
26
|
-
}
|
27
|
-
if (Array.isArray(validator)) {
|
28
|
-
for (const v of validator) {
|
29
|
-
const result = v.safeParse(resolveSourceMacro(value));
|
30
|
-
if (!result.success) {
|
31
|
-
return result;
|
32
|
-
}
|
33
|
-
}
|
34
|
-
return { success: true, data: value };
|
35
|
-
}
|
36
|
-
return validator.safeParse(resolveSourceMacro(value));
|
37
|
-
}
|
38
|
-
export function resolveSourceMacro(macro) {
|
39
|
-
if (typeof macro !== 'string') {
|
40
|
-
return macro;
|
41
|
-
}
|
42
|
-
return macro.replace(/{{source\..+?}}/g, (macro) => {
|
43
|
-
const { tag, value } = getSourceTagValue(macro.slice(2, -2));
|
44
|
-
return value?.map(v => v.value)?.join(getSourceValueSeparator(tag)) ?? '';
|
45
|
-
});
|
46
|
-
}
|
2
|
+
import { resolveSourceMacro } from '../utils';
|
47
3
|
export const dateRangeSchema = z
|
48
4
|
.string()
|
49
5
|
.refine(v => !v || v.split('/').length === 2, {
|
@@ -58,7 +14,6 @@ export const dateRangeSchema = z
|
|
58
14
|
.refine(v => !v || new Date(v.split('/')[1]) > new Date(v.split('/')[0]), {
|
59
15
|
message: 'Date to should be greater than date from',
|
60
16
|
});
|
61
|
-
const unitMeasureRegex = /^(?<quantity>[\d.,]+)\s*(?<units>\w+)$/;
|
62
17
|
export const measureUnitsSchema = (units) => z.string().superRefine((v, ctx) => {
|
63
18
|
if (!v) {
|
64
19
|
return true;
|
@@ -96,79 +51,631 @@ export const sameUnitScheme = (other, errorMessage) => z.string().superRefine((v
|
|
96
51
|
export const optionalUrlSchema = z
|
97
52
|
.string()
|
98
53
|
.refine(v => !v || z.string().url().safeParse(v).success, { message: 'invalid URL' });
|
99
|
-
export function getTemplate(type) {
|
100
|
-
switch (type) {
|
101
|
-
case XMLFeedType.Custom:
|
102
|
-
return customFeedTemplate;
|
103
|
-
case XMLFeedType.Facebook:
|
104
|
-
return facebookFeedTemplate;
|
105
|
-
case XMLFeedType.Google:
|
106
|
-
return googleFeedTemplate;
|
107
|
-
case XMLFeedType.TikTok:
|
108
|
-
return tiktokFeedTemplate;
|
109
|
-
case XMLFeedType.Microsoft:
|
110
|
-
return microsoftTemplate;
|
111
|
-
case XMLFeedType.GMC_API:
|
112
|
-
return googleApiTemplate;
|
113
|
-
default:
|
114
|
-
throw new Error(`Invalid feed type: ${type}`);
|
115
|
-
}
|
116
|
-
}
|
117
54
|
export const currencySchema = z.enum([
|
118
|
-
'AED',
|
119
|
-
'
|
120
|
-
'
|
121
|
-
'
|
122
|
-
'
|
123
|
-
'
|
124
|
-
'
|
125
|
-
'
|
126
|
-
'
|
127
|
-
'
|
128
|
-
'
|
129
|
-
'
|
130
|
-
'
|
131
|
-
'
|
132
|
-
'
|
133
|
-
'
|
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',
|
134
239
|
]);
|
135
|
-
export const languageSchema = z
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
155
|
-
|
156
|
-
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
171
|
-
|
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' });
|
172
679
|
export const priceSchema = ({ min = 0, max = 1000000 } = {}) => z.string().superRefine((v, ctx) => {
|
173
680
|
if (!v) {
|
174
681
|
return true;
|
@@ -219,21 +726,6 @@ export const salePriceSchema = ({ min = 0, max = 1000000, price = '' } = {}) =>
|
|
219
726
|
});
|
220
727
|
}
|
221
728
|
});
|
222
|
-
const ee = ['A+++', 'A++', 'A+', 'A', 'B', 'C', 'D', 'E', 'F', 'G',];
|
223
|
-
/**
|
224
|
-
* Check if minEfficiency is less or equal to maxEfficiency
|
225
|
-
* @param minEfficiency
|
226
|
-
* @param maxEfficiency
|
227
|
-
* @returns
|
228
|
-
*/
|
229
|
-
const compareEfficiency = (minEfficiency, maxEfficiency) => {
|
230
|
-
const minIndex = ee.findIndex(e => e === minEfficiency);
|
231
|
-
const maxIndex = ee.findIndex(e => e === maxEfficiency);
|
232
|
-
if (minIndex === -1 || maxIndex === -1) {
|
233
|
-
return false;
|
234
|
-
}
|
235
|
-
return minIndex >= maxIndex;
|
236
|
-
};
|
237
729
|
export const energyEfficiencyClassSchema = ({ minEfficiency = '', maxEfficiency } = {}) => {
|
238
730
|
return z.string().superRefine((v, ctx) => {
|
239
731
|
if (!v) {
|
@@ -342,7 +834,7 @@ export const maxEnergyEfficiencyClassSchema = ({ efficiency = '', minEfficiency
|
|
342
834
|
return true;
|
343
835
|
});
|
344
836
|
};
|
345
|
-
export const gtinSchema = z.string().refine(
|
837
|
+
export const gtinSchema = z.string().refine(gtin => {
|
346
838
|
if (!gtin) {
|
347
839
|
return true;
|
348
840
|
}
|
@@ -368,14 +860,10 @@ export const requiredIfOtherPresentSchema = (other, errorMessage) => z.string().
|
|
368
860
|
});
|
369
861
|
}
|
370
862
|
});
|
371
|
-
export
|
372
|
-
|
373
|
-
|
374
|
-
|
375
|
-
.map(s => s.trim())
|
376
|
-
.filter(Boolean)
|
377
|
-
: [];
|
378
|
-
}
|
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));
|
379
867
|
export function parsePriceString({ price, min = 0, max = 1000000 }) {
|
380
868
|
const match = priceRegex.exec(price);
|
381
869
|
if (!match) {
|
@@ -391,42 +879,49 @@ export function parsePriceString({ price, min = 0, max = 1000000 }) {
|
|
391
879
|
}
|
392
880
|
return { value: match.groups?.value, currency: match.groups?.currency };
|
393
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, '');
|
394
886
|
export const dimensionRegex = /^(?<value>[\d.,]+)\s*(?<unit>\w+)$/;
|
395
|
-
export
|
396
|
-
|
397
|
-
|
398
|
-
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
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;
|
404
899
|
}
|
405
|
-
return
|
406
|
-
}
|
407
|
-
export function
|
408
|
-
|
409
|
-
|
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);
|
410
906
|
}
|
411
|
-
if (value
|
412
|
-
return
|
907
|
+
if (!value && skipEmpty) {
|
908
|
+
return { success: true, data: value };
|
413
909
|
}
|
414
|
-
|
415
|
-
}
|
416
|
-
export function castToArray(value) {
|
417
|
-
return Array.isArray(value) ? value : [value];
|
418
|
-
}
|
419
|
-
export function castToInt(value) {
|
420
|
-
return typeof value === 'string' ? parseInt(value, 10) : value;
|
910
|
+
return validator.safeParse(valueToValidate);
|
421
911
|
}
|
422
|
-
export function
|
423
|
-
|
424
|
-
|
425
|
-
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
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 };
|
430
924
|
}
|
925
|
+
return validator.safeParse(resolveSourceMacro(value));
|
431
926
|
}
|
432
|
-
//# sourceMappingURL=
|
927
|
+
//# sourceMappingURL=common-schemas.js.map
|