ember-source 5.0.0 → 5.1.0-alpha.2

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 (176) hide show
  1. package/build-metadata.json +3 -3
  2. package/dist/ember-template-compiler.js +19 -35
  3. package/dist/ember-template-compiler.map +1 -1
  4. package/dist/ember-testing.js +8 -31
  5. package/dist/ember-testing.map +1 -1
  6. package/dist/ember.debug.js +798 -436
  7. package/dist/ember.debug.map +1 -1
  8. package/dist/header/license.js +1 -1
  9. package/dist/packages/@ember/-internals/glimmer/index.js +44 -89
  10. package/dist/packages/@ember/-internals/metal/index.js +7 -66
  11. package/dist/packages/@ember/-internals/utility-types/index.js +1 -1
  12. package/dist/packages/@ember/array/proxy.js +0 -1
  13. package/dist/packages/@ember/component/template-only.js +15 -27
  14. package/dist/packages/@ember/debug/index.js +6 -30
  15. package/dist/packages/@ember/debug/lib/warn.js +1 -0
  16. package/dist/packages/@ember/helper/index.js +139 -3
  17. package/dist/packages/@ember/modifier/index.js +11 -3
  18. package/dist/packages/@ember/object/core.js +37 -0
  19. package/dist/packages/@ember/object/mixin.js +1 -1
  20. package/dist/packages/@ember/object/proxy.js +1 -0
  21. package/dist/packages/@ember/routing/lib/utils.js +0 -1
  22. package/dist/packages/@ember/routing/route.js +8 -0
  23. package/dist/packages/@ember/routing/router-service.js +0 -1
  24. package/dist/packages/@ember/runloop/-private/backburner.js +10 -0
  25. package/dist/packages/@ember/runloop/index.js +6 -2
  26. package/dist/packages/@ember/test/index.js +5 -3
  27. package/dist/packages/ember/index.js +229 -220
  28. package/dist/packages/ember/version.js +1 -1
  29. package/dist/packages/ember-testing/lib/test/waiters.js +4 -1
  30. package/docs/data.json +478 -327
  31. package/package.json +26 -23
  32. package/types/publish.mjs +147 -354
  33. package/types/stable/@ember/-internals/glimmer/index.d.ts +6 -1
  34. package/types/stable/@ember/-internals/glimmer/lib/component.d.ts +256 -132
  35. package/types/stable/@ember/-internals/glimmer/lib/components/input.d.ts +5 -2
  36. package/types/stable/@ember/-internals/glimmer/lib/components/link-to.d.ts +5 -2
  37. package/types/stable/@ember/-internals/glimmer/lib/components/textarea.d.ts +8 -2
  38. package/types/stable/@ember/-internals/glimmer/lib/helper.d.ts +66 -56
  39. package/types/stable/@ember/-internals/glimmer/lib/templates/empty.d.ts +5 -0
  40. package/types/stable/@ember/-internals/glimmer/lib/templates/input.d.ts +5 -0
  41. package/types/stable/@ember/-internals/glimmer/lib/templates/link-to.d.ts +5 -0
  42. package/types/stable/@ember/-internals/glimmer/lib/templates/outlet.d.ts +5 -0
  43. package/types/stable/@ember/-internals/glimmer/lib/templates/root.d.ts +5 -0
  44. package/types/stable/@ember/-internals/glimmer/lib/templates/textarea.d.ts +5 -0
  45. package/types/stable/@ember/-internals/metal/lib/computed.d.ts +2 -1
  46. package/types/stable/@ember/-internals/metal/lib/computed_cache.d.ts +1 -0
  47. package/types/stable/@ember/-internals/metal/lib/get_properties.d.ts +4 -2
  48. package/types/stable/@ember/-internals/metal/lib/set_properties.d.ts +3 -5
  49. package/types/stable/@ember/-internals/utility-types/index.d.ts +5 -0
  50. package/types/stable/@ember/-internals/views/lib/component_lookup.d.ts +8 -1
  51. package/types/stable/@ember/-internals/views/lib/system/action_manager.d.ts +3 -4
  52. package/types/stable/@ember/-internals/views/lib/views/core_view.d.ts +4 -6
  53. package/types/stable/@ember/application/instance.d.ts +1 -1
  54. package/types/stable/@ember/array/index.d.ts +1 -1
  55. package/types/stable/@ember/array/proxy.d.ts +11 -13
  56. package/types/stable/@ember/component/helper.d.ts +6 -1
  57. package/types/stable/@ember/component/template-only.d.ts +36 -1
  58. package/types/stable/@ember/controller/index.d.ts +6 -5
  59. package/types/stable/@ember/debug/data-adapter.d.ts +10 -3
  60. package/types/stable/@ember/debug/index.d.ts +4 -1
  61. package/types/stable/@ember/debug/lib/warn.d.ts +6 -1
  62. package/types/stable/@ember/engine/index.d.ts +2 -1
  63. package/types/stable/@ember/engine/instance.d.ts +2 -1
  64. package/types/stable/@ember/helper/index.d.ts +141 -3
  65. package/types/stable/@ember/modifier/index.d.ts +11 -2
  66. package/types/stable/@ember/object/core.d.ts +14 -9
  67. package/types/stable/@ember/object/index.d.ts +3 -2
  68. package/types/stable/@ember/object/lib/computed/reduce_computed_macros.d.ts +1 -1
  69. package/types/stable/@ember/object/mixin.d.ts +2 -2
  70. package/types/stable/@ember/object/observable.d.ts +21 -1
  71. package/types/stable/@ember/object/proxy.d.ts +26 -2
  72. package/types/stable/@ember/routing/hash-location.d.ts +0 -6
  73. package/types/stable/@ember/routing/history-location.d.ts +0 -6
  74. package/types/stable/@ember/routing/lib/controller_for.d.ts +2 -7
  75. package/types/stable/@ember/routing/lib/router_state.d.ts +10 -6
  76. package/types/stable/@ember/routing/lib/routing-service.d.ts +3 -3
  77. package/types/stable/@ember/routing/lib/utils.d.ts +14 -15
  78. package/types/stable/@ember/routing/location-ext.d.ts +18 -0
  79. package/types/stable/@ember/routing/location.d.ts +0 -6
  80. package/types/stable/@ember/routing/none-location.d.ts +0 -6
  81. package/types/stable/@ember/routing/owner-ext.d.ts +11 -0
  82. package/types/stable/@ember/routing/route.d.ts +39 -24
  83. package/types/stable/@ember/routing/router-service.d.ts +18 -15
  84. package/types/stable/@ember/routing/router.d.ts +42 -44
  85. package/types/stable/@ember/routing/service-ext.d.ts +14 -0
  86. package/types/stable/@ember/runloop/-private/backburner.d.ts +7 -0
  87. package/types/stable/@ember/runloop/index.d.ts +12 -4
  88. package/types/stable/@ember/service/index.d.ts +20 -7
  89. package/types/stable/@ember/service/owner-ext.d.ts +11 -0
  90. package/types/stable/@ember/template-compilation/index.d.ts +16 -1
  91. package/types/stable/@ember/test/index.d.ts +6 -6
  92. package/types/stable/@ember/utils/lib/compare.d.ts +1 -1
  93. package/types/stable/ember/index.d.ts +320 -246
  94. package/types/stable/ember/version.d.ts +4 -0
  95. package/types/stable/ember-template-compiler/index.d.ts +1 -8
  96. package/types/stable/ember-template-compiler/lib/types.d.ts +20 -0
  97. package/types/stable/ember-testing/lib/adapters/adapter.d.ts +37 -1
  98. package/types/stable/ember-testing/lib/adapters/qunit.d.ts +18 -3
  99. package/types/stable/ember-testing/lib/test/helpers.d.ts +5 -1
  100. package/types/stable/ember-testing/lib/test/promise.d.ts +1 -1
  101. package/types/stable/index.d.ts +298 -4
  102. package/types/stable/loader/lib/index.d.ts +4 -0
  103. package/types/stable/require.d.ts +4 -0
  104. package/types/preview/@ember/application/-private/event-dispatcher.d.ts +0 -18
  105. package/types/preview/@ember/application/-private/registry.d.ts +0 -15
  106. package/types/preview/@ember/application/index.d.ts +0 -136
  107. package/types/preview/@ember/application/instance.d.ts +0 -9
  108. package/types/preview/@ember/application/types.d.ts +0 -29
  109. package/types/preview/@ember/array/-private/enumerable.d.ts +0 -13
  110. package/types/preview/@ember/array/-private/mutable-enumerable.d.ts +0 -13
  111. package/types/preview/@ember/array/-private/native-array.d.ts +0 -181
  112. package/types/preview/@ember/array/index.d.ts +0 -251
  113. package/types/preview/@ember/array/mutable.d.ts +0 -94
  114. package/types/preview/@ember/array/proxy.d.ts +0 -29
  115. package/types/preview/@ember/component/-private/class-names-support.d.ts +0 -27
  116. package/types/preview/@ember/component/-private/core-view.d.ts +0 -14
  117. package/types/preview/@ember/component/-private/glimmer-interfaces.d.ts +0 -49
  118. package/types/preview/@ember/component/-private/signature-utils.d.ts +0 -107
  119. package/types/preview/@ember/component/-private/view-mixin.d.ts +0 -59
  120. package/types/preview/@ember/component/helper.d.ts +0 -122
  121. package/types/preview/@ember/component/index.d.ts +0 -164
  122. package/types/preview/@ember/component/template-only.d.ts +0 -47
  123. package/types/preview/@ember/controller/index.d.ts +0 -47
  124. package/types/preview/@ember/debug/container-debug-adapter.d.ts +0 -14
  125. package/types/preview/@ember/debug/data-adapter.d.ts +0 -64
  126. package/types/preview/@ember/debug/index.d.ts +0 -98
  127. package/types/preview/@ember/destroyable/index.d.ts +0 -23
  128. package/types/preview/@ember/engine/-private/container-proxy-mixin.d.ts +0 -11
  129. package/types/preview/@ember/engine/-private/registry-proxy-mixin.d.ts +0 -12
  130. package/types/preview/@ember/engine/-private/types/initializer.d.ts +0 -8
  131. package/types/preview/@ember/engine/index.d.ts +0 -45
  132. package/types/preview/@ember/engine/instance.d.ts +0 -25
  133. package/types/preview/@ember/helper/index.d.ts +0 -49
  134. package/types/preview/@ember/modifier/index.d.ts +0 -33
  135. package/types/preview/@ember/object/-private/action-handler.d.ts +0 -31
  136. package/types/preview/@ember/object/-private/types.d.ts +0 -63
  137. package/types/preview/@ember/object/compat.d.ts +0 -9
  138. package/types/preview/@ember/object/computed.d.ts +0 -263
  139. package/types/preview/@ember/object/core.d.ts +0 -89
  140. package/types/preview/@ember/object/evented.d.ts +0 -45
  141. package/types/preview/@ember/object/events.d.ts +0 -47
  142. package/types/preview/@ember/object/index.d.ts +0 -126
  143. package/types/preview/@ember/object/internals.d.ts +0 -17
  144. package/types/preview/@ember/object/mixin.d.ts +0 -19
  145. package/types/preview/@ember/object/observable.d.ts +0 -89
  146. package/types/preview/@ember/object/observers.d.ts +0 -34
  147. package/types/preview/@ember/object/promise-proxy-mixin.d.ts +0 -37
  148. package/types/preview/@ember/object/proxy.d.ts +0 -27
  149. package/types/preview/@ember/routing/-private/router-dsl.d.ts +0 -20
  150. package/types/preview/@ember/routing/hash-location.d.ts +0 -26
  151. package/types/preview/@ember/routing/history-location.d.ts +0 -25
  152. package/types/preview/@ember/routing/index.d.ts +0 -17
  153. package/types/preview/@ember/routing/location.d.ts +0 -104
  154. package/types/preview/@ember/routing/none-location.d.ts +0 -27
  155. package/types/preview/@ember/routing/route-info.d.ts +0 -73
  156. package/types/preview/@ember/routing/route.d.ts +0 -532
  157. package/types/preview/@ember/routing/router-service.d.ts +0 -359
  158. package/types/preview/@ember/routing/router.d.ts +0 -41
  159. package/types/preview/@ember/routing/transition.d.ts +0 -126
  160. package/types/preview/@ember/routing/types.d.ts +0 -15
  161. package/types/preview/@ember/runloop/-private/backburner.d.ts +0 -43
  162. package/types/preview/@ember/runloop/-private/types.d.ts +0 -9
  163. package/types/preview/@ember/runloop/index.d.ts +0 -175
  164. package/types/preview/@ember/runloop/types.d.ts +0 -5
  165. package/types/preview/@ember/service/index.d.ts +0 -32
  166. package/types/preview/@ember/template/-private/handlebars.d.ts +0 -7
  167. package/types/preview/@ember/template/index.d.ts +0 -6
  168. package/types/preview/@ember/template-compilation/index.d.ts +0 -28
  169. package/types/preview/@ember/test/adapter.d.ts +0 -22
  170. package/types/preview/@ember/test/index.d.ts +0 -49
  171. package/types/preview/@ember/utils/-private/types.d.ts +0 -39
  172. package/types/preview/@ember/utils/index.d.ts +0 -42
  173. package/types/preview/ember/-private/type-utils.d.ts +0 -57
  174. package/types/preview/ember/index.d.ts +0 -347
  175. package/types/preview/index.d.ts +0 -121
  176. /package/dist/dependencies/{backburner.js → backburner.js.js} +0 -0
@@ -20,6 +20,136 @@ declare module '@ember/-internals/glimmer/lib/component' {
20
20
  /**
21
21
  @module @ember/component
22
22
  */
23
+ interface ComponentMethods {
24
+ /**
25
+ Called when the attributes passed into the component have been updated.
26
+ Called both during the initial render of a container and during a rerender.
27
+ Can be used in place of an observer; code placed here will be executed
28
+ every time any attribute updates.
29
+ @method didReceiveAttrs
30
+ @public
31
+ @since 1.13.0
32
+ */
33
+ didReceiveAttrs(): void;
34
+ /**
35
+ Called when the attributes passed into the component have been updated.
36
+ Called both during the initial render of a container and during a rerender.
37
+ Can be used in place of an observer; code placed here will be executed
38
+ every time any attribute updates.
39
+ @event didReceiveAttrs
40
+ @public
41
+ @since 1.13.0
42
+ */
43
+ /**
44
+ Called after a component has been rendered, both on initial render and
45
+ in subsequent rerenders.
46
+ @method didRender
47
+ @public
48
+ @since 1.13.0
49
+ */
50
+ didRender(): void;
51
+ /**
52
+ Called after a component has been rendered, both on initial render and
53
+ in subsequent rerenders.
54
+ @event didRender
55
+ @public
56
+ @since 1.13.0
57
+ */
58
+ /**
59
+ Called before a component has been rendered, both on initial render and
60
+ in subsequent rerenders.
61
+ @method willRender
62
+ @public
63
+ @since 1.13.0
64
+ */
65
+ willRender(): void;
66
+ /**
67
+ Called before a component has been rendered, both on initial render and
68
+ in subsequent rerenders.
69
+ @event willRender
70
+ @public
71
+ @since 1.13.0
72
+ */
73
+ /**
74
+ Called when the attributes passed into the component have been changed.
75
+ Called only during a rerender, not during an initial render.
76
+ @method didUpdateAttrs
77
+ @public
78
+ @since 1.13.0
79
+ */
80
+ didUpdateAttrs(): void;
81
+ /**
82
+ Called when the attributes passed into the component have been changed.
83
+ Called only during a rerender, not during an initial render.
84
+ @event didUpdateAttrs
85
+ @public
86
+ @since 1.13.0
87
+ */
88
+ /**
89
+ Called when the component is about to update and rerender itself.
90
+ Called only during a rerender, not during an initial render.
91
+ @method willUpdate
92
+ @public
93
+ @since 1.13.0
94
+ */
95
+ willUpdate(): void;
96
+ /**
97
+ Called when the component is about to update and rerender itself.
98
+ Called only during a rerender, not during an initial render.
99
+ @event willUpdate
100
+ @public
101
+ @since 1.13.0
102
+ */
103
+ /**
104
+ Called when the component has updated and rerendered itself.
105
+ Called only during a rerender, not during an initial render.
106
+ @method didUpdate
107
+ @public
108
+ @since 1.13.0
109
+ */
110
+ didUpdate(): void;
111
+ /**
112
+ Called when the component has updated and rerendered itself.
113
+ Called only during a rerender, not during an initial render.
114
+ @event didUpdate
115
+ @public
116
+ @since 1.13.0
117
+ */
118
+ /**
119
+ The HTML `id` of the component's element in the DOM. You can provide this
120
+ value yourself but it must be unique (just as in HTML):
121
+
122
+ ```handlebars
123
+ {{my-component elementId="a-really-cool-id"}}
124
+ ```
125
+
126
+ ```handlebars
127
+ <MyComponent @elementId="a-really-cool-id" />
128
+ ```
129
+ If not manually set a default value will be provided by the framework.
130
+ Once rendered an element's `elementId` is considered immutable and you
131
+ should never change it. If you need to compute a dynamic value for the
132
+ `elementId`, you should do this when the component or element is being
133
+ instantiated:
134
+
135
+ ```javascript
136
+ export default Component.extend({
137
+ init() {
138
+ this._super(...arguments);
139
+
140
+ var index = this.get('index');
141
+ this.set('elementId', `component-id${index}`);
142
+ }
143
+ });
144
+ ```
145
+
146
+ @property elementId
147
+ @type String
148
+ @public
149
+ */
150
+ layoutName?: string;
151
+ }
152
+ const SIGNATURE: unique symbol;
23
153
  /**
24
154
  A component is a reusable UI element that consists of a `.hbs` template and an
25
155
  optional JavaScript class that defines its behavior. For example, someone
@@ -634,136 +764,7 @@ declare module '@ember/-internals/glimmer/lib/component' {
634
764
  @uses Ember.ViewStateSupport
635
765
  @public
636
766
  */
637
- interface ComponentMethods {
638
- /**
639
- Called when the attributes passed into the component have been updated.
640
- Called both during the initial render of a container and during a rerender.
641
- Can be used in place of an observer; code placed here will be executed
642
- every time any attribute updates.
643
- @method didReceiveAttrs
644
- @public
645
- @since 1.13.0
646
- */
647
- didReceiveAttrs(): void;
648
- /**
649
- Called when the attributes passed into the component have been updated.
650
- Called both during the initial render of a container and during a rerender.
651
- Can be used in place of an observer; code placed here will be executed
652
- every time any attribute updates.
653
- @event didReceiveAttrs
654
- @public
655
- @since 1.13.0
656
- */
657
- /**
658
- Called after a component has been rendered, both on initial render and
659
- in subsequent rerenders.
660
- @method didRender
661
- @public
662
- @since 1.13.0
663
- */
664
- didRender(): void;
665
- /**
666
- Called after a component has been rendered, both on initial render and
667
- in subsequent rerenders.
668
- @event didRender
669
- @public
670
- @since 1.13.0
671
- */
672
- /**
673
- Called before a component has been rendered, both on initial render and
674
- in subsequent rerenders.
675
- @method willRender
676
- @public
677
- @since 1.13.0
678
- */
679
- willRender(): void;
680
- /**
681
- Called before a component has been rendered, both on initial render and
682
- in subsequent rerenders.
683
- @event willRender
684
- @public
685
- @since 1.13.0
686
- */
687
- /**
688
- Called when the attributes passed into the component have been changed.
689
- Called only during a rerender, not during an initial render.
690
- @method didUpdateAttrs
691
- @public
692
- @since 1.13.0
693
- */
694
- didUpdateAttrs(): void;
695
- /**
696
- Called when the attributes passed into the component have been changed.
697
- Called only during a rerender, not during an initial render.
698
- @event didUpdateAttrs
699
- @public
700
- @since 1.13.0
701
- */
702
- /**
703
- Called when the component is about to update and rerender itself.
704
- Called only during a rerender, not during an initial render.
705
- @method willUpdate
706
- @public
707
- @since 1.13.0
708
- */
709
- willUpdate(): void;
710
- /**
711
- Called when the component is about to update and rerender itself.
712
- Called only during a rerender, not during an initial render.
713
- @event willUpdate
714
- @public
715
- @since 1.13.0
716
- */
717
- /**
718
- Called when the component has updated and rerendered itself.
719
- Called only during a rerender, not during an initial render.
720
- @method didUpdate
721
- @public
722
- @since 1.13.0
723
- */
724
- didUpdate(): void;
725
- /**
726
- Called when the component has updated and rerendered itself.
727
- Called only during a rerender, not during an initial render.
728
- @event didUpdate
729
- @public
730
- @since 1.13.0
731
- */
732
- /**
733
- The HTML `id` of the component's element in the DOM. You can provide this
734
- value yourself but it must be unique (just as in HTML):
735
-
736
- ```handlebars
737
- {{my-component elementId="a-really-cool-id"}}
738
- ```
739
-
740
- ```handlebars
741
- <MyComponent @elementId="a-really-cool-id" />
742
- ```
743
- If not manually set a default value will be provided by the framework.
744
- Once rendered an element's `elementId` is considered immutable and you
745
- should never change it. If you need to compute a dynamic value for the
746
- `elementId`, you should do this when the component or element is being
747
- instantiated:
748
-
749
- ```javascript
750
- export default Component.extend({
751
- init() {
752
- this._super(...arguments);
753
-
754
- var index = this.get('index');
755
- this.set('elementId', `component-id${index}`);
756
- }
757
- });
758
- ```
759
-
760
- @property elementId
761
- @type String
762
- @public
763
- */
764
- layoutName?: string;
765
- }
766
- interface Component
767
+ interface Component<S = unknown>
767
768
  extends CoreView,
768
769
  ChildViewsSupport,
769
770
  ViewStateSupport,
@@ -773,9 +774,12 @@ declare module '@ember/-internals/glimmer/lib/component' {
773
774
  ViewMixin,
774
775
  ComponentMethods {}
775
776
  const Component_base: Readonly<typeof CoreView> &
776
- (new (owner?: import('@ember/-internals/owner').default | undefined) => CoreView);
777
- class Component extends Component_base implements PropertyDidChange {
777
+ (new (owner?: import('@ember/-internals/owner').default | undefined) => CoreView) &
778
+ import('@ember/object/mixin').default &
779
+ ComponentMethods;
780
+ class Component<S = unknown> extends Component_base implements PropertyDidChange {
778
781
  isComponent: boolean;
782
+ private [SIGNATURE];
779
783
  _superRerender: ViewMixin['rerender'];
780
784
  [IS_DISPATCHING_ATTRS]: boolean;
781
785
  [DIRTY_TAG]: DirtyableTag;
@@ -824,6 +828,126 @@ declare module '@ember/-internals/glimmer/lib/component' {
824
828
  */
825
829
  readDOMAttr(name: string): any;
826
830
  attributeBindings?: string[];
831
+ /**
832
+ Enables components to take a list of parameters as arguments.
833
+ For example, a component that takes two parameters with the names
834
+ `name` and `age`:
835
+
836
+ ```app/components/my-component.js
837
+ import Component from '@ember/component';
838
+
839
+ let MyComponent = Component.extend();
840
+
841
+ MyComponent.reopenClass({
842
+ positionalParams: ['name', 'age']
843
+ });
844
+
845
+ export default MyComponent;
846
+ ```
847
+
848
+ It can then be invoked like this:
849
+
850
+ ```hbs
851
+ {{my-component "John" 38}}
852
+ ```
853
+
854
+ The parameters can be referred to just like named parameters:
855
+
856
+ ```hbs
857
+ Name: {{name}}, Age: {{age}}.
858
+ ```
859
+
860
+ Using a string instead of an array allows for an arbitrary number of
861
+ parameters:
862
+
863
+ ```app/components/my-component.js
864
+ import Component from '@ember/component';
865
+
866
+ let MyComponent = Component.extend();
867
+
868
+ MyComponent.reopenClass({
869
+ positionalParams: 'names'
870
+ });
871
+
872
+ export default MyComponent;
873
+ ```
874
+
875
+ It can then be invoked like this:
876
+
877
+ ```hbs
878
+ {{my-component "John" "Michael" "Scott"}}
879
+ ```
880
+ The parameters can then be referred to by enumerating over the list:
881
+
882
+ ```hbs
883
+ {{#each names as |name|}}{{name}}{{/each}}
884
+ ```
885
+
886
+ @static
887
+ @public
888
+ @property positionalParams
889
+ @since 1.13.0
890
+ */ /**
891
+ Enables components to take a list of parameters as arguments.
892
+ For example, a component that takes two parameters with the names
893
+ `name` and `age`:
894
+
895
+ ```app/components/my-component.js
896
+ import Component from '@ember/component';
897
+
898
+ let MyComponent = Component.extend();
899
+
900
+ MyComponent.reopenClass({
901
+ positionalParams: ['name', 'age']
902
+ });
903
+
904
+ export default MyComponent;
905
+ ```
906
+
907
+ It can then be invoked like this:
908
+
909
+ ```hbs
910
+ {{my-component "John" 38}}
911
+ ```
912
+
913
+ The parameters can be referred to just like named parameters:
914
+
915
+ ```hbs
916
+ Name: {{name}}, Age: {{age}}.
917
+ ```
918
+
919
+ Using a string instead of an array allows for an arbitrary number of
920
+ parameters:
921
+
922
+ ```app/components/my-component.js
923
+ import Component from '@ember/component';
924
+
925
+ let MyComponent = Component.extend();
926
+
927
+ MyComponent.reopenClass({
928
+ positionalParams: 'names'
929
+ });
930
+
931
+ export default MyComponent;
932
+ ```
933
+
934
+ It can then be invoked like this:
935
+
936
+ ```hbs
937
+ {{my-component "John" "Michael" "Scott"}}
938
+ ```
939
+ The parameters can then be referred to by enumerating over the list:
940
+
941
+ ```hbs
942
+ {{#each names as |name|}}{{name}}{{/each}}
943
+ ```
944
+
945
+ @static
946
+ @public
947
+ @property positionalParams
948
+ @since 1.13.0
949
+ */
950
+ static positionalParams: string | string[];
827
951
  /**
828
952
  Layout can be used to wrap content in a component.
829
953
  @property layout
@@ -1,4 +1,7 @@
1
1
  declare module '@ember/-internals/glimmer/lib/components/input' {
2
- const _default: import('@ember/-internals/glimmer/lib/components/internal').OpaqueInternalComponentConstructor;
3
- export default _default;
2
+ import { type Opaque } from '@ember/-internals/utility-types';
3
+ import { type OpaqueInternalComponentConstructor } from '@ember/-internals/glimmer/lib/components/internal';
4
+ const Input: Input;
5
+ interface Input extends Opaque<'component:input'>, OpaqueInternalComponentConstructor {}
6
+ export default Input;
4
7
  }
@@ -1,4 +1,7 @@
1
1
  declare module '@ember/-internals/glimmer/lib/components/link-to' {
2
- const _default: import('@ember/-internals/glimmer/lib/components/internal').OpaqueInternalComponentConstructor;
3
- export default _default;
2
+ import { type OpaqueInternalComponentConstructor } from '@ember/-internals/glimmer/lib/components/internal';
3
+ import { type Opaque } from '@ember/-internals/utility-types';
4
+ const LinkTo: LinkTo;
5
+ interface LinkTo extends Opaque<'component:link-to'>, OpaqueInternalComponentConstructor {}
6
+ export default LinkTo;
4
7
  }
@@ -1,4 +1,10 @@
1
1
  declare module '@ember/-internals/glimmer/lib/components/textarea' {
2
- const _default: import('@ember/-internals/glimmer/lib/components/internal').OpaqueInternalComponentConstructor;
3
- export default _default;
2
+ /**
3
+ @module @ember/component
4
+ */
5
+ import { type Opaque } from '@ember/-internals/utility-types';
6
+ import { type OpaqueInternalComponentConstructor } from '@ember/-internals/glimmer/lib/components/internal';
7
+ const Textarea: Textarea;
8
+ interface Textarea extends Opaque<'component:textarea'>, OpaqueInternalComponentConstructor {}
9
+ export default Textarea;
4
10
  }
@@ -2,57 +2,30 @@ declare module '@ember/-internals/glimmer/lib/helper' {
2
2
  /**
3
3
  @module @ember/component
4
4
  */
5
- import type { InternalFactory } from '@ember/-internals/owner';
6
5
  import { FrameworkObject } from '@ember/object/-internals';
7
- import type { Arguments, Dict, HelperManager } from '@glimmer/interfaces';
6
+ import type { Arguments, HelperManager } from '@glimmer/interfaces';
8
7
  import type { DirtyableTag } from '@glimmer/validator';
9
8
  export const RECOMPUTE_TAG: unique symbol;
10
- export type HelperFunction<T, P extends unknown[], N extends Dict<unknown>> = (
11
- positional: P,
12
- named: N
13
- ) => T;
14
- export type SimpleHelperFactory<
15
- T,
16
- P extends unknown[],
17
- N extends Dict<unknown>
18
- > = InternalFactory<SimpleHelper<T, P, N>, HelperFactory<SimpleHelper<T, P, N>>>;
19
- export type ClassHelperFactory = InternalFactory<HelperInstance, HelperFactory<HelperInstance>>;
9
+ type GetOr<T, K, Else> = K extends keyof T ? T[K] : Else;
10
+ type Args<S> = GetOr<S, 'Args', {}>;
11
+ type DefaultPositional = unknown[];
12
+ type Positional<S> = GetOr<Args<S>, 'Positional', DefaultPositional>;
13
+ type Named<S> = GetOr<Args<S>, 'Named', object>;
14
+ type Return<S> = GetOr<S, 'Return', unknown>;
20
15
  export interface HelperFactory<T> {
21
16
  isHelperFactory: true;
22
17
  create(): T;
23
18
  }
24
- export interface HelperInstance<T = unknown> {
25
- compute(positional: unknown[], named: Dict<unknown>): T;
19
+ export interface HelperInstance<S> {
20
+ compute(positional: Positional<S>, named: Named<S>): Return<S>;
26
21
  destroy(): void;
27
22
  [RECOMPUTE_TAG]: DirtyableTag;
28
23
  }
29
24
  const IS_CLASSIC_HELPER: unique symbol;
30
- export interface SimpleHelper<T, P extends unknown[], N extends Dict<unknown>> {
31
- compute: HelperFunction<T, P, N>;
25
+ export interface SimpleHelper<S> {
26
+ compute: (positional: Positional<S>, named: Named<S>) => Return<S>;
32
27
  }
33
- /**
34
- In many cases it is not necessary to use the full `Helper` class.
35
- The `helper` method create pure-function helpers without instances.
36
- For example:
37
-
38
- ```app/helpers/format-currency.js
39
- import { helper } from '@ember/component/helper';
40
-
41
- export default helper(function([cents], {currency}) {
42
- return `${currency}${cents * 0.01}`;
43
- });
44
- ```
45
-
46
- @static
47
- @param {Function} helper The helper function
48
- @method helper
49
- @for @ember/component/helper
50
- @public
51
- @since 1.13.0
52
- */
53
- export function helper<T, P extends unknown[], N extends Dict<unknown>>(
54
- helperFn: HelperFunction<T, P, N>
55
- ): HelperFactory<SimpleHelper<T, P, N>>;
28
+ const SIGNATURE: unique symbol;
56
29
  /**
57
30
  Ember Helpers are functions that can compute values, and are used in templates.
58
31
  For example, this code calls a helper named `format-currency`:
@@ -98,24 +71,25 @@ declare module '@ember/-internals/glimmer/lib/helper' {
98
71
  @public
99
72
  @since 1.13.0
100
73
  */
101
- interface Helper {
74
+ export default interface Helper<S = unknown> {
102
75
  /**
103
76
  Override this function when writing a class-based helper.
104
77
 
105
78
  @method compute
106
- @param {Array} params The positional arguments to the helper
107
- @param {Object} hash The named arguments to the helper
79
+ @param {Array} positional The positional arguments to the helper
80
+ @param {Object} named The named arguments to the helper
108
81
  @public
109
82
  @since 1.13.0
110
83
  */
111
- compute(params: unknown[], hash: Dict<unknown>): unknown;
84
+ compute(positional: Positional<S>, named: Named<S>): Return<S>;
112
85
  }
113
- class Helper extends FrameworkObject {
86
+ export default class Helper<S = unknown> extends FrameworkObject {
114
87
  static isHelperFactory: boolean;
115
88
  static [IS_CLASSIC_HELPER]: boolean;
116
89
  /** @deprecated */
117
90
  static helper: typeof helper;
118
91
  [RECOMPUTE_TAG]: DirtyableTag;
92
+ private [SIGNATURE];
119
93
  init(properties: object | undefined): void;
120
94
  /**
121
95
  On a class-based helper, it may be useful to force a recomputation of that
@@ -152,18 +126,11 @@ declare module '@ember/-internals/glimmer/lib/helper' {
152
126
  export const CLASSIC_HELPER_MANAGER:
153
127
  | import('@glimmer/interfaces').Helper<object>
154
128
  | import('@glimmer/manager').CustomHelperManager<object>;
155
- class Wrapper<
156
- T = unknown,
157
- P extends unknown[] = unknown[],
158
- N extends Dict<unknown> = Dict<unknown>
159
- > implements HelperFactory<SimpleHelper<T, P, N>>
160
- {
161
- compute: HelperFunction<T, P, N>;
129
+ class Wrapper<S = unknown> implements HelperFactory<SimpleHelper<S>> {
130
+ compute: (positional: Positional<S>, named: Named<S>) => Return<S>;
162
131
  readonly isHelperFactory = true;
163
- constructor(compute: HelperFunction<T, P, N>);
164
- create(): {
165
- compute: HelperFunction<T, P, N>;
166
- };
132
+ constructor(compute: (positional: Positional<S>, named: Named<S>) => Return<S>);
133
+ create(): SimpleHelper<S>;
167
134
  }
168
135
  class SimpleClassicHelperManager implements HelperManager<() => unknown> {
169
136
  capabilities: import('@glimmer/interfaces').HelperCapabilities;
@@ -172,5 +139,48 @@ declare module '@ember/-internals/glimmer/lib/helper' {
172
139
  getDebugName(definition: Wrapper): string;
173
140
  }
174
141
  export const SIMPLE_CLASSIC_HELPER_MANAGER: SimpleClassicHelperManager;
175
- export default Helper;
142
+ /**
143
+ * The type of a function-based helper.
144
+ *
145
+ * @note This is *not* user-constructible: it is exported only so that the type
146
+ * returned by the `helper` function can be named (and indeed can be exported
147
+ * like `export default helper(...)` safely).
148
+ */
149
+ export type FunctionBasedHelper<S> = abstract new () => FunctionBasedHelperInstance<S>;
150
+ export abstract class FunctionBasedHelperInstance<S> extends Helper<S> {
151
+ protected abstract __concrete__: never;
152
+ }
153
+ /**
154
+ In many cases it is not necessary to use the full `Helper` class.
155
+ The `helper` method create pure-function helpers without instances.
156
+ For example:
157
+
158
+ ```app/helpers/format-currency.js
159
+ import { helper } from '@ember/component/helper';
160
+
161
+ export default helper(function([cents], {currency}) {
162
+ return `${currency}${cents * 0.01}`;
163
+ });
164
+ ```
165
+
166
+ @static
167
+ @param {Function} helper The helper function
168
+ @method helper
169
+ @for @ember/component/helper
170
+ @public
171
+ @since 1.13.0
172
+ */
173
+ export function helper<P extends DefaultPositional, N extends object, R = unknown>(
174
+ helperFn: (positional: P, named: N) => R
175
+ ): FunctionBasedHelper<{
176
+ Args: {
177
+ Positional: P;
178
+ Named: N;
179
+ };
180
+ Return: R;
181
+ }>;
182
+ export function helper<S>(
183
+ helperFn: (positional: Positional<S>, named: Named<S>) => Return<S>
184
+ ): FunctionBasedHelper<S>;
185
+ export {};
176
186
  }
@@ -0,0 +1,5 @@
1
+ declare module '@ember/-internals/glimmer/lib/templates/empty' {
2
+ import type { TemplateFactory } from '@glimmer/interfaces';
3
+ const TEMPLATE: TemplateFactory;
4
+ export default TEMPLATE;
5
+ }
@@ -0,0 +1,5 @@
1
+ declare module '@ember/-internals/glimmer/lib/templates/input' {
2
+ import type { TemplateFactory } from '@glimmer/interfaces';
3
+ const TEMPLATE: TemplateFactory;
4
+ export default TEMPLATE;
5
+ }
@@ -0,0 +1,5 @@
1
+ declare module '@ember/-internals/glimmer/lib/templates/link-to' {
2
+ import type { TemplateFactory } from '@glimmer/interfaces';
3
+ const TEMPLATE: TemplateFactory;
4
+ export default TEMPLATE;
5
+ }
@@ -0,0 +1,5 @@
1
+ declare module '@ember/-internals/glimmer/lib/templates/outlet' {
2
+ import type { TemplateFactory } from '@glimmer/interfaces';
3
+ const TEMPLATE: TemplateFactory;
4
+ export default TEMPLATE;
5
+ }
@@ -0,0 +1,5 @@
1
+ declare module '@ember/-internals/glimmer/lib/templates/root' {
2
+ import type { TemplateFactory } from '@glimmer/interfaces';
3
+ const TEMPLATE: TemplateFactory;
4
+ export default TEMPLATE;
5
+ }
@@ -0,0 +1,5 @@
1
+ declare module '@ember/-internals/glimmer/lib/templates/textarea' {
2
+ import type { TemplateFactory } from '@glimmer/interfaces';
3
+ const TEMPLATE: TemplateFactory;
4
+ export default TEMPLATE;
5
+ }
@@ -331,7 +331,8 @@ declare module '@ember/-internals/metal/lib/computed' {
331
331
  @chainable
332
332
  @public
333
333
  */
334
- meta(this: ExtendedMethodDecorator, meta?: unknown): unknown;
334
+ meta(): unknown;
335
+ meta(meta: unknown): ComputedDecorator;
335
336
  /** @internal */
336
337
  get _getter(): ComputedPropertyGetterFunction | undefined;
337
338
  /** @internal */
@@ -1,3 +1,4 @@
1
1
  declare module '@ember/-internals/metal/lib/computed_cache' {
2
+ export function getCachedValueFor<T, K extends keyof T>(obj: T, key: K): T[K] | undefined;
2
3
  export function getCachedValueFor(obj: object, key: string): unknown;
3
4
  }