#!/usr/bin/env node

// Quand on veut garder les double quotes présentes dans les champs d'un TSV, on
// peut utiliser ce script pour les échapper.

const fs = require('fs/promises');

const fixField = (field) => {
    if (!field.includes('"')) return field;
    return `"${field.replace(/"/g, '""')}"`;
}

const fixLine = (line) => {
    const fields = line.split("\t");
    return fields.map(fixField).join("\t");
}

const getFixedTsvQuotes = (content) => {
    const lines = content.split("\r\n");
    const fixedLines = lines.map(fixLine);
    const fixedContent = fixedLines.join("\n");
    return fixedContent;
}

const fixFile = async (fileName) => {
    const content = await fs.readFile(fileName, { encoding: "utf8"});
    const fixedContent = getFixedTsvQuotes(content);
    await fs.writeFile(fileName, fixedContent, { encoding: "utf8" });
};

const args = process.argv.slice(2);
if (!args.length) {
    console.error(`${process.argv[1]} a besoin d'un nom fichier à corriger.`);
    process.exit(1);
}
fixFile(args[0]);
