import type { CompilerInterfaceContext, Expression, Program, Span, ValueType } from "@velarscript/compiler/extension"; /** * `p"..."` 在编译期得到的稳定结构。运行时只接收这个结构,不再重新解释 * 路由字符串;分析器、代码生成器、路由器和 OpenAPI 因而共享同一份事实。 */ export interface CompiledRoutePattern { readonly kind: "node-route-pattern"; readonly definition: string; readonly pathname: string; readonly path: readonly RoutePatternCapture[]; readonly query: readonly RoutePatternCapture[]; } export interface RoutePatternCapture { /** 处理函数中 `path.params/query` 使用的字段名。 */ readonly name: string; /** URL 中实际出现的名字;查询参数允许它与字段名不同。 */ readonly wireName: string; /** 是否显式写了 `wireName={field:type}`,同名时也必须保留原始写法。 */ readonly explicitWireName: boolean; readonly typeName: string; readonly optional: boolean; /** 声明模块解析后的类型事实;只写入跨模块接口,不进入生成的 JavaScript。 */ readonly resolvedType?: ValueType; readonly span: Span; readonly typeSpan: Span; } export interface RoutePatternIssue { readonly message: string; readonly span: Span; } export type RoutePatternStaticValue = CompiledRoutePattern | { readonly kind: "node-route-pattern-object"; readonly properties: Readonly>; }; /** * 把一个路由字面量编译成路径与查询两组捕获。这里刻意只实现路由协议, * 不引入通用表达式 DSL:一个 `{name:type?}` 就是一项明确输入契约。 */ export declare function compileRoutePattern(definition: string, contentStart?: number): { readonly pattern: CompiledRoutePattern; readonly issues: readonly RoutePatternIssue[]; }; export declare function isCompiledRoutePattern(value: unknown): value is CompiledRoutePattern; export declare function isRoutePatternStaticValue(value: unknown): value is RoutePatternStaticValue; /** * 跨模块缓存身份只取协议内容,不取源码 Span。对象键按码点排序,因此同一目录 * 不会因为对象构造顺序或文件位置变化而产生虚假的接口漂移。 */ export declare function routePatternStaticIdentity(value: unknown): string; /** 计算 `const` 路由目录;成员读取与对象展开都在编译期完成。 */ export declare function evaluateRoutePatternExpression(expression: Expression, values: ReadonlyMap): RoutePatternStaticValue | null; export declare function collectRoutePatternValues(program: Program, imported?: ReadonlyMap): ReadonlyMap; export declare function exportedRoutePatternValues(program: Program, context?: CompilerInterfaceContext): ReadonlyMap; //# sourceMappingURL=route-pattern.d.ts.map