@azure/provisioning-core 1.0.0-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (440) hide show
  1. package/CHANGELOG.md +7 -0
  2. package/LICENSE +21 -0
  3. package/README.md +40 -0
  4. package/dist/browser/constructs/built-in-resources/resource-group.d.ts +50 -0
  5. package/dist/browser/constructs/built-in-resources/resource-group.d.ts.map +1 -0
  6. package/dist/browser/constructs/built-in-resources/resource-group.js +100 -0
  7. package/dist/browser/constructs/built-in-resources/resource-group.js.map +1 -0
  8. package/dist/browser/constructs/output.d.ts +80 -0
  9. package/dist/browser/constructs/output.d.ts.map +1 -0
  10. package/dist/browser/constructs/output.js +75 -0
  11. package/dist/browser/constructs/output.js.map +1 -0
  12. package/dist/browser/constructs/parameter.d.ts +77 -0
  13. package/dist/browser/constructs/parameter.d.ts.map +1 -0
  14. package/dist/browser/constructs/parameter.js +93 -0
  15. package/dist/browser/constructs/parameter.js.map +1 -0
  16. package/dist/browser/constructs/provisioning-component.d.ts +91 -0
  17. package/dist/browser/constructs/provisioning-component.d.ts.map +1 -0
  18. package/dist/browser/constructs/provisioning-component.js +150 -0
  19. package/dist/browser/constructs/provisioning-component.js.map +1 -0
  20. package/dist/browser/constructs/resource/resource-proxy.d.ts +134 -0
  21. package/dist/browser/constructs/resource/resource-proxy.d.ts.map +1 -0
  22. package/dist/browser/constructs/resource/resource-proxy.js +517 -0
  23. package/dist/browser/constructs/resource/resource-proxy.js.map +1 -0
  24. package/dist/browser/constructs/resource/resource-query.d.ts +23 -0
  25. package/dist/browser/constructs/resource/resource-query.d.ts.map +1 -0
  26. package/dist/browser/constructs/resource/resource-query.js +69 -0
  27. package/dist/browser/constructs/resource/resource-query.js.map +1 -0
  28. package/dist/browser/constructs/resource/resource-registry.d.ts +99 -0
  29. package/dist/browser/constructs/resource/resource-registry.d.ts.map +1 -0
  30. package/dist/browser/constructs/resource/resource-registry.js +51 -0
  31. package/dist/browser/constructs/resource/resource-registry.js.map +1 -0
  32. package/dist/browser/constructs/resource/resource-type-registry.d.ts +46 -0
  33. package/dist/browser/constructs/resource/resource-type-registry.d.ts.map +1 -0
  34. package/dist/browser/constructs/resource/resource-type-registry.js +156 -0
  35. package/dist/browser/constructs/resource/resource-type-registry.js.map +1 -0
  36. package/dist/browser/constructs/resource/resource-utils.d.ts +60 -0
  37. package/dist/browser/constructs/resource/resource-utils.d.ts.map +1 -0
  38. package/dist/browser/constructs/resource/resource-utils.js +75 -0
  39. package/dist/browser/constructs/resource/resource-utils.js.map +1 -0
  40. package/dist/browser/constructs/resource/resource.d.ts +460 -0
  41. package/dist/browser/constructs/resource/resource.d.ts.map +1 -0
  42. package/dist/browser/constructs/resource/resource.js +582 -0
  43. package/dist/browser/constructs/resource/resource.js.map +1 -0
  44. package/dist/browser/constructs/stack.d.ts +110 -0
  45. package/dist/browser/constructs/stack.d.ts.map +1 -0
  46. package/dist/browser/constructs/stack.js +110 -0
  47. package/dist/browser/constructs/stack.js.map +1 -0
  48. package/dist/browser/constructs/variable.d.ts +63 -0
  49. package/dist/browser/constructs/variable.d.ts.map +1 -0
  50. package/dist/browser/constructs/variable.js +74 -0
  51. package/dist/browser/constructs/variable.js.map +1 -0
  52. package/dist/browser/deployment-context/deployment-context.d.ts +27 -0
  53. package/dist/browser/deployment-context/deployment-context.d.ts.map +1 -0
  54. package/dist/browser/deployment-context/deployment-context.js +4 -0
  55. package/dist/browser/deployment-context/deployment-context.js.map +1 -0
  56. package/dist/browser/expression/ast-nodes.d.ts +100 -0
  57. package/dist/browser/expression/ast-nodes.d.ts.map +1 -0
  58. package/dist/browser/expression/ast-nodes.js +125 -0
  59. package/dist/browser/expression/ast-nodes.js.map +1 -0
  60. package/dist/browser/expression/expressions.d.ts +164 -0
  61. package/dist/browser/expression/expressions.d.ts.map +1 -0
  62. package/dist/browser/expression/expressions.js +211 -0
  63. package/dist/browser/expression/expressions.js.map +1 -0
  64. package/dist/browser/fn.d.ts +194 -0
  65. package/dist/browser/fn.d.ts.map +1 -0
  66. package/dist/browser/fn.js +334 -0
  67. package/dist/browser/fn.js.map +1 -0
  68. package/dist/browser/index.d.ts +25 -0
  69. package/dist/browser/index.d.ts.map +1 -0
  70. package/dist/browser/index.js +17 -0
  71. package/dist/browser/index.js.map +1 -0
  72. package/dist/browser/internal.d.ts +13 -0
  73. package/dist/browser/internal.d.ts.map +1 -0
  74. package/dist/browser/internal.js +10 -0
  75. package/dist/browser/internal.js.map +1 -0
  76. package/dist/browser/naming/naming-policy.d.ts +56 -0
  77. package/dist/browser/naming/naming-policy.d.ts.map +1 -0
  78. package/dist/browser/naming/naming-policy.js +97 -0
  79. package/dist/browser/naming/naming-policy.js.map +1 -0
  80. package/dist/browser/naming/naming-rules.d.ts +15 -0
  81. package/dist/browser/naming/naming-rules.d.ts.map +1 -0
  82. package/dist/browser/naming/naming-rules.js +15 -0
  83. package/dist/browser/naming/naming-rules.js.map +1 -0
  84. package/dist/browser/package.json +8 -0
  85. package/dist/browser/serialization/contract/generated/ast.d.ts +508 -0
  86. package/dist/browser/serialization/contract/generated/ast.d.ts.map +1 -0
  87. package/dist/browser/serialization/contract/generated/ast.js +23 -0
  88. package/dist/browser/serialization/contract/generated/ast.js.map +1 -0
  89. package/dist/browser/serialization/contract/index.d.ts +2 -0
  90. package/dist/browser/serialization/contract/index.d.ts.map +1 -0
  91. package/dist/browser/serialization/contract/index.js +4 -0
  92. package/dist/browser/serialization/contract/index.js.map +1 -0
  93. package/dist/browser/serialization/index.d.ts +4 -0
  94. package/dist/browser/serialization/index.d.ts.map +1 -0
  95. package/dist/browser/serialization/index.js +5 -0
  96. package/dist/browser/serialization/index.js.map +1 -0
  97. package/dist/browser/serialization/json/deserialize.d.ts +24 -0
  98. package/dist/browser/serialization/json/deserialize.d.ts.map +1 -0
  99. package/dist/browser/serialization/json/deserialize.js +437 -0
  100. package/dist/browser/serialization/json/deserialize.js.map +1 -0
  101. package/dist/browser/serialization/json/encoding.d.ts +4 -0
  102. package/dist/browser/serialization/json/encoding.d.ts.map +1 -0
  103. package/dist/browser/serialization/json/encoding.js +319 -0
  104. package/dist/browser/serialization/json/encoding.js.map +1 -0
  105. package/dist/browser/serialization/json/expression.d.ts +32 -0
  106. package/dist/browser/serialization/json/expression.d.ts.map +1 -0
  107. package/dist/browser/serialization/json/expression.js +494 -0
  108. package/dist/browser/serialization/json/expression.js.map +1 -0
  109. package/dist/browser/serialization/json/lower.d.ts +41 -0
  110. package/dist/browser/serialization/json/lower.d.ts.map +1 -0
  111. package/dist/browser/serialization/json/lower.js +334 -0
  112. package/dist/browser/serialization/json/lower.js.map +1 -0
  113. package/dist/browser/serialization/json/pluralize-config.d.ts +3 -0
  114. package/dist/browser/serialization/json/pluralize-config.d.ts.map +1 -0
  115. package/dist/browser/serialization/json/pluralize-config.js +7 -0
  116. package/dist/browser/serialization/json/pluralize-config.js.map +1 -0
  117. package/dist/browser/serialization/json/serialize.d.ts +12 -0
  118. package/dist/browser/serialization/json/serialize.d.ts.map +1 -0
  119. package/dist/browser/serialization/json/serialize.js +389 -0
  120. package/dist/browser/serialization/json/serialize.js.map +1 -0
  121. package/dist/browser/serialization/json/util.d.ts +2 -0
  122. package/dist/browser/serialization/json/util.d.ts.map +1 -0
  123. package/dist/browser/serialization/json/util.js +19 -0
  124. package/dist/browser/serialization/json/util.js.map +1 -0
  125. package/dist/browser/serialization/utils.d.ts +3 -0
  126. package/dist/browser/serialization/utils.d.ts.map +1 -0
  127. package/dist/browser/serialization/utils.js +146 -0
  128. package/dist/browser/serialization/utils.js.map +1 -0
  129. package/dist/browser/shape/shape-registry.d.ts +51 -0
  130. package/dist/browser/shape/shape-registry.d.ts.map +1 -0
  131. package/dist/browser/shape/shape-registry.js +41 -0
  132. package/dist/browser/shape/shape-registry.js.map +1 -0
  133. package/dist/browser/shape/shape.d.ts +407 -0
  134. package/dist/browser/shape/shape.d.ts.map +1 -0
  135. package/dist/browser/shape/shape.js +424 -0
  136. package/dist/browser/shape/shape.js.map +1 -0
  137. package/dist/browser/shape/value-encoding.d.ts +121 -0
  138. package/dist/browser/shape/value-encoding.d.ts.map +1 -0
  139. package/dist/browser/shape/value-encoding.js +32 -0
  140. package/dist/browser/shape/value-encoding.js.map +1 -0
  141. package/dist/browser/types.d.ts +9 -0
  142. package/dist/browser/types.d.ts.map +1 -0
  143. package/dist/browser/types.js +4 -0
  144. package/dist/browser/types.js.map +1 -0
  145. package/dist/browser/util.d.ts +33 -0
  146. package/dist/browser/util.d.ts.map +1 -0
  147. package/dist/browser/util.js +74 -0
  148. package/dist/browser/util.js.map +1 -0
  149. package/dist/commonjs/constructs/built-in-resources/resource-group.d.ts +50 -0
  150. package/dist/commonjs/constructs/built-in-resources/resource-group.d.ts.map +1 -0
  151. package/dist/commonjs/constructs/built-in-resources/resource-group.js +114 -0
  152. package/dist/commonjs/constructs/built-in-resources/resource-group.js.map +7 -0
  153. package/dist/commonjs/constructs/output.d.ts +80 -0
  154. package/dist/commonjs/constructs/output.d.ts.map +1 -0
  155. package/dist/commonjs/constructs/output.js +75 -0
  156. package/dist/commonjs/constructs/output.js.map +7 -0
  157. package/dist/commonjs/constructs/parameter.d.ts +77 -0
  158. package/dist/commonjs/constructs/parameter.d.ts.map +1 -0
  159. package/dist/commonjs/constructs/parameter.js +95 -0
  160. package/dist/commonjs/constructs/parameter.js.map +7 -0
  161. package/dist/commonjs/constructs/provisioning-component.d.ts +91 -0
  162. package/dist/commonjs/constructs/provisioning-component.d.ts.map +1 -0
  163. package/dist/commonjs/constructs/provisioning-component.js +130 -0
  164. package/dist/commonjs/constructs/provisioning-component.js.map +7 -0
  165. package/dist/commonjs/constructs/resource/resource-proxy.d.ts +134 -0
  166. package/dist/commonjs/constructs/resource/resource-proxy.d.ts.map +1 -0
  167. package/dist/commonjs/constructs/resource/resource-proxy.js +456 -0
  168. package/dist/commonjs/constructs/resource/resource-proxy.js.map +7 -0
  169. package/dist/commonjs/constructs/resource/resource-query.d.ts +23 -0
  170. package/dist/commonjs/constructs/resource/resource-query.d.ts.map +1 -0
  171. package/dist/commonjs/constructs/resource/resource-query.js +68 -0
  172. package/dist/commonjs/constructs/resource/resource-query.js.map +7 -0
  173. package/dist/commonjs/constructs/resource/resource-registry.d.ts +99 -0
  174. package/dist/commonjs/constructs/resource/resource-registry.d.ts.map +1 -0
  175. package/dist/commonjs/constructs/resource/resource-registry.js +49 -0
  176. package/dist/commonjs/constructs/resource/resource-registry.js.map +7 -0
  177. package/dist/commonjs/constructs/resource/resource-type-registry.d.ts +46 -0
  178. package/dist/commonjs/constructs/resource/resource-type-registry.d.ts.map +1 -0
  179. package/dist/commonjs/constructs/resource/resource-type-registry.js +178 -0
  180. package/dist/commonjs/constructs/resource/resource-type-registry.js.map +7 -0
  181. package/dist/commonjs/constructs/resource/resource-utils.d.ts +60 -0
  182. package/dist/commonjs/constructs/resource/resource-utils.d.ts.map +1 -0
  183. package/dist/commonjs/constructs/resource/resource-utils.js +51 -0
  184. package/dist/commonjs/constructs/resource/resource-utils.js.map +7 -0
  185. package/dist/commonjs/constructs/resource/resource.d.ts +460 -0
  186. package/dist/commonjs/constructs/resource/resource.d.ts.map +1 -0
  187. package/dist/commonjs/constructs/resource/resource.js +455 -0
  188. package/dist/commonjs/constructs/resource/resource.js.map +7 -0
  189. package/dist/commonjs/constructs/stack.d.ts +110 -0
  190. package/dist/commonjs/constructs/stack.d.ts.map +1 -0
  191. package/dist/commonjs/constructs/stack.js +101 -0
  192. package/dist/commonjs/constructs/stack.js.map +7 -0
  193. package/dist/commonjs/constructs/variable.d.ts +63 -0
  194. package/dist/commonjs/constructs/variable.d.ts.map +1 -0
  195. package/dist/commonjs/constructs/variable.js +85 -0
  196. package/dist/commonjs/constructs/variable.js.map +7 -0
  197. package/dist/commonjs/deployment-context/deployment-context.d.ts +27 -0
  198. package/dist/commonjs/deployment-context/deployment-context.d.ts.map +1 -0
  199. package/dist/commonjs/deployment-context/deployment-context.js +16 -0
  200. package/dist/commonjs/deployment-context/deployment-context.js.map +7 -0
  201. package/dist/commonjs/expression/ast-nodes.d.ts +100 -0
  202. package/dist/commonjs/expression/ast-nodes.d.ts.map +1 -0
  203. package/dist/commonjs/expression/ast-nodes.js +152 -0
  204. package/dist/commonjs/expression/ast-nodes.js.map +7 -0
  205. package/dist/commonjs/expression/expressions.d.ts +164 -0
  206. package/dist/commonjs/expression/expressions.d.ts.map +1 -0
  207. package/dist/commonjs/expression/expressions.js +171 -0
  208. package/dist/commonjs/expression/expressions.js.map +7 -0
  209. package/dist/commonjs/fn.d.ts +194 -0
  210. package/dist/commonjs/fn.d.ts.map +1 -0
  211. package/dist/commonjs/fn.js +382 -0
  212. package/dist/commonjs/fn.js.map +7 -0
  213. package/dist/commonjs/index.d.ts +25 -0
  214. package/dist/commonjs/index.d.ts.map +1 -0
  215. package/dist/commonjs/index.js +93 -0
  216. package/dist/commonjs/index.js.map +7 -0
  217. package/dist/commonjs/internal.d.ts +13 -0
  218. package/dist/commonjs/internal.d.ts.map +1 -0
  219. package/dist/commonjs/internal.js +88 -0
  220. package/dist/commonjs/internal.js.map +7 -0
  221. package/dist/commonjs/naming/naming-policy.d.ts +56 -0
  222. package/dist/commonjs/naming/naming-policy.d.ts.map +1 -0
  223. package/dist/commonjs/naming/naming-policy.js +99 -0
  224. package/dist/commonjs/naming/naming-policy.js.map +7 -0
  225. package/dist/commonjs/naming/naming-rules.d.ts +15 -0
  226. package/dist/commonjs/naming/naming-rules.d.ts.map +1 -0
  227. package/dist/commonjs/naming/naming-rules.js +39 -0
  228. package/dist/commonjs/naming/naming-rules.js.map +7 -0
  229. package/dist/commonjs/package.json +8 -0
  230. package/dist/commonjs/serialization/contract/generated/ast.d.ts +508 -0
  231. package/dist/commonjs/serialization/contract/generated/ast.d.ts.map +1 -0
  232. package/dist/commonjs/serialization/contract/generated/ast.js +40 -0
  233. package/dist/commonjs/serialization/contract/generated/ast.js.map +7 -0
  234. package/dist/commonjs/serialization/contract/index.d.ts +2 -0
  235. package/dist/commonjs/serialization/contract/index.d.ts.map +1 -0
  236. package/dist/commonjs/serialization/contract/index.js +22 -0
  237. package/dist/commonjs/serialization/contract/index.js.map +7 -0
  238. package/dist/commonjs/serialization/index.d.ts +4 -0
  239. package/dist/commonjs/serialization/index.d.ts.map +1 -0
  240. package/dist/commonjs/serialization/index.js +31 -0
  241. package/dist/commonjs/serialization/index.js.map +7 -0
  242. package/dist/commonjs/serialization/json/deserialize.d.ts +24 -0
  243. package/dist/commonjs/serialization/json/deserialize.d.ts.map +1 -0
  244. package/dist/commonjs/serialization/json/deserialize.js +385 -0
  245. package/dist/commonjs/serialization/json/deserialize.js.map +7 -0
  246. package/dist/commonjs/serialization/json/encoding.d.ts +4 -0
  247. package/dist/commonjs/serialization/json/encoding.d.ts.map +1 -0
  248. package/dist/commonjs/serialization/json/encoding.js +306 -0
  249. package/dist/commonjs/serialization/json/encoding.js.map +7 -0
  250. package/dist/commonjs/serialization/json/expression.d.ts +32 -0
  251. package/dist/commonjs/serialization/json/expression.d.ts.map +1 -0
  252. package/dist/commonjs/serialization/json/expression.js +509 -0
  253. package/dist/commonjs/serialization/json/expression.js.map +7 -0
  254. package/dist/commonjs/serialization/json/lower.d.ts +41 -0
  255. package/dist/commonjs/serialization/json/lower.d.ts.map +1 -0
  256. package/dist/commonjs/serialization/json/lower.js +272 -0
  257. package/dist/commonjs/serialization/json/lower.js.map +7 -0
  258. package/dist/commonjs/serialization/json/pluralize-config.d.ts +3 -0
  259. package/dist/commonjs/serialization/json/pluralize-config.d.ts.map +1 -0
  260. package/dist/commonjs/serialization/json/pluralize-config.js +37 -0
  261. package/dist/commonjs/serialization/json/pluralize-config.js.map +7 -0
  262. package/dist/commonjs/serialization/json/serialize.d.ts +12 -0
  263. package/dist/commonjs/serialization/json/serialize.d.ts.map +1 -0
  264. package/dist/commonjs/serialization/json/serialize.js +352 -0
  265. package/dist/commonjs/serialization/json/serialize.js.map +7 -0
  266. package/dist/commonjs/serialization/json/util.d.ts +2 -0
  267. package/dist/commonjs/serialization/json/util.d.ts.map +1 -0
  268. package/dist/commonjs/serialization/json/util.js +37 -0
  269. package/dist/commonjs/serialization/json/util.js.map +7 -0
  270. package/dist/commonjs/serialization/utils.d.ts +3 -0
  271. package/dist/commonjs/serialization/utils.d.ts.map +1 -0
  272. package/dist/commonjs/serialization/utils.js +169 -0
  273. package/dist/commonjs/serialization/utils.js.map +7 -0
  274. package/dist/commonjs/shape/shape-registry.d.ts +51 -0
  275. package/dist/commonjs/shape/shape-registry.d.ts.map +1 -0
  276. package/dist/commonjs/shape/shape-registry.js +40 -0
  277. package/dist/commonjs/shape/shape-registry.js.map +7 -0
  278. package/dist/commonjs/shape/shape.d.ts +407 -0
  279. package/dist/commonjs/shape/shape.d.ts.map +1 -0
  280. package/dist/commonjs/shape/shape.js +290 -0
  281. package/dist/commonjs/shape/shape.js.map +7 -0
  282. package/dist/commonjs/shape/value-encoding.d.ts +121 -0
  283. package/dist/commonjs/shape/value-encoding.d.ts.map +1 -0
  284. package/dist/commonjs/shape/value-encoding.js +62 -0
  285. package/dist/commonjs/shape/value-encoding.js.map +7 -0
  286. package/dist/commonjs/tsdoc-metadata.json +11 -0
  287. package/dist/commonjs/types.d.ts +9 -0
  288. package/dist/commonjs/types.d.ts.map +1 -0
  289. package/dist/commonjs/types.js +16 -0
  290. package/dist/commonjs/types.js.map +7 -0
  291. package/dist/commonjs/util.d.ts +33 -0
  292. package/dist/commonjs/util.d.ts.map +1 -0
  293. package/dist/commonjs/util.js +73 -0
  294. package/dist/commonjs/util.js.map +7 -0
  295. package/dist/esm/constructs/built-in-resources/resource-group.d.ts +50 -0
  296. package/dist/esm/constructs/built-in-resources/resource-group.d.ts.map +1 -0
  297. package/dist/esm/constructs/built-in-resources/resource-group.js +100 -0
  298. package/dist/esm/constructs/built-in-resources/resource-group.js.map +1 -0
  299. package/dist/esm/constructs/output.d.ts +80 -0
  300. package/dist/esm/constructs/output.d.ts.map +1 -0
  301. package/dist/esm/constructs/output.js +75 -0
  302. package/dist/esm/constructs/output.js.map +1 -0
  303. package/dist/esm/constructs/parameter.d.ts +77 -0
  304. package/dist/esm/constructs/parameter.d.ts.map +1 -0
  305. package/dist/esm/constructs/parameter.js +93 -0
  306. package/dist/esm/constructs/parameter.js.map +1 -0
  307. package/dist/esm/constructs/provisioning-component.d.ts +91 -0
  308. package/dist/esm/constructs/provisioning-component.d.ts.map +1 -0
  309. package/dist/esm/constructs/provisioning-component.js +150 -0
  310. package/dist/esm/constructs/provisioning-component.js.map +1 -0
  311. package/dist/esm/constructs/resource/resource-proxy.d.ts +134 -0
  312. package/dist/esm/constructs/resource/resource-proxy.d.ts.map +1 -0
  313. package/dist/esm/constructs/resource/resource-proxy.js +517 -0
  314. package/dist/esm/constructs/resource/resource-proxy.js.map +1 -0
  315. package/dist/esm/constructs/resource/resource-query.d.ts +23 -0
  316. package/dist/esm/constructs/resource/resource-query.d.ts.map +1 -0
  317. package/dist/esm/constructs/resource/resource-query.js +69 -0
  318. package/dist/esm/constructs/resource/resource-query.js.map +1 -0
  319. package/dist/esm/constructs/resource/resource-registry.d.ts +99 -0
  320. package/dist/esm/constructs/resource/resource-registry.d.ts.map +1 -0
  321. package/dist/esm/constructs/resource/resource-registry.js +51 -0
  322. package/dist/esm/constructs/resource/resource-registry.js.map +1 -0
  323. package/dist/esm/constructs/resource/resource-type-registry.d.ts +46 -0
  324. package/dist/esm/constructs/resource/resource-type-registry.d.ts.map +1 -0
  325. package/dist/esm/constructs/resource/resource-type-registry.js +156 -0
  326. package/dist/esm/constructs/resource/resource-type-registry.js.map +1 -0
  327. package/dist/esm/constructs/resource/resource-utils.d.ts +60 -0
  328. package/dist/esm/constructs/resource/resource-utils.d.ts.map +1 -0
  329. package/dist/esm/constructs/resource/resource-utils.js +75 -0
  330. package/dist/esm/constructs/resource/resource-utils.js.map +1 -0
  331. package/dist/esm/constructs/resource/resource.d.ts +460 -0
  332. package/dist/esm/constructs/resource/resource.d.ts.map +1 -0
  333. package/dist/esm/constructs/resource/resource.js +582 -0
  334. package/dist/esm/constructs/resource/resource.js.map +1 -0
  335. package/dist/esm/constructs/stack.d.ts +110 -0
  336. package/dist/esm/constructs/stack.d.ts.map +1 -0
  337. package/dist/esm/constructs/stack.js +110 -0
  338. package/dist/esm/constructs/stack.js.map +1 -0
  339. package/dist/esm/constructs/variable.d.ts +63 -0
  340. package/dist/esm/constructs/variable.d.ts.map +1 -0
  341. package/dist/esm/constructs/variable.js +74 -0
  342. package/dist/esm/constructs/variable.js.map +1 -0
  343. package/dist/esm/deployment-context/deployment-context.d.ts +27 -0
  344. package/dist/esm/deployment-context/deployment-context.d.ts.map +1 -0
  345. package/dist/esm/deployment-context/deployment-context.js +4 -0
  346. package/dist/esm/deployment-context/deployment-context.js.map +1 -0
  347. package/dist/esm/expression/ast-nodes.d.ts +100 -0
  348. package/dist/esm/expression/ast-nodes.d.ts.map +1 -0
  349. package/dist/esm/expression/ast-nodes.js +125 -0
  350. package/dist/esm/expression/ast-nodes.js.map +1 -0
  351. package/dist/esm/expression/expressions.d.ts +164 -0
  352. package/dist/esm/expression/expressions.d.ts.map +1 -0
  353. package/dist/esm/expression/expressions.js +211 -0
  354. package/dist/esm/expression/expressions.js.map +1 -0
  355. package/dist/esm/fn.d.ts +194 -0
  356. package/dist/esm/fn.d.ts.map +1 -0
  357. package/dist/esm/fn.js +334 -0
  358. package/dist/esm/fn.js.map +1 -0
  359. package/dist/esm/index.d.ts +25 -0
  360. package/dist/esm/index.d.ts.map +1 -0
  361. package/dist/esm/index.js +17 -0
  362. package/dist/esm/index.js.map +1 -0
  363. package/dist/esm/internal.d.ts +13 -0
  364. package/dist/esm/internal.d.ts.map +1 -0
  365. package/dist/esm/internal.js +10 -0
  366. package/dist/esm/internal.js.map +1 -0
  367. package/dist/esm/naming/naming-policy.d.ts +56 -0
  368. package/dist/esm/naming/naming-policy.d.ts.map +1 -0
  369. package/dist/esm/naming/naming-policy.js +97 -0
  370. package/dist/esm/naming/naming-policy.js.map +1 -0
  371. package/dist/esm/naming/naming-rules.d.ts +15 -0
  372. package/dist/esm/naming/naming-rules.d.ts.map +1 -0
  373. package/dist/esm/naming/naming-rules.js +15 -0
  374. package/dist/esm/naming/naming-rules.js.map +1 -0
  375. package/dist/esm/package.json +8 -0
  376. package/dist/esm/serialization/contract/generated/ast.d.ts +508 -0
  377. package/dist/esm/serialization/contract/generated/ast.d.ts.map +1 -0
  378. package/dist/esm/serialization/contract/generated/ast.js +23 -0
  379. package/dist/esm/serialization/contract/generated/ast.js.map +1 -0
  380. package/dist/esm/serialization/contract/index.d.ts +2 -0
  381. package/dist/esm/serialization/contract/index.d.ts.map +1 -0
  382. package/dist/esm/serialization/contract/index.js +4 -0
  383. package/dist/esm/serialization/contract/index.js.map +1 -0
  384. package/dist/esm/serialization/index.d.ts +4 -0
  385. package/dist/esm/serialization/index.d.ts.map +1 -0
  386. package/dist/esm/serialization/index.js +5 -0
  387. package/dist/esm/serialization/index.js.map +1 -0
  388. package/dist/esm/serialization/json/deserialize.d.ts +24 -0
  389. package/dist/esm/serialization/json/deserialize.d.ts.map +1 -0
  390. package/dist/esm/serialization/json/deserialize.js +437 -0
  391. package/dist/esm/serialization/json/deserialize.js.map +1 -0
  392. package/dist/esm/serialization/json/encoding.d.ts +4 -0
  393. package/dist/esm/serialization/json/encoding.d.ts.map +1 -0
  394. package/dist/esm/serialization/json/encoding.js +319 -0
  395. package/dist/esm/serialization/json/encoding.js.map +1 -0
  396. package/dist/esm/serialization/json/expression.d.ts +32 -0
  397. package/dist/esm/serialization/json/expression.d.ts.map +1 -0
  398. package/dist/esm/serialization/json/expression.js +494 -0
  399. package/dist/esm/serialization/json/expression.js.map +1 -0
  400. package/dist/esm/serialization/json/lower.d.ts +41 -0
  401. package/dist/esm/serialization/json/lower.d.ts.map +1 -0
  402. package/dist/esm/serialization/json/lower.js +334 -0
  403. package/dist/esm/serialization/json/lower.js.map +1 -0
  404. package/dist/esm/serialization/json/pluralize-config.d.ts +3 -0
  405. package/dist/esm/serialization/json/pluralize-config.d.ts.map +1 -0
  406. package/dist/esm/serialization/json/pluralize-config.js +7 -0
  407. package/dist/esm/serialization/json/pluralize-config.js.map +1 -0
  408. package/dist/esm/serialization/json/serialize.d.ts +12 -0
  409. package/dist/esm/serialization/json/serialize.d.ts.map +1 -0
  410. package/dist/esm/serialization/json/serialize.js +389 -0
  411. package/dist/esm/serialization/json/serialize.js.map +1 -0
  412. package/dist/esm/serialization/json/util.d.ts +2 -0
  413. package/dist/esm/serialization/json/util.d.ts.map +1 -0
  414. package/dist/esm/serialization/json/util.js +19 -0
  415. package/dist/esm/serialization/json/util.js.map +1 -0
  416. package/dist/esm/serialization/utils.d.ts +3 -0
  417. package/dist/esm/serialization/utils.d.ts.map +1 -0
  418. package/dist/esm/serialization/utils.js +146 -0
  419. package/dist/esm/serialization/utils.js.map +1 -0
  420. package/dist/esm/shape/shape-registry.d.ts +51 -0
  421. package/dist/esm/shape/shape-registry.d.ts.map +1 -0
  422. package/dist/esm/shape/shape-registry.js +41 -0
  423. package/dist/esm/shape/shape-registry.js.map +1 -0
  424. package/dist/esm/shape/shape.d.ts +407 -0
  425. package/dist/esm/shape/shape.d.ts.map +1 -0
  426. package/dist/esm/shape/shape.js +424 -0
  427. package/dist/esm/shape/shape.js.map +1 -0
  428. package/dist/esm/shape/value-encoding.d.ts +121 -0
  429. package/dist/esm/shape/value-encoding.d.ts.map +1 -0
  430. package/dist/esm/shape/value-encoding.js +32 -0
  431. package/dist/esm/shape/value-encoding.js.map +1 -0
  432. package/dist/esm/types.d.ts +9 -0
  433. package/dist/esm/types.d.ts.map +1 -0
  434. package/dist/esm/types.js +4 -0
  435. package/dist/esm/types.js.map +1 -0
  436. package/dist/esm/util.d.ts +33 -0
  437. package/dist/esm/util.d.ts.map +1 -0
  438. package/dist/esm/util.js +74 -0
  439. package/dist/esm/util.js.map +1 -0
  440. package/package.json +117 -0
@@ -0,0 +1,389 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ import pluralizeLib from "./pluralize-config.js";
4
+ import { ResourceGroup } from "../../constructs/built-in-resources/resource-group.js";
5
+ import { STATE_PARENT_INDEX, unwrapResourceHandle, } from "../../constructs/resource/resource-proxy.js";
6
+ import { definedProps } from "../../util.js";
7
+ import { getShape } from "../../shape/shape-registry.js";
8
+ import { isExpression, unwrapExpression } from "../../expression/expressions.js";
9
+ import { isExpressionNode } from "../../expression/ast-nodes.js";
10
+ import { isResource, isResourceDeclaration, isLoopedResource, } from "../../constructs/resource/resource-utils.js";
11
+ import { sanitizeIdentifier } from "./util.js";
12
+ import { lowerState } from "./lower.js";
13
+ import { serializeDefinedObjectEntries, serializeExpression, } from "./expression.js";
14
+ const RESOURCE_RESERVED_KEYS = new Set([
15
+ "apiVersion",
16
+ "existing",
17
+ "id",
18
+ "name",
19
+ "scope",
20
+ "type",
21
+ "condition",
22
+ "dependsOn",
23
+ STATE_PARENT_INDEX,
24
+ ]);
25
+ function hasNestedResourceHandle(value) {
26
+ if (isExpression(value) || isExpressionNode(value)) {
27
+ return false;
28
+ }
29
+ if (isResource(value)) {
30
+ return true;
31
+ }
32
+ if (Array.isArray(value)) {
33
+ return value.some((item) => hasNestedResourceHandle(item));
34
+ }
35
+ if (typeof value === "object" && value !== null) {
36
+ return Object.values(value).some((item) => hasNestedResourceHandle(item));
37
+ }
38
+ return false;
39
+ }
40
+ function createSymbolMap(resources, stack) {
41
+ const symbolMap = new Map();
42
+ const counts = new Map();
43
+ const usedNames = new Set();
44
+ function allocateName(stem) {
45
+ let count = counts.get(stem) ?? 0;
46
+ let identifier;
47
+ do {
48
+ count++;
49
+ identifier = count === 1 ? stem : `${stem}${count}`;
50
+ } while (usedNames.has(identifier));
51
+ counts.set(stem, count);
52
+ usedNames.add(identifier);
53
+ return identifier;
54
+ }
55
+ for (const parameter of stack.parameters.listMetadata()) {
56
+ const identifier = allocateName(parameter.name);
57
+ symbolMap.set(parameter, identifier);
58
+ symbolMap.set(unwrapExpression(stack.parameters.get(parameter.name)), identifier);
59
+ }
60
+ for (const variable of stack.variables.listMetadata()) {
61
+ const identifier = allocateName(variable.name);
62
+ symbolMap.set(variable, identifier);
63
+ symbolMap.set(unwrapExpression(stack.variables.get(variable.name)), identifier);
64
+ }
65
+ for (const resource of resources) {
66
+ const typeName = resource.type.split("/").at(-1) ?? "resource";
67
+ const stem = sanitizeIdentifier(pluralizeLib.singular(typeName));
68
+ symbolMap.set(resource, allocateName(stem));
69
+ }
70
+ // Outputs have a separate Bicep namespace and are not same-stack expression
71
+ // targets, so they keep their authored names outside this symbol map.
72
+ return symbolMap;
73
+ }
74
+ /**
75
+ * Returns the nearest Resource ancestor whose type/scope makes it a Bicep
76
+ * `parent:` target. This includes both:
77
+ *
78
+ * - True ARM nested children (e.g. vault → secret), where the renderer
79
+ * emits `parent: vault`
80
+ * - Extension resources (e.g. storage → diagnosticSetting), where the
81
+ * renderer downgrades to `scope: storage`
82
+ *
83
+ * The renderer (`render.ts`) decides between `parent:` and `scope:` by
84
+ * checking ARM type nesting. The file-layout uses this relationship to
85
+ * co-locate related resources in the same Bicep file.
86
+ *
87
+ * Excludes deployment-scope boundaries like `ResourceGroup` (it's a parent
88
+ * ProvisioningComponent but not an ARM nesting/extension target — child resources are
89
+ * deployed *into* the resource group, expressed as `scope: rg` only when
90
+ * the deployment crosses the RG boundary).
91
+ */
92
+ function getArmParent(resource) {
93
+ const p = resource.parent;
94
+ if (p === undefined || !isResourceDeclaration(p)) {
95
+ return undefined;
96
+ }
97
+ // Exclude ResourceGroup (deployment scope boundary, not an ARM parent).
98
+ if (p.type === ResourceGroup.resourceType)
99
+ return undefined;
100
+ return p;
101
+ }
102
+ /**
103
+ * Walk a resource's ProvisioningComponent-tree ancestor chain to find the nearest
104
+ * `ResourceGroup` component, if any. Used by the serializer to emit a
105
+ * synthetic `scope: rgSymbol` field on regular resources whose deployment
106
+ * scope is a `ResourceGroup` component rather than the stack's `targetScope`.
107
+ *
108
+ * The file-layout pass consumes this signal to split the resource into a
109
+ * child Bicep module scoped to the ResourceGroup; the per-resource `scope:`
110
+ * is stripped at that point because inside the child module the resource is
111
+ * implicitly at the right scope.
112
+ *
113
+ * Returns `undefined` when the resource has no ResourceGroup ancestor (i.e.
114
+ * the stack itself is the nearest scope-providing component).
115
+ */
116
+ function getResourceGroupAncestor(resource) {
117
+ let current = resource.parent;
118
+ while (current !== undefined) {
119
+ if (isResourceDeclaration(current) && current.type === ResourceGroup.resourceType) {
120
+ return current;
121
+ }
122
+ current = current.parent;
123
+ }
124
+ return undefined;
125
+ }
126
+ function collectAllResources(root) {
127
+ const result = [];
128
+ root.visit((node) => {
129
+ if (isResourceDeclaration(node)) {
130
+ result.push(node.self);
131
+ }
132
+ });
133
+ return result;
134
+ }
135
+ function serializeResourceProperties(resource, symbolMap) {
136
+ const rawResource = unwrapResourceHandle(resource);
137
+ const properties = {
138
+ name: serializeExpression(rawResource.name, symbolMap),
139
+ };
140
+ const armParent = getArmParent(resource);
141
+ if (armParent !== undefined) {
142
+ const parentId = symbolMap.get(armParent);
143
+ if (parentId === undefined) {
144
+ throw new Error(`Missing parent symbol for resource type ${rawResource.type}.`);
145
+ }
146
+ const parentNode = { kind: "identifier", id: parentId };
147
+ // Explicit parent index recorded by `Resource`'s constructor when a
148
+ // child is created with `parent.at(i)` / `parent.current()` as its
149
+ // context. When the child is created under a looped parent without an
150
+ // explicit index (only reachable by unwrapping the raw handle out of a
151
+ // `LoopedResource` — not part of the user-facing API), we emit
152
+ // `parent: parentSym` unchanged; Bicep rejects the resulting
153
+ // `parent: parents` (an array) at validation, producing a loud failure
154
+ // instead of a silently-guessed index variable.
155
+ const parentIndex = rawResource[STATE_PARENT_INDEX];
156
+ if (parentIndex !== undefined) {
157
+ properties.parent = {
158
+ kind: "array-access",
159
+ base: parentNode,
160
+ index: serializeExpression(parentIndex, symbolMap),
161
+ nullish: false,
162
+ fromEnd: false,
163
+ };
164
+ }
165
+ else {
166
+ properties.parent = parentNode;
167
+ }
168
+ }
169
+ // Existing resources may carry an explicit scope expression for cross-RG
170
+ // / cross-sub / cross-MG / cross-tenant lookups. Read from state directly;
171
+ // non-existing resources never have `scope` on state.
172
+ const scopeValue = rawResource.scope;
173
+ if (scopeValue !== undefined) {
174
+ properties.scope = serializeExpression(scopeValue, symbolMap);
175
+ }
176
+ else if (armParent === undefined) {
177
+ const rgAncestor = getResourceGroupAncestor(resource);
178
+ if (rgAncestor !== undefined) {
179
+ const groupId = symbolMap.get(rgAncestor);
180
+ if (groupId === undefined) {
181
+ throw new Error("Resource group not found in symbol map.");
182
+ }
183
+ properties.scope = {
184
+ kind: "identifier",
185
+ id: groupId,
186
+ };
187
+ }
188
+ }
189
+ const dependsOn = rawResource["dependsOn"];
190
+ if (dependsOn !== undefined) {
191
+ properties.dependsOn = {
192
+ kind: "array",
193
+ items: dependsOn.map((dependency) => {
194
+ const identifier = symbolMap.get(dependency);
195
+ if (identifier === undefined) {
196
+ throw new Error("Dependency not found in symbol map. Ensure it belongs to the same stack.");
197
+ }
198
+ return { kind: "identifier", id: identifier };
199
+ }),
200
+ };
201
+ }
202
+ // Build the per-resource custom property bag first, applying ARM-
203
+ // shape lowering (rename/flatten/encode) when a shape is
204
+ // registered for `(type, apiVersion)`. The registry resolves
205
+ // discriminated variants from the instance state. No-op when no
206
+ // shape is registered for this resource type.
207
+ const descriptor = typeof rawResource.type === "string" && typeof rawResource.apiVersion === "string"
208
+ ? getShape(rawResource.type, rawResource.apiVersion, rawResource)
209
+ : undefined;
210
+ const userProps = {};
211
+ for (const [key, value] of Object.entries(rawResource)) {
212
+ if (rawResource.existing)
213
+ continue;
214
+ if (value === undefined || RESOURCE_RESERVED_KEYS.has(key) || hasNestedResourceHandle(value)) {
215
+ continue;
216
+ }
217
+ userProps[key] = value;
218
+ }
219
+ const loweredUserProps = descriptor ? lowerState(userProps, descriptor) : userProps;
220
+ for (const key of Object.keys(loweredUserProps).sort()) {
221
+ properties[key] = serializeExpression(loweredUserProps[key], symbolMap);
222
+ }
223
+ return properties;
224
+ }
225
+ function serializeResource(resource, symbolMap) {
226
+ const resourceId = symbolMap.get(resource);
227
+ if (resourceId === undefined) {
228
+ throw new Error(`Missing synthesized symbol for resource type ${resource.type}.`);
229
+ }
230
+ const properties = serializeResourceProperties(resource, symbolMap);
231
+ const rawResource = unwrapResourceHandle(resource);
232
+ const condition = rawResource["condition"] !== undefined
233
+ ? serializeExpression(rawResource["condition"], symbolMap)
234
+ : undefined;
235
+ // Loop metadata lives on `LoopedResource.loop` — a public field on the
236
+ // wrapper subclass. Scalar `Resource` instances don't have one.
237
+ const loopCtx = isLoopedResource(resource) ? resource.loop : undefined;
238
+ // Build decorators for the resource (currently only batchSize from forEach)
239
+ const batchSize = loopCtx?.batchSize;
240
+ const decorators = batchSize !== undefined ? { batchSize } : undefined;
241
+ // Wrap `value` in `if-condition` / `for-expression` when the resource is
242
+ // guarded / looped. Bicep source order is `for` outer, `if` inner —
243
+ // `[for item in coll: if (cond) { ... }]` — so wrap if-condition first,
244
+ // then for-expression around it.
245
+ let wireValue = { kind: "object", value: properties };
246
+ if (condition !== undefined) {
247
+ wireValue = { kind: "if-condition", condition, body: wireValue };
248
+ }
249
+ if (loopCtx !== undefined) {
250
+ wireValue = {
251
+ kind: "for-expression",
252
+ itemVariable: loopCtx.itemVariable,
253
+ ...(loopCtx.indexVariable !== undefined ? { indexVariable: loopCtx.indexVariable } : {}),
254
+ collection: serializeExpression(loopCtx.collection, symbolMap),
255
+ body: wireValue,
256
+ };
257
+ }
258
+ const node = {
259
+ bicepIdentifier: resourceId,
260
+ type: resource.type,
261
+ apiVersion: resource.apiVersion,
262
+ existing: resource.existing ?? false,
263
+ value: wireValue,
264
+ ...(decorators !== undefined ? { decorators } : {}),
265
+ };
266
+ return [resourceId, node];
267
+ }
268
+ function buildDecorators(decl, symbolMap) {
269
+ const d = {};
270
+ if (decl.description !== undefined)
271
+ d.description = decl.description;
272
+ if ("secure" in decl && decl.secure)
273
+ d.secure = true;
274
+ if ("minValue" in decl && decl.minValue !== undefined) {
275
+ d.minValue = decl.minValue;
276
+ }
277
+ if ("maxValue" in decl && decl.maxValue !== undefined) {
278
+ d.maxValue = decl.maxValue;
279
+ }
280
+ if ("minLength" in decl && decl.minLength !== undefined) {
281
+ d.minLength = decl.minLength;
282
+ }
283
+ if ("maxLength" in decl && decl.maxLength !== undefined) {
284
+ d.maxLength = decl.maxLength;
285
+ }
286
+ if ("metadata" in decl && decl.metadata !== undefined) {
287
+ d.metadata = serializeDefinedObjectEntries(decl.metadata, symbolMap);
288
+ }
289
+ if ("allowed" in decl && decl.allowed !== undefined) {
290
+ d.allowed = decl.allowed.map((v) => serializeExpression(v, symbolMap));
291
+ }
292
+ if ("discriminator" in decl && decl.discriminator !== undefined) {
293
+ d.discriminator = decl.discriminator;
294
+ }
295
+ if ("sealed" in decl && decl.sealed)
296
+ d.sealed = true;
297
+ if ("export" in decl && decl.export)
298
+ d.export = true;
299
+ return Object.keys(d).length > 0 ? d : undefined;
300
+ }
301
+ function serializeParameters(stack, symbolMap) {
302
+ if (stack.parameters.size === 0)
303
+ return undefined;
304
+ return Object.fromEntries(stack.parameters.listMetadata().map((p) => {
305
+ const identifier = symbolMap.get(p);
306
+ const node = definedProps({
307
+ bicepIdentifier: identifier,
308
+ valueType: { kind: "primitive-type", name: p.type },
309
+ defaultValue: p.defaultValue !== undefined
310
+ ? serializeExpression(p.defaultValue, symbolMap)
311
+ : undefined,
312
+ decorators: buildDecorators(p, symbolMap),
313
+ });
314
+ return [identifier, node];
315
+ }));
316
+ }
317
+ function serializeVariables(stack, symbolMap) {
318
+ if (stack.variables.size === 0)
319
+ return undefined;
320
+ return Object.fromEntries(stack.variables.listMetadata().map((v) => {
321
+ const identifier = symbolMap.get(v);
322
+ const node = definedProps({
323
+ bicepIdentifier: identifier,
324
+ value: serializeExpression(v.value, symbolMap),
325
+ decorators: buildDecorators(v, symbolMap),
326
+ });
327
+ return [identifier, node];
328
+ }));
329
+ }
330
+ function serializeOutputs(stack, symbolMap) {
331
+ if (stack.outputs.size === 0)
332
+ return undefined;
333
+ return Object.fromEntries(stack.outputs.list().map((o) => {
334
+ let value;
335
+ if (isResource(o.value)) {
336
+ const symbol = symbolMap.get(o.value);
337
+ if (symbol === undefined) {
338
+ throw new Error(`Resource not found in symbol map. Ensure it belongs to the same stack.`);
339
+ }
340
+ value = { kind: "identifier", id: symbol };
341
+ }
342
+ else {
343
+ value = serializeExpression(o.value, symbolMap);
344
+ }
345
+ const node = definedProps({
346
+ bicepIdentifier: o.name,
347
+ valueType: { kind: "primitive-type", name: o.type },
348
+ value,
349
+ decorators: buildDecorators(o, symbolMap),
350
+ });
351
+ return [o.name, node];
352
+ }));
353
+ }
354
+ function serializeFile(stack, resources, symbolMap) {
355
+ return {
356
+ ...(stack.targetScope !== "resourceGroup" ? { targetScope: stack.targetScope } : {}),
357
+ fileName: `${stack.name}.bicep`,
358
+ ...definedProps({
359
+ parameters: serializeParameters(stack, symbolMap),
360
+ variables: serializeVariables(stack, symbolMap),
361
+ resources: resources.length === 0
362
+ ? undefined
363
+ : Object.fromEntries(resources.map((resource) => serializeResource(resource, symbolMap))),
364
+ outputs: serializeOutputs(stack, symbolMap),
365
+ }),
366
+ };
367
+ }
368
+ /**
369
+ * Serializes a stack or a nonempty array of stacks into a JSON-compatible
370
+ * {@link SerializationDocument} with one `infras` entry per stack.
371
+ *
372
+ * The document preserves declarations and symbolic expressions for rendering
373
+ * or restoration. Pass `JSON.stringify(serialize(stack))` to {@link deserialize}
374
+ * to reconstruct the authored stack; this does not deploy any resources.
375
+ */
376
+ export function serialize(input) {
377
+ const stacks = Array.isArray(input) ? input : [input];
378
+ if (stacks.length === 0) {
379
+ throw new Error("Cannot serialize an empty stack collection.");
380
+ }
381
+ return {
382
+ infras: stacks.map((stack) => {
383
+ const resources = collectAllResources(stack);
384
+ const symbolMap = createSymbolMap(resources, stack);
385
+ return serializeFile(stack, resources, symbolMap);
386
+ }),
387
+ };
388
+ }
389
+ //# sourceMappingURL=serialize.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"serialize.js","sourceRoot":"","sources":["../../../../src/serialization/json/serialize.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,OAAO,YAAY,MAAM,uBAAuB,CAAC;AAOjD,OAAO,EAAE,aAAa,EAAE,MAAM,uDAAuD,CAAC;AACtF,OAAO,EACL,kBAAkB,EAClB,oBAAoB,GACrB,MAAM,6CAA6C,CAAC;AACrD,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,QAAQ,EAAE,MAAM,+BAA+B,CAAC;AACzD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,iCAAiC,CAAC;AACjF,OAAO,EAAE,gBAAgB,EAAE,MAAM,+BAA+B,CAAC;AACjE,OAAO,EACL,UAAU,EACV,qBAAqB,EACrB,gBAAgB,GACjB,MAAM,6CAA6C,CAAC;AAYrD,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACxC,OAAO,EACL,6BAA6B,EAC7B,mBAAmB,GAGpB,MAAM,iBAAiB,CAAC;AAEzB,MAAM,sBAAsB,GAAG,IAAI,GAAG,CAAS;IAC7C,YAAY;IACZ,UAAU;IACV,IAAI;IACJ,MAAM;IACN,OAAO;IACP,MAAM;IACN,WAAW;IACX,WAAW;IACX,kBAAkB;CACnB,CAAC,CAAC;AAEH,SAAS,uBAAuB,CAAC,KAAc;IAC7C,IAAI,YAAY,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE,CAAC;QACnD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,IAAI,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QACtB,OAAO,IAAI,CAAC;IACd,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,IAAI,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,EAAE,CAAC;QAChD,OAAO,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,eAAe,CACtB,SAAyC,EACzC,KAAY;IAEZ,MAAM,SAAS,GAA2B,IAAI,GAAG,EAAE,CAAC;IACpD,MAAM,MAAM,GAAG,IAAI,GAAG,EAAkB,CAAC;IACzC,MAAM,SAAS,GAAG,IAAI,GAAG,EAAU,CAAC;IAEpC,SAAS,YAAY,CAAC,IAAY;QAChC,IAAI,KAAK,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,UAAkB,CAAC;QACvB,GAAG,CAAC;YACF,KAAK,EAAE,CAAC;YACR,UAAU,GAAG,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,KAAK,EAAE,CAAC;QACtD,CAAC,QAAQ,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE;QACpC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACxB,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAC1B,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,UAAU,CAAC,YAAY,EAAE,EAAE,CAAC;QACxD,MAAM,UAAU,GAAG,YAAY,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;QAChD,SAAS,CAAC,GAAG,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;QACrC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,CAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IACrF,CAAC;IACD,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,EAAE,CAAC;QACtD,MAAM,UAAU,GAAG,YAAY,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;QAC/C,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;QACpC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAE,CAAC,EAAE,UAAU,CAAC,CAAC;IACnF,CAAC;IACD,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,QAAQ,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC;QAC/D,MAAM,IAAI,GAAG,kBAAkB,CAAC,YAAY,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;QACjE,SAAS,CAAC,GAAG,CAAC,QAAQ,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IAC9C,CAAC;IAED,4EAA4E;IAC5E,sEAAsE;IACtE,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,SAAS,YAAY,CAAC,QAA6B;IACjD,MAAM,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC1B,IAAI,CAAC,KAAK,SAAS,IAAI,CAAC,qBAAqB,CAAC,CAAC,CAAC,EAAE,CAAC;QACjD,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,wEAAwE;IACxE,IAAI,CAAC,CAAC,IAAI,KAAK,aAAa,CAAC,YAAY;QAAE,OAAO,SAAS,CAAC;IAC5D,OAAO,CAAC,CAAC;AACX,CAAC;AAED;;;;;;;;;;;;;GAaG;AACH,SAAS,wBAAwB,CAAC,QAA6B;IAC7D,IAAI,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC;IAC9B,OAAO,OAAO,KAAK,SAAS,EAAE,CAAC;QAC7B,IAAI,qBAAqB,CAAC,OAAO,CAAC,IAAI,OAAO,CAAC,IAAI,KAAK,aAAa,CAAC,YAAY,EAAE,CAAC;YAClF,OAAO,OAAwB,CAAC;QAClC,CAAC;QACD,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC;IAC3B,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,SAAS,mBAAmB,CAAC,IAA2B;IACtD,MAAM,MAAM,GAA0B,EAAE,CAAC;IACzC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,EAAE;QAClB,IAAI,qBAAqB,CAAC,IAAI,CAAC,EAAE,CAAC;YAChC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,IAA2B,CAAC,CAAC;QAChD,CAAC;IACH,CAAC,CAAC,CAAC;IACH,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,SAAS,2BAA2B,CAClC,QAA6B,EAC7B,SAAiC;IAEjC,MAAM,WAAW,GAAG,oBAAoB,CAAC,QAA+B,CAAC,CAAC;IAC1E,MAAM,UAAU,GAAmC;QACjD,IAAI,EAAE,mBAAmB,CAAC,WAAW,CAAC,IAAI,EAAE,SAAS,CAAC;KACvD,CAAC;IAEF,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACzC,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,SAAS,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QAE1C,IAAI,QAAQ,KAAK,SAAS,EAAE,CAAC;YAC3B,MAAM,IAAI,KAAK,CAAC,2CAA2C,WAAW,CAAC,IAAI,GAAG,CAAC,CAAC;QAClF,CAAC;QAED,MAAM,UAAU,GAAmB,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,QAAQ,EAAE,CAAC;QACxE,oEAAoE;QACpE,mEAAmE;QACnE,sEAAsE;QACtE,uEAAuE;QACvE,+DAA+D;QAC/D,6DAA6D;QAC7D,uEAAuE;QACvE,gDAAgD;QAChD,MAAM,WAAW,GAAI,WAAkD,CAAC,kBAAkB,CAAC,CAAC;QAE5F,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;YAC9B,UAAU,CAAC,MAAM,GAAG;gBAClB,IAAI,EAAE,cAAc;gBACpB,IAAI,EAAE,UAAU;gBAChB,KAAK,EAAE,mBAAmB,CAAC,WAAgC,EAAE,SAAS,CAAC;gBACvE,OAAO,EAAE,KAAK;gBACd,OAAO,EAAE,KAAK;aACf,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,UAAU,CAAC,MAAM,GAAG,UAAU,CAAC;QACjC,CAAC;IACH,CAAC;IAED,yEAAyE;IACzE,2EAA2E;IAC3E,sDAAsD;IACtD,MAAM,UAAU,GAAI,WAAkD,CAAC,KAAK,CAAC;IAC7E,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,UAAU,CAAC,KAAK,GAAG,mBAAmB,CAAC,UAA+B,EAAE,SAAS,CAAC,CAAC;IACrF,CAAC;SAAM,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QACnC,MAAM,UAAU,GAAG,wBAAwB,CAAC,QAAQ,CAAC,CAAC;QACtD,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;YAC7B,MAAM,OAAO,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC1C,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;gBAC1B,MAAM,IAAI,KAAK,CAAC,yCAAyC,CAAC,CAAC;YAC7D,CAAC;YACD,UAAU,CAAC,KAAK,GAAG;gBACjB,IAAI,EAAE,YAAY;gBAClB,EAAE,EAAE,OAAO;aACZ,CAAC;QACJ,CAAC;IACH,CAAC;IAED,MAAM,SAAS,GAAI,WAAkD,CAAC,WAAW,CACrC,CAAC;IAC7C,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,UAAU,CAAC,SAAS,GAAG;YACrB,IAAI,EAAE,OAAO;YACb,KAAK,EAAE,SAAS,CAAC,GAAG,CAAC,CAAC,UAAU,EAAE,EAAE;gBAClC,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;gBAC7C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;oBAC7B,MAAM,IAAI,KAAK,CACb,0EAA0E,CAC3E,CAAC;gBACJ,CAAC;gBACD,OAAO,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC;YAChD,CAAC,CAAC;SACH,CAAC;IACJ,CAAC;IAED,kEAAkE;IAClE,yDAAyD;IACzD,6DAA6D;IAC7D,gEAAgE;IAChE,8CAA8C;IAC9C,MAAM,UAAU,GACd,OAAO,WAAW,CAAC,IAAI,KAAK,QAAQ,IAAI,OAAO,WAAW,CAAC,UAAU,KAAK,QAAQ;QAChF,CAAC,CAAC,QAAQ,CACN,WAAW,CAAC,IAAI,EAChB,WAAW,CAAC,UAAU,EACtB,WAAiD,CAClD;QACH,CAAC,CAAC,SAAS,CAAC;IAEhB,MAAM,SAAS,GAA4B,EAAE,CAAC;IAC9C,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,WAAW,CAAC,EAAE,CAAC;QACvD,IAAI,WAAW,CAAC,QAAQ;YAAE,SAAS;QACnC,IAAI,KAAK,KAAK,SAAS,IAAI,sBAAsB,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE,CAAC;YAC7F,SAAS;QACX,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;IACzB,CAAC;IAED,MAAM,gBAAgB,GAAG,UAAU,CAAC,CAAC,CAAC,UAAU,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC;IAEpF,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC;QACvD,UAAU,CAAC,GAAG,CAAC,GAAG,mBAAmB,CAAC,gBAAgB,CAAC,GAAG,CAAsB,EAAE,SAAS,CAAC,CAAC;IAC/F,CAAC;IAED,OAAO,UAAU,CAAC;AACpB,CAAC;AAED,SAAS,iBAAiB,CACxB,QAA6B,EAC7B,SAAiC;IAEjC,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IAE3C,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,gDAAgD,QAAQ,CAAC,IAAI,GAAG,CAAC,CAAC;IACpF,CAAC;IAED,MAAM,UAAU,GAAG,2BAA2B,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC;IACpE,MAAM,WAAW,GAAG,oBAAoB,CAAC,QAA+B,CAGvE,CAAC;IAEF,MAAM,SAAS,GACb,WAAW,CAAC,WAAW,CAAC,KAAK,SAAS;QACpC,CAAC,CAAC,mBAAmB,CAAC,WAAW,CAAC,WAAW,CAAsB,EAAE,SAAS,CAAC;QAC/E,CAAC,CAAC,SAAS,CAAC;IAEhB,uEAAuE;IACvE,gEAAgE;IAChE,MAAM,OAAO,GAAG,gBAAgB,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAC;IAEvE,4EAA4E;IAC5E,MAAM,SAAS,GAAG,OAAO,EAAE,SAAS,CAAC;IACrC,MAAM,UAAU,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC;IAEvE,yEAAyE;IACzE,oEAAoE;IACpE,wEAAwE;IACxE,iCAAiC;IACjC,IAAI,SAAS,GAAuB,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,CAAC;IAC1E,IAAI,SAAS,KAAK,SAAS,EAAE,CAAC;QAC5B,SAAS,GAAG,EAAE,IAAI,EAAE,cAAc,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC;IACnE,CAAC;IACD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;QAC1B,SAAS,GAAG;YACV,IAAI,EAAE,gBAAgB;YACtB,YAAY,EAAE,OAAO,CAAC,YAAY;YAClC,GAAG,CAAC,OAAO,CAAC,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,OAAO,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YACxF,UAAU,EAAE,mBAAmB,CAAC,OAAO,CAAC,UAA+B,EAAE,SAAS,CAAC;YACnF,IAAI,EAAE,SAAS;SAChB,CAAC;IACJ,CAAC;IAED,MAAM,IAAI,GAA4B;QACpC,eAAe,EAAE,UAAU;QAC3B,IAAI,EAAE,QAAQ,CAAC,IAAI;QACnB,UAAU,EAAE,QAAQ,CAAC,UAAU;QAC/B,QAAQ,EAAE,QAAQ,CAAC,QAAQ,IAAI,KAAK;QACpC,KAAK,EAAE,SAAS;QAChB,GAAG,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KACpD,CAAC;IAEF,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;AAC5B,CAAC;AAED,SAAS,eAAe,CACtB,IAA2D,EAC3D,SAAiC;IAEjC,MAAM,CAAC,GAA4B,EAAE,CAAC;IAEtC,IAAI,IAAI,CAAC,WAAW,KAAK,SAAS;QAAE,CAAC,CAAC,WAAW,GAAG,IAAI,CAAC,WAAW,CAAC;IACrE,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM;QAAE,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;IACrD,IAAI,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACtD,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC7B,CAAC;IACD,IAAI,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACtD,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC7B,CAAC;IACD,IAAI,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACxD,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAC/B,CAAC;IACD,IAAI,WAAW,IAAI,IAAI,IAAI,IAAI,CAAC,SAAS,KAAK,SAAS,EAAE,CAAC;QACxD,CAAC,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAC;IAC/B,CAAC;IACD,IAAI,UAAU,IAAI,IAAI,IAAI,IAAI,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;QACtD,CAAC,CAAC,QAAQ,GAAG,6BAA6B,CACxC,IAAI,CAAC,QAEJ,EACD,SAAS,CACV,CAAC;IACJ,CAAC;IACD,IAAI,SAAS,IAAI,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QACpD,CAAC,CAAC,OAAO,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,mBAAmB,CAAC,CAAsB,EAAE,SAAS,CAAC,CAAC,CAAC;IAC9F,CAAC;IACD,IAAI,eAAe,IAAI,IAAI,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;QAChE,CAAC,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;IACvC,CAAC;IACD,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM;QAAE,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;IACrD,IAAI,QAAQ,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM;QAAE,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC;IAErD,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAE,CAAoB,CAAC,CAAC,CAAC,SAAS,CAAC;AACvE,CAAC;AAED,SAAS,mBAAmB,CAC1B,KAAY,EACZ,SAAiC;IAEjC,IAAI,KAAK,CAAC,UAAU,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAClD,OAAO,MAAM,CAAC,WAAW,CACvB,KAAK,CAAC,UAAU,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACxC,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;QACrC,MAAM,IAAI,GAA6B,YAAY,CAAC;YAClD,eAAe,EAAE,UAAU;YAC3B,SAAS,EAAE,EAAE,IAAI,EAAE,gBAAyB,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YAC5D,YAAY,EACV,CAAC,CAAC,YAAY,KAAK,SAAS;gBAC1B,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,YAAiC,EAAE,SAAS,CAAC;gBACrE,CAAC,CAAC,SAAS;YACf,UAAU,EAAE,eAAe,CAAC,CAAC,EAAE,SAAS,CAAC;SAC1C,CAAC,CAAC;QACH,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,kBAAkB,CACzB,KAAY,EACZ,SAAiC;IAEjC,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IACjD,OAAO,MAAM,CAAC,WAAW,CACvB,KAAK,CAAC,SAAS,CAAC,YAAY,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QACvC,MAAM,UAAU,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAE,CAAC;QACrC,MAAM,IAAI,GAA4B,YAAY,CAAC;YACjD,eAAe,EAAE,UAAU;YAC3B,KAAK,EAAE,mBAAmB,CAAC,CAAC,CAAC,KAA0B,EAAE,SAAS,CAAC;YACnE,UAAU,EAAE,eAAe,CAAC,CAAC,EAAE,SAAS,CAAC;SAC1C,CAAC,CAAC;QACH,OAAO,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC5B,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,gBAAgB,CACvB,KAAY,EACZ,SAAiC;IAEjC,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,SAAS,CAAC;IAC/C,OAAO,MAAM,CAAC,WAAW,CACvB,KAAK,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE;QAC7B,IAAI,KAAqB,CAAC;QAC1B,IAAI,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACxB,MAAM,MAAM,GAAG,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;YACtC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,IAAI,KAAK,CAAC,wEAAwE,CAAC,CAAC;YAC5F,CAAC;YACD,KAAK,GAAG,EAAE,IAAI,EAAE,YAAY,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC;QAC7C,CAAC;aAAM,CAAC;YACN,KAAK,GAAG,mBAAmB,CAAC,CAAC,CAAC,KAA0B,EAAE,SAAS,CAAC,CAAC;QACvE,CAAC;QAED,MAAM,IAAI,GAA0B,YAAY,CAAC;YAC/C,eAAe,EAAE,CAAC,CAAC,IAAI;YACvB,SAAS,EAAE,EAAE,IAAI,EAAE,gBAAyB,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE;YAC5D,KAAK;YACL,UAAU,EAAE,eAAe,CAAC,CAAC,EAAE,SAAS,CAAC;SAC1C,CAAC,CAAC;QACH,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxB,CAAC,CAAC,CACH,CAAC;AACJ,CAAC;AAED,SAAS,aAAa,CACpB,KAAY,EACZ,SAAyC,EACzC,SAAiC;IAEjC,OAAO;QACL,GAAG,CAAC,KAAK,CAAC,WAAW,KAAK,eAAe,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,KAAK,CAAC,WAAW,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACpF,QAAQ,EAAE,GAAG,KAAK,CAAC,IAAI,QAAQ;QAC/B,GAAG,YAAY,CAAC;YACd,UAAU,EAAE,mBAAmB,CAAC,KAAK,EAAE,SAAS,CAAC;YACjD,SAAS,EAAE,kBAAkB,CAAC,KAAK,EAAE,SAAS,CAAC;YAC/C,SAAS,EACP,SAAS,CAAC,MAAM,KAAK,CAAC;gBACpB,CAAC,CAAC,SAAS;gBACX,CAAC,CAAC,MAAM,CAAC,WAAW,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,QAAQ,EAAE,EAAE,CAAC,iBAAiB,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC;YAC7F,OAAO,EAAE,gBAAgB,CAAC,KAAK,EAAE,SAAS,CAAC;SAC5C,CAAC;KACH,CAAC;AACJ,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,SAAS,CAAC,KAA+B;IACvD,MAAM,MAAM,GAAG,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IACtD,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IACjE,CAAC;IAED,OAAO;QACL,MAAM,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAAE,EAAE;YAC3B,MAAM,SAAS,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;YAC7C,MAAM,SAAS,GAAG,eAAe,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;YACpD,OAAO,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC;QACpD,CAAC,CAAC;KACH,CAAC;AACJ,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport pluralizeLib from \"./pluralize-config.js\";\nimport type { ProvisioningComponent } from \"../../constructs/provisioning-component.js\";\nimport type { ParameterMetadata } from \"../../constructs/parameter.js\";\nimport type { VariableMetadata } from \"../../constructs/variable.js\";\nimport type { OutputMetadata } from \"../../constructs/output.js\";\nimport type { Stack } from \"../../constructs/stack.js\";\nimport type { Resource, ResourceDeclaration } from \"../../constructs/resource/resource.js\";\nimport { ResourceGroup } from \"../../constructs/built-in-resources/resource-group.js\";\nimport {\n STATE_PARENT_INDEX,\n unwrapResourceHandle,\n} from \"../../constructs/resource/resource-proxy.js\";\nimport { definedProps } from \"../../util.js\";\nimport { getShape } from \"../../shape/shape-registry.js\";\nimport { isExpression, unwrapExpression } from \"../../expression/expressions.js\";\nimport { isExpressionNode } from \"../../expression/ast-nodes.js\";\nimport {\n isResource,\n isResourceDeclaration,\n isLoopedResource,\n} from \"../../constructs/resource/resource-utils.js\";\nimport type {\n DeclarableBodyNode,\n DecoratorsNode,\n ExpressionNode,\n InfraNode,\n OutputDeclarationNode,\n ParameterDeclarationNode,\n ResourceDeclarationNode,\n SerializationDocument,\n VariableDeclarationNode,\n} from \"../contract/index.js\";\nimport { sanitizeIdentifier } from \"./util.js\";\nimport { lowerState } from \"./lower.js\";\nimport {\n serializeDefinedObjectEntries,\n serializeExpression,\n type SerializableValue,\n type SerializationSymbolMap,\n} from \"./expression.js\";\n\nconst RESOURCE_RESERVED_KEYS = new Set<string>([\n \"apiVersion\",\n \"existing\",\n \"id\",\n \"name\",\n \"scope\",\n \"type\",\n \"condition\",\n \"dependsOn\",\n STATE_PARENT_INDEX,\n]);\n\nfunction hasNestedResourceHandle(value: unknown): boolean {\n if (isExpression(value) || isExpressionNode(value)) {\n return false;\n }\n\n if (isResource(value)) {\n return true;\n }\n\n if (Array.isArray(value)) {\n return value.some((item) => hasNestedResourceHandle(item));\n }\n\n if (typeof value === \"object\" && value !== null) {\n return Object.values(value).some((item) => hasNestedResourceHandle(item));\n }\n\n return false;\n}\n\nfunction createSymbolMap(\n resources: readonly ResourceDeclaration[],\n stack: Stack,\n): SerializationSymbolMap {\n const symbolMap: SerializationSymbolMap = new Map();\n const counts = new Map<string, number>();\n const usedNames = new Set<string>();\n\n function allocateName(stem: string): string {\n let count = counts.get(stem) ?? 0;\n let identifier: string;\n do {\n count++;\n identifier = count === 1 ? stem : `${stem}${count}`;\n } while (usedNames.has(identifier));\n counts.set(stem, count);\n usedNames.add(identifier);\n return identifier;\n }\n\n for (const parameter of stack.parameters.listMetadata()) {\n const identifier = allocateName(parameter.name);\n symbolMap.set(parameter, identifier);\n symbolMap.set(unwrapExpression(stack.parameters.get(parameter.name)!), identifier);\n }\n for (const variable of stack.variables.listMetadata()) {\n const identifier = allocateName(variable.name);\n symbolMap.set(variable, identifier);\n symbolMap.set(unwrapExpression(stack.variables.get(variable.name)!), identifier);\n }\n for (const resource of resources) {\n const typeName = resource.type.split(\"/\").at(-1) ?? \"resource\";\n const stem = sanitizeIdentifier(pluralizeLib.singular(typeName));\n symbolMap.set(resource, allocateName(stem));\n }\n\n // Outputs have a separate Bicep namespace and are not same-stack expression\n // targets, so they keep their authored names outside this symbol map.\n return symbolMap;\n}\n\n/**\n * Returns the nearest Resource ancestor whose type/scope makes it a Bicep\n * `parent:` target. This includes both:\n *\n * - True ARM nested children (e.g. vault → secret), where the renderer\n * emits `parent: vault`\n * - Extension resources (e.g. storage → diagnosticSetting), where the\n * renderer downgrades to `scope: storage`\n *\n * The renderer (`render.ts`) decides between `parent:` and `scope:` by\n * checking ARM type nesting. The file-layout uses this relationship to\n * co-locate related resources in the same Bicep file.\n *\n * Excludes deployment-scope boundaries like `ResourceGroup` (it's a parent\n * ProvisioningComponent but not an ARM nesting/extension target — child resources are\n * deployed *into* the resource group, expressed as `scope: rg` only when\n * the deployment crosses the RG boundary).\n */\nfunction getArmParent(resource: ResourceDeclaration): ResourceDeclaration | undefined {\n const p = resource.parent;\n if (p === undefined || !isResourceDeclaration(p)) {\n return undefined;\n }\n // Exclude ResourceGroup (deployment scope boundary, not an ARM parent).\n if (p.type === ResourceGroup.resourceType) return undefined;\n return p;\n}\n\n/**\n * Walk a resource's ProvisioningComponent-tree ancestor chain to find the nearest\n * `ResourceGroup` component, if any. Used by the serializer to emit a\n * synthetic `scope: rgSymbol` field on regular resources whose deployment\n * scope is a `ResourceGroup` component rather than the stack's `targetScope`.\n *\n * The file-layout pass consumes this signal to split the resource into a\n * child Bicep module scoped to the ResourceGroup; the per-resource `scope:`\n * is stripped at that point because inside the child module the resource is\n * implicitly at the right scope.\n *\n * Returns `undefined` when the resource has no ResourceGroup ancestor (i.e.\n * the stack itself is the nearest scope-providing component).\n */\nfunction getResourceGroupAncestor(resource: ResourceDeclaration): ResourceGroup | undefined {\n let current = resource.parent;\n while (current !== undefined) {\n if (isResourceDeclaration(current) && current.type === ResourceGroup.resourceType) {\n return current as ResourceGroup;\n }\n current = current.parent;\n }\n return undefined;\n}\n\nfunction collectAllResources(root: ProvisioningComponent): ResourceDeclaration[] {\n const result: ResourceDeclaration[] = [];\n root.visit((node) => {\n if (isResourceDeclaration(node)) {\n result.push(node.self as ResourceDeclaration);\n }\n });\n return result;\n}\n\nfunction serializeResourceProperties(\n resource: ResourceDeclaration,\n symbolMap: SerializationSymbolMap,\n): Record<string, ExpressionNode> {\n const rawResource = unwrapResourceHandle(resource as unknown as Resource);\n const properties: Record<string, ExpressionNode> = {\n name: serializeExpression(rawResource.name, symbolMap),\n };\n\n const armParent = getArmParent(resource);\n if (armParent !== undefined) {\n const parentId = symbolMap.get(armParent);\n\n if (parentId === undefined) {\n throw new Error(`Missing parent symbol for resource type ${rawResource.type}.`);\n }\n\n const parentNode: ExpressionNode = { kind: \"identifier\", id: parentId };\n // Explicit parent index recorded by `Resource`'s constructor when a\n // child is created with `parent.at(i)` / `parent.current()` as its\n // context. When the child is created under a looped parent without an\n // explicit index (only reachable by unwrapping the raw handle out of a\n // `LoopedResource` — not part of the user-facing API), we emit\n // `parent: parentSym` unchanged; Bicep rejects the resulting\n // `parent: parents` (an array) at validation, producing a loud failure\n // instead of a silently-guessed index variable.\n const parentIndex = (rawResource as unknown as Record<string, unknown>)[STATE_PARENT_INDEX];\n\n if (parentIndex !== undefined) {\n properties.parent = {\n kind: \"array-access\",\n base: parentNode,\n index: serializeExpression(parentIndex as SerializableValue, symbolMap),\n nullish: false,\n fromEnd: false,\n };\n } else {\n properties.parent = parentNode;\n }\n }\n\n // Existing resources may carry an explicit scope expression for cross-RG\n // / cross-sub / cross-MG / cross-tenant lookups. Read from state directly;\n // non-existing resources never have `scope` on state.\n const scopeValue = (rawResource as unknown as Record<string, unknown>).scope;\n if (scopeValue !== undefined) {\n properties.scope = serializeExpression(scopeValue as SerializableValue, symbolMap);\n } else if (armParent === undefined) {\n const rgAncestor = getResourceGroupAncestor(resource);\n if (rgAncestor !== undefined) {\n const groupId = symbolMap.get(rgAncestor);\n if (groupId === undefined) {\n throw new Error(\"Resource group not found in symbol map.\");\n }\n properties.scope = {\n kind: \"identifier\",\n id: groupId,\n };\n }\n }\n\n const dependsOn = (rawResource as unknown as Record<string, unknown>)[\"dependsOn\"] as\n readonly ResourceDeclaration[] | undefined;\n if (dependsOn !== undefined) {\n properties.dependsOn = {\n kind: \"array\",\n items: dependsOn.map((dependency) => {\n const identifier = symbolMap.get(dependency);\n if (identifier === undefined) {\n throw new Error(\n \"Dependency not found in symbol map. Ensure it belongs to the same stack.\",\n );\n }\n return { kind: \"identifier\", id: identifier };\n }),\n };\n }\n\n // Build the per-resource custom property bag first, applying ARM-\n // shape lowering (rename/flatten/encode) when a shape is\n // registered for `(type, apiVersion)`. The registry resolves\n // discriminated variants from the instance state. No-op when no\n // shape is registered for this resource type.\n const descriptor =\n typeof rawResource.type === \"string\" && typeof rawResource.apiVersion === \"string\"\n ? getShape(\n rawResource.type,\n rawResource.apiVersion,\n rawResource as unknown as Record<string, unknown>,\n )\n : undefined;\n\n const userProps: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(rawResource)) {\n if (rawResource.existing) continue;\n if (value === undefined || RESOURCE_RESERVED_KEYS.has(key) || hasNestedResourceHandle(value)) {\n continue;\n }\n userProps[key] = value;\n }\n\n const loweredUserProps = descriptor ? lowerState(userProps, descriptor) : userProps;\n\n for (const key of Object.keys(loweredUserProps).sort()) {\n properties[key] = serializeExpression(loweredUserProps[key] as SerializableValue, symbolMap);\n }\n\n return properties;\n}\n\nfunction serializeResource(\n resource: ResourceDeclaration,\n symbolMap: SerializationSymbolMap,\n): [string, ResourceDeclarationNode] {\n const resourceId = symbolMap.get(resource);\n\n if (resourceId === undefined) {\n throw new Error(`Missing synthesized symbol for resource type ${resource.type}.`);\n }\n\n const properties = serializeResourceProperties(resource, symbolMap);\n const rawResource = unwrapResourceHandle(resource as unknown as Resource) as unknown as Record<\n string,\n unknown\n >;\n\n const condition =\n rawResource[\"condition\"] !== undefined\n ? serializeExpression(rawResource[\"condition\"] as SerializableValue, symbolMap)\n : undefined;\n\n // Loop metadata lives on `LoopedResource.loop` — a public field on the\n // wrapper subclass. Scalar `Resource` instances don't have one.\n const loopCtx = isLoopedResource(resource) ? resource.loop : undefined;\n\n // Build decorators for the resource (currently only batchSize from forEach)\n const batchSize = loopCtx?.batchSize;\n const decorators = batchSize !== undefined ? { batchSize } : undefined;\n\n // Wrap `value` in `if-condition` / `for-expression` when the resource is\n // guarded / looped. Bicep source order is `for` outer, `if` inner —\n // `[for item in coll: if (cond) { ... }]` — so wrap if-condition first,\n // then for-expression around it.\n let wireValue: DeclarableBodyNode = { kind: \"object\", value: properties };\n if (condition !== undefined) {\n wireValue = { kind: \"if-condition\", condition, body: wireValue };\n }\n if (loopCtx !== undefined) {\n wireValue = {\n kind: \"for-expression\",\n itemVariable: loopCtx.itemVariable,\n ...(loopCtx.indexVariable !== undefined ? { indexVariable: loopCtx.indexVariable } : {}),\n collection: serializeExpression(loopCtx.collection as SerializableValue, symbolMap),\n body: wireValue,\n };\n }\n\n const node: ResourceDeclarationNode = {\n bicepIdentifier: resourceId,\n type: resource.type,\n apiVersion: resource.apiVersion,\n existing: resource.existing ?? false,\n value: wireValue,\n ...(decorators !== undefined ? { decorators } : {}),\n };\n\n return [resourceId, node];\n}\n\nfunction buildDecorators(\n decl: ParameterMetadata | VariableMetadata | OutputMetadata,\n symbolMap: SerializationSymbolMap,\n): DecoratorsNode | undefined {\n const d: Record<string, unknown> = {};\n\n if (decl.description !== undefined) d.description = decl.description;\n if (\"secure\" in decl && decl.secure) d.secure = true;\n if (\"minValue\" in decl && decl.minValue !== undefined) {\n d.minValue = decl.minValue;\n }\n if (\"maxValue\" in decl && decl.maxValue !== undefined) {\n d.maxValue = decl.maxValue;\n }\n if (\"minLength\" in decl && decl.minLength !== undefined) {\n d.minLength = decl.minLength;\n }\n if (\"maxLength\" in decl && decl.maxLength !== undefined) {\n d.maxLength = decl.maxLength;\n }\n if (\"metadata\" in decl && decl.metadata !== undefined) {\n d.metadata = serializeDefinedObjectEntries(\n decl.metadata as {\n readonly [key: string]: SerializableValue | undefined;\n },\n symbolMap,\n );\n }\n if (\"allowed\" in decl && decl.allowed !== undefined) {\n d.allowed = decl.allowed.map((v) => serializeExpression(v as SerializableValue, symbolMap));\n }\n if (\"discriminator\" in decl && decl.discriminator !== undefined) {\n d.discriminator = decl.discriminator;\n }\n if (\"sealed\" in decl && decl.sealed) d.sealed = true;\n if (\"export\" in decl && decl.export) d.export = true;\n\n return Object.keys(d).length > 0 ? (d as DecoratorsNode) : undefined;\n}\n\nfunction serializeParameters(\n stack: Stack,\n symbolMap: SerializationSymbolMap,\n): Record<string, ParameterDeclarationNode> | undefined {\n if (stack.parameters.size === 0) return undefined;\n return Object.fromEntries(\n stack.parameters.listMetadata().map((p) => {\n const identifier = symbolMap.get(p)!;\n const node: ParameterDeclarationNode = definedProps({\n bicepIdentifier: identifier,\n valueType: { kind: \"primitive-type\" as const, name: p.type },\n defaultValue:\n p.defaultValue !== undefined\n ? serializeExpression(p.defaultValue as SerializableValue, symbolMap)\n : undefined,\n decorators: buildDecorators(p, symbolMap),\n });\n return [identifier, node];\n }),\n );\n}\n\nfunction serializeVariables(\n stack: Stack,\n symbolMap: SerializationSymbolMap,\n): Record<string, VariableDeclarationNode> | undefined {\n if (stack.variables.size === 0) return undefined;\n return Object.fromEntries(\n stack.variables.listMetadata().map((v) => {\n const identifier = symbolMap.get(v)!;\n const node: VariableDeclarationNode = definedProps({\n bicepIdentifier: identifier,\n value: serializeExpression(v.value as SerializableValue, symbolMap),\n decorators: buildDecorators(v, symbolMap),\n });\n return [identifier, node];\n }),\n );\n}\n\nfunction serializeOutputs(\n stack: Stack,\n symbolMap: SerializationSymbolMap,\n): Record<string, OutputDeclarationNode> | undefined {\n if (stack.outputs.size === 0) return undefined;\n return Object.fromEntries(\n stack.outputs.list().map((o) => {\n let value: ExpressionNode;\n if (isResource(o.value)) {\n const symbol = symbolMap.get(o.value);\n if (symbol === undefined) {\n throw new Error(`Resource not found in symbol map. Ensure it belongs to the same stack.`);\n }\n value = { kind: \"identifier\", id: symbol };\n } else {\n value = serializeExpression(o.value as SerializableValue, symbolMap);\n }\n\n const node: OutputDeclarationNode = definedProps({\n bicepIdentifier: o.name,\n valueType: { kind: \"primitive-type\" as const, name: o.type },\n value,\n decorators: buildDecorators(o, symbolMap),\n });\n return [o.name, node];\n }),\n );\n}\n\nfunction serializeFile(\n stack: Stack,\n resources: readonly ResourceDeclaration[],\n symbolMap: SerializationSymbolMap,\n): InfraNode {\n return {\n ...(stack.targetScope !== \"resourceGroup\" ? { targetScope: stack.targetScope } : {}),\n fileName: `${stack.name}.bicep`,\n ...definedProps({\n parameters: serializeParameters(stack, symbolMap),\n variables: serializeVariables(stack, symbolMap),\n resources:\n resources.length === 0\n ? undefined\n : Object.fromEntries(resources.map((resource) => serializeResource(resource, symbolMap))),\n outputs: serializeOutputs(stack, symbolMap),\n }),\n };\n}\n\n/**\n * Serializes a stack or a nonempty array of stacks into a JSON-compatible\n * {@link SerializationDocument} with one `infras` entry per stack.\n *\n * The document preserves declarations and symbolic expressions for rendering\n * or restoration. Pass `JSON.stringify(serialize(stack))` to {@link deserialize}\n * to reconstruct the authored stack; this does not deploy any resources.\n */\nexport function serialize(input: Stack | readonly Stack[]): SerializationDocument {\n const stacks = Array.isArray(input) ? input : [input];\n if (stacks.length === 0) {\n throw new Error(\"Cannot serialize an empty stack collection.\");\n }\n\n return {\n infras: stacks.map((stack) => {\n const resources = collectAllResources(stack);\n const symbolMap = createSymbolMap(resources, stack);\n return serializeFile(stack, resources, symbolMap);\n }),\n };\n}\n"]}
@@ -0,0 +1,2 @@
1
+ export declare function sanitizeIdentifier(value: string, fallback?: string): string;
2
+ //# sourceMappingURL=util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.d.ts","sourceRoot":"","sources":["../../../../src/serialization/json/util.ts"],"names":[],"mappings":"AAGA,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,QAAQ,SAAa,GAAG,MAAM,CAmB/E"}
@@ -0,0 +1,19 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ export function sanitizeIdentifier(value, fallback = "resource") {
4
+ const words = value
5
+ .replace(/[^A-Za-z0-9]+/g, " ")
6
+ .trim()
7
+ .split(/\s+/)
8
+ .filter((w) => w.length > 0);
9
+ if (words.length === 0) {
10
+ return fallback;
11
+ }
12
+ const identifier = words
13
+ .map((word, index) => index === 0
14
+ ? word.charAt(0).toLowerCase() + word.slice(1)
15
+ : word.charAt(0).toUpperCase() + word.slice(1))
16
+ .join("");
17
+ return /^[0-9]/.test(identifier) ? `_${identifier}` : identifier;
18
+ }
19
+ //# sourceMappingURL=util.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"util.js","sourceRoot":"","sources":["../../../../src/serialization/json/util.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,MAAM,UAAU,kBAAkB,CAAC,KAAa,EAAE,QAAQ,GAAG,UAAU;IACrE,MAAM,KAAK,GAAG,KAAK;SAChB,OAAO,CAAC,gBAAgB,EAAE,GAAG,CAAC;SAC9B,IAAI,EAAE;SACN,KAAK,CAAC,KAAK,CAAC;SACZ,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE/B,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,QAAQ,CAAC;IAClB,CAAC;IAED,MAAM,UAAU,GAAG,KAAK;SACrB,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CACnB,KAAK,KAAK,CAAC;QACT,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QAC9C,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CACjD;SACA,IAAI,CAAC,EAAE,CAAC,CAAC;IACZ,OAAO,QAAQ,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,IAAI,UAAU,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC;AACnE,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport function sanitizeIdentifier(value: string, fallback = \"resource\"): string {\n const words = value\n .replace(/[^A-Za-z0-9]+/g, \" \")\n .trim()\n .split(/\\s+/)\n .filter((w) => w.length > 0);\n\n if (words.length === 0) {\n return fallback;\n }\n\n const identifier = words\n .map((word, index) =>\n index === 0\n ? word.charAt(0).toLowerCase() + word.slice(1)\n : word.charAt(0).toUpperCase() + word.slice(1),\n )\n .join(\"\");\n return /^[0-9]/.test(identifier) ? `_${identifier}` : identifier;\n}\n"]}
@@ -0,0 +1,3 @@
1
+ import type { ModuleDeclarationNode, OutputDeclarationNode, ResourceDeclarationNode, VariableDeclarationNode } from "./contract/index.js";
2
+ export declare function collectDependenciesForDeclaration(node: ResourceDeclarationNode | VariableDeclarationNode | OutputDeclarationNode | ModuleDeclarationNode): Set<string>;
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/serialization/utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAGV,qBAAqB,EACrB,qBAAqB,EACrB,uBAAuB,EAEvB,uBAAuB,EACxB,MAAM,qBAAqB,CAAC;AAE7B,wBAAgB,iCAAiC,CAC/C,IAAI,EACA,uBAAuB,GACvB,uBAAuB,GACvB,qBAAqB,GACrB,qBAAqB,GACxB,GAAG,CAAC,MAAM,CAAC,CAQb"}
@@ -0,0 +1,146 @@
1
+ // Copyright (c) Microsoft Corporation.
2
+ // Licensed under the MIT License.
3
+ export function collectDependenciesForDeclaration(node) {
4
+ const identifiers = new Set();
5
+ if ("valueType" in node) {
6
+ collectIdentifierIdsFromType(node.valueType, identifiers);
7
+ }
8
+ collectIdentifierIdsFromExpression(node.value, identifiers);
9
+ collectIdentifierIdsFromDecorators(node.decorators, identifiers);
10
+ return identifiers;
11
+ }
12
+ function collectIdentifierIdsFromDecorators(decorators, identifiers) {
13
+ for (const value of Object.values(decorators?.metadata ?? {})) {
14
+ collectIdentifierIdsFromExpression(value, identifiers);
15
+ }
16
+ for (const value of decorators?.allowed ?? []) {
17
+ collectIdentifierIdsFromExpression(value, identifiers);
18
+ }
19
+ }
20
+ function collectIdentifierIdsFromType(type, identifiers) {
21
+ switch (type.kind) {
22
+ case "type-reference":
23
+ identifiers.add(type.name);
24
+ return;
25
+ case "union-type-member":
26
+ case "parameterized-type-argument":
27
+ collectIdentifierIdsFromType(type.valueType, identifiers);
28
+ return;
29
+ case "array-type":
30
+ collectIdentifierIdsFromType(type.item, identifiers);
31
+ return;
32
+ case "object-type-property":
33
+ case "object-type-additional-properties":
34
+ collectIdentifierIdsFromType(type.valueType, identifiers);
35
+ collectIdentifierIdsFromDecorators(type.decorators, identifiers);
36
+ return;
37
+ case "object-type":
38
+ for (const property of type.properties) {
39
+ collectIdentifierIdsFromType(property, identifiers);
40
+ }
41
+ if (type.additionalProperties !== undefined) {
42
+ collectIdentifierIdsFromType(type.additionalProperties, identifiers);
43
+ }
44
+ return;
45
+ case "union-type":
46
+ for (const member of type.members) {
47
+ collectIdentifierIdsFromType(member.valueType, identifiers);
48
+ }
49
+ return;
50
+ case "nullable-type":
51
+ collectIdentifierIdsFromType(type.base, identifiers);
52
+ return;
53
+ case "parameterized-type-instantiation":
54
+ collectIdentifierIdsFromType(type.base, identifiers);
55
+ for (const argument of type.args) {
56
+ collectIdentifierIdsFromType(argument.valueType, identifiers);
57
+ }
58
+ return;
59
+ case "primitive-type":
60
+ case "string-type-literal":
61
+ case "integer-type-literal":
62
+ case "boolean-type-literal":
63
+ case "null-type-literal":
64
+ return;
65
+ default: {
66
+ const exhaustive = type;
67
+ throw new Error(`Unsupported type kind: ${exhaustive.kind}`);
68
+ }
69
+ }
70
+ }
71
+ function collectIdentifierIdsFromExpression(expr, out, boundIdentifiers = new Set()) {
72
+ switch (expr.kind) {
73
+ case "identifier":
74
+ if (!boundIdentifiers.has(expr.id))
75
+ out.add(expr.id);
76
+ break;
77
+ case "property-access":
78
+ collectIdentifierIdsFromExpression(expr.base, out, boundIdentifiers);
79
+ break;
80
+ case "array-access":
81
+ collectIdentifierIdsFromExpression(expr.base, out, boundIdentifiers);
82
+ collectIdentifierIdsFromExpression(expr.index, out, boundIdentifiers);
83
+ break;
84
+ case "function-call":
85
+ if (typeof expr.target !== "string") {
86
+ collectIdentifierIdsFromExpression(expr.target, out, boundIdentifiers);
87
+ }
88
+ for (const arg of expr.args) {
89
+ collectIdentifierIdsFromExpression(arg, out, boundIdentifiers);
90
+ }
91
+ break;
92
+ case "instance-function-call":
93
+ collectIdentifierIdsFromExpression(expr.base, out, boundIdentifiers);
94
+ for (const arg of expr.args) {
95
+ collectIdentifierIdsFromExpression(arg, out, boundIdentifiers);
96
+ }
97
+ break;
98
+ case "binary-operation":
99
+ collectIdentifierIdsFromExpression(expr.left, out, boundIdentifiers);
100
+ collectIdentifierIdsFromExpression(expr.right, out, boundIdentifiers);
101
+ break;
102
+ case "unary-operation":
103
+ collectIdentifierIdsFromExpression(expr.argument, out, boundIdentifiers);
104
+ break;
105
+ case "ternary-operation":
106
+ collectIdentifierIdsFromExpression(expr.condition, out, boundIdentifiers);
107
+ collectIdentifierIdsFromExpression(expr.trueValue, out, boundIdentifiers);
108
+ collectIdentifierIdsFromExpression(expr.falseValue, out, boundIdentifiers);
109
+ break;
110
+ case "if-condition":
111
+ collectIdentifierIdsFromExpression(expr.condition, out, boundIdentifiers);
112
+ collectIdentifierIdsFromExpression(expr.body, out, boundIdentifiers);
113
+ break;
114
+ case "for-expression": {
115
+ collectIdentifierIdsFromExpression(expr.collection, out, boundIdentifiers);
116
+ const loopBindings = new Set(boundIdentifiers);
117
+ loopBindings.add(expr.itemVariable);
118
+ if (expr.indexVariable !== undefined) {
119
+ loopBindings.add(expr.indexVariable);
120
+ }
121
+ collectIdentifierIdsFromExpression(expr.body, out, loopBindings);
122
+ break;
123
+ }
124
+ case "interpolated-string":
125
+ for (const segment of expr.segments) {
126
+ collectIdentifierIdsFromExpression(segment, out, boundIdentifiers);
127
+ }
128
+ break;
129
+ case "object":
130
+ for (const value of Object.values(expr.value)) {
131
+ collectIdentifierIdsFromExpression(value, out, boundIdentifiers);
132
+ }
133
+ break;
134
+ case "array":
135
+ for (const item of expr.items) {
136
+ collectIdentifierIdsFromExpression(item, out, boundIdentifiers);
137
+ }
138
+ break;
139
+ case "null":
140
+ case "boolean":
141
+ case "integer":
142
+ case "string":
143
+ break;
144
+ }
145
+ }
146
+ //# sourceMappingURL=utils.js.map