@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,87 @@
1
+ using TypeSpec.Reflection;
2
+
3
+ namespace Azure.ResourceManager;
4
+
5
+ /**
6
+ * `@armProviderNamespace` sets the ARM provider name. It will default to use the
7
+ * Namespace element value unless an override value is specified.
8
+ *
9
+ * @example
10
+ *
11
+ * ```typespec
12
+ * @armProviderNamespace
13
+ * namespace Microsoft.Contoso;
14
+ * ```
15
+ *
16
+ * ```typespec
17
+ * @armProviderNamespace("Microsoft.Contoso")
18
+ * namespace Microsoft.ContosoService;
19
+ * ```
20
+ *
21
+ * @param providerNamespace Provider namespace
22
+ */
23
+ extern dec armProviderNamespace(target: Namespace, providerNamespace?: string);
24
+
25
+ /**
26
+ * `@singleton` marks an ARM resource model as a singleton resource.
27
+ *
28
+ * Singleton resources only have a single instance with a fixed key name.
29
+ * `.../providers/Microsoft.Contoso/monthlyReports/default`
30
+ *
31
+ * See more details on [different ARM resource type here.](https://azure.github.io/typespec-azure/docs/howtos/ARM/resource-type)
32
+ *
33
+ * @param keyValue The name of the singleton resource. Default name is "default".
34
+ */
35
+ extern dec singleton(target: object, keyValue?: string | "default");
36
+
37
+ /**
38
+ * `@tenantResource` marks an ARM resource model as a Tenant resource/Root resource/Top-Level resource.
39
+ *
40
+ * Tenant resources have REST API paths like:
41
+ * `/provider/Microsoft.Contoso/FooResources`
42
+ *
43
+ * See more details on [different ARM resource type here.](https://azure.github.io/typespec-azure/docs/howtos/ARM/resource-type)
44
+ */
45
+ extern dec tenantResource(target: object);
46
+
47
+ /**
48
+ * `@subscriptionResource` marks an ARM resource model as a subscription resource.
49
+ *
50
+ * Subscription resources have REST API paths like:
51
+ * `/subscription/{id}/providers/Microsoft.Contoso/employees`
52
+ *
53
+ * See more details on [different ARM resource type here.](https://azure.github.io/typespec-azure/docs/howtos/ARM/resource-type)
54
+ */
55
+ extern dec subscriptionResource(target: object);
56
+
57
+ /**
58
+ * `@locationResource` marks an ARM resource model as a location based resource.
59
+ *
60
+ * Location based resources have REST API paths like
61
+ * `/subscriptions/{subscriptionId}/locations/{location}/providers/Microsoft.Contoso/employees`
62
+ *
63
+ * See more details on [different ARM resource type here.](https://azure.github.io/typespec-azure/docs/howtos/ARM/resource-type)
64
+ */
65
+ extern dec locationResource(target: object);
66
+
67
+ /**
68
+ * `@resourceGroupResource` marks an ARM resource model as a resource group level resource.
69
+ * This is the default option for ARM resources. It is provided for symmetry and clarity, and
70
+ * you typically do not need to specify it.
71
+ *
72
+ * `/subscription/{id}/resourcegroups/{rg}/providers/Microsoft.Contoso/employees`
73
+ *
74
+ * See more details on [different ARM resource type here.](https://azure.github.io/typespec-azure/docs/howtos/ARM/resource-type)
75
+ */
76
+ extern dec resourceGroupResource(target: object);
77
+
78
+ /**
79
+ * `@extensionResource` marks an ARM resource model as an Extension resource.
80
+ * Extension resource extends other resource types. URL path is appended
81
+ * to another segment {scope} which refers to another Resource URL.
82
+ *
83
+ * `{resourceUri}/providers/Microsoft.Contoso/accessPermissions`
84
+ *
85
+ * See more details on [different ARM resource type here.](https://azure.github.io/typespec-azure/docs/howtos/ARM/resource-type)
86
+ */
87
+ extern dec extensionResource(target: object);
@@ -0,0 +1,287 @@
1
+ using TypeSpec.Http;
2
+ using TypeSpec.Rest;
3
+ using OpenAPI;
4
+ using Autorest;
5
+ using Azure.ResourceManager.Foundations;
6
+
7
+ namespace Azure.ResourceManager;
8
+
9
+ /**
10
+ * This is the interface that implements the standard ARM operation that returns
11
+ * all supported RP operations. You should have exactly one declaration for each
12
+ * ARM service. It implements
13
+ * GET "/providers/Microsoft.ContosoProviderHub/operations"
14
+ */
15
+ interface Operations {
16
+ @tag("Operations")
17
+ @autoRoute
18
+ @armUpdateProviderNamespace
19
+ @doc("List the operations for the provider")
20
+ @segment("operations")
21
+ @get
22
+ list(
23
+ ...ApiVersionParameter,
24
+
25
+ @path
26
+ @segment("providers")
27
+ @doc("The provider namespace (this parameter will not show up in operations).")
28
+ provider: "Microsoft.ThisWillBeReplaced"
29
+ ): ArmResponse<OperationListResult> | ErrorResponse;
30
+ }
31
+
32
+ /**
33
+ * @deprecated Use Azure.ResourceManager.TrackedResourceOperations instead
34
+ * A composite interface for resources that include `ResourceInstanceOperations<TResource, TProperties>`
35
+ * and `ResourceCollectionOperations<TResource>`. It includes: `GET`, `PUT`, `PATCH`, `DELETE`, ListByParent,
36
+ * ListBySubscription operations. The actual route depends on the resource model.
37
+ * This is the most common API pattern for Tracked Resources to use.
38
+ * @template TResource the ArmResource that provides these operations
39
+ * @template TProperties RP-specific property bag for the resource
40
+ * @template TBaseParameters The http parameters that are part of the request
41
+ *
42
+ */
43
+
44
+ @deprecated("Use Azure.ResourceManager.TrackedResourceOperations instead")
45
+ interface ResourceOperations<
46
+ TResource extends ArmResource,
47
+ TProperties extends object,
48
+ TBaseParameters = BaseParameters<TResource>
49
+ > extends TrackedResourceOperations<TResource, TProperties, TBaseParameters> {}
50
+
51
+ /**
52
+ * A composite interface for resources that include `ResourceInstanceOperations<TResource, TProperties>`
53
+ * and `ResourceCollectionOperations<TResource>`. It includes: `GET`, `PUT`, `PATCH`, `DELETE`, ListByParent,
54
+ * ListBySubscription operations. The actual route depends on the resource model.
55
+ * This is the most common API pattern for Tracked Resources to use.
56
+ * @template TResource the ArmResource that provides these operations
57
+ * @template TProperties RP-specific property bag for the resource
58
+ * @template TBaseParameters The http parameters that are part of the request
59
+ *
60
+ */
61
+
62
+ interface TrackedResourceOperations<
63
+ TResource extends ArmResource,
64
+ TProperties extends object,
65
+ TBaseParameters = BaseParameters<TResource>
66
+ >
67
+ extends ResourceInstanceOperations<TResource, TProperties, TBaseParameters>,
68
+ ResourceCollectionOperations<TResource, TBaseParameters> {}
69
+
70
+ /**
71
+ * A composite interface for Proxy resources that include `ResourceInstanceOperations<TResource, TProperties>`
72
+ * and `ResourceListByParent<TResource>`. It includes: `GET`, `PUT`, `PATCH`, `DELETE`, ListByParent operations.
73
+ *
74
+ * The actual route depends on the resource model but would have started with
75
+ * `/subscriptions/{id}/resourcegroups/{rg}/providers/Microsoft.XXX/...`
76
+ *
77
+ * This is the most common API pattern for Proxy Resources to use.
78
+ */
79
+ interface ProxyResourceOperations<
80
+ TResource extends ArmResource,
81
+ TBaseParameters = BaseParameters<TResource>
82
+ >
83
+ extends ResourceRead<TResource, TBaseParameters>,
84
+ ResourceCreate<TResource, TBaseParameters>,
85
+ ResourceDelete<TResource, TBaseParameters>,
86
+ ResourceListByParent<TResource, TBaseParameters> {}
87
+
88
+ /**
89
+ * A composite interface for Tenant resources that include `ResourceInstanceOperations<TResource, TProperties>`
90
+ * and `ResourceListByParent<TResource>`. It includes: `GET`, `PUT`, `PATCH`, `DELETE`, ListByParent operations.
91
+ *
92
+ * The routes are always start at root level:
93
+ * `/providers/Microsoft.XXX/...`
94
+ *
95
+ * This is the most common API pattern for Tenant Resources to use.
96
+ */
97
+ interface TenantResourceOperations<TResource extends ArmResource, TProperties extends object>
98
+ extends TenantResourceRead<TResource>,
99
+ TenantResourceCreate<TResource>,
100
+ TenantResourceUpdate<TResource, TProperties>,
101
+ TenantResourceDelete<TResource>,
102
+ TenantResourceListByParent<TResource> {}
103
+
104
+ interface ResourceInstanceOperations<
105
+ TResource extends ArmResource,
106
+ TProperties extends object,
107
+ TBaseParameters = BaseParameters<TResource>,
108
+ TPatchModel = ResourceUpdateModel<TResource, TProperties>
109
+ >
110
+ extends ResourceRead<TResource, TBaseParameters>,
111
+ ResourceCreate<TResource, TBaseParameters>,
112
+ ResourceUpdate<TResource, TProperties, TBaseParameters>,
113
+ ResourceDelete<TResource, TBaseParameters> {}
114
+
115
+ interface ResourceCollectionOperations<
116
+ TResource extends ArmResource,
117
+ TBaseParameters = BaseParameters<TResource>
118
+ > extends ResourceListByParent<TResource, TBaseParameters>, ResourceListBySubscription<TResource> {}
119
+
120
+ interface ResourceListBySubscription<TResource extends ArmResource> {
121
+ listBySubscription is ArmListBySubscription<TResource>;
122
+ }
123
+
124
+ interface ResourceListByParent<
125
+ TResource extends ArmResource,
126
+ TBaseParameters = BaseParameters<TResource>,
127
+ TParentName = "",
128
+ TParentFriendlyName = ""
129
+ > {
130
+ listByParent is ArmResourceListByParent<
131
+ TResource,
132
+ TBaseParameters,
133
+ TParentName,
134
+ TParentFriendlyName
135
+ >;
136
+ }
137
+
138
+ interface ResourceRead<TResource extends ArmResource, TBaseParameters = BaseParameters<TResource>> {
139
+ get is ArmResourceRead<TResource, TBaseParameters>;
140
+ }
141
+
142
+ interface ResourceCreateSync<
143
+ TResource extends ArmResource,
144
+ TBaseParameters = BaseParameters<TResource>
145
+ > {
146
+ createOrUpdate is ArmResourceCreateOrUpdateSync<TResource, TBaseParameters>;
147
+ }
148
+
149
+ interface ResourceCreateAsync<
150
+ TResource extends ArmResource,
151
+ TBaseParameters = BaseParameters<TResource>
152
+ > {
153
+ createOrUpdate is ArmResourceCreateOrUpdateAsync<TResource, TBaseParameters>;
154
+ }
155
+
156
+ @doc("Delete a resource using the asynchronous call pattern")
157
+ interface ResourceDeleteAsync<
158
+ TResource extends ArmResource,
159
+ TBaseParameters = BaseParameters<TResource>
160
+ > {
161
+ delete is ArmResourceDeleteAsync<TResource, TBaseParameters>;
162
+ }
163
+
164
+ @doc("Delete a resource")
165
+ interface ResourceDeleteSync<
166
+ TResource extends ArmResource,
167
+ TBaseParameters = BaseParameters<TResource>
168
+ > {
169
+ delete is ArmResourceDeleteSync<TResource, TBaseParameters>;
170
+ }
171
+
172
+ @doc("Asynchronous resource update")
173
+ interface ResourceUpdateAsync<
174
+ TResource extends ArmResource,
175
+ TProperties extends object,
176
+ TBaseParameters = BaseParameters<TResource>
177
+ > {
178
+ update is ArmCustomPatchAsync<
179
+ TResource,
180
+ ResourceUpdateModel<TResource, TProperties>,
181
+ TBaseParameters
182
+ >;
183
+ }
184
+
185
+ @doc("Synchronous resource update")
186
+ interface ResourceUpdateSync<
187
+ TResource extends ArmResource,
188
+ TProperties extends object,
189
+ TBaseParameters = BaseParameters<TResource>
190
+ > {
191
+ update is ArmCustomPatchSync<
192
+ TResource,
193
+ ResourceUpdateModel<TResource, TProperties>,
194
+ TBaseParameters
195
+ >;
196
+ }
197
+
198
+ interface ExtensionResourceInstanceOperations<
199
+ TResource extends ArmResource,
200
+ TProperties extends object
201
+ >
202
+ extends ExtensionResourceRead<TResource>,
203
+ ExtensionResourceCreate<TResource>,
204
+ ExtensionResourceUpdate<TResource, TProperties>,
205
+ ExtensionResourceDelete<TResource> {}
206
+
207
+ interface ExtensionResourceCollectionOperations<TResource extends ArmResource>
208
+ extends ExtensionResourceList<TResource> {}
209
+
210
+ interface ExtensionResourceOperations<TResource extends ArmResource, TProperties extends object>
211
+ extends ExtensionResourceInstanceOperations<TResource, TProperties>,
212
+ ExtensionResourceCollectionOperations<TResource> {}
213
+
214
+ alias ResourceCreate<
215
+ TResource extends ArmResource,
216
+ TBaseParameters = BaseParameters<TResource>
217
+ > = ResourceCreateAsync<TResource, TBaseParameters>;
218
+
219
+ alias ResourceUpdate<
220
+ TResource extends ArmResource,
221
+ TProperties extends object,
222
+ TBaseParameters = BaseParameters<TResource>
223
+ > = ResourceUpdateSync<TResource, TProperties, TBaseParameters>;
224
+
225
+ alias ResourceDelete<
226
+ TResource extends ArmResource,
227
+ TBaseParameters = BaseParameters<TResource>
228
+ > = ResourceDeleteAsync<TResource, TBaseParameters>;
229
+
230
+ alias ProxyResourceUpdate<
231
+ TResource extends ArmResource,
232
+ TProperties extends object
233
+ > = ResourceUpdate<TResource, TProperties>;
234
+
235
+ alias ExtensionResourceRead<TResource extends ArmResource> = ResourceRead<
236
+ TResource,
237
+ ExtensionBaseParameters
238
+ >;
239
+
240
+ alias ExtensionResourceCreate<TResource extends ArmResource> = ResourceCreate<
241
+ TResource,
242
+ ExtensionBaseParameters
243
+ >;
244
+
245
+ alias ExtensionResourceUpdate<
246
+ TResource extends ArmResource,
247
+ TProperties extends object
248
+ > = ResourceUpdate<TResource, TProperties, ExtensionBaseParameters>;
249
+
250
+ alias ExtensionResourceDelete<TResource extends ArmResource> = ResourceDelete<
251
+ TResource,
252
+ ExtensionBaseParameters
253
+ >;
254
+
255
+ alias ExtensionResourceList<TResource extends ArmResource> = ResourceListByParent<
256
+ TResource,
257
+ ExtensionBaseParameters,
258
+ "Extension",
259
+ "parent"
260
+ >;
261
+
262
+ alias TenantResourceRead<TResource extends ArmResource> = ResourceRead<
263
+ TResource,
264
+ TenantBaseParameters
265
+ >;
266
+
267
+ alias TenantResourceCreate<TResource extends ArmResource> = ResourceCreateAsync<
268
+ TResource,
269
+ TenantBaseParameters
270
+ >;
271
+
272
+ alias TenantResourceDelete<TResource extends ArmResource> = ResourceDelete<
273
+ TResource,
274
+ TenantBaseParameters
275
+ >;
276
+
277
+ alias TenantResourceUpdate<
278
+ TResource extends ArmResource,
279
+ TProperties extends object
280
+ > = ResourceUpdate<TResource, TProperties, TenantBaseParameters>;
281
+
282
+ alias TenantResourceListByParent<TResource extends ArmResource> = ResourceListByParent<
283
+ TResource,
284
+ TenantBaseParameters,
285
+ "Tenant",
286
+ "tenant"
287
+ >;
package/lib/models.tsp ADDED
@@ -0,0 +1,203 @@
1
+ using TypeSpec.Http;
2
+ using TypeSpec.Rest;
3
+ using OpenAPI;
4
+ using Azure.ResourceManager.Foundations;
5
+
6
+ namespace Azure.ResourceManager;
7
+
8
+ //#region Standard Resource Operation Interfaces
9
+ /**
10
+ * Concrete tracked resource types can be created by aliasing this type using a specific property type.
11
+ *
12
+ * See more details on [different ARM resource type here.](https://azure.github.io/typespec-azure/docs/howtos/ARM/resource-type)
13
+ */
14
+ @doc("Concrete tracked resource types can be created by aliasing this type using a specific property type.")
15
+ @armResourceInternal(TProperties)
16
+ @includeInapplicableMetadataInPayload(false)
17
+ model TrackedResource<TProperties> extends TrackedResourceBase {
18
+ @doc("The resource-specific properties for this resource.")
19
+ @visibility("read", "create")
20
+ @extension("x-ms-client-flatten", true)
21
+ properties?: TProperties;
22
+ }
23
+
24
+ /**
25
+ * Concrete proxy resource types can be created by aliasing this type using a specific property type.
26
+ *
27
+ * See more details on [different ARM resource type here.](https://azure.github.io/typespec-azure/docs/howtos/ARM/resource-type)
28
+ */
29
+ @doc("Concrete proxy resource types can be created by aliasing this type using a specific property type.")
30
+ @armResourceInternal(TProperties)
31
+ @includeInapplicableMetadataInPayload(false)
32
+ model ProxyResource<TProperties> extends ProxyResourceBase {
33
+ @doc("The resource-specific properties for this resource.")
34
+ @visibility("read", "create")
35
+ @extension("x-ms-client-flatten", true)
36
+ properties?: TProperties;
37
+ }
38
+
39
+ /**
40
+ * Concrete extension resource types can be created by aliasing this type using a specific property type.
41
+ *
42
+ * See more details on [different ARM resource type here.](https://azure.github.io/typespec-azure/docs/howtos/ARM/resource-type)
43
+ */
44
+ @extensionResource
45
+ @doc("Concrete extension resource types can be created by aliasing this type using a specific property type.")
46
+ @armResourceInternal(TProperties)
47
+ @includeInapplicableMetadataInPayload(false)
48
+ model ExtensionResource<TProperties> extends ExtensionResourceBase {
49
+ @doc("The resource-specific properties for this resource.")
50
+ @visibility("read", "create")
51
+ @extension("x-ms-client-flatten", true)
52
+ properties?: TProperties;
53
+ }
54
+ //#region
55
+
56
+ //#region Standard extraction models
57
+ @copyResourceKeyParameters
58
+ model KeysOf<TResource> {}
59
+
60
+ @copyResourceKeyParameters("parent")
61
+ model ParentKeysOf<TResource> {}
62
+
63
+ model ProviderNamespace<TResource> {
64
+ @path
65
+ @segment("providers")
66
+ @assignProviderNameValue(TResource)
67
+ @doc("The provider namespace for the resource.")
68
+ provider: "Microsoft.ThisWillBeReplaced";
69
+ }
70
+ //#endregion
71
+
72
+ //#region Common ARM type definitions
73
+
74
+ /**
75
+ * A type definition that refers the id to an ARM resource.
76
+ *
77
+ * Sample usage:
78
+ * otherArmId: ResourceIdentifier;
79
+ * networkId: ResourceIdentifier<[{type:"\\Microsoft.Network\\vnet"}]>
80
+ * vmIds: ResourceIdentifier<[{type:"\\Microsoft.Compute\\vm", scopes["*"]}]>
81
+ */
82
+ @doc("A type definition that refers the id to an ARM resource.")
83
+ @format("arm-id")
84
+ @OpenAPI.extension(
85
+ "x-ms-arm-id-details",
86
+ {
87
+ allowedResources: T,
88
+ }
89
+ )
90
+ scalar ResourceIdentifier<T extends ResourceIdentifierAllowedResource[] = {}> extends string;
91
+
92
+ /**
93
+ * Used in ResourceIdentifier definition to represent a particular type of ARM resource, enabling constraints based on resource type.
94
+ * See [link](https://github.com/Azure/autorest/tree/main/docs/extensions#schema)
95
+ */
96
+ @doc("Optional definition represents a particular type of ARM resource which can be referred to by a ResourceIdentifier.")
97
+ model ResourceIdentifierAllowedResource {
98
+ @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.")
99
+ type: string;
100
+
101
+ @doc("""
102
+ An array of scopes. If not specified, the default scope is ["ResourceGroup"].
103
+ See [Allowed Scopes](https://github.com/Azure/autorest/tree/main/docs/extensions#allowed-scopes).
104
+ """)
105
+ scopes?: string[] = [];
106
+ }
107
+
108
+ /**
109
+ * Standard terminal provisioning state of resource type. You can spread into your
110
+ * custom provision state to avoid duplication and ensure consistency
111
+ *
112
+ * @example
113
+ *
114
+ * ```typespec
115
+ * enum FooProvisioningState {
116
+ * ...ResourceProvisioningState, // include standard provisioning states
117
+ * starting,
118
+ * started,
119
+ * stopping,
120
+ * stopped,
121
+ * }
122
+ * ```
123
+ */
124
+ @doc("The provisioning state of a resource type.")
125
+ @Azure.Core.lroStatus
126
+ enum ResourceProvisioningState {
127
+ Succeeded,
128
+ Failed,
129
+ Canceled,
130
+ }
131
+
132
+ /**
133
+ * Standard resource provisioning state model. If you do not have any custom provisioning state,
134
+ * you can spread this model directly into your resource property model.
135
+ *
136
+ * @example
137
+ *
138
+ * ```typespec
139
+ * model FooProperties {
140
+ * // Only have standard Succeeded, Failed, Cancelled states
141
+ * ...DefaultProvisioningStateProperty,
142
+ * }
143
+ * ```
144
+ */
145
+ @doc("Contains a default provisioningState property to be spread into resource property types")
146
+ model DefaultProvisioningStateProperty {
147
+ @doc("The provisioning state of the resource.")
148
+ provisioningState: ResourceProvisioningState;
149
+ }
150
+
151
+ /**
152
+ * Standard ARM definition of ManagedServiceIdentity
153
+ */
154
+ @doc("The managed service identities envelope.")
155
+ model ManagedServiceIdentity {
156
+ @doc("The managed service identities assigned to this resource.")
157
+ identity?: ManagedIdentityProperties;
158
+ }
159
+
160
+ @doc("Managed identity for services that are constrained to system-assigned managed identities.")
161
+ model ManagedSystemAssignedIdentity {
162
+ @doc("The managed service identities assigned to this resource.")
163
+ identity?: ManagedSystemIdentityProperties;
164
+ }
165
+
166
+ @doc("The eTag property envelope.")
167
+ model EntityTag {
168
+ @doc("If eTag is provided in the response body, it may also be provided as a header per the normal etag convention. Entity tags are used for comparing two or more entities from the same requested resource. HTTP/1.1 uses entity tags in the etag (section 14.19), If-Match (section 14.24), If-None-Match (section 14.26), and If-Range (section 14.27) header fields.")
169
+ @visibility("read")
170
+ eTag?: string;
171
+ }
172
+
173
+ @doc("The resource kind property envelope.")
174
+ model ResourceKind {
175
+ @doc("Metadata used by portal/tooling/etc to render different UX experiences for resources of the same type; e.g. ApiApps are a kind of Microsoft.Web/sites type. If supported, the resource provider must validate and persist this value.")
176
+ @pattern("^[-\\w\\._,\\(\\\\\\)]+$")
177
+ @visibility("read", "create")
178
+ kind?: string;
179
+ }
180
+
181
+ @doc("The response of a {name} list operation.", TResource)
182
+ @friendlyName("{name}ListResult", TResource)
183
+ model ResourceListResult<TResource extends ArmResource> is Azure.Core.Page<TResource>;
184
+
185
+ @doc("The resource plan property envelope.")
186
+ model ResourcePlan {
187
+ @doc("Details of the resource plan.")
188
+ plan?: ResourcePlanType;
189
+ }
190
+
191
+ @doc("The SKU (Stock Keeping Unit) assigned to this resource.")
192
+ model ResourceSku {
193
+ @doc("The SKU (Stock Keeping Unit) assigned to this resource.")
194
+ sku?: ResourceSkuType;
195
+ }
196
+
197
+ @doc("The managedBy property envelope.")
198
+ model ManagedBy {
199
+ @doc("The fully qualified resource ID of the resource that manages this resource. Indicates if this resource is managed by another Azure resource. If this is present, complete mode deployment will not delete the resource if it is removed from the template since it is managed by another resource.")
200
+ managedBy?: string;
201
+ }
202
+
203
+ //#endregion