From fe00940ccb0b73e169f62558506d3ffd58fa4ff7 Mon Sep 17 00:00:00 2001 From: Brett Langdon Date: Tue, 27 Nov 2012 23:01:25 -0500 Subject: [PATCH] version 0.1.1, added recursive directory lookups as well as better handling of index.js and dirctories --- example/recursive/index.js | 9 +++ example/recursive/submodule/api.js | 5 ++ example/recursive/submodule/index.js | 3 + example/recursive/submodule/tools/index.js | 3 + .../submodule/tools/string/another.js | 3 + .../recursive/submodule/tools/string/index.js | 4 ++ .../submodule/tools/string/something.js | 3 + example/simple.js | 3 - example/simple/index.js | 5 ++ example/{test => simple}/one/index.js | 0 example/{test => simple}/three/index.js | 0 example/{test => simple}/two/index.js | 0 example/test/index.js | 4 -- lib/index.js | 62 ++++++++++++++----- package.json | 2 +- 15 files changed, 81 insertions(+), 25 deletions(-) create mode 100644 example/recursive/index.js create mode 100644 example/recursive/submodule/api.js create mode 100644 example/recursive/submodule/index.js create mode 100644 example/recursive/submodule/tools/index.js create mode 100644 example/recursive/submodule/tools/string/another.js create mode 100644 example/recursive/submodule/tools/string/index.js create mode 100644 example/recursive/submodule/tools/string/something.js delete mode 100644 example/simple.js create mode 100644 example/simple/index.js rename example/{test => simple}/one/index.js (100%) rename example/{test => simple}/three/index.js (100%) rename example/{test => simple}/two/index.js (100%) delete mode 100644 example/test/index.js diff --git a/example/recursive/index.js b/example/recursive/index.js new file mode 100644 index 0000000..917d4a5 --- /dev/null +++ b/example/recursive/index.js @@ -0,0 +1,9 @@ +var automodule = require('../../'); + +var options = { + search: __dirname + '/submodule', + recursive: 3, +}; + +var submodule = automodule(options); +console.dir(submodule); \ No newline at end of file diff --git a/example/recursive/submodule/api.js b/example/recursive/submodule/api.js new file mode 100644 index 0000000..a3571bc --- /dev/null +++ b/example/recursive/submodule/api.js @@ -0,0 +1,5 @@ +return module.exports = { + 'api': 1.5, + 'test': function(){}, + 'email': function(to, from, body){} +}; \ No newline at end of file diff --git a/example/recursive/submodule/index.js b/example/recursive/submodule/index.js new file mode 100644 index 0000000..caaffa8 --- /dev/null +++ b/example/recursive/submodule/index.js @@ -0,0 +1,3 @@ +return module.exports = { + 'global': 'value' +}; \ No newline at end of file diff --git a/example/recursive/submodule/tools/index.js b/example/recursive/submodule/tools/index.js new file mode 100644 index 0000000..e85a042 --- /dev/null +++ b/example/recursive/submodule/tools/index.js @@ -0,0 +1,3 @@ +return module.exports = { + 'tools': 'index' +}; \ No newline at end of file diff --git a/example/recursive/submodule/tools/string/another.js b/example/recursive/submodule/tools/string/another.js new file mode 100644 index 0000000..9887907 --- /dev/null +++ b/example/recursive/submodule/tools/string/another.js @@ -0,0 +1,3 @@ +return module.exports = { + 'test': 'value' +}; \ No newline at end of file diff --git a/example/recursive/submodule/tools/string/index.js b/example/recursive/submodule/tools/string/index.js new file mode 100644 index 0000000..df21405 --- /dev/null +++ b/example/recursive/submodule/tools/string/index.js @@ -0,0 +1,4 @@ +return module.exports = { + 'split': function(){}, + 'rename': function(){} +}; \ No newline at end of file diff --git a/example/recursive/submodule/tools/string/something.js b/example/recursive/submodule/tools/string/something.js new file mode 100644 index 0000000..cb8de58 --- /dev/null +++ b/example/recursive/submodule/tools/string/something.js @@ -0,0 +1,3 @@ +return module.exports = { + 'some': 'data' +}; \ No newline at end of file diff --git a/example/simple.js b/example/simple.js deleted file mode 100644 index b1f2c8e..0000000 --- a/example/simple.js +++ /dev/null @@ -1,3 +0,0 @@ -var test = require('./test'); - -console.dir(test); \ No newline at end of file diff --git a/example/simple/index.js b/example/simple/index.js new file mode 100644 index 0000000..8f2956a --- /dev/null +++ b/example/simple/index.js @@ -0,0 +1,5 @@ +var automodule = require('../../'); +var options = {search: __dirname}; + +var test = automodule(options); +console.dir(test); \ No newline at end of file diff --git a/example/test/one/index.js b/example/simple/one/index.js similarity index 100% rename from example/test/one/index.js rename to example/simple/one/index.js diff --git a/example/test/three/index.js b/example/simple/three/index.js similarity index 100% rename from example/test/three/index.js rename to example/simple/three/index.js diff --git a/example/test/two/index.js b/example/simple/two/index.js similarity index 100% rename from example/test/two/index.js rename to example/simple/two/index.js diff --git a/example/test/index.js b/example/test/index.js deleted file mode 100644 index af3ee34..0000000 --- a/example/test/index.js +++ /dev/null @@ -1,4 +0,0 @@ -var automodule = require('automodule'); -var options = {search: __dirname}; - -return module.exports = automodule(options); \ No newline at end of file diff --git a/lib/index.js b/lib/index.js index 4bb1b2a..b043fbe 100644 --- a/lib/index.js +++ b/lib/index.js @@ -1,26 +1,26 @@ +var path = require('path'); var fs = require('fs'); var automodule = module.exports = function(options){ options = (options)?options:{}; var search_path = String(get(options, 'search', process.cwd())); var print = Boolean(get(options, 'print', false)); + var recursive = Number(get(options, 'recursive', 1)); var modules = {}; - var all_files = get_files(search_path); + var all_files = get_files(search_path, recursive); var top_level = ~all_files.indexOf('lib') || ~all_files.indexOf('src'); if(top_level){ modules = get_require('lib', search_path, print); } else{ - all_files.forEach(function(file){ - if(~file.indexOf('.js')){ - var len = file.length; - var name = file.substring(0, len - 3); - if(name.toLowerCase() != 'index'){ - modules[name] = get_require(file, search_path, print); - } - } else{ - modules[file] = get_require(file, search_path, print); - } + all_files.forEach(function(file){ + var module = null; + var abs = path.resolve(search_path, file); + var ext = path.extname(file); + var name = path.basename(abs, ext); + var dirname = path.dirname(file); + module = get_require(file, search_path, print); + add_module(modules, file.replace(ext, '').split('/'), module); }); } if(print){ @@ -52,19 +52,29 @@ var get_require = function(file, search_path, print){ } }; -var get_files = function(search_path){ +var get_files = function(search_path, recurse_level){ var files = []; + if(recurse_level < 1){ + return files; + } fs.readdirSync(search_path).forEach(function(file){ if(file[0] == '.'){ return; } - var stats = fs.lstatSync(search_path + '/' + file); + var abs_path = path.resolve(search_path, file); + var stats = fs.lstatSync(abs_path); if(stats.isDirectory()){ - files.push(file); + var new_files = get_files(abs_path, recurse_level-1); + new_files.forEach(function(new_f){ + files.push(file + '/' + new_f); + }); + + if(!new_files.length && fs.existsSync(path.resolve(abs_path, 'index.js'))){ + files.push(file); + } } else{ - var len = file.length; - var end = file.substring(len -3, len); - if(end == '.js'){ + var ext = path.extname(file); + if(ext == '.js' || ext == '.json'){ files.push(file); } } @@ -78,4 +88,22 @@ var get = function(obj, key, def){ } else{ return obj[key]; } +}; + +var add_module = function(obj, name_parts, module){ + if(name_parts.length <= 1){ + if(name_parts[0].toLowerCase() == 'index'){ + for(var name in module){ + obj[name] = module[name] + } + }else{ + obj[name_parts[0]] = module; + } + }else{ + if(obj[name_parts[0]] == undefined){ + obj[name_parts[0]] = {}; + } + obj[name_parts[0]] = add_module(obj[name_parts[0]], name_parts.slice(1), module); + } + return obj; }; \ No newline at end of file diff --git a/package.json b/package.json index ab2b993..78ff1d9 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "author": "Brett Langdon (http://www.brett.is)", "name": "automodule", "description": "automagically include submodules or create static include scripts", - "version": "0.1.0", + "version": "0.1.1", "homepage": "http://github.com/brettlangdon/automodule.git", "repository": { "type": "git",