@angular/upgrade 19.0.0-next.0 → 19.0.0-next.10

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.
Files changed (41) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +1 -1
  3. package/fesm2022/static/testing.mjs +5 -5
  4. package/fesm2022/static/testing.mjs.map +1 -1
  5. package/fesm2022/static.mjs +70 -21
  6. package/fesm2022/static.mjs.map +1 -1
  7. package/fesm2022/upgrade.mjs +68 -18
  8. package/fesm2022/upgrade.mjs.map +1 -1
  9. package/index.d.ts +1 -1
  10. package/package.json +5 -11
  11. package/static/index.d.ts +28 -4
  12. package/static/testing/index.d.ts +1 -1
  13. package/esm2022/index.mjs +0 -13
  14. package/esm2022/public_api.mjs +0 -17
  15. package/esm2022/src/common/src/angular1.mjs +0 -73
  16. package/esm2022/src/common/src/component_info.mjs +0 -27
  17. package/esm2022/src/common/src/constants.mjs +0 -33
  18. package/esm2022/src/common/src/downgrade_component.mjs +0 -203
  19. package/esm2022/src/common/src/downgrade_component_adapter.mjs +0 -284
  20. package/esm2022/src/common/src/downgrade_injectable.mjs +0 -87
  21. package/esm2022/src/common/src/promise_util.mjs +0 -58
  22. package/esm2022/src/common/src/upgrade_helper.mjs +0 -244
  23. package/esm2022/src/common/src/util.mjs +0 -151
  24. package/esm2022/src/common/src/version.mjs +0 -18
  25. package/esm2022/src/dynamic/src/upgrade_adapter.mjs +0 -657
  26. package/esm2022/src/dynamic/src/upgrade_ng1_adapter.mjs +0 -229
  27. package/esm2022/static/common.mjs +0 -22
  28. package/esm2022/static/index.mjs +0 -13
  29. package/esm2022/static/public_api.mjs +0 -17
  30. package/esm2022/static/src/angular1_providers.mjs +0 -43
  31. package/esm2022/static/src/downgrade_module.mjs +0 -190
  32. package/esm2022/static/src/upgrade_component.mjs +0 -250
  33. package/esm2022/static/src/upgrade_module.mjs +0 -294
  34. package/esm2022/static/src/util.mjs +0 -24
  35. package/esm2022/static/static.mjs +0 -5
  36. package/esm2022/static/testing/index.mjs +0 -9
  37. package/esm2022/static/testing/public_api.mjs +0 -10
  38. package/esm2022/static/testing/src/create_angular_testing_module.mjs +0 -101
  39. package/esm2022/static/testing/src/create_angularjs_testing_module.mjs +0 -93
  40. package/esm2022/static/testing/testing.mjs +0 -5
  41. package/esm2022/upgrade.mjs +0 -5
@@ -1,294 +0,0 @@
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 { Injector, NgModule, NgZone, PlatformRef, Testability } from '@angular/core';
9
- import { ɵangular1, ɵconstants, ɵutil } from '../common';
10
- import { angular1Providers, setTempInjectorRef } from './angular1_providers';
11
- import { NgAdapterInjector } from './util';
12
- import * as i0 from "@angular/core";
13
- /**
14
- * @description
15
- *
16
- * An `NgModule`, which you import to provide AngularJS core services,
17
- * and has an instance method used to bootstrap the hybrid upgrade application.
18
- *
19
- * *Part of the [upgrade/static](api?query=upgrade/static)
20
- * library for hybrid upgrade apps that support AOT compilation*
21
- *
22
- * The `upgrade/static` package contains helpers that allow AngularJS and Angular components
23
- * to be used together inside a hybrid upgrade application, which supports AOT compilation.
24
- *
25
- * Specifically, the classes and functions in the `upgrade/static` module allow the following:
26
- *
27
- * 1. Creation of an Angular directive that wraps and exposes an AngularJS component so
28
- * that it can be used in an Angular template. See `UpgradeComponent`.
29
- * 2. Creation of an AngularJS directive that wraps and exposes an Angular component so
30
- * that it can be used in an AngularJS template. See `downgradeComponent`.
31
- * 3. Creation of an Angular root injector provider that wraps and exposes an AngularJS
32
- * service so that it can be injected into an Angular context. See
33
- * {@link UpgradeModule#upgrading-an-angular-1-service Upgrading an AngularJS service} below.
34
- * 4. Creation of an AngularJS service that wraps and exposes an Angular injectable
35
- * so that it can be injected into an AngularJS context. See `downgradeInjectable`.
36
- * 3. Bootstrapping of a hybrid Angular application which contains both of the frameworks
37
- * coexisting in a single application.
38
- *
39
- * @usageNotes
40
- *
41
- * ```ts
42
- * import {UpgradeModule} from '@angular/upgrade/static';
43
- * ```
44
- *
45
- * See also the {@link UpgradeModule#examples examples} below.
46
- *
47
- * ### Mental Model
48
- *
49
- * When reasoning about how a hybrid application works it is useful to have a mental model which
50
- * describes what is happening and explains what is happening at the lowest level.
51
- *
52
- * 1. There are two independent frameworks running in a single application, each framework treats
53
- * the other as a black box.
54
- * 2. Each DOM element on the page is owned exactly by one framework. Whichever framework
55
- * instantiated the element is the owner. Each framework only updates/interacts with its own
56
- * DOM elements and ignores others.
57
- * 3. AngularJS directives always execute inside the AngularJS framework codebase regardless of
58
- * where they are instantiated.
59
- * 4. Angular components always execute inside the Angular framework codebase regardless of
60
- * where they are instantiated.
61
- * 5. An AngularJS component can be "upgraded"" to an Angular component. This is achieved by
62
- * defining an Angular directive, which bootstraps the AngularJS component at its location
63
- * in the DOM. See `UpgradeComponent`.
64
- * 6. An Angular component can be "downgraded" to an AngularJS component. This is achieved by
65
- * defining an AngularJS directive, which bootstraps the Angular component at its location
66
- * in the DOM. See `downgradeComponent`.
67
- * 7. Whenever an "upgraded"/"downgraded" component is instantiated the host element is owned by
68
- * the framework doing the instantiation. The other framework then instantiates and owns the
69
- * view for that component.
70
- * 1. This implies that the component bindings will always follow the semantics of the
71
- * instantiation framework.
72
- * 2. The DOM attributes are parsed by the framework that owns the current template. So
73
- * attributes in AngularJS templates must use kebab-case, while AngularJS templates must use
74
- * camelCase.
75
- * 3. However the template binding syntax will always use the Angular style, e.g. square
76
- * brackets (`[...]`) for property binding.
77
- * 8. Angular is bootstrapped first; AngularJS is bootstrapped second. AngularJS always owns the
78
- * root component of the application.
79
- * 9. The new application is running in an Angular zone, and therefore it no longer needs calls to
80
- * `$apply()`.
81
- *
82
- * ### The `UpgradeModule` class
83
- *
84
- * This class is an `NgModule`, which you import to provide AngularJS core services,
85
- * and has an instance method used to bootstrap the hybrid upgrade application.
86
- *
87
- * * Core AngularJS services<br />
88
- * Importing this `NgModule` will add providers for the core
89
- * [AngularJS services](https://docs.angularjs.org/api/ng/service) to the root injector.
90
- *
91
- * * Bootstrap<br />
92
- * The runtime instance of this class contains a {@link UpgradeModule#bootstrap `bootstrap()`}
93
- * method, which you use to bootstrap the top level AngularJS module onto an element in the
94
- * DOM for the hybrid upgrade app.
95
- *
96
- * It also contains properties to access the {@link UpgradeModule#injector root injector}, the
97
- * bootstrap `NgZone` and the
98
- * [AngularJS $injector](https://docs.angularjs.org/api/auto/service/$injector).
99
- *
100
- * ### Examples
101
- *
102
- * Import the `UpgradeModule` into your top level {@link NgModule Angular `NgModule`}.
103
- *
104
- * {@example upgrade/static/ts/full/module.ts region='ng2-module'}
105
- *
106
- * Then inject `UpgradeModule` into your Angular `NgModule` and use it to bootstrap the top level
107
- * [AngularJS module](https://docs.angularjs.org/api/ng/type/angular.Module) in the
108
- * `ngDoBootstrap()` method.
109
- *
110
- * {@example upgrade/static/ts/full/module.ts region='bootstrap-ng1'}
111
- *
112
- * Finally, kick off the whole process, by bootstrapping your top level Angular `NgModule`.
113
- *
114
- * {@example upgrade/static/ts/full/module.ts region='bootstrap-ng2'}
115
- *
116
- * {@a upgrading-an-angular-1-service}
117
- * ### Upgrading an AngularJS service
118
- *
119
- * There is no specific API for upgrading an AngularJS service. Instead you should just follow the
120
- * following recipe:
121
- *
122
- * Let's say you have an AngularJS service:
123
- *
124
- * {@example upgrade/static/ts/full/module.ts region="ng1-text-formatter-service"}
125
- *
126
- * Then you should define an Angular provider to be included in your `NgModule` `providers`
127
- * property.
128
- *
129
- * {@example upgrade/static/ts/full/module.ts region="upgrade-ng1-service"}
130
- *
131
- * Then you can use the "upgraded" AngularJS service by injecting it into an Angular component
132
- * or service.
133
- *
134
- * {@example upgrade/static/ts/full/module.ts region="use-ng1-upgraded-service"}
135
- *
136
- * @publicApi
137
- */
138
- export class UpgradeModule {
139
- constructor(
140
- /** The root `Injector` for the upgrade application. */
141
- injector,
142
- /** The bootstrap zone for the upgrade application */
143
- ngZone,
144
- /**
145
- * The owning `NgModuleRef`s `PlatformRef` instance.
146
- * This is used to tie the lifecycle of the bootstrapped AngularJS apps to that of the Angular
147
- * `PlatformRef`.
148
- */
149
- platformRef) {
150
- this.ngZone = ngZone;
151
- this.platformRef = platformRef;
152
- this.injector = new NgAdapterInjector(injector);
153
- }
154
- /**
155
- * Bootstrap an AngularJS application from this NgModule
156
- * @param element the element on which to bootstrap the AngularJS application
157
- * @param [modules] the AngularJS modules to bootstrap for this application
158
- * @param [config] optional extra AngularJS bootstrap configuration
159
- * @return The value returned by
160
- * [angular.bootstrap()](https://docs.angularjs.org/api/ng/function/angular.bootstrap).
161
- */
162
- bootstrap(element, modules = [], config /*angular.IAngularBootstrapConfig*/) {
163
- const INIT_MODULE_NAME = ɵconstants.UPGRADE_MODULE_NAME + '.init';
164
- // Create an ng1 module to bootstrap
165
- ɵangular1
166
- .module_(INIT_MODULE_NAME, [])
167
- .constant(ɵconstants.UPGRADE_APP_TYPE_KEY, 2 /* ɵutil.UpgradeAppType.Static */)
168
- .value(ɵconstants.INJECTOR_KEY, this.injector)
169
- .factory(ɵconstants.LAZY_MODULE_REF, [
170
- ɵconstants.INJECTOR_KEY,
171
- (injector) => ({ injector }),
172
- ])
173
- .config([
174
- ɵconstants.$PROVIDE,
175
- ɵconstants.$INJECTOR,
176
- ($provide, $injector) => {
177
- if ($injector.has(ɵconstants.$$TESTABILITY)) {
178
- $provide.decorator(ɵconstants.$$TESTABILITY, [
179
- ɵconstants.$DELEGATE,
180
- (testabilityDelegate) => {
181
- const originalWhenStable = testabilityDelegate.whenStable;
182
- const injector = this.injector;
183
- // Cannot use arrow function below because we need the context
184
- const newWhenStable = function (callback) {
185
- originalWhenStable.call(testabilityDelegate, function () {
186
- const ng2Testability = injector.get(Testability);
187
- if (ng2Testability.isStable()) {
188
- callback();
189
- }
190
- else {
191
- ng2Testability.whenStable(newWhenStable.bind(testabilityDelegate, callback));
192
- }
193
- });
194
- };
195
- testabilityDelegate.whenStable = newWhenStable;
196
- return testabilityDelegate;
197
- },
198
- ]);
199
- }
200
- if ($injector.has(ɵconstants.$INTERVAL)) {
201
- $provide.decorator(ɵconstants.$INTERVAL, [
202
- ɵconstants.$DELEGATE,
203
- (intervalDelegate) => {
204
- // Wrap the $interval service so that setInterval is called outside NgZone,
205
- // but the callback is still invoked within it. This is so that $interval
206
- // won't block stability, which preserves the behavior from AngularJS.
207
- let wrappedInterval = (fn, delay, count, invokeApply, ...pass) => {
208
- return this.ngZone.runOutsideAngular(() => {
209
- return intervalDelegate((...args) => {
210
- // Run callback in the next VM turn - $interval calls
211
- // $rootScope.$apply, and running the callback in NgZone will
212
- // cause a '$digest already in progress' error if it's in the
213
- // same vm turn.
214
- setTimeout(() => {
215
- this.ngZone.run(() => fn(...args));
216
- });
217
- }, delay, count, invokeApply, ...pass);
218
- });
219
- };
220
- Object.keys(intervalDelegate).forEach((prop) => (wrappedInterval[prop] = intervalDelegate[prop]));
221
- // the `flush` method will be present when ngMocks is used
222
- if (intervalDelegate.hasOwnProperty('flush')) {
223
- wrappedInterval['flush'] = () => {
224
- intervalDelegate['flush']();
225
- return wrappedInterval;
226
- };
227
- }
228
- return wrappedInterval;
229
- },
230
- ]);
231
- }
232
- },
233
- ])
234
- .run([
235
- ɵconstants.$INJECTOR,
236
- ($injector) => {
237
- this.$injector = $injector;
238
- const $rootScope = $injector.get('$rootScope');
239
- // Initialize the ng1 $injector provider
240
- setTempInjectorRef($injector);
241
- this.injector.get(ɵconstants.$INJECTOR);
242
- // Put the injector on the DOM, so that it can be "required"
243
- ɵangular1.element(element).data(ɵutil.controllerKey(ɵconstants.INJECTOR_KEY), this.injector);
244
- // Destroy the AngularJS app once the Angular `PlatformRef` is destroyed.
245
- // This does not happen in a typical SPA scenario, but it might be useful for
246
- // other use-cases where disposing of an Angular/AngularJS app is necessary
247
- // (such as Hot Module Replacement (HMR)).
248
- // See https://github.com/angular/angular/issues/39935.
249
- this.platformRef.onDestroy(() => ɵutil.destroyApp($injector));
250
- // Wire up the ng1 rootScope to run a digest cycle whenever the zone settles
251
- // We need to do this in the next tick so that we don't prevent the bootup stabilizing
252
- setTimeout(() => {
253
- const subscription = this.ngZone.onMicrotaskEmpty.subscribe(() => {
254
- if ($rootScope.$$phase) {
255
- if (typeof ngDevMode === 'undefined' || ngDevMode) {
256
- console.warn('A digest was triggered while one was already in progress. This may mean that something is triggering digests outside the Angular zone.');
257
- }
258
- return $rootScope.$evalAsync();
259
- }
260
- return $rootScope.$digest();
261
- });
262
- $rootScope.$on('$destroy', () => {
263
- subscription.unsubscribe();
264
- });
265
- }, 0);
266
- },
267
- ]);
268
- const upgradeModule = ɵangular1.module_(ɵconstants.UPGRADE_MODULE_NAME, [INIT_MODULE_NAME].concat(modules));
269
- // Make sure resumeBootstrap() only exists if the current bootstrap is deferred
270
- const windowAngular = window['angular'];
271
- windowAngular.resumeBootstrap = undefined;
272
- // Bootstrap the AngularJS application inside our zone
273
- const returnValue = this.ngZone.run(() => ɵangular1.bootstrap(element, [upgradeModule.name], config));
274
- // Patch resumeBootstrap() to run inside the ngZone
275
- if (windowAngular.resumeBootstrap) {
276
- const originalResumeBootstrap = windowAngular.resumeBootstrap;
277
- const ngZone = this.ngZone;
278
- windowAngular.resumeBootstrap = function () {
279
- let args = arguments;
280
- windowAngular.resumeBootstrap = originalResumeBootstrap;
281
- return ngZone.run(() => windowAngular.resumeBootstrap.apply(this, args));
282
- };
283
- }
284
- return returnValue;
285
- }
286
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.0", ngImport: i0, type: UpgradeModule, deps: [{ token: i0.Injector }, { token: i0.NgZone }, { token: i0.PlatformRef }], target: i0.ɵɵFactoryTarget.NgModule }); }
287
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.0-next.0", ngImport: i0, type: UpgradeModule }); }
288
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.0-next.0", ngImport: i0, type: UpgradeModule, providers: [angular1Providers] }); }
289
- }
290
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.0", ngImport: i0, type: UpgradeModule, decorators: [{
291
- type: NgModule,
292
- args: [{ providers: [angular1Providers] }]
293
- }], ctorParameters: () => [{ type: i0.Injector }, { type: i0.NgZone }, { type: i0.PlatformRef }] });
294
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBncmFkZV9tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy91cGdyYWRlL3N0YXRpYy9zcmMvdXBncmFkZV9tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLFFBQVEsRUFBRSxRQUFRLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxXQUFXLEVBQUMsTUFBTSxlQUFlLENBQUM7QUFFbkYsT0FBTyxFQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsS0FBSyxFQUFDLE1BQU0sV0FBVyxDQUFDO0FBRXZELE9BQU8sRUFBQyxpQkFBaUIsRUFBRSxrQkFBa0IsRUFBQyxNQUFNLHNCQUFzQixDQUFDO0FBQzNFLE9BQU8sRUFBQyxpQkFBaUIsRUFBQyxNQUFNLFFBQVEsQ0FBQzs7QUFFekM7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0E0SEc7QUFFSCxNQUFNLE9BQU8sYUFBYTtJQVF4QjtJQUNFLHVEQUF1RDtJQUN2RCxRQUFrQjtJQUNsQixxREFBcUQ7SUFDOUMsTUFBYztJQUNyQjs7OztPQUlHO0lBQ0ssV0FBd0I7UUFOekIsV0FBTSxHQUFOLE1BQU0sQ0FBUTtRQU1iLGdCQUFXLEdBQVgsV0FBVyxDQUFhO1FBRWhDLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNsRCxDQUFDO0lBRUQ7Ozs7Ozs7T0FPRztJQUNILFNBQVMsQ0FDUCxPQUFnQixFQUNoQixVQUFvQixFQUFFLEVBQ3RCLE1BQVksQ0FBQyxtQ0FBbUM7UUFFaEQsTUFBTSxnQkFBZ0IsR0FBRyxVQUFVLENBQUMsbUJBQW1CLEdBQUcsT0FBTyxD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LENBQUMsU0FBUyxDQUFDLE9BQU8sRUFBRSxDQUFDLGFBQWEsQ0FBQyxJQUFJLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FDM0QsQ0FBQztRQUVGLG1EQUFtRDtRQUNuRCxJQUFJLGFBQWEsQ0FBQyxlQUFlLEVBQUUsQ0FBQztZQUNsQyxNQUFNLHVCQUF1QixHQUFlLGFBQWEsQ0FBQyxlQUFlLENBQUM7WUFDMUUsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMzQixhQUFhLENBQUMsZUFBZSxHQUFHO2dCQUM5QixJQUFJLElBQUksR0FBRyxTQUFTLENBQUM7Z0JBQ3JCLGFBQWEsQ0FBQyxlQUFlLEdBQUcsdUJBQXVCLENBQUM7Z0JBQ3hELE9BQU8sTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxhQUFhLENBQUMsZUFBZSxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxDQUFDLENBQUMsQ0FBQztZQUMzRSxDQUFDLENBQUM7UUFDSixDQUFDO1FBRUQsT0FBTyxXQUFXLENBQUM7SUFDckIsQ0FBQzt5SEEzTVUsYUFBYTswSEFBYixhQUFhOzBIQUFiLGFBQWEsYUFESixDQUFDLGlCQUFpQixDQUFDOztzR0FDNUIsYUFBYTtrQkFEekIsUUFBUTttQkFBQyxFQUFDLFNBQVMsRUFBRSxDQUFDLGlCQUFpQixDQUFDLEVBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEBsaWNlbnNlXG4gKiBDb3B5cmlnaHQgR29vZ2xlIExMQyBBbGwgUmlnaHRzIFJlc2VydmVkLlxuICpcbiAqIFVzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlXG4gKiBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlIGF0IGh0dHBzOi8vYW5ndWxhci5pby9saWNlbnNlXG4gKi9cblxuaW1wb3J0IHtJbmplY3RvciwgTmdNb2R1bGUsIE5nWm9uZSwgUGxhdGZvcm1SZWYsIFRlc3RhYmlsaXR5fSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHvJtWFuZ3VsYXIxLCDJtWNvbnN0YW50cywgybV1dGlsfSBmcm9tICcuLi9jb21tb24nO1xuXG5pbXBvcnQge2FuZ3VsYXIxUHJvdmlkZXJzLCBzZXRUZW1wSW5qZWN0b3JSZWZ9IGZyb20gJy4vYW5ndWxhcjFfcHJvdmlkZXJzJztcbmltcG9ydCB7TmdBZGFwdGVySW5qZWN0b3J9IGZyb20gJy4vdXRpbCc7XG5cbi8qKlxuICogQGRlc2NyaXB0aW9uXG4gKlxuICogQW4gYE5nTW9kdWxlYCwgd2hpY2ggeW91IGltcG9ydCB0byBwcm92aWRlIEFuZ3VsYXJKUyBjb3JlIHNlcnZpY2VzLFxuICogYW5kIGhhcyBhbiBpbnN0YW5jZSBtZXRob2QgdXNlZCB0byBib290c3RyYXAgdGhlIGh5YnJpZCB1cGdyYWRlIGFwcGxpY2F0aW9uLlxuICpcbiAqICpQYXJ0IG9mIHRoZSBbdXBncmFkZS9zdGF0aWNdKGFwaT9xdWVyeT11cGdyYWRlL3N0YXRpYylcbiAqIGxpYnJhcnkgZm9yIGh5YnJpZCB1cGdyYWRlIGFwcHMgdGhhdCBzdXBwb3J0IEFPVCBjb21waWxhdGlvbipcbiAqXG4gKiBUaGUgYHVwZ3JhZGUvc3RhdGljYCBwYWNrYWdlIGNvbnRhaW5zIGhlbHBlcnMgdGhhdCBhbGxvdyBBbmd1bGFySlMgYW5kIEFuZ3VsYXIgY29tcG9uZW50c1xuICogdG8gYmUgdXNlZCB0b2dldGhlciBpbnNpZGUgYSBoeWJyaWQgdXBncmFkZSBhcHBsaWNhdGlvbiwgd2hpY2ggc3VwcG9ydHMgQU9UIGNvbXBpbGF0aW9uLlxuICpcbiAqIFNwZWNpZmljYWxseSwgdGhlIGNsYXNzZXMgYW5kIGZ1bmN0aW9ucyBpbiB0aGUgYHVwZ3JhZGUvc3RhdGljYCBtb2R1bGUgYWxsb3cgdGhlIGZvbGxvd2luZzpcbiAqXG4gKiAxLiBDcmVhdGlvbiBvZiBhbiBBbmd1bGFyIGRpcmVjdGl2ZSB0aGF0IHdyYXBzIGFuZCBleHBvc2VzIGFuIEFuZ3VsYXJKUyBjb21wb25lbnQgc29cbiAqICAgIHRoYXQgaXQgY2FuIGJlIHVzZWQgaW4gYW4gQW5ndWxhciB0ZW1wbGF0ZS4gU2VlIGBVcGdyYWRlQ29tcG9uZW50YC5cbiAqIDIuIENyZWF0aW9uIG9mIGFuIEFuZ3VsYXJKUyBkaXJlY3RpdmUgdGhhdCB3cmFwcyBhbmQgZXhwb3NlcyBhbiBBbmd1bGFyIGNvbXBvbmVudCBzb1xuICogICAgdGhhdCBpdCBjYW4gYmUgdXNlZCBpbiBhbiBBbmd1bGFySlMgdGVtcGxhdGUuIFNlZSBgZG93bmdyYWRlQ29tcG9uZW50YC5cbiAqIDMuIENyZWF0aW9uIG9mIGFuIEFuZ3VsYXIgcm9vdCBpbmplY3RvciBwcm92aWRlciB0aGF0IHdyYXBzIGFuZCBleHBvc2VzIGFuIEFuZ3VsYXJKU1xuICogICAgc2VydmljZSBzbyB0aGF0IGl0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGFuIEFuZ3VsYXIgY29udGV4dC4gU2VlXG4gKiAgICB7QGxpbmsgVXBncmFkZU1vZHVsZSN1cGdyYWRpbmctYW4tYW5ndWxhci0xLXNlcnZpY2UgVXBncmFkaW5nIGFuIEFuZ3VsYXJKUyBzZXJ2aWNlfSBiZWxvdy5cbiAqIDQuIENyZWF0aW9uIG9mIGFuIEFuZ3VsYXJKUyBzZXJ2aWNlIHRoYXQgd3JhcHMgYW5kIGV4cG9zZXMgYW4gQW5ndWxhciBpbmplY3RhYmxlXG4gKiAgICBzbyB0aGF0IGl0IGNhbiBiZSBpbmplY3RlZCBpbnRvIGFuIEFuZ3VsYXJKUyBjb250ZXh0LiBTZWUgYGRvd25ncmFkZUluamVjdGFibGVgLlxuICogMy4gQm9vdHN0cmFwcGluZyBvZiBhIGh5YnJpZCBBbmd1bGFyIGFwcGxpY2F0aW9uIHdoaWNoIGNvbnRhaW5zIGJvdGggb2YgdGhlIGZyYW1ld29ya3NcbiAqICAgIGNvZXhpc3RpbmcgaW4gYSBzaW5nbGUgYXBwbGljYXRpb24uXG4gKlxuICogQHVzYWdlTm90ZXNcbiAqXG4gKiBgYGB0c1xuICogaW1wb3J0IHtVcGdyYWRlTW9kdWxlfSBmcm9tICdAYW5ndWxhci91cGdyYWRlL3N0YXRpYyc7XG4gKiBgYGBcbiAqXG4gKiBTZWUgYWxzbyB0aGUge0BsaW5rIFVwZ3JhZGVNb2R1bGUjZXhhbXBsZXMgZXhhbXBsZXN9IGJlbG93LlxuICpcbiAqICMjIyBNZW50YWwgTW9kZWxcbiAqXG4gKiBXaGVuIHJlYXNvbmluZyBhYm91dCBob3cgYSBoeWJyaWQgYXBwbGljYXRpb24gd29ya3MgaXQgaXMgdXNlZnVsIHRvIGhhdmUgYSBtZW50YWwgbW9kZWwgd2hpY2hcbiAqIGRlc2NyaWJlcyB3aGF0IGlzIGhhcHBlbmluZyBhbmQgZXhwbGFpbnMgd2hhdCBpcyBoYXBwZW5pbmcgYXQgdGhlIGxvd2VzdCBsZXZlbC5cbiAqXG4gKiAxLiBUaGVyZSBhcmUgdHdvIGluZGVwZW5kZW50IGZyYW1ld29ya3MgcnVubmluZyBpbiBhIHNpbmdsZSBhcHBsaWNhdGlvbiwgZWFjaCBmcmFtZXdvcmsgdHJlYXRzXG4gKiAgICB0aGUgb3RoZXIgYXMgYSBibGFjayBib3guXG4gKiAyLiBFYWNoIERPTSBlbGVtZW50IG9uIHRoZSBwYWdlIGlzIG93bmVkIGV4YWN0bHkgYnkgb25lIGZyYW1ld29yay4gV2hpY2hldmVyIGZyYW1ld29ya1xuICogICAgaW5zdGFudGlhdGVkIHRoZSBlbGVtZW50IGlzIHRoZSBvd25lci4gRWFjaCBmcmFtZXdvcmsgb25seSB1cGRhdGVzL2ludGVyYWN0cyB3aXRoIGl0cyBvd25cbiAqICAgIERPTSBlbGVtZW50cyBhbmQgaWdub3JlcyBvdGhlcnMuXG4gKiAzLiBBbmd1bGFySlMgZGlyZWN0aXZlcyBhbHdheXMgZXhlY3V0ZSBpbnNpZGUgdGhlIEFuZ3VsYXJKUyBmcmFtZXdvcmsgY29kZWJhc2UgcmVnYXJkbGVzcyBvZlxuICogICAgd2hlcmUgdGhleSBhcmUgaW5zdGFudGlhdGVkLlxuICogNC4gQW5ndWxhciBjb21wb25lbnRzIGFsd2F5cyBleGVjdXRlIGluc2lkZSB0aGUgQW5ndWxhciBmcmFtZXdvcmsgY29kZWJhc2UgcmVnYXJkbGVzcyBvZlxuICogICAgd2hlcmUgdGhleSBhcmUgaW5zdGFudGlhdGVkLlxuICogNS4gQW4gQW5ndWxhckpTIGNvbXBvbmVudCBjYW4gYmUgXCJ1cGdyYWRlZFwiXCIgdG8gYW4gQW5ndWxhciBjb21wb25lbnQuIFRoaXMgaXMgYWNoaWV2ZWQgYnlcbiAqICAgIGRlZmluaW5nIGFuIEFuZ3VsYXIgZGlyZWN0aXZlLCB3aGljaCBib290c3RyYXBzIHRoZSBBbmd1bGFySlMgY29tcG9uZW50IGF0IGl0cyBsb2NhdGlvblxuICogICAgaW4gdGhlIERPTS4gU2VlIGBVcGdyYWRlQ29tcG9uZW50YC5cbiAqIDYuIEFuIEFuZ3VsYXIgY29tcG9uZW50IGNhbiBiZSBcImRvd25ncmFkZWRcIiB0byBhbiBBbmd1bGFySlMgY29tcG9uZW50LiBUaGlzIGlzIGFjaGlldmVkIGJ5XG4gKiAgICBkZWZpbmluZyBhbiBBbmd1bGFySlMgZGlyZWN0aXZlLCB3aGljaCBib290c3RyYXBzIHRoZSBBbmd1bGFyIGNvbXBvbmVudCBhdCBpdHMgbG9jYXRpb25cbiAqICAgIGluIHRoZSBET00uIFNlZSBgZG93bmdyYWRlQ29tcG9uZW50YC5cbiAqIDcuIFdoZW5ldmVyIGFuIFwidXBncmFkZWRcIi9cImRvd25ncmFkZWRcIiBjb21wb25lbnQgaXMgaW5zdGFudGlhdGVkIHRoZSBob3N0IGVsZW1lbnQgaXMgb3duZWQgYnlcbiAqICAgIHRoZSBmcmFtZXdvcmsgZG9pbmcgdGhlIGluc3RhbnRpYXRpb24uIFRoZSBvdGhlciBmcmFtZXdvcmsgdGhlbiBpbnN0YW50aWF0ZXMgYW5kIG93bnMgdGhlXG4gKiAgICB2aWV3IGZvciB0aGF0IGNvbXBvbmVudC5cbiAqICAgIDEuIFRoaXMgaW1wbGllcyB0aGF0IHRoZSBjb21wb25lbnQgYmluZGluZ3Mgd2lsbCBhbHdheXMgZm9sbG93IHRoZSBzZW1hbnRpY3Mgb2YgdGhlXG4gKiAgICAgICBpbnN0YW50aWF0aW9uIGZyYW1ld29yay5cbiAqICAgIDIuIFRoZSBET00gYXR0cmlidXRlcyBhcmUgcGFyc2VkIGJ5IHRoZSBmcmFtZXdvcmsgdGhhdCBvd25zIHRoZSBjdXJyZW50IHRlbXBsYXRlLiBTb1xuICogICAgICAgYXR0cmlidXRlcyBpbiBBbmd1bGFySlMgdGVtcGxhdGVzIG11c3QgdXNlIGtlYmFiLWNhc2UsIHdoaWxlIEFuZ3VsYXJKUyB0ZW1wbGF0ZXMgbXVzdCB1c2VcbiAqICAgICAgIGNhbWVsQ2FzZS5cbiAqICAgIDMuIEhvd2V2ZXIgdGhlIHRlbXBsYXRlIGJpbmRpbmcgc3ludGF4IHdpbGwgYWx3YXlzIHVzZSB0aGUgQW5ndWxhciBzdHlsZSwgZS5nLiBzcXVhcmVcbiAqICAgICAgIGJyYWNrZXRzIChgWy4uLl1gKSBmb3IgcHJvcGVydHkgYmluZGluZy5cbiAqIDguIEFuZ3VsYXIgaXMgYm9vdHN0cmFwcGVkIGZpcnN0OyBBbmd1bGFySlMgaXMgYm9vdHN0cmFwcGVkIHNlY29uZC4gQW5ndWxhckpTIGFsd2F5cyBvd25zIHRoZVxuICogICAgcm9vdCBjb21wb25lbnQgb2YgdGhlIGFwcGxpY2F0aW9uLlxuICogOS4gVGhlIG5ldyBhcHBsaWNhdGlvbiBpcyBydW5uaW5nIGluIGFuIEFuZ3VsYXIgem9uZSwgYW5kIHRoZXJlZm9yZSBpdCBubyBsb25nZXIgbmVlZHMgY2FsbHMgdG9cbiAqICAgIGAkYXBwbHkoKWAuXG4gKlxuICogIyMjIFRoZSBgVXBncmFkZU1vZHVsZWAgY2xhc3NcbiAqXG4gKiBUaGlzIGNsYXNzIGlzIGFuIGBOZ01vZHVsZWAsIHdoaWNoIHlvdSBpbXBvcnQgdG8gcHJvdmlkZSBBbmd1bGFySlMgY29yZSBzZXJ2aWNlcyxcbiAqIGFuZCBoYXMgYW4gaW5zdGFuY2UgbWV0aG9kIHVzZWQgdG8gYm9vdHN0cmFwIHRoZSBoeWJyaWQgdXBncmFkZSBhcHBsaWNhdGlvbi5cbiAqXG4gKiAqIENvcmUgQW5ndWxhckpTIHNlcnZpY2VzPGJyIC8+XG4gKiAgIEltcG9ydGluZyB0aGlzIGBOZ01vZHVsZWAgd2lsbCBhZGQgcHJvdmlkZXJzIGZvciB0aGUgY29yZVxuICogICBbQW5ndWxhckpTIHNlcnZpY2VzXShodHRwczovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcvc2VydmljZSkgdG8gdGhlIHJvb3QgaW5qZWN0b3IuXG4gKlxuICogKiBCb290c3RyYXA8YnIgLz5cbiAqICAgVGhlIHJ1bnRpbWUgaW5zdGFuY2Ugb2YgdGhpcyBjbGFzcyBjb250YWlucyBhIHtAbGluayBVcGdyYWRlTW9kdWxlI2Jvb3RzdHJhcCBgYm9vdHN0cmFwKClgfVxuICogICBtZXRob2QsIHdoaWNoIHlvdSB1c2UgdG8gYm9vdHN0cmFwIHRoZSB0b3AgbGV2ZWwgQW5ndWxhckpTIG1vZHVsZSBvbnRvIGFuIGVsZW1lbnQgaW4gdGhlXG4gKiAgIERPTSBmb3IgdGhlIGh5YnJpZCB1cGdyYWRlIGFwcC5cbiAqXG4gKiAgIEl0IGFsc28gY29udGFpbnMgcHJvcGVydGllcyB0byBhY2Nlc3MgdGhlIHtAbGluayBVcGdyYWRlTW9kdWxlI2luamVjdG9yIHJvb3QgaW5qZWN0b3J9LCB0aGVcbiAqICAgYm9vdHN0cmFwIGBOZ1pvbmVgIGFuZCB0aGVcbiAqICAgW0FuZ3VsYXJKUyAkaW5qZWN0b3JdKGh0dHBzOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9hdXRvL3NlcnZpY2UvJGluamVjdG9yKS5cbiAqXG4gKiAjIyMgRXhhbXBsZXNcbiAqXG4gKiBJbXBvcnQgdGhlIGBVcGdyYWRlTW9kdWxlYCBpbnRvIHlvdXIgdG9wIGxldmVsIHtAbGluayBOZ01vZHVsZSBBbmd1bGFyIGBOZ01vZHVsZWB9LlxuICpcbiAqIHtAZXhhbXBsZSB1cGdyYWRlL3N0YXRpYy90cy9mdWxsL21vZHVsZS50cyByZWdpb249J25nMi1tb2R1bGUnfVxuICpcbiAqIFRoZW4gaW5qZWN0IGBVcGdyYWRlTW9kdWxlYCBpbnRvIHlvdXIgQW5ndWxhciBgTmdNb2R1bGVgIGFuZCB1c2UgaXQgdG8gYm9vdHN0cmFwIHRoZSB0b3AgbGV2ZWxcbiAqIFtBbmd1bGFySlMgbW9kdWxlXShodHRwczovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcvdHlwZS9hbmd1bGFyLk1vZHVsZSkgaW4gdGhlXG4gKiBgbmdEb0Jvb3RzdHJhcCgpYCBtZXRob2QuXG4gKlxuICoge0BleGFtcGxlIHVwZ3JhZGUvc3RhdGljL3RzL2Z1bGwvbW9kdWxlLnRzIHJlZ2lvbj0nYm9vdHN0cmFwLW5nMSd9XG4gKlxuICogRmluYWxseSwga2ljayBvZmYgdGhlIHdob2xlIHByb2Nlc3MsIGJ5IGJvb3RzdHJhcHBpbmcgeW91ciB0b3AgbGV2ZWwgQW5ndWxhciBgTmdNb2R1bGVgLlxuICpcbiAqIHtAZXhhbXBsZSB1cGdyYWRlL3N0YXRpYy90cy9mdWxsL21vZHVsZS50cyByZWdpb249J2Jvb3RzdHJhcC1uZzInfVxuICpcbiAqIHtAYSB1cGdyYWRpbmctYW4tYW5ndWxhci0xLXNlcnZpY2V9XG4gKiAjIyMgVXBncmFkaW5nIGFuIEFuZ3VsYXJKUyBzZXJ2aWNlXG4gKlxuICogVGhlcmUgaXMgbm8gc3BlY2lmaWMgQVBJIGZvciB1cGdyYWRpbmcgYW4gQW5ndWxhckpTIHNlcnZpY2UuIEluc3RlYWQgeW91IHNob3VsZCBqdXN0IGZvbGxvdyB0aGVcbiAqIGZvbGxvd2luZyByZWNpcGU6XG4gKlxuICogTGV0J3Mgc2F5IHlvdSBoYXZlIGFuIEFuZ3VsYXJKUyBzZXJ2aWNlOlxuICpcbiAqIHtAZXhhbXBsZSB1cGdyYWRlL3N0YXRpYy90cy9mdWxsL21vZHVsZS50cyByZWdpb249XCJuZzEtdGV4dC1mb3JtYXR0ZXItc2VydmljZVwifVxuICpcbiAqIFRoZW4geW91IHNob3VsZCBkZWZpbmUgYW4gQW5ndWxhciBwcm92aWRlciB0byBiZSBpbmNsdWRlZCBpbiB5b3VyIGBOZ01vZHVsZWAgYHByb3ZpZGVyc2BcbiAqIHByb3BlcnR5LlxuICpcbiAqIHtAZXhhbXBsZSB1cGdyYWRlL3N0YXRpYy90cy9mdWxsL21vZHVsZS50cyByZWdpb249XCJ1cGdyYWRlLW5nMS1zZXJ2aWNlXCJ9XG4gKlxuICogVGhlbiB5b3UgY2FuIHVzZSB0aGUgXCJ1cGdyYWRlZFwiIEFuZ3VsYXJKUyBzZXJ2aWNlIGJ5IGluamVjdGluZyBpdCBpbnRvIGFuIEFuZ3VsYXIgY29tcG9uZW50XG4gKiBvciBzZXJ2aWNlLlxuICpcbiAqIHtAZXhhbXBsZSB1cGdyYWRlL3N0YXRpYy90cy9mdWxsL21vZHVsZS50cyByZWdpb249XCJ1c2UtbmcxLXVwZ3JhZGVkLXNlcnZpY2VcIn1cbiAqXG4gKiBAcHVibGljQXBpXG4gKi9cbkBOZ01vZHVsZSh7cHJvdmlkZXJzOiBbYW5ndWxhcjFQcm92aWRlcnNdfSlcbmV4cG9ydCBjbGFzcyBVcGdyYWRlTW9kdWxlIHtcbiAgLyoqXG4gICAqIFRoZSBBbmd1bGFySlMgYCRpbmplY3RvcmAgZm9yIHRoZSB1cGdyYWRlIGFwcGxpY2F0aW9uLlxuICAgKi9cbiAgcHVibGljICRpbmplY3RvcjogYW55IC8qYW5ndWxhci5JSW5qZWN0b3JTZXJ2aWNlKi87XG4gIC8qKiBUaGUgQW5ndWxhciBJbmplY3RvciAqKi9cbiAgcHVibGljIGluamVjdG9yOiBJbmplY3RvcjtcblxuICBjb25zdHJ1Y3RvcihcbiAgICAvKiogVGhlIHJvb3QgYEluamVjdG9yYCBmb3IgdGhlIHVwZ3JhZGUgYXBwbGljYXRpb24uICovXG4gICAgaW5qZWN0b3I6IEluamVjdG9yLFxuICAgIC8qKiBUaGUgYm9vdHN0cmFwIHpvbmUgZm9yIHRoZSB1cGdyYWRlIGFwcGxpY2F0aW9uICovXG4gICAgcHVibGljIG5nWm9uZTogTmdab25lLFxuICAgIC8qKlxuICAgICAqIFRoZSBvd25pbmcgYE5nTW9kdWxlUmVmYHMgYFBsYXRmb3JtUmVmYCBpbnN0YW5jZS5cbiAgICAgKiBUaGlzIGlzIHVzZWQgdG8gdGllIHRoZSBsaWZlY3ljbGUgb2YgdGhlIGJvb3RzdHJhcHBlZCBBbmd1bGFySlMgYXBwcyB0byB0aGF0IG9mIHRoZSBBbmd1bGFyXG4gICAgICogYFBsYXRmb3JtUmVmYC5cbiAgICAgKi9cbiAgICBwcml2YXRlIHBsYXRmb3JtUmVmOiBQbGF0Zm9ybVJlZixcbiAgKSB7XG4gICAgdGhpcy5pbmplY3RvciA9IG5ldyBOZ0FkYXB0ZXJJbmplY3RvcihpbmplY3Rvcik7XG4gIH1cblxuICAvKipcbiAgICogQm9vdHN0cmFwIGFuIEFuZ3VsYXJKUyBhcHBsaWNhdGlvbiBmcm9tIHRoaXMgTmdNb2R1bGVcbiAgICogQHBhcmFtIGVsZW1lbnQgdGhlIGVsZW1lbnQgb24gd2hpY2ggdG8gYm9vdHN0cmFwIHRoZSBBbmd1bGFySlMgYXBwbGljYXRpb25cbiAgICogQHBhcmFtIFttb2R1bGVzXSB0aGUgQW5ndWxhckpTIG1vZHVsZXMgdG8gYm9vdHN0cmFwIGZvciB0aGlzIGFwcGxpY2F0aW9uXG4gICAqIEBwYXJhbSBbY29uZmlnXSBvcHRpb25hbCBleHRyYSBBbmd1bGFySlMgYm9vdHN0cmFwIGNvbmZpZ3VyYXRpb25cbiAgICogQHJldHVybiBUaGUgdmFsdWUgcmV0dXJuZWQgYnlcbiAgICogICAgIFthbmd1bGFyLmJvb3RzdHJhcCgpXShodHRwczovL2RvY3MuYW5ndWxhcmpzLm9yZy9hcGkvbmcvZnVuY3Rpb24vYW5ndWxhci5ib290c3RyYXApLlxuICAgKi9cbiAgYm9vdHN0cmFwKFxuICAgIGVsZW1lbnQ6IEVsZW1lbnQsXG4gICAgbW9kdWxlczogc3RyaW5nW10gPSBbXSxcbiAgICBjb25maWc/OiBhbnkgLyphbmd1bGFyLklBbmd1bGFyQm9vdHN0cmFwQ29uZmlnKi8sXG4gICk6IGFueSAvKlJldHVyblR5cGU8dHlwZW9mIGFuZ3VsYXIuYm9vdHN0cmFwPiovIHtcbiAgICBjb25zdCBJTklUX01PRFVMRV9OQU1FID0gybVjb25zdGFudHMuVVBHUkFERV9NT0RVTEVfTkFNRSArICcuaW5pdCc7XG5cbiAgICAvLyBDcmVhdGUgYW4gbmcxIG1vZHVsZSB0byBib290c3RyYXBcbiAgICDJtWFuZ3VsYXIxXG4gICAgICAubW9kdWxlXyhJTklUX01PRFVMRV9OQU1FLCBbXSlcblxuICAgICAgLmNvbnN0YW50KMm1Y29uc3RhbnRzLlVQR1JBREVfQVBQX1RZUEVfS0VZLCDJtXV0aWwuVXBncmFkZUFwcFR5cGUuU3RhdGljKVxuXG4gICAgICAudmFsdWUoybVjb25zdGFudHMuSU5KRUNUT1JfS0VZLCB0aGlzLmluamVjdG9yKVxuXG4gICAgICAuZmFjdG9yeSjJtWNvbnN0YW50cy5MQVpZX01PRFVMRV9SRUYsIFtcbiAgICAgICAgybVjb25zdGFudHMuSU5KRUNUT1JfS0VZLFxuICAgICAgICAoaW5qZWN0b3I6IEluamVjdG9yKSA9PiAoe2luamVjdG9yfSkgYXMgybV1dGlsLkxhenlNb2R1bGVSZWYsXG4gICAgICBdKVxuXG4gICAgICAuY29uZmlnKFtcbiAgICAgICAgybVjb25zdGFudHMuJFBST1ZJREUsXG4gICAgICAgIMm1Y29uc3RhbnRzLiRJTkpFQ1RPUixcbiAgICAgICAgKCRwcm92aWRlOiDJtWFuZ3VsYXIxLklQcm92aWRlU2VydmljZSwgJGluamVjdG9yOiDJtWFuZ3VsYXIxLklJbmplY3RvclNlcnZpY2UpID0+IHtcbiAgICAgICAgICBpZiAoJGluamVjdG9yLmhhcyjJtWNvbnN0YW50cy4kJFRFU1RBQklMSVRZKSkge1xuICAgICAgICAgICAgJHByb3ZpZGUuZGVjb3JhdG9yKMm1Y29uc3RhbnRzLiQkVEVTVEFCSUxJVFksIFtcbiAgICAgICAgICAgICAgybVjb25zdGFudHMuJERFTEVHQVRFLFxuICAgICAgICAgICAgICAodGVzdGFiaWxpdHlEZWxlZ2F0ZTogybVhbmd1bGFyMS5JVGVzdGFiaWxpdHlTZXJ2aWNlKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3Qgb3JpZ2luYWxXaGVuU3RhYmxlOiBGdW5jdGlvbiA9IHRlc3RhYmlsaXR5RGVsZWdhdGUud2hlblN0YWJsZTtcbiAgICAgICAgICAgICAgICBjb25zdCBpbmplY3RvciA9IHRoaXMuaW5qZWN0b3I7XG4gICAgICAgICAgICAgICAgLy8gQ2Fubm90IHVzZSBhcnJvdyBmdW5jdGlvbiBiZWxvdyBiZWNhdXNlIHdlIG5lZWQgdGhlIGNvbnRleHRcbiAgICAgICAgICAgICAgICBjb25zdCBuZXdXaGVuU3RhYmxlID0gZnVuY3Rpb24gKGNhbGxiYWNrOiBGdW5jdGlvbikge1xuICAgICAgICAgICAgICAgICAgb3JpZ2luYWxXaGVuU3RhYmxlLmNhbGwodGVzdGFiaWxpdHlEZWxlZ2F0ZSwgZnVuY3Rpb24gKCkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBuZzJUZXN0YWJpbGl0eTogVGVzdGFiaWxpdHkgPSBpbmplY3Rvci5nZXQoVGVzdGFiaWxpdHkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAobmcyVGVzdGFiaWxpdHkuaXNTdGFibGUoKSkge1xuICAgICAgICAgICAgICAgICAgICAgIGNhbGxiYWNrKCk7XG4gICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgbmcyVGVzdGFiaWxpdHkud2hlblN0YWJsZShuZXdXaGVuU3RhYmxlLmJpbmQodGVzdGFiaWxpdHlEZWxlZ2F0ZSwgY2FsbGJhY2spKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAgICAgfTtcblxuICAgICAgICAgICAgICAgIHRlc3RhYmlsaXR5RGVsZWdhdGUud2hlblN0YWJsZSA9IG5ld1doZW5TdGFibGU7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRlc3RhYmlsaXR5RGVsZWdhdGU7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICBpZiAoJGluamVjdG9yLmhhcyjJtWNvbnN0YW50cy4kSU5URVJWQUwpKSB7XG4gICAgICAgICAgICAkcHJvdmlkZS5kZWNvcmF0b3IoybVjb25zdGFudHMuJElOVEVSVkFMLCBbXG4gICAgICAgICAgICAgIMm1Y29uc3RhbnRzLiRERUxFR0FURSxcbiAgICAgICAgICAgICAgKGludGVydmFsRGVsZWdhdGU6IMm1YW5ndWxhcjEuSUludGVydmFsU2VydmljZSkgPT4ge1xuICAgICAgICAgICAgICAgIC8vIFdyYXAgdGhlICRpbnRlcnZhbCBzZXJ2aWNlIHNvIHRoYXQgc2V0SW50ZXJ2YWwgaXMgY2FsbGVkIG91dHNpZGUgTmdab25lLFxuICAgICAgICAgICAgICAgIC8vIGJ1dCB0aGUgY2FsbGJhY2sgaXMgc3RpbGwgaW52b2tlZCB3aXRoaW4gaXQuIFRoaXMgaXMgc28gdGhhdCAkaW50ZXJ2YWxcbiAgICAgICAgICAgICAgICAvLyB3b24ndCBibG9jayBzdGFiaWxpdHksIHdoaWNoIHByZXNlcnZlcyB0aGUgYmVoYXZpb3IgZnJvbSBBbmd1bGFySlMuXG4gICAgICAgICAgICAgICAgbGV0IHdyYXBwZWRJbnRlcnZhbCA9IChcbiAgICAgICAgICAgICAgICAgIGZuOiBGdW5jdGlvbixcbiAgICAgICAgICAgICAgICAgIGRlbGF5OiBudW1iZXIsXG4gICAgICAgICAgICAgICAgICBjb3VudD86IG51bWJlcixcbiAgICAgICAgICAgICAgICAgIGludm9rZUFwcGx5PzogYm9vbGVhbixcbiAgICAgICAgICAgICAgICAgIC4uLnBhc3M6IGFueVtdXG4gICAgICAgICAgICAgICAgKSA9PiB7XG4gICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5uZ1pvbmUucnVuT3V0c2lkZUFuZ3VsYXIoKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW50ZXJ2YWxEZWxlZ2F0ZShcbiAgICAgICAgICAgICAgICAgICAgICAoLi4uYXJnczogYW55W10pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIFJ1biBjYWxsYmFjayBpbiB0aGUgbmV4dCBWTSB0dXJuIC0gJGludGVydmFsIGNhbGxzXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyAkcm9vdFNjb3BlLiRhcHBseSwgYW5kIHJ1bm5pbmcgdGhlIGNhbGxiYWNrIGluIE5nWm9uZSB3aWxsXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBjYXVzZSBhICckZGlnZXN0IGFscmVhZHkgaW4gcHJvZ3Jlc3MnIGVycm9yIGlmIGl0J3MgaW4gdGhlXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyBzYW1lIHZtIHR1cm4uXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5uZ1pvbmUucnVuKCgpID0+IGZuKC4uLmFyZ3MpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAgICAgICAgICAgZGVsYXksXG4gICAgICAgICAgICAgICAgICAgICAgY291bnQsXG4gICAgICAgICAgICAgICAgICAgICAgaW52b2tlQXBwbHksXG4gICAgICAgICAgICAgICAgICAgICAgLi4ucGFzcyxcbiAgICAgICAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIH07XG5cbiAgICAgICAgICAgICAgICAoT2JqZWN0LmtleXMoaW50ZXJ2YWxEZWxlZ2F0ZSkgYXMgKGtleW9mIMm1YW5ndWxhcjEuSUludGVydmFsU2VydmljZSlbXSkuZm9yRWFjaChcbiAgICAgICAgICAgICAgICAgIChwcm9wKSA9PiAoKHdyYXBwZWRJbnRlcnZhbCBhcyBhbnkpW3Byb3BdID0gaW50ZXJ2YWxEZWxlZ2F0ZVtwcm9wXSksXG4gICAgICAgICAgICAgICAgKTtcblxuICAgICAgICAgICAgICAgIC8vIHRoZSBgZmx1c2hgIG1ldGhvZCB3aWxsIGJlIHByZXNlbnQgd2hlbiBuZ01vY2tzIGlzIHVzZWRcbiAgICAgICAgICAgICAgICBpZiAoaW50ZXJ2YWxEZWxlZ2F0ZS5oYXNPd25Qcm9wZXJ0eSgnZmx1c2gnKSkge1xuICAgICAgICAgICAgICAgICAgKHdyYXBwZWRJbnRlcnZhbCBhcyBhbnkpWydmbHVzaCddID0gKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICAoaW50ZXJ2YWxEZWxlZ2F0ZSBhcyBhbnkpWydmbHVzaCddKCk7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkSW50ZXJ2YWw7XG4gICAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIHJldHVybiB3cmFwcGVkSW50ZXJ2YWw7XG4gICAgICAgICAgICAgIH0sXG4gICAgICAgICAgICBdKTtcbiAgICAgICAgICB9XG4gICAgICAgIH0sXG4gICAgICBdKVxuXG4gICAgICAucnVuKFtcbiAgICAgICAgybVjb25zdGFudHMuJElOSkVDVE9SLFxuICAgICAgICAoJGluamVjdG9yOiDJtWFuZ3VsYXIxLklJbmplY3RvclNlcnZpY2UpID0+IHtcbiAgICAgICAgICB0aGlzLiRpbmplY3RvciA9ICRpbmplY3RvcjtcbiAgICAgICAgICBjb25zdCAkcm9vdFNjb3BlID0gJGluamVjdG9yLmdldCgnJHJvb3RTY29wZScpO1xuXG4gICAgICAgICAgLy8gSW5pdGlhbGl6ZSB0aGUgbmcxICRpbmplY3RvciBwcm92aWRlclxuICAgICAgICAgIHNldFRlbXBJbmplY3RvclJlZigkaW5qZWN0b3IpO1xuICAgICAgICAgIHRoaXMuaW5qZWN0b3IuZ2V0KMm1Y29uc3RhbnRzLiRJTkpFQ1RPUik7XG5cbiAgICAgICAgICAvLyBQdXQgdGhlIGluamVjdG9yIG9uIHRoZSBET00sIHNvIHRoYXQgaXQgY2FuIGJlIFwicmVxdWlyZWRcIlxuICAgICAgICAgIMm1YW5ndWxhcjEuZWxlbWVudChlbGVtZW50KS5kYXRhIShcbiAgICAgICAgICAgIMm1dXRpbC5jb250cm9sbGVyS2V5KMm1Y29uc3RhbnRzLklOSkVDVE9SX0tFWSksXG4gICAgICAgICAgICB0aGlzLmluamVjdG9yLFxuICAgICAgICAgICk7XG5cbiAgICAgICAgICAvLyBEZXN0cm95IHRoZSBBbmd1bGFySlMgYXBwIG9uY2UgdGhlIEFuZ3VsYXIgYFBsYXRmb3JtUmVmYCBpcyBkZXN0cm95ZWQuXG4gICAgICAgICAgLy8gVGhpcyBkb2VzIG5vdCBoYXBwZW4gaW4gYSB0eXBpY2FsIFNQQSBzY2VuYXJpbywgYnV0IGl0IG1pZ2h0IGJlIHVzZWZ1bCBmb3JcbiAgICAgICAgICAvLyBvdGhlciB1c2UtY2FzZXMgd2hlcmUgZGlzcG9zaW5nIG9mIGFuIEFuZ3VsYXIvQW5ndWxhckpTIGFwcCBpcyBuZWNlc3NhcnlcbiAgICAgICAgICAvLyAoc3VjaCBhcyBIb3QgTW9kdWxlIFJlcGxhY2VtZW50IChITVIpKS5cbiAgICAgICAgICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2FuZ3VsYXIvYW5ndWxhci9pc3N1ZXMvMzk5MzUuXG4gICAgICAgICAgdGhpcy5wbGF0Zm9ybVJlZi5vbkRlc3Ryb3koKCkgPT4gybV1dGlsLmRlc3Ryb3lBcHAoJGluamVjdG9yKSk7XG5cbiAgICAgICAgICAvLyBXaXJlIHVwIHRoZSBuZzEgcm9vdFNjb3BlIHRvIHJ1biBhIGRpZ2VzdCBjeWNsZSB3aGVuZXZlciB0aGUgem9uZSBzZXR0bGVzXG4gICAgICAgICAgLy8gV2UgbmVlZCB0byBkbyB0aGlzIGluIHRoZSBuZXh0IHRpY2sgc28gdGhhdCB3ZSBkb24ndCBwcmV2ZW50IHRoZSBib290dXAgc3RhYmlsaXppbmdcbiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMubmdab25lLm9uTWljcm90YXNrRW1wdHkuc3Vic2NyaWJlKCgpID0+IHtcbiAgICAgICAgICAgICAgaWYgKCRyb290U2NvcGUuJCRwaGFzZSkge1xuICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgbmdEZXZNb2RlID09PSAndW5kZWZpbmVkJyB8fCBuZ0Rldk1vZGUpIHtcbiAgICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybihcbiAgICAgICAgICAgICAgICAgICAgJ0EgZGlnZXN0IHdhcyB0cmlnZ2VyZWQgd2hpbGUgb25lIHdhcyBhbHJlYWR5IGluIHByb2dyZXNzLiBUaGlzIG1heSBtZWFuIHRoYXQgc29tZXRoaW5nIGlzIHRyaWdnZXJpbmcgZGlnZXN0cyBvdXRzaWRlIHRoZSBBbmd1bGFyIHpvbmUuJyxcbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgcmV0dXJuICRyb290U2NvcGUuJGV2YWxBc3luYygpO1xuICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgcmV0dXJuICRyb290U2NvcGUuJGRpZ2VzdCgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICAkcm9vdFNjb3BlLiRvbignJGRlc3Ryb3knLCAoKSA9PiB7XG4gICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfSwgMCk7XG4gICAgICAgIH0sXG4gICAgICBdKTtcblxuICAgIGNvbnN0IHVwZ3JhZGVNb2R1bGUgPSDJtWFuZ3VsYXIxLm1vZHVsZV8oXG4gICAgICDJtWNvbnN0YW50cy5VUEdSQURFX01PRFVMRV9OQU1FLFxuICAgICAgW0lOSVRfTU9EVUxFX05BTUVdLmNvbmNhdChtb2R1bGVzKSxcbiAgICApO1xuXG4gICAgLy8gTWFrZSBzdXJlIHJlc3VtZUJvb3RzdHJhcCgpIG9ubHkgZXhpc3RzIGlmIHRoZSBjdXJyZW50IGJvb3RzdHJhcCBpcyBkZWZlcnJlZFxuICAgIGNvbnN0IHdpbmRvd0FuZ3VsYXIgPSAod2luZG93IGFzIGFueSlbJ2FuZ3VsYXInXTtcbiAgICB3aW5kb3dBbmd1bGFyLnJlc3VtZUJvb3RzdHJhcCA9IHVuZGVmaW5lZDtcblxuICAgIC8vIEJvb3RzdHJhcCB0aGUgQW5ndWxhckpTIGFwcGxpY2F0aW9uIGluc2lkZSBvdXIgem9uZVxuICAgIGNvbnN0IHJldHVyblZhbHVlID0gdGhpcy5uZ1pvbmUucnVuKCgpID0+XG4gICAgICDJtWFuZ3VsYXIxLmJvb3RzdHJhcChlbGVtZW50LCBbdXBncmFkZU1vZHVsZS5uYW1lXSwgY29uZmlnKSxcbiAgICApO1xuXG4gICAgLy8gUGF0Y2ggcmVzdW1lQm9vdHN0cmFwKCkgdG8gcnVuIGluc2lkZSB0aGUgbmdab25lXG4gICAgaWYgKHdpbmRvd0FuZ3VsYXIucmVzdW1lQm9vdHN0cmFwKSB7XG4gICAgICBjb25zdCBvcmlnaW5hbFJlc3VtZUJvb3RzdHJhcDogKCkgPT4gdm9pZCA9IHdpbmRvd0FuZ3VsYXIucmVzdW1lQm9vdHN0cmFwO1xuICAgICAgY29uc3Qgbmdab25lID0gdGhpcy5uZ1pvbmU7XG4gICAgICB3aW5kb3dBbmd1bGFyLnJlc3VtZUJvb3RzdHJhcCA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgbGV0IGFyZ3MgPSBhcmd1bWVudHM7XG4gICAgICAgIHdpbmRvd0FuZ3VsYXIucmVzdW1lQm9vdHN0cmFwID0gb3JpZ2luYWxSZXN1bWVCb290c3RyYXA7XG4gICAgICAgIHJldHVybiBuZ1pvbmUucnVuKCgpID0+IHdpbmRvd0FuZ3VsYXIucmVzdW1lQm9vdHN0cmFwLmFwcGx5KHRoaXMsIGFyZ3MpKTtcbiAgICAgIH07XG4gICAgfVxuXG4gICAgcmV0dXJuIHJldHVyblZhbHVlO1xuICB9XG59XG4iXX0=
@@ -1,24 +0,0 @@
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 { ɵNOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR as NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR, } from '@angular/core';
9
- export class NgAdapterInjector {
10
- constructor(modInjector) {
11
- this.modInjector = modInjector;
12
- }
13
- // When Angular locate a service in the component injector tree, the not found value is set to
14
- // `NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR`. In such a case we should not walk up to the module
15
- // injector.
16
- // AngularJS only supports a single tree and should always check the module injector.
17
- get(token, notFoundValue) {
18
- if (notFoundValue === NOT_FOUND_CHECK_ONLY_ELEMENT_INJECTOR) {
19
- return notFoundValue;
20
- }
21
- return this.modInjector.get(token, notFoundValue);
22
- }
23
- }
24
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXRpbC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3VwZ3JhZGUvc3RhdGljL3NyYy91dGlsLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILE9BQU8sRUFFTCxzQ0FBc0MsSUFBSSxxQ0FBcUMsR0FDaEYsTUFBTSxlQUFlLENBQUM7QUFFdkIsTUFBTSxPQUFPLGlCQUFpQjtJQUM1QixZQUFvQixXQUFxQjtRQUFyQixnQkFBVyxHQUFYLFdBQVcsQ0FBVTtJQUFHLENBQUM7SUFFN0MsOEZBQThGO0lBQzlGLDhGQUE4RjtJQUM5RixZQUFZO0lBQ1oscUZBQXFGO0lBQ3JGLEdBQUcsQ0FBQyxLQUFVLEVBQUUsYUFBbUI7UUFDakMsSUFBSSxhQUFhLEtBQUsscUNBQXFDLEVBQUUsQ0FBQztZQUM1RCxPQUFPLGFBQWEsQ0FBQztRQUN2QixDQUFDO1FBRUQsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxLQUFLLEVBQUUsYUFBYSxDQUFDLENBQUM7SUFDcEQsQ0FBQztDQUNGIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7XG4gIEluamVjdG9yLFxuICDJtU5PVF9GT1VORF9DSEVDS19PTkxZX0VMRU1FTlRfSU5KRUNUT1IgYXMgTk9UX0ZPVU5EX0NIRUNLX09OTFlfRUxFTUVOVF9JTkpFQ1RPUixcbn0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5cbmV4cG9ydCBjbGFzcyBOZ0FkYXB0ZXJJbmplY3RvciBpbXBsZW1lbnRzIEluamVjdG9yIHtcbiAgY29uc3RydWN0b3IocHJpdmF0ZSBtb2RJbmplY3RvcjogSW5qZWN0b3IpIHt9XG5cbiAgLy8gV2hlbiBBbmd1bGFyIGxvY2F0ZSBhIHNlcnZpY2UgaW4gdGhlIGNvbXBvbmVudCBpbmplY3RvciB0cmVlLCB0aGUgbm90IGZvdW5kIHZhbHVlIGlzIHNldCB0b1xuICAvLyBgTk9UX0ZPVU5EX0NIRUNLX09OTFlfRUxFTUVOVF9JTkpFQ1RPUmAuIEluIHN1Y2ggYSBjYXNlIHdlIHNob3VsZCBub3Qgd2FsayB1cCB0byB0aGUgbW9kdWxlXG4gIC8vIGluamVjdG9yLlxuICAvLyBBbmd1bGFySlMgb25seSBzdXBwb3J0cyBhIHNpbmdsZSB0cmVlIGFuZCBzaG91bGQgYWx3YXlzIGNoZWNrIHRoZSBtb2R1bGUgaW5qZWN0b3IuXG4gIGdldCh0b2tlbjogYW55LCBub3RGb3VuZFZhbHVlPzogYW55KTogYW55IHtcbiAgICBpZiAobm90Rm91bmRWYWx1ZSA9PT0gTk9UX0ZPVU5EX0NIRUNLX09OTFlfRUxFTUVOVF9JTkpFQ1RPUikge1xuICAgICAgcmV0dXJuIG5vdEZvdW5kVmFsdWU7XG4gICAgfVxuXG4gICAgcmV0dXJuIHRoaXMubW9kSW5qZWN0b3IuZ2V0KHRva2VuLCBub3RGb3VuZFZhbHVlKTtcbiAgfVxufVxuIl19
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3RhdGljLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdXBncmFkZS9zdGF0aWMvc3RhdGljLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOztHQUVHO0FBRUgsY0FBYyxTQUFTLENBQUMiLCJzb3VyY2VzQ29udGVudCI6WyIvKipcbiAqIEdlbmVyYXRlZCBidW5kbGUgaW5kZXguIERvIG5vdCBlZGl0LlxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vaW5kZXgnO1xuIl19
@@ -1,9 +0,0 @@
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 './public_api';
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy91cGdyYWRlL3N0YXRpYy90ZXN0aW5nL2luZGV4LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBOzs7Ozs7R0FNRztBQUVILGNBQWMsY0FBYyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmV4cG9ydCAqIGZyb20gJy4vcHVibGljX2FwaSc7XG4iXX0=
@@ -1,10 +0,0 @@
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 { createAngularTestingModule } from './src/create_angular_testing_module';
9
- export { createAngularJSTestingModule } from './src/create_angularjs_testing_module';
10
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicHVibGljX2FwaS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3VwZ3JhZGUvc3RhdGljL3Rlc3RpbmcvcHVibGljX2FwaS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsMEJBQTBCLEVBQUMsTUFBTSxxQ0FBcUMsQ0FBQztBQUMvRSxPQUFPLEVBQUMsNEJBQTRCLEVBQUMsTUFBTSx1Q0FBdUMsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5leHBvcnQge2NyZWF0ZUFuZ3VsYXJUZXN0aW5nTW9kdWxlfSBmcm9tICcuL3NyYy9jcmVhdGVfYW5ndWxhcl90ZXN0aW5nX21vZHVsZSc7XG5leHBvcnQge2NyZWF0ZUFuZ3VsYXJKU1Rlc3RpbmdNb2R1bGV9IGZyb20gJy4vc3JjL2NyZWF0ZV9hbmd1bGFyanNfdGVzdGluZ19tb2R1bGUnO1xuIl19
@@ -1,101 +0,0 @@
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 { Injector, NgModule } from '@angular/core';
9
- import { ɵangular1 as angular, ɵconstants } from '@angular/upgrade/static';
10
- import * as i0 from "@angular/core";
11
- let $injector = null;
12
- let injector;
13
- export function $injectorFactory() {
14
- return $injector;
15
- }
16
- export class AngularTestingModule {
17
- constructor(i) {
18
- injector = i;
19
- }
20
- static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "19.0.0-next.0", ngImport: i0, type: AngularTestingModule, deps: [{ token: i0.Injector }], target: i0.ɵɵFactoryTarget.NgModule }); }
21
- static { this.ɵmod = i0.ɵɵngDeclareNgModule({ minVersion: "14.0.0", version: "19.0.0-next.0", ngImport: i0, type: AngularTestingModule }); }
22
- static { this.ɵinj = i0.ɵɵngDeclareInjector({ minVersion: "12.0.0", version: "19.0.0-next.0", ngImport: i0, type: AngularTestingModule, providers: [{ provide: ɵconstants.$INJECTOR, useFactory: $injectorFactory }] }); }
23
- }
24
- i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "19.0.0-next.0", ngImport: i0, type: AngularTestingModule, decorators: [{
25
- type: NgModule,
26
- args: [{ providers: [{ provide: ɵconstants.$INJECTOR, useFactory: $injectorFactory }] }]
27
- }], ctorParameters: () => [{ type: i0.Injector }] });
28
- /**
29
- * A helper function to use when unit testing Angular services that depend upon upgraded AngularJS
30
- * services.
31
- *
32
- * This function returns an `NgModule` decorated class that is configured to wire up the Angular
33
- * and AngularJS injectors without the need to actually bootstrap a hybrid application.
34
- * This makes it simpler and faster to unit test services.
35
- *
36
- * Use the returned class as an "import" when configuring the `TestBed`.
37
- *
38
- * In the following code snippet, we are configuring the TestBed with two imports.
39
- * The `Ng2AppModule` is the Angular part of our hybrid application and the `ng1AppModule` is the
40
- * AngularJS part.
41
- *
42
- * <code-example path="upgrade/static/ts/full/module.spec.ts" region="angular-setup"></code-example>
43
- *
44
- * Once this is done we can get hold of services via the Angular `Injector` as normal.
45
- * Services that are (or have dependencies on) an upgraded AngularJS service, will be instantiated
46
- * as needed by the AngularJS `$injector`.
47
- *
48
- * In the following code snippet, `HeroesService` is an Angular service that depends upon an
49
- * AngularJS service, `titleCase`.
50
- *
51
- * <code-example path="upgrade/static/ts/full/module.spec.ts" region="angular-spec"></code-example>
52
- *
53
- * <div class="alert is-important">
54
- *
55
- * This helper is for testing services not Components.
56
- * For Component testing you must still bootstrap a hybrid app. See `UpgradeModule` or
57
- * `downgradeModule` for more information.
58
- *
59
- * </div>
60
- *
61
- * <div class="alert is-important">
62
- *
63
- * The resulting configuration does not wire up AngularJS digests to Zone hooks. It is the
64
- * responsibility of the test writer to call `$rootScope.$apply`, as necessary, to trigger
65
- * AngularJS handlers of async events from Angular.
66
- *
67
- * </div>
68
- *
69
- * <div class="alert is-important">
70
- *
71
- * The helper sets up global variables to hold the shared Angular and AngularJS injectors.
72
- *
73
- * * Only call this helper once per spec.
74
- * * Do not use `createAngularTestingModule` in the same spec as `createAngularJSTestingModule`.
75
- *
76
- * </div>
77
- *
78
- * Here is the example application and its unit tests that use `createAngularTestingModule`
79
- * and `createAngularJSTestingModule`.
80
- *
81
- * <code-tabs>
82
- * <code-pane header="module.spec.ts" path="upgrade/static/ts/full/module.spec.ts"></code-pane>
83
- * <code-pane header="module.ts" path="upgrade/static/ts/full/module.ts"></code-pane>
84
- * </code-tabs>
85
- *
86
- *
87
- * @param angularJSModules a collection of the names of AngularJS modules to include in the
88
- * configuration.
89
- * @param [strictDi] whether the AngularJS injector should have `strictDI` enabled.
90
- *
91
- * @publicApi
92
- */
93
- export function createAngularTestingModule(angularJSModules, strictDi) {
94
- angular
95
- .module_('$$angularJSTestingModule', angularJSModules)
96
- .constant(ɵconstants.UPGRADE_APP_TYPE_KEY, 2 /* UpgradeAppType.Static */)
97
- .factory(ɵconstants.INJECTOR_KEY, () => injector);
98
- $injector = angular.injector(['ng', '$$angularJSTestingModule'], strictDi);
99
- return AngularTestingModule;
100
- }
101
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlX2FuZ3VsYXJfdGVzdGluZ19tb2R1bGUuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy91cGdyYWRlL3N0YXRpYy90ZXN0aW5nL3NyYy9jcmVhdGVfYW5ndWxhcl90ZXN0aW5nX21vZHVsZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7Ozs7O0dBTUc7QUFFSCxPQUFPLEVBQUMsUUFBUSxFQUFFLFFBQVEsRUFBTyxNQUFNLGVBQWUsQ0FBQztBQUN2RCxPQUFPLEVBQUMsU0FBUyxJQUFJLE9BQU8sRUFBRSxVQUFVLEVBQUMsTUFBTSx5QkFBeUIsQ0FBQzs7QUFJekUsSUFBSSxTQUFTLEdBQW9DLElBQUksQ0FBQztBQUN0RCxJQUFJLFFBQWtCLENBQUM7QUFFdkIsTUFBTSxVQUFVLGdCQUFnQjtJQUM5QixPQUFPLFNBQVMsQ0FBQztBQUNuQixDQUFDO0FBR0QsTUFBTSxPQUFPLG9CQUFvQjtJQUMvQixZQUFZLENBQVc7UUFDckIsUUFBUSxHQUFHLENBQUMsQ0FBQztJQUNmLENBQUM7eUhBSFUsb0JBQW9COzBIQUFwQixvQkFBb0I7MEhBQXBCLG9CQUFvQixhQURYLENBQUMsRUFBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLFNBQVMsRUFBRSxVQUFVLEVBQUUsZ0JBQWdCLEVBQUMsQ0FBQzs7c0dBQ3hFLG9CQUFvQjtrQkFEaEMsUUFBUTttQkFBQyxFQUFDLFNBQVMsRUFBRSxDQUFDLEVBQUMsT0FBTyxFQUFFLFVBQVUsQ0FBQyxTQUFTLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFDLENBQUMsRUFBQzs7QUFPdEY7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0FnRUc7QUFDSCxNQUFNLFVBQVUsMEJBQTBCLENBQ3hDLGdCQUEwQixFQUMxQixRQUFrQjtJQUVsQixPQUFPO1NBQ0osT0FBTyxDQUFDLDBCQUEwQixFQUFFLGdCQUFnQixDQUFDO1NBQ3JELFFBQVEsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLGdDQUF3QjtTQUNoRSxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRSxHQUFHLEVBQUUsQ0FBQyxRQUFRLENBQUMsQ0FBQztJQUNwRCxTQUFTLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDLElBQUksRUFBRSwwQkFBMEIsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDO0lBQzNFLE9BQU8sb0JBQW9CLENBQUM7QUFDOUIsQ0FBQyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQGxpY2Vuc2VcbiAqIENvcHlyaWdodCBHb29nbGUgTExDIEFsbCBSaWdodHMgUmVzZXJ2ZWQuXG4gKlxuICogVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmVcbiAqIGZvdW5kIGluIHRoZSBMSUNFTlNFIGZpbGUgYXQgaHR0cHM6Ly9hbmd1bGFyLmlvL2xpY2Vuc2VcbiAqL1xuXG5pbXBvcnQge0luamVjdG9yLCBOZ01vZHVsZSwgVHlwZX0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQge8m1YW5ndWxhcjEgYXMgYW5ndWxhciwgybVjb25zdGFudHN9IGZyb20gJ0Bhbmd1bGFyL3VwZ3JhZGUvc3RhdGljJztcblxuaW1wb3J0IHtVcGdyYWRlQXBwVHlwZX0gZnJvbSAnLi4vLi4vLi4vc3JjL2NvbW1vbi9zcmMvdXRpbCc7XG5cbmxldCAkaW5qZWN0b3I6IGFuZ3VsYXIuSUluamVjdG9yU2VydmljZSB8IG51bGwgPSBudWxsO1xubGV0IGluamVjdG9yOiBJbmplY3RvcjtcblxuZXhwb3J0IGZ1bmN0aW9uICRpbmplY3RvckZhY3RvcnkoKSB7XG4gIHJldHVybiAkaW5qZWN0b3I7XG59XG5cbkBOZ01vZHVsZSh7cHJvdmlkZXJzOiBbe3Byb3ZpZGU6IMm1Y29uc3RhbnRzLiRJTkpFQ1RPUiwgdXNlRmFjdG9yeTogJGluamVjdG9yRmFjdG9yeX1dfSlcbmV4cG9ydCBjbGFzcyBBbmd1bGFyVGVzdGluZ01vZHVsZSB7XG4gIGNvbnN0cnVjdG9yKGk6IEluamVjdG9yKSB7XG4gICAgaW5qZWN0b3IgPSBpO1xuICB9XG59XG5cbi8qKlxuICogQSBoZWxwZXIgZnVuY3Rpb24gdG8gdXNlIHdoZW4gdW5pdCB0ZXN0aW5nIEFuZ3VsYXIgc2VydmljZXMgdGhhdCBkZXBlbmQgdXBvbiB1cGdyYWRlZCBBbmd1bGFySlNcbiAqIHNlcnZpY2VzLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gcmV0dXJucyBhbiBgTmdNb2R1bGVgIGRlY29yYXRlZCBjbGFzcyB0aGF0IGlzIGNvbmZpZ3VyZWQgdG8gd2lyZSB1cCB0aGUgQW5ndWxhclxuICogYW5kIEFuZ3VsYXJKUyBpbmplY3RvcnMgd2l0aG91dCB0aGUgbmVlZCB0byBhY3R1YWxseSBib290c3RyYXAgYSBoeWJyaWQgYXBwbGljYXRpb24uXG4gKiBUaGlzIG1ha2VzIGl0IHNpbXBsZXIgYW5kIGZhc3RlciB0byB1bml0IHRlc3Qgc2VydmljZXMuXG4gKlxuICogVXNlIHRoZSByZXR1cm5lZCBjbGFzcyBhcyBhbiBcImltcG9ydFwiIHdoZW4gY29uZmlndXJpbmcgdGhlIGBUZXN0QmVkYC5cbiAqXG4gKiBJbiB0aGUgZm9sbG93aW5nIGNvZGUgc25pcHBldCwgd2UgYXJlIGNvbmZpZ3VyaW5nIHRoZSBUZXN0QmVkIHdpdGggdHdvIGltcG9ydHMuXG4gKiBUaGUgYE5nMkFwcE1vZHVsZWAgaXMgdGhlIEFuZ3VsYXIgcGFydCBvZiBvdXIgaHlicmlkIGFwcGxpY2F0aW9uIGFuZCB0aGUgYG5nMUFwcE1vZHVsZWAgaXMgdGhlXG4gKiBBbmd1bGFySlMgcGFydC5cbiAqXG4gKiA8Y29kZS1leGFtcGxlIHBhdGg9XCJ1cGdyYWRlL3N0YXRpYy90cy9mdWxsL21vZHVsZS5zcGVjLnRzXCIgcmVnaW9uPVwiYW5ndWxhci1zZXR1cFwiPjwvY29kZS1leGFtcGxlPlxuICpcbiAqIE9uY2UgdGhpcyBpcyBkb25lIHdlIGNhbiBnZXQgaG9sZCBvZiBzZXJ2aWNlcyB2aWEgdGhlIEFuZ3VsYXIgYEluamVjdG9yYCBhcyBub3JtYWwuXG4gKiBTZXJ2aWNlcyB0aGF0IGFyZSAob3IgaGF2ZSBkZXBlbmRlbmNpZXMgb24pIGFuIHVwZ3JhZGVkIEFuZ3VsYXJKUyBzZXJ2aWNlLCB3aWxsIGJlIGluc3RhbnRpYXRlZFxuICogYXMgbmVlZGVkIGJ5IHRoZSBBbmd1bGFySlMgYCRpbmplY3RvcmAuXG4gKlxuICogSW4gdGhlIGZvbGxvd2luZyBjb2RlIHNuaXBwZXQsIGBIZXJvZXNTZXJ2aWNlYCBpcyBhbiBBbmd1bGFyIHNlcnZpY2UgdGhhdCBkZXBlbmRzIHVwb24gYW5cbiAqIEFuZ3VsYXJKUyBzZXJ2aWNlLCBgdGl0bGVDYXNlYC5cbiAqXG4gKiA8Y29kZS1leGFtcGxlIHBhdGg9XCJ1cGdyYWRlL3N0YXRpYy90cy9mdWxsL21vZHVsZS5zcGVjLnRzXCIgcmVnaW9uPVwiYW5ndWxhci1zcGVjXCI+PC9jb2RlLWV4YW1wbGU+XG4gKlxuICogPGRpdiBjbGFzcz1cImFsZXJ0IGlzLWltcG9ydGFudFwiPlxuICpcbiAqIFRoaXMgaGVscGVyIGlzIGZvciB0ZXN0aW5nIHNlcnZpY2VzIG5vdCBDb21wb25lbnRzLlxuICogRm9yIENvbXBvbmVudCB0ZXN0aW5nIHlvdSBtdXN0IHN0aWxsIGJvb3RzdHJhcCBhIGh5YnJpZCBhcHAuIFNlZSBgVXBncmFkZU1vZHVsZWAgb3JcbiAqIGBkb3duZ3JhZGVNb2R1bGVgIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIDwvZGl2PlxuICpcbiAqIDxkaXYgY2xhc3M9XCJhbGVydCBpcy1pbXBvcnRhbnRcIj5cbiAqXG4gKiBUaGUgcmVzdWx0aW5nIGNvbmZpZ3VyYXRpb24gZG9lcyBub3Qgd2lyZSB1cCBBbmd1bGFySlMgZGlnZXN0cyB0byBab25lIGhvb2tzLiBJdCBpcyB0aGVcbiAqIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB0ZXN0IHdyaXRlciB0byBjYWxsIGAkcm9vdFNjb3BlLiRhcHBseWAsIGFzIG5lY2Vzc2FyeSwgdG8gdHJpZ2dlclxuICogQW5ndWxhckpTIGhhbmRsZXJzIG9mIGFzeW5jIGV2ZW50cyBmcm9tIEFuZ3VsYXIuXG4gKlxuICogPC9kaXY+XG4gKlxuICogPGRpdiBjbGFzcz1cImFsZXJ0IGlzLWltcG9ydGFudFwiPlxuICpcbiAqIFRoZSBoZWxwZXIgc2V0cyB1cCBnbG9iYWwgdmFyaWFibGVzIHRvIGhvbGQgdGhlIHNoYXJlZCBBbmd1bGFyIGFuZCBBbmd1bGFySlMgaW5qZWN0b3JzLlxuICpcbiAqICogT25seSBjYWxsIHRoaXMgaGVscGVyIG9uY2UgcGVyIHNwZWMuXG4gKiAqIERvIG5vdCB1c2UgYGNyZWF0ZUFuZ3VsYXJUZXN0aW5nTW9kdWxlYCBpbiB0aGUgc2FtZSBzcGVjIGFzIGBjcmVhdGVBbmd1bGFySlNUZXN0aW5nTW9kdWxlYC5cbiAqXG4gKiA8L2Rpdj5cbiAqXG4gKiBIZXJlIGlzIHRoZSBleGFtcGxlIGFwcGxpY2F0aW9uIGFuZCBpdHMgdW5pdCB0ZXN0cyB0aGF0IHVzZSBgY3JlYXRlQW5ndWxhclRlc3RpbmdNb2R1bGVgXG4gKiBhbmQgYGNyZWF0ZUFuZ3VsYXJKU1Rlc3RpbmdNb2R1bGVgLlxuICpcbiAqIDxjb2RlLXRhYnM+XG4gKiAgPGNvZGUtcGFuZSBoZWFkZXI9XCJtb2R1bGUuc3BlYy50c1wiIHBhdGg9XCJ1cGdyYWRlL3N0YXRpYy90cy9mdWxsL21vZHVsZS5zcGVjLnRzXCI+PC9jb2RlLXBhbmU+XG4gKiAgPGNvZGUtcGFuZSBoZWFkZXI9XCJtb2R1bGUudHNcIiBwYXRoPVwidXBncmFkZS9zdGF0aWMvdHMvZnVsbC9tb2R1bGUudHNcIj48L2NvZGUtcGFuZT5cbiAqIDwvY29kZS10YWJzPlxuICpcbiAqXG4gKiBAcGFyYW0gYW5ndWxhckpTTW9kdWxlcyBhIGNvbGxlY3Rpb24gb2YgdGhlIG5hbWVzIG9mIEFuZ3VsYXJKUyBtb2R1bGVzIHRvIGluY2x1ZGUgaW4gdGhlXG4gKiBjb25maWd1cmF0aW9uLlxuICogQHBhcmFtIFtzdHJpY3REaV0gd2hldGhlciB0aGUgQW5ndWxhckpTIGluamVjdG9yIHNob3VsZCBoYXZlIGBzdHJpY3RESWAgZW5hYmxlZC5cbiAqXG4gKiBAcHVibGljQXBpXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVBbmd1bGFyVGVzdGluZ01vZHVsZShcbiAgYW5ndWxhckpTTW9kdWxlczogc3RyaW5nW10sXG4gIHN0cmljdERpPzogYm9vbGVhbixcbik6IFR5cGU8YW55PiB7XG4gIGFuZ3VsYXJcbiAgICAubW9kdWxlXygnJCRhbmd1bGFySlNUZXN0aW5nTW9kdWxlJywgYW5ndWxhckpTTW9kdWxlcylcbiAgICAuY29uc3RhbnQoybVjb25zdGFudHMuVVBHUkFERV9BUFBfVFlQRV9LRVksIFVwZ3JhZGVBcHBUeXBlLlN0YXRpYylcbiAgICAuZmFjdG9yeSjJtWNvbnN0YW50cy5JTkpFQ1RPUl9LRVksICgpID0+IGluamVjdG9yKTtcbiAgJGluamVjdG9yID0gYW5ndWxhci5pbmplY3RvcihbJ25nJywgJyQkYW5ndWxhckpTVGVzdGluZ01vZHVsZSddLCBzdHJpY3REaSk7XG4gIHJldHVybiBBbmd1bGFyVGVzdGluZ01vZHVsZTtcbn1cbiJdfQ==
@@ -1,93 +0,0 @@
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 { Injector } from '@angular/core';
9
- import { TestBed } from '@angular/core/testing';
10
- import { ɵangular1 as ng, ɵconstants } from '@angular/upgrade/static';
11
- /**
12
- * A helper function to use when unit testing AngularJS services that depend upon downgraded Angular
13
- * services.
14
- *
15
- * This function returns an AngularJS module that is configured to wire up the AngularJS and Angular
16
- * injectors without the need to actually bootstrap a hybrid application.
17
- * This makes it simpler and faster to unit test services.
18
- *
19
- * Use the returned AngularJS module in a call to
20
- * [`angular.mocks.module`](https://docs.angularjs.org/api/ngMock/function/angular.mock.module) to
21
- * include this module in the unit test injector.
22
- *
23
- * In the following code snippet, we are configuring the `$injector` with two modules:
24
- * The AngularJS `ng1AppModule`, which is the AngularJS part of our hybrid application and the
25
- * `Ng2AppModule`, which is the Angular part.
26
- *
27
- * <code-example path="upgrade/static/ts/full/module.spec.ts"
28
- * region="angularjs-setup"></code-example>
29
- *
30
- * Once this is done we can get hold of services via the AngularJS `$injector` as normal.
31
- * Services that are (or have dependencies on) a downgraded Angular service, will be instantiated as
32
- * needed by the Angular root `Injector`.
33
- *
34
- * In the following code snippet, `heroesService` is a downgraded Angular service that we are
35
- * accessing from AngularJS.
36
- *
37
- * <code-example path="upgrade/static/ts/full/module.spec.ts"
38
- * region="angularjs-spec"></code-example>
39
- *
40
- * <div class="alert is-important">
41
- *
42
- * This helper is for testing services not components.
43
- * For Component testing you must still bootstrap a hybrid app. See `UpgradeModule` or
44
- * `downgradeModule` for more information.
45
- *
46
- * </div>
47
- *
48
- * <div class="alert is-important">
49
- *
50
- * The resulting configuration does not wire up AngularJS digests to Zone hooks. It is the
51
- * responsibility of the test writer to call `$rootScope.$apply`, as necessary, to trigger
52
- * AngularJS handlers of async events from Angular.
53
- *
54
- * </div>
55
- *
56
- * <div class="alert is-important">
57
- *
58
- * The helper sets up global variables to hold the shared Angular and AngularJS injectors.
59
- *
60
- * * Only call this helper once per spec.
61
- * * Do not use `createAngularJSTestingModule` in the same spec as `createAngularTestingModule`.
62
- *
63
- * </div>
64
- *
65
- * Here is the example application and its unit tests that use `createAngularTestingModule`
66
- * and `createAngularJSTestingModule`.
67
- *
68
- * <code-tabs>
69
- * <code-pane header="module.spec.ts" path="upgrade/static/ts/full/module.spec.ts"></code-pane>
70
- * <code-pane header="module.ts" path="upgrade/static/ts/full/module.ts"></code-pane>
71
- * </code-tabs>
72
- *
73
- *
74
- * @param angularModules a collection of Angular modules to include in the configuration.
75
- *
76
- * @publicApi
77
- */
78
- export function createAngularJSTestingModule(angularModules) {
79
- return ng
80
- .module_('$$angularJSTestingModule', [])
81
- .constant(ɵconstants.UPGRADE_APP_TYPE_KEY, 2 /* UpgradeAppType.Static */)
82
- .factory(ɵconstants.INJECTOR_KEY, [
83
- ɵconstants.$INJECTOR,
84
- ($injector) => {
85
- TestBed.configureTestingModule({
86
- imports: angularModules,
87
- providers: [{ provide: ɵconstants.$INJECTOR, useValue: $injector }],
88
- });
89
- return TestBed.inject(Injector);
90
- },
91
- ]).name;
92
- }
93
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3JlYXRlX2FuZ3VsYXJqc190ZXN0aW5nX21vZHVsZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3VwZ3JhZGUvc3RhdGljL3Rlc3Rpbmcvc3JjL2NyZWF0ZV9hbmd1bGFyanNfdGVzdGluZ19tb2R1bGUudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUE7Ozs7OztHQU1HO0FBRUgsT0FBTyxFQUFDLFFBQVEsRUFBQyxNQUFNLGVBQWUsQ0FBQztBQUN2QyxPQUFPLEVBQUMsT0FBTyxFQUFDLE1BQU0sdUJBQXVCLENBQUM7QUFDOUMsT0FBTyxFQUFDLFNBQVMsSUFBSSxFQUFFLEVBQUUsVUFBVSxFQUFDLE1BQU0seUJBQXlCLENBQUM7QUFJcEU7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztHQWtFRztBQUNILE1BQU0sVUFBVSw0QkFBNEIsQ0FBQyxjQUFxQjtJQUNoRSxPQUFPLEVBQUU7U0FDTixPQUFPLENBQUMsMEJBQTBCLEVBQUUsRUFBRSxDQUFDO1NBQ3ZDLFFBQVEsQ0FBQyxVQUFVLENBQUMsb0JBQW9CLGdDQUF3QjtTQUNoRSxPQUFPLENBQUMsVUFBVSxDQUFDLFlBQVksRUFBRTtRQUNoQyxVQUFVLENBQUMsU0FBUztRQUNwQixDQUFDLFNBQThCLEVBQUUsRUFBRTtZQUNqQyxPQUFPLENBQUMsc0JBQXNCLENBQUM7Z0JBQzdCLE9BQU8sRUFBRSxjQUFjO2dCQUN2QixTQUFTLEVBQUUsQ0FBQyxFQUFDLE9BQU8sRUFBRSxVQUFVLENBQUMsU0FBUyxFQUFFLFFBQVEsRUFBRSxTQUFTLEVBQUMsQ0FBQzthQUNsRSxDQUFDLENBQUM7WUFDSCxPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLENBQUM7UUFDbEMsQ0FBQztLQUNGLENBQUMsQ0FBQyxJQUFJLENBQUM7QUFDWixDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBAbGljZW5zZVxuICogQ29weXJpZ2h0IEdvb2dsZSBMTEMgQWxsIFJpZ2h0cyBSZXNlcnZlZC5cbiAqXG4gKiBVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZVxuICogZm91bmQgaW4gdGhlIExJQ0VOU0UgZmlsZSBhdCBodHRwczovL2FuZ3VsYXIuaW8vbGljZW5zZVxuICovXG5cbmltcG9ydCB7SW5qZWN0b3J9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHtUZXN0QmVkfSBmcm9tICdAYW5ndWxhci9jb3JlL3Rlc3RpbmcnO1xuaW1wb3J0IHvJtWFuZ3VsYXIxIGFzIG5nLCDJtWNvbnN0YW50c30gZnJvbSAnQGFuZ3VsYXIvdXBncmFkZS9zdGF0aWMnO1xuXG5pbXBvcnQge1VwZ3JhZGVBcHBUeXBlfSBmcm9tICcuLi8uLi8uLi9zcmMvY29tbW9uL3NyYy91dGlsJztcblxuLyoqXG4gKiBBIGhlbHBlciBmdW5jdGlvbiB0byB1c2Ugd2hlbiB1bml0IHRlc3RpbmcgQW5ndWxhckpTIHNlcnZpY2VzIHRoYXQgZGVwZW5kIHVwb24gZG93bmdyYWRlZCBBbmd1bGFyXG4gKiBzZXJ2aWNlcy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gQW5ndWxhckpTIG1vZHVsZSB0aGF0IGlzIGNvbmZpZ3VyZWQgdG8gd2lyZSB1cCB0aGUgQW5ndWxhckpTIGFuZCBBbmd1bGFyXG4gKiBpbmplY3RvcnMgd2l0aG91dCB0aGUgbmVlZCB0byBhY3R1YWxseSBib290c3RyYXAgYSBoeWJyaWQgYXBwbGljYXRpb24uXG4gKiBUaGlzIG1ha2VzIGl0IHNpbXBsZXIgYW5kIGZhc3RlciB0byB1bml0IHRlc3Qgc2VydmljZXMuXG4gKlxuICogVXNlIHRoZSByZXR1cm5lZCBBbmd1bGFySlMgbW9kdWxlIGluIGEgY2FsbCB0b1xuICogW2Bhbmd1bGFyLm1vY2tzLm1vZHVsZWBdKGh0dHBzOi8vZG9jcy5hbmd1bGFyanMub3JnL2FwaS9uZ01vY2svZnVuY3Rpb24vYW5ndWxhci5tb2NrLm1vZHVsZSkgdG9cbiAqIGluY2x1ZGUgdGhpcyBtb2R1bGUgaW4gdGhlIHVuaXQgdGVzdCBpbmplY3Rvci5cbiAqXG4gKiBJbiB0aGUgZm9sbG93aW5nIGNvZGUgc25pcHBldCwgd2UgYXJlIGNvbmZpZ3VyaW5nIHRoZSBgJGluamVjdG9yYCB3aXRoIHR3byBtb2R1bGVzOlxuICogVGhlIEFuZ3VsYXJKUyBgbmcxQXBwTW9kdWxlYCwgd2hpY2ggaXMgdGhlIEFuZ3VsYXJKUyBwYXJ0IG9mIG91ciBoeWJyaWQgYXBwbGljYXRpb24gYW5kIHRoZVxuICogYE5nMkFwcE1vZHVsZWAsIHdoaWNoIGlzIHRoZSBBbmd1bGFyIHBhcnQuXG4gKlxuICogPGNvZGUtZXhhbXBsZSBwYXRoPVwidXBncmFkZS9zdGF0aWMvdHMvZnVsbC9tb2R1bGUuc3BlYy50c1wiXG4gKiByZWdpb249XCJhbmd1bGFyanMtc2V0dXBcIj48L2NvZGUtZXhhbXBsZT5cbiAqXG4gKiBPbmNlIHRoaXMgaXMgZG9uZSB3ZSBjYW4gZ2V0IGhvbGQgb2Ygc2VydmljZXMgdmlhIHRoZSBBbmd1bGFySlMgYCRpbmplY3RvcmAgYXMgbm9ybWFsLlxuICogU2VydmljZXMgdGhhdCBhcmUgKG9yIGhhdmUgZGVwZW5kZW5jaWVzIG9uKSBhIGRvd25ncmFkZWQgQW5ndWxhciBzZXJ2aWNlLCB3aWxsIGJlIGluc3RhbnRpYXRlZCBhc1xuICogbmVlZGVkIGJ5IHRoZSBBbmd1bGFyIHJvb3QgYEluamVjdG9yYC5cbiAqXG4gKiBJbiB0aGUgZm9sbG93aW5nIGNvZGUgc25pcHBldCwgYGhlcm9lc1NlcnZpY2VgIGlzIGEgZG93bmdyYWRlZCBBbmd1bGFyIHNlcnZpY2UgdGhhdCB3ZSBhcmVcbiAqIGFjY2Vzc2luZyBmcm9tIEFuZ3VsYXJKUy5cbiAqXG4gKiA8Y29kZS1leGFtcGxlIHBhdGg9XCJ1cGdyYWRlL3N0YXRpYy90cy9mdWxsL21vZHVsZS5zcGVjLnRzXCJcbiAqIHJlZ2lvbj1cImFuZ3VsYXJqcy1zcGVjXCI+PC9jb2RlLWV4YW1wbGU+XG4gKlxuICogPGRpdiBjbGFzcz1cImFsZXJ0IGlzLWltcG9ydGFudFwiPlxuICpcbiAqIFRoaXMgaGVscGVyIGlzIGZvciB0ZXN0aW5nIHNlcnZpY2VzIG5vdCBjb21wb25lbnRzLlxuICogRm9yIENvbXBvbmVudCB0ZXN0aW5nIHlvdSBtdXN0IHN0aWxsIGJvb3RzdHJhcCBhIGh5YnJpZCBhcHAuIFNlZSBgVXBncmFkZU1vZHVsZWAgb3JcbiAqIGBkb3duZ3JhZGVNb2R1bGVgIGZvciBtb3JlIGluZm9ybWF0aW9uLlxuICpcbiAqIDwvZGl2PlxuICpcbiAqIDxkaXYgY2xhc3M9XCJhbGVydCBpcy1pbXBvcnRhbnRcIj5cbiAqXG4gKiBUaGUgcmVzdWx0aW5nIGNvbmZpZ3VyYXRpb24gZG9lcyBub3Qgd2lyZSB1cCBBbmd1bGFySlMgZGlnZXN0cyB0byBab25lIGhvb2tzLiBJdCBpcyB0aGVcbiAqIHJlc3BvbnNpYmlsaXR5IG9mIHRoZSB0ZXN0IHdyaXRlciB0byBjYWxsIGAkcm9vdFNjb3BlLiRhcHBseWAsIGFzIG5lY2Vzc2FyeSwgdG8gdHJpZ2dlclxuICogQW5ndWxhckpTIGhhbmRsZXJzIG9mIGFzeW5jIGV2ZW50cyBmcm9tIEFuZ3VsYXIuXG4gKlxuICogPC9kaXY+XG4gKlxuICogPGRpdiBjbGFzcz1cImFsZXJ0IGlzLWltcG9ydGFudFwiPlxuICpcbiAqIFRoZSBoZWxwZXIgc2V0cyB1cCBnbG9iYWwgdmFyaWFibGVzIHRvIGhvbGQgdGhlIHNoYXJlZCBBbmd1bGFyIGFuZCBBbmd1bGFySlMgaW5qZWN0b3JzLlxuICpcbiAqICogT25seSBjYWxsIHRoaXMgaGVscGVyIG9uY2UgcGVyIHNwZWMuXG4gKiAqIERvIG5vdCB1c2UgYGNyZWF0ZUFuZ3VsYXJKU1Rlc3RpbmdNb2R1bGVgIGluIHRoZSBzYW1lIHNwZWMgYXMgYGNyZWF0ZUFuZ3VsYXJUZXN0aW5nTW9kdWxlYC5cbiAqXG4gKiA8L2Rpdj5cbiAqXG4gKiBIZXJlIGlzIHRoZSBleGFtcGxlIGFwcGxpY2F0aW9uIGFuZCBpdHMgdW5pdCB0ZXN0cyB0aGF0IHVzZSBgY3JlYXRlQW5ndWxhclRlc3RpbmdNb2R1bGVgXG4gKiBhbmQgYGNyZWF0ZUFuZ3VsYXJKU1Rlc3RpbmdNb2R1bGVgLlxuICpcbiAqIDxjb2RlLXRhYnM+XG4gKiAgPGNvZGUtcGFuZSBoZWFkZXI9XCJtb2R1bGUuc3BlYy50c1wiIHBhdGg9XCJ1cGdyYWRlL3N0YXRpYy90cy9mdWxsL21vZHVsZS5zcGVjLnRzXCI+PC9jb2RlLXBhbmU+XG4gKiAgPGNvZGUtcGFuZSBoZWFkZXI9XCJtb2R1bGUudHNcIiBwYXRoPVwidXBncmFkZS9zdGF0aWMvdHMvZnVsbC9tb2R1bGUudHNcIj48L2NvZGUtcGFuZT5cbiAqIDwvY29kZS10YWJzPlxuICpcbiAqXG4gKiBAcGFyYW0gYW5ndWxhck1vZHVsZXMgYSBjb2xsZWN0aW9uIG9mIEFuZ3VsYXIgbW9kdWxlcyB0byBpbmNsdWRlIGluIHRoZSBjb25maWd1cmF0aW9uLlxuICpcbiAqIEBwdWJsaWNBcGlcbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUFuZ3VsYXJKU1Rlc3RpbmdNb2R1bGUoYW5ndWxhck1vZHVsZXM6IGFueVtdKTogc3RyaW5nIHtcbiAgcmV0dXJuIG5nXG4gICAgLm1vZHVsZV8oJyQkYW5ndWxhckpTVGVzdGluZ01vZHVsZScsIFtdKVxuICAgIC5jb25zdGFudCjJtWNvbnN0YW50cy5VUEdSQURFX0FQUF9UWVBFX0tFWSwgVXBncmFkZUFwcFR5cGUuU3RhdGljKVxuICAgIC5mYWN0b3J5KMm1Y29uc3RhbnRzLklOSkVDVE9SX0tFWSwgW1xuICAgICAgybVjb25zdGFudHMuJElOSkVDVE9SLFxuICAgICAgKCRpbmplY3RvcjogbmcuSUluamVjdG9yU2VydmljZSkgPT4ge1xuICAgICAgICBUZXN0QmVkLmNvbmZpZ3VyZVRlc3RpbmdNb2R1bGUoe1xuICAgICAgICAgIGltcG9ydHM6IGFuZ3VsYXJNb2R1bGVzLFxuICAgICAgICAgIHByb3ZpZGVyczogW3twcm92aWRlOiDJtWNvbnN0YW50cy4kSU5KRUNUT1IsIHVzZVZhbHVlOiAkaW5qZWN0b3J9XSxcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBUZXN0QmVkLmluamVjdChJbmplY3Rvcik7XG4gICAgICB9LFxuICAgIF0pLm5hbWU7XG59XG4iXX0=
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidGVzdGluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3VwZ3JhZGUvc3RhdGljL3Rlc3RpbmcvdGVzdGluZy50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==
@@ -1,5 +0,0 @@
1
- /**
2
- * Generated bundle index. Do not edit.
3
- */
4
- export * from './index';
5
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoidXBncmFkZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3VwZ3JhZGUvdXBncmFkZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUVILGNBQWMsU0FBUyxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiBHZW5lcmF0ZWQgYnVuZGxlIGluZGV4LiBEbyBub3QgZWRpdC5cbiAqL1xuXG5leHBvcnQgKiBmcm9tICcuL2luZGV4JztcbiJdfQ==