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,4 @@
1
+ import { Program } from "@typespec/compiler";
2
+ import { TTypeMap } from "./helpers/buildTypeMap.js";
3
+ import { EmitterOptions } from "./lib.js";
4
+ export declare const emitRoutedTypemap: (program: Program, options: EmitterOptions, typemap: TTypeMap) => Promise<void>;
@@ -0,0 +1,83 @@
1
+ import { emitFile, navigateProgram, resolvePath, } from "@typespec/compiler";
2
+ import { getHttpOperation } from "@typespec/http";
3
+ import { unique2D } from "./helpers/arrays.js";
4
+ import autogenerateWarning from "./helpers/autogenerateWarning.js";
5
+ import { getImports } from "./helpers/getImports.js";
6
+ import { visibilityHelperFileName } from "./helpers/visibilityHelperFile.js";
7
+ import { resolveOperationTypemap, } from "./resolve/operationTypemap.js";
8
+ export const emitRoutedTypemap = async (program, options, typemap) => {
9
+ // save original targeted namespaces array because it's mutated here
10
+ const targetedNamespaces = structuredClone(options["root-namespaces"]);
11
+ const namespaceImports = {};
12
+ const namespaceOps = {};
13
+ // finding all operations
14
+ const foundOps = {};
15
+ const traverseNamespace = (n, rootName) => {
16
+ if (!foundOps[rootName])
17
+ foundOps[rootName] = [];
18
+ foundOps[rootName].push(...Array.from(n.operations).map((op) => op[1]));
19
+ n.namespaces.forEach((ns) => traverseNamespace(ns, rootName));
20
+ };
21
+ navigateProgram(program, {
22
+ namespace(n) {
23
+ const nsIndex = options["root-namespaces"].findIndex((ns) => n.name === ns);
24
+ if (nsIndex === -1)
25
+ return;
26
+ // for some reason, navigateProgram visits each namespace multiple times; this prevents that
27
+ delete options["root-namespaces"][nsIndex];
28
+ traverseNamespace(n, n.name);
29
+ },
30
+ });
31
+ // resolving operations
32
+ for (const ns of Object.entries(foundOps)) {
33
+ for (const op of ns[1]) {
34
+ const resolved = await resolveOperationTypemap(program, options, typemap, op);
35
+ const httpOp = getHttpOperation(program, op)[0];
36
+ if (!namespaceImports[ns[0]])
37
+ namespaceImports[ns[0]] = [];
38
+ namespaceImports[ns[0]].push(...resolved.imports);
39
+ if (!namespaceOps[ns[0]])
40
+ namespaceOps[ns[0]] = { ops: {}, hasVisibility: false };
41
+ if (!namespaceOps[ns[0]].ops[httpOp.path])
42
+ namespaceOps[ns[0]].ops[httpOp.path] = {};
43
+ namespaceOps[ns[0]].ops[httpOp.path][httpOp.verb.toUpperCase()] =
44
+ resolved.types;
45
+ if (resolved.types.request.hasVisibility ||
46
+ resolved.types.response.content.some((v) => v.hasVisibility))
47
+ namespaceOps[ns[0]].hasVisibility = true;
48
+ }
49
+ }
50
+ // emitting
51
+ for (const ns of Object.entries(namespaceOps)) {
52
+ const importStrings = getImports(unique2D(namespaceImports[ns[0]]));
53
+ if (ns[1].hasVisibility) {
54
+ importStrings.push(`import {Lifecycle, FilterLifecycle} from './${visibilityHelperFileName}';`);
55
+ }
56
+ let out = `export type types_${ns[0]}${ns[1].hasVisibility ? "<V extends Lifecycle = Lifecycle.All>" : ""} = {\n`;
57
+ out += Object.entries(ns[1].ops)
58
+ .map((path) => {
59
+ let pathret = ` ['${path[0]}']: {\n`;
60
+ pathret += Object.entries(path[1])
61
+ .map((verb) => {
62
+ let verbret = ` ['${verb[0]}']: {\n`;
63
+ verbret += ` request: ${verb[1].request.content}\n`;
64
+ verbret += ` response: ${verb[1].response.content.map((res) => `{status: ${res.status}, body: ${res.body}}`).join(" | ")}\n`;
65
+ verbret += " }";
66
+ return verbret;
67
+ })
68
+ .join(",\n");
69
+ pathret += "\n }";
70
+ return pathret;
71
+ })
72
+ .join(",\n");
73
+ out += "\n};\n";
74
+ const content = `/* eslint-disable */\n\n${autogenerateWarning}\n${importStrings.join("\n")}\n\n${out}`;
75
+ await emitFile(program, {
76
+ path: resolvePath(options["out-dir"], `routedTypemap_${ns[0]}.ts`),
77
+ content: content,
78
+ });
79
+ }
80
+ // restore un-mutated version
81
+ options["root-namespaces"] = targetedNamespaces;
82
+ };
83
+ //# sourceMappingURL=emit_routedTypemap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"emit_routedTypemap.js","sourceRoot":"","sources":["../../src/emit_routedTypemap.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,3 @@
1
- import { EmitContext, Namespace } from "@typespec/compiler";
2
- export declare const emitRoutes: (context: EmitContext, namespace: Namespace) => string;
1
+ import { Program } from "@typespec/compiler";
2
+ import { EmitterOptions } from "./lib.js";
3
+ export declare const emitRoutes: (program: Program, options: EmitterOptions) => Promise<void>;
@@ -1,32 +1,38 @@
1
- import { getDoc, isTemplateDeclaration, } from "@typespec/compiler";
1
+ import { emitFile, getDoc, isTemplateDeclaration, navigateProgram, resolvePath, } from "@typespec/compiler";
2
2
  import { getAuthentication, getHttpOperation } from "@typespec/http";
3
- export const emitRoutes = (context, namespace) => {
4
- let out = `export const routes_${context.options["root-namespace"]} = {\n`;
5
- const traverseNamespace = (n, nestLevel) => {
6
- // operations
7
- const processOp = (op) => {
8
- const httpOp = getHttpOperation(context.program, op);
9
- // jsdoc comment
10
- const doc = getDoc(context.program, op);
11
- if (doc)
12
- out = out.addLine(`/** ${doc} */`, nestLevel + 1);
13
- // start op body
14
- out = out.addLine(`${op.name}: {`, nestLevel + 1);
15
- // HTTP method
16
- out = out.addLine(`method: '${httpOp[0].verb.toUpperCase()}',`, nestLevel + 2);
17
- // path
18
- out = out.addLine(`path: '${httpOp[0].path}',`, nestLevel + 2);
19
- // getUrl
20
- const pathParams = httpOp[0].parameters.parameters.filter((p) => p.type === "path");
21
- const pathParamsArgsString = pathParams
3
+ import { AppendableString } from "./helpers/appendableString.js";
4
+ import autogenerateWarning from "./helpers/autogenerateWarning.js";
5
+ export const emitRoutes = async (program, options) => {
6
+ // save original targeted namespaces array because it's mutated here
7
+ const targetedNamespaces = structuredClone(options["root-namespaces"]);
8
+ const files = {};
9
+ const traverseNamespace = (n, nestlevel, rootName) => {
10
+ if (files[rootName] === undefined)
11
+ files[rootName] = new AppendableString(`export const routes_${rootName} = {\n`);
12
+ const numCollections = Array.from(n.interfaces ?? []).length +
13
+ Array.from((n.namespaces ?? [])).length;
14
+ let i = 1;
15
+ for (const op of n.operations) {
16
+ const httpOp = getHttpOperation(program, op[1])[0];
17
+ const pathParams = httpOp.parameters.parameters.filter((p) => p.type === "path");
18
+ const urlParams = `params: {${pathParams
22
19
  .map((p) => `${p.name}: string`)
23
- .join(", ");
24
- const pathParamsArg = `params: {${pathParamsArgsString}}`;
25
- const pathParamsOutString = pathParams.reduce((sum, cur) => sum.replaceAll(`{${cur.name}}`, `${"$"}{params.${cur.name}}`), `\`${httpOp[0].path}\``);
26
- out = out.addLine(`getUrl: (${pathParams.length > 0 ? pathParamsArg : ""}): string => ${pathParamsOutString},`, nestLevel + 2);
20
+ .join(", ")}}`;
21
+ const urlReturn = pathParams.reduce((sum, cur) => sum.replaceAll(`{${cur.name}}`, `${"$"}{params.${cur.name}}`), `\`${httpOp.path}\``);
22
+ const doc = getDoc(program, op[1]);
23
+ if (doc)
24
+ files[rootName].addLine(`/** ${doc} */`
25
+ .split("\n")
26
+ .map((l) => `${" ".repeat(nestlevel)}${l}`)
27
+ .join("\n"), 0);
28
+ files[rootName]
29
+ .addLine(`${op[1].name}: {`, nestlevel)
30
+ .addLine(`verb: '${httpOp.verb.toUpperCase()}',`, nestlevel + 1)
31
+ .addLine(`path: '${httpOp.path}',`, nestlevel + 1)
32
+ .addLine(`getUrl: (${pathParams.length > 0 ? urlParams : ""}): string => ${urlReturn},`, nestlevel + 1);
27
33
  // auth
28
34
  let auth = [];
29
- const opAuth = getAuthentication(context.program, op);
35
+ const opAuth = getAuthentication(program, op[1]);
30
36
  if (opAuth) {
31
37
  opAuth.options.forEach((authOption) => authOption.schemes.forEach((authScheme) => {
32
38
  if (authScheme.type === "noAuth")
@@ -46,7 +52,7 @@ export const emitRoutes = (context, namespace) => {
46
52
  }
47
53
  else
48
54
  auth = [null];
49
- out = out.addLine(`auth: [${auth
55
+ files[rootName].addLine(`auth: [${auth
50
56
  .map((authEntry) => !authEntry
51
57
  ? "null"
52
58
  : typeof authEntry === "string"
@@ -54,29 +60,49 @@ export const emitRoutes = (context, namespace) => {
54
60
  : `{${Object.entries(authEntry)
55
61
  .map((entry) => `${entry[0]}: '${entry[1]}'`)
56
62
  .join(", ")}}`)
57
- .join(", ")}]`, nestLevel + 2);
58
- // finalize route entry
59
- out = out.addLine("},", nestLevel + 1);
60
- }; // end operations
61
- n.operations.forEach(processOp);
62
- n.interfaces.forEach((itf) => {
63
- if (!isTemplateDeclaration(itf))
64
- itf.operations.forEach(processOp);
65
- });
66
- // get and traverse all namespaces
67
- let nsnum = 0;
68
- n.namespaces.forEach((ns) => {
69
- nsnum++;
70
- const doc = getDoc(context.program, ns);
63
+ .join(", ")}]`, nestlevel + 1);
64
+ files[rootName].addLine(i < n.operations.size || numCollections > 0 ? "}," : "}", nestlevel);
65
+ i++;
66
+ }
67
+ let collectionNum = 1;
68
+ const printCollection = (n) => {
69
+ const doc = getDoc(program, n);
71
70
  if (doc)
72
- out = out.addLine(`/** ${doc} */`, nestLevel + 1);
73
- out = out.addLine(`${ns.name}: {`, nestLevel + 1);
74
- traverseNamespace(ns, nestLevel + 1);
75
- out = out.addLine(`}${nsnum < n.namespaces.size ? "," : ""}`, nestLevel + 1);
71
+ files[rootName].addLine(`/** ${doc} */`
72
+ .split("\n")
73
+ .map((l) => `${" ".repeat(nestlevel)}${l}`)
74
+ .join("\n"));
75
+ files[rootName].addLine(`${n.name}: {`, nestlevel);
76
+ traverseNamespace(n, nestlevel + 1, rootName);
77
+ files[rootName].addLine(collectionNum < numCollections ? "}," : "}", nestlevel);
78
+ collectionNum++;
79
+ };
80
+ (n.interfaces ?? []).forEach((i) => {
81
+ if (!isTemplateDeclaration(i))
82
+ printCollection(i);
76
83
  });
84
+ (n.namespaces ?? []).forEach((ns) => printCollection(ns));
85
+ if (n.name === rootName && nestlevel === 1)
86
+ files[rootName].addLine("} as const;");
77
87
  };
78
- traverseNamespace(namespace, 0);
79
- out += "} as const;\n";
80
- return out;
88
+ navigateProgram(program, {
89
+ namespace(n) {
90
+ const nsIndex = options["root-namespaces"].findIndex((ns) => n.name === ns);
91
+ if (nsIndex === -1)
92
+ return;
93
+ // for some reason, navigateProgram visits each namespace multiple times; this prevents that
94
+ delete options["root-namespaces"][nsIndex];
95
+ traverseNamespace(n, 1, n.name);
96
+ },
97
+ });
98
+ // emitting
99
+ for (const file of Object.entries(files)) {
100
+ await emitFile(program, {
101
+ path: resolvePath(options["out-dir"], `routes_${file[0]}.ts`),
102
+ content: `/* eslint-disable */\n\n${autogenerateWarning}\n${file[1].value}`,
103
+ });
104
+ }
105
+ // restore un-mutated version
106
+ options["root-namespaces"] = targetedNamespaces;
81
107
  };
82
108
  //# sourceMappingURL=emit_routes.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"emit_routes.js","sourceRoot":"","sources":["../../src/emit_routes.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"emit_routes.js","sourceRoot":"","sources":["../../src/emit_routes.ts"],"names":[],"mappings":"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"}
@@ -1,10 +1,4 @@
1
- import { EmitContext, Namespace } from "@typespec/compiler";
1
+ import { Program } from "@typespec/compiler";
2
+ import { TTypeMap } from "./helpers/buildTypeMap.js";
2
3
  import { EmitterOptions } from "./lib.js";
3
- declare const emitTypes: (context: EmitContext, namespace: Namespace, options: EmitterOptions) => {
4
- files: Record<string, string>;
5
- typeguardedNames: Array<{
6
- filename: string;
7
- name: string;
8
- }>;
9
- };
10
- export default emitTypes;
4
+ export declare const emitTypes: (program: Program, options: EmitterOptions, typemap: TTypeMap) => Promise<void>;
@@ -1,81 +1,116 @@
1
- import { getDoc } from "@typespec/compiler";
2
- import { resolveEnum, resolveModel, resolveUnion, } from "./emit_types_resolve.js";
3
- import { getTypeguardModel } from "./emit_types_typeguards.js";
4
- const emitTypes = (context, namespace, options) => {
5
- const out = { files: {}, typeguardedNames: [] };
6
- const traverseNamespace = (n) => {
7
- let file = "";
8
- n.enums.forEach((e) => {
9
- if (options["enable-types"]) {
10
- const resolved = resolveEnum(e, {
11
- context: context,
12
- currentNamespace: n,
13
- nestlevel: 0,
14
- isNamespaceRoot: true,
15
- });
16
- if (resolved) {
17
- const doc = getDoc(context.program, e);
18
- if (doc)
19
- file = file.addLine(`/** ${doc} */`);
20
- file = file.addLine(`export enum ${e.name} ${resolved};\n`);
21
- }
22
- }
1
+ import { emitFile, resolvePath } from "@typespec/compiler";
2
+ import { AppendableString } from "./helpers/appendableString.js";
3
+ import { unique2D } from "./helpers/arrays.js";
4
+ import autogenerateWarning from "./helpers/autogenerateWarning.js";
5
+ import { getImports } from "./helpers/getImports.js";
6
+ import { filenameFromNamespaces } from "./helpers/namespaces.js";
7
+ import { visibilityHelperFileName } from "./helpers/visibilityHelperFile.js";
8
+ import { Resolvable } from "./resolve/Resolvable.js";
9
+ import { Resolver } from "./resolve/Resolvable_helpers.js";
10
+ export const emitTypes = async (program, options, typemap) => {
11
+ // maps file names to file contents
12
+ const files = {};
13
+ // maps file names to list of required imports
14
+ const imports = {};
15
+ // generate files
16
+ typemap.forEach((t) => {
17
+ files[filenameFromNamespaces(t.namespaces)] = new AppendableString();
18
+ imports[filenameFromNamespaces(t.namespaces)] = {
19
+ namespaces: [],
20
+ lifecycleTypes: [],
21
+ };
22
+ });
23
+ const typeOrder = ["Enum", "Scalar", "Model", "Union"];
24
+ typemap.sort((a, b) => typeOrder.indexOf(a.type.kind) - typeOrder.indexOf(b.type.kind));
25
+ // resolve all types
26
+ for (let i = 0; i < typemap.length; i++) {
27
+ const t = typemap[i];
28
+ const filename = filenameFromNamespaces(t.namespaces);
29
+ const resolved = await Resolvable.resolve(Resolver.Type, t.type, {
30
+ program,
31
+ options,
32
+ emitDocs: true,
33
+ nestlevel: 0,
34
+ rootType: t,
35
+ typemap: typemap,
23
36
  });
24
- n.unions.forEach((u) => {
25
- if (options["enable-types"]) {
26
- const resolved = resolveUnion(u, {
27
- currentNamespace: n,
28
- context,
29
- nestlevel: 0,
30
- isNamespaceRoot: true,
31
- });
32
- if (resolved) {
33
- const doc = getDoc(context.program, u);
34
- if (doc)
35
- file = file.addLine(`/** ${doc} */`);
36
- file = file.addLine(`export type ${u.name} = ${resolved};\n`);
37
+ imports[filename].namespaces.push(...resolved.imports);
38
+ let declaration = "export ";
39
+ switch (t.type.kind) {
40
+ case "Enum":
41
+ declaration += `enum ${t.type.name}`;
42
+ break;
43
+ case "Scalar":
44
+ declaration += `type ${t.type.name} =`;
45
+ break;
46
+ case "Model":
47
+ declaration += `type ${t.type.name}${resolved.hasVisibility ? "<V extends Lifecycle = Lifecycle.All>" : ""} =`;
48
+ // Making ALL types generic (regardless of whether they need it) improves ease-of-use,
49
+ // both for the user as well for the dev when accessing known types.
50
+ // declaration += `type ${t.type.name}${resolved.hasVisibility ? "<V extends Lifecycle = Lifecycle.All>" : ""} =`;
51
+ break;
52
+ case "Union":
53
+ declaration += `type ${t.type.name}${resolved.hasVisibility ? "<V extends Lifecycle = Lifecycle.All>" : ""} =`;
54
+ // declaration += `type ${t.type.name}${resolved.hasVisibility ? "<V extends Lifecycle = Lifecycle.All>" : ""} =`;
55
+ break;
56
+ }
57
+ if (resolved.doc)
58
+ files[filename].addLine(`/** ${resolved.doc} */`);
59
+ if (resolved.hasVisibility) {
60
+ imports[filename].lifecycleTypes.push("FilterLifecycle", "Lifecycle");
61
+ }
62
+ if (t.type.kind === "Model" &&
63
+ t.type.name !== "Array" &&
64
+ t.type.name !== "Record" &&
65
+ resolved.visibilityMap.replaceAll("{", "").replaceAll("}", "").trim()) {
66
+ files[filename].addLine(`${declaration} ${resolved.resolved.value}`);
67
+ // files[filename].addLine(
68
+ // `${declaration} FilterLifecycle<${resolved.resolved.value}, typeof ${t.type.name}_VisMap, V>`,
69
+ // );
70
+ // files[filename].addLine(
71
+ // `export const ${t.type.name}_VisMap = ${resolved.visibilityMap} as const`,
72
+ // );
73
+ }
74
+ else {
75
+ files[filename].addLine(`${declaration} ${resolved.resolved.value}`);
76
+ }
77
+ if (options["enable-typeguards"]) {
78
+ const typeguard = await Resolvable.resolve(Resolver.Typeguard, t.type, {
79
+ program,
80
+ options,
81
+ nestlevel: 1,
82
+ rootType: t,
83
+ typemap: typemap,
84
+ accessor: "t",
85
+ });
86
+ if (typeguard.resolved.value) {
87
+ if (typeguard.hasVisibility) {
88
+ imports[filename].lifecycleTypes.push("Lifecycle");
89
+ files[filename].addLine(`export function is${t.type.name}(t: any, vis: Lifecycle = Lifecycle.All): t is ${t.type.name}<typeof vis> {return (${typeguard.resolved})}`);
37
90
  }
38
- }
39
- });
40
- n.models.forEach((m) => {
41
- if (options["enable-types"]) {
42
- const resolved = resolveModel(m, {
43
- nestlevel: 0,
44
- currentNamespace: n,
45
- context,
46
- isNamespaceRoot: true,
47
- });
48
- if (resolved) {
49
- const doc = getDoc(context.program, m);
50
- if (doc)
51
- file = file.addLine(`/** ${doc} */`);
52
- file = file.addLine(`export interface ${m.name} ${resolved};`);
91
+ else {
92
+ files[filename].addLine(`export function is${t.type.name}(t: any): t is ${t.type.name} {return (${typeguard.resolved})}`);
53
93
  }
94
+ imports[filename].namespaces.push(...typeguard.imports);
54
95
  }
55
- if (options["enable-typeguards"]) {
56
- file = file.addLine(`export function is${m.name}(arg: any): arg is ${m.name} {`);
57
- file = file.addLine("return (", 1);
58
- getTypeguardModel(m, "arg", undefined, n, !!options["serializable-date-types"])[0]
59
- .split("\n")
60
- .forEach((line) => {
61
- file = file.addLine(line, 1);
62
- });
63
- file = file.addLine(");", 1);
64
- file = file.addLine("};");
65
- out.typeguardedNames.push({
66
- filename: n.name.charAt(0).toUpperCase() + n.name.slice(1),
67
- name: m.name,
68
- });
69
- }
70
- file += "\n";
96
+ }
97
+ files[filename].append("\n");
98
+ }
99
+ const filesArr = Object.entries(files).filter((f) => !!f[1].value);
100
+ for (let i = 0; i < filesArr.length; i++) {
101
+ if (!filesArr[i][1].value)
102
+ continue;
103
+ const filename = filesArr[i][0];
104
+ imports[filename].namespaces = unique2D(imports[filename].namespaces);
105
+ const importStrings = getImports(imports[filename].namespaces.filter((i) => filenameFromNamespaces(i) !== filename));
106
+ if (imports[filename].lifecycleTypes.length > 0) {
107
+ importStrings.push(`import {${[...new Set(imports[filename].lifecycleTypes)].join(", ")}} from './${visibilityHelperFileName}';`); // unique-ify
108
+ }
109
+ const content = `/* eslint-disable */\n\n${autogenerateWarning}${importStrings.join("\n")}${importStrings.length > 0 ? "\n\n" : ""}${filesArr[i][1].value}`;
110
+ await emitFile(program, {
111
+ path: resolvePath(options["out-dir"], filename),
112
+ content: content,
71
113
  });
72
- // set output for this namespace
73
- out.files[n.name.charAt(0).toUpperCase() + n.name.slice(1)] = file;
74
- // recursively iterate child namespaces
75
- n.namespaces.forEach((ns) => traverseNamespace(ns));
76
- };
77
- traverseNamespace(namespace);
78
- return out;
114
+ }
79
115
  };
80
- export default emitTypes;
81
116
  //# sourceMappingURL=emit_types.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"emit_types.js","sourceRoot":"","sources":["../../src/emit_types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"emit_types.js","sourceRoot":"","sources":["../../src/emit_types.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,3 @@
1
1
  import { EmitContext } from "@typespec/compiler";
2
- declare global {
3
- interface String {
4
- addLine(str: string, tabs?: number, continued?: boolean): string;
5
- }
6
- }
7
- export declare function $onEmit(context: EmitContext): Promise<void>;
2
+ import { EmitterOptions } from "./lib.js";
3
+ export declare function $onEmit(context: EmitContext<EmitterOptions>): Promise<void>;