🌳
pt0/deployF/ossPathTransformF.mts
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
11 const replaceH = await getOssGlobalReplaceH()
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 }
23 return _transformers