@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.
- package/CHANGELOG.md +6 -0
- package/README.md +49 -10
- package/dist/browser/constructs/built-in-resources/resource-group.d.ts +7 -1
- package/dist/browser/constructs/built-in-resources/resource-group.d.ts.map +1 -1
- package/dist/browser/constructs/built-in-resources/resource-group.js +26 -6
- package/dist/browser/constructs/built-in-resources/resource-group.js.map +1 -1
- package/dist/browser/constructs/output.d.ts +1 -1
- package/dist/browser/constructs/output.d.ts.map +1 -1
- package/dist/browser/constructs/output.js.map +1 -1
- package/dist/browser/constructs/parameter.d.ts +1 -1
- package/dist/browser/constructs/parameter.d.ts.map +1 -1
- package/dist/browser/constructs/parameter.js.map +1 -1
- package/dist/browser/constructs/resource/resource-query.d.ts +3 -1
- package/dist/browser/constructs/resource/resource-query.d.ts.map +1 -1
- package/dist/browser/constructs/resource/resource-query.js +10 -0
- package/dist/browser/constructs/resource/resource-query.js.map +1 -1
- package/dist/browser/constructs/resource/resource-relationships.d.ts +9 -0
- package/dist/browser/constructs/resource/resource-relationships.d.ts.map +1 -0
- package/dist/browser/constructs/resource/resource-relationships.js +35 -0
- package/dist/browser/constructs/resource/resource-relationships.js.map +1 -0
- package/dist/browser/constructs/resource/resource.d.ts +11 -17
- package/dist/browser/constructs/resource/resource.d.ts.map +1 -1
- package/dist/browser/constructs/resource/resource.js +70 -28
- package/dist/browser/constructs/resource/resource.js.map +1 -1
- package/dist/browser/constructs/stack.d.ts +2 -16
- package/dist/browser/constructs/stack.d.ts.map +1 -1
- package/dist/browser/constructs/stack.js +1 -15
- package/dist/browser/constructs/stack.js.map +1 -1
- package/dist/browser/expression/ast-nodes.d.ts +1 -1
- package/dist/browser/expression/ast-nodes.d.ts.map +1 -1
- package/dist/browser/expression/ast-nodes.js.map +1 -1
- package/dist/browser/expression/expressions.d.ts +2 -9
- package/dist/browser/expression/expressions.d.ts.map +1 -1
- package/dist/browser/expression/expressions.js +2 -9
- package/dist/browser/expression/expressions.js.map +1 -1
- package/dist/browser/expression/utils.d.ts +5 -0
- package/dist/browser/expression/utils.d.ts.map +1 -0
- package/dist/browser/expression/utils.js +25 -0
- package/dist/browser/expression/utils.js.map +1 -0
- package/dist/browser/index.d.ts +4 -4
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/internal.d.ts +2 -5
- package/dist/browser/internal.d.ts.map +1 -1
- package/dist/browser/internal.js +1 -3
- package/dist/browser/internal.js.map +1 -1
- package/dist/browser/naming/name-validation.d.ts +15 -0
- package/dist/browser/naming/name-validation.d.ts.map +1 -0
- package/dist/browser/naming/name-validation.js +82 -0
- package/dist/browser/naming/name-validation.js.map +1 -0
- package/dist/browser/naming/naming-policy.d.ts +7 -7
- package/dist/browser/naming/naming-policy.d.ts.map +1 -1
- package/dist/browser/naming/naming-policy.js +166 -33
- package/dist/browser/naming/naming-policy.js.map +1 -1
- package/dist/browser/naming/naming-rules.d.ts +12 -11
- package/dist/browser/naming/naming-rules.d.ts.map +1 -1
- package/dist/browser/naming/naming-rules.js +2 -9
- package/dist/browser/naming/naming-rules.js.map +1 -1
- package/dist/browser/package.json +1 -1
- package/dist/{esm/serialization/json/lower.d.ts → browser/serialization/arm-object-conversion.d.ts} +11 -11
- package/dist/browser/serialization/arm-object-conversion.d.ts.map +1 -0
- package/dist/{esm/serialization/json/lower.js → browser/serialization/arm-object-conversion.js} +20 -20
- package/dist/browser/serialization/arm-object-conversion.js.map +1 -0
- package/dist/browser/serialization/ast/declaration-builder.d.ts +10 -0
- package/dist/browser/serialization/ast/declaration-builder.d.ts.map +1 -0
- package/dist/browser/serialization/ast/declaration-builder.js +265 -0
- package/dist/browser/serialization/ast/declaration-builder.js.map +1 -0
- package/dist/browser/serialization/ast/declaration-dependencies.d.ts +18 -0
- package/dist/browser/serialization/ast/declaration-dependencies.d.ts.map +1 -0
- package/dist/browser/serialization/ast/declaration-dependencies.js +96 -0
- package/dist/browser/serialization/ast/declaration-dependencies.js.map +1 -0
- package/dist/browser/serialization/ast/expression-builder.d.ts +14 -0
- package/dist/browser/serialization/ast/expression-builder.d.ts.map +1 -0
- package/dist/browser/serialization/ast/expression-builder.js +313 -0
- package/dist/browser/serialization/ast/expression-builder.js.map +1 -0
- package/dist/browser/serialization/ast/expression-restorer.d.ts +8 -0
- package/dist/browser/serialization/ast/expression-restorer.d.ts.map +1 -0
- package/dist/browser/serialization/ast/expression-restorer.js +162 -0
- package/dist/browser/serialization/ast/expression-restorer.js.map +1 -0
- package/dist/browser/serialization/ast/expression-rewriter.d.ts +29 -0
- package/dist/browser/serialization/ast/expression-rewriter.d.ts.map +1 -0
- package/dist/browser/serialization/ast/expression-rewriter.js +257 -0
- package/dist/browser/serialization/ast/expression-rewriter.js.map +1 -0
- package/dist/browser/serialization/ast/expression-walker.d.ts +16 -0
- package/dist/browser/serialization/ast/expression-walker.d.ts.map +1 -0
- package/dist/browser/serialization/ast/expression-walker.js +154 -0
- package/dist/browser/serialization/ast/expression-walker.js.map +1 -0
- package/dist/browser/serialization/ast/generated/ast.d.ts.map +1 -0
- package/dist/browser/serialization/ast/generated/ast.js.map +1 -0
- package/dist/browser/serialization/ast/index.d.ts +7 -0
- package/dist/browser/serialization/ast/index.d.ts.map +1 -0
- package/dist/browser/serialization/ast/index.js.map +1 -0
- package/dist/browser/serialization/ast/resource-utils.d.ts +10 -0
- package/dist/browser/serialization/ast/resource-utils.d.ts.map +1 -0
- package/dist/browser/serialization/ast/resource-utils.js +52 -0
- package/dist/browser/serialization/ast/resource-utils.js.map +1 -0
- package/dist/browser/serialization/bicep/file-layout/authored-context.d.ts +12 -0
- package/dist/browser/serialization/bicep/file-layout/authored-context.d.ts.map +1 -0
- package/dist/browser/serialization/bicep/file-layout/authored-context.js +57 -0
- package/dist/browser/serialization/bicep/file-layout/authored-context.js.map +1 -0
- package/dist/browser/serialization/bicep/file-layout/bicep-namer.d.ts +11 -0
- package/dist/browser/serialization/bicep/file-layout/bicep-namer.d.ts.map +1 -0
- package/dist/browser/serialization/bicep/file-layout/bicep-namer.js +100 -0
- package/dist/browser/serialization/bicep/file-layout/bicep-namer.js.map +1 -0
- package/dist/browser/serialization/bicep/file-layout/build-bicep-files.d.ts +7 -0
- package/dist/browser/serialization/bicep/file-layout/build-bicep-files.d.ts.map +1 -0
- package/dist/browser/serialization/bicep/file-layout/build-bicep-files.js +46 -0
- package/dist/browser/serialization/bicep/file-layout/build-bicep-files.js.map +1 -0
- package/dist/browser/serialization/bicep/file-layout/deployment-planning.d.ts +19 -0
- package/dist/browser/serialization/bicep/file-layout/deployment-planning.d.ts.map +1 -0
- package/dist/browser/serialization/bicep/file-layout/deployment-planning.js +68 -0
- package/dist/browser/serialization/bicep/file-layout/deployment-planning.js.map +1 -0
- package/dist/browser/serialization/bicep/file-layout/deployment-resource-utils.d.ts +8 -0
- package/dist/browser/serialization/bicep/file-layout/deployment-resource-utils.d.ts.map +1 -0
- package/dist/browser/serialization/bicep/file-layout/deployment-resource-utils.js +67 -0
- package/dist/browser/serialization/bicep/file-layout/deployment-resource-utils.js.map +1 -0
- package/dist/browser/serialization/bicep/file-layout/file-dependencies.d.ts +4 -0
- package/dist/browser/serialization/bicep/file-layout/file-dependencies.d.ts.map +1 -0
- package/dist/browser/serialization/bicep/file-layout/file-dependencies.js +32 -0
- package/dist/browser/serialization/bicep/file-layout/file-dependencies.js.map +1 -0
- package/dist/browser/serialization/bicep/file-layout/file-paths.d.ts +3 -0
- package/dist/browser/serialization/bicep/file-layout/file-paths.d.ts.map +1 -0
- package/dist/browser/serialization/bicep/file-layout/file-paths.js +46 -0
- package/dist/browser/serialization/bicep/file-layout/file-paths.js.map +1 -0
- package/dist/browser/serialization/bicep/file-layout/file-preparation.d.ts +34 -0
- package/dist/browser/serialization/bicep/file-layout/file-preparation.d.ts.map +1 -0
- package/dist/browser/serialization/bicep/file-layout/file-preparation.js +140 -0
- package/dist/browser/serialization/bicep/file-layout/file-preparation.js.map +1 -0
- package/dist/browser/serialization/bicep/file-layout/reference-wiring.d.ts +3 -0
- package/dist/browser/serialization/bicep/file-layout/reference-wiring.d.ts.map +1 -0
- package/dist/browser/serialization/bicep/file-layout/reference-wiring.js +225 -0
- package/dist/browser/serialization/bicep/file-layout/reference-wiring.js.map +1 -0
- package/dist/browser/serialization/bicep/index.d.ts +2 -0
- package/dist/browser/serialization/bicep/index.d.ts.map +1 -0
- package/dist/browser/serialization/bicep/index.js +4 -0
- package/dist/browser/serialization/bicep/index.js.map +1 -0
- package/dist/browser/serialization/bicep/render.d.ts +11 -0
- package/dist/browser/serialization/bicep/render.d.ts.map +1 -0
- package/dist/browser/serialization/bicep/render.js +293 -0
- package/dist/browser/serialization/bicep/render.js.map +1 -0
- package/dist/browser/serialization/{json/encoding.d.ts → encoding.d.ts} +1 -1
- package/dist/browser/serialization/encoding.d.ts.map +1 -0
- package/dist/browser/serialization/{json/encoding.js → encoding.js} +2 -12
- package/dist/browser/serialization/encoding.js.map +1 -0
- package/dist/browser/serialization/{json/util.d.ts → identifiers.d.ts} +1 -1
- package/dist/browser/serialization/identifiers.d.ts.map +1 -0
- package/dist/browser/serialization/{json/util.js → identifiers.js} +1 -1
- package/dist/browser/serialization/identifiers.js.map +1 -0
- package/dist/browser/serialization/index.d.ts +1 -1
- package/dist/browser/serialization/index.d.ts.map +1 -1
- package/dist/browser/serialization/index.js.map +1 -1
- package/dist/browser/serialization/json/deserialize.d.ts.map +1 -1
- package/dist/browser/serialization/json/deserialize.js +131 -39
- package/dist/browser/serialization/json/deserialize.js.map +1 -1
- package/dist/browser/serialization/json/serialize.d.ts +1 -1
- package/dist/browser/serialization/json/serialize.d.ts.map +1 -1
- package/dist/browser/serialization/json/serialize.js +5 -360
- package/dist/browser/serialization/json/serialize.js.map +1 -1
- package/dist/browser/serialization/pluralize-config.d.ts.map +1 -0
- package/dist/browser/serialization/pluralize-config.js.map +1 -0
- package/dist/browser/serialization/symbol-map.d.ts +10 -0
- package/dist/browser/serialization/symbol-map.d.ts.map +1 -0
- package/dist/browser/serialization/symbol-map.js +40 -0
- package/dist/browser/serialization/symbol-map.js.map +1 -0
- package/dist/browser/shape/shape.d.ts +4 -4
- package/dist/browser/shape/shape.js +2 -2
- package/dist/browser/shape/shape.js.map +1 -1
- package/dist/commonjs/constructs/built-in-resources/resource-group.d.ts +7 -1
- package/dist/commonjs/constructs/built-in-resources/resource-group.d.ts.map +1 -1
- package/dist/commonjs/constructs/built-in-resources/resource-group.js +27 -6
- package/dist/commonjs/constructs/built-in-resources/resource-group.js.map +2 -2
- package/dist/commonjs/constructs/output.d.ts +1 -1
- package/dist/commonjs/constructs/output.d.ts.map +1 -1
- package/dist/commonjs/constructs/output.js.map +1 -1
- package/dist/commonjs/constructs/parameter.d.ts +1 -1
- package/dist/commonjs/constructs/parameter.d.ts.map +1 -1
- package/dist/commonjs/constructs/parameter.js.map +1 -1
- package/dist/commonjs/constructs/resource/resource-query.d.ts +3 -1
- package/dist/commonjs/constructs/resource/resource-query.d.ts.map +1 -1
- package/dist/commonjs/constructs/resource/resource-query.js +11 -0
- package/dist/commonjs/constructs/resource/resource-query.js.map +2 -2
- package/dist/commonjs/constructs/resource/resource-relationships.d.ts +9 -0
- package/dist/commonjs/constructs/resource/resource-relationships.d.ts.map +1 -0
- package/dist/commonjs/constructs/resource/resource-relationships.js +59 -0
- package/dist/commonjs/constructs/resource/resource-relationships.js.map +7 -0
- package/dist/commonjs/constructs/resource/resource.d.ts +11 -17
- package/dist/commonjs/constructs/resource/resource.d.ts.map +1 -1
- package/dist/commonjs/constructs/resource/resource.js +57 -35
- package/dist/commonjs/constructs/resource/resource.js.map +2 -2
- package/dist/commonjs/constructs/stack.d.ts +2 -16
- package/dist/commonjs/constructs/stack.d.ts.map +1 -1
- package/dist/commonjs/constructs/stack.js.map +2 -2
- package/dist/commonjs/expression/ast-nodes.d.ts +1 -1
- package/dist/commonjs/expression/ast-nodes.d.ts.map +1 -1
- package/dist/commonjs/expression/ast-nodes.js.map +1 -1
- package/dist/commonjs/expression/expressions.d.ts +2 -9
- package/dist/commonjs/expression/expressions.d.ts.map +1 -1
- package/dist/commonjs/expression/expressions.js.map +2 -2
- package/dist/commonjs/expression/utils.d.ts +5 -0
- package/dist/commonjs/expression/utils.d.ts.map +1 -0
- package/dist/commonjs/expression/utils.js +43 -0
- package/dist/commonjs/expression/utils.js.map +7 -0
- package/dist/commonjs/index.d.ts +4 -4
- package/dist/commonjs/index.d.ts.map +1 -1
- package/dist/commonjs/index.js.map +2 -2
- package/dist/commonjs/internal.d.ts +2 -5
- package/dist/commonjs/internal.d.ts.map +1 -1
- package/dist/commonjs/internal.js +3 -9
- package/dist/commonjs/internal.js.map +2 -2
- package/dist/commonjs/naming/name-validation.d.ts +15 -0
- package/dist/commonjs/naming/name-validation.d.ts.map +1 -0
- package/dist/commonjs/naming/name-validation.js +74 -0
- package/dist/commonjs/naming/name-validation.js.map +7 -0
- package/dist/commonjs/naming/naming-policy.d.ts +7 -7
- package/dist/commonjs/naming/naming-policy.d.ts.map +1 -1
- package/dist/commonjs/naming/naming-policy.js +136 -26
- package/dist/commonjs/naming/naming-policy.js.map +2 -2
- package/dist/commonjs/naming/naming-rules.d.ts +12 -11
- package/dist/commonjs/naming/naming-rules.d.ts.map +1 -1
- package/dist/commonjs/naming/naming-rules.js +4 -11
- package/dist/commonjs/naming/naming-rules.js.map +2 -2
- package/dist/commonjs/package.json +1 -1
- package/dist/{browser/serialization/json/lower.d.ts → commonjs/serialization/arm-object-conversion.d.ts} +11 -11
- package/dist/commonjs/serialization/arm-object-conversion.d.ts.map +1 -0
- package/dist/commonjs/serialization/{json/lower.js → arm-object-conversion.js} +15 -15
- package/dist/commonjs/serialization/arm-object-conversion.js.map +7 -0
- package/dist/commonjs/serialization/ast/declaration-builder.d.ts +10 -0
- package/dist/commonjs/serialization/ast/declaration-builder.d.ts.map +1 -0
- package/dist/commonjs/serialization/ast/declaration-builder.js +274 -0
- package/dist/commonjs/serialization/ast/declaration-builder.js.map +7 -0
- package/dist/commonjs/serialization/ast/declaration-dependencies.d.ts +18 -0
- package/dist/commonjs/serialization/ast/declaration-dependencies.d.ts.map +1 -0
- package/dist/commonjs/serialization/ast/declaration-dependencies.js +109 -0
- package/dist/commonjs/serialization/ast/declaration-dependencies.js.map +7 -0
- package/dist/commonjs/serialization/ast/expression-builder.d.ts +14 -0
- package/dist/commonjs/serialization/ast/expression-builder.d.ts.map +1 -0
- package/dist/commonjs/serialization/ast/expression-builder.js +316 -0
- package/dist/commonjs/serialization/ast/expression-builder.js.map +7 -0
- package/dist/commonjs/serialization/ast/expression-restorer.d.ts +8 -0
- package/dist/commonjs/serialization/ast/expression-restorer.d.ts.map +1 -0
- package/dist/commonjs/serialization/ast/expression-restorer.js +193 -0
- package/dist/commonjs/serialization/ast/expression-restorer.js.map +7 -0
- package/dist/commonjs/serialization/ast/expression-rewriter.d.ts +29 -0
- package/dist/commonjs/serialization/ast/expression-rewriter.d.ts.map +1 -0
- package/dist/commonjs/serialization/ast/expression-rewriter.js +270 -0
- package/dist/commonjs/serialization/ast/expression-rewriter.js.map +7 -0
- package/dist/commonjs/serialization/ast/expression-walker.d.ts +16 -0
- package/dist/commonjs/serialization/ast/expression-walker.d.ts.map +1 -0
- package/dist/commonjs/serialization/ast/expression-walker.js +165 -0
- package/dist/commonjs/serialization/ast/expression-walker.js.map +7 -0
- package/dist/commonjs/serialization/ast/generated/ast.d.ts.map +1 -0
- package/dist/commonjs/serialization/{contract → ast}/generated/ast.js.map +1 -1
- package/dist/commonjs/serialization/ast/index.d.ts +7 -0
- package/dist/commonjs/serialization/ast/index.d.ts.map +1 -0
- package/dist/commonjs/serialization/{contract → ast}/index.js +3 -3
- package/dist/commonjs/serialization/ast/index.js.map +7 -0
- package/dist/commonjs/serialization/ast/resource-utils.d.ts +10 -0
- package/dist/commonjs/serialization/ast/resource-utils.d.ts.map +1 -0
- package/dist/commonjs/serialization/ast/resource-utils.js +71 -0
- package/dist/commonjs/serialization/ast/resource-utils.js.map +7 -0
- package/dist/commonjs/serialization/bicep/file-layout/authored-context.d.ts +12 -0
- package/dist/commonjs/serialization/bicep/file-layout/authored-context.d.ts.map +1 -0
- package/dist/commonjs/serialization/bicep/file-layout/authored-context.js +74 -0
- package/dist/commonjs/serialization/bicep/file-layout/authored-context.js.map +7 -0
- package/dist/commonjs/serialization/bicep/file-layout/bicep-namer.d.ts +11 -0
- package/dist/commonjs/serialization/bicep/file-layout/bicep-namer.d.ts.map +1 -0
- package/dist/commonjs/serialization/bicep/file-layout/bicep-namer.js +130 -0
- package/dist/commonjs/serialization/bicep/file-layout/bicep-namer.js.map +7 -0
- package/dist/commonjs/serialization/bicep/file-layout/build-bicep-files.d.ts +7 -0
- package/dist/commonjs/serialization/bicep/file-layout/build-bicep-files.d.ts.map +1 -0
- package/dist/commonjs/serialization/bicep/file-layout/build-bicep-files.js +71 -0
- package/dist/commonjs/serialization/bicep/file-layout/build-bicep-files.js.map +7 -0
- package/dist/commonjs/serialization/bicep/file-layout/deployment-planning.d.ts +19 -0
- package/dist/commonjs/serialization/bicep/file-layout/deployment-planning.d.ts.map +1 -0
- package/dist/commonjs/serialization/bicep/file-layout/deployment-planning.js +80 -0
- package/dist/commonjs/serialization/bicep/file-layout/deployment-planning.js.map +7 -0
- package/dist/commonjs/serialization/bicep/file-layout/deployment-resource-utils.d.ts +8 -0
- package/dist/commonjs/serialization/bicep/file-layout/deployment-resource-utils.d.ts.map +1 -0
- package/dist/commonjs/serialization/bicep/file-layout/deployment-resource-utils.js +91 -0
- package/dist/commonjs/serialization/bicep/file-layout/deployment-resource-utils.js.map +7 -0
- package/dist/commonjs/serialization/bicep/file-layout/file-dependencies.d.ts +4 -0
- package/dist/commonjs/serialization/bicep/file-layout/file-dependencies.d.ts.map +1 -0
- package/dist/commonjs/serialization/bicep/file-layout/file-dependencies.js +57 -0
- package/dist/commonjs/serialization/bicep/file-layout/file-dependencies.js.map +7 -0
- package/dist/commonjs/serialization/bicep/file-layout/file-paths.d.ts +3 -0
- package/dist/commonjs/serialization/bicep/file-layout/file-paths.d.ts.map +1 -0
- package/dist/commonjs/serialization/bicep/file-layout/file-paths.js +70 -0
- package/dist/commonjs/serialization/bicep/file-layout/file-paths.js.map +7 -0
- package/dist/commonjs/serialization/bicep/file-layout/file-preparation.d.ts +34 -0
- package/dist/commonjs/serialization/bicep/file-layout/file-preparation.d.ts.map +1 -0
- package/dist/commonjs/serialization/bicep/file-layout/file-preparation.js +190 -0
- package/dist/commonjs/serialization/bicep/file-layout/file-preparation.js.map +7 -0
- package/dist/commonjs/serialization/bicep/file-layout/reference-wiring.d.ts +3 -0
- package/dist/commonjs/serialization/bicep/file-layout/reference-wiring.d.ts.map +1 -0
- package/dist/commonjs/serialization/bicep/file-layout/reference-wiring.js +241 -0
- package/dist/commonjs/serialization/bicep/file-layout/reference-wiring.js.map +7 -0
- package/dist/commonjs/serialization/bicep/index.d.ts +2 -0
- package/dist/commonjs/serialization/bicep/index.d.ts.map +1 -0
- package/dist/commonjs/serialization/bicep/index.js +28 -0
- package/dist/commonjs/serialization/bicep/index.js.map +7 -0
- package/dist/commonjs/serialization/bicep/render.d.ts +11 -0
- package/dist/commonjs/serialization/bicep/render.d.ts.map +1 -0
- package/dist/commonjs/serialization/bicep/render.js +312 -0
- package/dist/commonjs/serialization/bicep/render.js.map +7 -0
- package/dist/commonjs/serialization/{json/encoding.d.ts → encoding.d.ts} +1 -1
- package/dist/commonjs/serialization/encoding.d.ts.map +1 -0
- package/dist/commonjs/serialization/{json/encoding.js → encoding.js} +2 -12
- package/dist/commonjs/serialization/encoding.js.map +7 -0
- package/dist/commonjs/serialization/{json/util.d.ts → identifiers.d.ts} +1 -1
- package/dist/commonjs/serialization/identifiers.d.ts.map +1 -0
- package/dist/commonjs/serialization/{json/util.js → identifiers.js} +4 -4
- package/dist/commonjs/serialization/{json/util.js.map → identifiers.js.map} +1 -1
- package/dist/commonjs/serialization/index.d.ts +1 -1
- package/dist/commonjs/serialization/index.d.ts.map +1 -1
- package/dist/commonjs/serialization/index.js.map +1 -1
- package/dist/commonjs/serialization/json/deserialize.d.ts.map +1 -1
- package/dist/commonjs/serialization/json/deserialize.js +115 -44
- package/dist/commonjs/serialization/json/deserialize.js.map +2 -2
- package/dist/commonjs/serialization/json/serialize.d.ts +1 -1
- package/dist/commonjs/serialization/json/serialize.d.ts.map +1 -1
- package/dist/commonjs/serialization/json/serialize.js +6 -308
- package/dist/commonjs/serialization/json/serialize.js.map +3 -3
- package/dist/commonjs/serialization/pluralize-config.d.ts.map +1 -0
- package/dist/commonjs/serialization/{json/pluralize-config.js.map → pluralize-config.js.map} +1 -1
- package/dist/commonjs/serialization/symbol-map.d.ts +10 -0
- package/dist/commonjs/serialization/symbol-map.d.ts.map +1 -0
- package/dist/commonjs/serialization/symbol-map.js +72 -0
- package/dist/commonjs/serialization/symbol-map.js.map +7 -0
- package/dist/commonjs/shape/shape.d.ts +4 -4
- package/dist/commonjs/shape/shape.js.map +1 -1
- package/dist/commonjs/tsdoc-metadata.json +1 -1
- package/dist/esm/constructs/built-in-resources/resource-group.d.ts +7 -1
- package/dist/esm/constructs/built-in-resources/resource-group.d.ts.map +1 -1
- package/dist/esm/constructs/built-in-resources/resource-group.js +26 -6
- package/dist/esm/constructs/built-in-resources/resource-group.js.map +1 -1
- package/dist/esm/constructs/output.d.ts +1 -1
- package/dist/esm/constructs/output.d.ts.map +1 -1
- package/dist/esm/constructs/output.js.map +1 -1
- package/dist/esm/constructs/parameter.d.ts +1 -1
- package/dist/esm/constructs/parameter.d.ts.map +1 -1
- package/dist/esm/constructs/parameter.js.map +1 -1
- package/dist/esm/constructs/resource/resource-query.d.ts +3 -1
- package/dist/esm/constructs/resource/resource-query.d.ts.map +1 -1
- package/dist/esm/constructs/resource/resource-query.js +10 -0
- package/dist/esm/constructs/resource/resource-query.js.map +1 -1
- package/dist/esm/constructs/resource/resource-relationships.d.ts +9 -0
- package/dist/esm/constructs/resource/resource-relationships.d.ts.map +1 -0
- package/dist/esm/constructs/resource/resource-relationships.js +35 -0
- package/dist/esm/constructs/resource/resource-relationships.js.map +1 -0
- package/dist/esm/constructs/resource/resource.d.ts +11 -17
- package/dist/esm/constructs/resource/resource.d.ts.map +1 -1
- package/dist/esm/constructs/resource/resource.js +70 -28
- package/dist/esm/constructs/resource/resource.js.map +1 -1
- package/dist/esm/constructs/stack.d.ts +2 -16
- package/dist/esm/constructs/stack.d.ts.map +1 -1
- package/dist/esm/constructs/stack.js +1 -15
- package/dist/esm/constructs/stack.js.map +1 -1
- package/dist/esm/expression/ast-nodes.d.ts +1 -1
- package/dist/esm/expression/ast-nodes.d.ts.map +1 -1
- package/dist/esm/expression/ast-nodes.js.map +1 -1
- package/dist/esm/expression/expressions.d.ts +2 -9
- package/dist/esm/expression/expressions.d.ts.map +1 -1
- package/dist/esm/expression/expressions.js +2 -9
- package/dist/esm/expression/expressions.js.map +1 -1
- package/dist/esm/expression/utils.d.ts +5 -0
- package/dist/esm/expression/utils.d.ts.map +1 -0
- package/dist/esm/expression/utils.js +25 -0
- package/dist/esm/expression/utils.js.map +1 -0
- package/dist/esm/index.d.ts +4 -4
- package/dist/esm/index.d.ts.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/internal.d.ts +2 -5
- package/dist/esm/internal.d.ts.map +1 -1
- package/dist/esm/internal.js +1 -3
- package/dist/esm/internal.js.map +1 -1
- package/dist/esm/naming/name-validation.d.ts +15 -0
- package/dist/esm/naming/name-validation.d.ts.map +1 -0
- package/dist/esm/naming/name-validation.js +82 -0
- package/dist/esm/naming/name-validation.js.map +1 -0
- package/dist/esm/naming/naming-policy.d.ts +7 -7
- package/dist/esm/naming/naming-policy.d.ts.map +1 -1
- package/dist/esm/naming/naming-policy.js +166 -33
- package/dist/esm/naming/naming-policy.js.map +1 -1
- package/dist/esm/naming/naming-rules.d.ts +12 -11
- package/dist/esm/naming/naming-rules.d.ts.map +1 -1
- package/dist/esm/naming/naming-rules.js +2 -9
- package/dist/esm/naming/naming-rules.js.map +1 -1
- package/dist/esm/package.json +1 -1
- package/dist/{commonjs/serialization/json/lower.d.ts → esm/serialization/arm-object-conversion.d.ts} +11 -11
- package/dist/esm/serialization/arm-object-conversion.d.ts.map +1 -0
- package/dist/{browser/serialization/json/lower.js → esm/serialization/arm-object-conversion.js} +20 -20
- package/dist/esm/serialization/arm-object-conversion.js.map +1 -0
- package/dist/esm/serialization/ast/declaration-builder.d.ts +10 -0
- package/dist/esm/serialization/ast/declaration-builder.d.ts.map +1 -0
- package/dist/esm/serialization/ast/declaration-builder.js +265 -0
- package/dist/esm/serialization/ast/declaration-builder.js.map +1 -0
- package/dist/esm/serialization/ast/declaration-dependencies.d.ts +18 -0
- package/dist/esm/serialization/ast/declaration-dependencies.d.ts.map +1 -0
- package/dist/esm/serialization/ast/declaration-dependencies.js +96 -0
- package/dist/esm/serialization/ast/declaration-dependencies.js.map +1 -0
- package/dist/esm/serialization/ast/expression-builder.d.ts +14 -0
- package/dist/esm/serialization/ast/expression-builder.d.ts.map +1 -0
- package/dist/esm/serialization/ast/expression-builder.js +313 -0
- package/dist/esm/serialization/ast/expression-builder.js.map +1 -0
- package/dist/esm/serialization/ast/expression-restorer.d.ts +8 -0
- package/dist/esm/serialization/ast/expression-restorer.d.ts.map +1 -0
- package/dist/esm/serialization/ast/expression-restorer.js +162 -0
- package/dist/esm/serialization/ast/expression-restorer.js.map +1 -0
- package/dist/esm/serialization/ast/expression-rewriter.d.ts +29 -0
- package/dist/esm/serialization/ast/expression-rewriter.d.ts.map +1 -0
- package/dist/esm/serialization/ast/expression-rewriter.js +257 -0
- package/dist/esm/serialization/ast/expression-rewriter.js.map +1 -0
- package/dist/esm/serialization/ast/expression-walker.d.ts +16 -0
- package/dist/esm/serialization/ast/expression-walker.d.ts.map +1 -0
- package/dist/esm/serialization/ast/expression-walker.js +154 -0
- package/dist/esm/serialization/ast/expression-walker.js.map +1 -0
- package/dist/esm/serialization/ast/generated/ast.d.ts.map +1 -0
- package/dist/esm/serialization/ast/generated/ast.js.map +1 -0
- package/dist/esm/serialization/ast/index.d.ts +7 -0
- package/dist/esm/serialization/ast/index.d.ts.map +1 -0
- package/dist/esm/serialization/ast/index.js.map +1 -0
- package/dist/esm/serialization/ast/resource-utils.d.ts +10 -0
- package/dist/esm/serialization/ast/resource-utils.d.ts.map +1 -0
- package/dist/esm/serialization/ast/resource-utils.js +52 -0
- package/dist/esm/serialization/ast/resource-utils.js.map +1 -0
- package/dist/esm/serialization/bicep/file-layout/authored-context.d.ts +12 -0
- package/dist/esm/serialization/bicep/file-layout/authored-context.d.ts.map +1 -0
- package/dist/esm/serialization/bicep/file-layout/authored-context.js +57 -0
- package/dist/esm/serialization/bicep/file-layout/authored-context.js.map +1 -0
- package/dist/esm/serialization/bicep/file-layout/bicep-namer.d.ts +11 -0
- package/dist/esm/serialization/bicep/file-layout/bicep-namer.d.ts.map +1 -0
- package/dist/esm/serialization/bicep/file-layout/bicep-namer.js +100 -0
- package/dist/esm/serialization/bicep/file-layout/bicep-namer.js.map +1 -0
- package/dist/esm/serialization/bicep/file-layout/build-bicep-files.d.ts +7 -0
- package/dist/esm/serialization/bicep/file-layout/build-bicep-files.d.ts.map +1 -0
- package/dist/esm/serialization/bicep/file-layout/build-bicep-files.js +46 -0
- package/dist/esm/serialization/bicep/file-layout/build-bicep-files.js.map +1 -0
- package/dist/esm/serialization/bicep/file-layout/deployment-planning.d.ts +19 -0
- package/dist/esm/serialization/bicep/file-layout/deployment-planning.d.ts.map +1 -0
- package/dist/esm/serialization/bicep/file-layout/deployment-planning.js +68 -0
- package/dist/esm/serialization/bicep/file-layout/deployment-planning.js.map +1 -0
- package/dist/esm/serialization/bicep/file-layout/deployment-resource-utils.d.ts +8 -0
- package/dist/esm/serialization/bicep/file-layout/deployment-resource-utils.d.ts.map +1 -0
- package/dist/esm/serialization/bicep/file-layout/deployment-resource-utils.js +67 -0
- package/dist/esm/serialization/bicep/file-layout/deployment-resource-utils.js.map +1 -0
- package/dist/esm/serialization/bicep/file-layout/file-dependencies.d.ts +4 -0
- package/dist/esm/serialization/bicep/file-layout/file-dependencies.d.ts.map +1 -0
- package/dist/esm/serialization/bicep/file-layout/file-dependencies.js +32 -0
- package/dist/esm/serialization/bicep/file-layout/file-dependencies.js.map +1 -0
- package/dist/esm/serialization/bicep/file-layout/file-paths.d.ts +3 -0
- package/dist/esm/serialization/bicep/file-layout/file-paths.d.ts.map +1 -0
- package/dist/esm/serialization/bicep/file-layout/file-paths.js +46 -0
- package/dist/esm/serialization/bicep/file-layout/file-paths.js.map +1 -0
- package/dist/esm/serialization/bicep/file-layout/file-preparation.d.ts +34 -0
- package/dist/esm/serialization/bicep/file-layout/file-preparation.d.ts.map +1 -0
- package/dist/esm/serialization/bicep/file-layout/file-preparation.js +140 -0
- package/dist/esm/serialization/bicep/file-layout/file-preparation.js.map +1 -0
- package/dist/esm/serialization/bicep/file-layout/reference-wiring.d.ts +3 -0
- package/dist/esm/serialization/bicep/file-layout/reference-wiring.d.ts.map +1 -0
- package/dist/esm/serialization/bicep/file-layout/reference-wiring.js +225 -0
- package/dist/esm/serialization/bicep/file-layout/reference-wiring.js.map +1 -0
- package/dist/esm/serialization/bicep/index.d.ts +2 -0
- package/dist/esm/serialization/bicep/index.d.ts.map +1 -0
- package/dist/esm/serialization/bicep/index.js +4 -0
- package/dist/esm/serialization/bicep/index.js.map +1 -0
- package/dist/esm/serialization/bicep/render.d.ts +11 -0
- package/dist/esm/serialization/bicep/render.d.ts.map +1 -0
- package/dist/esm/serialization/bicep/render.js +293 -0
- package/dist/esm/serialization/bicep/render.js.map +1 -0
- package/dist/esm/serialization/{json/encoding.d.ts → encoding.d.ts} +1 -1
- package/dist/esm/serialization/encoding.d.ts.map +1 -0
- package/dist/esm/serialization/{json/encoding.js → encoding.js} +2 -12
- package/dist/esm/serialization/encoding.js.map +1 -0
- package/dist/esm/serialization/{json/util.d.ts → identifiers.d.ts} +1 -1
- package/dist/esm/serialization/identifiers.d.ts.map +1 -0
- package/dist/esm/serialization/{json/util.js → identifiers.js} +1 -1
- package/dist/esm/serialization/identifiers.js.map +1 -0
- package/dist/esm/serialization/index.d.ts +1 -1
- package/dist/esm/serialization/index.d.ts.map +1 -1
- package/dist/esm/serialization/index.js.map +1 -1
- package/dist/esm/serialization/json/deserialize.d.ts.map +1 -1
- package/dist/esm/serialization/json/deserialize.js +131 -39
- package/dist/esm/serialization/json/deserialize.js.map +1 -1
- package/dist/esm/serialization/json/serialize.d.ts +1 -1
- package/dist/esm/serialization/json/serialize.d.ts.map +1 -1
- package/dist/esm/serialization/json/serialize.js +5 -360
- package/dist/esm/serialization/json/serialize.js.map +1 -1
- package/dist/esm/serialization/pluralize-config.d.ts.map +1 -0
- package/dist/esm/serialization/pluralize-config.js.map +1 -0
- package/dist/esm/serialization/symbol-map.d.ts +10 -0
- package/dist/esm/serialization/symbol-map.d.ts.map +1 -0
- package/dist/esm/serialization/symbol-map.js +40 -0
- package/dist/esm/serialization/symbol-map.js.map +1 -0
- package/dist/esm/shape/shape.d.ts +4 -4
- package/dist/esm/shape/shape.js +2 -2
- package/dist/esm/shape/shape.js.map +1 -1
- package/package.json +3 -2
- package/dist/browser/serialization/contract/generated/ast.d.ts.map +0 -1
- package/dist/browser/serialization/contract/generated/ast.js.map +0 -1
- package/dist/browser/serialization/contract/index.d.ts +0 -2
- package/dist/browser/serialization/contract/index.d.ts.map +0 -1
- package/dist/browser/serialization/contract/index.js.map +0 -1
- package/dist/browser/serialization/json/encoding.d.ts.map +0 -1
- package/dist/browser/serialization/json/encoding.js.map +0 -1
- package/dist/browser/serialization/json/expression.d.ts +0 -32
- package/dist/browser/serialization/json/expression.d.ts.map +0 -1
- package/dist/browser/serialization/json/expression.js +0 -494
- package/dist/browser/serialization/json/expression.js.map +0 -1
- package/dist/browser/serialization/json/lower.d.ts.map +0 -1
- package/dist/browser/serialization/json/lower.js.map +0 -1
- package/dist/browser/serialization/json/pluralize-config.d.ts.map +0 -1
- package/dist/browser/serialization/json/pluralize-config.js.map +0 -1
- package/dist/browser/serialization/json/util.d.ts.map +0 -1
- package/dist/browser/serialization/json/util.js.map +0 -1
- package/dist/browser/serialization/utils.d.ts +0 -3
- package/dist/browser/serialization/utils.d.ts.map +0 -1
- package/dist/browser/serialization/utils.js +0 -146
- package/dist/browser/serialization/utils.js.map +0 -1
- package/dist/commonjs/serialization/contract/generated/ast.d.ts.map +0 -1
- package/dist/commonjs/serialization/contract/index.d.ts +0 -2
- package/dist/commonjs/serialization/contract/index.d.ts.map +0 -1
- package/dist/commonjs/serialization/contract/index.js.map +0 -7
- package/dist/commonjs/serialization/json/encoding.d.ts.map +0 -1
- package/dist/commonjs/serialization/json/encoding.js.map +0 -7
- package/dist/commonjs/serialization/json/expression.d.ts +0 -32
- package/dist/commonjs/serialization/json/expression.d.ts.map +0 -1
- package/dist/commonjs/serialization/json/expression.js +0 -509
- package/dist/commonjs/serialization/json/expression.js.map +0 -7
- package/dist/commonjs/serialization/json/lower.d.ts.map +0 -1
- package/dist/commonjs/serialization/json/lower.js.map +0 -7
- package/dist/commonjs/serialization/json/pluralize-config.d.ts.map +0 -1
- package/dist/commonjs/serialization/json/util.d.ts.map +0 -1
- package/dist/commonjs/serialization/utils.d.ts +0 -3
- package/dist/commonjs/serialization/utils.d.ts.map +0 -1
- package/dist/commonjs/serialization/utils.js +0 -169
- package/dist/commonjs/serialization/utils.js.map +0 -7
- package/dist/esm/serialization/contract/generated/ast.d.ts.map +0 -1
- package/dist/esm/serialization/contract/generated/ast.js.map +0 -1
- package/dist/esm/serialization/contract/index.d.ts +0 -2
- package/dist/esm/serialization/contract/index.d.ts.map +0 -1
- package/dist/esm/serialization/contract/index.js.map +0 -1
- package/dist/esm/serialization/json/encoding.d.ts.map +0 -1
- package/dist/esm/serialization/json/encoding.js.map +0 -1
- package/dist/esm/serialization/json/expression.d.ts +0 -32
- package/dist/esm/serialization/json/expression.d.ts.map +0 -1
- package/dist/esm/serialization/json/expression.js +0 -494
- package/dist/esm/serialization/json/expression.js.map +0 -1
- package/dist/esm/serialization/json/lower.d.ts.map +0 -1
- package/dist/esm/serialization/json/lower.js.map +0 -1
- package/dist/esm/serialization/json/pluralize-config.d.ts.map +0 -1
- package/dist/esm/serialization/json/pluralize-config.js.map +0 -1
- package/dist/esm/serialization/json/util.d.ts.map +0 -1
- package/dist/esm/serialization/json/util.js.map +0 -1
- package/dist/esm/serialization/utils.d.ts +0 -3
- package/dist/esm/serialization/utils.d.ts.map +0 -1
- package/dist/esm/serialization/utils.js +0 -146
- package/dist/esm/serialization/utils.js.map +0 -1
- /package/dist/browser/serialization/{contract → ast}/generated/ast.d.ts +0 -0
- /package/dist/browser/serialization/{contract → ast}/generated/ast.js +0 -0
- /package/dist/browser/serialization/{contract → ast}/index.js +0 -0
- /package/dist/browser/serialization/{json/pluralize-config.d.ts → pluralize-config.d.ts} +0 -0
- /package/dist/browser/serialization/{json/pluralize-config.js → pluralize-config.js} +0 -0
- /package/dist/commonjs/serialization/{contract → ast}/generated/ast.d.ts +0 -0
- /package/dist/commonjs/serialization/{contract → ast}/generated/ast.js +0 -0
- /package/dist/commonjs/serialization/{json/pluralize-config.d.ts → pluralize-config.d.ts} +0 -0
- /package/dist/commonjs/serialization/{json/pluralize-config.js → pluralize-config.js} +0 -0
- /package/dist/esm/serialization/{contract → ast}/generated/ast.d.ts +0 -0
- /package/dist/esm/serialization/{contract → ast}/generated/ast.js +0 -0
- /package/dist/esm/serialization/{contract → ast}/index.js +0 -0
- /package/dist/esm/serialization/{json/pluralize-config.d.ts → pluralize-config.d.ts} +0 -0
- /package/dist/esm/serialization/{json/pluralize-config.js → pluralize-config.js} +0 -0
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
/** Transforms a resource's object body while preserving conditions and loops. */
|
|
4
|
+
export function updateResourceBody(body, transform) {
|
|
5
|
+
switch (body.kind) {
|
|
6
|
+
case "object":
|
|
7
|
+
return transform(body);
|
|
8
|
+
case "if-condition":
|
|
9
|
+
case "for-expression": {
|
|
10
|
+
if (body.body.kind !== "object" &&
|
|
11
|
+
body.body.kind !== "if-condition" &&
|
|
12
|
+
body.body.kind !== "for-expression") {
|
|
13
|
+
throw new Error(`Invalid resource body "${body.body.kind}".`);
|
|
14
|
+
}
|
|
15
|
+
return { ...body, body: updateResourceBody(body.body, transform) };
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
/** Gets the object body beneath a resource's condition and loop wrappers. */
|
|
20
|
+
export function getResourceBody(body) {
|
|
21
|
+
if (body.kind === "object")
|
|
22
|
+
return body;
|
|
23
|
+
if (body.body.kind !== "object" &&
|
|
24
|
+
body.body.kind !== "if-condition" &&
|
|
25
|
+
body.body.kind !== "for-expression") {
|
|
26
|
+
throw new Error(`Invalid resource body "${body.body.kind}".`);
|
|
27
|
+
}
|
|
28
|
+
return getResourceBody(body.body);
|
|
29
|
+
}
|
|
30
|
+
/** Removes the scope field without changing other resource declaration data. */
|
|
31
|
+
export function removeResourceScope(resource) {
|
|
32
|
+
return {
|
|
33
|
+
...resource,
|
|
34
|
+
value: updateResourceBody(resource.value, (body) => {
|
|
35
|
+
const { scope: _scope, ...rest } = body.value;
|
|
36
|
+
return { ...body, value: rest };
|
|
37
|
+
}),
|
|
38
|
+
};
|
|
39
|
+
}
|
|
40
|
+
/** Gets the parent declaration identifier, including indexed parent accesses. */
|
|
41
|
+
export function getResourceArmParentIdentifier(resource) {
|
|
42
|
+
const parent = getResourceBody(resource.value).value.parent;
|
|
43
|
+
if (parent === undefined)
|
|
44
|
+
return undefined;
|
|
45
|
+
if (parent.kind === "identifier")
|
|
46
|
+
return parent.id;
|
|
47
|
+
if (parent.kind === "array-access" && parent.base.kind === "identifier") {
|
|
48
|
+
return parent.base.id;
|
|
49
|
+
}
|
|
50
|
+
throw new Error(`Unsupported ARM parent expression for "${resource.bicepIdentifier}".`);
|
|
51
|
+
}
|
|
52
|
+
//# sourceMappingURL=resource-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-utils.js","sourceRoot":"","sources":["../../../../src/serialization/ast/resource-utils.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAIlC,iFAAiF;AACjF,MAAM,UAAU,kBAAkB,CAChC,IAAwB,EACxB,SAA8C;IAE9C,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,QAAQ;YACX,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC;QACzB,KAAK,cAAc,CAAC;QACpB,KAAK,gBAAgB,CAAC,CAAC,CAAC;YACtB,IACE,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ;gBAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc;gBACjC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,EACnC,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;YAChE,CAAC;YACD,OAAO,EAAE,GAAG,IAAI,EAAE,IAAI,EAAE,kBAAkB,CAAC,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,CAAC;QACrE,CAAC;IACH,CAAC;AACH,CAAC;AAED,6EAA6E;AAC7E,MAAM,UAAU,eAAe,CAAC,IAAwB;IACtD,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ;QAAE,OAAO,IAAI,CAAC;IACxC,IACE,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ;QAC3B,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc;QACjC,IAAI,CAAC,IAAI,CAAC,IAAI,KAAK,gBAAgB,EACnC,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,0BAA0B,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;IAChE,CAAC;IACD,OAAO,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpC,CAAC;AAED,gFAAgF;AAChF,MAAM,UAAU,mBAAmB,CAAC,QAAiC;IACnE,OAAO;QACL,GAAG,QAAQ;QACX,KAAK,EAAE,kBAAkB,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,IAAI,EAAE,EAAE;YACjD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,IAAI,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC;YAC9C,OAAO,EAAE,GAAG,IAAI,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;QAClC,CAAC,CAAC;KACH,CAAC;AACJ,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,8BAA8B,CAC5C,QAAiC;IAEjC,MAAM,MAAM,GAAG,eAAe,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC;IAC5D,IAAI,MAAM,KAAK,SAAS;QAAE,OAAO,SAAS,CAAC;IAC3C,IAAI,MAAM,CAAC,IAAI,KAAK,YAAY;QAAE,OAAO,MAAM,CAAC,EAAE,CAAC;IACnD,IAAI,MAAM,CAAC,IAAI,KAAK,cAAc,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;QACxE,OAAO,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;IACxB,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,0CAA0C,QAAQ,CAAC,eAAe,IAAI,CAAC,CAAC;AAC1F,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { DeclarableBodyNode, ObjectValue, ResourceDeclarationNode } from \"./index.js\";\n\n/** Transforms a resource's object body while preserving conditions and loops. */\nexport function updateResourceBody(\n body: DeclarableBodyNode,\n transform: (value: ObjectValue) => ObjectValue,\n): DeclarableBodyNode {\n switch (body.kind) {\n case \"object\":\n return transform(body);\n case \"if-condition\":\n case \"for-expression\": {\n if (\n body.body.kind !== \"object\" &&\n body.body.kind !== \"if-condition\" &&\n body.body.kind !== \"for-expression\"\n ) {\n throw new Error(`Invalid resource body \"${body.body.kind}\".`);\n }\n return { ...body, body: updateResourceBody(body.body, transform) };\n }\n }\n}\n\n/** Gets the object body beneath a resource's condition and loop wrappers. */\nexport function getResourceBody(body: DeclarableBodyNode): ObjectValue {\n if (body.kind === \"object\") return body;\n if (\n body.body.kind !== \"object\" &&\n body.body.kind !== \"if-condition\" &&\n body.body.kind !== \"for-expression\"\n ) {\n throw new Error(`Invalid resource body \"${body.body.kind}\".`);\n }\n return getResourceBody(body.body);\n}\n\n/** Removes the scope field without changing other resource declaration data. */\nexport function removeResourceScope(resource: ResourceDeclarationNode): ResourceDeclarationNode {\n return {\n ...resource,\n value: updateResourceBody(resource.value, (body) => {\n const { scope: _scope, ...rest } = body.value;\n return { ...body, value: rest };\n }),\n };\n}\n\n/** Gets the parent declaration identifier, including indexed parent accesses. */\nexport function getResourceArmParentIdentifier(\n resource: ResourceDeclarationNode,\n): string | undefined {\n const parent = getResourceBody(resource.value).value.parent;\n if (parent === undefined) return undefined;\n if (parent.kind === \"identifier\") return parent.id;\n if (parent.kind === \"array-access\" && parent.base.kind === \"identifier\") {\n return parent.base.id;\n }\n throw new Error(`Unsupported ARM parent expression for \"${resource.bicepIdentifier}\".`);\n}\n"]}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Stack } from "../../../constructs/stack.js";
|
|
2
|
+
import type { ResourceDeclaration } from "../../../constructs/resource/resource.js";
|
|
3
|
+
import type { DeclarationSymbolMap } from "../../symbol-map.js";
|
|
4
|
+
export interface AuthoredResourceContext {
|
|
5
|
+
/** Nearest authored resource ancestor, including resource groups. */
|
|
6
|
+
readonly authoredParent: string | undefined;
|
|
7
|
+
/** Existing-explicit lookups affect placement; pass-through-explicit scopes only affect emitted bodies. */
|
|
8
|
+
readonly scopeOrigin: "existing-explicit" | "pass-through-explicit" | "resourceGroup" | "none";
|
|
9
|
+
}
|
|
10
|
+
export declare function validateResourceAncestry(stack: Stack, resources: readonly ResourceDeclaration[]): void;
|
|
11
|
+
export declare function collectAuthoredResourceContexts(resources: readonly ResourceDeclaration[], symbols: DeclarationSymbolMap): ReadonlyMap<string, AuthoredResourceContext>;
|
|
12
|
+
//# sourceMappingURL=authored-context.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authored-context.d.ts","sourceRoot":"","sources":["../../../../../src/serialization/bicep/file-layout/authored-context.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAE1D,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0CAA0C,CAAC;AAMpF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,qBAAqB,CAAC;AAGhE,MAAM,WAAW,uBAAuB;IACtC,qEAAqE;IACrE,QAAQ,CAAC,cAAc,EAAE,MAAM,GAAG,SAAS,CAAC;IAC5C,2GAA2G;IAC3G,QAAQ,CAAC,WAAW,EAAE,mBAAmB,GAAG,uBAAuB,GAAG,eAAe,GAAG,MAAM,CAAC;CAChG;AAWD,wBAAgB,wBAAwB,CACtC,KAAK,EAAE,KAAK,EACZ,SAAS,EAAE,SAAS,mBAAmB,EAAE,GACxC,IAAI,CAcN;AAED,wBAAgB,+BAA+B,CAC7C,SAAS,EAAE,SAAS,mBAAmB,EAAE,EACzC,OAAO,EAAE,oBAAoB,GAC5B,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,CA4B9C"}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { isResourceDeclaration } from "../../../constructs/resource/resource-utils.js";
|
|
4
|
+
import { getArmParent, getResourceGroupAncestor, getResourceScope, } from "../../../constructs/resource/resource-relationships.js";
|
|
5
|
+
import { getScopeFunctionTarget } from "../../../expression/utils.js";
|
|
6
|
+
/** Distinguishes pass-through declaration data from supported existing lookups. */
|
|
7
|
+
function usesPassThroughExplicitScope(resource) {
|
|
8
|
+
const scope = getResourceScope(resource);
|
|
9
|
+
return (scope !== undefined &&
|
|
10
|
+
(resource.existing !== true || getScopeFunctionTarget(scope) === undefined));
|
|
11
|
+
}
|
|
12
|
+
export function validateResourceAncestry(stack, resources) {
|
|
13
|
+
const resourceSet = new Set(resources);
|
|
14
|
+
for (const resource of resources) {
|
|
15
|
+
const ancestors = new Set([resource.self]);
|
|
16
|
+
for (let parent = resource.parent; parent !== undefined; parent = parent.parent) {
|
|
17
|
+
if (ancestors.has(parent.self)) {
|
|
18
|
+
throw new Error(`Cyclic resource attachment in Stack "${stack.name}".`);
|
|
19
|
+
}
|
|
20
|
+
ancestors.add(parent.self);
|
|
21
|
+
if (isResourceDeclaration(parent) && !resourceSet.has(parent.self)) {
|
|
22
|
+
throw new Error(`Resource "${resource.type}" has a parent outside Stack "${stack.name}".`);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export function collectAuthoredResourceContexts(resources, symbols) {
|
|
28
|
+
const resourceContexts = new Map();
|
|
29
|
+
for (const resource of resources) {
|
|
30
|
+
const identifier = symbols.get(resource);
|
|
31
|
+
if (identifier === undefined) {
|
|
32
|
+
throw new Error(`Missing symbol for resource type "${resource.type}".`);
|
|
33
|
+
}
|
|
34
|
+
let authoredParent;
|
|
35
|
+
for (let parent = resource.parent; parent !== undefined; parent = parent.parent) {
|
|
36
|
+
if (!isResourceDeclaration(parent))
|
|
37
|
+
continue;
|
|
38
|
+
authoredParent = symbols.get(parent.self);
|
|
39
|
+
if (authoredParent === undefined) {
|
|
40
|
+
throw new Error(`Missing authored parent symbol for resource "${identifier}".`);
|
|
41
|
+
}
|
|
42
|
+
break;
|
|
43
|
+
}
|
|
44
|
+
resourceContexts.set(identifier, {
|
|
45
|
+
authoredParent,
|
|
46
|
+
scopeOrigin: usesPassThroughExplicitScope(resource)
|
|
47
|
+
? "pass-through-explicit"
|
|
48
|
+
: getResourceScope(resource) !== undefined
|
|
49
|
+
? "existing-explicit"
|
|
50
|
+
: getArmParent(resource) === undefined && getResourceGroupAncestor(resource) !== undefined
|
|
51
|
+
? "resourceGroup"
|
|
52
|
+
: "none",
|
|
53
|
+
});
|
|
54
|
+
}
|
|
55
|
+
return resourceContexts;
|
|
56
|
+
}
|
|
57
|
+
//# sourceMappingURL=authored-context.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"authored-context.js","sourceRoot":"","sources":["../../../../../src/serialization/bicep/file-layout/authored-context.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { isResourceDeclaration } from \"../../../constructs/resource/resource-utils.js\";\nimport type { Stack } from \"../../../constructs/stack.js\";\nimport type { ProvisioningComponent } from \"../../../constructs/provisioning-component.js\";\nimport type { ResourceDeclaration } from \"../../../constructs/resource/resource.js\";\nimport {\n getArmParent,\n getResourceGroupAncestor,\n getResourceScope,\n} from \"../../../constructs/resource/resource-relationships.js\";\nimport type { DeclarationSymbolMap } from \"../../symbol-map.js\";\nimport { getScopeFunctionTarget } from \"../../../expression/utils.js\";\n\nexport interface AuthoredResourceContext {\n /** Nearest authored resource ancestor, including resource groups. */\n readonly authoredParent: string | undefined;\n /** Existing-explicit lookups affect placement; pass-through-explicit scopes only affect emitted bodies. */\n readonly scopeOrigin: \"existing-explicit\" | \"pass-through-explicit\" | \"resourceGroup\" | \"none\";\n}\n\n/** Distinguishes pass-through declaration data from supported existing lookups. */\nfunction usesPassThroughExplicitScope(resource: ResourceDeclaration): boolean {\n const scope = getResourceScope(resource);\n return (\n scope !== undefined &&\n (resource.existing !== true || getScopeFunctionTarget(scope) === undefined)\n );\n}\n\nexport function validateResourceAncestry(\n stack: Stack,\n resources: readonly ResourceDeclaration[],\n): void {\n const resourceSet = new Set(resources);\n for (const resource of resources) {\n const ancestors = new Set<ProvisioningComponent>([resource.self]);\n for (let parent = resource.parent; parent !== undefined; parent = parent.parent) {\n if (ancestors.has(parent.self)) {\n throw new Error(`Cyclic resource attachment in Stack \"${stack.name}\".`);\n }\n ancestors.add(parent.self);\n if (isResourceDeclaration(parent) && !resourceSet.has(parent.self)) {\n throw new Error(`Resource \"${resource.type}\" has a parent outside Stack \"${stack.name}\".`);\n }\n }\n }\n}\n\nexport function collectAuthoredResourceContexts(\n resources: readonly ResourceDeclaration[],\n symbols: DeclarationSymbolMap,\n): ReadonlyMap<string, AuthoredResourceContext> {\n const resourceContexts = new Map<string, AuthoredResourceContext>();\n for (const resource of resources) {\n const identifier = symbols.get(resource);\n if (identifier === undefined) {\n throw new Error(`Missing symbol for resource type \"${resource.type}\".`);\n }\n let authoredParent: string | undefined;\n for (let parent = resource.parent; parent !== undefined; parent = parent.parent) {\n if (!isResourceDeclaration(parent)) continue;\n authoredParent = symbols.get(parent.self);\n if (authoredParent === undefined) {\n throw new Error(`Missing authored parent symbol for resource \"${identifier}\".`);\n }\n break;\n }\n resourceContexts.set(identifier, {\n authoredParent,\n scopeOrigin: usesPassThroughExplicitScope(resource)\n ? \"pass-through-explicit\"\n : getResourceScope(resource) !== undefined\n ? \"existing-explicit\"\n : getArmParent(resource) === undefined && getResourceGroupAncestor(resource) !== undefined\n ? \"resourceGroup\"\n : \"none\",\n });\n }\n return resourceContexts;\n}\n"]}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { ExpressionReference } from "../../ast/expression-rewriter.js";
|
|
2
|
+
import type { BicepAst } from "./file-preparation.js";
|
|
3
|
+
export declare const RESOURCE_NAME_OVERRIDES: ReadonlyMap<string, string>;
|
|
4
|
+
export declare class BicepNamer {
|
|
5
|
+
#private;
|
|
6
|
+
constructor(ast: BicepAst);
|
|
7
|
+
moduleName(rootIdentifier: string, fileName: string): string;
|
|
8
|
+
parameterName(reference: ExpressionReference): string;
|
|
9
|
+
outputName(reference: ExpressionReference, preferredName?: string): string;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=bicep-namer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bicep-namer.d.ts","sourceRoot":"","sources":["../../../../../src/serialization/bicep/file-layout/bicep-namer.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,kCAAkC,CAAC;AAC5E,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAGtD,eAAO,MAAM,uBAAuB,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,CAW9D,CAAC;AAuBH,qBAAa,UAAU;;gBAIT,GAAG,EAAE,QAAQ;IAczB,UAAU,CAAC,cAAc,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQ5D,aAAa,CAAC,SAAS,EAAE,mBAAmB,GAAG,MAAM;IAIrD,UAAU,CACR,SAAS,EAAE,mBAAmB,EAC9B,aAAa,GAAE,MAAqC,GACnD,MAAM;CAGV"}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { sanitizeIdentifier } from "../../identifiers.js";
|
|
4
|
+
import { walkDeclarationExpressions } from "../../ast/expression-walker.js";
|
|
5
|
+
// Deliberately limited to built-in names likely to collide with resource symbols.
|
|
6
|
+
export const RESOURCE_NAME_OVERRIDES = new Map([
|
|
7
|
+
["resourceGroup", "rg"],
|
|
8
|
+
["subscription", "subscriptionResource"],
|
|
9
|
+
["managementGroup", "managementGroupResource"],
|
|
10
|
+
["tenant", "tenantResource"],
|
|
11
|
+
["deployment", "deploymentResource"],
|
|
12
|
+
["environment", "environmentResource"],
|
|
13
|
+
["reference", "referenceResource"],
|
|
14
|
+
["guid", "guidResource"],
|
|
15
|
+
["format", "formatResource"],
|
|
16
|
+
["range", "rangeResource"],
|
|
17
|
+
]);
|
|
18
|
+
function collectLoopBindings(ast) {
|
|
19
|
+
const loopBindings = new Set();
|
|
20
|
+
for (const declaration of [
|
|
21
|
+
...ast.resources.values(),
|
|
22
|
+
...ast.parameters.values(),
|
|
23
|
+
...ast.variables.values(),
|
|
24
|
+
...ast.outputs.values(),
|
|
25
|
+
...ast.modules.values(),
|
|
26
|
+
]) {
|
|
27
|
+
walkDeclarationExpressions(declaration, (node) => {
|
|
28
|
+
if (node.kind === "for-expression") {
|
|
29
|
+
loopBindings.add(node.itemVariable);
|
|
30
|
+
if (node.indexVariable !== undefined) {
|
|
31
|
+
loopBindings.add(node.indexVariable);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
return loopBindings;
|
|
37
|
+
}
|
|
38
|
+
export class BicepNamer {
|
|
39
|
+
#usedNames;
|
|
40
|
+
#usedOutputNames = new Set();
|
|
41
|
+
constructor(ast) {
|
|
42
|
+
this.#usedNames = new Set([...RESOURCE_NAME_OVERRIDES.keys(), ...collectLoopBindings(ast)].map((name) => name.toLowerCase()));
|
|
43
|
+
for (const declarations of [ast.parameters, ast.variables, ast.resources, ast.modules]) {
|
|
44
|
+
for (const declaration of declarations.values()) {
|
|
45
|
+
this.#usedNames.add(declaration.bicepIdentifier.toLowerCase());
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
for (const name of ast.outputs.keys())
|
|
49
|
+
this.#usedOutputNames.add(name.toLowerCase());
|
|
50
|
+
}
|
|
51
|
+
moduleName(rootIdentifier, fileName) {
|
|
52
|
+
return createUniqueName(`${rootIdentifier}Module`, sanitizeIdentifier(fileName.replace(/\.bicep$/u, ""), "file"), this.#usedNames);
|
|
53
|
+
}
|
|
54
|
+
parameterName(reference) {
|
|
55
|
+
return createUniqueName(buildRefParamName(reference), reference.identifier, this.#usedNames);
|
|
56
|
+
}
|
|
57
|
+
outputName(reference, preferredName = buildRefParamName(reference)) {
|
|
58
|
+
return createUniqueName(preferredName, reference.identifier, this.#usedOutputNames);
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
function buildRefParamName(reference) {
|
|
62
|
+
const segments = reference.path.map((segment) => {
|
|
63
|
+
if (typeof segment === "number")
|
|
64
|
+
return String(segment);
|
|
65
|
+
const name = sanitizeIdentifier(segment);
|
|
66
|
+
return name.charAt(0).toUpperCase() + name.slice(1);
|
|
67
|
+
});
|
|
68
|
+
let modifiers = "";
|
|
69
|
+
let current = reference.expression;
|
|
70
|
+
let depth = 0;
|
|
71
|
+
while (current.kind === "property-access" || current.kind === "array-access") {
|
|
72
|
+
if (current.nullish)
|
|
73
|
+
modifiers += `Safe${depth}`;
|
|
74
|
+
if (current.kind === "array-access" && current.fromEnd) {
|
|
75
|
+
modifiers += `FromEnd${depth}`;
|
|
76
|
+
}
|
|
77
|
+
current = current.base;
|
|
78
|
+
depth++;
|
|
79
|
+
}
|
|
80
|
+
return reference.identifier + segments.join("") + modifiers;
|
|
81
|
+
}
|
|
82
|
+
function createUniqueName(name, alias, usedNames) {
|
|
83
|
+
if (!usedNames.has(name.toLowerCase())) {
|
|
84
|
+
usedNames.add(name.toLowerCase());
|
|
85
|
+
return name;
|
|
86
|
+
}
|
|
87
|
+
const stem = `${alias}${name.charAt(0).toUpperCase()}${name.slice(1)}`;
|
|
88
|
+
if (!usedNames.has(stem.toLowerCase())) {
|
|
89
|
+
usedNames.add(stem.toLowerCase());
|
|
90
|
+
return stem;
|
|
91
|
+
}
|
|
92
|
+
let counter = 2;
|
|
93
|
+
while (usedNames.has(`${stem}${counter}`.toLowerCase())) {
|
|
94
|
+
counter += 1;
|
|
95
|
+
}
|
|
96
|
+
const uniqueName = `${stem}${counter}`;
|
|
97
|
+
usedNames.add(uniqueName.toLowerCase());
|
|
98
|
+
return uniqueName;
|
|
99
|
+
}
|
|
100
|
+
//# sourceMappingURL=bicep-namer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bicep-namer.js","sourceRoot":"","sources":["../../../../../src/serialization/bicep/file-layout/bicep-namer.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { sanitizeIdentifier } from \"../../identifiers.js\";\nimport { walkDeclarationExpressions } from \"../../ast/expression-walker.js\";\nimport type { ExpressionReference } from \"../../ast/expression-rewriter.js\";\nimport type { BicepAst } from \"./file-preparation.js\";\n\n// Deliberately limited to built-in names likely to collide with resource symbols.\nexport const RESOURCE_NAME_OVERRIDES: ReadonlyMap<string, string> = new Map([\n [\"resourceGroup\", \"rg\"],\n [\"subscription\", \"subscriptionResource\"],\n [\"managementGroup\", \"managementGroupResource\"],\n [\"tenant\", \"tenantResource\"],\n [\"deployment\", \"deploymentResource\"],\n [\"environment\", \"environmentResource\"],\n [\"reference\", \"referenceResource\"],\n [\"guid\", \"guidResource\"],\n [\"format\", \"formatResource\"],\n [\"range\", \"rangeResource\"],\n]);\n\nfunction collectLoopBindings(ast: BicepAst): ReadonlySet<string> {\n const loopBindings = new Set<string>();\n for (const declaration of [\n ...ast.resources.values(),\n ...ast.parameters.values(),\n ...ast.variables.values(),\n ...ast.outputs.values(),\n ...ast.modules.values(),\n ]) {\n walkDeclarationExpressions(declaration, (node) => {\n if (node.kind === \"for-expression\") {\n loopBindings.add(node.itemVariable);\n if (node.indexVariable !== undefined) {\n loopBindings.add(node.indexVariable);\n }\n }\n });\n }\n return loopBindings;\n}\n\nexport class BicepNamer {\n readonly #usedNames: Set<string>;\n readonly #usedOutputNames = new Set<string>();\n\n constructor(ast: BicepAst) {\n this.#usedNames = new Set(\n [...RESOURCE_NAME_OVERRIDES.keys(), ...collectLoopBindings(ast)].map((name) =>\n name.toLowerCase(),\n ),\n );\n for (const declarations of [ast.parameters, ast.variables, ast.resources, ast.modules]) {\n for (const declaration of declarations.values()) {\n this.#usedNames.add(declaration.bicepIdentifier.toLowerCase());\n }\n }\n for (const name of ast.outputs.keys()) this.#usedOutputNames.add(name.toLowerCase());\n }\n\n moduleName(rootIdentifier: string, fileName: string): string {\n return createUniqueName(\n `${rootIdentifier}Module`,\n sanitizeIdentifier(fileName.replace(/\\.bicep$/u, \"\"), \"file\"),\n this.#usedNames,\n );\n }\n\n parameterName(reference: ExpressionReference): string {\n return createUniqueName(buildRefParamName(reference), reference.identifier, this.#usedNames);\n }\n\n outputName(\n reference: ExpressionReference,\n preferredName: string = buildRefParamName(reference),\n ): string {\n return createUniqueName(preferredName, reference.identifier, this.#usedOutputNames);\n }\n}\n\nfunction buildRefParamName(reference: ExpressionReference): string {\n const segments = reference.path.map((segment) => {\n if (typeof segment === \"number\") return String(segment);\n const name = sanitizeIdentifier(segment);\n return name.charAt(0).toUpperCase() + name.slice(1);\n });\n let modifiers = \"\";\n let current = reference.expression;\n let depth = 0;\n while (current.kind === \"property-access\" || current.kind === \"array-access\") {\n if (current.nullish) modifiers += `Safe${depth}`;\n if (current.kind === \"array-access\" && current.fromEnd) {\n modifiers += `FromEnd${depth}`;\n }\n current = current.base;\n depth++;\n }\n return reference.identifier + segments.join(\"\") + modifiers;\n}\n\nfunction createUniqueName(name: string, alias: string, usedNames: Set<string>): string {\n if (!usedNames.has(name.toLowerCase())) {\n usedNames.add(name.toLowerCase());\n return name;\n }\n\n const stem = `${alias}${name.charAt(0).toUpperCase()}${name.slice(1)}`;\n\n if (!usedNames.has(stem.toLowerCase())) {\n usedNames.add(stem.toLowerCase());\n return stem;\n }\n\n let counter = 2;\n while (usedNames.has(`${stem}${counter}`.toLowerCase())) {\n counter += 1;\n }\n\n const uniqueName = `${stem}${counter}`;\n\n usedNames.add(uniqueName.toLowerCase());\n return uniqueName;\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { Stack } from "../../../constructs/stack.js";
|
|
2
|
+
import type { InfraNode } from "../../ast/index.js";
|
|
3
|
+
import { type PreparedBicepFile } from "./file-preparation.js";
|
|
4
|
+
export declare function toInfraNode(file: PreparedBicepFile): InfraNode;
|
|
5
|
+
/** Builds enriched declaration ASTs, then plans and wires deployment files. */
|
|
6
|
+
export declare function buildBicepFiles(stack: Stack): readonly InfraNode[];
|
|
7
|
+
//# sourceMappingURL=build-bicep-files.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-bicep-files.d.ts","sourceRoot":"","sources":["../../../../../src/serialization/bicep/file-layout/build-bicep-files.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,8BAA8B,CAAC;AAI1D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAIpD,OAAO,EAGL,KAAK,iBAAiB,EACvB,MAAM,uBAAuB,CAAC;AAG/B,wBAAgB,WAAW,CAAC,IAAI,EAAE,iBAAiB,GAAG,SAAS,CAW9D;AAED,+EAA+E;AAC/E,wBAAgB,eAAe,CAAC,KAAK,EAAE,KAAK,GAAG,SAAS,SAAS,EAAE,CAqBlE"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { collectResourceDeclarations } from "../../../constructs/resource/resource-query.js";
|
|
4
|
+
import { buildStackDeclarations } from "../../ast/declaration-builder.js";
|
|
5
|
+
import { createSymbolMap } from "../../symbol-map.js";
|
|
6
|
+
import { collectAuthoredResourceContexts, validateResourceAncestry } from "./authored-context.js";
|
|
7
|
+
import { planDeploymentFiles } from "./deployment-planning.js";
|
|
8
|
+
import { BicepNamer, RESOURCE_NAME_OVERRIDES } from "./bicep-namer.js";
|
|
9
|
+
import { prepareDeploymentFiles, } from "./file-preparation.js";
|
|
10
|
+
import { wireDeploymentFiles } from "./reference-wiring.js";
|
|
11
|
+
export function toInfraNode(file) {
|
|
12
|
+
const { ast } = file;
|
|
13
|
+
return {
|
|
14
|
+
fileName: file.fileName,
|
|
15
|
+
targetScope: file.targetScope,
|
|
16
|
+
...(ast.resources.size === 0 ? {} : { resources: Object.fromEntries(ast.resources) }),
|
|
17
|
+
...(ast.parameters.size === 0 ? {} : { parameters: Object.fromEntries(ast.parameters) }),
|
|
18
|
+
...(ast.variables.size === 0 ? {} : { variables: Object.fromEntries(ast.variables) }),
|
|
19
|
+
...(ast.outputs.size === 0 ? {} : { outputs: Object.fromEntries(ast.outputs) }),
|
|
20
|
+
...(ast.modules.size === 0 ? {} : { modules: Object.fromEntries(ast.modules) }),
|
|
21
|
+
};
|
|
22
|
+
}
|
|
23
|
+
/** Builds enriched declaration ASTs, then plans and wires deployment files. */
|
|
24
|
+
export function buildBicepFiles(stack) {
|
|
25
|
+
const resources = collectResourceDeclarations(stack);
|
|
26
|
+
validateResourceAncestry(stack, resources);
|
|
27
|
+
const symbols = createSymbolMap(resources, stack, RESOURCE_NAME_OVERRIDES);
|
|
28
|
+
const declarations = buildStackDeclarations(stack, resources, symbols);
|
|
29
|
+
const stackAst = {
|
|
30
|
+
targetScope: stack.targetScope,
|
|
31
|
+
resources: new Map(Object.entries(declarations.resources ?? {})),
|
|
32
|
+
parameters: new Map(Object.entries(declarations.parameters ?? {})),
|
|
33
|
+
variables: new Map(Object.entries(declarations.variables ?? {})),
|
|
34
|
+
outputs: new Map(Object.entries(declarations.outputs ?? {})),
|
|
35
|
+
modules: new Map(),
|
|
36
|
+
};
|
|
37
|
+
const namer = new BicepNamer(stackAst);
|
|
38
|
+
const resourceContexts = collectAuthoredResourceContexts(resources, symbols);
|
|
39
|
+
const layout = planDeploymentFiles(stackAst, resourceContexts);
|
|
40
|
+
const prepared = prepareDeploymentFiles(stack.name, stackAst, resourceContexts, layout, namer);
|
|
41
|
+
if (prepared.modules.length > 0) {
|
|
42
|
+
wireDeploymentFiles(stack.name, prepared);
|
|
43
|
+
}
|
|
44
|
+
return [toInfraNode(prepared.entry), ...prepared.modules.map(({ file }) => toInfraNode(file))];
|
|
45
|
+
}
|
|
46
|
+
//# sourceMappingURL=build-bicep-files.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"build-bicep-files.js","sourceRoot":"","sources":["../../../../../src/serialization/bicep/file-layout/build-bicep-files.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { Stack } from \"../../../constructs/stack.js\";\nimport { collectResourceDeclarations } from \"../../../constructs/resource/resource-query.js\";\nimport { buildStackDeclarations } from \"../../ast/declaration-builder.js\";\nimport { createSymbolMap } from \"../../symbol-map.js\";\nimport type { InfraNode } from \"../../ast/index.js\";\nimport { collectAuthoredResourceContexts, validateResourceAncestry } from \"./authored-context.js\";\nimport { planDeploymentFiles } from \"./deployment-planning.js\";\nimport { BicepNamer, RESOURCE_NAME_OVERRIDES } from \"./bicep-namer.js\";\nimport {\n prepareDeploymentFiles,\n type BicepAst,\n type PreparedBicepFile,\n} from \"./file-preparation.js\";\nimport { wireDeploymentFiles } from \"./reference-wiring.js\";\n\nexport function toInfraNode(file: PreparedBicepFile): InfraNode {\n const { ast } = file;\n return {\n fileName: file.fileName,\n targetScope: file.targetScope,\n ...(ast.resources.size === 0 ? {} : { resources: Object.fromEntries(ast.resources) }),\n ...(ast.parameters.size === 0 ? {} : { parameters: Object.fromEntries(ast.parameters) }),\n ...(ast.variables.size === 0 ? {} : { variables: Object.fromEntries(ast.variables) }),\n ...(ast.outputs.size === 0 ? {} : { outputs: Object.fromEntries(ast.outputs) }),\n ...(ast.modules.size === 0 ? {} : { modules: Object.fromEntries(ast.modules) }),\n };\n}\n\n/** Builds enriched declaration ASTs, then plans and wires deployment files. */\nexport function buildBicepFiles(stack: Stack): readonly InfraNode[] {\n const resources = collectResourceDeclarations(stack);\n validateResourceAncestry(stack, resources);\n const symbols = createSymbolMap(resources, stack, RESOURCE_NAME_OVERRIDES);\n const declarations = buildStackDeclarations(stack, resources, symbols);\n const stackAst: BicepAst = {\n targetScope: stack.targetScope,\n resources: new Map(Object.entries(declarations.resources ?? {})),\n parameters: new Map(Object.entries(declarations.parameters ?? {})),\n variables: new Map(Object.entries(declarations.variables ?? {})),\n outputs: new Map(Object.entries(declarations.outputs ?? {})),\n modules: new Map(),\n };\n const namer = new BicepNamer(stackAst);\n const resourceContexts = collectAuthoredResourceContexts(resources, symbols);\n const layout = planDeploymentFiles(stackAst, resourceContexts);\n const prepared = prepareDeploymentFiles(stack.name, stackAst, resourceContexts, layout, namer);\n if (prepared.modules.length > 0) {\n wireDeploymentFiles(stack.name, prepared);\n }\n return [toInfraNode(prepared.entry), ...prepared.modules.map(({ file }) => toInfraNode(file))];\n}\n"]}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { ExpressionNode, TargetScope } from "../../ast/index.js";
|
|
2
|
+
import type { AuthoredResourceContext } from "./authored-context.js";
|
|
3
|
+
import type { BicepAst } from "./file-preparation.js";
|
|
4
|
+
export interface DeploymentFilePlan {
|
|
5
|
+
readonly boundary: string | undefined;
|
|
6
|
+
readonly resources: Set<string>;
|
|
7
|
+
readonly authoredResourceGroup: string | undefined;
|
|
8
|
+
readonly moduleScope: ExpressionNode | undefined;
|
|
9
|
+
readonly targetScope: TargetScope;
|
|
10
|
+
}
|
|
11
|
+
export interface DeploymentLayout {
|
|
12
|
+
readonly entryPlan: DeploymentFilePlan;
|
|
13
|
+
readonly deployments: readonly DeploymentFilePlan[];
|
|
14
|
+
readonly pureExistingResources: ReadonlySet<string>;
|
|
15
|
+
readonly existingResourceToAuthoredResourceGroup: ReadonlyMap<string, string | undefined>;
|
|
16
|
+
readonly existingResourcesWithExplicitScope: ReadonlySet<string>;
|
|
17
|
+
}
|
|
18
|
+
export declare function planDeploymentFiles(stackAst: BicepAst, authoredContexts: ReadonlyMap<string, AuthoredResourceContext>): DeploymentLayout;
|
|
19
|
+
//# sourceMappingURL=deployment-planning.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-planning.d.ts","sourceRoot":"","sources":["../../../../../src/serialization/bicep/file-layout/deployment-planning.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAEtE,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AAErE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,MAAM,WAAW,kBAAkB;IACjC,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,CAAC;IACtC,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAChC,QAAQ,CAAC,qBAAqB,EAAE,MAAM,GAAG,SAAS,CAAC;IACnD,QAAQ,CAAC,WAAW,EAAE,cAAc,GAAG,SAAS,CAAC;IACjD,QAAQ,CAAC,WAAW,EAAE,WAAW,CAAC;CACnC;AAED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,SAAS,EAAE,kBAAkB,CAAC;IACvC,QAAQ,CAAC,WAAW,EAAE,SAAS,kBAAkB,EAAE,CAAC;IACpD,QAAQ,CAAC,qBAAqB,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;IACpD,QAAQ,CAAC,uCAAuC,EAAE,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC1F,QAAQ,CAAC,kCAAkC,EAAE,WAAW,CAAC,MAAM,CAAC,CAAC;CAClE;AAED,wBAAgB,mBAAmB,CACjC,QAAQ,EAAE,QAAQ,EAClB,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,GAC7D,gBAAgB,CAmElB"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { ResourceGroup } from "../../../constructs/built-in-resources/resource-group.js";
|
|
4
|
+
import { getResourceBody } from "../../ast/resource-utils.js";
|
|
5
|
+
import { groupArmResourcesByRoot, getTargetScope } from "./deployment-resource-utils.js";
|
|
6
|
+
export function planDeploymentFiles(stackAst, authoredContexts) {
|
|
7
|
+
const entryPlan = {
|
|
8
|
+
boundary: undefined,
|
|
9
|
+
resources: new Set(),
|
|
10
|
+
authoredResourceGroup: undefined,
|
|
11
|
+
moduleScope: undefined,
|
|
12
|
+
targetScope: stackAst.targetScope,
|
|
13
|
+
};
|
|
14
|
+
const armResourcesByRoot = groupArmResourcesByRoot(stackAst.resources, authoredContexts);
|
|
15
|
+
const deployments = [];
|
|
16
|
+
const pureExistingResources = new Set();
|
|
17
|
+
const existingResourceToAuthoredResourceGroup = new Map();
|
|
18
|
+
const existingResourcesWithExplicitScope = new Set();
|
|
19
|
+
for (const [root, treeResources] of armResourcesByRoot) {
|
|
20
|
+
const resource = stackAst.resources.get(root);
|
|
21
|
+
const rootContext = authoredContexts.get(root);
|
|
22
|
+
const authoredResourceGroup = rootContext.authoredParent;
|
|
23
|
+
const moduleScope = rootContext.scopeOrigin === "pass-through-explicit"
|
|
24
|
+
? authoredResourceGroup === undefined
|
|
25
|
+
? undefined
|
|
26
|
+
: { kind: "identifier", id: authoredResourceGroup }
|
|
27
|
+
: getResourceBody(resource.value).value.scope;
|
|
28
|
+
if (resource.type === ResourceGroup.resourceType ||
|
|
29
|
+
(stackAst.targetScope === "subscription" && moduleScope === undefined)) {
|
|
30
|
+
for (const name of treeResources)
|
|
31
|
+
entryPlan.resources.add(name);
|
|
32
|
+
}
|
|
33
|
+
else if ([...treeResources].every((name) => stackAst.resources.get(name).existing)) {
|
|
34
|
+
for (const name of treeResources) {
|
|
35
|
+
pureExistingResources.add(name);
|
|
36
|
+
existingResourceToAuthoredResourceGroup.set(name, authoredResourceGroup);
|
|
37
|
+
for (let ancestor = name; ancestor !== undefined && ancestor !== authoredResourceGroup; ancestor = authoredContexts.get(ancestor).authoredParent) {
|
|
38
|
+
const origin = authoredContexts.get(ancestor).scopeOrigin;
|
|
39
|
+
if (origin === "existing-explicit" || origin === "pass-through-explicit") {
|
|
40
|
+
existingResourcesWithExplicitScope.add(name);
|
|
41
|
+
break;
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
else {
|
|
47
|
+
deployments.push({
|
|
48
|
+
boundary: root,
|
|
49
|
+
resources: treeResources,
|
|
50
|
+
authoredResourceGroup,
|
|
51
|
+
moduleScope,
|
|
52
|
+
targetScope: rootContext.scopeOrigin === "resourceGroup" ||
|
|
53
|
+
(rootContext.scopeOrigin === "pass-through-explicit" &&
|
|
54
|
+
authoredResourceGroup !== undefined)
|
|
55
|
+
? "resourceGroup"
|
|
56
|
+
: getTargetScope(moduleScope, stackAst.targetScope),
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
entryPlan,
|
|
62
|
+
deployments,
|
|
63
|
+
pureExistingResources,
|
|
64
|
+
existingResourceToAuthoredResourceGroup,
|
|
65
|
+
existingResourcesWithExplicitScope,
|
|
66
|
+
};
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=deployment-planning.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-planning.js","sourceRoot":"","sources":["../../../../../src/serialization/bicep/file-layout/deployment-planning.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { ResourceGroup } from \"../../../constructs/built-in-resources/resource-group.js\";\nimport type { ExpressionNode, TargetScope } from \"../../ast/index.js\";\nimport { getResourceBody } from \"../../ast/resource-utils.js\";\nimport type { AuthoredResourceContext } from \"./authored-context.js\";\nimport { groupArmResourcesByRoot, getTargetScope } from \"./deployment-resource-utils.js\";\nimport type { BicepAst } from \"./file-preparation.js\";\n\nexport interface DeploymentFilePlan {\n readonly boundary: string | undefined;\n readonly resources: Set<string>;\n readonly authoredResourceGroup: string | undefined;\n readonly moduleScope: ExpressionNode | undefined;\n readonly targetScope: TargetScope;\n}\n\nexport interface DeploymentLayout {\n readonly entryPlan: DeploymentFilePlan;\n readonly deployments: readonly DeploymentFilePlan[];\n readonly pureExistingResources: ReadonlySet<string>;\n readonly existingResourceToAuthoredResourceGroup: ReadonlyMap<string, string | undefined>;\n readonly existingResourcesWithExplicitScope: ReadonlySet<string>;\n}\n\nexport function planDeploymentFiles(\n stackAst: BicepAst,\n authoredContexts: ReadonlyMap<string, AuthoredResourceContext>,\n): DeploymentLayout {\n const entryPlan: DeploymentFilePlan = {\n boundary: undefined,\n resources: new Set(),\n authoredResourceGroup: undefined,\n moduleScope: undefined,\n targetScope: stackAst.targetScope,\n };\n const armResourcesByRoot = groupArmResourcesByRoot(stackAst.resources, authoredContexts);\n\n const deployments: DeploymentFilePlan[] = [];\n const pureExistingResources = new Set<string>();\n const existingResourceToAuthoredResourceGroup = new Map<string, string | undefined>();\n const existingResourcesWithExplicitScope = new Set<string>();\n for (const [root, treeResources] of armResourcesByRoot) {\n const resource = stackAst.resources.get(root)!;\n const rootContext = authoredContexts.get(root)!;\n const authoredResourceGroup = rootContext.authoredParent;\n const moduleScope =\n rootContext.scopeOrigin === \"pass-through-explicit\"\n ? authoredResourceGroup === undefined\n ? undefined\n : { kind: \"identifier\" as const, id: authoredResourceGroup }\n : getResourceBody(resource.value).value.scope;\n if (\n resource.type === ResourceGroup.resourceType ||\n (stackAst.targetScope === \"subscription\" && moduleScope === undefined)\n ) {\n for (const name of treeResources) entryPlan.resources.add(name);\n } else if ([...treeResources].every((name) => stackAst.resources.get(name)!.existing)) {\n for (const name of treeResources) {\n pureExistingResources.add(name);\n existingResourceToAuthoredResourceGroup.set(name, authoredResourceGroup);\n for (\n let ancestor: string | undefined = name;\n ancestor !== undefined && ancestor !== authoredResourceGroup;\n ancestor = authoredContexts.get(ancestor)!.authoredParent\n ) {\n const origin = authoredContexts.get(ancestor)!.scopeOrigin;\n if (origin === \"existing-explicit\" || origin === \"pass-through-explicit\") {\n existingResourcesWithExplicitScope.add(name);\n break;\n }\n }\n }\n } else {\n deployments.push({\n boundary: root,\n resources: treeResources,\n authoredResourceGroup,\n moduleScope,\n targetScope:\n rootContext.scopeOrigin === \"resourceGroup\" ||\n (rootContext.scopeOrigin === \"pass-through-explicit\" &&\n authoredResourceGroup !== undefined)\n ? \"resourceGroup\"\n : getTargetScope(moduleScope, stackAst.targetScope),\n });\n }\n }\n return {\n entryPlan,\n deployments,\n pureExistingResources,\n existingResourceToAuthoredResourceGroup,\n existingResourcesWithExplicitScope,\n };\n}\n"]}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import type { ExpressionNode, ResourceDeclarationNode, TargetScope } from "../../ast/index.js";
|
|
2
|
+
import type { AuthoredResourceContext } from "./authored-context.js";
|
|
3
|
+
import type { BicepAst } from "./file-preparation.js";
|
|
4
|
+
export declare function groupArmResourcesByRoot(resources: ReadonlyMap<string, ResourceDeclarationNode>, authoredContexts: ReadonlyMap<string, AuthoredResourceContext>): Map<string, Set<string>>;
|
|
5
|
+
export declare function hasArmParent(name: string, resources: ReadonlyMap<string, ResourceDeclarationNode>, authoredContexts: ReadonlyMap<string, AuthoredResourceContext>): boolean;
|
|
6
|
+
export declare function getTargetScope(scope: ExpressionNode | undefined, fallback: TargetScope): TargetScope;
|
|
7
|
+
export declare function normalizeExtensionScopes(stackAst: BicepAst): void;
|
|
8
|
+
//# sourceMappingURL=deployment-resource-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-resource-utils.d.ts","sourceRoot":"","sources":["../../../../../src/serialization/bicep/file-layout/deployment-resource-utils.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,cAAc,EAAE,uBAAuB,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAG/F,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,uBAAuB,CAAC;AACrE,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,EACvD,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,GAC7D,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC,CAsB1B;AAED,wBAAgB,YAAY,CAC1B,IAAI,EAAE,MAAM,EACZ,SAAS,EAAE,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,EACvD,gBAAgB,EAAE,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,GAC7D,OAAO,CAGT;AAED,wBAAgB,cAAc,CAC5B,KAAK,EAAE,cAAc,GAAG,SAAS,EACjC,QAAQ,EAAE,WAAW,GACpB,WAAW,CAUb;AAED,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,GAAG,IAAI,CAyBjE"}
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { ResourceGroup } from "../../../constructs/built-in-resources/resource-group.js";
|
|
4
|
+
import { getResourceArmParentIdentifier, updateResourceBody } from "../../ast/resource-utils.js";
|
|
5
|
+
import { getScopeFunctionTarget } from "../../../expression/utils.js";
|
|
6
|
+
export function groupArmResourcesByRoot(resources, authoredContexts) {
|
|
7
|
+
const armRootByResource = new Map();
|
|
8
|
+
function getArmTreeRoot(name) {
|
|
9
|
+
const cached = armRootByResource.get(name);
|
|
10
|
+
if (cached !== undefined)
|
|
11
|
+
return cached;
|
|
12
|
+
const parent = authoredContexts.get(name).authoredParent;
|
|
13
|
+
const root = parent === undefined || resources.get(parent).type === ResourceGroup.resourceType
|
|
14
|
+
? name
|
|
15
|
+
: getArmTreeRoot(parent);
|
|
16
|
+
armRootByResource.set(name, root);
|
|
17
|
+
return root;
|
|
18
|
+
}
|
|
19
|
+
const armResourcesByRoot = new Map();
|
|
20
|
+
for (const name of resources.keys()) {
|
|
21
|
+
const root = getArmTreeRoot(name);
|
|
22
|
+
const treeResources = armResourcesByRoot.get(root) ?? new Set();
|
|
23
|
+
treeResources.add(name);
|
|
24
|
+
armResourcesByRoot.set(root, treeResources);
|
|
25
|
+
}
|
|
26
|
+
return armResourcesByRoot;
|
|
27
|
+
}
|
|
28
|
+
export function hasArmParent(name, resources, authoredContexts) {
|
|
29
|
+
const parent = authoredContexts.get(name).authoredParent;
|
|
30
|
+
return parent !== undefined && resources.get(parent).type !== ResourceGroup.resourceType;
|
|
31
|
+
}
|
|
32
|
+
export function getTargetScope(scope, fallback) {
|
|
33
|
+
if (scope === undefined)
|
|
34
|
+
return fallback;
|
|
35
|
+
if (scope.kind !== "function-call" || typeof scope.target !== "string") {
|
|
36
|
+
throw new Error("Unsupported authored deployment scope expression.");
|
|
37
|
+
}
|
|
38
|
+
const target = getScopeFunctionTarget(scope);
|
|
39
|
+
if (target !== undefined) {
|
|
40
|
+
return target;
|
|
41
|
+
}
|
|
42
|
+
throw new Error(`Unsupported deployment scope function "${scope.target}".`);
|
|
43
|
+
}
|
|
44
|
+
export function normalizeExtensionScopes(stackAst) {
|
|
45
|
+
// JSON builders preserve ARM parent metadata; Bicep uses scope for extensions.
|
|
46
|
+
for (const [name, resource] of stackAst.resources) {
|
|
47
|
+
const armParentIdentifier = getResourceArmParentIdentifier(resource);
|
|
48
|
+
const armParent = armParentIdentifier === undefined ? undefined : stackAst.resources.get(armParentIdentifier);
|
|
49
|
+
if (armParentIdentifier !== undefined && armParent === undefined) {
|
|
50
|
+
throw new Error(`Missing ARM parent "${armParentIdentifier}" for resource "${name}".`);
|
|
51
|
+
}
|
|
52
|
+
if (armParent !== undefined &&
|
|
53
|
+
!resource.type.toLowerCase().startsWith(`${armParent.type.toLowerCase()}/`)) {
|
|
54
|
+
stackAst.resources.set(name, {
|
|
55
|
+
...resource,
|
|
56
|
+
value: updateResourceBody(resource.value, (body) => {
|
|
57
|
+
const { parent: target, ...rest } = body.value;
|
|
58
|
+
if (target === undefined) {
|
|
59
|
+
throw new Error(`Missing extension target for "${name}".`);
|
|
60
|
+
}
|
|
61
|
+
return { ...body, value: { scope: target, ...rest } };
|
|
62
|
+
}),
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
//# sourceMappingURL=deployment-resource-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"deployment-resource-utils.js","sourceRoot":"","sources":["../../../../../src/serialization/bicep/file-layout/deployment-resource-utils.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { ResourceGroup } from \"../../../constructs/built-in-resources/resource-group.js\";\nimport type { ExpressionNode, ResourceDeclarationNode, TargetScope } from \"../../ast/index.js\";\nimport { getResourceArmParentIdentifier, updateResourceBody } from \"../../ast/resource-utils.js\";\nimport { getScopeFunctionTarget } from \"../../../expression/utils.js\";\nimport type { AuthoredResourceContext } from \"./authored-context.js\";\nimport type { BicepAst } from \"./file-preparation.js\";\n\nexport function groupArmResourcesByRoot(\n resources: ReadonlyMap<string, ResourceDeclarationNode>,\n authoredContexts: ReadonlyMap<string, AuthoredResourceContext>,\n): Map<string, Set<string>> {\n const armRootByResource = new Map<string, string>();\n function getArmTreeRoot(name: string): string {\n const cached = armRootByResource.get(name);\n if (cached !== undefined) return cached;\n const parent = authoredContexts.get(name)!.authoredParent;\n const root =\n parent === undefined || resources.get(parent)!.type === ResourceGroup.resourceType\n ? name\n : getArmTreeRoot(parent);\n armRootByResource.set(name, root);\n return root;\n }\n\n const armResourcesByRoot = new Map<string, Set<string>>();\n for (const name of resources.keys()) {\n const root = getArmTreeRoot(name);\n const treeResources = armResourcesByRoot.get(root) ?? new Set<string>();\n treeResources.add(name);\n armResourcesByRoot.set(root, treeResources);\n }\n return armResourcesByRoot;\n}\n\nexport function hasArmParent(\n name: string,\n resources: ReadonlyMap<string, ResourceDeclarationNode>,\n authoredContexts: ReadonlyMap<string, AuthoredResourceContext>,\n): boolean {\n const parent = authoredContexts.get(name)!.authoredParent;\n return parent !== undefined && resources.get(parent)!.type !== ResourceGroup.resourceType;\n}\n\nexport function getTargetScope(\n scope: ExpressionNode | undefined,\n fallback: TargetScope,\n): TargetScope {\n if (scope === undefined) return fallback;\n if (scope.kind !== \"function-call\" || typeof scope.target !== \"string\") {\n throw new Error(\"Unsupported authored deployment scope expression.\");\n }\n const target = getScopeFunctionTarget(scope);\n if (target !== undefined) {\n return target;\n }\n throw new Error(`Unsupported deployment scope function \"${scope.target}\".`);\n}\n\nexport function normalizeExtensionScopes(stackAst: BicepAst): void {\n // JSON builders preserve ARM parent metadata; Bicep uses scope for extensions.\n for (const [name, resource] of stackAst.resources) {\n const armParentIdentifier = getResourceArmParentIdentifier(resource);\n const armParent =\n armParentIdentifier === undefined ? undefined : stackAst.resources.get(armParentIdentifier);\n if (armParentIdentifier !== undefined && armParent === undefined) {\n throw new Error(`Missing ARM parent \"${armParentIdentifier}\" for resource \"${name}\".`);\n }\n if (\n armParent !== undefined &&\n !resource.type.toLowerCase().startsWith(`${armParent.type.toLowerCase()}/`)\n ) {\n stackAst.resources.set(name, {\n ...resource,\n value: updateResourceBody(resource.value, (body) => {\n const { parent: target, ...rest } = body.value;\n if (target === undefined) {\n throw new Error(`Missing extension target for \"${name}\".`);\n }\n return { ...body, value: { scope: target, ...rest } };\n }),\n });\n }\n }\n}\n"]}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import type { ResourceDeclarationNode } from "../../ast/index.js";
|
|
2
|
+
import type { BicepAst } from "./file-preparation.js";
|
|
3
|
+
export declare function resolveFileDependencies(ast: BicepAst, stackAst: BicepAst, lookups: ReadonlyMap<string, ResourceDeclarationNode>): void;
|
|
4
|
+
//# sourceMappingURL=file-dependencies.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-dependencies.d.ts","sourceRoot":"","sources":["../../../../../src/serialization/bicep/file-layout/file-dependencies.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAmB,uBAAuB,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAEtD,wBAAgB,uBAAuB,CACrC,GAAG,EAAE,QAAQ,EACb,QAAQ,EAAE,QAAQ,EAClB,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,uBAAuB,CAAC,GACpD,IAAI,CA4BN"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
import { collectDependenciesForDeclaration } from "../../ast/declaration-dependencies.js";
|
|
4
|
+
export function resolveFileDependencies(ast, stackAst, lookups) {
|
|
5
|
+
const declarations = new Map([
|
|
6
|
+
...stackAst.variables,
|
|
7
|
+
...stackAst.parameters,
|
|
8
|
+
...lookups,
|
|
9
|
+
...ast.resources,
|
|
10
|
+
]);
|
|
11
|
+
const references = collectDependenciesForDeclaration([...ast.resources.values(), ...ast.outputs.values(), ...ast.modules.values()], { recursive: true, declarations });
|
|
12
|
+
const selectedResources = new Map([...lookups, ...ast.resources]);
|
|
13
|
+
const includedResources = new Set(ast.resources.keys());
|
|
14
|
+
ast.resources.clear();
|
|
15
|
+
for (const name of stackAst.resources.keys()) {
|
|
16
|
+
const resource = selectedResources.get(name);
|
|
17
|
+
if (resource !== undefined && (includedResources.has(name) || references.has(name))) {
|
|
18
|
+
ast.resources.set(name, resource);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
ast.variables.clear();
|
|
22
|
+
for (const [name, variable] of stackAst.variables) {
|
|
23
|
+
if (references.has(name))
|
|
24
|
+
ast.variables.set(name, variable);
|
|
25
|
+
}
|
|
26
|
+
ast.parameters.clear();
|
|
27
|
+
for (const [name, parameter] of stackAst.parameters) {
|
|
28
|
+
if (references.has(name))
|
|
29
|
+
ast.parameters.set(name, parameter);
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=file-dependencies.js.map
|