@azure-tools/typespec-ts 0.56.0-dev.1 → 0.56.0-dev.11

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 (459) hide show
  1. package/README.md +1 -13
  2. package/dist/src/context-manager.d.ts +19 -2
  3. package/dist/src/context-manager.d.ts.map +1 -1
  4. package/dist/src/context-manager.js +21 -0
  5. package/dist/src/context-manager.js.map +1 -1
  6. package/dist/src/framework/declaration.d.ts.map +1 -1
  7. package/dist/src/framework/declaration.js +6 -20
  8. package/dist/src/framework/declaration.js.map +1 -1
  9. package/dist/src/framework/hooks/sdk-types.d.ts +9 -0
  10. package/dist/src/framework/hooks/sdk-types.d.ts.map +1 -1
  11. package/dist/src/framework/hooks/sdk-types.js +14 -1
  12. package/dist/src/framework/hooks/sdk-types.js.map +1 -1
  13. package/dist/src/framework/source-file-batch.d.ts +35 -0
  14. package/dist/src/framework/source-file-batch.d.ts.map +1 -0
  15. package/dist/src/framework/source-file-batch.js +128 -0
  16. package/dist/src/framework/source-file-batch.js.map +1 -0
  17. package/dist/src/index.d.ts.map +1 -1
  18. package/dist/src/index.js +73 -62
  19. package/dist/src/index.js.map +1 -1
  20. package/dist/src/{rlc-common/interfaces.d.ts → interfaces.d.ts} +12 -14
  21. package/dist/src/interfaces.d.ts.map +1 -0
  22. package/dist/src/interfaces.js.map +1 -0
  23. package/dist/src/lib.d.ts +2 -4
  24. package/dist/src/lib.d.ts.map +1 -1
  25. package/dist/src/lib.js +2 -12
  26. package/dist/src/lib.js.map +1 -1
  27. package/dist/src/meta-tree.d.ts +4 -4
  28. package/dist/src/meta-tree.d.ts.map +1 -1
  29. package/dist/src/metadata/build-api-extractor-config.d.ts +6 -0
  30. package/dist/src/metadata/build-api-extractor-config.d.ts.map +1 -0
  31. package/dist/src/metadata/build-api-extractor-config.js.map +1 -0
  32. package/dist/src/metadata/build-changelog-file.d.ts +6 -0
  33. package/dist/src/metadata/build-changelog-file.d.ts.map +1 -0
  34. package/dist/src/metadata/build-changelog-file.js.map +1 -0
  35. package/dist/src/metadata/build-es-lint-config.d.ts +6 -0
  36. package/dist/src/metadata/build-es-lint-config.d.ts.map +1 -0
  37. package/dist/src/metadata/build-es-lint-config.js.map +1 -0
  38. package/dist/src/metadata/build-license-file.d.ts.map +1 -0
  39. package/dist/src/metadata/build-license-file.js.map +1 -0
  40. package/dist/src/{rlc-common/metadata → metadata}/build-package-file.d.ts +3 -3
  41. package/dist/src/metadata/build-package-file.d.ts.map +1 -0
  42. package/dist/src/{rlc-common/metadata → metadata}/build-package-file.js +1 -1
  43. package/dist/src/metadata/build-package-file.js.map +1 -0
  44. package/dist/src/metadata/build-readme-file.d.ts +11 -0
  45. package/dist/src/metadata/build-readme-file.d.ts.map +1 -0
  46. package/dist/src/{rlc-common/metadata → metadata}/build-readme-file.js +16 -69
  47. package/dist/src/metadata/build-readme-file.js.map +1 -0
  48. package/dist/src/metadata/build-sample-env-file.d.ts +6 -0
  49. package/dist/src/metadata/build-sample-env-file.d.ts.map +1 -0
  50. package/dist/src/metadata/build-sample-env-file.js.map +1 -0
  51. package/dist/src/{rlc-common/metadata → metadata}/build-test-config.d.ts +3 -3
  52. package/dist/src/metadata/build-test-config.d.ts.map +1 -0
  53. package/dist/src/metadata/build-test-config.js.map +1 -0
  54. package/dist/src/{rlc-common/metadata → metadata}/build-ts-config.d.ts +3 -3
  55. package/dist/src/metadata/build-ts-config.d.ts.map +1 -0
  56. package/dist/src/metadata/build-ts-config.js.map +1 -0
  57. package/dist/src/metadata/build-vitest-config.d.ts +6 -0
  58. package/dist/src/metadata/build-vitest-config.d.ts.map +1 -0
  59. package/dist/src/metadata/build-vitest-config.js.map +1 -0
  60. package/dist/src/{rlc-common/metadata → metadata}/build-warp-config.d.ts +2 -2
  61. package/dist/src/metadata/build-warp-config.d.ts.map +1 -0
  62. package/dist/src/metadata/build-warp-config.js.map +1 -0
  63. package/dist/src/metadata/package-json/azure-package-common.d.ts.map +1 -0
  64. package/dist/src/metadata/package-json/azure-package-common.js.map +1 -0
  65. package/dist/src/metadata/package-json/build-azure-monorepo-package.d.ts.map +1 -0
  66. package/dist/src/metadata/package-json/build-azure-monorepo-package.js.map +1 -0
  67. package/dist/src/metadata/package-json/package-common.d.ts.map +1 -0
  68. package/dist/src/metadata/package-json/package-common.js.map +1 -0
  69. package/dist/src/metadata/render-template.d.ts +24 -0
  70. package/dist/src/metadata/render-template.d.ts.map +1 -0
  71. package/dist/src/metadata/render-template.js +148 -0
  72. package/dist/src/metadata/render-template.js.map +1 -0
  73. package/dist/src/metadata/test/build-recorded-client.d.ts +6 -0
  74. package/dist/src/metadata/test/build-recorded-client.d.ts.map +1 -0
  75. package/dist/src/metadata/test/build-recorded-client.js +8 -0
  76. package/dist/src/metadata/test/build-recorded-client.js.map +1 -0
  77. package/dist/src/metadata/test/build-sample-test.d.ts +6 -0
  78. package/dist/src/metadata/test/build-sample-test.d.ts.map +1 -0
  79. package/dist/src/metadata/test/build-sample-test.js +8 -0
  80. package/dist/src/metadata/test/build-sample-test.js.map +1 -0
  81. package/dist/src/metadata/test/build-snippets.d.ts +6 -0
  82. package/dist/src/metadata/test/build-snippets.d.ts.map +1 -0
  83. package/dist/src/{rlc-common → metadata}/test/build-snippets.js +3 -5
  84. package/dist/src/metadata/test/build-snippets.js.map +1 -0
  85. package/dist/src/metadata/test/template.d.ts +4 -0
  86. package/dist/src/metadata/test/template.d.ts.map +1 -0
  87. package/dist/src/metadata/test/template.js +100 -0
  88. package/dist/src/metadata/test/template.js.map +1 -0
  89. package/dist/src/metadata/utils.d.ts +3 -0
  90. package/dist/src/metadata/utils.d.ts.map +1 -0
  91. package/dist/src/metadata/utils.js.map +1 -0
  92. package/dist/src/modular/build-classical-client.d.ts.map +1 -1
  93. package/dist/src/modular/build-classical-client.js +9 -9
  94. package/dist/src/modular/build-classical-client.js.map +1 -1
  95. package/dist/src/modular/build-classical-operation-groups.d.ts.map +1 -1
  96. package/dist/src/modular/build-classical-operation-groups.js +3 -3
  97. package/dist/src/modular/build-classical-operation-groups.js.map +1 -1
  98. package/dist/src/modular/build-client-context.d.ts.map +1 -1
  99. package/dist/src/modular/build-client-context.js +7 -7
  100. package/dist/src/modular/build-client-context.js.map +1 -1
  101. package/dist/src/modular/build-modular-options.js +3 -3
  102. package/dist/src/modular/build-modular-options.js.map +1 -1
  103. package/dist/src/modular/build-operations.d.ts.map +1 -1
  104. package/dist/src/modular/build-operations.js +6 -6
  105. package/dist/src/modular/build-operations.js.map +1 -1
  106. package/dist/src/modular/build-project-files.d.ts.map +1 -1
  107. package/dist/src/modular/build-project-files.js +4 -4
  108. package/dist/src/modular/build-project-files.js.map +1 -1
  109. package/dist/src/modular/build-restore-poller.d.ts.map +1 -1
  110. package/dist/src/modular/build-restore-poller.js +3 -3
  111. package/dist/src/modular/build-restore-poller.js.map +1 -1
  112. package/dist/src/modular/build-root-index.d.ts.map +1 -1
  113. package/dist/src/modular/build-root-index.js +42 -14
  114. package/dist/src/modular/build-root-index.js.map +1 -1
  115. package/dist/src/modular/build-subpath-index.d.ts.map +1 -1
  116. package/dist/src/modular/build-subpath-index.js +17 -4
  117. package/dist/src/modular/build-subpath-index.js.map +1 -1
  118. package/dist/src/modular/emit-models-options.d.ts.map +1 -1
  119. package/dist/src/modular/emit-models-options.js +3 -3
  120. package/dist/src/modular/emit-models-options.js.map +1 -1
  121. package/dist/src/modular/emit-models.d.ts +1 -1
  122. package/dist/src/modular/emit-models.d.ts.map +1 -1
  123. package/dist/src/modular/emit-models.js +32 -25
  124. package/dist/src/modular/emit-models.js.map +1 -1
  125. package/dist/src/modular/emit-samples.d.ts.map +1 -1
  126. package/dist/src/modular/emit-samples.js +5 -5
  127. package/dist/src/modular/emit-samples.js.map +1 -1
  128. package/dist/src/modular/emit-tests.d.ts.map +1 -1
  129. package/dist/src/modular/emit-tests.js +1 -1
  130. package/dist/src/modular/emit-tests.js.map +1 -1
  131. package/dist/src/modular/helpers/classical-operation-helpers.d.ts.map +1 -1
  132. package/dist/src/modular/helpers/classical-operation-helpers.js +11 -11
  133. package/dist/src/modular/helpers/classical-operation-helpers.js.map +1 -1
  134. package/dist/src/modular/helpers/client-helpers.d.ts.map +1 -1
  135. package/dist/src/modular/helpers/client-helpers.js +3 -3
  136. package/dist/src/modular/helpers/client-helpers.js.map +1 -1
  137. package/dist/src/modular/helpers/example-value-helpers.d.ts.map +1 -1
  138. package/dist/src/modular/helpers/example-value-helpers.js +2 -2
  139. package/dist/src/modular/helpers/example-value-helpers.js.map +1 -1
  140. package/dist/src/modular/helpers/naming-helpers.d.ts +1 -1
  141. package/dist/src/modular/helpers/naming-helpers.d.ts.map +1 -1
  142. package/dist/src/modular/helpers/naming-helpers.js +2 -2
  143. package/dist/src/modular/helpers/naming-helpers.js.map +1 -1
  144. package/dist/src/modular/helpers/operation-helpers.d.ts +4 -4
  145. package/dist/src/modular/helpers/operation-helpers.d.ts.map +1 -1
  146. package/dist/src/modular/helpers/operation-helpers.js +25 -26
  147. package/dist/src/modular/helpers/operation-helpers.js.map +1 -1
  148. package/dist/src/modular/helpers/type-helpers.d.ts.map +1 -1
  149. package/dist/src/modular/helpers/type-helpers.js +1 -1
  150. package/dist/src/modular/helpers/type-helpers.js.map +1 -1
  151. package/dist/src/modular/interfaces.d.ts +4 -4
  152. package/dist/src/modular/interfaces.d.ts.map +1 -1
  153. package/dist/src/modular/serialization/build-deserializer-function.d.ts.map +1 -1
  154. package/dist/src/modular/serialization/build-deserializer-function.js +2 -2
  155. package/dist/src/modular/serialization/build-deserializer-function.js.map +1 -1
  156. package/dist/src/modular/serialization/build-serializer-function.d.ts.map +1 -1
  157. package/dist/src/modular/serialization/build-serializer-function.js +2 -2
  158. package/dist/src/modular/serialization/build-serializer-function.js.map +1 -1
  159. package/dist/src/modular/serialization/build-xml-serializer-function.d.ts.map +1 -1
  160. package/dist/src/modular/serialization/build-xml-serializer-function.js +1 -1
  161. package/dist/src/modular/serialization/build-xml-serializer-function.js.map +1 -1
  162. package/dist/src/modular/type-expressions/get-enum-expression.js +1 -1
  163. package/dist/src/modular/type-expressions/get-enum-expression.js.map +1 -1
  164. package/dist/src/modular/type-expressions/get-nullable-expression.js +1 -1
  165. package/dist/src/modular/type-expressions/get-nullable-expression.js.map +1 -1
  166. package/dist/src/modular/type-expressions/get-type-expression.d.ts.map +1 -1
  167. package/dist/src/modular/type-expressions/get-type-expression.js +3 -3
  168. package/dist/src/modular/type-expressions/get-type-expression.js.map +1 -1
  169. package/dist/src/transform/transform-api-version-info.d.ts +1 -1
  170. package/dist/src/transform/transform-api-version-info.d.ts.map +1 -1
  171. package/dist/src/transform/transform-api-version-info.js +4 -3
  172. package/dist/src/transform/transform-api-version-info.js.map +1 -1
  173. package/dist/src/transform/{transfrom-rlc-options.d.ts → transform-client-options.d.ts} +3 -3
  174. package/dist/src/transform/transform-client-options.d.ts.map +1 -0
  175. package/dist/src/transform/{transfrom-rlc-options.js → transform-client-options.js} +9 -13
  176. package/dist/src/transform/transform-client-options.js.map +1 -0
  177. package/dist/src/transform/transform-helper-function-details.d.ts +1 -1
  178. package/dist/src/transform/transform-helper-function-details.d.ts.map +1 -1
  179. package/dist/src/transform/transform-helper-function-details.js +4 -4
  180. package/dist/src/transform/transform-helper-function-details.js.map +1 -1
  181. package/dist/src/transform/transform-parameters.d.ts +1 -1
  182. package/dist/src/transform/transform-parameters.d.ts.map +1 -1
  183. package/dist/src/transform/transform-parameters.js +11 -11
  184. package/dist/src/transform/transform-parameters.js.map +1 -1
  185. package/dist/src/transform/transform-paths.d.ts +1 -1
  186. package/dist/src/transform/transform-paths.d.ts.map +1 -1
  187. package/dist/src/transform/transform-paths.js +5 -4
  188. package/dist/src/transform/transform-paths.js.map +1 -1
  189. package/dist/src/transform/transform-responses.d.ts +1 -1
  190. package/dist/src/transform/transform-responses.d.ts.map +1 -1
  191. package/dist/src/transform/transform-responses.js +19 -18
  192. package/dist/src/transform/transform-responses.js.map +1 -1
  193. package/dist/src/transform/transform-schemas.js +5 -5
  194. package/dist/src/transform/transform-schemas.js.map +1 -1
  195. package/dist/src/transform/transform-telemetry-info.d.ts +1 -1
  196. package/dist/src/transform/transform-telemetry-info.d.ts.map +1 -1
  197. package/dist/src/transform/transform-telemetry-info.js +2 -2
  198. package/dist/src/transform/transform-telemetry-info.js.map +1 -1
  199. package/dist/src/transform/transform.d.ts +2 -2
  200. package/dist/src/transform/transform.d.ts.map +1 -1
  201. package/dist/src/transform/transform.js +9 -10
  202. package/dist/src/transform/transform.js.map +1 -1
  203. package/dist/src/utils/api-version-util.d.ts.map +1 -0
  204. package/dist/src/utils/api-version-util.js.map +1 -0
  205. package/dist/src/utils/client-utils.d.ts +5 -5
  206. package/dist/src/utils/client-utils.d.ts.map +1 -1
  207. package/dist/src/utils/client-utils.js +10 -10
  208. package/dist/src/utils/client-utils.js.map +1 -1
  209. package/dist/src/utils/cross-language-def.d.ts.map +1 -1
  210. package/dist/src/utils/cross-language-def.js +3 -3
  211. package/dist/src/utils/cross-language-def.js.map +1 -1
  212. package/dist/src/utils/emit-util.d.ts +2 -2
  213. package/dist/src/utils/emit-util.d.ts.map +1 -1
  214. package/dist/src/utils/emit-util.js +2 -2
  215. package/dist/src/utils/emit-util.js.map +1 -1
  216. package/dist/src/utils/imports-util.d.ts.map +1 -0
  217. package/dist/src/{rlc-common/helpers → utils}/imports-util.js +6 -6
  218. package/dist/src/utils/imports-util.js.map +1 -0
  219. package/dist/src/utils/interfaces.d.ts +3 -4
  220. package/dist/src/utils/interfaces.d.ts.map +1 -1
  221. package/dist/src/utils/model-utils.d.ts +1 -1
  222. package/dist/src/utils/model-utils.d.ts.map +1 -1
  223. package/dist/src/utils/model-utils.js +4 -2
  224. package/dist/src/utils/model-utils.js.map +1 -1
  225. package/dist/src/{rlc-common/helpers → utils}/name-constructors.d.ts +2 -2
  226. package/dist/src/utils/name-constructors.d.ts.map +1 -0
  227. package/dist/src/utils/name-constructors.js.map +1 -0
  228. package/dist/src/utils/name-utils.d.ts.map +1 -0
  229. package/dist/src/utils/name-utils.js.map +1 -0
  230. package/dist/src/utils/namespace-utils.js +4 -4
  231. package/dist/src/utils/namespace-utils.js.map +1 -1
  232. package/dist/src/utils/operation-helpers.d.ts +16 -0
  233. package/dist/src/utils/operation-helpers.d.ts.map +1 -0
  234. package/dist/src/utils/operation-helpers.js.map +1 -0
  235. package/dist/src/utils/operation-util.d.ts +2 -2
  236. package/dist/src/utils/operation-util.d.ts.map +1 -1
  237. package/dist/src/utils/operation-util.js +17 -18
  238. package/dist/src/utils/operation-util.js.map +1 -1
  239. package/dist/src/utils/parameter-utils.d.ts +1 -1
  240. package/dist/src/utils/parameter-utils.d.ts.map +1 -1
  241. package/dist/src/utils/parameter-utils.js +2 -4
  242. package/dist/src/utils/parameter-utils.js.map +1 -1
  243. package/dist/src/{rlc-common/helpers → utils}/schema-helpers.d.ts +2 -2
  244. package/dist/src/utils/schema-helpers.d.ts.map +1 -0
  245. package/dist/src/utils/schema-helpers.js.map +1 -0
  246. package/dist/src/utils/type-util.d.ts.map +1 -0
  247. package/dist/src/utils/type-util.js.map +1 -0
  248. package/dist/tsconfig.tsbuildinfo +1 -1
  249. package/package.json +14 -24
  250. package/src/context-manager.ts +25 -2
  251. package/src/framework/declaration.ts +8 -20
  252. package/src/framework/hooks/sdk-types.ts +15 -1
  253. package/src/framework/source-file-batch.ts +140 -0
  254. package/src/index.ts +92 -103
  255. package/src/{rlc-common/interfaces.ts → interfaces.ts} +14 -16
  256. package/src/lib.ts +3 -16
  257. package/src/meta-tree.ts +4 -4
  258. package/src/{rlc-common/metadata → metadata}/build-api-extractor-config.ts +2 -2
  259. package/src/{rlc-common/metadata → metadata}/build-changelog-file.ts +3 -3
  260. package/src/{rlc-common/metadata → metadata}/build-es-lint-config.ts +2 -2
  261. package/src/{rlc-common/metadata → metadata}/build-package-file.ts +6 -6
  262. package/src/{rlc-common/metadata → metadata}/build-readme-file.ts +25 -99
  263. package/src/{rlc-common/metadata → metadata}/build-sample-env-file.ts +2 -2
  264. package/src/{rlc-common/metadata → metadata}/build-test-config.ts +4 -4
  265. package/src/{rlc-common/metadata → metadata}/build-ts-config.ts +3 -3
  266. package/src/{rlc-common/metadata → metadata}/build-vitest-config.ts +2 -2
  267. package/src/{rlc-common/metadata → metadata}/build-warp-config.ts +2 -2
  268. package/src/metadata/render-template.ts +202 -0
  269. package/src/metadata/test/build-recorded-client.ts +9 -0
  270. package/src/metadata/test/build-sample-test.ts +9 -0
  271. package/src/{rlc-common → metadata}/test/build-snippets.ts +5 -7
  272. package/src/metadata/test/template.ts +101 -0
  273. package/src/{rlc-common/metadata → metadata}/utils.ts +2 -2
  274. package/src/modular/build-classical-client.ts +9 -9
  275. package/src/modular/build-classical-operation-groups.ts +3 -3
  276. package/src/modular/build-client-context.ts +7 -7
  277. package/src/modular/build-modular-options.ts +3 -3
  278. package/src/modular/build-operations.ts +6 -6
  279. package/src/modular/build-project-files.ts +4 -5
  280. package/src/modular/build-restore-poller.ts +3 -3
  281. package/src/modular/build-root-index.ts +57 -19
  282. package/src/modular/build-subpath-index.ts +26 -5
  283. package/src/modular/emit-models-options.ts +3 -3
  284. package/src/modular/emit-models.ts +32 -26
  285. package/src/modular/emit-samples.ts +5 -5
  286. package/src/modular/emit-tests.ts +1 -1
  287. package/src/modular/helpers/classical-operation-helpers.ts +11 -11
  288. package/src/modular/helpers/client-helpers.ts +3 -3
  289. package/src/modular/helpers/example-value-helpers.ts +2 -2
  290. package/src/modular/helpers/naming-helpers.ts +2 -2
  291. package/src/modular/helpers/operation-helpers.ts +27 -27
  292. package/src/modular/helpers/type-helpers.ts +1 -1
  293. package/src/modular/interfaces.ts +4 -4
  294. package/src/modular/serialization/build-deserializer-function.ts +2 -2
  295. package/src/modular/serialization/build-serializer-function.ts +2 -2
  296. package/src/modular/serialization/build-xml-serializer-function.ts +1 -1
  297. package/src/modular/type-expressions/get-enum-expression.ts +1 -1
  298. package/src/modular/type-expressions/get-nullable-expression.ts +1 -1
  299. package/src/modular/type-expressions/get-type-expression.ts +3 -3
  300. package/src/transform/transform-api-version-info.ts +4 -10
  301. package/src/transform/{transfrom-rlc-options.ts → transform-client-options.ts} +12 -22
  302. package/src/transform/transform-helper-function-details.ts +5 -5
  303. package/src/transform/transform-parameters.ts +12 -12
  304. package/src/transform/transform-paths.ts +5 -12
  305. package/src/transform/transform-responses.ts +19 -19
  306. package/src/transform/transform-schemas.ts +5 -5
  307. package/src/transform/transform-telemetry-info.ts +3 -3
  308. package/src/transform/transform.ts +13 -18
  309. package/src/utils/client-utils.ts +11 -11
  310. package/src/utils/cross-language-def.ts +3 -3
  311. package/src/utils/emit-util.ts +3 -3
  312. package/src/{rlc-common/helpers → utils}/imports-util.ts +6 -6
  313. package/src/utils/interfaces.ts +3 -4
  314. package/src/utils/model-utils.ts +7 -8
  315. package/src/{rlc-common/helpers → utils}/name-constructors.ts +2 -2
  316. package/src/utils/namespace-utils.ts +4 -4
  317. package/src/{rlc-common/helpers → utils}/operation-helpers.ts +12 -12
  318. package/src/utils/operation-util.ts +19 -33
  319. package/src/utils/parameter-utils.ts +2 -4
  320. package/src/{rlc-common/helpers → utils}/schema-helpers.ts +2 -2
  321. package/dist/src/rlc-common/helpers/api-version-util.d.ts.map +0 -1
  322. package/dist/src/rlc-common/helpers/api-version-util.js.map +0 -1
  323. package/dist/src/rlc-common/helpers/imports-util.d.ts.map +0 -1
  324. package/dist/src/rlc-common/helpers/imports-util.js.map +0 -1
  325. package/dist/src/rlc-common/helpers/name-constructors.d.ts.map +0 -1
  326. package/dist/src/rlc-common/helpers/name-constructors.js.map +0 -1
  327. package/dist/src/rlc-common/helpers/name-utils.d.ts.map +0 -1
  328. package/dist/src/rlc-common/helpers/name-utils.js.map +0 -1
  329. package/dist/src/rlc-common/helpers/operation-helpers.d.ts +0 -16
  330. package/dist/src/rlc-common/helpers/operation-helpers.d.ts.map +0 -1
  331. package/dist/src/rlc-common/helpers/operation-helpers.js.map +0 -1
  332. package/dist/src/rlc-common/helpers/schema-helpers.d.ts.map +0 -1
  333. package/dist/src/rlc-common/helpers/schema-helpers.js.map +0 -1
  334. package/dist/src/rlc-common/helpers/type-util.d.ts.map +0 -1
  335. package/dist/src/rlc-common/helpers/type-util.js.map +0 -1
  336. package/dist/src/rlc-common/index.d.ts +0 -23
  337. package/dist/src/rlc-common/index.d.ts.map +0 -1
  338. package/dist/src/rlc-common/index.js +0 -25
  339. package/dist/src/rlc-common/index.js.map +0 -1
  340. package/dist/src/rlc-common/interfaces.d.ts.map +0 -1
  341. package/dist/src/rlc-common/interfaces.js.map +0 -1
  342. package/dist/src/rlc-common/metadata/build-api-extractor-config.d.ts +0 -6
  343. package/dist/src/rlc-common/metadata/build-api-extractor-config.d.ts.map +0 -1
  344. package/dist/src/rlc-common/metadata/build-api-extractor-config.js.map +0 -1
  345. package/dist/src/rlc-common/metadata/build-changelog-file.d.ts +0 -6
  346. package/dist/src/rlc-common/metadata/build-changelog-file.d.ts.map +0 -1
  347. package/dist/src/rlc-common/metadata/build-changelog-file.js.map +0 -1
  348. package/dist/src/rlc-common/metadata/build-es-lint-config.d.ts +0 -6
  349. package/dist/src/rlc-common/metadata/build-es-lint-config.d.ts.map +0 -1
  350. package/dist/src/rlc-common/metadata/build-es-lint-config.js.map +0 -1
  351. package/dist/src/rlc-common/metadata/build-license-file.d.ts.map +0 -1
  352. package/dist/src/rlc-common/metadata/build-license-file.js.map +0 -1
  353. package/dist/src/rlc-common/metadata/build-package-file.d.ts.map +0 -1
  354. package/dist/src/rlc-common/metadata/build-package-file.js.map +0 -1
  355. package/dist/src/rlc-common/metadata/build-readme-file.d.ts +0 -11
  356. package/dist/src/rlc-common/metadata/build-readme-file.d.ts.map +0 -1
  357. package/dist/src/rlc-common/metadata/build-readme-file.js.map +0 -1
  358. package/dist/src/rlc-common/metadata/build-sample-env-file.d.ts +0 -6
  359. package/dist/src/rlc-common/metadata/build-sample-env-file.d.ts.map +0 -1
  360. package/dist/src/rlc-common/metadata/build-sample-env-file.js.map +0 -1
  361. package/dist/src/rlc-common/metadata/build-test-config.d.ts.map +0 -1
  362. package/dist/src/rlc-common/metadata/build-test-config.js.map +0 -1
  363. package/dist/src/rlc-common/metadata/build-ts-config.d.ts.map +0 -1
  364. package/dist/src/rlc-common/metadata/build-ts-config.js.map +0 -1
  365. package/dist/src/rlc-common/metadata/build-vitest-config.d.ts +0 -6
  366. package/dist/src/rlc-common/metadata/build-vitest-config.d.ts.map +0 -1
  367. package/dist/src/rlc-common/metadata/build-vitest-config.js.map +0 -1
  368. package/dist/src/rlc-common/metadata/build-warp-config.d.ts.map +0 -1
  369. package/dist/src/rlc-common/metadata/build-warp-config.js.map +0 -1
  370. package/dist/src/rlc-common/metadata/package-json/azure-package-common.d.ts.map +0 -1
  371. package/dist/src/rlc-common/metadata/package-json/azure-package-common.js.map +0 -1
  372. package/dist/src/rlc-common/metadata/package-json/build-azure-monorepo-package.d.ts.map +0 -1
  373. package/dist/src/rlc-common/metadata/package-json/build-azure-monorepo-package.js.map +0 -1
  374. package/dist/src/rlc-common/metadata/package-json/package-common.d.ts.map +0 -1
  375. package/dist/src/rlc-common/metadata/package-json/package-common.js.map +0 -1
  376. package/dist/src/rlc-common/metadata/utils.d.ts +0 -3
  377. package/dist/src/rlc-common/metadata/utils.d.ts.map +0 -1
  378. package/dist/src/rlc-common/metadata/utils.js.map +0 -1
  379. package/dist/src/rlc-common/static/paginate-content.d.ts +0 -2
  380. package/dist/src/rlc-common/static/paginate-content.d.ts.map +0 -1
  381. package/dist/src/rlc-common/static/paginate-content.js +0 -345
  382. package/dist/src/rlc-common/static/paginate-content.js.map +0 -1
  383. package/dist/src/rlc-common/static/polling-content.d.ts +0 -2
  384. package/dist/src/rlc-common/static/polling-content.d.ts.map +0 -1
  385. package/dist/src/rlc-common/static/polling-content.js +0 -225
  386. package/dist/src/rlc-common/static/polling-content.js.map +0 -1
  387. package/dist/src/rlc-common/static/sample-template.d.ts +0 -2
  388. package/dist/src/rlc-common/static/sample-template.d.ts.map +0 -1
  389. package/dist/src/rlc-common/static/sample-template.js +0 -56
  390. package/dist/src/rlc-common/static/sample-template.js.map +0 -1
  391. package/dist/src/rlc-common/static/serialize-helper.d.ts +0 -6
  392. package/dist/src/rlc-common/static/serialize-helper.d.ts.map +0 -1
  393. package/dist/src/rlc-common/static/serialize-helper.js +0 -31
  394. package/dist/src/rlc-common/static/serialize-helper.js.map +0 -1
  395. package/dist/src/rlc-common/test/build-karma-config.d.ts +0 -6
  396. package/dist/src/rlc-common/test/build-karma-config.d.ts.map +0 -1
  397. package/dist/src/rlc-common/test/build-karma-config.js +0 -11
  398. package/dist/src/rlc-common/test/build-karma-config.js.map +0 -1
  399. package/dist/src/rlc-common/test/build-recorded-client.d.ts +0 -6
  400. package/dist/src/rlc-common/test/build-recorded-client.d.ts.map +0 -1
  401. package/dist/src/rlc-common/test/build-recorded-client.js +0 -14
  402. package/dist/src/rlc-common/test/build-recorded-client.js.map +0 -1
  403. package/dist/src/rlc-common/test/build-sample-test.d.ts +0 -6
  404. package/dist/src/rlc-common/test/build-sample-test.d.ts.map +0 -1
  405. package/dist/src/rlc-common/test/build-sample-test.js +0 -11
  406. package/dist/src/rlc-common/test/build-sample-test.js.map +0 -1
  407. package/dist/src/rlc-common/test/build-snippets.d.ts +0 -6
  408. package/dist/src/rlc-common/test/build-snippets.d.ts.map +0 -1
  409. package/dist/src/rlc-common/test/build-snippets.js.map +0 -1
  410. package/dist/src/rlc-common/test/template.d.ts +0 -5
  411. package/dist/src/rlc-common/test/template.d.ts.map +0 -1
  412. package/dist/src/rlc-common/test/template.js +0 -227
  413. package/dist/src/rlc-common/test/template.js.map +0 -1
  414. package/dist/src/transform/transfrom-rlc-options.d.ts.map +0 -1
  415. package/dist/src/transform/transfrom-rlc-options.js.map +0 -1
  416. package/src/rlc-common/index.ts +0 -25
  417. package/src/rlc-common/static/paginate-content.ts +0 -345
  418. package/src/rlc-common/static/polling-content.ts +0 -225
  419. package/src/rlc-common/static/sample-template.ts +0 -56
  420. package/src/rlc-common/static/serialize-helper.ts +0 -34
  421. package/src/rlc-common/test/build-karma-config.ts +0 -12
  422. package/src/rlc-common/test/build-recorded-client.ts +0 -15
  423. package/src/rlc-common/test/build-sample-test.ts +0 -12
  424. package/src/rlc-common/test/template.ts +0 -229
  425. /package/dist/src/{rlc-common/interfaces.js → interfaces.js} +0 -0
  426. /package/dist/src/{rlc-common/metadata → metadata}/build-api-extractor-config.js +0 -0
  427. /package/dist/src/{rlc-common/metadata → metadata}/build-changelog-file.js +0 -0
  428. /package/dist/src/{rlc-common/metadata → metadata}/build-es-lint-config.js +0 -0
  429. /package/dist/src/{rlc-common/metadata → metadata}/build-license-file.d.ts +0 -0
  430. /package/dist/src/{rlc-common/metadata → metadata}/build-license-file.js +0 -0
  431. /package/dist/src/{rlc-common/metadata → metadata}/build-sample-env-file.js +0 -0
  432. /package/dist/src/{rlc-common/metadata → metadata}/build-test-config.js +0 -0
  433. /package/dist/src/{rlc-common/metadata → metadata}/build-ts-config.js +0 -0
  434. /package/dist/src/{rlc-common/metadata → metadata}/build-vitest-config.js +0 -0
  435. /package/dist/src/{rlc-common/metadata → metadata}/build-warp-config.js +0 -0
  436. /package/dist/src/{rlc-common/metadata → metadata}/package-json/azure-package-common.d.ts +0 -0
  437. /package/dist/src/{rlc-common/metadata → metadata}/package-json/azure-package-common.js +0 -0
  438. /package/dist/src/{rlc-common/metadata → metadata}/package-json/build-azure-monorepo-package.d.ts +0 -0
  439. /package/dist/src/{rlc-common/metadata → metadata}/package-json/build-azure-monorepo-package.js +0 -0
  440. /package/dist/src/{rlc-common/metadata → metadata}/package-json/package-common.d.ts +0 -0
  441. /package/dist/src/{rlc-common/metadata → metadata}/package-json/package-common.js +0 -0
  442. /package/dist/src/{rlc-common/metadata → metadata}/utils.js +0 -0
  443. /package/dist/src/{rlc-common/helpers → utils}/api-version-util.d.ts +0 -0
  444. /package/dist/src/{rlc-common/helpers → utils}/api-version-util.js +0 -0
  445. /package/dist/src/{rlc-common/helpers → utils}/imports-util.d.ts +0 -0
  446. /package/dist/src/{rlc-common/helpers → utils}/name-constructors.js +0 -0
  447. /package/dist/src/{rlc-common/helpers → utils}/name-utils.d.ts +0 -0
  448. /package/dist/src/{rlc-common/helpers → utils}/name-utils.js +0 -0
  449. /package/dist/src/{rlc-common/helpers → utils}/operation-helpers.js +0 -0
  450. /package/dist/src/{rlc-common/helpers → utils}/schema-helpers.js +0 -0
  451. /package/dist/src/{rlc-common/helpers → utils}/type-util.d.ts +0 -0
  452. /package/dist/src/{rlc-common/helpers → utils}/type-util.js +0 -0
  453. /package/src/{rlc-common/metadata → metadata}/build-license-file.ts +0 -0
  454. /package/src/{rlc-common/metadata → metadata}/package-json/azure-package-common.ts +0 -0
  455. /package/src/{rlc-common/metadata → metadata}/package-json/build-azure-monorepo-package.ts +0 -0
  456. /package/src/{rlc-common/metadata → metadata}/package-json/package-common.ts +0 -0
  457. /package/src/{rlc-common/helpers → utils}/api-version-util.ts +0 -0
  458. /package/src/{rlc-common/helpers → utils}/name-utils.ts +0 -0
  459. /package/src/{rlc-common/helpers → utils}/type-util.ts +0 -0
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@azure-tools/typespec-ts",
3
- "version": "0.56.0-dev.1",
4
- "description": "An experimental TypeSpec emitter for TypeScript",
3
+ "version": "0.56.0-dev.11",
4
+ "description": "A TypeSpec emitter for TypeScript",
5
5
  "main": "dist/src/index.js",
6
6
  "type": "module",
7
7
  "exports": {
@@ -42,9 +42,7 @@
42
42
  "@typespec/xml": "^0.83.0 || >=0.84.0-dev <0.84.0",
43
43
  "@typespec/ts-http-runtime": "0.3.6",
44
44
  "cross-env": "^10.1.0",
45
- "mkdirp": "^3.0.1",
46
- "npm-run-all": "~4.1.5",
47
- "prettier": "^3.8.1",
45
+ "concurrently": "^10.0.0",
48
46
  "vitest": "^4.1.3",
49
47
  "vite": "^8.0.8",
50
48
  "@vitest/coverage-v8": "^4.1.3",
@@ -62,7 +60,6 @@
62
60
  },
63
61
  "dependencies": {
64
62
  "fast-xml-parser": "^5.7.0",
65
- "handlebars": "^4.7.7",
66
63
  "prettier": "^3.8.1",
67
64
  "ts-morph": "^23.0.0",
68
65
  "tslib": "^2.3.1"
@@ -89,28 +86,21 @@
89
86
  "clean": "rimraf ./dist ./typespec-output",
90
87
  "build": "tsc -p .",
91
88
  "test": "npm run test-next && npm run unit-test && npm run integration-test-ci",
92
- "test:azure": "npm run test-next && npm run copy:typespec && npm run integration-test-ci:azure-modular",
93
- "lint": "eslint . --ext .ts --max-warnings=0",
94
- "lint:fix": "eslint . --fix --ext .ts",
89
+ "lint": "oxlint . --deny-warnings",
90
+ "lint:fix": "oxlint . --fix",
95
91
  "check:tree": "node ./test/commands/check-clean-tree.ts",
96
- "test:ts:e2e": "npm run copy:typespec && npm run integration-test-ci:azure-modular",
97
- "integration-test-ci": "npm-run-all copy:typespec integration-test-ci:azure-modular",
98
- "integration-test-ci:sequential": "npm-run-all --serial copy:typespec integration-test-ci:azure-modular",
99
- "integration-test-ci:azure-modular": "npm-run-all --silent -p start-test-server:azure-modular --race generate-and-run:azure-modular",
100
- "start-test-server": "mkdirp -p coverage && npx tsp-spector serve ./node_modules/@typespec/http-specs/specs --coverageFile ./coverage/spector-coverage-typescript.json",
101
- "start-test-server:azure-modular": "mkdirp -p coverage && npx tsp-spector serve ./node_modules/@azure-tools/azure-http-specs/specs ./node_modules/@typespec/http-specs/specs --port 3002 --coverageFile ./coverage/spector-coverage-typescript-modular-azure.json",
92
+ "integration-test-ci": "npm run copy:typespec && npm run spector-test",
93
+ "spector-test": "concurrently --kill-others --success first \"npm:start-test-server\" \"npm:generate-and-run\"",
94
+ "start-test-server": "node ./test/commands/start-test-server.js",
102
95
  "copy:typespec": "node ./test/commands/copy-typespec.ts",
103
- "generate-and-run:azure-modular": "npm run generate-tsp-only:azure-modular:client && npm-run-all -p integration-test:alone:azure-modular generate-tsp-only:azure-modular:declarations && npm run stop-test-server -- -p 3002",
104
- "generate-tsp-only": "npm run generate-tsp-only:azure-modular",
105
- "generate-tsp-only:azure-modular": "node ./test/commands/gen-spector.js",
106
- "generate-tsp-only:azure-modular:client": "node ./test/commands/gen-spector.js --phase=client",
107
- "generate-tsp-only:azure-modular:declarations": "node ./test/commands/gen-spector.js --phase=declarations",
96
+ "generate-and-run": "npm run generate-tsp-only:client && concurrently --kill-others-on-fail \"npm:integration-test:alone\" \"npm:generate-tsp-only:declarations\" && npm run stop-test-server -- -p 3002",
97
+ "generate-tsp-only": "node ./test/commands/gen-spector.js",
98
+ "generate-tsp-only:client": "node ./test/commands/gen-spector.js --phase=client",
99
+ "generate-tsp-only:declarations": "node ./test/commands/gen-spector.js --phase=declarations",
108
100
  "regen-test-baselines": "npm run generate-tsp-only",
109
- "integration-test:alone": "npm run integration-test:alone:azure-modular",
110
- "integration-test:alone:azure-modular": "vitest run --project integration-azure-modular",
101
+ "integration-test:alone": "vitest run --project integration-azure-modular",
111
102
  "stop-test-server": "npx tsp-spector server stop",
112
- "unit-test": "npm run unit-test:modular",
113
- "unit-test:modular": "cross-env NODE_OPTIONS=--max-old-space-size=1024 vitest run --project unit-modular",
103
+ "unit-test": "cross-env NODE_OPTIONS=--max-old-space-size=1024 vitest run --project unit-modular",
114
104
  "gen:scenario-suites": "node ./test/commands/gen-scenario-suites.ts",
115
105
  "regen-docs": "npm run build && tspd doc . --enable-experimental --output-dir ../../website/src/content/docs/docs/emitters/clients/typespec-ts/reference --skip-js"
116
106
  }
@@ -4,7 +4,7 @@ import { Project, SourceFile } from "ts-morph";
4
4
  import { ExternalDependencies } from "./framework/dependency.js";
5
5
  import { Binder } from "./framework/hooks/binder.js";
6
6
  import { SdkTypeContext } from "./framework/hooks/sdk-types.js";
7
- import { RlcMetaTree } from "./meta-tree.js";
7
+ import { ClientTypeMetaTree } from "./meta-tree.js";
8
8
 
9
9
  /**
10
10
  * Contexts Object Guidelines
@@ -20,7 +20,7 @@ import { RlcMetaTree } from "./meta-tree.js";
20
20
  * Remember, adding too many contexts can lead to complex dependencies and harder-to-maintain code. Always evaluate if the context is truly necessary or if there are better alternatives such as localized state management or passing props for simpler scenarios.
21
21
  */
22
22
  type Contexts = {
23
- rlcMetaTree: RlcMetaTree; // Context for RLC types metadata.
23
+ clientTypeMetaTree: ClientTypeMetaTree; // Context for client type metadata.
24
24
  outputProject: Project; // The TS-Morph root project context for code generation.
25
25
  symbolMap: Map<string, SourceFile>; // Mapping of symbols to their corresponding source files.
26
26
  sdkTypes: SdkTypeContext;
@@ -72,6 +72,19 @@ class ContextManager {
72
72
  public getContext<K extends ContextKey>(key: K): Contexts[K] | undefined {
73
73
  return this.contexts.get(key) as Contexts[K] | undefined;
74
74
  }
75
+
76
+ /**
77
+ * Clears all stored contexts.
78
+ *
79
+ * The manager is a process-wide singleton, so the values provided during an
80
+ * emit (the `EmitContext`/`Program`, the TCGC `SdkContext`, the ts-morph
81
+ * `Project`, etc.) stay reachable from this map until the next emit overwrites
82
+ * them. Clearing at the end of an emit lets the whole previous program graph
83
+ * be collected instead of being retained until the following emit.
84
+ */
85
+ public clearContexts(): void {
86
+ this.contexts.clear();
87
+ }
75
88
  }
76
89
 
77
90
  // Expose the singleton instance of the context manager.
@@ -99,3 +112,13 @@ export function useContext<K extends ContextKey>(key: K): Contexts[K] {
99
112
  export function provideContext<K extends ContextKey>(key: K, value: Contexts[K]): void {
100
113
  contextManager.setContext(key, value);
101
114
  }
115
+
116
+ /**
117
+ * Clears all contexts held by the singleton context manager. Call this once an
118
+ * emit has finished writing its output so the retained program graph (compiler
119
+ * `EmitContext`/`Program`, TCGC `SdkContext`, ts-morph `Project`, binder, …) can
120
+ * be garbage collected instead of lingering until the next emit overwrites it.
121
+ */
122
+ export function clearContexts(): void {
123
+ contextManager.clearContexts();
124
+ }
@@ -8,12 +8,14 @@ import {
8
8
  InterfaceDeclaration,
9
9
  InterfaceDeclarationStructure,
10
10
  SourceFile,
11
+ StatementStructures,
11
12
  StructureKind,
12
13
  TypeAliasDeclaration,
13
14
  TypeAliasDeclarationStructure,
14
15
  } from "ts-morph";
15
16
  import { useBinder } from "./hooks/binder.js";
16
17
  import { refkey as getRefKey } from "./refkey.js";
18
+ import { enqueueStatement } from "./source-file-batch.js";
17
19
  export type DeclarationStructures =
18
20
  | ClassDeclarationStructure
19
21
  | EnumDeclarationStructure
@@ -80,25 +82,11 @@ export function addDeclaration(
80
82
  // Update the declaration name to be unique
81
83
  const trackedDeclaration = { ...declaration, name: trackedDeclarationName };
82
84
 
83
- switch (trackedDeclaration.kind) {
84
- case StructureKind.Class:
85
- sourceFile.addClass(trackedDeclaration);
86
- break;
87
- case StructureKind.Enum:
88
- sourceFile.addEnum(trackedDeclaration);
89
- break;
90
- case StructureKind.Function:
91
- sourceFile.addFunction(trackedDeclaration);
92
- break;
93
- case StructureKind.Interface:
94
- sourceFile.addInterface(trackedDeclaration);
95
- break;
96
- case StructureKind.TypeAlias:
97
- if (trackedDeclaration.type) {
98
- sourceFile.addTypeAlias(trackedDeclaration);
99
- }
100
- break;
101
- default:
102
- throw new Error(`Unsupported declaration kind ${(trackedDeclaration as any).kind}`);
85
+ // Skip empty type aliases (they have no body to emit). Done before
86
+ // dispatching so behaviour is identical whether batching or not.
87
+ if (trackedDeclaration.kind === StructureKind.TypeAlias && !trackedDeclaration.type) {
88
+ return;
103
89
  }
90
+
91
+ enqueueStatement(sourceFile, trackedDeclaration as StatementStructures);
104
92
  }
@@ -14,8 +14,8 @@ import { reportDiagnostic } from "../../lib.js";
14
14
  import { visitPackageTypes } from "../../modular/emit-models.js";
15
15
  import { getAllAncestors, getAllProperties } from "../../modular/helpers/operation-helpers.js";
16
16
  import { normalizeModelPropertyName } from "../../modular/type-expressions/get-type-expression.js";
17
- import { NameType, normalizeName } from "../../rlc-common/index.js";
18
17
  import { SdkContext } from "../../utils/interfaces.js";
18
+ import { NameType, normalizeName } from "../../utils/name-utils.js";
19
19
 
20
20
  export const emitQueue: Set<SdkType> = new Set<SdkType>();
21
21
  export const flattenPropertyModelMap: Map<SdkModelPropertyType, SdkModelType> = new Map<
@@ -29,6 +29,20 @@ export const flattenPropertyModelMap: Map<SdkModelPropertyType, SdkModelType> =
29
29
  */
30
30
  export const pagedModelsKeptPublic = new Set<SdkType>();
31
31
 
32
+ /**
33
+ * Releases the module-level state that accumulates while visiting a package's
34
+ * types. These collections are cleared at the start of every
35
+ * {@link visitPackageTypes} call, but because they live at module scope they
36
+ * otherwise keep the most recently emitted program's SDK types reachable until
37
+ * the next emit runs. Call this once an emit has fully finished so that state
38
+ * can be garbage collected.
39
+ */
40
+ export function resetSdkTypesState(): void {
41
+ emitQueue.clear();
42
+ flattenPropertyModelMap.clear();
43
+ pagedModelsKeptPublic.clear();
44
+ }
45
+
32
46
  export interface SdkTypeContext {
33
47
  operations: Map<Type, SdkServiceMethod<SdkHttpOperation>>;
34
48
  types: Map<Type, SdkType>;
@@ -0,0 +1,140 @@
1
+ import {
2
+ ExportDeclarationStructure,
3
+ SourceFile,
4
+ StatementStructures,
5
+ StructureKind,
6
+ } from "ts-morph";
7
+
8
+ /**
9
+ * Generic per-source-file batch for ts-morph `add*` mutations.
10
+ *
11
+ * Each individual `sourceFile.addInterface/addFunction/addExportDeclaration/...`
12
+ * call re-parses the entire source file in ts-morph. Calling them in a loop
13
+ * therefore grows as O(N × file_size). This module collects structures while
14
+ * a batch is open and, on flush, issues a single `addStatements` call per file,
15
+ * collapsing N re-parses into 1.
16
+ *
17
+ * The batch is reference-counted so nested begin/flush pairs compose safely.
18
+ * Statements flush in insertion order and produce byte-identical output.
19
+ */
20
+
21
+ let batchDepth = 0;
22
+ const pendingByFile = new Map<SourceFile, StatementStructures[]>();
23
+
24
+ /**
25
+ * Opens a batching scope. Subsequent `enqueueStatement` calls queue rather
26
+ * than mutate the AST until the matching `flushSourceFileBatch` is called.
27
+ */
28
+ export function beginSourceFileBatch(): void {
29
+ batchDepth++;
30
+ }
31
+
32
+ /**
33
+ * Closes the most recent batching scope. When the outermost scope closes,
34
+ * all pending structures are written to their source files in bulk.
35
+ */
36
+ export function flushSourceFileBatch(): void {
37
+ if (batchDepth === 0) {
38
+ return;
39
+ }
40
+ batchDepth--;
41
+ if (batchDepth > 0) {
42
+ return;
43
+ }
44
+ try {
45
+ for (const [sourceFile, statements] of pendingByFile) {
46
+ if (statements.length === 0) {
47
+ continue;
48
+ }
49
+ sourceFile.addStatements(statements);
50
+ }
51
+ } finally {
52
+ pendingByFile.clear();
53
+ }
54
+ }
55
+
56
+ /**
57
+ * Queues a statement structure for bulk-add on flush, or writes it
58
+ * immediately when no batch is open.
59
+ * @param sourceFile - Target source file.
60
+ * @param structure - The statement structure to add.
61
+ */
62
+ export function enqueueStatement(sourceFile: SourceFile, structure: StatementStructures): void {
63
+ if (batchDepth > 0) {
64
+ let pending = pendingByFile.get(sourceFile);
65
+ if (!pending) {
66
+ pending = [];
67
+ pendingByFile.set(sourceFile, pending);
68
+ }
69
+ pending.push(structure);
70
+ return;
71
+ }
72
+ sourceFile.addStatements([structure]);
73
+ }
74
+
75
+ /**
76
+ * Returns the set of names exported from `sourceFile` considering both the
77
+ * declarations already present in its AST and any export declarations queued
78
+ * by the current batch. Use this in place of reading `getExportDeclarations`
79
+ * directly when callers dedup against existing exports inside a batch.
80
+ * @param sourceFile - The file to inspect.
81
+ */
82
+ export function getEffectiveExportedNames(sourceFile: SourceFile): Set<string> {
83
+ const names = new Set<string>();
84
+ for (const decl of sourceFile.getExportDeclarations()) {
85
+ for (const named of decl.getNamedExports()) {
86
+ names.add(named.getAliasNode()?.getText() ?? named.getName());
87
+ }
88
+ }
89
+ const pending = pendingByFile.get(sourceFile);
90
+ if (pending) {
91
+ for (const structure of pending) {
92
+ if (structure.kind !== StructureKind.ExportDeclaration) {
93
+ continue;
94
+ }
95
+ collectNamedExportNames(structure.namedExports, names);
96
+ }
97
+ }
98
+ return names;
99
+ }
100
+
101
+ /**
102
+ * Returns the set of named exports queued in the current batch for
103
+ * `sourceFile`. Use this to union with any AST-based view of exports
104
+ * (e.g. `getExportedDeclarations`) when deduplicating against still-pending
105
+ * writes inside a batch.
106
+ * @param sourceFile - The file to inspect.
107
+ */
108
+ export function getQueuedExportNames(sourceFile: SourceFile): Set<string> {
109
+ const names = new Set<string>();
110
+ const pending = pendingByFile.get(sourceFile);
111
+ if (!pending) {
112
+ return names;
113
+ }
114
+ for (const structure of pending) {
115
+ if (structure.kind !== StructureKind.ExportDeclaration) {
116
+ continue;
117
+ }
118
+ collectNamedExportNames(structure.namedExports, names);
119
+ }
120
+ return names;
121
+ }
122
+
123
+ function collectNamedExportNames(
124
+ named: ExportDeclarationStructure["namedExports"],
125
+ into: Set<string>,
126
+ ): void {
127
+ if (!named || typeof named === "function") {
128
+ // WriterFunction form is opaque to us; callers can't dedup by name.
129
+ return;
130
+ }
131
+ for (const item of named) {
132
+ if (typeof item === "string") {
133
+ into.add(item);
134
+ } else if (typeof item === "function") {
135
+ continue;
136
+ } else if (item) {
137
+ into.add(item.alias ?? item.name);
138
+ }
139
+ }
140
+ }