UNPKG

1.13 kBPlain TextView Raw
1import { Node } from 'estree-walker';
2
3interface Extractors {
4 [key: string]: (names: Array<string>, param: Node) => void;
5}
6
7const extractors: Extractors = {
8 ArrayPattern(names: Array<string>, param: Node) {
9 for (const element of param.elements) {
10 if (element) extractors[element.type](names, element);
11 }
12 },
13
14 AssignmentPattern(names: Array<string>, param: Node) {
15 extractors[param.left.type](names, param.left);
16 },
17
18 Identifier(names: Array<string>, param: Node) {
19 names.push(param.name);
20 },
21
22 MemberExpression() {},
23
24 ObjectPattern(names: Array<string>, param: Node) {
25 for (const prop of param.properties) {
26 if (prop.type === 'RestElement') {
27 extractors.RestElement(names, prop);
28 } else {
29 extractors[prop.value.type](names, prop.value);
30 }
31 }
32 },
33
34 RestElement(names: Array<string>, param: Node) {
35 extractors[param.argument.type](names, param.argument);
36 }
37};
38
39const extractAssignedNames = function extractAssignedNames(param: Node): Array<string> {
40 const names: Array<string> = [];
41
42 extractors[param.type](names, param);
43 return names;
44};
45
46export { extractAssignedNames as default };