@thingts/path - v2.0.4
    Preparing search index...

    Interface PathOps<TJoinable>

    Operations available on path-like objects.

    interface PathOps<TJoinable = never> {
        extension: string | undefined;
        filename: Filename | undefined;
        parent: PathOps<TJoinable>;
        segments: string[];
        stem: string | undefined;
        equals(other: string | PathOps<TJoinable>): boolean;
        join(
            ...segments: readonly (
                TJoinable
                | undefined | null | string | Filename
            )[],
        ): this;
        replaceExtension(newExt: string): this;
        replaceFilename(newFilename: string | Filename): this;
        replaceParent(newParent: string | PathOps<TJoinable>): this;
        replaceStem(newStem: string): this;
        toString(): string;
        transformFilename(fn: (filename: Filename) => string | Filename): this;
    }

    Type Parameters

    • TJoinable = never

    Hierarchy (View Summary)

    Implemented by

    Index

    Properties

    extension: string | undefined

    Returns the extension of the filename including the leading dot, as a string. If the filename has no extension, returns an empty string.

    Note that if the filename starts with a dot (e.g. .gitignore), that dot is considered part of the stem. So .gitignore has extension '' and .gitignore.bak has extension .bak

    filename: Filename | undefined

    The filename component (last path segment) as a Filename.

    new AbsolutePath('/a/b/c.txt').filename // Filename('c.txt')
    new RelativePath('a/b/c.txt').filename // Filename('c.txt')

    The parent directory of this path.

    A new instance pointing to the parent.

    new AbsolutePath('/a/b/c.txt').parent // AbsolutePath('/a/b')
    new RelativePath('a/b/c.txt').parent // RelativePath('a/b')
    segments: string[]

    The segments of this path as an array of strings.

    new AbsolutePath('/a/b/c.txt').segments // ['a', 'b', 'c.txt']
    new RelativePath('a/b/c.txt').segments // ['a', 'b', 'c.txt']
    stem: string | undefined

    Returns the stem of the filename, i.e. the part before the extension. If the filename has no extension, returns the entire filename

    Note that if the filename starts with a dot (e.g. .gitignore), that dot is considered part of the stem. So .gitignore and .gitignore.bak both have stem .gitignore

    Methods

    • Join additional path segments to this path.

      Accepts relative path objects and Filename segment arguments for type safety, but you can also directly pass strings for convenience. All args are stringified and interpreted as segments to be joined, regardless of whether they start with a path separator.

      Any null, undefined, or empty segments are ignored.

      Parameters

      Returns this

      A new instance with the segments appended and resulting path normalized.

      const a1 = new AbsolutePath('/project/demo')
      const a2 = a1.join('demo1/src', 'index.js') // → AbsolutePath('/project/demo/demo1/src/index.js')

      const r1 = new RelativePath('demo')
      const r2 = r1.join('demo1/src', 'index.js') // → RelativePath('demo/demo1/src/index.js')
    • Replace the filename extension, keeping the stem the same. The passed string can include or omit the leading dot; if omitted, it will be added.

      Parameters

      • newExt: string

        New extension, e.g. json or .json

      Returns this

      A new instance with the filename extension replaced.

      new AbsolutePath('/a/b/c.txt').replaceExtension('json') // '/a/b/c.json' (AbsolutePath)
      new RelativePath('a/b/c.txt').replaceExtension('.json') // '/a/b/c.json' (RelativePath)
    • Replace the filename (last segment).

      Parameters

      Returns this

      A new instance with the filename replaced.

      new AbsolutePath('/a/b/c.txt').replaceFilename('d.json') // → AbsolutePath('/a/b/d.json')
      new RelativePath('a/b/c.txt').replaceFilename('d.json') // → RelativePath('a/b/d.json')
    • Replace the entire directory path through the parent, while keeping the current filename.

      Parameters

      • newParent: string | PathOps<TJoinable>

        Parent directory as string or another path

      Returns this

      A new path rooted at newParent with the same filename.

      new AbsolutePath('/old/file.txt').replaceParent('/new/dir') // '/new/dir/file.txt' (AbsolutePath)
      new RelativePath('old/file.txt').replaceParent('new/dir') // 'new/dir/file.txt' (RelativePath)
    • Replace the filename stem, keeping the extension the same

      Parameters

      • newStem: string

      Returns this

      A new instance with the filename stem replaced.

      new AbsolutePath('/a/b/c.txt').replaceStem('d') // → AbsolutePath('/a/b/d.txt')
      new RelativePath('a/b/c.txt').replaceStem('d') // → RelativePath('a/b/d.txt')
    • Transform the filename via a callback.

      Parameters

      Returns this

      A new instance with the transformed filename.

      p.transformFilename(f => String(f).toUpperCase())