@microsoft/typespec-msgraph 1.0.0-Preview.3 → 1.0.0-Preview.5

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 (90) hide show
  1. package/README.md +4 -0
  2. package/dist/src/components/common-elements.d.ts +2 -0
  3. package/dist/src/components/common-elements.d.ts.map +1 -1
  4. package/dist/src/components/common-elements.js +15 -1
  5. package/dist/src/components/common-elements.js.map +1 -1
  6. package/dist/src/components/entity-container-element.d.ts.map +1 -1
  7. package/dist/src/components/reference-target-element.d.ts.map +1 -1
  8. package/dist/src/decorators/allowed-values.d.ts.map +1 -1
  9. package/dist/src/decorators/allowed-values.js +20 -2
  10. package/dist/src/decorators/allowed-values.js.map +1 -1
  11. package/dist/src/decorators/graph-partial.d.ts.map +1 -1
  12. package/dist/src/decorators/graph-route.d.ts.map +1 -1
  13. package/dist/src/decorators/graph-route.js +1 -1
  14. package/dist/src/decorators/graph-route.js.map +1 -1
  15. package/dist/src/emitter.d.ts +1 -0
  16. package/dist/src/emitter.d.ts.map +1 -1
  17. package/dist/src/emitter.js +16 -8
  18. package/dist/src/emitter.js.map +1 -1
  19. package/dist/src/entities/model.d.ts.map +1 -1
  20. package/dist/src/entities/model.js +7 -6
  21. package/dist/src/entities/model.js.map +1 -1
  22. package/dist/src/entities/namespace.d.ts.map +1 -1
  23. package/dist/src/entities/namespace.js +2 -3
  24. package/dist/src/entities/namespace.js.map +1 -1
  25. package/dist/src/entities/operation.js +2 -2
  26. package/dist/src/entities/operation.js.map +1 -1
  27. package/dist/src/entities/property.d.ts +1 -1
  28. package/dist/src/entities/property.d.ts.map +1 -1
  29. package/dist/src/entities/property.js +6 -18
  30. package/dist/src/entities/property.js.map +1 -1
  31. package/dist/src/lib.d.ts +3 -0
  32. package/dist/src/lib.d.ts.map +1 -1
  33. package/dist/src/lib.js +13 -7
  34. package/dist/src/lib.js.map +1 -1
  35. package/dist/src/linter.d.ts.map +1 -1
  36. package/dist/src/linter.js +26 -2
  37. package/dist/src/linter.js.map +1 -1
  38. package/dist/src/rules/allowed-values.d.ts +3 -0
  39. package/dist/src/rules/allowed-values.d.ts.map +1 -1
  40. package/dist/src/rules/allowed-values.js +32 -1
  41. package/dist/src/rules/allowed-values.js.map +1 -1
  42. package/dist/src/rules/collections.d.ts +4 -0
  43. package/dist/src/rules/collections.d.ts.map +1 -0
  44. package/dist/src/rules/collections.js +32 -0
  45. package/dist/src/rules/collections.js.map +1 -0
  46. package/dist/src/rules/contains.d.ts +6 -0
  47. package/dist/src/rules/contains.d.ts.map +1 -1
  48. package/dist/src/rules/contains.js +64 -4
  49. package/dist/src/rules/contains.js.map +1 -1
  50. package/dist/src/rules/entity.d.ts +3 -0
  51. package/dist/src/rules/entity.d.ts.map +1 -1
  52. package/dist/src/rules/entity.js +48 -1
  53. package/dist/src/rules/entity.js.map +1 -1
  54. package/dist/src/rules/enum.d.ts +9 -0
  55. package/dist/src/rules/enum.d.ts.map +1 -1
  56. package/dist/src/rules/enum.js +79 -3
  57. package/dist/src/rules/enum.js.map +1 -1
  58. package/dist/src/rules/index.d.ts +2 -0
  59. package/dist/src/rules/index.d.ts.map +1 -1
  60. package/dist/src/rules/index.js +2 -0
  61. package/dist/src/rules/index.js.map +1 -1
  62. package/dist/src/rules/limited-charset.d.ts.map +1 -1
  63. package/dist/src/rules/model.d.ts +3 -0
  64. package/dist/src/rules/model.d.ts.map +1 -1
  65. package/dist/src/rules/model.js +62 -20
  66. package/dist/src/rules/model.js.map +1 -1
  67. package/dist/src/rules/namespace.js +1 -1
  68. package/dist/src/rules/namespace.js.map +1 -1
  69. package/dist/src/rules/properties.d.ts +10 -0
  70. package/dist/src/rules/properties.d.ts.map +1 -0
  71. package/dist/src/rules/properties.js +118 -0
  72. package/dist/src/rules/properties.js.map +1 -0
  73. package/dist/src/supressions/csdl-suppression-rules.d.ts +8 -0
  74. package/dist/src/supressions/csdl-suppression-rules.d.ts.map +1 -0
  75. package/dist/src/supressions/csdl-suppression-rules.js +28 -0
  76. package/dist/src/supressions/csdl-suppression-rules.js.map +1 -0
  77. package/dist/src/supressions/path-util.d.ts +17 -0
  78. package/dist/src/supressions/path-util.d.ts.map +1 -0
  79. package/dist/src/supressions/path-util.js +67 -0
  80. package/dist/src/supressions/path-util.js.map +1 -0
  81. package/dist/src/supressions/suppression-collector.d.ts +10 -0
  82. package/dist/src/supressions/suppression-collector.d.ts.map +1 -0
  83. package/dist/src/supressions/suppression-collector.js +156 -0
  84. package/dist/src/supressions/suppression-collector.js.map +1 -0
  85. package/dist/src/utils.d.ts +8 -2
  86. package/dist/src/utils.d.ts.map +1 -1
  87. package/dist/src/utils.js +61 -4
  88. package/dist/src/utils.js.map +1 -1
  89. package/lib/schema-Prod-v1.0.tsp +312 -0
  90. package/package.json +27 -22
@@ -1,5 +1,5 @@
1
- import { createRule, getDoc, navigateTypesInNamespace, paramMessage } from "@typespec/compiler";
2
- import { isExcludedCoreType } from "../utils.js";
1
+ import { createRule, getDoc, navigateTypesInNamespace, paramMessage, } from "@typespec/compiler";
2
+ import { getActualType, isExcludedCoreType, isTypeCollection, isTypeNullable, } from "../utils.js";
3
3
  import { GetDeclaredNamespaces } from "../entities/namespace.js";
4
4
  import { reportDiagnostic } from "../lib.js";
5
5
  export const useEvolvableEnumRule = createRule({
@@ -48,8 +48,84 @@ export function validateEnumMemberUnknownFutureValueShouldNotHaveDocString(progr
48
48
  });
49
49
  }
50
50
  }
51
- }
51
+ },
52
52
  });
53
53
  }
54
54
  }
55
+ export const collectionShouldNotBeEnum = createRule({
56
+ name: "collection-should-not-be-enum",
57
+ severity: "warning",
58
+ description: "Collection properties should not contain enum types",
59
+ messages: {
60
+ default: paramMessage `Collection property '${"member"}' uses enum '${"enum"}'. Consider using @graphFlags to mark the enum as flags instead of using a collection. For information, refer to the [API guidelines](https://github.com/microsoft/api-guidelines/blob/vNext/graph/patterns/enums.md#flag-enums-or-collection-of-enums).`,
61
+ },
62
+ create(context) {
63
+ return {
64
+ modelProperty: (property) => {
65
+ if (!isTypeCollection(context.program, property.type)) {
66
+ return;
67
+ }
68
+ // Get the element type of the collection
69
+ const elementType = getActualType(context.program, property.type);
70
+ // Check if the element type is an enum
71
+ if (!elementType || elementType.kind !== "Enum") {
72
+ return;
73
+ }
74
+ context.reportDiagnostic({
75
+ target: property,
76
+ format: {
77
+ member: property.name,
78
+ enum: elementType.name,
79
+ },
80
+ });
81
+ },
82
+ };
83
+ },
84
+ });
85
+ export const nullableBooleanShouldBeEnum = createRule({
86
+ name: "nullable-boolean-should-be-enum",
87
+ severity: "warning",
88
+ description: "Nullable boolean properties should use enums for better extensibility",
89
+ messages: {
90
+ default: paramMessage `Property '${"property"}' uses nullable boolean. Consider using an Enum type instead to model more than two states.`,
91
+ },
92
+ create(context) {
93
+ return {
94
+ modelProperty: (property) => {
95
+ if (!isTypeNullable(context.program, property.type, (t) => t.kind === "Scalar" && t.name === "boolean")) {
96
+ return;
97
+ }
98
+ context.reportDiagnostic({
99
+ target: property,
100
+ format: {
101
+ property: property.name,
102
+ },
103
+ });
104
+ },
105
+ };
106
+ },
107
+ });
108
+ export const nullableEnumsShouldAddAdditionalMember = createRule({
109
+ name: "nullable-enum-should-add-additional-member",
110
+ severity: "warning",
111
+ description: "Nullable enum properties should add an additional member for better extensibility",
112
+ messages: {
113
+ default: paramMessage `Property '${"property"}' uses nullable enum. Consider adding an additional member to the enum and make it non-nullable.`,
114
+ },
115
+ create(context) {
116
+ return {
117
+ modelProperty: (property) => {
118
+ if (!isTypeNullable(context.program, property.type, (t) => t.kind === "Enum")) {
119
+ return;
120
+ }
121
+ context.reportDiagnostic({
122
+ target: property,
123
+ format: {
124
+ property: property.name,
125
+ },
126
+ });
127
+ },
128
+ };
129
+ },
130
+ });
55
131
  //# sourceMappingURL=enum.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"enum.js","sourceRoot":"","sources":["../../../src/rules/enum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAW,UAAU,EAAE,MAAM,EAAE,wBAAwB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AACzG,OAAO,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACjD,OAAO,EAAE,qBAAqB,EAAE,MAAM,0BAA0B,CAAC;AACjE,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAE7C,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;IAC7C,IAAI,EAAE,oBAAoB;IAC1B,QAAQ,EAAE,SAAS;IACnB,WAAW,EAAE,yBAAyB;IACtC,QAAQ,EAAE;QACR,OAAO,EAAE,YAAY,CAAA,gBAAgB,MAAM,2EAA2E;KACvH;IACD,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACjB,IAAI,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC;oBAClD,OAAO;gBACT,CAAC;gBAED,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,oBAAoB,CAAC,EAAE,CAAC;oBAC/C,OAAO;gBACT,CAAC;gBAED,OAAO,CAAC,gBAAgB,CAAC;oBACvB,MAAM,EAAE,QAAQ;oBAChB,MAAM,EAAE;wBACN,IAAI,EAAE,QAAQ,CAAC,IAAI;qBACpB;iBACF,CAAC,CAAC;YACL,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,MAAM,UAAU,0DAA0D,CAAC,OAAgB;IACzF,KAAK,MAAM,SAAS,IAAI,qBAAqB,CAAC,OAAO,CAAC,EAAC,CAAC;QACtD,wBAAwB,CAAC,SAAS,EAAE;YAClC,IAAI,EAAE,CAAC,QAAQ,EAAE,EAAE;gBACjB,KAAK,MAAM,MAAM,IAAI,QAAQ,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;oBAC/C,IAAI,MAAM,CAAC,IAAI,KAAK,oBAAoB,EAAE,CAAC;wBACzC,SAAS;oBACX,CAAC;oBAED,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;oBACpC,IAAI,GAAG,EAAE,CAAC;wBACR,gBAAgB,CAAC,OAAO,EAAE;4BACxB,IAAI,EAAE,uBAAuB;4BAC7B,MAAM,EAAE,MAAM;4BACd,SAAS,EAAE,iDAAiD;4BAC5D,MAAM,EAAE;gCACN,MAAM,EAAE,MAAM,CAAC,IAAI;6BACpB;yBACF,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;SACF,CAAC,CAAA;IACJ,CAAC;AAEH,CAAC"}
1
+ {"version":3,"file":"enum.js","sourceRoot":"","sources":["../../../src/rules/enum.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,7 @@ export * from "./address-url.js";
3
3
  export * from "./allowed-values.js";
4
4
  export * from "./alternate-key.js";
5
5
  export * from "./collection-navigation-properties-not-nullable.js";
6
+ export * from "./collections.js";
6
7
  export * from "./complex.js";
7
8
  export * from "./computed.js";
8
9
  export * from "./contains.js";
@@ -24,6 +25,7 @@ export * from "./limited-charset.js";
24
25
  export * from "./media.js";
25
26
  export * from "./model.js";
26
27
  export * from "./namespace.js";
28
+ export * from "./properties.js";
27
29
  export * from "./open.js";
28
30
  export * from "./operation-inside-interface.js";
29
31
  export * from "./order-by.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rules/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oDAAoD,CAAC;AACnE,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,qCAAqC,CAAC;AACpD,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,iCAAiC,CAAC;AAChD,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/rules/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oDAAoD,CAAC;AACnE,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,qCAAqC,CAAC;AACpD,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,iCAAiC,CAAC;AAChD,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC"}
@@ -3,6 +3,7 @@ export * from "./address-url.js";
3
3
  export * from "./allowed-values.js";
4
4
  export * from "./alternate-key.js";
5
5
  export * from "./collection-navigation-properties-not-nullable.js";
6
+ export * from "./collections.js";
6
7
  export * from "./complex.js";
7
8
  export * from "./computed.js";
8
9
  export * from "./contains.js";
@@ -24,6 +25,7 @@ export * from "./limited-charset.js";
24
25
  export * from "./media.js";
25
26
  export * from "./model.js";
26
27
  export * from "./namespace.js";
28
+ export * from "./properties.js";
27
29
  export * from "./open.js";
28
30
  export * from "./operation-inside-interface.js";
29
31
  export * from "./order-by.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rules/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oDAAoD,CAAC;AACnE,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,qCAAqC,CAAC;AACpD,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,iCAAiC,CAAC;AAChD,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/rules/index.ts"],"names":[],"mappings":"AAAA,cAAc,eAAe,CAAC;AAC9B,cAAc,kBAAkB,CAAC;AACjC,cAAc,qBAAqB,CAAC;AACpC,cAAc,oBAAoB,CAAC;AACnC,cAAc,oDAAoD,CAAC;AACnE,cAAc,kBAAkB,CAAC;AACjC,cAAc,cAAc,CAAC;AAC7B,cAAc,eAAe,CAAC;AAC9B,cAAc,eAAe,CAAC;AAC9B,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,qCAAqC,CAAC;AACpD,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,cAAc,2BAA2B,CAAC;AAC1C,cAAc,aAAa,CAAC;AAC5B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,uBAAuB,CAAC;AACtC,cAAc,oBAAoB,CAAC;AACnC,cAAc,kBAAkB,CAAC;AACjC,cAAc,sBAAsB,CAAC;AACrC,cAAc,YAAY,CAAC;AAC3B,cAAc,YAAY,CAAC;AAC3B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,iBAAiB,CAAA;AAC/B,cAAc,WAAW,CAAC;AAC1B,cAAc,iCAAiC,CAAC;AAChD,cAAc,eAAe,CAAC;AAC9B,cAAc,gBAAgB,CAAC;AAC/B,cAAc,eAAe,CAAC;AAC9B,cAAc,uBAAuB,CAAC;AACtC,cAAc,iBAAiB,CAAC;AAChC,cAAc,0BAA0B,CAAC;AACzC,cAAc,oBAAoB,CAAC;AACnC,cAAc,aAAa,CAAC;AAC5B,cAAc,oBAAoB,CAAC;AACnC,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"limited-charset.d.ts","sourceRoot":"","sources":["../../../src/rules/limited-charset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA0C,MAAM,oBAAoB,CAAC;AAMrF,eAAO,MAAM,gEAAgE,YAClE,OAAO,SA0CjB,CAAC"}
1
+ {"version":3,"file":"limited-charset.d.ts","sourceRoot":"","sources":["../../../src/rules/limited-charset.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAA0C,MAAM,oBAAoB,CAAC;AAMrF,eAAO,MAAM,gEAAgE,GAC3E,SAAS,OAAO,SA0CjB,CAAC"}
@@ -7,4 +7,7 @@ export declare const operationParametersShouldHaveRequiredBeforeOptional: import
7
7
  readonly default: import("@typespec/compiler").CallableMessage<[]>;
8
8
  }>;
9
9
  export declare function validatePropertyTypeIsNotStringLiteral(program: Program): void;
10
+ export declare const shouldNotUseUnnecessaryInheritance: import("@typespec/compiler").LinterRuleDefinition<"should-not-use-unnecessary-inheritance", {
11
+ readonly default: import("@typespec/compiler").CallableMessage<["baseType", "derivedType", "baseType"]>;
12
+ }>;
10
13
  //# sourceMappingURL=model.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/rules/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,OAAO,EAIR,MAAM,oBAAoB,CAAC;AAW5B,wBAAgB,wCAAwC,CAAC,OAAO,EAAE,OAAO,QA6BxE;AAED,eAAO,MAAM,8DAA8D;;EAyBzE,CAAC;AAEH,eAAO,MAAM,mDAAmD;;EA6B9D,CAAC;AAEH,wBAAgB,sCAAsC,CAAC,OAAO,EAAE,OAAO,QA4BtE"}
1
+ {"version":3,"file":"model.d.ts","sourceRoot":"","sources":["../../../src/rules/model.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,OAAO,EAIR,MAAM,oBAAoB,CAAC;AAW5B,wBAAgB,wCAAwC,CAAC,OAAO,EAAE,OAAO,QA6BxE;AAED,eAAO,MAAM,8DAA8D;;EA6BzE,CAAC;AAEH,eAAO,MAAM,mDAAmD;;EA4B9D,CAAC;AAEH,wBAAgB,sCAAsC,CAAC,OAAO,EAAE,OAAO,QA4BtE;AAuBD,eAAO,MAAM,kCAAkC;;EAmD7C,CAAC"}
@@ -1,5 +1,5 @@
1
- import { createRule, navigateTypesInNamespace, paramMessage } from "@typespec/compiler";
2
- import { extractTypesFromUnion, getTypeModel, isExcludedCoreType, isTypeDefinedInExternalLibrary } from "../utils.js";
1
+ import { createRule, navigateTypesInNamespace, paramMessage, } from "@typespec/compiler";
2
+ import { extractTypesFromUnion, getTypeModel, isExcludedCoreType, isTypeDefinedInExternalLibrary, } from "../utils.js";
3
3
  import { isEntity, isComplex, isContains, isOperationParameters } from "../index.js";
4
4
  import { GetDeclaredNamespaces } from "../entities/namespace.js";
5
5
  import { reportDiagnostic } from "../lib.js";
@@ -23,14 +23,13 @@ export function validateModelShouldBeEntityOrComplexType(program) {
23
23
  code: "model-invalid-use",
24
24
  target: model,
25
25
  format: {
26
- model: model.name
26
+ model: model.name,
27
27
  },
28
28
  });
29
29
  },
30
30
  });
31
31
  }
32
32
  }
33
- ;
34
33
  export const containedNavigationPropertyTypeShouldNotBeExternallyReferenced = createRule({
35
34
  name: "contained-navigation-property-type-should-not-be-externally-referenced",
36
35
  severity: "warning",
@@ -44,25 +43,27 @@ export const containedNavigationPropertyTypeShouldNotBeExternallyReferenced = cr
44
43
  const properties = model.properties;
45
44
  for (const [_, property] of properties) {
46
45
  const propertyType = getTypeModel(context.program, property.type);
47
- if (propertyType && isContains(context.program, property) && isTypeDefinedInExternalLibrary(context.program, propertyType)) {
46
+ if (propertyType &&
47
+ isContains(context.program, property) &&
48
+ isTypeDefinedInExternalLibrary(context.program, propertyType)) {
48
49
  context.reportDiagnostic({
49
50
  target: property,
50
51
  format: {
51
- property: property.name
52
- }
52
+ property: property.name,
53
+ },
53
54
  });
54
55
  }
55
56
  }
56
- }
57
+ },
57
58
  };
58
- }
59
+ },
59
60
  });
60
61
  export const operationParametersShouldHaveRequiredBeforeOptional = createRule({
61
62
  name: "operation-parameters-should-have-required-before-optional",
62
63
  severity: "warning",
63
64
  description: "Operation parameters should have required parameters before optional ones",
64
65
  messages: {
65
- default: paramMessage `Required parameters should appear before optional parameters in @operationParameters.`
66
+ default: paramMessage `Required parameters should appear before optional parameters in @operationParameters.`,
66
67
  },
67
68
  create(context) {
68
69
  return {
@@ -78,13 +79,13 @@ export const operationParametersShouldHaveRequiredBeforeOptional = createRule({
78
79
  else if (foundOptional) {
79
80
  context.reportDiagnostic({
80
81
  target: param,
81
- format: {}
82
+ format: {},
82
83
  });
83
84
  }
84
85
  }
85
- }
86
+ },
86
87
  };
87
- }
88
+ },
88
89
  });
89
90
  export function validatePropertyTypeIsNotStringLiteral(program) {
90
91
  for (const namespace of GetDeclaredNamespaces(program)) {
@@ -95,21 +96,20 @@ export function validatePropertyTypeIsNotStringLiteral(program) {
95
96
  }
96
97
  // To skip cases like '@path value:"$value"', '@header contentType: "image/*"'
97
98
  const propDecoratorToSkip = ["@path", "@header"];
98
- const propDecorators = property.decorators
99
- .map((decorator) => { var _a; return (_a = decorator.definition) === null || _a === void 0 ? void 0 : _a.name; });
100
- if (propDecoratorToSkip.some(value => propDecorators.includes(value))) {
99
+ const propDecorators = property.decorators.map((decorator) => { var _a; return (_a = decorator.definition) === null || _a === void 0 ? void 0 : _a.name; });
100
+ if (propDecoratorToSkip.some((value) => propDecorators.includes(value))) {
101
101
  return;
102
102
  }
103
103
  if (property.type.kind === "Union") {
104
104
  const unionTypes = extractTypesFromUnion(property.type);
105
- unionTypes.forEach(type => {
105
+ unionTypes.forEach((type) => {
106
106
  reportModelPropertyTypeDiagnostics(program, property, type.kind);
107
107
  });
108
108
  }
109
109
  else {
110
110
  reportModelPropertyTypeDiagnostics(program, property, property.type.kind);
111
111
  }
112
- }
112
+ },
113
113
  });
114
114
  }
115
115
  }
@@ -124,8 +124,50 @@ function reportModelPropertyTypeDiagnostics(program, property, propertyTypeKind)
124
124
  messageId: "propertyTypeCannotBeStringLiteral",
125
125
  format: {
126
126
  property: property.name,
127
- type: propertyTypeKind.toLowerCase()
128
- }
127
+ type: propertyTypeKind.toLowerCase(),
128
+ },
129
129
  });
130
130
  }
131
+ export const shouldNotUseUnnecessaryInheritance = createRule({
132
+ name: "should-not-use-unnecessary-inheritance",
133
+ severity: "warning",
134
+ description: "Identifies unnecessary inheritance hierarchies where a base type has only one derived type and is not used elsewhere",
135
+ messages: {
136
+ default: paramMessage `Base type '${"baseType"}' is only inherited by '${"derivedType"}' and is not used elsewhere. Consider merging the properties into asingle type to simplify the model. If you intend to add more types derived from '${"baseType"}' in the future, you may suppress this warning`,
137
+ },
138
+ create(context) {
139
+ return {
140
+ model: (model) => {
141
+ // Only check entity and complex types
142
+ const { baseModel } = model;
143
+ if (!baseModel ||
144
+ (!isEntity(context.program, model) && !isComplex(context.program, model))) {
145
+ return;
146
+ }
147
+ if (isExcludedCoreType(context.program, baseModel) ||
148
+ isTypeDefinedInExternalLibrary(context.program, baseModel)) {
149
+ return;
150
+ }
151
+ const derivedTypes = [];
152
+ for (const namespace of GetDeclaredNamespaces(context.program)) {
153
+ for (const [_, model] of namespace.models) {
154
+ if (model.baseModel === baseModel) {
155
+ derivedTypes.push(model);
156
+ }
157
+ }
158
+ }
159
+ if (derivedTypes.length !== 1) {
160
+ return;
161
+ }
162
+ context.reportDiagnostic({
163
+ target: model,
164
+ format: {
165
+ baseType: baseModel.name,
166
+ derivedType: model.name,
167
+ },
168
+ });
169
+ },
170
+ };
171
+ },
172
+ });
131
173
  //# sourceMappingURL=model.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/rules/model.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"model.js","sourceRoot":"","sources":["../../../src/rules/model.ts"],"names":[],"mappings":"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"}
@@ -51,7 +51,7 @@ export function validatePublicNamespaceName(program) {
51
51
  }
52
52
  ;
53
53
  export function validateTopLevelNamespaceMustHavePublicNamespace(program) {
54
- const rootNamespace = program.checker.getGlobalNamespaceType();
54
+ const rootNamespace = program.getGlobalNamespaceType();
55
55
  for (const namespace of expandNamespaces(rootNamespace)) {
56
56
  if (isTypeDefinedInExternalLibrary(program, namespace)) {
57
57
  continue;
@@ -1 +1 @@
1
- {"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../../src/rules/namespace.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"namespace.js","sourceRoot":"","sources":["../../../src/rules/namespace.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export declare const useCreatedInPropertyNames: import("@typespec/compiler").LinterRuleDefinition<"use-created-in-property-names", {
2
+ readonly default: import("@typespec/compiler").CallableMessage<["property", "foundWord", "suggested"]>;
3
+ }>;
4
+ export declare const useModifiedInPropertyNames: import("@typespec/compiler").LinterRuleDefinition<"use-modified-in-property-names", {
5
+ readonly default: import("@typespec/compiler").CallableMessage<["property", "foundWord", "suggested"]>;
6
+ }>;
7
+ export declare const useProperDefaultRecord: import("@typespec/compiler").LinterRuleDefinition<"use-proper-default-record", {
8
+ readonly default: import("@typespec/compiler").CallableMessage<["model"]>;
9
+ }>;
10
+ //# sourceMappingURL=properties.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"properties.d.ts","sourceRoot":"","sources":["../../../src/rules/properties.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,yBAAyB;;EAiCpC,CAAC;AAEH,eAAO,MAAM,0BAA0B;;EAiCrC,CAAC;AAGH,eAAO,MAAM,sBAAsB;;EAoCjC,CAAC"}
@@ -0,0 +1,118 @@
1
+ import { createRule, paramMessage } from "@typespec/compiler";
2
+ import { findOneOfWordsIC, toSameFirstCharCasingAs } from "../utils.js";
3
+ import { getActualType } from "../utils.js";
4
+ import { GetDeclaredNamespaces } from "../entities/namespace.js";
5
+ const CREATED_WORD_LIST = ["creation", "create"];
6
+ const MODIFIED_WORD_LIST = ["updated", "changed"];
7
+ export const useCreatedInPropertyNames = createRule({
8
+ name: "use-created-in-property-names",
9
+ severity: "warning",
10
+ description: "Enforce using 'created' instead of 'creation' or 'create' in property names.",
11
+ messages: {
12
+ default: paramMessage `Property '${"property"}' should use 'created' instead of '${"foundWord"}'. Consider renaming the property to '${"suggested"}' instead.`,
13
+ },
14
+ create(context) {
15
+ return {
16
+ modelProperty(property) {
17
+ const propertyName = property.name;
18
+ const flaggedWord = findOneOfWordsIC(propertyName, CREATED_WORD_LIST);
19
+ if (!flaggedWord) {
20
+ return;
21
+ }
22
+ const correctVariant = toSameFirstCharCasingAs('created', flaggedWord);
23
+ const suggestedPropertyName = propertyName.replace(flaggedWord, correctVariant);
24
+ context.reportDiagnostic({
25
+ target: property,
26
+ messageId: "default",
27
+ format: {
28
+ property: propertyName,
29
+ foundWord: flaggedWord,
30
+ suggested: suggestedPropertyName,
31
+ }
32
+ });
33
+ }
34
+ };
35
+ }
36
+ });
37
+ export const useModifiedInPropertyNames = createRule({
38
+ name: "use-modified-in-property-names",
39
+ severity: "warning",
40
+ description: "Enforce using 'modified' instead of 'updated' or 'changed' in property names.",
41
+ messages: {
42
+ default: paramMessage `Property '${"property"}' should use 'modified' instead of '${"foundWord"}'. Consider renaming the property to '${"suggested"}' instead.`,
43
+ },
44
+ create(context) {
45
+ return {
46
+ modelProperty(property) {
47
+ const propertyName = property.name;
48
+ const flaggedWord = findOneOfWordsIC(propertyName, MODIFIED_WORD_LIST);
49
+ if (!flaggedWord) {
50
+ return;
51
+ }
52
+ const correctVariant = toSameFirstCharCasingAs('modified', flaggedWord);
53
+ const suggestedPropertyName = propertyName.replace(flaggedWord, correctVariant);
54
+ context.reportDiagnostic({
55
+ target: property,
56
+ messageId: "default",
57
+ format: {
58
+ property: propertyName,
59
+ foundWord: flaggedWord,
60
+ suggested: suggestedPropertyName,
61
+ }
62
+ });
63
+ }
64
+ };
65
+ }
66
+ });
67
+ export const useProperDefaultRecord = createRule({
68
+ name: "use-proper-default-record",
69
+ severity: "warning",
70
+ description: "Identifies poor API design pattern where boolean isDefault property is used within collection items to indicate default item",
71
+ messages: {
72
+ default: paramMessage `Model '${"model"}' has an 'isDefault' boolean property and is used in collections. Consider exposing a separate property that directly references the default item instead of using boolean flags within collection items.`,
73
+ },
74
+ create(context) {
75
+ return {
76
+ modelProperty: (property) => {
77
+ // Check if this model has an isDefault boolean property
78
+ const propertyName = property.name;
79
+ if (!(propertyName.toLowerCase() === "isdefault" &&
80
+ property.type.kind === "Scalar" &&
81
+ property.type.name === "boolean")) {
82
+ return;
83
+ }
84
+ // We found an isDefault property, now check if its containing model is used in collections
85
+ const model = property.model;
86
+ // Check if this model is used as a collection element anywhere in the program
87
+ if (isModelUsedInCollections(context.program, model)) {
88
+ context.reportDiagnostic({
89
+ target: property,
90
+ messageId: "default",
91
+ format: {
92
+ model: model.name,
93
+ },
94
+ });
95
+ }
96
+ },
97
+ };
98
+ },
99
+ });
100
+ /**
101
+ * Checks if a model is used as an element type in collections elsewhere in the program
102
+ */
103
+ function isModelUsedInCollections(program, targetModel) {
104
+ // Walk through all types in the program to find collections using this model
105
+ for (const namespace of GetDeclaredNamespaces(program)) {
106
+ for (const [_, model] of namespace.models) {
107
+ for (const [_, property] of model.properties) {
108
+ const type = property.type;
109
+ if (type.kind === "Union" || type.kind === "Model" && type.name === "Array") {
110
+ const actualType = getActualType(program, type);
111
+ return actualType === targetModel && model !== targetModel;
112
+ }
113
+ }
114
+ }
115
+ }
116
+ return false;
117
+ }
118
+ //# sourceMappingURL=properties.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"properties.js","sourceRoot":"","sources":["../../../src/rules/properties.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Map of internal linter rule export names (without package scope)
3
+ * to the stable suppression codes used in CSDL.
4
+ *
5
+ */
6
+ export declare const csdlSuppressionRules: Record<string, string | undefined>;
7
+ export declare function findCsdlValidationRule(linterRule: string): string | undefined;
8
+ //# sourceMappingURL=csdl-suppression-rules.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csdl-suppression-rules.d.ts","sourceRoot":"","sources":["../../../src/supressions/csdl-suppression-rules.ts"],"names":[],"mappings":"AACA;;;;GAIG;AACH,eAAO,MAAM,oBAAoB,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAenE,CAAC;AAIF,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAI7E"}
@@ -0,0 +1,28 @@
1
+ const DEFAULT_RULE = "default";
2
+ /**
3
+ * Map of internal linter rule export names (without package scope)
4
+ * to the stable suppression codes used in CSDL.
5
+ *
6
+ */
7
+ export const csdlSuppressionRules = {
8
+ // Implemented rules
9
+ "use-evolvable-enum": "EnumShouldBeEvolvable",
10
+ "collection-should-not-be-enum": "EnumCollectionShouldBeFlaggedEnum",
11
+ "nullable-boolean-should-be-enum": "NullableBooleanShouldBeEnum",
12
+ "nullable-enums-should-add-additional-member": "NullableEnumsShouldAddAdditionalMember",
13
+ "contained-entity-should-not-have-entity-set": "ContainedNavPropertyShouldNotHaveEntitySet",
14
+ "should-not-use-unnecessary-inheritance": "ShouldNotUseUnnecessaryInheritance",
15
+ "reference-id-property-should-be-navigation-property": "ReferenceIdPropertyShouldBeNavigationProperty",
16
+ "use-proper-default-record": "UseProperDefaultRecord",
17
+ "use-created-in-property-names": "UseCreatedInPropertyName",
18
+ "use-modified-in-property-names": "UseModifiedInPropertyName",
19
+ // To be implemented
20
+ "collection-property-should-not-be-nullable": "CollectionPropertyShouldNotBeNullable",
21
+ DEFAULT_RULE: undefined
22
+ };
23
+ export function findCsdlValidationRule(linterRule) {
24
+ const rule = linterRule.split('/').pop();
25
+ const csdlRule = csdlSuppressionRules[rule !== null && rule !== void 0 ? rule : DEFAULT_RULE];
26
+ return csdlRule;
27
+ }
28
+ //# sourceMappingURL=csdl-suppression-rules.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"csdl-suppression-rules.js","sourceRoot":"","sources":["../../../src/supressions/csdl-suppression-rules.ts"],"names":[],"mappings":"AAAA,MAAM,YAAY,GAAG,SAAS,CAAC;AAC/B;;;;GAIG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAuC;IACtE,oBAAoB;IACpB,oBAAoB,EAAE,uBAAuB;IAC7C,+BAA+B,EAAE,mCAAmC;IACpE,iCAAiC,EAAE,6BAA6B;IAChE,6CAA6C,EAAE,wCAAwC;IACvF,6CAA6C,EAAE,4CAA4C;IAC3F,wCAAwC,EAAE,oCAAoC;IAC9E,qDAAqD,EAAE,+CAA+C;IACtG,2BAA2B,EAAE,wBAAwB;IACrD,+BAA+B,EAAE,0BAA0B;IAC3D,gCAAgC,EAAE,2BAA2B;IAC7D,oBAAoB;IACpB,4CAA4C,EAAE,uCAAuC;IACrF,YAAY,EAAE,SAAS;CACxB,CAAC;AAIF,MAAM,UAAU,sBAAsB,CAAC,UAAkB;IACvD,MAAM,IAAI,GAAG,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;IACzC,MAAM,QAAQ,GAAG,oBAAoB,CAAC,IAAI,aAAJ,IAAI,cAAJ,IAAI,GAAI,YAAY,CAAC,CAAC;IAC5D,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,17 @@
1
+ import { EmitContext, Program } from "@typespec/compiler";
2
+ import { MsGraphEmitterOptions } from "../lib.js";
3
+ import { TypeSpecScriptNode } from "@typespec/compiler/ast";
4
+ export declare function extractEnvAndVersionFromPath(filePath: string): {
5
+ env: string;
6
+ version: string;
7
+ };
8
+ export declare function buildWorkloadKeyPath(context: EmitContext<MsGraphEmitterOptions>, outputDir: string): string;
9
+ export declare function getLocalProjectFile(program: Program): {
10
+ path: string;
11
+ sourceFile: TypeSpecScriptNode;
12
+ } | undefined;
13
+ export declare function createSuppressionFilePath(context: EmitContext<MsGraphEmitterOptions>, path: string): Promise<{
14
+ outputPath: string;
15
+ csdlPath: string;
16
+ }>;
17
+ //# sourceMappingURL=path-util.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"path-util.d.ts","sourceRoot":"","sources":["../../../src/supressions/path-util.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,OAAO,EAAc,MAAM,oBAAoB,CAAC;AACtE,OAAO,EAAE,qBAAqB,EAAE,MAAM,WAAW,CAAC;AAClD,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAK5D,wBAAgB,4BAA4B,CAAC,QAAQ,EAAE,MAAM,GAAG;IAAE,GAAG,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAY/F;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,WAAW,CAAC,qBAAqB,CAAC,EAAE,SAAS,EAAC,MAAM,GAAG,MAAM,CAU1G;AAaD,wBAAgB,mBAAmB,CACjC,OAAO,EAAE,OAAO,GACf;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,UAAU,EAAE,kBAAkB,CAAA;CAAE,GAAG,SAAS,CAY9D;AAED,wBAAsB,yBAAyB,CAC7C,OAAO,EAAE,WAAW,CAAC,qBAAqB,CAAC,EAC3C,IAAI,EAAE,MAAM,GACX,OAAO,CAAC;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAgCnD"}