@okrapdf/cli 0.2.11 → 0.2.12
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 +27 -38
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +25 -4
- package/dist/cli.js.map +1 -1
- package/dist/cli.test.d.ts +2 -0
- package/dist/cli.test.d.ts.map +1 -0
- package/dist/cli.test.js +35 -0
- package/dist/cli.test.js.map +1 -0
- package/dist/commands/auth.d.ts.map +1 -1
- package/dist/commands/auth.js +5 -5
- package/dist/commands/auth.js.map +1 -1
- package/dist/commands/docs.js +3 -3
- package/dist/commands/docs.js.map +1 -1
- package/dist/commands/entities.js +3 -3
- package/dist/commands/entities.js.map +1 -1
- package/dist/commands/exit-codes.d.ts +6 -0
- package/dist/commands/exit-codes.d.ts.map +1 -0
- package/dist/commands/exit-codes.js +51 -0
- package/dist/commands/exit-codes.js.map +1 -0
- package/dist/commands/exit-codes.test.d.ts +2 -0
- package/dist/commands/exit-codes.test.d.ts.map +1 -0
- package/dist/commands/exit-codes.test.js +20 -0
- package/dist/commands/exit-codes.test.js.map +1 -0
- package/dist/commands/jobs.js +4 -4
- package/dist/commands/jobs.js.map +1 -1
- package/dist/commands/logs.js +4 -4
- package/dist/commands/logs.js.map +1 -1
- package/dist/commands/processors.js +5 -5
- package/dist/commands/processors.js.map +1 -1
- package/dist/commands/providers.js +3 -3
- package/dist/commands/providers.js.map +1 -1
- package/dist/commands/query.d.ts +13 -0
- package/dist/commands/query.d.ts.map +1 -0
- package/dist/commands/query.js +213 -0
- package/dist/commands/query.js.map +1 -0
- package/dist/commands/review.d.ts.map +1 -1
- package/dist/commands/review.js +4 -12
- package/dist/commands/review.js.map +1 -1
- package/dist/commands/schema.d.ts +6 -0
- package/dist/commands/schema.d.ts.map +1 -0
- package/dist/commands/schema.js +117 -0
- package/dist/commands/schema.js.map +1 -0
- package/dist/commands/schema.test.d.ts +2 -0
- package/dist/commands/schema.test.d.ts.map +1 -0
- package/dist/commands/schema.test.js +23 -0
- package/dist/commands/schema.test.js.map +1 -0
- package/dist/commands/shortcuts.d.ts.map +1 -1
- package/dist/commands/shortcuts.js +39 -26
- package/dist/commands/shortcuts.js.map +1 -1
- package/dist/commands/step.d.ts +17 -0
- package/dist/commands/step.d.ts.map +1 -0
- package/dist/commands/step.js +212 -0
- package/dist/commands/step.js.map +1 -0
- package/dist/commands/tables.js +2 -2
- package/dist/commands/tables.js.map +1 -1
- package/dist/commands/templates.js +7 -7
- package/dist/commands/templates.js.map +1 -1
- package/dist/commands/toc.d.ts +12 -0
- package/dist/commands/toc.d.ts.map +1 -0
- package/dist/commands/toc.js +129 -0
- package/dist/commands/toc.js.map +1 -0
- package/dist/commands/workflow.d.ts +18 -0
- package/dist/commands/workflow.d.ts.map +1 -0
- package/dist/commands/workflow.js +340 -0
- package/dist/commands/workflow.js.map +1 -0
- package/dist/index.js +0 -0
- package/dist/lib/cache.d.ts +91 -0
- package/dist/lib/cache.d.ts.map +1 -0
- package/dist/lib/cache.js +307 -0
- package/dist/lib/cache.js.map +1 -0
- package/dist/lib/client.d.ts.map +1 -1
- package/dist/lib/client.js +4 -1
- package/dist/lib/client.js.map +1 -1
- package/dist/lib/config.d.ts +5 -0
- package/dist/lib/config.d.ts.map +1 -1
- package/dist/lib/config.js +11 -1
- package/dist/lib/config.js.map +1 -1
- package/dist/lib/dom-emitter.d.ts +14 -0
- package/dist/lib/dom-emitter.d.ts.map +1 -0
- package/dist/lib/dom-emitter.js +66 -0
- package/dist/lib/dom-emitter.js.map +1 -0
- package/dist/lib/dom-ops.d.ts +55 -0
- package/dist/lib/dom-ops.d.ts.map +1 -0
- package/dist/lib/dom-ops.js +93 -0
- package/dist/lib/dom-ops.js.map +1 -0
- package/dist/lib/output.d.ts +4 -0
- package/dist/lib/output.d.ts.map +1 -1
- package/dist/lib/output.js +15 -0
- package/dist/lib/output.js.map +1 -1
- package/dist/lib/pdfquery-adapter.d.ts +43 -0
- package/dist/lib/pdfquery-adapter.d.ts.map +1 -0
- package/dist/lib/pdfquery-adapter.js +82 -0
- package/dist/lib/pdfquery-adapter.js.map +1 -0
- package/dist/lib/pdfquery.d.ts +57 -0
- package/dist/lib/pdfquery.d.ts.map +1 -0
- package/dist/lib/pdfquery.js +101 -0
- package/dist/lib/pdfquery.js.map +1 -0
- package/dist/lib/progress.d.ts.map +1 -1
- package/dist/lib/progress.js +15 -5
- package/dist/lib/progress.js.map +1 -1
- package/dist/lib/runtime.d.ts +10 -0
- package/dist/lib/runtime.d.ts.map +1 -0
- package/dist/lib/runtime.js +37 -0
- package/dist/lib/runtime.js.map +1 -0
- package/dist/lib/sinks/file.d.ts +8 -0
- package/dist/lib/sinks/file.d.ts.map +1 -0
- package/dist/lib/sinks/file.js +30 -0
- package/dist/lib/sinks/file.js.map +1 -0
- package/dist/lib/sinks/index.d.ts +6 -0
- package/dist/lib/sinks/index.d.ts.map +1 -0
- package/dist/lib/sinks/index.js +30 -0
- package/dist/lib/sinks/index.js.map +1 -0
- package/dist/lib/sinks/partykit.d.ts +14 -0
- package/dist/lib/sinks/partykit.d.ts.map +1 -0
- package/dist/lib/sinks/partykit.js +124 -0
- package/dist/lib/sinks/partykit.js.map +1 -0
- package/dist/lib/sinks/stdout.d.ts +6 -0
- package/dist/lib/sinks/stdout.d.ts.map +1 -0
- package/dist/lib/sinks/stdout.js +9 -0
- package/dist/lib/sinks/stdout.js.map +1 -0
- package/dist/lib/validator.d.ts +58 -0
- package/dist/lib/validator.d.ts.map +1 -0
- package/dist/lib/validator.js +181 -0
- package/dist/lib/validator.js.map +1 -0
- package/package.json +8 -9
- package/LICENSE +0 -21
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.d.ts","sourceRoot":"","sources":["../../../src/lib/sinks/file.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEtD,qBAAa,QAAS,YAAW,SAAS;IACxC,OAAO,CAAC,MAAM,CAAc;gBAEhB,QAAQ,EAAE,MAAM;IAItB,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAWjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAQ7B"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { createWriteStream } from 'fs';
|
|
2
|
+
export class FileSink {
|
|
3
|
+
stream;
|
|
4
|
+
constructor(filePath) {
|
|
5
|
+
this.stream = createWriteStream(filePath, { flags: 'a' });
|
|
6
|
+
}
|
|
7
|
+
async emit(ops) {
|
|
8
|
+
for (const op of ops) {
|
|
9
|
+
await new Promise((resolve, reject) => {
|
|
10
|
+
this.stream.write(JSON.stringify(op) + '\n', (err) => {
|
|
11
|
+
if (err)
|
|
12
|
+
reject(err);
|
|
13
|
+
else
|
|
14
|
+
resolve();
|
|
15
|
+
});
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
async close() {
|
|
20
|
+
await new Promise((resolve, reject) => {
|
|
21
|
+
this.stream.end((err) => {
|
|
22
|
+
if (err)
|
|
23
|
+
reject(err);
|
|
24
|
+
else
|
|
25
|
+
resolve();
|
|
26
|
+
});
|
|
27
|
+
});
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=file.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file.js","sourceRoot":"","sources":["../../../src/lib/sinks/file.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAoB,MAAM,IAAI,CAAC;AAGzD,MAAM,OAAO,QAAQ;IACX,MAAM,CAAc;IAE5B,YAAY,QAAgB;QAC1B,IAAI,CAAC,MAAM,GAAG,iBAAiB,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;IAC5D,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,GAAY;QACrB,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;gBAC1C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,GAAG,IAAI,EAAE,CAAC,GAAG,EAAE,EAAE;oBACnD,IAAI,GAAG;wBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;wBAChB,OAAO,EAAE,CAAC;gBACjB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK;QACT,MAAM,IAAI,OAAO,CAAO,CAAC,OAAO,EAAE,MAAM,EAAE,EAAE;YAC1C,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,GAA6B,EAAE,EAAE;gBAChD,IAAI,GAAG;oBAAE,MAAM,CAAC,GAAG,CAAC,CAAC;;oBAChB,OAAO,EAAE,CAAC;YACjB,CAAC,CAAC,CAAC;QACL,CAAC,CAAC,CAAC;IACL,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { DomOpSink } from '../dom-ops.js';
|
|
2
|
+
export { PartyKitSink } from './partykit.js';
|
|
3
|
+
export { StdoutSink } from './stdout.js';
|
|
4
|
+
export { FileSink } from './file.js';
|
|
5
|
+
export declare function parseSinkUrl(url: string): DomOpSink;
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/sinks/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAK/C,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAIrC,wBAAgB,YAAY,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,CA2BnD"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { PartyKitSink } from './partykit.js';
|
|
2
|
+
import { StdoutSink } from './stdout.js';
|
|
3
|
+
import { FileSink } from './file.js';
|
|
4
|
+
export { PartyKitSink } from './partykit.js';
|
|
5
|
+
export { StdoutSink } from './stdout.js';
|
|
6
|
+
export { FileSink } from './file.js';
|
|
7
|
+
const DEFAULT_PARTYKIT_HOST = 'document-tree-party.steventsao.partykit.dev';
|
|
8
|
+
export function parseSinkUrl(url) {
|
|
9
|
+
if (url === 'stdout' || url === '-') {
|
|
10
|
+
return new StdoutSink();
|
|
11
|
+
}
|
|
12
|
+
if (url.startsWith('partykit://')) {
|
|
13
|
+
const parsed = new URL(url);
|
|
14
|
+
const host = parsed.host || DEFAULT_PARTYKIT_HOST;
|
|
15
|
+
const roomId = parsed.pathname.replace(/^\//, '');
|
|
16
|
+
if (!roomId) {
|
|
17
|
+
throw new Error('PartyKit URL must include room ID: partykit://host/room-id');
|
|
18
|
+
}
|
|
19
|
+
return new PartyKitSink(host, roomId);
|
|
20
|
+
}
|
|
21
|
+
if (url.startsWith('file://')) {
|
|
22
|
+
const filePath = url.replace('file://', '');
|
|
23
|
+
return new FileSink(filePath);
|
|
24
|
+
}
|
|
25
|
+
if (url.endsWith('.ndjson') || url.endsWith('.jsonl')) {
|
|
26
|
+
return new FileSink(url);
|
|
27
|
+
}
|
|
28
|
+
throw new Error(`Unknown sink URL format: ${url}. Use partykit://, file://, stdout, or a .ndjson file path`);
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/sinks/index.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AAC7C,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAErC,MAAM,qBAAqB,GAAG,6CAA6C,CAAC;AAE5E,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,GAAG,EAAE,CAAC;QACpC,OAAO,IAAI,UAAU,EAAE,CAAC;IAC1B,CAAC;IAED,IAAI,GAAG,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,CAAC;QAC5B,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,qBAAqB,CAAC;QAClD,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;QAElD,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,MAAM,IAAI,KAAK,CAAC,4DAA4D,CAAC,CAAC;QAChF,CAAC;QAED,OAAO,IAAI,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACxC,CAAC;IAED,IAAI,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,MAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;QAC5C,OAAO,IAAI,QAAQ,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,IAAI,GAAG,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,GAAG,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;QACtD,OAAO,IAAI,QAAQ,CAAC,GAAG,CAAC,CAAC;IAC3B,CAAC;IAED,MAAM,IAAI,KAAK,CAAC,4BAA4B,GAAG,4DAA4D,CAAC,CAAC;AAC/G,CAAC"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import type { DomOp, DomOpSink } from '../dom-ops.js';
|
|
2
|
+
export declare class PartyKitSink implements DomOpSink {
|
|
3
|
+
private host;
|
|
4
|
+
private roomId;
|
|
5
|
+
private nodePathCache;
|
|
6
|
+
constructor(host: string, roomId: string);
|
|
7
|
+
emit(ops: DomOp[]): Promise<void>;
|
|
8
|
+
close(): Promise<void>;
|
|
9
|
+
private toJdomPatches;
|
|
10
|
+
private resolvePath;
|
|
11
|
+
private toJdom;
|
|
12
|
+
private typeToTag;
|
|
13
|
+
}
|
|
14
|
+
//# sourceMappingURL=partykit.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partykit.d.ts","sourceRoot":"","sources":["../../../src/lib/sinks/partykit.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAa,MAAM,eAAe,CAAC;AAEjE,qBAAa,YAAa,YAAW,SAAS;IAI1C,OAAO,CAAC,IAAI;IACZ,OAAO,CAAC,MAAM;IAJhB,OAAO,CAAC,aAAa,CAA0C;gBAGrD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,MAAM;IAGlB,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAuBjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAI5B,OAAO,CAAC,aAAa;IAkErB,OAAO,CAAC,WAAW;IASnB,OAAO,CAAC,MAAM;IAYd,OAAO,CAAC,SAAS;CAelB"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
export class PartyKitSink {
|
|
2
|
+
host;
|
|
3
|
+
roomId;
|
|
4
|
+
nodePathCache = new Map();
|
|
5
|
+
constructor(host, roomId) {
|
|
6
|
+
this.host = host;
|
|
7
|
+
this.roomId = roomId;
|
|
8
|
+
}
|
|
9
|
+
async emit(ops) {
|
|
10
|
+
const patches = ops.flatMap(op => this.toJdomPatches(op));
|
|
11
|
+
if (patches.length === 0)
|
|
12
|
+
return;
|
|
13
|
+
const url = `https://${this.host}/parties/document/${this.roomId}/tree`;
|
|
14
|
+
const response = await fetch(url, {
|
|
15
|
+
method: 'PATCH',
|
|
16
|
+
headers: { 'Content-Type': 'application/json' },
|
|
17
|
+
body: JSON.stringify({
|
|
18
|
+
patches,
|
|
19
|
+
reason: 'cli-extraction',
|
|
20
|
+
mutatedBy: 'cli',
|
|
21
|
+
mutatedByName: 'OkraPDF CLI'
|
|
22
|
+
})
|
|
23
|
+
});
|
|
24
|
+
if (!response.ok) {
|
|
25
|
+
const text = await response.text();
|
|
26
|
+
throw new Error(`PartyKit PATCH failed: ${response.status} ${text}`);
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
async close() {
|
|
30
|
+
this.nodePathCache.clear();
|
|
31
|
+
}
|
|
32
|
+
toJdomPatches(op) {
|
|
33
|
+
switch (op.op) {
|
|
34
|
+
case 'ADD_NODE': {
|
|
35
|
+
const parentPath = this.resolvePath(op.parentId);
|
|
36
|
+
const childPath = [...parentPath, 'children', op.index ?? -1];
|
|
37
|
+
this.nodePathCache.set(op.node.id, [...parentPath, 'children', op.index ?? this.nodePathCache.size]);
|
|
38
|
+
return [{
|
|
39
|
+
op: 'add',
|
|
40
|
+
path: childPath,
|
|
41
|
+
value: this.toJdom(op.node),
|
|
42
|
+
}];
|
|
43
|
+
}
|
|
44
|
+
case 'REMOVE_NODE': {
|
|
45
|
+
const nodePath = this.resolvePath(op.nodeId);
|
|
46
|
+
this.nodePathCache.delete(op.nodeId);
|
|
47
|
+
return [{
|
|
48
|
+
op: 'remove',
|
|
49
|
+
path: nodePath,
|
|
50
|
+
}];
|
|
51
|
+
}
|
|
52
|
+
case 'UPDATE_NODE': {
|
|
53
|
+
const patches = [];
|
|
54
|
+
const nodePath = this.resolvePath(op.nodeId);
|
|
55
|
+
if (op.patch.text !== undefined) {
|
|
56
|
+
patches.push({
|
|
57
|
+
op: 'replace',
|
|
58
|
+
path: [...nodePath, 'textContent'],
|
|
59
|
+
value: op.patch.text,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
if (op.patch.attrs) {
|
|
63
|
+
for (const [key, value] of Object.entries(op.patch.attrs)) {
|
|
64
|
+
patches.push({
|
|
65
|
+
op: 'replace',
|
|
66
|
+
path: [...nodePath, 'attributes', key],
|
|
67
|
+
value,
|
|
68
|
+
});
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
return patches;
|
|
72
|
+
}
|
|
73
|
+
case 'SET_TEXT':
|
|
74
|
+
return [{
|
|
75
|
+
op: 'replace',
|
|
76
|
+
path: [...this.resolvePath(op.nodeId), 'textContent'],
|
|
77
|
+
value: op.text,
|
|
78
|
+
}];
|
|
79
|
+
case 'SET_ATTR':
|
|
80
|
+
return [{
|
|
81
|
+
op: 'replace',
|
|
82
|
+
path: [...this.resolvePath(op.nodeId), 'attributes', op.key],
|
|
83
|
+
value: op.value,
|
|
84
|
+
}];
|
|
85
|
+
default:
|
|
86
|
+
return [];
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
resolvePath(nodeId) {
|
|
90
|
+
if (!nodeId || nodeId === '')
|
|
91
|
+
return [];
|
|
92
|
+
const cached = this.nodePathCache.get(nodeId);
|
|
93
|
+
if (cached)
|
|
94
|
+
return cached;
|
|
95
|
+
return [nodeId];
|
|
96
|
+
}
|
|
97
|
+
toJdom(node) {
|
|
98
|
+
return {
|
|
99
|
+
id: node.id,
|
|
100
|
+
type: node.type,
|
|
101
|
+
tagName: this.typeToTag(node.type),
|
|
102
|
+
page: node.attrs?.page ?? node.attrs?.num ?? 0,
|
|
103
|
+
textContent: node.text ?? null,
|
|
104
|
+
attributes: node.attrs ?? {},
|
|
105
|
+
children: [],
|
|
106
|
+
};
|
|
107
|
+
}
|
|
108
|
+
typeToTag(type) {
|
|
109
|
+
const map = {
|
|
110
|
+
document: 'article',
|
|
111
|
+
page: 'section',
|
|
112
|
+
table: 'table',
|
|
113
|
+
figure: 'figure',
|
|
114
|
+
paragraph: 'p',
|
|
115
|
+
heading: 'h1',
|
|
116
|
+
footnote: 'aside',
|
|
117
|
+
list: 'ul',
|
|
118
|
+
'list-item': 'li',
|
|
119
|
+
'ocr-block': 'div',
|
|
120
|
+
};
|
|
121
|
+
return map[type] ?? 'div';
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
//# sourceMappingURL=partykit.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"partykit.js","sourceRoot":"","sources":["../../../src/lib/sinks/partykit.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdout.d.ts","sourceRoot":"","sources":["../../../src/lib/sinks/stdout.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAEtD,qBAAa,UAAW,YAAW,SAAS;IACpC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAMjC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAC7B"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"stdout.js","sourceRoot":"","sources":["../../../src/lib/sinks/stdout.ts"],"names":[],"mappings":"AAEA,MAAM,OAAO,UAAU;IACrB,KAAK,CAAC,IAAI,CAAC,GAAY;QACrB,KAAK,MAAM,EAAE,IAAI,GAAG,EAAE,CAAC;YACrB,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;QAClC,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,KAAmB,CAAC;CAChC"}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency validator with gh-style error messages
|
|
3
|
+
*
|
|
4
|
+
* Validates job existence and status before running commands
|
|
5
|
+
* Pattern: Similar to gh CLI (checks git repo), npm run (checks package.json)
|
|
6
|
+
*/
|
|
7
|
+
import { CacheManager } from './cache.js';
|
|
8
|
+
import type { Job, JobStatus } from '../types.js';
|
|
9
|
+
/**
|
|
10
|
+
* Validation error with helpful suggestions
|
|
11
|
+
*/
|
|
12
|
+
export declare class ValidationError extends Error {
|
|
13
|
+
readonly suggestions: string[];
|
|
14
|
+
constructor(message: string, suggestions: string[]);
|
|
15
|
+
toString(): string;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Job validation result
|
|
19
|
+
*/
|
|
20
|
+
export interface JobValidation {
|
|
21
|
+
exists: boolean;
|
|
22
|
+
status?: JobStatus;
|
|
23
|
+
job?: Job;
|
|
24
|
+
error?: ValidationError;
|
|
25
|
+
}
|
|
26
|
+
/**
|
|
27
|
+
* Validate job ID format
|
|
28
|
+
*/
|
|
29
|
+
export declare function isValidJobId(jobId: string): boolean;
|
|
30
|
+
/**
|
|
31
|
+
* Check if job exists (cache OR API)
|
|
32
|
+
*/
|
|
33
|
+
export declare function validateJobExists(jobId: string, cache?: CacheManager): Promise<JobValidation>;
|
|
34
|
+
/**
|
|
35
|
+
* Validate job is complete (not pending/running)
|
|
36
|
+
*/
|
|
37
|
+
export declare function validateJobComplete(validation: JobValidation): ValidationError | null;
|
|
38
|
+
/**
|
|
39
|
+
* Validate job is ready for query (exists AND complete)
|
|
40
|
+
*
|
|
41
|
+
* This is the main validation function used by query commands
|
|
42
|
+
*/
|
|
43
|
+
export declare function validateJobReady(jobId: string, cache?: CacheManager): Promise<{
|
|
44
|
+
valid: true;
|
|
45
|
+
job: Job;
|
|
46
|
+
} | {
|
|
47
|
+
valid: false;
|
|
48
|
+
error: ValidationError;
|
|
49
|
+
}>;
|
|
50
|
+
/**
|
|
51
|
+
* Format validation error for display
|
|
52
|
+
*/
|
|
53
|
+
export declare function formatValidationError(error: ValidationError): string;
|
|
54
|
+
/**
|
|
55
|
+
* Throw validation error with formatted message
|
|
56
|
+
*/
|
|
57
|
+
export declare function throwValidationError(error: ValidationError): never;
|
|
58
|
+
//# sourceMappingURL=validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.d.ts","sourceRoot":"","sources":["../../src/lib/validator.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAC;AAC1C,OAAO,KAAK,EAAE,GAAG,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AAGlD;;GAEG;AACH,qBAAa,eAAgB,SAAQ,KAAK;aAGtB,WAAW,EAAE,MAAM,EAAE;gBADrC,OAAO,EAAE,MAAM,EACC,WAAW,EAAE,MAAM,EAAE;IAMvC,QAAQ,IAAI,MAAM;CAQnB;AAED;;GAEG;AACH,MAAM,WAAW,aAAa;IAC5B,MAAM,EAAE,OAAO,CAAC;IAChB,MAAM,CAAC,EAAE,SAAS,CAAC;IACnB,GAAG,CAAC,EAAE,GAAG,CAAC;IACV,KAAK,CAAC,EAAE,eAAe,CAAC;CACzB;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,OAAO,CAGnD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,YAAY,GACnB,OAAO,CAAC,aAAa,CAAC,CA4DxB;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,UAAU,EAAE,aAAa,GAAG,eAAe,GAAG,IAAI,CAgErF;AAED;;;;GAIG;AACH,wBAAsB,gBAAgB,CACpC,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,YAAY,GACnB,OAAO,CAAC;IAAE,KAAK,EAAE,IAAI,CAAC;IAAC,GAAG,EAAE,GAAG,CAAA;CAAE,GAAG;IAAE,KAAK,EAAE,KAAK,CAAC;IAAC,KAAK,EAAE,eAAe,CAAA;CAAE,CAAC,CAgB/E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAEpE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,eAAe,GAAG,KAAK,CAGlE"}
|
|
@@ -0,0 +1,181 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Dependency validator with gh-style error messages
|
|
3
|
+
*
|
|
4
|
+
* Validates job existence and status before running commands
|
|
5
|
+
* Pattern: Similar to gh CLI (checks git repo), npm run (checks package.json)
|
|
6
|
+
*/
|
|
7
|
+
import { get, OkraApiError } from './client.js';
|
|
8
|
+
import { CacheManager } from './cache.js';
|
|
9
|
+
import chalk from 'chalk';
|
|
10
|
+
/**
|
|
11
|
+
* Validation error with helpful suggestions
|
|
12
|
+
*/
|
|
13
|
+
export class ValidationError extends Error {
|
|
14
|
+
suggestions;
|
|
15
|
+
constructor(message, suggestions) {
|
|
16
|
+
super(message);
|
|
17
|
+
this.suggestions = suggestions;
|
|
18
|
+
this.name = 'ValidationError';
|
|
19
|
+
}
|
|
20
|
+
toString() {
|
|
21
|
+
const lines = [
|
|
22
|
+
chalk.red(`❌ Error: ${this.message}`),
|
|
23
|
+
'',
|
|
24
|
+
...this.suggestions.map(s => ` ${s}`),
|
|
25
|
+
];
|
|
26
|
+
return lines.join('\n');
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Validate job ID format
|
|
31
|
+
*/
|
|
32
|
+
export function isValidJobId(jobId) {
|
|
33
|
+
// Job IDs are typically UUIDs or similar alphanumeric strings
|
|
34
|
+
return /^[a-zA-Z0-9_-]+$/.test(jobId) && jobId.length > 0;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Check if job exists (cache OR API)
|
|
38
|
+
*/
|
|
39
|
+
export async function validateJobExists(jobId, cache) {
|
|
40
|
+
// 1. Validate format
|
|
41
|
+
if (!isValidJobId(jobId)) {
|
|
42
|
+
return {
|
|
43
|
+
exists: false,
|
|
44
|
+
error: new ValidationError(`Invalid job ID format: '${jobId}'`, [
|
|
45
|
+
'Job IDs should be alphanumeric strings (UUIDs or similar)',
|
|
46
|
+
'',
|
|
47
|
+
'Examples:',
|
|
48
|
+
' okra query abc123def456 ".table"',
|
|
49
|
+
' okra query job_2024_01_15_xyz ".currency"',
|
|
50
|
+
]),
|
|
51
|
+
};
|
|
52
|
+
}
|
|
53
|
+
// 2. Check cache first (fast path)
|
|
54
|
+
const cacheManager = cache || new CacheManager();
|
|
55
|
+
if (cacheManager.hasJob(jobId)) {
|
|
56
|
+
// Job exists in cache
|
|
57
|
+
const cachedJob = cacheManager.getJob(jobId);
|
|
58
|
+
if (cachedJob) {
|
|
59
|
+
return {
|
|
60
|
+
exists: true,
|
|
61
|
+
status: 'completed', // Cached jobs are always completed
|
|
62
|
+
job: cachedJob,
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// 3. Check API (slow path)
|
|
67
|
+
try {
|
|
68
|
+
const job = await get(`api/v1/jobs/${jobId}`);
|
|
69
|
+
return {
|
|
70
|
+
exists: true,
|
|
71
|
+
status: job.status,
|
|
72
|
+
job,
|
|
73
|
+
};
|
|
74
|
+
}
|
|
75
|
+
catch (error) {
|
|
76
|
+
if (error instanceof OkraApiError && error.statusCode === 404) {
|
|
77
|
+
return {
|
|
78
|
+
exists: false,
|
|
79
|
+
error: new ValidationError(`Job '${jobId}' not found`, [
|
|
80
|
+
'Run one of:',
|
|
81
|
+
' okra extract myfile.pdf # Create new job',
|
|
82
|
+
' okra jobs list # List available jobs',
|
|
83
|
+
]),
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
// Re-throw other errors
|
|
87
|
+
throw error;
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Validate job is complete (not pending/running)
|
|
92
|
+
*/
|
|
93
|
+
export function validateJobComplete(validation) {
|
|
94
|
+
if (!validation.exists || !validation.job) {
|
|
95
|
+
return new ValidationError('Job validation failed', ['Please run validateJobExists first']);
|
|
96
|
+
}
|
|
97
|
+
const status = validation.status || validation.job.status;
|
|
98
|
+
if (status === 'completed') {
|
|
99
|
+
return null; // All good
|
|
100
|
+
}
|
|
101
|
+
// Job exists but not complete
|
|
102
|
+
const statusMessages = {
|
|
103
|
+
queued: {
|
|
104
|
+
message: `Job '${validation.job.job_id || validation.job.id}' is queued (status: queued)`,
|
|
105
|
+
suggestions: [
|
|
106
|
+
'Try:',
|
|
107
|
+
` okra jobs get ${validation.job.job_id || validation.job.id} # Check status`,
|
|
108
|
+
` okra jobs wait ${validation.job.job_id || validation.job.id} # Wait for completion`,
|
|
109
|
+
],
|
|
110
|
+
},
|
|
111
|
+
pending: {
|
|
112
|
+
message: `Job '${validation.job.job_id || validation.job.id}' is pending (status: pending)`,
|
|
113
|
+
suggestions: [
|
|
114
|
+
'Try:',
|
|
115
|
+
` okra jobs get ${validation.job.job_id || validation.job.id} # Check status`,
|
|
116
|
+
` okra jobs wait ${validation.job.job_id || validation.job.id} # Wait for completion`,
|
|
117
|
+
],
|
|
118
|
+
},
|
|
119
|
+
running: {
|
|
120
|
+
message: `Job '${validation.job.job_id || validation.job.id}' is still processing (status: running)`,
|
|
121
|
+
suggestions: [
|
|
122
|
+
'Try:',
|
|
123
|
+
` okra jobs get ${validation.job.job_id || validation.job.id} # Check status`,
|
|
124
|
+
` okra jobs wait ${validation.job.job_id || validation.job.id} # Wait for completion`,
|
|
125
|
+
],
|
|
126
|
+
},
|
|
127
|
+
failed: {
|
|
128
|
+
message: `Job '${validation.job.job_id || validation.job.id}' failed`,
|
|
129
|
+
suggestions: [
|
|
130
|
+
`Error: ${validation.job.error || 'Unknown error'}`,
|
|
131
|
+
'',
|
|
132
|
+
'Try:',
|
|
133
|
+
' okra extract myfile.pdf # Create new job',
|
|
134
|
+
],
|
|
135
|
+
},
|
|
136
|
+
cancelled: {
|
|
137
|
+
message: `Job '${validation.job.job_id || validation.job.id}' was cancelled`,
|
|
138
|
+
suggestions: [
|
|
139
|
+
'Try:',
|
|
140
|
+
' okra extract myfile.pdf # Create new job',
|
|
141
|
+
],
|
|
142
|
+
},
|
|
143
|
+
};
|
|
144
|
+
const { message, suggestions } = statusMessages[status] || {
|
|
145
|
+
message: `Job has unexpected status: ${status}`,
|
|
146
|
+
suggestions: ['Please contact support'],
|
|
147
|
+
};
|
|
148
|
+
return new ValidationError(message, suggestions);
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Validate job is ready for query (exists AND complete)
|
|
152
|
+
*
|
|
153
|
+
* This is the main validation function used by query commands
|
|
154
|
+
*/
|
|
155
|
+
export async function validateJobReady(jobId, cache) {
|
|
156
|
+
// Check if job exists
|
|
157
|
+
const validation = await validateJobExists(jobId, cache);
|
|
158
|
+
if (!validation.exists || validation.error) {
|
|
159
|
+
return { valid: false, error: validation.error };
|
|
160
|
+
}
|
|
161
|
+
// Check if job is complete
|
|
162
|
+
const completeError = validateJobComplete(validation);
|
|
163
|
+
if (completeError) {
|
|
164
|
+
return { valid: false, error: completeError };
|
|
165
|
+
}
|
|
166
|
+
return { valid: true, job: validation.job };
|
|
167
|
+
}
|
|
168
|
+
/**
|
|
169
|
+
* Format validation error for display
|
|
170
|
+
*/
|
|
171
|
+
export function formatValidationError(error) {
|
|
172
|
+
return error.toString();
|
|
173
|
+
}
|
|
174
|
+
/**
|
|
175
|
+
* Throw validation error with formatted message
|
|
176
|
+
*/
|
|
177
|
+
export function throwValidationError(error) {
|
|
178
|
+
console.error('\n' + formatValidationError(error) + '\n');
|
|
179
|
+
process.exit(1);
|
|
180
|
+
}
|
|
181
|
+
//# sourceMappingURL=validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"validator.js","sourceRoot":"","sources":["../../src/lib/validator.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@okrapdf/cli",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.12",
|
|
4
4
|
"description": "OkraPDF command-line interface for PDF extraction and document chat",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -20,7 +20,7 @@
|
|
|
20
20
|
"test:coverage": "vitest run --coverage",
|
|
21
21
|
"lint": "eslint src/**/*.ts",
|
|
22
22
|
"prepublishOnly": "npm run build",
|
|
23
|
-
"release": "npm version patch && npm publish --access public"
|
|
23
|
+
"release": "npm version patch --no-git-tag-version && npm publish --access public"
|
|
24
24
|
},
|
|
25
25
|
"keywords": [
|
|
26
26
|
"okrapdf",
|
|
@@ -29,19 +29,18 @@
|
|
|
29
29
|
"extraction",
|
|
30
30
|
"cli",
|
|
31
31
|
"document",
|
|
32
|
-
"table-extraction"
|
|
33
|
-
"ai",
|
|
34
|
-
"document-processing"
|
|
32
|
+
"table-extraction"
|
|
35
33
|
],
|
|
36
34
|
"author": "OkraPDF",
|
|
37
35
|
"license": "MIT",
|
|
38
36
|
"repository": {
|
|
39
37
|
"type": "git",
|
|
40
|
-
"url": "https://github.com/okrapdf
|
|
38
|
+
"url": "https://github.com/steventsao/okrapdf.git",
|
|
39
|
+
"directory": "packages/cli"
|
|
41
40
|
},
|
|
42
41
|
"homepage": "https://okrapdf.com",
|
|
43
42
|
"bugs": {
|
|
44
|
-
"url": "https://github.com/okrapdf/
|
|
43
|
+
"url": "https://github.com/steventsao/okrapdf/issues"
|
|
45
44
|
},
|
|
46
45
|
"engines": {
|
|
47
46
|
"node": ">=18.0.0"
|
|
@@ -56,6 +55,7 @@
|
|
|
56
55
|
"form-data": "^4.0.0",
|
|
57
56
|
"got": "^14.4.2",
|
|
58
57
|
"ora": "^8.0.1",
|
|
58
|
+
"pdfquery": "workspace:*",
|
|
59
59
|
"ws": "^8.18.0"
|
|
60
60
|
},
|
|
61
61
|
"optionalDependencies": {
|
|
@@ -70,7 +70,6 @@
|
|
|
70
70
|
},
|
|
71
71
|
"files": [
|
|
72
72
|
"dist",
|
|
73
|
-
"README.md"
|
|
74
|
-
"LICENSE"
|
|
73
|
+
"README.md"
|
|
75
74
|
]
|
|
76
75
|
}
|
package/LICENSE
DELETED
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
MIT License
|
|
2
|
-
|
|
3
|
-
Copyright (c) 2024-2026 OkraPDF
|
|
4
|
-
|
|
5
|
-
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
-
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
-
in the Software without restriction, including without limitation the rights
|
|
8
|
-
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
-
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
-
furnished to do so, subject to the following conditions:
|
|
11
|
-
|
|
12
|
-
The above copyright notice and this permission notice shall be included in all
|
|
13
|
-
copies or substantial portions of the Software.
|
|
14
|
-
|
|
15
|
-
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
-
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
-
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
-
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
-
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
-
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
-
SOFTWARE.
|