fix: percent-encoding for files with %, contentIndex for non-latin chars (closes #397, closes #399)
| | |
| | | const defaultOptions: Options = { |
| | | enableSiteMap: true, |
| | | enableRSS: true, |
| | | includeEmptyFiles: false, |
| | | includeEmptyFiles: true, |
| | | } |
| | | |
| | | function generateSiteMap(cfg: GlobalConfiguration, idx: ContentIndex): string { |
| | |
| | | dest, |
| | | transformOptions, |
| | | ) |
| | | const url = new URL(dest, `https://base.com/${curSlug}`) |
| | | |
| | | // url.resolve is considered legacy |
| | | // WHATWG equivalent https://nodejs.dev/en/api/v18/url/#urlresolvefrom-to |
| | | const url = new URL(dest, `resolve://${curSlug}`) |
| | | const canonicalDest = url.pathname |
| | | const [destCanonical, _destAnchor] = splitAnchor(canonicalDest) |
| | | const simple = decodeURI(simplifySlug(destCanonical as FullSlug)) as SimpleSlug |
| | | |
| | | // need to decodeURIComponent here as WHATWG URL percent-encodes everything |
| | | const simple = decodeURIComponent( |
| | | simplifySlug(destCanonical as FullSlug), |
| | | ) as SimpleSlug |
| | | outgoing.add(simple) |
| | | } |
| | | |
| | |
| | | |
| | | let slug = withoutFileExt |
| | | .split("/") |
| | | .map((segment) => segment.replace(/\s/g, "-")) // slugify all segments |
| | | .map((segment) => segment.replace(/\s/g, "-").replace(/%/g, "-percent")) // slugify all segments |
| | | .join("/") // always use / as sep |
| | | .replace(/\/$/, "") // remove trailing slash |
| | | |