@azure-tools/typespec-azure-resource-manager 0.71.0-dev.6 → 0.71.0-dev.7

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 CHANGED
@@ -30,6 +30,7 @@ Available ruleSets:
30
30
  | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
31
31
  | [`@azure-tools/typespec-azure-resource-manager/arm-agent-base-type-child-resources`](https://azure.github.io/typespec-azure/docs/libraries/azure-resource-manager/rules/arm-agent-base-type-child-resources) | Resources decorated with @azureBaseType for the Agent base type must have both a Conversation and a Response child resource. |
32
32
  | [`@azure-tools/typespec-azure-resource-manager/arm-agent-base-type-lifecycle-operations`](https://azure.github.io/typespec-azure/docs/libraries/azure-resource-manager/rules/arm-agent-base-type-lifecycle-operations) | Conversation and Response child resources of an Agent must define create, read, update, and delete lifecycle operations. |
33
+ | [`@azure-tools/typespec-azure-resource-manager/use-relationship-required-properties`](https://azure.github.io/typespec-azure/docs/libraries/azure-resource-manager/rules/use-relationship-required-properties) | Resources decorated with @azureBaseType for the Relationship base type must be extension resources with the required Relationship schema. |
33
34
  | [`@azure-tools/typespec-azure-resource-manager/arm-no-record`](https://azure.github.io/typespec-azure/docs/libraries/azure-resource-manager/rules/arm-no-record) | Don't use Record types for ARM resources. |
34
35
  | [`@azure-tools/typespec-azure-resource-manager/arm-no-path-casing-conflicts`](https://azure.github.io/typespec-azure/docs/libraries/azure-resource-manager/rules/arm-no-path-casing-conflicts) | Operation paths must be unique when compared case-insensitively. |
35
36
  | [`@azure-tools/typespec-azure-resource-manager/no-override-props`](https://azure.github.io/typespec-azure/docs/libraries/azure-resource-manager/rules/no-override-props) | Disallow redefining properties already defined in a base type. |
@@ -1 +1 @@
1
- {"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../../src/linter.ts"],"names":[],"mappings":"AAuFA,eAAO,MAAM,OAAO,+CAElB,CAAC"}
1
+ {"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../../src/linter.ts"],"names":[],"mappings":"AAyFA,eAAO,MAAM,OAAO,+CAElB,CAAC"}
@@ -39,10 +39,12 @@ import { resourceNameRule } from "./rules/resource-name.js";
39
39
  import { retryAfterRule } from "./rules/retry-after.js";
40
40
  import { secretProprule } from "./rules/secret-prop.js";
41
41
  import { unsupportedTypeRule } from "./rules/unsupported-type.js";
42
+ import { useRelationshipRequiredPropertiesRule } from "./rules/use-relationship-required-properties.js";
42
43
  import { versionProgressionRule } from "./rules/version-progression.js";
43
44
  const rules = [
44
45
  armAgentBaseTypeChildResourcesRule,
45
46
  armAgentBaseTypeLifecycleOperationsRule,
47
+ useRelationshipRequiredPropertiesRule,
46
48
  armNoRecordRule,
47
49
  armNoPathCasingConflictsRule,
48
50
  noOverridePropsRule,
@@ -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":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAClD,OAAO,EAAE,kCAAkC,EAAE,MAAM,gDAAgD,CAAC;AACpG,OAAO,EAAE,uCAAuC,EAAE,MAAM,qDAAqD,CAAC;AAC9G,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,sBAAsB,EAAE,MAAM,uCAAuC,CAAC;AAC/E,OAAO,EAAE,gCAAgC,EAAE,MAAM,iDAAiD,CAAC;AACnG,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAClF,OAAO,EAAE,6BAA6B,EAAE,MAAM,8CAA8C,CAAC;AAC7F,OAAO,EAAE,4BAA4B,EAAE,MAAM,yCAAyC,CAAC;AACvF,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAC3D,OAAO,EAAE,wBAAwB,EAAE,MAAM,oCAAoC,CAAC;AAC9E,OAAO,EAAE,uBAAuB,EAAE,MAAM,mCAAmC,CAAC;AAC5E,OAAO,EAAE,8BAA8B,EAAE,MAAM,2CAA2C,CAAC;AAC3F,OAAO,EAAE,kCAAkC,EAAE,MAAM,4CAA4C,CAAC;AAChG,OAAO,EAAE,cAAc,EAAE,MAAM,oCAAoC,CAAC;AACpE,OAAO,EAAE,gCAAgC,EAAE,MAAM,6CAA6C,CAAC;AAC/F,OAAO,EAAE,6BAA6B,EAAE,MAAM,mDAAmD,CAAC;AAClG,OAAO,EAAE,mCAAmC,EAAE,MAAM,gDAAgD,CAAC;AACrG,OAAO,EAAE,8BAA8B,EAAE,MAAM,2CAA2C,CAAC;AAC3F,OAAO,EAAE,0BAA0B,EAAE,MAAM,sCAAsC,CAAC;AAClF,OAAO,EAAE,yBAAyB,EAAE,MAAM,4CAA4C,CAAC;AACvF,OAAO,EAAE,mBAAmB,EAAE,MAAM,+BAA+B,CAAC;AACpE,OAAO,EAAE,+BAA+B,EAAE,MAAM,4CAA4C,CAAC;AAC7F,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,uBAAuB,EAAE,MAAM,gCAAgC,CAAC;AACzE,OAAO,EAAE,qCAAqC,EAAE,MAAM,iDAAiD,CAAC;AACxG,OAAO,EAAE,qBAAqB,EAAE,MAAM,gCAAgC,CAAC;AACvE,OAAO,EAAE,yBAAyB,EAAE,MAAM,qCAAqC,CAAC;AAChF,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,mBAAmB,EAAE,MAAM,8BAA8B,CAAC;AACnE,OAAO,EAAE,8BAA8B,EAAE,MAAM,0CAA0C,CAAC;AAC1F,OAAO,EAAE,0BAA0B,EAAE,MAAM,yCAAyC,CAAC;AACrF,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,8BAA8B,EAAE,MAAM,yCAAyC,CAAC;AACzF,OAAO,EAAE,4BAA4B,EAAE,MAAM,sCAAsC,CAAC;AACpF,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,mBAAmB,EAAE,MAAM,6BAA6B,CAAC;AAClE,OAAO,EAAE,qCAAqC,EAAE,MAAM,iDAAiD,CAAC;AACxG,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAExE,MAAM,KAAK,GAAG;IACZ,kCAAkC;IAClC,uCAAuC;IACvC,qCAAqC;IACrC,eAAe;IACf,4BAA4B;IAC5B,mBAAmB;IACnB,yBAAyB;IACzB,0BAA0B;IAC1B,uBAAuB;IACvB,wBAAwB;IACxB,8BAA8B;IAC9B,kCAAkC;IAClC,6BAA6B;IAC7B,mCAAmC;IACnC,8BAA8B;IAC9B,0BAA0B;IAC1B,yBAAyB;IACzB,+BAA+B;IAC/B,gCAAgC;IAChC,sBAAsB;IACtB,sBAAsB;IACtB,gCAAgC;IAChC,6BAA6B;IAC7B,iBAAiB;IACjB,kBAAkB;IAClB,0BAA0B;IAC1B,uBAAuB;IACvB,cAAc;IACd,gCAAgC;IAChC,qCAAqC;IACrC,qBAAqB;IACrB,yBAAyB;IACzB,kBAAkB;IAClB,8BAA8B;IAC9B,4BAA4B;IAC5B,mBAAmB;IACnB,gBAAgB;IAChB,cAAc;IACd,mBAAmB;IACnB,cAAc;IACd,YAAY;IACZ,8BAA8B;CAC/B,CAAC;AAEF,MAAM,CAAC,MAAM,OAAO,GAAG,YAAY,CAAC;IAClC,KAAK;CACN,CAAC,CAAC"}
@@ -0,0 +1,5 @@
1
+ export declare const useRelationshipRequiredPropertiesRule: import("@typespec/compiler").LinterRuleDefinition<"use-relationship-required-properties", {
2
+ readonly missingProperties: import("@typespec/compiler").CallableMessage<["missing"]>;
3
+ readonly notExtension: "Relationship resources must be extension resources.";
4
+ }, Record<string, never>>;
5
+ //# sourceMappingURL=use-relationship-required-properties.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-relationship-required-properties.d.ts","sourceRoot":"","sources":["../../../src/rules/use-relationship-required-properties.ts"],"names":[],"mappings":"AAKA,eAAO,MAAM,qCAAqC;;;yBAqFhD,CAAC"}
@@ -0,0 +1,79 @@
1
+ import { createRule, getProperty, paramMessage } from "@typespec/compiler";
2
+ import { getAzureBaseTypes } from "../base-types.js";
3
+ import { getArmResources } from "../resource.js";
4
+ export const useRelationshipRequiredPropertiesRule = createRule({
5
+ name: "use-relationship-required-properties",
6
+ severity: "warning",
7
+ description: "Resources decorated with @azureBaseType for the Relationship base type must be extension resources with the required Relationship schema.",
8
+ url: "https://azure.github.io/typespec-azure/docs/libraries/azure-resource-manager/rules/use-relationship-required-properties",
9
+ messages: {
10
+ missingProperties: paramMessage `Relationship resources must include required properties: ${"missing"}.`,
11
+ notExtension: "Relationship resources must be extension resources.",
12
+ },
13
+ create(context) {
14
+ return {
15
+ root: (program) => {
16
+ const relationshipResources = getArmResources(program).filter((r) => hasRelationshipBaseType(r.typespecType));
17
+ for (const relationshipResource of relationshipResources) {
18
+ if (relationshipResource.kind !== "Extension") {
19
+ context.reportDiagnostic({
20
+ messageId: "notExtension",
21
+ target: relationshipResource.typespecType,
22
+ });
23
+ }
24
+ const properties = getProperty(relationshipResource.typespecType, "properties")?.type;
25
+ if (properties?.kind !== "Model") {
26
+ context.reportDiagnostic({
27
+ messageId: "missingProperties",
28
+ format: {
29
+ missing: "sourceId, sourceTenant, targetId, targetTenant, provisioningState",
30
+ },
31
+ target: relationshipResource.typespecType,
32
+ });
33
+ continue;
34
+ }
35
+ const missing = [
36
+ "sourceId",
37
+ "sourceTenant",
38
+ "targetId",
39
+ "targetTenant",
40
+ "provisioningState",
41
+ ].filter((propertyName) => getProperty(properties, propertyName) === undefined);
42
+ if (missing.length > 0) {
43
+ context.reportDiagnostic({
44
+ messageId: "missingProperties",
45
+ format: { missing: missing.join(", ") },
46
+ target: properties,
47
+ });
48
+ }
49
+ }
50
+ },
51
+ };
52
+ function hasRelationshipBaseType(model) {
53
+ const visited = new Set();
54
+ return hasRelationshipBaseTypeInternal(model, visited);
55
+ }
56
+ function hasRelationshipBaseTypeInternal(model, visited) {
57
+ if (visited.has(model))
58
+ return false;
59
+ visited.add(model);
60
+ const directTypes = getAzureBaseTypes(context.program, model);
61
+ if (directTypes && isRelationship(directTypes))
62
+ return true;
63
+ if (model.baseModel && hasRelationshipBaseTypeInternal(model.baseModel, visited)) {
64
+ return true;
65
+ }
66
+ if (model.sourceModels) {
67
+ for (const source of model.sourceModels) {
68
+ if (hasRelationshipBaseTypeInternal(source.model, visited))
69
+ return true;
70
+ }
71
+ }
72
+ return false;
73
+ }
74
+ function isRelationship(types) {
75
+ return types.some((bt) => bt.baseType === "Relationship");
76
+ }
77
+ },
78
+ });
79
+ //# sourceMappingURL=use-relationship-required-properties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"use-relationship-required-properties.js","sourceRoot":"","sources":["../../../src/rules/use-relationship-required-properties.ts"],"names":[],"mappings":"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"}
package/lib/arm.tsp CHANGED
@@ -14,6 +14,7 @@ import "./extension/extension.tsp";
14
14
  import "./backcompat.tsp";
15
15
  import "./base-types/base-types.tsp";
16
16
  import "./base-types/agent.tsp";
17
+ import "./base-types/relationship.tsp";
17
18
  import "./private.decorators.tsp";
18
19
  import "./models.tsp";
19
20
  import "./operations.tsp";
@@ -0,0 +1,46 @@
1
+ import "./base-types.tsp";
2
+
3
+ namespace Azure.ResourceManager.BaseTypes.Relationships;
4
+
5
+ // ============================================================================
6
+ // Relationship Properties (resource property bag)
7
+ // ============================================================================
8
+
9
+ /**
10
+ * Required properties for a relationship resource.
11
+ * @template ProvisioningState The relationship provisioning state values.
12
+ */
13
+ model RelationshipProperties<ProvisioningState extends string = ResourceProvisioningState> {
14
+ /** ARM-managed. Must include the base type descriptor for this resource. */
15
+ @visibility(Lifecycle.Read)
16
+ baseTypes: BaseTypeInfo[];
17
+
18
+ /** The relationship source identifier. */
19
+ sourceId: string;
20
+
21
+ /** The tenant identifier of the relationship source. */
22
+ sourceTenant: string;
23
+
24
+ /** The relationship target identifier. */
25
+ targetId: string;
26
+
27
+ /** The tenant identifier of the relationship target. */
28
+ targetTenant: string;
29
+
30
+ /** The provisioning state of the relationship. */
31
+ @visibility(Lifecycle.Read)
32
+ provisioningState?: ProvisioningState;
33
+ }
34
+
35
+ // ============================================================================
36
+ // Resource Templates
37
+ // ============================================================================
38
+
39
+ /**
40
+ * Model template for a Relationship extension resource.
41
+ * Applies the Relationship base type decorator automatically.
42
+ * @template Properties RP-specific properties for the relationship (must extend RelationshipProperties)
43
+ */
44
+ @azureBaseType(#{ baseType: BaseType.Relationship, version: "2026-04-01" })
45
+ model Relationship<Properties extends RelationshipProperties = RelationshipProperties>
46
+ is ExtensionResource<Properties>;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@azure-tools/typespec-azure-resource-manager",
3
- "version": "0.71.0-dev.6",
3
+ "version": "0.71.0-dev.7",
4
4
  "author": "Microsoft Corporation",
5
5
  "description": "TypeSpec Azure Resource Manager library",
6
6
  "homepage": "https://azure.github.io/typespec-azure",
@@ -49,10 +49,10 @@
49
49
  "peerDependencies": {
50
50
  "@azure-tools/typespec-azure-core": "^0.70.0 || >= 0.71.0-dev.3",
51
51
  "@typespec/compiler": "^1.14.0",
52
- "@typespec/http": "^1.14.0",
52
+ "@typespec/rest": "^0.84.0",
53
53
  "@typespec/openapi": "^1.14.0",
54
54
  "@typespec/versioning": "^0.84.0",
55
- "@typespec/rest": "^0.84.0"
55
+ "@typespec/http": "^1.14.0"
56
56
  },
57
57
  "devDependencies": {
58
58
  "@azure-tools/typespec-azure-core": "^0.70.0 || >= 0.71.0-dev.3",
@@ -64,11 +64,11 @@
64
64
  "typescript": "~6.0.2",
65
65
  "vitest": "^4.1.3",
66
66
  "@typespec/compiler": "^1.14.0",
67
- "@typespec/http": "^1.14.0",
68
- "@typespec/versioning": "^0.84.0",
69
67
  "@typespec/library-linter": "^0.84.0",
70
- "@typespec/tspd": "^0.76.0",
71
68
  "@typespec/rest": "^0.84.0",
69
+ "@typespec/tspd": "^0.76.0",
70
+ "@typespec/http": "^1.14.0",
71
+ "@typespec/versioning": "^0.84.0",
72
72
  "@typespec/openapi": "^1.14.0"
73
73
  },
74
74
  "scripts": {