1 | "use strict";
|
2 | var __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 | };
|
13 | var __importDefault = (this && this.__importDefault) || function (mod) {
|
14 | return (mod && mod.__esModule) ? mod : { "default": mod };
|
15 | };
|
16 | Object.defineProperty(exports, "__esModule", { value: true });
|
17 | const path_1 = __importDefault(require("path"));
|
18 | require("resolve-global");
|
19 | const resolve_from_1 = __importDefault(require("resolve-from"));
|
20 | const mergeWith_1 = __importDefault(require("lodash/mergeWith"));
|
21 | const config_validator_1 = require("@commitlint/config-validator");
|
22 | const importFresh = require('import-fresh');
|
23 | function 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 | }
|
41 | exports.default = resolveExtends;
|
42 | function 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 |
|
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 | }
|
70 | function 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 | }
|
80 | function 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 | }
|
93 | function 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 | }
|
108 | function resolveFromSilent(cwd, id) {
|
109 | try {
|
110 | return (0, resolve_from_1.default)(cwd, id);
|
111 | }
|
112 | catch (err) { }
|
113 | }
|
114 | function resolveGlobalSilent(id) {
|
115 | try {
|
116 | const resolveGlobal = importFresh('resolve-global');
|
117 | return resolveGlobal(id);
|
118 | }
|
119 | catch (err) { }
|
120 | }
|
121 |
|
\ | No newline at end of file |