3export type PathTransformers = { forward: (p: string) => string, reverse: (p: string) => string, hasSensitive: (p: string) => boolean } 5const identityTransformers: PathTransformers = { forward: (p) => p, reverse: (p) => p, hasSensitive: () => false } 7let _transformers: PathTransformers | null = null 9export const getOssPathTransformers = async (): Promise<PathTransformers> => { 10 if (_transformers) return _transformers 12 if (!replaceH) { _transformers = identityTransformers; return _transformers } 14 const entries = Object.entries(replaceH).filter(([, safe]) => safe).sort((a, b) => b[0].length - a[0].length) 15 const reverseEntries = entries.map(([sens, safe]) => [safe, sens] as const).sort((a, b) => b[0].length - a[0].length) 17 const sensitiveStrs = entries.map(([sens]) => sens) 18 const forward = (p: string) => { for (const [sens, safe] of entries) p = p.replaceAll(sens, safe); return p } 19 const reverse = (p: string) => { for (const [safe, sens] of reverseEntries) p = p.replaceAll(safe, sens); return p } 20 const hasSensitive = (p: string) => sensitiveStrs.some(s => p.includes(s)) 22 _transformers = { forward, reverse, hasSensitive }