@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,368 +1,13 @@
1
1
  // Copyright (c) Microsoft Corporation.
2
2
  // Licensed under the MIT License.
3
- import pluralizeLib from "./pluralize-config.js";
4
- import { ResourceGroup } from "../../constructs/built-in-resources/resource-group.js";
5
- import { STATE_PARENT_INDEX, unwrapResourceHandle, } from "../../constructs/resource/resource-proxy.js";
6
- import { definedProps } from "../../util.js";
7
- import { getShape } from "../../shape/shape-registry.js";
8
- import { isExpression, unwrapExpression } from "../../expression/expressions.js";
9
- import { isExpressionNode } from "../../expression/ast-nodes.js";
10
- import { isResource, isResourceDeclaration, isLoopedResource, } from "../../constructs/resource/resource-utils.js";
11
- import { sanitizeIdentifier } from "./util.js";
12
- import { lowerState } from "./lower.js";
13
- import { serializeDefinedObjectEntries, serializeExpression, } from "./expression.js";
14
- const RESOURCE_RESERVED_KEYS = new Set([
15
- "apiVersion",
16
- "existing",
17
- "id",
18
- "name",
19
- "scope",
20
- "type",
21
- "condition",
22
- "dependsOn",
23
- STATE_PARENT_INDEX,
24
- ]);
25
- function hasNestedResourceHandle(value) {
26
- if (isExpression(value) || isExpressionNode(value)) {
27
- return false;
28
- }
29
- if (isResource(value)) {
30
- return true;
31
- }
32
- if (Array.isArray(value)) {
33
- return value.some((item) => hasNestedResourceHandle(item));
34
- }
35
- if (typeof value === "object" && value !== null) {
36
- return Object.values(value).some((item) => hasNestedResourceHandle(item));
37
- }
38
- return false;
39
- }
40
- function createSymbolMap(resources, stack) {
41
- const symbolMap = new Map();
42
- const counts = new Map();
43
- const usedNames = new Set();
44
- function allocateName(stem) {
45
- let count = counts.get(stem) ?? 0;
46
- let identifier;
47
- do {
48
- count++;
49
- identifier = count === 1 ? stem : `${stem}${count}`;
50
- } while (usedNames.has(identifier));
51
- counts.set(stem, count);
52
- usedNames.add(identifier);
53
- return identifier;
54
- }
55
- for (const parameter of stack.parameters.listMetadata()) {
56
- const identifier = allocateName(parameter.name);
57
- symbolMap.set(parameter, identifier);
58
- symbolMap.set(unwrapExpression(stack.parameters.get(parameter.name)), identifier);
59
- }
60
- for (const variable of stack.variables.listMetadata()) {
61
- const identifier = allocateName(variable.name);
62
- symbolMap.set(variable, identifier);
63
- symbolMap.set(unwrapExpression(stack.variables.get(variable.name)), identifier);
64
- }
65
- for (const resource of resources) {
66
- const typeName = resource.type.split("/").at(-1) ?? "resource";
67
- const stem = sanitizeIdentifier(pluralizeLib.singular(typeName));
68
- symbolMap.set(resource, allocateName(stem));
69
- }
70
- // Outputs have a separate Bicep namespace and are not same-stack expression
71
- // targets, so they keep their authored names outside this symbol map.
72
- return symbolMap;
73
- }
74
- /**
75
- * Returns the nearest Resource ancestor whose type/scope makes it a Bicep
76
- * `parent:` target. This includes both:
77
- *
78
- * - True ARM nested children (e.g. vault → secret), where the renderer
79
- * emits `parent: vault`
80
- * - Extension resources (e.g. storage → diagnosticSetting), where the
81
- * renderer downgrades to `scope: storage`
82
- *
83
- * The renderer (`render.ts`) decides between `parent:` and `scope:` by
84
- * checking ARM type nesting. The file-layout uses this relationship to
85
- * co-locate related resources in the same Bicep file.
86
- *
87
- * Excludes deployment-scope boundaries like `ResourceGroup` (it's a parent
88
- * ProvisioningComponent but not an ARM nesting/extension target — child resources are
89
- * deployed *into* the resource group, expressed as `scope: rg` only when
90
- * the deployment crosses the RG boundary).
91
- */
92
- function getArmParent(resource) {
93
- const p = resource.parent;
94
- if (p === undefined || !isResourceDeclaration(p)) {
95
- return undefined;
96
- }
97
- // Exclude ResourceGroup (deployment scope boundary, not an ARM parent).
98
- if (p.type === ResourceGroup.resourceType)
99
- return undefined;
100
- return p;
101
- }
102
- /**
103
- * Walk a resource's ProvisioningComponent-tree ancestor chain to find the nearest
104
- * `ResourceGroup` component, if any. Used by the serializer to emit a
105
- * synthetic `scope: rgSymbol` field on regular resources whose deployment
106
- * scope is a `ResourceGroup` component rather than the stack's `targetScope`.
107
- *
108
- * The file-layout pass consumes this signal to split the resource into a
109
- * child Bicep module scoped to the ResourceGroup; the per-resource `scope:`
110
- * is stripped at that point because inside the child module the resource is
111
- * implicitly at the right scope.
112
- *
113
- * Returns `undefined` when the resource has no ResourceGroup ancestor (i.e.
114
- * the stack itself is the nearest scope-providing component).
115
- */
116
- function getResourceGroupAncestor(resource) {
117
- let current = resource.parent;
118
- while (current !== undefined) {
119
- if (isResourceDeclaration(current) && current.type === ResourceGroup.resourceType) {
120
- return current;
121
- }
122
- current = current.parent;
123
- }
124
- return undefined;
125
- }
126
- function collectAllResources(root) {
127
- const result = [];
128
- root.visit((node) => {
129
- if (isResourceDeclaration(node)) {
130
- result.push(node.self);
131
- }
132
- });
133
- return result;
134
- }
135
- function serializeResourceProperties(resource, symbolMap) {
136
- const rawResource = unwrapResourceHandle(resource);
137
- const properties = {
138
- name: serializeExpression(rawResource.name, symbolMap),
139
- };
140
- const armParent = getArmParent(resource);
141
- if (armParent !== undefined) {
142
- const parentId = symbolMap.get(armParent);
143
- if (parentId === undefined) {
144
- throw new Error(`Missing parent symbol for resource type ${rawResource.type}.`);
145
- }
146
- const parentNode = { kind: "identifier", id: parentId };
147
- // Explicit parent index recorded by `Resource`'s constructor when a
148
- // child is created with `parent.at(i)` / `parent.current()` as its
149
- // context. When the child is created under a looped parent without an
150
- // explicit index (only reachable by unwrapping the raw handle out of a
151
- // `LoopedResource` — not part of the user-facing API), we emit
152
- // `parent: parentSym` unchanged; Bicep rejects the resulting
153
- // `parent: parents` (an array) at validation, producing a loud failure
154
- // instead of a silently-guessed index variable.
155
- const parentIndex = rawResource[STATE_PARENT_INDEX];
156
- if (parentIndex !== undefined) {
157
- properties.parent = {
158
- kind: "array-access",
159
- base: parentNode,
160
- index: serializeExpression(parentIndex, symbolMap),
161
- nullish: false,
162
- fromEnd: false,
163
- };
164
- }
165
- else {
166
- properties.parent = parentNode;
167
- }
168
- }
169
- // Existing resources may carry an explicit scope expression for cross-RG
170
- // / cross-sub / cross-MG / cross-tenant lookups. Read from state directly;
171
- // non-existing resources never have `scope` on state.
172
- const scopeValue = rawResource.scope;
173
- if (scopeValue !== undefined) {
174
- properties.scope = serializeExpression(scopeValue, symbolMap);
175
- }
176
- else if (armParent === undefined) {
177
- const rgAncestor = getResourceGroupAncestor(resource);
178
- if (rgAncestor !== undefined) {
179
- const groupId = symbolMap.get(rgAncestor);
180
- if (groupId === undefined) {
181
- throw new Error("Resource group not found in symbol map.");
182
- }
183
- properties.scope = {
184
- kind: "identifier",
185
- id: groupId,
186
- };
187
- }
188
- }
189
- const dependsOn = rawResource["dependsOn"];
190
- if (dependsOn !== undefined) {
191
- properties.dependsOn = {
192
- kind: "array",
193
- items: dependsOn.map((dependency) => {
194
- const identifier = symbolMap.get(dependency);
195
- if (identifier === undefined) {
196
- throw new Error("Dependency not found in symbol map. Ensure it belongs to the same stack.");
197
- }
198
- return { kind: "identifier", id: identifier };
199
- }),
200
- };
201
- }
202
- // Build the per-resource custom property bag first, applying ARM-
203
- // shape lowering (rename/flatten/encode) when a shape is
204
- // registered for `(type, apiVersion)`. The registry resolves
205
- // discriminated variants from the instance state. No-op when no
206
- // shape is registered for this resource type.
207
- const descriptor = typeof rawResource.type === "string" && typeof rawResource.apiVersion === "string"
208
- ? getShape(rawResource.type, rawResource.apiVersion, rawResource)
209
- : undefined;
210
- const userProps = {};
211
- for (const [key, value] of Object.entries(rawResource)) {
212
- if (rawResource.existing)
213
- continue;
214
- if (value === undefined || RESOURCE_RESERVED_KEYS.has(key) || hasNestedResourceHandle(value)) {
215
- continue;
216
- }
217
- userProps[key] = value;
218
- }
219
- const loweredUserProps = descriptor ? lowerState(userProps, descriptor) : userProps;
220
- for (const key of Object.keys(loweredUserProps).sort()) {
221
- properties[key] = serializeExpression(loweredUserProps[key], symbolMap);
222
- }
223
- return properties;
224
- }
225
- function serializeResource(resource, symbolMap) {
226
- const resourceId = symbolMap.get(resource);
227
- if (resourceId === undefined) {
228
- throw new Error(`Missing synthesized symbol for resource type ${resource.type}.`);
229
- }
230
- const properties = serializeResourceProperties(resource, symbolMap);
231
- const rawResource = unwrapResourceHandle(resource);
232
- const condition = rawResource["condition"] !== undefined
233
- ? serializeExpression(rawResource["condition"], symbolMap)
234
- : undefined;
235
- // Loop metadata lives on `LoopedResource.loop` — a public field on the
236
- // wrapper subclass. Scalar `Resource` instances don't have one.
237
- const loopCtx = isLoopedResource(resource) ? resource.loop : undefined;
238
- // Build decorators for the resource (currently only batchSize from forEach)
239
- const batchSize = loopCtx?.batchSize;
240
- const decorators = batchSize !== undefined ? { batchSize } : undefined;
241
- // Wrap `value` in `if-condition` / `for-expression` when the resource is
242
- // guarded / looped. Bicep source order is `for` outer, `if` inner —
243
- // `[for item in coll: if (cond) { ... }]` — so wrap if-condition first,
244
- // then for-expression around it.
245
- let wireValue = { kind: "object", value: properties };
246
- if (condition !== undefined) {
247
- wireValue = { kind: "if-condition", condition, body: wireValue };
248
- }
249
- if (loopCtx !== undefined) {
250
- wireValue = {
251
- kind: "for-expression",
252
- itemVariable: loopCtx.itemVariable,
253
- ...(loopCtx.indexVariable !== undefined ? { indexVariable: loopCtx.indexVariable } : {}),
254
- collection: serializeExpression(loopCtx.collection, symbolMap),
255
- body: wireValue,
256
- };
257
- }
258
- const node = {
259
- bicepIdentifier: resourceId,
260
- type: resource.type,
261
- apiVersion: resource.apiVersion,
262
- existing: resource.existing ?? false,
263
- value: wireValue,
264
- ...(decorators !== undefined ? { decorators } : {}),
265
- };
266
- return [resourceId, node];
267
- }
268
- function buildDecorators(decl, symbolMap) {
269
- const d = {};
270
- if (decl.description !== undefined)
271
- d.description = decl.description;
272
- if ("secure" in decl && decl.secure)
273
- d.secure = true;
274
- if ("minValue" in decl && decl.minValue !== undefined) {
275
- d.minValue = decl.minValue;
276
- }
277
- if ("maxValue" in decl && decl.maxValue !== undefined) {
278
- d.maxValue = decl.maxValue;
279
- }
280
- if ("minLength" in decl && decl.minLength !== undefined) {
281
- d.minLength = decl.minLength;
282
- }
283
- if ("maxLength" in decl && decl.maxLength !== undefined) {
284
- d.maxLength = decl.maxLength;
285
- }
286
- if ("metadata" in decl && decl.metadata !== undefined) {
287
- d.metadata = serializeDefinedObjectEntries(decl.metadata, symbolMap);
288
- }
289
- if ("allowed" in decl && decl.allowed !== undefined) {
290
- d.allowed = decl.allowed.map((v) => serializeExpression(v, symbolMap));
291
- }
292
- if ("discriminator" in decl && decl.discriminator !== undefined) {
293
- d.discriminator = decl.discriminator;
294
- }
295
- if ("sealed" in decl && decl.sealed)
296
- d.sealed = true;
297
- if ("export" in decl && decl.export)
298
- d.export = true;
299
- return Object.keys(d).length > 0 ? d : undefined;
300
- }
301
- function serializeParameters(stack, symbolMap) {
302
- if (stack.parameters.size === 0)
303
- return undefined;
304
- return Object.fromEntries(stack.parameters.listMetadata().map((p) => {
305
- const identifier = symbolMap.get(p);
306
- const node = definedProps({
307
- bicepIdentifier: identifier,
308
- valueType: { kind: "primitive-type", name: p.type },
309
- defaultValue: p.defaultValue !== undefined
310
- ? serializeExpression(p.defaultValue, symbolMap)
311
- : undefined,
312
- decorators: buildDecorators(p, symbolMap),
313
- });
314
- return [identifier, node];
315
- }));
316
- }
317
- function serializeVariables(stack, symbolMap) {
318
- if (stack.variables.size === 0)
319
- return undefined;
320
- return Object.fromEntries(stack.variables.listMetadata().map((v) => {
321
- const identifier = symbolMap.get(v);
322
- const node = definedProps({
323
- bicepIdentifier: identifier,
324
- value: serializeExpression(v.value, symbolMap),
325
- decorators: buildDecorators(v, symbolMap),
326
- });
327
- return [identifier, node];
328
- }));
329
- }
330
- function serializeOutputs(stack, symbolMap) {
331
- if (stack.outputs.size === 0)
332
- return undefined;
333
- return Object.fromEntries(stack.outputs.list().map((o) => {
334
- let value;
335
- if (isResource(o.value)) {
336
- const symbol = symbolMap.get(o.value);
337
- if (symbol === undefined) {
338
- throw new Error(`Resource not found in symbol map. Ensure it belongs to the same stack.`);
339
- }
340
- value = { kind: "identifier", id: symbol };
341
- }
342
- else {
343
- value = serializeExpression(o.value, symbolMap);
344
- }
345
- const node = definedProps({
346
- bicepIdentifier: o.name,
347
- valueType: { kind: "primitive-type", name: o.type },
348
- value,
349
- decorators: buildDecorators(o, symbolMap),
350
- });
351
- return [o.name, node];
352
- }));
353
- }
3
+ import { collectResourceDeclarations } from "../../constructs/resource/resource-query.js";
4
+ import { buildStackDeclarations } from "../ast/declaration-builder.js";
5
+ import { createSymbolMap } from "../symbol-map.js";
354
6
  function serializeFile(stack, resources, symbolMap) {
355
7
  return {
356
8
  ...(stack.targetScope !== "resourceGroup" ? { targetScope: stack.targetScope } : {}),
357
9
  fileName: `${stack.name}.bicep`,
358
- ...definedProps({
359
- parameters: serializeParameters(stack, symbolMap),
360
- variables: serializeVariables(stack, symbolMap),
361
- resources: resources.length === 0
362
- ? undefined
363
- : Object.fromEntries(resources.map((resource) => serializeResource(resource, symbolMap))),
364
- outputs: serializeOutputs(stack, symbolMap),
365
- }),
10
+ ...buildStackDeclarations(stack, resources, symbolMap),
366
11
  };
367
12
  }
368
13
  /**
@@ -380,7 +25,7 @@ export function serialize(input) {
380
25
  }
381
26
  return {
382
27
  infras: stacks.map((stack) => {
383
- const resources = collectAllResources(stack);
28
+ const resources = collectResourceDeclarations(stack);
384
29
  const symbolMap = createSymbolMap(resources, stack);
385
30
  return serializeFile(stack, resources, symbolMap);
386
31
  }),
@@ -1 +1 @@
1
- {"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../../../src/serialization/json/serialize.ts"],"names":[],"mappings":"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","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 → secret), where the renderer\n * emits `parent: vault`\n * - Extension resources (e.g. storage → 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 — 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` — 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` — 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 —\n // `[for item in coll: if (cond) { ... }]` — 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"]}
1
+ {"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../../../src/serialization/json/serialize.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,OAAO,EAAE,2BAA2B,EAAE,MAAM,6CAA6C,CAAC;AAE1F,OAAO,EAAE,sBAAsB,EAAE,MAAM,+BAA+B,CAAC;AACvE,OAAO,EAAE,eAAe,EAA6B,MAAM,kBAAkB,CAAC;AAE9E,SAAS,aAAa,CACpB,KAAY,EACZ,SAAyC,EACzC,SAA+B;IAE/B,OAAO;QACL,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,eAAe,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,QAAQ,EAAE,GAAG,KAAK,CAAC,IAAI,QAAQ;QAC/B,GAAG,sBAAsB,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC;KACvD,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,KAA+B;IACvD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,MAAM,SAAS,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACpD,OAAO,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACpD,CAAC,CAAC;KACH,CAAC;AACJ,CAAC","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"]}
@@ -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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pluralize-config.js","sourceRoot":"","sources":["../../../src/serialization/pluralize-config.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,YAAY,MAAM,WAAW,CAAC;AAErC,YAAY,CAAC,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACzC,YAAY,CAAC,eAAe,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AAEjD,eAAe,YAAY,CAAC","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"]}
@@ -0,0 +1,10 @@
1
+ import type { ParameterMetadata } from "../constructs/parameter.js";
2
+ import type { VariableMetadata } from "../constructs/variable.js";
3
+ import type { Stack } from "../constructs/stack.js";
4
+ import type { ResourceDeclaration } from "../constructs/resource/resource.js";
5
+ import type { ExpressionNode } from "../expression/ast-nodes.js";
6
+ /** Maps authored declarations and expression handles to emitted identifiers. */
7
+ export type DeclarationSymbolMap = Map<ResourceDeclaration | ExpressionNode | ParameterMetadata | VariableMetadata, string>;
8
+ /** Allocates declaration symbols in one Stack's serialization namespace. */
9
+ export declare function createSymbolMap(resources: readonly ResourceDeclaration[], stack: Stack, resourceNameOverrides?: ReadonlyMap<string, string>): DeclarationSymbolMap;
10
+ //# sourceMappingURL=symbol-map.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-map.d.ts","sourceRoot":"","sources":["../../../src/serialization/symbol-map.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;AACpE,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAClE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,4BAA4B,CAAC;AAKjE,gFAAgF;AAChF,MAAM,MAAM,oBAAoB,GAAG,GAAG,CACpC,mBAAmB,GAAG,cAAc,GAAG,iBAAiB,GAAG,gBAAgB,EAC3E,MAAM,CACP,CAAC;AAEF,4EAA4E;AAC5E,wBAAgB,eAAe,CAC7B,SAAS,EAAE,SAAS,mBAAmB,EAAE,EACzC,KAAK,EAAE,KAAK,EACZ,qBAAqB,GAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAAa,GAC7D,oBAAoB,CAmCtB"}
@@ -0,0 +1,40 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ import { unwrapExpression } from "../expression/expressions.js";
4
+ import { sanitizeIdentifier } from "./identifiers.js";
5
+ import pluralizeLib from "./pluralize-config.js";
6
+ /** Allocates declaration symbols in one Stack's serialization namespace. */
7
+ export function createSymbolMap(resources, stack, resourceNameOverrides = new Map()) {
8
+ const symbolMap = new Map();
9
+ const counts = new Map();
10
+ const usedNames = new Set();
11
+ function allocateName(stem) {
12
+ let count = counts.get(stem) ?? 0;
13
+ let identifier;
14
+ do {
15
+ count++;
16
+ identifier = count === 1 ? stem : `${stem}${count}`;
17
+ } while (usedNames.has(identifier));
18
+ counts.set(stem, count);
19
+ usedNames.add(identifier);
20
+ return identifier;
21
+ }
22
+ for (const parameter of stack.parameters.listMetadata()) {
23
+ const identifier = allocateName(parameter.name);
24
+ symbolMap.set(parameter, identifier);
25
+ symbolMap.set(unwrapExpression(stack.parameters.get(parameter.name)), identifier);
26
+ }
27
+ for (const variable of stack.variables.listMetadata()) {
28
+ const identifier = allocateName(variable.name);
29
+ symbolMap.set(variable, identifier);
30
+ symbolMap.set(unwrapExpression(stack.variables.get(variable.name)), identifier);
31
+ }
32
+ for (const resource of resources) {
33
+ const typeName = resource.type.split("/").at(-1) ?? "resource";
34
+ const stem = sanitizeIdentifier(pluralizeLib.singular(typeName));
35
+ symbolMap.set(resource, allocateName(resourceNameOverrides.get(stem) ?? stem));
36
+ }
37
+ // Outputs have a separate namespace and are not same-stack expression targets.
38
+ return symbolMap;
39
+ }
40
+ //# sourceMappingURL=symbol-map.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"symbol-map.js","sourceRoot":"","sources":["../../../src/serialization/symbol-map.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAOlC,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,kBAAkB,EAAE,MAAM,kBAAkB,CAAC;AACtD,OAAO,YAAY,MAAM,uBAAuB,CAAC;AAQjD,4EAA4E;AAC5E,MAAM,UAAU,eAAe,CAC7B,SAAyC,EACzC,KAAY,EACZ,wBAAqD,IAAI,GAAG,EAAE;IAE9D,MAAM,SAAS,GAAyB,IAAI,GAAG,EAAE,CAAC;IAClD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpC,SAAS,YAAY,CAAC,IAAY;QAChC,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,UAAkB,CAAC;QACvB,GAAG,CAAC;YACF,KAAK,EAAE,CAAC;YACR,UAAU,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC;QACtD,CAAC,QAAQ,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;QACpC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxB,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,CAAC;QACxD,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChD,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACrC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IACrF,CAAC;IACD,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC;QACtD,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/C,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACpC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IACnF,CAAC;IACD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC;QAC/D,MAAM,IAAI,GAAG,kBAAkB,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACjE,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC;IACjF,CAAC;IAED,+EAA+E;IAC/E,OAAO,SAAS,CAAC;AACnB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { ParameterMetadata } from \"../constructs/parameter.js\";\nimport type { VariableMetadata } from \"../constructs/variable.js\";\nimport type { Stack } from \"../constructs/stack.js\";\nimport type { ResourceDeclaration } from \"../constructs/resource/resource.js\";\nimport type { ExpressionNode } from \"../expression/ast-nodes.js\";\nimport { unwrapExpression } from \"../expression/expressions.js\";\nimport { sanitizeIdentifier } from \"./identifiers.js\";\nimport pluralizeLib from \"./pluralize-config.js\";\n\n/** Maps authored declarations and expression handles to emitted identifiers. */\nexport type DeclarationSymbolMap = Map<\n ResourceDeclaration | ExpressionNode | ParameterMetadata | VariableMetadata,\n string\n>;\n\n/** Allocates declaration symbols in one Stack's serialization namespace. */\nexport function createSymbolMap(\n resources: readonly ResourceDeclaration[],\n stack: Stack,\n resourceNameOverrides: ReadonlyMap<string, string> = new Map(),\n): DeclarationSymbolMap {\n const symbolMap: DeclarationSymbolMap = 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(resourceNameOverrides.get(stem) ?? stem));\n }\n\n // Outputs have a separate namespace and are not same-stack expression targets.\n return symbolMap;\n}\n"]}
@@ -3,8 +3,8 @@
3
3
  *
4
4
  * A `ModelShape` is generated once per emitted Model and describes how
5
5
  * to map JS-ergonomic property names + structure to the underlying ARM
6
- * wire shape. The shapes are consumed by the serialization `lowerState`
7
- * pass (and its inverse `raiseState`) which rewrites state keys and
6
+ * wire shape. The shapes are consumed by the serialization `convertToArmObject`
7
+ * pass (and its inverse `convertFromArmObject`) which rewrites state keys and
8
8
  * re-nests `@flattenProperty` paths just before serialization /
9
9
  * after deserialization.
10
10
  *
@@ -368,10 +368,10 @@ export type NavShape = ModelShape | ContainerShape | undefined;
368
368
  * - `"js"` — client-facing names, as authored in TypeScript and held
369
369
  * in a resource's state. These are
370
370
  * {@link FlatModelShape.byJsName}'s own keys. Passed by
371
- * `lowerState`, on state about to be serialized.
371
+ * `convertToArmObject`, on state about to be serialized.
372
372
  * - `"arm"` — wire names, as they appear in an ARM template or a
373
373
  * service response. These are the first segment of each
374
- * {@link PropertyShape.armPath}. Passed by `raiseState`, on JSON
374
+ * {@link PropertyShape.armPath}. Passed by `convertFromArmObject`, on JSON
375
375
  * just parsed off the wire.
376
376
  *
377
377
  * Has no effect when the discriminator resolves normally, and no
@@ -165,10 +165,10 @@ function assertNeverShape(shape) {
165
165
  * - `"js"` — client-facing names, as authored in TypeScript and held
166
166
  * in a resource's state. These are
167
167
  * {@link FlatModelShape.byJsName}'s own keys. Passed by
168
- * `lowerState`, on state about to be serialized.
168
+ * `convertToArmObject`, on state about to be serialized.
169
169
  * - `"arm"` — wire names, as they appear in an ARM template or a
170
170
  * service response. These are the first segment of each
171
- * {@link PropertyShape.armPath}. Passed by `raiseState`, on JSON
171
+ * {@link PropertyShape.armPath}. Passed by `convertFromArmObject`, on JSON
172
172
  * just parsed off the wire.
173
173
  *
174
174
  * Has no effect when the discriminator resolves normally, and no