From e48aadc38a0e4f9cc2224090a4b7afe013e74fba Mon Sep 17 00:00:00 2001 From: William Zujkowski Date: Mon, 29 Jun 2026 22:40:39 -0400 Subject: [PATCH] chore: remove vestigial exports, types, and constants (#233) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dead-code sweep. Each symbol below was verified to have zero references across packages, scripts, apps/web, tests, and workflows (excluding dist/): - transformer: USLM_NAMESPACE, LEGAL_LIST_MARKERS, OUTPUT_PATH_PATTERN constants; PreserveOrderTextNode/ElementNode/Node types (parser/transformer do their namespace and node walking without them). - transformer: extractText — a "for backward compatibility" shim with no remaining callers; production code uses extractTextFromNodes. Its tests are removed with it. - fetcher: allTitlesXmlUrl — the all-titles archive is never fetched; only per-title downloads (titleXmlUrl) are used. - scripts: HashedFile interface — buildManifest uses an inline literal. Barrels updated to drop the removed re-exports. The getAttributes / getAttrsFromNode transformer duplication is intentionally left untouched. Co-Authored-By: Claude Opus 4.8 --- packages/fetcher/src/constants.ts | 8 ------ packages/fetcher/src/index.ts | 1 - .../src/__tests__/transformer.test.ts | 27 ------------------- packages/transformer/src/constants.ts | 24 ----------------- packages/transformer/src/index.ts | 4 +-- packages/transformer/src/parser.ts | 20 -------------- packages/transformer/src/xml-utils.ts | 13 --------- scripts/lib/delta-detector.ts | 6 ----- 8 files changed, 2 insertions(+), 101 deletions(-) diff --git a/packages/fetcher/src/constants.ts b/packages/fetcher/src/constants.ts index e52bae4..5d15228 100644 --- a/packages/fetcher/src/constants.ts +++ b/packages/fetcher/src/constants.ts @@ -17,14 +17,6 @@ export function titleXmlUrl(congress: string, law: string, title: string): strin return `${OLRC_RELEASE_POINTS_URL}us/pl/${congress}/${law}/xml_usc${paddedTitle}@${congress}-${law}.zip`; } -/** - * Build a URL for the all-titles XML ZIP download for a release point. - * Pattern: https://uscode.house.gov/download/releasepoints/us/pl/{congress}/{law}/xml_uscAll@{congress}-{law}.zip - */ -export function allTitlesXmlUrl(congress: string, law: string): string { - return `${OLRC_RELEASE_POINTS_URL}us/pl/${congress}/${law}/xml_uscAll@${congress}-${law}.zip`; -} - /** * Maximum number of bytes to accept from a single download. * diff --git a/packages/fetcher/src/index.ts b/packages/fetcher/src/index.ts index 0a50895..4018d41 100644 --- a/packages/fetcher/src/index.ts +++ b/packages/fetcher/src/index.ts @@ -4,7 +4,6 @@ export { OLRC_PRIOR_RELEASE_POINTS_PAGE, OLRC_RELEASE_POINTS_URL, titleXmlUrl, - allTitlesXmlUrl, HASH_STORE_DIR, HASH_STORE_FILE, } from './constants.js'; diff --git a/packages/transformer/src/__tests__/transformer.test.ts b/packages/transformer/src/__tests__/transformer.test.ts index d733c12..d82d48c 100644 --- a/packages/transformer/src/__tests__/transformer.test.ts +++ b/packages/transformer/src/__tests__/transformer.test.ts @@ -1,7 +1,6 @@ import { describe, it, expect } from 'vitest'; import { parseUslmXml, - extractText, generateFrontmatter, buildSectionPath, formatListItem, @@ -144,32 +143,6 @@ describe('parseUslmXml', () => { }); }); -describe('extractText', () => { - it('returns string values directly', () => { - expect(extractText('hello')).toBe('hello'); - }); - - it('extracts #text from objects', () => { - expect(extractText({ '#text': 'nested' })).toBe('nested'); - }); - - it('returns empty string for null/undefined/unrecognized', () => { - expect(extractText(null)).toBe(''); - expect(extractText(undefined)).toBe(''); - expect(extractText({ foo: 'bar' })).toBe(''); - }); - - it('handles numeric values', () => { - expect(extractText(42)).toBe('42'); - expect(extractText({ '#text': 101 })).toBe('101'); - }); - - it('handles preserveOrder arrays', () => { - const nodes = [{ '#text': 'hello' }, { '#text': 'world' }]; - expect(extractText(nodes)).toBe('hello world'); - }); -}); - describe('generateFrontmatter', () => { it('produces valid YAML frontmatter', () => { const fm = generateFrontmatter({ diff --git a/packages/transformer/src/constants.ts b/packages/transformer/src/constants.ts index 99899ec..c3c559b 100644 --- a/packages/transformer/src/constants.ts +++ b/packages/transformer/src/constants.ts @@ -1,13 +1,5 @@ /** USLM XML element names and transformer configuration */ -/** - * USLM namespace URI. - * Note: OLRC publishes USLM 1.0 (http://xml.house.gov/schemas/uslm/1.0) - * which uses `` as root, while the USLM 2.0 spec uses ``. - * The namespace URI is the same; only the schema version and root element differ. - */ -export const USLM_NAMESPACE = 'https://xml.house.gov/schemas/uslm/1.0'; - /** Structural USLM element names (hierarchy order) */ export const USLM_ELEMENTS = { /** Top-level document wrapper (USLM 2.0) */ @@ -58,24 +50,8 @@ export const USLM_ELEMENTS = { table: 'table', } as const; -/** - * Legal list markers by nesting depth. - * (a) → (1) → (A) → (i) → (I) → (aa) - */ -export const LEGAL_LIST_MARKERS = [ - { prefix: '(', style: 'lower-alpha' }, // (a), (b), (c) - { prefix: '(', style: 'decimal' }, // (1), (2), (3) - { prefix: '(', style: 'upper-alpha' }, // (A), (B), (C) - { prefix: '(', style: 'lower-roman' }, // (i), (ii), (iii) - { prefix: '(', style: 'upper-roman' }, // (I), (II), (III) - { prefix: '(', style: 'double-lower' }, // (aa), (bb), (cc) -] as const; - /** Indentation per nesting level (in spaces) */ export const INDENT_PER_LEVEL = 2; /** Maximum nesting depth for safety (prevent runaway recursion) */ export const MAX_NESTING_DEPTH = 20; - -/** Output directory structure pattern */ -export const OUTPUT_PATH_PATTERN = 'statutes/title-{title}/chapter-{chapter}/section-{section}.md'; diff --git a/packages/transformer/src/index.ts b/packages/transformer/src/index.ts index 6b24737..564c336 100644 --- a/packages/transformer/src/index.ts +++ b/packages/transformer/src/index.ts @@ -1,5 +1,5 @@ export { XmlToMarkdownAdapter } from './transformer.js'; -export { parseUslmXml, extractText } from './parser.js'; +export { parseUslmXml } from './parser.js'; export type { ParsedDocument } from './parser.js'; export { generateFrontmatter, @@ -14,6 +14,6 @@ export { detectSectionStatus, } from './markdown-generator.js'; export type { Frontmatter, MarkdownFile, SectionStatus } from './markdown-generator.js'; -export { USLM_ELEMENTS, USLM_NAMESPACE, INDENT_PER_LEVEL, MAX_NESTING_DEPTH } from './constants.js'; +export { USLM_ELEMENTS, INDENT_PER_LEVEL, MAX_NESTING_DEPTH } from './constants.js'; export { createLogger } from '@civic-source/shared'; export { extractTextFromNodes, findElements, getAttributes, getElementName } from './xml-utils.js'; diff --git a/packages/transformer/src/parser.ts b/packages/transformer/src/parser.ts index 64dc5dc..d4527b5 100644 --- a/packages/transformer/src/parser.ts +++ b/packages/transformer/src/parser.ts @@ -34,26 +34,6 @@ function createUslmParser(): XMLParser { return parser; } -/** - * Extract text from a preserveOrder node array or a plain value. - * For backward compatibility with markdown-generator and transformer. - */ -export function extractText(node: unknown): string { - if (typeof node === 'string') return node; - if (typeof node === 'number') return String(node); - if (Array.isArray(node)) return extractTextFromNodes(node); - if (node !== null && typeof node === 'object') { - const obj = node as Record; - if ('#text' in obj && typeof obj['#text'] === 'string') return obj['#text']; - if ('#text' in obj && typeof obj['#text'] === 'number') return String(obj['#text']); - } - return ''; -} - -/** - * Find the title number from a parsed USLM document (preserveOrder format). - * Looks for the identifier attribute on the title element. - */ /** Find the document root element — either lawDoc (USLM 2.0) or uscDoc (USLM 1.0) */ function findDocRoot(root: unknown[]): { children: unknown[]; attrs: Record } | undefined { return findElements(root, USLM_ELEMENTS.lawDoc)[0] diff --git a/packages/transformer/src/xml-utils.ts b/packages/transformer/src/xml-utils.ts index e593a4d..bb32b01 100644 --- a/packages/transformer/src/xml-utils.ts +++ b/packages/transformer/src/xml-utils.ts @@ -6,19 +6,6 @@ * Attributes live in a ":@" sibling key on the same object. */ -/** A text node in preserveOrder output */ -export interface PreserveOrderTextNode { - '#text': string; -} - -/** An element node in preserveOrder output */ -export interface PreserveOrderElementNode { - [tag: string]: unknown[]; -} - -/** A single node in the preserveOrder output */ -export type PreserveOrderNode = PreserveOrderTextNode | PreserveOrderElementNode; - /** * Recursively walk nodes and concatenate all #text values in document order. * Joins segments with a single space and collapses whitespace. diff --git a/scripts/lib/delta-detector.ts b/scripts/lib/delta-detector.ts index c78e15d..da07d64 100644 --- a/scripts/lib/delta-detector.ts +++ b/scripts/lib/delta-detector.ts @@ -5,12 +5,6 @@ export function hashContent(content: string): string { return createHash('sha256').update(content, 'utf-8').digest('hex'); } -/** A file with its path and content hash */ -export interface HashedFile { - path: string; - hash: string; -} - /** Result of comparing two sets of files */ export interface DeltaResult { /** Files that are new or have changed content */