@sapui5/sap.fe.base 1.128.0 → 1.129.1
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/package.json +1 -1
- package/src/sap/fe/base/.library +1 -1
- package/src/sap/fe/base/BindingToolkit.js +14 -54
- package/src/sap/fe/base/BindingToolkit.ts +18 -53
- package/src/sap/fe/base/ClassSupport.js +143 -33
- package/src/sap/fe/base/ClassSupport.ts +154 -28
- package/src/sap/fe/base/HookSupport.js +1 -5
- package/src/sap/fe/base/HookSupport.ts +0 -4
- package/src/sap/fe/base/jsx-runtime/jsx-control.js +12 -5
- package/src/sap/fe/base/jsx-runtime/jsx-control.ts +9 -4
- package/src/sap/fe/base/jsx-runtime/jsx-renderManager.js +5 -5
- package/src/sap/fe/base/jsx-runtime/jsx-renderManager.ts +4 -4
- package/src/sap/fe/base/jsx-runtime/jsx-xml.js +1 -3
- package/src/sap/fe/base/jsx-runtime/jsx-xml.ts +0 -2
- package/src/sap/fe/base/jsx-runtime/jsx.js +1 -2
- package/src/sap/fe/base/jsx-runtime/jsx.ts +0 -1
- package/src/sap/fe/base/library.js +2 -3
- package/src/sap/fe/base/library.ts +0 -1
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import ObjectPath from "sap/base/util/ObjectPath";
|
|
2
|
+
import deepClone from "sap/base/util/deepClone";
|
|
2
3
|
import merge from "sap/base/util/merge";
|
|
3
4
|
import uid from "sap/base/util/uid";
|
|
4
5
|
import { hookable } from "sap/fe/base/HookSupport";
|
|
5
6
|
import type { Ref } from "sap/fe/base/jsx-runtime/jsx";
|
|
6
7
|
import type UI5Event from "sap/ui/base/Event";
|
|
7
8
|
import type ManagedObject from "sap/ui/base/ManagedObject";
|
|
9
|
+
import type { AggregationBindingInfo } from "sap/ui/base/ManagedObject";
|
|
8
10
|
import Metadata from "sap/ui/base/Metadata";
|
|
9
11
|
import BaseObject from "sap/ui/base/Object";
|
|
10
12
|
import type Control from "sap/ui/core/Control";
|
|
@@ -13,6 +15,8 @@ import type UI5Element from "sap/ui/core/Element";
|
|
|
13
15
|
import type ControllerExtension from "sap/ui/core/mvc/ControllerExtension";
|
|
14
16
|
import ControllerMetadata from "sap/ui/core/mvc/ControllerMetadata";
|
|
15
17
|
import type OverrideExecution from "sap/ui/core/mvc/OverrideExecution";
|
|
18
|
+
import type Context from "sap/ui/model/Context";
|
|
19
|
+
import JSONModel from "sap/ui/model/json/JSONModel";
|
|
16
20
|
|
|
17
21
|
type OverrideDefinition = Record<string, Function>;
|
|
18
22
|
type UI5ControllerMethodDefinition = {
|
|
@@ -65,10 +69,13 @@ export type UI5ControlMetadataDefinition = {
|
|
|
65
69
|
config?: {
|
|
66
70
|
fullWidth?: boolean;
|
|
67
71
|
};
|
|
72
|
+
stateProperty?: string;
|
|
73
|
+
statePropertyDefaultValue?: unknown;
|
|
68
74
|
manifest?: string | unknown;
|
|
69
75
|
returnTypes?: string[];
|
|
70
76
|
buildingBlockMetadata?: unknown;
|
|
71
77
|
};
|
|
78
|
+
export type AccessorDescriptor<T> = TypedPropertyDescriptor<T> & { initializer?: () => T };
|
|
72
79
|
type UI5ControllerDefinition = {
|
|
73
80
|
override?: { extension?: Record<string, OverrideDefinition> } & {
|
|
74
81
|
[k: string]: Function;
|
|
@@ -110,9 +117,12 @@ export type PropertiesOf<T, K extends keyof T | undefined = undefined> = Partial
|
|
|
110
117
|
export type ConvertContextToString<T> = {
|
|
111
118
|
[K in keyof T]: K extends "metaPath" | "contextPath" ? string : T[K];
|
|
112
119
|
};
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
120
|
+
type ContextToString<T> = {
|
|
121
|
+
[K in keyof T]: T[K] extends Context | undefined ? string | undefined : T[K];
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
export type PropertiesOfBuildingBlock<T> = ContextToString<PropertiesOf<T>>;
|
|
125
|
+
export type StrictPropertiesOf<T> = Pick<T, ControlPropertyNames<T>>;
|
|
116
126
|
export type UI5Accessors<T> = {
|
|
117
127
|
// Add all the getXXX method, might add too much as I'm not filtering on actual properties...
|
|
118
128
|
[P in keyof Required<T> as `get${Capitalize<string & P>}`]: () => T[P];
|
|
@@ -149,7 +159,6 @@ const ensureMetadata = function (target: UI5ControllerDefinition | UI5ControlDef
|
|
|
149
159
|
|
|
150
160
|
/**
|
|
151
161
|
* Method that will find the correct API object based on the current control hierarchy.
|
|
152
|
-
*
|
|
153
162
|
* @param target
|
|
154
163
|
* @returns The proper getAPI function for this constructor
|
|
155
164
|
*/
|
|
@@ -191,7 +200,6 @@ function prepareGetAPIFunction(target: UI5APIControl) {
|
|
|
191
200
|
|
|
192
201
|
/**
|
|
193
202
|
* Ensures that when an xmlEventHandler is defined, the `getAPI` function is properly assigned.
|
|
194
|
-
*
|
|
195
203
|
* @param target The class constructor that should hold the static functions
|
|
196
204
|
*/
|
|
197
205
|
const ensureGetAPI = function (target: UI5APIControl): void {
|
|
@@ -208,11 +216,54 @@ const ensureGetAPI = function (target: UI5APIControl): void {
|
|
|
208
216
|
}
|
|
209
217
|
};
|
|
210
218
|
|
|
219
|
+
export type StateOf<T> = {
|
|
220
|
+
[K in keyof T]: T[K] extends Array<infer U> ? ReadonlyArray<U> & Partial<U> : T[K];
|
|
221
|
+
};
|
|
222
|
+
export type BindingInfoHolder = {
|
|
223
|
+
__bindingInfo: {
|
|
224
|
+
path: string;
|
|
225
|
+
model: string;
|
|
226
|
+
};
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
/**
|
|
230
|
+
* Creates the binding info for an array property coming from the state.
|
|
231
|
+
* @param stateProperty
|
|
232
|
+
* @returns The aggregation binding info
|
|
233
|
+
*/
|
|
234
|
+
export function bindStateArray(stateProperty: readonly object[]): AggregationBindingInfo | undefined {
|
|
235
|
+
if ((stateProperty as unknown as BindingInfoHolder).__bindingInfo !== undefined) {
|
|
236
|
+
return {
|
|
237
|
+
path: (stateProperty as unknown as BindingInfoHolder).__bindingInfo.path,
|
|
238
|
+
model: (stateProperty as unknown as BindingInfoHolder).__bindingInfo.model
|
|
239
|
+
};
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
|
|
243
|
+
/**
|
|
244
|
+
* Allows to define a property that will hold the control state.
|
|
245
|
+
*
|
|
246
|
+
* Properties defined with this decorator will be automatically bound to the control state when used in JSX.
|
|
247
|
+
* Arrays need to be bound using the `bindState` function.
|
|
248
|
+
* @experimental
|
|
249
|
+
* @returns A property decorator
|
|
250
|
+
*/
|
|
251
|
+
export function defineState(): PropertyDecorator {
|
|
252
|
+
return function (target: UI5ControlDefinition, propertyKey: string, propertyDescriptor: TypedPropertyDescriptor<unknown>) {
|
|
253
|
+
const metadata = ensureMetadata(target);
|
|
254
|
+
metadata.stateProperty = propertyKey;
|
|
255
|
+
delete propertyDescriptor.writable;
|
|
256
|
+
metadata.statePropertyDefaultValue ??= (propertyDescriptor as { initializer?: Function }).initializer?.();
|
|
257
|
+
delete (propertyDescriptor as { initializer?: Function }).initializer;
|
|
258
|
+
|
|
259
|
+
return propertyDescriptor;
|
|
260
|
+
} as unknown as PropertyDecorator; // This is technically an accessor decorator, but somehow the compiler doesn't like it if i declare it as such.;
|
|
261
|
+
}
|
|
262
|
+
|
|
211
263
|
/* #region CONTROLLER EXTENSIONS */
|
|
212
264
|
|
|
213
265
|
/**
|
|
214
266
|
* Defines that the following method is an override for the method name with the same name in the specific controller extension or base implementation.
|
|
215
|
-
*
|
|
216
267
|
* @param extensionName The name of the extension that will be overridden
|
|
217
268
|
* @returns The decorated method
|
|
218
269
|
*/
|
|
@@ -240,7 +291,6 @@ export function methodOverride(extensionName?: string): MethodDecorator {
|
|
|
240
291
|
|
|
241
292
|
/**
|
|
242
293
|
* Defines that the method can be extended by other controller extension based on the defined overrideExecutionType.
|
|
243
|
-
*
|
|
244
294
|
* @param overrideExecution The OverrideExecution defining when the override should run (Before / After / Instead)
|
|
245
295
|
* @returns The decorated method
|
|
246
296
|
*/
|
|
@@ -261,7 +311,6 @@ export function extensible(overrideExecution: ExtensionOverrideExecution): Metho
|
|
|
261
311
|
|
|
262
312
|
/**
|
|
263
313
|
* Defines that the method will be publicly available for controller extension usage.
|
|
264
|
-
*
|
|
265
314
|
* @returns The decorated method
|
|
266
315
|
*/
|
|
267
316
|
export function publicExtension(): MethodDecorator {
|
|
@@ -276,7 +325,6 @@ export function publicExtension(): MethodDecorator {
|
|
|
276
325
|
}
|
|
277
326
|
/**
|
|
278
327
|
* Defines that the method will be only available for internal usage of the controller extension.
|
|
279
|
-
*
|
|
280
328
|
* @returns The decorated method
|
|
281
329
|
*/
|
|
282
330
|
export function privateExtension(): MethodDecorator {
|
|
@@ -291,7 +339,6 @@ export function privateExtension(): MethodDecorator {
|
|
|
291
339
|
}
|
|
292
340
|
/**
|
|
293
341
|
* Defines that the method cannot be further extended by other controller extension.
|
|
294
|
-
*
|
|
295
342
|
* @returns The decorated method
|
|
296
343
|
*/
|
|
297
344
|
export function finalExtension(): MethodDecorator {
|
|
@@ -307,7 +354,6 @@ export function finalExtension(): MethodDecorator {
|
|
|
307
354
|
|
|
308
355
|
/**
|
|
309
356
|
* Defines that we are going to use instantiate a controller extension under the following variable name.
|
|
310
|
-
*
|
|
311
357
|
* @param extensionClass The controller extension that will be instantiated
|
|
312
358
|
* @returns The decorated property
|
|
313
359
|
*/
|
|
@@ -325,11 +371,10 @@ export function usingExtension(extensionClass: typeof ControllerExtension | Func
|
|
|
325
371
|
/* #region CONTROL */
|
|
326
372
|
/**
|
|
327
373
|
* Indicates that the property shall be declared as an event on the control metadata.
|
|
328
|
-
*
|
|
329
374
|
* @returns The decorated property
|
|
330
375
|
*/
|
|
331
376
|
export function event(): PropertyDecorator {
|
|
332
|
-
return function (target: UI5ControlDefinition, eventKey) {
|
|
377
|
+
return function (target: UI5ControlDefinition, eventKey: string | Symbol) {
|
|
333
378
|
const metadata = ensureMetadata(target);
|
|
334
379
|
if (!metadata.events[eventKey.toString()]) {
|
|
335
380
|
metadata.events[eventKey.toString()] = {};
|
|
@@ -338,8 +383,7 @@ export function event(): PropertyDecorator {
|
|
|
338
383
|
}
|
|
339
384
|
|
|
340
385
|
/**
|
|
341
|
-
* Defines the following property in the control
|
|
342
|
-
*
|
|
386
|
+
* Defines the following property in the control metadata.
|
|
343
387
|
* @param attributeDefinition The property definition
|
|
344
388
|
* @returns The decorated property.
|
|
345
389
|
*/
|
|
@@ -361,12 +405,11 @@ export function property(attributeDefinition: UI5PropertyMetadata): PropertyDeco
|
|
|
361
405
|
delete (propertyDescriptor as { initializer?: unknown }).initializer;
|
|
362
406
|
|
|
363
407
|
return propertyDescriptor;
|
|
364
|
-
} as unknown as PropertyDecorator; // This is technically an accessor decorator, but somehow the compiler doesn't like it if i declare it as such
|
|
408
|
+
} as unknown as PropertyDecorator; // This is technically an accessor decorator, but somehow the compiler doesn't like it if i declare it as such.
|
|
365
409
|
}
|
|
366
410
|
|
|
367
411
|
/**
|
|
368
|
-
* Defines and
|
|
369
|
-
*
|
|
412
|
+
* Defines and configures the following aggregation in the control metadata.
|
|
370
413
|
* @param aggregationDefinition The aggregation definition
|
|
371
414
|
* @returns The decorated property.
|
|
372
415
|
*/
|
|
@@ -388,12 +431,11 @@ export function aggregation(aggregationDefinition: UI5AggregationMetadata): Prop
|
|
|
388
431
|
delete (propertyDescriptor as { initializer?: unknown }).initializer;
|
|
389
432
|
|
|
390
433
|
return propertyDescriptor;
|
|
391
|
-
} as unknown as PropertyDecorator; // This is technically an accessor decorator, but somehow the compiler doesn't like it if
|
|
434
|
+
} as unknown as PropertyDecorator; // This is technically an accessor decorator, but somehow the compiler doesn't like it if I declare it as such.
|
|
392
435
|
}
|
|
393
436
|
|
|
394
437
|
/**
|
|
395
|
-
* Defines and
|
|
396
|
-
*
|
|
438
|
+
* Defines and configures the following association in the control metadata.
|
|
397
439
|
* @param ui5AssociationMetadata The definition of the association.
|
|
398
440
|
* @returns The decorated property
|
|
399
441
|
*/
|
|
@@ -407,12 +449,11 @@ export function association(ui5AssociationMetadata: UI5AssociationMetadata): Pro
|
|
|
407
449
|
delete (propertyDescriptor as { initializer?: unknown }).initializer;
|
|
408
450
|
|
|
409
451
|
return propertyDescriptor;
|
|
410
|
-
} as unknown as PropertyDecorator; // This is technically an accessor decorator, but somehow the compiler doesn't like it if i declare it as such
|
|
452
|
+
} as unknown as PropertyDecorator; // This is technically an accessor decorator, but somehow the compiler doesn't like it if i declare it as such.
|
|
411
453
|
}
|
|
412
454
|
|
|
413
455
|
/**
|
|
414
456
|
* Defines in the metadata that this control implements a specific interface.
|
|
415
|
-
*
|
|
416
457
|
* @param interfaceName The name of the implemented interface
|
|
417
458
|
* @returns The decorated method
|
|
418
459
|
*/
|
|
@@ -426,7 +467,6 @@ export function implementInterface(interfaceName: string): PropertyDecorator {
|
|
|
426
467
|
|
|
427
468
|
/**
|
|
428
469
|
* Indicates that the following method should also be exposed statically so we can call it from XML.
|
|
429
|
-
*
|
|
430
470
|
* @returns The decorated method
|
|
431
471
|
*/
|
|
432
472
|
export function xmlEventHandler(): MethodDecorator {
|
|
@@ -434,7 +474,7 @@ export function xmlEventHandler(): MethodDecorator {
|
|
|
434
474
|
const currentConstructor: UI5APIControl = target.constructor as unknown as UI5APIControl;
|
|
435
475
|
ensureGetAPI(currentConstructor);
|
|
436
476
|
currentConstructor[propertykey.toString()] = function (...args: unknown[]): void {
|
|
437
|
-
if (args
|
|
477
|
+
if (args?.length) {
|
|
438
478
|
const currentTarget = currentConstructor.getAPI(args[0] as UI5Event);
|
|
439
479
|
currentTarget?.[propertykey.toString()](...args);
|
|
440
480
|
}
|
|
@@ -453,7 +493,6 @@ type UI5ControlAndMore = typeof Control &
|
|
|
453
493
|
|
|
454
494
|
/**
|
|
455
495
|
* Indicates that the following class should define a UI5 control of the specified name.
|
|
456
|
-
*
|
|
457
496
|
* @param sTarget The fully qualified name of the UI5 class
|
|
458
497
|
* @param metadataDefinition Inline metadata definition
|
|
459
498
|
* @returns A class decorator that will create a ui5 class
|
|
@@ -495,7 +534,6 @@ export function createReference<T extends UI5Element>(): Ref<T> {
|
|
|
495
534
|
}
|
|
496
535
|
/**
|
|
497
536
|
* Defines that the following object will hold a reference to a control through jsx templating.
|
|
498
|
-
*
|
|
499
537
|
* @returns The decorated property.
|
|
500
538
|
*/
|
|
501
539
|
export function defineReference(): PropertyDecorator {
|
|
@@ -515,9 +553,95 @@ export function defineReference(): PropertyDecorator {
|
|
|
515
553
|
} as unknown as PropertyDecorator; // This is technically an accessor decorator, but somehow the compiler doesn't like it if i declare it as such.;
|
|
516
554
|
}
|
|
517
555
|
|
|
556
|
+
function _createStateProperty(
|
|
557
|
+
obj: UI5ControlDefinition,
|
|
558
|
+
targetControl: Control & { _updateState: Function; _updateStateDebounced: Function; _updateStateTimer: unknown }
|
|
559
|
+
): void {
|
|
560
|
+
if (obj.metadata?.stateProperty) {
|
|
561
|
+
const stateModel = new JSONModel({});
|
|
562
|
+
targetControl.setModel(stateModel, "$componentState");
|
|
563
|
+
let updatingState = false;
|
|
564
|
+
targetControl._updateState = function (): void {
|
|
565
|
+
delete this._updateStateTimer;
|
|
566
|
+
if (!updatingState) {
|
|
567
|
+
updatingState = true;
|
|
568
|
+
(this as { onStateChange?: Function }).onStateChange?.();
|
|
569
|
+
updatingState = false;
|
|
570
|
+
}
|
|
571
|
+
};
|
|
572
|
+
targetControl._updateStateDebounced = function (): void {
|
|
573
|
+
if (!this._updateStateTimer && !updatingState) {
|
|
574
|
+
this._updateStateTimer = setTimeout(() => {
|
|
575
|
+
this._updateState();
|
|
576
|
+
}, 200);
|
|
577
|
+
}
|
|
578
|
+
};
|
|
579
|
+
Object.defineProperty(targetControl, obj.metadata.stateProperty, {
|
|
580
|
+
configurable: true,
|
|
581
|
+
get: () => {
|
|
582
|
+
return new Proxy(stateModel, {
|
|
583
|
+
get: function (jsonModel, prop): unknown {
|
|
584
|
+
const pathInModel = `/${prop.toString()}`;
|
|
585
|
+
const oObj = deepClone(jsonModel.getObject(pathInModel));
|
|
586
|
+
let oTarget;
|
|
587
|
+
if (typeof oObj === "string") {
|
|
588
|
+
oTarget = { value: oObj };
|
|
589
|
+
oTarget.toString = function (): string {
|
|
590
|
+
return this.value;
|
|
591
|
+
};
|
|
592
|
+
} else if (typeof oObj === "number") {
|
|
593
|
+
oTarget = { value: oObj };
|
|
594
|
+
oTarget.toString = function (): string {
|
|
595
|
+
return this.value.toString();
|
|
596
|
+
};
|
|
597
|
+
} else if (typeof oObj === "boolean") {
|
|
598
|
+
oTarget = new Boolean(oObj);
|
|
599
|
+
} else if (Array.isArray(oObj)) {
|
|
600
|
+
oTarget = new Proxy(oObj.concat(), {
|
|
601
|
+
get(target: unknown[], p: string | symbol, receiver: unknown[]): unknown {
|
|
602
|
+
const ref = Reflect.get(target, p, receiver);
|
|
603
|
+
if (typeof ref === "function") {
|
|
604
|
+
return ref.bind(target);
|
|
605
|
+
} else if (ref === undefined && isNaN(Number(p.toString()))) {
|
|
606
|
+
return {
|
|
607
|
+
__bindingInfo: {
|
|
608
|
+
model: "$componentState",
|
|
609
|
+
path: p
|
|
610
|
+
}
|
|
611
|
+
};
|
|
612
|
+
}
|
|
613
|
+
return ref;
|
|
614
|
+
}
|
|
615
|
+
});
|
|
616
|
+
} else {
|
|
617
|
+
oTarget = { ...oObj };
|
|
618
|
+
}
|
|
619
|
+
oTarget.__bindingInfo = {
|
|
620
|
+
model: "$componentState",
|
|
621
|
+
path: pathInModel
|
|
622
|
+
};
|
|
623
|
+
return oTarget;
|
|
624
|
+
},
|
|
625
|
+
set: (setStateModel: JSONModel, prop, value): boolean => {
|
|
626
|
+
const setResult = setStateModel.setProperty(`/${prop.toString()}`, value);
|
|
627
|
+
targetControl._updateStateDebounced();
|
|
628
|
+
return setResult;
|
|
629
|
+
}
|
|
630
|
+
});
|
|
631
|
+
},
|
|
632
|
+
set: function (value) {
|
|
633
|
+
// Replacing the complete state
|
|
634
|
+
stateModel.setProperty(`/`, value);
|
|
635
|
+
}
|
|
636
|
+
});
|
|
637
|
+
if (obj.metadata.statePropertyDefaultValue) {
|
|
638
|
+
targetControl[obj.metadata.stateProperty as keyof Control] = obj.metadata.statePropertyDefaultValue as never;
|
|
639
|
+
}
|
|
640
|
+
}
|
|
641
|
+
}
|
|
642
|
+
|
|
518
643
|
/**
|
|
519
644
|
* Internal heavy lifting that will take care of creating the class property for ui5 to use.
|
|
520
|
-
*
|
|
521
645
|
* @param clazz The class prototype
|
|
522
646
|
* @param name The name of the class to create
|
|
523
647
|
* @param inObj The metadata object
|
|
@@ -706,7 +830,9 @@ function registerUI5Metadata(clazz: UI5ControlAndMore, name: string, inObj: UI5C
|
|
|
706
830
|
}
|
|
707
831
|
}
|
|
708
832
|
}
|
|
833
|
+
_createStateProperty(obj, this);
|
|
709
834
|
};
|
|
835
|
+
|
|
710
836
|
clazz.override = function (oExtension: unknown): Function {
|
|
711
837
|
const pol = {};
|
|
712
838
|
(pol as Function).constructor = function (...args: unknown[]): Function {
|
|
@@ -16,7 +16,6 @@ sap.ui.define([], function () {
|
|
|
16
16
|
|
|
17
17
|
/**
|
|
18
18
|
* Marks a controller extension method to be hookable by generating additional methods that can be used to attach and detach handlers at runtime.
|
|
19
|
-
*
|
|
20
19
|
* @param execution
|
|
21
20
|
* @returns A method decorator
|
|
22
21
|
*/
|
|
@@ -80,7 +79,6 @@ sap.ui.define([], function () {
|
|
|
80
79
|
|
|
81
80
|
/**
|
|
82
81
|
* Checks whether a newRegistration is already included in some existingRegistrations by comparing all relevant attributes.
|
|
83
|
-
*
|
|
84
82
|
* @param existingRegistrations
|
|
85
83
|
* @param newRegistration
|
|
86
84
|
* @returns Result of the check
|
|
@@ -94,7 +92,6 @@ sap.ui.define([], function () {
|
|
|
94
92
|
* Registers a method as controller extension hook handler.
|
|
95
93
|
*
|
|
96
94
|
* Currently, only methods of runtime building blocks are supported.
|
|
97
|
-
*
|
|
98
95
|
* @param name Controller extension to hook into
|
|
99
96
|
* @param method Method to hook into
|
|
100
97
|
* @returns A method decorator
|
|
@@ -120,7 +117,6 @@ sap.ui.define([], function () {
|
|
|
120
117
|
|
|
121
118
|
/**
|
|
122
119
|
* Initializes all controller extension handlers registered for a given target.
|
|
123
|
-
*
|
|
124
120
|
* @param target Target class to initialize the handlers for
|
|
125
121
|
* @param target.constructor
|
|
126
122
|
* @param controller PageController instance to get the controller extensions instances from
|
|
@@ -155,4 +151,4 @@ sap.ui.define([], function () {
|
|
|
155
151
|
_exports.xmlViewPreprocessor = xmlViewPreprocessor;
|
|
156
152
|
return _exports;
|
|
157
153
|
}, false);
|
|
158
|
-
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZWdpc3RlcmVkSW5zdGFuY2VzIiwicmVnaXN0ZXJlZEhhbmRsZXJzIiwiaG9va2FibGUiLCJleGVjdXRpb24iLCJ0YXJnZXQiLCJwcm9wZXJ0eUtleSIsImRlc2NyaXB0b3IiLCJpbmRleGFibGVUYXJnZXQiLCJ0b1N0cmluZyIsImZuIiwiY0V4VEluc3RhbmNlSG9va01hcCIsImhvb2tlZEhhbmRsZXJzIiwicHVzaCIsImhhbmRsZXJzIiwiaW5kZXgiLCJpbmRleE9mIiwic3BsaWNlIiwib2xkVmFsdWUiLCJ2YWx1ZSIsInJldHVyblZhbHVlIiwiYmluZCIsImFyZ3VtZW50cyIsImhhbmRsZXIiLCJfZXhwb3J0cyIsImlzQWxyZWFkeVJlZ2lzdGVyZWQiLCJleGlzdGluZ1JlZ2lzdHJhdGlvbnMiLCJuZXdSZWdpc3RyYXRpb24iLCJmaW5kIiwiciIsIm5hbWUiLCJtZXRob2QiLCJ0YXJnZXRNZXRob2QiLCJjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlciIsIlN0cmluZyIsImNvbnN0cnVjdG9yIiwiaW5pdENvbnRyb2xsZXJFeHRlbnNpb25Ib29rSGFuZGxlcnMiLCJjb250cm9sbGVyIiwiaW5kZXhhYmxlQ29udHJvbGxlciIsInJlZ2lzdGVyZWRIYW5kbGVyIiwiX2NvbnRyb2xsZXIkZ2V0VmlldyIsImhhbmRsZXJGdW5jdGlvbiIsImdldFZpZXciLCJhdHRhY2hCZWZvcmVFeGl0IiwieG1sVmlld1ByZXByb2Nlc3NvciIsInNvdXJjZSIsIl9jYWxsZXIiLCJfc2V0dGluZ3MiLCJzb3VyY2VWaWV3IiwiZ2V0Q29udHJvbGxlciIsIm1hY3JvQVBJQ2hpbGQiLCJmaW5kQWdncmVnYXRlZE9iamVjdHMiLCJzIiwiaXNBIiwibWFuYWdlZE9iamVjdCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiSG9va1N1cHBvcnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFeHRlbnNpb25PdmVycmlkZUV4ZWN1dGlvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2xsZXIgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBYTUxWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvWE1MVmlld1wiO1xuXG4vKipcbiAqIFRoaXMgdHlwZSBpcyB0byBiZSBleHRlbmRlZCB3aXRoIGFsbCBjb250cm9sbGVyIGV4dGVuc2lvbnMgYW5kIG1ldGhvZHMgdGhhdCBhcmUgaG9va2FibGUuXG4gKi9cbnR5cGUgSG9va2FibGVDb250cm9sbGVyRXh0ZW5zaW9ucyA9IHtcblx0ZWRpdEZsb3c6IHtcblx0XHRvbkFmdGVyU2F2ZTogdHJ1ZTtcblx0XHRvbkJlZm9yZVNhdmU6IHRydWU7XG5cdH07XG5cdGNvbGxhYm9yYXRpb25NYW5hZ2VyOiB7XG5cdFx0Y29sbGVjdEF2YWlsYWJsZUNhcmRzOiB0cnVlO1xuXHR9O1xuXHRwYWdpbmF0b3I6IHtcblx0XHRpbml0aWFsaXplOiB0cnVlO1xuXHR9O1xuXHRyb3V0aW5nOiB7XG5cdFx0b25BZnRlckJpbmRpbmc6IHRydWU7XG5cdH07XG59O1xuXG50eXBlIEhhbmRsZXJDb25maWd1cmF0aW9uPENFeHROYW1lIGV4dGVuZHMga2V5b2YgSG9va2FibGVDb250cm9sbGVyRXh0ZW5zaW9ucz4gPSB7XG5cdG5hbWU6IENFeHROYW1lO1xuXHRtZXRob2Q6IGtleW9mIEhvb2thYmxlQ29udHJvbGxlckV4dGVuc2lvbnNbQ0V4dE5hbWVdO1xufTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG50eXBlIEhhbmRsZXJSZWdpc3RyYXRpb24gPSBIYW5kbGVyQ29uZmlndXJhdGlvbjxhbnk+ICYgeyB0YXJnZXRNZXRob2Q6IHN0cmluZyB9O1xuXG50eXBlIEZ1bmN0aW9uTWFwID0ge1xuXHRba2V5OiBzdHJpbmddOiBGdW5jdGlvbjtcbn07XG50eXBlIERlZXBGdW5jdGlvbk1hcCA9IHtcblx0W2tleTogc3RyaW5nXTogRnVuY3Rpb25NYXA7XG59O1xudHlwZSBIb29rTWFwID0ge1xuXHRob29rZWRIYW5kbGVyczoge1xuXHRcdFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uW107XG5cdH07XG59O1xuXG4vLyBVc2UgdHdvIGFycmF5cyBhcyB3ZSBjYW5ub3QgaW5kZXggYSBtYXAgdGhyb3VnaCBhbiBhcmJpdHJhcnkgb2JqZWN0IGluc3RhbmNlXG5jb25zdCByZWdpc3RlcmVkSW5zdGFuY2VzOiBGdW5jdGlvbltdID0gW107XG5jb25zdCByZWdpc3RlcmVkSGFuZGxlcnM6IEhhbmRsZXJSZWdpc3RyYXRpb25bXVtdID0gW107XG5cbi8qKlxuICogTWFya3MgYSBjb250cm9sbGVyIGV4dGVuc2lvbiBtZXRob2QgdG8gYmUgaG9va2FibGUgYnkgZ2VuZXJhdGluZyBhZGRpdGlvbmFsIG1ldGhvZHMgdGhhdCBjYW4gYmUgdXNlZCB0byBhdHRhY2ggYW5kIGRldGFjaCBoYW5kbGVycyBhdCBydW50aW1lLlxuICpcbiAqIEBwYXJhbSBleGVjdXRpb25cbiAqIEByZXR1cm5zIEEgbWV0aG9kIGRlY29yYXRvclxuICovXG5leHBvcnQgZnVuY3Rpb24gaG9va2FibGUoZXhlY3V0aW9uOiBFeHRlbnNpb25PdmVycmlkZUV4ZWN1dGlvbik6IE1ldGhvZERlY29yYXRvciB7XG5cdHJldHVybiBmdW5jdGlvbiAodGFyZ2V0OiB1bmtub3duLCBwcm9wZXJ0eUtleTogc3RyaW5nIHwgc3ltYm9sLCBkZXNjcmlwdG9yOiBQcm9wZXJ0eURlc2NyaXB0b3IpIHtcblx0XHRjb25zdCBpbmRleGFibGVUYXJnZXQgPSB0YXJnZXQgYXMgRnVuY3Rpb25NYXA7XG5cblx0XHRpbmRleGFibGVUYXJnZXRbYGF0dGFjaCR7cHJvcGVydHlLZXkudG9TdHJpbmcoKX1gXSA9IGZ1bmN0aW9uIChmbjogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHRcdGNvbnN0IGNFeFRJbnN0YW5jZUhvb2tNYXAgPSB0aGlzIGFzIHVua25vd24gYXMgSG9va01hcDtcblx0XHRcdGlmICghY0V4VEluc3RhbmNlSG9va01hcC5ob29rZWRIYW5kbGVycykge1xuXHRcdFx0XHRjRXhUSW5zdGFuY2VIb29rTWFwLmhvb2tlZEhhbmRsZXJzID0ge307XG5cdFx0XHR9XG5cdFx0XHRpZiAoIWNFeFRJbnN0YW5jZUhvb2tNYXAuaG9va2VkSGFuZGxlcnNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHtcblx0XHRcdFx0Y0V4VEluc3RhbmNlSG9va01hcC5ob29rZWRIYW5kbGVyc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSA9IFtdO1xuXHRcdFx0fVxuXHRcdFx0Y0V4VEluc3RhbmNlSG9va01hcC5ob29rZWRIYW5kbGVyc1twcm9wZXJ0eUtleS50b1N0cmluZygpXS5wdXNoKGZuKTtcblx0XHR9O1xuXHRcdGluZGV4YWJsZVRhcmdldFtgZGV0YWNoJHtwcm9wZXJ0eUtleS50b1N0cmluZygpfWBdID0gZnVuY3Rpb24gKGZuOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdFx0Y29uc3QgY0V4VEluc3RhbmNlSG9va01hcCA9IHRoaXMgYXMgdW5rbm93biBhcyBIb29rTWFwO1xuXHRcdFx0Y29uc3QgaGFuZGxlcnMgPSBjRXhUSW5zdGFuY2VIb29rTWFwLmhvb2tlZEhhbmRsZXJzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldO1xuXHRcdFx0Y29uc3QgaW5kZXggPSBoYW5kbGVycy5pbmRleE9mKGZuKTtcblx0XHRcdGlmIChpbmRleCAhPT0gLTEpIHtcblx0XHRcdFx0aGFuZGxlcnMuc3BsaWNlKGluZGV4LCAxKTtcblx0XHRcdH1cblx0XHR9O1xuXG5cdFx0Y29uc3Qgb2xkVmFsdWUgPSBkZXNjcmlwdG9yLnZhbHVlO1xuXHRcdGlmIChleGVjdXRpb24gPT09IFwiQmVmb3JlQXN5bmNcIiB8fCBleGVjdXRpb24gPT09IFwiQWZ0ZXJBc3luY1wiKSB7XG5cdFx0XHRkZXNjcmlwdG9yLnZhbHVlID0gYXN5bmMgZnVuY3Rpb24gKC4uLmFyZ3M6IHVua25vd25bXSk6IFByb21pc2U8dW5rbm93bj4ge1xuXHRcdFx0XHRjb25zdCBjRXhUSW5zdGFuY2VIb29rTWFwID0gdGhpcyBhcyB1bmtub3duIGFzIEhvb2tNYXA7XG5cdFx0XHRcdGNvbnN0IGhhbmRsZXJzID0gKGNFeFRJbnN0YW5jZUhvb2tNYXA/Lmhvb2tlZEhhbmRsZXJzICYmIGNFeFRJbnN0YW5jZUhvb2tNYXA/Lmhvb2tlZEhhbmRsZXJzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldKSB8fCBbXTtcblx0XHRcdFx0bGV0IHJldHVyblZhbHVlOiB1bmtub3duO1xuXHRcdFx0XHRpZiAoZXhlY3V0aW9uID09PSBcIkFmdGVyQXN5bmNcIikge1xuXHRcdFx0XHRcdHJldHVyblZhbHVlID0gYXdhaXQgb2xkVmFsdWUuYmluZCh0aGlzKSguLi5hcmdzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaGFuZGxlcnMpIHtcblx0XHRcdFx0XHRhd2FpdCBoYW5kbGVyLmJpbmQodGhpcykoLi4uYXJncyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGV4ZWN1dGlvbiA9PT0gXCJCZWZvcmVBc3luY1wiKSB7XG5cdFx0XHRcdFx0cmV0dXJuVmFsdWUgPSBhd2FpdCBvbGRWYWx1ZS5iaW5kKHRoaXMpKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiByZXR1cm5WYWx1ZTtcblx0XHRcdH07XG5cdFx0fSBlbHNlIHtcblx0XHRcdGRlc2NyaXB0b3IudmFsdWUgPSBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogdW5rbm93biB7XG5cdFx0XHRcdGNvbnN0IGNFeFRJbnN0YW5jZUhvb2tNYXAgPSB0aGlzIGFzIHVua25vd24gYXMgSG9va01hcDtcblx0XHRcdFx0Y29uc3QgaGFuZGxlcnMgPSAoY0V4VEluc3RhbmNlSG9va01hcD8uaG9va2VkSGFuZGxlcnMgJiYgY0V4VEluc3RhbmNlSG9va01hcD8uaG9va2VkSGFuZGxlcnNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHx8IFtdO1xuXHRcdFx0XHRsZXQgcmV0dXJuVmFsdWU6IHVua25vd247XG5cdFx0XHRcdGlmIChleGVjdXRpb24gPT09IFwiQWZ0ZXJcIikge1xuXHRcdFx0XHRcdHJldHVyblZhbHVlID0gb2xkVmFsdWUuYmluZCh0aGlzKSguLi5hcmdzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRmb3IgKGNvbnN0IGhhbmRsZXIgb2YgaGFuZGxlcnMpIHtcblx0XHRcdFx0XHRoYW5kbGVyLmJpbmQodGhpcykoLi4uYXJncyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0aWYgKGV4ZWN1dGlvbiA9PT0gXCJCZWZvcmVcIikge1xuXHRcdFx0XHRcdHJldHVyblZhbHVlID0gb2xkVmFsdWUuYmluZCh0aGlzKSguLi5hcmdzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRyZXR1cm4gcmV0dXJuVmFsdWU7XG5cdFx0XHR9O1xuXHRcdH1cblx0fTtcbn1cblxuLyoqXG4gKiBDaGVja3Mgd2hldGhlciBhIG5ld1JlZ2lzdHJhdGlvbiBpcyBhbHJlYWR5IGluY2x1ZGVkIGluIHNvbWUgZXhpc3RpbmdSZWdpc3RyYXRpb25zIGJ5IGNvbXBhcmluZyBhbGwgcmVsZXZhbnQgYXR0cmlidXRlcy5cbiAqXG4gKiBAcGFyYW0gZXhpc3RpbmdSZWdpc3RyYXRpb25zXG4gKiBAcGFyYW0gbmV3UmVnaXN0cmF0aW9uXG4gKiBAcmV0dXJucyBSZXN1bHQgb2YgdGhlIGNoZWNrXG4gKi9cbmZ1bmN0aW9uIGlzQWxyZWFkeVJlZ2lzdGVyZWQoZXhpc3RpbmdSZWdpc3RyYXRpb25zOiBIYW5kbGVyUmVnaXN0cmF0aW9uW10sIG5ld1JlZ2lzdHJhdGlvbjogSGFuZGxlclJlZ2lzdHJhdGlvbik6IGJvb2xlYW4ge1xuXHRyZXR1cm4gISFleGlzdGluZ1JlZ2lzdHJhdGlvbnMuZmluZChcblx0XHQocikgPT4gci5uYW1lID09PSBuZXdSZWdpc3RyYXRpb24ubmFtZSAmJiByLm1ldGhvZCA9PT0gbmV3UmVnaXN0cmF0aW9uLm1ldGhvZCAmJiByLnRhcmdldE1ldGhvZCA9PT0gbmV3UmVnaXN0cmF0aW9uLnRhcmdldE1ldGhvZFxuXHQpO1xufVxuXG4vKipcbiAqIFJlZ2lzdGVycyBhIG1ldGhvZCBhcyBjb250cm9sbGVyIGV4dGVuc2lvbiBob29rIGhhbmRsZXIuXG4gKlxuICogQ3VycmVudGx5LCBvbmx5IG1ldGhvZHMgb2YgcnVudGltZSBidWlsZGluZyBibG9ja3MgYXJlIHN1cHBvcnRlZC5cbiAqXG4gKiBAcGFyYW0gbmFtZSBDb250cm9sbGVyIGV4dGVuc2lvbiB0byBob29rIGludG9cbiAqIEBwYXJhbSBtZXRob2QgTWV0aG9kIHRvIGhvb2sgaW50b1xuICogQHJldHVybnMgQSBtZXRob2QgZGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlcjxDRXh0TmFtZSBleHRlbmRzIGtleW9mIEhvb2thYmxlQ29udHJvbGxlckV4dGVuc2lvbnM+KFxuXHRuYW1lOiBDRXh0TmFtZSxcblx0bWV0aG9kOiBrZXlvZiBIb29rYWJsZUNvbnRyb2xsZXJFeHRlbnNpb25zW0NFeHROYW1lXVxuKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IHsgY29uc3RydWN0b3I6IEZ1bmN0aW9uIH0sIHByb3BlcnR5S2V5OiBzdHJpbmcpIHtcblx0XHRjb25zdCBuZXdSZWdpc3RyYXRpb24gPSB7IG5hbWUsIG1ldGhvZDogU3RyaW5nKG1ldGhvZCksIHRhcmdldE1ldGhvZDogcHJvcGVydHlLZXkgfTtcblx0XHRjb25zdCBpbmRleCA9IHJlZ2lzdGVyZWRJbnN0YW5jZXMuaW5kZXhPZih0YXJnZXQuY29uc3RydWN0b3IpO1xuXG5cdFx0Ly8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGlzIGV4YWN0IGhhbmRsZXIgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGFzIGhhbmRsZXJzIGFyZSByZWdpc3RlcmVkIHN0YXRpY2FsbHkgKG9uIHRoZSBjb25zdHJ1Y3Rvcilcblx0XHRpZiAoaW5kZXggIT09IC0xICYmICFpc0FscmVhZHlSZWdpc3RlcmVkKHJlZ2lzdGVyZWRIYW5kbGVyc1tpbmRleF0sIG5ld1JlZ2lzdHJhdGlvbikpIHtcblx0XHRcdHJlZ2lzdGVyZWRIYW5kbGVyc1tpbmRleF0ucHVzaChuZXdSZWdpc3RyYXRpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZWdpc3RlcmVkSW5zdGFuY2VzLnB1c2godGFyZ2V0LmNvbnN0cnVjdG9yKTtcblx0XHRcdHJlZ2lzdGVyZWRIYW5kbGVycy5wdXNoKFtuZXdSZWdpc3RyYXRpb25dKTtcblx0XHR9XG5cdH0gYXMgTWV0aG9kRGVjb3JhdG9yO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIGFsbCBjb250cm9sbGVyIGV4dGVuc2lvbiBoYW5kbGVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIHRhcmdldC5cbiAqXG4gKiBAcGFyYW0gdGFyZ2V0IFRhcmdldCBjbGFzcyB0byBpbml0aWFsaXplIHRoZSBoYW5kbGVycyBmb3JcbiAqIEBwYXJhbSB0YXJnZXQuY29uc3RydWN0b3JcbiAqIEBwYXJhbSBjb250cm9sbGVyIFBhZ2VDb250cm9sbGVyIGluc3RhbmNlIHRvIGdldCB0aGUgY29udHJvbGxlciBleHRlbnNpb25zIGluc3RhbmNlcyBmcm9tXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0Q29udHJvbGxlckV4dGVuc2lvbkhvb2tIYW5kbGVycyh0YXJnZXQ6IHsgY29uc3RydWN0b3I6IEZ1bmN0aW9uIH0sIGNvbnRyb2xsZXI6IENvbnRyb2xsZXIpOiB2b2lkIHtcblx0Y29uc3QgaW5kZXggPSByZWdpc3RlcmVkSW5zdGFuY2VzLmluZGV4T2YodGFyZ2V0LmNvbnN0cnVjdG9yKTtcblx0aWYgKGluZGV4ICE9PSAtMSkge1xuXHRcdGNvbnN0IGluZGV4YWJsZUNvbnRyb2xsZXIgPSBjb250cm9sbGVyIGFzIHVua25vd24gYXMgRGVlcEZ1bmN0aW9uTWFwO1xuXHRcdGNvbnN0IGluZGV4YWJsZVRhcmdldCA9IHRhcmdldCBhcyB1bmtub3duIGFzIEZ1bmN0aW9uTWFwO1xuXG5cdFx0Zm9yIChjb25zdCByZWdpc3RlcmVkSGFuZGxlciBvZiByZWdpc3RlcmVkSGFuZGxlcnNbaW5kZXhdKSB7XG5cdFx0XHRjb25zdCBoYW5kbGVyRnVuY3Rpb24gPSBpbmRleGFibGVUYXJnZXRbcmVnaXN0ZXJlZEhhbmRsZXIudGFyZ2V0TWV0aG9kXS5iaW5kKHRhcmdldCk7XG5cblx0XHRcdGluZGV4YWJsZUNvbnRyb2xsZXJbcmVnaXN0ZXJlZEhhbmRsZXIubmFtZV1bYGF0dGFjaCR7U3RyaW5nKHJlZ2lzdGVyZWRIYW5kbGVyLm1ldGhvZCl9YF0oaGFuZGxlckZ1bmN0aW9uKTtcblx0XHRcdGNvbnRyb2xsZXIuZ2V0VmlldygpPy5hdHRhY2hCZWZvcmVFeGl0KCgpID0+IHtcblx0XHRcdFx0aW5kZXhhYmxlQ29udHJvbGxlcltyZWdpc3RlcmVkSGFuZGxlci5uYW1lXVtgZGV0YWNoJHtTdHJpbmcocmVnaXN0ZXJlZEhhbmRsZXIubWV0aG9kKX1gXShoYW5kbGVyRnVuY3Rpb24pO1xuXHRcdFx0fSk7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB4bWxWaWV3UHJlcHJvY2Vzc29yKHNvdXJjZTogb2JqZWN0LCBfY2FsbGVyPzogdW5rbm93biwgX3NldHRpbmdzPzogb2JqZWN0KTogdm9pZCB7XG5cdGNvbnN0IHNvdXJjZVZpZXcgPSBzb3VyY2UgYXMgWE1MVmlldztcblx0Y29uc3QgY29udHJvbGxlciA9IHNvdXJjZVZpZXcuZ2V0Q29udHJvbGxlcigpIGFzIENvbnRyb2xsZXIgfCB1bmRlZmluZWQ7XG5cdGlmIChjb250cm9sbGVyKSB7XG5cdFx0Y29uc3QgbWFjcm9BUElDaGlsZCA9IHNvdXJjZVZpZXcuZmluZEFnZ3JlZ2F0ZWRPYmplY3RzKHRydWUsIChzKSA9PiBzLmlzQShcInNhcC5mZS5tYWNyb3MuTWFjcm9BUElcIikpO1xuXHRcdGZvciAoY29uc3QgbWFuYWdlZE9iamVjdCBvZiBtYWNyb0FQSUNoaWxkKSB7XG5cdFx0XHRpbml0Q29udHJvbGxlckV4dGVuc2lvbkhvb2tIYW5kbGVycyhtYW5hZ2VkT2JqZWN0LCBjb250cm9sbGVyKTtcblx0XHR9XG5cdH1cbn1cbiJdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7RUFJQTtBQUNBO0FBQ0E7RUFxQkE7RUFlQTtFQUNBLE1BQU1BLG1CQUErQixHQUFHLEVBQUU7RUFDMUMsTUFBTUMsa0JBQTJDLEdBQUcsRUFBRTs7RUFFdEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU0MsUUFBUUEsQ0FBQ0MsU0FBcUMsRUFBbUI7SUFDaEYsT0FBTyxVQUFVQyxNQUFlLEVBQUVDLFdBQTRCLEVBQUVDLFVBQThCLEVBQUU7TUFDL0YsTUFBTUMsZUFBZSxHQUFHSCxNQUFxQjtNQUU3Q0csZUFBZSxDQUFDLFNBQVNGLFdBQVcsQ0FBQ0csUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVUMsRUFBWSxFQUFRO1FBQ2xGLE1BQU1DLG1CQUFtQixHQUFHLElBQTBCO1FBQ3RELElBQUksQ0FBQ0EsbUJBQW1CLENBQUNDLGNBQWMsRUFBRTtVQUN4Q0QsbUJBQW1CLENBQUNDLGNBQWMsR0FBRyxDQUFDLENBQUM7UUFDeEM7UUFDQSxJQUFJLENBQUNELG1CQUFtQixDQUFDQyxjQUFjLENBQUNOLFdBQVcsQ0FBQ0csUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1VBQ2hFRSxtQkFBbUIsQ0FBQ0MsY0FBYyxDQUFDTixXQUFXLENBQUNHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFO1FBQ2hFO1FBQ0FFLG1CQUFtQixDQUFDQyxjQUFjLENBQUNOLFdBQVcsQ0FBQ0csUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDSSxJQUFJLENBQUNILEVBQUUsQ0FBQztNQUNwRSxDQUFDO01BQ0RGLGVBQWUsQ0FBQyxTQUFTRixXQUFXLENBQUNHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVVDLEVBQVksRUFBUTtRQUNsRixNQUFNQyxtQkFBbUIsR0FBRyxJQUEwQjtRQUN0RCxN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QzdELElBQUlwQixLQUFLLEtBQUssQ0FBQyxDQUFDLEVBQUU7TUFDakIsTUFBTXVCLG1CQUFtQixHQUFHRCxVQUF3QztNQUNwRSxNQUFNN0IsZUFBZSxHQUFHSCxNQUFnQztNQUV4RCxLQUFLLE1BQU1rQyxpQkFBaUIsSUFBSXJDLGtCQUFrQixDQUFDYSxLQUFLLENBQUMsRUFBRTtRQUFBLElBQUF5QixtQkFBQTtRQUMxRCxNQUFNQyxlQUFlLEdBQUdqQyxlQUFlLENBQUMrQixpQkFBaUIsQ0FBQ1AsWUFBWSxDQUFDLENBQUNYLElBQUksQ0FBQ2hCLE1BQU0sQ0FBQztRQUVwRmlDLG1CQUFtQixDQUFDQyxpQkFBaUIsQ0FBQ1QsSUFBSSxDQUFDLENBQUMsU0FBU0ksTUFBTSxDQUFDSyxpQkFBaUIsQ0FBQ1IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDVSxlQUFlLENBQUM7UUFDekcsQ0FBQUQsbUJBQUEsR0FBQUgsVUFBVSxDQUFDSyxPQUFPLENBQUMsQ0FBQyxjQUFBRixtQkFBQSx1QkFBcEJBLG1CQUFBLENBQXNCRyxnQkFBZ0IsQ0FBQyxNQUFNO1VBQzVDTCxtQkFBbUIsQ0FBQ0MsaUJBQWlCLENBQUNULElBQUksQ0FBQyxDQUFDLFNBQVNJLE1BQU0sQ0FBQ0ssaUJBQWlCLENBQUNSLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQ1UsZUFBZSxDQUFDO1FBQzFHLENBQUMsQ0FBQztNQUNIO0lBQ0Q7RUFDRDtFQUFDakIsUUFBQSxDQUFBWSxtQ0FBQSxHQUFBQSxtQ0FBQTtFQUVNLFNBQVNRLG1CQUFtQkEsQ0FBQ0MsTUFBYyxFQUFFQyxPQUFpQixFQUFFQyxTQUFrQixFQUFRO0lBQ2hHLE1BQU1DLFVBQVUsR0FBR0gsTUFBaUI7SUFDcEMsTUFBTVIsVUFBVSxHQUFHVyxVQUFVLENBQUNDLGFBQWEsQ0FBQyxDQUEyQjtJQUN2RSxJQUFJWixVQUFVLEVBQUU7TUFDZixNQUFNYSxhQUFhLEdBQUdGLFVBQVUsQ0FBQ0cscUJBQXFCLENBQUMsSUFBSSxFQUFHQyxDQUFDLElBQUtBLENBQUMsQ0FBQ0MsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7TUFDcEcsS0FBSyxNQUFNQyxhQUFhLElBQUlKLGFBQWEsRUFBRTtRQUMxQ2QsbUNBQW1DLENBQUNrQixhQUFhLEVBQUVqQixVQUFVLENBQUM7TUFDL0Q7SUFDRDtFQUNEO0VBQUNiLFFBQUEsQ0FBQW9CLG1CQUFBLEdBQUFBLG1CQUFBO0VBQUEsT0FBQXBCLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
154
|
+
//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJuYW1lcyI6WyJyZWdpc3RlcmVkSW5zdGFuY2VzIiwicmVnaXN0ZXJlZEhhbmRsZXJzIiwiaG9va2FibGUiLCJleGVjdXRpb24iLCJ0YXJnZXQiLCJwcm9wZXJ0eUtleSIsImRlc2NyaXB0b3IiLCJpbmRleGFibGVUYXJnZXQiLCJ0b1N0cmluZyIsImZuIiwiY0V4VEluc3RhbmNlSG9va01hcCIsImhvb2tlZEhhbmRsZXJzIiwicHVzaCIsImhhbmRsZXJzIiwiaW5kZXgiLCJpbmRleE9mIiwic3BsaWNlIiwib2xkVmFsdWUiLCJ2YWx1ZSIsInJldHVyblZhbHVlIiwiYmluZCIsImFyZ3VtZW50cyIsImhhbmRsZXIiLCJfZXhwb3J0cyIsImlzQWxyZWFkeVJlZ2lzdGVyZWQiLCJleGlzdGluZ1JlZ2lzdHJhdGlvbnMiLCJuZXdSZWdpc3RyYXRpb24iLCJmaW5kIiwiciIsIm5hbWUiLCJtZXRob2QiLCJ0YXJnZXRNZXRob2QiLCJjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlciIsIlN0cmluZyIsImNvbnN0cnVjdG9yIiwiaW5pdENvbnRyb2xsZXJFeHRlbnNpb25Ib29rSGFuZGxlcnMiLCJjb250cm9sbGVyIiwiaW5kZXhhYmxlQ29udHJvbGxlciIsInJlZ2lzdGVyZWRIYW5kbGVyIiwiX2NvbnRyb2xsZXIkZ2V0VmlldyIsImhhbmRsZXJGdW5jdGlvbiIsImdldFZpZXciLCJhdHRhY2hCZWZvcmVFeGl0IiwieG1sVmlld1ByZXByb2Nlc3NvciIsInNvdXJjZSIsIl9jYWxsZXIiLCJfc2V0dGluZ3MiLCJzb3VyY2VWaWV3IiwiZ2V0Q29udHJvbGxlciIsIm1hY3JvQVBJQ2hpbGQiLCJmaW5kQWdncmVnYXRlZE9iamVjdHMiLCJzIiwiaXNBIiwibWFuYWdlZE9iamVjdCJdLCJzb3VyY2VSb290IjoiLiIsInNvdXJjZXMiOlsiSG9va1N1cHBvcnQudHMiXSwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHR5cGUgeyBFeHRlbnNpb25PdmVycmlkZUV4ZWN1dGlvbiB9IGZyb20gXCJzYXAvZmUvYmFzZS9DbGFzc1N1cHBvcnRcIjtcbmltcG9ydCB0eXBlIENvbnRyb2xsZXIgZnJvbSBcInNhcC91aS9jb3JlL212Yy9Db250cm9sbGVyXCI7XG5pbXBvcnQgdHlwZSBYTUxWaWV3IGZyb20gXCJzYXAvdWkvY29yZS9tdmMvWE1MVmlld1wiO1xuXG4vKipcbiAqIFRoaXMgdHlwZSBpcyB0byBiZSBleHRlbmRlZCB3aXRoIGFsbCBjb250cm9sbGVyIGV4dGVuc2lvbnMgYW5kIG1ldGhvZHMgdGhhdCBhcmUgaG9va2FibGUuXG4gKi9cbnR5cGUgSG9va2FibGVDb250cm9sbGVyRXh0ZW5zaW9ucyA9IHtcblx0ZWRpdEZsb3c6IHtcblx0XHRvbkFmdGVyU2F2ZTogdHJ1ZTtcblx0XHRvbkJlZm9yZVNhdmU6IHRydWU7XG5cdH07XG5cdGNvbGxhYm9yYXRpb25NYW5hZ2VyOiB7XG5cdFx0Y29sbGVjdEF2YWlsYWJsZUNhcmRzOiB0cnVlO1xuXHR9O1xuXHRwYWdpbmF0b3I6IHtcblx0XHRpbml0aWFsaXplOiB0cnVlO1xuXHR9O1xuXHRyb3V0aW5nOiB7XG5cdFx0b25BZnRlckJpbmRpbmc6IHRydWU7XG5cdH07XG59O1xuXG50eXBlIEhhbmRsZXJDb25maWd1cmF0aW9uPENFeHROYW1lIGV4dGVuZHMga2V5b2YgSG9va2FibGVDb250cm9sbGVyRXh0ZW5zaW9ucz4gPSB7XG5cdG5hbWU6IENFeHROYW1lO1xuXHRtZXRob2Q6IGtleW9mIEhvb2thYmxlQ29udHJvbGxlckV4dGVuc2lvbnNbQ0V4dE5hbWVdO1xufTtcbi8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBAdHlwZXNjcmlwdC1lc2xpbnQvbm8tZXhwbGljaXQtYW55XG50eXBlIEhhbmRsZXJSZWdpc3RyYXRpb24gPSBIYW5kbGVyQ29uZmlndXJhdGlvbjxhbnk+ICYgeyB0YXJnZXRNZXRob2Q6IHN0cmluZyB9O1xuXG50eXBlIEZ1bmN0aW9uTWFwID0ge1xuXHRba2V5OiBzdHJpbmddOiBGdW5jdGlvbjtcbn07XG50eXBlIERlZXBGdW5jdGlvbk1hcCA9IHtcblx0W2tleTogc3RyaW5nXTogRnVuY3Rpb25NYXA7XG59O1xudHlwZSBIb29rTWFwID0ge1xuXHRob29rZWRIYW5kbGVyczoge1xuXHRcdFtrZXk6IHN0cmluZ106IEZ1bmN0aW9uW107XG5cdH07XG59O1xuXG4vLyBVc2UgdHdvIGFycmF5cyBhcyB3ZSBjYW5ub3QgaW5kZXggYSBtYXAgdGhyb3VnaCBhbiBhcmJpdHJhcnkgb2JqZWN0IGluc3RhbmNlXG5jb25zdCByZWdpc3RlcmVkSW5zdGFuY2VzOiBGdW5jdGlvbltdID0gW107XG5jb25zdCByZWdpc3RlcmVkSGFuZGxlcnM6IEhhbmRsZXJSZWdpc3RyYXRpb25bXVtdID0gW107XG5cbi8qKlxuICogTWFya3MgYSBjb250cm9sbGVyIGV4dGVuc2lvbiBtZXRob2QgdG8gYmUgaG9va2FibGUgYnkgZ2VuZXJhdGluZyBhZGRpdGlvbmFsIG1ldGhvZHMgdGhhdCBjYW4gYmUgdXNlZCB0byBhdHRhY2ggYW5kIGRldGFjaCBoYW5kbGVycyBhdCBydW50aW1lLlxuICogQHBhcmFtIGV4ZWN1dGlvblxuICogQHJldHVybnMgQSBtZXRob2QgZGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBob29rYWJsZShleGVjdXRpb246IEV4dGVuc2lvbk92ZXJyaWRlRXhlY3V0aW9uKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IHVua25vd24sIHByb3BlcnR5S2V5OiBzdHJpbmcgfCBzeW1ib2wsIGRlc2NyaXB0b3I6IFByb3BlcnR5RGVzY3JpcHRvcikge1xuXHRcdGNvbnN0IGluZGV4YWJsZVRhcmdldCA9IHRhcmdldCBhcyBGdW5jdGlvbk1hcDtcblxuXHRcdGluZGV4YWJsZVRhcmdldFtgYXR0YWNoJHtwcm9wZXJ0eUtleS50b1N0cmluZygpfWBdID0gZnVuY3Rpb24gKGZuOiBGdW5jdGlvbik6IHZvaWQge1xuXHRcdFx0Y29uc3QgY0V4VEluc3RhbmNlSG9va01hcCA9IHRoaXMgYXMgdW5rbm93biBhcyBIb29rTWFwO1xuXHRcdFx0aWYgKCFjRXhUSW5zdGFuY2VIb29rTWFwLmhvb2tlZEhhbmRsZXJzKSB7XG5cdFx0XHRcdGNFeFRJbnN0YW5jZUhvb2tNYXAuaG9va2VkSGFuZGxlcnMgPSB7fTtcblx0XHRcdH1cblx0XHRcdGlmICghY0V4VEluc3RhbmNlSG9va01hcC5ob29rZWRIYW5kbGVyc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkge1xuXHRcdFx0XHRjRXhUSW5zdGFuY2VIb29rTWFwLmhvb2tlZEhhbmRsZXJzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldID0gW107XG5cdFx0XHR9XG5cdFx0XHRjRXhUSW5zdGFuY2VIb29rTWFwLmhvb2tlZEhhbmRsZXJzW3Byb3BlcnR5S2V5LnRvU3RyaW5nKCldLnB1c2goZm4pO1xuXHRcdH07XG5cdFx0aW5kZXhhYmxlVGFyZ2V0W2BkZXRhY2gke3Byb3BlcnR5S2V5LnRvU3RyaW5nKCl9YF0gPSBmdW5jdGlvbiAoZm46IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0XHRjb25zdCBjRXhUSW5zdGFuY2VIb29rTWFwID0gdGhpcyBhcyB1bmtub3duIGFzIEhvb2tNYXA7XG5cdFx0XHRjb25zdCBoYW5kbGVycyA9IGNFeFRJbnN0YW5jZUhvb2tNYXAuaG9va2VkSGFuZGxlcnNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV07XG5cdFx0XHRjb25zdCBpbmRleCA9IGhhbmRsZXJzLmluZGV4T2YoZm4pO1xuXHRcdFx0aWYgKGluZGV4ICE9PSAtMSkge1xuXHRcdFx0XHRoYW5kbGVycy5zcGxpY2UoaW5kZXgsIDEpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHRjb25zdCBvbGRWYWx1ZSA9IGRlc2NyaXB0b3IudmFsdWU7XG5cdFx0aWYgKGV4ZWN1dGlvbiA9PT0gXCJCZWZvcmVBc3luY1wiIHx8IGV4ZWN1dGlvbiA9PT0gXCJBZnRlckFzeW5jXCIpIHtcblx0XHRcdGRlc2NyaXB0b3IudmFsdWUgPSBhc3luYyBmdW5jdGlvbiAoLi4uYXJnczogdW5rbm93bltdKTogUHJvbWlzZTx1bmtub3duPiB7XG5cdFx0XHRcdGNvbnN0IGNFeFRJbnN0YW5jZUhvb2tNYXAgPSB0aGlzIGFzIHVua25vd24gYXMgSG9va01hcDtcblx0XHRcdFx0Y29uc3QgaGFuZGxlcnMgPSAoY0V4VEluc3RhbmNlSG9va01hcD8uaG9va2VkSGFuZGxlcnMgJiYgY0V4VEluc3RhbmNlSG9va01hcD8uaG9va2VkSGFuZGxlcnNbcHJvcGVydHlLZXkudG9TdHJpbmcoKV0pIHx8IFtdO1xuXHRcdFx0XHRsZXQgcmV0dXJuVmFsdWU6IHVua25vd247XG5cdFx0XHRcdGlmIChleGVjdXRpb24gPT09IFwiQWZ0ZXJBc3luY1wiKSB7XG5cdFx0XHRcdFx0cmV0dXJuVmFsdWUgPSBhd2FpdCBvbGRWYWx1ZS5iaW5kKHRoaXMpKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoY29uc3QgaGFuZGxlciBvZiBoYW5kbGVycykge1xuXHRcdFx0XHRcdGF3YWl0IGhhbmRsZXIuYmluZCh0aGlzKSguLi5hcmdzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZXhlY3V0aW9uID09PSBcIkJlZm9yZUFzeW5jXCIpIHtcblx0XHRcdFx0XHRyZXR1cm5WYWx1ZSA9IGF3YWl0IG9sZFZhbHVlLmJpbmQodGhpcykoLi4uYXJncyk7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmV0dXJuIHJldHVyblZhbHVlO1xuXHRcdFx0fTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZGVzY3JpcHRvci52YWx1ZSA9IGZ1bmN0aW9uICguLi5hcmdzOiB1bmtub3duW10pOiB1bmtub3duIHtcblx0XHRcdFx0Y29uc3QgY0V4VEluc3RhbmNlSG9va01hcCA9IHRoaXMgYXMgdW5rbm93biBhcyBIb29rTWFwO1xuXHRcdFx0XHRjb25zdCBoYW5kbGVycyA9IChjRXhUSW5zdGFuY2VIb29rTWFwPy5ob29rZWRIYW5kbGVycyAmJiBjRXhUSW5zdGFuY2VIb29rTWFwPy5ob29rZWRIYW5kbGVyc1twcm9wZXJ0eUtleS50b1N0cmluZygpXSkgfHwgW107XG5cdFx0XHRcdGxldCByZXR1cm5WYWx1ZTogdW5rbm93bjtcblx0XHRcdFx0aWYgKGV4ZWN1dGlvbiA9PT0gXCJBZnRlclwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuVmFsdWUgPSBvbGRWYWx1ZS5iaW5kKHRoaXMpKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdGZvciAoY29uc3QgaGFuZGxlciBvZiBoYW5kbGVycykge1xuXHRcdFx0XHRcdGhhbmRsZXIuYmluZCh0aGlzKSguLi5hcmdzKTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZXhlY3V0aW9uID09PSBcIkJlZm9yZVwiKSB7XG5cdFx0XHRcdFx0cmV0dXJuVmFsdWUgPSBvbGRWYWx1ZS5iaW5kKHRoaXMpKC4uLmFyZ3MpO1xuXHRcdFx0XHR9XG5cdFx0XHRcdHJldHVybiByZXR1cm5WYWx1ZTtcblx0XHRcdH07XG5cdFx0fVxuXHR9O1xufVxuXG4vKipcbiAqIENoZWNrcyB3aGV0aGVyIGEgbmV3UmVnaXN0cmF0aW9uIGlzIGFscmVhZHkgaW5jbHVkZWQgaW4gc29tZSBleGlzdGluZ1JlZ2lzdHJhdGlvbnMgYnkgY29tcGFyaW5nIGFsbCByZWxldmFudCBhdHRyaWJ1dGVzLlxuICogQHBhcmFtIGV4aXN0aW5nUmVnaXN0cmF0aW9uc1xuICogQHBhcmFtIG5ld1JlZ2lzdHJhdGlvblxuICogQHJldHVybnMgUmVzdWx0IG9mIHRoZSBjaGVja1xuICovXG5mdW5jdGlvbiBpc0FscmVhZHlSZWdpc3RlcmVkKGV4aXN0aW5nUmVnaXN0cmF0aW9uczogSGFuZGxlclJlZ2lzdHJhdGlvbltdLCBuZXdSZWdpc3RyYXRpb246IEhhbmRsZXJSZWdpc3RyYXRpb24pOiBib29sZWFuIHtcblx0cmV0dXJuICEhZXhpc3RpbmdSZWdpc3RyYXRpb25zLmZpbmQoXG5cdFx0KHIpID0+IHIubmFtZSA9PT0gbmV3UmVnaXN0cmF0aW9uLm5hbWUgJiYgci5tZXRob2QgPT09IG5ld1JlZ2lzdHJhdGlvbi5tZXRob2QgJiYgci50YXJnZXRNZXRob2QgPT09IG5ld1JlZ2lzdHJhdGlvbi50YXJnZXRNZXRob2Rcblx0KTtcbn1cblxuLyoqXG4gKiBSZWdpc3RlcnMgYSBtZXRob2QgYXMgY29udHJvbGxlciBleHRlbnNpb24gaG9vayBoYW5kbGVyLlxuICpcbiAqIEN1cnJlbnRseSwgb25seSBtZXRob2RzIG9mIHJ1bnRpbWUgYnVpbGRpbmcgYmxvY2tzIGFyZSBzdXBwb3J0ZWQuXG4gKiBAcGFyYW0gbmFtZSBDb250cm9sbGVyIGV4dGVuc2lvbiB0byBob29rIGludG9cbiAqIEBwYXJhbSBtZXRob2QgTWV0aG9kIHRvIGhvb2sgaW50b1xuICogQHJldHVybnMgQSBtZXRob2QgZGVjb3JhdG9yXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjb250cm9sbGVyRXh0ZW5zaW9uSGFuZGxlcjxDRXh0TmFtZSBleHRlbmRzIGtleW9mIEhvb2thYmxlQ29udHJvbGxlckV4dGVuc2lvbnM+KFxuXHRuYW1lOiBDRXh0TmFtZSxcblx0bWV0aG9kOiBrZXlvZiBIb29rYWJsZUNvbnRyb2xsZXJFeHRlbnNpb25zW0NFeHROYW1lXVxuKTogTWV0aG9kRGVjb3JhdG9yIHtcblx0cmV0dXJuIGZ1bmN0aW9uICh0YXJnZXQ6IHsgY29uc3RydWN0b3I6IEZ1bmN0aW9uIH0sIHByb3BlcnR5S2V5OiBzdHJpbmcpIHtcblx0XHRjb25zdCBuZXdSZWdpc3RyYXRpb24gPSB7IG5hbWUsIG1ldGhvZDogU3RyaW5nKG1ldGhvZCksIHRhcmdldE1ldGhvZDogcHJvcGVydHlLZXkgfTtcblx0XHRjb25zdCBpbmRleCA9IHJlZ2lzdGVyZWRJbnN0YW5jZXMuaW5kZXhPZih0YXJnZXQuY29uc3RydWN0b3IpO1xuXG5cdFx0Ly8gV2UgbmVlZCB0byBjaGVjayBpZiB0aGlzIGV4YWN0IGhhbmRsZXIgaXMgYWxyZWFkeSByZWdpc3RlcmVkIGFzIGhhbmRsZXJzIGFyZSByZWdpc3RlcmVkIHN0YXRpY2FsbHkgKG9uIHRoZSBjb25zdHJ1Y3Rvcilcblx0XHRpZiAoaW5kZXggIT09IC0xICYmICFpc0FscmVhZHlSZWdpc3RlcmVkKHJlZ2lzdGVyZWRIYW5kbGVyc1tpbmRleF0sIG5ld1JlZ2lzdHJhdGlvbikpIHtcblx0XHRcdHJlZ2lzdGVyZWRIYW5kbGVyc1tpbmRleF0ucHVzaChuZXdSZWdpc3RyYXRpb24pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRyZWdpc3RlcmVkSW5zdGFuY2VzLnB1c2godGFyZ2V0LmNvbnN0cnVjdG9yKTtcblx0XHRcdHJlZ2lzdGVyZWRIYW5kbGVycy5wdXNoKFtuZXdSZWdpc3RyYXRpb25dKTtcblx0XHR9XG5cdH0gYXMgTWV0aG9kRGVjb3JhdG9yO1xufVxuXG4vKipcbiAqIEluaXRpYWxpemVzIGFsbCBjb250cm9sbGVyIGV4dGVuc2lvbiBoYW5kbGVycyByZWdpc3RlcmVkIGZvciBhIGdpdmVuIHRhcmdldC5cbiAqIEBwYXJhbSB0YXJnZXQgVGFyZ2V0IGNsYXNzIHRvIGluaXRpYWxpemUgdGhlIGhhbmRsZXJzIGZvclxuICogQHBhcmFtIHRhcmdldC5jb25zdHJ1Y3RvclxuICogQHBhcmFtIGNvbnRyb2xsZXIgUGFnZUNvbnRyb2xsZXIgaW5zdGFuY2UgdG8gZ2V0IHRoZSBjb250cm9sbGVyIGV4dGVuc2lvbnMgaW5zdGFuY2VzIGZyb21cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGluaXRDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzKHRhcmdldDogeyBjb25zdHJ1Y3RvcjogRnVuY3Rpb24gfSwgY29udHJvbGxlcjogQ29udHJvbGxlcik6IHZvaWQge1xuXHRjb25zdCBpbmRleCA9IHJlZ2lzdGVyZWRJbnN0YW5jZXMuaW5kZXhPZih0YXJnZXQuY29uc3RydWN0b3IpO1xuXHRpZiAoaW5kZXggIT09IC0xKSB7XG5cdFx0Y29uc3QgaW5kZXhhYmxlQ29udHJvbGxlciA9IGNvbnRyb2xsZXIgYXMgdW5rbm93biBhcyBEZWVwRnVuY3Rpb25NYXA7XG5cdFx0Y29uc3QgaW5kZXhhYmxlVGFyZ2V0ID0gdGFyZ2V0IGFzIHVua25vd24gYXMgRnVuY3Rpb25NYXA7XG5cblx0XHRmb3IgKGNvbnN0IHJlZ2lzdGVyZWRIYW5kbGVyIG9mIHJlZ2lzdGVyZWRIYW5kbGVyc1tpbmRleF0pIHtcblx0XHRcdGNvbnN0IGhhbmRsZXJGdW5jdGlvbiA9IGluZGV4YWJsZVRhcmdldFtyZWdpc3RlcmVkSGFuZGxlci50YXJnZXRNZXRob2RdLmJpbmQodGFyZ2V0KTtcblxuXHRcdFx0aW5kZXhhYmxlQ29udHJvbGxlcltyZWdpc3RlcmVkSGFuZGxlci5uYW1lXVtgYXR0YWNoJHtTdHJpbmcocmVnaXN0ZXJlZEhhbmRsZXIubWV0aG9kKX1gXShoYW5kbGVyRnVuY3Rpb24pO1xuXHRcdFx0Y29udHJvbGxlci5nZXRWaWV3KCk/LmF0dGFjaEJlZm9yZUV4aXQoKCkgPT4ge1xuXHRcdFx0XHRpbmRleGFibGVDb250cm9sbGVyW3JlZ2lzdGVyZWRIYW5kbGVyLm5hbWVdW2BkZXRhY2gke1N0cmluZyhyZWdpc3RlcmVkSGFuZGxlci5tZXRob2QpfWBdKGhhbmRsZXJGdW5jdGlvbik7XG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGZ1bmN0aW9uIHhtbFZpZXdQcmVwcm9jZXNzb3Ioc291cmNlOiBvYmplY3QsIF9jYWxsZXI/OiB1bmtub3duLCBfc2V0dGluZ3M/OiBvYmplY3QpOiB2b2lkIHtcblx0Y29uc3Qgc291cmNlVmlldyA9IHNvdXJjZSBhcyBYTUxWaWV3O1xuXHRjb25zdCBjb250cm9sbGVyID0gc291cmNlVmlldy5nZXRDb250cm9sbGVyKCkgYXMgQ29udHJvbGxlciB8IHVuZGVmaW5lZDtcblx0aWYgKGNvbnRyb2xsZXIpIHtcblx0XHRjb25zdCBtYWNyb0FQSUNoaWxkID0gc291cmNlVmlldy5maW5kQWdncmVnYXRlZE9iamVjdHModHJ1ZSwgKHMpID0+IHMuaXNBKFwic2FwLmZlLm1hY3Jvcy5NYWNyb0FQSVwiKSk7XG5cdFx0Zm9yIChjb25zdCBtYW5hZ2VkT2JqZWN0IG9mIG1hY3JvQVBJQ2hpbGQpIHtcblx0XHRcdGluaXRDb250cm9sbGVyRXh0ZW5zaW9uSG9va0hhbmRsZXJzKG1hbmFnZWRPYmplY3QsIGNvbnRyb2xsZXIpO1xuXHRcdH1cblx0fVxufVxuIl0sIm1hcHBpbmdzIjoiOzs7Ozs7OztFQUlBO0FBQ0E7QUFDQTtFQXFCQTtFQWVBO0VBQ0EsTUFBTUEsbUJBQStCLEdBQUcsRUFBRTtFQUMxQyxNQUFNQyxrQkFBMkMsR0FBRyxFQUFFOztFQUV0RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0VBQ08sU0FBU0MsUUFBUUEsQ0FBQ0MsU0FBcUMsRUFBbUI7SUFDaEYsT0FBTyxVQUFVQyxNQUFlLEVBQUVDLFdBQTRCLEVBQUVDLFVBQThCLEVBQUU7TUFDL0YsTUFBTUMsZUFBZSxHQUFHSCxNQUFxQjtNQUU3Q0csZUFBZSxDQUFDLFNBQVNGLFdBQVcsQ0FBQ0csUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsVUFBVUMsRUFBWSxFQUFRO1FBQ2xGLE1BQU1DLG1CQUFtQixHQUFHLElBQTBCO1FBQ3RELElBQUksQ0FBQ0EsbUJBQW1CLENBQUNDLGNBQWMsRUFBRTtVQUN4Q0QsbUJBQW1CLENBQUNDLGNBQWMsR0FBRyxDQUFDLENBQUM7UUFDeEM7UUFDQSxJQUFJLENBQUNELG1CQUFtQixDQUFDQyxjQUFjLENBQUNOLFdBQVcsQ0FBQ0csUUFBUSxDQUFDLENBQUMsQ0FBQyxFQUFFO1VBQ2hFRSxtQkFBbUIsQ0FBQ0MsY0FBYyxDQUFDTixXQUFXLENBQUNHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFO1FBQ2hFO1FBQ0FFLG1CQUFtQixDQUFDQyxjQUFjLENBQUNOLFdBQVcsQ0FBQ0csUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDSSxJQUFJLENBQUNILEVBQUUsQ0FBQztNQUNwRSxDQUFDO01BQ0RGLGVBQWUsQ0FBQyxTQUFTRixXQUFXLENBQUNHLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFVBQVVDLEVBQVksRUFBUTtRQUNsRixNQUFNQyxtQkFBbUIsR0FBRyxJQUEwQjtRQUN0RCxNQUFNRyxRQUFRLEdBQUdILG1CQUFt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TUFDakIsTUFBTXVCLG1CQUFtQixHQUFHRCxVQUF3QztNQUNwRSxNQUFNN0IsZUFBZSxHQUFHSCxNQUFnQztNQUV4RCxLQUFLLE1BQU1rQyxpQkFBaUIsSUFBSXJDLGtCQUFrQixDQUFDYSxLQUFLLENBQUMsRUFBRTtRQUFBLElBQUF5QixtQkFBQTtRQUMxRCxNQUFNQyxlQUFlLEdBQUdqQyxlQUFlLENBQUMrQixpQkFBaUIsQ0FBQ1AsWUFBWSxDQUFDLENBQUNYLElBQUksQ0FBQ2hCLE1BQU0sQ0FBQztRQUVwRmlDLG1CQUFtQixDQUFDQyxpQkFBaUIsQ0FBQ1QsSUFBSSxDQUFDLENBQUMsU0FBU0ksTUFBTSxDQUFDSyxpQkFBaUIsQ0FBQ1IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDVSxlQUFlLENBQUM7UUFDekcsQ0FBQUQsbUJBQUEsR0FBQUgsVUFBVSxDQUFDSyxPQUFPLENBQUMsQ0FBQyxjQUFBRixtQkFBQSx1QkFBcEJBLG1CQUFBLENBQXNCRyxnQkFBZ0IsQ0FBQyxNQUFNO1VBQzVDTCxtQkFBbUIsQ0FBQ0MsaUJBQWlCLENBQUNULElBQUksQ0FBQyxDQUFDLFNBQVNJLE1BQU0sQ0FBQ0ssaUJBQWlCLENBQUNSLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQ1UsZUFBZSxDQUFDO1FBQzFHLENBQUMsQ0FBQztNQUNIO0lBQ0Q7RUFDRDtFQUFDakIsUUFBQSxDQUFBWSxtQ0FBQSxHQUFBQSxtQ0FBQTtFQUVNLFNBQVNRLG1CQUFtQkEsQ0FBQ0MsTUFBYyxFQUFFQyxPQUFpQixFQUFFQyxTQUFrQixFQUFRO0lBQ2hHLE1BQU1DLFVBQVUsR0FBR0gsTUFBaUI7SUFDcEMsTUFBTVIsVUFBVSxHQUFHVyxVQUFVLENBQUNDLGFBQWEsQ0FBQyxDQUEyQjtJQUN2RSxJQUFJWixVQUFVLEVBQUU7TUFDZixNQUFNYSxhQUFhLEdBQUdGLFVBQVUsQ0FBQ0cscUJBQXFCLENBQUMsSUFBSSxFQUFHQyxDQUFDLElBQUtBLENBQUMsQ0FBQ0MsR0FBRyxDQUFDLHdCQUF3QixDQUFDLENBQUM7TUFDcEcsS0FBSyxNQUFNQyxhQUFhLElBQUlKLGFBQWEsRUFBRTtRQUMxQ2QsbUNBQW1DLENBQUNrQixhQUFhLEVBQUVqQixVQUFVLENBQUM7TUFDL0Q7SUFDRDtFQUNEO0VBQUNiLFFBQUEsQ0FBQW9CLG1CQUFBLEdBQUFBLG1CQUFBO0VBQUEsT0FBQXBCLFFBQUE7QUFBQSIsImlnbm9yZUxpc3QiOltdfQ==
|
|
@@ -46,7 +46,6 @@ const registeredHandlers: HandlerRegistration[][] = [];
|
|
|
46
46
|
|
|
47
47
|
/**
|
|
48
48
|
* Marks a controller extension method to be hookable by generating additional methods that can be used to attach and detach handlers at runtime.
|
|
49
|
-
*
|
|
50
49
|
* @param execution
|
|
51
50
|
* @returns A method decorator
|
|
52
51
|
*/
|
|
@@ -112,7 +111,6 @@ export function hookable(execution: ExtensionOverrideExecution): MethodDecorator
|
|
|
112
111
|
|
|
113
112
|
/**
|
|
114
113
|
* Checks whether a newRegistration is already included in some existingRegistrations by comparing all relevant attributes.
|
|
115
|
-
*
|
|
116
114
|
* @param existingRegistrations
|
|
117
115
|
* @param newRegistration
|
|
118
116
|
* @returns Result of the check
|
|
@@ -127,7 +125,6 @@ function isAlreadyRegistered(existingRegistrations: HandlerRegistration[], newRe
|
|
|
127
125
|
* Registers a method as controller extension hook handler.
|
|
128
126
|
*
|
|
129
127
|
* Currently, only methods of runtime building blocks are supported.
|
|
130
|
-
*
|
|
131
128
|
* @param name Controller extension to hook into
|
|
132
129
|
* @param method Method to hook into
|
|
133
130
|
* @returns A method decorator
|
|
@@ -152,7 +149,6 @@ export function controllerExtensionHandler<CExtName extends keyof HookableContro
|
|
|
152
149
|
|
|
153
150
|
/**
|
|
154
151
|
* Initializes all controller extension handlers registered for a given target.
|
|
155
|
-
*
|
|
156
152
|
* @param target Target class to initialize the handlers for
|
|
157
153
|
* @param target.constructor
|
|
158
154
|
* @param controller PageController instance to get the controller extensions instances from
|