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
package/dist/src/emitter.js
CHANGED
|
@@ -1,80 +1,22 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import { emitRoutedTypemap } from "./emit_mapped_types.js";
|
|
1
|
+
import { emitRoutedTypemap } from "./emit_routedTypemap.js";
|
|
3
2
|
import { emitRoutes } from "./emit_routes.js";
|
|
4
|
-
import emitTypes from "./emit_types.js";
|
|
5
|
-
import
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
};
|
|
3
|
+
import { emitTypes } from "./emit_types.js";
|
|
4
|
+
import { buildTypeMap } from "./helpers/buildTypeMap.js";
|
|
5
|
+
import { setContext } from "./helpers/diagnostics.js";
|
|
6
|
+
import { emitVisibilityHelperFile } from "./helpers/visibilityHelperFile.js";
|
|
7
|
+
import { parseOptions } from "./parseOptions.js";
|
|
9
8
|
export async function $onEmit(context) {
|
|
10
|
-
if (
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
};
|
|
23
|
-
console.log(`Writing routes to ${options["out-dir"]}`);
|
|
24
|
-
let targetNamespaceFound = false;
|
|
25
|
-
let routesObject = "";
|
|
26
|
-
let routedTypemap = "";
|
|
27
|
-
let typeFiles = {
|
|
28
|
-
files: {},
|
|
29
|
-
typeguardedNames: [],
|
|
30
|
-
};
|
|
31
|
-
navigateProgram(context.program, {
|
|
32
|
-
namespace(n) {
|
|
33
|
-
if (!targetNamespaceFound &&
|
|
34
|
-
n.name === context.options["root-namespace"]) {
|
|
35
|
-
targetNamespaceFound = true;
|
|
36
|
-
if (options["enable-types"] || options["enable-typeguards"])
|
|
37
|
-
typeFiles = emitTypes(context, n, options);
|
|
38
|
-
if (options["enable-routes"]) {
|
|
39
|
-
routesObject = emitRoutes(context, n);
|
|
40
|
-
}
|
|
41
|
-
if (options["enable-routed-typemap"]) {
|
|
42
|
-
routedTypemap = emitRoutedTypemap(context, n);
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
},
|
|
46
|
-
});
|
|
47
|
-
if (!targetNamespaceFound)
|
|
48
|
-
throw new Error("Targeted root namespace not found.");
|
|
49
|
-
// routes object
|
|
50
|
-
if (options["enable-routes"]) {
|
|
51
|
-
if (!routesObject)
|
|
52
|
-
throw new Error("Routes object empty.");
|
|
53
|
-
await emitFile(context.program, {
|
|
54
|
-
path: resolvePath(options["out-dir"], `routes_${options["root-namespace"]}.ts`),
|
|
55
|
-
content: `/* eslint-disable */\n\n${autogenerateWarning}${routesObject}`,
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
// routed typemap
|
|
59
|
-
if (options["enable-routed-typemap"]) {
|
|
60
|
-
if (!routedTypemap)
|
|
61
|
-
throw new Error("Routed typemap empty.");
|
|
62
|
-
await emitFile(context.program, {
|
|
63
|
-
path: resolvePath(options["out-dir"], `routedTypemap_${options["root-namespace"]}.ts`),
|
|
64
|
-
content: `/* eslint-disable */\n\n${autogenerateWarning}${routedTypemap}`,
|
|
65
|
-
});
|
|
66
|
-
}
|
|
67
|
-
// type files
|
|
68
|
-
if (options["enable-types"] || options["enable-typeguards"]) {
|
|
69
|
-
const typeFileArr = Object.entries(typeFiles.files);
|
|
70
|
-
for (let i = 0; i < typeFileArr.length; i++) {
|
|
71
|
-
if (typeFileArr[i][1])
|
|
72
|
-
await emitFile(context.program, {
|
|
73
|
-
path: resolvePath(options["out-dir"], `${typeFileArr[i][0]}.ts`),
|
|
74
|
-
content: `/* eslint-disable */\n\n${autogenerateWarning}${typeFileArr[i][1]}`,
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
}
|
|
9
|
+
if (context.program.compilerOptions.noEmit)
|
|
10
|
+
return;
|
|
11
|
+
setContext(context);
|
|
12
|
+
parseOptions(context);
|
|
13
|
+
const typeMap = buildTypeMap(context.program, context.options);
|
|
14
|
+
if (context.options["enable-types"])
|
|
15
|
+
await emitTypes(context.program, context.options, typeMap);
|
|
16
|
+
if (context.options["enable-routed-typemap"])
|
|
17
|
+
await emitRoutedTypemap(context.program, context.options, typeMap);
|
|
18
|
+
if (context.options["enable-routes"])
|
|
19
|
+
await emitRoutes(context.program, context.options);
|
|
20
|
+
await emitVisibilityHelperFile(context.program, context.options);
|
|
79
21
|
}
|
|
80
22
|
//# sourceMappingURL=emitter.js.map
|
package/dist/src/emitter.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/emitter.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"emitter.js","sourceRoot":"","sources":["../../src/emitter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,MAAM,yBAAyB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,2BAA2B,CAAC;AACzD,OAAO,EAAE,UAAU,EAAE,MAAM,0BAA0B,CAAC;AACtD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAE7E,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAEjD,MAAM,CAAC,KAAK,UAAU,OAAO,CAAC,OAAoC;IAChE,IAAI,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC,MAAM;QAAE,OAAO;IACnD,UAAU,CAAC,OAAO,CAAC,CAAC;IACpB,YAAY,CAAC,OAAO,CAAC,CAAC;IAEtB,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAE/D,IAAI,OAAO,CAAC,OAAO,CAAC,cAAc,CAAC;QACjC,MAAM,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IAC7D,IAAI,OAAO,CAAC,OAAO,CAAC,uBAAuB,CAAC;QAC1C,MAAM,iBAAiB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACrE,IAAI,OAAO,CAAC,OAAO,CAAC,eAAe,CAAC;QAClC,MAAM,UAAU,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;IAErD,MAAM,wBAAwB,CAAC,OAAO,CAAC,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;AACnE,CAAC"}
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This class provides a string type which can only be appended to but not overwritten.
|
|
3
|
+
*/
|
|
4
|
+
export declare class AppendableString {
|
|
5
|
+
constructor(init?: string);
|
|
6
|
+
private _content;
|
|
7
|
+
get value(): string;
|
|
8
|
+
append(s?: string | AppendableString): void;
|
|
9
|
+
/** Changes in place, returning the new value */
|
|
10
|
+
addLine(str: string | AppendableString, tabs?: number, continued?: "continued" | "line-end"): this;
|
|
11
|
+
[Symbol.toPrimitive](hint: string): string | boolean;
|
|
12
|
+
/** Removes the last x characters */
|
|
13
|
+
dropLast(n?: number): this;
|
|
14
|
+
clear(): this;
|
|
15
|
+
}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* This class provides a string type which can only be appended to but not overwritten.
|
|
3
|
+
*/
|
|
4
|
+
export class AppendableString {
|
|
5
|
+
constructor(init) {
|
|
6
|
+
this._content = init ?? "";
|
|
7
|
+
}
|
|
8
|
+
_content;
|
|
9
|
+
get value() {
|
|
10
|
+
return this._content;
|
|
11
|
+
}
|
|
12
|
+
append(s) {
|
|
13
|
+
this._content += s ?? "";
|
|
14
|
+
}
|
|
15
|
+
/** Changes in place, returning the new value */
|
|
16
|
+
addLine(str, tabs, continued = "line-end") {
|
|
17
|
+
this._content += `${" ".repeat(tabs ?? 0)}${str}${continued === "continued" ? "" : "\n"}`;
|
|
18
|
+
return this;
|
|
19
|
+
}
|
|
20
|
+
[Symbol.toPrimitive](hint) {
|
|
21
|
+
switch (hint) {
|
|
22
|
+
case "default":
|
|
23
|
+
case "string":
|
|
24
|
+
return this.value;
|
|
25
|
+
case "boolean":
|
|
26
|
+
return !!this.value;
|
|
27
|
+
default:
|
|
28
|
+
throw new TypeError(`Appendable string cannot be coerced to ${hint}`);
|
|
29
|
+
}
|
|
30
|
+
}
|
|
31
|
+
/** Removes the last x characters */
|
|
32
|
+
dropLast(n = 1) {
|
|
33
|
+
this._content = this._content.substring(0, this._content.length - n);
|
|
34
|
+
return this;
|
|
35
|
+
}
|
|
36
|
+
clear() {
|
|
37
|
+
this._content = "";
|
|
38
|
+
return this;
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=appendableString.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"appendableString.js","sourceRoot":"","sources":["../../../src/helpers/appendableString.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,OAAO,gBAAgB;IAC3B,YAAY,IAAa;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,IAAI,EAAE,CAAC;IAC7B,CAAC;IAEO,QAAQ,CAAS;IAEzB,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;IACvB,CAAC;IACD,MAAM,CAAC,CAA6B;QAClC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;IAC3B,CAAC;IAED,gDAAgD;IAChD,OAAO,CACL,GAA8B,EAC9B,IAAa,EACb,YAAsC,UAAU;QAEhD,IAAI,CAAC,QAAQ,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,GAAG,GAAG,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;QAC3F,OAAO,IAAI,CAAC;IACd,CAAC;IAED,CAAC,MAAM,CAAC,WAAW,CAAC,CAAC,IAAY;QAC/B,QAAQ,IAAI,EAAE,CAAC;YACb,KAAK,SAAS,CAAC;YACf,KAAK,QAAQ;gBACX,OAAO,IAAI,CAAC,KAAK,CAAC;YAEpB,KAAK,SAAS;gBACZ,OAAO,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC;YAEtB;gBACE,MAAM,IAAI,SAAS,CAAC,0CAA0C,IAAI,EAAE,CAAC,CAAC;QAC1E,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,QAAQ,CAAC,IAAY,CAAC;QACpB,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACrE,OAAO,IAAI,CAAC;IACd,CAAC;IAED,KAAK;QACH,IAAI,CAAC,QAAQ,GAAG,EAAE,CAAC;QACnB,OAAO,IAAI,CAAC;IACd,CAAC;CACF"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export const compareArrays = (a, b) => {
|
|
2
|
+
if (a.length !== b.length)
|
|
3
|
+
return false;
|
|
4
|
+
for (let i = 0; i < a.length; i++) {
|
|
5
|
+
if (a[i] !== b[i])
|
|
6
|
+
return false;
|
|
7
|
+
}
|
|
8
|
+
return true;
|
|
9
|
+
};
|
|
10
|
+
/** Unique-ifies a 2D array of strings (imported namespaces list). */
|
|
11
|
+
export const unique2D = (rows) => {
|
|
12
|
+
const seen = new Set();
|
|
13
|
+
const out = [];
|
|
14
|
+
for (const r of rows) {
|
|
15
|
+
const key = r.join("\u0000"); // safe separator
|
|
16
|
+
if (!seen.has(key)) {
|
|
17
|
+
seen.add(key);
|
|
18
|
+
out.push(r);
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
return out;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=arrays.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"arrays.js","sourceRoot":"","sources":["../../../src/helpers/arrays.ts"],"names":[],"mappings":"AAAA,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAQ,EAAE,CAAQ,EAAW,EAAE;IAC3D,IAAI,CAAC,CAAC,MAAM,KAAK,CAAC,CAAC,MAAM;QAAE,OAAO,KAAK,CAAC;IACxC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;YAAE,OAAO,KAAK,CAAC;IAClC,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC,CAAC;AAEF,qEAAqE;AACrE,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAgB,EAAc,EAAE;IACvD,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;IAC/B,MAAM,GAAG,GAAe,EAAE,CAAC;IAC3B,KAAK,MAAM,CAAC,IAAI,IAAI,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,iBAAiB;QAC/C,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC;YACnB,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;YACd,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACd,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC"}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
declare const autogenerateWarning = "\n/*\n * This file is automatically generated by typespec-typescript-emitter.\n * \n * You should not change or manipulate this file, as it will be overwritten.\n * Instead, change the underlying spec.\n */\n\n
|
|
1
|
+
declare const autogenerateWarning = "\n/*\n * This file is automatically generated by typespec-typescript-emitter.\n * \n * You should not change or manipulate this file, as it will be overwritten.\n * Instead, change the underlying spec.\n */\n\n";
|
|
2
2
|
export default autogenerateWarning;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"autogenerateWarning.js","sourceRoot":"","sources":["../../../src/helpers/autogenerateWarning.ts"],"names":[],"mappings":"AAAA,MAAM,mBAAmB,GAAG;;;;;;;;CAQ3B,CAAC;AAEF,eAAe,mBAAmB,CAAC"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Enum, Model, Program, Scalar, Union } from "@typespec/compiler";
|
|
2
|
+
import { EmitterOptions } from "../lib.js";
|
|
3
|
+
export type TTypeMap = {
|
|
4
|
+
type: Enum | Model | Scalar | Union;
|
|
5
|
+
namespaces: string[];
|
|
6
|
+
hasVisibility: boolean | undefined;
|
|
7
|
+
}[];
|
|
8
|
+
/**
|
|
9
|
+
* Traverses all namespaces in the program and produces
|
|
10
|
+
* a map of all types-to-be-emitted and their namespace hierarchy.
|
|
11
|
+
*/
|
|
12
|
+
export declare const buildTypeMap: (program: Program, options: EmitterOptions) => TTypeMap;
|
|
@@ -0,0 +1,44 @@
|
|
|
1
|
+
import { navigateProgram, navigateTypesInNamespace, } from "@typespec/compiler";
|
|
2
|
+
/**
|
|
3
|
+
* Traverses all namespaces in the program and produces
|
|
4
|
+
* a map of all types-to-be-emitted and their namespace hierarchy.
|
|
5
|
+
*/
|
|
6
|
+
export const buildTypeMap = (program, options) => {
|
|
7
|
+
// save original targeted namespaces array because it's mutated here
|
|
8
|
+
const targetedNamespaces = structuredClone(options["root-namespaces"]);
|
|
9
|
+
const map = [];
|
|
10
|
+
const pushType = (t, hierarchy) => {
|
|
11
|
+
if (!t.name)
|
|
12
|
+
return;
|
|
13
|
+
map.push({
|
|
14
|
+
type: t,
|
|
15
|
+
namespaces: hierarchy,
|
|
16
|
+
hasVisibility: undefined,
|
|
17
|
+
});
|
|
18
|
+
};
|
|
19
|
+
const traverseNamespace = (n, hierarchy) => {
|
|
20
|
+
navigateTypesInNamespace(n, {
|
|
21
|
+
enum: (t) => pushType(t, [...hierarchy, n.name]),
|
|
22
|
+
scalar: (t) => pushType(t, [...hierarchy, n.name]),
|
|
23
|
+
model: (t) => pushType(t, [...hierarchy, n.name]),
|
|
24
|
+
union: (t) => pushType(t, [...hierarchy, n.name]),
|
|
25
|
+
}, {
|
|
26
|
+
skipSubNamespaces: true,
|
|
27
|
+
});
|
|
28
|
+
n.namespaces.forEach((ns) => traverseNamespace(ns, [...hierarchy, n.name]));
|
|
29
|
+
};
|
|
30
|
+
navigateProgram(program, {
|
|
31
|
+
namespace(n) {
|
|
32
|
+
const nsIndex = options["root-namespaces"].findIndex((ns) => n.name === ns);
|
|
33
|
+
if (nsIndex === -1)
|
|
34
|
+
return;
|
|
35
|
+
// for some reason, navigateProgram visits each namespace multiple times; this prevents that
|
|
36
|
+
delete options["root-namespaces"][nsIndex];
|
|
37
|
+
traverseNamespace(n, []);
|
|
38
|
+
},
|
|
39
|
+
});
|
|
40
|
+
// restore un-mutated version
|
|
41
|
+
options["root-namespaces"] = targetedNamespaces;
|
|
42
|
+
return map;
|
|
43
|
+
};
|
|
44
|
+
//# sourceMappingURL=buildTypeMap.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"buildTypeMap.js","sourceRoot":"","sources":["../../../src/helpers/buildTypeMap.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,eAAe,EACf,wBAAwB,GAIzB,MAAM,oBAAoB,CAAC;AAS5B;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAC1B,OAAgB,EAChB,OAAuB,EACb,EAAE;IACZ,oEAAoE;IACpE,MAAM,kBAAkB,GAAG,eAAe,CAAC,OAAO,CAAC,iBAAiB,CAAC,CAAC,CAAC;IACvE,MAAM,GAAG,GAAa,EAAE,CAAC;IAEzB,MAAM,QAAQ,GAAG,CAAC,CAA2B,EAAE,SAAmB,EAAQ,EAAE;QAC1E,IAAI,CAAC,CAAC,CAAC,IAAI;YAAE,OAAO;QACpB,GAAG,CAAC,IAAI,CAAC;YACP,IAAI,EAAE,CAAC;YACP,UAAU,EAAE,SAAS;YACrB,aAAa,EAAE,SAAS;SACzB,CAAC,CAAC;IACL,CAAC,CAAC;IAEF,MAAM,iBAAiB,GAAG,CAAC,CAAY,EAAE,SAAmB,EAAE,EAAE;QAC9D,wBAAwB,CACtB,CAAC,EACD;YACE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAChD,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAClD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YACjD,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;SAClD,EACD;YACE,iBAAiB,EAAE,IAAI;SACxB,CACF,CAAC;QACF,CAAC,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,iBAAiB,CAAC,EAAE,EAAE,CAAC,GAAG,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC9E,CAAC,CAAC;IAEF,eAAe,CAAC,OAAO,EAAE;QACvB,SAAS,CAAC,CAAC;YACT,MAAM,OAAO,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC,SAAS,CAClD,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,EAAE,CACtB,CAAC;YACF,IAAI,OAAO,KAAK,CAAC,CAAC;gBAAE,OAAO;YAC3B,4FAA4F;YAC5F,OAAO,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAO,CAAC,CAAC;YAE3C,iBAAiB,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;QAC3B,CAAC;KACF,CAAC,CAAC;IAEH,6BAA6B;IAC7B,OAAO,CAAC,iBAAiB,CAAC,GAAG,kBAAkB,CAAC;IAChD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Diagnostic, EmitContext } from "@typespec/compiler";
|
|
2
|
+
import { EmitterOptions } from "../lib.js";
|
|
3
|
+
export declare const setContext: (c: EmitContext<EmitterOptions>) => void;
|
|
4
|
+
export declare const reportDiagnostic: (diagnostic: Pick<Diagnostic, "code" | "message" | "severity">) => void;
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
import { NoTarget } from "@typespec/compiler";
|
|
2
|
+
let context = null;
|
|
3
|
+
export const setContext = (c) => {
|
|
4
|
+
context = c;
|
|
5
|
+
};
|
|
6
|
+
export const reportDiagnostic = (diagnostic) => {
|
|
7
|
+
if (!context)
|
|
8
|
+
throw new Error("Couldn't report diagnostic: context not set");
|
|
9
|
+
context.program.reportDiagnostic({
|
|
10
|
+
...diagnostic,
|
|
11
|
+
code: `typespec-emitter-${diagnostic.code}`,
|
|
12
|
+
target: NoTarget,
|
|
13
|
+
});
|
|
14
|
+
};
|
|
15
|
+
//# sourceMappingURL=diagnostics.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"diagnostics.js","sourceRoot":"","sources":["../../../src/helpers/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,EAA2B,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAGvE,IAAI,OAAO,GAAuC,IAAI,CAAC;AAEvD,MAAM,CAAC,MAAM,UAAU,GAAG,CAAC,CAA8B,EAAQ,EAAE;IACjE,OAAO,GAAG,CAAC,CAAC;AACd,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,UAA6D,EACvD,EAAE;IACR,IAAI,CAAC,OAAO;QAAE,MAAM,IAAI,KAAK,CAAC,6CAA6C,CAAC,CAAC;IAC7E,OAAO,CAAC,OAAO,CAAC,gBAAgB,CAAC;QAC/B,GAAG,UAAU;QACb,IAAI,EAAE,oBAAoB,UAAU,CAAC,IAAI,EAAE;QAC3C,MAAM,EAAE,QAAQ;KACjB,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"getImports.js","sourceRoot":"","sources":["../../../src/helpers/getImports.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,iBAAiB,CAAC;AAEzD,MAAM,CAAC,MAAM,UAAU,GAAG,CACxB,OAAyC,EAC/B,EAAE,CACZ,OAAO,CAAC,GAAG,CACT,CAAC,CAAC,EAAE,EAAE,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,YAAY,sBAAsB,CAAC,CAAC,CAAC,IAAI,CAC3E,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Namespace } from "@typespec/compiler";
|
|
2
|
+
/** Traverses *up* a namespace, generating a hierarchy array from itself and its parents. */
|
|
3
|
+
export declare const namespaceListFromNamespace: (n: Namespace | undefined) => string[] | null;
|
|
4
|
+
export declare const filenameFromNamespaces: (ns: string[]) => string;
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/** Traverses *up* a namespace, generating a hierarchy array from itself and its parents. */
|
|
2
|
+
export const namespaceListFromNamespace = (n) => {
|
|
3
|
+
if (!n)
|
|
4
|
+
return null;
|
|
5
|
+
const ret = [];
|
|
6
|
+
let cur = n;
|
|
7
|
+
while (cur && cur.name) {
|
|
8
|
+
ret.unshift(cur.name);
|
|
9
|
+
cur = cur.namespace;
|
|
10
|
+
}
|
|
11
|
+
return ret;
|
|
12
|
+
};
|
|
13
|
+
export const filenameFromNamespaces = (ns) => `${ns.join(".")}.ts`;
|
|
14
|
+
//# sourceMappingURL=namespaces.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"namespaces.js","sourceRoot":"","sources":["../../../src/helpers/namespaces.ts"],"names":[],"mappings":"AAEA,4FAA4F;AAC5F,MAAM,CAAC,MAAM,0BAA0B,GAAG,CACxC,CAAwB,EACP,EAAE;IACnB,IAAI,CAAC,CAAC;QAAE,OAAO,IAAI,CAAC;IACpB,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,IAAI,GAAG,GAA0B,CAAC,CAAC;IACnC,OAAO,GAAG,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACvB,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtB,GAAG,GAAG,GAAG,CAAC,SAAS,CAAC;IACtB,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF,MAAM,CAAC,MAAM,sBAAsB,GAAG,CAAC,EAAY,EAAU,EAAE,CAC7D,GAAG,EAAE,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { Program } from "@typespec/compiler";
|
|
2
|
+
import { EmitterOptions } from "../lib.js";
|
|
3
|
+
export declare const visibilityHelperFileName = "lifecycleVisibility.ts";
|
|
4
|
+
export declare const emitVisibilityHelperFile: (program: Program, options: EmitterOptions) => Promise<void>;
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import { emitFile, resolvePath } from "@typespec/compiler";
|
|
2
|
+
const visibilityHelperFile = `
|
|
3
|
+
/* eslint-disable */
|
|
4
|
+
|
|
5
|
+
/*
|
|
6
|
+
This file is auto-generated by typespec-typescript-emitter and
|
|
7
|
+
contains helpers for accessing lifecycle-visibility-modified
|
|
8
|
+
variants of the emitted types.
|
|
9
|
+
*/
|
|
10
|
+
|
|
11
|
+
export enum Lifecycle {
|
|
12
|
+
Read, Create, Update, Delete, Query,
|
|
13
|
+
None, All
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
export type VisibilityMap<T> = {
|
|
17
|
+
[K in keyof T]?: {
|
|
18
|
+
vis?: readonly Lifecycle[]
|
|
19
|
+
nested?: VisibilityMap<T[K]>
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
export type FilterLifecycle<
|
|
24
|
+
T,
|
|
25
|
+
M extends VisibilityMap<T>,
|
|
26
|
+
Current extends Lifecycle
|
|
27
|
+
> = {
|
|
28
|
+
[K in keyof T as (
|
|
29
|
+
Current extends Lifecycle.All
|
|
30
|
+
? K
|
|
31
|
+
: Current extends Lifecycle.None
|
|
32
|
+
? never
|
|
33
|
+
: K extends keyof M
|
|
34
|
+
? M[K] extends { vis?: readonly (infer L)[]; }
|
|
35
|
+
? (undefined extends M[K]['vis']
|
|
36
|
+
? K
|
|
37
|
+
: (Current extends L ? K : never)
|
|
38
|
+
)
|
|
39
|
+
: K
|
|
40
|
+
: K
|
|
41
|
+
)]: K extends keyof M
|
|
42
|
+
? M[K] extends {nested?: infer N}
|
|
43
|
+
? N extends VisibilityMap<T[K]>
|
|
44
|
+
? FilterLifecycle<T[K], N, Current>
|
|
45
|
+
: T[K]
|
|
46
|
+
: T[K]
|
|
47
|
+
: T[K]
|
|
48
|
+
}
|
|
49
|
+
`;
|
|
50
|
+
export const visibilityHelperFileName = "lifecycleVisibility.ts";
|
|
51
|
+
export const emitVisibilityHelperFile = async (program, options) => {
|
|
52
|
+
await emitFile(program, {
|
|
53
|
+
path: resolvePath(options["out-dir"], visibilityHelperFileName),
|
|
54
|
+
content: visibilityHelperFile,
|
|
55
|
+
});
|
|
56
|
+
};
|
|
57
|
+
//# sourceMappingURL=visibilityHelperFile.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"visibilityHelperFile.js","sourceRoot":"","sources":["../../../src/helpers/visibilityHelperFile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAW,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAGpE,MAAM,oBAAoB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA+C5B,CAAC;AAEF,MAAM,CAAC,MAAM,wBAAwB,GAAG,wBAAwB,CAAC;AAEjE,MAAM,CAAC,MAAM,wBAAwB,GAAG,KAAK,EAC3C,OAAgB,EAChB,OAAuB,EACR,EAAE;IACjB,MAAM,QAAQ,CAAC,OAAO,EAAE;QACtB,IAAI,EAAE,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,wBAAwB,CAAC;QAC/D,OAAO,EAAE,oBAAoB;KAC9B,CAAC,CAAC;AACL,CAAC,CAAC"}
|
package/dist/src/lib.d.ts
CHANGED
|
@@ -1,5 +1,6 @@
|
|
|
1
|
+
import { EmitContext } from "@typespec/compiler";
|
|
1
2
|
export interface EmitterOptions {
|
|
2
|
-
"root-
|
|
3
|
+
"root-namespaces": string[];
|
|
3
4
|
"out-dir": string;
|
|
4
5
|
"enable-types": boolean;
|
|
5
6
|
"enable-typeguards": boolean;
|
|
@@ -8,6 +9,8 @@ export interface EmitterOptions {
|
|
|
8
9
|
"string-nominal-enums": boolean;
|
|
9
10
|
"serializable-date-types": boolean;
|
|
10
11
|
}
|
|
12
|
+
/** Maps option to its default value and options that must be set to `true` for this one to work */
|
|
13
|
+
export declare const optionDependencies: (context: EmitContext) => { [K in keyof EmitterOptions]: [EmitterOptions[K], (keyof EmitterOptions)[]]; };
|
|
11
14
|
export declare const $lib: import("@typespec/compiler").TypeSpecLibrary<{
|
|
12
15
|
[code: string]: import("@typespec/compiler").DiagnosticMessages;
|
|
13
16
|
}, EmitterOptions, never>;
|
package/dist/src/lib.js
CHANGED
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { createTypeSpecLibrary } from "@typespec/compiler";
|
|
1
|
+
import { createTypeSpecLibrary, } from "@typespec/compiler";
|
|
2
2
|
const EmitterOptionsSchema = {
|
|
3
3
|
type: "object",
|
|
4
4
|
additionalProperties: false,
|
|
5
5
|
properties: {
|
|
6
|
-
"root-
|
|
6
|
+
"root-namespaces": { type: "array", items: { type: "string" } },
|
|
7
7
|
"out-dir": { type: "string", format: "absolute-path" },
|
|
8
8
|
"enable-types": { type: "boolean" },
|
|
9
9
|
"enable-typeguards": { type: "boolean" },
|
|
@@ -12,8 +12,19 @@ const EmitterOptionsSchema = {
|
|
|
12
12
|
"string-nominal-enums": { type: "boolean" },
|
|
13
13
|
"serializable-date-types": { type: "boolean" },
|
|
14
14
|
},
|
|
15
|
-
required: ["root-
|
|
15
|
+
required: ["root-namespaces"],
|
|
16
16
|
};
|
|
17
|
+
/** Maps option to its default value and options that must be set to `true` for this one to work */
|
|
18
|
+
export const optionDependencies = (context) => ({
|
|
19
|
+
["root-namespaces"]: [[], []],
|
|
20
|
+
["out-dir"]: [context.emitterOutputDir, []],
|
|
21
|
+
["enable-types"]: [false, []],
|
|
22
|
+
["enable-routes"]: [false, []],
|
|
23
|
+
["string-nominal-enums"]: [false, []],
|
|
24
|
+
["serializable-date-types"]: [false, []],
|
|
25
|
+
["enable-typeguards"]: [false, ["enable-types"]],
|
|
26
|
+
["enable-routed-typemap"]: [false, ["enable-types"]],
|
|
27
|
+
});
|
|
17
28
|
export const $lib = createTypeSpecLibrary({
|
|
18
29
|
name: "typespec-typescript-emitter",
|
|
19
30
|
diagnostics: {},
|
package/dist/src/lib.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,
|
|
1
|
+
{"version":3,"file":"lib.js","sourceRoot":"","sources":["../../src/lib.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,qBAAqB,GAGtB,MAAM,oBAAoB,CAAC;AAa5B,MAAM,oBAAoB,GAAmC;IAC3D,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,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;KAC/C;IACD,QAAQ,EAAE,CAAC,iBAAiB,CAAC;CAC9B,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;CACrD,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"}
|
|
@@ -0,0 +1,8 @@
|
|
|
1
|
+
import { EmitContext } from "@typespec/compiler";
|
|
2
|
+
import { EmitterOptions } from "./lib.js";
|
|
3
|
+
/**
|
|
4
|
+
* Parses config-file options including inter-option dependencies, setting defaults,
|
|
5
|
+
* emitting warnings/errors as required,
|
|
6
|
+
* replacing options in context with parsed versions.
|
|
7
|
+
*/
|
|
8
|
+
export declare const parseOptions: (context: EmitContext<EmitterOptions>) => void;
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { reportDiagnostic } from "./helpers/diagnostics.js";
|
|
2
|
+
import { optionDependencies } from "./lib.js";
|
|
3
|
+
/**
|
|
4
|
+
* Parses config-file options including inter-option dependencies, setting defaults,
|
|
5
|
+
* emitting warnings/errors as required,
|
|
6
|
+
* replacing options in context with parsed versions.
|
|
7
|
+
*/
|
|
8
|
+
export const parseOptions = (context) => {
|
|
9
|
+
Object.entries(optionDependencies).forEach(([k, val]) => {
|
|
10
|
+
const key = k;
|
|
11
|
+
const [def, deps] = val;
|
|
12
|
+
if (deps.length === 0) {
|
|
13
|
+
context.options[key] = context.options[key] ?? def;
|
|
14
|
+
}
|
|
15
|
+
else {
|
|
16
|
+
if (context.options[key] && !deps.every((d) => context.options[d])) {
|
|
17
|
+
reportDiagnostic({
|
|
18
|
+
code: `opts-dependency-${key}`,
|
|
19
|
+
severity: "error",
|
|
20
|
+
message: `Option ${key} requires ${deps.join(", ")}`,
|
|
21
|
+
});
|
|
22
|
+
}
|
|
23
|
+
}
|
|
24
|
+
});
|
|
25
|
+
};
|
|
26
|
+
//# sourceMappingURL=parseOptions.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parseOptions.js","sourceRoot":"","sources":["../../src/parseOptions.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAkB,kBAAkB,EAAE,MAAM,UAAU,CAAC;AAE9D;;;;GAIG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAoC,EAAQ,EAAE;IACzE,MAAM,CAAC,OAAO,CAAC,kBAAkB,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE;QACtD,MAAM,GAAG,GAAyB,CAAQ,CAAC;QAC3C,MAAM,CAAC,GAAG,EAAE,IAAI,CAAC,GAAwC,GAAG,CAAC;QAC7D,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACrB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAa,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC;QAClE,CAAC;aAAM,CAAC;YACN,IAAI,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;gBACnE,gBAAgB,CAAC;oBACf,IAAI,EAAE,mBAAmB,GAAG,EAAE;oBAC9B,QAAQ,EAAE,OAAO;oBACjB,OAAO,EAAE,UAAU,GAAG,aAAa,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;iBACrD,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACL,CAAC,CAAC"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
import { Type } from "@typespec/compiler";
|
|
2
|
+
import { Resolver, ResolverOptions, ResolverResult } from "./Resolvable_helpers.js";
|
|
3
|
+
export declare abstract class Resolvable<T extends Type> {
|
|
4
|
+
/** Recursively resolves a type. */
|
|
5
|
+
static resolve<R extends Resolver>(r: R, t: Type, opts: ResolverOptions<R>): Promise<ResolverResult<R>>;
|
|
6
|
+
/**
|
|
7
|
+
* To be called from within the resolution logic of a type:
|
|
8
|
+
* Resolves another type for the current type, handling required changes to the resolution options.
|
|
9
|
+
* The passed `out` object is not signifiantly changed, only the `hasVisibility` flag is managed.
|
|
10
|
+
*/
|
|
11
|
+
protected resolveNested<R extends typeof this._r>(t: Type, opts: ResolverOptions<R>, out: ResolverResult<R>, nest?: boolean): Promise<ResolverResult<R>>;
|
|
12
|
+
/** Creates the appropriate Resolvable instance for a given type. */
|
|
13
|
+
static for<T extends Type>(r: Resolver, t: T): Promise<Resolvable<T>>;
|
|
14
|
+
constructor(t: T, r: Resolver);
|
|
15
|
+
protected abstract expectedTypeKind: string;
|
|
16
|
+
protected _t: T;
|
|
17
|
+
protected _r: Resolver;
|
|
18
|
+
/** Modifies passed output object in-place. */
|
|
19
|
+
protected abstract type(opts: ResolverOptions<Resolver.Type>, out: ResolverResult<Resolver.Type>): Promise<void>;
|
|
20
|
+
/** Modifies passed output object in-place. */
|
|
21
|
+
protected abstract typeguard(opts: ResolverOptions<Resolver.Typeguard>, out: ResolverResult<Resolver.Typeguard>): Promise<void>;
|
|
22
|
+
/** Resolves the type, modifying an output object in place. */
|
|
23
|
+
resolve(opts: ResolverOptions<Resolver>, out: ResolverResult<Resolver>): Promise<void>;
|
|
24
|
+
protected transformKnownType(opts: ResolverOptions<Resolver>, out: ResolverResult<Resolver>): void;
|
|
25
|
+
/** Returns true if this type or anything it contains or references has visibility modifiers. */
|
|
26
|
+
hasVisibility(opts: ResolverOptions<Resolver>, out: ResolverResult<Resolver>): Promise<boolean>;
|
|
27
|
+
/** Returns true if this type or anything it contains or references has visibility modifiers. */
|
|
28
|
+
protected static hasVisibility(t: Type, opts: ResolverOptions<Resolver>, out: ResolverResult<Resolver>, current: Type): Promise<boolean>;
|
|
29
|
+
/** Checks its stored type to ensure the instance was created on a suitable type. */
|
|
30
|
+
protected validate(): void;
|
|
31
|
+
protected diagnostic(code: string, msg: string, level: "error" | "warning"): void;
|
|
32
|
+
}
|