File size: 919 Bytes
bc20498 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
/**
* @param {import('estree').Node} node
*/
export default function flatten_reference(node) {
/** @type {any[]} */
const nodes = [];
/** @type {string[]} */
const parts = [];
while (node.type === 'MemberExpression') {
nodes.unshift(node.property);
if (!node.computed) {
parts.unshift(/** @type {import('estree').Identifier} */ (node.property).name);
} else {
const computed_property = to_string(node.property);
if (computed_property) {
parts.unshift(`[${computed_property}]`);
}
}
node = node.object;
}
const name =
node.type === 'Identifier' ? node.name : node.type === 'ThisExpression' ? 'this' : null;
nodes.unshift(node);
parts.unshift(name);
return { name, nodes, parts };
}
/**
* @param {import('estree').Node} node
*/
function to_string(node) {
switch (node.type) {
case 'Literal':
return String(node.value);
case 'Identifier':
return node.name;
}
}
|