1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 |
|
13 |
|
14 |
|
15 | "use strict";
|
16 |
|
17 | var EOL = require('os').EOL,
|
18 | arrayfilter = require('arrayfilter'),
|
19 | arraysort = require('arraysort'),
|
20 | stringcase = require('stringcase'),
|
21 | cozBud = require('coz-bud'),
|
22 | assert = require('assert'),
|
23 | path = require('path'),
|
24 | fs = require('fs'),
|
25 | _tmpl = require('./_tmpl');
|
26 |
|
27 |
|
28 | function indexJsBud(config) {
|
29 | var dirname = config.dirname;
|
30 | assert.ok(!!dirname, 'config.dirname is required.');
|
31 | return cozBud({
|
32 | force: true,
|
33 | mode: '444',
|
34 | path: path.resolve(dirname, 'index.js'),
|
35 | mkdirp: false,
|
36 | tmpl: _tmpl('index.js.hbs'),
|
37 | data: {
|
38 | END_BRACE: '}',
|
39 | desc: [].concat(config.desc || []).join(EOL + ' * '),
|
40 | module: config.module,
|
41 | parentmodule: [].concat(config.parentmodule || []),
|
42 | get modules() {
|
43 | var submodules = [].concat(config.submodules || []),
|
44 | subclasses = [].concat(config.subclasses || []);
|
45 | return fs.readdirSync(dirname)
|
46 | .sort(arraysort.stringCompare())
|
47 | .filter(arrayfilter.patternReject(/^[\._]/))
|
48 | .filter(arrayfilter.patternReject(/~$/))
|
49 | .filter(arrayfilter.patternReject(/.tmp$/))
|
50 | .filter(arrayfilter.patternReject(/^index\.js$/))
|
51 | .filter(function (filename) {
|
52 | try {
|
53 | require.resolve(path.resolve(dirname, filename));
|
54 | return true;
|
55 | } catch (e) {
|
56 | return false;
|
57 | }
|
58 | })
|
59 | .map(function (filename) {
|
60 | try {
|
61 | var name = path.basename(filename, path.extname(filename));
|
62 | return {
|
63 | name: name,
|
64 | requireName: name.split(/\./g).map(stringcase.snakecase).join('.'),
|
65 | isSubmodules: ~submodules.indexOf(stringcase.camelcase(name)),
|
66 | isSubclass: ~subclasses.indexOf(stringcase.camelcase(name)) || ~subclasses.indexOf(stringcase.pascalcase(name))
|
67 | };
|
68 | } catch (e) {
|
69 | return null;
|
70 | }
|
71 | })
|
72 | .filter(arrayfilter.emptyReject());
|
73 | }
|
74 | }
|
75 | });
|
76 | }
|
77 |
|
78 | module.exports = indexJsBud;
|
79 |
|