@azure-tools/typespec-azure-resource-manager 0.41.0-dev.1 → 0.41.0-dev.11
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/README.md +5 -1
- package/dist/src/linter.d.ts.map +1 -1
- package/dist/src/linter.js +8 -0
- package/dist/src/linter.js.map +1 -1
- package/dist/src/rules/arm-delete-response-codes.d.ts.map +1 -1
- package/dist/src/rules/arm-delete-response-codes.js +17 -17
- package/dist/src/rules/arm-delete-response-codes.js.map +1 -1
- package/dist/src/rules/arm-post-response-codes.d.ts +8 -0
- package/dist/src/rules/arm-post-response-codes.d.ts.map +1 -0
- package/dist/src/rules/arm-post-response-codes.js +97 -0
- package/dist/src/rules/arm-post-response-codes.js.map +1 -0
- package/dist/src/rules/arm-put-response-codes.d.ts +7 -0
- package/dist/src/rules/arm-put-response-codes.d.ts.map +1 -0
- package/dist/src/rules/arm-put-response-codes.js +46 -0
- package/dist/src/rules/arm-put-response-codes.js.map +1 -0
- package/dist/src/rules/arm-resource-name-pattern.d.ts +7 -0
- package/dist/src/rules/arm-resource-name-pattern.d.ts.map +1 -0
- package/dist/src/rules/arm-resource-name-pattern.js +64 -0
- package/dist/src/rules/arm-resource-name-pattern.js.map +1 -0
- package/dist/src/rules/lro-location-header.d.ts +7 -0
- package/dist/src/rules/lro-location-header.d.ts.map +1 -0
- package/dist/src/rules/lro-location-header.js +47 -0
- package/dist/src/rules/lro-location-header.js.map +1 -0
- package/lib/arm.tsp +1 -1
- package/lib/customer-managed-keys.tsp +2 -2
- package/lib/models.tsp +5 -32
- package/lib/operations.tsp +30 -26
- package/lib/private-links.tsp +1 -1
- package/lib/responses.tsp +14 -5
- package/package.json +6 -6
package/README.md
CHANGED
|
@@ -24,7 +24,7 @@ linter:
|
|
|
24
24
|
|
|
25
25
|
Available ruleSets:
|
|
26
26
|
|
|
27
|
-
-
|
|
27
|
+
- `@azure-tools/typespec-azure-resource-manager/all`
|
|
28
28
|
|
|
29
29
|
### Rules
|
|
30
30
|
|
|
@@ -33,11 +33,14 @@ Available ruleSets:
|
|
|
33
33
|
| [`@azure-tools/typespec-azure-resource-manager/arm-no-record`](https://azure.github.io/typespec-azure/docs/libraries/azure-resource-manager/rules/no-record) | Don't use Record types for ARM resources. |
|
|
34
34
|
| `@azure-tools/typespec-azure-resource-manager/arm-common-types-version` | Specify the ARM common-types version using @armCommonTypesVersion. |
|
|
35
35
|
| [`@azure-tools/typespec-azure-resource-manager/arm-delete-operation-response-codes`](https://azure.github.io/typespec-azure/docs/libraries/azure-resource-manager/rules/delete-operation-response-codes) | Ensure delete operations have the appropriate status codes. |
|
|
36
|
+
| [`@azure-tools/typespec-azure-resource-manager/arm-put-operation-response-codes`](https://azure.github.io/typespec-azure/docs/libraries/azure-resource-manager/rules/put-operation-response-codes) | Ensure put operations have the appropriate status codes. |
|
|
37
|
+
| [`@azure-tools/typespec-azure-resource-manager/arm-post-operation-response-codes`](https://azure.github.io/typespec-azure/docs/libraries/azure-resource-manager/rules/post-operation-response-codes) | Ensure post operations have the appropriate status codes. |
|
|
36
38
|
| `@azure-tools/typespec-azure-resource-manager/arm-resource-action-no-segment` | `@armResourceAction` should not be used with `@segment`. |
|
|
37
39
|
| `@azure-tools/typespec-azure-resource-manager/arm-resource-duplicate-property` | Warn about duplicate properties in resources. |
|
|
38
40
|
| `@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-envelope-property` | Check for invalid resource envelope properties. |
|
|
39
41
|
| `@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-version-format` | Check for valid versions. |
|
|
40
42
|
| `@azure-tools/typespec-azure-resource-manager/arm-resource-key-invalid-chars` | Arm resource key must contain only alphanumeric characters. |
|
|
43
|
+
| [`@azure-tools/typespec-azure-resource-manager/arm-resource-name-pattern`](https://azure.github.io/typespec-azure/docs/libraries/azure-resource-manager/rules/resource-name-pattern) | The resource name parameter should be defined with a 'pattern' restriction. |
|
|
41
44
|
| `@azure-tools/typespec-azure-resource-manager/arm-resource-operation-response` | [RPC 008]: PUT, GET, PATCH & LIST must return the same resource schema. |
|
|
42
45
|
| `@azure-tools/typespec-azure-resource-manager/arm-resource-path-segment-invalid-chars` | Arm resource name must contain only alphanumeric characters. |
|
|
43
46
|
| `@azure-tools/typespec-azure-resource-manager/arm-resource-provisioning-state` | Check for properly configured provisioningState property. |
|
|
@@ -48,6 +51,7 @@ Available ruleSets:
|
|
|
48
51
|
| `@azure-tools/typespec-azure-resource-manager/arm-resource-interface-requires-decorator` | Each resource interface must have an @armResourceOperations decorator. |
|
|
49
52
|
| `@azure-tools/typespec-azure-resource-manager/arm-resource-invalid-action-verb` | Actions must be HTTP Post operations. |
|
|
50
53
|
| `@azure-tools/typespec-azure-resource-manager/improper-subscription-list-operation` | Tenant and Extension resources should not define a list by subscription operation. |
|
|
54
|
+
| [`@azure-tools/typespec-azure-resource-manager/lro-location-header`](https://azure.github.io/typespec-azure/docs/libraries/azure-resource-manager/rules/lro-location-header) | A 202 response should include a Location response header. |
|
|
51
55
|
| [`@azure-tools/typespec-azure-resource-manager/missing-x-ms-identifiers`](https://azure.github.io/typespec-azure/docs/libraries/azure-resource-manager/rules/missing-x-ms-identifiers) | Azure services should not use enums. |
|
|
52
56
|
| `@azure-tools/typespec-azure-resource-manager/no-response-body` | The body of 202 response should be empty. |
|
|
53
57
|
| `@azure-tools/typespec-azure-resource-manager/missing-operations-endpoint` | Check for missing Operations interface. |
|
package/dist/src/linter.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../../src/linter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../../src/linter.ts"],"names":[],"mappings":"AAqEA,eAAO,MAAM,OAAO,+CAmBlB,CAAC"}
|
package/dist/src/linter.js
CHANGED
|
@@ -2,6 +2,8 @@ import { defineLinter } from "@typespec/compiler";
|
|
|
2
2
|
import { armCommonTypesVersionRule } from "./rules/arm-common-types-version.js";
|
|
3
3
|
import { armDeleteResponseCodesRule } from "./rules/arm-delete-response-codes.js";
|
|
4
4
|
import { armNoRecordRule } from "./rules/arm-no-record.js";
|
|
5
|
+
import { armPostResponseCodesRule } from "./rules/arm-post-response-codes.js";
|
|
6
|
+
import { armPutResponseCodesRule } from "./rules/arm-put-response-codes.js";
|
|
5
7
|
import { armResourceActionNoSegmentRule } from "./rules/arm-resource-action-no-segment.js";
|
|
6
8
|
import { armResourceDuplicatePropertiesRule } from "./rules/arm-resource-duplicate-property.js";
|
|
7
9
|
import { interfacesRule } from "./rules/arm-resource-interfaces.js";
|
|
@@ -9,6 +11,7 @@ import { invalidActionVerbRule } from "./rules/arm-resource-invalid-action-verb.
|
|
|
9
11
|
import { armResourceEnvelopeProperties } from "./rules/arm-resource-invalid-envelope-property.js";
|
|
10
12
|
import { armResourceInvalidVersionFormatRule } from "./rules/arm-resource-invalid-version-format.js";
|
|
11
13
|
import { armResourceKeyInvalidCharsRule } from "./rules/arm-resource-key-invalid-chars.js";
|
|
14
|
+
import { armResourceNamePatternRule } from "./rules/arm-resource-name-pattern.js";
|
|
12
15
|
import { armResourceOperationsRule } from "./rules/arm-resource-operation-response.js";
|
|
13
16
|
import { patchOperationsRule } from "./rules/arm-resource-patch.js";
|
|
14
17
|
import { armResourcePathInvalidCharsRule } from "./rules/arm-resource-path-invalid-chars.js";
|
|
@@ -18,6 +21,7 @@ import { coreOperationsRule } from "./rules/core-operations.js";
|
|
|
18
21
|
import { deleteOperationMissingRule } from "./rules/delete-operation.js";
|
|
19
22
|
import { envelopePropertiesRules } from "./rules/envelope-properties.js";
|
|
20
23
|
import { listBySubscriptionRule } from "./rules/list-operation.js";
|
|
24
|
+
import { lroLocationHeaderRule } from "./rules/lro-location-header.js";
|
|
21
25
|
import { missingXmsIdentifiersRule } from "./rules/missing-x-ms-identifiers.js";
|
|
22
26
|
import { noResponseBodyRule } from "./rules/no-response-body.js";
|
|
23
27
|
import { operationsInterfaceMissingRule } from "./rules/operations-interface-missing.js";
|
|
@@ -29,11 +33,14 @@ const rules = [
|
|
|
29
33
|
armNoRecordRule,
|
|
30
34
|
armCommonTypesVersionRule,
|
|
31
35
|
armDeleteResponseCodesRule,
|
|
36
|
+
armPutResponseCodesRule,
|
|
37
|
+
armPostResponseCodesRule,
|
|
32
38
|
armResourceActionNoSegmentRule,
|
|
33
39
|
armResourceDuplicatePropertiesRule,
|
|
34
40
|
armResourceEnvelopeProperties,
|
|
35
41
|
armResourceInvalidVersionFormatRule,
|
|
36
42
|
armResourceKeyInvalidCharsRule,
|
|
43
|
+
armResourceNamePatternRule,
|
|
37
44
|
armResourceOperationsRule,
|
|
38
45
|
armResourcePathInvalidCharsRule,
|
|
39
46
|
armResourceProvisioningStateRule,
|
|
@@ -44,6 +51,7 @@ const rules = [
|
|
|
44
51
|
interfacesRule,
|
|
45
52
|
invalidActionVerbRule,
|
|
46
53
|
listBySubscriptionRule,
|
|
54
|
+
lroLocationHeaderRule,
|
|
47
55
|
missingXmsIdentifiersRule,
|
|
48
56
|
noResponseBodyRule,
|
|
49
57
|
operationsInterfaceMissingRule,
|
package/dist/src/linter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linter.js","sourceRoot":"","sources":["../../src/linter.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"linter.js","sourceRoot":"","sources":["../../src/linter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arm-delete-response-codes.d.ts","sourceRoot":"","sources":["../../../src/rules/arm-delete-response-codes.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"arm-delete-response-codes.d.ts","sourceRoot":"","sources":["../../../src/rules/arm-delete-response-codes.ts"],"names":[],"mappings":"AAKA;;GAEG;AACH,eAAO,MAAM,0BAA0B;;;EAqCrC,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { createRule } from "@typespec/compiler";
|
|
2
2
|
import { getLroMetadata } from "@azure-tools/typespec-azure-core";
|
|
3
|
-
import { getHttpOperation } from "@typespec/http";
|
|
4
3
|
import { getArmResources } from "../resource.js";
|
|
5
4
|
/**
|
|
6
5
|
* Verify that a delete operation only
|
|
@@ -16,22 +15,23 @@ export const armDeleteResponseCodesRule = createRule({
|
|
|
16
15
|
},
|
|
17
16
|
create(context) {
|
|
18
17
|
return {
|
|
19
|
-
|
|
20
|
-
const resources = getArmResources(
|
|
21
|
-
const
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
18
|
+
root: (program) => {
|
|
19
|
+
const resources = getArmResources(program);
|
|
20
|
+
for (const resource of resources) {
|
|
21
|
+
if (resource.operations.lifecycle.delete) {
|
|
22
|
+
const deleteOperation = resource.operations.lifecycle.delete;
|
|
23
|
+
const isAsync = getLroMetadata(context.program, deleteOperation.operation) !== undefined;
|
|
24
|
+
const httpOp = deleteOperation.httpOperation;
|
|
25
|
+
const statusCodes = new Set([...httpOp.responses.map((r) => r.statusCodes.toString())]);
|
|
26
|
+
const expected = new Set(["204", "*"]);
|
|
27
|
+
expected.add(isAsync ? "202" : "200");
|
|
28
|
+
if (statusCodes.size !== expected.size ||
|
|
29
|
+
![...statusCodes].every((v) => expected.has(v))) {
|
|
30
|
+
context.reportDiagnostic({
|
|
31
|
+
target: deleteOperation.operation,
|
|
32
|
+
messageId: isAsync ? "async" : "sync",
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
35
|
}
|
|
36
36
|
}
|
|
37
37
|
},
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"arm-delete-response-codes.js","sourceRoot":"","sources":["../../../src/rules/arm-delete-response-codes.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"arm-delete-response-codes.js","sourceRoot":"","sources":["../../../src/rules/arm-delete-response-codes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAClE,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,UAAU,CAAC;IACnD,IAAI,EAAE,qCAAqC;IAC3C,QAAQ,EAAE,SAAS;IACnB,GAAG,EAAE,oHAAoH;IACzH,WAAW,EAAE,6DAA6D;IAC1E,QAAQ,EAAE;QACR,IAAI,EAAE,sKAAsK;QAC5K,KAAK,EAAE,iLAAiL;KACzL;IACD,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,IAAI,EAAE,CAAC,OAAgB,EAAE,EAAE;gBACzB,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;gBAC3C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;oBACjC,IAAI,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;wBACzC,MAAM,eAAe,GAAG,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM,CAAC;wBAC7D,MAAM,OAAO,GACX,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,eAAe,CAAC,SAAS,CAAC,KAAK,SAAS,CAAC;wBAC3E,MAAM,MAAM,GAAG,eAAe,CAAC,aAAa,CAAC;wBAC7C,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC,CAAC,GAAG,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC;wBACxF,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;wBACvC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;wBAEtC,IACE,WAAW,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;4BAClC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAC/C,CAAC;4BACD,OAAO,CAAC,gBAAgB,CAAC;gCACvB,MAAM,EAAE,eAAe,CAAC,SAAS;gCACjC,SAAS,EAAE,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM;6BACtC,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verify that a post operation has the correct response codes.
|
|
3
|
+
*/
|
|
4
|
+
export declare const armPostResponseCodesRule: import("@typespec/compiler").LinterRuleDefinition<"arm-post-operation-response-codes", {
|
|
5
|
+
readonly sync: "Synchronous post operations must have a 200 or 204 response and a default response. They must not have any other responses.";
|
|
6
|
+
readonly async: "Long-running post operations must have 202 and default responses. They must also have a 200 response if the final response has a schema. They must not have any other responses.";
|
|
7
|
+
}>;
|
|
8
|
+
//# sourceMappingURL=arm-post-response-codes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arm-post-response-codes.d.ts","sourceRoot":"","sources":["../../../src/rules/arm-post-response-codes.ts"],"names":[],"mappings":"AAOA;;GAEG;AACH,eAAO,MAAM,wBAAwB;;;EAkGnC,CAAC"}
|
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { createRule } from "@typespec/compiler";
|
|
2
|
+
import { getLroMetadata } from "@azure-tools/typespec-azure-core";
|
|
3
|
+
import { getArmResources } from "../resource.js";
|
|
4
|
+
/**
|
|
5
|
+
* Verify that a post operation has the correct response codes.
|
|
6
|
+
*/
|
|
7
|
+
export const armPostResponseCodesRule = createRule({
|
|
8
|
+
name: "arm-post-operation-response-codes",
|
|
9
|
+
severity: "warning",
|
|
10
|
+
url: "https://azure.github.io/typespec-azure/docs/libraries/azure-resource-manager/rules/post-operation-response-codes",
|
|
11
|
+
description: "Ensure post operations have the appropriate status codes.",
|
|
12
|
+
messages: {
|
|
13
|
+
sync: `Synchronous post operations must have a 200 or 204 response and a default response. They must not have any other responses.`,
|
|
14
|
+
async: `Long-running post operations must have 202 and default responses. They must also have a 200 response if the final response has a schema. They must not have any other responses.`,
|
|
15
|
+
},
|
|
16
|
+
create(context) {
|
|
17
|
+
function getResponseBody(response) {
|
|
18
|
+
if (response === undefined)
|
|
19
|
+
return undefined;
|
|
20
|
+
if (response.responses.length > 1) {
|
|
21
|
+
throw new Error("Multiple responses are not supported.");
|
|
22
|
+
}
|
|
23
|
+
if (response.responses[0].body !== undefined) {
|
|
24
|
+
return response.responses[0].body;
|
|
25
|
+
}
|
|
26
|
+
return undefined;
|
|
27
|
+
}
|
|
28
|
+
function validateAsyncPost(op) {
|
|
29
|
+
const statusCodes = new Set([
|
|
30
|
+
...op.httpOperation.responses.map((r) => r.statusCodes.toString()),
|
|
31
|
+
]);
|
|
32
|
+
// validate that there are 202 and * status codes, and maybe 200
|
|
33
|
+
const expected = statusCodes.size === 2 ? new Set(["202", "*"]) : new Set(["202", "200", "*"]);
|
|
34
|
+
if (statusCodes.size !== expected.size || ![...statusCodes].every((v) => expected.has(v))) {
|
|
35
|
+
context.reportDiagnostic({
|
|
36
|
+
target: op.operation,
|
|
37
|
+
messageId: "async",
|
|
38
|
+
});
|
|
39
|
+
}
|
|
40
|
+
// validate that 202 does not have a schema
|
|
41
|
+
const response202 = op.httpOperation.responses.find((r) => r.statusCodes === 202);
|
|
42
|
+
const body202 = getResponseBody(response202);
|
|
43
|
+
if (body202 !== undefined) {
|
|
44
|
+
context.reportDiagnostic({
|
|
45
|
+
target: op.operation.returnType,
|
|
46
|
+
messageId: "async",
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
// validate that a 200 response does have a schema
|
|
50
|
+
const response200 = op.httpOperation.responses.find((r) => r.statusCodes === 200);
|
|
51
|
+
const body200 = getResponseBody(response200);
|
|
52
|
+
if (response200 && body200 === undefined) {
|
|
53
|
+
context.reportDiagnostic({
|
|
54
|
+
target: op.operation.returnType,
|
|
55
|
+
messageId: "async",
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
function validateSyncPost(op) {
|
|
60
|
+
const allowed = [new Set(["200", "*"]), new Set(["204", "*"])];
|
|
61
|
+
const statusCodes = new Set([
|
|
62
|
+
...op.httpOperation.responses.map((r) => r.statusCodes.toString()),
|
|
63
|
+
]);
|
|
64
|
+
if (!allowed.some((expected) => statusCodes.size === expected.size && [...statusCodes].every((v) => expected.has(v)))) {
|
|
65
|
+
context.reportDiagnostic({
|
|
66
|
+
target: op.operation,
|
|
67
|
+
messageId: "sync",
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return {
|
|
72
|
+
root: (program) => {
|
|
73
|
+
const resources = getArmResources(program);
|
|
74
|
+
for (const resource of resources) {
|
|
75
|
+
const operations = [
|
|
76
|
+
resource.operations.lifecycle.createOrUpdate,
|
|
77
|
+
resource.operations.lifecycle.update,
|
|
78
|
+
...Object.values(resource.operations.actions),
|
|
79
|
+
];
|
|
80
|
+
for (const op of operations) {
|
|
81
|
+
if (op === undefined || op.httpOperation.verb !== "post") {
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
const isAsync = getLroMetadata(context.program, op.operation) !== undefined;
|
|
85
|
+
if (isAsync) {
|
|
86
|
+
validateAsyncPost(op);
|
|
87
|
+
}
|
|
88
|
+
else {
|
|
89
|
+
validateSyncPost(op);
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
},
|
|
94
|
+
};
|
|
95
|
+
},
|
|
96
|
+
});
|
|
97
|
+
//# sourceMappingURL=arm-post-response-codes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arm-post-response-codes.js","sourceRoot":"","sources":["../../../src/rules/arm-post-response-codes.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verify that a put operation has the correct response codes.
|
|
3
|
+
*/
|
|
4
|
+
export declare const armPutResponseCodesRule: import("@typespec/compiler").LinterRuleDefinition<"arm-put-operation-response-codes", {
|
|
5
|
+
readonly default: "Put operations must have 200, 201 and default responses. They must not have any other responses.";
|
|
6
|
+
}>;
|
|
7
|
+
//# sourceMappingURL=arm-put-response-codes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arm-put-response-codes.d.ts","sourceRoot":"","sources":["../../../src/rules/arm-put-response-codes.ts"],"names":[],"mappings":"AAIA;;GAEG;AACH,eAAO,MAAM,uBAAuB;;EAyClC,CAAC"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
import { createRule } from "@typespec/compiler";
|
|
2
|
+
import { getArmResources } from "../resource.js";
|
|
3
|
+
/**
|
|
4
|
+
* Verify that a put operation has the correct response codes.
|
|
5
|
+
*/
|
|
6
|
+
export const armPutResponseCodesRule = createRule({
|
|
7
|
+
name: "arm-put-operation-response-codes",
|
|
8
|
+
severity: "warning",
|
|
9
|
+
url: "https://azure.github.io/typespec-azure/docs/libraries/azure-resource-manager/rules/put-operation-response-codes",
|
|
10
|
+
description: "Ensure put operations have the appropriate status codes.",
|
|
11
|
+
messages: {
|
|
12
|
+
default: `Put operations must have 200, 201 and default responses. They must not have any other responses.`,
|
|
13
|
+
},
|
|
14
|
+
create(context) {
|
|
15
|
+
return {
|
|
16
|
+
root: (program) => {
|
|
17
|
+
const resources = getArmResources(program);
|
|
18
|
+
const expected = new Set(["200", "201", "*"]);
|
|
19
|
+
for (const resource of resources) {
|
|
20
|
+
const operations = [
|
|
21
|
+
resource.operations.lifecycle.createOrUpdate,
|
|
22
|
+
resource.operations.lifecycle.update,
|
|
23
|
+
...Object.values(resource.operations.actions),
|
|
24
|
+
];
|
|
25
|
+
for (const op of operations) {
|
|
26
|
+
if (op === undefined) {
|
|
27
|
+
continue;
|
|
28
|
+
}
|
|
29
|
+
if (op.httpOperation.verb === "put") {
|
|
30
|
+
const statusCodes = new Set([
|
|
31
|
+
...op.httpOperation.responses.map((r) => r.statusCodes.toString()),
|
|
32
|
+
]);
|
|
33
|
+
if (statusCodes.size !== expected.size ||
|
|
34
|
+
![...statusCodes].every((v) => expected.has(v))) {
|
|
35
|
+
context.reportDiagnostic({
|
|
36
|
+
target: op.operation,
|
|
37
|
+
});
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
},
|
|
43
|
+
};
|
|
44
|
+
},
|
|
45
|
+
});
|
|
46
|
+
//# sourceMappingURL=arm-put-response-codes.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arm-put-response-codes.js","sourceRoot":"","sources":["../../../src/rules/arm-put-response-codes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAEzD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD;;GAEG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,UAAU,CAAC;IAChD,IAAI,EAAE,kCAAkC;IACxC,QAAQ,EAAE,SAAS;IACnB,GAAG,EAAE,iHAAiH;IACtH,WAAW,EAAE,0DAA0D;IACvE,QAAQ,EAAE;QACR,OAAO,EAAE,kGAAkG;KAC5G;IACD,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,IAAI,EAAE,CAAC,OAAgB,EAAE,EAAE;gBACzB,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;gBAC3C,MAAM,QAAQ,GAAG,IAAI,GAAG,CAAC,CAAC,KAAK,EAAE,KAAK,EAAE,GAAG,CAAC,CAAC,CAAC;gBAC9C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;oBACjC,MAAM,UAAU,GAAG;wBACjB,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,cAAc;wBAC5C,QAAQ,CAAC,UAAU,CAAC,SAAS,CAAC,MAAM;wBACpC,GAAG,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,OAAO,CAAC;qBAC9C,CAAC;oBACF,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;wBAC5B,IAAI,EAAE,KAAK,SAAS,EAAE,CAAC;4BACrB,SAAS;wBACX,CAAC;wBACD,IAAI,EAAE,CAAC,aAAa,CAAC,IAAI,KAAK,KAAK,EAAE,CAAC;4BACpC,MAAM,WAAW,GAAG,IAAI,GAAG,CAAC;gCAC1B,GAAG,EAAE,CAAC,aAAa,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,WAAW,CAAC,QAAQ,EAAE,CAAC;6BACnE,CAAC,CAAC;4BACH,IACE,WAAW,CAAC,IAAI,KAAK,QAAQ,CAAC,IAAI;gCAClC,CAAC,CAAC,GAAG,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAC/C,CAAC;gCACD,OAAO,CAAC,gBAAgB,CAAC;oCACvB,MAAM,EAAE,EAAE,CAAC,SAAS;iCACrB,CAAC,CAAC;4BACL,CAAC;wBACH,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Verify that a delete operation only
|
|
3
|
+
*/
|
|
4
|
+
export declare const armResourceNamePatternRule: import("@typespec/compiler").LinterRuleDefinition<"arm-resource-name-pattern", {
|
|
5
|
+
readonly default: "The resource name parameter should be defined with a 'pattern' restriction. Decorate the \"name\" property in the resource definition using the @pattern decorator, with a regular expression indicating the allowed characters in the resource name.";
|
|
6
|
+
}>;
|
|
7
|
+
//# sourceMappingURL=arm-resource-name-pattern.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arm-resource-name-pattern.d.ts","sourceRoot":"","sources":["../../../src/rules/arm-resource-name-pattern.ts"],"names":[],"mappings":"AA0CA;;GAEG;AACH,eAAO,MAAM,0BAA0B;;EA4BrC,CAAC"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import { createRule, defineCodeFix, getPattern, getSourceLocation, } from "@typespec/compiler";
|
|
2
|
+
import { getArmResources } from "../resource.js";
|
|
3
|
+
// TODO: Replace this with a reusable implementation from the compiler package when implemented.
|
|
4
|
+
// Issue: https://github.com/microsoft/typespec/issues/3044
|
|
5
|
+
function createPatternCodeFix(diagnosticTarget) {
|
|
6
|
+
return defineCodeFix({
|
|
7
|
+
id: "add-pattern-decorator",
|
|
8
|
+
label: "Add `@pattern` decorator to the resource name property with the default ARM pattern.",
|
|
9
|
+
fix: (context) => {
|
|
10
|
+
const location = getSourceLocation(diagnosticTarget);
|
|
11
|
+
const { lineStart, indent } = findLineStartAndIndent(location);
|
|
12
|
+
const updatedLocation = { ...location, pos: lineStart };
|
|
13
|
+
return context.prependText(updatedLocation, `${indent}@pattern(/^[a-zA-Z0-9-]{3,24}$/)\n`);
|
|
14
|
+
},
|
|
15
|
+
});
|
|
16
|
+
}
|
|
17
|
+
function findLineStartAndIndent(location) {
|
|
18
|
+
const text = location.file.text;
|
|
19
|
+
let pos = location.pos;
|
|
20
|
+
let indent = 0;
|
|
21
|
+
while (pos > 0 && text[pos - 1] !== "\n") {
|
|
22
|
+
if ([" ", "\t", "\n"].includes(text[pos - 1])) {
|
|
23
|
+
indent++;
|
|
24
|
+
}
|
|
25
|
+
else {
|
|
26
|
+
indent = 0;
|
|
27
|
+
}
|
|
28
|
+
pos--;
|
|
29
|
+
}
|
|
30
|
+
return { lineStart: pos, indent: location.file.text.slice(pos, pos + indent) };
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Verify that a delete operation only
|
|
34
|
+
*/
|
|
35
|
+
export const armResourceNamePatternRule = createRule({
|
|
36
|
+
name: "arm-resource-name-pattern",
|
|
37
|
+
severity: "warning",
|
|
38
|
+
url: "https://azure.github.io/typespec-azure/docs/libraries/azure-resource-manager/rules/resource-name-pattern",
|
|
39
|
+
description: "The resource name parameter should be defined with a 'pattern' restriction.",
|
|
40
|
+
messages: {
|
|
41
|
+
default: `The resource name parameter should be defined with a 'pattern' restriction. Decorate the "name" property in the resource definition using the @pattern decorator, with a regular expression indicating the allowed characters in the resource name.`,
|
|
42
|
+
},
|
|
43
|
+
create(context) {
|
|
44
|
+
return {
|
|
45
|
+
root: (program) => {
|
|
46
|
+
const resources = getArmResources(program);
|
|
47
|
+
for (const resource of resources) {
|
|
48
|
+
// find the name property
|
|
49
|
+
const nameProperty = resource.typespecType.properties.get("name");
|
|
50
|
+
if (nameProperty !== undefined) {
|
|
51
|
+
const pattern = getPattern(program, nameProperty);
|
|
52
|
+
if (pattern === undefined) {
|
|
53
|
+
context.reportDiagnostic({
|
|
54
|
+
target: nameProperty,
|
|
55
|
+
codefixes: [createPatternCodeFix(nameProperty)],
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
},
|
|
61
|
+
};
|
|
62
|
+
},
|
|
63
|
+
});
|
|
64
|
+
//# sourceMappingURL=arm-resource-name-pattern.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arm-resource-name-pattern.js","sourceRoot":"","sources":["../../../src/rules/arm-resource-name-pattern.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,UAAU,EACV,aAAa,EACb,UAAU,EACV,iBAAiB,GAClB,MAAM,oBAAoB,CAAC;AAE5B,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEjD,gGAAgG;AAChG,2DAA2D;AAC3D,SAAS,oBAAoB,CAAC,gBAAkC;IAC9D,OAAO,aAAa,CAAC;QACnB,EAAE,EAAE,uBAAuB;QAC3B,KAAK,EAAE,sFAAsF;QAC7F,GAAG,EAAE,CAAC,OAAO,EAAE,EAAE;YACf,MAAM,QAAQ,GAAG,iBAAiB,CAAC,gBAAgB,CAAC,CAAC;YACrD,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;YAC/D,MAAM,eAAe,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;YACxD,OAAO,OAAO,CAAC,WAAW,CAAC,eAAe,EAAE,GAAG,MAAM,oCAAoC,CAAC,CAAC;QAC7F,CAAC;KACF,CAAC,CAAC;AACL,CAAC;AAED,SAAS,sBAAsB,CAAC,QAAwB;IACtD,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC;IAChC,IAAI,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAC;IACvB,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,OAAO,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,KAAK,IAAI,EAAE,CAAC;QACzC,IAAI,CAAC,GAAG,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YAC9C,MAAM,EAAE,CAAC;QACX,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,CAAC,CAAC;QACb,CAAC;QACD,GAAG,EAAE,CAAC;IACR,CAAC;IACD,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,MAAM,EAAE,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,GAAG,MAAM,CAAC,EAAE,CAAC;AACjF,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAAG,UAAU,CAAC;IACnD,IAAI,EAAE,2BAA2B;IACjC,QAAQ,EAAE,SAAS;IACnB,GAAG,EAAE,0GAA0G;IAC/G,WAAW,EAAE,6EAA6E;IAC1F,QAAQ,EAAE;QACR,OAAO,EAAE,sPAAsP;KAChQ;IACD,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,IAAI,EAAE,CAAC,OAAgB,EAAE,EAAE;gBACzB,MAAM,SAAS,GAAG,eAAe,CAAC,OAAO,CAAC,CAAC;gBAC3C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;oBACjC,yBAAyB;oBACzB,MAAM,YAAY,GAAG,QAAQ,CAAC,YAAY,CAAC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;oBAClE,IAAI,YAAY,KAAK,SAAS,EAAE,CAAC;wBAC/B,MAAM,OAAO,GAAG,UAAU,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC;wBAClD,IAAI,OAAO,KAAK,SAAS,EAAE,CAAC;4BAC1B,OAAO,CAAC,gBAAgB,CAAC;gCACvB,MAAM,EAAE,YAAY;gCACpB,SAAS,EAAE,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;6BAChD,CAAC,CAAC;wBACL,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Ensure that LRO 202 responses have a Location Header.
|
|
3
|
+
*/
|
|
4
|
+
export declare const lroLocationHeaderRule: import("@typespec/compiler").LinterRuleDefinition<"lro-location-header", {
|
|
5
|
+
readonly default: "A 202 response should include a Location response header.";
|
|
6
|
+
}>;
|
|
7
|
+
//# sourceMappingURL=lro-location-header.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lro-location-header.d.ts","sourceRoot":"","sources":["../../../src/rules/lro-location-header.ts"],"names":[],"mappings":"AAkBA;;GAEG;AACH,eAAO,MAAM,qBAAqB;;EA6BhC,CAAC"}
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
import { createRule } from "@typespec/compiler";
|
|
2
|
+
import { getHttpOperation } from "@typespec/http";
|
|
3
|
+
function getCaseInsensitiveHeader(headers, key) {
|
|
4
|
+
if (!headers) {
|
|
5
|
+
return undefined;
|
|
6
|
+
}
|
|
7
|
+
for (const header of Object.keys(headers)) {
|
|
8
|
+
if (header.toLowerCase() === key.toLowerCase()) {
|
|
9
|
+
return header;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
return undefined;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Ensure that LRO 202 responses have a Location Header.
|
|
16
|
+
*/
|
|
17
|
+
export const lroLocationHeaderRule = createRule({
|
|
18
|
+
name: "lro-location-header",
|
|
19
|
+
severity: "warning",
|
|
20
|
+
url: "https://azure.github.io/typespec-azure/docs/libraries/azure-resource-manager/rules/lro-location-header",
|
|
21
|
+
description: "A 202 response should include a Location response header.",
|
|
22
|
+
messages: {
|
|
23
|
+
default: `A 202 response should include a Location response header.`,
|
|
24
|
+
},
|
|
25
|
+
create(context) {
|
|
26
|
+
return {
|
|
27
|
+
operation: (op) => {
|
|
28
|
+
const [httpOperation, _] = getHttpOperation(context.program, op);
|
|
29
|
+
const responses = httpOperation.responses;
|
|
30
|
+
for (const response of responses) {
|
|
31
|
+
if (response.statusCodes !== 202) {
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
for (const resp of response.responses) {
|
|
35
|
+
if (getCaseInsensitiveHeader(resp.headers, "Location") === undefined) {
|
|
36
|
+
context.reportDiagnostic({
|
|
37
|
+
target: op,
|
|
38
|
+
});
|
|
39
|
+
return;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
};
|
|
45
|
+
},
|
|
46
|
+
});
|
|
47
|
+
//# sourceMappingURL=lro-location-header.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lro-location-header.js","sourceRoot":"","sources":["../../../src/rules/lro-location-header.ts"],"names":[],"mappings":"AAAA,OAAO,EAA4B,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAC1E,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC;AAElD,SAAS,wBAAwB,CAC/B,OAAkD,EAClD,GAAW;IAEX,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,SAAS,CAAC;IACnB,CAAC;IACD,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,CAAC;QAC1C,IAAI,MAAM,CAAC,WAAW,EAAE,KAAK,GAAG,CAAC,WAAW,EAAE,EAAE,CAAC;YAC/C,OAAO,MAAM,CAAC;QAChB,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,qBAAqB,GAAG,UAAU,CAAC;IAC9C,IAAI,EAAE,qBAAqB;IAC3B,QAAQ,EAAE,SAAS;IACnB,GAAG,EAAE,wGAAwG;IAC7G,WAAW,EAAE,2DAA2D;IACxE,QAAQ,EAAE;QACR,OAAO,EAAE,2DAA2D;KACrE;IACD,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,SAAS,EAAE,CAAC,EAAa,EAAE,EAAE;gBAC3B,MAAM,CAAC,aAAa,EAAE,CAAC,CAAC,GAAG,gBAAgB,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;gBACjE,MAAM,SAAS,GAAG,aAAa,CAAC,SAAS,CAAC;gBAC1C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;oBACjC,IAAI,QAAQ,CAAC,WAAW,KAAK,GAAG,EAAE,CAAC;wBACjC,SAAS;oBACX,CAAC;oBACD,KAAK,MAAM,IAAI,IAAI,QAAQ,CAAC,SAAS,EAAE,CAAC;wBACtC,IAAI,wBAAwB,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,CAAC,KAAK,SAAS,EAAE,CAAC;4BACrE,OAAO,CAAC,gBAAgB,CAAC;gCACvB,MAAM,EAAE,EAAE;6BACX,CAAC,CAAC;4BACH,OAAO;wBACT,CAAC;oBACH,CAAC;gBACH,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC"}
|
package/lib/arm.tsp
CHANGED
|
@@ -34,6 +34,6 @@ namespace Azure.ResourceManager;
|
|
|
34
34
|
@doc("Supported versions of Azure.ResourceManager building blocks.")
|
|
35
35
|
enum Versions {
|
|
36
36
|
@doc("Version 1.0-preview.1")
|
|
37
|
-
@useDependency(Azure.Core.Versions.
|
|
37
|
+
@useDependency(Azure.Core.Versions.v1_0_Preview_2)
|
|
38
38
|
v1_0_Preview_1: "1.0-preview.1",
|
|
39
39
|
}
|
|
@@ -30,7 +30,7 @@ model CustomerManagedKeyEncryption {
|
|
|
30
30
|
keyEncryptionIdentity?: KeyEncryptionIdentity;
|
|
31
31
|
|
|
32
32
|
@doc("User assigned identity to use for accessing key encryption key Url. Ex: /subscriptions/fa5fc227-a624-475e-b696-cdd604c735bc/resourceGroups/<resource group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myId. Mutually exclusive with identityType systemAssignedIdentity.")
|
|
33
|
-
userAssignedIdentityResourceId?:
|
|
33
|
+
userAssignedIdentityResourceId?: Azure.Core.armResourceIdentifier<[
|
|
34
34
|
{
|
|
35
35
|
type: "Microsoft.ManagedIdentity/userAssignedIdentities";
|
|
36
36
|
}
|
|
@@ -40,7 +40,7 @@ model CustomerManagedKeyEncryption {
|
|
|
40
40
|
federatedClientId?: uuid;
|
|
41
41
|
|
|
42
42
|
@doc("delegated identity to use for accessing key encryption key Url. Ex: /subscriptions/fa5fc227-a624-475e-b696-cdd604c735bc/resourceGroups/<resource group>/providers/Microsoft.ManagedIdentity/userAssignedIdentities/myId. Mutually exclusive with identityType systemAssignedIdentity and userAssignedIdentity - internal use only.")
|
|
43
|
-
delegatedIdentityClientId
|
|
43
|
+
delegatedIdentityClientId?: uuid;
|
|
44
44
|
}
|
|
45
45
|
|
|
46
46
|
@doc("All encryption configuration for a resource.")
|
package/lib/models.tsp
CHANGED
|
@@ -90,40 +90,13 @@ model ProviderNamespace<Resource extends {}> {
|
|
|
90
90
|
//#region Common Azure Resource Manager type definitions
|
|
91
91
|
|
|
92
92
|
/**
|
|
93
|
-
*
|
|
94
|
-
*
|
|
95
|
-
* Sample usage:
|
|
96
|
-
* otherArmId: ResourceIdentifier;
|
|
97
|
-
* networkId: ResourceIdentifier<[{type:"\\Microsoft.Network\\vnet"}]>
|
|
98
|
-
* vmIds: ResourceIdentifier<[{type:"\\Microsoft.Compute\\vm", scopes["*"]}]>
|
|
99
|
-
* @template AllowedResourceTypes An array of allowed resource types for the resource reference
|
|
93
|
+
* Use Azure.Core.armResourceIdentifier<AllowedResourceTypes>
|
|
100
94
|
*/
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
@OpenAPI.extension(
|
|
104
|
-
"x-ms-arm-id-details",
|
|
105
|
-
{
|
|
106
|
-
allowedResources: AllowedResourceTypes,
|
|
107
|
-
}
|
|
108
|
-
)
|
|
109
|
-
scalar ResourceIdentifier<AllowedResourceTypes extends ResourceIdentifierAllowedResource[] = []>
|
|
110
|
-
extends string;
|
|
95
|
+
#deprecated "Use Azure.Core.armResourceIdentifier<AllowedResourceTypes> instead."
|
|
96
|
+
alias ResourceIdentifier<AllowedResourceTypes extends ArmResourceIdentifierAllowedResource[] = never> = Azure.Core.armResourceIdentifier<AllowedResourceTypes>;
|
|
111
97
|
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
* See [link](https://github.com/Azure/autorest/tree/main/docs/extensions#schema)
|
|
115
|
-
*/
|
|
116
|
-
@doc("Optional definition represents a particular type of Azure Resource Manager resource which can be referred to by a ResourceIdentifier.")
|
|
117
|
-
model ResourceIdentifierAllowedResource {
|
|
118
|
-
@doc("The type of resource that is being referred to. For example Microsoft.Network/virtualNetworks or Microsoft.Network/virtualNetworks/subnets. See Example Types for more examples.")
|
|
119
|
-
type: string;
|
|
120
|
-
|
|
121
|
-
@doc("""
|
|
122
|
-
An array of scopes. If not specified, the default scope is ["ResourceGroup"].
|
|
123
|
-
See [Allowed Scopes](https://github.com/Azure/autorest/tree/main/docs/extensions#allowed-scopes).
|
|
124
|
-
""")
|
|
125
|
-
scopes?: string[] = [];
|
|
126
|
-
}
|
|
98
|
+
#deprecated "Use ArmResourceIdentifierAllowedResource instead."
|
|
99
|
+
alias ResourceIdentifierAllowedResource = ArmResourceIdentifierAllowedResource;
|
|
127
100
|
|
|
128
101
|
/**
|
|
129
102
|
* Standard terminal provisioning state of resource type. You can spread into your
|
package/lib/operations.tsp
CHANGED
|
@@ -258,12 +258,12 @@ op ArmTagsPatchAsync<
|
|
|
258
258
|
Resource extends ArmResource,
|
|
259
259
|
Properties extends {} = TagsUpdateModel<Resource>,
|
|
260
260
|
BaseParameters = DefaultBaseParameters<Resource>,
|
|
261
|
-
LroHeaders extends TypeSpec.Reflection.Model =
|
|
262
|
-
|
|
263
|
-
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
261
|
+
LroHeaders extends TypeSpec.Reflection.Model = ArmLroLocationHeader<
|
|
262
|
+
Azure.Core.StatusMonitorPollingOptions<ArmOperationStatus>,
|
|
263
|
+
Resource,
|
|
264
|
+
string
|
|
265
|
+
> &
|
|
266
|
+
Azure.Core.Foundations.RetryAfterHeader,
|
|
267
267
|
Parameters extends {} = {}
|
|
268
268
|
> is ArmCustomPatchAsync<
|
|
269
269
|
Resource,
|
|
@@ -325,12 +325,12 @@ op ArmCustomPatchAsync<
|
|
|
325
325
|
Resource extends ArmResource,
|
|
326
326
|
PatchModel extends TypeSpec.Reflection.Model = TagsUpdateModel<Resource>,
|
|
327
327
|
BaseParameters = DefaultBaseParameters<Resource>,
|
|
328
|
-
LroHeaders extends TypeSpec.Reflection.Model =
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
328
|
+
LroHeaders extends TypeSpec.Reflection.Model = ArmLroLocationHeader<
|
|
329
|
+
Azure.Core.StatusMonitorPollingOptions<ArmOperationStatus>,
|
|
330
|
+
Resource,
|
|
331
|
+
string
|
|
332
|
+
> &
|
|
333
|
+
Azure.Core.Foundations.RetryAfterHeader,
|
|
334
334
|
Parameters extends {} = {},
|
|
335
335
|
Response extends {} = ArmResponse<Resource> | ArmAcceptedLroResponse<
|
|
336
336
|
"Resource update request accepted.",
|
|
@@ -442,8 +442,8 @@ op ArmResourceDeleteAsyncBase<
|
|
|
442
442
|
op ArmResourceDeleteAsync<
|
|
443
443
|
Resource extends ArmResource,
|
|
444
444
|
BaseParameters = DefaultBaseParameters<Resource>,
|
|
445
|
-
LroHeaders extends TypeSpec.Reflection.Model =
|
|
446
|
-
|
|
445
|
+
LroHeaders extends TypeSpec.Reflection.Model = ArmLroLocationHeader &
|
|
446
|
+
Azure.Core.Foundations.RetryAfterHeader,
|
|
447
447
|
Parameters extends {} = {},
|
|
448
448
|
Response extends {} = ArmDeletedResponse | ArmDeleteAcceptedLroResponse<LroHeaders> | ArmDeletedNoContentResponse,
|
|
449
449
|
Error extends {} = ErrorResponse
|
|
@@ -461,8 +461,8 @@ op ArmResourceDeleteAsync<
|
|
|
461
461
|
op ArmResourceDeleteWithoutOkAsync<
|
|
462
462
|
Resource extends ArmResource,
|
|
463
463
|
BaseParameters = DefaultBaseParameters<Resource>,
|
|
464
|
-
LroHeaders extends TypeSpec.Reflection.Model =
|
|
465
|
-
|
|
464
|
+
LroHeaders extends TypeSpec.Reflection.Model = ArmLroLocationHeader &
|
|
465
|
+
Azure.Core.Foundations.RetryAfterHeader,
|
|
466
466
|
Parameters extends {} = {},
|
|
467
467
|
Response extends {} = ArmDeleteAcceptedLroResponse<LroHeaders> | ArmDeletedNoContentResponse,
|
|
468
468
|
Error extends {} = ErrorResponse
|
|
@@ -539,12 +539,12 @@ op ArmResourceActionAsync<
|
|
|
539
539
|
Request extends TypeSpec.Reflection.Model | void,
|
|
540
540
|
Response extends TypeSpec.Reflection.Model | void,
|
|
541
541
|
BaseParameters extends TypeSpec.Reflection.Model = DefaultBaseParameters<Resource>,
|
|
542
|
-
LroHeaders extends TypeSpec.Reflection.Model =
|
|
543
|
-
|
|
544
|
-
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
|
|
542
|
+
LroHeaders extends TypeSpec.Reflection.Model = ArmLroLocationHeader<
|
|
543
|
+
Azure.Core.StatusMonitorPollingOptions<ArmOperationStatus>,
|
|
544
|
+
Response,
|
|
545
|
+
string
|
|
546
|
+
> &
|
|
547
|
+
Azure.Core.Foundations.RetryAfterHeader,
|
|
548
548
|
Parameters extends {} = {},
|
|
549
549
|
Error extends {} = ErrorResponse
|
|
550
550
|
> is ArmResourceActionAsyncBase<
|
|
@@ -598,8 +598,8 @@ op ArmResourceActionNoContentAsync<
|
|
|
598
598
|
Resource extends ArmResource,
|
|
599
599
|
Request extends TypeSpec.Reflection.Model | void,
|
|
600
600
|
BaseParameters extends TypeSpec.Reflection.Model = DefaultBaseParameters<Resource>,
|
|
601
|
-
LroHeaders extends TypeSpec.Reflection.Model =
|
|
602
|
-
|
|
601
|
+
LroHeaders extends TypeSpec.Reflection.Model = ArmLroLocationHeader &
|
|
602
|
+
Azure.Core.Foundations.RetryAfterHeader,
|
|
603
603
|
Parameters extends {} = {},
|
|
604
604
|
Error extends {} = ErrorResponse
|
|
605
605
|
> is ArmResourceActionAsyncBase<
|
|
@@ -627,8 +627,12 @@ op ArmResourceActionNoResponseContentAsync<
|
|
|
627
627
|
Resource extends ArmResource,
|
|
628
628
|
Request extends TypeSpec.Reflection.Model | void,
|
|
629
629
|
BaseParameters extends TypeSpec.Reflection.Model = DefaultBaseParameters<Resource>,
|
|
630
|
-
LroHeaders extends TypeSpec.Reflection.Model =
|
|
631
|
-
|
|
630
|
+
LroHeaders extends TypeSpec.Reflection.Model = ArmLroLocationHeader<
|
|
631
|
+
Azure.Core.StatusMonitorPollingOptions<ArmOperationStatus>,
|
|
632
|
+
void,
|
|
633
|
+
string
|
|
634
|
+
> &
|
|
635
|
+
Azure.Core.Foundations.RetryAfterHeader,
|
|
632
636
|
Parameters extends {} = {},
|
|
633
637
|
Error extends {} = ErrorResponse
|
|
634
638
|
> is ArmResourceActionAsyncBase<
|
package/lib/private-links.tsp
CHANGED
package/lib/responses.tsp
CHANGED
|
@@ -19,11 +19,15 @@ model ArmResponse<ResponseBody> {
|
|
|
19
19
|
/**
|
|
20
20
|
* The Azure Resource Manager 201 response for a resource
|
|
21
21
|
* @template ResponseBody The contents of the response body
|
|
22
|
+
* @template ExtraHeaders Additional headers in the response. Default includes Retry-After header
|
|
22
23
|
*/
|
|
23
24
|
@doc("Azure create operation completed successfully.")
|
|
24
|
-
model ArmCreatedResponse<
|
|
25
|
+
model ArmCreatedResponse<
|
|
26
|
+
ResponseBody,
|
|
27
|
+
ExtraHeaders extends TypeSpec.Reflection.Model = Azure.Core.Foundations.RetryAfterHeader
|
|
28
|
+
> {
|
|
25
29
|
...CreatedResponse;
|
|
26
|
-
...
|
|
30
|
+
...ExtraHeaders;
|
|
27
31
|
...Body<ResponseBody>;
|
|
28
32
|
}
|
|
29
33
|
|
|
@@ -39,7 +43,8 @@ model ArmDeletedResponse {
|
|
|
39
43
|
* @dev The response for asynchronous Azure Resource Manager delete ACCEPTED
|
|
40
44
|
* @template LroHeaders Optional. Allows overriding the Lro headers returned in the response.
|
|
41
45
|
*/
|
|
42
|
-
model ArmDeleteAcceptedLroResponse<LroHeaders extends TypeSpec.Reflection.Model = ArmLroLocationHeader
|
|
46
|
+
model ArmDeleteAcceptedLroResponse<LroHeaders extends TypeSpec.Reflection.Model = ArmLroLocationHeader &
|
|
47
|
+
Azure.Core.Foundations.RetryAfterHeader>
|
|
43
48
|
is ArmAcceptedLroResponse<"Resource deletion accepted.", LroHeaders>;
|
|
44
49
|
|
|
45
50
|
/**
|
|
@@ -50,11 +55,15 @@ model ArmDeleteAcceptedResponse is ArmAcceptedResponse<"Resource deletion accept
|
|
|
50
55
|
/**
|
|
51
56
|
* @dev The standard ACCEPTED response
|
|
52
57
|
* @template Message The description of the response status (defaults to `Resource operation accepted`)
|
|
58
|
+
* @template ExtraHeaders Additional headers in the response. Default includes Retry-After header
|
|
53
59
|
*/
|
|
54
60
|
@doc(Message)
|
|
55
|
-
model ArmAcceptedResponse<
|
|
61
|
+
model ArmAcceptedResponse<
|
|
62
|
+
Message extends valueof string = "Resource operation accepted.",
|
|
63
|
+
ExtraHeaders extends TypeSpec.Reflection.Model = Azure.Core.Foundations.RetryAfterHeader
|
|
64
|
+
> {
|
|
56
65
|
...AcceptedResponse;
|
|
57
|
-
...
|
|
66
|
+
...ExtraHeaders;
|
|
58
67
|
}
|
|
59
68
|
|
|
60
69
|
/**
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@azure-tools/typespec-azure-resource-manager",
|
|
3
|
-
"version": "0.41.0-dev.
|
|
3
|
+
"version": "0.41.0-dev.11",
|
|
4
4
|
"author": "Microsoft Corporation",
|
|
5
5
|
"description": "TypeSpec Azure Resource Manager library",
|
|
6
6
|
"homepage": "https://azure.github.io/typespec-azure",
|
|
@@ -59,13 +59,13 @@
|
|
|
59
59
|
"@typespec/openapi": "~0.54.0 || >=0.55.0-dev <0.55.0",
|
|
60
60
|
"@typespec/rest": "~0.54.0 || >=0.55.0-dev <0.55.0",
|
|
61
61
|
"@typespec/versioning": "~0.54.0 || >=0.55.0-dev <0.55.0",
|
|
62
|
-
"@vitest/coverage-v8": "^1.
|
|
63
|
-
"@vitest/ui": "^1.
|
|
62
|
+
"@vitest/coverage-v8": "^1.4.0",
|
|
63
|
+
"@vitest/ui": "^1.4.0",
|
|
64
64
|
"c8": "^9.1.0",
|
|
65
|
-
"eslint": "^8.
|
|
65
|
+
"eslint": "^8.57.0",
|
|
66
66
|
"rimraf": "~5.0.5",
|
|
67
|
-
"typescript": "~5.
|
|
68
|
-
"vitest": "^1.
|
|
67
|
+
"typescript": "~5.4.3",
|
|
68
|
+
"vitest": "^1.4.0",
|
|
69
69
|
"@typespec/tspd": "~0.46.0"
|
|
70
70
|
},
|
|
71
71
|
"dependencies": {},
|