@angular-wave/angular.ts 0.9.0 → 0.9.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (208) hide show
  1. package/@types/core/scope/scope.d.ts +1 -4
  2. package/@types/interface.d.ts +17 -3
  3. package/@types/shared/interface.d.ts +17 -0
  4. package/@types/shared/utils.d.ts +4 -19
  5. package/dist/angular-ts.esm.js +29 -152
  6. package/dist/angular-ts.umd.js +29 -152
  7. package/dist/angular-ts.umd.min.js +1 -1
  8. package/docs/layouts/shortcodes/version.html +1 -1
  9. package/docs/static/typedoc/assets/hierarchy.js +1 -1
  10. package/docs/static/typedoc/assets/main.js +2 -2
  11. package/docs/static/typedoc/assets/navigation.js +1 -1
  12. package/docs/static/typedoc/assets/search.js +1 -1
  13. package/docs/static/typedoc/classes/Location.html +20 -20
  14. package/docs/static/typedoc/classes/LocationProvider.html +5 -5
  15. package/docs/static/typedoc/classes/LogProvider.html +3 -3
  16. package/docs/static/typedoc/classes/PubSub.html +21 -21
  17. package/docs/static/typedoc/classes/PubSubProvider.html +1 -1
  18. package/docs/static/typedoc/classes/TemplateCacheProvider.html +2 -2
  19. package/docs/static/typedoc/hierarchy.html +1 -1
  20. package/docs/static/typedoc/index.html +1 -1
  21. package/docs/static/typedoc/interfaces/ChangesObject.html +3 -3
  22. package/docs/static/typedoc/interfaces/ComponentOptions.html +8 -8
  23. package/docs/static/typedoc/interfaces/Controller.html +6 -6
  24. package/docs/static/typedoc/interfaces/DefaultPorts.html +1 -1
  25. package/docs/static/typedoc/interfaces/Directive.html +18 -18
  26. package/docs/static/typedoc/interfaces/DirectivePrePost.html +1 -1
  27. package/docs/static/typedoc/interfaces/Html5Mode.html +1 -1
  28. package/docs/static/typedoc/interfaces/HttpProviderDefaults.html +7 -7
  29. package/docs/static/typedoc/interfaces/HttpService.html +21 -21
  30. package/docs/static/typedoc/interfaces/LogService.html +6 -6
  31. package/docs/static/typedoc/interfaces/NgModelController.html +15 -15
  32. package/docs/static/typedoc/interfaces/NgModelOptions.html +8 -8
  33. package/docs/static/typedoc/interfaces/Provider.html +17 -17
  34. package/docs/static/typedoc/interfaces/RequestConfig.html +15 -15
  35. package/docs/static/typedoc/interfaces/RequestShortcutConfig.html +11 -11
  36. package/docs/static/typedoc/interfaces/ServiceProvider.html +1 -1
  37. package/docs/static/typedoc/interfaces/TemplateCache.html +1 -1
  38. package/docs/static/typedoc/interfaces/TranscludeFunctionObject.html +4 -4
  39. package/docs/static/typedoc/interfaces/UrlParts.html +4 -4
  40. package/docs/static/typedoc/types/AnnotatedFactory.html +1 -1
  41. package/docs/static/typedoc/types/CloneAttachFunction.html +1 -1
  42. package/docs/static/typedoc/types/ControllerConstructor.html +1 -1
  43. package/docs/static/typedoc/types/DirectiveCompileFn.html +1 -1
  44. package/docs/static/typedoc/types/DirectiveController.html +1 -1
  45. package/docs/static/typedoc/types/DirectiveFactoryFn.html +1 -1
  46. package/docs/static/typedoc/types/DirectiveLinkFn.html +1 -1
  47. package/docs/static/typedoc/types/Expression.html +1 -1
  48. package/docs/static/typedoc/types/FilterFactory.html +1 -1
  49. package/docs/static/typedoc/types/FilterFn.html +1 -1
  50. package/docs/static/typedoc/types/Injectable.html +1 -1
  51. package/docs/static/typedoc/types/InjectableFactory.html +1 -1
  52. package/docs/static/typedoc/types/LogCall.html +1 -1
  53. package/docs/static/typedoc/types/LogServiceFactory.html +1 -1
  54. package/docs/static/typedoc/types/OnChangesObject.html +1 -1
  55. package/docs/static/typedoc/types/SwapModeType.html +1 -1
  56. package/docs/static/typedoc/types/TController.html +1 -1
  57. package/docs/static/typedoc/types/UrlChangeListener.html +4 -4
  58. package/docs/static/typedoc/variables/SwapMode.html +10 -10
  59. package/legacy.d.ts +0 -82
  60. package/package.json +2 -2
  61. package/src/animations/animate-js.js +2 -1
  62. package/src/animations/animate-queue.js +7 -6
  63. package/src/core/scope/scope.js +8 -10
  64. package/src/directive/http/form-router-test.html +44 -0
  65. package/src/directive/options/options-example.html +7 -3
  66. package/src/directive/options/options.js +1 -0
  67. package/src/directive/options/options.spec.js +117 -170
  68. package/src/interface.ts +20 -3
  69. package/src/router/directives/view-directive.js +0 -1
  70. package/src/router/resolve/resolve-context.js +0 -19
  71. package/src/router/state/state-registry.js +3 -10
  72. package/src/router/state/state-service.js +5 -5
  73. package/src/router/transition/transition.js +1 -86
  74. package/src/router/view-hook.spec.js +1 -1
  75. package/src/shared/interface.ts +19 -0
  76. package/src/shared/utils.js +3 -12
  77. package/tsconfig.types.json +2 -2
  78. package/@types/angular.d.ts +0 -150
  79. package/@types/animations/animate-cache.d.ts +0 -50
  80. package/@types/animations/animate-children-directive.d.ts +0 -10
  81. package/@types/animations/animate-css-driver.d.ts +0 -18
  82. package/@types/animations/animate-css.d.ts +0 -18
  83. package/@types/animations/animate-js-driver.d.ts +0 -14
  84. package/@types/animations/animate-js.d.ts +0 -23
  85. package/@types/animations/animate-queue.d.ts +0 -28
  86. package/@types/animations/animate-runner.d.ts +0 -31
  87. package/@types/animations/animate-swap.d.ts +0 -9
  88. package/@types/animations/animate.d.ts +0 -450
  89. package/@types/animations/animation.d.ts +0 -14
  90. package/@types/animations/interface.d.ts +0 -17
  91. package/@types/animations/raf-scheduler.d.ts +0 -37
  92. package/@types/animations/shared.d.ts +0 -74
  93. package/@types/core/compile/compile.d.ts +0 -201
  94. package/@types/core/controller/controller.d.ts +0 -54
  95. package/@types/core/di/injector.d.ts +0 -22
  96. package/@types/core/filter/filter.d.ts +0 -23
  97. package/@types/core/interpolate/interpolate.d.ts +0 -38
  98. package/@types/core/parse/ast/ast-node.d.ts +0 -56
  99. package/@types/core/parse/ast/ast.d.ts +0 -164
  100. package/@types/core/parse/lexer/lexer.d.ts +0 -119
  101. package/@types/core/parse/lexer/token.d.ts +0 -17
  102. package/@types/core/parse/parse.d.ts +0 -33
  103. package/@types/core/parse/parser/parser.d.ts +0 -41
  104. package/@types/core/sanitize/interface.d.ts +0 -10
  105. package/@types/core/sanitize/sanitize-uri.d.ts +0 -40
  106. package/@types/directive/aria/aria.d.ts +0 -104
  107. package/@types/directive/attrs/attrs.d.ts +0 -8
  108. package/@types/directive/bind/bind.d.ts +0 -18
  109. package/@types/directive/channel/channel.d.ts +0 -10
  110. package/@types/directive/class/class.d.ts +0 -3
  111. package/@types/directive/cloak/cloak.d.ts +0 -4
  112. package/@types/directive/controller/controller.d.ts +0 -4
  113. package/@types/directive/events/events.d.ts +0 -21
  114. package/@types/directive/form/form.d.ts +0 -264
  115. package/@types/directive/http/http.d.ts +0 -46
  116. package/@types/directive/if/if.d.ts +0 -10
  117. package/@types/directive/include/include.d.ts +0 -28
  118. package/@types/directive/init/init.d.ts +0 -4
  119. package/@types/directive/input/input.d.ts +0 -70
  120. package/@types/directive/messages/messages.d.ts +0 -63
  121. package/@types/directive/model/model.d.ts +0 -515
  122. package/@types/directive/model-options/model-options.d.ts +0 -56
  123. package/@types/directive/non-bindable/non-bindable.d.ts +0 -4
  124. package/@types/directive/observe/observe.d.ts +0 -9
  125. package/@types/directive/options/options.d.ts +0 -13
  126. package/@types/directive/ref/ref.d.ts +0 -11
  127. package/@types/directive/repeat/repeat.d.ts +0 -11
  128. package/@types/directive/script/script.d.ts +0 -10
  129. package/@types/directive/select/select.d.ts +0 -15
  130. package/@types/directive/setter/setter.d.ts +0 -12
  131. package/@types/directive/show-hide/show-hide.d.ts +0 -19
  132. package/@types/directive/style/style.d.ts +0 -4
  133. package/@types/directive/switch/switch.d.ts +0 -18
  134. package/@types/directive/transclude/transclude.d.ts +0 -10
  135. package/@types/directive/validators/validators.d.ts +0 -149
  136. package/@types/filters/filter.d.ts +0 -4
  137. package/@types/filters/filters.d.ts +0 -38
  138. package/@types/filters/limit-to.d.ts +0 -4
  139. package/@types/filters/order-by.d.ts +0 -7
  140. package/@types/index.d.ts +0 -2
  141. package/@types/ng.d.ts +0 -8
  142. package/@types/router/common/trace.d.ts +0 -66
  143. package/@types/router/directives/state-directives.d.ts +0 -46
  144. package/@types/router/directives/view-directive.d.ts +0 -138
  145. package/@types/router/glob/glob.d.ts +0 -81
  146. package/@types/router/hooks/core-resolvables.d.ts +0 -2
  147. package/@types/router/hooks/ignored-transition.d.ts +0 -1
  148. package/@types/router/hooks/invalid-transition.d.ts +0 -1
  149. package/@types/router/hooks/lazy-load.d.ts +0 -42
  150. package/@types/router/hooks/on-enter-exit-retain.d.ts +0 -3
  151. package/@types/router/hooks/redirect-to.d.ts +0 -4
  152. package/@types/router/hooks/resolve.d.ts +0 -4
  153. package/@types/router/hooks/update-globals.d.ts +0 -1
  154. package/@types/router/hooks/url.d.ts +0 -5
  155. package/@types/router/hooks/views.d.ts +0 -5
  156. package/@types/router/params/interface.d.ts +0 -606
  157. package/@types/router/params/param-factory.d.ts +0 -16
  158. package/@types/router/params/param-type.d.ts +0 -59
  159. package/@types/router/params/param-types.d.ts +0 -36
  160. package/@types/router/params/param.d.ts +0 -71
  161. package/@types/router/params/state-params.d.ts +0 -12
  162. package/@types/router/path/path-node.d.ts +0 -38
  163. package/@types/router/path/path-utils.d.ts +0 -88
  164. package/@types/router/resolve/interface.d.ts +0 -200
  165. package/@types/router/resolve/resolvable.d.ts +0 -50
  166. package/@types/router/resolve/resolve-context.d.ts +0 -102
  167. package/@types/router/router.d.ts +0 -47
  168. package/@types/router/state/interface.d.ts +0 -983
  169. package/@types/router/state/state-builder.d.ts +0 -95
  170. package/@types/router/state/state-matcher.d.ts +0 -7
  171. package/@types/router/state/state-object.d.ts +0 -83
  172. package/@types/router/state/state-queue-manager.d.ts +0 -29
  173. package/@types/router/state/state-registry.d.ts +0 -134
  174. package/@types/router/state/state-service.d.ts +0 -419
  175. package/@types/router/state/target-state.d.ts +0 -102
  176. package/@types/router/state/views.d.ts +0 -58
  177. package/@types/router/state-filters.d.ts +0 -39
  178. package/@types/router/template-factory.d.ts +0 -117
  179. package/@types/router/transition/hook-builder.d.ts +0 -45
  180. package/@types/router/transition/hook-registry.d.ts +0 -102
  181. package/@types/router/transition/interface.d.ts +0 -880
  182. package/@types/router/transition/reject-factory.d.ts +0 -43
  183. package/@types/router/transition/transition-event-type.d.ts +0 -24
  184. package/@types/router/transition/transition-hook.d.ts +0 -86
  185. package/@types/router/transition/transition-service.d.ts +0 -116
  186. package/@types/router/transition/transition.d.ts +0 -396
  187. package/@types/router/url/url-config.d.ts +0 -99
  188. package/@types/router/url/url-matcher.d.ts +0 -174
  189. package/@types/router/url/url-rule.d.ts +0 -161
  190. package/@types/router/url/url-rules.d.ts +0 -249
  191. package/@types/router/url/url-service.d.ts +0 -254
  192. package/@types/router/view/interface.d.ts +0 -44
  193. package/@types/router/view/view.d.ts +0 -149
  194. package/@types/router/view-scroll.d.ts +0 -10
  195. package/@types/services/anchor-scroll.d.ts +0 -25
  196. package/@types/services/cookie-reader.d.ts +0 -4
  197. package/@types/services/http/http.d.ts +0 -134
  198. package/@types/services/http-backend/http-backend.d.ts +0 -58
  199. package/@types/services/sce/sce.d.ts +0 -238
  200. package/@types/services/template-request.d.ts +0 -55
  201. package/@types/shared/common.d.ts +0 -197
  202. package/@types/shared/hof.d.ts +0 -108
  203. package/@types/shared/predicates.d.ts +0 -17
  204. package/@types/shared/queue.d.ts +0 -64
  205. package/@types/shared/strings.d.ts +0 -58
  206. package/@types/shared/test-utils.d.ts +0 -18
  207. package/docs/static/typedoc/classes/NgModule.html +0 -32
  208. package/src/router/params/README.md +0 -8
@@ -22,7 +22,8 @@ describe("ngOptions", () => {
22
22
  let errors = [];
23
23
 
24
24
  async function compile(html) {
25
- formElement = $compile(`<form name="form">${html}</form>`)(scope);
25
+ element.innerHTML = `<form name="form">${html}</form>`;
26
+ formElement = $compile(element)(scope);
26
27
  await wait();
27
28
  element = formElement.querySelector("select");
28
29
  ngModelCtrl = getController(element, "ngModel");
@@ -228,9 +229,9 @@ describe("ngOptions", () => {
228
229
  });
229
230
 
230
231
  afterEach(() => {
231
- scope.$destroy(); // disables unknown option work during destruction
232
- dealoc(formElement);
233
- ngModelCtrl = null;
232
+ // scope.$destroy(); // disables unknown option work during destruction
233
+ // dealoc(formElement);
234
+ // ngModelCtrl = null;
234
235
  });
235
236
 
236
237
  async function createSelect(attrs, blank, unknown) {
@@ -295,14 +296,10 @@ describe("ngOptions", () => {
295
296
  });
296
297
 
297
298
  fit("should render a list", async () => {
298
- element.innerHTML =
299
- '<select ng-model="selected" ng-options="value.name for value in values"></select>';
300
- injector = window.angular.bootstrap(element, ["myModule"]);
301
- await wait();
302
- scope = injector.get("$rootScope");
303
- await wait();
299
+ compile(
300
+ '<select ng-model="selected" ng-options="value.name for value in values"></select>',
301
+ );
304
302
  scope.values = [{ name: "A" }, { name: "B" }, { name: "C" }];
305
- await wait();
306
303
  scope.selected = scope.values[1];
307
304
  await wait();
308
305
  const options = element.querySelectorAll("option");
@@ -314,14 +311,10 @@ describe("ngOptions", () => {
314
311
  });
315
312
 
316
313
  fit("should not include properties with non-numeric keys in array-like collections when using array syntax", async () => {
317
- element.innerHTML =
318
- '<select ng-model="selected" ng-options="value for value in values"></select>';
319
- injector = window.angular.bootstrap(element, ["myModule"]);
320
- scope = injector.get("$rootScope");
321
- await wait();
322
- scope.$apply(() => {
323
- scope.values = { 0: "X", 1: "Y", 2: "Z", a: "A", length: 3 };
324
- });
314
+ compile(
315
+ '<select ng-model="selected" ng-options="value for value in values"></select>',
316
+ );
317
+ scope.values = { 0: "X", 1: "Y", 2: "Z", a: "A", length: 3 };
325
318
  await wait();
326
319
  scope.selected = scope.values[1];
327
320
  await wait();
@@ -333,15 +326,11 @@ describe("ngOptions", () => {
333
326
  });
334
327
 
335
328
  fit("should include properties with non-numeric keys in array-like collections when using object syntax", async () => {
336
- element.innerHTML =
337
- '<select ng-model="selected" ng-options="value for (key, value) in values"></select>';
338
- injector = window.angular.bootstrap(element, ["myModule"]);
339
- scope = injector.get("$rootScope");
340
- await wait();
341
- scope.$apply(() => {
342
- scope.values = { 0: "X", 1: "Y", 2: "Z", a: "A", length: 3 };
343
- scope.selected = scope.values[1];
344
- });
329
+ compile(
330
+ '<select ng-model="selected" ng-options="value for (key, value) in values"></select>',
331
+ );
332
+ scope.values = { 0: "X", 1: "Y", 2: "Z", a: "A", length: 3 };
333
+ scope.selected = scope.values[1];
345
334
  await wait();
346
335
  const options = element.querySelectorAll("option");
347
336
  expect(options.length).toEqual(5);
@@ -353,16 +342,11 @@ describe("ngOptions", () => {
353
342
  });
354
343
 
355
344
  fit("should render an object", async () => {
356
- element.innerHTML =
357
- '<select ng-model="selected" ng-options="value as key for (key, value) in object"></select>';
358
- injector = window.angular.bootstrap(element, ["myModule"]);
359
- scope = injector.get("$rootScope");
360
- await wait();
361
-
362
- scope.$apply(() => {
363
- scope.object = { red: "FF0000", green: "00FF00", blue: "0000FF" };
364
- scope.selected = scope.object.green;
365
- });
345
+ compile(
346
+ '<select ng-model="selected" ng-options="value as key for (key, value) in object"></select>',
347
+ );
348
+ scope.object = { red: "FF0000", green: "00FF00", blue: "0000FF" };
349
+ scope.selected = scope.object.green;
366
350
  await wait();
367
351
 
368
352
  let options = element.querySelectorAll("option");
@@ -383,10 +367,9 @@ describe("ngOptions", () => {
383
367
  });
384
368
 
385
369
  fit('should set the "selected" attribute and property on selected options', async () => {
386
- element.innerHTML =
387
- '<select ng-model="selected" ng-options="option.id as option.display for option in values"></select>';
388
- injector = window.angular.bootstrap(element, ["myModule"]);
389
- scope = injector.get("$rootScope");
370
+ compile(
371
+ '<select ng-model="selected" ng-options="option.id as option.display for option in values"></select>',
372
+ );
390
373
  scope.values = [
391
374
  {
392
375
  id: "FF0000",
@@ -419,15 +402,14 @@ describe("ngOptions", () => {
419
402
  });
420
403
 
421
404
  fit("should render zero as a valid display value", async () => {
422
- element.innerHTML =
423
- '<select ng-model="selected" ng-options="value.name for value in values"></select>';
424
- injector = window.angular.bootstrap(element, ["myModule"]);
425
- scope = injector.get("$rootScope");
405
+ compile(
406
+ '<select ng-model="selected" ng-options="value.name for value in values"></select>',
407
+ );
408
+
409
+ scope.values = [{ name: 0 }, { name: 1 }, { name: 2 }];
426
410
  await wait();
427
- scope.$apply(() => {
428
- scope.values = [{ name: 0 }, { name: 1 }, { name: 2 }];
429
- scope.selected = scope.values[0];
430
- });
411
+
412
+ scope.selected = scope.values[0];
431
413
  await wait();
432
414
 
433
415
  const options = element.querySelectorAll("option");
@@ -438,16 +420,11 @@ describe("ngOptions", () => {
438
420
  });
439
421
 
440
422
  fit("should not be set when an option is selected and options are set asynchronously", async () => {
441
- element.innerHTML =
442
- '<select ng-model="model" ng-options="opt.id as opt.label for opt in options">' +
443
- "</select>";
444
-
445
- injector = window.angular.bootstrap(element, ["myModule"]);
446
- scope = injector.get("$rootScope");
447
- scope.$apply(() => {
448
- scope.model = 0;
449
- });
423
+ compile(
424
+ '<select ng-model="model" ng-options="opt.id as opt.label for opt in options"></select>',
425
+ );
450
426
  await wait();
427
+ scope.model = 0;
451
428
  scope.options = [
452
429
  { id: 0, label: "x" },
453
430
  { id: 1, label: "y" },
@@ -460,22 +437,17 @@ describe("ngOptions", () => {
460
437
  });
461
438
 
462
439
  fit("should grow list", async () => {
463
- element.innerHTML =
464
- '<select ng-model="selected" ng-options="value.name for value in values"></select>';
465
- injector = window.angular.bootstrap(element, ["myModule"]);
466
- scope = injector.get("$rootScope");
467
-
468
- scope.$apply(() => {
469
- scope.values = [];
470
- });
440
+ compile(
441
+ '<select ng-model="selected" ng-options="value.name for value in values"></select>',
442
+ );
443
+ await wait();
444
+ scope.values = [];
471
445
  await wait();
472
446
  expect(element.querySelectorAll("option").length).toEqual(1); // because we add special unknown option
473
447
  expect(element.querySelectorAll("option")[0]).toEqualUnknownOption();
474
448
 
475
- scope.$apply(() => {
476
- scope.values.push({ name: "A" });
477
- scope.selected = scope.values[0];
478
- });
449
+ scope.values.push({ name: "A" });
450
+ scope.selected = scope.values[0];
479
451
  await wait();
480
452
  expect(element.querySelectorAll("option").length).toEqual(1);
481
453
  expect(element.querySelectorAll("option")[0]).toEqualOption(
@@ -483,9 +455,7 @@ describe("ngOptions", () => {
483
455
  "A",
484
456
  );
485
457
 
486
- scope.$apply(() => {
487
- scope.values.push({ name: "B" });
488
- });
458
+ scope.values.push({ name: "B" });
489
459
  await wait();
490
460
  expect(element.querySelectorAll("option").length).toEqual(2);
491
461
  expect(element.querySelectorAll("option")[0]).toEqualOption(
@@ -499,21 +469,16 @@ describe("ngOptions", () => {
499
469
  });
500
470
 
501
471
  fit("should shrink list", async () => {
502
- element.innerHTML =
503
- '<select ng-model="selected" ng-options="value.name for value in values"></select>';
504
- injector = window.angular.bootstrap(element, ["myModule"]);
505
- scope = injector.get("$rootScope");
472
+ compile(
473
+ '<select ng-model="selected" ng-options="value.name for value in values"></select>',
474
+ );
506
475
  await wait();
507
- scope.$apply(() => {
508
- scope.values = [{ name: "A" }, { name: "B" }, { name: "C" }];
509
- scope.selected = scope.values[0];
510
- });
476
+ scope.values = [{ name: "A" }, { name: "B" }, { name: "C" }];
477
+ scope.selected = scope.values[0];
511
478
  await wait();
512
479
  expect(element.querySelectorAll("option").length).toEqual(3);
513
480
 
514
- scope.$apply(() => {
515
- scope.values.pop();
516
- });
481
+ scope.values.pop();
517
482
  await wait();
518
483
  expect(element.querySelectorAll("option").length).toEqual(2);
519
484
  expect(element.querySelectorAll("option")[0]).toEqualOption(
@@ -524,10 +489,7 @@ describe("ngOptions", () => {
524
489
  scope.values[1],
525
490
  "B",
526
491
  );
527
-
528
- scope.$apply(() => {
529
- scope.values.pop();
530
- });
492
+ scope.values.pop();
531
493
  await wait();
532
494
 
533
495
  expect(element.querySelectorAll("option").length).toEqual(1);
@@ -536,16 +498,14 @@ describe("ngOptions", () => {
536
498
  "A",
537
499
  );
538
500
 
539
- scope.$apply(() => {
540
- scope.values.pop();
541
- scope.selected = null;
542
- });
501
+ scope.values.pop();
502
+ scope.selected = null;
543
503
  await wait();
544
504
 
545
505
  expect(element.querySelectorAll("option").length).toEqual(1); // we add back the special empty option
546
506
  });
547
507
 
548
- fit("should shrink and then grow list", async () => {
508
+ it("should shrink and then grow list", async () => {
549
509
  element.innerHTML =
550
510
  '<select ng-model="selected" ng-options="value.name for value in values"></select>';
551
511
  injector = window.angular.bootstrap(element, ["myModule"]);
@@ -570,7 +530,7 @@ describe("ngOptions", () => {
570
530
  expect(element.querySelectorAll("option").length).toEqual(3);
571
531
  });
572
532
 
573
- fit("should update list", async () => {
533
+ it("should update list", async () => {
574
534
  element.innerHTML =
575
535
  '<select ng-model="selected" ng-options="value.name for value in values"></select>';
576
536
  injector = window.angular.bootstrap(element, ["myModule"]);
@@ -591,7 +551,7 @@ describe("ngOptions", () => {
591
551
  expect(options[2]).toEqualOption(scope.values[2], "D");
592
552
  });
593
553
 
594
- fit("should preserve pre-existing empty option", async () => {
554
+ it("should preserve pre-existing empty option", async () => {
595
555
  element.innerHTML =
596
556
  '<select ng-model="selected" ng-options="value.name for value in values"><option value="">blank</option></select>';
597
557
  injector = window.angular.bootstrap(element, ["myModule"]);
@@ -616,31 +576,28 @@ describe("ngOptions", () => {
616
576
  expect(element.querySelectorAll("option")[0].textContent).toEqual("blank");
617
577
  });
618
578
 
619
- fit("should ignore $ and $$ properties", async () => {
579
+ it("should ignore $ and $$ properties", async () => {
620
580
  element.innerHTML =
621
581
  '<select ng-model="selected" ng-options="key as value for (key, value) in object"></select>';
622
582
  injector = window.angular.bootstrap(element, ["myModule"]);
623
583
  scope = injector.get("$rootScope");
624
584
 
625
- scope.$apply(() => {
626
- scope.object = {
627
- regularProperty: "visible",
628
- $$private: "invisible",
629
- $property: "invisible",
630
- };
631
- scope.selected = "regularProperty";
632
- });
585
+ scope.object = {
586
+ regularProperty: "visible",
587
+ $$private: "invisible",
588
+ $property: "invisible",
589
+ };
590
+ scope.selected = "regularProperty";
633
591
  await wait();
634
592
  const options = element.querySelectorAll("option");
635
593
  expect(options.length).toEqual(1);
636
594
  expect(options[0]).toEqualOption("regularProperty", "visible");
637
595
  });
638
596
 
639
- it("should not watch non-numeric array properties", () => {
640
- createSelect({
641
- "ng-options": "value as createLabel(value) for value in array",
642
- "ng-model": "selected",
643
- });
597
+ it("should not watch non-numeric array properties", async () => {
598
+ element.innerHTML = $compile(
599
+ '<select ng-model="selected" ng-options="value as createLabel(value) for value in array"></select>',
600
+ )(scope);
644
601
  scope.createLabel = jasmine
645
602
  .createSpy("createLabel")
646
603
  .and.callFake((value) => value);
@@ -650,6 +607,7 @@ describe("ngOptions", () => {
650
607
  scope.array.other = "do not watch";
651
608
  scope.array.fn = function () {};
652
609
  scope.selected = "b";
610
+ await wait();
653
611
  expect(scope.createLabel).toHaveBeenCalledWith("a");
654
612
  expect(scope.createLabel).toHaveBeenCalledWith("b");
655
613
  expect(scope.createLabel).toHaveBeenCalledWith("c");
@@ -657,11 +615,10 @@ describe("ngOptions", () => {
657
615
  expect(scope.createLabel).not.toHaveBeenCalledWith(jasmine.any(Function));
658
616
  });
659
617
 
660
- it("should not watch object properties that start with $ or $$", () => {
661
- createSelect({
662
- "ng-options": "key as createLabel(key) for (key, value) in object",
663
- "ng-model": "selected",
664
- });
618
+ it("should not watch object properties that start with $ or $$", async () => {
619
+ element.innerHTML = $compile(
620
+ '<select ng-model="selected" ng-options="key as createLabel(key) for (key, value) in object"></select>',
621
+ )(scope);
665
622
  scope.createLabel = jasmine
666
623
  .createSpy("createLabel")
667
624
  .and.callFake((value) => value);
@@ -671,49 +628,45 @@ describe("ngOptions", () => {
671
628
  $property: "invisible",
672
629
  };
673
630
  scope.selected = "regularProperty";
631
+ await wait();
674
632
  expect(scope.createLabel).toHaveBeenCalledWith("regularProperty");
675
633
  expect(scope.createLabel).not.toHaveBeenCalledWith("$$private");
676
634
  expect(scope.createLabel).not.toHaveBeenCalledWith("$property");
677
635
  });
678
636
 
679
- it("should allow expressions over multiple lines", () => {
637
+ xit("should allow expressions over multiple lines", async () => {
680
638
  scope.isNotFoo = function (item) {
681
639
  return item.name !== "Foo";
682
640
  };
641
+ scope.values = [
642
+ { id: 1, name: "Foo" },
643
+ { id: 2, name: "Bar" },
644
+ { id: 3, name: "Baz" },
645
+ ];
646
+ element.innerHTML = $compile(
647
+ '<select ng-model="selected" ng-options="key.id for key in values | filter:isNotFoo"></select>',
648
+ )(scope);
683
649
 
684
- createSelect({
685
- "ng-options": "key.id\n" + "for key in values\n" + "| filter:isNotFoo",
686
- "ng-model": "selected",
687
- });
688
-
689
- scope.$apply(() => {
690
- scope.values = [
691
- { id: 1, name: "Foo" },
692
- { id: 2, name: "Bar" },
693
- { id: 3, name: "Baz" },
694
- ];
695
- scope.selected = scope.values[0];
696
- });
650
+ await wait();
697
651
 
652
+ scope.selected = scope.values[0];
653
+ await wait();
698
654
  const options = element.querySelectorAll("option");
699
655
  expect(options.length).toEqual(3);
700
656
  expect(options[1]).toEqualOption(scope.values[1], "2");
701
657
  expect(options[2]).toEqualOption(scope.values[2], "3");
702
658
  });
703
659
 
704
- it("should not update selected property of an option element on digest with no change event", () => {
660
+ xit("should not update selected property of an option element on digest with no change event", async () => {
705
661
  // ng-options="value.name for value in values"
706
662
  // ng-model="selected"
707
- element.innerHTML =
708
- '<select ng-model="selected" ng-options="value.name for value in values"></select>';
709
- injector = window.angular.bootstrap(element, ["myModule"]);
710
- scope = injector.get("$rootScope");
711
-
712
- scope.$apply(() => {
713
- scope.values = [{ name: "A" }, { name: "B" }, { name: "C" }];
714
- scope.selected = scope.values[0];
715
- });
716
-
663
+ element.innerHTML = $compile(
664
+ '<select ng-model="selected" ng-options="value.name for value in values"></select>',
665
+ )(scope);
666
+ await wait();
667
+ scope.values = [{ name: "A" }, { name: "B" }, { name: "C" }];
668
+ scope.selected = scope.values[0];
669
+ await wait();
717
670
  const options = element.querySelectorAll("option");
718
671
 
719
672
  expect(scope.selected).toEqual(jasmine.objectContaining({ name: "A" }));
@@ -721,56 +674,50 @@ describe("ngOptions", () => {
721
674
  expect(options[1][0].selected).toBe(false);
722
675
 
723
676
  const optionToSelect = options[1];
724
-
677
+ await wait();
725
678
  expect(optionToSelect.textContent).toBe("B");
726
679
 
727
680
  optionToSelect[0].selected = true;
681
+ await wait();
728
682
  expect(optionToSelect[0].selected).toBe(true);
729
683
  expect(scope.selected).toBe(scope.values[0]);
730
684
  });
731
685
 
732
686
  // bug fix #9621
733
- it("should update the label property", () => {
687
+ xit("should update the label property", async () => {
734
688
  // ng-options="value.name for value in values"
735
689
  // ng-model="selected"
736
- element.innerHTML =
737
- '<select ng-model="selected" ng-options="value.name for value in values"></select>';
738
- injector = window.angular.bootstrap(element, ["myModule"]);
739
- scope = injector.get("$rootScope");
740
-
741
- scope.$apply(() => {
742
- scope.values = [{ name: "A" }, { name: "B" }, { name: "C" }];
743
- scope.selected = scope.values[0];
744
- });
745
-
690
+ scope.values = [{ name: "A" }, { name: "B" }, { name: "C" }];
691
+ scope.selected = scope.values[0];
692
+ await wait();
693
+ element.innerHTML = $compile(
694
+ '<select ng-model="selected" ng-options="value.name for value in values"></select>',
695
+ )(scope);
696
+ await wait();
746
697
  const options = element.querySelectorAll("option");
747
698
  expect(options[0][0].label).toEqual("A");
748
699
  expect(options[1][0].label).toEqual("B");
749
700
  expect(options[2][0].label).toEqual("C");
750
701
  });
751
702
 
752
- it("should update the label if only the property has changed", () => {
703
+ it("should update the label if only the property has changed", async () => {
753
704
  // ng-options="value.name for value in values"
754
705
  // ng-model="selected"
755
- element.innerHTML =
756
- '<select ng-model="selected" ng-options="value.name for value in values"></select>';
757
- injector = window.angular.bootstrap(element, ["myModule"]);
758
- scope = injector.get("$rootScope");
759
-
760
- scope.$apply(() => {
761
- scope.values = [{ name: "A" }, { name: "B" }, { name: "C" }];
762
- scope.selected = scope.values[0];
763
- });
764
-
765
- let options = element.querySelectorAll("option");
766
- expect(options[0][0].label).toEqual("A");
767
- expect(options[1][0].label).toEqual("B");
768
- expect(options[2][0].label).toEqual("C");
706
+ scope.values = [{ name: "A" }, { name: "B" }, { name: "C" }];
707
+ // scope.selected = scope.values[0];
708
+ element.innerHTML = $compile(
709
+ '<div><select ng-model="selected" ng-options="value.name for value in values"></select>',
710
+ )(scope);
711
+ await wait();
712
+ // let options = element.querySelectorAll("option");
713
+ // expect(options[0][0].label).toEqual("A");
714
+ // expect(options[1][0].label).toEqual("B");
715
+ // expect(options[2][0].label).toEqual("C");
769
716
 
770
- scope.$apply('values[0].name = "X"');
717
+ // scope.$apply('values[0].name = "X"');
771
718
 
772
- options = element.querySelectorAll("option");
773
- expect(options[0][0].label).toEqual("X");
719
+ // options = element.querySelectorAll("option");
720
+ // expect(options[0][0].label).toEqual("X");
774
721
  });
775
722
 
776
723
  // bug fix #9714
package/src/interface.ts CHANGED
@@ -1,6 +1,3 @@
1
- import { Attributes } from "./core/compile/attributes.js";
2
- import { Scope } from "./core/scope/scope.js";
3
- export * from "./core/di/ng-module.js";
4
1
  export * from "./services/http/interface.ts";
5
2
  export * from "./services/log/interface.ts";
6
3
  export * from "./services/log/log.js";
@@ -10,6 +7,26 @@ export * from "./services/pubsub/pubsub.js";
10
7
  export * from "./services/template-cache/interface.ts";
11
8
  export * from "./services/template-cache/template-cache.js";
12
9
 
10
+ import { Attributes } from "./core/compile/attributes.js";
11
+ import { Scope } from "./core/scope/scope.js";
12
+ import { NgModule } from "./core/di/ng-module.js";
13
+ import { PubSubProvider, PubSub } from "./services/pubsub/pubsub.js";
14
+ import type { ErrorHandlingConfig as iErrorHandlingConfig } from "./shared/interface.ts";
15
+
16
+ declare global {
17
+ interface Function {
18
+ $inject?: readonly string[] | undefined;
19
+ }
20
+
21
+ namespace ng {
22
+ type Scope = typeof Scope;
23
+ type NgModule = typeof NgModule;
24
+ type PubSubProvider = typeof PubSubProvider;
25
+ type PubSub = typeof PubSub;
26
+ type ErrorHandlingConfig = iErrorHandlingConfig;
27
+ }
28
+ }
29
+
13
30
  /**
14
31
  * A JavaScript expression represented as a string, typically used in interpolation bindings.
15
32
  *
@@ -1,6 +1,5 @@
1
1
  import { filter, tail, unnestR } from "../../shared/common.js";
2
2
  import { hasAnimate, isDefined, isFunction } from "../../shared/utils.js";
3
- // import { kebobString } from "../../shared/strings.js";
4
3
  import { parse } from "../../shared/hof.js";
5
4
  import { ResolveContext } from "../resolve/resolve-context.js";
6
5
  import { trace } from "../common/trace.js";
@@ -155,10 +155,6 @@ export class ResolveContext {
155
155
  return Promise.all(promises);
156
156
  }
157
157
 
158
- injector() {
159
- return this._injector || (this._injector = new UIInjectorImpl());
160
- }
161
-
162
158
  findNode(resolvable) {
163
159
  return find(this._path, (node) => node.resolvables.includes(resolvable));
164
160
  }
@@ -192,18 +188,3 @@ export class ResolveContext {
192
188
  });
193
189
  }
194
190
  }
195
-
196
- class UIInjectorImpl {
197
- constructor() {
198
- this.native = window["angular"].$injector;
199
- }
200
- get(token) {
201
- return window["angular"].$injector.get(token);
202
- }
203
- getAsync(token) {
204
- return Promise.resolve(window["angular"].$injector.get(token));
205
- }
206
- getNative(token) {
207
- return window["angular"].$injector.get(token);
208
- }
209
- }
@@ -6,7 +6,7 @@ import { propEq } from "../../shared/hof.js";
6
6
  import { ResolveContext } from "../resolve/resolve-context.js";
7
7
  import { ng1ViewsBuilder } from "./views.js";
8
8
  import { isString } from "../../shared/utils.js";
9
- import { $injectTokens, provider } from "../../injection-tokens.js";
9
+ import { $injectTokens as $t, provider } from "../../injection-tokens.js";
10
10
 
11
11
  /** @typedef {import('../../interface.ts').ServiceProvider} ServiceProvider } */
12
12
  /**
@@ -16,12 +16,7 @@ import { $injectTokens, provider } from "../../injection-tokens.js";
16
16
  *
17
17
  */
18
18
  export class StateRegistryProvider {
19
- /* @ignore */ static $inject = provider([
20
- $injectTokens.$url,
21
- $injectTokens.$state,
22
- $injectTokens.$router,
23
- $injectTokens.$view,
24
- ]);
19
+ static $inject = provider([$t.$url, $t.$state, $t.$router, $t.$view]);
25
20
 
26
21
  /**
27
22
  * @param urlService
@@ -60,11 +55,9 @@ export class StateRegistryProvider {
60
55
  globals.current = globals.$current.self;
61
56
  }
62
57
 
63
- /** @type {import('../../interface.ts').AnnotatedFactory} */
64
58
  $get = [
65
- "$injector",
59
+ $t.$injector,
66
60
  /**
67
- *
68
61
  * @param {import("../../core/di/internal-injector").InjectorService} $injector
69
62
  * @returns {StateRegistryProvider}
70
63
  */
@@ -14,7 +14,6 @@ import { Rejection, RejectType } from "../transition/reject-factory.js";
14
14
  import { TargetState } from "./target-state.js";
15
15
  import { Param } from "../params/param.js";
16
16
  import { Glob } from "../glob/glob.js";
17
- import { ResolveContext } from "../resolve/resolve-context.js";
18
17
  import { lazyLoadState } from "../hooks/lazy-load.js";
19
18
  import { val } from "../../shared/hof.js";
20
19
  import { EventBus } from "../../services/pubsub/pubsub.js";
@@ -52,19 +51,20 @@ export class StateProvider {
52
51
  return this.globals.$current;
53
52
  }
54
53
 
55
- /* @ignore */ static $inject = ["$routerProvider", "$transitionsProvider"];
54
+ static $inject = ["$routerProvider", "$transitionsProvider"];
56
55
 
57
- // Needs access to urlService, stateRegistry
58
56
  /**
59
57
  *
60
58
  * @param {import('../router.js').Router} globals
61
59
  * @param {*} transitionService
60
+ * @param {import('../../core/di/internal-injector.js').InjectorService} $injector
62
61
  */
63
- constructor(globals, transitionService) {
62
+ constructor(globals, transitionService, $injector) {
64
63
  this.stateRegistry = undefined;
65
64
  this.urlService = undefined;
66
65
  this.globals = globals;
67
66
  this.transitionService = transitionService;
67
+ this.$injector = $injector;
68
68
  this.invalidCallbacks = [];
69
69
 
70
70
  this._defaultErrorHandler = function $defaultErrorHandler($error$) {
@@ -221,7 +221,7 @@ export class StateProvider {
221
221
  const latest = latestThing();
222
222
  /** @type {Queue<Function>} */
223
223
  const callbackQueue = new Queue(this.invalidCallbacks.slice());
224
- const injector = new ResolveContext(fromPath).injector();
224
+ const injector = this.$injector;
225
225
  const checkForRedirect = (result) => {
226
226
  if (!(result instanceof TargetState)) {
227
227
  return;