pax_global_header00006660000000000000000000000064132163176510014517gustar00rootroot0000000000000052 comment=25e023748868f1da8c37eca2e91121b2c74cdec4 parse-filepath-1.0.2/000077500000000000000000000000001321631765100144235ustar00rootroot00000000000000parse-filepath-1.0.2/.editorconfig000066400000000000000000000006461321631765100171060ustar00rootroot00000000000000# http://editorconfig.org root = true [*] indent_style = space end_of_line = lf charset = utf-8 indent_size = 2 trim_trailing_whitespace = true insert_final_newline = true [*.md] trim_trailing_whitespace = false insert_final_newline = false [**/{actual,fixtures,expected}/**] trim_trailing_whitespace = false insert_final_newline = false [**/templates/**] trim_trailing_whitespace = false insert_final_newline = false parse-filepath-1.0.2/.eslintrc.json000066400000000000000000000071251321631765100172240ustar00rootroot00000000000000{ "ecmaFeatures": { "modules": true, "experimentalObjectRestSpread": true }, "env": { "browser": false, "es6": true, "node": true, "mocha": true }, "globals": { "document": false, "navigator": false, "window": false }, "rules": { "accessor-pairs": 2, "arrow-spacing": [2, { "before": true, "after": true }], "block-spacing": [2, "always"], "brace-style": [2, "1tbs", { "allowSingleLine": true }], "comma-dangle": [2, "never"], "comma-spacing": [2, { "before": false, "after": true }], "comma-style": [2, "last"], "constructor-super": 2, "curly": [2, "multi-line"], "dot-location": [2, "property"], "eol-last": 2, "eqeqeq": [2, "allow-null"], "generator-star-spacing": [2, { "before": true, "after": true }], "handle-callback-err": [2, "^(err|error)$" ], "indent": [2, 2, { "SwitchCase": 1 }], "key-spacing": [2, { "beforeColon": false, "afterColon": true }], "keyword-spacing": [2, { "before": true, "after": true }], "new-cap": [2, { "newIsCap": true, "capIsNew": false }], "new-parens": 2, "no-array-constructor": 2, "no-caller": 2, "no-class-assign": 2, "no-cond-assign": 2, "no-const-assign": 2, "no-control-regex": 2, "no-debugger": 2, "no-delete-var": 2, "no-dupe-args": 2, "no-dupe-class-members": 2, "no-dupe-keys": 2, "no-duplicate-case": 2, "no-empty-character-class": 2, "no-eval": 2, "no-ex-assign": 2, "no-extend-native": 2, "no-extra-bind": 2, "no-extra-boolean-cast": 2, "no-extra-parens": [2, "functions"], "no-fallthrough": 2, "no-floating-decimal": 2, "no-func-assign": 2, "no-implied-eval": 2, "no-inner-declarations": [2, "functions"], "no-invalid-regexp": 2, "no-irregular-whitespace": 2, "no-iterator": 2, "no-label-var": 2, "no-labels": 2, "no-lone-blocks": 2, "no-mixed-spaces-and-tabs": 2, "no-multi-spaces": 2, "no-multi-str": 2, "no-multiple-empty-lines": [2, { "max": 1 }], "no-native-reassign": 0, "no-negated-in-lhs": 2, "no-new": 2, "no-new-func": 2, "no-new-object": 2, "no-new-require": 2, "no-new-wrappers": 2, "no-obj-calls": 2, "no-octal": 2, "no-octal-escape": 2, "no-proto": 0, "no-redeclare": 2, "no-regex-spaces": 2, "no-return-assign": 2, "no-self-compare": 2, "no-sequences": 2, "no-shadow-restricted-names": 2, "no-spaced-func": 2, "no-sparse-arrays": 2, "no-this-before-super": 2, "no-throw-literal": 2, "no-trailing-spaces": 0, "no-undef": 2, "no-undef-init": 2, "no-unexpected-multiline": 2, "no-unneeded-ternary": [2, { "defaultAssignment": false }], "no-unreachable": 2, "no-unused-vars": [2, { "vars": "all", "args": "none" }], "no-useless-call": 0, "no-with": 2, "one-var": [0, { "initialized": "never" }], "operator-linebreak": [0, "after", { "overrides": { "?": "before", ":": "before" } }], "padded-blocks": [0, "never"], "quotes": [2, "single", "avoid-escape"], "radix": 2, "semi": [2, "always"], "semi-spacing": [2, { "before": false, "after": true }], "space-before-blocks": [2, "always"], "space-before-function-paren": [2, "never"], "space-in-parens": [2, "never"], "space-infix-ops": 2, "space-unary-ops": [2, { "words": true, "nonwords": false }], "spaced-comment": [0, "always", { "markers": ["global", "globals", "eslint", "eslint-disable", "*package", "!", ","] }], "use-isnan": 2, "valid-typeof": 2, "wrap-iife": [2, "any"], "yoda": [2, "never"] } } parse-filepath-1.0.2/.gitattributes000066400000000000000000000001771321631765100173230ustar00rootroot00000000000000# Enforce Unix newlines * text eol=lf # binaries *.ai binary *.psd binary *.jpg binary *.gif binary *.png binary *.jpeg binaryparse-filepath-1.0.2/.gitignore000066400000000000000000000010501321631765100164070ustar00rootroot00000000000000# Numerous always-ignore extensions *.DS_Store *.csv *.dat *.diff *.err *.gz *.log *.orig *.out *.pid *.rej *.seed *.swo *.swp *.vi *.yo-rc.json *.zip *~ .ruby-version lib-cov # OS or Editor folders *.esproj *.sublime-project *.sublime-workspace ._* .cache .DS_Store .idea .project .settings .tmproj nbproject Thumbs.db # Komodo *.komodoproject .komodotools # grunt-html-validation validation-status.json validation-report.json # Vendor packages node_modules bower_components vendor # General folders and files to ignore _gh_pages tmp temp TODO.mdparse-filepath-1.0.2/.travis.yml000066400000000000000000000001611321631765100165320ustar00rootroot00000000000000sudo: false language: node_js node_js: - '8' - '6' - '4' - '0.12' - '0.10' matrix: fast_finish: true parse-filepath-1.0.2/.verb.md000066400000000000000000000016101321631765100157570ustar00rootroot00000000000000## Usage ```js var parsePath = require('{%= name %}'); parsePath(filepath); ``` This can be used as a polyfill for the native node.js `path.parse()` method, and it also adds a few properties: - `path`: the original filepath - `isAbsolute`: (getter) true if the given path is absolute - `absolute`: (getter) fully resolved, absolute filepath - `dirname`: alias for `dir` - `basename`: alias for `base` - `extname`: alias for `ext` - `stem`: alias for `name` **Example** ```js var parsePath = require('{%= name %}'); console.log(parsePath('foo/bar/baz/index.js')); ``` Returns: ```js { root: '', dir: 'foo/bar/baz', base: 'index.js', ext: '.js', name: 'index', // aliases extname: '.js', basename: 'index.js', dirname: 'foo/bar/baz', stem: 'index', // original path path: 'foo/bar/baz/index.js', // getters absolute: [Getter/Setter], isAbsolute: [Getter/Setter] } ``` parse-filepath-1.0.2/LICENSE000066400000000000000000000021001321631765100154210ustar00rootroot00000000000000The MIT License (MIT) Copyright (c) 2014-2015, Jon Schlinkert. Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. parse-filepath-1.0.2/README.md000066400000000000000000000065141321631765100157100ustar00rootroot00000000000000# parse-filepath [![NPM version](https://img.shields.io/npm/v/parse-filepath.svg?style=flat)](https://www.npmjs.com/package/parse-filepath) [![NPM downloads](https://img.shields.io/npm/dm/parse-filepath.svg?style=flat)](https://npmjs.org/package/parse-filepath) [![Build Status](https://img.shields.io/travis/jonschlinkert/parse-filepath.svg?style=flat)](https://travis-ci.org/jonschlinkert/parse-filepath) > Pollyfill for node.js `path.parse`, parses a filepath into an object. You might also be interested in [global-prefix](https://github.com/jonschlinkert/global-prefix). ## Install Install with [npm](https://www.npmjs.com/): ```sh $ npm install parse-filepath --save ``` ## Usage ```js var parsePath = require('parse-filepath'); parsePath(filepath); ``` This can be used as a polyfill for the native node.js `path.parse()` method, and it also adds a few properties: * `path`: the original filepath * `isAbsolute`: (getter) true if the given path is absolute * `absolute`: (getter) fully resolved, absolute filepath * `dirname`: alias for `dir` * `basename`: alias for `base` * `extname`: alias for `ext` * `stem`: alias for `name` **Example** ```js var parsePath = require('parse-filepath'); console.log(parsePath('foo/bar/baz/index.js')); ``` Returns: ```js { root: '', dir: 'foo/bar/baz', base: 'index.js', ext: '.js', name: 'index', // aliases extname: '.js', basename: 'index.js', dirname: 'foo/bar/baz', stem: 'index', // original path path: 'foo/bar/baz/index.js', // getters absolute: [Getter/Setter], isAbsolute: [Getter/Setter] } ``` ## Related projects You might also be interested in these projects: * [global-prefix](https://www.npmjs.com/package/global-prefix): Get the npm global path prefix. | [homepage](https://github.com/jonschlinkert/global-prefix) * [is-absolute](https://www.npmjs.com/package/is-absolute): Polyfill for node.js `path.isAbolute`. Returns true if a file path is absolute. | [homepage](https://github.com/jonschlinkert/is-absolute) * [is-relative](https://www.npmjs.com/package/is-relative): Returns `true` if the path appears to be relative. | [homepage](https://github.com/jonschlinkert/is-relative) * [relative](https://www.npmjs.com/package/relative): Get the relative filepath from path A to path B. Calculates from file-to-directory, file-to-file, directory-to-file,… [more](https://www.npmjs.com/package/relative) | [homepage](https://github.com/jonschlinkert/relative) ## Contributing Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/jonschlinkert/parse-filepath/issues/new). ## Building docs Generate readme and API documentation with [verb](https://github.com/verbose/verb): ```sh $ npm install verb && npm run docs ``` Or, if [verb](https://github.com/verbose/verb) is installed globally: ```sh $ verb ``` ## Running tests Install dev dependencies: ```sh $ npm install -d && npm test ``` ## Author **Jon Schlinkert** * [github/jonschlinkert](https://github.com/jonschlinkert) * [twitter/jonschlinkert](http://twitter.com/jonschlinkert) ## License Copyright © 2016, [Jon Schlinkert](https://github.com/jonschlinkert). Released under the [MIT license](https://github.com/jonschlinkert/parse-filepath/blob/master/LICENSE). *** _This file was generated by [verb](https://github.com/verbose/verb), v, on March 29, 2016._parse-filepath-1.0.2/bower.json000066400000000000000000000015111321631765100164320ustar00rootroot00000000000000{ "name": "parse-filepath", "description": "Pollyfill for node.js `path.parse`, parses a filepath into an object.", "repository": "jonschlinkert/parse-filepath", "license": "MIT", "homepage": "https://github.com/jonschlinkert/parse-filepath", "authors": [ "Jon Schlinkert (https://github.com/jonschlinkert)" ], "main": [ "index.js" ], "dependencies": { "is-absolute": "^0.2.3", "map-cache": "^0.2.0" }, "devDependencies": { "gulp-format-md": "^0.1.7", "mocha": "^2.2.5", "should": "^7.0.2" }, "keywords": [ "absolute", "basename", "dir", "directory", "dirname", "ext", "extension", "extname", "file", "filename", "filepath", "is-absolute", "name", "object", "parse", "parser", "parts", "path", "segment" ] }parse-filepath-1.0.2/example.js000066400000000000000000000001171321631765100164130ustar00rootroot00000000000000var parsePath = require('./'); console.log(parsePath('foo/bar/baz/index.js')); parse-filepath-1.0.2/index.js000066400000000000000000000036231321631765100160740ustar00rootroot00000000000000'use strict'; var path = require('path'); var isAbsolute = require('is-absolute'); var pathRoot = require('path-root'); var MapCache = require('map-cache'); var cache = new MapCache(); module.exports = function(filepath) { if (typeof filepath !== 'string') { throw new TypeError('parse-filepath expects a string'); } if (cache.has(filepath)) { return cache.get(filepath); } var obj = {}; if (typeof path.parse === 'function') { obj = path.parse(filepath); obj.extname = obj.ext; obj.basename = obj.base; obj.dirname = obj.dir; obj.stem = obj.name; } else { define(obj, 'root', function() { return pathRoot(this.path); }); define(obj, 'extname', function() { return path.extname(filepath); }); define(obj, 'ext', function() { return this.extname; }); define(obj, 'name', function() { return path.basename(filepath, this.ext); }); define(obj, 'stem', function() { return this.name; }); define(obj, 'base', function() { return this.name + this.ext; }); define(obj, 'basename', function() { return this.base; }); define(obj, 'dir', function() { var dir = path.dirname(filepath); if (dir === '.') { return (filepath[0] === '.') ? dir : ''; } else { return dir; } }); define(obj, 'dirname', function() { return this.dir; }); } obj.path = filepath; define(obj, 'absolute', function() { return path.resolve(this.path); }); define(obj, 'isAbsolute', function() { return isAbsolute(this.path); }); cache.set(filepath, obj); return obj; }; function define(obj, prop, fn) { var cached; Object.defineProperty(obj, prop, { configurable: true, enumerable: true, set: function(val) { cached = val; }, get: function() { return cached || (cached = fn.call(obj)); } }); } parse-filepath-1.0.2/package.json000066400000000000000000000027141321631765100167150ustar00rootroot00000000000000{ "name": "parse-filepath", "description": "Pollyfill for node.js `path.parse`, parses a filepath into an object.", "version": "1.0.2", "homepage": "https://github.com/jonschlinkert/parse-filepath", "author": "Jon Schlinkert (https://github.com/jonschlinkert)", "repository": "jonschlinkert/parse-filepath", "bugs": { "url": "https://github.com/jonschlinkert/parse-filepath/issues" }, "license": "MIT", "files": [ "index.js" ], "main": "index.js", "engines": { "node": ">=0.8" }, "scripts": { "test": "mocha" }, "dependencies": { "is-absolute": "^1.0.0", "map-cache": "^0.2.0", "path-root": "^0.1.1" }, "devDependencies": { "gulp-format-md": "^0.1.7", "mocha": "^2.2.5", "should": "^7.0.2" }, "keywords": [ "absolute", "basename", "dir", "directory", "dirname", "ext", "extension", "extname", "file", "filename", "filepath", "is-absolute", "name", "object", "parse", "parser", "parts", "path", "segment" ], "verb": { "run": true, "toc": false, "layout": "default", "tasks": [ "readme" ], "plugins": [ "gulp-format-md" ], "related": { "highlight": "global-prefix", "list": [ "global-prefix", "is-absolute", "is-relative", "relative" ] }, "reflinks": [ "verb" ], "lint": { "reflinks": true } } } parse-filepath-1.0.2/test.js000066400000000000000000000453521321631765100157510ustar00rootroot00000000000000'use strict'; require('mocha'); require('should'); var path = require('path'); var assert = require('assert'); if (typeof path.parse === 'function') { describe('with native `path.parse` method:', function() { var parsePath; beforeEach(function() { // Avoid cache delete require.cache[require.resolve('./')]; parsePath = require('./'); }); describe('dotfiles', function() { it('should get the absolute path:', function() { var parsed = parsePath('foo/bar/baz/.dotfile'); parsed.should.have.property('absolute', path.resolve('foo/bar/baz/.dotfile')); }); it('should specify if a path is absolute:', function() { assert(!parsePath('foo/bar/baz/.dotfile').isAbsolute); }); it('should specify if a path is absolute:', function() { assert(parsePath('/foo/bar/baz/.dotfile').isAbsolute); }); it('should recognize dotfiles', function() { var parsed = parsePath('foo/bar/baz/.dotfile'); parsed.should.have.property('path', 'foo/bar/baz/.dotfile'); parsed.should.have.property('name', '.dotfile'); parsed.should.have.property('stem', '.dotfile'); parsed.should.have.property('dirname', 'foo/bar/baz'); parsed.should.have.property('dir', 'foo/bar/baz'); parsed.should.have.property('extname', ''); parsed.should.have.property('ext', ''); parsed.should.have.property('name', '.dotfile'); parsed.should.have.property('stem', '.dotfile'); }); it('should recognize .gitignore', function() { var parsed = parsePath('./.gitignore'); parsed.should.have.property('name', '.gitignore'); parsed.should.have.property('stem', '.gitignore'); parsed.should.have.property('dirname', '.'); parsed.should.have.property('dir', '.'); parsed.should.have.property('extname', ''); parsed.should.have.property('ext', ''); parsed.should.have.property('basename', '.gitignore'); parsed.should.have.property('base', '.gitignore'); parsed.should.have.property('root', ''); }); it('should recognize config files', function() { var parsed = parsePath('./.verbfile.md'); parsed.should.have.property('name', '.verbfile'); parsed.should.have.property('stem', '.verbfile'); parsed.should.have.property('dirname', '.'); parsed.should.have.property('dir', '.'); parsed.should.have.property('extname', '.md'); parsed.should.have.property('ext', '.md'); parsed.should.have.property('basename', '.verbfile.md'); parsed.should.have.property('base', '.verbfile.md'); parsed.should.have.property('root', ''); }); it('should recognize config files', function() { var parsed = parsePath('./.travis.yml'); parsed.should.have.property('name', '.travis'); parsed.should.have.property('stem', '.travis'); parsed.should.have.property('dirname', '.'); parsed.should.have.property('dir', '.'); parsed.should.have.property('extname', '.yml'); parsed.should.have.property('ext', '.yml'); parsed.should.have.property('basename', '.travis.yml'); parsed.should.have.property('base', '.travis.yml'); parsed.should.have.property('root', ''); }); }); describe('when a single segment is passed', function() { it('should return the correct values', function() { var parsed = parsePath('foo'); parsed.should.have.property('name', 'foo'); parsed.should.have.property('stem', 'foo'); parsed.should.have.property('dirname', ''); parsed.should.have.property('dir', ''); parsed.should.have.property('extname', ''); parsed.should.have.property('ext', ''); parsed.should.have.property('basename', 'foo'); parsed.should.have.property('base', 'foo'); parsed.should.have.property('root', ''); }); it('should return the correct values', function() { var parsed = parsePath('./foo'); parsed.should.have.property('name', 'foo'); parsed.should.have.property('stem', 'foo'); parsed.should.have.property('dirname', '.'); parsed.should.have.property('dir', '.'); parsed.should.have.property('extname', ''); parsed.should.have.property('ext', ''); parsed.should.have.property('basename', 'foo'); parsed.should.have.property('base', 'foo'); parsed.should.have.property('root', ''); }); }); describe('when a filepath is passed', function() { it('should return an object of path parts', function() { var parsed = parsePath('foo/bar/baz/index.html'); parsed.should.have.property('name', 'index'); parsed.should.have.property('stem', 'index'); parsed.should.have.property('dirname', 'foo/bar/baz'); parsed.should.have.property('dir', 'foo/bar/baz'); parsed.should.have.property('extname', '.html'); parsed.should.have.property('ext', '.html'); parsed.should.have.property('basename', 'index.html'); parsed.should.have.property('base', 'index.html'); parsed.should.have.property('root', ''); }); it('should get the root', function() { var parsed = parsePath('/foo/bar/baz/index.html'); parsed.should.have.property('name', 'index'); parsed.should.have.property('stem', 'index'); parsed.should.have.property('dirname', '/foo/bar/baz'); parsed.should.have.property('dir', '/foo/bar/baz'); parsed.should.have.property('extname', '.html'); parsed.should.have.property('ext', '.html'); parsed.should.have.property('basename', 'index.html'); parsed.should.have.property('base', 'index.html'); parsed.should.have.property('root', '/'); }); }); describe('when a filepath ends with a slash', function() { it('dirname should be the full filepath, and basename should be empty', function() { var parsed = parsePath('foo/bar/baz/quux/'); parsed.should.have.property('name', 'quux'); parsed.should.have.property('stem', 'quux'); parsed.should.have.property('dirname', 'foo/bar/baz'); parsed.should.have.property('dir', 'foo/bar/baz'); parsed.should.have.property('extname', ''); parsed.should.have.property('ext', ''); parsed.should.have.property('basename', 'quux'); parsed.should.have.property('base', 'quux'); parsed.should.have.property('root', ''); }); }); describe('when a filepath with multiple extensions is passed', function() { it('should return an object of path parts', function() { var parsed = parsePath('foo/bar/baz/index.md.html'); parsed.should.have.property('name', 'index.md'); parsed.should.have.property('stem', 'index.md'); parsed.should.have.property('dirname', 'foo/bar/baz'); parsed.should.have.property('dir', 'foo/bar/baz'); parsed.should.have.property('extname', '.html'); parsed.should.have.property('ext', '.html'); parsed.should.have.property('basename', 'index.md.html'); parsed.should.have.property('base', 'index.md.html'); parsed.should.have.property('root', ''); }); }); describe('when a filepath with zero extensions is passed', function() { it('should return an object of path parts', function() { var parsed = parsePath('foo/bar/baz/index'); parsed.should.have.property('name', 'index'); parsed.should.have.property('stem', 'index'); parsed.should.have.property('dirname', 'foo/bar/baz'); parsed.should.have.property('dir', 'foo/bar/baz'); parsed.should.have.property('extname', ''); parsed.should.have.property('ext', ''); parsed.should.have.property('basename', 'index'); parsed.should.have.property('base', 'index'); parsed.should.have.property('root', ''); }); }); describe('when a dirname is "."', function() { it('should preserve the basename', function() { var parsed = parsePath('index.js'); parsed.should.have.property('dirname', ''); parsed.should.have.property('dir', ''); parsed.should.have.property('basename', 'index.js'); parsed.should.have.property('base', 'index.js'); parsed.should.have.property('name', 'index'); parsed.should.have.property('stem', 'index'); parsed.should.have.property('extname', '.js'); parsed.should.have.property('ext', '.js'); parsed.should.have.property('root', ''); }); it('should parse paths without extensions', function() { var parsed = parsePath('foo/bar/baz/index'); parsed.should.have.property('name', 'index'); parsed.should.have.property('stem', 'index'); parsed.should.have.property('dirname', 'foo/bar/baz'); parsed.should.have.property('dir', 'foo/bar/baz'); parsed.should.have.property('extname', ''); parsed.should.have.property('ext', ''); parsed.should.have.property('basename', 'index'); parsed.should.have.property('base', 'index'); parsed.should.have.property('root', ''); }); it('should return the extension from options.ext', function() { parsePath('foo/bar/baz.min.js').extname.should.eql('.js'); }); it('should parse the extname', function() { parsePath('foo/bar/baz.js').extname.should.eql('.js'); }); it('should return an empty extname when no extension is passed', function() { parsePath('foo/bar/baz').extname.should.eql(''); }); }); }); } describe('without native `path.parse` method:', function() { var fn; var parsePath; before(function() { fn = path.parse; delete path.parse; }); after(function() { path.parse = fn; }); beforeEach(function() { // Avoid cache delete require.cache[require.resolve('./')]; parsePath = require('./'); }); describe('dotfiles', function() { it('should get the absolute path:', function() { var parsed = parsePath('foo/bar/baz/.dotfile'); parsed.should.have.property('absolute', path.resolve('foo/bar/baz/.dotfile')); }); it('should specify if a path is absolute:', function() { assert(!parsePath('foo/bar/baz/.dotfile').isAbsolute); }); it('should specify if a path is absolute', function() { assert(parsePath('/foo/bar/baz/.dotfile').isAbsolute); }); it('should recognize dotfiles', function() { var parsed = parsePath('foo/bar/baz/.dotfile'); parsed.should.have.property('path', 'foo/bar/baz/.dotfile'); parsed.should.have.property('name', '.dotfile'); parsed.should.have.property('stem', '.dotfile'); parsed.should.have.property('dirname', 'foo/bar/baz'); parsed.should.have.property('dir', 'foo/bar/baz'); parsed.should.have.property('extname', ''); parsed.should.have.property('ext', ''); parsed.should.have.property('name', '.dotfile'); parsed.should.have.property('stem', '.dotfile'); parsed.should.have.property('root', ''); }); it('should recognize .gitignore', function() { var parsed = parsePath('./.gitignore'); parsed.should.have.property('name', '.gitignore'); parsed.should.have.property('stem', '.gitignore'); parsed.should.have.property('dirname', '.'); parsed.should.have.property('extname', ''); parsed.should.have.property('ext', ''); parsed.should.have.property('ext', ''); parsed.should.have.property('basename', '.gitignore'); parsed.should.have.property('base', '.gitignore'); parsed.should.have.property('root', ''); }); it('should recognize config files', function() { var parsed = parsePath('./.verbfile.md'); parsed.should.have.property('name', '.verbfile'); parsed.should.have.property('stem', '.verbfile'); parsed.should.have.property('dirname', '.'); parsed.should.have.property('dir', '.'); parsed.should.have.property('extname', '.md'); parsed.should.have.property('ext', '.md'); parsed.should.have.property('basename', '.verbfile.md'); parsed.should.have.property('base', '.verbfile.md'); parsed.should.have.property('root', ''); }); it('should recognize config files', function() { var parsed = parsePath('./.travis.yml'); parsed.should.have.property('name', '.travis'); parsed.should.have.property('stem', '.travis'); parsed.should.have.property('dirname', '.'); parsed.should.have.property('dir', '.'); parsed.should.have.property('extname', '.yml'); parsed.should.have.property('ext', '.yml'); parsed.should.have.property('basename', '.travis.yml'); parsed.should.have.property('base', '.travis.yml'); parsed.should.have.property('root', ''); }); }); describe('when a single segment is passed', function() { it('should return the correct values', function() { var parsed = parsePath('foo'); parsed.should.have.property('name', 'foo'); parsed.should.have.property('stem', 'foo'); parsed.should.have.property('dirname', ''); parsed.should.have.property('dir', ''); parsed.should.have.property('extname', ''); parsed.should.have.property('ext', ''); parsed.should.have.property('basename', 'foo'); parsed.should.have.property('base', 'foo'); parsed.should.have.property('root', ''); }); it('should return the correct values', function() { var parsed = parsePath('./foo'); parsed.should.have.property('name', 'foo'); parsed.should.have.property('stem', 'foo'); parsed.should.have.property('dirname', '.'); parsed.should.have.property('dir', '.'); parsed.should.have.property('extname', ''); parsed.should.have.property('ext', ''); parsed.should.have.property('basename', 'foo'); parsed.should.have.property('base', 'foo'); parsed.should.have.property('root', ''); }); }); describe('when a filepath is passed', function() { it('should return an object of path parts', function() { var parsed = parsePath('foo/bar/baz/index.html'); parsed.should.have.property('name', 'index'); parsed.should.have.property('stem', 'index'); parsed.should.have.property('dirname', 'foo/bar/baz'); parsed.should.have.property('dir', 'foo/bar/baz'); parsed.should.have.property('extname', '.html'); parsed.should.have.property('ext', '.html'); parsed.should.have.property('basename', 'index.html'); parsed.should.have.property('base', 'index.html'); parsed.should.have.property('root', ''); }); it('should get the root', function() { var parsed = parsePath('/foo/bar/baz/index.html'); parsed.should.have.property('name', 'index'); parsed.should.have.property('stem', 'index'); parsed.should.have.property('dirname', '/foo/bar/baz'); parsed.should.have.property('dir', '/foo/bar/baz'); parsed.should.have.property('extname', '.html'); parsed.should.have.property('ext', '.html'); parsed.should.have.property('basename', 'index.html'); parsed.should.have.property('base', 'index.html'); parsed.should.have.property('root', '/'); }); }); describe('when a filepath ends with a slash', function() { it('dirname should be the full filepath, and basename should be empty', function() { var parsed = parsePath('foo/bar/baz/quux/'); parsed.should.have.property('name', 'quux'); parsed.should.have.property('stem', 'quux'); parsed.should.have.property('dirname', 'foo/bar/baz'); parsed.should.have.property('dir', 'foo/bar/baz'); parsed.should.have.property('extname', ''); parsed.should.have.property('ext', ''); parsed.should.have.property('basename', 'quux'); parsed.should.have.property('base', 'quux'); parsed.should.have.property('root', ''); }); }); describe('when a filepath with multiple extensions is passed', function() { it('should return an object of path parts', function() { var parsed = parsePath('foo/bar/baz/index.md.html'); parsed.should.have.property('name', 'index.md'); parsed.should.have.property('stem', 'index.md'); parsed.should.have.property('dirname', 'foo/bar/baz'); parsed.should.have.property('dir', 'foo/bar/baz'); parsed.should.have.property('extname', '.html'); parsed.should.have.property('ext', '.html'); parsed.should.have.property('basename', 'index.md.html'); parsed.should.have.property('base', 'index.md.html'); parsed.should.have.property('root', ''); }); }); describe('when a filepath with zero extensions is passed', function() { it('should return an object of path parts', function() { var parsed = parsePath('foo/bar/baz/index'); parsed.should.have.property('name', 'index'); parsed.should.have.property('stem', 'index'); parsed.should.have.property('dirname', 'foo/bar/baz'); parsed.should.have.property('dir', 'foo/bar/baz'); parsed.should.have.property('extname', ''); parsed.should.have.property('ext', ''); parsed.should.have.property('basename', 'index'); parsed.should.have.property('base', 'index'); parsed.should.have.property('root', ''); }); }); describe('when a dirname is "."', function() { it('should preserve the basename', function() { var parsed = parsePath('index.js'); parsed.should.have.property('dirname', ''); parsed.should.have.property('dir', ''); parsed.should.have.property('basename', 'index.js'); parsed.should.have.property('base', 'index.js'); parsed.should.have.property('name', 'index'); parsed.should.have.property('stem', 'index'); parsed.should.have.property('extname', '.js'); parsed.should.have.property('ext', '.js'); parsed.should.have.property('root', ''); }); it('should parse paths without extensions', function() { var parsed = parsePath('foo/bar/baz/index'); parsed.should.have.property('name', 'index'); parsed.should.have.property('stem', 'index'); parsed.should.have.property('dirname', 'foo/bar/baz'); parsed.should.have.property('dir', 'foo/bar/baz'); parsed.should.have.property('extname', ''); parsed.should.have.property('ext', ''); parsed.should.have.property('basename', 'index'); parsed.should.have.property('base', 'index'); parsed.should.have.property('root', ''); }); it('should return the extension from options.ext', function() { parsePath('foo/bar/baz.min.js').extname.should.eql('.js'); }); it('should parse the extname', function() { parsePath('foo/bar/baz.js').extname.should.eql('.js'); }); it('should return an empty extname when no extension is passed', function() { parsePath('foo/bar/baz').extname.should.eql(''); }); }); });