feed-common 1.77.1 → 1.77.3
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 +12 -0
- package/dist/constants/profile.constants.d.ts.map +1 -1
- package/dist/constants/profile.constants.js +39 -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 -176
- 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 +1 -1
- package/dist/utils/feed-templates/ebay.template.d.ts.map +1 -1
- package/dist/utils/feed-templates/ebay.template.js +189 -2
- 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 +39 -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 +215 -4
- 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 -514
@@ -1,50 +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
|
-
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.js';
|
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',
|
122
|
-
'
|
123
|
-
'
|
124
|
-
'
|
125
|
-
'
|
126
|
-
'
|
127
|
-
'
|
128
|
-
'
|
129
|
-
'
|
130
|
-
'
|
131
|
-
'
|
132
|
-
'
|
133
|
-
'
|
134
|
-
'
|
135
|
-
'
|
136
|
-
'
|
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
|
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
|
-
|
172
|
-
|
173
|
-
|
174
|
-
|
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(
|
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
|
375
|
-
|
376
|
-
|
377
|
-
|
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
|
399
|
-
|
400
|
-
|
401
|
-
|
402
|
-
|
403
|
-
|
404
|
-
|
405
|
-
|
406
|
-
|
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
|
409
|
-
}
|
410
|
-
export function
|
411
|
-
|
412
|
-
|
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
|
415
|
-
return
|
907
|
+
if (!value && skipEmpty) {
|
908
|
+
return { success: true, data: value };
|
416
909
|
}
|
417
|
-
|
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
|
426
|
-
|
427
|
-
|
428
|
-
|
429
|
-
|
430
|
-
|
431
|
-
|
432
|
-
|
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=
|
927
|
+
//# sourceMappingURL=common-schemas.js.map
|