Node Scripting Patterns
Path Segment Parse
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
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}`);
fileName ← report.csv
16 };17}1819const fileName→ report.csv: string = "report.csv"; //@fileName="summary.json"20const parts: PathParts = splitPath(`data/${fileNamereport.csv}`);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}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
fileName ← summary.json
16 };17}1819const fileName→ summary.json: string = "summary.json";20const parts: PathParts = splitPath(`data/${fileNamesummary.json}`);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}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