@ngutil/common 0.0.7 → 0.0.9
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 +98 -0
- package/connect-protocol.d.ts +20 -0
- package/esm2022/busy.mjs +250 -0
- package/esm2022/connect-protocol.mjs +2 -0
- package/esm2022/destruct.mjs +3 -3
- package/esm2022/index.mjs +4 -1
- package/esm2022/types/concat.mjs +2 -0
- package/esm2022/types/flatten.mjs +68 -0
- package/esm2022/types/merge-union.mjs +3 -0
- package/esm2022/types/primitive.mjs +3 -0
- package/esm2022/types/readonly.mjs +22 -0
- package/esm2022/types/util.mjs +13 -0
- package/esm2022/util.mjs +52 -0
- package/fesm2022/ngutil-common.mjs +305 -6
- package/fesm2022/ngutil-common.mjs.map +1 -1
- package/index.d.ts +9 -0
- package/package.json +9 -6
- package/types/concat.d.ts +14 -0
- package/types/flatten.d.ts +94 -0
- package/types/merge-union.d.ts +9 -0
- package/types/primitive.d.ts +23 -0
- package/types/readonly.d.ts +14 -0
- package/types/util.d.ts +29 -0
- package/util.d.ts +13 -0
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
|
+
}
|
package/esm2022/busy.mjs
ADDED
|
@@ -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==
|
package/esm2022/destruct.mjs
CHANGED
|
@@ -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.
|
|
78
|
-
static { this.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "14.0.0", version: "17.
|
|
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.
|
|
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
|
-
|
|
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=
|