{"version":3,"file":"path-utils.cjs","sources":["../../src/utils/path-utils.ts"],"sourcesContent":["interface PathParts {\n  readonly headingSlashes: string;\n  readonly content: string;\n  readonly trailingSlashes: string;\n  readonly hasHeadingSlash: boolean;\n  readonly hasTrailingSlash: boolean;\n}\n\nfunction parsePath(path: string): PathParts | null {\n  if (typeof path !== 'string' || !path || path === '') return null;\n\n  // Special case for root path\n  if (path === '/') {\n    return {\n      headingSlashes: '/',\n      content: '',\n      trailingSlashes: '',\n      hasHeadingSlash: true,\n      hasTrailingSlash: true,\n    };\n  }\n\n  let startIndex = 0;\n  let endIndex = path.length;\n\n  // Find leading slashes\n  while (startIndex < path.length && path[startIndex] === '/') {\n    startIndex++;\n  }\n\n  // Find trailing slashes\n  while (endIndex > startIndex && path[endIndex - 1] === '/') {\n    endIndex--;\n  }\n\n  const headingSlashes = path.substring(0, startIndex);\n  const content = path.substring(startIndex, endIndex);\n  const trailingSlashes = path.substring(endIndex);\n\n  return {\n    headingSlashes,\n    content,\n    trailingSlashes,\n    hasHeadingSlash: headingSlashes.length > 0,\n    hasTrailingSlash: trailingSlashes.length > 0,\n  };\n}\n\nexport function hasHeadingSlash(path: string): boolean {\n  if (path === '/') return true;\n\n  const parts = parsePath(path);\n  return parts?.hasHeadingSlash ?? false;\n}\n\nexport function hasTrailingSlash(path: string): boolean {\n  if (path === '/') return true;\n\n  const parts = parsePath(path);\n  return parts?.hasTrailingSlash ?? false;\n}\n\nexport function addHeadingSlash(path: string): string {\n  if (path === '/') return path;\n  if (path === '') return '/';\n\n  const parts = parsePath(path);\n  if (!parts?.hasHeadingSlash) {\n    return `/${path}`;\n  }\n  return path;\n}\n\nexport function addTrailingSlash(path: string): string {\n  if (path === '/') return path;\n  if (path === '') return '/';\n\n  const parts = parsePath(path);\n  if (!parts?.hasTrailingSlash) {\n    return `${path}/`;\n  }\n  return path;\n}\n\nexport function removeHeadingSlash(path: string): string {\n  if (path === '/') return path;\n  if (path === '') return path;\n\n  const parts = parsePath(path);\n  if (!parts?.hasHeadingSlash) return path;\n\n  // Special case for '//' -> '/'\n  if (path === '//') return '/';\n\n  // Remove heading slashes and return content + trailing slashes\n  return parts.content + parts.trailingSlashes;\n}\n\nexport function removeTrailingSlash(path: string): string {\n  if (path === '/') return path;\n  if (path === '') return path;\n\n  const parts = parsePath(path);\n  if (parts == null) return path;\n\n  // Return heading slashes + content (without trailing slashes)\n  return parts.headingSlashes + parts.content;\n}\n\n/**\n * A short-hand method to add heading slash and remove trailing slash.\n */\nexport function normalizePath(path: string): string {\n  if (typeof path !== 'string' || path === '' || path === '/') {\n    return '/';\n  }\n\n  const parts = parsePath(path);\n  if (parts == null) {\n    return '/';\n  }\n  return `/${parts.content}`;\n}\n\nexport function attachTitleHeader(path: string): string {\n  return `# ${path}`;\n}\n\n/**\n * If the pagePath is top page path, eliminate the pageId from the url path.\n */\nexport function returnPathForURL(path: string, id: string): string {\n  if (path === '/') {\n    return path;\n  }\n\n  return addHeadingSlash(id);\n}\n\n/**\n * Get the parent path of the specified path.\n */\nexport function getParentPath(path: string): string {\n  return normalizePath(path.split('/').slice(0, -1).join('/'));\n}\n"],"names":["parsePath","path","startIndex","endIndex","headingSlashes","content","trailingSlashes","hasHeadingSlash","parts","hasTrailingSlash","addHeadingSlash","addTrailingSlash","removeHeadingSlash","removeTrailingSlash","normalizePath","attachTitleHeader","returnPathForURL","id","getParentPath"],"mappings":"gFAQA,SAASA,EAAUC,EAAgC,CACjD,GAAI,OAAOA,GAAS,UAAY,CAACA,GAAQA,IAAS,GAAW,OAAA,KAG7D,GAAIA,IAAS,IACJ,MAAA,CACL,eAAgB,IAChB,QAAS,GACT,gBAAiB,GACjB,gBAAiB,GACjB,iBAAkB,EACpB,EAGF,IAAIC,EAAa,EACbC,EAAWF,EAAK,OAGpB,KAAOC,EAAaD,EAAK,QAAUA,EAAKC,CAAU,IAAM,KACtDA,IAIF,KAAOC,EAAWD,GAAcD,EAAKE,EAAW,CAAC,IAAM,KACrDA,IAGF,MAAMC,EAAiBH,EAAK,UAAU,EAAGC,CAAU,EAC7CG,EAAUJ,EAAK,UAAUC,EAAYC,CAAQ,EAC7CG,EAAkBL,EAAK,UAAUE,CAAQ,EAExC,MAAA,CACL,eAAAC,EACA,QAAAC,EACA,gBAAAC,EACA,gBAAiBF,EAAe,OAAS,EACzC,iBAAkBE,EAAgB,OAAS,CAC7C,CACF,CAEO,SAASC,EAAgBN,EAAuB,CACjD,GAAAA,IAAS,IAAY,MAAA,GAEnB,MAAAO,EAAQR,EAAUC,CAAI,EAC5B,OAAOO,GAAA,YAAAA,EAAO,kBAAmB,EACnC,CAEO,SAASC,EAAiBR,EAAuB,CAClD,GAAAA,IAAS,IAAY,MAAA,GAEnB,MAAAO,EAAQR,EAAUC,CAAI,EAC5B,OAAOO,GAAA,YAAAA,EAAO,mBAAoB,EACpC,CAEO,SAASE,EAAgBT,EAAsB,CAChD,GAAAA,IAAS,IAAY,OAAAA,EACrB,GAAAA,IAAS,GAAW,MAAA,IAElB,MAAAO,EAAQR,EAAUC,CAAI,EACxB,OAACO,GAAA,MAAAA,EAAO,gBAGLP,EAFE,IAAIA,CAAI,EAGnB,CAEO,SAASU,EAAiBV,EAAsB,CACjD,GAAAA,IAAS,IAAY,OAAAA,EACrB,GAAAA,IAAS,GAAW,MAAA,IAElB,MAAAO,EAAQR,EAAUC,CAAI,EACxB,OAACO,GAAA,MAAAA,EAAO,iBAGLP,EAFE,GAAGA,CAAI,GAGlB,CAEO,SAASW,EAAmBX,EAAsB,CAEnD,GADAA,IAAS,KACTA,IAAS,GAAW,OAAAA,EAElB,MAAAO,EAAQR,EAAUC,CAAI,EACxB,OAACO,GAAA,MAAAA,EAAO,gBAGRP,IAAS,KAAa,IAGnBO,EAAM,QAAUA,EAAM,gBANOP,CAOtC,CAEO,SAASY,EAAoBZ,EAAsB,CAEpD,GADAA,IAAS,KACTA,IAAS,GAAW,OAAAA,EAElB,MAAAO,EAAQR,EAAUC,CAAI,EACxB,OAAAO,GAAS,KAAaP,EAGnBO,EAAM,eAAiBA,EAAM,OACtC,CAKO,SAASM,EAAcb,EAAsB,CAClD,GAAI,OAAOA,GAAS,UAAYA,IAAS,IAAMA,IAAS,IAC/C,MAAA,IAGH,MAAAO,EAAQR,EAAUC,CAAI,EAC5B,OAAIO,GAAS,KACJ,IAEF,IAAIA,EAAM,OAAO,EAC1B,CAEO,SAASO,EAAkBd,EAAsB,CACtD,MAAO,KAAKA,CAAI,EAClB,CAKgB,SAAAe,EAAiBf,EAAcgB,EAAoB,CACjE,OAAIhB,IAAS,IACJA,EAGFS,EAAgBO,CAAE,CAC3B,CAKO,SAASC,EAAcjB,EAAsB,CAC3C,OAAAa,EAAcb,EAAK,MAAM,GAAG,EAAE,MAAM,EAAG,EAAE,EAAE,KAAK,GAAG,CAAC,CAC7D"}