diff options
Diffstat (limited to 'packages/integrations/sitemap/src/utils/parse-url.ts')
-rw-r--r-- | packages/integrations/sitemap/src/utils/parse-url.ts | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/packages/integrations/sitemap/src/utils/parse-url.ts b/packages/integrations/sitemap/src/utils/parse-url.ts new file mode 100644 index 000000000..f9189cf7d --- /dev/null +++ b/packages/integrations/sitemap/src/utils/parse-url.ts @@ -0,0 +1,39 @@ +export const parseUrl = ( + url: string, + defaultLocale: string, + localeCodes: string[], + base: string +) => { + if ( + !url || + !defaultLocale || + localeCodes.length === 0 || + localeCodes.some((key) => !key) || + !base + ) { + throw new Error('parseUrl: some parameters are empty'); + } + if (url.indexOf(base) !== 0) { + return undefined; + } + let s = url.replace(base, ''); + if (!s || s === '/') { + return { locale: defaultLocale, path: '/' }; + } + if (!s.startsWith('/')) { + s = '/' + s; + } + const a = s.split('/'); + const locale = a[1]; + if (localeCodes.some((key) => key === locale)) { + let path = a.slice(2).join('/'); + if (path === '//') { + path = '/'; + } + if (path !== '/' && !path.startsWith('/')) { + path = '/' + path; + } + return { locale, path }; + } + return { locale: defaultLocale, path: s }; +}; |