27 lines
840 B
JavaScript
27 lines
840 B
JavaScript
'use strict';
|
|
|
|
const { createHash } = require('crypto');
|
|
|
|
function normalizeText(value, maxLength = 1000) {
|
|
return String(value ?? '').trim().slice(0, maxLength);
|
|
}
|
|
|
|
function buildAlibaba1688SkuKey(sku, position) {
|
|
const specs = (Array.isArray(sku?.specs) ? sku.specs : [])
|
|
.map(item => `${normalizeText(item?.name, 120)}=${normalizeText(item?.value, 500)}`)
|
|
.filter(value => value !== '=')
|
|
.join('|');
|
|
return `${Number(sku?.index) || position + 1}:${specs || normalizeText(sku?.name, 500)}`;
|
|
}
|
|
|
|
function buildAlibaba1688SkuFingerprint(skus) {
|
|
const keys = (Array.isArray(skus) ? skus : [])
|
|
.map((sku, index) => buildAlibaba1688SkuKey(sku, index));
|
|
return createHash('sha256').update(JSON.stringify(keys), 'utf8').digest('hex');
|
|
}
|
|
|
|
module.exports = {
|
|
buildAlibaba1688SkuKey,
|
|
buildAlibaba1688SkuFingerprint,
|
|
};
|