@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,610 @@
1
+ import { compilerAssert, emitFile, isTemplateDeclaration, joinPaths, } from "../core/index.js";
2
+ import { CustomKeyMap } from "./custom-key-map.js";
3
+ import { Placeholder } from "./placeholder.js";
4
+ import { CircularEmit, Declaration, EmitterResult, NoEmit, RawCode, } from "./types.js";
5
+ export function createAssetEmitter(program, TypeEmitterClass, emitContext) {
6
+ var _a;
7
+ const sourceFiles = [];
8
+ const options = {
9
+ noEmit: (_a = program.compilerOptions.noEmit) !== null && _a !== void 0 ? _a : false,
10
+ emitterOutputDir: emitContext.emitterOutputDir,
11
+ ...emitContext.options,
12
+ };
13
+ const typeId = CustomKeyMap.objectKeyer();
14
+ const contextId = CustomKeyMap.objectKeyer();
15
+ // This is effectively a seen set, ensuring that we don't emit the same
16
+ // type with the same context twice. So the map stores a triple of:
17
+ //
18
+ // 1. the method of TypeEmitter we would call
19
+ // 2. the tsp type we're emitting.
20
+ // 3. the current context.
21
+ //
22
+ // Note that in order for this to work, context needs to be interned so
23
+ // contexts with the same values inside are treated as identical in the
24
+ // map. See createInterner for more details.
25
+ const typeToEmitEntity = new CustomKeyMap(([method, type, context]) => {
26
+ return `${method}-${typeId.getKey(type)}-${contextId.getKey(context)}`;
27
+ });
28
+ // When we encounter a circular reference, this map will hold a callback
29
+ // that should be called when the circularly referenced type has completed
30
+ // its emit.
31
+ const waitingCircularRefs = new CustomKeyMap(([method, type, context]) => {
32
+ return `${method}-${typeId.getKey(type)}-${contextId.getKey(context)}`;
33
+ });
34
+ // Similar to `typeToEmitEntity`, this ensures we don't recompute context
35
+ // for types that we already have context for. Note that context is
36
+ // dependent on the context of the context call, e.g. if a model is
37
+ // referenced with reference context set we need to get its declaration
38
+ // context again. So we use the context's context as a key. Context must
39
+ // be interned, see createInterner for more details.
40
+ const knownContexts = new CustomKeyMap(([type, context]) => {
41
+ return `${typeId.getKey(type)}-${contextId.getKey(context)}`;
42
+ });
43
+ // The stack of types that the currently emitted type is lexically
44
+ // contained in. This gets pushed to when we visit a type that is
45
+ // lexically contained in the current type, and is reset when we jump via
46
+ // reference to another type in a different lexical context. Note that
47
+ // this does not correspond to tsp's lexical nesting, e.g. in the case of
48
+ // an alias to a model expression, the alias is lexically outside the
49
+ // model, but in the type graph we will consider it to be lexically inside
50
+ // whatever references the alias.
51
+ let lexicalTypeStack = [];
52
+ // Internally, context is is split between lexicalContext and
53
+ // referenceContext because when a reference is made, we carry over
54
+ // referenceContext but leave lexical context behind. When context is
55
+ // accessed by the user, they are merged by getContext().
56
+ let context = {
57
+ lexicalContext: {},
58
+ referenceContext: {},
59
+ };
60
+ let programContext = null;
61
+ let incomingReferenceContext = null;
62
+ const interner = createInterner();
63
+ const assetEmitter = {
64
+ getContext() {
65
+ return {
66
+ ...context.lexicalContext,
67
+ ...context.referenceContext,
68
+ };
69
+ },
70
+ getOptions() {
71
+ return options;
72
+ },
73
+ getProgram() {
74
+ return program;
75
+ },
76
+ result: {
77
+ declaration(name, value) {
78
+ const scope = currentScope();
79
+ compilerAssert(scope, "Emit context must have a scope set in order to create declarations. Consider setting scope to a new source file's global scope in the `programContext` method of `TypeEmitter`.");
80
+ return new Declaration(name, scope, value);
81
+ },
82
+ rawCode(value) {
83
+ return new RawCode(value);
84
+ },
85
+ none() {
86
+ return new NoEmit();
87
+ },
88
+ },
89
+ createScope(block, name, parentScope = null) {
90
+ let newScope;
91
+ if (!parentScope) {
92
+ // create source file scope
93
+ newScope = {
94
+ kind: "sourceFile",
95
+ name,
96
+ sourceFile: block,
97
+ parentScope,
98
+ childScopes: [],
99
+ declarations: [],
100
+ };
101
+ }
102
+ else {
103
+ newScope = {
104
+ kind: "namespace",
105
+ name,
106
+ namespace: block,
107
+ childScopes: [],
108
+ declarations: [],
109
+ parentScope,
110
+ };
111
+ }
112
+ parentScope === null || parentScope === void 0 ? void 0 : parentScope.childScopes.push(newScope);
113
+ return newScope; // the overload of createScope causes type weirdness
114
+ },
115
+ createSourceFile(path) {
116
+ const basePath = options.emitterOutputDir;
117
+ const sourceFile = {
118
+ globalScope: undefined,
119
+ path: joinPaths(basePath, path),
120
+ imports: new Map(),
121
+ };
122
+ sourceFile.globalScope = this.createScope(sourceFile, "");
123
+ sourceFiles.push(sourceFile);
124
+ return sourceFile;
125
+ },
126
+ emitTypeReference(target) {
127
+ var _a;
128
+ if (target.kind === "ModelProperty") {
129
+ return invokeTypeEmitter("modelPropertyReference", target);
130
+ }
131
+ incomingReferenceContext = (_a = context.referenceContext) !== null && _a !== void 0 ? _a : null;
132
+ const entity = this.emitType(target);
133
+ let placeholder = null;
134
+ if (entity.kind === "circular") {
135
+ let waiting = waitingCircularRefs.get(entity.emitEntityKey);
136
+ if (!waiting) {
137
+ waiting = [];
138
+ waitingCircularRefs.set(entity.emitEntityKey, waiting);
139
+ }
140
+ waiting.push({
141
+ state: {
142
+ lexicalTypeStack,
143
+ context,
144
+ },
145
+ cb: (entity) => invokeReference(this, entity),
146
+ });
147
+ placeholder = new Placeholder();
148
+ return this.result.rawCode(placeholder);
149
+ }
150
+ else {
151
+ return invokeReference(this, entity);
152
+ }
153
+ function invokeReference(assetEmitter, entity) {
154
+ var _a;
155
+ if (entity.kind !== "declaration") {
156
+ return entity;
157
+ }
158
+ const scope = currentScope();
159
+ compilerAssert(scope, "Emit context must have a scope set in order to create references to declarations.");
160
+ const targetScope = entity.scope;
161
+ const targetChain = scopeChain(targetScope);
162
+ const currentChain = scopeChain(scope);
163
+ let diffStart = 0;
164
+ while (targetChain[diffStart] &&
165
+ currentChain[diffStart] &&
166
+ targetChain[diffStart] === currentChain[diffStart]) {
167
+ diffStart++;
168
+ }
169
+ const pathUp = currentChain.slice(diffStart);
170
+ const pathDown = targetChain.slice(diffStart);
171
+ let ref = typeEmitter.reference(entity, pathUp, pathDown, (_a = targetChain[diffStart - 1]) !== null && _a !== void 0 ? _a : null);
172
+ if (!(ref instanceof EmitterResult)) {
173
+ ref = assetEmitter.result.rawCode(ref);
174
+ }
175
+ if (placeholder) {
176
+ // this should never happen as this function shouldn't be called until
177
+ // the target declaration is finished being emitted.
178
+ compilerAssert(ref.kind !== "circular", "TypeEmitter `reference` returned circular emit");
179
+ // this could presumably be allowed if we want.
180
+ compilerAssert(ref.kind === "none" || !(ref.value instanceof Placeholder), "TypeEmitter's `reference` method cannot return a placeholder.");
181
+ switch (ref.kind) {
182
+ case "code":
183
+ case "declaration":
184
+ placeholder.setValue(ref.value);
185
+ break;
186
+ case "none":
187
+ // this cast is incorrect, think about what should happen
188
+ // if reference returns noEmit...
189
+ placeholder.setValue("");
190
+ break;
191
+ }
192
+ }
193
+ return ref;
194
+ }
195
+ function scopeChain(scope) {
196
+ const chain = [];
197
+ while (scope) {
198
+ chain.unshift(scope);
199
+ scope = scope.parentScope;
200
+ }
201
+ return chain;
202
+ }
203
+ },
204
+ emitDeclarationName(type) {
205
+ return typeEmitter.declarationName(type);
206
+ },
207
+ async writeOutput() {
208
+ for (const file of sourceFiles) {
209
+ const outputFile = typeEmitter.sourceFile(file);
210
+ await emitFile(program, {
211
+ path: outputFile.path,
212
+ content: outputFile.contents,
213
+ });
214
+ }
215
+ },
216
+ emitType(type) {
217
+ const key = typeEmitterKey(type);
218
+ let args;
219
+ switch (key) {
220
+ case "scalarDeclaration":
221
+ case "modelDeclaration":
222
+ case "modelInstantiation":
223
+ case "operationDeclaration":
224
+ case "interfaceDeclaration":
225
+ case "interfaceOperationDeclaration":
226
+ case "enumDeclaration":
227
+ case "unionDeclaration":
228
+ case "unionInstantiation":
229
+ const declarationName = typeEmitter.declarationName(type);
230
+ args = [declarationName];
231
+ break;
232
+ case "arrayDeclaration":
233
+ const arrayDeclName = typeEmitter.declarationName(type);
234
+ const arrayDeclElement = type.indexer.value;
235
+ args = [arrayDeclName, arrayDeclElement];
236
+ break;
237
+ case "arrayLiteral":
238
+ const arrayLiteralElement = type.indexer.value;
239
+ args = [arrayLiteralElement];
240
+ break;
241
+ case "intrinsic":
242
+ args = [type.name];
243
+ break;
244
+ default:
245
+ args = [];
246
+ }
247
+ const result = invokeTypeEmitter(key, type, ...args);
248
+ return result;
249
+ },
250
+ emitProgram(options) {
251
+ const namespace = program.getGlobalNamespaceType();
252
+ if (options === null || options === void 0 ? void 0 : options.emitGlobalNamespace) {
253
+ this.emitType(namespace);
254
+ return;
255
+ }
256
+ for (const ns of namespace.namespaces.values()) {
257
+ if (ns.name === "TypeSpec" && !(options === null || options === void 0 ? void 0 : options.emitTypeSpecNamespace))
258
+ continue;
259
+ this.emitType(ns);
260
+ }
261
+ for (const model of namespace.models.values()) {
262
+ if (!isTemplateDeclaration(model)) {
263
+ this.emitType(model);
264
+ }
265
+ }
266
+ for (const operation of namespace.operations.values()) {
267
+ if (!isTemplateDeclaration(operation)) {
268
+ this.emitType(operation);
269
+ }
270
+ }
271
+ for (const enumeration of namespace.enums.values()) {
272
+ this.emitType(enumeration);
273
+ }
274
+ for (const union of namespace.unions.values()) {
275
+ if (!isTemplateDeclaration(union)) {
276
+ this.emitType(union);
277
+ }
278
+ }
279
+ for (const iface of namespace.interfaces.values()) {
280
+ if (!isTemplateDeclaration(iface)) {
281
+ this.emitType(iface);
282
+ }
283
+ }
284
+ },
285
+ emitModelProperties(model) {
286
+ const res = typeEmitter.modelProperties(model);
287
+ if (res instanceof EmitterResult) {
288
+ return res;
289
+ }
290
+ else {
291
+ return this.result.rawCode(res);
292
+ }
293
+ },
294
+ emitModelProperty(property) {
295
+ return invokeTypeEmitter("modelPropertyLiteral", property);
296
+ },
297
+ emitOperationParameters(operation) {
298
+ return invokeTypeEmitter("operationParameters", operation, operation.parameters);
299
+ },
300
+ emitOperationReturnType(operation) {
301
+ return invokeTypeEmitter("operationReturnType", operation, operation.returnType);
302
+ },
303
+ emitInterfaceOperations(iface) {
304
+ return invokeTypeEmitter("interfaceDeclarationOperations", iface);
305
+ },
306
+ emitInterfaceOperation(operation) {
307
+ const name = typeEmitter.declarationName(operation);
308
+ return invokeTypeEmitter("interfaceOperationDeclaration", operation, name);
309
+ },
310
+ emitEnumMembers(en) {
311
+ return invokeTypeEmitter("enumMembers", en);
312
+ },
313
+ emitUnionVariants(union) {
314
+ return invokeTypeEmitter("unionVariants", union);
315
+ },
316
+ emitTupleLiteralValues(tuple) {
317
+ return invokeTypeEmitter("tupleLiteralValues", tuple);
318
+ },
319
+ };
320
+ const typeEmitter = new TypeEmitterClass(assetEmitter);
321
+ return assetEmitter;
322
+ /**
323
+ * This function takes care of calling a method on the TypeEmitter to
324
+ * convert it to some emitted output. It will return a cached type if we
325
+ * have seen it before (and the context is the same). It will establish
326
+ * the emit context by calling the appropriate methods before getting the
327
+ * emit result. Also if a type emitter returns just a T or a
328
+ * Placeholder<T>, it will convert that to a RawCode result.
329
+ */
330
+ function invokeTypeEmitter(method, ...args) {
331
+ const type = args[0];
332
+ let entity;
333
+ let emitEntityKey;
334
+ let cached = false;
335
+ withTypeContext(type, () => {
336
+ emitEntityKey = [method, type, context];
337
+ const seenEmitEntity = typeToEmitEntity.get(emitEntityKey);
338
+ if (seenEmitEntity) {
339
+ entity = seenEmitEntity;
340
+ cached = true;
341
+ return;
342
+ }
343
+ typeToEmitEntity.set(emitEntityKey, new CircularEmit(emitEntityKey));
344
+ compilerAssert(typeEmitter[method], `TypeEmitter doesn't have a method named ${method}.`);
345
+ entity = liftToRawCode(typeEmitter[method](...args));
346
+ });
347
+ if (cached) {
348
+ return entity;
349
+ }
350
+ if (entity instanceof Placeholder) {
351
+ entity.onValue((v) => handleCompletedEntity(v));
352
+ return entity;
353
+ }
354
+ handleCompletedEntity(entity);
355
+ return entity;
356
+ function handleCompletedEntity(entity) {
357
+ typeToEmitEntity.set(emitEntityKey, entity);
358
+ const waitingRefCbs = waitingCircularRefs.get(emitEntityKey);
359
+ if (waitingRefCbs) {
360
+ for (const record of waitingRefCbs) {
361
+ withContext(record.state, () => {
362
+ record.cb(entity);
363
+ });
364
+ }
365
+ waitingCircularRefs.set(emitEntityKey, []);
366
+ }
367
+ if (entity.kind === "declaration") {
368
+ entity.scope.declarations.push(entity);
369
+ }
370
+ }
371
+ function liftToRawCode(value) {
372
+ if (value instanceof EmitterResult) {
373
+ return value;
374
+ }
375
+ return assetEmitter.result.rawCode(value);
376
+ }
377
+ }
378
+ /**
379
+ * This helper takes a type and sets the `context` state to what it should
380
+ * be in order to invoke the type emitter method for that type. This needs
381
+ * to take into account the current context and any incoming reference
382
+ * context.
383
+ */
384
+ function setContextForType(type) {
385
+ let newTypeStack;
386
+ // if we've walked into a new declaration, reset the lexical type stack
387
+ // to the lexical containers of the current type.
388
+ if (isDeclaration(type)) {
389
+ newTypeStack = [type];
390
+ let ns = type.namespace;
391
+ while (ns) {
392
+ if (ns.name === "")
393
+ break;
394
+ newTypeStack.unshift(ns);
395
+ ns = ns.namespace;
396
+ }
397
+ }
398
+ else {
399
+ newTypeStack = [...lexicalTypeStack, type];
400
+ }
401
+ lexicalTypeStack = newTypeStack;
402
+ if (!programContext) {
403
+ programContext = interner.intern({
404
+ lexicalContext: typeEmitter.programContext(program),
405
+ referenceContext: interner.intern({}),
406
+ });
407
+ }
408
+ // Establish our context by starting from program and walking up the type stack
409
+ // and merging in context for each of the lexical containers.
410
+ context = programContext;
411
+ for (const contextChainEntry of lexicalTypeStack) {
412
+ // when we're at the top of the lexical context stack (i.e. we are back
413
+ // to the type we passed in), bring in any incoming reference context.
414
+ if (contextChainEntry === type && incomingReferenceContext) {
415
+ context = interner.intern({
416
+ lexicalContext: context.lexicalContext,
417
+ referenceContext: interner.intern({
418
+ ...context.referenceContext,
419
+ ...incomingReferenceContext,
420
+ }),
421
+ });
422
+ incomingReferenceContext = null;
423
+ }
424
+ const seenContext = knownContexts.get([contextChainEntry, context]);
425
+ if (seenContext) {
426
+ context = seenContext;
427
+ continue;
428
+ }
429
+ // invoke the context methods
430
+ const key = typeEmitterKey(contextChainEntry);
431
+ const lexicalKey = key + "Context";
432
+ const referenceKey = typeEmitterKey(contextChainEntry) + "ReferenceContext";
433
+ compilerAssert(typeEmitter[lexicalKey], `TypeEmitter doesn't have a method named ${lexicalKey}`);
434
+ const newContext = typeEmitter[lexicalKey](contextChainEntry);
435
+ const newReferenceContext = keyHasReferenceContext(key)
436
+ ? typeEmitter[referenceKey](contextChainEntry)
437
+ : {};
438
+ // assemble our new reference and lexical contexts.
439
+ const newContextState = interner.intern({
440
+ lexicalContext: interner.intern({
441
+ ...context.lexicalContext,
442
+ ...newContext,
443
+ }),
444
+ referenceContext: interner.intern({
445
+ ...context.referenceContext,
446
+ ...newReferenceContext,
447
+ }),
448
+ });
449
+ knownContexts.set([contextChainEntry, context], newContextState);
450
+ context = newContextState;
451
+ }
452
+ }
453
+ /**
454
+ * Invoke the callback with the proper context for a given type.
455
+ */
456
+ function withTypeContext(type, cb) {
457
+ const oldContext = context;
458
+ const oldTypeStack = lexicalTypeStack;
459
+ setContextForType(type);
460
+ cb();
461
+ context = oldContext;
462
+ lexicalTypeStack = oldTypeStack;
463
+ }
464
+ /**
465
+ * Invoke the callback with the given context.
466
+ */
467
+ function withContext(newContext, cb) {
468
+ const oldContext = newContext.context;
469
+ const oldTypeStack = newContext.lexicalTypeStack;
470
+ context = newContext.context;
471
+ lexicalTypeStack = newContext.lexicalTypeStack;
472
+ cb();
473
+ context = oldContext;
474
+ lexicalTypeStack = oldTypeStack;
475
+ }
476
+ function typeEmitterKey(type) {
477
+ switch (type.kind) {
478
+ case "Model":
479
+ if (program.checker.isStdType(type) && type.name === "Array") {
480
+ // likely an array literal, though could be a bare reference to Array maybe?
481
+ return "arrayLiteral";
482
+ }
483
+ if (type.name === "") {
484
+ return "modelLiteral";
485
+ }
486
+ if (type.templateMapper) {
487
+ return "modelInstantiation";
488
+ }
489
+ if (type.indexer && type.indexer.key.name === "integer") {
490
+ return "arrayDeclaration";
491
+ }
492
+ return "modelDeclaration";
493
+ case "Namespace":
494
+ return "namespace";
495
+ case "ModelProperty":
496
+ return "modelPropertyLiteral";
497
+ case "Boolean":
498
+ return "booleanLiteral";
499
+ case "String":
500
+ return "stringLiteral";
501
+ case "Number":
502
+ return "numericLiteral";
503
+ case "Operation":
504
+ if (type.interface) {
505
+ return "interfaceOperationDeclaration";
506
+ }
507
+ else {
508
+ return "operationDeclaration";
509
+ }
510
+ case "Interface":
511
+ return "interfaceDeclaration";
512
+ case "Enum":
513
+ return "enumDeclaration";
514
+ case "EnumMember":
515
+ return "enumMember";
516
+ case "Union":
517
+ if (!type.name) {
518
+ return "unionLiteral";
519
+ }
520
+ if (type.templateMapper) {
521
+ return "unionInstantiation";
522
+ }
523
+ return "unionDeclaration";
524
+ case "UnionVariant":
525
+ return "unionVariant";
526
+ case "Tuple":
527
+ return "tupleLiteral";
528
+ case "Scalar":
529
+ return "scalarDeclaration";
530
+ case "Intrinsic":
531
+ return "intrinsic";
532
+ default:
533
+ compilerAssert(false, `Encountered type ${type.kind} which we don't know how to emit.`);
534
+ }
535
+ }
536
+ function currentScope() {
537
+ var _a, _b, _c, _d;
538
+ return (_d = (_b = (_a = context.referenceContext) === null || _a === void 0 ? void 0 : _a.scope) !== null && _b !== void 0 ? _b : (_c = context.lexicalContext) === null || _c === void 0 ? void 0 : _c.scope) !== null && _d !== void 0 ? _d : null;
539
+ }
540
+ }
541
+ function isDeclaration(type) {
542
+ switch (type.kind) {
543
+ case "Namespace":
544
+ case "Interface":
545
+ case "Enum":
546
+ case "Operation":
547
+ case "Scalar":
548
+ return true;
549
+ case "Model":
550
+ return type.name ? type.name !== "" && type.name !== "Array" : false;
551
+ case "Union":
552
+ return type.name ? type.name !== "" : false;
553
+ default:
554
+ return false;
555
+ }
556
+ }
557
+ /**
558
+ * An interner takes an object and returns either that same object, or a
559
+ * previously seen object that has the identical shape.
560
+ *
561
+ * This implementation is EXTREMELY non-optimal (O(n*m) where n = number of unique
562
+ * state objects and m = the number of properties a state object contains). This
563
+ * will very quickly be a bottleneck. That said, the common case is no state at
564
+ * all, and also this is essentially implementing records and tuples, so could
565
+ * probably adopt those when they are released. That that said, the records and
566
+ * tuples are presently facing headwinds due to implementations facing exactly
567
+ * these performance characteristics. Regardless, there are optimizations we
568
+ * could consider.
569
+ */
570
+ function createInterner() {
571
+ const emptyObject = {};
572
+ const knownObjects = new Set();
573
+ return {
574
+ intern(object) {
575
+ const keyLen = Object.keys(object).length;
576
+ if (keyLen === 0)
577
+ return emptyObject;
578
+ for (const ko of knownObjects) {
579
+ const entries = Object.entries(ko);
580
+ if (entries.length !== keyLen)
581
+ continue;
582
+ let found = true;
583
+ for (const [key, value] of entries) {
584
+ if (object[key] !== value) {
585
+ found = false;
586
+ break;
587
+ }
588
+ }
589
+ if (found) {
590
+ return ko;
591
+ }
592
+ }
593
+ knownObjects.add(object);
594
+ return object;
595
+ },
596
+ };
597
+ }
598
+ const noReferenceContext = new Set([
599
+ "booleanLiteral",
600
+ "stringLiteral",
601
+ "numericLiteral",
602
+ "scalarDeclaration",
603
+ "enumDeclaration",
604
+ "enumMember",
605
+ "intrinsic",
606
+ ]);
607
+ function keyHasReferenceContext(key) {
608
+ return !noReferenceContext.has(key);
609
+ }
610
+ //# sourceMappingURL=asset-emitter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"asset-emitter.js","sourceRoot":"","sources":["../../emitter-framework/asset-emitter.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Placeholder } from "../placeholder.js";
2
+ import { EmitEntity } from "../types.js";
3
+ export declare class ArrayBuilder<T> extends Array {
4
+ #private;
5
+ push(...values: (EmitEntity<T> | Placeholder<T> | T)[]): number;
6
+ }
7
+ //# sourceMappingURL=array-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"array-builder.d.ts","sourceRoot":"","sources":["../../../emitter-framework/builders/array-builder.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAiB,MAAM,aAAa,CAAC;AAExD,qBAAa,YAAY,CAAC,CAAC,CAAE,SAAQ,KAAK;;IASxC,IAAI,CAAC,GAAG,MAAM,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,MAAM;CAwBhE"}