@ngutil/common 0.0.7 → 0.0.8

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/busy.d.ts ADDED
@@ -0,0 +1,98 @@
1
+ import { InputSignal, Signal } from "@angular/core";
2
+ import { Observable } from "rxjs";
3
+ import { ConnectProtocol } from "./connect-protocol";
4
+ import * as i0 from "@angular/core";
5
+ export type BusyProgress = {
6
+ total: number;
7
+ current: number;
8
+ message?: string;
9
+ };
10
+ export type BusyEventParams = {
11
+ busy?: boolean;
12
+ progress?: BusyProgress;
13
+ };
14
+ export type BusyEvent = {
15
+ name: string;
16
+ } & BusyEventParams;
17
+ export type BusyConnectable = Observable<boolean | BusyEventParams> | BusyTracker<any> | Signal<boolean>;
18
+ export declare class BusyState<T extends string> implements ConnectProtocol {
19
+ #private;
20
+ readonly current$: Observable<this>;
21
+ get isBusy(): boolean;
22
+ get progress(): BusyProgress | undefined;
23
+ is(name: T): boolean;
24
+ has(name: T): boolean;
25
+ set(name: T, busy: boolean | undefined, progress?: BusyProgress): void;
26
+ get(name: T): BusyEventParams | undefined;
27
+ keys(): string[];
28
+ entries(): [string, BusyEventParams][];
29
+ connect(o: Observable<typeof this> | typeof this, prefix?: string): Observable<unknown>;
30
+ }
31
+ /**
32
+ * ```ts
33
+ * @Component({
34
+ * provides: [BusyTracker],
35
+ * template: `
36
+ * <spinner *ngIf="busy.is('reload') | async">
37
+ * <spinner *ngIf="busy.any | async">
38
+ * <button nuBusy="reload"></button>
39
+ * `
40
+ * })
41
+ * export class Grid {
42
+ * readonly busy = inject(BusyTracker<"create" | "reload" | "update" | "delete">)
43
+ * }
44
+ * ```
45
+ */
46
+ export declare class BusyTracker<T extends string> implements ConnectProtocol {
47
+ private readonly parent?;
48
+ private readonly destroyRef;
49
+ private readonly _state;
50
+ readonly state$: Observable<BusyState<T>>;
51
+ readonly state: Signal<BusyState<T>>;
52
+ readonly any: Signal<boolean>;
53
+ readonly progress: Signal<BusyProgress | undefined>;
54
+ constructor(parent?: BusyTracker<any> | undefined);
55
+ init(name: T, busy: boolean, progress?: BusyProgress): void;
56
+ set(name: T, busy: boolean, progress?: BusyProgress): void;
57
+ is(name: T): Observable<boolean>;
58
+ watch(name: T): Observable<BusyEventParams | undefined>;
59
+ /**
60
+ * ```ts
61
+ * observable.pipe(this.busy.rx("save"))
62
+ * ```
63
+ */
64
+ rx(name: T): <S>(src: Observable<S>) => Observable<S>;
65
+ connect(value: BusyConnectable, name?: T): Observable<unknown>;
66
+ static ɵfac: i0.ɵɵFactoryDeclaration<BusyTracker<any>, [{ optional: true; skipSelf: true; }]>;
67
+ static ɵprov: i0.ɵɵInjectableDeclaration<BusyTracker<any>>;
68
+ }
69
+ /**
70
+ * ```ts
71
+ * @Component({
72
+ * template: `
73
+ * <button nuBusy="save">SAVE</button>
74
+ * <progress nuBusy="fileUpload">
75
+ * <progress nuBusy="*">
76
+ * `
77
+ * })
78
+ * ```
79
+ */
80
+ export declare class Busy<T extends string> implements ConnectProtocol {
81
+ #private;
82
+ readonly tracker: BusyTracker<T>;
83
+ readonly name: InputSignal<T>;
84
+ readonly state$: Observable<{
85
+ isBusy: boolean;
86
+ isOthersBusy: boolean;
87
+ progress: BusyProgress | undefined;
88
+ }>;
89
+ readonly isBusy$: Observable<boolean>;
90
+ readonly isBusy: Signal<boolean | undefined>;
91
+ readonly isOthersBusy$: Observable<boolean>;
92
+ readonly isOthersBusy: Signal<boolean | undefined>;
93
+ readonly progress$: Observable<BusyProgress | undefined>;
94
+ readonly progress: Signal<BusyProgress | undefined>;
95
+ connect(value: BusyConnectable): Observable<unknown>;
96
+ static ɵfac: i0.ɵɵFactoryDeclaration<Busy<any>, never>;
97
+ static ɵdir: i0.ɵɵDirectiveDeclaration<Busy<any>, "[nuBusy]", ["nuBusy"], { "name": { "alias": "nuBusy"; "required": true; "isSignal": true; }; }, {}, never, never, true, never>;
98
+ }
@@ -0,0 +1,20 @@
1
+ import { Observable } from "rxjs";
2
+ /**
3
+ * @example
4
+ * ```ts
5
+ * class Busy implements ConnectProtocol {
6
+ * connect(ob: Observable<any>): Observable<any> {
7
+ * return new Observable(s => {
8
+ * const sub = this.doSomething().subscribe(s)
9
+ * return sub.unsubscribe.bind(sub)
10
+ * })
11
+ * }
12
+ * }
13
+ * ```
14
+ */
15
+ export interface ConnectProtocol {
16
+ /**
17
+ * @returns When the observable is unsubscribed, the connect method cleans up everything
18
+ */
19
+ connect(...args: any[]): Observable<unknown>;
20
+ }
@@ -0,0 +1,250 @@
1
+ import { computed, DestroyRef, Directive, inject, Inject, Injectable, input, isSignal, Optional, SkipSelf } from "@angular/core";
2
+ import { takeUntilDestroyed, toObservable, toSignal } from "@angular/core/rxjs-interop";
3
+ import { BehaviorSubject, combineLatest, filter, finalize, isObservable, map, Observable, scan, shareReplay, switchMap, tap, throwError } from "rxjs";
4
+ import { isEqual } from "lodash";
5
+ import * as i0 from "@angular/core";
6
+ export class BusyState {
7
+ constructor() {
8
+ this.#events = new BehaviorSubject(null);
9
+ this.#data = {};
10
+ this.current$ = this.#events.pipe(scan((state, current) => {
11
+ if (current == null) {
12
+ return state;
13
+ }
14
+ if (current.busy == null) {
15
+ delete state[current.name];
16
+ }
17
+ else {
18
+ state[current.name] = { busy: current.busy, progress: current.progress };
19
+ }
20
+ return state;
21
+ }, {}), tap(state => (this.#data = state)), map(() => this), shareReplay(1));
22
+ }
23
+ #events;
24
+ #data;
25
+ get isBusy() {
26
+ return Object.values(this.#data).some(v => v.busy);
27
+ }
28
+ get progress() {
29
+ let total = 0;
30
+ let current = 0;
31
+ const messages = [];
32
+ for (const v of Object.values(this.#data)) {
33
+ if (v.progress) {
34
+ total += v.progress.total;
35
+ current += v.progress.current;
36
+ if (v.progress.message) {
37
+ messages.push(v.progress.message);
38
+ }
39
+ }
40
+ }
41
+ if (total !== 0 && current !== 0) {
42
+ return { total, current, message: messages.length > 0 ? messages.join("\n") : undefined };
43
+ }
44
+ return undefined;
45
+ }
46
+ is(name) {
47
+ return this.#data[name]?.busy === true;
48
+ }
49
+ has(name) {
50
+ return this.#data[name] != null;
51
+ }
52
+ set(name, busy, progress) {
53
+ const current = this.#data[name];
54
+ if (current == null || current.busy !== busy || !isEqual(current.progress, progress)) {
55
+ this.#events.next({ name, busy, progress });
56
+ }
57
+ }
58
+ get(name) {
59
+ return this.#data[name];
60
+ }
61
+ keys() {
62
+ return Object.keys(this.#data);
63
+ }
64
+ entries() {
65
+ return Object.entries(this.#data);
66
+ }
67
+ connect(o, prefix) {
68
+ if (o instanceof BusyState) {
69
+ return this.connect(o.current$, prefix);
70
+ }
71
+ else {
72
+ return new Observable(() => {
73
+ const otherKeys = [];
74
+ const sub = o.subscribe(otherState => {
75
+ for (const [k, v] of otherState.entries()) {
76
+ const key = prefix ? `${prefix}-${k}` : k;
77
+ if (!otherKeys.includes(key)) {
78
+ otherKeys.push(key);
79
+ }
80
+ this.set(key, v.busy, v.progress);
81
+ }
82
+ });
83
+ return () => {
84
+ sub.unsubscribe();
85
+ for (const k of otherKeys) {
86
+ this.set(k, undefined, undefined);
87
+ }
88
+ };
89
+ });
90
+ }
91
+ }
92
+ }
93
+ /**
94
+ * ```ts
95
+ * @Component({
96
+ * provides: [BusyTracker],
97
+ * template: `
98
+ * <spinner *ngIf="busy.is('reload') | async">
99
+ * <spinner *ngIf="busy.any | async">
100
+ * <button nuBusy="reload"></button>
101
+ * `
102
+ * })
103
+ * export class Grid {
104
+ * readonly busy = inject(BusyTracker<"create" | "reload" | "update" | "delete">)
105
+ * }
106
+ * ```
107
+ */
108
+ export class BusyTracker {
109
+ constructor(parent) {
110
+ this.parent = parent;
111
+ this.destroyRef = inject(DestroyRef);
112
+ this._state = this.parent
113
+ ? this.parent._state
114
+ : new BusyState();
115
+ this.state$ = this._state.current$;
116
+ this.state = toSignal(this.state$, { requireSync: true });
117
+ this.any = computed(() => this.state().isBusy);
118
+ this.progress = computed(() => this.state().progress);
119
+ }
120
+ init(name, busy, progress) {
121
+ const state = this.state();
122
+ if (!state.has(name)) {
123
+ this.set(name, busy, progress);
124
+ }
125
+ }
126
+ set(name, busy, progress) {
127
+ this._state.set(name, busy, progress);
128
+ }
129
+ is(name) {
130
+ return this.state$.pipe(map(state => state.is(name)));
131
+ }
132
+ watch(name) {
133
+ return this.state$.pipe(map(state => state.get(name)));
134
+ }
135
+ /**
136
+ * ```ts
137
+ * observable.pipe(this.busy.rx("save"))
138
+ * ```
139
+ */
140
+ rx(name) {
141
+ return (src) => src.pipe(tap(() => this.set(name, true)), finalize(() => this.set(name, false)));
142
+ }
143
+ connect(value, name) {
144
+ if (isObservable(value)) {
145
+ if (name == null) {
146
+ return throwError(() => new Error("Missing `name` param"));
147
+ }
148
+ return new Observable(() => {
149
+ const sub = value.subscribe(busyValue => {
150
+ if (typeof busyValue === "boolean") {
151
+ this.set(name, busyValue);
152
+ }
153
+ else {
154
+ this.set(name, !!busyValue.busy, busyValue.progress);
155
+ }
156
+ });
157
+ return sub.unsubscribe.bind(sub);
158
+ }).pipe(takeUntilDestroyed(this.destroyRef));
159
+ }
160
+ else if (value instanceof BusyTracker) {
161
+ return this._state.connect(value.state$, name).pipe(takeUntilDestroyed(this.destroyRef));
162
+ }
163
+ else if (isSignal(value)) {
164
+ return this.connect(toObservable(value), name);
165
+ }
166
+ return throwError(() => new Error("Unsupported Busy source"));
167
+ }
168
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BusyTracker, deps: [{ token: BusyTracker, optional: true, skipSelf: true }], target: i0.ɵɵFactoryTarget.Injectable }); }
169
+ static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BusyTracker }); }
170
+ }
171
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: BusyTracker, decorators: [{
172
+ type: Injectable
173
+ }], ctorParameters: () => [{ type: BusyTracker, decorators: [{
174
+ type: Inject,
175
+ args: [BusyTracker]
176
+ }, {
177
+ type: SkipSelf
178
+ }, {
179
+ type: Optional
180
+ }] }] });
181
+ /**
182
+ * ```ts
183
+ * @Component({
184
+ * template: `
185
+ * <button nuBusy="save">SAVE</button>
186
+ * <progress nuBusy="fileUpload">
187
+ * <progress nuBusy="*">
188
+ * `
189
+ * })
190
+ * ```
191
+ */
192
+ export class Busy {
193
+ constructor() {
194
+ this.tracker = inject(BusyTracker, { skipSelf: true });
195
+ this.name = input.required({ alias: "nuBusy" });
196
+ this.#name = toObservable(this.name);
197
+ this.state$ = combineLatest({ name: this.#name, state: this.tracker.state$ }).pipe(map(({ name, state }) => {
198
+ if (name === "*") {
199
+ const isBusy = state.isBusy;
200
+ return {
201
+ isBusy: isBusy,
202
+ isOthersBusy: isBusy,
203
+ progress: state.progress
204
+ };
205
+ }
206
+ const self = state.get(name);
207
+ if (self) {
208
+ const isBusy = self.busy === true;
209
+ return {
210
+ isBusy: isBusy,
211
+ isOthersBusy: state.isBusy && !isBusy,
212
+ progress: self.progress
213
+ };
214
+ }
215
+ else {
216
+ return {
217
+ isBusy: false,
218
+ isOthersBusy: state.isBusy,
219
+ progress: undefined
220
+ };
221
+ }
222
+ }), shareReplay(1));
223
+ this.isBusy$ = this.state$.pipe(map(v => v.isBusy), shareReplay(1));
224
+ this.isBusy = toSignal(this.isBusy$, { rejectErrors: true });
225
+ this.isOthersBusy$ = this.state$.pipe(map(v => v.isOthersBusy), shareReplay(1));
226
+ this.isOthersBusy = toSignal(this.isOthersBusy$, { rejectErrors: true });
227
+ this.progress$ = this.state$.pipe(map(v => v.progress), shareReplay(1));
228
+ this.progress = toSignal(this.progress$, { rejectErrors: true });
229
+ }
230
+ #name;
231
+ connect(value) {
232
+ return new Observable(() => {
233
+ const tsub = this.#name
234
+ .pipe(filter(name => name !== "*"), switchMap(name => this.tracker.connect(value, name)))
235
+ .subscribe();
236
+ return tsub.unsubscribe.bind(tsub);
237
+ });
238
+ }
239
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: Busy, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
240
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "17.1.0", version: "17.3.5", type: Busy, isStandalone: true, selector: "[nuBusy]", inputs: { name: { classPropertyName: "name", publicName: "nuBusy", isSignal: true, isRequired: true, transformFunction: null } }, exportAs: ["nuBusy"], ngImport: i0 }); }
241
+ }
242
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: Busy, decorators: [{
243
+ type: Directive,
244
+ args: [{
245
+ standalone: true,
246
+ selector: "[nuBusy]",
247
+ exportAs: "nuBusy"
248
+ }]
249
+ }] });
250
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYnVzeS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvYnVzeS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQ0gsUUFBUSxFQUNSLFVBQVUsRUFDVixTQUFTLEVBQ1QsTUFBTSxFQUNOLE1BQU0sRUFDTixVQUFVLEVBQ1YsS0FBSyxFQUVMLFFBQVEsRUFDUixRQUFRLEVBRVIsUUFBUSxFQUNYLE1BQU0sZUFBZSxDQUFBO0FBQ3RCLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsUUFBUSxFQUFFLE1BQU0sNEJBQTRCLENBQUE7QUFFdkYsT0FBTyxFQUNILGVBQWUsRUFDZixhQUFhLEVBQ2IsTUFBTSxFQUNOLFFBQVEsRUFDUixZQUFZLEVBQ1osR0FBRyxFQUNILFVBQVUsRUFDVixJQUFJLEVBQ0osV0FBVyxFQUNYLFNBQVMsRUFDVCxHQUFHLEVBQ0gsVUFBVSxFQUNiLE1BQU0sTUFBTSxDQUFBO0FBRWIsT0FBTyxFQUFFLE9BQU8sRUFBRSxNQUFNLFFBQVEsQ0FBQTs7QUFVaEMsTUFBTSxPQUFPLFNBQVM7SUFBdEI7UUFDYSxZQUFPLEdBQUcsSUFBSSxlQUFlLENBQW1CLElBQUksQ0FBQyxDQUFBO1FBRTlELFVBQUssR0FBdUMsRUFBRSxDQUFBO1FBRXJDLGFBQVEsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FDakMsSUFBSSxDQUFDLENBQUMsS0FBSyxFQUFFLE9BQU8sRUFBRSxFQUFFO1lBQ3BCLElBQUksT0FBTyxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUNsQixPQUFPLEtBQUssQ0FBQTtZQUNoQixDQUFDO1lBRUQsSUFBSSxPQUFPLENBQUMsSUFBSSxJQUFJLElBQUksRUFBRSxDQUFDO2dCQUN2QixPQUFPLEtBQUssQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLENBQUE7WUFDOUIsQ0FBQztpQkFBTSxDQUFDO2dCQUNKLEtBQUssQ0FBQyxPQUFP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RCxNQUFNLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLEtBQUssR0FBRyxDQUFDLEVBQzVCLFNBQVMsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUN2RDtpQkFDQSxTQUFTLEVBQUUsQ0FBQTtZQUNoQixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFBO1FBQ3RDLENBQUMsQ0FBQyxDQUFBO0lBQ04sQ0FBQzs4R0FoRVEsSUFBSTtrR0FBSixJQUFJOzsyRkFBSixJQUFJO2tCQUxoQixTQUFTO21CQUFDO29CQUNQLFVBQVUsRUFBRSxJQUFJO29CQUNoQixRQUFRLEVBQUUsVUFBVTtvQkFDcEIsUUFBUSxFQUFFLFFBQVE7aUJBQ3JCIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHtcbiAgICBjb21wdXRlZCxcbiAgICBEZXN0cm95UmVmLFxuICAgIERpcmVjdGl2ZSxcbiAgICBpbmplY3QsXG4gICAgSW5qZWN0LFxuICAgIEluamVjdGFibGUsXG4gICAgaW5wdXQsXG4gICAgSW5wdXRTaWduYWwsXG4gICAgaXNTaWduYWwsXG4gICAgT3B0aW9uYWwsXG4gICAgU2lnbmFsLFxuICAgIFNraXBTZWxmXG59IGZyb20gXCJAYW5ndWxhci9jb3JlXCJcbmltcG9ydCB7IHRha2VVbnRpbERlc3Ryb3llZCwgdG9PYnNlcnZhYmxlLCB0b1NpZ25hbCB9IGZyb20gXCJAYW5ndWxhci9jb3JlL3J4anMtaW50ZXJvcFwiXG5cbmltcG9ydCB7XG4gICAgQmVoYXZpb3JTdWJqZWN0LFxuICAgIGNvbWJpbmVMYXRlc3QsXG4gICAgZmlsdGVyLFxuICAgIGZpbmFsaXplLFxuICAgIGlzT2JzZXJ2YWJsZSxcbiAgICBtYXAsXG4gICAgT2JzZXJ2YWJsZSxcbiAgICBzY2FuLFxuICAgIHNoYXJlUmVwbGF5LFxuICAgIHN3aXRjaE1hcCxcbiAgICB0YXAsXG4gICAgdGhyb3dFcnJvclxufSBmcm9tIFwicnhqc1wiXG5cbmltcG9ydCB7IGlzRXF1YWwgfSBmcm9tIFwibG9kYXNoXCJcblxuaW1wb3J0IHsgQ29ubmVjdFByb3RvY29sIH0gZnJvbSBcIi4vY29ubmVjdC1wcm90b2NvbFwiXG5cbmV4cG9ydCB0eXBlIEJ1c3lQcm9ncmVzcyA9IHsgdG90YWw6IG51bWJlcjsgY3VycmVudDogbnVtYmVyOyBtZXNzYWdlPzogc3RyaW5nIH1cbmV4cG9ydCB0eXBlIEJ1c3lFdmVudFBhcmFtcyA9IHsgYnVzeT86IGJvb2xlYW47IHByb2dyZXNzPzogQnVzeVByb2dyZXNzIH1cbmV4cG9ydCB0eXBlIEJ1c3lFdmVudCA9IHsgbmFtZTogc3RyaW5nIH0gJiBCdXN5RXZlbnRQYXJhbXNcblxuZXhwb3J0IHR5cGUgQnVzeUNvbm5lY3RhYmxlID0gT2JzZXJ2YWJsZTxib29sZWFuIHwgQnVzeUV2ZW50UGFyYW1zPiB8IEJ1c3lUcmFja2VyPGFueT4gfCBTaWduYWw8Ym9vbGVhbj5cblxuZXhwb3J0IGNsYXNzIEJ1c3lTdGF0ZTxUIGV4dGVuZHMgc3RyaW5nPiBpbXBsZW1lbnRzIENvbm5lY3RQcm90b2NvbCB7XG4gICAgcmVhZG9ubHkgI2V2ZW50cyA9IG5ldyBCZWhhdmlvclN1YmplY3Q8QnVzeUV2ZW50IHwgbnVsbD4obnVsbClcblxuICAgICNkYXRhOiB7IFtrZXk6IHN0cmluZ106IEJ1c3lFdmVudFBhcmFtcyB9ID0ge31cblxuICAgIHJlYWRvbmx5IGN1cnJlbnQkID0gdGhpcy4jZXZlbnRzLnBpcGUoXG4gICAgICAgIHNjYW4oKHN0YXRlLCBjdXJyZW50KSA9PiB7XG4gICAgICAgICAgICBpZiAoY3VycmVudCA9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHN0YXRlXG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIGlmIChjdXJyZW50LmJ1c3kgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIGRlbGV0ZSBzdGF0ZVtjdXJyZW50Lm5hbWVdXG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHN0YXRlW2N1cnJlbnQubmFtZV0gPSB7IGJ1c3k6IGN1cnJlbnQuYnVzeSwgcHJvZ3Jlc3M6IGN1cnJlbnQucHJvZ3Jlc3MgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHN0YXRlXG4gICAgICAgIH0sIHt9IGFzIGFueSksXG4gICAgICAgIHRhcChzdGF0ZSA9PiAodGhpcy4jZGF0YSA9IHN0YXRlKSksXG4gICAgICAgIG1hcCgoKSA9PiB0aGlzKSxcbiAgICAgICAgc2hhcmVSZXBsYXkoMSlcbiAgICApXG5cbiAgICBnZXQgaXNCdXN5KCk6IGJvb2xlYW4ge1xuICAgICAgICByZXR1cm4gT2JqZWN0LnZhbHVlcyh0aGlzLiNkYXRhKS5zb21lKHYgPT4gdi5idXN5KVxuICAgIH1cblxuICAgIGdldCBwcm9ncmVzcygpOiBCdXN5UHJvZ3Jlc3MgfCB1bmRlZmluZWQge1xuICAgICAgICBsZXQgdG90YWwgPSAwXG4gICAgICAgIGxldCBjdXJyZW50ID0gMFxuICAgICAgICBjb25zdCBtZXNzYWdlcyA9IFtdXG5cbiAgICAgICAgZm9yIChjb25zdCB2IG9mIE9iamVjdC52YWx1ZXModGhpcy4jZGF0YSkpIHtcbiAgICAgICAgICAgIGlmICh2LnByb2dyZXNzKSB7XG4gICAgICAgICAgICAgICAgdG90YWwgKz0gdi5wcm9ncmVzcy50b3RhbFxuICAgICAgICAgICAgICAgIGN1cnJlbnQgKz0gdi5wcm9ncmVzcy5jdXJyZW50XG4gICAgICAgICAgICAgICAgaWYgKHYucHJvZ3Jlc3MubWVzc2FnZSkge1xuICAgICAgICAgICAgICAgICAgICBtZXNzYWdlcy5wdXNoKHYucHJvZ3Jlc3MubWVzc2FnZSlcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodG90YWwgIT09IDAgJiYgY3VycmVudCAhPT0gMCkge1xuICAgICAgICAgICAgcmV0dXJuIHsgdG90YWwsIGN1cnJlbnQsIG1lc3NhZ2U6IG1lc3NhZ2VzLmxlbmd0aCA+IDAgPyBtZXNzYWdlcy5qb2luKFwiXFxuXCIpIDogdW5kZWZpbmVkIH1cbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiB1bmRlZmluZWRcbiAgICB9XG5cbiAgICBpcyhuYW1lOiBUKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLiNkYXRhW25hbWVdPy5idXN5ID09PSB0cnVlXG4gICAgfVxuXG4gICAgaGFzKG5hbWU6IFQpOiBib29sZWFuIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2RhdGFbbmFtZV0gIT0gbnVsbFxuICAgIH1cblxuICAgIHNldChuYW1lOiBULCBidXN5OiBib29sZWFuIHwgdW5kZWZpbmVkLCBwcm9ncmVzcz86IEJ1c3lQcm9ncmVzcykge1xuICAgICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy4jZGF0YVtuYW1lXVxuICAgICAgICBpZiAoY3VycmVudCA9PSBudWxsIHx8IGN1cnJlbnQuYnVzeSAhPT0gYnVzeSB8fCAhaXNFcXVhbChjdXJyZW50LnByb2dyZXNzLCBwcm9ncmVzcykpIHtcbiAgICAgICAgICAgIHRoaXMuI2V2ZW50cy5uZXh0KHsgbmFtZSwgYnVzeSwgcHJvZ3Jlc3MgfSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldChuYW1lOiBUKTogQnVzeUV2ZW50UGFyYW1zIHwgdW5kZWZpbmVkIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuI2RhdGFbbmFtZV1cbiAgICB9XG5cbiAgICBrZXlzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmtleXModGhpcy4jZGF0YSlcbiAgICB9XG5cbiAgICBlbnRyaWVzKCkge1xuICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy4jZGF0YSlcbiAgICB9XG5cbiAgICBjb25uZWN0KG86IE9ic2VydmFibGU8dHlwZW9mIHRoaXM+IHwgdHlwZW9mIHRoaXMsIHByZWZpeD86IHN0cmluZyk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgICAgICBpZiAobyBpbnN0YW5jZW9mIEJ1c3lTdGF0ZSkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY29ubmVjdChvLmN1cnJlbnQkLCBwcmVmaXgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IG90aGVyS2V5czogc3RyaW5nW10gPSBbXVxuXG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViID0gby5zdWJzY3JpYmUob3RoZXJTdGF0ZSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIGZvciAoY29uc3QgW2ssIHZdIG9mIG90aGVyU3RhdGUuZW50cmllcygpKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBrZXkgPSBwcmVmaXggPyBgJHtwcmVmaXh9LSR7a31gIDoga1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFvdGhlcktleXMuaW5jbHVkZXMoa2V5KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyS2V5cy5wdXNoKGtleSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KGtleSBhcyBULCB2LmJ1c3ksIHYucHJvZ3Jlc3MpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgc3ViLnVuc3Vic2NyaWJlKClcbiAgICAgICAgICAgICAgICAgICAgZm9yIChjb25zdCBrIG9mIG90aGVyS2V5cykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQoayBhcyBULCB1bmRlZmluZWQsIHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8qKlxuICogYGBgdHNcbiAqIEBDb21wb25lbnQoe1xuICogICBwcm92aWRlczogW0J1c3lUcmFja2VyXSxcbiAqICAgdGVtcGxhdGU6IGBcbiAqICAgICA8c3Bpbm5lciAqbmdJZj1cImJ1c3kuaXMoJ3JlbG9hZCcpIHwgYXN5bmNcIj5cbiAqICAgICA8c3Bpbm5lciAqbmdJZj1cImJ1c3kuYW55IHwgYXN5bmNcIj5cbiAqICAgICA8YnV0dG9uIG51QnVzeT1cInJlbG9hZFwiPjwvYnV0dG9uPlxuICogICBgXG4gKiB9KVxuICogZXhwb3J0IGNsYXNzIEdyaWQge1xuICogICByZWFkb25seSBidXN5ID0gaW5qZWN0KEJ1c3lUcmFja2VyPFwiY3JlYXRlXCIgfCBcInJlbG9hZFwiIHwgXCJ1cGRhdGVcIiB8IFwiZGVsZXRlXCI+KVxuICogfVxuICogYGBgXG4gKi9cbkBJbmplY3RhYmxlKClcbmV4cG9ydCBjbGFzcyBCdXN5VHJhY2tlcjxUIGV4dGVuZHMgc3RyaW5nPiBpbXBsZW1lbnRzIENvbm5lY3RQcm90b2NvbCB7XG4gICAgcHJpdmF0ZSByZWFkb25seSBkZXN0cm95UmVmID0gaW5qZWN0KERlc3Ryb3lSZWYpXG5cbiAgICBwcml2YXRlIHJlYWRvbmx5IF9zdGF0ZSA9IHRoaXMucGFyZW50XG4gICAgICAgID8gKHRoaXMucGFyZW50IGFzIHVua25vd24gYXMgeyBfc3RhdGU6IEJ1c3lTdGF0ZTxUPiB9KS5fc3RhdGVcbiAgICAgICAgOiBuZXcgQnVzeVN0YXRlKClcblxuICAgIHJlYWRvbmx5IHN0YXRlJCA9IHRoaXMuX3N0YXRlLmN1cnJlbnQkXG5cbiAgICByZWFkb25seSBzdGF0ZTogU2lnbmFsPEJ1c3lTdGF0ZTxUPj4gPSB0b1NpZ25hbCh0aGlzLnN0YXRlJCwgeyByZXF1aXJlU3luYzogdHJ1ZSB9KVxuXG4gICAgcmVhZG9ubHkgYW55ID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGF0ZSgpLmlzQnVzeSlcblxuICAgIHJlYWRvbmx5IHByb2dyZXNzID0gY29tcHV0ZWQoKCkgPT4gdGhpcy5zdGF0ZSgpLnByb2dyZXNzKVxuXG4gICAgY29uc3RydWN0b3IoQEluamVjdChCdXN5VHJhY2tlcikgQFNraXBTZWxmKCkgQE9wdGlvbmFsKCkgcHJpdmF0ZSByZWFkb25seSBwYXJlbnQ/OiBCdXN5VHJhY2tlcjxhbnk+KSB7fVxuXG4gICAgaW5pdChuYW1lOiBULCBidXN5OiBib29sZWFuLCBwcm9ncmVzcz86IEJ1c3lQcm9ncmVzcykge1xuICAgICAgICBjb25zdCBzdGF0ZSA9IHRoaXMuc3RhdGUoKVxuICAgICAgICBpZiAoIXN0YXRlLmhhcyhuYW1lKSkge1xuICAgICAgICAgICAgdGhpcy5zZXQobmFtZSwgYnVzeSwgcHJvZ3Jlc3MpXG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBzZXQobmFtZTogVCwgYnVzeTogYm9vbGVhbiwgcHJvZ3Jlc3M/OiBCdXN5UHJvZ3Jlc3MpIHtcbiAgICAgICAgdGhpcy5fc3RhdGUuc2V0KG5hbWUsIGJ1c3ksIHByb2dyZXNzKVxuICAgIH1cblxuICAgIGlzKG5hbWU6IFQpOiBPYnNlcnZhYmxlPGJvb2xlYW4+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUkLnBpcGUobWFwKHN0YXRlID0+IHN0YXRlLmlzKG5hbWUpKSlcbiAgICB9XG5cbiAgICB3YXRjaChuYW1lOiBUKTogT2JzZXJ2YWJsZTxCdXN5RXZlbnRQYXJhbXMgfCB1bmRlZmluZWQ+IHtcbiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGUkLnBpcGUobWFwKHN0YXRlID0+IHN0YXRlLmdldChuYW1lKSkpXG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogYGBgdHNcbiAgICAgKiBvYnNlcnZhYmxlLnBpcGUodGhpcy5idXN5LnJ4KFwic2F2ZVwiKSlcbiAgICAgKiBgYGBcbiAgICAgKi9cbiAgICByeChuYW1lOiBUKSB7XG4gICAgICAgIHJldHVybiA8Uz4oc3JjOiBPYnNlcnZhYmxlPFM+KSA9PlxuICAgICAgICAgICAgc3JjLnBpcGUoXG4gICAgICAgICAgICAgICAgdGFwKCgpID0+IHRoaXMuc2V0KG5hbWUsIHRydWUpKSxcbiAgICAgICAgICAgICAgICBmaW5hbGl6ZSgoKSA9PiB0aGlzLnNldChuYW1lLCBmYWxzZSkpXG4gICAgICAgICAgICApXG4gICAgfVxuXG4gICAgY29ubmVjdCh2YWx1ZTogQnVzeUNvbm5lY3RhYmxlLCBuYW1lPzogVCk6IE9ic2VydmFibGU8dW5rbm93bj4ge1xuICAgICAgICBpZiAoaXNPYnNlcnZhYmxlKHZhbHVlKSkge1xuICAgICAgICAgICAgaWYgKG5hbWUgPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0Vycm9yKCgpID0+IG5ldyBFcnJvcihcIk1pc3NpbmcgYG5hbWVgIHBhcmFtXCIpKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXR1cm4gbmV3IE9ic2VydmFibGUoKCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHN1YiA9IHZhbHVlLnN1YnNjcmliZShidXN5VmFsdWUgPT4ge1xuICAgICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGJ1c3lWYWx1ZSA9PT0gXCJib29sZWFuXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuc2V0KG5hbWUgYXMgVCwgYnVzeVZhbHVlKVxuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXQobmFtZSBhcyBULCAhIWJ1c3lWYWx1ZS5idXN5LCBidXN5VmFsdWUucHJvZ3Jlc3MpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KVxuICAgICAgICAgICAgICAgIHJldHVybiBzdWIudW5zdWJzY3JpYmUuYmluZChzdWIpXG4gICAgICAgICAgICB9KS5waXBlKHRha2VVbnRpbERlc3Ryb3llZCh0aGlzLmRlc3Ryb3lSZWYpKVxuICAgICAgICB9IGVsc2UgaWYgKHZhbHVlIGluc3RhbmNlb2YgQnVzeVRyYWNrZXIpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLl9zdGF0ZS5jb25uZWN0KHZhbHVlLnN0YXRlJCwgbmFtZSkucGlwZSh0YWtlVW50aWxEZXN0cm95ZWQodGhpcy5kZXN0cm95UmVmKSlcbiAgICAgICAgfSBlbHNlIGlmIChpc1NpZ25hbCh2YWx1ZSkpIHtcbiAgICAgICAgICAgIHJldHVybiB0aGlzLmNvbm5lY3QodG9PYnNlcnZhYmxlKHZhbHVlKSwgbmFtZSlcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdGhyb3dFcnJvcigoKSA9PiBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBCdXN5IHNvdXJjZVwiKSlcbiAgICB9XG59XG5cbi8qKlxuICogYGBgdHNcbiAqIEBDb21wb25lbnQoe1xuICogICB0ZW1wbGF0ZTogYFxuICogICAgIDxidXR0b24gbnVCdXN5PVwic2F2ZVwiPlNBVkU8L2J1dHRvbj5cbiAqICAgICA8cHJvZ3Jlc3MgbnVCdXN5PVwiZmlsZVVwbG9hZFwiPlxuICogICAgIDxwcm9ncmVzcyBudUJ1c3k9XCIqXCI+XG4gKiAgIGBcbiAqIH0pXG4gKiBgYGBcbiAqL1xuQERpcmVjdGl2ZSh7XG4gICAgc3RhbmRhbG9uZTogdHJ1ZSxcbiAgICBzZWxlY3RvcjogXCJbbnVCdXN5XVwiLFxuICAgIGV4cG9ydEFzOiBcIm51QnVzeVwiXG59KVxuZXhwb3J0IGNsYXNzIEJ1c3k8VCBleHRlbmRzIHN0cmluZz4gaW1wbGVtZW50cyBDb25uZWN0UHJvdG9jb2wge1xuICAgIHJlYWRvbmx5IHRyYWNrZXI6IEJ1c3lUcmFja2VyPFQ+ID0gaW5qZWN0KEJ1c3lUcmFja2VyLCB7IHNraXBTZWxmOiB0cnVlIH0pXG5cbiAgICByZWFkb25seSBuYW1lOiBJbnB1dFNpZ25hbDxUPiA9IGlucHV0LnJlcXVpcmVkPFQ+KHsgYWxpYXM6IFwibnVCdXN5XCIgfSlcbiAgICByZWFkb25seSAjbmFtZSA9IHRvT2JzZXJ2YWJsZSh0aGlzLm5hbWUpXG5cbiAgICByZWFkb25seSBzdGF0ZSQgPSBjb21iaW5lTGF0ZXN0KHsgbmFtZTogdGhpcy4jbmFtZSwgc3RhdGU6IHRoaXMudHJhY2tlci5zdGF0ZSQgfSkucGlwZShcbiAgICAgICAgbWFwKCh7IG5hbWUsIHN0YXRlIH0pID0+IHtcbiAgICAgICAgICAgIGlmIChuYW1lID09PSBcIipcIikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQnVzeSA9IHN0YXRlLmlzQnVzeVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGlzQnVzeTogaXNCdXN5LFxuICAgICAgICAgICAgICAgICAgICBpc090aGVyc0J1c3k6IGlzQnVzeSxcbiAgICAgICAgICAgICAgICAgICAgcHJvZ3Jlc3M6IHN0YXRlLnByb2dyZXNzXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBjb25zdCBzZWxmID0gc3RhdGUuZ2V0KG5hbWUpXG4gICAgICAgICAgICBpZiAoc2VsZikge1xuICAgICAgICAgICAgICAgIGNvbnN0IGlzQnVzeSA9IHNlbGYuYnVzeSA9PT0gdHJ1ZVxuICAgICAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgICAgIGlzQnVzeTogaXNCdXN5LFxuICAgICAgICAgICAgICAgICAgICBpc090aGVyc0J1c3k6IHN0YXRlLmlzQnVzeSAmJiAhaXNCdXN5LFxuICAgICAgICAgICAgICAgICAgICBwcm9ncmVzczogc2VsZi5wcm9ncmVzc1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgaXNCdXN5OiBmYWxzZSxcbiAgICAgICAgICAgICAgICAgICAgaXNPdGhlcnNCdXN5OiBzdGF0ZS5pc0J1c3ksXG4gICAgICAgICAgICAgICAgICAgIHByb2dyZXNzOiB1bmRlZmluZWRcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcblxuICAgIHJlYWRvbmx5IGlzQnVzeSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgICAgICBtYXAodiA9PiB2LmlzQnVzeSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuICAgIHJlYWRvbmx5IGlzQnVzeSA9IHRvU2lnbmFsKHRoaXMuaXNCdXN5JCwgeyByZWplY3RFcnJvcnM6IHRydWUgfSlcblxuICAgIHJlYWRvbmx5IGlzT3RoZXJzQnVzeSQgPSB0aGlzLnN0YXRlJC5waXBlKFxuICAgICAgICBtYXAodiA9PiB2LmlzT3RoZXJzQnVzeSksXG4gICAgICAgIHNoYXJlUmVwbGF5KDEpXG4gICAgKVxuICAgIHJlYWRvbmx5IGlzT3RoZXJzQnVzeSA9IHRvU2lnbmFsKHRoaXMuaXNPdGhlcnNCdXN5JCwgeyByZWplY3RFcnJvcnM6IHRydWUgfSlcblxuICAgIHJlYWRvbmx5IHByb2dyZXNzJCA9IHRoaXMuc3RhdGUkLnBpcGUoXG4gICAgICAgIG1hcCh2ID0+IHYucHJvZ3Jlc3MpLFxuICAgICAgICBzaGFyZVJlcGxheSgxKVxuICAgIClcbiAgICByZWFkb25seSBwcm9ncmVzcyA9IHRvU2lnbmFsKHRoaXMucHJvZ3Jlc3MkLCB7IHJlamVjdEVycm9yczogdHJ1ZSB9KVxuXG4gICAgY29ubmVjdCh2YWx1ZTogQnVzeUNvbm5lY3RhYmxlKSB7XG4gICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCB0c3ViID0gdGhpcy4jbmFtZVxuICAgICAgICAgICAgICAgIC5waXBlKFxuICAgICAgICAgICAgICAgICAgICBmaWx0ZXIobmFtZSA9PiBuYW1lICE9PSBcIipcIiksXG4gICAgICAgICAgICAgICAgICAgIHN3aXRjaE1hcChuYW1lID0+IHRoaXMudHJhY2tlci5jb25uZWN0KHZhbHVlLCBuYW1lKSlcbiAgICAgICAgICAgICAgICApXG4gICAgICAgICAgICAgICAgLnN1YnNjcmliZSgpXG4gICAgICAgICAgICByZXR1cm4gdHN1Yi51bnN1YnNjcmliZS5iaW5kKHRzdWIpXG4gICAgICAgIH0pXG4gICAgfVxufVxuIl19
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29ubmVjdC1wcm90b2NvbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29ubmVjdC1wcm90b2NvbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgT2JzZXJ2YWJsZSB9IGZyb20gXCJyeGpzXCJcblxuLyoqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGNsYXNzIEJ1c3kgaW1wbGVtZW50cyBDb25uZWN0UHJvdG9jb2wge1xuICogICAgIGNvbm5lY3Qob2I6IE9ic2VydmFibGU8YW55Pik6IE9ic2VydmFibGU8YW55PiB7XG4gKiAgICAgICAgIHJldHVybiBuZXcgT2JzZXJ2YWJsZShzID0+IHtcbiAqICAgICAgICAgICAgIGNvbnN0IHN1YiA9IHRoaXMuZG9Tb21ldGhpbmcoKS5zdWJzY3JpYmUocylcbiAqICAgICAgICAgICAgIHJldHVybiBzdWIudW5zdWJzY3JpYmUuYmluZChzdWIpXG4gKiAgICAgICAgIH0pXG4gKiAgICAgfVxuICogfVxuICogYGBgXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgQ29ubmVjdFByb3RvY29sIHtcbiAgICAvKipcbiAgICAgKiBAcmV0dXJucyBXaGVuIHRoZSBvYnNlcnZhYmxlIGlzIHVuc3Vic2NyaWJlZCwgdGhlIGNvbm5lY3QgbWV0aG9kIGNsZWFucyB1cCBldmVyeXRoaW5nXG4gICAgICovXG4gICAgY29ubmVjdCguLi5hcmdzOiBhbnlbXSk6IE9ic2VydmFibGU8dW5rbm93bj5cbn1cbiJdfQ==
@@ -74,10 +74,10 @@ export class Destructible {
74
74
  dispose() {
75
75
  this.ngOnDestroy();
76
76
  }
77
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: Destructible, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
78
- static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.1.3", type: Destructible, ngImport: i0 }); }
77
+ static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: Destructible, deps: [], target: i0.ɵɵFactoryTarget.Directive }); }
78
+ static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.3.5", type: Destructible, ngImport: i0 }); }
79
79
  }
80
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.1.3", ngImport: i0, type: Destructible, decorators: [{
80
+ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "17.3.5", ngImport: i0, type: Destructible, decorators: [{
81
81
  type: Directive
82
82
  }] });
83
83
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVzdHJ1Y3QuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2Rlc3RydWN0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxTQUFTLEVBQWEsTUFBTSxlQUFlLENBQUE7QUFFcEQsT0FBTyxFQUFjLEtBQUssRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLE1BQU0sQ0FBQTs7QUFNbEUsTUFBTSxPQUFPLFFBQVE7SUFDUixHQUFHLENBQXNCO0lBR2xDLFlBQVksRUFBZTtRQUhsQixRQUFHLEdBQUcsSUFBSSxPQUFPLEVBQVEsQ0FBQTtRQUN6QixPQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQTtRQUdoQyxJQUFJLEVBQUUsSUFBSSxJQUFJLEVBQUUsQ0FBQztZQUNiLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLENBQUE7UUFDaEIsQ0FBQztJQUNMLENBQUM7SUFDRCxJQUFJLElBQUk7UUFDSixPQUFPLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFBO0lBQzFCLENBQUM7SUFFRCxHQUFHLENBQUksQ0FBZ0I7UUFDbkIsSUFBSSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDWixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUE7UUFDMUIsQ0FBQzthQUFNLENBQUM7WUFDSixPQUFPLENBQUMsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO1FBQ3JDLENBQUM7SUFDTCxDQUFDO0lBRUQsVUFBVSxDQUF3QixDQUFJO1FBQ2xDLElBQUksSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ1osQ0FBQyxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBQ2YsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3hDLENBQUM7UUFFRCxPQUFPLENBQUMsQ0FBQTtJQUNaLENBQUM7SUFFRCxJQUFJLENBQWlCLEVBQUs7UUFDdEIsTUFBTSxNQUFNLEdBQUcsR0FBRyxFQUFFO1lBQ2hCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUE7WUFDNUIsSUFBSSxNQUFNLEVBQUUsQ0FBQztnQkFDVCxNQUFNLENBQUMsV0FBVyxDQUFDLEVBQUUsQ0FBQyxDQUFBO1lBQzFCLENBQUM7UUFDTCxDQUFDLENBQUE7UUFDRCxJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLE1BQU0sRUFBRSxDQUFBO1FBQ1osQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxNQUFNLENBQUMsQ0FBQTtRQUM3QixDQUFDO1FBRUQsT0FBTyxFQUFFLENBQUE7SUFDYixDQUFDO0lBRUQsR0FBRyxDQUFDLENBQWE7UUFDYixJQUFJLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztZQUNaLENBQUMsRUFBRSxDQUFBO1FBQ1AsQ0FBQzthQUFNLENBQUM7WUFDSixJQUFJLENBQUMsRUFBRSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQTtRQUN4QixDQUFDO0lBQ0wsQ0FBQztJQUVELEdBQUc7UUFDQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO1lBQ2IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsQ0FBQTtZQUNmLElBQUksQ0FBQyxHQUFHLENBQUMsUUFBUSxFQUFFLENBQUE7UUFDdkIsQ0FBQztJQUNMLENBQUM7Q0FDSjtBQUdELE1BQU0sT0FBZ0IsWUFBWTtJQURsQztRQUVJLGNBQWM7UUFDTCxNQUFDLEdBQUcsSUFBSSxRQUFRLEVBQUUsQ0FBQTtLQVk5QjtJQVZHLGNBQWM7SUFDZCxXQUFXO1FBQ1AsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQTtRQUNaLE9BQVEsSUFBWSxDQUFDLENBQUMsQ0FBQTtJQUMxQixDQUFDO0lBRUQsY0FBYztJQUNkLE9BQU87UUFDSCxJQUFJLENBQUMsV0FBVyxFQUFFLENBQUE7SUFDdEIsQ0FBQzs4R0FiaUIsWUFBWTtrR0FBWixZQUFZOzsyRkFBWixZQUFZO2tCQURqQyxTQUFTIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRGlyZWN0aXZlLCBPbkRlc3Ryb3kgfSBmcm9tIFwiQGFuZ3VsYXIvY29yZVwiXG5cbmltcG9ydCB7IE9ic2VydmFibGUsIHNoYXJlLCBTdWJqZWN0LCB0YWtlLCB0YWtlVW50aWwgfSBmcm9tIFwicnhqc1wiXG5cbmV4cG9ydCBpbnRlcmZhY2UgSURpc3Bvc2FibGUge1xuICAgIGRpc3Bvc2UoKTogdm9pZFxufVxuXG5leHBvcnQgY2xhc3MgRGVzdHJ1Y3Qge1xuICAgIHJlYWRvbmx5ICNvbiA9IG5ldyBTdWJqZWN0PHZvaWQ+KClcbiAgICByZWFkb25seSBvbiA9IHRoaXMuI29uLnBpcGUoc2hhcmUoKSlcblxuICAgIGNvbnN0cnVjdG9yKGZuPzogKCkgPT4gdm9pZCkge1xuICAgICAgICBpZiAoZm4gIT0gbnVsbCkge1xuICAgICAgICAgICAgdGhpcy5hbnkoZm4pXG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IGRvbmUoKTogYm9vbGVhbiB7XG4gICAgICAgIHJldHVybiB0aGlzLiNvbi5jbG9zZWRcbiAgICB9XG5cbiAgICBzdWI8VD4obzogT2JzZXJ2YWJsZTxUPik6IE9ic2VydmFibGU8VD4ge1xuICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgICByZXR1cm4gby5waXBlKHRha2UoMCkpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gby5waXBlKHRha2VVbnRpbCh0aGlzLm9uKSlcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGRpc3Bvc2FibGU8VCBleHRlbmRzIElEaXNwb3NhYmxlPihkOiBUKTogVCB7XG4gICAgICAgIGlmICh0aGlzLmRvbmUpIHtcbiAgICAgICAgICAgIGQuZGlzcG9zZSgpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uLnN1YnNjcmliZShkLmRpc3Bvc2UuYmluZChkKSlcbiAgICAgICAgfVxuXG4gICAgICAgIHJldHVybiBkXG4gICAgfVxuXG4gICAgbm9kZTxUIGV4dGVuZHMgTm9kZT4oZWw6IFQpOiBUIHtcbiAgICAgICAgY29uc3QgcmVtb3ZlID0gKCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyZW50ID0gZWwucGFyZW50Tm9kZVxuICAgICAgICAgICAgaWYgKHBhcmVudCkge1xuICAgICAgICAgICAgICAgIHBhcmVudC5yZW1vdmVDaGlsZChlbClcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAodGhpcy5kb25lKSB7XG4gICAgICAgICAgICByZW1vdmUoKVxuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgdGhpcy5vbi5zdWJzY3JpYmUocmVtb3ZlKVxuICAgICAgICB9XG5cbiAgICAgICAgcmV0dXJuIGVsXG4gICAgfVxuXG4gICAgYW55KGY6ICgpID0+IHZvaWQpOiB2b2lkIHtcbiAgICAgICAgaWYgKHRoaXMuZG9uZSkge1xuICAgICAgICAgICAgZigpXG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICB0aGlzLm9uLnN1YnNjcmliZShmKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgcnVuKCkge1xuICAgICAgICBpZiAoIXRoaXMuZG9uZSkge1xuICAgICAgICAgICAgdGhpcy4jb24ubmV4dCgpXG4gICAgICAgICAgICB0aGlzLiNvbi5jb21wbGV0ZSgpXG4gICAgICAgIH1cbiAgICB9XG59XG5cbkBEaXJlY3RpdmUoKVxuZXhwb3J0IGFic3RyYWN0IGNsYXNzIERlc3RydWN0aWJsZSBpbXBsZW1lbnRzIE9uRGVzdHJveSwgSURpc3Bvc2FibGUge1xuICAgIC8qKiBAaWdub3JlICovXG4gICAgcmVhZG9ubHkgZCA9IG5ldyBEZXN0cnVjdCgpXG5cbiAgICAvKiogQGlnbm9yZSAqL1xuICAgIG5nT25EZXN0cm95KCkge1xuICAgICAgICB0aGlzLmQucnVuKClcbiAgICAgICAgZGVsZXRlICh0aGlzIGFzIGFueSkuZFxuICAgIH1cblxuICAgIC8qKiBAaWdub3JlICovXG4gICAgZGlzcG9zZSgpIHtcbiAgICAgICAgdGhpcy5uZ09uRGVzdHJveSgpXG4gICAgfVxufVxuIl19
package/esm2022/index.mjs CHANGED
@@ -3,4 +3,7 @@ export { NumberWithUnit, UNIT_REGEX, NUMBER_REGEX } from "./number-with-unit";
3
3
  export { coerceBoolAttr } from "./bool-attr";
4
4
  export { rawCancelAnimationFrame, rawClearInterval, rawClearTimeout, rawRequestAnimationFrame, rawSetInterval, rawSetTimeout } from "./unngzone";
5
5
  export { FastDOM } from "./dom";
6
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFlLE1BQU0sWUFBWSxDQUFBO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQXVCLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNsRyxPQUFPLEVBQUUsY0FBYyxFQUFnQixNQUFNLGFBQWEsQ0FBQTtBQUMxRCxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixlQUFlLEVBQ2Ysd0JBQXdCLEVBQ3hCLGNBQWMsRUFDZCxhQUFhLEVBQ2hCLE1BQU0sWUFBWSxDQUFBO0FBQ25CLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJleHBvcnQgeyBEZXN0cnVjdCwgRGVzdHJ1Y3RpYmxlLCBJRGlzcG9zYWJsZSB9IGZyb20gXCIuL2Rlc3RydWN0XCJcbmV4cG9ydCB7IE51bWJlcldpdGhVbml0LCBOdW1iZXJXaXRoVW5pdElucHV0LCBVTklUX1JFR0VYLCBOVU1CRVJfUkVHRVggfSBmcm9tIFwiLi9udW1iZXItd2l0aC11bml0XCJcbmV4cG9ydCB7IGNvZXJjZUJvb2xBdHRyLCBCb29sZWFuSW5wdXQgfSBmcm9tIFwiLi9ib29sLWF0dHJcIlxuZXhwb3J0IHtcbiAgICByYXdDYW5jZWxBbmltYXRpb25GcmFtZSxcbiAgICByYXdDbGVhckludGVydmFsLFxuICAgIHJhd0NsZWFyVGltZW91dCxcbiAgICByYXdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsXG4gICAgcmF3U2V0SW50ZXJ2YWwsXG4gICAgcmF3U2V0VGltZW91dFxufSBmcm9tIFwiLi91bm5nem9uZVwiXG5leHBvcnQgeyBGYXN0RE9NIH0gZnJvbSBcIi4vZG9tXCJcbmV4cG9ydCB7IE51bWJlclJhbmdlIH0gZnJvbSBcIi4vdHlwZS11dGlsXCJcbiJdfQ==
6
+ export { Busy, BusyState, BusyTracker } from "./busy";
7
+ export { isPrimitive } from "./types/primitive";
8
+ export { deepClone, deepFreeze, isPlainObject, toSorted } from "./util";
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUNBLE9BQU8sRUFBRSxRQUFRLEVBQUUsWUFBWSxFQUFlLE1BQU0sWUFBWSxDQUFBO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQXVCLFVBQVUsRUFBRSxZQUFZLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQTtBQUNsRyxPQUFPLEVBQUUsY0FBYyxFQUFnQixNQUFNLGFBQWEsQ0FBQTtBQUMxRCxPQUFPLEVBQ0gsdUJBQXVCLEVBQ3ZCLGdCQUFnQixFQUNoQixlQUFlLEVBQ2Ysd0JBQXdCLEVBQ3hCLGNBQWMsRUFDZCxhQUFhLEVBQ2hCLE1BQU0sWUFBWSxDQUFBO0FBQ25CLE9BQU8sRUFBRSxPQUFPLEVBQUUsTUFBTSxPQUFPLENBQUE7QUFFL0IsT0FBTyxFQUFFLElBQUksRUFBNEMsU0FBUyxFQUFFLFdBQVcsRUFBRSxNQUFNLFFBQVEsQ0FBQTtBQU0vRixPQUFPLEVBQXVCLFdBQVcsRUFBK0IsTUFBTSxtQkFBbUIsQ0FBQTtBQUVqRyxPQUFPLEVBQUUsU0FBUyxFQUFFLFVBQVUsRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLE1BQU0sUUFBUSxDQUFBIiwic291cmNlc0NvbnRlbnQiOlsiZXhwb3J0IHsgQ29ubmVjdFByb3RvY29sIH0gZnJvbSBcIi4vY29ubmVjdC1wcm90b2NvbFwiXG5leHBvcnQgeyBEZXN0cnVjdCwgRGVzdHJ1Y3RpYmxlLCBJRGlzcG9zYWJsZSB9IGZyb20gXCIuL2Rlc3RydWN0XCJcbmV4cG9ydCB7IE51bWJlcldpdGhVbml0LCBOdW1iZXJXaXRoVW5pdElucHV0LCBVTklUX1JFR0VYLCBOVU1CRVJfUkVHRVggfSBmcm9tIFwiLi9udW1iZXItd2l0aC11bml0XCJcbmV4cG9ydCB7IGNvZXJjZUJvb2xBdHRyLCBCb29sZWFuSW5wdXQgfSBmcm9tIFwiLi9ib29sLWF0dHJcIlxuZXhwb3J0IHtcbiAgICByYXdDYW5jZWxBbmltYXRpb25GcmFtZSxcbiAgICByYXdDbGVhckludGVydmFsLFxuICAgIHJhd0NsZWFyVGltZW91dCxcbiAgICByYXdSZXF1ZXN0QW5pbWF0aW9uRnJhbWUsXG4gICAgcmF3U2V0SW50ZXJ2YWwsXG4gICAgcmF3U2V0VGltZW91dFxufSBmcm9tIFwiLi91bm5nem9uZVwiXG5leHBvcnQgeyBGYXN0RE9NIH0gZnJvbSBcIi4vZG9tXCJcbmV4cG9ydCB7IE51bWJlclJhbmdlIH0gZnJvbSBcIi4vdHlwZS11dGlsXCJcbmV4cG9ydCB7IEJ1c3ksIEJ1c3lFdmVudCwgQnVzeUV2ZW50UGFyYW1zLCBCdXN5UHJvZ3Jlc3MsIEJ1c3lTdGF0ZSwgQnVzeVRyYWNrZXIgfSBmcm9tIFwiLi9idXN5XCJcblxuZXhwb3J0IHsgQ29uY2F0IH0gZnJvbSBcIi4vdHlwZXMvY29uY2F0XCJcbmV4cG9ydCB7IEV2YWwsIElmQW55LCBJc0FueSwgSWZUdXBsZSwgSXNUdXBsZSwgVHVwbGVJdGVtcywgT2JqZWN0S2V5LCBNYXhSZWN1cnNpb24gfSBmcm9tIFwiLi90eXBlcy91dGlsXCJcbmV4cG9ydCB7IEZsYXR0ZW4sIEZsYXR0ZW5LZXlzIH0gZnJvbSBcIi4vdHlwZXMvZmxhdHRlblwiXG5leHBvcnQgeyBNZXJnZVVuaW9uIH0gZnJvbSBcIi4vdHlwZXMvbWVyZ2UtdW5pb25cIlxuZXhwb3J0IHsgUHJpbWl0aXZlLCBCdWlsdGlucywgaXNQcmltaXRpdmUsIEFzUHJpbWl0aXZlLCBUb1ByaW1pdGl2ZU1hcCB9IGZyb20gXCIuL3R5cGVzL3ByaW1pdGl2ZVwiXG5leHBvcnQgeyBEZWVwUmVhZG9ubHksIFJlYWRvbmx5RGF0ZSB9IGZyb20gXCIuL3R5cGVzL3JlYWRvbmx5XCJcbmV4cG9ydCB7IGRlZXBDbG9uZSwgZGVlcEZyZWV6ZSwgaXNQbGFpbk9iamVjdCwgdG9Tb3J0ZWQgfSBmcm9tIFwiLi91dGlsXCJcbiJdfQ==
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uY2F0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy90eXBlcy9jb25jYXQudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsInNvdXJjZXNDb250ZW50IjpbInR5cGUgQ29uY2F0VGFpbDxTRVAgZXh0ZW5kcyBzdHJpbmcsIFYgZXh0ZW5kcyBzdHJpbmc+ID0gViBleHRlbmRzIG5ldmVyID8gXCJcIiA6IGAke1NFUH0ke1Z9YFxuXG4vKipcbiAqIENvbmNhdGVuYXRlIHN0cmluZ3Mgd2l0aCBzZXBhcmF0b3JcbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIHR5cGUgQyA9IENvbmNhdDxcIi5cIiwgW1wiQVwiLCBcIkJcIiwgXCJDXCJdPiA9IFwiQS5CLkNcIlxuICogYGBgXG4gKi9cbmV4cG9ydCB0eXBlIENvbmNhdDxTRVAgZXh0ZW5kcyBzdHJpbmcsIFZBTFMgZXh0ZW5kcyBzdHJpbmdbXT4gPSBWQUxTIGV4dGVuZHMgW1xuICAgIGluZmVyIFYxIGV4dGVuZHMgc3RyaW5nLFxuICAgIC4uLmluZmVyIE9WIGV4dGVuZHMgc3RyaW5nW11cbl1cbiAgICA/IE9WW1wibGVuZ3RoXCJdIGV4dGVuZHMgMFxuICAgICAgICA/IGAke1YxfWBcbiAgICAgICAgOiBgJHtWMX0ke0NvbmNhdFRhaWw8U0VQLCBDb25jYXQ8U0VQLCBPVj4+fWBcbiAgICA6IG5ldmVyXG4iXX0=
@@ -0,0 +1,68 @@
1
+ export {};
2
+ // ! TEST ONLY
3
+ // enum CategoryState {
4
+ // Pending = "pending",
5
+ // Approved = "approved"
6
+ // }
7
+ // const enum ProductType {
8
+ // Normal = "normal",
9
+ // Virtual = "virtual"
10
+ // }
11
+ // interface UserName {
12
+ // first: string
13
+ // last: string
14
+ // title?: string
15
+ // }
16
+ // interface User {
17
+ // id: number
18
+ // name: UserName
19
+ // age: number
20
+ // state: "ACTIVE" | "INACTIVE"
21
+ // is_active: boolean
22
+ // created_time: Date
23
+ // }
24
+ // interface Category {
25
+ // id: number
26
+ // name: string
27
+ // state: CategoryState
28
+ // author: User
29
+ // parent: Category
30
+ // }
31
+ // interface Product {
32
+ // id: number
33
+ // name: string
34
+ // type: ProductType
35
+ // categories: Array<Category>
36
+ // [Symbol.iterator](): IteratorResult<any>
37
+ // }
38
+ // class Alma {
39
+ // id!: number
40
+ // author!: User
41
+ // xyz: any
42
+ // doSomething(): void {}
43
+ // }
44
+ // // TODO: ...
45
+ // type Poly = { type: "user"; name: string; age: number } | { type: "product"; name: string; sku: string }
46
+ // const flattened: Flatten<Product> = { name: 10, dsfsfd: "OK" }
47
+ // const almax: Flatten<Alma, ["root"]> = {}
48
+ // const almaxc: Flatten<Alma> = {}
49
+ // const flattened2: Flatten<Array<[User, Alma]>> = { "*.1.author.age": 10 }
50
+ // const flattened2b: Flatten<[User, Alma]> = { "1.author.age": 10 }
51
+ // const flattened3: Flatten<{ [key: string | number]: any }> = { dsfsdf: 10 }
52
+ // const TE: TupleEntries<[1, "ok", false]> = null
53
+ // const anyArray: Flatten<Array<any>> = { "*.alma": 10 }
54
+ // const anyArray2: Flatten<{ alma: any[] }> = { "alma.*.ok.x.y": 10 }
55
+ // const cat: Flatten<Category> = { "parent.parent.parent.parent.author.id": 10 }
56
+ // const dt: Flatten<[Date, string]> = { 0: new Date(), 1: "alma" }
57
+ // const ro_cat: DeepReadonly<Flatten<Category>> = {}
58
+ // ro_cat["author.age"] = 10
59
+ // const ro_obj: DeepReadonly<Flatten<{ [key: string]: any }>> = {}
60
+ // ro_obj["alma"]
61
+ // type X<T, F = Flatten<T>> = { [K in keyof F]: { ok: F[K] } }
62
+ // const ro_obj3: DeepReadonly<X<{ [key: string]: any }>> = {}
63
+ // type Obj = { [key: string]: any }
64
+ // export type Filter<T extends Obj> = _FilterLite<Flatten<T>>
65
+ // type _FilterLite<F extends { [key: string]: any }> = { [K in keyof F]: boolean }
66
+ // const xxx: Filter<Obj> = { 10: true }
67
+ // const xxx_r: DeepReadonly<Filter<Obj>> = { alma: true }
68
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZmxhdHRlbi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvdHlwZXMvZmxhdHRlbi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBdUlBLGNBQWM7QUFDZCx1QkFBdUI7QUFDdkIsMkJBQTJCO0FBQzNCLDRCQUE0QjtBQUM1QixJQUFJO0FBRUosMkJBQTJCO0FBQzNCLHlCQUF5QjtBQUN6QiwwQkFBMEI7QUFDMUIsSUFBSTtBQUVKLHVCQUF1QjtBQUN2QixvQkFBb0I7QUFDcEIsbUJBQW1CO0FBQ25CLHFCQUFxQjtBQUNyQixJQUFJO0FBRUosbUJBQW1CO0FBQ25CLGlCQUFpQjtBQUNqQixxQkFBcUI7QUFDckIsa0JBQWtCO0FBQ2xCLG1DQUFtQztBQUNuQyx5QkFBeUI7QUFDekIseUJBQXlCO0FBQ3pCLElBQUk7QUFFSix1QkFBdUI7QUFDdkIsaUJBQWlCO0FBQ2pCLG1CQUFtQjtBQUNuQiwyQkFBMkI7QUFDM0IsbUJBQW1CO0FBQ25CLHVCQUF1QjtBQUN2QixJQUFJO0FBRUosc0JBQXNCO0FBQ3RCLGlCQUFpQjtBQUNqQixtQkFBbUI7QUFDbkIsd0JBQXdCO0FBQ3hCLGtDQUFrQztBQUNsQywrQ0FBK0M7QUFDL0MsSUFBSTtBQUVKLGVBQWU7QUFDZixrQkFBa0I7QUFDbEIsb0JBQW9CO0FBQ3BCLGVBQWU7QUFFZiw2QkFBNkI7QUFDN0IsSUFBSTtBQUVKLGVBQWU7QUFDZiwyR0FBMkc7QUFFM0csaUVBQWlFO0FBQ2pFLDRDQUE0QztBQUM1QyxtQ0FBbUM7QUFDbkMsNEVBQTRFO0FBQzVFLG9FQUFvRTtBQUNwRSw4RUFBOEU7QUFDOUUsa0RBQWtEO0FBQ2xELHlEQUF5RDtBQUN6RCxzRUFBc0U7QUFDdEUsaUZBQWlGO0FBQ2pGLG1FQUFtRTtBQUVuRSxxREFBcUQ7QUFDckQsNEJBQTRCO0FBRTVCLG1FQUFtRTtBQUNuRSxpQkFBaUI7QUFFakIsK0RBQStEO0FBRS9ELDhEQUE4RDtBQUU5RCxvQ0FBb0M7QUFFcEMsOERBQThEO0FBRTlELG1GQUFtRjtBQUVuRix3Q0FBd0M7QUFDeEMsMERBQTBEIiwic291cmNlc0NvbnRlbnQiOlsiLyogZXNsaW50LWRpc2FibGUgQHR5cGVzY3JpcHQtZXNsaW50L2Jhbi10eXBlcyAqL1xuaW1wb3J0IHsgQ29uY2F0IH0gZnJvbSBcIi4vY29uY2F0XCJcbmltcG9ydCB7IE1lcmdlVW5pb24gfSBmcm9tIFwiLi9tZXJnZS11bmlvblwiXG5pbXBvcnQgeyBCdWlsdGlucyB9IGZyb20gXCIuL3ByaW1pdGl2ZVwiXG5pbXBvcnQgeyBJc0FueSwgSXNUdXBsZSwgTWF4UmVjdXJzaW9uLCBUdXBsZUl0ZW1zIH0gZnJvbSBcIi4vdXRpbFwiXG5cbnR5cGUgS2V5VHlwZXMgPSBzdHJpbmcgfCBudW1iZXJcbmV4cG9ydCB0eXBlIEZsYXR0ZW5FeGNsdWRlID0gRnVuY3Rpb25cblxuLyoqXG4gKiBAcGFyYW0gVCAtIFRoZSBvYmplY3Qgd2l0Y2ggd2Ugd2FudCB0byBmbGF0dGVuXG4gKiBAcGFyYW0gUCAtIFRoZSBwcmVmaXggb2YgcGF0aHMgKGRlZmF1bHQ6IFtdKVxuICogQHBhcmFtIEUgLSBUaGUgdmFsdWUgZXhjbHVkZXMgKGRlZmF1bHQ6IEZ1bmN0aW9uKVxuICogQHBhcmFtIEQgLSBNYXggZGVwdGggKGRlZmF1bHQ6IDEwKVxuICpcbiAqIEBleGFtcGxlXG4gKiBJbnB1dCB0eXBlOlxuICogYGBgdHNcbiAqIGludGVyZmFjZSBVc2VyIHtcbiAqICAgaWQ6IG51bWJlclxuICogICBuYW1lOiBzdHJpbmdcbiAqIH1cbiAqXG4gKiBpbnRlcmZhY2UgQ2F0ZWdvcnkge1xuICogICBpZDogbnVtYmVyXG4gKiAgIHRpdGxlOiBzdHJpbmdcbiAqIH1cbiAqXG4gKiBpbnRlcmZhY2UgQXJ0aWNsZSB7XG4gKiAgIGlkOiBudW1iZXJcbiAqICAgdGl0bGU6IHN0cmluZ1xuICogICBhdXRob3I6IFVzZXJcbiAqICAgY2F0ZWdvcmllczogQXJyYXk8Q2F0ZWdvcnk+XG4gKiB9XG4gKiBgYGBcbiAqXG4gKiBSZXN1bHQgdHlwZTpcbiAqIHR5cGUgRiA9IEZsYXR0ZW48QXJ0aWNsZT4gPSB7XG4gKiAgIFwiaWRcIjogbnVtYmVyLFxuICogICBcInRpdGxlXCI6IG51bWJlcixcbiAqICAgXCJhdXRob3IuaWRcIjogbnVtYmVyLFxuICogICBcImF1dGhvci5uYW1lXCI6IHN0cmluZyxcbiAqICAgXCJjYXRlZ29yaWVzLiouaWRcIjogbnVtYmVyLFxuICogICBcImNhdGVnb3JpZXMuKi50aXRsZVwiOiBzdHJpbmcsXG4gKiB9XG4gKi9cbmV4cG9ydCB0eXBlIEZsYXR0ZW48VCwgUCBleHRlbmRzIHN0cmluZ1tdID0gW10sIEUgPSBGbGF0dGVuRXhjbHVkZSwgRCBleHRlbmRzIG51bWJlciA9IE1heFJlY3Vyc2lvbj4gPSBfRmxhdHRlbjxcbiAgICBULFxuICAgIEUsXG4gICAgUCxcbiAgICBEXG4+XG5cbnR5cGUgX0ZsYXR0ZW48VCwgRSwgUCBleHRlbmRzIHN0cmluZ1tdLCBEIGV4dGVuZHMgbnVtYmVyPiA9IE1lcmdlVW5pb248X0ZsYXR0ZW5JdGVtPFQsIEUsIFAsIEQ+PlxuXG50eXBlIF9GbGF0dGVuSXRlbTxULCBFLCBQIGV4dGVuZHMgc3RyaW5nW10sIEQgZXh0ZW5kcyBudW1iZXI+ID0gUFtcImxlbmd0aFwiXSBleHRlbmRzIERcbiAgICA/IG5ldmVyXG4gICAgOiBUIGV4dGVuZHMgRVxuICAgICAgPyBuZXZlclxuICAgICAgOiBJc0FueTxUPiBleHRlbmRzIHRydWVcbiAgICAgICAgPyBfUGF0aDxULCBQPlxuICAgICAgICA6IFQgZXh0ZW5kcyBCdWlsdGluc1xuICAgICAgICAgID8gX1BhdGg8VCwgUD5cbiAgICAgICAgICA6IFQgZXh0ZW5kcyBBcnJheTxpbmZlciBWPlxuICAgICAgICAgICAgPyBJc1R1cGxlPFQ+IGV4dGVuZHMgdHJ1ZVxuICAgICAgICAgICAgICAgID8gX0ZsYXR0ZW5UdXBsZTxULCBFLCBQLCBEPlxuICAgICAgICAgICAgICAgIDogX0ZsYXR0ZW5BcnJheTxWLCBFLCBQLCBEPlxuICAgICAgICAgICAgOiBUIGV4dGVuZHMgb2JqZWN0XG4gICAgICAgICAgICAgID8gX0ZsYXR0ZW5PYmplY3Q8VCwgRSwgUCwgRD5cbiAgICAgICAgICAgICAgOiBfUGF0aDxULCBQPlxuXG50eXBlIF9GbGF0dGVuVHVwbGU8VCBleHRlbmRzIGFueVtdLCBFLCBQIGV4dGVuZHMgc3RyaW5nW10sIEQgZXh0ZW5kcyBudW1iZXIsIEkgPSBUdXBsZUl0ZW1zPFQ+PiA9IHtcbiAgICBbSyBpbiBrZXlvZiBJXTogSyBleHRlbmRzIEtleVR5cGVzXG4gICAgICAgID8gSXNBbnk8SVtLXT4gZXh0ZW5kcyB0cnVlXG4gICAgICAgICAgICA/IF9QYXRoPGFueSwgWy4uLlAsIGAke0t9YF0+XG4gICAgICAgICAgICA6IF9GbGF0dGVuSXRlbTxJW0tdLCBFLCBbLi4uUCwgYCR7S31gXSwgRD5cbiAgICAgICAgOiBuZXZlclxufVtrZXlvZiBJXVxuXG50eXBlIF9GbGF0dGVuQXJyYXk8VCwgRSwgUCBleHRlbmRzIHN0cmluZ1tdLCBEIGV4dGVuZHMgbnVtYmVyPiA9XG4gICAgSXNBbnk8VD4gZXh0ZW5kcyB0cnVlID8gX1BhdGg8YW55LCBbLi4uUCwgYCouJHtzdHJpbmd9YF0+IDogX0ZsYXR0ZW5JdGVtPFQsIEUsIFsuLi5QLCBcIipcIl0sIEQ+XG5cbnR5cGUgX0ZsYXR0ZW5PYmplY3Q8VCBleHRlbmRzIG9iamVjdCwgRSwgUCBleHRlbmRzIHN0cmluZ1tdLCBEIGV4dGVuZHMgbnVtYmVyPiA9IHtcbiAgICBbSyBpbiBrZXlvZiBUXS0/OiBLIGV4dGVuZHMgS2V5VHlwZXNcbiAgICAgICAgPyBJc0FueTxUW0tdPiBleHRlbmRzIHRydWVcbiAgICAgICAgICAgID8gX1BhdGg8YW55LCBbLi4uUCwgYCR7S31gXT5cbiAgICAgICAgICAgIDogX0ZsYXR0ZW5JdGVtPFRbS10sIEUsIFsuLi5QLCBgJHtLfWBdLCBEPlxuICAgICAgICA6IG5ldmVyXG59W2tleW9mIFRdXG5cbnR5cGUgX1BhdGg8VCwgUCBleHRlbmRzIHN0cmluZ1tdPiA9IFBbXCJsZW5ndGhcIl0gZXh0ZW5kcyAwID8gbmV2ZXIgOiB7IFtrZXkgaW4gQ29uY2F0PFwiLlwiLCBQPl06IFQgfVxuXG4vKipcbiAqIEBwYXJhbSBUIC0gVGhlIG9iamVjdCB3aXRjaCB3ZSB3YW50IHRvIGZsYXR0ZW5cbiAqIEBwYXJhbSBQIC0gVGhlIHByZWZpeCBvZiBwYXRocyAoZGVmYXVsdDogW10pXG4gKiBAcGFyYW0gRSAtIFRoZSB2YWx1ZSBleGNsdWRlcyAoZGVmYXVsdDogRnVuY3Rpb24pXG4gKiBAcGFyYW0gRCAtIE1heCBkZXB0aCAoZGVmYXVsdDogMTApXG4gKlxuICogQGV4YW1wbGVcbiAqIElucHV0IHR5cGU6XG4gKiBgYGB0c1xuICogaW50ZXJmYWNlIFVzZXIge1xuICogICBpZDogbnVtYmVyXG4gKiAgIG5hbWU6IHN0cmluZ1xuICogfVxuICpcbiAqIGludGVyZmFjZSBDYXRlZ29yeSB7XG4gKiAgIGlkOiBudW1iZXJcbiAqICAgdGl0bGU6IHN0cmluZ1xuICogfVxuICpcbiAqIGludGVyZmFjZSBBcnRpY2xlIHtcbiAqICAgaWQ6IG51bWJlclxuICogICB0aXRsZTogc3RyaW5nXG4gKiAgIGF1dGhvcjogVXNlclxuICogICBjYXRlZ29yaWVzOiBBcnJheTxDYXRlZ29yeT5cbiAqIH1cbiAqIGBgYFxuICpcbiAqIFJlc3VsdCB0eXBlOlxuICogdHlwZSBGSyA9IEZsYXR0ZW5LZXlzPEFydGljbGU+ID1cbiAqICAgfCBcImlkXCJcbiAqICAgfCBcInRpdGxlXCJcbiAqICAgfCBcImF1dGhvci5pZFwiXG4gKiAgIHwgXCJhdXRob3IubmFtZVwiXG4gKiAgIHwgXCJjYXRlZ29yaWVzLiouaWRcIlxuICogICB8IFwiY2F0ZWdvcmllcy4qLnRpdGxlXCJcbiAqL1xuZXhwb3J0IHR5cGUgRmxhdHRlbktleXM8XG4gICAgVCxcbiAgICBQIGV4dGVuZHMgc3RyaW5nW10gPSBbXSxcbiAgICBFID0gRmxhdHRlbkV4Y2x1ZGUsXG4gICAgRCBleHRlbmRzIG51bWJlciA9IE1heFJlY3Vyc2lvblxuPiA9IGtleW9mIEZsYXR0ZW48VCwgUCwgRSwgRD5cblxuLy8gISBURVNUIE9OTFlcbi8vIGVudW0gQ2F0ZWdvcnlTdGF0ZSB7XG4vLyAgICAgUGVuZGluZyA9IFwicGVuZGluZ1wiLFxuLy8gICAgIEFwcHJvdmVkID0gXCJhcHByb3ZlZFwiXG4vLyB9XG5cbi8vIGNvbnN0IGVudW0gUHJvZHVjdFR5cGUge1xuLy8gICAgIE5vcm1hbCA9IFwibm9ybWFsXCIsXG4vLyAgICAgVmlydHVhbCA9IFwidmlydHVhbFwiXG4vLyB9XG5cbi8vIGludGVyZmFjZSBVc2VyTmFtZSB7XG4vLyAgICAgZmlyc3Q6IHN0cmluZ1xuLy8gICAgIGxhc3Q6IHN0cmluZ1xuLy8gICAgIHRpdGxlPzogc3RyaW5nXG4vLyB9XG5cbi8vIGludGVyZmFjZSBVc2VyIHtcbi8vICAgICBpZDogbnVtYmVyXG4vLyAgICAgbmFtZTogVXNlck5hbWVcbi8vICAgICBhZ2U6IG51bWJlclxuLy8gICAgIHN0YXRlOiBcIkFDVElWRVwiIHwgXCJJTkFDVElWRVwiXG4vLyAgICAgaXNfYWN0aXZlOiBib29sZWFuXG4vLyAgICAgY3JlYXRlZF90aW1lOiBEYXRlXG4vLyB9XG5cbi8vIGludGVyZmFjZSBDYXRlZ29yeSB7XG4vLyAgICAgaWQ6IG51bWJlclxuLy8gICAgIG5hbWU6IHN0cmluZ1xuLy8gICAgIHN0YXRlOiBDYXRlZ29yeVN0YXRlXG4vLyAgICAgYXV0aG9yOiBVc2VyXG4vLyAgICAgcGFyZW50OiBDYXRlZ29yeVxuLy8gfVxuXG4vLyBpbnRlcmZhY2UgUHJvZHVjdCB7XG4vLyAgICAgaWQ6IG51bWJlclxuLy8gICAgIG5hbWU6IHN0cmluZ1xuLy8gICAgIHR5cGU6IFByb2R1Y3RUeXBlXG4vLyAgICAgY2F0ZWdvcmllczogQXJyYXk8Q2F0ZWdvcnk+XG4vLyAgICAgW1N5bWJvbC5pdGVyYXRvcl0oKTogSXRlcmF0b3JSZXN1bHQ8YW55PlxuLy8gfVxuXG4vLyBjbGFzcyBBbG1hIHtcbi8vICAgICBpZCE6IG51bWJlclxuLy8gICAgIGF1dGhvciE6IFVzZXJcbi8vICAgICB4eXo6IGFueVxuXG4vLyAgICAgZG9Tb21ldGhpbmcoKTogdm9pZCB7fVxuLy8gfVxuXG4vLyAvLyBUT0RPOiAuLi5cbi8vIHR5cGUgUG9seSA9IHsgdHlwZTogXCJ1c2VyXCI7IG5hbWU6IHN0cmluZzsgYWdlOiBudW1iZXIgfSB8IHsgdHlwZTogXCJwcm9kdWN0XCI7IG5hbWU6IHN0cmluZzsgc2t1OiBzdHJpbmcgfVxuXG4vLyBjb25zdCBmbGF0dGVuZWQ6IEZsYXR0ZW48UHJvZHVjdD4gPSB7IG5hbWU6IDEwLCBkc2ZzZmQ6IFwiT0tcIiB9XG4vLyBjb25zdCBhbG1heDogRmxhdHRlbjxBbG1hLCBbXCJyb290XCJdPiA9IHt9XG4vLyBjb25zdCBhbG1heGM6IEZsYXR0ZW48QWxtYT4gPSB7fVxuLy8gY29uc3QgZmxhdHRlbmVkMjogRmxhdHRlbjxBcnJheTxbVXNlciwgQWxtYV0+PiA9IHsgXCIqLjEuYXV0aG9yLmFnZVwiOiAxMCB9XG4vLyBjb25zdCBmbGF0dGVuZWQyYjogRmxhdHRlbjxbVXNlciwgQWxtYV0+ID0geyBcIjEuYXV0aG9yLmFnZVwiOiAxMCB9XG4vLyBjb25zdCBmbGF0dGVuZWQzOiBGbGF0dGVuPHsgW2tleTogc3RyaW5nIHwgbnVtYmVyXTogYW55IH0+ID0geyBkc2ZzZGY6IDEwIH1cbi8vIGNvbnN0IFRFOiBUdXBsZUVudHJpZXM8WzEsIFwib2tcIiwgZmFsc2VdPiA9IG51bGxcbi8vIGNvbnN0IGFueUFycmF5OiBGbGF0dGVuPEFycmF5PGFueT4+ID0geyBcIiouYWxtYVwiOiAxMCB9XG4vLyBjb25zdCBhbnlBcnJheTI6IEZsYXR0ZW48eyBhbG1hOiBhbnlbXSB9PiA9IHsgXCJhbG1hLioub2sueC55XCI6IDEwIH1cbi8vIGNvbnN0IGNhdDogRmxhdHRlbjxDYXRlZ29yeT4gPSB7IFwicGFyZW50LnBhcmVudC5wYXJlbnQucGFyZW50LmF1dGhvci5pZFwiOiAxMCB9XG4vLyBjb25zdCBkdDogRmxhdHRlbjxbRGF0ZSwgc3RyaW5nXT4gPSB7IDA6IG5ldyBEYXRlKCksIDE6IFwiYWxtYVwiIH1cblxuLy8gY29uc3Qgcm9fY2F0OiBEZWVwUmVhZG9ubHk8RmxhdHRlbjxDYXRlZ29yeT4+ID0ge31cbi8vIHJvX2NhdFtcImF1dGhvci5hZ2VcIl0gPSAxMFxuXG4vLyBjb25zdCByb19vYmo6IERlZXBSZWFkb25seTxGbGF0dGVuPHsgW2tleTogc3RyaW5nXTogYW55IH0+PiA9IHt9XG4vLyByb19vYmpbXCJhbG1hXCJdXG5cbi8vIHR5cGUgWDxULCBGID0gRmxhdHRlbjxUPj4gPSB7IFtLIGluIGtleW9mIEZdOiB7IG9rOiBGW0tdIH0gfVxuXG4vLyBjb25zdCByb19vYmozOiBEZWVwUmVhZG9ubHk8WDx7IFtrZXk6IHN0cmluZ106IGFueSB9Pj4gPSB7fVxuXG4vLyB0eXBlIE9iaiA9IHsgW2tleTogc3RyaW5nXTogYW55IH1cblxuLy8gZXhwb3J0IHR5cGUgRmlsdGVyPFQgZXh0ZW5kcyBPYmo+ID0gX0ZpbHRlckxpdGU8RmxhdHRlbjxUPj5cblxuLy8gdHlwZSBfRmlsdGVyTGl0ZTxGIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiBhbnkgfT4gPSB7IFtLIGluIGtleW9mIEZdOiBib29sZWFuIH1cblxuLy8gY29uc3QgeHh4OiBGaWx0ZXI8T2JqPiA9IHsgMTA6IHRydWUgfVxuLy8gY29uc3QgeHh4X3I6IERlZXBSZWFkb25seTxGaWx0ZXI8T2JqPj4gPSB7IGFsbWE6IHRydWUgfVxuIl19
@@ -0,0 +1,3 @@
1
+ export {};
2
+ // const final: MergeUnion<Test> = null as any
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibWVyZ2UtdW5pb24uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3R5cGVzL21lcmdlLXVuaW9uLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFnQkEsOENBQThDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRXZhbCB9IGZyb20gXCIuL3V0aWxcIlxuXG4vLyB0eXBlIFRlc3QgPVxuLy8gICAgIHwgeyBzdGF0ZTogXCJBQ1RJVkVcIiB9XG4vLyAgICAgfCB7IHN0YXRlOiBcIklOQUNUSVZFXCIgfVxuLy8gICAgIHwgeyB2aXNpYmxlOiBib29sZWFuIH1cbi8vICAgICB8IHsgaXNfYWN0aXZlOiB0cnVlIH1cbi8vICAgICB8IHsgaXNfYWN0aXZlOiBmYWxzZSB9XG5cbnR5cGUgQWxsS2V5czxUPiA9IFQgZXh0ZW5kcyBhbnkgPyBrZXlvZiBUIDogbmV2ZXJcblxudHlwZSBUeXBlT2ZLZXk8VCwgVEsgZXh0ZW5kcyBBbGxLZXlzPFQ+PiA9IFQgZXh0ZW5kcyB7IFtLIGluIFRLXT86IGFueSB9ID8gVFtUS10gOiBuZXZlclxuLy8gY29uc3QgX1N0YXRlOiBUeXBlT2ZLZXk8VGVzdCwgXCJzdGF0ZVwiPiA9IG51bGwgYXMgYW55XG5cbi8vIGV4cG9ydCB0eXBlIE1lcmdlVW5pb248VD4gPSBFdmFsPHsgW0sgaW4gQWxsS2V5czxUPl06IFR5cGVPZktleTxULCBLPiB9PlxuZXhwb3J0IHR5cGUgTWVyZ2VVbmlvbjxUPiA9IEV2YWw8eyBbSyBpbiBBbGxLZXlzPFQ+XTogVHlwZU9mS2V5PFQsIEs+IH0+XG4vLyBjb25zdCBmaW5hbDogTWVyZ2VVbmlvbjxUZXN0PiA9IG51bGwgYXMgYW55XG4iXX0=
@@ -0,0 +1,3 @@
1
+ import { isPrimitive } from "utility-types";
2
+ export { isPrimitive };
3
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHJpbWl0aXZlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvY29tbW9uL3NyYy90eXBlcy9wcmltaXRpdmUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFdBQVcsRUFBYSxNQUFNLGVBQWUsQ0FBQTtBQUl0RCxPQUFPLEVBQWEsV0FBVyxFQUFFLENBQUEiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBpc1ByaW1pdGl2ZSwgUHJpbWl0aXZlIH0gZnJvbSBcInV0aWxpdHktdHlwZXNcIlxuXG5pbXBvcnQgeyBJc0FueSB9IGZyb20gXCIuL3V0aWxcIlxuXG5leHBvcnQgeyBQcmltaXRpdmUsIGlzUHJpbWl0aXZlIH1cblxuLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC9iYW4tdHlwZXNcbmV4cG9ydCB0eXBlIEJ1aWx0aW5zID0gUHJpbWl0aXZlIHwgRnVuY3Rpb24gfCBEYXRlXG5cbmV4cG9ydCB0eXBlIFRvUHJpbWl0aXZlTWFwID0ge1xuICAgIHN0cmluZzogc3RyaW5nXG4gICAgZGVmYXVsdDogc3RyaW5nXG4gICAgbnVtYmVyOiBudW1iZXJcbiAgICBiaWdpbnQ6IGJpZ2ludFxuICAgIGJvb2xlYW46IGJvb2xlYW5cbiAgICBzeW1ib2w6IHN5bWJvbFxufVxuXG50eXBlIEFzU3RyaW5nPFQsIFAsIEYgPSBuZXZlcj4gPSBQIGV4dGVuZHMgc3RyaW5nID8gKFQgZXh0ZW5kcyBQcmltaXRpdmUgPyBQIDogRikgOiBuZXZlclxuXG4vLyB0eXBlIEhhc1RvU3RyaW5nPFQsIFAsIEYgPSBuZXZlcj4gPSBQIGV4dGVuZHMgUHJpbWl0aXZlID8gc3RyaW5nIDogVCBleHRlbmRzIHsgdG9TdHJpbmcoKTogc3RyaW5nIH0gPyBzdHJpbmcgOiBGXG5cbnR5cGUgSGFzVmFsdWVPZjxULCBQLCBGID0gbmV2ZXI+ID0gVCBleHRlbmRzIHsgdmFsdWVPZigpOiBQIH0gPyBQIDogRlxuXG50eXBlIEhhc1RvUHJpbWl0aXZlPFQsIFAsIEYgPSBuZXZlcj4gPSBUIGV4dGVuZHMgeyBbU3ltYm9sLnRvUHJpbWl0aXZlXShoaW50OiBzdHJpbmcpOiBQIH0gPyBQIDogRlxuXG50eXBlIF9Bc1ByaW1pdGl2ZTxULCBQPiA9IEhhc1RvUHJpbWl0aXZlPFQsIFAsIEhhc1ZhbHVlT2Y8VCwgUCwgQXNTdHJpbmc8VCwgUD4+PlxuXG5leHBvcnQgdHlwZSBBc1ByaW1pdGl2ZTxUPiA9XG4gICAgSXNBbnk8VD4gZXh0ZW5kcyB0cnVlXG4gICAgICAgID8gVG9QcmltaXRpdmVNYXBba2V5b2YgVG9QcmltaXRpdmVNYXBdXG4gICAgICAgIDogeyBbSyBpbiBrZXlvZiBUb1ByaW1pdGl2ZU1hcF06IF9Bc1ByaW1pdGl2ZTxULCBUb1ByaW1pdGl2ZU1hcFtLXT4gfVtrZXlvZiBUb1ByaW1pdGl2ZU1hcF1cbiJdfQ==
@@ -0,0 +1,22 @@
1
+ export {};
2
+ // const o1: DeepReadonly<{ alma: 1; xyz: number }> = { alma: 1, xyz: 20 }
3
+ // o1.xyz = 10
4
+ // const a1: DeepReadonly<Array<number>> = [1]
5
+ // a1[0] = 10
6
+ // const t1: DeepReadonly<[1, "ok", true, { nice: number }]> = [1, "ok", true, { nice: 10 }]
7
+ // t1[0] = 1
8
+ // t1[3].nice = 10
9
+ // t1.push()
10
+ // const t2: DeepReadonly<[1, any]> = [1, "ok", true, { nice: 10 }]
11
+ // t2[0] = 1
12
+ // const m1: DeepReadonly<Map<string, { nice: boolean }>> = new Map()
13
+ // m1.set("x", { nice: true })
14
+ // interface Rec {
15
+ // id: number
16
+ // parent: Rec
17
+ // }
18
+ // const r1: DeepReadonly<Rec> = {} as any
19
+ // r1.id = 10
20
+ // r1.parent.parent.parent = 10
21
+ // const d1: DeepReadonly<Date> = new Date()
22
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicmVhZG9ubHkuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL3R5cGVzL3JlYWRvbmx5LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFvRUEsMEVBQTBFO0FBQzFFLGNBQWM7QUFFZCw4Q0FBOEM7QUFDOUMsYUFBYTtBQUViLDRGQUE0RjtBQUM1RixZQUFZO0FBQ1osa0JBQWtCO0FBQ2xCLFlBQVk7QUFFWixtRUFBbUU7QUFDbkUsWUFBWTtBQUVaLHFFQUFxRTtBQUNyRSw4QkFBOEI7QUFFOUIsa0JBQWtCO0FBQ2xCLGlCQUFpQjtBQUNqQixrQkFBa0I7QUFDbEIsSUFBSTtBQUVKLDBDQUEwQztBQUMxQyxhQUFhO0FBQ2IsK0JBQStCO0FBRS9CLDRDQUE0QyIsInNvdXJjZXNDb250ZW50IjpbImltcG9ydCB7IFByaW1pdGl2ZSB9IGZyb20gXCIuL3ByaW1pdGl2ZVwiXG5pbXBvcnQgeyBJc0FueSwgSXNUdXBsZSwgTWF4UmVjdXJzaW9uIH0gZnJvbSBcIi4vdXRpbFwiXG5cbmV4cG9ydCB0eXBlIERlZXBSZWFkb25seTxULCBEIGV4dGVuZHMgbnVtYmVyID0gTWF4UmVjdXJzaW9uPiA9IF9EZWVwUmVhZG9ubHk8VCwgW10sIEQ+XG5cbnR5cGUgX0RlZXBSZWFkb25seTxULCBQIGV4dGVuZHMgbnVtYmVyW10sIEQgZXh0ZW5kcyBudW1iZXI+ID0gUFtcImxlbmd0aFwiXSBleHRlbmRzIERcbiAgICA/IG5ldmVyXG4gICAgOiBJc0FueTxUPiBleHRlbmRzIHRydWVcbiAgICAgID8gYW55XG4gICAgICA6IFQgZXh0ZW5kcyBQcmltaXRpdmUgfCAoKC4uLmFyZ3M6IGFueVtdKSA9PiBhbnkpXG4gICAgICAgID8gVFxuICAgICAgICA6IFQgZXh0ZW5kcyBEYXRlXG4gICAgICAgICAgPyBSZWFkb25seURhdGVcbiAgICAgICAgICA6IFQgZXh0ZW5kcyBBcnJheTxpbmZlciBWPlxuICAgICAgICAgICAgPyBJc1R1cGxlPFQ+IGV4dGVuZHMgdHJ1ZVxuICAgICAgICAgICAgICAgID8gX0RlZXBSZWFkb25seVR1cGxlPFQsIFAsIEQ+XG4gICAgICAgICAgICAgICAgOiBfRGVlcFJlYWRvbmx5QXJyYXk8ViwgUCwgRD5cbiAgICAgICAgICAgIDogVCBleHRlbmRzIE1hcDxpbmZlciBNSywgaW5mZXIgTVY+XG4gICAgICAgICAgICAgID8gX0RlZXBSZWFkb25seU1hcDxNSywgTVYsIFAsIEQ+XG4gICAgICAgICAgICAgIDogVCBleHRlbmRzIFNldDxpbmZlciBWPlxuICAgICAgICAgICAgICAgID8gX0RlZXBSZWFkb25seVNldDxWLCBQLCBEPlxuICAgICAgICAgICAgICAgIDogVCBleHRlbmRzIG9iamVjdFxuICAgICAgICAgICAgICAgICAgPyBfRGVlcFJlYWRvbmx5T2JqZWN0PFQsIFAsIEQ+XG4gICAgICAgICAgICAgICAgICA6IFRcblxudHlwZSBfRGVlcFJlYWRvbmx5VHVwbGU8VCBleHRlbmRzIGFueVtdLCBQIGV4dGVuZHMgbnVtYmVyW10sIEQgZXh0ZW5kcyBudW1iZXI+ID0gX1JlYWRvbmx5VHVwbGU8VCwgW10sIFtdLCBQLCBEPlxuXG50eXBlIF9SZWFkb25seVR1cGxlPFxuICAgIFQgZXh0ZW5kcyBhbnlbXSxcbiAgICBLIGV4dGVuZHMgbnVtYmVyW10sXG4gICAgUiBleHRlbmRzIHJlYWRvbmx5IGFueVtdLFxuICAgIFAgZXh0ZW5kcyBudW1iZXJbXSxcbiAgICBEIGV4dGVuZHMgbnVtYmVyXG4+ID0gVFtcImxlbmd0aFwiXSBleHRlbmRzIEtbXCJsZW5ndGhcIl1cbiAgICA/IFJcbiAgICA6IF9SZWFkb25seVR1cGxlPFQsIFsuLi5LLCBLW1wibGVuZ3RoXCJdXSwgcmVhZG9ubHkgWy4uLlIsIF9EZWVwUmVhZG9ubHk8VFtLW1wibGVuZ3RoXCJdXSwgWy4uLlAsIDBdLCBEPl0sIFAsIEQ+XG5cbnR5cGUgX0RlZXBSZWFkb25seUFycmF5PFQsIFAgZXh0ZW5kcyBudW1iZXJbXSwgRCBleHRlbmRzIG51bWJlcj4gPSBSZWFkb25seUFycmF5PFxuICAgIElzQW55PFQ+IGV4dGVuZHMgdHJ1ZSA/IGFueSA6IF9EZWVwUmVhZG9ubHk8VCwgWy4uLlAsIDBdLCBEPlxuPlxuXG50eXBlIF9EZWVwUmVhZG9ubHlPYmplY3Q8VCBleHRlbmRzIG9iamVjdCwgUCBleHRlbmRzIG51bWJlcltdLCBEIGV4dGVuZHMgbnVtYmVyPiA9IHtcbiAgICByZWFkb25seSBbSyBpbiBrZXlvZiBUXTogSXNBbnk8VFtLXT4gZXh0ZW5kcyB0cnVlID8gYW55IDogX0RlZXBSZWFkb25seTxUW0tdLCBbLi4uUCwgMF0sIEQ+XG59XG5cbnR5cGUgX0RlZXBSZWFkb25seU1hcDxLLCBWLCBQIGV4dGVuZHMgbnVtYmVyW10sIEQgZXh0ZW5kcyBudW1iZXI+ID0gUmVhZG9ubHlNYXA8SywgX0RlZXBSZWFkb25seTxWLCBbLi4uUCwgMF0sIEQ+PlxuXG50eXBlIF9EZWVwUmVhZG9ubHlTZXQ8ViwgUCBleHRlbmRzIG51bWJlcltdLCBEIGV4dGVuZHMgbnVtYmVyPiA9IFJlYWRvbmx5U2V0PF9EZWVwUmVhZG9ubHk8ViwgWy4uLlAsIDBdLCBEPj5cblxuZXhwb3J0IHR5cGUgUmVhZG9ubHlEYXRlID0gT21pdDxcbiAgICBEYXRlLFxuICAgIHwgXCJzZXRUaW1lXCJcbiAgICB8IFwic2V0TWlsbGlzZWNvbmRzXCJcbiAgICB8IFwic2V0VVRDTWlsbGlzZWNvbmRzXCJcbiAgICB8IFwic2V0U2Vjb25kc1wiXG4gICAgfCBcInNldFVUQ1NlY29uZHNcIlxuICAgIHwgXCJzZXRNaW51dGVzXCJcbiAgICB8IFwic2V0VVRDTWludXRlc1wiXG4gICAgfCBcInNldEhvdXJzXCJcbiAgICB8IFwic2V0VVRDSG91cnNcIlxuICAgIHwgXCJzZXREYXRlXCJcbiAgICB8IFwic2V0VVRDRGF0ZVwiXG4gICAgfCBcInNldE1vbnRoXCJcbiAgICB8IFwic2V0VVRDTW9udGhcIlxuICAgIHwgXCJzZXRGdWxsWWVhclwiXG4gICAgfCBcInNldFVUQ0Z1bGxZZWFyXCJcbj5cblxuLy8gY29uc3QgbzE6IERlZXBSZWFkb25seTx7IGFsbWE6IDE7IHh5ejogbnVtYmVyIH0+ID0geyBhbG1hOiAxLCB4eXo6IDIwIH1cbi8vIG8xLnh5eiA9IDEwXG5cbi8vIGNvbnN0IGExOiBEZWVwUmVhZG9ubHk8QXJyYXk8bnVtYmVyPj4gPSBbMV1cbi8vIGExWzBdID0gMTBcblxuLy8gY29uc3QgdDE6IERlZXBSZWFkb25seTxbMSwgXCJva1wiLCB0cnVlLCB7IG5pY2U6IG51bWJlciB9XT4gPSBbMSwgXCJva1wiLCB0cnVlLCB7IG5pY2U6IDEwIH1dXG4vLyB0MVswXSA9IDFcbi8vIHQxWzNdLm5pY2UgPSAxMFxuLy8gdDEucHVzaCgpXG5cbi8vIGNvbnN0IHQyOiBEZWVwUmVhZG9ubHk8WzEsIGFueV0+ID0gWzEsIFwib2tcIiwgdHJ1ZSwgeyBuaWNlOiAxMCB9XVxuLy8gdDJbMF0gPSAxXG5cbi8vIGNvbnN0IG0xOiBEZWVwUmVhZG9ubHk8TWFwPHN0cmluZywgeyBuaWNlOiBib29sZWFuIH0+PiA9IG5ldyBNYXAoKVxuLy8gbTEuc2V0KFwieFwiLCB7IG5pY2U6IHRydWUgfSlcblxuLy8gaW50ZXJmYWNlIFJlYyB7XG4vLyAgICAgaWQ6IG51bWJlclxuLy8gICAgIHBhcmVudDogUmVjXG4vLyB9XG5cbi8vIGNvbnN0IHIxOiBEZWVwUmVhZG9ubHk8UmVjPiA9IHt9IGFzIGFueVxuLy8gcjEuaWQgPSAxMFxuLy8gcjEucGFyZW50LnBhcmVudC5wYXJlbnQgPSAxMFxuXG4vLyBjb25zdCBkMTogRGVlcFJlYWRvbmx5PERhdGU+ID0gbmV3IERhdGUoKVxuIl19
@@ -0,0 +1,13 @@
1
+ export {};
2
+ // const exca1: ExcludeAny<any> = null
3
+ // const exca2: ExcludeAny<string | any> = "nice"
4
+ // const exca3: ExcludeAny<"p1" | "p2" | any> = "p2"
5
+ // const exca4: ExcludeAny<"p1" | "p2"> = "p2"
6
+ // // type X<T> = IsAny<T> extends true ? "T" : "F"
7
+ // // const isAnyCheck: X<unknown> = "F"
8
+ // // const isAnyCheck2: X<any> = "T"
9
+ // // const isAnyCheck3: X<{ [key: string]: any }> = "F"
10
+ // const po1: IsPlainObject<{ [key: string]: any }> = true
11
+ // const po2: IsPlainObject<{ p1: boolean; p2: string }> = false
12
+ // const po3: IsPlainObject<{ p1: boolean; p2: any }> = false
13
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvdHlwZXMvdXRpbC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiO0FBNERBLHNDQUFzQztBQUN0QyxpREFBaUQ7QUFDakQsb0RBQW9EO0FBQ3BELDhDQUE4QztBQUU5QyxtREFBbUQ7QUFFbkQsd0NBQXdDO0FBQ3hDLHFDQUFxQztBQUNyQyx3REFBd0Q7QUFDeEQsMERBQTBEO0FBQzFELGdFQUFnRTtBQUNoRSw2REFBNkQiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBNZXJnZVVuaW9uIH0gZnJvbSBcIi4vbWVyZ2UtdW5pb25cIlxuXG5leHBvcnQgdHlwZSBNYXhSZWN1cnNpb24gPSAxMFxuXG4vLyBjb25zdCDhl4XNtuG7viA9IFN5bWJvbChcIl9fYW55X19cIilcblxuLy8gaW50ZXJmYWNlIEFueU9iamVjdCB7XG4vLyAgICAg4ZeFzbbhu746IGJvb2xlYW5cbi8vIH1cblxuLy8gZXhwb3J0IHR5cGUgSXNBbnk8VD4gPSBBbnlPYmplY3QgZXh0ZW5kcyBUID8gdHJ1ZSA6IGZhbHNlXG5leHBvcnQgdHlwZSBJZkFueTxPLCBULCBGPiA9IDAgZXh0ZW5kcyAxICYgTyA/IFQgOiBGXG5leHBvcnQgdHlwZSBJc0FueTxUPiA9IElmQW55PFQsIHRydWUsIGZhbHNlPlxuXG5leHBvcnQgdHlwZSBJZlR1cGxlPE8sIFQsIEYsIEUgPSBuZXZlcj4gPVxuICAgIE8gZXh0ZW5kcyBBcnJheTxhbnk+ID8gKC0xIGV4dGVuZHMgT1tcImxlbmd0aFwiXSA/IEYgOiBPW1wibGVuZ3RoXCJdIGV4dGVuZHMgMCA/IEUgOiBUKSA6IEZcbmV4cG9ydCB0eXBlIElzVHVwbGU8VCwgRSA9IG5ldmVyPiA9IElmVHVwbGU8VCwgdHJ1ZSwgZmFsc2UsIEU+XG5cbi8qKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiB0eXBlIFR1cGxlID0gVHVwbGVFbnRyaWVzPFsxLCBcIm9rXCIsIGZhbHNlXT5cbiAqIFR1cGxlID0gezA6IDEsIDE6IFwib2tcIiwgMjogZmFsc2V9XG4gKiBgYGBcbiAqL1xuZXhwb3J0IHR5cGUgVHVwbGVJdGVtczxUPiA9IFQgZXh0ZW5kcyBBcnJheTxhbnk+ID8gTWVyZ2VVbmlvbjxfVHVwbGVJdGVtczxUPj4gOiBuZXZlclxuXG50eXBlIF9UdXBsZUl0ZW1zPFxuICAgIFQgZXh0ZW5kcyBhbnlbXSxcbiAgICBLIGV4dGVuZHMgbnVtYmVyW10gPSBbXSxcbiAgICBPIGV4dGVuZHMgeyBba2V5OiBzdHJpbmddOiBudW1iZXIgfSA9IG5ldmVyXG4+ID0gVFtcImxlbmd0aFwiXSBleHRlbmRzIEtbXCJsZW5ndGhcIl1cbiAgICA/IE9cbiAgICA6IF9UdXBsZUl0ZW1zPFQsIFsuLi5LLCBLW1wibGVuZ3RoXCJdXSwgTyB8IHsgW2tleSBpbiBLW1wibGVuZ3RoXCJdXTogVFtLW1wibGVuZ3RoXCJdXSB9PlxuXG4vLyBUT0RPOlxuLy8gZXhwb3J0IHR5cGUgRXhjbHVkZUFueTxULCBVID0gVW5pb25pemU8eyBba2V5OiBzdHJpbmddOiBUIH0+PiA9IHsgW0sgaW4ga2V5b2YgVV06IElmQW55PFVbS10sIG5ldmVyLCBVW0tdPiB9W2tleW9mIFVdXG4vLyBleHBvcnQgdHlwZSBFeGNsdWRlQW55PFQ+ID0gQXJyYXk8VD5bbnVtYmVyXVxuXG5leHBvcnQgdHlwZSBPYmplY3RLZXkgPSBzdHJpbmcgfCBudW1iZXIgfCBzeW1ib2xcbi8vIGV4cG9ydCB0eXBlIFBsYWluT2JqZWN0PEtUIGV4dGVuZHMgT2JqZWN0S2V5ID0gT2JqZWN0S2V5PiA9IHsgW2tleSBpbiBLVF06IGFueSB9XG4vLyBleHBvcnQgdHlwZSBJZlBsYWluT2JqZWN0PE8sIFQsIEY+ID0gTyBleHRlbmRzIHsgW2tleTogT2JqZWN0S2V5XTogYW55IH1cbi8vICAgICA/IEV4Y2x1ZGVBbnk8T1trZXlvZiBPXT4gZXh0ZW5kcyBuZXZlclxuLy8gICAgICAgICA/IFRcbi8vICAgICAgICAgOiBGXG4vLyAgICAgOiBGXG4vLyBleHBvcnQgdHlwZSBJc1BsYWluT2JqZWN0PFQ+ID0gSWZQbGFpbk9iamVjdDxULCB0cnVlLCBmYWxzZT5cblxuLy8gZXhwb3J0IHR5cGUgSWZQbGFpbkFycmF5PE8sIFQsIEY+ID0gTyBleHRlbmRzIEFycmF5PGFueT4gPyAoRXhjbHVkZUFueTxPW251bWJlcl0+IGV4dGVuZHMgbmV2ZXIgPyBUIDogRikgOiBGXG4vLyBleHBvcnQgdHlwZSBJc1BsYWluQXJyYXk8VD4gPSBJZlBsYWluQXJyYXk8VCwgdHJ1ZSwgZmFsc2U+XG5cbi8qKlxuICogRXZhdWxhdGUgdHlwZSBleHByZXNzaW9uc1xuICpcbiAqIGBgYHRzXG4gKiBleHBvcnQgdHlwZSBLZXlPZjxUPiA9IEV2YWw8eyBbSyBpbiBrZXlvZiBUXTogVFtLXSBleHRlbmRzIG5ldmVyID8gbmV2ZXIgOiBLIH1ba2V5b2YgVF0+XG4gKiBgYGBcbiAqL1xuZXhwb3J0IHR5cGUgRXZhbDxUPiA9IEFycmF5PFQ+W251bWJlcl1cblxuLy8gY29uc3QgZXhjYTE6IEV4Y2x1ZGVBbnk8YW55PiA9IG51bGxcbi8vIGNvbnN0IGV4Y2EyOiBFeGNsdWRlQW55PHN0cmluZyB8IGFueT4gPSBcIm5pY2VcIlxuLy8gY29uc3QgZXhjYTM6IEV4Y2x1ZGVBbnk8XCJwMVwiIHwgXCJwMlwiIHwgYW55PiA9IFwicDJcIlxuLy8gY29uc3QgZXhjYTQ6IEV4Y2x1ZGVBbnk8XCJwMVwiIHwgXCJwMlwiPiA9IFwicDJcIlxuXG4vLyAvLyB0eXBlIFg8VD4gPSBJc0FueTxUPiBleHRlbmRzIHRydWUgPyBcIlRcIiA6IFwiRlwiXG5cbi8vIC8vIGNvbnN0IGlzQW55Q2hlY2s6IFg8dW5rbm93bj4gPSBcIkZcIlxuLy8gLy8gY29uc3QgaXNBbnlDaGVjazI6IFg8YW55PiA9IFwiVFwiXG4vLyAvLyBjb25zdCBpc0FueUNoZWNrMzogWDx7IFtrZXk6IHN0cmluZ106IGFueSB9PiA9IFwiRlwiXG4vLyBjb25zdCBwbzE6IElzUGxhaW5PYmplY3Q8eyBba2V5OiBzdHJpbmddOiBhbnkgfT4gPSB0cnVlXG4vLyBjb25zdCBwbzI6IElzUGxhaW5PYmplY3Q8eyBwMTogYm9vbGVhbjsgcDI6IHN0cmluZyB9PiA9IGZhbHNlXG4vLyBjb25zdCBwbzM6IElzUGxhaW5PYmplY3Q8eyBwMTogYm9vbGVhbjsgcDI6IGFueSB9PiA9IGZhbHNlXG4iXX0=