来自 files API、derived ref、Host payload 或其他不可信边界的候选路径。
值是满足协议语法的字符串时返回 true,并将 TypeScript 类型收窄为 string;否则返回 false。
该 guard 直接检查输入字符串,规则如下:
/ 开头或结尾,因此 /absolute、nested/ 与 / 失败。\\、U+0000-U+001F 控制字符或 U+007F;Windows 风格分隔符不会被转换。/ 分段后,每段必须非空且不能精确等于 . 或 ..,因此连续 /、nested/./file 与
nested/../file 失败。只拒绝完整的 dot segment:.env、..cache、file. 与包含普通点号的名称都可通过;单独的 '.'
本身失败。isMiniProgramDirectoryRef 在外层显式允许 relativePath: '.' 表示 root 目录自身,
isMiniProgramFileRef 则始终要求本 guard 通过,因此文件引用不能指向 root 自身。
该函数不 trim 空白、不 URL/percent decode、不 Unicode normalize、不折叠分隔符,也不应用平台保留名或
字符规则。空白段、%2e%2e、全角字符和 C:/file 等只要满足上述原始字符串规则就可能通过;路径长度、
段长度和段数量也没有在此限制。调用方不能把“通过”解释为操作系统级 canonical path。
返回 true 只证明语法可作为协议逻辑相对路径,不证明目标存在、末段是文件还是目录、root/handle 属于
当前 session/origin、filesystem 权限已启用、访问 mode 允许当前操作或 Host 支持该 capability。
normalizeRelativePath() 这类 SDK/Runtime helper 只是复用本 predicate:合法时原样返回同一个字符串,非法时
转成对应 SDK/bridge 错误;它不会进一步规范化路径。
import { isMiniProgramRelativePath } from '@heybox/hb-sdk/protocol';
const paths: unknown[] = [
'data.json',
'nested/data.json',
'.env',
'.',
'../secret',
'nested//file',
'nested\\file',
];
const validPaths = paths.filter(isMiniProgramRelativePath);
// ['data.json', 'nested/data.json', '.env']
console.log(validPaths);
'.' 的 derived 目录引用。file() / directory() 的 SDK 路径入口。files.sandbox 逻辑路径能力。
判断未知值是否为以
/分隔的规范逻辑相对路径。