summaryrefslogtreecommitdiff
path: root/node_modules/rollup-pluginutils/src/extractAssignedNames.ts
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/rollup-pluginutils/src/extractAssignedNames.ts')
-rw-r--r--node_modules/rollup-pluginutils/src/extractAssignedNames.ts46
1 files changed, 46 insertions, 0 deletions
diff --git a/node_modules/rollup-pluginutils/src/extractAssignedNames.ts b/node_modules/rollup-pluginutils/src/extractAssignedNames.ts
new file mode 100644
index 0000000..996f41a
--- /dev/null
+++ b/node_modules/rollup-pluginutils/src/extractAssignedNames.ts
@@ -0,0 +1,46 @@
+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 };