UNPKG

6.43 kBJavaScriptView Raw
1'use strict';
2
3Object.defineProperty(exports, "__esModule", {
4 value: true
5});
6
7var _slicedToArray2 = require('babel-runtime/helpers/slicedToArray');
8
9var _slicedToArray3 = _interopRequireDefault(_slicedToArray2);
10
11var _path = require('path');
12
13var _path2 = _interopRequireDefault(_path);
14
15var _executeRule = require('@commitlint/execute-rule');
16
17var _executeRule2 = _interopRequireDefault(_executeRule);
18
19var _resolveExtends = require('@commitlint/resolve-extends');
20
21var _resolveExtends2 = _interopRequireDefault(_resolveExtends);
22
23var _cosmiconfig = require('cosmiconfig');
24
25var _cosmiconfig2 = _interopRequireDefault(_cosmiconfig);
26
27var _lodash = require('lodash');
28
29var _resolveFrom = require('resolve-from');
30
31var _resolveFrom2 = _interopRequireDefault(_resolveFrom);
32
33var _loadPlugin = require('./utils/loadPlugin');
34
35var _loadPlugin2 = _interopRequireDefault(_loadPlugin);
36
37function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
38
39const w = (a, b) => Array.isArray(b) ? b : undefined;
40const valid = input => (0, _lodash.pick)(input, 'extends', 'rules', 'plugins', 'parserPreset', 'formatter', 'ignores', 'defaultIgnores');
41
42exports.default = (seed = {}, options = { cwd: process.cwd() }) => new Promise(function ($return, $error) {
43 var loaded, base, config, opts, resolvedParserPreset, extended, preset, executed;
44 return Promise.resolve(loadConfig(options.cwd, options.file)).then(function ($await_4) {
45 try {
46 loaded = $await_4;
47 base = loaded.filepath ? _path2.default.dirname(loaded.filepath) : options.cwd;
48 config = valid((0, _lodash.merge)({}, loaded.config, seed));
49 opts = (0, _lodash.merge)({ extends: [], rules: {}, formatter: '@commitlint/format' }, (0, _lodash.pick)(config, 'extends', 'plugins', 'ignores', 'defaultIgnores'));
50
51
52 // Resolve parserPreset key
53 if (typeof config.parserPreset === 'string') {
54 let resolvedParserConfig;
55 resolvedParserPreset = (0, _resolveFrom2.default)(base, config.parserPreset);
56 return Promise.resolve(require(resolvedParserPreset)).then(function ($await_5) {
57 try {
58 resolvedParserConfig = $await_5;
59
60 // Resolve loaded parser preset if its a factory
61 if (typeof resolvedParserConfig === 'function') {
62 return Promise.resolve(resolvedParserConfig()).then(function ($await_6) {
63 try {
64 resolvedParserConfig = $await_6;
65 return $If_3.call(this);
66 } catch ($boundEx) {
67 return $error($boundEx);
68 }
69 }.bind(this), $error);
70 }
71
72 function $If_3() {
73 config.parserPreset = {
74 name: config.parserPreset,
75 path: resolvedParserPreset,
76 parserOpts: resolvedParserConfig.parserOpts
77 };
78 return $If_1.call(this);
79 }
80
81 return $If_3.call(this);
82 } catch ($boundEx) {
83 return $error($boundEx);
84 }
85 }.bind(this), $error);
86 }
87
88 // Resolve extends key
89
90 function $If_1() {
91 extended = (0, _resolveExtends2.default)(opts, {
92 prefix: 'commitlint-config',
93 cwd: base,
94 parserPreset: config.parserPreset
95 });
96 preset = valid((0, _lodash.mergeWith)(extended, config, w));
97
98 // Await parser-preset if applicable
99 if (typeof preset.parserPreset === 'object' && typeof preset.parserPreset.parserOpts === 'object' && typeof preset.parserPreset.parserOpts.then === 'function') {
100 return Promise.resolve(preset.parserPreset.parserOpts).then(function ($await_7) {
101 try {
102 preset.parserPreset.parserOpts = $await_7.parserOpts;
103 return $If_2.call(this);
104 } catch ($boundEx) {
105 return $error($boundEx);
106 }
107 }.bind(this), $error);
108 }
109
110 // Resolve config-relative formatter module
111
112 function $If_2() {
113 if (typeof config.formatter === 'string') {
114 preset.formatter = _resolveFrom2.default.silent(base, config.formatter) || config.formatter;
115 }
116
117 // resolve plugins
118 preset.plugins = {};
119 if (config.plugins && config.plugins.length) {
120 config.plugins.forEach(pluginKey => {
121 (0, _loadPlugin2.default)(preset.plugins, pluginKey, process.env.DEBUG === 'true');
122 });
123 }
124
125 // Execute rule config functions if needed
126 return Promise.resolve(Promise.all(['rules'].map(key => [key, preset[key]]).map(item => new Promise(function ($return, $error) {
127 var _item, key, value, executedValue;
128
129 _item = (0, _slicedToArray3.default)(item, 2);
130 key = _item[0], value = _item[1];
131 return Promise.resolve(Promise.all((0, _lodash.toPairs)(value || {}).map(entry => (0, _executeRule2.default)(entry)))).then(function ($await_8) {
132 try {
133 executedValue = $await_8;
134
135 return $return([key, executedValue.reduce((registry, item) => {
136 var _item2 = (0, _slicedToArray3.default)(item, 2);
137
138 const key = _item2[0],
139 value = _item2[1];
140
141 registry[key] = value;
142 return registry;
143 }, {})]);
144 } catch ($boundEx) {
145 return $error($boundEx);
146 }
147 }.bind(this), $error);
148 }.bind(this))))).then(function ($await_9) {
149 try {
150 executed = $await_9;
151
152
153 // Merge executed config keys into preset
154 return $return(executed.reduce((registry, item) => {
155 var _item3 = (0, _slicedToArray3.default)(item, 2);
156
157 const key = _item3[0],
158 value = _item3[1];
159
160 registry[key] = value;
161 return registry;
162 }, preset));
163 } catch ($boundEx) {
164 return $error($boundEx);
165 }
166 }.bind(this), $error);
167 }
168
169 return $If_2.call(this);
170 }
171
172 return $If_1.call(this);
173 } catch ($boundEx) {
174 return $error($boundEx);
175 }
176 }.bind(this), $error);
177}.bind(this));
178
179function loadConfig(cwd, configPath) {
180 return new Promise(function ($return, $error) {
181 var explorer, explicitPath, explore, searchPath, local;
182 explorer = (0, _cosmiconfig2.default)('commitlint');
183 explicitPath = configPath ? _path2.default.resolve(cwd, configPath) : undefined;
184 explore = explicitPath ? explorer.load : explorer.search;
185 searchPath = explicitPath ? explicitPath : cwd;
186 return Promise.resolve(explore(searchPath)).then(function ($await_10) {
187 try {
188 local = $await_10;
189
190
191 if (local) {
192 return $return(local);
193 }
194
195 return $return({});
196 } catch ($boundEx) {
197 return $error($boundEx);
198 }
199 }.bind(this), $error);
200 }.bind(this));
201}
202module.exports = exports.default;
203//# sourceMappingURL=index.js.map
\No newline at end of file