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,23 +0,0 @@
1
- /* eslint-disable */
2
-
3
- /*
4
- * This file is automatically generated by typespec-typescript-emitter.
5
- *
6
- * You should not change or manipulate this file, as it will be overwritten.
7
- * Instead, change the underlying spec.
8
- */
9
-
10
- export const routes_test = {
11
- getAll: {
12
- method: "GET",
13
- path: "/test-simple",
14
- getUrl: (): string => `/test-simple`,
15
- auth: [null],
16
- },
17
- add: {
18
- method: "POST",
19
- path: "/test-simple",
20
- getUrl: (): string => `/test-simple`,
21
- auth: [null],
22
- },
23
- } as const;
@@ -1,59 +0,0 @@
1
- /* eslint-disable */
2
-
3
- /*
4
- * This file is automatically generated by typespec-typescript-emitter.
5
- *
6
- * You should not change or manipulate this file, as it will be overwritten.
7
- * Instead, change the underlying spec.
8
- */
9
-
10
- export type UnionA =
11
- | {
12
- a: boolean;
13
- b: boolean;
14
- }
15
- | number;
16
-
17
- export type UnionB =
18
- | {
19
- a: boolean;
20
- b: boolean;
21
- }[]
22
- | number;
23
-
24
- export type UnionVisibility =
25
- | {
26
- a: boolean;
27
- b: boolean;
28
- }
29
- | number;
30
-
31
- export interface UnionModel {
32
- a: number | UnionA;
33
- b: boolean | string;
34
- c: UnionA | UnionVisibility;
35
- }
36
- export function isUnionModel(arg: any): arg is UnionModel {
37
- return (
38
- arg["a"] !== undefined &&
39
- (typeof arg["a"] === "number" ||
40
- (arg["a"]["a"] !== undefined &&
41
- typeof arg["a"]["a"] === "boolean" &&
42
- arg["a"]["b"] !== undefined &&
43
- typeof arg["a"]["b"] === "boolean") ||
44
- typeof arg["a"] === "number") &&
45
- arg["b"] !== undefined &&
46
- (typeof arg["b"] === "boolean" || typeof arg["b"] === "string") &&
47
- arg["c"] !== undefined &&
48
- ((arg["c"]["a"] !== undefined &&
49
- typeof arg["c"]["a"] === "boolean" &&
50
- arg["c"]["b"] !== undefined &&
51
- typeof arg["c"]["b"] === "boolean") ||
52
- typeof arg["c"] === "number" ||
53
- (arg["c"]["a"] !== undefined &&
54
- typeof arg["c"]["a"] === "boolean" &&
55
- arg["c"]["b"] !== undefined &&
56
- typeof arg["c"]["b"] === "boolean") ||
57
- typeof arg["c"] === "number")
58
- );
59
- }
@@ -1,38 +0,0 @@
1
- import "@typespec/http";
2
- using TypeSpec.Http;
3
-
4
- // https://github.com/crowbait/typespec-typescript-emitter/issues/7
5
-
6
- @route("/test-simple")
7
- namespace test {
8
- union UnionA {
9
- variantName1: {a: true, b: false},
10
- variantName2: int32,
11
- }
12
-
13
- union UnionB {
14
- variantName1: {a: true, b: false}[],
15
- variantName2: int32,
16
- }
17
-
18
- union UnionVisibility {
19
- variantName1: {
20
- @visibility(Lifecycle.Create)
21
- a: true,
22
- b: false
23
- },
24
- variantName2: int32,
25
- }
26
-
27
- model UnionModel {
28
- a: int16 | UnionA,
29
- b: boolean | string,
30
- c: UnionA | UnionVisibility
31
- }
32
-
33
- @get
34
- op getAll(): {@body body: UnionA[]} | {@statusCode status: 418, @body body: "Me teapot"};
35
-
36
- @post
37
- op add(@body body: UnionVisibility): {@body body: UnionModel};
38
- }
@@ -1,81 +0,0 @@
1
- /* eslint-disable */
2
-
3
- /*
4
- * This file is automatically generated by typespec-typescript-emitter.
5
- *
6
- * You should not change or manipulate this file, as it will be overwritten.
7
- * Instead, change the underlying spec.
8
- */
9
-
10
- export type types_test = {
11
- ["/test-simple/visibility"]: {
12
- ["GET"]: {
13
- request: null;
14
- response: {
15
- status: 200;
16
- body: {
17
- name: string;
18
- display: string;
19
- always: boolean;
20
- readCreateModel: {
21
- always: boolean;
22
- };
23
- }[];
24
- };
25
- };
26
- ["POST"]: {
27
- request: {
28
- name: string;
29
- always: boolean;
30
- readCreateModel: {
31
- always: boolean;
32
- create: string;
33
- };
34
- };
35
- response: {
36
- status: 201;
37
- body: {
38
- name: string;
39
- display: string;
40
- always: boolean;
41
- readCreateModel: {
42
- always: boolean;
43
- };
44
- };
45
- };
46
- };
47
- };
48
- ["/test-simple/visibility/{id}"]: {
49
- ["GET"]: {
50
- request: null;
51
- response: {
52
- status: 200;
53
- body: {
54
- name: string;
55
- display: string;
56
- always: boolean;
57
- readCreateModel: {
58
- always: boolean;
59
- };
60
- };
61
- };
62
- };
63
- ["PATCH"]: {
64
- request: {
65
- always: boolean;
66
- updated: number;
67
- };
68
- response: {
69
- status: 201;
70
- body: {
71
- name: string;
72
- display: string;
73
- always: boolean;
74
- readCreateModel: {
75
- always: boolean;
76
- };
77
- };
78
- };
79
- };
80
- };
81
- };
@@ -1,38 +0,0 @@
1
- /* eslint-disable */
2
-
3
- /*
4
- * This file is automatically generated by typespec-typescript-emitter.
5
- *
6
- * You should not change or manipulate this file, as it will be overwritten.
7
- * Instead, change the underlying spec.
8
- */
9
-
10
- export const routes_test = {
11
- /** List Tests */
12
- list: {
13
- method: "GET",
14
- path: "/test-simple/visibility",
15
- getUrl: (): string => `/test-simple/visibility`,
16
- auth: [null],
17
- },
18
- read: {
19
- method: "GET",
20
- path: "/test-simple/visibility/{id}",
21
- getUrl: (params: { id: string }): string =>
22
- `/test-simple/visibility/${params.id}`,
23
- auth: [null],
24
- },
25
- create: {
26
- method: "POST",
27
- path: "/test-simple/visibility",
28
- getUrl: (): string => `/test-simple/visibility`,
29
- auth: [null],
30
- },
31
- update: {
32
- method: "PATCH",
33
- path: "/test-simple/visibility/{id}",
34
- getUrl: (params: { id: string }): string =>
35
- `/test-simple/visibility/${params.id}`,
36
- auth: [null],
37
- },
38
- } as const;
@@ -1,36 +0,0 @@
1
- /* eslint-disable */
2
-
3
- /*
4
- * This file is automatically generated by typespec-typescript-emitter.
5
- *
6
- * You should not change or manipulate this file, as it will be overwritten.
7
- * Instead, change the underlying spec.
8
- */
9
-
10
- export interface TestVisibilityA {
11
- name: string;
12
- display: string;
13
- always: boolean;
14
- updated: number;
15
- readCreateModel: {
16
- always: boolean;
17
- create: string;
18
- };
19
- }
20
- export function isTestVisibilityA(arg: any): arg is TestVisibilityA {
21
- return (
22
- arg["name"] !== undefined &&
23
- typeof arg["name"] === "string" &&
24
- arg["display"] !== undefined &&
25
- typeof arg["display"] === "string" &&
26
- arg["always"] !== undefined &&
27
- typeof arg["always"] === "boolean" &&
28
- arg["updated"] !== undefined &&
29
- typeof arg["updated"] === "number" &&
30
- arg["readCreateModel"] !== undefined &&
31
- arg["readCreateModel"]["always"] !== undefined &&
32
- typeof arg["readCreateModel"]["always"] === "boolean" &&
33
- arg["readCreateModel"]["create"] !== undefined &&
34
- typeof arg["readCreateModel"]["create"] === "string"
35
- );
36
- }
@@ -1,49 +0,0 @@
1
- import "@typespec/http";
2
- using TypeSpec.Http;
3
-
4
- @route("/test-simple")
5
- namespace test {
6
- model TestVisibilityA {
7
- @visibility(Lifecycle.Create, Lifecycle.Read)
8
- name: string;
9
- @visibility(Lifecycle.Read)
10
- display: string;
11
- always: boolean;
12
- @visibility(Lifecycle.Update)
13
- updated: int32;
14
- @visibility(Lifecycle.Read, Lifecycle.Create)
15
- readCreateModel: {
16
- always: true;
17
- @visibility(Lifecycle.Create)
18
- create: string;
19
- }
20
- }
21
-
22
- @route("/visibility")
23
- @tag("Test-Visibility")
24
- interface Tests {
25
- @doc("List Tests")
26
- @get op list(): {
27
- @statusCode statusCode: 200;
28
- @body response: TestVisibilityA[]; // RESPONSE body: [{name: string, display: string, always: boolean}]
29
- };
30
-
31
- @route("/{id}")
32
- @get op read(@path id: int32): {
33
- @statusCode statusCode: 200;
34
- @header "content-type": "application/json";
35
- @body response: TestVisibilityA; // RESPONSE body: {name: string, display: string, always: boolean}
36
- };
37
-
38
- @post op create(@body test: TestVisibilityA): { // POST body: {name: string, always: boolean}. -> emit type TestCreate
39
- @statusCode statusCode: 201;
40
- @body response: TestVisibilityA; // RESPONSE body: {name: string, display: string, always: boolean}
41
- };
42
-
43
- @route("/{id}")
44
- @patch op update(@path id: int32, @body test: TestVisibilityA): { // PATCH body: {always: boolean} -> emit type TestUpdate
45
- @statusCode statusCode: 201;
46
- @body response: TestVisibilityA; // RESPONSE body: {name: string, display: string, always: boolean}
47
- };
48
- }
49
- }