zioinfo-mail/app/node_modules/expo-linking/src/createURL.web.ts
DESKTOP-TKLFCPR\ython 11c670f2a0 refactor: 101.79.17.164 → zioinfo.co.kr 전체 도메인 변환 + Manager UI 배포
- 37개 파일 IP → zioinfo.co.kr 치환 (소스/매뉴얼/설정/하네스)
- Manager DrConsole/NetworkConsole/CsapConsole 빌드 + /var/www/manager/ 배포
- 테스트: Manager HTTP 200, ITSM 신규 API 7개 전체 200

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-31 10:09:17 +09:00

57 lines
1.5 KiB
TypeScript

import { CreateURLOptions, ParsedURL } from './Linking.types';
export function createURL(path: string, { queryParams = {} }: CreateURLOptions = {}): string {
if (typeof window === 'undefined') return '';
const url = new URL(path, window.location.origin);
Object.entries(queryParams).forEach(([key, value]) => {
if (typeof value === 'string') {
url.searchParams.set(key, encodeURIComponent(value));
} else if (value != null) {
url.searchParams.set(
key,
// @ts-expect-error: browser supports using array
value
);
}
});
return url.toString().replace(/\/$/, '');
}
export function parse(url: string): ParsedURL {
let parsed: URL;
try {
parsed = new URL(url);
} catch {
if (typeof window === 'undefined') {
return {
hostname: null,
path: url,
queryParams: {},
scheme: null,
};
}
return {
hostname: 'localhost',
path: url,
queryParams: {},
scheme: 'http',
};
}
const queryParams: Record<string, string> = {};
parsed.searchParams.forEach((value, key) => {
queryParams[key] = decodeURIComponent(value);
});
return {
hostname: parsed.hostname || null,
// TODO: We should probably update native to follow the default URL behavior closer.
path:
!parsed.hostname && !parsed.pathname
? null
: parsed.pathname === ''
? null
: parsed.pathname.replace(/^\//, ''),
queryParams,
scheme: parsed.protocol.replace(/:$/, ''),
};
}