@azure-tools/typespec-azure-core 0.45.0-dev.5 → 0.45.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
@@ -65,7 +65,9 @@ Available ruleSets:
65
65
  | `@azure-tools/typespec-azure-core/use-standard-names` | Use recommended names for operations. |
66
66
  | `@azure-tools/typespec-azure-core/use-standard-operations` | Operations should be defined using a signature from the Azure.Core namespace. |
67
67
  | [`@azure-tools/typespec-azure-core/no-string-discriminator`](https://azure.github.io/typespec-azure/docs/libraries/azure-core/rules/no-string-discriminator) | Azure services discriminated models should define the discriminated property as an extensible union. |
68
+ | [`@azure-tools/typespec-azure-core/require-versioned`](https://azure.github.io/typespec-azure/docs/libraries/azure-core/rules/require-versioned) | Azure services should use the versioning library. |
68
69
  | `@azure-tools/typespec-azure-core/friendly-name` | Ensures that @friendlyName is used as intended. |
70
+ | [`@azure-tools/typespec-azure-core/no-private-usage`](https://azure.github.io/typespec-azure/docs/libraries/azure-core/rules/no-private-usage) | Verify that elements inside Private namespace are not referenced. |
69
71
 
70
72
  ## Decorators
71
73
 
@@ -1 +1 @@
1
- {"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../../src/linter.ts"],"names":[],"mappings":"AA2EA,eAAO,MAAM,OAAO,+CASlB,CAAC"}
1
+ {"version":3,"file":"linter.d.ts","sourceRoot":"","sources":["../../src/linter.ts"],"names":[],"mappings":"AA+EA,eAAO,MAAM,OAAO,+CASlB,CAAC"}
@@ -15,6 +15,7 @@ import { noGenericNumericRule } from "./rules/no-generic-numeric.js";
15
15
  import { noNullableRule } from "./rules/no-nullable.js";
16
16
  import { noOffsetDateTimeRule } from "./rules/no-offsetdatetime.js";
17
17
  import { operationIdRule } from "./rules/no-operation-id.js";
18
+ import { noPrivateUsage } from "./rules/no-private-usage.js";
18
19
  import { noResponseBodyRule } from "./rules/no-response-body.js";
19
20
  import { noRpcPathParamsRule } from "./rules/no-rpc-path-params.js";
20
21
  import { noStringDiscriminatorRule } from "./rules/no-string-discriminator.js";
@@ -29,6 +30,7 @@ import { recordTypeRule } from "./rules/record-types.js";
29
30
  import { bodyArrayRule } from "./rules/request-body-array.js";
30
31
  import { requireDocumentation } from "./rules/require-docs.js";
31
32
  import { requireKeyVisibility } from "./rules/require-key-visibility.js";
33
+ import { requireVersionedRule } from "./rules/require-versioned.js";
32
34
  import { responseSchemaMultiStatusCodeRule } from "./rules/response-schema-multi-status-code.js";
33
35
  import { rpcOperationRequestBodyRule } from "./rules/rpc-operation-request-body.js";
34
36
  import { spreadDiscriminatedModelRule } from "./rules/spread-discriminated-model.js";
@@ -69,7 +71,9 @@ const rules = [
69
71
  useStandardNames,
70
72
  useStandardOperations,
71
73
  noStringDiscriminatorRule,
74
+ requireVersionedRule,
72
75
  friendlyNameRule,
76
+ noPrivateUsage,
73
77
  ];
74
78
  export const $linter = defineLinter({
75
79
  rules,
@@ -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":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const noPrivateUsage: import("@typespec/compiler").LinterRuleDefinition<"no-private-usage", {
2
+ readonly default: import("@typespec/compiler").CallableMessage<["ns"]>;
3
+ }>;
4
+ //# sourceMappingURL=no-private-usage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-private-usage.d.ts","sourceRoot":"","sources":["../../../src/rules/no-private-usage.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,cAAc;;EAoEzB,CAAC"}
@@ -0,0 +1,81 @@
1
+ import { createRule, getLocationContext, getTypeName, paramMessage, } from "@typespec/compiler";
2
+ export const noPrivateUsage = createRule({
3
+ name: "no-private-usage",
4
+ description: "Verify that elements inside Private namespace are not referenced.",
5
+ severity: "warning",
6
+ url: "https://azure.github.io/typespec-azure/docs/libraries/azure-core/rules/no-private-usage",
7
+ messages: {
8
+ default: paramMessage `Referencing elements inside Private namespace "${"ns"}" is not allowed.`,
9
+ },
10
+ create(context) {
11
+ function checkReference(origin, type, target) {
12
+ if (getLocationContext(context.program, origin).type !== "project") {
13
+ return;
14
+ }
15
+ if (getLocationContext(context.program, type).type === "project") {
16
+ return;
17
+ }
18
+ if (isInPrivateNamespace(type)) {
19
+ context.reportDiagnostic({
20
+ target,
21
+ format: { ns: getTypeName(type.namespace) },
22
+ });
23
+ }
24
+ }
25
+ function checkDecorators(type) {
26
+ if (getLocationContext(context.program, type).type !== "project") {
27
+ return;
28
+ }
29
+ for (const decorator of type.decorators) {
30
+ if (decorator.definition &&
31
+ isInPrivateNamespace(decorator.definition) &&
32
+ getLocationContext(context.program, decorator.definition).type !== "project") {
33
+ context.reportDiagnostic({
34
+ target: decorator.node ?? type,
35
+ format: { ns: getTypeName(decorator.definition.namespace) },
36
+ });
37
+ }
38
+ }
39
+ }
40
+ return {
41
+ model: (model) => {
42
+ checkDecorators(model);
43
+ model.baseModel && checkReference(model, model.baseModel, model);
44
+ },
45
+ modelProperty: (prop) => {
46
+ checkDecorators(prop);
47
+ checkReference(prop, prop.type, prop);
48
+ },
49
+ unionVariant: (variant) => {
50
+ checkDecorators(variant);
51
+ checkReference(variant, variant.type, variant);
52
+ },
53
+ operation: (type) => {
54
+ checkDecorators(type);
55
+ },
56
+ interface: (type) => {
57
+ checkDecorators(type);
58
+ },
59
+ enum: (type) => {
60
+ checkDecorators(type);
61
+ },
62
+ union: (type) => {
63
+ checkDecorators(type);
64
+ },
65
+ };
66
+ },
67
+ });
68
+ function isInPrivateNamespace(type) {
69
+ if (!("namespace" in type)) {
70
+ return false;
71
+ }
72
+ let current = type;
73
+ while (current.namespace) {
74
+ if (current.namespace?.name === "Private") {
75
+ return true;
76
+ }
77
+ current = current.namespace;
78
+ }
79
+ return false;
80
+ }
81
+ //# sourceMappingURL=no-private-usage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"no-private-usage.js","sourceRoot":"","sources":["../../../src/rules/no-private-usage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export declare const requireVersionedRule: import("@typespec/compiler").LinterRuleDefinition<"require-versioned", {
2
+ readonly default: import("@typespec/compiler").CallableMessage<[]>;
3
+ }>;
4
+ //# sourceMappingURL=require-versioned.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-versioned.d.ts","sourceRoot":"","sources":["../../../src/rules/require-versioned.ts"],"names":[],"mappings":"AAWA,eAAO,MAAM,oBAAoB;;EAwB/B,CAAC"}
@@ -0,0 +1,41 @@
1
+ import { createRule, getSourceLocation, listServices, paramMessage, } from "@typespec/compiler";
2
+ import { getVersion } from "@typespec/versioning";
3
+ import { findLineStartAndIndent } from "./utils.js";
4
+ export const requireVersionedRule = createRule({
5
+ name: "require-versioned",
6
+ description: "Azure services should use the versioning library.",
7
+ severity: "warning",
8
+ url: "https://azure.github.io/typespec-azure/docs/libraries/azure-core/rules/require-versioned",
9
+ messages: {
10
+ default: paramMessage `Azure services should use the versioning library to define versions for their services. Add the '@versioned' decorator to the service namespace.`,
11
+ },
12
+ create(context) {
13
+ return {
14
+ root: (program) => {
15
+ const services = listServices(program);
16
+ for (const service of services) {
17
+ if (getVersion(program, service.type) === undefined) {
18
+ context.reportDiagnostic({
19
+ format: { serviceName: service.type },
20
+ target: service.type,
21
+ codefixes: [createAddVersionedCodeFix(service.type)],
22
+ });
23
+ }
24
+ }
25
+ },
26
+ };
27
+ },
28
+ });
29
+ function createAddVersionedCodeFix(namespace) {
30
+ return {
31
+ id: "add-versioned",
32
+ label: "Add @versioned",
33
+ fix(context) {
34
+ const location = getSourceLocation(namespace);
35
+ const { lineStart, indent } = findLineStartAndIndent(location);
36
+ const updatedLocation = { ...location, pos: lineStart };
37
+ return context.prependText(updatedLocation, `${indent}@versioned(Versions /* create an enum called Versions with your service version */)\n`);
38
+ },
39
+ };
40
+ }
41
+ //# sourceMappingURL=require-versioned.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"require-versioned.js","sourceRoot":"","sources":["../../../src/rules/require-versioned.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,EACV,iBAAiB,EACjB,YAAY,EAEZ,YAAY,GACb,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,sBAAsB,CAAC;AAClD,OAAO,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AACpD,MAAM,CAAC,MAAM,oBAAoB,GAAG,UAAU,CAAC;IAC7C,IAAI,EAAE,mBAAmB;IACzB,WAAW,EAAE,mDAAmD;IAChE,QAAQ,EAAE,SAAS;IACnB,GAAG,EAAE,0FAA0F;IAC/F,QAAQ,EAAE;QACR,OAAO,EAAE,YAAY,CAAA,kJAAkJ;KACxK;IACD,MAAM,CAAC,OAAO;QACZ,OAAO;YACL,IAAI,EAAE,CAAC,OAAO,EAAE,EAAE;gBAChB,MAAM,QAAQ,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC;gBACvC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;oBAC/B,IAAI,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,SAAS,EAAE,CAAC;wBACpD,OAAO,CAAC,gBAAgB,CAAC;4BACvB,MAAM,EAAE,EAAE,WAAW,EAAE,OAAO,CAAC,IAAI,EAAE;4BACrC,MAAM,EAAE,OAAO,CAAC,IAAI;4BACpB,SAAS,EAAE,CAAC,yBAAyB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;yBACrD,CAAC,CAAC;oBACL,CAAC;gBACH,CAAC;YACH,CAAC;SACF,CAAC;IACJ,CAAC;CACF,CAAC,CAAC;AAEH,SAAS,yBAAyB,CAAC,SAAoB;IACrD,OAAO;QACL,EAAE,EAAE,eAAe;QACnB,KAAK,EAAE,gBAAgB;QACvB,GAAG,CAAC,OAAuB;YACzB,MAAM,QAAQ,GAAG,iBAAiB,CAAC,SAAS,CAAC,CAAC;YAC9C,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,sBAAsB,CAAC,QAAQ,CAAC,CAAC;YAC/D,MAAM,eAAe,GAAG,EAAE,GAAG,QAAQ,EAAE,GAAG,EAAE,SAAS,EAAE,CAAC;YACxD,OAAO,OAAO,CAAC,WAAW,CACxB,eAAe,EACf,GAAG,MAAM,uFAAuF,CACjG,CAAC;QACJ,CAAC;KACF,CAAC;AACJ,CAAC"}
@@ -1,4 +1,4 @@
1
- import { Enum, EnumMember, Interface, Model, ModelProperty, Namespace, Operation, Program, Scalar, Union, UnionVariant } from "@typespec/compiler";
1
+ import { Enum, EnumMember, Interface, Model, ModelProperty, Namespace, Operation, Program, Scalar, SourceLocation, Union, UnionVariant } from "@typespec/compiler";
2
2
  type DeclarableType = Namespace | Model | ModelProperty | Enum | EnumMember | Union | UnionVariant | Scalar | Operation | Interface;
3
3
  /**
4
4
  * Returns the full namespace name for the given type, if available.
@@ -51,5 +51,9 @@ export declare function isPascalCaseNoAcronyms(name: string): boolean;
51
51
  * @returns true if the name is in camelCase
52
52
  */
53
53
  export declare function isCamelCaseNoAcronyms(name: string): boolean;
54
+ export declare function findLineStartAndIndent(location: SourceLocation): {
55
+ lineStart: number;
56
+ indent: string;
57
+ };
54
58
  export {};
55
59
  //# sourceMappingURL=utils.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/rules/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,UAAU,EAEV,SAAS,EAET,KAAK,EACL,aAAa,EACb,SAAS,EACT,SAAS,EACT,OAAO,EACP,MAAM,EAEN,KAAK,EACL,YAAY,EACb,MAAM,oBAAoB,CAAC;AAE5B,KAAK,cAAc,GACf,SAAS,GACT,KAAK,GACL,aAAa,GACb,IAAI,GACJ,UAAU,GACV,KAAK,GACL,YAAY,GACZ,MAAM,GACN,SAAS,GACT,SAAS,CAAC;AAEd;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,CAW3F;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAclF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAIxF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,KAAK,WAE1C;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,KAAK,kBAEtD;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,uBAM9D;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,WAE9D;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG5D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG3D"}
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/rules/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,IAAI,EACJ,UAAU,EAEV,SAAS,EAET,KAAK,EACL,aAAa,EACb,SAAS,EACT,SAAS,EACT,OAAO,EACP,MAAM,EACN,cAAc,EAEd,KAAK,EACL,YAAY,EACb,MAAM,oBAAoB,CAAC;AAE5B,KAAK,cAAc,GACf,SAAS,GACT,KAAK,GACL,aAAa,GACb,IAAI,GACJ,UAAU,GACV,KAAK,GACL,YAAY,GACZ,MAAM,GACN,SAAS,GACT,SAAS,CAAC;AAEd;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,GAAG,SAAS,GAAG,MAAM,CAW3F;AAED;;;;;GAKG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,cAAc,GAAG,OAAO,CAclF;AAED,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,EAAE,EAAE,SAAS,GAAG,SAAS,GAAG,OAAO,CAIxF;AAED;;;;GAIG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,KAAK,WAE1C;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,MAAM,EAAE,KAAK,kBAEtD;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,uBAM9D;AAED;;;;GAIG;AACH,wBAAgB,6BAA6B,CAAC,MAAM,EAAE,SAAS,WAE9D;AAED;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG5D;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAG3D;AAED,wBAAgB,sBAAsB,CAAC,QAAQ,EAAE,cAAc,GAAG;IAChE,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB,CAaA"}
@@ -103,4 +103,19 @@ export function isCamelCaseNoAcronyms(name) {
103
103
  return true;
104
104
  return /^[^a-zA-Z0-9]?[a-z][a-z0-9]*([A-Z][a-z0-9]+)*[A-Z]?$/.test(name);
105
105
  }
106
+ export function findLineStartAndIndent(location) {
107
+ const text = location.file.text;
108
+ let pos = location.pos;
109
+ let indent = 0;
110
+ while (pos > 0 && text[pos - 1] !== "\n") {
111
+ if ([" ", "\t", "\n"].includes(text[pos - 1])) {
112
+ indent++;
113
+ }
114
+ else {
115
+ indent = 0;
116
+ }
117
+ pos--;
118
+ }
119
+ return { lineStart: pos, indent: location.file.text.slice(pos, pos + indent) };
120
+ }
106
121
  //# sourceMappingURL=utils.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/rules/utils.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/rules/utils.ts"],"names":[],"mappings":"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"}
package/lib/traits.tsp CHANGED
@@ -247,7 +247,7 @@ extern dec traitLocation(target: ModelProperty, contexts: EnumMember);
247
247
  */
248
248
  extern dec traitAdded(target: Model | ModelProperty, addedVersion: EnumMember | null);
249
249
 
250
- namespace Azure.Core.Traits.Private {
250
+ namespace Private {
251
251
  @added(Azure.Core.Versions.v1_0_Preview_2)
252
252
  @Private.addTraitProperties(Traits, Location, Contexts)
253
253
  model TraitProperties<
@@ -264,76 +264,67 @@ namespace Azure.Core.Traits.Private {
264
264
  @doc("The diagnostic to be raised when the trait is not present.")
265
265
  diagnostic: string;
266
266
  }
267
- }
268
267
 
269
- // These decorators are not meant to be used by TypeSpec authors
270
- namespace Azure {
271
- namespace Core {
272
- namespace Traits {
273
- namespace Private {
274
- /**
275
- * `@traitSource` stores the `traitName` of its original trait on the envelope property.
276
- *
277
- * @param target The trait envelope property where `traitName` will be stored.
278
- * @param traitName The name of the original trait to which this property belongs.
279
- */
280
- extern dec traitSource(target: ModelProperty, traitName: valueof string);
281
-
282
- /**
283
- * Copies trait properties from `traitModel` into `target` which conform to the
284
- * specified location and contexts.
285
- * @param traitModel The trait model type to be applied.
286
- * @param traitLocation The trait location to use for selecting trait properties.
287
- * @param traitContexts The trait contexts to use for selecting trait properties.
288
- */
289
- extern dec addTraitProperties(
290
- target: Model,
291
- traitModel: Model,
292
- traitLocation: EnumMember,
293
- traitContexts: EnumMember | Union | unknown
294
- );
295
-
296
- /**
297
- * `@applyTraitOverride` copies the `traitModel` into `target` and renames its envelope
298
- * property to enable the trait to override another trait sharing the same name.
299
- *
300
- * @param target The model into which the trait will be copied.
301
- * @param traitModel The trait model type to be overridden.
302
- */
303
- extern dec applyTraitOverride(target: Model, traitModel: Model);
304
-
305
- /**
306
- * `@ensureTraitsPresent` checks the envelope properties of `traitModel` to ensure all
307
- * of the `expectedTraits` are present as envelope properties.
308
- *
309
- * @param target The interface or operation where the `traitModel` should be checked.
310
- * @param traitModel The trait model type to check.
311
- * @param expectedTraits The array of `ExpectedTrait` models which describe each expected trait.
312
- */
313
- extern dec ensureTraitsPresent(
314
- target: Interface | TypeSpec.Reflection.Operation,
315
- traitModel: Model,
316
- expectedTraits: ExpectedTrait[]
317
- );
318
-
319
- /**
320
- * `@ensureAllQueryParams` checks the properties of `paramModel` to ensure they all are marked
321
- * with the `@query` decorator.
322
- *
323
- * @param target The model type where this check will be established.
324
- * @param paramModel The actual model type to check for query parameters.
325
- */
326
- extern dec ensureAllQueryParams(target: Model, paramModel: Model);
327
-
328
- /**
329
- * `@ensureAllHeaderParams` checks the properties of `paramModel` to ensure they all are marked
330
- * with the `@header` decorator.
331
- *
332
- * @param target The model type where this check will be established.
333
- * @param paramModel The actual model type to check for header properties.
334
- */
335
- extern dec ensureAllHeaderParams(target: Model, paramModel: Model);
336
- }
337
- }
338
- }
268
+ /**
269
+ * `@traitSource` stores the `traitName` of its original trait on the envelope property.
270
+ *
271
+ * @param target The trait envelope property where `traitName` will be stored.
272
+ * @param traitName The name of the original trait to which this property belongs.
273
+ */
274
+ extern dec traitSource(target: ModelProperty, traitName: valueof string);
275
+
276
+ /**
277
+ * Copies trait properties from `traitModel` into `target` which conform to the
278
+ * specified location and contexts.
279
+ * @param traitModel The trait model type to be applied.
280
+ * @param traitLocation The trait location to use for selecting trait properties.
281
+ * @param traitContexts The trait contexts to use for selecting trait properties.
282
+ */
283
+ extern dec addTraitProperties(
284
+ target: Model,
285
+ traitModel: Model,
286
+ traitLocation: EnumMember,
287
+ traitContexts: EnumMember | Union | unknown
288
+ );
289
+
290
+ /**
291
+ * `@applyTraitOverride` copies the `traitModel` into `target` and renames its envelope
292
+ * property to enable the trait to override another trait sharing the same name.
293
+ *
294
+ * @param target The model into which the trait will be copied.
295
+ * @param traitModel The trait model type to be overridden.
296
+ */
297
+ extern dec applyTraitOverride(target: Model, traitModel: Model);
298
+
299
+ /**
300
+ * `@ensureTraitsPresent` checks the envelope properties of `traitModel` to ensure all
301
+ * of the `expectedTraits` are present as envelope properties.
302
+ *
303
+ * @param target The interface or operation where the `traitModel` should be checked.
304
+ * @param traitModel The trait model type to check.
305
+ * @param expectedTraits The array of `ExpectedTrait` models which describe each expected trait.
306
+ */
307
+ extern dec ensureTraitsPresent(
308
+ target: Interface | TypeSpec.Reflection.Operation,
309
+ traitModel: Model,
310
+ expectedTraits: ExpectedTrait[]
311
+ );
312
+
313
+ /**
314
+ * `@ensureAllQueryParams` checks the properties of `paramModel` to ensure they all are marked
315
+ * with the `@query` decorator.
316
+ *
317
+ * @param target The model type where this check will be established.
318
+ * @param paramModel The actual model type to check for query parameters.
319
+ */
320
+ extern dec ensureAllQueryParams(target: Model, paramModel: Model);
321
+
322
+ /**
323
+ * `@ensureAllHeaderParams` checks the properties of `paramModel` to ensure they all are marked
324
+ * with the `@header` decorator.
325
+ *
326
+ * @param target The model type where this check will be established.
327
+ * @param paramModel The actual model type to check for header properties.
328
+ */
329
+ extern dec ensureAllHeaderParams(target: Model, paramModel: Model);
339
330
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@azure-tools/typespec-azure-core",
3
- "version": "0.45.0-dev.5",
3
+ "version": "0.45.0-dev.7",
4
4
  "author": "Microsoft Corporation",
5
5
  "description": "TypeSpec Azure Core library",
6
6
  "homepage": "https://azure.github.io/typespec-azure",