Skip to content

Commit 3a7ec9d

Browse files
committed
fix: optimize loadParserOpts
1 parent f1bf2d2 commit 3a7ec9d

File tree

1 file changed

+14
-20
lines changed

1 file changed

+14
-20
lines changed

@commitlint/load/src/utils/load-parser-opts.ts

+14-20
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,10 @@ function isObjectLike(obj: unknown): obj is Record<string, unknown> {
44
return Boolean(obj) && typeof obj === 'object'; // typeof null === 'object'
55
}
66

7-
function isPromiseLike(obj: unknown): obj is Promise<unknown> {
8-
return isObjectLike(obj) && typeof (obj as any).then === 'function';
9-
}
10-
117
function isParserOptsFunction<T extends ParserPreset>(
128
obj: T
139
): obj is T & {
14-
parserOpts: (
15-
cb: (_: never, parserOpts: Record<string, unknown>) => unknown
16-
) => Record<string, unknown> | undefined;
10+
parserOpts: (...args: any[]) => any;
1711
} {
1812
return typeof obj.parserOpts === 'function';
1913
}
@@ -27,9 +21,16 @@ export async function loadParserOpts(
2721
// Await for the module, loaded with require
2822
const parser = await pendingParser;
2923

30-
// Await parser opts if applicable
31-
if (isPromiseLike(parser.parserOpts)) {
32-
parser.parserOpts = ((await parser.parserOpts) as any).parserOpts;
24+
// exit early, no opts to resolve
25+
if (!parser.parserOpts) {
26+
return parser;
27+
}
28+
29+
// Pull nested parserOpts, might happen if overwritten with a module in main config
30+
if (typeof parser.parserOpts === 'object') {
31+
// Await parser opts if applicable
32+
const opts = await parser.parserOpts;
33+
parser.parserOpts = isObjectLike(opts) ? opts.parserOpts : undefined;
3334
return parser;
3435
}
3536

@@ -40,10 +41,10 @@ export async function loadParserOpts(
4041
parser.name.startsWith('conventional-changelog-')
4142
) {
4243
return new Promise((resolve) => {
43-
const result = parser.parserOpts((_: never, opts) => {
44+
const result = parser.parserOpts((_: never, opts: any) => {
4445
resolve({
4546
...parser,
46-
parserOpts: opts.parserOpts,
47+
parserOpts: opts?.parserOpts,
4748
});
4849
});
4950

@@ -53,20 +54,13 @@ export async function loadParserOpts(
5354
Promise.resolve(result).then((opts) => {
5455
resolve({
5556
...parser,
56-
parserOpts: opts.parserOpts,
57+
parserOpts: opts?.parserOpts,
5758
});
5859
});
5960
}
6061
return;
6162
});
6263
}
6364

64-
// Pull nested parserOpts, might happen if overwritten with a module in main config
65-
if (
66-
isObjectLike(parser.parserOpts) &&
67-
typeof parser.parserOpts.parserOpts === 'object'
68-
) {
69-
parser.parserOpts = parser.parserOpts.parserOpts;
70-
}
7165
return parser;
7266
}

0 commit comments

Comments
 (0)