@azure/provisioning-core 1.0.0-beta.1 → 1.0.0-beta.2

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 (571) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +49 -10
  3. package/dist/browser/constructs/built-in-resources/resource-group.d.ts +7 -1
  4. package/dist/browser/constructs/built-in-resources/resource-group.d.ts.map +1 -1
  5. package/dist/browser/constructs/built-in-resources/resource-group.js +26 -6
  6. package/dist/browser/constructs/built-in-resources/resource-group.js.map +1 -1
  7. package/dist/browser/constructs/output.d.ts +1 -1
  8. package/dist/browser/constructs/output.d.ts.map +1 -1
  9. package/dist/browser/constructs/output.js.map +1 -1
  10. package/dist/browser/constructs/parameter.d.ts +1 -1
  11. package/dist/browser/constructs/parameter.d.ts.map +1 -1
  12. package/dist/browser/constructs/parameter.js.map +1 -1
  13. package/dist/browser/constructs/resource/resource-query.d.ts +3 -1
  14. package/dist/browser/constructs/resource/resource-query.d.ts.map +1 -1
  15. package/dist/browser/constructs/resource/resource-query.js +10 -0
  16. package/dist/browser/constructs/resource/resource-query.js.map +1 -1
  17. package/dist/browser/constructs/resource/resource-relationships.d.ts +9 -0
  18. package/dist/browser/constructs/resource/resource-relationships.d.ts.map +1 -0
  19. package/dist/browser/constructs/resource/resource-relationships.js +35 -0
  20. package/dist/browser/constructs/resource/resource-relationships.js.map +1 -0
  21. package/dist/browser/constructs/resource/resource.d.ts +11 -17
  22. package/dist/browser/constructs/resource/resource.d.ts.map +1 -1
  23. package/dist/browser/constructs/resource/resource.js +70 -28
  24. package/dist/browser/constructs/resource/resource.js.map +1 -1
  25. package/dist/browser/constructs/stack.d.ts +2 -16
  26. package/dist/browser/constructs/stack.d.ts.map +1 -1
  27. package/dist/browser/constructs/stack.js +1 -15
  28. package/dist/browser/constructs/stack.js.map +1 -1
  29. package/dist/browser/expression/ast-nodes.d.ts +1 -1
  30. package/dist/browser/expression/ast-nodes.d.ts.map +1 -1
  31. package/dist/browser/expression/ast-nodes.js.map +1 -1
  32. package/dist/browser/expression/expressions.d.ts +2 -9
  33. package/dist/browser/expression/expressions.d.ts.map +1 -1
  34. package/dist/browser/expression/expressions.js +2 -9
  35. package/dist/browser/expression/expressions.js.map +1 -1
  36. package/dist/browser/expression/utils.d.ts +5 -0
  37. package/dist/browser/expression/utils.d.ts.map +1 -0
  38. package/dist/browser/expression/utils.js +25 -0
  39. package/dist/browser/expression/utils.js.map +1 -0
  40. package/dist/browser/index.d.ts +4 -4
  41. package/dist/browser/index.d.ts.map +1 -1
  42. package/dist/browser/index.js.map +1 -1
  43. package/dist/browser/internal.d.ts +2 -5
  44. package/dist/browser/internal.d.ts.map +1 -1
  45. package/dist/browser/internal.js +1 -3
  46. package/dist/browser/internal.js.map +1 -1
  47. package/dist/browser/naming/name-validation.d.ts +15 -0
  48. package/dist/browser/naming/name-validation.d.ts.map +1 -0
  49. package/dist/browser/naming/name-validation.js +82 -0
  50. package/dist/browser/naming/name-validation.js.map +1 -0
  51. package/dist/browser/naming/naming-policy.d.ts +7 -7
  52. package/dist/browser/naming/naming-policy.d.ts.map +1 -1
  53. package/dist/browser/naming/naming-policy.js +166 -33
  54. package/dist/browser/naming/naming-policy.js.map +1 -1
  55. package/dist/browser/naming/naming-rules.d.ts +12 -11
  56. package/dist/browser/naming/naming-rules.d.ts.map +1 -1
  57. package/dist/browser/naming/naming-rules.js +2 -9
  58. package/dist/browser/naming/naming-rules.js.map +1 -1
  59. package/dist/browser/package.json +1 -1
  60. package/dist/{esm/serialization/json/lower.d.ts → browser/serialization/arm-object-conversion.d.ts} +11 -11
  61. package/dist/browser/serialization/arm-object-conversion.d.ts.map +1 -0
  62. package/dist/{esm/serialization/json/lower.js → browser/serialization/arm-object-conversion.js} +20 -20
  63. package/dist/browser/serialization/arm-object-conversion.js.map +1 -0
  64. package/dist/browser/serialization/ast/declaration-builder.d.ts +10 -0
  65. package/dist/browser/serialization/ast/declaration-builder.d.ts.map +1 -0
  66. package/dist/browser/serialization/ast/declaration-builder.js +265 -0
  67. package/dist/browser/serialization/ast/declaration-builder.js.map +1 -0
  68. package/dist/browser/serialization/ast/declaration-dependencies.d.ts +18 -0
  69. package/dist/browser/serialization/ast/declaration-dependencies.d.ts.map +1 -0
  70. package/dist/browser/serialization/ast/declaration-dependencies.js +96 -0
  71. package/dist/browser/serialization/ast/declaration-dependencies.js.map +1 -0
  72. package/dist/browser/serialization/ast/expression-builder.d.ts +14 -0
  73. package/dist/browser/serialization/ast/expression-builder.d.ts.map +1 -0
  74. package/dist/browser/serialization/ast/expression-builder.js +313 -0
  75. package/dist/browser/serialization/ast/expression-builder.js.map +1 -0
  76. package/dist/browser/serialization/ast/expression-restorer.d.ts +8 -0
  77. package/dist/browser/serialization/ast/expression-restorer.d.ts.map +1 -0
  78. package/dist/browser/serialization/ast/expression-restorer.js +162 -0
  79. package/dist/browser/serialization/ast/expression-restorer.js.map +1 -0
  80. package/dist/browser/serialization/ast/expression-rewriter.d.ts +29 -0
  81. package/dist/browser/serialization/ast/expression-rewriter.d.ts.map +1 -0
  82. package/dist/browser/serialization/ast/expression-rewriter.js +257 -0
  83. package/dist/browser/serialization/ast/expression-rewriter.js.map +1 -0
  84. package/dist/browser/serialization/ast/expression-walker.d.ts +16 -0
  85. package/dist/browser/serialization/ast/expression-walker.d.ts.map +1 -0
  86. package/dist/browser/serialization/ast/expression-walker.js +154 -0
  87. package/dist/browser/serialization/ast/expression-walker.js.map +1 -0
  88. package/dist/browser/serialization/ast/generated/ast.d.ts.map +1 -0
  89. package/dist/browser/serialization/ast/generated/ast.js.map +1 -0
  90. package/dist/browser/serialization/ast/index.d.ts +7 -0
  91. package/dist/browser/serialization/ast/index.d.ts.map +1 -0
  92. package/dist/browser/serialization/ast/index.js.map +1 -0
  93. package/dist/browser/serialization/ast/resource-utils.d.ts +10 -0
  94. package/dist/browser/serialization/ast/resource-utils.d.ts.map +1 -0
  95. package/dist/browser/serialization/ast/resource-utils.js +52 -0
  96. package/dist/browser/serialization/ast/resource-utils.js.map +1 -0
  97. package/dist/browser/serialization/bicep/file-layout/authored-context.d.ts +12 -0
  98. package/dist/browser/serialization/bicep/file-layout/authored-context.d.ts.map +1 -0
  99. package/dist/browser/serialization/bicep/file-layout/authored-context.js +57 -0
  100. package/dist/browser/serialization/bicep/file-layout/authored-context.js.map +1 -0
  101. package/dist/browser/serialization/bicep/file-layout/bicep-namer.d.ts +11 -0
  102. package/dist/browser/serialization/bicep/file-layout/bicep-namer.d.ts.map +1 -0
  103. package/dist/browser/serialization/bicep/file-layout/bicep-namer.js +100 -0
  104. package/dist/browser/serialization/bicep/file-layout/bicep-namer.js.map +1 -0
  105. package/dist/browser/serialization/bicep/file-layout/build-bicep-files.d.ts +7 -0
  106. package/dist/browser/serialization/bicep/file-layout/build-bicep-files.d.ts.map +1 -0
  107. package/dist/browser/serialization/bicep/file-layout/build-bicep-files.js +46 -0
  108. package/dist/browser/serialization/bicep/file-layout/build-bicep-files.js.map +1 -0
  109. package/dist/browser/serialization/bicep/file-layout/deployment-planning.d.ts +19 -0
  110. package/dist/browser/serialization/bicep/file-layout/deployment-planning.d.ts.map +1 -0
  111. package/dist/browser/serialization/bicep/file-layout/deployment-planning.js +68 -0
  112. package/dist/browser/serialization/bicep/file-layout/deployment-planning.js.map +1 -0
  113. package/dist/browser/serialization/bicep/file-layout/deployment-resource-utils.d.ts +8 -0
  114. package/dist/browser/serialization/bicep/file-layout/deployment-resource-utils.d.ts.map +1 -0
  115. package/dist/browser/serialization/bicep/file-layout/deployment-resource-utils.js +67 -0
  116. package/dist/browser/serialization/bicep/file-layout/deployment-resource-utils.js.map +1 -0
  117. package/dist/browser/serialization/bicep/file-layout/file-dependencies.d.ts +4 -0
  118. package/dist/browser/serialization/bicep/file-layout/file-dependencies.d.ts.map +1 -0
  119. package/dist/browser/serialization/bicep/file-layout/file-dependencies.js +32 -0
  120. package/dist/browser/serialization/bicep/file-layout/file-dependencies.js.map +1 -0
  121. package/dist/browser/serialization/bicep/file-layout/file-paths.d.ts +3 -0
  122. package/dist/browser/serialization/bicep/file-layout/file-paths.d.ts.map +1 -0
  123. package/dist/browser/serialization/bicep/file-layout/file-paths.js +46 -0
  124. package/dist/browser/serialization/bicep/file-layout/file-paths.js.map +1 -0
  125. package/dist/browser/serialization/bicep/file-layout/file-preparation.d.ts +34 -0
  126. package/dist/browser/serialization/bicep/file-layout/file-preparation.d.ts.map +1 -0
  127. package/dist/browser/serialization/bicep/file-layout/file-preparation.js +140 -0
  128. package/dist/browser/serialization/bicep/file-layout/file-preparation.js.map +1 -0
  129. package/dist/browser/serialization/bicep/file-layout/reference-wiring.d.ts +3 -0
  130. package/dist/browser/serialization/bicep/file-layout/reference-wiring.d.ts.map +1 -0
  131. package/dist/browser/serialization/bicep/file-layout/reference-wiring.js +225 -0
  132. package/dist/browser/serialization/bicep/file-layout/reference-wiring.js.map +1 -0
  133. package/dist/browser/serialization/bicep/index.d.ts +2 -0
  134. package/dist/browser/serialization/bicep/index.d.ts.map +1 -0
  135. package/dist/browser/serialization/bicep/index.js +4 -0
  136. package/dist/browser/serialization/bicep/index.js.map +1 -0
  137. package/dist/browser/serialization/bicep/render.d.ts +11 -0
  138. package/dist/browser/serialization/bicep/render.d.ts.map +1 -0
  139. package/dist/browser/serialization/bicep/render.js +293 -0
  140. package/dist/browser/serialization/bicep/render.js.map +1 -0
  141. package/dist/browser/serialization/{json/encoding.d.ts → encoding.d.ts} +1 -1
  142. package/dist/browser/serialization/encoding.d.ts.map +1 -0
  143. package/dist/browser/serialization/{json/encoding.js → encoding.js} +2 -12
  144. package/dist/browser/serialization/encoding.js.map +1 -0
  145. package/dist/browser/serialization/{json/util.d.ts → identifiers.d.ts} +1 -1
  146. package/dist/browser/serialization/identifiers.d.ts.map +1 -0
  147. package/dist/browser/serialization/{json/util.js → identifiers.js} +1 -1
  148. package/dist/browser/serialization/identifiers.js.map +1 -0
  149. package/dist/browser/serialization/index.d.ts +1 -1
  150. package/dist/browser/serialization/index.d.ts.map +1 -1
  151. package/dist/browser/serialization/index.js.map +1 -1
  152. package/dist/browser/serialization/json/deserialize.d.ts.map +1 -1
  153. package/dist/browser/serialization/json/deserialize.js +131 -39
  154. package/dist/browser/serialization/json/deserialize.js.map +1 -1
  155. package/dist/browser/serialization/json/serialize.d.ts +1 -1
  156. package/dist/browser/serialization/json/serialize.d.ts.map +1 -1
  157. package/dist/browser/serialization/json/serialize.js +5 -360
  158. package/dist/browser/serialization/json/serialize.js.map +1 -1
  159. package/dist/browser/serialization/pluralize-config.d.ts.map +1 -0
  160. package/dist/browser/serialization/pluralize-config.js.map +1 -0
  161. package/dist/browser/serialization/symbol-map.d.ts +10 -0
  162. package/dist/browser/serialization/symbol-map.d.ts.map +1 -0
  163. package/dist/browser/serialization/symbol-map.js +40 -0
  164. package/dist/browser/serialization/symbol-map.js.map +1 -0
  165. package/dist/browser/shape/shape.d.ts +4 -4
  166. package/dist/browser/shape/shape.js +2 -2
  167. package/dist/browser/shape/shape.js.map +1 -1
  168. package/dist/commonjs/constructs/built-in-resources/resource-group.d.ts +7 -1
  169. package/dist/commonjs/constructs/built-in-resources/resource-group.d.ts.map +1 -1
  170. package/dist/commonjs/constructs/built-in-resources/resource-group.js +27 -6
  171. package/dist/commonjs/constructs/built-in-resources/resource-group.js.map +2 -2
  172. package/dist/commonjs/constructs/output.d.ts +1 -1
  173. package/dist/commonjs/constructs/output.d.ts.map +1 -1
  174. package/dist/commonjs/constructs/output.js.map +1 -1
  175. package/dist/commonjs/constructs/parameter.d.ts +1 -1
  176. package/dist/commonjs/constructs/parameter.d.ts.map +1 -1
  177. package/dist/commonjs/constructs/parameter.js.map +1 -1
  178. package/dist/commonjs/constructs/resource/resource-query.d.ts +3 -1
  179. package/dist/commonjs/constructs/resource/resource-query.d.ts.map +1 -1
  180. package/dist/commonjs/constructs/resource/resource-query.js +11 -0
  181. package/dist/commonjs/constructs/resource/resource-query.js.map +2 -2
  182. package/dist/commonjs/constructs/resource/resource-relationships.d.ts +9 -0
  183. package/dist/commonjs/constructs/resource/resource-relationships.d.ts.map +1 -0
  184. package/dist/commonjs/constructs/resource/resource-relationships.js +59 -0
  185. package/dist/commonjs/constructs/resource/resource-relationships.js.map +7 -0
  186. package/dist/commonjs/constructs/resource/resource.d.ts +11 -17
  187. package/dist/commonjs/constructs/resource/resource.d.ts.map +1 -1
  188. package/dist/commonjs/constructs/resource/resource.js +57 -35
  189. package/dist/commonjs/constructs/resource/resource.js.map +2 -2
  190. package/dist/commonjs/constructs/stack.d.ts +2 -16
  191. package/dist/commonjs/constructs/stack.d.ts.map +1 -1
  192. package/dist/commonjs/constructs/stack.js.map +2 -2
  193. package/dist/commonjs/expression/ast-nodes.d.ts +1 -1
  194. package/dist/commonjs/expression/ast-nodes.d.ts.map +1 -1
  195. package/dist/commonjs/expression/ast-nodes.js.map +1 -1
  196. package/dist/commonjs/expression/expressions.d.ts +2 -9
  197. package/dist/commonjs/expression/expressions.d.ts.map +1 -1
  198. package/dist/commonjs/expression/expressions.js.map +2 -2
  199. package/dist/commonjs/expression/utils.d.ts +5 -0
  200. package/dist/commonjs/expression/utils.d.ts.map +1 -0
  201. package/dist/commonjs/expression/utils.js +43 -0
  202. package/dist/commonjs/expression/utils.js.map +7 -0
  203. package/dist/commonjs/index.d.ts +4 -4
  204. package/dist/commonjs/index.d.ts.map +1 -1
  205. package/dist/commonjs/index.js.map +2 -2
  206. package/dist/commonjs/internal.d.ts +2 -5
  207. package/dist/commonjs/internal.d.ts.map +1 -1
  208. package/dist/commonjs/internal.js +3 -9
  209. package/dist/commonjs/internal.js.map +2 -2
  210. package/dist/commonjs/naming/name-validation.d.ts +15 -0
  211. package/dist/commonjs/naming/name-validation.d.ts.map +1 -0
  212. package/dist/commonjs/naming/name-validation.js +74 -0
  213. package/dist/commonjs/naming/name-validation.js.map +7 -0
  214. package/dist/commonjs/naming/naming-policy.d.ts +7 -7
  215. package/dist/commonjs/naming/naming-policy.d.ts.map +1 -1
  216. package/dist/commonjs/naming/naming-policy.js +136 -26
  217. package/dist/commonjs/naming/naming-policy.js.map +2 -2
  218. package/dist/commonjs/naming/naming-rules.d.ts +12 -11
  219. package/dist/commonjs/naming/naming-rules.d.ts.map +1 -1
  220. package/dist/commonjs/naming/naming-rules.js +4 -11
  221. package/dist/commonjs/naming/naming-rules.js.map +2 -2
  222. package/dist/commonjs/package.json +1 -1
  223. package/dist/{browser/serialization/json/lower.d.ts → commonjs/serialization/arm-object-conversion.d.ts} +11 -11
  224. package/dist/commonjs/serialization/arm-object-conversion.d.ts.map +1 -0
  225. package/dist/commonjs/serialization/{json/lower.js → arm-object-conversion.js} +15 -15
  226. package/dist/commonjs/serialization/arm-object-conversion.js.map +7 -0
  227. package/dist/commonjs/serialization/ast/declaration-builder.d.ts +10 -0
  228. package/dist/commonjs/serialization/ast/declaration-builder.d.ts.map +1 -0
  229. package/dist/commonjs/serialization/ast/declaration-builder.js +274 -0
  230. package/dist/commonjs/serialization/ast/declaration-builder.js.map +7 -0
  231. package/dist/commonjs/serialization/ast/declaration-dependencies.d.ts +18 -0
  232. package/dist/commonjs/serialization/ast/declaration-dependencies.d.ts.map +1 -0
  233. package/dist/commonjs/serialization/ast/declaration-dependencies.js +109 -0
  234. package/dist/commonjs/serialization/ast/declaration-dependencies.js.map +7 -0
  235. package/dist/commonjs/serialization/ast/expression-builder.d.ts +14 -0
  236. package/dist/commonjs/serialization/ast/expression-builder.d.ts.map +1 -0
  237. package/dist/commonjs/serialization/ast/expression-builder.js +316 -0
  238. package/dist/commonjs/serialization/ast/expression-builder.js.map +7 -0
  239. package/dist/commonjs/serialization/ast/expression-restorer.d.ts +8 -0
  240. package/dist/commonjs/serialization/ast/expression-restorer.d.ts.map +1 -0
  241. package/dist/commonjs/serialization/ast/expression-restorer.js +193 -0
  242. package/dist/commonjs/serialization/ast/expression-restorer.js.map +7 -0
  243. package/dist/commonjs/serialization/ast/expression-rewriter.d.ts +29 -0
  244. package/dist/commonjs/serialization/ast/expression-rewriter.d.ts.map +1 -0
  245. package/dist/commonjs/serialization/ast/expression-rewriter.js +270 -0
  246. package/dist/commonjs/serialization/ast/expression-rewriter.js.map +7 -0
  247. package/dist/commonjs/serialization/ast/expression-walker.d.ts +16 -0
  248. package/dist/commonjs/serialization/ast/expression-walker.d.ts.map +1 -0
  249. package/dist/commonjs/serialization/ast/expression-walker.js +165 -0
  250. package/dist/commonjs/serialization/ast/expression-walker.js.map +7 -0
  251. package/dist/commonjs/serialization/ast/generated/ast.d.ts.map +1 -0
  252. package/dist/commonjs/serialization/{contract → ast}/generated/ast.js.map +1 -1
  253. package/dist/commonjs/serialization/ast/index.d.ts +7 -0
  254. package/dist/commonjs/serialization/ast/index.d.ts.map +1 -0
  255. package/dist/commonjs/serialization/{contract → ast}/index.js +3 -3
  256. package/dist/commonjs/serialization/ast/index.js.map +7 -0
  257. package/dist/commonjs/serialization/ast/resource-utils.d.ts +10 -0
  258. package/dist/commonjs/serialization/ast/resource-utils.d.ts.map +1 -0
  259. package/dist/commonjs/serialization/ast/resource-utils.js +71 -0
  260. package/dist/commonjs/serialization/ast/resource-utils.js.map +7 -0
  261. package/dist/commonjs/serialization/bicep/file-layout/authored-context.d.ts +12 -0
  262. package/dist/commonjs/serialization/bicep/file-layout/authored-context.d.ts.map +1 -0
  263. package/dist/commonjs/serialization/bicep/file-layout/authored-context.js +74 -0
  264. package/dist/commonjs/serialization/bicep/file-layout/authored-context.js.map +7 -0
  265. package/dist/commonjs/serialization/bicep/file-layout/bicep-namer.d.ts +11 -0
  266. package/dist/commonjs/serialization/bicep/file-layout/bicep-namer.d.ts.map +1 -0
  267. package/dist/commonjs/serialization/bicep/file-layout/bicep-namer.js +130 -0
  268. package/dist/commonjs/serialization/bicep/file-layout/bicep-namer.js.map +7 -0
  269. package/dist/commonjs/serialization/bicep/file-layout/build-bicep-files.d.ts +7 -0
  270. package/dist/commonjs/serialization/bicep/file-layout/build-bicep-files.d.ts.map +1 -0
  271. package/dist/commonjs/serialization/bicep/file-layout/build-bicep-files.js +71 -0
  272. package/dist/commonjs/serialization/bicep/file-layout/build-bicep-files.js.map +7 -0
  273. package/dist/commonjs/serialization/bicep/file-layout/deployment-planning.d.ts +19 -0
  274. package/dist/commonjs/serialization/bicep/file-layout/deployment-planning.d.ts.map +1 -0
  275. package/dist/commonjs/serialization/bicep/file-layout/deployment-planning.js +80 -0
  276. package/dist/commonjs/serialization/bicep/file-layout/deployment-planning.js.map +7 -0
  277. package/dist/commonjs/serialization/bicep/file-layout/deployment-resource-utils.d.ts +8 -0
  278. package/dist/commonjs/serialization/bicep/file-layout/deployment-resource-utils.d.ts.map +1 -0
  279. package/dist/commonjs/serialization/bicep/file-layout/deployment-resource-utils.js +91 -0
  280. package/dist/commonjs/serialization/bicep/file-layout/deployment-resource-utils.js.map +7 -0
  281. package/dist/commonjs/serialization/bicep/file-layout/file-dependencies.d.ts +4 -0
  282. package/dist/commonjs/serialization/bicep/file-layout/file-dependencies.d.ts.map +1 -0
  283. package/dist/commonjs/serialization/bicep/file-layout/file-dependencies.js +57 -0
  284. package/dist/commonjs/serialization/bicep/file-layout/file-dependencies.js.map +7 -0
  285. package/dist/commonjs/serialization/bicep/file-layout/file-paths.d.ts +3 -0
  286. package/dist/commonjs/serialization/bicep/file-layout/file-paths.d.ts.map +1 -0
  287. package/dist/commonjs/serialization/bicep/file-layout/file-paths.js +70 -0
  288. package/dist/commonjs/serialization/bicep/file-layout/file-paths.js.map +7 -0
  289. package/dist/commonjs/serialization/bicep/file-layout/file-preparation.d.ts +34 -0
  290. package/dist/commonjs/serialization/bicep/file-layout/file-preparation.d.ts.map +1 -0
  291. package/dist/commonjs/serialization/bicep/file-layout/file-preparation.js +190 -0
  292. package/dist/commonjs/serialization/bicep/file-layout/file-preparation.js.map +7 -0
  293. package/dist/commonjs/serialization/bicep/file-layout/reference-wiring.d.ts +3 -0
  294. package/dist/commonjs/serialization/bicep/file-layout/reference-wiring.d.ts.map +1 -0
  295. package/dist/commonjs/serialization/bicep/file-layout/reference-wiring.js +241 -0
  296. package/dist/commonjs/serialization/bicep/file-layout/reference-wiring.js.map +7 -0
  297. package/dist/commonjs/serialization/bicep/index.d.ts +2 -0
  298. package/dist/commonjs/serialization/bicep/index.d.ts.map +1 -0
  299. package/dist/commonjs/serialization/bicep/index.js +28 -0
  300. package/dist/commonjs/serialization/bicep/index.js.map +7 -0
  301. package/dist/commonjs/serialization/bicep/render.d.ts +11 -0
  302. package/dist/commonjs/serialization/bicep/render.d.ts.map +1 -0
  303. package/dist/commonjs/serialization/bicep/render.js +312 -0
  304. package/dist/commonjs/serialization/bicep/render.js.map +7 -0
  305. package/dist/commonjs/serialization/{json/encoding.d.ts → encoding.d.ts} +1 -1
  306. package/dist/commonjs/serialization/encoding.d.ts.map +1 -0
  307. package/dist/commonjs/serialization/{json/encoding.js → encoding.js} +2 -12
  308. package/dist/commonjs/serialization/encoding.js.map +7 -0
  309. package/dist/commonjs/serialization/{json/util.d.ts → identifiers.d.ts} +1 -1
  310. package/dist/commonjs/serialization/identifiers.d.ts.map +1 -0
  311. package/dist/commonjs/serialization/{json/util.js → identifiers.js} +4 -4
  312. package/dist/commonjs/serialization/{json/util.js.map → identifiers.js.map} +1 -1
  313. package/dist/commonjs/serialization/index.d.ts +1 -1
  314. package/dist/commonjs/serialization/index.d.ts.map +1 -1
  315. package/dist/commonjs/serialization/index.js.map +1 -1
  316. package/dist/commonjs/serialization/json/deserialize.d.ts.map +1 -1
  317. package/dist/commonjs/serialization/json/deserialize.js +115 -44
  318. package/dist/commonjs/serialization/json/deserialize.js.map +2 -2
  319. package/dist/commonjs/serialization/json/serialize.d.ts +1 -1
  320. package/dist/commonjs/serialization/json/serialize.d.ts.map +1 -1
  321. package/dist/commonjs/serialization/json/serialize.js +6 -308
  322. package/dist/commonjs/serialization/json/serialize.js.map +3 -3
  323. package/dist/commonjs/serialization/pluralize-config.d.ts.map +1 -0
  324. package/dist/commonjs/serialization/{json/pluralize-config.js.map → pluralize-config.js.map} +1 -1
  325. package/dist/commonjs/serialization/symbol-map.d.ts +10 -0
  326. package/dist/commonjs/serialization/symbol-map.d.ts.map +1 -0
  327. package/dist/commonjs/serialization/symbol-map.js +72 -0
  328. package/dist/commonjs/serialization/symbol-map.js.map +7 -0
  329. package/dist/commonjs/shape/shape.d.ts +4 -4
  330. package/dist/commonjs/shape/shape.js.map +1 -1
  331. package/dist/commonjs/tsdoc-metadata.json +1 -1
  332. package/dist/esm/constructs/built-in-resources/resource-group.d.ts +7 -1
  333. package/dist/esm/constructs/built-in-resources/resource-group.d.ts.map +1 -1
  334. package/dist/esm/constructs/built-in-resources/resource-group.js +26 -6
  335. package/dist/esm/constructs/built-in-resources/resource-group.js.map +1 -1
  336. package/dist/esm/constructs/output.d.ts +1 -1
  337. package/dist/esm/constructs/output.d.ts.map +1 -1
  338. package/dist/esm/constructs/output.js.map +1 -1
  339. package/dist/esm/constructs/parameter.d.ts +1 -1
  340. package/dist/esm/constructs/parameter.d.ts.map +1 -1
  341. package/dist/esm/constructs/parameter.js.map +1 -1
  342. package/dist/esm/constructs/resource/resource-query.d.ts +3 -1
  343. package/dist/esm/constructs/resource/resource-query.d.ts.map +1 -1
  344. package/dist/esm/constructs/resource/resource-query.js +10 -0
  345. package/dist/esm/constructs/resource/resource-query.js.map +1 -1
  346. package/dist/esm/constructs/resource/resource-relationships.d.ts +9 -0
  347. package/dist/esm/constructs/resource/resource-relationships.d.ts.map +1 -0
  348. package/dist/esm/constructs/resource/resource-relationships.js +35 -0
  349. package/dist/esm/constructs/resource/resource-relationships.js.map +1 -0
  350. package/dist/esm/constructs/resource/resource.d.ts +11 -17
  351. package/dist/esm/constructs/resource/resource.d.ts.map +1 -1
  352. package/dist/esm/constructs/resource/resource.js +70 -28
  353. package/dist/esm/constructs/resource/resource.js.map +1 -1
  354. package/dist/esm/constructs/stack.d.ts +2 -16
  355. package/dist/esm/constructs/stack.d.ts.map +1 -1
  356. package/dist/esm/constructs/stack.js +1 -15
  357. package/dist/esm/constructs/stack.js.map +1 -1
  358. package/dist/esm/expression/ast-nodes.d.ts +1 -1
  359. package/dist/esm/expression/ast-nodes.d.ts.map +1 -1
  360. package/dist/esm/expression/ast-nodes.js.map +1 -1
  361. package/dist/esm/expression/expressions.d.ts +2 -9
  362. package/dist/esm/expression/expressions.d.ts.map +1 -1
  363. package/dist/esm/expression/expressions.js +2 -9
  364. package/dist/esm/expression/expressions.js.map +1 -1
  365. package/dist/esm/expression/utils.d.ts +5 -0
  366. package/dist/esm/expression/utils.d.ts.map +1 -0
  367. package/dist/esm/expression/utils.js +25 -0
  368. package/dist/esm/expression/utils.js.map +1 -0
  369. package/dist/esm/index.d.ts +4 -4
  370. package/dist/esm/index.d.ts.map +1 -1
  371. package/dist/esm/index.js.map +1 -1
  372. package/dist/esm/internal.d.ts +2 -5
  373. package/dist/esm/internal.d.ts.map +1 -1
  374. package/dist/esm/internal.js +1 -3
  375. package/dist/esm/internal.js.map +1 -1
  376. package/dist/esm/naming/name-validation.d.ts +15 -0
  377. package/dist/esm/naming/name-validation.d.ts.map +1 -0
  378. package/dist/esm/naming/name-validation.js +82 -0
  379. package/dist/esm/naming/name-validation.js.map +1 -0
  380. package/dist/esm/naming/naming-policy.d.ts +7 -7
  381. package/dist/esm/naming/naming-policy.d.ts.map +1 -1
  382. package/dist/esm/naming/naming-policy.js +166 -33
  383. package/dist/esm/naming/naming-policy.js.map +1 -1
  384. package/dist/esm/naming/naming-rules.d.ts +12 -11
  385. package/dist/esm/naming/naming-rules.d.ts.map +1 -1
  386. package/dist/esm/naming/naming-rules.js +2 -9
  387. package/dist/esm/naming/naming-rules.js.map +1 -1
  388. package/dist/esm/package.json +1 -1
  389. package/dist/{commonjs/serialization/json/lower.d.ts → esm/serialization/arm-object-conversion.d.ts} +11 -11
  390. package/dist/esm/serialization/arm-object-conversion.d.ts.map +1 -0
  391. package/dist/{browser/serialization/json/lower.js → esm/serialization/arm-object-conversion.js} +20 -20
  392. package/dist/esm/serialization/arm-object-conversion.js.map +1 -0
  393. package/dist/esm/serialization/ast/declaration-builder.d.ts +10 -0
  394. package/dist/esm/serialization/ast/declaration-builder.d.ts.map +1 -0
  395. package/dist/esm/serialization/ast/declaration-builder.js +265 -0
  396. package/dist/esm/serialization/ast/declaration-builder.js.map +1 -0
  397. package/dist/esm/serialization/ast/declaration-dependencies.d.ts +18 -0
  398. package/dist/esm/serialization/ast/declaration-dependencies.d.ts.map +1 -0
  399. package/dist/esm/serialization/ast/declaration-dependencies.js +96 -0
  400. package/dist/esm/serialization/ast/declaration-dependencies.js.map +1 -0
  401. package/dist/esm/serialization/ast/expression-builder.d.ts +14 -0
  402. package/dist/esm/serialization/ast/expression-builder.d.ts.map +1 -0
  403. package/dist/esm/serialization/ast/expression-builder.js +313 -0
  404. package/dist/esm/serialization/ast/expression-builder.js.map +1 -0
  405. package/dist/esm/serialization/ast/expression-restorer.d.ts +8 -0
  406. package/dist/esm/serialization/ast/expression-restorer.d.ts.map +1 -0
  407. package/dist/esm/serialization/ast/expression-restorer.js +162 -0
  408. package/dist/esm/serialization/ast/expression-restorer.js.map +1 -0
  409. package/dist/esm/serialization/ast/expression-rewriter.d.ts +29 -0
  410. package/dist/esm/serialization/ast/expression-rewriter.d.ts.map +1 -0
  411. package/dist/esm/serialization/ast/expression-rewriter.js +257 -0
  412. package/dist/esm/serialization/ast/expression-rewriter.js.map +1 -0
  413. package/dist/esm/serialization/ast/expression-walker.d.ts +16 -0
  414. package/dist/esm/serialization/ast/expression-walker.d.ts.map +1 -0
  415. package/dist/esm/serialization/ast/expression-walker.js +154 -0
  416. package/dist/esm/serialization/ast/expression-walker.js.map +1 -0
  417. package/dist/esm/serialization/ast/generated/ast.d.ts.map +1 -0
  418. package/dist/esm/serialization/ast/generated/ast.js.map +1 -0
  419. package/dist/esm/serialization/ast/index.d.ts +7 -0
  420. package/dist/esm/serialization/ast/index.d.ts.map +1 -0
  421. package/dist/esm/serialization/ast/index.js.map +1 -0
  422. package/dist/esm/serialization/ast/resource-utils.d.ts +10 -0
  423. package/dist/esm/serialization/ast/resource-utils.d.ts.map +1 -0
  424. package/dist/esm/serialization/ast/resource-utils.js +52 -0
  425. package/dist/esm/serialization/ast/resource-utils.js.map +1 -0
  426. package/dist/esm/serialization/bicep/file-layout/authored-context.d.ts +12 -0
  427. package/dist/esm/serialization/bicep/file-layout/authored-context.d.ts.map +1 -0
  428. package/dist/esm/serialization/bicep/file-layout/authored-context.js +57 -0
  429. package/dist/esm/serialization/bicep/file-layout/authored-context.js.map +1 -0
  430. package/dist/esm/serialization/bicep/file-layout/bicep-namer.d.ts +11 -0
  431. package/dist/esm/serialization/bicep/file-layout/bicep-namer.d.ts.map +1 -0
  432. package/dist/esm/serialization/bicep/file-layout/bicep-namer.js +100 -0
  433. package/dist/esm/serialization/bicep/file-layout/bicep-namer.js.map +1 -0
  434. package/dist/esm/serialization/bicep/file-layout/build-bicep-files.d.ts +7 -0
  435. package/dist/esm/serialization/bicep/file-layout/build-bicep-files.d.ts.map +1 -0
  436. package/dist/esm/serialization/bicep/file-layout/build-bicep-files.js +46 -0
  437. package/dist/esm/serialization/bicep/file-layout/build-bicep-files.js.map +1 -0
  438. package/dist/esm/serialization/bicep/file-layout/deployment-planning.d.ts +19 -0
  439. package/dist/esm/serialization/bicep/file-layout/deployment-planning.d.ts.map +1 -0
  440. package/dist/esm/serialization/bicep/file-layout/deployment-planning.js +68 -0
  441. package/dist/esm/serialization/bicep/file-layout/deployment-planning.js.map +1 -0
  442. package/dist/esm/serialization/bicep/file-layout/deployment-resource-utils.d.ts +8 -0
  443. package/dist/esm/serialization/bicep/file-layout/deployment-resource-utils.d.ts.map +1 -0
  444. package/dist/esm/serialization/bicep/file-layout/deployment-resource-utils.js +67 -0
  445. package/dist/esm/serialization/bicep/file-layout/deployment-resource-utils.js.map +1 -0
  446. package/dist/esm/serialization/bicep/file-layout/file-dependencies.d.ts +4 -0
  447. package/dist/esm/serialization/bicep/file-layout/file-dependencies.d.ts.map +1 -0
  448. package/dist/esm/serialization/bicep/file-layout/file-dependencies.js +32 -0
  449. package/dist/esm/serialization/bicep/file-layout/file-dependencies.js.map +1 -0
  450. package/dist/esm/serialization/bicep/file-layout/file-paths.d.ts +3 -0
  451. package/dist/esm/serialization/bicep/file-layout/file-paths.d.ts.map +1 -0
  452. package/dist/esm/serialization/bicep/file-layout/file-paths.js +46 -0
  453. package/dist/esm/serialization/bicep/file-layout/file-paths.js.map +1 -0
  454. package/dist/esm/serialization/bicep/file-layout/file-preparation.d.ts +34 -0
  455. package/dist/esm/serialization/bicep/file-layout/file-preparation.d.ts.map +1 -0
  456. package/dist/esm/serialization/bicep/file-layout/file-preparation.js +140 -0
  457. package/dist/esm/serialization/bicep/file-layout/file-preparation.js.map +1 -0
  458. package/dist/esm/serialization/bicep/file-layout/reference-wiring.d.ts +3 -0
  459. package/dist/esm/serialization/bicep/file-layout/reference-wiring.d.ts.map +1 -0
  460. package/dist/esm/serialization/bicep/file-layout/reference-wiring.js +225 -0
  461. package/dist/esm/serialization/bicep/file-layout/reference-wiring.js.map +1 -0
  462. package/dist/esm/serialization/bicep/index.d.ts +2 -0
  463. package/dist/esm/serialization/bicep/index.d.ts.map +1 -0
  464. package/dist/esm/serialization/bicep/index.js +4 -0
  465. package/dist/esm/serialization/bicep/index.js.map +1 -0
  466. package/dist/esm/serialization/bicep/render.d.ts +11 -0
  467. package/dist/esm/serialization/bicep/render.d.ts.map +1 -0
  468. package/dist/esm/serialization/bicep/render.js +293 -0
  469. package/dist/esm/serialization/bicep/render.js.map +1 -0
  470. package/dist/esm/serialization/{json/encoding.d.ts → encoding.d.ts} +1 -1
  471. package/dist/esm/serialization/encoding.d.ts.map +1 -0
  472. package/dist/esm/serialization/{json/encoding.js → encoding.js} +2 -12
  473. package/dist/esm/serialization/encoding.js.map +1 -0
  474. package/dist/esm/serialization/{json/util.d.ts → identifiers.d.ts} +1 -1
  475. package/dist/esm/serialization/identifiers.d.ts.map +1 -0
  476. package/dist/esm/serialization/{json/util.js → identifiers.js} +1 -1
  477. package/dist/esm/serialization/identifiers.js.map +1 -0
  478. package/dist/esm/serialization/index.d.ts +1 -1
  479. package/dist/esm/serialization/index.d.ts.map +1 -1
  480. package/dist/esm/serialization/index.js.map +1 -1
  481. package/dist/esm/serialization/json/deserialize.d.ts.map +1 -1
  482. package/dist/esm/serialization/json/deserialize.js +131 -39
  483. package/dist/esm/serialization/json/deserialize.js.map +1 -1
  484. package/dist/esm/serialization/json/serialize.d.ts +1 -1
  485. package/dist/esm/serialization/json/serialize.d.ts.map +1 -1
  486. package/dist/esm/serialization/json/serialize.js +5 -360
  487. package/dist/esm/serialization/json/serialize.js.map +1 -1
  488. package/dist/esm/serialization/pluralize-config.d.ts.map +1 -0
  489. package/dist/esm/serialization/pluralize-config.js.map +1 -0
  490. package/dist/esm/serialization/symbol-map.d.ts +10 -0
  491. package/dist/esm/serialization/symbol-map.d.ts.map +1 -0
  492. package/dist/esm/serialization/symbol-map.js +40 -0
  493. package/dist/esm/serialization/symbol-map.js.map +1 -0
  494. package/dist/esm/shape/shape.d.ts +4 -4
  495. package/dist/esm/shape/shape.js +2 -2
  496. package/dist/esm/shape/shape.js.map +1 -1
  497. package/package.json +3 -2
  498. package/dist/browser/serialization/contract/generated/ast.d.ts.map +0 -1
  499. package/dist/browser/serialization/contract/generated/ast.js.map +0 -1
  500. package/dist/browser/serialization/contract/index.d.ts +0 -2
  501. package/dist/browser/serialization/contract/index.d.ts.map +0 -1
  502. package/dist/browser/serialization/contract/index.js.map +0 -1
  503. package/dist/browser/serialization/json/encoding.d.ts.map +0 -1
  504. package/dist/browser/serialization/json/encoding.js.map +0 -1
  505. package/dist/browser/serialization/json/expression.d.ts +0 -32
  506. package/dist/browser/serialization/json/expression.d.ts.map +0 -1
  507. package/dist/browser/serialization/json/expression.js +0 -494
  508. package/dist/browser/serialization/json/expression.js.map +0 -1
  509. package/dist/browser/serialization/json/lower.d.ts.map +0 -1
  510. package/dist/browser/serialization/json/lower.js.map +0 -1
  511. package/dist/browser/serialization/json/pluralize-config.d.ts.map +0 -1
  512. package/dist/browser/serialization/json/pluralize-config.js.map +0 -1
  513. package/dist/browser/serialization/json/util.d.ts.map +0 -1
  514. package/dist/browser/serialization/json/util.js.map +0 -1
  515. package/dist/browser/serialization/utils.d.ts +0 -3
  516. package/dist/browser/serialization/utils.d.ts.map +0 -1
  517. package/dist/browser/serialization/utils.js +0 -146
  518. package/dist/browser/serialization/utils.js.map +0 -1
  519. package/dist/commonjs/serialization/contract/generated/ast.d.ts.map +0 -1
  520. package/dist/commonjs/serialization/contract/index.d.ts +0 -2
  521. package/dist/commonjs/serialization/contract/index.d.ts.map +0 -1
  522. package/dist/commonjs/serialization/contract/index.js.map +0 -7
  523. package/dist/commonjs/serialization/json/encoding.d.ts.map +0 -1
  524. package/dist/commonjs/serialization/json/encoding.js.map +0 -7
  525. package/dist/commonjs/serialization/json/expression.d.ts +0 -32
  526. package/dist/commonjs/serialization/json/expression.d.ts.map +0 -1
  527. package/dist/commonjs/serialization/json/expression.js +0 -509
  528. package/dist/commonjs/serialization/json/expression.js.map +0 -7
  529. package/dist/commonjs/serialization/json/lower.d.ts.map +0 -1
  530. package/dist/commonjs/serialization/json/lower.js.map +0 -7
  531. package/dist/commonjs/serialization/json/pluralize-config.d.ts.map +0 -1
  532. package/dist/commonjs/serialization/json/util.d.ts.map +0 -1
  533. package/dist/commonjs/serialization/utils.d.ts +0 -3
  534. package/dist/commonjs/serialization/utils.d.ts.map +0 -1
  535. package/dist/commonjs/serialization/utils.js +0 -169
  536. package/dist/commonjs/serialization/utils.js.map +0 -7
  537. package/dist/esm/serialization/contract/generated/ast.d.ts.map +0 -1
  538. package/dist/esm/serialization/contract/generated/ast.js.map +0 -1
  539. package/dist/esm/serialization/contract/index.d.ts +0 -2
  540. package/dist/esm/serialization/contract/index.d.ts.map +0 -1
  541. package/dist/esm/serialization/contract/index.js.map +0 -1
  542. package/dist/esm/serialization/json/encoding.d.ts.map +0 -1
  543. package/dist/esm/serialization/json/encoding.js.map +0 -1
  544. package/dist/esm/serialization/json/expression.d.ts +0 -32
  545. package/dist/esm/serialization/json/expression.d.ts.map +0 -1
  546. package/dist/esm/serialization/json/expression.js +0 -494
  547. package/dist/esm/serialization/json/expression.js.map +0 -1
  548. package/dist/esm/serialization/json/lower.d.ts.map +0 -1
  549. package/dist/esm/serialization/json/lower.js.map +0 -1
  550. package/dist/esm/serialization/json/pluralize-config.d.ts.map +0 -1
  551. package/dist/esm/serialization/json/pluralize-config.js.map +0 -1
  552. package/dist/esm/serialization/json/util.d.ts.map +0 -1
  553. package/dist/esm/serialization/json/util.js.map +0 -1
  554. package/dist/esm/serialization/utils.d.ts +0 -3
  555. package/dist/esm/serialization/utils.d.ts.map +0 -1
  556. package/dist/esm/serialization/utils.js +0 -146
  557. package/dist/esm/serialization/utils.js.map +0 -1
  558. /package/dist/browser/serialization/{contract → ast}/generated/ast.d.ts +0 -0
  559. /package/dist/browser/serialization/{contract → ast}/generated/ast.js +0 -0
  560. /package/dist/browser/serialization/{contract → ast}/index.js +0 -0
  561. /package/dist/browser/serialization/{json/pluralize-config.d.ts → pluralize-config.d.ts} +0 -0
  562. /package/dist/browser/serialization/{json/pluralize-config.js → pluralize-config.js} +0 -0
  563. /package/dist/commonjs/serialization/{contract → ast}/generated/ast.d.ts +0 -0
  564. /package/dist/commonjs/serialization/{contract → ast}/generated/ast.js +0 -0
  565. /package/dist/commonjs/serialization/{json/pluralize-config.d.ts → pluralize-config.d.ts} +0 -0
  566. /package/dist/commonjs/serialization/{json/pluralize-config.js → pluralize-config.js} +0 -0
  567. /package/dist/esm/serialization/{contract → ast}/generated/ast.d.ts +0 -0
  568. /package/dist/esm/serialization/{contract → ast}/generated/ast.js +0 -0
  569. /package/dist/esm/serialization/{contract → ast}/index.js +0 -0
  570. /package/dist/esm/serialization/{json/pluralize-config.d.ts → pluralize-config.d.ts} +0 -0
  571. /package/dist/esm/serialization/{json/pluralize-config.js → pluralize-config.js} +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/serialization/json/deserialize.ts"],
4
- "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Deserializes raw JSON (produced by `@azure/provisioning-core/serialization`) back into\n * live CDK `Stack` data structures.\n */\n\nimport { createOutput, type OutputValue } from \"../../constructs/output.js\";\nimport { createParameter } from \"../../constructs/parameter.js\";\nimport { createVariable, type VariableValue } from \"../../constructs/variable.js\";\nimport {\n createIndexedResourceProxy,\n unwrapResourceHandle,\n} from \"../../constructs/resource/resource-proxy.js\";\nimport { isLoopedResource } from \"../../constructs/resource/resource-utils.js\";\nimport {\n createLoopedResource,\n Loop,\n type LoopedResource,\n Resource,\n type ResourceOptions,\n type ScopeExpression,\n} from \"../../constructs/resource/resource.js\";\nimport { Stack } from \"../../constructs/stack.js\";\nimport { wrapExpression, isExpression, type Expression } from \"../../expression/expressions.js\";\nimport { namingRequiredPolicy } from \"../../naming/naming-policy.js\";\nimport { getShape } from \"../../shape/shape-registry.js\";\nimport { symbolicValueExpressionNode } from \"../../expression/ast-nodes.js\";\nimport { resolveResource } from \"../../constructs/resource/resource-registry.js\";\nimport { type ProvisioningComponent } from \"../../constructs/provisioning-component.js\";\n\nimport {\n isPrimitiveTypeName,\n type ExpressionNode,\n type InfraNode,\n type ResourceDeclarationNode,\n type SerializationDocument,\n type VariableDeclarationNode,\n} from \"../contract/index.js\";\n\nimport {\n deserializeDependsOnExpression,\n deserializeExpression,\n requireResourceHandle,\n type DeserializationSymbolMap,\n} from \"./expression.js\";\nimport { raiseState } from \"./lower.js\";\nimport { collectDependenciesForDeclaration } from \"../utils.js\";\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Options for {@link deserialize}.\n *\n * Controls whether unmatched `(type, apiVersion)` pairs fall back\n * to the highest registered version for the type (`strict: false`,\n * the default) or return a base `Resource` (`strict: true`).\n */\nexport interface DeserializeOptions {\n readonly strict?: boolean;\n}\n\n/**\n * Reconstructs stacks from the JSON text of a {@link SerializationDocument},\n * such as `JSON.stringify(serialize(stack))`. Returns one stack per `infras`\n * entry; the input must contain at least one.\n *\n * Import the relevant service packages before restoring to register their\n * resource classes; otherwise unregistered types use base resources.\n * Unsupported module declarations are rejected. A serialize/deserialize/\n * serialize cycle preserves supported deployment semantics and expressions,\n * though the resulting JSON need not be byte-for-byte identical.\n */\nexport function deserialize(raw: string, options?: DeserializeOptions): readonly Stack[] {\n const doc = JSON.parse(raw) as SerializationDocument;\n if (doc.infras.length === 0) throw new Error(\"Empty SerializationDocument\");\n if (doc.infras.some((infra) => Object.keys(infra.modules ?? {}).length > 0)) {\n throw new Error(\"Module deserialization is not supported.\");\n }\n\n return constructStacks(doc.infras, options);\n}\n\n// ---------------------------------------------------------------------------\n// Type aliases\n// ---------------------------------------------------------------------------\n\ninterface LoopAuthoringContext {\n readonly collection: unknown;\n readonly itemVariable: string;\n readonly indexVariable?: string;\n readonly batchSize?: number;\n}\n\ninterface ResourceAuthoringContext {\n readonly condition?: Expression<boolean>;\n readonly loop?: LoopAuthoringContext;\n}\n\n// ---------------------------------------------------------------------------\n// Construction: InfraNode \u2192 CDK objects\n// ---------------------------------------------------------------------------\n\nfunction constructStacks(\n files: readonly InfraNode[],\n options: DeserializeOptions | undefined,\n): Stack[] {\n return files.map((file) => constructStack(file, options));\n}\n\nfunction constructStack(file: InfraNode, options: DeserializeOptions | undefined): Stack {\n const rootStack = new Stack(stemName(file.fileName), {\n targetScope: file.targetScope ?? \"resourceGroup\",\n namingPolicy: namingRequiredPolicy,\n });\n\n // Map stack-local identifiers to expression handles and resource declarations.\n const symbols: DeserializationSymbolMap = new Map();\n\n processParams(file, rootStack, symbols);\n processDeclarations(file, rootStack, symbols, options);\n processOutputs(file, rootStack, symbols);\n\n return rootStack;\n}\n\n// ---------------------------------------------------------------------------\n// Declaration processing\n// ---------------------------------------------------------------------------\n\nfunction assertSymbolAvailable(symbols: DeserializationSymbolMap, identifier: string): void {\n if (symbols.has(identifier)) {\n throw new Error(`Duplicate declaration identifier \"${identifier}\".`);\n }\n}\n\nfunction processParams(\n file: InfraNode,\n stackHandle: Stack,\n symbols: DeserializationSymbolMap,\n): void {\n for (const [, p] of Object.entries(file.parameters ?? {})) {\n assertSymbolAvailable(symbols, p.bicepIdentifier);\n if (p.valueType.kind !== \"primitive-type\" || !isPrimitiveTypeName(p.valueType.name)) {\n throw new Error(`Parameter \"${p.bicepIdentifier}\" has an unsupported non-primitive type.`);\n }\n const type = p.valueType.name;\n const sym = createParameter(stackHandle, p.bicepIdentifier, type, {\n ...(p.decorators?.description !== undefined ? { description: p.decorators.description } : {}),\n ...(p.decorators?.secure ? { secure: true } : {}),\n ...(p.defaultValue !== undefined\n ? {\n defaultValue: deserializeExpression(p.defaultValue, new Map()) as string,\n }\n : {}),\n ...(p.decorators?.allowed?.length\n ? {\n allowed: p.decorators.allowed.map((a) =>\n deserializeExpression(a, new Map()),\n ) as unknown as readonly string[],\n }\n : {}),\n ...(p.decorators?.minValue !== undefined ? { minValue: p.decorators.minValue } : {}),\n ...(p.decorators?.maxValue !== undefined ? { maxValue: p.decorators.maxValue } : {}),\n ...(p.decorators?.minLength !== undefined ? { minLength: p.decorators.minLength } : {}),\n ...(p.decorators?.maxLength !== undefined ? { maxLength: p.decorators.maxLength } : {}),\n ...(p.decorators?.metadata !== undefined\n ? {\n metadata: Object.fromEntries(\n Object.entries(p.decorators.metadata).map(([k, v]) => [\n k,\n deserializeExpression(v, new Map()),\n ]),\n ) as Record<string, unknown>,\n }\n : {}),\n ...(p.decorators?.discriminator !== undefined\n ? { discriminator: p.decorators.discriminator }\n : {}),\n ...(p.decorators?.sealed ? { sealed: true } : {}),\n });\n symbols.set(p.bicepIdentifier, sym);\n }\n}\n\nfunction processDeclarations(\n file: InfraNode,\n stackHandle: Stack,\n symbols: DeserializationSymbolMap,\n options: DeserializeOptions | undefined,\n): void {\n type IndexedDeclaration =\n | { readonly kind: \"resource\"; readonly node: ResourceDeclarationNode }\n | { readonly kind: \"variable\"; readonly node: VariableDeclarationNode };\n const declarations = new Map<string, IndexedDeclaration>();\n\n function registerDeclaration(declaration: IndexedDeclaration): void {\n const { node } = declaration;\n assertSymbolAvailable(symbols, node.bicepIdentifier);\n const previous = declarations.get(node.bicepIdentifier);\n if (previous !== undefined) {\n const category =\n previous.kind === \"resource\" && declaration.kind === \"resource\"\n ? \"resource\"\n : \"declaration\";\n throw new Error(`Duplicate ${category} identifier \"${node.bicepIdentifier}\".`);\n }\n declarations.set(node.bicepIdentifier, declaration);\n }\n\n for (const node of Object.values(file.variables ?? {})) {\n registerDeclaration({ kind: \"variable\", node });\n }\n for (const node of Object.values(file.resources ?? {})) {\n registerDeclaration({ kind: \"resource\", node });\n }\n\n const pending: {\n declaration: IndexedDeclaration;\n dependencies: Iterator<string>;\n }[] = [];\n const active = new Map<string, number>();\n\n function pushDeclaration(declaration: IndexedDeclaration): void {\n const { node } = declaration;\n const identifiers = collectDependenciesForDeclaration(node);\n active.set(node.bicepIdentifier, pending.length);\n pending.push({ declaration, dependencies: identifiers.values() });\n }\n\n for (const declaration of declarations.values()) {\n if (symbols.has(declaration.node.bicepIdentifier)) continue;\n pushDeclaration(declaration);\n\n while (pending.length > 0) {\n const frame = pending[pending.length - 1]!;\n const dependency = frame.dependencies.next();\n if (!dependency.done) {\n if (symbols.has(dependency.value)) continue;\n const target = declarations.get(dependency.value);\n if (target === undefined) continue;\n const cycleStart = active.get(dependency.value);\n if (cycleStart !== undefined) {\n const cycle = pending.slice(cycleStart).map((entry) => entry.declaration);\n const category = cycle.every((entry) => entry.kind === \"resource\")\n ? \"Resource\"\n : \"Declaration\";\n const path = [...cycle.map((entry) => entry.node.bicepIdentifier), dependency.value]\n .map((identifier) => `\"${identifier}\"`)\n .join(\" -> \");\n throw new Error(`${category} dependency cycle detected: ${path}.`);\n }\n pushDeclaration(target);\n continue;\n }\n\n constructDeclaration(frame.declaration);\n active.delete(frame.declaration.node.bicepIdentifier);\n pending.pop();\n }\n }\n\n function constructDeclaration(declaration: IndexedDeclaration): void {\n if (declaration.kind === \"resource\") {\n symbols.set(\n declaration.node.bicepIdentifier,\n createResource(declaration.node, stackHandle, symbols, options),\n );\n return;\n }\n const { node } = declaration;\n const sym = createVariable(\n stackHandle,\n node.bicepIdentifier,\n deserializeExpression(node.value, symbols) as VariableValue,\n {\n ...(node.decorators?.description !== undefined\n ? { description: node.decorators.description }\n : {}),\n ...(node.decorators?.export ? { export: true } : {}),\n },\n );\n symbols.set(node.bicepIdentifier, sym);\n }\n}\n\nfunction processOutputs(\n file: InfraNode,\n stackHandle: Stack,\n symbols: DeserializationSymbolMap,\n): void {\n for (const [, o] of Object.entries(file.outputs ?? {})) {\n if (o.valueType.kind !== \"primitive-type\") {\n throw new Error(\n `Cannot deserialize output \"${o.bicepIdentifier}\" with non-primitive type \"${o.valueType.kind}\".`,\n );\n }\n if (!isPrimitiveTypeName(o.valueType.name)) {\n throw new Error(\n `Cannot deserialize output \"${o.bicepIdentifier}\" with unknown primitive type \"${o.valueType.name}\".`,\n );\n }\n const val = deserializeExpression(o.value, symbols) as OutputValue;\n createOutput(stackHandle, o.bicepIdentifier, o.valueType.name, val as OutputValue, {\n ...(o.decorators?.description !== undefined ? { description: o.decorators.description } : {}),\n ...(o.decorators?.secure ? { secure: true } : {}),\n ...(o.decorators?.minValue !== undefined ? { minValue: o.decorators.minValue } : {}),\n ...(o.decorators?.maxValue !== undefined ? { maxValue: o.decorators.maxValue } : {}),\n ...(o.decorators?.minLength !== undefined ? { minLength: o.decorators.minLength } : {}),\n ...(o.decorators?.maxLength !== undefined ? { maxLength: o.decorators.maxLength } : {}),\n ...(o.decorators?.metadata !== undefined\n ? {\n metadata: Object.fromEntries(\n Object.entries(o.decorators.metadata).map(([k, v]) => [\n k,\n deserializeExpression(v, symbols),\n ]),\n ) as Record<string, unknown>,\n }\n : {}),\n ...(o.decorators?.discriminator !== undefined\n ? { discriminator: o.decorators.discriminator }\n : {}),\n ...(o.decorators?.sealed ? { sealed: true } : {}),\n });\n }\n}\n\n// ---------------------------------------------------------------------------\n// Resource construction\n// ---------------------------------------------------------------------------\n\nfunction createResource(\n res: ResourceDeclarationNode,\n defaultScope: Stack | Resource,\n symbols: DeserializationSymbolMap,\n options: DeserializeOptions | undefined,\n): Resource | LoopedResource<Resource> {\n // `res.value` is the wire body. Valid shapes are:\n // 1. object\n // 2. if-condition(object)\n // 3. for-expression(object)\n // 4. for-expression(if-condition(object))\n // Anything else (bare wrappers, if-outer-for-inner, multi-if, multi-for,\n // nested for-for, if-for-if, etc.) is malformed and rejected here.\n let wireBody: ExpressionNode = res.value;\n let loopWrapper:\n | {\n itemVariable: string;\n indexVariable?: string;\n collection: ExpressionNode;\n }\n | undefined;\n let conditionNode: ExpressionNode | undefined;\n\n if (wireBody.kind === \"for-expression\") {\n loopWrapper = {\n itemVariable: wireBody.itemVariable,\n ...(wireBody.indexVariable !== undefined ? { indexVariable: wireBody.indexVariable } : {}),\n collection: wireBody.collection,\n };\n wireBody = wireBody.body;\n }\n if (wireBody.kind === \"if-condition\") {\n conditionNode = wireBody.condition;\n wireBody = wireBody.body;\n }\n if (wireBody.kind !== \"object\") {\n throw new Error(\n `Invalid wire shape for resource \"${res.bicepIdentifier}\": ` +\n `\\`value\\` must be an \\`object\\`, optionally wrapped in ` +\n `\\`if-condition\\` and/or an outer \\`for-expression\\` (Bicep source ` +\n `order: \\`for\\` outer, \\`if\\` inner). Innermost node after peeling ` +\n `at most one \\`for-expression\\` and one \\`if-condition\\` is ` +\n `\\`${wireBody.kind}\\`.`,\n );\n }\n\n const scopedSymbols = loopWrapper === undefined ? symbols : new Map(symbols);\n const loopAuthoring: LoopAuthoringContext | undefined =\n loopWrapper !== undefined\n ? {\n collection: deserializeExpression(loopWrapper.collection, symbols),\n itemVariable: loopWrapper.itemVariable,\n ...(loopWrapper.indexVariable !== undefined\n ? { indexVariable: loopWrapper.indexVariable }\n : {}),\n ...(res.decorators?.batchSize !== undefined\n ? { batchSize: res.decorators.batchSize }\n : {}),\n }\n : undefined;\n\n if (loopWrapper !== undefined) {\n scopedSymbols.set(\n loopWrapper.itemVariable,\n wrapExpression(symbolicValueExpressionNode(loopWrapper.itemVariable)),\n );\n if (loopWrapper.indexVariable !== undefined) {\n scopedSymbols.set(\n loopWrapper.indexVariable,\n wrapExpression(symbolicValueExpressionNode(loopWrapper.indexVariable)),\n );\n }\n }\n\n const authoring: ResourceAuthoringContext = {\n ...(conditionNode !== undefined\n ? {\n condition: deserializeExpression(conditionNode, scopedSymbols) as Expression<boolean>,\n }\n : {}),\n ...(loopAuthoring !== undefined ? { loop: loopAuthoring } : {}),\n };\n\n return buildResource(\n res,\n objBody(res.value) ?? {},\n defaultScope,\n scopedSymbols,\n options,\n authoring,\n );\n}\n\nfunction buildResource(\n res: ResourceDeclarationNode,\n body: Record<string, ExpressionNode>,\n defaultScope: Stack | Resource,\n symbols: DeserializationSymbolMap,\n options: DeserializeOptions | undefined,\n authoring?: ResourceAuthoringContext,\n): Resource | LoopedResource<Resource> {\n let context: ProvisioningComponent = defaultScope;\n const parentNode = body[\"parent\"];\n const scopeNode = body[\"scope\"];\n if (\n parentNode !== undefined &&\n parentNode.kind !== \"identifier\" &&\n parentNode.kind !== \"array-access\"\n ) {\n throw new Error(`Resource \"${res.bicepIdentifier}\" has an invalid \"parent\" reference.`);\n }\n if (!res.existing && scopeNode !== undefined && scopeNode.kind !== \"identifier\") {\n throw new Error(`Resource \"${res.bicepIdentifier}\" has an invalid \"scope\" reference.`);\n }\n if (parentNode?.kind === \"identifier\") {\n context = requireResourceHandle(parentNode.id, symbols, res.bicepIdentifier, \"parent\");\n } else if (parentNode?.kind === \"array-access\") {\n // `parent: parentSym[<index>]` \u2014 the serializer emitted this because\n // the authoring code created the child under `parents.at(i)` /\n // `parents.current()`. To round-trip the shape, reconstruct the\n // indexed proxy so the base `Resource` ctor stashes\n // `state.parentIndex` from the same index expression. Passing the\n // raw parent here would erase the array-access \u2014 the child would\n // re-serialize as `parent: parentSym` and lose the index.\n const baseNode = parentNode.base;\n if (baseNode.kind === \"identifier\") {\n const rawParent = requireResourceHandle(baseNode.id, symbols, res.bicepIdentifier, \"parent\");\n const indexValue = deserializeExpression(parentNode.index, symbols);\n context = createIndexedResourceProxy(\n rawParent,\n indexValue as number,\n ) as unknown as ProvisioningComponent;\n } else {\n throw new Error(`Resource \"${res.bicepIdentifier}\" has an invalid \"parent\" reference.`);\n }\n } else if (scopeNode?.kind === \"identifier\") {\n const scopeResource = requireResourceHandle(\n scopeNode.id,\n symbols,\n res.bicepIdentifier,\n \"scope\",\n );\n if (isLoopedResource(scopeResource)) {\n throw new Error(\n `Resource \"${res.bicepIdentifier}\" references resource collection ` +\n `\"${scopeNode.id}\" in \"scope\"; expected a single resource.`,\n );\n }\n context = scopeResource;\n }\n\n let existingScope: ScopeExpression | undefined;\n if (res.existing && scopeNode !== undefined && scopeNode.kind !== \"identifier\") {\n const scope = deserializeExpression(scopeNode, symbols);\n if (!isExpression(scope)) {\n throw new Error(\n `Resource \"${res.bicepIdentifier}\" has an invalid \"scope\" value: ` +\n `expected an expression, received \"${scopeNode.kind}\".`,\n );\n }\n existingScope = scope;\n }\n\n // Collect non-reserved properties\n const RESERVED = new Set([\"name\", \"parent\", \"scope\", \"dependsOn\"]);\n const wireProps: Record<string, unknown> = Object.create(null);\n for (const [key, valNode] of Object.entries(body)) {\n if (!RESERVED.has(key)) {\n Object.defineProperty(wireProps, key, {\n value: deserializeExpression(valNode, symbols),\n enumerable: true,\n configurable: true,\n writable: true,\n });\n }\n }\n\n // Raise wire-shape props into JS-shape when a descriptor is\n // registered for this resource type + apiVersion. No-op otherwise \u2014\n // the resource stays in wire shape, which round-trips correctly\n // because re-serialization also skips lowering when no descriptor\n // is attached.\n const nameNode = body[\"name\"];\n const resourceName =\n nameNode === undefined ? \"unknown\" : (deserializeExpression(nameNode, symbols) as string);\n const wireState = { name: resourceName, ...wireProps };\n const descriptor = getShape(res.type, res.apiVersion, wireState, {\n strict: options?.strict ?? false,\n valueKeyedBy: \"arm\",\n });\n const props = descriptor ? raiseState(wireProps, descriptor) : wireProps;\n\n const baseProps: Record<string, unknown> = {\n type: res.type,\n apiVersion: res.apiVersion,\n name: resourceName,\n ...(res.existing ? { existing: true } : {}),\n ...(existingScope !== undefined ? { scope: existingScope } : {}),\n ...props,\n };\n\n const resourceOptions: ResourceOptions = {\n ...(authoring?.condition !== undefined ? { condition: authoring.condition } : {}),\n ...(body.dependsOn !== undefined\n ? {\n dependsOn: deserializeDependsOnExpression(body.dependsOn, symbols, res.bicepIdentifier),\n }\n : {}),\n };\n\n // Look up a registered class for this (type, apiVersion). If one\n // exists, construct it directly so the resulting handle has the right\n // prototype, instance fields, and `instanceof` identity. The class\n // constructor sets `type` and\n // `apiVersion` itself, so strip them before forwarding. Fall back to\n // base `Resource` when no class is registered (unknown type or\n // tree-shaken/missing class module). The `{ name }` lookup state lets\n // the registry pick the right variant for ARM-discriminated types\n // (e.g. `Microsoft.ApiManagement/service/portalsettings` keyed by\n // singleton name). By default the registry does a best-effort match\n // \u2014 an unknown apiVersion falls back to the highest registered\n // version for the same `(type, channel)`. Callers can pass\n // `{ strict: true }` on `deserialize` to require an\n // exact `(type, apiVersion)` match instead.\n const Ctor = resolveResource(res.type, res.apiVersion, wireState, options);\n\n let handle: Resource | LoopedResource<Resource>;\n if (authoring?.loop !== undefined) {\n // Looped path: construct a `LoopedResource` directly. Build a fresh\n // `Loop` from the peeled wire metadata; `Resource.fromLoop` reads\n // `.collection`, `.itemVariable`, `.indexRequested`, `.indexVariable`,\n // and `.batchSize` off it. Passing the itemVariable/indexVariable\n // explicitly keeps the wire name (rather than the \"item\"/\"i\" default)\n // and, since supplying `{ indexVariable }` counts as a request,\n // preserves the index binding on re-serialize.\n const loopInstance = new Loop(authoring.loop.collection as unknown as unknown[], {\n itemVariable: authoring.loop.itemVariable,\n ...(authoring.loop.indexVariable !== undefined\n ? { indexVariable: authoring.loop.indexVariable }\n : {}),\n ...(authoring.loop.batchSize !== undefined ? { batchSize: authoring.loop.batchSize } : {}),\n });\n // Base `Resource` is the fallback when no subclass is registered.\n // `LoopedResource`'s ctor accepts type/apiVersion from `userProps`\n // when the ctor's own statics are undefined (as they are on base\n // `Resource`), so this path threads the wire values through\n // `baseProps`.\n const CtorToUse = Ctor ?? Resource;\n handle = createLoopedResource(\n CtorToUse as new (\n context: ProvisioningComponent,\n props: unknown,\n options?: ResourceOptions,\n ) => Resource,\n loopInstance,\n context,\n baseProps,\n resourceOptions,\n );\n } else if (Ctor === undefined) {\n handle = new Resource(context, baseProps as any, resourceOptions);\n } else {\n const { type: _t, apiVersion: _v, ...classProps } = baseProps;\n handle = new Ctor(context, classProps, resourceOptions);\n }\n\n if (authoring?.condition !== undefined) {\n const state = unwrapResourceHandle(handle) as unknown as Record<string, unknown>;\n state.condition = authoring.condition;\n }\n\n return handle;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction objBody(node: ExpressionNode): Record<string, ExpressionNode> | undefined {\n if (node.kind === \"object\") return node.value;\n if (node.kind === \"if-condition\") return objBody(node.body);\n if (node.kind === \"for-expression\") return objBody(node.body);\n return undefined;\n}\n\nfunction stemName(fileName: string): string {\n return fileName.replace(/\\.bicep$/, \"\");\n}\n"],
5
- "mappings": "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",
4
+ "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Deserializes raw JSON (produced by `@azure/provisioning-core/serialization`) back into\n * live CDK `Stack` data structures.\n */\n\nimport { createOutput, type OutputValue } from \"../../constructs/output.js\";\nimport { createParameter } from \"../../constructs/parameter.js\";\nimport { createVariable, type VariableValue } from \"../../constructs/variable.js\";\nimport {\n createIndexedResourceProxy,\n unwrapResourceHandle,\n} from \"../../constructs/resource/resource-proxy.js\";\nimport { isResource, isLoopedResource } from \"../../constructs/resource/resource-utils.js\";\nimport {\n createLoopedResource,\n Loop,\n type LoopedResource,\n Resource,\n type ResourceDeclaration,\n type ResourceOptions,\n type ScopeExpression,\n} from \"../../constructs/resource/resource.js\";\nimport { Stack } from \"../../constructs/stack.js\";\nimport {\n wrapExpression,\n unwrapExpression,\n isExpression,\n type Expression,\n} from \"../../expression/expressions.js\";\nimport { namingRequiredPolicy } from \"../../naming/naming-policy.js\";\nimport { getShape } from \"../../shape/shape-registry.js\";\nimport {\n identifierExpressionNode,\n symbolicValueExpressionNode,\n} from \"../../expression/ast-nodes.js\";\nimport { resolveResource } from \"../../constructs/resource/resource-registry.js\";\nimport { type ProvisioningComponent } from \"../../constructs/provisioning-component.js\";\n\nimport {\n isPrimitiveTypeName,\n type ExpressionNode,\n type InfraNode,\n type ResourceDeclarationNode,\n type SerializationDocument,\n type VariableDeclarationNode,\n} from \"../ast/index.js\";\n\nimport { restoreExpression, type DeclarationReferenceMap } from \"../ast/expression-restorer.js\";\nimport { convertFromArmObject } from \"../arm-object-conversion.js\";\nimport { collectDependenciesForDeclaration } from \"../ast/declaration-dependencies.js\";\nimport { getScopeFunctionTarget } from \"../../expression/utils.js\";\n\n// ---------------------------------------------------------------------------\n// Public API\n// ---------------------------------------------------------------------------\n\n/**\n * Options for {@link deserialize}.\n *\n * Controls whether unmatched `(type, apiVersion)` pairs fall back\n * to the highest registered version for the type (`strict: false`,\n * the default) or return a base `Resource` (`strict: true`).\n */\nexport interface DeserializeOptions {\n readonly strict?: boolean;\n}\n\n/**\n * Reconstructs stacks from the JSON text of a {@link SerializationDocument},\n * such as `JSON.stringify(serialize(stack))`. Returns one stack per `infras`\n * entry; the input must contain at least one.\n *\n * Import the relevant service packages before restoring to register their\n * resource classes; otherwise unregistered types use base resources.\n * Unsupported module declarations are rejected. A serialize/deserialize/\n * serialize cycle preserves supported deployment semantics and expressions,\n * though the resulting JSON need not be byte-for-byte identical.\n */\nexport function deserialize(raw: string, options?: DeserializeOptions): readonly Stack[] {\n // TODO(#330): .NET ModelReaderWriter still emits `contextual-variable` nodes\n // with `context` naming a zero-argument scope function (e.g. resourceGroup)\n // and `property` naming the accessed member (e.g. location). The generated\n // AST represents this as property-access over function-call instead.\n // Normalize at the JSON boundary, before dependency inspection or expression\n // restoration: AST walkers accept only the generated node kinds. The reviver\n // handles nested expressions too, while the container guards preserve extra\n // `kind` fields on documents, files, and declarations as ordinary metadata.\n // Remove this normalization once .NET emits the composed AST nodes directly.\n const doc = JSON.parse(raw, (_key, value: unknown) => {\n if (\n typeof value !== \"object\" ||\n value === null ||\n !(\"kind\" in value) ||\n value.kind !== \"contextual-variable\" ||\n \"bicepIdentifier\" in value ||\n \"fileName\" in value ||\n \"infras\" in value\n ) {\n return value;\n }\n if (\n !(\"context\" in value) ||\n typeof value.context !== \"string\" ||\n !(\"property\" in value) ||\n typeof value.property !== \"string\"\n ) {\n throw new Error(\n \"Invalid contextual-variable expression: context and property must be strings.\",\n );\n }\n return {\n kind: \"property-access\",\n base: { kind: \"function-call\", target: value.context, args: [] },\n property: value.property,\n nullish: false,\n } satisfies ExpressionNode;\n }) as SerializationDocument;\n if (doc.infras.length === 0) throw new Error(\"Empty SerializationDocument\");\n if (doc.infras.some((infra) => Object.keys(infra.modules ?? {}).length > 0)) {\n throw new Error(\"Module deserialization is not supported.\");\n }\n\n return constructStacks(doc.infras, options);\n}\n\n// ---------------------------------------------------------------------------\n// Type aliases\n// ---------------------------------------------------------------------------\n\ninterface LoopAuthoringContext {\n readonly collection: unknown;\n readonly itemVariable: string;\n readonly indexVariable?: string;\n readonly batchSize?: number;\n}\n\ninterface ResourceAuthoringContext {\n readonly condition?: Expression<boolean>;\n readonly loop?: LoopAuthoringContext;\n}\n\n// ---------------------------------------------------------------------------\n// Construction: InfraNode \u2192 CDK objects\n// ---------------------------------------------------------------------------\n\nfunction constructStacks(\n files: readonly InfraNode[],\n options: DeserializeOptions | undefined,\n): Stack[] {\n return files.map((file) => constructStack(file, options));\n}\n\nfunction constructStack(file: InfraNode, options: DeserializeOptions | undefined): Stack {\n const rootStack = new Stack(stemName(file.fileName), {\n targetScope: file.targetScope ?? \"resourceGroup\",\n namingPolicy: namingRequiredPolicy,\n });\n\n // Map stack-local identifiers to expression handles and resource declarations.\n const symbols: DeclarationReferenceMap = new Map();\n\n processParams(file, rootStack, symbols);\n processDeclarations(file, rootStack, symbols, options);\n processOutputs(file, rootStack, symbols);\n\n return rootStack;\n}\n\n// ---------------------------------------------------------------------------\n// Declaration processing\n// ---------------------------------------------------------------------------\n\nfunction assertSymbolAvailable(symbols: DeclarationReferenceMap, identifier: string): void {\n if (symbols.has(identifier)) {\n throw new Error(`Duplicate declaration identifier \"${identifier}\".`);\n }\n}\n\nfunction processParams(\n file: InfraNode,\n stackHandle: Stack,\n symbols: DeclarationReferenceMap,\n): void {\n for (const [, p] of Object.entries(file.parameters ?? {})) {\n assertSymbolAvailable(symbols, p.bicepIdentifier);\n if (p.valueType.kind !== \"primitive-type\" || !isPrimitiveTypeName(p.valueType.name)) {\n throw new Error(`Parameter \"${p.bicepIdentifier}\" has an unsupported non-primitive type.`);\n }\n const type = p.valueType.name;\n const sym = createParameter(stackHandle, p.bicepIdentifier, type, {\n ...(p.decorators?.description !== undefined ? { description: p.decorators.description } : {}),\n ...(p.decorators?.secure ? { secure: true } : {}),\n ...(p.defaultValue !== undefined\n ? {\n defaultValue: restoreExpression(p.defaultValue, new Map()) as string,\n }\n : {}),\n ...(p.decorators?.allowed?.length\n ? {\n allowed: p.decorators.allowed.map((a) =>\n restoreExpression(a, new Map()),\n ) as unknown as readonly string[],\n }\n : {}),\n ...(p.decorators?.minValue !== undefined ? { minValue: p.decorators.minValue } : {}),\n ...(p.decorators?.maxValue !== undefined ? { maxValue: p.decorators.maxValue } : {}),\n ...(p.decorators?.minLength !== undefined ? { minLength: p.decorators.minLength } : {}),\n ...(p.decorators?.maxLength !== undefined ? { maxLength: p.decorators.maxLength } : {}),\n ...(p.decorators?.metadata !== undefined\n ? {\n metadata: Object.fromEntries(\n Object.entries(p.decorators.metadata).map(([k, v]) => [\n k,\n restoreExpression(v, new Map()),\n ]),\n ) as Record<string, unknown>,\n }\n : {}),\n ...(p.decorators?.discriminator !== undefined\n ? { discriminator: p.decorators.discriminator }\n : {}),\n ...(p.decorators?.sealed ? { sealed: true } : {}),\n });\n symbols.set(p.bicepIdentifier, sym);\n }\n}\n\nfunction processDeclarations(\n file: InfraNode,\n stackHandle: Stack,\n symbols: DeclarationReferenceMap,\n options: DeserializeOptions | undefined,\n): void {\n type IndexedDeclaration =\n | { readonly kind: \"resource\"; readonly node: ResourceDeclarationNode }\n | { readonly kind: \"variable\"; readonly node: VariableDeclarationNode };\n const declarations = new Map<string, IndexedDeclaration>();\n\n function registerDeclaration(declaration: IndexedDeclaration): void {\n const { node } = declaration;\n assertSymbolAvailable(symbols, node.bicepIdentifier);\n const previous = declarations.get(node.bicepIdentifier);\n if (previous !== undefined) {\n const category =\n previous.kind === \"resource\" && declaration.kind === \"resource\"\n ? \"resource\"\n : \"declaration\";\n throw new Error(`Duplicate ${category} identifier \"${node.bicepIdentifier}\".`);\n }\n declarations.set(node.bicepIdentifier, declaration);\n }\n\n for (const node of Object.values(file.variables ?? {})) {\n registerDeclaration({ kind: \"variable\", node });\n }\n for (const node of Object.values(file.resources ?? {})) {\n registerDeclaration({ kind: \"resource\", node });\n }\n\n const pending: {\n declaration: IndexedDeclaration;\n dependencies: Iterator<string>;\n }[] = [];\n const active = new Map<string, number>();\n\n function pushDeclaration(declaration: IndexedDeclaration): void {\n const { node } = declaration;\n const identifiers = collectDependenciesForDeclaration(node);\n active.set(node.bicepIdentifier, pending.length);\n pending.push({ declaration, dependencies: identifiers.values() });\n }\n\n for (const declaration of declarations.values()) {\n if (symbols.has(declaration.node.bicepIdentifier)) continue;\n pushDeclaration(declaration);\n\n while (pending.length > 0) {\n const frame = pending[pending.length - 1]!;\n const dependency = frame.dependencies.next();\n if (!dependency.done) {\n if (symbols.has(dependency.value)) continue;\n const target = declarations.get(dependency.value);\n if (target === undefined) continue;\n const cycleStart = active.get(dependency.value);\n if (cycleStart !== undefined) {\n const cycle = pending.slice(cycleStart).map((entry) => entry.declaration);\n const category = cycle.every((entry) => entry.kind === \"resource\")\n ? \"Resource\"\n : \"Declaration\";\n const path = [...cycle.map((entry) => entry.node.bicepIdentifier), dependency.value]\n .map((identifier) => `\"${identifier}\"`)\n .join(\" -> \");\n throw new Error(`${category} dependency cycle detected: ${path}.`);\n }\n pushDeclaration(target);\n continue;\n }\n\n constructDeclaration(frame.declaration);\n active.delete(frame.declaration.node.bicepIdentifier);\n pending.pop();\n }\n }\n\n function constructDeclaration(declaration: IndexedDeclaration): void {\n if (declaration.kind === \"resource\") {\n symbols.set(\n declaration.node.bicepIdentifier,\n createResource(declaration.node, stackHandle, symbols, options),\n );\n return;\n }\n const { node } = declaration;\n const sym = createVariable(\n stackHandle,\n node.bicepIdentifier,\n restoreExpression(node.value, symbols) as VariableValue,\n {\n ...(node.decorators?.description !== undefined\n ? { description: node.decorators.description }\n : {}),\n ...(node.decorators?.export ? { export: true } : {}),\n },\n );\n symbols.set(node.bicepIdentifier, sym);\n }\n}\n\nfunction processOutputs(\n file: InfraNode,\n stackHandle: Stack,\n symbols: DeclarationReferenceMap,\n): void {\n for (const [, o] of Object.entries(file.outputs ?? {})) {\n if (o.valueType.kind !== \"primitive-type\") {\n throw new Error(\n `Cannot deserialize output \"${o.bicepIdentifier}\" with non-primitive type \"${o.valueType.kind}\".`,\n );\n }\n if (!isPrimitiveTypeName(o.valueType.name)) {\n throw new Error(\n `Cannot deserialize output \"${o.bicepIdentifier}\" with unknown primitive type \"${o.valueType.name}\".`,\n );\n }\n const val = restoreExpression(o.value, symbols) as OutputValue;\n createOutput(stackHandle, o.bicepIdentifier, o.valueType.name, val as OutputValue, {\n ...(o.decorators?.description !== undefined ? { description: o.decorators.description } : {}),\n ...(o.decorators?.secure ? { secure: true } : {}),\n ...(o.decorators?.minValue !== undefined ? { minValue: o.decorators.minValue } : {}),\n ...(o.decorators?.maxValue !== undefined ? { maxValue: o.decorators.maxValue } : {}),\n ...(o.decorators?.minLength !== undefined ? { minLength: o.decorators.minLength } : {}),\n ...(o.decorators?.maxLength !== undefined ? { maxLength: o.decorators.maxLength } : {}),\n ...(o.decorators?.metadata !== undefined\n ? {\n metadata: Object.fromEntries(\n Object.entries(o.decorators.metadata).map(([k, v]) => [\n k,\n restoreExpression(v, symbols),\n ]),\n ) as Record<string, unknown>,\n }\n : {}),\n ...(o.decorators?.discriminator !== undefined\n ? { discriminator: o.decorators.discriminator }\n : {}),\n ...(o.decorators?.sealed ? { sealed: true } : {}),\n });\n }\n}\n\n// ---------------------------------------------------------------------------\n// Resource construction\n// ---------------------------------------------------------------------------\n\nfunction resolveResourceReference(\n targetIdentifier: string,\n symbols: DeclarationReferenceMap,\n resourceIdentifier: string,\n field: \"parent\" | \"scope\" | \"dependsOn\",\n): Resource | LoopedResource<Resource> {\n const handle = symbols.get(targetIdentifier);\n if (handle === undefined) {\n throw new Error(\n `Resource \"${resourceIdentifier}\" references unknown resource ` +\n `\"${targetIdentifier}\" in \"${field}\".`,\n );\n }\n if (!isResource(handle) && !isLoopedResource(handle)) {\n throw new Error(\n `Resource \"${resourceIdentifier}\" references non-resource symbol ` +\n `\"${targetIdentifier}\" in \"${field}\".`,\n );\n }\n return handle;\n}\n\nfunction restoreResourceDependencies(\n node: ExpressionNode,\n symbols: DeclarationReferenceMap,\n resourceIdentifier: string,\n): readonly ResourceDeclaration[] {\n if (node.kind !== \"array\") {\n throw new Error(\n `Resource \"${resourceIdentifier}\" has an invalid \"dependsOn\" value; expected an array.`,\n );\n }\n return node.items.map((item) => {\n if (item.kind !== \"identifier\") {\n throw new Error(\n `Resource \"${resourceIdentifier}\" has an invalid \"dependsOn\" reference; expected a resource identifier.`,\n );\n }\n return resolveResourceReference(item.id, symbols, resourceIdentifier, \"dependsOn\");\n });\n}\n\nfunction createResource(\n res: ResourceDeclarationNode,\n defaultScope: Stack | Resource,\n symbols: DeclarationReferenceMap,\n options: DeserializeOptions | undefined,\n): Resource | LoopedResource<Resource> {\n // `res.value` is the wire body. Valid shapes are:\n // 1. object\n // 2. if-condition(object)\n // 3. for-expression(object)\n // 4. for-expression(if-condition(object))\n // Anything else (bare wrappers, if-outer-for-inner, multi-if, multi-for,\n // nested for-for, if-for-if, etc.) is malformed and rejected here.\n let wireBody: ExpressionNode = res.value;\n let loopWrapper:\n | {\n itemVariable: string;\n indexVariable?: string;\n collection: ExpressionNode;\n }\n | undefined;\n let conditionNode: ExpressionNode | undefined;\n\n if (wireBody.kind === \"for-expression\") {\n loopWrapper = {\n itemVariable: wireBody.itemVariable,\n ...(wireBody.indexVariable !== undefined ? { indexVariable: wireBody.indexVariable } : {}),\n collection: wireBody.collection,\n };\n wireBody = wireBody.body;\n }\n if (wireBody.kind === \"if-condition\") {\n conditionNode = wireBody.condition;\n wireBody = wireBody.body;\n }\n if (wireBody.kind !== \"object\") {\n throw new Error(\n `Invalid wire shape for resource \"${res.bicepIdentifier}\": ` +\n `\\`value\\` must be an \\`object\\`, optionally wrapped in ` +\n `\\`if-condition\\` and/or an outer \\`for-expression\\` (Bicep source ` +\n `order: \\`for\\` outer, \\`if\\` inner). Innermost node after peeling ` +\n `at most one \\`for-expression\\` and one \\`if-condition\\` is ` +\n `\\`${wireBody.kind}\\`.`,\n );\n }\n\n const scopedSymbols = loopWrapper === undefined ? symbols : new Map(symbols);\n const loopAuthoring: LoopAuthoringContext | undefined =\n loopWrapper !== undefined\n ? {\n collection: restoreExpression(loopWrapper.collection, symbols),\n itemVariable: loopWrapper.itemVariable,\n ...(loopWrapper.indexVariable !== undefined\n ? { indexVariable: loopWrapper.indexVariable }\n : {}),\n ...(res.decorators?.batchSize !== undefined\n ? { batchSize: res.decorators.batchSize }\n : {}),\n }\n : undefined;\n\n if (loopWrapper !== undefined) {\n scopedSymbols.set(\n loopWrapper.itemVariable,\n wrapExpression(symbolicValueExpressionNode(loopWrapper.itemVariable)),\n );\n if (loopWrapper.indexVariable !== undefined) {\n scopedSymbols.set(\n loopWrapper.indexVariable,\n wrapExpression(symbolicValueExpressionNode(loopWrapper.indexVariable)),\n );\n }\n }\n\n const authoring: ResourceAuthoringContext = {\n ...(conditionNode !== undefined\n ? {\n condition: restoreExpression(conditionNode, scopedSymbols) as Expression<boolean>,\n }\n : {}),\n ...(loopAuthoring !== undefined ? { loop: loopAuthoring } : {}),\n };\n\n return buildResource(\n res,\n objBody(res.value) ?? {},\n defaultScope,\n scopedSymbols,\n options,\n authoring,\n );\n}\n\nfunction buildResource(\n res: ResourceDeclarationNode,\n body: Record<string, ExpressionNode>,\n defaultScope: Stack | Resource,\n symbols: DeclarationReferenceMap,\n options: DeserializeOptions | undefined,\n authoring?: ResourceAuthoringContext,\n): Resource | LoopedResource<Resource> {\n let context: ProvisioningComponent = defaultScope;\n const parentNode = body[\"parent\"];\n const scopeNode = body[\"scope\"];\n if (\n parentNode !== undefined &&\n parentNode.kind !== \"identifier\" &&\n parentNode.kind !== \"array-access\"\n ) {\n throw new Error(`Resource \"${res.bicepIdentifier}\" has an invalid \"parent\" reference.`);\n }\n let relationship = parentNode;\n let relationshipKind: \"parent\" | \"scope\" = \"parent\";\n let resolvedScope = false;\n if (parentNode === undefined && scopeNode !== undefined) {\n const scopeTargetSymbolName =\n scopeNode.kind === \"identifier\"\n ? scopeNode.id\n : scopeNode.kind === \"array-access\" &&\n scopeNode.base.kind === \"identifier\" &&\n !scopeNode.nullish &&\n !scopeNode.fromEnd\n ? scopeNode.base.id\n : undefined;\n const scopeTarget =\n scopeTargetSymbolName === undefined ? undefined : symbols.get(scopeTargetSymbolName);\n if (scopeNode.kind === \"identifier\" && isLoopedResource(scopeTarget)) {\n throw new Error(\n `Resource \"${res.bicepIdentifier}\" references resource collection ` +\n `\"${scopeNode.id}\" in \"scope\"; expected a single resource.`,\n );\n }\n if (\n (scopeNode.kind === \"identifier\" && isResource(scopeTarget)) ||\n (scopeNode.kind === \"array-access\" &&\n isLoopedResource(scopeTarget) &&\n !scopeNode.nullish &&\n !scopeNode.fromEnd &&\n scopeNode.base.kind === \"identifier\")\n ) {\n relationship = scopeNode;\n relationshipKind = \"scope\";\n resolvedScope = true;\n }\n }\n if (relationship?.kind === \"identifier\") {\n context = resolveResourceReference(\n relationship.id,\n symbols,\n res.bicepIdentifier,\n relationshipKind,\n );\n } else if (relationship?.kind === \"array-access\") {\n // `parent: parentSym[<index>]` \u2014 the serializer emitted this because\n // the authoring code created the child under `parents.at(i)` /\n // `parents.current()`. To round-trip the shape, reconstruct the\n // indexed proxy so the base `Resource` ctor stashes\n // `state.parentIndex` from the same index expression. Passing the\n // raw parent here would erase the array-access \u2014 the child would\n // re-serialize as `parent: parentSym` and lose the index.\n const baseNode = relationship.base;\n if (baseNode.kind === \"identifier\") {\n const rawParent = resolveResourceReference(\n baseNode.id,\n symbols,\n res.bicepIdentifier,\n relationshipKind,\n );\n const indexValue = restoreExpression(relationship.index, symbols);\n context = createIndexedResourceProxy(\n rawParent,\n indexValue as number,\n ) as unknown as ProvisioningComponent;\n } else {\n throw new Error(`Resource \"${res.bicepIdentifier}\" has an invalid \"parent\" reference.`);\n }\n }\n\n let existingScope: ScopeExpression | undefined;\n let preservedScope: ScopeExpression | undefined;\n if (scopeNode !== undefined && !resolvedScope) {\n const value = restoreExpression(scopeNode, symbols);\n const scope = isResource(value) ? wrapExpression(identifierExpressionNode(value)) : value;\n if (!isExpression(scope)) {\n throw new Error(\n `Resource \"${res.bicepIdentifier}\" has an invalid \"scope\" value: ` +\n `expected an expression, received \"${scopeNode.kind}\".`,\n );\n }\n const currentStackScope =\n parentNode === undefined &&\n defaultScope instanceof Stack &&\n scopeNode.kind === \"function-call\" &&\n scopeNode.args.length === 0 &&\n getScopeFunctionTarget(scopeNode) === defaultScope.targetScope;\n if (res.existing && getScopeFunctionTarget(scopeNode) !== undefined) {\n existingScope = scope;\n } else if (!currentStackScope) {\n preservedScope = scope;\n }\n }\n\n // Collect non-reserved properties\n const RESERVED = new Set([\"name\", \"parent\", \"scope\", \"dependsOn\"]);\n const wireProps: Record<string, unknown> = Object.create(null);\n for (const [key, valNode] of Object.entries(body)) {\n if (!RESERVED.has(key)) {\n Object.defineProperty(wireProps, key, {\n value: restoreExpression(valNode, symbols),\n enumerable: true,\n configurable: true,\n writable: true,\n });\n }\n }\n\n // Raise wire-shape props into JS-shape when a descriptor is\n // registered for this resource type + apiVersion. No-op otherwise \u2014\n // the resource stays in wire shape, which round-trips correctly\n // because re-serialization also skips lowering when no descriptor\n // is attached.\n const nameNode = body[\"name\"];\n const resourceName =\n nameNode === undefined ? \"unknown\" : (restoreExpression(nameNode, symbols) as string);\n const wireState = { name: resourceName, ...wireProps };\n const descriptor = getShape(res.type, res.apiVersion, wireState, {\n strict: options?.strict ?? false,\n valueKeyedBy: \"arm\",\n });\n const props = descriptor ? convertFromArmObject(wireProps, descriptor) : wireProps;\n\n const baseProps: Record<string, unknown> = {\n type: res.type,\n apiVersion: res.apiVersion,\n name: resourceName,\n ...(res.existing ? { existing: true } : {}),\n ...(existingScope !== undefined ? { scope: existingScope } : {}),\n ...props,\n };\n\n const resourceOptions: ResourceOptions = {\n ...(authoring?.condition !== undefined ? { condition: authoring.condition } : {}),\n ...(body.dependsOn !== undefined\n ? {\n dependsOn: restoreResourceDependencies(body.dependsOn, symbols, res.bicepIdentifier),\n }\n : {}),\n };\n\n // Look up a registered class for this (type, apiVersion). If one\n // exists, construct it directly so the resulting handle has the right\n // prototype, instance fields, and `instanceof` identity. The class\n // constructor sets `type` and\n // `apiVersion` itself, so strip them before forwarding. Fall back to\n // base `Resource` when no class is registered (unknown type or\n // tree-shaken/missing class module). The `{ name }` lookup state lets\n // the registry pick the right variant for ARM-discriminated types\n // (e.g. `Microsoft.ApiManagement/service/portalsettings` keyed by\n // singleton name). By default the registry does a best-effort match\n // \u2014 an unknown apiVersion falls back to the highest registered\n // version for the same `(type, channel)`. Callers can pass\n // `{ strict: true }` on `deserialize` to require an\n // exact `(type, apiVersion)` match instead.\n const Ctor = resolveResource(res.type, res.apiVersion, wireState, options);\n\n let handle: Resource | LoopedResource<Resource>;\n if (authoring?.loop !== undefined) {\n // Looped path: construct a `LoopedResource` directly. Build a fresh\n // `Loop` from the peeled wire metadata; `Resource.fromLoop` reads\n // `.collection`, `.itemVariable`, `.indexRequested`, `.indexVariable`,\n // and `.batchSize` off it. Passing the itemVariable/indexVariable\n // explicitly keeps the wire name (rather than the \"item\"/\"i\" default)\n // and, since supplying `{ indexVariable }` counts as a request,\n // preserves the index binding on re-serialize.\n const loopInstance = new Loop(authoring.loop.collection as unknown as unknown[], {\n itemVariable: authoring.loop.itemVariable,\n ...(authoring.loop.indexVariable !== undefined\n ? { indexVariable: authoring.loop.indexVariable }\n : {}),\n ...(authoring.loop.batchSize !== undefined ? { batchSize: authoring.loop.batchSize } : {}),\n });\n // Base `Resource` is the fallback when no subclass is registered.\n // `LoopedResource`'s ctor accepts type/apiVersion from `userProps`\n // when the ctor's own statics are undefined (as they are on base\n // `Resource`), so this path threads the wire values through\n // `baseProps`.\n const CtorToUse = Ctor ?? Resource;\n handle = createLoopedResource(\n CtorToUse as new (\n context: ProvisioningComponent,\n props: unknown,\n options?: ResourceOptions,\n ) => Resource,\n loopInstance,\n context,\n baseProps,\n resourceOptions,\n );\n } else if (Ctor === undefined) {\n handle = new Resource(context, baseProps as any, resourceOptions);\n } else {\n const { type: _t, apiVersion: _v, ...classProps } = baseProps;\n handle = new Ctor(context, classProps, resourceOptions);\n }\n\n if (authoring?.condition !== undefined) {\n const state = unwrapResourceHandle(handle) as unknown as Record<string, unknown>;\n state.condition = authoring.condition;\n }\n if (preservedScope !== undefined) {\n Object.defineProperty(unwrapResourceHandle(handle), \"scope\", {\n value: unwrapExpression(preservedScope),\n enumerable: true,\n configurable: true,\n writable: true,\n });\n }\n\n return handle;\n}\n\n// ---------------------------------------------------------------------------\n// Helpers\n// ---------------------------------------------------------------------------\n\nfunction objBody(node: ExpressionNode): Record<string, ExpressionNode> | undefined {\n if (node.kind === \"object\") return node.value;\n if (node.kind === \"if-condition\") return objBody(node.body);\n if (node.kind === \"for-expression\") return objBody(node.body);\n return undefined;\n}\n\nfunction stemName(fileName: string): string {\n return fileName.replace(/\\.bicep$/, \"\");\n}\n"],
5
+ "mappings": "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",
6
6
  "names": []
7
7
  }
@@ -1,5 +1,5 @@
1
1
  import type { Stack } from "../../constructs/stack.js";
2
- import type { SerializationDocument } from "../contract/index.js";
2
+ import type { SerializationDocument } from "../ast/index.js";
3
3
  /**
4
4
  * Serializes a stack or a nonempty array of stacks into a JSON-compatible
5
5
  * {@link SerializationDocument} with one `infras` entry per stack.
@@ -1 +1 @@
1
- {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../../../src/serialization/json/serialize.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAgBvD,OAAO,KAAK,EAQV,qBAAqB,EAEtB,MAAM,sBAAsB,CAAC;AA4b9B;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,KAAK,EAAE,GAAG,qBAAqB,CAahF"}
1
+ {"version":3,"file":"serialize.d.ts","sourceRoot":"","sources":["../../../../src/serialization/json/serialize.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AAGvD,OAAO,KAAK,EAAa,qBAAqB,EAAE,MAAM,iBAAiB,CAAC;AAgBxE;;;;;;;GAOG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,KAAK,EAAE,GAAG,qBAAqB,CAahF"}
@@ -1,8 +1,6 @@
1
- var __create = Object.create;
2
1
  var __defProp = Object.defineProperty;
3
2
  var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
4
3
  var __getOwnPropNames = Object.getOwnPropertyNames;
5
- var __getProtoOf = Object.getPrototypeOf;
6
4
  var __hasOwnProp = Object.prototype.hasOwnProperty;
7
5
  var __export = (target, all) => {
8
6
  for (var name in all)
@@ -16,320 +14,20 @@ var __copyProps = (to, from, except, desc) => {
16
14
  }
17
15
  return to;
18
16
  };
19
- var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
20
- // If the importer is in node compatibility mode or this is not an ESM
21
- // file that has been converted to a CommonJS file using a Babel-
22
- // compatible transform (i.e. "__esModule" has not been set), then set
23
- // "default" to the CommonJS "module.exports" for node compatibility.
24
- isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
25
- mod
26
- ));
27
17
  var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
28
18
  var serialize_exports = {};
29
19
  __export(serialize_exports, {
30
20
  serialize: () => serialize
31
21
  });
32
22
  module.exports = __toCommonJS(serialize_exports);
33
- var import_pluralize_config = __toESM(require("./pluralize-config.js"));
34
- var import_resource_group = require("../../constructs/built-in-resources/resource-group.js");
35
- var import_resource_proxy = require("../../constructs/resource/resource-proxy.js");
36
- var import_util = require("../../util.js");
37
- var import_shape_registry = require("../../shape/shape-registry.js");
38
- var import_expressions = require("../../expression/expressions.js");
39
- var import_ast_nodes = require("../../expression/ast-nodes.js");
40
- var import_resource_utils = require("../../constructs/resource/resource-utils.js");
41
- var import_util2 = require("./util.js");
42
- var import_lower = require("./lower.js");
43
- var import_expression = require("./expression.js");
44
- const RESOURCE_RESERVED_KEYS = /* @__PURE__ */ new Set([
45
- "apiVersion",
46
- "existing",
47
- "id",
48
- "name",
49
- "scope",
50
- "type",
51
- "condition",
52
- "dependsOn",
53
- import_resource_proxy.STATE_PARENT_INDEX
54
- ]);
55
- function hasNestedResourceHandle(value) {
56
- if ((0, import_expressions.isExpression)(value) || (0, import_ast_nodes.isExpressionNode)(value)) {
57
- return false;
58
- }
59
- if ((0, import_resource_utils.isResource)(value)) {
60
- return true;
61
- }
62
- if (Array.isArray(value)) {
63
- return value.some((item) => hasNestedResourceHandle(item));
64
- }
65
- if (typeof value === "object" && value !== null) {
66
- return Object.values(value).some((item) => hasNestedResourceHandle(item));
67
- }
68
- return false;
69
- }
70
- function createSymbolMap(resources, stack) {
71
- const symbolMap = /* @__PURE__ */ new Map();
72
- const counts = /* @__PURE__ */ new Map();
73
- const usedNames = /* @__PURE__ */ new Set();
74
- function allocateName(stem) {
75
- let count = counts.get(stem) ?? 0;
76
- let identifier;
77
- do {
78
- count++;
79
- identifier = count === 1 ? stem : `${stem}${count}`;
80
- } while (usedNames.has(identifier));
81
- counts.set(stem, count);
82
- usedNames.add(identifier);
83
- return identifier;
84
- }
85
- for (const parameter of stack.parameters.listMetadata()) {
86
- const identifier = allocateName(parameter.name);
87
- symbolMap.set(parameter, identifier);
88
- symbolMap.set((0, import_expressions.unwrapExpression)(stack.parameters.get(parameter.name)), identifier);
89
- }
90
- for (const variable of stack.variables.listMetadata()) {
91
- const identifier = allocateName(variable.name);
92
- symbolMap.set(variable, identifier);
93
- symbolMap.set((0, import_expressions.unwrapExpression)(stack.variables.get(variable.name)), identifier);
94
- }
95
- for (const resource of resources) {
96
- const typeName = resource.type.split("/").at(-1) ?? "resource";
97
- const stem = (0, import_util2.sanitizeIdentifier)(import_pluralize_config.default.singular(typeName));
98
- symbolMap.set(resource, allocateName(stem));
99
- }
100
- return symbolMap;
101
- }
102
- function getArmParent(resource) {
103
- const p = resource.parent;
104
- if (p === void 0 || !(0, import_resource_utils.isResourceDeclaration)(p)) {
105
- return void 0;
106
- }
107
- if (p.type === import_resource_group.ResourceGroup.resourceType) return void 0;
108
- return p;
109
- }
110
- function getResourceGroupAncestor(resource) {
111
- let current = resource.parent;
112
- while (current !== void 0) {
113
- if ((0, import_resource_utils.isResourceDeclaration)(current) && current.type === import_resource_group.ResourceGroup.resourceType) {
114
- return current;
115
- }
116
- current = current.parent;
117
- }
118
- return void 0;
119
- }
120
- function collectAllResources(root) {
121
- const result = [];
122
- root.visit((node) => {
123
- if ((0, import_resource_utils.isResourceDeclaration)(node)) {
124
- result.push(node.self);
125
- }
126
- });
127
- return result;
128
- }
129
- function serializeResourceProperties(resource, symbolMap) {
130
- const rawResource = (0, import_resource_proxy.unwrapResourceHandle)(resource);
131
- const properties = {
132
- name: (0, import_expression.serializeExpression)(rawResource.name, symbolMap)
133
- };
134
- const armParent = getArmParent(resource);
135
- if (armParent !== void 0) {
136
- const parentId = symbolMap.get(armParent);
137
- if (parentId === void 0) {
138
- throw new Error(`Missing parent symbol for resource type ${rawResource.type}.`);
139
- }
140
- const parentNode = { kind: "identifier", id: parentId };
141
- const parentIndex = rawResource[import_resource_proxy.STATE_PARENT_INDEX];
142
- if (parentIndex !== void 0) {
143
- properties.parent = {
144
- kind: "array-access",
145
- base: parentNode,
146
- index: (0, import_expression.serializeExpression)(parentIndex, symbolMap),
147
- nullish: false,
148
- fromEnd: false
149
- };
150
- } else {
151
- properties.parent = parentNode;
152
- }
153
- }
154
- const scopeValue = rawResource.scope;
155
- if (scopeValue !== void 0) {
156
- properties.scope = (0, import_expression.serializeExpression)(scopeValue, symbolMap);
157
- } else if (armParent === void 0) {
158
- const rgAncestor = getResourceGroupAncestor(resource);
159
- if (rgAncestor !== void 0) {
160
- const groupId = symbolMap.get(rgAncestor);
161
- if (groupId === void 0) {
162
- throw new Error("Resource group not found in symbol map.");
163
- }
164
- properties.scope = {
165
- kind: "identifier",
166
- id: groupId
167
- };
168
- }
169
- }
170
- const dependsOn = rawResource["dependsOn"];
171
- if (dependsOn !== void 0) {
172
- properties.dependsOn = {
173
- kind: "array",
174
- items: dependsOn.map((dependency) => {
175
- const identifier = symbolMap.get(dependency);
176
- if (identifier === void 0) {
177
- throw new Error(
178
- "Dependency not found in symbol map. Ensure it belongs to the same stack."
179
- );
180
- }
181
- return { kind: "identifier", id: identifier };
182
- })
183
- };
184
- }
185
- const descriptor = typeof rawResource.type === "string" && typeof rawResource.apiVersion === "string" ? (0, import_shape_registry.getShape)(
186
- rawResource.type,
187
- rawResource.apiVersion,
188
- rawResource
189
- ) : void 0;
190
- const userProps = {};
191
- for (const [key, value] of Object.entries(rawResource)) {
192
- if (rawResource.existing) continue;
193
- if (value === void 0 || RESOURCE_RESERVED_KEYS.has(key) || hasNestedResourceHandle(value)) {
194
- continue;
195
- }
196
- userProps[key] = value;
197
- }
198
- const loweredUserProps = descriptor ? (0, import_lower.lowerState)(userProps, descriptor) : userProps;
199
- for (const key of Object.keys(loweredUserProps).sort()) {
200
- properties[key] = (0, import_expression.serializeExpression)(loweredUserProps[key], symbolMap);
201
- }
202
- return properties;
203
- }
204
- function serializeResource(resource, symbolMap) {
205
- const resourceId = symbolMap.get(resource);
206
- if (resourceId === void 0) {
207
- throw new Error(`Missing synthesized symbol for resource type ${resource.type}.`);
208
- }
209
- const properties = serializeResourceProperties(resource, symbolMap);
210
- const rawResource = (0, import_resource_proxy.unwrapResourceHandle)(resource);
211
- const condition = rawResource["condition"] !== void 0 ? (0, import_expression.serializeExpression)(rawResource["condition"], symbolMap) : void 0;
212
- const loopCtx = (0, import_resource_utils.isLoopedResource)(resource) ? resource.loop : void 0;
213
- const batchSize = loopCtx?.batchSize;
214
- const decorators = batchSize !== void 0 ? { batchSize } : void 0;
215
- let wireValue = { kind: "object", value: properties };
216
- if (condition !== void 0) {
217
- wireValue = { kind: "if-condition", condition, body: wireValue };
218
- }
219
- if (loopCtx !== void 0) {
220
- wireValue = {
221
- kind: "for-expression",
222
- itemVariable: loopCtx.itemVariable,
223
- ...loopCtx.indexVariable !== void 0 ? { indexVariable: loopCtx.indexVariable } : {},
224
- collection: (0, import_expression.serializeExpression)(loopCtx.collection, symbolMap),
225
- body: wireValue
226
- };
227
- }
228
- const node = {
229
- bicepIdentifier: resourceId,
230
- type: resource.type,
231
- apiVersion: resource.apiVersion,
232
- existing: resource.existing ?? false,
233
- value: wireValue,
234
- ...decorators !== void 0 ? { decorators } : {}
235
- };
236
- return [resourceId, node];
237
- }
238
- function buildDecorators(decl, symbolMap) {
239
- const d = {};
240
- if (decl.description !== void 0) d.description = decl.description;
241
- if ("secure" in decl && decl.secure) d.secure = true;
242
- if ("minValue" in decl && decl.minValue !== void 0) {
243
- d.minValue = decl.minValue;
244
- }
245
- if ("maxValue" in decl && decl.maxValue !== void 0) {
246
- d.maxValue = decl.maxValue;
247
- }
248
- if ("minLength" in decl && decl.minLength !== void 0) {
249
- d.minLength = decl.minLength;
250
- }
251
- if ("maxLength" in decl && decl.maxLength !== void 0) {
252
- d.maxLength = decl.maxLength;
253
- }
254
- if ("metadata" in decl && decl.metadata !== void 0) {
255
- d.metadata = (0, import_expression.serializeDefinedObjectEntries)(
256
- decl.metadata,
257
- symbolMap
258
- );
259
- }
260
- if ("allowed" in decl && decl.allowed !== void 0) {
261
- d.allowed = decl.allowed.map((v) => (0, import_expression.serializeExpression)(v, symbolMap));
262
- }
263
- if ("discriminator" in decl && decl.discriminator !== void 0) {
264
- d.discriminator = decl.discriminator;
265
- }
266
- if ("sealed" in decl && decl.sealed) d.sealed = true;
267
- if ("export" in decl && decl.export) d.export = true;
268
- return Object.keys(d).length > 0 ? d : void 0;
269
- }
270
- function serializeParameters(stack, symbolMap) {
271
- if (stack.parameters.size === 0) return void 0;
272
- return Object.fromEntries(
273
- stack.parameters.listMetadata().map((p) => {
274
- const identifier = symbolMap.get(p);
275
- const node = (0, import_util.definedProps)({
276
- bicepIdentifier: identifier,
277
- valueType: { kind: "primitive-type", name: p.type },
278
- defaultValue: p.defaultValue !== void 0 ? (0, import_expression.serializeExpression)(p.defaultValue, symbolMap) : void 0,
279
- decorators: buildDecorators(p, symbolMap)
280
- });
281
- return [identifier, node];
282
- })
283
- );
284
- }
285
- function serializeVariables(stack, symbolMap) {
286
- if (stack.variables.size === 0) return void 0;
287
- return Object.fromEntries(
288
- stack.variables.listMetadata().map((v) => {
289
- const identifier = symbolMap.get(v);
290
- const node = (0, import_util.definedProps)({
291
- bicepIdentifier: identifier,
292
- value: (0, import_expression.serializeExpression)(v.value, symbolMap),
293
- decorators: buildDecorators(v, symbolMap)
294
- });
295
- return [identifier, node];
296
- })
297
- );
298
- }
299
- function serializeOutputs(stack, symbolMap) {
300
- if (stack.outputs.size === 0) return void 0;
301
- return Object.fromEntries(
302
- stack.outputs.list().map((o) => {
303
- let value;
304
- if ((0, import_resource_utils.isResource)(o.value)) {
305
- const symbol = symbolMap.get(o.value);
306
- if (symbol === void 0) {
307
- throw new Error(`Resource not found in symbol map. Ensure it belongs to the same stack.`);
308
- }
309
- value = { kind: "identifier", id: symbol };
310
- } else {
311
- value = (0, import_expression.serializeExpression)(o.value, symbolMap);
312
- }
313
- const node = (0, import_util.definedProps)({
314
- bicepIdentifier: o.name,
315
- valueType: { kind: "primitive-type", name: o.type },
316
- value,
317
- decorators: buildDecorators(o, symbolMap)
318
- });
319
- return [o.name, node];
320
- })
321
- );
322
- }
23
+ var import_resource_query = require("../../constructs/resource/resource-query.js");
24
+ var import_declaration_builder = require("../ast/declaration-builder.js");
25
+ var import_symbol_map = require("../symbol-map.js");
323
26
  function serializeFile(stack, resources, symbolMap) {
324
27
  return {
325
28
  ...stack.targetScope !== "resourceGroup" ? { targetScope: stack.targetScope } : {},
326
29
  fileName: `${stack.name}.bicep`,
327
- ...(0, import_util.definedProps)({
328
- parameters: serializeParameters(stack, symbolMap),
329
- variables: serializeVariables(stack, symbolMap),
330
- resources: resources.length === 0 ? void 0 : Object.fromEntries(resources.map((resource) => serializeResource(resource, symbolMap))),
331
- outputs: serializeOutputs(stack, symbolMap)
332
- })
30
+ ...(0, import_declaration_builder.buildStackDeclarations)(stack, resources, symbolMap)
333
31
  };
334
32
  }
335
33
  function serialize(input) {
@@ -339,8 +37,8 @@ function serialize(input) {
339
37
  }
340
38
  return {
341
39
  infras: stacks.map((stack) => {
342
- const resources = collectAllResources(stack);
343
- const symbolMap = createSymbolMap(resources, stack);
40
+ const resources = (0, import_resource_query.collectResourceDeclarations)(stack);
41
+ const symbolMap = (0, import_symbol_map.createSymbolMap)(resources, stack);
344
42
  return serializeFile(stack, resources, symbolMap);
345
43
  })
346
44
  };
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/serialization/json/serialize.ts"],
4
- "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport pluralizeLib from \"./pluralize-config.js\";\nimport type { ProvisioningComponent } from \"../../constructs/provisioning-component.js\";\nimport type { ParameterMetadata } from \"../../constructs/parameter.js\";\nimport type { VariableMetadata } from \"../../constructs/variable.js\";\nimport type { OutputMetadata } from \"../../constructs/output.js\";\nimport type { Stack } from \"../../constructs/stack.js\";\nimport type { Resource, ResourceDeclaration } from \"../../constructs/resource/resource.js\";\nimport { ResourceGroup } from \"../../constructs/built-in-resources/resource-group.js\";\nimport {\n STATE_PARENT_INDEX,\n unwrapResourceHandle,\n} from \"../../constructs/resource/resource-proxy.js\";\nimport { definedProps } from \"../../util.js\";\nimport { getShape } from \"../../shape/shape-registry.js\";\nimport { isExpression, unwrapExpression } from \"../../expression/expressions.js\";\nimport { isExpressionNode } from \"../../expression/ast-nodes.js\";\nimport {\n isResource,\n isResourceDeclaration,\n isLoopedResource,\n} from \"../../constructs/resource/resource-utils.js\";\nimport type {\n DeclarableBodyNode,\n DecoratorsNode,\n ExpressionNode,\n InfraNode,\n OutputDeclarationNode,\n ParameterDeclarationNode,\n ResourceDeclarationNode,\n SerializationDocument,\n VariableDeclarationNode,\n} from \"../contract/index.js\";\nimport { sanitizeIdentifier } from \"./util.js\";\nimport { lowerState } from \"./lower.js\";\nimport {\n serializeDefinedObjectEntries,\n serializeExpression,\n type SerializableValue,\n type SerializationSymbolMap,\n} from \"./expression.js\";\n\nconst RESOURCE_RESERVED_KEYS = new Set<string>([\n \"apiVersion\",\n \"existing\",\n \"id\",\n \"name\",\n \"scope\",\n \"type\",\n \"condition\",\n \"dependsOn\",\n STATE_PARENT_INDEX,\n]);\n\nfunction hasNestedResourceHandle(value: unknown): boolean {\n if (isExpression(value) || isExpressionNode(value)) {\n return false;\n }\n\n if (isResource(value)) {\n return true;\n }\n\n if (Array.isArray(value)) {\n return value.some((item) => hasNestedResourceHandle(item));\n }\n\n if (typeof value === \"object\" && value !== null) {\n return Object.values(value).some((item) => hasNestedResourceHandle(item));\n }\n\n return false;\n}\n\nfunction createSymbolMap(\n resources: readonly ResourceDeclaration[],\n stack: Stack,\n): SerializationSymbolMap {\n const symbolMap: SerializationSymbolMap = new Map();\n const counts = new Map<string, number>();\n const usedNames = new Set<string>();\n\n function allocateName(stem: string): string {\n let count = counts.get(stem) ?? 0;\n let identifier: string;\n do {\n count++;\n identifier = count === 1 ? stem : `${stem}${count}`;\n } while (usedNames.has(identifier));\n counts.set(stem, count);\n usedNames.add(identifier);\n return identifier;\n }\n\n for (const parameter of stack.parameters.listMetadata()) {\n const identifier = allocateName(parameter.name);\n symbolMap.set(parameter, identifier);\n symbolMap.set(unwrapExpression(stack.parameters.get(parameter.name)!), identifier);\n }\n for (const variable of stack.variables.listMetadata()) {\n const identifier = allocateName(variable.name);\n symbolMap.set(variable, identifier);\n symbolMap.set(unwrapExpression(stack.variables.get(variable.name)!), identifier);\n }\n for (const resource of resources) {\n const typeName = resource.type.split(\"/\").at(-1) ?? \"resource\";\n const stem = sanitizeIdentifier(pluralizeLib.singular(typeName));\n symbolMap.set(resource, allocateName(stem));\n }\n\n // Outputs have a separate Bicep namespace and are not same-stack expression\n // targets, so they keep their authored names outside this symbol map.\n return symbolMap;\n}\n\n/**\n * Returns the nearest Resource ancestor whose type/scope makes it a Bicep\n * `parent:` target. This includes both:\n *\n * - True ARM nested children (e.g. vault \u2192 secret), where the renderer\n * emits `parent: vault`\n * - Extension resources (e.g. storage \u2192 diagnosticSetting), where the\n * renderer downgrades to `scope: storage`\n *\n * The renderer (`render.ts`) decides between `parent:` and `scope:` by\n * checking ARM type nesting. The file-layout uses this relationship to\n * co-locate related resources in the same Bicep file.\n *\n * Excludes deployment-scope boundaries like `ResourceGroup` (it's a parent\n * ProvisioningComponent but not an ARM nesting/extension target \u2014 child resources are\n * deployed *into* the resource group, expressed as `scope: rg` only when\n * the deployment crosses the RG boundary).\n */\nfunction getArmParent(resource: ResourceDeclaration): ResourceDeclaration | undefined {\n const p = resource.parent;\n if (p === undefined || !isResourceDeclaration(p)) {\n return undefined;\n }\n // Exclude ResourceGroup (deployment scope boundary, not an ARM parent).\n if (p.type === ResourceGroup.resourceType) return undefined;\n return p;\n}\n\n/**\n * Walk a resource's ProvisioningComponent-tree ancestor chain to find the nearest\n * `ResourceGroup` component, if any. Used by the serializer to emit a\n * synthetic `scope: rgSymbol` field on regular resources whose deployment\n * scope is a `ResourceGroup` component rather than the stack's `targetScope`.\n *\n * The file-layout pass consumes this signal to split the resource into a\n * child Bicep module scoped to the ResourceGroup; the per-resource `scope:`\n * is stripped at that point because inside the child module the resource is\n * implicitly at the right scope.\n *\n * Returns `undefined` when the resource has no ResourceGroup ancestor (i.e.\n * the stack itself is the nearest scope-providing component).\n */\nfunction getResourceGroupAncestor(resource: ResourceDeclaration): ResourceGroup | undefined {\n let current = resource.parent;\n while (current !== undefined) {\n if (isResourceDeclaration(current) && current.type === ResourceGroup.resourceType) {\n return current as ResourceGroup;\n }\n current = current.parent;\n }\n return undefined;\n}\n\nfunction collectAllResources(root: ProvisioningComponent): ResourceDeclaration[] {\n const result: ResourceDeclaration[] = [];\n root.visit((node) => {\n if (isResourceDeclaration(node)) {\n result.push(node.self as ResourceDeclaration);\n }\n });\n return result;\n}\n\nfunction serializeResourceProperties(\n resource: ResourceDeclaration,\n symbolMap: SerializationSymbolMap,\n): Record<string, ExpressionNode> {\n const rawResource = unwrapResourceHandle(resource as unknown as Resource);\n const properties: Record<string, ExpressionNode> = {\n name: serializeExpression(rawResource.name, symbolMap),\n };\n\n const armParent = getArmParent(resource);\n if (armParent !== undefined) {\n const parentId = symbolMap.get(armParent);\n\n if (parentId === undefined) {\n throw new Error(`Missing parent symbol for resource type ${rawResource.type}.`);\n }\n\n const parentNode: ExpressionNode = { kind: \"identifier\", id: parentId };\n // Explicit parent index recorded by `Resource`'s constructor when a\n // child is created with `parent.at(i)` / `parent.current()` as its\n // context. When the child is created under a looped parent without an\n // explicit index (only reachable by unwrapping the raw handle out of a\n // `LoopedResource` \u2014 not part of the user-facing API), we emit\n // `parent: parentSym` unchanged; Bicep rejects the resulting\n // `parent: parents` (an array) at validation, producing a loud failure\n // instead of a silently-guessed index variable.\n const parentIndex = (rawResource as unknown as Record<string, unknown>)[STATE_PARENT_INDEX];\n\n if (parentIndex !== undefined) {\n properties.parent = {\n kind: \"array-access\",\n base: parentNode,\n index: serializeExpression(parentIndex as SerializableValue, symbolMap),\n nullish: false,\n fromEnd: false,\n };\n } else {\n properties.parent = parentNode;\n }\n }\n\n // Existing resources may carry an explicit scope expression for cross-RG\n // / cross-sub / cross-MG / cross-tenant lookups. Read from state directly;\n // non-existing resources never have `scope` on state.\n const scopeValue = (rawResource as unknown as Record<string, unknown>).scope;\n if (scopeValue !== undefined) {\n properties.scope = serializeExpression(scopeValue as SerializableValue, symbolMap);\n } else if (armParent === undefined) {\n const rgAncestor = getResourceGroupAncestor(resource);\n if (rgAncestor !== undefined) {\n const groupId = symbolMap.get(rgAncestor);\n if (groupId === undefined) {\n throw new Error(\"Resource group not found in symbol map.\");\n }\n properties.scope = {\n kind: \"identifier\",\n id: groupId,\n };\n }\n }\n\n const dependsOn = (rawResource as unknown as Record<string, unknown>)[\"dependsOn\"] as\n readonly ResourceDeclaration[] | undefined;\n if (dependsOn !== undefined) {\n properties.dependsOn = {\n kind: \"array\",\n items: dependsOn.map((dependency) => {\n const identifier = symbolMap.get(dependency);\n if (identifier === undefined) {\n throw new Error(\n \"Dependency not found in symbol map. Ensure it belongs to the same stack.\",\n );\n }\n return { kind: \"identifier\", id: identifier };\n }),\n };\n }\n\n // Build the per-resource custom property bag first, applying ARM-\n // shape lowering (rename/flatten/encode) when a shape is\n // registered for `(type, apiVersion)`. The registry resolves\n // discriminated variants from the instance state. No-op when no\n // shape is registered for this resource type.\n const descriptor =\n typeof rawResource.type === \"string\" && typeof rawResource.apiVersion === \"string\"\n ? getShape(\n rawResource.type,\n rawResource.apiVersion,\n rawResource as unknown as Record<string, unknown>,\n )\n : undefined;\n\n const userProps: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(rawResource)) {\n if (rawResource.existing) continue;\n if (value === undefined || RESOURCE_RESERVED_KEYS.has(key) || hasNestedResourceHandle(value)) {\n continue;\n }\n userProps[key] = value;\n }\n\n const loweredUserProps = descriptor ? lowerState(userProps, descriptor) : userProps;\n\n for (const key of Object.keys(loweredUserProps).sort()) {\n properties[key] = serializeExpression(loweredUserProps[key] as SerializableValue, symbolMap);\n }\n\n return properties;\n}\n\nfunction serializeResource(\n resource: ResourceDeclaration,\n symbolMap: SerializationSymbolMap,\n): [string, ResourceDeclarationNode] {\n const resourceId = symbolMap.get(resource);\n\n if (resourceId === undefined) {\n throw new Error(`Missing synthesized symbol for resource type ${resource.type}.`);\n }\n\n const properties = serializeResourceProperties(resource, symbolMap);\n const rawResource = unwrapResourceHandle(resource as unknown as Resource) as unknown as Record<\n string,\n unknown\n >;\n\n const condition =\n rawResource[\"condition\"] !== undefined\n ? serializeExpression(rawResource[\"condition\"] as SerializableValue, symbolMap)\n : undefined;\n\n // Loop metadata lives on `LoopedResource.loop` \u2014 a public field on the\n // wrapper subclass. Scalar `Resource` instances don't have one.\n const loopCtx = isLoopedResource(resource) ? resource.loop : undefined;\n\n // Build decorators for the resource (currently only batchSize from forEach)\n const batchSize = loopCtx?.batchSize;\n const decorators = batchSize !== undefined ? { batchSize } : undefined;\n\n // Wrap `value` in `if-condition` / `for-expression` when the resource is\n // guarded / looped. Bicep source order is `for` outer, `if` inner \u2014\n // `[for item in coll: if (cond) { ... }]` \u2014 so wrap if-condition first,\n // then for-expression around it.\n let wireValue: DeclarableBodyNode = { kind: \"object\", value: properties };\n if (condition !== undefined) {\n wireValue = { kind: \"if-condition\", condition, body: wireValue };\n }\n if (loopCtx !== undefined) {\n wireValue = {\n kind: \"for-expression\",\n itemVariable: loopCtx.itemVariable,\n ...(loopCtx.indexVariable !== undefined ? { indexVariable: loopCtx.indexVariable } : {}),\n collection: serializeExpression(loopCtx.collection as SerializableValue, symbolMap),\n body: wireValue,\n };\n }\n\n const node: ResourceDeclarationNode = {\n bicepIdentifier: resourceId,\n type: resource.type,\n apiVersion: resource.apiVersion,\n existing: resource.existing ?? false,\n value: wireValue,\n ...(decorators !== undefined ? { decorators } : {}),\n };\n\n return [resourceId, node];\n}\n\nfunction buildDecorators(\n decl: ParameterMetadata | VariableMetadata | OutputMetadata,\n symbolMap: SerializationSymbolMap,\n): DecoratorsNode | undefined {\n const d: Record<string, unknown> = {};\n\n if (decl.description !== undefined) d.description = decl.description;\n if (\"secure\" in decl && decl.secure) d.secure = true;\n if (\"minValue\" in decl && decl.minValue !== undefined) {\n d.minValue = decl.minValue;\n }\n if (\"maxValue\" in decl && decl.maxValue !== undefined) {\n d.maxValue = decl.maxValue;\n }\n if (\"minLength\" in decl && decl.minLength !== undefined) {\n d.minLength = decl.minLength;\n }\n if (\"maxLength\" in decl && decl.maxLength !== undefined) {\n d.maxLength = decl.maxLength;\n }\n if (\"metadata\" in decl && decl.metadata !== undefined) {\n d.metadata = serializeDefinedObjectEntries(\n decl.metadata as {\n readonly [key: string]: SerializableValue | undefined;\n },\n symbolMap,\n );\n }\n if (\"allowed\" in decl && decl.allowed !== undefined) {\n d.allowed = decl.allowed.map((v) => serializeExpression(v as SerializableValue, symbolMap));\n }\n if (\"discriminator\" in decl && decl.discriminator !== undefined) {\n d.discriminator = decl.discriminator;\n }\n if (\"sealed\" in decl && decl.sealed) d.sealed = true;\n if (\"export\" in decl && decl.export) d.export = true;\n\n return Object.keys(d).length > 0 ? (d as DecoratorsNode) : undefined;\n}\n\nfunction serializeParameters(\n stack: Stack,\n symbolMap: SerializationSymbolMap,\n): Record<string, ParameterDeclarationNode> | undefined {\n if (stack.parameters.size === 0) return undefined;\n return Object.fromEntries(\n stack.parameters.listMetadata().map((p) => {\n const identifier = symbolMap.get(p)!;\n const node: ParameterDeclarationNode = definedProps({\n bicepIdentifier: identifier,\n valueType: { kind: \"primitive-type\" as const, name: p.type },\n defaultValue:\n p.defaultValue !== undefined\n ? serializeExpression(p.defaultValue as SerializableValue, symbolMap)\n : undefined,\n decorators: buildDecorators(p, symbolMap),\n });\n return [identifier, node];\n }),\n );\n}\n\nfunction serializeVariables(\n stack: Stack,\n symbolMap: SerializationSymbolMap,\n): Record<string, VariableDeclarationNode> | undefined {\n if (stack.variables.size === 0) return undefined;\n return Object.fromEntries(\n stack.variables.listMetadata().map((v) => {\n const identifier = symbolMap.get(v)!;\n const node: VariableDeclarationNode = definedProps({\n bicepIdentifier: identifier,\n value: serializeExpression(v.value as SerializableValue, symbolMap),\n decorators: buildDecorators(v, symbolMap),\n });\n return [identifier, node];\n }),\n );\n}\n\nfunction serializeOutputs(\n stack: Stack,\n symbolMap: SerializationSymbolMap,\n): Record<string, OutputDeclarationNode> | undefined {\n if (stack.outputs.size === 0) return undefined;\n return Object.fromEntries(\n stack.outputs.list().map((o) => {\n let value: ExpressionNode;\n if (isResource(o.value)) {\n const symbol = symbolMap.get(o.value);\n if (symbol === undefined) {\n throw new Error(`Resource not found in symbol map. Ensure it belongs to the same stack.`);\n }\n value = { kind: \"identifier\", id: symbol };\n } else {\n value = serializeExpression(o.value as SerializableValue, symbolMap);\n }\n\n const node: OutputDeclarationNode = definedProps({\n bicepIdentifier: o.name,\n valueType: { kind: \"primitive-type\" as const, name: o.type },\n value,\n decorators: buildDecorators(o, symbolMap),\n });\n return [o.name, node];\n }),\n );\n}\n\nfunction serializeFile(\n stack: Stack,\n resources: readonly ResourceDeclaration[],\n symbolMap: SerializationSymbolMap,\n): InfraNode {\n return {\n ...(stack.targetScope !== \"resourceGroup\" ? { targetScope: stack.targetScope } : {}),\n fileName: `${stack.name}.bicep`,\n ...definedProps({\n parameters: serializeParameters(stack, symbolMap),\n variables: serializeVariables(stack, symbolMap),\n resources:\n resources.length === 0\n ? undefined\n : Object.fromEntries(resources.map((resource) => serializeResource(resource, symbolMap))),\n outputs: serializeOutputs(stack, symbolMap),\n }),\n };\n}\n\n/**\n * Serializes a stack or a nonempty array of stacks into a JSON-compatible\n * {@link SerializationDocument} with one `infras` entry per stack.\n *\n * The document preserves declarations and symbolic expressions for rendering\n * or restoration. Pass `JSON.stringify(serialize(stack))` to {@link deserialize}\n * to reconstruct the authored stack; this does not deploy any resources.\n */\nexport function serialize(input: Stack | readonly Stack[]): SerializationDocument {\n const stacks = Array.isArray(input) ? input : [input];\n if (stacks.length === 0) {\n throw new Error(\"Cannot serialize an empty stack collection.\");\n }\n\n return {\n infras: stacks.map((stack) => {\n const resources = collectAllResources(stack);\n const symbolMap = createSymbolMap(resources, stack);\n return serializeFile(stack, resources, symbolMap);\n }),\n };\n}\n"],
5
- "mappings": "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",
6
- "names": ["import_util", "pluralizeLib"]
4
+ "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { Stack } from \"../../constructs/stack.js\";\nimport type { ResourceDeclaration } from \"../../constructs/resource/resource.js\";\nimport { collectResourceDeclarations } from \"../../constructs/resource/resource-query.js\";\nimport type { InfraNode, SerializationDocument } from \"../ast/index.js\";\nimport { buildStackDeclarations } from \"../ast/declaration-builder.js\";\nimport { createSymbolMap, type DeclarationSymbolMap } from \"../symbol-map.js\";\n\nfunction serializeFile(\n stack: Stack,\n resources: readonly ResourceDeclaration[],\n symbolMap: DeclarationSymbolMap,\n): InfraNode {\n return {\n ...(stack.targetScope !== \"resourceGroup\" ? { targetScope: stack.targetScope } : {}),\n fileName: `${stack.name}.bicep`,\n ...buildStackDeclarations(stack, resources, symbolMap),\n };\n}\n\n/**\n * Serializes a stack or a nonempty array of stacks into a JSON-compatible\n * {@link SerializationDocument} with one `infras` entry per stack.\n *\n * The document preserves declarations and symbolic expressions for rendering\n * or restoration. Pass `JSON.stringify(serialize(stack))` to {@link deserialize}\n * to reconstruct the authored stack; this does not deploy any resources.\n */\nexport function serialize(input: Stack | readonly Stack[]): SerializationDocument {\n const stacks = Array.isArray(input) ? input : [input];\n if (stacks.length === 0) {\n throw new Error(\"Cannot serialize an empty stack collection.\");\n }\n\n return {\n infras: stacks.map((stack) => {\n const resources = collectResourceDeclarations(stack);\n const symbolMap = createSymbolMap(resources, stack);\n return serializeFile(stack, resources, symbolMap);\n }),\n };\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAKA,4BAA4C;AAE5C,iCAAuC;AACvC,wBAA2D;AAE3D,SAAS,cACP,OACA,WACA,WACW;AACX,SAAO;AAAA,IACL,GAAI,MAAM,gBAAgB,kBAAkB,EAAE,aAAa,MAAM,YAAY,IAAI,CAAC;AAAA,IAClF,UAAU,GAAG,MAAM,IAAI;AAAA,IACvB,OAAG,mDAAuB,OAAO,WAAW,SAAS;AAAA,EACvD;AACF;AAUO,SAAS,UAAU,OAAwD;AAChF,QAAM,SAAS,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK;AACpD,MAAI,OAAO,WAAW,GAAG;AACvB,UAAM,IAAI,MAAM,6CAA6C;AAAA,EAC/D;AAEA,SAAO;AAAA,IACL,QAAQ,OAAO,IAAI,CAAC,UAAU;AAC5B,YAAM,gBAAY,mDAA4B,KAAK;AACnD,YAAM,gBAAY,mCAAgB,WAAW,KAAK;AAClD,aAAO,cAAc,OAAO,WAAW,SAAS;AAAA,IAClD,CAAC;AAAA,EACH;AACF;",
6
+ "names": []
7
7
  }
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pluralize-config.d.ts","sourceRoot":"","sources":["../../../src/serialization/pluralize-config.ts"],"names":[],"mappings":"AAGA,OAAO,YAAY,MAAM,WAAW,CAAC;AAKrC,eAAe,YAAY,CAAC"}
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../../../src/serialization/json/pluralize-config.ts"],
3
+ "sources": ["../../../src/serialization/pluralize-config.ts"],
4
4
  "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport pluralizeLib from \"pluralize\";\n\npluralizeLib.addUncountableRule(\"redis\");\npluralizeLib.addSingularRule(/(cache)s$/i, \"$1\");\n\nexport default pluralizeLib;\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,uBAAyB;AAEzB,iBAAAA,QAAa,mBAAmB,OAAO;AACvC,iBAAAA,QAAa,gBAAgB,cAAc,IAAI;AAE/C,IAAO,2BAAQ,iBAAAA;",
6
6
  "names": ["pluralizeLib"]