@facet-coverage/core 0.3.0 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +64 -574
- package/dist/cli/commands/generate.d.ts.map +1 -1
- package/dist/cli/commands/generate.js +224 -25
- package/dist/cli/commands/generate.js.map +1 -1
- package/dist/cli/commands/serve.d.ts +12 -0
- package/dist/cli/commands/serve.d.ts.map +1 -0
- package/dist/cli/commands/serve.js +76 -0
- package/dist/cli/commands/serve.js.map +1 -0
- package/dist/cli/index.js +10 -0
- package/dist/cli/index.js.map +1 -1
- package/dist/client/index.js +60 -0
- package/dist/core/FacetParser.d.ts +37 -1
- package/dist/core/FacetParser.d.ts.map +1 -1
- package/dist/core/FacetParser.js +123 -5
- package/dist/core/FacetParser.js.map +1 -1
- package/dist/core/TestScanner.d.ts +4 -1
- package/dist/core/TestScanner.d.ts.map +1 -1
- package/dist/core/TestScanner.js +42 -13
- package/dist/core/TestScanner.js.map +1 -1
- package/dist/core/Validator.d.ts +4 -0
- package/dist/core/Validator.d.ts.map +1 -1
- package/dist/core/Validator.js +22 -4
- package/dist/core/Validator.js.map +1 -1
- package/dist/server/DevServer.d.ts +48 -0
- package/dist/server/DevServer.d.ts.map +1 -0
- package/dist/server/DevServer.js +126 -0
- package/dist/server/DevServer.js.map +1 -0
- package/dist/server/HotReloadManager.d.ts +49 -0
- package/dist/server/HotReloadManager.d.ts.map +1 -0
- package/dist/server/HotReloadManager.js +187 -0
- package/dist/server/HotReloadManager.js.map +1 -0
- package/dist/server/index.d.ts +3 -0
- package/dist/server/index.d.ts.map +1 -0
- package/dist/server/index.js +6 -0
- package/dist/server/index.js.map +1 -0
- package/dist/server/routes.d.ts +12 -0
- package/dist/server/routes.d.ts.map +1 -0
- package/dist/server/routes.js +272 -0
- package/dist/server/routes.js.map +1 -0
- package/dist/server/views/Dashboard.d.ts +6 -0
- package/dist/server/views/Dashboard.d.ts.map +1 -0
- package/dist/server/views/Dashboard.js +121 -0
- package/dist/server/views/Dashboard.js.map +1 -0
- package/dist/server/views/FacetPage.d.ts +6 -0
- package/dist/server/views/FacetPage.d.ts.map +1 -0
- package/dist/server/views/FacetPage.js +190 -0
- package/dist/server/views/FacetPage.js.map +1 -0
- package/dist/server/views/FeaturePage.d.ts +6 -0
- package/dist/server/views/FeaturePage.d.ts.map +1 -0
- package/dist/server/views/FeaturePage.js +98 -0
- package/dist/server/views/FeaturePage.js.map +1 -0
- package/dist/server/views/Layout.d.ts +17 -0
- package/dist/server/views/Layout.d.ts.map +1 -0
- package/dist/server/views/Layout.js +59 -0
- package/dist/server/views/Layout.js.map +1 -0
- package/dist/server/views/Sidebar.d.ts +6 -0
- package/dist/server/views/Sidebar.d.ts.map +1 -0
- package/dist/server/views/Sidebar.js +59 -0
- package/dist/server/views/Sidebar.js.map +1 -0
- package/dist/server/views/TestPanel.d.ts +6 -0
- package/dist/server/views/TestPanel.d.ts.map +1 -0
- package/dist/server/views/TestPanel.js +69 -0
- package/dist/server/views/TestPanel.js.map +1 -0
- package/dist/server/views/scripts.d.ts +5 -0
- package/dist/server/views/scripts.d.ts.map +1 -0
- package/dist/server/views/scripts.js +203 -0
- package/dist/server/views/scripts.js.map +1 -0
- package/dist/server/views/styles.d.ts +6 -0
- package/dist/server/views/styles.d.ts.map +1 -0
- package/dist/server/views/styles.js +608 -0
- package/dist/server/views/styles.js.map +1 -0
- package/dist/types.d.ts +27 -3
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/package.json +9 -4
package/dist/core/Validator.js
CHANGED
|
@@ -100,6 +100,8 @@ class Validator {
|
|
|
100
100
|
const warnings = [];
|
|
101
101
|
const structureDir = (0, path_1.dirname)(structureFile);
|
|
102
102
|
const featureDir = (0, path_1.dirname)(structureDir);
|
|
103
|
+
// Build a set of all facet IDs in this structure for parent validation
|
|
104
|
+
const facetIdsInStructure = new Set(structure.facets.map(f => f.id));
|
|
103
105
|
for (const facet of structure.facets) {
|
|
104
106
|
// Validate source file exists
|
|
105
107
|
if (this.config.validation.requireSourceExists) {
|
|
@@ -113,8 +115,8 @@ class Validator {
|
|
|
113
115
|
});
|
|
114
116
|
continue; // Skip section check if file doesn't exist
|
|
115
117
|
}
|
|
116
|
-
// Validate section exists
|
|
117
|
-
if (this.config.validation.requireSectionExists) {
|
|
118
|
+
// Validate section exists (only for non-sub-facets, sub-facets reference parent's section)
|
|
119
|
+
if (this.config.validation.requireSectionExists && !facet.isSubFacet) {
|
|
118
120
|
const sectionExists = this.facetParser.sectionExists(sourcePath, facet.source.section);
|
|
119
121
|
if (!sectionExists) {
|
|
120
122
|
errors.push({
|
|
@@ -135,6 +137,17 @@ class Validator {
|
|
|
135
137
|
facetId: facet.id,
|
|
136
138
|
});
|
|
137
139
|
}
|
|
140
|
+
// Validate sub-facet parent relationship
|
|
141
|
+
if (facet.isSubFacet && facet.parentId) {
|
|
142
|
+
if (!facetIdsInStructure.has(facet.parentId)) {
|
|
143
|
+
errors.push({
|
|
144
|
+
type: 'orphan-subfacet',
|
|
145
|
+
message: `Sub-facet '${facet.id}' references non-existent parent '${facet.parentId}'`,
|
|
146
|
+
file: structureFile,
|
|
147
|
+
facetId: facet.id,
|
|
148
|
+
});
|
|
149
|
+
}
|
|
150
|
+
}
|
|
138
151
|
}
|
|
139
152
|
return {
|
|
140
153
|
valid: errors.length === 0,
|
|
@@ -144,10 +157,15 @@ class Validator {
|
|
|
144
157
|
}
|
|
145
158
|
/**
|
|
146
159
|
* Check if a facet ID is valid
|
|
160
|
+
* Valid formats:
|
|
161
|
+
* - type:section (e.g., "business:guest-purchase-flow")
|
|
162
|
+
* - path/type:section (e.g., "features/cli/product:generate-command")
|
|
163
|
+
* - type:section/sub-id (e.g., "compliance:pci-dss/tls") - sub-facet
|
|
147
164
|
*/
|
|
148
165
|
isValidFacetId(id) {
|
|
149
|
-
// Allow alphanumeric, hyphens, underscores, and
|
|
150
|
-
|
|
166
|
+
// Allow alphanumeric, hyphens, underscores, colons, and slashes
|
|
167
|
+
// Format: [path/]*type:section[/sub-id]
|
|
168
|
+
return /^[a-zA-Z0-9/_-]+:[a-zA-Z0-9_-]+(?:\/[a-zA-Z0-9_-]+)?$/.test(id);
|
|
151
169
|
}
|
|
152
170
|
/**
|
|
153
171
|
* Check if a reference is a valid path-style reference
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Validator.js","sourceRoot":"","sources":["../../src/core/Validator.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"Validator.js","sourceRoot":"","sources":["../../src/core/Validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
import type { FacetConfig, CoverageReport } from '../types.js';
|
|
2
|
+
export interface DevServerOptions {
|
|
3
|
+
port: number;
|
|
4
|
+
host: string;
|
|
5
|
+
open: boolean;
|
|
6
|
+
packageRoot: string;
|
|
7
|
+
}
|
|
8
|
+
export interface WebSocketData {
|
|
9
|
+
id: string;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Development server for browsing facet documentation with live coverage
|
|
13
|
+
*/
|
|
14
|
+
export declare class DevServer {
|
|
15
|
+
private server;
|
|
16
|
+
private hotReload;
|
|
17
|
+
private config;
|
|
18
|
+
private cwd;
|
|
19
|
+
private options;
|
|
20
|
+
private router;
|
|
21
|
+
private coverageReport;
|
|
22
|
+
constructor(config: FacetConfig, cwd: string, options: DevServerOptions);
|
|
23
|
+
/**
|
|
24
|
+
* Get the current coverage report
|
|
25
|
+
*/
|
|
26
|
+
getCoverageReport(): CoverageReport | null;
|
|
27
|
+
/**
|
|
28
|
+
* Get config
|
|
29
|
+
*/
|
|
30
|
+
getConfig(): FacetConfig;
|
|
31
|
+
/**
|
|
32
|
+
* Get current working directory
|
|
33
|
+
*/
|
|
34
|
+
getCwd(): string;
|
|
35
|
+
/**
|
|
36
|
+
* Calculate coverage and update the cached report
|
|
37
|
+
*/
|
|
38
|
+
refreshCoverage(): Promise<CoverageReport>;
|
|
39
|
+
/**
|
|
40
|
+
* Start the development server
|
|
41
|
+
*/
|
|
42
|
+
start(): Promise<void>;
|
|
43
|
+
/**
|
|
44
|
+
* Stop the server
|
|
45
|
+
*/
|
|
46
|
+
stop(): Promise<void>;
|
|
47
|
+
}
|
|
48
|
+
//# sourceMappingURL=DevServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DevServer.d.ts","sourceRoot":"","sources":["../../src/server/DevServer.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAK/D,MAAM,WAAW,gBAAgB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,OAAO,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;CACZ;AAED;;GAEG;AACH,qBAAa,SAAS;IACpB,OAAO,CAAC,MAAM,CAA6C;IAC3D,OAAO,CAAC,SAAS,CAAmB;IACpC,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,OAAO,CAAmB;IAClC,OAAO,CAAC,MAAM,CAAkC;IAChD,OAAO,CAAC,cAAc,CAA+B;gBAEzC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,gBAAgB;IASvE;;OAEG;IACH,iBAAiB,IAAI,cAAc,GAAG,IAAI;IAI1C;;OAEG;IACH,SAAS,IAAI,WAAW;IAIxB;;OAEG;IACH,MAAM,IAAI,MAAM;IAIhB;;OAEG;IACG,eAAe,IAAI,OAAO,CAAC,cAAc,CAAC;IAMhD;;OAEG;IACG,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAuE5B;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAO5B"}
|
|
@@ -0,0 +1,126 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DevServer = void 0;
|
|
4
|
+
const CoverageCalculator_js_1 = require("../core/CoverageCalculator.js");
|
|
5
|
+
const HotReloadManager_js_1 = require("./HotReloadManager.js");
|
|
6
|
+
const routes_js_1 = require("./routes.js");
|
|
7
|
+
/**
|
|
8
|
+
* Development server for browsing facet documentation with live coverage
|
|
9
|
+
*/
|
|
10
|
+
class DevServer {
|
|
11
|
+
server = null;
|
|
12
|
+
hotReload;
|
|
13
|
+
config;
|
|
14
|
+
cwd;
|
|
15
|
+
options;
|
|
16
|
+
router;
|
|
17
|
+
coverageReport = null;
|
|
18
|
+
constructor(config, cwd, options) {
|
|
19
|
+
this.config = config;
|
|
20
|
+
this.cwd = cwd;
|
|
21
|
+
this.options = options;
|
|
22
|
+
this.hotReload = new HotReloadManager_js_1.HotReloadManager(config, cwd);
|
|
23
|
+
this.hotReload.setPackageRoot(options.packageRoot);
|
|
24
|
+
this.router = (0, routes_js_1.createRouter)(this, options.packageRoot);
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Get the current coverage report
|
|
28
|
+
*/
|
|
29
|
+
getCoverageReport() {
|
|
30
|
+
return this.coverageReport;
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Get config
|
|
34
|
+
*/
|
|
35
|
+
getConfig() {
|
|
36
|
+
return this.config;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Get current working directory
|
|
40
|
+
*/
|
|
41
|
+
getCwd() {
|
|
42
|
+
return this.cwd;
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Calculate coverage and update the cached report
|
|
46
|
+
*/
|
|
47
|
+
async refreshCoverage() {
|
|
48
|
+
const calculator = new CoverageCalculator_js_1.CoverageCalculator(this.config);
|
|
49
|
+
this.coverageReport = await calculator.calculateCoverage(this.cwd);
|
|
50
|
+
return this.coverageReport;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* Start the development server
|
|
54
|
+
*/
|
|
55
|
+
async start() {
|
|
56
|
+
// Initial coverage calculation
|
|
57
|
+
console.log('Calculating initial coverage...');
|
|
58
|
+
await this.refreshCoverage();
|
|
59
|
+
const self = this;
|
|
60
|
+
this.server = Bun.serve({
|
|
61
|
+
port: this.options.port,
|
|
62
|
+
hostname: this.options.host,
|
|
63
|
+
fetch(req, server) {
|
|
64
|
+
const url = new URL(req.url);
|
|
65
|
+
// Handle WebSocket upgrade
|
|
66
|
+
if (url.pathname === '/ws') {
|
|
67
|
+
const upgraded = server.upgrade(req, {
|
|
68
|
+
data: { id: crypto.randomUUID() },
|
|
69
|
+
});
|
|
70
|
+
if (upgraded)
|
|
71
|
+
return undefined;
|
|
72
|
+
return new Response('WebSocket upgrade failed', { status: 400 });
|
|
73
|
+
}
|
|
74
|
+
// Handle HTTP requests via router
|
|
75
|
+
return self.router.handle(req);
|
|
76
|
+
},
|
|
77
|
+
websocket: {
|
|
78
|
+
open(ws) {
|
|
79
|
+
self.hotReload.addClient(ws);
|
|
80
|
+
ws.send(JSON.stringify({ type: 'connected', data: { timestamp: new Date().toISOString() } }));
|
|
81
|
+
},
|
|
82
|
+
close(ws) {
|
|
83
|
+
self.hotReload.removeClient(ws);
|
|
84
|
+
},
|
|
85
|
+
message(_ws, _message) {
|
|
86
|
+
// Client messages not needed for now
|
|
87
|
+
},
|
|
88
|
+
},
|
|
89
|
+
});
|
|
90
|
+
// Start file watching for hot reload
|
|
91
|
+
this.hotReload.start(async () => {
|
|
92
|
+
await this.refreshCoverage();
|
|
93
|
+
return this.coverageReport;
|
|
94
|
+
}, () => {
|
|
95
|
+
(0, routes_js_1.clearClientBundleCache)();
|
|
96
|
+
console.log(' Client bundle cache cleared');
|
|
97
|
+
});
|
|
98
|
+
const url = `http://${this.options.host}:${this.options.port}`;
|
|
99
|
+
console.log(`
|
|
100
|
+
\x1b[36m\x1b[1m Facet Documentation Server\x1b[0m
|
|
101
|
+
|
|
102
|
+
Local: ${url}
|
|
103
|
+
|
|
104
|
+
Watching for changes...
|
|
105
|
+
Press Ctrl+C to stop.
|
|
106
|
+
`);
|
|
107
|
+
// Open browser if requested
|
|
108
|
+
if (this.options.open) {
|
|
109
|
+
const { exec } = await import('child_process');
|
|
110
|
+
const command = process.platform === 'darwin' ? 'open' : process.platform === 'win32' ? 'start' : 'xdg-open';
|
|
111
|
+
exec(`${command} ${url}`);
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Stop the server
|
|
116
|
+
*/
|
|
117
|
+
async stop() {
|
|
118
|
+
this.hotReload.stop();
|
|
119
|
+
if (this.server) {
|
|
120
|
+
this.server.stop();
|
|
121
|
+
this.server = null;
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
exports.DevServer = DevServer;
|
|
126
|
+
//# sourceMappingURL=DevServer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"DevServer.js","sourceRoot":"","sources":["../../src/server/DevServer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import type { ServerWebSocket } from 'bun';
|
|
2
|
+
import type { FacetConfig, CoverageReport } from '../types.js';
|
|
3
|
+
import type { WebSocketData } from './DevServer.js';
|
|
4
|
+
/**
|
|
5
|
+
* Manages WebSocket connections and file watching for hot reload
|
|
6
|
+
*/
|
|
7
|
+
export declare class HotReloadManager {
|
|
8
|
+
private watcher;
|
|
9
|
+
private clientWatcher;
|
|
10
|
+
private clients;
|
|
11
|
+
private config;
|
|
12
|
+
private cwd;
|
|
13
|
+
private packageRoot;
|
|
14
|
+
private debounceTimer;
|
|
15
|
+
private clientDebounceTimer;
|
|
16
|
+
private onRefresh;
|
|
17
|
+
private onClientChange;
|
|
18
|
+
constructor(config: FacetConfig, cwd: string);
|
|
19
|
+
setPackageRoot(packageRoot: string): void;
|
|
20
|
+
/**
|
|
21
|
+
* Add a WebSocket client
|
|
22
|
+
*/
|
|
23
|
+
addClient(ws: ServerWebSocket<WebSocketData>): void;
|
|
24
|
+
/**
|
|
25
|
+
* Remove a WebSocket client
|
|
26
|
+
*/
|
|
27
|
+
removeClient(ws: ServerWebSocket<WebSocketData>): void;
|
|
28
|
+
/**
|
|
29
|
+
* Start watching for file changes
|
|
30
|
+
*/
|
|
31
|
+
start(onRefresh: () => Promise<CoverageReport>, onClientChange?: () => void): void;
|
|
32
|
+
/**
|
|
33
|
+
* Stop watching and clean up
|
|
34
|
+
*/
|
|
35
|
+
stop(): void;
|
|
36
|
+
/**
|
|
37
|
+
* Handle file change event with debouncing
|
|
38
|
+
*/
|
|
39
|
+
private handleFileChange;
|
|
40
|
+
/**
|
|
41
|
+
* Handle client source file change with debouncing
|
|
42
|
+
*/
|
|
43
|
+
private handleClientFileChange;
|
|
44
|
+
/**
|
|
45
|
+
* Broadcast a message to all connected clients
|
|
46
|
+
*/
|
|
47
|
+
private broadcast;
|
|
48
|
+
}
|
|
49
|
+
//# sourceMappingURL=HotReloadManager.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HotReloadManager.d.ts","sourceRoot":"","sources":["../../src/server/HotReloadManager.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,KAAK,CAAC;AAC3C,OAAO,KAAK,EAAE,WAAW,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAC/D,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,gBAAgB,CAAC;AAGpD;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAA0B;IACzC,OAAO,CAAC,aAAa,CAA0B;IAC/C,OAAO,CAAC,OAAO,CAAkD;IACjE,OAAO,CAAC,MAAM,CAAc;IAC5B,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,aAAa,CAA8C;IACnE,OAAO,CAAC,mBAAmB,CAA8C;IACzE,OAAO,CAAC,SAAS,CAAgD;IACjE,OAAO,CAAC,cAAc,CAA6B;gBAEvC,MAAM,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM;IAK5C,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,IAAI;IAIzC;;OAEG;IACH,SAAS,CAAC,EAAE,EAAE,eAAe,CAAC,aAAa,CAAC,GAAG,IAAI;IAInD;;OAEG;IACH,YAAY,CAAC,EAAE,EAAE,eAAe,CAAC,aAAa,CAAC,GAAG,IAAI;IAItD;;OAEG;IACH,KAAK,CAAC,SAAS,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,EAAE,cAAc,CAAC,EAAE,MAAM,IAAI,GAAG,IAAI;IAmClF;;OAEG;IACH,IAAI,IAAI,IAAI;IAoBZ;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyDxB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAuB9B;;OAEG;IACH,OAAO,CAAC,SAAS;CAWlB"}
|
|
@@ -0,0 +1,187 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.HotReloadManager = void 0;
|
|
4
|
+
const chokidar_1 = require("chokidar");
|
|
5
|
+
const generate_js_1 = require("../cli/commands/generate.js");
|
|
6
|
+
/**
|
|
7
|
+
* Manages WebSocket connections and file watching for hot reload
|
|
8
|
+
*/
|
|
9
|
+
class HotReloadManager {
|
|
10
|
+
watcher = null;
|
|
11
|
+
clientWatcher = null;
|
|
12
|
+
clients = new Set();
|
|
13
|
+
config;
|
|
14
|
+
cwd;
|
|
15
|
+
packageRoot = '';
|
|
16
|
+
debounceTimer = null;
|
|
17
|
+
clientDebounceTimer = null;
|
|
18
|
+
onRefresh = null;
|
|
19
|
+
onClientChange = null;
|
|
20
|
+
constructor(config, cwd) {
|
|
21
|
+
this.config = config;
|
|
22
|
+
this.cwd = cwd;
|
|
23
|
+
}
|
|
24
|
+
setPackageRoot(packageRoot) {
|
|
25
|
+
this.packageRoot = packageRoot;
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* Add a WebSocket client
|
|
29
|
+
*/
|
|
30
|
+
addClient(ws) {
|
|
31
|
+
this.clients.add(ws);
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Remove a WebSocket client
|
|
35
|
+
*/
|
|
36
|
+
removeClient(ws) {
|
|
37
|
+
this.clients.delete(ws);
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Start watching for file changes
|
|
41
|
+
*/
|
|
42
|
+
start(onRefresh, onClientChange) {
|
|
43
|
+
this.onRefresh = onRefresh;
|
|
44
|
+
this.onClientChange = onClientChange || null;
|
|
45
|
+
// Watch patterns matching facet markdown files and test files
|
|
46
|
+
const watchPatterns = [
|
|
47
|
+
...this.config.structureFiles,
|
|
48
|
+
'features/**/facets/**/*.md',
|
|
49
|
+
`${this.config.testDir}/**/*.{ts,js,tsx,jsx}`,
|
|
50
|
+
];
|
|
51
|
+
this.watcher = (0, chokidar_1.watch)(watchPatterns, {
|
|
52
|
+
cwd: this.cwd,
|
|
53
|
+
ignoreInitial: true,
|
|
54
|
+
persistent: true,
|
|
55
|
+
});
|
|
56
|
+
this.watcher.on('all', (event, path) => {
|
|
57
|
+
this.handleFileChange(event, path);
|
|
58
|
+
});
|
|
59
|
+
// Watch client source files for hot reload
|
|
60
|
+
if (this.packageRoot) {
|
|
61
|
+
const clientPath = `${this.packageRoot}/src/server/client`;
|
|
62
|
+
this.clientWatcher = (0, chokidar_1.watch)(`${clientPath}/**/*.{ts,tsx,css}`, {
|
|
63
|
+
ignoreInitial: true,
|
|
64
|
+
persistent: true,
|
|
65
|
+
});
|
|
66
|
+
this.clientWatcher.on('all', (event, path) => {
|
|
67
|
+
this.handleClientFileChange(event, path);
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Stop watching and clean up
|
|
73
|
+
*/
|
|
74
|
+
stop() {
|
|
75
|
+
if (this.debounceTimer) {
|
|
76
|
+
clearTimeout(this.debounceTimer);
|
|
77
|
+
this.debounceTimer = null;
|
|
78
|
+
}
|
|
79
|
+
if (this.clientDebounceTimer) {
|
|
80
|
+
clearTimeout(this.clientDebounceTimer);
|
|
81
|
+
this.clientDebounceTimer = null;
|
|
82
|
+
}
|
|
83
|
+
if (this.watcher) {
|
|
84
|
+
this.watcher.close();
|
|
85
|
+
this.watcher = null;
|
|
86
|
+
}
|
|
87
|
+
if (this.clientWatcher) {
|
|
88
|
+
this.clientWatcher.close();
|
|
89
|
+
this.clientWatcher = null;
|
|
90
|
+
}
|
|
91
|
+
this.clients.clear();
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Handle file change event with debouncing
|
|
95
|
+
*/
|
|
96
|
+
handleFileChange(event, path) {
|
|
97
|
+
// Clear existing timer
|
|
98
|
+
if (this.debounceTimer) {
|
|
99
|
+
clearTimeout(this.debounceTimer);
|
|
100
|
+
}
|
|
101
|
+
// Notify clients that a change was detected
|
|
102
|
+
this.broadcast({
|
|
103
|
+
type: 'file-change',
|
|
104
|
+
data: { event, path, timestamp: new Date().toISOString() },
|
|
105
|
+
});
|
|
106
|
+
// Check if this is a markdown file (facet definition)
|
|
107
|
+
const isMarkdownChange = path.endsWith('.md');
|
|
108
|
+
// Debounce to avoid multiple rapid refreshes
|
|
109
|
+
this.debounceTimer = setTimeout(async () => {
|
|
110
|
+
console.log(`\n Change detected: ${path} (${event})`);
|
|
111
|
+
// If markdown changed, regenerate facet structure first
|
|
112
|
+
if (isMarkdownChange) {
|
|
113
|
+
console.log(' Regenerating facet structure...');
|
|
114
|
+
try {
|
|
115
|
+
// Save and restore cwd since generateCommand uses process.cwd()
|
|
116
|
+
const originalCwd = process.cwd();
|
|
117
|
+
process.chdir(this.cwd);
|
|
118
|
+
await (0, generate_js_1.generateCommand)(undefined, { quiet: true });
|
|
119
|
+
process.chdir(originalCwd);
|
|
120
|
+
}
|
|
121
|
+
catch (error) {
|
|
122
|
+
console.error(' Error regenerating structure:', error);
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
console.log(' Refreshing coverage...');
|
|
126
|
+
if (this.onRefresh) {
|
|
127
|
+
try {
|
|
128
|
+
const report = await this.onRefresh();
|
|
129
|
+
console.log(` Coverage: ${report.summary.percentage}% (${report.summary.coveredFacets}/${report.summary.totalFacets})`);
|
|
130
|
+
this.broadcast({
|
|
131
|
+
type: 'coverage-update',
|
|
132
|
+
data: {
|
|
133
|
+
timestamp: new Date().toISOString(),
|
|
134
|
+
summary: report.summary,
|
|
135
|
+
},
|
|
136
|
+
});
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
console.error(' Error refreshing coverage:', error);
|
|
140
|
+
this.broadcast({
|
|
141
|
+
type: 'error',
|
|
142
|
+
data: { message: String(error), timestamp: new Date().toISOString() },
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}, 300);
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Handle client source file change with debouncing
|
|
150
|
+
*/
|
|
151
|
+
handleClientFileChange(event, path) {
|
|
152
|
+
// Clear existing timer
|
|
153
|
+
if (this.clientDebounceTimer) {
|
|
154
|
+
clearTimeout(this.clientDebounceTimer);
|
|
155
|
+
}
|
|
156
|
+
// Debounce to avoid multiple rapid rebuilds
|
|
157
|
+
this.clientDebounceTimer = setTimeout(() => {
|
|
158
|
+
console.log(`\n Client change detected: ${path} (${event})`);
|
|
159
|
+
console.log(' Rebuilding client bundle...');
|
|
160
|
+
// Clear the bundle cache and notify clients to reload
|
|
161
|
+
if (this.onClientChange) {
|
|
162
|
+
this.onClientChange();
|
|
163
|
+
}
|
|
164
|
+
this.broadcast({
|
|
165
|
+
type: 'client-reload',
|
|
166
|
+
data: { timestamp: new Date().toISOString() },
|
|
167
|
+
});
|
|
168
|
+
}, 200);
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* Broadcast a message to all connected clients
|
|
172
|
+
*/
|
|
173
|
+
broadcast(message) {
|
|
174
|
+
const json = JSON.stringify(message);
|
|
175
|
+
for (const client of this.clients) {
|
|
176
|
+
try {
|
|
177
|
+
client.send(json);
|
|
178
|
+
}
|
|
179
|
+
catch {
|
|
180
|
+
// Client may have disconnected
|
|
181
|
+
this.clients.delete(client);
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
exports.HotReloadManager = HotReloadManager;
|
|
187
|
+
//# sourceMappingURL=HotReloadManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"HotReloadManager.js","sourceRoot":"","sources":["../../src/server/HotReloadManager.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAC3C,YAAY,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.DevServer = void 0;
|
|
4
|
+
var DevServer_js_1 = require("./DevServer.js");
|
|
5
|
+
Object.defineProperty(exports, "DevServer", { enumerable: true, get: function () { return DevServer_js_1.DevServer; } });
|
|
6
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/server/index.ts"],"names":[],"mappings":";;;AAAA,+CAA2C;AAAlC,yGAAA,SAAS,OAAA"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { DevServer } from './DevServer.js';
|
|
2
|
+
/**
|
|
3
|
+
* Clear the client bundle cache (for hot reload)
|
|
4
|
+
*/
|
|
5
|
+
export declare function clearClientBundleCache(): void;
|
|
6
|
+
/**
|
|
7
|
+
* Simple router for handling HTTP requests
|
|
8
|
+
*/
|
|
9
|
+
export declare function createRouter(server: DevServer, packageRoot: string): {
|
|
10
|
+
handle(req: Request): Promise<Response>;
|
|
11
|
+
};
|
|
12
|
+
//# sourceMappingURL=routes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"routes.d.ts","sourceRoot":"","sources":["../../src/server/routes.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,gBAAgB,CAAC;AAahD;;GAEG;AACH,wBAAgB,sBAAsB,IAAI,IAAI,CAE7C;AAuFD;;GAEG;AAEH,wBAAgB,YAAY,CAAC,MAAM,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM;gBAqK7C,OAAO,GAAG,OAAO,CAAC,QAAQ,CAAC;EA2BhD"}
|