UNPKG

@alauda-fe/common

Version:

Alauda frontend team common codes.

74 lines 11.6 kB
/** * @packageDocumentation * @module utils */ import { HttpClient } from '@angular/common/http'; import { Injectable } from '@angular/core'; import { filter as _filter, get } from 'lodash-es'; import { of, catchError, map, startWith, shareReplay, take, } from 'rxjs'; import { API_GATEWAY } from '../constants/public-api'; import { CacheStore } from '../utils/public-api'; import * as i0 from "@angular/core"; import * as i1 from "@angular/common/http"; export class FeatureGateService { constructor(http) { this.http = http; this.cacheStore = new CacheStore({ share: () => shareReplay(1), fetcher: (cluster) => { const url = cluster ? `${API_GATEWAY}/fg/v1/${cluster}/featuregates` : `${API_GATEWAY}/fg/v1/featuregates`; return this.http.get(url).pipe(map(({ items }) => items.reduce((acc, curr) => { acc[curr.metadata.name] = curr.status.enabled; return acc; }, {})), catchError(() => of({}))); }, }); } loadState(cluster) { return this.cacheStore.fetchState(cluster).pipe(map(load => load.state)); } /** * check gate status * @param gate - specified feature gate * @param cluster - check gate for specified cluster */ isEnabled(gateName, cluster) { return this.cacheStore.fetch(cluster).pipe(map(v => !!v[gateName]), take(1)); } isNegateEnabled(gateName, cluster) { return this.cacheStore.fetch(cluster).pipe(map(v => !v[gateName]), take(1)); } /** * filter list with gate, send items without feature gate as begin push (can skip by passing `skipNoFeatureGatePush` argument with true) * @param items - list need filter * @param gateAccessor - how to get gate from item * @param cluster - check gate for specified cluster * @param filterMethod - filter method, default to list filter, can filter deep with createRecursiveFilter or totally custom method. * @param skipNoFeatureGatePush - skip begin push , default false. */ filterEnabled(items, gateAccessor, cluster, filterMethod = _filter, skipNoFeatureGatePush = false) { const filtered = this.cacheStore.fetch(cluster).pipe(map(v => filterMethod(items, item => { const gate = gateAccessor(item); return gate ? (get(item, 'negate') ? !v[gate] : !!v[gate]) : true; }))); return skipNoFeatureGatePush ? filtered : filtered.pipe(startWith(filterMethod(items, item => !gateAccessor(item)))); } /** * refetch cached feature gate settings * @param cluster - specified cluster, refetch all already cached settings when cluster is empty */ refetchCache(cluster) { this.cacheStore.refetch(cluster); } static { this.ɵfac = function FeatureGateService_Factory(t) { return new (t || FeatureGateService)(i0.ɵɵinject(i1.HttpClient)); }; } static { this.ɵprov = /*@__PURE__*/ i0.ɵɵdefineInjectable({ token: FeatureGateService, factory: FeatureGateService.ɵfac, providedIn: 'root' }); } } (() => { (typeof ngDevMode === "undefined" || ngDevMode) && i0.ɵsetClassMetadata(FeatureGateService, [{ type: Injectable, args: [{ providedIn: 'root' }] }], () => [{ type: i1.HttpClient }], null); })(); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmVhdHVyZS1nYXRlLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9saWJzL2NvbW1vbi9zcmMvY29yZS9zZXJ2aWNlcy9mZWF0dXJlLWdhdGUuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7O0dBR0c7QUFFSCxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sc0JBQXNCLENBQUM7QUFDbEQsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUMzQyxPQUFPLEVBQUUsTUFBTSxJQUFJLE9BQU8sRUFBRSxHQUFHLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDbkQsT0FBTyxFQUVMLEVBQUUsRUFDRixVQUFVLEVBQ1YsR0FBRyxFQUNILFNBQVMsRUFDVCxXQUFXLEVBQ1gsSUFBSSxHQUNMLE1BQU0sTUFBTSxDQUFDO0FBRWQsT0FBTyxFQUFFLFdBQVcsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBRXRELE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQzs7O0FBR2pELE1BQU0sT0FBTyxrQkFBa0I7SUF1QjdCLFlBQTZCLElBQWdCO1FBQWhCLFNBQUksR0FBSixJQUFJLENBQVk7UUF0QjVCLGVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQztZQUMzQyxLQUFLLEVBQUUsR0FBRyxFQUFFLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztZQUMzQixPQUFPLEVBQUUsQ0FBQyxPQUFnQixFQUFFLEVBQUU7Z0JBQzVCLE1BQU0sR0FBRyxHQUFHLE9BQU87b0JBQ2pCLENBQUMsQ0FBQyxHQUFHLFdBQVcsVUFBVSxPQUFPLGVBQWU7b0JBQ2hELENBQUMsQ0FBQyxHQUFHLFdBQVcscUJBQXFCLENBQUM7Z0JBRXhDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQXNDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FDakUsR0FBRyxDQUFDLENBQUMsRUFBRSxLQUFLLEVBQUUs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QHBhY2thZ2VEb2N1bWVudGF0aW9uXG4gKiBAbW9kdWxlIHV0aWxzXG4gKi9cblxuaW1wb3J0IHsgSHR0cENsaWVudCB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbi9odHRwJztcbmltcG9ydCB7IEluamVjdGFibGUgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZpbHRlciBhcyBfZmlsdGVyLCBnZXQgfSBmcm9tICdsb2Rhc2gtZXMnO1xuaW1wb3J0IHtcbiAgT2JzZXJ2YWJsZSxcbiAgb2YsXG4gIGNhdGNoRXJyb3IsXG4gIG1hcCxcbiAgc3RhcnRXaXRoLFxuICBzaGFyZVJlcGxheSxcbiAgdGFrZSxcbn0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7IEFQSV9HQVRFV0FZIH0gZnJvbSAnLi4vY29uc3RhbnRzL3B1YmxpYy1hcGknO1xuaW1wb3J0IHsgRmVhdHVyZUdhdGUsIEt1YmVybmV0ZXNSZXNvdXJjZUxpc3QgfSBmcm9tICcuLi90eXBlcy9wdWJsaWMtYXBpJztcbmltcG9ydCB7IENhY2hlU3RvcmUgfSBmcm9tICcuLi91dGlscy9wdWJsaWMtYXBpJztcblxuQEluamVjdGFibGUoeyBwcm92aWRlZEluOiAncm9vdCcgfSlcbmV4cG9ydCBjbGFzcyBGZWF0dXJlR2F0ZVNlcnZpY2Uge1xuICBwcml2YXRlIHJlYWRvbmx5IGNhY2hlU3RvcmUgPSBuZXcgQ2FjaGVTdG9yZSh7XG4gICAgc2hhcmU6ICgpID0+IHNoYXJlUmVwbGF5KDEpLFxuICAgIGZldGNoZXI6IChjbHVzdGVyPzogc3RyaW5nKSA9PiB7XG4gICAgICBjb25zdCB1cmwgPSBjbHVzdGVyXG4gICAgICAgID8gYCR7QVBJX0dBVEVXQVl9L2ZnL3YxLyR7Y2x1c3Rlcn0vZmVhdHVyZWdhdGVzYFxuICAgICAgICA6IGAke0FQSV9HQVRFV0FZfS9mZy92MS9mZWF0dXJlZ2F0ZXNgO1xuXG4gICAgICByZXR1cm4gdGhpcy5odHRwLmdldDxLdWJlcm5ldGVzUmVzb3VyY2VMaXN0PEZlYXR1cmVHYXRlPj4odXJsKS5waXBlKFxuICAgICAgICBtYXAoKHsgaXRlbXMgfSkgPT5cbiAgICAgICAgICBpdGVtcy5yZWR1Y2UoXG4gICAgICAgICAgICAoYWNjLCBjdXJyKSA9PiB7XG4gICAgICAgICAgICAgIGFjY1tjdXJyLm1ldGFkYXRhLm5hbWVdID0gY3Vyci5zdGF0dXMuZW5hYmxlZDtcbiAgICAgICAgICAgICAgcmV0dXJuIGFjYztcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICB7fSBhcyBSZWNvcmQ8c3RyaW5nLCBib29sZWFuPixcbiAgICAgICAgICApLFxuICAgICAgICApLFxuICAgICAgICBjYXRjaEVycm9yKCgpID0+IG9mKHt9IGFzIFJlY29yZDxzdHJpbmcsIGJvb2xlYW4+KSksXG4gICAgICApO1xuICAgIH0sXG4gIH0pO1xuXG4gIGNvbnN0cnVjdG9yKHByaXZhdGUgcmVhZG9ubHkgaHR0cDogSHR0cENsaWVudCkge31cblxuICBsb2FkU3RhdGUoY2x1c3Rlcj86IHN0cmluZykge1xuICAgIHJldHVybiB0aGlzLmNhY2hlU3RvcmUuZmV0Y2hTdGF0ZShjbHVzdGVyKS5waXBlKG1hcChsb2FkID0+IGxvYWQuc3RhdGUpKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBjaGVjayBnYXRlIHN0YXR1c1xuICAgKiBAcGFyYW0gZ2F0ZSAtIHNwZWNpZmllZCBmZWF0dXJlIGdhdGVcbiAgICogQHBhcmFtIGNsdXN0ZXIgLSBjaGVjayBnYXRlIGZvciBzcGVjaWZpZWQgY2x1c3RlclxuICAgKi9cbiAgaXNFbmFibGVkKGdhdGVOYW1lOiBzdHJpbmcsIGNsdXN0ZXI/OiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5jYWNoZVN0b3JlLmZldGNoKGNsdXN0ZXIpLnBpcGUoXG4gICAgICBtYXAodiA9PiAhIXZbZ2F0ZU5hbWVdKSxcbiAgICAgIHRha2UoMSksXG4gICAgKTtcbiAgfVxuXG4gIGlzTmVnYXRlRW5hYmxlZChnYXRlTmFtZTogc3RyaW5nLCBjbHVzdGVyPzogc3RyaW5nKTogT2JzZXJ2YWJsZTxib29sZWFuPiB7XG4gICAgcmV0dXJuIHRoaXMuY2FjaGVTdG9yZS5mZXRjaChjbHVzdGVyKS5waXBlKFxuICAgICAgbWFwKHYgPT4gIXZbZ2F0ZU5hbWVdKSxcbiAgICAgIHRha2UoMSksXG4gICAgKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBmaWx0ZXIgbGlzdCB3aXRoIGdhdGUsIHNlbmQgaXRlbXMgd2l0aG91dCBmZWF0dXJlIGdhdGUgYXMgYmVnaW4gcHVzaCAoY2FuIHNraXAgYnkgcGFzc2luZyBgc2tpcE5vRmVhdHVyZUdhdGVQdXNoYCBhcmd1bWVudCB3aXRoIHRydWUpXG4gICAqIEBwYXJhbSBpdGVtcyAtIGxpc3QgbmVlZCBmaWx0ZXJcbiAgICogQHBhcmFtIGdhdGVBY2Nlc3NvciAtIGhvdyB0byBnZXQgZ2F0ZSBmcm9tIGl0ZW1cbiAgICogQHBhcmFtIGNsdXN0ZXIgLSBjaGVjayBnYXRlIGZvciBzcGVjaWZpZWQgY2x1c3RlclxuICAgKiBAcGFyYW0gZmlsdGVyTWV0aG9kIC0gZmlsdGVyIG1ldGhvZCwgZGVmYXVsdCB0byBsaXN0IGZpbHRlciwgY2FuIGZpbHRlciBkZWVwIHdpdGggY3JlYXRlUmVjdXJzaXZlRmlsdGVyIG9yIHRvdGFsbHkgY3VzdG9tIG1ldGhvZC5cbiAgICogQHBhcmFtIHNraXBOb0ZlYXR1cmVHYXRlUHVzaCAtIHNraXAgYmVnaW4gcHVzaCAsIGRlZmF1bHQgZmFsc2UuXG4gICAqL1xuICBmaWx0ZXJFbmFibGVkPFQ+KFxuICAgIGl0ZW1zOiBUW10sXG4gICAgZ2F0ZUFjY2Vzc29yOiAoaXRlbTogVCkgPT4gc3RyaW5nLFxuICAgIGNsdXN0ZXI/OiBzdHJpbmcsXG4gICAgZmlsdGVyTWV0aG9kOiAoXG4gICAgICBpdGVtczogVFtdLFxuICAgICAgY29uZGl0aW9uOiAoaXRlbTogVCkgPT4gYm9vbGVhbixcbiAgICApID0+IFRbXSA9IF9maWx0ZXIsXG4gICAgc2tpcE5vRmVhdHVyZUdhdGVQdXNoID0gZmFsc2UsXG4gICk6IE9ic2VydmFibGU8VFtdPiB7XG4gICAgY29uc3QgZmlsdGVyZWQgPSB0aGlzLmNhY2hlU3RvcmUuZmV0Y2goY2x1c3RlcikucGlwZShcbiAgICAgIG1hcCh2ID0+XG4gICAgICAgIGZpbHRlck1ldGhvZChpdGVtcywgaXRlbSA9PiB7XG4gICAgICAgICAgY29uc3QgZ2F0ZSA9IGdhdGVBY2Nlc3NvcihpdGVtKTtcbiAgICAgICAgICByZXR1cm4gZ2F0ZSA/IChnZXQoaXRlbSwgJ25lZ2F0ZScpID8gIXZbZ2F0ZV0gOiAhIXZbZ2F0ZV0pIDogdHJ1ZTtcbiAgICAgICAgfSksXG4gICAgICApLFxuICAgICk7XG5cbiAgICByZXR1cm4gc2tpcE5vRmVhdHVyZUdhdGVQdXNoXG4gICAgICA/IGZpbHRlcmVkXG4gICAgICA6IGZpbHRlcmVkLnBpcGUoXG4gICAgICAgICAgc3RhcnRXaXRoKGZpbHRlck1ldGhvZChpdGVtcywgaXRlbSA9PiAhZ2F0ZUFjY2Vzc29yKGl0ZW0pKSksXG4gICAgICAgICk7XG4gIH1cblxuICAvKipcbiAgICogcmVmZXRjaCBjYWNoZWQgZmVhdHVyZSBnYXRlIHNldHRpbmdzXG4gICAqIEBwYXJhbSBjbHVzdGVyIC0gc3BlY2lmaWVkIGNsdXN0ZXIsIHJlZmV0Y2ggYWxsIGFscmVhZHkgY2FjaGVkIHNldHRpbmdzIHdoZW4gY2x1c3RlciBpcyBlbXB0eVxuICAgKi9cbiAgcmVmZXRjaENhY2hlKGNsdXN0ZXI/OiBzdHJpbmcpIHtcbiAgICB0aGlzLmNhY2hlU3RvcmUucmVmZXRjaChjbHVzdGVyKTtcbiAgfVxufVxuIl19