@typespec/versioning 0.57.0-dev.4 → 0.57.0-dev.6

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 (39) hide show
  1. package/dist/src/decorators.d.ts +64 -0
  2. package/dist/src/decorators.d.ts.map +1 -0
  3. package/dist/src/decorators.js +304 -0
  4. package/dist/src/decorators.js.map +1 -0
  5. package/dist/src/index.d.ts +2 -0
  6. package/dist/src/index.d.ts.map +1 -1
  7. package/dist/src/index.js +2 -0
  8. package/dist/src/index.js.map +1 -1
  9. package/dist/src/internal-projection-functions.d.ts +21 -0
  10. package/dist/src/internal-projection-functions.d.ts.map +1 -0
  11. package/dist/src/internal-projection-functions.js +88 -0
  12. package/dist/src/internal-projection-functions.js.map +1 -0
  13. package/dist/src/lib.d.ts +45 -45
  14. package/dist/src/lib.d.ts.map +1 -1
  15. package/dist/src/lib.js +15 -3
  16. package/dist/src/lib.js.map +1 -1
  17. package/dist/src/projection.d.ts +10 -0
  18. package/dist/src/projection.d.ts.map +1 -0
  19. package/dist/src/projection.js +38 -0
  20. package/dist/src/projection.js.map +1 -0
  21. package/dist/src/testing/index.d.ts +1 -1
  22. package/dist/src/testing/index.d.ts.map +1 -1
  23. package/dist/src/types.d.ts +1 -1
  24. package/dist/src/types.d.ts.map +1 -1
  25. package/dist/src/validate.d.ts +1 -1
  26. package/dist/src/validate.d.ts.map +1 -1
  27. package/dist/src/validate.js +5 -2
  28. package/dist/src/validate.js.map +1 -1
  29. package/dist/src/versioning-timeline.d.ts +2 -2
  30. package/dist/src/versioning-timeline.d.ts.map +1 -1
  31. package/dist/src/versioning-timeline.js.map +1 -1
  32. package/dist/src/versioning.d.ts +3 -89
  33. package/dist/src/versioning.d.ts.map +1 -1
  34. package/dist/src/versioning.js +23 -446
  35. package/dist/src/versioning.js.map +1 -1
  36. package/lib/decorators.tsp +180 -212
  37. package/lib/main.tsp +3 -0
  38. package/lib/{versioning.tsp → projection.tsp} +34 -2
  39. package/package.json +2 -2
@@ -0,0 +1,64 @@
1
+ import type { DecoratorContext, Enum, EnumMember, Interface, Model, ModelProperty, Namespace, Operation, Program, Scalar, Type, Union, UnionVariant } from "@typespec/compiler";
2
+ import type { AddedDecorator, MadeOptionalDecorator, MadeRequiredDecorator, RenamedFromDecorator, ReturnTypeChangedFromDecorator, TypeChangedFromDecorator, VersionedDecorator } from "../generated-defs/TypeSpec.Versioning.js";
3
+ import type { Version } from "./types.js";
4
+ export declare const namespace = "TypeSpec.Versioning";
5
+ export declare const $added: AddedDecorator;
6
+ export declare function $removed(context: DecoratorContext, t: Model | ModelProperty | Operation | Enum | EnumMember | Union | UnionVariant | Scalar | Interface, v: EnumMember): void;
7
+ /**
8
+ * Returns the mapping of versions to old type values, if applicable
9
+ * @param p TypeSpec program
10
+ * @param t type to query
11
+ * @returns Map of versions to old types, if any
12
+ */
13
+ export declare function getTypeChangedFrom(p: Program, t: Type): Map<Version, Type> | undefined;
14
+ export declare const $typeChangedFrom: TypeChangedFromDecorator;
15
+ /**
16
+ * Returns the mapping of versions to old return type values, if applicable
17
+ * @param p TypeSpec program
18
+ * @param t type to query
19
+ * @returns Map of versions to old types, if any
20
+ */
21
+ export declare function getReturnTypeChangedFrom(p: Program, t: Type): Map<Version, Type> | undefined;
22
+ export declare const $returnTypeChangedFrom: ReturnTypeChangedFromDecorator;
23
+ interface RenamedFrom {
24
+ version: Version;
25
+ oldName: string;
26
+ }
27
+ export declare const $renamedFrom: RenamedFromDecorator;
28
+ export declare const $madeOptional: MadeOptionalDecorator;
29
+ export declare const $madeRequired: MadeRequiredDecorator;
30
+ /**
31
+ * @returns version when the given type was made required if applicable.
32
+ */
33
+ export declare function getMadeRequiredOn(p: Program, t: Type): Version | undefined;
34
+ /**
35
+ * @returns the array of RenamedFrom metadata if applicable.
36
+ */
37
+ export declare function getRenamedFrom(p: Program, t: Type): Array<RenamedFrom> | undefined;
38
+ /**
39
+ * @returns the list of versions for which this decorator has been applied
40
+ */
41
+ export declare function getRenamedFromVersions(p: Program, t: Type): Version[] | undefined;
42
+ export declare function getAddedOnVersions(p: Program, t: Type): Version[] | undefined;
43
+ export declare function getRemovedOnVersions(p: Program, t: Type): Version[] | undefined;
44
+ /**
45
+ * @returns version when the given type was made optional if applicable.
46
+ */
47
+ export declare function getMadeOptionalOn(p: Program, t: Type): Version | undefined;
48
+ export declare class VersionMap {
49
+ private map;
50
+ constructor(namespace: Namespace, enumType: Enum);
51
+ getVersionForEnumMember(member: EnumMember): Version | undefined;
52
+ getVersions(): Version[];
53
+ get size(): number;
54
+ }
55
+ export declare const $versioned: VersionedDecorator;
56
+ /**
57
+ * Get the version map of the namespace.
58
+ */
59
+ export declare function getVersion(program: Program, namespace: Namespace): VersionMap | undefined;
60
+ export declare function findVersionedNamespace(program: Program, namespace: Namespace): Namespace | undefined;
61
+ export declare function $useDependency(context: DecoratorContext, target: EnumMember | Namespace, ...versionRecords: EnumMember[]): void;
62
+ export declare function getUseDependencies(program: Program, target: Namespace | Enum, searchEnum?: boolean): Map<Namespace, Map<Version, Version> | Version> | undefined;
63
+ export {};
64
+ //# sourceMappingURL=decorators.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.d.ts","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,304 @@
1
+ import { VersioningStateKeys, reportDiagnostic } from "./lib.js";
2
+ import { getVersionForEnumMember } from "./versioning.js";
3
+ export const namespace = "TypeSpec.Versioning";
4
+ function checkIsVersion(program, enumMember, diagnosticTarget) {
5
+ const version = getVersionForEnumMember(program, enumMember);
6
+ if (!version) {
7
+ reportDiagnostic(program, {
8
+ code: "version-not-found",
9
+ target: diagnosticTarget,
10
+ format: { version: enumMember.name, enumName: enumMember.enum.name },
11
+ });
12
+ }
13
+ return version;
14
+ }
15
+ export const $added = (context, t, v) => {
16
+ const { program } = context;
17
+ const version = checkIsVersion(context.program, v, context.getArgumentTarget(0));
18
+ if (!version) {
19
+ return;
20
+ }
21
+ // retrieve statemap to update or create a new one
22
+ const record = program.stateMap(VersioningStateKeys.addedOn).get(t) ?? new Array();
23
+ record.push(version);
24
+ // ensure that records are stored in ascending order
25
+ record.sort((a, b) => a.index - b.index);
26
+ program.stateMap(VersioningStateKeys.addedOn).set(t, record);
27
+ };
28
+ export function $removed(context, t, v) {
29
+ const { program } = context;
30
+ const version = checkIsVersion(context.program, v, context.getArgumentTarget(0));
31
+ if (!version) {
32
+ return;
33
+ }
34
+ // retrieve statemap to update or create a new one
35
+ const record = program.stateMap(VersioningStateKeys.removedOn).get(t) ?? new Array();
36
+ record.push(version);
37
+ // ensure that records are stored in ascending order
38
+ record.sort((a, b) => a.index - b.index);
39
+ program.stateMap(VersioningStateKeys.removedOn).set(t, record);
40
+ }
41
+ /**
42
+ * Returns the mapping of versions to old type values, if applicable
43
+ * @param p TypeSpec program
44
+ * @param t type to query
45
+ * @returns Map of versions to old types, if any
46
+ */
47
+ export function getTypeChangedFrom(p, t) {
48
+ return p.stateMap(VersioningStateKeys.typeChangedFrom).get(t);
49
+ }
50
+ export const $typeChangedFrom = (context, prop, v, oldType) => {
51
+ const { program } = context;
52
+ const version = checkIsVersion(context.program, v, context.getArgumentTarget(0));
53
+ if (!version) {
54
+ return;
55
+ }
56
+ // retrieve statemap to update or create a new one
57
+ let record = getTypeChangedFrom(program, prop) ?? new Map();
58
+ record.set(version, oldType);
59
+ // ensure the map is sorted by version
60
+ record = new Map([...record.entries()].sort((a, b) => a[0].index - b[0].index));
61
+ program.stateMap(VersioningStateKeys.typeChangedFrom).set(prop, record);
62
+ };
63
+ /**
64
+ * Returns the mapping of versions to old return type values, if applicable
65
+ * @param p TypeSpec program
66
+ * @param t type to query
67
+ * @returns Map of versions to old types, if any
68
+ */
69
+ export function getReturnTypeChangedFrom(p, t) {
70
+ return p.stateMap(VersioningStateKeys.returnTypeChangedFrom).get(t);
71
+ }
72
+ export const $returnTypeChangedFrom = (context, op, v, oldReturnType) => {
73
+ const { program } = context;
74
+ const version = checkIsVersion(context.program, v, context.getArgumentTarget(0));
75
+ if (!version) {
76
+ return;
77
+ }
78
+ // retrieve statemap to update or create a new one
79
+ let record = getReturnTypeChangedFrom(program, op) ?? new Map();
80
+ record.set(version, oldReturnType);
81
+ // ensure the map is sorted by version
82
+ record = new Map([...record.entries()].sort((a, b) => a[0].index - b[0].index));
83
+ program.stateMap(VersioningStateKeys.returnTypeChangedFrom).set(op, record);
84
+ };
85
+ export const $renamedFrom = (context, t, v, oldName) => {
86
+ const { program } = context;
87
+ const version = checkIsVersion(context.program, v, context.getArgumentTarget(0));
88
+ if (!version) {
89
+ return;
90
+ }
91
+ if (oldName === "") {
92
+ reportDiagnostic(program, {
93
+ code: "invalid-renamed-from-value",
94
+ target: t,
95
+ });
96
+ }
97
+ // retrieve statemap to update or create a new one
98
+ const record = getRenamedFrom(program, t) ?? [];
99
+ record.push({ version: version, oldName: oldName });
100
+ // ensure that records are stored in ascending order
101
+ record.sort((a, b) => a.version.index - b.version.index);
102
+ program.stateMap(VersioningStateKeys.renamedFrom).set(t, record);
103
+ };
104
+ export const $madeOptional = (context, t, v) => {
105
+ const { program } = context;
106
+ const version = checkIsVersion(context.program, v, context.getArgumentTarget(0));
107
+ if (!version) {
108
+ return;
109
+ }
110
+ program.stateMap(VersioningStateKeys.madeOptional).set(t, version);
111
+ };
112
+ export const $madeRequired = (context, t, v) => {
113
+ const { program } = context;
114
+ const version = checkIsVersion(context.program, v, context.getArgumentTarget(0));
115
+ if (!version) {
116
+ return;
117
+ }
118
+ program.stateMap(VersioningStateKeys.madeRequired).set(t, version);
119
+ };
120
+ /**
121
+ * @returns version when the given type was made required if applicable.
122
+ */
123
+ export function getMadeRequiredOn(p, t) {
124
+ return p.stateMap(VersioningStateKeys.madeRequired).get(t);
125
+ }
126
+ /**
127
+ * @returns the array of RenamedFrom metadata if applicable.
128
+ */
129
+ export function getRenamedFrom(p, t) {
130
+ return p.stateMap(VersioningStateKeys.renamedFrom).get(t);
131
+ }
132
+ /**
133
+ * @returns the list of versions for which this decorator has been applied
134
+ */
135
+ export function getRenamedFromVersions(p, t) {
136
+ return getRenamedFrom(p, t)?.map((x) => x.version);
137
+ }
138
+ export function getAddedOnVersions(p, t) {
139
+ return p.stateMap(VersioningStateKeys.addedOn).get(t);
140
+ }
141
+ export function getRemovedOnVersions(p, t) {
142
+ return p.stateMap(VersioningStateKeys.removedOn).get(t);
143
+ }
144
+ /**
145
+ * @returns version when the given type was made optional if applicable.
146
+ */
147
+ export function getMadeOptionalOn(p, t) {
148
+ return p.stateMap(VersioningStateKeys.madeOptional).get(t);
149
+ }
150
+ export class VersionMap {
151
+ map = new Map();
152
+ constructor(namespace, enumType) {
153
+ let index = 0;
154
+ for (const member of enumType.members.values()) {
155
+ this.map.set(member, {
156
+ name: member.name,
157
+ value: member.value?.toString() ?? member.name,
158
+ enumMember: member,
159
+ index,
160
+ namespace,
161
+ });
162
+ index++;
163
+ }
164
+ }
165
+ getVersionForEnumMember(member) {
166
+ return this.map.get(member);
167
+ }
168
+ getVersions() {
169
+ return [...this.map.values()];
170
+ }
171
+ get size() {
172
+ return this.map.size;
173
+ }
174
+ }
175
+ export const $versioned = (context, t, versions) => {
176
+ context.program.stateMap(VersioningStateKeys.versions).set(t, new VersionMap(t, versions));
177
+ };
178
+ /**
179
+ * Get the version map of the namespace.
180
+ */
181
+ export function getVersion(program, namespace) {
182
+ return program.stateMap(VersioningStateKeys.versions).get(namespace);
183
+ }
184
+ export function findVersionedNamespace(program, namespace) {
185
+ let current = namespace;
186
+ while (current) {
187
+ if (program.stateMap(VersioningStateKeys.versions).has(current)) {
188
+ return current;
189
+ }
190
+ current = current.namespace;
191
+ }
192
+ return undefined;
193
+ }
194
+ export function $useDependency(context, target, ...versionRecords) {
195
+ const versions = [];
196
+ // ensure only valid versions are passed in
197
+ for (const record of versionRecords) {
198
+ const ver = checkIsVersion(context.program, record, context.getArgumentTarget(0));
199
+ if (ver) {
200
+ versions.push(ver);
201
+ }
202
+ }
203
+ if (target.kind === "Namespace") {
204
+ let state = getNamespaceUseDependencyState(context.program, target);
205
+ if (!state) {
206
+ state = versions;
207
+ }
208
+ else {
209
+ state.push(...versions);
210
+ }
211
+ context.program.stateMap(VersioningStateKeys.useDependencyNamespace).set(target, state);
212
+ }
213
+ else if (target.kind === "EnumMember") {
214
+ const targetEnum = target.enum;
215
+ let state = context.program
216
+ .stateMap(VersioningStateKeys.useDependencyEnum)
217
+ .get(targetEnum);
218
+ if (!state) {
219
+ state = new Map();
220
+ }
221
+ // get any existing versions and combine them
222
+ const currentVersions = state.get(target) ?? [];
223
+ currentVersions.push(...versions);
224
+ state.set(target, currentVersions);
225
+ context.program.stateMap(VersioningStateKeys.useDependencyEnum).set(targetEnum, state);
226
+ }
227
+ }
228
+ function getNamespaceUseDependencyState(program, target) {
229
+ return program.stateMap(VersioningStateKeys.useDependencyNamespace).get(target);
230
+ }
231
+ export function getUseDependencies(program, target, searchEnum = true) {
232
+ const result = new Map();
233
+ if (target.kind === "Namespace") {
234
+ let current = target;
235
+ while (current) {
236
+ const data = getNamespaceUseDependencyState(program, current);
237
+ if (!data) {
238
+ // See if the namspace has a version enum
239
+ if (searchEnum) {
240
+ const versions = getVersion(program, current)?.getVersions();
241
+ if (versions?.length) {
242
+ const enumDeps = getUseDependencies(program, versions[0].enumMember.enum);
243
+ if (enumDeps) {
244
+ return enumDeps;
245
+ }
246
+ }
247
+ }
248
+ current = current.namespace;
249
+ }
250
+ else {
251
+ for (const v of data) {
252
+ result.set(v.namespace, v);
253
+ }
254
+ return result;
255
+ }
256
+ }
257
+ return undefined;
258
+ }
259
+ else if (target.kind === "Enum") {
260
+ const data = program.stateMap(VersioningStateKeys.useDependencyEnum).get(target);
261
+ if (!data) {
262
+ return undefined;
263
+ }
264
+ const resolved = resolveVersionDependency(program, data);
265
+ if (resolved instanceof Map) {
266
+ for (const [enumVer, value] of resolved) {
267
+ for (const val of value) {
268
+ const targetNamespace = val.enumMember.enum.namespace;
269
+ if (!targetNamespace) {
270
+ reportDiagnostic(program, {
271
+ code: "version-not-found",
272
+ target: val.enumMember.enum,
273
+ format: { version: val.enumMember.name, enumName: val.enumMember.enum.name },
274
+ });
275
+ return undefined;
276
+ }
277
+ let subMap = result.get(targetNamespace);
278
+ if (subMap) {
279
+ subMap.set(enumVer, val);
280
+ }
281
+ else {
282
+ subMap = new Map([[enumVer, val]]);
283
+ }
284
+ result.set(targetNamespace, subMap);
285
+ }
286
+ }
287
+ }
288
+ }
289
+ return result;
290
+ }
291
+ function resolveVersionDependency(program, data) {
292
+ if (!(data instanceof Map)) {
293
+ return data;
294
+ }
295
+ const mapping = new Map();
296
+ for (const [key, value] of data) {
297
+ const sourceVersion = getVersionForEnumMember(program, key);
298
+ if (sourceVersion !== undefined) {
299
+ mapping.set(sourceVersion, value);
300
+ }
301
+ }
302
+ return mapping;
303
+ }
304
+ //# sourceMappingURL=decorators.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decorators.js","sourceRoot":"","sources":["../../src/decorators.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,5 @@
1
+ export { $added, $madeOptional, $madeRequired, $removed, $renamedFrom, $returnTypeChangedFrom, $typeChangedFrom, $useDependency, $versioned, VersionMap, findVersionedNamespace, getAddedOnVersions, getMadeOptionalOn, getRemovedOnVersions, getRenamedFrom, getRenamedFromVersions, getReturnTypeChangedFrom, getTypeChangedFrom, getUseDependencies, getVersion, } from "./decorators.js";
2
+ export { buildVersionProjections, type VersionProjections } from "./projection.js";
1
3
  export * from "./types.js";
2
4
  export * from "./validate.js";
3
5
  export * from "./versioning.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,aAAa,EACb,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,UAAU,EACV,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,uBAAuB,EAAE,KAAK,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AACnF,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
package/dist/src/index.js CHANGED
@@ -1,3 +1,5 @@
1
+ export { $added, $madeOptional, $madeRequired, $removed, $renamedFrom, $returnTypeChangedFrom, $typeChangedFrom, $useDependency, $versioned, VersionMap, findVersionedNamespace, getAddedOnVersions, getMadeOptionalOn, getRemovedOnVersions, getRenamedFrom, getRenamedFromVersions, getReturnTypeChangedFrom, getTypeChangedFrom, getUseDependencies, getVersion, } from "./decorators.js";
2
+ export { buildVersionProjections } from "./projection.js";
1
3
  export * from "./types.js";
2
4
  export * from "./validate.js";
3
5
  export * from "./versioning.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,MAAM,EACN,aAAa,EACb,aAAa,EACb,QAAQ,EACR,YAAY,EACZ,sBAAsB,EACtB,gBAAgB,EAChB,cAAc,EACd,UAAU,EACV,UAAU,EACV,sBAAsB,EACtB,kBAAkB,EAClB,iBAAiB,EACjB,oBAAoB,EACpB,cAAc,EACd,sBAAsB,EACtB,wBAAwB,EACxB,kBAAkB,EAClB,kBAAkB,EAClB,UAAU,GACX,MAAM,iBAAiB,CAAC;AACzB,OAAO,EAAE,uBAAuB,EAA2B,MAAM,iBAAiB,CAAC;AACnF,cAAc,YAAY,CAAC;AAC3B,cAAc,eAAe,CAAC;AAC9B,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,21 @@
1
+ import type { ObjectType, Program, Type } from "@typespec/compiler";
2
+ export declare const namespace = "TypeSpec.Versioning";
3
+ /**
4
+ * @returns get old name if applicable.
5
+ */
6
+ export declare function getNameAtVersion(p: Program, t: Type, versionKey: ObjectType): string;
7
+ /**
8
+ * @returns get old type if applicable.
9
+ */
10
+ export declare function getTypeBeforeVersion(p: Program, t: Type, versionKey: ObjectType): Type | undefined;
11
+ /**
12
+ * @returns get old type if applicable.
13
+ */
14
+ export declare function getReturnTypeBeforeVersion(p: Program, t: Type, versionKey: ObjectType): any;
15
+ export declare function madeOptionalAfter(program: Program, type: Type, versionKey: ObjectType): boolean;
16
+ export declare function madeRequiredAfter(program: Program, type: Type, versionKey: ObjectType): boolean;
17
+ export declare function existsAtVersion(p: Program, type: Type, versionKey: ObjectType): boolean;
18
+ export declare function hasDifferentNameAtVersion(p: Program, type: Type, version: ObjectType): boolean;
19
+ export declare function hasDifferentTypeAtVersion(p: Program, type: Type, version: ObjectType): boolean;
20
+ export declare function hasDifferentReturnTypeAtVersion(p: Program, type: Type, version: ObjectType): boolean;
21
+ //# sourceMappingURL=internal-projection-functions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-projection-functions.d.ts","sourceRoot":"","sources":["../../src/internal-projection-functions.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAC;AAYpE,eAAO,MAAM,SAAS,wBAAwB,CAAC;AAY/C;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,GAAG,MAAM,CAYpF;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAClC,CAAC,EAAE,OAAO,EACV,CAAC,EAAE,IAAI,EACP,UAAU,EAAE,UAAU,GACrB,IAAI,GAAG,SAAS,CAYlB;AAED;;GAEG;AACH,wBAAgB,0BAA0B,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,GAAG,GAAG,CAY3F;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAQ/F;AAED,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAS/F;AAED,wBAAgB,eAAe,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,GAAG,OAAO,CAQvF;AAED,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAE9F;AAED,wBAAgB,yBAAyB,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,OAAO,EAAE,UAAU,GAAG,OAAO,CAE9F;AAED,wBAAgB,+BAA+B,CAC7C,CAAC,EAAE,OAAO,EACV,IAAI,EAAE,IAAI,EACV,OAAO,EAAE,UAAU,GAClB,OAAO,CAET"}
@@ -0,0 +1,88 @@
1
+ import { getMadeOptionalOn, getMadeRequiredOn, getRenamedFrom, getReturnTypeChangedFrom, getTypeChangedFrom, } from "./decorators.js";
2
+ import { VersioningStateKeys } from "./lib.js";
3
+ import { TimelineMoment, VersioningTimeline } from "./versioning-timeline.js";
4
+ import { Availability, getAvailabilityMapInTimeline } from "./versioning.js";
5
+ export const namespace = "TypeSpec.Versioning";
6
+ function getVersioningState(program, versionKey) {
7
+ return program.stateMap(VersioningStateKeys.versionIndex).get(versionKey);
8
+ }
9
+ /**
10
+ * @returns get old name if applicable.
11
+ */
12
+ export function getNameAtVersion(p, t, versionKey) {
13
+ const versioningState = getVersioningState(p, versionKey);
14
+ const allValues = getRenamedFrom(p, t);
15
+ if (!allValues)
16
+ return "";
17
+ for (const val of allValues) {
18
+ if (versioningState.timeline.isBefore(versioningState.projectingMoment, val.version)) {
19
+ return val.oldName;
20
+ }
21
+ }
22
+ return "";
23
+ }
24
+ /**
25
+ * @returns get old type if applicable.
26
+ */
27
+ export function getTypeBeforeVersion(p, t, versionKey) {
28
+ const versioningState = getVersioningState(p, versionKey);
29
+ const map = getTypeChangedFrom(p, t);
30
+ if (!map)
31
+ return undefined;
32
+ for (const [changedAtVersion, oldType] of map) {
33
+ if (versioningState.timeline.isBefore(versioningState.projectingMoment, changedAtVersion)) {
34
+ return oldType;
35
+ }
36
+ }
37
+ return undefined;
38
+ }
39
+ /**
40
+ * @returns get old type if applicable.
41
+ */
42
+ export function getReturnTypeBeforeVersion(p, t, versionKey) {
43
+ const versioningState = getVersioningState(p, versionKey);
44
+ const map = getReturnTypeChangedFrom(p, t);
45
+ if (!map)
46
+ return "";
47
+ for (const [changedAtVersion, val] of map) {
48
+ if (versioningState.timeline.isBefore(versioningState.projectingMoment, changedAtVersion)) {
49
+ return val;
50
+ }
51
+ }
52
+ return "";
53
+ }
54
+ export function madeOptionalAfter(program, type, versionKey) {
55
+ const versioningState = getVersioningState(program, versionKey);
56
+ const madeOptionalAtVersion = getMadeOptionalOn(program, type);
57
+ if (madeOptionalAtVersion === undefined) {
58
+ return false;
59
+ }
60
+ return versioningState.timeline.isBefore(versioningState.projectingMoment, madeOptionalAtVersion);
61
+ }
62
+ export function madeRequiredAfter(program, type, versionKey) {
63
+ const versioningState = getVersioningState(program, versionKey);
64
+ const madeRequiredAtVersion = getMadeRequiredOn(program, type);
65
+ if (madeRequiredAtVersion === undefined) {
66
+ return false;
67
+ }
68
+ return versioningState.timeline.isBefore(versioningState.projectingMoment, madeRequiredAtVersion);
69
+ }
70
+ export function existsAtVersion(p, type, versionKey) {
71
+ const versioningState = getVersioningState(p, versionKey);
72
+ // if unversioned then everything exists
73
+ const availability = getAvailabilityMapInTimeline(p, type, versioningState.timeline);
74
+ if (!availability)
75
+ return true;
76
+ const isAvail = availability.get(versioningState.projectingMoment);
77
+ return isAvail === Availability.Added || isAvail === Availability.Available;
78
+ }
79
+ export function hasDifferentNameAtVersion(p, type, version) {
80
+ return getNameAtVersion(p, type, version) !== "";
81
+ }
82
+ export function hasDifferentTypeAtVersion(p, type, version) {
83
+ return getTypeBeforeVersion(p, type, version) !== undefined;
84
+ }
85
+ export function hasDifferentReturnTypeAtVersion(p, type, version) {
86
+ return getReturnTypeBeforeVersion(p, type, version) !== "";
87
+ }
88
+ //# sourceMappingURL=internal-projection-functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"internal-projection-functions.js","sourceRoot":"","sources":["../../src/internal-projection-functions.ts"],"names":[],"mappings":"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"}