@okrapdf/cli 0.2.17 → 0.3.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.
Files changed (56) hide show
  1. package/dist/cli.d.ts.map +1 -1
  2. package/dist/cli.js +2 -4
  3. package/dist/cli.js.map +1 -1
  4. package/dist/commands/auth.d.ts.map +1 -1
  5. package/dist/commands/auth.js +44 -27
  6. package/dist/commands/auth.js.map +1 -1
  7. package/dist/commands/chat.d.ts.map +1 -1
  8. package/dist/commands/chat.js +11 -3
  9. package/dist/commands/chat.js.map +1 -1
  10. package/dist/commands/jobs.d.ts.map +1 -1
  11. package/dist/commands/jobs.js +5 -0
  12. package/dist/commands/jobs.js.map +1 -1
  13. package/dist/index.js +0 -0
  14. package/dist/types.d.ts +1 -0
  15. package/dist/types.d.ts.map +1 -1
  16. package/package.json +1 -1
  17. package/dist/commands/docs.d.ts +0 -6
  18. package/dist/commands/docs.d.ts.map +0 -1
  19. package/dist/commands/docs.js +0 -157
  20. package/dist/commands/docs.js.map +0 -1
  21. package/dist/commands/step.d.ts +0 -17
  22. package/dist/commands/step.d.ts.map +0 -1
  23. package/dist/commands/step.js +0 -212
  24. package/dist/commands/step.js.map +0 -1
  25. package/dist/commands/workflow.d.ts +0 -18
  26. package/dist/commands/workflow.d.ts.map +0 -1
  27. package/dist/commands/workflow.js +0 -340
  28. package/dist/commands/workflow.js.map +0 -1
  29. package/dist/lib/dom-emitter.d.ts +0 -14
  30. package/dist/lib/dom-emitter.d.ts.map +0 -1
  31. package/dist/lib/dom-emitter.js +0 -66
  32. package/dist/lib/dom-emitter.js.map +0 -1
  33. package/dist/lib/dom-ops.d.ts +0 -55
  34. package/dist/lib/dom-ops.d.ts.map +0 -1
  35. package/dist/lib/dom-ops.js +0 -93
  36. package/dist/lib/dom-ops.js.map +0 -1
  37. package/dist/lib/pdfquery.d.ts +0 -57
  38. package/dist/lib/pdfquery.d.ts.map +0 -1
  39. package/dist/lib/pdfquery.js +0 -101
  40. package/dist/lib/pdfquery.js.map +0 -1
  41. package/dist/lib/sinks/file.d.ts +0 -8
  42. package/dist/lib/sinks/file.d.ts.map +0 -1
  43. package/dist/lib/sinks/file.js +0 -30
  44. package/dist/lib/sinks/file.js.map +0 -1
  45. package/dist/lib/sinks/index.d.ts +0 -6
  46. package/dist/lib/sinks/index.d.ts.map +0 -1
  47. package/dist/lib/sinks/index.js +0 -30
  48. package/dist/lib/sinks/index.js.map +0 -1
  49. package/dist/lib/sinks/partykit.d.ts +0 -14
  50. package/dist/lib/sinks/partykit.d.ts.map +0 -1
  51. package/dist/lib/sinks/partykit.js +0 -124
  52. package/dist/lib/sinks/partykit.js.map +0 -1
  53. package/dist/lib/sinks/stdout.d.ts +0 -6
  54. package/dist/lib/sinks/stdout.d.ts.map +0 -1
  55. package/dist/lib/sinks/stdout.js +0 -9
  56. package/dist/lib/sinks/stdout.js.map +0 -1
@@ -1,340 +0,0 @@
1
- /**
2
- * Workflow Command - Run and manage workflows
3
- *
4
- * Usage:
5
- * okra workflow list
6
- * okra workflow describe <workflow-id>
7
- * okra workflow run --id <workflow-id> --input '{"pdfUrl": "...", "jobId": "..."}'
8
- * okra workflow status <execution-id>
9
- *
10
- * Designed for running complete OCR pipelines.
11
- */
12
- import { Command } from 'commander';
13
- import chalk from 'chalk';
14
- import { formatOutput, success, error, info } from '../lib/output.js';
15
- import { post, get, EXIT_CODES } from '../lib/client.js';
16
- import { withSpinner, pollWithProgress } from '../lib/progress.js';
17
- /**
18
- * Create the 'workflow' command group
19
- */
20
- export function createWorkflowCommand() {
21
- const workflow = new Command('workflow')
22
- .description('Run and manage OCR workflows');
23
- // okra workflow list
24
- workflow
25
- .command('list')
26
- .description('List available workflows')
27
- .option('-o, --output <format>', 'Output format (table, json)', 'table')
28
- .option('--tag <tag>', 'Filter by tag')
29
- .action(async (options) => {
30
- try {
31
- const response = await withSpinner('Fetching workflows', () => get('api/v1/workflow/definitions'));
32
- let workflows = response.workflows;
33
- // Filter by tag if specified
34
- if (options.tag) {
35
- workflows = workflows.filter((w) => w.tags?.includes(options.tag));
36
- }
37
- if (options.output === 'json') {
38
- console.log(formatOutput(workflows, 'json'));
39
- }
40
- else {
41
- console.log(chalk.bold('\nAvailable Workflows:\n'));
42
- for (const wf of workflows) {
43
- console.log(` ${chalk.green(wf.name.padEnd(30))} v${wf.version}`);
44
- console.log(` ${' '.repeat(30)} ${chalk.cyan(wf.displayName)}`);
45
- if (wf.description) {
46
- console.log(` ${' '.repeat(30)} ${chalk.dim(wf.description.slice(0, 60))}...`);
47
- }
48
- if (wf.tags && wf.tags.length > 0) {
49
- console.log(` ${' '.repeat(30)} ${chalk.dim(`Tags: ${wf.tags.join(', ')}`)}`);
50
- }
51
- console.log();
52
- }
53
- console.log(chalk.dim(`Use 'okra workflow describe <name>' for details`));
54
- }
55
- }
56
- catch (err) {
57
- error(err.message || 'Failed to list workflows');
58
- process.exit(EXIT_CODES.GENERAL_ERROR);
59
- }
60
- });
61
- // okra workflow describe <workflow>
62
- workflow
63
- .command('describe <workflow>')
64
- .description('Show detailed info about a workflow')
65
- .option('-o, --output <format>', 'Output format (table, json)', 'table')
66
- .action(async (workflowName, options) => {
67
- try {
68
- const response = await withSpinner('Fetching workflow', () => get(`api/v1/workflow/definitions/${workflowName}`));
69
- if (options.output === 'json') {
70
- console.log(formatOutput(response, 'json'));
71
- }
72
- else {
73
- const wf = response;
74
- console.log();
75
- console.log(chalk.bold.cyan(wf.displayName));
76
- console.log(chalk.dim(`Workflow: ${wf.name} v${wf.version}`));
77
- console.log();
78
- if (wf.description) {
79
- console.log(wf.description);
80
- console.log();
81
- }
82
- // Node flow visualization
83
- console.log(chalk.bold('Pipeline:'));
84
- const nodeMap = new Map(wf.nodes.map((n) => [n.id, n]));
85
- // Simple linear display (for complex DAGs, would need proper topo sort)
86
- console.log();
87
- for (let i = 0; i < wf.nodes.length; i++) {
88
- const node = wf.nodes[i];
89
- const isLast = i === wf.nodes.length - 1;
90
- const arrow = isLast ? '' : ' → ';
91
- process.stdout.write(chalk.green(node.type) + arrow);
92
- }
93
- console.log('\n');
94
- // Node details
95
- console.log(chalk.bold('Nodes:'));
96
- for (const node of wf.nodes) {
97
- console.log(` ${chalk.cyan(node.id)} (${node.type})`);
98
- if (node.parameters && Object.keys(node.parameters).length > 0) {
99
- for (const [key, value] of Object.entries(node.parameters)) {
100
- console.log(` ${chalk.dim(key)}: ${JSON.stringify(value)}`);
101
- }
102
- }
103
- }
104
- console.log();
105
- if (wf.tags && wf.tags.length > 0) {
106
- console.log(chalk.bold('Tags:'), wf.tags.join(', '));
107
- console.log();
108
- }
109
- console.log(chalk.dim(`Run with: okra workflow run --id ${wf.name} --input '{...}'`));
110
- }
111
- }
112
- catch (err) {
113
- error(err.message || `Workflow '${workflowName}' not found`);
114
- process.exit(EXIT_CODES.INVALID_ARGS);
115
- }
116
- });
117
- // okra workflow run --id <workflow> --input <json>
118
- workflow
119
- .command('run')
120
- .description('Execute a workflow with input data')
121
- .requiredOption('--id <workflow>', 'Workflow ID to run')
122
- .requiredOption('-i, --input <json>', 'Input data as JSON string')
123
- .option('-j, --job-id <jobId>', 'Custom job ID')
124
- .option('--no-wait', 'Start workflow without waiting for completion')
125
- .option('--timeout <seconds>', 'Timeout in seconds (default: 3600)', '3600')
126
- .option('-o, --output <format>', 'Output format (json, table)', 'json')
127
- .option('-q, --quiet', 'Only output the result')
128
- .action(async (options) => {
129
- try {
130
- // Parse input JSON
131
- let input;
132
- try {
133
- input = JSON.parse(options.input);
134
- }
135
- catch {
136
- error('Invalid JSON input. Use: --input \'{"key": "value"}\'');
137
- process.exit(EXIT_CODES.INVALID_ARGS);
138
- }
139
- const jobId = options.jobId || `wf-${Date.now()}`;
140
- // Build request
141
- const request = {
142
- workflowId: options.id,
143
- input,
144
- jobId,
145
- };
146
- if (!options.quiet) {
147
- info(`Starting workflow: ${options.id}`);
148
- info(`Job ID: ${jobId}`);
149
- }
150
- const response = await withSpinner(options.quiet ? '' : 'Starting workflow', () => post('api/v1/workflow/run', request));
151
- if (!options.wait) {
152
- // Return immediately
153
- if (options.output === 'json') {
154
- console.log(formatOutput(response, 'json'));
155
- }
156
- else {
157
- success('Workflow started');
158
- console.log(` Execution ID: ${response.executionId}`);
159
- console.log(` Job ID: ${response.jobId}`);
160
- console.log();
161
- console.log(chalk.dim(`Check status: okra workflow status ${response.executionId}`));
162
- }
163
- return;
164
- }
165
- // Poll for completion
166
- const timeoutMs = parseInt(options.timeout, 10) * 1000;
167
- const startTime = Date.now();
168
- const result = await pollWithProgress(async () => {
169
- const status = await get(`api/v1/workflow/executions/${response.executionId}`);
170
- const done = ['completed', 'failed', 'cancelled'].includes(status.status);
171
- // Calculate progress from node statuses
172
- let progress = 0;
173
- let total = 0;
174
- if (status.nodeStatuses) {
175
- total = Object.keys(status.nodeStatuses).length;
176
- progress = Object.values(status.nodeStatuses).filter((n) => n.status === 'success' || n.status === 'error').length;
177
- }
178
- return {
179
- done,
180
- progress,
181
- total: total || undefined,
182
- data: status,
183
- };
184
- }, {
185
- label: options.quiet ? '' : 'Running workflow',
186
- interval: 3000,
187
- timeout: timeoutMs,
188
- });
189
- if (result.status === 'failed' && result.error) {
190
- error(`Workflow failed: ${result.error.message}`);
191
- if (options.output === 'json') {
192
- console.log(formatOutput(result, 'json'));
193
- }
194
- process.exit(EXIT_CODES.JOB_FAILED);
195
- }
196
- if (result.status === 'cancelled') {
197
- error('Workflow was cancelled');
198
- process.exit(EXIT_CODES.JOB_FAILED);
199
- }
200
- // Success
201
- if (options.output === 'json') {
202
- console.log(formatOutput(result, 'json'));
203
- }
204
- else {
205
- console.log();
206
- success(`Workflow ${options.id} completed`);
207
- console.log(chalk.dim(`Execution ID: ${response.executionId}`));
208
- const duration = Date.now() - startTime;
209
- console.log(chalk.dim(`Duration: ${(duration / 1000).toFixed(1)}s`));
210
- if (result.nodeStatuses) {
211
- console.log();
212
- console.log(chalk.bold('Node Results:'));
213
- for (const [nodeId, status] of Object.entries(result.nodeStatuses)) {
214
- const icon = status.status === 'success' ? '✓' : status.status === 'error' ? '✗' : '○';
215
- const color = status.status === 'success' ? chalk.green : status.status === 'error' ? chalk.red : chalk.dim;
216
- console.log(` ${color(icon)} ${nodeId}: ${status.status}`);
217
- }
218
- }
219
- if (result.output) {
220
- console.log();
221
- console.log(chalk.bold('Output:'));
222
- console.log(JSON.stringify(result.output, null, 2));
223
- }
224
- }
225
- }
226
- catch (err) {
227
- error(err.message || 'Failed to run workflow');
228
- process.exit(EXIT_CODES.GENERAL_ERROR);
229
- }
230
- });
231
- // okra workflow status <execution-id>
232
- workflow
233
- .command('status <executionId>')
234
- .description('Check status of a workflow execution')
235
- .option('-o, --output <format>', 'Output format (json, table)', 'table')
236
- .option('--watch', 'Watch for updates')
237
- .action(async (executionId, options) => {
238
- try {
239
- const fetchStatus = async () => {
240
- return get(`api/v1/workflow/executions/${executionId}`);
241
- };
242
- if (options.watch) {
243
- // Continuous watch mode
244
- console.log(chalk.dim('Watching execution (Ctrl+C to stop)...\n'));
245
- let lastStatus = '';
246
- while (true) {
247
- const status = await fetchStatus();
248
- // Only print if status changed
249
- const statusStr = JSON.stringify(status.nodeStatuses);
250
- if (statusStr !== lastStatus) {
251
- console.clear();
252
- printStatus(status);
253
- lastStatus = statusStr;
254
- }
255
- if (['completed', 'failed', 'cancelled'].includes(status.status)) {
256
- break;
257
- }
258
- await new Promise((r) => setTimeout(r, 2000));
259
- }
260
- }
261
- else {
262
- const status = await withSpinner('Fetching status', fetchStatus);
263
- if (options.output === 'json') {
264
- console.log(formatOutput(status, 'json'));
265
- }
266
- else {
267
- printStatus(status);
268
- }
269
- }
270
- }
271
- catch (err) {
272
- error(err.message || 'Failed to get status');
273
- process.exit(EXIT_CODES.GENERAL_ERROR);
274
- }
275
- });
276
- return workflow;
277
- }
278
- function printStatus(status) {
279
- console.log();
280
- console.log(chalk.bold(`Workflow Execution: ${status.executionId}`));
281
- console.log();
282
- // Overall status
283
- const statusColor = status.status === 'completed'
284
- ? chalk.green
285
- : status.status === 'failed'
286
- ? chalk.red
287
- : status.status === 'cancelled'
288
- ? chalk.yellow
289
- : chalk.cyan;
290
- console.log(`Status: ${statusColor(status.status.toUpperCase())}`);
291
- console.log(`Job ID: ${status.jobId}`);
292
- console.log(`Workflow: ${status.workflowId}`);
293
- if (status.startedAt) {
294
- console.log(`Started: ${status.startedAt}`);
295
- }
296
- if (status.completedAt) {
297
- console.log(`Completed: ${status.completedAt}`);
298
- }
299
- // Node statuses
300
- if (status.nodeStatuses && Object.keys(status.nodeStatuses).length > 0) {
301
- console.log();
302
- console.log(chalk.bold('Nodes:'));
303
- for (const [nodeId, nodeStatus] of Object.entries(status.nodeStatuses)) {
304
- const icon = nodeStatus.status === 'success'
305
- ? chalk.green('✓')
306
- : nodeStatus.status === 'error'
307
- ? chalk.red('✗')
308
- : nodeStatus.status === 'running'
309
- ? chalk.cyan('◌')
310
- : chalk.dim('○');
311
- let progressStr = '';
312
- if (nodeStatus.progress) {
313
- const pct = nodeStatus.progress.total
314
- ? Math.round((nodeStatus.progress.current / nodeStatus.progress.total) * 100)
315
- : 0;
316
- progressStr = chalk.dim(` (${nodeStatus.progress.current}/${nodeStatus.progress.total || '?'} - ${pct}%)`);
317
- }
318
- console.log(` ${icon} ${nodeId}: ${nodeStatus.status}${progressStr}`);
319
- }
320
- }
321
- // Error
322
- if (status.error) {
323
- console.log();
324
- console.log(chalk.red(`Error: ${status.error.message}`));
325
- }
326
- // Output preview
327
- if (status.output) {
328
- console.log();
329
- console.log(chalk.bold('Output:'));
330
- const outputStr = JSON.stringify(status.output, null, 2);
331
- if (outputStr.length > 500) {
332
- console.log(outputStr.slice(0, 500) + '...');
333
- }
334
- else {
335
- console.log(outputStr);
336
- }
337
- }
338
- }
339
- export default createWorkflowCommand;
340
- //# sourceMappingURL=workflow.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"workflow.js","sourceRoot":"","sources":["../../src/commands/workflow.ts"],"names":[],"mappings":"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"}
@@ -1,14 +0,0 @@
1
- import type { DomOpSink } from './dom-ops.js';
2
- export declare class DomEmitter {
3
- private sink;
4
- constructor(sink: DomOpSink);
5
- addDocument(id: string, filename: string): Promise<void>;
6
- addPage(docId: string, pageNum: number, text?: string): Promise<void>;
7
- addTable(pageId: string, tableId: string, bbox?: unknown): Promise<void>;
8
- addFigure(pageId: string, figureId: string, bbox?: unknown): Promise<void>;
9
- setTableContent(tableId: string, markdown: string): Promise<void>;
10
- setStatus(nodeId: string, status: string): Promise<void>;
11
- setProgress(nodeId: string, completed: number, total: number): Promise<void>;
12
- close(): Promise<void>;
13
- }
14
- //# sourceMappingURL=dom-emitter.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dom-emitter.d.ts","sourceRoot":"","sources":["../../src/lib/dom-emitter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAS,SAAS,EAAW,MAAM,cAAc,CAAC;AAE9D,qBAAa,UAAU;IACT,OAAO,CAAC,IAAI;gBAAJ,IAAI,EAAE,SAAS;IAE7B,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQxD,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAarE,QAAQ,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAYxE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAY1E,eAAe,CAAC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAOjE,SAAS,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAIxD,WAAW,CAAC,MAAM,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5E,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAG7B"}
@@ -1,66 +0,0 @@
1
- export class DomEmitter {
2
- sink;
3
- constructor(sink) {
4
- this.sink = sink;
5
- }
6
- async addDocument(id, filename) {
7
- await this.sink.emit([{
8
- op: 'ADD_NODE',
9
- parentId: '',
10
- node: { id, type: 'document', attrs: { filename } }
11
- }]);
12
- }
13
- async addPage(docId, pageNum, text) {
14
- await this.sink.emit([{
15
- op: 'ADD_NODE',
16
- parentId: docId,
17
- node: {
18
- id: `page-${pageNum}`,
19
- type: 'page',
20
- text: text?.slice(0, 500),
21
- attrs: { num: pageNum, page: pageNum }
22
- }
23
- }]);
24
- }
25
- async addTable(pageId, tableId, bbox) {
26
- await this.sink.emit([{
27
- op: 'ADD_NODE',
28
- parentId: pageId,
29
- node: {
30
- id: tableId,
31
- type: 'table',
32
- attrs: { bbox, status: 'pending' }
33
- }
34
- }]);
35
- }
36
- async addFigure(pageId, figureId, bbox) {
37
- await this.sink.emit([{
38
- op: 'ADD_NODE',
39
- parentId: pageId,
40
- node: {
41
- id: figureId,
42
- type: 'figure',
43
- attrs: { bbox, status: 'pending' }
44
- }
45
- }]);
46
- }
47
- async setTableContent(tableId, markdown) {
48
- await this.sink.emit([
49
- { op: 'SET_TEXT', nodeId: tableId, text: markdown },
50
- { op: 'SET_ATTR', nodeId: tableId, key: 'status', value: 'extracted' }
51
- ]);
52
- }
53
- async setStatus(nodeId, status) {
54
- await this.sink.emit([{ op: 'SET_ATTR', nodeId, key: 'status', value: status }]);
55
- }
56
- async setProgress(nodeId, completed, total) {
57
- await this.sink.emit([
58
- { op: 'SET_ATTR', nodeId, key: 'pagesCompleted', value: completed },
59
- { op: 'SET_ATTR', nodeId, key: 'totalPages', value: total }
60
- ]);
61
- }
62
- async close() {
63
- await this.sink.close();
64
- }
65
- }
66
- //# sourceMappingURL=dom-emitter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dom-emitter.js","sourceRoot":"","sources":["../../src/lib/dom-emitter.ts"],"names":[],"mappings":"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"}
@@ -1,55 +0,0 @@
1
- /**
2
- * DOM Operations for streaming document extraction
3
- *
4
- * Generic tree mutations (like React's virtual DOM) that can be
5
- * transformed to any target format (PartyKit JdomPatch, NDJSON, etc.)
6
- */
7
- export type DomNodeType = 'document' | 'page' | 'table' | 'figure' | 'paragraph' | 'heading' | 'footnote' | 'list' | 'list-item' | 'ocr-block';
8
- export interface DomNode {
9
- id: string;
10
- type: DomNodeType;
11
- text?: string;
12
- attrs?: Record<string, unknown>;
13
- children?: DomNode[];
14
- }
15
- export type DomOp = {
16
- op: 'ADD_NODE';
17
- parentId: string;
18
- index?: number;
19
- node: DomNode;
20
- } | {
21
- op: 'REMOVE_NODE';
22
- nodeId: string;
23
- } | {
24
- op: 'UPDATE_NODE';
25
- nodeId: string;
26
- patch: Partial<DomNode>;
27
- } | {
28
- op: 'SET_ATTR';
29
- nodeId: string;
30
- key: string;
31
- value: unknown;
32
- } | {
33
- op: 'SET_TEXT';
34
- nodeId: string;
35
- text: string;
36
- };
37
- export interface DomOpSink {
38
- /** Emit one or more operations */
39
- emit(ops: DomOp[]): Promise<void>;
40
- /** Close the sink */
41
- close(): Promise<void>;
42
- }
43
- export interface JdomPatch {
44
- op: 'replace' | 'add' | 'remove';
45
- path: (string | number)[];
46
- value?: unknown;
47
- }
48
- /**
49
- * Convert a DomOp to JdomPatch format
50
- *
51
- * Note: This is a simplified conversion that assumes a flat node structure.
52
- * For nested trees, path resolution would need access to the full tree state.
53
- */
54
- export declare function domOpToJdomPatch(op: DomOp): JdomPatch[];
55
- //# sourceMappingURL=dom-ops.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dom-ops.d.ts","sourceRoot":"","sources":["../../src/lib/dom-ops.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,MAAM,MAAM,WAAW,GACnB,UAAU,GACV,MAAM,GACN,OAAO,GACP,QAAQ,GACR,WAAW,GACX,SAAS,GACT,UAAU,GACV,MAAM,GACN,WAAW,GACX,WAAW,CAAC;AAGhB,MAAM,WAAW,OAAO;IACtB,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,WAAW,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,OAAO,EAAE,CAAC;CACtB;AAGD,MAAM,MAAM,KAAK,GACb;IAAE,EAAE,EAAE,UAAU,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,OAAO,CAAA;CAAE,GACnE;IAAE,EAAE,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GACrC;IAAE,EAAE,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAC,OAAO,CAAC,CAAA;CAAE,GAC9D;IAAE,EAAE,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,GAC/D;IAAE,EAAE,EAAE,UAAU,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AAGrD,MAAM,WAAW,SAAS;IACxB,kCAAkC;IAClC,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAClC,qBAAqB;IACrB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CACxB;AAGD,MAAM,WAAW,SAAS;IACxB,EAAE,EAAE,SAAS,GAAG,KAAK,GAAG,QAAQ,CAAC;IACjC,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,CAAC,EAAE,CAAC;IAC1B,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,KAAK,GAAG,SAAS,EAAE,CAoDvD"}
@@ -1,93 +0,0 @@
1
- /**
2
- * DOM Operations for streaming document extraction
3
- *
4
- * Generic tree mutations (like React's virtual DOM) that can be
5
- * transformed to any target format (PartyKit JdomPatch, NDJSON, etc.)
6
- */
7
- /**
8
- * Convert a DomOp to JdomPatch format
9
- *
10
- * Note: This is a simplified conversion that assumes a flat node structure.
11
- * For nested trees, path resolution would need access to the full tree state.
12
- */
13
- export function domOpToJdomPatch(op) {
14
- switch (op.op) {
15
- case 'ADD_NODE':
16
- return [{
17
- op: 'add',
18
- path: ['children', op.index ?? -1], // -1 = append
19
- value: domNodeToJdom(op.node),
20
- }];
21
- case 'REMOVE_NODE':
22
- return [{
23
- op: 'remove',
24
- path: ['children', op.nodeId], // Simplified - actual impl needs index lookup
25
- }];
26
- case 'UPDATE_NODE':
27
- const patches = [];
28
- if (op.patch.text !== undefined) {
29
- patches.push({
30
- op: 'replace',
31
- path: [op.nodeId, 'textContent'],
32
- value: op.patch.text,
33
- });
34
- }
35
- if (op.patch.attrs) {
36
- for (const [key, value] of Object.entries(op.patch.attrs)) {
37
- patches.push({
38
- op: 'replace',
39
- path: [op.nodeId, 'attributes', key],
40
- value,
41
- });
42
- }
43
- }
44
- return patches;
45
- case 'SET_ATTR':
46
- return [{
47
- op: 'replace',
48
- path: [op.nodeId, 'attributes', op.key],
49
- value: op.value,
50
- }];
51
- case 'SET_TEXT':
52
- return [{
53
- op: 'replace',
54
- path: [op.nodeId, 'textContent'],
55
- value: op.text,
56
- }];
57
- default:
58
- return [];
59
- }
60
- }
61
- /**
62
- * Convert DomNode to Jdom format
63
- */
64
- function domNodeToJdom(node) {
65
- return {
66
- id: node.id,
67
- type: node.type,
68
- tagName: nodeTypeToTagName(node.type),
69
- page: node.attrs?.page ?? 0,
70
- textContent: node.text ?? null,
71
- attributes: node.attrs ?? {},
72
- children: node.children?.map(domNodeToJdom) ?? [],
73
- };
74
- }
75
- /**
76
- * Map node type to HTML-like tag name
77
- */
78
- function nodeTypeToTagName(type) {
79
- const tagMap = {
80
- 'document': 'article',
81
- 'page': 'section',
82
- 'table': 'table',
83
- 'figure': 'figure',
84
- 'paragraph': 'p',
85
- 'heading': 'h1',
86
- 'footnote': 'aside',
87
- 'list': 'ul',
88
- 'list-item': 'li',
89
- 'ocr-block': 'div',
90
- };
91
- return tagMap[type] ?? 'div';
92
- }
93
- //# sourceMappingURL=dom-ops.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dom-ops.js","sourceRoot":"","sources":["../../src/lib/dom-ops.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AA+CH;;;;;GAKG;AACH,MAAM,UAAU,gBAAgB,CAAC,EAAS;IACxC,QAAQ,EAAE,CAAC,EAAE,EAAE,CAAC;QACd,KAAK,UAAU;YACb,OAAO,CAAC;oBACN,EAAE,EAAE,KAAK;oBACT,IAAI,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,cAAc;oBAClD,KAAK,EAAE,aAAa,CAAC,EAAE,CAAC,IAAI,CAAC;iBAC9B,CAAC,CAAC;QAEL,KAAK,aAAa;YAChB,OAAO,CAAC;oBACN,EAAE,EAAE,QAAQ;oBACZ,IAAI,EAAE,CAAC,UAAU,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,8CAA8C;iBAC9E,CAAC,CAAC;QAEL,KAAK,aAAa;YAChB,MAAM,OAAO,GAAgB,EAAE,CAAC;YAChC,IAAI,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;gBAChC,OAAO,CAAC,IAAI,CAAC;oBACX,EAAE,EAAE,SAAS;oBACb,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;oBAChC,KAAK,EAAE,EAAE,CAAC,KAAK,CAAC,IAAI;iBACrB,CAAC,CAAC;YACL,CAAC;YACD,IAAI,EAAE,CAAC,KAAK,CAAC,KAAK,EAAE,CAAC;gBACnB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC;oBAC1D,OAAO,CAAC,IAAI,CAAC;wBACX,EAAE,EAAE,SAAS;wBACb,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,GAAG,CAAC;wBACpC,KAAK;qBACN,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;YACD,OAAO,OAAO,CAAC;QAEjB,KAAK,UAAU;YACb,OAAO,CAAC;oBACN,EAAE,EAAE,SAAS;oBACb,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,YAAY,EAAE,EAAE,CAAC,GAAG,CAAC;oBACvC,KAAK,EAAE,EAAE,CAAC,KAAK;iBAChB,CAAC,CAAC;QAEL,KAAK,UAAU;YACb,OAAO,CAAC;oBACN,EAAE,EAAE,SAAS;oBACb,IAAI,EAAE,CAAC,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC;oBAChC,KAAK,EAAE,EAAE,CAAC,IAAI;iBACf,CAAC,CAAC;QAEL;YACE,OAAO,EAAE,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,aAAa,CAAC,IAAa;IAClC,OAAO;QACL,EAAE,EAAE,IAAI,CAAC,EAAE;QACX,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,OAAO,EAAE,iBAAiB,CAAC,IAAI,CAAC,IAAI,CAAC;QACrC,IAAI,EAAE,IAAI,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC;QAC3B,WAAW,EAAE,IAAI,CAAC,IAAI,IAAI,IAAI;QAC9B,UAAU,EAAE,IAAI,CAAC,KAAK,IAAI,EAAE;QAC5B,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,GAAG,CAAC,aAAa,CAAC,IAAI,EAAE;KAClD,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,SAAS,iBAAiB,CAAC,IAAiB;IAC1C,MAAM,MAAM,GAAgC;QAC1C,UAAU,EAAE,SAAS;QACrB,MAAM,EAAE,SAAS;QACjB,OAAO,EAAE,OAAO;QAChB,QAAQ,EAAE,QAAQ;QAClB,WAAW,EAAE,GAAG;QAChB,SAAS,EAAE,IAAI;QACf,UAAU,EAAE,OAAO;QACnB,MAAM,EAAE,IAAI;QACZ,WAAW,EAAE,IAAI;QACjB,WAAW,EAAE,KAAK;KACnB,CAAC;IACF,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;AAC/B,CAAC"}