summaryrefslogtreecommitdiff
path: root/packages/integrations/sitemap/src/utils/parse-url.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/integrations/sitemap/src/utils/parse-url.ts')
-rw-r--r--packages/integrations/sitemap/src/utils/parse-url.ts39
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 };
+};