- 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>
57 lines
1.5 KiB
TypeScript
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(/:$/, ''),
|
|
};
|
|
}
|