From 3d415280591500f47b156b3dad631c7d448c904a Mon Sep 17 00:00:00 2001 From: hacksalot Date: Thu, 24 Dec 2015 16:18:38 -0500 Subject: [PATCH] Fix path parsing issue on prev versions of Node.js. Work around absence of path.parse in Node versions < v0.12. Addresses #31 and #33. --- package.json | 1 + src/core/theme.js | 19 ++++++++++--------- src/gen/template-generator.js | 7 ++++--- src/verbs/generate.js | 5 +++-- 4 files changed, 18 insertions(+), 14 deletions(-) diff --git a/package.json b/package.json index b05aa26..e8539e2 100644 --- a/package.json +++ b/package.json @@ -49,6 +49,7 @@ "minimist": "^1.2.0", "mkdirp": "^0.5.1", "moment": "^2.10.6", + "parse-filepath": "^0.6.3", "path-exists": "^2.1.0", "recursive-readdir-sync": "^1.0.6", "simple-html-tokenizer": "^0.2.0", diff --git a/src/core/theme.js b/src/core/theme.js index 1eaa1ea..3b5f729 100644 --- a/src/core/theme.js +++ b/src/core/theme.js @@ -11,6 +11,7 @@ Definition of the Theme class. , validator = require('is-my-json-valid') , _ = require('underscore') , PATH = require('path') + , parsePath = require('parse-filepath') , EXTEND = require('../utils/extend') , moment = require('moment') , RECURSIVE_READ_DIR = require('recursive-readdir-sync'); @@ -30,8 +31,8 @@ Definition of the Theme class. // Open the [theme-name].json file; should have the same name as folder this.folder = themeFolder; - var pathInfo = PATH.parse( themeFolder ); - var themeFile = PATH.join( themeFolder, pathInfo.base + '.json' ); + var pathInfo = parsePath( themeFolder ); + var themeFile = PATH.join( themeFolder, pathInfo.basename + '.json' ); var themeInfo = JSON.parse( FS.readFileSync( themeFile, 'utf8' ) ); var that = this; @@ -59,7 +60,7 @@ Definition of the Theme class. this.formats = formatsHash; // Set the official theme name - this.name = PATH.parse( this.folder ).name; + this.name = parsePath( this.folder ).name; return this; }; @@ -96,9 +97,9 @@ Definition of the Theme class. // If this file lives in a specific format folder within the theme, // such as "/latex" or "/html", then that format is the output format // for all files within the folder. - var pathInfo = PATH.parse(absPath); + var pathInfo = parsePath(absPath); var outFmt = '', isMajor = false; - var portion = pathInfo.dir.replace(tplFolder,''); + var portion = pathInfo.dirname.replace(tplFolder,''); if( portion && portion.trim() ) { if( portion[1] === '_' ) return; var reg = /^(?:\/|\\)(html|latex|doc|pdf|partials)(?:\/|\\)?/ig; @@ -135,7 +136,7 @@ Definition of the Theme class. path: absPath, major: isMajor, orgPath: PATH.relative(tplFolder, absPath), - ext: pathInfo.ext.slice(1), + ext: pathInfo.extname.slice(1), title: friendlyName( outFmt ), pre: outFmt, // outFormat: outFmt || pathInfo.name, @@ -186,7 +187,7 @@ Definition of the Theme class. act = null; // If this file is mentioned in the theme's JSON file under "transforms" - var pathInfo = PATH.parse(absPath); + var pathInfo = parsePath(absPath); var absPathSafe = absPath.trim().toLowerCase(); var outFmt = _.find( Object.keys( that.formats ), function( fmtKey ) { var fmtVal = that.formats[ fmtKey ]; @@ -203,7 +204,7 @@ Definition of the Theme class. // such as "/latex" or "/html", then that format is the output format // for all files within the folder. if( !outFmt ) { - var portion = pathInfo.dir.replace(tplFolder,''); + var portion = pathInfo.dirname.replace(tplFolder,''); if( portion && portion.trim() ) { var reg = /^(?:\/|\\)(html|latex|doc|pdf)(?:\/|\\)?/ig; var res = reg.exec( portion ); @@ -231,7 +232,7 @@ Definition of the Theme class. action: act, orgPath: PATH.relative(that.folder, absPath), path: absPath, - ext: pathInfo.ext.slice(1), + ext: pathInfo.extname.slice(1), title: friendlyName( outFmt ), pre: outFmt, // outFormat: outFmt || pathInfo.name, diff --git a/src/gen/template-generator.js b/src/gen/template-generator.js index 4510ade..86687e8 100644 --- a/src/gen/template-generator.js +++ b/src/gen/template-generator.js @@ -13,6 +13,7 @@ Definition of the TemplateGenerator class. , MD = require( 'marked' ) , XML = require( 'xml-escape' ) , PATH = require('path') + , parsePath = require('parse-filepath') , MKDIRP = require('mkdirp') , BaseGenerator = require( './base-generator' ) , EXTEND = require('../utils/extend') @@ -127,7 +128,7 @@ Definition of the TemplateGenerator class. var theme = themeInfo.theme; var tFolder = themeInfo.folder; var tplFolder = PATH.join( tFolder, 'src' ); - var outFolder = PATH.parse(f).dir; + var outFolder = parsePath(f).dirname; var curFmt = theme.getFormat( this.format ); var that = this; @@ -176,7 +177,7 @@ Definition of the TemplateGenerator class. var absLoc = PATH.join(outFolder, loc); var absTarg = PATH.join(PATH.dirname(absLoc), curFmt.symLinks[loc]); // 'file', 'dir', or 'junction' (Windows only) - var type = PATH.parse( absLoc ).ext ? 'file' : 'junction'; + var type = parsePath( absLoc ).extname ? 'file' : 'junction'; FS.symlinkSync( absTarg, absLoc, type); }); } @@ -221,7 +222,7 @@ Definition of the TemplateGenerator class. function themeFromMoniker() { // Verify the specified theme name/path var tFolder = PATH.join( - PATH.parse( require.resolve('fluent-themes') ).dir, + parsePath( require.resolve('fluent-themes') ).dirname, this.opts.theme ); var exists = require('path-exists').sync; diff --git a/src/verbs/generate.js b/src/verbs/generate.js index 88857c8..870f1a3 100644 --- a/src/verbs/generate.js +++ b/src/verbs/generate.js @@ -1,6 +1,7 @@ (function() { var PATH = require('path') + , parsePath = require('parse-filepath') , MKDIRP = require('mkdirp') , _opts = require('../core/default-options') , FluentTheme = require('../core/theme') @@ -70,8 +71,8 @@ ( (dst && dst.length && dst) || ['resume.all'] ).forEach( function(t) { var to = PATH.resolve(t), - pa = PATH.parse(to), - fmat = pa.ext || '.all'; + pa = parsePath(to), + fmat = pa.extname || '.all'; targets.push.apply(targets, fmat === '.all' ? Object.keys( theTheme.formats ).map(function(k){