/** * Subject Resolver Implementation * * 统一的主体 URI 生成和解析 */ import type { PodTable } from '../schema'; import type { SubjectResolver, ResourceMode, ParsedSubject } from './types'; /** * 主体 URI 解析器实现 */ export declare class SubjectResolverImpl implements SubjectResolver { private podUrl; constructor(podUrl?: string); /** * 设置 Pod URL */ setPodUrl(podUrl: string): void; /** * 生成主体 URI */ resolve(table: PodTable, record: Record, index?: number): string; /** * 解析主体 URI */ parse(uri: string, table: PodTable): ParsedSubject | null; /** * 获取资源 URL (用于 HTTP 请求) */ getResourceUrl(subjectUri: string): string; /** * 判断资源模式 * * Document mode: 每条记录一个独立文件 (e.g., /data/users/alice.ttl) * Fragment mode: 所有记录共享一个文件,用 URI fragment 区分 (e.g., /data/tags.ttl#tag-1) */ getResourceMode(table: PodTable): ResourceMode; /** * 规范化路径用于比较 */ private normalizePath; /** * 获取默认的 subjectPattern * 与 PodTable.buildDefaultSubjectTemplate 保持一致。 * 默认 `id` 是 base-relative resource id,不追加 `.ttl` 或抽 fragment。 */ getDefaultPattern(_table: PodTable): string; /** * 生成内联对象的 URI (始终为 fragment) */ resolveInlineChild(parentSubject: string, columnName: string, value: Record, index: number): string; /** * 检查是否为单例模式 */ isSingleton(table: PodTable): boolean; /** * 获取有效的 pattern * * 只有用户显式提供 subjectTemplate 时才使用它, * 否则根据资源模式返回默认 pattern */ private getEffectivePattern; /** * 获取 base URL * * Document mode: 返回 containerPath (用于拼接 {id}.ttl) * Fragment mode: 返回 resourcePath (用于拼接 #{id}) */ private getBaseUrl; /** * 将路径转换为绝对 URL */ private toAbsoluteUrl; /** * 合并 base 和 pattern */ private combineBaseAndPattern; /** * 应用模板变量 */ private applyTemplate; private parseTemplateVariable; private slugifyValue; private applyTransforms; private extractTransformedId; /** * 创建时间上下文 */ private createTimeContext; /** * 生成回退 URI */ private generateFallbackUri; /** * 从 URI 提取 ID * * 两步解析: * 1. 先计算 relativePath = uri - baseUrl * 2. 再根据 subjectTemplate 反向解析出 {id} * * 例如: * - uri = "http://pod/users/alice.ttl#it", template = "{id}.ttl#it" → id = "alice" * - uri = "http://pod/tags.ttl#tag-1", template = "#{id}" → id = "tag-1" */ private extractId; /** * 从相对路径反向解析出 id * * 将模板转为正则表达式,提取 {id} 对应的值 * * @param relativePath 相对路径 (如 "alice.ttl#it") * @param template 模板 (如 "{id}.ttl#it") * @returns 提取的 id (如 "alice"),解析失败返回 null */ private extractIdFromTemplate; } //# sourceMappingURL=resolver.d.ts.map