Fix csv-parse implementation since major update

Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
CrazyMax 2022-04-25 06:47:48 +02:00
parent 300b1bdff7
commit 5ea21bf2ba
No known key found for this signature in database
GPG Key ID: 3248E46B6BB8C7F7
3 changed files with 22 additions and 16 deletions

View File

@ -1,10 +1,13 @@
module.exports = { module.exports = {
clearMocks: false, clearMocks: false,
moduleFileExtensions: ['js', 'ts'], moduleFileExtensions: ['js', 'ts'],
setupFiles: ["dotenv/config"], setupFiles: ['dotenv/config'],
testMatch: ['**/*.test.ts'], testMatch: ['**/*.test.ts'],
transform: { transform: {
'^.+\\.ts$': 'ts-jest' '^.+\\.ts$': 'ts-jest'
}, },
moduleNameMapper: {
'^csv-parse/sync': '<rootDir>/node_modules/csv-parse/dist/cjs/sync.cjs'
},
verbose: true verbose: true
} };

View File

@ -1,4 +1,4 @@
import csvparse from 'csv-parse/lib/sync'; import {parse} from 'csv-parse/sync';
import fs from 'fs'; import fs from 'fs';
import path from 'path'; import path from 'path';
import * as semver from 'semver'; import * as semver from 'semver';
@ -77,18 +77,19 @@ export async function getSecret(kvp: string, file: boolean): Promise<string> {
} }
export function isLocalOrTarExporter(outputs: string[]): boolean { export function isLocalOrTarExporter(outputs: string[]): boolean {
for (const output of csvparse(outputs.join(`\n`), { const records = parse(outputs.join(`\n`), {
delimiter: ',', delimiter: ',',
trim: true, trim: true,
columns: false, columns: false,
relaxColumnCount: true relaxColumnCount: true
})) { });
for (const record of records) {
// Local if no type is defined // Local if no type is defined
// https://github.com/docker/buildx/blob/d2bf42f8b4784d83fde17acb3ed84703ddc2156b/build/output.go#L29-L43 // https://github.com/docker/buildx/blob/d2bf42f8b4784d83fde17acb3ed84703ddc2156b/build/output.go#L29-L43
if (output.length == 1 && !output[0].startsWith('type=')) { if (record.length == 1 && !record[0].startsWith('type=')) {
return true; return true;
} }
for (const [key, value] of output.map(chunk => chunk.split('=').map(item => item.trim()))) { for (const [key, value] of record.map(chunk => chunk.split('=').map(item => item.trim()))) {
if (key == 'type' && (value == 'local' || value == 'tar')) { if (key == 'type' && (value == 'local' || value == 'tar')) {
return true; return true;
} }

View File

@ -1,4 +1,4 @@
import csvparse from 'csv-parse/lib/sync'; import {parse} from 'csv-parse/sync';
import * as fs from 'fs'; import * as fs from 'fs';
import * as os from 'os'; import * as os from 'os';
import * as path from 'path'; import * as path from 'path';
@ -217,20 +217,22 @@ export async function getInputList(name: string, ignoreComma?: boolean): Promise
return res; return res;
} }
for (const output of (await csvparse(items, { const records = await parse(items, {
columns: false, columns: false,
relax: true, relaxQuotes: true,
relaxColumnCount: true, relaxColumnCount: true,
skipLinesWithEmptyValues: true skipEmptyLines: true
})) as Array<string[]>) { });
if (output.length == 1) {
res.push(output[0]); for (const record of records as Array<string[]>) {
if (record.length == 1) {
res.push(record[0]);
continue; continue;
} else if (!ignoreComma) { } else if (!ignoreComma) {
res.push(...output); res.push(...record);
continue; continue;
} }
res.push(output.join(',')); res.push(record.join(','));
} }
return res.filter(item => item).map(pat => pat.trim()); return res.filter(item => item).map(pat => pat.trim());