展开 /expand
/expand 在解析前展开受支持的模板与纯 wikitext 解析器函数。它加载解析器,不加载 React。展开是异步阶段。
签名
解析函数
本节把 resolveTemplate 回调称为解析函数。
null/undefined表示模板不存在;空字符串是合法模板。- 同一标题在一次展开中只解析一次;同一
title必须返回稳定源码。 callerTitle只作为上下文,不参与缓存键。invocation指向original.source中的顶层调用范围;嵌套请求复用所属顶层范围。- 远程获取由解析函数完成;库不发起网络请求。
结果
original是原始源码的解析快照。document是展开后源码的解析快照,可直接交给prepareWikitext。status:complete:全部调用已展开。partial:存在保留的调用或未解析依赖。fallback:最终源码解析失败,返回原始快照。
expansion.diagnostics的坐标基于original.source;document.diagnostics合并最终解析诊断与换算后的展开诊断。
展开内容
支持模板嵌入与参数替换、include 标签、#if、#ifeq、#switch、#iferror、{{!}}、{{=}} 与隐式换行。
默认保留并产生诊断的调用:
#invoke与 Lua。subst等嵌入修饰符。#ifexist、#time等依赖站点状态或外部运行环境的函数。
细节见模板展开指南。
预算与失败
- 单次调用超长:保留调用并记录
LENGTH_BUDGET_EXCEEDED。 - 连保留源码都超过
maxExpandedLength:抛EXPANSION_TOO_LARGE。 strict: true下预算超限:抛EXPANSION_BUDGET_EXCEEDED。- 默认模式下最终解析失败:退回原始有效快照,
status: "fallback"。 - 取消时,Promise 以
WikitextExpandError拒绝,错误码为ABORTED,原始原因保存在cause中。
parseOptions.maxSourceLength、模板源码长度与 maxExpandedLength 分别生效;最终解析使用实际生效的 maxExpandedLength。
错误
常见错误码:
与视图组合
展开后的文档已经是解析结果,不必再次解析。未展开而保留的调用仍按模板、函数或参数占位渲染。