typespec-typescript-emitter 1.2.0 → 2.0.1

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 (166) hide show
  1. package/.husky/pre-commit +2 -1
  2. package/.prettierignore +2 -1
  3. package/CHANGELOG.md +19 -24
  4. package/CODE_OF_CONDUCT.md +128 -0
  5. package/README.md +362 -219
  6. package/dist/src/emit_routedTypemap.d.ts +4 -0
  7. package/dist/src/emit_routedTypemap.js +83 -0
  8. package/dist/src/emit_routedTypemap.js.map +1 -0
  9. package/dist/src/emit_routes.d.ts +3 -2
  10. package/dist/src/emit_routes.js +73 -47
  11. package/dist/src/emit_routes.js.map +1 -1
  12. package/dist/src/emit_types.d.ts +3 -9
  13. package/dist/src/emit_types.js +109 -74
  14. package/dist/src/emit_types.js.map +1 -1
  15. package/dist/src/emitter.d.ts +2 -6
  16. package/dist/src/emitter.js +18 -76
  17. package/dist/src/emitter.js.map +1 -1
  18. package/dist/src/helpers/appendableString.d.ts +15 -0
  19. package/dist/src/helpers/appendableString.js +41 -0
  20. package/dist/src/helpers/appendableString.js.map +1 -0
  21. package/dist/src/helpers/arrays.d.ts +3 -0
  22. package/dist/src/helpers/arrays.js +23 -0
  23. package/dist/src/helpers/arrays.js.map +1 -0
  24. package/dist/src/{helper_autogenerateWarning.d.ts → helpers/autogenerateWarning.d.ts} +1 -1
  25. package/dist/src/{helper_autogenerateWarning.js → helpers/autogenerateWarning.js} +1 -2
  26. package/dist/src/helpers/autogenerateWarning.js.map +1 -0
  27. package/dist/src/helpers/buildTypeMap.d.ts +12 -0
  28. package/dist/src/helpers/buildTypeMap.js +44 -0
  29. package/dist/src/helpers/buildTypeMap.js.map +1 -0
  30. package/dist/src/helpers/diagnostics.d.ts +4 -0
  31. package/dist/src/helpers/diagnostics.js +15 -0
  32. package/dist/src/helpers/diagnostics.js.map +1 -0
  33. package/dist/src/helpers/getImports.d.ts +2 -0
  34. package/dist/src/helpers/getImports.js +3 -0
  35. package/dist/src/helpers/getImports.js.map +1 -0
  36. package/dist/src/helpers/namespaces.d.ts +4 -0
  37. package/dist/src/helpers/namespaces.js +14 -0
  38. package/dist/src/helpers/namespaces.js.map +1 -0
  39. package/dist/src/helpers/visibilityHelperFile.d.ts +4 -0
  40. package/dist/src/helpers/visibilityHelperFile.js +57 -0
  41. package/dist/src/helpers/visibilityHelperFile.js.map +1 -0
  42. package/dist/src/lib.d.ts +4 -1
  43. package/dist/src/lib.js +14 -3
  44. package/dist/src/lib.js.map +1 -1
  45. package/dist/src/parseOptions.d.ts +8 -0
  46. package/dist/src/parseOptions.js +26 -0
  47. package/dist/src/parseOptions.js.map +1 -0
  48. package/dist/src/resolve/Resolvable.d.ts +32 -0
  49. package/dist/src/resolve/Resolvable.js +180 -0
  50. package/dist/src/resolve/Resolvable.js.map +1 -0
  51. package/dist/src/resolve/Resolvable_helpers.d.ts +42 -0
  52. package/dist/src/resolve/Resolvable_helpers.js +19 -0
  53. package/dist/src/resolve/Resolvable_helpers.js.map +1 -0
  54. package/dist/src/resolve/operationTypemap.d.ts +21 -0
  55. package/dist/src/resolve/operationTypemap.js +138 -0
  56. package/dist/src/resolve/operationTypemap.js.map +1 -0
  57. package/dist/src/resolve/types/Enum.d.ts +21 -0
  58. package/dist/src/resolve/types/Enum.js +61 -0
  59. package/dist/src/resolve/types/Enum.js.map +1 -0
  60. package/dist/src/resolve/types/Model.Indexed.d.ts +12 -0
  61. package/dist/src/resolve/types/Model.Indexed.js +69 -0
  62. package/dist/src/resolve/types/Model.Indexed.js.map +1 -0
  63. package/dist/src/resolve/types/Model.Shaped.d.ts +17 -0
  64. package/dist/src/resolve/types/Model.Shaped.js +210 -0
  65. package/dist/src/resolve/types/Model.Shaped.js.map +1 -0
  66. package/dist/src/resolve/types/Scalar.d.ts +9 -0
  67. package/dist/src/resolve/types/Scalar.js +109 -0
  68. package/dist/src/resolve/types/Scalar.js.map +1 -0
  69. package/dist/src/resolve/types/Simple.d.ts +11 -0
  70. package/dist/src/resolve/types/Simple.js +49 -0
  71. package/dist/src/resolve/types/Simple.js.map +1 -0
  72. package/dist/src/resolve/types/Tuple.d.ts +9 -0
  73. package/dist/src/resolve/types/Tuple.js +38 -0
  74. package/dist/src/resolve/types/Tuple.js.map +1 -0
  75. package/dist/src/resolve/types/Union.d.ts +9 -0
  76. package/dist/src/resolve/types/Union.js +36 -0
  77. package/dist/src/resolve/types/Union.js.map +1 -0
  78. package/eslint.config.js +12 -4
  79. package/package.json +2 -2
  80. package/src/emit_routedTypemap.ts +128 -0
  81. package/src/emit_routes.ts +108 -61
  82. package/src/emit_types.ts +137 -92
  83. package/src/emitter.ts +19 -107
  84. package/src/helpers/appendableString.ts +52 -0
  85. package/src/helpers/arrays.ts +21 -0
  86. package/src/{helper_autogenerateWarning.ts → helpers/autogenerateWarning.ts} +0 -1
  87. package/src/helpers/buildTypeMap.ts +72 -0
  88. package/src/helpers/diagnostics.ts +19 -0
  89. package/src/helpers/getImports.ts +9 -0
  90. package/src/helpers/namespaces.ts +18 -0
  91. package/src/helpers/visibilityHelperFile.ts +63 -0
  92. package/src/lib.ts +25 -4
  93. package/src/parseOptions.ts +26 -0
  94. package/src/resolve/Resolvable.ts +267 -0
  95. package/src/resolve/Resolvable_helpers.ts +65 -0
  96. package/src/resolve/operationTypemap.ts +212 -0
  97. package/src/resolve/types/Enum.ts +92 -0
  98. package/src/resolve/types/Model.Indexed.ts +113 -0
  99. package/src/resolve/types/Model.Shaped.ts +291 -0
  100. package/src/resolve/types/Scalar.ts +140 -0
  101. package/src/resolve/types/Simple.ts +88 -0
  102. package/src/resolve/types/Tuple.ts +56 -0
  103. package/src/resolve/types/Union.ts +52 -0
  104. package/test/helpers/integrationTest-novis.tsp +51 -0
  105. package/test/helpers/integrationTest.tsp +53 -0
  106. package/test/helpers/largeModel.tsp +40 -0
  107. package/test/{runner.ts → helpers/runner.ts} +1 -1
  108. package/test/helpers/ts.ts +11 -0
  109. package/test/helpers/wrapper.ts +144 -0
  110. package/test/routes/routes.target.ts +35 -0
  111. package/test/routes/routes.test.ts +22 -0
  112. package/test/typeguards/combined.test.ts +78 -0
  113. package/test/typeguards/enum.test.ts +10 -0
  114. package/test/typeguards/model.indexed.test.ts +68 -0
  115. package/test/typeguards/model.shaped.test.ts +38 -0
  116. package/test/typeguards/scalar.test.ts +62 -0
  117. package/test/typeguards/simple.test.ts +35 -0
  118. package/test/typeguards/tuple.test.ts +34 -0
  119. package/test/typeguards/union.test.ts +29 -0
  120. package/test/typemap/typemap-novis.target.ts +38 -0
  121. package/test/typemap/typemap.target.ts +39 -0
  122. package/test/typemap/typemap.test.ts +48 -0
  123. package/test/types/combined.test.ts +71 -0
  124. package/test/types/enum.test.ts +57 -0
  125. package/test/types/model.indexed.test.ts +46 -0
  126. package/test/types/model.shaped.test.ts +23 -0
  127. package/test/types/scalar.test.ts +53 -0
  128. package/test/types/simple.test.ts +20 -0
  129. package/test/types/tuple.test.ts +29 -0
  130. package/test/types/union.test.ts +20 -0
  131. package/tsconfig.json +1 -0
  132. package/dist/src/emit_mapped_types.d.ts +0 -2
  133. package/dist/src/emit_mapped_types.js +0 -124
  134. package/dist/src/emit_mapped_types.js.map +0 -1
  135. package/dist/src/emit_types_resolve.d.ts +0 -22
  136. package/dist/src/emit_types_resolve.js +0 -217
  137. package/dist/src/emit_types_resolve.js.map +0 -1
  138. package/dist/src/emit_types_typeguards.d.ts +0 -17
  139. package/dist/src/emit_types_typeguards.js +0 -121
  140. package/dist/src/emit_types_typeguards.js.map +0 -1
  141. package/dist/src/helper_autogenerateWarning.js.map +0 -1
  142. package/src/emit_mapped_types.ts +0 -155
  143. package/src/emit_types_resolve.ts +0 -280
  144. package/src/emit_types_typeguards.ts +0 -178
  145. package/test/main.test.ts +0 -83
  146. package/test/out/.gitkeep +0 -0
  147. package/test/targets/enum.routed-types.ts +0 -59
  148. package/test/targets/enum.routes.ts +0 -29
  149. package/test/targets/enum.target.ts +0 -39
  150. package/test/targets/enum.tsp +0 -36
  151. package/test/targets/pr8.routed-types.ts +0 -131
  152. package/test/targets/pr8.routes.ts +0 -30
  153. package/test/targets/pr8.target.ts +0 -97
  154. package/test/targets/pr8.tsp +0 -62
  155. package/test/targets/simple-routes.routed-types.ts +0 -64
  156. package/test/targets/simple-routes.routes.ts +0 -29
  157. package/test/targets/simple-routes.target.ts +0 -21
  158. package/test/targets/simple-routes.tsp +0 -23
  159. package/test/targets/union.routed-types.ts +0 -59
  160. package/test/targets/union.routes.ts +0 -23
  161. package/test/targets/union.target.ts +0 -59
  162. package/test/targets/union.tsp +0 -38
  163. package/test/targets/visibility.routed-types.ts +0 -81
  164. package/test/targets/visibility.routes.ts +0 -38
  165. package/test/targets/visibility.target.ts +0 -36
  166. package/test/targets/visibility.tsp +0 -49
@@ -0,0 +1,180 @@
1
+ import { AppendableString } from "../helpers/appendableString.js";
2
+ import { compareArrays } from "../helpers/arrays.js";
3
+ import { reportDiagnostic } from "../helpers/diagnostics.js";
4
+ import { namespaceListFromNamespace } from "../helpers/namespaces.js";
5
+ import { Resolver, } from "./Resolvable_helpers.js";
6
+ export class Resolvable {
7
+ /** Recursively resolves a type. */
8
+ static async resolve(r, t, opts) {
9
+ const ret = {
10
+ resolved: new AppendableString(),
11
+ visibilityMap: "",
12
+ hasVisibility: false,
13
+ imports: [],
14
+ };
15
+ await (await Resolvable.for(r, t)).resolve(opts, ret);
16
+ return ret;
17
+ }
18
+ /**
19
+ * To be called from within the resolution logic of a type:
20
+ * Resolves another type for the current type, handling required changes to the resolution options.
21
+ * The passed `out` object is not signifiantly changed, only the `hasVisibility` flag is managed.
22
+ */
23
+ async resolveNested(t, opts, out, nest = true) {
24
+ // prepare nested resolution
25
+ if (nest)
26
+ opts.nestlevel++;
27
+ if (!opts.parents)
28
+ opts.parents = [];
29
+ opts.parents.push(this._t);
30
+ const ret = await Resolvable.resolve(this._r, t, opts);
31
+ // revert to current level
32
+ if (nest)
33
+ opts.nestlevel--;
34
+ opts.parents.pop();
35
+ return ret;
36
+ }
37
+ /** Creates the appropriate Resolvable instance for a given type. */
38
+ static async for(r, t) {
39
+ // use lazy imports to break circular dependencies
40
+ const { ResolvableSimple } = await import("./types/Simple.js");
41
+ if (ResolvableSimple.AllowedTypeKinds.includes(t.kind)) {
42
+ return new ResolvableSimple(t, r);
43
+ }
44
+ switch (t.kind) {
45
+ case "Enum": {
46
+ const { ResolvableEnum } = await import("./types/Enum.js");
47
+ return new ResolvableEnum(t, r);
48
+ }
49
+ case "EnumMember": {
50
+ const { ResolvableEnumMember } = await import("./types/Enum.js");
51
+ return new ResolvableEnumMember(t, r);
52
+ }
53
+ case "Model": {
54
+ const { IndexedModel } = await import("./types/Model.Indexed.js");
55
+ const { ShapedModel } = await import("./types/Model.Shaped.js");
56
+ switch (t.name) {
57
+ case "Array":
58
+ case "Record":
59
+ return new IndexedModel(t, r);
60
+ default:
61
+ return new ShapedModel(t, r);
62
+ }
63
+ }
64
+ case "Scalar": {
65
+ const { ResolvableScalar } = await import("./types/Scalar.js");
66
+ return new ResolvableScalar(t, r);
67
+ }
68
+ case "Tuple": {
69
+ const { ResolvableTuple } = await import("./types/Tuple.js");
70
+ return new ResolvableTuple(t, r);
71
+ }
72
+ case "Union": {
73
+ const { ResolvableUnion } = await import("./types/Union.js");
74
+ return new ResolvableUnion(t, r);
75
+ }
76
+ default:
77
+ reportDiagnostic({
78
+ code: "resolve-unresolved",
79
+ message: `Could not resolve type ${t.kind}`,
80
+ severity: "error",
81
+ });
82
+ throw new TypeError(`Could not resolve type ${t.kind}`);
83
+ }
84
+ }
85
+ constructor(t, r) {
86
+ this._t = t;
87
+ this._r = r;
88
+ }
89
+ _t;
90
+ _r;
91
+ /** Resolves the type, modifying an output object in place. */
92
+ async resolve(opts, out) {
93
+ this.validate();
94
+ const ownVisibility = await this.hasVisibility(opts, out);
95
+ if (ownVisibility)
96
+ out.hasVisibility = true;
97
+ // check for known resolved type
98
+ if (opts.rootTypeReady && this._t.name) {
99
+ // type without name can't be resolved
100
+ const currentNamespaces = namespaceListFromNamespace(this._t.namespace);
101
+ // find known resolved type
102
+ const foundKnownResolved = (() => {
103
+ const currentNamespaces = namespaceListFromNamespace(this._t.namespace);
104
+ if (currentNamespaces && currentNamespaces.length > 0) {
105
+ const found = opts.typemap.find((mt) => mt.type.kind === this._t.kind &&
106
+ mt.type.name === this._t.name &&
107
+ compareArrays(mt.namespaces, currentNamespaces));
108
+ return found ?? null;
109
+ }
110
+ return null;
111
+ })();
112
+ // if found, return name instead of full resolution
113
+ if (foundKnownResolved) {
114
+ if (opts.rootType &&
115
+ compareArrays(currentNamespaces, opts.rootType.namespaces)) {
116
+ // if namespace of found is same as current (= same file), just return name
117
+ out.resolved.append(this._r === Resolver.Type
118
+ ? foundKnownResolved.type.name
119
+ : this._t.kind === "Enum"
120
+ ? "true" // enums don't have typeguards
121
+ : `is${foundKnownResolved.type.name}(${opts.accessor}${ownVisibility ? ", vis" : ""})`);
122
+ }
123
+ else {
124
+ // found is in different file than current, prepare importing
125
+ out.resolved.append(`${foundKnownResolved.namespaces.join("_")}.${this._r === Resolver.Type
126
+ ? foundKnownResolved.type.name
127
+ : this._t.kind === "Enum"
128
+ ? "true" // enums don't have typeguards
129
+ : `is${foundKnownResolved.type.name}(${opts.accessor}${ownVisibility ? ", vis" : ""})`}`);
130
+ out.imports.push(foundKnownResolved.namespaces);
131
+ }
132
+ // optionally allow found type to modify output
133
+ if (this.transformKnownType !== undefined)
134
+ this.transformKnownType(opts, out);
135
+ return;
136
+ }
137
+ }
138
+ // this prevents the root type from triggering known resolution
139
+ opts.rootTypeReady = true;
140
+ switch (this._r) {
141
+ case Resolver.Type:
142
+ return await this.type(opts, out);
143
+ case Resolver.Typeguard:
144
+ return await this.typeguard(opts, out);
145
+ }
146
+ }
147
+ transformKnownType(
148
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
149
+ opts,
150
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
151
+ out) { }
152
+ /** Returns true if this type or anything it contains or references has visibility modifiers. */
153
+ async hasVisibility(opts, out) {
154
+ return out.hasVisibility;
155
+ }
156
+ /** Returns true if this type or anything it contains or references has visibility modifiers. */
157
+ static async hasVisibility(t, opts, out, current) {
158
+ if (!opts.parents)
159
+ opts.parents = [];
160
+ opts.parents.push(current);
161
+ const ret = await (await Resolvable.for(Resolver.Type /** doesn't matter */, t)).hasVisibility(opts, out);
162
+ opts.parents.pop();
163
+ return ret;
164
+ }
165
+ /** Checks its stored type to ensure the instance was created on a suitable type. */
166
+ validate() {
167
+ if (this._t.kind !== this.expectedTypeKind) {
168
+ this.diagnostic("typeclass-mismatch", `Tried creating resolver for ${this.expectedTypeKind} on type ${this._t.kind}`, "error");
169
+ throw new TypeError(`Type-kind/class mismatch: instanced ${this.expectedTypeKind} on type ${this._t.kind}`);
170
+ }
171
+ }
172
+ diagnostic(code, msg, level) {
173
+ reportDiagnostic({
174
+ code: `resolve-${this._r}-${code}`,
175
+ message: msg,
176
+ severity: level,
177
+ });
178
+ }
179
+ }
180
+ //# sourceMappingURL=Resolvable.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Resolvable.js","sourceRoot":"","sources":["../../../src/resolve/Resolvable.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,42 @@
1
+ import { Program, Type } from "@typespec/compiler";
2
+ import { AppendableString } from "../helpers/appendableString.js";
3
+ import { TTypeMap } from "../helpers/buildTypeMap.js";
4
+ import { EmitterOptions } from "../lib.js";
5
+ export declare enum Resolver {
6
+ Type = 0,
7
+ Typeguard = 1
8
+ }
9
+ export type ResolverOptions<R extends Resolver> = {
10
+ program: Program;
11
+ options: EmitterOptions;
12
+ typemap: TTypeMap;
13
+ nestlevel: number;
14
+ /** The type the entire resolution chain started with. */
15
+ rootType: TTypeMap[number] | null;
16
+ /**
17
+ * This tracks whether or not resolving *to* the type currently being investigated
18
+ * is valid. This allows for recursive types.
19
+ */
20
+ rootTypeReady?: boolean;
21
+ /** The types "up the chain" - "parent" types on nested resolution. */
22
+ parents?: Type[];
23
+ } & (R extends Resolver.Type ? {
24
+ emitDocs: boolean;
25
+ } : {
26
+ /**
27
+ * This string describes how a function (part) of a typeguard can
28
+ * access the value currently being tested by it.
29
+ * Example: typeguard(t: any) on `n` for {n: string} -> this = "t"
30
+ */
31
+ accessor: string;
32
+ });
33
+ /** Tries to find type in known types map */
34
+ export declare const getKnownResolvedType: (typemap: TTypeMap, t: any) => TTypeMap[number] | null;
35
+ export type ResolverResult<R extends Resolver> = {
36
+ readonly resolved: AppendableString;
37
+ visibilityMap: string;
38
+ imports: TTypeMap[number]["namespaces"][];
39
+ /** Whether any resolved part (nested types and base types included) have @visibility modifiers */
40
+ hasVisibility: boolean;
41
+ doc?: R extends Resolver.Type ? string : never;
42
+ };
@@ -0,0 +1,19 @@
1
+ import { compareArrays } from "../helpers/arrays.js";
2
+ import { namespaceListFromNamespace } from "../helpers/namespaces.js";
3
+ export var Resolver;
4
+ (function (Resolver) {
5
+ Resolver[Resolver["Type"] = 0] = "Type";
6
+ Resolver[Resolver["Typeguard"] = 1] = "Typeguard";
7
+ })(Resolver || (Resolver = {}));
8
+ /** Tries to find type in known types map */
9
+ export const getKnownResolvedType = (typemap, t) => {
10
+ const currentNamespaces = namespaceListFromNamespace(t.namespace);
11
+ if (currentNamespaces && currentNamespaces.length > 0) {
12
+ const found = typemap.find((mt) => mt.type.kind === t.kind &&
13
+ mt.type.name === t.name &&
14
+ compareArrays(mt.namespaces, currentNamespaces));
15
+ return found ?? null;
16
+ }
17
+ return null;
18
+ };
19
+ //# sourceMappingURL=Resolvable_helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Resolvable_helpers.js","sourceRoot":"","sources":["../../../src/resolve/Resolvable_helpers.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,sBAAsB,CAAC;AAErD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AAGtE,MAAM,CAAN,IAAY,QAGX;AAHD,WAAY,QAAQ;IAClB,uCAAI,CAAA;IACJ,iDAAS,CAAA;AACX,CAAC,EAHW,QAAQ,KAAR,QAAQ,QAGnB;AA6BD,4CAA4C;AAC5C,MAAM,CAAC,MAAM,oBAAoB,GAAG,CAClC,OAAiB,EACjB,CAAM,EACmB,EAAE;IAC3B,MAAM,iBAAiB,GAAG,0BAA0B,CAAE,CAAS,CAAC,SAAS,CAAC,CAAC;IAC3E,IAAI,iBAAiB,IAAI,iBAAiB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACtD,MAAM,KAAK,GAAG,OAAO,CAAC,IAAI,CACxB,CAAC,EAAE,EAAE,EAAE,CACL,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,CAAC,IAAI;YACvB,EAAE,CAAC,IAAI,CAAC,IAAI,KAAM,CAAS,CAAC,IAAI;YAChC,aAAa,CAAC,EAAE,CAAC,UAAU,EAAE,iBAAiB,CAAC,CAClD,CAAC;QACF,OAAO,KAAK,IAAI,IAAI,CAAC;IACvB,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC"}
@@ -0,0 +1,21 @@
1
+ import { Operation, Program } from "@typespec/compiler";
2
+ import { TTypeMap } from "../helpers/buildTypeMap.js";
3
+ import { EmitterOptions } from "../lib.js";
4
+ /** Maps a route path to its typemap definition and required imports */
5
+ export type TOperationTypemap = {
6
+ request: {
7
+ content: string;
8
+ hasVisibility: boolean;
9
+ };
10
+ response: {
11
+ content: Array<{
12
+ status: number | "unknown";
13
+ body: string;
14
+ hasVisibility: boolean;
15
+ }>;
16
+ };
17
+ };
18
+ export declare const resolveOperationTypemap: (program: Program, options: EmitterOptions, typemap: TTypeMap, op: Operation) => Promise<{
19
+ types: TOperationTypemap;
20
+ imports: TTypeMap[number]["namespaces"][];
21
+ }>;
@@ -0,0 +1,138 @@
1
+ import { getHttpOperation } from "@typespec/http";
2
+ import { Resolvable } from "./Resolvable.js";
3
+ import { Resolver } from "./Resolvable_helpers.js";
4
+ export const resolveOperationTypemap = async (program, options, typemap, op) => {
5
+ const httpOp = getHttpOperation(program, op)[0];
6
+ const ret = {
7
+ types: {
8
+ request: { content: "null", hasVisibility: false },
9
+ response: { content: [] },
10
+ },
11
+ imports: [],
12
+ };
13
+ // request
14
+ if (httpOp.parameters.body) {
15
+ const resolved = await Resolvable.resolve(Resolver.Type, httpOp.parameters.body.type, {
16
+ program,
17
+ options,
18
+ emitDocs: false,
19
+ nestlevel: 3,
20
+ rootType: null,
21
+ typemap,
22
+ rootTypeReady: true,
23
+ });
24
+ ret.imports.push(...resolved.imports);
25
+ ret.types.request.content = replaceLifecycle(resolved.resolved.value, httpOp.verb.toUpperCase(), resolved.hasVisibility);
26
+ if (resolved.hasVisibility)
27
+ ret.types.request.hasVisibility = true;
28
+ }
29
+ // response
30
+ if (op.returnType) {
31
+ const getReturnType = async (t) => {
32
+ const responseRet = { content: [] };
33
+ switch (t.kind) {
34
+ case "Model": {
35
+ // If the return type is a model, it may either be a "blank" body or a fully
36
+ // qualified response with status and body.
37
+ const modelret = {
38
+ status: 200,
39
+ body: "{}",
40
+ hasVisibility: false,
41
+ };
42
+ // check for fully qualified response or plain body
43
+ let wasFullyQualified = false;
44
+ for (const prop of t.properties) {
45
+ for (const decorator of prop[1].decorators) {
46
+ // find status code
47
+ if (decorator.definition?.name === "@statusCode" &&
48
+ prop[1].type.kind === "Number")
49
+ modelret.status = prop[1].type.value;
50
+ // find body definiton
51
+ if (decorator.definition?.name === "@body") {
52
+ const resolved = await Resolvable.resolve(Resolver.Type, prop[1].type, {
53
+ program,
54
+ options,
55
+ emitDocs: false,
56
+ nestlevel: 3,
57
+ rootType: null,
58
+ typemap,
59
+ rootTypeReady: true,
60
+ });
61
+ if (resolved.hasVisibility)
62
+ modelret.hasVisibility = true;
63
+ ret.imports.push(...resolved.imports);
64
+ modelret.body = replaceLifecycle(resolved.resolved.value, "RETURN", resolved.hasVisibility);
65
+ wasFullyQualified = true;
66
+ }
67
+ }
68
+ }
69
+ if (!wasFullyQualified) {
70
+ const resolved = await Resolvable.resolve(Resolver.Type, t, {
71
+ program,
72
+ options,
73
+ emitDocs: false,
74
+ nestlevel: 3,
75
+ rootType: null,
76
+ typemap,
77
+ rootTypeReady: true,
78
+ });
79
+ if (resolved.hasVisibility)
80
+ modelret.hasVisibility = true;
81
+ ret.imports.push(...resolved.imports);
82
+ modelret.body = replaceLifecycle(resolved.resolved.value, "RETURN", resolved.hasVisibility);
83
+ }
84
+ responseRet.content.push(modelret);
85
+ break;
86
+ }
87
+ case "Union": {
88
+ // if return type is a union, each variant may be fully qualified or body-only
89
+ for (const variant of t.variants) {
90
+ const resolved = await getReturnType(variant[1].type);
91
+ responseRet.content.push(...resolved.content);
92
+ }
93
+ break;
94
+ }
95
+ default: {
96
+ // return type does not have a qualified body; making one up and resolving that one
97
+ const resolved = await Resolvable.resolve(Resolver.Type, t, {
98
+ program,
99
+ options,
100
+ emitDocs: false,
101
+ nestlevel: 3,
102
+ rootType: null,
103
+ typemap,
104
+ rootTypeReady: true,
105
+ });
106
+ ret.imports.push(...resolved.imports);
107
+ responseRet.content.push({
108
+ status: 200,
109
+ body: replaceLifecycle(resolved.resolved.value, httpOp.verb.toUpperCase(), resolved.hasVisibility),
110
+ hasVisibility: resolved.hasVisibility,
111
+ });
112
+ break;
113
+ }
114
+ }
115
+ return responseRet;
116
+ };
117
+ ret.types.response = await getReturnType(op.returnType);
118
+ }
119
+ return ret;
120
+ };
121
+ /** Maps HTTP verbs to lifecycle states. See @typespec/compiler/.../visibility.tsp */
122
+ const VerbToLifecycle = {
123
+ RETURN: ["Read"], // for all return types
124
+ POST: ["Create"],
125
+ PUT: ["Create", "Update"],
126
+ PATCH: ["Update"],
127
+ DELETE: ["Delete"],
128
+ GET: ["Query"], // *parameters* of request, return type is still RETURN
129
+ Head: ["Query"],
130
+ };
131
+ // lifecycle assignment helper
132
+ const replaceLifecycle = (resolved, verb, hasVisibility) => {
133
+ const opLifecycle = VerbToLifecycle[verb];
134
+ if (!hasVisibility)
135
+ return resolved;
136
+ return resolved.replaceAll("V>", `V extends Lifecycle.All ? (${opLifecycle.map((l) => `Lifecycle.${l}`).join(" | ")}) : V>`);
137
+ };
138
+ //# sourceMappingURL=operationTypemap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"operationTypemap.js","sourceRoot":"","sources":["../../../src/resolve/operationTypemap.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import { Enum, EnumMember } from "@typespec/compiler";
2
+ import { Resolvable } from "../Resolvable.js";
3
+ import { Resolver, ResolverOptions, ResolverResult } from "../Resolvable_helpers.js";
4
+ /**
5
+ * This resolves Enums completely, meaning it doesn't try to resolve
6
+ * members as EnumMember, because EnumMember resolution references the base Enum.
7
+ */
8
+ export declare class ResolvableEnum extends Resolvable<Enum> {
9
+ protected expectedTypeKind: string;
10
+ protected type(opts: ResolverOptions<Resolver.Type>, out: ResolverResult<Resolver.Type>): Promise<void>;
11
+ protected typeguard(): Promise<void>;
12
+ }
13
+ /**
14
+ * This cannot resolve members during Enum resolution, because this
15
+ * will try to reference the base Enum by name.
16
+ */
17
+ export declare class ResolvableEnumMember extends Resolvable<EnumMember> {
18
+ protected expectedTypeKind: string;
19
+ protected type(opts: ResolverOptions<Resolver.Type>, out: ResolverResult<Resolver.Type>): Promise<void>;
20
+ protected typeguard(opts: ResolverOptions<Resolver.Typeguard>, out: ResolverResult<Resolver.Typeguard>): Promise<void>;
21
+ }
@@ -0,0 +1,61 @@
1
+ import { getDoc } from "@typespec/compiler";
2
+ import { compareArrays } from "../../helpers/arrays.js";
3
+ import { namespaceListFromNamespace } from "../../helpers/namespaces.js";
4
+ import { Resolvable } from "../Resolvable.js";
5
+ /**
6
+ * This resolves Enums completely, meaning it doesn't try to resolve
7
+ * members as EnumMember, because EnumMember resolution references the base Enum.
8
+ */
9
+ export class ResolvableEnum extends Resolvable {
10
+ expectedTypeKind = "Enum";
11
+ async type(opts, out) {
12
+ if (opts.emitDocs) {
13
+ out.doc = getDoc(opts.program, this._t);
14
+ }
15
+ out.resolved.append("{\n");
16
+ let i = 1;
17
+ this._t.members.forEach((member) => {
18
+ const val = resolveEnumMemberValue(member, opts);
19
+ out.resolved.addLine(`${member.name.includes("-") ? `'${member.name}'` : member.name}${val}${i < this._t.members.size ? "," : ""}`, opts.nestlevel + 1);
20
+ i++;
21
+ });
22
+ out.resolved.addLine("}", opts.nestlevel, "continued");
23
+ }
24
+ async typeguard() {
25
+ // enums cannot have typeguards
26
+ return;
27
+ }
28
+ }
29
+ /**
30
+ * This cannot resolve members during Enum resolution, because this
31
+ * will try to reference the base Enum by name.
32
+ */
33
+ export class ResolvableEnumMember extends Resolvable {
34
+ expectedTypeKind = "EnumMember";
35
+ async type(opts, out) {
36
+ const foundParent = opts.typemap.find((mt) => mt.type.kind === "Enum" &&
37
+ mt.type.name === this._t.enum.name &&
38
+ compareArrays(mt.namespaces, namespaceListFromNamespace(this._t.enum.namespace) ?? []));
39
+ if (foundParent) {
40
+ out.resolved.append(`${foundParent.type.name}.${this._t.name}`);
41
+ out.imports.push(foundParent.namespaces);
42
+ }
43
+ else {
44
+ out.resolved.append(resolveEnumMemberValue(this._t, opts));
45
+ }
46
+ }
47
+ async typeguard(opts, out) {
48
+ out.resolved.append("true");
49
+ }
50
+ }
51
+ const resolveEnumMemberValue = (member, opts) => {
52
+ return member.value === undefined
53
+ ? opts.options["string-nominal-enums"]
54
+ ? ` = '${member.name}'`
55
+ : ""
56
+ : " = " +
57
+ (typeof member.value === "string"
58
+ ? `'${member.value}'`
59
+ : member.value.toString());
60
+ };
61
+ //# sourceMappingURL=Enum.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Enum.js","sourceRoot":"","sources":["../../../../src/resolve/types/Enum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAoB,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,yBAAyB,CAAC;AACxD,OAAO,EAAE,0BAA0B,EAAE,MAAM,6BAA6B,CAAC;AACzE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAO9C;;;GAGG;AACH,MAAM,OAAO,cAAe,SAAQ,UAAgB;IACxC,gBAAgB,GAAG,MAAM,CAAC;IAE1B,KAAK,CAAC,IAAI,CAClB,IAAoC,EACpC,GAAkC;QAElC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;YACjC,MAAM,GAAG,GAAG,sBAAsB,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;YACjD,GAAG,CAAC,QAAQ,CAAC,OAAO,CAClB,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,GAAG,GAAG,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAC7G,IAAI,CAAC,SAAS,GAAG,CAAC,CACnB,CAAC;YACF,CAAC,EAAE,CAAC;QACN,CAAC,CAAC,CAAC;QACH,GAAG,CAAC,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,EAAE,WAAW,CAAC,CAAC;IACzD,CAAC;IAES,KAAK,CAAC,SAAS;QACvB,+BAA+B;QAC/B,OAAO;IACT,CAAC;CACF;AAED;;;GAGG;AACH,MAAM,OAAO,oBAAqB,SAAQ,UAAsB;IACpD,gBAAgB,GAAG,YAAY,CAAC;IAEhC,KAAK,CAAC,IAAI,CAClB,IAAoC,EACpC,GAAkC;QAElC,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CACnC,CAAC,EAAE,EAAE,EAAE,CACL,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM;YACvB,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI;YAClC,aAAa,CACX,EAAE,CAAC,UAAU,EACb,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,CACzD,CACJ,CAAC;QACF,IAAI,WAAW,EAAE,CAAC;YAChB,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,WAAW,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;YAChE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;QAC3C,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,sBAAsB,CAAC,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC,CAAC;QAC7D,CAAC;IACH,CAAC;IAES,KAAK,CAAC,SAAS,CACvB,IAAyC,EACzC,GAAuC;QAEvC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;IAC9B,CAAC;CACF;AAED,MAAM,sBAAsB,GAAG,CAC7B,MAAkB,EAClB,IAA0B,EAClB,EAAE;IACV,OAAO,MAAM,CAAC,KAAK,KAAK,SAAS;QAC/B,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,sBAAsB,CAAC;YACpC,CAAC,CAAC,OAAO,MAAM,CAAC,IAAI,GAAG;YACvB,CAAC,CAAC,EAAE;QACN,CAAC,CAAC,KAAK;YACH,CAAC,OAAO,MAAM,CAAC,KAAK,KAAK,QAAQ;gBAC/B,CAAC,CAAC,IAAI,MAAM,CAAC,KAAK,GAAG;gBACrB,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;AACrC,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { Model } from "@typespec/compiler";
2
+ import { Resolvable } from "../Resolvable.js";
3
+ import { Resolver, ResolverOptions, ResolverResult } from "../Resolvable_helpers.js";
4
+ export declare class IndexedModel extends Resolvable<Model> {
5
+ constructor(t: Model, r: Resolver);
6
+ private _indexedModelKind;
7
+ protected expectedTypeKind: string;
8
+ hasVisibility(opts: ResolverOptions<Resolver>, out: ResolverResult<Resolver>): Promise<boolean>;
9
+ protected type(opts: ResolverOptions<Resolver.Type>, out: ResolverResult<Resolver.Type>): Promise<void>;
10
+ protected typeguard(opts: ResolverOptions<Resolver.Typeguard>, out: ResolverResult<Resolver.Typeguard>): Promise<void>;
11
+ protected validate(): void;
12
+ }
@@ -0,0 +1,69 @@
1
+ import { Resolvable } from "../Resolvable.js";
2
+ var Type;
3
+ (function (Type) {
4
+ Type[Type["Array"] = 0] = "Array";
5
+ Type[Type["Record"] = 1] = "Record";
6
+ })(Type || (Type = {}));
7
+ export class IndexedModel extends Resolvable {
8
+ constructor(t, r) {
9
+ super(t, r);
10
+ if (t.name === "Array") {
11
+ this._indexedModelKind = Type.Array;
12
+ }
13
+ else if (t.name === "Record") {
14
+ this._indexedModelKind = Type.Record;
15
+ }
16
+ else
17
+ throw new TypeError(`Cannot create IndexedModel on type of name ${t.name}`);
18
+ }
19
+ _indexedModelKind;
20
+ expectedTypeKind = "Model";
21
+ async hasVisibility(opts, out) {
22
+ if (await super.hasVisibility(opts, out))
23
+ return true;
24
+ if (await Resolvable.hasVisibility(this._t.indexer.value, opts, out, this._t))
25
+ return true;
26
+ return false;
27
+ }
28
+ async type(opts, out) {
29
+ const resolved = await this.resolveNested(this._t.indexer.value, opts, out, false);
30
+ switch (this._indexedModelKind) {
31
+ case Type.Array:
32
+ out.resolved.append(`(${resolved.resolved})[]`);
33
+ break;
34
+ case Type.Record:
35
+ out.resolved.append(`{[k: string]: ${resolved.resolved}}`);
36
+ break;
37
+ }
38
+ out.imports.push(...resolved.imports);
39
+ }
40
+ async typeguard(opts, out) {
41
+ const oldAccessor = opts.accessor;
42
+ opts.accessor = this._indexedModelKind === Type.Array ? "v" : "v[1]";
43
+ const resolved = await this.resolveNested(this._t.indexer.value, opts, out);
44
+ opts.accessor = oldAccessor;
45
+ if (resolved.resolved.value.endsWith("\n"))
46
+ resolved.resolved.dropLast();
47
+ switch (this._indexedModelKind) {
48
+ case Type.Array:
49
+ out.resolved.append(`Array.isArray(${opts.accessor}) && ${opts.accessor}.every((v) => ${resolved.resolved})`);
50
+ break;
51
+ case Type.Record:
52
+ out.resolved.append(`typeof ${opts.accessor} === 'object' && Object.entries(${opts.accessor} as Record<string, any>).every((v) => ${resolved.resolved})`);
53
+ break;
54
+ }
55
+ out.imports.push(...resolved.imports);
56
+ }
57
+ validate() {
58
+ if (this._t.name !== "Array" && this._t.name !== "Record") {
59
+ this.diagnostic("typeclass-modeltype-mismatch", "Tried creating IndexedModel for non-array and non-record model type", "error");
60
+ throw new Error("Tried creating IndexedModel for non-array and non-record model type");
61
+ }
62
+ if (!this._t.indexer) {
63
+ this.diagnostic("no-indexer", "Tried creating IndexedModel for type without indexer", "error");
64
+ throw new Error("Tried creating IndexedModel for type without indexer");
65
+ }
66
+ super.validate();
67
+ }
68
+ }
69
+ //# sourceMappingURL=Model.Indexed.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Model.Indexed.js","sourceRoot":"","sources":["../../../../src/resolve/types/Model.Indexed.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAO9C,IAAK,IAGJ;AAHD,WAAK,IAAI;IACP,iCAAK,CAAA;IACL,mCAAM,CAAA;AACR,CAAC,EAHI,IAAI,KAAJ,IAAI,QAGR;AAED,MAAM,OAAO,YAAa,SAAQ,UAAiB;IACjD,YAAY,CAAQ,EAAE,CAAW;QAC/B,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QACZ,IAAI,CAAC,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;YACvB,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,KAAK,CAAC;QACtC,CAAC;aAAM,IAAI,CAAC,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC/B,IAAI,CAAC,iBAAiB,GAAG,IAAI,CAAC,MAAM,CAAC;QACvC,CAAC;;YACC,MAAM,IAAI,SAAS,CACjB,8CAA8C,CAAC,CAAC,IAAI,EAAE,CACvD,CAAC;IACN,CAAC;IAEO,iBAAiB,CAAO;IACtB,gBAAgB,GAAW,OAAO,CAAC;IAE7B,KAAK,CAAC,aAAa,CACjC,IAA+B,EAC/B,GAA6B;QAE7B,IAAI,MAAM,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACtD,IACE,MAAM,UAAU,CAAC,aAAa,CAAC,IAAI,CAAC,EAAE,CAAC,OAAQ,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;YAE1E,OAAO,IAAI,CAAC;QACd,OAAO,KAAK,CAAC;IACf,CAAC;IAES,KAAK,CAAC,IAAI,CAClB,IAAoC,EACpC,GAAkC;QAElC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CACvC,IAAI,CAAC,EAAE,CAAC,OAAQ,CAAC,KAAK,EACtB,IAAI,EACJ,GAAG,EACH,KAAK,CACN,CAAC;QACF,QAAQ,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC/B,KAAK,IAAI,CAAC,KAAK;gBACb,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,QAAQ,CAAC,QAAQ,KAAK,CAAC,CAAC;gBAChD,MAAM;YACR,KAAK,IAAI,CAAC,MAAM;gBACd,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,iBAAiB,QAAQ,CAAC,QAAQ,GAAG,CAAC,CAAC;gBAC3D,MAAM;QACV,CAAC;QACD,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAES,KAAK,CAAC,SAAS,CACvB,IAAyC,EACzC,GAAuC;QAEvC,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;QAClC,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,iBAAiB,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC;QACrE,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CACvC,IAAI,CAAC,EAAE,CAAC,OAAQ,CAAC,KAAK,EACtB,IAAI,EACJ,GAAG,CACJ,CAAC;QACF,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;QAC5B,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,QAAQ,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QAEzE,QAAQ,IAAI,CAAC,iBAAiB,EAAE,CAAC;YAC/B,KAAK,IAAI,CAAC,KAAK;gBACb,GAAG,CAAC,QAAQ,CAAC,MAAM,CACjB,iBAAiB,IAAI,CAAC,QAAQ,QAAQ,IAAI,CAAC,QAAQ,iBAAiB,QAAQ,CAAC,QAAQ,GAAG,CACzF,CAAC;gBACF,MAAM;YACR,KAAK,IAAI,CAAC,MAAM;gBACd,GAAG,CAAC,QAAQ,CAAC,MAAM,CACjB,UAAU,IAAI,CAAC,QAAQ,mCAAmC,IAAI,CAAC,QAAQ,yCAAyC,QAAQ,CAAC,QAAQ,GAAG,CACrI,CAAC;gBACF,MAAM;QACV,CAAC;QACD,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;IACxC,CAAC;IAES,QAAQ;QAChB,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,OAAO,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;YAC1D,IAAI,CAAC,UAAU,CACb,8BAA8B,EAC9B,qEAAqE,EACrE,OAAO,CACR,CAAC;YACF,MAAM,IAAI,KAAK,CACb,qEAAqE,CACtE,CAAC;QACJ,CAAC;QACD,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC;YACrB,IAAI,CAAC,UAAU,CACb,YAAY,EACZ,sDAAsD,EACtD,OAAO,CACR,CAAC;YACF,MAAM,IAAI,KAAK,CAAC,sDAAsD,CAAC,CAAC;QAC1E,CAAC;QACD,KAAK,CAAC,QAAQ,EAAE,CAAC;IACnB,CAAC;CACF"}
@@ -0,0 +1,17 @@
1
+ import { Model } from "@typespec/compiler";
2
+ import { Resolvable } from "../Resolvable.js";
3
+ import { Resolver, ResolverOptions, ResolverResult } from "../Resolvable_helpers.js";
4
+ export declare class ShapedModel extends Resolvable<Model> {
5
+ protected expectedTypeKind: string;
6
+ private getProps;
7
+ private getPropVisibilityType;
8
+ /**
9
+ * Checks whether or not any of the model's properties has @visibility modifier.
10
+ * Also returns true if any base model (in the entire chain) has a visibility OR if
11
+ * any nested type (in the model's properties) has a visibility.
12
+ */
13
+ hasVisibility(opts: ResolverOptions<Resolver>, out: ResolverResult<Resolver>): Promise<boolean>;
14
+ protected type(opts: ResolverOptions<Resolver.Type>, out: ResolverResult<Resolver.Type>): Promise<void>;
15
+ protected typeguard(opts: ResolverOptions<Resolver.Typeguard>, out: ResolverResult<Resolver.Typeguard>): Promise<void>;
16
+ protected transformKnownType(opts: ResolverOptions<Resolver>, out: ResolverResult<Resolver>): void;
17
+ }