@azure-tools/typespec-azure-resource-manager 0.27.0

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.
Files changed (115) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +346 -0
  3. package/dist/src/common-types.d.ts +8 -0
  4. package/dist/src/common-types.d.ts.map +1 -0
  5. package/dist/src/common-types.js +14 -0
  6. package/dist/src/common-types.js.map +1 -0
  7. package/dist/src/index.d.ts +7 -0
  8. package/dist/src/index.d.ts.map +1 -0
  9. package/dist/src/index.js +7 -0
  10. package/dist/src/index.js.map +1 -0
  11. package/dist/src/internal.d.ts +44 -0
  12. package/dist/src/internal.d.ts.map +1 -0
  13. package/dist/src/internal.js +142 -0
  14. package/dist/src/internal.js.map +1 -0
  15. package/dist/src/lib.d.ts +615 -0
  16. package/dist/src/lib.d.ts.map +1 -0
  17. package/dist/src/lib.js +250 -0
  18. package/dist/src/lib.js.map +1 -0
  19. package/dist/src/linter.d.ts +3 -0
  20. package/dist/src/linter.d.ts.map +1 -0
  21. package/dist/src/linter.js +42 -0
  22. package/dist/src/linter.js.map +1 -0
  23. package/dist/src/namespace.d.ts +16 -0
  24. package/dist/src/namespace.d.ts.map +1 -0
  25. package/dist/src/namespace.js +106 -0
  26. package/dist/src/namespace.js.map +1 -0
  27. package/dist/src/operations.d.ts +36 -0
  28. package/dist/src/operations.d.ts.map +1 -0
  29. package/dist/src/operations.js +186 -0
  30. package/dist/src/operations.js.map +1 -0
  31. package/dist/src/resource.d.ts +81 -0
  32. package/dist/src/resource.d.ts.map +1 -0
  33. package/dist/src/resource.js +358 -0
  34. package/dist/src/resource.js.map +1 -0
  35. package/dist/src/rules/arm-resource-action-no-segment.d.ts +2 -0
  36. package/dist/src/rules/arm-resource-action-no-segment.d.ts.map +1 -0
  37. package/dist/src/rules/arm-resource-action-no-segment.js +31 -0
  38. package/dist/src/rules/arm-resource-action-no-segment.js.map +1 -0
  39. package/dist/src/rules/arm-resource-invalid-chars.d.ts +2 -0
  40. package/dist/src/rules/arm-resource-invalid-chars.d.ts.map +1 -0
  41. package/dist/src/rules/arm-resource-invalid-chars.js +61 -0
  42. package/dist/src/rules/arm-resource-invalid-chars.js.map +1 -0
  43. package/dist/src/rules/arm-resource-invalid-version-format.d.ts +2 -0
  44. package/dist/src/rules/arm-resource-invalid-version-format.d.ts.map +1 -0
  45. package/dist/src/rules/arm-resource-invalid-version-format.js +48 -0
  46. package/dist/src/rules/arm-resource-invalid-version-format.js.map +1 -0
  47. package/dist/src/rules/arm-resource-operations.d.ts +2 -0
  48. package/dist/src/rules/arm-resource-operations.d.ts.map +1 -0
  49. package/dist/src/rules/arm-resource-operations.js +70 -0
  50. package/dist/src/rules/arm-resource-operations.js.map +1 -0
  51. package/dist/src/rules/arm-resource-properties.d.ts +2 -0
  52. package/dist/src/rules/arm-resource-properties.d.ts.map +1 -0
  53. package/dist/src/rules/arm-resource-properties.js +55 -0
  54. package/dist/src/rules/arm-resource-properties.js.map +1 -0
  55. package/dist/src/rules/arm-resource-provisioning-state-rule.d.ts +2 -0
  56. package/dist/src/rules/arm-resource-provisioning-state-rule.d.ts.map +1 -0
  57. package/dist/src/rules/arm-resource-provisioning-state-rule.js +62 -0
  58. package/dist/src/rules/arm-resource-provisioning-state-rule.js.map +1 -0
  59. package/dist/src/rules/beyond-nesting-levels.d.ts +5 -0
  60. package/dist/src/rules/beyond-nesting-levels.d.ts.map +1 -0
  61. package/dist/src/rules/beyond-nesting-levels.js +37 -0
  62. package/dist/src/rules/beyond-nesting-levels.js.map +1 -0
  63. package/dist/src/rules/core-operations.d.ts +2 -0
  64. package/dist/src/rules/core-operations.d.ts.map +1 -0
  65. package/dist/src/rules/core-operations.js +181 -0
  66. package/dist/src/rules/core-operations.js.map +1 -0
  67. package/dist/src/rules/delete-operation.d.ts +5 -0
  68. package/dist/src/rules/delete-operation.d.ts.map +1 -0
  69. package/dist/src/rules/delete-operation.js +28 -0
  70. package/dist/src/rules/delete-operation.js.map +1 -0
  71. package/dist/src/rules/envelope-properties.d.ts +5 -0
  72. package/dist/src/rules/envelope-properties.d.ts.map +1 -0
  73. package/dist/src/rules/envelope-properties.js +62 -0
  74. package/dist/src/rules/envelope-properties.js.map +1 -0
  75. package/dist/src/rules/list-operation.d.ts +5 -0
  76. package/dist/src/rules/list-operation.d.ts.map +1 -0
  77. package/dist/src/rules/list-operation.js +35 -0
  78. package/dist/src/rules/list-operation.js.map +1 -0
  79. package/dist/src/rules/no-response-body.d.ts +5 -0
  80. package/dist/src/rules/no-response-body.d.ts.map +1 -0
  81. package/dist/src/rules/no-response-body.js +27 -0
  82. package/dist/src/rules/no-response-body.js.map +1 -0
  83. package/dist/src/rules/operations-interface-missing.d.ts +5 -0
  84. package/dist/src/rules/operations-interface-missing.d.ts.map +1 -0
  85. package/dist/src/rules/operations-interface-missing.js +37 -0
  86. package/dist/src/rules/operations-interface-missing.js.map +1 -0
  87. package/dist/src/rules/resource-name.d.ts +5 -0
  88. package/dist/src/rules/resource-name.d.ts.map +1 -0
  89. package/dist/src/rules/resource-name.js +47 -0
  90. package/dist/src/rules/resource-name.js.map +1 -0
  91. package/dist/src/rules/retry-after.d.ts +5 -0
  92. package/dist/src/rules/retry-after.d.ts.map +1 -0
  93. package/dist/src/rules/retry-after.js +31 -0
  94. package/dist/src/rules/retry-after.js.map +1 -0
  95. package/dist/src/rules/unsupported-types.d.ts +5 -0
  96. package/dist/src/rules/unsupported-types.d.ts.map +1 -0
  97. package/dist/src/rules/unsupported-types.js +39 -0
  98. package/dist/src/rules/unsupported-types.js.map +1 -0
  99. package/dist/src/rules/utils.d.ts +18 -0
  100. package/dist/src/rules/utils.d.ts.map +1 -0
  101. package/dist/src/rules/utils.js +77 -0
  102. package/dist/src/rules/utils.js.map +1 -0
  103. package/dist/src/testing/index.d.ts +3 -0
  104. package/dist/src/testing/index.d.ts.map +1 -0
  105. package/dist/src/testing/index.js +24 -0
  106. package/dist/src/testing/index.js.map +1 -0
  107. package/lib/arm.foundations.tsp +465 -0
  108. package/lib/arm.tsp +31 -0
  109. package/lib/decorators.tsp +87 -0
  110. package/lib/interfaces.tsp +287 -0
  111. package/lib/models.tsp +203 -0
  112. package/lib/operations.tsp +260 -0
  113. package/lib/parameters.tsp +126 -0
  114. package/lib/responses.tsp +47 -0
  115. package/package.json +85 -0
@@ -0,0 +1,250 @@
1
+ import { createTypeSpecLibrary, paramMessage } from "@typespec/compiler";
2
+ export const libDef = {
3
+ name: "@azure-tools/typespec-azure-resource-manager",
4
+ diagnostics: {
5
+ "single-arm-provider": {
6
+ severity: "error",
7
+ messages: {
8
+ default: "Only one @armProviderNamespace can be declared in a typespec spec at once.",
9
+ },
10
+ },
11
+ "decorator-param-wrong-type": {
12
+ severity: "error",
13
+ messages: {
14
+ armUpdateProviderNamespace: "The parameter to @armUpdateProviderNamespace must be an operation with a 'provider' parameter.",
15
+ },
16
+ },
17
+ "missing-operations-endpoint": {
18
+ severity: "warning",
19
+ messages: {
20
+ default: paramMessage `Arm namespace ${"namespace"} is missing the Operations interface. Add "interface Operations extends Azure.ResourceManager.Operations {}".`,
21
+ },
22
+ },
23
+ "arm-resource-invalid-version-format": {
24
+ severity: "warning",
25
+ messages: {
26
+ invalidType: paramMessage `The versions for Azure Resource Manager Services must use strings of the form "YYYY-MM-DD[-suffix]."`,
27
+ default: paramMessage `The version '${"version"}' is invalid. Versions for arm resources must be of the form "YYYY-MM-DD" and may have a suffix, like "-preview" or a versioned suffix, "-alpha.1".`,
28
+ },
29
+ },
30
+ "arm-resource-name-invalid-chars": {
31
+ severity: "warning",
32
+ messages: {
33
+ default: "Arm resource name must contain only alphanumeric characters.",
34
+ },
35
+ },
36
+ "arm-resource-key-invalid-chars": {
37
+ severity: "warning",
38
+ messages: {
39
+ default: paramMessage `'${"key"}' is an invalid path parameter name. Parameters must consist of alphanumeric characters starting with a lower case letter.`,
40
+ },
41
+ },
42
+ "arm-resource-invalid-patch-model": {
43
+ severity: "warning",
44
+ messages: {
45
+ default: "The request body of a PATCH must be a model with a subset of resource properties",
46
+ },
47
+ },
48
+ "arm-resource-path-segment-invalid-chars": {
49
+ severity: "warning",
50
+ messages: {
51
+ default: paramMessage `'${"segment"}' is an invalid path segment. Segments may start with a separator must consist of alphanumeric characters or dashes, starting with a lower case letter.`,
52
+ },
53
+ },
54
+ "arm-resource-invalid-envelope-property": {
55
+ severity: "warning",
56
+ messages: {
57
+ default: paramMessage `Property "${"propertyName"}" is not valid in the resource envelope. Please remove this property, or add it to the resource-specific property bag.`,
58
+ },
59
+ },
60
+ "arm-resource-duplicate-property": {
61
+ severity: "warning",
62
+ messages: {
63
+ default: paramMessage `Duplicate property "${"propertyName"}" found in the resource envelope and resource properties. Please do not duplicate envelope properties in resource properties.`,
64
+ },
65
+ },
66
+ "arm-resource-provisioning-state": {
67
+ severity: "warning",
68
+ messages: {
69
+ default: "The RP-specific property model in the 'properties' property of this resource must contain a 'provisioningState property. The property type should be an enum, and it must specify known state values 'Succeeded', 'Failed', and 'Canceled'.",
70
+ },
71
+ },
72
+ "arm-resource-provisioning-state-values": {
73
+ severity: "warning",
74
+ messages: {
75
+ default: paramMessage `The "@knownValues" decorator for provisioningState, must reference an enum with 'Succeeded', 'Failed', 'Canceled' values. The enum is missing the values: [${"missingValues"}].`,
76
+ },
77
+ },
78
+ "arm-resource-patch-missing-tags": {
79
+ severity: "warning",
80
+ messages: {
81
+ default: "Resource PATCH must contain the 'tags' property.",
82
+ },
83
+ },
84
+ "arm-resource-operation-missing-decorator": {
85
+ severity: "warning",
86
+ messages: {
87
+ default: paramMessage `Resource ${"verb"} operation must be decorated with ${"decorator"}.`,
88
+ },
89
+ },
90
+ "arm-resource-interface-requires-decorator": {
91
+ severity: "warning",
92
+ messages: {
93
+ default: "Each resource interface must have an @armResourceOperations decorator.",
94
+ },
95
+ },
96
+ "arm-resource-circular-ancestry": {
97
+ severity: "warning",
98
+ messages: {
99
+ default: "There is a loop in the ancestry of this resource. Please ensure that the `@parentResource` decorator contains the correct parent resource, and that parentage contains no cycles.",
100
+ },
101
+ },
102
+ "arm-resource-duplicate-base-parameter": {
103
+ severity: "warning",
104
+ messages: {
105
+ default: "Only one base parameter type is allowed per resource. Each resource may have only one of `@parentResource`, `@resourceGroupResource`, `@tenantResource`, `@locationResource`, or `@subscriptionResource` decorators.",
106
+ },
107
+ },
108
+ "arm-resource-invalid-action-verb": {
109
+ severity: "warning",
110
+ messages: {
111
+ default: "Actions must be HTTP Post operations.",
112
+ },
113
+ },
114
+ "arm-resource-action-no-segment": {
115
+ severity: "warning",
116
+ messages: {
117
+ default: "`@armResourceAction` should not be used with `@segment`. Instead, use `@action(...)` if you need to rename the action, or omit.",
118
+ },
119
+ },
120
+ "arm-resource-patch-model-superset": {
121
+ severity: "warning",
122
+ messages: {
123
+ default: paramMessage `Resource PATCH models must be a subset of the resource type. The following properties: [${"name"}] do not exist in resource Model '${"resourceModel"}'.`,
124
+ },
125
+ },
126
+ "arm-resource-operation-missing-api-version": {
127
+ severity: "warning",
128
+ messages: {
129
+ default: "All Resource operations must use an api-version parameter. Please include Azure.ResourceManager.ApiVersionParameter in the operation parameter list using the spread (...ApiVersionParameter) operator, or using one of the common resource parameter models.",
130
+ },
131
+ },
132
+ "arm-resource-operation-outside-interface": {
133
+ severity: "warning",
134
+ messages: {
135
+ default: "All operations must be inside an interface declaration.",
136
+ },
137
+ },
138
+ "arm-resource-operation-response": {
139
+ severity: "error",
140
+ messages: {
141
+ default: "[RPC 008]: PUT, GET, PATCH & LIST must return the same resource schema.",
142
+ },
143
+ },
144
+ "arm-resource-missing-name-property": {
145
+ severity: "error",
146
+ messages: {
147
+ default: "Resource types must include a string property called 'name'.",
148
+ },
149
+ },
150
+ "arm-resource-missing-name-key-decorator": {
151
+ severity: "error",
152
+ messages: {
153
+ default: "Resource type 'name' property must have a @key decorator which defines its key name.",
154
+ },
155
+ },
156
+ "arm-resource-missing-name-segment-decorator": {
157
+ severity: "error",
158
+ messages: {
159
+ default: "Resource type 'name' property must have a @segment decorator which defines its path fragment.",
160
+ },
161
+ },
162
+ "arm-resource-missing-arm-namespace": {
163
+ severity: "error",
164
+ messages: {
165
+ default: "The @armProviderNamespace decorator must be used to define the ARM namespace of the service. This is best applied to the file-level namespace.",
166
+ },
167
+ },
168
+ "arm-resource-invalid-base-type": {
169
+ severity: "error",
170
+ messages: {
171
+ default: "The @armResourceInternal decorator can only be used on a type that ultimately extends TrackedResource, ProxyResource, or ExtensionResource.",
172
+ },
173
+ },
174
+ "arm-resource-missing": {
175
+ severity: "error",
176
+ messages: {
177
+ default: paramMessage `No @armResource registration found for type ${"type"}`,
178
+ },
179
+ },
180
+ "decorator-in-namespace": {
181
+ severity: "error",
182
+ messages: {
183
+ default: paramMessage `The @${"decoratorName"} decorator can only be applied to an operation that is defined inside of a namespace.`,
184
+ },
185
+ },
186
+ "parent-type": {
187
+ severity: "error",
188
+ messages: {
189
+ notResourceType: paramMessage `Parent type ${"parent"} of ${"type"} is not registered as an ARM resource type.`,
190
+ },
191
+ },
192
+ "unsupported-type": {
193
+ severity: "warning",
194
+ messages: {
195
+ default: paramMessage `Model type '${"typeName"}' is not supported in Azure resource manager APIs.`,
196
+ },
197
+ },
198
+ "resource-name": {
199
+ severity: "warning",
200
+ messages: {
201
+ default: `The resource 'name' field should be marked with 'read' visibility and an @path decorator.`,
202
+ },
203
+ },
204
+ "no-response-body": {
205
+ severity: "warning",
206
+ messages: {
207
+ default: `The body of 202 response should be empty.`,
208
+ },
209
+ },
210
+ "beyond-nesting-levels": {
211
+ severity: "warning",
212
+ messages: {
213
+ default: `Tracked Resources must use 3 or fewer levels of nesting.`,
214
+ },
215
+ },
216
+ "no-resource-delete-operation": {
217
+ severity: "warning",
218
+ messages: {
219
+ default: `The resource must have a delete operation.`,
220
+ },
221
+ },
222
+ "patch-envelope": {
223
+ severity: "warning",
224
+ messages: {
225
+ default: paramMessage `The Resource PATCH request for resource '${"resourceName"}' is missing envelope properties: [${"propertyName"}]. Since these properties are supported in the resource, they must also be updatable via PATCH.`,
226
+ },
227
+ },
228
+ "empty-updateable-properties": {
229
+ severity: "warning",
230
+ messages: {
231
+ default: `The RP-specific properties of the Resource (as defined in the 'properties' property) should have at least one updateable property. Properties are updateable if they do not have a '@visibility' decorator, or if they include 'update' in the '@visibility' decorator arguments.`,
232
+ },
233
+ },
234
+ "retry-after": {
235
+ severity: "warning",
236
+ messages: {
237
+ default: `For long-running operations, the Retry-After header indicates how long the client should wait before polling the operation status, please add this header to the 201 or 202 response for this operation.`,
238
+ },
239
+ },
240
+ "improper-subscription-list-operation": {
241
+ severity: "warning",
242
+ messages: {
243
+ default: `Tenant and Extension resources should not define a list by subscription operation.`,
244
+ },
245
+ },
246
+ },
247
+ };
248
+ export const $lib = createTypeSpecLibrary(libDef);
249
+ export const { reportDiagnostic, createStateSymbol } = $lib;
250
+ //# sourceMappingURL=lib.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/lib.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import { Program } from "@typespec/compiler";
2
+ export declare function $onValidate(program: Program): void;
3
+ //# sourceMappingURL=linter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../../src/linter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AA2C7C,wBAAgB,WAAW,CAAC,OAAO,EAAE,OAAO,QAG3C"}
@@ -0,0 +1,42 @@
1
+ import { getLinter } from "@typespec/lint";
2
+ import { $lib } from "./lib.js";
3
+ import { armResourceActionNoSegmentRule } from "./rules/arm-resource-action-no-segment.js";
4
+ import { armResourceInvalidCharsRule } from "./rules/arm-resource-invalid-chars.js";
5
+ import { armResourceInvalidVersionFormatRule } from "./rules/arm-resource-invalid-version-format.js";
6
+ import { armResourceOperationsRule } from "./rules/arm-resource-operations.js";
7
+ import { armResourceProperties } from "./rules/arm-resource-properties.js";
8
+ import { armResourceProvisioningStateRule } from "./rules/arm-resource-provisioning-state-rule.js";
9
+ import { beyondNestingRule } from "./rules/beyond-nesting-levels.js";
10
+ import { coreOperationsRule } from "./rules/core-operations.js";
11
+ import { deleteOperationMissingRule } from "./rules/delete-operation.js";
12
+ import { envelopPropertiesRules } from "./rules/envelope-properties.js";
13
+ import { listBySubscriptionRule } from "./rules/list-operation.js";
14
+ import { noResponseBody } from "./rules/no-response-body.js";
15
+ import { operationsInterfaceMissingRule } from "./rules/operations-interface-missing.js";
16
+ import { resourceNameRule } from "./rules/resource-name.js";
17
+ import { retryAfterRule } from "./rules/retry-after.js";
18
+ import { unsupportedTypeRule } from "./rules/unsupported-types.js";
19
+ const linter = getLinter($lib);
20
+ linter.registerRules([
21
+ beyondNestingRule,
22
+ armResourceActionNoSegmentRule,
23
+ armResourceInvalidVersionFormatRule,
24
+ armResourceInvalidCharsRule,
25
+ armResourceProvisioningStateRule,
26
+ armResourceProperties,
27
+ armResourceOperationsRule,
28
+ coreOperationsRule,
29
+ deleteOperationMissingRule,
30
+ envelopPropertiesRules,
31
+ listBySubscriptionRule,
32
+ noResponseBody,
33
+ operationsInterfaceMissingRule,
34
+ resourceNameRule,
35
+ retryAfterRule,
36
+ unsupportedTypeRule,
37
+ ], { autoEnable: true });
38
+ export function $onValidate(program) {
39
+ linter.autoEnableRules();
40
+ linter.lintOnValidate(program);
41
+ }
42
+ //# sourceMappingURL=linter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linter.js","sourceRoot":"","sources":["../../src/linter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,OAAO,EAAE,IAAI,EAAE,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,8BAA8B,EAAE,MAAM,2CAA2C,CAAC;AAC3F,OAAO,EAAE,2BAA2B,EAAE,MAAM,uCAAuC,CAAC;AACpF,OAAO,EAAE,mCAAmC,EAAE,MAAM,gDAAgD,CAAC;AACrG,OAAO,EAAE,yBAAyB,EAAE,MAAM,oCAAoC,CAAC;AAC/E,OAAO,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAC3E,OAAO,EAAE,gCAAgC,EAAE,MAAM,iDAAiD,CAAC;AACnG,OAAO,EAAE,iBAAiB,EAAE,MAAM,kCAAkC,CAAC;AACrE,OAAO,EAAE,kBAAkB,EAAE,MAAM,4BAA4B,CAAC;AAChE,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AACxE,OAAO,EAAE,sBAAsB,EAAE,MAAM,2BAA2B,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,6BAA6B,CAAC;AAC7D,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AACzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AAEnE,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,CAAC,CAAC;AAC/B,MAAM,CAAC,aAAa,CAClB;IACE,iBAAiB;IACjB,8BAA8B;IAC9B,mCAAmC;IACnC,2BAA2B;IAC3B,gCAAgC;IAChC,qBAAqB;IACrB,yBAAyB;IACzB,kBAAkB;IAClB,0BAA0B;IAC1B,sBAAsB;IACtB,sBAAsB;IACtB,cAAc;IACd,8BAA8B;IAC9B,gBAAgB;IAChB,cAAc;IACd,mBAAmB;CACpB,EACD,EAAE,UAAU,EAAE,IAAI,EAAE,CACrB,CAAC;AAEF,MAAM,UAAU,WAAW,CAAC,OAAgB;IAC1C,MAAM,CAAC,eAAe,EAAE,CAAC;IACzB,MAAM,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,16 @@
1
+ import { DecoratorContext, Model, Namespace, Program, Type } from "@typespec/compiler";
2
+ /**
3
+ * `@armProviderNamespace` sets the ARM provider namespace.
4
+ * @param {DecoratorContext} context DecoratorContext object
5
+ * @param {type} entity Target of the decorator. Must be `namespace` type
6
+ * @param {string} armProviderNamespace Provider namespace
7
+ */
8
+ export declare function $armProviderNamespace(context: DecoratorContext, entity: Type, armProviderNamespace?: string): void;
9
+ /**
10
+ * Get the ARM provider namespace for a given entity
11
+ * @param {Program} program
12
+ * @param {Namespace | Model} entity
13
+ * @returns {string | undefined} ARM provider namespace
14
+ */
15
+ export declare function getArmProviderNamespace(program: Program, entity: Namespace | Model): string | undefined;
16
+ //# sourceMappingURL=namespace.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namespace.d.ts","sourceRoot":"","sources":["../../src/namespace.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,gBAAgB,EAEhB,KAAK,EAEL,SAAS,EAET,OAAO,EACP,IAAI,EAEL,MAAM,oBAAoB,CAAC;AAS5B;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,IAAI,EACZ,oBAAoB,CAAC,EAAE,MAAM,QAsF9B;AAED;;;;;GAKG;AACH,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,SAAS,GAAG,KAAK,GACxB,MAAM,GAAG,SAAS,CAepB"}
@@ -0,0 +1,106 @@
1
+ import { __unsupported_enable_checkStandardOperations } from "@azure-tools/typespec-azure-core";
2
+ import { addService, getNamespaceFullName, validateDecoratorTarget, } from "@typespec/compiler";
3
+ import * as http from "@typespec/http";
4
+ import { getAuthentication, setAuthentication, setRouteOptionsForNamespace } from "@typespec/http";
5
+ import { getResourceTypeForKeyParam } from "@typespec/rest";
6
+ import { createStateSymbol, reportDiagnostic } from "./lib.js";
7
+ import { getSingletonResourceKey } from "./resource.js";
8
+ const armProviderNamespacesKey = createStateSymbol("armProviderNamespaces");
9
+ /**
10
+ * `@armProviderNamespace` sets the ARM provider namespace.
11
+ * @param {DecoratorContext} context DecoratorContext object
12
+ * @param {type} entity Target of the decorator. Must be `namespace` type
13
+ * @param {string} armProviderNamespace Provider namespace
14
+ */
15
+ export function $armProviderNamespace(context, entity, armProviderNamespace) {
16
+ const { program } = context;
17
+ if (!validateDecoratorTarget(context, entity, "@armProviderNamespace", "Namespace")) {
18
+ return;
19
+ }
20
+ if (program.stateMap(armProviderNamespacesKey).size > 0) {
21
+ reportDiagnostic(program, {
22
+ code: "single-arm-provider",
23
+ target: context.decoratorTarget,
24
+ });
25
+ return;
26
+ }
27
+ // HACK HACK HACK: Disable the linter rule that raises `use-standard-operations`
28
+ // until Azure.Core-compatible operations are implemented for Azure.ResourceManager
29
+ __unsupported_enable_checkStandardOperations(false);
30
+ // armProviderNamespace will set the service namespace if it's not done already
31
+ addService(program, entity);
32
+ if (!http.getServers(program, entity)) {
33
+ context.call(http.$server, entity, "https://management.azure.com", "Azure Resource Manager url.");
34
+ }
35
+ // 'namespace' is optional, use the actual namespace string if omitted
36
+ const typespecNamespace = getNamespaceFullName(entity);
37
+ if (!armProviderNamespace) {
38
+ armProviderNamespace = typespecNamespace;
39
+ }
40
+ program.stateMap(armProviderNamespacesKey).set(entity, armProviderNamespace);
41
+ // Set default security definitions
42
+ if (getAuthentication(program, entity) === undefined) {
43
+ setAuthentication(program, entity, {
44
+ options: [
45
+ {
46
+ schemes: [
47
+ {
48
+ id: "azure_auth",
49
+ description: "Azure Active Directory OAuth2 Flow.",
50
+ type: "oauth2",
51
+ flows: [
52
+ {
53
+ type: "implicit",
54
+ authorizationUrl: "https://login.microsoftonline.com/common/oauth2/authorize",
55
+ scopes: [
56
+ { value: "user_impersonation", description: "impersonate your user account" },
57
+ ],
58
+ },
59
+ ],
60
+ },
61
+ ],
62
+ },
63
+ ],
64
+ });
65
+ }
66
+ // Set route options for the whole namespace
67
+ setRouteOptionsForNamespace(program, entity, {
68
+ autoRouteOptions: {
69
+ // Filter key parameters for singleton resource types to insert the
70
+ // singleton key value
71
+ routeParamFilter: (operation, param) => {
72
+ const paramResourceType = getResourceTypeForKeyParam(program, param);
73
+ if (paramResourceType) {
74
+ const singletonKey = getSingletonResourceKey(program, paramResourceType);
75
+ if (singletonKey) {
76
+ return {
77
+ routeParamString: singletonKey,
78
+ excludeFromOperationParams: true,
79
+ };
80
+ }
81
+ }
82
+ // Returning undefined leaves the parameter unaffected
83
+ return undefined;
84
+ },
85
+ },
86
+ });
87
+ }
88
+ /**
89
+ * Get the ARM provider namespace for a given entity
90
+ * @param {Program} program
91
+ * @param {Namespace | Model} entity
92
+ * @returns {string | undefined} ARM provider namespace
93
+ */
94
+ export function getArmProviderNamespace(program, entity) {
95
+ let currentNamespace = entity.kind === "Namespace" ? entity : entity.namespace;
96
+ let armProviderNamespace;
97
+ while (currentNamespace) {
98
+ armProviderNamespace = program.stateMap(armProviderNamespacesKey).get(currentNamespace);
99
+ if (armProviderNamespace) {
100
+ return armProviderNamespace;
101
+ }
102
+ currentNamespace = currentNamespace.namespace;
103
+ }
104
+ return undefined;
105
+ }
106
+ //# sourceMappingURL=namespace.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../src/namespace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,36 @@
1
+ import { DecoratorContext, Model, Operation, Program, Type } from "@typespec/compiler";
2
+ import { HttpOperation } from "@typespec/http";
3
+ export type ArmLifecycleOperationKind = "read" | "createOrUpdate" | "update" | "delete";
4
+ export type ArmOperationKind = ArmLifecycleOperationKind | "list" | "action";
5
+ export interface ArmResourceOperation {
6
+ name: string;
7
+ kind: ArmOperationKind;
8
+ path: string;
9
+ operation: Operation;
10
+ operationGroup: string;
11
+ httpOperation: HttpOperation;
12
+ }
13
+ export interface ArmLifecycleOperations {
14
+ read?: ArmResourceOperation;
15
+ createOrUpdate?: ArmResourceOperation;
16
+ update?: ArmResourceOperation;
17
+ delete?: ArmResourceOperation;
18
+ }
19
+ export interface ArmResourceOperations {
20
+ lifecycle: ArmLifecycleOperations;
21
+ lists: {
22
+ [key: string]: ArmResourceOperation;
23
+ };
24
+ actions: {
25
+ [key: string]: ArmResourceOperation;
26
+ };
27
+ }
28
+ export declare function resolveResourceOperations(program: Program, resourceType: Model): ArmResourceOperations;
29
+ export declare function $armResourceRead(context: DecoratorContext, target: Type, resourceType: Type): void;
30
+ export declare function $armResourceCreateOrUpdate(context: DecoratorContext, target: Type, resourceType: Type): void;
31
+ export declare function $armResourceUpdate(context: DecoratorContext, target: Type, resourceType: Type): void;
32
+ export declare function $armResourceDelete(context: DecoratorContext, target: Type, resourceType: Type): void;
33
+ export declare function $armResourceList(context: DecoratorContext, target: Type, resourceType: Type): void;
34
+ export declare function $armRenameListByOperation(context: DecoratorContext, entity: Type, resourceType: Type, parentTypeName?: string, parentFriendlyTypeName?: string): void;
35
+ export declare function $armResourceAction(context: DecoratorContext, target: Type, resourceType: Type): void;
36
+ //# sourceMappingURL=operations.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operations.d.ts","sourceRoot":"","sources":["../../src/operations.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,gBAAgB,EAEhB,KAAK,EACL,SAAS,EACT,OAAO,EACP,IAAI,EAGL,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAsB,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAKnE,MAAM,MAAM,yBAAyB,GAAG,MAAM,GAAG,gBAAgB,GAAG,QAAQ,GAAG,QAAQ,CAAC;AACxF,MAAM,MAAM,gBAAgB,GAAG,yBAAyB,GAAG,MAAM,GAAG,QAAQ,CAAC;AAE7E,MAAM,WAAW,oBAAoB;IACnC,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,gBAAgB,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,SAAS,CAAC;IACrB,cAAc,EAAE,MAAM,CAAC;IACvB,aAAa,EAAE,aAAa,CAAC;CAC9B;AAED,MAAM,WAAW,sBAAsB;IACrC,IAAI,CAAC,EAAE,oBAAoB,CAAC;IAC5B,cAAc,CAAC,EAAE,oBAAoB,CAAC;IACtC,MAAM,CAAC,EAAE,oBAAoB,CAAC;IAC9B,MAAM,CAAC,EAAE,oBAAoB,CAAC;CAC/B;AAED,MAAM,WAAW,qBAAqB;IACpC,SAAS,EAAE,sBAAsB,CAAC;IAClC,KAAK,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAAA;KAAE,CAAC;IAC/C,OAAO,EAAE;QAAE,CAAC,GAAG,EAAE,MAAM,GAAG,oBAAoB,CAAA;KAAE,CAAC;CAClD;AAeD,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,OAAO,EAChB,YAAY,EAAE,KAAK,GAClB,qBAAqB,CAkBvB;AA0CD,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,QAE3F;AAED,wBAAgB,0BAA0B,CACxC,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,IAAI,EACZ,YAAY,EAAE,IAAI,QASnB;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,QAE7F;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,QAE7F;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,QAgC3F;AAED,wBAAgB,yBAAyB,CACvC,OAAO,EAAE,gBAAgB,EACzB,MAAM,EAAE,IAAI,EACZ,YAAY,EAAE,IAAI,EAClB,cAAc,CAAC,EAAE,MAAM,EACvB,sBAAsB,CAAC,EAAE,MAAM,QAoDhC;AAkBD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,gBAAgB,EAAE,MAAM,EAAE,IAAI,EAAE,YAAY,EAAE,IAAI,QAwC7F"}