@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.
- package/README.md +4 -0
- package/dist/src/components/common-elements.d.ts +2 -0
- package/dist/src/components/common-elements.d.ts.map +1 -1
- package/dist/src/components/common-elements.js +15 -1
- package/dist/src/components/common-elements.js.map +1 -1
- package/dist/src/components/entity-container-element.d.ts.map +1 -1
- package/dist/src/components/reference-target-element.d.ts.map +1 -1
- package/dist/src/decorators/allowed-values.d.ts.map +1 -1
- package/dist/src/decorators/allowed-values.js +20 -2
- package/dist/src/decorators/allowed-values.js.map +1 -1
- package/dist/src/decorators/graph-partial.d.ts.map +1 -1
- package/dist/src/decorators/graph-route.d.ts.map +1 -1
- package/dist/src/decorators/graph-route.js +1 -1
- package/dist/src/decorators/graph-route.js.map +1 -1
- package/dist/src/emitter.d.ts +1 -0
- package/dist/src/emitter.d.ts.map +1 -1
- package/dist/src/emitter.js +16 -8
- package/dist/src/emitter.js.map +1 -1
- package/dist/src/entities/model.d.ts.map +1 -1
- package/dist/src/entities/model.js +7 -6
- package/dist/src/entities/model.js.map +1 -1
- package/dist/src/entities/namespace.d.ts.map +1 -1
- package/dist/src/entities/namespace.js +2 -3
- package/dist/src/entities/namespace.js.map +1 -1
- package/dist/src/entities/operation.js +2 -2
- package/dist/src/entities/operation.js.map +1 -1
- package/dist/src/entities/property.d.ts +1 -1
- package/dist/src/entities/property.d.ts.map +1 -1
- package/dist/src/entities/property.js +6 -18
- package/dist/src/entities/property.js.map +1 -1
- package/dist/src/lib.d.ts +3 -0
- package/dist/src/lib.d.ts.map +1 -1
- package/dist/src/lib.js +13 -7
- package/dist/src/lib.js.map +1 -1
- package/dist/src/linter.d.ts.map +1 -1
- package/dist/src/linter.js +26 -2
- package/dist/src/linter.js.map +1 -1
- package/dist/src/rules/allowed-values.d.ts +3 -0
- package/dist/src/rules/allowed-values.d.ts.map +1 -1
- package/dist/src/rules/allowed-values.js +32 -1
- package/dist/src/rules/allowed-values.js.map +1 -1
- package/dist/src/rules/collections.d.ts +4 -0
- package/dist/src/rules/collections.d.ts.map +1 -0
- package/dist/src/rules/collections.js +32 -0
- package/dist/src/rules/collections.js.map +1 -0
- package/dist/src/rules/contains.d.ts +6 -0
- package/dist/src/rules/contains.d.ts.map +1 -1
- package/dist/src/rules/contains.js +64 -4
- package/dist/src/rules/contains.js.map +1 -1
- package/dist/src/rules/entity.d.ts +3 -0
- package/dist/src/rules/entity.d.ts.map +1 -1
- package/dist/src/rules/entity.js +48 -1
- package/dist/src/rules/entity.js.map +1 -1
- package/dist/src/rules/enum.d.ts +9 -0
- package/dist/src/rules/enum.d.ts.map +1 -1
- package/dist/src/rules/enum.js +79 -3
- package/dist/src/rules/enum.js.map +1 -1
- package/dist/src/rules/index.d.ts +2 -0
- package/dist/src/rules/index.d.ts.map +1 -1
- package/dist/src/rules/index.js +2 -0
- package/dist/src/rules/index.js.map +1 -1
- package/dist/src/rules/limited-charset.d.ts.map +1 -1
- package/dist/src/rules/model.d.ts +3 -0
- package/dist/src/rules/model.d.ts.map +1 -1
- package/dist/src/rules/model.js +62 -20
- package/dist/src/rules/model.js.map +1 -1
- package/dist/src/rules/namespace.js +1 -1
- package/dist/src/rules/namespace.js.map +1 -1
- package/dist/src/rules/properties.d.ts +10 -0
- package/dist/src/rules/properties.d.ts.map +1 -0
- package/dist/src/rules/properties.js +118 -0
- package/dist/src/rules/properties.js.map +1 -0
- package/dist/src/supressions/csdl-suppression-rules.d.ts +8 -0
- package/dist/src/supressions/csdl-suppression-rules.d.ts.map +1 -0
- package/dist/src/supressions/csdl-suppression-rules.js +28 -0
- package/dist/src/supressions/csdl-suppression-rules.js.map +1 -0
- package/dist/src/supressions/path-util.d.ts +17 -0
- package/dist/src/supressions/path-util.d.ts.map +1 -0
- package/dist/src/supressions/path-util.js +67 -0
- package/dist/src/supressions/path-util.js.map +1 -0
- package/dist/src/supressions/suppression-collector.d.ts +10 -0
- package/dist/src/supressions/suppression-collector.d.ts.map +1 -0
- package/dist/src/supressions/suppression-collector.js +156 -0
- package/dist/src/supressions/suppression-collector.js.map +1 -0
- package/dist/src/utils.d.ts +8 -2
- package/dist/src/utils.d.ts.map +1 -1
- package/dist/src/utils.js +61 -4
- package/dist/src/utils.js.map +1 -1
- package/lib/schema-Prod-v1.0.tsp +312 -0
- package/package.json +27 -22
package/dist/src/rules/enum.js
CHANGED
|
@@ -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,
|
|
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"}
|
package/dist/src/rules/index.js
CHANGED
|
@@ -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,
|
|
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,
|
|
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"}
|
package/dist/src/rules/model.js
CHANGED
|
@@ -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 &&
|
|
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
|
-
|
|
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":"AAAA,OAAO,
|
|
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.
|
|
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":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAC7C,OAAO,EAAE,sBAAsB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AACzE,OAAO,EAAW,oBAAoB,EAAE,wBAAwB,EAAE,MAAM,oBAAoB,CAAC;AAC7F,OAAO,EAAE,YAAY,EAAE,kBAAkB,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAC/F,OAAO,EAAE,yBAAyB,EAAE,qBAAqB,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC9G,OAAO,EAAE,wBAAwB,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC;AAErG,MAAM,UAAU,2BAA2B,CAAC,OAAgB;IAC1D,KAAK,MAAM,SAAS,IAAI,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;QACvD,wBAAwB,CAAC,SAAS,EAAE;YAClC,KAAK,EAAE,CAAC,KAAK,EAAE,EAAE;gBACf,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;oBAC5C,OAAO;gBACT,CAAC;gBAED,OAAO,KAAK,CAAC,SAAS,EAAE,CAAC;oBACvB,KAAK,GAAG,KAAK,CAAC,SAAS,CAAC;oBACxB,IAAI,KAAK,CAAC,SAAS,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;wBAC5C,OAAO;oBACT,CAAC;gBACH,CAAC;gBAED,gBAAgB,CAAC,OAAO,EAAE;oBACxB,IAAI,EAAE,8BAA8B;oBACpC,MAAM,EAAE,KAAK;oBACb,SAAS,EAAE,uBAAuB;oBAClC,MAAM,EAAE;wBACN,KAAK,EAAE,KAAK,CAAC,IAAI;qBAClB;iBACF,CAAC,CAAC;YACL,CAAC;SACF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAAA,CAAC;AAEF,MAAM,UAAU,2BAA2B,CAAC,OAAgB;IAC1D,KAAK,MAAM,SAAS,IAAI,qBAAqB,CAAC,OAAO,CAAC,EAAE,CAAC;QACvD,IAAI,CAAC,kBAAkB,CAAC,OAAO,EAAE,SAAS,CAAC,EAAE,CAAC;YAC5C,OAAO;QACT,CAAC;QAED,MAAM,mBAAmB,GAAG,sBAAsB,CAAC,OAAO,EAAE,SAAS,CAAE,CAAC;QAExE,IAAI,0BAA0B,CAAC,mBAAmB,CAAC,EAAE,CAAC;YACpD,OAAO;QACT,CAAC;QAED,gBAAgB,CAAC,OAAO,EAAE;YACxB,IAAI,EAAE,uBAAuB;YAC7B,MAAM,EAAE,SAAS;YACjB,SAAS,EAAE,4BAA4B;YACvC,MAAM,EAAE;gBACN,SAAS,EAAE,oBAAoB,CAAC,SAAS,CAAC;aAC3C;SACF,CAAC,CAAC;IACL,CAAC;AACH,CAAC;AAAA,CAAC;AAEF,MAAM,UAAU,gDAAgD,CAAC,OAAgB;IAC/E,MAAM,aAAa,GAAG,OAAO,CAAC,
|
|
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"}
|