@typespec/tspd 0.70.0-dev.1 → 0.70.0-dev.3

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.
Files changed (50) hide show
  1. package/dist/src/cli.js +85 -103
  2. package/dist/src/gen-extern-signatures/components/decorator-signature-tests.d.ts +8 -0
  3. package/dist/src/gen-extern-signatures/components/decorator-signature-tests.d.ts.map +1 -0
  4. package/dist/src/gen-extern-signatures/components/decorator-signature-tests.js +16 -0
  5. package/dist/src/gen-extern-signatures/components/decorator-signature-tests.jsx +12 -0
  6. package/dist/src/gen-extern-signatures/components/decorator-signature-tests.jsx.map +1 -0
  7. package/dist/src/gen-extern-signatures/components/decorator-signature-type.d.ts +16 -0
  8. package/dist/src/gen-extern-signatures/components/decorator-signature-type.d.ts.map +1 -0
  9. package/dist/src/gen-extern-signatures/components/decorator-signature-type.js +404 -0
  10. package/dist/src/gen-extern-signatures/components/decorator-signature-type.jsx +316 -0
  11. package/dist/src/gen-extern-signatures/components/decorator-signature-type.jsx.map +1 -0
  12. package/dist/src/gen-extern-signatures/components/decorators-signatures.d.ts +12 -0
  13. package/dist/src/gen-extern-signatures/components/decorators-signatures.d.ts.map +1 -0
  14. package/dist/src/gen-extern-signatures/components/decorators-signatures.js +107 -0
  15. package/dist/src/gen-extern-signatures/components/decorators-signatures.jsx +60 -0
  16. package/dist/src/gen-extern-signatures/components/decorators-signatures.jsx.map +1 -0
  17. package/dist/src/gen-extern-signatures/components/dollar-decorators-type.d.ts +10 -0
  18. package/dist/src/gen-extern-signatures/components/dollar-decorators-type.d.ts.map +1 -0
  19. package/dist/src/gen-extern-signatures/components/dollar-decorators-type.js +39 -0
  20. package/dist/src/gen-extern-signatures/components/dollar-decorators-type.jsx +18 -0
  21. package/dist/src/gen-extern-signatures/components/dollar-decorators-type.jsx.map +1 -0
  22. package/dist/src/gen-extern-signatures/components/tspd-context.d.ts +10 -0
  23. package/dist/src/gen-extern-signatures/components/tspd-context.d.ts.map +1 -0
  24. package/dist/src/gen-extern-signatures/components/tspd-context.js +22 -0
  25. package/dist/src/gen-extern-signatures/components/tspd-context.js.map +1 -0
  26. package/dist/src/gen-extern-signatures/doc-builder.js +10 -12
  27. package/dist/src/gen-extern-signatures/external-packages/compiler.d.ts +17 -0
  28. package/dist/src/gen-extern-signatures/external-packages/compiler.d.ts.map +1 -0
  29. package/dist/src/gen-extern-signatures/external-packages/compiler.js +10 -0
  30. package/dist/src/gen-extern-signatures/external-packages/compiler.js.map +1 -0
  31. package/dist/src/gen-extern-signatures/gen-extern-signatures.d.ts.map +1 -1
  32. package/dist/src/gen-extern-signatures/gen-extern-signatures.js +109 -102
  33. package/dist/src/gen-extern-signatures/gen-extern-signatures.js.map +1 -1
  34. package/dist/src/gen-extern-signatures/types.js +1 -2
  35. package/dist/src/ref-doc/api-docs.js +56 -56
  36. package/dist/src/ref-doc/emitters/docusaurus.js +156 -209
  37. package/dist/src/ref-doc/emitters/markdown.js +278 -327
  38. package/dist/src/ref-doc/emitters/starlight.js +154 -190
  39. package/dist/src/ref-doc/experimental.js +48 -45
  40. package/dist/src/ref-doc/extractor.js +486 -449
  41. package/dist/src/ref-doc/index.js +1 -2
  42. package/dist/src/ref-doc/lib.js +29 -26
  43. package/dist/src/ref-doc/types.js +1 -2
  44. package/dist/src/ref-doc/utils/markdown.js +37 -44
  45. package/dist/src/ref-doc/utils/type-signature.js +89 -98
  46. package/package.json +10 -6
  47. package/dist/src/gen-extern-signatures/decorators-signatures.d.ts +0 -5
  48. package/dist/src/gen-extern-signatures/decorators-signatures.d.ts.map +0 -1
  49. package/dist/src/gen-extern-signatures/decorators-signatures.js +0 -338
  50. package/dist/src/gen-extern-signatures/decorators-signatures.js.map +0 -1
@@ -1,338 +0,0 @@
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
@@ -1 +0,0 @@
1
- {"version":3,"file":"decorators-signatures.js","sourceRoot":"","sources":["../../../src/gen-extern-signatures/decorators-signatures.ts"],"names":[],"mappings":"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"}