UNPKG

5.32 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
33function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
34
35const w = (a, b) => Array.isArray(b) ? b : undefined;
36const valid = input => (0, _lodash.pick)(input, 'extends', 'rules', 'parserPreset', 'formatter');
37
38exports.default = (seed = {}, options = { cwd: process.cwd() }) => new Promise(function ($return, $error) {
39 var loaded, base, config, opts, resolvedParserPreset, extended, preset, executed;
40 return Promise.resolve(loadConfig(options.cwd, options.file)).then(function ($await_3) {
41 try {
42 loaded = $await_3;
43 base = loaded.filepath ? _path2.default.dirname(loaded.filepath) : options.cwd;
44 config = valid((0, _lodash.merge)(loaded.config, seed));
45 opts = (0, _lodash.merge)({ extends: [], rules: {}, formatter: '@commitlint/format' }, (0, _lodash.pick)(config, 'extends'));
46
47
48 // Resolve parserPreset key
49 if (typeof config.parserPreset === 'string') {
50 resolvedParserPreset = (0, _resolveFrom2.default)(base, config.parserPreset);
51 return Promise.resolve(require(resolvedParserPreset)).then(function ($await_4) {
52 try {
53
54 config.parserPreset = {
55 name: config.parserPreset,
56 path: resolvedParserPreset,
57 parserOpts: $await_4.parserOpts
58 };
59 return $If_1.call(this);
60 } catch ($boundEx) {
61 return $error($boundEx);
62 }
63 }.bind(this), $error);
64 }
65
66 // Resolve extends key
67
68 function $If_1() {
69 extended = (0, _resolveExtends2.default)(opts, {
70 prefix: 'commitlint-config',
71 cwd: base,
72 parserPreset: config.parserPreset
73 });
74 preset = valid((0, _lodash.mergeWith)(extended, config, w));
75
76 // Await parser-preset if applicable
77 if (typeof preset.parserPreset === 'object' && typeof preset.parserPreset.parserOpts === 'object' && typeof preset.parserPreset.parserOpts.then === 'function') {
78 return Promise.resolve(preset.parserPreset.parserOpts).then(function ($await_5) {
79 try {
80 preset.parserPreset.parserOpts = $await_5.parserOpts;
81 return $If_2.call(this);
82 } catch ($boundEx) {
83 return $error($boundEx);
84 }
85 }.bind(this), $error);
86 }
87
88 // Resolve config-relative formatter module
89
90 function $If_2() {
91 if (typeof config.formatter === 'string') {
92 preset.formatter = _resolveFrom2.default.silent(base, config.formatter) || config.formatter;
93 }
94
95 // Execute rule config functions if needed
96 return Promise.resolve(Promise.all(['rules'].map(key => [key, preset[key]]).map(item => new Promise(function ($return, $error) {
97 var _item, key, value, executedValue;
98
99 _item = (0, _slicedToArray3.default)(item, 2);
100 key = _item[0], value = _item[1];
101 return Promise.resolve(Promise.all((0, _lodash.toPairs)(value || {}).map(entry => (0, _executeRule2.default)(entry)))).then(function ($await_6) {
102 try {
103 executedValue = $await_6;
104
105 return $return([key, executedValue.reduce((registry, item) => {
106 var _item2 = (0, _slicedToArray3.default)(item, 2);
107
108 const key = _item2[0],
109 value = _item2[1];
110
111 registry[key] = value;
112 return registry;
113 }, {})]);
114 } catch ($boundEx) {
115 return $error($boundEx);
116 }
117 }.bind(this), $error);
118 }.bind(this))))).then(function ($await_7) {
119 try {
120 executed = $await_7;
121
122
123 // Merge executed config keys into preset
124 return $return(executed.reduce((registry, item) => {
125 var _item3 = (0, _slicedToArray3.default)(item, 2);
126
127 const key = _item3[0],
128 value = _item3[1];
129
130 registry[key] = value;
131 return registry;
132 }, preset));
133 } catch ($boundEx) {
134 return $error($boundEx);
135 }
136 }.bind(this), $error);
137 }
138
139 return $If_2.call(this);
140 }
141
142 return $If_1.call(this);
143 } catch ($boundEx) {
144 return $error($boundEx);
145 }
146 }.bind(this), $error);
147}.bind(this));
148
149function loadConfig(cwd, configPath) {
150 return new Promise(function ($return, $error) {
151 var explorer, local;
152 explorer = (0, _cosmiconfig2.default)('commitlint', {
153 rcExtensions: true,
154 configPath: configPath ? _path2.default.resolve(cwd, configPath) : null
155 });
156 return Promise.resolve(explorer.load(cwd)).then(function ($await_8) {
157 try {
158 local = $await_8;
159
160
161 if (local) {
162 return $return(local);
163 }
164
165 return $return({});
166 } catch ($boundEx) {
167 return $error($boundEx);
168 }
169 }.bind(this), $error);
170 }.bind(this));
171}
172module.exports = exports['default'];
173//# sourceMappingURL=index.js.map
\No newline at end of file