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
@@ -1,80 +1,22 @@
1
- import { emitFile, navigateProgram, resolvePath, } from "@typespec/compiler";
2
- import { emitRoutedTypemap } from "./emit_mapped_types.js";
1
+ import { emitRoutedTypemap } from "./emit_routedTypemap.js";
3
2
  import { emitRoutes } from "./emit_routes.js";
4
- import emitTypes from "./emit_types.js";
5
- import autogenerateWarning from "./helper_autogenerateWarning.js";
6
- String.prototype.addLine = function (str, tabs, continued) {
7
- return `${this}${" ".repeat(tabs ?? 0)}${str}${continued ? "" : "\n"}`;
8
- };
3
+ import { emitTypes } from "./emit_types.js";
4
+ import { buildTypeMap } from "./helpers/buildTypeMap.js";
5
+ import { setContext } from "./helpers/diagnostics.js";
6
+ import { emitVisibilityHelperFile } from "./helpers/visibilityHelperFile.js";
7
+ import { parseOptions } from "./parseOptions.js";
9
8
  export async function $onEmit(context) {
10
- if (!context.program.compilerOptions.noEmit) {
11
- const options = {
12
- "root-namespace": context.options["root-namespace"],
13
- "out-dir": context.options["out-dir"] ?? context.emitterOutputDir,
14
- "enable-types": context.options["enable-types"] ?? true,
15
- "enable-typeguards": (context.options["enable-types"] ?? true) &&
16
- (context.options["enable-typeguards"] ?? false),
17
- "enable-routes": context.options["enable-routes"] ?? false,
18
- "enable-routed-typemap": context.options["enable-routed-typemap"] ?? false,
19
- "string-nominal-enums": (context.options["enable-routed-typemap"] ?? false) &&
20
- (context.options["string-nominal-enums"] ?? false),
21
- "serializable-date-types": context.options["serializable-date-types"] ?? false,
22
- };
23
- console.log(`Writing routes to ${options["out-dir"]}`);
24
- let targetNamespaceFound = false;
25
- let routesObject = "";
26
- let routedTypemap = "";
27
- let typeFiles = {
28
- files: {},
29
- typeguardedNames: [],
30
- };
31
- navigateProgram(context.program, {
32
- namespace(n) {
33
- if (!targetNamespaceFound &&
34
- n.name === context.options["root-namespace"]) {
35
- targetNamespaceFound = true;
36
- if (options["enable-types"] || options["enable-typeguards"])
37
- typeFiles = emitTypes(context, n, options);
38
- if (options["enable-routes"]) {
39
- routesObject = emitRoutes(context, n);
40
- }
41
- if (options["enable-routed-typemap"]) {
42
- routedTypemap = emitRoutedTypemap(context, n);
43
- }
44
- }
45
- },
46
- });
47
- if (!targetNamespaceFound)
48
- throw new Error("Targeted root namespace not found.");
49
- // routes object
50
- if (options["enable-routes"]) {
51
- if (!routesObject)
52
- throw new Error("Routes object empty.");
53
- await emitFile(context.program, {
54
- path: resolvePath(options["out-dir"], `routes_${options["root-namespace"]}.ts`),
55
- content: `/* eslint-disable */\n\n${autogenerateWarning}${routesObject}`,
56
- });
57
- }
58
- // routed typemap
59
- if (options["enable-routed-typemap"]) {
60
- if (!routedTypemap)
61
- throw new Error("Routed typemap empty.");
62
- await emitFile(context.program, {
63
- path: resolvePath(options["out-dir"], `routedTypemap_${options["root-namespace"]}.ts`),
64
- content: `/* eslint-disable */\n\n${autogenerateWarning}${routedTypemap}`,
65
- });
66
- }
67
- // type files
68
- if (options["enable-types"] || options["enable-typeguards"]) {
69
- const typeFileArr = Object.entries(typeFiles.files);
70
- for (let i = 0; i < typeFileArr.length; i++) {
71
- if (typeFileArr[i][1])
72
- await emitFile(context.program, {
73
- path: resolvePath(options["out-dir"], `${typeFileArr[i][0]}.ts`),
74
- content: `/* eslint-disable */\n\n${autogenerateWarning}${typeFileArr[i][1]}`,
75
- });
76
- }
77
- }
78
- }
9
+ if (context.program.compilerOptions.noEmit)
10
+ return;
11
+ setContext(context);
12
+ parseOptions(context);
13
+ const typeMap = buildTypeMap(context.program, context.options);
14
+ if (context.options["enable-types"])
15
+ await emitTypes(context.program, context.options, typeMap);
16
+ if (context.options["enable-routed-typemap"])
17
+ await emitRoutedTypemap(context.program, context.options, typeMap);
18
+ if (context.options["enable-routes"])
19
+ await emitRoutes(context.program, context.options);
20
+ await emitVisibilityHelperFile(context.program, context.options);
79
21
  }
80
22
  //# sourceMappingURL=emitter.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/emitter.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/emitter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAE7E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAoC;IAChE,IAAI,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM;QAAE,OAAO;IACnD,UAAU,CAAC,OAAO,CAAC,CAAC;IACpB,YAAY,CAAC,OAAO,CAAC,CAAC;IAEtB,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/D,IAAI,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC;QACjC,MAAM,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7D,IAAI,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC;QAC1C,MAAM,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACrE,IAAI,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;QAClC,MAAM,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAErD,MAAM,wBAAwB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;AACnE,CAAC"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * This class provides a string type which can only be appended to but not overwritten.
3
+ */
4
+ export declare class AppendableString {
5
+ constructor(init?: string);
6
+ private _content;
7
+ get value(): string;
8
+ append(s?: string | AppendableString): void;
9
+ /** Changes in place, returning the new value */
10
+ addLine(str: string | AppendableString, tabs?: number, continued?: "continued" | "line-end"): this;
11
+ [Symbol.toPrimitive](hint: string): string | boolean;
12
+ /** Removes the last x characters */
13
+ dropLast(n?: number): this;
14
+ clear(): this;
15
+ }
@@ -0,0 +1,41 @@
1
+ /**
2
+ * This class provides a string type which can only be appended to but not overwritten.
3
+ */
4
+ export class AppendableString {
5
+ constructor(init) {
6
+ this._content = init ?? "";
7
+ }
8
+ _content;
9
+ get value() {
10
+ return this._content;
11
+ }
12
+ append(s) {
13
+ this._content += s ?? "";
14
+ }
15
+ /** Changes in place, returning the new value */
16
+ addLine(str, tabs, continued = "line-end") {
17
+ this._content += `${" ".repeat(tabs ?? 0)}${str}${continued === "continued" ? "" : "\n"}`;
18
+ return this;
19
+ }
20
+ [Symbol.toPrimitive](hint) {
21
+ switch (hint) {
22
+ case "default":
23
+ case "string":
24
+ return this.value;
25
+ case "boolean":
26
+ return !!this.value;
27
+ default:
28
+ throw new TypeError(`Appendable string cannot be coerced to ${hint}`);
29
+ }
30
+ }
31
+ /** Removes the last x characters */
32
+ dropLast(n = 1) {
33
+ this._content = this._content.substring(0, this._content.length - n);
34
+ return this;
35
+ }
36
+ clear() {
37
+ this._content = "";
38
+ return this;
39
+ }
40
+ }
41
+ //# sourceMappingURL=appendableString.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"appendableString.js","sourceRoot":"","sources":["../../../src/helpers/appendableString.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAC3B,YAAY,IAAa;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;IAC7B,CAAC;IAEO,QAAQ,CAAS;IAEzB,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD,MAAM,CAAC,CAA6B;QAClC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,gDAAgD;IAChD,OAAO,CACL,GAA8B,EAC9B,IAAa,EACb,YAAsC,UAAU;QAEhD,IAAI,CAAC,QAAQ,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3F,OAAO,IAAI,CAAC;IACd,CAAC;IAED,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAY;QAC/B,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,SAAS,CAAC;YACf,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,KAAK,CAAC;YAEpB,KAAK,SAAS;gBACZ,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YAEtB;gBACE,MAAM,IAAI,SAAS,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,QAAQ,CAAC,IAAY,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
@@ -0,0 +1,3 @@
1
+ export declare const compareArrays: (a: any[], b: any[]) => boolean;
2
+ /** Unique-ifies a 2D array of strings (imported namespaces list). */
3
+ export declare const unique2D: (rows: string[][]) => string[][];
@@ -0,0 +1,23 @@
1
+ export const compareArrays = (a, b) => {
2
+ if (a.length !== b.length)
3
+ return false;
4
+ for (let i = 0; i < a.length; i++) {
5
+ if (a[i] !== b[i])
6
+ return false;
7
+ }
8
+ return true;
9
+ };
10
+ /** Unique-ifies a 2D array of strings (imported namespaces list). */
11
+ export const unique2D = (rows) => {
12
+ const seen = new Set();
13
+ const out = [];
14
+ for (const r of rows) {
15
+ const key = r.join("\u0000"); // safe separator
16
+ if (!seen.has(key)) {
17
+ seen.add(key);
18
+ out.push(r);
19
+ }
20
+ }
21
+ return out;
22
+ };
23
+ //# sourceMappingURL=arrays.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arrays.js","sourceRoot":"","sources":["../../../src/helpers/arrays.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAQ,EAAE,CAAQ,EAAW,EAAE;IAC3D,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IAClC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,qEAAqE;AACrE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAgB,EAAc,EAAE;IACvD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB;QAC/C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC"}
@@ -1,2 +1,2 @@
1
- declare const autogenerateWarning = "\n/*\n * This file is automatically generated by typespec-typescript-emitter.\n * \n * You should not change or manipulate this file, as it will be overwritten.\n * Instead, change the underlying spec.\n */\n\n\n";
1
+ declare const autogenerateWarning = "\n/*\n * This file is automatically generated by typespec-typescript-emitter.\n * \n * You should not change or manipulate this file, as it will be overwritten.\n * Instead, change the underlying spec.\n */\n\n";
2
2
  export default autogenerateWarning;
@@ -6,7 +6,6 @@ const autogenerateWarning = `
6
6
  * Instead, change the underlying spec.
7
7
  */
8
8
 
9
-
10
9
  `;
11
10
  export default autogenerateWarning;
12
- //# sourceMappingURL=helper_autogenerateWarning.js.map
11
+ //# sourceMappingURL=autogenerateWarning.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"autogenerateWarning.js","sourceRoot":"","sources":["../../../src/helpers/autogenerateWarning.ts"],"names":[],"mappings":"AAAA,MAAM,mBAAmB,GAAG;;;;;;;;CAQ3B,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { Enum, Model, Program, Scalar, Union } from "@typespec/compiler";
2
+ import { EmitterOptions } from "../lib.js";
3
+ export type TTypeMap = {
4
+ type: Enum | Model | Scalar | Union;
5
+ namespaces: string[];
6
+ hasVisibility: boolean | undefined;
7
+ }[];
8
+ /**
9
+ * Traverses all namespaces in the program and produces
10
+ * a map of all types-to-be-emitted and their namespace hierarchy.
11
+ */
12
+ export declare const buildTypeMap: (program: Program, options: EmitterOptions) => TTypeMap;
@@ -0,0 +1,44 @@
1
+ import { navigateProgram, navigateTypesInNamespace, } from "@typespec/compiler";
2
+ /**
3
+ * Traverses all namespaces in the program and produces
4
+ * a map of all types-to-be-emitted and their namespace hierarchy.
5
+ */
6
+ export const buildTypeMap = (program, options) => {
7
+ // save original targeted namespaces array because it's mutated here
8
+ const targetedNamespaces = structuredClone(options["root-namespaces"]);
9
+ const map = [];
10
+ const pushType = (t, hierarchy) => {
11
+ if (!t.name)
12
+ return;
13
+ map.push({
14
+ type: t,
15
+ namespaces: hierarchy,
16
+ hasVisibility: undefined,
17
+ });
18
+ };
19
+ const traverseNamespace = (n, hierarchy) => {
20
+ navigateTypesInNamespace(n, {
21
+ enum: (t) => pushType(t, [...hierarchy, n.name]),
22
+ scalar: (t) => pushType(t, [...hierarchy, n.name]),
23
+ model: (t) => pushType(t, [...hierarchy, n.name]),
24
+ union: (t) => pushType(t, [...hierarchy, n.name]),
25
+ }, {
26
+ skipSubNamespaces: true,
27
+ });
28
+ n.namespaces.forEach((ns) => traverseNamespace(ns, [...hierarchy, n.name]));
29
+ };
30
+ navigateProgram(program, {
31
+ namespace(n) {
32
+ const nsIndex = options["root-namespaces"].findIndex((ns) => n.name === ns);
33
+ if (nsIndex === -1)
34
+ return;
35
+ // for some reason, navigateProgram visits each namespace multiple times; this prevents that
36
+ delete options["root-namespaces"][nsIndex];
37
+ traverseNamespace(n, []);
38
+ },
39
+ });
40
+ // restore un-mutated version
41
+ options["root-namespaces"] = targetedNamespaces;
42
+ return map;
43
+ };
44
+ //# sourceMappingURL=buildTypeMap.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"buildTypeMap.js","sourceRoot":"","sources":["../../../src/helpers/buildTypeMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,eAAe,EACf,wBAAwB,GAIzB,MAAM,oBAAoB,CAAC;AAS5B;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,OAAgB,EAChB,OAAuB,EACb,EAAE;IACZ,oEAAoE;IACpE,MAAM,kBAAkB,GAAG,eAAe,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACvE,MAAM,GAAG,GAAa,EAAE,CAAC;IAEzB,MAAM,QAAQ,GAAG,CAAC,CAA2B,EAAE,SAAmB,EAAQ,EAAE;QAC1E,IAAI,CAAC,CAAC,CAAC,IAAI;YAAE,OAAO;QACpB,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,CAAC;YACP,UAAU,EAAE,SAAS;YACrB,aAAa,EAAE,SAAS;SACzB,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,CAAY,EAAE,SAAmB,EAAE,EAAE;QAC9D,wBAAwB,CACtB,CAAC,EACD;YACE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAClD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACjD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;SAClD,EACD;YACE,iBAAiB,EAAE,IAAI;SACxB,CACF,CAAC;QACF,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9E,CAAC,CAAC;IAEF,eAAe,CAAC,OAAO,EAAE;QACvB,SAAS,CAAC,CAAC;YACT,MAAM,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAClD,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CACtB,CAAC;YACF,IAAI,OAAO,KAAK,CAAC,CAAC;gBAAE,OAAO;YAC3B,4FAA4F;YAC5F,OAAO,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC;YAE3C,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3B,CAAC;KACF,CAAC,CAAC;IAEH,6BAA6B;IAC7B,OAAO,CAAC,iBAAiB,CAAC,GAAG,kBAAkB,CAAC;IAChD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Diagnostic, EmitContext } from "@typespec/compiler";
2
+ import { EmitterOptions } from "../lib.js";
3
+ export declare const setContext: (c: EmitContext<EmitterOptions>) => void;
4
+ export declare const reportDiagnostic: (diagnostic: Pick<Diagnostic, "code" | "message" | "severity">) => void;
@@ -0,0 +1,15 @@
1
+ import { NoTarget } from "@typespec/compiler";
2
+ let context = null;
3
+ export const setContext = (c) => {
4
+ context = c;
5
+ };
6
+ export const reportDiagnostic = (diagnostic) => {
7
+ if (!context)
8
+ throw new Error("Couldn't report diagnostic: context not set");
9
+ context.program.reportDiagnostic({
10
+ ...diagnostic,
11
+ code: `typespec-emitter-${diagnostic.code}`,
12
+ target: NoTarget,
13
+ });
14
+ };
15
+ //# sourceMappingURL=diagnostics.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../src/helpers/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGvE,IAAI,OAAO,GAAuC,IAAI,CAAC;AAEvD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAA8B,EAAQ,EAAE;IACjE,OAAO,GAAG,CAAC,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,UAA6D,EACvD,EAAE;IACR,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC7E,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAC/B,GAAG,UAAU;QACb,IAAI,EAAE,oBAAoB,UAAU,CAAC,IAAI,EAAE;QAC3C,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,2 @@
1
+ import { TTypeMap } from "./buildTypeMap.js";
2
+ export declare const getImports: (imports: TTypeMap[number]["namespaces"][]) => string[];
@@ -0,0 +1,3 @@
1
+ import { filenameFromNamespaces } from "./namespaces.js";
2
+ export const getImports = (imports) => imports.map((i) => `import * as ${i.join("_")} from './${filenameFromNamespaces(i)}';`);
3
+ //# sourceMappingURL=getImports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getImports.js","sourceRoot":"","sources":["../../../src/helpers/getImports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,OAAyC,EAC/B,EAAE,CACZ,OAAO,CAAC,GAAG,CACT,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAC3E,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Namespace } from "@typespec/compiler";
2
+ /** Traverses *up* a namespace, generating a hierarchy array from itself and its parents. */
3
+ export declare const namespaceListFromNamespace: (n: Namespace | undefined) => string[] | null;
4
+ export declare const filenameFromNamespaces: (ns: string[]) => string;
@@ -0,0 +1,14 @@
1
+ /** Traverses *up* a namespace, generating a hierarchy array from itself and its parents. */
2
+ export const namespaceListFromNamespace = (n) => {
3
+ if (!n)
4
+ return null;
5
+ const ret = [];
6
+ let cur = n;
7
+ while (cur && cur.name) {
8
+ ret.unshift(cur.name);
9
+ cur = cur.namespace;
10
+ }
11
+ return ret;
12
+ };
13
+ export const filenameFromNamespaces = (ns) => `${ns.join(".")}.ts`;
14
+ //# sourceMappingURL=namespaces.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"namespaces.js","sourceRoot":"","sources":["../../../src/helpers/namespaces.ts"],"names":[],"mappings":"AAEA,4FAA4F;AAC5F,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,CAAwB,EACP,EAAE;IACnB,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,GAAG,GAA0B,CAAC,CAAC;IACnC,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACvB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC;IACtB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,EAAY,EAAU,EAAE,CAC7D,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Program } from "@typespec/compiler";
2
+ import { EmitterOptions } from "../lib.js";
3
+ export declare const visibilityHelperFileName = "lifecycleVisibility.ts";
4
+ export declare const emitVisibilityHelperFile: (program: Program, options: EmitterOptions) => Promise<void>;
@@ -0,0 +1,57 @@
1
+ import { emitFile, resolvePath } from "@typespec/compiler";
2
+ const visibilityHelperFile = `
3
+ /* eslint-disable */
4
+
5
+ /*
6
+ This file is auto-generated by typespec-typescript-emitter and
7
+ contains helpers for accessing lifecycle-visibility-modified
8
+ variants of the emitted types.
9
+ */
10
+
11
+ export enum Lifecycle {
12
+ Read, Create, Update, Delete, Query,
13
+ None, All
14
+ }
15
+
16
+ export type VisibilityMap<T> = {
17
+ [K in keyof T]?: {
18
+ vis?: readonly Lifecycle[]
19
+ nested?: VisibilityMap<T[K]>
20
+ }
21
+ }
22
+
23
+ export type FilterLifecycle<
24
+ T,
25
+ M extends VisibilityMap<T>,
26
+ Current extends Lifecycle
27
+ > = {
28
+ [K in keyof T as (
29
+ Current extends Lifecycle.All
30
+ ? K
31
+ : Current extends Lifecycle.None
32
+ ? never
33
+ : K extends keyof M
34
+ ? M[K] extends { vis?: readonly (infer L)[]; }
35
+ ? (undefined extends M[K]['vis']
36
+ ? K
37
+ : (Current extends L ? K : never)
38
+ )
39
+ : K
40
+ : K
41
+ )]: K extends keyof M
42
+ ? M[K] extends {nested?: infer N}
43
+ ? N extends VisibilityMap<T[K]>
44
+ ? FilterLifecycle<T[K], N, Current>
45
+ : T[K]
46
+ : T[K]
47
+ : T[K]
48
+ }
49
+ `;
50
+ export const visibilityHelperFileName = "lifecycleVisibility.ts";
51
+ export const emitVisibilityHelperFile = async (program, options) => {
52
+ await emitFile(program, {
53
+ path: resolvePath(options["out-dir"], visibilityHelperFileName),
54
+ content: visibilityHelperFile,
55
+ });
56
+ };
57
+ //# sourceMappingURL=visibilityHelperFile.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"visibilityHelperFile.js","sourceRoot":"","sources":["../../../src/helpers/visibilityHelperFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAW,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGpE,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+C5B,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,wBAAwB,CAAC;AAEjE,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAC3C,OAAgB,EAChB,OAAuB,EACR,EAAE;IACjB,MAAM,QAAQ,CAAC,OAAO,EAAE;QACtB,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,wBAAwB,CAAC;QAC/D,OAAO,EAAE,oBAAoB;KAC9B,CAAC,CAAC;AACL,CAAC,CAAC"}
package/dist/src/lib.d.ts CHANGED
@@ -1,5 +1,6 @@
1
+ import { EmitContext } from "@typespec/compiler";
1
2
  export interface EmitterOptions {
2
- "root-namespace": string;
3
+ "root-namespaces": string[];
3
4
  "out-dir": string;
4
5
  "enable-types": boolean;
5
6
  "enable-typeguards": boolean;
@@ -8,6 +9,8 @@ export interface EmitterOptions {
8
9
  "string-nominal-enums": boolean;
9
10
  "serializable-date-types": boolean;
10
11
  }
12
+ /** Maps option to its default value and options that must be set to `true` for this one to work */
13
+ export declare const optionDependencies: (context: EmitContext) => { [K in keyof EmitterOptions]: [EmitterOptions[K], (keyof EmitterOptions)[]]; };
11
14
  export declare const $lib: import("@typespec/compiler").TypeSpecLibrary<{
12
15
  [code: string]: import("@typespec/compiler").DiagnosticMessages;
13
16
  }, EmitterOptions, never>;
package/dist/src/lib.js CHANGED
@@ -1,9 +1,9 @@
1
- import { createTypeSpecLibrary } from "@typespec/compiler";
1
+ import { createTypeSpecLibrary, } from "@typespec/compiler";
2
2
  const EmitterOptionsSchema = {
3
3
  type: "object",
4
4
  additionalProperties: false,
5
5
  properties: {
6
- "root-namespace": { type: "string" },
6
+ "root-namespaces": { type: "array", items: { type: "string" } },
7
7
  "out-dir": { type: "string", format: "absolute-path" },
8
8
  "enable-types": { type: "boolean" },
9
9
  "enable-typeguards": { type: "boolean" },
@@ -12,8 +12,19 @@ const EmitterOptionsSchema = {
12
12
  "string-nominal-enums": { type: "boolean" },
13
13
  "serializable-date-types": { type: "boolean" },
14
14
  },
15
- required: ["root-namespace"],
15
+ required: ["root-namespaces"],
16
16
  };
17
+ /** Maps option to its default value and options that must be set to `true` for this one to work */
18
+ export const optionDependencies = (context) => ({
19
+ ["root-namespaces"]: [[], []],
20
+ ["out-dir"]: [context.emitterOutputDir, []],
21
+ ["enable-types"]: [false, []],
22
+ ["enable-routes"]: [false, []],
23
+ ["string-nominal-enums"]: [false, []],
24
+ ["serializable-date-types"]: [false, []],
25
+ ["enable-typeguards"]: [false, ["enable-types"]],
26
+ ["enable-routed-typemap"]: [false, ["enable-types"]],
27
+ });
17
28
  export const $lib = createTypeSpecLibrary({
18
29
  name: "typespec-typescript-emitter",
19
30
  diagnostics: {},
@@ -1 +1 @@
1
- {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAkB,MAAM,oBAAoB,CAAC;AAa3E,MAAM,oBAAoB,GAAmC;IAC3D,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE;QACV,gBAAgB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;QACpC,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE;QACtD,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACnC,mBAAmB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACxC,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACpC,uBAAuB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC5C,sBAAsB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC3C,yBAAyB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;KAC/C;IACD,QAAQ,EAAE,CAAC,gBAAgB,CAAC;CAC7B,CAAC;AAEF,MAAM,CAAC,MAAM,IAAI,GAAG,qBAAqB,CAAC;IACxC,IAAI,EAAE,6BAA6B;IACnC,WAAW,EAAE,EAAE;IACf,OAAO,EAAE;QACP,OAAO,EAAE,oBAAoB;KAC9B;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC"}
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,GAGtB,MAAM,oBAAoB,CAAC;AAa5B,MAAM,oBAAoB,GAAmC;IAC3D,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,UAAU,EAAE;QACV,iBAAiB,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,EAAE;QAC/D,SAAS,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,eAAe,EAAE;QACtD,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACnC,mBAAmB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACxC,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACpC,uBAAuB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC5C,sBAAsB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC3C,yBAAyB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;KAC/C;IACD,QAAQ,EAAE,CAAC,iBAAiB,CAAC;CAC9B,CAAC;AAEF,mGAAmG;AACnG,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAChC,OAAoB,EAGpB,EAAE,CAAC,CAAC;IACJ,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;IAC7B,CAAC,SAAS,CAAC,EAAE,CAAC,OAAO,CAAC,gBAAgB,EAAE,EAAE,CAAC;IAC3C,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;IAC7B,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;IAC9B,CAAC,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;IACrC,CAAC,yBAAyB,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;IAExC,CAAC,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,CAAC;IAChD,CAAC,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,CAAC;CACrD,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,IAAI,GAAG,qBAAqB,CAAC;IACxC,IAAI,EAAE,6BAA6B;IACnC,WAAW,EAAE,EAAE;IACf,OAAO,EAAE;QACP,OAAO,EAAE,oBAAoB;KAC9B;CACF,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,EAAE,gBAAgB,EAAE,gBAAgB,EAAE,GAAG,IAAI,CAAC"}
@@ -0,0 +1,8 @@
1
+ import { EmitContext } from "@typespec/compiler";
2
+ import { EmitterOptions } from "./lib.js";
3
+ /**
4
+ * Parses config-file options including inter-option dependencies, setting defaults,
5
+ * emitting warnings/errors as required,
6
+ * replacing options in context with parsed versions.
7
+ */
8
+ export declare const parseOptions: (context: EmitContext<EmitterOptions>) => void;
@@ -0,0 +1,26 @@
1
+ import { reportDiagnostic } from "./helpers/diagnostics.js";
2
+ import { optionDependencies } from "./lib.js";
3
+ /**
4
+ * Parses config-file options including inter-option dependencies, setting defaults,
5
+ * emitting warnings/errors as required,
6
+ * replacing options in context with parsed versions.
7
+ */
8
+ export const parseOptions = (context) => {
9
+ Object.entries(optionDependencies).forEach(([k, val]) => {
10
+ const key = k;
11
+ const [def, deps] = val;
12
+ if (deps.length === 0) {
13
+ context.options[key] = context.options[key] ?? def;
14
+ }
15
+ else {
16
+ if (context.options[key] && !deps.every((d) => context.options[d])) {
17
+ reportDiagnostic({
18
+ code: `opts-dependency-${key}`,
19
+ severity: "error",
20
+ message: `Option ${key} requires ${deps.join(", ")}`,
21
+ });
22
+ }
23
+ }
24
+ });
25
+ };
26
+ //# sourceMappingURL=parseOptions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parseOptions.js","sourceRoot":"","sources":["../../src/parseOptions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAkB,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9D;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAoC,EAAQ,EAAE;IACzE,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE;QACtD,MAAM,GAAG,GAAyB,CAAQ,CAAC;QAC3C,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAwC,GAAG,CAAC;QAC7D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAa,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,gBAAgB,CAAC;oBACf,IAAI,EAAE,mBAAmB,GAAG,EAAE;oBAC9B,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,UAAU,GAAG,aAAa,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBACrD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
@@ -0,0 +1,32 @@
1
+ import { Type } from "@typespec/compiler";
2
+ import { Resolver, ResolverOptions, ResolverResult } from "./Resolvable_helpers.js";
3
+ export declare abstract class Resolvable<T extends Type> {
4
+ /** Recursively resolves a type. */
5
+ static resolve<R extends Resolver>(r: R, t: Type, opts: ResolverOptions<R>): Promise<ResolverResult<R>>;
6
+ /**
7
+ * To be called from within the resolution logic of a type:
8
+ * Resolves another type for the current type, handling required changes to the resolution options.
9
+ * The passed `out` object is not signifiantly changed, only the `hasVisibility` flag is managed.
10
+ */
11
+ protected resolveNested<R extends typeof this._r>(t: Type, opts: ResolverOptions<R>, out: ResolverResult<R>, nest?: boolean): Promise<ResolverResult<R>>;
12
+ /** Creates the appropriate Resolvable instance for a given type. */
13
+ static for<T extends Type>(r: Resolver, t: T): Promise<Resolvable<T>>;
14
+ constructor(t: T, r: Resolver);
15
+ protected abstract expectedTypeKind: string;
16
+ protected _t: T;
17
+ protected _r: Resolver;
18
+ /** Modifies passed output object in-place. */
19
+ protected abstract type(opts: ResolverOptions<Resolver.Type>, out: ResolverResult<Resolver.Type>): Promise<void>;
20
+ /** Modifies passed output object in-place. */
21
+ protected abstract typeguard(opts: ResolverOptions<Resolver.Typeguard>, out: ResolverResult<Resolver.Typeguard>): Promise<void>;
22
+ /** Resolves the type, modifying an output object in place. */
23
+ resolve(opts: ResolverOptions<Resolver>, out: ResolverResult<Resolver>): Promise<void>;
24
+ protected transformKnownType(opts: ResolverOptions<Resolver>, out: ResolverResult<Resolver>): void;
25
+ /** Returns true if this type or anything it contains or references has visibility modifiers. */
26
+ hasVisibility(opts: ResolverOptions<Resolver>, out: ResolverResult<Resolver>): Promise<boolean>;
27
+ /** Returns true if this type or anything it contains or references has visibility modifiers. */
28
+ protected static hasVisibility(t: Type, opts: ResolverOptions<Resolver>, out: ResolverResult<Resolver>, current: Type): Promise<boolean>;
29
+ /** Checks its stored type to ensure the instance was created on a suitable type. */
30
+ protected validate(): void;
31
+ protected diagnostic(code: string, msg: string, level: "error" | "warning"): void;
32
+ }