Skip to content

Commit b1ce2b7

Browse files
chore: format
1 parent bb05c07 commit b1ce2b7

7 files changed

Lines changed: 42 additions & 98 deletions

File tree

packages/cli/src/commands/convert-ecfr.test.ts

Lines changed: 11 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -58,34 +58,30 @@ describe("parseEcfrGranularityList", () => {
5858
});
5959

6060
it("throws on unknown granularity name", () => {
61-
expect(() => parseEcfrGranularityList(opts({ granularities: "foo" }))).toThrow(
62-
/Unknown granularity "foo"/,
63-
);
61+
expect(() => parseEcfrGranularityList(opts({ granularities: "foo" }))).toThrow(/Unknown granularity "foo"/);
6462
});
6563

6664
it("throws on duplicate granularity in the list", () => {
6765
expect(() =>
68-
parseEcfrGranularityList(
69-
opts({ granularities: "part,part", output: "./out", outputPart: "./out-p" }),
70-
),
66+
parseEcfrGranularityList(opts({ granularities: "part,part", output: "./out", outputPart: "./out-p" })),
7167
).toThrow(/Duplicate granularity "part"/);
7268
});
7369

7470
it("throws when --output-part is missing for part granularity", () => {
75-
expect(() =>
76-
parseEcfrGranularityList(opts({ granularities: "part", output: "./out" })),
77-
).toThrow(/Missing --output-part/);
71+
expect(() => parseEcfrGranularityList(opts({ granularities: "part", output: "./out" }))).toThrow(
72+
/Missing --output-part/,
73+
);
7874
});
7975

8076
it("throws when --output-chapter is missing for chapter granularity", () => {
81-
expect(() =>
82-
parseEcfrGranularityList(opts({ granularities: "chapter", output: "./out" })),
83-
).toThrow(/Missing --output-chapter/);
77+
expect(() => parseEcfrGranularityList(opts({ granularities: "chapter", output: "./out" }))).toThrow(
78+
/Missing --output-chapter/,
79+
);
8480
});
8581

8682
it("throws when --output-title is missing for title granularity", () => {
87-
expect(() =>
88-
parseEcfrGranularityList(opts({ granularities: "title", output: "./out" })),
89-
).toThrow(/Missing --output-title/);
83+
expect(() => parseEcfrGranularityList(opts({ granularities: "title", output: "./out" }))).toThrow(
84+
/Missing --output-title/,
85+
);
9086
});
9187
});

packages/cli/src/commands/convert-ecfr.ts

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -299,10 +299,7 @@ Examples:
299299
process.exit(1);
300300
}
301301

302-
if (
303-
options.granularities !== undefined &&
304-
this.getOptionValueSource("granularity") === "cli"
305-
) {
302+
if (options.granularities !== undefined && this.getOptionValueSource("granularity") === "cli") {
306303
console.error(error("Cannot combine --granularity and --granularities — use one or the other"));
307304
process.exit(1);
308305
}

packages/cli/src/commands/convert-usc.test.ts

Lines changed: 14 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -132,9 +132,7 @@ describe("parseGranularityList", () => {
132132
});
133133

134134
it("prefers --output-section over --output when both are set", () => {
135-
const result = parseGranularityList(
136-
opts({ granularities: "section", output: "./out", outputSection: "./out-s" }),
137-
);
135+
const result = parseGranularityList(opts({ granularities: "section", output: "./out", outputSection: "./out-s" }));
138136
expect(result).toEqual([{ granularity: "section", output: resolve("./out-s") }]);
139137
});
140138

@@ -166,37 +164,33 @@ describe("parseGranularityList", () => {
166164
});
167165

168166
it("throws on unknown granularity name", () => {
169-
expect(() => parseGranularityList(opts({ granularities: "foo" }))).toThrow(
170-
/Unknown granularity "foo"/,
171-
);
167+
expect(() => parseGranularityList(opts({ granularities: "foo" }))).toThrow(/Unknown granularity "foo"/);
172168
});
173169

174170
it("throws on unknown granularity while accepting known ones in the same list", () => {
175-
expect(() =>
176-
parseGranularityList(opts({ granularities: "section,foo", output: "./out" })),
177-
).toThrow(/Unknown granularity "foo"/);
171+
expect(() => parseGranularityList(opts({ granularities: "section,foo", output: "./out" }))).toThrow(
172+
/Unknown granularity "foo"/,
173+
);
178174
});
179175

180176
it("throws on duplicate granularity in the list", () => {
181-
expect(() =>
182-
parseGranularityList(
183-
opts({ granularities: "section,section", output: "./out" }),
184-
),
185-
).toThrow(/Duplicate granularity "section"/);
177+
expect(() => parseGranularityList(opts({ granularities: "section,section", output: "./out" }))).toThrow(
178+
/Duplicate granularity "section"/,
179+
);
186180
});
187181

188182
it("throws when a listed granularity has no matching --output-<g> flag", () => {
189-
expect(() =>
190-
parseGranularityList(opts({ granularities: "title", output: "./out" })),
191-
).toThrow(/Missing --output-title/);
183+
expect(() => parseGranularityList(opts({ granularities: "title", output: "./out" }))).toThrow(
184+
/Missing --output-title/,
185+
);
192186
});
193187

194188
it("throws when section is listed but neither --output nor --output-section is given", () => {
195189
const o = opts({ granularities: "section" });
196190
// Commander defaults output to "./output"; to simulate absent output, override.
197191
const stripped = { ...o, output: undefined as unknown as string, outputSection: undefined };
198-
expect(() =>
199-
parseGranularityList(stripped as Parameters<typeof parseGranularityList>[0]),
200-
).toThrow(/Missing --output/);
192+
expect(() => parseGranularityList(stripped as Parameters<typeof parseGranularityList>[0])).toThrow(
193+
/Missing --output/,
194+
);
201195
});
202196
});

packages/cli/src/commands/convert-usc.ts

Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -88,11 +88,7 @@ export function parseGranularityList(
8888
}
8989

9090
/** Build the shared convert options from CLI flags. */
91-
function buildConvertOptions(
92-
inputPath: string,
93-
outputPath: string,
94-
options: ConvertCommandOptions,
95-
): ConvertOptions {
91+
function buildConvertOptions(inputPath: string, outputPath: string, options: ConvertCommandOptions): ConvertOptions {
9692
const hasSelectiveFlags = options.includeEditorialNotes || options.includeStatutoryNotes || options.includeAmendments;
9793
const includeNotes = hasSelectiveFlags ? false : options.includeNotes;
9894

@@ -316,10 +312,7 @@ Examples:
316312

317313
// --granularity and --granularities are mutually exclusive (ignoring the
318314
// `-g section` default).
319-
if (
320-
options.granularities !== undefined &&
321-
this.getOptionValueSource("granularity") === "cli"
322-
) {
315+
if (options.granularities !== undefined && this.getOptionValueSource("granularity") === "cli") {
323316
console.error(error("Cannot combine --granularity and --granularities — use one or the other"));
324317
process.exit(1);
325318
}

packages/ecfr/src/converter.ts

Lines changed: 8 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -164,9 +164,7 @@ function resolveGranularities(options: EcfrConvertOptions): EcfrGranularityOutpu
164164
const hasSingle = options.granularity !== undefined || options.output !== undefined;
165165

166166
if (hasMulti && hasSingle) {
167-
throw new Error(
168-
"convertEcfrTitle: `granularities` is mutually exclusive with `granularity`/`output`",
169-
);
167+
throw new Error("convertEcfrTitle: `granularities` is mutually exclusive with `granularity`/`output`");
170168
}
171169

172170
if (hasMulti) {
@@ -177,9 +175,7 @@ function resolveGranularities(options: EcfrConvertOptions): EcfrGranularityOutpu
177175
const seen = new Set<EcfrGranularity>();
178176
for (const entry of list) {
179177
if (seen.has(entry.granularity)) {
180-
throw new Error(
181-
`convertEcfrTitle: duplicate granularity "${entry.granularity}" in \`granularities\``,
182-
);
178+
throw new Error(`convertEcfrTitle: duplicate granularity "${entry.granularity}" in \`granularities\``);
183179
}
184180
seen.add(entry.granularity);
185181
}
@@ -200,15 +196,9 @@ function resolveGranularities(options: EcfrConvertOptions): EcfrGranularityOutpu
200196
* - Single-granularity mode (`output` + optional `granularity`) returns one `EcfrConvertResult`.
201197
* - Multi-granularity mode (`granularities`) parses once and returns one result per entry.
202198
*/
203-
export async function convertEcfrTitle(
204-
options: MultiEcfrConvertOptions,
205-
): Promise<EcfrConvertResult[]>;
206-
export async function convertEcfrTitle(
207-
options: SingleEcfrConvertOptions,
208-
): Promise<EcfrConvertResult>;
209-
export async function convertEcfrTitle(
210-
options: EcfrConvertOptions,
211-
): Promise<EcfrConvertResult | EcfrConvertResult[]> {
199+
export async function convertEcfrTitle(options: MultiEcfrConvertOptions): Promise<EcfrConvertResult[]>;
200+
export async function convertEcfrTitle(options: SingleEcfrConvertOptions): Promise<EcfrConvertResult>;
201+
export async function convertEcfrTitle(options: EcfrConvertOptions): Promise<EcfrConvertResult | EcfrConvertResult[]> {
212202
const granularityList = resolveGranularities(options);
213203

214204
// Build the emit set as the union of levels needed across requested granularities.
@@ -303,7 +293,7 @@ function extractTitleInfo(collectedByLevel: Map<LevelType, CollectedSection[]>):
303293

304294
console.warn(
305295
"[@lexbuild/ecfr] convertEcfrTitle: could not resolve title number from emitted nodes; " +
306-
"output will use `/us/cfr/t0/...` identifiers. Source XML likely missing a DIV1 TYPE=\"TITLE\".",
296+
'output will use `/us/cfr/t0/...` identifiers. Source XML likely missing a DIV1 TYPE="TITLE".',
307297
);
308298
return { titleNumber: "0", titleName: "" };
309299
}
@@ -427,9 +417,7 @@ async function writeGranularity(args: WriteGranularityArgs): Promise<EcfrConvert
427417
? files.length
428418
: granularity === "chapter"
429419
? new Set(
430-
collected
431-
.map((c) => c.context.ancestors.find((a) => a.levelType === "part")?.numValue)
432-
.filter(Boolean),
420+
collected.map((c) => c.context.ancestors.find((a) => a.levelType === "part")?.numValue).filter(Boolean),
433421
).size
434422
: 0;
435423

@@ -548,15 +536,7 @@ async function writeSectionGranularity(args: SectionWriteArgs): Promise<EcfrConv
548536
if (currentRss > peakMemory) peakMemory = currentRss;
549537
}
550538

551-
await writeMetaFiles(
552-
sectionMetas,
553-
titleNumber,
554-
titleName,
555-
output,
556-
"section",
557-
options.input,
558-
options.currencyDate,
559-
);
539+
await writeMetaFiles(sectionMetas, titleNumber, titleName, output, "section", options.input, options.currencyDate);
560540

561541
const files = sectionMetas.map((m) => join(buildTitleDir(titleNumber, output), m.relativeFile));
562542

packages/ecfr/src/ecfr-builder.test.ts

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -26,12 +26,7 @@ function collectLevelsOfType(root: LevelNode, levelType: string): LevelNode[] {
2626
/** Helper: parse an XML fixture and collect emitted nodes */
2727
async function parseFixture(
2828
fixtureName: string,
29-
emitAt:
30-
| "section"
31-
| "part"
32-
| "chapter"
33-
| "title"
34-
| ReadonlySet<"section" | "part" | "chapter" | "title"> = "section",
29+
emitAt: "section" | "part" | "chapter" | "title" | ReadonlySet<"section" | "part" | "chapter" | "title"> = "section",
3530
): Promise<Array<{ node: LevelNode; context: EmitContext }>> {
3631
const collected: Array<{ node: LevelNode; context: EmitContext }> = [];
3732

@@ -264,10 +259,7 @@ describe("EcfrASTBuilder", () => {
264259
// hierarchy index than part, so naive index-based reasoning would drop
265260
// the appendix from the part's children. The live stack check keeps it
266261
// attached once.
267-
const collected = await parseFixture(
268-
"appendix.xml",
269-
new Set<"section" | "part" | "title">(["part", "title"]),
270-
);
262+
const collected = await parseFixture("appendix.xml", new Set<"section" | "part" | "title">(["part", "title"]));
271263

272264
const parts = collected.filter((c) => c.node.levelType === "part");
273265
const titles = collected.filter((c) => c.node.levelType === "title");

packages/usc/src/converter.ts

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,7 @@ function resolveGranularities(options: ConvertOptions): UscGranularityOutput[] {
146146
const hasSingle = options.granularity !== undefined || options.output !== undefined;
147147

148148
if (hasMulti && hasSingle) {
149-
throw new Error(
150-
"convertTitle: `granularities` is mutually exclusive with `granularity`/`output`",
151-
);
149+
throw new Error("convertTitle: `granularities` is mutually exclusive with `granularity`/`output`");
152150
}
153151

154152
if (hasMulti) {
@@ -159,9 +157,7 @@ function resolveGranularities(options: ConvertOptions): UscGranularityOutput[] {
159157
const seen = new Set<UscGranularity>();
160158
for (const entry of list) {
161159
if (seen.has(entry.granularity)) {
162-
throw new Error(
163-
`convertTitle: duplicate granularity "${entry.granularity}" in \`granularities\``,
164-
);
160+
throw new Error(`convertTitle: duplicate granularity "${entry.granularity}" in \`granularities\``);
165161
}
166162
seen.add(entry.granularity);
167163
}
@@ -209,9 +205,7 @@ interface CollectedSection {
209205
*/
210206
export async function convertTitle(options: MultiConvertOptions): Promise<ConvertResult[]>;
211207
export async function convertTitle(options: SingleConvertOptions): Promise<ConvertResult>;
212-
export async function convertTitle(
213-
options: ConvertOptions,
214-
): Promise<ConvertResult | ConvertResult[]> {
208+
export async function convertTitle(options: ConvertOptions): Promise<ConvertResult | ConvertResult[]> {
215209
const opts: ConvertOptions = { ...DEFAULTS, ...options };
216210
const granularityList = resolveGranularities(opts);
217211

@@ -363,9 +357,7 @@ async function writeGranularity(
363357

364358
return {
365359
sectionsWritten:
366-
opts.dryRun || granularity === "title" || granularity === "chapter"
367-
? sectionMetas.length
368-
: files.length,
360+
opts.dryRun || granularity === "title" || granularity === "chapter" ? sectionMetas.length : files.length,
369361
files,
370362
titleNumber: docMeta.docNumber ?? "unknown",
371363
titleName: titleHeading ?? docMeta.dcTitle ?? "Unknown Title",

0 commit comments

Comments
 (0)