Skip to content
This repository was archived by the owner on Apr 29, 2025. It is now read-only.

Commit e6140e8

Browse files
committed
fix(utils/parseArguments): resolve null parameters in sparse arrays
Resolves #245.
1 parent 8e79833 commit e6140e8

File tree

1 file changed

+14
-11
lines changed

1 file changed

+14
-11
lines changed

src/utils/parseArguments.ts

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -6,31 +6,34 @@ export const parseArguments = (query: string, parameters?: CFXParameters): [stri
66

77
if (convertNamedPlaceholders && parameters && typeof parameters === 'object' && !Array.isArray(parameters))
88
if (query.includes(':') || query.includes('@')) {
9-
const placeholders = convertNamedPlaceholders(query, parameters);
10-
query = placeholders[0];
11-
parameters = placeholders[1];
9+
[query, parameters] = convertNamedPlaceholders(query, parameters);
1210
}
1311

1412
if (!parameters || typeof parameters === 'function') parameters = [];
1513

14+
const placeholders = query.match(/\?(?!\?)/g)?.length ?? 0;
15+
1616
if (parameters && !Array.isArray(parameters)) {
1717
let arr: unknown[] = [];
18-
Object.entries(parameters).forEach((entry) => (arr[parseInt(entry[0]) - 1] = entry[1]));
18+
19+
for (let i = 0; i < placeholders; i++) {
20+
arr[i] = parameters[i + 1] ?? null;
21+
}
22+
1923
parameters = arr;
2024
} else {
21-
const queryParams = query.match(/\?(?!\?)/g);
22-
23-
if (queryParams !== null) {
25+
if (placeholders) {
2426
if (parameters.length === 0) {
25-
for (let i = 0; i < queryParams.length; i++) parameters[i] = null;
27+
for (let i = 0; i < placeholders; i++) parameters[i] = null;
2628
return [query, parameters];
2729
}
28-
const diff = queryParams.length - parameters.length;
30+
31+
const diff = placeholders - parameters.length;
2932

3033
if (diff > 0) {
31-
for (let i = 0; i < diff; i++) parameters[queryParams.length + i] = null;
34+
for (let i = 0; i < diff; i++) parameters[placeholders + i] = null;
3235
} else if (diff < 0) {
33-
throw new Error(`Expected ${queryParams.length} parameters, but received ${parameters.length}.`);
36+
throw new Error(`Expected ${placeholders} parameters, but received ${parameters.length}.`);
3437
}
3538
}
3639
}

0 commit comments

Comments
 (0)