@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,257 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
function getExpressionReference(expression) {
|
|
4
|
+
const path = [];
|
|
5
|
+
let current = expression;
|
|
6
|
+
for (;;) {
|
|
7
|
+
switch (current.kind) {
|
|
8
|
+
case "identifier":
|
|
9
|
+
return { identifier: current.id, path: path.reverse(), expression };
|
|
10
|
+
case "property-access":
|
|
11
|
+
path.push(current.property);
|
|
12
|
+
current = current.base;
|
|
13
|
+
break;
|
|
14
|
+
case "array-access":
|
|
15
|
+
if (current.index.kind === "integer") {
|
|
16
|
+
path.push(parseInt(current.index.value, 10));
|
|
17
|
+
}
|
|
18
|
+
else if (current.index.kind === "string") {
|
|
19
|
+
path.push(current.index.value);
|
|
20
|
+
}
|
|
21
|
+
else
|
|
22
|
+
return undefined;
|
|
23
|
+
current = current.base;
|
|
24
|
+
break;
|
|
25
|
+
default:
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
export function rewriteExpressionReferences(expression, resolve) {
|
|
31
|
+
function rewriteItems(items, boundIdentifiers) {
|
|
32
|
+
const rewritten = items.map((item) => rewrite(item, boundIdentifiers));
|
|
33
|
+
return rewritten.every((item, index) => item === items[index]) ? items : rewritten;
|
|
34
|
+
}
|
|
35
|
+
function rewrite(node, boundIdentifiers) {
|
|
36
|
+
const reference = getExpressionReference(node);
|
|
37
|
+
if (reference !== undefined && !boundIdentifiers.has(reference.identifier)) {
|
|
38
|
+
const replacement = resolve(reference);
|
|
39
|
+
if (replacement !== undefined)
|
|
40
|
+
return replacement;
|
|
41
|
+
}
|
|
42
|
+
switch (node.kind) {
|
|
43
|
+
case "object": {
|
|
44
|
+
const entries = Object.entries(node.value);
|
|
45
|
+
const rewritten = entries.map(([key, value]) => [key, rewrite(value, boundIdentifiers)]);
|
|
46
|
+
return rewritten.every(([, value], index) => value === entries[index][1])
|
|
47
|
+
? node
|
|
48
|
+
: { ...node, value: Object.fromEntries(rewritten) };
|
|
49
|
+
}
|
|
50
|
+
case "array": {
|
|
51
|
+
const items = rewriteItems(node.items, boundIdentifiers);
|
|
52
|
+
return items === node.items ? node : { ...node, items };
|
|
53
|
+
}
|
|
54
|
+
case "property-access": {
|
|
55
|
+
const base = rewrite(node.base, boundIdentifiers);
|
|
56
|
+
return base === node.base ? node : { ...node, base };
|
|
57
|
+
}
|
|
58
|
+
case "array-access": {
|
|
59
|
+
const base = rewrite(node.base, boundIdentifiers);
|
|
60
|
+
const index = rewrite(node.index, boundIdentifiers);
|
|
61
|
+
return base === node.base && index === node.index ? node : { ...node, base, index };
|
|
62
|
+
}
|
|
63
|
+
case "function-call": {
|
|
64
|
+
const target = typeof node.target === "string" ? node.target : rewrite(node.target, boundIdentifiers);
|
|
65
|
+
const args = rewriteItems(node.args, boundIdentifiers);
|
|
66
|
+
return target === node.target && args === node.args ? node : { ...node, target, args };
|
|
67
|
+
}
|
|
68
|
+
case "instance-function-call": {
|
|
69
|
+
const base = rewrite(node.base, boundIdentifiers);
|
|
70
|
+
const args = rewriteItems(node.args, boundIdentifiers);
|
|
71
|
+
return base === node.base && args === node.args ? node : { ...node, base, args };
|
|
72
|
+
}
|
|
73
|
+
case "binary-operation": {
|
|
74
|
+
const left = rewrite(node.left, boundIdentifiers);
|
|
75
|
+
const right = rewrite(node.right, boundIdentifiers);
|
|
76
|
+
return left === node.left && right === node.right ? node : { ...node, left, right };
|
|
77
|
+
}
|
|
78
|
+
case "unary-operation": {
|
|
79
|
+
const argument = rewrite(node.argument, boundIdentifiers);
|
|
80
|
+
return argument === node.argument ? node : { ...node, argument };
|
|
81
|
+
}
|
|
82
|
+
case "ternary-operation": {
|
|
83
|
+
const condition = rewrite(node.condition, boundIdentifiers);
|
|
84
|
+
const trueValue = rewrite(node.trueValue, boundIdentifiers);
|
|
85
|
+
const falseValue = rewrite(node.falseValue, boundIdentifiers);
|
|
86
|
+
return condition === node.condition &&
|
|
87
|
+
trueValue === node.trueValue &&
|
|
88
|
+
falseValue === node.falseValue
|
|
89
|
+
? node
|
|
90
|
+
: { ...node, condition, trueValue, falseValue };
|
|
91
|
+
}
|
|
92
|
+
case "if-condition": {
|
|
93
|
+
const condition = rewrite(node.condition, boundIdentifiers);
|
|
94
|
+
const body = rewrite(node.body, boundIdentifiers);
|
|
95
|
+
return condition === node.condition && body === node.body
|
|
96
|
+
? node
|
|
97
|
+
: { ...node, condition, body };
|
|
98
|
+
}
|
|
99
|
+
case "for-expression": {
|
|
100
|
+
const collection = rewrite(node.collection, boundIdentifiers);
|
|
101
|
+
const loopBindings = new Set(boundIdentifiers);
|
|
102
|
+
loopBindings.add(node.itemVariable);
|
|
103
|
+
if (node.indexVariable !== undefined) {
|
|
104
|
+
loopBindings.add(node.indexVariable);
|
|
105
|
+
}
|
|
106
|
+
const body = rewrite(node.body, loopBindings);
|
|
107
|
+
return collection === node.collection && body === node.body
|
|
108
|
+
? node
|
|
109
|
+
: { ...node, collection, body };
|
|
110
|
+
}
|
|
111
|
+
case "interpolated-string": {
|
|
112
|
+
const segments = rewriteItems(node.segments, boundIdentifiers);
|
|
113
|
+
return segments === node.segments ? node : { ...node, segments };
|
|
114
|
+
}
|
|
115
|
+
case "identifier":
|
|
116
|
+
case "null":
|
|
117
|
+
case "boolean":
|
|
118
|
+
case "integer":
|
|
119
|
+
case "string":
|
|
120
|
+
return node;
|
|
121
|
+
default: {
|
|
122
|
+
const exhaustive = node;
|
|
123
|
+
throw new Error(`Unsupported expression: ${String(exhaustive)}.`);
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
return rewrite(expression, new Set());
|
|
128
|
+
}
|
|
129
|
+
function rewriteArray(items, rewrite) {
|
|
130
|
+
const rewritten = items.map(rewrite);
|
|
131
|
+
return rewritten.every((item, index) => item === items[index]) ? items : rewritten;
|
|
132
|
+
}
|
|
133
|
+
function rewriteDecorators(decorators, rewriteExpression) {
|
|
134
|
+
if (decorators === undefined)
|
|
135
|
+
return undefined;
|
|
136
|
+
let metadata = decorators.metadata;
|
|
137
|
+
if (metadata !== undefined) {
|
|
138
|
+
const entries = Object.entries(metadata);
|
|
139
|
+
const rewritten = entries.map(([key, value]) => [key, rewriteExpression(value)]);
|
|
140
|
+
if (rewritten.some(([, value], index) => value !== entries[index][1])) {
|
|
141
|
+
metadata = Object.fromEntries(rewritten);
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
const allowed = decorators.allowed === undefined
|
|
145
|
+
? undefined
|
|
146
|
+
: rewriteArray(decorators.allowed, rewriteExpression);
|
|
147
|
+
if (metadata === decorators.metadata && allowed === decorators.allowed) {
|
|
148
|
+
return decorators;
|
|
149
|
+
}
|
|
150
|
+
return {
|
|
151
|
+
...decorators,
|
|
152
|
+
...(metadata === undefined ? {} : { metadata }),
|
|
153
|
+
...(allowed === undefined ? {} : { allowed }),
|
|
154
|
+
};
|
|
155
|
+
}
|
|
156
|
+
function rewriteTypeMember(node, rewriteExpression) {
|
|
157
|
+
const valueType = rewriteType(node.valueType, rewriteExpression);
|
|
158
|
+
const decorators = rewriteDecorators(node.decorators, rewriteExpression);
|
|
159
|
+
if (valueType === node.valueType && decorators === node.decorators) {
|
|
160
|
+
return node;
|
|
161
|
+
}
|
|
162
|
+
return {
|
|
163
|
+
...node,
|
|
164
|
+
valueType,
|
|
165
|
+
...(decorators === undefined ? {} : { decorators }),
|
|
166
|
+
};
|
|
167
|
+
}
|
|
168
|
+
function rewriteType(node, rewriteExpression) {
|
|
169
|
+
switch (node.kind) {
|
|
170
|
+
case "array-type": {
|
|
171
|
+
const item = rewriteType(node.item, rewriteExpression);
|
|
172
|
+
return item === node.item ? node : { ...node, item };
|
|
173
|
+
}
|
|
174
|
+
case "object-type": {
|
|
175
|
+
const properties = rewriteArray(node.properties, (property) => rewriteTypeMember(property, rewriteExpression));
|
|
176
|
+
const additionalProperties = node.additionalProperties === undefined
|
|
177
|
+
? undefined
|
|
178
|
+
: rewriteTypeMember(node.additionalProperties, rewriteExpression);
|
|
179
|
+
if (properties === node.properties && additionalProperties === node.additionalProperties) {
|
|
180
|
+
return node;
|
|
181
|
+
}
|
|
182
|
+
return {
|
|
183
|
+
...node,
|
|
184
|
+
properties,
|
|
185
|
+
...(additionalProperties === undefined ? {} : { additionalProperties }),
|
|
186
|
+
};
|
|
187
|
+
}
|
|
188
|
+
case "object-type-property":
|
|
189
|
+
case "object-type-additional-properties":
|
|
190
|
+
case "union-type-member":
|
|
191
|
+
case "parameterized-type-argument":
|
|
192
|
+
return rewriteTypeMember(node, rewriteExpression);
|
|
193
|
+
case "union-type": {
|
|
194
|
+
const members = rewriteArray(node.members, (member) => rewriteTypeMember(member, rewriteExpression));
|
|
195
|
+
return members === node.members ? node : { ...node, members };
|
|
196
|
+
}
|
|
197
|
+
case "nullable-type": {
|
|
198
|
+
const base = rewriteType(node.base, rewriteExpression);
|
|
199
|
+
return base === node.base ? node : { ...node, base };
|
|
200
|
+
}
|
|
201
|
+
case "parameterized-type-instantiation": {
|
|
202
|
+
const base = rewriteType(node.base, rewriteExpression);
|
|
203
|
+
const args = rewriteArray(node.args, (argument) => rewriteTypeMember(argument, rewriteExpression));
|
|
204
|
+
return base === node.base && args === node.args ? node : { ...node, base, args };
|
|
205
|
+
}
|
|
206
|
+
case "primitive-type":
|
|
207
|
+
case "type-reference":
|
|
208
|
+
case "string-type-literal":
|
|
209
|
+
case "integer-type-literal":
|
|
210
|
+
case "boolean-type-literal":
|
|
211
|
+
case "null-type-literal":
|
|
212
|
+
return node;
|
|
213
|
+
default: {
|
|
214
|
+
const exhaustive = node;
|
|
215
|
+
throw new Error(`Unsupported type: ${String(exhaustive)}.`);
|
|
216
|
+
}
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
export function rewriteDeclarationExpressions(node, rewriteExpression) {
|
|
220
|
+
if ("value" in node) {
|
|
221
|
+
const value = rewriteExpression(node.value);
|
|
222
|
+
if (("type" in node || "path" in node) &&
|
|
223
|
+
value.kind !== "object" &&
|
|
224
|
+
value.kind !== "if-condition" &&
|
|
225
|
+
value.kind !== "for-expression") {
|
|
226
|
+
throw new Error(`Rewriting declaration "${node.bicepIdentifier}" produced an invalid resource/module body: "${value.kind}".`);
|
|
227
|
+
}
|
|
228
|
+
const valueType = "valueType" in node ? rewriteType(node.valueType, rewriteExpression) : undefined;
|
|
229
|
+
const decorators = rewriteDecorators(node.decorators, rewriteExpression);
|
|
230
|
+
if (value === node.value &&
|
|
231
|
+
decorators === node.decorators &&
|
|
232
|
+
(!("valueType" in node) || valueType === node.valueType)) {
|
|
233
|
+
return node;
|
|
234
|
+
}
|
|
235
|
+
return {
|
|
236
|
+
...node,
|
|
237
|
+
value,
|
|
238
|
+
...(valueType === undefined ? {} : { valueType }),
|
|
239
|
+
...(decorators === undefined ? {} : { decorators }),
|
|
240
|
+
};
|
|
241
|
+
}
|
|
242
|
+
const defaultValue = node.defaultValue === undefined ? undefined : rewriteExpression(node.defaultValue);
|
|
243
|
+
const valueType = rewriteType(node.valueType, rewriteExpression);
|
|
244
|
+
const decorators = rewriteDecorators(node.decorators, rewriteExpression);
|
|
245
|
+
if (defaultValue === node.defaultValue &&
|
|
246
|
+
valueType === node.valueType &&
|
|
247
|
+
decorators === node.decorators) {
|
|
248
|
+
return node;
|
|
249
|
+
}
|
|
250
|
+
return {
|
|
251
|
+
...node,
|
|
252
|
+
valueType,
|
|
253
|
+
...(defaultValue === undefined ? {} : { defaultValue }),
|
|
254
|
+
...(decorators === undefined ? {} : { decorators }),
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
//# sourceMappingURL=expression-rewriter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expression-rewriter.js","sourceRoot":"","sources":["../../../../src/serialization/ast/expression-rewriter.ts"],"names":[],"mappings":"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","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type {\n DeclarableBodyNode,\n DeclarationNode,\n DecoratorsNode,\n ExpressionNode,\n ModuleDeclarationNode,\n OutputDeclarationNode,\n ParameterDeclarationNode,\n ResourceDeclarationNode,\n TypeNode,\n VariableDeclarationNode,\n} from \"./index.js\";\n\n/** An identifier-rooted access chain with its static path and original AST node. */\nexport interface ExpressionReference {\n readonly identifier: string;\n readonly path: readonly (string | number)[];\n readonly expression: ExpressionNode;\n}\n\nexport type ExpressionReferenceResolver = (\n reference: ExpressionReference,\n) => ExpressionNode | undefined;\n\nfunction getExpressionReference(expression: ExpressionNode): ExpressionReference | undefined {\n const path: (string | number)[] = [];\n let current = expression;\n for (;;) {\n switch (current.kind) {\n case \"identifier\":\n return { identifier: current.id, path: path.reverse(), expression };\n case \"property-access\":\n path.push(current.property);\n current = current.base;\n break;\n case \"array-access\":\n if (current.index.kind === \"integer\") {\n path.push(parseInt(current.index.value, 10));\n } else if (current.index.kind === \"string\") {\n path.push(current.index.value);\n } else return undefined;\n current = current.base;\n break;\n default:\n return undefined;\n }\n }\n}\n\n/**\n * Replaces identifier access chains, preserving unchanged branches and ignoring\n * loop-local references. The resolver receives the original expression.\n */\nexport function rewriteExpressionReferences(\n expression: DeclarableBodyNode,\n resolve: ExpressionReferenceResolver,\n): DeclarableBodyNode;\nexport function rewriteExpressionReferences(\n expression: ExpressionNode,\n resolve: ExpressionReferenceResolver,\n): ExpressionNode;\nexport function rewriteExpressionReferences(\n expression: ExpressionNode,\n resolve: ExpressionReferenceResolver,\n): ExpressionNode {\n function rewriteItems(\n items: readonly ExpressionNode[],\n boundIdentifiers: ReadonlySet<string>,\n ): readonly ExpressionNode[] {\n const rewritten = items.map((item) => rewrite(item, boundIdentifiers));\n return rewritten.every((item, index) => item === items[index]) ? items : rewritten;\n }\n\n function rewrite(node: ExpressionNode, boundIdentifiers: ReadonlySet<string>): ExpressionNode {\n const reference = getExpressionReference(node);\n if (reference !== undefined && !boundIdentifiers.has(reference.identifier)) {\n const replacement = resolve(reference);\n if (replacement !== undefined) return replacement;\n }\n\n switch (node.kind) {\n case \"object\": {\n const entries = Object.entries(node.value);\n const rewritten = entries.map(\n ([key, value]) => [key, rewrite(value, boundIdentifiers)] as const,\n );\n return rewritten.every(([, value], index) => value === entries[index]![1])\n ? node\n : { ...node, value: Object.fromEntries(rewritten) };\n }\n case \"array\": {\n const items = rewriteItems(node.items, boundIdentifiers);\n return items === node.items ? node : { ...node, items };\n }\n case \"property-access\": {\n const base = rewrite(node.base, boundIdentifiers);\n return base === node.base ? node : { ...node, base };\n }\n case \"array-access\": {\n const base = rewrite(node.base, boundIdentifiers);\n const index = rewrite(node.index, boundIdentifiers);\n return base === node.base && index === node.index ? node : { ...node, base, index };\n }\n case \"function-call\": {\n const target =\n typeof node.target === \"string\" ? node.target : rewrite(node.target, boundIdentifiers);\n const args = rewriteItems(node.args, boundIdentifiers);\n return target === node.target && args === node.args ? node : { ...node, target, args };\n }\n case \"instance-function-call\": {\n const base = rewrite(node.base, boundIdentifiers);\n const args = rewriteItems(node.args, boundIdentifiers);\n return base === node.base && args === node.args ? node : { ...node, base, args };\n }\n case \"binary-operation\": {\n const left = rewrite(node.left, boundIdentifiers);\n const right = rewrite(node.right, boundIdentifiers);\n return left === node.left && right === node.right ? node : { ...node, left, right };\n }\n case \"unary-operation\": {\n const argument = rewrite(node.argument, boundIdentifiers);\n return argument === node.argument ? node : { ...node, argument };\n }\n case \"ternary-operation\": {\n const condition = rewrite(node.condition, boundIdentifiers);\n const trueValue = rewrite(node.trueValue, boundIdentifiers);\n const falseValue = rewrite(node.falseValue, boundIdentifiers);\n return condition === node.condition &&\n trueValue === node.trueValue &&\n falseValue === node.falseValue\n ? node\n : { ...node, condition, trueValue, falseValue };\n }\n case \"if-condition\": {\n const condition = rewrite(node.condition, boundIdentifiers);\n const body = rewrite(node.body, boundIdentifiers);\n return condition === node.condition && body === node.body\n ? node\n : { ...node, condition, body };\n }\n case \"for-expression\": {\n const collection = rewrite(node.collection, boundIdentifiers);\n const loopBindings = new Set(boundIdentifiers);\n loopBindings.add(node.itemVariable);\n if (node.indexVariable !== undefined) {\n loopBindings.add(node.indexVariable);\n }\n const body = rewrite(node.body, loopBindings);\n return collection === node.collection && body === node.body\n ? node\n : { ...node, collection, body };\n }\n case \"interpolated-string\": {\n const segments = rewriteItems(node.segments, boundIdentifiers);\n return segments === node.segments ? node : { ...node, segments };\n }\n case \"identifier\":\n case \"null\":\n case \"boolean\":\n case \"integer\":\n case \"string\":\n return node;\n default: {\n const exhaustive: never = node;\n throw new Error(`Unsupported expression: ${String(exhaustive)}.`);\n }\n }\n }\n\n return rewrite(expression, new Set());\n}\n\ntype ExpressionRewriter = (expression: ExpressionNode) => ExpressionNode;\n\nfunction rewriteArray<T>(items: readonly T[], rewrite: (item: T) => T): readonly T[] {\n const rewritten = items.map(rewrite);\n return rewritten.every((item, index) => item === items[index]) ? items : rewritten;\n}\n\nfunction rewriteDecorators(\n decorators: DecoratorsNode | undefined,\n rewriteExpression: ExpressionRewriter,\n): DecoratorsNode | undefined {\n if (decorators === undefined) return undefined;\n let metadata = decorators.metadata;\n if (metadata !== undefined) {\n const entries = Object.entries(metadata);\n const rewritten = entries.map(([key, value]) => [key, rewriteExpression(value)] as const);\n if (rewritten.some(([, value], index) => value !== entries[index]![1])) {\n metadata = Object.fromEntries(rewritten);\n }\n }\n const allowed =\n decorators.allowed === undefined\n ? undefined\n : rewriteArray(decorators.allowed, rewriteExpression);\n if (metadata === decorators.metadata && allowed === decorators.allowed) {\n return decorators;\n }\n return {\n ...decorators,\n ...(metadata === undefined ? {} : { metadata }),\n ...(allowed === undefined ? {} : { allowed }),\n };\n}\n\nfunction rewriteTypeMember<\n T extends {\n readonly valueType: TypeNode;\n readonly decorators?: DecoratorsNode;\n },\n>(node: T, rewriteExpression: ExpressionRewriter): T {\n const valueType = rewriteType(node.valueType, rewriteExpression);\n const decorators = rewriteDecorators(node.decorators, rewriteExpression);\n if (valueType === node.valueType && decorators === node.decorators) {\n return node;\n }\n return {\n ...node,\n valueType,\n ...(decorators === undefined ? {} : { decorators }),\n };\n}\n\nfunction rewriteType(node: TypeNode, rewriteExpression: ExpressionRewriter): TypeNode {\n switch (node.kind) {\n case \"array-type\": {\n const item = rewriteType(node.item, rewriteExpression);\n return item === node.item ? node : { ...node, item };\n }\n case \"object-type\": {\n const properties = rewriteArray(node.properties, (property) =>\n rewriteTypeMember(property, rewriteExpression),\n );\n const additionalProperties =\n node.additionalProperties === undefined\n ? undefined\n : rewriteTypeMember(node.additionalProperties, rewriteExpression);\n if (properties === node.properties && additionalProperties === node.additionalProperties) {\n return node;\n }\n return {\n ...node,\n properties,\n ...(additionalProperties === undefined ? {} : { additionalProperties }),\n };\n }\n case \"object-type-property\":\n case \"object-type-additional-properties\":\n case \"union-type-member\":\n case \"parameterized-type-argument\":\n return rewriteTypeMember(node, rewriteExpression);\n case \"union-type\": {\n const members = rewriteArray(node.members, (member) =>\n rewriteTypeMember(member, rewriteExpression),\n );\n return members === node.members ? node : { ...node, members };\n }\n case \"nullable-type\": {\n const base = rewriteType(node.base, rewriteExpression);\n return base === node.base ? node : { ...node, base };\n }\n case \"parameterized-type-instantiation\": {\n const base = rewriteType(node.base, rewriteExpression);\n const args = rewriteArray(node.args, (argument) =>\n rewriteTypeMember(argument, rewriteExpression),\n );\n return base === node.base && args === node.args ? node : { ...node, base, args };\n }\n case \"primitive-type\":\n case \"type-reference\":\n case \"string-type-literal\":\n case \"integer-type-literal\":\n case \"boolean-type-literal\":\n case \"null-type-literal\":\n return node;\n default: {\n const exhaustive: never = node;\n throw new Error(`Unsupported type: ${String(exhaustive)}.`);\n }\n }\n}\n\n/**\n * Applies an expression transformation to a declaration's value, default,\n * decorators, and nested type decorators. The callback rewrites each complete\n * expression subtree; recursive expression traversal is its responsibility.\n * Unchanged branches are shared, and the input declaration is not mutated.\n */\nexport function rewriteDeclarationExpressions(\n node: ResourceDeclarationNode,\n rewriteExpression: ExpressionRewriter,\n): ResourceDeclarationNode;\nexport function rewriteDeclarationExpressions(\n node: ModuleDeclarationNode,\n rewriteExpression: ExpressionRewriter,\n): ModuleDeclarationNode;\nexport function rewriteDeclarationExpressions(\n node: OutputDeclarationNode,\n rewriteExpression: ExpressionRewriter,\n): OutputDeclarationNode;\nexport function rewriteDeclarationExpressions(\n node: ParameterDeclarationNode,\n rewriteExpression: ExpressionRewriter,\n): ParameterDeclarationNode;\nexport function rewriteDeclarationExpressions(\n node: VariableDeclarationNode,\n rewriteExpression: ExpressionRewriter,\n): VariableDeclarationNode;\nexport function rewriteDeclarationExpressions(\n node: DeclarationNode,\n rewriteExpression: ExpressionRewriter,\n): DeclarationNode;\nexport function rewriteDeclarationExpressions(\n node: DeclarationNode,\n rewriteExpression: ExpressionRewriter,\n): DeclarationNode {\n if (\"value\" in node) {\n const value = rewriteExpression(node.value);\n if (\n (\"type\" in node || \"path\" in node) &&\n value.kind !== \"object\" &&\n value.kind !== \"if-condition\" &&\n value.kind !== \"for-expression\"\n ) {\n throw new Error(\n `Rewriting declaration \"${node.bicepIdentifier}\" produced an invalid resource/module body: \"${value.kind}\".`,\n );\n }\n const valueType =\n \"valueType\" in node ? rewriteType(node.valueType, rewriteExpression) : undefined;\n const decorators = rewriteDecorators(node.decorators, rewriteExpression);\n if (\n value === node.value &&\n decorators === node.decorators &&\n (!(\"valueType\" in node) || valueType === node.valueType)\n ) {\n return node;\n }\n return {\n ...node,\n value,\n ...(valueType === undefined ? {} : { valueType }),\n ...(decorators === undefined ? {} : { decorators }),\n };\n }\n const defaultValue =\n node.defaultValue === undefined ? undefined : rewriteExpression(node.defaultValue);\n const valueType = rewriteType(node.valueType, rewriteExpression);\n const decorators = rewriteDecorators(node.decorators, rewriteExpression);\n if (\n defaultValue === node.defaultValue &&\n valueType === node.valueType &&\n decorators === node.decorators\n ) {\n return node;\n }\n return {\n ...node,\n valueType,\n ...(defaultValue === undefined ? {} : { defaultValue }),\n ...(decorators === undefined ? {} : { decorators }),\n };\n}\n"]}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { DeclarationNode, ExpressionNode } from "./index.js";
|
|
2
|
+
/**
|
|
3
|
+
* Inspects a node; returning false skips its children. boundIdentifiers contains
|
|
4
|
+
* item and index names introduced by enclosing loops, local to loop bodies.
|
|
5
|
+
*/
|
|
6
|
+
export type ExpressionNodeVisitor = (node: ExpressionNode, boundIdentifiers: ReadonlySet<string>) => boolean | void;
|
|
7
|
+
/** Visits original expression nodes in preorder without rebuilding or replacing them. */
|
|
8
|
+
export declare function walkExpressionNode(expression: ExpressionNode, visitor: ExpressionNodeVisitor): void;
|
|
9
|
+
/**
|
|
10
|
+
* Visits original expressions in a declaration's value/default, nested type
|
|
11
|
+
* decorators, then declaration decorators, without rebuilding or mutating nodes.
|
|
12
|
+
* Each expression is walked in preorder; returning false skips that expression's
|
|
13
|
+
* children. Loop bindings do not carry into other expression roots.
|
|
14
|
+
*/
|
|
15
|
+
export declare function walkDeclarationExpressions(declaration: DeclarationNode, visitor: ExpressionNodeVisitor): void;
|
|
16
|
+
//# sourceMappingURL=expression-walker.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expression-walker.d.ts","sourceRoot":"","sources":["../../../../src/serialization/ast/expression-walker.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAkB,cAAc,EAAY,MAAM,YAAY,CAAC;AAE5F;;;GAGG;AACH,MAAM,MAAM,qBAAqB,GAAG,CAClC,IAAI,EAAE,cAAc,EACpB,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAAC,KAClC,OAAO,GAAG,IAAI,CAAC;AAEpB,yFAAyF;AACzF,wBAAgB,kBAAkB,CAChC,UAAU,EAAE,cAAc,EAC1B,OAAO,EAAE,qBAAqB,GAC7B,IAAI,CAuEN;AA4DD;;;;;GAKG;AACH,wBAAgB,0BAA0B,CACxC,WAAW,EAAE,eAAe,EAC5B,OAAO,EAAE,qBAAqB,GAC7B,IAAI,CAUN"}
|
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
// Copyright (c) Microsoft Corporation.
|
|
2
|
+
// Licensed under the MIT License.
|
|
3
|
+
/** Visits original expression nodes in preorder without rebuilding or replacing them. */
|
|
4
|
+
export function walkExpressionNode(expression, visitor) {
|
|
5
|
+
function visit(node, boundIdentifiers) {
|
|
6
|
+
if (visitor(node, boundIdentifiers) === false)
|
|
7
|
+
return;
|
|
8
|
+
switch (node.kind) {
|
|
9
|
+
case "object":
|
|
10
|
+
for (const value of Object.values(node.value)) {
|
|
11
|
+
visit(value, boundIdentifiers);
|
|
12
|
+
}
|
|
13
|
+
break;
|
|
14
|
+
case "array":
|
|
15
|
+
for (const item of node.items)
|
|
16
|
+
visit(item, boundIdentifiers);
|
|
17
|
+
break;
|
|
18
|
+
case "property-access":
|
|
19
|
+
visit(node.base, boundIdentifiers);
|
|
20
|
+
break;
|
|
21
|
+
case "array-access":
|
|
22
|
+
visit(node.base, boundIdentifiers);
|
|
23
|
+
visit(node.index, boundIdentifiers);
|
|
24
|
+
break;
|
|
25
|
+
case "function-call":
|
|
26
|
+
if (typeof node.target !== "string") {
|
|
27
|
+
visit(node.target, boundIdentifiers);
|
|
28
|
+
}
|
|
29
|
+
for (const argument of node.args)
|
|
30
|
+
visit(argument, boundIdentifiers);
|
|
31
|
+
break;
|
|
32
|
+
case "instance-function-call":
|
|
33
|
+
visit(node.base, boundIdentifiers);
|
|
34
|
+
for (const argument of node.args)
|
|
35
|
+
visit(argument, boundIdentifiers);
|
|
36
|
+
break;
|
|
37
|
+
case "binary-operation":
|
|
38
|
+
visit(node.left, boundIdentifiers);
|
|
39
|
+
visit(node.right, boundIdentifiers);
|
|
40
|
+
break;
|
|
41
|
+
case "unary-operation":
|
|
42
|
+
visit(node.argument, boundIdentifiers);
|
|
43
|
+
break;
|
|
44
|
+
case "ternary-operation":
|
|
45
|
+
visit(node.condition, boundIdentifiers);
|
|
46
|
+
visit(node.trueValue, boundIdentifiers);
|
|
47
|
+
visit(node.falseValue, boundIdentifiers);
|
|
48
|
+
break;
|
|
49
|
+
case "if-condition":
|
|
50
|
+
visit(node.condition, boundIdentifiers);
|
|
51
|
+
visit(node.body, boundIdentifiers);
|
|
52
|
+
break;
|
|
53
|
+
case "for-expression": {
|
|
54
|
+
visit(node.collection, boundIdentifiers);
|
|
55
|
+
const loopBindings = new Set(boundIdentifiers);
|
|
56
|
+
loopBindings.add(node.itemVariable);
|
|
57
|
+
if (node.indexVariable !== undefined) {
|
|
58
|
+
loopBindings.add(node.indexVariable);
|
|
59
|
+
}
|
|
60
|
+
visit(node.body, loopBindings);
|
|
61
|
+
break;
|
|
62
|
+
}
|
|
63
|
+
case "interpolated-string":
|
|
64
|
+
for (const segment of node.segments)
|
|
65
|
+
visit(segment, boundIdentifiers);
|
|
66
|
+
break;
|
|
67
|
+
case "identifier":
|
|
68
|
+
case "null":
|
|
69
|
+
case "boolean":
|
|
70
|
+
case "integer":
|
|
71
|
+
case "string":
|
|
72
|
+
break;
|
|
73
|
+
default: {
|
|
74
|
+
const exhaustive = node;
|
|
75
|
+
throw new Error(`Unsupported expression: ${String(exhaustive)}.`);
|
|
76
|
+
}
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
visit(expression, new Set());
|
|
80
|
+
}
|
|
81
|
+
function walkDecoratorExpressions(decorators, visitor) {
|
|
82
|
+
for (const expression of Object.values(decorators?.metadata ?? {})) {
|
|
83
|
+
walkExpressionNode(expression, visitor);
|
|
84
|
+
}
|
|
85
|
+
for (const expression of decorators?.allowed ?? []) {
|
|
86
|
+
walkExpressionNode(expression, visitor);
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
function walkTypeExpressions(type, visitor) {
|
|
90
|
+
switch (type.kind) {
|
|
91
|
+
case "array-type":
|
|
92
|
+
walkTypeExpressions(type.item, visitor);
|
|
93
|
+
break;
|
|
94
|
+
case "object-type":
|
|
95
|
+
for (const property of type.properties) {
|
|
96
|
+
walkTypeExpressions(property, visitor);
|
|
97
|
+
}
|
|
98
|
+
if (type.additionalProperties !== undefined) {
|
|
99
|
+
walkTypeExpressions(type.additionalProperties, visitor);
|
|
100
|
+
}
|
|
101
|
+
break;
|
|
102
|
+
case "object-type-property":
|
|
103
|
+
case "object-type-additional-properties":
|
|
104
|
+
walkTypeExpressions(type.valueType, visitor);
|
|
105
|
+
walkDecoratorExpressions(type.decorators, visitor);
|
|
106
|
+
break;
|
|
107
|
+
case "union-type-member":
|
|
108
|
+
case "parameterized-type-argument":
|
|
109
|
+
walkTypeExpressions(type.valueType, visitor);
|
|
110
|
+
break;
|
|
111
|
+
case "union-type":
|
|
112
|
+
for (const member of type.members)
|
|
113
|
+
walkTypeExpressions(member, visitor);
|
|
114
|
+
break;
|
|
115
|
+
case "nullable-type":
|
|
116
|
+
walkTypeExpressions(type.base, visitor);
|
|
117
|
+
break;
|
|
118
|
+
case "parameterized-type-instantiation":
|
|
119
|
+
walkTypeExpressions(type.base, visitor);
|
|
120
|
+
for (const argument of type.args)
|
|
121
|
+
walkTypeExpressions(argument, visitor);
|
|
122
|
+
break;
|
|
123
|
+
case "primitive-type":
|
|
124
|
+
case "type-reference":
|
|
125
|
+
case "string-type-literal":
|
|
126
|
+
case "integer-type-literal":
|
|
127
|
+
case "boolean-type-literal":
|
|
128
|
+
case "null-type-literal":
|
|
129
|
+
break;
|
|
130
|
+
default: {
|
|
131
|
+
const exhaustive = type;
|
|
132
|
+
throw new Error(`Unsupported type: ${String(exhaustive)}.`);
|
|
133
|
+
}
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* Visits original expressions in a declaration's value/default, nested type
|
|
138
|
+
* decorators, then declaration decorators, without rebuilding or mutating nodes.
|
|
139
|
+
* Each expression is walked in preorder; returning false skips that expression's
|
|
140
|
+
* children. Loop bindings do not carry into other expression roots.
|
|
141
|
+
*/
|
|
142
|
+
export function walkDeclarationExpressions(declaration, visitor) {
|
|
143
|
+
if ("value" in declaration) {
|
|
144
|
+
walkExpressionNode(declaration.value, visitor);
|
|
145
|
+
}
|
|
146
|
+
else if (declaration.defaultValue !== undefined) {
|
|
147
|
+
walkExpressionNode(declaration.defaultValue, visitor);
|
|
148
|
+
}
|
|
149
|
+
if ("valueType" in declaration) {
|
|
150
|
+
walkTypeExpressions(declaration.valueType, visitor);
|
|
151
|
+
}
|
|
152
|
+
walkDecoratorExpressions(declaration.decorators, visitor);
|
|
153
|
+
}
|
|
154
|
+
//# sourceMappingURL=expression-walker.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"expression-walker.js","sourceRoot":"","sources":["../../../../src/serialization/ast/expression-walker.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAalC,yFAAyF;AACzF,MAAM,UAAU,kBAAkB,CAChC,UAA0B,EAC1B,OAA8B;IAE9B,SAAS,KAAK,CAAC,IAAoB,EAAE,gBAAqC;QACxE,IAAI,OAAO,CAAC,IAAI,EAAE,gBAAgB,CAAC,KAAK,KAAK;YAAE,OAAO;QACtD,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,KAAK,QAAQ;gBACX,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC9C,KAAK,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;gBACjC,CAAC;gBACD,MAAM;YACR,KAAK,OAAO;gBACV,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,KAAK;oBAAE,KAAK,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;gBAC7D,MAAM;YACR,KAAK,iBAAiB;gBACpB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;gBACnC,MAAM;YACR,KAAK,cAAc;gBACjB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;gBACnC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;gBACpC,MAAM;YACR,KAAK,eAAe;gBAClB,IAAI,OAAO,IAAI,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;oBACpC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,gBAAgB,CAAC,CAAC;gBACvC,CAAC;gBACD,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,IAAI;oBAAE,KAAK,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;gBACpE,MAAM;YACR,KAAK,wBAAwB;gBAC3B,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;gBACnC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,IAAI;oBAAE,KAAK,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;gBACpE,MAAM;YACR,KAAK,kBAAkB;gBACrB,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;gBACnC,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;gBACpC,MAAM;YACR,KAAK,iBAAiB;gBACpB,KAAK,CAAC,IAAI,CAAC,QAAQ,EAAE,gBAAgB,CAAC,CAAC;gBACvC,MAAM;YACR,KAAK,mBAAmB;gBACtB,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;gBACxC,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;gBACxC,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;gBACzC,MAAM;YACR,KAAK,cAAc;gBACjB,KAAK,CAAC,IAAI,CAAC,SAAS,EAAE,gBAAgB,CAAC,CAAC;gBACxC,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;gBACnC,MAAM;YACR,KAAK,gBAAgB,CAAC,CAAC,CAAC;gBACtB,KAAK,CAAC,IAAI,CAAC,UAAU,EAAE,gBAAgB,CAAC,CAAC;gBACzC,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,gBAAgB,CAAC,CAAC;gBAC/C,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;gBACpC,IAAI,IAAI,CAAC,aAAa,KAAK,SAAS,EAAE,CAAC;oBACrC,YAAY,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;gBACvC,CAAC;gBACD,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC,CAAC;gBAC/B,MAAM;YACR,CAAC;YACD,KAAK,qBAAqB;gBACxB,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ;oBAAE,KAAK,CAAC,OAAO,EAAE,gBAAgB,CAAC,CAAC;gBACtE,MAAM;YACR,KAAK,YAAY,CAAC;YAClB,KAAK,MAAM,CAAC;YACZ,KAAK,SAAS,CAAC;YACf,KAAK,SAAS,CAAC;YACf,KAAK,QAAQ;gBACX,MAAM;YACR,OAAO,CAAC,CAAC,CAAC;gBACR,MAAM,UAAU,GAAU,IAAI,CAAC;gBAC/B,MAAM,IAAI,KAAK,CAAC,2BAA2B,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;YACpE,CAAC;QACH,CAAC;IACH,CAAC;IACD,KAAK,CAAC,UAAU,EAAE,IAAI,GAAG,EAAE,CAAC,CAAC;AAC/B,CAAC;AAED,SAAS,wBAAwB,CAC/B,UAAsC,EACtC,OAA8B;IAE9B,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,IAAI,EAAE,CAAC,EAAE,CAAC;QACnE,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;IACD,KAAK,MAAM,UAAU,IAAI,UAAU,EAAE,OAAO,IAAI,EAAE,EAAE,CAAC;QACnD,kBAAkB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;IAC1C,CAAC;AACH,CAAC;AAED,SAAS,mBAAmB,CAAC,IAAc,EAAE,OAA8B;IACzE,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;QAClB,KAAK,YAAY;YACf,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACxC,MAAM;QACR,KAAK,aAAa;YAChB,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;gBACvC,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACzC,CAAC;YACD,IAAI,IAAI,CAAC,oBAAoB,KAAK,SAAS,EAAE,CAAC;gBAC5C,mBAAmB,CAAC,IAAI,CAAC,oBAAoB,EAAE,OAAO,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM;QACR,KAAK,sBAAsB,CAAC;QAC5B,KAAK,mCAAmC;YACtC,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC7C,wBAAwB,CAAC,IAAI,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;YACnD,MAAM;QACR,KAAK,mBAAmB,CAAC;QACzB,KAAK,6BAA6B;YAChC,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;YAC7C,MAAM;QACR,KAAK,YAAY;YACf,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,OAAO;gBAAE,mBAAmB,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;YACxE,MAAM;QACR,KAAK,eAAe;YAClB,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACxC,MAAM;QACR,KAAK,kCAAkC;YACrC,mBAAmB,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;YACxC,KAAK,MAAM,QAAQ,IAAI,IAAI,CAAC,IAAI;gBAAE,mBAAmB,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACzE,MAAM;QACR,KAAK,gBAAgB,CAAC;QACtB,KAAK,gBAAgB,CAAC;QACtB,KAAK,qBAAqB,CAAC;QAC3B,KAAK,sBAAsB,CAAC;QAC5B,KAAK,sBAAsB,CAAC;QAC5B,KAAK,mBAAmB;YACtB,MAAM;QACR,OAAO,CAAC,CAAC,CAAC;YACR,MAAM,UAAU,GAAU,IAAI,CAAC;YAC/B,MAAM,IAAI,KAAK,CAAC,qBAAqB,MAAM,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;AACH,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,0BAA0B,CACxC,WAA4B,EAC5B,OAA8B;IAE9B,IAAI,OAAO,IAAI,WAAW,EAAE,CAAC;QAC3B,kBAAkB,CAAC,WAAW,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACjD,CAAC;SAAM,IAAI,WAAW,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;QAClD,kBAAkB,CAAC,WAAW,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;IACxD,CAAC;IACD,IAAI,WAAW,IAAI,WAAW,EAAE,CAAC;QAC/B,mBAAmB,CAAC,WAAW,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;IACtD,CAAC;IACD,wBAAwB,CAAC,WAAW,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AAC5D,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { DeclarationNode, DecoratorsNode, ExpressionNode, TypeNode } from \"./index.js\";\n\n/**\n * Inspects a node; returning false skips its children. boundIdentifiers contains\n * item and index names introduced by enclosing loops, local to loop bodies.\n */\nexport type ExpressionNodeVisitor = (\n node: ExpressionNode,\n boundIdentifiers: ReadonlySet<string>,\n) => boolean | void;\n\n/** Visits original expression nodes in preorder without rebuilding or replacing them. */\nexport function walkExpressionNode(\n expression: ExpressionNode,\n visitor: ExpressionNodeVisitor,\n): void {\n function visit(node: ExpressionNode, boundIdentifiers: ReadonlySet<string>): void {\n if (visitor(node, boundIdentifiers) === false) return;\n switch (node.kind) {\n case \"object\":\n for (const value of Object.values(node.value)) {\n visit(value, boundIdentifiers);\n }\n break;\n case \"array\":\n for (const item of node.items) visit(item, boundIdentifiers);\n break;\n case \"property-access\":\n visit(node.base, boundIdentifiers);\n break;\n case \"array-access\":\n visit(node.base, boundIdentifiers);\n visit(node.index, boundIdentifiers);\n break;\n case \"function-call\":\n if (typeof node.target !== \"string\") {\n visit(node.target, boundIdentifiers);\n }\n for (const argument of node.args) visit(argument, boundIdentifiers);\n break;\n case \"instance-function-call\":\n visit(node.base, boundIdentifiers);\n for (const argument of node.args) visit(argument, boundIdentifiers);\n break;\n case \"binary-operation\":\n visit(node.left, boundIdentifiers);\n visit(node.right, boundIdentifiers);\n break;\n case \"unary-operation\":\n visit(node.argument, boundIdentifiers);\n break;\n case \"ternary-operation\":\n visit(node.condition, boundIdentifiers);\n visit(node.trueValue, boundIdentifiers);\n visit(node.falseValue, boundIdentifiers);\n break;\n case \"if-condition\":\n visit(node.condition, boundIdentifiers);\n visit(node.body, boundIdentifiers);\n break;\n case \"for-expression\": {\n visit(node.collection, boundIdentifiers);\n const loopBindings = new Set(boundIdentifiers);\n loopBindings.add(node.itemVariable);\n if (node.indexVariable !== undefined) {\n loopBindings.add(node.indexVariable);\n }\n visit(node.body, loopBindings);\n break;\n }\n case \"interpolated-string\":\n for (const segment of node.segments) visit(segment, boundIdentifiers);\n break;\n case \"identifier\":\n case \"null\":\n case \"boolean\":\n case \"integer\":\n case \"string\":\n break;\n default: {\n const exhaustive: never = node;\n throw new Error(`Unsupported expression: ${String(exhaustive)}.`);\n }\n }\n }\n visit(expression, new Set());\n}\n\nfunction walkDecoratorExpressions(\n decorators: DecoratorsNode | undefined,\n visitor: ExpressionNodeVisitor,\n): void {\n for (const expression of Object.values(decorators?.metadata ?? {})) {\n walkExpressionNode(expression, visitor);\n }\n for (const expression of decorators?.allowed ?? []) {\n walkExpressionNode(expression, visitor);\n }\n}\n\nfunction walkTypeExpressions(type: TypeNode, visitor: ExpressionNodeVisitor): void {\n switch (type.kind) {\n case \"array-type\":\n walkTypeExpressions(type.item, visitor);\n break;\n case \"object-type\":\n for (const property of type.properties) {\n walkTypeExpressions(property, visitor);\n }\n if (type.additionalProperties !== undefined) {\n walkTypeExpressions(type.additionalProperties, visitor);\n }\n break;\n case \"object-type-property\":\n case \"object-type-additional-properties\":\n walkTypeExpressions(type.valueType, visitor);\n walkDecoratorExpressions(type.decorators, visitor);\n break;\n case \"union-type-member\":\n case \"parameterized-type-argument\":\n walkTypeExpressions(type.valueType, visitor);\n break;\n case \"union-type\":\n for (const member of type.members) walkTypeExpressions(member, visitor);\n break;\n case \"nullable-type\":\n walkTypeExpressions(type.base, visitor);\n break;\n case \"parameterized-type-instantiation\":\n walkTypeExpressions(type.base, visitor);\n for (const argument of type.args) walkTypeExpressions(argument, visitor);\n break;\n case \"primitive-type\":\n case \"type-reference\":\n case \"string-type-literal\":\n case \"integer-type-literal\":\n case \"boolean-type-literal\":\n case \"null-type-literal\":\n break;\n default: {\n const exhaustive: never = type;\n throw new Error(`Unsupported type: ${String(exhaustive)}.`);\n }\n }\n}\n\n/**\n * Visits original expressions in a declaration's value/default, nested type\n * decorators, then declaration decorators, without rebuilding or mutating nodes.\n * Each expression is walked in preorder; returning false skips that expression's\n * children. Loop bindings do not carry into other expression roots.\n */\nexport function walkDeclarationExpressions(\n declaration: DeclarationNode,\n visitor: ExpressionNodeVisitor,\n): void {\n if (\"value\" in declaration) {\n walkExpressionNode(declaration.value, visitor);\n } else if (declaration.defaultValue !== undefined) {\n walkExpressionNode(declaration.defaultValue, visitor);\n }\n if (\"valueType\" in declaration) {\n walkTypeExpressions(declaration.valueType, visitor);\n }\n walkDecoratorExpressions(declaration.decorators, visitor);\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast.d.ts","sourceRoot":"","sources":["../../../../../src/serialization/ast/generated/ast.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast.js","sourceRoot":"","sources":["../../../../../src/serialization/ast/generated/ast.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAoGlC;;;;GAIG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAA8C;IAC3E,GAAG,EAAE,IAAI;IACT,KAAK,EAAE,IAAI;IACX,IAAI,EAAE,IAAI;IACV,GAAG,EAAE,IAAI;IACT,MAAM,EAAE,IAAI;IACZ,MAAM,EAAE,IAAI;CACb,CAAC;AAEF;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAa;IAC/C,OAAO,MAAM,CAAC,MAAM,CAAC,kBAAkB,EAAE,KAAK,CAAC,CAAC;AAClD,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * The deployment scope for a Bicep file.\n */\nexport type TargetScope = \"resourceGroup\" | \"subscription\" | \"managementGroup\" | \"tenant\";\n\n/**\n * The set of Bicep primitive type names.\n */\nexport type PrimitiveTypeName = \"any\" | \"array\" | \"bool\" | \"int\" | \"object\" | \"string\";\n\n/**\n * Binary operators supported in Bicep expressions.\n */\nexport type BinaryOperator =\n | \"%\"\n | \"*\"\n | \"+\"\n | \"-\"\n | \"/\"\n | \"<\"\n | \"<=\"\n | \"==\"\n | \"!=\"\n | \"=~\"\n | \"!~\"\n | \">\"\n | \">=\"\n | \"&&\"\n | \"||\"\n | \"??\";\n\n/**\n * Unary operators supported in Bicep expressions.\n */\nexport type UnaryOperator = \"!\" | \"-\";\n\n/**\n * Discriminated union of all expression node types.\n * This includes all ValueNode variants plus expression-specific variants.\n */\nexport type ExpressionNode =\n | NullValue\n | BooleanValue\n | IntegerValue\n | StringValue\n | ArrayValue\n | ObjectValue\n | IdentifierExpression\n | FunctionCallExpression\n | InstanceFunctionCallExpression\n | PropertyAccessExpression\n | ArrayAccessExpression\n | BinaryOperationExpression\n | UnaryOperationExpression\n | TernaryOperationExpression\n | IfConditionExpression\n | ForExpression\n | InterpolatedStringExpression;\n\n/**\n * Discriminated union of all type node kinds.\n */\nexport type TypeNode =\n | PrimitiveTypeNode\n | TypeReferenceNode\n | StringTypeLiteralNode\n | IntegerTypeLiteralNode\n | BooleanTypeLiteralNode\n | NullTypeLiteralNode\n | ArrayTypeNode\n | ObjectTypePropertyNode\n | ObjectTypeAdditionalPropertiesNode\n | ObjectTypeNode\n | UnionTypeMemberNode\n | UnionTypeNode\n | NullableTypeNode\n | ParameterizedTypeArgumentNode\n | ParameterizedTypeInstantiationNode;\n\n/**\n * An object body, optionally guarded by an `if` or produced by a `for`.\n */\nexport type DeclarableBodyNode = ObjectValue | IfConditionExpression | ForExpression;\n\n/**\n * Maps each Bicep primitive type name to its TypeScript authoring value type.\n *\n * Generated from TypeSpec and emitter mappings. Do not edit.\n */\nexport interface PrimitiveTypeMap {\n readonly any: unknown;\n readonly array: readonly unknown[];\n readonly bool: boolean;\n readonly int: number;\n readonly object: Record<string, unknown>;\n readonly string: string;\n}\n\n/**\n * Runtime lookup for PrimitiveTypeName values.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport const primitiveTypeNames: Readonly<Record<PrimitiveTypeName, true>> = {\n any: true,\n array: true,\n bool: true,\n int: true,\n object: true,\n string: true,\n};\n\n/**\n * Checks whether a string is a PrimitiveTypeName value. Generated from\n * TypeSpec. Do not edit.\n */\nexport function isPrimitiveTypeName(value: string): value is PrimitiveTypeName {\n return Object.hasOwn(primitiveTypeNames, value);\n}\n\n/**\n * Represents a single infrastructure unit in the serialization output.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface InfraNode {\n /**\n * The relative file path/name (e.g. \"main.bicep\", \"modules/storage.bicep\").\n */\n readonly fileName: string;\n /**\n * The deployment target scope. Defaults to \"resourceGroup\" if omitted.\n */\n readonly targetScope?: TargetScope;\n /**\n * Parameter declarations, keyed by Bicep identifier.\n */\n readonly parameters?: Record<string, ParameterDeclarationNode>;\n /**\n * Variable declarations, keyed by Bicep identifier.\n */\n readonly variables?: Record<string, VariableDeclarationNode>;\n /**\n * Output declarations, keyed by Bicep identifier.\n */\n readonly outputs?: Record<string, OutputDeclarationNode>;\n /**\n * Resource declarations, keyed by Bicep identifier.\n */\n readonly resources?: Record<string, ResourceDeclarationNode>;\n /**\n * Module declarations, keyed by Bicep identifier.\n */\n readonly modules?: Record<string, ModuleDeclarationNode>;\n}\n\n/**\n * A Bicep parameter declaration.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface ParameterDeclarationNode {\n readonly bicepIdentifier: string;\n readonly valueType: TypeNode;\n readonly defaultValue?: ExpressionNode;\n readonly decorators?: DecoratorsNode;\n}\n\n/**\n * A built-in primitive type (e.g. `string`, `int`, `bool`).\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface PrimitiveTypeNode {\n readonly kind: \"primitive-type\";\n readonly name: PrimitiveTypeName;\n}\n\n/**\n * A reference to a named/user-defined type.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface TypeReferenceNode {\n readonly kind: \"type-reference\";\n readonly name: string;\n}\n\n/**\n * A string literal used as a type (e.g. `'Standard_GRS'`).\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface StringTypeLiteralNode {\n readonly kind: \"string-type-literal\";\n readonly value: string;\n}\n\n/**\n * An integer literal used as a type.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface IntegerTypeLiteralNode {\n readonly kind: \"integer-type-literal\";\n readonly value: string;\n}\n\n/**\n * A boolean literal used as a type.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface BooleanTypeLiteralNode {\n readonly kind: \"boolean-type-literal\";\n readonly value: boolean;\n}\n\n/**\n * A null literal used as a type.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface NullTypeLiteralNode {\n readonly kind: \"null-type-literal\";\n readonly value: null;\n}\n\n/**\n * An array type (e.g. `string[]`).\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface ArrayTypeNode {\n readonly kind: \"array-type\";\n readonly item: TypeNode;\n}\n\n/**\n * A property within an object type definition.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface ObjectTypePropertyNode {\n readonly kind: \"object-type-property\";\n readonly key: string;\n readonly valueType: TypeNode;\n readonly optional?: boolean;\n readonly decorators?: DecoratorsNode;\n}\n\n/**\n * Decorator metadata that can be applied to declarations and type properties.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface DecoratorsNode {\n readonly description?: string;\n readonly secure?: true;\n readonly minValue?: number;\n readonly maxValue?: number;\n readonly minLength?: number;\n readonly maxLength?: number;\n readonly metadata?: Record<string, ExpressionNode>;\n readonly allowed?: readonly ExpressionNode[];\n readonly discriminator?: string;\n readonly sealed?: true;\n readonly export?: true;\n readonly batchSize?: number;\n}\n\n/**\n * A null literal value.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface NullValue {\n readonly kind: \"null\";\n readonly value: null;\n}\n\n/**\n * A boolean literal value.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface BooleanValue {\n readonly kind: \"boolean\";\n readonly value: boolean;\n}\n\n/**\n * An integer literal value.\n * Stored as a string to preserve 64-bit integer fidelity.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface IntegerValue {\n readonly kind: \"integer\";\n readonly value: string;\n}\n\n/**\n * A string literal value.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface StringValue {\n readonly kind: \"string\";\n readonly value: string;\n}\n\n/**\n * An array of expression nodes.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface ArrayValue {\n readonly kind: \"array\";\n readonly items: readonly ExpressionNode[];\n}\n\n/**\n * An object with named expression node properties.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface ObjectValue {\n readonly kind: \"object\";\n readonly value: Record<string, ExpressionNode>;\n}\n\n/**\n * A reference to a named identifier (variable, parameter, resource, etc.).\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface IdentifierExpression {\n readonly kind: \"identifier\";\n readonly id: string;\n}\n\n/**\n * A top-level function call (e.g. `toLower(...)`, `concat(...)`).\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface FunctionCallExpression {\n readonly kind: \"function-call\";\n /**\n * Function name or an expression that resolves to a callable.\n */\n readonly target: string | ExpressionNode;\n readonly args: readonly ExpressionNode[];\n}\n\n/**\n * An instance method call (e.g. `base.method(...)`).\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface InstanceFunctionCallExpression {\n readonly kind: \"instance-function-call\";\n readonly base: ExpressionNode;\n readonly name: string;\n readonly args: readonly ExpressionNode[];\n}\n\n/**\n * Property access on an expression (e.g. `base.property` or `base.?property`).\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface PropertyAccessExpression {\n readonly kind: \"property-access\";\n readonly base: ExpressionNode;\n readonly property: string;\n readonly nullish: boolean;\n}\n\n/**\n * Array/index access on an expression (e.g. `base[index]` or `base[^index]`).\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface ArrayAccessExpression {\n readonly kind: \"array-access\";\n readonly base: ExpressionNode;\n readonly index: ExpressionNode;\n readonly nullish: boolean;\n readonly fromEnd: boolean;\n}\n\n/**\n * A binary operator expression (e.g. `a + b`, `a ?? b`, `a && b`).\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface BinaryOperationExpression {\n readonly kind: \"binary-operation\";\n readonly operator: BinaryOperator;\n readonly left: ExpressionNode;\n readonly right: ExpressionNode;\n}\n\n/**\n * A unary operator expression (e.g. `!enabled`, `-count`).\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface UnaryOperationExpression {\n readonly kind: \"unary-operation\";\n readonly operator: UnaryOperator;\n readonly argument: ExpressionNode;\n}\n\n/**\n * A ternary conditional expression (e.g. `condition ? whenTrue : whenFalse`).\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface TernaryOperationExpression {\n readonly kind: \"ternary-operation\";\n readonly condition: ExpressionNode;\n readonly trueValue: ExpressionNode;\n readonly falseValue: ExpressionNode;\n}\n\n/**\n * A conditional expression block (e.g. `if (enabled) { ... }`).\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface IfConditionExpression {\n readonly kind: \"if-condition\";\n readonly condition: ExpressionNode;\n readonly body: ExpressionNode;\n}\n\n/**\n * A `for` expression (e.g. `[for item in items: { ... }]`).\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface ForExpression {\n readonly kind: \"for-expression\";\n readonly itemVariable: string;\n readonly indexVariable?: string;\n readonly collection: ExpressionNode;\n readonly body: ExpressionNode;\n}\n\n/**\n * An interpolated string expression (e.g. `'prefix${expr}suffix'`).\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface InterpolatedStringExpression {\n readonly kind: \"interpolated-string\";\n readonly segments: readonly ExpressionNode[];\n}\n\n/**\n * The additional-properties clause of an object type (`*: T`).\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface ObjectTypeAdditionalPropertiesNode {\n readonly kind: \"object-type-additional-properties\";\n readonly valueType: TypeNode;\n readonly decorators?: DecoratorsNode;\n}\n\n/**\n * An object type with named properties and optional additional properties.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface ObjectTypeNode {\n readonly kind: \"object-type\";\n readonly properties: readonly ObjectTypePropertyNode[];\n readonly additionalProperties?: ObjectTypeAdditionalPropertiesNode;\n}\n\n/**\n * An individual member in a union type.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface UnionTypeMemberNode {\n readonly kind: \"union-type-member\";\n readonly valueType: TypeNode;\n}\n\n/**\n * A union type (e.g. `string | int`).\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface UnionTypeNode {\n readonly kind: \"union-type\";\n readonly members: readonly UnionTypeMemberNode[];\n}\n\n/**\n * A nullable type wrapper (e.g. `string?`).\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface NullableTypeNode {\n readonly kind: \"nullable-type\";\n readonly base: TypeNode;\n}\n\n/**\n * A type argument in a parameterized type instantiation.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface ParameterizedTypeArgumentNode {\n readonly kind: \"parameterized-type-argument\";\n readonly valueType: TypeNode;\n}\n\n/**\n * A parameterized type instantiation (e.g. `map<string>`).\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface ParameterizedTypeInstantiationNode {\n readonly kind: \"parameterized-type-instantiation\";\n readonly base: TypeNode;\n readonly args: readonly ParameterizedTypeArgumentNode[];\n}\n\n/**\n * A Bicep variable declaration.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface VariableDeclarationNode {\n readonly bicepIdentifier: string;\n readonly value: ExpressionNode;\n readonly decorators?: DecoratorsNode;\n}\n\n/**\n * A Bicep output declaration.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface OutputDeclarationNode {\n readonly bicepIdentifier: string;\n readonly valueType: TypeNode;\n readonly value: ExpressionNode;\n readonly decorators?: DecoratorsNode;\n}\n\n/**\n * A Bicep resource declaration.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface ResourceDeclarationNode {\n readonly bicepIdentifier: string;\n /**\n * The Azure resource type (e.g. \"Microsoft.Storage/storageAccounts\").\n */\n readonly type: string;\n /**\n * The API version (e.g. \"2024-01-01\").\n */\n readonly apiVersion: string;\n /**\n * Whether this references an existing resource (`existing` keyword).\n */\n readonly existing: boolean;\n /**\n * The resource body.\n */\n readonly value: DeclarableBodyNode;\n readonly decorators?: DecoratorsNode;\n}\n\n/**\n * A Bicep module declaration.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface ModuleDeclarationNode {\n readonly bicepIdentifier: string;\n /**\n * Relative path to the module file.\n */\n readonly path: string;\n /**\n * The module body.\n */\n readonly value: DeclarableBodyNode;\n readonly decorators?: DecoratorsNode;\n}\n\n/**\n * The root serialization document containing all infra nodes.\n *\n * Generated from TypeSpec. Do not edit.\n */\nexport interface SerializationDocument {\n /**\n * The collection of infra nodes that make up this deployment.\n */\n readonly infras: readonly InfraNode[];\n}\n"]}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
export * from "./generated/ast.js";
|
|
2
|
+
import type { ModuleDeclarationNode, OutputDeclarationNode, ParameterDeclarationNode, ResourceDeclarationNode, VariableDeclarationNode } from "./generated/ast.js";
|
|
3
|
+
/** A declaration whose AST may contain expression and type dependencies. */
|
|
4
|
+
export type DeclarationNode = ResourceDeclarationNode | ModuleDeclarationNode | OutputDeclarationNode | ParameterDeclarationNode | VariableDeclarationNode;
|
|
5
|
+
/** Maps emitted identifiers to AST declarations for reference lookup. */
|
|
6
|
+
export type AstDeclarationMap = ReadonlyMap<string, DeclarationNode>;
|
|
7
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../src/serialization/ast/index.ts"],"names":[],"mappings":"AAGA,cAAc,oBAAoB,CAAC;AAEnC,OAAO,KAAK,EACV,qBAAqB,EACrB,qBAAqB,EACrB,wBAAwB,EACxB,uBAAuB,EACvB,uBAAuB,EACxB,MAAM,oBAAoB,CAAC;AAE5B,4EAA4E;AAC5E,MAAM,MAAM,eAAe,GACvB,uBAAuB,GACvB,qBAAqB,GACrB,qBAAqB,GACrB,wBAAwB,GACxB,uBAAuB,CAAC;AAE5B,yEAAyE;AACzE,MAAM,MAAM,iBAAiB,GAAG,WAAW,CAAC,MAAM,EAAE,eAAe,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../src/serialization/ast/index.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,kCAAkC;AAElC,cAAc,oBAAoB,CAAC","sourcesContent":["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport * from \"./generated/ast.js\";\n\nimport type {\n ModuleDeclarationNode,\n OutputDeclarationNode,\n ParameterDeclarationNode,\n ResourceDeclarationNode,\n VariableDeclarationNode,\n} from \"./generated/ast.js\";\n\n/** A declaration whose AST may contain expression and type dependencies. */\nexport type DeclarationNode =\n | ResourceDeclarationNode\n | ModuleDeclarationNode\n | OutputDeclarationNode\n | ParameterDeclarationNode\n | VariableDeclarationNode;\n\n/** Maps emitted identifiers to AST declarations for reference lookup. */\nexport type AstDeclarationMap = ReadonlyMap<string, DeclarationNode>;\n"]}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { DeclarableBodyNode, ObjectValue, ResourceDeclarationNode } from "./index.js";
|
|
2
|
+
/** Transforms a resource's object body while preserving conditions and loops. */
|
|
3
|
+
export declare function updateResourceBody(body: DeclarableBodyNode, transform: (value: ObjectValue) => ObjectValue): DeclarableBodyNode;
|
|
4
|
+
/** Gets the object body beneath a resource's condition and loop wrappers. */
|
|
5
|
+
export declare function getResourceBody(body: DeclarableBodyNode): ObjectValue;
|
|
6
|
+
/** Removes the scope field without changing other resource declaration data. */
|
|
7
|
+
export declare function removeResourceScope(resource: ResourceDeclarationNode): ResourceDeclarationNode;
|
|
8
|
+
/** Gets the parent declaration identifier, including indexed parent accesses. */
|
|
9
|
+
export declare function getResourceArmParentIdentifier(resource: ResourceDeclarationNode): string | undefined;
|
|
10
|
+
//# sourceMappingURL=resource-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"resource-utils.d.ts","sourceRoot":"","sources":["../../../../src/serialization/ast/resource-utils.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,kBAAkB,EAAE,WAAW,EAAE,uBAAuB,EAAE,MAAM,YAAY,CAAC;AAE3F,iFAAiF;AACjF,wBAAgB,kBAAkB,CAChC,IAAI,EAAE,kBAAkB,EACxB,SAAS,EAAE,CAAC,KAAK,EAAE,WAAW,KAAK,WAAW,GAC7C,kBAAkB,CAgBpB;AAED,6EAA6E;AAC7E,wBAAgB,eAAe,CAAC,IAAI,EAAE,kBAAkB,GAAG,WAAW,CAUrE;AAED,gFAAgF;AAChF,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,uBAAuB,GAAG,uBAAuB,CAQ9F;AAED,iFAAiF;AACjF,wBAAgB,8BAA8B,CAC5C,QAAQ,EAAE,uBAAuB,GAChC,MAAM,GAAG,SAAS,CAQpB"}
|