@rooted/elements 1.0.0-alpha.6 → 1.0.0-alpha.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/elements.d.mts +184 -68
- package/dist/elements.mjs +117 -114
- package/dist/events.d.mts +1 -1
- package/dist/events.mjs +1 -3
- package/package.json +7 -7
- package/readme.md +35 -3
package/dist/elements.d.mts
CHANGED
|
@@ -1,29 +1,88 @@
|
|
|
1
|
-
import { ElementOnHandlers } from
|
|
2
|
-
|
|
1
|
+
import { ElementOnHandlers } from "@rooted/events";
|
|
2
|
+
//#region src/aria.d.mts
|
|
3
3
|
type StripAria<S extends string> = S extends `aria${infer Rest}` ? Uncapitalize<Rest> : S;
|
|
4
|
-
type AriaStringProperties = {
|
|
5
|
-
[P in keyof ARIAMixin as ARIAMixin[P] extends string | null ? StripAria<string & P> : never]?: string | null;
|
|
6
|
-
};
|
|
4
|
+
type AriaStringProperties = { [P in keyof ARIAMixin as ARIAMixin[P] extends string | null ? StripAria<string & P> : never]?: string | null; };
|
|
7
5
|
type AriaIdReferenceProperties = {
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
6
|
+
/** {@inheritdoc ARIAMixin['ariaActiveDescendantElement']} */
|
|
7
|
+
activeDescendant?: string | Element | null;
|
|
8
|
+
/** {@inheritdoc ARIAMixin['ariaControlsElements']} */
|
|
9
|
+
controls?: string | Element | null;
|
|
10
|
+
/** {@inheritdoc ARIAMixin['ariaDescribedByElements']} */
|
|
11
|
+
describedBy?: string | Element | null;
|
|
12
|
+
/** {@inheritdoc ARIAMixin['ariaDetailsElements']} */
|
|
13
|
+
details?: string | Element | null;
|
|
14
|
+
/** {@inheritdoc ARIAMixin['ariaErrorMessageElements']} */
|
|
15
|
+
errorMessage?: string | Element | null;
|
|
16
|
+
/** {@inheritdoc ARIAMixin['ariaFlowToElements']} */
|
|
17
|
+
flowTo?: string | Element | null;
|
|
18
|
+
/** {@inheritdoc ARIAMixin['ariaLabelledByElements']} */
|
|
19
|
+
labelledBy?: string | Element | null;
|
|
20
|
+
/** {@inheritdoc ARIAMixin['ariaOwnsElements']} */
|
|
21
|
+
owns?: string | Element | null;
|
|
24
22
|
};
|
|
23
|
+
/**
|
|
24
|
+
* Shape of the `aria` prop on `element(...)`. Accepts every ARIA attribute
|
|
25
|
+
* defined on `ARIAMixin`, with the `aria` prefix stripped (so `aria-label`
|
|
26
|
+
* becomes `label`, `aria-describedby` becomes `describedBy`).
|
|
27
|
+
*
|
|
28
|
+
* For ID-reference attributes (`aria-labelledby`, `aria-controls`, etc.) the
|
|
29
|
+
* value can be a string ID or an `Element` reference. Element references are
|
|
30
|
+
* set via the IDL reflection property when supported, falling back to the
|
|
31
|
+
* attribute value otherwise.
|
|
32
|
+
*
|
|
33
|
+
* @example
|
|
34
|
+
* ```ts
|
|
35
|
+
* element('button', {
|
|
36
|
+
* aria: {
|
|
37
|
+
* label: 'Save',
|
|
38
|
+
* describedBy: helpTextElement,
|
|
39
|
+
* pressed: 'false',
|
|
40
|
+
* },
|
|
41
|
+
* })
|
|
42
|
+
* ```
|
|
43
|
+
*/
|
|
25
44
|
type Aria = AriaStringProperties & AriaIdReferenceProperties;
|
|
26
|
-
|
|
45
|
+
//#endregion
|
|
46
|
+
//#region src/children.d.mts
|
|
47
|
+
/**
|
|
48
|
+
* A single child of an element: a `Node` or a string of text. `undefined` and
|
|
49
|
+
* `null` are allowed too, and get skipped when the children are appended, so
|
|
50
|
+
* conditional children don't need a guard.
|
|
51
|
+
*/
|
|
52
|
+
type ElementChild = Node | string | undefined | null;
|
|
53
|
+
/**
|
|
54
|
+
* One or more children accepted by the `children` prop of every element
|
|
55
|
+
* created via `element()`, `create()` or `append()`.
|
|
56
|
+
*
|
|
57
|
+
* - A single `Node` or string is appended as-is.
|
|
58
|
+
* - An array is appended in order, skipping `undefined` and `null` entries.
|
|
59
|
+
*
|
|
60
|
+
* Because those entries are skipped, conditional children can be written
|
|
61
|
+
* inline with `optional()`. A plain ternary ending in `undefined` works too,
|
|
62
|
+
* it just reads worse.
|
|
63
|
+
*
|
|
64
|
+
* @example
|
|
65
|
+
* ```ts
|
|
66
|
+
* import { optional } from '@rooted/components'
|
|
67
|
+
*
|
|
68
|
+
* element('label', {
|
|
69
|
+
* children: [
|
|
70
|
+
* element('span', {
|
|
71
|
+
* textContent: 'Name',
|
|
72
|
+
* }),
|
|
73
|
+
* optional(required,
|
|
74
|
+
* element('abbr', {
|
|
75
|
+
* title: 'required',
|
|
76
|
+
* textContent: '*',
|
|
77
|
+
* })
|
|
78
|
+
* ),
|
|
79
|
+
* ],
|
|
80
|
+
* })
|
|
81
|
+
* ```
|
|
82
|
+
*/
|
|
83
|
+
type ElementChildren = Array<ElementChild> | ElementChild;
|
|
84
|
+
//#endregion
|
|
85
|
+
//#region src/classes.d.mts
|
|
27
86
|
/**
|
|
28
87
|
* A single CSS class value. Falsy variants (`undefined` and `null`) are
|
|
29
88
|
* automatically filtered out when building a class list, so conditional
|
|
@@ -42,86 +101,143 @@ type CssClass = string | undefined | null;
|
|
|
42
101
|
*/
|
|
43
102
|
type CssClasses = Array<CssClass> | CssClass;
|
|
44
103
|
/**
|
|
45
|
-
*
|
|
104
|
+
* Class names mapped to whether they apply. Only `true` includes the class,
|
|
105
|
+
* anything else leaves it out.
|
|
106
|
+
*
|
|
107
|
+
* Keys have to be strings, so this doesn't work with a `CssModule` value that
|
|
108
|
+
* TypeScript thinks might be `undefined`. Use the list form of
|
|
109
|
+
* {@link cssClasses} for those.
|
|
110
|
+
*
|
|
111
|
+
* @see {@link cssClasses} for the function that reads this.
|
|
112
|
+
*/
|
|
113
|
+
type CssClassDictionary = Record<string, boolean | null | undefined>;
|
|
114
|
+
/**
|
|
115
|
+
* Returns `className` when `visible` is `true`, otherwise `undefined`.
|
|
46
116
|
*
|
|
47
117
|
* Designed to compose cleanly with {@link CssClasses}: falsy values are
|
|
48
118
|
* filtered out automatically, so static and conditional classes can be mixed
|
|
49
|
-
* in a single array without branching.
|
|
119
|
+
* in a single array without branching. Called with just a class name it
|
|
120
|
+
* returns that name, which is handy when the rest of the array is conditional.
|
|
121
|
+
*
|
|
122
|
+
* The condition comes first, same as `optional()`.
|
|
50
123
|
*
|
|
124
|
+
* @param visible - When `true` the class is returned, any other value produces
|
|
125
|
+
* `undefined`.
|
|
51
126
|
* @param className - The CSS class to apply.
|
|
52
|
-
* @param visible - When `true` (the default) the class is returned; any other
|
|
53
|
-
* value produces `undefined`.
|
|
54
127
|
*
|
|
55
128
|
* @example
|
|
56
129
|
* ```ts
|
|
57
130
|
* append('button', {
|
|
58
131
|
* classes: [
|
|
59
132
|
* 'btn',
|
|
60
|
-
* cssClass('btn--active'
|
|
61
|
-
* cssClass('btn--disabled'
|
|
133
|
+
* cssClass(isActive, 'btn--active'),
|
|
134
|
+
* cssClass(isDisabled, 'btn--disabled'),
|
|
62
135
|
* ],
|
|
63
136
|
* })
|
|
64
137
|
* ```
|
|
65
138
|
*/
|
|
66
|
-
declare function cssClass(className: string): CssClass;
|
|
67
|
-
declare function cssClass(className: string, visible: boolean | null | undefined): CssClass;
|
|
68
139
|
declare function cssClass(className: CssClass): CssClass;
|
|
69
|
-
declare function cssClass(
|
|
70
|
-
|
|
140
|
+
declare function cssClass(visible: boolean | null | undefined, className: CssClass): CssClass;
|
|
141
|
+
/**
|
|
142
|
+
* Joins several class names into one {@link CssClass}, dropping the falsy
|
|
143
|
+
* ones. Returns `undefined` when nothing is left, so the result disappears
|
|
144
|
+
* from a `classes` array instead of adding an empty string.
|
|
145
|
+
*
|
|
146
|
+
* Three ways to call it:
|
|
147
|
+
*
|
|
148
|
+
* - `cssClasses('a', 'b')` joins what you pass.
|
|
149
|
+
* - `cssClasses(visible, 'a', 'b')` joins them only when `visible` is `true`.
|
|
150
|
+
* - `cssClasses({ a: true, b: false })` keeps the keys mapped to `true`.
|
|
151
|
+
*
|
|
152
|
+
* Watch out for one overlap: a leading `undefined` or `null` is read as the
|
|
153
|
+
* condition, so `cssClasses(undefined, 'a')` is `undefined` and not `'a'`.
|
|
154
|
+
* A class name that might be `undefined`, like anything off a `CssModule`,
|
|
155
|
+
* belongs after the condition rather than first.
|
|
156
|
+
*
|
|
157
|
+
* @example
|
|
158
|
+
* ```ts
|
|
159
|
+
* append('button', {
|
|
160
|
+
* classes: [
|
|
161
|
+
* cssClasses(styles.button, styles.rounded),
|
|
162
|
+
* cssClasses(isActive, styles.active, styles.raised),
|
|
163
|
+
* cssClasses({
|
|
164
|
+
* 'btn--disabled': isDisabled,
|
|
165
|
+
* }),
|
|
166
|
+
* ],
|
|
167
|
+
* })
|
|
168
|
+
* ```
|
|
169
|
+
*/
|
|
170
|
+
declare function cssClasses(visible: boolean | null | undefined, ...classNames: Array<CssClass>): CssClass;
|
|
171
|
+
declare function cssClasses(...classNames: Array<CssClass>): CssClass;
|
|
172
|
+
declare function cssClasses(classNames: CssClassDictionary): CssClass;
|
|
173
|
+
//#endregion
|
|
174
|
+
//#region src/element-type-utilities.d.mts
|
|
71
175
|
type IfEquals<X, Y, A = X, B = never> = (<T>() => T extends X ? 1 : 2) extends (<T>() => T extends Y ? 1 : 2) ? A : B;
|
|
72
|
-
type NonWritableKeys<T> = {
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
}, {
|
|
76
|
-
-readonly [Q in P]: T[P];
|
|
77
|
-
}, never, P>;
|
|
78
|
-
}[keyof T];
|
|
79
|
-
type FunctionKeys<T> = {
|
|
80
|
-
[P in keyof T]: NonNullable<T[P]> extends (...arguments_: never[]) => unknown ? P : never;
|
|
81
|
-
}[keyof T];
|
|
82
|
-
type OnHandlerKeys<T> = {
|
|
83
|
-
[P in keyof T]: P extends `on${string}` ? P : never;
|
|
84
|
-
}[keyof T];
|
|
176
|
+
type NonWritableKeys<T> = { [P in keyof T]-?: IfEquals<{ [Q in P]: T[P]; }, { -readonly [Q in P]: T[P]; }, never, P>; }[keyof T];
|
|
177
|
+
type FunctionKeys<T> = { [P in keyof T]: NonNullable<T[P]> extends ((...arguments_: never[]) => unknown) ? P : never; }[keyof T];
|
|
178
|
+
type OnHandlerKeys<T> = { [P in keyof T]: P extends `on${string}` ? P : never; }[keyof T];
|
|
85
179
|
/** A subset of CSSStyleDeclaration containing only the individual CSS style properties. */
|
|
86
|
-
type InlineStyle = {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
180
|
+
type InlineStyle = { [K in keyof CSSStyleDeclaration as CSSStyleDeclaration[K] extends string ? K extends 'cssText' ? never : K : never]?: string; };
|
|
181
|
+
//#endregion
|
|
182
|
+
//#region src/html-element-properties.d.mts
|
|
90
183
|
type SanitizedHtmlProperties<TElement extends HTMLElement> = Omit<TElement, NonWritableKeys<TElement> | FunctionKeys<TElement> | Exclude<keyof ARIAMixin, 'role'> | OnHandlerKeys<TElement> | 'children' | 'className' | 'classList' | 'style'>;
|
|
91
184
|
type HtmlElementPropertiesMapped<TElement extends HTMLElement> = Partial<SanitizedHtmlProperties<TElement>> & {
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
185
|
+
[key: string]: unknown;
|
|
186
|
+
children?: ElementChildren;
|
|
187
|
+
classes?: CssClasses;
|
|
188
|
+
style?: InlineStyle;
|
|
189
|
+
aria?: Aria;
|
|
190
|
+
on?: ElementOnHandlers<TElement>;
|
|
98
191
|
};
|
|
192
|
+
/**
|
|
193
|
+
* Typed properties for the HTML element with tag `KElement`. Returned as the
|
|
194
|
+
* second argument to `element(tag, props)` for HTML tags.
|
|
195
|
+
*
|
|
196
|
+
* Includes the writable DOM properties of the element, plus rooted's own
|
|
197
|
+
* `classes`, `style`, `aria`, `on`, and `children` shorthands. Unknown keys
|
|
198
|
+
* (`data-*`, custom attributes) fall through as strings.
|
|
199
|
+
*/
|
|
99
200
|
type HtmlElementProperties<KElement extends keyof HTMLElementTagNameMap> = HtmlElementPropertiesMapped<HTMLElementTagNameMap[KElement]>;
|
|
100
|
-
|
|
201
|
+
//#endregion
|
|
202
|
+
//#region src/svg-element-properties.d.mts
|
|
203
|
+
/**
|
|
204
|
+
* Tag names accepted by `element(...)` for SVG. Use `'svg'` for the root
|
|
205
|
+
* element and `'svg:<name>'` for the rest. The prefix avoids collisions with
|
|
206
|
+
* same-named HTML tags (`a`, `title`, etc.).
|
|
207
|
+
*/
|
|
101
208
|
type SvgTagName = 'svg' | `svg:${Exclude<keyof SVGElementTagNameMap, 'svg'>}`;
|
|
209
|
+
/** Maps a {@link SvgTagName} back to the concrete SVG element class. */
|
|
102
210
|
type SvgTagElement<T extends SvgTagName> = T extends 'svg' ? SVGSVGElement : T extends `svg:${infer K extends keyof SVGElementTagNameMap}` ? SVGElementTagNameMap[K] : never;
|
|
103
211
|
type SanitizedSvgProperties<TElement extends SVGElement> = Omit<TElement, NonWritableKeys<TElement> | FunctionKeys<TElement> | Exclude<keyof ARIAMixin, 'role'> | OnHandlerKeys<TElement> | 'children' | 'className' | 'classList' | 'style'>;
|
|
104
212
|
type SvgElementPropertiesMapped<TElement extends SVGElement> = Partial<SanitizedSvgProperties<TElement>> & {
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
213
|
+
[key: string]: unknown;
|
|
214
|
+
classes?: CssClasses;
|
|
215
|
+
style?: InlineStyle;
|
|
216
|
+
children?: ElementChildren;
|
|
217
|
+
aria?: Aria;
|
|
218
|
+
on?: ElementOnHandlers<TElement>;
|
|
111
219
|
};
|
|
220
|
+
/**
|
|
221
|
+
* Typed properties for the SVG element with tag `K`. Returned as the second
|
|
222
|
+
* argument to `element(tag, props)` for SVG tags. Unknown keys fall through
|
|
223
|
+
* to `setAttribute`, so SVG-specific attributes (`viewBox`, `d`, `href`)
|
|
224
|
+
* work without special-casing.
|
|
225
|
+
*/
|
|
112
226
|
type SvgElementProperties<K extends SvgTagName> = SvgElementPropertiesMapped<SvgTagElement<K> & SVGElement>;
|
|
113
|
-
|
|
227
|
+
//#endregion
|
|
228
|
+
//#region src/element-factory.d.mts
|
|
114
229
|
type ElementCreator = (key: string, ns?: string) => Element;
|
|
115
230
|
/**
|
|
116
231
|
* The overloaded function type returned by {@link createElementFactory}.
|
|
117
232
|
* Accepts HTML or SVG tag names and returns the matching element type.
|
|
118
233
|
*/
|
|
119
234
|
interface ElementCreatorFunction {
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
235
|
+
(tag: 'svg', properties?: SvgElementProperties<'svg'>): SVGSVGElement;
|
|
236
|
+
<K extends Exclude<SvgTagName, 'svg'>>(tag: K, properties?: SvgElementProperties<K>): SvgTagElement<K>;
|
|
237
|
+
<K extends keyof HTMLElementTagNameMap>(tag: K, properties?: NoInfer<HtmlElementProperties<K>>): HTMLElementTagNameMap[K];
|
|
123
238
|
}
|
|
124
239
|
type ElementFactory = ElementCreatorFunction;
|
|
125
240
|
declare function createElementFactory(constructElement: ElementCreator, signal: AbortSignal): ElementCreatorFunction;
|
|
126
|
-
|
|
127
|
-
export { type Aria,
|
|
241
|
+
//#endregion
|
|
242
|
+
export { type Aria, CssClass, CssClassDictionary, CssClasses, ElementChild, ElementChildren, ElementCreator, ElementCreatorFunction, ElementFactory, type HtmlElementProperties, type SvgElementProperties, type SvgTagElement, type SvgTagName, createElementFactory, cssClass, cssClasses };
|
|
243
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudHMuZC5tdHMiLCJuYW1lcyI6W10sInNvdXJjZXMiOlsiLi4vc3JjL2FyaWEubXRzIiwiLi4vc3JjL2NoaWxkcmVuLm10cyIsIi4uL3NyYy9jbGFzc2VzLm10cyIsIi4uL3NyYy9lbGVtZW50LXR5cGUtdXRpbGl0aWVzLm10cyIsIi4uL3NyYy9odG1sLWVsZW1lbnQtcHJvcGVydGllcy5tdHMiLCIuLi9zcmMvc3ZnLWVsZW1lbnQtcHJvcGVydGllcy5tdHMiLCIuLi9zcmMvZWxlbWVudC1mYWN0b3J5Lm10cyJdLCJtYXBwaW5ncyI6Ijs7S0FBSyxVQUFVLG9CQUFvQix1QkFBdUIsU0FBUyxhQUFhLFFBQVE7S0FFbkYsMEJBQ0gsV0FBVyxhQUFhLFVBQVUsMkJBQTJCLG1CQUFtQjtLQUk3RTs7RUFFSiw0QkFBNEI7O0VBRTVCLG9CQUFvQjs7RUFFcEIsdUJBQXVCOztFQUV2QixtQkFBbUI7O0VBRW5CLHdCQUF3Qjs7RUFFeEIsa0JBQWtCOztFQUVsQixzQkFBc0I7O0VBRXRCLGdCQUFnQjs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0F3QkwsT0FBTyx1QkFBdUI7Ozs7Ozs7O0tDMUM5QixlQUFlOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O0tBZ0NmLGtCQUFrQixNQUFNLGdCQUFnQjs7Ozs7Ozs7S0NoQ3hDOzs7Ozs7Ozs7OztLQVlBLGFBQWEsTUFBTSxZQUFZOzs7Ozs7Ozs7OztLQVkvQixxQkFBcUI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lCQTJCakIsU0FBUyxXQUFXLFdBQVc7aUJBQy9CLFNBQVMscUNBQXFDLFdBQVcsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O2lCQXNDcEUsV0FBVyx3Q0FBd0MsWUFBWSxNQUFNLFlBQVk7aUJBQ2pGLGNBQWMsWUFBWSxNQUFNLFlBQVk7aUJBQzVDLFdBQVcsWUFBWSxxQkFBcUI7OztLQ2pHaEQsU0FBUyxHQUFHLEdBQUcsSUFBSSxHQUFHLGVBQWUsUUFBUSxVQUFVLHFCQUFxQixRQUFRLFVBQVUsYUFBYSxJQUFJO0tBQy9HLGdCQUFnQixRQUMxQixXQUFXLE1BQU0sWUFBWSxLQUFLLElBQUksRUFBRSxvQkFBbUIsS0FBSyxJQUFJLEVBQUUsY0FBYSxZQUM3RTtLQUNJLGFBQWEsUUFDdkIsV0FBVyxJQUFJLFlBQVksRUFBRSxpQkFBZ0IsbUNBQWtDLG1CQUN6RTtLQUNJLGNBQWMsUUFBUSxXQUFXLElBQUksMEJBQTBCLG1CQUFrQjs7S0FHakYsaUJBQWlCLFdBQVcsdUJBQXVCLG9CQUFvQixvQkFBb0IsOEJBQThCOzs7S0NIaEksd0JBQXdCLGlCQUFpQixlQUFlLEtBQzVELFVBQ0UsZ0JBQWdCLFlBQ2hCLGFBQWEsWUFDYixjQUFjLHFCQUNkLGNBQWM7S0FJWiw0QkFBNEIsaUJBQWlCLGVBQy9DLFFBQVEsd0JBQXdCO0dBR2hDO0VBQ0QsV0FBVztFQUNYLFVBQVU7RUFDVixRQUFRO0VBQ1IsT0FBTztFQUNQLEtBQUssa0JBQWtCOzs7Ozs7Ozs7O0tBV2Isc0JBQXNCLHVCQUF1Qix5QkFDdEQsNEJBQTRCLHNCQUFzQjs7Ozs7Ozs7S0N6QnpDLDRCQUE0QixjQUFjOztLQUcxQyxjQUFjLFVBQVUsY0FDakMsa0JBQWtCLGdCQUNsQix1QkFBdUIsZ0JBQWdCLHlCQUF5QixxQkFBcUI7S0FHbkYsdUJBQXVCLGlCQUFpQixjQUFjLEtBQzFELFVBQ0UsZ0JBQWdCLFlBQ2hCLGFBQWEsWUFDYixjQUFjLHFCQUNkLGNBQWM7S0FJWiwyQkFBMkIsaUJBQWlCLGNBQzlDLFFBQVEsdUJBQXVCO0dBRy9CO0VBQ0QsVUFBVTtFQUNWLFFBQVE7RUFDUixXQUFXO0VBQ1gsT0FBTztFQUNQLEtBQUssa0JBQWtCOzs7Ozs7OztLQVNiLHFCQUFxQixVQUFVLGNBQ3hDLDJCQUEyQixjQUFjLEtBQUs7OztLQ1ByQyxrQkFBa0IsYUFBYSxnQkFBZ0I7Ozs7O1VBTTFDO0dBQ2YsWUFBWSxhQUFhLDhCQUE4QjtHQUN2RCxVQUFVLFFBQVEsb0JBQW9CLEtBQUssR0FBRyxhQUFhLHFCQUFxQixLQUFLLGNBQWM7R0FDbkcsZ0JBQWdCLHVCQUF1QixLQUFLLEdBQUcsYUFBYSxRQUFRLHNCQUFzQixNQUFNLHNCQUFzQjs7S0FHNUcsaUJBQWlCO2lCQUNiLHFCQUFxQixrQkFBa0IsZ0JBQWdCLFFBQVEsY0FBYyJ9
|
package/dist/elements.mjs
CHANGED
|
@@ -1,132 +1,135 @@
|
|
|
1
|
-
|
|
2
|
-
function cssClass(
|
|
3
|
-
|
|
4
|
-
|
|
1
|
+
//#region src/classes.mts
|
|
2
|
+
function cssClass(...arguments_) {
|
|
3
|
+
if (arguments_.length === 1) return arguments_[0];
|
|
4
|
+
const [visible, className] = arguments_;
|
|
5
|
+
if (visible !== true) return;
|
|
6
|
+
return className;
|
|
5
7
|
}
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
8
|
+
function cssClasses(...arguments_) {
|
|
9
|
+
const [first, ...rest] = arguments_;
|
|
10
|
+
if (typeof first === "string") return joinClassNames([first, ...rest]);
|
|
11
|
+
if (first === void 0 || first === null || typeof first === "boolean") {
|
|
12
|
+
if (first !== true) return;
|
|
13
|
+
return joinClassNames(rest);
|
|
14
|
+
}
|
|
15
|
+
return joinClassNames(Object.entries(first).filter(([, visible]) => visible === true).map(([className]) => className));
|
|
16
|
+
}
|
|
17
|
+
function joinClassNames(classNames) {
|
|
18
|
+
const className = classNames.filter(Boolean).join(" ");
|
|
19
|
+
if (!className) return;
|
|
20
|
+
return className;
|
|
21
|
+
}
|
|
22
|
+
//#endregion
|
|
23
|
+
//#region src/aria.mts
|
|
24
|
+
const ariaIdReferenceAttributes = {
|
|
25
|
+
activeDescendant: "aria-activedescendant",
|
|
26
|
+
controls: "aria-controls",
|
|
27
|
+
describedBy: "aria-describedby",
|
|
28
|
+
details: "aria-details",
|
|
29
|
+
errorMessage: "aria-errormessage",
|
|
30
|
+
flowTo: "aria-flowto",
|
|
31
|
+
labelledBy: "aria-labelledby",
|
|
32
|
+
owns: "aria-owns"
|
|
17
33
|
};
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
34
|
+
const ariaIdReferenceElementProperties = {
|
|
35
|
+
activeDescendant: "ariaActiveDescendantElement",
|
|
36
|
+
controls: "ariaControlsElements",
|
|
37
|
+
describedBy: "ariaDescribedByElements",
|
|
38
|
+
details: "ariaDetailsElements",
|
|
39
|
+
errorMessage: "ariaErrorMessageElements",
|
|
40
|
+
flowTo: "ariaFlowToElements",
|
|
41
|
+
labelledBy: "ariaLabelledByElements",
|
|
42
|
+
owns: "ariaOwnsElements"
|
|
27
43
|
};
|
|
28
44
|
function setProperty(element, key, value) {
|
|
29
|
-
|
|
45
|
+
element[key] = value;
|
|
30
46
|
}
|
|
31
47
|
function buildAriaProperties(aria, element) {
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
48
|
+
if (!aria) return;
|
|
49
|
+
for (const [key, value] of Object.entries(aria)) {
|
|
50
|
+
if (!(key in ariaIdReferenceAttributes)) {
|
|
51
|
+
setProperty(element, `aria${key[0].toUpperCase()}${key.slice(1)}`, value);
|
|
52
|
+
continue;
|
|
53
|
+
}
|
|
54
|
+
if (value === null || value === void 0) {
|
|
55
|
+
element.removeAttribute(ariaIdReferenceAttributes[key]);
|
|
56
|
+
continue;
|
|
57
|
+
}
|
|
58
|
+
if (value instanceof Element) {
|
|
59
|
+
const idlKey = ariaIdReferenceElementProperties[key];
|
|
60
|
+
setProperty(element, idlKey, idlKey.endsWith("Elements") ? [value] : value);
|
|
61
|
+
continue;
|
|
62
|
+
}
|
|
63
|
+
element.setAttribute(ariaIdReferenceAttributes[key], value);
|
|
64
|
+
}
|
|
50
65
|
}
|
|
51
|
-
|
|
52
|
-
|
|
66
|
+
//#endregion
|
|
67
|
+
//#region src/element-factory.mts
|
|
53
68
|
function buildOnHandlers(on, element, signal) {
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
(event) => void handler(event),
|
|
60
|
-
signal ? { signal } : void 0
|
|
61
|
-
);
|
|
62
|
-
}
|
|
69
|
+
if (!on) return;
|
|
70
|
+
for (const [key, handler] of Object.entries(on)) {
|
|
71
|
+
if (!handler) continue;
|
|
72
|
+
element.addEventListener(key, (event) => void handler(event), signal ? { signal } : void 0);
|
|
73
|
+
}
|
|
63
74
|
}
|
|
64
75
|
function buildClassList(classes) {
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
76
|
+
if (classes === null || classes === void 0) return {};
|
|
77
|
+
if (Array.isArray(classes)) return { className: classes.filter(Boolean).join(" ") };
|
|
78
|
+
return { className: String(classes) };
|
|
68
79
|
}
|
|
69
80
|
function isWritableDomProperty(element, key) {
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
81
|
+
let prototype = element;
|
|
82
|
+
while (prototype) {
|
|
83
|
+
const desc = Object.getOwnPropertyDescriptor(prototype, key);
|
|
84
|
+
if (desc) return !!(desc.writable || desc.set);
|
|
85
|
+
prototype = Object.getPrototypeOf(prototype);
|
|
86
|
+
}
|
|
87
|
+
return false;
|
|
77
88
|
}
|
|
78
89
|
function createElementFactory(constructElement, signal) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
buildAriaProperties(aria, newElement);
|
|
114
|
-
buildOnHandlers(on, newElement, signal);
|
|
115
|
-
appendChildren(newElement, children);
|
|
116
|
-
return newElement;
|
|
117
|
-
}
|
|
118
|
-
return createElement;
|
|
90
|
+
function createElement(tag, properties) {
|
|
91
|
+
if (tag === "svg" || tag.startsWith("svg:")) {
|
|
92
|
+
const actualTag = tag === "svg" ? "svg" : tag.slice(4);
|
|
93
|
+
const { classes, children, aria, on, style, ...attributes } = properties ?? {};
|
|
94
|
+
const newElement = constructElement(actualTag, "http://www.w3.org/2000/svg");
|
|
95
|
+
for (const [key, value] of Object.entries(attributes)) {
|
|
96
|
+
if (value === void 0 || value === null) continue;
|
|
97
|
+
if (isWritableDomProperty(newElement, key)) newElement[key] = value;
|
|
98
|
+
else if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") newElement.setAttribute(key, String(value));
|
|
99
|
+
}
|
|
100
|
+
const { className } = buildClassList(classes);
|
|
101
|
+
if (className) newElement.setAttribute("class", className);
|
|
102
|
+
if (style) Object.assign(newElement.style, style);
|
|
103
|
+
buildAriaProperties(aria, newElement);
|
|
104
|
+
buildOnHandlers(on, newElement, signal);
|
|
105
|
+
appendChildren(newElement, children);
|
|
106
|
+
return newElement;
|
|
107
|
+
}
|
|
108
|
+
const { aria, children, classes, on, style, ...assignableProperties } = properties ?? {};
|
|
109
|
+
const newElement = constructElement(tag);
|
|
110
|
+
const { className } = buildClassList(classes);
|
|
111
|
+
if (className) newElement.className = className;
|
|
112
|
+
for (const [key, value] of Object.entries(assignableProperties)) {
|
|
113
|
+
if (value === void 0 || value === null) continue;
|
|
114
|
+
if (isWritableDomProperty(newElement, key)) newElement[key] = value;
|
|
115
|
+
else if (typeof value === "string" || typeof value === "number" || typeof value === "boolean") newElement.setAttribute(key, String(value));
|
|
116
|
+
}
|
|
117
|
+
if (style) Object.assign(newElement.style, style);
|
|
118
|
+
buildAriaProperties(aria, newElement);
|
|
119
|
+
buildOnHandlers(on, newElement, signal);
|
|
120
|
+
appendChildren(newElement, children);
|
|
121
|
+
return newElement;
|
|
122
|
+
}
|
|
123
|
+
return createElement;
|
|
119
124
|
}
|
|
120
125
|
function appendChildren(element, children) {
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
element.append(children);
|
|
127
|
-
}
|
|
126
|
+
if (Array.isArray(children)) for (const child of children) {
|
|
127
|
+
if (child === void 0 || child === null) continue;
|
|
128
|
+
element.append(child);
|
|
129
|
+
}
|
|
130
|
+
else if (children) element.append(children);
|
|
128
131
|
}
|
|
132
|
+
//#endregion
|
|
133
|
+
export { createElementFactory, cssClass, cssClasses };
|
|
129
134
|
|
|
130
|
-
export { createElementFactory, cssClass };
|
|
131
|
-
//# sourceMappingURL=elements.mjs.map
|
|
132
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGFzc2VzLm10cyIsIi4uL3NyYy9hcmlhLm10cyIsIi4uL3NyYy9lbGVtZW50LWZhY3RvcnkubXRzIl0sIm5hbWVzIjpbImNsYXNzZXMiLCJjaGlsZHJlbiIsImFyaWEiLCJvbiIsInN0eWxlIiwibmV3RWxlbWVudCIsImNsYXNzTmFtZSJdLCJtYXBwaW5ncyI6IjtBQTZDTyxTQUFTLFFBQUEsQ0FBUyxTQUFBLEVBQXFCLE9BQUEsR0FBc0MsSUFBQSxFQUFnQjtBQUNuRyxFQUFBLElBQUksWUFBWSxJQUFBLEVBQU07QUFDdEIsRUFBQSxPQUFPLFNBQUE7QUFDUjs7O0FDcEJBLElBQU0seUJBQUEsR0FBNkU7QUFBQSxFQUNsRixnQkFBQSxFQUFrQix1QkFBQTtBQUFBLEVBQ2xCLFFBQUEsRUFBVSxlQUFBO0FBQUEsRUFDVixXQUFBLEVBQWEsa0JBQUE7QUFBQSxFQUNiLE9BQUEsRUFBUyxjQUFBO0FBQUEsRUFDVCxZQUFBLEVBQWMsbUJBQUE7QUFBQSxFQUNkLE1BQUEsRUFBUSxhQUFBO0FBQUEsRUFDUixVQUFBLEVBQVksaUJBQUE7QUFBQSxFQUNaLElBQUEsRUFBTTtBQUNQLENBQUE7QUFHQSxJQUFNLGdDQUFBLEdBQW9GO0FBQUEsRUFDekYsZ0JBQUEsRUFBa0IsNkJBQUE7QUFBQSxFQUNsQixRQUFBLEVBQVUsc0JBQUE7QUFBQSxFQUNWLFdBQUEsRUFBYSx5QkFBQTtBQUFBLEVBQ2IsT0FBQSxFQUFTLHFCQUFBO0FBQUEsRUFDVCxZQUFBLEVBQWMsMEJBQUE7QUFBQSxFQUNkLE1BQUEsRUFBUSxvQkFBQTtBQUFBLEVBQ1IsVUFBQSxFQUFZLHdCQUFBO0FBQUEsRUFDWixJQUFBLEVBQU07QUFDUCxDQUFBO0FBRUEsU0FBUyxXQUFBLENBQVksT0FBQSxFQUFrQixHQUFBLEVBQWEsS0FBQSxFQUFzQjtBQUN6RSxFQUFDLE9BQUEsQ0FBK0MsR0FBRyxDQUFBLEdBQUksS0FBQTtBQUN4RDtBQUVPLFNBQVMsbUJBQUEsQ0FBb0IsTUFBd0IsT0FB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QyxDQUFBO0FBQUEsTUFDM0M7QUFBQSxJQUNEO0FBRUEsSUFBQSxJQUFJLEtBQUEsRUFBTyxNQUFBLENBQU8sTUFBQSxDQUFPLFVBQUEsQ0FBVyxPQUFPLEtBQUssQ0FBQTtBQUNoRCxJQUFBLG1CQUFBLENBQW9CLE1BQTBCLFVBQVUsQ0FBQTtBQUN4RCxJQUFBLGVBQUEsQ0FBZ0IsRUFBQSxFQUFrRCxZQUFZLE1BQU0sQ0FBQTtBQUNwRixJQUFBLGNBQUEsQ0FBZSxZQUFZLFFBQTRELENBQUE7QUFFdkYsSUFBQSxPQUFPLFVBQUE7QUFBQSxFQUNSO0FBRUEsRUFBQSxPQUFPLGFBQUE7QUFDUjtBQUVBLFNBQVMsY0FBQSxDQUFlLFNBQWtCLFFBQUEsRUFBa0U7QUFDM0csRUFBQSxJQUFJLEtBQUEsQ0FBTSxPQUFBLENBQVEsUUFBUSxDQUFBLEVBQUc7QUFDNUIsSUFBQSxLQUFBLE1BQVcsU0FBUyxRQUFBLEVBQVU7QUFDN0IsTUFBQSxPQUFBLENBQVEsT0FBTyxLQUFLLENBQUE7QUFBQSxJQUNyQjtBQUFBLEVBQ0QsV0FDUyxRQUFBLEVBQVU7QUFDbEIsSUFBQSxPQUFBLENBQVEsT0FBTyxRQUFRLENBQUE7QUFBQSxFQUN4QjtBQUNEIiwiZmlsZSI6ImVsZW1lbnRzLm1qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQSBzaW5nbGUgQ1NTIGNsYXNzIHZhbHVlLiBGYWxzeSB2YXJpYW50cyAoYHVuZGVmaW5lZGAgYW5kIGBudWxsYCkgYXJlXG4gKiBhdXRvbWF0aWNhbGx5IGZpbHRlcmVkIG91dCB3aGVuIGJ1aWxkaW5nIGEgY2xhc3MgbGlzdCwgc28gY29uZGl0aW9uYWxcbiAqIGNsYXNzZXMgY2FuIGJlIGV4cHJlc3NlZCB3aXRob3V0IGV4cGxpY2l0IGd1YXJkcy5cbiAqL1xuZXhwb3J0IHR5cGUgQ3NzQ2xhc3MgPSBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG5cbi8qKlxuICogT25lIG9yIG1vcmUgQ1NTIGNsYXNzIHZhbHVlcyBhY2NlcHRlZCBieSB0aGUgYGNsYXNzZXNgIHByb3Agb2YgZXZlcnkgSFRNTFxuICogZWxlbWVudCBjcmVhdGVkIHZpYSBgY3JlYXRlKClgIG9yIGBhcHBlbmQoKWAuXG4gKlxuICogLSBBIHNpbmdsZSBzdHJpbmcgaXMgdXNlZCBhcy1pcy5cbiAqIC0gQW4gYXJyYXkgb2Yge0BsaW5rIENzc0NsYXNzfSB2YWx1ZXMgaXMgam9pbmVkIHdpdGggc3BhY2VzIGFmdGVyIGZhbHN5XG4gKiAgIGVudHJpZXMgYXJlIHJlbW92ZWQuXG4gKlxuICogQHNlZSB7QGxpbmsgY3NzQ2xhc3N9IGZvciBjb21wb3NpbmcgY29uZGl0aW9uYWwgY2xhc3MgbmFtZXMuXG4gKi9cbmV4cG9ydCB0eXBlIENzc0NsYXNzZXMgPSBBcnJheTxDc3NDbGFzcz4gfCBDc3NDbGFzc1xuXG4vKipcbiAqIFJldHVybnMgYGNsYXNzTmFtZWAgd2hlbiBgdmlzaWJsZWAgaXMgdHJ1dGh5LCBvdGhlcndpc2UgYHVuZGVmaW5lZGAuXG4gKlxuICogRGVzaWduZWQgdG8gY29tcG9zZSBjbGVhbmx5IHdpdGgge0BsaW5rIENzc0NsYXNzZXN9OiBmYWxzeSB2YWx1ZXMgYXJlXG4gKiBmaWx0ZXJlZCBvdXQgYXV0b21hdGljYWxseSwgc28gc3RhdGljIGFuZCBjb25kaXRpb25hbCBjbGFzc2VzIGNhbiBiZSBtaXhlZFxuICogaW4gYSBzaW5nbGUgYXJyYXkgd2l0aG91dCBicmFuY2hpbmcuXG4gKlxuICogQHBhcmFtIGNsYXNzTmFtZSAtIFRoZSBDU1MgY2xhc3MgdG8gYXBwbHkuXG4gKiBAcGFyYW0gdmlzaWJsZSAtIFdoZW4gYHRydWVgICh0aGUgZGVmYXVsdCkgdGhlIGNsYXNzIGlzIHJldHVybmVkOyBhbnkgb3RoZXJcbiAqICAgdmFsdWUgcHJvZHVjZXMgYHVuZGVmaW5lZGAuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBhcHBlbmQoJ2J1dHRvbicsIHtcbiAqICAgY2xhc3NlczogW1xuICogICAgICdidG4nLFxuICogICAgIGNzc0NsYXNzKCdidG4tLWFjdGl2ZScsIGlzQWN0aXZlKSxcbiAqICAgICBjc3NDbGFzcygnYnRuLS1kaXNhYmxlZCcsIGlzRGlzYWJsZWQpLFxuICogICBdLFxuICogfSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3NzQ2xhc3MoY2xhc3NOYW1lOiBzdHJpbmcpOiBDc3NDbGFzc1xuZXhwb3J0IGZ1bmN0aW9uIGNzc0NsYXNzKGNsYXNzTmFtZTogc3RyaW5nLCB2aXNpYmxlOiBib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCk6IENzc0NsYXNzXG5leHBvcnQgZnVuY3Rpb24gY3NzQ2xhc3MoY2xhc3NOYW1lOiBDc3NDbGFzcyk6IENzc0NsYXNzXG5leHBvcnQgZnVuY3Rpb24gY3NzQ2xhc3MoY2xhc3NOYW1lOiBDc3NDbGFzcywgdmlzaWJsZTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQpOiBDc3NDbGFzc1xuZXhwb3J0IGZ1bmN0aW9uIGNzc0NsYXNzKGNsYXNzTmFtZTogQ3NzQ2xhc3MsIHZpc2libGU6IGJvb2xlYW4gfCBudWxsIHwgdW5kZWZpbmVkID0gdHJ1ZSk6IENzc0NsYXNzIHtcblx0aWYgKHZpc2libGUgIT09IHRydWUpIHJldHVyblxuXHRyZXR1cm4gY2xhc3NOYW1lXG59XG4iLCJ0eXBlIFN0cmlwQXJpYTxTIGV4dGVuZHMgc3RyaW5nPiA9IFMgZXh0ZW5kcyBgYXJpYSR7aW5mZXIgUmVzdH1gID8gVW5jYXBpdGFsaXplPFJlc3Q+IDogU1xuXG50eXBlIEFyaWFTdHJpbmdQcm9wZXJ0aWVzID0ge1xuXHRbUCBpbiBrZXlvZiBBUklBTWl4aW4gYXMgQVJJQU1peGluW1BdIGV4dGVuZHMgc3RyaW5nIHwgbnVsbCA/IFN0cmlwQXJpYTxzdHJpbmcgJiBQPiA6IG5ldmVyXT86IHN0cmluZyB8IG51bGxcbn1cblxuLy8gUHJvcGVydGllcyB0aGF0IG9ubHkgZXhpc3QgYXMgRWxlbWVudFtdIGluIEFSSUFNaXhpbiDigJQgYWNjZXB0cyBhIHN0cmluZyBJRCBvciBhbiBFbGVtZW50IGRpcmVjdGx5XG50eXBlIEFyaWFJZFJlZmVyZW5jZVByb3BlcnRpZXMgPSB7XG5cdC8qKiB7QGluaGVyaXRkb2MgQVJJQU1peGluWydhcmlhQWN0aXZlRGVzY2VuZGFudEVsZW1lbnQnXX0gKi9cblx0YWN0aXZlRGVzY2VuZGFudD86IHN0cmluZyB8IEVsZW1lbnQgfCBudWxsXG5cdC8qKiB7QGluaGVyaXRkb2MgQVJJQU1peGluWydhcmlhQ29udHJvbHNFbGVtZW50cyddfSAqL1xuXHRjb250cm9scz86IHN0cmluZyB8IEVsZW1lbnQgfCBudWxsXG5cdC8qKiB7QGluaGVyaXRkb2MgQVJJQU1peGluWydhcmlhRGVzY3JpYmVkQnlFbGVtZW50cyddfSAqL1xuXHRkZXNjcmliZWRCeT86IHN0cmluZyB8IEVsZW1lbnQgfCBudWxsXG5cdC8qKiB7QGluaGVyaXRkb2MgQVJJQU1peGluWydhcmlhRGV0YWlsc0VsZW1lbnRzJ119ICovXG5cdGRldGFpbHM/OiBzdHJpbmcgfCBFbGVtZW50IHwgbnVsbFxuXHQvKioge0Bpbmhlcml0ZG9jIEFSSUFNaXhpblsnYXJpYUVycm9yTWVzc2FnZUVsZW1lbnRzJ119ICovXG5cdGVycm9yTWVzc2FnZT86IHN0cmluZyB8IEVsZW1lbnQgfCBudWxsXG5cdC8qKiB7QGluaGVyaXRkb2MgQVJJQU1peGluWydhcmlhRmxvd1RvRWxlbWVudHMnXX0gKi9cblx0Zmxvd1RvPzogc3RyaW5nIHwgRWxlbWVudCB8IG51bGxcblx0LyoqIHtAaW5oZXJpdGRvYyBBUklBTWl4aW5bJ2FyaWFMYWJlbGxlZEJ5RWxlbWVudHMnXX0gKi9cblx0bGFiZWxsZWRCeT86IHN0cmluZyB8IEVsZW1lbnQgfCBudWxsXG5cdC8qKiB7QGluaGVyaXRkb2MgQVJJQU1peGluWydhcmlhT3duc0VsZW1lbnRzJ119ICovXG5cdG93bnM/OiBzdHJpbmcgfCBFbGVtZW50IHwgbnVsbFxufVxuXG5leHBvcnQgdHlwZSBBcmlhID0gQXJpYVN0cmluZ1Byb3BlcnRpZXMgJiBBcmlhSWRSZWZlcmVuY2VQcm9wZXJ0aWVzXG5cbmNvbnN0IGFyaWFJZFJlZmVyZW5jZUF0dHJpYnV0ZXM6IFJlY29yZDxrZXlvZiBBcmlhSWRSZWZlcmVuY2VQcm9wZXJ0aWVzLCBzdHJpbmc+ID0ge1xuXHRhY3RpdmVEZXNjZW5kYW50OiAnYXJpYS1hY3RpdmVkZXNjZW5kYW50Jyxcblx0Y29udHJvbHM6ICdhcmlhLWNvbnRyb2xzJyxcblx0ZGVzY3JpYmVkQnk6ICdhcmlhLWRlc2NyaWJlZGJ5Jyxcblx0ZGV0YWlsczogJ2FyaWEtZGV0YWlscycsXG5cdGVycm9yTWVzc2FnZTogJ2FyaWEtZXJyb3JtZXNzYWdlJyxcblx0Zmxvd1RvOiAnYXJpYS1mbG93dG8nLFxuXHRsYWJlbGxlZEJ5OiAnYXJpYS1sYWJlbGxlZGJ5Jyxcblx0b3duczogJ2FyaWEtb3ducycsXG59XG5cbi8vIGFyaWFBY3RpdmVEZXNjZW5kYW50RWxlbWVudCBpcyBzaW5ndWxhcjsgdGhlIHJlc3QgdGFrZSBFbGVtZW50W11cbmNvbnN0IGFyaWFJZFJlZmVyZW5jZUVsZW1lbnRQcm9wZXJ0aWVzOiBSZWNvcmQ8a2V5b2YgQXJpYUlkUmVmZXJlbmNlUHJvcGVydGllcywgc3RyaW5nPiA9IHtcblx0YWN0aXZlRGVzY2VuZGFudDogJ2FyaWFBY3RpdmVEZXNjZW5kYW50RWxlbWVudCcsXG5cdGNvbnRyb2xzOiAnYXJpYUNvbnRyb2xzRWxlbWVudHMnLFxuXHRkZXNjcmliZWRCeTogJ2FyaWFEZXNjcmliZWRCeUVsZW1lbnRzJyxcblx0ZGV0YWlsczogJ2FyaWFEZXRhaWxzRWxlbWVudHMnLFxuXHRlcnJvck1lc3NhZ2U6ICdhcmlhRXJyb3JNZXNzYWdlRWxlbWVudHMnLFxuXHRmbG93VG86ICdhcmlhRmxvd1RvRWxlbWVudHMnLFxuXHRsYWJlbGxlZEJ5OiAnYXJpYUxhYmVsbGVkQnlFbGVtZW50cycsXG5cdG93bnM6ICdhcmlhT3duc0VsZW1lbnRzJyxcbn1cblxuZnVuY3Rpb24gc2V0UHJvcGVydHkoZWxlbWVudDogRWxlbWVudCwga2V5OiBzdHJpbmcsIHZhbHVlOiB1bmtub3duKTogdm9pZCB7XG5cdChlbGVtZW50IGFzIHVua25vd24gYXMgUmVjb3JkPHN0cmluZywgdW5rbm93bj4pW2tleV0gPSB2YWx1ZVxufVxuXG5leHBvcnQgZnVuY3Rpb24gYnVpbGRBcmlhUHJvcGVydGllcyhhcmlhOiBBcmlhIHwgdW5kZWZpbmVkLCBlbGVtZW50OiBFbGVtZW50KTogdm9pZCB7XG5cdGlmICghYXJpYSkgcmV0dXJuXG5cdGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGFyaWEpKSB7XG5cdFx0aWYgKCEoa2V5IGluIGFyaWFJZFJlZmVyZW5jZUF0dHJpYnV0ZXMpKSB7XG5cdFx0XHRjb25zdCBkb21LZXkgPSBgYXJpYSR7a2V5WzBdLnRvVXBwZXJDYXNlKCl9JHtrZXkuc2xpY2UoMSl9YFxuXHRcdFx0c2V0UHJvcGVydHkoZWxlbWVudCwgZG9tS2V5LCB2YWx1ZSlcblx0XHRcdGNvbnRpbnVlXG5cdFx0fVxuXHRcdGlmICh2YWx1ZSA9PT0gbnVsbCB8fCB2YWx1ZSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRlbGVtZW50LnJlbW92ZUF0dHJpYnV0ZShhcmlhSWRSZWZlcmVuY2VBdHRyaWJ1dGVzW2tleSBhcyBrZXlvZiBBcmlhSWRSZWZlcmVuY2VQcm9wZXJ0aWVzXSlcblx0XHRcdGNvbnRpbnVlXG5cdFx0fVxuXHRcdGlmICh2YWx1ZSBpbnN0YW5jZW9mIEVsZW1lbnQpIHtcblx0XHRcdGNvbnN0IGlkbEtleSA9IGFyaWFJZFJlZmVyZW5jZUVsZW1lbnRQcm9wZXJ0aWVzW2tleSBhcyBrZXlvZiBBcmlhSWRSZWZlcmVuY2VQcm9wZXJ0aWVzXVxuXHRcdFx0c2V0UHJvcGVydHkoZWxlbWVudCwgaWRsS2V5LCBpZGxLZXkuZW5kc1dpdGgoJ0VsZW1lbnRzJykgPyBbdmFsdWVdIDogdmFsdWUpXG5cdFx0XHRjb250aW51ZVxuXHRcdH1cblx0XHRlbGVtZW50LnNldEF0dHJpYnV0ZShhcmlhSWRSZWZlcmVuY2VBdHRyaWJ1dGVzW2tleSBhcyBrZXlvZiBBcmlhSWRSZWZlcmVuY2VQcm9wZXJ0aWVzXSwgdmFsdWUpXG5cdH1cbn1cbiIsImltcG9ydCB7IEVsZW1lbnRPbkhhbmRsZXJzIH0gZnJvbSAnQHJvb3RlZC9ldmVudHMnXG5cbmltcG9ydCB7IHR5cGUgQXJpYSwgYnVpbGRBcmlhUHJvcGVydGllcyB9IGZyb20gJy4vYXJpYS5tdHMnXG5pbXBvcnQgeyBDc3NDbGFzc2VzIH0gZnJvbSAnLi9jbGFzc2VzLm10cydcbmltcG9ydCB7IEh0bWxFbGVtZW50UHJvcGVydGllcyB9IGZyb20gJy4vaHRtbC1lbGVtZW50LXByb3BlcnRpZXMubXRzJ1xuaW1wb3J0IHsgU3ZnRWxlbWVudFByb3BlcnRpZXMsIFN2Z1RhZ0VsZW1lbnQsIFN2Z1RhZ05hbWUgfSBmcm9tICcuL3N2Zy1lbGVtZW50LXByb3BlcnRpZXMubXRzJ1xuXG5mdW5jdGlvbiBidWlsZE9uSGFuZGxlcnM8VEVsZW1lbnQgZXh0ZW5kcyBFbGVtZW50Pihcblx0b246IEVsZW1lbnRPbkhhbmRsZXJzPFRFbGVtZW50PiB8IHVuZGVmaW5lZCxcblx0ZWxlbWVudDogVEVsZW1lbnQsXG5cdHNpZ25hbDogQWJvcnRTaWduYWwsXG4pOiB2b2lkIHtcblx0aWYgKCFvbikgcmV0dXJuXG5cdGZvciAoY29uc3QgW2tleSwgaGFuZGxlcl0gb2YgT2JqZWN0LmVudHJpZXMob24pKSB7XG5cdFx0aWYgKCFoYW5kbGVyKSBjb250aW51ZVxuXHRcdGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcblx0XHRcdGtleSxcblx0XHRcdGV2ZW50ID0+IHZvaWQgKGhhbmRsZXIgYXMgKGV2ZW50PzogRXZlbnQpID0+IHZvaWQgfCBQcm9taXNlPHZvaWQ+KShldmVudCksXG5cdFx0XHRzaWduYWwgPyB7IHNpZ25hbCB9IDogdW5kZWZpbmVkLFxuXHRcdClcblx0fVxufVxuXG5mdW5jdGlvbiBidWlsZENsYXNzTGlzdChjbGFzc2VzOiBDc3NDbGFzc2VzIHwgdW5kZWZpbmVkKSB7XG5cdGlmIChjbGFzc2VzID09PSBudWxsIHx8IGNsYXNzZXMgPT09IHVuZGVmaW5lZCkgcmV0dXJuIHt9XG5cdGlmIChBcnJheS5pc0FycmF5KGNsYXNzZXMpKSByZXR1cm4geyBjbGFzc05hbWU6IGNsYXNzZXMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oJyAnKSB9XG5cblx0cmV0dXJuIHsgY2xhc3NOYW1lOiBTdHJpbmcoY2xhc3NlcykgfVxufVxuXG5mdW5jdGlvbiBpc1dyaXRhYmxlRG9tUHJvcGVydHkoZWxlbWVudDogRWxlbWVudCwga2V5OiBzdHJpbmcpOiBib29sZWFuIHtcblx0bGV0IHByb3RvOiBvYmplY3QgfCBudWxsID0gZWxlbWVudFxuXHR3aGlsZSAocHJvdG8pIHtcblx0XHRjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90bywga2V5KVxuXHRcdGlmIChkZXNjKSByZXR1cm4gISEoZGVzYy53cml0YWJsZSB8fCBkZXNjLnNldClcblx0XHRwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90bykgYXMgb2JqZWN0IHwgbnVsbFxuXHR9XG5cdHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgdHlwZSBFbGVtZW50Q3JlYXRvciA9IChrZXk6IHN0cmluZywgbnM/OiBzdHJpbmcpID0+IEVsZW1lbnRcblxuLyoqXG4gKiBUaGUgb3ZlcmxvYWRlZCBmdW5jdGlvbiB0eXBlIHJldHVybmVkIGJ5IHtAbGluayBjcmVhdGVFbGVtZW50RmFjdG9yeX0uXG4gKiBBY2NlcHRzIEhUTUwgb3IgU1ZHIHRhZyBuYW1lcyBhbmQgcmV0dXJucyB0aGUgbWF0Y2hpbmcgZWxlbWVudCB0eXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRDcmVhdG9yRnVuY3Rpb24ge1xuXHQodGFnOiAnc3ZnJywgcHJvcGVydGllcz86IFN2Z0VsZW1lbnRQcm9wZXJ0aWVzPCdzdmcnPik6IFNWR1NWR0VsZW1lbnRcblx0PEsgZXh0ZW5kcyBFeGNsdWRlPFN2Z1RhZ05hbWUsICdzdmcnPj4odGFnOiBLLCBwcm9wZXJ0aWVzPzogU3ZnRWxlbWVudFByb3BlcnRpZXM8Sz4pOiBTdmdUYWdFbGVtZW50PEs+XG5cdDxLIGV4dGVuZHMga2V5b2YgSFRNTEVsZW1lbnRUYWdOYW1lTWFwPih0YWc6IEssIHByb3BlcnRpZXM/OiBOb0luZmVyPEh0bWxFbGVtZW50UHJvcGVydGllczxLPj4pOiBIVE1MRWxlbWVudFRhZ05hbWVNYXBbS11cbn1cblxuZXhwb3J0IHR5cGUgRWxlbWVudEZhY3RvcnkgPSBFbGVtZW50Q3JlYXRvckZ1bmN0aW9uXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRWxlbWVudEZhY3RvcnkoY29uc3RydWN0RWxlbWVudDogRWxlbWVudENyZWF0b3IsIHNpZ25hbDogQWJvcnRTaWduYWwpOiBFbGVtZW50Q3JlYXRvckZ1bmN0aW9uIHtcblx0LyoqXG5cdCAqIENyZWF0ZXMgYSBuZXcgSFRNTCBvciBTVkcgZWxlbWVudC4gVGhlIGVsZW1lbnQgaXMgKipub3QqKiBhcHBlbmRlZCB0byB0aGVcblx0ICogZG9jdW1lbnQgYXV0b21hdGljYWxseS5cblx0ICpcblx0ICogKipIVE1MIGVsZW1lbnRzKiog4oCUIHBhc3MgYW55IHRhZyBmcm9tIGBIVE1MRWxlbWVudFRhZ05hbWVNYXBgOlxuXHQgKiBgYGB0c1xuXHQgKiBlbGVtZW50KCdkaXYnLCB7IGNsYXNzZXM6ICdjYXJkJywgY2hpbGRyZW46IFsuLi5dIH0pXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiAqKlNWRyBlbGVtZW50cyoqIOKAlCB1c2UgYCdzdmcnYCBmb3IgdGhlIHJvb3QgZWxlbWVudCwgb3IgcHJlZml4IG90aGVyIFNWR1xuXHQgKiB0YWdzIHdpdGggYCdzdmc6J2AgdG8gYXZvaWQgY29sbGlzaW9ucyB3aXRoIHNhbWUtbmFtZWQgSFRNTCB0YWdzOlxuXHQgKiBgYGB0c1xuXHQgKiBlbGVtZW50KCdzdmcnLCB7IHZpZXdCb3g6ICcwIDAgMjQgMjQnLCBjaGlsZHJlbjogZWxlbWVudCgnc3ZnOnVzZScsIHsgaHJlZjogdXJsIH0pIH0pXG5cdCAqIGBgYFxuXHQgKlxuXHQgKiAqKmBjbGFzc2VzYCoqIOKAlCBhY2NlcHRzIGEgc2luZ2xlIGNsYXNzIHN0cmluZyBvciBhIHtAbGluayBDc3NDbGFzc2VzfSBhcnJheTtcblx0ICogZmFsc3kgZW50cmllcyBhcmUgZmlsdGVyZWQgb3V0IGF1dG9tYXRpY2FsbHkuXG5cdCAqXG5cdCAqICoqRE9NIHByb3BlcnR5IG5hbWVzKiog4oCUIGZvciBIVE1MIGVsZW1lbnRzLCBvdGhlciBwcm9wZXJ0aWVzIGFyZSBzZXQgdmlhXG5cdCAqIGBPYmplY3QuYXNzaWduYCBhbmQgbXVzdCB1c2UgRE9NIHByb3BlcnR5IG5hbWVzLCBub3QgSFRNTCBhdHRyaWJ1dGUgbmFtZXM6XG5cdCAqIHwgSFRNTCBhdHRyaWJ1dGUgfCBET00gcHJvcGVydHkgfFxuXHQgKiB8LS0tLS0tLS0tLS0tLS0tLXwtLS0tLS0tLS0tLS0tLXxcblx0ICogfCBgZm9yYCAgICAgICAgICB8IGBodG1sRm9yYCAgICB8XG5cdCAqIHwgYHJlYWRvbmx5YCAgICAgfCBgcmVhZE9ubHlgICAgfFxuXHQgKlxuXHQgKiBGb3IgU1ZHIGVsZW1lbnRzLCB3cml0YWJsZSBET00gcHJvcGVydGllcyBhcmUgc2V0IGRpcmVjdGx5OyBhbnl0aGluZyBlbHNlXG5cdCAqIChlLmcuIGB2aWV3Qm94YCwgYGhyZWZgKSBmYWxscyBiYWNrIHRvIGBzZXRBdHRyaWJ1dGVgIGF1dG9tYXRpY2FsbHkuXG5cdCAqXG5cdCAqICoqQ2hpbGRyZW4qKiDigJQgcGFzcyBhIHNpbmdsZSBgTm9kZWAgb3IgYW4gYXJyYXkgb2YgYE5vZGVgcyB2aWEgdGhlXG5cdCAqIGBjaGlsZHJlbmAgcHJvcGVydHk7IHRoZXkgYXJlIGFwcGVuZGVkIGluIG9yZGVyLlxuXHQgKlxuXHQgKiAqKkV2ZW50IGxpc3RlbmVycyoqIOKAlCB1c2UgdGhlIGBvbmAgcHJvcCB3aXRoIGFuIG9iamVjdCBvZiBldmVudCBoYW5kbGVycy5cblx0ICogTGlzdGVuZXJzIGFyZSBhdXRvbWF0aWNhbGx5IHJlbW92ZWQgd2hlbiB0aGUgY29tcG9uZW50IHVubW91bnRzLlxuXHQgKlxuXHQgKiAqKkFSSUEqKiDigJQgdXNlIHRoZSBgYXJpYWAgcHJvcCBmb3IgQVJJQSBhdHRyaWJ1dGVzLiBBY2NlcHRzIHN0cmluZyBJRHMgb3Jcblx0ICogYEVsZW1lbnRgIHJlZmVyZW5jZXMgZm9yIElETCByZWZsZWN0aW9uIHByb3BlcnRpZXMuXG5cdCAqXG5cdCAqIEBleGFtcGxlXG5cdCAqIGBgYHRzXG5cdCAqIGNvbnN0IGRpdiA9IGVsZW1lbnQoJ2RpdicsIHtcblx0ICogICBjbGFzc2VzOiAnY2FyZCcsXG5cdCAqICAgYXJpYTogeyBsYWJlbDogJ0NhcmQnLCBsYWJlbGxlZEJ5OiBoZWFkaW5nRWwgfSxcblx0ICogICBjaGlsZHJlbjogW1xuXHQgKiAgICAgZWxlbWVudCgnaDInLCB7IHRleHRDb250ZW50OiAnVGl0bGUnIH0pLFxuXHQgKiAgICAgZWxlbWVudCgncCcsICB7IHRleHRDb250ZW50OiAnQm9keScgIH0pLFxuXHQgKiAgIF0sXG5cdCAqIH0pXG5cdCAqXG5cdCAqIGNvbnN0IGljb24gPSBlbGVtZW50KCdzdmcnLCB7XG5cdCAqICAgdmlld0JveDogJzAgMCAyNCAyNCcsXG5cdCAqICAgYXJpYTogeyBoaWRkZW46ICd0cnVlJyB9LFxuXHQgKiAgIGNoaWxkcmVuOiBlbGVtZW50KCdzdmc6dXNlJywgeyBocmVmOiBzcHJpdGVVcmwgfSksXG5cdCAqIH0pXG5cdCAqIGBgYFxuXHQgKi9cblx0ZnVuY3Rpb24gY3JlYXRlRWxlbWVudCh0YWc6ICdzdmcnLCBwcm9wZXJ0aWVzPzogU3ZnRWxlbWVudFByb3BlcnRpZXM8J3N2Zyc+KTogU1ZHU1ZHRWxlbWVudFxuXHRmdW5jdGlvbiBjcmVhdGVFbGVtZW50PEsgZXh0ZW5kcyBFeGNsdWRlPFN2Z1RhZ05hbWUsICdzdmcnPj4odGFnOiBLLCBwcm9wZXJ0aWVzPzogU3ZnRWxlbWVudFByb3BlcnRpZXM8Sz4pOiBTdmdUYWdFbGVtZW50PEs+XG5cdGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQ8S0VsZW1lbnQgZXh0ZW5kcyBrZXlvZiBIVE1MRWxlbWVudFRhZ05hbWVNYXA+KHRhZzogS0VsZW1lbnQsIHByb3BlcnRpZXM/OiBOb0luZmVyPEh0bWxFbGVtZW50UHJvcGVydGllczxLRWxlbWVudD4+KTogSFRNTEVsZW1lbnRUYWdOYW1lTWFwW0tFbGVtZW50XVxuXHRmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZzogc3RyaW5nLCBwcm9wZXJ0aWVzPzogUmVjb3JkPHN0cmluZywgdW5rbm93bj4pOiBFbGVtZW50IHtcblx0XHRpZiAodGFnID09PSAnc3ZnJyB8fCB0YWcuc3RhcnRzV2l0aCgnc3ZnOicpKSB7XG5cdFx0XHRjb25zdCBhY3R1YWxUYWcgPSB0YWcgPT09ICdzdmcnID8gJ3N2ZycgOiB0YWcuc2xpY2UoNClcblx0XHRcdGNvbnN0IHsgY2xhc3NlcywgY2hpbGRyZW4sIGFyaWEsIG9uLCBzdHlsZSwgLi4uYXR0cmlidXRlcyB9ID0gcHJvcGVydGllcyA/PyB7fVxuXHRcdFx0Y29uc3QgbmV3RWxlbWVudCA9IGNvbnN0cnVjdEVsZW1lbnQoYWN0dWFsVGFnLCAnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnKSBhcyBTVkdFbGVtZW50XG5cblx0XHRcdGZvciAoY29uc3QgW2tleSwgdmFsdWVdIG9mIE9iamVjdC5lbnRyaWVzKGF0dHJpYnV0ZXMpKSB7XG5cdFx0XHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSBjb250aW51ZVxuXHRcdFx0XHRpZiAoaXNXcml0YWJsZURvbVByb3BlcnR5KG5ld0VsZW1lbnQsIGtleSkpIHtcblx0XHRcdFx0XHQ7KG5ld0VsZW1lbnQgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSA9IHZhbHVlXG5cdFx0XHRcdH1cblx0XHRcdFx0ZWxzZSBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ2Jvb2xlYW4nKSB7XG5cdFx0XHRcdFx0bmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCBTdHJpbmcodmFsdWUpKVxuXHRcdFx0XHR9XG5cdFx0XHR9XG5cblx0XHRcdGNvbnN0IHsgY2xhc3NOYW1lIH0gPSBidWlsZENsYXNzTGlzdChjbGFzc2VzIGFzIENzc0NsYXNzZXMgfCB1bmRlZmluZWQpXG5cdFx0XHRpZiAoY2xhc3NOYW1lKSBuZXdFbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLCBjbGFzc05hbWUpXG5cblx0XHRcdGlmIChzdHlsZSkgT2JqZWN0LmFzc2lnbihuZXdFbGVtZW50LnN0eWxlLCBzdHlsZSlcblx0XHRcdGJ1aWxkQXJpYVByb3BlcnRpZXMoYXJpYSBhcyBBcmlhIHwgdW5kZWZpbmVkLCBuZXdFbGVtZW50KVxuXHRcdFx0YnVpbGRPbkhhbmRsZXJzKG9uIGFzIEVsZW1lbnRPbkhhbmRsZXJzPEVsZW1lbnQ+IHwgdW5kZWZpbmVkLCBuZXdFbGVtZW50LCBzaWduYWwpXG5cblx0XHRcdGFwcGVuZENoaWxkcmVuKG5ld0VsZW1lbnQsIGNoaWxkcmVuIGFzIEFycmF5PE5vZGUgfCBzdHJpbmc+IHwgTm9kZSB8IHN0cmluZyB8IHVuZGVmaW5lZClcblxuXHRcdFx0cmV0dXJuIG5ld0VsZW1lbnRcblx0XHR9XG5cblx0XHRjb25zdCB7IGFyaWEsIGNoaWxkcmVuLCBjbGFzc2VzLCBvbiwgc3R5bGUsIC4uLmFzc2lnbmFibGVQcm9wZXJ0aWVzIH0gPSBwcm9wZXJ0aWVzID8/IHt9XG5cdFx0Y29uc3QgbmV3RWxlbWVudCA9IGNvbnN0cnVjdEVsZW1lbnQodGFnKSBhcyBIVE1MRWxlbWVudFxuXG5cdFx0Y29uc3QgeyBjbGFzc05hbWUgfSA9IGJ1aWxkQ2xhc3NMaXN0KGNsYXNzZXMgYXMgQ3NzQ2xhc3NlcyB8IHVuZGVmaW5lZClcblx0XHRpZiAoY2xhc3NOYW1lKSBuZXdFbGVtZW50LmNsYXNzTmFtZSA9IGNsYXNzTmFtZVxuXG5cdFx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXNzaWduYWJsZVByb3BlcnRpZXMpKSB7XG5cdFx0XHRpZiAodmFsdWUgPT09IHVuZGVmaW5lZCB8fCB2YWx1ZSA9PT0gbnVsbCkgY29udGludWVcblx0XHRcdGlmIChpc1dyaXRhYmxlRG9tUHJvcGVydHkobmV3RWxlbWVudCwga2V5KSkge1xuXHRcdFx0XHQ7KG5ld0VsZW1lbnQgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSA9IHZhbHVlXG5cdFx0XHR9XG5cdFx0XHRlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcblx0XHRcdFx0bmV3RWxlbWVudC5zZXRBdHRyaWJ1dGUoa2V5LCBTdHJpbmcodmFsdWUpKVxuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChzdHlsZSkgT2JqZWN0LmFzc2lnbihuZXdFbGVtZW50LnN0eWxlLCBzdHlsZSlcblx0XHRidWlsZEFyaWFQcm9wZXJ0aWVzKGFyaWEgYXMgQXJpYSB8IHVuZGVmaW5lZCwgbmV3RWxlbWVudClcblx0XHRidWlsZE9uSGFuZGxlcnMob24gYXMgRWxlbWVudE9uSGFuZGxlcnM8SFRNTEVsZW1lbnQ+IHwgdW5kZWZpbmVkLCBuZXdFbGVtZW50LCBzaWduYWwpXG5cdFx0YXBwZW5kQ2hpbGRyZW4obmV3RWxlbWVudCwgY2hpbGRyZW4gYXMgQXJyYXk8Tm9kZSB8IHN0cmluZz4gfCBOb2RlIHwgc3RyaW5nIHwgdW5kZWZpbmVkKVxuXG5cdFx0cmV0dXJuIG5ld0VsZW1lbnRcblx0fVxuXG5cdHJldHVybiBjcmVhdGVFbGVtZW50IGFzIHVua25vd24gYXMgRWxlbWVudENyZWF0b3JGdW5jdGlvblxufVxuXG5mdW5jdGlvbiBhcHBlbmRDaGlsZHJlbihlbGVtZW50OiBFbGVtZW50LCBjaGlsZHJlbjogQXJyYXk8Tm9kZSB8IHN0cmluZz4gfCBOb2RlIHwgc3RyaW5nIHwgdW5kZWZpbmVkKTogdm9pZCB7XG5cdGlmIChBcnJheS5pc0FycmF5KGNoaWxkcmVuKSkge1xuXHRcdGZvciAoY29uc3QgY2hpbGQgb2YgY2hpbGRyZW4pIHtcblx0XHRcdGVsZW1lbnQuYXBwZW5kKGNoaWxkKVxuXHRcdH1cblx0fVxuXHRlbHNlIGlmIChjaGlsZHJlbikge1xuXHRcdGVsZW1lbnQuYXBwZW5kKGNoaWxkcmVuKVxuXHR9XG59XG4iXX0=
|
|
135
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZWxlbWVudHMubWpzIiwibmFtZXMiOltdLCJzb3VyY2VzIjpbIi4uL3NyYy9jbGFzc2VzLm10cyIsIi4uL3NyYy9hcmlhLm10cyIsIi4uL3NyYy9lbGVtZW50LWZhY3RvcnkubXRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQSBzaW5nbGUgQ1NTIGNsYXNzIHZhbHVlLiBGYWxzeSB2YXJpYW50cyAoYHVuZGVmaW5lZGAgYW5kIGBudWxsYCkgYXJlXG4gKiBhdXRvbWF0aWNhbGx5IGZpbHRlcmVkIG91dCB3aGVuIGJ1aWxkaW5nIGEgY2xhc3MgbGlzdCwgc28gY29uZGl0aW9uYWxcbiAqIGNsYXNzZXMgY2FuIGJlIGV4cHJlc3NlZCB3aXRob3V0IGV4cGxpY2l0IGd1YXJkcy5cbiAqL1xuZXhwb3J0IHR5cGUgQ3NzQ2xhc3MgPSBzdHJpbmcgfCB1bmRlZmluZWQgfCBudWxsXG5cbi8qKlxuICogT25lIG9yIG1vcmUgQ1NTIGNsYXNzIHZhbHVlcyBhY2NlcHRlZCBieSB0aGUgYGNsYXNzZXNgIHByb3Agb2YgZXZlcnkgSFRNTFxuICogZWxlbWVudCBjcmVhdGVkIHZpYSBgY3JlYXRlKClgIG9yIGBhcHBlbmQoKWAuXG4gKlxuICogLSBBIHNpbmdsZSBzdHJpbmcgaXMgdXNlZCBhcy1pcy5cbiAqIC0gQW4gYXJyYXkgb2Yge0BsaW5rIENzc0NsYXNzfSB2YWx1ZXMgaXMgam9pbmVkIHdpdGggc3BhY2VzIGFmdGVyIGZhbHN5XG4gKiAgIGVudHJpZXMgYXJlIHJlbW92ZWQuXG4gKlxuICogQHNlZSB7QGxpbmsgY3NzQ2xhc3N9IGZvciBjb21wb3NpbmcgY29uZGl0aW9uYWwgY2xhc3MgbmFtZXMuXG4gKi9cbmV4cG9ydCB0eXBlIENzc0NsYXNzZXMgPSBBcnJheTxDc3NDbGFzcz4gfCBDc3NDbGFzc1xuXG4vKipcbiAqIENsYXNzIG5hbWVzIG1hcHBlZCB0byB3aGV0aGVyIHRoZXkgYXBwbHkuIE9ubHkgYHRydWVgIGluY2x1ZGVzIHRoZSBjbGFzcyxcbiAqIGFueXRoaW5nIGVsc2UgbGVhdmVzIGl0IG91dC5cbiAqXG4gKiBLZXlzIGhhdmUgdG8gYmUgc3RyaW5ncywgc28gdGhpcyBkb2Vzbid0IHdvcmsgd2l0aCBhIGBDc3NNb2R1bGVgIHZhbHVlIHRoYXRcbiAqIFR5cGVTY3JpcHQgdGhpbmtzIG1pZ2h0IGJlIGB1bmRlZmluZWRgLiBVc2UgdGhlIGxpc3QgZm9ybSBvZlxuICoge0BsaW5rIGNzc0NsYXNzZXN9IGZvciB0aG9zZS5cbiAqXG4gKiBAc2VlIHtAbGluayBjc3NDbGFzc2VzfSBmb3IgdGhlIGZ1bmN0aW9uIHRoYXQgcmVhZHMgdGhpcy5cbiAqL1xuZXhwb3J0IHR5cGUgQ3NzQ2xhc3NEaWN0aW9uYXJ5ID0gUmVjb3JkPHN0cmluZywgYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQ+XG5cbi8qKlxuICogUmV0dXJucyBgY2xhc3NOYW1lYCB3aGVuIGB2aXNpYmxlYCBpcyBgdHJ1ZWAsIG90aGVyd2lzZSBgdW5kZWZpbmVkYC5cbiAqXG4gKiBEZXNpZ25lZCB0byBjb21wb3NlIGNsZWFubHkgd2l0aCB7QGxpbmsgQ3NzQ2xhc3Nlc306IGZhbHN5IHZhbHVlcyBhcmVcbiAqIGZpbHRlcmVkIG91dCBhdXRvbWF0aWNhbGx5LCBzbyBzdGF0aWMgYW5kIGNvbmRpdGlvbmFsIGNsYXNzZXMgY2FuIGJlIG1peGVkXG4gKiBpbiBhIHNpbmdsZSBhcnJheSB3aXRob3V0IGJyYW5jaGluZy4gQ2FsbGVkIHdpdGgganVzdCBhIGNsYXNzIG5hbWUgaXRcbiAqIHJldHVybnMgdGhhdCBuYW1lLCB3aGljaCBpcyBoYW5keSB3aGVuIHRoZSByZXN0IG9mIHRoZSBhcnJheSBpcyBjb25kaXRpb25hbC5cbiAqXG4gKiBUaGUgY29uZGl0aW9uIGNvbWVzIGZpcnN0LCBzYW1lIGFzIGBvcHRpb25hbCgpYC5cbiAqXG4gKiBAcGFyYW0gdmlzaWJsZSAtIFdoZW4gYHRydWVgIHRoZSBjbGFzcyBpcyByZXR1cm5lZCwgYW55IG90aGVyIHZhbHVlIHByb2R1Y2VzXG4gKiAgIGB1bmRlZmluZWRgLlxuICogQHBhcmFtIGNsYXNzTmFtZSAtIFRoZSBDU1MgY2xhc3MgdG8gYXBwbHkuXG4gKlxuICogQGV4YW1wbGVcbiAqIGBgYHRzXG4gKiBhcHBlbmQoJ2J1dHRvbicsIHtcbiAqICAgY2xhc3NlczogW1xuICogICAgICdidG4nLFxuICogICAgIGNzc0NsYXNzKGlzQWN0aXZlLCAnYnRuLS1hY3RpdmUnKSxcbiAqICAgICBjc3NDbGFzcyhpc0Rpc2FibGVkLCAnYnRuLS1kaXNhYmxlZCcpLFxuICogICBdLFxuICogfSlcbiAqIGBgYFxuICovXG5leHBvcnQgZnVuY3Rpb24gY3NzQ2xhc3MoY2xhc3NOYW1lOiBDc3NDbGFzcyk6IENzc0NsYXNzXG5leHBvcnQgZnVuY3Rpb24gY3NzQ2xhc3ModmlzaWJsZTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQsIGNsYXNzTmFtZTogQ3NzQ2xhc3MpOiBDc3NDbGFzc1xuZXhwb3J0IGZ1bmN0aW9uIGNzc0NsYXNzKC4uLmFyZ3VtZW50c186IFtDc3NDbGFzc10gfCBbYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQsIENzc0NsYXNzXSk6IENzc0NsYXNzIHtcblx0aWYgKGFyZ3VtZW50c18ubGVuZ3RoID09PSAxKSByZXR1cm4gYXJndW1lbnRzX1swXVxuXG5cdGNvbnN0IFt2aXNpYmxlLCBjbGFzc05hbWVdID0gYXJndW1lbnRzX1xuXHRpZiAodmlzaWJsZSAhPT0gdHJ1ZSkgcmV0dXJuXG5cdHJldHVybiBjbGFzc05hbWVcbn1cblxuLyoqXG4gKiBKb2lucyBzZXZlcmFsIGNsYXNzIG5hbWVzIGludG8gb25lIHtAbGluayBDc3NDbGFzc30sIGRyb3BwaW5nIHRoZSBmYWxzeVxuICogb25lcy4gUmV0dXJucyBgdW5kZWZpbmVkYCB3aGVuIG5vdGhpbmcgaXMgbGVmdCwgc28gdGhlIHJlc3VsdCBkaXNhcHBlYXJzXG4gKiBmcm9tIGEgYGNsYXNzZXNgIGFycmF5IGluc3RlYWQgb2YgYWRkaW5nIGFuIGVtcHR5IHN0cmluZy5cbiAqXG4gKiBUaHJlZSB3YXlzIHRvIGNhbGwgaXQ6XG4gKlxuICogLSBgY3NzQ2xhc3NlcygnYScsICdiJylgIGpvaW5zIHdoYXQgeW91IHBhc3MuXG4gKiAtIGBjc3NDbGFzc2VzKHZpc2libGUsICdhJywgJ2InKWAgam9pbnMgdGhlbSBvbmx5IHdoZW4gYHZpc2libGVgIGlzIGB0cnVlYC5cbiAqIC0gYGNzc0NsYXNzZXMoeyBhOiB0cnVlLCBiOiBmYWxzZSB9KWAga2VlcHMgdGhlIGtleXMgbWFwcGVkIHRvIGB0cnVlYC5cbiAqXG4gKiBXYXRjaCBvdXQgZm9yIG9uZSBvdmVybGFwOiBhIGxlYWRpbmcgYHVuZGVmaW5lZGAgb3IgYG51bGxgIGlzIHJlYWQgYXMgdGhlXG4gKiBjb25kaXRpb24sIHNvIGBjc3NDbGFzc2VzKHVuZGVmaW5lZCwgJ2EnKWAgaXMgYHVuZGVmaW5lZGAgYW5kIG5vdCBgJ2EnYC5cbiAqIEEgY2xhc3MgbmFtZSB0aGF0IG1pZ2h0IGJlIGB1bmRlZmluZWRgLCBsaWtlIGFueXRoaW5nIG9mZiBhIGBDc3NNb2R1bGVgLFxuICogYmVsb25ncyBhZnRlciB0aGUgY29uZGl0aW9uIHJhdGhlciB0aGFuIGZpcnN0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogYXBwZW5kKCdidXR0b24nLCB7XG4gKiAgIGNsYXNzZXM6IFtcbiAqICAgICBjc3NDbGFzc2VzKHN0eWxlcy5idXR0b24sIHN0eWxlcy5yb3VuZGVkKSxcbiAqICAgICBjc3NDbGFzc2VzKGlzQWN0aXZlLCBzdHlsZXMuYWN0aXZlLCBzdHlsZXMucmFpc2VkKSxcbiAqICAgICBjc3NDbGFzc2VzKHtcbiAqICAgICAgICdidG4tLWRpc2FibGVkJzogaXNEaXNhYmxlZCxcbiAqICAgICB9KSxcbiAqICAgXSxcbiAqIH0pXG4gKiBgYGBcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNzc0NsYXNzZXModmlzaWJsZTogYm9vbGVhbiB8IG51bGwgfCB1bmRlZmluZWQsIC4uLmNsYXNzTmFtZXM6IEFycmF5PENzc0NsYXNzPik6IENzc0NsYXNzXG5leHBvcnQgZnVuY3Rpb24gY3NzQ2xhc3NlcyguLi5jbGFzc05hbWVzOiBBcnJheTxDc3NDbGFzcz4pOiBDc3NDbGFzc1xuZXhwb3J0IGZ1bmN0aW9uIGNzc0NsYXNzZXMoY2xhc3NOYW1lczogQ3NzQ2xhc3NEaWN0aW9uYXJ5KTogQ3NzQ2xhc3NcbmV4cG9ydCBmdW5jdGlvbiBjc3NDbGFzc2VzKFxuXHQuLi5hcmd1bWVudHNfOiBbQ3NzQ2xhc3NEaWN0aW9uYXJ5XSB8IFtib29sZWFuIHwgbnVsbCB8IHVuZGVmaW5lZCwgLi4uQXJyYXk8Q3NzQ2xhc3M+XSB8IEFycmF5PENzc0NsYXNzPlxuKTogQ3NzQ2xhc3Mge1xuXHRjb25zdCBbZmlyc3QsIC4uLnJlc3RdID0gYXJndW1lbnRzX1xuXG5cdGlmICh0eXBlb2YgZmlyc3QgPT09ICdzdHJpbmcnKSByZXR1cm4gam9pbkNsYXNzTmFtZXMoW2ZpcnN0LCAuLi5yZXN0XSBhcyBBcnJheTxDc3NDbGFzcz4pXG5cblx0aWYgKGZpcnN0ID09PSB1bmRlZmluZWQgfHwgZmlyc3QgPT09IG51bGwgfHwgdHlwZW9mIGZpcnN0ID09PSAnYm9vbGVhbicpIHtcblx0XHRpZiAoZmlyc3QgIT09IHRydWUpIHJldHVyblxuXHRcdHJldHVybiBqb2luQ2xhc3NOYW1lcyhyZXN0IGFzIEFycmF5PENzc0NsYXNzPilcblx0fVxuXG5cdHJldHVybiBqb2luQ2xhc3NOYW1lcyhPYmplY3Rcblx0XHQuZW50cmllcyhmaXJzdClcblx0XHQuZmlsdGVyKChbLCB2aXNpYmxlXSkgPT4gdmlzaWJsZSA9PT0gdHJ1ZSlcblx0XHQubWFwKChbY2xhc3NOYW1lXSkgPT4gY2xhc3NOYW1lKSlcbn1cblxuZnVuY3Rpb24gam9pbkNsYXNzTmFtZXMoY2xhc3NOYW1lczogQXJyYXk8Q3NzQ2xhc3M+KTogQ3NzQ2xhc3Mge1xuXHRjb25zdCBjbGFzc05hbWUgPSBjbGFzc05hbWVzLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJylcblx0aWYgKCFjbGFzc05hbWUpIHJldHVyblxuXHRyZXR1cm4gY2xhc3NOYW1lXG59XG4iLCJ0eXBlIFN0cmlwQXJpYTxTIGV4dGVuZHMgc3RyaW5nPiA9IFMgZXh0ZW5kcyBgYXJpYSR7aW5mZXIgUmVzdH1gID8gVW5jYXBpdGFsaXplPFJlc3Q+IDogU1xuXG50eXBlIEFyaWFTdHJpbmdQcm9wZXJ0aWVzID0ge1xuXHRbUCBpbiBrZXlvZiBBUklBTWl4aW4gYXMgQVJJQU1peGluW1BdIGV4dGVuZHMgc3RyaW5nIHwgbnVsbCA/IFN0cmlwQXJpYTxzdHJpbmcgJiBQPiA6IG5ldmVyXT86IHN0cmluZyB8IG51bGxcbn1cblxuLy8gUHJvcGVydGllcyB0aGF0IG9ubHkgZXhpc3QgYXMgRWxlbWVudFtdIGluIEFSSUFNaXhpbi4gQWNjZXB0cyBhIHN0cmluZyBJRCBvciBhbiBFbGVtZW50IGRpcmVjdGx5LlxudHlwZSBBcmlhSWRSZWZlcmVuY2VQcm9wZXJ0aWVzID0ge1xuXHQvKioge0Bpbmhlcml0ZG9jIEFSSUFNaXhpblsnYXJpYUFjdGl2ZURlc2NlbmRhbnRFbGVtZW50J119ICovXG5cdGFjdGl2ZURlc2NlbmRhbnQ/OiBzdHJpbmcgfCBFbGVtZW50IHwgbnVsbFxuXHQvKioge0Bpbmhlcml0ZG9jIEFSSUFNaXhpblsnYXJpYUNvbnRyb2xzRWxlbWVudHMnXX0gKi9cblx0Y29udHJvbHM/OiBzdHJpbmcgfCBFbGVtZW50IHwgbnVsbFxuXHQvKioge0Bpbmhlcml0ZG9jIEFSSUFNaXhpblsnYXJpYURlc2NyaWJlZEJ5RWxlbWVudHMnXX0gKi9cblx0ZGVzY3JpYmVkQnk/OiBzdHJpbmcgfCBFbGVtZW50IHwgbnVsbFxuXHQvKioge0Bpbmhlcml0ZG9jIEFSSUFNaXhpblsnYXJpYURldGFpbHNFbGVtZW50cyddfSAqL1xuXHRkZXRhaWxzPzogc3RyaW5nIHwgRWxlbWVudCB8IG51bGxcblx0LyoqIHtAaW5oZXJpdGRvYyBBUklBTWl4aW5bJ2FyaWFFcnJvck1lc3NhZ2VFbGVtZW50cyddfSAqL1xuXHRlcnJvck1lc3NhZ2U/OiBzdHJpbmcgfCBFbGVtZW50IHwgbnVsbFxuXHQvKioge0Bpbmhlcml0ZG9jIEFSSUFNaXhpblsnYXJpYUZsb3dUb0VsZW1lbnRzJ119ICovXG5cdGZsb3dUbz86IHN0cmluZyB8IEVsZW1lbnQgfCBudWxsXG5cdC8qKiB7QGluaGVyaXRkb2MgQVJJQU1peGluWydhcmlhTGFiZWxsZWRCeUVsZW1lbnRzJ119ICovXG5cdGxhYmVsbGVkQnk/OiBzdHJpbmcgfCBFbGVtZW50IHwgbnVsbFxuXHQvKioge0Bpbmhlcml0ZG9jIEFSSUFNaXhpblsnYXJpYU93bnNFbGVtZW50cyddfSAqL1xuXHRvd25zPzogc3RyaW5nIHwgRWxlbWVudCB8IG51bGxcbn1cblxuLyoqXG4gKiBTaGFwZSBvZiB0aGUgYGFyaWFgIHByb3Agb24gYGVsZW1lbnQoLi4uKWAuIEFjY2VwdHMgZXZlcnkgQVJJQSBhdHRyaWJ1dGVcbiAqIGRlZmluZWQgb24gYEFSSUFNaXhpbmAsIHdpdGggdGhlIGBhcmlhYCBwcmVmaXggc3RyaXBwZWQgKHNvIGBhcmlhLWxhYmVsYFxuICogYmVjb21lcyBgbGFiZWxgLCBgYXJpYS1kZXNjcmliZWRieWAgYmVjb21lcyBgZGVzY3JpYmVkQnlgKS5cbiAqXG4gKiBGb3IgSUQtcmVmZXJlbmNlIGF0dHJpYnV0ZXMgKGBhcmlhLWxhYmVsbGVkYnlgLCBgYXJpYS1jb250cm9sc2AsIGV0Yy4pIHRoZVxuICogdmFsdWUgY2FuIGJlIGEgc3RyaW5nIElEIG9yIGFuIGBFbGVtZW50YCByZWZlcmVuY2UuIEVsZW1lbnQgcmVmZXJlbmNlcyBhcmVcbiAqIHNldCB2aWEgdGhlIElETCByZWZsZWN0aW9uIHByb3BlcnR5IHdoZW4gc3VwcG9ydGVkLCBmYWxsaW5nIGJhY2sgdG8gdGhlXG4gKiBhdHRyaWJ1dGUgdmFsdWUgb3RoZXJ3aXNlLlxuICpcbiAqIEBleGFtcGxlXG4gKiBgYGB0c1xuICogZWxlbWVudCgnYnV0dG9uJywge1xuICogICBhcmlhOiB7XG4gKiAgICAgbGFiZWw6ICdTYXZlJyxcbiAqICAgICBkZXNjcmliZWRCeTogaGVscFRleHRFbGVtZW50LFxuICogICAgIHByZXNzZWQ6ICdmYWxzZScsXG4gKiAgIH0sXG4gKiB9KVxuICogYGBgXG4gKi9cbmV4cG9ydCB0eXBlIEFyaWEgPSBBcmlhU3RyaW5nUHJvcGVydGllcyAmIEFyaWFJZFJlZmVyZW5jZVByb3BlcnRpZXNcblxuY29uc3QgYXJpYUlkUmVmZXJlbmNlQXR0cmlidXRlczogUmVjb3JkPGtleW9mIEFyaWFJZFJlZmVyZW5jZVByb3BlcnRpZXMsIHN0cmluZz4gPSB7XG5cdGFjdGl2ZURlc2NlbmRhbnQ6ICdhcmlhLWFjdGl2ZWRlc2NlbmRhbnQnLFxuXHRjb250cm9sczogJ2FyaWEtY29udHJvbHMnLFxuXHRkZXNjcmliZWRCeTogJ2FyaWEtZGVzY3JpYmVkYnknLFxuXHRkZXRhaWxzOiAnYXJpYS1kZXRhaWxzJyxcblx0ZXJyb3JNZXNzYWdlOiAnYXJpYS1lcnJvcm1lc3NhZ2UnLFxuXHRmbG93VG86ICdhcmlhLWZsb3d0bycsXG5cdGxhYmVsbGVkQnk6ICdhcmlhLWxhYmVsbGVkYnknLFxuXHRvd25zOiAnYXJpYS1vd25zJyxcbn1cblxuLy8gYXJpYUFjdGl2ZURlc2NlbmRhbnRFbGVtZW50IGlzIHNpbmd1bGFyOyB0aGUgcmVzdCB0YWtlIEVsZW1lbnRbXVxuY29uc3QgYXJpYUlkUmVmZXJlbmNlRWxlbWVudFByb3BlcnRpZXM6IFJlY29yZDxrZXlvZiBBcmlhSWRSZWZlcmVuY2VQcm9wZXJ0aWVzLCBzdHJpbmc+ID0ge1xuXHRhY3RpdmVEZXNjZW5kYW50OiAnYXJpYUFjdGl2ZURlc2NlbmRhbnRFbGVtZW50Jyxcblx0Y29udHJvbHM6ICdhcmlhQ29udHJvbHNFbGVtZW50cycsXG5cdGRlc2NyaWJlZEJ5OiAnYXJpYURlc2NyaWJlZEJ5RWxlbWVudHMnLFxuXHRkZXRhaWxzOiAnYXJpYURldGFpbHNFbGVtZW50cycsXG5cdGVycm9yTWVzc2FnZTogJ2FyaWFFcnJvck1lc3NhZ2VFbGVtZW50cycsXG5cdGZsb3dUbzogJ2FyaWFGbG93VG9FbGVtZW50cycsXG5cdGxhYmVsbGVkQnk6ICdhcmlhTGFiZWxsZWRCeUVsZW1lbnRzJyxcblx0b3duczogJ2FyaWFPd25zRWxlbWVudHMnLFxufVxuXG5mdW5jdGlvbiBzZXRQcm9wZXJ0eShlbGVtZW50OiBFbGVtZW50LCBrZXk6IHN0cmluZywgdmFsdWU6IHVua25vd24pOiB2b2lkIHtcblx0KGVsZW1lbnQgYXMgdW5rbm93biBhcyBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPilba2V5XSA9IHZhbHVlXG59XG5cbmV4cG9ydCBmdW5jdGlvbiBidWlsZEFyaWFQcm9wZXJ0aWVzKGFyaWE6IEFyaWEgfCB1bmRlZmluZWQsIGVsZW1lbnQ6IEVsZW1lbnQpOiB2b2lkIHtcblx0aWYgKCFhcmlhKSByZXR1cm5cblx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXJpYSkpIHtcblx0XHRpZiAoIShrZXkgaW4gYXJpYUlkUmVmZXJlbmNlQXR0cmlidXRlcykpIHtcblx0XHRcdGNvbnN0IGRvbUtleSA9IGBhcmlhJHtrZXlbMF0udG9VcHBlckNhc2UoKX0ke2tleS5zbGljZSgxKX1gXG5cdFx0XHRzZXRQcm9wZXJ0eShlbGVtZW50LCBkb21LZXksIHZhbHVlKVxuXHRcdFx0Y29udGludWVcblx0XHR9XG5cdFx0aWYgKHZhbHVlID09PSBudWxsIHx8IHZhbHVlID09PSB1bmRlZmluZWQpIHtcblx0XHRcdGVsZW1lbnQucmVtb3ZlQXR0cmlidXRlKGFyaWFJZFJlZmVyZW5jZUF0dHJpYnV0ZXNba2V5IGFzIGtleW9mIEFyaWFJZFJlZmVyZW5jZVByb3BlcnRpZXNdKVxuXHRcdFx0Y29udGludWVcblx0XHR9XG5cdFx0aWYgKHZhbHVlIGluc3RhbmNlb2YgRWxlbWVudCkge1xuXHRcdFx0Y29uc3QgaWRsS2V5ID0gYXJpYUlkUmVmZXJlbmNlRWxlbWVudFByb3BlcnRpZXNba2V5IGFzIGtleW9mIEFyaWFJZFJlZmVyZW5jZVByb3BlcnRpZXNdXG5cdFx0XHRzZXRQcm9wZXJ0eShlbGVtZW50LCBpZGxLZXksIGlkbEtleS5lbmRzV2l0aCgnRWxlbWVudHMnKSA/IFt2YWx1ZV0gOiB2YWx1ZSlcblx0XHRcdGNvbnRpbnVlXG5cdFx0fVxuXHRcdGVsZW1lbnQuc2V0QXR0cmlidXRlKGFyaWFJZFJlZmVyZW5jZUF0dHJpYnV0ZXNba2V5IGFzIGtleW9mIEFyaWFJZFJlZmVyZW5jZVByb3BlcnRpZXNdLCB2YWx1ZSlcblx0fVxufVxuIiwiaW1wb3J0IHsgRWxlbWVudE9uSGFuZGxlcnMgfSBmcm9tICdAcm9vdGVkL2V2ZW50cydcblxuaW1wb3J0IHsgdHlwZSBBcmlhLCBidWlsZEFyaWFQcm9wZXJ0aWVzIH0gZnJvbSAnLi9hcmlhLm10cydcbmltcG9ydCB7IEVsZW1lbnRDaGlsZHJlbiB9IGZyb20gJy4vY2hpbGRyZW4ubXRzJ1xuaW1wb3J0IHsgQ3NzQ2xhc3NlcyB9IGZyb20gJy4vY2xhc3Nlcy5tdHMnXG5pbXBvcnQgeyBIdG1sRWxlbWVudFByb3BlcnRpZXMgfSBmcm9tICcuL2h0bWwtZWxlbWVudC1wcm9wZXJ0aWVzLm10cydcbmltcG9ydCB7IFN2Z0VsZW1lbnRQcm9wZXJ0aWVzLCBTdmdUYWdFbGVtZW50LCBTdmdUYWdOYW1lIH0gZnJvbSAnLi9zdmctZWxlbWVudC1wcm9wZXJ0aWVzLm10cydcblxuZnVuY3Rpb24gYnVpbGRPbkhhbmRsZXJzPFRFbGVtZW50IGV4dGVuZHMgRWxlbWVudD4oXG5cdG9uOiBFbGVtZW50T25IYW5kbGVyczxURWxlbWVudD4gfCB1bmRlZmluZWQsXG5cdGVsZW1lbnQ6IFRFbGVtZW50LFxuXHRzaWduYWw6IEFib3J0U2lnbmFsLFxuKTogdm9pZCB7XG5cdGlmICghb24pIHJldHVyblxuXHRmb3IgKGNvbnN0IFtrZXksIGhhbmRsZXJdIG9mIE9iamVjdC5lbnRyaWVzKG9uKSkge1xuXHRcdGlmICghaGFuZGxlcikgY29udGludWVcblx0XHRlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXG5cdFx0XHRrZXksXG5cdFx0XHRldmVudCA9PiB2b2lkIChoYW5kbGVyIGFzIChldmVudD86IEV2ZW50KSA9PiB2b2lkIHwgUHJvbWlzZTx2b2lkPikoZXZlbnQpLFxuXHRcdFx0c2lnbmFsID8geyBzaWduYWwgfSA6IHVuZGVmaW5lZCxcblx0XHQpXG5cdH1cbn1cblxuZnVuY3Rpb24gYnVpbGRDbGFzc0xpc3QoY2xhc3NlczogQ3NzQ2xhc3NlcyB8IHVuZGVmaW5lZCkge1xuXHRpZiAoY2xhc3NlcyA9PT0gbnVsbCB8fCBjbGFzc2VzID09PSB1bmRlZmluZWQpIHJldHVybiB7fVxuXHRpZiAoQXJyYXkuaXNBcnJheShjbGFzc2VzKSkgcmV0dXJuIHsgY2xhc3NOYW1lOiBjbGFzc2VzLmZpbHRlcihCb29sZWFuKS5qb2luKCcgJykgfVxuXG5cdHJldHVybiB7IGNsYXNzTmFtZTogU3RyaW5nKGNsYXNzZXMpIH1cbn1cblxuZnVuY3Rpb24gaXNXcml0YWJsZURvbVByb3BlcnR5KGVsZW1lbnQ6IEVsZW1lbnQsIGtleTogc3RyaW5nKTogYm9vbGVhbiB7XG5cdGxldCBwcm90b3R5cGU6IG9iamVjdCB8IG51bGwgPSBlbGVtZW50XG5cdHdoaWxlIChwcm90b3R5cGUpIHtcblx0XHRjb25zdCBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwcm90b3R5cGUsIGtleSlcblx0XHRpZiAoZGVzYykgcmV0dXJuICEhKGRlc2Mud3JpdGFibGUgfHwgZGVzYy5zZXQpXG5cdFx0cHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHByb3RvdHlwZSkgYXMgb2JqZWN0IHwgbnVsbFxuXHR9XG5cdHJldHVybiBmYWxzZVxufVxuXG5leHBvcnQgdHlwZSBFbGVtZW50Q3JlYXRvciA9IChrZXk6IHN0cmluZywgbnM/OiBzdHJpbmcpID0+IEVsZW1lbnRcblxuLyoqXG4gKiBUaGUgb3ZlcmxvYWRlZCBmdW5jdGlvbiB0eXBlIHJldHVybmVkIGJ5IHtAbGluayBjcmVhdGVFbGVtZW50RmFjdG9yeX0uXG4gKiBBY2NlcHRzIEhUTUwgb3IgU1ZHIHRhZyBuYW1lcyBhbmQgcmV0dXJucyB0aGUgbWF0Y2hpbmcgZWxlbWVudCB0eXBlLlxuICovXG5leHBvcnQgaW50ZXJmYWNlIEVsZW1lbnRDcmVhdG9yRnVuY3Rpb24ge1xuXHQodGFnOiAnc3ZnJywgcHJvcGVydGllcz86IFN2Z0VsZW1lbnRQcm9wZXJ0aWVzPCdzdmcnPik6IFNWR1NWR0VsZW1lbnRcblx0PEsgZXh0ZW5kcyBFeGNsdWRlPFN2Z1RhZ05hbWUsICdzdmcnPj4odGFnOiBLLCBwcm9wZXJ0aWVzPzogU3ZnRWxlbWVudFByb3BlcnRpZXM8Sz4pOiBTdmdUYWdFbGVtZW50PEs+XG5cdDxLIGV4dGVuZHMga2V5b2YgSFRNTEVsZW1lbnRUYWdOYW1lTWFwPih0YWc6IEssIHByb3BlcnRpZXM/OiBOb0luZmVyPEh0bWxFbGVtZW50UHJvcGVydGllczxLPj4pOiBIVE1MRWxlbWVudFRhZ05hbWVNYXBbS11cbn1cblxuZXhwb3J0IHR5cGUgRWxlbWVudEZhY3RvcnkgPSBFbGVtZW50Q3JlYXRvckZ1bmN0aW9uXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlRWxlbWVudEZhY3RvcnkoY29uc3RydWN0RWxlbWVudDogRWxlbWVudENyZWF0b3IsIHNpZ25hbDogQWJvcnRTaWduYWwpOiBFbGVtZW50Q3JlYXRvckZ1bmN0aW9uIHtcblx0LyoqXG5cdCAqIENyZWF0ZXMgYW4gSFRNTCBvciBTVkcgZWxlbWVudC4gVGhlIGVsZW1lbnQgaXMgTk9UIGFwcGVuZGVkIHRvIHRoZVxuXHQgKiBkb2N1bWVudDsgcGFzcyBpdCB0byBgYXBwZW5kYCwgYHByZXBlbmRgLCBvciBzZXQgaXQgYXMgYGNoaWxkcmVuYCBvZlxuXHQgKiBhbm90aGVyIGVsZW1lbnQuXG5cdCAqXG5cdCAqIEhUTUwgdGFncyB1c2UgdGhlIHJlZ3VsYXIgYEhUTUxFbGVtZW50VGFnTmFtZU1hcGAga2V5cy4gU1ZHIHRhZ3MgdXNlXG5cdCAqIGAnc3ZnJ2AgZm9yIHRoZSByb290IGFuZCBgJ3N2Zzo8bmFtZT4nYCBmb3IgZXZlcnl0aGluZyBlbHNlICh0aGUgcHJlZml4XG5cdCAqIGtlZXBzIHRoZW0gZnJvbSBjb2xsaWRpbmcgd2l0aCBzYW1lLW5hbWVkIEhUTUwgdGFncykuXG5cdCAqXG5cdCAqIFByb3BlcnRpZXM6XG5cdCAqIC0gYGNsYXNzZXNgOiBhIGNsYXNzIHN0cmluZyBvciBhIHtAbGluayBDc3NDbGFzc2VzfSBhcnJheS4gRmFsc3lcblx0ICogICBlbnRyaWVzIGFyZSBmaWx0ZXJlZCBvdXQuXG5cdCAqIC0gYGFyaWFgOiBBUklBIGF0dHJpYnV0ZXMuIEFjY2VwdHMgc3RyaW5nIElEcyBvciBgRWxlbWVudGAgcmVmZXJlbmNlc1xuXHQgKiAgIGZvciBJREwgcmVmbGVjdGlvbiBwcm9wZXJ0aWVzIChlLmcuIGBhcmlhLWxhYmVsbGVkYnlgKS5cblx0ICogLSBgb25gOiBhbiBvYmplY3Qgb2YgZXZlbnQgaGFuZGxlcnMuIEVhY2ggbGlzdGVuZXIgaXMgcmVtb3ZlZCB3aGVuIHRoZVxuXHQgKiAgIGNvbXBvbmVudCB1bm1vdW50cy5cblx0ICogLSBgY2hpbGRyZW5gOiBhIHNpbmdsZSBgTm9kZWAgb3IgYW4gYXJyYXk7IGFwcGVuZGVkIGluIG9yZGVyLiBgdW5kZWZpbmVkYFxuXHQgKiAgIGFuZCBgbnVsbGAgZW50cmllcyBhcmUgc2tpcHBlZCwgc2FtZSBhcyBgY2xhc3Nlc2AuXG5cdCAqIC0gT3RoZXIgcHJvcHMgYXJlIHNldCBhcyBET00gcHJvcGVydGllcyAoc28gYGh0bWxGb3JgIG5vdCBgZm9yYCxcblx0ICogICBgcmVhZE9ubHlgIG5vdCBgcmVhZG9ubHlgKS4gT24gU1ZHLCBhbnl0aGluZyB0aGF0IGlzbid0IGEgd3JpdGFibGVcblx0ICogICBET00gcHJvcGVydHkgZmFsbHMgYmFjayB0byBgc2V0QXR0cmlidXRlYC5cblx0ICpcblx0ICogQGV4YW1wbGVcblx0ICogYGBgdHNcblx0ICogY29uc3QgZGl2ID0gZWxlbWVudCgnZGl2Jywge1xuXHQgKiAgIGNsYXNzZXM6ICdjYXJkJyxcblx0ICogICBhcmlhOiB7XG5cdCAqICAgICBsYWJlbDogJ0NhcmQnLFxuXHQgKiAgICAgbGFiZWxsZWRCeTogaGVhZGluZ0VsLFxuXHQgKiAgIH0sXG5cdCAqICAgY2hpbGRyZW46IFtcblx0ICogICAgIGVsZW1lbnQoJ2gyJywge1xuXHQgKiAgICAgICB0ZXh0Q29udGVudDogJ1RpdGxlJyxcblx0ICogICAgIH0pLFxuXHQgKiAgICAgZWxlbWVudCgncCcsIHtcblx0ICogICAgICAgdGV4dENvbnRlbnQ6ICdCb2R5Jyxcblx0ICogICAgIH0pLFxuXHQgKiAgIF0sXG5cdCAqIH0pXG5cdCAqXG5cdCAqIGNvbnN0IGljb24gPSBlbGVtZW50KCdzdmcnLCB7XG5cdCAqICAgdmlld0JveDogJzAgMCAyNCAyNCcsXG5cdCAqICAgYXJpYToge1xuXHQgKiAgICAgaGlkZGVuOiAndHJ1ZScsXG5cdCAqICAgfSxcblx0ICogICBjaGlsZHJlbjogZWxlbWVudCgnc3ZnOnVzZScsIHtcblx0ICogICAgIGhyZWY6IHNwcml0ZVVybCxcblx0ICogICB9KSxcblx0ICogfSlcblx0ICogYGBgXG5cdCAqL1xuXHRmdW5jdGlvbiBjcmVhdGVFbGVtZW50KHRhZzogJ3N2ZycsIHByb3BlcnRpZXM/OiBTdmdFbGVtZW50UHJvcGVydGllczwnc3ZnJz4pOiBTVkdTVkdFbGVtZW50XG5cdGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQ8SyBleHRlbmRzIEV4Y2x1ZGU8U3ZnVGFnTmFtZSwgJ3N2Zyc+Pih0YWc6IEssIHByb3BlcnRpZXM/OiBTdmdFbGVtZW50UHJvcGVydGllczxLPik6IFN2Z1RhZ0VsZW1lbnQ8Sz5cblx0ZnVuY3Rpb24gY3JlYXRlRWxlbWVudDxLRWxlbWVudCBleHRlbmRzIGtleW9mIEhUTUxFbGVtZW50VGFnTmFtZU1hcD4odGFnOiBLRWxlbWVudCwgcHJvcGVydGllcz86IE5vSW5mZXI8SHRtbEVsZW1lbnRQcm9wZXJ0aWVzPEtFbGVtZW50Pj4pOiBIVE1MRWxlbWVudFRhZ05hbWVNYXBbS0VsZW1lbnRdXG5cdGZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodGFnOiBzdHJpbmcsIHByb3BlcnRpZXM/OiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPik6IEVsZW1lbnQge1xuXHRcdGlmICh0YWcgPT09ICdzdmcnIHx8IHRhZy5zdGFydHNXaXRoKCdzdmc6JykpIHtcblx0XHRcdGNvbnN0IGFjdHVhbFRhZyA9IHRhZyA9PT0gJ3N2ZycgPyAnc3ZnJyA6IHRhZy5zbGljZSg0KVxuXHRcdFx0Y29uc3QgeyBjbGFzc2VzLCBjaGlsZHJlbiwgYXJpYSwgb24sIHN0eWxlLCAuLi5hdHRyaWJ1dGVzIH0gPSBwcm9wZXJ0aWVzID8/IHt9XG5cdFx0XHRjb25zdCBuZXdFbGVtZW50ID0gY29uc3RydWN0RWxlbWVudChhY3R1YWxUYWcsICdodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZycpIGFzIFNWR0VsZW1lbnRcblxuXHRcdFx0Zm9yIChjb25zdCBba2V5LCB2YWx1ZV0gb2YgT2JqZWN0LmVudHJpZXMoYXR0cmlidXRlcykpIHtcblx0XHRcdFx0aWYgKHZhbHVlID09PSB1bmRlZmluZWQgfHwgdmFsdWUgPT09IG51bGwpIGNvbnRpbnVlXG5cdFx0XHRcdGlmIChpc1dyaXRhYmxlRG9tUHJvcGVydHkobmV3RWxlbWVudCwga2V5KSkge1xuXHRcdFx0XHRcdDsobmV3RWxlbWVudCBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldID0gdmFsdWVcblx0XHRcdFx0fVxuXHRcdFx0XHRlbHNlIGlmICh0eXBlb2YgdmFsdWUgPT09ICdzdHJpbmcnIHx8IHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicgfHwgdHlwZW9mIHZhbHVlID09PSAnYm9vbGVhbicpIHtcblx0XHRcdFx0XHRuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIFN0cmluZyh2YWx1ZSkpXG5cdFx0XHRcdH1cblx0XHRcdH1cblxuXHRcdFx0Y29uc3QgeyBjbGFzc05hbWUgfSA9IGJ1aWxkQ2xhc3NMaXN0KGNsYXNzZXMgYXMgQ3NzQ2xhc3NlcyB8IHVuZGVmaW5lZClcblx0XHRcdGlmIChjbGFzc05hbWUpIG5ld0VsZW1lbnQuc2V0QXR0cmlidXRlKCdjbGFzcycsIGNsYXNzTmFtZSlcblxuXHRcdFx0aWYgKHN0eWxlKSBPYmplY3QuYXNzaWduKG5ld0VsZW1lbnQuc3R5bGUsIHN0eWxlKVxuXHRcdFx0YnVpbGRBcmlhUHJvcGVydGllcyhhcmlhIGFzIEFyaWEgfCB1bmRlZmluZWQsIG5ld0VsZW1lbnQpXG5cdFx0XHRidWlsZE9uSGFuZGxlcnMob24gYXMgRWxlbWVudE9uSGFuZGxlcnM8RWxlbWVudD4gfCB1bmRlZmluZWQsIG5ld0VsZW1lbnQsIHNpZ25hbClcblxuXHRcdFx0YXBwZW5kQ2hpbGRyZW4obmV3RWxlbWVudCwgY2hpbGRyZW4gYXMgRWxlbWVudENoaWxkcmVuKVxuXG5cdFx0XHRyZXR1cm4gbmV3RWxlbWVudFxuXHRcdH1cblxuXHRcdGNvbnN0IHsgYXJpYSwgY2hpbGRyZW4sIGNsYXNzZXMsIG9uLCBzdHlsZSwgLi4uYXNzaWduYWJsZVByb3BlcnRpZXMgfSA9IHByb3BlcnRpZXMgPz8ge31cblx0XHRjb25zdCBuZXdFbGVtZW50ID0gY29uc3RydWN0RWxlbWVudCh0YWcpIGFzIEhUTUxFbGVtZW50XG5cblx0XHRjb25zdCB7IGNsYXNzTmFtZSB9ID0gYnVpbGRDbGFzc0xpc3QoY2xhc3NlcyBhcyBDc3NDbGFzc2VzIHwgdW5kZWZpbmVkKVxuXHRcdGlmIChjbGFzc05hbWUpIG5ld0VsZW1lbnQuY2xhc3NOYW1lID0gY2xhc3NOYW1lXG5cblx0XHRmb3IgKGNvbnN0IFtrZXksIHZhbHVlXSBvZiBPYmplY3QuZW50cmllcyhhc3NpZ25hYmxlUHJvcGVydGllcykpIHtcblx0XHRcdGlmICh2YWx1ZSA9PT0gdW5kZWZpbmVkIHx8IHZhbHVlID09PSBudWxsKSBjb250aW51ZVxuXHRcdFx0aWYgKGlzV3JpdGFibGVEb21Qcm9wZXJ0eShuZXdFbGVtZW50LCBrZXkpKSB7XG5cdFx0XHRcdDsobmV3RWxlbWVudCBhcyB1bmtub3duIGFzIFJlY29yZDxzdHJpbmcsIHVua25vd24+KVtrZXldID0gdmFsdWVcblx0XHRcdH1cblx0XHRcdGVsc2UgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycgfHwgdHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJyB8fCB0eXBlb2YgdmFsdWUgPT09ICdib29sZWFuJykge1xuXHRcdFx0XHRuZXdFbGVtZW50LnNldEF0dHJpYnV0ZShrZXksIFN0cmluZyh2YWx1ZSkpXG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHN0eWxlKSBPYmplY3QuYXNzaWduKG5ld0VsZW1lbnQuc3R5bGUsIHN0eWxlKVxuXHRcdGJ1aWxkQXJpYVByb3BlcnRpZXMoYXJpYSBhcyBBcmlhIHwgdW5kZWZpbmVkLCBuZXdFbGVtZW50KVxuXHRcdGJ1aWxkT25IYW5kbGVycyhvbiBhcyBFbGVtZW50T25IYW5kbGVyczxIVE1MRWxlbWVudD4gfCB1bmRlZmluZWQsIG5ld0VsZW1lbnQsIHNpZ25hbClcblx0XHRhcHBlbmRDaGlsZHJlbihuZXdFbGVtZW50LCBjaGlsZHJlbiBhcyBFbGVtZW50Q2hpbGRyZW4pXG5cblx0XHRyZXR1cm4gbmV3RWxlbWVudFxuXHR9XG5cblx0cmV0dXJuIGNyZWF0ZUVsZW1lbnRcbn1cblxuZnVuY3Rpb24gYXBwZW5kQ2hpbGRyZW4oZWxlbWVudDogRWxlbWVudCwgY2hpbGRyZW46IEVsZW1lbnRDaGlsZHJlbik6IHZvaWQge1xuXHRpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbikpIHtcblx0XHRmb3IgKGNvbnN0IGNoaWxkIG9mIGNoaWxkcmVuKSB7XG5cdFx0XHRpZiAoY2hpbGQgPT09IHVuZGVmaW5lZCB8fCBjaGlsZCA9PT0gbnVsbCkgY29udGludWVcblx0XHRcdGVsZW1lbnQuYXBwZW5kKGNoaWxkKVxuXHRcdH1cblx0fVxuXHRlbHNlIGlmIChjaGlsZHJlbikge1xuXHRcdGVsZW1lbnQuYXBwZW5kKGNoaWxkcmVuKVxuXHR9XG59XG4iXSwibWFwcGluZ3MiOiI7QUEwREEsU0FBZ0IsU0FBUyxHQUFHLFlBQTJFO0NBQ3RHLElBQUksV0FBVyxXQUFXLEdBQUcsT0FB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
|
package/dist/events.d.mts
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from
|
|
1
|
+
export * from "@rooted/events";
|
package/dist/events.mjs
CHANGED
|
@@ -1,3 +1 @@
|
|
|
1
|
-
export * from
|
|
2
|
-
//# sourceMappingURL=events.mjs.map
|
|
3
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IiIsImZpbGUiOiJldmVudHMubWpzIiwic291cmNlc0NvbnRlbnQiOltdfQ==
|
|
1
|
+
export * from "@rooted/events";
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rooted/elements",
|
|
3
|
-
"version": "1.0.0-alpha.
|
|
4
|
-
"description": "
|
|
3
|
+
"version": "1.0.0-alpha.8",
|
|
4
|
+
"description": "Typed HTML and SVG element factory for the rooted framework",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"web-components",
|
|
7
7
|
"custom-elements",
|
|
@@ -44,17 +44,17 @@
|
|
|
44
44
|
"scripts": {
|
|
45
45
|
"build": "pnpm build:ci",
|
|
46
46
|
"build:dev": "pnpm build:ci && rooted-development extract-api",
|
|
47
|
-
"build:ci": "
|
|
48
|
-
"watch": "
|
|
47
|
+
"build:ci": "tsdown",
|
|
48
|
+
"watch": "tsdown --watch --no-clean",
|
|
49
49
|
"clean": "rm -rf dist",
|
|
50
50
|
"extract-api": "rooted-development extract-api"
|
|
51
51
|
},
|
|
52
52
|
"peerDependencies": {
|
|
53
|
-
"@rooted/events": "1.0.0-alpha.
|
|
53
|
+
"@rooted/events": "1.0.0-alpha.8"
|
|
54
54
|
},
|
|
55
55
|
"devDependencies": {
|
|
56
56
|
"@rooted/development": "workspace:*",
|
|
57
|
-
"@rooted/events": "1.0.0-alpha.
|
|
58
|
-
"tsx": "^4.
|
|
57
|
+
"@rooted/events": "1.0.0-alpha.8",
|
|
58
|
+
"tsx": "^4.23.12"
|
|
59
59
|
}
|
|
60
60
|
}
|
package/readme.md
CHANGED
|
@@ -1,7 +1,39 @@
|
|
|
1
1
|
# [`@rooted/elements`](https://www.npmjs.com/package/@rooted/elements)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Typed HTML and SVG element factory. Usable on its own, or as the DOM helper layer for the [`@rooted/*`](https://github.com/Marvin-Brouwer/rooted#rooted) framework.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
> [!IMPORTANT]
|
|
6
|
+
> This package is still in alpha.
|
|
6
7
|
|
|
7
|
-
|
|
8
|
+
```sh
|
|
9
|
+
pnpm add @rooted/elements
|
|
10
|
+
```
|
|
11
|
+
|
|
12
|
+
The package ships a factory builder rather than a ready-made `element`. You hand it the function that creates nodes and an `AbortSignal`, and you get the typed `element(...)` back. Inside a rooted component that's already done for you, `element` is on the mount context.
|
|
13
|
+
|
|
14
|
+
```ts
|
|
15
|
+
import { createElementFactory, type ElementCreator } from '@rooted/elements'
|
|
16
|
+
|
|
17
|
+
const controller = new AbortController()
|
|
18
|
+
const createElement: ElementCreator = (tag, ns) => ns
|
|
19
|
+
? document.createElementNS(ns, tag)
|
|
20
|
+
: document.createElement(tag)
|
|
21
|
+
|
|
22
|
+
const element = createElementFactory(createElement, controller.signal)
|
|
23
|
+
|
|
24
|
+
const card = element('div', {
|
|
25
|
+
classes: 'card',
|
|
26
|
+
children: [
|
|
27
|
+
element('h2', {
|
|
28
|
+
textContent: 'Title',
|
|
29
|
+
}),
|
|
30
|
+
element('p', {
|
|
31
|
+
textContent: 'Body',
|
|
32
|
+
}),
|
|
33
|
+
],
|
|
34
|
+
})
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
The `ns` branch is what makes `element('svg', ...)` and the `svg:*` tags work, so don't drop it. Aborting the controller removes every listener registered through the `on` prop, which is how components clean up on unmount.
|
|
38
|
+
|
|
39
|
+
More in the [elements page](https://github.com/Marvin-Brouwer/rooted/blob/main/docs/advanced/elements.md).
|