@typespec/tspd 0.47.0-dev.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.
Files changed (47) hide show
  1. package/LICENSE +21 -0
  2. package/cmd/tspd.js +2 -0
  3. package/dist/src/cli.d.ts +2 -0
  4. package/dist/src/cli.d.ts.map +1 -0
  5. package/dist/src/cli.js +99 -0
  6. package/dist/src/cli.js.map +1 -0
  7. package/dist/src/ref-doc/api-docs.d.ts +4 -0
  8. package/dist/src/ref-doc/api-docs.d.ts.map +1 -0
  9. package/dist/src/ref-doc/api-docs.js +71 -0
  10. package/dist/src/ref-doc/api-docs.js.map +1 -0
  11. package/dist/src/ref-doc/emitters/docusaurus.d.ts +24 -0
  12. package/dist/src/ref-doc/emitters/docusaurus.d.ts.map +1 -0
  13. package/dist/src/ref-doc/emitters/docusaurus.js +232 -0
  14. package/dist/src/ref-doc/emitters/docusaurus.js.map +1 -0
  15. package/dist/src/ref-doc/emitters/markdown.d.ts +32 -0
  16. package/dist/src/ref-doc/emitters/markdown.d.ts.map +1 -0
  17. package/dist/src/ref-doc/emitters/markdown.js +229 -0
  18. package/dist/src/ref-doc/emitters/markdown.js.map +1 -0
  19. package/dist/src/ref-doc/experimental.d.ts +9 -0
  20. package/dist/src/ref-doc/experimental.d.ts.map +1 -0
  21. package/dist/src/ref-doc/experimental.js +63 -0
  22. package/dist/src/ref-doc/experimental.js.map +1 -0
  23. package/dist/src/ref-doc/extractor.d.ts +11 -0
  24. package/dist/src/ref-doc/extractor.d.ts.map +1 -0
  25. package/dist/src/ref-doc/extractor.js +497 -0
  26. package/dist/src/ref-doc/extractor.js.map +1 -0
  27. package/dist/src/ref-doc/index.d.ts +5 -0
  28. package/dist/src/ref-doc/index.d.ts.map +1 -0
  29. package/dist/src/ref-doc/index.js +5 -0
  30. package/dist/src/ref-doc/index.js.map +1 -0
  31. package/dist/src/ref-doc/lib.d.ts +63 -0
  32. package/dist/src/ref-doc/lib.d.ts.map +1 -0
  33. package/dist/src/ref-doc/lib.js +24 -0
  34. package/dist/src/ref-doc/lib.js.map +1 -0
  35. package/dist/src/ref-doc/types.d.ts +109 -0
  36. package/dist/src/ref-doc/types.d.ts.map +1 -0
  37. package/dist/src/ref-doc/types.js +2 -0
  38. package/dist/src/ref-doc/types.js.map +1 -0
  39. package/dist/src/ref-doc/utils/markdown.d.ts +27 -0
  40. package/dist/src/ref-doc/utils/markdown.d.ts.map +1 -0
  41. package/dist/src/ref-doc/utils/markdown.js +70 -0
  42. package/dist/src/ref-doc/utils/markdown.js.map +1 -0
  43. package/dist/src/ref-doc/utils/type-signature.d.ts +5 -0
  44. package/dist/src/ref-doc/utils/type-signature.d.ts.map +1 -0
  45. package/dist/src/ref-doc/utils/type-signature.js +136 -0
  46. package/dist/src/ref-doc/utils/type-signature.js.map +1 -0
  47. package/package.json +81 -0
@@ -0,0 +1,229 @@
1
+ import { resolvePath } from "@typespec/compiler";
2
+ import { readFile } from "fs/promises";
3
+ import { stringify } from "yaml";
4
+ import { codeblock, inlinecode, link, renderMarkdowDoc, section, table, } from "../utils/markdown.js";
5
+ import { getTypeSignature } from "../utils/type-signature.js";
6
+ async function loadTemplate(projectRoot, name) {
7
+ try {
8
+ const content = await readFile(resolvePath(projectRoot, `.tspd/docs/${name}.md`));
9
+ return content.toString();
10
+ }
11
+ catch (e) {
12
+ if (typeof e === "object" && (e === null || e === void 0 ? void 0 : e.code) === "ENOENT") {
13
+ return undefined;
14
+ }
15
+ throw e;
16
+ }
17
+ }
18
+ export async function renderReadme(refDoc, projectRoot) {
19
+ var _a;
20
+ const content = [];
21
+ const renderer = new MarkdownRenderer();
22
+ if (refDoc.description) {
23
+ content.push(refDoc.description);
24
+ }
25
+ content.push(renderer.install(refDoc));
26
+ const usageTemplate = await loadTemplate(projectRoot, "usage");
27
+ if (usageTemplate) {
28
+ content.push(section("Usage", [usageTemplate]));
29
+ }
30
+ if ((_a = refDoc.emitter) === null || _a === void 0 ? void 0 : _a.options) {
31
+ content.push(renderer.emitterUsage(refDoc));
32
+ }
33
+ if (refDoc.linter) {
34
+ content.push(renderer.linterUsage(refDoc));
35
+ }
36
+ if (refDoc.namespaces.some((x) => x.decorators.length > 0)) {
37
+ content.push(section("Decorators", renderer.decoratorsSection(refDoc, { includeToc: true })));
38
+ }
39
+ return renderMarkdowDoc(section(refDoc.name, content));
40
+ }
41
+ export function groupByNamespace(namespaces, callback) {
42
+ const content = [];
43
+ for (const namespace of namespaces) {
44
+ const contentForNamespace = callback(namespace);
45
+ if (contentForNamespace) {
46
+ content.push(section(namespace.id, contentForNamespace));
47
+ }
48
+ }
49
+ return content;
50
+ }
51
+ /**
52
+ * Github flavored markdown renderer.
53
+ */
54
+ export class MarkdownRenderer {
55
+ headingTitle(item) {
56
+ return inlinecode(item.name);
57
+ }
58
+ anchorId(item) {
59
+ return `${item.name.toLowerCase().replace(/ /g, "-")}`;
60
+ }
61
+ //#region TypeSpec types
62
+ operation(op) {
63
+ const content = ["", op.doc, codeblock(op.signature, "typespec"), ""];
64
+ if (op.templateParameters) {
65
+ content.push(this.templateParameters(op.templateParameters));
66
+ }
67
+ content.push(this.examples(op.examples));
68
+ return section(this.headingTitle(op), content);
69
+ }
70
+ interface(iface) {
71
+ const content = ["", iface.doc, codeblock(iface.signature, "typespec"), ""];
72
+ if (iface.templateParameters) {
73
+ content.push(this.templateParameters(iface.templateParameters));
74
+ }
75
+ if (iface.interfaceOperations.length > 0) {
76
+ for (const op of iface.interfaceOperations) {
77
+ content.push(this.operation(op));
78
+ }
79
+ }
80
+ content.push(this.examples(iface.examples));
81
+ return section(this.headingTitle(iface), content);
82
+ }
83
+ model(model) {
84
+ const content = ["", model.doc, codeblock(model.signature, "typespec"), ""];
85
+ if (model.templateParameters) {
86
+ content.push(this.templateParameters(model.templateParameters));
87
+ }
88
+ content.push(this.examples(model.examples));
89
+ return section(this.headingTitle(model), content);
90
+ }
91
+ enum(e) {
92
+ const content = [
93
+ "",
94
+ e.doc,
95
+ codeblock(e.signature, "typespec"),
96
+ "",
97
+ this.examples(e.examples),
98
+ ];
99
+ return section(this.headingTitle(e), content);
100
+ }
101
+ union(union) {
102
+ const content = ["", union.doc, codeblock(union.signature, "typespec"), ""];
103
+ if (union.templateParameters) {
104
+ content.push(this.templateParameters(union.templateParameters));
105
+ }
106
+ content.push(this.examples(union.examples));
107
+ return section(this.headingTitle(union), content);
108
+ }
109
+ scalar(scalar) {
110
+ const content = ["", scalar.doc, codeblock(scalar.signature, "typespec"), ""];
111
+ if (scalar.templateParameters) {
112
+ content.push(this.templateParameters(scalar.templateParameters));
113
+ }
114
+ content.push(this.examples(scalar.examples));
115
+ return section(this.headingTitle(scalar), content);
116
+ }
117
+ templateParameters(templateParameters) {
118
+ const paramTable = [["Name", "Description"]];
119
+ for (const param of templateParameters) {
120
+ paramTable.push([param.name, param.doc]);
121
+ }
122
+ return section("Template Parameters", [table(paramTable), ""]);
123
+ }
124
+ decorator(dec) {
125
+ const content = ["", dec.doc, codeblock(dec.signature, "typespec"), ""];
126
+ content.push(section("Target", [dec.target.doc, inlinecode(getTypeSignature(dec.target.type.type)), ""]));
127
+ if (dec.parameters.length > 0) {
128
+ const paramTable = [["Name", "Type", "Description"]];
129
+ for (const param of dec.parameters) {
130
+ paramTable.push([param.name, inlinecode(getTypeSignature(param.type.type)), param.doc]);
131
+ }
132
+ content.push(section("Parameters", [table(paramTable), ""]));
133
+ }
134
+ else {
135
+ content.push(section("Parameters", ["None", ""]));
136
+ }
137
+ content.push(this.examples(dec.examples));
138
+ return section(this.headingTitle(dec), content);
139
+ }
140
+ examples(examples) {
141
+ const content = [];
142
+ if (examples.length === 0) {
143
+ return "";
144
+ }
145
+ for (const example of examples) {
146
+ const exampleContent = ["", example.content, ""];
147
+ if (example.title) {
148
+ content.push(section(example.title, exampleContent));
149
+ }
150
+ else {
151
+ content.push(exampleContent);
152
+ }
153
+ }
154
+ return section("Examples", content);
155
+ }
156
+ // #endregion TypeSpec types
157
+ /** Render all decorators */
158
+ decoratorsSection(refDoc, options = {}) {
159
+ return groupByNamespace(refDoc.namespaces, (namespace) => {
160
+ if (namespace.decorators.length === 0) {
161
+ return undefined;
162
+ }
163
+ return [
164
+ options.includeToc ? this.toc(namespace.decorators) : [],
165
+ namespace.decorators.map((x) => [this.decorator(x), ""]),
166
+ ];
167
+ });
168
+ }
169
+ toc(items, filename) {
170
+ return items.map((item) => ` - [${inlinecode(item.name)}](${filename !== null && filename !== void 0 ? filename : ""}#${this.anchorId(item)})`);
171
+ }
172
+ install(refDoc) {
173
+ return section("Install", [codeblock(`npm install ${refDoc.name}`, "bash")]);
174
+ }
175
+ emitterUsage(refDoc) {
176
+ var _a;
177
+ if (((_a = refDoc.emitter) === null || _a === void 0 ? void 0 : _a.options) === undefined) {
178
+ return [];
179
+ }
180
+ return section("Emitter", [
181
+ section("Usage", [
182
+ "1. Via the command line",
183
+ codeblock(`tsp compile . --emit=${refDoc.name}`, "bash"),
184
+ "2. Via the config",
185
+ codeblock(`emit:\n - "${refDoc.name}" `, "yaml"),
186
+ ]),
187
+ this.emitterOptions(refDoc.emitter.options),
188
+ ]);
189
+ }
190
+ emitterOptions(options) {
191
+ const content = [];
192
+ for (const option of options) {
193
+ content.push(section(`${inlinecode(option.name)}`, [`**Type:** ${inlinecode(option.type)}`, ""]));
194
+ content.push(option.doc);
195
+ }
196
+ return section("Emitter options", content);
197
+ }
198
+ linterUsage(refDoc) {
199
+ if (refDoc.linter === undefined) {
200
+ return [];
201
+ }
202
+ const setupExample = stringify({
203
+ linter: refDoc.linter.ruleSets
204
+ ? { extends: [refDoc.linter.ruleSets[0].name] }
205
+ : { rules: {} },
206
+ });
207
+ return section("Linter", [
208
+ section("Usage", ["Add the following in `tspconfig.yaml`:", codeblock(setupExample, "yaml")]),
209
+ refDoc.linter.ruleSets
210
+ ? section("RuleSets", ["Available ruleSets:", this.toc(refDoc.linter.ruleSets)])
211
+ : [],
212
+ section("Rules", this.linterRuleToc(refDoc.linter.rules)),
213
+ ]);
214
+ }
215
+ linterRuleToc(rules) {
216
+ return table([
217
+ ["Name", "Description"],
218
+ ...rules.map((rule) => {
219
+ const name = inlinecode(rule.name);
220
+ const nameCell = rule.rule.url ? link(name, this.linterRuleLink(rule.rule.url)) : name;
221
+ return [nameCell, rule.rule.description];
222
+ }),
223
+ ]);
224
+ }
225
+ linterRuleLink(url) {
226
+ return url;
227
+ }
228
+ }
229
+ //# sourceMappingURL=markdown.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"markdown.js","sourceRoot":"","sources":["../../../../src/ref-doc/emitters/markdown.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ import { Diagnostic } from "@typespec/compiler";
2
+ import { ExtractRefDocOptions } from "./extractor.js";
3
+ import { TypeSpecRefDocBase } from "./types.js";
4
+ /**
5
+ * @experimental this is for experimental and is for internal use only. Breaking change to this API can happen at anytime.
6
+ */
7
+ export declare function generateLibraryDocs(libraryPath: string, outputDir: string, skipJSApi?: boolean): Promise<readonly Diagnostic[]>;
8
+ export declare function resolveLibraryRefDocsBase(libraryPath: string, options?: ExtractRefDocOptions): Promise<[TypeSpecRefDocBase, readonly Diagnostic[]] | undefined>;
9
+ //# sourceMappingURL=experimental.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"experimental.d.ts","sourceRoot":"","sources":["../../../src/ref-doc/experimental.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,UAAU,EAIX,MAAM,oBAAoB,CAAC;AAM5B,OAAO,EAAyB,oBAAoB,EAAkB,MAAM,gBAAgB,CAAC;AAC7F,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD;;GAEG;AACH,wBAAsB,mBAAmB,CACvC,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,SAAS,GAAE,OAAe,GACzB,OAAO,CAAC,SAAS,UAAU,EAAE,CAAC,CAqBhC;AAED,wBAAsB,yBAAyB,CAC7C,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,oBAAyB,GACjC,OAAO,CAAC,CAAC,kBAAkB,EAAE,SAAS,UAAU,EAAE,CAAC,GAAG,SAAS,CAAC,CAelE"}
@@ -0,0 +1,63 @@
1
+ import { compile, createDiagnosticCollector, joinPaths, NodeHost, } from "@typespec/compiler";
2
+ import { mkdir, readFile, writeFile } from "fs/promises";
3
+ import prettier from "prettier";
4
+ import { generateJsApiDocs } from "./api-docs.js";
5
+ import { renderToDocusaurusMarkdown } from "./emitters/docusaurus.js";
6
+ import { renderReadme } from "./emitters/markdown.js";
7
+ import { extractLibraryRefDocs, extractRefDocs } from "./extractor.js";
8
+ /**
9
+ * @experimental this is for experimental and is for internal use only. Breaking change to this API can happen at anytime.
10
+ */
11
+ export async function generateLibraryDocs(libraryPath, outputDir, skipJSApi = false) {
12
+ const diagnostics = createDiagnosticCollector();
13
+ const pkgJson = await readPackageJson(libraryPath);
14
+ const refDoc = diagnostics.pipe(await extractLibraryRefDocs(libraryPath));
15
+ const files = renderToDocusaurusMarkdown(refDoc);
16
+ await mkdir(outputDir, { recursive: true });
17
+ const config = await prettier.resolveConfig(libraryPath);
18
+ for (const [name, content] of Object.entries(files)) {
19
+ const formatted = await formatMarkdown(name, content, config);
20
+ await writeFile(joinPaths(outputDir, name), formatted);
21
+ }
22
+ const readme = await formatMarkdown(joinPaths(libraryPath, "README.md"), await renderReadme(refDoc, libraryPath), config !== null && config !== void 0 ? config : {});
23
+ await writeFile(joinPaths(libraryPath, "README.md"), readme);
24
+ if (pkgJson.main && !skipJSApi) {
25
+ await generateJsApiDocs(libraryPath, joinPaths(outputDir, "js-api"));
26
+ }
27
+ return diagnostics.diagnostics;
28
+ }
29
+ export async function resolveLibraryRefDocsBase(libraryPath, options = {}) {
30
+ var _a;
31
+ const diagnostics = createDiagnosticCollector();
32
+ const pkgJson = await readPackageJson(libraryPath);
33
+ if (pkgJson.tspMain) {
34
+ const main = joinPaths(libraryPath, pkgJson.tspMain);
35
+ const program = await compile(NodeHost, main, {
36
+ parseOptions: { comments: true, docs: true },
37
+ });
38
+ const refDoc = diagnostics.pipe(extractRefDocs(program, options));
39
+ for (const diag of (_a = program.diagnostics) !== null && _a !== void 0 ? _a : []) {
40
+ diagnostics.add(diag);
41
+ }
42
+ return diagnostics.wrap(refDoc);
43
+ }
44
+ return undefined;
45
+ }
46
+ async function readPackageJson(libraryPath) {
47
+ const buffer = await readFile(joinPaths(libraryPath, "package.json"));
48
+ return JSON.parse(buffer.toString());
49
+ }
50
+ async function formatMarkdown(filename, content, options) {
51
+ try {
52
+ return await prettier.format(content, {
53
+ ...(options !== null && options !== void 0 ? options : {}),
54
+ parser: "markdown",
55
+ });
56
+ }
57
+ catch (e) {
58
+ // eslint-disable-next-line no-console
59
+ console.error(`Cannot format with prettier ${filename}`, e);
60
+ return content;
61
+ }
62
+ }
63
+ //# sourceMappingURL=experimental.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"experimental.js","sourceRoot":"","sources":["../../../src/ref-doc/experimental.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,OAAO,EACP,yBAAyB,EAEzB,SAAS,EACT,QAAQ,GAET,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACzD,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,iBAAiB,EAAE,MAAM,eAAe,CAAC;AAClD,OAAO,EAAE,0BAA0B,EAAE,MAAM,0BAA0B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAwB,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAG7F;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CACvC,WAAmB,EACnB,SAAiB,EACjB,YAAqB,KAAK;IAE1B,MAAM,WAAW,GAAG,yBAAyB,EAAE,CAAC;IAChD,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;IACnD,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,qBAAqB,CAAC,WAAW,CAAC,CAAC,CAAC;IAC1E,MAAM,KAAK,GAAG,0BAA0B,CAAC,MAAM,CAAC,CAAC;IACjD,MAAM,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC5C,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,aAAa,CAAC,WAAW,CAAC,CAAC;IACzD,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;QACpD,MAAM,SAAS,GAAG,MAAM,cAAc,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;QAC9D,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,EAAE,SAAS,CAAC,CAAC;IACzD,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,cAAc,CACjC,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC,EACnC,MAAM,YAAY,CAAC,MAAM,EAAE,WAAW,CAAC,EACvC,MAAM,aAAN,MAAM,cAAN,MAAM,GAAI,EAAE,CACb,CAAC;IACF,MAAM,SAAS,CAAC,SAAS,CAAC,WAAW,EAAE,WAAW,CAAC,EAAE,MAAM,CAAC,CAAC;IAC7D,IAAI,OAAO,CAAC,IAAI,IAAI,CAAC,SAAS,EAAE,CAAC;QAC/B,MAAM,iBAAiB,CAAC,WAAW,EAAE,SAAS,CAAC,SAAS,EAAE,QAAQ,CAAC,CAAC,CAAC;IACvE,CAAC;IACD,OAAO,WAAW,CAAC,WAAW,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,yBAAyB,CAC7C,WAAmB,EACnB,UAAgC,EAAE;;IAElC,MAAM,WAAW,GAAG,yBAAyB,EAAE,CAAC;IAChD,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,WAAW,CAAC,CAAC;IACnD,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,GAAG,SAAS,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,CAAC;QACrD,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,QAAQ,EAAE,IAAI,EAAE;YAC5C,YAAY,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE;SAC7C,CAAC,CAAC;QACH,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,CAAC,cAAc,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC;QAClE,KAAK,MAAM,IAAI,IAAI,MAAA,OAAO,CAAC,WAAW,mCAAI,EAAE,EAAE,CAAC;YAC7C,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QACD,OAAO,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAClC,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,KAAK,UAAU,eAAe,CAAC,WAAmB;IAChD,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,SAAS,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC,CAAC;IACtE,OAAO,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;AACvC,CAAC;AACD,KAAK,UAAU,cAAc,CAC3B,QAAgB,EAChB,OAAe,EACf,OAAgC;IAEhC,IAAI,CAAC;QACH,OAAO,MAAM,QAAQ,CAAC,MAAM,CAAC,OAAO,EAAE;YACpC,GAAG,CAAC,OAAO,aAAP,OAAO,cAAP,OAAO,GAAI,EAAE,CAAC;YAClB,MAAM,EAAE,UAAU;SACnB,CAAC,CAAC;IACL,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,sCAAsC;QACtC,OAAO,CAAC,KAAK,CAAC,+BAA+B,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;QAC5D,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ import { Diagnostic, Program } from "@typespec/compiler";
2
+ import { TypeSpecLibraryRefDoc, TypeSpecRefDocBase } from "./types.js";
3
+ export declare function extractLibraryRefDocs(libraryPath: string): Promise<[TypeSpecLibraryRefDoc, readonly Diagnostic[]]>;
4
+ export interface ExtractRefDocOptions {
5
+ namespaces?: {
6
+ include?: string[];
7
+ exclude?: string[];
8
+ };
9
+ }
10
+ export declare function extractRefDocs(program: Program, options?: ExtractRefDocOptions): [TypeSpecRefDocBase, readonly Diagnostic[]];
11
+ //# sourceMappingURL=extractor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"extractor.d.ts","sourceRoot":"","sources":["../../../src/ref-doc/extractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAKL,UAAU,EAwBV,OAAO,EAQR,MAAM,oBAAoB,CAAC;AAI5B,OAAO,EAcL,qBAAqB,EACrB,kBAAkB,EAEnB,MAAM,YAAY,CAAC;AAGpB,wBAAsB,qBAAqB,CACzC,WAAW,EAAE,MAAM,GAClB,OAAO,CAAC,CAAC,qBAAqB,EAAE,SAAS,UAAU,EAAE,CAAC,CAAC,CAoCzD;AAOD,MAAM,WAAW,oBAAoB;IACnC,UAAU,CAAC,EAAE;QACX,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;QACnB,OAAO,CAAC,EAAE,MAAM,EAAE,CAAC;KACpB,CAAC;CACH;AAkCD,wBAAgB,cAAc,CAC5B,OAAO,EAAE,OAAO,EAChB,OAAO,GAAE,oBAAyB,GACjC,CAAC,kBAAkB,EAAE,SAAS,UAAU,EAAE,CAAC,CAwF7C"}