@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,523 @@
1
+ import { finishTypeForProgram } from "./checker.js";
2
+ import { compilerAssert } from "./diagnostics.js";
3
+ import { createStateAccessors, isProjectedProgram } from "./program.js";
4
+ import { getParentTemplateNode, isNeverType, isTemplateInstance } from "./type-utils.js";
5
+ import { mutate } from "./util.js";
6
+ /**
7
+ * Creates a projector which returns a projected view of either the global namespace or the
8
+ * start node provided. Projecting a type effectively clones every type referenced underneath
9
+ * it. This is accomplished by doing a semantic walk of each type, cloning each type we find,
10
+ * and running projection code on the clone.
11
+ *
12
+ * Projectors can run multiple projections at once. In such cases, each projection is run
13
+ * on the same clone of the unprojected type. It is up to projections and the user to ensure
14
+ * that projections which depend on a particular shape are run when that shape is present (or
15
+ * else to ensure that their projections are tolerant to shape changes).
16
+ *
17
+ * The projector maintains its own state maps and sets. If a projection is active (i.e.
18
+ * program.currentProjector is set), then the projector's state will be returned instead
19
+ * of the program's state. This ensures that there is no overlap between projected and
20
+ * unprojected state. It also means that you cannot get state for nodes that are not
21
+ * part of the active projection.
22
+ *
23
+ * Note that decorators are run on namespaces prior to cloning any child types to align
24
+ * with the checker semantics, while projections are run after everything under the namespace
25
+ * is cloned. All other run decorators and projections after all child types are cloned and
26
+ * have their decorators run.
27
+ */
28
+ export function createProjector(program, projections, startNode) {
29
+ const projectedTypes = new Map();
30
+ const checker = program.checker;
31
+ const neverType = checker.neverType;
32
+ const scope = [];
33
+ const projector = {
34
+ projectedTypes,
35
+ projections,
36
+ projectType,
37
+ parentProjector: isProjectedProgram(program) ? program.projector : undefined,
38
+ };
39
+ const projectedNamespaces = [];
40
+ let projectingNamespaces = false;
41
+ const projectedProgram = {
42
+ ...program,
43
+ getGlobalNamespaceType: () => projector.projectedGlobalNamespace,
44
+ projector,
45
+ ...createStateAccessors(program.stateMaps, program.stateSets, projector),
46
+ };
47
+ const targetGlobalNs = startNode
48
+ ? startNode.projector
49
+ ? startNode.projector.projectedGlobalNamespace
50
+ : program.checker.getGlobalNamespaceType()
51
+ : program.checker.getGlobalNamespaceType();
52
+ projectingNamespaces = true;
53
+ // Project the global namespace to get a reference.
54
+ projector.projectedGlobalNamespace = projectNamespace(targetGlobalNs, false);
55
+ // Then project the content
56
+ projectSubNamespaces(targetGlobalNs, projector.projectedGlobalNamespace);
57
+ projectingNamespaces = false;
58
+ // then project all the types
59
+ for (const ns of projectedNamespaces) {
60
+ projectNamespaceContents(ns);
61
+ }
62
+ projectType(targetGlobalNs);
63
+ projector.projectedStartNode = startNode
64
+ ? projectedTypes.get(startNode)
65
+ : projector.projectedGlobalNamespace;
66
+ return projectedProgram;
67
+ function projectType(type) {
68
+ if (projectedTypes.has(type)) {
69
+ return projectedTypes.get(type);
70
+ }
71
+ scope.push(type);
72
+ let projected;
73
+ switch (type.kind) {
74
+ case "Namespace":
75
+ compilerAssert(projectingNamespaces, `Namespace ${type.name} should have already been projected.`);
76
+ projected = projectNamespace(type, false);
77
+ break;
78
+ case "Scalar":
79
+ projected = projectScalar(type);
80
+ break;
81
+ case "Model":
82
+ projected = projectModel(type);
83
+ break;
84
+ case "ModelProperty":
85
+ projected = projectModelProperty(type);
86
+ break;
87
+ case "Operation":
88
+ projected = projectOperation(type);
89
+ break;
90
+ case "Interface":
91
+ projected = projectInterface(type);
92
+ break;
93
+ case "Union":
94
+ projected = projectUnion(type);
95
+ break;
96
+ case "UnionVariant":
97
+ projected = projectUnionVariant(type);
98
+ break;
99
+ case "Tuple":
100
+ projected = projectTuple(type);
101
+ break;
102
+ case "Enum":
103
+ projected = projectEnum(type);
104
+ break;
105
+ case "EnumMember":
106
+ projected = projectEnumMember(type);
107
+ break;
108
+ default:
109
+ projected = type;
110
+ }
111
+ scope.pop();
112
+ return projected;
113
+ }
114
+ function projectSubNamespaces(ns, projectedNs) {
115
+ if (ns.namespaces.size === projectedNs.namespaces.size) {
116
+ // Sub namespace should already have been projected.
117
+ return;
118
+ }
119
+ for (const [key, childNs] of ns.namespaces) {
120
+ const projected = projectNamespace(childNs);
121
+ if (projected.kind === "Namespace") {
122
+ // todo: check for never?
123
+ projectedNs.namespaces.set(key, projected);
124
+ }
125
+ }
126
+ }
127
+ function projectNamespace(ns, projectSubNamespace = true) {
128
+ const alreadyProjected = projectedTypes.get(ns);
129
+ if (alreadyProjected) {
130
+ if (projectSubNamespace) {
131
+ projectSubNamespaces(ns, alreadyProjected);
132
+ }
133
+ return alreadyProjected;
134
+ }
135
+ const projectedNs = shallowClone(ns, {
136
+ namespaces: new Map(),
137
+ scalars: new Map(),
138
+ models: new Map(),
139
+ operations: new Map(),
140
+ interfaces: new Map(),
141
+ unions: new Map(),
142
+ enums: new Map(),
143
+ decorators: [],
144
+ });
145
+ projectedNs.decorators = projectDecorators(ns.decorators);
146
+ if (ns.namespace) {
147
+ projectedNs.namespace = projectNamespace(ns.namespace, false);
148
+ }
149
+ // ns run decorators before projecting anything inside them
150
+ finishTypeForProgram(projectedProgram, projectedNs);
151
+ if (projectSubNamespace) {
152
+ projectSubNamespaces(ns, projectedNs);
153
+ }
154
+ projectedNamespaces.push(ns);
155
+ return applyProjection(ns, projectedNs);
156
+ }
157
+ /**
158
+ * Projects the contents of a namespace, but not the namespace itself. The namespace itself
159
+ * is projected in an earlier phase.
160
+ */
161
+ function projectNamespaceContents(ns) {
162
+ const projectedNs = projectedTypes.get(ns);
163
+ compilerAssert(projectedNs, "Should have projected namespace by now");
164
+ if (projectedNs.kind !== "Namespace") {
165
+ // we projected the namespace to something else so don't do any more work.
166
+ // this might happen if a namespace itself was added/removed/etc. and is
167
+ // projected to never.
168
+ return neverType;
169
+ }
170
+ for (const childModel of ns.models.values()) {
171
+ const projected = projectType(childModel);
172
+ if (projected.kind === "Model") {
173
+ projectedNs.models.set(projected.name, projected);
174
+ }
175
+ }
176
+ for (const scalar of ns.scalars.values()) {
177
+ const projected = projectType(scalar);
178
+ if (projected.kind === "Scalar") {
179
+ projectedNs.scalars.set(projected.name, projected);
180
+ }
181
+ }
182
+ for (const childOperation of ns.operations.values()) {
183
+ const projected = projectType(childOperation);
184
+ if (projected.kind === "Operation") {
185
+ projectedNs.operations.set(projected.name, projected);
186
+ }
187
+ }
188
+ for (const childInterface of ns.interfaces.values()) {
189
+ const projected = projectType(childInterface);
190
+ if (projected.kind === "Interface") {
191
+ projectedNs.interfaces.set(projected.name, projected);
192
+ }
193
+ }
194
+ for (const childUnion of ns.unions.values()) {
195
+ const projected = projectType(childUnion);
196
+ if (projected.kind === "Union") {
197
+ projectedNs.unions.set(projected.name, projected);
198
+ }
199
+ }
200
+ for (const childEnum of ns.enums.values()) {
201
+ const projected = projectType(childEnum);
202
+ if (projected.kind === "Enum") {
203
+ projectedNs.enums.set(projected.name, projected);
204
+ }
205
+ }
206
+ return projectedNs;
207
+ }
208
+ function projectModel(model) {
209
+ var _a;
210
+ var _b;
211
+ const properties = new Map();
212
+ const projectedModel = shallowClone(model, {
213
+ properties,
214
+ derivedModels: [],
215
+ });
216
+ if (model.templateMapper) {
217
+ projectedModel.templateMapper = projectTemplateMapper(model.templateMapper);
218
+ projectedModel.templateArguments = mutate(projectedModel.templateMapper.args);
219
+ }
220
+ if (model.baseModel) {
221
+ projectedModel.baseModel = projectType(model.baseModel);
222
+ }
223
+ if (model.indexer) {
224
+ projectedModel.indexer = {
225
+ key: projectType(model.indexer.key),
226
+ value: projectType(model.indexer.value),
227
+ };
228
+ }
229
+ projectedTypes.set(model, projectedModel);
230
+ for (const [key, prop] of model.properties) {
231
+ const projectedProp = projectType(prop);
232
+ if (projectedProp.kind === "ModelProperty") {
233
+ properties.set(key, projectedProp);
234
+ }
235
+ }
236
+ projectedModel.decorators = projectDecorators(model.decorators);
237
+ if (shouldFinishType(model)) {
238
+ finishTypeForProgram(projectedProgram, projectedModel);
239
+ }
240
+ const projectedResult = applyProjection(model, projectedModel);
241
+ if (!isNeverType(projectedResult) &&
242
+ projectedResult.kind === "Model" &&
243
+ projectedResult.baseModel) {
244
+ (_a = (_b = projectedResult.baseModel).derivedModels) !== null && _a !== void 0 ? _a : (_b.derivedModels = []);
245
+ projectedResult.baseModel.derivedModels.push(projectedModel);
246
+ }
247
+ return projectedResult;
248
+ }
249
+ function projectTemplateMapper(mapper) {
250
+ const projectedMapper = {
251
+ ...mapper,
252
+ args: [],
253
+ map: new Map(),
254
+ };
255
+ for (const arg of mapper.args) {
256
+ mutate(projectedMapper.args).push(projectType(arg));
257
+ }
258
+ for (const [param, type] of mapper.map) {
259
+ projectedMapper.map.set(param, projectType(type));
260
+ }
261
+ return projectedMapper;
262
+ }
263
+ function projectScalar(scalar) {
264
+ var _a;
265
+ var _b;
266
+ const projectedScalar = shallowClone(scalar, {
267
+ derivedScalars: [],
268
+ });
269
+ if (scalar.templateMapper) {
270
+ projectedScalar.templateMapper = projectTemplateMapper(scalar.templateMapper);
271
+ projectedScalar.templateArguments = mutate(projectedScalar.templateMapper.args);
272
+ }
273
+ if (scalar.baseScalar) {
274
+ projectedScalar.baseScalar = projectType(scalar.baseScalar);
275
+ }
276
+ projectedTypes.set(scalar, projectedScalar);
277
+ projectedScalar.decorators = projectDecorators(scalar.decorators);
278
+ if (shouldFinishType(scalar)) {
279
+ finishTypeForProgram(projectedProgram, projectedScalar);
280
+ }
281
+ const projectedResult = applyProjection(scalar, projectedScalar);
282
+ if (!isNeverType(projectedResult) &&
283
+ projectedResult.kind === "Scalar" &&
284
+ projectedResult.baseScalar) {
285
+ (_a = (_b = projectedResult.baseScalar).derivedScalars) !== null && _a !== void 0 ? _a : (_b.derivedScalars = []);
286
+ projectedResult.baseScalar.derivedScalars.push(projectedScalar);
287
+ }
288
+ return projectedResult;
289
+ }
290
+ /**
291
+ * Returns true if we should finish a type. The only time we don't finish is when it's
292
+ * a template type, because we don't want to run decorators for templates.
293
+ */
294
+ function shouldFinishType(type) {
295
+ const parentTemplate = getParentTemplateNode(type.node);
296
+ return !parentTemplate || isTemplateInstance(type);
297
+ }
298
+ function projectModelProperty(prop) {
299
+ const projectedType = projectType(prop.type);
300
+ const projectedDecs = projectDecorators(prop.decorators);
301
+ const projectedProp = shallowClone(prop, {
302
+ type: projectedType,
303
+ decorators: projectedDecs,
304
+ });
305
+ if (prop.sourceProperty) {
306
+ const sourceProperty = projectType(prop.sourceProperty);
307
+ projectedProp.sourceProperty = sourceProperty;
308
+ }
309
+ if (shouldFinishType(prop)) {
310
+ finishTypeForProgram(projectedProgram, projectedProp);
311
+ }
312
+ if (prop.model) {
313
+ projectedProp.model = projectType(prop.model);
314
+ }
315
+ return projectedProp;
316
+ }
317
+ function projectOperation(op) {
318
+ const parameters = projectType(op.parameters);
319
+ const returnType = projectType(op.returnType);
320
+ const decorators = projectDecorators(op.decorators);
321
+ const projectedOp = shallowClone(op, {
322
+ decorators,
323
+ parameters,
324
+ returnType,
325
+ });
326
+ if (op.templateMapper) {
327
+ projectedOp.templateMapper = projectTemplateMapper(op.templateMapper);
328
+ projectedOp.templateArguments = mutate(projectedOp.templateMapper.args);
329
+ }
330
+ if (op.namespace) {
331
+ projectedOp.namespace = projectedNamespaceScope();
332
+ }
333
+ finishTypeForProgram(projectedProgram, projectedOp);
334
+ if (op.interface) {
335
+ projectedOp.interface = projectType(op.interface);
336
+ }
337
+ return applyProjection(op, projectedOp);
338
+ }
339
+ function projectInterface(iface) {
340
+ const operations = new Map();
341
+ const decorators = projectDecorators(iface.decorators);
342
+ const projectedIface = shallowClone(iface, {
343
+ decorators,
344
+ operations,
345
+ });
346
+ if (iface.templateMapper) {
347
+ projectedIface.templateMapper = projectTemplateMapper(iface.templateMapper);
348
+ projectedIface.templateArguments = mutate(projectedIface.templateMapper.args);
349
+ }
350
+ for (const op of iface.operations.values()) {
351
+ const projectedOp = projectType(op);
352
+ if (projectedOp.kind === "Operation") {
353
+ operations.set(projectedOp.name, projectedOp);
354
+ }
355
+ }
356
+ if (shouldFinishType(iface)) {
357
+ finishTypeForProgram(projectedProgram, projectedIface);
358
+ }
359
+ return applyProjection(iface, projectedIface);
360
+ }
361
+ function projectUnion(union) {
362
+ const variants = new Map();
363
+ const decorators = projectDecorators(union.decorators);
364
+ const projectedUnion = shallowClone(union, {
365
+ decorators,
366
+ variants,
367
+ });
368
+ if (union.templateMapper) {
369
+ projectedUnion.templateMapper = projectTemplateMapper(union.templateMapper);
370
+ projectedUnion.templateArguments = mutate(projectedUnion.templateMapper.args);
371
+ }
372
+ for (const [key, variant] of union.variants) {
373
+ const projectedVariant = projectType(variant);
374
+ if (projectedVariant.kind === "UnionVariant" && projectedVariant.type !== neverType) {
375
+ variants.set(key, projectedVariant);
376
+ }
377
+ }
378
+ if (shouldFinishType(union)) {
379
+ finishTypeForProgram(projectedProgram, projectedUnion);
380
+ }
381
+ return applyProjection(union, projectedUnion);
382
+ }
383
+ function projectUnionVariant(variant) {
384
+ const projectedType = projectType(variant.type);
385
+ const projectedDecs = projectDecorators(variant.decorators);
386
+ const projectedVariant = shallowClone(variant, {
387
+ type: projectedType,
388
+ decorators: projectedDecs,
389
+ });
390
+ finishTypeForProgram(projectedProgram, projectedVariant);
391
+ projectedVariant.union = projectType(variant.union);
392
+ return projectedVariant;
393
+ }
394
+ function projectTuple(tuple) {
395
+ const values = [];
396
+ const projectedTuple = shallowClone(tuple, {
397
+ values,
398
+ });
399
+ for (const item of tuple.values) {
400
+ values.push(projectType(item));
401
+ }
402
+ return projectedTuple;
403
+ }
404
+ function projectEnum(e) {
405
+ const members = new Map();
406
+ const decorators = projectDecorators(e.decorators);
407
+ const projectedEnum = shallowClone(e, {
408
+ members,
409
+ decorators,
410
+ });
411
+ projectedTypes.set(e, projectedEnum);
412
+ for (const member of e.members.values()) {
413
+ const projectedMember = projectType(member);
414
+ if (projectedMember.kind === "EnumMember") {
415
+ members.set(projectedMember.name, projectedMember);
416
+ }
417
+ }
418
+ finishTypeForProgram(projectedProgram, projectedEnum);
419
+ return applyProjection(e, projectedEnum);
420
+ }
421
+ function projectEnumMember(e, projectingEnum) {
422
+ const decorators = projectDecorators(e.decorators);
423
+ const projectedMember = shallowClone(e, {
424
+ decorators,
425
+ });
426
+ finishTypeForProgram(projectedProgram, projectedMember);
427
+ projectedMember.enum = projectType(e.enum);
428
+ return projectedMember;
429
+ }
430
+ function projectDecorators(decs) {
431
+ const decorators = [];
432
+ for (const dec of decs) {
433
+ const args = [];
434
+ for (const arg of dec.args) {
435
+ // filter out primitive arguments
436
+ if (typeof arg.value !== "object") {
437
+ args.push(arg);
438
+ continue;
439
+ }
440
+ const projected = projectType(arg.value);
441
+ args.push({ ...arg, value: projected });
442
+ }
443
+ decorators.push({ ...dec, args });
444
+ }
445
+ return decorators;
446
+ }
447
+ function getInScopeProjections() {
448
+ const candidates = new Set(projections);
449
+ const inScope = [];
450
+ let currentScope = namespaceScope();
451
+ outer: while (currentScope) {
452
+ for (const candidate of candidates) {
453
+ if (!candidate.scope || candidate.scope === currentScope) {
454
+ candidates.delete(candidate);
455
+ inScope.push(candidate);
456
+ if (candidates.size === 0) {
457
+ break outer;
458
+ }
459
+ }
460
+ }
461
+ currentScope = currentScope.namespace;
462
+ }
463
+ return inScope;
464
+ }
465
+ function namespaceScope() {
466
+ for (let i = scope.length - 1; i >= 0; i--) {
467
+ if (scope[i].namespace !== undefined) {
468
+ return scope[i].namespace;
469
+ }
470
+ }
471
+ return undefined;
472
+ }
473
+ function projectedNamespaceScope() {
474
+ const ns = namespaceScope();
475
+ if (!ns)
476
+ return ns;
477
+ return projectType(ns);
478
+ }
479
+ function applyProjection(baseType, projectedType) {
480
+ const inScopeProjections = getInScopeProjections();
481
+ for (const projectionApplication of inScopeProjections) {
482
+ const projectionsByName = baseType.projectionsByName(projectionApplication.projectionName);
483
+ if (projectionsByName.length === 0)
484
+ continue;
485
+ const targetNode = projectionApplication.direction === "from"
486
+ ? projectionsByName[0].from
487
+ : projectionsByName[0].to;
488
+ const projected = checker.project(projectedType, targetNode, projectionApplication.arguments);
489
+ if (projected !== projectedType) {
490
+ // override the projected type cache with the returned type
491
+ projectedTypes.set(baseType, projected);
492
+ return projected;
493
+ }
494
+ }
495
+ return projectedType;
496
+ }
497
+ function shallowClone(type, additionalProps) {
498
+ var _a;
499
+ const scopeProps = {};
500
+ if ("namespace" in type && type.namespace !== undefined) {
501
+ scopeProps.namespace = projectedNamespaceScope();
502
+ }
503
+ const clone = checker.createType({
504
+ ...type,
505
+ ...additionalProps,
506
+ ...scopeProps,
507
+ projectionSource: type,
508
+ projectionBase: (_a = type.projectionBase) !== null && _a !== void 0 ? _a : type,
509
+ projector,
510
+ });
511
+ if (type.kind === "Union") {
512
+ // create the options getter
513
+ Object.defineProperty(clone, "options", {
514
+ get() {
515
+ return Array.from(this.variants.values()).map((v) => v.type);
516
+ },
517
+ });
518
+ }
519
+ projectedTypes.set(type, clone);
520
+ return clone;
521
+ }
522
+ }
523
+ //# sourceMappingURL=projector.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"projector.js","sourceRoot":"","sources":["../../core/projector.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,125 @@
1
+ import { DiagnosticHandler } from "./diagnostics.js";
2
+ import { SourceFile, TextRange } from "./types.js";
3
+ export declare enum Token {
4
+ None = 0,
5
+ Invalid = 1,
6
+ EndOfFile = 2,
7
+ Identifier = 3,
8
+ NumericLiteral = 4,
9
+ StringLiteral = 5,
10
+ SingleLineComment = 6,
11
+ MultiLineComment = 7,
12
+ NewLine = 8,
13
+ Whitespace = 9,
14
+ ConflictMarker = 10,
15
+ DocText = 11,
16
+ DocCodeSpan = 12,
17
+ DocCodeFenceDelimiter = 13,
18
+ OpenBrace = 14,
19
+ CloseBrace = 15,
20
+ OpenParen = 16,
21
+ CloseParen = 17,
22
+ OpenBracket = 18,
23
+ CloseBracket = 19,
24
+ Dot = 20,
25
+ Ellipsis = 21,
26
+ Semicolon = 22,
27
+ Comma = 23,
28
+ LessThan = 24,
29
+ GreaterThan = 25,
30
+ Equals = 26,
31
+ Ampersand = 27,
32
+ Bar = 28,
33
+ Question = 29,
34
+ Colon = 30,
35
+ ColonColon = 31,
36
+ At = 32,
37
+ AtAt = 33,
38
+ Hash = 34,
39
+ Star = 35,
40
+ ForwardSlash = 36,
41
+ Plus = 37,
42
+ Hyphen = 38,
43
+ Exclamation = 39,
44
+ LessThanEquals = 40,
45
+ GreaterThanEquals = 41,
46
+ AmpsersandAmpersand = 42,
47
+ BarBar = 43,
48
+ EqualsEquals = 44,
49
+ ExclamationEquals = 45,
50
+ EqualsGreaterThan = 46,
51
+ ImportKeyword = 47,
52
+ ModelKeyword = 48,
53
+ ScalarKeyword = 49,
54
+ NamespaceKeyword = 50,
55
+ UsingKeyword = 51,
56
+ OpKeyword = 52,
57
+ EnumKeyword = 53,
58
+ AliasKeyword = 54,
59
+ IsKeyword = 55,
60
+ InterfaceKeyword = 56,
61
+ UnionKeyword = 57,
62
+ ProjectionKeyword = 58,
63
+ ElseKeyword = 59,
64
+ IfKeyword = 60,
65
+ DecKeyword = 61,
66
+ FnKeyword = 62,
67
+ ExternKeyword = 63,
68
+ ExtendsKeyword = 64,
69
+ TrueKeyword = 65,
70
+ FalseKeyword = 66,
71
+ ReturnKeyword = 67,
72
+ VoidKeyword = 68,
73
+ NeverKeyword = 69,
74
+ UnknownKeyword = 70
75
+ }
76
+ export type DocToken = Token.NewLine | Token.Whitespace | Token.ConflictMarker | Token.Star | Token.At | Token.CloseBrace | Token.Identifier | Token.DocText | Token.DocCodeSpan | Token.DocCodeFenceDelimiter | Token.EndOfFile;
77
+ export interface Scanner {
78
+ /** The source code being scanned. */
79
+ readonly file: SourceFile;
80
+ /** The offset in UTF-16 code units to the current position at the start of the next token. */
81
+ readonly position: number;
82
+ /** The current token */
83
+ readonly token: Token;
84
+ /** The offset in UTF-16 code units to the start of the current token. */
85
+ readonly tokenPosition: number;
86
+ /** The flags on the current token. */
87
+ readonly tokenFlags: TokenFlags;
88
+ /** Advance one token. */
89
+ scan(): Token;
90
+ /** Advance one token inside DocComment. Use inside {@link scanRange} callback over DocComment range. */
91
+ scanDoc(): DocToken;
92
+ /** Reset the scanner to the given start and end positions, invoke the callback, and then restore scanner state. */
93
+ scanRange<T>(range: TextRange, callback: () => T): T;
94
+ /** Determine if the scanner has reached the end of the input. */
95
+ eof(): boolean;
96
+ /** The exact spelling of the current token. */
97
+ getTokenText(): string;
98
+ /**
99
+ * The value of the current token.
100
+ *
101
+ * String literals are escaped and unquoted, identifiers are normalized,
102
+ * and all other tokens return their exact spelling sames as
103
+ * getTokenText().
104
+ */
105
+ getTokenValue(): string;
106
+ }
107
+ export declare enum TokenFlags {
108
+ None = 0,
109
+ Escaped = 1,
110
+ TripleQuoted = 2,
111
+ Unterminated = 4,
112
+ NonAscii = 8,
113
+ DocComment = 16,
114
+ Backticked = 32
115
+ }
116
+ export declare function isTrivia(token: Token): boolean;
117
+ export declare function isComment(token: Token): boolean;
118
+ export declare function isKeyword(token: Token): boolean;
119
+ export declare function isPunctuation(token: Token): boolean;
120
+ export declare function isModifier(token: Token): boolean;
121
+ export declare function isStatementKeyword(token: Token): boolean;
122
+ export declare function createScanner(source: string | SourceFile, diagnosticHandler: DiagnosticHandler): Scanner;
123
+ export declare function skipTrivia(input: string, position: number, endPosition?: number): number;
124
+ export declare function skipWhiteSpace(input: string, position: number, endPosition?: number): number;
125
+ //# sourceMappingURL=scanner.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scanner.d.ts","sourceRoot":"","sources":["../../core/scanner.ts"],"names":[],"mappings":"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"}