mirror of
https://github.com/idanoo/GoScrobble.git
synced 2024-11-24 09:25:15 +00:00
47 lines
1.1 KiB
TypeScript
47 lines
1.1 KiB
TypeScript
import { Node } from 'estree-walker';
|
|
|
|
interface Extractors {
|
|
[key: string]: (names: Array<string>, param: Node) => void;
|
|
}
|
|
|
|
const extractors: Extractors = {
|
|
ArrayPattern(names: Array<string>, param: Node) {
|
|
for (const element of param.elements) {
|
|
if (element) extractors[element.type](names, element);
|
|
}
|
|
},
|
|
|
|
AssignmentPattern(names: Array<string>, param: Node) {
|
|
extractors[param.left.type](names, param.left);
|
|
},
|
|
|
|
Identifier(names: Array<string>, param: Node) {
|
|
names.push(param.name);
|
|
},
|
|
|
|
MemberExpression() {},
|
|
|
|
ObjectPattern(names: Array<string>, param: Node) {
|
|
for (const prop of param.properties) {
|
|
if (prop.type === 'RestElement') {
|
|
extractors.RestElement(names, prop);
|
|
} else {
|
|
extractors[prop.value.type](names, prop.value);
|
|
}
|
|
}
|
|
},
|
|
|
|
RestElement(names: Array<string>, param: Node) {
|
|
extractors[param.argument.type](names, param.argument);
|
|
}
|
|
};
|
|
|
|
const extractAssignedNames = function extractAssignedNames(param: Node): Array<string> {
|
|
const names: Array<string> = [];
|
|
|
|
extractors[param.type](names, param);
|
|
return names;
|
|
};
|
|
|
|
export { extractAssignedNames as default };
|