@typespec/emitter-framework 0.15.0-dev.1 → 0.15.0-dev.3

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.
@@ -0,0 +1,67 @@
1
+ import type { Type } from "@typespec/compiler";
2
+
3
+ /**
4
+ * Connector for {@link TypeSpec} {@link Type}s that captures the type graph edges used for
5
+ * topological ordering. Each returned dependency represents an incoming edge for the source
6
+ * type, e.g. a model depends on its base model, property types, and indexer key/value types.
7
+ */
8
+ export function typeDependencyConnector(type: Type): Iterable<Type> {
9
+ return iterateTypeDependencies(type);
10
+ }
11
+
12
+ function* iterateTypeDependencies(type: Type): IterableIterator<Type> {
13
+ switch (type.kind) {
14
+ case "Model":
15
+ if (type.baseModel) {
16
+ yield type.baseModel;
17
+ }
18
+
19
+ if (type.indexer) {
20
+ yield type.indexer.key;
21
+ yield type.indexer.value;
22
+ }
23
+
24
+ for (const property of type.properties.values()) {
25
+ yield property.type;
26
+ }
27
+ break;
28
+ case "ModelProperty":
29
+ yield type.type;
30
+ break;
31
+ case "Interface":
32
+ for (const operation of type.operations.values()) {
33
+ yield operation;
34
+ }
35
+ break;
36
+ case "Operation":
37
+ yield type.parameters;
38
+ yield type.returnType;
39
+ break;
40
+ case "Union":
41
+ for (const variant of type.variants.values()) {
42
+ yield variant;
43
+ }
44
+ break;
45
+ case "UnionVariant":
46
+ yield type.type;
47
+ break;
48
+ case "Tuple":
49
+ yield* type.values;
50
+ break;
51
+ case "Enum":
52
+ for (const member of type.members.values()) {
53
+ yield member;
54
+ }
55
+ break;
56
+ case "EnumMember":
57
+ if (type.sourceMember) {
58
+ yield type.sourceMember;
59
+ }
60
+ break;
61
+ case "Scalar":
62
+ if (type.baseScalar) {
63
+ yield type.baseScalar;
64
+ }
65
+ break;
66
+ }
67
+ }
@@ -5,8 +5,10 @@ import { buildParameterDescriptors, getReturnType } from "../utils/operation.js"
5
5
  import { declarationRefkeys } from "../utils/refkey.js";
6
6
  import { TypeExpression } from "./type-expression.js";
7
7
 
8
- export interface FunctionDeclarationPropsWithType
9
- extends Omit<ts.FunctionDeclarationProps, "name"> {
8
+ export interface FunctionDeclarationPropsWithType extends Omit<
9
+ ts.FunctionDeclarationProps,
10
+ "name"
11
+ > {
10
12
  type: Operation;
11
13
  name?: string;
12
14
  parametersMode?: "prepend" | "append" | "replace";