This commit is contained in:
2026-10-13 13:47:03 +08:00
parent a0e9ad808b
commit c72c819f95
3 changed files with 33 additions and 5 deletions
@@ -0,0 +1,14 @@
import assert from 'node:assert/strict'
import { readFileSync } from 'node:fs'
import test from 'node:test'
import ts from 'typescript'
const source = readFileSync(new URL('./relabelSkuDisplay.ts', import.meta.url), 'utf8')
const js = ts.transpileModule(source, { compilerOptions: { module: ts.ModuleKind.ESNext, target: ts.ScriptTarget.ES2022 } }).outputText
const { relabelSkuCodes, relabelSkuCount } = await import(`data:text/javascript;base64,${Buffer.from(js).toString('base64')}`)
test('one box with two SKU mappings shows both and counts unique SKUs across boxes', () => {
const item = { skuCode: 'FIRST', skuItems: [{ skuCode: 'FIRST' }, { skuCode: 'SECOND' }] }
assert.deepEqual(relabelSkuCodes(item), ['FIRST', 'SECOND'])
assert.equal(relabelSkuCount([item, { skuCode: 'SECOND' }]), 2)
assert.deepEqual(relabelSkuCodes({ skuCode: 'FIRST,SECOND', skuItems: [] }), ['FIRST', 'SECOND'])
})
@@ -0,0 +1,13 @@
interface RelabelSkuSource {
skuCode?: string | null
skuItems?: Array<{ skuCode: string }> | null
}
export function relabelSkuCodes(item: RelabelSkuSource): string[] {
const codes = item.skuItems?.length ? item.skuItems.map(line => line.skuCode) : (item.skuCode || '').split(',')
return [...new Set(codes.map(code => code.trim()).filter(Boolean))]
}
export function relabelSkuCount(items: RelabelSkuSource[]): number {
return new Set(items.flatMap(relabelSkuCodes)).size
}