@angular/core 8.0.0 → 8.1.0-beta.0
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/bundles/core-testing.umd.js +35 -9
- package/bundles/core-testing.umd.js.map +1 -1
- package/bundles/core-testing.umd.min.js +10 -10
- package/bundles/core-testing.umd.min.js.map +1 -1
- package/bundles/core.umd.js +11356 -9352
- package/bundles/core.umd.js.map +1 -1
- package/bundles/core.umd.min.js +201 -139
- package/bundles/core.umd.min.js.map +1 -1
- package/core.d.ts +1302 -404
- package/core.metadata.json +1 -1
- package/esm2015/core.js +2 -3
- package/esm2015/index.js +2 -2
- package/esm2015/public_api.js +2 -2
- package/esm2015/src/application_ref.js +7 -1
- package/esm2015/src/codegen_private_exports.js +2 -2
- package/esm2015/src/compiler/compiler_facade_interface.js +1 -1
- package/esm2015/src/core.js +4 -4
- package/esm2015/src/core_private_export.js +3 -1
- package/esm2015/src/core_render3_private_export.js +5 -3
- package/esm2015/src/debug/debug_node.js +4 -4
- package/esm2015/src/di/index.js +3 -3
- package/esm2015/src/di/injector.js +24 -96
- package/esm2015/src/di/injector_compatibility.js +103 -6
- package/esm2015/src/di/interface/defs.js +24 -3
- package/esm2015/src/di/r3_injector.js +82 -49
- package/esm2015/src/di/reflective_injector.js +3 -2
- package/esm2015/src/di.js +1 -1
- package/esm2015/src/i18n/locale_data.js +61 -0
- package/esm2015/src/i18n/locale_data_api.js +53 -0
- package/esm2015/src/i18n/locale_en.js +51 -0
- package/esm2015/src/i18n/localization.js +37 -0
- package/esm2015/src/linker/ng_module_factory_loader.js +4 -52
- package/esm2015/src/linker/ng_module_factory_registration.js +83 -0
- package/esm2015/src/metadata/ng_module.js +6 -1
- package/esm2015/src/metadata/resource_loading.js +2 -2
- package/esm2015/src/reflection/reflection_capabilities.js +14 -3
- package/esm2015/src/render3/assert.js +3 -2
- package/esm2015/src/render3/component.js +11 -5
- package/esm2015/src/render3/debug.js +23 -15
- package/esm2015/src/render3/definition.js +12 -2
- package/esm2015/src/render3/errors.js +29 -1
- package/esm2015/src/render3/features/inherit_definition_feature.js +51 -37
- package/esm2015/src/render3/fields.js +3 -1
- package/esm2015/src/render3/i18n.js +76 -465
- package/esm2015/src/render3/index.js +3 -3
- package/esm2015/src/render3/instructions/all.js +9 -4
- package/esm2015/src/render3/instructions/attribute.js +28 -0
- package/esm2015/src/render3/instructions/attribute_interpolation.js +376 -0
- package/esm2015/src/render3/instructions/container.js +17 -16
- package/esm2015/src/render3/instructions/element.js +57 -35
- package/esm2015/src/render3/instructions/element_container.js +9 -8
- package/esm2015/src/render3/instructions/embedded_view.js +9 -12
- package/esm2015/src/render3/instructions/interpolation.js +375 -0
- package/esm2015/src/render3/instructions/listener.js +3 -2
- package/esm2015/src/render3/instructions/projection.js +6 -6
- package/esm2015/src/render3/instructions/property.js +10 -4
- package/esm2015/src/render3/instructions/property_interpolation.js +49 -382
- package/esm2015/src/render3/instructions/shared.js +82 -118
- package/esm2015/src/render3/instructions/styling.js +189 -236
- package/esm2015/src/render3/instructions/text.js +8 -7
- package/esm2015/src/render3/instructions/text_interpolation.js +357 -0
- package/esm2015/src/render3/interfaces/container.js +9 -5
- package/esm2015/src/render3/interfaces/definition.js +12 -6
- package/esm2015/src/render3/interfaces/node.js +20 -8
- package/esm2015/src/render3/interfaces/styling.js +16 -15
- package/esm2015/src/render3/interfaces/view.js +2 -2
- package/esm2015/src/render3/jit/directive.js +14 -5
- package/esm2015/src/render3/jit/environment.js +30 -15
- package/esm2015/src/render3/jit/module.js +38 -19
- package/esm2015/src/render3/ng_module_ref.js +39 -3
- package/esm2015/src/render3/node_manipulation.js +45 -43
- package/esm2015/src/render3/node_selector_matcher.js +14 -13
- package/esm2015/src/render3/query.js +77 -61
- package/esm2015/src/render3/state.js +33 -6
- package/esm2015/src/render3/styling/class_and_style_bindings.js +91 -79
- package/esm2015/src/render3/styling/host_instructions_queue.js +8 -5
- package/esm2015/src/render3/styling/shared.js +2 -2
- package/esm2015/src/render3/styling/util.js +2 -2
- package/esm2015/src/render3/styling_next/bindings.js +602 -0
- package/esm2015/src/render3/styling_next/instructions.js +366 -0
- package/esm2015/src/render3/styling_next/interfaces.js +374 -0
- package/esm2015/src/render3/styling_next/map_based_bindings.js +408 -0
- package/esm2015/src/render3/styling_next/state.js +51 -0
- package/esm2015/src/render3/styling_next/styling_debug.js +291 -0
- package/esm2015/src/render3/styling_next/util.js +259 -0
- package/esm2015/src/render3/util/attrs_utils.js +4 -3
- package/esm2015/src/render3/util/debug_utils.js +18 -0
- package/esm2015/src/render3/util/view_traversal_utils.js +2 -2
- package/esm2015/src/render3/view_engine_compatibility.js +24 -10
- package/esm2015/src/sanitization/sanitization.js +17 -7
- package/esm2015/src/sanitization/style_sanitizer.js +11 -1
- package/esm2015/src/util/ng_dev_mode.js +7 -3
- package/esm2015/src/version.js +1 -1
- package/esm2015/src/view/ng_module.js +3 -3
- package/esm2015/src/view/util.js +2 -2
- package/esm2015/testing/src/r3_test_bed_compiler.js +44 -12
- package/esm5/core.js +2 -3
- package/esm5/src/application_ref.js +6 -1
- package/esm5/src/codegen_private_exports.js +2 -2
- package/esm5/src/compiler/compiler_facade_interface.js +1 -1
- package/esm5/src/core_private_export.js +3 -1
- package/esm5/src/core_render3_private_export.js +5 -3
- package/esm5/src/debug/debug_node.js +4 -4
- package/esm5/src/di/index.js +3 -3
- package/esm5/src/di/injector.js +14 -74
- package/esm5/src/di/injector_compatibility.js +77 -6
- package/esm5/src/di/interface/defs.js +24 -3
- package/esm5/src/di/r3_injector.js +60 -37
- package/esm5/src/di/reflective_injector.js +3 -2
- package/esm5/src/i18n/locale_data.js +38 -0
- package/esm5/src/i18n/locale_data_api.js +46 -0
- package/esm5/src/i18n/locale_en.js +39 -0
- package/esm5/src/i18n/localization.js +29 -0
- package/esm5/src/linker/ng_module_factory_loader.js +4 -32
- package/esm5/src/linker/ng_module_factory_registration.js +50 -0
- package/esm5/src/metadata/ng_module.js +1 -1
- package/esm5/src/metadata/resource_loading.js +2 -2
- package/esm5/src/reflection/reflection_capabilities.js +14 -3
- package/esm5/src/render3/assert.js +2 -1
- package/esm5/src/render3/component.js +10 -4
- package/esm5/src/render3/debug.js +17 -10
- package/esm5/src/render3/definition.js +8 -2
- package/esm5/src/render3/errors.js +14 -1
- package/esm5/src/render3/features/inherit_definition_feature.js +41 -36
- package/esm5/src/render3/fields.js +2 -1
- package/esm5/src/render3/i18n.js +67 -437
- package/esm5/src/render3/index.js +3 -3
- package/esm5/src/render3/instructions/all.js +6 -1
- package/esm5/src/render3/instructions/attribute.js +22 -0
- package/esm5/src/render3/instructions/attribute_interpolation.js +346 -0
- package/esm5/src/render3/instructions/container.js +16 -15
- package/esm5/src/render3/instructions/element.js +43 -32
- package/esm5/src/render3/instructions/element_container.js +9 -8
- package/esm5/src/render3/instructions/embedded_view.js +8 -11
- package/esm5/src/render3/instructions/interpolation.js +243 -0
- package/esm5/src/render3/instructions/listener.js +3 -2
- package/esm5/src/render3/instructions/projection.js +6 -6
- package/esm5/src/render3/instructions/property.js +10 -4
- package/esm5/src/render3/instructions/property_interpolation.js +40 -254
- package/esm5/src/render3/instructions/shared.js +70 -105
- package/esm5/src/render3/instructions/styling.js +167 -209
- package/esm5/src/render3/instructions/text.js +8 -7
- package/esm5/src/render3/instructions/text_interpolation.js +264 -0
- package/esm5/src/render3/interfaces/container.js +8 -2
- package/esm5/src/render3/interfaces/definition.js +1 -1
- package/esm5/src/render3/interfaces/node.js +1 -8
- package/esm5/src/render3/interfaces/styling.js +2 -2
- package/esm5/src/render3/interfaces/view.js +1 -1
- package/esm5/src/render3/jit/directive.js +12 -5
- package/esm5/src/render3/jit/environment.js +30 -15
- package/esm5/src/render3/jit/module.js +23 -18
- package/esm5/src/render3/ng_module_ref.js +37 -3
- package/esm5/src/render3/node_manipulation.js +39 -38
- package/esm5/src/render3/node_selector_matcher.js +14 -13
- package/esm5/src/render3/query.js +75 -53
- package/esm5/src/render3/state.js +29 -5
- package/esm5/src/render3/styling/class_and_style_bindings.js +79 -65
- package/esm5/src/render3/styling/host_instructions_queue.js +6 -3
- package/esm5/src/render3/styling/shared.js +2 -2
- package/esm5/src/render3/styling/util.js +2 -2
- package/esm5/src/render3/styling_next/bindings.js +446 -0
- package/esm5/src/render3/styling_next/instructions.js +277 -0
- package/esm5/src/render3/styling_next/interfaces.js +1 -0
- package/esm5/src/render3/styling_next/map_based_bindings.js +324 -0
- package/esm5/src/render3/styling_next/state.js +23 -0
- package/esm5/src/render3/styling_next/styling_debug.js +130 -0
- package/esm5/src/render3/styling_next/util.js +147 -0
- package/esm5/src/render3/util/attrs_utils.js +4 -3
- package/esm5/src/render3/util/debug_utils.js +11 -0
- package/esm5/src/render3/util/view_traversal_utils.js +2 -2
- package/esm5/src/render3/view_engine_compatibility.js +23 -10
- package/esm5/src/sanitization/sanitization.js +14 -6
- package/esm5/src/sanitization/style_sanitizer.js +1 -1
- package/esm5/src/util/ng_dev_mode.js +7 -3
- package/esm5/src/version.js +1 -1
- package/esm5/src/view/ng_module.js +3 -3
- package/esm5/src/view/util.js +2 -2
- package/esm5/testing/src/r3_test_bed_compiler.js +37 -11
- package/fesm2015/core.js +13481 -10733
- package/fesm2015/core.js.map +1 -1
- package/fesm2015/testing.js +43 -11
- package/fesm2015/testing.js.map +1 -1
- package/fesm5/core.js +11255 -9269
- package/fesm5/core.js.map +1 -1
- package/fesm5/testing.js +36 -10
- package/fesm5/testing.js.map +1 -1
- package/package.json +1 -1
- package/schematics/migrations/template-var-assignment/index.js +2 -2
- package/src/r3_symbols.d.ts +5 -1
- package/testing/testing.d.ts +1 -1
- package/testing.d.ts +1 -1
|
@@ -0,0 +1,291 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview added by tsickle
|
|
3
|
+
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
|
+
*/
|
|
5
|
+
import { attachDebugObject } from '../util/debug_utils';
|
|
6
|
+
import { applyStyling } from './bindings';
|
|
7
|
+
import { activeStylingMapFeature } from './map_based_bindings';
|
|
8
|
+
import { getCurrentOrLViewSanitizer, getDefaultValue, getGuardMask, getProp, getValuesCount, isContextLocked, isSanitizationRequired } from './util';
|
|
9
|
+
/**
|
|
10
|
+
* A debug/testing-oriented summary of a styling entry.
|
|
11
|
+
*
|
|
12
|
+
* A value such as this is generated as an artifact of the `DebugStyling`
|
|
13
|
+
* summary.
|
|
14
|
+
* @record
|
|
15
|
+
*/
|
|
16
|
+
export function LStylingSummary() { }
|
|
17
|
+
if (false) {
|
|
18
|
+
/**
|
|
19
|
+
* The style/class property that the summary is attached to
|
|
20
|
+
* @type {?}
|
|
21
|
+
*/
|
|
22
|
+
LStylingSummary.prototype.prop;
|
|
23
|
+
/**
|
|
24
|
+
* The last applied value for the style/class property
|
|
25
|
+
* @type {?}
|
|
26
|
+
*/
|
|
27
|
+
LStylingSummary.prototype.value;
|
|
28
|
+
/**
|
|
29
|
+
* The binding index of the last applied style/class property
|
|
30
|
+
* @type {?}
|
|
31
|
+
*/
|
|
32
|
+
LStylingSummary.prototype.bindingIndex;
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* A debug/testing-oriented summary of all styling entries for a `DebugNode` instance.
|
|
36
|
+
* @record
|
|
37
|
+
*/
|
|
38
|
+
export function DebugStyling() { }
|
|
39
|
+
if (false) {
|
|
40
|
+
/**
|
|
41
|
+
* The associated TStylingContext instance
|
|
42
|
+
* @type {?}
|
|
43
|
+
*/
|
|
44
|
+
DebugStyling.prototype.context;
|
|
45
|
+
/**
|
|
46
|
+
* A summarization of each style/class property
|
|
47
|
+
* present in the context.
|
|
48
|
+
* @type {?}
|
|
49
|
+
*/
|
|
50
|
+
DebugStyling.prototype.summary;
|
|
51
|
+
/**
|
|
52
|
+
* A key/value map of all styling properties and their
|
|
53
|
+
* runtime values.
|
|
54
|
+
* @type {?}
|
|
55
|
+
*/
|
|
56
|
+
DebugStyling.prototype.values;
|
|
57
|
+
/**
|
|
58
|
+
* Overrides the sanitizer used to process styles.
|
|
59
|
+
* @param {?} sanitizer
|
|
60
|
+
* @return {?}
|
|
61
|
+
*/
|
|
62
|
+
DebugStyling.prototype.overrideSanitizer = function (sanitizer) { };
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* A debug/testing-oriented summary of all styling entries within a `TStylingContext`.
|
|
66
|
+
* @record
|
|
67
|
+
*/
|
|
68
|
+
export function TStylingTupleSummary() { }
|
|
69
|
+
if (false) {
|
|
70
|
+
/**
|
|
71
|
+
* The property (style or class property) that this tuple represents
|
|
72
|
+
* @type {?}
|
|
73
|
+
*/
|
|
74
|
+
TStylingTupleSummary.prototype.prop;
|
|
75
|
+
/**
|
|
76
|
+
* The total amount of styling entries apart of this tuple
|
|
77
|
+
* @type {?}
|
|
78
|
+
*/
|
|
79
|
+
TStylingTupleSummary.prototype.valuesCount;
|
|
80
|
+
/**
|
|
81
|
+
* The bit guard mask that is used to compare and protect against
|
|
82
|
+
* styling changes when and styling bindings update
|
|
83
|
+
* @type {?}
|
|
84
|
+
*/
|
|
85
|
+
TStylingTupleSummary.prototype.guardMask;
|
|
86
|
+
/**
|
|
87
|
+
* Whether or not the entry requires sanitization
|
|
88
|
+
* @type {?}
|
|
89
|
+
*/
|
|
90
|
+
TStylingTupleSummary.prototype.sanitizationRequired;
|
|
91
|
+
/**
|
|
92
|
+
* The default value that will be applied if any bindings are falsy.
|
|
93
|
+
* @type {?}
|
|
94
|
+
*/
|
|
95
|
+
TStylingTupleSummary.prototype.defaultValue;
|
|
96
|
+
/**
|
|
97
|
+
* All bindingIndex sources that have been registered for this style.
|
|
98
|
+
* @type {?}
|
|
99
|
+
*/
|
|
100
|
+
TStylingTupleSummary.prototype.sources;
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Instantiates and attaches an instance of `TStylingContextDebug` to the provided context.
|
|
104
|
+
* @param {?} context
|
|
105
|
+
* @return {?}
|
|
106
|
+
*/
|
|
107
|
+
export function attachStylingDebugObject(context) {
|
|
108
|
+
/** @type {?} */
|
|
109
|
+
const debug = new TStylingContextDebug(context);
|
|
110
|
+
attachDebugObject(context, debug);
|
|
111
|
+
return debug;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* A human-readable debug summary of the styling data present within `TStylingContext`.
|
|
115
|
+
*
|
|
116
|
+
* This class is designed to be used within testing code or when an
|
|
117
|
+
* application has `ngDevMode` activated.
|
|
118
|
+
*/
|
|
119
|
+
class TStylingContextDebug {
|
|
120
|
+
/**
|
|
121
|
+
* @param {?} context
|
|
122
|
+
*/
|
|
123
|
+
constructor(context) {
|
|
124
|
+
this.context = context;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* @return {?}
|
|
128
|
+
*/
|
|
129
|
+
get isLocked() { return isContextLocked(this.context); }
|
|
130
|
+
/**
|
|
131
|
+
* Returns a detailed summary of each styling entry in the context.
|
|
132
|
+
*
|
|
133
|
+
* See `TStylingTupleSummary`.
|
|
134
|
+
* @return {?}
|
|
135
|
+
*/
|
|
136
|
+
get entries() {
|
|
137
|
+
/** @type {?} */
|
|
138
|
+
const context = this.context;
|
|
139
|
+
/** @type {?} */
|
|
140
|
+
const entries = {};
|
|
141
|
+
/** @type {?} */
|
|
142
|
+
const start = 2 /* MapBindingsPosition */;
|
|
143
|
+
/** @type {?} */
|
|
144
|
+
let i = start;
|
|
145
|
+
while (i < context.length) {
|
|
146
|
+
/** @type {?} */
|
|
147
|
+
const valuesCount = getValuesCount(context, i);
|
|
148
|
+
// the context may contain placeholder values which are populated ahead of time,
|
|
149
|
+
// but contain no actual binding values. In this situation there is no point in
|
|
150
|
+
// classifying this as an "entry" since no real data is stored here yet.
|
|
151
|
+
if (valuesCount) {
|
|
152
|
+
/** @type {?} */
|
|
153
|
+
const prop = getProp(context, i);
|
|
154
|
+
/** @type {?} */
|
|
155
|
+
const guardMask = getGuardMask(context, i);
|
|
156
|
+
/** @type {?} */
|
|
157
|
+
const defaultValue = getDefaultValue(context, i);
|
|
158
|
+
/** @type {?} */
|
|
159
|
+
const sanitizationRequired = isSanitizationRequired(context, i);
|
|
160
|
+
/** @type {?} */
|
|
161
|
+
const bindingsStartPosition = i + 3 /* BindingsStartOffset */;
|
|
162
|
+
/** @type {?} */
|
|
163
|
+
const sources = [];
|
|
164
|
+
for (let j = 0; j < valuesCount; j++) {
|
|
165
|
+
sources.push((/** @type {?} */ (context[bindingsStartPosition + j])));
|
|
166
|
+
}
|
|
167
|
+
entries[prop] = { prop, guardMask, sanitizationRequired, valuesCount, defaultValue, sources };
|
|
168
|
+
}
|
|
169
|
+
i += 3 /* BindingsStartOffset */ + valuesCount;
|
|
170
|
+
}
|
|
171
|
+
return entries;
|
|
172
|
+
}
|
|
173
|
+
}
|
|
174
|
+
if (false) {
|
|
175
|
+
/** @type {?} */
|
|
176
|
+
TStylingContextDebug.prototype.context;
|
|
177
|
+
}
|
|
178
|
+
/**
|
|
179
|
+
* A human-readable debug summary of the styling data present for a `DebugNode` instance.
|
|
180
|
+
*
|
|
181
|
+
* This class is designed to be used within testing code or when an
|
|
182
|
+
* application has `ngDevMode` activated.
|
|
183
|
+
*/
|
|
184
|
+
export class NodeStylingDebug {
|
|
185
|
+
/**
|
|
186
|
+
* @param {?} context
|
|
187
|
+
* @param {?} _data
|
|
188
|
+
* @param {?=} _isClassBased
|
|
189
|
+
*/
|
|
190
|
+
constructor(context, _data, _isClassBased) {
|
|
191
|
+
this.context = context;
|
|
192
|
+
this._data = _data;
|
|
193
|
+
this._isClassBased = _isClassBased;
|
|
194
|
+
this._sanitizer = null;
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Overrides the sanitizer used to process styles.
|
|
198
|
+
* @param {?} sanitizer
|
|
199
|
+
* @return {?}
|
|
200
|
+
*/
|
|
201
|
+
overrideSanitizer(sanitizer) { this._sanitizer = sanitizer; }
|
|
202
|
+
/**
|
|
203
|
+
* Returns a detailed summary of each styling entry in the context and
|
|
204
|
+
* what their runtime representation is.
|
|
205
|
+
*
|
|
206
|
+
* See `LStylingSummary`.
|
|
207
|
+
* @return {?}
|
|
208
|
+
*/
|
|
209
|
+
get summary() {
|
|
210
|
+
/** @type {?} */
|
|
211
|
+
const entries = {};
|
|
212
|
+
this._mapValues((/**
|
|
213
|
+
* @param {?} prop
|
|
214
|
+
* @param {?} value
|
|
215
|
+
* @param {?} bindingIndex
|
|
216
|
+
* @return {?}
|
|
217
|
+
*/
|
|
218
|
+
(prop, value, bindingIndex) => {
|
|
219
|
+
entries[prop] = { prop, value, bindingIndex };
|
|
220
|
+
}));
|
|
221
|
+
return entries;
|
|
222
|
+
}
|
|
223
|
+
/**
|
|
224
|
+
* Returns a key/value map of all the styles/classes that were last applied to the element.
|
|
225
|
+
* @return {?}
|
|
226
|
+
*/
|
|
227
|
+
get values() {
|
|
228
|
+
/** @type {?} */
|
|
229
|
+
const entries = {};
|
|
230
|
+
this._mapValues((/**
|
|
231
|
+
* @param {?} prop
|
|
232
|
+
* @param {?} value
|
|
233
|
+
* @return {?}
|
|
234
|
+
*/
|
|
235
|
+
(prop, value) => { entries[prop] = value; }));
|
|
236
|
+
return entries;
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* @private
|
|
240
|
+
* @param {?} fn
|
|
241
|
+
* @return {?}
|
|
242
|
+
*/
|
|
243
|
+
_mapValues(fn) {
|
|
244
|
+
// there is no need to store/track an element instance. The
|
|
245
|
+
// element is only used when the styling algorithm attempts to
|
|
246
|
+
// style the value (and we mock out the stylingApplyFn anyway).
|
|
247
|
+
/** @type {?} */
|
|
248
|
+
const mockElement = (/** @type {?} */ ({}));
|
|
249
|
+
/** @type {?} */
|
|
250
|
+
const hasMaps = getValuesCount(this.context, 2 /* MapBindingsPosition */) > 0;
|
|
251
|
+
if (hasMaps) {
|
|
252
|
+
activeStylingMapFeature();
|
|
253
|
+
}
|
|
254
|
+
/** @type {?} */
|
|
255
|
+
const mapFn = (/**
|
|
256
|
+
* @param {?} renderer
|
|
257
|
+
* @param {?} element
|
|
258
|
+
* @param {?} prop
|
|
259
|
+
* @param {?} value
|
|
260
|
+
* @param {?} bindingIndex
|
|
261
|
+
* @return {?}
|
|
262
|
+
*/
|
|
263
|
+
(renderer, element, prop, value, bindingIndex) => {
|
|
264
|
+
fn(prop, value, bindingIndex || null);
|
|
265
|
+
});
|
|
266
|
+
/** @type {?} */
|
|
267
|
+
const sanitizer = this._isClassBased ? null : (this._sanitizer ||
|
|
268
|
+
getCurrentOrLViewSanitizer((/** @type {?} */ (this._data))));
|
|
269
|
+
applyStyling(this.context, null, mockElement, this._data, true, mapFn, sanitizer);
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
if (false) {
|
|
273
|
+
/**
|
|
274
|
+
* @type {?}
|
|
275
|
+
* @private
|
|
276
|
+
*/
|
|
277
|
+
NodeStylingDebug.prototype._sanitizer;
|
|
278
|
+
/** @type {?} */
|
|
279
|
+
NodeStylingDebug.prototype.context;
|
|
280
|
+
/**
|
|
281
|
+
* @type {?}
|
|
282
|
+
* @private
|
|
283
|
+
*/
|
|
284
|
+
NodeStylingDebug.prototype._data;
|
|
285
|
+
/**
|
|
286
|
+
* @type {?}
|
|
287
|
+
* @private
|
|
288
|
+
*/
|
|
289
|
+
NodeStylingDebug.prototype._isClassBased;
|
|
290
|
+
}
|
|
291
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3R5bGluZ19kZWJ1Zy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3JlbmRlcjMvc3R5bGluZ19uZXh0L3N0eWxpbmdfZGVidWcudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQVdBLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLHFCQUFxQixDQUFDO0FBRXRELE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxZQUFZLENBQUM7QUFFeEMsT0FBTyxFQUFDLHVCQUF1QixFQUFDLE1BQU0sc0JBQXNCLENBQUM7QUFFN0QsT0FBTyxFQUFDLDBCQUEwQixFQUFFLGVBQWUsRUFBRSxZQUFZLEVBQUUsT0FBTyxFQUFFLGNBQWMsRUFBRSxlQUFlLEVBQWMsc0JBQXNCLEVBQUMsTUFBTSxRQUFRLENBQUM7Ozs7Ozs7O0FBcUIvSixxQ0FTQzs7Ozs7O0lBUEMsK0JBQWE7Ozs7O0lBR2IsZ0NBQTJCOzs7OztJQUczQix1Q0FBMEI7Ozs7OztBQU01QixrQ0FvQkM7Ozs7OztJQWxCQywrQkFBeUI7Ozs7OztJQU16QiwrQkFBMEM7Ozs7OztJQU0xQyw4QkFBMEQ7Ozs7OztJQUsxRCxvRUFBeUQ7Ozs7OztBQU0zRCwwQ0EyQkM7Ozs7OztJQXpCQyxvQ0FBYTs7Ozs7SUFHYiwyQ0FBb0I7Ozs7OztJQU1wQix5Q0FBa0I7Ozs7O0lBS2xCLG9EQUE4Qjs7Ozs7SUFLOUIsNENBQWtDOzs7OztJQUtsQyx1Q0FBZ0M7Ozs7Ozs7QUFNbEMsTUFBTSxVQUFVLHdCQUF3QixDQUFDLE9BQXdCOztVQUN6RCxLQUFLLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQyxPQUFPLENBQUM7SUFDL0MsaUJBQWlCLENBQUMsT0FBTyxFQUFFLEtBQUssQ0FBQyxDQUFDO0lBQ2xDLE9BQU8sS0FBSyxDQUFDO0FBQ2YsQ0FBQzs7Ozs7OztBQVFELE1BQU0sb0JBQW9COzs7O0lBQ3hCLFlBQTRCLE9BQXdCO1FBQXhCLFlB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MUYsSUFBSSxPQUFPLEVBQUU7WUFDWCx1QkFBdUIsRUFBRSxDQUFDO1NBQzNCOztjQUVLLEtBQUs7Ozs7Ozs7O1FBQ1AsQ0FBQyxRQUFhLEVBQUUsT0FBaUIsRUFBRSxJQUFZLEVBQUUsS0FBVSxFQUFFLFlBQW9CLEVBQUUsRUFBRTtZQUNuRixFQUFFLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxZQUFZLElBQUksSUFBSSxDQUFDLENBQUM7UUFDeEMsQ0FBQyxDQUFBOztjQUVDLFNBQVMsR0FBRyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVU7WUFDZiwwQkFBMEIsQ0FBQyxtQkFBQSxJQUFJLENBQUMsS0FBSyxFQUFTLENBQUMsQ0FBQztRQUMvRixZQUFZLENBQUMsSUFBSSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxLQUFLLEVBQUUsSUFBSSxFQUFFLEtBQUssRUFBRSxTQUFTLENBQUMsQ0FBQztJQUNwRixDQUFDO0NBQ0Y7Ozs7OztJQXJEQyxzQ0FBZ0Q7O0lBRzVDLG1DQUErQjs7Ozs7SUFBRSxpQ0FBMkI7Ozs7O0lBQzVELHlDQUErQiIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuKiBAbGljZW5zZVxuKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbipcbiogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuKi9cbmltcG9ydCB7U2FuaXRpemVyfSBmcm9tICcuLi8uLi9zYW5pdGl6YXRpb24vc2VjdXJpdHknO1xuaW1wb3J0IHtTdHlsZVNhbml0aXplRm59IGZyb20gJy4uLy4uL3Nhbml0aXphdGlvbi9zdHlsZV9zYW5pdGl6ZXInO1xuaW1wb3J0IHtSRWxlbWVudH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9yZW5kZXJlcic7XG5pbXBvcnQge0xWaWV3LCBTQU5JVElaRVJ9IGZyb20gJy4uL2ludGVyZmFjZXMvdmlldyc7XG5pbXBvcnQge2F0dGFjaERlYnVnT2JqZWN0fSBmcm9tICcuLi91dGlsL2RlYnVnX3V0aWxzJztcblxuaW1wb3J0IHthcHBseVN0eWxpbmd9IGZyb20gJy4vYmluZGluZ3MnO1xuaW1wb3J0IHtBcHBseVN0eWxpbmdGbiwgTFN0eWxpbmdEYXRhLCBUU3R5bGluZ0NvbnRleHQsIFRTdHlsaW5nQ29udGV4dEluZGV4fSBmcm9tICcuL2ludGVyZmFjZXMnO1xuaW1wb3J0IHthY3RpdmVTdHlsaW5nTWFwRmVhdHVyZX0gZnJvbSAnLi9tYXBfYmFzZWRfYmluZGluZ3MnO1xuaW1wb3J0IHtnZXRDdXJyZW50U3R5bGVTYW5pdGl6ZXJ9IGZyb20gJy4vc3RhdGUnO1xuaW1wb3J0IHtnZXRDdXJyZW50T3JMVmlld1Nhbml0aXplciwgZ2V0RGVmYXVsdFZhbHVlLCBnZXRHdWFyZE1hc2ssIGdldFByb3AsIGdldFZhbHVlc0NvdW50LCBpc0NvbnRleHRMb2NrZWQsIGlzTWFwQmFzZWQsIGlzU2FuaXRpemF0aW9uUmVxdWlyZWR9IGZyb20gJy4vdXRpbCc7XG5cblxuXG4vKipcbiAqIC0tLS0tLS0tXG4gKlxuICogVGhpcyBmaWxlIGNvbnRhaW5zIHRoZSBjb3JlIGRlYnVnIGZ1bmN0aW9uYWxpdHkgZm9yIHN0eWxpbmcgaW4gQW5ndWxhci5cbiAqXG4gKiBUbyBsZWFybiBtb3JlIGFib3V0IHRoZSBhbGdvcml0aG0gc2VlIGBUU3R5bGluZ0NvbnRleHRgLlxuICpcbiAqIC0tLS0tLS0tXG4gKi9cblxuXG4vKipcbiAqIEEgZGVidWcvdGVzdGluZy1vcmllbnRlZCBzdW1tYXJ5IG9mIGEgc3R5bGluZyBlbnRyeS5cbiAqXG4gKiBBIHZhbHVlIHN1Y2ggYXMgdGhpcyBpcyBnZW5lcmF0ZWQgYXMgYW4gYXJ0aWZhY3Qgb2YgdGhlIGBEZWJ1Z1N0eWxpbmdgXG4gKiBzdW1tYXJ5LlxuICovXG5leHBvcnQgaW50ZXJmYWNlIExTdHlsaW5nU3VtbWFyeSB7XG4gIC8qKiBUaGUgc3R5bGUvY2xhc3MgcHJvcGVydHkgdGhhdCB0aGUgc3VtbWFyeSBpcyBhdHRhY2hlZCB0byAqL1xuICBwcm9wOiBzdHJpbmc7XG5cbiAgLyoqIFRoZSBsYXN0IGFwcGxpZWQgdmFsdWUgZm9yIHRoZSBzdHlsZS9jbGFzcyBwcm9wZXJ0eSAqL1xuICB2YWx1ZTogc3RyaW5nfGJvb2xlYW58bnVsbDtcblxuICAvKiogVGhlIGJpbmRpbmcgaW5kZXggb2YgdGhlIGxhc3QgYXBwbGllZCBzdHlsZS9jbGFzcyBwcm9wZXJ0eSAqL1xuICBiaW5kaW5nSW5kZXg6IG51bWJlcnxudWxsO1xufVxuXG4vKipcbiAqIEEgZGVidWcvdGVzdGluZy1vcmllbnRlZCBzdW1tYXJ5IG9mIGFsbCBzdHlsaW5nIGVudHJpZXMgZm9yIGEgYERlYnVnTm9kZWAgaW5zdGFuY2UuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgRGVidWdTdHlsaW5nIHtcbiAgLyoqIFRoZSBhc3NvY2lhdGVkIFRTdHlsaW5nQ29udGV4dCBpbnN0YW5jZSAqL1xuICBjb250ZXh0OiBUU3R5bGluZ0NvbnRleHQ7XG5cbiAgLyoqXG4gICAqIEEgc3VtbWFyaXphdGlvbiBvZiBlYWNoIHN0eWxlL2NsYXNzIHByb3BlcnR5XG4gICAqIHByZXNlbnQgaW4gdGhlIGNvbnRleHQuXG4gICAqL1xuICBzdW1tYXJ5OiB7W2tleTogc3RyaW5nXTogTFN0eWxpbmdTdW1tYXJ5fTtcblxuICAvKipcbiAgICogQSBrZXkvdmFsdWUgbWFwIG9mIGFsbCBzdHlsaW5nIHByb3BlcnRpZXMgYW5kIHRoZWlyXG4gICAqIHJ1bnRpbWUgdmFsdWVzLlxuICAgKi9cbiAgdmFsdWVzOiB7W2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIHwgbnVsbCB8IGJvb2xlYW59O1xuXG4gIC8qKlxuICAgKiBPdmVycmlkZXMgdGhlIHNhbml0aXplciB1c2VkIHRvIHByb2Nlc3Mgc3R5bGVzLlxuICAgKi9cbiAgb3ZlcnJpZGVTYW5pdGl6ZXIoc2FuaXRpemVyOiBTdHlsZVNhbml0aXplRm58bnVsbCk6IHZvaWQ7XG59XG5cbi8qKlxuICogQSBkZWJ1Zy90ZXN0aW5nLW9yaWVudGVkIHN1bW1hcnkgb2YgYWxsIHN0eWxpbmcgZW50cmllcyB3aXRoaW4gYSBgVFN0eWxpbmdDb250ZXh0YC5cbiAqL1xuZXhwb3J0IGludGVyZmFjZSBUU3R5bGluZ1R1cGxlU3VtbWFyeSB7XG4gIC8qKiBUaGUgcHJvcGVydHkgKHN0eWxlIG9yIGNsYXNzIHByb3BlcnR5KSB0aGF0IHRoaXMgdHVwbGUgcmVwcmVzZW50cyAqL1xuICBwcm9wOiBzdHJpbmc7XG5cbiAgLyoqIFRoZSB0b3RhbCBhbW91bnQgb2Ygc3R5bGluZyBlbnRyaWVzIGFwYXJ0IG9mIHRoaXMgdHVwbGUgKi9cbiAgdmFsdWVzQ291bnQ6IG51bWJlcjtcblxuICAvKipcbiAgICogVGhlIGJpdCBndWFyZCBtYXNrIHRoYXQgaXMgdXNlZCB0byBjb21wYXJlIGFuZCBwcm90ZWN0IGFnYWluc3RcbiAgICogc3R5bGluZyBjaGFuZ2VzIHdoZW4gYW5kIHN0eWxpbmcgYmluZGluZ3MgdXBkYXRlXG4gICAqL1xuICBndWFyZE1hc2s6IG51bWJlcjtcblxuICAvKipcbiAgICogV2hldGhlciBvciBub3QgdGhlIGVudHJ5IHJlcXVpcmVzIHNhbml0aXphdGlvblxuICAgKi9cbiAgc2FuaXRpemF0aW9uUmVxdWlyZWQ6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIFRoZSBkZWZhdWx0IHZhbHVlIHRoYXQgd2lsbCBiZSBhcHBsaWVkIGlmIGFueSBiaW5kaW5ncyBhcmUgZmFsc3kuXG4gICAqL1xuICBkZWZhdWx0VmFsdWU6IHN0cmluZ3xib29sZWFufG51bGw7XG5cbiAgLyoqXG4gICAqIEFsbCBiaW5kaW5nSW5kZXggc291cmNlcyB0aGF0IGhhdmUgYmVlbiByZWdpc3RlcmVkIGZvciB0aGlzIHN0eWxlLlxuICAgKi9cbiAgc291cmNlczogKG51bWJlcnxudWxsfHN0cmluZylbXTtcbn1cblxuLyoqXG4gKiBJbnN0YW50aWF0ZXMgYW5kIGF0dGFjaGVzIGFuIGluc3RhbmNlIG9mIGBUU3R5bGluZ0NvbnRleHREZWJ1Z2AgdG8gdGhlIHByb3ZpZGVkIGNvbnRleHQuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhdHRhY2hTdHlsaW5nRGVidWdPYmplY3QoY29udGV4dDogVFN0eWxpbmdDb250ZXh0KSB7XG4gIGNvbnN0IGRlYnVnID0gbmV3IFRTdHlsaW5nQ29udGV4dERlYnVnKGNvbnRleHQpO1xuICBhdHRhY2hEZWJ1Z09iamVjdChjb250ZXh0LCBkZWJ1Zyk7XG4gIHJldHVybiBkZWJ1Zztcbn1cblxuLyoqXG4gKiBBIGh1bWFuLXJlYWRhYmxlIGRlYnVnIHN1bW1hcnkgb2YgdGhlIHN0eWxpbmcgZGF0YSBwcmVzZW50IHdpdGhpbiBgVFN0eWxpbmdDb250ZXh0YC5cbiAqXG4gKiBUaGlzIGNsYXNzIGlzIGRlc2lnbmVkIHRvIGJlIHVzZWQgd2l0aGluIHRlc3RpbmcgY29kZSBvciB3aGVuIGFuXG4gKiBhcHBsaWNhdGlvbiBoYXMgYG5nRGV2TW9kZWAgYWN0aXZhdGVkLlxuICovXG5jbGFzcyBUU3R5bGluZ0NvbnRleHREZWJ1ZyB7XG4gIGNvbnN0cnVjdG9yKHB1YmxpYyByZWFkb25seSBjb250ZXh0OiBUU3R5bGluZ0NvbnRleHQpIHt9XG5cbiAgZ2V0IGlzTG9ja2VkKCkgeyByZXR1cm4gaXNDb250ZXh0TG9ja2VkKHRoaXMuY29udGV4dCk7IH1cblxuICAvKipcbiAgICogUmV0dXJucyBhIGRldGFpbGVkIHN1bW1hcnkgb2YgZWFjaCBzdHlsaW5nIGVudHJ5IGluIHRoZSBjb250ZXh0LlxuICAgKlxuICAgKiBTZWUgYFRTdHlsaW5nVHVwbGVTdW1tYXJ5YC5cbiAgICovXG4gIGdldCBlbnRyaWVzKCk6IHtbcHJvcDogc3RyaW5nXTogVFN0eWxpbmdUdXBsZVN1bW1hcnl9IHtcbiAgICBjb25zdCBjb250ZXh0ID0gdGhpcy5jb250ZXh0O1xuICAgIGNvbnN0IGVudHJpZXM6IHtbcHJvcDogc3RyaW5nXTogVFN0eWxpbmdUdXBsZVN1bW1hcnl9ID0ge307XG4gICAgY29uc3Qgc3RhcnQgPSBUU3R5bGluZ0NvbnRleHRJbmRleC5NYXBCaW5kaW5nc1Bvc2l0aW9uO1xuICAgIGxldCBpID0gc3RhcnQ7XG4gICAgd2hpbGUgKGkgPCBjb250ZXh0Lmxlbmd0aCkge1xuICAgICAgY29uc3QgdmFsdWVzQ291bnQgPSBnZXRWYWx1ZXNDb3VudChjb250ZXh0LCBpKTtcbiAgICAgIC8vIHRoZSBjb250ZXh0IG1heSBjb250YWluIHBsYWNlaG9sZGVyIHZhbHVlcyB3aGljaCBhcmUgcG9wdWxhdGVkIGFoZWFkIG9mIHRpbWUsXG4gICAgICAvLyBidXQgY29udGFpbiBubyBhY3R1YWwgYmluZGluZyB2YWx1ZXMuIEluIHRoaXMgc2l0dWF0aW9uIHRoZXJlIGlzIG5vIHBvaW50IGluXG4gICAgICAvLyBjbGFzc2lmeWluZyB0aGlzIGFzIGFuIFwiZW50cnlcIiBzaW5jZSBubyByZWFsIGRhdGEgaXMgc3RvcmVkIGhlcmUgeWV0LlxuICAgICAgaWYgKHZhbHVlc0NvdW50KSB7XG4gICAgICAgIGNvbnN0IHByb3AgPSBnZXRQcm9wKGNvbnRleHQsIGkpO1xuICAgICAgICBjb25zdCBndWFyZE1hc2sgPSBnZXRHdWFyZE1hc2soY29udGV4dCwgaSk7XG4gICAgICAgIGNvbnN0IGRlZmF1bHRWYWx1ZSA9IGdldERlZmF1bHRWYWx1ZShjb250ZXh0LCBpKTtcbiAgICAgICAgY29uc3Qgc2FuaXRpemF0aW9uUmVxdWlyZWQgPSBpc1Nhbml0aXphdGlvblJlcXVpcmVkKGNvbnRleHQsIGkpO1xuICAgICAgICBjb25zdCBiaW5kaW5nc1N0YXJ0UG9zaXRpb24gPSBpICsgVFN0eWxpbmdDb250ZXh0SW5kZXguQmluZGluZ3NTdGFydE9mZnNldDtcblxuICAgICAgICBjb25zdCBzb3VyY2VzOiAobnVtYmVyIHwgc3RyaW5nIHwgbnVsbClbXSA9IFtdO1xuICAgICAgICBmb3IgKGxldCBqID0gMDsgaiA8IHZhbHVlc0NvdW50OyBqKyspIHtcbiAgICAgICAgICBzb3VyY2VzLnB1c2goY29udGV4dFtiaW5kaW5nc1N0YXJ0UG9zaXRpb24gKyBqXSBhcyBudW1iZXIgfCBzdHJpbmcgfCBudWxsKTtcbiAgICAgICAgfVxuXG4gICAgICAgIGVudHJpZXNbcHJvcF0gPSB7cHJvcCwgZ3VhcmRNYXNrLCBzYW5pdGl6YXRpb25SZXF1aXJlZCwgdmFsdWVzQ291bnQsIGRlZmF1bHRWYWx1ZSwgc291cmNlc307XG4gICAgICB9XG5cbiAgICAgIGkgKz0gVFN0eWxpbmdDb250ZXh0SW5kZXguQmluZGluZ3NTdGFydE9mZnNldCArIHZhbHVlc0NvdW50O1xuICAgIH1cbiAgICByZXR1cm4gZW50cmllcztcbiAgfVxufVxuXG4vKipcbiAqIEEgaHVtYW4tcmVhZGFibGUgZGVidWcgc3VtbWFyeSBvZiB0aGUgc3R5bGluZyBkYXRhIHByZXNlbnQgZm9yIGEgYERlYnVnTm9kZWAgaW5zdGFuY2UuXG4gKlxuICogVGhpcyBjbGFzcyBpcyBkZXNpZ25lZCB0byBiZSB1c2VkIHdpdGhpbiB0ZXN0aW5nIGNvZGUgb3Igd2hlbiBhblxuICogYXBwbGljYXRpb24gaGFzIGBuZ0Rldk1vZGVgIGFjdGl2YXRlZC5cbiAqL1xuZXhwb3J0IGNsYXNzIE5vZGVTdHlsaW5nRGVidWcgaW1wbGVtZW50cyBEZWJ1Z1N0eWxpbmcge1xuICBwcml2YXRlIF9zYW5pdGl6ZXI6IFN0eWxlU2FuaXRpemVGbnxudWxsID0gbnVsbDtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAgIHB1YmxpYyBjb250ZXh0OiBUU3R5bGluZ0NvbnRleHQsIHByaXZhdGUgX2RhdGE6IExTdHlsaW5nRGF0YSxcbiAgICAgIHByaXZhdGUgX2lzQ2xhc3NCYXNlZD86IGJvb2xlYW4pIHt9XG5cbiAgLyoqXG4gICAqIE92ZXJyaWRlcyB0aGUgc2FuaXRpemVyIHVzZWQgdG8gcHJvY2VzcyBzdHlsZXMuXG4gICAqL1xuICBvdmVycmlkZVNhbml0aXplcihzYW5pdGl6ZXI6IFN0eWxlU2FuaXRpemVGbnxudWxsKSB7IHRoaXMuX3Nhbml0aXplciA9IHNhbml0aXplcjsgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEgZGV0YWlsZWQgc3VtbWFyeSBvZiBlYWNoIHN0eWxpbmcgZW50cnkgaW4gdGhlIGNvbnRleHQgYW5kXG4gICAqIHdoYXQgdGhlaXIgcnVudGltZSByZXByZXNlbnRhdGlvbiBpcy5cbiAgICpcbiAgICogU2VlIGBMU3R5bGluZ1N1bW1hcnlgLlxuICAgKi9cbiAgZ2V0IHN1bW1hcnkoKToge1trZXk6IHN0cmluZ106IExTdHlsaW5nU3VtbWFyeX0ge1xuICAgIGNvbnN0IGVudHJpZXM6IHtba2V5OiBzdHJpbmddOiBMU3R5bGluZ1N1bW1hcnl9ID0ge307XG4gICAgdGhpcy5fbWFwVmFsdWVzKChwcm9wOiBzdHJpbmcsIHZhbHVlOiBhbnksIGJpbmRpbmdJbmRleDogbnVtYmVyIHwgbnVsbCkgPT4ge1xuICAgICAgZW50cmllc1twcm9wXSA9IHtwcm9wLCB2YWx1ZSwgYmluZGluZ0luZGV4fTtcbiAgICB9KTtcbiAgICByZXR1cm4gZW50cmllcztcbiAgfVxuXG4gIC8qKlxuICAgKiBSZXR1cm5zIGEga2V5L3ZhbHVlIG1hcCBvZiBhbGwgdGhlIHN0eWxlcy9jbGFzc2VzIHRoYXQgd2VyZSBsYXN0IGFwcGxpZWQgdG8gdGhlIGVsZW1lbnQuXG4gICAqL1xuICBnZXQgdmFsdWVzKCk6IHtba2V5OiBzdHJpbmddOiBhbnl9IHtcbiAgICBjb25zdCBlbnRyaWVzOiB7W2tleTogc3RyaW5nXTogYW55fSA9IHt9O1xuICAgIHRoaXMuX21hcFZhbHVlcygocHJvcDogc3RyaW5nLCB2YWx1ZTogYW55KSA9PiB7IGVudHJpZXNbcHJvcF0gPSB2YWx1ZTsgfSk7XG4gICAgcmV0dXJuIGVudHJpZXM7XG4gIH1cblxuICBwcml2YXRlIF9tYXBWYWx1ZXMoZm46IChwcm9wOiBzdHJpbmcsIHZhbHVlOiBhbnksIGJpbmRpbmdJbmRleDogbnVtYmVyfG51bGwpID0+IGFueSkge1xuICAgIC8vIHRoZXJlIGlzIG5vIG5lZWQgdG8gc3RvcmUvdHJhY2sgYW4gZWxlbWVudCBpbnN0YW5jZS4gVGhlXG4gICAgLy8gZWxlbWVudCBpcyBvbmx5IHVzZWQgd2hlbiB0aGUgc3R5bGluZyBhbGdvcml0aG0gYXR0ZW1wdHMgdG9cbiAgICAvLyBzdHlsZSB0aGUgdmFsdWUgKGFuZCB3ZSBtb2NrIG91dCB0aGUgc3R5bGluZ0FwcGx5Rm4gYW55d2F5KS5cbiAgICBjb25zdCBtb2NrRWxlbWVudCA9IHt9IGFzIGFueTtcbiAgICBjb25zdCBoYXNNYXBzID0gZ2V0VmFsdWVzQ291bnQodGhpcy5jb250ZXh0LCBUU3R5bGluZ0NvbnRleHRJbmRleC5NYXBCaW5kaW5nc1Bvc2l0aW9uKSA+IDA7XG4gICAgaWYgKGhhc01hcHMpIHtcbiAgICAgIGFjdGl2ZVN0eWxpbmdNYXBGZWF0dXJlKCk7XG4gICAgfVxuXG4gICAgY29uc3QgbWFwRm46IEFwcGx5U3R5bGluZ0ZuID1cbiAgICAgICAgKHJlbmRlcmVyOiBhbnksIGVsZW1lbnQ6IFJFbGVtZW50LCBwcm9wOiBzdHJpbmcsIHZhbHVlOiBhbnksIGJpbmRpbmdJbmRleDogbnVtYmVyKSA9PiB7XG4gICAgICAgICAgZm4ocHJvcCwgdmFsdWUsIGJpbmRpbmdJbmRleCB8fCBudWxsKTtcbiAgICAgICAgfTtcblxuICAgIGNvbnN0IHNhbml0aXplciA9IHRoaXMuX2lzQ2xhc3NCYXNlZCA/IG51bGwgOiAodGhpcy5fc2FuaXRpemVyIHx8XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnZXRDdXJyZW50T3JMVmlld1Nhbml0aXplcih0aGlzLl9kYXRhIGFzIExWaWV3KSk7XG4gICAgYXBwbHlTdHlsaW5nKHRoaXMuY29udGV4dCwgbnVsbCwgbW9ja0VsZW1lbnQsIHRoaXMuX2RhdGEsIHRydWUsIG1hcEZuLCBzYW5pdGl6ZXIpO1xuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,259 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @fileoverview added by tsickle
|
|
3
|
+
* @suppress {checkTypes,extraRequire,missingOverride,missingReturn,unusedPrivateMembers,uselessCode} checked by tsc
|
|
4
|
+
*/
|
|
5
|
+
/**
|
|
6
|
+
* @license
|
|
7
|
+
* Copyright Google Inc. All Rights Reserved.
|
|
8
|
+
*
|
|
9
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
10
|
+
* found in the LICENSE file at https://angular.io/license
|
|
11
|
+
*/
|
|
12
|
+
import { SecurityContext } from '../../sanitization/security';
|
|
13
|
+
import { SANITIZER } from '../interfaces/view';
|
|
14
|
+
import { getProp as getOldProp, getSinglePropIndexValue as getOldSinglePropIndexValue } from '../styling/class_and_style_bindings';
|
|
15
|
+
import { getCurrentStyleSanitizer, setCurrentStyleSanitizer } from './state';
|
|
16
|
+
/** @type {?} */
|
|
17
|
+
const MAP_BASED_ENTRY_PROP_NAME = '--MAP--';
|
|
18
|
+
/**
|
|
19
|
+
* Creates a new instance of the `TStylingContext`.
|
|
20
|
+
*
|
|
21
|
+
* This function will also pre-fill the context with data
|
|
22
|
+
* for map-based bindings.
|
|
23
|
+
* @return {?}
|
|
24
|
+
*/
|
|
25
|
+
export function allocTStylingContext() {
|
|
26
|
+
// because map-based bindings deal with a dynamic set of values, there
|
|
27
|
+
// is no way to know ahead of time whether or not sanitization is required.
|
|
28
|
+
// For this reason the configuration will always mark sanitization as active
|
|
29
|
+
// (this means that when map-based values are applied then sanitization will
|
|
30
|
+
// be checked against each property).
|
|
31
|
+
/** @type {?} */
|
|
32
|
+
const mapBasedConfig = 1 /* SanitizationRequired */;
|
|
33
|
+
return [0 /* Initial */, 0, mapBasedConfig, 0, MAP_BASED_ENTRY_PROP_NAME];
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Temporary function that allows for a string-based property name to be
|
|
37
|
+
* obtained from an index-based property identifier.
|
|
38
|
+
*
|
|
39
|
+
* This function will be removed once the new styling refactor code (which
|
|
40
|
+
* lives inside of `render3/styling_next/`) replaces the existing styling
|
|
41
|
+
* implementation.
|
|
42
|
+
* @param {?} stylingContext
|
|
43
|
+
* @param {?} offset
|
|
44
|
+
* @param {?} directiveIndex
|
|
45
|
+
* @param {?} isClassBased
|
|
46
|
+
* @return {?}
|
|
47
|
+
*/
|
|
48
|
+
export function getBindingNameFromIndex(stylingContext, offset, directiveIndex, isClassBased) {
|
|
49
|
+
/** @type {?} */
|
|
50
|
+
const singleIndex = getOldSinglePropIndexValue(stylingContext, directiveIndex, offset, isClassBased);
|
|
51
|
+
return getOldProp(stylingContext, singleIndex);
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* @param {?} context
|
|
55
|
+
* @param {?} index
|
|
56
|
+
* @return {?}
|
|
57
|
+
*/
|
|
58
|
+
export function updateContextDirectiveIndex(context, index) {
|
|
59
|
+
context[1 /* MaxDirectiveIndexPosition */] = index;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* @param {?} context
|
|
63
|
+
* @return {?}
|
|
64
|
+
*/
|
|
65
|
+
function getConfig(context) {
|
|
66
|
+
return context[0 /* ConfigPosition */];
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* @param {?} context
|
|
70
|
+
* @param {?} value
|
|
71
|
+
* @return {?}
|
|
72
|
+
*/
|
|
73
|
+
export function setConfig(context, value) {
|
|
74
|
+
context[0 /* ConfigPosition */] = value;
|
|
75
|
+
}
|
|
76
|
+
/**
|
|
77
|
+
* @param {?} context
|
|
78
|
+
* @param {?} index
|
|
79
|
+
* @return {?}
|
|
80
|
+
*/
|
|
81
|
+
export function getProp(context, index) {
|
|
82
|
+
return (/** @type {?} */ (context[index + 2 /* PropOffset */]));
|
|
83
|
+
}
|
|
84
|
+
/**
|
|
85
|
+
* @param {?} context
|
|
86
|
+
* @param {?} index
|
|
87
|
+
* @return {?}
|
|
88
|
+
*/
|
|
89
|
+
function getPropConfig(context, index) {
|
|
90
|
+
return ((/** @type {?} */ (context[index + 0 /* ConfigAndGuardOffset */]))) &
|
|
91
|
+
1 /* Mask */;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* @param {?} context
|
|
95
|
+
* @param {?} index
|
|
96
|
+
* @return {?}
|
|
97
|
+
*/
|
|
98
|
+
export function isSanitizationRequired(context, index) {
|
|
99
|
+
return (getPropConfig(context, index) & 1 /* SanitizationRequired */) > 0;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* @param {?} context
|
|
103
|
+
* @param {?} index
|
|
104
|
+
* @return {?}
|
|
105
|
+
*/
|
|
106
|
+
export function getGuardMask(context, index) {
|
|
107
|
+
/** @type {?} */
|
|
108
|
+
const configGuardValue = (/** @type {?} */ (context[index + 0 /* ConfigAndGuardOffset */]));
|
|
109
|
+
return configGuardValue >> 1 /* TotalBits */;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* @param {?} context
|
|
113
|
+
* @param {?} index
|
|
114
|
+
* @param {?} maskValue
|
|
115
|
+
* @return {?}
|
|
116
|
+
*/
|
|
117
|
+
export function setGuardMask(context, index, maskValue) {
|
|
118
|
+
/** @type {?} */
|
|
119
|
+
const config = getPropConfig(context, index);
|
|
120
|
+
/** @type {?} */
|
|
121
|
+
const guardMask = maskValue << 1 /* TotalBits */;
|
|
122
|
+
context[index + 0 /* ConfigAndGuardOffset */] = config | guardMask;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* @param {?} context
|
|
126
|
+
* @param {?} index
|
|
127
|
+
* @return {?}
|
|
128
|
+
*/
|
|
129
|
+
export function getValuesCount(context, index) {
|
|
130
|
+
return (/** @type {?} */ (context[index + 1 /* ValuesCountOffset */]));
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* @param {?} context
|
|
134
|
+
* @param {?} index
|
|
135
|
+
* @param {?} offset
|
|
136
|
+
* @return {?}
|
|
137
|
+
*/
|
|
138
|
+
export function getBindingValue(context, index, offset) {
|
|
139
|
+
return (/** @type {?} */ (context[index + 3 /* BindingsStartOffset */ + offset]));
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* @param {?} context
|
|
143
|
+
* @param {?} index
|
|
144
|
+
* @return {?}
|
|
145
|
+
*/
|
|
146
|
+
export function getDefaultValue(context, index) {
|
|
147
|
+
/** @type {?} */
|
|
148
|
+
const valuesCount = getValuesCount(context, index);
|
|
149
|
+
return (/** @type {?} */ (context[index + 3 /* BindingsStartOffset */ + valuesCount - 1]));
|
|
150
|
+
}
|
|
151
|
+
/**
|
|
152
|
+
* Temporary function which determines whether or not a context is
|
|
153
|
+
* allowed to be flushed based on the provided directive index.
|
|
154
|
+
* @param {?} context
|
|
155
|
+
* @param {?} index
|
|
156
|
+
* @return {?}
|
|
157
|
+
*/
|
|
158
|
+
export function allowStylingFlush(context, index) {
|
|
159
|
+
return index === context[1 /* MaxDirectiveIndexPosition */];
|
|
160
|
+
}
|
|
161
|
+
/**
|
|
162
|
+
* @param {?} context
|
|
163
|
+
* @return {?}
|
|
164
|
+
*/
|
|
165
|
+
export function lockContext(context) {
|
|
166
|
+
setConfig(context, getConfig(context) | 1 /* Locked */);
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* @param {?} context
|
|
170
|
+
* @return {?}
|
|
171
|
+
*/
|
|
172
|
+
export function isContextLocked(context) {
|
|
173
|
+
return (getConfig(context) & 1 /* Locked */) > 0;
|
|
174
|
+
}
|
|
175
|
+
/**
|
|
176
|
+
* @param {?} context
|
|
177
|
+
* @return {?}
|
|
178
|
+
*/
|
|
179
|
+
export function getPropValuesStartPosition(context) {
|
|
180
|
+
return 5 /* MapBindingsBindingsStartPosition */ +
|
|
181
|
+
context[3 /* MapBindingsValuesCountPosition */];
|
|
182
|
+
}
|
|
183
|
+
/**
|
|
184
|
+
* @param {?} prop
|
|
185
|
+
* @return {?}
|
|
186
|
+
*/
|
|
187
|
+
export function isMapBased(prop) {
|
|
188
|
+
return prop === MAP_BASED_ENTRY_PROP_NAME;
|
|
189
|
+
}
|
|
190
|
+
/**
|
|
191
|
+
* @param {?} a
|
|
192
|
+
* @param {?} b
|
|
193
|
+
* @return {?}
|
|
194
|
+
*/
|
|
195
|
+
export function hasValueChanged(a, b) {
|
|
196
|
+
/** @type {?} */
|
|
197
|
+
const compareValueA = Array.isArray(a) ? a[0 /* RawValuePosition */] : a;
|
|
198
|
+
/** @type {?} */
|
|
199
|
+
const compareValueB = Array.isArray(b) ? b[0 /* RawValuePosition */] : b;
|
|
200
|
+
return compareValueA !== compareValueB;
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* Determines whether the provided styling value is truthy or falsy.
|
|
204
|
+
* @param {?} value
|
|
205
|
+
* @return {?}
|
|
206
|
+
*/
|
|
207
|
+
export function isStylingValueDefined(value) {
|
|
208
|
+
// the reason why null is compared against is because
|
|
209
|
+
// a CSS class value that is set to `false` must be
|
|
210
|
+
// respected (otherwise it would be treated as falsy).
|
|
211
|
+
// Empty string values are because developers usually
|
|
212
|
+
// set a value to an empty string to remove it.
|
|
213
|
+
return value != null && value !== '';
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Returns the current style sanitizer function for the given view.
|
|
217
|
+
*
|
|
218
|
+
* The default style sanitizer (which lives inside of `LView`) will
|
|
219
|
+
* be returned depending on whether the `styleSanitizer` instruction
|
|
220
|
+
* was called or not prior to any styling instructions running.
|
|
221
|
+
* @param {?} lView
|
|
222
|
+
* @return {?}
|
|
223
|
+
*/
|
|
224
|
+
export function getCurrentOrLViewSanitizer(lView) {
|
|
225
|
+
/** @type {?} */
|
|
226
|
+
const sanitizer = (/** @type {?} */ ((getCurrentStyleSanitizer() || lView[SANITIZER])));
|
|
227
|
+
if (sanitizer && typeof sanitizer !== 'function') {
|
|
228
|
+
setCurrentStyleSanitizer(sanitizer);
|
|
229
|
+
return sanitizeUsingSanitizerObject;
|
|
230
|
+
}
|
|
231
|
+
return sanitizer;
|
|
232
|
+
}
|
|
233
|
+
/**
|
|
234
|
+
* Style sanitization function that internally uses a `Sanitizer` instance to handle style
|
|
235
|
+
* sanitization.
|
|
236
|
+
* @type {?}
|
|
237
|
+
*/
|
|
238
|
+
const sanitizeUsingSanitizerObject = (/**
|
|
239
|
+
* @param {?} prop
|
|
240
|
+
* @param {?} value
|
|
241
|
+
* @param {?} mode
|
|
242
|
+
* @return {?}
|
|
243
|
+
*/
|
|
244
|
+
(prop, value, mode) => {
|
|
245
|
+
/** @type {?} */
|
|
246
|
+
const sanitizer = (/** @type {?} */ (getCurrentStyleSanitizer()));
|
|
247
|
+
if (sanitizer) {
|
|
248
|
+
if (mode & 2 /* SanitizeOnly */) {
|
|
249
|
+
return sanitizer.sanitize(SecurityContext.STYLE, value);
|
|
250
|
+
}
|
|
251
|
+
else {
|
|
252
|
+
return true;
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
return value;
|
|
256
|
+
});
|
|
257
|
+
const ɵ0 = sanitizeUsingSanitizerObject;
|
|
258
|
+
export { ɵ0 };
|
|
259
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL2NvcmUvc3JjL3JlbmRlcjMvc3R5bGluZ19uZXh0L3V0aWwudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7Ozs7Ozs7Ozs7QUFPQSxPQUFPLEVBQVksZUFBZSxFQUFDLE1BQU0sNkJBQTZCLENBQUM7QUFHdkUsT0FBTyxFQUFRLFNBQVMsRUFBQyxNQUFNLG9CQUFvQixDQUFDO0FBQ3BELE9BQU8sRUFBQyxPQUFPLElBQUksVUFBVSxFQUFFLHVCQUF1QixJQUFJLDBCQUEwQixFQUFDLE1BQU0scUNBQXFDLENBQUM7QUFHakksT0FBTyxFQUFDLHdCQUF3QixFQUFFLHdCQUF3QixFQUFDLE1BQU0sU0FBUyxDQUFDOztNQUVyRSx5QkFBeUIsR0FBRyxTQUFTOzs7Ozs7OztBQVEzQyxNQUFNLFVBQVUsb0JBQW9COzs7Ozs7O1VBTTVCLGNBQWMsK0JBQXNEO0lBQzFFLE9BQU8sa0JBQThCLENBQUMsRUFBRSxjQUFjLEVBQUUsQ0FBQyxFQUFFLHlCQUF5QixDQUFDLENBQUM7QUFDeEYsQ0FBQzs7Ozs7Ozs7Ozs7Ozs7QUFVRCxNQUFNLFVBQVUsdUJBQXVCLENBQ25DLGNBQThCLEVBQUUsTUFBYyxFQUFFLGNBQXNCLEVBQUUsWUFBcUI7O1VBQ3pGLFdBQVcsR0FDYiwwQkFBMEIsQ0FBQyxjQUFjLEVBQUUsY0FBYyxFQUFFLE1BQU0sRUFBRSxZQUFZLENBQUM7SUFDcEYsT0FBTyxVQUFVLENBQUMsY0FBYyxFQUFFLFdBQVcsQ0FBQyxDQUFDO0FBQ2pELENBQUM7Ozs7OztBQUVELE1BQU0sVUFBVSwyQkFBMkIsQ0FBQyxPQUF3QixFQUFFLEtBQWE7SUFDakYsT0FBTyxtQ0FBZ0QsR0FBRyxLQUFLLENBQUM7QUFDbEUsQ0FBQzs7Ozs7QUFFRCxTQUFTLFNBQVMsQ0FBQyxPQUF3QjtJQUN6QyxPQUFPLE9BQU8sd0JBQXFDLENBQUM7QUFDdEQsQ0FB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QSIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuKiBAbGljZW5zZVxuKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbipcbiogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuKi9cbmltcG9ydCB7U2FuaXRpemVyLCBTZWN1cml0eUNvbnRleHR9IGZyb20gJy4uLy4uL3Nhbml0aXphdGlvbi9zZWN1cml0eSc7XG5pbXBvcnQge1N0eWxlU2FuaXRpemVGbiwgU3R5bGVTYW5pdGl6ZU1vZGV9IGZyb20gJy4uLy4uL3Nhbml0aXphdGlvbi9zdHlsZV9zYW5pdGl6ZXInO1xuaW1wb3J0IHtTdHlsaW5nQ29udGV4dH0gZnJvbSAnLi4vaW50ZXJmYWNlcy9zdHlsaW5nJztcbmltcG9ydCB7TFZpZXcsIFNBTklUSVpFUn0gZnJvbSAnLi4vaW50ZXJmYWNlcy92aWV3JztcbmltcG9ydCB7Z2V0UHJvcCBhcyBnZXRPbGRQcm9wLCBnZXRTaW5nbGVQcm9wSW5kZXhWYWx1ZSBhcyBnZXRPbGRTaW5nbGVQcm9wSW5kZXhWYWx1ZX0gZnJvbSAnLi4vc3R5bGluZy9jbGFzc19hbmRfc3R5bGVfYmluZGluZ3MnO1xuXG5pbXBvcnQge0xTdHlsaW5nTWFwLCBMU3R5bGluZ01hcEluZGV4LCBUU3R5bGluZ0NvbmZpZ0ZsYWdzLCBUU3R5bGluZ0NvbnRleHQsIFRTdHlsaW5nQ29udGV4dEluZGV4LCBUU3R5bGluZ0NvbnRleHRQcm9wQ29uZmlnRmxhZ3N9IGZyb20gJy4vaW50ZXJmYWNlcyc7XG5pbXBvcnQge2dldEN1cnJlbnRTdHlsZVNhbml0aXplciwgc2V0Q3VycmVudFN0eWxlU2FuaXRpemVyfSBmcm9tICcuL3N0YXRlJztcblxuY29uc3QgTUFQX0JBU0VEX0VOVFJZX1BST1BfTkFNRSA9ICctLU1BUC0tJztcblxuLyoqXG4gKiBDcmVhdGVzIGEgbmV3IGluc3RhbmNlIG9mIHRoZSBgVFN0eWxpbmdDb250ZXh0YC5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYWxzbyBwcmUtZmlsbCB0aGUgY29udGV4dCB3aXRoIGRhdGFcbiAqIGZvciBtYXAtYmFzZWQgYmluZGluZ3MuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhbGxvY1RTdHlsaW5nQ29udGV4dCgpOiBUU3R5bGluZ0NvbnRleHQge1xuICAvLyBiZWNhdXNlIG1hcC1iYXNlZCBiaW5kaW5ncyBkZWFsIHdpdGggYSBkeW5hbWljIHNldCBvZiB2YWx1ZXMsIHRoZXJlXG4gIC8vIGlzIG5vIHdheSB0byBrbm93IGFoZWFkIG9mIHRpbWUgd2hldGhlciBvciBub3Qgc2FuaXRpemF0aW9uIGlzIHJlcXVpcmVkLlxuICAvLyBGb3IgdGhpcyByZWFzb24gdGhlIGNvbmZpZ3VyYXRpb24gd2lsbCBhbHdheXMgbWFyayBzYW5pdGl6YXRpb24gYXMgYWN0aXZlXG4gIC8vICh0aGlzIG1lYW5zIHRoYXQgd2hlbiBtYXAtYmFzZWQgdmFsdWVzIGFyZSBhcHBsaWVkIHRoZW4gc2FuaXRpemF0aW9uIHdpbGxcbiAgLy8gYmUgY2hlY2tlZCBhZ2FpbnN0IGVhY2ggcHJvcGVydHkpLlxuICBjb25zdCBtYXBCYXNlZENvbmZpZyA9IFRTdHlsaW5nQ29udGV4dFByb3BDb25maWdGbGFncy5TYW5pdGl6YXRpb25SZXF1aXJlZDtcbiAgcmV0dXJuIFtUU3R5bGluZ0NvbmZpZ0ZsYWdzLkluaXRpYWwsIDAsIG1hcEJhc2VkQ29uZmlnLCAwLCBNQVBfQkFTRURfRU5UUllfUFJPUF9OQU1FXTtcbn1cblxuLyoqXG4gKiBUZW1wb3JhcnkgZnVuY3Rpb24gdGhhdCBhbGxvd3MgZm9yIGEgc3RyaW5nLWJhc2VkIHByb3BlcnR5IG5hbWUgdG8gYmVcbiAqIG9idGFpbmVkIGZyb20gYW4gaW5kZXgtYmFzZWQgcHJvcGVydHkgaWRlbnRpZmllci5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHdpbGwgYmUgcmVtb3ZlZCBvbmNlIHRoZSBuZXcgc3R5bGluZyByZWZhY3RvciBjb2RlICh3aGljaFxuICogbGl2ZXMgaW5zaWRlIG9mIGByZW5kZXIzL3N0eWxpbmdfbmV4dC9gKSByZXBsYWNlcyB0aGUgZXhpc3Rpbmcgc3R5bGluZ1xuICogaW1wbGVtZW50YXRpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRCaW5kaW5nTmFtZUZyb21JbmRleChcbiAgICBzdHlsaW5nQ29udGV4dDogU3R5bGluZ0NvbnRleHQsIG9mZnNldDogbnVtYmVyLCBkaXJlY3RpdmVJbmRleDogbnVtYmVyLCBpc0NsYXNzQmFzZWQ6IGJvb2xlYW4pIHtcbiAgY29uc3Qgc2luZ2xlSW5kZXggPVxuICAgICAgZ2V0T2xkU2luZ2xlUHJvcEluZGV4VmFsdWUoc3R5bGluZ0NvbnRleHQsIGRpcmVjdGl2ZUluZGV4LCBvZmZzZXQsIGlzQ2xhc3NCYXNlZCk7XG4gIHJldHVybiBnZXRPbGRQcm9wKHN0eWxpbmdDb250ZXh0LCBzaW5nbGVJbmRleCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiB1cGRhdGVDb250ZXh0RGlyZWN0aXZlSW5kZXgoY29udGV4dDogVFN0eWxpbmdDb250ZXh0LCBpbmRleDogbnVtYmVyKSB7XG4gIGNvbnRleHRbVFN0eWxpbmdDb250ZXh0SW5kZXguTWF4RGlyZWN0aXZlSW5kZXhQb3NpdGlvbl0gPSBpbmRleDtcbn1cblxuZnVuY3Rpb24gZ2V0Q29uZmlnKGNvbnRleHQ6IFRTdHlsaW5nQ29udGV4dCkge1xuICByZXR1cm4gY29udGV4dFtUU3R5bGluZ0NvbnRleHRJbmRleC5Db25maWdQb3NpdGlvbl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBzZXRDb25maWcoY29udGV4dDogVFN0eWxpbmdDb250ZXh0LCB2YWx1ZTogbnVtYmVyKSB7XG4gIGNvbnRleHRbVFN0eWxpbmdDb250ZXh0SW5kZXguQ29uZmlnUG9zaXRpb25dID0gdmFsdWU7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRQcm9wKGNvbnRleHQ6IFRTdHlsaW5nQ29udGV4dCwgaW5kZXg6IG51bWJlcikge1xuICByZXR1cm4gY29udGV4dFtpbmRleCArIFRTdHlsaW5nQ29udGV4dEluZGV4LlByb3BPZmZzZXRdIGFzIHN0cmluZztcbn1cblxuZnVuY3Rpb24gZ2V0UHJvcENvbmZpZyhjb250ZXh0OiBUU3R5bGluZ0NvbnRleHQsIGluZGV4OiBudW1iZXIpOiBudW1iZXIge1xuICByZXR1cm4gKGNvbnRleHRbaW5kZXggKyBUU3R5bGluZ0NvbnRleHRJbmRleC5Db25maWdBbmRHdWFyZE9mZnNldF0gYXMgbnVtYmVyKSAmXG4gICAgICBUU3R5bGluZ0NvbnRleHRQcm9wQ29uZmlnRmxhZ3MuTWFzaztcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzU2FuaXRpemF0aW9uUmVxdWlyZWQoY29udGV4dDogVFN0eWxpbmdDb250ZXh0LCBpbmRleDogbnVtYmVyKSB7XG4gIHJldHVybiAoZ2V0UHJvcENvbmZpZyhjb250ZXh0LCBpbmRleCkgJiBUU3R5bGluZ0NvbnRleHRQcm9wQ29uZmlnRmxhZ3MuU2FuaXRpemF0aW9uUmVxdWlyZWQpID4gMDtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEd1YXJkTWFzayhjb250ZXh0OiBUU3R5bGluZ0NvbnRleHQsIGluZGV4OiBudW1iZXIpIHtcbiAgY29uc3QgY29uZmlnR3VhcmRWYWx1ZSA9IGNvbnRleHRbaW5kZXggKyBUU3R5bGluZ0NvbnRleHRJbmRleC5Db25maWdBbmRHdWFyZE9mZnNldF0gYXMgbnVtYmVyO1xuICByZXR1cm4gY29uZmlnR3VhcmRWYWx1ZSA+PiBUU3R5bGluZ0NvbnRleHRQcm9wQ29uZmlnRmxhZ3MuVG90YWxCaXRzO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gc2V0R3VhcmRNYXNrKGNvbnRleHQ6IFRTdHlsaW5nQ29udGV4dCwgaW5kZXg6IG51bWJlciwgbWFza1ZhbHVlOiBudW1iZXIpIHtcbiAgY29uc3QgY29uZmlnID0gZ2V0UHJvcENvbmZpZyhjb250ZXh0LCBpbmRleCk7XG4gIGNvbnN0IGd1YXJkTWFzayA9IG1hc2tWYWx1ZSA8PCBUU3R5bGluZ0NvbnRleHRQcm9wQ29uZmlnRmxhZ3MuVG90YWxCaXRzO1xuICBjb250ZXh0W2luZGV4ICsgVFN0eWxpbmdDb250ZXh0SW5kZXguQ29uZmlnQW5kR3VhcmRPZmZzZXRdID0gY29uZmlnIHwgZ3VhcmRNYXNrO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFsdWVzQ291bnQoY29udGV4dDogVFN0eWxpbmdDb250ZXh0LCBpbmRleDogbnVtYmVyKSB7XG4gIHJldHVybiBjb250ZXh0W2luZGV4ICsgVFN0eWxpbmdDb250ZXh0SW5kZXguVmFsdWVzQ291bnRPZmZzZXRdIGFzIG51bWJlcjtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGdldEJpbmRpbmdWYWx1ZShjb250ZXh0OiBUU3R5bGluZ0NvbnRleHQsIGluZGV4OiBudW1iZXIsIG9mZnNldDogbnVtYmVyKSB7XG4gIHJldHVybiBjb250ZXh0W2luZGV4ICsgVFN0eWxpbmdDb250ZXh0SW5kZXguQmluZGluZ3NTdGFydE9mZnNldCArIG9mZnNldF0gYXMgbnVtYmVyIHwgc3RyaW5nO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGVmYXVsdFZhbHVlKGNvbnRleHQ6IFRTdHlsaW5nQ29udGV4dCwgaW5kZXg6IG51bWJlcik6IHN0cmluZ3xib29sZWFufG51bGwge1xuICBjb25zdCB2YWx1ZXNDb3VudCA9IGdldFZhbHVlc0NvdW50KGNvbnRleHQsIGluZGV4KTtcbiAgcmV0dXJuIGNvbnRleHRbaW5kZXggKyBUU3R5bGluZ0NvbnRleHRJbmRleC5CaW5kaW5nc1N0YXJ0T2Zmc2V0ICsgdmFsdWVzQ291bnQgLSAxXSBhcyBzdHJpbmcgfFxuICAgICAgYm9vbGVhbiB8IG51bGw7XG59XG5cbi8qKlxuICogVGVtcG9yYXJ5IGZ1bmN0aW9uIHdoaWNoIGRldGVybWluZXMgd2hldGhlciBvciBub3QgYSBjb250ZXh0IGlzXG4gKiBhbGxvd2VkIHRvIGJlIGZsdXNoZWQgYmFzZWQgb24gdGhlIHByb3ZpZGVkIGRpcmVjdGl2ZSBpbmRleC5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGFsbG93U3R5bGluZ0ZsdXNoKGNvbnRleHQ6IFRTdHlsaW5nQ29udGV4dCwgaW5kZXg6IG51bWJlcikge1xuICByZXR1cm4gaW5kZXggPT09IGNvbnRleHRbVFN0eWxpbmdDb250ZXh0SW5kZXguTWF4RGlyZWN0aXZlSW5kZXhQb3NpdGlvbl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBsb2NrQ29udGV4dChjb250ZXh0OiBUU3R5bGluZ0NvbnRleHQpIHtcbiAgc2V0Q29uZmlnKGNvbnRleHQsIGdldENvbmZpZyhjb250ZXh0KSB8IFRTdHlsaW5nQ29uZmlnRmxhZ3MuTG9ja2VkKTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGlzQ29udGV4dExvY2tlZChjb250ZXh0OiBUU3R5bGluZ0NvbnRleHQpOiBib29sZWFuIHtcbiAgcmV0dXJuIChnZXRDb25maWcoY29udGV4dCkgJiBUU3R5bGluZ0NvbmZpZ0ZsYWdzLkxvY2tlZCkgPiAwO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UHJvcFZhbHVlc1N0YXJ0UG9zaXRpb24oY29udGV4dDogVFN0eWxpbmdDb250ZXh0KSB7XG4gIHJldHVybiBUU3R5bGluZ0NvbnRleHRJbmRleC5NYXBCaW5kaW5nc0JpbmRpbmdzU3RhcnRQb3NpdGlvbiArXG4gICAgICBjb250ZXh0W1RTdHlsaW5nQ29udGV4dEluZGV4Lk1hcEJpbmRpbmdzVmFsdWVzQ291bnRQb3NpdGlvbl07XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBpc01hcEJhc2VkKHByb3A6IHN0cmluZykge1xuICByZXR1cm4gcHJvcCA9PT0gTUFQX0JBU0VEX0VOVFJZX1BST1BfTkFNRTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIGhhc1ZhbHVlQ2hhbmdlZChcbiAgICBhOiBMU3R5bGluZ01hcCB8IG51bWJlciB8IFN0cmluZyB8IHN0cmluZyB8IG51bGwgfCBib29sZWFuIHwgdW5kZWZpbmVkIHwge30sXG4gICAgYjogTFN0eWxpbmdNYXAgfCBudW1iZXIgfCBTdHJpbmcgfCBzdHJpbmcgfCBudWxsIHwgYm9vbGVhbiB8IHVuZGVmaW5lZCB8IHt9KTogYm9vbGVhbiB7XG4gIGNvbnN0IGNvbXBhcmVWYWx1ZUEgPSBBcnJheS5pc0FycmF5KGEpID8gYVtMU3R5bGluZ01hcEluZGV4LlJhd1ZhbHVlUG9zaXRpb25dIDogYTtcbiAgY29uc3QgY29tcGFyZVZhbHVlQiA9IEFycmF5LmlzQXJyYXkoYikgPyBiW0xTdHlsaW5nTWFwSW5kZXguUmF3VmFsdWVQb3NpdGlvbl0gOiBiO1xuICByZXR1cm4gY29tcGFyZVZhbHVlQSAhPT0gY29tcGFyZVZhbHVlQjtcbn1cblxuLyoqXG4gKiBEZXRlcm1pbmVzIHdoZXRoZXIgdGhlIHByb3ZpZGVkIHN0eWxpbmcgdmFsdWUgaXMgdHJ1dGh5IG9yIGZhbHN5LlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNTdHlsaW5nVmFsdWVEZWZpbmVkKHZhbHVlOiBhbnkpIHtcbiAgLy8gdGhlIHJlYXNvbiB3aHkgbnVsbCBpcyBjb21wYXJlZCBhZ2FpbnN0IGlzIGJlY2F1c2VcbiAgLy8gYSBDU1MgY2xhc3MgdmFsdWUgdGhhdCBpcyBzZXQgdG8gYGZhbHNlYCBtdXN0IGJlXG4gIC8vIHJlc3BlY3RlZCAob3RoZXJ3aXNlIGl0IHdvdWxkIGJlIHRyZWF0ZWQgYXMgZmFsc3kpLlxuICAvLyBFbXB0eSBzdHJpbmcgdmFsdWVzIGFyZSBiZWNhdXNlIGRldmVsb3BlcnMgdXN1YWxseVxuICAvLyBzZXQgYSB2YWx1ZSB0byBhbiBlbXB0eSBzdHJpbmcgdG8gcmVtb3ZlIGl0LlxuICByZXR1cm4gdmFsdWUgIT0gbnVsbCAmJiB2YWx1ZSAhPT0gJyc7XG59XG5cbi8qKlxuICogUmV0dXJucyB0aGUgY3VycmVudCBzdHlsZSBzYW5pdGl6ZXIgZnVuY3Rpb24gZm9yIHRoZSBnaXZlbiB2aWV3LlxuICpcbiAqIFRoZSBkZWZhdWx0IHN0eWxlIHNhbml0aXplciAod2hpY2ggbGl2ZXMgaW5zaWRlIG9mIGBMVmlld2ApIHdpbGxcbiAqIGJlIHJldHVybmVkIGRlcGVuZGluZyBvbiB3aGV0aGVyIHRoZSBgc3R5bGVTYW5pdGl6ZXJgIGluc3RydWN0aW9uXG4gKiB3YXMgY2FsbGVkIG9yIG5vdCBwcmlvciB0byBhbnkgc3R5bGluZyBpbnN0cnVjdGlvbnMgcnVubmluZy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGdldEN1cnJlbnRPckxWaWV3U2FuaXRpemVyKGxWaWV3OiBMVmlldyk6IFN0eWxlU2FuaXRpemVGbnxudWxsIHtcbiAgY29uc3Qgc2FuaXRpemVyOiBTdHlsZVNhbml0aXplRm58bnVsbCA9IChnZXRDdXJyZW50U3R5bGVTYW5pdGl6ZXIoKSB8fCBsVmlld1tTQU5JVElaRVJdKSBhcyBhbnk7XG4gIGlmIChzYW5pdGl6ZXIgJiYgdHlwZW9mIHNhbml0aXplciAhPT0gJ2Z1bmN0aW9uJykge1xuICAgIHNldEN1cnJlbnRTdHlsZVNhbml0aXplcihzYW5pdGl6ZXIpO1xuICAgIHJldHVybiBzYW5pdGl6ZVVzaW5nU2FuaXRpemVyT2JqZWN0O1xuICB9XG4gIHJldHVybiBzYW5pdGl6ZXI7XG59XG5cbi8qKlxuICogU3R5bGUgc2FuaXRpemF0aW9uIGZ1bmN0aW9uIHRoYXQgaW50ZXJuYWxseSB1c2VzIGEgYFNhbml0aXplcmAgaW5zdGFuY2UgdG8gaGFuZGxlIHN0eWxlXG4gKiBzYW5pdGl6YXRpb24uXG4gKi9cbmNvbnN0IHNhbml0aXplVXNpbmdTYW5pdGl6ZXJPYmplY3Q6IFN0eWxlU2FuaXRpemVGbiA9XG4gICAgKHByb3A6IHN0cmluZywgdmFsdWU6IHN0cmluZywgbW9kZTogU3R5bGVTYW5pdGl6ZU1vZGUpID0+IHtcbiAgICAgIGNvbnN0IHNhbml0aXplciA9IGdldEN1cnJlbnRTdHlsZVNhbml0aXplcigpIGFzIFNhbml0aXplcjtcbiAgICAgIGlmIChzYW5pdGl6ZXIpIHtcbiAgICAgICAgaWYgKG1vZGUgJiBTdHlsZVNhbml0aXplTW9kZS5TYW5pdGl6ZU9ubHkpIHtcbiAgICAgICAgICByZXR1cm4gc2FuaXRpemVyLnNhbml0aXplKFNlY3VyaXR5Q29udGV4dC5TVFlMRSwgdmFsdWUpO1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICByZXR1cm4gdmFsdWU7XG4gICAgfTtcbiJdfQ==
|
|
@@ -111,9 +111,10 @@ export function attrsStylingIndexOf(attrs, startIndex) {
|
|
|
111
111
|
* attribute values in a `TAttributes` array are only the names of attributes,
|
|
112
112
|
* and not name-value pairs.
|
|
113
113
|
* @param {?} marker The attribute marker to test.
|
|
114
|
-
* @return {?} true if the marker is a "name-only" marker (e.g. `Bindings` or `
|
|
114
|
+
* @return {?} true if the marker is a "name-only" marker (e.g. `Bindings`, `Template` or `I18n`).
|
|
115
115
|
*/
|
|
116
116
|
export function isNameOnlyAttributeMarker(marker) {
|
|
117
|
-
return marker === 3 /* Bindings */ || marker === 4 /* Template
|
|
117
|
+
return marker === 3 /* Bindings */ || marker === 4 /* Template */ ||
|
|
118
|
+
marker === 6 /* I18n */;
|
|
118
119
|
}
|
|
119
|
-
//# sourceMappingURL=data:application/json;base64,
|
|
120
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXR0cnNfdXRpbHMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy9jb3JlL3NyYy9yZW5kZXIzL3V0aWwvYXR0cnNfdXRpbHMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7OztBQVNBLE9BQU8sRUFBZ0Msb0JBQW9CLEVBQUMsTUFBTSx3QkFBd0IsQ0FBQztBQUMzRixPQUFPLEVBQUMsUUFBUSxFQUFDLE1BQU0sb0JBQW9CLENBQUM7QUFDNUMsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLFVBQVUsQ0FBQztBQUNsQyxPQUFPLEVBQUMsZUFBZSxFQUFDLE1BQU0saUJBQWlCLENBQUM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUErQmhELE1BQU0sVUFBVSxlQUFlLENBQUMsTUFBZ0IsRUFBRSxLQUFrQjs7VUFDNUQsUUFBUSxHQUFHLFFBQVEsRUFBRSxDQUFDLFFBQVEsQ0FBQzs7VUFDL0IsTUFBTSxHQUFHLG9CQUFvQixDQUFDLFFBQVEsQ0FBQzs7UUFFekMsQ0FBQyxHQUFHLENBQUM7SUFDVCxPQUFPLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFOztjQUNqQixLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUN0QixJQUFJLE9BQU8sS0FBSyxLQUFLLFFBQVEsRUFBRTtZQUM3Qix3RUFBd0U7WUFDeEUsK0NBQStDO1lBQy9DLElBQUksS0FBSyx5QkFBaUMsRUFBRTtnQkFDMUMsTUFBTTthQUNQO1lBRUQsbURBQW1EO1lBQ25ELG1DQUFtQztZQUNuQyxDQUFDLEVBQUUsQ0FBQzs7a0JBRUUsWUFBWSxHQUFHLG1CQUFBLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFVOztrQkFDbkMsUUFBUSxHQUFHLG1CQUFBLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFVOztrQkFDL0IsT0FBTyxHQUFHLG1CQUFBLEtBQUssQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFVO1lBQ3BDLFNBQVMsSUFBSSxTQUFTLENBQUMsb0JBQW9CLEVBQUUsQ0FBQztZQUM5QyxNQUFNLENBQUMsQ0FBQztnQkFDSixDQUFDLG1CQUFBLFFBQVEsRUFBdUIsQ0FBQyxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsUUFBUSxFQUFFLE9BQU8sRUFBRSxZQUFZLENBQUMsQ0FBQyxDQUFDO2dCQUN6RixNQUFNLENBQUMsY0FBYyxDQUFDLFlBQVksRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7U0FDNUQ7YUFBTTs7O2tCQUVDLFFBQVEsR0FBRyxtQkFBQSxLQUFLLEVBQVU7O2tCQUMxQixPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO1lBQzFCLHNCQUFzQjtZQUN0QixTQUFTLElBQUksU0FBUyxDQUFDLG9CQUFvQixFQUFFLENBQUM7WUFDOUMsSUFBSSxlQUFlLENBQUMsUUFBUSxDQUFDLEVBQUU7Z0JBQzdCLElBQUksTUFBTSxFQUFFO29CQUNWLENBQUMsbUJBQUEsUUFBUSxFQUF1QixDQUFDLENBQUMsV0FBVyxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsT0FBTyxDQUFDLENBQUM7aUJBQzFFO2FBQ0Y7aUJBQU07Z0JBQ0wsTUFBTSxDQUFDLENBQUM7b0JBQ0osQ0FBQyxtQkFBQSxRQUFRLEVBQXVCLENBQUM7eUJBQzVCLFlBQVksQ0FBQyxNQUFNLEVBQUUsbUJBQUEsUUFBUSxFQUFVLEVBQUUsbUJBQUEsT0FBTyxFQUFVLENBQUMsQ0FBQyxDQUFDO29CQUNsRSxNQUFNLENBQUMsWUFBWSxDQUFDLG1CQUFBLFFBQVEsRUFBVSxFQUFFLG1CQUFBLE9BQU8sRUFBVSxDQUFDLENBQUM7YUFDaEU7WUFDRCxDQUFDLEVBQUUsQ0FBQztTQUNMO0tBQ0Y7SUFFRCw4RUFBOEU7SUFDOUUsK0VBQStFO0lBQy9FLGlGQUFpRjtJQUNqRixpQkFBaUI7SUFDakIsT0FBTyxDQUFDLENBQUM7QUFDWCxDQUFDOzs7Ozs7QUFHRCxNQUFNLFVBQVUsbUJBQW1CLENBQUMsS0FBa0IsRUFBRSxVQUFrQjtJQUN4RSxLQUFLLElBQUksQ0FBQyxHQUFHLFVBQVUsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTs7Y0FDeEMsR0FBRyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDcEIsSUFBSSxHQUFHLG9CQUE0QixJQUFJLEdBQUcsbUJBQTJCLEVBQUU7WUFDckUsT0FBTyxDQUFDLENBQUM7U0FDVjtLQUNGO0lBQ0QsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUNaLENBQUM7Ozs7Ozs7O0FBU0QsTUFBTSxVQUFVLHlCQUF5QixDQUFDLE1BQThDO0lBQ3RGLE9BQU8sTUFBTSxxQkFBNkIsSUFBSSxNQUFNLHFCQUE2QjtRQUM3RSxNQUFNLGlCQUF5QixDQUFDO0FBQ3RDLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIEluYy4gQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQge0F0dHJpYnV0ZU1hcmtlciwgVEF0dHJpYnV0ZXN9IGZyb20gJy4uL2ludGVyZmFjZXMvbm9kZSc7XG5pbXBvcnQge0Nzc1NlbGVjdG9yfSBmcm9tICcuLi9pbnRlcmZhY2VzL3Byb2plY3Rpb24nO1xuaW1wb3J0IHtQcm9jZWR1cmFsUmVuZGVyZXIzLCBSRWxlbWVudCwgaXNQcm9jZWR1cmFsUmVuZGVyZXJ9IGZyb20gJy4uL2ludGVyZmFjZXMvcmVuZGVyZXInO1xuaW1wb3J0IHtSRU5ERVJFUn0gZnJvbSAnLi4vaW50ZXJmYWNlcy92aWV3JztcbmltcG9ydCB7Z2V0TFZpZXd9IGZyb20gJy4uL3N0YXRlJztcbmltcG9ydCB7aXNBbmltYXRpb25Qcm9wfSBmcm9tICcuLi9zdHlsaW5nL3V0aWwnO1xuXG5cblxuLyoqXG4gKiBBc3NpZ25zIGFsbCBhdHRyaWJ1dGUgdmFsdWVzIHRvIHRoZSBwcm92aWRlZCBlbGVtZW50IHZpYSB0aGUgaW5mZXJyZWQgcmVuZGVyZXIuXG4gKlxuICogVGhpcyBmdW5jdGlvbiBhY2NlcHRzIHR3byBmb3JtcyBvZiBhdHRyaWJ1dGUgZW50cmllczpcbiAqXG4gKiBkZWZhdWx0OiAoa2V5LCB2YWx1ZSk6XG4gKiAgYXR0cnMgPSBba2V5MSwgdmFsdWUxLCBrZXkyLCB2YWx1ZTJdXG4gKlxuICogbmFtZXNwYWNlZDogKE5BTUVTUEFDRV9NQVJLRVIsIHVyaSwgbmFtZSwgdmFsdWUpXG4gKiAgYXR0cnMgPSBbTkFNRVNQQUNFX01BUktFUiwgdXJpLCBuYW1lLCB2YWx1ZSwgTkFNRVNQQUNFX01BUktFUiwgdXJpLCBuYW1lLCB2YWx1ZV1cbiAqXG4gKiBUaGUgYGF0dHJzYCBhcnJheSBjYW4gY29udGFpbiBhIG1peCBvZiBib3RoIHRoZSBkZWZhdWx0IGFuZCBuYW1lc3BhY2VkIGVudHJpZXMuXG4gKiBUaGUgXCJkZWZhdWx0XCIgdmFsdWVzIGFyZSBzZXQgd2l0aG91dCBhIG1hcmtlciwgYnV0IGlmIHRoZSBmdW5jdGlvbiBjb21lcyBhY3Jvc3NcbiAqIGEgbWFya2VyIHZhbHVlIHRoZW4gaXQgd2lsbCBhdHRlbXB0IHRvIHNldCBhIG5hbWVzcGFjZWQgdmFsdWUuIElmIHRoZSBtYXJrZXIgaXNcbiAqIG5vdCBvZiBhIG5hbWVzcGFjZWQgdmFsdWUgdGhlbiB0aGUgZnVuY3Rpb24gd2lsbCBxdWl0IGFuZCByZXR1cm4gdGhlIGluZGV4IHZhbHVlXG4gKiB3aGVyZSBpdCBzdG9wcGVkIGR1cmluZyB0aGUgaXRlcmF0aW9uIG9mIHRoZSBhdHRycyBhcnJheS5cbiAqXG4gKiBTZWUgW0F0dHJpYnV0ZU1hcmtlcl0gdG8gdW5kZXJzdGFuZCB3aGF0IHRoZSBuYW1lc3BhY2UgbWFya2VyIHZhbHVlIGlzLlxuICpcbiAqIE5vdGUgdGhhdCB0aGlzIGluc3RydWN0aW9uIGRvZXMgbm90IHN1cHBvcnQgYXNzaWduaW5nIHN0eWxlIGFuZCBjbGFzcyB2YWx1ZXMgdG9cbiAqIGFuIGVsZW1lbnQuIFNlZSBgZWxlbWVudFN0YXJ0YCBhbmQgYGVsZW1lbnRIb3N0QXR0cnNgIHRvIGxlYXJuIGhvdyBzdHlsaW5nIHZhbHVlc1xuICogYXJlIGFwcGxpZWQgdG8gYW4gZWxlbWVudC5cbiAqXG4gKiBAcGFyYW0gbmF0aXZlIFRoZSBlbGVtZW50IHRoYXQgdGhlIGF0dHJpYnV0ZXMgd2lsbCBiZSBhc3NpZ25lZCB0b1xuICogQHBhcmFtIGF0dHJzIFRoZSBhdHRyaWJ1dGUgYXJyYXkgb2YgdmFsdWVzIHRoYXQgd2lsbCBiZSBhc3NpZ25lZCB0byB0aGUgZWxlbWVudFxuICogQHJldHVybnMgdGhlIGluZGV4IHZhbHVlIHRoYXQgd2FzIGxhc3QgYWNjZXNzZWQgaW4gdGhlIGF0dHJpYnV0ZXMgYXJyYXlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHNldFVwQXR0cmlidXRlcyhuYXRpdmU6IFJFbGVtZW50LCBhdHRyczogVEF0dHJpYnV0ZXMpOiBudW1iZXIge1xuICBjb25zdCByZW5kZXJlciA9IGdldExWaWV3KClbUkVOREVSRVJdO1xuICBjb25zdCBpc1Byb2MgPSBpc1Byb2NlZHVyYWxSZW5kZXJlcihyZW5kZXJlcik7XG5cbiAgbGV0IGkgPSAwO1xuICB3aGlsZSAoaSA8IGF0dHJzLmxlbmd0aCkge1xuICAgIGNvbnN0IHZhbHVlID0gYXR0cnNbaV07XG4gICAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ251bWJlcicpIHtcbiAgICAgIC8vIG9ubHkgbmFtZXNwYWNlcyBhcmUgc3VwcG9ydGVkLiBPdGhlciB2YWx1ZSB0eXBlcyAoc3VjaCBhcyBzdHlsZS9jbGFzc1xuICAgICAgLy8gZW50cmllcykgYXJlIG5vdCBzdXBwb3J0ZWQgaW4gdGhpcyBmdW5jdGlvbi5cbiAgICAgIGlmICh2YWx1ZSAhPT0gQXR0cmlidXRlTWFya2VyLk5hbWVzcGFjZVVSSSkge1xuICAgICAgICBicmVhaztcbiAgICAgIH1cblxuICAgICAgLy8gd2UganVzdCBsYW5kZWQgb24gdGhlIG1hcmtlciB2YWx1ZSAuLi4gdGhlcmVmb3JlXG4gICAgICAvLyB3ZSBzaG91bGQgc2tpcCB0byB0aGUgbmV4dCBlbnRyeVxuICAgICAgaSsrO1xuXG4gICAgICBjb25zdCBuYW1lc3BhY2VVUkkgPSBhdHRyc1tpKytdIGFzIHN0cmluZztcbiAgICAgIGNvbnN0IGF0dHJOYW1lID0gYXR0cnNbaSsrXSBhcyBzdHJpbmc7XG4gICAgICBjb25zdCBhdHRyVmFsID0gYXR0cnNbaSsrXSBhcyBzdHJpbmc7XG4gICAgICBuZ0Rldk1vZGUgJiYgbmdEZXZNb2RlLnJlbmRlcmVyU2V0QXR0cmlidXRlKys7XG4gICAgICBpc1Byb2MgP1xuICAgICAgICAgIChyZW5kZXJlciBhcyBQcm9jZWR1cmFsUmVuZGVyZXIzKS5zZXRBdHRyaWJ1dGUobmF0aXZlLCBhdHRyTmFtZSwgYXR0clZhbCwgbmFtZXNwYWNlVVJJKSA6XG4gICAgICAgICAgbmF0aXZlLnNldEF0dHJpYnV0ZU5TKG5hbWVzcGFjZVVSSSwgYXR0ck5hbWUsIGF0dHJWYWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICAvLyBhdHRyTmFtZSBpcyBzdHJpbmc7XG4gICAgICBjb25zdCBhdHRyTmFtZSA9IHZhbHVlIGFzIHN0cmluZztcbiAgICAgIGNvbnN0IGF0dHJWYWwgPSBhdHRyc1srK2ldO1xuICAgICAgLy8gU3RhbmRhcmQgYXR0cmlidXRlc1xuICAgICAgbmdEZXZNb2RlICYmIG5nRGV2TW9kZS5yZW5kZXJlclNldEF0dHJpYnV0ZSsrO1xuICAgICAgaWYgKGlzQW5pbWF0aW9uUHJvcChhdHRyTmFtZSkpIHtcbiAgICAgICAgaWYgKGlzUHJvYykge1xuICAgICAgICAgIChyZW5kZXJlciBhcyBQcm9jZWR1cmFsUmVuZGVyZXIzKS5zZXRQcm9wZXJ0eShuYXRpdmUsIGF0dHJOYW1lLCBhdHRyVmFsKTtcbiAgICAgICAgfVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaXNQcm9jID9cbiAgICAgICAgICAgIChyZW5kZXJlciBhcyBQcm9jZWR1cmFsUmVuZGVyZXIzKVxuICAgICAgICAgICAgICAgIC5zZXRBdHRyaWJ1dGUobmF0aXZlLCBhdHRyTmFtZSBhcyBzdHJpbmcsIGF0dHJWYWwgYXMgc3RyaW5nKSA6XG4gICAgICAgICAgICBuYXRpdmUuc2V0QXR0cmlidXRlKGF0dHJOYW1lIGFzIHN0cmluZywgYXR0clZhbCBhcyBzdHJpbmcpO1xuICAgICAgfVxuICAgICAgaSsrO1xuICAgIH1cbiAgfVxuXG4gIC8vIGFub3RoZXIgcGllY2Ugb2YgY29kZSBtYXkgaXRlcmF0ZSBvdmVyIHRoZSBzYW1lIGF0dHJpYnV0ZXMgYXJyYXkuIFRoZXJlZm9yZVxuICAvLyBpdCBtYXkgYmUgaGVscGZ1bCB0byByZXR1cm4gdGhlIGV4YWN0IHNwb3Qgd2hlcmUgdGhlIGF0dHJpYnV0ZXMgYXJyYXkgZXhpdGVkXG4gIC8vIHdoZXRoZXIgYnkgcnVubmluZyBpbnRvIGFuIHVuc3VwcG9ydGVkIG1hcmtlciBvciBpZiBhbGwgdGhlIHN0YXRpYyB2YWx1ZXMgd2VyZVxuICAvLyBpdGVyYXRlZCBvdmVyLlxuICByZXR1cm4gaTtcbn1cblxuXG5leHBvcnQgZnVuY3Rpb24gYXR0cnNTdHlsaW5nSW5kZXhPZihhdHRyczogVEF0dHJpYnV0ZXMsIHN0YXJ0SW5kZXg6IG51bWJlcik6IG51bWJlciB7XG4gIGZvciAobGV0IGkgPSBzdGFydEluZGV4OyBpIDwgYXR0cnMubGVuZ3RoOyBpKyspIHtcbiAgICBjb25zdCB2YWwgPSBhdHRyc1tpXTtcbiAgICBpZiAodmFsID09PSBBdHRyaWJ1dGVNYXJrZXIuQ2xhc3NlcyB8fCB2YWwgPT09IEF0dHJpYnV0ZU1hcmtlci5TdHlsZXMpIHtcbiAgICAgIHJldHVybiBpO1xuICAgIH1cbiAgfVxuICByZXR1cm4gLTE7XG59XG5cbi8qKlxuICogVGVzdCB3aGV0aGVyIHRoZSBnaXZlbiB2YWx1ZSBpcyBhIG1hcmtlciB0aGF0IGluZGljYXRlcyB0aGF0IHRoZSBmb2xsb3dpbmdcbiAqIGF0dHJpYnV0ZSB2YWx1ZXMgaW4gYSBgVEF0dHJpYnV0ZXNgIGFycmF5IGFyZSBvbmx5IHRoZSBuYW1lcyBvZiBhdHRyaWJ1dGVzLFxuICogYW5kIG5vdCBuYW1lLXZhbHVlIHBhaXJzLlxuICogQHBhcmFtIG1hcmtlciBUaGUgYXR0cmlidXRlIG1hcmtlciB0byB0ZXN0LlxuICogQHJldHVybnMgdHJ1ZSBpZiB0aGUgbWFya2VyIGlzIGEgXCJuYW1lLW9ubHlcIiBtYXJrZXIgKGUuZy4gYEJpbmRpbmdzYCwgYFRlbXBsYXRlYCBvciBgSTE4bmApLlxuICovXG5leHBvcnQgZnVuY3Rpb24gaXNOYW1lT25seUF0dHJpYnV0ZU1hcmtlcihtYXJrZXI6IHN0cmluZyB8IEF0dHJpYnV0ZU1hcmtlciB8IENzc1NlbGVjdG9yKSB7XG4gIHJldHVybiBtYXJrZXIgPT09IEF0dHJpYnV0ZU1hcmtlci5CaW5kaW5ncyB8fCBtYXJrZXIgPT09IEF0dHJpYnV0ZU1hcmtlci5UZW1wbGF0ZSB8fFxuICAgICAgbWFya2VyID09PSBBdHRyaWJ1dGVNYXJrZXIuSTE4bjtcbn1cbiJdfQ==
|