UNPKG

4.74 kBJavaScriptView Raw
1"use strict";
2var __rest = (this && this.__rest) || function (s, e) {
3 var t = {};
4 for (var p in s) if (Object.prototype.hasOwnProperty.call(s, p) && e.indexOf(p) < 0)
5 t[p] = s[p];
6 if (s != null && typeof Object.getOwnPropertySymbols === "function")
7 for (var i = 0, p = Object.getOwnPropertySymbols(s); i < p.length; i++) {
8 if (e.indexOf(p[i]) < 0 && Object.prototype.propertyIsEnumerable.call(s, p[i]))
9 t[p[i]] = s[p[i]];
10 }
11 return t;
12};
13var __importDefault = (this && this.__importDefault) || function (mod) {
14 return (mod && mod.__esModule) ? mod : { "default": mod };
15};
16Object.defineProperty(exports, "__esModule", { value: true });
17const path_1 = __importDefault(require("path"));
18require("resolve-global");
19const resolve_from_1 = __importDefault(require("resolve-from"));
20const mergeWith_1 = __importDefault(require("lodash/mergeWith"));
21const config_validator_1 = require("@commitlint/config-validator");
22const importFresh = require('import-fresh');
23function resolveExtends(config = {}, context = {}) {
24 const { extends: e } = config;
25 const extended = loadExtends(config, context);
26 extended.push(config);
27 return extended.reduce((r, _a) => {
28 var { extends: _ } = _a, c = __rest(_a, ["extends"]);
29 return (0, mergeWith_1.default)(r, c, (objValue, srcValue, key) => {
30 if (key === 'plugins') {
31 if (Array.isArray(objValue)) {
32 return objValue.concat(srcValue);
33 }
34 }
35 else if (Array.isArray(objValue)) {
36 return srcValue;
37 }
38 });
39 }, e ? { extends: e } : {});
40}
41exports.default = resolveExtends;
42function loadExtends(config = {}, context = {}) {
43 const { extends: e } = config;
44 const ext = e ? (Array.isArray(e) ? e : [e]) : [];
45 return ext.reduce((configs, raw) => {
46 const load = context.require || require;
47 const resolved = resolveConfig(raw, context);
48 const c = load(resolved);
49 const cwd = path_1.default.dirname(resolved);
50 const ctx = Object.assign(Object.assign({}, context), { cwd });
51 // Resolve parser preset if none was present before
52 if (!context.parserPreset &&
53 typeof c === 'object' &&
54 typeof c.parserPreset === 'string') {
55 const resolvedParserPreset = (0, resolve_from_1.default)(cwd, c.parserPreset);
56 const parserPreset = {
57 name: c.parserPreset,
58 path: `./${path_1.default.relative(process.cwd(), resolvedParserPreset)}`
59 .split(path_1.default.sep)
60 .join('/'),
61 parserOpts: require(resolvedParserPreset),
62 };
63 ctx.parserPreset = parserPreset;
64 config.parserPreset = parserPreset;
65 }
66 (0, config_validator_1.validateConfig)(resolved, config);
67 return [...configs, ...loadExtends(c, ctx), c];
68 }, []);
69}
70function getId(raw = '', prefix = '') {
71 const first = raw.charAt(0);
72 const scoped = first === '@';
73 const relative = first === '.';
74 const absolute = path_1.default.isAbsolute(raw);
75 if (scoped) {
76 return raw.includes('/') ? raw : [raw, prefix].filter(String).join('/');
77 }
78 return relative || absolute ? raw : [prefix, raw].filter(String).join('-');
79}
80function resolveConfig(raw, context = {}) {
81 const resolve = context.resolve || resolveId;
82 const id = getId(raw, context.prefix);
83 try {
84 return resolve(id, context);
85 }
86 catch (err) {
87 const legacy = getId(raw, 'conventional-changelog-lint-config');
88 const resolved = resolve(legacy, context);
89 console.warn(`Resolving ${raw} to legacy config ${legacy}. To silence this warning raise an issue at 'npm repo ${legacy}' to rename to ${id}.`);
90 return resolved;
91 }
92}
93function resolveId(id, context = {}) {
94 const cwd = context.cwd || process.cwd();
95 const localPath = resolveFromSilent(cwd, id);
96 if (typeof localPath === 'string') {
97 return localPath;
98 }
99 const resolveGlobal = context.resolveGlobal || resolveGlobalSilent;
100 const globalPath = resolveGlobal(id);
101 if (typeof globalPath === 'string') {
102 return globalPath;
103 }
104 const err = new Error(`Cannot find module "${id}" from "${cwd}"`);
105 err.code = 'MODULE_NOT_FOUND';
106 throw err;
107}
108function resolveFromSilent(cwd, id) {
109 try {
110 return (0, resolve_from_1.default)(cwd, id);
111 }
112 catch (err) { }
113}
114function resolveGlobalSilent(id) {
115 try {
116 const resolveGlobal = importFresh('resolve-global');
117 return resolveGlobal(id);
118 }
119 catch (err) { }
120}
121//# sourceMappingURL=index.js.map
\No newline at end of file