UNPKG

@rx-angular/cdk

Version:

@rx-angular/cdk is a Component Development Kit for ergonomic and highly performant angular applications. It helps to to build Large scale applications, UI libs, state management, rendering systems and much more. Furthermore the unique way of mixing reacti

1 lines 9.39 kB
{"version":3,"file":"cdk-internals-core.mjs","sources":["../../../../libs/cdk/internals/core/src/lib/get-zone-unpatched-api.ts","../../../../libs/cdk/internals/core/src/lib/accumulateObservables.ts","../../../../libs/cdk/internals/core/src/lib/timeout.ts","../../../../libs/cdk/internals/core/src/lib/toObservableMicrotask.ts","../../../../libs/cdk/internals/core/src/cdk-internals-core.ts"],"sourcesContent":["import { ɵglobal } from '@angular/core';\n\n/**\n * @description\n *\n * This function returns the zone un-patched API for the a specific Browser API.\n * If no target is passed the window is used instead\n *\n * @param name - The name of the API to check.\n * @param target - The target to get un-patched API from.\n * @return {Function} - The zone un-patched API in question.\n *\n */\nexport function getZoneUnPatchedApi<\n N extends keyof (Window & typeof globalThis)\n>(name: N): (Window & typeof globalThis)[N];\n\nexport function getZoneUnPatchedApi<T extends object, N extends keyof T>(\n target: T,\n name: N\n): T[N];\n\nexport function getZoneUnPatchedApi<T extends object, N extends keyof T>(\n targetOrName: T | string,\n name?: N\n) {\n // If the user has provided the API name as the first argument, for instance:\n // `const addEventListener = getZoneUnPatchedApi('addEventListener');`\n // Then we just swap arguments and make `global` or `window` as the default target.\n if (typeof targetOrName === 'string') {\n name = targetOrName as N;\n targetOrName = ɵglobal as T;\n }\n return targetOrName['__zone_symbol__' + String(name)] || targetOrName[name];\n}\n","import { coalesceWith } from '@rx-angular/cdk/coalescing';\nimport { combineLatest, from, Observable } from 'rxjs';\nimport { distinctUntilChanged, filter, map, shareReplay } from 'rxjs/operators';\nimport { getZoneUnPatchedApi } from './get-zone-unpatched-api';\nimport {\n ArrayReducerFn,\n ExtractObservableValue,\n NotEmpty,\n ObservableMap,\n PropName,\n PropType,\n} from './model';\n\nconst resolvedPromise = getZoneUnPatchedApi('Promise').resolve();\nconst resolvedPromise$ = from(resolvedPromise);\n\n/**\n * @internal\n *\n * Used for typing\n */\nfunction getEntriesToObjectReducerFn<T extends Record<string, any>>(\n keys: PropName<T>[]\n): ArrayReducerFn<T> {\n return (\n accumulator: T,\n currentValue?: PropType<T>,\n currentIndex?: number\n ): T => {\n return {\n ...accumulator,\n [keys[currentIndex]]: currentValue,\n };\n };\n}\n\n/**\n * This Observable creation function helps to accumulate an object of key & Observable of values to\n * an Observable of objects of key & value.\n * This comes in handy if you quickly want to create subsets as objects/state-slices of different Observables.\n *\n * The resulting Observable filters out undefined values forwards only distinct values and shared the aggregated output.\n *\n * @example\n *\n * Default usage:\n *\n * const object$: Observable<{\n * prop1: number,\n * prop2: string,\n * prop3: string\n * }> = accumulateObservables({\n * prop1: interval(42),\n * prop2: of('lorem'),\n * prop3: 'test'\n * });\n *\n * Usage with custom duration selector:\n *\n * const object$: Observable<{\n * prop1: number,\n * prop2: string,\n * prop3: string\n * }> = accumulateObservables({\n * prop1: interval(42),\n * prop2: of('lorem'),\n * prop3: 'test'\n * }, timer(0, 20));\n *\n * @param obj - An object of key & Observable values pairs\n * @param durationSelector - An Observable determining the duration for the internal coalescing method\n */\nexport function accumulateObservables<T extends ObservableMap & NotEmpty<T>>(\n // @TODO type static or Observable to enable mixing of imperative and reatctive values\n obj: T,\n durationSelector: Observable<any> = resolvedPromise$\n): Observable<{ [K in keyof T]: ExtractObservableValue<T[K]> }> {\n const keys = Object.keys(obj) as (keyof T)[];\n // @TODO better typing to enable static values => coerceObservable(obj[key])\n const observables = keys.map((key) =>\n obj[key].pipe(\n // we avoid using the nullish operator later ;)\n filter((v) => v !== undefined),\n // state \"changes\" differ from each other, this operator ensures distinct values\n distinctUntilChanged()\n )\n );\n return combineLatest(observables).pipe(\n // As combineLatest will emit multiple times for a change in multiple properties we coalesce those emissions\n // together\n coalesceWith(durationSelector),\n // mapping array of values to object\n map((values) =>\n values.reduce(getEntriesToObjectReducerFn(keys), {} as any)\n ),\n // by using shareReplay we share the last composition work done to create the accumulated object\n shareReplay({ refCount: true, bufferSize: 1 })\n );\n}\n","import { Observable, Subscriber } from 'rxjs';\nimport { concatMap, mapTo } from 'rxjs/operators';\nimport { getZoneUnPatchedApi } from './get-zone-unpatched-api';\n\n/**\n * Creates an Observable that emits after a setTimeout.\n * The timeout it unpatched to not avoid zone pollution\n * @param setTimeoutFn\n */\nfunction timeout(delay = 0) {\n return new Observable<number>((subscriber: Subscriber<number>) => {\n const asyncID = getZoneUnPatchedApi('setTimeout')(\n () => subscriber.next(0),\n delay\n );\n return () => {\n getZoneUnPatchedApi('clearTimeout')(asyncID);\n };\n });\n}\n\n/**\n *\n */\nexport function timeoutSwitchMapWith<T>() {\n return (o$: Observable<T>) =>\n o$.pipe(concatMap((v) => timeout().pipe(mapTo(v))));\n}\n","import {\n assertInInjectionContext,\n DestroyRef,\n effect,\n inject,\n Injector,\n Signal,\n untracked,\n} from '@angular/core';\nimport { toObservable, ToObservableOptions } from '@angular/core/rxjs-interop';\nimport { Observable, ReplaySubject } from 'rxjs';\n\n// Copied from angular/core/rxjs-interop/src/to_observable.ts -> because it's a private API\n// https://github.com/angular/angular/blob/46f00f951842dd117653df6cca3bfd5ee5baa0f1/packages/core/rxjs-interop/src/to_observable.ts#L72\nexport function toObservableMicrotaskInternal<T>(\n source: Signal<T>,\n options?: ToObservableOptions,\n): Observable<T> {\n if (!options?.injector) {\n assertInInjectionContext(toObservable);\n }\n\n const injector = options?.injector ?? inject(Injector);\n const subject = new ReplaySubject<T>(1);\n\n const watcher = effect(\n () => {\n let value: T;\n try {\n value = source();\n } catch (err) {\n untracked(() => subject.error(err));\n return;\n }\n untracked(() => subject.next(value));\n },\n // forceRoot will ensure that the effect will be scheduled as a microtask\n { injector, manualCleanup: true, forceRoot: true },\n );\n\n injector.get(DestroyRef).onDestroy(() => {\n watcher.destroy();\n subject.complete();\n });\n\n return subject.asObservable();\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":["ɵglobal"],"mappings":";;;;;;AAsBgB,SAAA,mBAAmB,CACjC,YAAwB,EACxB,IAAQ,EAAA;;;;AAKR,IAAA,IAAI,OAAO,YAAY,KAAK,QAAQ,EAAE;QACpC,IAAI,GAAG,YAAiB;QACxB,YAAY,GAAGA,OAAY;;AAE7B,IAAA,OAAO,YAAY,CAAC,iBAAiB,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,YAAY,CAAC,IAAI,CAAC;AAC7E;;ACrBA,MAAM,eAAe,GAAG,mBAAmB,CAAC,SAAS,CAAC,CAAC,OAAO,EAAE;AAChE,MAAM,gBAAgB,GAAG,IAAI,CAAC,eAAe,CAAC;AAE9C;;;;AAIG;AACH,SAAS,2BAA2B,CAClC,IAAmB,EAAA;AAEnB,IAAA,OAAO,CACL,WAAc,EACd,YAA0B,EAC1B,YAAqB,KAChB;QACL,OAAO;AACL,YAAA,GAAG,WAAW;AACd,YAAA,CAAC,IAAI,CAAC,YAAY,CAAC,GAAG,YAAY;SACnC;AACH,KAAC;AACH;AAEA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCG;SACa,qBAAqB;AACnC;AACA,GAAM,EACN,mBAAoC,gBAAgB,EAAA;IAEpD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAgB;;AAE5C,IAAA,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,KAC/B,GAAG,CAAC,GAAG,CAAC,CAAC,IAAI;;IAEX,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,SAAS,CAAC;;IAE9B,oBAAoB,EAAE,CACvB,CACF;AACD,IAAA,OAAO,aAAa,CAAC,WAAW,CAAC,CAAC,IAAI;;;IAGpC,YAAY,CAAC,gBAAgB,CAAC;;AAE9B,IAAA,GAAG,CAAC,CAAC,MAAM,KACT,MAAM,CAAC,MAAM,CAAC,2BAA2B,CAAC,IAAI,CAAC,EAAE,EAAS,CAAC,CAC5D;;AAED,IAAA,WAAW,CAAC,EAAE,QAAQ,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC,CAC/C;AACH;;AC9FA;;;;AAIG;AACH,SAAS,OAAO,CAAC,KAAK,GAAG,CAAC,EAAA;AACxB,IAAA,OAAO,IAAI,UAAU,CAAS,CAAC,UAA8B,KAAI;AAC/D,QAAA,MAAM,OAAO,GAAG,mBAAmB,CAAC,YAAY,CAAC,CAC/C,MAAM,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,EACxB,KAAK,CACN;AACD,QAAA,OAAO,MAAK;AACV,YAAA,mBAAmB,CAAC,cAAc,CAAC,CAAC,OAAO,CAAC;AAC9C,SAAC;AACH,KAAC,CAAC;AACJ;AAEA;;AAEG;SACa,oBAAoB,GAAA;AAClC,IAAA,OAAO,CAAC,EAAiB,KACvB,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACvD;;ACfA;AACA;AACgB,SAAA,6BAA6B,CAC3C,MAAiB,EACjB,OAA6B,EAAA;AAE7B,IAAA,IAAI,CAAC,OAAO,EAAE,QAAQ,EAAE;QACtB,wBAAwB,CAAC,YAAY,CAAC;;IAGxC,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,MAAM,CAAC,QAAQ,CAAC;AACtD,IAAA,MAAM,OAAO,GAAG,IAAI,aAAa,CAAI,CAAC,CAAC;AAEvC,IAAA,MAAM,OAAO,GAAG,MAAM,CACpB,MAAK;AACH,QAAA,IAAI,KAAQ;AACZ,QAAA,IAAI;YACF,KAAK,GAAG,MAAM,EAAE;;QAChB,OAAO,GAAG,EAAE;YACZ,SAAS,CAAC,MAAM,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;YACnC;;QAEF,SAAS,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACrC;;IAED,EAAE,QAAQ,EAAE,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CACnD;IAED,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,SAAS,CAAC,MAAK;QACtC,OAAO,CAAC,OAAO,EAAE;QACjB,OAAO,CAAC,QAAQ,EAAE;AACpB,KAAC,CAAC;AAEF,IAAA,OAAO,OAAO,CAAC,YAAY,EAAE;AAC/B;;AC9CA;;AAEG;;;;"}