静态 JavaScript 路由清单¶
analyze_javascript_application 和 analyze_web_bundle 在保留现有图和端点观测结果的同时,还会维护一个共享的 route_inventory。该清单回答以下问题:提供的代码暗示了哪些路由模式、每个模式来自何处,以及哪些部分仍然未知。它从不请求路由、执行脚本、展开站点地图或建立可达性。
在任一 MCP 分析调用中选择一个紧凑视图:
{
"detail": "summary",
"view": {
"kind": "javascript-routes",
"collection": "routes",
"where": { "path_prefix": "/reports" },
"fields": ["path", "classification", "confidence"],
"limit": 20
}
}
在该调用中保留原始分析输入。对于 CLI,将相同的选择作为 --view '<JSON>' --detail summary --evidence_output routes.json 传入。完整的 Evidence 包会被写出,且不会覆盖现有文件。未选择视图时的交付仍保留现有的完整结果。web-bundle 摘要需要显式指定路由视图;应用程序摘要也支持在省略 view 时使用现有的常规摘要。
在同一连接上,将返回的 normalized_result.parent_evidence_id 与 inspect_analysis_view 一起使用。CLI 导出的包可以用 inspect-evidence-bundle 重新打开;其 records 包含完整的 Evidence。要使用 inspect_analysis_view 的 evidence-file 源,请将选定的父记录提取到单独的本地 Evidence JSON 文件中(该源接受一条 Evidence 记录,而不是一个包)。视图不会重新打开源文件,也不会重新连接浏览器。没有 route_inventory 的历史 Evidence 属于未测量状态,而不是空路由集合。
集合包括 summary、routes、occurrences、sources 和 unknowns。所有行集合都支持精确批量 where.ids、字段选择、offset 和 limit。显式的空过滤器数组不匹配任何内容。路由还支持精确的 paths、字面量 path_prefix、classifications、mechanisms 和 min_confidence;occurrences 支持 route_ids、source_ids 和 mechanisms;sources 支持 keys 和 statuses;unknowns 支持 source_ids 和 kinds。请遵循 coverage.next_offset,直到 coverage.exhausted;页面可能会在 1 MiB 序列化视图预算处提前停止。过大的不可分割事实会返回资源错误,并携带保留的父 Evidence ID。
模式 ID 绑定精确路径。源 ID 绑定源键、路径、原始 URL、内容摘要、容器摘要,以及任何保留的 Next 源适用性上下文(包括所属包摘要)。occurrences 标识源位置处的检测器机制;一个位置可能支持多种机制。source_count 统计不同源的数量。查找 ID 使用 SHA-256 的 128 位;完整内容和清单摘要仍为 SHA-256。字段选择始终保留行标识和必要的溯源信息。本页去重后的 sources 表包含返回行所引用的源描述符。当独立的支持证据很重要时,请按路由 ID 检索全部 occurrences。源范围使用基于 1 的行号和基于 0 的 UTF-16 列,结束位置不包含在内;仅包含文件名的发现不会生成虚构的 AST 范围。
共享解析器处理字面量路由调用、嵌套路由对象、具有显式推断属性名回退的类型化 _$ 树、Next App Router 页面路径和导航目标。它遵循稳定的词法绑定,并让未解析的父节点、变更、展开和动态字段保持显式。索引路由标志使用与路径字段相同的读取时取值边界:被擦除的类型包装器和已初始化的稳定布尔别名保留 true/false;未初始化或未解析的标志保留解释未知,而不会静默消失。选定的路由构建器根拥有其配置,即使发生变更使其值无法被信任也是如此。普通包装器键不会成为路由祖先。未绑定类型子树缺失的外部祖先保持未知,而非被臆造出来。通用 Next 运行时路径常量需要一个由所提供源中的结构或导航候选支持的顶级应用段。这限制了框架文件系统噪声,同时使不支持的候选保持未知。解析器共享现有的 AST 遍历和词法索引。
计算表达式、模块引用的字面量片段,以及由 Next 解释所拥有的页面形态路径,不会同时成为通用路由常量。选定的 getter 结果保留共享语义所有者的分配标识;有限选择可以获取其查询数据,而扩大化或循环的选择会在请求它们的解释中保留未知。
Next 页面转换接收显式源上下文。对于本地源文件,共享 JSON 所有者首先在最近的所属包中建立声明的 next 依赖。然后,被纳入清单的目录会按照 Next 的根选择优先选择该包的 app,其次才是 src/app。只有所选目录下的文件才提供源页面支持。默认的 .next/static/chunks/app 输出从同一包所有者接收独立的已编译目录上下文;自定义构建目录仍未被建模。Pages Router 文件、无关组件和嵌套包并不会仅仅因为其路径包含 app 就继承该根。如果缺少包/框架证据,页面形态源路径仍保持解释未知。每个页面形态源都保留其 next_app_context 和包标识,从而使此推导保持可检查。
捕获的脚本 URL 使用 /_next/static/chunks/app/ 资产边界,与本地包证据无关。源字面量使用已识别的 Next 运行时上下文;导入、导出和直接调用参数本身并不声明页面。解析器在解释保留的模块字面量之前完成其运行时标记扫描,因此标记位置不会改变结果。仅凭匹配的文件名后缀不能确立 App Router 所有权。
Next 动态路由段映射到 :id、:slug+ 或 :slug*;分组和并行插槽不贡献 URL 段。拦截路由保持未解析。/_next/ 之前的前缀是推断的路由基址:assetPrefix 可能与路由基址不同。每个受影响的事件都保留 unprefixed_path、inferred_base_path 和低置信度。system 分类明确是一种路径名启发式;page 使用页面文件或结构化/类型化配置支持。仅传递名称的 route/addRoute 调用保持为 unknown,因为它们也可以注册服务器 API。
Next 页面源段在转换为路由模式时保留其文件名拼写。Next 的 page-path conversion 移除页面扩展名和 index 尾部,且不对段进行 URI 解码,因此普通的百分号序列不会被解码:%61 和 a 仍是独立的候选,字面量 % 会被保留。其 App pathname normalizer 专门应用 underscore normalizer,后者将 %5F 映射为 _;私有文件夹检查在映射该转义之前应用于源拼写。在对 chunk URL 进行分类时,REA 读取其路径名,然后应用这些相同的 Next 特有规则。这是静态源路径解释,而非浏览器请求路径解码或可达性判断。
已知的捕获遗漏仍内联在 summary.reported_capture_omissions 中,并可作为 capture-omission 类型的 unknowns 查询。每条记录都保留一个稳定的 gap ID、其脚本记录/脚本源单元以及报告的数量(未知时为 null)。它们不会编造缺失的脚本标识或源范围。
计数描述所提供代码源中去重后的模式。它们并非完整应用程序或捕获覆盖率的分母。特别是,仅服务端、懒加载、不可访问或未选中的源可能会缺失。coverage.application_routes 始终保持为 unknown;解析和候选枚举有各自的完整性。静态工作和事实接纳共享现有的每源 8 MiB 传输上限,根清单具有 8 MiB 接纳预算。耗尽时会保留带有显式容量的前缀;序列化所有者还会在旧事实实际留下的空间内接纳路由事实。result-bytes 容量保留了先前的工作容量原因;如果连该信封也无法容纳,则可选路由方面保持未测量。这些是核算边界,并非声称总进程内存为 8 MiB。
投影只减少交付,而不减少分析工作。保留的不可变 Evidence 可以通过具有快照生命周期的弱缓存复用已验证的表;每次查询都会检查主体身份。不会将任何实时状态或源内容缓存为当前状态。当现有的源选择和资源控制与调查匹配时,请使用它们,并保持其部分覆盖可见。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 rea2/rea