Comparing version 2.0.0 to 3.0.0
68
index.js
@@ -1,31 +0,20 @@ | ||
'use strict'; | ||
// internal | ||
const fs = require('fs'); | ||
const glob = require('glob'); | ||
const path = require('path'); | ||
// packages | ||
const dset = require('dset'); | ||
const dsv = require('d3-dsv'); | ||
const glob = require('fast-glob'); | ||
const parseJson = require('parse-json'); | ||
const yaml = require('js-yaml'); | ||
const dsv = require('d3-dsv'); | ||
module.exports = function quaff(rawPath) { | ||
const cwd = path.normalize(rawPath); | ||
const files = glob.sync(path.join(cwd, '**/*.{json,yaml,yml,csv,tsv}')); | ||
function normalizePath (dir) { | ||
const cleanDir = path.normalize(dir); | ||
if (cleanDir.slice(-path.sep.length) !== path.sep) { | ||
return cleanDir + path.sep; | ||
} | ||
return cleanDir; | ||
} | ||
module.exports = function (rawDataDir) { | ||
const dataDir = normalizePath(rawDataDir); | ||
const depth = dataDir.split(path.sep).length - 1; | ||
const files = glob.sync(dataDir + '**/*.{json,yaml,yml,csv,tsv}'); | ||
const payload = {}; | ||
files.forEach(function (file) { | ||
const extension = path.extname(file); | ||
const basename = path.basename(file, extension); | ||
const dir = path.normalize(path.dirname(file)); | ||
files.forEach(function(file) { | ||
const { name, dir, ext } = path.parse(file); | ||
const fileContents = fs.readFileSync(file, 'utf8'); | ||
@@ -35,27 +24,22 @@ | ||
if (extension === '.json') { | ||
data = JSON.parse(fileContents); | ||
} else if (extension === '.yaml' || extension === '.yml') { | ||
if (ext === '.json') { | ||
data = parseJson(fileContents, file); | ||
} else if (ext === '.yaml' || ext === '.yml') { | ||
data = yaml.safeLoad(fileContents); | ||
} else if (extension === '.csv') { | ||
data = dsv.csv.parse(fileContents); | ||
} else if (extension === '.tsv') { | ||
data = dsv.tsv.parse(fileContents); | ||
} else if (ext === '.csv') { | ||
data = dsv.csvParse(fileContents); | ||
} else { | ||
return; | ||
data = dsv.tsvParse(fileContents); | ||
} | ||
let obj = payload; | ||
// remove the leading path, split into a list, and filter out empty strings | ||
const dirs = path | ||
.relative(cwd, dir) | ||
.split(path.sep) | ||
.filter(Boolean); | ||
const dirs = dir.split(path.sep); | ||
dirs.splice(0, depth); // dump the root dataDir | ||
// add the filename to the path part list | ||
dirs.push(name); | ||
dirs.forEach(function (dir) { | ||
if (!obj.hasOwnProperty(dir)) { | ||
obj[dir] = {}; | ||
} | ||
obj = obj[dir]; | ||
}); | ||
obj[basename] = data; | ||
dset(payload, dirs, data); | ||
}); | ||
@@ -62,0 +46,0 @@ |
{ | ||
"name": "quaff", | ||
"version": "2.0.0", | ||
"version": "3.0.0", | ||
"description": "Collect JSON/YAML/YML/CSV/TSV files from a source folder and convert them into a single object.", | ||
@@ -12,3 +12,3 @@ "repository": "rdmurphy/quaff", | ||
"engines": { | ||
"node": ">=4" | ||
"node": ">=6" | ||
}, | ||
@@ -29,12 +29,31 @@ "scripts": { | ||
"devDependencies": { | ||
"coveralls": "^2.11.6", | ||
"coveralls": "^3.0.2", | ||
"husky": "^1.1.1", | ||
"istanbul": "^0.4.2", | ||
"mocha": "^2.3.4", | ||
"mocha-lcov-reporter": "^1.0.0" | ||
"mocha": "^5.2.0", | ||
"mocha-lcov-reporter": "^1.0.0", | ||
"precise-commits": "^1.0.2", | ||
"prettier": "^1.14.3" | ||
}, | ||
"dependencies": { | ||
"d3-dsv": "^0.1.13", | ||
"glob": "^6.0.4", | ||
"js-yaml": "^3.2.7" | ||
"d3-dsv": "^1.0.10", | ||
"dset": "^2.0.1", | ||
"fast-glob": "^2.2.3", | ||
"js-yaml": "^3.12.0", | ||
"parse-json": "^4.0.0" | ||
}, | ||
"prettier": { | ||
"arrowParens": "avoid", | ||
"bracketSpacing": true, | ||
"printWidth": 80, | ||
"semi": true, | ||
"singleQuote": true, | ||
"tabWidth": 2, | ||
"trailingComma": "es5" | ||
}, | ||
"husky": { | ||
"hooks": { | ||
"pre-commit": "precise-commits" | ||
} | ||
} | ||
} |
@@ -17,3 +17,3 @@ ![](http://i.imgur.com/yC80ftQ.png) | ||
Requires `node>=4`. | ||
Requires `node>=6`. | ||
@@ -20,0 +20,0 @@ ## Usage |
5366
4
5
7
37
+ Addeddset@^2.0.1
+ Addedfast-glob@^2.2.3
+ Addedparse-json@^4.0.0
+ Added@mrmlnc/readdir-enhanced@2.2.1(transitive)
+ Added@nodelib/fs.stat@1.1.3(transitive)
+ Addedarr-diff@4.0.0(transitive)
+ Addedarr-flatten@1.1.0(transitive)
+ Addedarr-union@3.1.0(transitive)
+ Addedarray-unique@0.3.2(transitive)
+ Addedassign-symbols@1.0.0(transitive)
+ Addedatob@2.1.2(transitive)
+ Addedbase@0.11.2(transitive)
+ Addedbraces@2.3.2(transitive)
+ Addedcache-base@1.0.1(transitive)
+ Addedcall-me-maybe@1.0.2(transitive)
+ Addedclass-utils@0.3.6(transitive)
+ Addedcollection-visit@1.0.0(transitive)
+ Addedcommander@2.20.3(transitive)
+ Addedcomponent-emitter@1.3.1(transitive)
+ Addedcopy-descriptor@0.1.1(transitive)
+ Addedd3-dsv@1.2.0(transitive)
+ Addeddebug@2.6.9(transitive)
+ Addeddecode-uri-component@0.2.2(transitive)
+ Addeddefine-property@0.2.51.0.02.0.2(transitive)
+ Addeddset@2.1.0(transitive)
+ Addederror-ex@1.3.2(transitive)
+ Addedexpand-brackets@2.1.4(transitive)
+ Addedextend-shallow@2.0.13.0.2(transitive)
+ Addedextglob@2.0.4(transitive)
+ Addedfast-glob@2.2.7(transitive)
+ Addedfill-range@4.0.0(transitive)
+ Addedfor-in@1.0.2(transitive)
+ Addedfragment-cache@0.2.1(transitive)
+ Addedfunction-bind@1.1.2(transitive)
+ Addedget-value@2.0.6(transitive)
+ Addedglob-parent@3.1.0(transitive)
+ Addedglob-to-regexp@0.3.0(transitive)
+ Addedhas-value@0.3.11.0.0(transitive)
+ Addedhas-values@0.1.41.0.0(transitive)
+ Addedhasown@2.0.2(transitive)
+ Addediconv-lite@0.4.24(transitive)
+ Addedis-accessor-descriptor@1.0.1(transitive)
+ Addedis-arrayish@0.2.1(transitive)
+ Addedis-buffer@1.1.6(transitive)
+ Addedis-data-descriptor@1.0.1(transitive)
+ Addedis-descriptor@0.1.71.0.3(transitive)
+ Addedis-extendable@0.1.11.0.1(transitive)
+ Addedis-extglob@2.1.1(transitive)
+ Addedis-glob@3.1.04.0.3(transitive)
+ Addedis-number@3.0.0(transitive)
+ Addedis-plain-object@2.0.4(transitive)
+ Addedis-windows@1.0.2(transitive)
+ Addedisarray@1.0.0(transitive)
+ Addedisobject@2.1.03.0.1(transitive)
+ Addedjson-parse-better-errors@1.0.2(transitive)
+ Addedkind-of@3.2.24.0.06.0.3(transitive)
+ Addedmap-cache@0.2.2(transitive)
+ Addedmap-visit@1.0.0(transitive)
+ Addedmerge2@1.4.1(transitive)
+ Addedmicromatch@3.1.10(transitive)
+ Addedmixin-deep@1.3.2(transitive)
+ Addedms@2.0.0(transitive)
+ Addednanomatch@1.2.13(transitive)
+ Addedobject-copy@0.1.0(transitive)
+ Addedobject-visit@1.0.1(transitive)
+ Addedobject.pick@1.3.0(transitive)
+ Addedparse-json@4.0.0(transitive)
+ Addedpascalcase@0.1.1(transitive)
+ Addedpath-dirname@1.0.2(transitive)
+ Addedposix-character-classes@0.1.1(transitive)
+ Addedregex-not@1.0.2(transitive)
+ Addedrepeat-element@1.1.4(transitive)
+ Addedrepeat-string@1.6.1(transitive)
+ Addedresolve-url@0.2.1(transitive)
+ Addedret@0.1.15(transitive)
+ Addedrw@1.3.3(transitive)
+ Addedsafe-regex@1.1.0(transitive)
+ Addedsafer-buffer@2.1.2(transitive)
+ Addedset-value@2.0.1(transitive)
+ Addedsnapdragon@0.8.2(transitive)
+ Addedsnapdragon-node@2.1.1(transitive)
+ Addedsnapdragon-util@3.0.1(transitive)
+ Addedsource-map@0.5.7(transitive)
+ Addedsource-map-resolve@0.5.3(transitive)
+ Addedsource-map-url@0.4.1(transitive)
+ Addedsplit-string@3.1.0(transitive)
+ Addedstatic-extend@0.1.2(transitive)
+ Addedto-object-path@0.3.0(transitive)
+ Addedto-regex@3.0.2(transitive)
+ Addedto-regex-range@2.1.1(transitive)
+ Addedunion-value@1.0.1(transitive)
+ Addedunset-value@1.0.0(transitive)
+ Addedurix@0.1.0(transitive)
+ Addeduse@3.1.1(transitive)
- Removedglob@^6.0.4
- Removedbalanced-match@1.0.2(transitive)
- Removedbrace-expansion@1.1.11(transitive)
- Removedconcat-map@0.0.1(transitive)
- Removedd3-dsv@0.1.14(transitive)
- Removedglob@6.0.4(transitive)
- Removedinflight@1.0.6(transitive)
- Removedinherits@2.0.4(transitive)
- Removedminimatch@3.1.2(transitive)
- Removedonce@1.4.0(transitive)
- Removedpath-is-absolute@1.0.1(transitive)
- Removedwrappy@1.0.2(transitive)
Updatedd3-dsv@^1.0.10
Updatedjs-yaml@^3.12.0