diff options
Diffstat (limited to 'node_modules/locutus/php/filesystem/pathinfo.js')
-rw-r--r-- | node_modules/locutus/php/filesystem/pathinfo.js | 146 |
1 files changed, 146 insertions, 0 deletions
diff --git a/node_modules/locutus/php/filesystem/pathinfo.js b/node_modules/locutus/php/filesystem/pathinfo.js new file mode 100644 index 0000000..2184891 --- /dev/null +++ b/node_modules/locutus/php/filesystem/pathinfo.js @@ -0,0 +1,146 @@ +'use strict'; + +module.exports = function pathinfo(path, options) { + // discuss at: http://locutus.io/php/pathinfo/ + // original by: Nate + // revised by: Kevin van Zonneveld (http://kvz.io) + // improved by: Brett Zamir (http://brett-zamir.me) + // improved by: Dmitry Gorelenkov + // input by: Timo + // note 1: Inspired by actual PHP source: php5-5.2.6/ext/standard/string.c line #1559 + // note 1: The way the bitwise arguments are handled allows for greater flexibility + // note 1: & compatability. We might even standardize this + // note 1: code and use a similar approach for + // note 1: other bitwise PHP functions + // note 1: Locutus tries very hard to stay away from a core.js + // note 1: file with global dependencies, because we like + // note 1: that you can just take a couple of functions and be on your way. + // note 1: But by way we implemented this function, + // note 1: if you want you can still declare the PATHINFO_* + // note 1: yourself, and then you can use: + // note 1: pathinfo('/www/index.html', PATHINFO_BASENAME | PATHINFO_EXTENSION); + // note 1: which makes it fully compliant with PHP syntax. + // example 1: pathinfo('/www/htdocs/index.html', 1) + // returns 1: '/www/htdocs' + // example 2: pathinfo('/www/htdocs/index.html', 'PATHINFO_BASENAME') + // returns 2: 'index.html' + // example 3: pathinfo('/www/htdocs/index.html', 'PATHINFO_EXTENSION') + // returns 3: 'html' + // example 4: pathinfo('/www/htdocs/index.html', 'PATHINFO_FILENAME') + // returns 4: 'index' + // example 5: pathinfo('/www/htdocs/index.html', 2 | 4) + // returns 5: {basename: 'index.html', extension: 'html'} + // example 6: pathinfo('/www/htdocs/index.html', 'PATHINFO_ALL') + // returns 6: {dirname: '/www/htdocs', basename: 'index.html', extension: 'html', filename: 'index'} + // example 7: pathinfo('/www/htdocs/index.html') + // returns 7: {dirname: '/www/htdocs', basename: 'index.html', extension: 'html', filename: 'index'} + + var basename = require('../filesystem/basename'); + var opt = ''; + var realOpt = ''; + var optName = ''; + var optTemp = 0; + var tmpArr = {}; + var cnt = 0; + var i = 0; + var haveBasename = false; + var haveExtension = false; + var haveFilename = false; + + // Input defaulting & sanitation + if (!path) { + return false; + } + if (!options) { + options = 'PATHINFO_ALL'; + } + + // Initialize binary arguments. Both the string & integer (constant) input is + // allowed + var OPTS = { + 'PATHINFO_DIRNAME': 1, + 'PATHINFO_BASENAME': 2, + 'PATHINFO_EXTENSION': 4, + 'PATHINFO_FILENAME': 8, + 'PATHINFO_ALL': 0 + }; + // PATHINFO_ALL sums up all previously defined PATHINFOs (could just pre-calculate) + for (optName in OPTS) { + if (OPTS.hasOwnProperty(optName)) { + OPTS.PATHINFO_ALL = OPTS.PATHINFO_ALL | OPTS[optName]; + } + } + if (typeof options !== 'number') { + // Allow for a single string or an array of string flags + options = [].concat(options); + for (i = 0; i < options.length; i++) { + // Resolve string input to bitwise e.g. 'PATHINFO_EXTENSION' becomes 4 + if (OPTS[options[i]]) { + optTemp = optTemp | OPTS[options[i]]; + } + } + options = optTemp; + } + + // Internal Functions + var _getExt = function _getExt(path) { + var str = path + ''; + var dotP = str.lastIndexOf('.') + 1; + return !dotP ? false : dotP !== str.length ? str.substr(dotP) : ''; + }; + + // Gather path infos + if (options & OPTS.PATHINFO_DIRNAME) { + var dirName = path.replace(/\\/g, '/').replace(/\/[^/]*\/?$/, ''); // dirname + tmpArr.dirname = dirName === path ? '.' : dirName; + } + + if (options & OPTS.PATHINFO_BASENAME) { + if (haveBasename === false) { + haveBasename = basename(path); + } + tmpArr.basename = haveBasename; + } + + if (options & OPTS.PATHINFO_EXTENSION) { + if (haveBasename === false) { + haveBasename = basename(path); + } + if (haveExtension === false) { + haveExtension = _getExt(haveBasename); + } + if (haveExtension !== false) { + tmpArr.extension = haveExtension; + } + } + + if (options & OPTS.PATHINFO_FILENAME) { + if (haveBasename === false) { + haveBasename = basename(path); + } + if (haveExtension === false) { + haveExtension = _getExt(haveBasename); + } + if (haveFilename === false) { + haveFilename = haveBasename.slice(0, haveBasename.length - (haveExtension ? haveExtension.length + 1 : haveExtension === false ? 0 : 1)); + } + + tmpArr.filename = haveFilename; + } + + // If array contains only 1 element: return string + cnt = 0; + for (opt in tmpArr) { + if (tmpArr.hasOwnProperty(opt)) { + cnt++; + realOpt = opt; + } + } + if (cnt === 1) { + return tmpArr[realOpt]; + } + + // Return full-blown array + return tmpArr; +}; +//# sourceMappingURL=pathinfo.js.map
\ No newline at end of file |