Skip to content

Commit 7040795

Browse files
natemoo-regithub-actions[bot]
authored andcommitted
[ci] format
1 parent bcce162 commit 7040795

File tree

2 files changed

+336
-313
lines changed

2 files changed

+336
-313
lines changed

src/index.ts

Lines changed: 132 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -1,158 +1,162 @@
11
import type {
2-
Aliases,
3-
Args,
4-
BooleanType,
5-
Collectable,
6-
NestedMapping,
7-
ParseOptions,
8-
StringType,
9-
Values,
2+
Aliases,
3+
Args,
4+
BooleanType,
5+
Collectable,
6+
NestedMapping,
7+
ParseOptions,
8+
StringType,
9+
Values,
1010
} from "./types.js";
1111
export { ParseOptions, Args } from "./types.js";
1212

1313
const BOOL_RE = /^(true|false)$/;
1414
const QUOTED_RE = /^('|").*\1$/;
1515

1616
const set = (obj: NestedMapping, key: string, value: any, type?: string) => {
17-
if (key.includes(".")) {
18-
const parts = key.split(".");
19-
for (let i = 0; i < parts.length - 1; i++) {
20-
const k = parts[i];
21-
const tmp = {};
22-
set(obj, k, tmp);
23-
obj = tmp;
24-
}
25-
key = parts[parts.length - 1];
26-
}
27-
if (type === "array" && obj[key] !== undefined) {
28-
if (Array.isArray(obj[key])) {
29-
(obj[key] as any[]).push(value);
30-
} else {
31-
obj[key] = [obj[key], value];
32-
}
33-
} else {
34-
obj[key] = type === "array" ? [value] : value;
35-
}
17+
if (key.includes(".")) {
18+
const parts = key.split(".");
19+
for (let i = 0; i < parts.length - 1; i++) {
20+
const k = parts[i];
21+
const tmp = {};
22+
set(obj, k, tmp);
23+
obj = tmp;
24+
}
25+
key = parts[parts.length - 1];
26+
}
27+
if (type === "array" && obj[key] !== undefined) {
28+
if (Array.isArray(obj[key])) {
29+
(obj[key] as any[]).push(value);
30+
} else {
31+
obj[key] = [obj[key], value];
32+
}
33+
} else {
34+
obj[key] = type === "array" ? [value] : value;
35+
}
3636
};
3737

3838
const type = (
39-
key: string,
40-
opts: Record<"boolean" | "string" | "array", string[]>
39+
key: string,
40+
opts: Record<"boolean" | "string" | "array", string[]>,
4141
): "boolean" | "string" | "array" | undefined => {
42-
if (opts.array && opts.array.length > 0 && opts.array.includes(key))
43-
return "array";
44-
if (opts.string && opts.string.length > 0 && opts.string.includes(key))
45-
return "string";
46-
if (opts.boolean && opts.boolean.length > 0 && opts.boolean.includes(key))
47-
return "boolean";
48-
return;
42+
if (opts.array && opts.array.length > 0 && opts.array.includes(key))
43+
return "array";
44+
if (opts.string && opts.string.length > 0 && opts.string.includes(key))
45+
return "string";
46+
if (opts.boolean && opts.boolean.length > 0 && opts.boolean.includes(key))
47+
return "boolean";
48+
return;
4949
};
5050

5151
const defaultValue = (type?: "boolean" | "string" | "array") => {
52-
if (type === "string") return "";
53-
if (type === "array") return [];
54-
return true;
52+
if (type === "string") return "";
53+
if (type === "array") return [];
54+
return true;
5555
};
5656

5757
const coerce = (value?: string, type?: "string" | "boolean" | "array") => {
58-
if (type === "string") return value;
59-
if (type === "boolean") return value === undefined ? true : value === 'true';
58+
if (type === "string") return value;
59+
if (type === "boolean") return value === undefined ? true : value === "true";
6060

61-
if (!value) return value;
62-
if (value.length > 3 && BOOL_RE.test(value)) return value === "true";
63-
if (value.length > 2 && QUOTED_RE.test(value)) return value.slice(1, -1);
64-
if (value[0] === '.' && /\d/.test(value[1]) || /\d/.test(value[0])) return Number(value);
65-
return value;
61+
if (!value) return value;
62+
if (value.length > 3 && BOOL_RE.test(value)) return value === "true";
63+
if (value.length > 2 && QUOTED_RE.test(value)) return value.slice(1, -1);
64+
if ((value[0] === "." && /\d/.test(value[1])) || /\d/.test(value[0]))
65+
return Number(value);
66+
return value;
6667
};
6768

6869
export function parse<
69-
TArgs extends Values<
70-
TBooleans,
71-
TStrings,
72-
TCollectable,
73-
undefined,
74-
TDefaults,
75-
TAliases
76-
>,
77-
TBooleans extends BooleanType = undefined,
78-
TStrings extends StringType = undefined,
79-
TCollectable extends Collectable = undefined,
80-
TDefaults extends Record<string, unknown> | undefined = undefined,
81-
TAliases extends Aliases<TAliasArgNames, TAliasNames> | undefined = undefined,
82-
TAliasArgNames extends string = string,
83-
TAliasNames extends string = string
70+
TArgs extends Values<
71+
TBooleans,
72+
TStrings,
73+
TCollectable,
74+
undefined,
75+
TDefaults,
76+
TAliases
77+
>,
78+
TBooleans extends BooleanType = undefined,
79+
TStrings extends StringType = undefined,
80+
TCollectable extends Collectable = undefined,
81+
TDefaults extends Record<string, unknown> | undefined = undefined,
82+
TAliases extends Aliases<TAliasArgNames, TAliasNames> | undefined = undefined,
83+
TAliasArgNames extends string = string,
84+
TAliasNames extends string = string,
8485
>(
85-
argv: string[],
86-
{
87-
default: defaults,
88-
alias: aliases,
89-
...types
90-
}: ParseOptions<TBooleans, TStrings, TCollectable, TDefaults, TAliases> = {}
86+
argv: string[],
87+
{
88+
default: defaults,
89+
alias: aliases,
90+
...types
91+
}: ParseOptions<TBooleans, TStrings, TCollectable, TDefaults, TAliases> = {},
9192
): Args<TArgs> {
92-
const obj = { ...defaults, _: [] } as unknown as Args<TArgs>;
93-
if (argv.length === 0) return obj;
93+
const obj = { ...defaults, _: [] } as unknown as Args<TArgs>;
94+
if (argv.length === 0) return obj;
9495

95-
for (let i = 0; i < argv.length; i++) {
96-
const curr = argv[i];
97-
const next = argv[i + 1];
96+
for (let i = 0; i < argv.length; i++) {
97+
const curr = argv[i];
98+
const next = argv[i + 1];
9899

99-
let t: 'string' | 'boolean' | 'array' | undefined;
100-
let key = '';
101-
let value: string | undefined;
100+
let t: "string" | "boolean" | "array" | undefined;
101+
let key = "";
102+
let value: string | undefined;
102103

103-
if (curr.length > 1 && curr[0] === "-") {
104-
if (curr[1] !== "-" && curr.length > 2 && !curr.includes('=')) {
105-
if (curr.includes('.')) {
106-
key = curr.slice(1, 2);
107-
value = curr.slice(2);
108-
} else {
109-
const keys = curr.slice(1, -1);
110-
for (let key of keys) {
111-
if (aliases && (aliases as Record<string, any>)[key] !== undefined) {
112-
key = aliases[key as keyof typeof aliases] as string;
113-
}
114-
set(obj, key, defaultValue(t), t)
115-
}
116-
key = curr.slice(-1)
117-
if (next && next[0] !== '-') {
118-
value = next;
119-
i++;
120-
}
121-
}
122-
} else if (!curr.includes("=") && next && next[0] !== "-") {
123-
key = curr.replace(/^-{1,2}/, '');
124-
t = type(key, types as any);
125-
// treat boolean as flag without parameter
126-
if (t === 'boolean') {
127-
value = 'true';
128-
} else {
129-
value = next;
130-
i++;
131-
}
132-
} else {
133-
const eq = curr.indexOf('=');
134-
if (eq === -1) {
135-
key = curr.replace(/^-{1,2}/, '');
136-
} else {
137-
key = curr.slice(0, eq).replace(/^-{1,2}/, '');
138-
value = curr.slice(eq + 1);
139-
}
140-
t = type(key, types as any);
141-
}
104+
if (curr.length > 1 && curr[0] === "-") {
105+
if (curr[1] !== "-" && curr.length > 2 && !curr.includes("=")) {
106+
if (curr.includes(".")) {
107+
key = curr.slice(1, 2);
108+
value = curr.slice(2);
109+
} else {
110+
const keys = curr.slice(1, -1);
111+
for (let key of keys) {
112+
if (
113+
aliases &&
114+
(aliases as Record<string, any>)[key] !== undefined
115+
) {
116+
key = aliases[key as keyof typeof aliases] as string;
117+
}
118+
set(obj, key, defaultValue(t), t);
119+
}
120+
key = curr.slice(-1);
121+
if (next && next[0] !== "-") {
122+
value = next;
123+
i++;
124+
}
125+
}
126+
} else if (!curr.includes("=") && next && next[0] !== "-") {
127+
key = curr.replace(/^-{1,2}/, "");
128+
t = type(key, types as any);
129+
// treat boolean as flag without parameter
130+
if (t === "boolean") {
131+
value = "true";
132+
} else {
133+
value = next;
134+
i++;
135+
}
136+
} else {
137+
const eq = curr.indexOf("=");
138+
if (eq === -1) {
139+
key = curr.replace(/^-{1,2}/, "");
140+
} else {
141+
key = curr.slice(0, eq).replace(/^-{1,2}/, "");
142+
value = curr.slice(eq + 1);
143+
}
144+
t = type(key, types as any);
145+
}
142146

143-
if ((!t || t === "boolean") && key.length > 3 && key.startsWith('no-')) {
144-
set(obj, key.slice(3), false)
145-
} else {
146-
if (aliases && (aliases as Record<string, any>)[key] !== undefined) {
147-
key = aliases[key as keyof typeof aliases] as string;
148-
}
149-
set(obj, key, coerce(value, t) ?? defaultValue(t), t)
150-
}
151-
} else if (curr) {
152-
(obj as any)._.push(coerce(curr));
153-
continue;
154-
}
155-
}
147+
if ((!t || t === "boolean") && key.length > 3 && key.startsWith("no-")) {
148+
set(obj, key.slice(3), false);
149+
} else {
150+
if (aliases && (aliases as Record<string, any>)[key] !== undefined) {
151+
key = aliases[key as keyof typeof aliases] as string;
152+
}
153+
set(obj, key, coerce(value, t) ?? defaultValue(t), t);
154+
}
155+
} else if (curr) {
156+
(obj as any)._.push(coerce(curr));
157+
continue;
158+
}
159+
}
156160

157-
return obj;
161+
return obj;
158162
}

0 commit comments

Comments
 (0)