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.
- package/.husky/pre-commit +2 -1
- package/.prettierignore +2 -1
- package/CHANGELOG.md +19 -24
- package/CODE_OF_CONDUCT.md +128 -0
- package/README.md +362 -219
- package/dist/src/emit_routedTypemap.d.ts +4 -0
- package/dist/src/emit_routedTypemap.js +83 -0
- package/dist/src/emit_routedTypemap.js.map +1 -0
- package/dist/src/emit_routes.d.ts +3 -2
- package/dist/src/emit_routes.js +73 -47
- package/dist/src/emit_routes.js.map +1 -1
- package/dist/src/emit_types.d.ts +3 -9
- package/dist/src/emit_types.js +109 -74
- package/dist/src/emit_types.js.map +1 -1
- package/dist/src/emitter.d.ts +2 -6
- package/dist/src/emitter.js +18 -76
- package/dist/src/emitter.js.map +1 -1
- package/dist/src/helpers/appendableString.d.ts +15 -0
- package/dist/src/helpers/appendableString.js +41 -0
- package/dist/src/helpers/appendableString.js.map +1 -0
- package/dist/src/helpers/arrays.d.ts +3 -0
- package/dist/src/helpers/arrays.js +23 -0
- package/dist/src/helpers/arrays.js.map +1 -0
- package/dist/src/{helper_autogenerateWarning.d.ts → helpers/autogenerateWarning.d.ts} +1 -1
- package/dist/src/{helper_autogenerateWarning.js → helpers/autogenerateWarning.js} +1 -2
- package/dist/src/helpers/autogenerateWarning.js.map +1 -0
- package/dist/src/helpers/buildTypeMap.d.ts +12 -0
- package/dist/src/helpers/buildTypeMap.js +44 -0
- package/dist/src/helpers/buildTypeMap.js.map +1 -0
- package/dist/src/helpers/diagnostics.d.ts +4 -0
- package/dist/src/helpers/diagnostics.js +15 -0
- package/dist/src/helpers/diagnostics.js.map +1 -0
- package/dist/src/helpers/getImports.d.ts +2 -0
- package/dist/src/helpers/getImports.js +3 -0
- package/dist/src/helpers/getImports.js.map +1 -0
- package/dist/src/helpers/namespaces.d.ts +4 -0
- package/dist/src/helpers/namespaces.js +14 -0
- package/dist/src/helpers/namespaces.js.map +1 -0
- package/dist/src/helpers/visibilityHelperFile.d.ts +4 -0
- package/dist/src/helpers/visibilityHelperFile.js +57 -0
- package/dist/src/helpers/visibilityHelperFile.js.map +1 -0
- package/dist/src/lib.d.ts +4 -1
- package/dist/src/lib.js +14 -3
- package/dist/src/lib.js.map +1 -1
- package/dist/src/parseOptions.d.ts +8 -0
- package/dist/src/parseOptions.js +26 -0
- package/dist/src/parseOptions.js.map +1 -0
- package/dist/src/resolve/Resolvable.d.ts +32 -0
- package/dist/src/resolve/Resolvable.js +180 -0
- package/dist/src/resolve/Resolvable.js.map +1 -0
- package/dist/src/resolve/Resolvable_helpers.d.ts +42 -0
- package/dist/src/resolve/Resolvable_helpers.js +19 -0
- package/dist/src/resolve/Resolvable_helpers.js.map +1 -0
- package/dist/src/resolve/operationTypemap.d.ts +21 -0
- package/dist/src/resolve/operationTypemap.js +138 -0
- package/dist/src/resolve/operationTypemap.js.map +1 -0
- package/dist/src/resolve/types/Enum.d.ts +21 -0
- package/dist/src/resolve/types/Enum.js +61 -0
- package/dist/src/resolve/types/Enum.js.map +1 -0
- package/dist/src/resolve/types/Model.Indexed.d.ts +12 -0
- package/dist/src/resolve/types/Model.Indexed.js +69 -0
- package/dist/src/resolve/types/Model.Indexed.js.map +1 -0
- package/dist/src/resolve/types/Model.Shaped.d.ts +17 -0
- package/dist/src/resolve/types/Model.Shaped.js +210 -0
- package/dist/src/resolve/types/Model.Shaped.js.map +1 -0
- package/dist/src/resolve/types/Scalar.d.ts +9 -0
- package/dist/src/resolve/types/Scalar.js +109 -0
- package/dist/src/resolve/types/Scalar.js.map +1 -0
- package/dist/src/resolve/types/Simple.d.ts +11 -0
- package/dist/src/resolve/types/Simple.js +49 -0
- package/dist/src/resolve/types/Simple.js.map +1 -0
- package/dist/src/resolve/types/Tuple.d.ts +9 -0
- package/dist/src/resolve/types/Tuple.js +38 -0
- package/dist/src/resolve/types/Tuple.js.map +1 -0
- package/dist/src/resolve/types/Union.d.ts +9 -0
- package/dist/src/resolve/types/Union.js +36 -0
- package/dist/src/resolve/types/Union.js.map +1 -0
- package/eslint.config.js +12 -4
- package/package.json +2 -2
- package/src/emit_routedTypemap.ts +128 -0
- package/src/emit_routes.ts +108 -61
- package/src/emit_types.ts +137 -92
- package/src/emitter.ts +19 -107
- package/src/helpers/appendableString.ts +52 -0
- package/src/helpers/arrays.ts +21 -0
- package/src/{helper_autogenerateWarning.ts → helpers/autogenerateWarning.ts} +0 -1
- package/src/helpers/buildTypeMap.ts +72 -0
- package/src/helpers/diagnostics.ts +19 -0
- package/src/helpers/getImports.ts +9 -0
- package/src/helpers/namespaces.ts +18 -0
- package/src/helpers/visibilityHelperFile.ts +63 -0
- package/src/lib.ts +25 -4
- package/src/parseOptions.ts +26 -0
- package/src/resolve/Resolvable.ts +267 -0
- package/src/resolve/Resolvable_helpers.ts +65 -0
- package/src/resolve/operationTypemap.ts +212 -0
- package/src/resolve/types/Enum.ts +92 -0
- package/src/resolve/types/Model.Indexed.ts +113 -0
- package/src/resolve/types/Model.Shaped.ts +291 -0
- package/src/resolve/types/Scalar.ts +140 -0
- package/src/resolve/types/Simple.ts +88 -0
- package/src/resolve/types/Tuple.ts +56 -0
- package/src/resolve/types/Union.ts +52 -0
- package/test/helpers/integrationTest-novis.tsp +51 -0
- package/test/helpers/integrationTest.tsp +53 -0
- package/test/helpers/largeModel.tsp +40 -0
- package/test/{runner.ts → helpers/runner.ts} +1 -1
- package/test/helpers/ts.ts +11 -0
- package/test/helpers/wrapper.ts +144 -0
- package/test/routes/routes.target.ts +35 -0
- package/test/routes/routes.test.ts +22 -0
- package/test/typeguards/combined.test.ts +78 -0
- package/test/typeguards/enum.test.ts +10 -0
- package/test/typeguards/model.indexed.test.ts +68 -0
- package/test/typeguards/model.shaped.test.ts +38 -0
- package/test/typeguards/scalar.test.ts +62 -0
- package/test/typeguards/simple.test.ts +35 -0
- package/test/typeguards/tuple.test.ts +34 -0
- package/test/typeguards/union.test.ts +29 -0
- package/test/typemap/typemap-novis.target.ts +38 -0
- package/test/typemap/typemap.target.ts +39 -0
- package/test/typemap/typemap.test.ts +48 -0
- package/test/types/combined.test.ts +71 -0
- package/test/types/enum.test.ts +57 -0
- package/test/types/model.indexed.test.ts +46 -0
- package/test/types/model.shaped.test.ts +23 -0
- package/test/types/scalar.test.ts +53 -0
- package/test/types/simple.test.ts +20 -0
- package/test/types/tuple.test.ts +29 -0
- package/test/types/union.test.ts +20 -0
- package/tsconfig.json +1 -0
- package/dist/src/emit_mapped_types.d.ts +0 -2
- package/dist/src/emit_mapped_types.js +0 -124
- package/dist/src/emit_mapped_types.js.map +0 -1
- package/dist/src/emit_types_resolve.d.ts +0 -22
- package/dist/src/emit_types_resolve.js +0 -217
- package/dist/src/emit_types_resolve.js.map +0 -1
- package/dist/src/emit_types_typeguards.d.ts +0 -17
- package/dist/src/emit_types_typeguards.js +0 -121
- package/dist/src/emit_types_typeguards.js.map +0 -1
- package/dist/src/helper_autogenerateWarning.js.map +0 -1
- package/src/emit_mapped_types.ts +0 -155
- package/src/emit_types_resolve.ts +0 -280
- package/src/emit_types_typeguards.ts +0 -178
- package/test/main.test.ts +0 -83
- package/test/out/.gitkeep +0 -0
- package/test/targets/enum.routed-types.ts +0 -59
- package/test/targets/enum.routes.ts +0 -29
- package/test/targets/enum.target.ts +0 -39
- package/test/targets/enum.tsp +0 -36
- package/test/targets/pr8.routed-types.ts +0 -131
- package/test/targets/pr8.routes.ts +0 -30
- package/test/targets/pr8.target.ts +0 -97
- package/test/targets/pr8.tsp +0 -62
- package/test/targets/simple-routes.routed-types.ts +0 -64
- package/test/targets/simple-routes.routes.ts +0 -29
- package/test/targets/simple-routes.target.ts +0 -21
- package/test/targets/simple-routes.tsp +0 -23
- package/test/targets/union.routed-types.ts +0 -59
- package/test/targets/union.routes.ts +0 -23
- package/test/targets/union.target.ts +0 -59
- package/test/targets/union.tsp +0 -38
- package/test/targets/visibility.routed-types.ts +0 -81
- package/test/targets/visibility.routes.ts +0 -38
- package/test/targets/visibility.target.ts +0 -36
- package/test/targets/visibility.tsp +0 -49
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
import { getDoc } from "@typespec/compiler";
|
|
2
|
+
import { isVisible, Visibility } from "@typespec/http";
|
|
3
|
+
import { AppendableString } from "../../helpers/appendableString.js";
|
|
4
|
+
import { compareArrays } from "../../helpers/arrays.js";
|
|
5
|
+
import { namespaceListFromNamespace } from "../../helpers/namespaces.js";
|
|
6
|
+
import { Resolvable } from "../Resolvable.js";
|
|
7
|
+
import { Resolver, } from "../Resolvable_helpers.js";
|
|
8
|
+
export class ShapedModel extends Resolvable {
|
|
9
|
+
expectedTypeKind = "Model";
|
|
10
|
+
getProps() {
|
|
11
|
+
return Array.from(this._t.properties).map((p) => p[1]);
|
|
12
|
+
}
|
|
13
|
+
getPropVisibilityType(program, prop) {
|
|
14
|
+
if (!prop.decorators.some((decorator) => decorator.definition?.name === "@visibility"))
|
|
15
|
+
return null;
|
|
16
|
+
const ret = [];
|
|
17
|
+
if (isVisible(program, prop, Visibility.Read))
|
|
18
|
+
ret.push("Read");
|
|
19
|
+
if (isVisible(program, prop, Visibility.Create))
|
|
20
|
+
ret.push("Create");
|
|
21
|
+
if (isVisible(program, prop, Visibility.Update))
|
|
22
|
+
ret.push("Update");
|
|
23
|
+
if (isVisible(program, prop, Visibility.Delete))
|
|
24
|
+
ret.push("Delete");
|
|
25
|
+
if (isVisible(program, prop, Visibility.Query))
|
|
26
|
+
ret.push("Query");
|
|
27
|
+
return ret;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Checks whether or not any of the model's properties has @visibility modifier.
|
|
31
|
+
* Also returns true if any base model (in the entire chain) has a visibility OR if
|
|
32
|
+
* any nested type (in the model's properties) has a visibility.
|
|
33
|
+
*/
|
|
34
|
+
async hasVisibility(opts, out) {
|
|
35
|
+
if (await super.hasVisibility(opts, out))
|
|
36
|
+
return true;
|
|
37
|
+
// resolve base
|
|
38
|
+
if (this._t.baseModel &&
|
|
39
|
+
(await Resolvable.hasVisibility(this._t.baseModel, opts, out, this._t)))
|
|
40
|
+
return true;
|
|
41
|
+
// resolve props: check for decorators
|
|
42
|
+
const props = this.getProps();
|
|
43
|
+
if (props.some((prop) => prop.decorators.some((decorator) => decorator.definition?.name === "@visibility")))
|
|
44
|
+
return true;
|
|
45
|
+
// resolve props: check if any resolves to visibility
|
|
46
|
+
for (const prop of props) {
|
|
47
|
+
// check if this prop is somewhere up the resolution chain -> recursion -> skip (defaults to false)
|
|
48
|
+
const propNamespaces = namespaceListFromNamespace(prop.type.namespace);
|
|
49
|
+
if (opts.parents &&
|
|
50
|
+
opts.parents.some((parent) => {
|
|
51
|
+
const parentNamespaces = namespaceListFromNamespace(parent.namespace);
|
|
52
|
+
return (parent.kind === prop.type.kind &&
|
|
53
|
+
prop.type.name &&
|
|
54
|
+
parent.name === prop.type.name &&
|
|
55
|
+
propNamespaces &&
|
|
56
|
+
parentNamespaces &&
|
|
57
|
+
compareArrays(propNamespaces, parentNamespaces));
|
|
58
|
+
}))
|
|
59
|
+
continue;
|
|
60
|
+
// not recursion, resolve
|
|
61
|
+
if (await Resolvable.hasVisibility(prop.type, opts, out, this._t))
|
|
62
|
+
return true;
|
|
63
|
+
}
|
|
64
|
+
// nothing true
|
|
65
|
+
return false;
|
|
66
|
+
}
|
|
67
|
+
async type(opts, out) {
|
|
68
|
+
if (opts.emitDocs) {
|
|
69
|
+
out.doc = getDoc(opts.program, this._t);
|
|
70
|
+
}
|
|
71
|
+
const resolution = new AppendableString();
|
|
72
|
+
// check for base model (extended)
|
|
73
|
+
if (this._t.baseModel) {
|
|
74
|
+
const resolvedBase = await this.resolveNested(this._t.baseModel, opts, out);
|
|
75
|
+
out.imports.push(...resolvedBase.imports);
|
|
76
|
+
resolution.append(`${resolvedBase.resolved} & `);
|
|
77
|
+
}
|
|
78
|
+
const props = this.getProps();
|
|
79
|
+
const propVisibilityTypes = {};
|
|
80
|
+
if (props.length === 0) {
|
|
81
|
+
out.resolved.append("{}");
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
resolution.append("{\n");
|
|
85
|
+
for (let i = 0; i < props.length; i++) {
|
|
86
|
+
const prop = props[i];
|
|
87
|
+
// add doc strings
|
|
88
|
+
if (opts.emitDocs) {
|
|
89
|
+
const doc = getDoc(opts.program, prop);
|
|
90
|
+
if (doc)
|
|
91
|
+
resolution.addLine(`/** ${doc} */`, opts.nestlevel + 1);
|
|
92
|
+
}
|
|
93
|
+
// resolve prop
|
|
94
|
+
const resolved = await this.resolveNested(prop.type, opts, out);
|
|
95
|
+
resolution.addLine(`${prop.name}${prop.optional ? "?" : ""}: ${resolved.resolved}${i + 1 < this._t.properties.size ? "," : ""}`, opts.nestlevel + 1);
|
|
96
|
+
out.imports.push(...resolved.imports);
|
|
97
|
+
// if prop has visibility, save to vismap
|
|
98
|
+
const propVis = this.getPropVisibilityType(opts.program, prop);
|
|
99
|
+
if (propVis !== null || resolved.hasVisibility) {
|
|
100
|
+
propVisibilityTypes[prop.name] = { type: null, nested: "" };
|
|
101
|
+
propVisibilityTypes[prop.name].type = propVis;
|
|
102
|
+
propVisibilityTypes[prop.name].nested = resolved.visibilityMap;
|
|
103
|
+
}
|
|
104
|
+
}
|
|
105
|
+
// build prop visibility map
|
|
106
|
+
const visMap = new AppendableString();
|
|
107
|
+
const propVisibilityTypesArr = Object.entries(propVisibilityTypes).filter((p) => p[1].type !== null || p[1].nested);
|
|
108
|
+
if (propVisibilityTypesArr.length > 0) {
|
|
109
|
+
visMap.addLine("{");
|
|
110
|
+
let i = 1;
|
|
111
|
+
for (const [prop, propvis] of propVisibilityTypesArr) {
|
|
112
|
+
const visLine = `vis: [${(propvis.type ?? []).map((t) => `Lifecycle.${t}`).join(", ")}]`;
|
|
113
|
+
if (propvis.type !== null && !propvis.nested) {
|
|
114
|
+
visMap.addLine(`'${prop}': {${visLine}}`, opts.nestlevel + 1, "continued");
|
|
115
|
+
}
|
|
116
|
+
if (propvis.nested) {
|
|
117
|
+
visMap.addLine(`'${prop}': {`, opts.nestlevel + 1);
|
|
118
|
+
if (propvis.type)
|
|
119
|
+
visMap.addLine(`${visLine},`, opts.nestlevel + 2);
|
|
120
|
+
visMap.addLine(`nested: ${propvis.nested
|
|
121
|
+
.split("\n")
|
|
122
|
+
.map((l) => ` ${l}`)
|
|
123
|
+
.join("\n")
|
|
124
|
+
.trim()}`, opts.nestlevel + 2);
|
|
125
|
+
visMap.addLine("}", opts.nestlevel + 1, "continued");
|
|
126
|
+
}
|
|
127
|
+
visMap.addLine(i < propVisibilityTypesArr.length ? "," : "");
|
|
128
|
+
i++;
|
|
129
|
+
}
|
|
130
|
+
visMap.addLine("}", opts.nestlevel, "continued");
|
|
131
|
+
}
|
|
132
|
+
resolution.addLine("}", opts.nestlevel, "continued");
|
|
133
|
+
out.visibilityMap = visMap.value;
|
|
134
|
+
if (opts.parents &&
|
|
135
|
+
opts.parents.every((p) => p.kind !== "Model" || p.name === "Array" || p.name === "Record") &&
|
|
136
|
+
visMap.value) {
|
|
137
|
+
// this model is nested in something that's not a model and has visibility; inline filters
|
|
138
|
+
out.resolved.append(`FilterLifecycle<${resolution}, ${visMap}, V>`);
|
|
139
|
+
// this model is the root type or nested in a model; do not inline visibility filter
|
|
140
|
+
}
|
|
141
|
+
else {
|
|
142
|
+
out.resolved.append(resolution);
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
async typeguard(opts, out) {
|
|
147
|
+
out.resolved.append("\n");
|
|
148
|
+
if (this._t.baseModel) {
|
|
149
|
+
const resolvedBase = await this.resolveNested(this._t.baseModel, opts, out);
|
|
150
|
+
out.resolved.append(`${" ".repeat(opts.nestlevel)}${resolvedBase.resolved} &&`);
|
|
151
|
+
out.imports.push(...resolvedBase.imports);
|
|
152
|
+
// derived type does not have extended properties; fix by casting
|
|
153
|
+
opts.accessor = `(${opts.accessor} as any)`;
|
|
154
|
+
}
|
|
155
|
+
const props = this.getProps();
|
|
156
|
+
const propGuards = [];
|
|
157
|
+
for (const prop of props) {
|
|
158
|
+
const oldAccessor = opts.accessor;
|
|
159
|
+
opts.accessor = `${opts.accessor}['${prop.name}']`;
|
|
160
|
+
const resolved = await this.resolveNested(prop.type, opts, out);
|
|
161
|
+
opts.accessor = oldAccessor;
|
|
162
|
+
out.imports.push(...resolved.imports);
|
|
163
|
+
const visibility = this.getPropVisibilityType(opts.program, prop);
|
|
164
|
+
let guard = " ".repeat(out.resolved.value.endsWith("&") ? 1 : opts.nestlevel * 2);
|
|
165
|
+
if (visibility !== null) {
|
|
166
|
+
guard += `((vis as any) !== Lifecycle.All && ![${(visibility ?? []).map((t) => `Lifecycle.${t}`).join(", ")}].includes(vis) ? !('${prop.name}' in ${opts.accessor}) : (`;
|
|
167
|
+
}
|
|
168
|
+
if (prop.type.kind === "Intrinsic" &&
|
|
169
|
+
["never", "void"].includes(prop.type.name)) {
|
|
170
|
+
// some special intrinsic types need special treatment
|
|
171
|
+
switch (prop.type.name) {
|
|
172
|
+
case "never":
|
|
173
|
+
guard += `!('${prop.name}' in ${opts.accessor})`;
|
|
174
|
+
break;
|
|
175
|
+
case "void":
|
|
176
|
+
guard += `${opts.accessor}['${prop.name}'] === undefined`;
|
|
177
|
+
break;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
guard += prop.optional
|
|
182
|
+
? `${opts.accessor}['${prop.name}'] === undefined || `
|
|
183
|
+
: `${opts.accessor}['${prop.name}'] !== undefined && `;
|
|
184
|
+
guard += `(${resolved.resolved}`;
|
|
185
|
+
guard += resolved.resolved.value.endsWith("\n")
|
|
186
|
+
? " ".repeat(opts.nestlevel)
|
|
187
|
+
: "";
|
|
188
|
+
guard += ")";
|
|
189
|
+
}
|
|
190
|
+
if (visibility !== null)
|
|
191
|
+
guard += "))";
|
|
192
|
+
propGuards.push(guard);
|
|
193
|
+
}
|
|
194
|
+
out.resolved.append(propGuards.join(" &&\n"));
|
|
195
|
+
out.resolved.addLine("", opts.nestlevel);
|
|
196
|
+
}
|
|
197
|
+
transformKnownType(opts, out) {
|
|
198
|
+
// If this is a known type, it can't be the root of this resolution tree,
|
|
199
|
+
// because of the "originalTypeReady" flag.
|
|
200
|
+
// If it also has visibility, it must have its own visibility map,
|
|
201
|
+
// which is baked into the type definition, so it shouldn't be returned now.
|
|
202
|
+
if (this._r === Resolver.Type && out.hasVisibility) {
|
|
203
|
+
out.visibilityMap = "";
|
|
204
|
+
const newResolved = `${out.resolved}<V>`;
|
|
205
|
+
out.resolved.clear().append(newResolved);
|
|
206
|
+
// ret.visibilityMap = `${(t as any).name}_VisMap`;
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
//# sourceMappingURL=Model.Shaped.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Model.Shaped.js","sourceRoot":"","sources":["../../../../src/resolve/types/Model.Shaped.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Scalar } from "@typespec/compiler";
|
|
2
|
+
import { Resolvable } from "../Resolvable.js";
|
|
3
|
+
import { Resolver, ResolverOptions, ResolverResult } from "../Resolvable_helpers.js";
|
|
4
|
+
export declare class ResolvableScalar extends Resolvable<Scalar> {
|
|
5
|
+
protected expectedTypeKind: string;
|
|
6
|
+
private dateTypes;
|
|
7
|
+
protected type(opts: ResolverOptions<Resolver.Type>, out: ResolverResult<Resolver.Type>): Promise<void>;
|
|
8
|
+
protected typeguard(opts: ResolverOptions<Resolver.Typeguard>, out: ResolverResult<Resolver.Typeguard>): Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { Resolvable } from "../Resolvable.js";
|
|
2
|
+
export class ResolvableScalar extends Resolvable {
|
|
3
|
+
expectedTypeKind = "Scalar";
|
|
4
|
+
dateTypes = [
|
|
5
|
+
"offsetDateTime",
|
|
6
|
+
"plainDate",
|
|
7
|
+
"utcDateTime",
|
|
8
|
+
"unixTimestamp32",
|
|
9
|
+
];
|
|
10
|
+
async type(opts, out) {
|
|
11
|
+
if (this.dateTypes.includes(this._t.name)) {
|
|
12
|
+
switch (this._t.name) {
|
|
13
|
+
case "offsetDateTime":
|
|
14
|
+
case "plainDate":
|
|
15
|
+
case "utcDateTime":
|
|
16
|
+
out.resolved.append(opts.options["serializable-date-types"] ? "string" : "Date");
|
|
17
|
+
break;
|
|
18
|
+
case "unixTimestamp32":
|
|
19
|
+
out.resolved.append(opts.options["serializable-date-types"] ? "number" : "Date");
|
|
20
|
+
break;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
else if (this._t.baseScalar) {
|
|
24
|
+
out.resolved.append((await this.resolveNested(this._t.baseScalar, opts, out)).resolved);
|
|
25
|
+
}
|
|
26
|
+
else {
|
|
27
|
+
switch (this._t.name) {
|
|
28
|
+
case "boolean":
|
|
29
|
+
out.resolved.append("boolean");
|
|
30
|
+
break;
|
|
31
|
+
case "bytes":
|
|
32
|
+
out.resolved.append("Uint8Array");
|
|
33
|
+
break;
|
|
34
|
+
case "duration":
|
|
35
|
+
out.resolved.append("number");
|
|
36
|
+
break;
|
|
37
|
+
case "numeric":
|
|
38
|
+
out.resolved.append("number");
|
|
39
|
+
break;
|
|
40
|
+
case "plainTime":
|
|
41
|
+
out.resolved.append("string");
|
|
42
|
+
break;
|
|
43
|
+
case "string":
|
|
44
|
+
out.resolved.append("string");
|
|
45
|
+
break;
|
|
46
|
+
case "url":
|
|
47
|
+
out.resolved.append("string");
|
|
48
|
+
break;
|
|
49
|
+
default:
|
|
50
|
+
this.diagnostic("resolve-unresolved-scalar", `Could not resolve scalar ${this._t.name}`, "error");
|
|
51
|
+
out.resolved.append("unknown");
|
|
52
|
+
break;
|
|
53
|
+
}
|
|
54
|
+
}
|
|
55
|
+
}
|
|
56
|
+
async typeguard(opts, out) {
|
|
57
|
+
if (this.dateTypes.includes(this._t.name)) {
|
|
58
|
+
switch (this._t.name) {
|
|
59
|
+
case "offsetDateTime":
|
|
60
|
+
case "plainDate":
|
|
61
|
+
case "utcDateTime":
|
|
62
|
+
out.resolved.append(opts.options["serializable-date-types"]
|
|
63
|
+
? `typeof ${opts.accessor} === 'string'`
|
|
64
|
+
: `${opts.accessor} instanceof Date`);
|
|
65
|
+
break;
|
|
66
|
+
case "unixTimestamp32":
|
|
67
|
+
out.resolved.append(opts.options["serializable-date-types"]
|
|
68
|
+
? `typeof ${opts.accessor} === 'number'`
|
|
69
|
+
: `${opts.accessor} instanceof Date`);
|
|
70
|
+
break;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
else if (this._t.baseScalar) {
|
|
74
|
+
out.resolved.append((await this.resolveNested(this._t.baseScalar, opts, out)).resolved);
|
|
75
|
+
}
|
|
76
|
+
else if (this._t.name === "bytes") {
|
|
77
|
+
out.resolved.append(`${opts.accessor} instanceof Uint8Array`);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
out.resolved.append(`typeof ${opts.accessor} === '`);
|
|
81
|
+
switch (this._t.name) {
|
|
82
|
+
case "boolean":
|
|
83
|
+
out.resolved.append("boolean");
|
|
84
|
+
break;
|
|
85
|
+
case "duration":
|
|
86
|
+
out.resolved.append("number");
|
|
87
|
+
break;
|
|
88
|
+
case "numeric":
|
|
89
|
+
out.resolved.append("number");
|
|
90
|
+
break;
|
|
91
|
+
case "plainTime":
|
|
92
|
+
out.resolved.append("string");
|
|
93
|
+
break;
|
|
94
|
+
case "string":
|
|
95
|
+
out.resolved.append("string");
|
|
96
|
+
break;
|
|
97
|
+
case "url":
|
|
98
|
+
out.resolved.append("string");
|
|
99
|
+
break;
|
|
100
|
+
default:
|
|
101
|
+
this.diagnostic("resolve-unresolved-scalar", `Could not create typeguard for scalar ${this._t.name}`, "error");
|
|
102
|
+
out.resolved.append("unknown");
|
|
103
|
+
break;
|
|
104
|
+
}
|
|
105
|
+
out.resolved.append("'");
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=Scalar.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Scalar.js","sourceRoot":"","sources":["../../../../src/resolve/types/Scalar.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { Type } from "@typespec/compiler";
|
|
2
|
+
import { Resolvable } from "../Resolvable.js";
|
|
3
|
+
import { Resolver, ResolverOptions, ResolverResult } from "../Resolvable_helpers.js";
|
|
4
|
+
export declare class ResolvableSimple extends Resolvable<Type> {
|
|
5
|
+
protected expectedTypeKind: string;
|
|
6
|
+
static AllowedTypeKinds: readonly ["Boolean", "Intrinsic", "Number", "String", "TemplateParameter"];
|
|
7
|
+
private static typeMap;
|
|
8
|
+
protected type(opts: ResolverOptions<Resolver.Type>, out: ResolverResult<Resolver.Type>): Promise<void>;
|
|
9
|
+
protected typeguard(opts: ResolverOptions<Resolver.Typeguard>, out: ResolverResult<Resolver.Typeguard>): Promise<void>;
|
|
10
|
+
protected validate(): void;
|
|
11
|
+
}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { Resolvable } from "../Resolvable.js";
|
|
2
|
+
const allowedTypeKinds = [
|
|
3
|
+
"Boolean",
|
|
4
|
+
"Intrinsic",
|
|
5
|
+
"Number",
|
|
6
|
+
"String",
|
|
7
|
+
"TemplateParameter",
|
|
8
|
+
];
|
|
9
|
+
export class ResolvableSimple extends Resolvable {
|
|
10
|
+
expectedTypeKind = ""; // placeholder as required; validate is overridden
|
|
11
|
+
static AllowedTypeKinds = allowedTypeKinds;
|
|
12
|
+
static typeMap = {
|
|
13
|
+
Boolean: (t) => (t.value ? "true" : "false"),
|
|
14
|
+
Intrinsic: (t) => t.name,
|
|
15
|
+
Number: (t) => t.valueAsString,
|
|
16
|
+
String: (t) => `'${t.value}'`,
|
|
17
|
+
TemplateParameter: () => "unknown",
|
|
18
|
+
};
|
|
19
|
+
async type(opts, out) {
|
|
20
|
+
const mapped = ResolvableSimple.typeMap[this._t.kind]; // check is in validate()
|
|
21
|
+
out.resolved.append(mapped(this._t));
|
|
22
|
+
}
|
|
23
|
+
async typeguard(opts, out) {
|
|
24
|
+
const mapped = ResolvableSimple.typeMap[this._t.kind]; // check is in validate()
|
|
25
|
+
const v = mapped(this._t);
|
|
26
|
+
// some special intrinsic types are handled directly in the model property
|
|
27
|
+
switch (v) {
|
|
28
|
+
case "unknown":
|
|
29
|
+
out.resolved.append("true");
|
|
30
|
+
break;
|
|
31
|
+
case "never":
|
|
32
|
+
out.resolved.append("false");
|
|
33
|
+
break; // instantly fails all type checks
|
|
34
|
+
case "void":
|
|
35
|
+
out.resolved.append(`${opts.accessor} === undefined`);
|
|
36
|
+
break;
|
|
37
|
+
default:
|
|
38
|
+
out.resolved.append(`${opts.accessor} === ${v}`);
|
|
39
|
+
break;
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
validate() {
|
|
43
|
+
if (!ResolvableSimple.AllowedTypeKinds.includes(this._t.kind)) {
|
|
44
|
+
this.diagnostic("typeclass-mismatch", `Tried resolving type ${this._t.kind} as primitive`, "error");
|
|
45
|
+
throw new TypeError(`Type-kind/class mismatch: tried resolving type ${this._t.kind} as primitive`);
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=Simple.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Simple.js","sourceRoot":"","sources":["../../../../src/resolve/types/Simple.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAO9C,MAAM,gBAAgB,GAAG;IACvB,SAAS;IACT,WAAW;IACX,QAAQ;IACR,QAAQ;IACR,mBAAmB;CACX,CAAC;AAEX,MAAM,OAAO,gBAAiB,SAAQ,UAAgB;IAC1C,gBAAgB,GAAG,EAAE,CAAC,CAAC,kDAAkD;IAC5E,MAAM,CAAC,gBAAgB,GAAG,gBAAgB,CAAC;IAE1C,MAAM,CAAC,OAAO,GAGlB;QACF,OAAO,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAE,CAAS,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QACrD,SAAS,EAAE,CAAC,CAAC,EAAE,EAAE,CAAE,CAAmB,CAAC,IAAI;QAC3C,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAE,CAAoB,CAAC,aAAa;QAClD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAK,CAAmB,CAAC,KAAK,GAAG;QAChD,iBAAiB,EAAE,GAAG,EAAE,CAAC,SAAS;KACnC,CAAC;IAEQ,KAAK,CAAC,IAAI,CAClB,IAAoC,EACpC,GAAkC;QAElC,MAAM,MAAM,GACV,gBAAgB,CAAC,OAAO,CACtB,IAAI,CAAC,EAAE,CAAC,IAAyC,CAClD,CAAC,CAAC,yBAAyB;QAC9B,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC;IACvC,CAAC;IAES,KAAK,CAAC,SAAS,CACvB,IAAyC,EACzC,GAAuC;QAEvC,MAAM,MAAM,GACV,gBAAgB,CAAC,OAAO,CACtB,IAAI,CAAC,EAAE,CAAC,IAAyC,CAClD,CAAC,CAAC,yBAAyB;QAC9B,MAAM,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE1B,0EAA0E;QAC1E,QAAQ,CAAC,EAAE,CAAC;YACV,KAAK,SAAS;gBACZ,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAC5B,MAAM;YACR,KAAK,OAAO;gBACV,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;gBAC7B,MAAM,CAAC,kCAAkC;YAC3C,KAAK,MAAM;gBACT,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,gBAAgB,CAAC,CAAC;gBACtD,MAAM;YAER;gBACE,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,GAAG,IAAI,CAAC,QAAQ,QAAQ,CAAC,EAAE,CAAC,CAAC;gBACjD,MAAM;QACV,CAAC;IACH,CAAC;IAES,QAAQ;QAChB,IAAI,CAAC,gBAAgB,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC,IAAW,CAAC,EAAE,CAAC;YACrE,IAAI,CAAC,UAAU,CACb,oBAAoB,EACpB,wBAAwB,IAAI,CAAC,EAAE,CAAC,IAAI,eAAe,EACnD,OAAO,CACR,CAAC;YACF,MAAM,IAAI,SAAS,CACjB,kDAAkD,IAAI,CAAC,EAAE,CAAC,IAAI,eAAe,CAC9E,CAAC;QACJ,CAAC;IACH,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Tuple } from "@typespec/compiler";
|
|
2
|
+
import { Resolvable } from "../Resolvable.js";
|
|
3
|
+
import { Resolver, ResolverOptions, ResolverResult } from "../Resolvable_helpers.js";
|
|
4
|
+
export declare class ResolvableTuple extends Resolvable<Tuple> {
|
|
5
|
+
protected expectedTypeKind: string;
|
|
6
|
+
hasVisibility(opts: ResolverOptions<Resolver>, out: ResolverResult<Resolver>): Promise<boolean>;
|
|
7
|
+
protected type(opts: ResolverOptions<Resolver.Type>, out: ResolverResult<Resolver.Type>): Promise<void>;
|
|
8
|
+
protected typeguard(opts: ResolverOptions<Resolver.Typeguard>, out: ResolverResult<Resolver.Typeguard>): Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
import { Resolvable } from "../Resolvable.js";
|
|
2
|
+
export class ResolvableTuple extends Resolvable {
|
|
3
|
+
expectedTypeKind = "Tuple";
|
|
4
|
+
async hasVisibility(opts, out) {
|
|
5
|
+
if (await super.hasVisibility(opts, out))
|
|
6
|
+
return true;
|
|
7
|
+
for (const v of this._t.values) {
|
|
8
|
+
if (await Resolvable.hasVisibility(v, opts, out, this._t))
|
|
9
|
+
return true;
|
|
10
|
+
}
|
|
11
|
+
return false;
|
|
12
|
+
}
|
|
13
|
+
async type(opts, out) {
|
|
14
|
+
const results = [];
|
|
15
|
+
for (const v of this._t.values) {
|
|
16
|
+
const resolved = await this.resolveNested(v, opts, out);
|
|
17
|
+
out.imports.push(...resolved.imports);
|
|
18
|
+
results.push(resolved.resolved.value);
|
|
19
|
+
}
|
|
20
|
+
out.resolved.append(`[${results.join(", ")}]`);
|
|
21
|
+
}
|
|
22
|
+
async typeguard(opts, out) {
|
|
23
|
+
const results = [];
|
|
24
|
+
const oldAccessor = opts.accessor;
|
|
25
|
+
let i = 0;
|
|
26
|
+
for (const v of this._t.values) {
|
|
27
|
+
opts.accessor = `${opts.accessor}[${i}]`;
|
|
28
|
+
const resolved = await this.resolveNested(v, opts, out);
|
|
29
|
+
opts.accessor = oldAccessor;
|
|
30
|
+
out.imports.push(...resolved.imports);
|
|
31
|
+
results.push(resolved.resolved.value);
|
|
32
|
+
i++;
|
|
33
|
+
}
|
|
34
|
+
opts.accessor = oldAccessor;
|
|
35
|
+
out.resolved.append(`Array.isArray(${opts.accessor}) && ${results.map((g) => `(${g})`).join(" && ")}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=Tuple.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Tuple.js","sourceRoot":"","sources":["../../../../src/resolve/types/Tuple.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAO9C,MAAM,OAAO,eAAgB,SAAQ,UAAiB;IAC1C,gBAAgB,GAAG,OAAO,CAAC;IAErB,KAAK,CAAC,aAAa,CACjC,IAA+B,EAC/B,GAA6B;QAE7B,IAAI,MAAM,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACtD,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,MAAM,UAAU,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;gBAAE,OAAO,IAAI,CAAC;QACzE,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAES,KAAK,CAAC,IAAI,CAClB,IAAoC,EACpC,GAAkC;QAElC,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;YACxD,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;QACD,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;IACjD,CAAC;IAES,KAAK,CAAC,SAAS,CACvB,IAAyC,EACzC,GAAuC;QAEvC,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,CAAC;QAClC,IAAI,CAAC,GAAG,CAAC,CAAC;QACV,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC;YAC/B,IAAI,CAAC,QAAQ,GAAG,GAAG,IAAI,CAAC,QAAQ,IAAI,CAAC,GAAG,CAAC;YACzC,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;YACxD,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;YAC5B,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;YACtC,CAAC,EAAE,CAAC;QACN,CAAC;QACD,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC;QAC5B,GAAG,CAAC,QAAQ,CAAC,MAAM,CACjB,iBAAiB,IAAI,CAAC,QAAQ,QAAQ,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAClF,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { Union } from "@typespec/compiler";
|
|
2
|
+
import { Resolvable } from "../Resolvable.js";
|
|
3
|
+
import { Resolver, ResolverOptions, ResolverResult } from "../Resolvable_helpers.js";
|
|
4
|
+
export declare class ResolvableUnion extends Resolvable<Union> {
|
|
5
|
+
protected expectedTypeKind: string;
|
|
6
|
+
hasVisibility(opts: ResolverOptions<Resolver>, out: ResolverResult<Resolver>): Promise<boolean>;
|
|
7
|
+
protected type(opts: ResolverOptions<Resolver.Type>, out: ResolverResult<Resolver.Type>): Promise<void>;
|
|
8
|
+
protected typeguard(opts: ResolverOptions<Resolver.Typeguard>, out: ResolverResult<Resolver.Typeguard>): Promise<void>;
|
|
9
|
+
}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
import { getDoc } from "@typespec/compiler";
|
|
2
|
+
import { Resolvable } from "../Resolvable.js";
|
|
3
|
+
export class ResolvableUnion extends Resolvable {
|
|
4
|
+
expectedTypeKind = "Union";
|
|
5
|
+
async hasVisibility(opts, out) {
|
|
6
|
+
if (await super.hasVisibility(opts, out))
|
|
7
|
+
return true;
|
|
8
|
+
for (const v of Array.from(this._t.variants)) {
|
|
9
|
+
if (await Resolvable.hasVisibility(v[1].type, opts, out, this._t))
|
|
10
|
+
return true;
|
|
11
|
+
}
|
|
12
|
+
return false;
|
|
13
|
+
}
|
|
14
|
+
async type(opts, out) {
|
|
15
|
+
if (opts.emitDocs) {
|
|
16
|
+
out.doc = getDoc(opts.program, this._t);
|
|
17
|
+
}
|
|
18
|
+
const results = [];
|
|
19
|
+
for (const v of Array.from(this._t.variants)) {
|
|
20
|
+
const resolved = await this.resolveNested(v[1].type, opts, out, false);
|
|
21
|
+
out.imports.push(...resolved.imports);
|
|
22
|
+
results.push(resolved.resolved.value);
|
|
23
|
+
}
|
|
24
|
+
out.resolved.append(results.join(" | "));
|
|
25
|
+
}
|
|
26
|
+
async typeguard(opts, out) {
|
|
27
|
+
const results = [];
|
|
28
|
+
for (const v of Array.from(this._t.variants)) {
|
|
29
|
+
const resolved = await this.resolveNested(v[1].type, opts, out);
|
|
30
|
+
out.imports.push(...resolved.imports);
|
|
31
|
+
results.push(`(${resolved.resolved.value})`);
|
|
32
|
+
}
|
|
33
|
+
out.resolved.append(results.join(" || "));
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
//# sourceMappingURL=Union.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"Union.js","sourceRoot":"","sources":["../../../../src/resolve/types/Union.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAS,MAAM,oBAAoB,CAAC;AACnD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAO9C,MAAM,OAAO,eAAgB,SAAQ,UAAiB;IAC1C,gBAAgB,GAAG,OAAO,CAAC;IAErB,KAAK,CAAC,aAAa,CACjC,IAA+B,EAC/B,GAA6B;QAE7B,IAAI,MAAM,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC;YAAE,OAAO,IAAI,CAAC;QACtD,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7C,IAAI,MAAM,UAAU,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,CAAC,EAAE,CAAC;gBAC/D,OAAO,IAAI,CAAC;QAChB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAES,KAAK,CAAC,IAAI,CAClB,IAAoC,EACpC,GAAkC;QAElC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;YAClB,GAAG,CAAC,GAAG,GAAG,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC;QAC1C,CAAC;QACD,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;YACvE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;QACD,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC3C,CAAC;IAES,KAAK,CAAC,SAAS,CACvB,IAAyC,EACzC,GAAuC;QAEvC,MAAM,OAAO,GAAa,EAAE,CAAC;QAC7B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7C,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,CAAC,CAAC;YAChE,GAAG,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAC;YACtC,OAAO,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,GAAG,CAAC,CAAC;QAC/C,CAAC;QACD,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC5C,CAAC;CACF"}
|
package/eslint.config.js
CHANGED
|
@@ -3,16 +3,24 @@ import eslint from "@eslint/js";
|
|
|
3
3
|
import tsEslint from "typescript-eslint";
|
|
4
4
|
|
|
5
5
|
export default tsEslint.config(
|
|
6
|
+
eslint.configs.recommended,
|
|
7
|
+
...tsEslint.configs.recommended,
|
|
6
8
|
{
|
|
7
9
|
ignores: [
|
|
8
10
|
"**/dist/**/*",
|
|
9
11
|
"**/.temp/**/*",
|
|
10
12
|
"**/*.md",
|
|
11
13
|
"**/node_modules/**/*",
|
|
12
|
-
"
|
|
13
|
-
"**/test/targets/**/*",
|
|
14
|
+
"**/*.target.*",
|
|
14
15
|
],
|
|
16
|
+
rules: {
|
|
17
|
+
"@typescript-eslint/no-explicit-any": "off",
|
|
18
|
+
},
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
files: ["**/*.target.*"],
|
|
22
|
+
rules: {
|
|
23
|
+
"@typescript-eslint/no-unused-vars": "off",
|
|
24
|
+
},
|
|
15
25
|
},
|
|
16
|
-
eslint.configs.recommended,
|
|
17
|
-
...tsEslint.configs.recommended,
|
|
18
26
|
);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "typespec-typescript-emitter",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.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",
|
|
@@ -47,6 +47,6 @@
|
|
|
47
47
|
"format:check": "prettier --check .",
|
|
48
48
|
"prepare": "husky",
|
|
49
49
|
"prepublishOnly": "npm run build",
|
|
50
|
-
"test": "vitest run"
|
|
50
|
+
"test": "npm run build && vitest run"
|
|
51
51
|
}
|
|
52
52
|
}
|