@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,326 @@
1
+ import { getPropertyType } from "../lib/decorators.js";
2
+ import { getTypeName } from "./helpers/type-name-utils.js";
3
+ import { compilerAssert, SyntaxKind } from "./index.js";
4
+ import { createDiagnostic, reportDiagnostic } from "./messages.js";
5
+ /**
6
+ * Validate the decorator target is matching the expected value.
7
+ * @param program
8
+ * @param target
9
+ * @param expectedType
10
+ * @param decoratorName
11
+ * @returns
12
+ */
13
+ export function validateDecoratorTarget(context, target, decoratorName, expectedType) {
14
+ const isCorrectType = isTypeSpecValueTypeOf(target, expectedType);
15
+ if (!isCorrectType) {
16
+ reportDiagnostic(context.program, {
17
+ code: "decorator-wrong-target",
18
+ format: {
19
+ decorator: decoratorName,
20
+ to: target.kind,
21
+ },
22
+ target: context.decoratorTarget,
23
+ });
24
+ return false;
25
+ }
26
+ return true;
27
+ }
28
+ export function validateDecoratorTargetIntrinsic(context, target, decoratorName, expectedType) {
29
+ const expectedTypeStrs = typeof expectedType === "string" ? [expectedType] : expectedType;
30
+ const expectedTypes = expectedTypeStrs.map((x) => context.program.checker.getStdType(x));
31
+ const type = getPropertyType(target);
32
+ const isCorrect = expectedTypes.some((x) => { var _a; return context.program.checker.isTypeAssignableTo((_a = type.projectionBase) !== null && _a !== void 0 ? _a : type, x, type)[0]; });
33
+ if (!isCorrect) {
34
+ context.program.reportDiagnostic(createDiagnostic({
35
+ code: "decorator-wrong-target",
36
+ format: {
37
+ decorator: decoratorName,
38
+ to: `type it is not one of: ${typeof expectedTypeStrs.join(", ")}`,
39
+ },
40
+ target: context.decoratorTarget,
41
+ }));
42
+ return false;
43
+ }
44
+ return true;
45
+ }
46
+ /** @deprecated use isTypeSpecValueTypeOf */
47
+ export const isCadlValueTypeOf = isTypeSpecValueTypeOf;
48
+ /**
49
+ * Check if the given target is of any of the typespec types.
50
+ * @param target Target to validate.
51
+ * @param expectedType One or multiple allowed typespec types.
52
+ * @returns boolean if the target is of one of the allowed types.
53
+ */
54
+ export function isTypeSpecValueTypeOf(target, expectedType) {
55
+ const kind = getTypeKind(target);
56
+ if (kind === undefined) {
57
+ return false;
58
+ }
59
+ return typeof expectedType === "string"
60
+ ? expectedType === "Any" || kind === expectedType
61
+ : expectedType.includes("Any") || expectedType.includes(kind);
62
+ }
63
+ function getTypeKind(target) {
64
+ switch (typeof target) {
65
+ case "object":
66
+ return target.kind;
67
+ case "string":
68
+ return "String";
69
+ case "number":
70
+ return "Number";
71
+ case "boolean":
72
+ return "Boolean";
73
+ default:
74
+ return undefined;
75
+ }
76
+ }
77
+ /**
78
+ * Validate a decorator parameter has the correct type.
79
+ * @param program Program
80
+ * @param target Decorator target
81
+ * @param value Value of the parameter.
82
+ * @param expectedType Expected type or list of expected type
83
+ * @returns true if the value is of one of the type in the list of expected types. If not emit a diagnostic.
84
+ * @deprecated use @see createDecoratorDefinition#validate instead.
85
+ */
86
+ export function validateDecoratorParamType(program, target, value, expectedType) {
87
+ if (!isTypeSpecValueTypeOf(value, expectedType)) {
88
+ reportDiagnostic(program, {
89
+ code: "invalid-argument",
90
+ format: {
91
+ value: prettyValue(program, value),
92
+ expected: typeof expectedType === "string" ? expectedType : expectedType.join(", "),
93
+ },
94
+ target,
95
+ });
96
+ return false;
97
+ }
98
+ return true;
99
+ }
100
+ /**
101
+ * @deprecated use extern dec definition in typespec instead.
102
+ */
103
+ export function createDecoratorDefinition(definition) {
104
+ const minParams = definition.args.filter((x) => !x.optional).length;
105
+ const maxParams = definition.spreadArgs ? undefined : definition.args.length;
106
+ function validate(context, target, args) {
107
+ var _a;
108
+ if (!validateDecoratorTarget(context, target, definition.name, definition.target) ||
109
+ !validateDecoratorParamCount(context, minParams, maxParams, args)) {
110
+ return false;
111
+ }
112
+ for (const [index, arg] of args.entries()) {
113
+ const paramDefinition = (_a = definition.args[index]) !== null && _a !== void 0 ? _a : definition.spreadArgs;
114
+ if (arg === undefined) {
115
+ if (!paramDefinition.optional) {
116
+ reportDiagnostic(context.program, {
117
+ code: "invalid-argument",
118
+ format: {
119
+ value: "undefined",
120
+ expected: expectedTypeList(paramDefinition.kind),
121
+ },
122
+ target: context.getArgumentTarget(index),
123
+ });
124
+ return false;
125
+ }
126
+ }
127
+ else if (!isTypeSpecValueTypeOf(arg, paramDefinition.kind)) {
128
+ reportDiagnostic(context.program, {
129
+ code: "invalid-argument",
130
+ format: {
131
+ value: prettyValue(context.program, arg),
132
+ expected: expectedTypeList(paramDefinition.kind),
133
+ },
134
+ target: context.getArgumentTarget(index),
135
+ });
136
+ return false;
137
+ }
138
+ }
139
+ return true;
140
+ }
141
+ return {
142
+ validate(context, target, parameters) {
143
+ return validate(context, target, parameters);
144
+ },
145
+ };
146
+ }
147
+ function expectedTypeList(expectedType) {
148
+ return typeof expectedType === "string" ? expectedType : expectedType.join(", ");
149
+ }
150
+ export function validateDecoratorParamCount(context, min, max, parameters) {
151
+ let missing = 0;
152
+ for (let i = parameters.length - 1; i >= 0; i--) {
153
+ if (parameters[i] === undefined) {
154
+ missing++;
155
+ }
156
+ else {
157
+ break;
158
+ }
159
+ }
160
+ const parameterCount = parameters.length - missing;
161
+ if (parameterCount < min || (max !== undefined && parameterCount > max)) {
162
+ if (min === max) {
163
+ reportDiagnostic(context.program, {
164
+ code: "invalid-argument-count",
165
+ format: {
166
+ actual: parameterCount.toString(),
167
+ expected: min.toString(),
168
+ },
169
+ target: context.decoratorTarget,
170
+ });
171
+ }
172
+ else {
173
+ reportDiagnostic(context.program, {
174
+ code: "invalid-argument-count",
175
+ format: {
176
+ actual: parameterCount.toString(),
177
+ expected: `${min}-${max === undefined ? "infinity" : max.toString()}`,
178
+ },
179
+ target: context.decoratorTarget,
180
+ });
181
+ }
182
+ return false;
183
+ }
184
+ return true;
185
+ }
186
+ function prettyValue(program, value) {
187
+ if (typeof value === "object" && value !== null && "kind" in value) {
188
+ return getTypeName(value);
189
+ }
190
+ return value;
191
+ }
192
+ /** @deprecated use typespecTypeToJson */
193
+ export const cadlTypeToJson = typespecTypeToJson;
194
+ /**
195
+ * Convert a typespec type to a serializable Json object.
196
+ * Emits diagnostics if the given type is invalid
197
+ * @param typespecType The type to convert to Json data
198
+ * @param target The diagnostic target in case of errors.
199
+ */
200
+ export function typespecTypeToJson(typespecType, target) {
201
+ if (typeof typespecType !== "object") {
202
+ return [typespecType, []];
203
+ }
204
+ return typespecTypeToJsonInternal(typespecType, target, []);
205
+ }
206
+ function typespecTypeToJsonInternal(typespecType, target, path) {
207
+ var _a;
208
+ switch (typespecType.kind) {
209
+ case "String":
210
+ case "Boolean":
211
+ case "Number":
212
+ return [typespecType.value, []];
213
+ case "EnumMember":
214
+ return [(_a = typespecType.value) !== null && _a !== void 0 ? _a : typespecType.name, []];
215
+ case "Tuple": {
216
+ const result = [];
217
+ for (const [index, type] of typespecType.values.entries()) {
218
+ const [item, diagnostics] = typespecTypeToJsonInternal(type, target, [
219
+ ...path,
220
+ index.toString(),
221
+ ]);
222
+ if (diagnostics.length > 0) {
223
+ return [undefined, diagnostics];
224
+ }
225
+ result.push(item);
226
+ }
227
+ return [result, []];
228
+ }
229
+ case "Model": {
230
+ const result = {};
231
+ for (const [name, type] of typespecType.properties.entries()) {
232
+ const [item, diagnostics] = typespecTypeToJsonInternal(type.type, target, [
233
+ ...path,
234
+ name.toString(),
235
+ ]);
236
+ if (diagnostics.length > 0) {
237
+ return [undefined, diagnostics];
238
+ }
239
+ result[name] = item;
240
+ }
241
+ return [result, []];
242
+ }
243
+ default:
244
+ const diagnostic = path.length === 0
245
+ ? createDiagnostic({
246
+ code: "invalid-value",
247
+ format: {
248
+ kind: typespecType.kind,
249
+ },
250
+ target,
251
+ })
252
+ : createDiagnostic({
253
+ code: "invalid-value",
254
+ messageId: "atPath",
255
+ format: {
256
+ kind: typespecType.kind,
257
+ path: path.join("."),
258
+ },
259
+ target,
260
+ });
261
+ return [undefined, [diagnostic]];
262
+ }
263
+ }
264
+ export function validateDecoratorUniqueOnNode(context, type, decorator) {
265
+ compilerAssert("decorators" in type, "Type should have decorators");
266
+ const sameDecorators = type.decorators.filter((x) => {
267
+ var _a, _b;
268
+ return x.decorator === decorator &&
269
+ ((_a = x.node) === null || _a === void 0 ? void 0 : _a.kind) === SyntaxKind.DecoratorExpression &&
270
+ ((_b = x.node) === null || _b === void 0 ? void 0 : _b.parent) === type.node;
271
+ });
272
+ if (sameDecorators.length > 1) {
273
+ reportDiagnostic(context.program, {
274
+ code: "duplicate-decorator",
275
+ format: { decoratorName: "@" + decorator.name.slice(1) },
276
+ target: context.decoratorTarget,
277
+ });
278
+ return false;
279
+ }
280
+ return true;
281
+ }
282
+ /**
283
+ * Validate that a given decorator is not on a type or any of its base types.
284
+ * Useful to check for decorator usage that conflicts with another decorator.
285
+ * @param context Decorator context
286
+ * @param type The type to check
287
+ * @param badDecorator The decorator we don't want present
288
+ * @param givenDecorator The decorator that is the reason why we don't want the bad decorator present
289
+ * @param includeHeritage Whether to check base types for the bad decorator too
290
+ * @returns Whether the decorator application is valid
291
+ */
292
+ export function validateDecoratorNotOnType(context, type, badDecorator, givenDecorator) {
293
+ compilerAssert("decorators" in type, "Type should have decorators");
294
+ const decAppsToCheck = [];
295
+ let base = type;
296
+ while (base) {
297
+ decAppsToCheck.push(...base.decorators);
298
+ base = getHeritage(base);
299
+ }
300
+ for (const decapp of decAppsToCheck) {
301
+ if (decapp.decorator === badDecorator) {
302
+ reportDiagnostic(context.program, {
303
+ code: "decorator-conflict",
304
+ format: {
305
+ decoratorName: "@" + badDecorator.name.slice(1),
306
+ otherDecoratorName: "@" + givenDecorator.name.slice(1),
307
+ },
308
+ target: context.decoratorTarget,
309
+ });
310
+ return false;
311
+ }
312
+ }
313
+ return true;
314
+ function getHeritage(type) {
315
+ if (type.kind === "Model") {
316
+ return type.baseModel;
317
+ }
318
+ else if (type.kind === "Scalar") {
319
+ return type.baseScalar;
320
+ }
321
+ else {
322
+ return undefined;
323
+ }
324
+ }
325
+ }
326
+ //# sourceMappingURL=decorator-utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorator-utils.js","sourceRoot":"","sources":["../../core/decorator-utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,93 @@
1
+ import { Program } from "./program.js";
2
+ import { Diagnostic, DiagnosticCreator, DiagnosticMap, DiagnosticMessages, DiagnosticResult, DiagnosticTarget, LogSink, NoTarget, SourceFile, SourceLocation, Type } from "./types.js";
3
+ /**
4
+ * Create a new diagnostics creator.
5
+ * @param diagnostics Map of the potential diagnostics.
6
+ * @param libraryName Optional name of the library if in the scope of a library.
7
+ * @returns @see DiagnosticCreator
8
+ */
9
+ export declare function createDiagnosticCreator<T extends {
10
+ [code: string]: DiagnosticMessages;
11
+ }>(diagnostics: DiagnosticMap<T>, libraryName?: string): DiagnosticCreator<T>;
12
+ /**
13
+ * Represents a failure while interpreting a projection.
14
+ */
15
+ export declare class ProjectionError extends Error {
16
+ constructor(message: string);
17
+ }
18
+ export type WriteLine = (text?: string) => void;
19
+ export type DiagnosticHandler = (diagnostic: Diagnostic) => void;
20
+ export declare function logDiagnostics(diagnostics: readonly Diagnostic[], logger: LogSink): void;
21
+ export declare function formatDiagnostic(diagnostic: Diagnostic): string;
22
+ export declare function createSourceFile(text: string, path: string): SourceFile;
23
+ export declare function getSourceLocation(target: DiagnosticTarget): SourceLocation;
24
+ export declare function getSourceLocation(target: typeof NoTarget | undefined): undefined;
25
+ export declare function getSourceLocation(target: DiagnosticTarget | typeof NoTarget | undefined): SourceLocation | undefined;
26
+ /**
27
+ * Verbose output is enabled by default for runs in mocha explorer in VS Code,
28
+ * where the output is nicely associated with the individual test, and disabled
29
+ * by default for command line runs where we don't want to spam the console.
30
+ *
31
+ * If the steps taken to produce the message are expensive, pass a callback
32
+ * instead of producing the message then passing it here only to be dropped
33
+ * when verbose output is disabled.
34
+ */
35
+ export declare function logVerboseTestOutput(messageOrCallback: string | ((log: (message: string) => void) => void)): void;
36
+ /**
37
+ * Use this to report bugs in the compiler, and not errors in the source code
38
+ * being compiled.
39
+ *
40
+ * @param condition Throw if this is not true.
41
+ *
42
+ * @param message Error message.
43
+ *
44
+ * @param target Optional location in source code that might give a clue about
45
+ * what got the compiler off track.
46
+ */
47
+ export declare function compilerAssert(condition: any, message: string, target?: DiagnosticTarget): asserts condition;
48
+ /**
49
+ * Assert that the input type has one of the kinds provided
50
+ */
51
+ export declare function assertType<TKind extends Type["kind"][]>(typeDescription: string, t: Type, ...kinds: TKind): asserts t is Type & {
52
+ kind: TKind[number];
53
+ };
54
+ /**
55
+ * Report a deprecated diagnostic.
56
+ * @param program TypeSpec Program.
57
+ * @param message Message describing the deprecation.
58
+ * @param target Target of the deprecation.
59
+ */
60
+ export declare function reportDeprecated(program: Program, message: string, target: DiagnosticTarget | typeof NoTarget): void;
61
+ /**
62
+ * Helper object to collect diagnostics from function following the diagnostics accessor pattern(foo() => [T, Diagnostic[]])
63
+ */
64
+ export interface DiagnosticCollector {
65
+ readonly diagnostics: readonly Diagnostic[];
66
+ /**
67
+ * Add a diagnostic to the collection
68
+ * @param diagnostic Diagnostic to add.
69
+ */
70
+ add(diagnostic: Diagnostic): void;
71
+ /**
72
+ * Unwrap the Diagnostic result, add all the diagnostics and return the data.
73
+ * @param result Accessor diagnostic result
74
+ */
75
+ pipe<T>(result: DiagnosticResult<T>): T;
76
+ /**
77
+ * Wrap the given value in a tuple including the diagnostics following the TypeSpec accessor pattern.
78
+ * @param value Accessor value to return
79
+ * @example return diagnostics.wrap(routes);
80
+ */
81
+ wrap<T>(value: T): DiagnosticResult<T>;
82
+ }
83
+ /**
84
+ * Create a new instance of the @see DiagnosticCollector.
85
+ */
86
+ export declare function createDiagnosticCollector(): DiagnosticCollector;
87
+ /**
88
+ * Ignore the diagnostics emitted by the diagnostic accessor pattern and just return the actual result.
89
+ * @param result: Accessor pattern tuple result including the actual result and the list of diagnostics.
90
+ * @returns Actual result.
91
+ */
92
+ export declare function ignoreDiagnostics<T>(result: DiagnosticResult<T>): T;
93
+ //# sourceMappingURL=diagnostics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../core/diagnostics.ts"],"names":[],"mappings":"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"}