summaryrefslogtreecommitdiff
path: root/node_modules/klaw/src
diff options
context:
space:
mode:
authorArman Shah <[email protected]>2018-02-19 23:50:04 -0800
committerArman Shah <[email protected]>2018-02-19 23:50:04 -0800
commitae34dcfd3823a609ba7182f2d6eda593be876f7d (patch)
treeb9d7f2884c4999349418cbdc4f9ab46d113e0afd /node_modules/klaw/src
parentInitial commit (diff)
downloadlauncher-ae34dcfd3823a609ba7182f2d6eda593be876f7d.tar.xz
launcher-ae34dcfd3823a609ba7182f2d6eda593be876f7d.zip
add base files
Diffstat (limited to 'node_modules/klaw/src')
-rw-r--r--node_modules/klaw/src/assign.js16
-rw-r--r--node_modules/klaw/src/index.js57
2 files changed, 73 insertions, 0 deletions
diff --git a/node_modules/klaw/src/assign.js b/node_modules/klaw/src/assign.js
new file mode 100644
index 0000000..69740f6
--- /dev/null
+++ b/node_modules/klaw/src/assign.js
@@ -0,0 +1,16 @@
+// simple mutable assign (extracted from fs-extra)
+// I really like object-assign package, but I wanted a lean package with zero deps
+function _assign () {
+ var args = [].slice.call(arguments).filter(function (i) { return i })
+ var dest = args.shift()
+ args.forEach(function (src) {
+ Object.keys(src).forEach(function (key) {
+ dest[key] = src[key]
+ })
+ })
+
+ return dest
+}
+
+// thank you baby Jesus for Node v4 and Object.assign
+module.exports = Object.assign || _assign
diff --git a/node_modules/klaw/src/index.js b/node_modules/klaw/src/index.js
new file mode 100644
index 0000000..ae4a20e
--- /dev/null
+++ b/node_modules/klaw/src/index.js
@@ -0,0 +1,57 @@
+var assert = require('assert')
+var fs
+try {
+ fs = require('graceful-fs')
+} catch (e) {
+ fs = require('fs')
+}
+var path = require('path')
+var Readable = require('stream').Readable
+var util = require('util')
+var assign = require('./assign')
+
+function Walker (dir, options) {
+ assert.strictEqual(typeof dir, 'string', '`dir` parameter should be of type string. Got type: ' + typeof dir)
+ var defaultStreamOptions = { objectMode: true }
+ var defaultOpts = { queueMethod: 'shift', pathSorter: undefined, filter: undefined }
+ options = assign(defaultOpts, options, defaultStreamOptions)
+
+ Readable.call(this, options)
+ this.root = path.resolve(dir)
+ this.paths = [this.root]
+ this.options = options
+ this.fs = options.fs || fs // mock-fs
+}
+util.inherits(Walker, Readable)
+
+Walker.prototype._read = function () {
+ if (this.paths.length === 0) return this.push(null)
+ var self = this
+ var pathItem = this.paths[this.options.queueMethod]()
+
+ self.fs.lstat(pathItem, function (err, stats) {
+ var item = { path: pathItem, stats: stats }
+ if (err) return self.emit('error', err, item)
+ if (!stats.isDirectory()) return self.push(item)
+
+ self.fs.readdir(pathItem, function (err, pathItems) {
+ if (err) {
+ self.push(item)
+ return self.emit('error', err, item)
+ }
+
+ pathItems = pathItems.map(function (part) { return path.join(pathItem, part) })
+ if (self.options.filter) pathItems = pathItems.filter(self.options.filter)
+ if (self.options.pathSorter) pathItems.sort(self.options.pathSorter)
+ pathItems.forEach(function (pi) { self.paths.push(pi) })
+
+ self.push(item)
+ })
+ })
+}
+
+function walk (root, options) {
+ return new Walker(root, options)
+}
+
+module.exports = walk