web-csv-toolbox - v0.14.0
    Preparing search index...

    Type Alias SplitCSVFields<Char, Delimiter, Quotation, Escaping, Col, Result>

    SplitCSVFields: Char extends `${Delimiter}${infer R}`
        ? Escaping extends true
            ? SplitCSVFields<
                R,
                Delimiter,
                Quotation,
                true,
                `${Col}${Delimiter}`,
                Result,
            >
            : SplitCSVFields<R, Delimiter, Quotation, false, "", [...Result, Col]>
        : Char extends `${Quotation}${infer R}`
            ? Escaping extends true
                ? R extends ""
                | Delimiter
                | `${Delimiter}${string}`
                    ? SplitCSVFields<R, Delimiter, Quotation, false, Col, Result>
                    : SplitCSVFields<
                        R,
                        Delimiter,
                        Quotation,
                        true,
                        `${Col}${Quotation}`,
                        Result,
                    >
                : SplitCSVFields<R, Delimiter, Quotation, true, Col, Result>
            : Char extends `${infer F}${infer R}`
                ? SplitCSVFields<
                    R,
                    Delimiter,
                    Quotation,
                    Escaping,
                    `${Col}${F}`,
                    Result,
                >
                : [...Result, Col] extends [""]
                    ? readonly string[]
                    : readonly [...Result, Col]

    Split CSV-formatted string into field array with proper unescaping.

    Type Parameters

    • Char extends string
    • Delimiter extends string = DEFAULT_DELIMITER
    • Quotation extends string = DEFAULT_QUOTATION
    • Escaping extends boolean = false
    • Col extends string = ""
    • Result extends string[] = []

    This type handles CSV-specific parsing:

    • Unquotes quoted fields
    • Handles escaped quotation marks
    • Splits by the specified delimiter
    const header = `name,age,city,zip`;

    type _ = SplitCSVFields<typeof header>
    // ["name", "age", "city", "zip"]
    const header = `name@$a
    ge$@city@zip`;

    type _ = SplitCSVFields<typeof header, "@", "$">
    // ["name", "a\nge", "city", "zip"]