@ui5/theming-ngx 0.3.4-rc.0 → 0.4.0-rc.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.
@@ -101,10 +101,10 @@ class Ui5ThemingService {
101
101
  this._destroyed$.next();
102
102
  this._destroyed$.complete();
103
103
  }
104
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: Ui5ThemingService, deps: [{ token: UI5_THEMING_CONFIGURATION, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
105
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: Ui5ThemingService }); }
104
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: Ui5ThemingService, deps: [{ token: UI5_THEMING_CONFIGURATION, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
105
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: Ui5ThemingService }); }
106
106
  }
107
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: Ui5ThemingService, decorators: [{
107
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: Ui5ThemingService, decorators: [{
108
108
  type: Injectable
109
109
  }], ctorParameters: () => [{ type: undefined, decorators: [{
110
110
  type: Optional
@@ -132,11 +132,11 @@ class Ui5ThemingModule {
132
132
  ],
133
133
  };
134
134
  }
135
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: Ui5ThemingModule, deps: [{ token: Ui5ThemingService, optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
136
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.4", ngImport: i0, type: Ui5ThemingModule }); }
137
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: Ui5ThemingModule }); }
135
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: Ui5ThemingModule, deps: [{ token: Ui5ThemingService, optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
136
+ static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.1.3", ngImport: i0, type: Ui5ThemingModule }); }
137
+ static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: Ui5ThemingModule }); }
138
138
  }
139
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: Ui5ThemingModule, decorators: [{
139
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.1.3", ngImport: i0, type: Ui5ThemingModule, decorators: [{
140
140
  type: NgModule,
141
141
  args: [{
142
142
  exports: [],
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ui5/theming-ngx",
3
- "version": "0.3.4-rc.0",
3
+ "version": "0.4.0-rc.0",
4
4
  "license": "Apache-2.0",
5
5
  "author": "SAP SE (https://www.sap.com)",
6
6
  "repository": {
@@ -9,8 +9,8 @@
9
9
  "directory": "libs/ui5-angular-theming"
10
10
  },
11
11
  "peerDependencies": {
12
- "@angular/common": "^18.0.0",
13
- "@angular/core": "^18.0.0"
12
+ "@angular/common": "^19.0.0",
13
+ "@angular/core": "^19.0.0"
14
14
  },
15
15
  "dependencies": {
16
16
  "tslib": "^2.3.0"
@@ -23,8 +23,6 @@
23
23
  },
24
24
  ".": {
25
25
  "types": "./index.d.ts",
26
- "esm2022": "./esm2022/ui5-theming-ngx.mjs",
27
- "esm": "./esm2022/ui5-theming-ngx.mjs",
28
26
  "default": "./fesm2022/ui5-theming-ngx.mjs"
29
27
  }
30
28
  },
Binary file
package/esm2022/index.mjs DELETED
@@ -1,4 +0,0 @@
1
- export { Ui5ThemingModule } from './ui5-theming.module';
2
- export { Ui5ThemingService } from './ui5-theming.service';
3
- export * from './ui5-theming.models';
4
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9saWJzL3VpNS1hbmd1bGFyLXRoZW1pbmcvc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxnQkFBZ0IsRUFBRSxNQUFNLHNCQUFzQixDQUFDO0FBQ3hELE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELGNBQWMsc0JBQXNCLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBVaTVUaGVtaW5nTW9kdWxlIH0gZnJvbSAnLi91aTUtdGhlbWluZy5tb2R1bGUnO1xuZXhwb3J0IHsgVWk1VGhlbWluZ1NlcnZpY2UgfSBmcm9tICcuL3VpNS10aGVtaW5nLnNlcnZpY2UnO1xuZXhwb3J0ICogZnJvbSAnLi91aTUtdGhlbWluZy5tb2RlbHMnO1xuIl19
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWk1LXRoZW1pbmctbmd4LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy91aTUtYW5ndWxhci10aGVtaW5nL3NyYy91aTUtdGhlbWluZy1uZ3gudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7O0dBRUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogR2VuZXJhdGVkIGJ1bmRsZSBpbmRleC4gRG8gbm90IGVkaXQuXG4gKi9cblxuZXhwb3J0ICogZnJvbSAnLi9pbmRleCc7XG4iXX0=
@@ -1,3 +0,0 @@
1
- import { InjectionToken } from '@angular/core';
2
- export const UI5_THEMING_CONFIGURATION = new InjectionToken('Ui5 global theming configuration.');
3
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWk1LXRoZW1pbmcubW9kZWxzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy91aTUtYW5ndWxhci10aGVtaW5nL3NyYy91aTUtdGhlbWluZy5tb2RlbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUsvQyxNQUFNLENBQUMsTUFBTSx5QkFBeUIsR0FBRyxJQUFJLGNBQWMsQ0FDekQsbUNBQW1DLENBQ3BDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3Rpb25Ub2tlbiB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gJ3J4anMnO1xuZXhwb3J0IGludGVyZmFjZSBUaGVtaW5nQ29uZmlnIHtcbiAgZGVmYXVsdFRoZW1lOiBzdHJpbmc7XG59XG5leHBvcnQgY29uc3QgVUk1X1RIRU1JTkdfQ09ORklHVVJBVElPTiA9IG5ldyBJbmplY3Rpb25Ub2tlbjxUaGVtaW5nQ29uZmlnPihcbiAgJ1VpNSBnbG9iYWwgdGhlbWluZyBjb25maWd1cmF0aW9uLidcbik7XG5cbmV4cG9ydCBpbnRlcmZhY2UgVWk1VGhlbWluZ1Byb3ZpZGVyIHtcbiAgbmFtZTogc3RyaW5nO1xuICBnZXRBdmFpbGFibGVUaGVtZXMoKTogc3RyaW5nW10gfCBPYnNlcnZhYmxlPHN0cmluZ1tdPjtcbiAgc3VwcG9ydHNUaGVtZSh0aGVtZU5hbWU6IHN0cmluZyk6IGJvb2xlYW4gfCBPYnNlcnZhYmxlPGJvb2xlYW4+O1xuICBzZXRUaGVtZSh0aGVtZU5hbWU6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj47XG59XG5cbmV4cG9ydCBpbnRlcmZhY2UgVWk1VGhlbWluZ0NvbnN1bWVyIGV4dGVuZHMgT21pdDxVaTVUaGVtaW5nUHJvdmlkZXIsICduYW1lJz4ge1xuICByZWdpc3RlclByb3ZpZGVyKHByb3ZpZGVyOiBVaTVUaGVtaW5nUHJvdmlkZXIpOiB2b2lkO1xuICB1bnJlZ2lzdGVyUHJvdmlkZXIocHJvdmlkZXI6IFVpNVRoZW1pbmdQcm92aWRlcik6IHZvaWQ7XG59XG4iXX0=
@@ -1,38 +0,0 @@
1
- import { NgModule, Optional, isDevMode, } from '@angular/core';
2
- import { Ui5ThemingService } from './ui5-theming.service';
3
- import { UI5_THEMING_CONFIGURATION } from './ui5-theming.models';
4
- import * as i0 from "@angular/core";
5
- import * as i1 from "./ui5-theming.service";
6
- export class Ui5ThemingModule {
7
- constructor(theming) {
8
- this.theming = theming;
9
- if (!this.theming && isDevMode()) {
10
- console.error('Could not find Ui5ThemingService. Make sure you called .forRoot() for Ui5ThemingModule');
11
- }
12
- }
13
- static forRoot(config) {
14
- return {
15
- ngModule: Ui5ThemingModule,
16
- providers: [
17
- Ui5ThemingService,
18
- {
19
- provide: UI5_THEMING_CONFIGURATION,
20
- useValue: config,
21
- },
22
- ],
23
- };
24
- }
25
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: Ui5ThemingModule, deps: [{ token: i1.Ui5ThemingService, optional: true }], target: i0.ɵɵFactoryTarget.NgModule }); }
26
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "18.1.4", ngImport: i0, type: Ui5ThemingModule }); }
27
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: Ui5ThemingModule }); }
28
- }
29
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: Ui5ThemingModule, decorators: [{
30
- type: NgModule,
31
- args: [{
32
- exports: [],
33
- declarations: [],
34
- }]
35
- }], ctorParameters: () => [{ type: i1.Ui5ThemingService, decorators: [{
36
- type: Optional
37
- }] }] });
38
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWk1LXRoZW1pbmcubW9kdWxlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vbGlicy91aTUtYW5ndWxhci10aGVtaW5nL3NyYy91aTUtdGhlbWluZy5tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUNMLFFBQVEsRUFFUixRQUFRLEVBQ1IsU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxpQkFBaUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzFELE9BQU8sRUFBaUIseUJBQXlCLEVBQUUsTUFBTSxzQkFBc0IsQ0FBQzs7O0FBTWhGLE1BQU0sT0FBTyxnQkFBZ0I7SUFDM0IsWUFBK0IsT0FBMEI7UUFBMUIsWUFBTyxHQUFQLE9BQU8sQ0FBbUI7UUFDdkQsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLElBQUksU0FBUyxFQUFFLEVBQUUsQ0FBQztZQUNqQyxPQUFPLENBQUMsS0FBSyxDQUNYLHdGQUF3RixDQUN6RixDQUFDO1FBQ0osQ0FBQztJQUNILENBQUM7SUFDRCxNQUFNLENBQUMsT0FBTyxDQUFDLE1BQXFCO1FBQ2xDLE9BQU87WUFDTCxRQUFRLEVBQUUsZ0JBQWdCO1lBQzFCLFNBQVMsRUFBRTtnQkFDVCxpQkFBaUI7Z0JBQ2pCO29CQUNFLE9BQU8sRUFBRSx5QkFBeUI7b0JBQ2xDLFFBQVEsRUFBRSxNQUFNO2lCQUNqQjthQUNGO1NBQ0YsQ0FBQztJQUNKLENBQUM7OEdBbkJVLGdCQUFnQjsrR0FBaEIsZ0JBQWdCOytHQUFoQixnQkFBZ0I7OzJGQUFoQixnQkFBZ0I7a0JBSjVCLFFBQVE7bUJBQUM7b0JBQ1IsT0FBTyxFQUFFLEVBQUU7b0JBQ1gsWUFBWSxFQUFFLEVBQUU7aUJBQ2pCOzswQkFFYyxRQUFRIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgTmdNb2R1bGUsXG4gIE1vZHVsZVdpdGhQcm92aWRlcnMsXG4gIE9wdGlvbmFsLFxuICBpc0Rldk1vZGUsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgVWk1VGhlbWluZ1NlcnZpY2UgfSBmcm9tICcuL3VpNS10aGVtaW5nLnNlcnZpY2UnO1xuaW1wb3J0IHsgVGhlbWluZ0NvbmZpZywgVUk1X1RIRU1JTkdfQ09ORklHVVJBVElPTiB9IGZyb20gJy4vdWk1LXRoZW1pbmcubW9kZWxzJztcblxuQE5nTW9kdWxlKHtcbiAgZXhwb3J0czogW10sXG4gIGRlY2xhcmF0aW9uczogW10sXG59KVxuZXhwb3J0IGNsYXNzIFVpNVRoZW1pbmdNb2R1bGUge1xuICBjb25zdHJ1Y3RvcihAT3B0aW9uYWwoKSBwdWJsaWMgdGhlbWluZzogVWk1VGhlbWluZ1NlcnZpY2UpIHtcbiAgICBpZiAoIXRoaXMudGhlbWluZyAmJiBpc0Rldk1vZGUoKSkge1xuICAgICAgY29uc29sZS5lcnJvcihcbiAgICAgICAgJ0NvdWxkIG5vdCBmaW5kIFVpNVRoZW1pbmdTZXJ2aWNlLiBNYWtlIHN1cmUgeW91IGNhbGxlZCAuZm9yUm9vdCgpIGZvciBVaTVUaGVtaW5nTW9kdWxlJ1xuICAgICAgKTtcbiAgICB9XG4gIH1cbiAgc3RhdGljIGZvclJvb3QoY29uZmlnOiBUaGVtaW5nQ29uZmlnKTogTW9kdWxlV2l0aFByb3ZpZGVyczxVaTVUaGVtaW5nTW9kdWxlPiB7XG4gICAgcmV0dXJuIHtcbiAgICAgIG5nTW9kdWxlOiBVaTVUaGVtaW5nTW9kdWxlLFxuICAgICAgcHJvdmlkZXJzOiBbXG4gICAgICAgIFVpNVRoZW1pbmdTZXJ2aWNlLFxuICAgICAgICB7XG4gICAgICAgICAgcHJvdmlkZTogVUk1X1RIRU1JTkdfQ09ORklHVVJBVElPTixcbiAgICAgICAgICB1c2VWYWx1ZTogY29uZmlnLFxuICAgICAgICB9LFxuICAgICAgXSxcbiAgICB9O1xuICB9XG59XG4iXX0=
@@ -1,113 +0,0 @@
1
- import { Inject, Injectable, isDevMode, Optional } from '@angular/core';
2
- import { BehaviorSubject, combineLatest, map, Observable, Subject, switchMap, takeUntil, tap, of, delay, } from 'rxjs';
3
- import { UI5_THEMING_CONFIGURATION, } from './ui5-theming.models';
4
- import * as i0 from "@angular/core";
5
- export class Ui5ThemingService {
6
- constructor(_config) {
7
- this._config = _config;
8
- this._providers$ = new BehaviorSubject([]);
9
- this._currentTheme$ = new BehaviorSubject([
10
- this._config?.defaultTheme || 'sap_fiori_3',
11
- this._config?.defaultTheme || 'sap_fiori_3',
12
- ]);
13
- this._themeChanged$ = new Subject();
14
- this._destroyed$ = new Subject();
15
- combineLatest([
16
- this._providers$,
17
- this._currentTheme$.pipe(delay(100)) // Delay so that the providers are registered. @todo: Find a better solution
18
- ])
19
- .pipe(switchMap(([providers, [previousTheme, newTheme]]) => {
20
- return combineLatest(providers.map((provider) => {
21
- const isSupported = provider.supportsTheme(newTheme);
22
- if (typeof isSupported === 'boolean') {
23
- return of([provider, isSupported]);
24
- }
25
- return isSupported.pipe(map((supported) => [provider, supported]));
26
- })).pipe(switchMap((providers) => {
27
- const unsupportedProviders = providers.filter(([, supported]) => !supported);
28
- if (unsupportedProviders.length) {
29
- if (isDevMode()) {
30
- console.warn(`The following providers do not support the theme "${newTheme}":`, unsupportedProviders.map(([provider]) => provider.name));
31
- }
32
- }
33
- return combineLatest(providers.map(([provider]) => provider.setTheme(newTheme)));
34
- }), map((providerResponses) => {
35
- if (providerResponses.every(Boolean)) {
36
- return newTheme;
37
- }
38
- return previousTheme;
39
- }));
40
- }), tap((theme) => {
41
- this._themeChanged$.next(theme);
42
- }), takeUntil(this._destroyed$))
43
- .subscribe();
44
- }
45
- supportsTheme(themeName) {
46
- return this.getAvailableThemes().pipe(map((themes) => themes.includes(themeName)));
47
- }
48
- getAvailableThemes() {
49
- return this._providers$.pipe(switchMap((providers) => {
50
- return combineLatest(providers.map((provider) => {
51
- const availableThemes = provider.getAvailableThemes();
52
- if (Array.isArray(availableThemes)) {
53
- return of(availableThemes);
54
- }
55
- return availableThemes;
56
- })).pipe(map((providerResponses) => {
57
- const uniques = providerResponses.reduce((acc, curr) => {
58
- curr.forEach((theme) => acc.add(theme));
59
- return acc;
60
- }, new Set());
61
- return [...uniques.values()];
62
- }));
63
- }));
64
- }
65
- /** Registers theming provider for further usage. */
66
- registerProvider(provider) {
67
- const providers = this._providers$.value;
68
- providers.push(provider);
69
- this._providers$.next(providers);
70
- }
71
- /** Unregisters previously registered theming provider. */
72
- unregisterProvider(provider) {
73
- const providers = this._providers$.value;
74
- const index = providers.indexOf(provider);
75
- if (index !== -1) {
76
- providers.splice(index, 1);
77
- this._providers$.next(providers);
78
- }
79
- }
80
- /** Sets the theme to the providers */
81
- setTheme(theme) {
82
- return new Observable((subscriber) => {
83
- const finalizer$ = new Subject();
84
- this._themeChanged$
85
- .pipe(takeUntil(finalizer$))
86
- .subscribe((changedTheme) => {
87
- if (changedTheme === theme) {
88
- finalizer$.next();
89
- finalizer$.complete();
90
- }
91
- subscriber.next(changedTheme === theme);
92
- subscriber.complete();
93
- });
94
- this._currentTheme$.next([this._currentTheme$.value[1], theme]);
95
- });
96
- }
97
- /** @hidden */
98
- ngOnDestroy() {
99
- this._destroyed$.next();
100
- this._destroyed$.complete();
101
- }
102
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: Ui5ThemingService, deps: [{ token: UI5_THEMING_CONFIGURATION, optional: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
103
- static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: Ui5ThemingService }); }
104
- }
105
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.1.4", ngImport: i0, type: Ui5ThemingService, decorators: [{
106
- type: Injectable
107
- }], ctorParameters: () => [{ type: undefined, decorators: [{
108
- type: Optional
109
- }, {
110
- type: Inject,
111
- args: [UI5_THEMING_CONFIGURATION]
112
- }] }] });
113
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidWk1LXRoZW1pbmcuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL2xpYnMvdWk1LWFuZ3VsYXItdGhlbWluZy9zcmMvdWk1LXRoZW1pbmcuc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxTQUFTLEVBQWEsUUFBUSxFQUFDLE1BQU0sZUFBZSxDQUFDO0FBQ2pGLE9BQU8sRUFDTCxlQUFlLEVBQ2YsYUFBYSxFQUNiLEdBQUcsRUFDSCxVQUFVLEVBQ1YsT0FBTyxFQUNQLFNBQVMsRUFDVCxTQUFTLEVBQ1QsR0FBRyxFQUNILEVBQUUsRUFBRSxLQUFLLEdBQ1YsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBRUwseUJBQXlCLEdBRzFCLE1BQU0sc0JBQXNCLENBQUM7O0FBRzlCLE1BQU0sT0FBTyxpQkFBaUI7SUFXNUIsWUFDa0UsT0FBc0I7UUFBdEIsWUFBTyxHQUFQLE9BQU8sQ0FBZTtRQVh2RSxnQkFBVyxHQUFHLElBQUksZUFBZSxDQUF1QixFQUFFLENBQUMsQ0FBQztRQUNyRSxtQkFBYyxHQUFHLElBQUksZUFBZSxDQUFtQjtZQUM3RCxJQUFJLENBQUMsT0FBTyxFQUFFLFlBQVksSUFBSSxhQUFhO1lBQzNDLElBQUksQ0FBQyxPQUFPLEVBQUUsWUFBWSxJQUFJLGFBQWE7U0FDNUMsQ0FBQyxDQUFDO1FBRUssbUJBQWMsR0FBRyxJQUFJLE9BQU8sRUFBVSxDQUFDO1FBRXZDLGdCQUFXLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQztRQUt4QyxhQUFhLENBQUM7WUFDWixJQUFJLENBQUMsV0FBVztZQUNoQixJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyw0RUFBNEU7U0FDbEgsQ0FBQzthQUNDLElBQUksQ0FDSCxTQUFTLENBQUMsQ0FBQyxDQUFDLFNBQVMsRUFBRSxDQUFDLGFB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SUFBSSxVQUFVLENBQVUsQ0FBQyxVQUFVLEVBQUUsRUFBRTtZQUM1QyxNQUFNLFVBQVUsR0FBRyxJQUFJLE9BQU8sRUFBUSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxjQUFjO2lCQUNoQixJQUFJLENBQUMsU0FBUyxDQUFDLFVBQVUsQ0FBQyxDQUFDO2lCQUMzQixTQUFTLENBQUMsQ0FBQyxZQUFZLEVBQUUsRUFBRTtnQkFDMUIsSUFBSSxZQUFZLEtBQUssS0FBSyxFQUFFLENBQUM7b0JBQzNCLFVBQVUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztvQkFDbEIsVUFBVSxDQUFDLFFBQVEsRUFBRSxDQUFDO2dCQUN4QixDQUFDO2dCQUNELFVBQVUsQ0FBQyxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUssQ0FBQyxDQUFDO2dCQUN4QyxVQUFVLENBQUMsUUFBUSxFQUFFLENBQUM7WUFDeEIsQ0FBQyxDQUFDLENBQUM7WUFDTCxJQUFJLENBQUMsY0FBYyxDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksQ0FBQyxjQUFjLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxFQUFFLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbEUsQ0FBQyxDQUFDLENBQUM7SUFDTCxDQUFDO0lBRUQsY0FBYztJQUNkLFdBQVc7UUFDVCxJQUFJLENBQUMsV0FBVyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3hCLElBQUksQ0FBQyxXQUFXLENBQUMsUUFBUSxFQUFFLENBQUM7SUFDOUIsQ0FBQzs4R0F0SVUsaUJBQWlCLGtCQVlOLHlCQUF5QjtrSEFacEMsaUJBQWlCOzsyRkFBakIsaUJBQWlCO2tCQUQ3QixVQUFVOzswQkFhTixRQUFROzswQkFBSSxNQUFNOzJCQUFDLHlCQUF5QiIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7SW5qZWN0LCBJbmplY3RhYmxlLCBpc0Rldk1vZGUsIE9uRGVzdHJveSwgT3B0aW9uYWx9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtcbiAgQmVoYXZpb3JTdWJqZWN0LFxuICBjb21iaW5lTGF0ZXN0LFxuICBtYXAsXG4gIE9ic2VydmFibGUsXG4gIFN1YmplY3QsXG4gIHN3aXRjaE1hcCxcbiAgdGFrZVVudGlsLFxuICB0YXAsXG4gIG9mLCBkZWxheSxcbn0gZnJvbSAncnhqcyc7XG5pbXBvcnQge1xuICBUaGVtaW5nQ29uZmlnLFxuICBVSTVfVEhFTUlOR19DT05GSUdVUkFUSU9OLFxuICBVaTVUaGVtaW5nUHJvdmlkZXIsXG4gIFVpNVRoZW1pbmdDb25zdW1lcixcbn0gZnJvbSAnLi91aTUtdGhlbWluZy5tb2RlbHMnO1xuXG5ASW5qZWN0YWJsZSgpXG5leHBvcnQgY2xhc3MgVWk1VGhlbWluZ1NlcnZpY2UgaW1wbGVtZW50cyBVaTVUaGVtaW5nQ29uc3VtZXIsIE9uRGVzdHJveSB7XG4gIHByaXZhdGUgcmVhZG9ubHkgX3Byb3ZpZGVycyQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFVpNVRoZW1pbmdQcm92aWRlcltdPihbXSk7XG4gIHByaXZhdGUgX2N1cnJlbnRUaGVtZSQgPSBuZXcgQmVoYXZpb3JTdWJqZWN0PFtzdHJpbmcsIHN0cmluZ10+KFtcbiAgICB0aGlzLl9jb25maWc/LmRlZmF1bHRUaGVtZSB8fCAnc2FwX2Zpb3JpXzMnLFxuICAgIHRoaXMuX2NvbmZpZz8uZGVmYXVsdFRoZW1lIHx8ICdzYXBfZmlvcmlfMycsXG4gIF0pO1xuXG4gIHByaXZhdGUgX3RoZW1lQ2hhbmdlZCQgPSBuZXcgU3ViamVjdDxzdHJpbmc+KCk7XG5cbiAgcHJpdmF0ZSBfZGVzdHJveWVkJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG5cbiAgY29uc3RydWN0b3IoXG4gICAgQE9wdGlvbmFsKCkgQEluamVjdChVSTVfVEhFTUlOR19DT05GSUdVUkFUSU9OKSBwcml2YXRlIHJlYWRvbmx5IF9jb25maWc6IFRoZW1pbmdDb25maWdcbiAgKSB7XG4gICAgY29tYmluZUxhdGVzdChbXG4gICAgICB0aGlzLl9wcm92aWRlcnMkLFxuICAgICAgdGhpcy5fY3VycmVudFRoZW1lJC5waXBlKGRlbGF5KDEwMCkpIC8vIERlbGF5IHNvIHRoYXQgdGhlIHByb3ZpZGVycyBhcmUgcmVnaXN0ZXJlZC4gQHRvZG86IEZpbmQgYSBiZXR0ZXIgc29sdXRpb25cbiAgICBdKVxuICAgICAgLnBpcGUoXG4gICAgICAgIHN3aXRjaE1hcCgoW3Byb3ZpZGVycywgW3ByZXZpb3VzVGhlbWUsIG5ld1RoZW1lXV0pID0+IHtcbiAgICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChcbiAgICAgICAgICAgIHByb3ZpZGVycy5tYXAoXG4gICAgICAgICAgICAgIChwcm92aWRlcik6IE9ic2VydmFibGU8W1VpNVRoZW1pbmdQcm92aWRlciwgYm9vbGVhbl0+ID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBpc1N1cHBvcnRlZCA9IHByb3ZpZGVyLnN1cHBvcnRzVGhlbWUobmV3VGhlbWUpO1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgaXNTdXBwb3J0ZWQgPT09ICdib29sZWFuJykge1xuICAgICAgICAgICAgICAgICAgcmV0dXJuIG9mKFtwcm92aWRlciwgaXNTdXBwb3J0ZWRdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcmV0dXJuIGlzU3VwcG9ydGVkLnBpcGUoXG4gICAgICAgICAgICAgICAgICBtYXAoKHN1cHBvcnRlZCkgPT4gW3Byb3ZpZGVyLCBzdXBwb3J0ZWRdKVxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIClcbiAgICAgICAgICApLnBpcGUoXG4gICAgICAgICAgICBzd2l0Y2hNYXAoKHByb3ZpZGVycykgPT4ge1xuICAgICAgICAgICAgICBjb25zdCB1bnN1cHBvcnRlZFByb3ZpZGVycyA9IHByb3ZpZGVycy5maWx0ZXIoXG4gICAgICAgICAgICAgICAgKFssIHN1cHBvcnRlZF0pID0+ICFzdXBwb3J0ZWRcbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgaWYgKHVuc3VwcG9ydGVkUHJvdmlkZXJzLmxlbmd0aCkge1xuICAgICAgICAgICAgICAgIGlmIChpc0Rldk1vZGUoKSkge1xuICAgICAgICAgICAgICAgICAgY29uc29sZS53YXJuKFxuICAgICAgICAgICAgICAgICAgICBgVGhlIGZvbGxvd2luZyBwcm92aWRlcnMgZG8gbm90IHN1cHBvcnQgdGhlIHRoZW1lIFwiJHtuZXdUaGVtZX1cIjpgLFxuICAgICAgICAgICAgICAgICAgICB1bnN1cHBvcnRlZFByb3ZpZGVycy5tYXAoKFtwcm92aWRlcl0pID0+IHByb3ZpZGVyLm5hbWUpXG4gICAgICAgICAgICAgICAgICApO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChcbiAgICAgICAgICAgICAgICBwcm92aWRlcnMubWFwKChbcHJvdmlkZXJdKSA9PiBwcm92aWRlci5zZXRUaGVtZShuZXdUaGVtZSkpXG4gICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9KSxcbiAgICAgICAgICAgIG1hcCgocHJvdmlkZXJSZXNwb25zZXMpID0+IHtcbiAgICAgICAgICAgICAgaWYgKHByb3ZpZGVyUmVzcG9uc2VzLmV2ZXJ5KEJvb2xlYW4pKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG5ld1RoZW1lO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHJldHVybiBwcmV2aW91c1RoZW1lO1xuICAgICAgICAgICAgfSlcbiAgICAgICAgICApO1xuICAgICAgICB9KSxcbiAgICAgICAgdGFwKCh0aGVtZSkgPT4ge1xuICAgICAgICAgIHRoaXMuX3RoZW1lQ2hhbmdlZCQubmV4dCh0aGVtZSk7XG4gICAgICAgIH0pLFxuICAgICAgICB0YWtlVW50aWwodGhpcy5fZGVzdHJveWVkJClcbiAgICAgIClcbiAgICAgIC5zdWJzY3JpYmUoKTtcbiAgfVxuXG4gIHN1cHBvcnRzVGhlbWUodGhlbWVOYW1lOiBzdHJpbmcpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICByZXR1cm4gdGhpcy5nZXRBdmFpbGFibGVUaGVtZXMoKS5waXBlKFxuICAgICAgbWFwKCh0aGVtZXMpID0+IHRoZW1lcy5pbmNsdWRlcyh0aGVtZU5hbWUpKVxuICAgICk7XG4gIH1cblxuICBnZXRBdmFpbGFibGVUaGVtZXMoKTogT2JzZXJ2YWJsZTxzdHJpbmdbXT4ge1xuICAgIHJldHVybiB0aGlzLl9wcm92aWRlcnMkLnBpcGUoXG4gICAgICBzd2l0Y2hNYXAoKHByb3ZpZGVycykgPT4ge1xuICAgICAgICByZXR1cm4gY29tYmluZUxhdGVzdChcbiAgICAgICAgICBwcm92aWRlcnMubWFwKChwcm92aWRlcikgPT4ge1xuICAgICAgICAgICAgY29uc3QgYXZhaWxhYmxlVGhlbWVzID0gcHJvdmlkZXIuZ2V0QXZhaWxhYmxlVGhlbWVzKCk7XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShhdmFpbGFibGVUaGVtZXMpKSB7XG4gICAgICAgICAgICAgIHJldHVybiBvZihhdmFpbGFibGVUaGVtZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIGF2YWlsYWJsZVRoZW1lcztcbiAgICAgICAgICB9KVxuICAgICAgICApLnBpcGUoXG4gICAgICAgICAgbWFwKChwcm92aWRlclJlc3BvbnNlczogQXJyYXk8c3RyaW5nW10+KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB1bmlxdWVzID0gcHJvdmlkZXJSZXNwb25zZXMucmVkdWNlKChhY2MsIGN1cnIpID0+IHtcbiAgICAgICAgICAgICAgY3Vyci5mb3JFYWNoKCh0aGVtZSkgPT4gYWNjLmFkZCh0aGVtZSkpO1xuICAgICAgICAgICAgICByZXR1cm4gYWNjO1xuICAgICAgICAgICAgfSwgbmV3IFNldDxzdHJpbmc+KCkpO1xuICAgICAgICAgICAgcmV0dXJuIFsuLi51bmlxdWVzLnZhbHVlcygpXTtcbiAgICAgICAgICB9KVxuICAgICAgICApO1xuICAgICAgfSlcbiAgICApO1xuICB9XG5cbiAgLyoqIFJlZ2lzdGVycyB0aGVtaW5nIHByb3ZpZGVyIGZvciBmdXJ0aGVyIHVzYWdlLiAqL1xuICByZWdpc3RlclByb3ZpZGVyKHByb3ZpZGVyOiBVaTVUaGVtaW5nUHJvdmlkZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwcm92aWRlcnMgPSB0aGlzLl9wcm92aWRlcnMkLnZhbHVlO1xuICAgIHByb3ZpZGVycy5wdXNoKHByb3ZpZGVyKTtcbiAgICB0aGlzLl9wcm92aWRlcnMkLm5leHQocHJvdmlkZXJzKTtcbiAgfVxuXG4gIC8qKiBVbnJlZ2lzdGVycyBwcmV2aW91c2x5IHJlZ2lzdGVyZWQgdGhlbWluZyBwcm92aWRlci4gKi9cbiAgdW5yZWdpc3RlclByb3ZpZGVyKHByb3ZpZGVyOiBVaTVUaGVtaW5nUHJvdmlkZXIpOiB2b2lkIHtcbiAgICBjb25zdCBwcm92aWRlcnMgPSB0aGlzLl9wcm92aWRlcnMkLnZhbHVlO1xuICAgIGNvbnN0IGluZGV4ID0gcHJvdmlkZXJzLmluZGV4T2YocHJvdmlkZXIpO1xuICAgIGlmIChpbmRleCAhPT0gLTEpIHtcbiAgICAgIHByb3ZpZGVycy5zcGxpY2UoaW5kZXgsIDEpO1xuICAgICAgdGhpcy5fcHJvdmlkZXJzJC5uZXh0KHByb3ZpZGVycyk7XG4gICAgfVxuICB9XG5cbiAgLyoqIFNldHMgdGhlIHRoZW1lIHRvIHRoZSBwcm92aWRlcnMgKi9cbiAgc2V0VGhlbWUodGhlbWU6IHN0cmluZyk6IE9ic2VydmFibGU8Ym9vbGVhbj4ge1xuICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZTxib29sZWFuPigoc3Vic2NyaWJlcikgPT4ge1xuICAgICAgY29uc3QgZmluYWxpemVyJCA9IG5ldyBTdWJqZWN0PHZvaWQ+KCk7XG4gICAgICB0aGlzLl90aGVtZUNoYW5nZWQkXG4gICAgICAgIC5waXBlKHRha2VVbnRpbChmaW5hbGl6ZXIkKSlcbiAgICAgICAgLnN1YnNjcmliZSgoY2hhbmdlZFRoZW1lKSA9PiB7XG4gICAgICAgICAgaWYgKGNoYW5nZWRUaGVtZSA9PT0gdGhlbWUpIHtcbiAgICAgICAgICAgIGZpbmFsaXplciQubmV4dCgpO1xuICAgICAgICAgICAgZmluYWxpemVyJC5jb21wbGV0ZSgpO1xuICAgICAgICAgIH1cbiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoY2hhbmdlZFRoZW1lID09PSB0aGVtZSk7XG4gICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpO1xuICAgICAgICB9KTtcbiAgICAgIHRoaXMuX2N1cnJlbnRUaGVtZSQubmV4dChbdGhpcy5fY3VycmVudFRoZW1lJC52YWx1ZVsxXSwgdGhlbWVdKTtcbiAgICB9KTtcbiAgfVxuXG4gIC8qKiBAaGlkZGVuICovXG4gIG5nT25EZXN0cm95KCk6IHZvaWQge1xuICAgIHRoaXMuX2Rlc3Ryb3llZCQubmV4dCgpO1xuICAgIHRoaXMuX2Rlc3Ryb3llZCQuY29tcGxldGUoKTtcbiAgfVxufVxuIl19
Binary file