@shuji-bonji/pdf-spec-mcp 0.3.2 → 0.4.2
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.ja.md +11 -4
- package/README.md +11 -4
- package/dist/config.d.ts +22 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +32 -1
- package/dist/config.js.map +1 -1
- package/dist/errors.d.ts +69 -5
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +70 -9
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +5 -42
- package/dist/index.js.map +1 -1
- package/dist/server.d.ts +18 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +59 -0
- package/dist/server.js.map +1 -0
- package/dist/services/compare-service.d.ts +1 -1
- package/dist/services/compare-service.d.ts.map +1 -1
- package/dist/services/compare-service.js +2 -2
- package/dist/services/compare-service.js.map +1 -1
- package/dist/services/content-extractor.d.ts +65 -0
- package/dist/services/content-extractor.d.ts.map +1 -1
- package/dist/services/content-extractor.js +142 -10
- package/dist/services/content-extractor.js.map +1 -1
- package/dist/services/outline-resolver.d.ts +1 -1
- package/dist/services/outline-resolver.d.ts.map +1 -1
- package/dist/services/pdf-loader.d.ts +12 -2
- package/dist/services/pdf-loader.d.ts.map +1 -1
- package/dist/services/pdf-loader.js +21 -13
- package/dist/services/pdf-loader.js.map +1 -1
- package/dist/services/pdf-registry.d.ts.map +1 -1
- package/dist/services/pdf-registry.js +16 -8
- package/dist/services/pdf-registry.js.map +1 -1
- package/dist/services/pdf-service.d.ts +13 -1
- package/dist/services/pdf-service.d.ts.map +1 -1
- package/dist/services/pdf-service.js +79 -72
- package/dist/services/pdf-service.js.map +1 -1
- package/dist/services/requirement-extractor.d.ts +1 -1
- package/dist/services/requirement-extractor.d.ts.map +1 -1
- package/dist/services/requirement-extractor.js +40 -4
- package/dist/services/requirement-extractor.js.map +1 -1
- package/dist/services/search-index.d.ts +8 -1
- package/dist/services/search-index.d.ts.map +1 -1
- package/dist/services/search-index.js +48 -18
- package/dist/services/search-index.js.map +1 -1
- package/dist/services/table-collector.d.ts +19 -0
- package/dist/services/table-collector.d.ts.map +1 -0
- package/dist/services/table-collector.js +106 -0
- package/dist/services/table-collector.js.map +1 -0
- package/dist/tools/definitions.d.ts +26 -3
- package/dist/tools/definitions.d.ts.map +1 -1
- package/dist/tools/definitions.js +47 -114
- package/dist/tools/definitions.js.map +1 -1
- package/dist/tools/handlers.d.ts +18 -9
- package/dist/tools/handlers.d.ts.map +1 -1
- package/dist/tools/handlers.js +57 -38
- package/dist/tools/handlers.js.map +1 -1
- package/dist/types/index.d.ts +28 -33
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/cache.d.ts.map +1 -1
- package/dist/utils/cache.js +4 -0
- package/dist/utils/cache.js.map +1 -1
- package/dist/utils/stdout-guard.d.ts +24 -0
- package/dist/utils/stdout-guard.d.ts.map +1 -0
- package/dist/utils/stdout-guard.js +27 -0
- package/dist/utils/stdout-guard.js.map +1 -0
- package/dist/utils/validation.d.ts +96 -14
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +152 -94
- package/dist/utils/validation.js.map +1 -1
- package/package.json +14 -11
- package/dist/container.d.ts +0 -25
- package/dist/container.d.ts.map +0 -1
- package/dist/container.js +0 -25
- package/dist/container.js.map +0 -1
|
@@ -11,9 +11,9 @@
|
|
|
11
11
|
*
|
|
12
12
|
* Results are cached — full comparison runs once, then filtered per request.
|
|
13
13
|
*/
|
|
14
|
-
import { getSectionIndex } from './pdf-service.js';
|
|
15
14
|
import { logger } from '../utils/logger.js';
|
|
16
15
|
import { normalizeTitle } from '../utils/text.js';
|
|
16
|
+
import { getSectionIndex } from './pdf-service.js';
|
|
17
17
|
// ========================================
|
|
18
18
|
// CompareService Class
|
|
19
19
|
// ========================================
|
|
@@ -36,7 +36,7 @@ export class CompareService {
|
|
|
36
36
|
const full = await this.fullComparePromise;
|
|
37
37
|
// Apply section filter if specified
|
|
38
38
|
if (section) {
|
|
39
|
-
const prefix = section
|
|
39
|
+
const prefix = `${section}.`;
|
|
40
40
|
const matched = full.matched.filter((m) => m.section20 === section ||
|
|
41
41
|
m.section20.startsWith(prefix) ||
|
|
42
42
|
m.section17 === section ||
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compare-service.js","sourceRoot":"","sources":["../../src/services/compare-service.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;
|
|
1
|
+
{"version":3,"file":"compare-service.js","sourceRoot":"","sources":["../../src/services/compare-service.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,4 +10,69 @@ import type { PDFDocumentProxy } from './pdf-loader.js';
|
|
|
10
10
|
* @param sectionNumber - If provided, skip content before this section's heading on the first page
|
|
11
11
|
*/
|
|
12
12
|
export declare function extractSectionContent(doc: PDFDocumentProxy, startPage: number, endPage: number, sectionNumber?: string): Promise<ContentElement[]>;
|
|
13
|
+
/**
|
|
14
|
+
* The content `trimToSectionStart` throws away at the top of `seamPage` — the tail of the
|
|
15
|
+
* *previous* section, which spilled past its last page.
|
|
16
|
+
*
|
|
17
|
+
* Section ranges come from the outline as `[page, nextSection.page - 1]`, so anything a
|
|
18
|
+
* section runs over onto the next section's first page falls outside its own range. The
|
|
19
|
+
* next section then discards it as pre-heading content. Nobody keeps it: 412 sections of
|
|
20
|
+
* ISO 32000-2 lose content this way, 271 of them requirement text ("shall"), plus the
|
|
21
|
+
* table rows that B-S1 first surfaced.
|
|
22
|
+
*
|
|
23
|
+
* Returning it here lets the previous section adopt it, and **cannot double-count**: this
|
|
24
|
+
* returns a non-empty strip exactly when trimToSectionStart drops one, both deciding via
|
|
25
|
+
* findSectionHeadingIndex.
|
|
26
|
+
* - heading at index > 0 → trimmed away there, adopted here
|
|
27
|
+
* - heading at index 0 → nothing precedes it; both return nothing
|
|
28
|
+
* - heading not found → trimToSectionStart keeps the whole page, so the next section
|
|
29
|
+
* already owns this content (69 sections of ISO 32000-2).
|
|
30
|
+
* Adopting it here too would duplicate it — hence `[]`.
|
|
31
|
+
*
|
|
32
|
+
* The `> 0` above is for clarity, not safety: `>= 0` and `!== -1` behave identically, since
|
|
33
|
+
* `slice(0, 0)` is empty and a `-1` index never reaches the slice. What must not change is
|
|
34
|
+
* the "not found → adopt nothing" arm, and that the heading is located the same way as in
|
|
35
|
+
* trimToSectionStart. Both are pinned by tests.
|
|
36
|
+
*/
|
|
37
|
+
export declare function extractOrphanedStrip(doc: PDFDocumentProxy, seamPage: number, nextSectionNumber: string): Promise<ContentElement[]>;
|
|
38
|
+
/**
|
|
39
|
+
* A page's text, cut at section headings, for the search index (S-8).
|
|
40
|
+
*/
|
|
41
|
+
export interface PageSegment {
|
|
42
|
+
/**
|
|
43
|
+
* Section that owns this text, or null for text above the first heading — the strip,
|
|
44
|
+
* which belongs to whichever section flows in from the previous page. The caller knows
|
|
45
|
+
* that section; this module only knows where the cut is.
|
|
46
|
+
*/
|
|
47
|
+
section: string | null;
|
|
48
|
+
text: string;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Split a page's text at the headings of the sections that start on it (S-8).
|
|
52
|
+
*
|
|
53
|
+
* The search index used to hand each whole page to the last section starting on or before
|
|
54
|
+
* it, so the strip at the top of a page — the tail of the *previous* section — was always
|
|
55
|
+
* misattributed to the next one: search_spec("QuadPoints") reported 12.5.6.11, but
|
|
56
|
+
* QuadPoints is 12.5.6.10's Table 182, and get_tables("12.5.6.11") has no QuadPoints.
|
|
57
|
+
* Search led straight to a section where the term cannot be found.
|
|
58
|
+
*
|
|
59
|
+
* Cutting here uses the same findSectionHeadingIndex as trimToSectionStart /
|
|
60
|
+
* extractOrphanedStrip, so search attributes text to exactly the section whose
|
|
61
|
+
* get_section shows it (the S-5 lesson: one rule, one place). The arms mirror it too:
|
|
62
|
+
* - heading found at index > 0 → text before it goes to the pending owner (the strip)
|
|
63
|
+
* - heading found at index 0 → no strip
|
|
64
|
+
* - heading not found → the section keeps everything pending, and the previous
|
|
65
|
+
* owner adopts nothing (69 sections of ISO 32000-2)
|
|
66
|
+
*
|
|
67
|
+
* When NO heading is found at all, the page is returned as one raw-text segment for the
|
|
68
|
+
* last starting section — exactly what the whole-page index did. This is not just a
|
|
69
|
+
* shortcut: walkStructTree drops text whose only home is an unhandled container (TOC /
|
|
70
|
+
* TOCI / Link / Span chains on the Contents pages, the errata "Issue #NNN" pages, the
|
|
71
|
+
* INTERNATIONAL STANDARD title page), so element text on those pages is near-empty and
|
|
72
|
+
* cutting by elements would silently drop them from the index. Headingless pages cannot
|
|
73
|
+
* be cut anyway — falling back to the raw page keeps them whole.
|
|
74
|
+
*
|
|
75
|
+
* @param startingSections - section numbers starting on this page, in document order
|
|
76
|
+
*/
|
|
77
|
+
export declare function extractPageSegments(doc: PDFDocumentProxy, pageNum: number, startingSections: string[]): Promise<PageSegment[]>;
|
|
13
78
|
//# sourceMappingURL=content-extractor.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-extractor.d.ts","sourceRoot":"","sources":["../../src/services/content-extractor.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"content-extractor.d.ts","sourceRoot":"","sources":["../../src/services/content-extractor.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAGH,OAAO,KAAK,EACV,cAAc,EAMf,MAAM,mBAAmB,CAAC;AAE3B,OAAO,KAAK,EACV,gBAAgB,EAMjB,MAAM,iBAAiB,CAAC;AAIzB;;;;GAIG;AACH,wBAAsB,qBAAqB,CACzC,GAAG,EAAE,gBAAgB,EACrB,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,aAAa,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,cAAc,EAAE,CAAC,CAuB3B;AA8BD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAsB,oBAAoB,CACxC,GAAG,EAAE,gBAAgB,EACrB,QAAQ,EAAE,MAAM,EAChB,iBAAiB,EAAE,MAAM,GACxB,OAAO,CAAC,cAAc,EAAE,CAAC,CAM3B;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IAC1B;;;;OAIG;IACH,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AACH,wBAAsB,mBAAmB,CACvC,GAAG,EAAE,gBAAgB,EACrB,OAAO,EAAE,MAAM,EACf,gBAAgB,EAAE,MAAM,EAAE,GACzB,OAAO,CAAC,WAAW,EAAE,CAAC,CAmCxB"}
|
|
@@ -24,21 +24,151 @@ export async function extractSectionContent(doc, startPage, endPage, sectionNumb
|
|
|
24
24
|
}
|
|
25
25
|
return elements;
|
|
26
26
|
}
|
|
27
|
+
/**
|
|
28
|
+
* Where a section's heading sits among a page's elements, or -1 if it is not there.
|
|
29
|
+
*
|
|
30
|
+
* Single source of truth for "this section starts here", so that trimToSectionStart and
|
|
31
|
+
* extractOrphanedStrip stay exact complements of each other — see extractOrphanedStrip.
|
|
32
|
+
*/
|
|
33
|
+
function findSectionHeadingIndex(elements, sectionNumber) {
|
|
34
|
+
const idx = elements.findIndex((el) => el.type === 'heading' && el.text.startsWith(`${sectionNumber} `));
|
|
35
|
+
if (idx !== -1)
|
|
36
|
+
return idx;
|
|
37
|
+
// Also try matching "Annex X" format, where the heading may be exactly the section number
|
|
38
|
+
if (sectionNumber.startsWith('Annex ')) {
|
|
39
|
+
return elements.findIndex((el) => el.type === 'heading' && el.text.startsWith(sectionNumber));
|
|
40
|
+
}
|
|
41
|
+
return -1;
|
|
42
|
+
}
|
|
27
43
|
/**
|
|
28
44
|
* Remove content elements that precede the target section heading
|
|
29
45
|
*/
|
|
30
46
|
function trimToSectionStart(elements, sectionNumber) {
|
|
31
|
-
const headingIdx = elements
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
47
|
+
const headingIdx = findSectionHeadingIndex(elements, sectionNumber);
|
|
48
|
+
return headingIdx > 0 ? elements.slice(headingIdx) : elements;
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* The content `trimToSectionStart` throws away at the top of `seamPage` — the tail of the
|
|
52
|
+
* *previous* section, which spilled past its last page.
|
|
53
|
+
*
|
|
54
|
+
* Section ranges come from the outline as `[page, nextSection.page - 1]`, so anything a
|
|
55
|
+
* section runs over onto the next section's first page falls outside its own range. The
|
|
56
|
+
* next section then discards it as pre-heading content. Nobody keeps it: 412 sections of
|
|
57
|
+
* ISO 32000-2 lose content this way, 271 of them requirement text ("shall"), plus the
|
|
58
|
+
* table rows that B-S1 first surfaced.
|
|
59
|
+
*
|
|
60
|
+
* Returning it here lets the previous section adopt it, and **cannot double-count**: this
|
|
61
|
+
* returns a non-empty strip exactly when trimToSectionStart drops one, both deciding via
|
|
62
|
+
* findSectionHeadingIndex.
|
|
63
|
+
* - heading at index > 0 → trimmed away there, adopted here
|
|
64
|
+
* - heading at index 0 → nothing precedes it; both return nothing
|
|
65
|
+
* - heading not found → trimToSectionStart keeps the whole page, so the next section
|
|
66
|
+
* already owns this content (69 sections of ISO 32000-2).
|
|
67
|
+
* Adopting it here too would duplicate it — hence `[]`.
|
|
68
|
+
*
|
|
69
|
+
* The `> 0` above is for clarity, not safety: `>= 0` and `!== -1` behave identically, since
|
|
70
|
+
* `slice(0, 0)` is empty and a `-1` index never reaches the slice. What must not change is
|
|
71
|
+
* the "not found → adopt nothing" arm, and that the heading is located the same way as in
|
|
72
|
+
* trimToSectionStart. Both are pinned by tests.
|
|
73
|
+
*/
|
|
74
|
+
export async function extractOrphanedStrip(doc, seamPage, nextSectionNumber) {
|
|
75
|
+
if (seamPage < 1 || seamPage > (doc.numPages || 0))
|
|
76
|
+
return [];
|
|
77
|
+
const elements = await extractPageContent(doc, seamPage);
|
|
78
|
+
const headingIdx = findSectionHeadingIndex(elements, nextSectionNumber);
|
|
79
|
+
return headingIdx > 0 ? elements.slice(0, headingIdx) : [];
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Split a page's text at the headings of the sections that start on it (S-8).
|
|
83
|
+
*
|
|
84
|
+
* The search index used to hand each whole page to the last section starting on or before
|
|
85
|
+
* it, so the strip at the top of a page — the tail of the *previous* section — was always
|
|
86
|
+
* misattributed to the next one: search_spec("QuadPoints") reported 12.5.6.11, but
|
|
87
|
+
* QuadPoints is 12.5.6.10's Table 182, and get_tables("12.5.6.11") has no QuadPoints.
|
|
88
|
+
* Search led straight to a section where the term cannot be found.
|
|
89
|
+
*
|
|
90
|
+
* Cutting here uses the same findSectionHeadingIndex as trimToSectionStart /
|
|
91
|
+
* extractOrphanedStrip, so search attributes text to exactly the section whose
|
|
92
|
+
* get_section shows it (the S-5 lesson: one rule, one place). The arms mirror it too:
|
|
93
|
+
* - heading found at index > 0 → text before it goes to the pending owner (the strip)
|
|
94
|
+
* - heading found at index 0 → no strip
|
|
95
|
+
* - heading not found → the section keeps everything pending, and the previous
|
|
96
|
+
* owner adopts nothing (69 sections of ISO 32000-2)
|
|
97
|
+
*
|
|
98
|
+
* When NO heading is found at all, the page is returned as one raw-text segment for the
|
|
99
|
+
* last starting section — exactly what the whole-page index did. This is not just a
|
|
100
|
+
* shortcut: walkStructTree drops text whose only home is an unhandled container (TOC /
|
|
101
|
+
* TOCI / Link / Span chains on the Contents pages, the errata "Issue #NNN" pages, the
|
|
102
|
+
* INTERNATIONAL STANDARD title page), so element text on those pages is near-empty and
|
|
103
|
+
* cutting by elements would silently drop them from the index. Headingless pages cannot
|
|
104
|
+
* be cut anyway — falling back to the raw page keeps them whole.
|
|
105
|
+
*
|
|
106
|
+
* @param startingSections - section numbers starting on this page, in document order
|
|
107
|
+
*/
|
|
108
|
+
export async function extractPageSegments(doc, pageNum, startingSections) {
|
|
109
|
+
const elements = await extractPageContent(doc, pageNum);
|
|
110
|
+
const segments = [];
|
|
111
|
+
let owner = null;
|
|
112
|
+
let start = 0;
|
|
113
|
+
let anyHeadingFound = false;
|
|
114
|
+
for (const sec of startingSections) {
|
|
115
|
+
const idx = findSectionHeadingIndex(elements.slice(start), sec);
|
|
116
|
+
if (idx === -1) {
|
|
117
|
+
// Mirrors trimToSectionStart keeping the whole page when the heading is missing:
|
|
118
|
+
// the section takes everything still pending (including any unemitted strip —
|
|
119
|
+
// exactly what its get_section returns), and the previous owner adopts nothing.
|
|
120
|
+
owner = sec;
|
|
121
|
+
continue;
|
|
122
|
+
}
|
|
123
|
+
anyHeadingFound = true;
|
|
124
|
+
const abs = start + idx;
|
|
125
|
+
if (abs > start) {
|
|
126
|
+
segments.push({ section: owner, text: elementsToText(elements.slice(start, abs)) });
|
|
127
|
+
}
|
|
128
|
+
owner = sec;
|
|
129
|
+
start = abs;
|
|
37
130
|
}
|
|
38
|
-
if (
|
|
39
|
-
return
|
|
131
|
+
if (!anyHeadingFound) {
|
|
132
|
+
return [{ section: owner, text: await extractRawPageText(doc, pageNum) }].filter((s) => s.text.trim().length > 0);
|
|
40
133
|
}
|
|
41
|
-
|
|
134
|
+
segments.push({ section: owner, text: elementsToText(elements.slice(start)) });
|
|
135
|
+
return segments.filter((s) => s.text.trim().length > 0);
|
|
136
|
+
}
|
|
137
|
+
/**
|
|
138
|
+
* Raw page text, independent of tagging (see extractPageSegments' headingless arm).
|
|
139
|
+
*/
|
|
140
|
+
async function extractRawPageText(doc, pageNum) {
|
|
141
|
+
const page = await doc.getPage(pageNum);
|
|
142
|
+
const textContent = await page.getTextContent();
|
|
143
|
+
return textContent.items
|
|
144
|
+
.filter((item) => 'str' in item)
|
|
145
|
+
.map((item) => item.str)
|
|
146
|
+
.join(' ');
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Flatten content elements to searchable text.
|
|
150
|
+
*/
|
|
151
|
+
function elementsToText(elements) {
|
|
152
|
+
const parts = [];
|
|
153
|
+
for (const el of elements) {
|
|
154
|
+
switch (el.type) {
|
|
155
|
+
case 'heading':
|
|
156
|
+
case 'paragraph':
|
|
157
|
+
case 'code':
|
|
158
|
+
parts.push(el.text);
|
|
159
|
+
break;
|
|
160
|
+
case 'note':
|
|
161
|
+
parts.push(`${el.label} ${el.text}`);
|
|
162
|
+
break;
|
|
163
|
+
case 'list':
|
|
164
|
+
parts.push(el.items.join('\n'));
|
|
165
|
+
break;
|
|
166
|
+
case 'table':
|
|
167
|
+
parts.push([el.headers.join(' '), ...el.rows.map((r) => r.join(' '))].join('\n'));
|
|
168
|
+
break;
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
return parts.join('\n');
|
|
42
172
|
}
|
|
43
173
|
/**
|
|
44
174
|
* Extract structured content from a single page
|
|
@@ -118,7 +248,9 @@ function walkStructTree(node, textMap, styles) {
|
|
|
118
248
|
if (/^H[1-6]?$/.test(role)) {
|
|
119
249
|
const text = collectText(child, textMap).trim();
|
|
120
250
|
if (text) {
|
|
121
|
-
|
|
251
|
+
// role is /^H[1-6]?$/ (checked above), so role[1] is a single decimal digit.
|
|
252
|
+
// Bare "H" (no level) defaults to 3.
|
|
253
|
+
const level = role.length === 2 ? Number.parseInt(role[1], 10) : 3;
|
|
122
254
|
elements.push({ type: 'heading', level, text });
|
|
123
255
|
}
|
|
124
256
|
continue;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"content-extractor.js","sourceRoot":"","sources":["../../src/services/content-extractor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"content-extractor.js","sourceRoot":"","sources":["../../src/services/content-extractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Outline Resolver
|
|
3
3
|
* Builds section index from PDF outline tree
|
|
4
4
|
*/
|
|
5
|
-
import type { OutlineEntry,
|
|
5
|
+
import type { OutlineEntry, SectionIndex, SectionInfo } from '../types/index.js';
|
|
6
6
|
/**
|
|
7
7
|
* Build a section index from outline entries
|
|
8
8
|
* Creates both a flat lookup map and preserves the tree structure
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"outline-resolver.d.ts","sourceRoot":"","sources":["../../src/services/outline-resolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"outline-resolver.d.ts","sourceRoot":"","sources":["../../src/services/outline-resolver.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,YAAY,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEjF;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,YAAY,EAAE,EAAE,UAAU,EAAE,MAAM,GAAG,YAAY,CA+C3F;AAoBD;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,GAAG,WAAW,GAAG,SAAS,CAgBvF"}
|
|
@@ -7,8 +7,17 @@
|
|
|
7
7
|
* - Least-recently-used documents are evicted via doc.destroy() to free memory.
|
|
8
8
|
*/
|
|
9
9
|
import type { OutlineEntry } from '../types/index.js';
|
|
10
|
-
export type { PDFDocumentProxy, PDFPageProxy,
|
|
10
|
+
export type { PDFDocumentProxy, PDFPageProxy, StructTreeContent, StructTreeNode, TextContent, TextItem, TextMarkedContent, } from 'pdfjs-dist/types/src/display/api.js';
|
|
11
11
|
import type { PDFDocumentProxy } from 'pdfjs-dist/types/src/display/api.js';
|
|
12
|
+
/**
|
|
13
|
+
* Opens a PDF from disk into a pdfjs document.
|
|
14
|
+
*
|
|
15
|
+
* Injected so the LRU cache can be tested on its own: reading a real file and driving
|
|
16
|
+
* pdfjs is the only part of this service that needs the outside world, and it is
|
|
17
|
+
* irrelevant to the eviction logic. Defaults to the real implementation, so callers
|
|
18
|
+
* that do not care (i.e. everyone but the tests) are unaffected.
|
|
19
|
+
*/
|
|
20
|
+
export type DocumentSource = (pdfPath: string) => Promise<PDFDocumentProxy>;
|
|
12
21
|
/**
|
|
13
22
|
* Class-based PDF loader service with multi-document LRU cache.
|
|
14
23
|
*/
|
|
@@ -16,7 +25,8 @@ export declare class DocumentLoaderService {
|
|
|
16
25
|
private documentCache;
|
|
17
26
|
private accessOrder;
|
|
18
27
|
private maxCachedDocs;
|
|
19
|
-
|
|
28
|
+
private source;
|
|
29
|
+
constructor(maxCachedDocs?: number, source?: DocumentSource);
|
|
20
30
|
/**
|
|
21
31
|
* Load PDF document (LRU cached, up to maxCachedDocs)
|
|
22
32
|
*/
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf-loader.d.ts","sourceRoot":"","sources":["../../src/services/pdf-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"pdf-loader.d.ts","sourceRoot":"","sources":["../../src/services/pdf-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAKH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AAKtD,YAAY,EACV,gBAAgB,EAChB,YAAY,EACZ,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,QAAQ,EACR,iBAAiB,GAClB,MAAM,qCAAqC,CAAC;AAE7C,OAAO,KAAK,EAAE,gBAAgB,EAAY,MAAM,qCAAqC,CAAC;AAatF;;;;;;;GAOG;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,OAAO,EAAE,MAAM,KAAK,OAAO,CAAC,gBAAgB,CAAC,CAAC;AAiB5E;;GAEG;AACH,qBAAa,qBAAqB;IAChC,OAAO,CAAC,aAAa,CAAgC;IACrD,OAAO,CAAC,WAAW,CAAW;IAC9B,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,MAAM,CAAiB;gBAEnB,aAAa,GAAE,MAAwB,EAAE,MAAM,GAAE,cAA6B;IAO1F;;OAEG;IACG,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAa9D;;;;;;;;;;;;OAYG;IACG,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAahE;;OAEG;IACG,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IAMzE;;OAEG;IACH,IAAI,SAAS,IAAI,MAAM,CAEtB;IAED;;OAEG;IACH,UAAU,IAAI,IAAI;IASlB;;OAEG;YACW,iBAAiB;IAuB/B;;OAEG;YACW,mBAAmB;IAsBjC;;OAEG;YACW,iBAAiB;CAsBhC;AAMD;;GAEG;AACH,eAAO,MAAM,aAAa,uBAA8B,CAAC;AAMzD;;GAEG;AACH,wBAAsB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAE7E;AAED;;;;;;;;;;;;GAYG;AACH,wBAAsB,cAAc,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAE/E;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,GAAG,EAAE,gBAAgB,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC,CAExF;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI,CAsB/D"}
|
|
@@ -6,14 +6,21 @@
|
|
|
6
6
|
* - Up to MAX_CACHED_DOCS PDFDocumentProxy instances are kept in memory.
|
|
7
7
|
* - Least-recently-used documents are evicted via doc.destroy() to free memory.
|
|
8
8
|
*/
|
|
9
|
+
import { readFile } from 'node:fs/promises';
|
|
9
10
|
import * as pdfjsLib from 'pdfjs-dist/legacy/build/pdf.mjs';
|
|
10
|
-
import { readFile } from 'fs/promises';
|
|
11
11
|
import { MAX_CACHED_DOCS } from '../config.js';
|
|
12
12
|
import { logger } from '../utils/logger.js';
|
|
13
13
|
import { stripZeroWidthChars } from '../utils/text.js';
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
14
|
+
const openFromDisk = async (pdfPath) => {
|
|
15
|
+
const start = Date.now();
|
|
16
|
+
const data = new Uint8Array(await readFile(pdfPath));
|
|
17
|
+
// The legacy build (pdfjs-dist/legacy/build/pdf.mjs) ships no type declarations of its
|
|
18
|
+
// own, so the module object is untyped here. Narrow it to just the call we make rather
|
|
19
|
+
// than casting to `any`, which would silence real errors on this line too.
|
|
20
|
+
const doc = await pdfjsLib.getDocument({ data }).promise;
|
|
21
|
+
logger.info('PDFLoader', `Loaded ${pdfPath} (${doc.numPages} pages) in ${Date.now() - start}ms`);
|
|
22
|
+
return doc;
|
|
23
|
+
};
|
|
17
24
|
/**
|
|
18
25
|
* Class-based PDF loader service with multi-document LRU cache.
|
|
19
26
|
*/
|
|
@@ -21,10 +28,12 @@ export class DocumentLoaderService {
|
|
|
21
28
|
documentCache;
|
|
22
29
|
accessOrder; // LRU tracking: oldest first
|
|
23
30
|
maxCachedDocs;
|
|
24
|
-
|
|
31
|
+
source;
|
|
32
|
+
constructor(maxCachedDocs = MAX_CACHED_DOCS, source = openFromDisk) {
|
|
25
33
|
this.documentCache = new Map();
|
|
26
34
|
this.accessOrder = [];
|
|
27
35
|
this.maxCachedDocs = maxCachedDocs;
|
|
36
|
+
this.source = source;
|
|
28
37
|
}
|
|
29
38
|
/**
|
|
30
39
|
* Load PDF document (LRU cached, up to maxCachedDocs)
|
|
@@ -96,9 +105,13 @@ export class DocumentLoaderService {
|
|
|
96
105
|
* Internal: Load a fresh document from disk and add to LRU cache.
|
|
97
106
|
*/
|
|
98
107
|
async loadDocumentFresh(pdfPath) {
|
|
99
|
-
// Evict oldest if cache is full
|
|
100
|
-
|
|
108
|
+
// Evict oldest if cache is full.
|
|
109
|
+
// shift() returning undefined replaces the old `accessOrder.length > 0` guard —
|
|
110
|
+
// same condition, without a non-null assertion.
|
|
111
|
+
while (this.documentCache.size >= this.maxCachedDocs) {
|
|
101
112
|
const oldest = this.accessOrder.shift();
|
|
113
|
+
if (oldest === undefined)
|
|
114
|
+
break;
|
|
102
115
|
const doc = this.documentCache.get(oldest);
|
|
103
116
|
if (doc) {
|
|
104
117
|
doc.destroy();
|
|
@@ -107,12 +120,7 @@ export class DocumentLoaderService {
|
|
|
107
120
|
}
|
|
108
121
|
}
|
|
109
122
|
// Load new document
|
|
110
|
-
const
|
|
111
|
-
const data = new Uint8Array(await readFile(pdfPath));
|
|
112
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
113
|
-
const doc = await pdfjsLib.getDocument({ data }).promise;
|
|
114
|
-
const elapsed = Date.now() - start;
|
|
115
|
-
logger.info('PDFLoader', `Loaded ${pdfPath} (${doc.numPages} pages) in ${elapsed}ms`);
|
|
123
|
+
const doc = await this.source(pdfPath);
|
|
116
124
|
this.documentCache.set(pdfPath, doc);
|
|
117
125
|
this.accessOrder.push(pdfPath);
|
|
118
126
|
return doc;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf-loader.js","sourceRoot":"","sources":["../../src/services/pdf-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,
|
|
1
|
+
{"version":3,"file":"pdf-loader.js","sourceRoot":"","sources":["../../src/services/pdf-loader.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,KAAK,QAAQ,MAAM,iCAAiC,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE/C,OAAO,EAAE,MAAM,EAAE,MAAM,oBAAoB,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAoCvD,MAAM,YAAY,GAAmB,KAAK,EAAE,OAAO,EAAE,EAAE;IACrD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IACzB,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;IACrD,uFAAuF;IACvF,uFAAuF;IACvF,2EAA2E;IAC3E,MAAM,GAAG,GAAqB,MAC5B,QAGD,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC;IAChC,MAAM,CAAC,IAAI,CAAC,WAAW,EAAE,UAAU,OAAO,KAAK,GAAG,CAAC,QAAQ,cAAc,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK,IAAI,CAAC,CAAC;IACjG,OAAO,GAAG,CAAC;AACb,CAAC,CAAC;AAEF;;GAEG;AACH,MAAM,OAAO,qBAAqB;IACxB,aAAa,CAAgC;IAC7C,WAAW,CAAW,CAAC,6BAA6B;IACpD,aAAa,CAAS;IACtB,MAAM,CAAiB;IAE/B,YAAY,gBAAwB,eAAe,EAAE,SAAyB,YAAY;QACxF,IAAI,CAAC,aAAa,GAAG,IAAI,GAAG,EAAE,CAAC;QAC/B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,IAAI,CAAC,aAAa,GAAG,aAAa,CAAC;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,OAAe;QAChC,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,QAAQ,EAAE,CAAC;YACb,mDAAmD;YACnD,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,GAAG,IAAI,CAAC;gBAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC9C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;YAC/B,OAAO,QAAQ,CAAC;QAClB,CAAC;QAED,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED;;;;;;;;;;;;OAYG;IACH,KAAK,CAAC,cAAc,CAAC,OAAe;QAClC,8BAA8B;QAC9B,MAAM,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACjD,IAAI,QAAQ,EAAE,CAAC;YACb,QAAQ,CAAC,OAAO,EAAE,CAAC;YACnB,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACnC,MAAM,GAAG,GAAG,IAAI,CAAC,WAAW,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;YAC9C,IAAI,GAAG,IAAI,CAAC;gBAAE,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,mBAAmB,CAAC,GAAqB;QAC7C,MAAM,UAAU,GAAG,MAAM,GAAG,CAAC,UAAU,EAAE,CAAC;QAC1C,IAAI,CAAC,UAAU;YAAE,OAAO,EAAE,CAAC;QAC3B,OAAO,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,UAAU,CAAC,CAAC;IACnD,CAAC;IAED;;OAEG;IACH,IAAI,SAAS;QACX,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,CAAC;IACjC,CAAC;IAED;;OAEG;IACH,UAAU;QACR,KAAK,MAAM,GAAG,IAAI,IAAI,CAAC,aAAa,CAAC,MAAM,EAAE,EAAE,CAAC;YAC9C,GAAG,CAAC,OAAO,EAAE,CAAC;QAChB,CAAC;QACD,IAAI,CAAC,aAAa,CAAC,KAAK,EAAE,CAAC;QAC3B,IAAI,CAAC,WAAW,GAAG,EAAE,CAAC;QACtB,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,wBAAwB,CAAC,CAAC;IACtD,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAAC,OAAe;QAC7C,iCAAiC;QACjC,gFAAgF;QAChF,gDAAgD;QAChD,OAAO,IAAI,CAAC,aAAa,CAAC,IAAI,IAAI,IAAI,CAAC,aAAa,EAAE,CAAC;YACrD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;YACxC,IAAI,MAAM,KAAK,SAAS;gBAAE,MAAM;YAChC,MAAM,GAAG,GAAG,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC3C,IAAI,GAAG,EAAE,CAAC;gBACR,GAAG,CAAC,OAAO,EAAE,CAAC;gBACd,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAClC,MAAM,CAAC,KAAK,CAAC,WAAW,EAAE,4BAA4B,MAAM,EAAE,CAAC,CAAC;YAClE,CAAC;QACH,CAAC;QAED,oBAAoB;QACpB,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAEvC,IAAI,CAAC,aAAa,CAAC,GAAG,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC;QACrC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAC/B,OAAO,GAAG,CAAC;IACb,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,mBAAmB,CAC/B,GAAqB,EACrB,KAAoB;QAEpB,MAAM,OAAO,GAAmB,EAAE,CAAC;QAEnC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,IAAI,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;YAC1D,MAAM,aAAa,GAAG,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACrD,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,mBAAmB,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;YAEnF,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,IAAI,CAAC,KAAK;gBACjB,IAAI;gBACJ,aAAa;gBACb,QAAQ;aACT,CAAC,CAAC;QACL,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAC7B,GAAqB,EACrB,IAA+B;QAE/B,IAAI,CAAC,IAAI;YAAE,OAAO,CAAC,CAAC,CAAC;QAErB,IAAI,CAAC;YACH,IAAI,SAAoB,CAAC;YACzB,IAAI,OAAO,IAAI,KAAK,QAAQ,EAAE,CAAC;gBAC7B,MAAM,QAAQ,GAAG,MAAM,GAAG,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;gBAChD,IAAI,CAAC,QAAQ;oBAAE,OAAO,CAAC,CAAC,CAAC;gBACzB,SAAS,GAAG,QAAQ,CAAC;YACvB,CAAC;iBAAM,CAAC;gBACN,SAAS,GAAG,IAAI,CAAC;YACnB,CAAC;YAED,MAAM,SAAS,GAAG,MAAM,GAAG,CAAC,YAAY,CAAC,SAAS,CAAC,CAAC,CAAa,CAAC,CAAC;YACnE,OAAO,SAAS,GAAG,CAAC,CAAC,CAAC,UAAU;QAClC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,CAAC,CAAC;QACZ,CAAC;IACH,CAAC;CACF;AAED,2CAA2C;AAC3C,2BAA2B;AAC3B,2CAA2C;AAE3C;;GAEG;AACH,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,qBAAqB,EAAE,CAAC;AAEzD,2CAA2C;AAC3C,wCAAwC;AACxC,2CAA2C;AAE3C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,OAAe;IAChD,OAAO,aAAa,CAAC,YAAY,CAAC,OAAO,CAAC,CAAC;AAC7C,CAAC;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,OAAe;IAClD,OAAO,aAAa,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,GAAqB;IAC7D,OAAO,aAAa,CAAC,mBAAmB,CAAC,GAAG,CAAC,CAAC;AAChD,CAAC;AAED,2CAA2C;AAC3C,+CAA+C;AAC/C,2CAA2C;AAE3C;;;;;;;;;;GAUG;AACH,MAAM,UAAU,kBAAkB,CAAC,KAAa;IAC9C,mDAAmD;IACnD,MAAM,OAAO,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;IAElD,gEAAgE;IAChE,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC;IACtD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEjC,2DAA2D;IAC3D,kFAAkF;IAClF,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAC;IACnD,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC,CAAC,CAAC,CAAC;IAEjC,2DAA2D;IAC3D,MAAM,UAAU,GAAG,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;IAChE,IAAI,UAAU;QAAE,OAAO,UAAU,CAAC,CAAC,CAAC,CAAC;IAErC,6DAA6D;IAC7D,MAAM,aAAa,GAAG,OAAO,CAAC,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC5D,IAAI,aAAa;QAAE,OAAO,aAAa,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAE5E,OAAO,IAAI,CAAC;AACd,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf-registry.d.ts","sourceRoot":"","sources":["../../src/services/pdf-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;
|
|
1
|
+
{"version":3,"file":"pdf-registry.d.ts","sourceRoot":"","sources":["../../src/services/pdf-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAMH,OAAO,KAAK,EAAE,YAAY,EAAU,QAAQ,EAAE,MAAM,mBAAmB,CAAC;AAQxE;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAoC;IACpD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,gBAAgB,CAA8B;IAEtD;;;OAGG;IACG,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC;IAQxC;;OAEG;YACW,aAAa;IAwE3B;;;OAGG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM;IAYnC;;OAEG;IACH,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,QAAQ,GAAG,SAAS;IAIjD;;OAEG;IACH,SAAS,CAAC,QAAQ,CAAC,EAAE,YAAY,GAAG,QAAQ,EAAE;IAQ9C;;OAEG;IACH,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO;IAIxC;;;OAGG;IACH,aAAa,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM;IAYtC;;;OAGG;IACH,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,cAAc,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI;CAWxF;AAGD,eAAO,MAAM,eAAe,iBAAwB,CAAC;AAGrD,eAAO,MAAM,yBAAyB,qBAA4C,CAAC;AACnF,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,WAAwC,CAAC;AACnF,eAAO,MAAM,WAAW,GAAI,QAAQ,MAAM,yBAAwC,CAAC;AACnF,eAAO,MAAM,SAAS,GAAI,WAAW,YAAY,eAAwC,CAAC;AAC1F,eAAO,MAAM,eAAe,GAAI,QAAQ,MAAM,YAA4C,CAAC;AAC3F,eAAO,MAAM,aAAa,GAAI,SAAS,MAAM,WAA0C,CAAC;AACxF,eAAO,MAAM,cAAc,GAAI,QAAQ,MAAM,EAAE,MAAM;IAAE,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,cAAc,CAAC,EAAE,MAAM,CAAA;CAAE,SAClD,CAAC"}
|
|
@@ -6,10 +6,10 @@
|
|
|
6
6
|
* 1. discoverSpecs() — file scan only (path + pattern match)
|
|
7
7
|
* 2. enrichSpecInfo() — open PDF to get pages/outlineEntries (on first tool access)
|
|
8
8
|
*/
|
|
9
|
-
import { readdir } from 'fs/promises';
|
|
10
|
-
import { join } from 'path';
|
|
11
|
-
import { PDF_CONFIG, SPEC_PATTERNS
|
|
12
|
-
import { RegistryError } from '../errors.js';
|
|
9
|
+
import { readdir } from 'node:fs/promises';
|
|
10
|
+
import { join } from 'node:path';
|
|
11
|
+
import { DEFAULT_SPEC_ID, PDF_CONFIG, SPEC_PATTERNS } from '../config.js';
|
|
12
|
+
import { NEXT_ACTIONS, RegistryError } from '../errors.js';
|
|
13
13
|
import { logger } from '../utils/logger.js';
|
|
14
14
|
/**
|
|
15
15
|
* RegistryService encapsulates all PDF spec registry functionality
|
|
@@ -37,14 +37,22 @@ export class RegistryService {
|
|
|
37
37
|
const dir = process.env[PDF_CONFIG.envVar];
|
|
38
38
|
if (!dir) {
|
|
39
39
|
throw new RegistryError(`Environment variable ${PDF_CONFIG.envVar} is not set. ` +
|
|
40
|
-
`Set it to the directory containing PDF specification files
|
|
40
|
+
`Set it to the directory containing PDF specification files.`, {
|
|
41
|
+
hint: 'The server cannot locate any specification PDF without this.',
|
|
42
|
+
next_actions: [NEXT_ACTIONS.setSpecDir(PDF_CONFIG.envVar)],
|
|
43
|
+
retryable: false,
|
|
44
|
+
});
|
|
41
45
|
}
|
|
42
46
|
let files;
|
|
43
47
|
try {
|
|
44
48
|
files = await readdir(dir);
|
|
45
49
|
}
|
|
46
50
|
catch (err) {
|
|
47
|
-
throw new RegistryError(`Cannot read PDF_SPEC_DIR "${dir}": ${err}
|
|
51
|
+
throw new RegistryError(`Cannot read PDF_SPEC_DIR "${dir}": ${err}`, {
|
|
52
|
+
hint: 'The directory is set but unreadable — check that it exists and is accessible.',
|
|
53
|
+
next_actions: [NEXT_ACTIONS.setSpecDir(PDF_CONFIG.envVar)],
|
|
54
|
+
retryable: false,
|
|
55
|
+
});
|
|
48
56
|
}
|
|
49
57
|
const pdfFiles = files.filter((f) => f.toLowerCase().endsWith('.pdf'));
|
|
50
58
|
let matched = 0;
|
|
@@ -92,7 +100,7 @@ export class RegistryService {
|
|
|
92
100
|
const entry = this.registry.get(specId);
|
|
93
101
|
if (!entry) {
|
|
94
102
|
const available = [...this.registry.keys()].join(', ');
|
|
95
|
-
throw new RegistryError(`Specification "${specId}" not found. Available specs: ${available || '(none — run list_specs first)'}
|
|
103
|
+
throw new RegistryError(`Specification "${specId}" not found. Available specs: ${available || '(none — run list_specs first)'}`, { next_actions: [NEXT_ACTIONS.listSpecs()], retryable: true });
|
|
96
104
|
}
|
|
97
105
|
return entry.path;
|
|
98
106
|
}
|
|
@@ -126,7 +134,7 @@ export class RegistryService {
|
|
|
126
134
|
const id = specId ?? DEFAULT_SPEC_ID;
|
|
127
135
|
if (!this.registry.has(id)) {
|
|
128
136
|
const available = [...this.registry.keys()].join(', ');
|
|
129
|
-
throw new RegistryError(`Specification "${id}" not found. Available specs: ${available || '(none)'}
|
|
137
|
+
throw new RegistryError(`Specification "${id}" not found. Available specs: ${available || '(none)'}`, { next_actions: [NEXT_ACTIONS.listSpecs()], retryable: true });
|
|
130
138
|
}
|
|
131
139
|
return id;
|
|
132
140
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf-registry.js","sourceRoot":"","sources":["../../src/services/pdf-registry.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,
|
|
1
|
+
{"version":3,"file":"pdf-registry.js","sourceRoot":"","sources":["../../src/services/pdf-registry.ts"],"names":[],"mappings":"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"}
|