Hide CustomerManagedKeyEncryption as internal; add V4 Foundations replacement types#4627
Hide CustomerManagedKeyEncryption as internal; add V4 Foundations replacement types#4627markcowl wants to merge 2 commits into
Conversation
…ns replacements Mark CustomerManagedKeyEncryption, KeyEncryptionKeyIdentity, and KeyEncryptionKeyIdentityType as internal in the CommonTypes namespace, preventing direct use in service specifications. Add CustomerManagedKeyEncryptionV4, KeyEncryptionKeyIdentityV4, and KeyEncryptionKeyIdentityTypeV4 in Azure.ResourceManager.Foundations as public replacement types. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
|
All changed packages have been documented.
Show changes
|
commit: |
⚡ Benchmark Results
Full details – comparing
|
| Metric | Baseline | Current | Change |
|---|---|---|---|
| total | 🔴 756.7ms | 🔴 788.6ms | +4.2% |
| loader | 🟡 249.7ms | 🟡 243.6ms | -2.4% |
| resolver | 🟢 19.0ms | 🟢 17.5ms | -8.3% 🟢 |
| checker | 🟡 209.0ms | 🟡 202.3ms | -3.2% |
| validation | 🟢 42.8ms | 🟢 41.6ms | -2.8% |
| ↳ validation/@azure-tools/typespec-azure-core | 🟢 7.2ms | 🟢 6.9ms | -4.8% |
| ↳ validation/@typespec/http | 🟢 6.1ms | 🟢 5.9ms | -3.6% |
| ↳ validation/@typespec/rest | 🟢 0.6ms | 🟢 0.5ms | -15.2% |
| ↳ validation/@typespec/versioning | 🔴 27.0ms | 🔴 26.6ms | -1.4% |
| ↳ validation/compiler | 🟢 1.4ms | 🟢 1.3ms | -10.5% |
| linter | 🟢 190.1ms | 🟡 241.1ms | +26.8% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/auth-required | 🟢 0.0ms | 🟢 0.0ms | -2.2% |
| ↳ linter/@azure-tools/typespec-azure-core/bad-record-type | 🟢 0.2ms | 🟢 0.4ms | +92.2% |
| ↳ linter/@azure-tools/typespec-azure-core/byos | 🟢 7.7ms | 🟢 10.0ms | +29.3% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/casing-style | 🟢 0.7ms | 🟢 0.8ms | +17.8% |
| ↳ linter/@azure-tools/typespec-azure-core/composition-over-inheritance | 🟢 0.1ms | 🟢 0.1ms | -5.2% |
| ↳ linter/@azure-tools/typespec-azure-core/documentation-required | 🟢 0.9ms | 🟢 1.0ms | +11.0% |
| ↳ linter/@azure-tools/typespec-azure-core/friendly-name | 🟢 0.6ms | 🟢 0.9ms | +44.0% |
| ↳ linter/@azure-tools/typespec-azure-core/key-visibility-required | 🟢 0.2ms | 🟢 0.2ms | -4.0% |
| ↳ linter/@azure-tools/typespec-azure-core/known-encoding | 🟢 0.3ms | 🟢 0.3ms | -3.4% |
| ↳ linter/@azure-tools/typespec-azure-core/long-running-polling-operation-required | 🟢 0.3ms | 🟢 0.3ms | -3.9% |
| ↳ linter/@azure-tools/typespec-azure-core/no-case-mismatch | 🟢 0.3ms | 🟢 0.3ms | +2.1% |
| ↳ linter/@azure-tools/typespec-azure-core/no-closed-literal-union | 🟢 0.3ms | 🟢 0.3ms | -6.1% |
| ↳ linter/@azure-tools/typespec-azure-core/no-enum | 🟢 0.0ms | 🟢 0.0ms | +3.3% |
| ↳ linter/@azure-tools/typespec-azure-core/no-error-status-codes | 🟢 0.1ms | 🟢 0.1ms | +1.9% |
| ↳ linter/@azure-tools/typespec-azure-core/no-explicit-routes-resource-ops | 🟢 0.1ms | 🟢 0.1ms | +1.8% |
| ↳ linter/@azure-tools/typespec-azure-core/no-format | 🟢 1.0ms | 🟢 0.5ms | -46.7% |
| ↳ linter/@azure-tools/typespec-azure-core/no-generic-numeric | 🟢 0.4ms | 🟢 0.4ms | -11.0% |
| ↳ linter/@azure-tools/typespec-azure-core/no-header-explode | 🔴 29.4ms | 🔴 33.6ms | +14.4% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-legacy-usage | 🟢 1.1ms | 🟢 1.7ms | +47.8% |
| ↳ linter/@azure-tools/typespec-azure-core/no-multiple-discriminator | 🟢 0.1ms | 🟢 0.1ms | -7.1% |
| ↳ linter/@azure-tools/typespec-azure-core/no-nullable | 🟢 0.3ms | 🟢 0.4ms | +45.8% |
| ↳ linter/@azure-tools/typespec-azure-core/no-offsetdatetime | 🟢 1.4ms | 🟢 1.5ms | +9.5% |
| ↳ linter/@azure-tools/typespec-azure-core/no-openapi | 🟢 2.3ms | 🟢 2.3ms | -0.0% |
| ↳ linter/@azure-tools/typespec-azure-core/no-private-usage | 🟢 1.9ms | 🟢 2.3ms | +18.1% |
| ↳ linter/@azure-tools/typespec-azure-core/no-query-explode | 🔴 35.3ms | 🔴 34.5ms | -2.2% |
| ↳ linter/@azure-tools/typespec-azure-core/no-response-body | 🔴 37.0ms | 🔴 44.5ms | +20.5% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-rest-library-interfaces | 🟢 0.0ms | 🟢 0.0ms | -9.8% |
| ↳ linter/@azure-tools/typespec-azure-core/no-route-parameter-name-mismatch | 🟢 7.0ms | 🟢 9.0ms | +28.2% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/no-rpc-path-params | 🟢 0.2ms | 🟢 0.2ms | -3.5% |
| ↳ linter/@azure-tools/typespec-azure-core/no-string-discriminator | 🟢 0.0ms | 🟢 0.0ms | -0.7% |
| ↳ linter/@azure-tools/typespec-azure-core/no-unknown | 🟢 0.2ms | 🟢 0.2ms | -3.4% |
| ↳ linter/@azure-tools/typespec-azure-core/no-unnamed-union | 🟢 0.4ms | 🟢 0.5ms | +32.4% |
| ↳ linter/@azure-tools/typespec-azure-core/operation-missing-api-version | 🟢 0.2ms | 🟢 0.2ms | -9.7% |
| ↳ linter/@azure-tools/typespec-azure-core/request-body-problem | 🟢 0.3ms | 🟢 0.3ms | -8.7% |
| ↳ linter/@azure-tools/typespec-azure-core/require-versioned | 🟢 0.0ms | 🟢 0.0ms | -14.6% |
| ↳ linter/@azure-tools/typespec-azure-core/response-schema-problem | 🔴 32.5ms | 🔴 38.7ms | +19.2% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/rpc-operation-request-body | 🟢 0.3ms | 🟢 0.9ms | +149.2% |
| ↳ linter/@azure-tools/typespec-azure-core/spread-discriminated-model | 🟢 0.3ms | 🟢 0.3ms | -7.0% |
| ↳ linter/@azure-tools/typespec-azure-core/use-standard-names | 🟢 7.9ms | 🟡 12.6ms | +59.7% 🔴 |
| ↳ linter/@azure-tools/typespec-azure-core/use-standard-operations | 🟢 0.1ms | 🟢 0.1ms | +2.5% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-common-types-version | 🟢 4.3ms | 🟢 4.1ms | -6.2% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-custom-resource-no-key | 🟢 0.1ms | 🟢 0.1ms | -7.2% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-custom-resource-usage-discourage | 🟢 0.1ms | 🟢 0.1ms | -1.4% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-delete-operation-response-codes | 🟢 5.5ms | 🟢 5.5ms | +0.1% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-no-path-casing-conflicts | 🟢 4.6ms | 🟢 4.4ms | -4.2% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-no-record | 🟢 0.4ms | 🟢 0.4ms | -5.0% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes | 🟢 0.5ms | 🟢 0.5ms | +4.2% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-put-operation-response-codes | 🟢 0.0ms | 🟢 0.0ms | -9.6% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-action-no-segment | 🟢 0.3ms | 🟢 0.2ms | -8.6% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-duplicate-property | 🟢 0.1ms | 🟢 0.1ms | -8.4% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-interface-requires-decorator | 🟢 0.0ms | 🟢 0.0ms | -25.0% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-action-verb | 🟢 0.1ms | 🟢 0.1ms | -11.6% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-envelope-property | 🟢 0.1ms | 🟢 0.1ms | +1.5% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-version-format | 🟢 0.0ms | 🟢 0.0ms | +0.9% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-key-invalid-chars | 🟢 0.3ms | 🟢 0.2ms | -5.8% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-name-pattern | 🟢 0.0ms | 🟢 0.0ms | -13.5% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-operation | 🟢 0.2ms | 🟢 0.2ms | -2.2% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-operation-response | 🟢 4.8ms | 🟢 4.8ms | +0.1% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-patch | 🟢 0.3ms | 🟢 0.3ms | -8.4% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-path-segment-invalid-chars | 🟢 0.2ms | 🟢 0.2ms | -4.5% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/arm-resource-provisioning-state | 🟢 0.1ms | 🟢 0.1ms | -3.3% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/beyond-nesting-levels | 🟢 0.1ms | 🟢 0.1ms | -6.4% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/empty-updateable-properties | 🟢 0.2ms | 🟢 0.2ms | -4.7% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/improper-subscription-list-operation | 🟢 0.0ms | 🟢 0.0ms | -4.9% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/lro-location-header | 🟡 14.9ms | 🟡 15.5ms | +4.1% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/missing-operations-endpoint | 🟢 0.0ms | 🟢 0.0ms | +3.5% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/missing-x-ms-identifiers | 🟢 0.3ms | 🟢 0.3ms | -13.0% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/no-empty-model | 🟢 0.1ms | 🟢 0.1ms | -19.1% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/no-override-props | 🟢 0.1ms | 🟢 0.1ms | +5.6% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/no-resource-delete-operation | 🟢 0.2ms | 🟢 0.2ms | -3.7% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/no-response-body | 🔴 22.9ms | 🔴 22.4ms | -2.2% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/patch-envelope | 🟢 0.1ms | 🟢 0.2ms | +3.9% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/resource-name | 🟢 0.2ms | 🟢 0.1ms | -9.2% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/secret-prop | 🟢 2.4ms | 🟢 2.0ms | -19.9% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/unsupported-type | 🟢 0.4ms | 🟢 0.4ms | -0.8% |
| ↳ linter/@azure-tools/typespec-azure-resource-manager/version-progression | 🟢 0.0ms | 🟢 0.0ms | -4.9% |
| ↳ linter/@azure-tools/typespec-client-generator-core/property-name-conflict | 🟢 1.2ms | 🟢 1.1ms | -4.5% |
| ↳ linter/@azure-tools/typespec-client-generator-core/require-client-suffix | 🟢 0.2ms | 🟢 0.2ms | -10.6% |
| emit | 🔴 6.14s | 🔴 5.90s | -3.9% |
| ↳ emit/@azure-tools/typespec-autorest | 🟡 219.6ms | 🟢 169.4ms | -22.8% 🟢 |
| ↳ emit/@azure-tools/typespec-python | 🔴 4.53s | 🔴 4.45s | -1.9% |
| ↳ emit/@typespec/http-client-js | 🔴 1.18s | 🔴 1.13s | -4.5% |
| ↳ emit/@typespec/openapi3 | 🟢 158.7ms | 🟢 150.4ms | -5.2% 🟢 |
| ↳ emit/@typespec/openapi3/compute | 🟢 140.3ms | 🟢 133.2ms | -5.1% 🟢 |
| ↳ emit/@typespec/openapi3/write | 🟢 18.6ms | 🟢 17.3ms | -7.1% 🟢 |
Averaged across 3 specs (azure-arm-resource-manager, azure-core-dataplane, azure-full).
Threshold: changes > ±5% are highlighted.
🟢 Fast · 🟡 Moderate (stages >200ms, rules >10ms) · 🔴 Slow (stages >400ms, rules >20ms)
|
You can try these changes here
|
Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Summary
Hides the \CustomerManagedKeyEncryption, \KeyEncryptionKeyIdentity, and \KeyEncryptionKeyIdentityType\ common types by marking them \internal\ in the TypeSpec language, preventing direct use in service specifications outside the \Azure.ResourceManager\ namespace.
Adds public replacement types in \Azure.ResourceManager.Foundations:
The \Encryption\ wrapper type remains public and continues to work as before.
Usage
\\ sp
@armProviderNamespace
@service
namespace Microsoft.Contoso;
model EncryptionConfig {
customerManagedKey?: Azure.ResourceManager.Foundations.CustomerManagedKeyEncryptionV4;
}
\\
Testing
Related to #4532 (alternative approach using \internal\ keyword instead of decorator + linter rule)