parse() {
// eslint-disable-next-line @typescript-eslint/no-this-alias
const self = this;
traverse(this._ast, {
ExportNamedDeclaration: {
enter({ node, parent }) {
if (t.isVariableDeclaration(node.declaration)) {
// export const X = ...;
node.declaration.declarations.forEach((decl) => {
if (t.isVariableDeclarator(decl) && t.isIdentifier(decl.id)) {
const { name: exportName } = decl.id;
let exportVal = decl.init;
if (t.isIdentifier(exportVal)) {
exportVal = _findVarInitialization(exportVal.name, parent as t.Program);
}
self._exports[exportName] = exportVal;
}
});
} else {
logger.warn(`Unexpected ${JSON.stringify(node)}`);
}
},
},
ExpressionStatement: {
enter({ node, parent }) {
if (t.isAssignmentExpression(node.expression) && node.expression.operator === '=') {
const { left, right } = node.expression;
if (
t.isMemberExpression(left) &&
t.isIdentifier(left.object) &&
left.object.name === 'module' &&
t.isIdentifier(left.property) &&
left.property.name === 'exports'
) {
let exportObject = right;
if (t.isIdentifier(right)) {
exportObject = _findVarInitialization(right.name, parent as t.Program);
}
if (t.isObjectExpression(exportObject)) {
self._exportsObject = exportObject;
exportObject.properties.forEach((p: t.ObjectProperty) => {
const exportName = propKey(p);
if (exportName) {
let exportVal = p.value;
if (t.isIdentifier(exportVal)) {
exportVal = _findVarInitialization(exportVal.name, parent as t.Program);
}
self._exports[exportName] = exportVal as t.Expression;
}
});
} else {
logger.warn(`Unexpected ${JSON.stringify(node)}`);
}
}
}
},
},
});
return self;
}
Created
August 11, 2022 03:59
-
-
Save iamyoki/d3d41e776b7dbe33ad7c68194d9c486d to your computer and use it in GitHub Desktop.
Parse a module.export object in storybook cli
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment