@dugararchit/flex-layout 13.0.0-dugararchit
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -0
- package/_private-utils/angular-flex-layout-_private-utils.d.ts +5 -0
- package/_private-utils/auto-prefixer.d.ts +24 -0
- package/_private-utils/index.d.ts +10 -0
- package/_private-utils/layout-validator.d.ts +32 -0
- package/_private-utils/object-extend.d.ts +15 -0
- package/_private-utils/package.json +10 -0
- package/_private-utils/testing/angular-flex-layout-_private-utils-testing.d.ts +5 -0
- package/_private-utils/testing/custom-matchers.d.ts +65 -0
- package/_private-utils/testing/dom-tools.d.ts +47 -0
- package/_private-utils/testing/helpers.d.ts +24 -0
- package/_private-utils/testing/index.d.ts +10 -0
- package/_private-utils/testing/package.json +10 -0
- package/angular-flex-layout-13.0.0-beta.38.tgz +0 -0
- package/angular-flex-layout.d.ts +5 -0
- package/core/README.md +25 -0
- package/core/add-alias.d.ts +14 -0
- package/core/angular-flex-layout-core.d.ts +5 -0
- package/core/base/base2.d.ts +60 -0
- package/core/base/index.d.ts +8 -0
- package/core/basis-validator/basis-validator.d.ts +13 -0
- package/core/breakpoints/break-point-registry.d.ts +42 -0
- package/core/breakpoints/break-point.d.ts +14 -0
- package/core/breakpoints/break-points-token.d.ts +14 -0
- package/core/breakpoints/breakpoint-tools.d.ts +19 -0
- package/core/breakpoints/data/break-points.d.ts +12 -0
- package/core/breakpoints/data/orientation-break-points.d.ts +23 -0
- package/core/breakpoints/index.d.ts +12 -0
- package/core/browser-provider.d.ts +24 -0
- package/core/match-media/index.d.ts +9 -0
- package/core/match-media/match-media.d.ts +59 -0
- package/core/match-media/mock/mock-match-media.d.ts +92 -0
- package/core/media-change.d.ts +30 -0
- package/core/media-marshaller/media-marshaller.d.ts +123 -0
- package/core/media-marshaller/print-hook.d.ts +95 -0
- package/core/media-observer/index.d.ts +8 -0
- package/core/media-observer/media-observer.d.ts +115 -0
- package/core/media-trigger/index.d.ts +8 -0
- package/core/media-trigger/media-trigger.d.ts +73 -0
- package/core/module.d.ts +11 -0
- package/core/multiply/multiplier.d.ts +5 -0
- package/core/package.json +10 -0
- package/core/public-api.d.ts +25 -0
- package/core/sass/_layout-bp.scss +76 -0
- package/core/style-builder/style-builder.d.ts +21 -0
- package/core/style-utils/style-utils.d.ts +53 -0
- package/core/stylesheet-map/index.d.ts +8 -0
- package/core/stylesheet-map/stylesheet-map.d.ts +24 -0
- package/core/tokens/breakpoint-token.d.ts +10 -0
- package/core/tokens/index.d.ts +10 -0
- package/core/tokens/library-config.d.ts +26 -0
- package/core/tokens/server-token.d.ts +15 -0
- package/core/utils/array.d.ts +9 -0
- package/core/utils/index.d.ts +9 -0
- package/core/utils/sort.d.ts +15 -0
- package/esm2020/_private-utils/angular-flex-layout-_private-utils.mjs +5 -0
- package/esm2020/_private-utils/auto-prefixer.mjs +65 -0
- package/esm2020/_private-utils/index.mjs +11 -0
- package/esm2020/_private-utils/layout-validator.mjs +83 -0
- package/esm2020/_private-utils/object-extend.mjs +30 -0
- package/esm2020/_private-utils/testing/angular-flex-layout-_private-utils-testing.mjs +5 -0
- package/esm2020/_private-utils/testing/custom-matchers.mjs +201 -0
- package/esm2020/_private-utils/testing/dom-tools.mjs +101 -0
- package/esm2020/_private-utils/testing/helpers.mjs +43 -0
- package/esm2020/_private-utils/testing/index.mjs +11 -0
- package/esm2020/angular-flex-layout.mjs +5 -0
- package/esm2020/core/add-alias.mjs +23 -0
- package/esm2020/core/angular-flex-layout-core.mjs +5 -0
- package/esm2020/core/base/base2.mjs +131 -0
- package/esm2020/core/base/index.mjs +9 -0
- package/esm2020/core/basis-validator/basis-validator.mjs +48 -0
- package/esm2020/core/breakpoints/break-point-registry.mjs +76 -0
- package/esm2020/core/breakpoints/break-point.mjs +2 -0
- package/esm2020/core/breakpoints/break-points-token.mjs +30 -0
- package/esm2020/core/breakpoints/breakpoint-tools.mjs +53 -0
- package/esm2020/core/breakpoints/data/break-points.mjs +78 -0
- package/esm2020/core/breakpoints/data/orientation-break-points.mjs +40 -0
- package/esm2020/core/breakpoints/index.mjs +13 -0
- package/esm2020/core/browser-provider.mjs +41 -0
- package/esm2020/core/match-media/index.mjs +10 -0
- package/esm2020/core/match-media/match-media.mjs +186 -0
- package/esm2020/core/match-media/mock/mock-match-media.mjs +224 -0
- package/esm2020/core/media-change.mjs +25 -0
- package/esm2020/core/media-marshaller/media-marshaller.mjs +317 -0
- package/esm2020/core/media-marshaller/print-hook.mjs +265 -0
- package/esm2020/core/media-observer/index.mjs +9 -0
- package/esm2020/core/media-observer/media-observer.mjs +195 -0
- package/esm2020/core/media-trigger/index.mjs +9 -0
- package/esm2020/core/media-trigger/media-trigger.mjs +188 -0
- package/esm2020/core/module.mjs +27 -0
- package/esm2020/core/multiply/multiplier.mjs +16 -0
- package/esm2020/core/public-api.mjs +26 -0
- package/esm2020/core/style-builder/style-builder.mjs +15 -0
- package/esm2020/core/style-utils/style-utils.mjs +174 -0
- package/esm2020/core/stylesheet-map/index.mjs +9 -0
- package/esm2020/core/stylesheet-map/stylesheet-map.mjs +59 -0
- package/esm2020/core/tokens/breakpoint-token.mjs +13 -0
- package/esm2020/core/tokens/index.mjs +11 -0
- package/esm2020/core/tokens/library-config.mjs +30 -0
- package/esm2020/core/tokens/server-token.mjs +19 -0
- package/esm2020/core/utils/array.mjs +12 -0
- package/esm2020/core/utils/index.mjs +10 -0
- package/esm2020/core/utils/sort.mjs +20 -0
- package/esm2020/extended/angular-flex-layout-extended.mjs +5 -0
- package/esm2020/extended/class/class.mjs +88 -0
- package/esm2020/extended/img-src/img-src.mjs +106 -0
- package/esm2020/extended/module.mjs +45 -0
- package/esm2020/extended/public-api.mjs +13 -0
- package/esm2020/extended/show-hide/show-hide.mjs +176 -0
- package/esm2020/extended/style/style-transforms.mjs +76 -0
- package/esm2020/extended/style/style.mjs +130 -0
- package/esm2020/flex/angular-flex-layout-flex.mjs +5 -0
- package/esm2020/flex/flex/flex.mjs +291 -0
- package/esm2020/flex/flex-align/flex-align.mjs +80 -0
- package/esm2020/flex/flex-fill/flex-fill.mjs +50 -0
- package/esm2020/flex/flex-offset/flex-offset.mjs +121 -0
- package/esm2020/flex/flex-order/flex-order.mjs +66 -0
- package/esm2020/flex/layout/layout.mjs +86 -0
- package/esm2020/flex/layout-align/layout-align.mjs +194 -0
- package/esm2020/flex/layout-gap/layout-gap.mjs +282 -0
- package/esm2020/flex/module.mjs +62 -0
- package/esm2020/flex/public-api.mjs +17 -0
- package/esm2020/grid/align-columns/align-columns.mjs +137 -0
- package/esm2020/grid/align-rows/align-rows.mjs +119 -0
- package/esm2020/grid/angular-flex-layout-grid.mjs +5 -0
- package/esm2020/grid/area/area.mjs +67 -0
- package/esm2020/grid/areas/areas.mjs +86 -0
- package/esm2020/grid/auto/auto.mjs +89 -0
- package/esm2020/grid/column/column.mjs +67 -0
- package/esm2020/grid/columns/columns.mjs +96 -0
- package/esm2020/grid/gap/gap.mjs +85 -0
- package/esm2020/grid/grid-align/grid-align.mjs +111 -0
- package/esm2020/grid/module.mjs +73 -0
- package/esm2020/grid/public-api.mjs +20 -0
- package/esm2020/grid/row/row.mjs +67 -0
- package/esm2020/grid/rows/rows.mjs +96 -0
- package/esm2020/module.mjs +64 -0
- package/esm2020/public-api.mjs +20 -0
- package/esm2020/server/angular-flex-layout-server.mjs +5 -0
- package/esm2020/server/module.mjs +22 -0
- package/esm2020/server/public-api.mjs +10 -0
- package/esm2020/server/server-match-media.mjs +151 -0
- package/esm2020/server/server-provider.mjs +140 -0
- package/esm2020/version.mjs +11 -0
- package/extended/README.md +18 -0
- package/extended/angular-flex-layout-extended.d.ts +5 -0
- package/extended/class/class.d.ts +38 -0
- package/extended/img-src/img-src.d.ts +51 -0
- package/extended/module.d.ts +16 -0
- package/extended/package.json +10 -0
- package/extended/public-api.d.ts +12 -0
- package/extended/show-hide/show-hide.d.ts +61 -0
- package/extended/style/style-transforms.d.ts +36 -0
- package/extended/style/style.d.ts +45 -0
- package/fesm2015/angular-flex-layout-_private-utils-testing.mjs +357 -0
- package/fesm2015/angular-flex-layout-_private-utils-testing.mjs.map +1 -0
- package/fesm2015/angular-flex-layout-_private-utils.mjs +193 -0
- package/fesm2015/angular-flex-layout-_private-utils.mjs.map +1 -0
- package/fesm2015/angular-flex-layout-core.mjs +2331 -0
- package/fesm2015/angular-flex-layout-core.mjs.map +1 -0
- package/fesm2015/angular-flex-layout-extended.mjs +621 -0
- package/fesm2015/angular-flex-layout-extended.mjs.map +1 -0
- package/fesm2015/angular-flex-layout-flex.mjs +1206 -0
- package/fesm2015/angular-flex-layout-flex.mjs.map +1 -0
- package/fesm2015/angular-flex-layout-grid.mjs +1047 -0
- package/fesm2015/angular-flex-layout-grid.mjs.map +1 -0
- package/fesm2015/angular-flex-layout-server.mjs +324 -0
- package/fesm2015/angular-flex-layout-server.mjs.map +1 -0
- package/fesm2015/angular-flex-layout.mjs +94 -0
- package/fesm2015/angular-flex-layout.mjs.map +1 -0
- package/fesm2020/angular-flex-layout-_private-utils-testing.mjs +357 -0
- package/fesm2020/angular-flex-layout-_private-utils-testing.mjs.map +1 -0
- package/fesm2020/angular-flex-layout-_private-utils.mjs +192 -0
- package/fesm2020/angular-flex-layout-_private-utils.mjs.map +1 -0
- package/fesm2020/angular-flex-layout-core.mjs +2304 -0
- package/fesm2020/angular-flex-layout-core.mjs.map +1 -0
- package/fesm2020/angular-flex-layout-extended.mjs +612 -0
- package/fesm2020/angular-flex-layout-extended.mjs.map +1 -0
- package/fesm2020/angular-flex-layout-flex.mjs +1198 -0
- package/fesm2020/angular-flex-layout-flex.mjs.map +1 -0
- package/fesm2020/angular-flex-layout-grid.mjs +1047 -0
- package/fesm2020/angular-flex-layout-grid.mjs.map +1 -0
- package/fesm2020/angular-flex-layout-server.mjs +322 -0
- package/fesm2020/angular-flex-layout-server.mjs.map +1 -0
- package/fesm2020/angular-flex-layout.mjs +92 -0
- package/fesm2020/angular-flex-layout.mjs.map +1 -0
- package/flex/README.md +19 -0
- package/flex/angular-flex-layout-flex.d.ts +5 -0
- package/flex/flex/flex.d.ts +59 -0
- package/flex/flex-align/flex-align.d.ts +32 -0
- package/flex/flex-fill/flex-fill.d.ts +33 -0
- package/flex/flex-offset/flex-offset.d.ts +44 -0
- package/flex/flex-order/flex-order.d.ts +34 -0
- package/flex/layout/layout.d.ts +43 -0
- package/flex/layout-align/layout-align.d.ts +49 -0
- package/flex/layout-gap/layout-gap.d.ts +65 -0
- package/flex/module.d.ts +21 -0
- package/flex/package.json +10 -0
- package/flex/public-api.d.ts +16 -0
- package/grid/README.md +19 -0
- package/grid/align-columns/align-columns.d.ts +39 -0
- package/grid/align-rows/align-rows.d.ts +39 -0
- package/grid/angular-flex-layout-grid.d.ts +5 -0
- package/grid/area/area.d.ts +34 -0
- package/grid/areas/areas.d.ts +41 -0
- package/grid/auto/auto.d.ts +41 -0
- package/grid/column/column.d.ts +34 -0
- package/grid/columns/columns.d.ts +43 -0
- package/grid/gap/gap.d.ts +42 -0
- package/grid/grid-align/grid-align.d.ts +37 -0
- package/grid/module.d.ts +23 -0
- package/grid/package.json +10 -0
- package/grid/public-api.d.ts +19 -0
- package/grid/row/row.d.ts +34 -0
- package/grid/rows/rows.d.ts +43 -0
- package/module.d.ts +30 -0
- package/package.json +100 -0
- package/public-api.d.ts +18 -0
- package/server/README.md +23 -0
- package/server/angular-flex-layout-server.d.ts +5 -0
- package/server/module.d.ts +6 -0
- package/server/package.json +10 -0
- package/server/public-api.d.ts +9 -0
- package/server/server-match-media.d.ts +61 -0
- package/server/server-provider.d.ts +44 -0
- package/version.d.ts +10 -0
|
@@ -0,0 +1,201 @@
|
|
|
1
|
+
const _global = (typeof window === 'undefined' ? global : window);
|
|
2
|
+
import { _dom as _ } from './dom-tools';
|
|
3
|
+
import { applyCssPrefixes, extendObject, } from '@angular/flex-layout/_private-utils';
|
|
4
|
+
export const expect = _global.expect;
|
|
5
|
+
/**
|
|
6
|
+
* NOTE: These custom JASMINE Matchers are used only
|
|
7
|
+
* in the Karma/Jasmine testing for the Layout Directives
|
|
8
|
+
* in `src/lib/flex/api`
|
|
9
|
+
*/
|
|
10
|
+
export const customMatchers = {
|
|
11
|
+
toEqual: function (util) {
|
|
12
|
+
return {
|
|
13
|
+
compare: function (actual, expected) {
|
|
14
|
+
return { pass: util.equals(actual, expected, [compareMap]) };
|
|
15
|
+
}
|
|
16
|
+
};
|
|
17
|
+
function compareMap(actual, expected) {
|
|
18
|
+
if (actual instanceof Map) {
|
|
19
|
+
let pass = actual.size === expected.size;
|
|
20
|
+
if (pass) {
|
|
21
|
+
actual.forEach((v, k) => {
|
|
22
|
+
pass = pass && util.equals(v, expected.get(k));
|
|
23
|
+
});
|
|
24
|
+
}
|
|
25
|
+
return pass;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
return undefined;
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
},
|
|
32
|
+
toHaveText: function () {
|
|
33
|
+
return {
|
|
34
|
+
compare: function (actual, expectedText) {
|
|
35
|
+
const actualText = elementText(actual);
|
|
36
|
+
return {
|
|
37
|
+
pass: actualText == expectedText,
|
|
38
|
+
get message() {
|
|
39
|
+
return 'Expected ' + actualText + ' to be equal to ' + expectedText;
|
|
40
|
+
}
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
};
|
|
44
|
+
},
|
|
45
|
+
toHaveCssClass: function () {
|
|
46
|
+
return { compare: buildError(false), negativeCompare: buildError(true) };
|
|
47
|
+
function buildError(isNot) {
|
|
48
|
+
return function (actual, className) {
|
|
49
|
+
return {
|
|
50
|
+
pass: _.hasClass(actual, className) == !isNot,
|
|
51
|
+
get message() {
|
|
52
|
+
return `
|
|
53
|
+
Expected ${actual.outerHTML} ${isNot ? 'not ' : ''}
|
|
54
|
+
to contain the CSS class '${className}'
|
|
55
|
+
`;
|
|
56
|
+
}
|
|
57
|
+
};
|
|
58
|
+
};
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
toHaveMap: function () {
|
|
62
|
+
return {
|
|
63
|
+
compare: function (actual, map) {
|
|
64
|
+
let allPassed;
|
|
65
|
+
allPassed = Object.keys(map).length !== 0;
|
|
66
|
+
Object.keys(map).forEach(key => {
|
|
67
|
+
allPassed = allPassed && (actual[key] === map[key]);
|
|
68
|
+
});
|
|
69
|
+
return {
|
|
70
|
+
pass: allPassed,
|
|
71
|
+
get message() {
|
|
72
|
+
return `
|
|
73
|
+
Expected ${JSON.stringify(actual)} ${!allPassed ? ' ' : 'not '} to contain the
|
|
74
|
+
'${JSON.stringify(map)}'
|
|
75
|
+
`;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
}
|
|
79
|
+
};
|
|
80
|
+
},
|
|
81
|
+
toHaveAttributes: function () {
|
|
82
|
+
return {
|
|
83
|
+
compare: function (actual, map) {
|
|
84
|
+
let allPassed;
|
|
85
|
+
let attributeNames = Object.keys(map);
|
|
86
|
+
allPassed = attributeNames.length !== 0;
|
|
87
|
+
attributeNames.forEach(name => {
|
|
88
|
+
allPassed = allPassed && _.hasAttribute(actual, name)
|
|
89
|
+
&& _.getAttribute(actual, name) === map[name];
|
|
90
|
+
});
|
|
91
|
+
return {
|
|
92
|
+
pass: allPassed,
|
|
93
|
+
get message() {
|
|
94
|
+
return `
|
|
95
|
+
Expected ${actual.outerHTML} ${allPassed ? 'not ' : ''} attributes to contain
|
|
96
|
+
'${JSON.stringify(map)}'
|
|
97
|
+
`;
|
|
98
|
+
}
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
};
|
|
102
|
+
},
|
|
103
|
+
/**
|
|
104
|
+
* Check element's inline styles only
|
|
105
|
+
*/
|
|
106
|
+
toHaveStyle: function () {
|
|
107
|
+
return {
|
|
108
|
+
compare: buildCompareStyleFunction(true)
|
|
109
|
+
};
|
|
110
|
+
},
|
|
111
|
+
/**
|
|
112
|
+
* Check element's css stylesheet only (if not present inline)
|
|
113
|
+
*/
|
|
114
|
+
toHaveCSS: function () {
|
|
115
|
+
return {
|
|
116
|
+
compare: buildCompareStyleFunction(false)
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
};
|
|
120
|
+
/**
|
|
121
|
+
* Curried value to function to check styles that are inline or in a stylesheet for the
|
|
122
|
+
* specified DOM element.
|
|
123
|
+
*/
|
|
124
|
+
function buildCompareStyleFunction(inlineOnly = true) {
|
|
125
|
+
return function (actual, styles, styler) {
|
|
126
|
+
const found = {};
|
|
127
|
+
const styleMap = {};
|
|
128
|
+
if (typeof styles === 'string') {
|
|
129
|
+
styleMap[styles] = '';
|
|
130
|
+
}
|
|
131
|
+
else {
|
|
132
|
+
Object.assign(styleMap, styles);
|
|
133
|
+
}
|
|
134
|
+
let allPassed = Object.keys(styleMap).length !== 0;
|
|
135
|
+
Object.keys(styleMap).forEach(prop => {
|
|
136
|
+
let { elHasStyle, current } = hasPrefixedStyles(actual, prop, styleMap[prop], inlineOnly, styler);
|
|
137
|
+
allPassed = allPassed && elHasStyle;
|
|
138
|
+
if (!elHasStyle) {
|
|
139
|
+
extendObject(found, current);
|
|
140
|
+
}
|
|
141
|
+
});
|
|
142
|
+
return {
|
|
143
|
+
pass: allPassed,
|
|
144
|
+
get message() {
|
|
145
|
+
const expectedValueStr = (typeof styles === 'string') ? styleMap :
|
|
146
|
+
JSON.stringify(styleMap, null, 2);
|
|
147
|
+
const foundValueStr = inlineOnly ? actual.outerHTML : JSON.stringify(found);
|
|
148
|
+
return `
|
|
149
|
+
Expected ${foundValueStr}${!allPassed ? '' : ' not'} to contain the
|
|
150
|
+
CSS ${typeof styles === 'string' ? 'property' : 'styles'} '${expectedValueStr}'
|
|
151
|
+
`;
|
|
152
|
+
}
|
|
153
|
+
};
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Validate presence of requested style or use fallback
|
|
158
|
+
* to possible `prefixed` styles. Useful when some browsers
|
|
159
|
+
* (Safari, IE, etc) will use prefixed style instead of defaults.
|
|
160
|
+
*/
|
|
161
|
+
function hasPrefixedStyles(actual, key, value, inlineOnly, styler) {
|
|
162
|
+
const current = {};
|
|
163
|
+
if (value === '*') {
|
|
164
|
+
return { elHasStyle: styler.lookupStyle(actual, key, inlineOnly) !== '', current };
|
|
165
|
+
}
|
|
166
|
+
value = value.trim();
|
|
167
|
+
let elHasStyle = styler.lookupStyle(actual, key, inlineOnly) === value;
|
|
168
|
+
if (!elHasStyle) {
|
|
169
|
+
let prefixedStyles = applyCssPrefixes({ [key]: value });
|
|
170
|
+
Object.keys(prefixedStyles).forEach(prop => {
|
|
171
|
+
// Search for optional prefixed values
|
|
172
|
+
elHasStyle = elHasStyle ||
|
|
173
|
+
styler.lookupStyle(actual, prop, inlineOnly) === prefixedStyles[prop];
|
|
174
|
+
});
|
|
175
|
+
}
|
|
176
|
+
// Return BOTH confirmation and current computed key values (if confirmation == false)
|
|
177
|
+
return { elHasStyle, current };
|
|
178
|
+
}
|
|
179
|
+
function elementText(n) {
|
|
180
|
+
const hasNodes = (m) => {
|
|
181
|
+
const children = _.childNodes(m);
|
|
182
|
+
return children && children['length'];
|
|
183
|
+
};
|
|
184
|
+
if (n instanceof Array) {
|
|
185
|
+
return n.map(elementText).join('');
|
|
186
|
+
}
|
|
187
|
+
if (_.isCommentNode(n)) {
|
|
188
|
+
return '';
|
|
189
|
+
}
|
|
190
|
+
if (_.isElementNode(n) && _.tagName(n) == 'CONTENT') {
|
|
191
|
+
return elementText(Array.prototype.slice.apply(_.getDistributedNodes(n)));
|
|
192
|
+
}
|
|
193
|
+
if (_.hasShadowRoot(n)) {
|
|
194
|
+
return elementText(_.childNodesAsList(_.getShadowRoot(n)));
|
|
195
|
+
}
|
|
196
|
+
if (hasNodes(n)) {
|
|
197
|
+
return elementText(_.childNodesAsList(n));
|
|
198
|
+
}
|
|
199
|
+
return _.getText(n);
|
|
200
|
+
}
|
|
201
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3VzdG9tLW1hdGNoZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGlicy9mbGV4LWxheW91dC9fcHJpdmF0ZS11dGlscy90ZXN0aW5nL2N1c3RvbS1tYXRjaGVycy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFRQSxNQUFNLE9BQU8sR0FBUSxDQUFDLE9BQU8sTUFBTSxLQUFLLFdBQVcsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUV2RSxPQUFPLEVBQUMsSUFBSSxJQUFJLENBQUMsRUFBQyxNQUFNLGFBQWEsQ0FBQztBQUV0QyxPQUFPLEVBQUMsZ0JBQWdCLEVBQUUsWUFBWSxHQUFHLE1BQU0scUNBQXFDLENBQUM7QUFHckYsTUFBTSxDQUFDLE1BQU0sTUFBTSxHQUFzQyxPQUFPLENBQUMsTUFBTSxDQUFDO0FBMER4RTs7OztHQUlHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sY0FBYyxHQUFtQztJQUU1RCxPQUFPLEVBQUUsVUFBVSxJQUFJO1FBQ3JCLE9BQU87WUFDTCxPQUFPLEVBQUUsVUFBVSxNQUFXLEVBQUUsUUFBYTtnQkFDM0MsT0FBTyxFQUFDLElBQUksRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxRQUFRLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxFQUFDLENBQUM7WUFDN0QsQ0FBQztTQUNGLENBQUM7UUFFRixTQUFTLFVBQVUsQ0FBQyxNQUFXLEVBQUUsUUFBYTtZQUM1QyxJQUFJLE1BQU0sWUFBWSxHQUFHLEVBQUU7Z0JBQ3pCLElBQUksSUFBSSxHQUFHLE1BQU0sQ0FBQyxJQUFJLEtBQUssUUFBUSxDQUFDLElBQUksQ0FBQztnQkFDekMsSUFBSSxJQUFJLEVBQUU7b0JBQ1IsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQU0sRUFBRSxDQUFNLEVBQUUsRUFBRTt3QkFDaEMsSUFBSSxHQUFHLElBQUksSUFB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V0FBVyxDQUFDLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0tBQ3BDO0lBRUQsSUFBSSxDQUFDLENBQUMsYUFBYSxDQUFDLENBQUMsQ0FBQyxFQUFFO1FBQ3RCLE9BQU8sRUFBRSxDQUFDO0tBQ1g7SUFFRCxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsSUFBSSxTQUFTLEVBQUU7UUFDbkQsT0FBTyxXQUFXLENBQUMsS0FBSyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDM0U7SUFFRCxJQUFJLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDdEIsT0FBTyxXQUFXLENBQUMsQ0FBQyxDQUFDLGdCQUFnQixDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0tBQzVEO0lBRUQsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7UUFDZixPQUFPLFdBQVcsQ0FBQyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUMzQztJQUVELE9BQU8sQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5kZWNsYXJlIHZhciBnbG9iYWw6IGFueTtcbmNvbnN0IF9nbG9iYWwgPSA8YW55Pih0eXBlb2Ygd2luZG93ID09PSAndW5kZWZpbmVkJyA/IGdsb2JhbCA6IHdpbmRvdyk7XG5cbmltcG9ydCB7X2RvbSBhcyBffSBmcm9tICcuL2RvbS10b29scyc7XG5cbmltcG9ydCB7YXBwbHlDc3NQcmVmaXhlcywgZXh0ZW5kT2JqZWN0LCB9IGZyb20gJ0Bhbmd1bGFyL2ZsZXgtbGF5b3V0L19wcml2YXRlLXV0aWxzJztcbmltcG9ydCB7U3R5bGVVdGlsc30gZnJvbSAnQGFuZ3VsYXIvZmxleC1sYXlvdXQvY29yZSc7XG5cbmV4cG9ydCBjb25zdCBleHBlY3Q6IChhY3R1YWw6IGFueSkgPT4gTmdNYXRjaGVycyA9IDxhbnk+IF9nbG9iYWwuZXhwZWN0O1xuXG4vKipcbiAqIEphc21pbmUgbWF0Y2hlcnMgdGhhdCBjaGVjayBBbmd1bGFyIHNwZWNpZmljIGNvbmRpdGlvbnMuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgTmdNYXRjaGVycyBleHRlbmRzIGphc21pbmUuTWF0Y2hlcnM8YW55PiB7XG4gIC8qKlxuICAgKiBFeHBlY3QgdGhlIGVsZW1lbnQgdG8gaGF2ZSBleGFjdGx5IHRoZSBnaXZlbiB0ZXh0LlxuICAgKlxuICAgKiAjIyBFeGFtcGxlXG4gICAqXG4gICAqIHtAZXhhbXBsZSB0ZXN0aW5nL3RzL21hdGNoZXJzLnRzIHJlZ2lvbj0ndG9IYXZlVGV4dCd9XG4gICAqL1xuICB0b0hhdmVUZXh0KGV4cGVjdGVkOiBzdHJpbmcpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBDb21wYXJlIGtleTp2YWx1ZSBwYWlycyBhcyBtYXRjaGluZyBFWEFDVExZXG4gICAqL1xuICB0b0hhdmVNYXAoZXhwZWN0ZWQ6IHsgW2s6IHN0cmluZ106IHN0cmluZyB9KTogYm9vbGVhbjtcblxuICAvKipcbiAgICogRXhwZWN0IHRoZSBlbGVtZW50IHRvIGhhdmUgdGhlIGdpdmVuIENTUyBjbGFzcy5cbiAgICpcbiAgICogIyMgRXhhbXBsZVxuICAgKlxuICAgKiB7QGV4YW1wbGUgdGVzdGluZy90cy9tYXRjaGVycy50cyByZWdpb249J3RvSGF2ZUNzc0NsYXNzJ31cbiAgICovXG4gIHRvSGF2ZUNzc0NsYXNzKGV4cGVjdGVkOiBzdHJpbmcpOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFeHBlY3QgdGhlIGVsZW1lbnQgdG8gaGF2ZSB0aGUgZ2l2ZW4gcGFpcnMgb2YgYXR0cmlidXRlIG5hbWUgYW5kIGF0dHJpYnV0ZSB2YWx1ZVxuICAgKi9cbiAgdG9IYXZlQXR0cmlidXRlcyhleHBlY3RlZDogeyBbazogc3RyaW5nXTogc3RyaW5nIH0pOiBib29sZWFuO1xuXG4gIC8qKlxuICAgKiBFeHBlY3QgdGhlIGVsZW1lbnQgdG8gaGF2ZSB0aGUgZ2l2ZW4gQ1NTIHN0eWxlcyBpbmplY3RlZCBJTkxJTkVcbiAgICpcbiAgICogIyMgRXhhbXBsZVxuICAgKlxuICAgKiB7QGV4YW1wbGUgdGVzdGluZy90cy9tYXRjaGVycy50cyByZWdpb249J3RvSGF2ZVN0eWxlJ31cbiAgICovXG4gIHRvSGF2ZVN0eWxlKGV4cGVjdGVkOiB7IFtrOiBzdHJpbmddOiBzdHJpbmcgfSB8IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEV4cGVjdCB0aGUgZWxlbWVudCB0byBoYXZlIHRoZSBnaXZlbiBDU1MgaW5saW5lIE9SIGNvbXB1dGVkIHN0eWxlcy5cbiAgICpcbiAgICogIyMgRXhhbXBsZVxuICAgKlxuICAgKiB7QGV4YW1wbGUgdGVzdGluZy90cy9tYXRjaGVycy50cyByZWdpb249J3RvSGF2ZVN0eWxlJ31cbiAgICovXG4gIHRvSGF2ZVN0eWxlKGV4cGVjdGVkOiB7IFtrOiBzdHJpbmddOiBzdHJpbmcgfSB8IHN0cmluZyk6IGJvb2xlYW47XG5cbiAgLyoqXG4gICAqIEludmVydCB0aGUgbWF0Y2hlcnMuXG4gICAqL1xuICBub3Q6IE5nTWF0Y2hlcnM7XG59XG5cbi8qKlxuICogTk9URTogVGhlc2UgY3VzdG9tIEpBU01JTkUgTWF0Y2hlcnMgYXJlIHVzZWQgb25seVxuICogICAgICAgaW4gdGhlIEthcm1hL0phc21pbmUgdGVzdGluZyBmb3IgdGhlIExheW91dCBEaXJlY3RpdmVzXG4gKiAgICAgICBpbiBgc3JjL2xpYi9mbGV4L2FwaWBcbiAqL1xuZXhwb3J0IGNvbnN0IGN1c3RvbU1hdGNoZXJzOiBqYXNtaW5lLkN1c3RvbU1hdGNoZXJGYWN0b3JpZXMgPSB7XG5cbiAgdG9FcXVhbDogZnVuY3Rpb24gKHV0aWwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29tcGFyZTogZnVuY3Rpb24gKGFjdHVhbDogYW55LCBleHBlY3RlZDogYW55KSB7XG4gICAgICAgIHJldHVybiB7cGFzczogdXRpbC5lcXVhbHMoYWN0dWFsLCBleHBlY3RlZCwgW2NvbXBhcmVNYXBdKX07XG4gICAgICB9XG4gICAgfTtcblxuICAgIGZ1bmN0aW9uIGNvbXBhcmVNYXAoYWN0dWFsOiBhbnksIGV4cGVjdGVkOiBhbnkpIHtcbiAgICAgIGlmIChhY3R1YWwgaW5zdGFuY2VvZiBNYXApIHtcbiAgICAgICAgbGV0IHBhc3MgPSBhY3R1YWwuc2l6ZSA9PT0gZXhwZWN0ZWQuc2l6ZTtcbiAgICAgICAgaWYgKHBhc3MpIHtcbiAgICAgICAgICBhY3R1YWwuZm9yRWFjaCgodjogYW55LCBrOiBhbnkpID0+IHtcbiAgICAgICAgICAgIHBhc3MgPSBwYXNzICYmIHV0aWwuZXF1YWxzKHYsIGV4cGVjdGVkLmdldChrKSk7XG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhc3M7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgICAgfVxuICAgIH1cbiAgfSxcblxuICB0b0hhdmVUZXh0OiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgIGNvbXBhcmU6IGZ1bmN0aW9uIChhY3R1YWw6IGFueSwgZXhwZWN0ZWRUZXh0OiBzdHJpbmcpIHtcbiAgICAgICAgY29uc3QgYWN0dWFsVGV4dCA9IGVsZW1lbnRUZXh0KGFjdHVhbCk7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGFzczogYWN0dWFsVGV4dCA9PSBleHBlY3RlZFRleHQsXG4gICAgICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgICAgICByZXR1cm4gJ0V4cGVjdGVkICcgKyBhY3R1YWxUZXh0ICsgJyB0byBiZSBlcXVhbCB0byAnICsgZXhwZWN0ZWRUZXh0O1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuXG4gIHRvSGF2ZUNzc0NsYXNzOiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIHtjb21wYXJlOiBidWlsZEVycm9yKGZhbHNlKSwgbmVnYXRpdmVDb21wYXJlOiBidWlsZEVycm9yKHRydWUpfTtcblxuICAgIGZ1bmN0aW9uIGJ1aWxkRXJyb3IoaXNOb3Q6IGJvb2xlYW4pIHtcbiAgICAgIHJldHVybiBmdW5jdGlvbiAoYWN0dWFsOiBhbnksIGNsYXNzTmFtZTogc3RyaW5nKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgcGFzczogXy5oYXNDbGFzcyhhY3R1YWwsIGNsYXNzTmFtZSkgPT0gIWlzTm90LFxuICAgICAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICAgICAgcmV0dXJuIGBcbiAgICAgICAgICAgICAgRXhwZWN0ZWQgJHthY3R1YWwub3V0ZXJIVE1MfSAke2lzTm90ID8gJ25vdCAnIDogJyd9XG4gICAgICAgICAgICAgIHRvIGNvbnRhaW4gdGhlIENTUyBjbGFzcyAnJHtjbGFzc05hbWV9J1xuICAgICAgICAgICAgYDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9O1xuICAgIH1cbiAgfSxcblxuICB0b0hhdmVNYXA6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29tcGFyZTogZnVuY3Rpb24gKGFjdHVhbDogeyBbazogc3RyaW5nXTogc3RyaW5nIH0sIG1hcDogeyBbazogc3RyaW5nXTogc3RyaW5nIH0pIHtcbiAgICAgICAgbGV0IGFsbFBhc3NlZDogYm9vbGVhbjtcbiAgICAgICAgYWxsUGFzc2VkID0gT2JqZWN0LmtleXMobWFwKS5sZW5ndGggIT09IDA7XG4gICAgICAgIE9iamVjdC5rZXlzKG1hcCkuZm9yRWFjaChrZXkgPT4ge1xuICAgICAgICAgIGFsbFBhc3NlZCA9IGFsbFBhc3NlZCAmJiAoYWN0dWFsW2tleV0gPT09IG1hcFtrZXldKTtcbiAgICAgICAgfSk7XG5cbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICBwYXNzOiBhbGxQYXNzZWQsXG4gICAgICAgICAgZ2V0IG1lc3NhZ2UoKSB7XG4gICAgICAgICAgICByZXR1cm4gYFxuICAgICAgICAgICAgICBFeHBlY3RlZCAke0pTT04uc3RyaW5naWZ5KGFjdHVhbCl9ICR7IWFsbFBhc3NlZCA/ICcgJyA6ICdub3QgJ30gdG8gY29udGFpbiB0aGVcbiAgICAgICAgICAgICAgJyR7SlNPTi5zdHJpbmdpZnkobWFwKX0nXG4gICAgICAgICAgICBgO1xuICAgICAgICAgIH1cbiAgICAgICAgfTtcbiAgICAgIH1cbiAgICB9O1xuICB9LFxuXG4gIHRvSGF2ZUF0dHJpYnV0ZXM6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29tcGFyZTogZnVuY3Rpb24gKGFjdHVhbDogYW55LCBtYXA6IHsgW2s6IHN0cmluZ106IHN0cmluZyB9KSB7XG4gICAgICAgIGxldCBhbGxQYXNzZWQ6IGJvb2xlYW47XG4gICAgICAgIGxldCBhdHRyaWJ1dGVOYW1lcyA9IE9iamVjdC5rZXlzKG1hcCk7XG4gICAgICAgIGFsbFBhc3NlZCA9IGF0dHJpYnV0ZU5hbWVzLmxlbmd0aCAhPT0gMDtcbiAgICAgICAgYXR0cmlidXRlTmFtZXMuZm9yRWFjaChuYW1lID0+IHtcbiAgICAgICAgICBhbGxQYXNzZWQgPSBhbGxQYXNzZWQgJiYgXy5oYXNBdHRyaWJ1dGUoYWN0dWFsLCBuYW1lKVxuICAgICAgICAgICAgICAmJiBfLmdldEF0dHJpYnV0ZShhY3R1YWwsIG5hbWUpID09PSBtYXBbbmFtZV07XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgIHBhc3M6IGFsbFBhc3NlZCxcbiAgICAgICAgICBnZXQgbWVzc2FnZSgpIHtcbiAgICAgICAgICAgIHJldHVybiBgXG4gICAgICAgICAgICAgIEV4cGVjdGVkICR7YWN0dWFsLm91dGVySFRNTH0gJHthbGxQYXNzZWQgPyAnbm90ICcgOiAnJ30gYXR0cmlidXRlcyB0byBjb250YWluXG4gICAgICAgICAgICAgICcke0pTT04uc3RyaW5naWZ5KG1hcCl9J1xuICAgICAgICAgICAgYDtcbiAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICB9XG4gICAgfTtcbiAgfSxcblxuICAvKipcbiAgICogQ2hlY2sgZWxlbWVudCdzIGlubGluZSBzdHlsZXMgb25seVxuICAgKi9cbiAgdG9IYXZlU3R5bGU6IGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgY29tcGFyZTogYnVpbGRDb21wYXJlU3R5bGVGdW5jdGlvbih0cnVlKVxuICAgIH07XG4gIH0sXG5cblxuICAvKipcbiAgICogQ2hlY2sgZWxlbWVudCdzIGNzcyBzdHlsZXNoZWV0IG9ubHkgKGlmIG5vdCBwcmVzZW50IGlubGluZSlcbiAgICovXG4gIHRvSGF2ZUNTUzogZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiB7XG4gICAgICBjb21wYXJlOiBidWlsZENvbXBhcmVTdHlsZUZ1bmN0aW9uKGZhbHNlKVxuICAgIH07XG4gIH1cblxufTtcblxuLyoqXG4gKiBDdXJyaWVkIHZhbHVlIHRvIGZ1bmN0aW9uIHRvIGNoZWNrIHN0eWxlcyB0aGF0IGFyZSBpbmxpbmUgb3IgaW4gYSBzdHlsZXNoZWV0IGZvciB0aGVcbiAqIHNwZWNpZmllZCBET00gZWxlbWVudC5cbiAqL1xuZnVuY3Rpb24gYnVpbGRDb21wYXJlU3R5bGVGdW5jdGlvbihpbmxpbmVPbmx5ID0gdHJ1ZSkge1xuICByZXR1cm4gZnVuY3Rpb24gKGFjdHVhbDogYW55LCBzdHlsZXM6IHsgW2s6IHN0cmluZ106IHN0cmluZyB9IHwgc3RyaW5nLCBzdHlsZXI6IFN0eWxlVXRpbHMpIHtcbiAgICBjb25zdCBmb3VuZCA9IHt9O1xuICAgIGNvbnN0IHN0eWxlTWFwOiB7W2s6IHN0cmluZ106IHN0cmluZ30gPSB7fTtcblxuICAgIGlmICh0eXBlb2Ygc3R5bGVzID09PSAnc3RyaW5nJykge1xuICAgICAgc3R5bGVNYXBbc3R5bGVzXSA9ICcnO1xuICAgIH0gZWxzZSB7XG4gICAgICBPYmplY3QuYXNzaWduKHN0eWxlTWFwLCBzdHlsZXMpO1xuICAgIH1cblxuICAgIGxldCBhbGxQYXNzZWQgPSBPYmplY3Qua2V5cyhzdHlsZU1hcCkubGVuZ3RoICE9PSAwO1xuICAgIE9iamVjdC5rZXlzKHN0eWxlTWFwKS5mb3JFYWNoKHByb3AgPT4ge1xuICAgICAgbGV0IHtlbEhhc1N0eWxlLCBjdXJyZW50fSA9IGhhc1ByZWZpeGVkU3R5bGVzKGFjdHVhbCwgcHJvcCwgc3R5bGVNYXBbcHJvcF0sIGlubGluZU9ubHksXG4gICAgICAgIHN0eWxlcik7XG4gICAgICBhbGxQYXNzZWQgPSBhbGxQYXNzZWQgJiYgZWxIYXNTdHlsZTtcbiAgICAgIGlmICghZWxIYXNTdHlsZSkge1xuICAgICAgICBleHRlbmRPYmplY3QoZm91bmQsIGN1cnJlbnQpO1xuICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIHtcbiAgICAgIHBhc3M6IGFsbFBhc3NlZCxcbiAgICAgIGdldCBtZXNzYWdlKCkge1xuICAgICAgICBjb25zdCBleHBlY3RlZFZhbHVlU3RyID0gKHR5cGVvZiBzdHlsZXMgPT09ICdzdHJpbmcnKSA/IHN0eWxlTWFwIDpcbiAgICAgICAgICAgIEpTT04uc3RyaW5naWZ5KHN0eWxlTWFwLCBudWxsLCAyKTtcbiAgICAgICAgY29uc3QgZm91bmRWYWx1ZVN0ciA9IGlubGluZU9ubHkgPyBhY3R1YWwub3V0ZXJIVE1MIDogSlNPTi5zdHJpbmdpZnkoZm91bmQpO1xuICAgICAgICByZXR1cm4gYFxuICAgICAgICAgIEV4cGVjdGVkICR7Zm91bmRWYWx1ZVN0cn0keyFhbGxQYXNzZWQgPyAnJyA6ICcgbm90J30gdG8gY29udGFpbiB0aGVcbiAgICAgICAgICBDU1MgJHt0eXBlb2Ygc3R5bGVzID09PSAnc3RyaW5nJyA/ICdwcm9wZXJ0eScgOiAnc3R5bGVzJ30gJyR7ZXhwZWN0ZWRWYWx1ZVN0cn0nXG4gICAgICAgIGA7XG4gICAgICB9XG4gICAgfTtcbiAgfTtcbn1cblxuLyoqXG4gKiBWYWxpZGF0ZSBwcmVzZW5jZSBvZiByZXF1ZXN0ZWQgc3R5bGUgb3IgdXNlIGZhbGxiYWNrXG4gKiB0byBwb3NzaWJsZSBgcHJlZml4ZWRgIHN0eWxlcy4gVXNlZnVsIHdoZW4gc29tZSBicm93c2Vyc1xuICogKFNhZmFyaSwgSUUsIGV0Yykgd2lsbCB1c2UgcHJlZml4ZWQgc3R5bGUgaW5zdGVhZCBvZiBkZWZhdWx0cy5cbiAqL1xuZnVuY3Rpb24gaGFzUHJlZml4ZWRTdHlsZXMoYWN0dWFsOiBIVE1MRWxlbWVudCxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleTogc3RyaW5nLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgIGlubGluZU9ubHk6IGJvb2xlYW4sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICBzdHlsZXI6IFN0eWxlVXRpbHMpIHtcbiAgY29uc3QgY3VycmVudCA9IHt9O1xuXG4gIGlmICh2YWx1ZSA9PT0gJyonKSB7XG4gICAgcmV0dXJuIHtlbEhhc1N0eWxlOiBzdHlsZXIubG9va3VwU3R5bGUoYWN0dWFsLCBrZXksIGlubGluZU9ubHkpICE9PSAnJywgY3VycmVudH07XG4gIH1cblxuICB2YWx1ZSA9IHZhbHVlLnRyaW0oKTtcbiAgbGV0IGVsSGFzU3R5bGUgPSBzdHlsZXIubG9va3VwU3R5bGUoYWN0dWFsLCBrZXksIGlubGluZU9ubHkpID09PSB2YWx1ZTtcbiAgaWYgKCFlbEhhc1N0eWxlKSB7XG4gICAgbGV0IHByZWZpeGVkU3R5bGVzID0gYXBwbHlDc3NQcmVmaXhlcyh7W2tleV06IHZhbHVlfSk7XG4gICAgT2JqZWN0LmtleXMocHJlZml4ZWRTdHlsZXMpLmZvckVhY2gocHJvcCA9PiB7XG4gICAgICAvLyBTZWFyY2ggZm9yIG9wdGlvbmFsIHByZWZpeGVkIHZhbHVlc1xuICAgICAgZWxIYXNTdHlsZSA9IGVsSGFzU3R5bGUgfHxcbiAgICAgICAgc3R5bGVyLmxvb2t1cFN0eWxlKGFjdHVhbCwgcHJvcCwgaW5saW5lT25seSkgPT09IHByZWZpeGVkU3R5bGVzW3Byb3BdO1xuICAgIH0pO1xuICB9XG4gIC8vIFJldHVybiBCT1RIIGNvbmZpcm1hdGlvbiBhbmQgY3VycmVudCBjb21wdXRlZCBrZXkgdmFsdWVzIChpZiBjb25maXJtYXRpb24gPT0gZmFsc2UpXG4gIHJldHVybiB7ZWxIYXNTdHlsZSwgY3VycmVudH07XG59XG5cbmZ1bmN0aW9uIGVsZW1lbnRUZXh0KG46IGFueSk6IHN0cmluZyB7XG4gIGNvbnN0IGhhc05vZGVzID0gKG06IGFueSkgPT4ge1xuICAgIGNvbnN0IGNoaWxkcmVuID0gXy5jaGlsZE5vZGVzKG0pO1xuICAgIHJldHVybiBjaGlsZHJlbiAmJiBjaGlsZHJlblsnbGVuZ3RoJ107XG4gIH07XG5cbiAgaWYgKG4gaW5zdGFuY2VvZiBBcnJheSkge1xuICAgIHJldHVybiBuLm1hcChlbGVtZW50VGV4dCkuam9pbignJyk7XG4gIH1cblxuICBpZiAoXy5pc0NvbW1lbnROb2RlKG4pKSB7XG4gICAgcmV0dXJuICcnO1xuICB9XG5cbiAgaWYgKF8uaXNFbGVtZW50Tm9kZShuKSAmJiBfLnRhZ05hbWUobikgPT0gJ0NPTlRFTlQnKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRUZXh0KEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShfLmdldERpc3RyaWJ1dGVkTm9kZXMobikpKTtcbiAgfVxuXG4gIGlmIChfLmhhc1NoYWRvd1Jvb3QobikpIHtcbiAgICByZXR1cm4gZWxlbWVudFRleHQoXy5jaGlsZE5vZGVzQXNMaXN0KF8uZ2V0U2hhZG93Um9vdChuKSkpO1xuICB9XG5cbiAgaWYgKGhhc05vZGVzKG4pKSB7XG4gICAgcmV0dXJuIGVsZW1lbnRUZXh0KF8uY2hpbGROb2Rlc0FzTGlzdChuKSk7XG4gIH1cblxuICByZXR1cm4gXy5nZXRUZXh0KG4pO1xufVxuXG4iXX0=
|
|
@@ -0,0 +1,101 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
/**
|
|
9
|
+
* Exported DOM accessor utility functions
|
|
10
|
+
*/
|
|
11
|
+
export const _dom = {
|
|
12
|
+
hasStyle,
|
|
13
|
+
getDistributedNodes,
|
|
14
|
+
getShadowRoot,
|
|
15
|
+
getText,
|
|
16
|
+
getStyle,
|
|
17
|
+
childNodes,
|
|
18
|
+
childNodesAsList,
|
|
19
|
+
hasClass,
|
|
20
|
+
hasAttribute,
|
|
21
|
+
getAttribute,
|
|
22
|
+
hasShadowRoot,
|
|
23
|
+
isCommentNode,
|
|
24
|
+
isElementNode,
|
|
25
|
+
isPresent,
|
|
26
|
+
isShadowRoot,
|
|
27
|
+
tagName,
|
|
28
|
+
lastElementChild
|
|
29
|
+
};
|
|
30
|
+
// ******************************************************************************************
|
|
31
|
+
// These functions are cloned from
|
|
32
|
+
// * @angular/platform-browser/src/browser/GenericBrowserDomAdapter
|
|
33
|
+
// and are to be used ONLY internally in custom-matchers.ts and Unit Tests
|
|
34
|
+
// ******************************************************************************************
|
|
35
|
+
function getStyle(element, stylename) {
|
|
36
|
+
return element.style[stylename];
|
|
37
|
+
}
|
|
38
|
+
function hasStyle(element, styleName, styleValue = '', inlineOnly = true) {
|
|
39
|
+
let value = getStyle(element, styleName) || '';
|
|
40
|
+
if (!value && !inlineOnly) {
|
|
41
|
+
// Search stylesheets
|
|
42
|
+
value = typeof getComputedStyle === 'function' &&
|
|
43
|
+
getComputedStyle(element).getPropertyValue(styleName) || '';
|
|
44
|
+
}
|
|
45
|
+
return styleValue ? value == styleValue : value.length > 0;
|
|
46
|
+
}
|
|
47
|
+
function getDistributedNodes(el) {
|
|
48
|
+
return el.getDistributedNodes();
|
|
49
|
+
}
|
|
50
|
+
function getShadowRoot(el) {
|
|
51
|
+
return el.shadowRoot;
|
|
52
|
+
}
|
|
53
|
+
function getText(el) {
|
|
54
|
+
return el.textContent || '';
|
|
55
|
+
}
|
|
56
|
+
function childNodesAsList(el) {
|
|
57
|
+
const list = el.childNodes;
|
|
58
|
+
const res = new Array(list.length);
|
|
59
|
+
for (let i = 0; i < list.length; i++) {
|
|
60
|
+
res[i] = list[i];
|
|
61
|
+
}
|
|
62
|
+
return res;
|
|
63
|
+
}
|
|
64
|
+
function hasClass(element, className) {
|
|
65
|
+
return element.classList.contains(className);
|
|
66
|
+
}
|
|
67
|
+
function hasAttribute(element, attributeName) {
|
|
68
|
+
return element.hasAttribute(attributeName);
|
|
69
|
+
}
|
|
70
|
+
function getAttribute(element, attributeName) {
|
|
71
|
+
return element.getAttribute(attributeName);
|
|
72
|
+
}
|
|
73
|
+
function childNodes(el) {
|
|
74
|
+
return el.childNodes;
|
|
75
|
+
}
|
|
76
|
+
function hasShadowRoot(node) {
|
|
77
|
+
return isPresent(node.shadowRoot) && node instanceof HTMLElement;
|
|
78
|
+
}
|
|
79
|
+
function isCommentNode(node) {
|
|
80
|
+
return node.nodeType === Node.COMMENT_NODE;
|
|
81
|
+
}
|
|
82
|
+
function isElementNode(node) {
|
|
83
|
+
return node.nodeType === Node.ELEMENT_NODE;
|
|
84
|
+
}
|
|
85
|
+
function isShadowRoot(node) {
|
|
86
|
+
return node instanceof DocumentFragment;
|
|
87
|
+
}
|
|
88
|
+
function isPresent(obj) {
|
|
89
|
+
return obj != null;
|
|
90
|
+
}
|
|
91
|
+
function tagName(element) {
|
|
92
|
+
return element.tagName;
|
|
93
|
+
}
|
|
94
|
+
// ******************************************************************************************
|
|
95
|
+
// These functions are part of the DOM API
|
|
96
|
+
// and are to be used ONLY internally in custom-matchers.ts and Unit Tests
|
|
97
|
+
// ******************************************************************************************
|
|
98
|
+
function lastElementChild(element) {
|
|
99
|
+
return element.lastElementChild;
|
|
100
|
+
}
|
|
101
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZG9tLXRvb2xzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGlicy9mbGV4LWxheW91dC9fcHJpdmF0ZS11dGlscy90ZXN0aW5nL2RvbS10b29scy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSDs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLElBQUksR0FBRztJQUNsQixRQUFRO0lBQ1IsbUJBQW1CO0lBQ25CLGFBQWE7SUFDYixPQUFPO0lBQ1AsUUFBUTtJQUNSLFVBQVU7SUFDVixnQkFBZ0I7SUFDaEIsUUFBUTtJQUNSLFlBQVk7SUFDWixZQUFZO0lBQ1osYUFBYTtJQUNiLGFBQWE7SUFDYixhQUFhO0lBQ2IsU0FBUztJQUNULFlBQVk7SUFDWixPQUFPO0lBQ1AsZ0JBQWdCO0NBQ2pCLENBQUM7QUFFRiw2RkFBNkY7QUFDN0Ysa0NBQWtDO0FBQ2xDLHFFQUFxRTtBQUNyRSwwRUFBMEU7QUFDMUUsNkZBQTZGO0FBRTdGLFNBQVMsUUFBUSxDQUFDLE9BQVksRUFBRSxTQUFpQjtJQUMvQyxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDbEMsQ0FBQztBQUVELFNBQVMsUUFBUSxDQUFDLE9BQVksRUFDWixTQUFpQixFQUNqQixhQUFxQixFQUFFLEVBQ3ZCLFVBQVUsR0FBRyxJQUFJO0lBQ2pDLElBQUksS0FBSyxHQUFHLFFBQVEsQ0FBQyxPQUFPLEVBQUUsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0lBQy9DLElBQUksQ0FBQyxLQUFLLElBQUksQ0FBQyxVQUFVLEVBQUU7UUFDekIscUJBQXFCO1FBQ3JCLEtBQUssR0FBRyxPQUFPLGdCQUFnQixLQUFLLFVBQVU7WUFDNUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLENBQUMsZ0JBQWdCLENBQUMsU0FBUyxDQUFDLElBQUksRUFBRSxDQUFDO0tBQy9EO0lBQ0QsT0FBTyxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssSUFBSSxVQUFVLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQzdELENBQUM7QUFFRCxTQUFTLG1CQUFtQixDQUFDLEVBQWU7SUFDMUMsT0FBYSxFQUFHLENBQUMsbUJBQW1CLEVBQUUsQ0FBQztBQUN6QyxDQUFDO0FBRUQsU0FBUyxhQUFhLENBQUMsRUFBZTtJQUNwQyxPQUFhLEVBQUcsQ0FBQyxVQUFVLENBQUM7QUFDOUIsQ0FBQztBQUVELFNBQVMsT0FBTyxDQUFDLEVBQVE7SUFDdkIsT0FBTyxFQUFFLENBQUMsV0FBVyxJQUFJLEVBQUUsQ0FBQztBQUM5QixDQUFDO0FBRUQsU0FBUyxnQkFBZ0IsQ0FBQyxFQUFRO0lBQ2hDLE1BQU0sSUFBSSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUM7SUFDM0IsTUFBTSxHQUFHLEdBQUcsSUFBSSxLQUFLLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ25DLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO1FBQ3BDLEdBQUcsQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7S0FDbEI7SUFDRCxPQUFPLEdBQUcsQ0FBQztBQUNiLENBQUM7QUFFRCxTQUFTLFFBQVEsQ0FBQyxPQUFZLEVBQUUsU0FBaUI7SUFDL0MsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxTQUFTLENBQUMsQ0FBQztBQUMvQyxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsT0FBWSxFQUFFLGFBQXFCO0lBQ3ZELE9BQU8sT0FBTyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsU0FBUyxZQUFZLENBQUMsT0FBWSxFQUFFLGFBQXFCO0lBQ3ZELE9BQU8sT0FBTyxDQUFDLFlBQVksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUM3QyxDQUFDO0FBRUQsU0FBUyxVQUFVLENBQUMsRUFBTztJQUN6QixPQUFPLEVBQUUsQ0FBQyxVQUFVLENBQUM7QUFDdkIsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLElBQVM7SUFDOUIsT0FBTyxTQUFTLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxJQUFJLElBQUksWUFBWSxXQUFXLENBQUM7QUFDbkUsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLElBQVU7SUFDL0IsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMsYUFBYSxDQUFDLElBQVU7SUFDL0IsT0FBTyxJQUFJLENBQUMsUUFBUSxLQUFLLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDN0MsQ0FBQztBQUVELFNBQVMsWUFBWSxDQUFDLElBQVM7SUFDN0IsT0FBTyxJQUFJLFlBQVksZ0JBQWdCLENBQUM7QUFDMUMsQ0FBQztBQUVELFNBQVMsU0FBUyxDQUFDLEdBQVE7SUFDekIsT0FBTyxHQUFHLElBQUksSUFBSSxDQUFDO0FBQ3JCLENBQUM7QUFFRCxTQUFTLE9BQU8sQ0FBQyxPQUFZO0lBQzNCLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQztBQUN6QixDQUFDO0FBRUQsNkZBQTZGO0FBQzdGLDBDQUEwQztBQUMxQywwRUFBMEU7QUFDMUUsNkZBQTZGO0FBRTdGLFNBQVMsZ0JBQWdCLENBQUMsT0FBWTtJQUNwQyxPQUFPLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQztBQUNsQyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbi8qKlxuICogRXhwb3J0ZWQgRE9NIGFjY2Vzc29yIHV0aWxpdHkgZnVuY3Rpb25zXG4gKi9cbmV4cG9ydCBjb25zdCBfZG9tID0ge1xuICBoYXNTdHlsZSxcbiAgZ2V0RGlzdHJpYnV0ZWROb2RlcyxcbiAgZ2V0U2hhZG93Um9vdCxcbiAgZ2V0VGV4dCxcbiAgZ2V0U3R5bGUsXG4gIGNoaWxkTm9kZXMsXG4gIGNoaWxkTm9kZXNBc0xpc3QsXG4gIGhhc0NsYXNzLFxuICBoYXNBdHRyaWJ1dGUsXG4gIGdldEF0dHJpYnV0ZSxcbiAgaGFzU2hhZG93Um9vdCxcbiAgaXNDb21tZW50Tm9kZSxcbiAgaXNFbGVtZW50Tm9kZSxcbiAgaXNQcmVzZW50LFxuICBpc1NoYWRvd1Jvb3QsXG4gIHRhZ05hbWUsXG4gIGxhc3RFbGVtZW50Q2hpbGRcbn07XG5cbi8vICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKlxuLy8gVGhlc2UgZnVuY3Rpb25zIGFyZSBjbG9uZWQgZnJvbVxuLy8gICogIEBhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXIvc3JjL2Jyb3dzZXIvR2VuZXJpY0Jyb3dzZXJEb21BZGFwdGVyXG4vLyBhbmQgYXJlIHRvIGJlIHVzZWQgT05MWSBpbnRlcm5hbGx5IGluIGN1c3RvbS1tYXRjaGVycy50cyBhbmQgVW5pdCBUZXN0c1xuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG5cbmZ1bmN0aW9uIGdldFN0eWxlKGVsZW1lbnQ6IGFueSwgc3R5bGVuYW1lOiBzdHJpbmcpOiBzdHJpbmcge1xuICByZXR1cm4gZWxlbWVudC5zdHlsZVtzdHlsZW5hbWVdO1xufVxuXG5mdW5jdGlvbiBoYXNTdHlsZShlbGVtZW50OiBhbnksXG4gICAgICAgICAgICAgICAgICBzdHlsZU5hbWU6IHN0cmluZyxcbiAgICAgICAgICAgICAgICAgIHN0eWxlVmFsdWU6IHN0cmluZyA9ICcnLFxuICAgICAgICAgICAgICAgICAgaW5saW5lT25seSA9IHRydWUpOiBib29sZWFuIHtcbiAgbGV0IHZhbHVlID0gZ2V0U3R5bGUoZWxlbWVudCwgc3R5bGVOYW1lKSB8fCAnJztcbiAgaWYgKCF2YWx1ZSAmJiAhaW5saW5lT25seSkge1xuICAgIC8vIFNlYXJjaCBzdHlsZXNoZWV0c1xuICAgIHZhbHVlID0gdHlwZW9mIGdldENvbXB1dGVkU3R5bGUgPT09ICdmdW5jdGlvbicgJiZcbiAgICAgIGdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZ2V0UHJvcGVydHlWYWx1ZShzdHlsZU5hbWUpIHx8ICcnO1xuICB9XG4gIHJldHVybiBzdHlsZVZhbHVlID8gdmFsdWUgPT0gc3R5bGVWYWx1ZSA6IHZhbHVlLmxlbmd0aCA+IDA7XG59XG5cbmZ1bmN0aW9uIGdldERpc3RyaWJ1dGVkTm9kZXMoZWw6IEhUTUxFbGVtZW50KTogTm9kZVtdIHtcbiAgcmV0dXJuICg8YW55PmVsKS5nZXREaXN0cmlidXRlZE5vZGVzKCk7XG59XG5cbmZ1bmN0aW9uIGdldFNoYWRvd1Jvb3QoZWw6IEhUTUxFbGVtZW50KTogRG9jdW1lbnRGcmFnbWVudCB7XG4gIHJldHVybiAoPGFueT5lbCkuc2hhZG93Um9vdDtcbn1cblxuZnVuY3Rpb24gZ2V0VGV4dChlbDogTm9kZSk6IHN0cmluZyB7XG4gIHJldHVybiBlbC50ZXh0Q29udGVudCB8fCAnJztcbn1cblxuZnVuY3Rpb24gY2hpbGROb2Rlc0FzTGlzdChlbDogTm9kZSk6IGFueVtdIHtcbiAgY29uc3QgbGlzdCA9IGVsLmNoaWxkTm9kZXM7XG4gIGNvbnN0IHJlcyA9IG5ldyBBcnJheShsaXN0Lmxlbmd0aCk7XG4gIGZvciAobGV0IGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHJlc1tpXSA9IGxpc3RbaV07XG4gIH1cbiAgcmV0dXJuIHJlcztcbn1cblxuZnVuY3Rpb24gaGFzQ2xhc3MoZWxlbWVudDogYW55LCBjbGFzc05hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuICByZXR1cm4gZWxlbWVudC5jbGFzc0xpc3QuY29udGFpbnMoY2xhc3NOYW1lKTtcbn1cblxuZnVuY3Rpb24gaGFzQXR0cmlidXRlKGVsZW1lbnQ6IGFueSwgYXR0cmlidXRlTmFtZTogc3RyaW5nKTogYm9vbGVhbiB7XG4gIHJldHVybiBlbGVtZW50Lmhhc0F0dHJpYnV0ZShhdHRyaWJ1dGVOYW1lKTtcbn1cblxuZnVuY3Rpb24gZ2V0QXR0cmlidXRlKGVsZW1lbnQ6IGFueSwgYXR0cmlidXRlTmFtZTogc3RyaW5nKTogc3RyaW5nIHtcbiAgcmV0dXJuIGVsZW1lbnQuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZU5hbWUpO1xufVxuXG5mdW5jdGlvbiBjaGlsZE5vZGVzKGVsOiBhbnkpOiBOb2RlW10ge1xuICByZXR1cm4gZWwuY2hpbGROb2Rlcztcbn1cblxuZnVuY3Rpb24gaGFzU2hhZG93Um9vdChub2RlOiBhbnkpOiBib29sZWFuIHtcbiAgcmV0dXJuIGlzUHJlc2VudChub2RlLnNoYWRvd1Jvb3QpICYmIG5vZGUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudDtcbn1cblxuZnVuY3Rpb24gaXNDb21tZW50Tm9kZShub2RlOiBOb2RlKTogYm9vbGVhbiB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlID09PSBOb2RlLkNPTU1FTlRfTk9ERTtcbn1cblxuZnVuY3Rpb24gaXNFbGVtZW50Tm9kZShub2RlOiBOb2RlKTogYm9vbGVhbiB7XG4gIHJldHVybiBub2RlLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERTtcbn1cblxuZnVuY3Rpb24gaXNTaGFkb3dSb290KG5vZGU6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gbm9kZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQ7XG59XG5cbmZ1bmN0aW9uIGlzUHJlc2VudChvYmo6IGFueSk6IGJvb2xlYW4ge1xuICByZXR1cm4gb2JqICE9IG51bGw7XG59XG5cbmZ1bmN0aW9uIHRhZ05hbWUoZWxlbWVudDogYW55KTogc3RyaW5nIHtcbiAgcmV0dXJuIGVsZW1lbnQudGFnTmFtZTtcbn1cblxuLy8gKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqXG4vLyBUaGVzZSBmdW5jdGlvbnMgYXJlIHBhcnQgb2YgdGhlIERPTSBBUElcbi8vIGFuZCBhcmUgdG8gYmUgdXNlZCBPTkxZIGludGVybmFsbHkgaW4gY3VzdG9tLW1hdGNoZXJzLnRzIGFuZCBVbml0IFRlc3RzXG4vLyAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKipcblxuZnVuY3Rpb24gbGFzdEVsZW1lbnRDaGlsZChlbGVtZW50OiBhbnkpOiBOb2RlfG51bGwge1xuICByZXR1cm4gZWxlbWVudC5sYXN0RWxlbWVudENoaWxkO1xufVxuXG4iXX0=
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import { TestBed } from '@angular/core/testing';
|
|
2
|
+
import { By } from '@angular/platform-browser';
|
|
3
|
+
import { extendObject } from '@angular/flex-layout/_private-utils';
|
|
4
|
+
/**
|
|
5
|
+
* Function generator that captures a Component Type accessor and enables
|
|
6
|
+
* `createTestComponent()` to be reusable for *any* captured Component class.
|
|
7
|
+
*/
|
|
8
|
+
export function makeCreateTestComponent(getClass) {
|
|
9
|
+
let componentAny;
|
|
10
|
+
// Return actual `createTestComponent()` function
|
|
11
|
+
return function createTestComponent(template, styles) {
|
|
12
|
+
if (!componentAny) {
|
|
13
|
+
// Defer access to Component class to enable metadata to be configured properly...
|
|
14
|
+
componentAny = getClass();
|
|
15
|
+
}
|
|
16
|
+
return TestBed
|
|
17
|
+
.overrideComponent(componentAny, {
|
|
18
|
+
set: {
|
|
19
|
+
template: template,
|
|
20
|
+
styles: styles || [],
|
|
21
|
+
}
|
|
22
|
+
})
|
|
23
|
+
.createComponent(componentAny);
|
|
24
|
+
};
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
*
|
|
28
|
+
*/
|
|
29
|
+
export function expectNativeEl(fixture, instanceOptions) {
|
|
30
|
+
extendObject(fixture.componentInstance, instanceOptions || {});
|
|
31
|
+
fixture.detectChanges();
|
|
32
|
+
return expect(fixture.debugElement.children[0].nativeElement);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
*
|
|
36
|
+
*/
|
|
37
|
+
export function expectEl(debugEl) {
|
|
38
|
+
return expect(debugEl.nativeElement);
|
|
39
|
+
}
|
|
40
|
+
export function queryFor(fixture, selector) {
|
|
41
|
+
return fixture.debugElement.queryAll(By.css(selector));
|
|
42
|
+
}
|
|
43
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGVscGVycy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYnMvZmxleC1sYXlvdXQvX3ByaXZhdGUtdXRpbHMvdGVzdGluZy9oZWxwZXJzLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQVFBLE9BQU8sRUFBbUIsT0FBTyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDaEUsT0FBTyxFQUFDLEVBQUUsRUFBQyxNQUFNLDJCQUEyQixDQUFDO0FBQzdDLE9BQU8sRUFBQyxZQUFZLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUlqRTs7O0dBR0c7QUFDSCxNQUFNLFVBQVUsdUJBQXVCLENBQUMsUUFBMEI7SUFDaEUsSUFBSSxZQUF1QixDQUFDO0lBRTVCLGlEQUFpRDtJQUNqRCxPQUFPLFNBQVMsbUJBQW1CLENBQUMsUUFBZ0IsRUFBRSxNQUFZO1FBQ2hFLElBQUksQ0FBQyxZQUFZLEVBQUU7WUFDakIsa0ZBQWtGO1lBQ2xGLFlBQVksR0FBRyxRQUFRLEVBQUUsQ0FBQztTQUMzQjtRQUNELE9BQU8sT0FBTzthQUNULGlCQUFpQixDQUFDLFlBQVksRUFBRTtZQUMvQixHQUFHLEVBQUU7Z0JBQ0gsUUFBUSxFQUFFLFFBQVE7Z0JBQ2xCLE1BQU0sRUFBRSxNQUFNLElBQUksRUFBRTthQUNyQjtTQUNGLENBQUM7YUFDRCxlQUFlLENBQUMsWUFBWSxDQUFDLENBQUM7SUFDckMsQ0FBQyxDQUFDO0FBQ0osQ0FBQztBQUVEOztHQUVHO0FBQ0gsTUFBTSxVQUFVLGNBQWMsQ0FBQyxPQUE4QixFQUFFLGVBQXNCO0lBQ25GLFlBQVksQ0FBQyxPQUFPLENBQUMsaUJBQWlCLEVBQUUsZUFBZSxJQUFJLEVBQUUsQ0FBQyxDQUFDO0lBQy9ELE9BQU8sQ0FBQyxhQUFhLEVBQUUsQ0FBQztJQUN4QixPQUFPLE1BQU0sQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNoRSxDQUFDO0FBRUQ7O0dBRUc7QUFDSCxNQUFNLFVBQVUsUUFBUSxDQUFDLE9BQXFCO0lBQzVDLE9BQU8sTUFBTSxDQUFDLE9BQU8sQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUN2QyxDQUFDO0FBR0QsTUFBTSxVQUFVLFFBQVEsQ0FBQyxPQUE4QixFQUFFLFFBQWdCO0lBQ3ZFLE9BQU8sT0FBTyxDQUFDLFlBQVksQ0FBQyxRQUFRLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3pELENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cbmltcG9ydCB7VHlwZSwgRGVidWdFbGVtZW50fSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7Q29tcG9uZW50Rml4dHVyZSwgVGVzdEJlZH0gZnJvbSAnQGFuZ3VsYXIvY29yZS90ZXN0aW5nJztcbmltcG9ydCB7Qnl9IGZyb20gJ0Bhbmd1bGFyL3BsYXRmb3JtLWJyb3dzZXInO1xuaW1wb3J0IHtleHRlbmRPYmplY3R9IGZyb20gJ0Bhbmd1bGFyL2ZsZXgtbGF5b3V0L19wcml2YXRlLXV0aWxzJztcblxuZXhwb3J0IHR5cGUgQ29tcG9uZW50Q2xhenpGbiA9ICgpID0+IFR5cGU8YW55PjtcblxuLyoqXG4gKiBGdW5jdGlvbiBnZW5lcmF0b3IgdGhhdCBjYXB0dXJlcyBhIENvbXBvbmVudCBUeXBlIGFjY2Vzc29yIGFuZCBlbmFibGVzXG4gKiBgY3JlYXRlVGVzdENvbXBvbmVudCgpYCB0byBiZSByZXVzYWJsZSBmb3IgKmFueSogY2FwdHVyZWQgQ29tcG9uZW50IGNsYXNzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gbWFrZUNyZWF0ZVRlc3RDb21wb25lbnQoZ2V0Q2xhc3M6IENvbXBvbmVudENsYXp6Rm4pIHtcbiAgbGV0IGNvbXBvbmVudEFueTogVHlwZTxhbnk+O1xuXG4gIC8vIFJldHVybiBhY3R1YWwgYGNyZWF0ZVRlc3RDb21wb25lbnQoKWAgZnVuY3Rpb25cbiAgcmV0dXJuIGZ1bmN0aW9uIGNyZWF0ZVRlc3RDb21wb25lbnQodGVtcGxhdGU6IHN0cmluZywgc3R5bGVzPzogYW55KTogQ29tcG9uZW50Rml4dHVyZTxUeXBlPGFueT4+IHtcbiAgICBpZiAoIWNvbXBvbmVudEFueSkge1xuICAgICAgLy8gRGVmZXIgYWNjZXNzIHRvIENvbXBvbmVudCBjbGFzcyB0byBlbmFibGUgbWV0YWRhdGEgdG8gYmUgY29uZmlndXJlZCBwcm9wZXJseS4uLlxuICAgICAgY29tcG9uZW50QW55ID0gZ2V0Q2xhc3MoKTtcbiAgICB9XG4gICAgcmV0dXJuIFRlc3RCZWRcbiAgICAgICAgLm92ZXJyaWRlQ29tcG9uZW50KGNvbXBvbmVudEFueSwge1xuICAgICAgICAgIHNldDoge1xuICAgICAgICAgICAgdGVtcGxhdGU6IHRlbXBsYXRlLFxuICAgICAgICAgICAgc3R5bGVzOiBzdHlsZXMgfHwgW10sXG4gICAgICAgICAgfVxuICAgICAgICB9KVxuICAgICAgICAuY3JlYXRlQ29tcG9uZW50KGNvbXBvbmVudEFueSk7XG4gIH07XG59XG5cbi8qKlxuICpcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGV4cGVjdE5hdGl2ZUVsKGZpeHR1cmU6IENvbXBvbmVudEZpeHR1cmU8YW55PiwgaW5zdGFuY2VPcHRpb25zID86IGFueSk6IGFueSB7XG4gIGV4dGVuZE9iamVjdChmaXh0dXJlLmNvbXBvbmVudEluc3RhbmNlLCBpbnN0YW5jZU9wdGlvbnMgfHwge30pO1xuICBmaXh0dXJlLmRldGVjdENoYW5nZXMoKTtcbiAgcmV0dXJuIGV4cGVjdChmaXh0dXJlLmRlYnVnRWxlbWVudC5jaGlsZHJlblswXS5uYXRpdmVFbGVtZW50KTtcbn1cblxuLyoqXG4gKlxuICovXG5leHBvcnQgZnVuY3Rpb24gZXhwZWN0RWwoZGVidWdFbDogRGVidWdFbGVtZW50KTogYW55IHtcbiAgcmV0dXJuIGV4cGVjdChkZWJ1Z0VsLm5hdGl2ZUVsZW1lbnQpO1xufVxuXG5cbmV4cG9ydCBmdW5jdGlvbiBxdWVyeUZvcihmaXh0dXJlOiBDb21wb25lbnRGaXh0dXJlPGFueT4sIHNlbGVjdG9yOiBzdHJpbmcpOiBEZWJ1Z0VsZW1lbnRbXSB7XG4gIHJldHVybiBmaXh0dXJlLmRlYnVnRWxlbWVudC5xdWVyeUFsbChCeS5jc3Moc2VsZWN0b3IpKTtcbn1cblxuXG4iXX0=
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
export * from './custom-matchers';
|
|
9
|
+
export * from './dom-tools';
|
|
10
|
+
export * from './helpers';
|
|
11
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWJzL2ZsZXgtbGF5b3V0L19wcml2YXRlLXV0aWxzL3Rlc3RpbmcvaW5kZXgudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsY0FBYyxtQkFBbUIsQ0FBQztBQUNsQyxjQUFjLGFBQWEsQ0FBQztBQUM1QixjQUFjLFdBQVcsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2N1c3RvbS1tYXRjaGVycyc7XG5leHBvcnQgKiBmcm9tICcuL2RvbS10b29scyc7XG5leHBvcnQgKiBmcm9tICcuL2hlbHBlcnMnO1xuIl19
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1mbGV4LWxheW91dC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3Byb2plY3RzL2xpYnMvZmxleC1sYXlvdXQvYW5ndWxhci1mbGV4LWxheW91dC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
import { MediaChange } from './media-change';
|
|
9
|
+
/**
|
|
10
|
+
* For the specified MediaChange, make sure it contains the breakpoint alias
|
|
11
|
+
* and suffix (if available).
|
|
12
|
+
*/
|
|
13
|
+
export function mergeAlias(dest, source) {
|
|
14
|
+
dest = dest ? dest.clone() : new MediaChange();
|
|
15
|
+
if (source) {
|
|
16
|
+
dest.mqAlias = source.alias;
|
|
17
|
+
dest.mediaQuery = source.mediaQuery;
|
|
18
|
+
dest.suffix = source.suffix;
|
|
19
|
+
dest.priority = source.priority;
|
|
20
|
+
}
|
|
21
|
+
return dest;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYWRkLWFsaWFzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGlicy9mbGV4LWxheW91dC9jb3JlL2FkZC1hbGlhcy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFDSCxPQUFPLEVBQUMsV0FBVyxFQUFDLE1BQU0sZ0JBQWdCLENBQUM7QUFHM0M7OztHQUdHO0FBQ0gsTUFBTSxVQUFVLFVBQVUsQ0FBQyxJQUFpQixFQUFFLE1BQXlCO0lBQ3JFLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxXQUFXLEVBQUUsQ0FBQztJQUMvQyxJQUFJLE1BQU0sRUFBRTtRQUNWLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDLEtBQUssQ0FBQztRQUM1QixJQUFJLENBQUMsVUFBVSxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUM7UUFDcEMsSUFBSSxDQUFDLE1BQU0sR0FBRyxNQUFNLENBQUMsTUFBZ0IsQ0FBQztRQUN0QyxJQUFJLENBQUMsUUFBUSxHQUFHLE1BQU0sQ0FBQyxRQUFrQixDQUFDO0tBQzNDO0lBQ0QsT0FBTyxJQUFJLENBQUM7QUFDZCxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5pbXBvcnQge01lZGlhQ2hhbmdlfSBmcm9tICcuL21lZGlhLWNoYW5nZSc7XG5pbXBvcnQge0JyZWFrUG9pbnR9IGZyb20gJy4vYnJlYWtwb2ludHMvYnJlYWstcG9pbnQnO1xuXG4vKipcbiAqIEZvciB0aGUgc3BlY2lmaWVkIE1lZGlhQ2hhbmdlLCBtYWtlIHN1cmUgaXQgY29udGFpbnMgdGhlIGJyZWFrcG9pbnQgYWxpYXNcbiAqIGFuZCBzdWZmaXggKGlmIGF2YWlsYWJsZSkuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBtZXJnZUFsaWFzKGRlc3Q6IE1lZGlhQ2hhbmdlLCBzb3VyY2U6IEJyZWFrUG9pbnQgfCBudWxsKTogTWVkaWFDaGFuZ2Uge1xuICBkZXN0ID0gZGVzdCA/IGRlc3QuY2xvbmUoKSA6IG5ldyBNZWRpYUNoYW5nZSgpO1xuICBpZiAoc291cmNlKSB7XG4gICAgZGVzdC5tcUFsaWFzID0gc291cmNlLmFsaWFzO1xuICAgIGRlc3QubWVkaWFRdWVyeSA9IHNvdXJjZS5tZWRpYVF1ZXJ5O1xuICAgIGRlc3Quc3VmZml4ID0gc291cmNlLnN1ZmZpeCBhcyBzdHJpbmc7XG4gICAgZGVzdC5wcmlvcml0eSA9IHNvdXJjZS5wcmlvcml0eSBhcyBudW1iZXI7XG4gIH1cbiAgcmV0dXJuIGRlc3Q7XG59XG4iXX0=
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Generated bundle index. Do not edit.
|
|
3
|
+
*/
|
|
4
|
+
export * from './public-api';
|
|
5
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYW5ndWxhci1mbGV4LWxheW91dC1jb3JlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvbGlicy9mbGV4LWxheW91dC9jb3JlL2FuZ3VsYXItZmxleC1sYXlvdXQtY29yZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL3B1YmxpYy1hcGknO1xuIl19
|
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
import { Directive } from '@angular/core';
|
|
9
|
+
import { Subject } from 'rxjs';
|
|
10
|
+
import { buildLayoutCSS } from '@angular/flex-layout/_private-utils';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "../style-builder/style-builder";
|
|
13
|
+
import * as i2 from "../style-utils/style-utils";
|
|
14
|
+
import * as i3 from "../media-marshaller/media-marshaller";
|
|
15
|
+
export class BaseDirective2 {
|
|
16
|
+
constructor(elementRef, styleBuilder, styler, marshal) {
|
|
17
|
+
this.elementRef = elementRef;
|
|
18
|
+
this.styleBuilder = styleBuilder;
|
|
19
|
+
this.styler = styler;
|
|
20
|
+
this.marshal = marshal;
|
|
21
|
+
this.DIRECTIVE_KEY = '';
|
|
22
|
+
this.inputs = [];
|
|
23
|
+
/** The most recently used styles for the builder */
|
|
24
|
+
this.mru = {};
|
|
25
|
+
this.destroySubject = new Subject();
|
|
26
|
+
/** Cache map for style computation */
|
|
27
|
+
this.styleCache = new Map();
|
|
28
|
+
}
|
|
29
|
+
/** Access to host element's parent DOM node */
|
|
30
|
+
get parentElement() {
|
|
31
|
+
return this.elementRef.nativeElement.parentElement;
|
|
32
|
+
}
|
|
33
|
+
/** Access to the HTMLElement for the directive */
|
|
34
|
+
get nativeElement() {
|
|
35
|
+
return this.elementRef.nativeElement;
|
|
36
|
+
}
|
|
37
|
+
/** Access to the activated value for the directive */
|
|
38
|
+
get activatedValue() {
|
|
39
|
+
return this.marshal.getValue(this.nativeElement, this.DIRECTIVE_KEY);
|
|
40
|
+
}
|
|
41
|
+
set activatedValue(value) {
|
|
42
|
+
this.marshal.setValue(this.nativeElement, this.DIRECTIVE_KEY, value, this.marshal.activatedAlias);
|
|
43
|
+
}
|
|
44
|
+
/** For @Input changes */
|
|
45
|
+
ngOnChanges(changes) {
|
|
46
|
+
Object.keys(changes).forEach(key => {
|
|
47
|
+
if (this.inputs.indexOf(key) !== -1) {
|
|
48
|
+
const bp = key.split('.').slice(1).join('.');
|
|
49
|
+
const val = changes[key].currentValue;
|
|
50
|
+
this.setValue(val, bp);
|
|
51
|
+
}
|
|
52
|
+
});
|
|
53
|
+
}
|
|
54
|
+
ngOnDestroy() {
|
|
55
|
+
this.destroySubject.next();
|
|
56
|
+
this.destroySubject.complete();
|
|
57
|
+
this.marshal.releaseElement(this.nativeElement);
|
|
58
|
+
}
|
|
59
|
+
/** Register with central marshaller service */
|
|
60
|
+
init(extraTriggers = []) {
|
|
61
|
+
this.marshal.init(this.elementRef.nativeElement, this.DIRECTIVE_KEY, this.updateWithValue.bind(this), this.clearStyles.bind(this), extraTriggers);
|
|
62
|
+
}
|
|
63
|
+
/** Add styles to the element using predefined style builder */
|
|
64
|
+
addStyles(input, parent) {
|
|
65
|
+
const builder = this.styleBuilder;
|
|
66
|
+
const useCache = builder.shouldCache;
|
|
67
|
+
let genStyles = this.styleCache.get(input);
|
|
68
|
+
if (!genStyles || !useCache) {
|
|
69
|
+
genStyles = builder.buildStyles(input, parent);
|
|
70
|
+
if (useCache) {
|
|
71
|
+
this.styleCache.set(input, genStyles);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
this.mru = { ...genStyles };
|
|
75
|
+
this.applyStyleToElement(genStyles);
|
|
76
|
+
builder.sideEffect(input, genStyles, parent);
|
|
77
|
+
}
|
|
78
|
+
/** Remove generated styles from an element using predefined style builder */
|
|
79
|
+
clearStyles() {
|
|
80
|
+
Object.keys(this.mru).forEach(k => {
|
|
81
|
+
this.mru[k] = '';
|
|
82
|
+
});
|
|
83
|
+
this.applyStyleToElement(this.mru);
|
|
84
|
+
this.mru = {};
|
|
85
|
+
this.currentValue = undefined;
|
|
86
|
+
}
|
|
87
|
+
/** Force trigger style updates on DOM element */
|
|
88
|
+
triggerUpdate() {
|
|
89
|
+
this.marshal.triggerUpdate(this.nativeElement, this.DIRECTIVE_KEY);
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Determine the DOM element's Flexbox flow (flex-direction).
|
|
93
|
+
*
|
|
94
|
+
* Check inline style first then check computed (stylesheet) style.
|
|
95
|
+
* And optionally add the flow value to element's inline style.
|
|
96
|
+
*/
|
|
97
|
+
getFlexFlowDirection(target, addIfMissing = false) {
|
|
98
|
+
if (target) {
|
|
99
|
+
const [value, hasInlineValue] = this.styler.getFlowDirection(target);
|
|
100
|
+
if (!hasInlineValue && addIfMissing) {
|
|
101
|
+
const style = buildLayoutCSS(value);
|
|
102
|
+
const elements = [target];
|
|
103
|
+
this.styler.applyStyleToElements(style, elements);
|
|
104
|
+
}
|
|
105
|
+
return value.trim();
|
|
106
|
+
}
|
|
107
|
+
return 'row';
|
|
108
|
+
}
|
|
109
|
+
hasWrap(target) {
|
|
110
|
+
return this.styler.hasWrap(target);
|
|
111
|
+
}
|
|
112
|
+
/** Applies styles given via string pair or object map to the directive element */
|
|
113
|
+
applyStyleToElement(style, value, element = this.nativeElement) {
|
|
114
|
+
this.styler.applyStyleToElement(element, style, value);
|
|
115
|
+
}
|
|
116
|
+
setValue(val, bp) {
|
|
117
|
+
this.marshal.setValue(this.nativeElement, this.DIRECTIVE_KEY, val, bp);
|
|
118
|
+
}
|
|
119
|
+
updateWithValue(input) {
|
|
120
|
+
if (this.currentValue !== input) {
|
|
121
|
+
this.addStyles(input);
|
|
122
|
+
this.currentValue = input;
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
BaseDirective2.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: BaseDirective2, deps: [{ token: i0.ElementRef }, { token: i1.StyleBuilder }, { token: i2.StyleUtils }, { token: i3.MediaMarshaller }], target: i0.ɵɵFactoryTarget.Directive });
|
|
127
|
+
BaseDirective2.ɵdir = i0.ɵɵngDeclareDirective({ minVersion: "12.0.0", version: "13.0.2", type: BaseDirective2, usesOnChanges: true, ngImport: i0 });
|
|
128
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "13.0.2", ngImport: i0, type: BaseDirective2, decorators: [{
|
|
129
|
+
type: Directive
|
|
130
|
+
}], ctorParameters: function () { return [{ type: i0.ElementRef }, { type: i1.StyleBuilder }, { type: i2.StyleUtils }, { type: i3.MediaMarshaller }]; } });
|
|
131
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYmFzZTIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWJzL2ZsZXgtbGF5b3V0L2NvcmUvYmFzZS9iYXNlMi50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFDSCxPQUFPLEVBQUMsU0FBUyxFQUFrRCxNQUFNLGVBQWUsQ0FBQztBQUN6RixPQUFPLEVBQWEsT0FBTyxFQUFDLE1BQU0sTUFBTSxDQUFDO0FBS3pDLE9BQU8sRUFBQyxjQUFjLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQzs7Ozs7QUFHbkUsTUFBTSxPQUFnQixjQUFjO0lBK0JsQyxZQUFnQyxVQUFzQixFQUN0QixZQUEwQixFQUMxQixNQUFrQixFQUNsQixPQUF3QjtRQUh4QixlQUFVLEdBQVYsVUFBVSxDQUFZO1FBQ3RCLGlCQUFZLEdBQVosWUFBWSxDQUFjO1FBQzFCLFdBQU0sR0FBTixNQUFNLENBQVk7UUFDbEIsWUFBTyxHQUFQLE9BQU8sQ0FBaUI7UUFoQzlDLGtCQUFhLEdBQUcsRUFBRSxDQUFDO1FBQ25CLFdBQU0sR0FBYSxFQUFFLENBQUM7UUFDaEMsb0RBQW9EO1FBQzFDLFFBQUcsR0FBb0IsRUFBRSxDQUFDO1FBQzFCLG1CQUFjLEdBQWtCLElBQUksT0FBTyxFQUFFLENBQUM7UUFzQnhELHNDQUFzQztRQUM1QixlQUFVLEdBQWlDLElBQUksR0FBRyxFQUFFLENBQUM7SUFNL0QsQ0FBQztJQTFCRCwrQ0FBK0M7SUFDL0MsSUFBYyxhQUFhO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUMsYUFBYSxDQUFDO0lBQ3JELENBQUM7SUFFRCxrREFBa0Q7SUFDbEQsSUFBYyxhQUFhO1FBQ3pCLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxhQUFhLENBQUM7SUFDdkMsQ0FBQztJQUVELHNEQUFzRDtJQUN0RCxJQUFJLGNBQWM7UUFDaEIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFB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QUM7SUFFUyxRQUFRLENBQUMsR0FBUSxFQUFFLEVBQVU7UUFDckMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsYUFBYSxFQUFFLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUN6RSxDQUFDO0lBRVMsZUFBZSxDQUFDLEtBQWE7UUFDckMsSUFBSSxJQUFJLENBQUMsWUFBWSxLQUFLLEtBQUssRUFBRTtZQUMvQixJQUFJLENBQUMsU0FBUyxDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3RCLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1NBQzNCO0lBQ0gsQ0FBQzs7MkdBN0ltQixjQUFjOytGQUFkLGNBQWM7MkZBQWQsY0FBYztrQkFEbkMsU0FBUyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuaW1wb3J0IHtEaXJlY3RpdmUsIEVsZW1lbnRSZWYsIE9uQ2hhbmdlcywgT25EZXN0cm95LCBTaW1wbGVDaGFuZ2VzfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7T2JzZXJ2YWJsZSwgU3ViamVjdH0gZnJvbSAncnhqcyc7XG5cbmltcG9ydCB7U3R5bGVEZWZpbml0aW9uLCBTdHlsZVV0aWxzfSBmcm9tICcuLi9zdHlsZS11dGlscy9zdHlsZS11dGlscyc7XG5pbXBvcnQge1N0eWxlQnVpbGRlcn0gZnJvbSAnLi4vc3R5bGUtYnVpbGRlci9zdHlsZS1idWlsZGVyJztcbmltcG9ydCB7TWVkaWFNYXJzaGFsbGVyfSBmcm9tICcuLi9tZWRpYS1tYXJzaGFsbGVyL21lZGlhLW1hcnNoYWxsZXInO1xuaW1wb3J0IHtidWlsZExheW91dENTU30gZnJvbSAnQGFuZ3VsYXIvZmxleC1sYXlvdXQvX3ByaXZhdGUtdXRpbHMnO1xuXG5ARGlyZWN0aXZlKClcbmV4cG9ydCBhYnN0cmFjdCBjbGFzcyBCYXNlRGlyZWN0aXZlMiBpbXBsZW1lbnRzIE9uQ2hhbmdlcywgT25EZXN0cm95IHtcblxuICBwcm90ZWN0ZWQgRElSRUNUSVZFX0tFWSA9ICcnO1xuICBwcm90ZWN0ZWQgaW5wdXRzOiBzdHJpbmdbXSA9IFtdO1xuICAvKiogVGhlIG1vc3QgcmVjZW50bHkgdXNlZCBzdHlsZXMgZm9yIHRoZSBidWlsZGVyICovXG4gIHByb3RlY3RlZCBtcnU6IFN0eWxlRGVmaW5pdGlvbiA9IHt9O1xuICBwcm90ZWN0ZWQgZGVzdHJveVN1YmplY3Q6IFN1YmplY3Q8dm9pZD4gPSBuZXcgU3ViamVjdCgpO1xuICBwcm90ZWN0ZWQgY3VycmVudFZhbHVlOiBhbnk7XG5cbiAgLyoqIEFjY2VzcyB0byBob3N0IGVsZW1lbnQncyBwYXJlbnQgRE9NIG5vZGUgKi9cbiAgcHJvdGVjdGVkIGdldCBwYXJlbnRFbGVtZW50KCk6IEhUTUxFbGVtZW50IHwgbnVsbCB7XG4gICAgcmV0dXJuIHRoaXMuZWxlbWVudFJlZi5uYXRpdmVFbGVtZW50LnBhcmVudEVsZW1lbnQ7XG4gIH1cblxuICAvKiogQWNjZXNzIHRvIHRoZSBIVE1MRWxlbWVudCBmb3IgdGhlIGRpcmVjdGl2ZSAqL1xuICBwcm90ZWN0ZWQgZ2V0IG5hdGl2ZUVsZW1lbnQoKTogSFRNTEVsZW1lbnQge1xuICAgIHJldHVybiB0aGlzLmVsZW1lbnRSZWYubmF0aXZlRWxlbWVudDtcbiAgfVxuXG4gIC8qKiBBY2Nlc3MgdG8gdGhlIGFjdGl2YXRlZCB2YWx1ZSBmb3IgdGhlIGRpcmVjdGl2ZSAqL1xuICBnZXQgYWN0aXZhdGVkVmFsdWUoKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5tYXJzaGFsLmdldFZhbHVlKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcy5ESVJFQ1RJVkVfS0VZKTtcbiAgfVxuICBzZXQgYWN0aXZhdGVkVmFsdWUodmFsdWU6IHN0cmluZykge1xuICAgIHRoaXMubWFyc2hhbC5zZXRWYWx1ZSh0aGlzLm5hdGl2ZUVsZW1lbnQsIHRoaXMuRElSRUNUSVZFX0tFWSwgdmFsdWUsXG4gICAgICB0aGlzLm1hcnNoYWwuYWN0aXZhdGVkQWxpYXMpO1xuICB9XG5cbiAgLyoqIENhY2hlIG1hcCBmb3Igc3R5bGUgY29tcHV0YXRpb24gKi9cbiAgcHJvdGVjdGVkIHN0eWxlQ2FjaGU6IE1hcDxzdHJpbmcsIFN0eWxlRGVmaW5pdGlvbj4gPSBuZXcgTWFwKCk7XG5cbiAgcHJvdGVjdGVkIGNvbnN0cnVjdG9yKHByb3RlY3RlZCBlbGVtZW50UmVmOiBFbGVtZW50UmVmLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIHN0eWxlQnVpbGRlcjogU3R5bGVCdWlsZGVyLFxuICAgICAgICAgICAgICAgICAgICAgICAgcHJvdGVjdGVkIHN0eWxlcjogU3R5bGVVdGlscyxcbiAgICAgICAgICAgICAgICAgICAgICAgIHByb3RlY3RlZCBtYXJzaGFsOiBNZWRpYU1hcnNoYWxsZXIpIHtcbiAgfVxuXG4gIC8qKiBGb3IgQElucHV0IGNoYW5nZXMgKi9cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcykge1xuICAgIE9iamVjdC5rZXlzKGNoYW5nZXMpLmZvckVhY2goa2V5ID0+IHtcbiAgICAgIGlmICh0aGlzLmlucHV0cy5pbmRleE9mKGtleSkgIT09IC0xKSB7XG4gICAgICAgIGNvbnN0IGJwID0ga2V5LnNwbGl0KCcuJykuc2xpY2UoMSkuam9pbignLicpO1xuICAgICAgICBjb25zdCB2YWwgPSBjaGFuZ2VzW2tleV0uY3VycmVudFZhbHVlO1xuICAgICAgICB0aGlzLnNldFZhbHVlKHZhbCwgYnApO1xuICAgICAgfVxuICAgIH0pO1xuICB9XG5cbiAgbmdPbkRlc3Ryb3koKTogdm9pZCB7XG4gICAgdGhpcy5kZXN0cm95U3ViamVjdC5uZXh0KCk7XG4gICAgdGhpcy5kZXN0cm95U3ViamVjdC5jb21wbGV0ZSgpO1xuICAgIHRoaXMubWFyc2hhbC5yZWxlYXNlRWxlbWVudCh0aGlzLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgLyoqIFJlZ2lzdGVyIHdpdGggY2VudHJhbCBtYXJzaGFsbGVyIHNlcnZpY2UgKi9cbiAgcHJvdGVjdGVkIGluaXQoZXh0cmFUcmlnZ2VyczogT2JzZXJ2YWJsZTxhbnk+W10gPSBbXSk6IHZvaWQge1xuICAgIHRoaXMubWFyc2hhbC5pbml0KFxuICAgICAgdGhpcy5lbGVtZW50UmVmLm5hdGl2ZUVsZW1lbnQsXG4gICAgICB0aGlzLkRJUkVDVElWRV9LRVksXG4gICAgICB0aGlzLnVwZGF0ZVdpdGhWYWx1ZS5iaW5kKHRoaXMpLFxuICAgICAgdGhpcy5jbGVhclN0eWxlcy5iaW5kKHRoaXMpLFxuICAgICAgZXh0cmFUcmlnZ2Vyc1xuICAgICk7XG4gIH1cblxuICAvKiogQWRkIHN0eWxlcyB0byB0aGUgZWxlbWVudCB1c2luZyBwcmVkZWZpbmVkIHN0eWxlIGJ1aWxkZXIgKi9cbiAgcHJvdGVjdGVkIGFkZFN0eWxlcyhpbnB1dDogc3RyaW5nLCBwYXJlbnQ/OiBPYmplY3QpIHtcbiAgICBjb25zdCBidWlsZGVyID0gdGhpcy5zdHlsZUJ1aWxkZXI7XG4gICAgY29uc3QgdXNlQ2FjaGUgPSBidWlsZGVyLnNob3VsZENhY2hlO1xuXG4gICAgbGV0IGdlblN0eWxlczogU3R5bGVEZWZpbml0aW9uIHwgdW5kZWZpbmVkID0gdGhpcy5zdHlsZUNhY2hlLmdldChpbnB1dCk7XG5cbiAgICBpZiAoIWdlblN0eWxlcyB8fCAhdXNlQ2FjaGUpIHtcbiAgICAgIGdlblN0eWxlcyA9IGJ1aWxkZXIuYnVpbGRTdHlsZXMoaW5wdXQsIHBhcmVudCk7XG4gICAgICBpZiAodXNlQ2FjaGUpIHtcbiAgICAgICAgdGhpcy5zdHlsZUNhY2hlLnNldChpbnB1dCwgZ2VuU3R5bGVzKTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICB0aGlzLm1ydSA9IHsuLi5nZW5TdHlsZXN9O1xuICAgIHRoaXMuYXBwbHlTdHlsZVRvRWxlbWVudChnZW5TdHlsZXMpO1xuICAgIGJ1aWxkZXIuc2lkZUVmZmVjdChpbnB1dCwgZ2VuU3R5bGVzLCBwYXJlbnQpO1xuICB9XG5cbiAgLyoqIFJlbW92ZSBnZW5lcmF0ZWQgc3R5bGVzIGZyb20gYW4gZWxlbWVudCB1c2luZyBwcmVkZWZpbmVkIHN0eWxlIGJ1aWxkZXIgKi9cbiAgcHJvdGVjdGVkIGNsZWFyU3R5bGVzKCkge1xuICAgIE9iamVjdC5rZXlzKHRoaXMubXJ1KS5mb3JFYWNoKGsgPT4ge1xuICAgICAgdGhpcy5tcnVba10gPSAnJztcbiAgICB9KTtcbiAgICB0aGlzLmFwcGx5U3R5bGVUb0VsZW1lbnQodGhpcy5tcnUpO1xuICAgIHRoaXMubXJ1ID0ge307XG4gICAgdGhpcy5jdXJyZW50VmFsdWUgPSB1bmRlZmluZWQ7XG4gIH1cblxuICAvKiogRm9yY2UgdHJpZ2dlciBzdHlsZSB1cGRhdGVzIG9uIERPTSBlbGVtZW50ICovXG4gIHByb3RlY3RlZCB0cmlnZ2VyVXBkYXRlKCkge1xuICAgIHRoaXMubWFyc2hhbC50cmlnZ2VyVXBkYXRlKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcy5ESVJFQ1RJVkVfS0VZKTtcbiAgfVxuXG4gIC8qKlxuICAgKiBEZXRlcm1pbmUgdGhlIERPTSBlbGVtZW50J3MgRmxleGJveCBmbG93IChmbGV4LWRpcmVjdGlvbikuXG4gICAqXG4gICAqIENoZWNrIGlubGluZSBzdHlsZSBmaXJzdCB0aGVuIGNoZWNrIGNvbXB1dGVkIChzdHlsZXNoZWV0KSBzdHlsZS5cbiAgICogQW5kIG9wdGlvbmFsbHkgYWRkIHRoZSBmbG93IHZhbHVlIHRvIGVsZW1lbnQncyBpbmxpbmUgc3R5bGUuXG4gICAqL1xuICBwcm90ZWN0ZWQgZ2V0RmxleEZsb3dEaXJlY3Rpb24odGFyZ2V0OiBIVE1MRWxlbWVudCwgYWRkSWZNaXNzaW5nID0gZmFsc2UpOiBzdHJpbmcge1xuICAgIGlmICh0YXJnZXQpIHtcbiAgICAgIGNvbnN0IFt2YWx1ZSwgaGFzSW5saW5lVmFsdWVdID0gdGhpcy5zdHlsZXIuZ2V0Rmxvd0RpcmVjdGlvbih0YXJnZXQpO1xuXG4gICAgICBpZiAoIWhhc0lubGluZVZhbHVlICYmIGFkZElmTWlzc2luZykge1xuICAgICAgICBjb25zdCBzdHlsZSA9IGJ1aWxkTGF5b3V0Q1NTKHZhbHVlKTtcbiAgICAgICAgY29uc3QgZWxlbWVudHMgPSBbdGFyZ2V0XTtcbiAgICAgICAgdGhpcy5zdHlsZXIuYXBwbHlTdHlsZVRvRWxlbWVudHMoc3R5bGUsIGVsZW1lbnRzKTtcbiAgICAgIH1cblxuICAgICAgcmV0dXJuIHZhbHVlLnRyaW0oKTtcbiAgICB9XG5cbiAgICByZXR1cm4gJ3Jvdyc7XG4gIH1cblxuICBwcm90ZWN0ZWQgaGFzV3JhcCh0YXJnZXQ6IEhUTUxFbGVtZW50KTogYm9vbGVhbiB7XG4gICAgcmV0dXJuIHRoaXMuc3R5bGVyLmhhc1dyYXAodGFyZ2V0KTtcbiAgfVxuXG4gIC8qKiBBcHBsaWVzIHN0eWxlcyBnaXZlbiB2aWEgc3RyaW5nIHBhaXIgb3Igb2JqZWN0IG1hcCB0byB0aGUgZGlyZWN0aXZlIGVsZW1lbnQgKi9cbiAgcHJvdGVjdGVkIGFwcGx5U3R5bGVUb0VsZW1lbnQoc3R5bGU6IFN0eWxlRGVmaW5pdGlvbixcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWU/OiBzdHJpbmcgfCBudW1iZXIsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsZW1lbnQ6IEhUTUxFbGVtZW50ID0gdGhpcy5uYXRpdmVFbGVtZW50KSB7XG4gICAgdGhpcy5zdHlsZXIuYXBwbHlTdHlsZVRvRWxlbWVudChlbGVtZW50LCBzdHlsZSwgdmFsdWUpO1xuICB9XG5cbiAgcHJvdGVjdGVkIHNldFZhbHVlKHZhbDogYW55LCBicDogc3RyaW5nKTogdm9pZCB7XG4gICAgdGhpcy5tYXJzaGFsLnNldFZhbHVlKHRoaXMubmF0aXZlRWxlbWVudCwgdGhpcy5ESVJFQ1RJVkVfS0VZLCB2YWwsIGJwKTtcbiAgfVxuXG4gIHByb3RlY3RlZCB1cGRhdGVXaXRoVmFsdWUoaW5wdXQ6IHN0cmluZykge1xuICAgIGlmICh0aGlzLmN1cnJlbnRWYWx1ZSAhPT0gaW5wdXQpIHtcbiAgICAgIHRoaXMuYWRkU3R5bGVzKGlucHV0KTtcbiAgICAgIHRoaXMuY3VycmVudFZhbHVlID0gaW5wdXQ7XG4gICAgfVxuICB9XG59XG4iXX0=
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright Google LLC All Rights Reserved.
|
|
4
|
+
*
|
|
5
|
+
* Use of this source code is governed by an MIT-style license that can be
|
|
6
|
+
* found in the LICENSE file at https://angular.io/license
|
|
7
|
+
*/
|
|
8
|
+
export * from './base2';
|
|
9
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9saWJzL2ZsZXgtbGF5b3V0L2NvcmUvYmFzZS9pbmRleC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxjQUFjLFNBQVMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2Jhc2UyJztcbiJdfQ==
|