@microsoft/typespec-msgraph 0.0.1-Preview.2 → 0.0.1-Preview.21

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