@typespec/compiler 0.41.0

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 (352) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +9 -0
  3. package/cmd/tsp-server.js +3 -0
  4. package/cmd/tsp.js +3 -0
  5. package/dist/cmd/runner.d.ts +9 -0
  6. package/dist/cmd/runner.d.ts.map +1 -0
  7. package/dist/cmd/runner.js +62 -0
  8. package/dist/cmd/runner.js.map +1 -0
  9. package/dist/config/config-interpolation.d.ts +11 -0
  10. package/dist/config/config-interpolation.d.ts.map +1 -0
  11. package/dist/config/config-interpolation.js +109 -0
  12. package/dist/config/config-interpolation.js.map +1 -0
  13. package/dist/config/config-loader.d.ts +25 -0
  14. package/dist/config/config-loader.d.ts.map +1 -0
  15. package/dist/config/config-loader.js +182 -0
  16. package/dist/config/config-loader.js.map +1 -0
  17. package/dist/config/config-schema.d.ts +4 -0
  18. package/dist/config/config-schema.d.ts.map +1 -0
  19. package/dist/config/config-schema.js +84 -0
  20. package/dist/config/config-schema.js.map +1 -0
  21. package/dist/config/index.d.ts +3 -0
  22. package/dist/config/index.d.ts.map +1 -0
  23. package/dist/config/index.js +3 -0
  24. package/dist/config/index.js.map +1 -0
  25. package/dist/config/types.d.ts +79 -0
  26. package/dist/config/types.d.ts.map +1 -0
  27. package/dist/config/types.js +2 -0
  28. package/dist/config/types.js.map +1 -0
  29. package/dist/core/binder.d.ts +29 -0
  30. package/dist/core/binder.d.ts.map +1 -0
  31. package/dist/core/binder.js +455 -0
  32. package/dist/core/binder.js.map +1 -0
  33. package/dist/core/charcode.d.ts +130 -0
  34. package/dist/core/charcode.d.ts.map +1 -0
  35. package/dist/core/charcode.js +115 -0
  36. package/dist/core/charcode.js.map +1 -0
  37. package/dist/core/checker.d.ts +138 -0
  38. package/dist/core/checker.d.ts.map +1 -0
  39. package/dist/core/checker.js +4070 -0
  40. package/dist/core/checker.js.map +1 -0
  41. package/dist/core/cli/args.d.ts +18 -0
  42. package/dist/core/cli/args.d.ts.map +1 -0
  43. package/dist/core/cli/args.js +108 -0
  44. package/dist/core/cli/args.js.map +1 -0
  45. package/dist/core/cli/cli.d.ts +2 -0
  46. package/dist/core/cli/cli.d.ts.map +1 -0
  47. package/dist/core/cli/cli.js +477 -0
  48. package/dist/core/cli/cli.js.map +1 -0
  49. package/dist/core/cli/index.d.ts +2 -0
  50. package/dist/core/cli/index.d.ts.map +1 -0
  51. package/dist/core/cli/index.js +2 -0
  52. package/dist/core/cli/index.js.map +1 -0
  53. package/dist/core/decorator-utils.d.ts +108 -0
  54. package/dist/core/decorator-utils.d.ts.map +1 -0
  55. package/dist/core/decorator-utils.js +326 -0
  56. package/dist/core/decorator-utils.js.map +1 -0
  57. package/dist/core/diagnostics.d.ts +93 -0
  58. package/dist/core/diagnostics.d.ts.map +1 -0
  59. package/dist/core/diagnostics.js +315 -0
  60. package/dist/core/diagnostics.js.map +1 -0
  61. package/dist/core/emitter-utils.d.ts +14 -0
  62. package/dist/core/emitter-utils.d.ts.map +1 -0
  63. package/dist/core/emitter-utils.js +16 -0
  64. package/dist/core/emitter-utils.js.map +1 -0
  65. package/dist/core/formatter-fs.d.ts +21 -0
  66. package/dist/core/formatter-fs.d.ts.map +1 -0
  67. package/dist/core/formatter-fs.js +79 -0
  68. package/dist/core/formatter-fs.js.map +1 -0
  69. package/dist/core/formatter.d.ts +10 -0
  70. package/dist/core/formatter.d.ts.map +1 -0
  71. package/dist/core/formatter.js +24 -0
  72. package/dist/core/formatter.js.map +1 -0
  73. package/dist/core/helpers/discriminator-utils.d.ts +14 -0
  74. package/dist/core/helpers/discriminator-utils.d.ts.map +1 -0
  75. package/dist/core/helpers/discriminator-utils.js +169 -0
  76. package/dist/core/helpers/discriminator-utils.js.map +1 -0
  77. package/dist/core/helpers/index.d.ts +6 -0
  78. package/dist/core/helpers/index.d.ts.map +1 -0
  79. package/dist/core/helpers/index.js +6 -0
  80. package/dist/core/helpers/index.js.map +1 -0
  81. package/dist/core/helpers/operation-utils.d.ts +15 -0
  82. package/dist/core/helpers/operation-utils.d.ts.map +1 -0
  83. package/dist/core/helpers/operation-utils.js +35 -0
  84. package/dist/core/helpers/operation-utils.js.map +1 -0
  85. package/dist/core/helpers/projected-names-utils.d.ts +20 -0
  86. package/dist/core/helpers/projected-names-utils.d.ts.map +1 -0
  87. package/dist/core/helpers/projected-names-utils.js +40 -0
  88. package/dist/core/helpers/projected-names-utils.js.map +1 -0
  89. package/dist/core/helpers/type-name-utils.d.ts +14 -0
  90. package/dist/core/helpers/type-name-utils.d.ts.map +1 -0
  91. package/dist/core/helpers/type-name-utils.js +122 -0
  92. package/dist/core/helpers/type-name-utils.js.map +1 -0
  93. package/dist/core/helpers/usage-resolver.d.ts +20 -0
  94. package/dist/core/helpers/usage-resolver.d.ts.map +1 -0
  95. package/dist/core/helpers/usage-resolver.js +108 -0
  96. package/dist/core/helpers/usage-resolver.js.map +1 -0
  97. package/dist/core/index.d.ts +26 -0
  98. package/dist/core/index.d.ts.map +1 -0
  99. package/dist/core/index.js +26 -0
  100. package/dist/core/index.js.map +1 -0
  101. package/dist/core/install.d.ts +2 -0
  102. package/dist/core/install.d.ts.map +1 -0
  103. package/dist/core/install.js +26 -0
  104. package/dist/core/install.js.map +1 -0
  105. package/dist/core/library.d.ts +34 -0
  106. package/dist/core/library.d.ts.map +1 -0
  107. package/dist/core/library.js +100 -0
  108. package/dist/core/library.js.map +1 -0
  109. package/dist/core/logger/console-sink.browser.d.ts +4 -0
  110. package/dist/core/logger/console-sink.browser.d.ts.map +1 -0
  111. package/dist/core/logger/console-sink.browser.js +14 -0
  112. package/dist/core/logger/console-sink.browser.js.map +1 -0
  113. package/dist/core/logger/console-sink.d.ts +9 -0
  114. package/dist/core/logger/console-sink.d.ts.map +1 -0
  115. package/dist/core/logger/console-sink.js +81 -0
  116. package/dist/core/logger/console-sink.js.map +1 -0
  117. package/dist/core/logger/index.d.ts +3 -0
  118. package/dist/core/logger/index.d.ts.map +1 -0
  119. package/dist/core/logger/index.js +3 -0
  120. package/dist/core/logger/index.js.map +1 -0
  121. package/dist/core/logger/logger.d.ts +7 -0
  122. package/dist/core/logger/logger.d.ts.map +1 -0
  123. package/dist/core/logger/logger.js +32 -0
  124. package/dist/core/logger/logger.js.map +1 -0
  125. package/dist/core/logger/tracer.d.ts +3 -0
  126. package/dist/core/logger/tracer.d.ts.map +1 -0
  127. package/dist/core/logger/tracer.js +91 -0
  128. package/dist/core/logger/tracer.js.map +1 -0
  129. package/dist/core/manifest.d.ts +21 -0
  130. package/dist/core/manifest.d.ts.map +1 -0
  131. package/dist/core/manifest.js +8 -0
  132. package/dist/core/manifest.js.map +1 -0
  133. package/dist/core/messages.d.ts +2253 -0
  134. package/dist/core/messages.d.ts.map +1 -0
  135. package/dist/core/messages.js +749 -0
  136. package/dist/core/messages.js.map +1 -0
  137. package/dist/core/module-resolver.d.ts +84 -0
  138. package/dist/core/module-resolver.d.ts.map +1 -0
  139. package/dist/core/module-resolver.js +170 -0
  140. package/dist/core/module-resolver.js.map +1 -0
  141. package/dist/core/node-host.browser.d.ts +2 -0
  142. package/dist/core/node-host.browser.d.ts.map +1 -0
  143. package/dist/core/node-host.browser.js +2 -0
  144. package/dist/core/node-host.browser.js.map +1 -0
  145. package/dist/core/node-host.d.ts +7 -0
  146. package/dist/core/node-host.d.ts.map +1 -0
  147. package/dist/core/node-host.js +43 -0
  148. package/dist/core/node-host.js.map +1 -0
  149. package/dist/core/nonascii.d.ts +2 -0
  150. package/dist/core/nonascii.d.ts.map +1 -0
  151. package/dist/core/nonascii.js +712 -0
  152. package/dist/core/nonascii.js.map +1 -0
  153. package/dist/core/options.d.ts +46 -0
  154. package/dist/core/options.d.ts.map +1 -0
  155. package/dist/core/options.js +2 -0
  156. package/dist/core/options.js.map +1 -0
  157. package/dist/core/parser.d.ts +17 -0
  158. package/dist/core/parser.d.ts.map +1 -0
  159. package/dist/core/parser.js +2561 -0
  160. package/dist/core/parser.js.map +1 -0
  161. package/dist/core/path-utils.d.ts +193 -0
  162. package/dist/core/path-utils.d.ts.map +1 -0
  163. package/dist/core/path-utils.js +427 -0
  164. package/dist/core/path-utils.js.map +1 -0
  165. package/dist/core/program.d.ts +104 -0
  166. package/dist/core/program.d.ts.map +1 -0
  167. package/dist/core/program.js +898 -0
  168. package/dist/core/program.js.map +1 -0
  169. package/dist/core/projection-members.d.ts +8 -0
  170. package/dist/core/projection-members.d.ts.map +1 -0
  171. package/dist/core/projection-members.js +387 -0
  172. package/dist/core/projection-members.js.map +1 -0
  173. package/dist/core/projector.d.ts +26 -0
  174. package/dist/core/projector.d.ts.map +1 -0
  175. package/dist/core/projector.js +523 -0
  176. package/dist/core/projector.js.map +1 -0
  177. package/dist/core/scanner.d.ts +125 -0
  178. package/dist/core/scanner.d.ts.map +1 -0
  179. package/dist/core/scanner.js +1012 -0
  180. package/dist/core/scanner.js.map +1 -0
  181. package/dist/core/schema-validator.d.ts +6 -0
  182. package/dist/core/schema-validator.d.ts.map +1 -0
  183. package/dist/core/schema-validator.js +38 -0
  184. package/dist/core/schema-validator.js.map +1 -0
  185. package/dist/core/semantic-walker.d.ts +53 -0
  186. package/dist/core/semantic-walker.d.ts.map +1 -0
  187. package/dist/core/semantic-walker.js +355 -0
  188. package/dist/core/semantic-walker.js.map +1 -0
  189. package/dist/core/type-utils.d.ts +49 -0
  190. package/dist/core/type-utils.d.ts.map +1 -0
  191. package/dist/core/type-utils.js +95 -0
  192. package/dist/core/type-utils.js.map +1 -0
  193. package/dist/core/types.d.ts +1345 -0
  194. package/dist/core/types.d.ts.map +1 -0
  195. package/dist/core/types.js +105 -0
  196. package/dist/core/types.js.map +1 -0
  197. package/dist/core/util.d.ts +150 -0
  198. package/dist/core/util.d.ts.map +1 -0
  199. package/dist/core/util.js +417 -0
  200. package/dist/core/util.js.map +1 -0
  201. package/dist/emitter-framework/asset-emitter.d.ts +5 -0
  202. package/dist/emitter-framework/asset-emitter.d.ts.map +1 -0
  203. package/dist/emitter-framework/asset-emitter.js +610 -0
  204. package/dist/emitter-framework/asset-emitter.js.map +1 -0
  205. package/dist/emitter-framework/builders/array-builder.d.ts +7 -0
  206. package/dist/emitter-framework/builders/array-builder.d.ts.map +1 -0
  207. package/dist/emitter-framework/builders/array-builder.js +45 -0
  208. package/dist/emitter-framework/builders/array-builder.js.map +1 -0
  209. package/dist/emitter-framework/builders/object-builder.d.ts +9 -0
  210. package/dist/emitter-framework/builders/object-builder.d.ts.map +1 -0
  211. package/dist/emitter-framework/builders/object-builder.js +30 -0
  212. package/dist/emitter-framework/builders/object-builder.js.map +1 -0
  213. package/dist/emitter-framework/builders/string-builder.d.ts +13 -0
  214. package/dist/emitter-framework/builders/string-builder.d.ts.map +1 -0
  215. package/dist/emitter-framework/builders/string-builder.js +98 -0
  216. package/dist/emitter-framework/builders/string-builder.js.map +1 -0
  217. package/dist/emitter-framework/custom-key-map.d.ts +29 -0
  218. package/dist/emitter-framework/custom-key-map.d.ts.map +1 -0
  219. package/dist/emitter-framework/custom-key-map.js +62 -0
  220. package/dist/emitter-framework/custom-key-map.js.map +1 -0
  221. package/dist/emitter-framework/index.d.ts +8 -0
  222. package/dist/emitter-framework/index.d.ts.map +1 -0
  223. package/dist/emitter-framework/index.js +8 -0
  224. package/dist/emitter-framework/index.js.map +1 -0
  225. package/dist/emitter-framework/placeholder.d.ts +12 -0
  226. package/dist/emitter-framework/placeholder.d.ts.map +1 -0
  227. package/dist/emitter-framework/placeholder.js +27 -0
  228. package/dist/emitter-framework/placeholder.js.map +1 -0
  229. package/dist/emitter-framework/type-emitter.d.ts +314 -0
  230. package/dist/emitter-framework/type-emitter.d.ts.map +1 -0
  231. package/dist/emitter-framework/type-emitter.js +612 -0
  232. package/dist/emitter-framework/type-emitter.js.map +1 -0
  233. package/dist/emitter-framework/types.d.ts +124 -0
  234. package/dist/emitter-framework/types.d.ts.map +1 -0
  235. package/dist/emitter-framework/types.js +39 -0
  236. package/dist/emitter-framework/types.js.map +1 -0
  237. package/dist/formatter/index.d.ts +11 -0
  238. package/dist/formatter/index.d.ts.map +1 -0
  239. package/dist/formatter/index.js +28 -0
  240. package/dist/formatter/index.js.map +1 -0
  241. package/dist/formatter/parser.d.ts +16 -0
  242. package/dist/formatter/parser.d.ts.map +1 -0
  243. package/dist/formatter/parser.js +23 -0
  244. package/dist/formatter/parser.js.map +1 -0
  245. package/dist/formatter/print/comment-handler.d.ts +7 -0
  246. package/dist/formatter/print/comment-handler.d.ts.map +1 -0
  247. package/dist/formatter/print/comment-handler.js +81 -0
  248. package/dist/formatter/print/comment-handler.js.map +1 -0
  249. package/dist/formatter/print/index.d.ts +3 -0
  250. package/dist/formatter/print/index.d.ts.map +1 -0
  251. package/dist/formatter/print/index.js +3 -0
  252. package/dist/formatter/print/index.js.map +1 -0
  253. package/dist/formatter/print/needs-parens.d.ts +10 -0
  254. package/dist/formatter/print/needs-parens.d.ts.map +1 -0
  255. package/dist/formatter/print/needs-parens.js +27 -0
  256. package/dist/formatter/print/needs-parens.js.map +1 -0
  257. package/dist/formatter/print/printer.d.ts +62 -0
  258. package/dist/formatter/print/printer.d.ts.map +1 -0
  259. package/dist/formatter/print/printer.js +1025 -0
  260. package/dist/formatter/print/printer.js.map +1 -0
  261. package/dist/formatter/print/types.d.ts +9 -0
  262. package/dist/formatter/print/types.d.ts.map +1 -0
  263. package/dist/formatter/print/types.js +2 -0
  264. package/dist/formatter/print/types.js.map +1 -0
  265. package/dist/init/index.d.ts +2 -0
  266. package/dist/init/index.d.ts.map +1 -0
  267. package/dist/init/index.js +2 -0
  268. package/dist/init/index.js.map +1 -0
  269. package/dist/init/init-template.d.ts +45 -0
  270. package/dist/init/init-template.d.ts.map +1 -0
  271. package/dist/init/init-template.js +45 -0
  272. package/dist/init/init-template.js.map +1 -0
  273. package/dist/init/init.d.ts +49 -0
  274. package/dist/init/init.d.ts.map +1 -0
  275. package/dist/init/init.js +224 -0
  276. package/dist/init/init.js.map +1 -0
  277. package/dist/lib/decorators.d.ts +222 -0
  278. package/dist/lib/decorators.d.ts.map +1 -0
  279. package/dist/lib/decorators.js +745 -0
  280. package/dist/lib/decorators.js.map +1 -0
  281. package/dist/lib/service.d.ts +38 -0
  282. package/dist/lib/service.d.ts.map +1 -0
  283. package/dist/lib/service.js +78 -0
  284. package/dist/lib/service.js.map +1 -0
  285. package/dist/manifest.js +4 -0
  286. package/dist/server/completion.d.ts +10 -0
  287. package/dist/server/completion.d.ts.map +1 -0
  288. package/dist/server/completion.js +207 -0
  289. package/dist/server/completion.js.map +1 -0
  290. package/dist/server/index.d.ts +3 -0
  291. package/dist/server/index.d.ts.map +1 -0
  292. package/dist/server/index.js +3 -0
  293. package/dist/server/index.js.map +1 -0
  294. package/dist/server/language-config.d.ts +195 -0
  295. package/dist/server/language-config.d.ts.map +1 -0
  296. package/dist/server/language-config.js +102 -0
  297. package/dist/server/language-config.js.map +1 -0
  298. package/dist/server/server.d.ts +2 -0
  299. package/dist/server/server.d.ts.map +1 -0
  300. package/dist/server/server.js +131 -0
  301. package/dist/server/server.js.map +1 -0
  302. package/dist/server/serverlib.d.ts +72 -0
  303. package/dist/server/serverlib.d.ts.map +1 -0
  304. package/dist/server/serverlib.js +1034 -0
  305. package/dist/server/serverlib.js.map +1 -0
  306. package/dist/server/symbol-structure.d.ts +4 -0
  307. package/dist/server/symbol-structure.d.ts.map +1 -0
  308. package/dist/server/symbol-structure.js +121 -0
  309. package/dist/server/symbol-structure.js.map +1 -0
  310. package/dist/server/tmlanguage.d.ts +3 -0
  311. package/dist/server/tmlanguage.d.ts.map +1 -0
  312. package/dist/server/tmlanguage.js +713 -0
  313. package/dist/server/tmlanguage.js.map +1 -0
  314. package/dist/server/type-details.d.ts +11 -0
  315. package/dist/server/type-details.d.ts.map +1 -0
  316. package/dist/server/type-details.js +72 -0
  317. package/dist/server/type-details.js.map +1 -0
  318. package/dist/server/type-signature.d.ts +2 -0
  319. package/dist/server/type-signature.d.ts.map +1 -0
  320. package/dist/server/type-signature.js +108 -0
  321. package/dist/server/type-signature.js.map +1 -0
  322. package/dist/testing/expect.d.ts +49 -0
  323. package/dist/testing/expect.d.ts.map +1 -0
  324. package/dist/testing/expect.js +83 -0
  325. package/dist/testing/expect.js.map +1 -0
  326. package/dist/testing/index.d.ts +6 -0
  327. package/dist/testing/index.d.ts.map +1 -0
  328. package/dist/testing/index.js +6 -0
  329. package/dist/testing/index.js.map +1 -0
  330. package/dist/testing/test-host.d.ts +14 -0
  331. package/dist/testing/test-host.d.ts.map +1 -0
  332. package/dist/testing/test-host.js +271 -0
  333. package/dist/testing/test-host.js.map +1 -0
  334. package/dist/testing/test-server-host.d.ts +39 -0
  335. package/dist/testing/test-server-host.d.ts.map +1 -0
  336. package/dist/testing/test-server-host.js +112 -0
  337. package/dist/testing/test-server-host.js.map +1 -0
  338. package/dist/testing/test-utils.d.ts +22 -0
  339. package/dist/testing/test-utils.d.ts.map +1 -0
  340. package/dist/testing/test-utils.js +60 -0
  341. package/dist/testing/test-utils.js.map +1 -0
  342. package/dist/testing/types.d.ts +69 -0
  343. package/dist/testing/types.d.ts.map +1 -0
  344. package/dist/testing/types.js +7 -0
  345. package/dist/testing/types.js.map +1 -0
  346. package/dist/typespec.tmLanguage +1760 -0
  347. package/lib/decorators.tsp +420 -0
  348. package/lib/lib.tsp +158 -0
  349. package/lib/main.tsp +4 -0
  350. package/lib/projected-names.tsp +94 -0
  351. package/lib/reflection.tsp +10 -0
  352. package/package.json +119 -0
@@ -0,0 +1,612 @@
1
+ import { compilerAssert, isTemplateDeclaration, } from "../core/index.js";
2
+ import { code, StringBuilder } from "./builders/string-builder.js";
3
+ /**
4
+ * Implement emitter logic by extending this class and passing it to
5
+ * `emitContext.createAssetEmitter`. This class should not be constructed
6
+ * directly.
7
+ *
8
+ * TypeEmitters serve two primary purposes:
9
+ *
10
+ * 1. Handle emitting TypeSpec types into other languages
11
+ * 2. Set emitter context
12
+ *
13
+ * The generic type parameter `T` is the type you expect to produce for each TypeSpec type.
14
+ * In the case of generating source code for a programming language, this is probably `string`
15
+ * (in which case, consider using the `CodeTypeEmitter`) but might also be an AST node. If you
16
+ * are emitting JSON or similar, `T` would likely be `object`.
17
+ *
18
+ * ## Emitting types
19
+ *
20
+ * Emitting TypeSpec types into other languages is accomplished by implementing
21
+ * the AssetEmitter method that corresponds with the TypeSpec type you are
22
+ * emitting. For example, to emit a TypeSpec model declaration, implement the
23
+ * `modelDeclaration` method.
24
+ *
25
+ * TypeSpec types that have both declaration and literal forms like models or
26
+ * unions will have separate methods. For example, models have both
27
+ * `modelDeclaration` and `modelLiteral` methods that can be implemented
28
+ * separately.
29
+ *
30
+ * Also, types which can be instantiated like models or operations have a
31
+ * separate method for the instantiated type. For example, models have a
32
+ * `modelInstantiation` method that gets called with such types. Generally these
33
+ * will be treated either as if they were declarations or literals depending on
34
+ * preference, but may also be treated specially.
35
+ *
36
+ * ## Emitter results
37
+ * There are three kinds of results your methods might return - declarations,
38
+ * raw code, or nothing.
39
+ *
40
+ * ### Declarations
41
+ *
42
+ * Create declarations by calling `this.emitter.result.declaration` passing it a
43
+ * name and the emit output for the declaration. Note that you must have scope
44
+ * in your context or you will get an error. If you want all declarations to be
45
+ * emitted to the same source file, you can create a single scope in
46
+ * `programContext` via something like:
47
+ *
48
+ * ```typescript
49
+ * programContext(program: Program): Context {
50
+ * const sourceFile = this.emitter.createSourceFile("test.txt");
51
+ * return {
52
+ * scope: sourceFile.globalScope,
53
+ * };
54
+ * }
55
+ * ```
56
+ *
57
+ * ### Raw Code
58
+ *
59
+ * Create raw code, or emitter output that doesn't contribute to a declaration,
60
+ * by calling `this.emitter.result.rawCode` passing it a value. Returning just a
61
+ * value is considered raw code and so you often don't need to call this
62
+ * directly.
63
+ *
64
+ * ### No Emit
65
+ *
66
+ * When a type doesn't contribute anything to the emitted output, return
67
+ * `this.emitter.result.none()`.
68
+ *
69
+ * ## Context
70
+ *
71
+ * The TypeEmitter will often want to keep track of what context a type is found
72
+ * in. There are two kinds of context - lexical context, and reference context.
73
+ *
74
+ * * Lexical context is context that applies to the type and every type
75
+ * contained inside of it. For example, lexical context for a model will apply
76
+ * to the model, its properties, and any nested model literals.
77
+ * * Reference context is context that applies to types contained inside of the
78
+ * type and referenced anywhere inside of it. For example, reference context
79
+ * set on a model will apply to the model, its properties, any nested model
80
+ * literals, and any type referenced inside anywhere inside the model and any
81
+ * of the referenced types' references.
82
+ *
83
+ * In both cases, context is an object. It strongly recommended that the context
84
+ * object either contain only primitive types, or else only reference immutable
85
+ * objects.
86
+ *
87
+ * Set lexical by implementing the `*Context` methods of the TypeEmitter and
88
+ * returning the context, for example `modelDeclarationContext` sets the context
89
+ * for model declarations and the types contained inside of it.
90
+ *
91
+ * Set reference context by implementing the `*ReferenceContext` methods of the
92
+ * TypeEmitter and returning the context. Note that not all types have reference
93
+ * context methods, because not all types can actually reference anything.
94
+ *
95
+ * When a context method returns some context, it is merged with the current
96
+ * context. It is not possible to remove previous context, but it can be
97
+ * overridden with `undefined`.
98
+ *
99
+ * When emitting types with context, the same type might be emitted multiple
100
+ * times if we come across that type with different contexts. For example, if we
101
+ * have a TypeSpec program like
102
+ *
103
+ * ```typespec
104
+ * model Pet { }
105
+ * model Person {
106
+ * pet: Pet;
107
+ * }
108
+ * ```
109
+ *
110
+ * And we set reference context for the Person model, Pet will be emitted twice,
111
+ * once without context and once with the reference context.
112
+ */
113
+ export class TypeEmitter {
114
+ /**
115
+ * @private
116
+ *
117
+ * Constructs a TypeEmitter. Do not use this constructor directly, instead
118
+ * call `createAssetEmitter` on the emitter context object.
119
+ * @param emitter The asset emitter
120
+ */
121
+ constructor(emitter) {
122
+ this.emitter = emitter;
123
+ }
124
+ /**
125
+ * Context shared by the entire program. In cases where you are emitting to a
126
+ * single file, use this method to establish your main source file and set the
127
+ * `scope` property to that source file's `globalScope`.
128
+ * @param program
129
+ * @returns Context
130
+ */
131
+ programContext(program) {
132
+ return {};
133
+ }
134
+ /**
135
+ * Emit a namespace
136
+ *
137
+ * @param namespace
138
+ * @returns Emitter output
139
+ */
140
+ namespace(namespace) {
141
+ for (const ns of namespace.namespaces.values()) {
142
+ this.emitter.emitType(ns);
143
+ }
144
+ for (const model of namespace.models.values()) {
145
+ if (!isTemplateDeclaration(model)) {
146
+ this.emitter.emitType(model);
147
+ }
148
+ }
149
+ for (const operation of namespace.operations.values()) {
150
+ if (!isTemplateDeclaration(operation)) {
151
+ this.emitter.emitType(operation);
152
+ }
153
+ }
154
+ for (const enumeration of namespace.enums.values()) {
155
+ this.emitter.emitType(enumeration);
156
+ }
157
+ for (const union of namespace.unions.values()) {
158
+ if (!isTemplateDeclaration(union)) {
159
+ this.emitter.emitType(union);
160
+ }
161
+ }
162
+ for (const iface of namespace.interfaces.values()) {
163
+ if (!isTemplateDeclaration(iface)) {
164
+ this.emitter.emitType(iface);
165
+ }
166
+ }
167
+ return this.emitter.result.none();
168
+ }
169
+ /**
170
+ * Set lexical context for a namespace
171
+ *
172
+ * @param namespace
173
+ */
174
+ namespaceContext(namespace) {
175
+ return {};
176
+ }
177
+ /**
178
+ * Set reference context for a namespace.
179
+ *
180
+ * @param namespace
181
+ */
182
+ namespaceReferenceContext(namespace) {
183
+ return {};
184
+ }
185
+ /**
186
+ * Emit a model literal (e.g. as created by `{}` syntax in TypeSpec).
187
+ *
188
+ * @param model
189
+ */
190
+ modelLiteral(model) {
191
+ if (model.baseModel) {
192
+ this.emitter.emitType(model.baseModel);
193
+ }
194
+ this.emitter.emitModelProperties(model);
195
+ return this.emitter.result.none();
196
+ }
197
+ /**
198
+ * Set lexical context for a model literal.
199
+ * @param model
200
+ */
201
+ modelLiteralContext(model) {
202
+ return {};
203
+ }
204
+ /**
205
+ * Set reference context for a model literal.
206
+ * @param model
207
+ */
208
+ modelLiteralReferenceContext(model) {
209
+ return {};
210
+ }
211
+ /**
212
+ * Emit a model declaration (e.g. as created by `model Foo { }` syntax in
213
+ * TypeSpec).
214
+ *
215
+ * @param model
216
+ */
217
+ modelDeclaration(model, name) {
218
+ if (model.baseModel) {
219
+ this.emitter.emitType(model.baseModel);
220
+ }
221
+ this.emitter.emitModelProperties(model);
222
+ return this.emitter.result.none();
223
+ }
224
+ /**
225
+ * Set lexical context for a model declaration.
226
+ *
227
+ * @param model
228
+ * @param name the model's declaration name as retrieved from the
229
+ * `declarationName` method.
230
+ */
231
+ modelDeclarationContext(model, name) {
232
+ return {};
233
+ }
234
+ /**
235
+ * Set reference context for a model declaration.
236
+ * @param model
237
+ */
238
+ modelDeclarationReferenceContext(model) {
239
+ return {};
240
+ }
241
+ /**
242
+ * Emit a model instantiation (e.g. as created by `Foo<string>` syntax in
243
+ * TypeSpec).
244
+ *
245
+ * @param model
246
+ * @param name The name of the instantiation as retrieved from the
247
+ * `declarationName` method.
248
+ */
249
+ modelInstantiation(model, name) {
250
+ if (model.baseModel) {
251
+ this.emitter.emitType(model.baseModel);
252
+ }
253
+ this.emitter.emitModelProperties(model);
254
+ return this.emitter.result.none();
255
+ }
256
+ /**
257
+ * Set lexical context for a model instantiation.
258
+ * @param model
259
+ */
260
+ modelInstantiationContext(model) {
261
+ return {};
262
+ }
263
+ /**
264
+ * Set reference context for a model declaration.
265
+ * @param model
266
+ */
267
+ modelInstantiationReferenceContext(model) {
268
+ return {};
269
+ }
270
+ /**
271
+ * Emit a model's properties. Unless overridden, this method will emit each of
272
+ * the model's properties and return a no emit result.
273
+ *
274
+ * @param model
275
+ */
276
+ modelProperties(model) {
277
+ for (const prop of model.properties.values()) {
278
+ this.emitter.emitModelProperty(prop);
279
+ }
280
+ return this.emitter.result.none();
281
+ }
282
+ /**
283
+ * Emit a property of a model.
284
+ *
285
+ * @param property
286
+ */
287
+ modelPropertyLiteral(property) {
288
+ this.emitter.emitTypeReference(property.type);
289
+ return this.emitter.result.none();
290
+ }
291
+ /**
292
+ * Set lexical context for a property of a model.
293
+ *
294
+ * @param property
295
+ */
296
+ modelPropertyLiteralContext(property) {
297
+ return {};
298
+ }
299
+ /**
300
+ * Set reference context for a property of a model.
301
+ *
302
+ * @param property
303
+ */
304
+ modelPropertyLiteralReferenceContext(property) {
305
+ return {};
306
+ }
307
+ /**
308
+ * Emit a model property reference (e.g. as created by the `SomeModel.prop`
309
+ * syntax in TypeSpec). By default, this will emit the type of the referenced
310
+ * property and return that result. In other words, the emit will look as if
311
+ * `SomeModel.prop` were replaced with the type of `prop`.
312
+ *
313
+ * @param property
314
+ */
315
+ modelPropertyReference(property) {
316
+ return this.emitter.emitTypeReference(property.type);
317
+ }
318
+ arrayDeclaration(array, name, elementType) {
319
+ this.emitter.emitType(array.indexer.value);
320
+ return this.emitter.result.none();
321
+ }
322
+ arrayDeclarationContext(array) {
323
+ return {};
324
+ }
325
+ arrayDeclarationReferenceContext(array) {
326
+ this.emitter.emitType(array.indexer.value);
327
+ return {};
328
+ }
329
+ arrayLiteral(array, elementType) {
330
+ return this.emitter.result.none();
331
+ }
332
+ arrayLiteralContext(array) {
333
+ return {};
334
+ }
335
+ arrayLiteralReferenceContext(array) {
336
+ return {};
337
+ }
338
+ scalarDeclaration(scalar, name) {
339
+ if (scalar.baseScalar) {
340
+ this.emitter.emitType(scalar.baseScalar);
341
+ }
342
+ return this.emitter.result.none();
343
+ }
344
+ scalarDeclarationContext(scalar) {
345
+ return {};
346
+ }
347
+ intrinsic(intrinsic, name) {
348
+ return this.emitter.result.none();
349
+ }
350
+ intrinsicContext(intrinsic) {
351
+ return {};
352
+ }
353
+ booleanLiteralContext(boolean) {
354
+ return {};
355
+ }
356
+ booleanLiteral(boolean) {
357
+ return this.emitter.result.none();
358
+ }
359
+ stringLiteralContext(string) {
360
+ return {};
361
+ }
362
+ stringLiteral(string) {
363
+ return this.emitter.result.none();
364
+ }
365
+ numericLiteralContext(number) {
366
+ return {};
367
+ }
368
+ numericLiteral(number) {
369
+ return this.emitter.result.none();
370
+ }
371
+ operationDeclaration(operation, name) {
372
+ this.emitter.emitOperationParameters(operation);
373
+ this.emitter.emitOperationReturnType(operation);
374
+ return this.emitter.result.none();
375
+ }
376
+ operationDeclarationContext(operation) {
377
+ return {};
378
+ }
379
+ operationDeclarationReferenceContext(operation) {
380
+ return {};
381
+ }
382
+ operationParameters(operation, parameters) {
383
+ return this.emitter.result.none();
384
+ }
385
+ operationParametersContext(operation, parameters) {
386
+ return {};
387
+ }
388
+ operationParametersReferenceContext(operation, parameters) {
389
+ return {};
390
+ }
391
+ operationReturnType(operation, returnType) {
392
+ return this.emitter.result.none();
393
+ }
394
+ operationReturnTypeContext(operation, returnType) {
395
+ return {};
396
+ }
397
+ operationReturnTypeReferenceContext(operation, returnType) {
398
+ return {};
399
+ }
400
+ interfaceDeclaration(iface, name) {
401
+ this.emitter.emitInterfaceOperations(iface);
402
+ return this.emitter.result.none();
403
+ }
404
+ interfaceDeclarationContext(iface) {
405
+ return {};
406
+ }
407
+ interfaceDeclarationReferenceContext(iface) {
408
+ return {};
409
+ }
410
+ interfaceDeclarationOperations(iface) {
411
+ for (const op of iface.operations.values()) {
412
+ this.emitter.emitInterfaceOperation(op);
413
+ }
414
+ return this.emitter.result.none();
415
+ }
416
+ interfaceOperationDeclaration(operation, name) {
417
+ this.emitter.emitOperationParameters(operation);
418
+ this.emitter.emitOperationReturnType(operation);
419
+ return this.emitter.result.none();
420
+ }
421
+ interfaceOperationDeclarationContext(operation) {
422
+ return {};
423
+ }
424
+ interfaceOperationDeclarationReferenceContext(operation) {
425
+ return {};
426
+ }
427
+ enumDeclaration(en, name) {
428
+ this.emitter.emitEnumMembers(en);
429
+ return this.emitter.result.none();
430
+ }
431
+ enumDeclarationContext(en) {
432
+ return {};
433
+ }
434
+ enumMembers(en) {
435
+ for (const member of en.members.values()) {
436
+ this.emitter.emitType(member);
437
+ }
438
+ return this.emitter.result.none();
439
+ }
440
+ enumMember(member) {
441
+ return this.emitter.result.none();
442
+ }
443
+ enumMemberContext(member) {
444
+ return {};
445
+ }
446
+ unionDeclaration(union, name) {
447
+ this.emitter.emitUnionVariants(union);
448
+ return this.emitter.result.none();
449
+ }
450
+ unionDeclarationContext(union) {
451
+ return {};
452
+ }
453
+ unionDeclarationReferenceContext(union) {
454
+ return {};
455
+ }
456
+ unionInstantiation(union, name) {
457
+ this.emitter.emitUnionVariants(union);
458
+ return this.emitter.result.none();
459
+ }
460
+ unionInstantiationContext(union) {
461
+ return {};
462
+ }
463
+ unionInstantiationReferenceContext(union) {
464
+ return {};
465
+ }
466
+ unionLiteral(union) {
467
+ this.emitter.emitUnionVariants(union);
468
+ return this.emitter.result.none();
469
+ }
470
+ unionLiteralContext(union) {
471
+ return {};
472
+ }
473
+ unionLiteralReferenceContext(union) {
474
+ return {};
475
+ }
476
+ unionVariants(union) {
477
+ for (const variant of union.variants.values()) {
478
+ this.emitter.emitType(variant);
479
+ }
480
+ return this.emitter.result.none();
481
+ }
482
+ unionVariant(variant) {
483
+ this.emitter.emitTypeReference(variant.type);
484
+ return this.emitter.result.none();
485
+ }
486
+ unionVariantContext(union) {
487
+ return {};
488
+ }
489
+ unionVariantReferenceContext(union) {
490
+ return {};
491
+ }
492
+ tupleLiteral(tuple) {
493
+ this.emitter.emitTupleLiteralValues(tuple);
494
+ return this.emitter.result.none();
495
+ }
496
+ tupleLiteralContext(tuple) {
497
+ return {};
498
+ }
499
+ tupleLiteralValues(tuple) {
500
+ for (const value of tuple.values.values()) {
501
+ this.emitter.emitType(value);
502
+ }
503
+ return this.emitter.result.none();
504
+ }
505
+ tupleLiteralReferenceContext(tuple) {
506
+ return {};
507
+ }
508
+ sourceFile(sourceFile) {
509
+ const emittedSourceFile = {
510
+ path: sourceFile.path,
511
+ contents: "",
512
+ };
513
+ for (const decl of sourceFile.globalScope.declarations) {
514
+ emittedSourceFile.contents += decl.value + "\n";
515
+ }
516
+ return emittedSourceFile;
517
+ }
518
+ reference(targetDeclaration, pathUp, pathDown, commonScope) {
519
+ return this.emitter.result.none();
520
+ }
521
+ declarationName(declarationType) {
522
+ compilerAssert(declarationType.name !== undefined, "Can't emit a declaration that doesn't have a name.");
523
+ if (declarationType.kind === "Enum") {
524
+ return declarationType.name;
525
+ }
526
+ // for operations inside interfaces, we don't want to do the fancy thing because it will make
527
+ // operations inside instantiated interfaces get weird names
528
+ if (declarationType.kind === "Operation" && declarationType.interface) {
529
+ return declarationType.name;
530
+ }
531
+ if (!declarationType.templateMapper) {
532
+ return declarationType.name;
533
+ }
534
+ const parameterNames = declarationType.templateMapper.args.map((t) => {
535
+ switch (t.kind) {
536
+ case "Model":
537
+ case "Scalar":
538
+ case "Interface":
539
+ case "Operation":
540
+ case "Enum":
541
+ case "Union":
542
+ return this.emitter.emitDeclarationName(t);
543
+ default:
544
+ compilerAssert(false, `Can't get a declaration name for non-declaration type ${t.kind} used to instantiate a template.`);
545
+ }
546
+ });
547
+ return declarationType.name + parameterNames.join("");
548
+ }
549
+ }
550
+ /**
551
+ * A subclass of `TypeEmitter<string>` that makes working with strings a bit easier.
552
+ * In particular, when emitting members of a type (`modelProperties`, `enumMembers`, etc.),
553
+ * instead of returning no result, it returns the value of each of the members concatenated
554
+ * by commas. It will also construct references by concatenating namespace elements together
555
+ * with `.` which should work nicely in many object oriented languages.
556
+ */
557
+ export class CodeTypeEmitter extends TypeEmitter {
558
+ modelProperties(model) {
559
+ const builder = new StringBuilder();
560
+ let i = 0;
561
+ for (const prop of model.properties.values()) {
562
+ i++;
563
+ const propVal = this.emitter.emitModelProperty(prop);
564
+ builder.push(code `${propVal}${i < model.properties.size ? "," : ""}`);
565
+ }
566
+ return this.emitter.result.rawCode(builder.reduce());
567
+ }
568
+ interfaceDeclarationOperations(iface) {
569
+ const builder = new StringBuilder();
570
+ let i = 0;
571
+ for (const op of iface.operations.values()) {
572
+ i++;
573
+ builder.push(code `${this.emitter.emitInterfaceOperation(op)}${i < iface.operations.size ? "," : ""}`);
574
+ }
575
+ return builder.reduce();
576
+ }
577
+ enumMembers(en) {
578
+ const builder = new StringBuilder();
579
+ let i = 0;
580
+ for (const enumMember of en.members.values()) {
581
+ i++;
582
+ builder.push(code `${this.emitter.emitType(enumMember)}${i < en.members.size ? "," : ""}`);
583
+ }
584
+ return builder.reduce();
585
+ }
586
+ unionVariants(union) {
587
+ const builder = new StringBuilder();
588
+ let i = 0;
589
+ for (const v of union.variants.values()) {
590
+ i++;
591
+ builder.push(code `${this.emitter.emitType(v)}${i < union.variants.size ? "," : ""}`);
592
+ }
593
+ return builder.reduce();
594
+ }
595
+ tupleLiteralValues(tuple) {
596
+ const builder = new StringBuilder();
597
+ let i = 0;
598
+ for (const v of tuple.values) {
599
+ i++;
600
+ ``;
601
+ builder.push(code `${this.emitter.emitTypeReference(v)}${i < tuple.values.length ? "," : ""}`);
602
+ }
603
+ return builder.reduce();
604
+ }
605
+ reference(targetDeclaration, pathUp, pathDown, commonScope) {
606
+ const basePath = pathDown.map((s) => s.name).join(".");
607
+ return basePath
608
+ ? this.emitter.result.rawCode(basePath + "." + targetDeclaration.name)
609
+ : this.emitter.result.rawCode(targetDeclaration.name);
610
+ }
611
+ }
612
+ //# sourceMappingURL=type-emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"type-emitter.js","sourceRoot":"","sources":["../../emitter-framework/type-emitter.ts"],"names":[],"mappings":"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"}