specweave 0.8.2 → 0.8.4
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/.claude-plugin/marketplace.json +11 -0
- package/dist/adapters/adapter-loader.d.ts +4 -4
- package/dist/adapters/adapter-loader.d.ts.map +1 -1
- package/dist/adapters/adapter-loader.js +8 -7
- package/dist/adapters/adapter-loader.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +78 -21
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/metrics/calculators/change-failure-rate.d.ts +1 -1
- package/dist/metrics/calculators/change-failure-rate.d.ts.map +1 -1
- package/dist/metrics/calculators/change-failure-rate.js +1 -1
- package/dist/metrics/calculators/change-failure-rate.js.map +1 -1
- package/dist/metrics/calculators/deployment-frequency.d.ts +1 -1
- package/dist/metrics/calculators/deployment-frequency.d.ts.map +1 -1
- package/dist/metrics/calculators/deployment-frequency.js +1 -1
- package/dist/metrics/calculators/deployment-frequency.js.map +1 -1
- package/dist/metrics/calculators/lead-time.d.ts +1 -1
- package/dist/metrics/calculators/lead-time.d.ts.map +1 -1
- package/dist/metrics/calculators/lead-time.js +2 -2
- package/dist/metrics/calculators/lead-time.js.map +1 -1
- package/dist/metrics/calculators/mttr.d.ts +1 -1
- package/dist/metrics/calculators/mttr.d.ts.map +1 -1
- package/dist/metrics/calculators/mttr.js +2 -2
- package/dist/metrics/calculators/mttr.js.map +1 -1
- package/dist/metrics/dora-calculator.d.ts +2 -2
- package/dist/metrics/dora-calculator.d.ts.map +1 -1
- package/dist/metrics/dora-calculator.js +5 -5
- package/dist/metrics/dora-calculator.js.map +1 -1
- package/dist/metrics/github-client.d.ts +1 -1
- package/dist/metrics/github-client.d.ts.map +1 -1
- package/dist/metrics/utils/tier-classifier.d.ts +1 -1
- package/dist/metrics/utils/tier-classifier.d.ts.map +1 -1
- package/dist/utils/docs-preview/config-generator.d.ts +46 -0
- package/dist/utils/docs-preview/config-generator.d.ts.map +1 -0
- package/dist/utils/docs-preview/config-generator.js +377 -0
- package/dist/utils/docs-preview/config-generator.js.map +1 -0
- package/dist/utils/docs-preview/docusaurus-setup.d.ts +38 -0
- package/dist/utils/docs-preview/docusaurus-setup.d.ts.map +1 -0
- package/dist/utils/docs-preview/docusaurus-setup.js +177 -0
- package/dist/utils/docs-preview/docusaurus-setup.js.map +1 -0
- package/dist/utils/docs-preview/index.d.ts +11 -0
- package/dist/utils/docs-preview/index.d.ts.map +1 -0
- package/dist/utils/docs-preview/index.js +17 -0
- package/dist/utils/docs-preview/index.js.map +1 -0
- package/dist/utils/docs-preview/package-installer.d.ts +42 -0
- package/dist/utils/docs-preview/package-installer.d.ts.map +1 -0
- package/dist/utils/docs-preview/package-installer.js +182 -0
- package/dist/utils/docs-preview/package-installer.js.map +1 -0
- package/dist/utils/docs-preview/server-manager.d.ts +30 -0
- package/dist/utils/docs-preview/server-manager.d.ts.map +1 -0
- package/dist/utils/docs-preview/server-manager.js +207 -0
- package/dist/utils/docs-preview/server-manager.js.map +1 -0
- package/dist/utils/docs-preview/sidebar-builder.d.ts +31 -0
- package/dist/utils/docs-preview/sidebar-builder.d.ts.map +1 -0
- package/dist/utils/docs-preview/sidebar-builder.js +202 -0
- package/dist/utils/docs-preview/sidebar-builder.js.map +1 -0
- package/dist/utils/docs-preview/types.d.ts +60 -0
- package/dist/utils/docs-preview/types.d.ts.map +1 -0
- package/dist/utils/docs-preview/types.js +5 -0
- package/dist/utils/docs-preview/types.js.map +1 -0
- package/dist/utils/docs-preview.bak/config-generator.d.ts +46 -0
- package/dist/utils/docs-preview.bak/config-generator.d.ts.map +1 -0
- package/dist/utils/docs-preview.bak/config-generator.js +377 -0
- package/dist/utils/docs-preview.bak/config-generator.js.map +1 -0
- package/dist/utils/docs-preview.bak/package-installer.d.ts +42 -0
- package/dist/utils/docs-preview.bak/package-installer.d.ts.map +1 -0
- package/dist/utils/docs-preview.bak/package-installer.js +182 -0
- package/dist/utils/docs-preview.bak/package-installer.js.map +1 -0
- package/dist/utils/docs-preview.bak/server-manager.d.ts +30 -0
- package/dist/utils/docs-preview.bak/server-manager.d.ts.map +1 -0
- package/dist/utils/docs-preview.bak/server-manager.js +207 -0
- package/dist/utils/docs-preview.bak/server-manager.js.map +1 -0
- package/dist/utils/docs-preview.bak/sidebar-builder.d.ts +31 -0
- package/dist/utils/docs-preview.bak/sidebar-builder.d.ts.map +1 -0
- package/dist/utils/docs-preview.bak/sidebar-builder.js +202 -0
- package/dist/utils/docs-preview.bak/sidebar-builder.js.map +1 -0
- package/dist/utils/docs-preview.bak/types.d.ts +60 -0
- package/dist/utils/docs-preview.bak/types.d.ts.map +1 -0
- package/dist/utils/docs-preview.bak/types.js +5 -0
- package/dist/utils/docs-preview.bak/types.js.map +1 -0
- package/package.json +2 -1
- package/dist/cli/commands/plugin.js +0 -322
- package/dist/cli/commands/plugin.js.map +0 -1
- package/dist/core/plugin-detector.d.ts +0 -97
- package/dist/core/plugin-detector.d.ts.map +0 -1
- package/dist/core/plugin-detector.js +0 -374
- package/dist/core/plugin-detector.js.map +0 -1
- package/dist/core/plugin-manager.d.ts +0 -144
- package/dist/core/plugin-manager.d.ts.map +0 -1
- package/dist/core/plugin-manager.js +0 -393
- package/dist/core/plugin-manager.js.map +0 -1
- package/dist/utils/plugin-detection.js +0 -229
- package/dist/utils/plugin-detection.js.map +0 -1
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Server manager for Docusaurus dev server
|
|
3
|
+
* Handles port finding, server start/stop, browser opening
|
|
4
|
+
*/
|
|
5
|
+
import { spawn } from 'child_process';
|
|
6
|
+
import * as net from 'net';
|
|
7
|
+
import { execFileNoThrow } from '../execFileNoThrow.js';
|
|
8
|
+
/**
|
|
9
|
+
* Find an available port in the given range
|
|
10
|
+
*/
|
|
11
|
+
export async function findAvailablePort(startPort = 3000, endPort = 3010) {
|
|
12
|
+
for (let port = startPort; port <= endPort; port++) {
|
|
13
|
+
if (await isPortAvailable(port)) {
|
|
14
|
+
return port;
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
throw new Error(`No available ports found in range ${startPort}-${endPort}`);
|
|
18
|
+
}
|
|
19
|
+
/**
|
|
20
|
+
* Check if a port is available
|
|
21
|
+
*/
|
|
22
|
+
function isPortAvailable(port) {
|
|
23
|
+
return new Promise((resolve) => {
|
|
24
|
+
const server = net.createServer();
|
|
25
|
+
server.once('error', () => {
|
|
26
|
+
resolve(false);
|
|
27
|
+
});
|
|
28
|
+
server.once('listening', () => {
|
|
29
|
+
server.close();
|
|
30
|
+
resolve(true);
|
|
31
|
+
});
|
|
32
|
+
server.listen(port);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Start Docusaurus dev server
|
|
37
|
+
*/
|
|
38
|
+
export async function startDevServer(targetDir, options) {
|
|
39
|
+
const { port, openBrowser, host = 'localhost' } = options;
|
|
40
|
+
// Check if port is available
|
|
41
|
+
if (!await isPortAvailable(port)) {
|
|
42
|
+
throw new Error(`Port ${port} is already in use`);
|
|
43
|
+
}
|
|
44
|
+
// Start Docusaurus dev server
|
|
45
|
+
const process = spawn('npm', ['run', 'start', '--', '--port', port.toString(), '--host', host], {
|
|
46
|
+
cwd: targetDir,
|
|
47
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
48
|
+
shell: true
|
|
49
|
+
});
|
|
50
|
+
const url = `http://${host}:${port}`;
|
|
51
|
+
// Wait for server to be ready
|
|
52
|
+
await waitForServer(url, 30000); // 30 second timeout
|
|
53
|
+
// Open browser if requested
|
|
54
|
+
if (openBrowser) {
|
|
55
|
+
await openBrowserUrl(url);
|
|
56
|
+
}
|
|
57
|
+
return {
|
|
58
|
+
pid: process.pid,
|
|
59
|
+
port,
|
|
60
|
+
url,
|
|
61
|
+
stop: async () => {
|
|
62
|
+
await stopServer(process);
|
|
63
|
+
}
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Wait for server to be ready
|
|
68
|
+
*/
|
|
69
|
+
function waitForServer(url, timeout) {
|
|
70
|
+
return new Promise((resolve, reject) => {
|
|
71
|
+
const startTime = Date.now();
|
|
72
|
+
const check = async () => {
|
|
73
|
+
try {
|
|
74
|
+
const http = await import('http');
|
|
75
|
+
const urlObj = new URL(url);
|
|
76
|
+
const req = http.get({
|
|
77
|
+
hostname: urlObj.hostname,
|
|
78
|
+
port: urlObj.port,
|
|
79
|
+
path: urlObj.pathname,
|
|
80
|
+
timeout: 2000
|
|
81
|
+
}, (res) => {
|
|
82
|
+
if (res.statusCode === 200 || res.statusCode === 304) {
|
|
83
|
+
resolve();
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
scheduleNextCheck();
|
|
87
|
+
}
|
|
88
|
+
});
|
|
89
|
+
req.on('error', () => {
|
|
90
|
+
scheduleNextCheck();
|
|
91
|
+
});
|
|
92
|
+
req.on('timeout', () => {
|
|
93
|
+
req.destroy();
|
|
94
|
+
scheduleNextCheck();
|
|
95
|
+
});
|
|
96
|
+
}
|
|
97
|
+
catch {
|
|
98
|
+
scheduleNextCheck();
|
|
99
|
+
}
|
|
100
|
+
};
|
|
101
|
+
const scheduleNextCheck = () => {
|
|
102
|
+
if (Date.now() - startTime > timeout) {
|
|
103
|
+
reject(new Error(`Server failed to start within ${timeout}ms`));
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
setTimeout(check, 1000);
|
|
107
|
+
}
|
|
108
|
+
};
|
|
109
|
+
check();
|
|
110
|
+
});
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* Stop server process
|
|
114
|
+
*/
|
|
115
|
+
function stopServer(process) {
|
|
116
|
+
return new Promise((resolve) => {
|
|
117
|
+
if (!process.pid) {
|
|
118
|
+
resolve();
|
|
119
|
+
return;
|
|
120
|
+
}
|
|
121
|
+
process.once('exit', () => {
|
|
122
|
+
resolve();
|
|
123
|
+
});
|
|
124
|
+
// Try graceful shutdown first
|
|
125
|
+
process.kill('SIGTERM');
|
|
126
|
+
// Force kill after 5 seconds if still running
|
|
127
|
+
setTimeout(() => {
|
|
128
|
+
if (process.pid) {
|
|
129
|
+
process.kill('SIGKILL');
|
|
130
|
+
}
|
|
131
|
+
}, 5000);
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Open URL in default browser
|
|
136
|
+
*/
|
|
137
|
+
export async function openBrowserUrl(url) {
|
|
138
|
+
const { default: open } = await import('open');
|
|
139
|
+
await open(url);
|
|
140
|
+
}
|
|
141
|
+
/**
|
|
142
|
+
* Kill all Docusaurus processes (SAFE - uses execFileNoThrow)
|
|
143
|
+
*/
|
|
144
|
+
export async function killAllDocusaurusProcesses() {
|
|
145
|
+
const platform = process.platform;
|
|
146
|
+
try {
|
|
147
|
+
if (platform === 'win32') {
|
|
148
|
+
// Windows: Use tasklist and taskkill
|
|
149
|
+
const listResult = await execFileNoThrow('tasklist', ['/FI', 'IMAGENAME eq node.exe', '/FO', 'CSV']);
|
|
150
|
+
if (listResult.status !== 0) {
|
|
151
|
+
return 0;
|
|
152
|
+
}
|
|
153
|
+
const processes = listResult.stdout
|
|
154
|
+
.split('\n')
|
|
155
|
+
.filter(line => line.includes('docusaurus'))
|
|
156
|
+
.map(line => {
|
|
157
|
+
const match = line.match(/"([^"]+)","\d+"/);
|
|
158
|
+
return match ? match[1] : null;
|
|
159
|
+
})
|
|
160
|
+
.filter(Boolean);
|
|
161
|
+
for (const pid of processes) {
|
|
162
|
+
await execFileNoThrow('taskkill', ['/F', '/PID', pid]);
|
|
163
|
+
}
|
|
164
|
+
return processes.length;
|
|
165
|
+
}
|
|
166
|
+
else {
|
|
167
|
+
// Unix-like (macOS, Linux): Use ps and kill
|
|
168
|
+
const psResult = await execFileNoThrow('ps', ['aux']);
|
|
169
|
+
if (psResult.status !== 0) {
|
|
170
|
+
return 0;
|
|
171
|
+
}
|
|
172
|
+
const processes = psResult.stdout
|
|
173
|
+
.split('\n')
|
|
174
|
+
.filter(line => line.includes('docusaurus') && !line.includes('grep'))
|
|
175
|
+
.map(line => {
|
|
176
|
+
const parts = line.trim().split(/\s+/);
|
|
177
|
+
return parts[1]; // PID is second column
|
|
178
|
+
});
|
|
179
|
+
for (const pid of processes) {
|
|
180
|
+
try {
|
|
181
|
+
await execFileNoThrow('kill', [pid]);
|
|
182
|
+
}
|
|
183
|
+
catch {
|
|
184
|
+
// Ignore errors (process may have already exited)
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
return processes.length;
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
catch (error) {
|
|
191
|
+
// No processes found or error occurred
|
|
192
|
+
return 0;
|
|
193
|
+
}
|
|
194
|
+
}
|
|
195
|
+
/**
|
|
196
|
+
* Check if Docusaurus server is running
|
|
197
|
+
*/
|
|
198
|
+
export async function isDocusaurusRunning(port) {
|
|
199
|
+
return !(await isPortAvailable(port));
|
|
200
|
+
}
|
|
201
|
+
/**
|
|
202
|
+
* Get server URL
|
|
203
|
+
*/
|
|
204
|
+
export function getServerUrl(port, host = 'localhost') {
|
|
205
|
+
return `http://${host}:${port}`;
|
|
206
|
+
}
|
|
207
|
+
//# sourceMappingURL=server-manager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"server-manager.js","sourceRoot":"","sources":["../../../src/utils/docs-preview/server-manager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sidebar builder for Docusaurus
|
|
3
|
+
* Automatically generates sidebar.js from .specweave/docs/ folder structure
|
|
4
|
+
*/
|
|
5
|
+
import { Sidebar } from './types.js';
|
|
6
|
+
export interface SidebarBuilderOptions {
|
|
7
|
+
docsPath: string;
|
|
8
|
+
excludeFolders?: string[];
|
|
9
|
+
maxDepth?: number;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Build sidebar from folder structure
|
|
13
|
+
*/
|
|
14
|
+
export declare function buildSidebar(options: SidebarBuilderOptions): Promise<Sidebar>;
|
|
15
|
+
/**
|
|
16
|
+
* Generate sidebars.js content as string
|
|
17
|
+
*/
|
|
18
|
+
export declare function generateSidebarsJS(sidebar: Sidebar): string;
|
|
19
|
+
/**
|
|
20
|
+
* Write sidebar to file
|
|
21
|
+
*/
|
|
22
|
+
export declare function writeSidebar(filePath: string, sidebar: Sidebar): Promise<void>;
|
|
23
|
+
/**
|
|
24
|
+
* Count total documents in sidebar
|
|
25
|
+
*/
|
|
26
|
+
export declare function countDocuments(sidebar: Sidebar): number;
|
|
27
|
+
/**
|
|
28
|
+
* Count total categories in sidebar
|
|
29
|
+
*/
|
|
30
|
+
export declare function countCategories(sidebar: Sidebar): number;
|
|
31
|
+
//# sourceMappingURL=sidebar-builder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidebar-builder.d.ts","sourceRoot":"","sources":["../../../src/utils/docs-preview/sidebar-builder.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,OAAO,EAAe,MAAM,YAAY,CAAC;AA0BlD,MAAM,WAAW,qBAAqB;IACpC,QAAQ,EAAE,MAAM,CAAC;IACjB,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,qBAAqB,GAAG,OAAO,CAAC,OAAO,CAAC,CAqBnF;AAwHD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAW3D;AAED;;GAEG;AACH,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAIpF;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAevD;AAED;;GAEG;AACH,wBAAgB,eAAe,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,CAgBxD"}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Sidebar builder for Docusaurus
|
|
3
|
+
* Automatically generates sidebar.js from .specweave/docs/ folder structure
|
|
4
|
+
*/
|
|
5
|
+
import * as path from 'path';
|
|
6
|
+
import * as fs from 'fs-extra';
|
|
7
|
+
/**
|
|
8
|
+
* Priority order for top-level folders
|
|
9
|
+
* Lower number = appears first in sidebar
|
|
10
|
+
*/
|
|
11
|
+
const FOLDER_PRIORITY = {
|
|
12
|
+
strategy: 1,
|
|
13
|
+
specs: 2,
|
|
14
|
+
architecture: 3,
|
|
15
|
+
delivery: 4,
|
|
16
|
+
operations: 5,
|
|
17
|
+
governance: 6,
|
|
18
|
+
projects: 7 // Multi-project support
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Default folders to exclude from sidebar
|
|
22
|
+
*/
|
|
23
|
+
const DEFAULT_EXCLUDE_FOLDERS = [
|
|
24
|
+
'node_modules',
|
|
25
|
+
'.git',
|
|
26
|
+
'.DS_Store',
|
|
27
|
+
'legacy' // Brownfield imports (temporary, not for display)
|
|
28
|
+
];
|
|
29
|
+
/**
|
|
30
|
+
* Build sidebar from folder structure
|
|
31
|
+
*/
|
|
32
|
+
export async function buildSidebar(options) {
|
|
33
|
+
const { docsPath, excludeFolders = DEFAULT_EXCLUDE_FOLDERS, maxDepth = 5 } = options;
|
|
34
|
+
// Check if docs path exists
|
|
35
|
+
if (!await fs.pathExists(docsPath)) {
|
|
36
|
+
throw new Error(`Documentation path does not exist: ${docsPath}`);
|
|
37
|
+
}
|
|
38
|
+
// Scan folders and build sidebar items
|
|
39
|
+
const items = await scanFolder(docsPath, docsPath, excludeFolders, 0, maxDepth);
|
|
40
|
+
// Sort by priority (strategy first, governance last)
|
|
41
|
+
const sortedItems = sortByPriority(items);
|
|
42
|
+
return {
|
|
43
|
+
docs: sortedItems
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Scan folder recursively and build sidebar items
|
|
48
|
+
*/
|
|
49
|
+
async function scanFolder(basePath, currentPath, excludeFolders, depth, maxDepth) {
|
|
50
|
+
if (depth >= maxDepth) {
|
|
51
|
+
return [];
|
|
52
|
+
}
|
|
53
|
+
const items = [];
|
|
54
|
+
try {
|
|
55
|
+
const entries = await fs.readdir(currentPath, { withFileTypes: true });
|
|
56
|
+
// Separate folders and files
|
|
57
|
+
const folders = entries.filter(e => e.isDirectory() && !excludeFolders.includes(e.name));
|
|
58
|
+
const files = entries.filter(e => e.isFile() && e.name.endsWith('.md'));
|
|
59
|
+
// Process folders first (categories)
|
|
60
|
+
for (const folder of folders) {
|
|
61
|
+
const folderPath = path.join(currentPath, folder.name);
|
|
62
|
+
const childItems = await scanFolder(basePath, folderPath, excludeFolders, depth + 1, maxDepth);
|
|
63
|
+
if (childItems.length > 0) {
|
|
64
|
+
items.push({
|
|
65
|
+
type: 'category',
|
|
66
|
+
label: formatLabel(folder.name),
|
|
67
|
+
items: childItems
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Process markdown files (docs)
|
|
72
|
+
for (const file of files) {
|
|
73
|
+
const relativePath = path.relative(basePath, path.join(currentPath, file.name));
|
|
74
|
+
const docId = relativePath.replace(/\.md$/, '').replace(/\\/g, '/');
|
|
75
|
+
items.push({
|
|
76
|
+
type: 'doc',
|
|
77
|
+
id: docId
|
|
78
|
+
});
|
|
79
|
+
}
|
|
80
|
+
return items;
|
|
81
|
+
}
|
|
82
|
+
catch (error) {
|
|
83
|
+
console.error(`Error scanning folder ${currentPath}:`, error);
|
|
84
|
+
return [];
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Sort sidebar items by priority
|
|
89
|
+
*/
|
|
90
|
+
function sortByPriority(items) {
|
|
91
|
+
return items.sort((a, b) => {
|
|
92
|
+
// Extract folder name from label
|
|
93
|
+
const aFolder = a.label?.toLowerCase().replace(/\s+/g, '-') || '';
|
|
94
|
+
const bFolder = b.label?.toLowerCase().replace(/\s+/g, '-') || '';
|
|
95
|
+
// Get priorities (default to 999 if not found)
|
|
96
|
+
const aPriority = FOLDER_PRIORITY[aFolder] || 999;
|
|
97
|
+
const bPriority = FOLDER_PRIORITY[bFolder] || 999;
|
|
98
|
+
// Sort by priority
|
|
99
|
+
if (aPriority !== bPriority) {
|
|
100
|
+
return aPriority - bPriority;
|
|
101
|
+
}
|
|
102
|
+
// If same priority, sort alphabetically
|
|
103
|
+
return aFolder.localeCompare(bFolder);
|
|
104
|
+
});
|
|
105
|
+
}
|
|
106
|
+
/**
|
|
107
|
+
* Format folder name to human-readable label
|
|
108
|
+
* Examples:
|
|
109
|
+
* - "strategy" → "Strategy"
|
|
110
|
+
* - "architecture" → "Architecture"
|
|
111
|
+
* - "adr" → "ADRs"
|
|
112
|
+
* - "my-feature-spec" → "My Feature Spec"
|
|
113
|
+
*/
|
|
114
|
+
function formatLabel(folderName) {
|
|
115
|
+
// Special cases
|
|
116
|
+
const specialCases = {
|
|
117
|
+
adr: 'ADRs',
|
|
118
|
+
adrs: 'ADRs',
|
|
119
|
+
hld: 'HLD',
|
|
120
|
+
lld: 'LLD',
|
|
121
|
+
prd: 'PRDs',
|
|
122
|
+
okr: 'OKRs',
|
|
123
|
+
api: 'API',
|
|
124
|
+
cli: 'CLI',
|
|
125
|
+
ui: 'UI',
|
|
126
|
+
ux: 'UX',
|
|
127
|
+
sre: 'SRE',
|
|
128
|
+
devops: 'DevOps',
|
|
129
|
+
mlops: 'MLOps',
|
|
130
|
+
k8s: 'Kubernetes'
|
|
131
|
+
};
|
|
132
|
+
const normalized = folderName.toLowerCase();
|
|
133
|
+
if (specialCases[normalized]) {
|
|
134
|
+
return specialCases[normalized];
|
|
135
|
+
}
|
|
136
|
+
// Convert kebab-case or snake_case to Title Case
|
|
137
|
+
return folderName
|
|
138
|
+
.replace(/[-_]/g, ' ')
|
|
139
|
+
.split(' ')
|
|
140
|
+
.map(word => word.charAt(0).toUpperCase() + word.slice(1).toLowerCase())
|
|
141
|
+
.join(' ');
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Generate sidebars.js content as string
|
|
145
|
+
*/
|
|
146
|
+
export function generateSidebarsJS(sidebar) {
|
|
147
|
+
return `/**
|
|
148
|
+
* Auto-generated sidebar for SpecWeave documentation
|
|
149
|
+
* Generated: ${new Date().toISOString()}
|
|
150
|
+
*
|
|
151
|
+
* DO NOT EDIT THIS FILE MANUALLY
|
|
152
|
+
* Regenerate with: /specweave:docs preview
|
|
153
|
+
*/
|
|
154
|
+
|
|
155
|
+
module.exports = ${JSON.stringify(sidebar, null, 2)};
|
|
156
|
+
`;
|
|
157
|
+
}
|
|
158
|
+
/**
|
|
159
|
+
* Write sidebar to file
|
|
160
|
+
*/
|
|
161
|
+
export async function writeSidebar(filePath, sidebar) {
|
|
162
|
+
const content = generateSidebarsJS(sidebar);
|
|
163
|
+
await fs.ensureDir(path.dirname(filePath));
|
|
164
|
+
await fs.writeFile(filePath, content, 'utf-8');
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* Count total documents in sidebar
|
|
168
|
+
*/
|
|
169
|
+
export function countDocuments(sidebar) {
|
|
170
|
+
let count = 0;
|
|
171
|
+
function traverse(items) {
|
|
172
|
+
for (const item of items) {
|
|
173
|
+
if (item.type === 'doc') {
|
|
174
|
+
count++;
|
|
175
|
+
}
|
|
176
|
+
else if (item.type === 'category' && item.items) {
|
|
177
|
+
traverse(item.items);
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
traverse(sidebar.docs);
|
|
182
|
+
return count;
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Count total categories in sidebar
|
|
186
|
+
*/
|
|
187
|
+
export function countCategories(sidebar) {
|
|
188
|
+
let count = 0;
|
|
189
|
+
function traverse(items) {
|
|
190
|
+
for (const item of items) {
|
|
191
|
+
if (item.type === 'category') {
|
|
192
|
+
count++;
|
|
193
|
+
if (item.items) {
|
|
194
|
+
traverse(item.items);
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
}
|
|
199
|
+
traverse(sidebar.docs);
|
|
200
|
+
return count;
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=sidebar-builder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sidebar-builder.js","sourceRoot":"","sources":["../../../src/utils/docs-preview/sidebar-builder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Type definitions for documentation preview functionality
|
|
3
|
+
*/
|
|
4
|
+
export interface DocusaurusConfig {
|
|
5
|
+
title: string;
|
|
6
|
+
tagline: string;
|
|
7
|
+
url: string;
|
|
8
|
+
baseUrl: string;
|
|
9
|
+
docsPath: string;
|
|
10
|
+
port?: number;
|
|
11
|
+
theme?: 'default' | 'classic' | 'dark';
|
|
12
|
+
excludeFolders?: string[];
|
|
13
|
+
}
|
|
14
|
+
export interface SidebarItem {
|
|
15
|
+
type: 'doc' | 'category';
|
|
16
|
+
label?: string;
|
|
17
|
+
id?: string;
|
|
18
|
+
items?: SidebarItem[];
|
|
19
|
+
}
|
|
20
|
+
export interface Sidebar {
|
|
21
|
+
docs: SidebarItem[];
|
|
22
|
+
}
|
|
23
|
+
export interface SetupOptions {
|
|
24
|
+
projectRoot: string;
|
|
25
|
+
targetDir: string;
|
|
26
|
+
docsPath: string;
|
|
27
|
+
config: DocusaurusConfig;
|
|
28
|
+
force?: boolean;
|
|
29
|
+
}
|
|
30
|
+
export interface ServerOptions {
|
|
31
|
+
port: number;
|
|
32
|
+
openBrowser: boolean;
|
|
33
|
+
host?: string;
|
|
34
|
+
}
|
|
35
|
+
export interface InstallOptions {
|
|
36
|
+
targetDir: string;
|
|
37
|
+
packages: string[];
|
|
38
|
+
dev?: boolean;
|
|
39
|
+
}
|
|
40
|
+
export interface NodeVersion {
|
|
41
|
+
version: string;
|
|
42
|
+
major: number;
|
|
43
|
+
minor: number;
|
|
44
|
+
patch: number;
|
|
45
|
+
compatible: boolean;
|
|
46
|
+
}
|
|
47
|
+
export interface BuildResult {
|
|
48
|
+
success: boolean;
|
|
49
|
+
outputPath: string;
|
|
50
|
+
size: number;
|
|
51
|
+
duration: number;
|
|
52
|
+
errors?: string[];
|
|
53
|
+
}
|
|
54
|
+
export interface ServerProcess {
|
|
55
|
+
pid: number;
|
|
56
|
+
port: number;
|
|
57
|
+
url: string;
|
|
58
|
+
stop: () => Promise<void>;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/utils/docs-preview/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,KAAK,GAAG,UAAU,CAAC;IACzB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,EAAE,CAAC,EAAE,MAAM,CAAC;IACZ,KAAK,CAAC,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,OAAO;IACtB,IAAI,EAAE,WAAW,EAAE,CAAC;CACrB;AAED,MAAM,WAAW,YAAY;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,gBAAgB,CAAC;IACzB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,OAAO,CAAC;IACrB,IAAI,CAAC,EAAE,MAAM,CAAC;CACf;AAED,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,GAAG,CAAC,EAAE,OAAO,CAAC;CACf;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,UAAU,EAAE,OAAO,CAAC;CACrB;AAED,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;IACb,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;CAC3B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/utils/docs-preview/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Docusaurus configuration generator
|
|
3
|
+
* Generates docusaurus.config.js with sensible defaults
|
|
4
|
+
*/
|
|
5
|
+
import { DocusaurusConfig } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Generate docusaurus.config.js content
|
|
8
|
+
*/
|
|
9
|
+
export declare function generateDocusaurusConfig(config: DocusaurusConfig): string;
|
|
10
|
+
/**
|
|
11
|
+
* Write docusaurus.config.js to file
|
|
12
|
+
*/
|
|
13
|
+
export declare function writeDocusaurusConfig(targetDir: string, config: DocusaurusConfig): Promise<void>;
|
|
14
|
+
/**
|
|
15
|
+
* Generate package.json for Docusaurus site
|
|
16
|
+
*/
|
|
17
|
+
export declare function generatePackageJSON(title: string): string;
|
|
18
|
+
/**
|
|
19
|
+
* Write package.json to file
|
|
20
|
+
*/
|
|
21
|
+
export declare function writePackageJSON(targetDir: string, title: string): Promise<void>;
|
|
22
|
+
/**
|
|
23
|
+
* Generate custom CSS for theme customization
|
|
24
|
+
*/
|
|
25
|
+
export declare function generateCustomCSS(theme: 'default' | 'classic' | 'dark'): string;
|
|
26
|
+
/**
|
|
27
|
+
* Write custom CSS to file
|
|
28
|
+
*/
|
|
29
|
+
export declare function writeCustomCSS(targetDir: string, theme: 'default' | 'classic' | 'dark'): Promise<void>;
|
|
30
|
+
/**
|
|
31
|
+
* Generate index page (landing page)
|
|
32
|
+
*/
|
|
33
|
+
export declare function generateIndexPage(title: string, tagline: string): string;
|
|
34
|
+
/**
|
|
35
|
+
* Write index page to file
|
|
36
|
+
*/
|
|
37
|
+
export declare function writeIndexPage(targetDir: string, title: string, tagline: string): Promise<void>;
|
|
38
|
+
/**
|
|
39
|
+
* Generate index.module.css for landing page styles
|
|
40
|
+
*/
|
|
41
|
+
export declare function generateIndexModuleCSS(): string;
|
|
42
|
+
/**
|
|
43
|
+
* Write index.module.css to file
|
|
44
|
+
*/
|
|
45
|
+
export declare function writeIndexModuleCSS(targetDir: string): Promise<void>;
|
|
46
|
+
//# sourceMappingURL=config-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config-generator.d.ts","sourceRoot":"","sources":["../../../src/utils/docs-preview.bak/config-generator.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAIH,OAAO,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAE9C;;GAEG;AACH,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,gBAAgB,GAAG,MAAM,CAqHzE;AAED;;GAEG;AACH,wBAAsB,qBAAqB,CAAC,SAAS,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAMtG;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAmCzD;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMtF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CA8E/E;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,SAAS,GAAG,SAAS,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM5G;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,CA8DxE;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAMrG;AAED;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,MAAM,CAsB/C;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAM1E"}
|