typespec-typescript-emitter 0.2.0 → 0.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/.husky/pre-commit +3 -0
- package/.prettierignore +1 -0
- package/CHANGELOG.md +37 -5
- package/README.md +49 -32
- package/dist/src/emit_routes.d.ts +5 -1
- package/dist/src/emit_routes.js +68 -33
- package/dist/src/emit_routes.js.map +1 -1
- package/dist/src/emit_types.d.ts +8 -6
- package/dist/src/emit_types.js +49 -155
- package/dist/src/emit_types.js.map +1 -1
- package/dist/src/emit_types_resolve.d.ts +8 -0
- package/dist/src/emit_types_resolve.js +122 -0
- package/dist/src/emit_types_resolve.js.map +1 -0
- package/dist/src/emit_types_typeguards.d.ts +17 -0
- package/dist/src/emit_types_typeguards.js +107 -0
- package/dist/src/emit_types_typeguards.js.map +1 -0
- package/dist/src/emitter.d.ts +5 -0
- package/dist/src/emitter.js +23 -10
- package/dist/src/emitter.js.map +1 -1
- package/dist/src/lib.d.ts +2 -0
- package/dist/src/lib.js +2 -0
- package/dist/src/lib.js.map +1 -1
- package/eslint.config.js +6 -1
- package/package.json +6 -7
- package/src/emit_routes.ts +107 -37
- package/src/emit_types.ts +55 -187
- package/src/emit_types_resolve.ts +167 -0
- package/src/emit_types_typeguards.ts +137 -0
- package/src/emitter.ts +38 -8
- package/src/lib.ts +4 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emit_types.js","sourceRoot":"","sources":["../../src/emit_types.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"emit_types.js","sourceRoot":"","sources":["../../src/emit_types.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { ArrayModelType, EmitContext, Enum, Model, Scalar, Tuple, Type, Union } from "@typespec/compiler";
|
|
2
|
+
export declare const resolveType: (context: EmitContext, t: Type, nestlevel: number) => string;
|
|
3
|
+
export declare const resolveArray: (context: EmitContext, a: ArrayModelType, nestlevel: number) => string;
|
|
4
|
+
export declare const resolveEnum: (e: Enum, nestlevel: number, isNamespaceRoot?: boolean) => string;
|
|
5
|
+
export declare const resolveTuple: (context: EmitContext, t: Tuple, nestlevel: number) => string;
|
|
6
|
+
export declare const resolveUnion: (context: EmitContext, u: Union, nestlevel: number, isNamespaceRoot?: boolean) => string;
|
|
7
|
+
export declare const resolveScalar: (s: Scalar) => string;
|
|
8
|
+
export declare const resolveModel: (context: EmitContext, m: Model, nestlevel?: number, isNamespaceRoot?: boolean) => string;
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { getDoc, } from "@typespec/compiler";
|
|
2
|
+
export const resolveType = (context, t, nestlevel) => {
|
|
3
|
+
let typeStr = "unknown";
|
|
4
|
+
switch (t.kind) {
|
|
5
|
+
case "Model":
|
|
6
|
+
if (t.name === "Array") {
|
|
7
|
+
typeStr = resolveArray(context, t, nestlevel);
|
|
8
|
+
}
|
|
9
|
+
else
|
|
10
|
+
typeStr = resolveModel(context, t, nestlevel + 1);
|
|
11
|
+
break;
|
|
12
|
+
case "Boolean":
|
|
13
|
+
typeStr = "boolean";
|
|
14
|
+
break;
|
|
15
|
+
case "Enum":
|
|
16
|
+
typeStr = resolveEnum(t, nestlevel);
|
|
17
|
+
break;
|
|
18
|
+
case "Intrinsic":
|
|
19
|
+
typeStr = t.name;
|
|
20
|
+
break;
|
|
21
|
+
case "Number":
|
|
22
|
+
typeStr = t.valueAsString;
|
|
23
|
+
break;
|
|
24
|
+
case "Scalar":
|
|
25
|
+
typeStr = resolveScalar(t);
|
|
26
|
+
break;
|
|
27
|
+
case "String":
|
|
28
|
+
typeStr = `'${t.value}'`;
|
|
29
|
+
break;
|
|
30
|
+
case "Tuple":
|
|
31
|
+
typeStr = resolveTuple(context, t, nestlevel);
|
|
32
|
+
break;
|
|
33
|
+
case "Union":
|
|
34
|
+
typeStr = resolveUnion(context, t, nestlevel);
|
|
35
|
+
break;
|
|
36
|
+
default:
|
|
37
|
+
console.warn("Could not resolve type:", t.kind);
|
|
38
|
+
}
|
|
39
|
+
return typeStr;
|
|
40
|
+
};
|
|
41
|
+
export const resolveArray = (context, a, nestlevel) => {
|
|
42
|
+
if (a.name !== "Array")
|
|
43
|
+
throw new Error(`Trying to parse model ${a.name} as Array`);
|
|
44
|
+
const ret = `${resolveType(context, a.indexer.value, nestlevel)}[]`;
|
|
45
|
+
return ret;
|
|
46
|
+
};
|
|
47
|
+
export const resolveEnum = (e, nestlevel, isNamespaceRoot) => {
|
|
48
|
+
if (e.name && !isNamespaceRoot && e.namespace?.enums.has(e.name))
|
|
49
|
+
return e.name;
|
|
50
|
+
let ret = "{\n";
|
|
51
|
+
let i = 1;
|
|
52
|
+
e.members.forEach((p) => {
|
|
53
|
+
const val = p.value === undefined
|
|
54
|
+
? ""
|
|
55
|
+
: " = " +
|
|
56
|
+
(typeof p.value === "string" ? `'${p.value}'` : p.value.toString());
|
|
57
|
+
ret = ret.addLine(`${p.name}${val}${i < e.members.size ? "," : ""}`, nestlevel + 1);
|
|
58
|
+
i++;
|
|
59
|
+
});
|
|
60
|
+
ret = ret.addLine("}", nestlevel, true);
|
|
61
|
+
return ret;
|
|
62
|
+
};
|
|
63
|
+
export const resolveTuple = (context, t, nestlevel) => {
|
|
64
|
+
return `[${t.values.map((v) => resolveType(context, v, nestlevel)).join(", ")}]`;
|
|
65
|
+
};
|
|
66
|
+
export const resolveUnion = (context, u, nestlevel, isNamespaceRoot) => {
|
|
67
|
+
if (u.name && !isNamespaceRoot && u.namespace?.unions.has(u.name))
|
|
68
|
+
return u.name;
|
|
69
|
+
return Array.from(u.variants)
|
|
70
|
+
.map((v) => resolveType(context, v[1].type, nestlevel))
|
|
71
|
+
.join(" | ");
|
|
72
|
+
};
|
|
73
|
+
export const resolveScalar = (s) => {
|
|
74
|
+
let ret = "unknown";
|
|
75
|
+
if (!s.baseScalar) {
|
|
76
|
+
switch (s.name) {
|
|
77
|
+
case "boolean":
|
|
78
|
+
ret = "boolean";
|
|
79
|
+
break;
|
|
80
|
+
case "bytes":
|
|
81
|
+
ret = "Uint8Array";
|
|
82
|
+
break;
|
|
83
|
+
case "duration":
|
|
84
|
+
case "numeric":
|
|
85
|
+
ret = "number";
|
|
86
|
+
break;
|
|
87
|
+
case "plainTime":
|
|
88
|
+
case "string":
|
|
89
|
+
case "url":
|
|
90
|
+
ret = "string";
|
|
91
|
+
break;
|
|
92
|
+
case "offsetDateTime":
|
|
93
|
+
case "plainDate":
|
|
94
|
+
case "unixTimestamp32":
|
|
95
|
+
case "utcDateTime":
|
|
96
|
+
ret = "Date";
|
|
97
|
+
break;
|
|
98
|
+
default:
|
|
99
|
+
console.warn("Could not resolve scalar:", s.name);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
return s.baseScalar ? resolveScalar(s.baseScalar) : ret;
|
|
103
|
+
};
|
|
104
|
+
export const resolveModel = (context, m, nestlevel = 0, isNamespaceRoot) => {
|
|
105
|
+
if (m.name && !isNamespaceRoot && m.namespace?.models.has(m.name))
|
|
106
|
+
return m.name;
|
|
107
|
+
let ret = "{\n";
|
|
108
|
+
let i = 1;
|
|
109
|
+
m.properties.forEach((p) => {
|
|
110
|
+
const doc = getDoc(context.program, p);
|
|
111
|
+
if (doc)
|
|
112
|
+
ret = ret.addLine(`/** ${doc} */`, nestlevel + 1);
|
|
113
|
+
const typeStr = resolveType(context, p.type, nestlevel);
|
|
114
|
+
if (typeStr.includes("unknown"))
|
|
115
|
+
console.warn(`Could not resolve property ${p.name} on ${m.name}`);
|
|
116
|
+
ret = ret.addLine(`${p.name}${p.optional ? "?" : ""}: ${typeStr}${i < m.properties.size ? "," : ""}`, nestlevel + 1);
|
|
117
|
+
i++;
|
|
118
|
+
});
|
|
119
|
+
ret = ret.addLine("}", nestlevel, true);
|
|
120
|
+
return ret;
|
|
121
|
+
};
|
|
122
|
+
//# sourceMappingURL=emit_types_resolve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit_types_resolve.js","sourceRoot":"","sources":["../../src/emit_types_resolve.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import { Model, Type } from "@typespec/compiler";
|
|
2
|
+
export declare const getTypeguardModel: (m: Model, accessor: string, nestingLevel?: number, knownGuards?: Array<{
|
|
3
|
+
filename: string;
|
|
4
|
+
name: string;
|
|
5
|
+
}>) => [string, string[]];
|
|
6
|
+
/**
|
|
7
|
+
* Creates the function body for a typeguard
|
|
8
|
+
* @param t Type to create guards for
|
|
9
|
+
* @param accessor String by which the type-to-test can be accessed by the code
|
|
10
|
+
* @param nestingLevel
|
|
11
|
+
* @param knownGuards Array of names of known typeguards; if type is found in those, no new typeguard will be created and instead a reference to the existing one is produced
|
|
12
|
+
* @returns Tuple: [function body of the typeguard, array of import filenames (not unique!)]
|
|
13
|
+
*/
|
|
14
|
+
export declare const getTypeguard: (t: Type, accessor: string, nestingLevel?: number, knownGuards?: Array<{
|
|
15
|
+
filename: string;
|
|
16
|
+
name: string;
|
|
17
|
+
}>) => [string, string[]];
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
import { resolveScalar } from "./emit_types_resolve.js";
|
|
2
|
+
export const getTypeguardModel = (m, accessor, nestingLevel = 1, knownGuards) => {
|
|
3
|
+
const imports = [];
|
|
4
|
+
return [
|
|
5
|
+
Array.from(m.properties)
|
|
6
|
+
.map((property) => {
|
|
7
|
+
const guard = getTypeguard(property[1].type, `${accessor}['${property[1].name}']`, nestingLevel + 1, knownGuards);
|
|
8
|
+
imports.push(...guard[1]);
|
|
9
|
+
let ret = " ".repeat(nestingLevel);
|
|
10
|
+
ret += property[1].optional
|
|
11
|
+
? `${accessor}['${property[1].name}'] === undefined || `
|
|
12
|
+
: `${accessor}['${property[1].name}'] !== undefined && `;
|
|
13
|
+
ret += `(${guard[0]})`;
|
|
14
|
+
return ret;
|
|
15
|
+
})
|
|
16
|
+
.filter((x) => !!x)
|
|
17
|
+
.join(" &&\n"),
|
|
18
|
+
imports,
|
|
19
|
+
];
|
|
20
|
+
};
|
|
21
|
+
/**
|
|
22
|
+
* Creates the function body for a typeguard
|
|
23
|
+
* @param t Type to create guards for
|
|
24
|
+
* @param accessor String by which the type-to-test can be accessed by the code
|
|
25
|
+
* @param nestingLevel
|
|
26
|
+
* @param knownGuards Array of names of known typeguards; if type is found in those, no new typeguard will be created and instead a reference to the existing one is produced
|
|
27
|
+
* @returns Tuple: [function body of the typeguard, array of import filenames (not unique!)]
|
|
28
|
+
*/
|
|
29
|
+
export const getTypeguard = (t, accessor, nestingLevel = 1, knownGuards) => {
|
|
30
|
+
switch (t.kind) {
|
|
31
|
+
case "Model":
|
|
32
|
+
if (t.name === "Array") {
|
|
33
|
+
const guard = getTypeguard(t.indexer.value, "v", nestingLevel, knownGuards);
|
|
34
|
+
if (guard[0].endsWith("\n"))
|
|
35
|
+
guard[0] = guard[0].substring(0, guard[0].length - 1);
|
|
36
|
+
return [
|
|
37
|
+
`Array.isArray(${accessor}) && ${accessor}.every((v) => ${guard[0]})`,
|
|
38
|
+
guard[1],
|
|
39
|
+
];
|
|
40
|
+
}
|
|
41
|
+
else if (knownGuards && knownGuards.some((x) => x.name === t.name)) {
|
|
42
|
+
return [
|
|
43
|
+
`is${t.name}(${accessor})`,
|
|
44
|
+
[
|
|
45
|
+
`import {is${t.name}} from './${knownGuards.find((x) => x.name === t.name).filename}';`,
|
|
46
|
+
],
|
|
47
|
+
];
|
|
48
|
+
}
|
|
49
|
+
else if (t.name && !knownGuards && t.namespace?.models.has(t.name)) {
|
|
50
|
+
return [`is${t.name}(${accessor})`, []];
|
|
51
|
+
}
|
|
52
|
+
else {
|
|
53
|
+
const guard = getTypeguardModel(t, accessor, nestingLevel, knownGuards);
|
|
54
|
+
return [
|
|
55
|
+
`(\n${guard[0]}\n${" ".repeat(Math.max(nestingLevel - 1, 0))})`,
|
|
56
|
+
guard[1],
|
|
57
|
+
];
|
|
58
|
+
}
|
|
59
|
+
case "Boolean":
|
|
60
|
+
return [`typeof ${accessor} === 'boolean'`, []];
|
|
61
|
+
case "Intrinsic":
|
|
62
|
+
return [`${accessor} === ${t.name}`, []];
|
|
63
|
+
case "Number":
|
|
64
|
+
return [`typeof ${accessor} === 'number'`, []];
|
|
65
|
+
case "Scalar":
|
|
66
|
+
if (
|
|
67
|
+
// TODO: figure out how to support all the varieties of dates
|
|
68
|
+
// TODO: support byte arrays
|
|
69
|
+
resolveScalar(t) !== "Date" &&
|
|
70
|
+
resolveScalar(t) !== "Uint8Array")
|
|
71
|
+
return [`typeof ${accessor} === '${resolveScalar(t)}'`, []];
|
|
72
|
+
break;
|
|
73
|
+
case "String":
|
|
74
|
+
return [`typeof ${accessor} === 'string'`, []];
|
|
75
|
+
case "Tuple": {
|
|
76
|
+
// TODO: ['string1', 'string2'] gets resolved as [string, string] instead of literals. Why?
|
|
77
|
+
const imports = [];
|
|
78
|
+
return [
|
|
79
|
+
t.values
|
|
80
|
+
.map((v, i) => {
|
|
81
|
+
const guard = getTypeguard(v, `${accessor}[${i}]`, nestingLevel, knownGuards);
|
|
82
|
+
imports.push(...guard[1]);
|
|
83
|
+
return `(${guard[0]})`;
|
|
84
|
+
})
|
|
85
|
+
.join(" && "),
|
|
86
|
+
imports,
|
|
87
|
+
];
|
|
88
|
+
}
|
|
89
|
+
case "Union": {
|
|
90
|
+
const imports = [];
|
|
91
|
+
return [
|
|
92
|
+
Array.from(t.variants)
|
|
93
|
+
.map((v) => {
|
|
94
|
+
const guard = getTypeguard(v[1].type, `${accessor}`, nestingLevel, knownGuards);
|
|
95
|
+
imports.push(...guard[1]);
|
|
96
|
+
return `(${guard[0]})`;
|
|
97
|
+
})
|
|
98
|
+
.join(" || "),
|
|
99
|
+
imports,
|
|
100
|
+
];
|
|
101
|
+
}
|
|
102
|
+
default:
|
|
103
|
+
console.warn("Could not resolve type:", t.kind);
|
|
104
|
+
}
|
|
105
|
+
return ["true", []]; // fallback to not break everything in case of errors
|
|
106
|
+
};
|
|
107
|
+
//# sourceMappingURL=emit_types_typeguards.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"emit_types_typeguards.js","sourceRoot":"","sources":["../../src/emit_types_typeguards.ts"],"names":[],"mappings":"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"}
|
package/dist/src/emitter.d.ts
CHANGED
package/dist/src/emitter.js
CHANGED
|
@@ -2,29 +2,41 @@ import { emitFile, navigateProgram, resolvePath, } from "@typespec/compiler";
|
|
|
2
2
|
import { getServers } from "@typespec/http";
|
|
3
3
|
import emitRoutes from "./emit_routes.js";
|
|
4
4
|
import emitTypes from "./emit_types.js";
|
|
5
|
+
String.prototype.addLine = function (str, tabs, continued) {
|
|
6
|
+
return `${this}${" ".repeat(tabs ?? 0)}${str}${continued ? "" : "\n"}`;
|
|
7
|
+
};
|
|
5
8
|
export async function $onEmit(context) {
|
|
6
9
|
if (!context.program.compilerOptions.noEmit) {
|
|
7
10
|
const options = {
|
|
8
11
|
"root-namespace": context.options["root-namespace"],
|
|
9
12
|
"out-dir": context.options["out-dir"] ?? context.emitterOutputDir,
|
|
10
13
|
"enable-types": context.options["enable-types"] ?? true,
|
|
14
|
+
"enable-typeguards": (context.options["enable-types"] ?? true) &&
|
|
15
|
+
(context.options["enable-typeguards"] ?? false),
|
|
11
16
|
"enable-routes": context.options["enable-routes"] ?? false,
|
|
17
|
+
"typeguards-in-routes": (context.options["enable-types"] ?? true) &&
|
|
18
|
+
(context.options["enable-typeguards"] ?? false) &&
|
|
19
|
+
(context.options["enable-routes"] ?? false) &&
|
|
20
|
+
(context.options["typeguards-in-routes"] ?? false),
|
|
12
21
|
};
|
|
13
22
|
console.log(`Writing routes to ${options["out-dir"]}`);
|
|
14
23
|
let targetNamespaceFound = false;
|
|
15
24
|
let routesObject = "";
|
|
16
|
-
let typeFiles = {
|
|
25
|
+
let typeFiles = {
|
|
26
|
+
files: {},
|
|
27
|
+
typeguardedNames: [],
|
|
28
|
+
};
|
|
17
29
|
navigateProgram(context.program, {
|
|
18
30
|
namespace(n) {
|
|
19
31
|
if (!targetNamespaceFound &&
|
|
20
32
|
n.name === context.options["root-namespace"]) {
|
|
21
33
|
targetNamespaceFound = true;
|
|
34
|
+
if (options["enable-types"] || options["enable-typeguards"])
|
|
35
|
+
typeFiles = emitTypes(context, n, options);
|
|
22
36
|
if (options["enable-routes"]) {
|
|
23
37
|
const servers = getServers(context.program, n);
|
|
24
|
-
routesObject = emitRoutes(context, n, servers && servers[0] ? servers[0].url : "");
|
|
38
|
+
routesObject = emitRoutes(context, n, servers && servers[0] ? servers[0].url : "", options, typeFiles.typeguardedNames);
|
|
25
39
|
}
|
|
26
|
-
if (options["enable-types"])
|
|
27
|
-
typeFiles = emitTypes(context, n);
|
|
28
40
|
}
|
|
29
41
|
},
|
|
30
42
|
});
|
|
@@ -40,13 +52,14 @@ export async function $onEmit(context) {
|
|
|
40
52
|
});
|
|
41
53
|
}
|
|
42
54
|
// type files
|
|
43
|
-
if (options["enable-types"]) {
|
|
44
|
-
const typeFileArr = Object.entries(typeFiles);
|
|
55
|
+
if (options["enable-types"] || options["enable-typeguards"]) {
|
|
56
|
+
const typeFileArr = Object.entries(typeFiles.files);
|
|
45
57
|
for (let i = 0; i < typeFileArr.length; i++) {
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
58
|
+
if (typeFileArr[i][1])
|
|
59
|
+
await emitFile(context.program, {
|
|
60
|
+
path: resolvePath(options["out-dir"], `${typeFileArr[i][0]}.ts`),
|
|
61
|
+
content: typeFileArr[i][1],
|
|
62
|
+
});
|
|
50
63
|
}
|
|
51
64
|
}
|
|
52
65
|
}
|
package/dist/src/emitter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/emitter.ts"],"names":[],"mappings":"AAAA,OAAO,EAEL,QAAQ,EACR,eAAe,EACf,WAAW,GACZ,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,UAAU,MAAM,kBAAkB,CAAC;AAC1C,OAAO,SAAS,MAAM,iBAAiB,CAAC;
|
|
1
|
+
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/emitter.ts"],"names":[],"mappings":"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"}
|
package/dist/src/lib.d.ts
CHANGED
|
@@ -2,7 +2,9 @@ export interface EmitterOptions {
|
|
|
2
2
|
"root-namespace": string;
|
|
3
3
|
"out-dir": string;
|
|
4
4
|
"enable-types": boolean;
|
|
5
|
+
"enable-typeguards": boolean;
|
|
5
6
|
"enable-routes": boolean;
|
|
7
|
+
"typeguards-in-routes": boolean;
|
|
6
8
|
}
|
|
7
9
|
export declare const $lib: import("@typespec/compiler").TypeSpecLibrary<{
|
|
8
10
|
[code: string]: import("@typespec/compiler").DiagnosticMessages;
|
package/dist/src/lib.js
CHANGED
|
@@ -6,7 +6,9 @@ const EmitterOptionsSchema = {
|
|
|
6
6
|
"root-namespace": { type: "string" },
|
|
7
7
|
"out-dir": { type: "string", format: "absolute-path" },
|
|
8
8
|
"enable-types": { type: "boolean" },
|
|
9
|
+
"enable-typeguards": { type: "boolean" },
|
|
9
10
|
"enable-routes": { type: "boolean" },
|
|
11
|
+
"typeguards-in-routes": { type: "boolean" },
|
|
10
12
|
},
|
|
11
13
|
required: ["root-namespace"],
|
|
12
14
|
};
|
package/dist/src/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAkB,MAAM,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAkB,MAAM,oBAAoB,CAAC;AAW3E,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,sBAAsB,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;KAC5C;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"}
|
package/eslint.config.js
CHANGED
|
@@ -4,7 +4,12 @@ import tsEslint from "typescript-eslint";
|
|
|
4
4
|
|
|
5
5
|
export default tsEslint.config(
|
|
6
6
|
{
|
|
7
|
-
ignores: [
|
|
7
|
+
ignores: [
|
|
8
|
+
"**/dist/**/*",
|
|
9
|
+
"**/.temp/**/*",
|
|
10
|
+
"**/*.md",
|
|
11
|
+
"**/node_modules/**/*",
|
|
12
|
+
],
|
|
8
13
|
},
|
|
9
14
|
eslint.configs.recommended,
|
|
10
15
|
...tsEslint.configs.recommended,
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "typespec-typescript-emitter",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.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
|
"bugs": "https://github.com/crowbait/typespec-typescript-emitter/issues",
|
|
@@ -23,25 +23,24 @@
|
|
|
23
23
|
},
|
|
24
24
|
"devDependencies": {
|
|
25
25
|
"@types/node": "latest",
|
|
26
|
-
"
|
|
27
|
-
"@typescript-eslint/parser": "^6.0.0",
|
|
28
|
-
"eslint": "^8.45.0",
|
|
26
|
+
"eslint": "^9.15.0",
|
|
29
27
|
"husky": "^9.1.6",
|
|
30
28
|
"prettier": "^3.0.3",
|
|
31
29
|
"rimraf": "^6.0.1",
|
|
32
|
-
"typescript": "^5.3.3"
|
|
30
|
+
"typescript": "^5.3.3",
|
|
31
|
+
"typescript-eslint": "^8.15.0"
|
|
33
32
|
},
|
|
34
33
|
"peerDependencies": {
|
|
35
34
|
"@typespec/compiler": "^0.62.0",
|
|
36
35
|
"@typespec/http": "^0.62.0"
|
|
37
36
|
},
|
|
38
37
|
"scripts": {
|
|
39
|
-
"build": "
|
|
38
|
+
"build": "rimraf dist && tsc",
|
|
40
39
|
"watch": "tsc --watch",
|
|
41
40
|
"test": "npm run build && node --test",
|
|
42
41
|
"lint": "eslint src/ test/ --report-unused-disable-directives --max-warnings=0",
|
|
43
42
|
"lint:fix": "eslint . --report-unused-disable-directives --fix",
|
|
44
|
-
"format": "prettier .
|
|
43
|
+
"format": "prettier . --write",
|
|
45
44
|
"format:check": "prettier --check .",
|
|
46
45
|
"prepare": "husky",
|
|
47
46
|
"prepublishOnly": "npm run build"
|