@dotglitch/ngx-common 1.0.2
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/README.md +24 -0
- package/components/dynamic-html/dynamic-html.component.d.ts +15 -0
- package/components/dynamic-html/dynamic-html.module.d.ts +10 -0
- package/components/dynamic-html/dynamic-html.service.d.ts +18 -0
- package/components/dynamic-html/types.d.ts +12 -0
- package/components/lazy-loader/lazy-loader.component.d.ts +146 -0
- package/components/lazy-loader/lazy-loader.module.d.ts +10 -0
- package/components/lazy-loader/lazy-loader.service.d.ts +71 -0
- package/components/lazy-loader/types.d.ts +142 -0
- package/components/menu/menu.component.d.ts +52 -0
- package/components/tooltip/tooltip.component.d.ts +35 -0
- package/directives/menu.directive.d.ts +27 -0
- package/directives/tooltip.directive.d.ts +26 -0
- package/directives/utils.d.ts +8 -0
- package/esm2020/components/dynamic-html/dynamic-html.component.mjs +43 -0
- package/esm2020/components/dynamic-html/dynamic-html.module.mjs +27 -0
- package/esm2020/components/dynamic-html/dynamic-html.service.mjs +66 -0
- package/esm2020/components/dynamic-html/types.mjs +7 -0
- package/esm2020/components/lazy-loader/lazy-loader.component.mjs +360 -0
- package/esm2020/components/lazy-loader/lazy-loader.module.mjs +29 -0
- package/esm2020/components/lazy-loader/lazy-loader.service.mjs +215 -0
- package/esm2020/components/lazy-loader/types.mjs +26 -0
- package/esm2020/components/menu/menu.component.mjs +316 -0
- package/esm2020/components/tooltip/tooltip.component.mjs +135 -0
- package/esm2020/directives/menu.directive.mjs +112 -0
- package/esm2020/directives/tooltip.directive.mjs +92 -0
- package/esm2020/directives/utils.mjs +120 -0
- package/esm2020/dotglitch-ngx-common.mjs +5 -0
- package/esm2020/pipes/html-bypass.pipe.mjs +27 -0
- package/esm2020/pipes/resource-bypass.pipe.mjs +27 -0
- package/esm2020/pipes/script-bypass.pipe.mjs +27 -0
- package/esm2020/pipes/style-bypass.pipe.mjs +27 -0
- package/esm2020/pipes/url-bypass.pipe.mjs +27 -0
- package/esm2020/public-api.mjs +39 -0
- package/esm2020/services/dependency.service.mjs +55 -0
- package/esm2020/services/dialog.service.mjs +66 -0
- package/esm2020/services/fetch.service.mjs +71 -0
- package/esm2020/services/keyboard.service.mjs +128 -0
- package/esm2020/types/menu.mjs +2 -0
- package/esm2020/types/popup.mjs +2 -0
- package/esm2020/utils/index.mjs +39 -0
- package/fesm2015/dotglitch-ngx-common.mjs +1997 -0
- package/fesm2015/dotglitch-ngx-common.mjs.map +1 -0
- package/fesm2020/dotglitch-ngx-common.mjs +1977 -0
- package/fesm2020/dotglitch-ngx-common.mjs.map +1 -0
- package/index.d.ts +5 -0
- package/package.json +60 -0
- package/pipes/html-bypass.pipe.d.ts +16 -0
- package/pipes/resource-bypass.pipe.d.ts +16 -0
- package/pipes/script-bypass.pipe.d.ts +16 -0
- package/pipes/style-bypass.pipe.d.ts +16 -0
- package/pipes/url-bypass.pipe.d.ts +16 -0
- package/public-api.d.ts +34 -0
- package/services/dependency.service.d.ts +19 -0
- package/services/dialog.service.d.ts +41 -0
- package/services/fetch.service.d.ts +28 -0
- package/services/keyboard.service.d.ts +79 -0
- package/types/menu.d.ts +90 -0
- package/types/popup.d.ts +27 -0
- package/utils/index.d.ts +19 -0
|
@@ -0,0 +1,215 @@
|
|
|
1
|
+
import { Inject, Injectable, InjectionToken } from '@angular/core';
|
|
2
|
+
import { ComponentResolveStrategy } from './types';
|
|
3
|
+
import { stringToSlug, Logger } from '../../utils';
|
|
4
|
+
import * as i0 from "@angular/core";
|
|
5
|
+
// Monkey-patch the type of these symbols.
|
|
6
|
+
const $id = Symbol("id");
|
|
7
|
+
const $group = Symbol("group");
|
|
8
|
+
export const NGX_LAZY_LOADER_CONFIG = new InjectionToken('config');
|
|
9
|
+
export class LazyLoaderService {
|
|
10
|
+
get err() { return LazyLoaderService.config.logger.err; }
|
|
11
|
+
get log() { return LazyLoaderService.config.logger.log; }
|
|
12
|
+
get warn() { return LazyLoaderService.config.logger.warn; }
|
|
13
|
+
constructor(config = {}) {
|
|
14
|
+
// Ensure this is singleton and works regardless of special instancing requirements.
|
|
15
|
+
LazyLoaderService.configure(config);
|
|
16
|
+
}
|
|
17
|
+
static configure(config) {
|
|
18
|
+
const { log, warn, err } = Logger("ngx-lazy-loader", "#009688");
|
|
19
|
+
this.config = {
|
|
20
|
+
componentResolveStrategy: ComponentResolveStrategy.PickFirst,
|
|
21
|
+
logger: {
|
|
22
|
+
log,
|
|
23
|
+
warn,
|
|
24
|
+
err
|
|
25
|
+
},
|
|
26
|
+
...config
|
|
27
|
+
};
|
|
28
|
+
config.entries?.forEach(e => this.addComponentToRegistry(e));
|
|
29
|
+
// If a custom resolution strategy is provided but no resolution function is passed,
|
|
30
|
+
// we throw an error
|
|
31
|
+
if (this.config.componentResolveStrategy == ComponentResolveStrategy.Custom &&
|
|
32
|
+
!this.config.customResolver) {
|
|
33
|
+
throw new Error("Cannot initialize. Configuration specifies a custom resolve matcher but none was provided");
|
|
34
|
+
}
|
|
35
|
+
if (this.config.loaderDistractorComponent && this.config.loaderDistractorTemplate)
|
|
36
|
+
throw new Error("Cannot have both a Component and Template for Distractor view.");
|
|
37
|
+
if (this.config.errorComponent && this.config.errorTemplate)
|
|
38
|
+
throw new Error("Cannot have both a Component and Template for Error view.");
|
|
39
|
+
if (this.config.notFoundComponent && this.config.notFoundTemplate)
|
|
40
|
+
throw new Error("Cannot have both a Component and Template for NotFound view.");
|
|
41
|
+
}
|
|
42
|
+
static addComponentToRegistry(registration) {
|
|
43
|
+
if (!registration)
|
|
44
|
+
throw new Error("Cannot add <undefined> component into registry.");
|
|
45
|
+
// Clone the object into our repository and transfer the id into a standardized slug format
|
|
46
|
+
const id = stringToSlug(registration.id ?? Date.now().toString()); // purge non-basic ASCII chars
|
|
47
|
+
const group = registration.group || "default";
|
|
48
|
+
registration[$id] = id;
|
|
49
|
+
registration[$group] = id;
|
|
50
|
+
if (!this.registry[group])
|
|
51
|
+
this.registry[group] = [];
|
|
52
|
+
// Check if we already have a registration for the component
|
|
53
|
+
// if (this.registry[group] && typeof this.registry[group]['load'] == "function") {
|
|
54
|
+
// // Warn the developer that the state is problematic
|
|
55
|
+
// this.config.logger.warn(
|
|
56
|
+
// `A previous entry already exists for ${id}! The old registration will be overridden.` +
|
|
57
|
+
// `Please ensure you use groups if you intend to have duplicate component ids. ` +
|
|
58
|
+
// `If this was intentional, first remove the old component from the registry before adding a new instance`
|
|
59
|
+
// );
|
|
60
|
+
// // If we're in dev mode, break the loader surface
|
|
61
|
+
// if (isDevMode())
|
|
62
|
+
// return;
|
|
63
|
+
// }
|
|
64
|
+
this.registry[group].push(registration);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Register an Angular component
|
|
68
|
+
* @param id identifier that is used to resolve the component
|
|
69
|
+
* @param group
|
|
70
|
+
* @param component Angular Component Class constructor
|
|
71
|
+
*/
|
|
72
|
+
registerComponent(args) {
|
|
73
|
+
if (this.isComponentRegistered(args.id, args.group)) {
|
|
74
|
+
this.log(`Will not re-register component '${args.id}' in group '${args.group || 'default'}' `);
|
|
75
|
+
return;
|
|
76
|
+
}
|
|
77
|
+
LazyLoaderService.addComponentToRegistry({
|
|
78
|
+
id: stringToSlug(args.id),
|
|
79
|
+
matcher: args.matcher,
|
|
80
|
+
group: stringToSlug(args.group || "default"),
|
|
81
|
+
load: args.load || (() => args.component)
|
|
82
|
+
});
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
*
|
|
86
|
+
* @param id
|
|
87
|
+
* @param group
|
|
88
|
+
*/
|
|
89
|
+
unregisterComponent(id, group = "default") {
|
|
90
|
+
const _id = stringToSlug(id);
|
|
91
|
+
const _group = stringToSlug(group);
|
|
92
|
+
if (!this.resolveRegistrationEntry(id, group))
|
|
93
|
+
throw new Error("Cannot unregister component ${}! Component is not present in registry");
|
|
94
|
+
// TODO: handle clearing running instances
|
|
95
|
+
delete LazyLoaderService.registry[_group][_id];
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Get the registration entry for a component.
|
|
99
|
+
* Returns null if component is not in the registry.
|
|
100
|
+
*/
|
|
101
|
+
resolveRegistrationEntry(value, group = "default") {
|
|
102
|
+
const _id = stringToSlug(value);
|
|
103
|
+
const _group = stringToSlug(group);
|
|
104
|
+
const targetGroup = (LazyLoaderService.registry[_group] || []);
|
|
105
|
+
let items = targetGroup.filter(t => {
|
|
106
|
+
if (!t)
|
|
107
|
+
return false;
|
|
108
|
+
// No matcher, check id
|
|
109
|
+
if (!t.matcher)
|
|
110
|
+
return t[$id] == _id;
|
|
111
|
+
// Matcher is regex
|
|
112
|
+
if (t.matcher instanceof RegExp)
|
|
113
|
+
return t.matcher.test(_id) || t.matcher.test(value);
|
|
114
|
+
// Matcher is string => regex
|
|
115
|
+
if (typeof t.matcher == 'string') {
|
|
116
|
+
const rx = new RegExp(t.matcher, 'ui');
|
|
117
|
+
return rx.test(_id) || rx.test(value);
|
|
118
|
+
}
|
|
119
|
+
// Matcher is array
|
|
120
|
+
if (Array.isArray(t.matcher)) {
|
|
121
|
+
return !!t.matcher.find(e => stringToSlug(e) == _id);
|
|
122
|
+
}
|
|
123
|
+
// Custom matcher function
|
|
124
|
+
if (typeof t.matcher == "function")
|
|
125
|
+
return t.matcher(_id);
|
|
126
|
+
return false;
|
|
127
|
+
});
|
|
128
|
+
if (items.length > 1) {
|
|
129
|
+
this.warn("Resolved multiple components for the provided `[component]` binding. This may cause UI conflicts.");
|
|
130
|
+
}
|
|
131
|
+
if (items.length == 0) {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
const out = items[0];
|
|
135
|
+
if (out.matcher instanceof RegExp) {
|
|
136
|
+
const result = _id.match(out.matcher) || value.match(out.matcher);
|
|
137
|
+
return {
|
|
138
|
+
entry: out,
|
|
139
|
+
matchGroups: result?.groups
|
|
140
|
+
};
|
|
141
|
+
}
|
|
142
|
+
return { entry: out };
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* Check if a component is currently registered
|
|
146
|
+
* Can be used to validate regex matchers and aliases.
|
|
147
|
+
*/
|
|
148
|
+
isComponentRegistered(value, group = "default") {
|
|
149
|
+
return !!this.resolveRegistrationEntry(value, group);
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
*
|
|
153
|
+
* @param bundle
|
|
154
|
+
* @returns The component `Object` if a component was resolved, `null` if no component was found
|
|
155
|
+
* `false` if the specified strategy was an invalid selection
|
|
156
|
+
*/
|
|
157
|
+
resolveComponent(id, group, modules) {
|
|
158
|
+
switch (LazyLoaderService.config.componentResolveStrategy) {
|
|
159
|
+
case ComponentResolveStrategy.PickFirst: {
|
|
160
|
+
return modules[0];
|
|
161
|
+
}
|
|
162
|
+
// Exact id -> classname match
|
|
163
|
+
case ComponentResolveStrategy.MatchIdToClassName: {
|
|
164
|
+
const matches = modules
|
|
165
|
+
.filter(k => k.name == id);
|
|
166
|
+
if (matches.length == 0)
|
|
167
|
+
return null;
|
|
168
|
+
return matches[0];
|
|
169
|
+
}
|
|
170
|
+
// Fuzzy id -> classname match
|
|
171
|
+
case ComponentResolveStrategy.FuzzyIdClassName: {
|
|
172
|
+
const _id = id.replace(/[^a-z0-9_\-]/ig, '');
|
|
173
|
+
if (_id.length == 0) {
|
|
174
|
+
LazyLoaderService.config.logger.err("Fuzzy classname matching stripped all symbols from the ID specified!");
|
|
175
|
+
return false;
|
|
176
|
+
}
|
|
177
|
+
const rx = new RegExp(`^${id}(component|module)?$`, "i");
|
|
178
|
+
const matches = modules
|
|
179
|
+
.filter(mod => {
|
|
180
|
+
let kid = mod.name.replace(/[^a-z0-9_\-]/ig, '');
|
|
181
|
+
return rx.test(kid);
|
|
182
|
+
});
|
|
183
|
+
if (matches.length > 1) {
|
|
184
|
+
LazyLoaderService.config.logger.err("Fuzzy classname matching resolved multiple targets!");
|
|
185
|
+
return false;
|
|
186
|
+
}
|
|
187
|
+
if (matches.length == 0) {
|
|
188
|
+
LazyLoaderService.config.logger.err("Fuzzy classname matching resolved no targets!");
|
|
189
|
+
return null;
|
|
190
|
+
}
|
|
191
|
+
return matches[0];
|
|
192
|
+
}
|
|
193
|
+
case ComponentResolveStrategy.Custom: {
|
|
194
|
+
return LazyLoaderService.config.customResolver(modules);
|
|
195
|
+
}
|
|
196
|
+
default: {
|
|
197
|
+
return false;
|
|
198
|
+
}
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
// A proxied registry that mutates reference keys
|
|
203
|
+
LazyLoaderService.registry = {};
|
|
204
|
+
LazyLoaderService.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LazyLoaderService, deps: [{ token: NGX_LAZY_LOADER_CONFIG }], target: i0.ɵɵFactoryTarget.Injectable });
|
|
205
|
+
LazyLoaderService.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LazyLoaderService, providedIn: 'root' });
|
|
206
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "15.2.9", ngImport: i0, type: LazyLoaderService, decorators: [{
|
|
207
|
+
type: Injectable,
|
|
208
|
+
args: [{
|
|
209
|
+
providedIn: 'root'
|
|
210
|
+
}]
|
|
211
|
+
}], ctorParameters: function () { return [{ type: undefined, decorators: [{
|
|
212
|
+
type: Inject,
|
|
213
|
+
args: [NGX_LAZY_LOADER_CONFIG]
|
|
214
|
+
}] }]; } });
|
|
215
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoibGF6eS1sb2FkZXIuc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvbW1vbi9zcmMvY29tcG9uZW50cy9sYXp5LWxvYWRlci9sYXp5LWxvYWRlci5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLGNBQWMsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRSxPQUFPLEVBQTRELHdCQUF3QixFQUFnRCxNQUFNLFNBQVMsQ0FBQztBQUMzSixPQUFPLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxNQUFNLGFBQWEsQ0FBQzs7QUFFbkQsMENBQTBDO0FBQzFDLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxJQUFJLENBQWtCLENBQUM7QUFDMUMsTUFBTSxNQUFNLEdBQUcsTUFBTSxDQUFDLE9BQU8sQ0FBa0IsQ0FBQztBQUVoRCxNQUFNLENBQUMsTUFBTSxzQkFBc0IsR0FBRyxJQUFJLGNBQWMsQ0FBc0IsUUFBUSxDQUFDLENBQUM7QUFLeEYsTUFBTSxPQUFPLGlCQUFpQjtJQUMxQixJQUFZLEdBQUcsS0FBSyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRSxJQUFZLEdBQUcsS0FBSyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztJQUNqRSxJQUFZLElBQUksS0FBSyxPQUFPLGlCQUFpQixDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQztJQVNuRSxZQUE0QyxTQUE4QixFQUFFO1FBQ3hFLG9GQUFvRjtRQUNwRixpQkFBaUIsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDeEMsQ0FBQztJQUVPLE1BQU0sQ0FBQyxTQUFTLENBQUMsTUFBMkI7UUFDaEQsTUFBTSxFQUFF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QUFNLENBQUMsY0FBYyxDQUFDLE9BQWMsQ0FBQyxDQUFDO2FBQ2xFO1lBQ0QsT0FBTyxDQUFDLENBQUM7Z0JBQ0wsT0FBTyxLQUFLLENBQUM7YUFDaEI7U0FDSjtJQUNMLENBQUM7O0FBclBELGlEQUFpRDtBQUNsQywwQkFBUSxHQUVuQixFQUFFLENBQUM7OEdBUkUsaUJBQWlCLGtCQVlOLHNCQUFzQjtrSEFaakMsaUJBQWlCLGNBRmQsTUFBTTsyRkFFVCxpQkFBaUI7a0JBSDdCLFVBQVU7bUJBQUM7b0JBQ1IsVUFBVSxFQUFFLE1BQU07aUJBQ3JCOzswQkFhZ0IsTUFBTTsyQkFBQyxzQkFBc0IiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3QsIEluamVjdGFibGUsIEluamVjdGlvblRva2VuIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21waWxlZENvbXBvbmVudCwgQ29tcGlsZWRNb2R1bGUsIENvbXBvbmVudFJlZ2lzdHJhdGlvbiwgQ29tcG9uZW50UmVzb2x2ZVN0cmF0ZWd5LCBEeW5hbWljUmVnaXN0cmF0aW9uQXJncywgTmd4TGF6eUxvYWRlckNvbmZpZyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgc3RyaW5nVG9TbHVnLCBMb2dnZXIgfSBmcm9tICcuLi8uLi91dGlscyc7XG5cbi8vIE1vbmtleS1wYXRjaCB0aGUgdHlwZSBvZiB0aGVzZSBzeW1ib2xzLlxuY29uc3QgJGlkID0gU3ltYm9sKFwiaWRcIikgYXMgYW55IGFzIHN0cmluZztcbmNvbnN0ICRncm91cCA9IFN5bWJvbChcImdyb3VwXCIpIGFzIGFueSBhcyBzdHJpbmc7XG5cbmV4cG9ydCBjb25zdCBOR1hfTEFaWV9MT0FERVJfQ09ORklHID0gbmV3IEluamVjdGlvblRva2VuPE5neExhenlMb2FkZXJDb25maWc+KCdjb25maWcnKTtcblxuQEluamVjdGFibGUoe1xuICAgIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBMYXp5TG9hZGVyU2VydmljZSB7XG4gICAgcHJpdmF0ZSBnZXQgZXJyKCkgeyByZXR1cm4gTGF6eUxvYWRlclNlcnZpY2UuY29uZmlnLmxvZ2dlci5lcnI7IH1cbiAgICBwcml2YXRlIGdldCBsb2coKSB7IHJldHVybiBMYXp5TG9hZGVyU2VydmljZS5jb25maWcubG9nZ2VyLmxvZzsgfVxuICAgIHByaXZhdGUgZ2V0IHdhcm4oKSB7IHJldHVybiBMYXp5TG9hZGVyU2VydmljZS5jb25maWcubG9nZ2VyLndhcm47IH1cblxuICAgIC8vIEEgcHJveGllZCByZWdpc3RyeSB0aGF0IG11dGF0ZXMgcmVmZXJlbmNlIGtleXNcbiAgICBwcml2YXRlIHN0YXRpYyByZWdpc3RyeToge1xuICAgICAgICBba2V5OiBzdHJpbmddOiBDb21wb25lbnRSZWdpc3RyYXRpb25bXTtcbiAgICB9ID0ge307XG5cbiAgICBwdWJsaWMgc3RhdGljIGNvbmZpZzogTmd4TGF6eUxvYWRlckNvbmZpZztcblxuICAgIGNvbnN0cnVjdG9yKEBJbmplY3QoTkdYX0xBWllfTE9BREVSX0NPTkZJRykgY29uZmlnOiBOZ3hMYXp5TG9hZGVyQ29uZmlnID0ge30pIHtcbiAgICAgICAgLy8gRW5zdXJlIHRoaXMgaXMgc2luZ2xldG9uIGFuZCB3b3JrcyByZWdhcmRsZXNzIG9mIHNwZWNpYWwgaW5zdGFuY2luZyByZXF1aXJlbWVudHMuXG4gICAgICAgIExhenlMb2FkZXJTZXJ2aWNlLmNvbmZpZ3VyZShjb25maWcpO1xuICAgIH1cblxuICAgIHByaXZhdGUgc3RhdGljIGNvbmZpZ3VyZShjb25maWc6IE5neExhenlMb2FkZXJDb25maWcpIHtcbiAgICAgICAgY29uc3QgeyBsb2csIHdhcm4sIGVyciB9ID0gTG9nZ2VyKFwibmd4LWxhenktbG9hZGVyXCIsIFwiIzAwOTY4OFwiKTtcblxuICAgICAgICB0aGlzLmNvbmZpZyA9IHtcbiAgICAgICAgICAgIGNvbXBvbmVudFJlc29sdmVTdHJhdGVneTogQ29tcG9uZW50UmVzb2x2ZVN0cmF0ZWd5LlBpY2tGaXJzdCxcbiAgICAgICAgICAgIGxvZ2dlcjoge1xuICAgICAgICAgICAgICAgIGxvZyxcbiAgICAgICAgICAgICAgICB3YXJuLFxuICAgICAgICAgICAgICAgIGVyclxuICAgICAgICAgICAgfSxcbiAgICAgICAgICAgIC4uLmNvbmZpZ1xuICAgICAgICB9O1xuXG4gICAgICAgIGNvbmZpZy5lbnRyaWVzPy5mb3JFYWNoKGUgPT4gdGhpcy5hZGRDb21wb25lbnRUb1JlZ2lzdHJ5KGUpKVxuXG4gICAgICAgIC8vIElmIGEgY3VzdG9tIHJlc29sdXRpb24gc3RyYXRlZ3kgaXMgcHJvdmlkZWQgYnV0IG5vIHJlc29sdXRpb24gZnVuY3Rpb24gaXMgcGFzc2VkLFxuICAgICAgICAvLyB3ZSB0aHJvdyBhbiBlcnJvclxuICAgICAgICBpZiAoXG4gICAgICAgICAgICB0aGlzLmNvbmZpZy5jb21wb25lbnRSZXNvbHZlU3RyYXRlZ3kgPT0gQ29tcG9uZW50UmVzb2x2ZVN0cmF0ZWd5LkN1c3RvbSAmJlxuICAgICAgICAgICAgIXRoaXMuY29uZmlnLmN1c3RvbVJlc29sdmVyXG4gICAgICAgICkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGluaXRpYWxpemUuIENvbmZpZ3VyYXRpb24gc3BlY2lmaWVzIGEgY3VzdG9tIHJlc29sdmUgbWF0Y2hlciBidXQgbm9uZSB3YXMgcHJvdmlkZWRcIik7XG4gICAgICAgIH1cblxuICAgICAgICBpZiAodGhpcy5jb25maWcubG9hZGVyRGlzdHJhY3RvckNvbXBvbmVudCAmJiB0aGlzLmNvbmZpZy5sb2FkZXJEaXN0cmFjdG9yVGVtcGxhdGUpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgaGF2ZSBib3RoIGEgQ29tcG9uZW50IGFuZCBUZW1wbGF0ZSBmb3IgRGlzdHJhY3RvciB2aWV3LlwiKVxuICAgICAgICBpZiAodGhpcy5jb25maWcuZXJyb3JDb21wb25lbnQgJiYgdGhpcy5jb25maWcuZXJyb3JUZW1wbGF0ZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBoYXZlIGJvdGggYSBDb21wb25lbnQgYW5kIFRlbXBsYXRlIGZvciBFcnJvciB2aWV3LlwiKVxuICAgICAgICBpZiAodGhpcy5jb25maWcubm90Rm91bmRDb21wb25lbnQgJiYgdGhpcy5jb25maWcubm90Rm91bmRUZW1wbGF0ZSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBoYXZlIGJvdGggYSBDb21wb25lbnQgYW5kIFRlbXBsYXRlIGZvciBOb3RGb3VuZCB2aWV3LlwiKVxuXG4gICAgfVxuXG4gICAgcHJpdmF0ZSBzdGF0aWMgYWRkQ29tcG9uZW50VG9SZWdpc3RyeShyZWdpc3RyYXRpb246IENvbXBvbmVudFJlZ2lzdHJhdGlvbikge1xuICAgICAgICBpZiAoIXJlZ2lzdHJhdGlvbilcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIkNhbm5vdCBhZGQgPHVuZGVmaW5lZD4gY29tcG9uZW50IGludG8gcmVnaXN0cnkuXCIpO1xuXG4gICAgICAgIC8vIENsb25lIHRoZSBvYmplY3QgaW50byBvdXIgcmVwb3NpdG9yeSBhbmQgdHJhbnNmZXIgdGhlIGlkIGludG8gYSBzdGFuZGFyZGl6ZWQgc2x1ZyBmb3JtYXRcblxuICAgICAgICBjb25zdCBpZCA9IHN0cmluZ1RvU2x1ZyhyZWdpc3RyYXRpb24uaWQgPz8gRGF0ZS5ub3coKS50b1N0cmluZygpKTsgLy8gcHVyZ2Ugbm9uLWJhc2ljIEFTQ0lJIGNoYXJzXG4gICAgICAgIGNvbnN0IGdyb3VwID0gcmVnaXN0cmF0aW9uLmdyb3VwIHx8IFwiZGVmYXVsdFwiO1xuXG4gICAgICAgIHJlZ2lzdHJhdGlvblskaWRdID0gaWQ7XG4gICAgICAgIHJlZ2lzdHJhdGlvblskZ3JvdXBdID0gaWQ7XG5cblxuICAgICAgICBpZiAoIXRoaXMucmVnaXN0cnlbZ3JvdXBdKVxuICAgICAgICAgICAgdGhpcy5yZWdpc3RyeVtncm91cF0gPSBbXTtcblxuICAgICAgICAvLyBDaGVjayBpZiB3ZSBhbHJlYWR5IGhhdmUgYSByZWdpc3RyYXRpb24gZm9yIHRoZSBjb21wb25lbnRcbiAgICAgICAgLy8gaWYgKHRoaXMucmVnaXN0cnlbZ3JvdXBdICYmIHR5cGVvZiB0aGlzLnJlZ2lzdHJ5W2dyb3VwXVsnbG9hZCddID09IFwiZnVuY3Rpb25cIikge1xuICAgICAgICAvLyAgICAgLy8gV2FybiB0aGUgZGV2ZWxvcGVyIHRoYXQgdGhlIHN0YXRlIGlzIHByb2JsZW1hdGljXG4gICAgICAgIC8vICAgICB0aGlzLmNvbmZpZy5sb2dnZXIud2FybihcbiAgICAgICAgLy8gICAgICAgICBgQSBwcmV2aW91cyBlbnRyeSBhbHJlYWR5IGV4aXN0cyBmb3IgJHtpZH0hIFRoZSBvbGQgcmVnaXN0cmF0aW9uIHdpbGwgYmUgb3ZlcnJpZGRlbi5gICtcbiAgICAgICAgLy8gICAgICAgICBgUGxlYXNlIGVuc3VyZSB5b3UgdXNlIGdyb3VwcyBpZiB5b3UgaW50ZW5kIHRvIGhhdmUgZHVwbGljYXRlIGNvbXBvbmVudCBpZHMuIGAgK1xuICAgICAgICAvLyAgICAgICAgIGBJZiB0aGlzIHdhcyBpbnRlbnRpb25hbCwgZmlyc3QgcmVtb3ZlIHRoZSBvbGQgY29tcG9uZW50IGZyb20gdGhlIHJlZ2lzdHJ5IGJlZm9yZSBhZGRpbmcgYSBuZXcgaW5zdGFuY2VgXG4gICAgICAgIC8vICAgICApO1xuXG4gICAgICAgIC8vICAgICAvLyBJZiB3ZSdyZSBpbiBkZXYgbW9kZSwgYnJlYWsgdGhlIGxvYWRlciBzdXJmYWNlXG4gICAgICAgIC8vICAgICBpZiAoaXNEZXZNb2RlKCkpXG4gICAgICAgIC8vICAgICAgICAgcmV0dXJuO1xuICAgICAgICAvLyB9XG5cbiAgICAgICAgdGhpcy5yZWdpc3RyeVtncm91cF0ucHVzaChyZWdpc3RyYXRpb24pO1xuICAgIH1cblxuICAgIC8qKlxuICAgICAqIFJlZ2lzdGVyIGFuIEFuZ3VsYXIgY29tcG9uZW50XG4gICAgICogQHBhcmFtIGlkIGlkZW50aWZpZXIgdGhhdCBpcyB1c2VkIHRvIHJlc29sdmUgdGhlIGNvbXBvbmVudFxuICAgICAqIEBwYXJhbSBncm91cFxuICAgICAqIEBwYXJhbSBjb21wb25lbnQgQW5ndWxhciBDb21wb25lbnQgQ2xhc3MgY29uc3RydWN0b3JcbiAgICAgKi9cbiAgICBwdWJsaWMgcmVnaXN0ZXJDb21wb25lbnQ8VCBleHRlbmRzIHsgbmV3KC4uLmFyZ3M6IGFueVtdKTogSW5zdGFuY2VUeXBlPFQ+OyB9PihhcmdzOiBEeW5hbWljUmVnaXN0cmF0aW9uQXJnczxUPikge1xuICAgICAgICBpZiAodGhpcy5pc0NvbXBvbmVudFJlZ2lzdGVyZWQoYXJncy5pZCwgYXJncy5ncm91cCkpIHtcbiAgICAgICAgICAgIHRoaXMubG9nKGBXaWxsIG5vdCByZS1yZWdpc3RlciBjb21wb25lbnQgJyR7YXJncy5pZH0nIGluIGdyb3VwICcke2FyZ3MuZ3JvdXAgfHwgJ2RlZmF1bHQnfScgYCk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBMYXp5TG9hZGVyU2VydmljZS5hZGRDb21wb25lbnRUb1JlZ2lzdHJ5KHtcbiAgICAgICAgICAgIGlkOiBzdHJpbmdUb1NsdWcoYXJncy5pZCksXG4gICAgICAgICAgICBtYXRjaGVyOiBhcmdzLm1hdGNoZXIsXG4gICAgICAgICAgICBncm91cDogc3RyaW5nVG9TbHVnKGFyZ3MuZ3JvdXAgfHwgXCJkZWZhdWx0XCIpLFxuICAgICAgICAgICAgbG9hZDogYXJncy5sb2FkIHx8ICgoKSA9PiBhcmdzLmNvbXBvbmVudClcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICpcbiAgICAgKiBAcGFyYW0gaWRcbiAgICAgKiBAcGFyYW0gZ3JvdXBcbiAgICAgKi9cbiAgICBwdWJsaWMgdW5yZWdpc3RlckNvbXBvbmVudChpZDogc3RyaW5nLCBncm91cCA9IFwiZGVmYXVsdFwiKSB7XG4gICAgICAgIGNvbnN0IF9pZCA9IHN0cmluZ1RvU2x1ZyhpZCk7XG4gICAgICAgIGNvbnN0IF9ncm91cCA9IHN0cmluZ1RvU2x1Zyhncm91cCk7XG5cbiAgICAgICAgaWYgKCF0aGlzLnJlc29sdmVSZWdpc3RyYXRpb25FbnRyeShpZCwgZ3JvdXApKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IHVucmVnaXN0ZXIgY29tcG9uZW50ICR7fSEgQ29tcG9uZW50IGlzIG5vdCBwcmVzZW50IGluIHJlZ2lzdHJ5XCIpXG5cbiAgICAgICAgLy8gVE9ETzogaGFuZGxlIGNsZWFyaW5nIHJ1bm5pbmcgaW5zdGFuY2VzXG4gICAgICAgIGRlbGV0ZSBMYXp5TG9hZGVyU2VydmljZS5yZWdpc3RyeVtfZ3JvdXBdW19pZF07XG4gICAgfVxuXG5cbiAgICAvKipcbiAgICAgKiBHZXQgdGhlIHJlZ2lzdHJhdGlvbiBlbnRyeSBmb3IgYSBjb21wb25lbnQuXG4gICAgICogUmV0dXJucyBudWxsIGlmIGNvbXBvbmVudCBpcyBub3QgaW4gdGhlIHJlZ2lzdHJ5LlxuICAgICAqL1xuICAgIHB1YmxpYyByZXNvbHZlUmVnaXN0cmF0aW9uRW50cnkodmFsdWU6IHN0cmluZywgZ3JvdXAgPSBcImRlZmF1bHRcIikge1xuICAgICAgICBjb25zdCBfaWQgPSBzdHJpbmdUb1NsdWcodmFsdWUpO1xuICAgICAgICBjb25zdCBfZ3JvdXAgPSBzdHJpbmdUb1NsdWcoZ3JvdXApO1xuXG4gICAgICAgIGNvbnN0IHRhcmdldEdyb3VwID0gKExhenlMb2FkZXJTZXJ2aWNlLnJlZ2lzdHJ5W19ncm91cF0gfHwgW10pO1xuXG4gICAgICAgIGxldCBpdGVtcyA9IHRhcmdldEdyb3VwLmZpbHRlcih0ID0+IHtcbiAgICAgICAgICAgIGlmICghdCkgcmV0dXJuIGZhbHNlO1xuXG4gICAgICAgICAgICAvLyBObyBtYXRjaGVyLCBjaGVjayBpZFxuICAgICAgICAgICAgaWYgKCF0Lm1hdGNoZXIpXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRbJGlkXSA9PSBfaWQ7XG5cbiAgICAgICAgICAgIC8vIE1hdGNoZXIgaXMgcmVnZXhcbiAgICAgICAgICAgIGlmICh0Lm1hdGNoZXIgaW5zdGFuY2VvZiBSZWdFeHApXG4gICAgICAgICAgICAgICAgcmV0dXJuIHQubWF0Y2hlci50ZXN0KF9pZCkgfHwgdC5tYXRjaGVyLnRlc3QodmFsdWUpO1xuXG4gICAgICAgICAgICAvLyBNYXRjaGVyIGlzIHN0cmluZyA9PiByZWdleFxuICAgICAgICAgICAgaWYgKHR5cGVvZiB0Lm1hdGNoZXIgPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICBjb25zdCByeCA9IG5ldyBSZWdFeHAodC5tYXRjaGVyLCAndWknKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcngudGVzdChfaWQpIHx8IHJ4LnRlc3QodmFsdWUpO1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBNYXRjaGVyIGlzIGFycmF5XG4gICAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh0Lm1hdGNoZXIpKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuICEhdC5tYXRjaGVyLmZpbmQoZSA9PiBzdHJpbmdUb1NsdWcoZSkgPT0gX2lkKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gQ3VzdG9tIG1hdGNoZXIgZnVuY3Rpb25cbiAgICAgICAgICAgIGlmICh0eXBlb2YgdC5tYXRjaGVyID09IFwiZnVuY3Rpb25cIilcbiAgICAgICAgICAgICAgICByZXR1cm4gdC5tYXRjaGVyKF9pZCk7XG5cbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgIHRoaXMud2FybihcIlJlc29sdmVkIG11bHRpcGxlIGNvbXBvbmVudHMgZm9yIHRoZSBwcm92aWRlZCBgW2NvbXBvbmVudF1gIGJpbmRpbmcuIFRoaXMgbWF5IGNhdXNlIFVJIGNvbmZsaWN0cy5cIik7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGl0ZW1zLmxlbmd0aCA9PSAwKSB7XG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgfVxuXG4gICAgICAgIGNvbnN0IG91dCA9IGl0ZW1zWzBdO1xuXG4gICAgICAgIGlmIChvdXQubWF0Y2hlciBpbnN0YW5jZW9mIFJlZ0V4cCkge1xuICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gX2lkLm1hdGNoKG91dC5tYXRjaGVyKSB8fCB2YWx1ZS5tYXRjaChvdXQubWF0Y2hlcik7XG5cbiAgICAgICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAgICAgZW50cnk6IG91dCxcbiAgICAgICAgICAgICAgICBtYXRjaEdyb3VwczogcmVzdWx0Py5ncm91cHNcbiAgICAgICAgICAgIH07XG4gICAgICAgIH1cblxuICAgICAgICByZXR1cm4geyBlbnRyeTogb3V0IH07XG4gICAgfVxuXG4gICAgLyoqXG4gICAgICogQ2hlY2sgaWYgYSBjb21wb25lbnQgaXMgY3VycmVudGx5IHJlZ2lzdGVyZWRcbiAgICAgKiBDYW4gYmUgdXNlZCB0byB2YWxpZGF0ZSByZWdleCBtYXRjaGVycyBhbmQgYWxpYXNlcy5cbiAgICAgKi9cbiAgICBwdWJsaWMgaXNDb21wb25lbnRSZWdpc3RlcmVkKHZhbHVlOiBzdHJpbmcsIGdyb3VwID0gXCJkZWZhdWx0XCIpIHtcbiAgICAgICAgcmV0dXJuICEhdGhpcy5yZXNvbHZlUmVnaXN0cmF0aW9uRW50cnkodmFsdWUsIGdyb3VwKTtcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKlxuICAgICAqIEBwYXJhbSBidW5kbGVcbiAgICAgKiBAcmV0dXJucyBUaGUgY29tcG9uZW50IGBPYmplY3RgIGlmIGEgY29tcG9uZW50IHdhcyByZXNvbHZlZCwgYG51bGxgIGlmIG5vIGNvbXBvbmVudCB3YXMgZm91bmRcbiAgICAgKiBgZmFsc2VgIGlmIHRoZSBzcGVjaWZpZWQgc3RyYXRlZ3kgd2FzIGFuIGludmFsaWQgc2VsZWN0aW9uXG4gICAgICovXG4gICAgcHVibGljIHJlc29sdmVDb21wb25lbnQoaWQ6IHN0cmluZywgZ3JvdXA6IHN0cmluZywgbW9kdWxlczogKENvbXBpbGVkQ29tcG9uZW50IHwgQ29tcGlsZWRNb2R1bGUpW10pOiBPYmplY3QgfCBudWxsIHwgZmFsc2Uge1xuXG4gICAgICAgIHN3aXRjaCAoTGF6eUxvYWRlclNlcnZpY2UuY29uZmlnLmNvbXBvbmVudFJlc29sdmVTdHJhdGVneSkge1xuICAgICAgICAgICAgY2FzZSBDb21wb25lbnRSZXNvbHZlU3RyYXRlZ3kuUGlja0ZpcnN0OiB7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbW9kdWxlc1swXTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gRXhhY3QgaWQgLT4gY2xhc3NuYW1lIG1hdGNoXG4gICAgICAgICAgICBjYXNlIENvbXBvbmVudFJlc29sdmVTdHJhdGVneS5NYXRjaElkVG9DbGFzc05hbWU6IHtcbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGVzID1cbiAgICAgICAgICAgICAgICAgICAgbW9kdWxlc1xuICAgICAgICAgICAgICAgICAgICAgICAgLmZpbHRlcihrID0+IGsubmFtZSA9PSBpZCk7XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPT0gMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICAgICAgICAgICAgICByZXR1cm4gbWF0Y2hlc1swXTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIC8vIEZ1enp5IGlkIC0+IGNsYXNzbmFtZSBtYXRjaFxuICAgICAgICAgICAgY2FzZSBDb21wb25lbnRSZXNvbHZlU3RyYXRlZ3kuRnV6enlJZENsYXNzTmFtZToge1xuICAgICAgICAgICAgICAgIGNvbnN0IF9pZCA9IGlkLnJlcGxhY2UoL1teYS16MC05X1xcLV0vaWcsICcnKTtcblxuICAgICAgICAgICAgICAgIGlmIChfaWQubGVuZ3RoID09IDApIHtcbiAgICAgICAgICAgICAgICAgICAgTGF6eUxvYWRlclNlcnZpY2UuY29uZmlnLmxvZ2dlci5lcnIoXCJGdXp6eSBjbGFzc25hbWUgbWF0Y2hpbmcgc3RyaXBwZWQgYWxsIHN5bWJvbHMgZnJvbSB0aGUgSUQgc3BlY2lmaWVkIVwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGNvbnN0IHJ4ID0gbmV3IFJlZ0V4cChgXiR7aWR9KGNvbXBvbmVudHxtb2R1bGUpPyRgLCBcImlcIik7XG5cbiAgICAgICAgICAgICAgICBjb25zdCBtYXRjaGVzID0gbW9kdWxlc1xuICAgICAgICAgICAgICAgICAgICAuZmlsdGVyKG1vZCA9PiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBsZXQga2lkID0gbW9kLm5hbWUucmVwbGFjZSgvW15hLXowLTlfXFwtXS9pZywgJycpO1xuXG4gICAgICAgICAgICAgICAgICAgICAgICByZXR1cm4gcngudGVzdChraWQpO1xuICAgICAgICAgICAgICAgICAgICB9KTtcblxuICAgICAgICAgICAgICAgIGlmIChtYXRjaGVzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgTGF6eUxvYWRlclNlcnZpY2UuY29uZmlnLmxvZ2dlci5lcnIoXCJGdXp6eSBjbGFzc25hbWUgbWF0Y2hpbmcgcmVzb2x2ZWQgbXVsdGlwbGUgdGFyZ2V0cyFcIik7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hlcy5sZW5ndGggPT0gMCkge1xuICAgICAgICAgICAgICAgICAgICBMYXp5TG9hZGVyU2VydmljZS5jb25maWcubG9nZ2VyLmVycihcIkZ1enp5IGNsYXNzbmFtZSBtYXRjaGluZyByZXNvbHZlZCBubyB0YXJnZXRzIVwiKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuIG1hdGNoZXNbMF07XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIENvbXBvbmVudFJlc29sdmVTdHJhdGVneS5DdXN0b206IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gTGF6eUxvYWRlclNlcnZpY2UuY29uZmlnLmN1c3RvbVJlc29sdmVyKG1vZHVsZXMgYXMgYW55KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6IHtcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export var ComponentResolveStrategy;
|
|
2
|
+
(function (ComponentResolveStrategy) {
|
|
3
|
+
/**
|
|
4
|
+
* Match the fist component we find
|
|
5
|
+
* (best used for standalone components)
|
|
6
|
+
* @default
|
|
7
|
+
*/
|
|
8
|
+
ComponentResolveStrategy[ComponentResolveStrategy["PickFirst"] = 0] = "PickFirst";
|
|
9
|
+
/**
|
|
10
|
+
* Perform an Exact ID to Classname of the Component
|
|
11
|
+
* case sensitive, zero tolerance.
|
|
12
|
+
*/
|
|
13
|
+
ComponentResolveStrategy[ComponentResolveStrategy["MatchIdToClassName"] = 1] = "MatchIdToClassName";
|
|
14
|
+
/**
|
|
15
|
+
* Perform a fuzzy ID to classname match
|
|
16
|
+
* case insensitive, mutes symbols
|
|
17
|
+
* ignores "Component" and "Module" postfixes on class
|
|
18
|
+
* names
|
|
19
|
+
*/
|
|
20
|
+
ComponentResolveStrategy[ComponentResolveStrategy["FuzzyIdClassName"] = 2] = "FuzzyIdClassName";
|
|
21
|
+
/**
|
|
22
|
+
* Use a user-provided component match function
|
|
23
|
+
*/
|
|
24
|
+
ComponentResolveStrategy[ComponentResolveStrategy["Custom"] = 3] = "Custom";
|
|
25
|
+
})(ComponentResolveStrategy || (ComponentResolveStrategy = {}));
|
|
26
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidHlwZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb21tb24vc3JjL2NvbXBvbmVudHMvbGF6eS1sb2FkZXIvdHlwZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBR0EsTUFBTSxDQUFOLElBQVksd0JBd0JYO0FBeEJELFdBQVksd0JBQXdCO0lBQ2hDOzs7O09BSUc7SUFDSCxpRkFBUyxDQUFBO0lBQ1Q7OztPQUdHO0lBQ0gsbUdBQWtCLENBQUE7SUFDbEI7Ozs7O09BS0c7SUFDSCwrRkFBZ0IsQ0FBQTtJQUVoQjs7T0FFRztJQUNILDJFQUFNLENBQUE7QUFDVixDQUFDLEVBeEJXLHdCQUF3QixLQUF4Qix3QkFBd0IsUUF3Qm5DIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgQ29tcG9uZW50VHlwZSB9IGZyb20gJ0Bhbmd1bGFyL2Nkay9wb3J0YWwnO1xuaW1wb3J0IHsgVGVtcGxhdGVSZWYgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuZXhwb3J0IGVudW0gQ29tcG9uZW50UmVzb2x2ZVN0cmF0ZWd5IHtcbiAgICAvKipcbiAgICAgKiBNYXRjaCB0aGUgZmlzdCBjb21wb25lbnQgd2UgZmluZFxuICAgICAqIChiZXN0IHVzZWQgZm9yIHN0YW5kYWxvbmUgY29tcG9uZW50cylcbiAgICAgKiBAZGVmYXVsdFxuICAgICAqL1xuICAgIFBpY2tGaXJzdCxcbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIGFuIEV4YWN0IElEIHRvIENsYXNzbmFtZSBvZiB0aGUgQ29tcG9uZW50XG4gICAgICogY2FzZSBzZW5zaXRpdmUsIHplcm8gdG9sZXJhbmNlLlxuICAgICAqL1xuICAgIE1hdGNoSWRUb0NsYXNzTmFtZSxcbiAgICAvKipcbiAgICAgKiBQZXJmb3JtIGEgZnV6enkgSUQgdG8gY2xhc3NuYW1lIG1hdGNoXG4gICAgICogY2FzZSBpbnNlbnNpdGl2ZSwgbXV0ZXMgc3ltYm9sc1xuICAgICAqIGlnbm9yZXMgXCJDb21wb25lbnRcIiBhbmQgXCJNb2R1bGVcIiBwb3N0Zml4ZXMgb24gY2xhc3NcbiAgICAgKiBuYW1lc1xuICAgICAqL1xuICAgIEZ1enp5SWRDbGFzc05hbWUsXG5cbiAgICAvKipcbiAgICAgKiBVc2UgYSB1c2VyLXByb3ZpZGVkIGNvbXBvbmVudCBtYXRjaCBmdW5jdGlvblxuICAgICAqL1xuICAgIEN1c3RvbVxufVxuXG5leHBvcnQgdHlwZSBOZ3hMYXp5TG9hZGVyQ29uZmlnID0gUGFydGlhbDx7XG4gICAgZW50cmllczogQ29tcG9uZW50UmVnaXN0cmF0aW9uW10sXG5cbiAgICBub3RGb3VuZFRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+LFxuICAgIG5vdEZvdW5kQ29tcG9uZW50OiBDb21wb25lbnRUeXBlPGFueT4sXG5cbiAgICBlcnJvclRlbXBsYXRlOiBUZW1wbGF0ZVJlZjxhbnk+LFxuICAgIGVycm9yQ29tcG9uZW50OiBDb21wb25lbnRUeXBlPGFueT4sXG5cbiAgICBsb2FkZXJEaXN0cmFjdG9yVGVtcGxhdGU6IFRlbXBsYXRlUmVmPGFueT4sXG4gICAgbG9hZGVyRGlzdHJhY3RvckNvbXBvbmVudDogQ29tcG9uZW50VHlwZTxhbnk+LFxuXG4gICAgbG9nZ2VyOiB7XG4gICAgICAgIGxvZzogKC4uLmFyZ3M6IGFueSkgPT4gdm9pZCxcbiAgICAgICAgd2FybjogKC4uLmFyZ3M6IGFueSkgPT4gdm9pZCxcbiAgICAgICAgZXJyOiAoLi4uYXJnczogYW55KSA9PiB2b2lkO1xuICAgIH0sXG4gICAgLyoqXG4gICAgICogV2hhdCBzdHJhdGVneSBzaG91bGQgYmUgdXNlZCB0byByZXNvbHZlIGNvbXBvbmVudHNcbiAgICAgKiBAZGVmYXVsdCBDb21wb25lbnRSZXNvbHZlU3RyYXRlZ3kuRnV6enlJZENsYXNzTmFtZVxuICAgICAqL1xuICAgIGNvbXBvbmVudFJlc29sdmVTdHJhdGVneTogQ29tcG9uZW50UmVzb2x2ZVN0cmF0ZWd5LFxuICAgIGN1c3RvbVJlc29sdmVyOiAocmVnaXN0cnk6IChDb21waWxlZENvbXBvbmVudCB8IENvbXBpbGVkTW9kdWxlKVtdKSA9PiBPYmplY3Rcbn0+O1xuXG50eXBlIFJlZ2lzdHJhdGlvbkNvbmZpZyA9IHtcbiAgICAvKipcbiAgICAgKiBTcGVjaWZ5IGEgZ3JvdXAgdG8gY2F0ZWdvcml6ZSBjb21wb25lbnRzLiBJZiBub3Qgc3BlY2lmaWVkLFxuICAgICAqIHdpbGwgZGVmYXVsdCB0byB0aGUgYGRlZmF1bHRgIGdyb3VwLlxuICAgICAqL1xuICAgIGdyb3VwPzogc3RyaW5nLFxuICAgIC8qKlxuICAgICAqIGxvYWQ6ICgpID0+IGltcG9ydCgnLi9wYWdlcy9teS1wYWdlL215LXBhZ2UuY29tcG9uZW50JylcbiAgICAgKi9cbiAgICBsb2FkOiAoKSA9PiBhbnksXG5cbiAgICAvKipcbiAgICAgKiBDYWxsZWQgYmVmb3JlIGEgY29tcG9uZW50IGlzIGxvYWRlZC5cbiAgICAgKiBJZiBpdCByZXR1cm5zIGBmYWxzZWAgdGhlIGNvbXBvbmVudCB3aWxsIG5vdCBiZSBsb2FkZWQuXG4gICAgICovXG4gICAgLy8gY2FuQWN0aXZhdGU6ICgpID0+IGJvb2xlYW5cblxuICAgIFtrZXk6IHN0cmluZ106IGFueVxufVxuXG5leHBvcnQgdHlwZSBDb21wb25lbnRSZWdpc3RyYXRpb24gPSAoXG4gICAgKHsgaWQ6IHN0cmluZyB9ICYgUmVnaXN0cmF0aW9uQ29uZmlnKSB8XG4gICAgKHsgbWF0Y2hlcjogc3RyaW5nW10gfCBSZWdFeHAgfCAoKHZhbHVlOiBzdHJpbmcpID0+IGJvb2xlYW4pOyB9ICYgUmVnaXN0cmF0aW9uQ29uZmlnKVxuKTtcblxuZXhwb3J0IHR5cGUgRHluYW1pY1JlZ2lzdHJhdGlvbkFyZ3M8VCA9IGFueT4gPSB7XG4gICAgaWQ6IHN0cmluZyxcbiAgICBncm91cD86IHN0cmluZyxcbiAgICBtYXRjaGVyPzogc3RyaW5nW10gfCBSZWdFeHAgfCAoKHZhbDogc3RyaW5nKSA9PiBib29sZWFuKSxcbiAgICBjb21wb25lbnQ/OiBULFxuICAgIGxvYWQ/OiAoKSA9PiBhbnk7XG59XG5cbi8qKlxuICogVGhpcyBpcyByb3VnaGx5IGEgY29tcGlsZWQgY29tcG9uZW50XG4gKi9cbmV4cG9ydCB0eXBlIENvbXBpbGVkQ29tcG9uZW50ID0ge1xuICAgICgpOiBDb21waWxlZENvbXBvbmVudCxcbiAgICDJtWZhYzogRnVuY3Rpb24sXG4gICAgybVjbXA6IHtcbiAgICAgICAgY29uc3RzO1xuICAgICAgICBjb250ZW50UXVlcmllcztcbiAgICAgICAgZGF0YTtcbiAgICAgICAgZGVjbGFyZWRJbnB1dHM7XG4gICAgICAgIGRlY2xzO1xuICAgICAgICBkZXBlbmRlbmNpZXM7XG4gICAgICAgIGRpcmVjdGl2ZURlZnM7XG4gICAgICAgIGVuY2Fwc3VsYXRpb247XG4gICAgICAgIGV4cG9ydEFzO1xuICAgICAgICBmYWN0b3J5O1xuICAgICAgICBmZWF0dXJlcztcbiAgICAgICAgZmluZEhvc3REaXJlY3RpdmVEZWZzO1xuICAgICAgICBnZXRTdGFuZGFsb25lSW5qZWN0b3I7XG4gICAgICAgIGhvc3RBdHRycztcbiAgICAgICAgaG9zdEJpbmRpbmdzO1xuICAgICAgICBob3N0RGlyZWN0aXZlcztcbiAgICAgICAgaG9zdFZhcnM7XG4gICAgICAgIGlkOiBzdHJpbmc7XG4gICAgICAgIGlucHV0cztcbiAgICAgICAgbmdDb250ZW50U2VsZWN0b3JzO1xuICAgICAgICBvblB1c2g6IGJvb2xlYW47XG4gICAgICAgIG91dHB1dHM7XG4gICAgICAgIHBpcGVEZWZzO1xuICAgICAgICBwcm92aWRlcnNSZXNvbHZlcjtcbiAgICAgICAgc2NoZW1hcztcbiAgICAgICAgc2VsZWN0b3JzOiBzdHJpbmdbXTtcbiAgICAgICAgc2V0SW5wdXQ7XG4gICAgICAgIHN0YW5kYWxvbmU6IGJvb2xlYW47XG4gICAgICAgIHN0eWxlczogc3RyaW5nW107XG4gICAgICAgIHRWaWV3O1xuICAgICAgICB0ZW1wbGF0ZTtcbiAgICAgICAgdHlwZTogRnVuY3Rpb247XG4gICAgICAgIHZhcnM6IG51bWJlcjtcbiAgICAgICAgdmlld1F1ZXJ5O1xuICAgIH07XG59O1xuXG4vKipcbiAqIFRoaXMgaXMgcm91Z2hseSBhIGNvbXBpbGVkIG1vZHVsZVxuICovXG5leHBvcnQgdHlwZSBDb21waWxlZE1vZHVsZSA9IHtcbiAgICAoKTogQ29tcGlsZWRNb2R1bGUsXG4gICAgybVmYWM6IEZ1bmN0aW9uLFxuICAgIMm1aW5qOiB7XG4gICAgICAgIHByb3ZpZGVyczogYW55W10sXG4gICAgICAgIGltcG9ydHM6IGFueVtdO1xuICAgIH0sXG4gICAgybVtb2Q6IHtcbiAgICAgICAgYm9vdHN0cmFwOiBhbnlbXSxcbiAgICAgICAgZGVjbGFyYXRpb25zOiBGdW5jdGlvbltdLFxuICAgICAgICBleHBvcnRzOiBhbnlbXSxcbiAgICAgICAgaWQ6IHVua25vd24sXG4gICAgICAgIGltcG9ydHM6IGFueVtdLFxuICAgICAgICBzY2hlbWFzOiB1bmtub3duLFxuICAgICAgICB0cmFuc2l0aXZlQ29tcGlsZVNjb3BlczogdW5rbm93bixcbiAgICAgICAgdHlwZTogRnVuY3Rpb247XG4gICAgfTtcbn07XG5cbmV4cG9ydCB0eXBlIENvbXBpbGVkQnVuZGxlID0geyBba2V5OiBzdHJpbmddOiBDb21waWxlZENvbXBvbmVudCB8IENvbXBpbGVkTW9kdWxlOyB9O1xuXG5cbiJdfQ==
|