typespec-typescript-emitter 0.4.1 → 1.1.0
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/.github/workflows/create-release-nobumpversion.yml +27 -0
- package/.nvmrc +1 -0
- package/CHANGELOG.md +16 -15
- package/README.md +19 -24
- package/dist/src/emit_mapped_types.d.ts +2 -0
- package/dist/src/emit_mapped_types.js +81 -0
- package/dist/src/emit_mapped_types.js.map +1 -0
- package/dist/src/emit_routes.d.ts +1 -6
- package/dist/src/emit_routes.js +49 -99
- package/dist/src/emit_routes.js.map +1 -1
- package/dist/src/emit_types.js +2 -5
- package/dist/src/emit_types.js.map +1 -1
- package/dist/src/emit_types_resolve.d.ts +6 -6
- package/dist/src/emit_types_resolve.js +21 -19
- package/dist/src/emit_types_resolve.js.map +1 -1
- package/dist/src/emitter.js +20 -12
- package/dist/src/emitter.js.map +1 -1
- package/dist/src/lib.d.ts +1 -2
- package/dist/src/lib.js +1 -2
- package/dist/src/lib.js.map +1 -1
- package/package.json +3 -3
- package/src/emit_mapped_types.ts +100 -0
- package/src/emit_routes.ts +67 -142
- package/src/emit_types.ts +2 -5
- package/src/emit_types_resolve.ts +20 -18
- package/src/emitter.ts +25 -21
- package/src/lib.ts +2 -4
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
name: Create Release (without bumping version)
|
|
2
|
+
on:
|
|
3
|
+
workflow_dispatch:
|
|
4
|
+
|
|
5
|
+
jobs:
|
|
6
|
+
changelog:
|
|
7
|
+
runs-on: ubuntu-latest
|
|
8
|
+
steps:
|
|
9
|
+
- uses: actions/checkout@v4
|
|
10
|
+
with:
|
|
11
|
+
token: ${{ secrets.GH_TOKEN }}
|
|
12
|
+
- name: Create Conventional Changelog
|
|
13
|
+
id: changelog
|
|
14
|
+
uses: TriPSs/conventional-changelog-action@v5.4.0
|
|
15
|
+
with:
|
|
16
|
+
github-token: ${{ secrets.GH_TOKEN }}
|
|
17
|
+
skip-on-empty: false
|
|
18
|
+
skip-bump: true
|
|
19
|
+
- name: Create Release
|
|
20
|
+
uses: actions/create-release@v1
|
|
21
|
+
if: ${{ steps.changelog.outputs.skipped == 'false' }}
|
|
22
|
+
env:
|
|
23
|
+
GITHUB_TOKEN: ${{ secrets.GH_TOKEN }}
|
|
24
|
+
with:
|
|
25
|
+
tag_name: ${{ steps.changelog.outputs.tag }}
|
|
26
|
+
release_name: ${{ steps.changelog.outputs.tag }}
|
|
27
|
+
body: ${{ steps.changelog.outputs.clean_changelog }}
|
package/.nvmrc
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
22
|
package/CHANGELOG.md
CHANGED
|
@@ -1,47 +1,48 @@
|
|
|
1
|
-
|
|
1
|
+
# [1.1.0](https://github.com/crowbait/typespec-typescript-emitter/compare/v1.0.0...v1.1.0) (2025-05-23)
|
|
2
2
|
|
|
3
3
|
|
|
4
|
-
### Bug Fixes
|
|
5
4
|
|
|
6
|
-
|
|
5
|
+
# [1.0.0](https://github.com/crowbait/typespec-typescript-emitter/compare/v0.4.1...v1.0.0) (2025-03-13)
|
|
7
6
|
|
|
8
7
|
|
|
9
|
-
|
|
10
|
-
# [0.4.0](https://github.com/crowbait/typespec-typescript-emitter/compare/v0.3.5...v0.4.0) (2025-02-25)
|
|
8
|
+
* feat!: complete rework of routes emitter ([2f07e7f](https://github.com/crowbait/typespec-typescript-emitter/commit/2f07e7f487f0e6531b89e66f7de4d7d09382e4e5))
|
|
11
9
|
|
|
12
10
|
|
|
13
11
|
### Features
|
|
14
12
|
|
|
15
|
-
*
|
|
13
|
+
* routed typemap ([0a57f43](https://github.com/crowbait/typespec-typescript-emitter/commit/0a57f439e6f483c35b00824c725aecc66d3a80df))
|
|
16
14
|
|
|
17
15
|
|
|
16
|
+
### BREAKING CHANGES
|
|
17
|
+
|
|
18
|
+
* This breaks existing configurations and - depending on how it was used - usage of the emitted routes object.
|
|
18
19
|
|
|
19
|
-
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
## [0.4.1](https://github.com/crowbait/typespec-typescript-emitter/compare/v0.4.0...v0.4.1) (2025-02-25)
|
|
20
23
|
|
|
21
24
|
|
|
22
25
|
### Bug Fixes
|
|
23
26
|
|
|
24
|
-
*
|
|
27
|
+
* fixed eslint ignore directives ([9c0477a](https://github.com/crowbait/typespec-typescript-emitter/commit/9c0477a6925715b99c38d4133d04ee774a0a65f7))
|
|
25
28
|
|
|
26
29
|
|
|
27
30
|
|
|
28
|
-
|
|
31
|
+
# [0.4.0](https://github.com/crowbait/typespec-typescript-emitter/compare/v0.3.5...v0.4.0) (2025-02-25)
|
|
29
32
|
|
|
30
33
|
|
|
31
|
-
###
|
|
34
|
+
### Features
|
|
32
35
|
|
|
33
|
-
*
|
|
34
|
-
* model typeguard resolution if spread over mutliple files ([eab6064](https://github.com/crowbait/typespec-typescript-emitter/commit/eab606421c930d5c9a747ffbd0d1a0707608374b))
|
|
35
|
-
* support recursive records ([c0bad3f](https://github.com/crowbait/typespec-typescript-emitter/commit/c0bad3f15f2f0913ef99129ce17c53a17fd0d125)), closes [#3](https://github.com/crowbait/typespec-typescript-emitter/issues/3)
|
|
36
|
+
* option to emit relative URLs in routes object ([be50613](https://github.com/crowbait/typespec-typescript-emitter/commit/be50613ac94550899805faf2555b3f407d88be33))
|
|
36
37
|
|
|
37
38
|
|
|
38
39
|
|
|
39
|
-
## [0.3.
|
|
40
|
+
## [0.3.5](https://github.com/crowbait/typespec-typescript-emitter/compare/v0.3.4...v0.3.5) (2025-02-23)
|
|
40
41
|
|
|
41
42
|
|
|
42
43
|
### Bug Fixes
|
|
43
44
|
|
|
44
|
-
*
|
|
45
|
+
* ci (no skip on chore-only) ([75b2e5d](https://github.com/crowbait/typespec-typescript-emitter/commit/75b2e5d4346fd17de5c7baf689de6e4cac259542))
|
|
45
46
|
|
|
46
47
|
|
|
47
48
|
|
package/README.md
CHANGED
|
@@ -45,8 +45,6 @@ options:
|
|
|
45
45
|
enable-types: true
|
|
46
46
|
enable-typeguards: false
|
|
47
47
|
enable-routes: false
|
|
48
|
-
relative-routes: false
|
|
49
|
-
typeguards-in-routes: true
|
|
50
48
|
```
|
|
51
49
|
|
|
52
50
|
The following options are available:
|
|
@@ -56,8 +54,6 @@ The following options are available:
|
|
|
56
54
|
- `enable-types` (default: true): enables output of TypeScript types.
|
|
57
55
|
- `enable-typeguards` (default: false): enables output of typeguards, *IF* type-output is enabled.
|
|
58
56
|
- `enable-routes` (default: false): enables output of the HTTP-routes object.
|
|
59
|
-
- `relative-routes` (default: false): emits URLs in the routes object relative to the server's address (as opposed to a fully qualified URL when set to false).
|
|
60
|
-
- `typeguards-in-routes` (default: false) **Experimental**: generates or references typeguards in the routes object, *IF* types, typeguards *and* routes are enabled.
|
|
61
57
|
|
|
62
58
|
## Types emitter
|
|
63
59
|
|
|
@@ -154,7 +150,12 @@ model Derived2 {...OmitProperties<Demo, "prop1">};
|
|
|
154
150
|
**This emitter depends on your use of the `TypeSpec.Http` library**.
|
|
155
151
|
|
|
156
152
|
If you're using `TypeSpec.Http` to define your API routes and endpoints, this library offers an emitter to export a `routes` object.
|
|
157
|
-
|
|
153
|
+
It will generate a nested object containing information about every `op` you have defined, nested by namespace.
|
|
154
|
+
I contains the following data (per `op`):
|
|
155
|
+
- `method`: HTTP method
|
|
156
|
+
- `path`: Path (as defined as `route`-string; parameters are not substituted)
|
|
157
|
+
- `getUrl`: Function for generating a valid URL to this `op`; if the path has parameters, this function will have analogue parameters
|
|
158
|
+
- `auth`: Array of valid authentication schemes (or `[null]`, if none)
|
|
158
159
|
Just as the types emitter, this emitter will also preserve docs as JSDoc-style comments.
|
|
159
160
|
|
|
160
161
|
Example:
|
|
@@ -176,7 +177,7 @@ namespace myProject { // remember to set in config!
|
|
|
176
177
|
namespace sub {
|
|
177
178
|
@post
|
|
178
179
|
@route("post/{post_param}")
|
|
179
|
-
@useAuth(
|
|
180
|
+
@useAuth(BearerAuth)
|
|
180
181
|
op postSomething(
|
|
181
182
|
@path post_param: int32,
|
|
182
183
|
@body body: string
|
|
@@ -191,29 +192,23 @@ namespace myProject { // remember to set in config!
|
|
|
191
192
|
/* /path/to/outdir/routes_{root-namespace}.ts */
|
|
192
193
|
export const routes_myProject = {
|
|
193
194
|
getSomething: {
|
|
194
|
-
method: '
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
isRequestType: null,
|
|
199
|
-
isResponseType: (arg: any): boolean => typeof arg === 'string'
|
|
195
|
+
method: 'GET',
|
|
196
|
+
path: '/',
|
|
197
|
+
getUrl: (): string => `/`,
|
|
198
|
+
auth: [null]
|
|
200
199
|
},
|
|
201
200
|
getSmthElse: {
|
|
202
|
-
method: '
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
isRequestType: null,
|
|
207
|
-
isResponseType: (arg: any): boolean => typeof arg === 'string'
|
|
201
|
+
method: 'GET',
|
|
202
|
+
path: '/{param}',
|
|
203
|
+
getUrl: (params: {param: string}): string => `/${params.param}`,
|
|
204
|
+
auth: [null, "BASIC"]
|
|
208
205
|
},
|
|
209
206
|
sub: {
|
|
210
207
|
postSomething: {
|
|
211
|
-
method: '
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
isRequestType: (arg: any): boolean => typeof arg === 'string',
|
|
216
|
-
isResponseType: (arg: any): boolean => typeof arg === 'string'
|
|
208
|
+
method: 'POST',
|
|
209
|
+
path: '/post/{post_param}',
|
|
210
|
+
getUrl: (params: {post_param: string}): string => `/post/${params.post_param}`,
|
|
211
|
+
auth: ["BEARER"]
|
|
217
212
|
}
|
|
218
213
|
}
|
|
219
214
|
} as const;
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
import { getHttpOperation } from "@typespec/http";
|
|
2
|
+
import { resolveType } from "./emit_types_resolve.js";
|
|
3
|
+
export const emitRoutedTypemap = (context, namespace) => {
|
|
4
|
+
const ops = {};
|
|
5
|
+
const traverseNamespace = (n) => {
|
|
6
|
+
// operations
|
|
7
|
+
n.operations.forEach((op) => {
|
|
8
|
+
const httpOp = getHttpOperation(context.program, op);
|
|
9
|
+
const identifier = httpOp[0].path;
|
|
10
|
+
ops[identifier] = {
|
|
11
|
+
request: "null",
|
|
12
|
+
response: [{ status: 200, body: "unknown" }],
|
|
13
|
+
};
|
|
14
|
+
// request
|
|
15
|
+
let request = "null";
|
|
16
|
+
if (op.parameters.properties.has("body")) {
|
|
17
|
+
request = resolveType(op.parameters.properties.get("body").type, 1, namespace, context);
|
|
18
|
+
}
|
|
19
|
+
ops[identifier].request = request;
|
|
20
|
+
// response
|
|
21
|
+
if (op.returnType && op.returnType.kind) {
|
|
22
|
+
const getReturnType = (t) => {
|
|
23
|
+
const ret = [];
|
|
24
|
+
if (t.kind === "Model") {
|
|
25
|
+
// if the return type is a model, it may have a fully qualified body
|
|
26
|
+
const modelret = {
|
|
27
|
+
status: 200,
|
|
28
|
+
body: "unknown",
|
|
29
|
+
};
|
|
30
|
+
let wasQualifiedBody = false;
|
|
31
|
+
t.properties.forEach((prop) => {
|
|
32
|
+
prop.decorators.forEach((dec) => {
|
|
33
|
+
// one of the properties may be the status code
|
|
34
|
+
if (dec.definition?.name === "@statusCode" &&
|
|
35
|
+
prop.type.kind === "Number")
|
|
36
|
+
modelret.status = prop.type.value;
|
|
37
|
+
// one of the properties may be the body definition
|
|
38
|
+
if (dec.definition?.name === "@body") {
|
|
39
|
+
modelret.body = resolveType(prop.type, 1, namespace, context);
|
|
40
|
+
wasQualifiedBody = true;
|
|
41
|
+
}
|
|
42
|
+
});
|
|
43
|
+
});
|
|
44
|
+
// ... if not, we assume status 200 and treat the model as the body
|
|
45
|
+
if (!wasQualifiedBody) {
|
|
46
|
+
modelret.body = resolveType(t, 1, namespace, context);
|
|
47
|
+
}
|
|
48
|
+
ret.push(modelret);
|
|
49
|
+
}
|
|
50
|
+
else if (t.kind === "Union") {
|
|
51
|
+
// if the return type is a union, we have to check and resolve all variants
|
|
52
|
+
// the union could either be a body-only definition or fully qualified (see above)
|
|
53
|
+
t.variants.forEach((variant) => {
|
|
54
|
+
ret.push(...getReturnType(variant.type));
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
else
|
|
58
|
+
ret.push({ status: 200, body: resolveType(t, 1, namespace) });
|
|
59
|
+
return ret;
|
|
60
|
+
};
|
|
61
|
+
ops[identifier].response = getReturnType(op.returnType);
|
|
62
|
+
}
|
|
63
|
+
}); // end operations
|
|
64
|
+
// get and traverse all namespaces
|
|
65
|
+
n.namespaces.forEach((ns) => traverseNamespace(ns));
|
|
66
|
+
};
|
|
67
|
+
traverseNamespace(namespace);
|
|
68
|
+
let out = `export type types_${context.options["root-namespace"]} = {\n`;
|
|
69
|
+
out += Object.entries(ops)
|
|
70
|
+
.map((op) => {
|
|
71
|
+
let ret = ` ['${op[0]}']: {\n`;
|
|
72
|
+
ret += ` request: ${op[1].request}\n`;
|
|
73
|
+
ret += ` response: ${op[1].response.map((res) => `{status: ${res.status}, body: ${res.body}}`).join(" | ")}\n`;
|
|
74
|
+
ret += " }";
|
|
75
|
+
return ret;
|
|
76
|
+
})
|
|
77
|
+
.join(",\n");
|
|
78
|
+
out += "\n};\n";
|
|
79
|
+
return out;
|
|
80
|
+
};
|
|
81
|
+
//# sourceMappingURL=emit_mapped_types.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit_mapped_types.js","sourceRoot":"","sources":["../../src/emit_mapped_types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,2 @@
|
|
|
1
1
|
import { EmitContext, Namespace } from "@typespec/compiler";
|
|
2
|
-
|
|
3
|
-
declare const emitRoutes: (context: EmitContext, namespace: Namespace, rootServer: string, options: EmitterOptions, knownTypeguards: Array<{
|
|
4
|
-
filename: string;
|
|
5
|
-
name: string;
|
|
6
|
-
}>) => string;
|
|
7
|
-
export default emitRoutes;
|
|
2
|
+
export declare const emitRoutes: (context: EmitContext, namespace: Namespace) => string;
|
package/dist/src/emit_routes.js
CHANGED
|
@@ -1,129 +1,79 @@
|
|
|
1
|
-
import { getDoc
|
|
1
|
+
import { getDoc } from "@typespec/compiler";
|
|
2
2
|
import { getAuthentication, getHttpOperation } from "@typespec/http";
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
const emitRoutes = (context, namespace, rootServer, options, knownTypeguards) => {
|
|
6
|
-
const rootNode = `routes_${context.options["root-namespace"]}`;
|
|
7
|
-
const imports = [];
|
|
8
|
-
let out = autogenerateWarning;
|
|
9
|
-
out += `const ${rootNode} = {\n`;
|
|
3
|
+
export const emitRoutes = (context, namespace) => {
|
|
4
|
+
let out = `export const routes_${context.options["root-namespace"]} = {\n`;
|
|
10
5
|
const traverseNamespace = (n, nestLevel) => {
|
|
11
6
|
// operations
|
|
12
|
-
let
|
|
7
|
+
let opnum = 0;
|
|
13
8
|
n.operations.forEach((op) => {
|
|
14
|
-
|
|
9
|
+
opnum++;
|
|
15
10
|
const httpOp = getHttpOperation(context.program, op);
|
|
16
11
|
// jsdoc comment
|
|
17
12
|
const doc = getDoc(context.program, op);
|
|
18
13
|
if (doc)
|
|
19
14
|
out = out.addLine(`/** ${doc} */`, nestLevel + 1);
|
|
15
|
+
// start op body
|
|
20
16
|
out = out.addLine(`${op.name}: {`, nestLevel + 1);
|
|
21
|
-
//
|
|
17
|
+
// HTTP method
|
|
22
18
|
out = out.addLine(`method: '${httpOp[0].verb.toUpperCase()}',`, nestLevel + 2);
|
|
23
|
-
//
|
|
19
|
+
// path
|
|
20
|
+
out = out.addLine(`path: '${httpOp[0].path}',`, nestLevel + 2);
|
|
21
|
+
// getUrl
|
|
24
22
|
const pathParams = httpOp[0].parameters.parameters.filter((p) => p.type === "path");
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
fn += pathParams.reduce((sum, cur) => sum.replaceAll(`{${cur.name}}`, `${"$"}{p.${cur.name}}`), `\`${!options["relative-routes"] ? rootServer : ""}${httpOp[0].path}\`,`);
|
|
32
|
-
out = out.addLine(fn, nestLevel + 2);
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
out = out.addLine(`getUrl: () => '${!options["relative-routes"] ? rootServer : ""}${httpOp[0].path}',`, nestLevel + 2);
|
|
36
|
-
}
|
|
23
|
+
const pathParamsArgsString = pathParams
|
|
24
|
+
.map((p) => `${p.name}: string`)
|
|
25
|
+
.join(", ");
|
|
26
|
+
const pathParamsArg = `params: {${pathParamsArgsString}}`;
|
|
27
|
+
const pathParamsOutString = pathParams.reduce((sum, cur) => sum.replaceAll(`{${cur.name}}`, `${"$"}{params.${cur.name}}`), `\`${httpOp[0].path}\``);
|
|
28
|
+
out = out.addLine(`getUrl: (${pathParams.length > 0 ? pathParamsArg : ""}): string => ${pathParamsOutString},`, nestLevel + 2);
|
|
37
29
|
// auth
|
|
38
|
-
let auth =
|
|
30
|
+
let auth = [];
|
|
39
31
|
const opAuth = getAuthentication(context.program, op);
|
|
40
32
|
if (opAuth) {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
if (
|
|
45
|
-
|
|
46
|
-
if (
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
includesSome && includesNone
|
|
51
|
-
? "varies"
|
|
52
|
-
: includesSome && !includesNone
|
|
53
|
-
? true
|
|
54
|
-
: false;
|
|
55
|
-
}
|
|
56
|
-
out = out.addLine(`auth: ${typeof auth === "string" ? `'${auth}'` : auth.toString()}${options["typeguards-in-routes"] ? "," : ""}`, nestLevel + 2);
|
|
57
|
-
// typeguards
|
|
58
|
-
const typeguardLines = (t) => {
|
|
59
|
-
const guard = getTypeguard(t, "arg", 0, n, knownTypeguards);
|
|
60
|
-
imports.push(...guard[1]);
|
|
61
|
-
return guard[0].split("\n");
|
|
62
|
-
};
|
|
63
|
-
if (options["typeguards-in-routes"]) {
|
|
64
|
-
if (!knownTypeguards) {
|
|
65
|
-
console.warn("Typeguard Names List was empty when it shouldn't have been.");
|
|
66
|
-
return;
|
|
67
|
-
}
|
|
68
|
-
if (op.parameters.properties.has("body")) {
|
|
69
|
-
const lines = typeguardLines(op.parameters.properties.get("body").type);
|
|
70
|
-
out = out.addLine(`isRequestType: ${lines.length === 0 ? "null" : `(arg: any): boolean => ${lines.shift()}`}${lines.length < 1 ? "," : ""}`, nestLevel + 2, lines.length === 1);
|
|
71
|
-
if (lines.length > 0) {
|
|
72
|
-
lines[lines.length - 1] += ",";
|
|
73
|
-
lines.forEach((line, i, arr) => {
|
|
74
|
-
out = out.addLine(line, lines.length > 1 ? nestLevel + (i < arr.length - 1 ? 3 : 2) : 0);
|
|
33
|
+
opAuth.options.forEach((authOption) => authOption.schemes.forEach((authScheme) => {
|
|
34
|
+
if (authScheme.type === "noAuth")
|
|
35
|
+
auth.push(null);
|
|
36
|
+
if (authScheme.type === "http")
|
|
37
|
+
auth.push(authScheme.scheme.toUpperCase());
|
|
38
|
+
if (authScheme.type === "apiKey")
|
|
39
|
+
auth.push({
|
|
40
|
+
apiKeyLocation: authScheme.in.toUpperCase(),
|
|
41
|
+
apiKeyName: authScheme.name,
|
|
75
42
|
});
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
op.returnType.kind &&
|
|
82
|
-
op.returnType.kind !== "Intrinsic") {
|
|
83
|
-
const lines = [];
|
|
84
|
-
const addModelLines = (m) => {
|
|
85
|
-
if (m.properties.has("body")) {
|
|
86
|
-
lines.push(...typeguardLines(m.properties.get("body").type));
|
|
87
|
-
// else (no "body" prop): stays empty -> 'null'
|
|
88
|
-
// why?: unnamed model return type is likely to be / should be
|
|
89
|
-
// headers'n'stuff, so if there is no "body" property, play it safe
|
|
90
|
-
}
|
|
91
|
-
};
|
|
92
|
-
if (op.returnType.kind === "Union") {
|
|
93
|
-
op.returnType.variants.forEach((v) => {
|
|
94
|
-
if (v.type.kind === "Model")
|
|
95
|
-
addModelLines(v.type);
|
|
96
|
-
});
|
|
97
|
-
}
|
|
98
|
-
if (op.returnType.kind === "Model")
|
|
99
|
-
addModelLines(op.returnType);
|
|
100
|
-
out = out.addLine(`isResponseType: ${lines.length === 0 ? "null" : `(arg: any): boolean => ${lines.shift()}`}${lines.length < 1 ? "," : ""}`, nestLevel + 2, lines.length === 1);
|
|
101
|
-
lines.forEach((line, i, arr) => {
|
|
102
|
-
out = out.addLine(line, lines.length > 1 ? nestLevel + (i < arr.length - 1 ? 3 : 2) : 0);
|
|
103
|
-
});
|
|
104
|
-
}
|
|
105
|
-
else
|
|
106
|
-
out = out.addLine("isResponseType: null", nestLevel + 2);
|
|
43
|
+
if (authScheme.type === "oauth2")
|
|
44
|
+
authScheme.flows.forEach((oauthFlow) => auth.push(`OAuth_${oauthFlow.type}`));
|
|
45
|
+
if (authScheme.type === "openIdConnect")
|
|
46
|
+
auth.push("OPENID");
|
|
47
|
+
}));
|
|
107
48
|
}
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
49
|
+
else
|
|
50
|
+
auth = [null];
|
|
51
|
+
out = out.addLine(`auth: [${auth
|
|
52
|
+
.map((authEntry) => !authEntry
|
|
53
|
+
? "null"
|
|
54
|
+
: typeof authEntry === "string"
|
|
55
|
+
? `'${authEntry}'`
|
|
56
|
+
: `{${Object.entries(authEntry)
|
|
57
|
+
.map((entry) => `${entry[0]}: '${entry[1]}'`)
|
|
58
|
+
.join(", ")}}`)
|
|
59
|
+
.join(", ")}]`, nestLevel + 2);
|
|
60
|
+
// finalize route entry
|
|
61
|
+
out = out.addLine(`}${opnum < n.operations.size || n.namespaces.size > 0 ? "," : ""}`, nestLevel + 1);
|
|
62
|
+
}); // end operations
|
|
63
|
+
// get and traverse all namespaces
|
|
64
|
+
let nsnum = 0;
|
|
112
65
|
n.namespaces.forEach((ns) => {
|
|
113
|
-
|
|
66
|
+
nsnum++;
|
|
114
67
|
const doc = getDoc(context.program, ns);
|
|
115
68
|
if (doc)
|
|
116
69
|
out = out.addLine(`/** ${doc} */`, nestLevel + 1);
|
|
117
70
|
out = out.addLine(`${ns.name}: {`, nestLevel + 1);
|
|
118
71
|
traverseNamespace(ns, nestLevel + 1);
|
|
119
|
-
out = out.addLine(`}${
|
|
72
|
+
out = out.addLine(`}${nsnum < n.namespaces.size ? "," : ""}`, nestLevel + 1);
|
|
120
73
|
});
|
|
121
74
|
};
|
|
122
75
|
traverseNamespace(namespace, 0);
|
|
123
76
|
out += "} as const;\n";
|
|
124
|
-
out += `export default ${rootNode};\n`;
|
|
125
|
-
out = `${imports.filter((x, i, arr) => arr.indexOf(x) === i).join("\n")}\n\n${out}`;
|
|
126
77
|
return out;
|
|
127
78
|
};
|
|
128
|
-
export default emitRoutes;
|
|
129
79
|
//# sourceMappingURL=emit_routes.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit_routes.js","sourceRoot":"","sources":["../../src/emit_routes.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"emit_routes.js","sourceRoot":"","sources":["../../src/emit_routes.ts"],"names":[],"mappings":"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"}
|
package/dist/src/emit_types.js
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { getDoc } from "@typespec/compiler";
|
|
2
2
|
import { resolveEnum, resolveModel, resolveUnion, } from "./emit_types_resolve.js";
|
|
3
3
|
import { getTypeguardModel } from "./emit_types_typeguards.js";
|
|
4
|
-
import autogenerateWarning from "./helper_autogenerateWarning.js";
|
|
5
4
|
const emitTypes = (context, namespace, options) => {
|
|
6
5
|
const out = { files: {}, typeguardedNames: [] };
|
|
7
6
|
const traverseNamespace = (n) => {
|
|
@@ -19,7 +18,7 @@ const emitTypes = (context, namespace, options) => {
|
|
|
19
18
|
});
|
|
20
19
|
n.unions.forEach((u) => {
|
|
21
20
|
if (options["enable-types"]) {
|
|
22
|
-
const resolved = resolveUnion(
|
|
21
|
+
const resolved = resolveUnion(u, 0, n, context, true);
|
|
23
22
|
if (resolved) {
|
|
24
23
|
const doc = getDoc(context.program, u);
|
|
25
24
|
if (doc)
|
|
@@ -30,7 +29,7 @@ const emitTypes = (context, namespace, options) => {
|
|
|
30
29
|
});
|
|
31
30
|
n.models.forEach((m) => {
|
|
32
31
|
if (options["enable-types"]) {
|
|
33
|
-
const resolved = resolveModel(
|
|
32
|
+
const resolved = resolveModel(m, 0, n, context, true);
|
|
34
33
|
if (resolved) {
|
|
35
34
|
const doc = getDoc(context.program, m);
|
|
36
35
|
if (doc)
|
|
@@ -55,8 +54,6 @@ const emitTypes = (context, namespace, options) => {
|
|
|
55
54
|
}
|
|
56
55
|
file += "\n";
|
|
57
56
|
});
|
|
58
|
-
if (file)
|
|
59
|
-
file = autogenerateWarning + file;
|
|
60
57
|
// set output for this namespace
|
|
61
58
|
out.files[n.name.charAt(0).toUpperCase() + n.name.slice(1)] = file;
|
|
62
59
|
// recursively iterate child namespaces
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit_types.js","sourceRoot":"","sources":["../../src/emit_types.ts"],"names":[],"mappings":"AAAA,OAAO,EAAe,MAAM,EAAa,MAAM,oBAAoB,CAAC;AACpE,OAAO,EACL,WAAW,EACX,YAAY,EACZ,YAAY,GACb,MAAM,yBAAyB,CAAC;AACjC,OAAO,EAAE,iBAAiB,EAAE,MAAM,4BAA4B,CAAC;
|
|
1
|
+
{"version":3,"file":"emit_types.js","sourceRoot":"","sources":["../../src/emit_types.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { ArrayModelType, EmitContext, Enum, Model, Namespace, RecordModelType, Scalar, Tuple, Type, Union } from "@typespec/compiler";
|
|
2
|
-
export declare const resolveType: (
|
|
3
|
-
export declare const resolveArray: (
|
|
4
|
-
export declare const resolveRecord: (
|
|
2
|
+
export declare const resolveType: (t: Type, nestlevel: number, currentNamespace: Namespace, context?: EmitContext) => string;
|
|
3
|
+
export declare const resolveArray: (a: ArrayModelType, nestlevel: number, currentNamespace: Namespace, context?: EmitContext) => string;
|
|
4
|
+
export declare const resolveRecord: (a: RecordModelType, nestlevel: number, currentNamespace: Namespace, context?: EmitContext) => string;
|
|
5
5
|
export declare const resolveEnum: (e: Enum, nestlevel: number, isNamespaceRoot?: boolean) => string;
|
|
6
|
-
export declare const resolveTuple: (
|
|
7
|
-
export declare const resolveUnion: (
|
|
6
|
+
export declare const resolveTuple: (t: Tuple, nestlevel: number, currentNamespace: Namespace, context?: EmitContext) => string;
|
|
7
|
+
export declare const resolveUnion: (u: Union, nestlevel: number, currentNamespace: Namespace, context?: EmitContext, isNamespaceRoot?: boolean) => string;
|
|
8
8
|
export declare const resolveScalar: (s: Scalar) => string;
|
|
9
|
-
export declare const resolveModel: (
|
|
9
|
+
export declare const resolveModel: (m: Model, nestlevel: number | undefined, currentNamespace: Namespace, context?: EmitContext, isNamespaceRoot?: boolean) => string;
|