UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

101 lines 14.2 kB
/** * @packageDocumentation * @module api */ import { ifExist, toKeys } from '../core/utils/public-api'; import { WatchEvent, } from './types'; export const EMPTY_API_PREFIX_PARTS = { apiGroup: '', apiVersion: '', }; export const getApiPrefixParts = (apiPrefix) => { if (!apiPrefix) { return EMPTY_API_PREFIX_PARTS; } const parts = apiPrefix.split('/'); return parts.length > 1 ? { apiGroup: parts[0], apiVersion: parts[1] } : { apiGroup: '', apiVersion: parts[0] }; }; export const normalizeApiGroup = (apiGroup) => !apiGroup || apiGroup === 'core' ? '' : apiGroup; export const normalizeDefinition = (definition) => ({ type: definition.type, apiGroup: normalizeApiGroup(definition.apiGroup), apiVersion: definition.apiVersion || 'v1', }); function isDefinition(definition) { return typeof definition === 'object'; } export const createResourceDefinitions = (RESOURCE_DEFINITIONS) => ({ RESOURCE_DEFINITIONS, RESOURCE_TYPES: toKeys(RESOURCE_DEFINITIONS), getYamlApiVersion(definition) { if (!isDefinition(definition)) { definition = RESOURCE_DEFINITIONS[definition]; } const { apiGroup, apiVersion } = normalizeDefinition(definition); return ((!apiGroup || apiGroup === 'core' ? '' : apiGroup + '/') + apiVersion); }, }); export const getMetadataHeaders = (isList, customAccept) => ({ Accept: customAccept || `application/json;as=PartialObjectMetadata${ifExist(isList, 'List')};g=meta.k8s.io;v=v1,application/json`, }); export function reduceWatchEvents(events) { return events.reduce((acc, curr) => { if (!isResourceEvent(curr)) { acc.push(curr); return acc; } const prevIndex = findPrevIndex(acc, curr); if (prevIndex >= 0) { const prev = acc[prevIndex]; const nextEventType = calcNextEventType(prev.type, curr.type); acc.splice(prevIndex, 1); acc.push({ type: nextEventType, object: curr.object, }); } else { acc.push(curr); } return acc; }, []); } export function isResourceEvent(event) { return event.type !== WatchEvent.Bookmark && event.type !== WatchEvent.Error; } function findPrevIndex(events, curr) { for (let i = events.length - 1; i >= 0; i--) { const prev = events[i]; if (isResourceEvent(prev) && prev.object?.metadata?.uid === curr.object?.metadata?.uid) { return i; } } return -1; } function calcNextEventType(prev, next) { switch (`${prev} ==> ${next}`) { case `${WatchEvent.Added} ==> ${WatchEvent.Modified}`: { // 下游可能会重复收到 ADDED 事件 return WatchEvent.Added; } case `${WatchEvent.Added} ==> ${WatchEvent.Deleted}`: { // 下游可能在未收到 ADDED 事件时直接收到 DELETED 事件 return WatchEvent.Deleted; } case `${WatchEvent.Modified} ==> ${WatchEvent.Modified}`: { return WatchEvent.Modified; } case `${WatchEvent.Modified} ==> ${WatchEvent.Deleted}`: { return WatchEvent.Deleted; } default: { console.warn('Unexpected state transition:', `${prev} ==> ${next}`); return next; } } } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvY29tbW9uL3NyYy9hcGkvaGVscGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFRSCxPQUFPLEVBQUUsT0FBTyxFQUFFLE1BQU0sRUFBRSxNQUFNLDBCQUEwQixDQUFDO0FBRTNELE9BQU8sRUFJTCxVQUFVLEdBQ1gsTUFBTSxTQUFTLENBQUM7QUFFakIsTUFBTSxDQUFDLE1BQU0sc0JBQXNCLEdBQUc7SUFDcEMsUUFBUSxFQUFFLEVBQUU7SUFDWixVQUFVLEVBQUUsRUFBRTtDQUNOLENBQUM7QUFFWCxNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUMvQixTQUFpQixFQUM4QixFQUFFO0lBQ2pELElBQUksQ0FBQyxTQUFTLEVBQUUsQ0FBQztRQUNmLE9BQU8sc0JBQXNCLENBQUM7SUFDaEMsQ0FBQztJQUNELE1BQU0sS0FBSyxHQUFzQixTQUFTLENBQUMsS0FBSyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0lBQ3RELE9BQU8sS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDO1FBQ3JCLENBQUMsQ0FBQyxFQUFFLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsVUFBVSxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRTtRQUM5QyxDQUFDLENBQUMsRUFBRSxRQUFRLEVBQUUsRUFBRSxFQUFFLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUM3QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxpQkFBaUIsR0FBRyxDQUFDLFFBQWlCLEVBQUUsRUFBRSxDQUNyRCxDQUFDLFFBQVEsSUFBSSxRQUFRLEtBQUssTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQztBQUVuRCxNQUFNLENBQUMsTUFBTSxtQkFBbUIsR0FBRyxDQUNqQyxVQUFhLEVB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UUFBUSxJQUFJLEVBQUUsQ0FBQyxDQUFDO1lBQ3BFLE9BQU8sSUFBSSxDQUFDO1FBQ2QsQ0FBQztJQUNILENBQUM7QUFDSCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAcGFja2FnZURvY3VtZW50YXRpb25cbiAqIEBtb2R1bGUgYXBpXG4gKi9cblxuaW1wb3J0IHtcbiAgRGVlcFJlYWRvbmx5LFxuICBLZXlzLFxuICBLdWJlcm5ldGVzUmVzb3VyY2UsXG4gIFZhbHVlT2YsXG59IGZyb20gJy4uL2NvcmUvcHVibGljLWFwaSc7XG5pbXBvcnQgeyBpZkV4aXN0LCB0b0tleXMgfSBmcm9tICcuLi9jb3JlL3V0aWxzL3B1YmxpYy1hcGknO1xuXG5pbXBvcnQge1xuICBLOHNSZXNvdXJjZURlZmluaXRpb24sXG4gIEs4c1Jlc291cmNlRGVmaW5pdGlvbnMsXG4gIFdhdGNoQVBJUmVzcG9uc2UsXG4gIFdhdGNoRXZlbnQsXG59IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgY29uc3QgRU1QVFlfQVBJX1BSRUZJWF9QQVJUUyA9IHtcbiAgYXBpR3JvdXA6ICcnLFxuICBhcGlWZXJzaW9uOiAnJyxcbn0gYXMgY29uc3Q7XG5cbmV4cG9ydCBjb25zdCBnZXRBcGlQcmVmaXhQYXJ0cyA9IChcbiAgYXBpUHJlZml4OiBzdHJpbmcsXG4pOiBPbWl0PFJlcXVpcmVkPEs4c1Jlc291cmNlRGVmaW5pdGlvbj4sICd0eXBlJz4gPT4ge1xuICBpZiAoIWFwaVByZWZpeCkge1xuICAgIHJldHVybiBFTVBUWV9BUElfUFJFRklYX1BBUlRTO1xuICB9XG4gIGNvbnN0IHBhcnRzOiByZWFkb25seSBzdHJpbmdbXSA9IGFwaVByZWZpeC5zcGxpdCgnLycpO1xuICByZXR1cm4gcGFydHMubGVuZ3RoID4gMVxuICAgID8geyBhcGlHcm91cDogcGFydHNbMF0sIGFwaVZlcnNpb246IHBhcnRzWzFdIH1cbiAgICA6IHsgYXBpR3JvdXA6ICcnLCBhcGlWZXJzaW9uOiBwYXJ0c1swXSB9O1xufTtcblxuZXhwb3J0IGNvbnN0IG5vcm1hbGl6ZUFwaUdyb3VwID0gKGFwaUdyb3VwPzogc3RyaW5nKSA9PlxuICAhYXBpR3JvdXAgfHwgYXBpR3JvdXAgPT09ICdjb3JlJyA/ICcnIDogYXBpR3JvdXA7XG5cbmV4cG9ydCBjb25zdCBub3JtYWxpemVEZWZpbml0aW9uID0gPFQgZXh0ZW5kcyBLOHNSZXNvdXJjZURlZmluaXRpb24+KFxuICBkZWZpbml0aW9uOiBULFxuKTogUmVxdWlyZWQ8VD4gPT5cbiAgKHtcbiAgICB0eXBlOiBkZWZpbml0aW9uLnR5cGUsXG4gICAgYXBpR3JvdXA6IG5vcm1hbGl6ZUFwaUdyb3VwKGRlZmluaXRpb24uYXBpR3JvdXApLFxuICAgIGFwaVZlcnNpb246IGRlZmluaXRpb24uYXBpVmVyc2lvbiB8fCAndjEnLFxuICB9IGFzIFJlcXVpcmVkPFQ+KTtcblxuZnVuY3Rpb24gaXNEZWZpbml0aW9uPFQgZXh0ZW5kcyBLOHNSZXNvdXJjZURlZmluaXRpb25zPihcbiAgZGVmaW5pdGlvbjoga2V5b2YgVCB8IFZhbHVlT2Y8VD4sXG4pOiBkZWZpbml0aW9uIGlzIFZhbHVlT2Y8VD4ge1xuICByZXR1cm4gdHlwZW9mIGRlZmluaXRpb24gPT09ICdvYmplY3QnO1xufVxuXG5leHBvcnQgY29uc3QgY3JlYXRlUmVzb3VyY2VEZWZpbml0aW9ucyA9IDxcbiAgVCBleHRlbmRzIEs4c1Jlc291cmNlRGVmaW5pdGlvbnMsXG4gIFIgZXh0ZW5kcyBEZWVwUmVhZG9ubHk8e1xuICAgIFJFU09VUkNFX0RFRklOSVRJT05TOiBUO1xuICAgIFJFU09VUkNFX1RZUEVTOiBLZXlzPFQ+O1xuICAgIGdldFlhbWxBcGlWZXJzaW9uOiAoZGVmaW5pdGlvbjoga2V5b2YgVCB8IFZhbHVlT2Y8VD4pID0+IHN0cmluZztcbiAgfT4sXG4+KFxuICBSRVNPVVJDRV9ERUZJTklUSU9OUzogVCxcbik6IFIgPT5cbiAgKHtcbiAgICBSRVNPVVJDRV9ERUZJTklUSU9OUyxcbiAgICBSRVNPVVJDRV9UWVBFUzogdG9LZXlzKFJFU09VUkNFX0RFRklOSVRJT05TKSxcbiAgICBnZXRZYW1sQXBpVmVyc2lvbihkZWZpbml0aW9uKSB7XG4gICAgICBpZiAoIWlzRGVmaW5pdGlvbihkZWZpbml0aW9uKSkge1xuICAgICAgICBkZWZpbml0aW9uID0gUkVTT1VSQ0VfREVGSU5JVElPTlNbZGVmaW5pdGlvbl0gYXMgVmFsdWVPZjxUPjtcbiAgICAgIH1cbiAgICAgIGNvbnN0IHsgYXBpR3JvdXAsIGFwaVZlcnNpb24gfSA9IG5vcm1hbGl6ZURlZmluaXRpb24oZGVmaW5pdGlvbik7XG4gICAgICByZXR1cm4gKFxuICAgICAgICAoIWFwaUdyb3VwIHx8IGFwaUdyb3VwID09PSAnY29yZScgPyAnJyA6IGFwaUdyb3VwICsgJy8nKSArIGFwaVZlcnNpb25cbiAgICAgICk7XG4gICAgfSxcbiAgfSBhcyBSKTtcblxuZXhwb3J0IGNvbnN0IGdldE1ldGFkYXRhSGVhZGVycyA9IChcbiAgaXNMaXN0PzogYm9vbGVhbixcbiAgY3VzdG9tQWNjZXB0Pzogc3RyaW5nLFxuKSA9PiAoe1xuICBBY2NlcHQ6XG4gICAgY3VzdG9tQWNjZXB0IHx8XG4gICAgYGFwcGxpY2F0aW9uL2pzb247YXM9UGFydGlhbE9iamVjdE1ldGFkYXRhJHtpZkV4aXN0KFxuICAgICAgaXNMaXN0LFxuICAgICAgJ0xpc3QnLFxuICAgICl9O2c9bWV0YS5rOHMuaW87dj12MSxhcHBsaWNhdGlvbi9qc29uYCxcbn0pO1xuXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlV2F0Y2hFdmVudHM8VCBleHRlbmRzIEt1YmVybmV0ZXNSZXNvdXJjZT4oXG4gIGV2ZW50czogQXJyYXk8V2F0Y2hBUElSZXNwb25zZTxUPj4sXG4pOiBBcnJheTxXYXRjaEFQSVJlc3BvbnNlPFQ+PiB7XG4gIHJldHVybiBldmVudHMucmVkdWNlKChhY2MsIGN1cnIpID0+IHtcbiAgICBpZiAoIWlzUmVzb3VyY2VFdmVudChjdXJyKSkge1xuICAgICAgYWNjLnB1c2goY3Vycik7XG4gICAgICByZXR1cm4gYWNjO1xuICAgIH1cblxuICAgIGNvbnN0IHByZXZJbmRleCA9IGZpbmRQcmV2SW5kZXg8VD4oYWNjLCBjdXJyKTtcbiAgICBpZiAocHJldkluZGV4ID49IDApIHtcbiAgICAgIGNvbnN0IHByZXYgPSBhY2NbcHJldkluZGV4XTtcbiAgICAgIGNvbnN0IG5leHRFdmVudFR5cGUgPSBjYWxjTmV4dEV2ZW50VHlwZShwcmV2LnR5cGUsIGN1cnIudHlwZSk7XG5cbiAgICAgIGFjYy5zcGxpY2UocHJldkluZGV4LCAxKTtcbiAgICAgIGFjYy5wdXNoKHtcbiAgICAgICAgdHlwZTogbmV4dEV2ZW50VHlwZSxcbiAgICAgICAgb2JqZWN0OiBjdXJyLm9iamVjdCxcbiAgICAgIH0pO1xuICAgIH0gZWxzZSB7XG4gICAgICBhY2MucHVzaChjdXJyKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYWNjO1xuICB9LCBbXSBhcyBBcnJheTxXYXRjaEFQSVJlc3BvbnNlPFQ+Pik7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc1Jlc291cmNlRXZlbnQ8VCBleHRlbmRzIEt1YmVybmV0ZXNSZXNvdXJjZT4oXG4gIGV2ZW50OiBXYXRjaEFQSVJlc3BvbnNlPFQ+LFxuKTogYm9vbGVhbiB7XG4gIHJldHVybiBldmVudC50eXBlICE9PSBXYXRjaEV2ZW50LkJvb2ttYXJrICYmIGV2ZW50LnR5cGUgIT09IFdhdGNoRXZlbnQuRXJyb3I7XG59XG5cbmZ1bmN0aW9uIGZpbmRQcmV2SW5kZXg8VCBleHRlbmRzIEt1YmVybmV0ZXNSZXNvdXJjZT4oXG4gIGV2ZW50czogQXJyYXk8V2F0Y2hBUElSZXNwb25zZTxUPj4sXG4gIGN1cnI6IFdhdGNoQVBJUmVzcG9uc2U8VD4sXG4pIHtcbiAgZm9yIChsZXQgaSA9IGV2ZW50cy5sZW5ndGggLSAxOyBpID49IDA7IGktLSkge1xuICAgIGNvbnN0IHByZXYgPSBldmVudHNbaV07XG4gICAgaWYgKFxuICAgICAgaXNSZXNvdXJjZUV2ZW50KHByZXYpICYmXG4gICAgICBwcmV2Lm9iamVjdD8ubWV0YWRhdGE/LnVpZCA9PT0gY3Vyci5vYmplY3Q/Lm1ldGFkYXRhPy51aWRcbiAgICApIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMTtcbn1cblxuZnVuY3Rpb24gY2FsY05leHRFdmVudFR5cGUocHJldjogV2F0Y2hFdmVudCwgbmV4dDogV2F0Y2hFdmVudCkge1xuICBzd2l0Y2ggKGAke3ByZXZ9ID09PiAke25leHR9YCkge1xuICAgIGNhc2UgYCR7V2F0Y2hFdmVudC5BZGRlZH0gPT0+ICR7V2F0Y2hFdmVudC5Nb2RpZmllZH1gOiB7XG4gICAgICAvLyDkuIvmuLjlj6/og73kvJrph43lpI3mlLbliLAgQURERUQg5LqL5Lu2XG4gICAgICByZXR1cm4gV2F0Y2hFdmVudC5BZGRlZDtcbiAgICB9XG4gICAgY2FzZSBgJHtXYXRjaEV2ZW50LkFkZGVkfSA9PT4gJHtXYXRjaEV2ZW50LkRlbGV0ZWR9YDoge1xuICAgICAgLy8g5LiL5ri45Y+v6IO95Zyo5pyq5pS25YiwIEFEREVEIOS6i+S7tuaXtuebtOaOpeaUtuWIsCBERUxFVEVEIOS6i+S7tlxuICAgICAgcmV0dXJuIFdhdGNoRXZlbnQuRGVsZXRlZDtcbiAgICB9XG4gICAgY2FzZSBgJHtXYXRjaEV2ZW50Lk1vZGlmaWVkfSA9PT4gJHtXYXRjaEV2ZW50Lk1vZGlmaWVkfWA6IHtcbiAgICAgIHJldHVybiBXYXRjaEV2ZW50Lk1vZGlmaWVkO1xuICAgIH1cbiAgICBjYXNlIGAke1dhdGNoRXZlbnQuTW9kaWZpZWR9ID09PiAke1dhdGNoRXZlbnQuRGVsZXRlZH1gOiB7XG4gICAgICByZXR1cm4gV2F0Y2hFdmVudC5EZWxldGVkO1xuICAgIH1cbiAgICBkZWZhdWx0OiB7XG4gICAgICBjb25zb2xlLndhcm4oJ1VuZXhwZWN0ZWQgc3RhdGUgdHJhbnNpdGlvbjonLCBgJHtwcmV2fSA9PT4gJHtuZXh0fWApO1xuICAgICAgcmV0dXJuIG5leHQ7XG4gICAgfVxuICB9XG59XG4iXX0=