pax_global_header00006660000000000000000000000064133165773640014531gustar00rootroot0000000000000052 comment=5c6c878dae8d63da77acd62789fb17300c190f7a node-require-all-3.0.0/000077500000000000000000000000001331657736400146765ustar00rootroot00000000000000node-require-all-3.0.0/.gitignore000066400000000000000000000000461331657736400166660ustar00rootroot00000000000000*.un~ node_modules/ package-lock.json node-require-all-3.0.0/.travis.yml000066400000000000000000000003651331657736400170130ustar00rootroot00000000000000language: node_js node_js: - '0.8' - '0.10' - '0.12' - '1.8' - '2.5' - '3.3' - '4.9' - '5.12' - '6.14' - '7.10' - '8.11' - '9.11' - '10.5' sudo: false before_install: npm config set shrinkwrap false script: npm test node-require-all-3.0.0/Changes.md000066400000000000000000000030331331657736400165670ustar00rootroot00000000000000# Changes This file is a manually maintained list of changes for each release. Feel free to add your changes here when sending pull requests. Also send corrections if you spot any mistakes. ## v3.0.0 (2018-07-02) * Drop support for Node.js 0.6 and below #54 #56 * Skip adding keys for directories without modules #51 #53 ## v2.2.0 (2017-02-18) * Accept "filter" RegExps without any capture groups #43 #46 ## v2.1.0 (2016-12-09) * Accept a function for "filter" option #27 #31 ## v2.0.0 (2015-10-17) * Add "recursive" argument to control directory recursion #21 * Default "excludeDirs" and "filter" if not provided in options #19 * Ignore dot files & folder by default #12 * Update the "map" property to map directory names #20 ## Older releases These releases were done before maintaining this file: * [v1.1.0](https://github.com/felixge/node-require-all/compare/v1.0.0...v1.1.0) (2015-05-19) * [v1.0.0](https://github.com/felixge/node-require-all/compare/v0.0.8...v1.0.0) (2014-12-01) * [v0.0.8](https://github.com/felixge/node-require-all/compare/v0.0.6...v0.0.8) (2013-08-19) * [v0.0.6](https://github.com/felixge/node-require-all/compare/v0.0.4...v0.0.6) (2013-03-13) * [v0.0.4](https://github.com/felixge/node-require-all/compare/v0.0.3...v0.0.4) (2012-06-12) * [v0.0.3](https://github.com/felixge/node-require-all/compare/v0.0.2...v0.0.3) (2012-01-12) * [v0.0.2](https://github.com/felixge/node-require-all/compare/v0.0.1...v0.0.2) (2011-12-19) * [v0.0.1](https://github.com/felixge/node-require-all/commits/v0.0.1) (2011-12-14) node-require-all-3.0.0/LICENSE000066400000000000000000000021211331657736400156770ustar00rootroot00000000000000(The MIT License) Copyright (c) 2012 Felix Geisendörfer (felix@debuggable.com) 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. node-require-all-3.0.0/Readme.md000066400000000000000000000066701331657736400164260ustar00rootroot00000000000000# require-all An easy way to require all files within a directory. [![NPM Version][npm-image]][npm-url] [![NPM Downloads][downloads-image]][downloads-url] [![Build Status][travis-image]][travis-url] ## Usage ```js var controllers = require('require-all')({ dirname : __dirname + '/controllers', filter : /(.+Controller)\.js$/, excludeDirs : /^\.(git|svn)$/, recursive : true }); // controllers now is an object with references to all modules matching the filter // for example: // { HomeController: function HomeController() {...}, ...} ``` ## Advanced usage If your objective is to simply require all .js and .json files in a directory you can just pass a string to require-all: ``` js var libs = require('require-all')(__dirname + '/lib'); ``` ### Constructed object usage If your directory contains files that all export constructors, you can require them all and automatically construct the objects using `resolve`: ```js var controllers = require('require-all')({ dirname : __dirname + '/controllers', filter : /(.+Controller)\.js$/, resolve : function (Controller) { return new Controller(); } }); ``` ### Alternative property names If your directory contains files where the names do not match what you want in the resulting property (for example, you want camelCase but the file names are snake_case), then you can use the `map` function. The `map` function is called on both file and directory names, as they are added to the resulting object. ```js var controllers = require('require-all')({ dirname : __dirname + '/controllers', filter : /(.+Controller)\.js$/, map : function (name, path) { return name.replace(/_([a-z])/g, function (m, c) { return c.toUpperCase(); }); } }); ``` ### Filtering files If your directory contains files that you do not want to require, or that you want only a part of the file's name to be used as the property name, `filter` can be a regular expression. In the following example, the `filter` is set to `/^(.+Controller)\.js$/`, which means only files that end in "Controller.js" are required, and the resulting property name will be the name of the file without the ".js" extension. For example, the file "MainController.js" will match, and since the first capture group will contain "MainController", that will be the property name used. If no capture group is used, then the entire match will be used as the name. ```js var controllers = require('require-all')({ dirname : __dirname + '/controllers', filter : /^(.+Controller)\.js$/ }); ``` For even more advanced usage, the `filter` option also accepts a function that is invoked with the file name as the first argument. The filter function is expected to return a falsy value to ignore the file, otherwise a string to use as the property name. ```js var controllers = requireAll({ dirname : __dirname + '/controllers', filter : function (fileName) { var parts = fileName.split('-'); if (parts[1] !== 'Controller.js') return; return parts[0]; } }); ``` Note that empty directories are always excluded from the end result. [npm-image]: https://img.shields.io/npm/v/require-all.svg [npm-url]: https://npmjs.org/package/require-all [downloads-image]: https://img.shields.io/npm/dm/require-all.svg [downloads-url]: https://npmjs.org/package/require-all [travis-image]: https://img.shields.io/travis/felixge/node-require-all/master.svg [travis-url]: https://travis-ci.org/felixge/node-require-all node-require-all-3.0.0/index.js000066400000000000000000000032011331657736400163370ustar00rootroot00000000000000var fs = require('fs'); var DEFAULT_EXCLUDE_DIR = /^\./; var DEFAULT_FILTER = /^([^\.].*)\.js(on)?$/; var DEFAULT_RECURSIVE = true; module.exports = function requireAll(options) { var dirname = typeof options === 'string' ? options : options.dirname; var excludeDirs = options.excludeDirs === undefined ? DEFAULT_EXCLUDE_DIR : options.excludeDirs; var filter = options.filter === undefined ? DEFAULT_FILTER : options.filter; var modules = {}; var recursive = options.recursive === undefined ? DEFAULT_RECURSIVE : options.recursive; var resolve = options.resolve || identity; var map = options.map || identity; function excludeDirectory(dirname) { return !recursive || (excludeDirs && dirname.match(excludeDirs)); } function filterFile(filename) { if (typeof filter === 'function') { return filter(filename); } var match = filename.match(filter); if (!match) return; return match[1] || match[0]; } var files = fs.readdirSync(dirname); files.forEach(function (file) { var filepath = dirname + '/' + file; if (fs.statSync(filepath).isDirectory()) { if (excludeDirectory(file)) return; var subModules = requireAll({ dirname: filepath, filter: filter, excludeDirs: excludeDirs, map: map, resolve: resolve }); if (Object.keys(subModules).length === 0) return; modules[map(file, filepath)] = subModules; } else { var name = filterFile(file); if (!name) return; modules[map(name, filepath)] = resolve(require(filepath)); } }); return modules; }; function identity(val) { return val; } node-require-all-3.0.0/package.json000066400000000000000000000012111331657736400171570ustar00rootroot00000000000000{ "name": "require-all", "description": "An easy way to require all files within a directory.", "version": "3.0.0", "author": "Felix Geisendörfer (http://debuggable.com/)", "contributors": [ "Douglas Christopher Wilson ", "Prince Obiechine Onyenike ", "Nuno Job (http://nunojob.com)" ], "license": "MIT", "repository": "felixge/node-require-all", "files": [ "Changes.md", "LICENSE", "index.js", "Readme.md" ], "engines": { "node": ">= 0.8" }, "scripts": { "test": "node test/test.js" } } node-require-all-3.0.0/test/000077500000000000000000000000001331657736400156555ustar00rootroot00000000000000node-require-all-3.0.0/test/controllers/000077500000000000000000000000001331657736400202235ustar00rootroot00000000000000node-require-all-3.0.0/test/controllers/.hidden/000077500000000000000000000000001331657736400215345ustar00rootroot00000000000000node-require-all-3.0.0/test/controllers/.hidden/stuff.js000066400000000000000000000000441331657736400232170ustar00rootroot00000000000000module.exports = { gute: 'nacht' }; node-require-all-3.0.0/test/controllers/main-Controller.js000066400000000000000000000001141331657736400236220ustar00rootroot00000000000000exports.index = 1; exports.show = 2; exports.add = 3; exports.edit = 4; node-require-all-3.0.0/test/controllers/notthis.js000066400000000000000000000000241331657736400222450ustar00rootroot00000000000000exports.yes = 'no'; node-require-all-3.0.0/test/controllers/other-Controller.js000066400000000000000000000000541331657736400240220ustar00rootroot00000000000000exports.index = 1; exports.show = 'nothing' node-require-all-3.0.0/test/controllers/sub-dir/000077500000000000000000000000001331657736400215705ustar00rootroot00000000000000node-require-all-3.0.0/test/controllers/sub-dir/other-Controller.js000066400000000000000000000000461331657736400253700ustar00rootroot00000000000000exports.index = 1; exports.show = 2; node-require-all-3.0.0/test/controllers/unrelated/000077500000000000000000000000001331657736400222065ustar00rootroot00000000000000node-require-all-3.0.0/test/controllers/unrelated/foo.txt000066400000000000000000000000001331657736400235200ustar00rootroot00000000000000node-require-all-3.0.0/test/filterdir/000077500000000000000000000000001331657736400176415ustar00rootroot00000000000000node-require-all-3.0.0/test/filterdir/.svn/000077500000000000000000000000001331657736400205255ustar00rootroot00000000000000node-require-all-3.0.0/test/filterdir/.svn/stuff.js000066400000000000000000000000441331657736400222100ustar00rootroot00000000000000module.exports = { gute: 'nacht' }; node-require-all-3.0.0/test/filterdir/root.js000066400000000000000000000000431331657736400211570ustar00rootroot00000000000000module.exports = { guten: 'tag' }; node-require-all-3.0.0/test/filterdir/sub/000077500000000000000000000000001331657736400204325ustar00rootroot00000000000000node-require-all-3.0.0/test/filterdir/sub/hello.js000066400000000000000000000000451331657736400220720ustar00rootroot00000000000000module.exports = { guten: 'abend' }; node-require-all-3.0.0/test/mydir/000077500000000000000000000000001331657736400170015ustar00rootroot00000000000000node-require-all-3.0.0/test/mydir/.stuff.js000066400000000000000000000000441331657736400205420ustar00rootroot00000000000000module.exports = { gute: 'nacht' }; node-require-all-3.0.0/test/mydir/foo.js000066400000000000000000000000301331657736400201130ustar00rootroot00000000000000module.exports = 'bar'; node-require-all-3.0.0/test/mydir/hello.js000066400000000000000000000000551331657736400204420ustar00rootroot00000000000000exports.world = true; exports.universe = 42; node-require-all-3.0.0/test/mydir/sub/000077500000000000000000000000001331657736400175725ustar00rootroot00000000000000node-require-all-3.0.0/test/mydir/sub/config.json000066400000000000000000000000511331657736400217260ustar00rootroot00000000000000{ "settingA": "A", "settingB": "B" } node-require-all-3.0.0/test/mydir/sub/no.2js000066400000000000000000000000271331657736400206250ustar00rootroot00000000000000module.exports = true; node-require-all-3.0.0/test/mydir/sub/yes.js000066400000000000000000000000271331657736400207270ustar00rootroot00000000000000module.exports = true; node-require-all-3.0.0/test/resolved/000077500000000000000000000000001331657736400175005ustar00rootroot00000000000000node-require-all-3.0.0/test/resolved/onearg.js000066400000000000000000000000711331657736400213070ustar00rootroot00000000000000module.exports = function (arg1, arg2) { return arg1; } node-require-all-3.0.0/test/resolved/twoargs.js000066400000000000000000000000711331657736400215220ustar00rootroot00000000000000module.exports = function (arg1, arg2) { return arg2; } node-require-all-3.0.0/test/test.js000066400000000000000000000104311331657736400171710ustar00rootroot00000000000000var assert = require('assert'); var requireAll = require('..'); var controllers = requireAll({ dirname: __dirname + '/controllers', filter: /(.+Controller)\.js$/ }); assert.deepEqual(controllers, { 'main-Controller': { index: 1, show: 2, add: 3, edit: 4 }, 'other-Controller': { index: 1, show: 'nothing' }, 'sub-dir': { 'other-Controller': { index: 1, show: 2 } } }); var controllersTop = requireAll({ dirname: __dirname + '/controllers', filter: /(.+Controller)\.js$/, recursive: false }); assert.deepEqual(controllersTop, { 'main-Controller': { index: 1, show: 2, add: 3, edit: 4 }, 'other-Controller': { index: 1, show: 'nothing' } }); var controllersMap = requireAll({ dirname: __dirname + '/controllers', filter: /(.+Controller)\.js$/, map: function (name) { return name.replace(/-([A-Z])/, function (m, c) { return '_' + c.toLowerCase(); }); } }); assert.deepEqual(controllersMap, { main_controller: { index: 1, show: 2, add: 3, edit: 4 }, other_controller: { index: 1, show: 'nothing' }, 'sub-dir': { other_controller: { index: 1, show: 2 } } }); var controllersMap = requireAll({ dirname: __dirname + '/controllers', filter: /.+Controller\.js$/ }); assert.deepEqual(controllersMap, { 'main-Controller.js': { index: 1, show: 2, add: 3, edit: 4 }, 'other-Controller.js': { index: 1, show: 'nothing' }, 'sub-dir': { 'other-Controller.js': { index: 1, show: 2 } } }); controllersMap = requireAll({ dirname: __dirname + '/controllers', filter: /(.+Controller)\.js$/, map: function (name) { return name.replace(/-([A-Za-z])/, function (m, c) { return '_' + c.toLowerCase(); }); } }); assert.deepEqual(controllersMap, { main_controller: { index: 1, show: 2, add: 3, edit: 4 }, other_controller: { index: 1, show: 'nothing' }, sub_dir: { other_controller: { index: 1, show: 2 } } }); controllersMap = requireAll({ dirname: __dirname + '/controllers', filter: /(.+Controller)\.js$/, map: function (name) { return name.replace(/-([A-Za-z])/, function (m, c) { return '_' + c.toLowerCase(); }); } }); assert.deepEqual(controllersMap, { main_controller: { index: 1, show: 2, add: 3, edit: 4 }, other_controller: { index: 1, show: 'nothing' }, sub_dir: { other_controller: { index: 1, show: 2 } } }); var mydir = requireAll({ dirname: __dirname + '/mydir' }); var mydir_contents = { foo: 'bar', hello: { world: true, universe: 42 }, sub: { config: { settingA: 'A', settingB: 'B' }, yes: true } }; assert.deepEqual(mydir, mydir_contents); var defaults = requireAll(__dirname + '/mydir'); assert.deepEqual(defaults, mydir_contents); var unfiltered = requireAll({ dirname: __dirname + '/filterdir', filter: /(.+)\.js$/, excludeDirs: false }); assert(unfiltered['.svn']); assert(unfiltered.root); assert(unfiltered.sub); var excludedSvn = requireAll({ dirname: __dirname + '/filterdir', filter: /(.+)\.js$/, excludeDirs: /^\.svn$/ }); assert.equal(excludedSvn['.svn'], undefined); assert.ok(excludedSvn.root); assert.ok(excludedSvn.sub); var excludedSvnAndSub = requireAll({ dirname: __dirname + '/filterdir', filter: /(.+)\.js$/, excludeDirs: /^(\.svn|sub)$/ }); assert.equal(excludedSvnAndSub['.svn'], undefined); assert.ok(excludedSvnAndSub.root); assert.equal(excludedSvnAndSub.sub, undefined); var resolvedValues = requireAll({ dirname: __dirname + '/resolved', filter: /(.+)\.js$/, resolve: function (fn) { return fn('arg1', 'arg2'); } }); assert.equal(resolvedValues.onearg, 'arg1'); assert.equal(resolvedValues.twoargs, 'arg2'); var filterFunction = requireAll({ dirname: __dirname + '/controllers', filter: function (fileName) { var parts = fileName.split('-'); if (parts[1] !== 'Controller.js') return; return parts[0]; } }); assert.deepEqual(filterFunction, { 'main': { index: 1, show: 2, add: 3, edit: 4 }, 'other': { index: 1, show: 'nothing' }, 'sub-dir': { 'other': { index: 1, show: 2 } } });