@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,74 @@
|
|
|
1
|
+
var __defProp = Object.defineProperty;
|
|
2
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
3
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
4
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
5
|
+
var __export = (target, all) => {
|
|
6
|
+
for (var name in all)
|
|
7
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
8
|
+
};
|
|
9
|
+
var __copyProps = (to, from, except, desc) => {
|
|
10
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
11
|
+
for (let key of __getOwnPropNames(from))
|
|
12
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
13
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
14
|
+
}
|
|
15
|
+
return to;
|
|
16
|
+
};
|
|
17
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
+
var name_validation_exports = {};
|
|
19
|
+
__export(name_validation_exports, {
|
|
20
|
+
assertValidResourceName: () => assertValidResourceName
|
|
21
|
+
});
|
|
22
|
+
module.exports = __toCommonJS(name_validation_exports);
|
|
23
|
+
var import_ast_nodes = require("../expression/ast-nodes.js");
|
|
24
|
+
var import_expressions = require("../expression/expressions.js");
|
|
25
|
+
var import_naming_rules = require("./naming-rules.js");
|
|
26
|
+
function getResourceNameIssues(value, rules) {
|
|
27
|
+
for (const bound of [rules.minLength, rules.maxLength]) {
|
|
28
|
+
if (bound !== void 0 && (!Number.isSafeInteger(bound) || bound < 0)) {
|
|
29
|
+
throw new Error("Resource naming length bounds must be non-negative safe integers.");
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
if (rules.minLength !== void 0 && rules.maxLength !== void 0 && rules.minLength > rules.maxLength) {
|
|
33
|
+
throw new Error("Resource naming minimum length exceeds its maximum length.");
|
|
34
|
+
}
|
|
35
|
+
const node = (0, import_expressions.isExpression)(value) ? (0, import_expressions.unwrapExpression)(value) : value;
|
|
36
|
+
if ((0, import_ast_nodes.isExpressionNode)(node)) return [];
|
|
37
|
+
if (typeof value === "number" && Number.isSafeInteger(value)) {
|
|
38
|
+
return [];
|
|
39
|
+
}
|
|
40
|
+
if (typeof value !== "string") {
|
|
41
|
+
return ["Name must be a string, a safe integer, or an expression."];
|
|
42
|
+
}
|
|
43
|
+
const literal = value.split("/").at(-1);
|
|
44
|
+
const issues = [];
|
|
45
|
+
if (rules.minLength !== void 0 && literal.length < rules.minLength) {
|
|
46
|
+
issues.push(
|
|
47
|
+
`Name must contain at least ${rules.minLength} characters (received ${literal.length}).`
|
|
48
|
+
);
|
|
49
|
+
}
|
|
50
|
+
if (rules.maxLength !== void 0 && literal.length > rules.maxLength) {
|
|
51
|
+
issues.push(
|
|
52
|
+
`Name must contain at most ${rules.maxLength} characters (received ${literal.length}).`
|
|
53
|
+
);
|
|
54
|
+
}
|
|
55
|
+
const pattern = rules.pattern;
|
|
56
|
+
if (pattern !== void 0 && !new RegExp(pattern.regex).test(literal)) {
|
|
57
|
+
issues.push(pattern.message ?? `Name must match ${pattern.regex}.`);
|
|
58
|
+
}
|
|
59
|
+
return issues;
|
|
60
|
+
}
|
|
61
|
+
function assertValidResourceName(value, type, rules, options = {}) {
|
|
62
|
+
const issues = getResourceNameIssues(value, rules ?? import_naming_rules.DEFAULT_NAMING_RULES);
|
|
63
|
+
const generated = options.generated ?? false;
|
|
64
|
+
if (issues.length > 0) {
|
|
65
|
+
throw new Error(
|
|
66
|
+
`${generated ? "Cannot generate a compliant name" : "Invalid name"} for '${type}': ${issues.join(" ")}${generated ? " Provide an explicit name or a compatible naming policy." : ""}`
|
|
67
|
+
);
|
|
68
|
+
}
|
|
69
|
+
}
|
|
70
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
71
|
+
0 && (module.exports = {
|
|
72
|
+
assertValidResourceName
|
|
73
|
+
});
|
|
74
|
+
//# sourceMappingURL=name-validation.js.map
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../../src/naming/name-validation.ts"],
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\n/**\n * Shared resource-name checks for authoring and automatic naming.\n *\n * Literal names are checked against TypeSpec-defined length bounds and a regular\n * expression. Deployment-time expressions are preserved without inspection:\n * their final value is not available during authoring, and partial validation\n * cannot establish whether the deployed name will be valid.\n *\n * These checks neither rewrite explicit names nor check Azure name availability.\n */\n\nimport { isExpressionNode } from \"../expression/ast-nodes.js\";\nimport { isExpression, unwrapExpression } from \"../expression/expressions.js\";\nimport { DEFAULT_NAMING_RULES, type ResourceNamingRules } from \"./naming-rules.js\";\n\nexport interface ResourceNameValidationOptions {\n readonly generated?: boolean;\n}\n\n/**\n * Checks a literal string name against the unified resource rules.\n *\n * The pattern retains its JavaScript matching semantics, including missing\n * anchors, and the pattern and length bounds must pass. Terminal resource\n * constraints apply only to the final slash-separated segment. ARM name\n * structure is left to Bicep and Azure Resource Manager.\n *\n * Safe integer identifiers and deployment-time expressions are preserved without\n * applying string constraints.\n *\n * @returns Literal-name violations; empty for an accepted value.\n * @throws If naming metadata has invalid length bounds, or if\n * a pattern cannot be compiled as a JavaScript regex.\n */\nfunction getResourceNameIssues(value: unknown, rules: ResourceNamingRules): readonly string[] {\n for (const bound of [rules.minLength, rules.maxLength]) {\n if (bound !== undefined && (!Number.isSafeInteger(bound) || bound < 0)) {\n throw new Error(\"Resource naming length bounds must be non-negative safe integers.\");\n }\n }\n if (\n rules.minLength !== undefined &&\n rules.maxLength !== undefined &&\n rules.minLength > rules.maxLength\n ) {\n throw new Error(\"Resource naming minimum length exceeds its maximum length.\");\n }\n const node = isExpression(value) ? unwrapExpression(value) : value;\n if (isExpressionNode(node)) return [];\n if (typeof value === \"number\" && Number.isSafeInteger(value)) {\n return [];\n }\n if (typeof value !== \"string\") {\n return [\"Name must be a string, a safe integer, or an expression.\"];\n }\n\n const literal = value.split(\"/\").at(-1)!;\n const issues: string[] = [];\n if (rules.minLength !== undefined && literal.length < rules.minLength) {\n issues.push(\n `Name must contain at least ${rules.minLength} characters (received ${literal.length}).`,\n );\n }\n if (rules.maxLength !== undefined && literal.length > rules.maxLength) {\n issues.push(\n `Name must contain at most ${rules.maxLength} characters (received ${literal.length}).`,\n );\n }\n const pattern = rules.pattern;\n if (pattern !== undefined && !new RegExp(pattern.regex).test(literal)) {\n issues.push(pattern.message ?? `Name must match ${pattern.regex}.`);\n }\n return issues;\n}\n\n/**\n * Applies throwing validation at resource construction, name assignment,\n * restoration, and naming-policy output boundaries.\n *\n * The resource type identifies the failing declaration in the error. When\n * rules are absent, the default convention only checks the input shape.\n *\n * @throws For invalid literal names or invalid metadata.\n */\nexport function assertValidResourceName(\n value: unknown,\n type: string,\n rules: ResourceNamingRules | undefined,\n options: ResourceNameValidationOptions = {},\n): void {\n const issues = getResourceNameIssues(value, rules ?? DEFAULT_NAMING_RULES);\n const generated = options.generated ?? false;\n if (issues.length > 0) {\n throw new Error(\n `${generated ? \"Cannot generate a compliant name\" : \"Invalid name\"} for '${type}': ` +\n `${issues.join(\" \")}${generated ? \" Provide an explicit name or a compatible naming policy.\" : \"\"}`,\n );\n }\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAcA,uBAAiC;AACjC,yBAA+C;AAC/C,0BAA+D;AAqB/D,SAAS,sBAAsB,OAAgB,OAA+C;AAC5F,aAAW,SAAS,CAAC,MAAM,WAAW,MAAM,SAAS,GAAG;AACtD,QAAI,UAAU,WAAc,CAAC,OAAO,cAAc,KAAK,KAAK,QAAQ,IAAI;AACtE,YAAM,IAAI,MAAM,mEAAmE;AAAA,IACrF;AAAA,EACF;AACA,MACE,MAAM,cAAc,UACpB,MAAM,cAAc,UACpB,MAAM,YAAY,MAAM,WACxB;AACA,UAAM,IAAI,MAAM,4DAA4D;AAAA,EAC9E;AACA,QAAM,WAAO,iCAAa,KAAK,QAAI,qCAAiB,KAAK,IAAI;AAC7D,UAAI,mCAAiB,IAAI,EAAG,QAAO,CAAC;AACpC,MAAI,OAAO,UAAU,YAAY,OAAO,cAAc,KAAK,GAAG;AAC5D,WAAO,CAAC;AAAA,EACV;AACA,MAAI,OAAO,UAAU,UAAU;AAC7B,WAAO,CAAC,0DAA0D;AAAA,EACpE;AAEA,QAAM,UAAU,MAAM,MAAM,GAAG,EAAE,GAAG,EAAE;AACtC,QAAM,SAAmB,CAAC;AAC1B,MAAI,MAAM,cAAc,UAAa,QAAQ,SAAS,MAAM,WAAW;AACrE,WAAO;AAAA,MACL,8BAA8B,MAAM,SAAS,yBAAyB,QAAQ,MAAM;AAAA,IACtF;AAAA,EACF;AACA,MAAI,MAAM,cAAc,UAAa,QAAQ,SAAS,MAAM,WAAW;AACrE,WAAO;AAAA,MACL,6BAA6B,MAAM,SAAS,yBAAyB,QAAQ,MAAM;AAAA,IACrF;AAAA,EACF;AACA,QAAM,UAAU,MAAM;AACtB,MAAI,YAAY,UAAa,CAAC,IAAI,OAAO,QAAQ,KAAK,EAAE,KAAK,OAAO,GAAG;AACrE,WAAO,KAAK,QAAQ,WAAW,mBAAmB,QAAQ,KAAK,GAAG;AAAA,EACpE;AACA,SAAO;AACT;AAWO,SAAS,wBACd,OACA,MACA,OACA,UAAyC,CAAC,GACpC;AACN,QAAM,SAAS,sBAAsB,OAAO,SAAS,wCAAoB;AACzE,QAAM,YAAY,QAAQ,aAAa;AACvC,MAAI,OAAO,SAAS,GAAG;AACrB,UAAM,IAAI;AAAA,MACR,GAAG,YAAY,qCAAqC,cAAc,SAAS,IAAI,MAC1E,OAAO,KAAK,GAAG,CAAC,GAAG,YAAY,6DAA6D,EAAE;AAAA,IACrG;AAAA,EACF;AACF;",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|
|
@@ -3,6 +3,8 @@ import { type ResourceNamingRules } from "./naming-rules.js";
|
|
|
3
3
|
export interface NamingContext {
|
|
4
4
|
readonly type: string;
|
|
5
5
|
readonly rules: ResourceNamingRules;
|
|
6
|
+
/** Required name segments relative to the actual declaration parent. */
|
|
7
|
+
readonly nameSegments?: number | undefined;
|
|
6
8
|
readonly label?: string | undefined;
|
|
7
9
|
}
|
|
8
10
|
/**
|
|
@@ -18,6 +20,7 @@ export interface NamingContext {
|
|
|
18
20
|
* doesn't provide an explicit `name`.
|
|
19
21
|
*/
|
|
20
22
|
export interface NamingPolicy {
|
|
23
|
+
/** Produces a candidate; resource construction validates the returned name. */
|
|
21
24
|
generateName(context: NamingContext): ExpressionOrValue<string>;
|
|
22
25
|
}
|
|
23
26
|
export interface NamingPolicyOptions {
|
|
@@ -31,7 +34,7 @@ export interface NamingPolicyOptions {
|
|
|
31
34
|
* Generates names by composing the resource type abbreviation, workload,
|
|
32
35
|
* environment, region, label, and an ordinal suffix for repeated types.
|
|
33
36
|
* Global-scope resources get a `uniqueString(subscription().subscriptionId)`
|
|
34
|
-
* suffix to
|
|
37
|
+
* suffix to reduce name collisions; Azure name availability is not checked.
|
|
35
38
|
*/
|
|
36
39
|
export declare class DefaultNamingPolicy implements NamingPolicy {
|
|
37
40
|
#private;
|
|
@@ -46,11 +49,8 @@ export declare class DefaultNamingPolicy implements NamingPolicy {
|
|
|
46
49
|
*/
|
|
47
50
|
export declare const namingRequiredPolicy: NamingPolicy;
|
|
48
51
|
/**
|
|
49
|
-
*
|
|
50
|
-
*
|
|
51
|
-
* - If `name` is explicitly provided (string or expression), it is used
|
|
52
|
-
* as-is — the naming policy does not transform it.
|
|
53
|
-
* - Otherwise, the active naming policy generates a name.
|
|
52
|
+
* Generates and validates a name at the resource construction boundary.
|
|
53
|
+
* Explicit constructor names are validated before declaration registration.
|
|
54
54
|
*/
|
|
55
|
-
export declare function
|
|
55
|
+
export declare function generateResourceName(policy: NamingPolicy, type: string, namingRules: ResourceNamingRules | undefined, nameSegments: number | undefined): ExpressionOrValue<string>;
|
|
56
56
|
//# sourceMappingURL=naming-policy.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"naming-policy.d.ts","sourceRoot":"","sources":["../../../src/naming/naming-policy.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"naming-policy.d.ts","sourceRoot":"","sources":["../../../src/naming/naming-policy.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAGtE,OAAO,EAAwB,KAAK,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAGnF,MAAM,WAAW,aAAa;IAC5B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,KAAK,EAAE,mBAAmB,CAAC;IACpC,wEAAwE;IACxE,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC3C,QAAQ,CAAC,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACrC;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,YAAY;IAC3B,+EAA+E;IAC/E,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,WAAW,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1C,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CACtC;AAED;;;;;;;GAOG;AACH,qBAAa,mBAAoB,YAAW,YAAY;;gBAK1C,OAAO,EAAE,mBAAmB;IAIxC,YAAY,CAAC,OAAO,EAAE,aAAa,GAAG,iBAAiB,CAAC,MAAM,CAAC;CA0GhE;AAED;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,EAAE,YAOlC,CAAC;AAEF;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,YAAY,EACpB,IAAI,EAAE,MAAM,EACZ,WAAW,EAAE,mBAAmB,GAAG,SAAS,EAC5C,YAAY,EAAE,MAAM,GAAG,SAAS,GAC/B,iBAAiB,CAAC,MAAM,CAAC,CAW3B"}
|
|
@@ -18,30 +18,43 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
18
18
|
var naming_policy_exports = {};
|
|
19
19
|
__export(naming_policy_exports, {
|
|
20
20
|
DefaultNamingPolicy: () => DefaultNamingPolicy,
|
|
21
|
-
|
|
22
|
-
|
|
21
|
+
generateResourceName: () => generateResourceName,
|
|
22
|
+
namingRequiredPolicy: () => namingRequiredPolicy
|
|
23
23
|
});
|
|
24
24
|
module.exports = __toCommonJS(naming_policy_exports);
|
|
25
|
+
var import_regexpp = require("@eslint-community/regexpp");
|
|
26
|
+
var import_expressions = require("../expression/expressions.js");
|
|
25
27
|
var import_fn = require("../fn.js");
|
|
26
28
|
var import_naming_rules = require("./naming-rules.js");
|
|
29
|
+
var import_name_validation = require("./name-validation.js");
|
|
27
30
|
class DefaultNamingPolicy {
|
|
28
31
|
#options;
|
|
29
32
|
#ordinals = /* @__PURE__ */ new Map();
|
|
33
|
+
#names = /* @__PURE__ */ new Map();
|
|
30
34
|
constructor(options) {
|
|
31
35
|
this.#options = options;
|
|
32
36
|
}
|
|
33
37
|
generateName(context) {
|
|
34
|
-
const ordinal = this.#ordinals.get(context.type) ?? 0;
|
|
35
|
-
this.#ordinals.set(context.type, ordinal + 1);
|
|
36
38
|
const rules = context.rules;
|
|
37
|
-
const
|
|
39
|
+
const nameSegments = context.nameSegments ?? rules.nameSegments ?? 1;
|
|
40
|
+
if (!Number.isSafeInteger(nameSegments) || nameSegments < 1) {
|
|
41
|
+
throw new Error("Resource naming segment count must be a positive safe integer.");
|
|
42
|
+
}
|
|
43
|
+
if (nameSegments > 1) {
|
|
44
|
+
throw new Error(
|
|
45
|
+
`Resource '${context.type}' requires an explicit ${nameSegments}-segment name including its undeclared ancestors.`
|
|
46
|
+
);
|
|
47
|
+
}
|
|
48
|
+
const ordinal = this.#ordinals.get(context.type) ?? 0;
|
|
49
|
+
const alphabet = getNamingAlphabet(rules);
|
|
50
|
+
const sep = rules.separator ?? (alphabet.includes("-") ? "-" : "");
|
|
51
|
+
if ([...sep].some((character) => !alphabet.includes(character))) {
|
|
52
|
+
throw new Error(
|
|
53
|
+
`Cannot generate a compliant name for '${context.type}': separator '${sep}' is incompatible with its naming rules.`
|
|
54
|
+
);
|
|
55
|
+
}
|
|
38
56
|
const sanitize = (segment) => {
|
|
39
|
-
|
|
40
|
-
if (!rules.validCharacters.hyphens) value = value.replace(/-/gu, "");
|
|
41
|
-
if (!rules.validCharacters.underscores) value = value.replace(/_/gu, "");
|
|
42
|
-
if (!rules.validCharacters.periods) value = value.replace(/\./gu, "");
|
|
43
|
-
value = value.replace(/[^A-Za-z0-9._-]/gu, "");
|
|
44
|
-
return rules.validCharacters.uppercase ? value : value.toLowerCase();
|
|
57
|
+
return [...segment].map((character) => alphabet.includes(character) ? character : character.toLowerCase()).filter((character) => alphabet.includes(character)).join("");
|
|
45
58
|
};
|
|
46
59
|
const segments = [];
|
|
47
60
|
if (rules.abbreviation) {
|
|
@@ -58,20 +71,64 @@ class DefaultNamingPolicy {
|
|
|
58
71
|
segments.push(sanitize(context.label));
|
|
59
72
|
}
|
|
60
73
|
const ordinalSuffix = ordinal > 0 ? String(ordinal + 1) : "";
|
|
61
|
-
|
|
74
|
+
let base = segments.filter(Boolean).join(sep);
|
|
75
|
+
const startingAlphabet = getNamingAlphabet(rules, "start");
|
|
76
|
+
const endingAlphabet = getNamingAlphabet(rules, "end");
|
|
77
|
+
const padding = startingAlphabet[0];
|
|
78
|
+
if (padding === void 0 || endingAlphabet.length === 0) {
|
|
79
|
+
throw new Error(
|
|
80
|
+
`Cannot generate a compliant name for '${context.type}': no supported generation alphabet. Provide an explicit name.`
|
|
81
|
+
);
|
|
82
|
+
}
|
|
83
|
+
if (base.length > 0 && !startingAlphabet.includes(base[0])) {
|
|
84
|
+
base = padding + base;
|
|
85
|
+
}
|
|
86
|
+
const maxLength = rules.maxLength ?? Math.max(24, rules.minLength ?? 0);
|
|
87
|
+
const minLength = rules.minLength ?? 1;
|
|
62
88
|
const truncateWithOrdinal = (available) => {
|
|
63
89
|
const ordinalPrefix = ordinalSuffix ? sep : "";
|
|
64
|
-
const baseLimit =
|
|
90
|
+
const baseLimit = available - ordinalPrefix.length - ordinalSuffix.length;
|
|
91
|
+
if (baseLimit < 1) {
|
|
92
|
+
throw new Error(
|
|
93
|
+
`Cannot generate a compliant name for '${context.type}': maximum length ${maxLength} cannot accommodate the required suffixes. Provide an explicit name.`
|
|
94
|
+
);
|
|
95
|
+
}
|
|
65
96
|
return `${base.slice(0, baseLimit)}${ordinalPrefix}${ordinalSuffix}`;
|
|
66
97
|
};
|
|
98
|
+
let name;
|
|
67
99
|
if (rules.scope === "global") {
|
|
68
100
|
const uniqueSuffixLength = 13;
|
|
69
|
-
const
|
|
70
|
-
|
|
71
|
-
|
|
101
|
+
const prefixBudget = maxLength - sep.length - uniqueSuffixLength;
|
|
102
|
+
base = base.padEnd(Math.max(1, minLength - sep.length - uniqueSuffixLength), padding);
|
|
103
|
+
let prefix = truncateWithOrdinal(prefixBudget);
|
|
104
|
+
if (sep && prefix.endsWith(sep)) {
|
|
105
|
+
prefix = prefix.slice(0, -sep.length).padEnd(1, padding);
|
|
106
|
+
}
|
|
107
|
+
prefix = prefix.padEnd(Math.max(1, minLength - sep.length - uniqueSuffixLength), padding);
|
|
108
|
+
name = (0, import_fn.concat)(prefix + sep, (0, import_fn.uniqueString)((0, import_fn.subscription)().subscriptionId));
|
|
109
|
+
if (!alphabet.includes("A")) name = (0, import_fn.toLower)(name);
|
|
110
|
+
} else {
|
|
111
|
+
base = base.padEnd(minLength, padding);
|
|
112
|
+
let truncated = truncateWithOrdinal(maxLength);
|
|
113
|
+
if (!endingAlphabet.includes(truncated.at(-1))) {
|
|
114
|
+
truncated = truncated.slice(0, -1) + endingAlphabet[0];
|
|
115
|
+
}
|
|
116
|
+
name = truncated;
|
|
72
117
|
}
|
|
73
|
-
const
|
|
74
|
-
|
|
118
|
+
const key = JSON.stringify(
|
|
119
|
+
name,
|
|
120
|
+
(_key, value) => (0, import_expressions.isExpression)(value) ? (0, import_expressions.unwrapExpression)(value) : value
|
|
121
|
+
);
|
|
122
|
+
const names = this.#names.get(context.type) ?? /* @__PURE__ */ new Set();
|
|
123
|
+
if (names.has(key)) {
|
|
124
|
+
throw new Error(
|
|
125
|
+
`Cannot generate a distinct name for '${context.type}' within its naming rules. Provide an explicit name.`
|
|
126
|
+
);
|
|
127
|
+
}
|
|
128
|
+
names.add(key);
|
|
129
|
+
this.#names.set(context.type, names);
|
|
130
|
+
this.#ordinals.set(context.type, ordinal + 1);
|
|
131
|
+
return name;
|
|
75
132
|
}
|
|
76
133
|
}
|
|
77
134
|
const namingRequiredPolicy = {
|
|
@@ -81,19 +138,72 @@ const namingRequiredPolicy = {
|
|
|
81
138
|
);
|
|
82
139
|
}
|
|
83
140
|
};
|
|
84
|
-
function
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
}
|
|
88
|
-
return policy.generateName({
|
|
141
|
+
function generateResourceName(policy, type, namingRules, nameSegments) {
|
|
142
|
+
const rules = namingRules ?? import_naming_rules.DEFAULT_NAMING_RULES;
|
|
143
|
+
const generated = policy.generateName({
|
|
89
144
|
type,
|
|
90
|
-
rules
|
|
145
|
+
rules,
|
|
146
|
+
nameSegments: nameSegments ?? rules.nameSegments
|
|
91
147
|
});
|
|
148
|
+
(0, import_name_validation.assertValidResourceName)(generated, type, rules, {
|
|
149
|
+
generated: true
|
|
150
|
+
});
|
|
151
|
+
return generated;
|
|
152
|
+
}
|
|
153
|
+
const NAME_ALPHABET = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._";
|
|
154
|
+
const patternParser = new import_regexpp.RegExpParser();
|
|
155
|
+
function getPatternTokens(regex) {
|
|
156
|
+
const pattern = patternParser.parsePattern(regex);
|
|
157
|
+
if (pattern.alternatives.length !== 1) return void 0;
|
|
158
|
+
const elements = pattern.alternatives[0].elements;
|
|
159
|
+
const start = elements[0];
|
|
160
|
+
const end = elements.at(-1);
|
|
161
|
+
if (start?.type !== "Assertion" || start.kind !== "start") return void 0;
|
|
162
|
+
const anchored = end?.type === "Assertion" && end.kind === "end";
|
|
163
|
+
const body = elements.slice(1, anchored ? -1 : void 0);
|
|
164
|
+
const [head, tail] = body;
|
|
165
|
+
if (body.length === 2 && head?.type === "Quantifier" && head.min === 1 && head.max === Infinity && head.element.type === "CharacterClass" && tail?.type === "Quantifier" && tail.min === 0 && tail.max === Infinity && (tail.element.type === "Group" || tail.element.type === "CapturingGroup") && tail.element.alternatives.length === 1) {
|
|
166
|
+
const repeated = tail.element.alternatives[0].elements;
|
|
167
|
+
const [separator, part] = repeated;
|
|
168
|
+
if (repeated.length === 2 && separator?.type === "Character" && separator.value === 45 && part?.type === "Quantifier" && part.min === 1 && part.max === Infinity && part.element.raw === head.element.raw) {
|
|
169
|
+
return [
|
|
170
|
+
{ characters: new RegExp(`^(?:${head.element.raw})$`), min: 1 },
|
|
171
|
+
...anchored ? [] : [{ characters: /^.$/, min: 0 }]
|
|
172
|
+
];
|
|
173
|
+
}
|
|
174
|
+
}
|
|
175
|
+
if (!anchored) return void 0;
|
|
176
|
+
const tokens = [];
|
|
177
|
+
for (const element of body) {
|
|
178
|
+
if (element.type === "Quantifier" && element.max === 0) continue;
|
|
179
|
+
const atom = element.type === "Quantifier" ? element.element : element;
|
|
180
|
+
if (atom.type !== "Character" && atom.type !== "CharacterClass" && atom.type !== "CharacterSet") {
|
|
181
|
+
return void 0;
|
|
182
|
+
}
|
|
183
|
+
tokens.push({
|
|
184
|
+
characters: new RegExp(`^(?:${atom.raw})$`),
|
|
185
|
+
min: element.type === "Quantifier" ? element.min : 1
|
|
186
|
+
});
|
|
187
|
+
if (tokens.length > 128) return void 0;
|
|
188
|
+
}
|
|
189
|
+
return tokens;
|
|
190
|
+
}
|
|
191
|
+
function getNamingAlphabet(rules, boundary) {
|
|
192
|
+
const alphabet = rules.pattern !== void 0 ? NAME_ALPHABET : "abcdefghijklmnopqrstuvwxyz0123456789" + (rules.separator ?? "");
|
|
193
|
+
if (rules.pattern === void 0 || rules.pattern.regex === "") {
|
|
194
|
+
return alphabet;
|
|
195
|
+
}
|
|
196
|
+
const tokens = getPatternTokens(rules.pattern.regex);
|
|
197
|
+
if (tokens === void 0) return alphabet.replace(/[A-Z._-]/g, "");
|
|
198
|
+
const ordered = boundary === "end" ? [...tokens].reverse() : tokens;
|
|
199
|
+
const firstRequired = ordered.findIndex((token) => token.min > 0);
|
|
200
|
+
const candidates = boundary === void 0 || firstRequired < 0 ? ordered : ordered.slice(0, firstRequired + 1);
|
|
201
|
+
return [...alphabet].filter((character) => candidates.some((token) => token.characters.test(character))).join("");
|
|
92
202
|
}
|
|
93
203
|
// Annotate the CommonJS export names for ESM import in node:
|
|
94
204
|
0 && (module.exports = {
|
|
95
205
|
DefaultNamingPolicy,
|
|
96
|
-
|
|
97
|
-
|
|
206
|
+
generateResourceName,
|
|
207
|
+
namingRequiredPolicy
|
|
98
208
|
});
|
|
99
209
|
//# sourceMappingURL=naming-policy.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/naming/naming-policy.ts"],
|
|
4
|
-
"sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport type { ExpressionOrValue } from \"../expression/expressions.js\";\nimport { concat, subscription, toLower, uniqueString } from \"../fn.js\";\nimport { MOST_RESTRICTIVE, type ResourceNamingRules } from \"./naming-rules.js\";\n\nexport interface NamingContext {\n readonly type: string;\n readonly rules: ResourceNamingRules;\n readonly label?: string | undefined;\n}\n\n/**\n * Strategy for generating Azure resource names when a resource is created\n * without an explicit `name`.\n *\n * Implement this interface to provide a custom naming convention. Two\n * built-in implementations are provided:\n *\n * - {@link DefaultNamingPolicy} \u2014 workload-based names with abbreviations,\n * ordinals, and `uniqueString()` for globally-scoped resources.\n * - {@link namingRequiredPolicy} \u2014 a singleton that throws if a resource\n * doesn't provide an explicit `name`.\n */\nexport interface NamingPolicy {\n generateName(context: NamingContext): ExpressionOrValue<string>;\n}\n\nexport interface NamingPolicyOptions {\n readonly workload: string;\n readonly environment?: string | undefined;\n readonly region?: string | undefined;\n}\n\n/**\n * Default workload-based naming policy.\n *\n * Generates names by composing the resource type abbreviation, workload,\n * environment, region, label, and an ordinal suffix for repeated types.\n * Global-scope resources get a `uniqueString(subscription().subscriptionId)`\n * suffix to ensure uniqueness.\n */\nexport class DefaultNamingPolicy implements NamingPolicy {\n readonly #options: NamingPolicyOptions;\n readonly #ordinals = new Map<string, number>();\n\n constructor(options: NamingPolicyOptions) {\n this.#options = options;\n }\n\n generateName(context: NamingContext): ExpressionOrValue<string> {\n const ordinal = this.#ordinals.get(context.type) ?? 0;\n this.#ordinals.set(context.type, ordinal + 1);\n\n const rules = context.rules;\n const sep = rules.validCharacters.hyphens ? \"-\" : \"\";\n\n const sanitize = (segment: string): string => {\n let value = segment;\n if (!rules.validCharacters.hyphens) value = value.replace(/-/gu, \"\");\n if (!rules.validCharacters.underscores) value = value.replace(/_/gu, \"\");\n if (!rules.validCharacters.periods) value = value.replace(/\\./gu, \"\");\n value = value.replace(/[^A-Za-z0-9._-]/gu, \"\");\n return rules.validCharacters.uppercase ? value : value.toLowerCase();\n };\n\n const segments: string[] = [];\n if (rules.abbreviation) {\n segments.push(sanitize(rules.abbreviation));\n }\n segments.push(sanitize(this.#options.workload));\n if (this.#options.environment) {\n segments.push(sanitize(this.#options.environment));\n }\n if (this.#options.region) {\n segments.push(sanitize(this.#options.region));\n }\n if (context.label) {\n segments.push(sanitize(context.label));\n }\n const ordinalSuffix = ordinal > 0 ? String(ordinal + 1) : \"\";\n const base = segments.filter(Boolean).join(sep);\n\n const truncateWithOrdinal = (available: number): string => {\n const ordinalPrefix = ordinalSuffix ? sep : \"\";\n const baseLimit = Math.max(0, available - ordinalPrefix.length - ordinalSuffix.length);\n return `${base.slice(0, baseLimit)}${ordinalPrefix}${ordinalSuffix}`;\n };\n\n if (rules.scope === \"global\") {\n // Bicep uniqueString() always returns 13 characters. Reserve that suffix\n // and the ordinal before truncating so repeated resources stay unique.\n const uniqueSuffixLength = 13;\n const prefix = truncateWithOrdinal(rules.maxLength - sep.length - uniqueSuffixLength);\n const full = concat(prefix + sep, uniqueString(subscription().subscriptionId));\n return rules.validCharacters.uppercase ? full : toLower(full);\n }\n\n // Non-global scope: no uniqueString needed, plain string is fine\n const truncated = truncateWithOrdinal(rules.maxLength);\n return rules.validCharacters.uppercase ? truncated : truncated.toLowerCase();\n }\n}\n\n/**\n * Naming policy that requires every resource to provide an explicit `name`.\n *\n * Throws an error when asked to generate a name. Use this on a stack to\n * disable auto-naming entirely.\n */\nexport const namingRequiredPolicy: NamingPolicy = {\n generateName(context: NamingContext): ExpressionOrValue<string> {\n throw new Error(\n `Resource of type '${context.type}' requires an explicit 'name' ` +\n `(the stack uses 'namingRequiredPolicy').`,\n );\n },\n};\n\n/**\n * Resolves the Azure resource name for a resource instance.\n *\n * - If `name` is explicitly provided (string or expression), it is used\n * as-is \u2014 the naming policy does not transform it.\n * - Otherwise, the active naming policy generates a name.\n */\nexport function resolveResourceName(\n policy: NamingPolicy,\n name: ExpressionOrValue<string> | undefined,\n type: string,\n namingRules: ResourceNamingRules | undefined,\n): ExpressionOrValue<string> {\n if (name !== undefined) {\n return name;\n }\n return policy.generateName({\n type,\n rules: namingRules ?? MOST_RESTRICTIVE,\n });\n}\n"],
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nimport { RegExpParser } from \"@eslint-community/regexpp\";\nimport type { ExpressionOrValue } from \"../expression/expressions.js\";\nimport { isExpression, unwrapExpression } from \"../expression/expressions.js\";\nimport { concat, subscription, toLower, uniqueString } from \"../fn.js\";\nimport { DEFAULT_NAMING_RULES, type ResourceNamingRules } from \"./naming-rules.js\";\nimport { assertValidResourceName } from \"./name-validation.js\";\n\nexport interface NamingContext {\n readonly type: string;\n readonly rules: ResourceNamingRules;\n /** Required name segments relative to the actual declaration parent. */\n readonly nameSegments?: number | undefined;\n readonly label?: string | undefined;\n}\n\n/**\n * Strategy for generating Azure resource names when a resource is created\n * without an explicit `name`.\n *\n * Implement this interface to provide a custom naming convention. Two\n * built-in implementations are provided:\n *\n * - {@link DefaultNamingPolicy} \u2014 workload-based names with abbreviations,\n * ordinals, and `uniqueString()` for globally-scoped resources.\n * - {@link namingRequiredPolicy} \u2014 a singleton that throws if a resource\n * doesn't provide an explicit `name`.\n */\nexport interface NamingPolicy {\n /** Produces a candidate; resource construction validates the returned name. */\n generateName(context: NamingContext): ExpressionOrValue<string>;\n}\n\nexport interface NamingPolicyOptions {\n readonly workload: string;\n readonly environment?: string | undefined;\n readonly region?: string | undefined;\n}\n\n/**\n * Default workload-based naming policy.\n *\n * Generates names by composing the resource type abbreviation, workload,\n * environment, region, label, and an ordinal suffix for repeated types.\n * Global-scope resources get a `uniqueString(subscription().subscriptionId)`\n * suffix to reduce name collisions; Azure name availability is not checked.\n */\nexport class DefaultNamingPolicy implements NamingPolicy {\n readonly #options: NamingPolicyOptions;\n readonly #ordinals = new Map<string, number>();\n readonly #names = new Map<string, Set<string>>();\n\n constructor(options: NamingPolicyOptions) {\n this.#options = options;\n }\n\n generateName(context: NamingContext): ExpressionOrValue<string> {\n const rules = context.rules;\n const nameSegments = context.nameSegments ?? rules.nameSegments ?? 1;\n if (!Number.isSafeInteger(nameSegments) || nameSegments < 1) {\n throw new Error(\"Resource naming segment count must be a positive safe integer.\");\n }\n if (nameSegments > 1) {\n throw new Error(\n `Resource '${context.type}' requires an explicit ${nameSegments}-segment name including its undeclared ancestors.`,\n );\n }\n const ordinal = this.#ordinals.get(context.type) ?? 0;\n const alphabet = getNamingAlphabet(rules);\n const sep = rules.separator ?? (alphabet.includes(\"-\") ? \"-\" : \"\");\n if ([...sep].some((character) => !alphabet.includes(character))) {\n throw new Error(\n `Cannot generate a compliant name for '${context.type}': separator '${sep}' is incompatible with its naming rules.`,\n );\n }\n const sanitize = (segment: string): string => {\n return [...segment]\n .map((character) => (alphabet.includes(character) ? character : character.toLowerCase()))\n .filter((character) => alphabet.includes(character))\n .join(\"\");\n };\n\n const segments: string[] = [];\n if (rules.abbreviation) {\n segments.push(sanitize(rules.abbreviation));\n }\n segments.push(sanitize(this.#options.workload));\n if (this.#options.environment) {\n segments.push(sanitize(this.#options.environment));\n }\n if (this.#options.region) {\n segments.push(sanitize(this.#options.region));\n }\n if (context.label) {\n segments.push(sanitize(context.label));\n }\n const ordinalSuffix = ordinal > 0 ? String(ordinal + 1) : \"\";\n let base = segments.filter(Boolean).join(sep);\n const startingAlphabet = getNamingAlphabet(rules, \"start\");\n const endingAlphabet = getNamingAlphabet(rules, \"end\");\n const padding = startingAlphabet[0];\n if (padding === undefined || endingAlphabet.length === 0) {\n throw new Error(\n `Cannot generate a compliant name for '${context.type}': no supported generation alphabet. Provide an explicit name.`,\n );\n }\n if (base.length > 0 && !startingAlphabet.includes(base[0]!)) {\n base = padding + base;\n }\n // This is a convention budget when TypeSpec supplies no maximum, not a\n // constraint imposed on explicit names.\n const maxLength = rules.maxLength ?? Math.max(24, rules.minLength ?? 0);\n const minLength = rules.minLength ?? 1;\n\n const truncateWithOrdinal = (available: number): string => {\n const ordinalPrefix = ordinalSuffix ? sep : \"\";\n const baseLimit = available - ordinalPrefix.length - ordinalSuffix.length;\n if (baseLimit < 1) {\n throw new Error(\n `Cannot generate a compliant name for '${context.type}': maximum length ${maxLength} cannot accommodate the required suffixes. Provide an explicit name.`,\n );\n }\n return `${base.slice(0, baseLimit)}${ordinalPrefix}${ordinalSuffix}`;\n };\n\n let name: ExpressionOrValue<string>;\n if (rules.scope === \"global\") {\n // Bicep uniqueString() always returns 13 characters. Reserve that suffix\n // and the ordinal before truncating so repeated resources stay unique.\n const uniqueSuffixLength = 13;\n const prefixBudget = maxLength - sep.length - uniqueSuffixLength;\n base = base.padEnd(Math.max(1, minLength - sep.length - uniqueSuffixLength), padding);\n let prefix = truncateWithOrdinal(prefixBudget);\n if (sep && prefix.endsWith(sep)) {\n prefix = prefix.slice(0, -sep.length).padEnd(1, padding);\n }\n prefix = prefix.padEnd(Math.max(1, minLength - sep.length - uniqueSuffixLength), padding);\n name = concat(prefix + sep, uniqueString(subscription().subscriptionId));\n if (!alphabet.includes(\"A\")) name = toLower(name);\n } else {\n base = base.padEnd(minLength, padding);\n let truncated = truncateWithOrdinal(maxLength);\n if (!endingAlphabet.includes(truncated.at(-1)!)) {\n truncated = truncated.slice(0, -1) + endingAlphabet[0]!;\n }\n name = truncated;\n }\n\n const key = JSON.stringify(name, (_key, value: unknown) =>\n isExpression(value) ? unwrapExpression(value) : value,\n );\n const names = this.#names.get(context.type) ?? new Set<string>();\n if (names.has(key)) {\n throw new Error(\n `Cannot generate a distinct name for '${context.type}' within its naming rules. Provide an explicit name.`,\n );\n }\n names.add(key);\n this.#names.set(context.type, names);\n this.#ordinals.set(context.type, ordinal + 1);\n return name;\n }\n}\n\n/**\n * Naming policy that requires every resource to provide an explicit `name`.\n *\n * Throws an error when asked to generate a name. Use this on a stack to\n * disable auto-naming entirely.\n */\nexport const namingRequiredPolicy: NamingPolicy = {\n generateName(context: NamingContext): ExpressionOrValue<string> {\n throw new Error(\n `Resource of type '${context.type}' requires an explicit 'name' ` +\n `(the stack uses 'namingRequiredPolicy').`,\n );\n },\n};\n\n/**\n * Generates and validates a name at the resource construction boundary.\n * Explicit constructor names are validated before declaration registration.\n */\nexport function generateResourceName(\n policy: NamingPolicy,\n type: string,\n namingRules: ResourceNamingRules | undefined,\n nameSegments: number | undefined,\n): ExpressionOrValue<string> {\n const rules = namingRules ?? DEFAULT_NAMING_RULES;\n const generated = policy.generateName({\n type,\n rules,\n nameSegments: nameSegments ?? rules.nameSegments,\n });\n assertValidResourceName(generated, type, rules, {\n generated: true,\n });\n return generated;\n}\n\n/** A candidate character atom and its minimum repetition count. */\ninterface PatternToken {\n readonly characters: RegExp;\n readonly min: number;\n}\n\nconst NAME_ALPHABET = \"abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789-._\";\nconst patternParser = new RegExpParser();\n\n/**\n * Selects generation tokens from a parsed regex AST. Shapes outside the\n * workload-based convention remain usable for literal-name validation.\n */\nfunction getPatternTokens(regex: string): readonly PatternToken[] | undefined {\n const pattern = patternParser.parsePattern(regex);\n if (pattern.alternatives.length !== 1) return undefined;\n const elements = pattern.alternatives[0]!.elements;\n const start = elements[0];\n const end = elements.at(-1);\n if (start?.type !== \"Assertion\" || start.kind !== \"start\") return undefined;\n const anchored = end?.type === \"Assertion\" && end.kind === \"end\";\n const body = elements.slice(1, anchored ? -1 : undefined);\n const [head, tail] = body;\n // Prefer the separator-free sublanguage of repeated hyphen-separated classes.\n if (\n body.length === 2 &&\n head?.type === \"Quantifier\" &&\n head.min === 1 &&\n head.max === Infinity &&\n head.element.type === \"CharacterClass\" &&\n tail?.type === \"Quantifier\" &&\n tail.min === 0 &&\n tail.max === Infinity &&\n (tail.element.type === \"Group\" || tail.element.type === \"CapturingGroup\") &&\n tail.element.alternatives.length === 1\n ) {\n const repeated = tail.element.alternatives[0]!.elements;\n const [separator, part] = repeated;\n if (\n repeated.length === 2 &&\n separator?.type === \"Character\" &&\n separator.value === 45 &&\n part?.type === \"Quantifier\" &&\n part.min === 1 &&\n part.max === Infinity &&\n part.element.raw === head.element.raw\n ) {\n return [\n { characters: new RegExp(`^(?:${head.element.raw})$`), min: 1 },\n ...(anchored ? [] : [{ characters: /^.$/, min: 0 }]),\n ];\n }\n }\n if (!anchored) return undefined;\n const tokens: PatternToken[] = [];\n for (const element of body) {\n if (element.type === \"Quantifier\" && element.max === 0) continue;\n const atom = element.type === \"Quantifier\" ? element.element : element;\n if (\n atom.type !== \"Character\" &&\n atom.type !== \"CharacterClass\" &&\n atom.type !== \"CharacterSet\"\n ) {\n return undefined;\n }\n tokens.push({\n characters: new RegExp(`^(?:${atom.raw})$`),\n min: element.type === \"Quantifier\" ? element.min : 1,\n });\n if (tokens.length > 128) return undefined;\n }\n return tokens;\n}\n\n/**\n * Selects candidate characters for sanitization, padding, and boundary repair.\n * Candidates are not a validity guarantee; the complete name is still checked.\n */\nfunction getNamingAlphabet(rules: ResourceNamingRules, boundary?: \"start\" | \"end\"): string {\n const alphabet =\n rules.pattern !== undefined\n ? NAME_ALPHABET\n : \"abcdefghijklmnopqrstuvwxyz0123456789\" + (rules.separator ?? \"\");\n if (rules.pattern === undefined || rules.pattern.regex === \"\") {\n return alphabet;\n }\n const tokens = getPatternTokens(rules.pattern.regex);\n if (tokens === undefined) return alphabet.replace(/[A-Z._-]/g, \"\");\n const ordered = boundary === \"end\" ? [...tokens].reverse() : tokens;\n const firstRequired = ordered.findIndex((token) => token.min > 0);\n const candidates =\n boundary === undefined || firstRequired < 0 ? ordered : ordered.slice(0, firstRequired + 1);\n return [...alphabet]\n .filter((character) => candidates.some((token) => token.characters.test(character)))\n .join(\"\");\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,15 +1,16 @@
|
|
|
1
|
-
export interface ResourceNamingValidCharacters {
|
|
2
|
-
readonly uppercase: boolean;
|
|
3
|
-
readonly hyphens: boolean;
|
|
4
|
-
readonly underscores: boolean;
|
|
5
|
-
readonly periods: boolean;
|
|
6
|
-
}
|
|
7
1
|
export interface ResourceNamingRules {
|
|
8
2
|
readonly abbreviation: string;
|
|
9
|
-
readonly minLength
|
|
10
|
-
readonly maxLength
|
|
11
|
-
readonly
|
|
12
|
-
|
|
3
|
+
readonly minLength?: number;
|
|
4
|
+
readonly maxLength?: number;
|
|
5
|
+
readonly pattern?: {
|
|
6
|
+
readonly regex: string;
|
|
7
|
+
readonly message?: string;
|
|
8
|
+
};
|
|
9
|
+
/** Default relative name segments in the generated resource hierarchy. */
|
|
10
|
+
readonly nameSegments?: number;
|
|
11
|
+
readonly separator?: string;
|
|
12
|
+
/** Name uniqueness domain, not deployment scope. */
|
|
13
|
+
readonly scope: "global" | "resourceGroup" | "subscription" | "parent";
|
|
13
14
|
}
|
|
14
|
-
export declare const
|
|
15
|
+
export declare const DEFAULT_NAMING_RULES: ResourceNamingRules;
|
|
15
16
|
//# sourceMappingURL=naming-rules.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"naming-rules.d.ts","sourceRoot":"","sources":["../../../src/naming/naming-rules.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,
|
|
1
|
+
{"version":3,"file":"naming-rules.d.ts","sourceRoot":"","sources":["../../../src/naming/naming-rules.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAC;IAC9B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,OAAO,CAAC,EAAE;QACjB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;QACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;KAC3B,CAAC;IACF,0EAA0E;IAC1E,QAAQ,CAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,SAAS,CAAC,EAAE,MAAM,CAAC;IAC5B,oDAAoD;IACpD,QAAQ,CAAC,KAAK,EAAE,QAAQ,GAAG,eAAe,GAAG,cAAc,GAAG,QAAQ,CAAC;CACxE;AAED,eAAO,MAAM,oBAAoB,EAAE,mBAIlC,CAAC"}
|
|
@@ -17,23 +17,16 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
17
17
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
18
|
var naming_rules_exports = {};
|
|
19
19
|
__export(naming_rules_exports, {
|
|
20
|
-
|
|
20
|
+
DEFAULT_NAMING_RULES: () => DEFAULT_NAMING_RULES
|
|
21
21
|
});
|
|
22
22
|
module.exports = __toCommonJS(naming_rules_exports);
|
|
23
|
-
const
|
|
23
|
+
const DEFAULT_NAMING_RULES = {
|
|
24
24
|
abbreviation: "",
|
|
25
|
-
|
|
26
|
-
maxLength: 24,
|
|
27
|
-
validCharacters: {
|
|
28
|
-
uppercase: false,
|
|
29
|
-
hyphens: false,
|
|
30
|
-
underscores: false,
|
|
31
|
-
periods: false
|
|
32
|
-
},
|
|
25
|
+
separator: "",
|
|
33
26
|
scope: "global"
|
|
34
27
|
};
|
|
35
28
|
// Annotate the CommonJS export names for ESM import in node:
|
|
36
29
|
0 && (module.exports = {
|
|
37
|
-
|
|
30
|
+
DEFAULT_NAMING_RULES
|
|
38
31
|
});
|
|
39
32
|
//# sourceMappingURL=naming-rules.js.map
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../src/naming/naming-rules.ts"],
|
|
4
|
-
"sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport interface
|
|
5
|
-
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBO,MAAM,
|
|
4
|
+
"sourcesContent": ["// Copyright (c) Microsoft Corporation.\n// Licensed under the MIT License.\n\nexport interface ResourceNamingRules {\n readonly abbreviation: string;\n readonly minLength?: number;\n readonly maxLength?: number;\n readonly pattern?: {\n readonly regex: string;\n readonly message?: string;\n };\n /** Default relative name segments in the generated resource hierarchy. */\n readonly nameSegments?: number;\n readonly separator?: string;\n /** Name uniqueness domain, not deployment scope. */\n readonly scope: \"global\" | \"resourceGroup\" | \"subscription\" | \"parent\";\n}\n\nexport const DEFAULT_NAMING_RULES: ResourceNamingRules = {\n abbreviation: \"\",\n separator: \"\",\n scope: \"global\",\n};\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAkBO,MAAM,uBAA4C;AAAA,EACvD,cAAc;AAAA,EACd,WAAW;AAAA,EACX,OAAO;AACT;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
|
-
* ARM
|
|
2
|
+
* Client/ARM object conversion.
|
|
3
3
|
*
|
|
4
|
-
*
|
|
4
|
+
* convertToArmObject maps JS property names to ARM paths, restores flattened
|
|
5
5
|
* nesting, and encodes terminal values using the supplied model shape.
|
|
6
|
-
*
|
|
6
|
+
* convertFromArmObject performs the inverse conversion for deserialization.
|
|
7
7
|
* Both follow nested model, array, and record shapes and preserve unknown
|
|
8
|
-
* keys. Property-access expression lowering lives in expression.
|
|
8
|
+
* keys. Property-access expression lowering lives in the AST expression builder.
|
|
9
9
|
*/
|
|
10
|
-
import { type ModelShape } from "
|
|
10
|
+
import { type ModelShape } from "../shape/shape.js";
|
|
11
11
|
/**
|
|
12
|
-
* Recursively
|
|
12
|
+
* Recursively convert a client object into its ARM wire shape. Keys
|
|
13
13
|
* not present in `shape.byJsName` pass through unchanged. Multi-
|
|
14
14
|
* segment ARM paths (from `@flattenProperty`) re-nest objects; nested
|
|
15
15
|
* models, arrays-of-models and records-of-models recurse via
|
|
@@ -19,9 +19,9 @@ import { type ModelShape } from "../../shape/shape.js";
|
|
|
19
19
|
* when both sides are compatible objects; non-object / object collisions
|
|
20
20
|
* throw.
|
|
21
21
|
*/
|
|
22
|
-
export declare function
|
|
22
|
+
export declare function convertToArmObject(state: Record<string, unknown>, shape: ModelShape, visited?: WeakSet<object>): Record<string, unknown>;
|
|
23
23
|
/**
|
|
24
|
-
* Inverse of `
|
|
24
|
+
* Inverse of `convertToArmObject`: walks an ARM object and maps
|
|
25
25
|
* values at each property entry's `armPath` back onto the flat
|
|
26
26
|
* `jsName` key. Recurses into nested model / array / record values via
|
|
27
27
|
* `target`. Empty ARM paths fall back to the JS property name.
|
|
@@ -35,7 +35,7 @@ export declare function lowerState(state: Record<string, unknown>, shape: ModelS
|
|
|
35
35
|
*
|
|
36
36
|
* Keys present in the state but not consumed by any property entry
|
|
37
37
|
* pass through unchanged (preserving the "unknown key" escape hatch
|
|
38
|
-
* documented in `
|
|
38
|
+
* documented in `convertToArmObject`).
|
|
39
39
|
*/
|
|
40
|
-
export declare function
|
|
41
|
-
//# sourceMappingURL=
|
|
40
|
+
export declare function convertFromArmObject(state: Record<string, unknown>, shape: ModelShape, visited?: WeakSet<object>): Record<string, unknown>;
|
|
41
|
+
//# sourceMappingURL=arm-object-conversion.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arm-object-conversion.d.ts","sourceRoot":"","sources":["../../../src/serialization/arm-object-conversion.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AAEH,OAAO,EAEL,KAAK,UAAU,EAGhB,MAAM,mBAAmB,CAAC;AAwB3B;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE,OAAO,CAAC,MAAM,CAAiB,GACvC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8BzB;AAmJD;;;;;;;;;;;;;;;;GAgBG;AACH,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9B,KAAK,EAAE,UAAU,EACjB,OAAO,GAAE,OAAO,CAAC,MAAM,CAAiB,GACvC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CA8CzB"}
|
|
@@ -15,15 +15,15 @@ var __copyProps = (to, from, except, desc) => {
|
|
|
15
15
|
return to;
|
|
16
16
|
};
|
|
17
17
|
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
18
|
-
var
|
|
19
|
-
__export(
|
|
20
|
-
|
|
21
|
-
|
|
18
|
+
var arm_object_conversion_exports = {};
|
|
19
|
+
__export(arm_object_conversion_exports, {
|
|
20
|
+
convertFromArmObject: () => convertFromArmObject,
|
|
21
|
+
convertToArmObject: () => convertToArmObject
|
|
22
22
|
});
|
|
23
|
-
module.exports = __toCommonJS(
|
|
24
|
-
var import_shape = require("
|
|
25
|
-
var import_expressions = require("
|
|
26
|
-
var import_ast_nodes = require("
|
|
23
|
+
module.exports = __toCommonJS(arm_object_conversion_exports);
|
|
24
|
+
var import_shape = require("../shape/shape.js");
|
|
25
|
+
var import_expressions = require("../expression/expressions.js");
|
|
26
|
+
var import_ast_nodes = require("../expression/ast-nodes.js");
|
|
27
27
|
var import_encoding = require("./encoding.js");
|
|
28
28
|
const MISSING = /* @__PURE__ */ Symbol("missing");
|
|
29
29
|
function assertNeverValueShape(shape) {
|
|
@@ -35,7 +35,7 @@ function isPlainObject(value) {
|
|
|
35
35
|
const proto = Object.getPrototypeOf(value);
|
|
36
36
|
return proto === Object.prototype || proto === null;
|
|
37
37
|
}
|
|
38
|
-
function
|
|
38
|
+
function convertToArmObject(state, shape, visited = /* @__PURE__ */ new WeakSet()) {
|
|
39
39
|
if (visited.has(state)) {
|
|
40
40
|
throw new Error("Cycle detected while lowering ARM state.");
|
|
41
41
|
}
|
|
@@ -73,7 +73,7 @@ function lowerValue(value, shape, visited, path) {
|
|
|
73
73
|
switch (shape.kind) {
|
|
74
74
|
case "deferred":
|
|
75
75
|
if (!isPlainObject(value)) return value;
|
|
76
|
-
return
|
|
76
|
+
return convertToArmObject(value, shape.value(), visited);
|
|
77
77
|
case "array":
|
|
78
78
|
if (!Array.isArray(value)) return value;
|
|
79
79
|
return value.map(
|
|
@@ -166,7 +166,7 @@ function defineOwn(target, key, value) {
|
|
|
166
166
|
writable: true
|
|
167
167
|
});
|
|
168
168
|
}
|
|
169
|
-
function
|
|
169
|
+
function convertFromArmObject(state, shape, visited = /* @__PURE__ */ new WeakSet()) {
|
|
170
170
|
if (visited.has(state)) {
|
|
171
171
|
throw new Error("Cycle detected while raising ARM state.");
|
|
172
172
|
}
|
|
@@ -211,7 +211,7 @@ function raiseValue(value, shape, visited, path) {
|
|
|
211
211
|
switch (shape.kind) {
|
|
212
212
|
case "deferred":
|
|
213
213
|
if (!isPlainObject(value)) return value;
|
|
214
|
-
return
|
|
214
|
+
return convertFromArmObject(value, shape.value(), visited);
|
|
215
215
|
case "array":
|
|
216
216
|
if (!Array.isArray(value)) return value;
|
|
217
217
|
return value.map(
|
|
@@ -266,7 +266,7 @@ function structuredCloneLike(value, seen) {
|
|
|
266
266
|
}
|
|
267
267
|
// Annotate the CommonJS export names for ESM import in node:
|
|
268
268
|
0 && (module.exports = {
|
|
269
|
-
|
|
270
|
-
|
|
269
|
+
convertFromArmObject,
|
|
270
|
+
convertToArmObject
|
|
271
271
|
});
|
|
272
|
-
//# sourceMappingURL=
|
|
272
|
+
//# sourceMappingURL=arm-object-conversion.js.map
|