@azure/provisioning-core 1.0.0-beta.1

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 (440) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +21 -0
  3. package/README.md +40 -0
  4. package/dist/browser/constructs/built-in-resources/resource-group.d.ts +50 -0
  5. package/dist/browser/constructs/built-in-resources/resource-group.d.ts.map +1 -0
  6. package/dist/browser/constructs/built-in-resources/resource-group.js +100 -0
  7. package/dist/browser/constructs/built-in-resources/resource-group.js.map +1 -0
  8. package/dist/browser/constructs/output.d.ts +80 -0
  9. package/dist/browser/constructs/output.d.ts.map +1 -0
  10. package/dist/browser/constructs/output.js +75 -0
  11. package/dist/browser/constructs/output.js.map +1 -0
  12. package/dist/browser/constructs/parameter.d.ts +77 -0
  13. package/dist/browser/constructs/parameter.d.ts.map +1 -0
  14. package/dist/browser/constructs/parameter.js +93 -0
  15. package/dist/browser/constructs/parameter.js.map +1 -0
  16. package/dist/browser/constructs/provisioning-component.d.ts +91 -0
  17. package/dist/browser/constructs/provisioning-component.d.ts.map +1 -0
  18. package/dist/browser/constructs/provisioning-component.js +150 -0
  19. package/dist/browser/constructs/provisioning-component.js.map +1 -0
  20. package/dist/browser/constructs/resource/resource-proxy.d.ts +134 -0
  21. package/dist/browser/constructs/resource/resource-proxy.d.ts.map +1 -0
  22. package/dist/browser/constructs/resource/resource-proxy.js +517 -0
  23. package/dist/browser/constructs/resource/resource-proxy.js.map +1 -0
  24. package/dist/browser/constructs/resource/resource-query.d.ts +23 -0
  25. package/dist/browser/constructs/resource/resource-query.d.ts.map +1 -0
  26. package/dist/browser/constructs/resource/resource-query.js +69 -0
  27. package/dist/browser/constructs/resource/resource-query.js.map +1 -0
  28. package/dist/browser/constructs/resource/resource-registry.d.ts +99 -0
  29. package/dist/browser/constructs/resource/resource-registry.d.ts.map +1 -0
  30. package/dist/browser/constructs/resource/resource-registry.js +51 -0
  31. package/dist/browser/constructs/resource/resource-registry.js.map +1 -0
  32. package/dist/browser/constructs/resource/resource-type-registry.d.ts +46 -0
  33. package/dist/browser/constructs/resource/resource-type-registry.d.ts.map +1 -0
  34. package/dist/browser/constructs/resource/resource-type-registry.js +156 -0
  35. package/dist/browser/constructs/resource/resource-type-registry.js.map +1 -0
  36. package/dist/browser/constructs/resource/resource-utils.d.ts +60 -0
  37. package/dist/browser/constructs/resource/resource-utils.d.ts.map +1 -0
  38. package/dist/browser/constructs/resource/resource-utils.js +75 -0
  39. package/dist/browser/constructs/resource/resource-utils.js.map +1 -0
  40. package/dist/browser/constructs/resource/resource.d.ts +460 -0
  41. package/dist/browser/constructs/resource/resource.d.ts.map +1 -0
  42. package/dist/browser/constructs/resource/resource.js +582 -0
  43. package/dist/browser/constructs/resource/resource.js.map +1 -0
  44. package/dist/browser/constructs/stack.d.ts +110 -0
  45. package/dist/browser/constructs/stack.d.ts.map +1 -0
  46. package/dist/browser/constructs/stack.js +110 -0
  47. package/dist/browser/constructs/stack.js.map +1 -0
  48. package/dist/browser/constructs/variable.d.ts +63 -0
  49. package/dist/browser/constructs/variable.d.ts.map +1 -0
  50. package/dist/browser/constructs/variable.js +74 -0
  51. package/dist/browser/constructs/variable.js.map +1 -0
  52. package/dist/browser/deployment-context/deployment-context.d.ts +27 -0
  53. package/dist/browser/deployment-context/deployment-context.d.ts.map +1 -0
  54. package/dist/browser/deployment-context/deployment-context.js +4 -0
  55. package/dist/browser/deployment-context/deployment-context.js.map +1 -0
  56. package/dist/browser/expression/ast-nodes.d.ts +100 -0
  57. package/dist/browser/expression/ast-nodes.d.ts.map +1 -0
  58. package/dist/browser/expression/ast-nodes.js +125 -0
  59. package/dist/browser/expression/ast-nodes.js.map +1 -0
  60. package/dist/browser/expression/expressions.d.ts +164 -0
  61. package/dist/browser/expression/expressions.d.ts.map +1 -0
  62. package/dist/browser/expression/expressions.js +211 -0
  63. package/dist/browser/expression/expressions.js.map +1 -0
  64. package/dist/browser/fn.d.ts +194 -0
  65. package/dist/browser/fn.d.ts.map +1 -0
  66. package/dist/browser/fn.js +334 -0
  67. package/dist/browser/fn.js.map +1 -0
  68. package/dist/browser/index.d.ts +25 -0
  69. package/dist/browser/index.d.ts.map +1 -0
  70. package/dist/browser/index.js +17 -0
  71. package/dist/browser/index.js.map +1 -0
  72. package/dist/browser/internal.d.ts +13 -0
  73. package/dist/browser/internal.d.ts.map +1 -0
  74. package/dist/browser/internal.js +10 -0
  75. package/dist/browser/internal.js.map +1 -0
  76. package/dist/browser/naming/naming-policy.d.ts +56 -0
  77. package/dist/browser/naming/naming-policy.d.ts.map +1 -0
  78. package/dist/browser/naming/naming-policy.js +97 -0
  79. package/dist/browser/naming/naming-policy.js.map +1 -0
  80. package/dist/browser/naming/naming-rules.d.ts +15 -0
  81. package/dist/browser/naming/naming-rules.d.ts.map +1 -0
  82. package/dist/browser/naming/naming-rules.js +15 -0
  83. package/dist/browser/naming/naming-rules.js.map +1 -0
  84. package/dist/browser/package.json +8 -0
  85. package/dist/browser/serialization/contract/generated/ast.d.ts +508 -0
  86. package/dist/browser/serialization/contract/generated/ast.d.ts.map +1 -0
  87. package/dist/browser/serialization/contract/generated/ast.js +23 -0
  88. package/dist/browser/serialization/contract/generated/ast.js.map +1 -0
  89. package/dist/browser/serialization/contract/index.d.ts +2 -0
  90. package/dist/browser/serialization/contract/index.d.ts.map +1 -0
  91. package/dist/browser/serialization/contract/index.js +4 -0
  92. package/dist/browser/serialization/contract/index.js.map +1 -0
  93. package/dist/browser/serialization/index.d.ts +4 -0
  94. package/dist/browser/serialization/index.d.ts.map +1 -0
  95. package/dist/browser/serialization/index.js +5 -0
  96. package/dist/browser/serialization/index.js.map +1 -0
  97. package/dist/browser/serialization/json/deserialize.d.ts +24 -0
  98. package/dist/browser/serialization/json/deserialize.d.ts.map +1 -0
  99. package/dist/browser/serialization/json/deserialize.js +437 -0
  100. package/dist/browser/serialization/json/deserialize.js.map +1 -0
  101. package/dist/browser/serialization/json/encoding.d.ts +4 -0
  102. package/dist/browser/serialization/json/encoding.d.ts.map +1 -0
  103. package/dist/browser/serialization/json/encoding.js +319 -0
  104. package/dist/browser/serialization/json/encoding.js.map +1 -0
  105. package/dist/browser/serialization/json/expression.d.ts +32 -0
  106. package/dist/browser/serialization/json/expression.d.ts.map +1 -0
  107. package/dist/browser/serialization/json/expression.js +494 -0
  108. package/dist/browser/serialization/json/expression.js.map +1 -0
  109. package/dist/browser/serialization/json/lower.d.ts +41 -0
  110. package/dist/browser/serialization/json/lower.d.ts.map +1 -0
  111. package/dist/browser/serialization/json/lower.js +334 -0
  112. package/dist/browser/serialization/json/lower.js.map +1 -0
  113. package/dist/browser/serialization/json/pluralize-config.d.ts +3 -0
  114. package/dist/browser/serialization/json/pluralize-config.d.ts.map +1 -0
  115. package/dist/browser/serialization/json/pluralize-config.js +7 -0
  116. package/dist/browser/serialization/json/pluralize-config.js.map +1 -0
  117. package/dist/browser/serialization/json/serialize.d.ts +12 -0
  118. package/dist/browser/serialization/json/serialize.d.ts.map +1 -0
  119. package/dist/browser/serialization/json/serialize.js +389 -0
  120. package/dist/browser/serialization/json/serialize.js.map +1 -0
  121. package/dist/browser/serialization/json/util.d.ts +2 -0
  122. package/dist/browser/serialization/json/util.d.ts.map +1 -0
  123. package/dist/browser/serialization/json/util.js +19 -0
  124. package/dist/browser/serialization/json/util.js.map +1 -0
  125. package/dist/browser/serialization/utils.d.ts +3 -0
  126. package/dist/browser/serialization/utils.d.ts.map +1 -0
  127. package/dist/browser/serialization/utils.js +146 -0
  128. package/dist/browser/serialization/utils.js.map +1 -0
  129. package/dist/browser/shape/shape-registry.d.ts +51 -0
  130. package/dist/browser/shape/shape-registry.d.ts.map +1 -0
  131. package/dist/browser/shape/shape-registry.js +41 -0
  132. package/dist/browser/shape/shape-registry.js.map +1 -0
  133. package/dist/browser/shape/shape.d.ts +407 -0
  134. package/dist/browser/shape/shape.d.ts.map +1 -0
  135. package/dist/browser/shape/shape.js +424 -0
  136. package/dist/browser/shape/shape.js.map +1 -0
  137. package/dist/browser/shape/value-encoding.d.ts +121 -0
  138. package/dist/browser/shape/value-encoding.d.ts.map +1 -0
  139. package/dist/browser/shape/value-encoding.js +32 -0
  140. package/dist/browser/shape/value-encoding.js.map +1 -0
  141. package/dist/browser/types.d.ts +9 -0
  142. package/dist/browser/types.d.ts.map +1 -0
  143. package/dist/browser/types.js +4 -0
  144. package/dist/browser/types.js.map +1 -0
  145. package/dist/browser/util.d.ts +33 -0
  146. package/dist/browser/util.d.ts.map +1 -0
  147. package/dist/browser/util.js +74 -0
  148. package/dist/browser/util.js.map +1 -0
  149. package/dist/commonjs/constructs/built-in-resources/resource-group.d.ts +50 -0
  150. package/dist/commonjs/constructs/built-in-resources/resource-group.d.ts.map +1 -0
  151. package/dist/commonjs/constructs/built-in-resources/resource-group.js +114 -0
  152. package/dist/commonjs/constructs/built-in-resources/resource-group.js.map +7 -0
  153. package/dist/commonjs/constructs/output.d.ts +80 -0
  154. package/dist/commonjs/constructs/output.d.ts.map +1 -0
  155. package/dist/commonjs/constructs/output.js +75 -0
  156. package/dist/commonjs/constructs/output.js.map +7 -0
  157. package/dist/commonjs/constructs/parameter.d.ts +77 -0
  158. package/dist/commonjs/constructs/parameter.d.ts.map +1 -0
  159. package/dist/commonjs/constructs/parameter.js +95 -0
  160. package/dist/commonjs/constructs/parameter.js.map +7 -0
  161. package/dist/commonjs/constructs/provisioning-component.d.ts +91 -0
  162. package/dist/commonjs/constructs/provisioning-component.d.ts.map +1 -0
  163. package/dist/commonjs/constructs/provisioning-component.js +130 -0
  164. package/dist/commonjs/constructs/provisioning-component.js.map +7 -0
  165. package/dist/commonjs/constructs/resource/resource-proxy.d.ts +134 -0
  166. package/dist/commonjs/constructs/resource/resource-proxy.d.ts.map +1 -0
  167. package/dist/commonjs/constructs/resource/resource-proxy.js +456 -0
  168. package/dist/commonjs/constructs/resource/resource-proxy.js.map +7 -0
  169. package/dist/commonjs/constructs/resource/resource-query.d.ts +23 -0
  170. package/dist/commonjs/constructs/resource/resource-query.d.ts.map +1 -0
  171. package/dist/commonjs/constructs/resource/resource-query.js +68 -0
  172. package/dist/commonjs/constructs/resource/resource-query.js.map +7 -0
  173. package/dist/commonjs/constructs/resource/resource-registry.d.ts +99 -0
  174. package/dist/commonjs/constructs/resource/resource-registry.d.ts.map +1 -0
  175. package/dist/commonjs/constructs/resource/resource-registry.js +49 -0
  176. package/dist/commonjs/constructs/resource/resource-registry.js.map +7 -0
  177. package/dist/commonjs/constructs/resource/resource-type-registry.d.ts +46 -0
  178. package/dist/commonjs/constructs/resource/resource-type-registry.d.ts.map +1 -0
  179. package/dist/commonjs/constructs/resource/resource-type-registry.js +178 -0
  180. package/dist/commonjs/constructs/resource/resource-type-registry.js.map +7 -0
  181. package/dist/commonjs/constructs/resource/resource-utils.d.ts +60 -0
  182. package/dist/commonjs/constructs/resource/resource-utils.d.ts.map +1 -0
  183. package/dist/commonjs/constructs/resource/resource-utils.js +51 -0
  184. package/dist/commonjs/constructs/resource/resource-utils.js.map +7 -0
  185. package/dist/commonjs/constructs/resource/resource.d.ts +460 -0
  186. package/dist/commonjs/constructs/resource/resource.d.ts.map +1 -0
  187. package/dist/commonjs/constructs/resource/resource.js +455 -0
  188. package/dist/commonjs/constructs/resource/resource.js.map +7 -0
  189. package/dist/commonjs/constructs/stack.d.ts +110 -0
  190. package/dist/commonjs/constructs/stack.d.ts.map +1 -0
  191. package/dist/commonjs/constructs/stack.js +101 -0
  192. package/dist/commonjs/constructs/stack.js.map +7 -0
  193. package/dist/commonjs/constructs/variable.d.ts +63 -0
  194. package/dist/commonjs/constructs/variable.d.ts.map +1 -0
  195. package/dist/commonjs/constructs/variable.js +85 -0
  196. package/dist/commonjs/constructs/variable.js.map +7 -0
  197. package/dist/commonjs/deployment-context/deployment-context.d.ts +27 -0
  198. package/dist/commonjs/deployment-context/deployment-context.d.ts.map +1 -0
  199. package/dist/commonjs/deployment-context/deployment-context.js +16 -0
  200. package/dist/commonjs/deployment-context/deployment-context.js.map +7 -0
  201. package/dist/commonjs/expression/ast-nodes.d.ts +100 -0
  202. package/dist/commonjs/expression/ast-nodes.d.ts.map +1 -0
  203. package/dist/commonjs/expression/ast-nodes.js +152 -0
  204. package/dist/commonjs/expression/ast-nodes.js.map +7 -0
  205. package/dist/commonjs/expression/expressions.d.ts +164 -0
  206. package/dist/commonjs/expression/expressions.d.ts.map +1 -0
  207. package/dist/commonjs/expression/expressions.js +171 -0
  208. package/dist/commonjs/expression/expressions.js.map +7 -0
  209. package/dist/commonjs/fn.d.ts +194 -0
  210. package/dist/commonjs/fn.d.ts.map +1 -0
  211. package/dist/commonjs/fn.js +382 -0
  212. package/dist/commonjs/fn.js.map +7 -0
  213. package/dist/commonjs/index.d.ts +25 -0
  214. package/dist/commonjs/index.d.ts.map +1 -0
  215. package/dist/commonjs/index.js +93 -0
  216. package/dist/commonjs/index.js.map +7 -0
  217. package/dist/commonjs/internal.d.ts +13 -0
  218. package/dist/commonjs/internal.d.ts.map +1 -0
  219. package/dist/commonjs/internal.js +88 -0
  220. package/dist/commonjs/internal.js.map +7 -0
  221. package/dist/commonjs/naming/naming-policy.d.ts +56 -0
  222. package/dist/commonjs/naming/naming-policy.d.ts.map +1 -0
  223. package/dist/commonjs/naming/naming-policy.js +99 -0
  224. package/dist/commonjs/naming/naming-policy.js.map +7 -0
  225. package/dist/commonjs/naming/naming-rules.d.ts +15 -0
  226. package/dist/commonjs/naming/naming-rules.d.ts.map +1 -0
  227. package/dist/commonjs/naming/naming-rules.js +39 -0
  228. package/dist/commonjs/naming/naming-rules.js.map +7 -0
  229. package/dist/commonjs/package.json +8 -0
  230. package/dist/commonjs/serialization/contract/generated/ast.d.ts +508 -0
  231. package/dist/commonjs/serialization/contract/generated/ast.d.ts.map +1 -0
  232. package/dist/commonjs/serialization/contract/generated/ast.js +40 -0
  233. package/dist/commonjs/serialization/contract/generated/ast.js.map +7 -0
  234. package/dist/commonjs/serialization/contract/index.d.ts +2 -0
  235. package/dist/commonjs/serialization/contract/index.d.ts.map +1 -0
  236. package/dist/commonjs/serialization/contract/index.js +22 -0
  237. package/dist/commonjs/serialization/contract/index.js.map +7 -0
  238. package/dist/commonjs/serialization/index.d.ts +4 -0
  239. package/dist/commonjs/serialization/index.d.ts.map +1 -0
  240. package/dist/commonjs/serialization/index.js +31 -0
  241. package/dist/commonjs/serialization/index.js.map +7 -0
  242. package/dist/commonjs/serialization/json/deserialize.d.ts +24 -0
  243. package/dist/commonjs/serialization/json/deserialize.d.ts.map +1 -0
  244. package/dist/commonjs/serialization/json/deserialize.js +385 -0
  245. package/dist/commonjs/serialization/json/deserialize.js.map +7 -0
  246. package/dist/commonjs/serialization/json/encoding.d.ts +4 -0
  247. package/dist/commonjs/serialization/json/encoding.d.ts.map +1 -0
  248. package/dist/commonjs/serialization/json/encoding.js +306 -0
  249. package/dist/commonjs/serialization/json/encoding.js.map +7 -0
  250. package/dist/commonjs/serialization/json/expression.d.ts +32 -0
  251. package/dist/commonjs/serialization/json/expression.d.ts.map +1 -0
  252. package/dist/commonjs/serialization/json/expression.js +509 -0
  253. package/dist/commonjs/serialization/json/expression.js.map +7 -0
  254. package/dist/commonjs/serialization/json/lower.d.ts +41 -0
  255. package/dist/commonjs/serialization/json/lower.d.ts.map +1 -0
  256. package/dist/commonjs/serialization/json/lower.js +272 -0
  257. package/dist/commonjs/serialization/json/lower.js.map +7 -0
  258. package/dist/commonjs/serialization/json/pluralize-config.d.ts +3 -0
  259. package/dist/commonjs/serialization/json/pluralize-config.d.ts.map +1 -0
  260. package/dist/commonjs/serialization/json/pluralize-config.js +37 -0
  261. package/dist/commonjs/serialization/json/pluralize-config.js.map +7 -0
  262. package/dist/commonjs/serialization/json/serialize.d.ts +12 -0
  263. package/dist/commonjs/serialization/json/serialize.d.ts.map +1 -0
  264. package/dist/commonjs/serialization/json/serialize.js +352 -0
  265. package/dist/commonjs/serialization/json/serialize.js.map +7 -0
  266. package/dist/commonjs/serialization/json/util.d.ts +2 -0
  267. package/dist/commonjs/serialization/json/util.d.ts.map +1 -0
  268. package/dist/commonjs/serialization/json/util.js +37 -0
  269. package/dist/commonjs/serialization/json/util.js.map +7 -0
  270. package/dist/commonjs/serialization/utils.d.ts +3 -0
  271. package/dist/commonjs/serialization/utils.d.ts.map +1 -0
  272. package/dist/commonjs/serialization/utils.js +169 -0
  273. package/dist/commonjs/serialization/utils.js.map +7 -0
  274. package/dist/commonjs/shape/shape-registry.d.ts +51 -0
  275. package/dist/commonjs/shape/shape-registry.d.ts.map +1 -0
  276. package/dist/commonjs/shape/shape-registry.js +40 -0
  277. package/dist/commonjs/shape/shape-registry.js.map +7 -0
  278. package/dist/commonjs/shape/shape.d.ts +407 -0
  279. package/dist/commonjs/shape/shape.d.ts.map +1 -0
  280. package/dist/commonjs/shape/shape.js +290 -0
  281. package/dist/commonjs/shape/shape.js.map +7 -0
  282. package/dist/commonjs/shape/value-encoding.d.ts +121 -0
  283. package/dist/commonjs/shape/value-encoding.d.ts.map +1 -0
  284. package/dist/commonjs/shape/value-encoding.js +62 -0
  285. package/dist/commonjs/shape/value-encoding.js.map +7 -0
  286. package/dist/commonjs/tsdoc-metadata.json +11 -0
  287. package/dist/commonjs/types.d.ts +9 -0
  288. package/dist/commonjs/types.d.ts.map +1 -0
  289. package/dist/commonjs/types.js +16 -0
  290. package/dist/commonjs/types.js.map +7 -0
  291. package/dist/commonjs/util.d.ts +33 -0
  292. package/dist/commonjs/util.d.ts.map +1 -0
  293. package/dist/commonjs/util.js +73 -0
  294. package/dist/commonjs/util.js.map +7 -0
  295. package/dist/esm/constructs/built-in-resources/resource-group.d.ts +50 -0
  296. package/dist/esm/constructs/built-in-resources/resource-group.d.ts.map +1 -0
  297. package/dist/esm/constructs/built-in-resources/resource-group.js +100 -0
  298. package/dist/esm/constructs/built-in-resources/resource-group.js.map +1 -0
  299. package/dist/esm/constructs/output.d.ts +80 -0
  300. package/dist/esm/constructs/output.d.ts.map +1 -0
  301. package/dist/esm/constructs/output.js +75 -0
  302. package/dist/esm/constructs/output.js.map +1 -0
  303. package/dist/esm/constructs/parameter.d.ts +77 -0
  304. package/dist/esm/constructs/parameter.d.ts.map +1 -0
  305. package/dist/esm/constructs/parameter.js +93 -0
  306. package/dist/esm/constructs/parameter.js.map +1 -0
  307. package/dist/esm/constructs/provisioning-component.d.ts +91 -0
  308. package/dist/esm/constructs/provisioning-component.d.ts.map +1 -0
  309. package/dist/esm/constructs/provisioning-component.js +150 -0
  310. package/dist/esm/constructs/provisioning-component.js.map +1 -0
  311. package/dist/esm/constructs/resource/resource-proxy.d.ts +134 -0
  312. package/dist/esm/constructs/resource/resource-proxy.d.ts.map +1 -0
  313. package/dist/esm/constructs/resource/resource-proxy.js +517 -0
  314. package/dist/esm/constructs/resource/resource-proxy.js.map +1 -0
  315. package/dist/esm/constructs/resource/resource-query.d.ts +23 -0
  316. package/dist/esm/constructs/resource/resource-query.d.ts.map +1 -0
  317. package/dist/esm/constructs/resource/resource-query.js +69 -0
  318. package/dist/esm/constructs/resource/resource-query.js.map +1 -0
  319. package/dist/esm/constructs/resource/resource-registry.d.ts +99 -0
  320. package/dist/esm/constructs/resource/resource-registry.d.ts.map +1 -0
  321. package/dist/esm/constructs/resource/resource-registry.js +51 -0
  322. package/dist/esm/constructs/resource/resource-registry.js.map +1 -0
  323. package/dist/esm/constructs/resource/resource-type-registry.d.ts +46 -0
  324. package/dist/esm/constructs/resource/resource-type-registry.d.ts.map +1 -0
  325. package/dist/esm/constructs/resource/resource-type-registry.js +156 -0
  326. package/dist/esm/constructs/resource/resource-type-registry.js.map +1 -0
  327. package/dist/esm/constructs/resource/resource-utils.d.ts +60 -0
  328. package/dist/esm/constructs/resource/resource-utils.d.ts.map +1 -0
  329. package/dist/esm/constructs/resource/resource-utils.js +75 -0
  330. package/dist/esm/constructs/resource/resource-utils.js.map +1 -0
  331. package/dist/esm/constructs/resource/resource.d.ts +460 -0
  332. package/dist/esm/constructs/resource/resource.d.ts.map +1 -0
  333. package/dist/esm/constructs/resource/resource.js +582 -0
  334. package/dist/esm/constructs/resource/resource.js.map +1 -0
  335. package/dist/esm/constructs/stack.d.ts +110 -0
  336. package/dist/esm/constructs/stack.d.ts.map +1 -0
  337. package/dist/esm/constructs/stack.js +110 -0
  338. package/dist/esm/constructs/stack.js.map +1 -0
  339. package/dist/esm/constructs/variable.d.ts +63 -0
  340. package/dist/esm/constructs/variable.d.ts.map +1 -0
  341. package/dist/esm/constructs/variable.js +74 -0
  342. package/dist/esm/constructs/variable.js.map +1 -0
  343. package/dist/esm/deployment-context/deployment-context.d.ts +27 -0
  344. package/dist/esm/deployment-context/deployment-context.d.ts.map +1 -0
  345. package/dist/esm/deployment-context/deployment-context.js +4 -0
  346. package/dist/esm/deployment-context/deployment-context.js.map +1 -0
  347. package/dist/esm/expression/ast-nodes.d.ts +100 -0
  348. package/dist/esm/expression/ast-nodes.d.ts.map +1 -0
  349. package/dist/esm/expression/ast-nodes.js +125 -0
  350. package/dist/esm/expression/ast-nodes.js.map +1 -0
  351. package/dist/esm/expression/expressions.d.ts +164 -0
  352. package/dist/esm/expression/expressions.d.ts.map +1 -0
  353. package/dist/esm/expression/expressions.js +211 -0
  354. package/dist/esm/expression/expressions.js.map +1 -0
  355. package/dist/esm/fn.d.ts +194 -0
  356. package/dist/esm/fn.d.ts.map +1 -0
  357. package/dist/esm/fn.js +334 -0
  358. package/dist/esm/fn.js.map +1 -0
  359. package/dist/esm/index.d.ts +25 -0
  360. package/dist/esm/index.d.ts.map +1 -0
  361. package/dist/esm/index.js +17 -0
  362. package/dist/esm/index.js.map +1 -0
  363. package/dist/esm/internal.d.ts +13 -0
  364. package/dist/esm/internal.d.ts.map +1 -0
  365. package/dist/esm/internal.js +10 -0
  366. package/dist/esm/internal.js.map +1 -0
  367. package/dist/esm/naming/naming-policy.d.ts +56 -0
  368. package/dist/esm/naming/naming-policy.d.ts.map +1 -0
  369. package/dist/esm/naming/naming-policy.js +97 -0
  370. package/dist/esm/naming/naming-policy.js.map +1 -0
  371. package/dist/esm/naming/naming-rules.d.ts +15 -0
  372. package/dist/esm/naming/naming-rules.d.ts.map +1 -0
  373. package/dist/esm/naming/naming-rules.js +15 -0
  374. package/dist/esm/naming/naming-rules.js.map +1 -0
  375. package/dist/esm/package.json +8 -0
  376. package/dist/esm/serialization/contract/generated/ast.d.ts +508 -0
  377. package/dist/esm/serialization/contract/generated/ast.d.ts.map +1 -0
  378. package/dist/esm/serialization/contract/generated/ast.js +23 -0
  379. package/dist/esm/serialization/contract/generated/ast.js.map +1 -0
  380. package/dist/esm/serialization/contract/index.d.ts +2 -0
  381. package/dist/esm/serialization/contract/index.d.ts.map +1 -0
  382. package/dist/esm/serialization/contract/index.js +4 -0
  383. package/dist/esm/serialization/contract/index.js.map +1 -0
  384. package/dist/esm/serialization/index.d.ts +4 -0
  385. package/dist/esm/serialization/index.d.ts.map +1 -0
  386. package/dist/esm/serialization/index.js +5 -0
  387. package/dist/esm/serialization/index.js.map +1 -0
  388. package/dist/esm/serialization/json/deserialize.d.ts +24 -0
  389. package/dist/esm/serialization/json/deserialize.d.ts.map +1 -0
  390. package/dist/esm/serialization/json/deserialize.js +437 -0
  391. package/dist/esm/serialization/json/deserialize.js.map +1 -0
  392. package/dist/esm/serialization/json/encoding.d.ts +4 -0
  393. package/dist/esm/serialization/json/encoding.d.ts.map +1 -0
  394. package/dist/esm/serialization/json/encoding.js +319 -0
  395. package/dist/esm/serialization/json/encoding.js.map +1 -0
  396. package/dist/esm/serialization/json/expression.d.ts +32 -0
  397. package/dist/esm/serialization/json/expression.d.ts.map +1 -0
  398. package/dist/esm/serialization/json/expression.js +494 -0
  399. package/dist/esm/serialization/json/expression.js.map +1 -0
  400. package/dist/esm/serialization/json/lower.d.ts +41 -0
  401. package/dist/esm/serialization/json/lower.d.ts.map +1 -0
  402. package/dist/esm/serialization/json/lower.js +334 -0
  403. package/dist/esm/serialization/json/lower.js.map +1 -0
  404. package/dist/esm/serialization/json/pluralize-config.d.ts +3 -0
  405. package/dist/esm/serialization/json/pluralize-config.d.ts.map +1 -0
  406. package/dist/esm/serialization/json/pluralize-config.js +7 -0
  407. package/dist/esm/serialization/json/pluralize-config.js.map +1 -0
  408. package/dist/esm/serialization/json/serialize.d.ts +12 -0
  409. package/dist/esm/serialization/json/serialize.d.ts.map +1 -0
  410. package/dist/esm/serialization/json/serialize.js +389 -0
  411. package/dist/esm/serialization/json/serialize.js.map +1 -0
  412. package/dist/esm/serialization/json/util.d.ts +2 -0
  413. package/dist/esm/serialization/json/util.d.ts.map +1 -0
  414. package/dist/esm/serialization/json/util.js +19 -0
  415. package/dist/esm/serialization/json/util.js.map +1 -0
  416. package/dist/esm/serialization/utils.d.ts +3 -0
  417. package/dist/esm/serialization/utils.d.ts.map +1 -0
  418. package/dist/esm/serialization/utils.js +146 -0
  419. package/dist/esm/serialization/utils.js.map +1 -0
  420. package/dist/esm/shape/shape-registry.d.ts +51 -0
  421. package/dist/esm/shape/shape-registry.d.ts.map +1 -0
  422. package/dist/esm/shape/shape-registry.js +41 -0
  423. package/dist/esm/shape/shape-registry.js.map +1 -0
  424. package/dist/esm/shape/shape.d.ts +407 -0
  425. package/dist/esm/shape/shape.d.ts.map +1 -0
  426. package/dist/esm/shape/shape.js +424 -0
  427. package/dist/esm/shape/shape.js.map +1 -0
  428. package/dist/esm/shape/value-encoding.d.ts +121 -0
  429. package/dist/esm/shape/value-encoding.d.ts.map +1 -0
  430. package/dist/esm/shape/value-encoding.js +32 -0
  431. package/dist/esm/shape/value-encoding.js.map +1 -0
  432. package/dist/esm/types.d.ts +9 -0
  433. package/dist/esm/types.d.ts.map +1 -0
  434. package/dist/esm/types.js +4 -0
  435. package/dist/esm/types.js.map +1 -0
  436. package/dist/esm/util.d.ts +33 -0
  437. package/dist/esm/util.d.ts.map +1 -0
  438. package/dist/esm/util.js +74 -0
  439. package/dist/esm/util.js.map +1 -0
  440. package/package.json +117 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/constructs/resource/resource-query.ts"],
4
+ "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { isResourceDeclaration, isLoopedResource, isLoopedResourceOf } from \"./resource-utils.js\";\nimport { deref } from \"./resource-proxy.js\";\nimport type { ProvisioningComponent } from \"../provisioning-component.js\";\nimport type { LoopedResource, Resource } from \"./resource.js\";\nimport type { ResourceCtor } from \"./resource-registry.js\";\n\n// ---------------------------------------------------------------------------\n// Query result types\n// ---------------------------------------------------------------------------\n\n/** Options accepted by the `Stack` resource queries. */\nexport interface QueryOptions {\n /**\n * Whether to walk the stack's entire subtree (default `true`) or only its\n * **direct children** (`false`).\n */\n readonly recursive?: boolean;\n}\n\n// ---------------------------------------------------------------------------\n// Query engine (module-private)\n// ---------------------------------------------------------------------------\n// Imports only brand guards (`resource-utils`) \u2014 which do not import\n// `ProvisioningComponent`/`Stack` at runtime \u2014 plus types (type-only), so there is no\n// import cycle.\n\n/**\n * Collect the resource declarations beneath `root` (the root itself is never\n * included). `recursive` descends the whole subtree via `visit`; otherwise\n * only `root`'s direct children are considered. `wantLooped` selects the\n * looped declarations (`Ctor.fromLoop(...)`) vs. the scalar ones.\n */\nfunction collectResourcesUnder(\n root: ProvisioningComponent,\n wantLooped: boolean,\n recursive: boolean,\n): (Resource | LoopedResource<Resource>)[] {\n const result: (Resource | LoopedResource<Resource>)[] = [];\n const consider = (node: ProvisioningComponent): void => {\n if (!isResourceDeclaration(node)) return;\n const r = node.self as Resource | LoopedResource<Resource>;\n if (isLoopedResource(r) === wantLooped) result.push(r);\n };\n for (const child of root.children) {\n if (recursive) child.visit(consider);\n else consider(child);\n }\n return result;\n}\n\n// ---------------------------------------------------------------------------\n// Engine entry points \u2014 thin, loosely-typed; `Stack` supplies the public\n// typed overloads and delegates here.\n// ---------------------------------------------------------------------------\n\n/** Scalar (un-looped) resource declarations. */\nexport function getResources(\n root: ProvisioningComponent,\n typeOrOptions?: ResourceCtor<Resource> | QueryOptions,\n maybeOptions?: QueryOptions,\n): Resource[] {\n const isCtor = typeof typeOrOptions === \"function\";\n const type = isCtor ? (typeOrOptions as ResourceCtor<Resource>) : undefined;\n const options = (isCtor ? maybeOptions : typeOrOptions) as QueryOptions | undefined;\n const recursive = options?.recursive ?? true;\n const found = collectResourcesUnder(root, false, recursive) as Resource[];\n return type === undefined ? found : found.filter((r) => r instanceof type);\n}\n\n/** Loop-expanded resource declarations (`Ctor.fromLoop(...)`). */\nexport function getLoopedResources(\n root: ProvisioningComponent,\n typeOrOptions?: ResourceCtor<Resource> | QueryOptions,\n maybeOptions?: QueryOptions,\n): LoopedResource<Resource>[] {\n const isCtor = typeof typeOrOptions === \"function\";\n const type = isCtor ? (typeOrOptions as ResourceCtor<Resource>) : undefined;\n const options = (isCtor ? maybeOptions : typeOrOptions) as QueryOptions | undefined;\n const recursive = options?.recursive ?? true;\n const found = collectResourcesUnder(root, true, recursive) as LoopedResource<Resource>[];\n return type === undefined ? found : found.filter((r) => isLoopedResourceOf(r, type));\n}\n\n/**\n * First scalar resource of `type` whose literal name equals `name`, or\n * `undefined`. `deref` resolves the name's expression proxy to its literal\n * (a `Resource`'s `name` is an `Expression`, so `r.name === name` is always\n * false without it).\n */\nexport function getResource<T extends Resource>(\n root: ProvisioningComponent,\n type: ResourceCtor<T>,\n name: string,\n options?: QueryOptions,\n): T | undefined {\n for (const r of getResources(root, type, options)) {\n if (deref((r as Resource).name) === name) return r as T;\n }\n return undefined;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,4BAA4E;AAC5E,4BAAsB;AA+BtB,SAAS,sBACP,MACA,YACA,WACyC;AACzC,QAAM,SAAkD,CAAC;AACzD,QAAM,WAAW,CAAC,SAAsC;AACtD,QAAI,KAAC,6CAAsB,IAAI,EAAG;AAClC,UAAM,IAAI,KAAK;AACf,YAAI,wCAAiB,CAAC,MAAM,WAAY,QAAO,KAAK,CAAC;AAAA,EACvD;AACA,aAAW,SAAS,KAAK,UAAU;AACjC,QAAI,UAAW,OAAM,MAAM,QAAQ;AAAA,QAC9B,UAAS,KAAK;AAAA,EACrB;AACA,SAAO;AACT;AAQO,SAAS,aACd,MACA,eACA,cACY;AACZ,QAAM,SAAS,OAAO,kBAAkB;AACxC,QAAM,OAAO,SAAU,gBAA2C;AAClE,QAAM,UAAW,SAAS,eAAe;AACzC,QAAM,YAAY,SAAS,aAAa;AACxC,QAAM,QAAQ,sBAAsB,MAAM,OAAO,SAAS;AAC1D,SAAO,SAAS,SAAY,QAAQ,MAAM,OAAO,CAAC,MAAM,aAAa,IAAI;AAC3E;AAGO,SAAS,mBACd,MACA,eACA,cAC4B;AAC5B,QAAM,SAAS,OAAO,kBAAkB;AACxC,QAAM,OAAO,SAAU,gBAA2C;AAClE,QAAM,UAAW,SAAS,eAAe;AACzC,QAAM,YAAY,SAAS,aAAa;AACxC,QAAM,QAAQ,sBAAsB,MAAM,MAAM,SAAS;AACzD,SAAO,SAAS,SAAY,QAAQ,MAAM,OAAO,CAAC,UAAM,0CAAmB,GAAG,IAAI,CAAC;AACrF;AAQO,SAAS,YACd,MACA,MACA,MACA,SACe;AACf,aAAW,KAAK,aAAa,MAAM,MAAM,OAAO,GAAG;AACjD,YAAI,6BAAO,EAAe,IAAI,MAAM,KAAM,QAAO;AAAA,EACnD;AACA,SAAO;AACT;",
6
+ "names": []
7
+ }
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Global registry mapping a resource class's registry key to its
3
+ * constructor.
4
+ *
5
+ * Populated at module load by each class's `static {}` initializer
6
+ * (via {@link Resource.register}). The deserializer reads this
7
+ * registry to construct the correct class instance — preserving
8
+ * identity, prototype methods, and constructor-initialized child
9
+ * collections — instead of materialising a base `Resource`.
10
+ *
11
+ * Each `type@apiVersion` entry is either one flat constructor or a flat list
12
+ * of concrete constructors paired with ordered variant selectors. A selector
13
+ * can contain singleton `name`, model discriminators such as `kind`, and
14
+ * nested discriminator segments.
15
+ *
16
+ * Resolution has two modes:
17
+ *
18
+ * - **Best-effort (default).** Exact `(type, apiVersion)` first, then
19
+ * falls back to the highest registered `apiVersion` for the same
20
+ * selector. Enables
21
+ * deserializing older JSON against a newer package version without
22
+ * losing typed handles.
23
+ * - **Strict** (opt-in via `{ strict: true }`). Exact match only;
24
+ * returns `undefined` for any apiVersion the package doesn't ship.
25
+ *
26
+ * The shared registry tracks the highest `apiVersion` per `(type, selector)`.
27
+ * Best-effort lookups consult it in O(1); no scanning is needed.
28
+ *
29
+ * Keyed on a process-global symbol so multiple copies of `@azure/provisioning-core`
30
+ * in the same realm share one registry, mirroring the cross-realm
31
+ * strategy used by {@link isResource}'s brand symbol.
32
+ */
33
+ import type { Resource } from "./resource.js";
34
+ import { type FlatVariantSelector } from "./resource-type-registry.js";
35
+ /**
36
+ * A `Resource` class that's eligible to live in the registry.
37
+ *
38
+ * - The construct signature uses `any` for both `context` and `props`
39
+ * because concrete classes narrow these (child resources require a
40
+ * specific parent class as context; each resource has its own `Props`
41
+ * shape). TypeScript's parameter contravariance would reject any
42
+ * concrete parameter types here. The deserializer is the sole caller
43
+ * of resolved constructors and forwards already-correct values it
44
+ * built from the wire document.
45
+ * - The two static fields `resourceType` and `apiVersion` form the
46
+ * registry key and are always present on emitter-generated classes
47
+ * (and on the hand-maintained `ResourceGroup`).
48
+ * - The generic `T` propagates the instance type — used by the query
49
+ * API (`stack.getResources(KeyVault)` → `KeyVault[]`) to narrow
50
+ * return types without needing a separate descriptor object.
51
+ */
52
+ export type ResourceCtor<T extends Resource = Resource> = {
53
+ new (context: any, props: any, options?: any): T;
54
+ readonly resourceType: string;
55
+ readonly apiVersion: string;
56
+ };
57
+ /**
58
+ * Options controlling how {@link resolveResource} handles
59
+ * apiVersion mismatches.
60
+ */
61
+ export interface ResolveOptions {
62
+ /**
63
+ * When `true`, only an exact `(resourceType, apiVersion)` match is
64
+ * returned; the best-effort fallback to the highest registered
65
+ * version for the type is skipped. Defaults to `false`.
66
+ */
67
+ readonly strict?: boolean;
68
+ }
69
+ /**
70
+ * Register `ctor` as the canonical class for its
71
+ * `(resourceType, apiVersion[, variantSelector])` key.
72
+ *
73
+ * Pass an ordered selector for variants; omit it for ordinary resources.
74
+ * Re-registering the same constructor for the
75
+ * same key is a silent no-op so module-graph re-entry (test
76
+ * harnesses, dual-format builds) is safe. Registering a *different*
77
+ * constructor for an existing key throws — that's a genuine conflict
78
+ * (e.g. two packages claiming the same ARM type).
79
+ *
80
+ * A `(resourceType, apiVersion)` pair is either entirely flat or entirely
81
+ * variant-based. Attempting to mix both modes throws,
82
+ * preserving the invariant the deserializer relies on.
83
+ */
84
+ export declare function registerResource(ctor: ResourceCtor, variantSelector?: FlatVariantSelector): void;
85
+ /**
86
+ * Resolve the registered class for a wire resource.
87
+ *
88
+ * Default is best-effort:
89
+ * 1. Try the exact `(type, apiVersion)` entry and match its selectors
90
+ * against ARM-side keys in `state`.
91
+ * 2. On miss, retry with the highest registered version of each selector.
92
+ *
93
+ * Pass `{ strict: true }` to skip step 2 and require an exact match.
94
+ *
95
+ * Returns `undefined` when nothing matches — callers (notably the
96
+ * deserializer) then fall back to constructing a base `Resource`.
97
+ */
98
+ export declare function resolveResource(type: string, apiVersion: string, state?: Record<string, unknown>, options?: ResolveOptions): ResourceCtor | undefined;
99
+ //# sourceMappingURL=resource-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-registry.d.ts","sourceRoot":"","sources":["../../../../src/constructs/resource/resource-registry.ts"],"names":[],"mappings":"AAGA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+BG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,eAAe,CAAC;AAC9C,OAAO,EAAwB,KAAK,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAE7F;;;;;;;;;;;;;;;;GAgBG;AACH,MAAM,MAAM,YAAY,CAAC,CAAC,SAAS,QAAQ,GAAG,QAAQ,IAAI;IACxD,KAAK,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,EAAE,GAAG,GAAG,CAAC,CAAC;IACjD,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;CAC7B,CAAC;AAEF;;;GAGG;AACH,MAAM,WAAW,cAAc;IAC7B;;;;OAIG;IACH,QAAQ,CAAC,MAAM,CAAC,EAAE,OAAO,CAAC;CAC3B;AAkBD;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,gBAAgB,CAAC,IAAI,EAAE,YAAY,EAAE,eAAe,CAAC,EAAE,mBAAmB,GAAG,IAAI,CAEhG;AAED;;;;;;;;;;;;GAYG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,EACZ,UAAU,EAAE,MAAM,EAClB,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,CAAC,EAAE,cAAc,GACvB,YAAY,GAAG,SAAS,CAK1B"}
@@ -0,0 +1,49 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var resource_registry_exports = {};
19
+ __export(resource_registry_exports, {
20
+ registerResource: () => registerResource,
21
+ resolveResource: () => resolveResource
22
+ });
23
+ module.exports = __toCommonJS(resource_registry_exports);
24
+ var import_resource_type_registry = require("./resource-type-registry.js");
25
+ const REGISTRY_SYMBOL = /* @__PURE__ */ Symbol.for("@azure/provisioning-core.resourceRegistry");
26
+ function getRegistry() {
27
+ const host = globalThis;
28
+ let registry = host[REGISTRY_SYMBOL];
29
+ if (registry === void 0) {
30
+ registry = new import_resource_type_registry.ResourceTypeRegistry();
31
+ host[REGISTRY_SYMBOL] = registry;
32
+ }
33
+ return registry;
34
+ }
35
+ function registerResource(ctor, variantSelector) {
36
+ getRegistry().register(ctor.resourceType, ctor.apiVersion, ctor, variantSelector);
37
+ }
38
+ function resolveResource(type, apiVersion, state, options) {
39
+ return getRegistry().resolve(type, apiVersion, state ?? {}, {
40
+ strict: options?.strict ?? false,
41
+ valueKeyedBy: "arm"
42
+ });
43
+ }
44
+ // Annotate the CommonJS export names for ESM import in node:
45
+ 0 && (module.exports = {
46
+ registerResource,
47
+ resolveResource
48
+ });
49
+ //# sourceMappingURL=resource-registry.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/constructs/resource/resource-registry.ts"],
4
+ "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Global registry mapping a resource class's registry key to its\n * constructor.\n *\n * Populated at module load by each class's `static {}` initializer\n * (via {@link Resource.register}). The deserializer reads this\n * registry to construct the correct class instance \u2014 preserving\n * identity, prototype methods, and constructor-initialized child\n * collections \u2014 instead of materialising a base `Resource`.\n *\n * Each `type@apiVersion` entry is either one flat constructor or a flat list\n * of concrete constructors paired with ordered variant selectors. A selector\n * can contain singleton `name`, model discriminators such as `kind`, and\n * nested discriminator segments.\n *\n * Resolution has two modes:\n *\n * - **Best-effort (default).** Exact `(type, apiVersion)` first, then\n * falls back to the highest registered `apiVersion` for the same\n * selector. Enables\n * deserializing older JSON against a newer package version without\n * losing typed handles.\n * - **Strict** (opt-in via `{ strict: true }`). Exact match only;\n * returns `undefined` for any apiVersion the package doesn't ship.\n *\n * The shared registry tracks the highest `apiVersion` per `(type, selector)`.\n * Best-effort lookups consult it in O(1); no scanning is needed.\n *\n * Keyed on a process-global symbol so multiple copies of `@azure/provisioning-core`\n * in the same realm share one registry, mirroring the cross-realm\n * strategy used by {@link isResource}'s brand symbol.\n */\n\nimport type { Resource } from \"./resource.js\";\nimport { ResourceTypeRegistry, type FlatVariantSelector } from \"./resource-type-registry.js\";\n\n/**\n * A `Resource` class that's eligible to live in the registry.\n *\n * - The construct signature uses `any` for both `context` and `props`\n * because concrete classes narrow these (child resources require a\n * specific parent class as context; each resource has its own `Props`\n * shape). TypeScript's parameter contravariance would reject any\n * concrete parameter types here. The deserializer is the sole caller\n * of resolved constructors and forwards already-correct values it\n * built from the wire document.\n * - The two static fields `resourceType` and `apiVersion` form the\n * registry key and are always present on emitter-generated classes\n * (and on the hand-maintained `ResourceGroup`).\n * - The generic `T` propagates the instance type \u2014 used by the query\n * API (`stack.getResources(KeyVault)` \u2192 `KeyVault[]`) to narrow\n * return types without needing a separate descriptor object.\n */\nexport type ResourceCtor<T extends Resource = Resource> = {\n new (context: any, props: any, options?: any): T;\n readonly resourceType: string;\n readonly apiVersion: string;\n};\n\n/**\n * Options controlling how {@link resolveResource} handles\n * apiVersion mismatches.\n */\nexport interface ResolveOptions {\n /**\n * When `true`, only an exact `(resourceType, apiVersion)` match is\n * returned; the best-effort fallback to the highest registered\n * version for the type is skipped. Defaults to `false`.\n */\n readonly strict?: boolean;\n}\n\nconst REGISTRY_SYMBOL = Symbol.for(\"@azure/provisioning-core.resourceRegistry\");\n\ninterface RegistryHost {\n [REGISTRY_SYMBOL]?: ResourceTypeRegistry<ResourceCtor>;\n}\n\nfunction getRegistry(): ResourceTypeRegistry<ResourceCtor> {\n const host = globalThis as unknown as RegistryHost;\n let registry = host[REGISTRY_SYMBOL];\n if (registry === undefined) {\n registry = new ResourceTypeRegistry<ResourceCtor>();\n host[REGISTRY_SYMBOL] = registry;\n }\n return registry;\n}\n\n/**\n * Register `ctor` as the canonical class for its\n * `(resourceType, apiVersion[, variantSelector])` key.\n *\n * Pass an ordered selector for variants; omit it for ordinary resources.\n * Re-registering the same constructor for the\n * same key is a silent no-op so module-graph re-entry (test\n * harnesses, dual-format builds) is safe. Registering a *different*\n * constructor for an existing key throws \u2014 that's a genuine conflict\n * (e.g. two packages claiming the same ARM type).\n *\n * A `(resourceType, apiVersion)` pair is either entirely flat or entirely\n * variant-based. Attempting to mix both modes throws,\n * preserving the invariant the deserializer relies on.\n */\nexport function registerResource(ctor: ResourceCtor, variantSelector?: FlatVariantSelector): void {\n getRegistry().register(ctor.resourceType, ctor.apiVersion, ctor, variantSelector);\n}\n\n/**\n * Resolve the registered class for a wire resource.\n *\n * Default is best-effort:\n * 1. Try the exact `(type, apiVersion)` entry and match its selectors\n * against ARM-side keys in `state`.\n * 2. On miss, retry with the highest registered version of each selector.\n *\n * Pass `{ strict: true }` to skip step 2 and require an exact match.\n *\n * Returns `undefined` when nothing matches \u2014 callers (notably the\n * deserializer) then fall back to constructing a base `Resource`.\n */\nexport function resolveResource(\n type: string,\n apiVersion: string,\n state?: Record<string, unknown>,\n options?: ResolveOptions,\n): ResourceCtor | undefined {\n return getRegistry().resolve(type, apiVersion, state ?? {}, {\n strict: options?.strict ?? false,\n valueKeyedBy: \"arm\",\n });\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAqCA,oCAA+D;AAsC/D,MAAM,kBAAkB,uBAAO,IAAI,2CAA2C;AAM9E,SAAS,cAAkD;AACzD,QAAM,OAAO;AACb,MAAI,WAAW,KAAK,eAAe;AACnC,MAAI,aAAa,QAAW;AAC1B,eAAW,IAAI,mDAAmC;AAClD,SAAK,eAAe,IAAI;AAAA,EAC1B;AACA,SAAO;AACT;AAiBO,SAAS,iBAAiB,MAAoB,iBAA6C;AAChG,cAAY,EAAE,SAAS,KAAK,cAAc,KAAK,YAAY,MAAM,eAAe;AAClF;AAeO,SAAS,gBACd,MACA,YACA,OACA,SAC0B;AAC1B,SAAO,YAAY,EAAE,QAAQ,MAAM,YAAY,SAAS,CAAC,GAAG;AAAA,IAC1D,QAAQ,SAAS,UAAU;AAAA,IAC3B,cAAc;AAAA,EAChB,CAAC;AACH;",
6
+ "names": []
7
+ }
@@ -0,0 +1,46 @@
1
+ import type { DiscriminatorNames } from "../../shape/shape.js";
2
+ /** One discriminator pinned to a fixed value by a concrete flat variant. */
3
+ export interface FlatVariantPin {
4
+ readonly discriminator: DiscriminatorNames;
5
+ readonly value: string;
6
+ }
7
+ /** Pins selecting one concrete flat variant. */
8
+ export type FlatVariantSelector = readonly FlatVariantPin[];
9
+ /** One concrete variant together with a selector that chooses it. */
10
+ export interface FlatVariantSelection<T> {
11
+ readonly variant: T;
12
+ readonly selector: FlatVariantSelector;
13
+ }
14
+ /** One selector-to-target record stored in a variant registry bucket. */
15
+ export interface FlatVariantRegistryEntry<T> {
16
+ readonly selector: FlatVariantSelector;
17
+ readonly target: T;
18
+ }
19
+ /** One `(resourceType, apiVersion)` registry bucket. */
20
+ export type ResourceTypeRegistryEntry<T> = {
21
+ readonly kind: "flat";
22
+ readonly target: T;
23
+ } | {
24
+ readonly kind: "variants";
25
+ readonly variants: FlatVariantRegistryEntry<T>[];
26
+ };
27
+ export interface ResourceTypeRegistryResolveOptions {
28
+ readonly strict: boolean;
29
+ readonly valueKeyedBy: "js" | "arm";
30
+ }
31
+ /** Registry for versioned resource-type targets with optional variants. */
32
+ export declare class ResourceTypeRegistry<T> {
33
+ #private;
34
+ register(resourceType: string, apiVersion: string, target: T, variantSelector?: FlatVariantSelector): void;
35
+ resolve(resourceType: string, apiVersion: string, state: Record<string, unknown>, options: ResourceTypeRegistryResolveOptions): T | undefined;
36
+ }
37
+ /**
38
+ * Stable identity for duplicate detection and version indexes.
39
+ * Pins are sorted in the key because the matched state is flat and selector
40
+ * matching is a conjunction of discriminator/value pairs, independent of
41
+ * hierarchy order. The selector itself is not mutated.
42
+ */
43
+ export declare function flatVariantSelectorKey(selector: FlatVariantSelector): string;
44
+ /** Resolve the first registered selector exactly matched by `state`. */
45
+ export declare function resolveFlatVariant<T>(entries: readonly FlatVariantRegistryEntry<T>[], state: Record<string, unknown> | undefined, valueKeyedBy: "js" | "arm"): T | undefined;
46
+ //# sourceMappingURL=resource-type-registry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-type-registry.d.ts","sourceRoot":"","sources":["../../../../src/constructs/resource/resource-type-registry.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,4EAA4E;AAC5E,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,aAAa,EAAE,kBAAkB,CAAC;IAC3C,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;CACxB;AAED,gDAAgD;AAChD,MAAM,MAAM,mBAAmB,GAAG,SAAS,cAAc,EAAE,CAAC;AAE5D,qEAAqE;AACrE,MAAM,WAAW,oBAAoB,CAAC,CAAC;IACrC,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC;IACpB,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;CACxC;AAED,yEAAyE;AACzE,MAAM,WAAW,wBAAwB,CAAC,CAAC;IACzC,QAAQ,CAAC,QAAQ,EAAE,mBAAmB,CAAC;IACvC,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;CACpB;AAED,wDAAwD;AACxD,MAAM,MAAM,yBAAyB,CAAC,CAAC,IACnC;IACE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC;CACpB,GACD;IACE,QAAQ,CAAC,IAAI,EAAE,UAAU,CAAC;IAC1B,QAAQ,CAAC,QAAQ,EAAE,wBAAwB,CAAC,CAAC,CAAC,EAAE,CAAC;CAClD,CAAC;AAEN,MAAM,WAAW,kCAAkC;IACjD,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,YAAY,EAAE,IAAI,GAAG,KAAK,CAAC;CACrC;AAOD,2EAA2E;AAC3E,qBAAa,oBAAoB,CAAC,CAAC;;IAIjC,QAAQ,CACN,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,CAAC,EACT,eAAe,CAAC,EAAE,mBAAmB,GACpC,IAAI;IAYP,OAAO,CACL,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,OAAO,EAAE,kCAAkC,GAC1C,CAAC,GAAG,SAAS;CA6DjB;AAgFD;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,mBAAmB,GAAG,MAAM,CAM5E;AAaD,wEAAwE;AACxE,wBAAgB,kBAAkB,CAAC,CAAC,EAClC,OAAO,EAAE,SAAS,wBAAwB,CAAC,CAAC,CAAC,EAAE,EAC/C,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,EAC1C,YAAY,EAAE,IAAI,GAAG,KAAK,GACzB,CAAC,GAAG,SAAS,CASf"}
@@ -0,0 +1,178 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var resource_type_registry_exports = {};
19
+ __export(resource_type_registry_exports, {
20
+ ResourceTypeRegistry: () => ResourceTypeRegistry,
21
+ flatVariantSelectorKey: () => flatVariantSelectorKey,
22
+ resolveFlatVariant: () => resolveFlatVariant
23
+ });
24
+ module.exports = __toCommonJS(resource_type_registry_exports);
25
+ class ResourceTypeRegistry {
26
+ #exact = /* @__PURE__ */ new Map();
27
+ #highest = /* @__PURE__ */ new Map();
28
+ register(resourceType, apiVersion, target, variantSelector) {
29
+ const selector = variantSelector?.length ? variantSelector : void 0;
30
+ const exactKey = resourceTypeVersionKey(resourceType, apiVersion);
31
+ const exactEntry = this.#exact.get(exactKey);
32
+ const highestEntry = this.#highest.get(resourceType);
33
+ assertMode(exactEntry, selector, exactKey);
34
+ assertMode(highestEntry, selector, resourceType);
35
+ registerExact(this.#exact, exactKey, target, selector);
36
+ this.#updateHighest(resourceType, apiVersion, target, selector);
37
+ }
38
+ resolve(resourceType, apiVersion, state, options) {
39
+ const exact = resolveEntry(
40
+ this.#exact.get(resourceTypeVersionKey(resourceType, apiVersion)),
41
+ state,
42
+ options.valueKeyedBy
43
+ );
44
+ if (exact !== void 0 || options.strict) return exact;
45
+ const fallback = resolveEntry(this.#highest.get(resourceType), state, options.valueKeyedBy);
46
+ return fallback?.target;
47
+ }
48
+ #updateHighest(resourceType, apiVersion, target, selector) {
49
+ const entry = this.#highest.get(resourceType);
50
+ const versionedTarget = { apiVersion, target };
51
+ if (!entry) {
52
+ this.#highest.set(
53
+ resourceType,
54
+ selector ? {
55
+ kind: "variants",
56
+ variants: [{ selector: [...selector], target: versionedTarget }]
57
+ } : { kind: "flat", target: versionedTarget }
58
+ );
59
+ return;
60
+ }
61
+ if (entry.kind === "flat") {
62
+ if (apiVersionCompare(apiVersion, entry.target.apiVersion) > 0) {
63
+ this.#highest.set(resourceType, {
64
+ kind: "flat",
65
+ target: versionedTarget
66
+ });
67
+ }
68
+ return;
69
+ }
70
+ const selectorKey = flatVariantSelectorKey(selector);
71
+ const priorIndex = entry.variants.findIndex(
72
+ (variant) => flatVariantSelectorKey(variant.selector) === selectorKey
73
+ );
74
+ const prior = entry.variants[priorIndex];
75
+ if (!prior) {
76
+ entry.variants.push({
77
+ selector: [...selector],
78
+ target: versionedTarget
79
+ });
80
+ } else if (apiVersionCompare(apiVersion, prior.target.apiVersion) > 0) {
81
+ entry.variants[priorIndex] = {
82
+ selector: [...selector],
83
+ target: versionedTarget
84
+ };
85
+ }
86
+ }
87
+ }
88
+ function assertMode(entry, selector, key) {
89
+ if (!entry) return;
90
+ if (!selector && entry.kind === "variants") {
91
+ throw new Error(`Cannot register flat target for ${key}: variants are already registered.`);
92
+ }
93
+ if (selector && entry.kind === "flat") {
94
+ throw new Error(
95
+ `Cannot register variant target for ${key}: a flat target is already registered.`
96
+ );
97
+ }
98
+ }
99
+ function registerExact(entries, key, target, selector) {
100
+ const entry = entries.get(key);
101
+ if (!entry) {
102
+ entries.set(
103
+ key,
104
+ selector ? {
105
+ kind: "variants",
106
+ variants: [{ selector: [...selector], target }]
107
+ } : { kind: "flat", target }
108
+ );
109
+ return;
110
+ }
111
+ if (entry.kind === "flat") {
112
+ if (entry.target !== target) {
113
+ throw new Error(`Conflicting flat target registration for ${key}.`);
114
+ }
115
+ return;
116
+ }
117
+ const selectorKey = flatVariantSelectorKey(selector);
118
+ const existing = entry.variants.find(
119
+ (variant) => flatVariantSelectorKey(variant.selector) === selectorKey
120
+ );
121
+ if (existing) {
122
+ if (existing.target !== target) {
123
+ throw new Error(`Conflicting variant target registration for ${key}@${selectorKey}.`);
124
+ }
125
+ return;
126
+ }
127
+ entry.variants.push({ selector: [...selector], target });
128
+ }
129
+ function resolveEntry(entry, state, valueKeyedBy) {
130
+ if (!entry) return void 0;
131
+ if (entry.kind === "flat") return entry.target;
132
+ return resolveFlatVariant(entry.variants, state, valueKeyedBy);
133
+ }
134
+ function resourceTypeVersionKey(resourceType, apiVersion) {
135
+ return `${resourceType}@${apiVersion}`;
136
+ }
137
+ function apiVersionCompare(left, right) {
138
+ if (left === right) return 0;
139
+ if (right.startsWith(`${left}-`)) return 1;
140
+ if (left.startsWith(`${right}-`)) return -1;
141
+ return left < right ? -1 : 1;
142
+ }
143
+ function flatVariantSelectorKey(selector) {
144
+ const pins = selector.map(
145
+ ({ discriminator, value }) => [discriminator.jsName, discriminator.armName, value]
146
+ );
147
+ pins.sort(comparePinTuples);
148
+ return JSON.stringify(pins);
149
+ }
150
+ function comparePinTuples(left, right) {
151
+ for (let index = 0; index < left.length; index++) {
152
+ if (left[index] < right[index]) return -1;
153
+ if (left[index] > right[index]) return 1;
154
+ }
155
+ return 0;
156
+ }
157
+ function resolveFlatVariant(entries, state, valueKeyedBy) {
158
+ if (!state) return void 0;
159
+ for (const entry of entries) {
160
+ if (matchesSelector(entry.selector, state, valueKeyedBy)) {
161
+ return entry.target;
162
+ }
163
+ }
164
+ return void 0;
165
+ }
166
+ function matchesSelector(selector, state, valueKeyedBy) {
167
+ return selector.every(({ discriminator, value }) => {
168
+ const key = valueKeyedBy === "js" ? discriminator.jsName : discriminator.armName;
169
+ return state[key] === value;
170
+ });
171
+ }
172
+ // Annotate the CommonJS export names for ESM import in node:
173
+ 0 && (module.exports = {
174
+ ResourceTypeRegistry,
175
+ flatVariantSelectorKey,
176
+ resolveFlatVariant
177
+ });
178
+ //# sourceMappingURL=resource-type-registry.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/constructs/resource/resource-type-registry.ts"],
4
+ "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { DiscriminatorNames } from \"../../shape/shape.js\";\n\n/** One discriminator pinned to a fixed value by a concrete flat variant. */\nexport interface FlatVariantPin {\n readonly discriminator: DiscriminatorNames;\n readonly value: string;\n}\n\n/** Pins selecting one concrete flat variant. */\nexport type FlatVariantSelector = readonly FlatVariantPin[];\n\n/** One concrete variant together with a selector that chooses it. */\nexport interface FlatVariantSelection<T> {\n readonly variant: T;\n readonly selector: FlatVariantSelector;\n}\n\n/** One selector-to-target record stored in a variant registry bucket. */\nexport interface FlatVariantRegistryEntry<T> {\n readonly selector: FlatVariantSelector;\n readonly target: T;\n}\n\n/** One `(resourceType, apiVersion)` registry bucket. */\nexport type ResourceTypeRegistryEntry<T> =\n | {\n readonly kind: \"flat\";\n readonly target: T;\n }\n | {\n readonly kind: \"variants\";\n readonly variants: FlatVariantRegistryEntry<T>[];\n };\n\nexport interface ResourceTypeRegistryResolveOptions {\n readonly strict: boolean;\n readonly valueKeyedBy: \"js\" | \"arm\";\n}\n\ninterface VersionedTarget<T> {\n readonly apiVersion: string;\n readonly target: T;\n}\n\n/** Registry for versioned resource-type targets with optional variants. */\nexport class ResourceTypeRegistry<T> {\n readonly #exact = new Map<string, ResourceTypeRegistryEntry<T>>();\n readonly #highest = new Map<string, ResourceTypeRegistryEntry<VersionedTarget<T>>>();\n\n register(\n resourceType: string,\n apiVersion: string,\n target: T,\n variantSelector?: FlatVariantSelector,\n ): void {\n const selector = variantSelector?.length ? variantSelector : undefined;\n const exactKey = resourceTypeVersionKey(resourceType, apiVersion);\n const exactEntry = this.#exact.get(exactKey);\n const highestEntry = this.#highest.get(resourceType);\n\n assertMode(exactEntry, selector, exactKey);\n assertMode(highestEntry, selector, resourceType);\n registerExact(this.#exact, exactKey, target, selector);\n this.#updateHighest(resourceType, apiVersion, target, selector);\n }\n\n resolve(\n resourceType: string,\n apiVersion: string,\n state: Record<string, unknown>,\n options: ResourceTypeRegistryResolveOptions,\n ): T | undefined {\n const exact = resolveEntry(\n this.#exact.get(resourceTypeVersionKey(resourceType, apiVersion)),\n state,\n options.valueKeyedBy,\n );\n if (exact !== undefined || options.strict) return exact;\n\n const fallback = resolveEntry(this.#highest.get(resourceType), state, options.valueKeyedBy);\n return fallback?.target;\n }\n\n #updateHighest(\n resourceType: string,\n apiVersion: string,\n target: T,\n selector: FlatVariantSelector | undefined,\n ): void {\n const entry = this.#highest.get(resourceType);\n const versionedTarget = { apiVersion, target };\n\n if (!entry) {\n this.#highest.set(\n resourceType,\n selector\n ? {\n kind: \"variants\",\n variants: [{ selector: [...selector], target: versionedTarget }],\n }\n : { kind: \"flat\", target: versionedTarget },\n );\n return;\n }\n\n if (entry.kind === \"flat\") {\n if (apiVersionCompare(apiVersion, entry.target.apiVersion) > 0) {\n this.#highest.set(resourceType, {\n kind: \"flat\",\n target: versionedTarget,\n });\n }\n return;\n }\n\n const selectorKey = flatVariantSelectorKey(selector!);\n const priorIndex = entry.variants.findIndex(\n (variant) => flatVariantSelectorKey(variant.selector) === selectorKey,\n );\n const prior = entry.variants[priorIndex];\n if (!prior) {\n entry.variants.push({\n selector: [...selector!],\n target: versionedTarget,\n });\n } else if (apiVersionCompare(apiVersion, prior.target.apiVersion) > 0) {\n entry.variants[priorIndex] = {\n selector: [...selector!],\n target: versionedTarget,\n };\n }\n }\n}\n\nfunction assertMode<T>(\n entry: ResourceTypeRegistryEntry<T> | undefined,\n selector: FlatVariantSelector | undefined,\n key: string,\n): void {\n if (!entry) return;\n if (!selector && entry.kind === \"variants\") {\n throw new Error(`Cannot register flat target for ${key}: variants are already registered.`);\n }\n if (selector && entry.kind === \"flat\") {\n throw new Error(\n `Cannot register variant target for ${key}: a flat target is already registered.`,\n );\n }\n}\n\nfunction registerExact<T>(\n entries: Map<string, ResourceTypeRegistryEntry<T>>,\n key: string,\n target: T,\n selector: FlatVariantSelector | undefined,\n): void {\n const entry = entries.get(key);\n if (!entry) {\n entries.set(\n key,\n selector\n ? {\n kind: \"variants\",\n variants: [{ selector: [...selector], target }],\n }\n : { kind: \"flat\", target },\n );\n return;\n }\n\n if (entry.kind === \"flat\") {\n if (entry.target !== target) {\n throw new Error(`Conflicting flat target registration for ${key}.`);\n }\n return;\n }\n\n const selectorKey = flatVariantSelectorKey(selector!);\n const existing = entry.variants.find(\n (variant) => flatVariantSelectorKey(variant.selector) === selectorKey,\n );\n if (existing) {\n if (existing.target !== target) {\n throw new Error(`Conflicting variant target registration for ${key}@${selectorKey}.`);\n }\n return;\n }\n entry.variants.push({ selector: [...selector!], target });\n}\n\nfunction resolveEntry<T>(\n entry: ResourceTypeRegistryEntry<T> | undefined,\n state: Record<string, unknown>,\n valueKeyedBy: \"js\" | \"arm\",\n): T | undefined {\n if (!entry) return undefined;\n if (entry.kind === \"flat\") return entry.target;\n return resolveFlatVariant(entry.variants, state, valueKeyedBy);\n}\n\nfunction resourceTypeVersionKey(resourceType: string, apiVersion: string): string {\n return `${resourceType}@${apiVersion}`;\n}\n\n/** Compare ARM API versions for best-effort fallback selection. */\nfunction apiVersionCompare(left: string, right: string): number {\n if (left === right) return 0;\n if (right.startsWith(`${left}-`)) return 1;\n if (left.startsWith(`${right}-`)) return -1;\n return left < right ? -1 : 1;\n}\n\n/**\n * Stable identity for duplicate detection and version indexes.\n * Pins are sorted in the key because the matched state is flat and selector\n * matching is a conjunction of discriminator/value pairs, independent of\n * hierarchy order. The selector itself is not mutated.\n */\nexport function flatVariantSelectorKey(selector: FlatVariantSelector): string {\n const pins = selector.map(\n ({ discriminator, value }) => [discriminator.jsName, discriminator.armName, value] as const,\n );\n pins.sort(comparePinTuples);\n return JSON.stringify(pins);\n}\n\nfunction comparePinTuples(\n left: readonly [string, string, string],\n right: readonly [string, string, string],\n): number {\n for (let index = 0; index < left.length; index++) {\n if (left[index]! < right[index]!) return -1;\n if (left[index]! > right[index]!) return 1;\n }\n return 0;\n}\n\n/** Resolve the first registered selector exactly matched by `state`. */\nexport function resolveFlatVariant<T>(\n entries: readonly FlatVariantRegistryEntry<T>[],\n state: Record<string, unknown> | undefined,\n valueKeyedBy: \"js\" | \"arm\",\n): T | undefined {\n if (!state) return undefined;\n\n for (const entry of entries) {\n if (matchesSelector(entry.selector, state, valueKeyedBy)) {\n return entry.target;\n }\n }\n return undefined;\n}\n\nfunction matchesSelector(\n selector: FlatVariantSelector,\n state: Record<string, unknown>,\n valueKeyedBy: \"js\" | \"arm\",\n): boolean {\n return selector.every(({ discriminator, value }) => {\n const key = valueKeyedBy === \"js\" ? discriminator.jsName : discriminator.armName;\n return state[key] === value;\n });\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,60 @@
1
+ import type { Resource, ResourceDeclaration, LoopedResource } from "./resource.js";
2
+ import type { ResourceCtor } from "./resource-registry.js";
3
+ /**
4
+ * Cross-realm-safe brand guards for resource declarations.
5
+ *
6
+ * These live in a standalone module — importing only the brand **symbols**
7
+ * (from `resource-proxy.ts`) and `resource.ts` **types** — so tree-walking
8
+ * utilities (e.g. the query layer, `ProvisioningComponent`) can identify resources
9
+ * WITHOUT a runtime import of `resource.ts`, which `extends ProvisioningComponent` and
10
+ * would otherwise create an eval-time import cycle
11
+ * (`ProvisioningComponent` → `query` → `resource` → `ProvisioningComponent`).
12
+ *
13
+ * The public guard API is these standalone functions (`isResource`,
14
+ * `isResourceDeclaration`, `isLoopedResource`, `isResourceOf`,
15
+ * `isLoopedResourceOf`) — there are no class-static guards, so a subclass
16
+ * like `Secret` never inherits a misleading `Secret.isResource(...)`.
17
+ */
18
+ /** Is `x` a scalar {@link Resource} (not a looped declaration)? */
19
+ export declare function isResource(x: unknown): x is Resource;
20
+ /**
21
+ * Is `x` a Bicep resource declaration — either a scalar {@link Resource} or
22
+ * a {@link LoopedResource}?
23
+ */
24
+ export declare function isResourceDeclaration(x: unknown): x is ResourceDeclaration;
25
+ /** Is `x` a {@link LoopedResource} (`Ctor.fromLoop(...)`)? */
26
+ export declare function isLoopedResource(x: unknown): x is LoopedResource<Resource>;
27
+ /**
28
+ * Type guard: is `x` an instance of the resource class `ctor`?
29
+ * Narrows `x` to the class's instance type, so callers can access
30
+ * subclass-specific accessors (e.g. `kv.secrets`) inside the guarded
31
+ * block.
32
+ *
33
+ * Accepts any value (`unknown`), like the other brand guards. A
34
+ * `LoopedResource<T>` is not a `Resource`, so `instanceof ctor` returns
35
+ * `false` for it — the narrowing is safe. `instanceof` alone is sufficient
36
+ * (and stricter than a brand + ARM-type-string check: a base-`Resource`
37
+ * impostor carrying the same `type`/`apiVersion` is correctly rejected), so
38
+ * no `isResource` pre-check is needed.
39
+ *
40
+ * Matches scalar resource **declarations** (from a constructor / query /
41
+ * collection). It does NOT match a `parent.at(i)` element reference of a
42
+ * looped declaration: that proxy intentionally keeps `LoopedResource`'s
43
+ * prototype (no `getPrototypeOf` trap), so `instanceof` is `false` for it
44
+ * even though its ARM reads work. If we ever need cross-realm subclass
45
+ * matching (per-subclass `Symbol.for` brands, mirroring the base
46
+ * `RESOURCE_BRAND`), this is the one place to swap.
47
+ */
48
+ export declare function isResourceOf<T extends Resource>(x: unknown, ctor: ResourceCtor<T>): x is T;
49
+ /**
50
+ * Type guard: is `x` a {@link LoopedResource} whose wrapped resource class is
51
+ * `ctor` (i.e. a `LoopedResource<T>` produced by `T.fromLoop(...)`)? Narrows
52
+ * `x` to `LoopedResource<T>`, the looped analogue of {@link isResourceOf}.
53
+ *
54
+ * Matches on the declaration's `wrappedCtor` identity — the concrete subclass
55
+ * passed to `fromLoop` — so `isLoopedResourceOf(x, StorageAccount)`
56
+ * replaces the `x.wrappedCtor === StorageAccount` checks scattered across the
57
+ * query / collection layers.
58
+ */
59
+ export declare function isLoopedResourceOf<T extends Resource>(x: unknown, ctor: ResourceCtor<T>): x is LoopedResource<T>;
60
+ //# sourceMappingURL=resource-utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resource-utils.d.ts","sourceRoot":"","sources":["../../../../src/constructs/resource/resource-utils.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,QAAQ,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AACnF,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAE3D;;;;;;;;;;;;;;GAcG;AAEH,mEAAmE;AACnE,wBAAgB,UAAU,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,QAAQ,CAIpD;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,mBAAmB,CAM1E;AAED,8DAA8D;AAC9D,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,GAAG,CAAC,IAAI,cAAc,CAAC,QAAQ,CAAC,CAM1E;AAED;;;;;;;;;;;;;;;;;;;;GAoBG;AACH,wBAAgB,YAAY,CAAC,CAAC,SAAS,QAAQ,EAAE,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,CAE1F;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAAC,CAAC,SAAS,QAAQ,EACnD,CAAC,EAAE,OAAO,EACV,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC,GACpB,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,CAExB"}
@@ -0,0 +1,51 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var resource_utils_exports = {};
19
+ __export(resource_utils_exports, {
20
+ isLoopedResource: () => isLoopedResource,
21
+ isLoopedResourceOf: () => isLoopedResourceOf,
22
+ isResource: () => isResource,
23
+ isResourceDeclaration: () => isResourceDeclaration,
24
+ isResourceOf: () => isResourceOf
25
+ });
26
+ module.exports = __toCommonJS(resource_utils_exports);
27
+ var import_resource_proxy = require("./resource-proxy.js");
28
+ function isResource(x) {
29
+ return typeof x === "object" && x !== null && x[import_resource_proxy.RESOURCE_BRAND] === true;
30
+ }
31
+ function isResourceDeclaration(x) {
32
+ return typeof x === "object" && x !== null && x[import_resource_proxy.RESOURCE_DECLARATION_BRAND] === true;
33
+ }
34
+ function isLoopedResource(x) {
35
+ return typeof x === "object" && x !== null && x[import_resource_proxy.LOOPED_RESOURCE_BRAND] === true;
36
+ }
37
+ function isResourceOf(x, ctor) {
38
+ return x instanceof ctor;
39
+ }
40
+ function isLoopedResourceOf(x, ctor) {
41
+ return isLoopedResource(x) && x.wrappedCtor === ctor;
42
+ }
43
+ // Annotate the CommonJS export names for ESM import in node:
44
+ 0 && (module.exports = {
45
+ isLoopedResource,
46
+ isLoopedResourceOf,
47
+ isResource,
48
+ isResourceDeclaration,
49
+ isResourceOf
50
+ });
51
+ //# sourceMappingURL=resource-utils.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/constructs/resource/resource-utils.ts"],
4
+ "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport {\n RESOURCE_BRAND,\n RESOURCE_DECLARATION_BRAND,\n LOOPED_RESOURCE_BRAND,\n} from \"./resource-proxy.js\";\nimport type { Resource, ResourceDeclaration, LoopedResource } from \"./resource.js\";\nimport type { ResourceCtor } from \"./resource-registry.js\";\n\n/**\n * Cross-realm-safe brand guards for resource declarations.\n *\n * These live in a standalone module \u2014 importing only the brand **symbols**\n * (from `resource-proxy.ts`) and `resource.ts` **types** \u2014 so tree-walking\n * utilities (e.g. the query layer, `ProvisioningComponent`) can identify resources\n * WITHOUT a runtime import of `resource.ts`, which `extends ProvisioningComponent` and\n * would otherwise create an eval-time import cycle\n * (`ProvisioningComponent` \u2192 `query` \u2192 `resource` \u2192 `ProvisioningComponent`).\n *\n * The public guard API is these standalone functions (`isResource`,\n * `isResourceDeclaration`, `isLoopedResource`, `isResourceOf`,\n * `isLoopedResourceOf`) \u2014 there are no class-static guards, so a subclass\n * like `Secret` never inherits a misleading `Secret.isResource(...)`.\n */\n\n/** Is `x` a scalar {@link Resource} (not a looped declaration)? */\nexport function isResource(x: unknown): x is Resource {\n return (\n typeof x === \"object\" && x !== null && (x as Record<symbol, unknown>)[RESOURCE_BRAND] === true\n );\n}\n\n/**\n * Is `x` a Bicep resource declaration \u2014 either a scalar {@link Resource} or\n * a {@link LoopedResource}?\n */\nexport function isResourceDeclaration(x: unknown): x is ResourceDeclaration {\n return (\n typeof x === \"object\" &&\n x !== null &&\n (x as Record<symbol, unknown>)[RESOURCE_DECLARATION_BRAND] === true\n );\n}\n\n/** Is `x` a {@link LoopedResource} (`Ctor.fromLoop(...)`)? */\nexport function isLoopedResource(x: unknown): x is LoopedResource<Resource> {\n return (\n typeof x === \"object\" &&\n x !== null &&\n (x as Record<symbol, unknown>)[LOOPED_RESOURCE_BRAND] === true\n );\n}\n\n/**\n * Type guard: is `x` an instance of the resource class `ctor`?\n * Narrows `x` to the class's instance type, so callers can access\n * subclass-specific accessors (e.g. `kv.secrets`) inside the guarded\n * block.\n *\n * Accepts any value (`unknown`), like the other brand guards. A\n * `LoopedResource<T>` is not a `Resource`, so `instanceof ctor` returns\n * `false` for it \u2014 the narrowing is safe. `instanceof` alone is sufficient\n * (and stricter than a brand + ARM-type-string check: a base-`Resource`\n * impostor carrying the same `type`/`apiVersion` is correctly rejected), so\n * no `isResource` pre-check is needed.\n *\n * Matches scalar resource **declarations** (from a constructor / query /\n * collection). It does NOT match a `parent.at(i)` element reference of a\n * looped declaration: that proxy intentionally keeps `LoopedResource`'s\n * prototype (no `getPrototypeOf` trap), so `instanceof` is `false` for it\n * even though its ARM reads work. If we ever need cross-realm subclass\n * matching (per-subclass `Symbol.for` brands, mirroring the base\n * `RESOURCE_BRAND`), this is the one place to swap.\n */\nexport function isResourceOf<T extends Resource>(x: unknown, ctor: ResourceCtor<T>): x is T {\n return x instanceof ctor;\n}\n\n/**\n * Type guard: is `x` a {@link LoopedResource} whose wrapped resource class is\n * `ctor` (i.e. a `LoopedResource<T>` produced by `T.fromLoop(...)`)? Narrows\n * `x` to `LoopedResource<T>`, the looped analogue of {@link isResourceOf}.\n *\n * Matches on the declaration's `wrappedCtor` identity \u2014 the concrete subclass\n * passed to `fromLoop` \u2014 so `isLoopedResourceOf(x, StorageAccount)`\n * replaces the `x.wrappedCtor === StorageAccount` checks scattered across the\n * query / collection layers.\n */\nexport function isLoopedResourceOf<T extends Resource>(\n x: unknown,\n ctor: ResourceCtor<T>,\n): x is LoopedResource<T> {\n return isLoopedResource(x) && (x.wrappedCtor as unknown) === ctor;\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,4BAIO;AAqBA,SAAS,WAAW,GAA2B;AACpD,SACE,OAAO,MAAM,YAAY,MAAM,QAAS,EAA8B,oCAAc,MAAM;AAE9F;AAMO,SAAS,sBAAsB,GAAsC;AAC1E,SACE,OAAO,MAAM,YACb,MAAM,QACL,EAA8B,gDAA0B,MAAM;AAEnE;AAGO,SAAS,iBAAiB,GAA2C;AAC1E,SACE,OAAO,MAAM,YACb,MAAM,QACL,EAA8B,2CAAqB,MAAM;AAE9D;AAuBO,SAAS,aAAiC,GAAY,MAA+B;AAC1F,SAAO,aAAa;AACtB;AAYO,SAAS,mBACd,GACA,MACwB;AACxB,SAAO,iBAAiB,CAAC,KAAM,EAAE,gBAA4B;AAC/D;",
6
+ "names": []
7
+ }