@typespec/tspd 0.47.0-dev.0 → 0.68.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +18 -0
- package/dist/src/cli.js +24 -5
- package/dist/src/cli.js.map +1 -1
- package/dist/src/gen-extern-signatures/decorators-signatures.d.ts +5 -0
- package/dist/src/gen-extern-signatures/decorators-signatures.d.ts.map +1 -0
- package/dist/src/gen-extern-signatures/decorators-signatures.js +338 -0
- package/dist/src/gen-extern-signatures/decorators-signatures.js.map +1 -0
- package/dist/src/gen-extern-signatures/doc-builder.d.ts +3 -0
- package/dist/src/gen-extern-signatures/doc-builder.d.ts.map +1 -0
- package/dist/src/gen-extern-signatures/doc-builder.js +14 -0
- package/dist/src/gen-extern-signatures/doc-builder.js.map +1 -0
- package/dist/src/gen-extern-signatures/gen-extern-signatures.d.ts +11 -0
- package/dist/src/gen-extern-signatures/gen-extern-signatures.d.ts.map +1 -0
- package/dist/src/gen-extern-signatures/gen-extern-signatures.js +122 -0
- package/dist/src/gen-extern-signatures/gen-extern-signatures.js.map +1 -0
- package/dist/src/gen-extern-signatures/types.d.ts +11 -0
- package/dist/src/gen-extern-signatures/types.d.ts.map +1 -0
- package/dist/src/gen-extern-signatures/types.js +2 -0
- package/dist/src/gen-extern-signatures/types.js.map +1 -0
- package/dist/src/ref-doc/api-docs.d.ts.map +1 -1
- package/dist/src/ref-doc/api-docs.js +3 -3
- package/dist/src/ref-doc/api-docs.js.map +1 -1
- package/dist/src/ref-doc/emitters/docusaurus.d.ts +4 -4
- package/dist/src/ref-doc/emitters/docusaurus.d.ts.map +1 -1
- package/dist/src/ref-doc/emitters/docusaurus.js +72 -72
- package/dist/src/ref-doc/emitters/docusaurus.js.map +1 -1
- package/dist/src/ref-doc/emitters/markdown.d.ts +22 -7
- package/dist/src/ref-doc/emitters/markdown.d.ts.map +1 -1
- package/dist/src/ref-doc/emitters/markdown.js +125 -24
- package/dist/src/ref-doc/emitters/markdown.js.map +1 -1
- package/dist/src/ref-doc/emitters/starlight.d.ts +24 -0
- package/dist/src/ref-doc/emitters/starlight.d.ts.map +1 -0
- package/dist/src/ref-doc/emitters/starlight.js +213 -0
- package/dist/src/ref-doc/emitters/starlight.js.map +1 -0
- package/dist/src/ref-doc/experimental.d.ts +4 -1
- package/dist/src/ref-doc/experimental.d.ts.map +1 -1
- package/dist/src/ref-doc/experimental.js +7 -8
- package/dist/src/ref-doc/experimental.js.map +1 -1
- package/dist/src/ref-doc/extractor.d.ts.map +1 -1
- package/dist/src/ref-doc/extractor.js +112 -80
- package/dist/src/ref-doc/extractor.js.map +1 -1
- package/dist/src/ref-doc/lib.d.ts +55 -2
- package/dist/src/ref-doc/lib.d.ts.map +1 -1
- package/dist/src/ref-doc/lib.js +8 -1
- package/dist/src/ref-doc/lib.js.map +1 -1
- package/dist/src/ref-doc/types.d.ts +79 -53
- package/dist/src/ref-doc/types.d.ts.map +1 -1
- package/dist/src/ref-doc/utils/markdown.d.ts +0 -6
- package/dist/src/ref-doc/utils/markdown.d.ts.map +1 -1
- package/dist/src/ref-doc/utils/markdown.js +1 -9
- package/dist/src/ref-doc/utils/markdown.js.map +1 -1
- package/dist/src/ref-doc/utils/type-signature.d.ts.map +1 -1
- package/dist/src/ref-doc/utils/type-signature.js +8 -22
- package/dist/src/ref-doc/utils/type-signature.js.map +1 -1
- package/package.json +30 -32
package/README.md
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
# @typespec/tspd
|
|
2
|
+
|
|
3
|
+
**This library is experimental and will most likely significantly change in future versions.**
|
|
4
|
+
|
|
5
|
+
TypeSpec tspd is a tool to help you build TypeSpec libraries and emitters. It provide the ability to
|
|
6
|
+
|
|
7
|
+
- Generate decorator signatures and type checks
|
|
8
|
+
- Generate documentation for library types and emitter options
|
|
9
|
+
|
|
10
|
+
## Usage
|
|
11
|
+
|
|
12
|
+
```bash
|
|
13
|
+
tspd --enable-experimental gen-extern-signature
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
tspd --enable-experimental doc . --output-dir ./docs/
|
|
18
|
+
```
|
package/dist/src/cli.js
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
/* eslint-disable no-console */
|
|
2
|
-
import { NodeHost, logDiagnostics, resolvePath
|
|
2
|
+
import { NodeHost, logDiagnostics, resolvePath } from "@typespec/compiler";
|
|
3
3
|
import pc from "picocolors";
|
|
4
4
|
import yargs from "yargs";
|
|
5
|
+
import { generateExternSignatures } from "./gen-extern-signatures/gen-extern-signatures.js";
|
|
5
6
|
import { generateLibraryDocs } from "./ref-doc/experimental.js";
|
|
6
7
|
try {
|
|
7
8
|
// eslint-disable-next-line @typescript-eslint/ban-ts-comment
|
|
@@ -23,7 +24,7 @@ function logExperimentalWarning(type) {
|
|
|
23
24
|
log("-".repeat(100));
|
|
24
25
|
}
|
|
25
26
|
async function main() {
|
|
26
|
-
console.log(`TypeSpec Developer Tools
|
|
27
|
+
console.log(`TypeSpec Developer Tools\n`);
|
|
27
28
|
await yargs(process.argv.slice(2))
|
|
28
29
|
.scriptName("tspd")
|
|
29
30
|
.help()
|
|
@@ -66,18 +67,36 @@ async function main() {
|
|
|
66
67
|
})
|
|
67
68
|
.option("output-dir", {
|
|
68
69
|
type: "string",
|
|
70
|
+
})
|
|
71
|
+
.positional("skip-js", {
|
|
72
|
+
description: "Skip generating JS API docs.",
|
|
73
|
+
type: "boolean",
|
|
69
74
|
});
|
|
70
75
|
}, async (args) => {
|
|
71
|
-
var _a;
|
|
72
76
|
const resolvedRoot = resolvePath(process.cwd(), args.entrypoint);
|
|
73
77
|
const host = NodeHost;
|
|
74
|
-
const diagnostics = await generateLibraryDocs(resolvedRoot,
|
|
78
|
+
const diagnostics = await generateLibraryDocs(resolvedRoot, args["output-dir"] ?? resolvePath(resolvedRoot, "docs"), {
|
|
79
|
+
skipJSApi: args["skip-js"],
|
|
80
|
+
});
|
|
75
81
|
// const diagnostics = await generateExternSignatures(host, resolvedRoot);
|
|
76
82
|
if (diagnostics.length > 0) {
|
|
77
83
|
logDiagnostics(diagnostics, host.logSink);
|
|
78
84
|
}
|
|
79
85
|
})
|
|
80
|
-
.
|
|
86
|
+
.command("gen-extern-signature <entrypoint>", "Format given list of TypeSpec files.", (cmd) => {
|
|
87
|
+
return cmd.positional("entrypoint", {
|
|
88
|
+
description: "Path to the library entrypoint.",
|
|
89
|
+
type: "string",
|
|
90
|
+
demandOption: true,
|
|
91
|
+
});
|
|
92
|
+
}, async (args) => {
|
|
93
|
+
const resolvedRoot = resolvePath(process.cwd(), args.entrypoint);
|
|
94
|
+
const host = NodeHost;
|
|
95
|
+
const diagnostics = await generateExternSignatures(host, resolvedRoot);
|
|
96
|
+
if (diagnostics.length > 0) {
|
|
97
|
+
logDiagnostics(diagnostics, host.logSink);
|
|
98
|
+
}
|
|
99
|
+
})
|
|
81
100
|
.demandCommand(1, "You must use one of the supported commands.").argv;
|
|
82
101
|
}
|
|
83
102
|
function internalError(error) {
|
package/dist/src/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"AAAA,+BAA+B;AAC/B,OAAO,EAAE,QAAQ,EAAE,cAAc,EAAE,WAAW,EAAE,
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { Program } from "@typespec/compiler";
|
|
2
|
+
import { DecoratorSignature } from "./types.js";
|
|
3
|
+
export declare function generateSignatureTests(namespaceName: string, importName: string, decoratorSignatureImport: string, decorators: DecoratorSignature[]): string;
|
|
4
|
+
export declare function generateSignatures(program: Program, decorators: DecoratorSignature[], namespaceName: string): string;
|
|
5
|
+
//# sourceMappingURL=decorators-signatures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorators-signatures.d.ts","sourceRoot":"","sources":["../../../src/gen-extern-signatures/decorators-signatures.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,OAAO,EAMR,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAGhD,wBAAgB,sBAAsB,CACpC,aAAa,EAAE,MAAM,EACrB,UAAU,EAAE,MAAM,EAClB,wBAAwB,EAAE,MAAM,EAChC,UAAU,EAAE,kBAAkB,EAAE,GAC/B,MAAM,CAsBR;AAKD,wBAAgB,kBAAkB,CAChC,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,kBAAkB,EAAE,EAChC,aAAa,EAAE,MAAM,GACpB,MAAM,CAmQR"}
|
|
@@ -0,0 +1,338 @@
|
|
|
1
|
+
import { getSourceLocation, isArrayModelType, isUnknownType, } from "@typespec/compiler";
|
|
2
|
+
import { SyntaxKind } from "@typespec/compiler/ast";
|
|
3
|
+
import { renderDoc } from "./doc-builder.js";
|
|
4
|
+
const line = "\n";
|
|
5
|
+
export function generateSignatureTests(namespaceName, importName, decoratorSignatureImport, decorators) {
|
|
6
|
+
const content = [];
|
|
7
|
+
const decRecord = getDecoratorRecordForNamespaceName(namespaceName);
|
|
8
|
+
content.push([
|
|
9
|
+
"/** An error here would mean that the decorator is not exported or doesn't have the right name. */",
|
|
10
|
+
line,
|
|
11
|
+
`import { $decorators } from "`,
|
|
12
|
+
importName,
|
|
13
|
+
`";`,
|
|
14
|
+
line,
|
|
15
|
+
]);
|
|
16
|
+
content.push(`import type { ${decRecord} } from "${decoratorSignatureImport}";`);
|
|
17
|
+
content.push(line);
|
|
18
|
+
content.push([
|
|
19
|
+
"/** An error here would mean that the exported decorator is not using the same signature. Make sure to have export const $decName: DecNameDecorator = (...) => ... */",
|
|
20
|
+
line,
|
|
21
|
+
`const _: ${decRecord} = $decorators["${namespaceName}"]`,
|
|
22
|
+
]);
|
|
23
|
+
return renderDoc(content);
|
|
24
|
+
}
|
|
25
|
+
function getDecoratorRecordForNamespaceName(namespaceName) {
|
|
26
|
+
return `${namespaceName.replaceAll(".", "")}Decorators`;
|
|
27
|
+
}
|
|
28
|
+
export function generateSignatures(program, decorators, namespaceName) {
|
|
29
|
+
const compilerImports = new Set();
|
|
30
|
+
const localTypes = new Set();
|
|
31
|
+
const decoratorDeclarations = decorators.map((x) => getTSSignatureForDecorator(x));
|
|
32
|
+
const importArray = [...compilerImports].sort();
|
|
33
|
+
const localTypeDeclarations = [];
|
|
34
|
+
for (const item of localTypes) {
|
|
35
|
+
localTypeDeclarations.push(declareInterfaceForModel(item));
|
|
36
|
+
}
|
|
37
|
+
const content = [
|
|
38
|
+
`import type {${importArray.join(",")}} from "@typespec/compiler";`,
|
|
39
|
+
line,
|
|
40
|
+
line,
|
|
41
|
+
localTypeDeclarations.join("\n\n"),
|
|
42
|
+
line,
|
|
43
|
+
line,
|
|
44
|
+
decoratorDeclarations.join("\n\n"),
|
|
45
|
+
line,
|
|
46
|
+
line,
|
|
47
|
+
];
|
|
48
|
+
content.push([
|
|
49
|
+
`export type ${getDecoratorRecordForNamespaceName(namespaceName)} = {`,
|
|
50
|
+
line,
|
|
51
|
+
decorators.map((x) => renderDoc([x.name.slice(1), ": ", x.typeName])).join(","),
|
|
52
|
+
"};",
|
|
53
|
+
line,
|
|
54
|
+
]);
|
|
55
|
+
content.push(line);
|
|
56
|
+
return renderDoc(content);
|
|
57
|
+
function useCompilerType(name) {
|
|
58
|
+
compilerImports.add(name);
|
|
59
|
+
return name;
|
|
60
|
+
}
|
|
61
|
+
function useLocalType(type) {
|
|
62
|
+
localTypes.add(type);
|
|
63
|
+
return type.name;
|
|
64
|
+
}
|
|
65
|
+
function getTSSignatureForDecorator({ typeName, decorator }) {
|
|
66
|
+
const args = decorator.parameters.length > 0
|
|
67
|
+
? `,${decorator.parameters.map((x) => getTSParameter(x)).join(",")}`
|
|
68
|
+
: "";
|
|
69
|
+
return [
|
|
70
|
+
getDocComment(decorator),
|
|
71
|
+
"export type ",
|
|
72
|
+
typeName,
|
|
73
|
+
" = ",
|
|
74
|
+
`(context: ${useCompilerType("DecoratorContext")}, ${getTSParameter(decorator.target, true)}${args}) => void;`,
|
|
75
|
+
].join("");
|
|
76
|
+
}
|
|
77
|
+
function getTSParameter(param, isTarget) {
|
|
78
|
+
const optional = param.optional ? "?" : "";
|
|
79
|
+
const rest = param.rest ? "..." : "";
|
|
80
|
+
if (rest) {
|
|
81
|
+
return `...${param.name}${optional}: ${getRestTSParmeterType(param.type)}`;
|
|
82
|
+
}
|
|
83
|
+
else {
|
|
84
|
+
return `${param.name}${optional}: ${getTSParmeterType(param.type, isTarget)}`;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/** For a rest param of constraint T[] or valueof T[] return the T or valueof T */
|
|
88
|
+
function extractRestParamConstraint(constraint) {
|
|
89
|
+
let valueType;
|
|
90
|
+
let type;
|
|
91
|
+
if (constraint.valueType) {
|
|
92
|
+
if (constraint.valueType.kind === "Model" &&
|
|
93
|
+
isArrayModelType(program, constraint.valueType)) {
|
|
94
|
+
valueType = constraint.valueType.indexer.value;
|
|
95
|
+
}
|
|
96
|
+
else {
|
|
97
|
+
return undefined;
|
|
98
|
+
}
|
|
99
|
+
}
|
|
100
|
+
if (constraint.type) {
|
|
101
|
+
if (constraint.type.kind === "Model" && isArrayModelType(program, constraint.type)) {
|
|
102
|
+
type = constraint.type.indexer.value;
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
return undefined;
|
|
106
|
+
}
|
|
107
|
+
}
|
|
108
|
+
return {
|
|
109
|
+
entityKind: "MixedParameterConstraint",
|
|
110
|
+
type,
|
|
111
|
+
valueType,
|
|
112
|
+
};
|
|
113
|
+
}
|
|
114
|
+
function getRestTSParmeterType(constraint) {
|
|
115
|
+
const restItemConstraint = extractRestParamConstraint(constraint);
|
|
116
|
+
if (restItemConstraint === undefined) {
|
|
117
|
+
return "unknown";
|
|
118
|
+
}
|
|
119
|
+
return `(${getTSParmeterType(restItemConstraint)})[]`;
|
|
120
|
+
}
|
|
121
|
+
function getTSParmeterType(constraint, isTarget) {
|
|
122
|
+
if (constraint.type && constraint.valueType) {
|
|
123
|
+
return `${getTypeConstraintTSType(constraint.type, isTarget)} | ${getValueTSType(constraint.valueType)}`;
|
|
124
|
+
}
|
|
125
|
+
if (constraint.valueType) {
|
|
126
|
+
return getValueTSType(constraint.valueType);
|
|
127
|
+
}
|
|
128
|
+
else if (constraint.type) {
|
|
129
|
+
return getTypeConstraintTSType(constraint.type, isTarget);
|
|
130
|
+
}
|
|
131
|
+
return useCompilerType("Type");
|
|
132
|
+
}
|
|
133
|
+
function getTypeConstraintTSType(type, isTarget) {
|
|
134
|
+
if (isTarget && isUnknownType(type)) {
|
|
135
|
+
return useCompilerType("Type");
|
|
136
|
+
}
|
|
137
|
+
if (type.kind === "Model" && isReflectionType(type)) {
|
|
138
|
+
return useCompilerType(type.name);
|
|
139
|
+
}
|
|
140
|
+
else if (type.kind === "Union") {
|
|
141
|
+
const variants = [...type.variants.values()];
|
|
142
|
+
if (isTarget) {
|
|
143
|
+
const items = [...new Set(variants.map((x) => getTypeConstraintTSType(x.type, isTarget)))];
|
|
144
|
+
return items.join(" | ");
|
|
145
|
+
}
|
|
146
|
+
else if (variants.every((x) => isReflectionType(x.type))) {
|
|
147
|
+
return variants.map((x) => useCompilerType(x.type.name)).join(" | ");
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
return useCompilerType("Type");
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
else if (isTarget) {
|
|
154
|
+
// Special case for target type if it is a scalar type(e.g. `string`) then it can only be a Scalar.
|
|
155
|
+
// In the case of regular parameter it could also be a union of the scalar, or a literal matching the scalar or union of both,
|
|
156
|
+
// so we only change that when isTarget is true.
|
|
157
|
+
if (type.kind === "Scalar") {
|
|
158
|
+
return useCompilerType(type.kind);
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return useCompilerType("Type");
|
|
162
|
+
}
|
|
163
|
+
function getValueTSType(type) {
|
|
164
|
+
switch (type.kind) {
|
|
165
|
+
case "Boolean":
|
|
166
|
+
return `${type.value}`;
|
|
167
|
+
case "String":
|
|
168
|
+
return `"${type.value}"`;
|
|
169
|
+
case "Number":
|
|
170
|
+
return `${type.value}`;
|
|
171
|
+
case "Scalar":
|
|
172
|
+
return getScalarTSType(type);
|
|
173
|
+
case "Union":
|
|
174
|
+
return [...type.variants.values()].map((x) => getValueTSType(x.type)).join(" | ");
|
|
175
|
+
case "Model":
|
|
176
|
+
if (isArrayModelType(program, type)) {
|
|
177
|
+
return `readonly (${getValueTSType(type.indexer.value)})` + "[]";
|
|
178
|
+
}
|
|
179
|
+
else if (isReflectionType(type)) {
|
|
180
|
+
return getValueOfReflectionType(type);
|
|
181
|
+
}
|
|
182
|
+
else {
|
|
183
|
+
// If its exactly the record type use Record<string, T> instead of the model name.
|
|
184
|
+
if (type.indexer && type.name === "Record" && type.namespace?.name === "TypeSpec") {
|
|
185
|
+
return `Record<string, ${getValueTSType(type.indexer.value)}>`;
|
|
186
|
+
}
|
|
187
|
+
if (type.name) {
|
|
188
|
+
return useLocalType(type);
|
|
189
|
+
}
|
|
190
|
+
else {
|
|
191
|
+
return writeTypeExpressionForModel(type);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
return "unknown";
|
|
196
|
+
}
|
|
197
|
+
function getValueOfReflectionType(type) {
|
|
198
|
+
switch (type.name) {
|
|
199
|
+
case "EnumMember":
|
|
200
|
+
case "Enum":
|
|
201
|
+
return useCompilerType("EnumValue");
|
|
202
|
+
case "Model":
|
|
203
|
+
return "Record<string, unknown>";
|
|
204
|
+
default:
|
|
205
|
+
return "unknown";
|
|
206
|
+
}
|
|
207
|
+
}
|
|
208
|
+
function writeTypeExpressionForModel(model) {
|
|
209
|
+
const properties = [...model.properties.values()].map((x) => {
|
|
210
|
+
return `readonly ${x.name}${x.optional ? "?" : ""}: ${getValueTSType(x.type)}`;
|
|
211
|
+
});
|
|
212
|
+
if (model.indexer?.value) {
|
|
213
|
+
properties.unshift(`readonly [key: string]: ${getValueTSType(model.indexer.value)}`);
|
|
214
|
+
}
|
|
215
|
+
return `{ ${properties.join(", ")} }`;
|
|
216
|
+
}
|
|
217
|
+
function declareInterfaceForModel(model) {
|
|
218
|
+
return `export interface ${model.name} ${writeTypeExpressionForModel(model)}`;
|
|
219
|
+
}
|
|
220
|
+
function getScalarTSType(scalar) {
|
|
221
|
+
const isStd = program.checker.isStdType(scalar);
|
|
222
|
+
if (isStd) {
|
|
223
|
+
return getStdScalarTSType(scalar);
|
|
224
|
+
}
|
|
225
|
+
else if (scalar.baseScalar) {
|
|
226
|
+
return getScalarTSType(scalar.baseScalar);
|
|
227
|
+
}
|
|
228
|
+
else {
|
|
229
|
+
return "unknown";
|
|
230
|
+
}
|
|
231
|
+
}
|
|
232
|
+
function getStdScalarTSType(scalar) {
|
|
233
|
+
switch (scalar.name) {
|
|
234
|
+
case "numeric":
|
|
235
|
+
case "decimal":
|
|
236
|
+
case "decimal128":
|
|
237
|
+
case "float":
|
|
238
|
+
case "integer":
|
|
239
|
+
case "int64":
|
|
240
|
+
case "uint64":
|
|
241
|
+
return useCompilerType("Numeric");
|
|
242
|
+
case "int8":
|
|
243
|
+
case "int16":
|
|
244
|
+
case "int32":
|
|
245
|
+
case "safeint":
|
|
246
|
+
case "uint8":
|
|
247
|
+
case "uint16":
|
|
248
|
+
case "uint32":
|
|
249
|
+
case "float64":
|
|
250
|
+
case "float32":
|
|
251
|
+
return "number";
|
|
252
|
+
case "string":
|
|
253
|
+
case "url":
|
|
254
|
+
return "string";
|
|
255
|
+
case "boolean":
|
|
256
|
+
return "boolean";
|
|
257
|
+
case "plainDate":
|
|
258
|
+
case "utcDateTime":
|
|
259
|
+
case "offsetDateTime":
|
|
260
|
+
case "plainTime":
|
|
261
|
+
case "duration":
|
|
262
|
+
case "bytes":
|
|
263
|
+
return "unknown";
|
|
264
|
+
default:
|
|
265
|
+
const _assertNever = scalar.name;
|
|
266
|
+
return "unknown";
|
|
267
|
+
}
|
|
268
|
+
}
|
|
269
|
+
}
|
|
270
|
+
function isReflectionType(type) {
|
|
271
|
+
return (type.kind === "Model" &&
|
|
272
|
+
type.namespace?.name === "Reflection" &&
|
|
273
|
+
type.namespace?.namespace?.name === "TypeSpec");
|
|
274
|
+
}
|
|
275
|
+
function getDocComment(type) {
|
|
276
|
+
const docs = type.node?.docs;
|
|
277
|
+
if (docs === undefined || docs.length === 0) {
|
|
278
|
+
return "";
|
|
279
|
+
}
|
|
280
|
+
const mainContentLines = [];
|
|
281
|
+
const tagLines = [];
|
|
282
|
+
for (const doc of docs) {
|
|
283
|
+
for (const content of doc.content) {
|
|
284
|
+
for (const line of content.text.split("\n")) {
|
|
285
|
+
mainContentLines.push(line);
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
for (const tag of doc.tags) {
|
|
289
|
+
tagLines.push();
|
|
290
|
+
let first = true;
|
|
291
|
+
const hasContentFirstLine = checkIfTagHasDocOnSameLine(tag);
|
|
292
|
+
const tagStart = tag.kind === SyntaxKind.DocParamTag || tag.kind === SyntaxKind.DocTemplateTag
|
|
293
|
+
? `@${tag.tagName.sv} ${tag.paramName.sv}`
|
|
294
|
+
: `@${tag.tagName.sv}`;
|
|
295
|
+
for (const content of tag.content) {
|
|
296
|
+
for (const line of content.text.split("\n")) {
|
|
297
|
+
const cleaned = sanitizeDocComment(line);
|
|
298
|
+
if (first) {
|
|
299
|
+
if (hasContentFirstLine) {
|
|
300
|
+
tagLines.push(`${tagStart} ${cleaned}`);
|
|
301
|
+
}
|
|
302
|
+
else {
|
|
303
|
+
tagLines.push(tagStart, cleaned);
|
|
304
|
+
}
|
|
305
|
+
first = false;
|
|
306
|
+
}
|
|
307
|
+
else {
|
|
308
|
+
tagLines.push(cleaned);
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
}
|
|
314
|
+
const docLines = [...mainContentLines, ...(tagLines.length > 0 ? [""] : []), ...tagLines];
|
|
315
|
+
return "/**\n" + docLines.map((x) => `* ${x}`).join("\n") + "\n*/\n";
|
|
316
|
+
}
|
|
317
|
+
function sanitizeDocComment(doc) {
|
|
318
|
+
// Issue to escape @internal and other tsdoc tags https://github.com/microsoft/TypeScript/issues/47679
|
|
319
|
+
return doc.replaceAll("@internal", `@_internal`);
|
|
320
|
+
}
|
|
321
|
+
function checkIfTagHasDocOnSameLine(tag) {
|
|
322
|
+
const start = tag.content[0]?.pos;
|
|
323
|
+
const end = tag.content[0]?.end;
|
|
324
|
+
const file = getSourceLocation(tag.content[0]).file;
|
|
325
|
+
let hasFirstLine = false;
|
|
326
|
+
for (let i = start; i < end; i++) {
|
|
327
|
+
const ch = file.text[i];
|
|
328
|
+
if (ch === "\n") {
|
|
329
|
+
break;
|
|
330
|
+
}
|
|
331
|
+
// Todo reuse compiler whitespace logic or have a way to get this info from the parser.
|
|
332
|
+
if (ch !== " ") {
|
|
333
|
+
hasFirstLine = true;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
return hasFirstLine;
|
|
337
|
+
}
|
|
338
|
+
//# sourceMappingURL=decorators-signatures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decorators-signatures.js","sourceRoot":"","sources":["../../../src/gen-extern-signatures/decorators-signatures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-builder.d.ts","sourceRoot":"","sources":["../../../src/gen-extern-signatures/doc-builder.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,GAAG,GAAG,MAAM,GAAG,GAAG,EAAE,CAAC;AAEjC,wBAAgB,SAAS,CAAC,GAAG,EAAE,GAAG,UAWjC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export function renderDoc(doc) {
|
|
2
|
+
const flattened = [];
|
|
3
|
+
function render(doc) {
|
|
4
|
+
if (typeof doc === "string") {
|
|
5
|
+
flattened.push(doc);
|
|
6
|
+
}
|
|
7
|
+
else {
|
|
8
|
+
doc.forEach(render);
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
render(doc);
|
|
12
|
+
return flattened.join("");
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=doc-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doc-builder.js","sourceRoot":"","sources":["../../../src/gen-extern-signatures/doc-builder.ts"],"names":[],"mappings":"AAEA,MAAM,UAAU,SAAS,CAAC,GAAQ;IAChC,MAAM,SAAS,GAAa,EAAE,CAAC;IAC/B,SAAS,MAAM,CAAC,GAAQ;QACtB,IAAI,OAAO,GAAG,KAAK,QAAQ,EAAE,CAAC;YAC5B,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QACtB,CAAC;aAAM,CAAC;YACN,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QACtB,CAAC;IACH,CAAC;IACD,MAAM,CAAC,GAAG,CAAC,CAAC;IACZ,OAAO,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;AAC5B,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { CompilerHost, Diagnostic, Namespace, type PackageJson, Program } from "@typespec/compiler";
|
|
2
|
+
import prettier from "prettier";
|
|
3
|
+
export declare function generateExternSignatures(host: CompilerHost, libraryPath: string): Promise<readonly Diagnostic[]>;
|
|
4
|
+
export declare function generateExternSignatureForExports(host: CompilerHost, libraryPath: string, pkgJson: PackageJson, exports: string[]): Promise<[undefined, readonly Diagnostic[]]>;
|
|
5
|
+
export interface GenerateExternDecoratorOptions {
|
|
6
|
+
/** Render those namespaces only(exclude sub namespaces as well). By default it will include all namespaces. */
|
|
7
|
+
readonly namespaces?: Namespace[];
|
|
8
|
+
readonly prettierConfig?: prettier.Options;
|
|
9
|
+
}
|
|
10
|
+
export declare function generateExternDecorators(program: Program, packageName: string, options?: GenerateExternDecoratorOptions): Promise<Record<string, string>>;
|
|
11
|
+
//# sourceMappingURL=gen-extern-signatures.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gen-extern-signatures.d.ts","sourceRoot":"","sources":["../../../src/gen-extern-signatures/gen-extern-signatures.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAEZ,UAAU,EACV,SAAS,EACT,KAAK,WAAW,EAChB,OAAO,EAYR,MAAM,oBAAoB,CAAC;AAC5B,OAAO,QAAQ,MAAM,UAAU,CAAC;AAQhC,wBAAsB,wBAAwB,CAC5C,IAAI,EAAE,YAAY,EAClB,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC,CAiChC;AAED,wBAAsB,iCAAiC,CACrD,IAAI,EAAE,YAAY,EAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,WAAW,EACpB,OAAO,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,CAAC,SAAS,EAAE,SAAS,UAAU,EAAE,CAAC,CAAC,CAsB7C;AAOD,MAAM,WAAW,8BAA8B;IAC7C,+GAA+G;IAC/G,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,EAAE,CAAC;IAClC,QAAQ,CAAC,cAAc,CAAC,EAAE,QAAQ,CAAC,OAAO,CAAC;CAC5C;AACD,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,OAAO,EAChB,WAAW,EAAE,MAAM,EACnB,OAAO,CAAC,EAAE,8BAA8B,GACvC,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAsDjC"}
|
|
@@ -0,0 +1,122 @@
|
|
|
1
|
+
import { compile, createDiagnosticCollector, createSourceFile, getLocationContext, getTypeName, joinPaths, navigateProgram, navigateTypesInNamespace, resolvePath, } from "@typespec/compiler";
|
|
2
|
+
import prettier from "prettier";
|
|
3
|
+
import { createDiagnostic } from "../ref-doc/lib.js";
|
|
4
|
+
import { generateSignatureTests, generateSignatures } from "./decorators-signatures.js";
|
|
5
|
+
function createSourceLocation(path) {
|
|
6
|
+
return { file: createSourceFile("", path), pos: 0, end: 0 };
|
|
7
|
+
}
|
|
8
|
+
export async function generateExternSignatures(host, libraryPath) {
|
|
9
|
+
const diagnostics = createDiagnosticCollector();
|
|
10
|
+
const pkgJson = await readPackageJson(host, libraryPath);
|
|
11
|
+
if (!pkgJson.exports) {
|
|
12
|
+
return [
|
|
13
|
+
createDiagnostic({
|
|
14
|
+
code: "exports-missing",
|
|
15
|
+
target: createSourceLocation(resolvePath(libraryPath, "package.json")),
|
|
16
|
+
}),
|
|
17
|
+
];
|
|
18
|
+
}
|
|
19
|
+
const exportsMap = {};
|
|
20
|
+
for (const [key, value] of Object.entries(pkgJson.exports)) {
|
|
21
|
+
if (typeof value === "object" && "typespec" in value && typeof value.typespec === "string") {
|
|
22
|
+
exportsMap[key] = resolvePath(libraryPath, value.typespec);
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
const exports = Object.values(exportsMap);
|
|
26
|
+
if (exports.length > 0) {
|
|
27
|
+
diagnostics.pipe(await generateExternSignatureForExports(host, libraryPath, pkgJson, exports));
|
|
28
|
+
}
|
|
29
|
+
else {
|
|
30
|
+
diagnostics.add(createDiagnostic({
|
|
31
|
+
code: "exports-missing",
|
|
32
|
+
messageId: "missingCondition",
|
|
33
|
+
target: createSourceLocation(resolvePath(libraryPath, "package.json")),
|
|
34
|
+
}));
|
|
35
|
+
}
|
|
36
|
+
return diagnostics.diagnostics;
|
|
37
|
+
}
|
|
38
|
+
export async function generateExternSignatureForExports(host, libraryPath, pkgJson, exports) {
|
|
39
|
+
const [main, ...additionalImports] = exports;
|
|
40
|
+
const diagnostics = createDiagnosticCollector();
|
|
41
|
+
const program = await compile(host, main, {
|
|
42
|
+
additionalImports,
|
|
43
|
+
parseOptions: { comments: true, docs: true },
|
|
44
|
+
});
|
|
45
|
+
const prettierConfig = await prettier.resolveConfig(libraryPath);
|
|
46
|
+
const outDir = resolvePath(libraryPath, "generated-defs");
|
|
47
|
+
try {
|
|
48
|
+
await host.rm(outDir, { recursive: true });
|
|
49
|
+
}
|
|
50
|
+
catch (e) { }
|
|
51
|
+
await host.mkdirp(outDir);
|
|
52
|
+
const files = await generateExternDecorators(program, pkgJson.name, {
|
|
53
|
+
prettierConfig: prettierConfig ?? undefined,
|
|
54
|
+
});
|
|
55
|
+
for (const [name, content] of Object.entries(files)) {
|
|
56
|
+
await host.writeFile(resolvePath(outDir, name), content);
|
|
57
|
+
}
|
|
58
|
+
return [undefined, diagnostics.diagnostics];
|
|
59
|
+
}
|
|
60
|
+
async function readPackageJson(host, libraryPath) {
|
|
61
|
+
const file = await host.readFile(joinPaths(libraryPath, "package.json"));
|
|
62
|
+
return JSON.parse(file.text);
|
|
63
|
+
}
|
|
64
|
+
export async function generateExternDecorators(program, packageName, options) {
|
|
65
|
+
const decorators = new Map();
|
|
66
|
+
const listener = {
|
|
67
|
+
decorator(dec) {
|
|
68
|
+
if (packageName !== "@typespec/compiler" &&
|
|
69
|
+
getLocationContext(program, dec).type !== "project") {
|
|
70
|
+
return;
|
|
71
|
+
}
|
|
72
|
+
const namespaceName = getTypeName(dec.namespace);
|
|
73
|
+
let decoratorForNamespace = decorators.get(namespaceName);
|
|
74
|
+
if (!decoratorForNamespace) {
|
|
75
|
+
decoratorForNamespace = [];
|
|
76
|
+
decorators.set(namespaceName, decoratorForNamespace);
|
|
77
|
+
}
|
|
78
|
+
decoratorForNamespace.push(resolveDecoratorSignature(dec));
|
|
79
|
+
},
|
|
80
|
+
};
|
|
81
|
+
if (options?.namespaces) {
|
|
82
|
+
for (const namespace of options.namespaces) {
|
|
83
|
+
navigateTypesInNamespace(namespace, listener, { skipSubNamespaces: true });
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
else {
|
|
87
|
+
navigateProgram(program, listener);
|
|
88
|
+
}
|
|
89
|
+
function format(value) {
|
|
90
|
+
try {
|
|
91
|
+
const formatted = prettier.format(value, {
|
|
92
|
+
...options?.prettierConfig,
|
|
93
|
+
parser: "typescript",
|
|
94
|
+
});
|
|
95
|
+
return formatted;
|
|
96
|
+
}
|
|
97
|
+
catch (e) {
|
|
98
|
+
// eslint-disable-next-line no-console
|
|
99
|
+
console.error("Error formatting", e);
|
|
100
|
+
return value;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
const files = {};
|
|
104
|
+
for (const [ns, nsDecorators] of decorators.entries()) {
|
|
105
|
+
const base = ns === "" ? "__global__" : ns;
|
|
106
|
+
const file = `${base}.ts`;
|
|
107
|
+
files[file] = await format(generateSignatures(program, nsDecorators, ns));
|
|
108
|
+
if (!ns.includes(".Private")) {
|
|
109
|
+
files[`${base}.ts-test.ts`] = await format(generateSignatureTests(ns, packageName, `./${base}.js`, nsDecorators));
|
|
110
|
+
}
|
|
111
|
+
}
|
|
112
|
+
return files;
|
|
113
|
+
}
|
|
114
|
+
function resolveDecoratorSignature(decorator) {
|
|
115
|
+
return {
|
|
116
|
+
decorator,
|
|
117
|
+
name: decorator.name,
|
|
118
|
+
jsName: "$" + decorator.name.slice(1),
|
|
119
|
+
typeName: decorator.name[1].toUpperCase() + decorator.name.slice(2) + "Decorator",
|
|
120
|
+
};
|
|
121
|
+
}
|
|
122
|
+
//# sourceMappingURL=gen-extern-signatures.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gen-extern-signatures.js","sourceRoot":"","sources":["../../../src/gen-extern-signatures/gen-extern-signatures.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Decorator } from "../../../compiler/src/core/types.js";
|
|
2
|
+
export interface DecoratorSignature {
|
|
3
|
+
/** Decorator name ()`@example `@foo`) */
|
|
4
|
+
name: string;
|
|
5
|
+
/** Name of the js function. (@example `$foo`) */
|
|
6
|
+
jsName: string;
|
|
7
|
+
/** TypeScript type name (@example `FooDecorator`) */
|
|
8
|
+
typeName: string;
|
|
9
|
+
decorator: Decorator;
|
|
10
|
+
}
|
|
11
|
+
//# sourceMappingURL=types.d.ts.map
|