@sightmap/sightmap 0.1.0 → 0.2.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 +30 -1
- package/dist/browser-ChD_xQt8.d.ts +253 -0
- package/dist/browser.d.ts +1 -0
- package/dist/browser.js +353 -0
- package/dist/browser.js.map +1 -0
- package/dist/cli/index.js +336 -79
- package/dist/cli/index.js.map +1 -1
- package/dist/index.d.ts +10 -252
- package/dist/index.js +74 -29
- package/dist/index.js.map +1 -1
- package/package.json +4 -2
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/index.ts","../../src/cli/validate.ts","../../src/validate.ts","../../src/diagnostics.ts","../../src/parse.ts","../../src/cli/_fsHelpers.ts","../../src/cli/envelope.ts","../../src/cli/humanFormat.ts","../../src/cli/lint.ts","../../src/loadDirectory.ts","../../src/merge.ts","../../src/lintRules/duplicateName.ts","../../src/lintRules/duplicateRoute.ts","../../src/routeMatch.ts","../../src/lintRules/routeShadowing.ts","../../src/lintRules/unknownSource.ts","../../src/lintRules/selectorSyntax.ts","../../src/lint.ts","../../src/cli/match.ts","../../src/resolver.ts","../../src/match.ts","../../src/cli/explain.ts","../../src/explain.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from \"commander\";\nimport { runValidate } from \"./validate.js\";\nimport { runLint } from \"./lint.js\";\nimport { runMatch } from \"./match.js\";\nimport { runExplain } from \"./explain.js\";\n\nconst program = new Command();\nprogram\n .name(\"sightmap\")\n .description(\"CLI for the Sightmap spec — validate, lint, match, explain.\")\n .version(\"0.1.0\");\n\nprogram.option(\"--cwd <dir>\", \"working directory (resolves [path] arguments)\", process.cwd());\n\nprogram\n .command(\"validate [path]\")\n .description(\"Validate .sightmap/ against the schema.\")\n .option(\"--json\", \"machine-readable output\")\n .action(async (path: string | undefined, opts: { json?: boolean }) => {\n const code = await runValidate({\n path: path ?? \".sightmap\",\n cwd: program.opts<{ cwd: string }>().cwd,\n json: opts.json === true,\n });\n process.exit(code);\n });\n\nprogram\n .command(\"lint [path]\")\n .description(\"Run quality checks beyond schema.\")\n .option(\"--json\", \"machine-readable output\")\n .option(\"--strict\", \"treat all warnings as errors (exit 1)\")\n .option(\"--rules <list>\", \"comma-separated list of rule codes to disable (prefix '-') or only-enable\")\n .action(async (path: string | undefined, opts: { json?: boolean; strict?: boolean; rules?: string }) => {\n const code = await runLint({\n path: path ?? \".sightmap\",\n cwd: program.opts<{ cwd: string }>().cwd,\n json: opts.json === true,\n strict: opts.strict === true,\n ...(opts.rules !== undefined ? { rules: opts.rules } : {}),\n });\n process.exit(code);\n });\n\nprogram\n .command(\"match <url> [path]\")\n .description(\"Resolve sightmap context for a URL.\")\n .option(\"--method <m>\", \"HTTP method filter for requests\")\n .option(\"--json\", \"machine-readable output\")\n .option(\"--require-view\", \"exit 1 if no view matched\")\n .action(\n async (\n url: string,\n path: string | undefined,\n opts: { method?: string; json?: boolean; requireView?: boolean },\n ) => {\n const code = await runMatch({\n url,\n path: path ?? \".sightmap\",\n cwd: program.opts<{ cwd: string }>().cwd,\n json: opts.json === true,\n requireView: opts.requireView === true,\n ...(opts.method !== undefined ? { method: opts.method } : {}),\n });\n process.exit(code);\n },\n );\n\nprogram\n .command(\"explain <query> [path]\")\n .description(\"Look up sightmap entries by name and/or source path.\")\n .option(\"--by <kind>\", \"scope to 'name' or 'path'\")\n .option(\"--type <kind>\", \"scope to 'view', 'component', or 'request'\")\n .option(\"--json\", \"machine-readable output\")\n .option(\"--require-hit\", \"exit 1 if zero hits\")\n .action(\n async (\n query: string,\n path: string | undefined,\n opts: {\n by?: \"name\" | \"path\";\n type?: \"view\" | \"component\" | \"request\";\n json?: boolean;\n requireHit?: boolean;\n },\n ) => {\n const code = await runExplain({\n query,\n path: path ?? \".sightmap\",\n cwd: program.opts<{ cwd: string }>().cwd,\n json: opts.json === true,\n requireHit: opts.requireHit === true,\n ...(opts.by !== undefined ? { by: opts.by } : {}),\n ...(opts.type !== undefined ? { type: opts.type } : {}),\n });\n process.exit(code);\n },\n );\n\nprogram.parseAsync(process.argv).catch((err: unknown) => {\n process.stderr.write(`fatal: ${err instanceof Error ? err.message : String(err)}\\n`);\n process.exit(2);\n});\n","import { readFile } from \"node:fs/promises\";\nimport { resolve, relative } from \"node:path\";\nimport { validate } from \"../validate.js\";\nimport { collectYamlFiles } from \"./_fsHelpers.js\";\nimport { makeEnvelope, emitJson } from \"./envelope.js\";\nimport { formatValidate } from \"./humanFormat.js\";\nimport type { Diagnostic } from \"../diagnostics.js\";\n\nexport interface RunValidateOptions {\n path: string;\n cwd: string;\n json: boolean;\n}\n\nexport async function runValidate(opts: RunValidateOptions): Promise<number> {\n const dir = resolve(opts.cwd, opts.path);\n const files = (await collectYamlFiles(dir)).sort();\n const fileResults: { path: string; ok: boolean }[] = [];\n const diagnostics: Diagnostic[] = [];\n\n for (const file of files) {\n const relPath = relative(opts.cwd, file);\n const text = await readFile(file, \"utf8\");\n const r = validate(text, { sourceFile: relPath });\n fileResults.push({ path: relPath, ok: r.ok });\n if (!r.ok) diagnostics.push(...r.diagnostics);\n }\n\n const ok = diagnostics.length === 0;\n if (opts.json) {\n emitJson(\n makeEnvelope({\n command: \"validate\",\n ok,\n diagnostics,\n result: { files: fileResults },\n }),\n );\n } else {\n process.stdout.write(formatValidate({ files: fileResults }, diagnostics) + \"\\n\");\n }\n return ok ? 0 : 1;\n}\n","import yaml from \"js-yaml\";\nimport { Ajv2020 } from \"ajv/dist/2020.js\";\nimport type { ValidateResult, SightmapFragment } from \"./sightmap.js\";\nimport {\n PARSE_ERROR,\n SCHEMA_VALIDATION_FAILED,\n UNKNOWN_VERSION,\n type Diagnostic,\n} from \"./diagnostics.js\";\nimport { parse } from \"./parse.js\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { resolve, dirname } from \"node:path\";\n\nconst __dirname = dirname(fileURLToPath(import.meta.url));\n// Resolve the vendored schema in two contexts:\n// - Production (published package): bundled file lives at dist/index.js, schema at dist/vendored/.\n// - Dev (vitest, source files): validate.ts lives at src/, schema at ../vendored/.\nconst schemaCandidates = [\n resolve(__dirname, \"./vendored/sightmap.schema.json\"),\n resolve(__dirname, \"../vendored/sightmap.schema.json\"),\n];\nconst schemaPath = schemaCandidates.find((p) => existsSync(p));\nif (schemaPath === undefined) {\n throw new Error(\n `vendored sightmap.schema.json not found. Looked in: ${schemaCandidates.join(\", \")}`,\n );\n}\nconst schema = JSON.parse(readFileSync(schemaPath, \"utf8\")) as unknown;\n\nconst ajv = new Ajv2020({ allErrors: true, strict: false });\nconst ajvValidate = ajv.compile(schema as object);\n\nexport interface ValidateOptions {\n sourceFile?: string;\n}\n\nexport function validate(input: string | object, opts: ValidateOptions = {}): ValidateResult {\n const diagnostics: Diagnostic[] = [];\n let doc: unknown;\n\n if (typeof input === \"string\") {\n try {\n doc = yaml.load(input);\n } catch (err) {\n const e = err as { message?: string; mark?: { line?: number; column?: number } };\n diagnostics.push({\n severity: \"error\",\n code: PARSE_ERROR,\n message: e.message ?? \"YAML parse error\",\n ...(opts.sourceFile !== undefined ? { file: opts.sourceFile } : {}),\n ...(e.mark\n ? { loc: { line: (e.mark.line ?? 0) + 1, column: (e.mark.column ?? 0) + 1 } }\n : {}),\n });\n return { ok: false, diagnostics };\n }\n } else {\n doc = input;\n }\n\n if (doc === null || typeof doc !== \"object\" || Array.isArray(doc)) {\n diagnostics.push({\n severity: \"error\",\n code: SCHEMA_VALIDATION_FAILED,\n message: \"Expected document root to be an object\",\n ...(opts.sourceFile !== undefined ? { file: opts.sourceFile } : {}),\n });\n return { ok: false, diagnostics };\n }\n\n const obj = doc as Record<string, unknown>;\n if (obj[\"version\"] !== 1) {\n diagnostics.push({\n severity: \"error\",\n code: UNKNOWN_VERSION,\n message:\n obj[\"version\"] === undefined\n ? \"Missing required `version` field\"\n : `Unsupported version: ${String(obj[\"version\"])} (expected 1)`,\n ...(opts.sourceFile !== undefined ? { file: opts.sourceFile } : {}),\n path: \"/version\",\n });\n return { ok: false, diagnostics };\n }\n\n const ok = ajvValidate(obj);\n if (!ok) {\n for (const e of ajvValidate.errors ?? []) {\n diagnostics.push({\n severity: \"error\",\n code: SCHEMA_VALIDATION_FAILED,\n message: `${e.instancePath || \"(root)\"} ${e.message ?? \"\"}`.trim(),\n ...(opts.sourceFile !== undefined ? { file: opts.sourceFile } : {}),\n ...(e.instancePath ? { path: e.instancePath } : {}),\n });\n }\n return { ok: false, diagnostics };\n }\n\n // Schema-valid: now run parse() (which normalizes selectors and brands).\n let value: SightmapFragment;\n try {\n value = parse(obj, opts.sourceFile !== undefined ? { sourceFile: opts.sourceFile } : {});\n } catch (err) {\n diagnostics.push({\n severity: \"error\",\n code: SCHEMA_VALIDATION_FAILED,\n message: err instanceof Error ? err.message : String(err),\n ...(opts.sourceFile !== undefined ? { file: opts.sourceFile } : {}),\n });\n return { ok: false, diagnostics };\n }\n return { ok: true, value };\n}\n","export type Severity = \"error\" | \"warning\" | \"info\";\n\nexport interface Diagnostic {\n severity: Severity;\n code: string;\n message: string;\n file?: string;\n path?: string;\n loc?: { line: number; column: number };\n source?: string;\n}\n\n// Stable, kebab-case codes. Renames require an SEP.\nexport const PARSE_ERROR = \"parse-error\";\nexport const SCHEMA_VALIDATION_FAILED = \"schema-validation-failed\";\nexport const UNKNOWN_VERSION = \"unknown-version\";\nexport const MERGE_COLLISION_VIEW = \"merge-collision-view\";\nexport const MERGE_COLLISION_COMPONENT = \"merge-collision-component\";\nexport const DUPLICATE_VIEW_NAME = \"duplicate-view-name\";\nexport const DUPLICATE_ROUTE = \"duplicate-route\";\nexport const ROUTE_SHADOWING = \"route-shadowing\";\nexport const UNKNOWN_SOURCE = \"unknown-source\";\nexport const SELECTOR_SYNTAX = \"selector-syntax\";\n","import yaml from \"js-yaml\";\nimport type { SightmapFragment } from \"./sightmap.js\";\nimport type { Component } from \"./types.js\";\n\nexport interface ParseOptions {\n /** Optional source file path; recorded on the fragment for canonical-order merging. */\n sourceFile?: string;\n}\n\n/**\n * Parse a single sightmap file (YAML string or pre-parsed object).\n * Throws on parse error, missing version, or version mismatch.\n * Normalizes `selector: string` to `selector: [string]` everywhere.\n */\nexport function parse(input: string | object, opts: ParseOptions = {}): SightmapFragment {\n let doc: unknown;\n if (typeof input === \"string\") {\n try {\n doc = yaml.load(input);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n throw new Error(`YAML parse error: ${msg}`);\n }\n } else {\n // Shallow-clone caller's object so we don't mutate it.\n doc = { ...input };\n }\n\n if (doc === null || typeof doc !== \"object\" || Array.isArray(doc)) {\n throw new Error(\"Expected sightmap document to be an object at the root\");\n }\n\n const obj = doc as Record<string, unknown>;\n if (obj[\"version\"] === undefined) {\n throw new Error(\"Missing required `version` field\");\n }\n if (obj[\"version\"] !== 1) {\n throw new Error(`Unsupported version: ${String(obj[\"version\"])} (expected 1)`);\n }\n\n // Normalize selectors recursively. Spread each view to avoid mutating\n // shared view objects when the caller passed a pre-parsed input.\n if (Array.isArray(obj[\"components\"])) {\n obj[\"components\"] = (obj[\"components\"] as Component[]).map(normalizeComponent);\n }\n if (Array.isArray(obj[\"views\"])) {\n obj[\"views\"] = (obj[\"views\"] as Array<Record<string, unknown>>).map((v) => {\n const out = { ...v };\n if (Array.isArray(out[\"components\"])) {\n out[\"components\"] = (out[\"components\"] as Component[]).map(normalizeComponent);\n }\n return out;\n });\n }\n\n const fragment = {\n ...obj,\n __brand: \"SightmapFragment\" as const,\n ...(opts.sourceFile !== undefined ? { __sourceFile: opts.sourceFile } : {}),\n } as SightmapFragment;\n return fragment;\n}\n\nfunction normalizeComponent(c: Component): Component {\n const sel = c.selector;\n const normalized: Component = {\n ...c,\n selector: typeof sel === \"string\" ? [sel] : (sel as [string, ...string[]]),\n };\n if (Array.isArray(c.children)) {\n normalized.children = c.children.map(normalizeComponent);\n }\n return normalized;\n}\n","import { readdir } from \"node:fs/promises\";\nimport { join, extname } from \"node:path\";\n\nexport async function collectYamlFiles(dir: string): Promise<string[]> {\n const out: string[] = [];\n const entries = await readdir(dir, { withFileTypes: true });\n for (const e of entries) {\n const p = join(dir, e.name);\n if (e.isDirectory()) {\n out.push(...(await collectYamlFiles(p)));\n } else if (e.isFile()) {\n const ext = extname(p).toLowerCase();\n if (ext === \".yaml\" || ext === \".yml\") out.push(p);\n }\n }\n return out;\n}\n","import type { Diagnostic } from \"../diagnostics.js\";\n\nexport type Command = \"validate\" | \"lint\" | \"match\" | \"explain\";\n\nexport interface Envelope<R = unknown> {\n ok: boolean;\n command: Command;\n diagnostics: Diagnostic[];\n result: R;\n}\n\nexport function makeEnvelope<R>(args: {\n command: Command;\n ok: boolean;\n diagnostics: Diagnostic[];\n result: R;\n}): Envelope<R> {\n return {\n ok: args.ok,\n command: args.command,\n diagnostics: [...args.diagnostics],\n result: args.result,\n };\n}\n\nexport function emitJson<R>(env: Envelope<R>): void {\n process.stdout.write(JSON.stringify(env, null, 2) + \"\\n\");\n}\n","import type { Diagnostic } from \"../diagnostics.js\";\nimport type { MatchResult, ExplainResult } from \"../sightmap.js\";\n\nconst SEV_TAG: Record<Diagnostic[\"severity\"], string> = {\n error: \"ERROR\",\n warning: \"warn \",\n info: \"info \",\n};\n\nexport function formatDiagnostics(diags: Diagnostic[]): string {\n if (diags.length === 0) return \"\";\n const lines = diags.map((d) => {\n const where = [d.file, d.path, d.loc ? `${d.loc.line}:${d.loc.column}` : null]\n .filter(Boolean)\n .join(\" \");\n return `${SEV_TAG[d.severity]} ${d.code} ${where}\\n ${d.message}`;\n });\n return lines.join(\"\\n\");\n}\n\nexport function formatValidate(result: { files: { path: string; ok: boolean }[] }, diags: Diagnostic[]): string {\n const fileLines = result.files.map((f) => `${f.ok ? \"ok \" : \"FAIL \"} ${f.path}`).join(\"\\n\");\n const diagLines = formatDiagnostics(diags);\n return [fileLines, \"\", diagLines, \"\", `${result.files.length} file(s) checked.`].filter(Boolean).join(\"\\n\");\n}\n\nexport function formatLint(diags: Diagnostic[]): string {\n if (diags.length === 0) return \"lint: no issues.\";\n return formatDiagnostics(diags);\n}\n\nexport function formatMatch(r: MatchResult): string {\n const lines: string[] = [];\n if (r.view === null) {\n lines.push(\"no view matched.\");\n } else {\n lines.push(`view ${r.view.name} (route ${r.view.route})`);\n if (r.view.source !== undefined) lines.push(` source ${r.view.source}`);\n }\n for (const c of r.components) {\n const chain = c.parentChain.length > 0 ? ` (in ${c.parentChain.join(\" > \")})` : \"\";\n lines.push(`comp ${c.name}${chain} ${c.scope} selector=${c.selector.join(\" | \")}`);\n }\n for (const q of r.requests) {\n lines.push(`req ${q.name} ${q.method ?? \"ANY\"} ${q.route}`);\n }\n if (r.memory.length > 0) {\n lines.push(\"\");\n lines.push(\"[Guide]\");\n for (const m of r.memory) lines.push(` - ${m}`);\n }\n return lines.join(\"\\n\");\n}\n\nexport function formatExplain(r: ExplainResult): string {\n if (r.hits.length === 0) return `no hits for \"${r.query}\".`;\n const lines = [`${r.hits.length} hit(s) for \"${r.query}\":`];\n for (const h of r.hits) {\n const e = h.entry as { name?: string; source?: string };\n lines.push(` ${h.type} ${e.name ?? \"?\"} matchedAs=${h.matchedAs}${e.source !== undefined ? ` src=${e.source}` : \"\"}`);\n }\n return lines.join(\"\\n\");\n}\n","import { resolve } from \"node:path\";\nimport { loadDirectory } from \"../loadDirectory.js\";\nimport { lint } from \"../lint.js\";\nimport { makeEnvelope, emitJson } from \"./envelope.js\";\nimport { formatLint } from \"./humanFormat.js\";\nimport type { Diagnostic } from \"../diagnostics.js\";\n\nexport interface RunLintOptions {\n path: string;\n cwd: string;\n json: boolean;\n strict: boolean;\n rules?: string;\n}\n\nexport async function runLint(opts: RunLintOptions): Promise<number> {\n const dir = resolve(opts.cwd, opts.path);\n const sightmap = await loadDirectory(dir, { diagnosticRoot: opts.cwd });\n\n const ruleConfig = parseRules(opts.rules);\n const lintDiags = await lint(sightmap, {\n ...(ruleConfig !== undefined ? { rules: ruleConfig } : {}),\n root: opts.cwd,\n });\n\n const all: Diagnostic[] = [...sightmap.diagnostics, ...lintDiags];\n const hasError = all.some((d) => d.severity === \"error\");\n const hasWarning = all.some((d) => d.severity === \"warning\");\n\n let code = 0;\n if (hasError) code = 1;\n else if (opts.strict && hasWarning) code = 1;\n\n if (opts.json) {\n emitJson(\n makeEnvelope({\n command: \"lint\",\n ok: code === 0,\n diagnostics: all,\n result: {},\n }),\n );\n } else {\n process.stdout.write(formatLint(all) + \"\\n\");\n }\n return code;\n}\n\nfunction parseRules(spec: string | undefined): Record<string, boolean> | undefined {\n if (spec === undefined) return undefined;\n const out: Record<string, boolean> = {};\n for (const tok of spec.split(\",\").map((s) => s.trim()).filter(Boolean)) {\n if (tok.startsWith(\"-\")) out[tok.slice(1)] = false;\n else out[tok] = true;\n }\n return out;\n}\n","import { readFile, readdir } from \"node:fs/promises\";\nimport { join, extname, relative, resolve } from \"node:path\";\nimport { merge } from \"./merge.js\";\nimport { validate } from \"./validate.js\";\nimport type { Sightmap, SightmapFragment } from \"./sightmap.js\";\nimport type { Diagnostic } from \"./diagnostics.js\";\n\nexport interface LoadDirectoryOptions {\n /** Optional root for `file` fields in diagnostics. Default: the directory passed in. */\n diagnosticRoot?: string;\n}\n\n/**\n * Recursively load all *.yaml/*.yml files under `dir`, validate each, and merge.\n *\n * Files that fail validation contribute their diagnostics to the merged Sightmap's\n * `diagnostics` array but are otherwise skipped. This keeps loadDirectory total —\n * a single bad file doesn't abort the whole load.\n */\nexport async function loadDirectory(\n dir: string,\n opts: LoadDirectoryOptions = {},\n): Promise<Sightmap> {\n const absDir = resolve(dir);\n const root = opts.diagnosticRoot !== undefined ? resolve(opts.diagnosticRoot) : absDir;\n\n const files = await collectYamlFiles(absDir);\n files.sort(); // alphabetical canonical order\n\n const fragments: SightmapFragment[] = [];\n const loadDiagnostics: Diagnostic[] = [];\n\n for (const file of files) {\n const relPath = relative(root, file);\n const text = await readFile(file, \"utf8\");\n const r = validate(text, { sourceFile: relPath });\n if (r.ok) {\n fragments.push(r.value);\n } else {\n loadDiagnostics.push(...r.diagnostics);\n }\n }\n\n const merged = merge(fragments);\n return {\n ...merged,\n diagnostics: [...loadDiagnostics, ...merged.diagnostics],\n };\n}\n\nasync function collectYamlFiles(dir: string): Promise<string[]> {\n const out: string[] = [];\n const entries = await readdir(dir, { withFileTypes: true });\n for (const e of entries) {\n const p = join(dir, e.name);\n if (e.isDirectory()) {\n out.push(...(await collectYamlFiles(p)));\n } else if (e.isFile()) {\n const ext = extname(p).toLowerCase();\n if (ext === \".yaml\" || ext === \".yml\") out.push(p);\n }\n }\n return out;\n}\n","import type { SightmapFragment, Sightmap } from \"./sightmap.js\";\nimport type { View, Component, Request } from \"./types.js\";\nimport {\n MERGE_COLLISION_VIEW,\n MERGE_COLLISION_COMPONENT,\n type Diagnostic,\n} from \"./diagnostics.js\";\n\n/**\n * Merge fragments into a queryable Sightmap.\n *\n * Canonical order: fragments are sorted by `__sourceFile` (code-point order; locale-independent\n * for cross-environment determinism). Fragments without a `__sourceFile` sort first, and ES2019\n * sort stability preserves their input order. Within each fragment, declaration order is\n * preserved. The merged collection's order = (sourceFile order, then declaration order).\n *\n * Duplicate view names produce `merge-collision-view` warnings; duplicate global component\n * names produce `merge-collision-component`. The first occurrence wins.\n *\n * Returned arrays are fresh, but element objects (View/Component/Request) are shared with\n * the input fragments — callers must not mutate them.\n */\nexport function merge(fragments: SightmapFragment[]): Sightmap {\n const sorted = [...fragments].sort((a, b) => {\n const aFile = a.__sourceFile ?? \"\";\n const bFile = b.__sourceFile ?? \"\";\n return aFile < bFile ? -1 : aFile > bFile ? 1 : 0;\n });\n\n const views: View[] = [];\n const globalComponents: Component[] = [];\n const globalRequests: Request[] = [];\n const fileMemory: { memory: string[]; sourceFile: string }[] = [];\n const diagnostics: Diagnostic[] = [];\n\n const seenViewNames = new Map<string, string>(); // name → sourceFile\n const seenComponentNames = new Map<string, string>();\n\n for (const f of sorted) {\n const file = f.__sourceFile ?? \"<unknown>\";\n\n for (const v of f.views ?? []) {\n const prev = seenViewNames.get(v.name);\n if (prev !== undefined) {\n diagnostics.push({\n severity: \"warning\",\n code: MERGE_COLLISION_VIEW,\n message: `View name \"${v.name}\" defined in both \"${prev}\" and \"${file}\"; first occurrence wins.`,\n file,\n });\n } else {\n seenViewNames.set(v.name, file);\n }\n views.push(v); // keep all views; first-match-wins is enforced at resolve time\n }\n\n for (const c of f.components ?? []) {\n const prev = seenComponentNames.get(c.name);\n if (prev !== undefined) {\n diagnostics.push({\n severity: \"warning\",\n code: MERGE_COLLISION_COMPONENT,\n message: `Component name \"${c.name}\" defined in both \"${prev}\" and \"${file}\"; first occurrence wins.`,\n file,\n });\n } else {\n seenComponentNames.set(c.name, file);\n }\n globalComponents.push(c);\n }\n\n for (const r of f.requests ?? []) {\n globalRequests.push(r);\n }\n\n if (Array.isArray(f.memory) && f.memory.length > 0) {\n fileMemory.push({ memory: [...f.memory], sourceFile: file });\n }\n }\n\n return {\n version: 1,\n views,\n globalComponents,\n globalRequests,\n fileMemory,\n diagnostics,\n __brand: \"Sightmap\",\n };\n}\n","import type { Sightmap } from \"../sightmap.js\";\nimport { DUPLICATE_VIEW_NAME, type Diagnostic } from \"../diagnostics.js\";\n\nexport function duplicateName(sightmap: Sightmap): Diagnostic[] {\n const seen = new Map<string, number>();\n const out: Diagnostic[] = [];\n sightmap.views.forEach((v) => {\n const count = (seen.get(v.name) ?? 0) + 1;\n seen.set(v.name, count);\n if (count > 1) {\n out.push({\n severity: \"warning\",\n code: DUPLICATE_VIEW_NAME,\n message: `Duplicate view name \"${v.name}\" (occurrence ${count}).`,\n });\n }\n });\n return out;\n}\n","import type { Sightmap } from \"../sightmap.js\";\nimport { DUPLICATE_ROUTE, type Diagnostic } from \"../diagnostics.js\";\n\nexport function duplicateRoute(sightmap: Sightmap): Diagnostic[] {\n const seen = new Map<string, string>(); // route → first-view-name\n const out: Diagnostic[] = [];\n for (const v of sightmap.views) {\n const prev = seen.get(v.route);\n if (prev !== undefined) {\n out.push({\n severity: \"warning\",\n code: DUPLICATE_ROUTE,\n message: `Route \"${v.route}\" is defined by both \"${prev}\" and \"${v.name}\". Only \"${prev}\" will match.`,\n });\n } else {\n seen.set(v.route, v.name);\n }\n }\n return out;\n}\n","/**\n * Canonicalize a URL or pathname for matching.\n * - Accepts absolute URL or pathname.\n * - Strips scheme, host, query string, and fragment.\n * - Normalizes trailing slashes (except for the root \"/\").\n */\nexport function canonicalizeUrl(input: string): string {\n let s = input;\n // Strip absolute prefix.\n const protoMatch = /^[a-z][a-z0-9+.-]*:\\/\\/[^/]*/i.exec(s);\n if (protoMatch) {\n s = s.slice(protoMatch[0].length) || \"/\";\n }\n // Strip fragment.\n const hash = s.indexOf(\"#\");\n if (hash !== -1) s = s.slice(0, hash);\n // Strip query.\n const q = s.indexOf(\"?\");\n if (q !== -1) s = s.slice(0, q);\n // Trailing slash.\n if (s.length > 1 && s.endsWith(\"/\")) s = s.slice(0, -1);\n return s;\n}\n\n/**\n * Test whether a glob route pattern matches a URL pathname.\n * Pattern syntax (per spec):\n * - Literal segments match themselves\n * - \"*\" matches exactly one path segment\n * - \"**\" matches any depth of segments\n * - \":param\" segments normalize to \"*\"\n * - Matching is case-sensitive\n * - Trailing slashes ignored\n */\nexport function routeMatch(pattern: string, url: string): boolean {\n const p = normalizePattern(pattern);\n const u = canonicalizeUrl(url);\n const patternSegs = splitSegments(p);\n const urlSegs = splitSegments(u);\n return matchSegs(patternSegs, urlSegs);\n}\n\nfunction normalizePattern(p: string): string {\n // Replace \":param\" segments with \"*\"\n let s = p\n .split(\"/\")\n .map((seg) => (seg.startsWith(\":\") ? \"*\" : seg))\n .join(\"/\");\n if (s.length > 1 && s.endsWith(\"/\")) s = s.slice(0, -1);\n return s;\n}\n\nfunction splitSegments(path: string): string[] {\n if (path === \"/\" || path === \"\") return [];\n const trimmed = path.startsWith(\"/\") ? path.slice(1) : path;\n return trimmed.split(\"/\");\n}\n\nfunction matchSegs(pattern: string[], url: string[]): boolean {\n if (pattern.length === 0 && url.length === 0) return true;\n if (pattern.length === 0) return false;\n\n const head = pattern[0]!;\n const rest = pattern.slice(1);\n\n if (head === \"**\") {\n // Match zero or more segments.\n if (rest.length === 0) return true;\n for (let i = 0; i <= url.length; i++) {\n if (matchSegs(rest, url.slice(i))) return true;\n }\n return false;\n }\n\n if (url.length === 0) return false;\n if (head === \"*\" || head === url[0]) {\n return matchSegs(rest, url.slice(1));\n }\n return false;\n}\n","import type { Sightmap } from \"../sightmap.js\";\nimport { ROUTE_SHADOWING, type Diagnostic } from \"../diagnostics.js\";\nimport { routeMatch } from \"../routeMatch.js\";\n\n/**\n * Detect later views whose canonical \"representative URL\" would also be matched\n * by an earlier view's route — i.e. they're unreachable.\n *\n * Representative URL: the route with `*` and `:param` replaced by `__seg__`,\n * and `**` segments dropped. This produces a concrete URL that matches the\n * route precisely (assuming no over-broad earlier route).\n */\nexport function routeShadowing(sightmap: Sightmap): Diagnostic[] {\n const out: Diagnostic[] = [];\n const views = sightmap.views;\n for (let j = 1; j < views.length; j++) {\n const later = views[j]!;\n const representative = makeRepresentativeUrl(later.route);\n for (let i = 0; i < j; i++) {\n const earlier = views[i]!;\n if (earlier.route === later.route) continue; // duplicate-route covers this\n if (routeMatch(earlier.route, representative)) {\n out.push({\n severity: \"warning\",\n code: ROUTE_SHADOWING,\n message: `Route \"${later.route}\" (view \"${later.name}\") is shadowed by earlier route \"${earlier.route}\" (view \"${earlier.name}\"); first-match-wins makes it unreachable.`,\n });\n break; // only report the first shadower\n }\n }\n }\n return out;\n}\n\nfunction makeRepresentativeUrl(route: string): string {\n const result = route\n .split(\"/\")\n .filter((seg) => seg !== \"**\")\n .map((seg) => {\n if (seg === \"*\") return \"__seg__\";\n if (seg.startsWith(\":\")) return \"__seg__\";\n return seg;\n })\n .join(\"/\")\n .replace(/^\\/+/, \"/\");\n return result || \"/\";\n}\n","import { stat } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport type { Sightmap } from \"../sightmap.js\";\nimport type { Component } from \"../types.js\";\nimport { UNKNOWN_SOURCE, type Diagnostic } from \"../diagnostics.js\";\n\nexport interface UnknownSourceOptions {\n /** Filesystem root for resolving `source:` paths. Defaults to process.cwd(). */\n root?: string;\n}\n\nexport async function unknownSource(\n sightmap: Sightmap,\n opts: UnknownSourceOptions = {},\n): Promise<Diagnostic[]> {\n const root = opts.root ?? process.cwd();\n const out: Diagnostic[] = [];\n const seen = new Set<string>();\n\n const check = async (source: string | undefined, label: string): Promise<void> => {\n if (source === undefined) return;\n if (seen.has(source)) return;\n seen.add(source);\n try {\n await stat(resolve(root, source));\n } catch {\n out.push({\n severity: \"warning\",\n code: UNKNOWN_SOURCE,\n message: `${label}: source path \"${source}\" does not exist on disk (relative to ${root}).`,\n });\n }\n };\n\n for (const v of sightmap.views) {\n await check(v.source, `view \"${v.name}\"`);\n for (const c of v.components ?? []) {\n await walkComponent(c, `component \"${c.name}\"`, check);\n }\n }\n for (const c of sightmap.globalComponents) {\n await walkComponent(c, `component \"${c.name}\"`, check);\n }\n for (const r of sightmap.globalRequests) {\n await check(r.source, `request \"${r.name}\"`);\n }\n\n return out;\n}\n\nasync function walkComponent(\n c: Component,\n label: string,\n check: (source: string | undefined, label: string) => Promise<void>,\n): Promise<void> {\n await check(c.source, label);\n for (const child of c.children ?? []) {\n await walkComponent(child, `component \"${child.name}\"`, check);\n }\n}\n","import { parse as parseSelector } from \"css-what\";\nimport type { Sightmap } from \"../sightmap.js\";\nimport type { Component } from \"../types.js\";\nimport { SELECTOR_SYNTAX, type Diagnostic } from \"../diagnostics.js\";\n\nexport function selectorSyntax(sightmap: Sightmap): Diagnostic[] {\n const out: Diagnostic[] = [];\n const visit = (c: Component, scope: string): void => {\n const selectors: string[] = Array.isArray(c.selector)\n ? c.selector\n : [c.selector as unknown as string];\n selectors.forEach((sel, i) => {\n try {\n parseSelector(sel);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n out.push({\n severity: \"warning\",\n code: SELECTOR_SYNTAX,\n message: `${scope}: selector at index ${i} (\"${sel}\") failed to parse: ${msg}`,\n });\n }\n });\n for (const child of c.children ?? []) visit(child, `component \"${child.name}\"`);\n };\n\n for (const c of sightmap.globalComponents) visit(c, `component \"${c.name}\"`);\n for (const v of sightmap.views) {\n for (const c of v.components ?? []) visit(c, `component \"${c.name}\"`);\n }\n return out;\n}\n","import type { Sightmap } from \"./sightmap.js\";\nimport type { Diagnostic } from \"./diagnostics.js\";\nimport { duplicateName } from \"./lintRules/duplicateName.js\";\nimport { duplicateRoute } from \"./lintRules/duplicateRoute.js\";\nimport { routeShadowing } from \"./lintRules/routeShadowing.js\";\nimport { unknownSource } from \"./lintRules/unknownSource.js\";\nimport { selectorSyntax } from \"./lintRules/selectorSyntax.js\";\n\nexport interface LintOptions {\n /** Per-rule enable/disable. Default: all rules enabled. */\n rules?: Record<string, boolean>;\n /** Filesystem root for `unknown-source`. Defaults to process.cwd(). */\n root?: string;\n}\n\nexport async function lint(sightmap: Sightmap, opts: LintOptions = {}): Promise<Diagnostic[]> {\n const enabled = (code: string): boolean => opts.rules?.[code] !== false;\n const out: Diagnostic[] = [];\n if (enabled(\"duplicate-view-name\")) out.push(...duplicateName(sightmap));\n if (enabled(\"duplicate-route\")) out.push(...duplicateRoute(sightmap));\n if (enabled(\"route-shadowing\")) out.push(...routeShadowing(sightmap));\n if (enabled(\"selector-syntax\")) out.push(...selectorSyntax(sightmap));\n if (enabled(\"unknown-source\")) {\n out.push(...(await unknownSource(sightmap, opts.root !== undefined ? { root: opts.root } : {})));\n }\n return out;\n}\n","import { resolve } from \"node:path\";\nimport { loadDirectory } from \"../loadDirectory.js\";\nimport { match } from \"../match.js\";\nimport { makeEnvelope, emitJson } from \"./envelope.js\";\nimport { formatMatch } from \"./humanFormat.js\";\n\nexport interface RunMatchOptions {\n url: string;\n path: string;\n cwd: string;\n json: boolean;\n method?: string;\n requireView: boolean;\n}\n\nexport async function runMatch(opts: RunMatchOptions): Promise<number> {\n const dir = resolve(opts.cwd, opts.path);\n const sightmap = await loadDirectory(dir, { diagnosticRoot: opts.cwd });\n const result = match(sightmap, {\n url: opts.url,\n ...(opts.method !== undefined ? { method: opts.method } : {}),\n });\n\n const code = opts.requireView && result.view === null ? 1 : 0;\n if (opts.json) {\n emitJson(\n makeEnvelope({\n command: \"match\",\n ok: code === 0,\n diagnostics: [...sightmap.diagnostics],\n result,\n }),\n );\n } else {\n process.stdout.write(formatMatch(result) + \"\\n\");\n }\n return code;\n}\n","import type {\n Sightmap,\n MatchResult,\n ExplainHit,\n ResolvedView,\n ResolvedComponent,\n ResolvedRequest,\n} from \"./sightmap.js\";\nimport type { View, Component, Request } from \"./types.js\";\nimport { routeMatch } from \"./routeMatch.js\";\n\nexport function resolveByUrl(\n sightmap: Sightmap,\n url: string,\n method?: string,\n): MatchResult {\n // First-match-wins on views.\n let matchedView: View | null = null;\n for (const v of sightmap.views) {\n if (routeMatch(v.route, url)) {\n matchedView = v;\n break;\n }\n }\n\n const components: ResolvedComponent[] = [];\n for (const c of sightmap.globalComponents) {\n components.push(...flattenComponent(c, [], \"global\", undefined));\n }\n if (matchedView !== null && Array.isArray(matchedView.components)) {\n for (const c of matchedView.components) {\n components.push(...flattenComponent(c, [], \"view-scoped\", matchedView.name));\n }\n }\n\n const requests: ResolvedRequest[] = [];\n const requestPool: Request[] = [\n ...sightmap.globalRequests,\n ...((matchedView?.requests ?? [])),\n ];\n for (const req of requestPool) {\n if (!routeMatch(req.route, url)) continue;\n if (method !== undefined && req.method !== undefined && req.method !== method) continue;\n requests.push(toResolvedRequest(req));\n }\n\n const memory: string[] = [];\n for (const fm of sightmap.fileMemory) memory.push(...fm.memory);\n if (matchedView?.memory) memory.push(...matchedView.memory);\n\n return {\n view: matchedView !== null ? toResolvedView(matchedView) : null,\n components,\n requests,\n memory,\n };\n}\n\nexport function resolveByName(sightmap: Sightmap, name: string): ExplainHit[] {\n const hits: ExplainHit[] = [];\n for (const v of sightmap.views) {\n if (v.name === name) hits.push({ type: \"view\", matchedAs: \"name\", entry: toResolvedView(v) });\n }\n for (const c of sightmap.globalComponents) {\n for (const rc of flattenComponent(c, [], \"global\", undefined)) {\n if (rc.name === name) hits.push({ type: \"component\", matchedAs: \"name\", entry: rc });\n }\n }\n for (const v of sightmap.views) {\n for (const c of v.components ?? []) {\n for (const rc of flattenComponent(c, [], \"view-scoped\", v.name)) {\n if (rc.name === name) hits.push({ type: \"component\", matchedAs: \"name\", entry: rc });\n }\n }\n }\n for (const r of sightmap.globalRequests) {\n if (r.name === name) hits.push({ type: \"request\", matchedAs: \"name\", entry: toResolvedRequest(r) });\n }\n for (const v of sightmap.views) {\n for (const r of v.requests ?? []) {\n if (r.name === name) hits.push({ type: \"request\", matchedAs: \"name\", entry: toResolvedRequest(r) });\n }\n }\n return hits;\n}\n\nexport function resolveBySourcePath(sightmap: Sightmap, path: string): ExplainHit[] {\n const hits: ExplainHit[] = [];\n for (const v of sightmap.views) {\n if (v.source === path) hits.push({ type: \"view\", matchedAs: \"path\", entry: toResolvedView(v) });\n }\n for (const c of sightmap.globalComponents) {\n for (const rc of flattenComponent(c, [], \"global\", undefined)) {\n if (rc.source === path) hits.push({ type: \"component\", matchedAs: \"path\", entry: rc });\n }\n }\n for (const v of sightmap.views) {\n for (const c of v.components ?? []) {\n for (const rc of flattenComponent(c, [], \"view-scoped\", v.name)) {\n if (rc.source === path) hits.push({ type: \"component\", matchedAs: \"path\", entry: rc });\n }\n }\n }\n for (const r of sightmap.globalRequests) {\n if (r.source === path) hits.push({ type: \"request\", matchedAs: \"path\", entry: toResolvedRequest(r) });\n }\n return hits;\n}\n\nfunction flattenComponent(\n c: Component,\n parentChain: string[],\n scope: \"global\" | \"view-scoped\",\n scopedToView: string | undefined,\n): ResolvedComponent[] {\n const out: ResolvedComponent[] = [];\n const selector = Array.isArray(c.selector) ? c.selector : [c.selector as unknown as string];\n out.push({\n name: c.name,\n selector,\n ...(c.source !== undefined ? { source: c.source } : {}),\n ...(c.description !== undefined ? { description: c.description } : {}),\n memory: c.memory ? [...c.memory] : [],\n parentChain: [...parentChain],\n scope,\n ...(scopedToView !== undefined ? { scopedToView } : {}),\n definedIn: { file: \"<unknown>\" },\n });\n for (const child of c.children ?? []) {\n out.push(...flattenComponent(child, [...parentChain, c.name], scope, scopedToView));\n }\n return out;\n}\n\nfunction toResolvedView(v: View): ResolvedView {\n return {\n name: v.name,\n route: v.route,\n ...(v.source !== undefined ? { source: v.source } : {}),\n ...(v.description !== undefined ? { description: v.description } : {}),\n memory: v.memory ? [...v.memory] : [],\n definedIn: { file: \"<unknown>\" },\n };\n}\n\nfunction toResolvedRequest(r: Request): ResolvedRequest {\n return {\n name: r.name,\n route: r.route,\n ...(r.method !== undefined ? { method: r.method } : {}),\n ...(r.source !== undefined ? { source: r.source } : {}),\n ...(r.description !== undefined ? { description: r.description } : {}),\n ...(r.request !== undefined ? { request: { fields: r.request.fields ?? [] } } : {}),\n ...(r.response !== undefined ? { response: { fields: r.response.fields ?? [] } } : {}),\n ...(r.headers !== undefined ? { headers: r.headers } : {}),\n memory: r.memory ? [...r.memory] : [],\n definedIn: { file: \"<unknown>\" },\n };\n}\n","import type { Sightmap, MatchResult } from \"./sightmap.js\";\nimport { resolveByUrl } from \"./resolver.js\";\n\nexport interface MatchOptions {\n url: string;\n method?: string;\n}\n\nexport function match(sightmap: Sightmap, opts: MatchOptions): MatchResult {\n return resolveByUrl(sightmap, opts.url, opts.method);\n}\n","import { resolve } from \"node:path\";\nimport { loadDirectory } from \"../loadDirectory.js\";\nimport { explain } from \"../explain.js\";\nimport { makeEnvelope, emitJson } from \"./envelope.js\";\nimport { formatExplain } from \"./humanFormat.js\";\n\nexport interface RunExplainOptions {\n query: string;\n path: string;\n cwd: string;\n json: boolean;\n by?: \"name\" | \"path\";\n type?: \"view\" | \"component\" | \"request\";\n requireHit: boolean;\n}\n\nexport async function runExplain(opts: RunExplainOptions): Promise<number> {\n const dir = resolve(opts.cwd, opts.path);\n const sightmap = await loadDirectory(dir, { diagnosticRoot: opts.cwd });\n const result = explain(sightmap, opts.query, {\n ...(opts.by !== undefined ? { by: opts.by } : {}),\n ...(opts.type !== undefined ? { type: opts.type } : {}),\n });\n\n const code = opts.requireHit && result.hits.length === 0 ? 1 : 0;\n if (opts.json) {\n emitJson(\n makeEnvelope({\n command: \"explain\",\n ok: code === 0,\n diagnostics: [...sightmap.diagnostics],\n result,\n }),\n );\n } else {\n process.stdout.write(formatExplain(result) + \"\\n\");\n }\n return code;\n}\n","import type { Sightmap, ExplainResult, ExplainHit, ExplainMatchedAs } from \"./sightmap.js\";\nimport { resolveByName, resolveBySourcePath } from \"./resolver.js\";\n\nexport interface ExplainOptions {\n by?: \"name\" | \"path\";\n type?: \"view\" | \"component\" | \"request\";\n}\n\nexport function explain(\n sightmap: Sightmap,\n query: string,\n opts: ExplainOptions = {},\n): ExplainResult {\n const byName = opts.by === \"path\" ? [] : resolveByName(sightmap, query);\n const byPath = opts.by === \"name\" ? [] : resolveBySourcePath(sightmap, query);\n\n // Merge: when an entry appears in both lookups, label as \"name-and-path\".\n // Use entry identity (type + name) as the dedup key.\n const key = (h: ExplainHit): string => `${h.type}:${h.entry.name}`;\n const namedKeys = new Set(byName.map(key));\n const pathKeys = new Set(byPath.map(key));\n\n const merged: ExplainHit[] = [];\n for (const h of byName) {\n if (pathKeys.has(key(h))) {\n merged.push(withMatchedAs(h, \"name-and-path\"));\n } else {\n merged.push(h);\n }\n }\n for (const h of byPath) {\n if (!namedKeys.has(key(h))) {\n merged.push(h);\n }\n // (entries already in both have been pushed above with \"name-and-path\".)\n }\n\n const filtered =\n opts.type !== undefined ? merged.filter((h) => h.type === opts.type) : merged;\n return { query, hits: filtered };\n}\n\nfunction withMatchedAs(h: ExplainHit, matchedAs: ExplainMatchedAs): ExplainHit {\n switch (h.type) {\n case \"view\":\n return { type: \"view\", matchedAs, entry: h.entry };\n case \"component\":\n return { type: \"component\", matchedAs, entry: h.entry };\n case \"request\":\n return { type: \"request\", matchedAs, entry: h.entry };\n }\n}\n"],"mappings":"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","names":["resolve","yaml","yaml","resolve","resolve","readFile","readdir","join","extname","relative","resolve","resolve","collectYamlFiles","relative","readFile","readdir","join","extname","resolve","resolve","resolve","resolve","resolve","resolve","resolve"]}
|
|
1
|
+
{"version":3,"sources":["../../src/cli/index.ts","../../src/cli/validate.ts","../../src/validate.ts","../../src/diagnostics.ts","../../src/parse.ts","../../src/cli/_fsHelpers.ts","../../src/cli/envelope.ts","../../src/cli/humanFormat.ts","../../src/cli/lint.ts","../../src/loadDirectory.ts","../../src/merge.ts","../../src/lintRules/duplicateName.ts","../../src/lintRules/duplicateRoute.ts","../../src/lintRules/routeShadowing.ts","../../src/lintRules/unknownSource.ts","../../src/lintRules/selectorSyntax.ts","../../src/lint.ts","../../src/cli/match.ts","../../src/routeMatch.ts","../../src/resolver.ts","../../src/match.ts","../../src/cli/explain.ts","../../src/explain.ts","../../src/cli/check.ts","../../src/cli/checkConventions.ts","../../src/conventions/walker.ts","../../src/conventions/slug.ts","../../src/conventions/rules.ts"],"sourcesContent":["#!/usr/bin/env node\nimport { Command } from \"commander\";\nimport { runValidate } from \"./validate.js\";\nimport { runLint } from \"./lint.js\";\nimport { runMatch } from \"./match.js\";\nimport { runExplain } from \"./explain.js\";\nimport { runCheck, runCheckFromStdin } from \"./check.js\";\nimport { runCheckConventions } from \"./checkConventions.js\";\n\nconst program = new Command();\nprogram\n .name(\"sightmap\")\n .description(\"CLI for the Sightmap spec — validate, lint, match, explain.\")\n .version(\"0.1.0\");\n\nprogram.option(\"--cwd <dir>\", \"working directory (resolves [path] arguments)\", process.cwd());\n\nprogram\n .command(\"validate [path]\")\n .description(\"Validate .sightmap/ against the schema.\")\n .option(\"--json\", \"machine-readable output\")\n .action(async (path: string | undefined, opts: { json?: boolean }) => {\n const code = await runValidate({\n path: path ?? \".sightmap\",\n cwd: program.opts<{ cwd: string }>().cwd,\n json: opts.json === true,\n });\n process.exit(code);\n });\n\nprogram\n .command(\"lint [path]\")\n .description(\"Run quality checks beyond schema.\")\n .option(\"--json\", \"machine-readable output\")\n .option(\"--strict\", \"treat all warnings as errors (exit 1)\")\n .option(\"--rules <list>\", \"comma-separated list of rule codes to disable (prefix '-') or only-enable\")\n .action(async (path: string | undefined, opts: { json?: boolean; strict?: boolean; rules?: string }) => {\n const code = await runLint({\n path: path ?? \".sightmap\",\n cwd: program.opts<{ cwd: string }>().cwd,\n json: opts.json === true,\n strict: opts.strict === true,\n ...(opts.rules !== undefined ? { rules: opts.rules } : {}),\n });\n process.exit(code);\n });\n\nprogram\n .command(\"check [path]\")\n .description(\"Run schema + quality checks (combined validate + lint).\")\n .option(\"--json\", \"machine-readable output\")\n .option(\"--level <level>\", \"'schema' or 'quality' (default 'quality')\", \"quality\")\n .option(\"--stdin\", \"read sightmap content from stdin instead of a path\")\n .action(\n async (\n path: string | undefined,\n opts: { json?: boolean; level?: string; stdin?: boolean },\n ) => {\n const level: \"schema\" | \"quality\" = opts.level === \"schema\" ? \"schema\" : \"quality\";\n if (opts.stdin === true) {\n const stdinCode = await runCheckFromStdin({\n level,\n json: opts.json === true,\n });\n process.exit(stdinCode);\n }\n const code = await runCheck({\n path: path ?? \".sightmap\",\n cwd: program.opts<{ cwd: string }>().cwd,\n level,\n json: opts.json === true,\n });\n process.exit(code);\n },\n );\n\nprogram\n .command(\"match <url> [path]\")\n .description(\"Resolve sightmap context for a URL.\")\n .option(\"--method <m>\", \"HTTP method filter for requests\")\n .option(\"--json\", \"machine-readable output\")\n .option(\"--require-view\", \"exit 1 if no view matched\")\n .action(\n async (\n url: string,\n path: string | undefined,\n opts: { method?: string; json?: boolean; requireView?: boolean },\n ) => {\n const code = await runMatch({\n url,\n path: path ?? \".sightmap\",\n cwd: program.opts<{ cwd: string }>().cwd,\n json: opts.json === true,\n requireView: opts.requireView === true,\n ...(opts.method !== undefined ? { method: opts.method } : {}),\n });\n process.exit(code);\n },\n );\n\nprogram\n .command(\"explain <query> [path]\")\n .description(\"Look up sightmap entries by name and/or source path.\")\n .option(\"--by <kind>\", \"scope to 'name' or 'path'\")\n .option(\"--type <kind>\", \"scope to 'view', 'component', or 'request'\")\n .option(\"--json\", \"machine-readable output\")\n .option(\"--require-hit\", \"exit 1 if zero hits\")\n .action(\n async (\n query: string,\n path: string | undefined,\n opts: {\n by?: \"name\" | \"path\";\n type?: \"view\" | \"component\" | \"request\";\n json?: boolean;\n requireHit?: boolean;\n },\n ) => {\n const code = await runExplain({\n query,\n path: path ?? \".sightmap\",\n cwd: program.opts<{ cwd: string }>().cwd,\n json: opts.json === true,\n requireHit: opts.requireHit === true,\n ...(opts.by !== undefined ? { by: opts.by } : {}),\n ...(opts.type !== undefined ? { type: opts.type } : {}),\n });\n process.exit(code);\n },\n );\n\nprogram\n .command(\"check-conventions [path]\")\n .description(\"Validate repo filename conventions (SEPs, conformance fixtures).\")\n .option(\"--json\", \"machine-readable output\")\n .action(async (path: string | undefined, opts: { json?: boolean }) => {\n const code = await runCheckConventions({\n path: path ?? \".\",\n cwd: program.opts<{ cwd: string }>().cwd,\n json: opts.json === true,\n });\n process.exit(code);\n });\n\nprogram.parseAsync(process.argv).catch((err: unknown) => {\n process.stderr.write(`fatal: ${err instanceof Error ? err.message : String(err)}\\n`);\n process.exit(2);\n});\n","import { readFile } from \"node:fs/promises\";\nimport { resolve, relative } from \"node:path\";\nimport { validate } from \"../validate.js\";\nimport { collectYamlFiles } from \"./_fsHelpers.js\";\nimport { makeEnvelope, emitJson } from \"./envelope.js\";\nimport { formatValidate } from \"./humanFormat.js\";\nimport type { Diagnostic } from \"../diagnostics.js\";\n\nexport interface RunValidateOptions {\n path: string;\n cwd: string;\n json: boolean;\n}\n\nexport async function runValidate(opts: RunValidateOptions): Promise<number> {\n const dir = resolve(opts.cwd, opts.path);\n const files = (await collectYamlFiles(dir)).sort();\n const fileResults: { path: string; ok: boolean }[] = [];\n const diagnostics: Diagnostic[] = [];\n\n for (const file of files) {\n const relPath = relative(opts.cwd, file);\n const text = await readFile(file, \"utf8\");\n const r = validate(text, { sourceFile: relPath });\n fileResults.push({ path: relPath, ok: r.ok });\n if (!r.ok) diagnostics.push(...r.diagnostics);\n }\n\n const ok = diagnostics.length === 0;\n if (opts.json) {\n emitJson(\n makeEnvelope({\n command: \"validate\",\n ok,\n diagnostics,\n result: { files: fileResults },\n }),\n );\n } else {\n process.stdout.write(formatValidate({ files: fileResults }, diagnostics) + \"\\n\");\n }\n return ok ? 0 : 1;\n}\n","import yaml from \"js-yaml\";\nimport { Ajv2020 } from \"ajv/dist/2020.js\";\nimport type { ValidateResult, SightmapFragment } from \"./sightmap.js\";\nimport {\n PARSE_ERROR,\n SCHEMA_VALIDATION_FAILED,\n UNKNOWN_VERSION,\n type Diagnostic,\n} from \"./diagnostics.js\";\nimport { parse } from \"./parse.js\";\nimport { existsSync, readFileSync } from \"node:fs\";\nimport { fileURLToPath } from \"node:url\";\nimport { resolve, dirname } from \"node:path\";\n\n// Lazily initialized to avoid crashing when this module is bundled into a\n// browser context (fileURLToPath is Node-only). validate() itself is Node-only\n// and should never be called from browser code.\nlet _ajvValidate: ReturnType<InstanceType<typeof Ajv2020>[\"compile\"]> | undefined;\n\nfunction getValidator() {\n if (_ajvValidate) return _ajvValidate;\n // These Node APIs run only on first call to validate(), not at module load.\n const __dirname = dirname(fileURLToPath(import.meta.url));\n // Resolve the vendored schema in two contexts:\n // - Production (published package): bundled file lives at dist/index.js, schema at dist/vendored/.\n // - Dev (vitest, source files): validate.ts lives at src/, schema at ../vendored/.\n const schemaCandidates = [\n resolve(__dirname, \"./vendored/sightmap.schema.json\"),\n resolve(__dirname, \"../vendored/sightmap.schema.json\"),\n ];\n const schemaPath = schemaCandidates.find((p) => existsSync(p));\n if (schemaPath === undefined) {\n throw new Error(\n `vendored sightmap.schema.json not found. Looked in: ${schemaCandidates.join(\", \")}`,\n );\n }\n const schema = JSON.parse(readFileSync(schemaPath, \"utf8\")) as unknown;\n const ajv = new Ajv2020({ allErrors: true, strict: false });\n _ajvValidate = ajv.compile(schema as object);\n return _ajvValidate;\n}\n\nexport interface ValidateOptions {\n sourceFile?: string;\n}\n\nexport function validate(input: string | object, opts: ValidateOptions = {}): ValidateResult {\n const diagnostics: Diagnostic[] = [];\n let doc: unknown;\n\n if (typeof input === \"string\") {\n try {\n doc = yaml.load(input);\n } catch (err) {\n const e = err as { message?: string; mark?: { line?: number; column?: number } };\n diagnostics.push({\n severity: \"error\",\n code: PARSE_ERROR,\n message: e.message ?? \"YAML parse error\",\n ...(opts.sourceFile !== undefined ? { file: opts.sourceFile } : {}),\n ...(e.mark\n ? { loc: { line: (e.mark.line ?? 0) + 1, column: (e.mark.column ?? 0) + 1 } }\n : {}),\n });\n return { ok: false, diagnostics };\n }\n } else {\n doc = input;\n }\n\n if (doc === null || typeof doc !== \"object\" || Array.isArray(doc)) {\n diagnostics.push({\n severity: \"error\",\n code: SCHEMA_VALIDATION_FAILED,\n message: \"Expected document root to be an object\",\n ...(opts.sourceFile !== undefined ? { file: opts.sourceFile } : {}),\n });\n return { ok: false, diagnostics };\n }\n\n const obj = doc as Record<string, unknown>;\n if (obj[\"version\"] !== 1) {\n diagnostics.push({\n severity: \"error\",\n code: UNKNOWN_VERSION,\n message:\n obj[\"version\"] === undefined\n ? \"Missing required `version` field\"\n : `Unsupported version: ${String(obj[\"version\"])} (expected 1)`,\n ...(opts.sourceFile !== undefined ? { file: opts.sourceFile } : {}),\n path: \"/version\",\n });\n return { ok: false, diagnostics };\n }\n\n const ajvValidate = getValidator();\n const ok = ajvValidate(obj);\n if (!ok) {\n for (const e of ajvValidate.errors ?? []) {\n diagnostics.push({\n severity: \"error\",\n code: SCHEMA_VALIDATION_FAILED,\n message: `${e.instancePath || \"(root)\"} ${e.message ?? \"\"}`.trim(),\n ...(opts.sourceFile !== undefined ? { file: opts.sourceFile } : {}),\n ...(e.instancePath ? { path: e.instancePath } : {}),\n });\n }\n return { ok: false, diagnostics };\n }\n\n // Schema-valid: now run parse() (which normalizes selectors and brands).\n let value: SightmapFragment;\n try {\n value = parse(obj, opts.sourceFile !== undefined ? { sourceFile: opts.sourceFile } : {});\n } catch (err) {\n diagnostics.push({\n severity: \"error\",\n code: SCHEMA_VALIDATION_FAILED,\n message: err instanceof Error ? err.message : String(err),\n ...(opts.sourceFile !== undefined ? { file: opts.sourceFile } : {}),\n });\n return { ok: false, diagnostics };\n }\n return { ok: true, value };\n}\n","export type Severity = \"error\" | \"warning\" | \"info\";\n\nexport interface Diagnostic {\n severity: Severity;\n code: string;\n message: string;\n file?: string;\n path?: string;\n loc?: { line: number; column: number };\n source?: string;\n}\n\n// Stable, kebab-case codes. Renames require an SEP.\nexport const PARSE_ERROR = \"parse-error\";\nexport const SCHEMA_VALIDATION_FAILED = \"schema-validation-failed\";\nexport const UNKNOWN_VERSION = \"unknown-version\";\nexport const MERGE_COLLISION_VIEW = \"merge-collision-view\";\nexport const MERGE_COLLISION_COMPONENT = \"merge-collision-component\";\nexport const DUPLICATE_VIEW_NAME = \"duplicate-view-name\";\nexport const DUPLICATE_ROUTE = \"duplicate-route\";\nexport const ROUTE_SHADOWING = \"route-shadowing\";\nexport const UNKNOWN_SOURCE = \"unknown-source\";\nexport const SELECTOR_SYNTAX = \"selector-syntax\";\n\n// Repo-conventions codes (WI-6). See docs/repo-conventions.md in the spec repo.\nexport const CONVENTION_SEP_FILENAME = \"convention.sep-filename\";\nexport const CONVENTION_FIXTURE_DIRNAME = \"convention.fixture-dirname\";\nexport const CONVENTION_INVALID_SLUG = \"convention.invalid-slug\";\nexport const CONVENTION_UNEXPECTED_FILE = \"convention.unexpected-file\";\n","import yaml from \"js-yaml\";\nimport type { SightmapFragment } from \"./sightmap.js\";\nimport type { Component } from \"./types.js\";\n\nexport interface ParseOptions {\n /** Optional source file path; recorded on the fragment for canonical-order merging. */\n sourceFile?: string;\n}\n\n/**\n * Parse a single sightmap file (YAML string or pre-parsed object).\n * Throws on parse error, missing version, or version mismatch.\n * Normalizes `selector: string` to `selector: [string]` everywhere.\n */\nexport function parse(input: string | object, opts: ParseOptions = {}): SightmapFragment {\n let doc: unknown;\n if (typeof input === \"string\") {\n try {\n doc = yaml.load(input);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n throw new Error(`YAML parse error: ${msg}`);\n }\n } else {\n // Shallow-clone caller's object so we don't mutate it.\n doc = { ...input };\n }\n\n if (doc === null || typeof doc !== \"object\" || Array.isArray(doc)) {\n throw new Error(\"Expected sightmap document to be an object at the root\");\n }\n\n const obj = doc as Record<string, unknown>;\n if (obj[\"version\"] === undefined) {\n throw new Error(\"Missing required `version` field\");\n }\n if (obj[\"version\"] !== 1) {\n throw new Error(`Unsupported version: ${String(obj[\"version\"])} (expected 1)`);\n }\n\n // Normalize selectors recursively. Spread each view to avoid mutating\n // shared view objects when the caller passed a pre-parsed input.\n if (Array.isArray(obj[\"components\"])) {\n obj[\"components\"] = (obj[\"components\"] as Component[]).map(normalizeComponent);\n }\n if (Array.isArray(obj[\"views\"])) {\n obj[\"views\"] = (obj[\"views\"] as Array<Record<string, unknown>>).map((v) => {\n const out = { ...v };\n if (Array.isArray(out[\"components\"])) {\n out[\"components\"] = (out[\"components\"] as Component[]).map(normalizeComponent);\n }\n return out;\n });\n }\n\n const fragment = {\n ...obj,\n __brand: \"SightmapFragment\" as const,\n ...(opts.sourceFile !== undefined ? { __sourceFile: opts.sourceFile } : {}),\n } as SightmapFragment;\n return fragment;\n}\n\nfunction normalizeComponent(c: Component): Component {\n // Common migration error: `selectors` (plural) instead of `selector` (singular).\n // The schema only accepts singular `selector`; the singular field already takes\n // a string or string-array, so a plural alias would be redundant. Surface\n // explicitly rather than silently dropping the value.\n if ((c as unknown as Record<string, unknown>)[\"selectors\"] !== undefined && c.selector === undefined) {\n const name = (c as { name?: string }).name ?? \"(unnamed)\";\n throw new Error(\n `Component \"${name}\": use \\`selector\\` (singular), not \\`selectors\\` (plural). ` +\n `\\`selector\\` accepts either a single string or an array of strings.`,\n );\n }\n const sel = c.selector;\n const normalized: Component = {\n ...c,\n selector: typeof sel === \"string\" ? [sel] : (sel as [string, ...string[]]),\n };\n if (Array.isArray(c.children)) {\n normalized.children = c.children.map(normalizeComponent);\n }\n return normalized;\n}\n","import { readdir } from \"node:fs/promises\";\nimport { join, extname } from \"node:path\";\n\nexport async function collectYamlFiles(dir: string): Promise<string[]> {\n const out: string[] = [];\n const entries = await readdir(dir, { withFileTypes: true });\n for (const e of entries) {\n const p = join(dir, e.name);\n if (e.isDirectory()) {\n out.push(...(await collectYamlFiles(p)));\n } else if (e.isFile()) {\n const ext = extname(p).toLowerCase();\n if (ext === \".yaml\" || ext === \".yml\") out.push(p);\n }\n }\n return out;\n}\n","import type { Diagnostic } from \"../diagnostics.js\";\n\nexport type Command = \"validate\" | \"lint\" | \"match\" | \"explain\" | \"check\" | \"check-conventions\";\n\nexport interface Envelope<R = unknown> {\n ok: boolean;\n command: Command;\n diagnostics: Diagnostic[];\n result: R;\n}\n\nexport function makeEnvelope<R>(args: {\n command: Command;\n ok: boolean;\n diagnostics: Diagnostic[];\n result: R;\n}): Envelope<R> {\n return {\n ok: args.ok,\n command: args.command,\n diagnostics: [...args.diagnostics],\n result: args.result,\n };\n}\n\nexport function emitJson<R>(env: Envelope<R>): void {\n process.stdout.write(JSON.stringify(env, null, 2) + \"\\n\");\n}\n","import type { Diagnostic } from \"../diagnostics.js\";\nimport type { MatchResult, ExplainResult } from \"../sightmap.js\";\n\nconst SEV_TAG: Record<Diagnostic[\"severity\"], string> = {\n error: \"ERROR\",\n warning: \"warn \",\n info: \"info \",\n};\n\nexport function formatDiagnostics(diags: Diagnostic[]): string {\n if (diags.length === 0) return \"\";\n const lines = diags.map((d) => {\n const where = [d.file, d.path, d.loc ? `${d.loc.line}:${d.loc.column}` : null]\n .filter(Boolean)\n .join(\" \");\n return `${SEV_TAG[d.severity]} ${d.code} ${where}\\n ${d.message}`;\n });\n return lines.join(\"\\n\");\n}\n\nexport function formatValidate(result: { files: { path: string; ok: boolean }[] }, diags: Diagnostic[]): string {\n const fileLines = result.files.map((f) => `${f.ok ? \"ok \" : \"FAIL \"} ${f.path}`).join(\"\\n\");\n const diagLines = formatDiagnostics(diags);\n return [fileLines, \"\", diagLines, \"\", `${result.files.length} file(s) checked.`].filter(Boolean).join(\"\\n\");\n}\n\nexport function formatLint(diags: Diagnostic[]): string {\n if (diags.length === 0) return \"lint: no issues.\";\n return formatDiagnostics(diags);\n}\n\nexport function formatMatch(r: MatchResult): string {\n const lines: string[] = [];\n if (r.view === null) {\n lines.push(\"no view matched.\");\n } else {\n lines.push(`view ${r.view.name} (route ${r.view.route})`);\n if (r.view.source !== undefined) lines.push(` source ${r.view.source}`);\n }\n for (const c of r.components) {\n const chain = c.parentChain.length > 0 ? ` (in ${c.parentChain.join(\" > \")})` : \"\";\n lines.push(`comp ${c.name}${chain} ${c.scope} selector=${c.selector.join(\" | \")}`);\n }\n for (const q of r.requests) {\n lines.push(`req ${q.name} ${q.method ?? \"ANY\"} ${q.route}`);\n }\n if (r.memory.length > 0) {\n lines.push(\"\");\n lines.push(\"[Guide]\");\n for (const m of r.memory) lines.push(` - ${m}`);\n }\n return lines.join(\"\\n\");\n}\n\nexport function formatCheckConventions(diags: Diagnostic[]): string {\n if (diags.length === 0) return \"check-conventions: ok\";\n return formatDiagnostics(diags) + `\\n\\n${diags.length} convention violation(s).`;\n}\n\nexport function formatExplain(r: ExplainResult): string {\n if (r.hits.length === 0) return `no hits for \"${r.query}\".`;\n const lines = [`${r.hits.length} hit(s) for \"${r.query}\":`];\n for (const h of r.hits) {\n const e = h.entry as { name?: string; source?: string };\n lines.push(` ${h.type} ${e.name ?? \"?\"} matchedAs=${h.matchedAs}${e.source !== undefined ? ` src=${e.source}` : \"\"}`);\n }\n return lines.join(\"\\n\");\n}\n","import { resolve } from \"node:path\";\nimport { loadDirectory } from \"../loadDirectory.js\";\nimport { lint } from \"../lint.js\";\nimport { makeEnvelope, emitJson } from \"./envelope.js\";\nimport { formatLint } from \"./humanFormat.js\";\nimport type { Diagnostic } from \"../diagnostics.js\";\n\nexport interface RunLintOptions {\n path: string;\n cwd: string;\n json: boolean;\n strict: boolean;\n rules?: string;\n}\n\nexport async function runLint(opts: RunLintOptions): Promise<number> {\n const dir = resolve(opts.cwd, opts.path);\n const sightmap = await loadDirectory(dir, { diagnosticRoot: opts.cwd });\n\n const ruleConfig = parseRules(opts.rules);\n const lintDiags = await lint(sightmap, {\n ...(ruleConfig !== undefined ? { rules: ruleConfig } : {}),\n root: opts.cwd,\n });\n\n const all: Diagnostic[] = [...sightmap.diagnostics, ...lintDiags];\n const hasError = all.some((d) => d.severity === \"error\");\n const hasWarning = all.some((d) => d.severity === \"warning\");\n\n let code = 0;\n if (hasError) code = 1;\n else if (opts.strict && hasWarning) code = 1;\n\n if (opts.json) {\n emitJson(\n makeEnvelope({\n command: \"lint\",\n ok: code === 0,\n diagnostics: all,\n result: {},\n }),\n );\n } else {\n process.stdout.write(formatLint(all) + \"\\n\");\n }\n return code;\n}\n\nfunction parseRules(spec: string | undefined): Record<string, boolean> | undefined {\n if (spec === undefined) return undefined;\n const out: Record<string, boolean> = {};\n for (const tok of spec.split(\",\").map((s) => s.trim()).filter(Boolean)) {\n if (tok.startsWith(\"-\")) out[tok.slice(1)] = false;\n else out[tok] = true;\n }\n return out;\n}\n","import { readFile, readdir } from \"node:fs/promises\";\nimport { join, extname, relative, resolve } from \"node:path\";\nimport { merge } from \"./merge.js\";\nimport { validate } from \"./validate.js\";\nimport type { Sightmap, SightmapFragment } from \"./sightmap.js\";\nimport type { Diagnostic } from \"./diagnostics.js\";\n\nexport interface LoadDirectoryOptions {\n /** Optional root for `file` fields in diagnostics. Default: the directory passed in. */\n diagnosticRoot?: string;\n}\n\n/**\n * Recursively load all *.yaml/*.yml files under `dir`, validate each, and merge.\n *\n * Files that fail validation contribute their diagnostics to the merged Sightmap's\n * `diagnostics` array but are otherwise skipped. This keeps loadDirectory total —\n * a single bad file doesn't abort the whole load.\n */\nexport async function loadDirectory(\n dir: string,\n opts: LoadDirectoryOptions = {},\n): Promise<Sightmap> {\n const absDir = resolve(dir);\n const root = opts.diagnosticRoot !== undefined ? resolve(opts.diagnosticRoot) : absDir;\n\n const files = await collectYamlFiles(absDir);\n files.sort(); // alphabetical canonical order\n\n const fragments: SightmapFragment[] = [];\n const loadDiagnostics: Diagnostic[] = [];\n\n for (const file of files) {\n const relPath = relative(root, file);\n const text = await readFile(file, \"utf8\");\n const r = validate(text, { sourceFile: relPath });\n if (r.ok) {\n fragments.push(r.value);\n } else {\n loadDiagnostics.push(...r.diagnostics);\n }\n }\n\n const merged = merge(fragments);\n return {\n ...merged,\n diagnostics: [...loadDiagnostics, ...merged.diagnostics],\n };\n}\n\nasync function collectYamlFiles(dir: string): Promise<string[]> {\n const out: string[] = [];\n const entries = await readdir(dir, { withFileTypes: true });\n for (const e of entries) {\n const p = join(dir, e.name);\n if (e.isDirectory()) {\n out.push(...(await collectYamlFiles(p)));\n } else if (e.isFile()) {\n const ext = extname(p).toLowerCase();\n if (ext === \".yaml\" || ext === \".yml\") out.push(p);\n }\n }\n return out;\n}\n","import type { SightmapFragment, Sightmap } from \"./sightmap.js\";\nimport type { View, Component, Request } from \"./types.js\";\nimport {\n MERGE_COLLISION_VIEW,\n MERGE_COLLISION_COMPONENT,\n type Diagnostic,\n} from \"./diagnostics.js\";\n\n/**\n * Merge fragments into a queryable Sightmap.\n *\n * Canonical order: fragments are sorted by `__sourceFile` (code-point order; locale-independent\n * for cross-environment determinism). Fragments without a `__sourceFile` sort first, and ES2019\n * sort stability preserves their input order. Within each fragment, declaration order is\n * preserved. The merged collection's order = (sourceFile order, then declaration order).\n *\n * Duplicate view names produce `merge-collision-view` warnings; duplicate global component\n * names produce `merge-collision-component`. The first occurrence wins.\n *\n * Returned arrays are fresh, but element objects (View/Component/Request) are shared with\n * the input fragments — callers must not mutate them.\n */\nexport function merge(fragments: SightmapFragment[]): Sightmap {\n const sorted = [...fragments].sort((a, b) => {\n const aFile = a.__sourceFile ?? \"\";\n const bFile = b.__sourceFile ?? \"\";\n return aFile < bFile ? -1 : aFile > bFile ? 1 : 0;\n });\n\n const views: View[] = [];\n const globalComponents: Component[] = [];\n const globalRequests: Request[] = [];\n const fileMemory: { memory: string[]; sourceFile: string }[] = [];\n const diagnostics: Diagnostic[] = [];\n\n const seenViewNames = new Map<string, string>(); // name → sourceFile\n const seenComponentNames = new Map<string, string>();\n\n for (const f of sorted) {\n const file = f.__sourceFile ?? \"<unknown>\";\n\n for (const v of f.views ?? []) {\n const prev = seenViewNames.get(v.name);\n if (prev !== undefined) {\n diagnostics.push({\n severity: \"warning\",\n code: MERGE_COLLISION_VIEW,\n message: `View name \"${v.name}\" defined in both \"${prev}\" and \"${file}\"; first occurrence wins.`,\n file,\n });\n } else {\n seenViewNames.set(v.name, file);\n }\n views.push(v); // keep all views; first-match-wins is enforced at resolve time\n }\n\n for (const c of f.components ?? []) {\n const prev = seenComponentNames.get(c.name);\n if (prev !== undefined) {\n diagnostics.push({\n severity: \"warning\",\n code: MERGE_COLLISION_COMPONENT,\n message: `Component name \"${c.name}\" defined in both \"${prev}\" and \"${file}\"; first occurrence wins.`,\n file,\n });\n } else {\n seenComponentNames.set(c.name, file);\n }\n globalComponents.push(c);\n }\n\n for (const r of f.requests ?? []) {\n globalRequests.push(r);\n }\n\n if (Array.isArray(f.memory) && f.memory.length > 0) {\n fileMemory.push({ memory: [...f.memory], sourceFile: file });\n }\n }\n\n return {\n version: 1,\n views,\n globalComponents,\n globalRequests,\n fileMemory,\n diagnostics,\n __brand: \"Sightmap\",\n };\n}\n","import type { Sightmap } from \"../sightmap.js\";\nimport { DUPLICATE_VIEW_NAME, type Diagnostic } from \"../diagnostics.js\";\n\nexport function duplicateName(sightmap: Sightmap): Diagnostic[] {\n const seen = new Map<string, number>();\n const out: Diagnostic[] = [];\n sightmap.views.forEach((v) => {\n const count = (seen.get(v.name) ?? 0) + 1;\n seen.set(v.name, count);\n if (count > 1) {\n out.push({\n severity: \"warning\",\n code: DUPLICATE_VIEW_NAME,\n message: `Duplicate view name \"${v.name}\" (occurrence ${count}).`,\n });\n }\n });\n return out;\n}\n","import type { Sightmap } from \"../sightmap.js\";\nimport { DUPLICATE_ROUTE, type Diagnostic } from \"../diagnostics.js\";\n\nexport function duplicateRoute(sightmap: Sightmap): Diagnostic[] {\n const seen = new Map<string, string>(); // route → first-view-name\n const out: Diagnostic[] = [];\n for (const v of sightmap.views) {\n const prev = seen.get(v.route);\n if (prev !== undefined) {\n out.push({\n severity: \"warning\",\n code: DUPLICATE_ROUTE,\n message: `Route \"${v.route}\" is defined by both \"${prev}\" and \"${v.name}\". Only \"${prev}\" will match.`,\n });\n } else {\n seen.set(v.route, v.name);\n }\n }\n return out;\n}\n","import type { Sightmap } from \"../sightmap.js\";\nimport { ROUTE_SHADOWING, type Diagnostic } from \"../diagnostics.js\";\n\n/**\n * Detect routes made unreachable under React Router 7 specificity rules.\n *\n * React Router picks the most specific matching route, not the\n * first-declared. So a wildcard like `/*` does not shadow a more specific\n * route like `/login`, regardless of file/declaration order. A route B is\n * truly shadowed by an earlier route A only when:\n *\n * 1. A and B match the exact same set of URLs (same shape; `*` and `:param`\n * are treated as equivalent placeholders here, since both match a single\n * arbitrary segment), AND\n * 2. A is at least as specific as B at every position. Per-segment\n * specificity: literal > `:param` > `*` > `**`. When scores tie, the\n * earlier-declared route wins React Router's tie-break.\n */\nexport function routeShadowing(sightmap: Sightmap): Diagnostic[] {\n const out: Diagnostic[] = [];\n const views = sightmap.views;\n for (let j = 1; j < views.length; j++) {\n const later = views[j]!;\n const laterKey = matchSetKey(later.route);\n const laterScore = specificity(later.route);\n for (let i = 0; i < j; i++) {\n const earlier = views[i]!;\n if (earlier.route === later.route) continue; // duplicate-route covers this\n if (matchSetKey(earlier.route) !== laterKey) continue;\n if (specificity(earlier.route) < laterScore) continue;\n out.push({\n severity: \"warning\",\n code: ROUTE_SHADOWING,\n message: `Route \"${later.route}\" (view \"${later.name}\") is shadowed by earlier route \"${earlier.route}\" (view \"${earlier.name}\"); they match the same URLs and the earlier route is at least as specific, making this route unreachable.`,\n });\n break; // only report the first shadower\n }\n }\n return out;\n}\n\n/**\n * Canonical \"match-set\" key for a pattern: literal segments are kept; `:param`\n * is normalized to `*` (both match exactly one arbitrary segment); `**` is\n * preserved (variable-depth). Two patterns with the same key match the same\n * set of URLs under the spec's matching rules.\n */\nfunction matchSetKey(route: string): string {\n return route\n .split(\"/\")\n .map((seg) => (seg.startsWith(\":\") ? \"*\" : seg))\n .join(\"/\");\n}\n\n/**\n * Specificity score for a pattern (higher = more specific). Static literals\n * outrank params, params outrank single-segment wildcards, and `**` is the\n * least specific.\n */\nfunction specificity(route: string): number {\n let total = 0;\n for (const seg of route.split(\"/\")) {\n if (seg === \"\" || seg === \"**\") continue;\n if (seg === \"*\") total += 1;\n else if (seg.startsWith(\":\")) total += 2;\n else total += 3;\n }\n return total;\n}\n","import { stat } from \"node:fs/promises\";\nimport { resolve } from \"node:path\";\nimport type { Sightmap } from \"../sightmap.js\";\nimport type { Component } from \"../types.js\";\nimport { UNKNOWN_SOURCE, type Diagnostic } from \"../diagnostics.js\";\n\nexport interface UnknownSourceOptions {\n /** Filesystem root for resolving `source:` paths. Defaults to process.cwd(). */\n root?: string;\n}\n\nexport async function unknownSource(\n sightmap: Sightmap,\n opts: UnknownSourceOptions = {},\n): Promise<Diagnostic[]> {\n const root = opts.root ?? process.cwd();\n const out: Diagnostic[] = [];\n const seen = new Set<string>();\n\n const check = async (source: string | undefined, label: string): Promise<void> => {\n if (source === undefined) return;\n if (seen.has(source)) return;\n seen.add(source);\n try {\n await stat(resolve(root, source));\n } catch {\n out.push({\n severity: \"warning\",\n code: UNKNOWN_SOURCE,\n message: `${label}: source path \"${source}\" does not exist on disk (relative to ${root}).`,\n });\n }\n };\n\n for (const v of sightmap.views) {\n await check(v.source, `view \"${v.name}\"`);\n for (const c of v.components ?? []) {\n await walkComponent(c, `component \"${c.name}\"`, check);\n }\n }\n for (const c of sightmap.globalComponents) {\n await walkComponent(c, `component \"${c.name}\"`, check);\n }\n for (const r of sightmap.globalRequests) {\n await check(r.source, `request \"${r.name}\"`);\n }\n\n return out;\n}\n\nasync function walkComponent(\n c: Component,\n label: string,\n check: (source: string | undefined, label: string) => Promise<void>,\n): Promise<void> {\n await check(c.source, label);\n for (const child of c.children ?? []) {\n await walkComponent(child, `component \"${child.name}\"`, check);\n }\n}\n","import { parse as parseSelector } from \"css-what\";\nimport type { Sightmap } from \"../sightmap.js\";\nimport type { Component } from \"../types.js\";\nimport { SELECTOR_SYNTAX, type Diagnostic } from \"../diagnostics.js\";\n\nexport function selectorSyntax(sightmap: Sightmap): Diagnostic[] {\n const out: Diagnostic[] = [];\n const visit = (c: Component, scope: string): void => {\n const selectors: string[] = Array.isArray(c.selector)\n ? c.selector\n : [c.selector as unknown as string];\n selectors.forEach((sel, i) => {\n try {\n parseSelector(sel);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n out.push({\n severity: \"warning\",\n code: SELECTOR_SYNTAX,\n message: `${scope}: selector at index ${i} (\"${sel}\") failed to parse: ${msg}`,\n });\n }\n });\n for (const child of c.children ?? []) visit(child, `component \"${child.name}\"`);\n };\n\n for (const c of sightmap.globalComponents) visit(c, `component \"${c.name}\"`);\n for (const v of sightmap.views) {\n for (const c of v.components ?? []) visit(c, `component \"${c.name}\"`);\n }\n return out;\n}\n","import type { Sightmap } from \"./sightmap.js\";\nimport type { Diagnostic } from \"./diagnostics.js\";\nimport { duplicateName } from \"./lintRules/duplicateName.js\";\nimport { duplicateRoute } from \"./lintRules/duplicateRoute.js\";\nimport { routeShadowing } from \"./lintRules/routeShadowing.js\";\nimport { unknownSource } from \"./lintRules/unknownSource.js\";\nimport { selectorSyntax } from \"./lintRules/selectorSyntax.js\";\n\nexport interface LintOptions {\n /** Per-rule enable/disable. Default: all rules enabled. */\n rules?: Record<string, boolean>;\n /** Filesystem root for `unknown-source`. Defaults to process.cwd(). */\n root?: string;\n}\n\nexport async function lint(sightmap: Sightmap, opts: LintOptions = {}): Promise<Diagnostic[]> {\n const enabled = (code: string): boolean => opts.rules?.[code] !== false;\n const out: Diagnostic[] = [];\n if (enabled(\"duplicate-view-name\")) out.push(...duplicateName(sightmap));\n if (enabled(\"duplicate-route\")) out.push(...duplicateRoute(sightmap));\n if (enabled(\"route-shadowing\")) out.push(...routeShadowing(sightmap));\n if (enabled(\"selector-syntax\")) out.push(...selectorSyntax(sightmap));\n if (enabled(\"unknown-source\")) {\n out.push(...(await unknownSource(sightmap, opts.root !== undefined ? { root: opts.root } : {})));\n }\n return out;\n}\n","import { resolve } from \"node:path\";\nimport { loadDirectory } from \"../loadDirectory.js\";\nimport { match } from \"../match.js\";\nimport { makeEnvelope, emitJson } from \"./envelope.js\";\nimport { formatMatch } from \"./humanFormat.js\";\n\nexport interface RunMatchOptions {\n url: string;\n path: string;\n cwd: string;\n json: boolean;\n method?: string;\n requireView: boolean;\n}\n\nexport async function runMatch(opts: RunMatchOptions): Promise<number> {\n const dir = resolve(opts.cwd, opts.path);\n const sightmap = await loadDirectory(dir, { diagnosticRoot: opts.cwd });\n const result = match(sightmap, {\n url: opts.url,\n ...(opts.method !== undefined ? { method: opts.method } : {}),\n });\n\n const code = opts.requireView && result.view === null ? 1 : 0;\n if (opts.json) {\n emitJson(\n makeEnvelope({\n command: \"match\",\n ok: code === 0,\n diagnostics: [...sightmap.diagnostics],\n result,\n }),\n );\n } else {\n process.stdout.write(formatMatch(result) + \"\\n\");\n }\n return code;\n}\n","/**\n * Canonicalize a URL or pathname for matching.\n * - Accepts absolute URL or pathname.\n * - Strips scheme, host, query string, and fragment.\n * - Normalizes trailing slashes (except for the root \"/\").\n */\nexport function canonicalizeUrl(input: string): string {\n let s = input;\n // Strip absolute prefix.\n const protoMatch = /^[a-z][a-z0-9+.-]*:\\/\\/[^/]*/i.exec(s);\n if (protoMatch) {\n s = s.slice(protoMatch[0].length) || \"/\";\n }\n // Strip fragment.\n const hash = s.indexOf(\"#\");\n if (hash !== -1) s = s.slice(0, hash);\n // Strip query.\n const q = s.indexOf(\"?\");\n if (q !== -1) s = s.slice(0, q);\n // Trailing slash.\n if (s.length > 1 && s.endsWith(\"/\")) s = s.slice(0, -1);\n return s;\n}\n\n/**\n * Test whether a glob route pattern matches a URL pathname.\n * Pattern syntax (per spec):\n * - Literal segments match themselves\n * - \"*\" matches exactly one path segment\n * - \"**\" matches any depth of segments\n * - \":param\" segments normalize to \"*\"\n * - Matching is case-sensitive\n * - Trailing slashes ignored\n */\nexport function routeMatch(pattern: string, url: string): boolean {\n const p = normalizePattern(pattern);\n const u = canonicalizeUrl(url);\n const patternSegs = splitSegments(p);\n const urlSegs = splitSegments(u);\n return matchSegs(patternSegs, urlSegs);\n}\n\nfunction normalizePattern(p: string): string {\n // Replace \":param\" segments with \"*\"\n let s = p\n .split(\"/\")\n .map((seg) => (seg.startsWith(\":\") ? \"*\" : seg))\n .join(\"/\");\n if (s.length > 1 && s.endsWith(\"/\")) s = s.slice(0, -1);\n return s;\n}\n\nfunction splitSegments(path: string): string[] {\n if (path === \"/\" || path === \"\") return [];\n const trimmed = path.startsWith(\"/\") ? path.slice(1) : path;\n return trimmed.split(\"/\");\n}\n\nfunction matchSegs(pattern: string[], url: string[]): boolean {\n if (pattern.length === 0 && url.length === 0) return true;\n if (pattern.length === 0) return false;\n\n const head = pattern[0]!;\n const rest = pattern.slice(1);\n\n if (head === \"**\") {\n // Match zero or more segments.\n if (rest.length === 0) return true;\n for (let i = 0; i <= url.length; i++) {\n if (matchSegs(rest, url.slice(i))) return true;\n }\n return false;\n }\n\n if (url.length === 0) return false;\n if (head === \"*\" || head === url[0]) {\n return matchSegs(rest, url.slice(1));\n }\n return false;\n}\n","import type {\n Sightmap,\n MatchResult,\n ExplainHit,\n ResolvedView,\n ResolvedComponent,\n ResolvedRequest,\n} from \"./sightmap.js\";\nimport type { View, Component, Request } from \"./types.js\";\nimport { routeMatch } from \"./routeMatch.js\";\n\nexport function resolveByUrl(\n sightmap: Sightmap,\n url: string,\n method?: string,\n): MatchResult {\n // First-match-wins on views.\n let matchedView: View | null = null;\n for (const v of sightmap.views) {\n if (routeMatch(v.route, url)) {\n matchedView = v;\n break;\n }\n }\n\n const components: ResolvedComponent[] = [];\n for (const c of sightmap.globalComponents) {\n components.push(...flattenComponent(c, [], \"global\", undefined));\n }\n if (matchedView !== null && Array.isArray(matchedView.components)) {\n for (const c of matchedView.components) {\n components.push(...flattenComponent(c, [], \"view-scoped\", matchedView.name));\n }\n }\n\n const requests: ResolvedRequest[] = [];\n const requestPool: Request[] = [\n ...sightmap.globalRequests,\n ...((matchedView?.requests ?? [])),\n ];\n for (const req of requestPool) {\n if (!routeMatch(req.route, url)) continue;\n if (method !== undefined && req.method !== undefined && req.method !== method) continue;\n requests.push(toResolvedRequest(req));\n }\n\n const memory: string[] = [];\n for (const fm of sightmap.fileMemory) memory.push(...fm.memory);\n if (matchedView?.memory) memory.push(...matchedView.memory);\n\n return {\n view: matchedView !== null ? toResolvedView(matchedView) : null,\n components,\n requests,\n memory,\n };\n}\n\nexport function resolveByName(sightmap: Sightmap, name: string): ExplainHit[] {\n const hits: ExplainHit[] = [];\n for (const v of sightmap.views) {\n if (v.name === name) hits.push({ type: \"view\", matchedAs: \"name\", entry: toResolvedView(v) });\n }\n for (const c of sightmap.globalComponents) {\n for (const rc of flattenComponent(c, [], \"global\", undefined)) {\n if (rc.name === name) hits.push({ type: \"component\", matchedAs: \"name\", entry: rc });\n }\n }\n for (const v of sightmap.views) {\n for (const c of v.components ?? []) {\n for (const rc of flattenComponent(c, [], \"view-scoped\", v.name)) {\n if (rc.name === name) hits.push({ type: \"component\", matchedAs: \"name\", entry: rc });\n }\n }\n }\n for (const r of sightmap.globalRequests) {\n if (r.name === name) hits.push({ type: \"request\", matchedAs: \"name\", entry: toResolvedRequest(r) });\n }\n for (const v of sightmap.views) {\n for (const r of v.requests ?? []) {\n if (r.name === name) hits.push({ type: \"request\", matchedAs: \"name\", entry: toResolvedRequest(r) });\n }\n }\n return hits;\n}\n\nexport function resolveBySourcePath(sightmap: Sightmap, path: string): ExplainHit[] {\n const hits: ExplainHit[] = [];\n for (const v of sightmap.views) {\n if (v.source === path) hits.push({ type: \"view\", matchedAs: \"path\", entry: toResolvedView(v) });\n }\n for (const c of sightmap.globalComponents) {\n for (const rc of flattenComponent(c, [], \"global\", undefined)) {\n if (rc.source === path) hits.push({ type: \"component\", matchedAs: \"path\", entry: rc });\n }\n }\n for (const v of sightmap.views) {\n for (const c of v.components ?? []) {\n for (const rc of flattenComponent(c, [], \"view-scoped\", v.name)) {\n if (rc.source === path) hits.push({ type: \"component\", matchedAs: \"path\", entry: rc });\n }\n }\n }\n for (const r of sightmap.globalRequests) {\n if (r.source === path) hits.push({ type: \"request\", matchedAs: \"path\", entry: toResolvedRequest(r) });\n }\n return hits;\n}\n\nfunction flattenComponent(\n c: Component,\n parentChain: string[],\n scope: \"global\" | \"view-scoped\",\n scopedToView: string | undefined,\n): ResolvedComponent[] {\n const out: ResolvedComponent[] = [];\n const selector = Array.isArray(c.selector) ? c.selector : [c.selector as unknown as string];\n out.push({\n name: c.name,\n selector,\n ...(c.source !== undefined ? { source: c.source } : {}),\n ...(c.description !== undefined ? { description: c.description } : {}),\n memory: c.memory ? [...c.memory] : [],\n parentChain: [...parentChain],\n scope,\n ...(scopedToView !== undefined ? { scopedToView } : {}),\n definedIn: { file: \"<unknown>\" },\n });\n for (const child of c.children ?? []) {\n out.push(...flattenComponent(child, [...parentChain, c.name], scope, scopedToView));\n }\n return out;\n}\n\nfunction toResolvedView(v: View): ResolvedView {\n return {\n name: v.name,\n route: v.route,\n ...(v.source !== undefined ? { source: v.source } : {}),\n ...(v.description !== undefined ? { description: v.description } : {}),\n memory: v.memory ? [...v.memory] : [],\n definedIn: { file: \"<unknown>\" },\n };\n}\n\nfunction toResolvedRequest(r: Request): ResolvedRequest {\n return {\n name: r.name,\n route: r.route,\n ...(r.method !== undefined ? { method: r.method } : {}),\n ...(r.source !== undefined ? { source: r.source } : {}),\n ...(r.description !== undefined ? { description: r.description } : {}),\n ...(r.request !== undefined ? { request: { fields: r.request.fields ?? [] } } : {}),\n ...(r.response !== undefined ? { response: { fields: r.response.fields ?? [] } } : {}),\n ...(r.headers !== undefined ? { headers: r.headers } : {}),\n memory: r.memory ? [...r.memory] : [],\n definedIn: { file: \"<unknown>\" },\n };\n}\n","import type { Sightmap, MatchResult } from \"./sightmap.js\";\nimport { resolveByUrl } from \"./resolver.js\";\n\nexport interface MatchOptions {\n url: string;\n method?: string;\n}\n\nexport function match(sightmap: Sightmap, opts: MatchOptions): MatchResult {\n return resolveByUrl(sightmap, opts.url, opts.method);\n}\n","import { resolve } from \"node:path\";\nimport { loadDirectory } from \"../loadDirectory.js\";\nimport { explain } from \"../explain.js\";\nimport { makeEnvelope, emitJson } from \"./envelope.js\";\nimport { formatExplain } from \"./humanFormat.js\";\n\nexport interface RunExplainOptions {\n query: string;\n path: string;\n cwd: string;\n json: boolean;\n by?: \"name\" | \"path\";\n type?: \"view\" | \"component\" | \"request\";\n requireHit: boolean;\n}\n\nexport async function runExplain(opts: RunExplainOptions): Promise<number> {\n const dir = resolve(opts.cwd, opts.path);\n const sightmap = await loadDirectory(dir, { diagnosticRoot: opts.cwd });\n const result = explain(sightmap, opts.query, {\n ...(opts.by !== undefined ? { by: opts.by } : {}),\n ...(opts.type !== undefined ? { type: opts.type } : {}),\n });\n\n const code = opts.requireHit && result.hits.length === 0 ? 1 : 0;\n if (opts.json) {\n emitJson(\n makeEnvelope({\n command: \"explain\",\n ok: code === 0,\n diagnostics: [...sightmap.diagnostics],\n result,\n }),\n );\n } else {\n process.stdout.write(formatExplain(result) + \"\\n\");\n }\n return code;\n}\n","import type { Sightmap, ExplainResult, ExplainHit, ExplainMatchedAs } from \"./sightmap.js\";\nimport { resolveByName, resolveBySourcePath } from \"./resolver.js\";\n\nexport interface ExplainOptions {\n by?: \"name\" | \"path\";\n type?: \"view\" | \"component\" | \"request\";\n}\n\nexport function explain(\n sightmap: Sightmap,\n query: string,\n opts: ExplainOptions = {},\n): ExplainResult {\n const byName = opts.by === \"path\" ? [] : resolveByName(sightmap, query);\n const byPath = opts.by === \"name\" ? [] : resolveBySourcePath(sightmap, query);\n\n // Merge: when an entry appears in both lookups, label as \"name-and-path\".\n // Use entry identity (type + name) as the dedup key.\n const key = (h: ExplainHit): string => `${h.type}:${h.entry.name}`;\n const namedKeys = new Set(byName.map(key));\n const pathKeys = new Set(byPath.map(key));\n\n const merged: ExplainHit[] = [];\n for (const h of byName) {\n if (pathKeys.has(key(h))) {\n merged.push(withMatchedAs(h, \"name-and-path\"));\n } else {\n merged.push(h);\n }\n }\n for (const h of byPath) {\n if (!namedKeys.has(key(h))) {\n merged.push(h);\n }\n // (entries already in both have been pushed above with \"name-and-path\".)\n }\n\n const filtered =\n opts.type !== undefined ? merged.filter((h) => h.type === opts.type) : merged;\n return { query, hits: filtered };\n}\n\nfunction withMatchedAs(h: ExplainHit, matchedAs: ExplainMatchedAs): ExplainHit {\n switch (h.type) {\n case \"view\":\n return { type: \"view\", matchedAs, entry: h.entry };\n case \"component\":\n return { type: \"component\", matchedAs, entry: h.entry };\n case \"request\":\n return { type: \"request\", matchedAs, entry: h.entry };\n }\n}\n","import { resolve, relative } from \"node:path\";\nimport { loadDirectory } from \"../loadDirectory.js\";\nimport { lint } from \"../lint.js\";\nimport { validate } from \"../validate.js\";\nimport { merge } from \"../merge.js\";\nimport { collectYamlFiles } from \"./_fsHelpers.js\";\nimport { makeEnvelope, emitJson } from \"./envelope.js\";\nimport { formatValidate } from \"./humanFormat.js\";\nimport type { Diagnostic } from \"../diagnostics.js\";\n\nexport type CheckLevel = \"schema\" | \"quality\";\n\nexport interface RunCheckOptions {\n path: string;\n cwd: string;\n level: CheckLevel;\n json: boolean;\n}\n\nexport async function runCheck(opts: RunCheckOptions): Promise<number> {\n const dir = resolve(opts.cwd, opts.path);\n const files = (await collectYamlFiles(dir)).sort();\n const sightmap = await loadDirectory(dir, { diagnosticRoot: opts.cwd });\n\n const diagnostics: Diagnostic[] = [...sightmap.diagnostics];\n if (opts.level === \"quality\") {\n const lintDiags = await lint(sightmap, { root: opts.cwd });\n diagnostics.push(...lintDiags);\n }\n\n const flagged = new Set(\n diagnostics.filter((d) => d.file !== undefined).map((d) => d.file!),\n );\n const fileResults = files.map((file) => {\n const relPath = relative(opts.cwd, file);\n return { path: relPath, ok: !flagged.has(relPath) };\n });\n\n const ok = diagnostics.length === 0;\n if (opts.json) {\n emitJson(\n makeEnvelope({\n command: \"check\",\n ok,\n diagnostics,\n result: {\n files: fileResults,\n level: opts.level,\n views: sightmap.views.length,\n },\n }),\n );\n } else {\n process.stdout.write(formatValidate({ files: fileResults }, diagnostics) + \"\\n\");\n }\n return ok ? 0 : 1;\n}\n\nexport interface RunCheckStdinOptions {\n level: CheckLevel;\n json: boolean;\n /** Override stdin for tests; defaults to process.stdin. */\n input?: string;\n}\n\nasync function readAllStdin(): Promise<string> {\n const chunks: Buffer[] = [];\n for await (const chunk of process.stdin) {\n chunks.push(typeof chunk === \"string\" ? Buffer.from(chunk) : chunk);\n }\n return Buffer.concat(chunks).toString(\"utf8\");\n}\n\nexport async function runCheckFromStdin(opts: RunCheckStdinOptions): Promise<number> {\n const text = opts.input ?? (await readAllStdin());\n const sourceFile = \"<stdin>\";\n const diagnostics: Diagnostic[] = [];\n\n const validation = validate(text, { sourceFile });\n let viewCount = 0;\n if (!validation.ok) {\n diagnostics.push(...validation.diagnostics);\n } else {\n const sightmap = merge([validation.value]);\n viewCount = sightmap.views.length;\n if (opts.level === \"quality\") {\n diagnostics.push(...sightmap.diagnostics);\n const lintDiags = await lint(sightmap);\n diagnostics.push(...lintDiags);\n }\n }\n\n const ok = diagnostics.length === 0;\n const fileResults = [{ path: sourceFile, ok }];\n if (opts.json) {\n emitJson(\n makeEnvelope({\n command: \"check\",\n ok,\n diagnostics,\n result: { files: fileResults, level: opts.level, views: viewCount },\n }),\n );\n } else {\n process.stdout.write(formatValidate({ files: fileResults }, diagnostics) + \"\\n\");\n }\n return ok ? 0 : 1;\n}\n","import { resolve } from \"node:path\";\nimport { checkConventions } from \"../conventions/index.js\";\nimport { makeEnvelope, emitJson } from \"./envelope.js\";\nimport { formatCheckConventions } from \"./humanFormat.js\";\n\nexport interface RunCheckConventionsOptions {\n path: string;\n cwd: string;\n json: boolean;\n}\n\nexport async function runCheckConventions(opts: RunCheckConventionsOptions): Promise<number> {\n const root = resolve(opts.cwd, opts.path);\n const result = await checkConventions({ root });\n\n if (opts.json) {\n emitJson(\n makeEnvelope({\n command: \"check-conventions\",\n ok: result.ok,\n diagnostics: result.diagnostics,\n result: { root },\n }),\n );\n } else {\n process.stdout.write(formatCheckConventions(result.diagnostics) + \"\\n\");\n }\n\n return result.ok ? 0 : 1;\n}\n","import { readdir } from \"node:fs/promises\";\nimport { join, relative } from \"node:path\";\nimport { existsSync } from \"node:fs\";\nimport type { Diagnostic } from \"../diagnostics.js\";\nimport { checkSepFilename, checkFixtureDirname } from \"./rules.js\";\n\nexport interface CheckConventionsOptions {\n root: string;\n}\n\nexport interface CheckConventionsResult {\n ok: boolean;\n diagnostics: Diagnostic[];\n}\n\nconst IGNORED_LEAF_NAMES = new Set([\"README.md\", \".gitkeep\", \".DS_Store\"]);\n\nexport async function walkRepo(opts: CheckConventionsOptions): Promise<CheckConventionsResult> {\n const diagnostics: Diagnostic[] = [];\n const root = opts.root;\n\n // SEPs: every .md file directly under seps/, except IGNORED_LEAF_NAMES.\n const sepsDir = join(root, \"seps\");\n if (existsSync(sepsDir)) {\n const entries = await readdir(sepsDir, { withFileTypes: true });\n for (const e of entries) {\n if (!e.isFile()) continue;\n if (IGNORED_LEAF_NAMES.has(e.name)) continue;\n if (!e.name.endsWith(\".md\")) continue;\n const rel = relative(root, join(sepsDir, e.name));\n const r = checkSepFilename(rel);\n if (!r.ok && r.diagnostics) diagnostics.push(...r.diagnostics);\n }\n }\n\n // Conformance fixtures: every directory directly under conformance/.\n const confDir = join(root, \"conformance\");\n if (existsSync(confDir)) {\n const entries = await readdir(confDir, { withFileTypes: true });\n for (const e of entries) {\n if (!e.isDirectory()) continue;\n if (IGNORED_LEAF_NAMES.has(e.name)) continue;\n const rel = relative(root, join(confDir, e.name));\n const r = checkFixtureDirname(rel);\n if (!r.ok && r.diagnostics) diagnostics.push(...r.diagnostics);\n }\n }\n\n return { ok: diagnostics.length === 0, diagnostics };\n}\n","export const SLUG_REGEX = /^[a-z0-9]+(-[a-z0-9]+)*$/;\n\nexport function isValidSlug(s: string): boolean {\n return SLUG_REGEX.test(s);\n}\n","import {\n CONVENTION_SEP_FILENAME,\n CONVENTION_FIXTURE_DIRNAME,\n} from \"../diagnostics.js\";\nimport type { Diagnostic } from \"../diagnostics.js\";\nimport { isValidSlug } from \"./slug.js\";\n\nexport interface ConventionRuleResult {\n ok: boolean;\n diagnostics?: Diagnostic[];\n}\n\nconst SEP_FILE_RE = /^seps\\/(\\d{4})-(.+)\\.md$/;\nconst FIXTURE_DIR_RE = /^conformance\\/(\\d{3})-(.+)\\.fixture$/;\n\nexport function checkSepFilename(relPath: string): ConventionRuleResult {\n const m = relPath.match(SEP_FILE_RE);\n if (!m) {\n return mkFail(\n CONVENTION_SEP_FILENAME,\n relPath,\n `SEP filename must match seps/NNNN-{slug}.md (got \"${relPath}\")`,\n );\n }\n const slug = m[2]!;\n if (!isValidSlug(slug)) {\n return mkFail(\n CONVENTION_SEP_FILENAME,\n relPath,\n `SEP slug \"${slug}\" violates ^[a-z0-9]+(-[a-z0-9]+)*$`,\n );\n }\n return { ok: true };\n}\n\nexport function checkFixtureDirname(relPath: string): ConventionRuleResult {\n const m = relPath.match(FIXTURE_DIR_RE);\n if (!m) {\n if (relPath.startsWith(\"conformance/\") && !relPath.endsWith(\".fixture\")) {\n return mkFail(\n CONVENTION_FIXTURE_DIRNAME,\n relPath,\n `fixture directory must match conformance/NNN-{slug}.fixture/ (got \"${relPath}\"); did you forget the .fixture suffix?`,\n );\n }\n return mkFail(\n CONVENTION_FIXTURE_DIRNAME,\n relPath,\n `fixture directory must match conformance/NNN-{slug}.fixture/ (got \"${relPath}\")`,\n );\n }\n const slug = m[2]!;\n if (!isValidSlug(slug)) {\n return mkFail(\n CONVENTION_FIXTURE_DIRNAME,\n relPath,\n `fixture slug \"${slug}\" violates ^[a-z0-9]+(-[a-z0-9]+)*$`,\n );\n }\n return { ok: true };\n}\n\nfunction mkFail(code: string, file: string, message: string): ConventionRuleResult {\n return {\n ok: false,\n diagnostics: [\n {\n severity: \"error\",\n code,\n message,\n file,\n },\n ],\n };\n}\n"],"mappings":"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","names":["resolve","yaml","yaml","resolve","resolve","readFile","readdir","join","extname","relative","resolve","resolve","collectYamlFiles","relative","readFile","readdir","join","extname","resolve","resolve","resolve","resolve","resolve","resolve","resolve","resolve","relative","resolve","relative","resolve","readdir","join","relative","existsSync","join","existsSync","readdir","relative","resolve"]}
|