@facet-coverage/core 0.4.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 +5 -4
- 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 +5 -4
- package/dist/core/FacetParser.d.ts.map +1 -1
- package/dist/core/FacetParser.js +43 -31
- package/dist/core/FacetParser.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 +7 -7
- package/dist/types.d.ts.map +1 -1
- package/package.json +9 -4
package/README.md
CHANGED
|
@@ -43,10 +43,10 @@ Users should complete purchases without creating an account.
|
|
|
43
43
|
|
|
44
44
|
**Compliance Team** — `facets/compliance.md`
|
|
45
45
|
```markdown
|
|
46
|
-
## PCI-DSS Payment Requirements
|
|
47
|
-
1. **Encryption in transit**
|
|
48
|
-
2. **No CVV storage**
|
|
49
|
-
3. **Card masking**
|
|
46
|
+
## PCI-DSS Payment Requirements
|
|
47
|
+
1. **Encryption in transit** [](#tls) - TLS 1.2+ required
|
|
48
|
+
2. **No CVV storage** [](#cvv) - Never store CVV
|
|
49
|
+
3. **Card masking** [](#masking) - Show only last 4 digits
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
**UX Team** — `facets/ux.md`
|
|
@@ -130,6 +130,7 @@ Overall: 83% (5/6)
|
|
|
130
130
|
- **Type-safe linking** - Generated TypeScript types prevent broken references
|
|
131
131
|
- **Framework agnostic** - Works with Jest, Vitest, Playwright, Mocha, Bun
|
|
132
132
|
- **Gap detection** - See what's untested across all stakeholder perspectives
|
|
133
|
+
- **Live dashboard** - `facet serve` for real-time coverage with hot reload
|
|
133
134
|
- **CI-ready** - Threshold enforcement and JSON output for pipelines
|
|
134
135
|
|
|
135
136
|
---
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
interface ServeOptions {
|
|
2
|
+
port?: string;
|
|
3
|
+
host?: string;
|
|
4
|
+
config?: string;
|
|
5
|
+
open?: boolean;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Start the documentation server with hot reload
|
|
9
|
+
*/
|
|
10
|
+
export declare function serveCommand(options?: ServeOptions): Promise<void>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=serve.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"AAKA,UAAU,YAAY;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB;AAmCD;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CA0C5E"}
|
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.serveCommand = serveCommand;
|
|
4
|
+
const fs_1 = require("fs");
|
|
5
|
+
const path_1 = require("path");
|
|
6
|
+
const index_js_1 = require("../../server/index.js");
|
|
7
|
+
const config_js_1 = require("../utils/config.js");
|
|
8
|
+
/**
|
|
9
|
+
* Find the facet-coverage package root
|
|
10
|
+
*/
|
|
11
|
+
function findPackageRoot() {
|
|
12
|
+
// Start from the directory of this file and go up to find package.json
|
|
13
|
+
let dir = (0, path_1.dirname)((0, path_1.dirname)((0, path_1.dirname)(__dirname))); // Go up from cli/commands to root
|
|
14
|
+
// For development: check if we're in the source tree
|
|
15
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(dir, 'package.json')) && (0, fs_1.existsSync)((0, path_1.join)(dir, 'src/server/client'))) {
|
|
16
|
+
return dir;
|
|
17
|
+
}
|
|
18
|
+
// For installed package: find from node_modules
|
|
19
|
+
dir = (0, path_1.dirname)(__dirname);
|
|
20
|
+
while (dir !== '/' && dir !== '.') {
|
|
21
|
+
if ((0, fs_1.existsSync)((0, path_1.join)(dir, 'package.json'))) {
|
|
22
|
+
const pkgPath = (0, path_1.join)(dir, 'package.json');
|
|
23
|
+
try {
|
|
24
|
+
const pkg = require(pkgPath);
|
|
25
|
+
if (pkg.name === '@facet-coverage/core') {
|
|
26
|
+
return dir;
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
catch {
|
|
30
|
+
// Continue searching
|
|
31
|
+
}
|
|
32
|
+
}
|
|
33
|
+
dir = (0, path_1.dirname)(dir);
|
|
34
|
+
}
|
|
35
|
+
// Fallback: assume running from repo root
|
|
36
|
+
return process.cwd();
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Start the documentation server with hot reload
|
|
40
|
+
*/
|
|
41
|
+
async function serveCommand(options = {}) {
|
|
42
|
+
const cwd = process.cwd();
|
|
43
|
+
// Load config
|
|
44
|
+
const config = await (0, config_js_1.loadConfig)(options.config, cwd);
|
|
45
|
+
// Find the package root (where client source is)
|
|
46
|
+
const packageRoot = findPackageRoot();
|
|
47
|
+
// Parse port
|
|
48
|
+
const port = options.port ? parseInt(options.port, 10) : 3000;
|
|
49
|
+
if (isNaN(port) || port < 1 || port > 65535) {
|
|
50
|
+
console.error('Invalid port number');
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
const host = options.host || 'localhost';
|
|
54
|
+
const open = options.open ?? false;
|
|
55
|
+
console.log('\n Facet Documentation Server\n');
|
|
56
|
+
// Create and start server
|
|
57
|
+
const server = new index_js_1.DevServer(config, cwd, { port, host, open, packageRoot });
|
|
58
|
+
// Handle shutdown
|
|
59
|
+
process.on('SIGINT', async () => {
|
|
60
|
+
console.log('\n\n Stopping server...');
|
|
61
|
+
await server.stop();
|
|
62
|
+
process.exit(0);
|
|
63
|
+
});
|
|
64
|
+
process.on('SIGTERM', async () => {
|
|
65
|
+
await server.stop();
|
|
66
|
+
process.exit(0);
|
|
67
|
+
});
|
|
68
|
+
try {
|
|
69
|
+
await server.start();
|
|
70
|
+
}
|
|
71
|
+
catch (error) {
|
|
72
|
+
console.error('Failed to start server:', error);
|
|
73
|
+
process.exit(1);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
//# sourceMappingURL=serve.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serve.js","sourceRoot":"","sources":["../../../src/cli/commands/serve.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/index.js
CHANGED
|
@@ -5,6 +5,7 @@ const generate_js_1 = require("./commands/generate.js");
|
|
|
5
5
|
const analyze_js_1 = require("./commands/analyze.js");
|
|
6
6
|
const validate_js_1 = require("./commands/validate.js");
|
|
7
7
|
const watch_js_1 = require("./commands/watch.js");
|
|
8
|
+
const serve_js_1 = require("./commands/serve.js");
|
|
8
9
|
const program = new commander_1.Command();
|
|
9
10
|
program
|
|
10
11
|
.name('facet')
|
|
@@ -46,6 +47,15 @@ program
|
|
|
46
47
|
.option('-c, --config <path>', 'Path to config file')
|
|
47
48
|
.option('-v, --validate', 'Run validation before analysis')
|
|
48
49
|
.action(watch_js_1.watchCommand);
|
|
50
|
+
// Serve command
|
|
51
|
+
program
|
|
52
|
+
.command('serve')
|
|
53
|
+
.description('Start documentation server with hot reload')
|
|
54
|
+
.option('-p, --port <number>', 'Port number (default: 3000)')
|
|
55
|
+
.option('--host <host>', 'Host to bind to (default: localhost)')
|
|
56
|
+
.option('-c, --config <path>', 'Path to config file')
|
|
57
|
+
.option('--open', 'Open browser automatically')
|
|
58
|
+
.action(serve_js_1.serveCommand);
|
|
49
59
|
// Parse arguments
|
|
50
60
|
program.parse();
|
|
51
61
|
//# sourceMappingURL=index.js.map
|
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AAAA,yCAAoC;AACpC,wDAAyD;AACzD,sDAAuD;AACvD,wDAAyD;AACzD,kDAAmD;AAEnD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,+FAA+F,CAAC;KAC5G,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,mBAAmB;AACnB,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,wEAAwE,CAAC;KACrF,MAAM,CAAC,qBAAqB,EAAE,mDAAmD,CAAC;KAClF,MAAM,CAAC,mBAAmB,EAAE,sDAAsD,CAAC;KACnF,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,UAAU,EAAE,gDAAgD,CAAC;KACpE,MAAM,CAAC,YAAY,EAAE,kCAAkC,CAAC;KACxD,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;KACpD,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,IAAA,6BAAe,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;AAE3D,kBAAkB;AAClB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,uBAAuB,EAAE,sCAAsC,CAAC;KACvE,MAAM,CAAC,0BAA0B,EAAE,+BAA+B,CAAC;KACnE,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;KAC1C,MAAM,CAAC,UAAU,EAAE,yBAAyB,CAAC;KAC7C,MAAM,CAAC,2BAAc,CAAC,CAAC;AAE1B,mBAAmB;AACnB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,UAAU,EAAE,qDAAqD,CAAC;KACzE,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;KAC1C,MAAM,CAAC,6BAAe,CAAC,CAAC;AAE3B,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,gBAAgB,EAAE,gCAAgC,CAAC;KAC1D,MAAM,CAAC,uBAAY,CAAC,CAAC;AAExB,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";;AAAA,yCAAoC;AACpC,wDAAyD;AACzD,sDAAuD;AACvD,wDAAyD;AACzD,kDAAmD;AACnD,kDAAmD;AAEnD,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,OAAO,CAAC;KACb,WAAW,CAAC,+FAA+F,CAAC;KAC5G,OAAO,CAAC,OAAO,CAAC,CAAC;AAEpB,mBAAmB;AACnB,OAAO;KACJ,OAAO,CAAC,gBAAgB,CAAC;KACzB,WAAW,CAAC,wEAAwE,CAAC;KACrF,MAAM,CAAC,qBAAqB,EAAE,mDAAmD,CAAC;KAClF,MAAM,CAAC,mBAAmB,EAAE,sDAAsD,CAAC;KACnF,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,UAAU,EAAE,gDAAgD,CAAC;KACpE,MAAM,CAAC,YAAY,EAAE,kCAAkC,CAAC;KACxD,MAAM,CAAC,aAAa,EAAE,6BAA6B,CAAC;KACpD,MAAM,CAAC,CAAC,GAAG,EAAE,OAAO,EAAE,EAAE,CAAC,IAAA,6BAAe,EAAC,GAAG,EAAE,OAAO,CAAC,CAAC,CAAC;AAE3D,kBAAkB;AAClB,OAAO;KACJ,OAAO,CAAC,SAAS,CAAC;KAClB,WAAW,CAAC,wBAAwB,CAAC;KACrC,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,uBAAuB,EAAE,sCAAsC,CAAC;KACvE,MAAM,CAAC,0BAA0B,EAAE,+BAA+B,CAAC;KACnE,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;KAC1C,MAAM,CAAC,UAAU,EAAE,yBAAyB,CAAC;KAC7C,MAAM,CAAC,2BAAc,CAAC,CAAC;AAE1B,mBAAmB;AACnB,OAAO;KACJ,OAAO,CAAC,UAAU,CAAC;KACnB,WAAW,CAAC,yCAAyC,CAAC;KACtD,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,UAAU,EAAE,qDAAqD,CAAC;KACzE,MAAM,CAAC,QAAQ,EAAE,wBAAwB,CAAC;KAC1C,MAAM,CAAC,6BAAe,CAAC,CAAC;AAE3B,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,uCAAuC,CAAC;KACpD,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,gBAAgB,EAAE,gCAAgC,CAAC;KAC1D,MAAM,CAAC,uBAAY,CAAC,CAAC;AAExB,gBAAgB;AAChB,OAAO;KACJ,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,4CAA4C,CAAC;KACzD,MAAM,CAAC,qBAAqB,EAAE,6BAA6B,CAAC;KAC5D,MAAM,CAAC,eAAe,EAAE,sCAAsC,CAAC;KAC/D,MAAM,CAAC,qBAAqB,EAAE,qBAAqB,CAAC;KACpD,MAAM,CAAC,QAAQ,EAAE,4BAA4B,CAAC;KAC9C,MAAM,CAAC,uBAAY,CAAC,CAAC;AAExB,kBAAkB;AAClB,OAAO,CAAC,KAAK,EAAE,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
var i,W,D0,Zb,F,H0,R0,y0,C0,X0,b0,v0,P0,j={},U0=[],Qb=/acit|ex(?:s|g|n|p|$)|rph|grid|ows|mnc|ntw|ine[ch]|zoo|^ord|itera/i,c=Array.isArray;function M(b,v){for(var g in v)b[g]=v[g];return b}function Y0(b){b&&b.parentNode&&b.parentNode.removeChild(b)}function a(b,v,g){var X,Q,$,Y={};for($ in v)$=="key"?X=v[$]:$=="ref"?Q=v[$]:Y[$]=v[$];if(arguments.length>2&&(Y.children=arguments.length>3?i.call(arguments,2):g),typeof b=="function"&&b.defaultProps!=null)for($ in b.defaultProps)Y[$]===void 0&&(Y[$]=b.defaultProps[$]);return o(b,Y,X,Q,null)}function o(b,v,g,X,Q){var $={type:b,props:v,key:g,ref:X,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:Q==null?++D0:Q,__i:-1,__u:0};return Q==null&&W.vnode!=null&&W.vnode($),$}function p(b){return b.children}function I(b,v){this.props=b,this.context=v}function k(b,v){if(v==null)return b.__?k(b.__,b.__i+1):null;for(var g;v<b.__k.length;v++)if((g=b.__k[v])!=null&&g.__e!=null)return g.__e;return typeof b.type=="function"?k(b):null}function _0(b){var v,g;if((b=b.__)!=null&&b.__c!=null){for(b.__e=b.__c.base=null,v=0;v<b.__k.length;v++)if((g=b.__k[v])!=null&&g.__e!=null){b.__e=b.__c.base=g.__e;break}return _0(b)}}function g0(b){(!b.__d&&(b.__d=!0)&&F.push(b)&&!s.__r++||H0!=W.debounceRendering)&&((H0=W.debounceRendering)||R0)(s)}function s(){for(var b,v,g,X,Q,$,Y,J=1;F.length;)F.length>J&&F.sort(y0),b=F.shift(),J=F.length,b.__d&&(g=void 0,X=void 0,Q=(X=(v=b).__v).__e,$=[],Y=[],v.__P&&((g=M({},X)).__v=X.__v+1,W.vnode&&W.vnode(g),Z0(v.__P,g,X,v.__n,v.__P.namespaceURI,32&X.__u?[Q]:null,$,Q==null?k(X):Q,!!(32&X.__u),Y),g.__v=X.__v,g.__.__k[g.__i]=g,L0($,g,Y),X.__e=X.__=null,g.__e!=Q&&_0(g)));s.__r=0}function T0(b,v,g,X,Q,$,Y,J,G,V,N){var q,O,K,H,y,d,B,z=X&&X.__k||U0,U=v.length;for(G=qb(g,v,z,G,U),q=0;q<U;q++)(K=g.__k[q])!=null&&(O=K.__i==-1?j:z[K.__i]||j,K.__i=q,d=Z0(b,K,O,Q,$,Y,J,G,V,N),H=K.__e,K.ref&&O.ref!=K.ref&&(O.ref&&Q0(O.ref,null,K),N.push(K.ref,K.__c||H,K)),y==null&&H!=null&&(y=H),(B=!!(4&K.__u))||O.__k===K.__k?G=M0(K,G,b,B):typeof K.type=="function"&&d!==void 0?G=d:H&&(G=H.nextSibling),K.__u&=-7);return g.__e=y,G}function qb(b,v,g,X,Q){var $,Y,J,G,V,N=g.length,q=N,O=0;for(b.__k=Array(Q),$=0;$<Q;$++)(Y=v[$])!=null&&typeof Y!="boolean"&&typeof Y!="function"?(typeof Y=="string"||typeof Y=="number"||typeof Y=="bigint"||Y.constructor==String?Y=b.__k[$]=o(null,Y,null,null,null):c(Y)?Y=b.__k[$]=o(p,{children:Y},null,null,null):Y.constructor===void 0&&Y.__b>0?Y=b.__k[$]=o(Y.type,Y.props,Y.key,Y.ref?Y.ref:null,Y.__v):b.__k[$]=Y,G=$+O,Y.__=b,Y.__b=b.__b+1,J=null,(V=Y.__i=Jb(Y,g,G,q))!=-1&&(q--,(J=g[V])&&(J.__u|=2)),J==null||J.__v==null?(V==-1&&(Q>N?O--:Q<N&&O++),typeof Y.type!="function"&&(Y.__u|=4)):V!=G&&(V==G-1?O--:V==G+1?O++:(V>G?O--:O++,Y.__u|=4))):b.__k[$]=null;if(q)for($=0;$<N;$++)(J=g[$])!=null&&(2&J.__u)==0&&(J.__e==X&&(X=k(J)),w0(J,J));return X}function M0(b,v,g,X){var Q,$;if(typeof b.type=="function"){for(Q=b.__k,$=0;Q&&$<Q.length;$++)Q[$]&&(Q[$].__=b,v=M0(Q[$],v,g,X));return v}b.__e!=v&&(X&&(v&&b.type&&!v.parentNode&&(v=k(b)),g.insertBefore(b.__e,v||null)),v=b.__e);do v=v&&v.nextSibling;while(v!=null&&v.nodeType==8);return v}function l(b,v){return v=v||[],b==null||typeof b=="boolean"||(c(b)?b.some(function(g){l(g,v)}):v.push(b)),v}function Jb(b,v,g,X){var Q,$,Y,J=b.key,G=b.type,V=v[g],N=V!=null&&(2&V.__u)==0;if(V===null&&J==null||N&&J==V.key&&G==V.type)return g;if(X>(N?1:0)){for(Q=g-1,$=g+1;Q>=0||$<v.length;)if((V=v[Y=Q>=0?Q--:$++])!=null&&(2&V.__u)==0&&J==V.key&&G==V.type)return Y}return-1}function E0(b,v,g){v[0]=="-"?b.setProperty(v,g==null?"":g):b[v]=g==null?"":typeof g!="number"||Qb.test(v)?g:g+"px"}function f(b,v,g,X,Q){var $,Y;b:if(v=="style")if(typeof g=="string")b.style.cssText=g;else{if(typeof X=="string"&&(b.style.cssText=X=""),X)for(v in X)g&&v in g||E0(b.style,v,"");if(g)for(v in g)X&&g[v]==X[v]||E0(b.style,v,g[v])}else if(v[0]=="o"&&v[1]=="n")$=v!=(v=v.replace(C0,"$1")),Y=v.toLowerCase(),v=Y in b||v=="onFocusOut"||v=="onFocusIn"?Y.slice(2):v.slice(2),b.l||(b.l={}),b.l[v+$]=g,g?X?g.u=X.u:(g.u=X0,b.addEventListener(v,$?v0:b0,$)):b.removeEventListener(v,$?v0:b0,$);else{if(Q=="http://www.w3.org/2000/svg")v=v.replace(/xlink(H|:h)/,"h").replace(/sName$/,"s");else if(v!="width"&&v!="height"&&v!="href"&&v!="list"&&v!="form"&&v!="tabIndex"&&v!="download"&&v!="rowSpan"&&v!="colSpan"&&v!="role"&&v!="popover"&&v in b)try{b[v]=g==null?"":g;break b}catch(J){}typeof g=="function"||(g==null||g===!1&&v[4]!="-"?b.removeAttribute(v):b.setAttribute(v,v=="popover"&&g==1?"":g))}}function d0(b){return function(v){if(this.l){var g=this.l[v.type+b];if(v.t==null)v.t=X0++;else if(v.t<g.u)return;return g(W.event?W.event(v):v)}}}function Z0(b,v,g,X,Q,$,Y,J,G,V){var N,q,O,K,H,y,d,B,z,U,_,A,E,B0,h,x,t,T=v.type;if(v.constructor!==void 0)return null;128&g.__u&&(G=!!(32&g.__u),$=[J=v.__e=g.__e]),(N=W.__b)&&N(v);b:if(typeof T=="function")try{if(B=v.props,z="prototype"in T&&T.prototype.render,U=(N=T.contextType)&&X[N.__c],_=N?U?U.props.value:N.__:X,g.__c?d=(q=v.__c=g.__c).__=q.__E:(z?v.__c=q=new T(B,_):(v.__c=q=new I(B,_),q.constructor=T,q.render=Gb),U&&U.sub(q),q.state||(q.state={}),q.__n=X,O=q.__d=!0,q.__h=[],q._sb=[]),z&&q.__s==null&&(q.__s=q.state),z&&T.getDerivedStateFromProps!=null&&(q.__s==q.state&&(q.__s=M({},q.__s)),M(q.__s,T.getDerivedStateFromProps(B,q.__s))),K=q.props,H=q.state,q.__v=v,O)z&&T.getDerivedStateFromProps==null&&q.componentWillMount!=null&&q.componentWillMount(),z&&q.componentDidMount!=null&&q.__h.push(q.componentDidMount);else{if(z&&T.getDerivedStateFromProps==null&&B!==K&&q.componentWillReceiveProps!=null&&q.componentWillReceiveProps(B,_),v.__v==g.__v||!q.__e&&q.shouldComponentUpdate!=null&&q.shouldComponentUpdate(B,q.__s,_)===!1){for(v.__v!=g.__v&&(q.props=B,q.state=q.__s,q.__d=!1),v.__e=g.__e,v.__k=g.__k,v.__k.some(function(S){S&&(S.__=v)}),A=0;A<q._sb.length;A++)q.__h.push(q._sb[A]);q._sb=[],q.__h.length&&Y.push(q);break b}q.componentWillUpdate!=null&&q.componentWillUpdate(B,q.__s,_),z&&q.componentDidUpdate!=null&&q.__h.push(function(){q.componentDidUpdate(K,H,y)})}if(q.context=_,q.props=B,q.__P=b,q.__e=!1,E=W.__r,B0=0,z){for(q.state=q.__s,q.__d=!1,E&&E(v),N=q.render(q.props,q.state,q.context),h=0;h<q._sb.length;h++)q.__h.push(q._sb[h]);q._sb=[]}else do q.__d=!1,E&&E(v),N=q.render(q.props,q.state,q.context),q.state=q.__s;while(q.__d&&++B0<25);q.state=q.__s,q.getChildContext!=null&&(X=M(M({},X),q.getChildContext())),z&&!O&&q.getSnapshotBeforeUpdate!=null&&(y=q.getSnapshotBeforeUpdate(K,H)),x=N,N!=null&&N.type===p&&N.key==null&&(x=F0(N.props.children)),J=T0(b,c(x)?x:[x],v,g,X,Q,$,Y,J,G,V),q.base=v.__e,v.__u&=-161,q.__h.length&&Y.push(q),d&&(q.__E=q.__=null)}catch(S){if(v.__v=null,G||$!=null)if(S.then){for(v.__u|=G?160:128;J&&J.nodeType==8&&J.nextSibling;)J=J.nextSibling;$[$.indexOf(J)]=null,v.__e=J}else{for(t=$.length;t--;)Y0($[t]);$0(v)}else v.__e=g.__e,v.__k=g.__k,S.then||$0(v);W.__e(S,v,g)}else $==null&&v.__v==g.__v?(v.__k=g.__k,v.__e=g.__e):J=v.__e=Vb(g.__e,v,g,X,Q,$,Y,G,V);return(N=W.diffed)&&N(v),128&v.__u?void 0:J}function $0(b){b&&b.__c&&(b.__c.__e=!0),b&&b.__k&&b.__k.forEach($0)}function L0(b,v,g){for(var X=0;X<g.length;X++)Q0(g[X],g[++X],g[++X]);W.__c&&W.__c(v,b),b.some(function(Q){try{b=Q.__h,Q.__h=[],b.some(function($){$.call(Q)})}catch($){W.__e($,Q.__v)}})}function F0(b){return typeof b!="object"||b==null||b.__b&&b.__b>0?b:c(b)?b.map(F0):M({},b)}function Vb(b,v,g,X,Q,$,Y,J,G){var V,N,q,O,K,H,y,d=g.props||j,B=v.props,z=v.type;if(z=="svg"?Q="http://www.w3.org/2000/svg":z=="math"?Q="http://www.w3.org/1998/Math/MathML":Q||(Q="http://www.w3.org/1999/xhtml"),$!=null){for(V=0;V<$.length;V++)if((K=$[V])&&"setAttribute"in K==!!z&&(z?K.localName==z:K.nodeType==3)){b=K,$[V]=null;break}}if(b==null){if(z==null)return document.createTextNode(B);b=document.createElementNS(Q,z,B.is&&B),J&&(W.__m&&W.__m(v,$),J=!1),$=null}if(z==null)d===B||J&&b.data==B||(b.data=B);else{if($=$&&i.call(b.childNodes),!J&&$!=null)for(d={},V=0;V<b.attributes.length;V++)d[(K=b.attributes[V]).name]=K.value;for(V in d)if(K=d[V],V=="children");else if(V=="dangerouslySetInnerHTML")q=K;else if(!(V in B)){if(V=="value"&&"defaultValue"in B||V=="checked"&&"defaultChecked"in B)continue;f(b,V,null,K,Q)}for(V in B)K=B[V],V=="children"?O=K:V=="dangerouslySetInnerHTML"?N=K:V=="value"?H=K:V=="checked"?y=K:J&&typeof K!="function"||d[V]===K||f(b,V,K,d[V],Q);if(N)J||q&&(N.__html==q.__html||N.__html==b.innerHTML)||(b.innerHTML=N.__html),v.__k=[];else if(q&&(b.innerHTML=""),T0(v.type=="template"?b.content:b,c(O)?O:[O],v,g,X,z=="foreignObject"?"http://www.w3.org/1999/xhtml":Q,$,Y,$?$[0]:g.__k&&k(g,0),J,G),$!=null)for(V=$.length;V--;)Y0($[V]);J||(V="value",z=="progress"&&H==null?b.removeAttribute("value"):H!=null&&(H!==b[V]||z=="progress"&&!H||z=="option"&&H!=d[V])&&f(b,V,H,d[V],Q),V="checked",y!=null&&y!=b[V]&&f(b,V,y,d[V],Q))}return b}function Q0(b,v,g){try{if(typeof b=="function"){var X=typeof b.__u=="function";X&&b.__u(),X&&v==null||(b.__u=b(v))}else b.current=v}catch(Q){W.__e(Q,g)}}function w0(b,v,g){var X,Q;if(W.unmount&&W.unmount(b),(X=b.ref)&&(X.current&&X.current!=b.__e||Q0(X,null,v)),(X=b.__c)!=null){if(X.componentWillUnmount)try{X.componentWillUnmount()}catch($){W.__e($,v)}X.base=X.__P=null}if(X=b.__k)for(Q=0;Q<X.length;Q++)X[Q]&&w0(X[Q],v,g||typeof b.type!="function");g||Y0(b.__e),b.__c=b.__=b.__e=void 0}function Gb(b,v,g){return this.constructor(b,g)}function S0(b,v,g){var X,Q,$,Y;v==document&&(v=document.documentElement),W.__&&W.__(b,v),Q=(X=typeof g=="function")?null:g&&g.__k||v.__k,$=[],Y=[],Z0(v,b=(!X&&g||v).__k=a(p,null,[b]),Q||j,j,v.namespaceURI,!X&&g?[g]:Q?null:v.firstChild?i.call(v.childNodes):null,$,!X&&g?g:Q?Q.__e:v.firstChild,X,Y),L0($,b,Y)}function I0(b,v,g){var X,Q,$,Y,J=M({},b.props);for($ in b.type&&b.type.defaultProps&&(Y=b.type.defaultProps),v)$=="key"?X=v[$]:$=="ref"?Q=v[$]:J[$]=v[$]===void 0&&Y!=null?Y[$]:v[$];return arguments.length>2&&(J.children=arguments.length>3?i.call(arguments,2):g),o(b.type,J,X||b.key,Q||b.ref,null)}function k0(b){function v(g){var X,Q;return this.getChildContext||(X=new Set,(Q={})[v.__c]=this,this.getChildContext=function(){return Q},this.componentWillUnmount=function(){X=null},this.shouldComponentUpdate=function($){this.props.value!=$.value&&X.forEach(function(Y){Y.__e=!0,g0(Y)})},this.sub=function($){X.add($);var Y=$.componentWillUnmount;$.componentWillUnmount=function(){X&&X.delete($),Y&&Y.call($)}}),g.children}return v.__c="__cC"+P0++,v.__=b,v.Provider=v.__l=(v.Consumer=function(g,X){return g.children(X)}).contextType=v,v}i=U0.slice,W={__e:function(b,v,g,X){for(var Q,$,Y;v=v.__;)if((Q=v.__c)&&!Q.__)try{if(($=Q.constructor)&&$.getDerivedStateFromError!=null&&(Q.setState($.getDerivedStateFromError(b)),Y=Q.__d),Q.componentDidCatch!=null&&(Q.componentDidCatch(b,X||{}),Y=Q.__d),Y)return Q.__E=Q}catch(J){b=J}throw b}},D0=0,Zb=function(b){return b!=null&&b.constructor===void 0},I.prototype.setState=function(b,v){var g;g=this.__s!=null&&this.__s!=this.state?this.__s:this.__s=M({},this.state),typeof b=="function"&&(b=b(M({},g),this.props)),b&&M(g,b),b!=null&&this.__v&&(v&&this._sb.push(v),g0(this))},I.prototype.forceUpdate=function(b){this.__v&&(this.__e=!0,b&&this.__h.push(b),g0(this))},I.prototype.render=p,F=[],R0=typeof Promise=="function"?Promise.prototype.then.bind(Promise.resolve()):setTimeout,y0=function(b,v){return b.__v.__b-v.__v.__b},s.__r=0,C0=/(PointerCapture)$|Capture$/i,X0=0,b0=d0(!1),v0=d0(!0),P0=0;var e,D,q0,p0,J0=0,f0=[],R=W,m0=R.__b,x0=R.__r,o0=R.diffed,j0=R.__c,i0=R.unmount,c0=R.__;function s0(b,v){R.__h&&R.__h(D,b,J0||v),J0=0;var g=D.__H||(D.__H={__:[],__h:[]});return b>=g.__.length&&g.__.push({}),g.__[b]}function C(b){return J0=1,Kb(a0,b)}function Kb(b,v,g){var X=s0(e++,2);if(X.t=b,!X.__c&&(X.__=[g?g(v):a0(void 0,v),function(J){var G=X.__N?X.__N[0]:X.__[0],V=X.t(G,J);G!==V&&(X.__N=[V,X.__[1]],X.__c.setState({}))}],X.__c=D,!D.__f)){var Q=function(J,G,V){if(!X.__c.__H)return!0;var N=X.__c.__H.__.filter(function(O){return!!O.__c});if(N.every(function(O){return!O.__N}))return!$||$.call(this,J,G,V);var q=X.__c.props!==J;return N.forEach(function(O){if(O.__N){var K=O.__[0];O.__=O.__N,O.__N=void 0,K!==O.__[0]&&(q=!0)}}),$&&$.call(this,J,G,V)||q};D.__f=!0;var{shouldComponentUpdate:$,componentWillUpdate:Y}=D;D.componentWillUpdate=function(J,G,V){if(this.__e){var N=$;$=void 0,Q(J,G,V),$=N}Y&&Y.call(this,J,G,V)},D.shouldComponentUpdate=Q}return X.__N||X.__}function m(b,v){var g=s0(e++,3);!R.__s&&Ab(g.__H,v)&&(g.__=b,g.u=v,D.__H.__h.push(g))}function Nb(){for(var b;b=f0.shift();)if(b.__P&&b.__H)try{b.__H.__h.forEach(r),b.__H.__h.forEach(V0),b.__H.__h=[]}catch(v){b.__H.__h=[],R.__e(v,b.__v)}}R.__b=function(b){D=null,m0&&m0(b)},R.__=function(b,v){b&&v.__k&&v.__k.__m&&(b.__m=v.__k.__m),c0&&c0(b,v)},R.__r=function(b){x0&&x0(b),e=0;var v=(D=b.__c).__H;v&&(q0===D?(v.__h=[],D.__h=[],v.__.forEach(function(g){g.__N&&(g.__=g.__N),g.u=g.__N=void 0})):(v.__h.forEach(r),v.__h.forEach(V0),v.__h=[],e=0)),q0=D},R.diffed=function(b){o0&&o0(b);var v=b.__c;v&&v.__H&&(v.__H.__h.length&&(f0.push(v)!==1&&p0===R.requestAnimationFrame||((p0=R.requestAnimationFrame)||Ob)(Nb)),v.__H.__.forEach(function(g){g.u&&(g.__H=g.u),g.u=void 0})),q0=D=null},R.__c=function(b,v){v.some(function(g){try{g.__h.forEach(r),g.__h=g.__h.filter(function(X){return!X.__||V0(X)})}catch(X){v.some(function(Q){Q.__h&&(Q.__h=[])}),v=[],R.__e(X,g.__v)}}),j0&&j0(b,v)},R.unmount=function(b){i0&&i0(b);var v,g=b.__c;g&&g.__H&&(g.__H.__.forEach(function(X){try{r(X)}catch(Q){v=Q}}),g.__H=void 0,v&&R.__e(v,g.__v))};var h0=typeof requestAnimationFrame=="function";function Ob(b){var v,g=function(){clearTimeout(X),h0&&cancelAnimationFrame(v),setTimeout(b)},X=setTimeout(g,35);h0&&(v=requestAnimationFrame(g))}function r(b){var v=D,g=b.__c;typeof g=="function"&&(b.__c=void 0,g()),D=v}function V0(b){var v=D;b.__c=b.__(),D=v}function Ab(b,v){return!b||b.length!==v.length||v.some(function(g,X){return g!==b[X]})}function a0(b,v){return typeof v=="function"?v(b):v}var zb={};function u(b,v){for(var g in v)b[g]=v[g];return b}function Wb(b,v,g){var X,Q=/(?:\?([^#]*))?(#.*)?$/,$=b.match(Q),Y={};if($&&$[1])for(var J=$[1].split("&"),G=0;G<J.length;G++){var V=J[G].split("=");Y[decodeURIComponent(V[0])]=decodeURIComponent(V.slice(1).join("="))}b=G0(b.replace(Q,"")),v=G0(v||"");for(var N=Math.max(b.length,v.length),q=0;q<N;q++)if(v[q]&&v[q].charAt(0)===":"){var O=v[q].replace(/(^:|[+*?]+$)/g,""),K=(v[q].match(/[+*?]+$/)||zb)[0]||"",H=~K.indexOf("+"),y=~K.indexOf("*"),d=b[q]||"";if(!d&&!y&&(K.indexOf("?")<0||H)){X=!1;break}if(Y[O]=decodeURIComponent(d),H||y){Y[O]=b.slice(q).map(decodeURIComponent).join("/");break}}else if(v[q]!==b[q]){X=!1;break}return(g.default===!0||X!==!1)&&Y}function Bb(b,v){return b.rank<v.rank?1:b.rank>v.rank?-1:b.index-v.index}function Hb(b,v){return b.index=v,b.rank=function(g){return g.props.default?0:G0(g.props.path).map(Eb).join("")}(b),b.props}function G0(b){return b.replace(/(^\/+|\/+$)/g,"").split("/")}function Eb(b){return b.charAt(0)==":"?1+"*+?".indexOf(b.charAt(b.length-1))||4:5}var db={},w=[],l0=[],P=null,e0={url:K0()},Db=k0(e0);function K0(){var b;return""+((b=P&&P.location?P.location:P&&P.getCurrentLocation?P.getCurrentLocation():typeof location<"u"?location:db).pathname||"")+(b.search||"")}function L(b,v){return v===void 0&&(v=!1),typeof b!="string"&&b.url&&(v=b.replace,b=b.url),function(g){for(var X=w.length;X--;)if(w[X].canRoute(g))return!0;return!1}(b)&&function(g,X){X===void 0&&(X="push"),P&&P[X]?P[X](g):typeof history<"u"&&history[X+"State"]&&history[X+"State"](null,null,g)}(b,v?"replace":"push"),u0(b)}function u0(b){for(var v=!1,g=0;g<w.length;g++)w[g].routeTo(b)&&(v=!0);return v}function Rb(b){if(b&&b.getAttribute){var v=b.getAttribute("href"),g=b.getAttribute("target");if(v&&v.match(/^\//g)&&(!g||g.match(/^_?self$/i)))return L(v)}}function yb(b){return b.stopImmediatePropagation&&b.stopImmediatePropagation(),b.stopPropagation&&b.stopPropagation(),b.preventDefault(),!1}function Cb(b){if(!(b.ctrlKey||b.metaKey||b.altKey||b.shiftKey||b.button)){var v=b.target;do if(v.localName==="a"&&v.getAttribute("href")){if(v.hasAttribute("data-native")||v.hasAttribute("native"))return;if(Rb(v))return yb(b)}while(v=v.parentNode)}}var r0=!1;function N0(b){b.history&&(P=b.history),this.state={url:b.url||K0()}}u(N0.prototype=new I,{shouldComponentUpdate:function(b){return b.static!==!0||b.url!==this.props.url||b.onChange!==this.props.onChange},canRoute:function(b){var v=l(this.props.children);return this.g(v,b)!==void 0},routeTo:function(b){this.setState({url:b});var v=this.canRoute(b);return this.p||this.forceUpdate(),v},componentWillMount:function(){this.p=!0},componentDidMount:function(){var b=this;r0||(r0=!0,P||addEventListener("popstate",function(){u0(K0())}),addEventListener("click",Cb)),w.push(this),P&&(this.u=P.listen(function(v){var g=v.location||v;b.routeTo(""+(g.pathname||"")+(g.search||""))})),this.p=!1},componentWillUnmount:function(){typeof this.u=="function"&&this.u(),w.splice(w.indexOf(this),1)},componentWillUpdate:function(){this.p=!0},componentDidUpdate:function(){this.p=!1},g:function(b,v){b=b.filter(Hb).sort(Bb);for(var g=0;g<b.length;g++){var X=b[g],Q=Wb(v,X.props.path,X.props);if(Q)return[X,Q]}},render:function(b,v){var g,X,Q=b.onChange,$=v.url,Y=this.c,J=this.g(l(b.children),$);if(J&&(X=I0(J[0],u(u({url:$,matches:g=J[1]},g),{key:void 0,ref:void 0}))),$!==(Y&&Y.url)){u(e0,Y=this.c={url:$,previous:Y&&Y.url,current:X,path:X?X.props.path:null,matches:g}),Y.router=this,Y.active=X?[X]:[];for(var G=l0.length;G--;)l0[G]({});typeof Q=="function"&&Q(Y)}return a(Db.Provider,{value:Y},X)}});var O0=function(b){return a(b.component,b)};var Pb=0;function Z(b,v,g,X,Q,$){v||(v={});var Y,J,G=v;if("ref"in G)for(J in G={},v)J=="ref"?Y=v[J]:G[J]=v[J];var V={type:b,props:G,key:g,ref:Y,__k:null,__:null,__b:0,__e:null,__c:null,constructor:void 0,__v:--Pb,__i:-1,__u:0,__source:Q,__self:$};if(typeof b=="function"&&(Y=b.defaultProps))for(J in Y)G[J]===void 0&&(G[J]=Y[J]);return W.vnode&&W.vnode(V),V}function t0({report:b}){let[v,g]=C(new Set(b.features.map(($)=>$.feature))),X=($)=>{let Y=new Set(v);if(Y.has($))Y.delete($);else Y.add($);g(Y)},Q=b.features.map(($)=>{let Y=new Map;for(let J of $.facets){let G=J.facet.source.file;if(!Y.has(G))Y.set(G,{covered:0,total:0});let V=Y.get(G);if(V.total++,J.covered)V.covered++}return{feature:$.feature,path:$.path,percentage:$.percentage,files:Array.from(Y.entries()).map(([J,G])=>({file:J,fileName:J.split("/").pop()||J,covered:G.covered,total:G.total,percentage:G.total>0?Math.round(G.covered/G.total*100):0}))}});return Z("aside",{class:"w-72 flex-shrink-0 border-r border-slate-700 bg-slate-800 flex flex-col",children:[Z("div",{class:"p-4 border-b border-slate-700",children:Z("h1",{class:"text-lg font-semibold flex items-center gap-2",children:[Z("span",{class:"text-blue-400",children:"\uD83D\uDC8E"}),"Facet Docs"]})}),Z("nav",{class:"flex-1 overflow-y-auto p-2",children:[Z("a",{href:"/",onClick:($)=>{$.preventDefault(),L("/")},class:"flex items-center justify-between px-3 py-2 rounded-md hover:bg-slate-700 cursor-pointer mb-3",children:[Z("div",{class:"flex items-center gap-2",children:[Z("span",{class:"text-slate-400",children:"\uD83D\uDCCA"}),Z("span",{class:"font-medium",children:"Dashboard"})]}),Z(n0,{percentage:b.summary.percentage})]}),Z("div",{class:"text-xs text-slate-500 uppercase tracking-wider px-3 mb-2",children:"Features"}),Q.map(($)=>Z("div",{class:"mb-1",children:[Z("div",{onClick:()=>X($.feature),class:"flex items-center justify-between px-3 py-2 rounded-md hover:bg-slate-700 cursor-pointer",children:[Z("div",{class:"flex items-center gap-2",children:[Z("span",{class:`text-xs transition-transform ${v.has($.feature)?"rotate-90":""}`,children:"▶"}),Z("span",{class:"text-slate-400",children:"\uD83D\uDCC1"}),Z("span",{class:"font-medium text-sm",children:$.feature})]}),Z(n0,{percentage:$.percentage,small:!0})]}),v.has($.feature)&&Z("div",{class:"ml-4 border-l border-slate-700",children:$.files.map((Y)=>Z("a",{href:`/doc/${$.feature}/${Y.fileName}`,onClick:(J)=>{J.preventDefault(),L(`/doc/${$.feature}/${Y.fileName}`)},class:"flex items-center justify-between px-3 py-1.5 rounded hover:bg-slate-700/50 cursor-pointer group",children:[Z("div",{class:"flex items-center gap-2",children:[Z("span",{class:"text-slate-500 group-hover:text-slate-400",children:"\uD83D\uDCC4"}),Z("span",{class:"text-sm text-slate-300 group-hover:text-slate-100",children:Y.fileName})]}),Z("span",{class:"text-xs text-slate-500",children:[Y.covered,"/",Y.total]})]},Y.file))})]},$.feature))]}),Z("div",{class:"p-3 border-t border-slate-700 text-xs text-slate-500",children:[Z("div",{class:"flex justify-between",children:[Z("span",{children:"Total Coverage"}),Z("span",{children:[b.summary.percentage,"%"]})]}),Z("div",{class:"flex justify-between mt-1",children:[Z("span",{children:"Facets"}),Z("span",{children:[b.summary.coveredFacets,"/",b.summary.totalFacets]})]})]})]})}function n0({percentage:b,small:v}){let g=b>=80?"bg-green-500/20 text-green-400":b>=50?"bg-yellow-500/20 text-yellow-400":"bg-red-500/20 text-red-400";return Z("span",{class:`${g} ${v?"text-xs px-1.5 py-0.5":"text-xs px-2 py-1"} rounded font-medium`,children:[b,"%"]})}function bb({report:b}){let{summary:v,byType:g,features:X,uncovered:Q}=b,$=A0(v.percentage);return Z("div",{class:"h-full overflow-y-auto p-6",children:[Z("div",{class:"grid grid-cols-4 gap-4 mb-6",children:[Z(n,{label:"Coverage",value:`${v.percentage}%`,colorClass:$,showBar:!0,barValue:v.percentage}),Z(n,{label:"Total Facets",value:v.totalFacets}),Z(n,{label:"Covered",value:v.coveredFacets,colorClass:"text-green-400"}),Z(n,{label:"Uncovered",value:v.uncoveredFacets,colorClass:"text-red-400"})]}),g.length>0&&Z("div",{class:"bg-slate-800 rounded-xl p-5 mb-6 border border-slate-700",children:[Z("h2",{class:"text-lg font-semibold mb-4",children:"Coverage by Type"}),Z("div",{class:"grid grid-cols-3 gap-4",children:g.map((Y)=>Z(Ub,{type:Y},Y.type))})]}),Z("div",{class:"bg-slate-800 rounded-xl p-5 mb-6 border border-slate-700",children:[Z("h2",{class:"text-lg font-semibold mb-4",children:"Features"}),Z("div",{class:"grid grid-cols-2 gap-4",children:X.map((Y)=>Z(_b,{feature:Y},Y.feature))})]}),Q.length>0&&Z("div",{class:"bg-slate-800 rounded-xl p-5 border border-slate-700",children:[Z("h2",{class:"text-lg font-semibold mb-4",children:["Uncovered Facets",Q.length>10&&Z("span",{class:"text-sm font-normal text-slate-400 ml-2",children:["(showing 10 of ",Q.length,")"]})]}),Z("div",{class:"space-y-2",children:Q.slice(0,10).map((Y)=>Z("div",{onClick:()=>L(`/facet/${encodeURIComponent(Y.id)}`),class:"p-3 bg-slate-900 rounded-lg border-l-2 border-red-500 hover:bg-slate-700 cursor-pointer",children:[Z("div",{class:"flex items-center justify-between",children:[Z("code",{class:"text-sm font-medium",children:Y.id}),Z("span",{class:"text-xs px-2 py-0.5 bg-slate-700 rounded capitalize",children:Y.type})]}),Z("div",{class:"text-xs text-slate-400 mt-1",children:[Y.source.file,"#",Y.source.section]})]},Y.id))})]})]})}function n({label:b,value:v,colorClass:g="text-white",showBar:X,barValue:Q}){return Z("div",{class:"bg-slate-800 rounded-xl p-4 border border-slate-700",children:[Z("div",{class:`text-3xl font-bold ${g}`,children:v}),Z("div",{class:"text-sm text-slate-400 mt-1",children:b}),X&&Q!==void 0&&Z("div",{class:"mt-2 h-1.5 bg-slate-700 rounded-full overflow-hidden",children:Z("div",{class:`h-full ${z0(Q)} transition-all`,style:{width:`${Q}%`}})})]})}function Ub({type:b}){let v=A0(b.percentage),g=z0(b.percentage);return Z("div",{class:"bg-slate-900 rounded-lg p-4",children:[Z("div",{class:"flex items-center justify-between mb-2",children:[Z("span",{class:"font-medium capitalize",children:b.type}),Z("span",{class:`text-sm font-bold ${v}`,children:[b.percentage,"%"]})]}),Z("div",{class:"h-1.5 bg-slate-700 rounded-full overflow-hidden mb-2",children:Z("div",{class:`h-full ${g}`,style:{width:`${b.percentage}%`}})}),Z("div",{class:"text-xs text-slate-400",children:[b.covered," / ",b.total," covered"]})]})}function _b({feature:b}){let v=A0(b.percentage),g=z0(b.percentage);return Z("div",{onClick:()=>L(`/feature/${encodeURIComponent(b.feature)}`),class:"bg-slate-900 rounded-lg p-4 hover:bg-slate-700 cursor-pointer transition-colors border border-transparent hover:border-blue-500",children:[Z("div",{class:"font-medium mb-2",children:b.feature}),Z("div",{class:"h-1.5 bg-slate-700 rounded-full overflow-hidden mb-2",children:Z("div",{class:`h-full ${g}`,style:{width:`${b.percentage}%`}})}),Z("div",{class:"flex items-center justify-between",children:[Z("span",{class:"text-xs text-slate-400",children:[b.coveredFacets,"/",b.totalFacets," facets"]}),Z("span",{class:`text-sm font-bold ${v}`,children:[b.percentage,"%"]})]})]})}function A0(b){if(b>=80)return"text-green-400";if(b>=50)return"text-yellow-400";return"text-red-400"}function z0(b){if(b>=80)return"bg-green-500";if(b>=50)return"bg-yellow-500";return"bg-red-500"}function vb({markdown:b,report:v,featurePath:g,sourceFile:X,onFacetClick:Q,selectedFacetId:$}){let Y=Tb(v,g,X),J=Mb(b,Y,$);return Z("div",{class:"markdown-content prose prose-invert prose-slate max-w-none",dangerouslySetInnerHTML:{__html:J},onClick:(G)=>{let N=G.target.closest("[data-facet-id]");if(N){let q=N.dataset.facetId;if(q&&Y[q]){let{fullId:O,coverage:K}=Y[q];Q(O,K.coveredBy)}else if(q){let K=v.features.find((H)=>H.path===g)?.facets.find((H)=>H.facet.id===q);if(K)Q(q,K.coveredBy)}}}})}function Tb(b,v,g){let X={},Q=b.features.find(($)=>$.path===v);if(!Q)return X;for(let $ of Q.facets)if($.facet.source.file===g){let Y=$.facet.id,J=Y.split(":").pop()||"";X[Y]={fullId:Y,coverage:$},X[J]={fullId:Y,coverage:$};let G=J.split("/").pop()||"";if(G&&!X[G])X[G]={fullId:Y,coverage:$};if($.facet.source.section){let V=$.facet.source.section;if(!X[V])X[V]={fullId:Y,coverage:$}}}return X}function Mb(b,v,g){let X=b;return X=Lb(X),X=X.replace(/<a href="#([^"]+)"><\/a>/g,(Q,$)=>W0($,v,g)),X=X.replace(/<!-- @facet:(\w+) -->/g,(Q,$)=>W0($,v,g)),X=X.replace(/<!-- @facet:(\w+) -->/g,(Q,$)=>W0($,v,g)),X}function W0(b,v,g){let X=v[b];if(!X)return`<span class="facet-chip unknown" data-facet-id="${b}" title="Unknown facet: ${b}">? ${b}</span>`;let{fullId:Q,coverage:$}=X,Y=$.coveredBy.length,J=$.covered,G=g===Q,V=J?"covered":"uncovered",N=G?"selected":"",q=J?"✓":"✗",O=Y===1?"1 test":`${Y} tests`;return`<span class="facet-chip ${V} ${N}" data-facet-id="${b}" title="${Q}">${q} ${O}</span>`}function Lb(b){let v=b;v=v.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">"),v=v.replace(/<!-- @facet:/g,"<!-- @facet:"),v=v.replace(/ -->/g," -->"),v=v.replace(/^###### (.+)$/gm,"<h6>$1</h6>"),v=v.replace(/^##### (.+)$/gm,"<h5>$1</h5>"),v=v.replace(/^#### (.+)$/gm,"<h4>$1</h4>"),v=v.replace(/^### (.+)$/gm,"<h3>$1</h3>"),v=v.replace(/^## (.+)$/gm,"<h2>$1</h2>"),v=v.replace(/^# (.+)$/gm,"<h1>$1</h1>"),v=v.replace(/\[([^\]]+)\]\(([^)]+)\)/g,'<a href="$2">$1</a>'),v=v.replace(/\[\]\(#([^)]+)\)/g,'<a href="#$1"></a>'),v=v.replace(/\*\*([^*]+)\*\*/g,"<strong>$1</strong>"),v=v.replace(/(?<!\*)\*([^*]+)\*(?!\*)/g,"<em>$1</em>"),v=v.replace(/`([^`]+)`/g,"<code>$1</code>"),v=v.replace(/```(\w*)\n([\s\S]*?)```/g,(Y,J,G)=>{let V=G.trim();return`<pre><code class="language-${J||"text"}">${V}</code></pre>`}),v=v.replace(/^---$/gm,"<hr>"),v=v.replace(/^\*\*\*$/gm,"<hr>"),v=v.replace(/^- (.+)$/gm,"<li>$1</li>"),v=v.replace(/^(\s*)- (.+)$/gm,'<li class="ml-4">$2</li>'),v=v.replace(/^\d+\. (.+)$/gm,"<li>$1</li>"),v=v.replace(/(<li[^>]*>.*<\/li>\n?)+/g,(Y)=>{let G=Y.includes("1.")?"ol":"ul";return`<${G} class="list-disc ml-6 my-2">${Y}</${G}>`});let g=v.split(`
|
|
2
|
+
`),X=[],Q=!1,$=[];for(let Y of g){let J=Y.trim();if(J.startsWith("<h")||J.startsWith("<ul")||J.startsWith("<ol")||J.startsWith("<li")||J.startsWith("<pre")||J.startsWith("<hr")||J.startsWith("</ul")||J.startsWith("</ol")||J.startsWith("</pre")||J===""){if(Q&&$.length>0)X.push(`<p>${$.join(" ")}</p>`),$=[],Q=!1;if(J)X.push(Y)}else Q=!0,$.push(J)}if($.length>0)X.push(`<p>${$.join(" ")}</p>`);return X.join(`
|
|
3
|
+
`)}function gb({report:b,feature:v,file:g}){let[X,Q]=C(""),[$,Y]=C(!0),[J,G]=C(null),[V,N]=C([]),[q,O]=C(null),K=b.features.find((A)=>A.feature===v),H=K?.path||`features/${v}`,y=`facets/${g}`,d=K?.facets.filter((A)=>A.facet.source.file===y)||[],B=d.filter((A)=>A.covered).length,z=d.length,U=z>0?Math.round(B/z*100):0;m(()=>{Y(!0);let A=`features/${v}/${y}`;fetch(`/api/markdown?path=${encodeURIComponent(A)}`).then((E)=>E.json()).then((E)=>{if(E.content)Q(E.content);else Q(`# Error
|
|
4
|
+
|
|
5
|
+
Could not load ${g}`);Y(!1)}).catch((E)=>{console.error("Failed to fetch markdown:",E),Q(`# Error
|
|
6
|
+
|
|
7
|
+
Failed to load document: ${E.message}`),Y(!1)})},[v,g,y]),m(()=>{if(V.length>0){let A=V[0];fetch(`/api/test-source?file=${encodeURIComponent(A.file)}&line=${A.line||1}`).then((E)=>E.json()).then((E)=>{if(E.code)O({code:E.code,startLine:E.startLine||1})}).catch((E)=>console.error("Failed to fetch test source:",E))}else O(null)},[V]);let _=(A,E)=>{G(A),N(E)};if($)return Z("div",{class:"flex h-full items-center justify-center",children:Z("div",{class:"text-slate-400",children:"Loading document..."})});return Z("div",{class:"flex h-full",children:[Z("div",{class:"flex-1 overflow-y-auto p-6 border-r border-slate-700",children:[Z("div",{class:"mb-6 pb-4 border-b border-slate-700",children:[Z("div",{class:"flex items-center gap-2 text-sm text-slate-400 mb-2",children:[Z("button",{onClick:()=>L("/"),class:"hover:text-slate-200 transition-colors",children:"Dashboard"}),Z("span",{children:"/"}),Z("span",{children:v}),Z("span",{children:"/"}),Z("span",{class:"text-slate-200",children:g})]}),Z("div",{class:"flex items-center justify-between",children:[Z("h1",{class:"text-2xl font-bold",children:g.replace(".md","")}),Z("div",{class:"flex items-center gap-3",children:[Z("span",{class:"text-sm text-slate-400",children:[B,"/",z," facets covered"]}),Z(Fb,{percentage:U})]})]})]}),Z(vb,{markdown:X,report:b,featurePath:H,sourceFile:y,onFacetClick:_,selectedFacetId:J||void 0}),Z("style",{children:`
|
|
8
|
+
.facet-chip {
|
|
9
|
+
display: inline-flex;
|
|
10
|
+
align-items: center;
|
|
11
|
+
gap: 0.25rem;
|
|
12
|
+
padding: 0.125rem 0.5rem;
|
|
13
|
+
margin: 0 0.25rem;
|
|
14
|
+
border-radius: 9999px;
|
|
15
|
+
font-size: 0.75rem;
|
|
16
|
+
font-weight: 500;
|
|
17
|
+
cursor: pointer;
|
|
18
|
+
transition: all 0.15s;
|
|
19
|
+
vertical-align: middle;
|
|
20
|
+
}
|
|
21
|
+
.facet-chip.covered {
|
|
22
|
+
background: rgba(34, 197, 94, 0.2);
|
|
23
|
+
color: rgb(74, 222, 128);
|
|
24
|
+
border: 1px solid rgba(34, 197, 94, 0.3);
|
|
25
|
+
}
|
|
26
|
+
.facet-chip.covered:hover {
|
|
27
|
+
background: rgba(34, 197, 94, 0.3);
|
|
28
|
+
}
|
|
29
|
+
.facet-chip.uncovered {
|
|
30
|
+
background: rgba(239, 68, 68, 0.2);
|
|
31
|
+
color: rgb(248, 113, 113);
|
|
32
|
+
border: 1px solid rgba(239, 68, 68, 0.3);
|
|
33
|
+
}
|
|
34
|
+
.facet-chip.uncovered:hover {
|
|
35
|
+
background: rgba(239, 68, 68, 0.3);
|
|
36
|
+
}
|
|
37
|
+
.facet-chip.unknown {
|
|
38
|
+
background: rgba(148, 163, 184, 0.2);
|
|
39
|
+
color: rgb(148, 163, 184);
|
|
40
|
+
border: 1px solid rgba(148, 163, 184, 0.3);
|
|
41
|
+
}
|
|
42
|
+
.facet-chip.selected {
|
|
43
|
+
ring: 2px;
|
|
44
|
+
ring-offset: 2px;
|
|
45
|
+
box-shadow: 0 0 0 2px rgb(59, 130, 246);
|
|
46
|
+
}
|
|
47
|
+
.markdown-content h1 { font-size: 1.875rem; font-weight: 700; margin: 1.5rem 0 1rem; }
|
|
48
|
+
.markdown-content h2 { font-size: 1.5rem; font-weight: 600; margin: 1.25rem 0 0.75rem; border-bottom: 1px solid rgb(51, 65, 85); padding-bottom: 0.5rem; }
|
|
49
|
+
.markdown-content h3 { font-size: 1.25rem; font-weight: 600; margin: 1rem 0 0.5rem; }
|
|
50
|
+
.markdown-content h4 { font-size: 1.125rem; font-weight: 600; margin: 0.75rem 0 0.5rem; }
|
|
51
|
+
.markdown-content p { margin: 0.75rem 0; line-height: 1.625; }
|
|
52
|
+
.markdown-content ul, .markdown-content ol { margin: 0.5rem 0; padding-left: 1.5rem; }
|
|
53
|
+
.markdown-content li { margin: 0.25rem 0; }
|
|
54
|
+
.markdown-content code { background: rgba(30, 41, 59, 0.8); padding: 0.125rem 0.375rem; border-radius: 0.25rem; font-size: 0.875em; }
|
|
55
|
+
.markdown-content pre { background: rgb(15, 23, 42); padding: 1rem; border-radius: 0.5rem; overflow-x: auto; margin: 1rem 0; }
|
|
56
|
+
.markdown-content pre code { background: transparent; padding: 0; }
|
|
57
|
+
.markdown-content strong { font-weight: 600; }
|
|
58
|
+
.markdown-content a:not(.facet-chip) { color: rgb(96, 165, 250); text-decoration: underline; }
|
|
59
|
+
.markdown-content hr { border-color: rgb(51, 65, 85); margin: 1.5rem 0; }
|
|
60
|
+
`})]}),Z("div",{class:"w-96 flex-shrink-0 bg-slate-800/50 overflow-y-auto",children:J?Z("div",{class:"p-4",children:[Z("div",{class:"mb-4",children:[Z("h2",{class:"text-lg font-semibold mb-1",children:"Tests"}),Z("p",{class:"text-sm text-slate-400",children:[V.length," test",V.length!==1?"s":""," covering this facet"]})]}),V.length===0?Z("div",{class:"text-center py-8 text-slate-500",children:[Z("div",{class:"text-4xl mb-2",children:"\uD83E\uDDEA"}),Z("p",{children:"No tests cover this facet"}),Z("p",{class:"text-sm mt-1",children:"Add tests to improve coverage"})]}):Z("div",{class:"space-y-3",children:V.map((A,E)=>Z("div",{class:"bg-slate-900 rounded-lg overflow-hidden",children:[Z("div",{class:"p-3 border-b border-slate-700",children:[Z("div",{class:"font-medium text-sm",children:A.title}),Z("div",{class:"text-xs text-slate-400 mt-1",children:[A.file,":",A.line]})]}),q&&E===0&&Z("pre",{class:"p-3 text-xs overflow-x-auto bg-slate-950",children:Z("code",{children:q.code})})]},E))})]}):Z("div",{class:"p-4",children:[Z("h2",{class:"text-lg font-semibold mb-4",children:"Document Coverage"}),Z("div",{class:"space-y-2",children:d.map((A)=>Z("button",{onClick:()=>_(A.facet.id,A.coveredBy),class:`w-full text-left p-3 rounded-lg transition-colors ${A.covered?"bg-green-500/10 hover:bg-green-500/20 border border-green-500/20":"bg-red-500/10 hover:bg-red-500/20 border border-red-500/20"}`,children:[Z("div",{class:"flex items-center justify-between",children:[Z("span",{class:"text-sm font-medium",children:A.facet.title||A.facet.id.split(":").pop()}),Z("span",{class:`text-xs ${A.covered?"text-green-400":"text-red-400"}`,children:A.covered?`✓ ${A.coveredBy.length}`:"✗ 0"})]}),A.facet.isSubFacet&&Z("div",{class:"text-xs text-slate-500 mt-1",children:"Sub-facet"})]},A.facet.id))})]})})]})}function Fb({percentage:b}){let v=b>=80?"bg-green-500/20 text-green-400 border-green-500/30":b>=50?"bg-yellow-500/20 text-yellow-400 border-yellow-500/30":"bg-red-500/20 text-red-400 border-red-500/30";return Z("span",{class:`${v} text-sm px-2 py-1 rounded border font-medium`,children:[b,"%"]})}function $b({status:b}){if(!b)return null;let v={connected:{text:"Connected",bgClass:"bg-green-500/20 border-green-500/50",textClass:"text-green-400"},updating:{text:"Updating...",bgClass:"bg-yellow-500/20 border-yellow-500/50",textClass:"text-yellow-400"},error:{text:"Connection error",bgClass:"bg-red-500/20 border-red-500/50",textClass:"text-red-400"}},{text:g,bgClass:X,textClass:Q}=v[b];return Z("div",{class:`fixed bottom-4 right-4 px-4 py-2 rounded-lg border ${X} flex items-center gap-2`,children:[b==="updating"&&Z("div",{class:"w-4 h-4 border-2 border-yellow-500/30 border-t-yellow-500 rounded-full animate-spin"}),Z("span",{class:`text-sm ${Q}`,children:g})]})}function Xb(){let[b,v]=C(null),[g,X]=C(!0),[Q,$]=C(null);m(()=>{Y(),J()},[]);async function Y(){try{let V=await(await fetch("/api/coverage")).json();v(V),X(!1)}catch(G){console.error("Failed to fetch coverage:",G),X(!1)}}function J(){let G=window.location.protocol==="https:"?"wss:":"ws:",V=new WebSocket(`${G}//${window.location.host}/ws`);V.onopen=()=>{$("connected"),setTimeout(()=>$(null),2000)},V.onmessage=(N)=>{let q=JSON.parse(N.data);if(q.type==="file-change")$("updating");else if(q.type==="coverage-update")Y(),$("connected"),setTimeout(()=>$(null),2000);else if(q.type==="client-reload")console.log("Client bundle updated, reloading..."),window.location.reload()},V.onclose=()=>{setTimeout(J,1000)}}if(g)return Z("div",{class:"flex h-screen items-center justify-center bg-slate-900 text-white",children:Z("div",{class:"text-center",children:[Z("div",{class:"mb-4 h-8 w-8 animate-spin rounded-full border-2 border-slate-600 border-t-blue-500 mx-auto"}),Z("p",{class:"text-slate-400",children:"Loading coverage data..."})]})});if(!b)return Z("div",{class:"flex h-screen items-center justify-center bg-slate-900 text-white",children:Z("p",{class:"text-red-400",children:"Failed to load coverage data"})});return Z("div",{class:"flex h-screen bg-slate-900 text-slate-100",children:[Z(t0,{report:b}),Z("main",{class:"flex-1 overflow-hidden",children:Z(N0,{children:[Z(O0,{path:"/",component:()=>Z(bb,{report:b})}),Z(O0,{path:"/doc/:feature/:file",component:({feature:G,file:V})=>Z(gb,{report:b,feature:decodeURIComponent(G),file:decodeURIComponent(V)})})]})}),Z($b,{status:Q})]})}var Yb=document.getElementById("app");if(Yb)S0(Z(Xb,{}),Yb);
|
|
@@ -9,10 +9,11 @@ export declare class FacetParser {
|
|
|
9
9
|
static slugify(title: string): string;
|
|
10
10
|
/**
|
|
11
11
|
* Parse sub-facet markers from content lines.
|
|
12
|
-
* Supports
|
|
13
|
-
* 1.
|
|
14
|
-
* 2.
|
|
15
|
-
*
|
|
12
|
+
* Supports two patterns:
|
|
13
|
+
* 1. Comment markers: `<!-- @facet:sub-id -->`
|
|
14
|
+
* 2. Empty link anchors: `[](#sub-id)` - renders invisibly in markdown
|
|
15
|
+
*
|
|
16
|
+
* Skips content inside fenced code blocks and inline backticks.
|
|
16
17
|
*
|
|
17
18
|
* @param lines - Array of content lines
|
|
18
19
|
* @param startLineNumber - The 1-indexed line number of the first line in the array
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FacetParser.d.ts","sourceRoot":"","sources":["../../src/core/FacetParser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEnF;;GAEG;AACH,qBAAa,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAUrC
|
|
1
|
+
{"version":3,"file":"FacetParser.d.ts","sourceRoot":"","sources":["../../src/core/FacetParser.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,eAAe,EAAE,cAAc,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAEnF;;GAEG;AACH,qBAAa,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM;IAUrC;;;;;;;;;;;OAWG;IACH,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,MAAM,EAAE,EAAE,eAAe,EAAE,MAAM,GAAG,cAAc,EAAE;IAuDjF;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc;IAS3C;;OAEG;IACH,YAAY,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,GAAE,MAAW,GAAG,cAAc;IA+EpE;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,cAAc,EAAE,IAAI,EAAE,MAAM,GAAG,eAAe,GAAG,SAAS;IAI9E;;OAEG;IACH,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO;IAS7D;;OAEG;IACH,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE;IAK3C;;OAEG;IACH,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI/C;;;;;OAKG;IACH,MAAM,CAAC,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM;IAQ9C;;OAEG;IACH,MAAM,CAAC,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,MAAM;IAKrE;;;;;;;;OAQG;IACH,MAAM,CAAC,2BAA2B,CAChC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,GAClB,MAAM;IAqBT;;;;;;;OAOG;IACH,MAAM,CAAC,kBAAkB,CAAC,aAAa,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,MAAM;IAI5E;;;;;OAKG;IACH,MAAM,CAAC,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAM7C;;;;;OAKG;IACH,MAAM,CAAC,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;CAS3D"}
|
package/dist/core/FacetParser.js
CHANGED
|
@@ -21,10 +21,11 @@ class FacetParser {
|
|
|
21
21
|
}
|
|
22
22
|
/**
|
|
23
23
|
* Parse sub-facet markers from content lines.
|
|
24
|
-
* Supports
|
|
25
|
-
* 1.
|
|
26
|
-
* 2.
|
|
27
|
-
*
|
|
24
|
+
* Supports two patterns:
|
|
25
|
+
* 1. Comment markers: `<!-- @facet:sub-id -->`
|
|
26
|
+
* 2. Empty link anchors: `[](#sub-id)` - renders invisibly in markdown
|
|
27
|
+
*
|
|
28
|
+
* Skips content inside fenced code blocks and inline backticks.
|
|
28
29
|
*
|
|
29
30
|
* @param lines - Array of content lines
|
|
30
31
|
* @param startLineNumber - The 1-indexed line number of the first line in the array
|
|
@@ -32,32 +33,22 @@ class FacetParser {
|
|
|
32
33
|
*/
|
|
33
34
|
static parseSubFacets(lines, startLineNumber) {
|
|
34
35
|
const subFacets = [];
|
|
35
|
-
// Pattern for list item with {#id}: matches "1. **text** {#id} - rest", "- text {#id}", "* text {#id}"
|
|
36
|
-
// The {#id} can appear anywhere in the list item, followed by optional content
|
|
37
|
-
// Captures: list marker, text before {#id}, the ID, and optional rest
|
|
38
|
-
const listItemPattern = /^(\s*(?:[-*]|\d+\.)\s+)(.+?)\s*\{#([a-z0-9-]+)\}(.*)$/;
|
|
39
36
|
// Pattern for comment markers: <!-- @facet:id --> or <!-- @facet: id -->
|
|
40
37
|
const commentPattern = /<!--\s*@facet:\s*([a-z0-9-]+)\s*-->/g;
|
|
41
38
|
// Pattern for empty link anchors: [](#id) or []( #id ) with optional whitespace
|
|
42
39
|
const emptyLinkPattern = /\[\]\(\s*#([a-z0-9-]+)\s*\)/g;
|
|
40
|
+
// Track if we're inside a fenced code block
|
|
41
|
+
let inCodeBlock = false;
|
|
43
42
|
for (let i = 0; i < lines.length; i++) {
|
|
44
43
|
const line = lines[i];
|
|
45
44
|
const lineNumber = startLineNumber + i;
|
|
46
|
-
// Check for
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
// Clean up any trailing punctuation
|
|
54
|
-
title = title.replace(/[:\s-]+$/, '').trim();
|
|
55
|
-
subFacets.push({
|
|
56
|
-
id: listMatch[3],
|
|
57
|
-
title: title,
|
|
58
|
-
line: lineNumber,
|
|
59
|
-
type: 'list-item',
|
|
60
|
-
});
|
|
45
|
+
// Check for fenced code block markers (``` or ~~~)
|
|
46
|
+
if (line.trim().startsWith('```') || line.trim().startsWith('~~~')) {
|
|
47
|
+
inCodeBlock = !inCodeBlock;
|
|
48
|
+
continue;
|
|
49
|
+
}
|
|
50
|
+
// Skip lines inside code blocks
|
|
51
|
+
if (inCodeBlock) {
|
|
61
52
|
continue;
|
|
62
53
|
}
|
|
63
54
|
// Check for comment markers (can have multiple per line)
|
|
@@ -70,9 +61,11 @@ class FacetParser {
|
|
|
70
61
|
});
|
|
71
62
|
}
|
|
72
63
|
commentPattern.lastIndex = 0;
|
|
73
|
-
// Check for empty link anchors
|
|
64
|
+
// Check for empty link anchors, but skip those inside backticks
|
|
65
|
+
// Remove backticked content before matching
|
|
66
|
+
const lineWithoutBackticks = line.replace(/`[^`]+`/g, '');
|
|
74
67
|
let linkMatch;
|
|
75
|
-
while ((linkMatch = emptyLinkPattern.exec(
|
|
68
|
+
while ((linkMatch = emptyLinkPattern.exec(lineWithoutBackticks)) !== null) {
|
|
76
69
|
subFacets.push({
|
|
77
70
|
id: linkMatch[1],
|
|
78
71
|
line: lineNumber,
|
|
@@ -99,18 +92,31 @@ class FacetParser {
|
|
|
99
92
|
parseContent(content, filePath = '') {
|
|
100
93
|
const lines = content.split('\n');
|
|
101
94
|
const sections = [];
|
|
95
|
+
// Pattern for standalone explicit ID anchor: [](#id) on its own line
|
|
96
|
+
const explicitIdPattern = /^\s*\[\]\(\s*#([a-z0-9-]+)\s*\)\s*$/;
|
|
102
97
|
// First pass: find all headings
|
|
103
|
-
// Supports explicit anchor syntax: ## Heading {#custom-id}
|
|
104
98
|
const headings = [];
|
|
105
99
|
for (let i = 0; i < lines.length; i++) {
|
|
106
100
|
const line = lines[i];
|
|
107
|
-
// Match heading
|
|
108
|
-
const match = line.match(/^(#{1,6})\s+(.+?)
|
|
101
|
+
// Match heading
|
|
102
|
+
const match = line.match(/^(#{1,6})\s+(.+?)\s*$/);
|
|
109
103
|
if (match) {
|
|
104
|
+
// Check if the next non-empty line is an explicit ID anchor
|
|
105
|
+
let explicitId;
|
|
106
|
+
for (let j = i + 1; j < lines.length; j++) {
|
|
107
|
+
const nextLine = lines[j];
|
|
108
|
+
if (nextLine.trim() === '')
|
|
109
|
+
continue; // Skip empty lines
|
|
110
|
+
const idMatch = nextLine.match(explicitIdPattern);
|
|
111
|
+
if (idMatch) {
|
|
112
|
+
explicitId = idMatch[1];
|
|
113
|
+
}
|
|
114
|
+
break; // Only check the first non-empty line after heading
|
|
115
|
+
}
|
|
110
116
|
headings.push({
|
|
111
117
|
level: match[1].length,
|
|
112
118
|
title: match[2].trim(),
|
|
113
|
-
explicitId
|
|
119
|
+
explicitId,
|
|
114
120
|
line: i + 1, // 1-indexed
|
|
115
121
|
});
|
|
116
122
|
}
|
|
@@ -126,10 +132,16 @@ class FacetParser {
|
|
|
126
132
|
const sectionContent = contentLines.join('\n').trim();
|
|
127
133
|
// Parse sub-facets from section content
|
|
128
134
|
// Content starts at line after heading (startLine is the heading itself)
|
|
129
|
-
|
|
135
|
+
let subFacets = FacetParser.parseSubFacets(contentLines, startLine + 1);
|
|
136
|
+
// Use explicit ID if provided, otherwise generate from title
|
|
137
|
+
const slug = heading.explicitId || FacetParser.slugify(heading.title);
|
|
138
|
+
// If heading has explicit ID, filter it out from sub-facets (it was used for heading slug)
|
|
139
|
+
if (heading.explicitId) {
|
|
140
|
+
subFacets = subFacets.filter(sf => sf.id !== heading.explicitId);
|
|
141
|
+
}
|
|
130
142
|
sections.push({
|
|
131
143
|
title: heading.title,
|
|
132
|
-
slug
|
|
144
|
+
slug,
|
|
133
145
|
level: heading.level,
|
|
134
146
|
startLine,
|
|
135
147
|
endLine,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"FacetParser.js","sourceRoot":"","sources":["../../src/core/FacetParser.ts"],"names":[],"mappings":";;;AAAA,2BAA8C;AAC9C,+BAAyC;AAGzC;;GAEG;AACH,MAAa,WAAW;IACtB;;OAEG;IACH,MAAM,CAAC,OAAO,CAAC,KAAa;QAC1B,OAAO,KAAK;aACT,WAAW,EAAE;aACb,IAAI,EAAE;aACN,OAAO,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,4BAA4B;aACrD,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,8BAA8B;aACnD,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,uCAAuC;aAC3D,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC,kCAAkC;IAC9D,CAAC;IAED
|
|
1
|
+
{"version":3,"file":"FacetParser.js","sourceRoot":"","sources":["../../src/core/FacetParser.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"}
|