dev-workflows
Advanced tools
| export interface ConvertedRule { | ||
| id: string; | ||
| scope: string; | ||
| severity: 'error'; | ||
| content: string; | ||
| tags: string[]; | ||
| source: string; | ||
| } | ||
| export interface ConvertResult { | ||
| name: string; | ||
| description: string; | ||
| version: string; | ||
| scope: string; | ||
| tags: string[]; | ||
| rules: ConvertedRule[]; | ||
| } | ||
| export declare function convert(markdown: string, category: string, name: string): ConvertResult; | ||
| //# sourceMappingURL=converter.d.ts.map |
| {"version":3,"file":"converter.d.ts","sourceRoot":"","sources":["../../src/core/converter.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,aAAa;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,KAAK,EAAE,aAAa,EAAE,CAAC;CACxB;AAqHD,wBAAgB,OAAO,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,aAAa,CA2BvF"} |
| import { parse as parseYaml } from 'yaml'; | ||
| import { isValidScope } from './schema.js'; | ||
| function parseFrontmatter(markdown) { | ||
| const fmRegex = /^---\n([\s\S]*?)\n---\n?([\s\S]*)$/; | ||
| const match = fmRegex.exec(markdown); | ||
| if (!match?.[1]) { | ||
| throw new Error('Invalid rule file: missing YAML frontmatter'); | ||
| } | ||
| const raw = parseYaml(match[1]); | ||
| if (!raw || typeof raw !== 'object') { | ||
| throw new Error('Invalid rule file: frontmatter is not an object'); | ||
| } | ||
| const fm = raw; | ||
| const name = typeof fm['name'] === 'string' ? fm['name'] : ''; | ||
| const description = typeof fm['description'] === 'string' ? fm['description'] : ''; | ||
| const version = typeof fm['version'] === 'string' ? fm['version'] : '0.1.0'; | ||
| const scope = typeof fm['scope'] === 'string' ? fm['scope'] : 'conventions'; | ||
| const tags = Array.isArray(fm['tags']) | ||
| ? fm['tags'].filter((t) => typeof t === 'string') | ||
| : []; | ||
| if (!name) { | ||
| throw new Error('Invalid rule file: missing "name" in frontmatter'); | ||
| } | ||
| if (!description) { | ||
| throw new Error('Invalid rule file: missing "description" in frontmatter'); | ||
| } | ||
| if (!isValidScope(scope)) { | ||
| throw new Error(`Invalid rule file: invalid scope "${scope}"`); | ||
| } | ||
| return { | ||
| frontmatter: { name, description, version, scope, tags }, | ||
| body: match[2] ?? '', | ||
| }; | ||
| } | ||
| function toKebabCase(text) { | ||
| return text | ||
| .toLowerCase() | ||
| .replace(/[^a-z0-9\s-]/g, '') | ||
| .replace(/\s+/g, '-') | ||
| .replace(/-+/g, '-') | ||
| .replace(/^-|-$/g, ''); | ||
| } | ||
| function parseBullets(body) { | ||
| const lines = body.split('\n'); | ||
| const bullets = []; | ||
| let currentHeading = null; | ||
| let headingIndex = 0; | ||
| let currentBullet = null; | ||
| function flushBullet() { | ||
| if (currentBullet !== null) { | ||
| bullets.push({ | ||
| heading: currentHeading, | ||
| content: currentBullet.trimEnd(), | ||
| index: headingIndex++, | ||
| }); | ||
| currentBullet = null; | ||
| } | ||
| } | ||
| for (const line of lines) { | ||
| if (line.startsWith('## ')) { | ||
| flushBullet(); | ||
| currentHeading = toKebabCase(line.slice(3).trim()); | ||
| headingIndex = 0; | ||
| continue; | ||
| } | ||
| if (line.startsWith('- ')) { | ||
| flushBullet(); | ||
| currentBullet = line.slice(2); | ||
| continue; | ||
| } | ||
| // Indented continuation (2+ spaces) of a bullet | ||
| if (currentBullet !== null && line.length > 0 && /^\s{2,}/.test(line)) { | ||
| currentBullet += '\n' + line.trimStart(); | ||
| continue; | ||
| } | ||
| // Empty line — might be between bullets, keep accumulating | ||
| if (currentBullet !== null && line.trim() === '') { | ||
| continue; | ||
| } | ||
| // Non-bullet, non-heading content — flush if we had a bullet | ||
| if (currentBullet !== null && line.trim() !== '') { | ||
| flushBullet(); | ||
| } | ||
| } | ||
| flushBullet(); | ||
| return bullets; | ||
| } | ||
| export function convert(markdown, category, name) { | ||
| const { frontmatter, body } = parseFrontmatter(markdown); | ||
| const bullets = parseBullets(body); | ||
| const source = `${category}/${name}`; | ||
| const rules = bullets.map((bullet) => { | ||
| const headingPart = bullet.heading ? `-${bullet.heading}` : ''; | ||
| const id = `pulled-${category}-${name}${headingPart}-${String(bullet.index)}`; | ||
| return { | ||
| id, | ||
| scope: frontmatter.scope, | ||
| severity: 'error', | ||
| content: bullet.content, | ||
| tags: [...frontmatter.tags], | ||
| source, | ||
| }; | ||
| }); | ||
| return { | ||
| name: frontmatter.name, | ||
| description: frontmatter.description, | ||
| version: frontmatter.version, | ||
| scope: frontmatter.scope, | ||
| tags: frontmatter.tags, | ||
| rules, | ||
| }; | ||
| } | ||
| //# sourceMappingURL=converter.js.map |
| {"version":3,"file":"converter.js","sourceRoot":"","sources":["../../src/core/converter.ts"],"names":[],"mappings":"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"} |
| interface CacheEntry<T> { | ||
| data: T; | ||
| timestamp: number; | ||
| } | ||
| type CacheStore = Record<string, CacheEntry<unknown>>; | ||
| export declare function get<T>(_cwd: string, key: string, store: CacheStore): T | null; | ||
| export declare function getFromDisk<T>(cwd: string, key: string): Promise<T | null>; | ||
| export declare function set<T>(cwd: string, key: string, value: T): Promise<void>; | ||
| export {}; | ||
| //# sourceMappingURL=cache.d.ts.map |
| {"version":3,"file":"cache.d.ts","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAKA,UAAU,UAAU,CAAC,CAAC;IACpB,IAAI,EAAE,CAAC,CAAC;IACR,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,KAAK,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC;AAyBtD,wBAAgB,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,CAAC,GAAG,IAAI,CAQ7E;AAED,wBAAsB,WAAW,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAGhF;AAED,wBAAsB,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAI9E"} |
| import { readFile, writeFile, mkdir } from 'node:fs/promises'; | ||
| import { join, dirname } from 'node:path'; | ||
| const TTL_MS = 3_600_000; // 1 hour | ||
| function getCachePath(cwd) { | ||
| return join(cwd, '.dwf', '.cache', 'registry.json'); | ||
| } | ||
| async function readStore(cwd) { | ||
| try { | ||
| const raw = await readFile(getCachePath(cwd), 'utf-8'); | ||
| const parsed = JSON.parse(raw); | ||
| if (parsed && typeof parsed === 'object' && !Array.isArray(parsed)) { | ||
| return parsed; | ||
| } | ||
| return {}; | ||
| } | ||
| catch { | ||
| return {}; | ||
| } | ||
| } | ||
| async function writeStore(cwd, store) { | ||
| const cachePath = getCachePath(cwd); | ||
| await mkdir(dirname(cachePath), { recursive: true }); | ||
| await writeFile(cachePath, JSON.stringify(store, null, 2), 'utf-8'); | ||
| } | ||
| export function get(_cwd, key, store) { | ||
| const entry = store[key]; | ||
| if (!entry) | ||
| return null; | ||
| const age = Date.now() - entry.timestamp; | ||
| if (age > TTL_MS) | ||
| return null; | ||
| return entry.data; | ||
| } | ||
| export async function getFromDisk(cwd, key) { | ||
| const store = await readStore(cwd); | ||
| return get(cwd, key, store); | ||
| } | ||
| export async function set(cwd, key, value) { | ||
| const store = await readStore(cwd); | ||
| store[key] = { data: value, timestamp: Date.now() }; | ||
| await writeStore(cwd, store); | ||
| } | ||
| //# sourceMappingURL=cache.js.map |
| {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/utils/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,MAAM,GAAG,SAAS,CAAC,CAAC,SAAS;AASnC,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,QAAQ,EAAE,eAAe,CAAC,CAAC;AACtD,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,GAAW;IAClC,IAAI,CAAC;QACH,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,YAAY,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,MAAM,GAAY,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxC,IAAI,MAAM,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE,CAAC;YACnE,OAAO,MAAoB,CAAC;QAC9B,CAAC;QACD,OAAO,EAAE,CAAC;IACZ,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,KAAiB;IACtD,MAAM,SAAS,GAAG,YAAY,CAAC,GAAG,CAAC,CAAC;IACpC,MAAM,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACrD,MAAM,SAAS,CAAC,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;AACtE,CAAC;AAED,MAAM,UAAU,GAAG,CAAI,IAAY,EAAE,GAAW,EAAE,KAAiB;IACjE,MAAM,KAAK,GAAG,KAAK,CAAC,GAAG,CAA8B,CAAC;IACtD,IAAI,CAAC,KAAK;QAAE,OAAO,IAAI,CAAC;IAExB,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,CAAC,SAAS,CAAC;IACzC,IAAI,GAAG,GAAG,MAAM;QAAE,OAAO,IAAI,CAAC;IAE9B,OAAO,KAAK,CAAC,IAAI,CAAC;AACpB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAI,GAAW,EAAE,GAAW;IAC3D,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;IACnC,OAAO,GAAG,CAAI,GAAG,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAI,GAAW,EAAE,GAAW,EAAE,KAAQ;IAC7D,MAAM,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;IACnC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE,EAAE,CAAC;IACpD,MAAM,UAAU,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;AAC/B,CAAC"} |
| export declare class GitHubError extends Error { | ||
| readonly statusCode: number; | ||
| constructor(message: string, statusCode: number); | ||
| } | ||
| export declare function fetchRawContent(path: string): Promise<string>; | ||
| export interface DirectoryEntry { | ||
| name: string; | ||
| type: 'file' | 'dir'; | ||
| } | ||
| export declare function listDirectory(path?: string): Promise<DirectoryEntry[]>; | ||
| //# sourceMappingURL=github.d.ts.map |
| {"version":3,"file":"github.d.ts","sourceRoot":"","sources":["../../src/utils/github.ts"],"names":[],"mappings":"AAIA,qBAAa,WAAY,SAAQ,KAAK;aAGlB,UAAU,EAAE,MAAM;gBADlC,OAAO,EAAE,MAAM,EACC,UAAU,EAAE,MAAM;CAKrC;AAeD,wBAAsB,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgBnE;AAOD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,GAAG,KAAK,CAAC;CACtB;AAED,wBAAsB,aAAa,CAAC,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAmC5E"} |
| const BRANCH = 'main'; | ||
| const RAW_BASE = `https://raw.githubusercontent.com/gpolanco/dev-workflows/${BRANCH}/content/rules`; | ||
| const API_BASE = 'https://api.github.com/repos/gpolanco/dev-workflows/contents/content/rules'; | ||
| export class GitHubError extends Error { | ||
| statusCode; | ||
| constructor(message, statusCode) { | ||
| super(message); | ||
| this.statusCode = statusCode; | ||
| this.name = 'GitHubError'; | ||
| } | ||
| } | ||
| function handleResponseError(status, path) { | ||
| if (status === 404) { | ||
| throw new GitHubError(`Rule not found: ${path}`, 404); | ||
| } | ||
| if (status === 403) { | ||
| throw new GitHubError('GitHub API rate limit exceeded. Try again later or set a GITHUB_TOKEN environment variable.', 403); | ||
| } | ||
| throw new GitHubError(`GitHub request failed (HTTP ${String(status)})`, status); | ||
| } | ||
| export async function fetchRawContent(path) { | ||
| const url = `${RAW_BASE}/${path}.md`; | ||
| let response; | ||
| try { | ||
| response = await fetch(url); | ||
| } | ||
| catch (err) { | ||
| const msg = err instanceof Error ? err.message : String(err); | ||
| throw new GitHubError(`Network error fetching rule: ${msg}`, 0); | ||
| } | ||
| if (!response.ok) { | ||
| handleResponseError(response.status, path); | ||
| } | ||
| return response.text(); | ||
| } | ||
| export async function listDirectory(path) { | ||
| const segments = [API_BASE]; | ||
| if (path) | ||
| segments.push(path); | ||
| const base = segments.join('/'); | ||
| const url = `${base}?ref=${BRANCH}`; | ||
| const headers = { | ||
| Accept: 'application/vnd.github.v3+json', | ||
| }; | ||
| const token = process.env['GITHUB_TOKEN']; | ||
| if (token) { | ||
| headers['Authorization'] = `Bearer ${token}`; | ||
| } | ||
| let response; | ||
| try { | ||
| response = await fetch(url, { headers }); | ||
| } | ||
| catch (err) { | ||
| const msg = err instanceof Error ? err.message : String(err); | ||
| throw new GitHubError(`Network error listing directory: ${msg}`, 0); | ||
| } | ||
| if (!response.ok) { | ||
| handleResponseError(response.status, path ?? 'rules'); | ||
| } | ||
| const data = (await response.json()); | ||
| return data | ||
| .filter((entry) => entry.type === 'file' || entry.type === 'dir') | ||
| .map((entry) => ({ | ||
| name: entry.name.replace(/\.md$/, ''), | ||
| type: entry.type === 'dir' ? 'dir' : 'file', | ||
| })); | ||
| } | ||
| //# sourceMappingURL=github.js.map |
| {"version":3,"file":"github.js","sourceRoot":"","sources":["../../src/utils/github.ts"],"names":[],"mappings":"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"} |
@@ -9,3 +9,9 @@ export interface Rule { | ||
| sourceBlock?: string; | ||
| source?: string; | ||
| } | ||
| export interface PulledEntry { | ||
| path: string; | ||
| version: string; | ||
| pulled_at: string; | ||
| } | ||
| export interface ProjectConfig { | ||
@@ -20,2 +26,3 @@ version: string; | ||
| blocks: string[]; | ||
| pulled: PulledEntry[]; | ||
| } | ||
@@ -22,0 +29,0 @@ export interface Bridge { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bridges/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpE"} | ||
| {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/bridges/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,IAAI;IACnB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE;QACP,IAAI,EAAE,MAAM,CAAC;QACb,WAAW,CAAC,EAAE,MAAM,CAAC;KACtB,CAAC;IACF,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,GAAG,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE,WAAW,EAAE,CAAC;CACvB;AAED,MAAM,WAAW,MAAM;IACrB,EAAE,EAAE,MAAM,CAAC;IACX,WAAW,EAAE,MAAM,EAAE,CAAC;IACtB,WAAW,EAAE,OAAO,CAAC;IACrB,OAAO,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE,MAAM,EAAE,aAAa,GAAG,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACpE"} |
| import type { Command } from 'commander'; | ||
| import { convert } from '../core/converter.js'; | ||
| import type { PulledEntry } from '../bridges/types.js'; | ||
| export declare const BACK_VALUE = "__back__"; | ||
| export declare function pluralRules(count: number): string; | ||
| export interface AddOptions { | ||
| list?: boolean; | ||
| noCompile?: boolean; | ||
| force?: boolean; | ||
| dryRun?: boolean; | ||
| } | ||
| export declare function validateInput(input: string): { | ||
| category: string; | ||
| name: string; | ||
| } | null; | ||
| interface CachedRegistry { | ||
| categories: Array<{ | ||
| name: string; | ||
| rules: Array<{ | ||
| name: string; | ||
| description: string; | ||
| }>; | ||
| }>; | ||
| } | ||
| export declare function fetchRegistry(cwd: string): Promise<CachedRegistry | null>; | ||
| export declare function generateYamlOutput(category: string, name: string, result: ReturnType<typeof convert>, pulledAt: string): string; | ||
| export declare function updateConfig(cwd: string, entry: PulledEntry): Promise<void>; | ||
| export declare function registerAddCommand(program: Command): void; | ||
| export {}; | ||
| //# sourceMappingURL=add.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAUzC,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAiGD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAQzD"} | ||
| {"version":3,"file":"add.d.ts","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKzC,OAAO,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AAM/C,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAIvD,eAAO,MAAM,UAAU,aAAa,CAAC;AAErC,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAEjD;AAED,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,wBAAgB,aAAa,CAAC,KAAK,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAUtF;AAED,UAAU,cAAc;IACtB,UAAU,EAAE,KAAK,CAAC;QAChB,IAAI,EAAE,MAAM,CAAC;QACb,KAAK,EAAE,KAAK,CAAC;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,WAAW,EAAE,MAAM,CAAA;SAAE,CAAC,CAAC;KACrD,CAAC,CAAC;CACJ;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,GAAG,IAAI,CAAC,CAoD/E;AAuCD,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,UAAU,CAAC,OAAO,OAAO,CAAC,EAClC,QAAQ,EAAE,MAAM,GACf,MAAM,CA6BR;AAED,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAgBjF;AAuRD,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAUzD"} |
+356
-57
| import { join } from 'node:path'; | ||
| import { readFile, writeFile, mkdir } from 'node:fs/promises'; | ||
| import chalk from 'chalk'; | ||
| import { select } from '@inquirer/prompts'; | ||
| import { loadAllBlocks, loadBlock } from '../blocks/registry.js'; | ||
| import { installBlock } from '../blocks/installer.js'; | ||
| import { stringify, parse } from 'yaml'; | ||
| import { select, checkbox, confirm } from '@inquirer/prompts'; | ||
| import { fetchRawContent, listDirectory } from '../utils/github.js'; | ||
| import { convert } from '../core/converter.js'; | ||
| import { fileExists } from '../utils/fs.js'; | ||
| import { readConfig } from '../core/parser.js'; | ||
| import * as cache from '../utils/cache.js'; | ||
| import * as ui from '../utils/ui.js'; | ||
| import { ICONS } from '../utils/ui.js'; | ||
| async function listAvailableBlocks() { | ||
| const blocks = await loadAllBlocks(); | ||
| if (blocks.length === 0) { | ||
| ui.warn('No blocks available'); | ||
| const KEBAB_RE = /^[a-z0-9]+(?:-[a-z0-9]+)*$/; | ||
| export const BACK_VALUE = '__back__'; | ||
| export function pluralRules(count) { | ||
| return count === 1 ? '1 rule' : `${String(count)} rules`; | ||
| } | ||
| export function validateInput(input) { | ||
| const parts = input.split('/'); | ||
| if (parts.length !== 2) | ||
| return null; | ||
| const category = parts[0]; | ||
| const name = parts[1]; | ||
| if (!category || !name) | ||
| return null; | ||
| if (!KEBAB_RE.test(category) || !KEBAB_RE.test(name)) | ||
| return null; | ||
| return { category, name }; | ||
| } | ||
| export async function fetchRegistry(cwd) { | ||
| const cached = await cache.getFromDisk(cwd, 'registry'); | ||
| if (cached) | ||
| return cached; | ||
| ui.info('Fetching available rules from GitHub...'); | ||
| ui.newline(); | ||
| let topLevel; | ||
| try { | ||
| topLevel = await listDirectory(); | ||
| } | ||
| catch (err) { | ||
| const msg = err instanceof Error ? err.message : String(err); | ||
| ui.error(`Could not fetch rule registry: ${msg}`); | ||
| return null; | ||
| } | ||
| const categories = []; | ||
| for (const entry of topLevel) { | ||
| if (entry.type !== 'dir') | ||
| continue; | ||
| try { | ||
| const files = await listDirectory(entry.name); | ||
| const rules = []; | ||
| for (const file of files) { | ||
| if (file.type !== 'file') | ||
| continue; | ||
| try { | ||
| const content = await fetchRawContent(`${entry.name}/${file.name}`); | ||
| const fmMatch = /^---\n([\s\S]*?)\n---/.exec(content); | ||
| if (fmMatch?.[1]) { | ||
| const fm = parse(fmMatch[1]); | ||
| const description = typeof fm['description'] === 'string' ? fm['description'] : ''; | ||
| rules.push({ name: file.name, description }); | ||
| } | ||
| } | ||
| catch { | ||
| rules.push({ name: file.name, description: '' }); | ||
| } | ||
| } | ||
| if (rules.length > 0) { | ||
| categories.push({ name: entry.name, rules }); | ||
| } | ||
| } | ||
| catch { | ||
| // Skip categories that fail to list | ||
| } | ||
| } | ||
| const registry = { categories }; | ||
| await cache.set(cwd, 'registry', registry); | ||
| return registry; | ||
| } | ||
| async function runList(categoryFilter) { | ||
| const cwd = process.cwd(); | ||
| const registry = await fetchRegistry(cwd); | ||
| if (!registry) { | ||
| process.exitCode = 1; | ||
| return; | ||
| } | ||
| // Try to load installed blocks from config | ||
| let installedBlocks = []; | ||
| const displayCategories = categoryFilter | ||
| ? registry.categories.filter((c) => c.name === categoryFilter) | ||
| : registry.categories; | ||
| if (displayCategories.length === 0) { | ||
| if (categoryFilter) { | ||
| ui.warn(`Category "${categoryFilter}" not found`); | ||
| } | ||
| else { | ||
| ui.warn('No rules available'); | ||
| } | ||
| return; | ||
| } | ||
| ui.header('Available rules'); | ||
| ui.newline(); | ||
| for (const category of displayCategories) { | ||
| console.log(` ${chalk.cyan(`${category.name}/`)}`); | ||
| for (const rule of category.rules) { | ||
| const desc = rule.description ? chalk.dim(` ${rule.description}`) : ''; | ||
| console.log(` ${chalk.white(rule.name.padEnd(20))}${desc}`); | ||
| } | ||
| ui.newline(); | ||
| } | ||
| console.log(` ${chalk.dim(`Add a rule: devw add <category>/<rule>`)}`); | ||
| } | ||
| export function generateYamlOutput(category, name, result, pulledAt) { | ||
| const source = `${category}/${name}`; | ||
| const githubUrl = `https://github.com/gpolanco/dev-workflows/blob/main/content/rules/${source}.md`; | ||
| const header = [ | ||
| `# Pulled from: ${source} (v${result.version})`, | ||
| `# Source: ${githubUrl}`, | ||
| `# Do not edit manually — changes will be overwritten on next pull.`, | ||
| '', | ||
| ].join('\n'); | ||
| const doc = { | ||
| source: { | ||
| registry: 'dev-workflows', | ||
| path: source, | ||
| version: result.version, | ||
| pulled_at: pulledAt, | ||
| }, | ||
| scope: result.scope, | ||
| rules: result.rules.map((r) => ({ | ||
| id: r.id, | ||
| severity: r.severity, | ||
| content: r.content, | ||
| tags: r.tags, | ||
| source: r.source, | ||
| })), | ||
| }; | ||
| return header + stringify(doc, { lineWidth: 0 }); | ||
| } | ||
| export async function updateConfig(cwd, entry) { | ||
| const configPath = join(cwd, '.dwf', 'config.yml'); | ||
| const raw = await readFile(configPath, 'utf-8'); | ||
| const doc = parse(raw); | ||
| const pulled = Array.isArray(doc['pulled']) ? doc['pulled'] : []; | ||
| const existingIdx = pulled.findIndex((p) => p.path === entry.path); | ||
| if (existingIdx >= 0) { | ||
| pulled[existingIdx] = entry; | ||
| } | ||
| else { | ||
| pulled.push(entry); | ||
| } | ||
| doc['pulled'] = pulled; | ||
| await writeFile(configPath, stringify(doc, { lineWidth: 0 }), 'utf-8'); | ||
| } | ||
| async function downloadAndInstall(cwd, category, name, options) { | ||
| const source = `${category}/${name}`; | ||
| const fileName = `pulled-${category}-${name}.yml`; | ||
| const filePath = join(cwd, '.dwf', 'rules', fileName); | ||
| ui.info(`Downloading ${source}...`); | ||
| let markdown; | ||
| try { | ||
| const config = await readConfig(process.cwd()); | ||
| installedBlocks = config.blocks; | ||
| markdown = await fetchRawContent(source); | ||
| } | ||
| catch { | ||
| // No config — that's fine, just don't show installed indicator | ||
| catch (err) { | ||
| const msg = err instanceof Error ? err.message : String(err); | ||
| ui.error(msg); | ||
| process.exitCode = 1; | ||
| return false; | ||
| } | ||
| ui.header('Available blocks'); | ||
| ui.newline(); | ||
| for (const block of blocks) { | ||
| const installed = installedBlocks.includes(block.id) ? chalk.green(` ${ICONS.success}`) + chalk.dim(' installed') : ''; | ||
| console.log(`${chalk.cyan(` ${block.id}`)} ${chalk.dim(ICONS.dash)} ${block.description}${installed}`); | ||
| console.log(` ${chalk.dim(`${String(block.rules.length)} rules ${ICONS.dot} v${block.version}`)}`); | ||
| let result; | ||
| try { | ||
| result = convert(markdown, category, name); | ||
| } | ||
| catch (err) { | ||
| const msg = err instanceof Error ? err.message : String(err); | ||
| ui.error(`Conversion failed: ${msg}`); | ||
| process.exitCode = 1; | ||
| return false; | ||
| } | ||
| if (await fileExists(filePath)) { | ||
| try { | ||
| const existingRaw = await readFile(filePath, 'utf-8'); | ||
| const existingDoc = parse(existingRaw); | ||
| const existingSource = existingDoc['source']; | ||
| const existingVersion = typeof existingSource?.['version'] === 'string' ? existingSource['version'] : ''; | ||
| if (existingVersion === result.version) { | ||
| ui.success(`Already up to date (${source} v${result.version})`); | ||
| return false; | ||
| } | ||
| if (!options.force) { | ||
| ui.newline(); | ||
| ui.info(`${source} already exists locally (v${existingVersion} ${ICONS.arrow} v${result.version})`); | ||
| try { | ||
| const shouldOverwrite = await confirm({ | ||
| message: 'Overwrite with new version?', | ||
| default: true, | ||
| }); | ||
| if (!shouldOverwrite) { | ||
| ui.error('Cancelled'); | ||
| return false; | ||
| } | ||
| } | ||
| catch { | ||
| ui.error('Cancelled'); | ||
| return false; | ||
| } | ||
| } | ||
| } | ||
| catch { | ||
| // Can't parse existing file — overwrite | ||
| } | ||
| } | ||
| const pulledAt = new Date().toISOString(); | ||
| const yamlOutput = generateYamlOutput(category, name, result, pulledAt); | ||
| if (options.dryRun) { | ||
| ui.newline(); | ||
| ui.header('Dry run — would write:'); | ||
| ui.newline(); | ||
| console.log(chalk.dim(` ${fileName}`)); | ||
| ui.newline(); | ||
| console.log(yamlOutput); | ||
| return false; | ||
| } | ||
| await mkdir(join(cwd, '.dwf', 'rules'), { recursive: true }); | ||
| await writeFile(filePath, yamlOutput, 'utf-8'); | ||
| const entry = { | ||
| path: source, | ||
| version: result.version, | ||
| pulled_at: pulledAt, | ||
| }; | ||
| await updateConfig(cwd, entry); | ||
| ui.success(`Added ${source} (${pluralRules(result.rules.length)})`); | ||
| return true; | ||
| } | ||
| async function selectBlock(installedBlocks) { | ||
| const blocks = await loadAllBlocks(); | ||
| if (blocks.length === 0) { | ||
| ui.warn('No blocks available'); | ||
| return undefined; | ||
| async function runInteractive(cwd, options) { | ||
| const registry = await fetchRegistry(cwd); | ||
| if (!registry) { | ||
| process.exitCode = 1; | ||
| return; | ||
| } | ||
| const available = blocks.filter((b) => !installedBlocks.includes(b.id)); | ||
| if (available.length === 0) { | ||
| ui.success('All blocks already installed'); | ||
| return undefined; | ||
| if (registry.categories.length === 0) { | ||
| ui.warn('No rules available'); | ||
| return; | ||
| } | ||
| let installedPaths; | ||
| try { | ||
| return await select({ | ||
| message: 'Which block to install?', | ||
| choices: blocks.map((b) => { | ||
| const installed = installedBlocks.includes(b.id); | ||
| return { | ||
| name: installed ? `${b.id} ${ICONS.success} installed` : `${b.id} ${ICONS.dash} ${b.description}`, | ||
| value: b.id, | ||
| disabled: installed, | ||
| }; | ||
| }), | ||
| const config = await readConfig(cwd); | ||
| installedPaths = new Set(config.pulled.map((p) => p.path)); | ||
| } | ||
| catch { | ||
| installedPaths = new Set(); | ||
| } | ||
| const allSelected = []; | ||
| const processedCategories = new Set(); | ||
| try { | ||
| for (;;) { | ||
| const availableCategories = registry.categories.filter((c) => !processedCategories.has(c.name)); | ||
| if (availableCategories.length === 0) | ||
| break; | ||
| const selectedCategoryName = await select({ | ||
| message: 'Choose a category', | ||
| choices: availableCategories.map((c) => { | ||
| const allInstalled = c.rules.every((r) => installedPaths.has(`${c.name}/${r.name}`)); | ||
| const label = `${c.name} (${pluralRules(c.rules.length)})`; | ||
| return { | ||
| name: allInstalled ? `${label} ${chalk.dim('(all installed)')}` : label, | ||
| value: c.name, | ||
| }; | ||
| }), | ||
| }); | ||
| const category = registry.categories.find((c) => c.name === selectedCategoryName); | ||
| if (!category) | ||
| break; | ||
| const selected = await checkbox({ | ||
| message: 'Select rules to add', | ||
| choices: [ | ||
| { name: '\u2190 Back to categories', value: BACK_VALUE }, | ||
| ...category.rules.map((r) => { | ||
| const path = `${category.name}/${r.name}`; | ||
| const installed = installedPaths.has(path); | ||
| const desc = r.description ? ` ${ICONS.dash} ${r.description}` : ''; | ||
| const suffix = installed ? chalk.dim(' (already installed)') : ''; | ||
| return { | ||
| name: `${r.name}${desc}${suffix}`, | ||
| value: r.name, | ||
| }; | ||
| }), | ||
| ], | ||
| }); | ||
| const realRules = selected.filter((v) => v !== BACK_VALUE); | ||
| if (realRules.length === 0) { | ||
| if (selected.includes(BACK_VALUE)) | ||
| continue; | ||
| ui.warn('No rules selected'); | ||
| continue; | ||
| } | ||
| for (const ruleName of realRules) { | ||
| const ruleInfo = category.rules.find((r) => r.name === ruleName); | ||
| allSelected.push({ | ||
| category: category.name, | ||
| name: ruleName, | ||
| description: ruleInfo?.description ?? '', | ||
| }); | ||
| } | ||
| processedCategories.add(category.name); | ||
| const remaining = registry.categories.filter((c) => !processedCategories.has(c.name)); | ||
| if (remaining.length === 0) | ||
| break; | ||
| const addMore = await confirm({ | ||
| message: 'Add rules from another category?', | ||
| default: true, | ||
| }); | ||
| if (!addMore) | ||
| break; | ||
| } | ||
| } | ||
| catch { | ||
| ui.error('Cancelled'); | ||
| return; | ||
| } | ||
| if (allSelected.length === 0) | ||
| return; | ||
| ui.newline(); | ||
| ui.header('Rules to install:'); | ||
| for (const rule of allSelected) { | ||
| const desc = rule.description ? chalk.dim(` ${ICONS.dash} ${rule.description}`) : ''; | ||
| console.log(` ${rule.category}/${rule.name}${desc}`); | ||
| } | ||
| ui.newline(); | ||
| try { | ||
| const shouldProceed = await confirm({ | ||
| message: `Install ${pluralRules(allSelected.length)}?`, | ||
| default: true, | ||
| }); | ||
| if (!shouldProceed) { | ||
| ui.error('Cancelled'); | ||
| return; | ||
| } | ||
| } | ||
| catch { | ||
| return undefined; | ||
| ui.error('Cancelled'); | ||
| return; | ||
| } | ||
| let anyAdded = false; | ||
| for (const rule of allSelected) { | ||
| const added = await downloadAndInstall(cwd, rule.category, rule.name, options); | ||
| if (added) | ||
| anyAdded = true; | ||
| } | ||
| if (anyAdded && !options.noCompile) { | ||
| const { runCompileFromAdd } = await import('./compile.js'); | ||
| await runCompileFromAdd(); | ||
| } | ||
| } | ||
| async function runAdd(blockId, options) { | ||
| async function runAdd(ruleArg, options) { | ||
| if (options.list) { | ||
| await listAvailableBlocks(); | ||
| await runList(ruleArg); | ||
| return; | ||
@@ -73,19 +364,25 @@ } | ||
| } | ||
| if (!blockId) { | ||
| const config = await readConfig(cwd); | ||
| const selected = await selectBlock(config.blocks); | ||
| if (!selected) | ||
| if (!ruleArg) { | ||
| if (!process.stdout.isTTY || !process.stdin.isTTY) { | ||
| ui.error('No rule specified', 'Usage: devw add <category>/<rule>'); | ||
| process.exitCode = 1; | ||
| return; | ||
| blockId = selected; | ||
| } | ||
| await runInteractive(cwd, options); | ||
| return; | ||
| } | ||
| const block = await loadBlock(blockId); | ||
| if (!block) { | ||
| ui.error(`Block "${blockId}" not found`, 'Run devw add --list to see available blocks'); | ||
| if (!ruleArg.includes('/')) { | ||
| ui.error('Block format is no longer supported', 'Use: devw add <category>/<rule>. Run devw add --list to browse.'); | ||
| process.exitCode = 1; | ||
| return; | ||
| } | ||
| const rulesAdded = await installBlock(cwd, block); | ||
| ui.success(`Added ${block.id} (${String(rulesAdded)} rules)`); | ||
| if (!options.noCompile) { | ||
| // Dynamic import to avoid circular dependency | ||
| const parsed = validateInput(ruleArg); | ||
| if (!parsed) { | ||
| ui.error(`Invalid rule path "${ruleArg}"`, 'Format: <category>/<rule> — both must be kebab-case (e.g., typescript/strict)'); | ||
| process.exitCode = 1; | ||
| return; | ||
| } | ||
| const { category, name } = parsed; | ||
| const added = await downloadAndInstall(cwd, category, name, options); | ||
| if (added && !options.noCompile) { | ||
| const { runCompileFromAdd } = await import('./compile.js'); | ||
@@ -98,8 +395,10 @@ await runCompileFromAdd(); | ||
| .command('add') | ||
| .argument('[block]', 'Block ID to install') | ||
| .description('Install a prebuilt rule block') | ||
| .option('--list', 'List all available blocks') | ||
| .argument('[rule]', 'Rule path: <category>/<rule>') | ||
| .description('Add rules from the dev-workflows registry') | ||
| .option('--list', 'List available rules') | ||
| .option('--no-compile', 'Skip auto-compile after adding') | ||
| .action((blockId, options) => runAdd(blockId, options)); | ||
| .option('--force', 'Overwrite without asking') | ||
| .option('--dry-run', 'Show output without writing files') | ||
| .action((rule, options) => runAdd(rule, options)); | ||
| } | ||
| //# sourceMappingURL=add.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"add.js","sourceRoot":"","sources":["../../src/commands/add.ts"],"names":[],"mappings":"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"} |
| import type { Command } from 'commander'; | ||
| import type { ProjectConfig, Rule } from '../bridges/types.js'; | ||
| import type { ProjectConfig, PulledEntry, Rule } from '../bridges/types.js'; | ||
| export interface CheckResult { | ||
@@ -15,4 +15,5 @@ passed: boolean; | ||
| export declare function checkSymlinks(cwd: string, config: ProjectConfig): Promise<CheckResult>; | ||
| export declare function checkPulledFilesExist(cwd: string, pulled: PulledEntry[]): Promise<CheckResult>; | ||
| export declare function checkHashSync(cwd: string, rules: Rule[]): Promise<CheckResult>; | ||
| export declare function registerDoctorCommand(program: Command): void; | ||
| //# sourceMappingURL=doctor.d.ts.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,OAAO,KAAK,EAAU,aAAa,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAQvE,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAKzE;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAQxE;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA2CvE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,WAAW,CA2B5D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,WAAW,CAmB3D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,CAWxE;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAkC5F;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAmBpF;AAkGD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAK5D"} | ||
| {"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AASzC,OAAO,KAAK,EAAU,aAAa,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAQpF,MAAM,WAAW,WAAW;IAC1B,MAAM,EAAE,OAAO,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,iBAAiB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAKzE;AAED,wBAAsB,gBAAgB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAQxE;AAED,wBAAsB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA2CvE;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,WAAW,CA2B5D;AAED,wBAAgB,gBAAgB,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,WAAW,CAmB3D;AAED,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,aAAa,GAAG,WAAW,CAWxE;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,WAAW,CAAC,CAkC5F;AAED,wBAAsB,qBAAqB,CAAC,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAwBpG;AAED,wBAAsB,aAAa,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,GAAG,OAAO,CAAC,WAAW,CAAC,CAmBpF;AAsGD,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAK5D"} |
@@ -156,2 +156,23 @@ import { lstat, readFile, readdir } from 'node:fs/promises'; | ||
| } | ||
| export async function checkPulledFilesExist(cwd, pulled) { | ||
| if (pulled.length === 0) { | ||
| return { passed: true, message: 'Pulled files check skipped (no pulled rules)', skipped: true }; | ||
| } | ||
| const missing = []; | ||
| for (const entry of pulled) { | ||
| const slug = entry.path.replace(/\//g, '-'); | ||
| const fileName = `pulled-${slug}.yml`; | ||
| const filePath = join(cwd, '.dwf', 'rules', fileName); | ||
| if (!(await fileExists(filePath))) { | ||
| missing.push(fileName); | ||
| } | ||
| } | ||
| if (missing.length > 0) { | ||
| return { | ||
| passed: false, | ||
| message: `Missing pulled rule files: ${missing.join(', ')}`, | ||
| }; | ||
| } | ||
| return { passed: true, message: `Pulled rule files exist (${String(pulled.length)} entries)` }; | ||
| } | ||
| export async function checkHashSync(cwd, rules) { | ||
@@ -234,3 +255,6 @@ const storedHash = await readStoredHash(cwd); | ||
| results.push(symlinkResult); | ||
| // Check 8: Hash sync (conditional on compiled files existing) | ||
| // Check 8: Pulled files exist | ||
| const pulledResult = await checkPulledFilesExist(cwd, config.pulled); | ||
| results.push(pulledResult); | ||
| // Check 9: Hash sync (conditional on compiled files existing) | ||
| const hashResult = await checkHashSync(cwd, rules); | ||
@@ -237,0 +261,0 @@ results.push(hashResult); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"} |
@@ -141,4 +141,4 @@ import { mkdir, writeFile, readFile, appendFile } from 'node:fs/promises'; | ||
| ui.newline(); | ||
| console.log(` 1. Browse available rule blocks ${chalk.cyan('devw add --list')}`); | ||
| console.log(` 2. Install a block ${chalk.cyan('devw add typescript-strict')}`); | ||
| console.log(` 1. Browse available rules ${chalk.cyan('devw add --list')}`); | ||
| console.log(` 2. Add a rule ${chalk.cyan('devw add <category>/<rule>')}`); | ||
| console.log(` 3. Or write your own rules in ${chalk.cyan('.dwf/rules/')}`); | ||
@@ -145,0 +145,0 @@ console.log(` 4. When ready, compile ${chalk.cyan('devw compile')}`); |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoHzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAM1D"} | ||
| {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgHzC,wBAAgB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAM1D"} |
+13
-13
@@ -43,3 +43,12 @@ import { join } from 'node:path'; | ||
| const severityColor = rule.severity === 'error' ? chalk.red : rule.severity === 'warning' ? chalk.yellow : chalk.dim; | ||
| const source = rule.sourceBlock ? chalk.dim(` [${rule.sourceBlock}]`) : ''; | ||
| let source = ''; | ||
| if (rule.source) { | ||
| source = chalk.dim(` (pulled: ${rule.source})`); | ||
| } | ||
| else if (rule.sourceBlock) { | ||
| source = chalk.dim(` [${rule.sourceBlock}]`); | ||
| } | ||
| else { | ||
| source = chalk.dim(` ${ICONS.arrow} manual`); | ||
| } | ||
| console.log(` ${severityIcon} ${severityColor(rule.severity.padEnd(8))}${chalk.cyan(rule.scope.padEnd(15))}${rule.id}${source}`); | ||
@@ -49,14 +58,5 @@ } | ||
| async function listBlocks() { | ||
| const cwd = process.cwd(); | ||
| if (!(await ensureConfig(cwd))) | ||
| return; | ||
| const config = await readConfig(cwd); | ||
| if (config.blocks.length === 0) { | ||
| ui.warn('No blocks installed'); | ||
| ui.info('Run devw add --list to see available blocks'); | ||
| return; | ||
| } | ||
| ui.header(`Installed blocks (${String(config.blocks.length)})`); | ||
| ui.newline(); | ||
| ui.list(config.blocks); | ||
| ui.warn('Blocks have been replaced by pulled rules'); | ||
| ui.info('Run devw list rules to see installed rules'); | ||
| ui.info('Run devw add --list to browse available rules'); | ||
| } | ||
@@ -63,0 +63,0 @@ async function listTools() { |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,MAAM,mBAAmB,CAAC;AAC1D,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AAEtD,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAEvC,MAAM,OAAO,GAAa,CAAC,YAAY,EAAE,YAAY,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,CAAC,CAAC;AAEpG,KAAK,UAAU,YAAY,CAAC,GAAW;IACrC,IAAI,CAAC,CAAC,MAAM,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC,EAAE,CAAC;QACzD,EAAE,CAAC,KAAK,CAAC,2BAA2B,EAAE,yCAAyC,CAAC,CAAC;QACjF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO,KAAK,CAAC;IACf,CAAC;IACD,OAAO,IAAI,CAAC;AACd,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QAAE,OAAO;IAEvC,IAAI,KAAK,CAAC;IACV,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,SAAS,CAAC,GAAG,CAAC,CAAC;IAC/B,CAAC;IAAC,MAAM,CAAC;QACP,EAAE,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;QAC1B,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC9C,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,EAAE,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IAED,EAAE,CAAC,MAAM,CAAC,iBAAiB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACrD,EAAE,CAAC,OAAO,EAAE,CAAC;IACb,KAAK,MAAM,IAAI,IAAI,MAAM,EAAE,CAAC;QAC1B,MAAM,YAAY,GAAG,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QACxJ,MAAM,aAAa,GAAG,IAAI,CAAC,QAAQ,KAAK,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC;QACrH,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAC3E,OAAO,CAAC,GAAG,CAAC,OAAO,YAAY,IAAI,aAAa,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IACtI,CAAC;AACH,CAAC;AAED,KAAK,UAAU,UAAU;IACvB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QAAE,OAAO;IAEvC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IAErC,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC/B,EAAE,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;QACvD,OAAO;IACT,CAAC;IAED,EAAE,CAAC,MAAM,CAAC,qBAAqB,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAChE,EAAE,CAAC,OAAO,EAAE,CAAC;IACb,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;AACzB,CAAC;AAED,KAAK,UAAU,SAAS;IACtB,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAC1B,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC;QAAE,OAAO;IAEvC,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IAErC,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;QAC/B,OAAO;IACT,CAAC;IAED,EAAE,CAAC,MAAM,CAAC,qBAAqB,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC/D,EAAE,CAAC,OAAO,EAAE,CAAC;IACb,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,CAAC;QAClD,MAAM,UAAU,GAAG,MAAM,EAAE,WAAW,CAAC,CAAC,CAAC,CAAC;QAC1C,IAAI,UAAU,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;QACjI,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,OAAO,KAAK,CAAC,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACpE,CAAC;IACH,CAAC;AACH,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,UAA8B;IACnD,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,EAAE,CAAC,KAAK,CAAC,sBAAsB,EAAE,uCAAuC,CAAC,CAAC;QAC1E,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,QAAQ,UAAU,EAAE,CAAC;QACnB,KAAK,OAAO;YACV,MAAM,SAAS,EAAE,CAAC;YAClB,MAAM;QACR,KAAK,QAAQ;YACX,MAAM,UAAU,EAAE,CAAC;YACnB,MAAM;QACR,KAAK,OAAO;YACV,MAAM,SAAS,EAAE,CAAC;YAClB,MAAM;QACR;YACE,EAAE,CAAC,KAAK,CAAC,sBAAsB,UAAU,GAAG,EAAE,uCAAuC,CAAC,CAAC;YACvF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;IACzB,CAAC;AACH,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,OAAgB;IAClD,OAAO;SACJ,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CAAC,QAAQ,EAAE,uCAAuC,CAAC;SAC3D,WAAW,CAAC,mDAAmD,CAAC;SAChE,MAAM,CAAC,CAAC,IAAwB,EAAE,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;AACzD,CAAC"} | ||
| {"version":3,"file":"list.js","sourceRoot":"","sources":["../../src/commands/list.ts"],"names":[],"mappings":"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"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsDzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAM5D"} | ||
| {"version":3,"file":"remove.d.ts","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAqIzC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAM5D"} |
+85
-22
| import { join } from 'node:path'; | ||
| import { select } from '@inquirer/prompts'; | ||
| import { readFile, writeFile, unlink } from 'node:fs/promises'; | ||
| import { parse, stringify } from 'yaml'; | ||
| import { checkbox, confirm } from '@inquirer/prompts'; | ||
| import { readConfig } from '../core/parser.js'; | ||
| import { uninstallBlock } from '../blocks/installer.js'; | ||
| import { fileExists } from '../utils/fs.js'; | ||
| import { validateInput } from './add.js'; | ||
| import * as ui from '../utils/ui.js'; | ||
| function ensureConfig(cwd) { | ||
| return fileExists(join(cwd, '.dwf', 'config.yml')); | ||
| async function removePulledEntry(cwd, path) { | ||
| const configPath = join(cwd, '.dwf', 'config.yml'); | ||
| const raw = await readFile(configPath, 'utf-8'); | ||
| const doc = parse(raw); | ||
| const pulled = Array.isArray(doc['pulled']) ? doc['pulled'] : []; | ||
| doc['pulled'] = pulled.filter((p) => p.path !== path); | ||
| await writeFile(configPath, stringify(doc, { lineWidth: 0 }), 'utf-8'); | ||
| } | ||
| async function selectBlock(blocks) { | ||
| return select({ | ||
| message: 'Which block to remove?', | ||
| choices: blocks.map((id) => ({ name: id, value: id })), | ||
| }); | ||
| async function removeRule(cwd, path) { | ||
| const parts = path.split('/'); | ||
| if (parts.length !== 2) | ||
| return false; | ||
| const category = parts[0]; | ||
| const name = parts[1]; | ||
| if (!category || !name) | ||
| return false; | ||
| const fileName = `pulled-${category}-${name}.yml`; | ||
| const filePath = join(cwd, '.dwf', 'rules', fileName); | ||
| if (await fileExists(filePath)) { | ||
| await unlink(filePath); | ||
| } | ||
| await removePulledEntry(cwd, path); | ||
| return true; | ||
| } | ||
| async function runRemove(blockId) { | ||
| async function runRemove(ruleArg) { | ||
| const cwd = process.cwd(); | ||
| if (!(await ensureConfig(cwd))) { | ||
| if (!(await fileExists(join(cwd, '.dwf', 'config.yml')))) { | ||
| ui.error('.dwf/config.yml not found', 'Run devw init to initialize the project'); | ||
@@ -24,9 +41,16 @@ process.exitCode = 1; | ||
| const config = await readConfig(cwd); | ||
| if (!blockId) { | ||
| if (config.blocks.length === 0) { | ||
| ui.warn('No blocks installed'); | ||
| if (!ruleArg) { | ||
| if (config.pulled.length === 0) { | ||
| ui.warn('No rules installed'); | ||
| return; | ||
| } | ||
| let selectedRules; | ||
| try { | ||
| blockId = await selectBlock(config.blocks); | ||
| selectedRules = await checkbox({ | ||
| message: 'Which rules to remove?', | ||
| choices: config.pulled.map((p) => ({ | ||
| name: `${p.path} (v${p.version})`, | ||
| value: p.path, | ||
| })), | ||
| }); | ||
| } | ||
@@ -36,10 +60,49 @@ catch { | ||
| } | ||
| if (selectedRules.length === 0) { | ||
| ui.warn('No rules selected'); | ||
| return; | ||
| } | ||
| try { | ||
| const shouldProceed = await confirm({ | ||
| message: `Remove ${String(selectedRules.length)} rule(s)?`, | ||
| default: true, | ||
| }); | ||
| if (!shouldProceed) { | ||
| ui.info('Remove cancelled'); | ||
| return; | ||
| } | ||
| } | ||
| catch { | ||
| return; | ||
| } | ||
| for (const path of selectedRules) { | ||
| await removeRule(cwd, path); | ||
| ui.success(`Removed ${path}`); | ||
| } | ||
| const { runCompileFromAdd } = await import('./compile.js'); | ||
| await runCompileFromAdd(); | ||
| return; | ||
| } | ||
| if (!config.blocks.includes(blockId)) { | ||
| ui.error(`Block "${blockId}" is not installed`, `Installed blocks: ${config.blocks.length > 0 ? config.blocks.join(', ') : '(none)'}`); | ||
| if (!ruleArg.includes('/')) { | ||
| ui.error('Block format is no longer supported', 'Use: devw remove <category>/<rule>'); | ||
| process.exitCode = 1; | ||
| return; | ||
| } | ||
| const rulesRemoved = await uninstallBlock(cwd, blockId); | ||
| ui.success(`Removed ${blockId} (${String(rulesRemoved)} rules)`); | ||
| const parsed = validateInput(ruleArg); | ||
| if (!parsed) { | ||
| ui.error(`Invalid rule path "${ruleArg}"`, 'Format: <category>/<rule> — both must be kebab-case (e.g., typescript/strict)'); | ||
| process.exitCode = 1; | ||
| return; | ||
| } | ||
| const source = `${parsed.category}/${parsed.name}`; | ||
| const installed = config.pulled.find((p) => p.path === source); | ||
| if (!installed) { | ||
| ui.error(`Rule "${source}" is not installed`, config.pulled.length > 0 | ||
| ? `Installed rules: ${config.pulled.map((p) => p.path).join(', ')}` | ||
| : 'No rules installed'); | ||
| process.exitCode = 1; | ||
| return; | ||
| } | ||
| await removeRule(cwd, source); | ||
| ui.success(`Removed ${source}`); | ||
| const { runCompileFromAdd } = await import('./compile.js'); | ||
@@ -51,6 +114,6 @@ await runCompileFromAdd(); | ||
| .command('remove') | ||
| .argument('[block]', 'Block ID to remove') | ||
| .description('Remove an installed rule block') | ||
| .action((blockId) => runRemove(blockId)); | ||
| .argument('[rule]', 'Rule path: <category>/<rule>') | ||
| .description('Remove an installed rule') | ||
| .action((rule) => runRemove(rule)); | ||
| } | ||
| //# sourceMappingURL=remove.js.map |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAC3C,OAAO,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAC/C,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,UAAU,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAErC,SAAS,YAAY,CAAC,GAAW;IAC/B,OAAO,UAAU,CAAC,IAAI,CAAC,GAAG,EAAE,MAAM,EAAE,YAAY,CAAC,CAAC,CAAC;AACrD,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,MAAgB;IACzC,OAAO,MAAM,CAAS;QACpB,OAAO,EAAE,wBAAwB;QACjC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC;KACvD,CAAC,CAAC;AACL,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,OAAgB;IACvC,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,EAAE,CAAC;IAE1B,IAAI,CAAC,CAAC,MAAM,YAAY,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QAC/B,EAAE,CAAC,KAAK,CAAC,2BAA2B,EAAE,yCAAyC,CAAC,CAAC;QACjF,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,GAAG,CAAC,CAAC;IAErC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/B,EAAE,CAAC,IAAI,CAAC,qBAAqB,CAAC,CAAC;YAC/B,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,WAAW,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,OAAO;QACT,CAAC;IACH,CAAC;IAED,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QACrC,EAAE,CAAC,KAAK,CAAC,UAAU,OAAO,oBAAoB,EAAE,qBAAqB,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QACvI,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACrB,OAAO;IACT,CAAC;IAED,MAAM,YAAY,GAAG,MAAM,cAAc,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;IACxD,EAAE,CAAC,OAAO,CAAC,WAAW,OAAO,KAAK,MAAM,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC;IAEjE,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,cAAc,CAAC,CAAC;IAC3D,MAAM,iBAAiB,EAAE,CAAC;AAC5B,CAAC;AAED,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO;SACJ,OAAO,CAAC,QAAQ,CAAC;SACjB,QAAQ,CAAC,SAAS,EAAE,oBAAoB,CAAC;SACzC,WAAW,CAAC,gCAAgC,CAAC;SAC7C,MAAM,CAAC,CAAC,OAAgB,EAAE,EAAE,CAAC,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;AACtD,CAAC"} | ||
| {"version":3,"file":"remove.js","sourceRoot":"","sources":["../../src/commands/remove.ts"],"names":[],"mappings":"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"} |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAiB/D,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CA4CpE;AAqBD,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CA+B5D"} | ||
| {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,IAAI,EAAE,aAAa,EAAe,MAAM,qBAAqB,CAAC;AAkB5E,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,aAAa,CAAC,CAyDpE;AAsBD,wBAAsB,SAAS,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,CA+B5D"} |
+13
-0
@@ -34,2 +34,13 @@ import { readFile, readdir } from 'node:fs/promises'; | ||
| : []; | ||
| const pulledRaw = doc['pulled']; | ||
| const pulled = Array.isArray(pulledRaw) | ||
| ? pulledRaw | ||
| .filter((p) => p !== null && typeof p === 'object') | ||
| .map((p) => ({ | ||
| path: typeof p['path'] === 'string' ? p['path'] : '', | ||
| version: typeof p['version'] === 'string' ? p['version'] : '', | ||
| pulled_at: typeof p['pulled_at'] === 'string' ? p['pulled_at'] : '', | ||
| })) | ||
| .filter((p) => p.path !== '') | ||
| : []; | ||
| return { | ||
@@ -41,2 +52,3 @@ version, | ||
| blocks, | ||
| pulled, | ||
| }; | ||
@@ -59,2 +71,3 @@ } | ||
| sourceBlock: raw.sourceBlock, | ||
| source: raw.source, | ||
| }; | ||
@@ -61,0 +74,0 @@ } |
@@ -1,1 +0,1 @@ | ||
| {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":"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"} | ||
| {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":"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"} |
+2
-2
| { | ||
| "name": "dev-workflows", | ||
| "version": "0.3.0", | ||
| "version": "0.4.0", | ||
| "type": "module", | ||
@@ -56,3 +56,3 @@ "description": "CLI that compiles developer rules into editor-specific config files", | ||
| "scripts": { | ||
| "prebuild": "rm -rf content/blocks && mkdir -p content && cp -r ../../content/blocks content/blocks && cp ../../README.md README.md", | ||
| "prebuild": "cp ../../README.md README.md", | ||
| "build": "tsc", | ||
@@ -59,0 +59,0 @@ "dev": "tsc --watch", |
| id: nextjs-approuter | ||
| name: "Next.js App Router" | ||
| description: "App Router patterns, RSC, and server actions" | ||
| version: "0.1.0" | ||
| rules: | ||
| - id: nextjs-use-client-minimal | ||
| scope: architecture | ||
| severity: error | ||
| content: | | ||
| Minimize "use client" directives. Default to Server Components. | ||
| Only add "use client" when the component needs browser APIs, | ||
| event handlers, or React hooks that require client state. | ||
| - id: nextjs-server-actions | ||
| scope: architecture | ||
| severity: warning | ||
| content: | | ||
| Prefer server actions for form submissions and data mutations. | ||
| Define them with "use server" in a separate file or at the | ||
| top of an async function. | ||
| - id: nextjs-route-segments | ||
| scope: architecture | ||
| severity: error | ||
| content: | | ||
| Follow the App Router file conventions: page.tsx, layout.tsx, | ||
| loading.tsx, error.tsx, not-found.tsx. Do not create custom | ||
| routing abstractions. | ||
| - id: nextjs-no-client-fetch | ||
| scope: architecture | ||
| severity: warning | ||
| content: | | ||
| Fetch data in Server Components or server actions, not in | ||
| client components with useEffect. Use React Suspense for | ||
| loading states. |
| id: react-conventions | ||
| name: "React Conventions" | ||
| description: "Hooks rules, component patterns, and naming conventions" | ||
| version: "0.1.0" | ||
| rules: | ||
| - id: react-hooks-rules | ||
| scope: conventions | ||
| severity: error | ||
| content: | | ||
| Follow the Rules of Hooks: only call hooks at the top level, | ||
| never inside conditions or loops. Custom hooks must start | ||
| with "use". | ||
| - id: react-component-naming | ||
| scope: conventions | ||
| severity: error | ||
| content: | | ||
| Use PascalCase for component names and their files. | ||
| Use camelCase for hook files prefixed with "use" | ||
| (e.g. useAuth.ts). | ||
| - id: react-prefer-composition | ||
| scope: conventions | ||
| severity: warning | ||
| content: | | ||
| Prefer composition over prop drilling. Use children, | ||
| render props, or context for shared behavior rather than | ||
| deeply nested prop chains. | ||
| - id: react-no-inline-styles | ||
| scope: conventions | ||
| severity: warning | ||
| content: | | ||
| Avoid inline styles. Use CSS modules, Tailwind classes, | ||
| or styled-components for styling. |
| id: supabase-rls | ||
| name: "Supabase RLS" | ||
| description: "Row-Level Security enforcement and auth patterns" | ||
| version: "0.1.0" | ||
| rules: | ||
| - id: supabase-rls-required | ||
| scope: security | ||
| severity: error | ||
| content: | | ||
| Every new table must have RLS policies before merging. | ||
| Enable RLS with ALTER TABLE ... ENABLE ROW LEVEL SECURITY | ||
| and create at least one policy per operation (SELECT, INSERT, | ||
| UPDATE, DELETE) as needed. | ||
| - id: supabase-auth-context | ||
| scope: security | ||
| severity: error | ||
| content: | | ||
| Always use auth.uid() in RLS policies to scope data to | ||
| the authenticated user. Never rely on client-provided | ||
| user IDs in queries. | ||
| - id: supabase-no-service-role-client | ||
| scope: security | ||
| severity: error | ||
| content: | | ||
| Never expose the service_role key to the client. | ||
| Use the anon key in browser code and the service_role key | ||
| only in server-side or admin contexts. |
| id: tailwind | ||
| name: "Tailwind CSS" | ||
| description: "Utility-first CSS conventions and design tokens" | ||
| version: "0.1.0" | ||
| rules: | ||
| - id: tailwind-utility-first | ||
| scope: conventions | ||
| severity: error | ||
| content: | | ||
| Use Tailwind utility classes for all styling. Do not write | ||
| custom CSS unless absolutely necessary (e.g. complex | ||
| animations or third-party overrides). | ||
| - id: tailwind-design-tokens | ||
| scope: conventions | ||
| severity: warning | ||
| content: | | ||
| Use Tailwind's design tokens (spacing, colors, typography) | ||
| from the theme config. Avoid arbitrary values like | ||
| w-[137px]; prefer the closest token. | ||
| - id: tailwind-no-apply | ||
| scope: conventions | ||
| severity: warning | ||
| content: | | ||
| Avoid @apply in CSS files. Extract reusable patterns into | ||
| React components instead of creating CSS abstractions. |
| id: testing-basics | ||
| name: "Testing Basics" | ||
| description: "Test naming, coverage expectations, and mock patterns" | ||
| version: "0.1.0" | ||
| rules: | ||
| - id: testing-descriptive-names | ||
| scope: testing | ||
| severity: error | ||
| content: | | ||
| Use descriptive test names that explain the expected behavior. | ||
| Follow the pattern: "should [expected behavior] when [condition]". | ||
| - id: testing-arrange-act-assert | ||
| scope: testing | ||
| severity: warning | ||
| content: | | ||
| Structure tests with Arrange-Act-Assert (AAA) pattern. | ||
| Separate setup, execution, and verification into distinct | ||
| sections for readability. | ||
| - id: testing-no-implementation-details | ||
| scope: testing | ||
| severity: warning | ||
| content: | | ||
| Test behavior, not implementation details. Avoid asserting | ||
| on internal state, private methods, or specific function calls | ||
| unless testing integration points. | ||
| - id: testing-mock-boundaries | ||
| scope: testing | ||
| severity: warning | ||
| content: | | ||
| Only mock at system boundaries: network requests, databases, | ||
| file system, and third-party services. Do not mock internal | ||
| modules or utility functions. |
| id: typescript-strict | ||
| name: "TypeScript Strict" | ||
| description: "Strict TypeScript conventions for professional codebases" | ||
| version: "0.1.0" | ||
| rules: | ||
| - id: ts-strict-no-any | ||
| scope: conventions | ||
| severity: error | ||
| content: | | ||
| Never use `any`. Use `unknown` when the type is truly unknown, | ||
| then narrow with type guards. | ||
| - id: ts-strict-explicit-returns | ||
| scope: conventions | ||
| severity: warning | ||
| content: | | ||
| Always declare explicit return types on exported functions. | ||
| Inferred types are fine for internal/private functions. | ||
| - id: ts-strict-no-enums | ||
| scope: conventions | ||
| severity: warning | ||
| content: | | ||
| Prefer union types over enums. | ||
| Use `as const` objects when you need runtime values. | ||
| - id: ts-strict-no-non-null-assertion | ||
| scope: conventions | ||
| severity: error | ||
| content: | | ||
| Never use non-null assertion (!). Handle null/undefined explicitly | ||
| with optional chaining, nullish coalescing, or type guards. |
| import type { BlockDefinition } from './registry.js'; | ||
| export declare function installBlock(cwd: string, block: BlockDefinition): Promise<number>; | ||
| export declare function uninstallBlock(cwd: string, blockId: string): Promise<number>; | ||
| //# sourceMappingURL=installer.d.ts.map |
| {"version":3,"file":"installer.d.ts","sourceRoot":"","sources":["../../src/blocks/installer.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,eAAe,CAAC;AAmCrD,wBAAsB,YAAY,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,eAAe,GAAG,OAAO,CAAC,MAAM,CAAC,CA8CvF;AAED,wBAAsB,cAAc,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAgClF"} |
| import { readFile, writeFile, mkdir } from 'node:fs/promises'; | ||
| import { join } from 'node:path'; | ||
| import { parse, stringify } from 'yaml'; | ||
| async function readRuleFile(filePath) { | ||
| try { | ||
| const raw = await readFile(filePath, 'utf-8'); | ||
| const parsed = parse(raw); | ||
| if (!parsed || typeof parsed !== 'object') | ||
| return null; | ||
| const doc = parsed; | ||
| return { | ||
| scope: typeof doc['scope'] === 'string' ? doc['scope'] : '', | ||
| rules: Array.isArray(doc['rules']) ? doc['rules'] : [], | ||
| }; | ||
| } | ||
| catch { | ||
| return null; | ||
| } | ||
| } | ||
| function writeRuleFile(doc) { | ||
| return stringify(doc, { lineWidth: 0 }); | ||
| } | ||
| export async function installBlock(cwd, block) { | ||
| const rulesDir = join(cwd, '.dwf', 'rules'); | ||
| await mkdir(rulesDir, { recursive: true }); | ||
| // Group block rules by scope | ||
| const byScope = new Map(); | ||
| for (const rule of block.rules) { | ||
| const existing = byScope.get(rule.scope); | ||
| if (existing) { | ||
| existing.push(rule); | ||
| } | ||
| else { | ||
| byScope.set(rule.scope, [rule]); | ||
| } | ||
| } | ||
| let rulesAdded = 0; | ||
| for (const [scope, blockRules] of byScope) { | ||
| const filePath = join(rulesDir, `${scope}.yml`); | ||
| let doc = await readRuleFile(filePath); | ||
| if (!doc) { | ||
| doc = { scope, rules: [] }; | ||
| } | ||
| // Remove any existing rules from this block to avoid duplicates on re-add | ||
| doc.rules = doc.rules.filter((r) => r.sourceBlock !== block.id); | ||
| // Append new rules | ||
| for (const rule of blockRules) { | ||
| doc.rules.push({ | ||
| id: rule.id, | ||
| severity: rule.severity, | ||
| content: rule.content, | ||
| sourceBlock: block.id, | ||
| }); | ||
| rulesAdded++; | ||
| } | ||
| await writeFile(filePath, writeRuleFile(doc), 'utf-8'); | ||
| } | ||
| // Update config.yml blocks array | ||
| await addBlockToConfig(cwd, block.id); | ||
| return rulesAdded; | ||
| } | ||
| export async function uninstallBlock(cwd, blockId) { | ||
| const rulesDir = join(cwd, '.dwf', 'rules'); | ||
| let entries; | ||
| try { | ||
| const { readdir } = await import('node:fs/promises'); | ||
| entries = await readdir(rulesDir); | ||
| } | ||
| catch { | ||
| return 0; | ||
| } | ||
| const ymlFiles = entries.filter((f) => f.endsWith('.yml') || f.endsWith('.yaml')); | ||
| let rulesRemoved = 0; | ||
| for (const file of ymlFiles) { | ||
| const filePath = join(rulesDir, file); | ||
| const doc = await readRuleFile(filePath); | ||
| if (!doc) | ||
| continue; | ||
| const before = doc.rules.length; | ||
| doc.rules = doc.rules.filter((r) => r.sourceBlock !== blockId); | ||
| const removed = before - doc.rules.length; | ||
| if (removed > 0) { | ||
| rulesRemoved += removed; | ||
| await writeFile(filePath, writeRuleFile(doc), 'utf-8'); | ||
| } | ||
| } | ||
| // Update config.yml blocks array | ||
| await removeBlockFromConfig(cwd, blockId); | ||
| return rulesRemoved; | ||
| } | ||
| async function readRawConfig(cwd) { | ||
| const configPath = join(cwd, '.dwf', 'config.yml'); | ||
| const raw = await readFile(configPath, 'utf-8'); | ||
| const parsed = parse(raw); | ||
| if (!parsed || typeof parsed !== 'object') { | ||
| throw new Error('Invalid config.yml'); | ||
| } | ||
| return parsed; | ||
| } | ||
| async function writeRawConfig(cwd, doc) { | ||
| const configPath = join(cwd, '.dwf', 'config.yml'); | ||
| await writeFile(configPath, stringify(doc, { lineWidth: 0 }), 'utf-8'); | ||
| } | ||
| async function addBlockToConfig(cwd, blockId) { | ||
| const doc = await readRawConfig(cwd); | ||
| const blocks = Array.isArray(doc['blocks']) ? doc['blocks'] : []; | ||
| if (!blocks.includes(blockId)) { | ||
| blocks.push(blockId); | ||
| } | ||
| doc['blocks'] = blocks; | ||
| await writeRawConfig(cwd, doc); | ||
| } | ||
| async function removeBlockFromConfig(cwd, blockId) { | ||
| const doc = await readRawConfig(cwd); | ||
| const blocks = Array.isArray(doc['blocks']) ? doc['blocks'] : []; | ||
| doc['blocks'] = blocks.filter((b) => b !== blockId); | ||
| await writeRawConfig(cwd, doc); | ||
| } | ||
| //# sourceMappingURL=installer.js.map |
| {"version":3,"file":"installer.js","sourceRoot":"","sources":["../../src/blocks/installer.ts"],"names":[],"mappings":"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"} |
| import type { Rule } from '../bridges/types.js'; | ||
| export interface BlockDefinition { | ||
| id: string; | ||
| name: string; | ||
| description: string; | ||
| version: string; | ||
| rules: BlockRule[]; | ||
| } | ||
| export interface BlockRule { | ||
| id: string; | ||
| scope: string; | ||
| severity: 'error' | 'warning' | 'info'; | ||
| content: string; | ||
| } | ||
| export declare function loadAllBlocks(blocksDir?: string): Promise<BlockDefinition[]>; | ||
| export declare function loadBlock(blockId: string, blocksDir?: string): Promise<BlockDefinition | null>; | ||
| export declare function blockRulesToRules(block: BlockDefinition): Rule[]; | ||
| //# sourceMappingURL=registry.d.ts.map |
| {"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/blocks/registry.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AAEhD,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,SAAS,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,OAAO,GAAG,SAAS,GAAG,MAAM,CAAC;IACvC,OAAO,EAAE,MAAM,CAAC;CACjB;AAuDD,wBAAsB,aAAa,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAuBlF;AAED,wBAAsB,SAAS,CAAC,OAAO,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAGpG;AAED,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,eAAe,GAAG,IAAI,EAAE,CAShE"} |
| import { readFile, readdir } from 'node:fs/promises'; | ||
| import { join, dirname } from 'node:path'; | ||
| import { fileURLToPath } from 'node:url'; | ||
| import { parse } from 'yaml'; | ||
| const __dirname = dirname(fileURLToPath(import.meta.url)); | ||
| function defaultBlocksDir() { | ||
| // From dist/blocks/ → packages/cli/ (2 up), then content/blocks | ||
| return join(__dirname, '..', '..', 'content', 'blocks'); | ||
| } | ||
| function normalizeBlockRule(raw) { | ||
| if (!raw.id || !raw.scope || !raw.content) | ||
| return null; | ||
| const severity = raw.severity ?? 'error'; | ||
| if (severity !== 'error' && severity !== 'warning' && severity !== 'info') | ||
| return null; | ||
| return { | ||
| id: raw.id, | ||
| scope: raw.scope, | ||
| severity, | ||
| content: raw.content.trimEnd(), | ||
| }; | ||
| } | ||
| function parseBlock(raw) { | ||
| const parsed = parse(raw); | ||
| if (!parsed || typeof parsed !== 'object') | ||
| return null; | ||
| const doc = parsed; | ||
| const id = typeof doc['id'] === 'string' ? doc['id'] : null; | ||
| const name = typeof doc['name'] === 'string' ? doc['name'] : null; | ||
| const description = typeof doc['description'] === 'string' ? doc['description'] : ''; | ||
| const version = typeof doc['version'] === 'string' ? doc['version'] : '0.1.0'; | ||
| if (!id || !name) | ||
| return null; | ||
| const rulesRaw = doc['rules']; | ||
| if (!Array.isArray(rulesRaw)) | ||
| return null; | ||
| const rules = []; | ||
| for (const rawRule of rulesRaw) { | ||
| if (!rawRule || typeof rawRule !== 'object') | ||
| continue; | ||
| const rule = normalizeBlockRule(rawRule); | ||
| if (rule) | ||
| rules.push(rule); | ||
| } | ||
| return { id, name, description, version, rules }; | ||
| } | ||
| export async function loadAllBlocks(blocksDir) { | ||
| const dir = blocksDir ?? defaultBlocksDir(); | ||
| let entries; | ||
| try { | ||
| entries = await readdir(dir); | ||
| } | ||
| catch { | ||
| return []; | ||
| } | ||
| const ymlFiles = entries.filter((f) => f.endsWith('.yml') || f.endsWith('.yaml')); | ||
| const blocks = []; | ||
| for (const file of ymlFiles) { | ||
| try { | ||
| const raw = await readFile(join(dir, file), 'utf-8'); | ||
| const block = parseBlock(raw); | ||
| if (block) | ||
| blocks.push(block); | ||
| } | ||
| catch { | ||
| // Skip files that can't be read or parsed | ||
| } | ||
| } | ||
| return blocks; | ||
| } | ||
| export async function loadBlock(blockId, blocksDir) { | ||
| const all = await loadAllBlocks(blocksDir); | ||
| return all.find((b) => b.id === blockId) ?? null; | ||
| } | ||
| export function blockRulesToRules(block) { | ||
| return block.rules.map((r) => ({ | ||
| id: r.id, | ||
| scope: r.scope, | ||
| severity: r.severity, | ||
| content: r.content, | ||
| enabled: true, | ||
| sourceBlock: block.id, | ||
| })); | ||
| } | ||
| //# sourceMappingURL=registry.js.map |
| {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/blocks/registry.ts"],"names":[],"mappings":"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"} |
Network access
Supply chain riskThis module accesses the network.
Found 1 instance in 1 package
Environment variable access
Supply chain riskPackage accesses environment variables, which may be a sign of credential stuffing or data theft.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
Long strings
Supply chain riskContains long string literals, which may be a sign of obfuscated or packed code.
Found 1 instance in 1 package
URL strings
Supply chain riskPackage contains fragments of external URLs or IP addresses, which the package may be accessing at runtime.
Found 1 instance in 1 package
193634
16.47%2434
23.62%108
-1.82%3
50%3
Infinity%