@jsverse/transloco 7.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +1005 -0
- package/LICENSE +22 -0
- package/README.md +44 -0
- package/esm2022/index.mjs +20 -0
- package/esm2022/jsverse-transloco.mjs +5 -0
- package/esm2022/lib/browser-lang.mjs +28 -0
- package/esm2022/lib/get-fallbacks-loaders.mjs +13 -0
- package/esm2022/lib/helpers.mjs +104 -0
- package/esm2022/lib/lang-resolver.mjs +54 -0
- package/esm2022/lib/loader-component.component.mjs +21 -0
- package/esm2022/lib/resolve-loader.mjs +13 -0
- package/esm2022/lib/scope-resolver.mjs +24 -0
- package/esm2022/lib/shared.mjs +73 -0
- package/esm2022/lib/template-handler.mjs +28 -0
- package/esm2022/lib/transloco-fallback-strategy.mjs +26 -0
- package/esm2022/lib/transloco-lang.mjs +3 -0
- package/esm2022/lib/transloco-loading-template.mjs +3 -0
- package/esm2022/lib/transloco-missing-handler.mjs +18 -0
- package/esm2022/lib/transloco-scope.mjs +3 -0
- package/esm2022/lib/transloco-testing.module.mjs +76 -0
- package/esm2022/lib/transloco.config.mjs +37 -0
- package/esm2022/lib/transloco.directive.mjs +169 -0
- package/esm2022/lib/transloco.interceptor.mjs +17 -0
- package/esm2022/lib/transloco.loader.mjs +13 -0
- package/esm2022/lib/transloco.module.mjs +18 -0
- package/esm2022/lib/transloco.pipe.mjs +97 -0
- package/esm2022/lib/transloco.providers.mjs +92 -0
- package/esm2022/lib/transloco.service.mjs +579 -0
- package/esm2022/lib/transloco.transpiler.mjs +145 -0
- package/esm2022/lib/types.mjs +2 -0
- package/fesm2022/jsverse-transloco.mjs +1580 -0
- package/fesm2022/jsverse-transloco.mjs.map +1 -0
- package/index.d.ts +19 -0
- package/lib/browser-lang.d.ts +8 -0
- package/lib/get-fallbacks-loaders.d.ts +14 -0
- package/lib/helpers.d.ts +21 -0
- package/lib/lang-resolver.d.ts +32 -0
- package/lib/loader-component.component.d.ts +6 -0
- package/lib/resolve-loader.d.ts +10 -0
- package/lib/scope-resolver.d.ts +12 -0
- package/lib/shared.d.ts +17 -0
- package/lib/template-handler.d.ts +9 -0
- package/lib/transloco-fallback-strategy.d.ts +14 -0
- package/lib/transloco-lang.d.ts +2 -0
- package/lib/transloco-loading-template.d.ts +3 -0
- package/lib/transloco-missing-handler.d.ts +16 -0
- package/lib/transloco-scope.d.ts +3 -0
- package/lib/transloco-testing.module.d.ts +27 -0
- package/lib/transloco.config.d.ts +27 -0
- package/lib/transloco.directive.d.ts +50 -0
- package/lib/transloco.interceptor.d.ts +14 -0
- package/lib/transloco.loader.d.ts +15 -0
- package/lib/transloco.module.d.ts +8 -0
- package/lib/transloco.pipe.d.ts +23 -0
- package/lib/transloco.providers.d.ts +30 -0
- package/lib/transloco.service.d.ts +199 -0
- package/lib/transloco.transpiler.d.ts +58 -0
- package/lib/types.d.ts +45 -0
- package/package.json +54 -0
- package/schematics/src/assets/i18n/en.json +1 -0
- package/schematics/src/collection.json +59 -0
- package/schematics/src/component/index.d.ts +2 -0
- package/schematics/src/component/index.js +21 -0
- package/schematics/src/component/index.js.map +1 -0
- package/schematics/src/join/index.d.ts +3 -0
- package/schematics/src/join/index.js +79 -0
- package/schematics/src/join/index.js.map +1 -0
- package/schematics/src/join/schema.d.ts +28 -0
- package/schematics/src/join/schema.js +3 -0
- package/schematics/src/join/schema.js.map +1 -0
- package/schematics/src/join/schema.json +43 -0
- package/schematics/src/keys-manager/index.d.ts +5 -0
- package/schematics/src/keys-manager/index.js +97 -0
- package/schematics/src/keys-manager/index.js.map +1 -0
- package/schematics/src/keys-manager/schema.d.ts +19 -0
- package/schematics/src/keys-manager/schema.js +3 -0
- package/schematics/src/keys-manager/schema.js.map +1 -0
- package/schematics/src/keys-manager/schema.json +33 -0
- package/schematics/src/migrate/index.d.ts +3 -0
- package/schematics/src/migrate/index.js +21 -0
- package/schematics/src/migrate/index.js.map +1 -0
- package/schematics/src/migrate/ngx-translate-migration.d.ts +3 -0
- package/schematics/src/migrate/ngx-translate-migration.js +169 -0
- package/schematics/src/migrate/ngx-translate-migration.js.map +1 -0
- package/schematics/src/migrate/schema.d.ts +10 -0
- package/schematics/src/migrate/schema.js +3 -0
- package/schematics/src/migrate/schema.js.map +1 -0
- package/schematics/src/migrate/schema.json +23 -0
- package/schematics/src/ng-add/files/transloco-loader/transloco-loader.__ts__ +12 -0
- package/schematics/src/ng-add/files/transloco-module/transloco-root.module.__ts__ +24 -0
- package/schematics/src/ng-add/generators/http-loader.gen.d.ts +4 -0
- package/schematics/src/ng-add/generators/http-loader.gen.js +15 -0
- package/schematics/src/ng-add/generators/http-loader.gen.js.map +1 -0
- package/schematics/src/ng-add/generators/root-module.gen.d.ts +9 -0
- package/schematics/src/ng-add/generators/root-module.gen.js +31 -0
- package/schematics/src/ng-add/generators/root-module.gen.js.map +1 -0
- package/schematics/src/ng-add/generators/translation-files.gen.d.ts +4 -0
- package/schematics/src/ng-add/generators/translation-files.gen.js +23 -0
- package/schematics/src/ng-add/generators/translation-files.gen.js.map +1 -0
- package/schematics/src/ng-add/index.d.ts +3 -0
- package/schematics/src/ng-add/index.js +103 -0
- package/schematics/src/ng-add/index.js.map +1 -0
- package/schematics/src/ng-add/schema.d.ts +42 -0
- package/schematics/src/ng-add/schema.js +14 -0
- package/schematics/src/ng-add/schema.js.map +1 -0
- package/schematics/src/ng-add/schema.json +53 -0
- package/schematics/src/ng-migrate/index.d.ts +3 -0
- package/schematics/src/ng-migrate/index.js +14 -0
- package/schematics/src/ng-migrate/index.js.map +1 -0
- package/schematics/src/ng-migrate/ng-migrate.d.ts +5 -0
- package/schematics/src/ng-migrate/ng-migrate.js +106 -0
- package/schematics/src/ng-migrate/ng-migrate.js.map +1 -0
- package/schematics/src/ng-migrate/schema.d.ts +14 -0
- package/schematics/src/ng-migrate/schema.js +3 -0
- package/schematics/src/ng-migrate/schema.js.map +1 -0
- package/schematics/src/ng-migrate/schema.json +27 -0
- package/schematics/src/schematics.consts.d.ts +4 -0
- package/schematics/src/schematics.consts.js +8 -0
- package/schematics/src/schematics.consts.js.map +1 -0
- package/schematics/src/scope/index.d.ts +3 -0
- package/schematics/src/scope/index.js +101 -0
- package/schematics/src/scope/index.js.map +1 -0
- package/schematics/src/scope/schema.d.ts +28 -0
- package/schematics/src/scope/schema.js +3 -0
- package/schematics/src/scope/schema.js.map +1 -0
- package/schematics/src/scope/schema.json +84 -0
- package/schematics/src/split/index.d.ts +3 -0
- package/schematics/src/split/index.js +66 -0
- package/schematics/src/split/index.js.map +1 -0
- package/schematics/src/split/schema.d.ts +20 -0
- package/schematics/src/split/schema.js +3 -0
- package/schematics/src/split/schema.js.map +1 -0
- package/schematics/src/split/schema.json +35 -0
- package/schematics/src/types.d.ts +5 -0
- package/schematics/src/types.js +10 -0
- package/schematics/src/types.js.map +1 -0
- package/schematics/src/upgrade/index.d.ts +3 -0
- package/schematics/src/upgrade/index.js +19 -0
- package/schematics/src/upgrade/index.js.map +1 -0
- package/schematics/src/upgrade/schema.d.ts +6 -0
- package/schematics/src/upgrade/schema.js +3 -0
- package/schematics/src/upgrade/schema.js.map +1 -0
- package/schematics/src/upgrade/schema.json +16 -0
- package/schematics/src/upgrade/v2.d.ts +1 -0
- package/schematics/src/upgrade/v2.js +89 -0
- package/schematics/src/upgrade/v2.js.map +1 -0
- package/schematics/src/utils/array.d.ts +3 -0
- package/schematics/src/utils/array.js +12 -0
- package/schematics/src/utils/array.js.map +1 -0
- package/schematics/src/utils/config.d.ts +2 -0
- package/schematics/src/utils/config.js +13 -0
- package/schematics/src/utils/config.js.map +1 -0
- package/schematics/src/utils/find-module.d.ts +23 -0
- package/schematics/src/utils/find-module.js +110 -0
- package/schematics/src/utils/find-module.js.map +1 -0
- package/schematics/src/utils/package.d.ts +5 -0
- package/schematics/src/utils/package.js +19 -0
- package/schematics/src/utils/package.js.map +1 -0
- package/schematics/src/utils/projects.d.ts +8 -0
- package/schematics/src/utils/projects.js +56 -0
- package/schematics/src/utils/projects.js.map +1 -0
- package/schematics/src/utils/translations.d.ts +7 -0
- package/schematics/src/utils/translations.js +31 -0
- package/schematics/src/utils/translations.js.map +1 -0
- package/schematics/src/utils/transloco.d.ts +24 -0
- package/schematics/src/utils/transloco.js +93 -0
- package/schematics/src/utils/transloco.js.map +1 -0
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
import { APP_INITIALIZER, Inject, Injectable, InjectionToken, NgModule, } from '@angular/core';
|
|
2
|
+
import { of } from 'rxjs';
|
|
3
|
+
import { TranslocoModule } from './transloco.module';
|
|
4
|
+
import { provideTransloco } from './transloco.providers';
|
|
5
|
+
import { TranslocoService } from './transloco.service';
|
|
6
|
+
import * as i0 from "@angular/core";
|
|
7
|
+
const TRANSLOCO_TEST_LANGS = new InjectionToken('TRANSLOCO_TEST_LANGS - Available testing languages');
|
|
8
|
+
const TRANSLOCO_TEST_OPTIONS = new InjectionToken('TRANSLOCO_TEST_OPTIONS - Testing options');
|
|
9
|
+
export class TestingLoader {
|
|
10
|
+
langs;
|
|
11
|
+
constructor(langs) {
|
|
12
|
+
this.langs = langs;
|
|
13
|
+
}
|
|
14
|
+
getTranslation(lang) {
|
|
15
|
+
return of(this.langs[lang]);
|
|
16
|
+
}
|
|
17
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: TestingLoader, deps: [{ token: TRANSLOCO_TEST_LANGS }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
18
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: TestingLoader });
|
|
19
|
+
}
|
|
20
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: TestingLoader, decorators: [{
|
|
21
|
+
type: Injectable
|
|
22
|
+
}], ctorParameters: () => [{ type: undefined, decorators: [{
|
|
23
|
+
type: Inject,
|
|
24
|
+
args: [TRANSLOCO_TEST_LANGS]
|
|
25
|
+
}] }] });
|
|
26
|
+
export function initTranslocoService(service, langs = {}, options) {
|
|
27
|
+
const preloadAllLangs = () => options.preloadLangs
|
|
28
|
+
? Promise.all(Object.keys(langs).map((lang) => service.load(lang).toPromise()))
|
|
29
|
+
: Promise.resolve();
|
|
30
|
+
return preloadAllLangs;
|
|
31
|
+
}
|
|
32
|
+
export class TranslocoTestingModule {
|
|
33
|
+
static forRoot(options) {
|
|
34
|
+
return {
|
|
35
|
+
ngModule: TranslocoTestingModule,
|
|
36
|
+
providers: [
|
|
37
|
+
provideTransloco({
|
|
38
|
+
loader: TestingLoader,
|
|
39
|
+
config: {
|
|
40
|
+
prodMode: true,
|
|
41
|
+
missingHandler: { logMissingKey: false },
|
|
42
|
+
...options.translocoConfig,
|
|
43
|
+
},
|
|
44
|
+
}),
|
|
45
|
+
{
|
|
46
|
+
provide: TRANSLOCO_TEST_LANGS,
|
|
47
|
+
useValue: options.langs,
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
provide: TRANSLOCO_TEST_OPTIONS,
|
|
51
|
+
useValue: options,
|
|
52
|
+
},
|
|
53
|
+
{
|
|
54
|
+
provide: APP_INITIALIZER,
|
|
55
|
+
useFactory: initTranslocoService,
|
|
56
|
+
deps: [
|
|
57
|
+
TranslocoService,
|
|
58
|
+
TRANSLOCO_TEST_LANGS,
|
|
59
|
+
TRANSLOCO_TEST_OPTIONS,
|
|
60
|
+
],
|
|
61
|
+
multi: true,
|
|
62
|
+
},
|
|
63
|
+
],
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: TranslocoTestingModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
67
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.9", ngImport: i0, type: TranslocoTestingModule, exports: [TranslocoModule] });
|
|
68
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: TranslocoTestingModule, imports: [TranslocoModule] });
|
|
69
|
+
}
|
|
70
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: TranslocoTestingModule, decorators: [{
|
|
71
|
+
type: NgModule,
|
|
72
|
+
args: [{
|
|
73
|
+
exports: [TranslocoModule],
|
|
74
|
+
}]
|
|
75
|
+
}] });
|
|
76
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsb2NvLXRlc3RpbmcubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy90cmFuc2xvY28vc3JjL2xpYi90cmFuc2xvY28tdGVzdGluZy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLGVBQWUsRUFDZixNQUFNLEVBQ04sVUFBVSxFQUNWLGNBQWMsRUFFZCxRQUFRLEdBQ1QsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFjLEVBQUUsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUl0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDckQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFFekQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7O0FBUXZELE1BQU0sb0JBQW9CLEdBQUcsSUFBSSxjQUFjLENBQzdDLG9EQUFvRCxDQUNyRCxDQUFDO0FBQ0YsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FDL0MsMENBQTBDLENBQzNDLENBQUM7QUFHRixNQUFNLE9BQU8sYUFBYTtJQUVnQjtJQUR4QyxZQUN3QyxLQUEyQjtRQUEzQixVQUFLLEdBQUwsS0FBSyxDQUFzQjtJQUNoRSxDQUFDO0lBRUosY0FBYyxDQUFDLElBQVk7UUFDekIsT0FBTyxFQUFFLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDO0lBQzlCLENBQUM7dUdBUFUsYUFBYSxrQkFFZCxvQkFBb0I7MkdBRm5CLGFBQWE7OzJGQUFiLGFBQWE7a0JBRHpCLFVBQVU7OzBCQUdOLE1BQU07MkJBQUMsb0JBQW9COztBQVFoQyxNQUFNLFVBQVUsb0JBQW9CLENBQ2xDLE9BQXlCLEVBQ3pCLFFBQThCLEVBQUUsRUFDaEMsT0FBZ0M7SUFFaEMsTUFBTSxlQUFlLEdBQUcsR0FBRyxFQUFFLENBQzNCLE9BQU8sQ0FBQyxZQUFZO1FBQ2xCLENBQUMsQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUNULE1BQU0sQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLENBQ2pFO1FBQ0gsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztJQUV4QixPQUFPLGVBQWUsQ0FBQztBQUN6QixDQUFDO0FBS0QsTUFBTSxPQUFPLHNCQUFzQjtJQUNqQyxNQUFNLENBQUMsT0FBTyxDQUNaLE9BQWdDO1FBRWhDLE9BQU87WUFDTCxRQUFRLEVBQUUsc0JBQXNCO1lBQ2hDLFNBQVMsRUFBRTtnQkFDVCxnQkFBZ0IsQ0FBQztvQkFDZixNQUFNLEVBQUUsYUFBYTtvQkFDckIsTUFBTSxFQUFFO3dCQUNOLFFBQVEsRUFBRSxJQUFJO3dCQUNkLGNBQWMsRUFBRSxFQUFFLGFBQWEsRUFBRSxLQUFLLEVBQUU7d0JBQ3hDLEdBQUcsT0FBTyxDQUFDLGVBQWU7cUJBQzNCO2lCQUNGLENBQUM7Z0JBQ0Y7b0JBQ0UsT0FBTyxFQUFFLG9CQUFvQjtvQkFDN0IsUUFBUSxFQUFFLE9BQU8sQ0FBQyxLQUFLO2lCQUN4QjtnQkFDRDtvQkFDRSxPQUFPLEVBQUUsc0JBQXNCO29CQUMvQixRQUFRLEVBQUUsT0FBTztpQkFDbEI7Z0JBQ0Q7b0JBQ0UsT0FBTyxFQUFFLGVBQWU7b0JBQ3hCLFVBQVUsRUFBRSxvQkFBb0I7b0JBQ2hDLElBQUksRUFBRTt3QkFDSixnQkFBZ0I7d0JBQ2hCLG9CQUFvQjt3QkFDcEIsc0JBQXNCO3FCQUN2QjtvQkFDRCxLQUFLLEVBQUUsSUFBSTtpQkFDWjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7dUdBbkNVLHNCQUFzQjt3R0FBdEIsc0JBQXNCLFlBRnZCLGVBQWU7d0dBRWQsc0JBQXNCLFlBRnZCLGVBQWU7OzJGQUVkLHNCQUFzQjtrQkFIbEMsUUFBUTttQkFBQztvQkFDUixPQUFPLEVBQUUsQ0FBQyxlQUFlLENBQUM7aUJBQzNCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQVBQX0lOSVRJQUxJWkVSLFxuICBJbmplY3QsXG4gIEluamVjdGFibGUsXG4gIEluamVjdGlvblRva2VuLFxuICBNb2R1bGVXaXRoUHJvdmlkZXJzLFxuICBOZ01vZHVsZSxcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBUcmFuc2xvY29Mb2FkZXIgfSBmcm9tICcuL3RyYW5zbG9jby5sb2FkZXInO1xuaW1wb3J0IHsgSGFzaE1hcCwgVHJhbnNsYXRpb24gfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFRyYW5zbG9jb01vZHVsZSB9IGZyb20gJy4vdHJhbnNsb2NvLm1vZHVsZSc7XG5pbXBvcnQgeyBwcm92aWRlVHJhbnNsb2NvIH0gZnJvbSAnLi90cmFuc2xvY28ucHJvdmlkZXJzJztcbmltcG9ydCB7IFRyYW5zbG9jb0NvbmZpZyB9IGZyb20gJy4vdHJhbnNsb2NvLmNvbmZpZyc7XG5pbXBvcnQgeyBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSAnLi90cmFuc2xvY28uc2VydmljZSc7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVHJhbnNsb2NvVGVzdGluZ09wdGlvbnMge1xuICB0cmFuc2xvY29Db25maWc/OiBQYXJ0aWFsPFRyYW5zbG9jb0NvbmZpZz47XG4gIHByZWxvYWRMYW5ncz86IGJvb2xlYW47XG4gIGxhbmdzPzogSGFzaE1hcDxUcmFuc2xhdGlvbj47XG59XG5cbmNvbnN0IFRSQU5TTE9DT19URVNUX0xBTkdTID0gbmV3IEluamVjdGlvblRva2VuPEhhc2hNYXA8VHJhbnNsYXRpb24+PihcbiAgJ1RSQU5TTE9DT19URVNUX0xBTkdTIC0gQXZhaWxhYmxlIHRlc3RpbmcgbGFuZ3VhZ2VzJ1xuKTtcbmNvbnN0IFRSQU5TTE9DT19URVNUX09QVElPTlMgPSBuZXcgSW5qZWN0aW9uVG9rZW48VHJhbnNsb2NvVGVzdGluZ09wdGlvbnM+KFxuICAnVFJBTlNMT0NPX1RFU1RfT1BUSU9OUyAtIFRlc3Rpbmcgb3B0aW9ucydcbik7XG5cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBUZXN0aW5nTG9hZGVyIGltcGxlbWVudHMgVHJhbnNsb2NvTG9hZGVyIHtcbiAgY29uc3RydWN0b3IoXG4gICAgQEluamVjdChUUkFOU0xPQ09fVEVTVF9MQU5HUykgcHJpdmF0ZSBsYW5nczogSGFzaE1hcDxUcmFuc2xhdGlvbj5cbiAgKSB7fVxuXG4gIGdldFRyYW5zbGF0aW9uKGxhbmc6IHN0cmluZyk6IE9ic2VydmFibGU8VHJhbnNsYXRpb24+IHwgUHJvbWlzZTxUcmFuc2xhdGlvbj4ge1xuICAgIHJldHVybiBvZih0aGlzLmxhbmdzW2xhbmddKTtcbiAgfVxufVxuXG5leHBvcnQgZnVuY3Rpb24gaW5pdFRyYW5zbG9jb1NlcnZpY2UoXG4gIHNlcnZpY2U6IFRyYW5zbG9jb1NlcnZpY2UsXG4gIGxhbmdzOiBIYXNoTWFwPFRyYW5zbGF0aW9uPiA9IHt9LFxuICBvcHRpb25zOiBUcmFuc2xvY29UZXN0aW5nT3B0aW9uc1xuKSB7XG4gIGNvbnN0IHByZWxvYWRBbGxMYW5ncyA9ICgpID0+XG4gICAgb3B0aW9ucy5wcmVsb2FkTGFuZ3NcbiAgICAgID8gUHJvbWlzZS5hbGwoXG4gICAgICAgICAgT2JqZWN0LmtleXMobGFuZ3MpLm1hcCgobGFuZykgPT4gc2VydmljZS5sb2FkKGxhbmcpLnRvUHJvbWlzZSgpKVxuICAgICAgICApXG4gICAgICA6IFByb21pc2UucmVzb2x2ZSgpO1xuXG4gIHJldHVybiBwcmVsb2FkQWxsTGFuZ3M7XG59XG5cbkBOZ01vZHVsZSh7XG4gIGV4cG9ydHM6IFtUcmFuc2xvY29Nb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBUcmFuc2xvY29UZXN0aW5nTW9kdWxlIHtcbiAgc3RhdGljIGZvclJvb3QoXG4gICAgb3B0aW9uczogVHJhbnNsb2NvVGVzdGluZ09wdGlvbnNcbiAgKTogTW9kdWxlV2l0aFByb3ZpZGVyczxUcmFuc2xvY29UZXN0aW5nTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBUcmFuc2xvY29UZXN0aW5nTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIHByb3ZpZGVUcmFuc2xvY28oe1xuICAgICAgICAgIGxvYWRlcjogVGVzdGluZ0xvYWRlcixcbiAgICAgICAgICBjb25maWc6IHtcbiAgICAgICAgICAgIHByb2RNb2RlOiB0cnVlLFxuICAgICAgICAgICAgbWlzc2luZ0hhbmRsZXI6IHsgbG9nTWlzc2luZ0tleTogZmFsc2UgfSxcbiAgICAgICAgICAgIC4uLm9wdGlvbnMudHJhbnNsb2NvQ29uZmlnLFxuICAgICAgICAgIH0sXG4gICAgICAgIH0pLFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogVFJBTlNMT0NPX1RFU1RfTEFOR1MsXG4gICAgICAgICAgdXNlVmFsdWU6IG9wdGlvbnMubGFuZ3MsXG4gICAgICAgIH0sXG4gICAgICAgIHtcbiAgICAgICAgICBwcm92aWRlOiBUUkFOU0xPQ09fVEVTVF9PUFRJT05TLFxuICAgICAgICAgIHVzZVZhbHVlOiBvcHRpb25zLFxuICAgICAgICB9LFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogQVBQX0lOSVRJQUxJWkVSLFxuICAgICAgICAgIHVzZUZhY3Rvcnk6IGluaXRUcmFuc2xvY29TZXJ2aWNlLFxuICAgICAgICAgIGRlcHM6IFtcbiAgICAgICAgICAgIFRyYW5zbG9jb1NlcnZpY2UsXG4gICAgICAgICAgICBUUkFOU0xPQ09fVEVTVF9MQU5HUyxcbiAgICAgICAgICAgIFRSQU5TTE9DT19URVNUX09QVElPTlMsXG4gICAgICAgICAgXSxcbiAgICAgICAgICBtdWx0aTogdHJ1ZSxcbiAgICAgICAgfSxcbiAgICAgIF0sXG4gICAgfTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
export const TRANSLOCO_CONFIG = new InjectionToken('TRANSLOCO_CONFIG', {
|
|
3
|
+
providedIn: 'root',
|
|
4
|
+
factory: () => defaultConfig,
|
|
5
|
+
});
|
|
6
|
+
export const defaultConfig = {
|
|
7
|
+
defaultLang: 'en',
|
|
8
|
+
reRenderOnLangChange: false,
|
|
9
|
+
prodMode: false,
|
|
10
|
+
failedRetries: 2,
|
|
11
|
+
fallbackLang: [],
|
|
12
|
+
availableLangs: [],
|
|
13
|
+
missingHandler: {
|
|
14
|
+
logMissingKey: true,
|
|
15
|
+
useFallbackTranslation: false,
|
|
16
|
+
allowEmpty: false,
|
|
17
|
+
},
|
|
18
|
+
flatten: {
|
|
19
|
+
aot: false,
|
|
20
|
+
},
|
|
21
|
+
interpolation: ['{{', '}}'],
|
|
22
|
+
};
|
|
23
|
+
export function translocoConfig(config = {}) {
|
|
24
|
+
return {
|
|
25
|
+
...defaultConfig,
|
|
26
|
+
...config,
|
|
27
|
+
missingHandler: {
|
|
28
|
+
...defaultConfig.missingHandler,
|
|
29
|
+
...config.missingHandler,
|
|
30
|
+
},
|
|
31
|
+
flatten: {
|
|
32
|
+
...defaultConfig.flatten,
|
|
33
|
+
...config.flatten,
|
|
34
|
+
},
|
|
35
|
+
};
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsb2NvLmNvbmZpZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvdHJhbnNsb2NvL3NyYy9saWIvdHJhbnNsb2NvLmNvbmZpZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBc0IvQyxNQUFNLENBQUMsTUFBTSxnQkFBZ0IsR0FBRyxJQUFJLGNBQWMsQ0FDaEQsa0JBQWtCLEVBQ2xCO0lBQ0UsVUFBVSxFQUFFLE1BQU07SUFDbEIsT0FBTyxFQUFFLEdBQUcsRUFBRSxDQUFDLGFBQWE7Q0FDN0IsQ0FDRixDQUFDO0FBRUYsTUFBTSxDQUFDLE1BQU0sYUFBYSxHQUFvQjtJQUM1QyxXQUFXLEVBQUUsSUFBSTtJQUNqQixvQkFBb0IsRUFBRSxLQUFLO0lBQzNCLFFBQVEsRUFBRSxLQUFLO0lBQ2YsYUFBYSxFQUFFLENBQUM7SUFDaEIsWUFBWSxFQUFFLEVBQUU7SUFDaEIsY0FBYyxFQUFFLEVBQUU7SUFDbEIsY0FBYyxFQUFFO1FBQ2QsYUFBYSxFQUFFLElBQUk7UUFDbkIsc0JBQXNCLEVBQUUsS0FBSztRQUM3QixVQUFVLEVBQUUsS0FBSztLQUNsQjtJQUNELE9BQU8sRUFBRTtRQUNQLEdBQUcsRUFBRSxLQUFLO0tBQ1g7SUFDRCxhQUFhLEVBQUUsQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDO0NBQzVCLENBQUM7QUFVRixNQUFNLFVBQVUsZUFBZSxDQUM3QixTQUFpQyxFQUFFO0lBRW5DLE9BQU87UUFDTCxHQUFHLGFBQWE7UUFDaEIsR0FBRyxNQUFNO1FBQ1QsY0FBYyxFQUFFO1lBQ2QsR0FBRyxhQUFhLENBQUMsY0FBYztZQUMvQixHQUFHLE1BQU0sQ0FBQyxjQUFjO1NBQ3pCO1FBQ0QsT0FBTyxFQUFFO1lBQ1AsR0FBRyxhQUFhLENBQUMsT0FBTztZQUN4QixHQUFHLE1BQU0sQ0FBQyxPQUFPO1NBQ2xCO0tBQ0YsQ0FBQztBQUNKLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBBdmFpbGFibGVMYW5ncyB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zbG9jb0NvbmZpZyB7XG4gIGRlZmF1bHRMYW5nOiBzdHJpbmc7XG4gIHJlUmVuZGVyT25MYW5nQ2hhbmdlOiBib29sZWFuO1xuICBwcm9kTW9kZTogYm9vbGVhbjtcbiAgZmFsbGJhY2tMYW5nPzogc3RyaW5nIHwgc3RyaW5nW107XG4gIGZhaWxlZFJldHJpZXM6IG51bWJlcjtcbiAgYXZhaWxhYmxlTGFuZ3M6IEF2YWlsYWJsZUxhbmdzO1xuICBmbGF0dGVuOiB7XG4gICAgYW90OiBib29sZWFuO1xuICB9O1xuICBtaXNzaW5nSGFuZGxlcjoge1xuICAgIGxvZ01pc3NpbmdLZXk6IGJvb2xlYW47XG4gICAgdXNlRmFsbGJhY2tUcmFuc2xhdGlvbjogYm9vbGVhbjtcbiAgICBhbGxvd0VtcHR5OiBib29sZWFuO1xuICB9O1xuICBpbnRlcnBvbGF0aW9uOiBbc3RyaW5nLCBzdHJpbmddO1xufVxuXG5leHBvcnQgY29uc3QgVFJBTlNMT0NPX0NPTkZJRyA9IG5ldyBJbmplY3Rpb25Ub2tlbjxUcmFuc2xvY29Db25maWc+KFxuICAnVFJBTlNMT0NPX0NPTkZJRycsXG4gIHtcbiAgICBwcm92aWRlZEluOiAncm9vdCcsXG4gICAgZmFjdG9yeTogKCkgPT4gZGVmYXVsdENvbmZpZyxcbiAgfVxuKTtcblxuZXhwb3J0IGNvbnN0IGRlZmF1bHRDb25maWc6IFRyYW5zbG9jb0NvbmZpZyA9IHtcbiAgZGVmYXVsdExhbmc6ICdlbicsXG4gIHJlUmVuZGVyT25MYW5nQ2hhbmdlOiBmYWxzZSxcbiAgcHJvZE1vZGU6IGZhbHNlLFxuICBmYWlsZWRSZXRyaWVzOiAyLFxuICBmYWxsYmFja0xhbmc6IFtdLFxuICBhdmFpbGFibGVMYW5nczogW10sXG4gIG1pc3NpbmdIYW5kbGVyOiB7XG4gICAgbG9nTWlzc2luZ0tleTogdHJ1ZSxcbiAgICB1c2VGYWxsYmFja1RyYW5zbGF0aW9uOiBmYWxzZSxcbiAgICBhbGxvd0VtcHR5OiBmYWxzZSxcbiAgfSxcbiAgZmxhdHRlbjoge1xuICAgIGFvdDogZmFsc2UsXG4gIH0sXG4gIGludGVycG9sYXRpb246IFsne3snLCAnfX0nXSxcbn07XG5cbnR5cGUgRGVlcFBhcnRpYWw8VD4gPSBUIGV4dGVuZHMgQXJyYXk8YW55PlxuICA/IFRcbiAgOiBUIGV4dGVuZHMgb2JqZWN0XG4gID8geyBbUCBpbiBrZXlvZiBUXT86IERlZXBQYXJ0aWFsPFRbUF0+IH1cbiAgOiBUO1xuXG5leHBvcnQgdHlwZSBQYXJ0aWFsVHJhbnNsb2NvQ29uZmlnID0gRGVlcFBhcnRpYWw8VHJhbnNsb2NvQ29uZmlnPjtcblxuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zbG9jb0NvbmZpZyhcbiAgY29uZmlnOiBQYXJ0aWFsVHJhbnNsb2NvQ29uZmlnID0ge31cbik6IFRyYW5zbG9jb0NvbmZpZyB7XG4gIHJldHVybiB7XG4gICAgLi4uZGVmYXVsdENvbmZpZyxcbiAgICAuLi5jb25maWcsXG4gICAgbWlzc2luZ0hhbmRsZXI6IHtcbiAgICAgIC4uLmRlZmF1bHRDb25maWcubWlzc2luZ0hhbmRsZXIsXG4gICAgICAuLi5jb25maWcubWlzc2luZ0hhbmRsZXIsXG4gICAgfSxcbiAgICBmbGF0dGVuOiB7XG4gICAgICAuLi5kZWZhdWx0Q29uZmlnLmZsYXR0ZW4sXG4gICAgICAuLi5jb25maWcuZmxhdHRlbixcbiAgICB9LFxuICB9O1xufVxuIl19
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { ChangeDetectorRef, Directive, ElementRef, inject, Input, Renderer2, TemplateRef, ViewContainerRef, } from '@angular/core';
|
|
2
|
+
import { forkJoin, switchMap } from 'rxjs';
|
|
3
|
+
import { TemplateHandler } from './template-handler';
|
|
4
|
+
import { TRANSLOCO_LANG } from './transloco-lang';
|
|
5
|
+
import { TRANSLOCO_LOADING_TEMPLATE } from './transloco-loading-template';
|
|
6
|
+
import { TRANSLOCO_SCOPE } from './transloco-scope';
|
|
7
|
+
import { TranslocoService } from './transloco.service';
|
|
8
|
+
import { listenOrNotOperator, resolveInlineLoader, shouldListenToLangChanges, } from './shared';
|
|
9
|
+
import { LangResolver } from './lang-resolver';
|
|
10
|
+
import { ScopeResolver } from './scope-resolver';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
export class TranslocoDirective {
|
|
13
|
+
service = inject(TranslocoService);
|
|
14
|
+
tpl = inject(TemplateRef, {
|
|
15
|
+
optional: true,
|
|
16
|
+
});
|
|
17
|
+
providerLang = inject(TRANSLOCO_LANG, { optional: true });
|
|
18
|
+
providerScope = inject(TRANSLOCO_SCOPE, { optional: true });
|
|
19
|
+
providedLoadingTpl = inject(TRANSLOCO_LOADING_TEMPLATE, {
|
|
20
|
+
optional: true,
|
|
21
|
+
});
|
|
22
|
+
cdr = inject(ChangeDetectorRef);
|
|
23
|
+
host = inject(ElementRef);
|
|
24
|
+
vcr = inject(ViewContainerRef);
|
|
25
|
+
renderer = inject(Renderer2);
|
|
26
|
+
subscription = null;
|
|
27
|
+
view;
|
|
28
|
+
translationMemo = {};
|
|
29
|
+
key;
|
|
30
|
+
params = {};
|
|
31
|
+
inlineScope;
|
|
32
|
+
inlineRead;
|
|
33
|
+
inlineLang;
|
|
34
|
+
inlineTpl;
|
|
35
|
+
currentLang;
|
|
36
|
+
loaderTplHandler;
|
|
37
|
+
// Whether we already rendered the view once
|
|
38
|
+
initialized = false;
|
|
39
|
+
path;
|
|
40
|
+
langResolver = new LangResolver();
|
|
41
|
+
scopeResolver = new ScopeResolver(this.service);
|
|
42
|
+
strategy = this.tpl === null ? 'attribute' : 'structural';
|
|
43
|
+
static ngTemplateContextGuard(dir, ctx) {
|
|
44
|
+
return true;
|
|
45
|
+
}
|
|
46
|
+
ngOnInit() {
|
|
47
|
+
const listenToLangChange = shouldListenToLangChanges(this.service, this.providerLang || this.inlineLang);
|
|
48
|
+
this.subscription = this.service.langChanges$
|
|
49
|
+
.pipe(switchMap((activeLang) => {
|
|
50
|
+
const lang = this.langResolver.resolve({
|
|
51
|
+
inline: this.inlineLang,
|
|
52
|
+
provider: this.providerLang,
|
|
53
|
+
active: activeLang,
|
|
54
|
+
});
|
|
55
|
+
return Array.isArray(this.providerScope)
|
|
56
|
+
? forkJoin(this.providerScope.map((providerScope) => this.resolveScope(lang, providerScope)))
|
|
57
|
+
: this.resolveScope(lang, this.providerScope);
|
|
58
|
+
}), listenOrNotOperator(listenToLangChange))
|
|
59
|
+
.subscribe(() => {
|
|
60
|
+
this.currentLang = this.langResolver.resolveLangBasedOnScope(this.path);
|
|
61
|
+
this.strategy === 'attribute'
|
|
62
|
+
? this.attributeStrategy()
|
|
63
|
+
: this.structuralStrategy(this.currentLang, this.inlineRead);
|
|
64
|
+
this.cdr.markForCheck();
|
|
65
|
+
this.initialized = true;
|
|
66
|
+
});
|
|
67
|
+
if (!this.initialized) {
|
|
68
|
+
const loadingContent = this.resolveLoadingContent();
|
|
69
|
+
if (loadingContent) {
|
|
70
|
+
this.loaderTplHandler = new TemplateHandler(loadingContent, this.vcr);
|
|
71
|
+
this.loaderTplHandler.attachView();
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
ngOnChanges(changes) {
|
|
76
|
+
// We need to support dynamic keys/params, so if this is not the first change CD cycle
|
|
77
|
+
// we need to run the function again in order to update the value
|
|
78
|
+
if (this.strategy === 'attribute') {
|
|
79
|
+
const notInit = Object.keys(changes).some((v) => !changes[v].firstChange);
|
|
80
|
+
notInit && this.attributeStrategy();
|
|
81
|
+
}
|
|
82
|
+
}
|
|
83
|
+
attributeStrategy() {
|
|
84
|
+
this.detachLoader();
|
|
85
|
+
this.renderer.setProperty(this.host.nativeElement, 'innerText', this.service.translate(this.key, this.params, this.currentLang));
|
|
86
|
+
}
|
|
87
|
+
structuralStrategy(lang, read) {
|
|
88
|
+
this.translationMemo = {};
|
|
89
|
+
if (this.view) {
|
|
90
|
+
// when the lang changes we need to change the reference so Angular will update the view
|
|
91
|
+
this.view.context['$implicit'] = this.getTranslateFn(lang, read);
|
|
92
|
+
this.view.context['currentLang'] = this.currentLang;
|
|
93
|
+
}
|
|
94
|
+
else {
|
|
95
|
+
this.detachLoader();
|
|
96
|
+
this.view = this.vcr.createEmbeddedView(this.tpl, {
|
|
97
|
+
$implicit: this.getTranslateFn(lang, read),
|
|
98
|
+
currentLang: this.currentLang,
|
|
99
|
+
});
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
getTranslateFn(lang, read) {
|
|
103
|
+
return (key, params) => {
|
|
104
|
+
const withRead = read ? `${read}.${key}` : key;
|
|
105
|
+
const withParams = params
|
|
106
|
+
? `${withRead}${JSON.stringify(params)}`
|
|
107
|
+
: withRead;
|
|
108
|
+
if (Object.prototype.hasOwnProperty.call(this.translationMemo, withParams)) {
|
|
109
|
+
return this.translationMemo[withParams].value;
|
|
110
|
+
}
|
|
111
|
+
this.translationMemo[withParams] = {
|
|
112
|
+
params,
|
|
113
|
+
value: this.service.translate(withRead, params, lang),
|
|
114
|
+
};
|
|
115
|
+
return this.translationMemo[withParams].value;
|
|
116
|
+
};
|
|
117
|
+
}
|
|
118
|
+
resolveLoadingContent() {
|
|
119
|
+
return this.inlineTpl || this.providedLoadingTpl;
|
|
120
|
+
}
|
|
121
|
+
ngOnDestroy() {
|
|
122
|
+
if (this.subscription) {
|
|
123
|
+
this.subscription.unsubscribe();
|
|
124
|
+
// Caretaker note: it's important to clean up references to subscriptions since they save the `next`
|
|
125
|
+
// callback within its `destination` property, preventing classes from being GC'd.
|
|
126
|
+
this.subscription = null;
|
|
127
|
+
}
|
|
128
|
+
}
|
|
129
|
+
detachLoader() {
|
|
130
|
+
this.loaderTplHandler?.detachView();
|
|
131
|
+
}
|
|
132
|
+
resolveScope(lang, providerScope) {
|
|
133
|
+
const resolvedScope = this.scopeResolver.resolve({
|
|
134
|
+
inline: this.inlineScope,
|
|
135
|
+
provider: providerScope,
|
|
136
|
+
});
|
|
137
|
+
this.path = this.langResolver.resolveLangPath(lang, resolvedScope);
|
|
138
|
+
const inlineLoader = resolveInlineLoader(providerScope, resolvedScope);
|
|
139
|
+
return this.service._loadDependencies(this.path, inlineLoader);
|
|
140
|
+
}
|
|
141
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: TranslocoDirective, deps: [], target: i0.ɵɵFactoryTarget.Directive });
|
|
142
|
+
static ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.0.9", type: TranslocoDirective, isStandalone: true, selector: "[transloco]", inputs: { key: ["transloco", "key"], params: ["translocoParams", "params"], inlineScope: ["translocoScope", "inlineScope"], inlineRead: ["translocoRead", "inlineRead"], inlineLang: ["translocoLang", "inlineLang"], inlineTpl: ["translocoLoadingTpl", "inlineTpl"] }, usesOnChanges: true, ngImport: i0 });
|
|
143
|
+
}
|
|
144
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: TranslocoDirective, decorators: [{
|
|
145
|
+
type: Directive,
|
|
146
|
+
args: [{
|
|
147
|
+
selector: '[transloco]',
|
|
148
|
+
standalone: true,
|
|
149
|
+
}]
|
|
150
|
+
}], propDecorators: { key: [{
|
|
151
|
+
type: Input,
|
|
152
|
+
args: ['transloco']
|
|
153
|
+
}], params: [{
|
|
154
|
+
type: Input,
|
|
155
|
+
args: ['translocoParams']
|
|
156
|
+
}], inlineScope: [{
|
|
157
|
+
type: Input,
|
|
158
|
+
args: ['translocoScope']
|
|
159
|
+
}], inlineRead: [{
|
|
160
|
+
type: Input,
|
|
161
|
+
args: ['translocoRead']
|
|
162
|
+
}], inlineLang: [{
|
|
163
|
+
type: Input,
|
|
164
|
+
args: ['translocoLang']
|
|
165
|
+
}], inlineTpl: [{
|
|
166
|
+
type: Input,
|
|
167
|
+
args: ['translocoLoadingTpl']
|
|
168
|
+
}] } });
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsb2NvLmRpcmVjdGl2ZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvdHJhbnNsb2NvL3NyYy9saWIvdHJhbnNsb2NvLmRpcmVjdGl2ZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0wsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBRVYsTUFBTSxFQUNOLEtBQUssRUFJTCxTQUFTLEVBRVQsV0FBVyxFQUNYLGdCQUFnQixHQUNqQixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsUUFBUSxFQUE0QixTQUFTLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFFckUsT0FBTyxFQUFXLGVBQWUsRUFBRSxNQUFNLG9CQUFvQixDQUFDO0FBQzlELE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUNsRCxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFDcEQsT0FBTyxFQUFFLGdCQUFnQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFdkQsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIseUJBQXlCLEdBQzFCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7O0FBWWpELE1BQU0sT0FBTyxrQkFBa0I7SUFDckIsT0FBTyxHQUFHLE1BQU0sQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQ25DLEdBQUcsR0FBRyxNQUFNLENBQTJCLFdBQVcsRUFBRTtRQUMxRCxRQUFRLEVBQUUsSUFBSTtLQUNmLENBQUMsQ0FBQztJQUNLLFlBQVksR0FBRyxNQUFNLENBQUMsY0FBYyxFQUFFLEVBQUUsUUFBUSxFQUFFLElBQUksRUFB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QWtCOzJGQUFsQixrQkFBa0I7OzJGQUFsQixrQkFBa0I7a0JBSjlCLFNBQVM7bUJBQUM7b0JBQ1QsUUFBUSxFQUFFLGFBQWE7b0JBQ3ZCLFVBQVUsRUFBRSxJQUFJO2lCQUNqQjs4QkF5QnFCLEdBQUc7c0JBQXRCLEtBQUs7dUJBQUMsV0FBVztnQkFDUSxNQUFNO3NCQUEvQixLQUFLO3VCQUFDLGlCQUFpQjtnQkFDQyxXQUFXO3NCQUFuQyxLQUFLO3VCQUFDLGdCQUFnQjtnQkFDQyxVQUFVO3NCQUFqQyxLQUFLO3VCQUFDLGVBQWU7Z0JBQ0UsVUFBVTtzQkFBakMsS0FBSzt1QkFBQyxlQUFlO2dCQUNRLFNBQVM7c0JBQXRDLEtBQUs7dUJBQUMscUJBQXFCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIERpcmVjdGl2ZSxcbiAgRWxlbWVudFJlZixcbiAgRW1iZWRkZWRWaWV3UmVmLFxuICBpbmplY3QsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE9uRGVzdHJveSxcbiAgT25Jbml0LFxuICBSZW5kZXJlcjIsXG4gIFNpbXBsZUNoYW5nZXMsXG4gIFRlbXBsYXRlUmVmLFxuICBWaWV3Q29udGFpbmVyUmVmLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IGZvcmtKb2luLCBPYnNlcnZhYmxlLCBTdWJzY3JpcHRpb24sIHN3aXRjaE1hcCB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBDb250ZW50LCBUZW1wbGF0ZUhhbmRsZXIgfSBmcm9tICcuL3RlbXBsYXRlLWhhbmRsZXInO1xuaW1wb3J0IHsgVFJBTlNMT0NPX0xBTkcgfSBmcm9tICcuL3RyYW5zbG9jby1sYW5nJztcbmltcG9ydCB7IFRSQU5TTE9DT19MT0FESU5HX1RFTVBMQVRFIH0gZnJvbSAnLi90cmFuc2xvY28tbG9hZGluZy10ZW1wbGF0ZSc7XG5pbXBvcnQgeyBUUkFOU0xPQ09fU0NPUEUgfSBmcm9tICcuL3RyYW5zbG9jby1zY29wZSc7XG5pbXBvcnQgeyBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSAnLi90cmFuc2xvY28uc2VydmljZSc7XG5pbXBvcnQgeyBIYXNoTWFwLCBPckFycmF5LCBUcmFuc2xhdGlvbiwgVHJhbnNsb2NvU2NvcGUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7XG4gIGxpc3Rlbk9yTm90T3BlcmF0b3IsXG4gIHJlc29sdmVJbmxpbmVMb2FkZXIsXG4gIHNob3VsZExpc3RlblRvTGFuZ0NoYW5nZXMsXG59IGZyb20gJy4vc2hhcmVkJztcbmltcG9ydCB7IExhbmdSZXNvbHZlciB9IGZyb20gJy4vbGFuZy1yZXNvbHZlcic7XG5pbXBvcnQgeyBTY29wZVJlc29sdmVyIH0gZnJvbSAnLi9zY29wZS1yZXNvbHZlcic7XG5cbnR5cGUgVHJhbnNsYXRlRm4gPSAoa2V5OiBzdHJpbmcsIHBhcmFtcz86IEhhc2hNYXApID0+IGFueTtcbmludGVyZmFjZSBWaWV3Q29udGV4dCB7XG4gICRpbXBsaWNpdDogVHJhbnNsYXRlRm47XG4gIGN1cnJlbnRMYW5nOiBzdHJpbmc7XG59XG5cbkBEaXJlY3RpdmUoe1xuICBzZWxlY3RvcjogJ1t0cmFuc2xvY29dJyxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgVHJhbnNsb2NvRGlyZWN0aXZlIGltcGxlbWVudHMgT25Jbml0LCBPbkRlc3Ryb3ksIE9uQ2hhbmdlcyB7XG4gIHByaXZhdGUgc2VydmljZSA9IGluamVjdChUcmFuc2xvY29TZXJ2aWNlKTtcbiAgcHJpdmF0ZSB0cGwgPSBpbmplY3Q8VGVtcGxhdGVSZWY8Vmlld0NvbnRleHQ+PihUZW1wbGF0ZVJlZiwge1xuICAgIG9wdGlvbmFsOiB0cnVlLFxuICB9KTtcbiAgcHJpdmF0ZSBwcm92aWRlckxhbmcgPSBpbmplY3QoVFJBTlNMT0NPX0xBTkcsIHsgb3B0aW9uYWw6IHRydWUgfSk7XG4gIHByaXZhdGUgcHJvdmlkZXJTY29wZTogT3JBcnJheTxUcmFuc2xvY29TY29wZT4gfCBudWxsID0gaW5qZWN0KFxuICAgIFRSQU5TTE9DT19TQ09QRSxcbiAgICB7IG9wdGlvbmFsOiB0cnVlIH1cbiAgKTtcbiAgcHJpdmF0ZSBwcm92aWRlZExvYWRpbmdUcGwgPSBpbmplY3QoVFJBTlNMT0NPX0xPQURJTkdfVEVNUExBVEUsIHtcbiAgICBvcHRpb25hbDogdHJ1ZSxcbiAgfSk7XG4gIHByaXZhdGUgY2RyID0gaW5qZWN0KENoYW5nZURldGVjdG9yUmVmKTtcbiAgcHJpdmF0ZSBob3N0ID0gaW5qZWN0KEVsZW1lbnRSZWYpO1xuICBwcml2YXRlIHZjciA9IGluamVjdChWaWV3Q29udGFpbmVyUmVmKTtcbiAgcHJpdmF0ZSByZW5kZXJlciA9IGluamVjdChSZW5kZXJlcjIpO1xuXG4gIHN1YnNjcmlwdGlvbjogU3Vic2NyaXB0aW9uIHwgbnVsbCA9IG51bGw7XG4gIHZpZXc6IEVtYmVkZGVkVmlld1JlZjxWaWV3Q29udGV4dD4gfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSB0cmFuc2xhdGlvbk1lbW86IFJlY29yZDxzdHJpbmcsIHsgdmFsdWU6IGFueTsgcGFyYW1zPzogSGFzaE1hcCB9PiA9XG4gICAge307XG5cbiAgQElucHV0KCd0cmFuc2xvY28nKSBrZXk6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCd0cmFuc2xvY29QYXJhbXMnKSBwYXJhbXM6IEhhc2hNYXAgPSB7fTtcbiAgQElucHV0KCd0cmFuc2xvY29TY29wZScpIGlubGluZVNjb3BlOiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIEBJbnB1dCgndHJhbnNsb2NvUmVhZCcpIGlubGluZVJlYWQ6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgQElucHV0KCd0cmFuc2xvY29MYW5nJykgaW5saW5lTGFuZzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBASW5wdXQoJ3RyYW5zbG9jb0xvYWRpbmdUcGwnKSBpbmxpbmVUcGw6IENvbnRlbnQgfCB1bmRlZmluZWQ7XG5cbiAgcHJpdmF0ZSBjdXJyZW50TGFuZzogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGxvYWRlclRwbEhhbmRsZXI6IFRlbXBsYXRlSGFuZGxlciB8IHVuZGVmaW5lZDtcbiAgLy8gV2hldGhlciB3ZSBhbHJlYWR5IHJlbmRlcmVkIHRoZSB2aWV3IG9uY2VcbiAgcHJpdmF0ZSBpbml0aWFsaXplZCA9IGZhbHNlO1xuICBwcml2YXRlIHBhdGg6IHN0cmluZyB8IHVuZGVmaW5lZDtcbiAgcHJpdmF0ZSBsYW5nUmVzb2x2ZXIgPSBuZXcgTGFuZ1Jlc29sdmVyKCk7XG4gIHByaXZhdGUgc2NvcGVSZXNvbHZlciA9IG5ldyBTY29wZVJlc29sdmVyKHRoaXMuc2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgc3RyYXRlZ3kgPSB0aGlzLnRwbCA9PT0gbnVsbCA/ICdhdHRyaWJ1dGUnIDogJ3N0cnVjdHVyYWwnO1xuXG4gIHN0YXRpYyBuZ1RlbXBsYXRlQ29udGV4dEd1YXJkKFxuICAgIGRpcjogVHJhbnNsb2NvRGlyZWN0aXZlLFxuICAgIGN0eDogdW5rbm93blxuICApOiBjdHggaXMgVmlld0NvbnRleHQge1xuICAgIHJldHVybiB0cnVlO1xuICB9XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgY29uc3QgbGlzdGVuVG9MYW5nQ2hhbmdlID0gc2hvdWxkTGlzdGVuVG9MYW5nQ2hhbmdlcyhcbiAgICAgIHRoaXMuc2VydmljZSxcbiAgICAgIHRoaXMucHJvdmlkZXJMYW5nIHx8IHRoaXMuaW5saW5lTGFuZ1xuICAgICk7XG5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IHRoaXMuc2VydmljZS5sYW5nQ2hhbmdlcyRcbiAgICAgIC5waXBlKFxuICAgICAgICBzd2l0Y2hNYXAoKGFjdGl2ZUxhbmcpID0+IHtcbiAgICAgICAgICBjb25zdCBsYW5nID0gdGhpcy5sYW5nUmVzb2x2ZXIucmVzb2x2ZSh7XG4gICAgICAgICAgICBpbmxpbmU6IHRoaXMuaW5saW5lTGFuZyxcbiAgICAgICAgICAgIHByb3ZpZGVyOiB0aGlzLnByb3ZpZGVyTGFuZyxcbiAgICAgICAgICAgIGFjdGl2ZTogYWN0aXZlTGFuZyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucHJvdmlkZXJTY29wZSlcbiAgICAgICAgICAgID8gZm9ya0pvaW4oXG4gICAgICAgICAgICAgICAgdGhpcy5wcm92aWRlclNjb3BlLm1hcCgocHJvdmlkZXJTY29wZSkgPT5cbiAgICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZVNjb3BlKGxhbmcsIHByb3ZpZGVyU2NvcGUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHRoaXMucmVzb2x2ZVNjb3BlKGxhbmcsIHRoaXMucHJvdmlkZXJTY29wZSk7XG4gICAgICAgIH0pLFxuICAgICAgICBsaXN0ZW5Pck5vdE9wZXJhdG9yKGxpc3RlblRvTGFuZ0NoYW5nZSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICB0aGlzLmN1cnJlbnRMYW5nID0gdGhpcy5sYW5nUmVzb2x2ZXIucmVzb2x2ZUxhbmdCYXNlZE9uU2NvcGUoXG4gICAgICAgICAgdGhpcy5wYXRoIVxuICAgICAgICApO1xuICAgICAgICB0aGlzLnN0cmF0ZWd5ID09PSAnYXR0cmlidXRlJ1xuICAgICAgICAgID8gdGhpcy5hdHRyaWJ1dGVTdHJhdGVneSgpXG4gICAgICAgICAgOiB0aGlzLnN0cnVjdHVyYWxTdHJhdGVneSh0aGlzLmN1cnJlbnRMYW5nLCB0aGlzLmlubGluZVJlYWQpO1xuICAgICAgICB0aGlzLmNkci5tYXJrRm9yQ2hlY2soKTtcbiAgICAgICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7XG4gICAgICB9KTtcblxuICAgIGlmICghdGhpcy5pbml0aWFsaXplZCkge1xuICAgICAgY29uc3QgbG9hZGluZ0NvbnRlbnQgPSB0aGlzLnJlc29sdmVMb2FkaW5nQ29udGVudCgpO1xuICAgICAgaWYgKGxvYWRpbmdDb250ZW50KSB7XG4gICAgICAgIHRoaXMubG9hZGVyVHBsSGFuZGxlciA9IG5ldyBUZW1wbGF0ZUhhbmRsZXIobG9hZGluZ0NvbnRlbnQsIHRoaXMudmNyKTtcbiAgICAgICAgdGhpcy5sb2FkZXJUcGxIYW5kbGVyLmF0dGFjaFZpZXcoKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cblxuICBuZ09uQ2hhbmdlcyhjaGFuZ2VzOiBTaW1wbGVDaGFuZ2VzKSB7XG4gICAgLy8gV2UgbmVlZCB0byBzdXBwb3J0IGR5bmFtaWMga2V5cy9wYXJhbXMsIHNvIGlmIHRoaXMgaXMgbm90IHRoZSBmaXJzdCBjaGFuZ2UgQ0QgY3ljbGVcbiAgICAvLyB3ZSBuZWVkIHRvIHJ1biB0aGUgZnVuY3Rpb24gYWdhaW4gaW4gb3JkZXIgdG8gdXBkYXRlIHRoZSB2YWx1ZVxuICAgIGlmICh0aGlzLnN0cmF0ZWd5ID09PSAnYXR0cmlidXRlJykge1xuICAgICAgY29uc3Qgbm90SW5pdCA9IE9iamVjdC5rZXlzKGNoYW5nZXMpLnNvbWUoKHYpID0+ICFjaGFuZ2VzW3ZdLmZpcnN0Q2hhbmdlKTtcbiAgICAgIG5vdEluaXQgJiYgdGhpcy5hdHRyaWJ1dGVTdHJhdGVneSgpO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXR0cmlidXRlU3RyYXRlZ3koKSB7XG4gICAgdGhpcy5kZXRhY2hMb2FkZXIoKTtcbiAgICB0aGlzLnJlbmRlcmVyLnNldFByb3BlcnR5KFxuICAgICAgdGhpcy5ob3N0Lm5hdGl2ZUVsZW1lbnQsXG4gICAgICAnaW5uZXJUZXh0JyxcbiAgICAgIHRoaXMuc2VydmljZS50cmFuc2xhdGUodGhpcy5rZXkhLCB0aGlzLnBhcmFtcywgdGhpcy5jdXJyZW50TGFuZylcbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBzdHJ1Y3R1cmFsU3RyYXRlZ3kobGFuZzogc3RyaW5nLCByZWFkPzogc3RyaW5nKSB7XG4gICAgdGhpcy50cmFuc2xhdGlvbk1lbW8gPSB7fTtcblxuICAgIGlmICh0aGlzLnZpZXcpIHtcbiAgICAgIC8vIHdoZW4gdGhlIGxhbmcgY2hhbmdlcyB3ZSBuZWVkIHRvIGNoYW5nZSB0aGUgcmVmZXJlbmNlIHNvIEFuZ3VsYXIgd2lsbCB1cGRhdGUgdGhlIHZpZXdcbiAgICAgIHRoaXMudmlldy5jb250ZXh0WyckaW1wbGljaXQnXSA9IHRoaXMuZ2V0VHJhbnNsYXRlRm4obGFuZywgcmVhZCk7XG4gICAgICB0aGlzLnZpZXcuY29udGV4dFsnY3VycmVudExhbmcnXSA9IHRoaXMuY3VycmVudExhbmchO1xuICAgIH0gZWxzZSB7XG4gICAgICB0aGlzLmRldGFjaExvYWRlcigpO1xuICAgICAgdGhpcy52aWV3ID0gdGhpcy52Y3IuY3JlYXRlRW1iZWRkZWRWaWV3KHRoaXMudHBsISwge1xuICAgICAgICAkaW1wbGljaXQ6IHRoaXMuZ2V0VHJhbnNsYXRlRm4obGFuZywgcmVhZCksXG4gICAgICAgIGN1cnJlbnRMYW5nOiB0aGlzLmN1cnJlbnRMYW5nISxcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxuXG4gIHByb3RlY3RlZCBnZXRUcmFuc2xhdGVGbihcbiAgICBsYW5nOiBzdHJpbmcsXG4gICAgcmVhZDogc3RyaW5nIHwgdW5kZWZpbmVkXG4gICk6IFRyYW5zbGF0ZUZuIHtcbiAgICByZXR1cm4gKGtleTogc3RyaW5nLCBwYXJhbXM/OiBIYXNoTWFwKSA9PiB7XG4gICAgICBjb25zdCB3aXRoUmVhZCA9IHJlYWQgPyBgJHtyZWFkfS4ke2tleX1gIDoga2V5O1xuICAgICAgY29uc3Qgd2l0aFBhcmFtcyA9IHBhcmFtc1xuICAgICAgICA/IGAke3dpdGhSZWFkfSR7SlNPTi5zdHJpbmdpZnkocGFyYW1zKX1gXG4gICAgICAgIDogd2l0aFJlYWQ7XG5cbiAgICAgIGlmIChcbiAgICAgICAgT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKHRoaXMudHJhbnNsYXRpb25NZW1vLCB3aXRoUGFyYW1zKVxuICAgICAgKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnRyYW5zbGF0aW9uTWVtb1t3aXRoUGFyYW1zXS52YWx1ZTtcbiAgICAgIH1cblxuICAgICAgdGhpcy50cmFuc2xhdGlvbk1lbW9bd2l0aFBhcmFtc10gPSB7XG4gICAgICAgIHBhcmFtcyxcbiAgICAgICAgdmFsdWU6IHRoaXMuc2VydmljZS50cmFuc2xhdGUod2l0aFJlYWQsIHBhcmFtcywgbGFuZyksXG4gICAgICB9O1xuXG4gICAgICByZXR1cm4gdGhpcy50cmFuc2xhdGlvbk1lbW9bd2l0aFBhcmFtc10udmFsdWU7XG4gICAgfTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZUxvYWRpbmdDb250ZW50KCkge1xuICAgIHJldHVybiB0aGlzLmlubGluZVRwbCB8fCB0aGlzLnByb3ZpZGVkTG9hZGluZ1RwbDtcbiAgfVxuXG4gIG5nT25EZXN0cm95KCkge1xuICAgIGlmICh0aGlzLnN1YnNjcmlwdGlvbikge1xuICAgICAgdGhpcy5zdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTtcbiAgICAgIC8vIENhcmV0YWtlciBub3RlOiBpdCdzIGltcG9ydGFudCB0byBjbGVhbiB1cCByZWZlcmVuY2VzIHRvIHN1YnNjcmlwdGlvbnMgc2luY2UgdGhleSBzYXZlIHRoZSBgbmV4dGBcbiAgICAgIC8vIGNhbGxiYWNrIHdpdGhpbiBpdHMgYGRlc3RpbmF0aW9uYCBwcm9wZXJ0eSwgcHJldmVudGluZyBjbGFzc2VzIGZyb20gYmVpbmcgR0MnZC5cbiAgICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gbnVsbDtcbiAgICB9XG4gIH1cblxuICBwcml2YXRlIGRldGFjaExvYWRlcigpIHtcbiAgICB0aGlzLmxvYWRlclRwbEhhbmRsZXI/LmRldGFjaFZpZXcoKTtcbiAgfVxuXG4gIHByaXZhdGUgcmVzb2x2ZVNjb3BlKFxuICAgIGxhbmc6IHN0cmluZyxcbiAgICBwcm92aWRlclNjb3BlOiBUcmFuc2xvY29TY29wZSB8IG51bGxcbiAgKTogT2JzZXJ2YWJsZTxUcmFuc2xhdGlvbiB8IFRyYW5zbGF0aW9uW10+IHtcbiAgICBjb25zdCByZXNvbHZlZFNjb3BlID0gdGhpcy5zY29wZVJlc29sdmVyLnJlc29sdmUoe1xuICAgICAgaW5saW5lOiB0aGlzLmlubGluZVNjb3BlLFxuICAgICAgcHJvdmlkZXI6IHByb3ZpZGVyU2NvcGUsXG4gICAgfSk7XG4gICAgdGhpcy5wYXRoID0gdGhpcy5sYW5nUmVzb2x2ZXIucmVzb2x2ZUxhbmdQYXRoKGxhbmcsIHJlc29sdmVkU2NvcGUpO1xuICAgIGNvbnN0IGlubGluZUxvYWRlciA9IHJlc29sdmVJbmxpbmVMb2FkZXIocHJvdmlkZXJTY29wZSwgcmVzb2x2ZWRTY29wZSk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLl9sb2FkRGVwZW5kZW5jaWVzKHRoaXMucGF0aCwgaW5saW5lTG9hZGVyKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { InjectionToken, Injectable } from '@angular/core';
|
|
2
|
+
import * as i0 from "@angular/core";
|
|
3
|
+
export const TRANSLOCO_INTERCEPTOR = new InjectionToken('TRANSLOCO_INTERCEPTOR');
|
|
4
|
+
export class DefaultInterceptor {
|
|
5
|
+
preSaveTranslation(translation) {
|
|
6
|
+
return translation;
|
|
7
|
+
}
|
|
8
|
+
preSaveTranslationKey(_, value) {
|
|
9
|
+
return value;
|
|
10
|
+
}
|
|
11
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: DefaultInterceptor, deps: [], target: i0.ɵɵFactoryTarget.Injectable });
|
|
12
|
+
static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: DefaultInterceptor });
|
|
13
|
+
}
|
|
14
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: DefaultInterceptor, decorators: [{
|
|
15
|
+
type: Injectable
|
|
16
|
+
}] });
|
|
17
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsb2NvLmludGVyY2VwdG9yLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vbGlicy90cmFuc2xvY28vc3JjL2xpYi90cmFuc2xvY28uaW50ZXJjZXB0b3IudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7O0FBSTNELE1BQU0sQ0FBQyxNQUFNLHFCQUFxQixHQUFHLElBQUksY0FBYyxDQUNyRCx1QkFBdUIsQ0FDeEIsQ0FBQztBQVNGLE1BQU0sT0FBTyxrQkFBa0I7SUFDN0Isa0JBQWtCLENBQUMsV0FBd0I7UUFDekMsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQztJQUVELHFCQUFxQixDQUFDLENBQVMsRUFBRSxLQUFhO1FBQzVDLE9BQU8sS0FBSyxDQUFDO0lBQ2YsQ0FBQzt1R0FQVSxrQkFBa0I7MkdBQWxCLGtCQUFrQjs7MkZBQWxCLGtCQUFrQjtrQkFEOUIsVUFBVSIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuLCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmltcG9ydCB7IFRyYW5zbGF0aW9uIH0gZnJvbSAnLi90eXBlcyc7XG5cbmV4cG9ydCBjb25zdCBUUkFOU0xPQ09fSU5URVJDRVBUT1IgPSBuZXcgSW5qZWN0aW9uVG9rZW48VHJhbnNsb2NvSW50ZXJjZXB0b3I+KFxuICAnVFJBTlNMT0NPX0lOVEVSQ0VQVE9SJ1xuKTtcblxuZXhwb3J0IGludGVyZmFjZSBUcmFuc2xvY29JbnRlcmNlcHRvciB7XG4gIHByZVNhdmVUcmFuc2xhdGlvbih0cmFuc2xhdGlvbjogVHJhbnNsYXRpb24sIGxhbmc6IHN0cmluZyk6IFRyYW5zbGF0aW9uO1xuXG4gIHByZVNhdmVUcmFuc2xhdGlvbktleShrZXk6IHN0cmluZywgdmFsdWU6IHN0cmluZywgbGFuZzogc3RyaW5nKTogc3RyaW5nO1xufVxuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgRGVmYXVsdEludGVyY2VwdG9yIGltcGxlbWVudHMgVHJhbnNsb2NvSW50ZXJjZXB0b3Ige1xuICBwcmVTYXZlVHJhbnNsYXRpb24odHJhbnNsYXRpb246IFRyYW5zbGF0aW9uKTogVHJhbnNsYXRpb24ge1xuICAgIHJldHVybiB0cmFuc2xhdGlvbjtcbiAgfVxuXG4gIHByZVNhdmVUcmFuc2xhdGlvbktleShfOiBzdHJpbmcsIHZhbHVlOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIHJldHVybiB2YWx1ZTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import { InjectionToken } from '@angular/core';
|
|
2
|
+
import { of } from 'rxjs';
|
|
3
|
+
export class DefaultLoader {
|
|
4
|
+
translations;
|
|
5
|
+
constructor(translations) {
|
|
6
|
+
this.translations = translations;
|
|
7
|
+
}
|
|
8
|
+
getTranslation(lang) {
|
|
9
|
+
return of(this.translations.get(lang) || {});
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
export const TRANSLOCO_LOADER = new InjectionToken('TRANSLOCO_LOADER');
|
|
13
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsb2NvLmxvYWRlci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvdHJhbnNsb2NvL3NyYy9saWIvdHJhbnNsb2NvLmxvYWRlci50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBQy9DLE9BQU8sRUFBYyxFQUFFLEVBQUUsTUFBTSxNQUFNLENBQUM7QUFldEMsTUFBTSxPQUFPLGFBQWE7SUFDSjtJQUFwQixZQUFvQixZQUFzQztRQUF0QyxpQkFBWSxHQUFaLFlBQVksQ0FBMEI7SUFBRyxDQUFDO0lBRTlELGNBQWMsQ0FBQyxJQUFZO1FBQ3pCLE9BQU8sRUFBRSxDQUFDLElBQUksQ0FBQyxZQUFZLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQy9DLENBQUM7Q0FDRjtBQUVELE1BQU0sQ0FBQyxNQUFNLGdCQUFnQixHQUFHLElBQUksY0FBYyxDQUNoRCxrQkFBa0IsQ0FDbkIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBPYnNlcnZhYmxlLCBvZiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBUcmFuc2xhdGlvbiB9IGZyb20gJy4vdHlwZXMnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zbG9jb0xvYWRlciB7XG4gIGdldFRyYW5zbGF0aW9uKFxuICAgIGxhbmc6IHN0cmluZyxcbiAgICBkYXRhPzogVHJhbnNsb2NvTG9hZGVyRGF0YVxuICApOiBPYnNlcnZhYmxlPFRyYW5zbGF0aW9uPiB8IFByb21pc2U8VHJhbnNsYXRpb24+O1xufVxuXG5leHBvcnQgdHlwZSBUcmFuc2xvY29Mb2FkZXJEYXRhID0ge1xuICBzY29wZTogc3RyaW5nO1xufTtcblxuZXhwb3J0IGNsYXNzIERlZmF1bHRMb2FkZXIgaW1wbGVtZW50cyBUcmFuc2xvY29Mb2FkZXIge1xuICBjb25zdHJ1Y3Rvcihwcml2YXRlIHRyYW5zbGF0aW9uczogTWFwPHN0cmluZywgVHJhbnNsYXRpb24+KSB7fVxuXG4gIGdldFRyYW5zbGF0aW9uKGxhbmc6IHN0cmluZyk6IE9ic2VydmFibGU8VHJhbnNsYXRpb24+IHtcbiAgICByZXR1cm4gb2YodGhpcy50cmFuc2xhdGlvbnMuZ2V0KGxhbmcpIHx8IHt9KTtcbiAgfVxufVxuXG5leHBvcnQgY29uc3QgVFJBTlNMT0NPX0xPQURFUiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxUcmFuc2xvY29Mb2FkZXI+KFxuICAnVFJBTlNMT0NPX0xPQURFUidcbik7XG4iXX0=
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
import { NgModule } from '@angular/core';
|
|
2
|
+
import { TranslocoDirective } from './transloco.directive';
|
|
3
|
+
import { TranslocoPipe } from './transloco.pipe';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
const decl = [TranslocoDirective, TranslocoPipe];
|
|
6
|
+
export class TranslocoModule {
|
|
7
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: TranslocoModule, deps: [], target: i0.ɵɵFactoryTarget.NgModule });
|
|
8
|
+
static ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "17.0.9", ngImport: i0, type: TranslocoModule, imports: [TranslocoDirective, TranslocoPipe], exports: [TranslocoDirective, TranslocoPipe] });
|
|
9
|
+
static ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: TranslocoModule });
|
|
10
|
+
}
|
|
11
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: TranslocoModule, decorators: [{
|
|
12
|
+
type: NgModule,
|
|
13
|
+
args: [{
|
|
14
|
+
imports: decl,
|
|
15
|
+
exports: decl,
|
|
16
|
+
}]
|
|
17
|
+
}] });
|
|
18
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsb2NvLm1vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvdHJhbnNsb2NvL3NyYy9saWIvdHJhbnNsb2NvLm1vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZUFBZSxDQUFDO0FBRXpDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzNELE9BQU8sRUFBRSxhQUFhLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQzs7QUFFakQsTUFBTSxJQUFJLEdBQUcsQ0FBQyxrQkFBa0IsRUFBRSxhQUFhLENBQUMsQ0FBQztBQU1qRCxNQUFNLE9BQU8sZUFBZTt1R0FBZixlQUFlO3dHQUFmLGVBQWUsWUFOZCxrQkFBa0IsRUFBRSxhQUFhLGFBQWpDLGtCQUFrQixFQUFFLGFBQWE7d0dBTWxDLGVBQWU7OzJGQUFmLGVBQWU7a0JBSjNCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLElBQUk7b0JBQ2IsT0FBTyxFQUFFLElBQUk7aUJBQ2QiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBOZ01vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBUcmFuc2xvY29EaXJlY3RpdmUgfSBmcm9tICcuL3RyYW5zbG9jby5kaXJlY3RpdmUnO1xuaW1wb3J0IHsgVHJhbnNsb2NvUGlwZSB9IGZyb20gJy4vdHJhbnNsb2NvLnBpcGUnO1xuXG5jb25zdCBkZWNsID0gW1RyYW5zbG9jb0RpcmVjdGl2ZSwgVHJhbnNsb2NvUGlwZV07XG5cbkBOZ01vZHVsZSh7XG4gIGltcG9ydHM6IGRlY2wsXG4gIGV4cG9ydHM6IGRlY2wsXG59KVxuZXhwb3J0IGNsYXNzIFRyYW5zbG9jb01vZHVsZSB7fVxuIl19
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { ChangeDetectorRef, Inject, Optional, Pipe, } from '@angular/core';
|
|
2
|
+
import { switchMap, forkJoin } from 'rxjs';
|
|
3
|
+
import { TranslocoService } from './transloco.service';
|
|
4
|
+
import { TRANSLOCO_SCOPE } from './transloco-scope';
|
|
5
|
+
import { TRANSLOCO_LANG } from './transloco-lang';
|
|
6
|
+
import { listenOrNotOperator, resolveInlineLoader, shouldListenToLangChanges, } from './shared';
|
|
7
|
+
import { LangResolver } from './lang-resolver';
|
|
8
|
+
import { ScopeResolver } from './scope-resolver';
|
|
9
|
+
import * as i0 from "@angular/core";
|
|
10
|
+
import * as i1 from "./transloco.service";
|
|
11
|
+
export class TranslocoPipe {
|
|
12
|
+
service;
|
|
13
|
+
providerScope;
|
|
14
|
+
providerLang;
|
|
15
|
+
cdr;
|
|
16
|
+
subscription = null;
|
|
17
|
+
lastValue = '';
|
|
18
|
+
lastKey;
|
|
19
|
+
path;
|
|
20
|
+
langResolver = new LangResolver();
|
|
21
|
+
scopeResolver;
|
|
22
|
+
constructor(service, providerScope, providerLang, cdr) {
|
|
23
|
+
this.service = service;
|
|
24
|
+
this.providerScope = providerScope;
|
|
25
|
+
this.providerLang = providerLang;
|
|
26
|
+
this.cdr = cdr;
|
|
27
|
+
this.scopeResolver = new ScopeResolver(this.service);
|
|
28
|
+
}
|
|
29
|
+
// null is for handling strict mode + async pipe types https://github.com/jsverse/transloco/issues/311
|
|
30
|
+
// null is for handling strict mode + optional chaining types https://github.com/jsverse/transloco/issues/488
|
|
31
|
+
transform(key, params, inlineLang) {
|
|
32
|
+
if (!key) {
|
|
33
|
+
return key;
|
|
34
|
+
}
|
|
35
|
+
const keyName = params ? `${key}${JSON.stringify(params)}` : key;
|
|
36
|
+
if (keyName === this.lastKey) {
|
|
37
|
+
return this.lastValue;
|
|
38
|
+
}
|
|
39
|
+
this.lastKey = keyName;
|
|
40
|
+
this.subscription?.unsubscribe();
|
|
41
|
+
const listenToLangChange = shouldListenToLangChanges(this.service, this.providerLang || inlineLang);
|
|
42
|
+
this.subscription = this.service.langChanges$
|
|
43
|
+
.pipe(switchMap((activeLang) => {
|
|
44
|
+
const lang = this.langResolver.resolve({
|
|
45
|
+
inline: inlineLang,
|
|
46
|
+
provider: this.providerLang,
|
|
47
|
+
active: activeLang,
|
|
48
|
+
});
|
|
49
|
+
return Array.isArray(this.providerScope)
|
|
50
|
+
? forkJoin(this.providerScope.map((providerScope) => this.resolveScope(lang, providerScope)))
|
|
51
|
+
: this.resolveScope(lang, this.providerScope);
|
|
52
|
+
}), listenOrNotOperator(listenToLangChange))
|
|
53
|
+
.subscribe(() => this.updateValue(key, params));
|
|
54
|
+
return this.lastValue;
|
|
55
|
+
}
|
|
56
|
+
ngOnDestroy() {
|
|
57
|
+
this.subscription?.unsubscribe();
|
|
58
|
+
// Caretaker note: it's important to clean up references to subscriptions since they save the `next`
|
|
59
|
+
// callback within its `destination` property, preventing classes from being GC'd.
|
|
60
|
+
this.subscription = null;
|
|
61
|
+
}
|
|
62
|
+
updateValue(key, params) {
|
|
63
|
+
const lang = this.langResolver.resolveLangBasedOnScope(this.path);
|
|
64
|
+
this.lastValue = this.service.translate(key, params, lang);
|
|
65
|
+
this.cdr.markForCheck();
|
|
66
|
+
}
|
|
67
|
+
resolveScope(lang, providerScope) {
|
|
68
|
+
const resolvedScope = this.scopeResolver.resolve({
|
|
69
|
+
inline: undefined,
|
|
70
|
+
provider: providerScope,
|
|
71
|
+
});
|
|
72
|
+
this.path = this.langResolver.resolveLangPath(lang, resolvedScope);
|
|
73
|
+
const inlineLoader = resolveInlineLoader(providerScope, resolvedScope);
|
|
74
|
+
return this.service._loadDependencies(this.path, inlineLoader);
|
|
75
|
+
}
|
|
76
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: TranslocoPipe, deps: [{ token: i1.TranslocoService }, { token: TRANSLOCO_SCOPE, optional: true }, { token: TRANSLOCO_LANG, optional: true }, { token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Pipe });
|
|
77
|
+
static ɵpipe = i0.ɵɵngDeclarePipe({ minVersion: "14.0.0", version: "17.0.9", ngImport: i0, type: TranslocoPipe, isStandalone: true, name: "transloco", pure: false });
|
|
78
|
+
}
|
|
79
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.0.9", ngImport: i0, type: TranslocoPipe, decorators: [{
|
|
80
|
+
type: Pipe,
|
|
81
|
+
args: [{
|
|
82
|
+
name: 'transloco',
|
|
83
|
+
pure: false,
|
|
84
|
+
standalone: true,
|
|
85
|
+
}]
|
|
86
|
+
}], ctorParameters: () => [{ type: i1.TranslocoService }, { type: undefined, decorators: [{
|
|
87
|
+
type: Optional
|
|
88
|
+
}, {
|
|
89
|
+
type: Inject,
|
|
90
|
+
args: [TRANSLOCO_SCOPE]
|
|
91
|
+
}] }, { type: undefined, decorators: [{
|
|
92
|
+
type: Optional
|
|
93
|
+
}, {
|
|
94
|
+
type: Inject,
|
|
95
|
+
args: [TRANSLOCO_LANG]
|
|
96
|
+
}] }, { type: i0.ChangeDetectorRef }] });
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsb2NvLnBpcGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9saWJzL3RyYW5zbG9jby9zcmMvbGliL3RyYW5zbG9jby5waXBlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCxpQkFBaUIsRUFDakIsTUFBTSxFQUVOLFFBQVEsRUFDUixJQUFJLEdBRUwsTUFBTSxlQUFlLENBQUM7QUFDdkIsT0FBTyxFQUFFLFNBQVMsRUFBRSxRQUFRLEVBQTRCLE1BQU0sTUFBTSxDQUFDO0FBRXJFLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHFCQUFxQixDQUFDO0FBRXZELE9BQU8sRUFBRSxlQUFlLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUNwRCxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFDbEQsT0FBTyxFQUNMLG1CQUFtQixFQUNuQixtQkFBbUIsRUFDbkIseUJBQXlCLEdBQzFCLE1BQU0sVUFBVSxDQUFDO0FBQ2xCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsYUFBYSxFQUFFLE1BQU0sa0JBQWtCLENBQUM7OztBQU9qRCxNQUFNLE9BQU8sYUFBYTtJQVNkO0lBR0E7SUFHQTtJQUNBO0lBZkYsWUFBWSxHQUF3QixJQUFJLENBQUM7SUFDekMsU0FBUyxHQUFHLEVBQUUsQ0FBQztJQUNmLE9BQU8sQ0FBcUI7SUFDNUIsSUFBSSxDQUFxQjtJQUN6QixZQUFZLEdBQUcsSUFBSSxZQUFZLEVBQUUsQ0FBQztJQUNsQyxhQUFhLENBQWlCO0lBRXRDLFlBQ1UsT0FBeUIsRUFHekIsYUFBa0QsRUFHbEQsWUFBZ0MsRUFDaEMsR0FBc0I7UUFQdEIsWUFBTyxHQUFQLE9BQU8sQ0FBa0I7UUFHekIsa0JBQWEsR0FBYixhQUFhLENBQXFDO1FBR2xELGlCQUFZLEdBQVosWUFBWSxDQUFvQjtRQUNoQyxRQUFHLEdBQUgsR0FBRyxD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QUFDLElBQUksRUFBRSxhQUFhLENBQUMsQ0FBQztRQUNuRSxNQUFNLFlBQVksR0FBRyxtQkFBbUIsQ0FBQyxhQUFhLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFFdkUsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxJQUFJLEVBQUUsWUFBWSxDQUFDLENBQUM7SUFDakUsQ0FBQzt1R0EvRlUsYUFBYSxrREFXZCxlQUFlLDZCQUdmLGNBQWM7cUdBZGIsYUFBYTs7MkZBQWIsYUFBYTtrQkFMekIsSUFBSTttQkFBQztvQkFDSixJQUFJLEVBQUUsV0FBVztvQkFDakIsSUFBSSxFQUFFLEtBQUs7b0JBQ1gsVUFBVSxFQUFFLElBQUk7aUJBQ2pCOzswQkFXSSxRQUFROzswQkFDUixNQUFNOzJCQUFDLGVBQWU7OzBCQUV0QixRQUFROzswQkFDUixNQUFNOzJCQUFDLGNBQWMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3RvclJlZixcbiAgSW5qZWN0LFxuICBPbkRlc3Ryb3ksXG4gIE9wdGlvbmFsLFxuICBQaXBlLFxuICBQaXBlVHJhbnNmb3JtLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IHN3aXRjaE1hcCwgZm9ya0pvaW4sIE9ic2VydmFibGUsIFN1YnNjcmlwdGlvbiB9IGZyb20gJ3J4anMnO1xuXG5pbXBvcnQgeyBUcmFuc2xvY29TZXJ2aWNlIH0gZnJvbSAnLi90cmFuc2xvY28uc2VydmljZSc7XG5pbXBvcnQgeyBIYXNoTWFwLCBPckFycmF5LCBUcmFuc2xhdGlvbiwgVHJhbnNsb2NvU2NvcGUgfSBmcm9tICcuL3R5cGVzJztcbmltcG9ydCB7IFRSQU5TTE9DT19TQ09QRSB9IGZyb20gJy4vdHJhbnNsb2NvLXNjb3BlJztcbmltcG9ydCB7IFRSQU5TTE9DT19MQU5HIH0gZnJvbSAnLi90cmFuc2xvY28tbGFuZyc7XG5pbXBvcnQge1xuICBsaXN0ZW5Pck5vdE9wZXJhdG9yLFxuICByZXNvbHZlSW5saW5lTG9hZGVyLFxuICBzaG91bGRMaXN0ZW5Ub0xhbmdDaGFuZ2VzLFxufSBmcm9tICcuL3NoYXJlZCc7XG5pbXBvcnQgeyBMYW5nUmVzb2x2ZXIgfSBmcm9tICcuL2xhbmctcmVzb2x2ZXInO1xuaW1wb3J0IHsgU2NvcGVSZXNvbHZlciB9IGZyb20gJy4vc2NvcGUtcmVzb2x2ZXInO1xuXG5AUGlwZSh7XG4gIG5hbWU6ICd0cmFuc2xvY28nLFxuICBwdXJlOiBmYWxzZSxcbiAgc3RhbmRhbG9uZTogdHJ1ZSxcbn0pXG5leHBvcnQgY2xhc3MgVHJhbnNsb2NvUGlwZSBpbXBsZW1lbnRzIFBpcGVUcmFuc2Zvcm0sIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgc3Vic2NyaXB0aW9uOiBTdWJzY3JpcHRpb24gfCBudWxsID0gbnVsbDtcbiAgcHJpdmF0ZSBsYXN0VmFsdWUgPSAnJztcbiAgcHJpdmF0ZSBsYXN0S2V5OiBzdHJpbmcgfCB1bmRlZmluZWQ7XG4gIHByaXZhdGUgcGF0aDogc3RyaW5nIHwgdW5kZWZpbmVkO1xuICBwcml2YXRlIGxhbmdSZXNvbHZlciA9IG5ldyBMYW5nUmVzb2x2ZXIoKTtcbiAgcHJpdmF0ZSBzY29wZVJlc29sdmVyITogU2NvcGVSZXNvbHZlcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICBwcml2YXRlIHNlcnZpY2U6IFRyYW5zbG9jb1NlcnZpY2UsXG4gICAgQE9wdGlvbmFsKClcbiAgICBASW5qZWN0KFRSQU5TTE9DT19TQ09QRSlcbiAgICBwcml2YXRlIHByb3ZpZGVyU2NvcGU6IE9yQXJyYXk8VHJhbnNsb2NvU2NvcGU+IHwgdW5kZWZpbmVkLFxuICAgIEBPcHRpb25hbCgpXG4gICAgQEluamVjdChUUkFOU0xPQ09fTEFORylcbiAgICBwcml2YXRlIHByb3ZpZGVyTGFuZzogc3RyaW5nIHwgdW5kZWZpbmVkLFxuICAgIHByaXZhdGUgY2RyOiBDaGFuZ2VEZXRlY3RvclJlZlxuICApIHtcbiAgICB0aGlzLnNjb3BlUmVzb2x2ZXIgPSBuZXcgU2NvcGVSZXNvbHZlcih0aGlzLnNlcnZpY2UpO1xuICB9XG5cbiAgLy8gbnVsbCBpcyBmb3IgaGFuZGxpbmcgc3RyaWN0IG1vZGUgKyBhc3luYyBwaXBlIHR5cGVzIGh0dHBzOi8vZ2l0aHViLmNvbS9qc3ZlcnNlL3RyYW5zbG9jby9pc3N1ZXMvMzExXG4gIC8vIG51bGwgaXMgZm9yIGhhbmRsaW5nIHN0cmljdCBtb2RlICsgb3B0aW9uYWwgY2hhaW5pbmcgdHlwZXMgaHR0cHM6Ly9naXRodWIuY29tL2pzdmVyc2UvdHJhbnNsb2NvL2lzc3Vlcy80ODhcbiAgdHJhbnNmb3JtKFxuICAgIGtleT86IHN0cmluZyB8IG51bGwsXG4gICAgcGFyYW1zPzogSGFzaE1hcCxcbiAgICBpbmxpbmVMYW5nPzogc3RyaW5nXG4gICk6IHN0cmluZyB7XG4gICAgaWYgKCFrZXkpIHtcbiAgICAgIHJldHVybiBrZXkgYXMgYW55O1xuICAgIH1cblxuICAgIGNvbnN0IGtleU5hbWUgPSBwYXJhbXMgPyBgJHtrZXl9JHtKU09OLnN0cmluZ2lmeShwYXJhbXMpfWAgOiBrZXk7XG5cbiAgICBpZiAoa2V5TmFtZSA9PT0gdGhpcy5sYXN0S2V5KSB7XG4gICAgICByZXR1cm4gdGhpcy5sYXN0VmFsdWU7XG4gICAgfVxuXG4gICAgdGhpcy5sYXN0S2V5ID0ga2V5TmFtZTtcbiAgICB0aGlzLnN1YnNjcmlwdGlvbj8udW5zdWJzY3JpYmUoKTtcblxuICAgIGNvbnN0IGxpc3RlblRvTGFuZ0NoYW5nZSA9IHNob3VsZExpc3RlblRvTGFuZ0NoYW5nZXMoXG4gICAgICB0aGlzLnNlcnZpY2UsXG4gICAgICB0aGlzLnByb3ZpZGVyTGFuZyB8fCBpbmxpbmVMYW5nXG4gICAgKTtcblxuICAgIHRoaXMuc3Vic2NyaXB0aW9uID0gdGhpcy5zZXJ2aWNlLmxhbmdDaGFuZ2VzJFxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoYWN0aXZlTGFuZykgPT4ge1xuICAgICAgICAgIGNvbnN0IGxhbmcgPSB0aGlzLmxhbmdSZXNvbHZlci5yZXNvbHZlKHtcbiAgICAgICAgICAgIGlubGluZTogaW5saW5lTGFuZyxcbiAgICAgICAgICAgIHByb3ZpZGVyOiB0aGlzLnByb3ZpZGVyTGFuZyxcbiAgICAgICAgICAgIGFjdGl2ZTogYWN0aXZlTGFuZyxcbiAgICAgICAgICB9KTtcblxuICAgICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHRoaXMucHJvdmlkZXJTY29wZSlcbiAgICAgICAgICAgID8gZm9ya0pvaW4oXG4gICAgICAgICAgICAgICAgdGhpcy5wcm92aWRlclNjb3BlLm1hcCgocHJvdmlkZXJTY29wZSkgPT5cbiAgICAgICAgICAgICAgICAgIHRoaXMucmVzb2x2ZVNjb3BlKGxhbmcsIHByb3ZpZGVyU2NvcGUpXG4gICAgICAgICAgICAgICAgKVxuICAgICAgICAgICAgICApXG4gICAgICAgICAgICA6IHRoaXMucmVzb2x2ZVNjb3BlKGxhbmcsIHRoaXMucHJvdmlkZXJTY29wZSk7XG4gICAgICAgIH0pLFxuICAgICAgICBsaXN0ZW5Pck5vdE9wZXJhdG9yKGxpc3RlblRvTGFuZ0NoYW5nZSlcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKCkgPT4gdGhpcy51cGRhdGVWYWx1ZShrZXksIHBhcmFtcykpO1xuXG4gICAgcmV0dXJuIHRoaXMubGFzdFZhbHVlO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKSB7XG4gICAgdGhpcy5zdWJzY3JpcHRpb24/LnVuc3Vic2NyaWJlKCk7XG4gICAgLy8gQ2FyZXRha2VyIG5vdGU6IGl0J3MgaW1wb3J0YW50IHRvIGNsZWFuIHVwIHJlZmVyZW5jZXMgdG8gc3Vic2NyaXB0aW9ucyBzaW5jZSB0aGV5IHNhdmUgdGhlIGBuZXh0YFxuICAgIC8vIGNhbGxiYWNrIHdpdGhpbiBpdHMgYGRlc3RpbmF0aW9uYCBwcm9wZXJ0eSwgcHJldmVudGluZyBjbGFzc2VzIGZyb20gYmVpbmcgR0MnZC5cbiAgICB0aGlzLnN1YnNjcmlwdGlvbiA9IG51bGw7XG4gIH1cblxuICBwcml2YXRlIHVwZGF0ZVZhbHVlKGtleTogc3RyaW5nLCBwYXJhbXM/OiBIYXNoTWFwIHwgdW5kZWZpbmVkKSB7XG4gICAgY29uc3QgbGFuZyA9IHRoaXMubGFuZ1Jlc29sdmVyLnJlc29sdmVMYW5nQmFzZWRPblNjb3BlKHRoaXMucGF0aCEpO1xuICAgIHRoaXMubGFzdFZhbHVlID0gdGhpcy5zZXJ2aWNlLnRyYW5zbGF0ZShrZXksIHBhcmFtcywgbGFuZyk7XG4gICAgdGhpcy5jZHIubWFya0ZvckNoZWNrKCk7XG4gIH1cblxuICBwcml2YXRlIHJlc29sdmVTY29wZShcbiAgICBsYW5nOiBzdHJpbmcsXG4gICAgcHJvdmlkZXJTY29wZTogVHJhbnNsb2NvU2NvcGUgfCBudWxsXG4gICk6IE9ic2VydmFibGU8VHJhbnNsYXRpb24gfCBUcmFuc2xhdGlvbltdPiB7XG4gICAgY29uc3QgcmVzb2x2ZWRTY29wZSA9IHRoaXMuc2NvcGVSZXNvbHZlci5yZXNvbHZlKHtcbiAgICAgIGlubGluZTogdW5kZWZpbmVkLFxuICAgICAgcHJvdmlkZXI6IHByb3ZpZGVyU2NvcGUsXG4gICAgfSk7XG4gICAgdGhpcy5wYXRoID0gdGhpcy5sYW5nUmVzb2x2ZXIucmVzb2x2ZUxhbmdQYXRoKGxhbmcsIHJlc29sdmVkU2NvcGUpO1xuICAgIGNvbnN0IGlubGluZUxvYWRlciA9IHJlc29sdmVJbmxpbmVMb2FkZXIocHJvdmlkZXJTY29wZSwgcmVzb2x2ZWRTY29wZSk7XG5cbiAgICByZXR1cm4gdGhpcy5zZXJ2aWNlLl9sb2FkRGVwZW5kZW5jaWVzKHRoaXMucGF0aCwgaW5saW5lTG9hZGVyKTtcbiAgfVxufVxuIl19
|
|
@@ -0,0 +1,92 @@
|
|
|
1
|
+
import { makeEnvironmentProviders, } from '@angular/core';
|
|
2
|
+
import { TRANSLOCO_LOADER } from './transloco.loader';
|
|
3
|
+
import { TRANSLOCO_CONFIG, translocoConfig, } from './transloco.config';
|
|
4
|
+
import { TRANSLOCO_SCOPE } from './transloco-scope';
|
|
5
|
+
import { DefaultTranspiler, TRANSLOCO_TRANSPILER, } from './transloco.transpiler';
|
|
6
|
+
import { DefaultHandler, TRANSLOCO_MISSING_HANDLER, } from './transloco-missing-handler';
|
|
7
|
+
import { DefaultInterceptor, TRANSLOCO_INTERCEPTOR, } from './transloco.interceptor';
|
|
8
|
+
import { DefaultFallbackStrategy, TRANSLOCO_FALLBACK_STRATEGY, } from './transloco-fallback-strategy';
|
|
9
|
+
import { TRANSLOCO_LOADING_TEMPLATE } from './transloco-loading-template';
|
|
10
|
+
import { TRANSLOCO_LANG } from './transloco-lang';
|
|
11
|
+
export function provideTransloco(options) {
|
|
12
|
+
const providers = [
|
|
13
|
+
provideTranslocoTranspiler(DefaultTranspiler),
|
|
14
|
+
provideTranslocoMissingHandler(DefaultHandler),
|
|
15
|
+
provideTranslocoInterceptor(DefaultInterceptor),
|
|
16
|
+
provideTranslocoFallbackStrategy(DefaultFallbackStrategy),
|
|
17
|
+
];
|
|
18
|
+
if (options.config) {
|
|
19
|
+
providers.push(provideTranslocoConfig(options.config));
|
|
20
|
+
}
|
|
21
|
+
if (options.loader) {
|
|
22
|
+
providers.push(provideTranslocoLoader(options.loader));
|
|
23
|
+
}
|
|
24
|
+
return providers;
|
|
25
|
+
}
|
|
26
|
+
export function provideTranslocoConfig(config) {
|
|
27
|
+
return makeEnvironmentProviders([
|
|
28
|
+
{
|
|
29
|
+
provide: TRANSLOCO_CONFIG,
|
|
30
|
+
useValue: translocoConfig(config),
|
|
31
|
+
},
|
|
32
|
+
]);
|
|
33
|
+
}
|
|
34
|
+
export function provideTranslocoLoader(loader) {
|
|
35
|
+
return makeEnvironmentProviders([
|
|
36
|
+
{ provide: TRANSLOCO_LOADER, useClass: loader },
|
|
37
|
+
]);
|
|
38
|
+
}
|
|
39
|
+
export function provideTranslocoScope(scope) {
|
|
40
|
+
return {
|
|
41
|
+
provide: TRANSLOCO_SCOPE,
|
|
42
|
+
useValue: scope,
|
|
43
|
+
multi: true,
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
export function provideTranslocoLoadingTpl(content) {
|
|
47
|
+
return {
|
|
48
|
+
provide: TRANSLOCO_LOADING_TEMPLATE,
|
|
49
|
+
useValue: content,
|
|
50
|
+
};
|
|
51
|
+
}
|
|
52
|
+
export function provideTranslocoTranspiler(transpiler) {
|
|
53
|
+
return makeEnvironmentProviders([
|
|
54
|
+
{
|
|
55
|
+
provide: TRANSLOCO_TRANSPILER,
|
|
56
|
+
useClass: transpiler,
|
|
57
|
+
deps: [TRANSLOCO_CONFIG],
|
|
58
|
+
},
|
|
59
|
+
]);
|
|
60
|
+
}
|
|
61
|
+
export function provideTranslocoFallbackStrategy(strategy) {
|
|
62
|
+
return makeEnvironmentProviders([
|
|
63
|
+
{
|
|
64
|
+
provide: TRANSLOCO_FALLBACK_STRATEGY,
|
|
65
|
+
useClass: strategy,
|
|
66
|
+
deps: [TRANSLOCO_CONFIG],
|
|
67
|
+
},
|
|
68
|
+
]);
|
|
69
|
+
}
|
|
70
|
+
export function provideTranslocoMissingHandler(handler) {
|
|
71
|
+
return makeEnvironmentProviders([
|
|
72
|
+
{
|
|
73
|
+
provide: TRANSLOCO_MISSING_HANDLER,
|
|
74
|
+
useClass: handler,
|
|
75
|
+
},
|
|
76
|
+
]);
|
|
77
|
+
}
|
|
78
|
+
export function provideTranslocoInterceptor(interceptor) {
|
|
79
|
+
return makeEnvironmentProviders([
|
|
80
|
+
{
|
|
81
|
+
provide: TRANSLOCO_INTERCEPTOR,
|
|
82
|
+
useClass: interceptor,
|
|
83
|
+
},
|
|
84
|
+
]);
|
|
85
|
+
}
|
|
86
|
+
export function provideTranslocoLang(lang) {
|
|
87
|
+
return {
|
|
88
|
+
provide: TRANSLOCO_LANG,
|
|
89
|
+
useValue: lang,
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHJhbnNsb2NvLnByb3ZpZGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL2xpYnMvdHJhbnNsb2NvL3NyYy9saWIvdHJhbnNsb2NvLnByb3ZpZGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBRUwsd0JBQXdCLEdBR3pCLE1BQU0sZUFBZSxDQUFDO0FBRXZCLE9BQU8sRUFBRSxnQkFBZ0IsRUFBbUIsTUFBTSxvQkFBb0IsQ0FBQztBQUN2RSxPQUFPLEVBRUwsZ0JBQWdCLEVBQ2hCLGVBQWUsR0FDaEIsTUFBTSxvQkFBb0IsQ0FBQztBQUM1QixPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sbUJBQW1CLENBQUM7QUFFcEQsT0FBTyxFQUNMLGlCQUFpQixFQUNqQixvQkFBb0IsR0FFckIsTUFBTSx3QkFBd0IsQ0FBQztBQUNoQyxPQUFPLEVBQ0wsY0FBYyxFQUNkLHlCQUF5QixHQUUxQixNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFDTCxrQkFBa0IsRUFDbEIscUJBQXFCLEdBRXRCLE1BQU0seUJBQXlCLENBQUM7QUFDakMsT0FBTyxFQUNMLHVCQUF1QixFQUN2QiwyQkFBMkIsR0FFNUIsTUFBTSwrQkFBK0IsQ0FBQztBQUN2QyxPQUFPLEVBQUUsMEJBQTBCLEVBQUUsTUFBTSw4QkFBOEIsQ0FBQztBQUUxRSxPQUFPLEVBQUUsY0FBYyxFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFPbEQsTUFBTSxVQUFVLGdCQUFnQixDQUFDLE9BQXlCO0lBQ3hELE1BQU0sU0FBUyxHQUEyQjtRQUN4QywwQkFBMEIsQ0FBQyxpQkFBaUIsQ0FBQztRQUM3Qyw4QkFBOEIsQ0FBQyxjQUFjLENBQUM7UUFDOUMsMkJBQTJCLENBQUMsa0JBQWtCLENBQUM7UUFDL0MsZ0NBQWdDLENBQUMsdUJBQXVCLENBQUM7S0FDMUQsQ0FBQztJQUVGLElBQUksT0FBTyxDQUFDLE1BQU0sRUFBRTtRQUNsQixTQUFTLENBQUMsSUFBSSxDQUFDLHNCQUFzQixDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0tBQ3hEO0lBRUQsSUFBSSxPQUFPLENBQUMsTUFBTSxFQUFFO1FBQ2xCLFNBQVMsQ0FBQyxJQUFJLENBQUMsc0JBQXNCLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7S0FDeEQ7SUFFRCxPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBRUQsTUFBTSxVQUFVLHNCQUFzQixDQUFDLE1BQThCO0lBQ25FLE9BQU8sd0JBQXdCLENBQUM7UUFDOUI7WUFDRSxPQUFPLEVBQUUsZ0JBQWdCO1lBQ3pCLFFBQVEsRUFBRSxlQUFlLENBQUMsTUFBTSxDQUFDO1NBQ2xDO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxzQkFBc0IsQ0FBQyxNQUE2QjtJQUNsRSxPQUFPLHdCQUF3QixDQUFDO1FBQzlCLEVBQUUsT0FBTyxFQUFFLGdCQUFnQixFQUFFLFFBQVEsRUFBRSxNQUFNLEVBQUU7S0FDaEQsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSxxQkFBcUIsQ0FBQyxLQUFxQjtJQUN6RCxPQUFPO1FBQ0wsT0FBTyxFQUFFLGVBQWU7UUFDeEIsUUFBUSxFQUFFLEtBQUs7UUFDZixLQUFLLEVBQUUsSUFBSTtLQUNaLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLDBCQUEwQixDQUFDLE9BQWdCO0lBQ3pELE9BQU87UUFDTCxPQUFPLEVBQUUsMEJBQTBCO1FBQ25DLFFBQVEsRUFBRSxPQUFPO0tBQ2xCLENBQUM7QUFDSixDQUFDO0FBRUQsTUFBTSxVQUFVLDBCQUEwQixDQUN4QyxVQUFxQztJQUVyQyxPQUFPLHdCQUF3QixDQUFDO1FBQzlCO1lBQ0UsT0FBTyxFQUFFLG9CQUFvQjtZQUM3QixRQUFRLEVBQUUsVUFBVTtZQUNwQixJQUFJLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQztTQUN6QjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsZ0NBQWdDLENBQzlDLFFBQXlDO0lBRXpDLE9BQU8sd0JBQXdCLENBQUM7UUFDOUI7WUFDRSxPQUFPLEVBQUUsMkJBQTJCO1lBQ3BDLFFBQVEsRUFBRSxRQUFRO1lBQ2xCLElBQUksRUFBRSxDQUFDLGdCQUFnQixDQUFDO1NBQ3pCO0tBQ0YsQ0FBQyxDQUFDO0FBQ0wsQ0FBQztBQUVELE1BQU0sVUFBVSw4QkFBOEIsQ0FDNUMsT0FBc0M7SUFFdEMsT0FBTyx3QkFBd0IsQ0FBQztRQUM5QjtZQUNFLE9BQU8sRUFBRSx5QkFBeUI7WUFDbEMsUUFBUSxFQUFFLE9BQU87U0FDbEI7S0FDRixDQUFDLENBQUM7QUFDTCxDQUFDO0FBRUQsTUFBTSxVQUFVLDJCQUEyQixDQUN6QyxXQUF1QztJQUV2QyxPQUFPLHdCQUF3QixDQUFDO1FBQzlCO1lBQ0UsT0FBTyxFQUFFLHFCQUFxQjtZQUM5QixRQUFRLEVBQUUsV0FBVztTQUN0QjtLQUNGLENBQUMsQ0FBQztBQUNMLENBQUM7QUFFRCxNQUFNLFVBQVUsb0JBQW9CLENBQUMsSUFBWTtJQUMvQyxPQUFPO1FBQ0wsT0FBTyxFQUFFLGNBQWM7UUFDdkIsUUFBUSxFQUFFLElBQUk7S0FDZixDQUFDO0FBQ0osQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7XG4gIEVudmlyb25tZW50UHJvdmlkZXJzLFxuICBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMsXG4gIFByb3ZpZGVyLFxuICBUeXBlLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgVFJBTlNMT0NPX0xPQURFUiwgVHJhbnNsb2NvTG9hZGVyIH0gZnJvbSAnLi90cmFuc2xvY28ubG9hZGVyJztcbmltcG9ydCB7XG4gIFBhcnRpYWxUcmFuc2xvY29Db25maWcsXG4gIFRSQU5TTE9DT19DT05GSUcsXG4gIHRyYW5zbG9jb0NvbmZpZyxcbn0gZnJvbSAnLi90cmFuc2xvY28uY29uZmlnJztcbmltcG9ydCB7IFRSQU5TTE9DT19TQ09QRSB9IGZyb20gJy4vdHJhbnNsb2NvLXNjb3BlJztcbmltcG9ydCB7IFRyYW5zbG9jb1Njb3BlIH0gZnJvbSAnLi90eXBlcyc7XG5pbXBvcnQge1xuICBEZWZhdWx0VHJhbnNwaWxlcixcbiAgVFJBTlNMT0NPX1RSQU5TUElMRVIsXG4gIFRyYW5zbG9jb1RyYW5zcGlsZXIsXG59IGZyb20gJy4vdHJhbnNsb2NvLnRyYW5zcGlsZXInO1xuaW1wb3J0IHtcbiAgRGVmYXVsdEhhbmRsZXIsXG4gIFRSQU5TTE9DT19NSVNTSU5HX0hBTkRMRVIsXG4gIFRyYW5zbG9jb01pc3NpbmdIYW5kbGVyLFxufSBmcm9tICcuL3RyYW5zbG9jby1taXNzaW5nLWhhbmRsZXInO1xuaW1wb3J0IHtcbiAgRGVmYXVsdEludGVyY2VwdG9yLFxuICBUUkFOU0xPQ09fSU5URVJDRVBUT1IsXG4gIFRyYW5zbG9jb0ludGVyY2VwdG9yLFxufSBmcm9tICcuL3RyYW5zbG9jby5pbnRlcmNlcHRvcic7XG5pbXBvcnQge1xuICBEZWZhdWx0RmFsbGJhY2tTdHJhdGVneSxcbiAgVFJBTlNMT0NPX0ZBTExCQUNLX1NUUkFURUdZLFxuICBUcmFuc2xvY29GYWxsYmFja1N0cmF0ZWd5LFxufSBmcm9tICcuL3RyYW5zbG9jby1mYWxsYmFjay1zdHJhdGVneSc7XG5pbXBvcnQgeyBUUkFOU0xPQ09fTE9BRElOR19URU1QTEFURSB9IGZyb20gJy4vdHJhbnNsb2NvLWxvYWRpbmctdGVtcGxhdGUnO1xuaW1wb3J0IHsgQ29udGVudCB9IGZyb20gJy4vdGVtcGxhdGUtaGFuZGxlcic7XG5pbXBvcnQgeyBUUkFOU0xPQ09fTEFORyB9IGZyb20gJy4vdHJhbnNsb2NvLWxhbmcnO1xuXG5leHBvcnQgaW50ZXJmYWNlIFRyYW5zbG9jb09wdGlvbnMge1xuICBjb25maWc6IFBhcnRpYWxUcmFuc2xvY29Db25maWc7XG4gIGxvYWRlcj86IFR5cGU8VHJhbnNsb2NvTG9hZGVyPjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVUcmFuc2xvY28ob3B0aW9uczogVHJhbnNsb2NvT3B0aW9ucykge1xuICBjb25zdCBwcm92aWRlcnM6IEVudmlyb25tZW50UHJvdmlkZXJzW10gPSBbXG4gICAgcHJvdmlkZVRyYW5zbG9jb1RyYW5zcGlsZXIoRGVmYXVsdFRyYW5zcGlsZXIpLFxuICAgIHByb3ZpZGVUcmFuc2xvY29NaXNzaW5nSGFuZGxlcihEZWZhdWx0SGFuZGxlciksXG4gICAgcHJvdmlkZVRyYW5zbG9jb0ludGVyY2VwdG9yKERlZmF1bHRJbnRlcmNlcHRvciksXG4gICAgcHJvdmlkZVRyYW5zbG9jb0ZhbGxiYWNrU3RyYXRlZ3koRGVmYXVsdEZhbGxiYWNrU3RyYXRlZ3kpLFxuICBdO1xuXG4gIGlmIChvcHRpb25zLmNvbmZpZykge1xuICAgIHByb3ZpZGVycy5wdXNoKHByb3ZpZGVUcmFuc2xvY29Db25maWcob3B0aW9ucy5jb25maWcpKTtcbiAgfVxuXG4gIGlmIChvcHRpb25zLmxvYWRlcikge1xuICAgIHByb3ZpZGVycy5wdXNoKHByb3ZpZGVUcmFuc2xvY29Mb2FkZXIob3B0aW9ucy5sb2FkZXIpKTtcbiAgfVxuXG4gIHJldHVybiBwcm92aWRlcnM7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlVHJhbnNsb2NvQ29uZmlnKGNvbmZpZzogUGFydGlhbFRyYW5zbG9jb0NvbmZpZykge1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBUUkFOU0xPQ09fQ09ORklHLFxuICAgICAgdXNlVmFsdWU6IHRyYW5zbG9jb0NvbmZpZyhjb25maWcpLFxuICAgIH0sXG4gIF0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gcHJvdmlkZVRyYW5zbG9jb0xvYWRlcihsb2FkZXI6IFR5cGU8VHJhbnNsb2NvTG9hZGVyPikge1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICB7IHByb3ZpZGU6IFRSQU5TTE9DT19MT0FERVIsIHVzZUNsYXNzOiBsb2FkZXIgfSxcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlVHJhbnNsb2NvU2NvcGUoc2NvcGU6IFRyYW5zbG9jb1Njb3BlKSB7XG4gIHJldHVybiB7XG4gICAgcHJvdmlkZTogVFJBTlNMT0NPX1NDT1BFLFxuICAgIHVzZVZhbHVlOiBzY29wZSxcbiAgICBtdWx0aTogdHJ1ZSxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVUcmFuc2xvY29Mb2FkaW5nVHBsKGNvbnRlbnQ6IENvbnRlbnQpIHtcbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlOiBUUkFOU0xPQ09fTE9BRElOR19URU1QTEFURSxcbiAgICB1c2VWYWx1ZTogY29udGVudCxcbiAgfTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVUcmFuc2xvY29UcmFuc3BpbGVyKFxuICB0cmFuc3BpbGVyOiBUeXBlPFRyYW5zbG9jb1RyYW5zcGlsZXI+XG4pIHtcbiAgcmV0dXJuIG1ha2VFbnZpcm9ubWVudFByb3ZpZGVycyhbXG4gICAge1xuICAgICAgcHJvdmlkZTogVFJBTlNMT0NPX1RSQU5TUElMRVIsXG4gICAgICB1c2VDbGFzczogdHJhbnNwaWxlcixcbiAgICAgIGRlcHM6IFtUUkFOU0xPQ09fQ09ORklHXSxcbiAgICB9LFxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVUcmFuc2xvY29GYWxsYmFja1N0cmF0ZWd5KFxuICBzdHJhdGVneTogVHlwZTxUcmFuc2xvY29GYWxsYmFja1N0cmF0ZWd5PlxuKSB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IFRSQU5TTE9DT19GQUxMQkFDS19TVFJBVEVHWSxcbiAgICAgIHVzZUNsYXNzOiBzdHJhdGVneSxcbiAgICAgIGRlcHM6IFtUUkFOU0xPQ09fQ09ORklHXSxcbiAgICB9LFxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVUcmFuc2xvY29NaXNzaW5nSGFuZGxlcihcbiAgaGFuZGxlcjogVHlwZTxUcmFuc2xvY29NaXNzaW5nSGFuZGxlcj5cbikge1xuICByZXR1cm4gbWFrZUVudmlyb25tZW50UHJvdmlkZXJzKFtcbiAgICB7XG4gICAgICBwcm92aWRlOiBUUkFOU0xPQ09fTUlTU0lOR19IQU5ETEVSLFxuICAgICAgdXNlQ2xhc3M6IGhhbmRsZXIsXG4gICAgfSxcbiAgXSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBwcm92aWRlVHJhbnNsb2NvSW50ZXJjZXB0b3IoXG4gIGludGVyY2VwdG9yOiBUeXBlPFRyYW5zbG9jb0ludGVyY2VwdG9yPlxuKSB7XG4gIHJldHVybiBtYWtlRW52aXJvbm1lbnRQcm92aWRlcnMoW1xuICAgIHtcbiAgICAgIHByb3ZpZGU6IFRSQU5TTE9DT19JTlRFUkNFUFRPUixcbiAgICAgIHVzZUNsYXNzOiBpbnRlcmNlcHRvcixcbiAgICB9LFxuICBdKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHByb3ZpZGVUcmFuc2xvY29MYW5nKGxhbmc6IHN0cmluZyk6IFByb3ZpZGVyIHtcbiAgcmV0dXJuIHtcbiAgICBwcm92aWRlOiBUUkFOU0xPQ09fTEFORyxcbiAgICB1c2VWYWx1ZTogbGFuZyxcbiAgfTtcbn1cbiJdfQ==
|