typespec-typescript-emitter 2.2.0 → 2.3.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.
package/CHANGELOG.md CHANGED
@@ -1,46 +1,45 @@
1
- # [2.2.0](https://github.com/crowbait/typespec-typescript-emitter/compare/v2.1.0...v2.2.0) (2026-01-14)
1
+ ## [2.3.1](https://github.com/crowbait/typespec-typescript-emitter/compare/v2.3.0...v2.3.1) (2026-01-15)
2
2
 
3
3
 
4
- ### Features
4
+ ### Bug Fixes
5
5
 
6
- * option to enabled/disable .ts file extensions on import statements ([c6a423e](https://github.com/crowbait/typespec-typescript-emitter/commit/c6a423e73139a35b36f8c413431f408a09dd9d89))
6
+ * per-operation jsdoc strings on methods in routed typemap ([20bd0b1](https://github.com/crowbait/typespec-typescript-emitter/commit/20bd0b186259e873aa67a06db1b915576c0ba2d0))
7
7
 
8
8
 
9
9
 
10
- # [2.1.0](https://github.com/crowbait/typespec-typescript-emitter/compare/v2.0.1...v2.1.0) (2025-12-18)
10
+ # [2.3.0](https://github.com/crowbait/typespec-typescript-emitter/compare/v2.2.0...v2.3.0) (2026-01-15)
11
+
12
+
13
+ ### Bug Fixes
14
+
15
+ * proper comma-separation of props in routed typemap ([0e27831](https://github.com/crowbait/typespec-typescript-emitter/commit/0e278310dbb705b59b40fa933449e058d83950fb))
11
16
 
12
17
 
13
18
  ### Features
14
19
 
15
- * overridable types + typeguards, closes [#15](https://github.com/crowbait/typespec-typescript-emitter/issues/15) ([71a6fef](https://github.com/crowbait/typespec-typescript-emitter/commit/71a6fef82569a4d378e1ba3c4e9dd94a2e6ccc80))
20
+ * option to emit path params types in routed typemap ([38b4ddf](https://github.com/crowbait/typespec-typescript-emitter/commit/38b4ddf8a2ff9d1a356b4bf76c9c7d3abe4fac1b))
16
21
 
17
22
 
18
23
 
19
- ## [2.0.1](https://github.com/crowbait/typespec-typescript-emitter/compare/v1.3.0...v2.0.1) (2025-11-30)
24
+ # [2.2.0](https://github.com/crowbait/typespec-typescript-emitter/compare/v2.1.0...v2.2.0) (2026-01-14)
20
25
 
21
26
 
27
+ ### Features
22
28
 
23
- # [1.3.0](https://github.com/crowbait/typespec-typescript-emitter/compare/v2.0.0...v1.3.0) (2025-11-30)
29
+ * option to enabled/disable .ts file extensions on import statements ([c6a423e](https://github.com/crowbait/typespec-typescript-emitter/commit/c6a423e73139a35b36f8c413431f408a09dd9d89))
24
30
 
25
31
 
26
- ### Bug Fixes
27
32
 
28
- * `string-nominal-enums` option now works for type emission as well, related to [#11](https://github.com/crowbait/typespec-typescript-emitter/issues/11) ([046246a](https://github.com/crowbait/typespec-typescript-emitter/commit/046246a4daaf5c25e8c7e8594db431efde4b67f8))
29
- * false warning on resolving scalars, related to [#10](https://github.com/crowbait/typespec-typescript-emitter/issues/10) ([95f9ec2](https://github.com/crowbait/typespec-typescript-emitter/commit/95f9ec2b1b214ad5997bb1c25829dc7969975f33))
30
- * handle prev. unhandled types / typeguards (enum, enum-member, template-parameter) ([9baefd8](https://github.com/crowbait/typespec-typescript-emitter/commit/9baefd86c1532e66971a51084a330e5e94ac82f7))
31
- * lifecycle-related imports, type parameters and typeguard signatures now omitted if type does not have visibility , related to [#14](https://github.com/crowbait/typespec-typescript-emitter/issues/14) ([32069c0](https://github.com/crowbait/typespec-typescript-emitter/commit/32069c004011365b1d82132d9a08ff965dc693e2))
32
- * nominal-enums option should not use member names as values if an actual value exists ([6d9f870](https://github.com/crowbait/typespec-typescript-emitter/commit/6d9f870ac01680883719b6d4be4c081f4049e16c))
33
- * special handling for intrinsic `void`, `unknown`, `never`, closes [#13](https://github.com/crowbait/typespec-typescript-emitter/issues/13) ([71595f9](https://github.com/crowbait/typespec-typescript-emitter/commit/71595f9794cb9508c8cb46694189e5e82fed9610))
34
- * support "unknown" in typeguards ([4ea3054](https://github.com/crowbait/typespec-typescript-emitter/commit/4ea3054fa2536a5bdd3f9745a9d32fb52ff56a68))
35
- * type order in emitted files now: enum -> model (type) -> union (type) , related to [#14](https://github.com/crowbait/typespec-typescript-emitter/issues/14) ([8eb6833](https://github.com/crowbait/typespec-typescript-emitter/commit/8eb6833b7a67458aa8777280445263a6fc41f8ee))
33
+ # [2.1.0](https://github.com/crowbait/typespec-typescript-emitter/compare/v2.0.1...v2.1.0) (2025-12-18)
36
34
 
37
35
 
38
36
  ### Features
39
37
 
40
- * (re-)integrate routes emitter ([9a0866a](https://github.com/crowbait/typespec-typescript-emitter/commit/9a0866aa5620b2e8037c84b949ff58699372296c))
41
- * declared scalars (`scalar X extends string`) are now resolved and emitted as well ([224ac68](https://github.com/crowbait/typespec-typescript-emitter/commit/224ac68e66a3984facc45fb5fce92f5a01472a89))
42
- * support `extends` on models ([dfb8f8b](https://github.com/crowbait/typespec-typescript-emitter/commit/dfb8f8b34752b851f4e5f12ce83a3e3120e0209a))
43
- * visibility system ([adb28ab](https://github.com/crowbait/typespec-typescript-emitter/commit/adb28abdeb87ae99622302126633381a477c8247)), closes [#12](https://github.com/crowbait/typespec-typescript-emitter/issues/12) [#7](https://github.com/crowbait/typespec-typescript-emitter/issues/7)
38
+ * overridable types + typeguards, closes [#15](https://github.com/crowbait/typespec-typescript-emitter/issues/15) ([71a6fef](https://github.com/crowbait/typespec-typescript-emitter/commit/71a6fef82569a4d378e1ba3c4e9dd94a2e6ccc80))
39
+
40
+
41
+
42
+ ## [2.0.1](https://github.com/crowbait/typespec-typescript-emitter/compare/v1.3.0...v2.0.1) (2025-11-30)
44
43
 
45
44
 
46
45
 
package/README.md CHANGED
@@ -52,6 +52,8 @@ options:
52
52
  enable-typeguards: false
53
53
  enable-routes: false
54
54
  enable-routed-typemap: false
55
+ enable-routed-path-params: false
56
+ import-file-extensions: false
55
57
  string-nominal-enums: false
56
58
  serializable-date-types: false
57
59
  ```
@@ -64,11 +66,12 @@ The following options are available:
64
66
  - `enable-typeguards` (default: false, **requires** `enable-types`): enables output of [typeguards](#typeguards).
65
67
  - `enable-routes` (default: false): enables output of the [HTTP-routes object](#emitter-routes).
66
68
  - `enable-routed-typemap` (default: false, **requires** `enable-types`): enables output of an [indexable type](#emitter-routed-typemap), mapping paths and HTTP verbs to request and response bodies.
69
+ - `enable-routed-path-params` (default: false, **requires** `enable-routed-typemap`): includes a `pathParams` object in the routed typemap for each operation.
70
+ - `import-file-extensions` (default: false): if true, import statements get the `.ts` extension, otherwise, the file extension is omitted for import statements.
67
71
  - `string-nominal-enums` (default: false): outputs member names as strings instead of index values for enum members declared without explicit values.
68
72
  - `serializable-date-types` (default: false): outputs serializable types for typespec's dates types that match OpenApi spec. Types like `offsetDateTime`, `plainDate` and `utcDateTime` will be emitted as `string` and `unixTimestamp32` as `number`. If disabled, all these types resolve to `Date`.
69
73
  - `type-mappings` (default: undefined): see [Overriding Types \& Typeguards](#overriding-types--typeguards)
70
74
  - `typeguard-mappings` (default: undefined): see [Overriding Types \& Typeguards](#overriding-types--typeguards)
71
- - `import-file-extensions` (default: false): if true, import statements get the `.ts` extension, otherwise, the file extension is omitted for import statements.
72
75
 
73
76
  ## Emitter: Types
74
77
 
@@ -59,11 +59,12 @@ export const emitRoutedTypemap = async (program, options, typemap) => {
59
59
  let pathret = ` ['${path[0]}']: {\n`;
60
60
  pathret += Object.entries(path[1])
61
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;
62
+ const verbret = [];
63
+ if (options["enable-routed-path-params"])
64
+ verbret.push(` pathParams: ${verb[1].parameters.content}`);
65
+ verbret.push(` request: ${verb[1].request.content}`);
66
+ verbret.push(` response: ${verb[1].response.content.map((res) => `{status: ${res.status}, body: ${res.body}}`).join(" | ")}`);
67
+ return `${verb[1].doc ? ` /** ${verb[1].doc} */\n` : ""} ['${verb[0]}']: {\n${verbret.join(",\n")}\n }`;
67
68
  })
68
69
  .join(",\n");
69
70
  pathret += "\n }";
@@ -1 +1 @@
1
- {"version":3,"file":"emit_routedTypemap.js","sourceRoot":"","sources":["../../src/emit_routedTypemap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"emit_routedTypemap.js","sourceRoot":"","sources":["../../src/emit_routedTypemap.ts"],"names":[],"mappings":"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"}
package/dist/src/lib.d.ts CHANGED
@@ -6,11 +6,12 @@ export interface EmitterOptions {
6
6
  "enable-typeguards": boolean;
7
7
  "enable-routes": boolean;
8
8
  "enable-routed-typemap": boolean;
9
+ "enable-routed-path-params": boolean;
10
+ "import-file-extensions": boolean;
9
11
  "string-nominal-enums": boolean;
10
12
  "serializable-date-types": boolean;
11
13
  "type-mappings": Record<string, string>;
12
14
  "typeguard-mappings": Record<string, string>;
13
- "import-file-extensions": boolean;
14
15
  }
15
16
  /** Maps option to its default value and options that must be set to `true` for this one to work */
16
17
  export declare const optionDependencies: (context: EmitContext) => { [K in keyof EmitterOptions]: [EmitterOptions[K], (keyof EmitterOptions)[]]; };
package/dist/src/lib.js CHANGED
@@ -8,6 +8,8 @@ const EmitterOptionsSchema = {
8
8
  "enable-typeguards": { type: "boolean" },
9
9
  "enable-routes": { type: "boolean" },
10
10
  "enable-routed-typemap": { type: "boolean" },
11
+ "enable-routed-path-params": { type: "boolean" },
12
+ "import-file-extensions": { type: "boolean" },
11
13
  "string-nominal-enums": { type: "boolean" },
12
14
  "serializable-date-types": { type: "boolean" },
13
15
  "type-mappings": {
@@ -20,7 +22,6 @@ const EmitterOptionsSchema = {
20
22
  required: [],
21
23
  additionalProperties: { type: "string" },
22
24
  },
23
- "import-file-extensions": { type: "boolean" },
24
25
  },
25
26
  required: ["root-namespaces"],
26
27
  additionalProperties: false,
@@ -30,14 +31,15 @@ export const optionDependencies = (context) => ({
30
31
  ["root-namespaces"]: [[], []],
31
32
  ["out-dir"]: [context.emitterOutputDir, []],
32
33
  ["enable-types"]: [false, []],
33
- ["enable-routes"]: [false, []],
34
- ["string-nominal-enums"]: [false, []],
35
- ["serializable-date-types"]: [false, []],
36
34
  ["enable-typeguards"]: [false, ["enable-types"]],
35
+ ["enable-routes"]: [false, []],
37
36
  ["enable-routed-typemap"]: [false, ["enable-types"]],
37
+ ["enable-routed-path-params"]: [false, ["enable-routed-typemap"]],
38
+ ["import-file-extensions"]: [false, []],
39
+ ["serializable-date-types"]: [false, []],
40
+ ["string-nominal-enums"]: [false, []],
38
41
  ["type-mappings"]: [{}, []],
39
42
  ["typeguard-mappings"]: [{}, []],
40
- ["import-file-extensions"]: [false, []],
41
43
  });
42
44
  export const $lib = createTypeSpecLibrary({
43
45
  name: "typespec-typescript-emitter",
@@ -1 +1 @@
1
- {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,GAGtB,MAAM,oBAAoB,CAAC;AAgB5B,MAAM,oBAAoB,GAAmC;IAC3D,IAAI,EAAE,QAAQ;IACd,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;QAC9C,eAAe,EAAE;YACf,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,EAAE;YACZ,oBAAoB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SACzC;QACD,oBAAoB,EAAE;YACpB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,EAAE;YACZ,oBAAoB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SACzC;QACD,wBAAwB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;KAC9C;IACD,QAAQ,EAAE,CAAC,iBAAiB,CAAC;IAC7B,oBAAoB,EAAE,KAAK;CAC5B,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;IAEpD,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;IAC3B,CAAC,oBAAoB,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;IAEhC,CAAC,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;CACxC,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"}
1
+ {"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,GAGtB,MAAM,oBAAoB,CAAC;AAqB5B,MAAM,oBAAoB,GAAmC;IAC3D,IAAI,EAAE,QAAQ;IACd,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;QAEtD,cAAc,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QACnC,mBAAmB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAExC,eAAe,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAEpC,uBAAuB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC5C,2BAA2B,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAEhD,wBAAwB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC7C,sBAAsB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC3C,yBAAyB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC9C,eAAe,EAAE;YACf,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,EAAE;YACZ,oBAAoB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SACzC;QACD,oBAAoB,EAAE;YACpB,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,EAAE;YACZ,oBAAoB,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE;SACzC;KACF;IACD,QAAQ,EAAE,CAAC,iBAAiB,CAAC;IAC7B,oBAAoB,EAAE,KAAK;CAC5B,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;IAE3C,CAAC,cAAc,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;IAC7B,CAAC,mBAAmB,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,CAAC;IAEhD,CAAC,eAAe,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;IAE9B,CAAC,uBAAuB,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,cAAc,CAAC,CAAC;IACpD,CAAC,2BAA2B,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC,uBAAuB,CAAC,CAAC;IAEjE,CAAC,wBAAwB,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;IACvC,CAAC,yBAAyB,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;IACxC,CAAC,sBAAsB,CAAC,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC;IACrC,CAAC,eAAe,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;IAC3B,CAAC,oBAAoB,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC;CACjC,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"}
@@ -3,6 +3,11 @@ import { TTypeMap } from "../helpers/buildTypeMap.js";
3
3
  import { EmitterOptions } from "../lib.js";
4
4
  /** Maps a route path to its typemap definition and required imports */
5
5
  export type TOperationTypemap = {
6
+ doc: string | undefined;
7
+ parameters: {
8
+ content: string | null;
9
+ hasVisibility: boolean;
10
+ };
6
11
  request: {
7
12
  content: string;
8
13
  hasVisibility: boolean;
@@ -1,15 +1,48 @@
1
+ import { getDoc } from "@typespec/compiler";
1
2
  import { getHttpOperation } from "@typespec/http";
3
+ import { AppendableString } from "../helpers/appendableString.js";
2
4
  import { Resolvable } from "./Resolvable.js";
3
5
  import { Resolver } from "./Resolvable_helpers.js";
4
6
  export const resolveOperationTypemap = async (program, options, typemap, op) => {
5
7
  const httpOp = getHttpOperation(program, op)[0];
6
8
  const ret = {
7
9
  types: {
10
+ doc: getDoc(program, op),
11
+ parameters: { content: "null", hasVisibility: false },
8
12
  request: { content: "null", hasVisibility: false },
9
13
  response: { content: [] },
10
14
  },
11
15
  imports: [],
12
16
  };
17
+ // path parameters
18
+ const pathParams = httpOp.parameters.parameters.filter((p) => p.type === "path");
19
+ if (options["enable-routed-path-params"] && pathParams.length) {
20
+ console.log(httpOp.path, pathParams.map((p) => [p.name, p.param, p.param.type, p.param.type.kind]));
21
+ const paramsString = new AppendableString("{");
22
+ if (pathParams.length > 1)
23
+ paramsString.append("\n");
24
+ let i = 1;
25
+ for (const param of pathParams) {
26
+ const resolved = await Resolvable.resolve(Resolver.Type, param.param.type, {
27
+ program,
28
+ options,
29
+ emitDocs: false,
30
+ nestlevel: 4,
31
+ rootType: null,
32
+ typemap,
33
+ rootTypeReady: true,
34
+ ancestryPath: [],
35
+ });
36
+ if (resolved.hasVisibility)
37
+ ret.types.parameters.hasVisibility = true;
38
+ ret.imports.push(...resolved.imports);
39
+ paramsString.addLine(`${param.name}: ${replaceLifecycle(resolved.resolved.value, httpOp.verb.toUpperCase(), resolved.hasVisibility)}${i === pathParams.length ? "" : ","}`, pathParams.length > 1 ? 4 : 0, pathParams.length > 1 ? "line-end" : "continued");
40
+ i++;
41
+ }
42
+ paramsString.addLine("}", pathParams.length > 1 ? 3 : 0, "continued");
43
+ ret.types.parameters.content = paramsString.value;
44
+ console.log(ret.types.parameters);
45
+ }
13
46
  // request
14
47
  if (httpOp.parameters.body) {
15
48
  const resolved = await Resolvable.resolve(Resolver.Type, httpOp.parameters.body.type, {
@@ -1 +1 @@
1
- {"version":3,"file":"operationTypemap.js","sourceRoot":"","sources":["../../../src/resolve/operationTypemap.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"operationTypemap.js","sourceRoot":"","sources":["../../../src/resolve/operationTypemap.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "typespec-typescript-emitter",
3
- "version": "2.2.0",
3
+ "version": "2.3.1",
4
4
  "description": "A TypeSpec library providing an emitter that generates TypeScript types and a structured routes object for robust importing",
5
5
  "homepage": "https://github.com/crowbait/typespec-typescript-emitter#readme",
6
6
  "repository": "https://github.com/crowbait/typespec-typescript-emitter",
@@ -107,11 +107,14 @@ export const emitRoutedTypemap = async (
107
107
  let pathret = ` ['${path[0]}']: {\n`;
108
108
  pathret += Object.entries(path[1])
109
109
  .map((verb) => {
110
- let verbret = ` ['${verb[0]}']: {\n`;
111
- verbret += ` request: ${verb[1].request.content}\n`;
112
- verbret += ` response: ${verb[1].response.content.map((res) => `{status: ${res.status}, body: ${res.body}}`).join(" | ")}\n`;
113
- verbret += " }";
114
- return verbret;
110
+ const verbret: string[] = [];
111
+ if (options["enable-routed-path-params"])
112
+ verbret.push(` pathParams: ${verb[1].parameters.content}`);
113
+ verbret.push(` request: ${verb[1].request.content}`);
114
+ verbret.push(
115
+ ` response: ${verb[1].response.content.map((res) => `{status: ${res.status}, body: ${res.body}}`).join(" | ")}`,
116
+ );
117
+ return `${verb[1].doc ? ` /** ${verb[1].doc} */\n` : ""} ['${verb[0]}']: {\n${verbret.join(",\n")}\n }`;
115
118
  })
116
119
  .join(",\n");
117
120
  pathret += "\n }";
package/src/lib.ts CHANGED
@@ -7,15 +7,20 @@ import {
7
7
  export interface EmitterOptions {
8
8
  "root-namespaces": string[];
9
9
  "out-dir": string;
10
+
10
11
  "enable-types": boolean;
11
12
  "enable-typeguards": boolean;
13
+
12
14
  "enable-routes": boolean;
15
+
13
16
  "enable-routed-typemap": boolean;
17
+ "enable-routed-path-params": boolean;
18
+
19
+ "import-file-extensions": boolean;
14
20
  "string-nominal-enums": boolean;
15
21
  "serializable-date-types": boolean;
16
22
  "type-mappings": Record<string, string>;
17
23
  "typeguard-mappings": Record<string, string>;
18
- "import-file-extensions": boolean;
19
24
  }
20
25
 
21
26
  const EmitterOptionsSchema: JSONSchemaType<EmitterOptions> = {
@@ -23,10 +28,16 @@ const EmitterOptionsSchema: JSONSchemaType<EmitterOptions> = {
23
28
  properties: {
24
29
  "root-namespaces": { type: "array", items: { type: "string" } },
25
30
  "out-dir": { type: "string", format: "absolute-path" },
31
+
26
32
  "enable-types": { type: "boolean" },
27
33
  "enable-typeguards": { type: "boolean" },
34
+
28
35
  "enable-routes": { type: "boolean" },
36
+
29
37
  "enable-routed-typemap": { type: "boolean" },
38
+ "enable-routed-path-params": { type: "boolean" },
39
+
40
+ "import-file-extensions": { type: "boolean" },
30
41
  "string-nominal-enums": { type: "boolean" },
31
42
  "serializable-date-types": { type: "boolean" },
32
43
  "type-mappings": {
@@ -39,7 +50,6 @@ const EmitterOptionsSchema: JSONSchemaType<EmitterOptions> = {
39
50
  required: [],
40
51
  additionalProperties: { type: "string" },
41
52
  },
42
- "import-file-extensions": { type: "boolean" },
43
53
  },
44
54
  required: ["root-namespaces"],
45
55
  additionalProperties: false,
@@ -53,18 +63,20 @@ export const optionDependencies = (
53
63
  } => ({
54
64
  ["root-namespaces"]: [[], []],
55
65
  ["out-dir"]: [context.emitterOutputDir, []],
66
+
56
67
  ["enable-types"]: [false, []],
68
+ ["enable-typeguards"]: [false, ["enable-types"]],
69
+
57
70
  ["enable-routes"]: [false, []],
58
- ["string-nominal-enums"]: [false, []],
59
- ["serializable-date-types"]: [false, []],
60
71
 
61
- ["enable-typeguards"]: [false, ["enable-types"]],
62
72
  ["enable-routed-typemap"]: [false, ["enable-types"]],
73
+ ["enable-routed-path-params"]: [false, ["enable-routed-typemap"]],
63
74
 
75
+ ["import-file-extensions"]: [false, []],
76
+ ["serializable-date-types"]: [false, []],
77
+ ["string-nominal-enums"]: [false, []],
64
78
  ["type-mappings"]: [{}, []],
65
79
  ["typeguard-mappings"]: [{}, []],
66
-
67
- ["import-file-extensions"]: [false, []],
68
80
  });
69
81
 
70
82
  export const $lib = createTypeSpecLibrary({
@@ -1,5 +1,6 @@
1
- import { Operation, Program, Type } from "@typespec/compiler";
1
+ import { getDoc, Operation, Program, Type } from "@typespec/compiler";
2
2
  import { getHttpOperation } from "@typespec/http";
3
+ import { AppendableString } from "../helpers/appendableString.js";
3
4
  import { TTypeMap } from "../helpers/buildTypeMap.js";
4
5
  import { EmitterOptions } from "../lib.js";
5
6
  import { Resolvable } from "./Resolvable.js";
@@ -7,7 +8,9 @@ import { Resolver } from "./Resolvable_helpers.js";
7
8
 
8
9
  /** Maps a route path to its typemap definition and required imports */
9
10
  export type TOperationTypemap = {
10
- // "string" in these does not refer to the type "string"; it's the typescript code *as* string.
11
+ doc: string | undefined;
12
+ // "string" in these does not simply refer to the type "string"; it's the typescript code *as* string.
13
+ parameters: { content: string | null; hasVisibility: boolean };
11
14
  request: { content: string; hasVisibility: boolean };
12
15
  response: {
13
16
  content: Array<{
@@ -30,12 +33,59 @@ export const resolveOperationTypemap = async (
30
33
  const httpOp = getHttpOperation(program, op)[0];
31
34
  const ret: Awaited<ReturnType<typeof resolveOperationTypemap>> = {
32
35
  types: {
36
+ doc: getDoc(program, op),
37
+ parameters: { content: "null", hasVisibility: false },
33
38
  request: { content: "null", hasVisibility: false },
34
39
  response: { content: [] },
35
40
  },
36
41
  imports: [],
37
42
  };
38
43
 
44
+ // path parameters
45
+ const pathParams = httpOp.parameters.parameters.filter(
46
+ (p) => p.type === "path",
47
+ );
48
+ if (options["enable-routed-path-params"] && pathParams.length) {
49
+ console.log(
50
+ httpOp.path,
51
+ pathParams.map((p) => [p.name, p.param, p.param.type, p.param.type.kind]),
52
+ );
53
+ const paramsString = new AppendableString("{");
54
+ if (pathParams.length > 1) paramsString.append("\n");
55
+ let i = 1;
56
+ for (const param of pathParams) {
57
+ const resolved = await Resolvable.resolve(
58
+ Resolver.Type,
59
+ param.param.type,
60
+ {
61
+ program,
62
+ options,
63
+ emitDocs: false,
64
+ nestlevel: 4,
65
+ rootType: null,
66
+ typemap,
67
+ rootTypeReady: true,
68
+ ancestryPath: [],
69
+ },
70
+ );
71
+ if (resolved.hasVisibility) ret.types.parameters.hasVisibility = true;
72
+ ret.imports.push(...resolved.imports);
73
+ paramsString.addLine(
74
+ `${param.name}: ${replaceLifecycle(
75
+ resolved.resolved.value,
76
+ httpOp.verb.toUpperCase(),
77
+ resolved.hasVisibility,
78
+ )}${i === pathParams.length ? "" : ","}`,
79
+ pathParams.length > 1 ? 4 : 0,
80
+ pathParams.length > 1 ? "line-end" : "continued",
81
+ );
82
+ i++;
83
+ }
84
+ paramsString.addLine("}", pathParams.length > 1 ? 3 : 0, "continued");
85
+ ret.types.parameters.content = paramsString.value;
86
+ console.log(ret.types.parameters);
87
+ }
88
+
39
89
  // request
40
90
  if (httpOp.parameters.body) {
41
91
  const resolved = await Resolvable.resolve(
@@ -13,6 +13,7 @@ export const defaultConfig: Omit<EmitterOptions, "out-dir"> = {
13
13
  "enable-typeguards": false,
14
14
  "enable-routes": false,
15
15
  "enable-routed-typemap": false,
16
+ "enable-routed-path-params": false,
16
17
  "string-nominal-enums": true,
17
18
  "serializable-date-types": true,
18
19
  "type-mappings": {},
@@ -14,12 +14,14 @@ import * as test_inner from './test.inner.ts';
14
14
 
15
15
  export type types_test = {
16
16
  ['/']: {
17
+ /** Retrieves an instance of the ressource */
17
18
  ['GET']: {
18
- request: null
19
+ request: null,
19
20
  response: {status: 200, body: test.Resource}
20
21
  },
22
+ /** Creates a resource */
21
23
  ['PUT']: {
22
- request: test.Resource | test_inner.InnerModel
24
+ request: test.Resource | test_inner.InnerModel,
23
25
  response: {status: 200, body: {
24
26
  statusCode: 200
25
27
  }}
@@ -27,7 +29,7 @@ export type types_test = {
27
29
  },
28
30
  ['/inner']: {
29
31
  ['DELETE']: {
30
- request: test_inner.InnerModel | test_inner.InnerModel2
32
+ request: test_inner.InnerModel | test_inner.InnerModel2,
31
33
  response: {status: 200, body: {
32
34
  statusCode: 200
33
35
  }} | {status: 401, body: {
@@ -15,12 +15,14 @@ import {Lifecycle, FilterLifecycle} from './lifecycleVisibility.ts';
15
15
 
16
16
  export type types_test<V extends Lifecycle = Lifecycle.All> = {
17
17
  ['/']: {
18
+ /** Retrieves an instance of the ressource */
18
19
  ['GET']: {
19
- request: null
20
+ request: null,
20
21
  response: {status: 200, body: test.Resource<V extends Lifecycle.All ? (Lifecycle.Read) : V>}
21
22
  },
23
+ /** Creates a resource */
22
24
  ['PUT']: {
23
- request: test.Resource<V extends Lifecycle.All ? (Lifecycle.Create | Lifecycle.Update) : V> | test_inner.InnerModel<V extends Lifecycle.All ? (Lifecycle.Create | Lifecycle.Update) : V>
25
+ request: test.Resource<V extends Lifecycle.All ? (Lifecycle.Create | Lifecycle.Update) : V> | test_inner.InnerModel<V extends Lifecycle.All ? (Lifecycle.Create | Lifecycle.Update) : V>,
24
26
  response: {status: 200, body: {
25
27
  statusCode: 200
26
28
  }}
@@ -28,7 +30,7 @@ export type types_test<V extends Lifecycle = Lifecycle.All> = {
28
30
  },
29
31
  ['/inner']: {
30
32
  ['DELETE']: {
31
- request: test_inner.InnerModel<V extends Lifecycle.All ? (Lifecycle.Delete) : V> | test_inner.InnerModel2
33
+ request: test_inner.InnerModel<V extends Lifecycle.All ? (Lifecycle.Delete) : V> | test_inner.InnerModel2,
32
34
  response: {status: 200, body: {
33
35
  statusCode: 200
34
36
  }} | {status: 401, body: {