@thingts/path - v1.0.5
    Preparing search index...

    Class RelativePath

    Represents an relative filesystem path (i.e. a path that doesn't start at the root, i.e. doesn't have a leading separator) and is not, and provides methods for path manipulation and queries.

    RelativePath instances are normalized and immutable.

    RelativePath is similar to AbsolutePath but lacks methods that are only valid for absolute paths.

    const p1 = new Relative('demos')
    const p2 = p1.join('demo1/src', 'index.ts') // 'demos/demo1/src/index.ts'

    Hierarchy

    • PathBase
      • RelativePath
    Index

    Constructors

    • Create a new RelativePath from a string or another RelativePath.

      The path is normalized and guaranteed to be relative. Any trailing separator is removed.

      Throws an error if the provided path is absolute

      Parameters

      Returns RelativePath

      new AbsolutePath('project/demos')   // OK
      new AbsolutePath('/project/demos') // Throws Error
      new AbsolutePath('project//src/../demos/') // normalized => project/demos

    Accessors

    • get extension(): string

      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

      Returns string

    • get filename(): Filename

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

      Returns Filename

      new AbsolutePath('/a/b/c.txt').filename // 'c.txt' (Filename)
      new RelativePath('a/b/c.txt').filename // 'c.txt' (Filename)
    • get parent(): this

      The parent directory of this path.

      Returns this

      A new path instance pointing to the parent.

      new AbsolutePath('/a/b/c.txt').parent // '/a/b' (AbsolutePath)
      new RelativePath('a/b/c.txt').parent // 'a/b' (RelativePath)
    • get stem(): string

      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

      Returns string

    Methods

    • Returns true if this path equals the other path or string

      Parameters

      • other: string | PathBase

      Returns boolean

    • Join additional path segments to this path.

      Accepts strings or path objects; null and undefined are ignored. The resulting path is normalized.

      Parameters

      • ...segments: readonly (undefined | null | string | FilenameBase)[]

      Returns this

      A new path instance with the segments appended

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

      const r1 = new RelativePath('demo')
      const r2 = r1.join('demo1/src', 'index.js') // 'demo/demo1/src/index.js'
      r2 instanceof RelativePath // true
    • Protected factory to construct a new instance of the current class, with the given path.

      Used by all mutation-like methods to return a new instance of the same class, allowing derived classes that inherit those methods to return new instances of themselves without needing to override them.

      The default implementation assumes the derived class's constructor takes a single string argument (the path). Derived classes with different constructor siguatures should override newSelf.

      Parameters

      • path: string | FilenameBase

      Returns this

    • Replace the filename extension, keeping the stem the same. The passed 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 path with the 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 path with the filename replaced.

    • Replace the parent directory while keeping the current filename.

      Parameters

      • newParent: string | PathBase

        Parent directory as string or another PathBase.

      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

        New stem to use (extension is preserved).

      Returns this

      A new path with the stem replaced.

      new AbsolutePath('/a/b/c.txt').replaceStem('d') // '/a/b/d.txt' (AbsolutePath)
      new RelativePath('a/b/c.txt').replaceStem('d') // 'a/b/d.txt' (RelativePath)
    • Returns the path as string.

      Returns string

    • Transform the filename via a callback.

      Parameters

      Returns this

      A new path with the transformed filename.

      p.transformFilename(f => String(f).toUpperCase())
      
    • Checks whether a string is a relative path. (I.e., if it would be acceptable to the RelativePath constructor.)

      Parameters

      • filepath: string

        The string to check.

      Returns boolean

      True if the string is an absolute path, otherwise false.