diff options
author | Sam Wilkins <samwilkins333@gmail.com> | 2020-02-22 12:10:32 -0500 |
---|---|---|
committer | Sam Wilkins <samwilkins333@gmail.com> | 2020-02-22 12:10:32 -0500 |
commit | f15269bf5b1006bc8169892940dcf027ff6c023d (patch) | |
tree | bb4625c7a1acfacbbfc4b1e8437733b08f7ef8b4 /src | |
parent | 9520d54378438b967485d008a4026007a6c73097 (diff) |
importer finalize pre comment
Diffstat (limited to 'src')
-rw-r--r-- | src/scraping/buxton/final/BuxtonImporter.ts | 33 |
1 files changed, 23 insertions, 10 deletions
diff --git a/src/scraping/buxton/final/BuxtonImporter.ts b/src/scraping/buxton/final/BuxtonImporter.ts index 098671942..319486593 100644 --- a/src/scraping/buxton/final/BuxtonImporter.ts +++ b/src/scraping/buxton/final/BuxtonImporter.ts @@ -40,11 +40,15 @@ export interface AnalysisResult { errors?: { [key: string]: string }; } -type Transformer<T> = (raw: string) => { transformed?: T, error?: string }; +type Transformer<T> = (raw: string) => TransformResult<T>; +interface TransformResult<T> { + transformed?: T; + error?: string; +} export interface ImportResults { - deviceCount: number, - errorCount: number + deviceCount: number; + errorCount: number; } type ResultCallback = (result: AnalysisResult) => void; @@ -65,7 +69,7 @@ interface ImageData { namespace Utilities { - export function numberValue(raw: string) { + export function numberValue(raw: string): TransformResult<number> { const transformed = Number(raw); if (isNaN(transformed)) { return { error: `${raw} cannot be parsed to a numeric value.` }; @@ -73,13 +77,13 @@ namespace Utilities { return { transformed }; } - export function collectUniqueTokens(raw: string) { + export function collectUniqueTokens(raw: string): TransformResult<string[]> { const pieces = raw.replace(/,|\s+and\s+/g, " ").split(/\s+/).filter(piece => piece.length); const unique = new Set(pieces.map(token => token.toLowerCase().trim())); return { transformed: Array.from(unique).map(capitalize).sort() }; } - export function correctSentences(raw: string) { + export function correctSentences(raw: string): TransformResult<string> { raw = raw.replace(/\./g, ". ").replace(/\:/g, ": ").replace(/\,/g, ", ").replace(/\?/g, "? ").trimRight(); raw = raw.replace(/\s{2,}/g, " "); return { transformed: raw }; @@ -125,16 +129,25 @@ const RegexMap = new Map<keyof DeviceDocument, Processor<any>>([ }], ["primaryKey", { exp: /Primary:\s+(.*)(Secondary|Additional):/, - transformer: raw => ({ transformed: Utilities.collectUniqueTokens(raw).transformed[0] }) + transformer: raw => { + const { transformed, error } = Utilities.collectUniqueTokens(raw); + return transformed ? { transformed: transformed[0] } : { error }; + } }], ["secondaryKey", { exp: /(Secondary|Additional):\s+(.*)Attributes?:/, - transformer: raw => ({ transformed: Utilities.collectUniqueTokens(raw).transformed[0] }), + transformer: raw => { + const { transformed, error } = Utilities.collectUniqueTokens(raw); + return transformed ? { transformed: transformed[0] } : { error }; + }, matchIndex: 2 }], ["attribute", { exp: /Attributes?:\s+(.*)Links/, - transformer: raw => ({ transformed: Utilities.collectUniqueTokens(raw).transformed[0] }), + transformer: raw => { + const { transformed, error } = Utilities.collectUniqueTokens(raw); + return transformed ? { transformed: transformed[0] } : { error }; + }, }], ["originalPrice", { exp: /Original Price \(USD\)\:\s+(\$[0-9\,]+\.[0-9]+|NFS)/, @@ -300,7 +313,7 @@ async function writeImages(zip: any): Promise<ImageData[]> { const { width, height, type } = await new Promise<Dimensions>(async resolve => { const sizeStream = createImageSizeStream().on('size', (dimensions: Dimensions) => { readStream.destroy(); - resolve(dimensions) + resolve(dimensions); }); const readStream = await streamImage(); readStream.pipe(sizeStream); |