@azure-tools/typespec-azure-core 0.59.0-dev.1 → 0.59.0-dev.2

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 (51) hide show
  1. package/dist/src/decorators/lro-cancelled.d.ts +9 -0
  2. package/dist/src/decorators/lro-cancelled.d.ts.map +1 -0
  3. package/dist/src/decorators/lro-cancelled.js +10 -0
  4. package/dist/src/decorators/lro-cancelled.js.map +1 -0
  5. package/dist/src/decorators/lro-failed.d.ts +9 -0
  6. package/dist/src/decorators/lro-failed.d.ts.map +1 -0
  7. package/dist/src/decorators/lro-failed.js +10 -0
  8. package/dist/src/decorators/lro-failed.js.map +1 -0
  9. package/dist/src/decorators/lro-status.d.ts +12 -0
  10. package/dist/src/decorators/lro-status.d.ts.map +1 -0
  11. package/dist/src/decorators/lro-status.js +118 -0
  12. package/dist/src/decorators/lro-status.js.map +1 -0
  13. package/dist/src/decorators/lro-status.test.d.ts +2 -0
  14. package/dist/src/decorators/lro-status.test.d.ts.map +1 -0
  15. package/dist/src/decorators/lro-status.test.js +216 -0
  16. package/dist/src/decorators/lro-status.test.js.map +1 -0
  17. package/dist/src/decorators/lro-succeeded.d.ts +9 -0
  18. package/dist/src/decorators/lro-succeeded.d.ts.map +1 -0
  19. package/dist/src/decorators/lro-succeeded.js +10 -0
  20. package/dist/src/decorators/lro-succeeded.js.map +1 -0
  21. package/dist/src/decorators/preview-version.d.ts +7 -0
  22. package/dist/src/decorators/preview-version.d.ts.map +1 -0
  23. package/dist/src/decorators/preview-version.js +32 -0
  24. package/dist/src/decorators/preview-version.js.map +1 -0
  25. package/dist/src/decorators/preview-version.test.d.ts +2 -0
  26. package/dist/src/decorators/preview-version.test.d.ts.map +1 -0
  27. package/dist/src/decorators/preview-version.test.js +60 -0
  28. package/dist/src/decorators/preview-version.test.js.map +1 -0
  29. package/dist/src/decorators/utils.d.ts +3 -0
  30. package/dist/src/decorators/utils.d.ts.map +1 -0
  31. package/dist/src/decorators/utils.js +13 -0
  32. package/dist/src/decorators/utils.js.map +1 -0
  33. package/dist/src/decorators.d.ts +2 -27
  34. package/dist/src/decorators.d.ts.map +1 -1
  35. package/dist/src/decorators.js +2 -170
  36. package/dist/src/decorators.js.map +1 -1
  37. package/dist/src/index.d.ts +1 -0
  38. package/dist/src/index.d.ts.map +1 -1
  39. package/dist/src/index.js +1 -0
  40. package/dist/src/index.js.map +1 -1
  41. package/dist/src/lro-helpers.js +2 -1
  42. package/dist/src/lro-helpers.js.map +1 -1
  43. package/dist/src/lro-info.d.ts.map +1 -1
  44. package/dist/src/lro-info.js +2 -1
  45. package/dist/src/lro-info.js.map +1 -1
  46. package/dist/src/tsp-index.js +6 -1
  47. package/dist/src/tsp-index.js.map +1 -1
  48. package/dist/src/validate.d.ts.map +1 -1
  49. package/dist/src/validate.js +2 -1
  50. package/dist/src/validate.js.map +1 -1
  51. package/package.json +1 -1
@@ -0,0 +1,9 @@
1
+ import type { LroCanceledDecorator } from "../../generated-defs/Azure.Core.js";
2
+ export declare const
3
+ /**
4
+ * Returns `true` if the enum member represents a "canceled" state.
5
+ */
6
+ isLroCanceledState: (program: import("@typespec/compiler").Program, type: import("@typespec/compiler").EnumMember | import("@typespec/compiler").UnionVariant) => boolean, markLroCanceled: (program: import("@typespec/compiler").Program, type: import("@typespec/compiler").EnumMember | import("@typespec/compiler").UnionVariant) => void,
7
+ /** {@inheritdoc LroCanceledDecorator} */
8
+ $lroCanceled: LroCanceledDecorator;
9
+ //# sourceMappingURL=lro-cancelled.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lro-cancelled.d.ts","sourceRoot":"","sources":["../../../src/decorators/lro-cancelled.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAI/E,eAAO;AACL;;GAEG;AACH,kBAAkB,yJAClB,eAAe;AACf,yCAAyC;AACzC,YAAY,sBACiE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { AzureCoreStateKeys } from "../lib.js";
2
+ import { createMarkerDecorator } from "./utils.js";
3
+ export const [
4
+ /**
5
+ * Returns `true` if the enum member represents a "canceled" state.
6
+ */
7
+ isLroCanceledState, markLroCanceled,
8
+ /** {@inheritdoc LroCanceledDecorator} */
9
+ $lroCanceled,] = createMarkerDecorator(AzureCoreStateKeys.lroCanceled);
10
+ //# sourceMappingURL=lro-cancelled.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lro-cancelled.js","sourceRoot":"","sources":["../../../src/decorators/lro-cancelled.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,CAAC,MAAM;AACX;;GAEG;AACH,kBAAkB,EAClB,eAAe;AACf,yCAAyC;AACzC,YAAY,EACb,GAAG,qBAAqB,CAAuB,kBAAkB,CAAC,WAAW,CAAC,CAAC"}
@@ -0,0 +1,9 @@
1
+ import type { LroFailedDecorator } from "../../generated-defs/Azure.Core.js";
2
+ export declare const
3
+ /**
4
+ * Returns `true` if the enum member represents a "failed" state.
5
+ */
6
+ isLroFailedState: (program: import("@typespec/compiler").Program, type: import("@typespec/compiler").EnumMember | import("@typespec/compiler").UnionVariant) => boolean, markLroFailed: (program: import("@typespec/compiler").Program, type: import("@typespec/compiler").EnumMember | import("@typespec/compiler").UnionVariant) => void,
7
+ /** {@inheritdoc LroFailedDecorator} */
8
+ $lroFailed: LroFailedDecorator;
9
+ //# sourceMappingURL=lro-failed.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lro-failed.d.ts","sourceRoot":"","sources":["../../../src/decorators/lro-failed.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAI7E,eAAO;AACL;;GAEG;AACH,gBAAgB,yJAChB,aAAa;AACb,uCAAuC;AACvC,UAAU,oBAC+D,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { AzureCoreStateKeys } from "../lib.js";
2
+ import { createMarkerDecorator } from "./utils.js";
3
+ export const [
4
+ /**
5
+ * Returns `true` if the enum member represents a "failed" state.
6
+ */
7
+ isLroFailedState, markLroFailed,
8
+ /** {@inheritdoc LroFailedDecorator} */
9
+ $lroFailed,] = createMarkerDecorator(AzureCoreStateKeys.lroFailed);
10
+ //# sourceMappingURL=lro-failed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lro-failed.js","sourceRoot":"","sources":["../../../src/decorators/lro-failed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,CAAC,MAAM;AACX;;GAEG;AACH,gBAAgB,EAChB,aAAa;AACb,uCAAuC;AACvC,UAAU,EACX,GAAG,qBAAqB,CAAqB,kBAAkB,CAAC,SAAS,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { type Diagnostic, type Enum, type ModelProperty, type Program, type Type, type Union } from "@typespec/compiler";
2
+ import type { LroStatusDecorator } from "../../generated-defs/Azure.Core.js";
3
+ import { type LongRunningStates } from "../decorators.js";
4
+ declare const
5
+ /**
6
+ * Returns the `LongRunningStates` associated with `entity`.
7
+ */
8
+ getLongRunningStates: (program: Program, type: ModelProperty | Enum | Union) => LongRunningStates | undefined;
9
+ export { getLongRunningStates };
10
+ export declare const $lroStatus: LroStatusDecorator;
11
+ export declare function extractLroStates(program: Program, entity: Type): [LongRunningStates | undefined, readonly Diagnostic[]];
12
+ //# sourceMappingURL=lro-status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lro-status.d.ts","sourceRoot":"","sources":["../../../src/decorators/lro-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,KAAK,UAAU,EAEf,KAAK,IAAI,EAET,KAAK,aAAa,EAClB,KAAK,OAAO,EACZ,KAAK,IAAI,EACT,KAAK,KAAK,EAEX,MAAM,oBAAoB,CAAC;AAE5B,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,oCAAoC,CAAC;AAC7E,OAAO,EAAE,KAAK,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAM1D,QAAA;AACE;;GAEG;AACH,oBAAoB,yFAEwE,CAAC;AAE/F,OAAO,EAAE,oBAAoB,EAAE,CAAC;AAChC,eAAO,MAAM,UAAU,EAAE,kBASxB,CAAC;AAEF,wBAAgB,gBAAgB,CAC9B,OAAO,EAAE,OAAO,EAChB,MAAM,EAAE,IAAI,GACX,CAAC,iBAAiB,GAAG,SAAS,EAAE,SAAS,UAAU,EAAE,CAAC,CAuDxD"}
@@ -0,0 +1,118 @@
1
+ import { createDiagnosticCollector, } from "@typespec/compiler";
2
+ import { useStateMap } from "@typespec/compiler/utils";
3
+ import { AzureCoreStateKeys, createDiagnostic } from "../lib.js";
4
+ import { isLroCanceledState } from "./lro-cancelled.js";
5
+ import { isLroFailedState } from "./lro-failed.js";
6
+ import { isLroSucceededState } from "./lro-succeeded.js";
7
+ const [
8
+ /**
9
+ * Returns the `LongRunningStates` associated with `entity`.
10
+ */
11
+ getLongRunningStates, setLroStatus,] = useStateMap(AzureCoreStateKeys.lroStatus);
12
+ export { getLongRunningStates };
13
+ export const $lroStatus = (context, entity) => {
14
+ const [states, diagnostics] = extractLroStates(context.program, entity);
15
+ if (diagnostics.length > 0)
16
+ context.program.reportDiagnostics(diagnostics);
17
+ if (states) {
18
+ setLroStatus(context.program, entity, states);
19
+ }
20
+ };
21
+ export function extractLroStates(program, entity) {
22
+ const result = {
23
+ states: [],
24
+ succeededState: [],
25
+ failedState: [],
26
+ canceledState: [],
27
+ };
28
+ const diagnostics = createDiagnosticCollector();
29
+ if (entity.kind === "ModelProperty") {
30
+ // Call the function recursively on the property type
31
+ return extractLroStates(program, entity.type);
32
+ }
33
+ else if (entity.kind === "Enum") {
34
+ for (const member of entity.members.values()) {
35
+ storeLroState(program, result, member.name, member);
36
+ }
37
+ }
38
+ else if (entity.kind === "Union") {
39
+ extractLroStatesFromUnion(program, entity, result, diagnostics);
40
+ }
41
+ else {
42
+ diagnostics.add(createDiagnostic({
43
+ code: "lro-status-property-invalid-type",
44
+ target: entity,
45
+ format: {
46
+ type: entity.kind,
47
+ },
48
+ }));
49
+ return diagnostics.wrap(undefined);
50
+ }
51
+ // Make sure all terminal states have been identified
52
+ const missingStates = [];
53
+ if (result.succeededState.length < 1) {
54
+ missingStates.push("Succeeded");
55
+ }
56
+ if (result.failedState.length < 1) {
57
+ missingStates.push("Failed");
58
+ }
59
+ if (missingStates.length > 0) {
60
+ diagnostics.add(createDiagnostic({
61
+ code: "lro-status-missing",
62
+ target: entity,
63
+ format: {
64
+ states: missingStates.join(", "),
65
+ },
66
+ }));
67
+ return diagnostics.wrap(undefined);
68
+ }
69
+ return diagnostics.wrap(result);
70
+ }
71
+ function storeLroState(program, states, name, member) {
72
+ const expectedStates = [
73
+ ["Succeeded", isLroSucceededState, () => states.succeededState.push(name)],
74
+ ["Failed", isLroFailedState, () => states.failedState.push(name)],
75
+ ["Canceled", isLroCanceledState, () => states.canceledState.push(name)],
76
+ ];
77
+ states.states.push(name);
78
+ for (const [knownState, stateTest, setter] of expectedStates) {
79
+ if (name === knownState || (member && stateTest(program, member))) {
80
+ setter();
81
+ break;
82
+ }
83
+ }
84
+ }
85
+ function extractLroStatesFromUnion(program, entity, lroStateResult, diagnostics) {
86
+ if (entity.kind === "Union") {
87
+ for (const variant of entity.variants.values()) {
88
+ const option = variant.type;
89
+ if (option.kind === "Enum") {
90
+ for (const member of option.members.values()) {
91
+ storeLroState(program, lroStateResult, member.name, member);
92
+ }
93
+ }
94
+ else if (option.kind === "Union") {
95
+ extractLroStatesFromUnion(program, option, lroStateResult, diagnostics);
96
+ }
97
+ else if (option.kind === "Scalar" && option.name === "string") {
98
+ // Ignore string marking this union as open.
99
+ continue;
100
+ }
101
+ else if (option.kind !== "String") {
102
+ diagnostics.add(createDiagnostic({
103
+ code: "lro-status-union-non-string",
104
+ target: option,
105
+ format: {
106
+ type: option.kind,
107
+ },
108
+ }));
109
+ return diagnostics.wrap(undefined);
110
+ }
111
+ else {
112
+ storeLroState(program, lroStateResult, typeof variant.name === "string" ? variant.name : option.value, variant);
113
+ }
114
+ }
115
+ }
116
+ return;
117
+ }
118
+ //# sourceMappingURL=lro-status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lro-status.js","sourceRoot":"","sources":["../../../src/decorators/lro-status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=lro-status.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lro-status.test.d.ts","sourceRoot":"","sources":["../../../src/decorators/lro-status.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,216 @@
1
+ import { expectDiagnostics, t } from "@typespec/compiler/testing";
2
+ import { deepStrictEqual } from "assert";
3
+ import { it } from "vitest";
4
+ import { Tester } from "../../test/test-host.js";
5
+ import { getLongRunningStates } from "./lro-status.js";
6
+ it("emits diagnostic if used on wrong type", async () => {
7
+ const diagnostics = await Tester.diagnose(`
8
+ @lroStatus
9
+ op foo(): void;
10
+
11
+ @lroStatus
12
+ interface Foo {}
13
+ `);
14
+ expectDiagnostics(diagnostics, [
15
+ {
16
+ code: "decorator-wrong-target",
17
+ message: "Cannot apply @lroStatus decorator to foo since it is not assignable to Enum | Union | ModelProperty",
18
+ },
19
+ {
20
+ code: "decorator-wrong-target",
21
+ message: "Cannot apply @lroStatus decorator to Foo since it is not assignable to Enum | Union | ModelProperty",
22
+ },
23
+ ]);
24
+ });
25
+ it("emits diagnostic when model property type isn't valid", async () => {
26
+ const diagnostics = await Tester.diagnose(`
27
+ model BadStatusType {
28
+ @lroStatus status: int32;
29
+ }
30
+
31
+ model BadUnionType {
32
+ @lroStatus status: "Succeeded" | int64;
33
+ }
34
+ `);
35
+ expectDiagnostics(diagnostics, [
36
+ {
37
+ code: "@azure-tools/typespec-azure-core/lro-status-property-invalid-type",
38
+ message: "Property type must be a union of strings or an enum.",
39
+ },
40
+ {
41
+ code: "@azure-tools/typespec-azure-core/lro-status-union-non-string",
42
+ message: "Union contains non-string value type Scalar.",
43
+ },
44
+ {
45
+ code: "@azure-tools/typespec-azure-core/lro-status-missing",
46
+ message: "Terminal long-running operation states are missing: Failed.",
47
+ },
48
+ ]);
49
+ });
50
+ it("emits diagnostic when standard terminal states are missing", async () => {
51
+ const diagnostics = await Tester.diagnose(`
52
+ model UnionMissingStates {
53
+ @lroStatus status: "Completed" | "Failed" | "Cancelled" | "Working" | "Extra";
54
+ }
55
+
56
+ @lroStatus
57
+ enum EnumMissingStates {
58
+ Succeeded, Error, Cancelled
59
+ }
60
+ `);
61
+ expectDiagnostics(diagnostics, [
62
+ {
63
+ code: "@azure-tools/typespec-azure-core/lro-status-missing",
64
+ message: "Terminal long-running operation states are missing: Succeeded.",
65
+ },
66
+ {
67
+ code: "@azure-tools/typespec-azure-core/lro-status-missing",
68
+ message: "Terminal long-running operation states are missing: Failed.",
69
+ },
70
+ ]);
71
+ });
72
+ it("returns LRO states from a string union", async () => {
73
+ const { StatusModel, program } = await Tester.compile(t.code `
74
+ model ${t.model("StatusModel")} {
75
+ @lroStatus status: "Succeeded" | "Failed" | "Canceled" | "Working" | "Extra";
76
+ }
77
+ `);
78
+ deepStrictEqual(getLongRunningStates(program, StatusModel.properties.get("status")), {
79
+ succeededState: ["Succeeded"],
80
+ failedState: ["Failed"],
81
+ canceledState: ["Canceled"],
82
+ states: ["Succeeded", "Failed", "Canceled", "Working", "Extra"],
83
+ });
84
+ });
85
+ it("returns LRO states from an enum type", async () => {
86
+ const { DefaultLroStates, CustomLroStates, program } = await Tester.compile(t.code `
87
+ @lroStatus
88
+ enum ${t.enum("DefaultLroStates")} {
89
+ Succeeded,
90
+ Failed,
91
+ Canceled,
92
+ Extra,
93
+ }
94
+
95
+ @lroStatus
96
+ enum ${t.enum("CustomLroStates")} {
97
+ @lroSucceeded Donezo,
98
+ @lroFailed Borked,
99
+ @lroCanceled Chucked,
100
+ HaveAnother,
101
+ }
102
+ `);
103
+ deepStrictEqual(getLongRunningStates(program, DefaultLroStates), {
104
+ succeededState: ["Succeeded"],
105
+ failedState: ["Failed"],
106
+ canceledState: ["Canceled"],
107
+ states: ["Succeeded", "Failed", "Canceled", "Extra"],
108
+ });
109
+ deepStrictEqual(getLongRunningStates(program, CustomLroStates), {
110
+ succeededState: ["Donezo"],
111
+ failedState: ["Borked"],
112
+ canceledState: ["Chucked"],
113
+ states: ["Donezo", "Borked", "Chucked", "HaveAnother"],
114
+ });
115
+ });
116
+ it("returns LRO states from an named union type", async () => {
117
+ const { DefaultLroStates, CustomLroStates, program } = await Tester.compile(t.code `
118
+ @lroStatus
119
+ union ${t.union("DefaultLroStates")} {
120
+ "Succeeded",
121
+ "Failed",
122
+ "Canceled",
123
+ "Extra",
124
+ }
125
+
126
+ @lroStatus
127
+ union ${t.union("CustomLroStates")} {
128
+ @lroSucceeded "Donezo",
129
+ @lroFailed "Borked",
130
+ @lroCanceled "Chucked",
131
+ "HaveAnother",
132
+ }
133
+ `);
134
+ deepStrictEqual(getLongRunningStates(program, DefaultLroStates), {
135
+ succeededState: ["Succeeded"],
136
+ failedState: ["Failed"],
137
+ canceledState: ["Canceled"],
138
+ states: ["Succeeded", "Failed", "Canceled", "Extra"],
139
+ });
140
+ deepStrictEqual(getLongRunningStates(program, CustomLroStates), {
141
+ succeededState: ["Donezo"],
142
+ failedState: ["Borked"],
143
+ canceledState: ["Chucked"],
144
+ states: ["Donezo", "Borked", "Chucked", "HaveAnother"],
145
+ });
146
+ });
147
+ it("returns LRO states from an named union type built with enum", async () => {
148
+ const { DefaultLroStates, program } = await Tester.compile(t.code `
149
+ enum CommonStates {
150
+ Succeeded,
151
+ Failed,
152
+ Canceled
153
+ }
154
+
155
+ @lroStatus
156
+ union ${t.union("DefaultLroStates")} {
157
+ CommonStates,
158
+ "Extra",
159
+ }
160
+ `);
161
+ deepStrictEqual(getLongRunningStates(program, DefaultLroStates), {
162
+ succeededState: ["Succeeded"],
163
+ failedState: ["Failed"],
164
+ canceledState: ["Canceled"],
165
+ states: ["Succeeded", "Failed", "Canceled", "Extra"],
166
+ });
167
+ });
168
+ it("returns LRO states from a string type with known values", async () => {
169
+ const { DefaultLroStates, CustomLroStates, program } = await Tester.compile(t.code `
170
+ @lroStatus
171
+ enum ${t.enum("DefaultLroStates")} {
172
+ Succeeded,
173
+ Failed,
174
+ Canceled,
175
+ Extra,
176
+ }
177
+
178
+ @lroStatus
179
+ enum ${t.enum("CustomLroStates")} {
180
+ @lroSucceeded Donezo,
181
+ @lroFailed Borked,
182
+ @lroCanceled Chucked,
183
+ HaveAnother,
184
+ }
185
+ `);
186
+ deepStrictEqual(getLongRunningStates(program, DefaultLroStates), {
187
+ succeededState: ["Succeeded"],
188
+ failedState: ["Failed"],
189
+ canceledState: ["Canceled"],
190
+ states: ["Succeeded", "Failed", "Canceled", "Extra"],
191
+ });
192
+ deepStrictEqual(getLongRunningStates(program, CustomLroStates), {
193
+ succeededState: ["Donezo"],
194
+ failedState: ["Borked"],
195
+ canceledState: ["Chucked"],
196
+ states: ["Donezo", "Borked", "Chucked", "HaveAnother"],
197
+ });
198
+ });
199
+ it("resolve default state from union variant name", async () => {
200
+ const { DefaultLroStates, program } = await Tester.compile(t.code `
201
+ @lroStatus
202
+ union ${t.union("DefaultLroStates")} {
203
+ Succeeded: "uSucceeded",
204
+ Failed: "uFailed",
205
+ Canceled: "uCancelled",
206
+ Extra: "uExtra",
207
+ }
208
+ `);
209
+ deepStrictEqual(getLongRunningStates(program, DefaultLroStates), {
210
+ succeededState: ["Succeeded"],
211
+ failedState: ["Failed"],
212
+ canceledState: ["Canceled"],
213
+ states: ["Succeeded", "Failed", "Canceled", "Extra"],
214
+ });
215
+ });
216
+ //# sourceMappingURL=lro-status.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lro-status.test.js","sourceRoot":"","sources":["../../../src/decorators/lro-status.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import type { LroSucceededDecorator } from "../../generated-defs/Azure.Core.js";
2
+ export declare const
3
+ /**
4
+ * Returns `true` if the enum member represents a "succeeded" state.
5
+ */
6
+ isLroSucceededState: (program: import("@typespec/compiler").Program, type: import("@typespec/compiler").EnumMember | import("@typespec/compiler").UnionVariant) => boolean, markLroSucceeded: (program: import("@typespec/compiler").Program, type: import("@typespec/compiler").EnumMember | import("@typespec/compiler").UnionVariant) => void,
7
+ /** {@inheritdoc LroSucceededDecorator} */
8
+ $lroSucceeded: LroSucceededDecorator;
9
+ //# sourceMappingURL=lro-succeeded.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lro-succeeded.d.ts","sourceRoot":"","sources":["../../../src/decorators/lro-succeeded.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,MAAM,oCAAoC,CAAC;AAIhF,eAAO;AACL;;GAEG;AACH,mBAAmB,yJACnB,gBAAgB;AAChB,0CAA0C;AAC1C,aAAa,uBACkE,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { AzureCoreStateKeys } from "../lib.js";
2
+ import { createMarkerDecorator } from "./utils.js";
3
+ export const [
4
+ /**
5
+ * Returns `true` if the enum member represents a "succeeded" state.
6
+ */
7
+ isLroSucceededState, markLroSucceeded,
8
+ /** {@inheritdoc LroSucceededDecorator} */
9
+ $lroSucceeded,] = createMarkerDecorator(AzureCoreStateKeys.lroSucceeded);
10
+ //# sourceMappingURL=lro-succeeded.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"lro-succeeded.js","sourceRoot":"","sources":["../../../src/decorators/lro-succeeded.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,kBAAkB,EAAE,MAAM,WAAW,CAAC;AAC/C,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAEnD,MAAM,CAAC,MAAM;AACX;;GAEG;AACH,mBAAmB,EACnB,gBAAgB;AAChB,0CAA0C;AAC1C,aAAa,EACd,GAAG,qBAAqB,CAAwB,kBAAkB,CAAC,YAAY,CAAC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { EnumMember, Program } from "@typespec/compiler";
2
+ import type { PreviewVersionDecorator } from "../../generated-defs/Azure.Core.js";
3
+ declare const isPreviewVersion: (program: Program, type: EnumMember) => boolean;
4
+ export { isPreviewVersion };
5
+ export declare const $previewVersion: PreviewVersionDecorator;
6
+ export declare function checkPreviewVersion(program: Program): void;
7
+ //# sourceMappingURL=preview-version.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview-version.d.ts","sourceRoot":"","sources":["../../../src/decorators/preview-version.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAoB,UAAU,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AAGhF,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,oCAAoC,CAAC;AAGlF,QAAA,MAAO,gBAAgB,iDAEtB,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B,eAAO,MAAM,eAAe,EAAE,uBAK7B,CAAC;AAEF,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,QA+BnD"}
@@ -0,0 +1,32 @@
1
+ import { useStateSet } from "@typespec/compiler/utils";
2
+ import { getVersionForEnumMember } from "@typespec/versioning";
3
+ import { AzureCoreStateKeys, createDiagnostic } from "../lib.js";
4
+ const [isPreviewVersion, markPreviewVersion] = useStateSet(AzureCoreStateKeys.previewVersion);
5
+ export { isPreviewVersion };
6
+ export const $previewVersion = (context, target) => {
7
+ markPreviewVersion(context.program, target);
8
+ };
9
+ export function checkPreviewVersion(program) {
10
+ const previewVersions = program.stateSet(AzureCoreStateKeys.previewVersion);
11
+ for (const target of previewVersions) {
12
+ const resolvedVersion = getVersionForEnumMember(program, target);
13
+ // Validate that the target is a member of a Version enum
14
+ if (!resolvedVersion) {
15
+ program.reportDiagnostic(createDiagnostic({
16
+ code: "preview-version-invalid-enum-member",
17
+ target,
18
+ }));
19
+ return;
20
+ }
21
+ // Validate that the target is the last member of the Version enum
22
+ const totalMembers = resolvedVersion.enumMember.enum.members.size;
23
+ if (resolvedVersion.index !== totalMembers - 1) {
24
+ program.reportDiagnostic(createDiagnostic({
25
+ code: "preview-version-last-member",
26
+ target,
27
+ }));
28
+ return;
29
+ }
30
+ }
31
+ }
32
+ //# sourceMappingURL=preview-version.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview-version.js","sourceRoot":"","sources":["../../../src/decorators/preview-version.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AACvD,OAAO,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE/D,OAAO,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,MAAM,WAAW,CAAC;AAEjE,MAAM,CAAC,gBAAgB,EAAE,kBAAkB,CAAC,GAAG,WAAW,CACxD,kBAAkB,CAAC,cAAc,CAClC,CAAC;AAEF,OAAO,EAAE,gBAAgB,EAAE,CAAC;AAE5B,MAAM,CAAC,MAAM,eAAe,GAA4B,CACtD,OAAyB,EACzB,MAAkB,EAClB,EAAE;IACF,kBAAkB,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAC9C,CAAC,CAAC;AAEF,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,MAAM,eAAe,GAAG,OAAO,CAAC,QAAQ,CACtC,kBAAkB,CAAC,cAAc,CACV,CAAC;IAE1B,KAAK,MAAM,MAAM,IAAI,eAAe,EAAE,CAAC;QACrC,MAAM,eAAe,GAAG,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAEjE,yDAAyD;QACzD,IAAI,CAAC,eAAe,EAAE,CAAC;YACrB,OAAO,CAAC,gBAAgB,CACtB,gBAAgB,CAAC;gBACf,IAAI,EAAE,qCAAqC;gBAC3C,MAAM;aACP,CAAC,CACH,CAAC;YACF,OAAO;QACT,CAAC;QAED,kEAAkE;QAClE,MAAM,YAAY,GAAG,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;QAClE,IAAI,eAAe,CAAC,KAAK,KAAK,YAAY,GAAG,CAAC,EAAE,CAAC;YAC/C,OAAO,CAAC,gBAAgB,CACtB,gBAAgB,CAAC;gBACf,IAAI,EAAE,6BAA6B;gBACnC,MAAM;aACP,CAAC,CACH,CAAC;YACF,OAAO;QACT,CAAC;IACH,CAAC;AACH,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=preview-version.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview-version.test.d.ts","sourceRoot":"","sources":["../../../src/decorators/preview-version.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,60 @@
1
+ import { expectDiagnostics, t } from "@typespec/compiler/testing";
2
+ import { expect, it } from "vitest";
3
+ import { Tester } from "../../test/test-host.js";
4
+ import { isPreviewVersion } from "./preview-version.js";
5
+ it("emit diagnostic if use on non enum member", async () => {
6
+ const diagnostics = await Tester.diagnose(`
7
+ @previewVersion
8
+ model Foo {}
9
+ `);
10
+ expectDiagnostics(diagnostics, {
11
+ code: "decorator-wrong-target",
12
+ message: "Cannot apply @previewVersion decorator to Foo since it is not assignable to EnumMember",
13
+ });
14
+ });
15
+ it("emit diagnostic if use on enum member that is not part of a version enum", async () => {
16
+ const diagnostics = await Tester.diagnose(`
17
+ enum Foo {
18
+ @previewVersion
19
+ v1: "1.0",
20
+ }
21
+ `);
22
+ expectDiagnostics(diagnostics, {
23
+ code: "@azure-tools/typespec-azure-core/preview-version-invalid-enum-member",
24
+ message: "@previewVersion can only be applied to members of a Version enum.",
25
+ });
26
+ });
27
+ it("emit diagnostic if use on enum member that is not the last member", async () => {
28
+ const diagnostics = await Tester.diagnose(`
29
+ @versioned(Versions)
30
+ @service
31
+ namespace DemoService;
32
+
33
+ enum Versions {
34
+ v1,
35
+ @Azure.Core.previewVersion
36
+ v2Preview: "2.0-preview",
37
+ v2: "2.0",
38
+ }
39
+ `);
40
+ expectDiagnostics(diagnostics, {
41
+ code: "@azure-tools/typespec-azure-core/preview-version-last-member",
42
+ message: "@previewVersion can only be applied to the last member of a Version enum. Having it on other members will cause unstable apis to show up in subsequent stable versions.",
43
+ });
44
+ });
45
+ it("succeeds to decorate the last enum member", async () => {
46
+ const { program, v2Preview } = await Tester.compile(t.code `
47
+ @versioned(Versions)
48
+ @service
49
+ namespace DemoService;
50
+
51
+ enum Versions {
52
+ v1,
53
+ @Azure.Core.previewVersion
54
+ ${t.enumMember("v2Preview")}: "2.0-preview",
55
+ }
56
+ `);
57
+ expect(v2Preview.name).toBe("v2Preview");
58
+ expect(isPreviewVersion(program, v2Preview)).toBe(true);
59
+ });
60
+ //# sourceMappingURL=preview-version.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preview-version.test.js","sourceRoot":"","sources":["../../../src/decorators/preview-version.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,CAAC,EAAE,MAAM,4BAA4B,CAAC;AAClE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAExD,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;IACzD,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;;;GAGzC,CAAC,CAAC;IACH,iBAAiB,CAAC,WAAW,EAAE;QAC7B,IAAI,EAAE,wBAAwB;QAC9B,OAAO,EACL,wFAAwF;KAC3F,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,0EAA0E,EAAE,KAAK,IAAI,EAAE;IACxF,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;;;;;GAKzC,CAAC,CAAC;IACH,iBAAiB,CAAC,WAAW,EAAE;QAC7B,IAAI,EAAE,sEAAsE;QAC5E,OAAO,EAAE,mEAAmE;KAC7E,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,mEAAmE,EAAE,KAAK,IAAI,EAAE;IACjF,MAAM,WAAW,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;;;;;;;;;;;GAWzC,CAAC,CAAC;IACH,iBAAiB,CAAC,WAAW,EAAE;QAC7B,IAAI,EAAE,8DAA8D;QACpE,OAAO,EACL,yKAAyK;KAC5K,CAAC,CAAC;AACL,CAAC,CAAC,CAAC;AAEH,EAAE,CAAC,2CAA2C,EAAE,KAAK,IAAI,EAAE;IACzD,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,GAAG,MAAM,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;;;;;;;;QAQpD,CAAC,CAAC,UAAU,CAAC,WAAW,CAAC;;GAE9B,CAAC,CAAC;IAEH,MAAM,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACzC,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1D,CAAC,CAAC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { DecoratorFunction } from "@typespec/compiler";
2
+ export declare function createMarkerDecorator<T extends DecoratorFunction>(key: symbol, validate?: (...args: Parameters<T>) => boolean): readonly [(program: import("@typespec/compiler").Program, type: Parameters<T>[1]) => boolean, (program: import("@typespec/compiler").Program, type: Parameters<T>[1]) => void, T];
3
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../src/decorators/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AAGvD,wBAAgB,qBAAqB,CAAC,CAAC,SAAS,iBAAiB,EAC/D,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,UAAU,CAAC,CAAC,CAAC,KAAK,OAAO,qLAW/C"}
@@ -0,0 +1,13 @@
1
+ import { useStateSet } from "@typespec/compiler/utils";
2
+ export function createMarkerDecorator(key, validate) {
3
+ const [isLink, markLink] = useStateSet(key);
4
+ const decorator = (...args) => {
5
+ if (validate && !validate(...args)) {
6
+ return;
7
+ }
8
+ const [context, target] = args;
9
+ markLink(context.program, target);
10
+ };
11
+ return [isLink, markLink, decorator];
12
+ }
13
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../../src/decorators/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,0BAA0B,CAAC;AAEvD,MAAM,UAAU,qBAAqB,CACnC,GAAW,EACX,QAA8C;IAE9C,MAAM,CAAC,MAAM,EAAE,QAAQ,CAAC,GAAG,WAAW,CAAmB,GAAG,CAAC,CAAC;IAC9D,MAAM,SAAS,GAAG,CAAC,GAAG,IAAmB,EAAE,EAAE;QAC3C,IAAI,QAAQ,IAAI,CAAC,QAAQ,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC;YACnC,OAAO;QACT,CAAC;QACD,MAAM,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,IAAI,CAAC;QAC/B,QAAQ,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;IACpC,CAAC,CAAC;IACF,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,SAAc,CAAU,CAAC;AACrD,CAAC"}