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
package/types/publish.mjs CHANGED
@@ -21,7 +21,9 @@
21
21
  eventually be the list of *all* modules, but this allows us to publish
22
22
  iteratively as we gain confidence in the stability of the types.
23
23
 
24
- This is *not* an optimal long-term publishing strategy. We would prefer to
24
+ This is *not* an optimal long-term publishing strategy. (To the contrary: it
25
+ is an underspecified and _ad hoc_ implementation of a module resolver, and is
26
+ likely to fall over if you so much as breathe on it.) We would prefer to
25
27
  generate per-package roll-ups, using a Rollup plugin or some such, but we are
26
28
  currently blocked on a number of internal circular dependencies as well as the
27
29
  difficulty of avoiding multiple definitions of the same types reused across
@@ -32,321 +34,18 @@
32
34
 
33
35
  import glob from 'glob';
34
36
  import { spawnSync } from 'node:child_process';
35
- import fs from 'node:fs';
37
+ import fs from 'node:fs/promises';
36
38
  import path from 'node:path';
37
39
  import * as parser from 'recast/parsers/babel-ts.js';
38
40
  import {
39
41
  isClassDeclaration,
40
42
  isStringLiteral,
41
43
  isVariableDeclaration,
42
- isTSDeclareFunction,
43
44
  isTSEnumDeclaration,
44
45
  } from '@babel/types';
45
46
  import { builders as b, visit } from 'ast-types';
46
47
  import { parse, print } from 'recast';
47
48
 
48
- /**
49
- Modules we know we are not ready to expose yet, mostly because they do not
50
- have enough annotations on their internals to make the generated types clear
51
- about what is public and what is private.
52
-
53
- Notably, the modules will still be published, but they won't be visible to
54
- consumers because the only way they *become* visible is by being included in
55
- the set of type-only side effect imports, which excludes exactly these
56
- modules.
57
- */
58
- const PREVIEW_MODULES = [
59
- '@ember/-internals/bootstrap/index.d.ts',
60
- '@ember/-internals/browser-environment/index.d.ts',
61
- '@ember/-internals/browser-environment/lib/has-dom.d.ts',
62
- '@ember/-internals/container/index.d.ts',
63
- '@ember/-internals/container/lib/container.d.ts',
64
- '@ember/-internals/container/lib/registry.d.ts',
65
- '@ember/-internals/environment/index.d.ts',
66
- '@ember/-internals/environment/lib/context.d.ts',
67
- '@ember/-internals/environment/lib/env.d.ts',
68
- '@ember/-internals/environment/lib/global.d.ts',
69
- '@ember/-internals/error-handling/index.d.ts',
70
- '@ember/-internals/glimmer/index.d.ts',
71
- '@ember/-internals/glimmer/lib/component-managers/curly.d.ts',
72
- '@ember/-internals/glimmer/lib/component-managers/mount.d.ts',
73
- '@ember/-internals/glimmer/lib/component-managers/outlet.d.ts',
74
- '@ember/-internals/glimmer/lib/component-managers/root.d.ts',
75
- '@ember/-internals/glimmer/lib/component.d.ts',
76
- '@ember/-internals/glimmer/lib/components/abstract-input.d.ts',
77
- '@ember/-internals/glimmer/lib/components/input.d.ts',
78
- '@ember/-internals/glimmer/lib/components/internal.d.ts',
79
- '@ember/-internals/glimmer/lib/components/link-to.d.ts',
80
- '@ember/-internals/glimmer/lib/components/textarea.d.ts',
81
- '@ember/-internals/glimmer/lib/dom.d.ts',
82
- '@ember/-internals/glimmer/lib/environment.d.ts',
83
- '@ember/-internals/glimmer/lib/glimmer-component-docs.d.ts',
84
- '@ember/-internals/glimmer/lib/glimmer-tracking-docs.d.ts',
85
- '@ember/-internals/glimmer/lib/helper.d.ts',
86
- '@ember/-internals/glimmer/lib/helpers/-disallow-dynamic-resolution.d.ts',
87
- '@ember/-internals/glimmer/lib/helpers/-in-element-null-check.d.ts',
88
- '@ember/-internals/glimmer/lib/helpers/-normalize-class.d.ts',
89
- '@ember/-internals/glimmer/lib/helpers/-resolve.d.ts',
90
- '@ember/-internals/glimmer/lib/helpers/-track-array.d.ts',
91
- '@ember/-internals/glimmer/lib/helpers/action.d.ts',
92
- '@ember/-internals/glimmer/lib/helpers/array.d.ts',
93
- '@ember/-internals/glimmer/lib/helpers/component.d.ts',
94
- '@ember/-internals/glimmer/lib/helpers/concat.d.ts',
95
- '@ember/-internals/glimmer/lib/helpers/each-in.d.ts',
96
- '@ember/-internals/glimmer/lib/helpers/fn.d.ts',
97
- '@ember/-internals/glimmer/lib/helpers/get.d.ts',
98
- '@ember/-internals/glimmer/lib/helpers/hash.d.ts',
99
- '@ember/-internals/glimmer/lib/helpers/helper.d.ts',
100
- '@ember/-internals/glimmer/lib/helpers/if-unless.d.ts',
101
- '@ember/-internals/glimmer/lib/helpers/internal-helper.d.ts',
102
- '@ember/-internals/glimmer/lib/helpers/log.d.ts',
103
- '@ember/-internals/glimmer/lib/helpers/modifier.d.ts',
104
- '@ember/-internals/glimmer/lib/helpers/mut.d.ts',
105
- '@ember/-internals/glimmer/lib/helpers/page-title.d.ts',
106
- '@ember/-internals/glimmer/lib/helpers/readonly.d.ts',
107
- '@ember/-internals/glimmer/lib/helpers/unbound.d.ts',
108
- '@ember/-internals/glimmer/lib/helpers/unique-id.d.ts',
109
- '@ember/-internals/glimmer/lib/modifiers/action.d.ts',
110
- '@ember/-internals/glimmer/lib/modifiers/internal.d.ts',
111
- '@ember/-internals/glimmer/lib/modifiers/on.d.ts',
112
- '@ember/-internals/glimmer/lib/renderer.d.ts',
113
- '@ember/-internals/glimmer/lib/resolver.d.ts',
114
- '@ember/-internals/glimmer/lib/setup-registry.d.ts',
115
- '@ember/-internals/glimmer/lib/syntax/in-element.d.ts',
116
- '@ember/-internals/glimmer/lib/syntax/let.d.ts',
117
- '@ember/-internals/glimmer/lib/syntax/mount.d.ts',
118
- '@ember/-internals/glimmer/lib/syntax/outlet.d.ts',
119
- '@ember/-internals/glimmer/lib/syntax/utils.d.ts',
120
- '@ember/-internals/glimmer/lib/template_registry.d.ts',
121
- '@ember/-internals/glimmer/lib/template.d.ts',
122
- '@ember/-internals/glimmer/lib/utils/bindings.d.ts',
123
- '@ember/-internals/glimmer/lib/utils/curly-component-state-bucket.d.ts',
124
- '@ember/-internals/glimmer/lib/utils/debug-render-message.d.ts',
125
- '@ember/-internals/glimmer/lib/utils/iterator.d.ts',
126
- '@ember/-internals/glimmer/lib/utils/managers.d.ts',
127
- '@ember/-internals/glimmer/lib/utils/outlet.d.ts',
128
- '@ember/-internals/glimmer/lib/utils/process-args.d.ts',
129
- '@ember/-internals/glimmer/lib/utils/serialization-first-node-helpers.d.ts',
130
- '@ember/-internals/glimmer/lib/utils/string.d.ts',
131
- '@ember/-internals/glimmer/lib/utils/to-bool.d.ts',
132
- '@ember/-internals/glimmer/lib/views/outlet.d.ts',
133
- '@ember/-internals/meta/index.d.ts',
134
- '@ember/-internals/meta/lib/meta.d.ts',
135
- '@ember/-internals/metal/index.d.ts',
136
- '@ember/-internals/metal/lib/alias.d.ts',
137
- '@ember/-internals/metal/lib/array_events.d.ts',
138
- '@ember/-internals/metal/lib/array.d.ts',
139
- '@ember/-internals/metal/lib/cache.d.ts',
140
- '@ember/-internals/metal/lib/cached.d.ts',
141
- '@ember/-internals/metal/lib/chain-tags.d.ts',
142
- '@ember/-internals/metal/lib/change_event.d.ts',
143
- '@ember/-internals/metal/lib/computed_cache.d.ts',
144
- '@ember/-internals/metal/lib/computed.d.ts',
145
- '@ember/-internals/metal/lib/decorator.d.ts',
146
- '@ember/-internals/metal/lib/dependent_keys.d.ts',
147
- '@ember/-internals/metal/lib/deprecate_property.d.ts',
148
- '@ember/-internals/metal/lib/each_proxy_events.d.ts',
149
- '@ember/-internals/metal/lib/events.d.ts',
150
- '@ember/-internals/metal/lib/expand_properties.d.ts',
151
- '@ember/-internals/metal/lib/get_properties.d.ts',
152
- '@ember/-internals/metal/lib/injected_property.d.ts',
153
- '@ember/-internals/metal/lib/libraries.d.ts',
154
- '@ember/-internals/metal/lib/namespace_search.d.ts',
155
- '@ember/-internals/metal/lib/observer.d.ts',
156
- '@ember/-internals/metal/lib/path_cache.d.ts',
157
- '@ember/-internals/metal/lib/properties.d.ts',
158
- '@ember/-internals/metal/lib/property_events.d.ts',
159
- '@ember/-internals/metal/lib/property_get.d.ts',
160
- '@ember/-internals/metal/lib/property_set.d.ts',
161
- '@ember/-internals/metal/lib/set_properties.d.ts',
162
- '@ember/-internals/metal/lib/tags.d.ts',
163
- '@ember/-internals/metal/lib/tracked.d.ts',
164
- '@ember/-internals/overrides/index.d.ts',
165
- '@ember/-internals/routing/index.d.ts',
166
- '@ember/-internals/runtime/index.d.ts',
167
- '@ember/-internals/runtime/lib/ext/rsvp.d.ts',
168
- '@ember/-internals/runtime/lib/mixins/-proxy.d.ts',
169
- '@ember/-internals/runtime/lib/mixins/action_handler.d.ts',
170
- '@ember/-internals/runtime/lib/mixins/comparable.d.ts',
171
- '@ember/-internals/runtime/lib/mixins/container_proxy.d.ts',
172
- '@ember/-internals/runtime/lib/mixins/registry_proxy.d.ts',
173
- '@ember/-internals/runtime/lib/mixins/target_action_support.d.ts',
174
- '@ember/-internals/utils/index.d.ts',
175
- '@ember/-internals/utils/lib/cache.d.ts',
176
- '@ember/-internals/utils/lib/dictionary.d.ts',
177
- '@ember/-internals/utils/lib/get-debug-name.d.ts',
178
- '@ember/-internals/utils/lib/guid.d.ts',
179
- '@ember/-internals/utils/lib/intern.d.ts',
180
- '@ember/-internals/utils/lib/invoke.d.ts',
181
- '@ember/-internals/utils/lib/is_proxy.d.ts',
182
- '@ember/-internals/utils/lib/lookup-descriptor.d.ts',
183
- '@ember/-internals/utils/lib/mandatory-setter.d.ts',
184
- '@ember/-internals/utils/lib/name.d.ts',
185
- '@ember/-internals/utils/lib/spec.d.ts',
186
- '@ember/-internals/utils/lib/super.d.ts',
187
- '@ember/-internals/utils/lib/symbol.d.ts',
188
- '@ember/-internals/utils/lib/to-string.d.ts',
189
- '@ember/-internals/utility-types.d.ts',
190
- '@ember/-internals/views/index.d.ts',
191
- '@ember/-internals/views/lib/compat/attrs.d.ts',
192
- '@ember/-internals/views/lib/compat/fallback-view-registry.d.ts',
193
- '@ember/-internals/views/lib/component_lookup.d.ts',
194
- '@ember/-internals/views/lib/mixins/action_support.d.ts',
195
- '@ember/-internals/views/lib/mixins/child_views_support.d.ts',
196
- '@ember/-internals/views/lib/mixins/class_names_support.d.ts',
197
- '@ember/-internals/views/lib/mixins/view_state_support.d.ts',
198
- '@ember/-internals/views/lib/mixins/view_support.d.ts',
199
- '@ember/-internals/views/lib/system/action_manager.d.ts',
200
- '@ember/-internals/views/lib/system/event_dispatcher.d.ts',
201
- '@ember/-internals/views/lib/system/utils.d.ts',
202
- '@ember/-internals/views/lib/views/core_view.d.ts',
203
- '@ember/-internals/views/lib/views/states.d.ts',
204
- '@ember/-internals/views/lib/views/states/default.d.ts',
205
- '@ember/-internals/views/lib/views/states/destroying.d.ts',
206
- '@ember/-internals/views/lib/views/states/has_element.d.ts',
207
- '@ember/-internals/views/lib/views/states/in_dom.d.ts',
208
- '@ember/-internals/views/lib/views/states/pre_render.d.ts',
209
- '@ember/application/index.d.ts',
210
- '@ember/application/instance.d.ts',
211
- '@ember/application/lib/lazy_load.d.ts',
212
- '@ember/application/namespace.d.ts',
213
- '@ember/array/index.d.ts',
214
- '@ember/array/mutable.d.ts',
215
- '@ember/array/proxy.d.ts',
216
- '@ember/array/-internals.d.ts',
217
- '@ember/array/lib/make-array.d.ts',
218
- '@ember/canary-features/index.d.ts',
219
- '@ember/component/helper.d.ts',
220
- '@ember/component/index.d.ts',
221
- '@ember/component/template-only.d.ts',
222
- '@ember/controller/index.d.ts',
223
- '@ember/debug/container-debug-adapter.d.ts',
224
- '@ember/debug/data-adapter.d.ts',
225
- '@ember/debug/index.d.ts',
226
- '@ember/debug/lib/capture-render-tree.d.ts',
227
- '@ember/debug/lib/deprecate.d.ts',
228
- '@ember/debug/lib/handlers.d.ts',
229
- '@ember/debug/lib/inspect.d.ts',
230
- '@ember/debug/lib/testing.d.ts',
231
- '@ember/debug/lib/warn.d.ts',
232
- '@ember/deprecated-features/index.d.ts',
233
- '@ember/destroyable/index.d.ts',
234
- '@ember/engine/index.d.ts',
235
- '@ember/engine/instance.d.ts',
236
- '@ember/engine/lib/engine-parent.d.ts',
237
- '@ember/enumerable/index.d.ts',
238
- '@ember/enumerable/mutable.d.ts',
239
- '@ember/helper/index.d.ts',
240
- '@ember/instrumentation/index.d.ts',
241
- '@ember/modifier/index.d.ts',
242
- '@ember/object/-internals.d.ts',
243
- '@ember/object/compat.d.ts',
244
- '@ember/object/computed.d.ts',
245
- '@ember/object/core.d.ts',
246
- '@ember/object/evented.d.ts',
247
- '@ember/object/events.d.ts',
248
- '@ember/object/index.d.ts',
249
- '@ember/object/internals.d.ts',
250
- '@ember/object/lib/computed/computed_macros.d.ts',
251
- '@ember/object/lib/computed/reduce_computed_macros.d.ts',
252
- '@ember/object/mixin.d.ts',
253
- '@ember/object/observable.d.ts',
254
- '@ember/object/observers.d.ts',
255
- '@ember/object/promise-proxy-mixin.d.ts',
256
- '@ember/object/proxy.d.ts',
257
- '@ember/renderer/index.d.ts',
258
- '@ember/routing/-internals.d.ts',
259
- '@ember/routing/auto-location.d.ts',
260
- '@ember/routing/hash-location.d.ts',
261
- '@ember/routing/history-location.d.ts',
262
- '@ember/routing/index.d.ts',
263
- '@ember/routing/lib/cache.d.ts',
264
- '@ember/routing/lib/controller_for.d.ts',
265
- '@ember/routing/lib/dsl.d.ts',
266
- '@ember/routing/lib/engines.d.ts',
267
- '@ember/routing/lib/generate_controller.d.ts',
268
- '@ember/routing/lib/location-utils.d.ts',
269
- '@ember/routing/lib/query_params.d.ts',
270
- '@ember/routing/lib/route-info.d.ts',
271
- '@ember/routing/lib/router_state.d.ts',
272
- '@ember/routing/lib/routing-service.d.ts',
273
- '@ember/routing/lib/transition.d.ts',
274
- '@ember/routing/lib/utils.d.ts',
275
- '@ember/routing/location.d.ts',
276
- '@ember/routing/none-location.d.ts',
277
- '@ember/routing/route-info.d.ts',
278
- '@ember/routing/route.d.ts',
279
- '@ember/routing/router-service.d.ts',
280
- '@ember/routing/router.d.ts',
281
- '@ember/routing/transition.d.ts',
282
- '@ember/runloop/index.d.ts',
283
- '@ember/service/index.d.ts',
284
- '@ember/string/index.d.ts',
285
- '@ember/string/lib/string_registry.d.ts',
286
- '@ember/template-compilation/index.d.ts',
287
- '@ember/template-factory/index.d.ts',
288
- '@ember/template/index.d.ts',
289
- '@ember/test/adapter.d.ts',
290
- '@ember/test/index.d.ts',
291
- '@ember/utils/index.d.ts',
292
- '@ember/utils/lib/compare.d.ts',
293
- '@ember/utils/lib/is_blank.d.ts',
294
- '@ember/utils/lib/is_empty.d.ts',
295
- '@ember/utils/lib/is_none.d.ts',
296
- '@ember/utils/lib/is_present.d.ts',
297
- '@ember/utils/lib/is-equal.d.ts',
298
- '@ember/utils/lib/type-of.d.ts',
299
- '@ember/version/index.d.ts',
300
- '@glimmer/tracking/index.d.ts',
301
- '@glimmer/tracking/primitives/cache.d.ts',
302
- 'ember-template-compiler/index.d.ts',
303
- 'ember-template-compiler/lib/plugins/assert-against-attrs.d.ts',
304
- 'ember-template-compiler/lib/plugins/assert-against-named-outlets.d.ts',
305
- 'ember-template-compiler/lib/plugins/assert-input-helper-without-block.d.ts',
306
- 'ember-template-compiler/lib/plugins/assert-reserved-named-arguments.d.ts',
307
- 'ember-template-compiler/lib/plugins/assert-splattribute-expression.d.ts',
308
- 'ember-template-compiler/lib/plugins/index.d.ts',
309
- 'ember-template-compiler/lib/plugins/transform-action-syntax.d.ts',
310
- 'ember-template-compiler/lib/plugins/transform-each-in-into-each.d.ts',
311
- 'ember-template-compiler/lib/plugins/transform-each-track-array.d.ts',
312
- 'ember-template-compiler/lib/plugins/transform-in-element.d.ts',
313
- 'ember-template-compiler/lib/plugins/transform-quoted-bindings-into-just-bindings.d.ts',
314
- 'ember-template-compiler/lib/plugins/transform-resolutions.d.ts',
315
- 'ember-template-compiler/lib/plugins/transform-wrap-mount-and-outlet.d.ts',
316
- 'ember-template-compiler/lib/plugins/utils.d.ts',
317
- 'ember-template-compiler/lib/system/bootstrap.d.ts',
318
- 'ember-template-compiler/lib/system/calculate-location-display.d.ts',
319
- 'ember-template-compiler/lib/system/compile-options.d.ts',
320
- 'ember-template-compiler/lib/system/compile.d.ts',
321
- 'ember-template-compiler/lib/system/dasherize-component-name.d.ts',
322
- 'ember-template-compiler/lib/system/initializer.d.ts',
323
- 'ember-template-compiler/lib/system/precompile.d.ts',
324
- 'ember-testing/index.d.ts',
325
- 'ember-testing/lib/adapters/adapter.d.ts',
326
- 'ember-testing/lib/adapters/qunit.d.ts',
327
- 'ember-testing/lib/ext/application.d.ts',
328
- 'ember-testing/lib/ext/rsvp.d.ts',
329
- 'ember-testing/lib/helpers.d.ts',
330
- 'ember-testing/lib/helpers/and_then.d.ts',
331
- 'ember-testing/lib/helpers/current_path.d.ts',
332
- 'ember-testing/lib/helpers/current_route_name.d.ts',
333
- 'ember-testing/lib/helpers/current_url.d.ts',
334
- 'ember-testing/lib/helpers/pause_test.d.ts',
335
- 'ember-testing/lib/helpers/visit.d.ts',
336
- 'ember-testing/lib/helpers/wait.d.ts',
337
- 'ember-testing/lib/initializers.d.ts',
338
- 'ember-testing/lib/setup_for_testing.d.ts',
339
- 'ember-testing/lib/test.d.ts',
340
- 'ember-testing/lib/test/adapter.d.ts',
341
- 'ember-testing/lib/test/helpers.d.ts',
342
- 'ember-testing/lib/test/on_inject_helpers.d.ts',
343
- 'ember-testing/lib/test/pending_requests.d.ts',
344
- 'ember-testing/lib/test/promise.d.ts',
345
- 'ember-testing/lib/test/run.d.ts',
346
- 'ember-testing/lib/test/waiters.d.ts',
347
- 'ember/index.d.ts',
348
- ];
349
-
350
49
  const MODULES_PLACEHOLDER = '~~~MODULES GO HERE~~~';
351
50
 
352
51
  const BASE_INDEX_D_TS = `\
@@ -399,53 +98,59 @@ ${MODULES_PLACEHOLDER}
399
98
 
400
99
  const TYPES_DIR = path.join('types', 'stable');
401
100
 
101
+ // These modules need to be copied over *and* post-processed: they need to be
102
+ // locally-importable as regular modules, but `tsc` will not move them over
103
+ // itself, but unlike some modules which need to be left unchanged (e.g. the
104
+ // `*-ext.d.ts` modules) these still need the module wrapper added.
105
+ const HAND_COPIED_BUT_NEEDS_POSTPROCESSING = [
106
+ 'ember/version.d.ts',
107
+ '@ember/-internals/glimmer/lib/templates/empty.d.ts',
108
+ '@ember/-internals/glimmer/lib/templates/input.d.ts',
109
+ '@ember/-internals/glimmer/lib/templates/link-to.d.ts',
110
+ '@ember/-internals/glimmer/lib/templates/outlet.d.ts',
111
+ '@ember/-internals/glimmer/lib/templates/root.d.ts',
112
+ '@ember/-internals/glimmer/lib/templates/textarea.d.ts',
113
+ ];
114
+
402
115
  async function main() {
403
- fs.rmSync(TYPES_DIR, { recursive: true, force: true });
404
- fs.mkdirSync(TYPES_DIR, { recursive: true });
116
+ await fs.rm(TYPES_DIR, { recursive: true, force: true });
117
+ await fs.mkdir(TYPES_DIR, { recursive: true });
118
+
119
+ doOrDie(() => spawnSync('yarn', ['tsc', '--project', 'tsconfig/publish-types.json']));
120
+
121
+ let remappedLocationExcludes = await doOrDie(copyHandwrittenDefinitions);
122
+ let sideEffectExcludes = await doOrDie(copyRemappedLocationModules);
405
123
 
406
- spawnSync('yarn', ['tsc', '--project', 'tsconfig/publish-types.json']);
124
+ // The majority of those items should be excluded entirely, but in some cases
125
+ // we still need to post-process them.
126
+ let excludes = remappedLocationExcludes
127
+ .concat(sideEffectExcludes)
128
+ .filter((excluded) => !HAND_COPIED_BUT_NEEDS_POSTPROCESSING.includes(excluded));
407
129
 
408
130
  // This is rooted in the `TYPES_DIR` so that the result is just the names of
409
- // the modules, as generated directly from the tsconfig above.
410
- let moduleNames = glob.sync('**/*.d.ts', {
131
+ // the modules, as generated directly from the tsconfig above. These must
132
+ // *all* appear in the final set of `/// <reference ...>`s we emit.
133
+ let allModules = glob.sync('**/*.d.ts', {
411
134
  ignore: 'index.d.ts', // ignore the root file itself if it somehow exists
412
135
  cwd: TYPES_DIR,
413
136
  });
414
137
 
415
- let status = 'success';
416
- for (let moduleName of moduleNames) {
417
- let result = processModule(moduleName);
418
- if (result !== 'success') {
419
- status = result;
420
- }
421
- }
138
+ let missing = excludes.filter((excluded) => !allModules.includes(excluded));
139
+ if (missing.length) console.error('Did not capture modules:', ...missing);
422
140
 
423
- let sideEffectModules = moduleNames
424
- .filter((moduleName) => !PREVIEW_MODULES.includes(moduleName))
425
- .map((moduleName) => {
426
- // We need to import "package root" types as such, *not* via the actual
427
- // module which provides them, or TS does not see them correctly via the
428
- // side effect imports, so transform them accordingly:
429
- //
430
- // `@ember/owner/index.d.ts` -> `@ember/owner`
431
- //
432
- // We also need to replace `.d.ts` entirely:
433
- //
434
- // `@ember/utils/lib/compare.d.ts` -> `@ember/utils/lib/compare`
435
- //
436
- // Otherwise, the modules won't be resolved correctly via the side-effect
437
- // imports.
438
- let moduleOrPackagePath = moduleName.replace(/\/index.d.ts$/, '').replace('.d.ts', '');
439
-
440
- // Then create a relative path *to* the path on disk so that the
441
- // side-effect import is e.g. `import './@ember/owner';`, which makes it
442
- // resolve the actual local file, *not* go looking for some other package.
443
- return `import './${moduleOrPackagePath}';`;
444
- })
141
+ // However, we only want to process (i.e. rewrite) a subset of the modules.
142
+ let modulesToProcess = allModules.filter((moduleName) => !excludes.includes(moduleName));
143
+ let status = await doOrDie(async () => {
144
+ let values = await Promise.all(modulesToProcess.map(processModule));
145
+ return values.some((value) => value === 'failure') ? 'failure' : 'success';
146
+ });
147
+
148
+ let moduleReferences = allModules
149
+ .map((moduleName) => `/// <reference path="./${moduleName}" />`)
445
150
  .join('\n');
446
151
 
447
- let stableIndexDTsContents = BASE_INDEX_D_TS.replace(MODULES_PLACEHOLDER, sideEffectModules);
448
- fs.writeFileSync(path.join(TYPES_DIR, 'index.d.ts'), stableIndexDTsContents);
152
+ let stableIndexDTsContents = BASE_INDEX_D_TS.replace(MODULES_PLACEHOLDER, moduleReferences);
153
+ await fs.writeFile(path.join(TYPES_DIR, 'index.d.ts'), stableIndexDTsContents);
449
154
 
450
155
  // Make the generated types easier to read!
451
156
  spawnSync('prettier', ['--write', 'types/stable/**/*.ts']);
@@ -453,19 +158,81 @@ async function main() {
453
158
  process.exit(status === 'success' ? 0 : 1);
454
159
  }
455
160
 
161
+ const REMAPPED_LOCATION_MODULES = [
162
+ {
163
+ input: 'packages/loader/lib/index.d.ts',
164
+ output: 'require.d.ts',
165
+ },
166
+ ];
167
+
168
+ /**
169
+ "Emit" hand-authored `.d.ts` modules for modules which need to live in a
170
+ different location in the output than in the input tree, e.g. for the loader,
171
+ which creates runtime modules at a different location than its source location
172
+ naturally corresponds to. These represent modules which need to be copied over
173
+ and then *left exactly as they are*.
174
+
175
+ @returns {Promise<string[]>} an array of module names to exclude from the rest of the
176
+ post-processing steps
177
+ */
178
+ function copyRemappedLocationModules() {
179
+ return doOrDie(() => {
180
+ return Promise.all(
181
+ REMAPPED_LOCATION_MODULES.map(async ({ input, output }) => {
182
+ await fs.cp(input, path.join(TYPES_DIR, output), { recursive: true });
183
+ return output;
184
+ })
185
+ );
186
+ });
187
+ }
188
+
189
+ /**
190
+ "Emit" hand-authored `.d.ts` file representing runtime JS modules which are
191
+ generated by the build system, like the `.d.ts` files for templates. Since
192
+ `tsc` ignores loose `.d.ts` files in the source of a project, these must
193
+ simply be copied over manually.
194
+
195
+ Exclude from this list any items we also copy via `copySideEffectModules`() so
196
+ we do not end up with duplicates (while that *should* still work given our
197
+ current design for publishing, it is a "happens to" rather than "is naturally
198
+ correct", so we want to avoid that).
199
+
200
+ @returns {Promise<Array<string>>} The modules copied over by hand.
201
+ */
202
+ async function copyHandwrittenDefinitions() {
203
+ let inputDir = 'packages';
204
+ let definitionModules = glob
205
+ .sync('**/*.d.ts', {
206
+ cwd: inputDir,
207
+ })
208
+ .filter((moduleName) => !REMAPPED_LOCATION_MODULES.some(({ input }) => input === moduleName));
209
+
210
+ await doOrDie(() =>
211
+ Promise.all(
212
+ definitionModules.map((moduleName) => {
213
+ let input = path.join(inputDir, moduleName);
214
+ let output = path.join(TYPES_DIR, moduleName);
215
+ return fs.cp(input, output, { recursive: true });
216
+ })
217
+ )
218
+ );
219
+
220
+ return definitionModules;
221
+ }
222
+
456
223
  /**
457
224
  Load the module, rewrite it, and write it back to disk.
458
225
 
459
226
  @param {string} moduleName
460
- @return {'success' | 'failure'}
227
+ @return {Promise<'success' | 'failure'>}
461
228
  */
462
- function processModule(moduleName) {
229
+ async function processModule(moduleName) {
463
230
  let modulePath = path.join(TYPES_DIR, moduleName);
464
231
 
465
232
  /** @type {string} */
466
233
  let contents;
467
234
  try {
468
- contents = fs.readFileSync(modulePath, { encoding: 'utf-8' });
235
+ contents = await fs.readFile(modulePath, { encoding: 'utf-8' });
469
236
  } catch (e) {
470
237
  console.error(`Error reading ${modulePath}: ${e}`);
471
238
  return 'failure';
@@ -482,7 +249,7 @@ function processModule(moduleName) {
482
249
  }
483
250
 
484
251
  try {
485
- fs.writeFileSync(modulePath, rewrittenModule);
252
+ await fs.writeFile(modulePath, rewrittenModule);
486
253
  } catch (e) {
487
254
  console.error(`Error writing ${modulePath}: ${e}`);
488
255
  return 'failure';
@@ -517,8 +284,18 @@ export function rewriteModule(code, moduleName) {
517
284
  // things which rely on declaration merging can work, but they need to be
518
285
  // emitted *outside* the `declare module` we are introducing.
519
286
  visitTSModuleDeclaration(path) {
520
- otherModuleDeclarations.push(path.node);
521
- path.prune(path.node);
287
+ // ...but we need to *avoid* doing this for namespace declarations! So we
288
+ // *only* do it for cases where we are sure, since `declare module` will
289
+ // always have a string literal, while `declare namespace` will have an
290
+ // actual identifier instead.
291
+ if (path.node.id.type == 'StringLiteral') {
292
+ otherModuleDeclarations.push(path.node);
293
+ path.prune(path.node);
294
+ } else {
295
+ // Where we have a `declare namespace` type, we need to emit it without
296
+ // the `declare`, as with other items.
297
+ path.node.declare = false;
298
+ }
522
299
  this.traverse(path);
523
300
  },
524
301
 
@@ -572,7 +349,7 @@ export function rewriteModule(code, moduleName) {
572
349
  // This makes it so that the types we publish point to the types defined
573
350
  // by `backburner.js`, basically doing the type-time equivalent of the
574
351
  // no good, very bad runtime shenanigans Ember does... *somewhere*... in
575
- // the build to make `import Backburner from 'backburner'` work.
352
+ // the build to make `import Backburner from 'backburner.js'` work.
576
353
  if (source.value === 'backburner') {
577
354
  source.value = 'backburner.js';
578
355
  }
@@ -680,10 +457,7 @@ function normalizeSpecifier(moduleName, specifier) {
680
457
  // chunks comprising host module, because we need to *not* treat the current
681
458
  // module itself as a parent. If we're not in a "root" module, we need to
682
459
  // do it an extra time to get rid of the terminal `foo.d.ts` as well.
683
- let terminal = parentPathChunks.pop();
684
- if (terminal?.endsWith('.d.ts')) {
685
- parentPathChunks.pop();
686
- }
460
+ parentPathChunks.pop();
687
461
 
688
462
  // Walk back from the end of the specifier, replacing `..` with chunks from
689
463
  // the parent paths.
@@ -697,7 +471,12 @@ function normalizeSpecifier(moduleName, specifier) {
697
471
  `Could not generate a valid path for relative path specifier ${specifier} in ${moduleName}`
698
472
  );
699
473
  }
700
- merged.push(parent);
474
+
475
+ // If we get to `@ember`, we know we're at the root and we *need* to
476
+ // retain it. Otherwise, we're not there yet and should keep moving up.
477
+ if (parent === '@ember') {
478
+ merged.push(parent);
479
+ }
701
480
  } else {
702
481
  merged.push(chunk);
703
482
  }
@@ -714,5 +493,19 @@ function normalizeSpecifier(moduleName, specifier) {
714
493
  }
715
494
  }
716
495
 
717
- // Run it!
496
+ /**
497
+ * @template T
498
+ * @param {() => T} fn
499
+ * @returns {T}
500
+ */
501
+ function doOrDie(fn) {
502
+ try {
503
+ return fn();
504
+ } catch (e) {
505
+ console.log(e);
506
+ process.exit(1);
507
+ }
508
+ }
509
+
510
+ // --- Actually execute the program! --- //
718
511
  main();
@@ -443,7 +443,12 @@ declare module '@ember/-internals/glimmer' {
443
443
  export { default as LinkTo } from '@ember/-internals/glimmer/lib/components/link-to';
444
444
  export { default as Textarea } from '@ember/-internals/glimmer/lib/components/textarea';
445
445
  export { default as Component } from '@ember/-internals/glimmer/lib/component';
446
- export { default as Helper, helper } from '@ember/-internals/glimmer/lib/helper';
446
+ export {
447
+ default as Helper,
448
+ helper,
449
+ type FunctionBasedHelper,
450
+ type FunctionBasedHelperInstance,
451
+ } from '@ember/-internals/glimmer/lib/helper';
447
452
  export {
448
453
  SafeString,
449
454
  escapeExpression,