@metamask-previews/messenger-cli 0.0.0-preview-4a2a8e8f6 → 0.1.0-preview-e19d3725e
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/CHANGELOG.md +8 -1
- package/dist/docs/cli.cjs +199 -0
- package/dist/docs/cli.cjs.map +1 -0
- package/dist/docs/cli.d.cts +3 -0
- package/dist/docs/cli.d.cts.map +1 -0
- package/dist/docs/cli.d.mts +3 -0
- package/dist/docs/cli.d.mts.map +1 -0
- package/dist/docs/cli.mjs +198 -0
- package/dist/docs/cli.mjs.map +1 -0
- package/dist/docs/discovery.cjs +46 -0
- package/dist/docs/discovery.cjs.map +1 -0
- package/dist/docs/discovery.d.cts +17 -0
- package/dist/docs/discovery.d.cts.map +1 -0
- package/dist/docs/discovery.d.mts +17 -0
- package/dist/docs/discovery.d.mts.map +1 -0
- package/dist/docs/discovery.mjs +41 -0
- package/dist/docs/discovery.mjs.map +1 -0
- package/dist/docs/extraction.cjs +569 -0
- package/dist/docs/extraction.cjs.map +1 -0
- package/dist/docs/extraction.d.cts +10 -0
- package/dist/docs/extraction.d.cts.map +1 -0
- package/dist/docs/extraction.d.mts +10 -0
- package/dist/docs/extraction.d.mts.map +1 -0
- package/dist/docs/extraction.mjs +543 -0
- package/dist/docs/extraction.mjs.map +1 -0
- package/dist/docs/generate.cjs +254 -0
- package/dist/docs/generate.cjs.map +1 -0
- package/dist/docs/generate.d.cts +27 -0
- package/dist/docs/generate.d.cts.map +1 -0
- package/dist/docs/generate.d.mts +27 -0
- package/dist/docs/generate.d.mts.map +1 -0
- package/dist/docs/generate.mjs +227 -0
- package/dist/docs/generate.mjs.map +1 -0
- package/dist/docs/markdown.cjs +210 -0
- package/dist/docs/markdown.cjs.map +1 -0
- package/dist/docs/markdown.d.cts +35 -0
- package/dist/docs/markdown.d.cts.map +1 -0
- package/dist/docs/markdown.d.mts +35 -0
- package/dist/docs/markdown.d.mts.map +1 -0
- package/dist/docs/markdown.mjs +203 -0
- package/dist/docs/markdown.mjs.map +1 -0
- package/dist/docs/types.cjs +3 -0
- package/dist/docs/types.cjs.map +1 -0
- package/dist/docs/types.d.cts +23 -0
- package/dist/docs/types.d.cts.map +1 -0
- package/dist/docs/types.d.mts +23 -0
- package/dist/docs/types.d.mts.map +1 -0
- package/dist/docs/types.mjs +2 -0
- package/dist/docs/types.mjs.map +1 -0
- package/package.json +24 -4
- package/template/docusaurus.config.ts +123 -0
- package/template/src/css/custom.css +314 -0
- package/template/static/fonts/MM-Sans/MM_Sans_Mono-Regular.woff2 +0 -0
- package/template/static/img/favicons/favicon-96x96.png +0 -0
- package/template/static/img/metamask-fox.svg +12 -0
- package/template/static/img/metamask-logo-dark.svg +3 -0
- package/template/static/img/metamask-logo.svg +3 -0
- package/template/tsconfig.json +13 -0
|
@@ -0,0 +1,210 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.generateSidebars = exports.generateIndexPage = exports.generateNamespacePage = exports.generateItemMarkdown = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Convert backtick-quoted action/event names in text into links when they
|
|
6
|
+
* match a known item in the same namespace. For example, `` `setActiveNetwork` ``
|
|
7
|
+
* becomes a link to `#networkcontrollersetactivenetwork` on the actions page.
|
|
8
|
+
*
|
|
9
|
+
* @param text - The markdown text to process.
|
|
10
|
+
* @param namespace - The current namespace (e.g. "NetworkController").
|
|
11
|
+
* @param knownNames - Map from short name (e.g. "setActiveNetwork") to the page-relative path and anchor.
|
|
12
|
+
* @returns The text with backtick references replaced by links.
|
|
13
|
+
*/
|
|
14
|
+
function linkifyReferences(text, namespace, knownNames) {
|
|
15
|
+
return text.replace(/`([a-zA-Z]\w*)`/gu, (match, name) => {
|
|
16
|
+
const link = knownNames.get(name);
|
|
17
|
+
if (link) {
|
|
18
|
+
return `[\`${name}\`](${link})`;
|
|
19
|
+
}
|
|
20
|
+
// Also try with namespace prefix (e.g. "NetworkController:setActiveNetwork")
|
|
21
|
+
const fullName = `${namespace}:${name}`;
|
|
22
|
+
const anchor = fullName.toLowerCase().replace(/[^a-z0-9]/gu, '');
|
|
23
|
+
const linkFull = knownNames.get(fullName);
|
|
24
|
+
if (linkFull) {
|
|
25
|
+
return `[\`${name}\`](${linkFull})`;
|
|
26
|
+
}
|
|
27
|
+
// Check if the anchor exists anywhere in known names values
|
|
28
|
+
for (const [, href] of knownNames) {
|
|
29
|
+
if (href.includes(anchor)) {
|
|
30
|
+
return `[\`${name}\`](${href})`;
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
return match;
|
|
34
|
+
});
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Generate markdown documentation for a single messenger item.
|
|
38
|
+
*
|
|
39
|
+
* @param item - The messenger item to document.
|
|
40
|
+
* @param namespace - The current namespace.
|
|
41
|
+
* @param knownNames - Map from short/full names to their link paths.
|
|
42
|
+
* @param repoBaseUrl - Optional GitHub blob base URL (e.g. "https://github.com/Owner/Repo/blob/sha/").
|
|
43
|
+
* @returns The generated markdown string.
|
|
44
|
+
*/
|
|
45
|
+
function generateItemMarkdown(item, namespace, knownNames, repoBaseUrl) {
|
|
46
|
+
const parts = [];
|
|
47
|
+
parts.push(`### \`${item.typeString}\``);
|
|
48
|
+
parts.push('');
|
|
49
|
+
if (item.deprecated) {
|
|
50
|
+
parts.push('> **Deprecated**');
|
|
51
|
+
parts.push('');
|
|
52
|
+
}
|
|
53
|
+
if (item.sourceFile.includes('node_modules/')) {
|
|
54
|
+
const pkgMatch = item.sourceFile.match(/node_modules\/(@metamask\/[^/]+)/u);
|
|
55
|
+
const pkgName = pkgMatch ? pkgMatch[1] : item.sourceFile;
|
|
56
|
+
const npmUrl = `https://www.npmjs.com/package/${pkgName}`;
|
|
57
|
+
parts.push(`**Package**: [\`${pkgName}\`](${npmUrl})`);
|
|
58
|
+
}
|
|
59
|
+
else if (repoBaseUrl) {
|
|
60
|
+
const ghUrl = `${repoBaseUrl}${item.sourceFile}#L${item.line}`;
|
|
61
|
+
parts.push(`**Source**: [${item.sourceFile}:${item.line}](${ghUrl})`);
|
|
62
|
+
}
|
|
63
|
+
else {
|
|
64
|
+
parts.push(`**Source**: \`${item.sourceFile}:${item.line}\``);
|
|
65
|
+
}
|
|
66
|
+
parts.push('');
|
|
67
|
+
if (item.jsDoc) {
|
|
68
|
+
parts.push(linkifyReferences(item.jsDoc, namespace, knownNames));
|
|
69
|
+
parts.push('');
|
|
70
|
+
}
|
|
71
|
+
const label = item.kind === 'action' ? 'Handler' : 'Payload';
|
|
72
|
+
parts.push(`**${label}**:`);
|
|
73
|
+
parts.push('');
|
|
74
|
+
parts.push('```typescript');
|
|
75
|
+
parts.push(item.handlerOrPayload);
|
|
76
|
+
parts.push('```');
|
|
77
|
+
parts.push('');
|
|
78
|
+
return parts.join('\n');
|
|
79
|
+
}
|
|
80
|
+
exports.generateItemMarkdown = generateItemMarkdown;
|
|
81
|
+
/**
|
|
82
|
+
* Generate a full markdown page for a namespace's actions or events.
|
|
83
|
+
*
|
|
84
|
+
* @param ns - The namespace group to generate a page for.
|
|
85
|
+
* @param kind - Whether to generate the actions or events page.
|
|
86
|
+
* @param repoBaseUrl - Optional GitHub blob base URL for source links.
|
|
87
|
+
* @returns The generated markdown string.
|
|
88
|
+
*/
|
|
89
|
+
function generateNamespacePage(ns, kind, repoBaseUrl = null) {
|
|
90
|
+
const items = kind === 'action' ? ns.actions : ns.events;
|
|
91
|
+
const title = kind === 'action' ? 'Actions' : 'Events';
|
|
92
|
+
const parts = [];
|
|
93
|
+
parts.push('---');
|
|
94
|
+
parts.push(`title: "${ns.namespace} ${title}"`);
|
|
95
|
+
parts.push(`sidebar_label: "${title}"`);
|
|
96
|
+
parts.push('---');
|
|
97
|
+
parts.push('');
|
|
98
|
+
parts.push(`# ${ns.namespace} ${title}`);
|
|
99
|
+
parts.push('');
|
|
100
|
+
if (items.length === 0) {
|
|
101
|
+
parts.push(`_No ${kind}s found for this namespace._`);
|
|
102
|
+
parts.push('');
|
|
103
|
+
return parts.join('\n');
|
|
104
|
+
}
|
|
105
|
+
parts.push(`${items.length} ${kind}${items.length === 1 ? '' : 's'} registered.`);
|
|
106
|
+
parts.push('');
|
|
107
|
+
// Build a map of known names → link paths for cross-referencing.
|
|
108
|
+
// Actions on same page get #anchor, actions/events on sibling page get relative path.
|
|
109
|
+
const knownNames = new Map();
|
|
110
|
+
for (const action of ns.actions) {
|
|
111
|
+
const shortName = action.typeString.split(':')[1];
|
|
112
|
+
const anchor = action.typeString.toLowerCase().replace(/[^a-z0-9]/gu, '');
|
|
113
|
+
const href = kind === 'action' ? `#${anchor}` : `./actions#${anchor}`;
|
|
114
|
+
knownNames.set(shortName, href);
|
|
115
|
+
knownNames.set(action.typeString, href);
|
|
116
|
+
}
|
|
117
|
+
for (const event of ns.events) {
|
|
118
|
+
const shortName = event.typeString.split(':')[1];
|
|
119
|
+
const anchor = event.typeString.toLowerCase().replace(/[^a-z0-9]/gu, '');
|
|
120
|
+
const href = kind === 'event' ? `#${anchor}` : `./events#${anchor}`;
|
|
121
|
+
knownNames.set(shortName, href);
|
|
122
|
+
knownNames.set(event.typeString, href);
|
|
123
|
+
}
|
|
124
|
+
// Table of contents
|
|
125
|
+
parts.push('| Name | Deprecated |');
|
|
126
|
+
parts.push('|------|-----------|');
|
|
127
|
+
for (const item of items) {
|
|
128
|
+
const name = item.typeString.split(':')[1];
|
|
129
|
+
// Docusaurus uses github-slugger: strips non-alphanumeric, lowercases, no dashes for special chars in code spans
|
|
130
|
+
const anchor = item.typeString.toLowerCase().replace(/[^a-z0-9]/gu, '');
|
|
131
|
+
const dep = item.deprecated ? 'Yes' : '';
|
|
132
|
+
parts.push(`| [\`${name}\`](#${anchor}) | ${dep} |`);
|
|
133
|
+
}
|
|
134
|
+
parts.push('');
|
|
135
|
+
parts.push('---');
|
|
136
|
+
parts.push('');
|
|
137
|
+
for (const item of items) {
|
|
138
|
+
parts.push(generateItemMarkdown(item, ns.namespace, knownNames, repoBaseUrl));
|
|
139
|
+
parts.push('---');
|
|
140
|
+
parts.push('');
|
|
141
|
+
}
|
|
142
|
+
return parts.join('\n');
|
|
143
|
+
}
|
|
144
|
+
exports.generateNamespacePage = generateNamespacePage;
|
|
145
|
+
/**
|
|
146
|
+
* Generate the index/overview page listing all namespaces.
|
|
147
|
+
*
|
|
148
|
+
* @param namespaces - All namespace groups sorted alphabetically.
|
|
149
|
+
* @returns The generated markdown string.
|
|
150
|
+
*/
|
|
151
|
+
function generateIndexPage(namespaces) {
|
|
152
|
+
const totalActions = namespaces.reduce((sum, ns) => sum + ns.actions.length, 0);
|
|
153
|
+
const totalEvents = namespaces.reduce((sum, ns) => sum + ns.events.length, 0);
|
|
154
|
+
const parts = [];
|
|
155
|
+
parts.push('---');
|
|
156
|
+
parts.push('title: "Messenger API Reference"');
|
|
157
|
+
parts.push('slug: "/"');
|
|
158
|
+
parts.push('---');
|
|
159
|
+
parts.push('');
|
|
160
|
+
parts.push('# Messenger API');
|
|
161
|
+
parts.push('');
|
|
162
|
+
parts.push('This site documents every action and event registered on the Messenger — the type-safe message bus used across all controllers.');
|
|
163
|
+
parts.push('');
|
|
164
|
+
parts.push(`- **${namespaces.length}** namespaces`);
|
|
165
|
+
parts.push(`- **${totalActions}** actions`);
|
|
166
|
+
parts.push(`- **${totalEvents}** events`);
|
|
167
|
+
parts.push('');
|
|
168
|
+
parts.push('## Namespaces');
|
|
169
|
+
parts.push('');
|
|
170
|
+
parts.push('| Namespace | Actions | Events |');
|
|
171
|
+
parts.push('|-----------|---------|--------|');
|
|
172
|
+
for (const ns of namespaces) {
|
|
173
|
+
const firstLink = ns.actions.length > 0
|
|
174
|
+
? `${ns.namespace}/actions`
|
|
175
|
+
: `${ns.namespace}/events`;
|
|
176
|
+
parts.push(`| [${ns.namespace}](${firstLink}) | ${ns.actions.length} | ${ns.events.length} |`);
|
|
177
|
+
}
|
|
178
|
+
parts.push('');
|
|
179
|
+
return parts.join('\n');
|
|
180
|
+
}
|
|
181
|
+
exports.generateIndexPage = generateIndexPage;
|
|
182
|
+
/**
|
|
183
|
+
* Generate the sidebars.ts file content for Docusaurus.
|
|
184
|
+
*
|
|
185
|
+
* @param namespaces - All namespace groups sorted alphabetically.
|
|
186
|
+
* @returns The generated TypeScript source string.
|
|
187
|
+
*/
|
|
188
|
+
function generateSidebars(namespaces) {
|
|
189
|
+
const items = namespaces.map((ns) => ({
|
|
190
|
+
type: 'category',
|
|
191
|
+
label: ns.namespace,
|
|
192
|
+
items: [
|
|
193
|
+
...(ns.actions.length > 0 ? [`${ns.namespace}/actions`] : []),
|
|
194
|
+
...(ns.events.length > 0 ? [`${ns.namespace}/events`] : []),
|
|
195
|
+
],
|
|
196
|
+
}));
|
|
197
|
+
const sidebar = {
|
|
198
|
+
messengerSidebar: [
|
|
199
|
+
{
|
|
200
|
+
type: 'doc',
|
|
201
|
+
id: 'index',
|
|
202
|
+
label: 'Overview',
|
|
203
|
+
},
|
|
204
|
+
...items,
|
|
205
|
+
],
|
|
206
|
+
};
|
|
207
|
+
return `// This file is auto-generated by @metamask/messenger-docs\n// Do not edit manually.\nconst sidebars = ${JSON.stringify(sidebar, null, 2)};\nexport default sidebars;\n`;
|
|
208
|
+
}
|
|
209
|
+
exports.generateSidebars = generateSidebars;
|
|
210
|
+
//# sourceMappingURL=markdown.cjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.cjs","sourceRoot":"","sources":["../../src/docs/markdown.ts"],"names":[],"mappings":"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","sourcesContent":["import type { MessengerItemDoc, NamespaceGroup } from './types';\n\n/**\n * Convert backtick-quoted action/event names in text into links when they\n * match a known item in the same namespace. For example, `` `setActiveNetwork` ``\n * becomes a link to `#networkcontrollersetactivenetwork` on the actions page.\n *\n * @param text - The markdown text to process.\n * @param namespace - The current namespace (e.g. \"NetworkController\").\n * @param knownNames - Map from short name (e.g. \"setActiveNetwork\") to the page-relative path and anchor.\n * @returns The text with backtick references replaced by links.\n */\nfunction linkifyReferences(\n text: string,\n namespace: string,\n knownNames: Map<string, string>,\n): string {\n return text.replace(/`([a-zA-Z]\\w*)`/gu, (match, name: string) => {\n const link = knownNames.get(name);\n if (link) {\n return `[\\`${name}\\`](${link})`;\n }\n // Also try with namespace prefix (e.g. \"NetworkController:setActiveNetwork\")\n const fullName = `${namespace}:${name}`;\n const anchor = fullName.toLowerCase().replace(/[^a-z0-9]/gu, '');\n const linkFull = knownNames.get(fullName);\n if (linkFull) {\n return `[\\`${name}\\`](${linkFull})`;\n }\n // Check if the anchor exists anywhere in known names values\n for (const [, href] of knownNames) {\n if (href.includes(anchor)) {\n return `[\\`${name}\\`](${href})`;\n }\n }\n return match;\n });\n}\n\n/**\n * Generate markdown documentation for a single messenger item.\n *\n * @param item - The messenger item to document.\n * @param namespace - The current namespace.\n * @param knownNames - Map from short/full names to their link paths.\n * @param repoBaseUrl - Optional GitHub blob base URL (e.g. \"https://github.com/Owner/Repo/blob/sha/\").\n * @returns The generated markdown string.\n */\nexport function generateItemMarkdown(\n item: MessengerItemDoc,\n namespace: string,\n knownNames: Map<string, string>,\n repoBaseUrl: string | null,\n): string {\n const parts: string[] = [];\n\n parts.push(`### \\`${item.typeString}\\``);\n parts.push('');\n\n if (item.deprecated) {\n parts.push('> **Deprecated**');\n parts.push('');\n }\n\n if (item.sourceFile.includes('node_modules/')) {\n const pkgMatch = item.sourceFile.match(/node_modules\\/(@metamask\\/[^/]+)/u);\n const pkgName = pkgMatch ? pkgMatch[1] : item.sourceFile;\n const npmUrl = `https://www.npmjs.com/package/${pkgName}`;\n parts.push(`**Package**: [\\`${pkgName}\\`](${npmUrl})`);\n } else if (repoBaseUrl) {\n const ghUrl = `${repoBaseUrl}${item.sourceFile}#L${item.line}`;\n parts.push(`**Source**: [${item.sourceFile}:${item.line}](${ghUrl})`);\n } else {\n parts.push(`**Source**: \\`${item.sourceFile}:${item.line}\\``);\n }\n parts.push('');\n\n if (item.jsDoc) {\n parts.push(linkifyReferences(item.jsDoc, namespace, knownNames));\n parts.push('');\n }\n\n const label = item.kind === 'action' ? 'Handler' : 'Payload';\n parts.push(`**${label}**:`);\n parts.push('');\n parts.push('```typescript');\n parts.push(item.handlerOrPayload);\n parts.push('```');\n parts.push('');\n\n return parts.join('\\n');\n}\n\n/**\n * Generate a full markdown page for a namespace's actions or events.\n *\n * @param ns - The namespace group to generate a page for.\n * @param kind - Whether to generate the actions or events page.\n * @param repoBaseUrl - Optional GitHub blob base URL for source links.\n * @returns The generated markdown string.\n */\nexport function generateNamespacePage(\n ns: NamespaceGroup,\n kind: 'action' | 'event',\n repoBaseUrl: string | null = null,\n): string {\n const items = kind === 'action' ? ns.actions : ns.events;\n const title = kind === 'action' ? 'Actions' : 'Events';\n const parts: string[] = [];\n\n parts.push('---');\n parts.push(`title: \"${ns.namespace} ${title}\"`);\n parts.push(`sidebar_label: \"${title}\"`);\n parts.push('---');\n parts.push('');\n parts.push(`# ${ns.namespace} ${title}`);\n parts.push('');\n\n if (items.length === 0) {\n parts.push(`_No ${kind}s found for this namespace._`);\n parts.push('');\n return parts.join('\\n');\n }\n\n parts.push(\n `${items.length} ${kind}${items.length === 1 ? '' : 's'} registered.`,\n );\n parts.push('');\n\n // Build a map of known names → link paths for cross-referencing.\n // Actions on same page get #anchor, actions/events on sibling page get relative path.\n const knownNames = new Map<string, string>();\n for (const action of ns.actions) {\n const shortName = action.typeString.split(':')[1];\n const anchor = action.typeString.toLowerCase().replace(/[^a-z0-9]/gu, '');\n const href = kind === 'action' ? `#${anchor}` : `./actions#${anchor}`;\n knownNames.set(shortName, href);\n knownNames.set(action.typeString, href);\n }\n for (const event of ns.events) {\n const shortName = event.typeString.split(':')[1];\n const anchor = event.typeString.toLowerCase().replace(/[^a-z0-9]/gu, '');\n const href = kind === 'event' ? `#${anchor}` : `./events#${anchor}`;\n knownNames.set(shortName, href);\n knownNames.set(event.typeString, href);\n }\n\n // Table of contents\n parts.push('| Name | Deprecated |');\n parts.push('|------|-----------|');\n for (const item of items) {\n const name = item.typeString.split(':')[1];\n // Docusaurus uses github-slugger: strips non-alphanumeric, lowercases, no dashes for special chars in code spans\n const anchor = item.typeString.toLowerCase().replace(/[^a-z0-9]/gu, '');\n const dep = item.deprecated ? 'Yes' : '';\n parts.push(`| [\\`${name}\\`](#${anchor}) | ${dep} |`);\n }\n parts.push('');\n parts.push('---');\n parts.push('');\n\n for (const item of items) {\n parts.push(\n generateItemMarkdown(item, ns.namespace, knownNames, repoBaseUrl),\n );\n parts.push('---');\n parts.push('');\n }\n\n return parts.join('\\n');\n}\n\n/**\n * Generate the index/overview page listing all namespaces.\n *\n * @param namespaces - All namespace groups sorted alphabetically.\n * @returns The generated markdown string.\n */\nexport function generateIndexPage(namespaces: NamespaceGroup[]): string {\n const totalActions = namespaces.reduce(\n (sum, ns) => sum + ns.actions.length,\n 0,\n );\n const totalEvents = namespaces.reduce((sum, ns) => sum + ns.events.length, 0);\n\n const parts: string[] = [];\n parts.push('---');\n parts.push('title: \"Messenger API Reference\"');\n parts.push('slug: \"/\"');\n parts.push('---');\n parts.push('');\n parts.push('# Messenger API');\n parts.push('');\n parts.push(\n 'This site documents every action and event registered on the Messenger — the type-safe message bus used across all controllers.',\n );\n parts.push('');\n parts.push(`- **${namespaces.length}** namespaces`);\n parts.push(`- **${totalActions}** actions`);\n parts.push(`- **${totalEvents}** events`);\n parts.push('');\n parts.push('## Namespaces');\n parts.push('');\n parts.push('| Namespace | Actions | Events |');\n parts.push('|-----------|---------|--------|');\n\n for (const ns of namespaces) {\n const firstLink =\n ns.actions.length > 0\n ? `${ns.namespace}/actions`\n : `${ns.namespace}/events`;\n parts.push(\n `| [${ns.namespace}](${firstLink}) | ${ns.actions.length} | ${ns.events.length} |`,\n );\n }\n\n parts.push('');\n return parts.join('\\n');\n}\n\n/**\n * Generate the sidebars.ts file content for Docusaurus.\n *\n * @param namespaces - All namespace groups sorted alphabetically.\n * @returns The generated TypeScript source string.\n */\nexport function generateSidebars(namespaces: NamespaceGroup[]): string {\n const items = namespaces.map((ns) => ({\n type: 'category',\n label: ns.namespace,\n items: [\n ...(ns.actions.length > 0 ? [`${ns.namespace}/actions`] : []),\n ...(ns.events.length > 0 ? [`${ns.namespace}/events`] : []),\n ],\n }));\n\n const sidebar = {\n messengerSidebar: [\n {\n type: 'doc',\n id: 'index',\n label: 'Overview',\n },\n ...items,\n ],\n };\n\n return `// This file is auto-generated by @metamask/messenger-docs\\n// Do not edit manually.\\nconst sidebars = ${JSON.stringify(\n sidebar,\n null,\n 2,\n )};\\nexport default sidebars;\\n`;\n}\n"]}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { MessengerItemDoc, NamespaceGroup } from "./types.cjs";
|
|
2
|
+
/**
|
|
3
|
+
* Generate markdown documentation for a single messenger item.
|
|
4
|
+
*
|
|
5
|
+
* @param item - The messenger item to document.
|
|
6
|
+
* @param namespace - The current namespace.
|
|
7
|
+
* @param knownNames - Map from short/full names to their link paths.
|
|
8
|
+
* @param repoBaseUrl - Optional GitHub blob base URL (e.g. "https://github.com/Owner/Repo/blob/sha/").
|
|
9
|
+
* @returns The generated markdown string.
|
|
10
|
+
*/
|
|
11
|
+
export declare function generateItemMarkdown(item: MessengerItemDoc, namespace: string, knownNames: Map<string, string>, repoBaseUrl: string | null): string;
|
|
12
|
+
/**
|
|
13
|
+
* Generate a full markdown page for a namespace's actions or events.
|
|
14
|
+
*
|
|
15
|
+
* @param ns - The namespace group to generate a page for.
|
|
16
|
+
* @param kind - Whether to generate the actions or events page.
|
|
17
|
+
* @param repoBaseUrl - Optional GitHub blob base URL for source links.
|
|
18
|
+
* @returns The generated markdown string.
|
|
19
|
+
*/
|
|
20
|
+
export declare function generateNamespacePage(ns: NamespaceGroup, kind: 'action' | 'event', repoBaseUrl?: string | null): string;
|
|
21
|
+
/**
|
|
22
|
+
* Generate the index/overview page listing all namespaces.
|
|
23
|
+
*
|
|
24
|
+
* @param namespaces - All namespace groups sorted alphabetically.
|
|
25
|
+
* @returns The generated markdown string.
|
|
26
|
+
*/
|
|
27
|
+
export declare function generateIndexPage(namespaces: NamespaceGroup[]): string;
|
|
28
|
+
/**
|
|
29
|
+
* Generate the sidebars.ts file content for Docusaurus.
|
|
30
|
+
*
|
|
31
|
+
* @param namespaces - All namespace groups sorted alphabetically.
|
|
32
|
+
* @returns The generated TypeScript source string.
|
|
33
|
+
*/
|
|
34
|
+
export declare function generateSidebars(namespaces: NamespaceGroup[]): string;
|
|
35
|
+
//# sourceMappingURL=markdown.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.cts","sourceRoot":"","sources":["../../src/docs/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,oBAAgB;AAuChE;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,MAAM,CAsCR;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,cAAc,EAClB,IAAI,EAAE,QAAQ,GAAG,OAAO,EACxB,WAAW,GAAE,MAAM,GAAG,IAAW,GAChC,MAAM,CAiER;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,MAAM,CAwCtE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,MAAM,CA0BrE"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { MessengerItemDoc, NamespaceGroup } from "./types.mjs";
|
|
2
|
+
/**
|
|
3
|
+
* Generate markdown documentation for a single messenger item.
|
|
4
|
+
*
|
|
5
|
+
* @param item - The messenger item to document.
|
|
6
|
+
* @param namespace - The current namespace.
|
|
7
|
+
* @param knownNames - Map from short/full names to their link paths.
|
|
8
|
+
* @param repoBaseUrl - Optional GitHub blob base URL (e.g. "https://github.com/Owner/Repo/blob/sha/").
|
|
9
|
+
* @returns The generated markdown string.
|
|
10
|
+
*/
|
|
11
|
+
export declare function generateItemMarkdown(item: MessengerItemDoc, namespace: string, knownNames: Map<string, string>, repoBaseUrl: string | null): string;
|
|
12
|
+
/**
|
|
13
|
+
* Generate a full markdown page for a namespace's actions or events.
|
|
14
|
+
*
|
|
15
|
+
* @param ns - The namespace group to generate a page for.
|
|
16
|
+
* @param kind - Whether to generate the actions or events page.
|
|
17
|
+
* @param repoBaseUrl - Optional GitHub blob base URL for source links.
|
|
18
|
+
* @returns The generated markdown string.
|
|
19
|
+
*/
|
|
20
|
+
export declare function generateNamespacePage(ns: NamespaceGroup, kind: 'action' | 'event', repoBaseUrl?: string | null): string;
|
|
21
|
+
/**
|
|
22
|
+
* Generate the index/overview page listing all namespaces.
|
|
23
|
+
*
|
|
24
|
+
* @param namespaces - All namespace groups sorted alphabetically.
|
|
25
|
+
* @returns The generated markdown string.
|
|
26
|
+
*/
|
|
27
|
+
export declare function generateIndexPage(namespaces: NamespaceGroup[]): string;
|
|
28
|
+
/**
|
|
29
|
+
* Generate the sidebars.ts file content for Docusaurus.
|
|
30
|
+
*
|
|
31
|
+
* @param namespaces - All namespace groups sorted alphabetically.
|
|
32
|
+
* @returns The generated TypeScript source string.
|
|
33
|
+
*/
|
|
34
|
+
export declare function generateSidebars(namespaces: NamespaceGroup[]): string;
|
|
35
|
+
//# sourceMappingURL=markdown.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.d.mts","sourceRoot":"","sources":["../../src/docs/markdown.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,cAAc,EAAE,oBAAgB;AAuChE;;;;;;;;GAQG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,gBAAgB,EACtB,SAAS,EAAE,MAAM,EACjB,UAAU,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,EAC/B,WAAW,EAAE,MAAM,GAAG,IAAI,GACzB,MAAM,CAsCR;AAED;;;;;;;GAOG;AACH,wBAAgB,qBAAqB,CACnC,EAAE,EAAE,cAAc,EAClB,IAAI,EAAE,QAAQ,GAAG,OAAO,EACxB,WAAW,GAAE,MAAM,GAAG,IAAW,GAChC,MAAM,CAiER;AAED;;;;;GAKG;AACH,wBAAgB,iBAAiB,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,MAAM,CAwCtE;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,UAAU,EAAE,cAAc,EAAE,GAAG,MAAM,CA0BrE"}
|
|
@@ -0,0 +1,203 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Convert backtick-quoted action/event names in text into links when they
|
|
3
|
+
* match a known item in the same namespace. For example, `` `setActiveNetwork` ``
|
|
4
|
+
* becomes a link to `#networkcontrollersetactivenetwork` on the actions page.
|
|
5
|
+
*
|
|
6
|
+
* @param text - The markdown text to process.
|
|
7
|
+
* @param namespace - The current namespace (e.g. "NetworkController").
|
|
8
|
+
* @param knownNames - Map from short name (e.g. "setActiveNetwork") to the page-relative path and anchor.
|
|
9
|
+
* @returns The text with backtick references replaced by links.
|
|
10
|
+
*/
|
|
11
|
+
function linkifyReferences(text, namespace, knownNames) {
|
|
12
|
+
return text.replace(/`([a-zA-Z]\w*)`/gu, (match, name) => {
|
|
13
|
+
const link = knownNames.get(name);
|
|
14
|
+
if (link) {
|
|
15
|
+
return `[\`${name}\`](${link})`;
|
|
16
|
+
}
|
|
17
|
+
// Also try with namespace prefix (e.g. "NetworkController:setActiveNetwork")
|
|
18
|
+
const fullName = `${namespace}:${name}`;
|
|
19
|
+
const anchor = fullName.toLowerCase().replace(/[^a-z0-9]/gu, '');
|
|
20
|
+
const linkFull = knownNames.get(fullName);
|
|
21
|
+
if (linkFull) {
|
|
22
|
+
return `[\`${name}\`](${linkFull})`;
|
|
23
|
+
}
|
|
24
|
+
// Check if the anchor exists anywhere in known names values
|
|
25
|
+
for (const [, href] of knownNames) {
|
|
26
|
+
if (href.includes(anchor)) {
|
|
27
|
+
return `[\`${name}\`](${href})`;
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
return match;
|
|
31
|
+
});
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Generate markdown documentation for a single messenger item.
|
|
35
|
+
*
|
|
36
|
+
* @param item - The messenger item to document.
|
|
37
|
+
* @param namespace - The current namespace.
|
|
38
|
+
* @param knownNames - Map from short/full names to their link paths.
|
|
39
|
+
* @param repoBaseUrl - Optional GitHub blob base URL (e.g. "https://github.com/Owner/Repo/blob/sha/").
|
|
40
|
+
* @returns The generated markdown string.
|
|
41
|
+
*/
|
|
42
|
+
export function generateItemMarkdown(item, namespace, knownNames, repoBaseUrl) {
|
|
43
|
+
const parts = [];
|
|
44
|
+
parts.push(`### \`${item.typeString}\``);
|
|
45
|
+
parts.push('');
|
|
46
|
+
if (item.deprecated) {
|
|
47
|
+
parts.push('> **Deprecated**');
|
|
48
|
+
parts.push('');
|
|
49
|
+
}
|
|
50
|
+
if (item.sourceFile.includes('node_modules/')) {
|
|
51
|
+
const pkgMatch = item.sourceFile.match(/node_modules\/(@metamask\/[^/]+)/u);
|
|
52
|
+
const pkgName = pkgMatch ? pkgMatch[1] : item.sourceFile;
|
|
53
|
+
const npmUrl = `https://www.npmjs.com/package/${pkgName}`;
|
|
54
|
+
parts.push(`**Package**: [\`${pkgName}\`](${npmUrl})`);
|
|
55
|
+
}
|
|
56
|
+
else if (repoBaseUrl) {
|
|
57
|
+
const ghUrl = `${repoBaseUrl}${item.sourceFile}#L${item.line}`;
|
|
58
|
+
parts.push(`**Source**: [${item.sourceFile}:${item.line}](${ghUrl})`);
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
parts.push(`**Source**: \`${item.sourceFile}:${item.line}\``);
|
|
62
|
+
}
|
|
63
|
+
parts.push('');
|
|
64
|
+
if (item.jsDoc) {
|
|
65
|
+
parts.push(linkifyReferences(item.jsDoc, namespace, knownNames));
|
|
66
|
+
parts.push('');
|
|
67
|
+
}
|
|
68
|
+
const label = item.kind === 'action' ? 'Handler' : 'Payload';
|
|
69
|
+
parts.push(`**${label}**:`);
|
|
70
|
+
parts.push('');
|
|
71
|
+
parts.push('```typescript');
|
|
72
|
+
parts.push(item.handlerOrPayload);
|
|
73
|
+
parts.push('```');
|
|
74
|
+
parts.push('');
|
|
75
|
+
return parts.join('\n');
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Generate a full markdown page for a namespace's actions or events.
|
|
79
|
+
*
|
|
80
|
+
* @param ns - The namespace group to generate a page for.
|
|
81
|
+
* @param kind - Whether to generate the actions or events page.
|
|
82
|
+
* @param repoBaseUrl - Optional GitHub blob base URL for source links.
|
|
83
|
+
* @returns The generated markdown string.
|
|
84
|
+
*/
|
|
85
|
+
export function generateNamespacePage(ns, kind, repoBaseUrl = null) {
|
|
86
|
+
const items = kind === 'action' ? ns.actions : ns.events;
|
|
87
|
+
const title = kind === 'action' ? 'Actions' : 'Events';
|
|
88
|
+
const parts = [];
|
|
89
|
+
parts.push('---');
|
|
90
|
+
parts.push(`title: "${ns.namespace} ${title}"`);
|
|
91
|
+
parts.push(`sidebar_label: "${title}"`);
|
|
92
|
+
parts.push('---');
|
|
93
|
+
parts.push('');
|
|
94
|
+
parts.push(`# ${ns.namespace} ${title}`);
|
|
95
|
+
parts.push('');
|
|
96
|
+
if (items.length === 0) {
|
|
97
|
+
parts.push(`_No ${kind}s found for this namespace._`);
|
|
98
|
+
parts.push('');
|
|
99
|
+
return parts.join('\n');
|
|
100
|
+
}
|
|
101
|
+
parts.push(`${items.length} ${kind}${items.length === 1 ? '' : 's'} registered.`);
|
|
102
|
+
parts.push('');
|
|
103
|
+
// Build a map of known names → link paths for cross-referencing.
|
|
104
|
+
// Actions on same page get #anchor, actions/events on sibling page get relative path.
|
|
105
|
+
const knownNames = new Map();
|
|
106
|
+
for (const action of ns.actions) {
|
|
107
|
+
const shortName = action.typeString.split(':')[1];
|
|
108
|
+
const anchor = action.typeString.toLowerCase().replace(/[^a-z0-9]/gu, '');
|
|
109
|
+
const href = kind === 'action' ? `#${anchor}` : `./actions#${anchor}`;
|
|
110
|
+
knownNames.set(shortName, href);
|
|
111
|
+
knownNames.set(action.typeString, href);
|
|
112
|
+
}
|
|
113
|
+
for (const event of ns.events) {
|
|
114
|
+
const shortName = event.typeString.split(':')[1];
|
|
115
|
+
const anchor = event.typeString.toLowerCase().replace(/[^a-z0-9]/gu, '');
|
|
116
|
+
const href = kind === 'event' ? `#${anchor}` : `./events#${anchor}`;
|
|
117
|
+
knownNames.set(shortName, href);
|
|
118
|
+
knownNames.set(event.typeString, href);
|
|
119
|
+
}
|
|
120
|
+
// Table of contents
|
|
121
|
+
parts.push('| Name | Deprecated |');
|
|
122
|
+
parts.push('|------|-----------|');
|
|
123
|
+
for (const item of items) {
|
|
124
|
+
const name = item.typeString.split(':')[1];
|
|
125
|
+
// Docusaurus uses github-slugger: strips non-alphanumeric, lowercases, no dashes for special chars in code spans
|
|
126
|
+
const anchor = item.typeString.toLowerCase().replace(/[^a-z0-9]/gu, '');
|
|
127
|
+
const dep = item.deprecated ? 'Yes' : '';
|
|
128
|
+
parts.push(`| [\`${name}\`](#${anchor}) | ${dep} |`);
|
|
129
|
+
}
|
|
130
|
+
parts.push('');
|
|
131
|
+
parts.push('---');
|
|
132
|
+
parts.push('');
|
|
133
|
+
for (const item of items) {
|
|
134
|
+
parts.push(generateItemMarkdown(item, ns.namespace, knownNames, repoBaseUrl));
|
|
135
|
+
parts.push('---');
|
|
136
|
+
parts.push('');
|
|
137
|
+
}
|
|
138
|
+
return parts.join('\n');
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Generate the index/overview page listing all namespaces.
|
|
142
|
+
*
|
|
143
|
+
* @param namespaces - All namespace groups sorted alphabetically.
|
|
144
|
+
* @returns The generated markdown string.
|
|
145
|
+
*/
|
|
146
|
+
export function generateIndexPage(namespaces) {
|
|
147
|
+
const totalActions = namespaces.reduce((sum, ns) => sum + ns.actions.length, 0);
|
|
148
|
+
const totalEvents = namespaces.reduce((sum, ns) => sum + ns.events.length, 0);
|
|
149
|
+
const parts = [];
|
|
150
|
+
parts.push('---');
|
|
151
|
+
parts.push('title: "Messenger API Reference"');
|
|
152
|
+
parts.push('slug: "/"');
|
|
153
|
+
parts.push('---');
|
|
154
|
+
parts.push('');
|
|
155
|
+
parts.push('# Messenger API');
|
|
156
|
+
parts.push('');
|
|
157
|
+
parts.push('This site documents every action and event registered on the Messenger — the type-safe message bus used across all controllers.');
|
|
158
|
+
parts.push('');
|
|
159
|
+
parts.push(`- **${namespaces.length}** namespaces`);
|
|
160
|
+
parts.push(`- **${totalActions}** actions`);
|
|
161
|
+
parts.push(`- **${totalEvents}** events`);
|
|
162
|
+
parts.push('');
|
|
163
|
+
parts.push('## Namespaces');
|
|
164
|
+
parts.push('');
|
|
165
|
+
parts.push('| Namespace | Actions | Events |');
|
|
166
|
+
parts.push('|-----------|---------|--------|');
|
|
167
|
+
for (const ns of namespaces) {
|
|
168
|
+
const firstLink = ns.actions.length > 0
|
|
169
|
+
? `${ns.namespace}/actions`
|
|
170
|
+
: `${ns.namespace}/events`;
|
|
171
|
+
parts.push(`| [${ns.namespace}](${firstLink}) | ${ns.actions.length} | ${ns.events.length} |`);
|
|
172
|
+
}
|
|
173
|
+
parts.push('');
|
|
174
|
+
return parts.join('\n');
|
|
175
|
+
}
|
|
176
|
+
/**
|
|
177
|
+
* Generate the sidebars.ts file content for Docusaurus.
|
|
178
|
+
*
|
|
179
|
+
* @param namespaces - All namespace groups sorted alphabetically.
|
|
180
|
+
* @returns The generated TypeScript source string.
|
|
181
|
+
*/
|
|
182
|
+
export function generateSidebars(namespaces) {
|
|
183
|
+
const items = namespaces.map((ns) => ({
|
|
184
|
+
type: 'category',
|
|
185
|
+
label: ns.namespace,
|
|
186
|
+
items: [
|
|
187
|
+
...(ns.actions.length > 0 ? [`${ns.namespace}/actions`] : []),
|
|
188
|
+
...(ns.events.length > 0 ? [`${ns.namespace}/events`] : []),
|
|
189
|
+
],
|
|
190
|
+
}));
|
|
191
|
+
const sidebar = {
|
|
192
|
+
messengerSidebar: [
|
|
193
|
+
{
|
|
194
|
+
type: 'doc',
|
|
195
|
+
id: 'index',
|
|
196
|
+
label: 'Overview',
|
|
197
|
+
},
|
|
198
|
+
...items,
|
|
199
|
+
],
|
|
200
|
+
};
|
|
201
|
+
return `// This file is auto-generated by @metamask/messenger-docs\n// Do not edit manually.\nconst sidebars = ${JSON.stringify(sidebar, null, 2)};\nexport default sidebars;\n`;
|
|
202
|
+
}
|
|
203
|
+
//# sourceMappingURL=markdown.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown.mjs","sourceRoot":"","sources":["../../src/docs/markdown.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,SAAS,iBAAiB,CACxB,IAAY,EACZ,SAAiB,EACjB,UAA+B;IAE/B,OAAO,IAAI,CAAC,OAAO,CAAC,mBAAmB,EAAE,CAAC,KAAK,EAAE,IAAY,EAAE,EAAE;QAC/D,MAAM,IAAI,GAAG,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAClC,IAAI,IAAI,EAAE,CAAC;YACT,OAAO,MAAM,IAAI,OAAO,IAAI,GAAG,CAAC;QAClC,CAAC;QACD,6EAA6E;QAC7E,MAAM,QAAQ,GAAG,GAAG,SAAS,IAAI,IAAI,EAAE,CAAC;QACxC,MAAM,MAAM,GAAG,QAAQ,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACjE,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,QAAQ,EAAE,CAAC;YACb,OAAO,MAAM,IAAI,OAAO,QAAQ,GAAG,CAAC;QACtC,CAAC;QACD,4DAA4D;QAC5D,KAAK,MAAM,CAAC,EAAE,IAAI,CAAC,IAAI,UAAU,EAAE,CAAC;YAClC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;gBAC1B,OAAO,MAAM,IAAI,OAAO,IAAI,GAAG,CAAC;YAClC,CAAC;QACH,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAED;;;;;;;;GAQG;AACH,MAAM,UAAU,oBAAoB,CAClC,IAAsB,EACtB,SAAiB,EACjB,UAA+B,EAC/B,WAA0B;IAE1B,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,IAAI,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,IAAI,CAAC,UAAU,EAAE,CAAC;QACpB,KAAK,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC/B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;QAC9C,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAC5E,MAAM,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;QACzD,MAAM,MAAM,GAAG,iCAAiC,OAAO,EAAE,CAAC;QAC1D,KAAK,CAAC,IAAI,CAAC,mBAAmB,OAAO,OAAO,MAAM,GAAG,CAAC,CAAC;IACzD,CAAC;SAAM,IAAI,WAAW,EAAE,CAAC;QACvB,MAAM,KAAK,GAAG,GAAG,WAAW,GAAG,IAAI,CAAC,UAAU,KAAK,IAAI,CAAC,IAAI,EAAE,CAAC;QAC/D,KAAK,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,GAAG,CAAC,CAAC;IACxE,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,iBAAiB,IAAI,CAAC,UAAU,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,CAAC;IAChE,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,IAAI,CAAC,KAAK,EAAE,CAAC;QACf,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,CAAC,CAAC,CAAC;QACjE,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC;IAC7D,KAAK,CAAC,IAAI,CAAC,KAAK,KAAK,KAAK,CAAC,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAClC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,UAAU,qBAAqB,CACnC,EAAkB,EAClB,IAAwB,EACxB,cAA6B,IAAI;IAEjC,MAAM,KAAK,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC;IACzD,MAAM,KAAK,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,CAAC;IACvD,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,WAAW,EAAE,CAAC,SAAS,IAAI,KAAK,GAAG,CAAC,CAAC;IAChD,KAAK,CAAC,IAAI,CAAC,mBAAmB,KAAK,GAAG,CAAC,CAAC;IACxC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,SAAS,IAAI,KAAK,EAAE,CAAC,CAAC;IACzC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,8BAA8B,CAAC,CAAC;QACtD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAED,KAAK,CAAC,IAAI,CACR,GAAG,KAAK,CAAC,MAAM,IAAI,IAAI,GAAG,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,cAAc,CACtE,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,iEAAiE;IACjE,sFAAsF;IACtF,MAAM,UAAU,GAAG,IAAI,GAAG,EAAkB,CAAC;IAC7C,KAAK,MAAM,MAAM,IAAI,EAAE,CAAC,OAAO,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,MAAM,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QAC1E,MAAM,IAAI,GAAG,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,aAAa,MAAM,EAAE,CAAC;QACtE,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAChC,UAAU,CAAC,GAAG,CAAC,MAAM,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IAC1C,CAAC;IACD,KAAK,MAAM,KAAK,IAAI,EAAE,CAAC,MAAM,EAAE,CAAC;QAC9B,MAAM,SAAS,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACjD,MAAM,MAAM,GAAG,KAAK,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACzE,MAAM,IAAI,GAAG,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC,CAAC,CAAC,YAAY,MAAM,EAAE,CAAC;QACpE,UAAU,CAAC,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;QAChC,UAAU,CAAC,GAAG,CAAC,KAAK,CAAC,UAAU,EAAE,IAAI,CAAC,CAAC;IACzC,CAAC;IAED,oBAAoB;IACpB,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;IACpC,KAAK,CAAC,IAAI,CAAC,sBAAsB,CAAC,CAAC;IACnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QAC3C,iHAAiH;QACjH,MAAM,MAAM,GAAG,IAAI,CAAC,UAAU,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,aAAa,EAAE,EAAE,CAAC,CAAC;QACxE,MAAM,GAAG,GAAG,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC;QACzC,KAAK,CAAC,IAAI,CAAC,QAAQ,IAAI,QAAQ,MAAM,OAAO,GAAG,IAAI,CAAC,CAAC;IACvD,CAAC;IACD,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IAEf,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,KAAK,CAAC,IAAI,CACR,oBAAoB,CAAC,IAAI,EAAE,EAAE,CAAC,SAAS,EAAE,UAAU,EAAE,WAAW,CAAC,CAClE,CAAC;QACF,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACjB,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,iBAAiB,CAAC,UAA4B;IAC5D,MAAM,YAAY,GAAG,UAAU,CAAC,MAAM,CACpC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,OAAO,CAAC,MAAM,EACpC,CAAC,CACF,CAAC;IACF,MAAM,WAAW,GAAG,UAAU,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC,CAAC,CAAC;IAE9E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IACxB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;IAClB,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;IAC9B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CACR,iIAAiI,CAClI,CAAC;IACF,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,OAAO,UAAU,CAAC,MAAM,eAAe,CAAC,CAAC;IACpD,KAAK,CAAC,IAAI,CAAC,OAAO,YAAY,YAAY,CAAC,CAAC;IAC5C,KAAK,CAAC,IAAI,CAAC,OAAO,WAAW,WAAW,CAAC,CAAC;IAC1C,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;IAC5B,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAC/C,KAAK,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;IAE/C,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE,CAAC;QAC5B,MAAM,SAAS,GACb,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC;YACnB,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,UAAU;YAC3B,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,SAAS,CAAC;QAC/B,KAAK,CAAC,IAAI,CACR,MAAM,EAAE,CAAC,SAAS,KAAK,SAAS,OAAO,EAAE,CAAC,OAAO,CAAC,MAAM,MAAM,EAAE,CAAC,MAAM,CAAC,MAAM,IAAI,CACnF,CAAC;IACJ,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACf,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,UAA4B;IAC3D,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;QACpC,IAAI,EAAE,UAAU;QAChB,KAAK,EAAE,EAAE,CAAC,SAAS;QACnB,KAAK,EAAE;YACL,GAAG,CAAC,EAAE,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,UAAU,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,SAAS,SAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;SAC5D;KACF,CAAC,CAAC,CAAC;IAEJ,MAAM,OAAO,GAAG;QACd,gBAAgB,EAAE;YAChB;gBACE,IAAI,EAAE,KAAK;gBACX,EAAE,EAAE,OAAO;gBACX,KAAK,EAAE,UAAU;aAClB;YACD,GAAG,KAAK;SACT;KACF,CAAC;IAEF,OAAO,0GAA0G,IAAI,CAAC,SAAS,CAC7H,OAAO,EACP,IAAI,EACJ,CAAC,CACF,+BAA+B,CAAC;AACnC,CAAC","sourcesContent":["import type { MessengerItemDoc, NamespaceGroup } from './types';\n\n/**\n * Convert backtick-quoted action/event names in text into links when they\n * match a known item in the same namespace. For example, `` `setActiveNetwork` ``\n * becomes a link to `#networkcontrollersetactivenetwork` on the actions page.\n *\n * @param text - The markdown text to process.\n * @param namespace - The current namespace (e.g. \"NetworkController\").\n * @param knownNames - Map from short name (e.g. \"setActiveNetwork\") to the page-relative path and anchor.\n * @returns The text with backtick references replaced by links.\n */\nfunction linkifyReferences(\n text: string,\n namespace: string,\n knownNames: Map<string, string>,\n): string {\n return text.replace(/`([a-zA-Z]\\w*)`/gu, (match, name: string) => {\n const link = knownNames.get(name);\n if (link) {\n return `[\\`${name}\\`](${link})`;\n }\n // Also try with namespace prefix (e.g. \"NetworkController:setActiveNetwork\")\n const fullName = `${namespace}:${name}`;\n const anchor = fullName.toLowerCase().replace(/[^a-z0-9]/gu, '');\n const linkFull = knownNames.get(fullName);\n if (linkFull) {\n return `[\\`${name}\\`](${linkFull})`;\n }\n // Check if the anchor exists anywhere in known names values\n for (const [, href] of knownNames) {\n if (href.includes(anchor)) {\n return `[\\`${name}\\`](${href})`;\n }\n }\n return match;\n });\n}\n\n/**\n * Generate markdown documentation for a single messenger item.\n *\n * @param item - The messenger item to document.\n * @param namespace - The current namespace.\n * @param knownNames - Map from short/full names to their link paths.\n * @param repoBaseUrl - Optional GitHub blob base URL (e.g. \"https://github.com/Owner/Repo/blob/sha/\").\n * @returns The generated markdown string.\n */\nexport function generateItemMarkdown(\n item: MessengerItemDoc,\n namespace: string,\n knownNames: Map<string, string>,\n repoBaseUrl: string | null,\n): string {\n const parts: string[] = [];\n\n parts.push(`### \\`${item.typeString}\\``);\n parts.push('');\n\n if (item.deprecated) {\n parts.push('> **Deprecated**');\n parts.push('');\n }\n\n if (item.sourceFile.includes('node_modules/')) {\n const pkgMatch = item.sourceFile.match(/node_modules\\/(@metamask\\/[^/]+)/u);\n const pkgName = pkgMatch ? pkgMatch[1] : item.sourceFile;\n const npmUrl = `https://www.npmjs.com/package/${pkgName}`;\n parts.push(`**Package**: [\\`${pkgName}\\`](${npmUrl})`);\n } else if (repoBaseUrl) {\n const ghUrl = `${repoBaseUrl}${item.sourceFile}#L${item.line}`;\n parts.push(`**Source**: [${item.sourceFile}:${item.line}](${ghUrl})`);\n } else {\n parts.push(`**Source**: \\`${item.sourceFile}:${item.line}\\``);\n }\n parts.push('');\n\n if (item.jsDoc) {\n parts.push(linkifyReferences(item.jsDoc, namespace, knownNames));\n parts.push('');\n }\n\n const label = item.kind === 'action' ? 'Handler' : 'Payload';\n parts.push(`**${label}**:`);\n parts.push('');\n parts.push('```typescript');\n parts.push(item.handlerOrPayload);\n parts.push('```');\n parts.push('');\n\n return parts.join('\\n');\n}\n\n/**\n * Generate a full markdown page for a namespace's actions or events.\n *\n * @param ns - The namespace group to generate a page for.\n * @param kind - Whether to generate the actions or events page.\n * @param repoBaseUrl - Optional GitHub blob base URL for source links.\n * @returns The generated markdown string.\n */\nexport function generateNamespacePage(\n ns: NamespaceGroup,\n kind: 'action' | 'event',\n repoBaseUrl: string | null = null,\n): string {\n const items = kind === 'action' ? ns.actions : ns.events;\n const title = kind === 'action' ? 'Actions' : 'Events';\n const parts: string[] = [];\n\n parts.push('---');\n parts.push(`title: \"${ns.namespace} ${title}\"`);\n parts.push(`sidebar_label: \"${title}\"`);\n parts.push('---');\n parts.push('');\n parts.push(`# ${ns.namespace} ${title}`);\n parts.push('');\n\n if (items.length === 0) {\n parts.push(`_No ${kind}s found for this namespace._`);\n parts.push('');\n return parts.join('\\n');\n }\n\n parts.push(\n `${items.length} ${kind}${items.length === 1 ? '' : 's'} registered.`,\n );\n parts.push('');\n\n // Build a map of known names → link paths for cross-referencing.\n // Actions on same page get #anchor, actions/events on sibling page get relative path.\n const knownNames = new Map<string, string>();\n for (const action of ns.actions) {\n const shortName = action.typeString.split(':')[1];\n const anchor = action.typeString.toLowerCase().replace(/[^a-z0-9]/gu, '');\n const href = kind === 'action' ? `#${anchor}` : `./actions#${anchor}`;\n knownNames.set(shortName, href);\n knownNames.set(action.typeString, href);\n }\n for (const event of ns.events) {\n const shortName = event.typeString.split(':')[1];\n const anchor = event.typeString.toLowerCase().replace(/[^a-z0-9]/gu, '');\n const href = kind === 'event' ? `#${anchor}` : `./events#${anchor}`;\n knownNames.set(shortName, href);\n knownNames.set(event.typeString, href);\n }\n\n // Table of contents\n parts.push('| Name | Deprecated |');\n parts.push('|------|-----------|');\n for (const item of items) {\n const name = item.typeString.split(':')[1];\n // Docusaurus uses github-slugger: strips non-alphanumeric, lowercases, no dashes for special chars in code spans\n const anchor = item.typeString.toLowerCase().replace(/[^a-z0-9]/gu, '');\n const dep = item.deprecated ? 'Yes' : '';\n parts.push(`| [\\`${name}\\`](#${anchor}) | ${dep} |`);\n }\n parts.push('');\n parts.push('---');\n parts.push('');\n\n for (const item of items) {\n parts.push(\n generateItemMarkdown(item, ns.namespace, knownNames, repoBaseUrl),\n );\n parts.push('---');\n parts.push('');\n }\n\n return parts.join('\\n');\n}\n\n/**\n * Generate the index/overview page listing all namespaces.\n *\n * @param namespaces - All namespace groups sorted alphabetically.\n * @returns The generated markdown string.\n */\nexport function generateIndexPage(namespaces: NamespaceGroup[]): string {\n const totalActions = namespaces.reduce(\n (sum, ns) => sum + ns.actions.length,\n 0,\n );\n const totalEvents = namespaces.reduce((sum, ns) => sum + ns.events.length, 0);\n\n const parts: string[] = [];\n parts.push('---');\n parts.push('title: \"Messenger API Reference\"');\n parts.push('slug: \"/\"');\n parts.push('---');\n parts.push('');\n parts.push('# Messenger API');\n parts.push('');\n parts.push(\n 'This site documents every action and event registered on the Messenger — the type-safe message bus used across all controllers.',\n );\n parts.push('');\n parts.push(`- **${namespaces.length}** namespaces`);\n parts.push(`- **${totalActions}** actions`);\n parts.push(`- **${totalEvents}** events`);\n parts.push('');\n parts.push('## Namespaces');\n parts.push('');\n parts.push('| Namespace | Actions | Events |');\n parts.push('|-----------|---------|--------|');\n\n for (const ns of namespaces) {\n const firstLink =\n ns.actions.length > 0\n ? `${ns.namespace}/actions`\n : `${ns.namespace}/events`;\n parts.push(\n `| [${ns.namespace}](${firstLink}) | ${ns.actions.length} | ${ns.events.length} |`,\n );\n }\n\n parts.push('');\n return parts.join('\\n');\n}\n\n/**\n * Generate the sidebars.ts file content for Docusaurus.\n *\n * @param namespaces - All namespace groups sorted alphabetically.\n * @returns The generated TypeScript source string.\n */\nexport function generateSidebars(namespaces: NamespaceGroup[]): string {\n const items = namespaces.map((ns) => ({\n type: 'category',\n label: ns.namespace,\n items: [\n ...(ns.actions.length > 0 ? [`${ns.namespace}/actions`] : []),\n ...(ns.events.length > 0 ? [`${ns.namespace}/events`] : []),\n ],\n }));\n\n const sidebar = {\n messengerSidebar: [\n {\n type: 'doc',\n id: 'index',\n label: 'Overview',\n },\n ...items,\n ],\n };\n\n return `// This file is auto-generated by @metamask/messenger-docs\\n// Do not edit manually.\\nconst sidebars = ${JSON.stringify(\n sidebar,\n null,\n 2,\n )};\\nexport default sidebars;\\n`;\n}\n"]}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.cjs","sourceRoot":"","sources":["../../src/docs/types.ts"],"names":[],"mappings":"","sourcesContent":["export type MessengerItemDoc = {\n typeName: string; // e.g. \"NetworkControllerGetStateAction\"\n typeString: string; // e.g. \"NetworkController:getState\"\n kind: 'action' | 'event';\n jsDoc: string; // Cleaned JSDoc body text (empty if none)\n handlerOrPayload: string; // Raw type text of handler / payload\n sourceFile: string; // Relative path from repo root\n line: number;\n deprecated: boolean;\n};\n\nexport type NamespaceGroup = {\n namespace: string;\n actions: MessengerItemDoc[];\n events: MessengerItemDoc[];\n};\n\n/**\n * Info about a class method, used to resolve `ClassName['methodName']` handlers.\n */\nexport type MethodInfo = {\n jsDoc: string;\n signature: string; // e.g. \"(fields: AddNetworkFields) => NetworkConfiguration\"\n};\n"]}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type MessengerItemDoc = {
|
|
2
|
+
typeName: string;
|
|
3
|
+
typeString: string;
|
|
4
|
+
kind: 'action' | 'event';
|
|
5
|
+
jsDoc: string;
|
|
6
|
+
handlerOrPayload: string;
|
|
7
|
+
sourceFile: string;
|
|
8
|
+
line: number;
|
|
9
|
+
deprecated: boolean;
|
|
10
|
+
};
|
|
11
|
+
export type NamespaceGroup = {
|
|
12
|
+
namespace: string;
|
|
13
|
+
actions: MessengerItemDoc[];
|
|
14
|
+
events: MessengerItemDoc[];
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Info about a class method, used to resolve `ClassName['methodName']` handlers.
|
|
18
|
+
*/
|
|
19
|
+
export type MethodInfo = {
|
|
20
|
+
jsDoc: string;
|
|
21
|
+
signature: string;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=types.d.cts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.cts","sourceRoot":"","sources":["../../src/docs/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
export type MessengerItemDoc = {
|
|
2
|
+
typeName: string;
|
|
3
|
+
typeString: string;
|
|
4
|
+
kind: 'action' | 'event';
|
|
5
|
+
jsDoc: string;
|
|
6
|
+
handlerOrPayload: string;
|
|
7
|
+
sourceFile: string;
|
|
8
|
+
line: number;
|
|
9
|
+
deprecated: boolean;
|
|
10
|
+
};
|
|
11
|
+
export type NamespaceGroup = {
|
|
12
|
+
namespace: string;
|
|
13
|
+
actions: MessengerItemDoc[];
|
|
14
|
+
events: MessengerItemDoc[];
|
|
15
|
+
};
|
|
16
|
+
/**
|
|
17
|
+
* Info about a class method, used to resolve `ClassName['methodName']` handlers.
|
|
18
|
+
*/
|
|
19
|
+
export type MethodInfo = {
|
|
20
|
+
jsDoc: string;
|
|
21
|
+
signature: string;
|
|
22
|
+
};
|
|
23
|
+
//# sourceMappingURL=types.d.mts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.mts","sourceRoot":"","sources":["../../src/docs/types.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,gBAAgB,GAAG;IAC7B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,QAAQ,GAAG,OAAO,CAAC;IACzB,KAAK,EAAE,MAAM,CAAC;IACd,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC;AAEF,MAAM,MAAM,cAAc,GAAG;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,MAAM,EAAE,gBAAgB,EAAE,CAAC;CAC5B,CAAC;AAEF;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG;IACvB,KAAK,EAAE,MAAM,CAAC;IACd,SAAS,EAAE,MAAM,CAAC;CACnB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.mjs","sourceRoot":"","sources":["../../src/docs/types.ts"],"names":[],"mappings":"","sourcesContent":["export type MessengerItemDoc = {\n typeName: string; // e.g. \"NetworkControllerGetStateAction\"\n typeString: string; // e.g. \"NetworkController:getState\"\n kind: 'action' | 'event';\n jsDoc: string; // Cleaned JSDoc body text (empty if none)\n handlerOrPayload: string; // Raw type text of handler / payload\n sourceFile: string; // Relative path from repo root\n line: number;\n deprecated: boolean;\n};\n\nexport type NamespaceGroup = {\n namespace: string;\n actions: MessengerItemDoc[];\n events: MessengerItemDoc[];\n};\n\n/**\n * Info about a class method, used to resolve `ClassName['methodName']` handlers.\n */\nexport type MethodInfo = {\n jsDoc: string;\n signature: string; // e.g. \"(fields: AddNetworkFields) => NetworkConfiguration\"\n};\n"]}
|