Node scripts often split path-like strings into directory, base name, and extension pieces.

path parts Separating path parts lets script code route files by name or extension without changing the real filesystem.

Path Segment Parse

fileName
path_parts.ts
Replay: real traced execution (multi-file project)
type PathParts = {
    directory: string;
    base: string;
    extension: string;
};

function splitPath(path: string): PathParts {
    const segments: string[] = path.split("/");
    const file: string = segments[segments.length - 1];
    const dot: number = file.lastIndexOf(".");

    return {
        directory: segments.slice(0, -1).join("/"),
        base: file.slice(0, dot),
        extension: file.slice(dot + 1)
    };
}

const fileName: string = "report.csv";
const parts: PathParts = splitPath(`data/${fileName}`);

console.log(`${parts.directory}:${parts.base}:${parts.extension}`);
type PathParts = {
    directory: string;
    base: string;
    extension: string;
};

function splitPath(path: string): PathParts {
    const segments: string[] = path.split("/");
    const file: string = segments[segments.length - 1];
    const dot: number = file.lastIndexOf(".");

    return {
        directory: segments.slice(0, -1).join("/"),
        base: file.slice(0, dot),
        extension: file.slice(dot + 1)
    };
}

const fileName: string = "summary.json";
const parts: PathParts = splitPath(`data/${fileName}`);

console.log(`${parts.directory}:${parts.base}:${parts.extension}`);
  1. fileName ← report.csv

    16    };17}1819const fileName→ report.csv: string = "report.csv";  //@fileName="summary.json"20const parts: PathParts = splitPath(`data/${fileNamereport.csv}`);
  2. segments ← data,report.csv, file ← report.csv, segments[segments.length - 1] ← report.csv

    4    extension: string;5};67function splitPath(pathdata/report.csv: string): PathParts {8    const segments→ data,report.csv: string[] = pathdata/report.csv.split("/");9    const file→ report.csv: string = segments[segments.length - 1]→ report.csv;10    const dot→ 6: number = filereport.csv.lastIndexOf(".");1112    return {13        directory: segmentsdata,report.csv.slice(0, -1).join("/"),14        base: filereport.csv.slice(0, dot6),15        extension: filereport.csv.slice(dot + 1)16    };17}
  3. parts ← [object Object]

    19const fileName: string = "report.csv";  //@fileName="summary.json"20const parts→ [object Object]: PathParts = splitPath(`data/${fileNamereport.csv}`);2122console.log(`${parts.directorydata}:${parts.basereport}:${parts.extensioncsv}`);
    outputdata:report:csv
  1. fileName ← summary.json

    16    };17}1819const fileName→ summary.json: string = "summary.json";20const parts: PathParts = splitPath(`data/${fileNamesummary.json}`);
  2. segments ← data,summary.json, file ← summary.json, segments[segments.length - 1] ← summary.json

    4    extension: string;5};67function splitPath(pathdata/summary.json: string): PathParts {8    const segments→ data,summary.json: string[] = pathdata/summary.json.split("/");9    const file→ summary.json: string = segments[segments.length - 1]→ summary.json;10    const dot→ 7: number = filesummary.json.lastIndexOf(".");1112    return {13        directory: segmentsdata,summary.json.slice(0, -1).join("/"),14        base: filesummary.json.slice(0, dot7),15        extension: filesummary.json.slice(dot + 1)16    };17}
  3. parts ← [object Object]

    19const fileName: string = "summary.json";20const parts→ [object Object]: PathParts = splitPath(`data/${fileNamesummary.json}`);2122console.log(`${parts.directorydata}:${parts.basesummary}:${parts.extensionjson}`);
    outputdata:summary:json