feed-common 1.49.2 → 1.49.4
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +15 -0
- package/dist/constants/profile.constants.d.ts +2 -2
- package/dist/constants/profile.constants.d.ts.map +1 -1
- package/dist/constants/profile.constants.js +146 -145
- package/dist/constants/profile.constants.js.map +1 -1
- package/dist/types/profile.types.d.ts +3 -5
- package/dist/types/profile.types.d.ts.map +1 -1
- package/dist/utils/feed-templates/facebook.template.d.ts.map +1 -1
- package/dist/utils/feed-templates/facebook.template.js +2 -0
- 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 +8 -0
- 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 +10 -0
- 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 +3 -0
- package/dist/utils/feed-templates/microsoft.template.js.map +1 -1
- package/dist/utils/feed-templates/tiktok.template.d.ts.map +1 -1
- package/dist/utils/feed-templates/tiktok.template.js +2 -0
- package/dist/utils/feed-templates/tiktok.template.js.map +1 -1
- package/dist/utils/profile.d.ts +0 -7
- package/dist/utils/profile.d.ts.map +1 -1
- package/dist/utils/profile.js +57 -52
- package/dist/utils/profile.js.map +1 -1
- package/package.json +1 -1
- package/src/constants/profile.constants.ts +149 -146
- package/src/types/profile.types.ts +3 -5
- package/src/utils/feed-templates/facebook.template.ts +2 -0
- package/src/utils/feed-templates/google-api.template.ts +8 -0
- package/src/utils/feed-templates/google.template.ts +10 -0
- package/src/utils/feed-templates/microsoft.template.ts +3 -0
- package/src/utils/feed-templates/tiktok.template.ts +2 -0
- package/src/utils/profile.ts +62 -62
- package/tests/profile.spec.ts +765 -755
@@ -38,6 +38,7 @@ const availabilityMapping: ProductUploadMapSource = {
|
|
38
38
|
validateIfNoMacro(v, z.enum(['in_stock', 'out_of_stock', 'preorder', 'backorder'])),
|
39
39
|
rules: { sections: [] },
|
40
40
|
baseMode: true,
|
41
|
+
defaultValue: '',
|
41
42
|
};
|
42
43
|
|
43
44
|
const customLabelMapping: ProductUploadMapSource = {
|
@@ -49,6 +50,7 @@ const customLabelMapping: ProductUploadMapSource = {
|
|
49
50
|
type: 'macro-input' as any,
|
50
51
|
validator: (v: string | number) => validateIfNoMacro(v, z.string().max(100)),
|
51
52
|
rules: { sections: [] },
|
53
|
+
defaultValue: '',
|
52
54
|
};
|
53
55
|
|
54
56
|
export const googleFeedTemplate: XmlFeedTemplateType = {
|
@@ -375,6 +377,7 @@ export const googleFeedTemplate: XmlFeedTemplateType = {
|
|
375
377
|
required: false,
|
376
378
|
type: 'macro-input',
|
377
379
|
rules: { sections: [] },
|
380
|
+
defaultValue: '',
|
378
381
|
},
|
379
382
|
{
|
380
383
|
attribute: 'auto_pricing_min_price',
|
@@ -540,6 +543,7 @@ export const googleFeedTemplate: XmlFeedTemplateType = {
|
|
540
543
|
// TODO: add to check if product is apparel
|
541
544
|
validator: (v: string | number) => validateIfNoMacro(v, z.string().max(100)),
|
542
545
|
rules: { sections: [] },
|
546
|
+
defaultValue: '',
|
543
547
|
},
|
544
548
|
{
|
545
549
|
attribute: 'gender',
|
@@ -551,6 +555,7 @@ export const googleFeedTemplate: XmlFeedTemplateType = {
|
|
551
555
|
// TODO: add to check if product is apparel
|
552
556
|
validator: (v: string | number) => validateIfNoMacro(v, z.enum(['male', 'female', 'unisex', ''])),
|
553
557
|
rules: { sections: [] },
|
558
|
+
defaultValue: '',
|
554
559
|
},
|
555
560
|
{
|
556
561
|
attribute: 'material',
|
@@ -561,6 +566,7 @@ export const googleFeedTemplate: XmlFeedTemplateType = {
|
|
561
566
|
type: 'macro-input',
|
562
567
|
validator: (v: string | number) => validateIfNoMacro(v, z.string().max(200)),
|
563
568
|
rules: { sections: [] },
|
569
|
+
defaultValue: '',
|
564
570
|
},
|
565
571
|
{
|
566
572
|
attribute: 'pattern',
|
@@ -571,6 +577,7 @@ export const googleFeedTemplate: XmlFeedTemplateType = {
|
|
571
577
|
type: 'macro-input',
|
572
578
|
validator: (v: string | number) => validateIfNoMacro(v, z.string().max(100)),
|
573
579
|
rules: { sections: [] },
|
580
|
+
defaultValue: '',
|
574
581
|
},
|
575
582
|
{
|
576
583
|
attribute: 'size',
|
@@ -582,6 +589,7 @@ export const googleFeedTemplate: XmlFeedTemplateType = {
|
|
582
589
|
// TODO: add to check if product is apparel
|
583
590
|
validator: (v: string | number) => validateIfNoMacro(v, z.string().max(100)),
|
584
591
|
rules: { sections: [] },
|
592
|
+
defaultValue: '',
|
585
593
|
},
|
586
594
|
{
|
587
595
|
attribute: 'size_type',
|
@@ -610,6 +618,7 @@ export const googleFeedTemplate: XmlFeedTemplateType = {
|
|
610
618
|
)
|
611
619
|
),
|
612
620
|
rules: { sections: [] },
|
621
|
+
defaultValue: '',
|
613
622
|
},
|
614
623
|
{
|
615
624
|
attribute: 'size_system',
|
@@ -621,6 +630,7 @@ export const googleFeedTemplate: XmlFeedTemplateType = {
|
|
621
630
|
validator: (v: string | number) =>
|
622
631
|
validateIfNoMacro(v, z.enum(['US', 'EU', 'UK', 'DE', 'FR', 'JP', 'CN', 'IT', 'BR', 'MEX', 'AU', ''])),
|
623
632
|
rules: { sections: [] },
|
633
|
+
defaultValue: '',
|
624
634
|
},
|
625
635
|
{
|
626
636
|
attribute: 'item_group_id',
|
@@ -15,6 +15,7 @@ const availabilityMapping = {
|
|
15
15
|
validator: (v: string | number) =>
|
16
16
|
validateIfNoMacro(v, z.enum(['in stock', 'available for order', 'preorder', 'out of stock', 'discontinued'])),
|
17
17
|
baseMode: true,
|
18
|
+
defaultValue: '',
|
18
19
|
};
|
19
20
|
|
20
21
|
const customLabelMapping: ProductUploadMapSource = {
|
@@ -26,6 +27,7 @@ const customLabelMapping: ProductUploadMapSource = {
|
|
26
27
|
type: 'macro-input' as any,
|
27
28
|
validator: (v: string | number) => validateIfNoMacro(v, z.string().max(100)),
|
28
29
|
rules: { sections: [] },
|
30
|
+
defaultValue: '',
|
29
31
|
};
|
30
32
|
|
31
33
|
export const microsoftTemplate: XmlFeedTemplateType = {
|
@@ -465,6 +467,7 @@ export const microsoftTemplate: XmlFeedTemplateType = {
|
|
465
467
|
.optional()
|
466
468
|
),
|
467
469
|
rules: { sections: [] },
|
470
|
+
defaultValue: '',
|
468
471
|
},
|
469
472
|
{
|
470
473
|
attribute: 'product_category',
|
@@ -17,6 +17,7 @@ const availabilityMapping = {
|
|
17
17
|
validator: (v: string | number) =>
|
18
18
|
validateIfNoMacro(v, z.enum(['in stock', 'available for order', 'preorder', 'out of stock', 'discontinued'])),
|
19
19
|
baseMode: true,
|
20
|
+
defaultValue: '',
|
20
21
|
};
|
21
22
|
|
22
23
|
const conditionMapping = {
|
@@ -28,6 +29,7 @@ const conditionMapping = {
|
|
28
29
|
type: 'macro-input' as any,
|
29
30
|
validator: (v: string | number) => validateIfNoMacro(v, z.enum(['new', 'refurbished', 'used'])),
|
30
31
|
baseMode: true,
|
32
|
+
defaultValue: '',
|
31
33
|
};
|
32
34
|
|
33
35
|
const customLabelMapping = {
|
package/src/utils/profile.ts
CHANGED
@@ -11,7 +11,7 @@ import {
|
|
11
11
|
ProductUploadRuleSection,
|
12
12
|
ProductUploadRules,
|
13
13
|
} from '../types/profile.types.js';
|
14
|
-
import { MappingSourceValueType,
|
14
|
+
import { MappingSourceValueType, RULES_OPERATORS } from '../constants/profile.constants.js';
|
15
15
|
import { code } from './utils.js';
|
16
16
|
|
17
17
|
/**
|
@@ -138,36 +138,36 @@ export function getEmptyRuleItem(attribute: ProductUploadRuleFilterType['value']
|
|
138
138
|
return { attribute, operator: '', value: '', id: code() };
|
139
139
|
}
|
140
140
|
|
141
|
-
export function sortMappings(a: ProductUploadMapping, b: ProductUploadMapping): number {
|
142
|
-
|
143
|
-
|
144
|
-
|
141
|
+
// export function sortMappings(a: ProductUploadMapping, b: ProductUploadMapping): number {
|
142
|
+
// if (!a.attribute) {
|
143
|
+
// return 1;
|
144
|
+
// }
|
145
145
|
|
146
|
-
|
147
|
-
|
148
|
-
|
146
|
+
// if (!b.attribute) {
|
147
|
+
// return -1;
|
148
|
+
// }
|
149
149
|
|
150
|
-
|
151
|
-
|
150
|
+
// const sourceA = ProductUploadMappings.find(m => m.attribute === a.attribute);
|
151
|
+
// const sourceB = ProductUploadMappings.find(m => m.attribute === b.attribute);
|
152
152
|
|
153
|
-
|
154
|
-
|
155
|
-
|
153
|
+
// if (sourceA?.required && !sourceB?.required) {
|
154
|
+
// return -1;
|
155
|
+
// }
|
156
156
|
|
157
|
-
|
158
|
-
|
159
|
-
|
157
|
+
// if (sourceB?.required && !sourceA?.required) {
|
158
|
+
// return 1;
|
159
|
+
// }
|
160
160
|
|
161
|
-
|
162
|
-
|
163
|
-
|
161
|
+
// if (a.attribute < b.attribute) {
|
162
|
+
// return -1;
|
163
|
+
// }
|
164
164
|
|
165
|
-
|
166
|
-
|
167
|
-
|
165
|
+
// if (a.attribute > b.attribute) {
|
166
|
+
// return 1;
|
167
|
+
// }
|
168
168
|
|
169
|
-
|
170
|
-
}
|
169
|
+
// return 0;
|
170
|
+
// }
|
171
171
|
|
172
172
|
export function hasRules(rules: ProductUploadRules): boolean {
|
173
173
|
return Array.isArray(rules?.sections) && rules.sections.some(section => section.ruleItems.length > 0);
|
@@ -270,44 +270,44 @@ export function optionIsGroup(option: OptionType): option is OptionTypeGroup {
|
|
270
270
|
return typeof option !== 'string' && 'options' in option;
|
271
271
|
}
|
272
272
|
|
273
|
-
export function detectProfileChange(
|
274
|
-
|
275
|
-
|
276
|
-
): { name: boolean; rules: boolean; mappings: boolean; id: boolean } {
|
277
|
-
|
278
|
-
|
279
|
-
|
280
|
-
|
281
|
-
|
282
|
-
|
283
|
-
|
284
|
-
|
285
|
-
|
286
|
-
|
287
|
-
|
288
|
-
|
289
|
-
|
290
|
-
|
291
|
-
|
292
|
-
|
293
|
-
|
294
|
-
|
295
|
-
|
296
|
-
|
297
|
-
|
298
|
-
|
299
|
-
|
300
|
-
|
301
|
-
|
302
|
-
|
303
|
-
|
304
|
-
|
305
|
-
|
306
|
-
|
307
|
-
|
308
|
-
|
309
|
-
|
310
|
-
}
|
273
|
+
// export function detectProfileChange(
|
274
|
+
// a: ProductUploadProfile,
|
275
|
+
// b: ProductUploadProfile
|
276
|
+
// ): { name: boolean; rules: boolean; mappings: boolean; id: boolean } {
|
277
|
+
// const changes = {
|
278
|
+
// name: false,
|
279
|
+
// rules: false,
|
280
|
+
// mappings: false,
|
281
|
+
// id: false,
|
282
|
+
// };
|
283
|
+
|
284
|
+
// if (a.name !== b.name) {
|
285
|
+
// changes.name = true;
|
286
|
+
// }
|
287
|
+
|
288
|
+
// if (
|
289
|
+
// ProductUploadMappings.filter(m => m.required)
|
290
|
+
// .map(m => m.attribute)
|
291
|
+
// .some(key => {
|
292
|
+
// const mappingA = a.mappings?.filter(m => m.attribute === key) ?? [];
|
293
|
+
// const mappingB = b.mappings?.filter(m => m.attribute === key) ?? [];
|
294
|
+
// return !compareMappings(mappingA, mappingB);
|
295
|
+
// })
|
296
|
+
// ) {
|
297
|
+
// changes.id = true;
|
298
|
+
// }
|
299
|
+
|
300
|
+
// const requiredAttrs = ProductUploadMappings.filter(m => m.required).map(m => m.attribute);
|
301
|
+
// const mappingsA = a.mappings?.filter(m => !requiredAttrs.includes(m.attribute));
|
302
|
+
// const mappingsB = b.mappings?.filter(m => !requiredAttrs.includes(m.attribute));
|
303
|
+
// changes.mappings = !compareMappings(mappingsA, mappingsB);
|
304
|
+
|
305
|
+
// if (!compareRules(a.rules, b.rules)) {
|
306
|
+
// changes.rules = true;
|
307
|
+
// }
|
308
|
+
|
309
|
+
// return changes;
|
310
|
+
// }
|
311
311
|
|
312
312
|
export function sanitizeUploadProfile(profile: ProductUploadProfile): ProductUploadProfile {
|
313
313
|
if (profile.rules?.sections) {
|