driverge-mcp 0.0.0 → 0.0.1
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 +275 -29
- package/dist/codegen/esp32.d.ts +11 -3
- package/dist/codegen/esp32.js +221 -10
- package/dist/codegen/esp32.js.map +1 -1
- package/dist/codegen/ident.d.ts +24 -2
- package/dist/codegen/ident.js +37 -4
- package/dist/codegen/ident.js.map +1 -1
- package/dist/codegen/index.d.ts +12 -7
- package/dist/codegen/index.js +17 -14
- package/dist/codegen/index.js.map +1 -1
- package/dist/codegen/lint.js +28 -8
- package/dist/codegen/lint.js.map +1 -1
- package/dist/codegen/portable-cpp.d.ts +8 -0
- package/dist/codegen/portable-cpp.js +281 -0
- package/dist/codegen/portable-cpp.js.map +1 -0
- package/dist/codegen/portable.d.ts +99 -3
- package/dist/codegen/portable.js +419 -99
- package/dist/codegen/portable.js.map +1 -1
- package/dist/codegen/stm32.d.ts +11 -3
- package/dist/codegen/stm32.js +156 -11
- package/dist/codegen/stm32.js.map +1 -1
- package/dist/codegen/types.d.ts +32 -0
- package/dist/codegen/types.js +27 -0
- package/dist/codegen/types.js.map +1 -1
- package/dist/mcp/cache.d.ts +15 -2
- package/dist/mcp/cache.js +32 -4
- package/dist/mcp/cache.js.map +1 -1
- package/dist/mcp/register.d.ts +17 -0
- package/dist/mcp/register.js +149 -21
- package/dist/mcp/register.js.map +1 -1
- package/dist/mcp/summary.js +8 -0
- package/dist/mcp/summary.js.map +1 -1
- package/dist/pdf/address.d.ts +4 -0
- package/dist/pdf/address.js +28 -0
- package/dist/pdf/address.js.map +1 -0
- package/dist/pdf/command.js +87 -14
- package/dist/pdf/command.js.map +1 -1
- package/dist/pdf/extract.js +23 -2
- package/dist/pdf/extract.js.map +1 -1
- package/dist/pdf/generic-register-table.d.ts +5 -0
- package/dist/pdf/generic-register-table.js +125 -0
- package/dist/pdf/generic-register-table.js.map +1 -0
- package/dist/pdf/index.d.ts +2 -0
- package/dist/pdf/index.js +2 -0
- package/dist/pdf/index.js.map +1 -1
- package/dist/pdf/interface-kind.d.ts +11 -0
- package/dist/pdf/interface-kind.js +18 -0
- package/dist/pdf/interface-kind.js.map +1 -1
- package/dist/pdf/manufacturer.js +39 -0
- package/dist/pdf/manufacturer.js.map +1 -1
- package/dist/pdf/maxim-register-map.d.ts +11 -0
- package/dist/pdf/maxim-register-map.js +544 -0
- package/dist/pdf/maxim-register-map.js.map +1 -0
- package/dist/pdf/part.js +8 -0
- package/dist/pdf/part.js.map +1 -1
- package/dist/pdf/prose-commands.d.ts +4 -0
- package/dist/pdf/prose-commands.js +90 -0
- package/dist/pdf/prose-commands.js.map +1 -0
- package/dist/pdf/st-bit-layout.d.ts +3 -0
- package/dist/pdf/st-bit-layout.js +238 -0
- package/dist/pdf/st-bit-layout.js.map +1 -0
- package/dist/pdf/ti-field-descriptions.d.ts +10 -0
- package/dist/pdf/ti-field-descriptions.js +87 -0
- package/dist/pdf/ti-field-descriptions.js.map +1 -0
- package/dist/pdf/ti-register-map.d.ts +5 -0
- package/dist/pdf/ti-register-map.js +84 -0
- package/dist/pdf/ti-register-map.js.map +1 -0
- package/dist/pdf/types.d.ts +15 -3
- package/dist/pdf/types.js +4 -1
- package/dist/pdf/types.js.map +1 -1
- package/dist/schema/assemble.d.ts +35 -3
- package/dist/schema/assemble.js +86 -13
- package/dist/schema/assemble.js.map +1 -1
- package/dist/schema/types.d.ts +21 -1
- package/dist/schema/validate.js +37 -10
- package/dist/schema/validate.js.map +1 -1
- package/dist/server.d.ts +18 -0
- package/dist/server.js +49 -3
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
- package/schemas/datasheet.schema.json +17 -3
package/dist/mcp/register.js
CHANGED
|
@@ -1,19 +1,61 @@
|
|
|
1
1
|
// Registers the full Driverge MCP surface — tools, resources, prompts — on a
|
|
2
2
|
// server instance. Kept out of server.ts so the wiring is unit-testable over an
|
|
3
3
|
// in-memory transport. Contract: wiki mcp-tool-usage-flow.
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
4
|
+
import { mkdirSync, readFileSync, statSync, writeFileSync } from "node:fs";
|
|
5
|
+
import { dirname, isAbsolute, relative, resolve } from "node:path";
|
|
6
6
|
import { fileURLToPath } from "node:url";
|
|
7
7
|
import { ResourceTemplate, } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
8
8
|
import { z } from "zod";
|
|
9
|
-
import { UnsupportedTargetError, generateDriver, lintDriver, } from "../codegen/index.js";
|
|
9
|
+
import { UnsupportedBusError, UnsupportedTargetError, generateDriver, lintDriver, } from "../codegen/index.js";
|
|
10
10
|
import { analyzePdfFile } from "../pdf/analyze.js";
|
|
11
11
|
import { assembleDatasheet } from "../schema/assemble.js";
|
|
12
12
|
import { validateDatasheet } from "../schema/validate.js";
|
|
13
13
|
import { computeRef, getDatasheet, putDatasheet } from "./cache.js";
|
|
14
14
|
import { buildSummary } from "./summary.js";
|
|
15
15
|
const TARGET = z.enum(["portable", "stm32", "esp32", "arduino"]);
|
|
16
|
+
// Session D: output language flavor. "c" (default) is today's thin-HAL C
|
|
17
|
+
// skeleton; "cpp" renders a class wrapper — see CodegenLanguage. Invalid values
|
|
18
|
+
// (e.g. "rust") are rejected by this zod schema before the handler ever runs.
|
|
19
|
+
const LANGUAGE = z.enum(["c", "cpp"]);
|
|
16
20
|
const FILES = z.array(z.object({ path: z.string(), content: z.string() }));
|
|
21
|
+
// Structural guard for validate_datasheet's `json` arg (S5, see wiki:
|
|
22
|
+
// validate-before-sending-to-claude): a minimal zod parse covering exactly what
|
|
23
|
+
// validateDatasheet reads, so a malformed/hand-typed blob fails with a clean
|
|
24
|
+
// message instead of a raw TypeError from deep inside the validator. Loose on
|
|
25
|
+
// fields validateDatasheet doesn't touch — this is a guard, not a schema mirror.
|
|
26
|
+
const BIT_FIELD_SCHEMA = z.object({
|
|
27
|
+
name: z.string(),
|
|
28
|
+
msb: z.number(),
|
|
29
|
+
lsb: z.number(),
|
|
30
|
+
});
|
|
31
|
+
const REGISTER_SCHEMA = z.object({
|
|
32
|
+
name: z.string(),
|
|
33
|
+
address: z.string(),
|
|
34
|
+
reset: z.string(),
|
|
35
|
+
width: z.number().optional(),
|
|
36
|
+
bitFields: z.array(BIT_FIELD_SCHEMA),
|
|
37
|
+
});
|
|
38
|
+
const COMMAND_SCHEMA = z.object({
|
|
39
|
+
name: z.string(),
|
|
40
|
+
code: z.string(),
|
|
41
|
+
responseWords: z.number().optional(),
|
|
42
|
+
crc: z.object({ poly: z.string(), init: z.string(), width: z.number() }).optional(),
|
|
43
|
+
});
|
|
44
|
+
const INTERFACE_SCHEMA = z.discriminatedUnion("kind", [
|
|
45
|
+
z.object({ kind: z.literal("register_map"), registers: z.array(REGISTER_SCHEMA) }),
|
|
46
|
+
z.object({ kind: z.literal("command_set"), commands: z.array(COMMAND_SCHEMA) }),
|
|
47
|
+
]);
|
|
48
|
+
const DATASHEET_JSON_GUARD = z.object({
|
|
49
|
+
metadata: z.looseObject({ part: z.string() }),
|
|
50
|
+
protocol: z.looseObject({ bus: z.string() }),
|
|
51
|
+
interface: INTERFACE_SCHEMA,
|
|
52
|
+
extraction: z
|
|
53
|
+
.object({
|
|
54
|
+
status: z.enum(["complete", "partial", "deferred", "none"]),
|
|
55
|
+
detectedPages: z.array(z.number()),
|
|
56
|
+
})
|
|
57
|
+
.optional(),
|
|
58
|
+
}).loose();
|
|
17
59
|
const text = (value, isError = false) => ({
|
|
18
60
|
content: [
|
|
19
61
|
{
|
|
@@ -23,6 +65,39 @@ const text = (value, isError = false) => ({
|
|
|
23
65
|
],
|
|
24
66
|
...(isError ? { isError: true } : {}),
|
|
25
67
|
});
|
|
68
|
+
// Matches an absolute Windows path ("C:\..." or "C:/...") even when Node's
|
|
69
|
+
// `path` module resolves in POSIX mode (e.g. tests running on a non-Windows
|
|
70
|
+
// CI). Node's own `isAbsolute()` only recognizes the *current platform's*
|
|
71
|
+
// notion of absolute, so on POSIX it does NOT consider "C:\evil.h" absolute —
|
|
72
|
+
// this regex closes that gap so resolveArtifactPath's containment check is
|
|
73
|
+
// meaningful on every platform, not just Windows (B3).
|
|
74
|
+
const WINDOWS_ABSOLUTE = /^[a-zA-Z]:[\\/]/;
|
|
75
|
+
/**
|
|
76
|
+
* Confines a single artifact file path (`DriverArtifact.files[].path`) under
|
|
77
|
+
* `rootDir`, returning the resolved absolute path when it is safely inside
|
|
78
|
+
* `rootDir`, or `undefined` when it escapes (an absolute path — POSIX or
|
|
79
|
+
* Windows-style — or a relative path that climbs out via `..`). Mirrors the
|
|
80
|
+
* out_dir escape check in the generate_driver handler below (resolve +
|
|
81
|
+
* relative + isAbsolute) so both containment checks agree on what "escapes"
|
|
82
|
+
* means. A nested-but-non-escaping relative path (e.g. "sub/dir/file.h") is
|
|
83
|
+
* accepted and resolves under rootDir.
|
|
84
|
+
*
|
|
85
|
+
* `filePath` is always Driverge's own deterministic codegen output today
|
|
86
|
+
* (safe), but the generate_driver handler has no other guard if that ever
|
|
87
|
+
* changes — a hostile/careless datasheet-derived slug, a future codegen bug,
|
|
88
|
+
* etc. — so this is the second containment check, applied to every file
|
|
89
|
+
* BEFORE any of them are written (B3).
|
|
90
|
+
*/
|
|
91
|
+
export function resolveArtifactPath(rootDir, filePath) {
|
|
92
|
+
if (isAbsolute(filePath) || WINDOWS_ABSOLUTE.test(filePath))
|
|
93
|
+
return undefined;
|
|
94
|
+
const resolvedRoot = resolve(rootDir);
|
|
95
|
+
const target = resolve(resolvedRoot, filePath);
|
|
96
|
+
const rel = relative(resolvedRoot, target);
|
|
97
|
+
if (rel.startsWith("..") || isAbsolute(rel))
|
|
98
|
+
return undefined;
|
|
99
|
+
return target;
|
|
100
|
+
}
|
|
26
101
|
// The frozen JSON-Schema, shipped alongside dist/ (see package.json "files").
|
|
27
102
|
function loadSchemaText() {
|
|
28
103
|
try {
|
|
@@ -30,6 +105,8 @@ function loadSchemaText() {
|
|
|
30
105
|
return readFileSync(fileURLToPath(url), "utf8");
|
|
31
106
|
}
|
|
32
107
|
catch {
|
|
108
|
+
// stderr is safe for a stdio MCP server (stdout is the protocol channel).
|
|
109
|
+
console.error("driverge-mcp: could not read schemas/datasheet.schema.json — serving an empty schema");
|
|
33
110
|
return "{}";
|
|
34
111
|
}
|
|
35
112
|
}
|
|
@@ -42,11 +119,20 @@ export function registerDrivergeTools(server) {
|
|
|
42
119
|
manufacturer_hint: z.string().optional(),
|
|
43
120
|
interface_kind_hint: z.enum(["register_map", "command_set"]).optional(),
|
|
44
121
|
},
|
|
45
|
-
}, async ({ pdf_path }) => {
|
|
46
|
-
|
|
122
|
+
}, async ({ pdf_path, manufacturer_hint, interface_kind_hint }) => {
|
|
123
|
+
// Single stat call (not existsSync + statSync) to close the TOCTOU gap
|
|
124
|
+
// where the file could vanish/change between the check and the read (S4).
|
|
125
|
+
let mtimeMs;
|
|
126
|
+
try {
|
|
127
|
+
mtimeMs = statSync(pdf_path).mtimeMs;
|
|
128
|
+
}
|
|
129
|
+
catch {
|
|
47
130
|
return text(`file not found: ${pdf_path}`, true);
|
|
48
131
|
}
|
|
49
|
-
|
|
132
|
+
// Fold the hints into the ref material (Session 10 / Contract A): the ref
|
|
133
|
+
// is otherwise path+mtime only, so re-analyzing the same file with
|
|
134
|
+
// different hints would silently serve a hint-less cached entry.
|
|
135
|
+
const ref = computeRef(pdf_path, mtimeMs, `${manufacturer_hint ?? ""}:${interface_kind_hint ?? ""}`);
|
|
50
136
|
const cached = getDatasheet(ref);
|
|
51
137
|
if (cached)
|
|
52
138
|
return text(buildSummary(cached));
|
|
@@ -60,19 +146,23 @@ export function registerDrivergeTools(server) {
|
|
|
60
146
|
if (analysis.type === "scanned") {
|
|
61
147
|
return text("PDF appears to be scanned (no extractable text). OCR is not supported in v0.1.0.", true);
|
|
62
148
|
}
|
|
63
|
-
const json = assembleDatasheet(analysis
|
|
149
|
+
const json = assembleDatasheet(analysis, {
|
|
150
|
+
manufacturerHint: manufacturer_hint,
|
|
151
|
+
interfaceKindHint: interface_kind_hint,
|
|
152
|
+
});
|
|
64
153
|
putDatasheet({ ref, pdfPath: pdf_path, json });
|
|
65
154
|
return text(buildSummary({ ref, pdfPath: pdf_path, json }));
|
|
66
155
|
});
|
|
67
156
|
server.registerTool("generate_driver", {
|
|
68
157
|
title: "Generate driver",
|
|
69
|
-
description: "Render a deterministic thin-HAL driver skeleton (with TODO(driverge) markers + a fill_in_brief) from a previously analyzed datasheet `ref`. Rejects refs that failed validation.",
|
|
158
|
+
description: "Render a deterministic thin-HAL driver skeleton (with TODO(driverge) markers + a fill_in_brief) from a previously analyzed datasheet `ref`. Rejects refs that failed validation. `language` defaults to \"c\" (struct + free functions); pass \"cpp\" for a class wrapper (.hpp/.cpp) around the same #define macros and hal_* seam.",
|
|
70
159
|
inputSchema: {
|
|
71
160
|
ref: z.string(),
|
|
72
161
|
target: TARGET.default("portable"),
|
|
162
|
+
language: LANGUAGE.default("c"),
|
|
73
163
|
out_dir: z.string().optional(),
|
|
74
164
|
},
|
|
75
|
-
}, async ({ ref, target, out_dir }) => {
|
|
165
|
+
}, async ({ ref, target, language, out_dir }) => {
|
|
76
166
|
const entry = getDatasheet(ref);
|
|
77
167
|
if (!entry)
|
|
78
168
|
return text(`unknown ref "${ref}" — run analyze_datasheet first`, true);
|
|
@@ -84,24 +174,51 @@ export function registerDrivergeTools(server) {
|
|
|
84
174
|
}
|
|
85
175
|
let artifact;
|
|
86
176
|
try {
|
|
87
|
-
artifact = generateDriver(entry.json, target);
|
|
177
|
+
artifact = generateDriver(entry.json, target, { language });
|
|
88
178
|
}
|
|
89
179
|
catch (err) {
|
|
90
180
|
if (err instanceof UnsupportedTargetError)
|
|
91
181
|
return text(err.message, true);
|
|
182
|
+
if (err instanceof UnsupportedBusError)
|
|
183
|
+
return text(err.message, true);
|
|
92
184
|
throw err;
|
|
93
185
|
}
|
|
94
186
|
if (out_dir) {
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
187
|
+
// S1: confine writes under DRIVERGE_OUT_ROOT (default cwd), read at call
|
|
188
|
+
// time so tests can scope it per-case. relative() + isAbsolute() catches
|
|
189
|
+
// both "../escape" traversal and an absolute path on another drive; no
|
|
190
|
+
// directory is created before this check passes.
|
|
191
|
+
const root = process.env.DRIVERGE_OUT_ROOT ?? process.cwd();
|
|
192
|
+
const resolvedRoot = resolve(root);
|
|
193
|
+
const resolvedOut = resolve(resolvedRoot, out_dir);
|
|
194
|
+
const rel = relative(resolvedRoot, resolvedOut);
|
|
195
|
+
if (rel.startsWith("..") || isAbsolute(rel)) {
|
|
196
|
+
return text(`out_dir "${out_dir}" escapes the allowed root "${resolvedRoot}" (set DRIVERGE_OUT_ROOT to change it)`, true);
|
|
197
|
+
}
|
|
198
|
+
// B3: a SECOND containment check, this time on each artifact file's
|
|
199
|
+
// own path — resolveArtifactPath, not a bare join(resolvedOut,
|
|
200
|
+
// f.path). Every path is validated BEFORE any file is written, so a
|
|
201
|
+
// single escaping path aborts the whole write with no partial output.
|
|
202
|
+
const targets = [];
|
|
203
|
+
for (const f of artifact.files) {
|
|
204
|
+
const target = resolveArtifactPath(resolvedOut, f.path);
|
|
205
|
+
if (!target) {
|
|
206
|
+
return text(`generated file path "${f.path}" escapes the output directory "${resolvedOut}" — refusing to write anything`, true);
|
|
207
|
+
}
|
|
208
|
+
targets.push({ target, content: f.content });
|
|
209
|
+
}
|
|
210
|
+
mkdirSync(resolvedOut, { recursive: true });
|
|
211
|
+
for (const { target, content } of targets) {
|
|
212
|
+
mkdirSync(dirname(target), { recursive: true });
|
|
213
|
+
writeFileSync(target, content);
|
|
214
|
+
}
|
|
98
215
|
}
|
|
99
216
|
return text(artifact);
|
|
100
217
|
});
|
|
101
218
|
server.registerTool("validate_driver", {
|
|
102
219
|
title: "Validate driver",
|
|
103
220
|
description: "Static-lint a completed driver against its source datasheet `ref`: thin-HAL purity, no leftover TODO(driverge), register/command references exist, bit-field masks match the JSON.",
|
|
104
|
-
inputSchema: { ref: z.string(),
|
|
221
|
+
inputSchema: { ref: z.string(), files: FILES },
|
|
105
222
|
}, async ({ ref, files }) => {
|
|
106
223
|
const entry = getDatasheet(ref);
|
|
107
224
|
if (!entry)
|
|
@@ -127,8 +244,19 @@ export function registerDrivergeTools(server) {
|
|
|
127
244
|
return text(`unknown ref "${ref}"`, true);
|
|
128
245
|
return text(validateDatasheet(entry.json));
|
|
129
246
|
}
|
|
130
|
-
if (json)
|
|
131
|
-
|
|
247
|
+
if (json) {
|
|
248
|
+
// S5: structural parse before validateDatasheet ever dereferences the
|
|
249
|
+
// shape — a hand-typed/malformed blob must fail cleanly, not throw a
|
|
250
|
+
// raw TypeError from deep inside the validator.
|
|
251
|
+
const parsed = DATASHEET_JSON_GUARD.safeParse(json);
|
|
252
|
+
if (!parsed.success) {
|
|
253
|
+
const issues = parsed.error.issues
|
|
254
|
+
.map((i) => `${i.path.join(".") || "(root)"}: ${i.message}`)
|
|
255
|
+
.join("; ");
|
|
256
|
+
return text(`invalid datasheet JSON — ${issues}`, true);
|
|
257
|
+
}
|
|
258
|
+
return text(validateDatasheet(parsed.data));
|
|
259
|
+
}
|
|
132
260
|
return text("provide either `ref` or `json`", true);
|
|
133
261
|
});
|
|
134
262
|
}
|
|
@@ -164,18 +292,18 @@ export function registerDrivergeResources(server) {
|
|
|
164
292
|
export function registerDrivergePrompts(server) {
|
|
165
293
|
server.registerPrompt("generate-driver", {
|
|
166
294
|
title: "Generate a driver",
|
|
167
|
-
description: "Guided flow: render the skeleton for a ref/target, complete the TODO(driverge) markers using the datasheet resource, then validate.",
|
|
168
|
-
argsSchema: { ref: z.string(), target: z.string().optional() },
|
|
169
|
-
}, ({ ref, target }) => ({
|
|
295
|
+
description: "Guided flow: render the skeleton for a ref/target/language, complete the TODO(driverge) markers using the datasheet resource, then validate.",
|
|
296
|
+
argsSchema: { ref: z.string(), target: z.string().optional(), language: z.string().optional() },
|
|
297
|
+
}, ({ ref, target, language }) => ({
|
|
170
298
|
messages: [
|
|
171
299
|
{
|
|
172
300
|
role: "user",
|
|
173
301
|
content: {
|
|
174
302
|
type: "text",
|
|
175
303
|
text: [
|
|
176
|
-
`Generate an embedded driver for datasheet ref "${ref}" (target: ${target ?? "portable"}).`,
|
|
304
|
+
`Generate an embedded driver for datasheet ref "${ref}" (target: ${target ?? "portable"}, language: ${language ?? "c"}).`,
|
|
177
305
|
"",
|
|
178
|
-
`1. Call generate_driver({ ref: "${ref}", target: "${target ?? "portable"}" }).`,
|
|
306
|
+
`1. Call generate_driver({ ref: "${ref}", target: "${target ?? "portable"}", language: "${language ?? "c"}" }) — language is optional and defaults to "c" (struct + free functions); pass "cpp" for a C++ class wrapper (.hpp/.cpp) around the same #define macros and hal_* seam.`,
|
|
179
307
|
`2. Read driverge://datasheet/${ref} for full register/command detail.`,
|
|
180
308
|
"3. Complete every TODO(driverge) marker using the fill_in_brief and the datasheet JSON — init sequence, vendor quirks, docs (and CRC for command-set parts).",
|
|
181
309
|
"4. Keep all bus access on the hal_* seam; never call a vendor peripheral API directly.",
|
package/dist/mcp/register.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/mcp/register.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"register.js","sourceRoot":"","sources":["../../src/mcp/register.ts"],"names":[],"mappings":"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"}
|
package/dist/mcp/summary.js
CHANGED
|
@@ -26,6 +26,14 @@ export function buildSummary(entry) {
|
|
|
26
26
|
interface: { kind: json.interface.kind },
|
|
27
27
|
protocol_summary: protocolSummary,
|
|
28
28
|
counts,
|
|
29
|
+
...(json.extraction
|
|
30
|
+
? {
|
|
31
|
+
extraction: {
|
|
32
|
+
status: json.extraction.status,
|
|
33
|
+
detected_pages: json.extraction.detectedPages,
|
|
34
|
+
},
|
|
35
|
+
}
|
|
36
|
+
: {}),
|
|
29
37
|
validation: {
|
|
30
38
|
passed: json.validation.valid,
|
|
31
39
|
warnings: json.validation.warnings,
|
package/dist/mcp/summary.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"summary.js","sourceRoot":"","sources":["../../src/mcp/summary.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,yEAAyE;AACzE,kCAAkC;AAIlC,MAAM,UAAU,YAAY,CAAC,KAAiB;IAC5C,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAC5B,MAAM,MAAM,GACV,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,cAAc;QACpC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE;QAChD,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IAEnD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC5B,MAAM,eAAe,GAAG;QACtB,KAAK,CAAC,GAAG;QACT,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;QAC9E,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,SAAS;KAC5D;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;QACL,GAAG;QACH,QAAQ,EAAE;YACR,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;YAC/B,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY;YACxC,uBAAuB,EAAE,IAAI,CAAC,QAAQ,CAAC,sBAAsB;YAC7D,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO;YAC/B,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS;SACpC;QACD,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACxC,gBAAgB,EAAE,eAAe;QACjC,MAAM;QACN,UAAU,EAAE;YACV,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK;YAC7B,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ;YAClC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;SAC/B;KACF,CAAC;AACJ,CAAC"}
|
|
1
|
+
{"version":3,"file":"summary.js","sourceRoot":"","sources":["../../src/mcp/summary.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,yEAAyE;AACzE,kCAAkC;AAIlC,MAAM,UAAU,YAAY,CAAC,KAAiB;IAC5C,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAC5B,MAAM,MAAM,GACV,IAAI,CAAC,SAAS,CAAC,IAAI,KAAK,cAAc;QACpC,CAAC,CAAC,EAAE,SAAS,EAAE,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE;QAChD,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,MAAM,EAAE,CAAC;IAEnD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC;IAC5B,MAAM,eAAe,GAAG;QACtB,KAAK,CAAC,GAAG;QACT,KAAK,CAAC,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,aAAa,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,SAAS;QAC9E,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC,OAAO,KAAK,CAAC,UAAU,KAAK,CAAC,CAAC,CAAC,SAAS;KAC5D;SACE,MAAM,CAAC,OAAO,CAAC;SACf,IAAI,CAAC,IAAI,CAAC,CAAC;IAEd,OAAO;QACL,GAAG;QACH,QAAQ,EAAE;YACR,WAAW,EAAE,IAAI,CAAC,QAAQ,CAAC,IAAI;YAC/B,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY;YACxC,uBAAuB,EAAE,IAAI,CAAC,QAAQ,CAAC,sBAAsB;YAC7D,QAAQ,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO;YAC/B,UAAU,EAAE,IAAI,CAAC,QAAQ,CAAC,SAAS;SACpC;QACD,SAAS,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE;QACxC,gBAAgB,EAAE,eAAe;QACjC,MAAM;QACN,GAAG,CAAC,IAAI,CAAC,UAAU;YACjB,CAAC,CAAC;gBACE,UAAU,EAAE;oBACV,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;oBAC9B,cAAc,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa;iBAC9C;aACF;YACH,CAAC,CAAC,EAAE,CAAC;QACP,UAAU,EAAE;YACV,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,KAAK;YAC7B,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,QAAQ;YAClC,MAAM,EAAE,IAAI,CAAC,UAAU,CAAC,MAAM;SAC/B;KACF,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
/** Canonicalize a register-address cell to "0xNN", or undefined if it isn't one. */
|
|
2
|
+
export declare function normalizeRegisterAddress(raw: string): string | undefined;
|
|
3
|
+
/** True when a cell reads as a single register address. */
|
|
4
|
+
export declare function isRegisterAddress(raw: string): boolean;
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
// Shared register-address recognition/normalization for the register-table
|
|
2
|
+
// extractors. A register address cell appears in several vendor forms — "0xF4"
|
|
3
|
+
// (Bosch), "00" bare hex (Microchip), "8h"/"10h" (TI), "22" bare hex (ST) — all
|
|
4
|
+
// of which normalize to a canonical "0xNN" (min two upper-hex digits). Binary
|
|
5
|
+
// columns and ranges deliberately do NOT match, so a "Register address (Binary)"
|
|
6
|
+
// or a "2E-34" reserved span is never mistaken for a single register address.
|
|
7
|
+
const FORMS = [
|
|
8
|
+
/^0x([0-9a-f]{1,4})$/i, // 0xF4, 0x00
|
|
9
|
+
/^([0-9a-f]{1,4})h$/i, // 8h, 10h, F4h
|
|
10
|
+
/^([0-9a-f]{1,2})$/i, // bare 1-2 hex digits: 00, 22, 2A (register offsets)
|
|
11
|
+
];
|
|
12
|
+
/** Canonicalize a register-address cell to "0xNN", or undefined if it isn't one. */
|
|
13
|
+
export function normalizeRegisterAddress(raw) {
|
|
14
|
+
const s = raw.trim();
|
|
15
|
+
for (const re of FORMS) {
|
|
16
|
+
const m = re.exec(s);
|
|
17
|
+
if (m) {
|
|
18
|
+
const hex = m[1].toUpperCase();
|
|
19
|
+
return `0x${hex.padStart(2, "0")}`;
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
return undefined;
|
|
23
|
+
}
|
|
24
|
+
/** True when a cell reads as a single register address. */
|
|
25
|
+
export function isRegisterAddress(raw) {
|
|
26
|
+
return normalizeRegisterAddress(raw) !== undefined;
|
|
27
|
+
}
|
|
28
|
+
//# sourceMappingURL=address.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"address.js","sourceRoot":"","sources":["../../src/pdf/address.ts"],"names":[],"mappings":"AAAA,2EAA2E;AAC3E,+EAA+E;AAC/E,gFAAgF;AAChF,8EAA8E;AAC9E,iFAAiF;AACjF,8EAA8E;AAE9E,MAAM,KAAK,GAAsB;IAC/B,sBAAsB,EAAE,eAAe;IACvC,qBAAqB,EAAE,kBAAkB;IACzC,oBAAoB,EAAE,yDAAyD;CAChF,CAAC;AAEF,oFAAoF;AACpF,MAAM,UAAU,wBAAwB,CAAC,GAAW;IAClD,MAAM,CAAC,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC;IACrB,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE,CAAC;QACvB,MAAM,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QACrB,IAAI,CAAC,EAAE,CAAC;YACN,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;YAC/B,OAAO,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC;QACrC,CAAC;IACH,CAAC;IACD,OAAO,SAAS,CAAC;AACnB,CAAC;AAED,2DAA2D;AAC3D,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,OAAO,wBAAwB,CAAC,GAAG,CAAC,KAAK,SAAS,CAAC;AACrD,CAAC"}
|
package/dist/pdf/command.js
CHANGED
|
@@ -21,32 +21,105 @@ function normalizeName(raw) {
|
|
|
21
21
|
/** L4b — bus + device addresses. */
|
|
22
22
|
export function extractProtocol(pages) {
|
|
23
23
|
const text = joinText(pages);
|
|
24
|
-
|
|
24
|
+
// SSC/SPC are Infineon's SPI-family serial names (e.g. TLE5014), so treat them
|
|
25
|
+
// as SPI when neither I2C nor a plain "SPI" mention is present.
|
|
26
|
+
// pdfjs renders the "I²C" superscript as separate tokens ("I 2 C"), so a
|
|
27
|
+
// single optional space is tolerated between I/2/C. The trailing \b is kept
|
|
28
|
+
// so "I 2 CHANNELS" (C directly followed by more letters) does not match.
|
|
29
|
+
// SMBus is folded into this same I2C-tier check (evaluated before the SPI
|
|
30
|
+
// branch): SMBus is I2C-compatible at the electrical/protocol level, and
|
|
31
|
+
// sheets that only ever say "SMBus" (e.g. MLX90614) never spell out "I2C",
|
|
32
|
+
// so without this the bus would wrongly resolve to "unknown". Once bus
|
|
33
|
+
// resolves "I2C" the existing `if (bus === "I2C")` address gate fires
|
|
34
|
+
// unchanged — the generated hal_i2c_* seam is correct for SMBus parts.
|
|
35
|
+
// Session B — UART tier. This MUST stay last: multi-interface sheets (e.g. a
|
|
36
|
+
// part offered in both I2C/SPI and UART variants) list I2C/SPI first-class,
|
|
37
|
+
// so those tiers get first refusal above. "UART" and its cousins (RS-232/485
|
|
38
|
+
// are electrically distinct but frame the same way over a UART peripheral;
|
|
39
|
+
// "TTL serial" is the same asynchronous serial link at logic-level voltages)
|
|
40
|
+
// also turn up incidentally in appnote/pinout prose on I2C/SPI datasheets
|
|
41
|
+
// (e.g. "connect via a TTL serial debug adapter"), so resolving this tier
|
|
42
|
+
// before I2C/SPI would misclassify those parts. UART has no bus device
|
|
43
|
+
// address, so — like SPI — address extraction stays gated on I2C only below.
|
|
44
|
+
//
|
|
45
|
+
// Session C — CAN tier. Sits AFTER I2C/SPI/UART for the same multi-interface-
|
|
46
|
+
// sheet reason as UART above. "CAN" is unusual among these bus keywords: it is
|
|
47
|
+
// ALSO a common English modal verb ("the sensor CAN operate in low power
|
|
48
|
+
// mode"), so a bare case-insensitive match would false-positive constantly.
|
|
49
|
+
// Detection therefore needs two tiers of its own: an explicit phrase ("CAN
|
|
50
|
+
// bus", "CAN 2.0[AB]", "CAN FD") is unambiguous on its own; short of that, a
|
|
51
|
+
// literal uppercase "CAN" (case-SENSITIVE — the modal verb is virtually never
|
|
52
|
+
// written in all-caps in running prose) must co-occur with vocabulary that is
|
|
53
|
+
// unique to the CAN protocol (arbitration, DLC, "CAN controller", an
|
|
54
|
+
// acceptance filter) before it resolves. Like UART, CAN has no universal
|
|
55
|
+
// register-access primitive on the wire (CANopen SDO / J1939 PGN / raw
|
|
56
|
+
// message-ID schemes are all device-specific), so address extraction stays
|
|
57
|
+
// gated on I2C only below.
|
|
58
|
+
const CAN_PHRASE = /\bCAN\s?(?:bus|2\.0[AB]?|FD)\b/i;
|
|
59
|
+
const CAN_VOCAB = /\barbitration\b/i.test(text) ||
|
|
60
|
+
/\bDLC\b/.test(text) ||
|
|
61
|
+
/\bCAN\s+controller\b/i.test(text) ||
|
|
62
|
+
/\bacceptance\s+filter/i.test(text);
|
|
63
|
+
const bus = /\bI\s?(?:2|²)\s?C\b/i.test(text) || /\bSMBus\b/i.test(text)
|
|
25
64
|
? "I2C"
|
|
26
|
-
: /\bSPI\b/.test(text)
|
|
65
|
+
: /\bSPI\b|\bSSC\b|\bSPC\b/.test(text)
|
|
27
66
|
? "SPI"
|
|
28
|
-
:
|
|
67
|
+
: /\bUART\b/.test(text) || /\bRS-?(?:232|485)\b/i.test(text) || /\bTTL\s+serial\b/i.test(text)
|
|
68
|
+
? "UART"
|
|
69
|
+
: CAN_PHRASE.test(text) || (/\bCAN\b/.test(text) && CAN_VOCAB)
|
|
70
|
+
? "CAN"
|
|
71
|
+
: "unknown";
|
|
29
72
|
const addresses = [];
|
|
30
|
-
//
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
73
|
+
// Only I2C has a bus device address. Scanning for "0xNN near 'address'" on an
|
|
74
|
+
// SPI datasheet yields register offsets, not addresses (e.g. AEAT-8811), so we
|
|
75
|
+
// gate address extraction on the I2C bus.
|
|
76
|
+
if (bus === "I2C") {
|
|
77
|
+
for (const ctx of text.matchAll(/address[^.]{0,60}/gi)) {
|
|
78
|
+
for (const m of ctx[0].matchAll(/0x[0-7][0-9a-f]/gi)) {
|
|
79
|
+
const addr = upperHex(m[0]);
|
|
80
|
+
const value = Number.parseInt(addr, 16);
|
|
81
|
+
if (value >= 0x08 && value <= 0x77 && !addresses.includes(addr)) {
|
|
82
|
+
addresses.push(addr);
|
|
83
|
+
}
|
|
37
84
|
}
|
|
38
85
|
}
|
|
39
86
|
}
|
|
40
87
|
return addresses.length > 0 ? { bus, addresses } : { bus };
|
|
41
88
|
}
|
|
89
|
+
/** Parse a CRC polynomial written as an expression, e.g. "1+X 4 +X 5 +X 8"
|
|
90
|
+
* (pdfjs renders superscripts as separate tokens). Drops the implicit highest
|
|
91
|
+
* term (x^width) and returns the truncated poly byte. */
|
|
92
|
+
function polyFromExpression(text) {
|
|
93
|
+
const m = /polynomial[^.]{0,80}/i.exec(text);
|
|
94
|
+
if (!m)
|
|
95
|
+
return undefined;
|
|
96
|
+
const expr = m[0];
|
|
97
|
+
const exps = [...expr.matchAll(/x\s*\^?\s*(\d+)/gi)].map((e) => Number(e[1]));
|
|
98
|
+
if (exps.length === 0)
|
|
99
|
+
return undefined;
|
|
100
|
+
const width = Math.max(...exps);
|
|
101
|
+
const bits = new Set(exps.filter((e) => e < width));
|
|
102
|
+
if (/[=+]\s*1\b/.test(expr) || /\b1\s*\+/.test(expr))
|
|
103
|
+
bits.add(0); // the "+1"/"1+" constant term
|
|
104
|
+
let poly = 0;
|
|
105
|
+
for (const b of bits)
|
|
106
|
+
poly |= 1 << b;
|
|
107
|
+
return { poly: `0x${poly.toString(16).toUpperCase().padStart(2, "0")}`, width };
|
|
108
|
+
}
|
|
42
109
|
/** L4b — CRC parameters from the checksum section. */
|
|
43
110
|
export function extractCrc(pages) {
|
|
44
111
|
const text = joinText(pages);
|
|
45
|
-
const
|
|
46
|
-
|
|
47
|
-
if (!
|
|
112
|
+
const init = /initiali[sz]ation\s+(0x[0-9a-f]{2})/i.exec(text) ??
|
|
113
|
+
/initial\s+value[^.]{0,40}?(0x[0-9a-f]{2})/i.exec(text);
|
|
114
|
+
if (!init)
|
|
115
|
+
return undefined;
|
|
116
|
+
const polyHex = /polynomial\s+(0x[0-9a-f]{2})/i.exec(text);
|
|
117
|
+
const poly = polyHex
|
|
118
|
+
? { poly: upperHex(polyHex[1]), width: 8 }
|
|
119
|
+
: polyFromExpression(text);
|
|
120
|
+
if (!poly)
|
|
48
121
|
return undefined;
|
|
49
|
-
return { poly:
|
|
122
|
+
return { poly: poly.poly, init: upperHex(init[1]), width: poly.width };
|
|
50
123
|
}
|
|
51
124
|
// Only patterns whose NAME is a pure run of letters/spaces are used — a digit or
|
|
52
125
|
// "0x" in the span means we've crossed into the other text column, so we bail
|
package/dist/pdf/command.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/pdf/command.ts"],"names":[],"mappings":"AAAA,6EAA6E;AAC7E,gFAAgF;AAChF,kFAAkF;AAClF,+EAA+E;AAK/E,MAAM,QAAQ,GAAG,CAAC,KAAoB,EAAE,EAAE,CACxC,KAAK;KACF,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;KAClB,IAAI,CAAC,GAAG,CAAC;KACT,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAE1B,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;AAEtE,SAAS,aAAa,CAAC,GAAW;IAChC,OAAO,GAAG;SACP,IAAI,EAAE;SACN,OAAO,CAAC,gCAAgC,EAAE,EAAE,CAAC;SAC7C,KAAK,CAAC,KAAK,CAAC;SACZ,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC;SACX,IAAI,CAAC,GAAG,CAAC;SACT,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;AAC7B,CAAC;AAED,oCAAoC;AACpC,MAAM,UAAU,eAAe,CAAC,KAAoB;IAClD,MAAM,IAAI,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC;IAC7B,MAAM,GAAG,GAAoB,
|
|
1
|
+
{"version":3,"file":"command.js","sourceRoot":"","sources":["../../src/pdf/command.ts"],"names":[],"mappings":"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"}
|
package/dist/pdf/extract.js
CHANGED
|
@@ -1,12 +1,28 @@
|
|
|
1
1
|
// pdfjs-dist adapter: load a PDF and pull positioned text + an image flag from
|
|
2
2
|
// every page. The legacy build is the Node-friendly entry (and ships types).
|
|
3
|
+
//
|
|
4
|
+
// hasImage is lazy (Session 10, Phase 4): it is only meaningful — and only
|
|
5
|
+
// computed — for sparse-text pages, i.e. exactly the pages classifyPage()
|
|
6
|
+
// consults it for (textLength < MIN_TEXT_CHARS). A text-rich page always
|
|
7
|
+
// reports hasImage === false without walking its operator list, even if it
|
|
8
|
+
// does paint a raster (logo/figure): nothing reads that value, so paying for
|
|
9
|
+
// getOperatorList() there would be wasted work on the majority of pages in a
|
|
10
|
+
// real datasheet.
|
|
3
11
|
import { getDocument, OPS } from "pdfjs-dist/legacy/build/pdf.mjs";
|
|
12
|
+
import { MIN_TEXT_CHARS } from "./classify.js";
|
|
4
13
|
const IMAGE_OPS = new Set([
|
|
5
14
|
OPS.paintImageXObject,
|
|
6
15
|
OPS.paintInlineImageXObject,
|
|
7
16
|
OPS.paintImageMaskXObject,
|
|
8
17
|
]);
|
|
9
18
|
export async function extractPages(data) {
|
|
19
|
+
// S3 hardening note: earlier pdfjs-dist versions accepted `isEvalSupported`
|
|
20
|
+
// to stop it from `new Function(...)`-evaluating embedded Type3/PostScript
|
|
21
|
+
// glyph code on untrusted PDFs (CVE-2024-4367). This install (pdfjs-dist
|
|
22
|
+
// 6.1.200) removed both the option and the eval code path upstream — grep
|
|
23
|
+
// of node_modules/pdfjs-dist finds no `isEvalSupported` or `new Function(`
|
|
24
|
+
// left in the bundle — so there is nothing left here to opt out of. Flagged
|
|
25
|
+
// to the orchestrator; revisit if a future pdfjs-dist bump reintroduces it.
|
|
10
26
|
const task = getDocument({ data });
|
|
11
27
|
const pdf = await task.promise;
|
|
12
28
|
try {
|
|
@@ -32,8 +48,13 @@ export async function extractPages(data) {
|
|
|
32
48
|
.join(" ")
|
|
33
49
|
.replace(/\s+/g, " ")
|
|
34
50
|
.trim();
|
|
35
|
-
|
|
36
|
-
|
|
51
|
+
// Only pay for the operator-list walk on sparse-text pages: that is
|
|
52
|
+
// the only case classifyPage() reads hasImage for.
|
|
53
|
+
let hasImage = false;
|
|
54
|
+
if (text.length < MIN_TEXT_CHARS) {
|
|
55
|
+
const opList = await page.getOperatorList();
|
|
56
|
+
hasImage = opList.fnArray.some((fn) => IMAGE_OPS.has(fn));
|
|
57
|
+
}
|
|
37
58
|
pages.push({ index: n, text, items, hasImage });
|
|
38
59
|
page.cleanup();
|
|
39
60
|
}
|
package/dist/pdf/extract.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/pdf/extract.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6EAA6E;
|
|
1
|
+
{"version":3,"file":"extract.js","sourceRoot":"","sources":["../../src/pdf/extract.ts"],"names":[],"mappings":"AAAA,+EAA+E;AAC/E,6EAA6E;AAC7E,EAAE;AACF,2EAA2E;AAC3E,0EAA0E;AAC1E,yEAAyE;AACzE,2EAA2E;AAC3E,6EAA6E;AAC7E,6EAA6E;AAC7E,kBAAkB;AAElB,OAAO,EAAE,WAAW,EAAE,GAAG,EAAE,MAAM,iCAAiC,CAAC;AACnE,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAG/C,MAAM,SAAS,GAAwB,IAAI,GAAG,CAAC;IAC7C,GAAG,CAAC,iBAAiB;IACrB,GAAG,CAAC,uBAAuB;IAC3B,GAAG,CAAC,qBAAqB;CAC1B,CAAC,CAAC;AAEH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,IAAgB;IACjD,4EAA4E;IAC5E,2EAA2E;IAC3E,yEAAyE;IACzE,0EAA0E;IAC1E,2EAA2E;IAC3E,4EAA4E;IAC5E,4EAA4E;IAC5E,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC;IACnC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,OAAO,CAAC;IAC/B,IAAI,CAAC;QACH,MAAM,KAAK,GAAkB,EAAE,CAAC;QAChC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;YACvC,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAElC,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,cAAc,EAAE,CAAC;YAChD,MAAM,KAAK,GAAqB,EAAE,CAAC;YACnC,KAAK,MAAM,IAAI,IAAI,WAAW,CAAC,KAAK,EAAE,CAAC;gBACrC,uDAAuD;gBACvD,IAAI,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC;oBAAE,SAAS;gBAC/B,KAAK,CAAC,IAAI,CAAC;oBACT,GAAG,EAAE,IAAI,CAAC,GAAG;oBACb,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;oBACpB,CAAC,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC;oBACpB,KAAK,EAAE,IAAI,CAAC,KAAK;oBACjB,MAAM,EAAE,IAAI,CAAC,MAAM;iBACpB,CAAC,CAAC;YACL,CAAC;YACD,MAAM,IAAI,GAAG,KAAK;iBACf,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC;iBACjB,IAAI,CAAC,GAAG,CAAC;iBACT,OAAO,CAAC,MAAM,EAAE,GAAG,CAAC;iBACpB,IAAI,EAAE,CAAC;YAEV,oEAAoE;YACpE,mDAAmD;YACnD,IAAI,QAAQ,GAAG,KAAK,CAAC;YACrB,IAAI,IAAI,CAAC,MAAM,GAAG,cAAc,EAAE,CAAC;gBACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,eAAe,EAAE,CAAC;gBAC5C,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC;YAC5D,CAAC;YAED,KAAK,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;YAChD,IAAI,CAAC,OAAO,EAAE,CAAC;QACjB,CAAC;QACD,OAAO,KAAK,CAAC;IACf,CAAC;YAAS,CAAC;QACT,MAAM,GAAG,CAAC,OAAO,EAAE,CAAC;QACpB,MAAM,IAAI,CAAC,OAAO,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import type { PageContent, RegisterTable } from "./types.js";
|
|
2
|
+
/** Parse a generic register map from a single page, if it holds one. */
|
|
3
|
+
export declare function parseGenericRegisterTable(page: PageContent): RegisterTable | undefined;
|
|
4
|
+
/** Scan pages; return the first qualifying generic register table (≥ MIN_ROWS). */
|
|
5
|
+
export declare function findGenericRegisterTable(pages: PageContent[]): RegisterTable | undefined;
|