mirror of
https://github.com/pbakaus/impeccable.git
synced 2026-09-18 00:56:30 +03:00
Fix: vendor static-HTML parsers so skill installs detect fully (#434)
Skill and plugin copies of the detector had no htmlparser2/css-select/css-tree/domutils, so HTML scans silently fell back to regex and exited 0. Bundle those parsers into the engine tree and exit 1 if the fallback still fires. AI assistance: Cursor Grok 4.6 implemented this change. Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
committed by
Paul Bakaus
co-authored by
Cursor
parent
5a7e2837d2
commit
f4f16e3802
@@ -0,0 +1,46 @@
|
||||
#!/usr/bin/env node
|
||||
|
||||
/**
|
||||
* Generates cli/engine/vendor/static-html-parsers.mjs
|
||||
* by bundling htmlparser2, css-select, css-tree, and domutils for skill/plugin installs.
|
||||
*
|
||||
* Run: node scripts/build-static-html-parsers.js
|
||||
*/
|
||||
|
||||
import fs from 'fs';
|
||||
import path from 'path';
|
||||
import { fileURLToPath } from 'url';
|
||||
import { spawnSync } from 'node:child_process';
|
||||
|
||||
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
||||
const ROOT = path.resolve(__dirname, '..');
|
||||
|
||||
const ENTRY = path.join(__dirname, 'lib/static-html-parsers.entry.mjs');
|
||||
const OUT_DIR = path.join(ROOT, 'cli/engine/vendor');
|
||||
const OUTPUT = path.join(OUT_DIR, 'static-html-parsers.mjs');
|
||||
|
||||
fs.mkdirSync(OUT_DIR, { recursive: true });
|
||||
|
||||
const result = spawnSync(
|
||||
'bun',
|
||||
['build', ENTRY, '--outfile', OUTPUT, '--target', 'node', '--format', 'esm'],
|
||||
{ cwd: ROOT, encoding: 'utf8' },
|
||||
);
|
||||
|
||||
if (result.status !== 0) {
|
||||
process.stderr.write(result.stderr || result.stdout || 'bun build failed\n');
|
||||
process.exit(result.status ?? 1);
|
||||
}
|
||||
|
||||
const bundled = fs.readFileSync(OUTPUT, 'utf8');
|
||||
const output = `/**
|
||||
* GENERATED -- do not edit. Source: scripts/lib/static-html-parsers.entry.mjs
|
||||
* Rebuild: node scripts/build-static-html-parsers.js
|
||||
*
|
||||
* Bundles htmlparser2, css-select, css-tree, and domutils for skill/plugin installs.
|
||||
* Third-party licenses: see NOTICE.md.
|
||||
*/
|
||||
${bundled}`;
|
||||
|
||||
fs.writeFileSync(OUTPUT, output);
|
||||
console.log(`Generated ${path.relative(ROOT, OUTPUT)} (${(output.length / 1024).toFixed(1)} KB)`);
|
||||
@@ -0,0 +1,6 @@
|
||||
export * as htmlparser2 from 'htmlparser2';
|
||||
export * as cssSelect from 'css-select';
|
||||
export * as domutils from 'domutils';
|
||||
import parse from 'css-tree/parser';
|
||||
import generate from 'css-tree/generator';
|
||||
export const csstree = { parse, generate };
|
||||
@@ -25,7 +25,7 @@ export const SUITES = {
|
||||
description: 'Build, provider transforms, CLI helpers, context, and storage unit tests.',
|
||||
triggers: [
|
||||
...COMMON_INFRA_PATTERNS,
|
||||
/^scripts\/(?!benchmark-detector|build-browser-detector|build-extension)/,
|
||||
/^scripts\/(?!benchmark-detector|build-browser-detector|build-static-html-parsers|build-extension)/,
|
||||
/^skill\/(SKILL\.src\.md|agents\/|reference\/|scripts\/(cleanup-deprecated|comp-diff|comp-spec|build-phase|font-match|data\/font-index|concept-seed|generate-image|context|context-signals|critique-storage|design-parser|doctor|hook|impeccable-paths|is-generated|lib\/(artifact-schema|png|raster|image-metrics|font-fingerprint|font-index|hero-checks|composition-catalog|concept-catalog|provider|staleness|staleness-deep|staleness-notice|surface-briefs|target-slug|template-extensions)|pin|surface-brief))/,
|
||||
/^README(\.npm)?\.md$/,
|
||||
/^cli\/bin\//,
|
||||
@@ -95,7 +95,7 @@ export const SUITES = {
|
||||
...COMMON_INFRA_PATTERNS,
|
||||
/^cli\/engine\//,
|
||||
/^extension\/(background|content|detector|devtools|popup|manifest\.json)/,
|
||||
/^scripts\/(benchmark-detector|build-browser-detector|build-extension)\.js$/,
|
||||
/^scripts\/(benchmark-detector|build-browser-detector|build-static-html-parsers|build-extension)\.js$/,
|
||||
/^site\/(pages\/detector|public\/antipattern|data\/anti-patterns-catalog\.js)/,
|
||||
/^tests\/fixtures\/antipatterns/,
|
||||
],
|
||||
@@ -119,6 +119,7 @@ export const SUITES = {
|
||||
'tests/detect-cli-design-contamination.test.mjs',
|
||||
'tests/detect-cli-design-monorepo.test.mjs',
|
||||
'tests/detect-cli-stdin-dispatch.test.mjs',
|
||||
'tests/detect-static-html-skill-install.test.mjs',
|
||||
],
|
||||
},
|
||||
],
|
||||
|
||||
Reference in New Issue
Block a user