Add comprehensive development roadmap via GitHub Issues
Created 10 detailed GitHub issues covering: - Project activation and management UI (#1-2) - Worker node coordination and visualization (#3-4) - Automated GitHub repository scanning (#5) - Intelligent model-to-issue matching (#6) - Multi-model task execution system (#7) - N8N workflow integration (#8) - Hive-Bzzz P2P bridge (#9) - Peer assistance protocol (#10) Each issue includes detailed specifications, acceptance criteria, technical implementation notes, and dependency mapping. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <noreply@anthropic.com>
This commit is contained in:
171
frontend/node_modules/react-docgen/dist/utils/resolveToValue.js
generated
vendored
Normal file
171
frontend/node_modules/react-docgen/dist/utils/resolveToValue.js
generated
vendored
Normal file
@@ -0,0 +1,171 @@
|
||||
import { Scope, visitors } from '@babel/traverse';
|
||||
import getMemberExpressionRoot from './getMemberExpressionRoot.js';
|
||||
import getPropertyValuePath from './getPropertyValuePath.js';
|
||||
import { Array as toArray } from './expressionTo.js';
|
||||
import { shallowIgnoreVisitors } from './traverse.js';
|
||||
import getMemberValuePath, { isSupportedDefinitionType, } from './getMemberValuePath.js';
|
||||
import initialize from './ts-types/index.js';
|
||||
import getNameOrValue from './getNameOrValue.js';
|
||||
function findScopePath(bindingIdentifiers) {
|
||||
if (bindingIdentifiers && bindingIdentifiers[0]) {
|
||||
const resolvedParentPath = bindingIdentifiers[0].parentPath;
|
||||
if (resolvedParentPath.isImportDefaultSpecifier() ||
|
||||
resolvedParentPath.isImportSpecifier()) {
|
||||
let exportName;
|
||||
if (resolvedParentPath.isImportDefaultSpecifier()) {
|
||||
exportName = 'default';
|
||||
}
|
||||
else {
|
||||
const imported = resolvedParentPath.get('imported');
|
||||
if (imported.isStringLiteral()) {
|
||||
exportName = imported.node.value;
|
||||
}
|
||||
else if (imported.isIdentifier()) {
|
||||
exportName = imported.node.name;
|
||||
}
|
||||
}
|
||||
if (!exportName) {
|
||||
throw new Error('Could not detect export name');
|
||||
}
|
||||
const importedPath = resolvedParentPath.hub.import(resolvedParentPath.parentPath, exportName);
|
||||
if (importedPath) {
|
||||
return resolveToValue(importedPath);
|
||||
}
|
||||
}
|
||||
return resolveToValue(resolvedParentPath);
|
||||
}
|
||||
return null;
|
||||
}
|
||||
const explodedVisitors = visitors.explode({
|
||||
...shallowIgnoreVisitors,
|
||||
AssignmentExpression: {
|
||||
enter: function (assignmentPath, state) {
|
||||
const node = state.idPath.node;
|
||||
const left = assignmentPath.get('left');
|
||||
// Skip anything that is not an assignment to a variable with the
|
||||
// passed name.
|
||||
// Ensure the LHS isn't the reference we're trying to resolve.
|
||||
if (!left.isIdentifier() ||
|
||||
left.node === node ||
|
||||
left.node.name !== node.name ||
|
||||
assignmentPath.node.operator !== '=') {
|
||||
return assignmentPath.skip();
|
||||
}
|
||||
// Ensure the RHS doesn't contain the reference we're trying to resolve.
|
||||
const candidatePath = assignmentPath.get('right');
|
||||
if (candidatePath.node === node ||
|
||||
state.idPath.findParent((parent) => parent.node === candidatePath.node)) {
|
||||
return assignmentPath.skip();
|
||||
}
|
||||
state.resultPath = candidatePath;
|
||||
return assignmentPath.skip();
|
||||
},
|
||||
},
|
||||
});
|
||||
/**
|
||||
* Tries to find the last value assigned to `name` in the scope created by
|
||||
* `scope`. We are not descending into any statements (blocks).
|
||||
*/
|
||||
function findLastAssignedValue(path, idPath) {
|
||||
const state = { idPath };
|
||||
path.traverse(explodedVisitors, state);
|
||||
return state.resultPath ? resolveToValue(state.resultPath) : null;
|
||||
}
|
||||
/**
|
||||
* If the path is an identifier, it is resolved in the scope chain.
|
||||
* If it is an assignment expression, it resolves to the right hand side.
|
||||
* If it is a member expression it is resolved to it's initialization value.
|
||||
*
|
||||
* Else the path itself is returned.
|
||||
*/
|
||||
export default function resolveToValue(path) {
|
||||
if (path.isIdentifier()) {
|
||||
if ((path.parentPath.isClass() || path.parentPath.isFunction()) &&
|
||||
path.parentPath.get('id') === path) {
|
||||
return path.parentPath;
|
||||
}
|
||||
const binding = path.scope.getBinding(path.node.name);
|
||||
let resolvedPath = null;
|
||||
if (binding) {
|
||||
// The variable may be assigned a different value after initialization.
|
||||
// We are first trying to find all assignments to the variable in the
|
||||
// block where it is defined (i.e. we are not traversing into statements)
|
||||
resolvedPath = findLastAssignedValue(binding.scope.path, path);
|
||||
if (!resolvedPath) {
|
||||
const bindingMap = binding.path.getOuterBindingIdentifierPaths(true);
|
||||
resolvedPath = findScopePath(bindingMap[path.node.name]);
|
||||
}
|
||||
}
|
||||
else {
|
||||
// Initialize our monkey-patching of @babel/traverse 🙈
|
||||
initialize(Scope);
|
||||
const typeBinding = path.scope.getTypeBinding(path.node.name);
|
||||
if (typeBinding) {
|
||||
resolvedPath = findScopePath([typeBinding.identifierPath]);
|
||||
}
|
||||
}
|
||||
return resolvedPath || path;
|
||||
}
|
||||
else if (path.isVariableDeclarator()) {
|
||||
const init = path.get('init');
|
||||
if (init.hasNode()) {
|
||||
return resolveToValue(init);
|
||||
}
|
||||
}
|
||||
else if (path.isMemberExpression()) {
|
||||
const root = getMemberExpressionRoot(path);
|
||||
const resolved = resolveToValue(root);
|
||||
if (resolved.isObjectExpression()) {
|
||||
let propertyPath = resolved;
|
||||
for (const propertyName of toArray(path).slice(1)) {
|
||||
if (propertyPath && propertyPath.isObjectExpression()) {
|
||||
propertyPath = getPropertyValuePath(propertyPath, propertyName);
|
||||
}
|
||||
if (!propertyPath) {
|
||||
return path;
|
||||
}
|
||||
propertyPath = resolveToValue(propertyPath);
|
||||
}
|
||||
return propertyPath;
|
||||
}
|
||||
else if (isSupportedDefinitionType(resolved)) {
|
||||
const property = path.get('property');
|
||||
if (property.isIdentifier() || property.isStringLiteral()) {
|
||||
const memberPath = getMemberValuePath(resolved, property.isIdentifier() ? property.node.name : property.node.value);
|
||||
if (memberPath) {
|
||||
return resolveToValue(memberPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (resolved.isImportSpecifier() ||
|
||||
resolved.isImportDefaultSpecifier() ||
|
||||
resolved.isImportNamespaceSpecifier()) {
|
||||
const declaration = resolved.parentPath;
|
||||
// Handle references to namespace imports, e.g. import * as foo from 'bar'.
|
||||
// Try to find a specifier that matches the root of the member expression, and
|
||||
// find the export that matches the property name.
|
||||
for (const specifier of declaration.get('specifiers')) {
|
||||
const property = path.get('property');
|
||||
let propertyName;
|
||||
if (property.isIdentifier() || property.isStringLiteral()) {
|
||||
propertyName = getNameOrValue(property);
|
||||
}
|
||||
if (specifier.isImportNamespaceSpecifier() &&
|
||||
root.isIdentifier() &&
|
||||
propertyName &&
|
||||
specifier.node.local.name === root.node.name) {
|
||||
const resolvedPath = path.hub.import(declaration, propertyName);
|
||||
if (resolvedPath) {
|
||||
return resolveToValue(resolvedPath);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (path.isTypeCastExpression() ||
|
||||
path.isTSAsExpression() ||
|
||||
path.isTSTypeAssertion()) {
|
||||
return resolveToValue(path.get('expression'));
|
||||
}
|
||||
return path;
|
||||
}
|
||||
Reference in New Issue
Block a user