ruoyi-plus-soybean/src/utils/service.ts
2024-09-12 16:28:28 +08:00

76 lines
1.9 KiB
TypeScript

import json5 from 'json5';
/**
* Create service config by current env
*
* @param env The current env
*/
export function createServiceConfig(env: Env.ImportMeta) {
const { VITE_SERVICE_BASE_URL, VITE_OTHER_SERVICE_BASE_URL, VITE_APP_BASE_API, VITE_APP_WEBSOCKET } = env;
let other = {} as Record<App.Service.OtherBaseURLKey, string>;
try {
if (VITE_OTHER_SERVICE_BASE_URL) {
other = json5.parse(VITE_OTHER_SERVICE_BASE_URL);
}
} catch (error) {
// eslint-disable-next-line no-console
console.error('VITE_OTHER_SERVICE_BASE_URL is not a valid json5 string');
}
const httpConfig: App.Service.SimpleServiceConfig = {
baseURL: VITE_SERVICE_BASE_URL,
other
};
const otherHttpKeys = Object.keys(httpConfig.other) as App.Service.OtherBaseURLKey[];
const otherConfig: App.Service.OtherServiceConfigItem[] = otherHttpKeys.map(key => {
return {
key,
ws: false,
baseURL: httpConfig.other[key],
proxyPattern: createProxyPattern(key)
};
});
const config: App.Service.ServiceConfig = {
baseURL: httpConfig.baseURL,
ws: VITE_APP_WEBSOCKET === 'Y',
proxyPattern: VITE_APP_BASE_API,
other: otherConfig
};
return config;
}
/**
* get backend service base url
*
* @param env - the current env
* @param isProxy - if use proxy
*/
export function getServiceBaseURL(env: Env.ImportMeta, isProxy: boolean) {
const { baseURL, other, proxyPattern } = createServiceConfig(env);
const otherBaseURL = {} as Record<App.Service.OtherBaseURLKey, string>;
other.forEach(item => {
otherBaseURL[item.key] = isProxy ? item.proxyPattern : item.baseURL;
});
return {
baseURL: isProxy ? proxyPattern : (baseURL || '') + proxyPattern,
otherBaseURL
};
}
/**
* Get proxy pattern of backend service base url
*
* @param key If not set, will use the default key
*/
function createProxyPattern(key: App.Service.OtherBaseURLKey) {
return `/proxy-${key}`;
}