@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
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/serialization/arm-object-conversion.ts"],
4
+ "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Client/ARM object conversion.\n *\n * convertToArmObject maps JS property names to ARM paths, restores flattened\n * nesting, and encodes terminal values using the supplied model shape.\n * convertFromArmObject performs the inverse conversion for deserialization.\n * Both follow nested model, array, and record shapes and preserve unknown\n * keys. Property-access expression lowering lives in the AST expression builder.\n */\n\nimport {\n isTerminalValueShape,\n type ModelShape,\n type ValueShape,\n resolveModelShape,\n} from \"../shape/shape.js\";\nimport { isExpression } from \"../expression/expressions.js\";\nimport { isExpressionNode } from \"../expression/ast-nodes.js\";\nimport { decodeWireValue, encodeWireValue } from \"./encoding.js\";\n\nconst MISSING = Symbol(\"missing\");\n\nfunction assertNeverValueShape(shape: never): never {\n throw new Error(`Unhandled value shape: ${String(shape)}`);\n}\n\n// ---------------------------------------------------------------------------\n// Client object to ARM object\n// ---------------------------------------------------------------------------\n\nfunction isPlainObject(value: unknown): value is Record<string, unknown> {\n if (value === null || typeof value !== \"object\") return false;\n // Expression proxies are opaque values (despite a null prototype) \u2014 they\n // must not be treated as cloneable plain objects.\n if (isExpression(value)) return false;\n const proto = Object.getPrototypeOf(value);\n return proto === Object.prototype || proto === null;\n}\n\n/**\n * Recursively convert a client object into its ARM wire shape. Keys\n * not present in `shape.byJsName` pass through unchanged. Multi-\n * segment ARM paths (from `@flattenProperty`) re-nest objects; nested\n * models, arrays-of-models and records-of-models recurse via\n * `target`. Empty ARM paths fall back to the JS property name.\n *\n * Collisions where two JS-side keys map to overlapping ARM paths merge\n * when both sides are compatible objects; non-object / object collisions\n * throw.\n */\nexport function convertToArmObject(\n state: Record<string, unknown>,\n shape: ModelShape,\n visited: WeakSet<object> = new WeakSet(),\n): Record<string, unknown> {\n if (visited.has(state)) {\n throw new Error(\"Cycle detected while lowering ARM state.\");\n }\n visited.add(state);\n try {\n const out: Record<string, unknown> = Object.create(null);\n // Select the variant once, from the state we're about to lower \u2014\n // every key below is looked up against that one concrete shape.\n const flat = resolveModelShape(shape, state, \"js\");\n\n for (const [jsKey, rawValue] of Object.entries(state)) {\n const propShape = flat?.byJsName[jsKey];\n const path = propShape?.armPath.length ? propShape.armPath : [jsKey];\n const loweredValue = lowerValue(rawValue, propShape?.value, visited, path);\n\n if (!propShape) {\n // Passthrough: key not in shape (e.g. CDK-internal, or emitter\n // didn't include it).\n assignPath(out, [jsKey], loweredValue);\n continue;\n }\n\n assignPath(out, path, loweredValue);\n }\n\n return out;\n } finally {\n visited.delete(state);\n }\n}\n\nfunction lowerValue(\n value: unknown,\n shape: ValueShape | undefined,\n visited: WeakSet<object>,\n path: readonly string[],\n): unknown {\n if (value === null || value === undefined) return value;\n if (isExpression(value) || isExpressionNode(value)) return value;\n\n if (!shape) {\n return value;\n }\n\n if (isTerminalValueShape(shape)) {\n if (\"encoding\" in shape && shape.encoding) {\n return encodeWireValue(value, shape.encoding, path);\n }\n return value;\n }\n\n switch (shape.kind) {\n case \"deferred\":\n if (!isPlainObject(value)) return value;\n // `convertToArmObject` resolves the variant itself, per property, using\n // `value` as the discriminator source.\n return convertToArmObject(value, shape.value(), visited);\n case \"array\":\n if (!Array.isArray(value)) return value;\n return value.map((item, index) =>\n lowerValue(item, shape.element, visited, [...path, String(index)]),\n );\n case \"record\": {\n if (!isPlainObject(value)) return value;\n const out: Record<string, unknown> = Object.create(null);\n for (const [k, v] of Object.entries(value)) {\n defineOwn(out, k, lowerValue(v, shape.value, visited, [...path, k]));\n }\n return out;\n }\n case \"tuple\":\n if (!Array.isArray(value)) return value;\n return value.map((item, index) =>\n lowerValue(item, shape.values[index], visited, [...path, String(index)]),\n );\n default:\n return assertNeverValueShape(shape);\n }\n}\n\n/**\n * Write `value` into `target` at the given ARM path, deep-merging with\n * existing object values. Throws on non-object/object or\n * object/non-object collisions.\n */\nfunction assignPath(\n target: Record<string, unknown>,\n path: readonly string[],\n value: unknown,\n): void {\n if (path.length === 0) return;\n\n let cursor = target;\n for (let i = 0; i < path.length - 1; i++) {\n const seg = path[i]!;\n const existing = Object.prototype.hasOwnProperty.call(cursor, seg) ? cursor[seg] : undefined;\n if (existing === undefined) {\n const next: Record<string, unknown> = Object.create(null);\n defineOwn(cursor, seg, next);\n cursor = next;\n } else if (isPlainObject(existing)) {\n cursor = existing;\n } else {\n throw new Error(\n `ARM path collision at \"${path.slice(0, i + 1).join(\".\")}\": expected object, got ${typeof existing}.`,\n );\n }\n }\n\n const leafKey = path[path.length - 1]!;\n const existingLeaf = Object.prototype.hasOwnProperty.call(cursor, leafKey)\n ? cursor[leafKey]\n : undefined;\n if (existingLeaf === undefined) {\n defineOwn(cursor, leafKey, value);\n return;\n }\n\n if (isPlainObject(existingLeaf) && isPlainObject(value)) {\n defineOwn(\n cursor,\n leafKey,\n deepMerge(existingLeaf as Record<string, unknown>, value as Record<string, unknown>, path),\n );\n return;\n }\n\n throw new Error(\n `ARM path collision at \"${path.join(\".\")}\": cannot merge ${typeof existingLeaf} with ${typeof value}.`,\n );\n}\n\nfunction deepMerge(\n a: Record<string, unknown>,\n b: Record<string, unknown>,\n prefix: readonly string[],\n): Record<string, unknown> {\n const out: Record<string, unknown> = Object.create(null);\n for (const [key, value] of Object.entries(a)) defineOwn(out, key, value);\n for (const [k, v] of Object.entries(b)) {\n const existing = Object.prototype.hasOwnProperty.call(out, k) ? out[k] : undefined;\n if (existing === undefined) {\n defineOwn(out, k, v);\n continue;\n }\n if (isPlainObject(existing) && isPlainObject(v)) {\n defineOwn(\n out,\n k,\n deepMerge(existing as Record<string, unknown>, v as Record<string, unknown>, [\n ...prefix,\n k,\n ]),\n );\n continue;\n }\n throw new Error(\n `ARM path collision at \"${[...prefix, k].join(\".\")}\": cannot merge ${typeof existing} with ${typeof v}.`,\n );\n }\n return out;\n}\n\nfunction defineOwn(target: Record<string, unknown>, key: string, value: unknown): void {\n Object.defineProperty(target, key, {\n value,\n enumerable: true,\n configurable: true,\n writable: true,\n });\n}\n\n// ---------------------------------------------------------------------------\n// ARM object to client object\n// ---------------------------------------------------------------------------\n\n/**\n * Inverse of `convertToArmObject`: walks an ARM object and maps\n * values at each property entry's `armPath` back onto the flat\n * `jsName` key. Recurses into nested model / array / record values via\n * `target`. Empty ARM paths fall back to the JS property name.\n *\n * ARM-shape keys that consumed a nested object entirely (single-segment\n * paths carrying a model `target`) pop that segment from the source\n * so leftovers at intermediate nodes don't silently leak into the\n * output. For multi-segment paths (`@flattenProperty`), only the leaf\n * is extracted; intermediate shared objects may survive as their own\n * top-level entries if the shape also declares a jsName for them.\n *\n * Keys present in the state but not consumed by any property entry\n * pass through unchanged (preserving the \"unknown key\" escape hatch\n * documented in `convertToArmObject`).\n */\nexport function convertFromArmObject(\n state: Record<string, unknown>,\n shape: ModelShape,\n visited: WeakSet<object> = new WeakSet(),\n): Record<string, unknown> {\n if (visited.has(state)) {\n throw new Error(\"Cycle detected while raising ARM state.\");\n }\n visited.add(state);\n try {\n // Wire-shaped input, so the variant is selected against ARM keys.\n const flat = resolveModelShape(shape, state, \"arm\");\n if (!flat) return structuredCloneLike(state, new WeakSet());\n\n // Clone into a mutable working copy so we can prune consumed paths.\n const working: Record<string, unknown> = structuredCloneLike(state, new WeakSet());\n const out: Record<string, unknown> = Object.create(null);\n const consumedTopLevel = new Set<string>();\n\n for (const [jsName, propShape] of Object.entries(flat.byJsName)) {\n const path = propShape.armPath.length > 0 ? propShape.armPath : [jsName];\n const extracted = extractPath(working, path);\n if (extracted === MISSING) continue;\n\n const raised = raiseValue(extracted, propShape.value, visited, path);\n defineOwn(out, jsName, raised);\n\n consumedTopLevel.add(path[0]!);\n }\n\n // Passthrough: anything left in `working` that wasn't consumed by a\n // shape-driven extraction and doesn't collide with an already-\n // placed jsName.\n for (const [k, v] of Object.entries(working)) {\n if (consumedTopLevel.has(k)) {\n // Top-level segment was touched by at least one armPath. If\n // residue remains (e.g. sibling properties the shape didn't\n // cover), surface it under the original ARM key so it's not\n // silently dropped.\n if (isPlainObject(v) && Object.keys(v).length === 0) continue;\n if (v === undefined) continue;\n }\n if (Object.prototype.hasOwnProperty.call(out, k)) continue;\n defineOwn(out, k, v);\n }\n\n return out;\n } finally {\n visited.delete(state);\n }\n}\n\nfunction raiseValue(\n value: unknown,\n shape: ValueShape | undefined,\n visited: WeakSet<object>,\n path: readonly string[],\n): unknown {\n if (value === null || value === undefined) return value;\n if (isExpression(value) || isExpressionNode(value)) return value;\n if (!shape) return value;\n\n if (isTerminalValueShape(shape)) {\n if (\"encoding\" in shape && shape.encoding) {\n return decodeWireValue(value, shape.encoding, path);\n }\n return value;\n }\n\n switch (shape.kind) {\n case \"deferred\":\n if (!isPlainObject(value)) return value;\n // `convertFromArmObject` selects the variant itself, against ARM keys.\n return convertFromArmObject(value, shape.value(), visited);\n case \"array\":\n if (!Array.isArray(value)) return value;\n return value.map((item, index) =>\n raiseValue(item, shape.element, visited, [...path, String(index)]),\n );\n case \"record\": {\n if (!isPlainObject(value)) return value;\n const out: Record<string, unknown> = Object.create(null);\n for (const [k, v] of Object.entries(value)) {\n defineOwn(out, k, raiseValue(v, shape.value, visited, [...path, k]));\n }\n return out;\n }\n case \"tuple\":\n if (!Array.isArray(value)) return value;\n return value.map((item, index) =>\n raiseValue(item, shape.values[index], visited, [...path, String(index)]),\n );\n default:\n return assertNeverValueShape(shape);\n }\n}\n\n/**\n * Walk `obj` along `path`, returning the leaf value and pruning it\n * from the tree. Empty intermediate objects are left in place (caller\n * decides how to treat residue).\n *\n * Returns `MISSING` when any segment is absent or not a plain object.\n */\nfunction extractPath(obj: Record<string, unknown>, path: readonly string[]): unknown {\n if (path.length === 0) return obj;\n\n let cursor: Record<string, unknown> = obj;\n for (let i = 0; i < path.length - 1; i++) {\n const seg = path[i]!;\n const next = Object.prototype.hasOwnProperty.call(cursor, seg) ? cursor[seg] : undefined;\n if (!isPlainObject(next)) return MISSING;\n cursor = next;\n }\n\n const leafKey = path[path.length - 1]!;\n if (!Object.prototype.hasOwnProperty.call(cursor, leafKey)) return MISSING;\n const value = cursor[leafKey];\n delete cursor[leafKey];\n return value;\n}\n\n/**\n * Shallow-clone recursively enough to avoid mutating caller state.\n * We only copy plain objects; arrays and other values are shared\n * (raiseValue handles arrays via `.map` so mutation is contained).\n */\nfunction structuredCloneLike(\n value: Record<string, unknown>,\n seen: WeakSet<object>,\n): Record<string, unknown> {\n if (seen.has(value)) {\n // Preserve the cycle for downstream detection in convertFromArmObject.\n return value;\n }\n seen.add(value);\n const out: Record<string, unknown> = Object.create(null);\n for (const [k, v] of Object.entries(value)) {\n defineOwn(\n out,\n k,\n isExpression(v) || isExpressionNode(v)\n ? v\n : isPlainObject(v)\n ? structuredCloneLike(v, seen)\n : v,\n );\n }\n return out;\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,10 @@
1
+ import type { Stack } from "../../constructs/stack.js";
2
+ import type { ResourceDeclaration } from "../../constructs/resource/resource.js";
3
+ import type { InfraNode, OutputDeclarationNode, ParameterDeclarationNode, ResourceDeclarationNode, VariableDeclarationNode } from "./index.js";
4
+ import type { DeclarationSymbolMap } from "../symbol-map.js";
5
+ export declare function buildResourceDeclaration(resource: ResourceDeclaration, symbolMap: DeclarationSymbolMap): [string, ResourceDeclarationNode];
6
+ export declare function buildParameterDeclarations(stack: Stack, symbolMap: DeclarationSymbolMap): Record<string, ParameterDeclarationNode> | undefined;
7
+ export declare function buildVariableDeclarations(stack: Stack, symbolMap: DeclarationSymbolMap): Record<string, VariableDeclarationNode> | undefined;
8
+ export declare function buildOutputDeclarations(stack: Stack, symbolMap: DeclarationSymbolMap): Record<string, OutputDeclarationNode> | undefined;
9
+ export declare function buildStackDeclarations(stack: Stack, resources: readonly ResourceDeclaration[], symbols: DeclarationSymbolMap): Pick<InfraNode, "parameters" | "variables" | "resources" | "outputs">;
10
+ //# sourceMappingURL=declaration-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declaration-builder.d.ts","sourceRoot":"","sources":["../../../../src/serialization/ast/declaration-builder.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,2BAA2B,CAAC;AACvD,OAAO,KAAK,EAAY,mBAAmB,EAAE,MAAM,uCAAuC,CAAC;AAU3F,OAAO,KAAK,EAIV,SAAS,EACT,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAyJ7D,wBAAgB,wBAAwB,CACtC,QAAQ,EAAE,mBAAmB,EAC7B,SAAS,EAAE,oBAAoB,GAC9B,CAAC,MAAM,EAAE,uBAAuB,CAAC,CAsDnC;AA0CD,wBAAgB,0BAA0B,CACxC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,oBAAoB,GAC9B,MAAM,CAAC,MAAM,EAAE,wBAAwB,CAAC,GAAG,SAAS,CAiBtD;AAED,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,oBAAoB,GAC9B,MAAM,CAAC,MAAM,EAAE,uBAAuB,CAAC,GAAG,SAAS,CAarD;AAED,wBAAgB,uBAAuB,CACrC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,oBAAoB,GAC9B,MAAM,CAAC,MAAM,EAAE,qBAAqB,CAAC,GAAG,SAAS,CAyBnD;AAED,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,mBAAmB,EAAE,EACzC,OAAO,EAAE,oBAAoB,GAC5B,IAAI,CAAC,SAAS,EAAE,YAAY,GAAG,WAAW,GAAG,WAAW,GAAG,SAAS,CAAC,CAYvE"}
@@ -0,0 +1,274 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var declaration_builder_exports = {};
19
+ __export(declaration_builder_exports, {
20
+ buildOutputDeclarations: () => buildOutputDeclarations,
21
+ buildParameterDeclarations: () => buildParameterDeclarations,
22
+ buildResourceDeclaration: () => buildResourceDeclaration,
23
+ buildStackDeclarations: () => buildStackDeclarations,
24
+ buildVariableDeclarations: () => buildVariableDeclarations
25
+ });
26
+ module.exports = __toCommonJS(declaration_builder_exports);
27
+ var import_resource_proxy = require("../../constructs/resource/resource-proxy.js");
28
+ var import_util = require("../../util.js");
29
+ var import_shape_registry = require("../../shape/shape-registry.js");
30
+ var import_expressions = require("../../expression/expressions.js");
31
+ var import_ast_nodes = require("../../expression/ast-nodes.js");
32
+ var import_resource_utils = require("../../constructs/resource/resource-utils.js");
33
+ var import_resource_relationships = require("../../constructs/resource/resource-relationships.js");
34
+ var import_arm_object_conversion = require("../arm-object-conversion.js");
35
+ var import_expression_builder = require("./expression-builder.js");
36
+ const RESOURCE_RESERVED_KEYS = /* @__PURE__ */ new Set([
37
+ "apiVersion",
38
+ "existing",
39
+ "id",
40
+ "name",
41
+ "scope",
42
+ "type",
43
+ "condition",
44
+ "dependsOn",
45
+ import_resource_proxy.STATE_PARENT_INDEX
46
+ ]);
47
+ function hasNestedResourceHandle(value) {
48
+ if ((0, import_expressions.isExpression)(value) || (0, import_ast_nodes.isExpressionNode)(value)) {
49
+ return false;
50
+ }
51
+ if ((0, import_resource_utils.isResource)(value)) {
52
+ return true;
53
+ }
54
+ if (Array.isArray(value)) {
55
+ return value.some((item) => hasNestedResourceHandle(item));
56
+ }
57
+ if (typeof value === "object" && value !== null) {
58
+ return Object.values(value).some((item) => hasNestedResourceHandle(item));
59
+ }
60
+ return false;
61
+ }
62
+ function buildResourceProperties(resource, symbolMap) {
63
+ const rawResource = (0, import_resource_proxy.unwrapResourceHandle)(resource);
64
+ const properties = {
65
+ name: (0, import_expression_builder.buildExpression)(rawResource.name, symbolMap)
66
+ };
67
+ const armParent = (0, import_resource_relationships.getArmParent)(resource);
68
+ if (armParent !== void 0) {
69
+ const parentId = symbolMap.get(armParent);
70
+ if (parentId === void 0) {
71
+ throw new Error(`Missing parent symbol for resource type ${rawResource.type}.`);
72
+ }
73
+ const parentNode = { kind: "identifier", id: parentId };
74
+ const parentIndex = rawResource[import_resource_proxy.STATE_PARENT_INDEX];
75
+ if (parentIndex !== void 0) {
76
+ properties.parent = {
77
+ kind: "array-access",
78
+ base: parentNode,
79
+ index: (0, import_expression_builder.buildExpression)(parentIndex, symbolMap),
80
+ nullish: false,
81
+ fromEnd: false
82
+ };
83
+ } else {
84
+ properties.parent = parentNode;
85
+ }
86
+ }
87
+ const scopeValue = (0, import_resource_relationships.getResourceScope)(resource);
88
+ if (scopeValue !== void 0) {
89
+ properties.scope = (0, import_expression_builder.buildExpression)(scopeValue, symbolMap);
90
+ } else if (armParent === void 0) {
91
+ const rgAncestor = (0, import_resource_relationships.getResourceGroupAncestor)(resource);
92
+ if (rgAncestor !== void 0) {
93
+ const groupId = symbolMap.get(rgAncestor);
94
+ if (groupId === void 0) {
95
+ throw new Error("Resource group not found in symbol map.");
96
+ }
97
+ properties.scope = {
98
+ kind: "identifier",
99
+ id: groupId
100
+ };
101
+ }
102
+ }
103
+ const dependsOn = rawResource["dependsOn"];
104
+ if (dependsOn !== void 0) {
105
+ properties.dependsOn = {
106
+ kind: "array",
107
+ items: dependsOn.map((dependency) => {
108
+ const identifier = symbolMap.get(dependency);
109
+ if (identifier === void 0) {
110
+ throw new Error(
111
+ "Dependency not found in symbol map. Ensure it belongs to the same stack."
112
+ );
113
+ }
114
+ return { kind: "identifier", id: identifier };
115
+ })
116
+ };
117
+ }
118
+ const descriptor = typeof rawResource.type === "string" && typeof rawResource.apiVersion === "string" ? (0, import_shape_registry.getShape)(
119
+ rawResource.type,
120
+ rawResource.apiVersion,
121
+ rawResource
122
+ ) : void 0;
123
+ const userProps = {};
124
+ for (const [key, value] of Object.entries(rawResource)) {
125
+ if (rawResource.existing) continue;
126
+ if (value === void 0 || RESOURCE_RESERVED_KEYS.has(key) || hasNestedResourceHandle(value)) {
127
+ continue;
128
+ }
129
+ userProps[key] = value;
130
+ }
131
+ const loweredUserProps = descriptor ? (0, import_arm_object_conversion.convertToArmObject)(userProps, descriptor) : userProps;
132
+ for (const key of Object.keys(loweredUserProps).sort()) {
133
+ properties[key] = (0, import_expression_builder.buildExpression)(loweredUserProps[key], symbolMap);
134
+ }
135
+ return properties;
136
+ }
137
+ function buildResourceDeclaration(resource, symbolMap) {
138
+ const resourceId = symbolMap.get(resource);
139
+ if (resourceId === void 0) {
140
+ throw new Error(`Missing synthesized symbol for resource type ${resource.type}.`);
141
+ }
142
+ const properties = buildResourceProperties(resource, symbolMap);
143
+ const rawResource = (0, import_resource_proxy.unwrapResourceHandle)(resource);
144
+ const condition = rawResource["condition"] !== void 0 ? (0, import_expression_builder.buildExpression)(rawResource["condition"], symbolMap) : void 0;
145
+ const loopCtx = (0, import_resource_utils.isLoopedResource)(resource) ? resource.loop : void 0;
146
+ const batchSize = loopCtx?.batchSize;
147
+ const decorators = batchSize !== void 0 ? { batchSize } : void 0;
148
+ let wireValue = { kind: "object", value: properties };
149
+ if (condition !== void 0) {
150
+ wireValue = { kind: "if-condition", condition, body: wireValue };
151
+ }
152
+ if (loopCtx !== void 0) {
153
+ wireValue = {
154
+ kind: "for-expression",
155
+ itemVariable: loopCtx.itemVariable,
156
+ ...loopCtx.indexVariable !== void 0 ? { indexVariable: loopCtx.indexVariable } : {},
157
+ collection: (0, import_expression_builder.buildExpression)(loopCtx.collection, symbolMap),
158
+ body: wireValue
159
+ };
160
+ }
161
+ const node = {
162
+ bicepIdentifier: resourceId,
163
+ type: resource.type,
164
+ apiVersion: resource.apiVersion,
165
+ existing: resource.existing ?? false,
166
+ value: wireValue,
167
+ ...decorators !== void 0 ? { decorators } : {}
168
+ };
169
+ return [resourceId, node];
170
+ }
171
+ function buildDecorators(decl, symbolMap) {
172
+ const d = {};
173
+ if (decl.description !== void 0) d.description = decl.description;
174
+ if ("secure" in decl && decl.secure) d.secure = true;
175
+ if ("minValue" in decl && decl.minValue !== void 0) {
176
+ d.minValue = decl.minValue;
177
+ }
178
+ if ("maxValue" in decl && decl.maxValue !== void 0) {
179
+ d.maxValue = decl.maxValue;
180
+ }
181
+ if ("minLength" in decl && decl.minLength !== void 0) {
182
+ d.minLength = decl.minLength;
183
+ }
184
+ if ("maxLength" in decl && decl.maxLength !== void 0) {
185
+ d.maxLength = decl.maxLength;
186
+ }
187
+ if ("metadata" in decl && decl.metadata !== void 0) {
188
+ d.metadata = (0, import_expression_builder.buildExpressionProperties)(
189
+ decl.metadata,
190
+ symbolMap
191
+ );
192
+ }
193
+ if ("allowed" in decl && decl.allowed !== void 0) {
194
+ d.allowed = decl.allowed.map((v) => (0, import_expression_builder.buildExpression)(v, symbolMap));
195
+ }
196
+ if ("discriminator" in decl && decl.discriminator !== void 0) {
197
+ d.discriminator = decl.discriminator;
198
+ }
199
+ if ("sealed" in decl && decl.sealed) d.sealed = true;
200
+ if ("export" in decl && decl.export) d.export = true;
201
+ return Object.keys(d).length > 0 ? d : void 0;
202
+ }
203
+ function buildParameterDeclarations(stack, symbolMap) {
204
+ if (stack.parameters.size === 0) return void 0;
205
+ return Object.fromEntries(
206
+ stack.parameters.listMetadata().map((p) => {
207
+ const identifier = symbolMap.get(p);
208
+ const node = (0, import_util.definedProps)({
209
+ bicepIdentifier: identifier,
210
+ valueType: { kind: "primitive-type", name: p.type },
211
+ defaultValue: p.defaultValue !== void 0 ? (0, import_expression_builder.buildExpression)(p.defaultValue, symbolMap) : void 0,
212
+ decorators: buildDecorators(p, symbolMap)
213
+ });
214
+ return [identifier, node];
215
+ })
216
+ );
217
+ }
218
+ function buildVariableDeclarations(stack, symbolMap) {
219
+ if (stack.variables.size === 0) return void 0;
220
+ return Object.fromEntries(
221
+ stack.variables.listMetadata().map((v) => {
222
+ const identifier = symbolMap.get(v);
223
+ const node = (0, import_util.definedProps)({
224
+ bicepIdentifier: identifier,
225
+ value: (0, import_expression_builder.buildExpression)(v.value, symbolMap),
226
+ decorators: buildDecorators(v, symbolMap)
227
+ });
228
+ return [identifier, node];
229
+ })
230
+ );
231
+ }
232
+ function buildOutputDeclarations(stack, symbolMap) {
233
+ if (stack.outputs.size === 0) return void 0;
234
+ return Object.fromEntries(
235
+ stack.outputs.list().map((o) => {
236
+ let value;
237
+ if ((0, import_resource_utils.isResource)(o.value)) {
238
+ const symbol = symbolMap.get(o.value);
239
+ if (symbol === void 0) {
240
+ throw new Error(`Resource not found in symbol map. Ensure it belongs to the same stack.`);
241
+ }
242
+ value = { kind: "identifier", id: symbol };
243
+ } else {
244
+ value = (0, import_expression_builder.buildExpression)(o.value, symbolMap);
245
+ }
246
+ const node = (0, import_util.definedProps)({
247
+ bicepIdentifier: o.name,
248
+ valueType: { kind: "primitive-type", name: o.type },
249
+ value,
250
+ decorators: buildDecorators(o, symbolMap)
251
+ });
252
+ return [o.name, node];
253
+ })
254
+ );
255
+ }
256
+ function buildStackDeclarations(stack, resources, symbols) {
257
+ return (0, import_util.definedProps)({
258
+ parameters: buildParameterDeclarations(stack, symbols),
259
+ variables: buildVariableDeclarations(stack, symbols),
260
+ resources: resources.length === 0 ? void 0 : Object.fromEntries(
261
+ resources.map((resource) => buildResourceDeclaration(resource, symbols))
262
+ ),
263
+ outputs: buildOutputDeclarations(stack, symbols)
264
+ });
265
+ }
266
+ // Annotate the CommonJS export names for ESM import in node:
267
+ 0 && (module.exports = {
268
+ buildOutputDeclarations,
269
+ buildParameterDeclarations,
270
+ buildResourceDeclaration,
271
+ buildStackDeclarations,
272
+ buildVariableDeclarations
273
+ });
274
+ //# sourceMappingURL=declaration-builder.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/serialization/ast/declaration-builder.ts"],
4
+ "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 { OutputMetadata } from \"../../constructs/output.js\";\nimport type { Stack } from \"../../constructs/stack.js\";\nimport type { Resource, ResourceDeclaration } from \"../../constructs/resource/resource.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 } from \"../../expression/expressions.js\";\nimport { isExpressionNode } from \"../../expression/ast-nodes.js\";\nimport { isResource, isLoopedResource } from \"../../constructs/resource/resource-utils.js\";\nimport type {\n DeclarableBodyNode,\n DecoratorsNode,\n ExpressionNode,\n InfraNode,\n OutputDeclarationNode,\n ParameterDeclarationNode,\n ResourceDeclarationNode,\n VariableDeclarationNode,\n} from \"./index.js\";\nimport type { DeclarationSymbolMap } from \"../symbol-map.js\";\nimport {\n getArmParent,\n getResourceGroupAncestor,\n getResourceScope,\n} from \"../../constructs/resource/resource-relationships.js\";\nimport { convertToArmObject } from \"../arm-object-conversion.js\";\nimport {\n buildExpressionProperties,\n buildExpression,\n type ExpressionNodeInput,\n} from \"./expression-builder.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 buildResourceProperties(\n resource: ResourceDeclaration,\n symbolMap: DeclarationSymbolMap,\n): Record<string, ExpressionNode> {\n const rawResource = unwrapResourceHandle(resource as unknown as Resource);\n const properties: Record<string, ExpressionNode> = {\n name: buildExpression(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: buildExpression(parentIndex as ExpressionNodeInput, symbolMap),\n nullish: false,\n fromEnd: false,\n };\n } else {\n properties.parent = parentNode;\n }\n }\n\n // Explicit scope comes from existing lookups or preserved import data.\n const scopeValue = getResourceScope(resource);\n if (scopeValue !== undefined) {\n properties.scope = buildExpression(scopeValue, 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 ? convertToArmObject(userProps, descriptor) : userProps;\n\n for (const key of Object.keys(loweredUserProps).sort()) {\n properties[key] = buildExpression(loweredUserProps[key] as ExpressionNodeInput, symbolMap);\n }\n\n return properties;\n}\n\nexport function buildResourceDeclaration(\n resource: ResourceDeclaration,\n symbolMap: DeclarationSymbolMap,\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 = buildResourceProperties(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 ? buildExpression(rawResource[\"condition\"] as ExpressionNodeInput, 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: buildExpression(loopCtx.collection as ExpressionNodeInput, 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: DeclarationSymbolMap,\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 = buildExpressionProperties(\n decl.metadata as {\n readonly [key: string]: ExpressionNodeInput | undefined;\n },\n symbolMap,\n );\n }\n if (\"allowed\" in decl && decl.allowed !== undefined) {\n d.allowed = decl.allowed.map((v) => buildExpression(v as ExpressionNodeInput, 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\nexport function buildParameterDeclarations(\n stack: Stack,\n symbolMap: DeclarationSymbolMap,\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 ? buildExpression(p.defaultValue as ExpressionNodeInput, symbolMap)\n : undefined,\n decorators: buildDecorators(p, symbolMap),\n });\n return [identifier, node];\n }),\n );\n}\n\nexport function buildVariableDeclarations(\n stack: Stack,\n symbolMap: DeclarationSymbolMap,\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: buildExpression(v.value as ExpressionNodeInput, symbolMap),\n decorators: buildDecorators(v, symbolMap),\n });\n return [identifier, node];\n }),\n );\n}\n\nexport function buildOutputDeclarations(\n stack: Stack,\n symbolMap: DeclarationSymbolMap,\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\n value = { kind: \"identifier\", id: symbol };\n } else {\n value = buildExpression(o.value as ExpressionNodeInput, 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\nexport function buildStackDeclarations(\n stack: Stack,\n resources: readonly ResourceDeclaration[],\n symbols: DeclarationSymbolMap,\n): Pick<InfraNode, \"parameters\" | \"variables\" | \"resources\" | \"outputs\"> {\n return definedProps({\n parameters: buildParameterDeclarations(stack, symbols),\n variables: buildVariableDeclarations(stack, symbols),\n resources:\n resources.length === 0\n ? undefined\n : Object.fromEntries(\n resources.map((resource) => buildResourceDeclaration(resource, symbols)),\n ),\n outputs: buildOutputDeclarations(stack, symbols),\n });\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }
@@ -0,0 +1,18 @@
1
+ import type { AstDeclarationMap, DeclarationNode } from "./index.js";
2
+ export type DeclarationDependencyOptions = {
3
+ readonly recursive?: false;
4
+ } | {
5
+ readonly recursive: true;
6
+ /** Only references present in this emitted-identifier map are followed. */
7
+ readonly declarations: AstDeclarationMap;
8
+ };
9
+ /**
10
+ * Collects names referenced by declaration values/defaults, types, and decorators,
11
+ * excluding loop-local identifiers. These are dependencies of the declarations,
12
+ * not declarations that depend on them. By default, only direct names are collected.
13
+ * Recursive mode follows references through the declaration map using a work queue.
14
+ * Each declaration instance is inspected once per call, so cycles terminate without
15
+ * being validated. Names with no resolved declaration remain in the result.
16
+ */
17
+ export declare function collectDependenciesForDeclaration(input: DeclarationNode | readonly DeclarationNode[], options?: DeclarationDependencyOptions): Set<string>;
18
+ //# sourceMappingURL=declaration-dependencies.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"declaration-dependencies.d.ts","sourceRoot":"","sources":["../../../../src/serialization/ast/declaration-dependencies.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAY,MAAM,YAAY,CAAC;AAG/E,MAAM,MAAM,4BAA4B,GACpC;IAAE,QAAQ,CAAC,SAAS,CAAC,EAAE,KAAK,CAAA;CAAE,GAC9B;IACE,QAAQ,CAAC,SAAS,EAAE,IAAI,CAAC;IACzB,2EAA2E;IAC3E,QAAQ,CAAC,YAAY,EAAE,iBAAiB,CAAC;CAC1C,CAAC;AAEN;;;;;;;GAOG;AACH,wBAAgB,iCAAiC,CAC/C,KAAK,EAAE,eAAe,GAAG,SAAS,eAAe,EAAE,EACnD,OAAO,CAAC,EAAE,4BAA4B,GACrC,GAAG,CAAC,MAAM,CAAC,CAkBb"}
@@ -0,0 +1,109 @@
1
+ var __defProp = Object.defineProperty;
2
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
3
+ var __getOwnPropNames = Object.getOwnPropertyNames;
4
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
5
+ var __export = (target, all) => {
6
+ for (var name in all)
7
+ __defProp(target, name, { get: all[name], enumerable: true });
8
+ };
9
+ var __copyProps = (to, from, except, desc) => {
10
+ if (from && typeof from === "object" || typeof from === "function") {
11
+ for (let key of __getOwnPropNames(from))
12
+ if (!__hasOwnProp.call(to, key) && key !== except)
13
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
14
+ }
15
+ return to;
16
+ };
17
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
18
+ var declaration_dependencies_exports = {};
19
+ __export(declaration_dependencies_exports, {
20
+ collectDependenciesForDeclaration: () => collectDependenciesForDeclaration
21
+ });
22
+ module.exports = __toCommonJS(declaration_dependencies_exports);
23
+ var import_expression_walker = require("./expression-walker.js");
24
+ function collectDependenciesForDeclaration(input, options) {
25
+ const identifiers = /* @__PURE__ */ new Set();
26
+ const visited = /* @__PURE__ */ new Set();
27
+ const pending = "bicepIdentifier" in input ? [input] : [...input];
28
+ for (let index = 0; index < pending.length; index++) {
29
+ const declaration = pending[index];
30
+ if (visited.has(declaration)) continue;
31
+ visited.add(declaration);
32
+ for (const identifier of collectDirectDependencies(declaration)) {
33
+ if (identifiers.has(identifier)) continue;
34
+ identifiers.add(identifier);
35
+ if (options?.recursive === true) {
36
+ const dependency = options.declarations.get(identifier);
37
+ if (dependency !== void 0) pending.push(dependency);
38
+ }
39
+ }
40
+ }
41
+ return identifiers;
42
+ }
43
+ function collectDirectDependencies(node) {
44
+ const identifiers = /* @__PURE__ */ new Set();
45
+ if ("valueType" in node) {
46
+ collectIdentifierIdsFromType(node.valueType, identifiers);
47
+ }
48
+ (0, import_expression_walker.walkDeclarationExpressions)(node, (expression, boundIdentifiers) => {
49
+ if (expression.kind === "identifier" && !boundIdentifiers.has(expression.id)) {
50
+ identifiers.add(expression.id);
51
+ }
52
+ });
53
+ return identifiers;
54
+ }
55
+ function collectIdentifierIdsFromType(type, identifiers) {
56
+ switch (type.kind) {
57
+ case "type-reference":
58
+ identifiers.add(type.name);
59
+ return;
60
+ case "union-type-member":
61
+ case "parameterized-type-argument":
62
+ collectIdentifierIdsFromType(type.valueType, identifiers);
63
+ return;
64
+ case "array-type":
65
+ collectIdentifierIdsFromType(type.item, identifiers);
66
+ return;
67
+ case "object-type-property":
68
+ case "object-type-additional-properties":
69
+ collectIdentifierIdsFromType(type.valueType, identifiers);
70
+ return;
71
+ case "object-type":
72
+ for (const property of type.properties) {
73
+ collectIdentifierIdsFromType(property, identifiers);
74
+ }
75
+ if (type.additionalProperties !== void 0) {
76
+ collectIdentifierIdsFromType(type.additionalProperties, identifiers);
77
+ }
78
+ return;
79
+ case "union-type":
80
+ for (const member of type.members) {
81
+ collectIdentifierIdsFromType(member.valueType, identifiers);
82
+ }
83
+ return;
84
+ case "nullable-type":
85
+ collectIdentifierIdsFromType(type.base, identifiers);
86
+ return;
87
+ case "parameterized-type-instantiation":
88
+ collectIdentifierIdsFromType(type.base, identifiers);
89
+ for (const argument of type.args) {
90
+ collectIdentifierIdsFromType(argument.valueType, identifiers);
91
+ }
92
+ return;
93
+ case "primitive-type":
94
+ case "string-type-literal":
95
+ case "integer-type-literal":
96
+ case "boolean-type-literal":
97
+ case "null-type-literal":
98
+ return;
99
+ default: {
100
+ const exhaustive = type;
101
+ throw new Error(`Unsupported type kind: ${exhaustive.kind}`);
102
+ }
103
+ }
104
+ }
105
+ // Annotate the CommonJS export names for ESM import in node:
106
+ 0 && (module.exports = {
107
+ collectDependenciesForDeclaration
108
+ });
109
+ //# sourceMappingURL=declaration-dependencies.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../../src/serialization/ast/declaration-dependencies.ts"],
4
+ "sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { AstDeclarationMap, DeclarationNode, TypeNode } from \"./index.js\";\nimport { walkDeclarationExpressions } from \"./expression-walker.js\";\n\nexport type DeclarationDependencyOptions =\n | { readonly recursive?: false }\n | {\n readonly recursive: true;\n /** Only references present in this emitted-identifier map are followed. */\n readonly declarations: AstDeclarationMap;\n };\n\n/**\n * Collects names referenced by declaration values/defaults, types, and decorators,\n * excluding loop-local identifiers. These are dependencies of the declarations,\n * not declarations that depend on them. By default, only direct names are collected.\n * Recursive mode follows references through the declaration map using a work queue.\n * Each declaration instance is inspected once per call, so cycles terminate without\n * being validated. Names with no resolved declaration remain in the result.\n */\nexport function collectDependenciesForDeclaration(\n input: DeclarationNode | readonly DeclarationNode[],\n options?: DeclarationDependencyOptions,\n): Set<string> {\n const identifiers = new Set<string>();\n const visited = new Set<DeclarationNode>();\n const pending = \"bicepIdentifier\" in input ? [input] : [...input];\n for (let index = 0; index < pending.length; index++) {\n const declaration = pending[index]!;\n if (visited.has(declaration)) continue;\n visited.add(declaration);\n for (const identifier of collectDirectDependencies(declaration)) {\n if (identifiers.has(identifier)) continue;\n identifiers.add(identifier);\n if (options?.recursive === true) {\n const dependency = options.declarations.get(identifier);\n if (dependency !== undefined) pending.push(dependency);\n }\n }\n }\n return identifiers;\n}\n\nfunction collectDirectDependencies(node: DeclarationNode): Set<string> {\n const identifiers = new Set<string>();\n if (\"valueType\" in node) {\n collectIdentifierIdsFromType(node.valueType, identifiers);\n }\n walkDeclarationExpressions(node, (expression, boundIdentifiers) => {\n if (expression.kind === \"identifier\" && !boundIdentifiers.has(expression.id)) {\n identifiers.add(expression.id);\n }\n });\n return identifiers;\n}\n\nfunction collectIdentifierIdsFromType(type: TypeNode, identifiers: Set<string>): void {\n switch (type.kind) {\n case \"type-reference\":\n identifiers.add(type.name);\n return;\n case \"union-type-member\":\n case \"parameterized-type-argument\":\n collectIdentifierIdsFromType(type.valueType, identifiers);\n return;\n case \"array-type\":\n collectIdentifierIdsFromType(type.item, identifiers);\n return;\n case \"object-type-property\":\n case \"object-type-additional-properties\":\n collectIdentifierIdsFromType(type.valueType, identifiers);\n return;\n case \"object-type\":\n for (const property of type.properties) {\n collectIdentifierIdsFromType(property, identifiers);\n }\n if (type.additionalProperties !== undefined) {\n collectIdentifierIdsFromType(type.additionalProperties, identifiers);\n }\n return;\n case \"union-type\":\n for (const member of type.members) {\n collectIdentifierIdsFromType(member.valueType, identifiers);\n }\n return;\n case \"nullable-type\":\n collectIdentifierIdsFromType(type.base, identifiers);\n return;\n case \"parameterized-type-instantiation\":\n collectIdentifierIdsFromType(type.base, identifiers);\n for (const argument of type.args) {\n collectIdentifierIdsFromType(argument.valueType, identifiers);\n }\n return;\n case \"primitive-type\":\n case \"string-type-literal\":\n case \"integer-type-literal\":\n case \"boolean-type-literal\":\n case \"null-type-literal\":\n return;\n default: {\n const exhaustive: never = type;\n throw new Error(`Unsupported type kind: ${(exhaustive as { kind: string }).kind}`);\n }\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAIA,+BAA2C;AAkBpC,SAAS,kCACd,OACA,SACa;AACb,QAAM,cAAc,oBAAI,IAAY;AACpC,QAAM,UAAU,oBAAI,IAAqB;AACzC,QAAM,UAAU,qBAAqB,QAAQ,CAAC,KAAK,IAAI,CAAC,GAAG,KAAK;AAChE,WAAS,QAAQ,GAAG,QAAQ,QAAQ,QAAQ,SAAS;AACnD,UAAM,cAAc,QAAQ,KAAK;AACjC,QAAI,QAAQ,IAAI,WAAW,EAAG;AAC9B,YAAQ,IAAI,WAAW;AACvB,eAAW,cAAc,0BAA0B,WAAW,GAAG;AAC/D,UAAI,YAAY,IAAI,UAAU,EAAG;AACjC,kBAAY,IAAI,UAAU;AAC1B,UAAI,SAAS,cAAc,MAAM;AAC/B,cAAM,aAAa,QAAQ,aAAa,IAAI,UAAU;AACtD,YAAI,eAAe,OAAW,SAAQ,KAAK,UAAU;AAAA,MACvD;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAEA,SAAS,0BAA0B,MAAoC;AACrE,QAAM,cAAc,oBAAI,IAAY;AACpC,MAAI,eAAe,MAAM;AACvB,iCAA6B,KAAK,WAAW,WAAW;AAAA,EAC1D;AACA,2DAA2B,MAAM,CAAC,YAAY,qBAAqB;AACjE,QAAI,WAAW,SAAS,gBAAgB,CAAC,iBAAiB,IAAI,WAAW,EAAE,GAAG;AAC5E,kBAAY,IAAI,WAAW,EAAE;AAAA,IAC/B;AAAA,EACF,CAAC;AACD,SAAO;AACT;AAEA,SAAS,6BAA6B,MAAgB,aAAgC;AACpF,UAAQ,KAAK,MAAM;AAAA,IACjB,KAAK;AACH,kBAAY,IAAI,KAAK,IAAI;AACzB;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AACH,mCAA6B,KAAK,WAAW,WAAW;AACxD;AAAA,IACF,KAAK;AACH,mCAA6B,KAAK,MAAM,WAAW;AACnD;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AACH,mCAA6B,KAAK,WAAW,WAAW;AACxD;AAAA,IACF,KAAK;AACH,iBAAW,YAAY,KAAK,YAAY;AACtC,qCAA6B,UAAU,WAAW;AAAA,MACpD;AACA,UAAI,KAAK,yBAAyB,QAAW;AAC3C,qCAA6B,KAAK,sBAAsB,WAAW;AAAA,MACrE;AACA;AAAA,IACF,KAAK;AACH,iBAAW,UAAU,KAAK,SAAS;AACjC,qCAA6B,OAAO,WAAW,WAAW;AAAA,MAC5D;AACA;AAAA,IACF,KAAK;AACH,mCAA6B,KAAK,MAAM,WAAW;AACnD;AAAA,IACF,KAAK;AACH,mCAA6B,KAAK,MAAM,WAAW;AACnD,iBAAW,YAAY,KAAK,MAAM;AAChC,qCAA6B,SAAS,WAAW,WAAW;AAAA,MAC9D;AACA;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH;AAAA,IACF,SAAS;AACP,YAAM,aAAoB;AAC1B,YAAM,IAAI,MAAM,0BAA2B,WAAgC,IAAI,EAAE;AAAA,IACnF;AAAA,EACF;AACF;",
6
+ "names": []
7
+ }
@@ -0,0 +1,14 @@
1
+ import { type ExpressionNode as CoreExpressionNode } from "../../expression/ast-nodes.js";
2
+ import { type Expression } from "../../expression/expressions.js";
3
+ import type { DeclarationSymbolMap } from "../symbol-map.js";
4
+ import type { ExpressionNode } from "./index.js";
5
+ export type ExpressionNodeInput = CoreExpressionNode | Expression<unknown> | string | number | boolean | null | readonly ExpressionNodeInput[] | {
6
+ readonly [key: string]: ExpressionNodeInput | undefined;
7
+ };
8
+ /** Builds a property map of expression nodes, omitting undefined values. */
9
+ export declare function buildExpressionProperties(value: {
10
+ readonly [key: string]: ExpressionNodeInput | undefined;
11
+ }, symbolMap: DeclarationSymbolMap): Record<string, ExpressionNode>;
12
+ export declare function moduleOutputExpression(moduleName: string, outputName: string): ExpressionNode;
13
+ export declare function buildExpression(value: ExpressionNodeInput, symbolMap?: DeclarationSymbolMap): ExpressionNode;
14
+ //# sourceMappingURL=expression-builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expression-builder.d.ts","sourceRoot":"","sources":["../../../../src/serialization/ast/expression-builder.ts"],"names":[],"mappings":"AAGA,OAAO,EAIL,KAAK,cAAc,IAAI,kBAAkB,EAG1C,MAAM,+BAA+B,CAAC;AACvC,OAAO,EAAkC,KAAK,UAAU,EAAE,MAAM,iCAAiC,CAAC;AAClG,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,kBAAkB,CAAC;AAC7D,OAAO,KAAK,EAAc,cAAc,EAAuC,MAAM,YAAY,CAAC;AAElG,MAAM,MAAM,mBAAmB,GAC3B,kBAAkB,GAClB,UAAU,CAAC,OAAO,CAAC,GACnB,MAAM,GACN,MAAM,GACN,OAAO,GACP,IAAI,GACJ,SAAS,mBAAmB,EAAE,GAC9B;IACE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAAC;CACzD,CAAC;AA6HN,4EAA4E;AAC5E,wBAAgB,yBAAyB,CACvC,KAAK,EAAE;IAAE,QAAQ,EAAE,GAAG,EAAE,MAAM,GAAG,mBAAmB,GAAG,SAAS,CAAA;CAAE,EAClE,SAAS,EAAE,oBAAoB,GAC9B,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAMhC;AA4GD,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,cAAc,CAY7F;AAED,wBAAgB,eAAe,CAC7B,KAAK,EAAE,mBAAmB,EAC1B,SAAS,GAAE,oBAAgC,GAC1C,cAAc,CA6HhB"}