@jsverse/transloco-preload-langs
Version:
Transloco preload languages while idle
1 lines • 5.41 kB
Source Map (JSON)
{"version":3,"file":"jsverse-transloco-preload-langs.mjs","sources":["../../../../libs/transloco-preload-langs/src/lib/preload-langs.service.ts","../../../../libs/transloco-preload-langs/src/lib/preload-langs.providers.ts","../../../../libs/transloco-preload-langs/src/jsverse-transloco-preload-langs.ts"],"sourcesContent":["import { Inject, Injectable, InjectionToken, OnDestroy } from '@angular/core';\nimport { TranslocoService } from '@jsverse/transloco';\nimport { tap } from 'rxjs/operators';\nimport { forkJoin, Subscription } from 'rxjs';\n\nexport const TRANSLOCO_PRELOAD_LANGUAGES = new InjectionToken<string[]>(\n 'Languages to be preloaded',\n);\n\n@Injectable({ providedIn: 'root' })\nexport class TranslocoPreloadLangsService implements OnDestroy {\n private readonly idleCallbackId: number | undefined;\n private subscription: Subscription | null = null;\n\n constructor(\n service: TranslocoService,\n @Inject(TRANSLOCO_PRELOAD_LANGUAGES) langs: string[],\n ) {\n if (!langs.length) return;\n\n this.idleCallbackId = window.requestIdleCallback(() => {\n const preloads = langs.map((currentLangOrScope) => {\n const lang = service._completeScopeWithLang(currentLangOrScope);\n\n return service.load(lang).pipe(\n tap(() => {\n if (!service.config.prodMode) {\n console.log(\n `%c 👁 Preloaded ${lang}`,\n 'background: #fff; color: #607D8B;',\n );\n }\n }),\n );\n });\n this.subscription = forkJoin(preloads).subscribe();\n });\n }\n\n ngOnDestroy() {\n if (this.idleCallbackId !== undefined) {\n window.cancelIdleCallback(this.idleCallbackId);\n }\n\n this.subscription?.unsubscribe();\n // Caretaker note: it's important to clean up references to subscriptions since they save the `next`\n // callback within its `destination` property, preventing classes from being GC'd.\n this.subscription = null;\n }\n}\n","import { APP_INITIALIZER, makeEnvironmentProviders } from '@angular/core';\n\nimport {\n TRANSLOCO_PRELOAD_LANGUAGES,\n TranslocoPreloadLangsService,\n} from './preload-langs.service';\n\ninterface IdleDeadline {\n didTimeout: false;\n timeRemaining: () => number;\n}\n\nwindow.requestIdleCallback =\n window.requestIdleCallback ??\n function (cb: (deadLine: IdleDeadline) => void) {\n const start = Date.now();\n\n return setTimeout(function () {\n cb({\n didTimeout: false,\n timeRemaining: function () {\n return Math.max(0, 50 - (Date.now() - start));\n },\n });\n }, 1);\n };\n\nwindow.cancelIdleCallback =\n window.cancelIdleCallback ??\n function (id: number) {\n clearTimeout(id);\n };\n\n// eslint-disable-next-line @typescript-eslint/no-empty-function\nfunction noop() {}\n\nexport function provideTranslocoPreloadLangs(langs: string[]) {\n return makeEnvironmentProviders([\n { provide: TRANSLOCO_PRELOAD_LANGUAGES, useValue: langs },\n {\n provide: APP_INITIALIZER,\n useFactory: () => noop,\n multi: true,\n deps: [TranslocoPreloadLangsService],\n },\n ]);\n}\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './index';\n"],"names":[],"mappings":"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"}