@microsoft/typespec-msgraph 0.0.1-Preview.3 → 0.0.1-Preview.30

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 (619) hide show
  1. package/dist/src/components/acceptable-media-types-annotation.js.map +1 -1
  2. package/dist/src/components/alternate-keys-annotation.js +5 -4
  3. package/dist/src/components/alternate-keys-annotation.js.map +1 -1
  4. package/dist/src/components/annotations.d.ts +12 -0
  5. package/dist/src/components/annotations.d.ts.map +1 -0
  6. package/dist/src/components/annotations.js +106 -0
  7. package/dist/src/components/annotations.js.map +1 -0
  8. package/dist/src/components/common-elements.d.ts +19 -6
  9. package/dist/src/components/common-elements.d.ts.map +1 -1
  10. package/dist/src/components/common-elements.js +2 -2
  11. package/dist/src/components/common-elements.js.map +1 -1
  12. package/dist/src/components/computed-annotation.js +1 -1
  13. package/dist/src/components/computed-annotation.js.map +1 -1
  14. package/dist/src/components/count-restrictions-annotation.d.ts +1 -1
  15. package/dist/src/components/count-restrictions-annotation.d.ts.map +1 -1
  16. package/dist/src/components/count-restrictions-annotation.js +3 -8
  17. package/dist/src/components/count-restrictions-annotation.js.map +1 -1
  18. package/dist/src/components/delta-annotation.d.ts +6 -0
  19. package/dist/src/components/delta-annotation.d.ts.map +1 -0
  20. package/dist/src/components/delta-annotation.js +18 -0
  21. package/dist/src/components/delta-annotation.js.map +1 -0
  22. package/dist/src/components/description-annotation.d.ts.map +1 -1
  23. package/dist/src/components/description-annotation.js +1 -0
  24. package/dist/src/components/description-annotation.js.map +1 -1
  25. package/dist/src/components/entity-container-element.d.ts +18 -3
  26. package/dist/src/components/entity-container-element.d.ts.map +1 -1
  27. package/dist/src/components/entity-container-element.js +16 -42
  28. package/dist/src/components/entity-container-element.js.map +1 -1
  29. package/dist/src/components/enum-type-element.d.ts.map +1 -1
  30. package/dist/src/components/enum-type-element.js +6 -3
  31. package/dist/src/components/enum-type-element.js.map +1 -1
  32. package/dist/src/components/expand-restrictions-annotation.d.ts +1 -1
  33. package/dist/src/components/expand-restrictions-annotation.d.ts.map +1 -1
  34. package/dist/src/components/expand-restrictions-annotation.js +7 -13
  35. package/dist/src/components/expand-restrictions-annotation.js.map +1 -1
  36. package/dist/src/components/filter-restrictions-annotation.d.ts +6 -0
  37. package/dist/src/components/filter-restrictions-annotation.d.ts.map +1 -0
  38. package/dist/src/components/filter-restrictions-annotation.js +10 -0
  39. package/dist/src/components/filter-restrictions-annotation.js.map +1 -0
  40. package/dist/src/components/immutable-annotation.d.ts +5 -0
  41. package/dist/src/components/immutable-annotation.d.ts.map +1 -0
  42. package/dist/src/components/immutable-annotation.js +6 -0
  43. package/dist/src/components/immutable-annotation.js.map +1 -0
  44. package/dist/src/components/index.js +3 -3
  45. package/dist/src/components/index.js.map +1 -1
  46. package/dist/src/components/insert-restrictions-annotation.d.ts +6 -0
  47. package/dist/src/components/insert-restrictions-annotation.d.ts.map +1 -0
  48. package/dist/src/components/insert-restrictions-annotation.js +10 -0
  49. package/dist/src/components/insert-restrictions-annotation.js.map +1 -0
  50. package/dist/src/components/is-url-annotation.d.ts +5 -0
  51. package/dist/src/components/is-url-annotation.d.ts.map +1 -0
  52. package/dist/src/components/is-url-annotation.js +6 -0
  53. package/dist/src/components/is-url-annotation.js.map +1 -0
  54. package/dist/src/components/open-property-type-constraint-annotation-element.d.ts +5 -0
  55. package/dist/src/components/open-property-type-constraint-annotation-element.d.ts.map +1 -0
  56. package/dist/src/components/open-property-type-constraint-annotation-element.js +7 -0
  57. package/dist/src/components/open-property-type-constraint-annotation-element.js.map +1 -0
  58. package/dist/src/components/operation-element.d.ts.map +1 -1
  59. package/dist/src/components/operation-element.js +33 -18
  60. package/dist/src/components/operation-element.js.map +1 -1
  61. package/dist/src/components/permissions-annotation.js.map +1 -1
  62. package/dist/src/components/property-element.d.ts.map +1 -1
  63. package/dist/src/components/property-element.js +10 -4
  64. package/dist/src/components/property-element.js.map +1 -1
  65. package/dist/src/components/reference-target-element.d.ts +9 -0
  66. package/dist/src/components/reference-target-element.d.ts.map +1 -0
  67. package/dist/src/components/reference-target-element.js +3 -0
  68. package/dist/src/components/reference-target-element.js.map +1 -0
  69. package/dist/src/components/revisions-annotation.d.ts.map +1 -1
  70. package/dist/src/components/revisions-annotation.js +2 -1
  71. package/dist/src/components/revisions-annotation.js.map +1 -1
  72. package/dist/src/components/schema-element.d.ts.map +1 -1
  73. package/dist/src/components/schema-element.js +15 -6
  74. package/dist/src/components/schema-element.js.map +1 -1
  75. package/dist/src/components/search-restrictions-annotation.d.ts +1 -1
  76. package/dist/src/components/search-restrictions-annotation.d.ts.map +1 -1
  77. package/dist/src/components/search-restrictions-annotation.js +3 -8
  78. package/dist/src/components/search-restrictions-annotation.js.map +1 -1
  79. package/dist/src/components/select-supported-annotation.d.ts +5 -0
  80. package/dist/src/components/select-supported-annotation.d.ts.map +1 -0
  81. package/dist/src/components/select-supported-annotation.js +6 -0
  82. package/dist/src/components/select-supported-annotation.js.map +1 -0
  83. package/dist/src/components/skip-supported-annotation.d.ts +1 -1
  84. package/dist/src/components/skip-supported-annotation.d.ts.map +1 -1
  85. package/dist/src/components/skip-supported-annotation.js +1 -6
  86. package/dist/src/components/skip-supported-annotation.js.map +1 -1
  87. package/dist/src/components/sort-restrictions-annotation.d.ts +1 -1
  88. package/dist/src/components/sort-restrictions-annotation.d.ts.map +1 -1
  89. package/dist/src/components/sort-restrictions-annotation.js +7 -13
  90. package/dist/src/components/sort-restrictions-annotation.js.map +1 -1
  91. package/dist/src/components/structured-type-element.d.ts +4 -7
  92. package/dist/src/components/structured-type-element.d.ts.map +1 -1
  93. package/dist/src/components/structured-type-element.js +23 -23
  94. package/dist/src/components/structured-type-element.js.map +1 -1
  95. package/dist/src/components/term-element.d.ts +9 -0
  96. package/dist/src/components/term-element.d.ts.map +1 -0
  97. package/dist/src/components/term-element.js +8 -0
  98. package/dist/src/components/term-element.js.map +1 -0
  99. package/dist/src/components/top-supported-annotation.d.ts +1 -1
  100. package/dist/src/components/top-supported-annotation.d.ts.map +1 -1
  101. package/dist/src/components/top-supported-annotation.js +2 -5
  102. package/dist/src/components/top-supported-annotation.js.map +1 -1
  103. package/dist/src/components/update-restrictions-annotation.d.ts +6 -0
  104. package/dist/src/components/update-restrictions-annotation.d.ts.map +1 -0
  105. package/dist/src/components/update-restrictions-annotation.js +8 -0
  106. package/dist/src/components/update-restrictions-annotation.js.map +1 -0
  107. package/dist/src/decorators/abstract.d.ts +2 -0
  108. package/dist/src/decorators/abstract.d.ts.map +1 -1
  109. package/dist/src/decorators/abstract.js +2 -0
  110. package/dist/src/decorators/abstract.js.map +1 -1
  111. package/dist/src/decorators/action.d.ts +12 -0
  112. package/dist/src/decorators/action.d.ts.map +1 -0
  113. package/dist/src/decorators/action.js +18 -0
  114. package/dist/src/decorators/action.js.map +1 -0
  115. package/dist/src/decorators/additional-query-parameters.d.ts +18 -0
  116. package/dist/src/decorators/additional-query-parameters.d.ts.map +1 -0
  117. package/dist/src/decorators/additional-query-parameters.js +23 -0
  118. package/dist/src/decorators/additional-query-parameters.js.map +1 -0
  119. package/dist/src/decorators/address-url-msa.d.ts +14 -0
  120. package/dist/src/decorators/address-url-msa.d.ts.map +1 -0
  121. package/dist/src/decorators/address-url-msa.js +21 -0
  122. package/dist/src/decorators/address-url-msa.js.map +1 -0
  123. package/dist/src/decorators/address-url.d.ts +18 -0
  124. package/dist/src/decorators/address-url.d.ts.map +1 -0
  125. package/dist/src/decorators/address-url.js +21 -0
  126. package/dist/src/decorators/address-url.js.map +1 -0
  127. package/dist/src/decorators/ags-attribute.d.ts +17 -0
  128. package/dist/src/decorators/ags-attribute.d.ts.map +1 -0
  129. package/dist/src/decorators/ags-attribute.js +167 -0
  130. package/dist/src/decorators/ags-attribute.js.map +1 -0
  131. package/dist/src/decorators/allowed-values.d.ts +15 -0
  132. package/dist/src/decorators/allowed-values.d.ts.map +1 -0
  133. package/dist/src/decorators/allowed-values.js +37 -0
  134. package/dist/src/decorators/allowed-values.js.map +1 -0
  135. package/dist/src/decorators/complex.d.ts +2 -0
  136. package/dist/src/decorators/complex.d.ts.map +1 -1
  137. package/dist/src/decorators/complex.js +2 -0
  138. package/dist/src/decorators/complex.js.map +1 -1
  139. package/dist/src/decorators/computed.d.ts +2 -0
  140. package/dist/src/decorators/computed.d.ts.map +1 -1
  141. package/dist/src/decorators/computed.js +2 -0
  142. package/dist/src/decorators/computed.js.map +1 -1
  143. package/dist/src/decorators/contains.d.ts +2 -0
  144. package/dist/src/decorators/contains.d.ts.map +1 -1
  145. package/dist/src/decorators/contains.js +2 -0
  146. package/dist/src/decorators/contains.js.map +1 -1
  147. package/dist/src/decorators/count.d.ts +2 -0
  148. package/dist/src/decorators/count.d.ts.map +1 -1
  149. package/dist/src/decorators/count.js +2 -0
  150. package/dist/src/decorators/count.js.map +1 -1
  151. package/dist/src/decorators/delta-collection.d.ts +8 -0
  152. package/dist/src/decorators/delta-collection.d.ts.map +1 -0
  153. package/dist/src/decorators/delta-collection.js +12 -0
  154. package/dist/src/decorators/delta-collection.js.map +1 -0
  155. package/dist/src/decorators/delta.d.ts +10 -0
  156. package/dist/src/decorators/delta.d.ts.map +1 -0
  157. package/dist/src/decorators/delta.js +14 -0
  158. package/dist/src/decorators/delta.js.map +1 -0
  159. package/dist/src/decorators/deprecated-definition.d.ts +5 -4
  160. package/dist/src/decorators/deprecated-definition.d.ts.map +1 -1
  161. package/dist/src/decorators/deprecated-definition.js +1 -7
  162. package/dist/src/decorators/deprecated-definition.js.map +1 -1
  163. package/dist/src/decorators/entity.d.ts +3 -0
  164. package/dist/src/decorators/entity.d.ts.map +1 -1
  165. package/dist/src/decorators/entity.js +7 -1
  166. package/dist/src/decorators/entity.js.map +1 -1
  167. package/dist/src/decorators/expand.d.ts +4 -2
  168. package/dist/src/decorators/expand.d.ts.map +1 -1
  169. package/dist/src/decorators/expand.js +7 -1
  170. package/dist/src/decorators/expand.js.map +1 -1
  171. package/dist/src/decorators/experimental.d.ts +11 -0
  172. package/dist/src/decorators/experimental.d.ts.map +1 -0
  173. package/dist/src/decorators/experimental.js +15 -0
  174. package/dist/src/decorators/experimental.js.map +1 -0
  175. package/dist/src/decorators/filter.d.ts +13 -0
  176. package/dist/src/decorators/filter.d.ts.map +1 -0
  177. package/dist/src/decorators/filter.js +29 -0
  178. package/dist/src/decorators/filter.js.map +1 -0
  179. package/dist/src/decorators/function.d.ts +9 -3
  180. package/dist/src/decorators/function.d.ts.map +1 -1
  181. package/dist/src/decorators/function.js +7 -2
  182. package/dist/src/decorators/function.js.map +1 -1
  183. package/dist/src/decorators/global-operation.d.ts +11 -0
  184. package/dist/src/decorators/global-operation.d.ts.map +1 -0
  185. package/dist/src/decorators/global-operation.js +15 -0
  186. package/dist/src/decorators/global-operation.js.map +1 -0
  187. package/dist/src/decorators/graph-deprecated.d.ts +13 -0
  188. package/dist/src/decorators/graph-deprecated.d.ts.map +1 -0
  189. package/dist/src/decorators/graph-deprecated.js +21 -0
  190. package/dist/src/decorators/graph-deprecated.js.map +1 -0
  191. package/dist/src/decorators/graph-route.d.ts +20 -0
  192. package/dist/src/decorators/graph-route.d.ts.map +1 -0
  193. package/dist/src/decorators/graph-route.js +141 -0
  194. package/dist/src/decorators/graph-route.js.map +1 -0
  195. package/dist/src/decorators/graphFlags.d.ts +11 -0
  196. package/dist/src/decorators/graphFlags.d.ts.map +1 -0
  197. package/dist/src/decorators/graphFlags.js +15 -0
  198. package/dist/src/decorators/graphFlags.js.map +1 -0
  199. package/dist/src/decorators/immutable.d.ts +10 -0
  200. package/dist/src/decorators/immutable.d.ts.map +1 -0
  201. package/dist/src/decorators/immutable.js +14 -0
  202. package/dist/src/decorators/immutable.js.map +1 -0
  203. package/dist/src/decorators/index.d.ts +35 -3
  204. package/dist/src/decorators/index.d.ts.map +1 -1
  205. package/dist/src/decorators/index.js +35 -3
  206. package/dist/src/decorators/index.js.map +1 -1
  207. package/dist/src/decorators/is-owner.d.ts +12 -0
  208. package/dist/src/decorators/is-owner.d.ts.map +1 -0
  209. package/dist/src/decorators/is-owner.js +19 -0
  210. package/dist/src/decorators/is-owner.js.map +1 -0
  211. package/dist/src/decorators/limited-charset.d.ts +11 -0
  212. package/dist/src/decorators/limited-charset.d.ts.map +1 -0
  213. package/dist/src/decorators/limited-charset.js +15 -0
  214. package/dist/src/decorators/limited-charset.js.map +1 -0
  215. package/dist/src/decorators/media.d.ts +12 -0
  216. package/dist/src/decorators/media.d.ts.map +1 -0
  217. package/dist/src/decorators/media.js +18 -0
  218. package/dist/src/decorators/media.js.map +1 -0
  219. package/dist/src/decorators/open.d.ts +2 -0
  220. package/dist/src/decorators/open.d.ts.map +1 -1
  221. package/dist/src/decorators/open.js +2 -0
  222. package/dist/src/decorators/open.js.map +1 -1
  223. package/dist/src/decorators/operation-parameters.d.ts +2 -0
  224. package/dist/src/decorators/operation-parameters.d.ts.map +1 -1
  225. package/dist/src/decorators/operation-parameters.js +2 -0
  226. package/dist/src/decorators/operation-parameters.js.map +1 -1
  227. package/dist/src/decorators/order-by.d.ts +3 -2
  228. package/dist/src/decorators/order-by.d.ts.map +1 -1
  229. package/dist/src/decorators/order-by.js +3 -1
  230. package/dist/src/decorators/order-by.js.map +1 -1
  231. package/dist/src/decorators/ownerless.d.ts +10 -0
  232. package/dist/src/decorators/ownerless.d.ts.map +1 -0
  233. package/dist/src/decorators/ownerless.js +14 -0
  234. package/dist/src/decorators/ownerless.js.map +1 -0
  235. package/dist/src/decorators/paged-collection.d.ts +8 -0
  236. package/dist/src/decorators/paged-collection.d.ts.map +1 -0
  237. package/dist/src/decorators/paged-collection.js +12 -0
  238. package/dist/src/decorators/paged-collection.js.map +1 -0
  239. package/dist/src/decorators/partial.d.ts +12 -0
  240. package/dist/src/decorators/partial.d.ts.map +1 -0
  241. package/dist/src/decorators/partial.js +18 -0
  242. package/dist/src/decorators/partial.js.map +1 -0
  243. package/dist/src/decorators/passthrough-address-url-msa.d.ts +14 -0
  244. package/dist/src/decorators/passthrough-address-url-msa.d.ts.map +1 -0
  245. package/dist/src/decorators/passthrough-address-url-msa.js +20 -0
  246. package/dist/src/decorators/passthrough-address-url-msa.js.map +1 -0
  247. package/dist/src/decorators/passthrough-address-url.d.ts +14 -0
  248. package/dist/src/decorators/passthrough-address-url.d.ts.map +1 -0
  249. package/dist/src/decorators/passthrough-address-url.js +20 -0
  250. package/dist/src/decorators/passthrough-address-url.js.map +1 -0
  251. package/dist/src/decorators/prefixed-graph-routes.d.ts +10 -0
  252. package/dist/src/decorators/prefixed-graph-routes.d.ts.map +1 -0
  253. package/dist/src/decorators/prefixed-graph-routes.js +27 -0
  254. package/dist/src/decorators/prefixed-graph-routes.js.map +1 -0
  255. package/dist/src/decorators/private-preview-definition.d.ts +5 -4
  256. package/dist/src/decorators/private-preview-definition.d.ts.map +1 -1
  257. package/dist/src/decorators/private-preview-definition.js +3 -6
  258. package/dist/src/decorators/private-preview-definition.js.map +1 -1
  259. package/dist/src/decorators/private-preview.d.ts +4 -3
  260. package/dist/src/decorators/private-preview.d.ts.map +1 -1
  261. package/dist/src/decorators/private-preview.js +3 -1
  262. package/dist/src/decorators/private-preview.js.map +1 -1
  263. package/dist/src/decorators/privileged.d.ts +11 -0
  264. package/dist/src/decorators/privileged.d.ts.map +1 -0
  265. package/dist/src/decorators/privileged.js +15 -0
  266. package/dist/src/decorators/privileged.js.map +1 -0
  267. package/dist/src/decorators/public-namespace.d.ts +12 -0
  268. package/dist/src/decorators/public-namespace.d.ts.map +1 -0
  269. package/dist/src/decorators/public-namespace.js +21 -0
  270. package/dist/src/decorators/public-namespace.js.map +1 -0
  271. package/dist/src/decorators/read-only.d.ts +2 -0
  272. package/dist/src/decorators/read-only.d.ts.map +1 -1
  273. package/dist/src/decorators/read-only.js +2 -0
  274. package/dist/src/decorators/read-only.js.map +1 -1
  275. package/dist/src/decorators/reference-target.d.ts +17 -0
  276. package/dist/src/decorators/reference-target.d.ts.map +1 -0
  277. package/dist/src/decorators/reference-target.js +59 -0
  278. package/dist/src/decorators/reference-target.js.map +1 -0
  279. package/dist/src/decorators/references.d.ts +2 -0
  280. package/dist/src/decorators/references.d.ts.map +1 -1
  281. package/dist/src/decorators/references.js +2 -0
  282. package/dist/src/decorators/references.js.map +1 -1
  283. package/dist/src/decorators/required-for-create.d.ts +12 -0
  284. package/dist/src/decorators/required-for-create.d.ts.map +1 -0
  285. package/dist/src/decorators/required-for-create.js +16 -0
  286. package/dist/src/decorators/required-for-create.js.map +1 -0
  287. package/dist/src/decorators/return-source.d.ts +11 -0
  288. package/dist/src/decorators/return-source.d.ts.map +1 -0
  289. package/dist/src/decorators/return-source.js +28 -0
  290. package/dist/src/decorators/return-source.js.map +1 -0
  291. package/dist/src/decorators/search.d.ts +2 -0
  292. package/dist/src/decorators/search.d.ts.map +1 -1
  293. package/dist/src/decorators/search.js +2 -0
  294. package/dist/src/decorators/search.js.map +1 -1
  295. package/dist/src/decorators/select.d.ts +11 -0
  296. package/dist/src/decorators/select.d.ts.map +1 -0
  297. package/dist/src/decorators/select.js +15 -0
  298. package/dist/src/decorators/select.js.map +1 -0
  299. package/dist/src/decorators/shared-entity.d.ts +9 -0
  300. package/dist/src/decorators/shared-entity.d.ts.map +1 -0
  301. package/dist/src/decorators/shared-entity.js +15 -0
  302. package/dist/src/decorators/shared-entity.js.map +1 -0
  303. package/dist/src/decorators/skip.d.ts +2 -0
  304. package/dist/src/decorators/skip.d.ts.map +1 -1
  305. package/dist/src/decorators/skip.js +2 -0
  306. package/dist/src/decorators/skip.js.map +1 -1
  307. package/dist/src/decorators/term.d.ts +13 -0
  308. package/dist/src/decorators/term.d.ts.map +1 -0
  309. package/dist/src/decorators/term.js +14 -0
  310. package/dist/src/decorators/term.js.map +1 -0
  311. package/dist/src/decorators/top.d.ts +2 -0
  312. package/dist/src/decorators/top.d.ts.map +1 -1
  313. package/dist/src/decorators/top.js +2 -0
  314. package/dist/src/decorators/top.js.map +1 -1
  315. package/dist/src/decorators/workload-name-msa.d.ts +11 -0
  316. package/dist/src/decorators/workload-name-msa.d.ts.map +1 -0
  317. package/dist/src/decorators/workload-name-msa.js +15 -0
  318. package/dist/src/decorators/workload-name-msa.js.map +1 -0
  319. package/dist/src/decorators/workload-name.d.ts +11 -0
  320. package/dist/src/decorators/workload-name.d.ts.map +1 -0
  321. package/dist/src/decorators/workload-name.js +15 -0
  322. package/dist/src/decorators/workload-name.js.map +1 -0
  323. package/dist/src/decorators/workload-namespace.d.ts +12 -0
  324. package/dist/src/decorators/workload-namespace.d.ts.map +1 -0
  325. package/dist/src/decorators/workload-namespace.js +21 -0
  326. package/dist/src/decorators/workload-namespace.js.map +1 -0
  327. package/dist/src/decorators/write-only.d.ts +2 -0
  328. package/dist/src/decorators/write-only.d.ts.map +1 -1
  329. package/dist/src/decorators/write-only.js +2 -0
  330. package/dist/src/decorators/write-only.js.map +1 -1
  331. package/dist/src/dom/error-interceptor.d.ts +2 -0
  332. package/dist/src/dom/error-interceptor.d.ts.map +1 -0
  333. package/dist/src/dom/error-interceptor.js +13 -0
  334. package/dist/src/dom/error-interceptor.js.map +1 -0
  335. package/dist/src/dom/reconciler.js.map +1 -1
  336. package/dist/src/dom/renderer.d.ts +1 -0
  337. package/dist/src/dom/renderer.d.ts.map +1 -1
  338. package/dist/src/dom/renderer.js +1 -0
  339. package/dist/src/dom/renderer.js.map +1 -1
  340. package/dist/src/emitter.d.ts +2 -1
  341. package/dist/src/emitter.d.ts.map +1 -1
  342. package/dist/src/emitter.js +31 -2
  343. package/dist/src/emitter.js.map +1 -1
  344. package/dist/src/entities/address-url.d.ts +8 -0
  345. package/dist/src/entities/address-url.d.ts.map +1 -0
  346. package/dist/src/entities/address-url.js +47 -0
  347. package/dist/src/entities/address-url.js.map +1 -0
  348. package/dist/src/entities/annotations.d.ts +53 -0
  349. package/dist/src/entities/annotations.d.ts.map +1 -0
  350. package/dist/src/entities/annotations.js +185 -0
  351. package/dist/src/entities/annotations.js.map +1 -0
  352. package/dist/src/entities/entity-container.d.ts +24 -23
  353. package/dist/src/entities/entity-container.d.ts.map +1 -1
  354. package/dist/src/entities/entity-container.js +58 -119
  355. package/dist/src/entities/entity-container.js.map +1 -1
  356. package/dist/src/entities/enum.d.ts +3 -0
  357. package/dist/src/entities/enum.d.ts.map +1 -1
  358. package/dist/src/entities/enum.js +12 -5
  359. package/dist/src/entities/enum.js.map +1 -1
  360. package/dist/src/entities/model.d.ts +47 -27
  361. package/dist/src/entities/model.d.ts.map +1 -1
  362. package/dist/src/entities/model.js +357 -96
  363. package/dist/src/entities/model.js.map +1 -1
  364. package/dist/src/entities/ms-graph-route.d.ts +13 -0
  365. package/dist/src/entities/ms-graph-route.d.ts.map +1 -0
  366. package/dist/src/entities/ms-graph-route.js +67 -0
  367. package/dist/src/entities/ms-graph-route.js.map +1 -0
  368. package/dist/src/entities/namespace.d.ts +32 -4
  369. package/dist/src/entities/namespace.d.ts.map +1 -1
  370. package/dist/src/entities/namespace.js +354 -18
  371. package/dist/src/entities/namespace.js.map +1 -1
  372. package/dist/src/entities/operation.d.ts +20 -2
  373. package/dist/src/entities/operation.d.ts.map +1 -1
  374. package/dist/src/entities/operation.js +162 -25
  375. package/dist/src/entities/operation.js.map +1 -1
  376. package/dist/src/entities/property.d.ts.map +1 -1
  377. package/dist/src/entities/property.js +10 -0
  378. package/dist/src/entities/property.js.map +1 -1
  379. package/dist/src/entities/revision-definition.d.ts +3 -2
  380. package/dist/src/entities/revision-definition.d.ts.map +1 -1
  381. package/dist/src/entities/revision-definition.js +18 -7
  382. package/dist/src/entities/revision-definition.js.map +1 -1
  383. package/dist/src/entities/term.d.ts +8 -0
  384. package/dist/src/entities/term.d.ts.map +1 -0
  385. package/dist/src/entities/term.js +14 -0
  386. package/dist/src/entities/term.js.map +1 -0
  387. package/dist/src/index.d.ts +2 -0
  388. package/dist/src/index.d.ts.map +1 -1
  389. package/dist/src/index.js +2 -0
  390. package/dist/src/index.js.map +1 -1
  391. package/dist/src/lib.d.ts +141 -86
  392. package/dist/src/lib.d.ts.map +1 -1
  393. package/dist/src/lib.js +90 -11
  394. package/dist/src/lib.js.map +1 -1
  395. package/dist/src/linter.d.ts +1 -2
  396. package/dist/src/linter.d.ts.map +1 -1
  397. package/dist/src/linter.js +34 -34
  398. package/dist/src/linter.js.map +1 -1
  399. package/dist/src/path-tree.d.ts +16 -0
  400. package/dist/src/path-tree.d.ts.map +1 -0
  401. package/dist/src/path-tree.js +76 -0
  402. package/dist/src/path-tree.js.map +1 -0
  403. package/dist/src/rules/abstract.d.ts +2 -1
  404. package/dist/src/rules/abstract.d.ts.map +1 -1
  405. package/dist/src/rules/abstract.js +8 -8
  406. package/dist/src/rules/abstract.js.map +1 -1
  407. package/dist/src/rules/address-url.d.ts +20 -0
  408. package/dist/src/rules/address-url.d.ts.map +1 -0
  409. package/dist/src/rules/address-url.js +248 -0
  410. package/dist/src/rules/address-url.js.map +1 -0
  411. package/dist/src/rules/allowed-values.d.ts +7 -0
  412. package/dist/src/rules/allowed-values.d.ts.map +1 -0
  413. package/dist/src/rules/allowed-values.js +59 -0
  414. package/dist/src/rules/allowed-values.js.map +1 -0
  415. package/dist/src/rules/alternate-key.d.ts +4 -3
  416. package/dist/src/rules/alternate-key.d.ts.map +1 -1
  417. package/dist/src/rules/alternate-key.js +23 -23
  418. package/dist/src/rules/alternate-key.js.map +1 -1
  419. package/dist/src/rules/collection-navigation-properties-not-nullable.d.ts +3 -0
  420. package/dist/src/rules/collection-navigation-properties-not-nullable.d.ts.map +1 -0
  421. package/dist/src/rules/collection-navigation-properties-not-nullable.js +28 -0
  422. package/dist/src/rules/collection-navigation-properties-not-nullable.js.map +1 -0
  423. package/dist/src/rules/complex.d.ts +3 -0
  424. package/dist/src/rules/complex.d.ts.map +1 -0
  425. package/dist/src/rules/complex.js +27 -0
  426. package/dist/src/rules/complex.js.map +1 -0
  427. package/dist/src/rules/computed.d.ts +2 -3
  428. package/dist/src/rules/computed.d.ts.map +1 -1
  429. package/dist/src/rules/computed.js +14 -16
  430. package/dist/src/rules/computed.js.map +1 -1
  431. package/dist/src/rules/contains.d.ts +2 -1
  432. package/dist/src/rules/contains.d.ts.map +1 -1
  433. package/dist/src/rules/contains.js +9 -8
  434. package/dist/src/rules/contains.js.map +1 -1
  435. package/dist/src/rules/count.d.ts +2 -1
  436. package/dist/src/rules/count.d.ts.map +1 -1
  437. package/dist/src/rules/count.js +12 -9
  438. package/dist/src/rules/count.js.map +1 -1
  439. package/dist/src/rules/delta.d.ts +8 -0
  440. package/dist/src/rules/delta.d.ts.map +1 -0
  441. package/dist/src/rules/delta.js +208 -0
  442. package/dist/src/rules/delta.js.map +1 -0
  443. package/dist/src/rules/disallowed-typespec-decorators.d.ts +3 -0
  444. package/dist/src/rules/disallowed-typespec-decorators.d.ts.map +1 -0
  445. package/dist/src/rules/disallowed-typespec-decorators.js +37 -0
  446. package/dist/src/rules/disallowed-typespec-decorators.js.map +1 -0
  447. package/dist/src/rules/documentation.d.ts +4 -0
  448. package/dist/src/rules/documentation.d.ts.map +1 -0
  449. package/dist/src/rules/documentation.js +88 -0
  450. package/dist/src/rules/documentation.js.map +1 -0
  451. package/dist/src/rules/entity.d.ts +9 -2
  452. package/dist/src/rules/entity.d.ts.map +1 -1
  453. package/dist/src/rules/entity.js +173 -17
  454. package/dist/src/rules/entity.js.map +1 -1
  455. package/dist/src/rules/enum.d.ts +5 -1
  456. package/dist/src/rules/enum.d.ts.map +1 -1
  457. package/dist/src/rules/enum.js +35 -6
  458. package/dist/src/rules/enum.js.map +1 -1
  459. package/dist/src/rules/expand.d.ts +3 -2
  460. package/dist/src/rules/expand.d.ts.map +1 -1
  461. package/dist/src/rules/expand.js +27 -24
  462. package/dist/src/rules/expand.js.map +1 -1
  463. package/dist/src/rules/extends-on-same-type.d.ts +3 -0
  464. package/dist/src/rules/extends-on-same-type.d.ts.map +1 -0
  465. package/dist/src/rules/extends-on-same-type.js +39 -0
  466. package/dist/src/rules/extends-on-same-type.js.map +1 -0
  467. package/dist/src/rules/filter.d.ts +7 -0
  468. package/dist/src/rules/filter.d.ts.map +1 -0
  469. package/dist/src/rules/filter.js +160 -0
  470. package/dist/src/rules/filter.js.map +1 -0
  471. package/dist/src/rules/function.d.ts +3 -1
  472. package/dist/src/rules/function.d.ts.map +1 -1
  473. package/dist/src/rules/function.js +48 -9
  474. package/dist/src/rules/function.js.map +1 -1
  475. package/dist/src/rules/global-operation.d.ts +4 -0
  476. package/dist/src/rules/global-operation.d.ts.map +1 -0
  477. package/dist/src/rules/global-operation.js +60 -0
  478. package/dist/src/rules/global-operation.js.map +1 -0
  479. package/dist/src/rules/graph-deprecated.d.ts +8 -0
  480. package/dist/src/rules/graph-deprecated.d.ts.map +1 -0
  481. package/dist/src/rules/graph-deprecated.js +152 -0
  482. package/dist/src/rules/graph-deprecated.js.map +1 -0
  483. package/dist/src/rules/graph-route.d.ts +17 -0
  484. package/dist/src/rules/graph-route.d.ts.map +1 -0
  485. package/dist/src/rules/graph-route.js +395 -0
  486. package/dist/src/rules/graph-route.js.map +1 -0
  487. package/dist/src/rules/index.d.ts +24 -4
  488. package/dist/src/rules/index.d.ts.map +1 -1
  489. package/dist/src/rules/index.js +24 -89
  490. package/dist/src/rules/index.js.map +1 -1
  491. package/dist/src/rules/limited-charset.d.ts +3 -0
  492. package/dist/src/rules/limited-charset.d.ts.map +1 -0
  493. package/dist/src/rules/limited-charset.js +42 -0
  494. package/dist/src/rules/limited-charset.js.map +1 -0
  495. package/dist/src/rules/media.d.ts +10 -0
  496. package/dist/src/rules/media.d.ts.map +1 -0
  497. package/dist/src/rules/media.js +122 -0
  498. package/dist/src/rules/media.js.map +1 -0
  499. package/dist/src/rules/model.d.ts +12 -0
  500. package/dist/src/rules/model.d.ts.map +1 -0
  501. package/dist/src/rules/model.js +135 -0
  502. package/dist/src/rules/model.js.map +1 -0
  503. package/dist/src/rules/namespace.d.ts +6 -0
  504. package/dist/src/rules/namespace.d.ts.map +1 -0
  505. package/dist/src/rules/namespace.js +110 -0
  506. package/dist/src/rules/namespace.js.map +1 -0
  507. package/dist/src/rules/open.d.ts +2 -1
  508. package/dist/src/rules/open.d.ts.map +1 -1
  509. package/dist/src/rules/open.js +9 -8
  510. package/dist/src/rules/open.js.map +1 -1
  511. package/dist/src/rules/operation-inside-interface.d.ts +7 -0
  512. package/dist/src/rules/operation-inside-interface.d.ts.map +1 -0
  513. package/dist/src/rules/operation-inside-interface.js +96 -0
  514. package/dist/src/rules/operation-inside-interface.js.map +1 -0
  515. package/dist/src/rules/order-by.d.ts +3 -2
  516. package/dist/src/rules/order-by.d.ts.map +1 -1
  517. package/dist/src/rules/order-by.js +27 -26
  518. package/dist/src/rules/order-by.js.map +1 -1
  519. package/dist/src/rules/ownerless.d.ts +11 -0
  520. package/dist/src/rules/ownerless.d.ts.map +1 -0
  521. package/dist/src/rules/ownerless.js +170 -0
  522. package/dist/src/rules/ownerless.js.map +1 -0
  523. package/dist/src/rules/partial.d.ts +9 -0
  524. package/dist/src/rules/partial.d.ts.map +1 -0
  525. package/dist/src/rules/partial.js +84 -0
  526. package/dist/src/rules/partial.js.map +1 -0
  527. package/dist/src/rules/record-t.d.ts +11 -0
  528. package/dist/src/rules/record-t.d.ts.map +1 -0
  529. package/dist/src/rules/record-t.js +129 -0
  530. package/dist/src/rules/record-t.js.map +1 -0
  531. package/dist/src/rules/reference-target.d.ts +6 -0
  532. package/dist/src/rules/reference-target.d.ts.map +1 -0
  533. package/dist/src/rules/reference-target.js +113 -0
  534. package/dist/src/rules/reference-target.js.map +1 -0
  535. package/dist/src/rules/references.d.ts +2 -1
  536. package/dist/src/rules/references.d.ts.map +1 -1
  537. package/dist/src/rules/references.js +9 -8
  538. package/dist/src/rules/references.js.map +1 -1
  539. package/dist/src/rules/required-for-create.d.ts +3 -0
  540. package/dist/src/rules/required-for-create.d.ts.map +1 -0
  541. package/dist/src/rules/required-for-create.js +41 -0
  542. package/dist/src/rules/required-for-create.js.map +1 -0
  543. package/dist/src/rules/return-source.d.ts +3 -0
  544. package/dist/src/rules/return-source.d.ts.map +1 -0
  545. package/dist/src/rules/return-source.js +27 -0
  546. package/dist/src/rules/return-source.js.map +1 -0
  547. package/dist/src/rules/search.d.ts +2 -1
  548. package/dist/src/rules/search.d.ts.map +1 -1
  549. package/dist/src/rules/search.js +12 -9
  550. package/dist/src/rules/search.js.map +1 -1
  551. package/dist/src/rules/shared-entity.d.ts +8 -0
  552. package/dist/src/rules/shared-entity.d.ts.map +1 -0
  553. package/dist/src/rules/shared-entity.js +176 -0
  554. package/dist/src/rules/shared-entity.js.map +1 -0
  555. package/dist/src/rules/skip.d.ts +2 -1
  556. package/dist/src/rules/skip.d.ts.map +1 -1
  557. package/dist/src/rules/skip.js +12 -9
  558. package/dist/src/rules/skip.js.map +1 -1
  559. package/dist/src/rules/top.d.ts +2 -1
  560. package/dist/src/rules/top.d.ts.map +1 -1
  561. package/dist/src/rules/top.js +12 -9
  562. package/dist/src/rules/top.js.map +1 -1
  563. package/dist/src/testing/index.d.ts +1 -0
  564. package/dist/src/testing/index.d.ts.map +1 -1
  565. package/dist/src/testing/index.js +21 -0
  566. package/dist/src/testing/index.js.map +1 -1
  567. package/dist/src/utils.d.ts +86 -2
  568. package/dist/src/utils.d.ts.map +1 -1
  569. package/dist/src/utils.js +733 -22
  570. package/dist/src/utils.js.map +1 -1
  571. package/dist/src/validate.d.ts +3 -0
  572. package/dist/src/validate.d.ts.map +1 -0
  573. package/dist/src/validate.js +97 -0
  574. package/dist/src/validate.js.map +1 -0
  575. package/lib/bodies.tsp +71 -0
  576. package/lib/decorators.tsp +345 -23
  577. package/lib/deployment.tsp +18 -0
  578. package/lib/lib.tsp +9 -23
  579. package/lib/msgraph.tsp +5 -0
  580. package/lib/porcelain.tsp +190 -0
  581. package/lib/responses.tsp +59 -0
  582. package/lib/shared-models.tsp +30 -0
  583. package/package.json +24 -31
  584. package/dist/src/decorators/attribute-builder.d.ts +0 -2
  585. package/dist/src/decorators/attribute-builder.d.ts.map +0 -1
  586. package/dist/src/decorators/attribute-builder.js +0 -166
  587. package/dist/src/decorators/attribute-builder.js.map +0 -1
  588. package/dist/src/decorators/attributes.d.ts +0 -57
  589. package/dist/src/decorators/attributes.d.ts.map +0 -1
  590. package/dist/src/decorators/attributes.js +0 -50
  591. package/dist/src/decorators/attributes.js.map +0 -1
  592. package/dist/src/decorators/decorator-parameter.d.ts +0 -4
  593. package/dist/src/decorators/decorator-parameter.d.ts.map +0 -1
  594. package/dist/src/decorators/decorator-parameter.js +0 -2
  595. package/dist/src/decorators/decorator-parameter.js.map +0 -1
  596. package/dist/src/decorators/handlers/custom/additional-query-parameters.d.ts +0 -15
  597. package/dist/src/decorators/handlers/custom/additional-query-parameters.d.ts.map +0 -1
  598. package/dist/src/decorators/handlers/custom/additional-query-parameters.js +0 -38
  599. package/dist/src/decorators/handlers/custom/additional-query-parameters.js.map +0 -1
  600. package/dist/src/decorators/handlers/custom/ags-attribute.d.ts +0 -8
  601. package/dist/src/decorators/handlers/custom/ags-attribute.d.ts.map +0 -1
  602. package/dist/src/decorators/handlers/custom/ags-attribute.js +0 -36
  603. package/dist/src/decorators/handlers/custom/ags-attribute.js.map +0 -1
  604. package/dist/src/decorators/handlers/custom/index.d.ts +0 -3
  605. package/dist/src/decorators/handlers/custom/index.d.ts.map +0 -1
  606. package/dist/src/decorators/handlers/custom/index.js +0 -3
  607. package/dist/src/decorators/handlers/custom/index.js.map +0 -1
  608. package/dist/src/decorators/handlers/index.d.ts +0 -31
  609. package/dist/src/decorators/handlers/index.d.ts.map +0 -1
  610. package/dist/src/decorators/handlers/index.js +0 -121
  611. package/dist/src/decorators/handlers/index.js.map +0 -1
  612. package/dist/src/decorators/has-stream.d.ts +0 -11
  613. package/dist/src/decorators/has-stream.d.ts.map +0 -1
  614. package/dist/src/decorators/has-stream.js +0 -17
  615. package/dist/src/decorators/has-stream.js.map +0 -1
  616. package/dist/src/rules/has-stream.d.ts +0 -2
  617. package/dist/src/rules/has-stream.d.ts.map +0 -1
  618. package/dist/src/rules/has-stream.js +0 -29
  619. package/dist/src/rules/has-stream.js.map +0 -1
package/dist/src/utils.js CHANGED
@@ -1,5 +1,19 @@
1
- import { getNamespaceFullName, isArrayModelType, } from "@typespec/compiler";
2
- import { getEntity, isEntity } from "./decorators/index.js";
1
+ import { getLocationContext, getNamespaceFullName, isArrayModelType, navigateTypesInNamespace, walkPropertiesInherited, } from "@typespec/compiler";
2
+ import { getEntity, getExpand, getFilter, getGraphRoutePaths, getPublicNamespaceName, getWorkloadNamespaceName, hasGraphRoute, hasPublicNamespace, hasWorkloadNamespace, isComplex, isContains, isDelta, isEntity, isExpand, isFilter, isPartial, isReferences, isSharedEntity } from "./decorators/index.js";
3
+ import { getOperationVerb } from "@typespec/http";
4
+ import { DEFAULT_MSGRAPH_NAMESPACE, GetDeclaredNamespaces, usedLibraryTypesKey } from "./entities/namespace.js";
5
+ import { PathTree } from "./path-tree.js";
6
+ // schema namespace is workloadNamespace if its defined or publicNamespace if its defined
7
+ export function hasSchemaNamespace(program, namespace) {
8
+ return hasWorkloadNamespace(program, namespace) || hasPublicNamespace(program, namespace);
9
+ }
10
+ // schema namespace is workloadNamespace if its defined, publicNamespace if its defined or the defined namespace name
11
+ export function getSchemaNamespaceName(program, namespace) {
12
+ if (hasWorkloadNamespace(program, namespace)) {
13
+ return getWorkloadNamespaceName(program, namespace);
14
+ }
15
+ return getPublicNamespaceName(program, namespace);
16
+ }
3
17
  export function getNameForType(program, type) {
4
18
  switch (type.kind) {
5
19
  case "Union":
@@ -25,6 +39,9 @@ export function getNameForType(program, type) {
25
39
  export function getNameForModelType(program, type) {
26
40
  switch (type.name) {
27
41
  case "string":
42
+ case "url":
43
+ case "graphUrl":
44
+ case "webUrl":
28
45
  return "Edm.String";
29
46
  case "bytes":
30
47
  return "Collection(Edm.Byte)";
@@ -46,12 +63,22 @@ export function getNameForModelType(program, type) {
46
63
  return "Edm.TimeOfDay";
47
64
  case "zonedDateTime":
48
65
  return "Edm.DateTimeOffset";
66
+ case "offsetDateTime":
67
+ return "Edm.DateTimeOffset";
68
+ case "utcDateTime":
69
+ return "Edm.DateTimeOffset";
49
70
  case "duration":
50
71
  return "Edm.Duration";
51
72
  case "boolean":
52
73
  return "Edm.Boolean";
53
74
  case "stream":
54
75
  return "Edm.Stream";
76
+ case "guid":
77
+ return "Edm.Guid";
78
+ case "binary":
79
+ return "Edm.Binary";
80
+ case "unknown":
81
+ return "Edm.Untyped";
55
82
  default:
56
83
  break;
57
84
  }
@@ -60,64 +87,215 @@ export function getNameForModelType(program, type) {
60
87
  }
61
88
  return `Collection(${getPropertyTypeName(program, type.indexer.value)})`;
62
89
  }
90
+ export function getCSDLPrimitiveType(typespecType) {
91
+ switch (typespecType) {
92
+ case "string":
93
+ return "String";
94
+ case "int8":
95
+ return "Byte";
96
+ case "int16":
97
+ return "Int16";
98
+ case "int32":
99
+ return "Int32";
100
+ case "int64":
101
+ return "Int64";
102
+ case "integer":
103
+ return "Int64";
104
+ case "float32":
105
+ return "Single";
106
+ case "float64":
107
+ return "Double";
108
+ case "decimal":
109
+ return "Decimal";
110
+ case "guid":
111
+ return "Guid";
112
+ case "plainDate":
113
+ return "Date";
114
+ case "plainTime":
115
+ return "TimeOfDay";
116
+ case "zonedDateTime":
117
+ return "DateTimeOffset";
118
+ case "duration":
119
+ return "Duration";
120
+ case "boolean":
121
+ return "Bool";
122
+ case "stream":
123
+ return "Stream";
124
+ default:
125
+ return typespecType;
126
+ }
127
+ }
128
+ export function isDictionaryType(program, type) {
129
+ var _a;
130
+ if (type.kind === "Model" && isTypeDefinedInLocalProject(program, type)) {
131
+ const indexer = (_a = type.indexer) === null || _a === void 0 ? void 0 : _a.value;
132
+ if (indexer) {
133
+ return true;
134
+ }
135
+ if (isComplex(program, type) && type.name === "Dictionary") {
136
+ return true;
137
+ }
138
+ }
139
+ return false;
140
+ }
141
+ export function generateDictionaryBaseType(program, model) {
142
+ if (getLocationContext(program, model).type === "library") {
143
+ return undefined;
144
+ }
145
+ if (isDictionaryType(program, model)) {
146
+ return "microsoft.graph.Dictionary";
147
+ }
148
+ return undefined;
149
+ }
63
150
  export function getIdForType(program, type) {
64
151
  switch (type.kind) {
65
152
  case "Namespace":
66
- return getNamespaceFullName(type);
153
+ if (hasWorkloadNamespace(program, type)) {
154
+ return getWorkloadNamespaceName(program, type);
155
+ }
156
+ else if (hasPublicNamespace(program, type)) {
157
+ return getPublicNamespaceName(program, type);
158
+ }
159
+ else {
160
+ return getNamespaceFullName(type);
161
+ }
67
162
  case "Model":
68
163
  case "Enum":
69
164
  case "Operation":
70
165
  case "Interface":
71
- return `${getNamespaceFullName(type.namespace)}.${type.name}`;
166
+ return `${getIdForType(program, type.namespace)}.${type.name}`;
72
167
  case "String":
73
168
  case "Number":
74
169
  case "Boolean":
75
170
  return `${type.value}`;
76
171
  case "Union":
77
172
  return getIdForUnion(program, type);
173
+ case "Scalar":
174
+ case "Intrinsic":
175
+ return getNameForModelType(program, type);
176
+ case "EnumMember":
177
+ return `${type.name}`;
78
178
  default:
79
179
  return type.kind;
80
180
  }
81
181
  }
82
182
  export function getNavigationTypeId(program, getOperation) {
83
- var _a;
183
+ var _a, _b;
84
184
  const returnType = getOperation.returnType;
85
- if (returnType.kind !== "Model" || !((_a = returnType.templateArguments) === null || _a === void 0 ? void 0 : _a.length)) {
185
+ if (returnType.kind !== "Model" || !((_a = returnType.templateMapper) === null || _a === void 0 ? void 0 : _a.args.length)) {
86
186
  return getIdForType(program, returnType);
87
187
  }
88
- return getIdForType(program, returnType.templateArguments[0]);
188
+ return getIdForType(program, (_b = returnType === null || returnType === void 0 ? void 0 : returnType.templateMapper) === null || _b === void 0 ? void 0 : _b.args[0]);
189
+ }
190
+ export function getInterfacesOfKinds(program, navigationSources, kinds) {
191
+ const interfaces = new Map();
192
+ navigationSources.forEach((theInterface) => {
193
+ if (!getSourceInterfaces(theInterface).some((s) => kinds.includes(s.name))) {
194
+ // if source interfaces DO NOT have the kinds.
195
+ return;
196
+ }
197
+ const navigationSourceType = getInterfaceNavigationSourceType(program, theInterface);
198
+ if (navigationSourceType && isTypeDefinedInExternalLibrary(program, navigationSourceType)) {
199
+ program.stateSet(usedLibraryTypesKey).add(navigationSourceType);
200
+ }
201
+ const graphRoutePaths = getGraphRoutePaths(program, theInterface);
202
+ if (!graphRoutePaths || !graphRoutePaths.length) {
203
+ return;
204
+ }
205
+ graphRoutePaths.forEach((graphRoute) => {
206
+ // skip two-segment resources as they are collections
207
+ if (isRouteIndexOfACollection(theInterface, graphRoute)) {
208
+ return;
209
+ }
210
+ processGraphRoute(program, graphRoute, interfaces, theInterface);
211
+ });
212
+ });
213
+ return interfaces;
214
+ }
215
+ export function isRouteIndexOfACollection(theInterface, graphRoute) {
216
+ if (theInterface === undefined) {
217
+ return false;
218
+ }
219
+ const pathSegments = graphRoute.split("/");
220
+ const lastSegment = pathSegments[pathSegments.length - 1].replace(/\{[\w-]+\}/g, "");
221
+ if (lastSegment === "" && getSourceInterfaces(theInterface).some((s) => s.name === "Resource")) {
222
+ return true;
223
+ }
224
+ return false;
225
+ }
226
+ export function getComposableFunctionSegmentFromGraphRoute(graphRoutePath) {
227
+ const pattern = /\/([^\/]+\(.*\))$/;
228
+ const matches = graphRoutePath.match(pattern);
229
+ return matches != null ? matches[1] : undefined;
230
+ }
231
+ // Generate an interface for a resource that has a root path and an index like /users/{id}. Note that this is a collection.
232
+ // Resources with two-segment paths like /users/{id} are essentially collections
233
+ // This applies to deeply nested resources as well e.g. /cars/{carId}/wheels/{wheelId}
234
+ export function getCollectionIndexInterfaces(program, navigationSources) {
235
+ const interfaces = new Map();
236
+ navigationSources.forEach((theInterface) => {
237
+ const graphRoutePaths = getGraphRoutePaths(program, theInterface);
238
+ if (!graphRoutePaths || !graphRoutePaths.length) {
239
+ return;
240
+ }
241
+ graphRoutePaths.forEach((graphRoute) => {
242
+ if (isRouteIndexOfACollection(theInterface, graphRoute)) {
243
+ processGraphRoute(program, graphRoute, interfaces, theInterface);
244
+ }
245
+ });
246
+ });
247
+ return interfaces;
248
+ }
249
+ function processGraphRoute(program, graphRoute, interfaces, theInterface) {
250
+ const path = removeRoutePathParams(graphRoute);
251
+ if (!path) {
252
+ return;
253
+ }
254
+ let operations = [...theInterface.operations.values()].map((operation) => ({ theOperation: operation, verb: getOperationVerb(program, operation), graphRoute: graphRoute }));
255
+ if (interfaces.has(path)) {
256
+ const existing = interfaces.get(path);
257
+ operations = [...operations, ...existing.operations];
258
+ }
259
+ interfaces.set(path, {
260
+ theInterface: theInterface,
261
+ operations: operations,
262
+ path: graphRoute
263
+ });
89
264
  }
90
265
  export function getPropertyTypeName(program, type) {
91
266
  var _a;
92
267
  if (type.kind === "Union") {
93
268
  const unionTypes = extractTypesFromUnion(type);
94
- const nonNullTypes = unionTypes.filter((t) => !isNullType(program, t));
269
+ const nonNullTypes = unionTypes.filter((t) => !isNullType(t));
95
270
  if (!nonNullTypes.length) {
96
271
  return "undefined.";
97
272
  }
98
- return getPropertyTypeName(program, nonNullTypes[0]);
273
+ return removeReferencePrefixFromType(getPropertyTypeName(program, nonNullTypes[0]));
99
274
  }
100
275
  if ((type.kind === "Model" || type.kind === "Scalar") && ((_a = type.namespace) === null || _a === void 0 ? void 0 : _a.name) === "TypeSpec") {
101
- return getNameForType(program, type);
276
+ return removeReferencePrefixFromType(getNameForType(program, type));
102
277
  }
103
- return getIdForType(program, type);
278
+ return removeReferencePrefixFromType(getIdForType(program, type));
279
+ }
280
+ export function removeReferencePrefixFromType(typeName) {
281
+ return typeName.replace(/^reference\./, "");
104
282
  }
105
283
  export function isTypeNullable(program, type) {
106
284
  if (type.kind !== "Union") {
107
285
  return false;
108
286
  }
109
287
  const unionTypes = extractTypesFromUnion(type);
110
- return unionTypes.some((t) => isNullType(program, t));
288
+ return unionTypes.some((t) => isNullType(t));
111
289
  }
112
290
  function getIdForUnion(program, unionType) {
113
291
  const unionTypes = extractTypesFromUnion(unionType);
114
- const nonNullTypes = unionTypes.filter((t) => !isNullType(program, t));
292
+ const nonNullTypes = unionTypes.filter((t) => !isNullType(t));
115
293
  if (!nonNullTypes.length) {
116
294
  return "undefined.";
117
295
  }
118
296
  return getIdForType(program, nonNullTypes[0]);
119
297
  }
120
- function isNullType(program, type) {
298
+ export function isNullType(type) {
121
299
  return type.kind === "Intrinsic" && type.name === "null";
122
300
  }
123
301
  export function extractTypesFromUnion(type) {
@@ -130,6 +308,26 @@ export function getSingletonTypeId(program, singletonType, getOperation) {
130
308
  }
131
309
  return getOperation && getNavigationTypeId(program, getOperation);
132
310
  }
311
+ /**
312
+ * Returns whether a type matches Graph's definition of a collection
313
+ * @param program
314
+ * @param type
315
+ */
316
+ export function isTypeCollection(Program, type) {
317
+ let modelTypes = [];
318
+ if (type.kind === "Union") {
319
+ const extracted = (extractTypesFromUnion(type).filter((t) => t.kind === "Model"));
320
+ modelTypes = modelTypes.concat(extracted);
321
+ }
322
+ else if (type.kind === "Model") {
323
+ modelTypes.push(type);
324
+ }
325
+ if (modelTypes.length === 0) {
326
+ return false;
327
+ }
328
+ return modelTypes.some((t) => t.kind === "Model" &&
329
+ (t.name === "Array" || t.name.includes("Collection")));
330
+ }
133
331
  /**
134
332
  * Imported from typespec-azure
135
333
  * Returns the full namespace name for the given type, if available.
@@ -153,7 +351,8 @@ export function getNamespaceName(program, type) {
153
351
  if (type === undefined) {
154
352
  return "";
155
353
  }
156
- return getNamespaceFullName(type);
354
+ const fullNamespaceName = getNamespaceFullName(type);
355
+ return fullNamespaceName;
157
356
  }
158
357
  /**
159
358
  * Imported from typespec-azure
@@ -167,20 +366,532 @@ export function isExcludedCoreType(program, type) {
167
366
  // https://github.com/Azure/typespec-azure/issues/801#issuecomment-1194454247
168
367
  //
169
368
  const nsName = getNamespaceName(program, type);
170
- const excludedNamespaces = ["TypeSpec", "TypeSpec"];
369
+ const excludedNamespaces = ["TypeSpec", "MsGraph"];
370
+ const isExcluded = excludedNamespaces.find((ns) => nsName.startsWith(ns)) !== undefined;
371
+ return isExcluded;
372
+ }
373
+ export function isExcludedLibraryType(program, type) {
374
+ const nsName = getNamespaceName(program, type);
375
+ const excludedNamespaces = ["TypeSpec", "MsGraph"];
171
376
  return excludedNamespaces.find((ns) => nsName.startsWith(ns)) !== undefined;
172
377
  }
173
378
  export function isNavigationProperty(program, property) {
174
- let propertyType = property.type;
175
- if (propertyType.kind !== "Model") {
379
+ const model = getTypeModel(program, property.type);
380
+ if (!model) {
381
+ return false;
382
+ }
383
+ return isEntity(program, model) && (isContains(program, property) || isReferences(program, property));
384
+ }
385
+ export function isNavigationSource(theInterface) {
386
+ return findNavigationSource(theInterface) !== undefined;
387
+ }
388
+ export function isTopLevelNavigationSource(theInterface) {
389
+ return removeRoutePathParams(theInterface.path).split("/").length === 1;
390
+ }
391
+ // Get the type returned by all operations in an interface representing a navigation source.
392
+ // This is the 'T' in Collection<T> and friends.
393
+ export function getInterfaceNavigationSourceType(program, theInterface) {
394
+ var _a;
395
+ const navSource = findNavigationSource(theInterface);
396
+ if (navSource === undefined) {
397
+ return undefined;
398
+ }
399
+ else {
400
+ return (_a = navSource.templateMapper) === null || _a === void 0 ? void 0 : _a.args[0];
401
+ }
402
+ }
403
+ // Get the type returned by all operations in an interface representing a navigation source.
404
+ export function getNavigationSourceType(program, operation) {
405
+ return getInterfaceNavigationSourceType(program, operation.interface);
406
+ }
407
+ function findNavigationSource(theInterface) {
408
+ for (const baseInterface of getSourceInterfaces(theInterface)) {
409
+ if (baseInterface.name === "Resource" || baseInterface.name === "Collection") {
410
+ return baseInterface;
411
+ }
412
+ else {
413
+ const baseBase = findNavigationSource(baseInterface);
414
+ if (baseBase !== undefined) {
415
+ return baseBase;
416
+ }
417
+ }
418
+ }
419
+ return undefined;
420
+ }
421
+ /**
422
+ * Removes route path params from a route path
423
+ *
424
+ * Examples:
425
+ * - user/{id}/manager -> user/manager
426
+ * - user/{id}/friends/{friendId}/hobbies -> user/friends/hobbies
427
+ * - user/{user-id}/friends/{friend-id}/hobbies -> user/friends/hobbies
428
+ */
429
+ export function removeRoutePathParams(routePath) {
430
+ return routePath.replace(/\/\{[\w-]+\}/g, "");
431
+ }
432
+ export function isSameNamespace(program, model, baseModel) {
433
+ if (!baseModel) {
434
+ return false;
435
+ }
436
+ return getNamespaceName(program, model) === getNamespaceName(program, baseModel);
437
+ }
438
+ export function isTypeDefinedInExternalLibrary(program, type) {
439
+ const locationContext = getLocationContext(program, type);
440
+ return locationContext.type === "library";
441
+ }
442
+ export function isTypeDefinedInLocalProject(program, type) {
443
+ const locationContext = getLocationContext(program, type);
444
+ return locationContext.type === "project";
445
+ }
446
+ /**
447
+ * Recursively get all source interfaces of an interface
448
+ * @param theInterface
449
+ * @returns an array of all source interfaces
450
+ */
451
+ export function getSourceInterfaces(theInterface) {
452
+ return [...theInterface.sourceInterfaces, ...[...theInterface.sourceInterfaces.values()].flatMap(getSourceInterfaces)];
453
+ }
454
+ export function getModelStructuralPropertyNames(program, model) {
455
+ return getModelPropertyNames(program, model, true);
456
+ }
457
+ export function getAllModelPropertyNames(program, model) {
458
+ return getModelPropertyNames(program, model, false);
459
+ }
460
+ function getModelPropertyNames(program, model, structuralPropertiesOnly) {
461
+ const propertyNames = getModelProperties(program, model, structuralPropertiesOnly).map(p => p.name.trim());
462
+ const propertiesOfTypeModel = getPropertiesOfTypeModel(program, model, structuralPropertiesOnly);
463
+ const nestedPropertyNames = getNestedPropertyNames(program, propertiesOfTypeModel, structuralPropertiesOnly);
464
+ return [...new Set([...propertyNames, ...nestedPropertyNames])].filter(p => p !== model.name);
465
+ }
466
+ export function getModelProperties(program, model, structuralPropertiesOnly = false) {
467
+ const allProperties = walkPropertiesInherited(model);
468
+ // structural properties are the ones that are not navigation properties
469
+ if (structuralPropertiesOnly) {
470
+ return [...allProperties].filter(p => !isNavigationProperty(program, p));
471
+ }
472
+ return [...allProperties];
473
+ }
474
+ function getPropertiesOfTypeModel(program, model, structuralPropertiesOnly = false) {
475
+ const properties = getModelProperties(program, model, structuralPropertiesOnly);
476
+ const propertiesOfTypeModel = [];
477
+ for (const property of properties) {
478
+ const model = getTypeModel(program, property.type, structuralPropertiesOnly);
479
+ if (model) {
480
+ propertiesOfTypeModel.push({
481
+ name: property.name,
482
+ type: model
483
+ });
484
+ }
485
+ }
486
+ return propertiesOfTypeModel;
487
+ }
488
+ function getNestedPropertyNames(program, propertyTypes, structuralPropertiesOnly = false, prefix = "") {
489
+ const names = [];
490
+ if (prefix && hasRepeatedItem(prefix)) {
491
+ return names;
492
+ }
493
+ for (const propertyType of propertyTypes) {
494
+ const propertyTypePrefix = prefix + propertyType.name + "/";
495
+ const nestedPropertyTypes = getNestedPropertyTypes(program, propertyType, structuralPropertiesOnly);
496
+ nestedPropertyTypes.forEach(m => {
497
+ const name = propertyTypePrefix + m.name;
498
+ if (!hasRepeatedItem(name)) {
499
+ names.push(name);
500
+ }
501
+ });
502
+ names.push(...getNestedPropertyNames(program, nestedPropertyTypes, structuralPropertiesOnly, propertyTypePrefix));
503
+ }
504
+ return names;
505
+ }
506
+ function getNestedPropertyTypes(program, propertyType, structuralPropertiesOnly = false) {
507
+ const propertyTypes = [];
508
+ const theType = propertyType.type;
509
+ if (theType.kind === "Scalar" || theType.kind === "Enum") {
510
+ return propertyTypes;
511
+ }
512
+ theType.properties.forEach((property, name) => {
513
+ const type = getPropertyType(program, property, structuralPropertiesOnly);
514
+ if (type !== undefined) {
515
+ propertyTypes.push({ name: name, type: type });
516
+ }
517
+ });
518
+ return propertyTypes;
519
+ }
520
+ function getPropertyType(program, property, structuralPropertiesOnly = false) {
521
+ if (structuralPropertiesOnly && isNavigationProperty(program, property)) {
522
+ return undefined;
523
+ }
524
+ const type = getActualType(program, property.type);
525
+ if (!type || !(type.kind === "Model" || type.kind === "Scalar" || type.kind === "Enum")) {
526
+ return undefined;
527
+ }
528
+ return type;
529
+ }
530
+ /**
531
+ * This function checks if a path is repeating.
532
+ * For example, if we have a tsp with this structure:
533
+ * @complex model inner {
534
+ innerName: string;
535
+ otherInnerName: string;
536
+ circularReferenceProp: outer;
537
+ }
538
+
539
+ @complex model outer {
540
+ inner: inner | null;
541
+ }
542
+
543
+ If our root (interface navigation type) is outer, some of the possible paths would be
544
+ - outer/inner/innerName
545
+ - outer/inner/otherInnerName
546
+ For circularReferenceProp property, we run the risk of having a path like the one below which would cause an infinite loop:
547
+ - outer/inner/circularReferenceProp/inner/circularReferenceProp
548
+ * @param slashSeparatedString
549
+ * @returns
550
+ */
551
+ function hasRepeatedItem(slashSeparatedString) {
552
+ const items = slashSeparatedString.split('/');
553
+ const uniqueItems = new Set(items);
554
+ return items.length !== uniqueItems.size;
555
+ }
556
+ export function isInterfaceBindingTypeOwned(program, $interface) {
557
+ const interfaceBindingType = getInterfaceBindingType(program, $interface);
558
+ if (interfaceBindingType) {
559
+ if (isPartial(program, interfaceBindingType)) {
560
+ return false;
561
+ }
562
+ if (isTypeDefinedInExternalLibrary(program, interfaceBindingType)) {
563
+ return false;
564
+ }
565
+ }
566
+ return true;
567
+ }
568
+ function getInterfaceBindingType(program, $interface) {
569
+ const navigationSourceType = getInterfaceNavigationSourceType(program, $interface);
570
+ if (navigationSourceType) {
571
+ return getModelFromTemplateMapper(program, navigationSourceType);
572
+ }
573
+ return undefined;
574
+ }
575
+ export function getNestedComplexTypes(program, model, nestedModels = new Set()) {
576
+ nestedModels.add(model);
577
+ const modelProperties = model.properties;
578
+ if (modelProperties.size === 0) {
579
+ return nestedModels;
580
+ }
581
+ for (const property of modelProperties.values()) {
582
+ const model = getTypeModel(program, property.type);
583
+ if (model && !nestedModels.has(model)) {
584
+ getNestedComplexTypes(program, model, nestedModels);
585
+ }
586
+ }
587
+ return nestedModels;
588
+ }
589
+ export function generateDeltaPropertiesForNavigationProperties(program, navigationProperty) {
590
+ const navigationPropertyModel = getTypeModel(program, navigationProperty.type);
591
+ if (navigationPropertyModel) {
592
+ const interfacesTargetingParentModel = getInterfacesTargetingModel(program, navigationPropertyModel);
593
+ for (const theInterface of interfacesTargetingParentModel) {
594
+ const graphRoutes = getGraphRoutePaths(program, theInterface);
595
+ if (graphRoutes) {
596
+ for (const graphRoute of graphRoutes) {
597
+ const routeParts = graphRoute.split("/");
598
+ const navPropAtEndOfRoute = routeParts[routeParts.length - 1];
599
+ if (navPropAtEndOfRoute === navigationProperty.name) {
600
+ return getDeltaProperties(program, theInterface);
601
+ }
602
+ }
603
+ }
604
+ }
605
+ }
606
+ return undefined;
607
+ }
608
+ export function getInterfacesTargetingModel(program, type) {
609
+ const interfacesTargettingModel = [];
610
+ let model = getTypeModel(program, type);
611
+ if (model) {
612
+ const namespace = model.namespace;
613
+ const theInterfaces = namespace === null || namespace === void 0 ? void 0 : namespace.interfaces;
614
+ if (theInterfaces) {
615
+ for (const [_, theInterface] of theInterfaces.entries()) {
616
+ const navigationBindingType = getInterfaceNavigationSourceType(program, theInterface);
617
+ if (navigationBindingType && navigationBindingType.name === model.name) {
618
+ interfacesTargettingModel.push(theInterface);
619
+ }
620
+ }
621
+ }
622
+ }
623
+ return interfacesTargettingModel;
624
+ }
625
+ // This function gets filterable and expandable properties
626
+ export function getDeltaProperties(program, entity) {
627
+ const operations = entity.operations;
628
+ let hasDelta = false;
629
+ let filterProps;
630
+ let expandProps;
631
+ for (const [_, operation] of operations) {
632
+ // Get filterable and expandable properties as defined by @filter and @expand on the @delta operation
633
+ if (isDelta(program, operation)) {
634
+ hasDelta = true;
635
+ filterProps = getFilterableProperties(program, operation);
636
+ expandProps = getExpandableProperties(program, operation);
637
+ break;
638
+ }
639
+ }
640
+ // If the delta operation exists and the filter properties are not set, get the filter properties from the get operation
641
+ if (hasDelta && !filterProps) {
642
+ filterProps = [...getFilterablePropertiesFromGetOperation(program, operations)];
643
+ }
644
+ // If the delta operation exists and the expand properties are not set, get the expand properties from the get operation
645
+ if (hasDelta && !expandProps) {
646
+ expandProps = [...getExpandablePropertiesFromGetOperation(program, operations)];
647
+ }
648
+ if (hasDelta) {
649
+ return {
650
+ FilterProperties: filterProps,
651
+ ExpandProperties: expandProps,
652
+ };
653
+ }
654
+ return undefined;
655
+ }
656
+ function getFilterableProperties(program, operation) {
657
+ if (isFilter(program, operation)) {
658
+ const filterProps = getFilter(program, operation);
659
+ if (filterProps.includes("*")) {
660
+ // Return all structural properties (nested and inherited) as filterable
661
+ return getModelStructuralPropertyNamesFromOperation(program, operation);
662
+ }
663
+ return filterProps;
664
+ }
665
+ return undefined;
666
+ }
667
+ function getExpandableProperties(program, operation) {
668
+ if (isExpand(program, operation)) {
669
+ return getExpand(program, operation);
670
+ }
671
+ return undefined;
672
+ }
673
+ function getFilterablePropertiesFromGetOperation(program, operationsMap) {
674
+ const operations = [...operationsMap.values()];
675
+ if (operations.some(theOperation => isFilter(program, theOperation))) {
676
+ for (const operation of operations) {
677
+ if (operation.name === "get") {
678
+ if (isFilter(program, operation)) {
679
+ const filterProps = getFilter(program, operation);
680
+ if (filterProps.includes("*")) {
681
+ // Return all structural properties (nested and inherited) as filterable
682
+ return getModelStructuralPropertyNamesFromOperation(program, operation);
683
+ }
684
+ return filterProps;
685
+ }
686
+ }
687
+ }
688
+ }
689
+ return [];
690
+ }
691
+ function getModelStructuralPropertyNamesFromOperation(program, operation) {
692
+ const returnType = getNavigationSourceType(program, operation);
693
+ if (!returnType) {
694
+ return [];
695
+ }
696
+ const model = returnType.indexer ? returnType.indexer.value : returnType;
697
+ return getModelStructuralPropertyNames(program, model);
698
+ }
699
+ function getExpandablePropertiesFromGetOperation(program, operationsMap) {
700
+ const operations = [...operationsMap.values()];
701
+ if (operations.some(theOperation => isExpand(program, theOperation))) {
702
+ for (const operation of operations) {
703
+ if (operation.name === "get") {
704
+ if (isExpand(program, operation)) {
705
+ return getExpand(program, operation);
706
+ }
707
+ }
708
+ }
709
+ }
710
+ return [];
711
+ }
712
+ export function isCollection(theInterfaces) {
713
+ return theInterfaces.some(theInterface => theInterface.name === "Collection");
714
+ }
715
+ export function isUnion(type) {
716
+ return type.kind === "Union";
717
+ }
718
+ export function filterMapByIdenticalValues(inputMap) {
719
+ var _a;
720
+ const resultMap = new Map();
721
+ const valueToKeys = new Map();
722
+ // Iterate over the input map
723
+ for (const [key, value] of inputMap.entries()) {
724
+ if (!valueToKeys.has(value)) {
725
+ valueToKeys.set(value, [key]);
726
+ }
727
+ else {
728
+ (_a = valueToKeys.get(value)) === null || _a === void 0 ? void 0 : _a.push(key);
729
+ }
730
+ }
731
+ // Add keys with identical values to the result map
732
+ for (const [value, keys] of valueToKeys.entries()) {
733
+ if (keys.length > 1) {
734
+ keys.forEach((key) => resultMap.set(key, value));
735
+ }
736
+ }
737
+ return resultMap;
738
+ }
739
+ // This gets nested navigation paths for all contained and non-contained models and root paths for primitive types.
740
+ export function getAllNestedNavigationPaths(program, model) {
741
+ const structuralProperties = getModelProperties(program, model, false).map(property => property.name);
742
+ const rootPropertyNames = structuralProperties.map(property => model.name + "/" + property);
743
+ let nestedPropertyNames = getAllModelPropertyNames(program, model);
744
+ nestedPropertyNames = nestedPropertyNames.map(propertyName => model.name + "/" + propertyName);
745
+ return [...new Set([...structuralProperties, ...nestedPropertyNames, ...rootPropertyNames])].filter(path => path !== model.name);
746
+ }
747
+ export function removeTrailingSlash(path) {
748
+ return path.replace(/\/$/, "");
749
+ }
750
+ /**
751
+ *
752
+ * @param obj1 Function that checks for equality of two objects
753
+ * @param obj2
754
+ * @returns
755
+ */
756
+ export function isEqual(obj1, obj2) {
757
+ // Check if both are null or undefined
758
+ if (obj1 === obj2)
759
+ return true;
760
+ // Check if both are not objects or one is null
761
+ if (typeof obj1 !== 'object' || typeof obj2 !== 'object' || obj1 === null || obj2 === null) {
176
762
  return false;
177
763
  }
178
- if (isArrayModelType(program, propertyType)) {
179
- propertyType = propertyType.indexer.value;
180
- if (propertyType.kind !== "Model") {
764
+ // Check if they have the same number of properties
765
+ const keys1 = Object.keys(obj1);
766
+ const keys2 = Object.keys(obj2);
767
+ if (keys1.length !== keys2.length) {
768
+ return false;
769
+ }
770
+ // Check if values are the same for each property
771
+ for (let key of keys1) {
772
+ if (!keys2.includes(key) || !isEqual(obj1[key], obj2[key])) {
181
773
  return false;
182
774
  }
183
775
  }
184
- return isEntity(program, propertyType);
776
+ return true;
777
+ }
778
+ export function checkFunctionOverloadsWithReturnType(operation1, operation2) {
779
+ return functionOperationsAreOverloads(operation1, operation2, true);
780
+ }
781
+ export function checkFunctionOverloads(operation1, operation2) {
782
+ return functionOperationsAreOverloads(operation1, operation2);
783
+ }
784
+ function functionOperationsAreOverloads(operation1, operation2, checkReturnType = false) {
785
+ if (operation1.Name === operation2.Name && operation1.BindingTypeName === operation2.BindingTypeName) {
786
+ if (!checkReturnType || operation1.ReturnTypeName === operation2.ReturnTypeName) {
787
+ const properties1 = operation1.Properties.filter((property) => property.Name !== "bindingParameter").sort((a, b) => a.Name.localeCompare(b.Name));
788
+ const properties2 = operation2.Properties.filter((property) => property.Name !== "bindingParameter").sort((a, b) => a.Name.localeCompare(b.Name));
789
+ return isEqual(properties1, properties2);
790
+ }
791
+ }
792
+ return false;
793
+ }
794
+ /**
795
+ * @returns a Model type if the underlying type is a model, undefined otherwise
796
+ */
797
+ export function getTypeModel(program, type, structuralPropertiesOnly = false) {
798
+ // Use getActualType to handle cases where the type is a union type or an array type
799
+ const actualType = getActualType(program, type, structuralPropertiesOnly);
800
+ // if the actual type is not a Model type, return undefined
801
+ if ((actualType === null || actualType === void 0 ? void 0 : actualType.kind) !== "Model") {
802
+ return undefined;
803
+ }
804
+ return actualType;
805
+ }
806
+ function getActualType(program, type, structuralPropertiesOnly = false) {
807
+ var _a;
808
+ if (type.kind === "Union") {
809
+ const nonNullTypes = extractTypesFromUnion(type).filter(t => !isNullType(t));
810
+ if (!nonNullTypes.length) {
811
+ return undefined;
812
+ }
813
+ type = nonNullTypes[0];
814
+ }
815
+ if (type.kind === "Model" && isArrayModelType(program, type)) {
816
+ // Skip array-typed properties when looking for structural properties
817
+ if (structuralPropertiesOnly) {
818
+ return undefined;
819
+ }
820
+ type = (_a = type.indexer) === null || _a === void 0 ? void 0 : _a.value;
821
+ }
822
+ return type;
823
+ }
824
+ /**
825
+ *
826
+ * @param model Handles case where model is wrapped in an EntityRef template
827
+ * @returns
828
+ */
829
+ function getModelFromTemplateMapper(program, model) {
830
+ var _a;
831
+ const templateArguments = (_a = model.templateMapper) === null || _a === void 0 ? void 0 : _a.args;
832
+ if (templateArguments && templateArguments.length > 0) {
833
+ return getTypeModel(program, templateArguments[0]);
834
+ }
835
+ return getTypeModel(program, model);
836
+ }
837
+ function removeTrailingRef(path) {
838
+ if (path.endsWith("/$ref")) {
839
+ return path.slice(0, -5);
840
+ }
841
+ return path;
842
+ }
843
+ /**
844
+ * This function removes the composable function pattern from the path
845
+ * accessReviews/{reviewId}/instances/{instanceId}/decisions/filterByCurrentUser(string) -> accessReviews/{reviewId}/instances/{instanceId}/decisions
846
+ * @param path
847
+ * @returns
848
+ */
849
+ const removeComposableFunctionPattern = (path) => {
850
+ const pattern = /\/[^/]+\(.*?\)(?=\/|$)/g;
851
+ if (pattern.test(path)) {
852
+ return path.replace(pattern, '');
853
+ }
854
+ return path;
855
+ };
856
+ export function cleanGraphRoutePath(path) {
857
+ path = removeRoutePathParams(path);
858
+ path = removeTrailingRef(path);
859
+ path = removeComposableFunctionPattern(path);
860
+ return path;
861
+ }
862
+ export function buildPathTree(program) {
863
+ const tree = new PathTree();
864
+ for (const namespace of GetDeclaredNamespaces(program)) {
865
+ navigateTypesInNamespace(namespace, {
866
+ interface: ($interface) => {
867
+ if (!hasGraphRoute(program, $interface)) {
868
+ return;
869
+ }
870
+ const entityType = getInterfaceNavigationSourceType(program, $interface);
871
+ getGraphRoutePaths(program, $interface).forEach(graphRoutePath => {
872
+ const path = removeRoutePathParams(graphRoutePath);
873
+ tree.addNode(path, entityType);
874
+ });
875
+ }
876
+ });
877
+ }
878
+ return tree;
879
+ }
880
+ export function getParentModelForPropertyFromGraphRoute(pathTree, graphRoutePath) {
881
+ var _a;
882
+ const path = cleanGraphRoutePath(graphRoutePath);
883
+ const pathSegments = path.split("/");
884
+ if (pathSegments.length < 2) {
885
+ return;
886
+ }
887
+ const entityType = (_a = pathTree.getNodeByPath(pathSegments[pathSegments.length - 2])) === null || _a === void 0 ? void 0 : _a.entityType;
888
+ return entityType;
889
+ }
890
+ export function isParentSharedEntity(program, model) {
891
+ var _a;
892
+ if (!isSharedEntity(program, model)) {
893
+ return false;
894
+ }
895
+ return ((_a = model.namespace) === null || _a === void 0 ? void 0 : _a.name) === DEFAULT_MSGRAPH_NAMESPACE;
185
896
  }
186
897
  //# sourceMappingURL=utils.js.map