@amirdaraee/namewise 0.8.0 → 0.10.0
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/.claude/agents/test-writer.md +39 -0
- package/.claude/settings.json +41 -0
- package/.claude/skills/new-command/SKILL.md +77 -0
- package/.claude/skills/release/SKILL.md +48 -0
- package/CHANGELOG.md +46 -0
- package/README.md +86 -21
- package/dist/cli/apply.d.ts.map +1 -1
- package/dist/cli/apply.js +10 -4
- package/dist/cli/apply.js.map +1 -1
- package/dist/cli/clean-empty.d.ts.map +1 -1
- package/dist/cli/clean-empty.js +9 -3
- package/dist/cli/clean-empty.js.map +1 -1
- package/dist/cli/commands.d.ts.map +1 -1
- package/dist/cli/commands.js +54 -32
- package/dist/cli/commands.js.map +1 -1
- package/dist/cli/config-cmd.d.ts.map +1 -1
- package/dist/cli/config-cmd.js +6 -5
- package/dist/cli/config-cmd.js.map +1 -1
- package/dist/cli/dedup.d.ts.map +1 -1
- package/dist/cli/dedup.js +8 -7
- package/dist/cli/dedup.js.map +1 -1
- package/dist/cli/diff.d.ts.map +1 -1
- package/dist/cli/diff.js +9 -8
- package/dist/cli/diff.js.map +1 -1
- package/dist/cli/find.d.ts.map +1 -1
- package/dist/cli/find.js +3 -2
- package/dist/cli/find.js.map +1 -1
- package/dist/cli/flatten.d.ts.map +1 -1
- package/dist/cli/flatten.js +9 -3
- package/dist/cli/flatten.js.map +1 -1
- package/dist/cli/info.d.ts.map +1 -1
- package/dist/cli/info.js +3 -2
- package/dist/cli/info.js.map +1 -1
- package/dist/cli/init.d.ts.map +1 -1
- package/dist/cli/init.js +8 -7
- package/dist/cli/init.js.map +1 -1
- package/dist/cli/organize.d.ts.map +1 -1
- package/dist/cli/organize.js +9 -3
- package/dist/cli/organize.js.map +1 -1
- package/dist/cli/rename.d.ts.map +1 -1
- package/dist/cli/rename.js +129 -61
- package/dist/cli/rename.js.map +1 -1
- package/dist/cli/sanitize.d.ts.map +1 -1
- package/dist/cli/sanitize.js +9 -3
- package/dist/cli/sanitize.js.map +1 -1
- package/dist/cli/stats.d.ts.map +1 -1
- package/dist/cli/stats.js +6 -5
- package/dist/cli/stats.js.map +1 -1
- package/dist/cli/tree.d.ts.map +1 -1
- package/dist/cli/tree.js +2 -1
- package/dist/cli/tree.js.map +1 -1
- package/dist/cli/undo.d.ts.map +1 -1
- package/dist/cli/undo.js +13 -12
- package/dist/cli/undo.js.map +1 -1
- package/dist/cli/watch.d.ts.map +1 -1
- package/dist/cli/watch.js +7 -6
- package/dist/cli/watch.js.map +1 -1
- package/dist/errors.d.ts +35 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +75 -0
- package/dist/errors.js.map +1 -0
- package/dist/index.js +3 -1
- package/dist/index.js.map +1 -1
- package/dist/parsers/excel-parser.d.ts.map +1 -1
- package/dist/parsers/excel-parser.js +5 -1
- package/dist/parsers/excel-parser.js.map +1 -1
- package/dist/parsers/factory.d.ts +1 -1
- package/dist/parsers/factory.d.ts.map +1 -1
- package/dist/parsers/factory.js +1 -1
- package/dist/parsers/factory.js.map +1 -1
- package/dist/parsers/pdf-parser.d.ts.map +1 -1
- package/dist/parsers/pdf-parser.js +35 -30
- package/dist/parsers/pdf-parser.js.map +1 -1
- package/dist/parsers/text-parser.d.ts.map +1 -1
- package/dist/parsers/text-parser.js +5 -1
- package/dist/parsers/text-parser.js.map +1 -1
- package/dist/parsers/word-parser.d.ts.map +1 -1
- package/dist/parsers/word-parser.js +5 -1
- package/dist/parsers/word-parser.js.map +1 -1
- package/dist/services/ai-factory.d.ts.map +1 -1
- package/dist/services/ai-factory.js +4 -3
- package/dist/services/ai-factory.js.map +1 -1
- package/dist/services/claude-service.d.ts.map +1 -1
- package/dist/services/claude-service.js +14 -3
- package/dist/services/claude-service.js.map +1 -1
- package/dist/services/file-renamer.d.ts +1 -1
- package/dist/services/file-renamer.d.ts.map +1 -1
- package/dist/services/file-renamer.js +13 -32
- package/dist/services/file-renamer.js.map +1 -1
- package/dist/services/lmstudio-service.d.ts.map +1 -1
- package/dist/services/lmstudio-service.js +15 -7
- package/dist/services/lmstudio-service.js.map +1 -1
- package/dist/services/ollama-service.d.ts.map +1 -1
- package/dist/services/ollama-service.js +15 -7
- package/dist/services/ollama-service.js.map +1 -1
- package/dist/services/openai-service.d.ts.map +1 -1
- package/dist/services/openai-service.js +14 -3
- package/dist/services/openai-service.js.map +1 -1
- package/dist/utils/ai-prompts.d.ts.map +1 -1
- package/dist/utils/ai-prompts.js +2 -0
- package/dist/utils/ai-prompts.js.map +1 -1
- package/dist/utils/config-loader.d.ts +1 -0
- package/dist/utils/config-loader.d.ts.map +1 -1
- package/dist/utils/config-loader.js +1 -1
- package/dist/utils/config-loader.js.map +1 -1
- package/dist/utils/file-templates.js +1 -1
- package/dist/utils/file-templates.js.map +1 -1
- package/dist/utils/logger.d.ts +30 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +99 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/pdf-to-image.d.ts.map +1 -1
- package/dist/utils/pdf-to-image.js +1 -7
- package/dist/utils/pdf-to-image.js.map +1 -1
- package/dist/utils/sanitizer.d.ts.map +1 -1
- package/dist/utils/sanitizer.js +1 -0
- package/dist/utils/sanitizer.js.map +1 -1
- package/dist/utils/ui.d.ts +35 -0
- package/dist/utils/ui.d.ts.map +1 -0
- package/dist/utils/ui.js +125 -0
- package/dist/utils/ui.js.map +1 -0
- package/eslint.config.js +27 -0
- package/package.json +9 -1
package/dist/cli/stats.js
CHANGED
|
@@ -2,19 +2,20 @@ import { promises as fs } from 'fs';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { computeStats } from '../utils/stats.js';
|
|
4
4
|
import { formatBytes } from '../utils/fs-collect.js';
|
|
5
|
+
import * as ui from '../utils/ui.js';
|
|
5
6
|
export async function statsCommand(directory, options = {}) {
|
|
6
7
|
const stat = await fs.stat(directory);
|
|
7
8
|
if (!stat.isDirectory())
|
|
8
9
|
throw new Error(`${directory} is not a directory`);
|
|
9
10
|
const stats = await computeStats(directory, options.recursive ?? false);
|
|
10
11
|
if (stats.totalFiles === 0) {
|
|
11
|
-
|
|
12
|
+
ui.info('No files found.');
|
|
12
13
|
return;
|
|
13
14
|
}
|
|
14
15
|
const absDir = path.resolve(directory);
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
16
|
+
ui.info(`\nDirectory: ${absDir}`);
|
|
17
|
+
ui.info(`Total: ${stats.totalFiles} file(s) · ${formatBytes(stats.totalBytes)}\n`);
|
|
18
|
+
ui.info('By type:');
|
|
18
19
|
for (const t of stats.byType) {
|
|
19
20
|
const pct = stats.totalBytes > 0
|
|
20
21
|
? ` (${Math.round((t.bytes / stats.totalBytes) * 100)}%)`
|
|
@@ -25,7 +26,7 @@ export async function statsCommand(directory, options = {}) {
|
|
|
25
26
|
console.log(` ${extLabel} ${countLabel} ${sizeLabel}${pct}`);
|
|
26
27
|
}
|
|
27
28
|
if (stats.largest.length > 0) {
|
|
28
|
-
|
|
29
|
+
ui.info('\nLargest files:');
|
|
29
30
|
for (const f of stats.largest.slice(0, 5)) {
|
|
30
31
|
const name = path.relative(directory, f.path);
|
|
31
32
|
console.log(` ${name.padEnd(40)} ${formatBytes(f.bytes)}`);
|
package/dist/cli/stats.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/cli/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"stats.js","sourceRoot":"","sources":["../../src/cli/stats.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAErC,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,SAAiB,EACjB,UAAmC,EAAE;IAErC,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IACtC,IAAI,CAAC,IAAI,CAAC,WAAW,EAAE;QAAE,MAAM,IAAI,KAAK,CAAC,GAAG,SAAS,qBAAqB,CAAC,CAAC;IAE5E,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC;IAExE,IAAI,KAAK,CAAC,UAAU,KAAK,CAAC,EAAE,CAAC;QAC3B,EAAE,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAC;QAC3B,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IACvC,EAAE,CAAC,IAAI,CAAC,gBAAgB,MAAM,EAAE,CAAC,CAAC;IAClC,EAAE,CAAC,IAAI,CAAC,UAAU,KAAK,CAAC,UAAU,cAAc,WAAW,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;IAEnF,EAAE,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;IACpB,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;QAC7B,MAAM,GAAG,GAAG,KAAK,CAAC,UAAU,GAAG,CAAC;YAC9B,CAAC,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,GAAG,KAAK,CAAC,UAAU,CAAC,GAAG,GAAG,CAAC,IAAI;YACzD,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,QAAQ,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,UAAU,GAAG,GAAG,CAAC,CAAC,KAAK,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;QACpD,OAAO,CAAC,GAAG,CAAC,KAAK,QAAQ,IAAI,UAAU,IAAI,SAAS,GAAG,GAAG,EAAE,CAAC,CAAC;IAChE,CAAC;IAED,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,EAAE,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAC;QAC5B,KAAK,MAAM,CAAC,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;YAC1C,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;YAC9C,OAAO,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,IAAI,WAAW,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;QAC9D,CAAC;IACH,CAAC;AACH,CAAC"}
|
package/dist/cli/tree.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../src/cli/tree.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"tree.d.ts","sourceRoot":"","sources":["../../src/cli/tree.ts"],"names":[],"mappings":"AAKA,wBAAsB,WAAW,CAC/B,SAAS,EAAE,MAAM,EACjB,OAAO,GAAE;IAAE,KAAK,CAAC,EAAE,MAAM,CAAA;CAAO,GAC/B,OAAO,CAAC,IAAI,CAAC,CAOf"}
|
package/dist/cli/tree.js
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
import { promises as fs } from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { formatBytes } from '../utils/fs-collect.js';
|
|
4
|
+
import * as ui from '../utils/ui.js';
|
|
4
5
|
export async function treeCommand(directory, options = {}) {
|
|
5
6
|
const stat = await fs.stat(directory);
|
|
6
7
|
if (!stat.isDirectory())
|
|
7
8
|
throw new Error(`${directory} is not a directory`);
|
|
8
9
|
const maxDepth = options.depth ?? Infinity;
|
|
9
|
-
|
|
10
|
+
ui.info(`\n${path.resolve(directory)}`);
|
|
10
11
|
await printTree(directory, '', 0, maxDepth);
|
|
11
12
|
}
|
|
12
13
|
async function printTree(dir, prefix, depth, maxDepth) {
|
package/dist/cli/tree.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/cli/tree.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,wBAAwB,CAAC;
|
|
1
|
+
{"version":3,"file":"tree.js","sourceRoot":"","sources":["../../src/cli/tree.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/undo.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"undo.d.ts","sourceRoot":"","sources":["../../src/cli/undo.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"undo.d.ts","sourceRoot":"","sources":["../../src/cli/undo.ts"],"names":[],"mappings":"AAMA,wBAAsB,UAAU,CAC9B,SAAS,CAAC,EAAE,MAAM,EAClB,OAAO,GAAE;IAAE,IAAI,CAAC,EAAE,OAAO,CAAC;IAAC,GAAG,CAAC,EAAE,OAAO,CAAA;CAAO,GAC9C,OAAO,CAAC,IAAI,CAAC,CAyCf"}
|
package/dist/cli/undo.js
CHANGED
|
@@ -2,18 +2,19 @@ import { promises as fs } from 'fs';
|
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import inquirer from 'inquirer';
|
|
4
4
|
import { readHistory, appendHistory } from '../utils/history.js';
|
|
5
|
+
import * as ui from '../utils/ui.js';
|
|
5
6
|
export async function undoRename(sessionId, options = {}) {
|
|
6
7
|
if (options.list) {
|
|
7
8
|
const history = await readHistory();
|
|
8
9
|
const recent = history.slice(-10).reverse();
|
|
9
10
|
if (recent.length === 0) {
|
|
10
|
-
|
|
11
|
+
ui.info('No rename history found.');
|
|
11
12
|
return;
|
|
12
13
|
}
|
|
13
|
-
|
|
14
|
+
ui.info('Recent rename sessions:');
|
|
14
15
|
recent.forEach(entry => {
|
|
15
16
|
const label = entry.dryRun ? ' [dry-run]' : '';
|
|
16
|
-
|
|
17
|
+
ui.dim(` ${entry.id}${label} — ${entry.renames.length} file(s) in ${entry.directory}`);
|
|
17
18
|
});
|
|
18
19
|
return;
|
|
19
20
|
}
|
|
@@ -31,12 +32,12 @@ export async function undoRename(sessionId, options = {}) {
|
|
|
31
32
|
else {
|
|
32
33
|
entry = [...history].reverse().find(e => !e.dryRun);
|
|
33
34
|
if (!entry) {
|
|
34
|
-
|
|
35
|
+
ui.info('No undo-able rename sessions found.');
|
|
35
36
|
return;
|
|
36
37
|
}
|
|
37
38
|
}
|
|
38
39
|
if (entry.dryRun) {
|
|
39
|
-
|
|
40
|
+
ui.info(`Session ${entry.id} was a dry run — nothing to undo.`);
|
|
40
41
|
return;
|
|
41
42
|
}
|
|
42
43
|
await undoSession(entry);
|
|
@@ -49,12 +50,12 @@ async function undoSession(entry) {
|
|
|
49
50
|
try {
|
|
50
51
|
await fs.access(rename.newPath);
|
|
51
52
|
await fs.rename(rename.newPath, rename.originalPath);
|
|
52
|
-
|
|
53
|
+
ui.success(`Restored: ${path.basename(rename.newPath)} → ${path.basename(rename.originalPath)}`);
|
|
53
54
|
succeeded++;
|
|
54
55
|
}
|
|
55
56
|
catch (error) {
|
|
56
57
|
if (error.code === 'ENOENT') {
|
|
57
|
-
|
|
58
|
+
ui.warn(`Skipped: ${path.basename(rename.newPath)} not found`);
|
|
58
59
|
skipped++;
|
|
59
60
|
}
|
|
60
61
|
else {
|
|
@@ -69,14 +70,14 @@ async function undoSession(entry) {
|
|
|
69
70
|
dryRun: false,
|
|
70
71
|
renames: reversed.map(r => ({ originalPath: r.newPath, newPath: r.originalPath }))
|
|
71
72
|
});
|
|
72
|
-
|
|
73
|
+
ui.info(`\nUndo complete: ${succeeded} restored, ${skipped} skipped.`);
|
|
73
74
|
return { succeeded, skipped };
|
|
74
75
|
}
|
|
75
76
|
async function undoAll() {
|
|
76
77
|
const history = await readHistory();
|
|
77
78
|
const sessions = [...history].reverse().filter(e => !e.dryRun);
|
|
78
79
|
if (sessions.length === 0) {
|
|
79
|
-
|
|
80
|
+
ui.info('No undo-able rename sessions found.');
|
|
80
81
|
return;
|
|
81
82
|
}
|
|
82
83
|
if (sessions.length > 1) {
|
|
@@ -87,17 +88,17 @@ async function undoAll() {
|
|
|
87
88
|
default: false
|
|
88
89
|
}]);
|
|
89
90
|
if (!confirm) {
|
|
90
|
-
|
|
91
|
+
ui.info('Cancelled.');
|
|
91
92
|
return;
|
|
92
93
|
}
|
|
93
94
|
}
|
|
94
95
|
for (const session of sessions) {
|
|
95
|
-
|
|
96
|
+
ui.dim(`\nUndoing session: ${session.id}`);
|
|
96
97
|
try {
|
|
97
98
|
await undoSession(session);
|
|
98
99
|
}
|
|
99
100
|
catch (error) {
|
|
100
|
-
|
|
101
|
+
ui.error(`Failed to undo session ${session.id}: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
101
102
|
}
|
|
102
103
|
}
|
|
103
104
|
}
|
package/dist/cli/undo.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"undo.js","sourceRoot":"","sources":["../../src/cli/undo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,QAAQ,MAAM,UAAU,CAAC;AAChC,OAAO,EAAE,WAAW,EAAE,aAAa,EAAgB,MAAM,qBAAqB,CAAC;
|
|
1
|
+
{"version":3,"file":"undo.js","sourceRoot":"","sources":["../../src/cli/undo.ts"],"names":[],"mappings":"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"}
|
package/dist/cli/watch.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/cli/watch.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"watch.d.ts","sourceRoot":"","sources":["../../src/cli/watch.ts"],"names":[],"mappings":"AAWA,wBAAsB,cAAc,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,CAAC,CAkInF"}
|
package/dist/cli/watch.js
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
2
|
import { promises as fs } from 'fs';
|
|
3
3
|
import chokidar from 'chokidar';
|
|
4
|
+
import * as ui from '../utils/ui.js';
|
|
4
5
|
import { DocumentParserFactory } from '../parsers/factory.js';
|
|
5
6
|
import { AIServiceFactory } from '../services/ai-factory.js';
|
|
6
7
|
import { FileRenamer } from '../services/file-renamer.js';
|
|
@@ -70,11 +71,11 @@ export async function watchDirectory(directory, options) {
|
|
|
70
71
|
return !supportedExtensions.includes(ext);
|
|
71
72
|
}
|
|
72
73
|
});
|
|
73
|
-
|
|
74
|
+
ui.info(`Watching ${absDir} for new files…`);
|
|
74
75
|
// Handle new file events
|
|
75
76
|
watcher.on('add', async (filePath) => {
|
|
76
77
|
const fileName = path.basename(filePath);
|
|
77
|
-
|
|
78
|
+
ui.dim(`Detected: ${fileName}`);
|
|
78
79
|
try {
|
|
79
80
|
const fileStat = await fs.stat(filePath);
|
|
80
81
|
const extension = path.extname(fileName).toLowerCase();
|
|
@@ -97,7 +98,7 @@ export async function watchDirectory(directory, options) {
|
|
|
97
98
|
const result = results[0];
|
|
98
99
|
if (result?.success && result.newPath !== result.originalPath) {
|
|
99
100
|
const newName = path.basename(result.newPath);
|
|
100
|
-
|
|
101
|
+
ui.success(`${fileName} → ${newName}`);
|
|
101
102
|
await appendHistory({
|
|
102
103
|
id: new Date().toISOString(),
|
|
103
104
|
timestamp: new Date().toISOString(),
|
|
@@ -107,17 +108,17 @@ export async function watchDirectory(directory, options) {
|
|
|
107
108
|
});
|
|
108
109
|
}
|
|
109
110
|
else if (result?.success) {
|
|
110
|
-
|
|
111
|
+
ui.dim(`No rename needed for: ${fileName}`);
|
|
111
112
|
}
|
|
112
113
|
}
|
|
113
114
|
catch (error) {
|
|
114
|
-
|
|
115
|
+
ui.error(`Error processing ${fileName}: ${error instanceof Error ? error.message : 'Unknown error'}`);
|
|
115
116
|
}
|
|
116
117
|
});
|
|
117
118
|
// Keep the process alive until shutdown signal
|
|
118
119
|
await new Promise((resolve) => {
|
|
119
120
|
const shutdown = async () => {
|
|
120
|
-
|
|
121
|
+
ui.dim('\nStopping watcher…');
|
|
121
122
|
await watcher.close();
|
|
122
123
|
resolve();
|
|
123
124
|
};
|
package/dist/cli/watch.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/cli/watch.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AACpC,OAAO,QAAQ,MAAM,UAAU,CAAC;
|
|
1
|
+
{"version":3,"file":"watch.js","sourceRoot":"","sources":["../../src/cli/watch.ts"],"names":[],"mappings":"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"}
|
package/dist/errors.d.ts
ADDED
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
export interface NamewiseErrorOptions {
|
|
2
|
+
hint?: string;
|
|
3
|
+
details?: Record<string, unknown>;
|
|
4
|
+
cause?: unknown;
|
|
5
|
+
}
|
|
6
|
+
export declare class NamewiseError extends Error {
|
|
7
|
+
readonly hint?: string;
|
|
8
|
+
readonly details?: Record<string, unknown>;
|
|
9
|
+
constructor(message: string, opts?: NamewiseErrorOptions);
|
|
10
|
+
}
|
|
11
|
+
export declare class AuthError extends NamewiseError {
|
|
12
|
+
constructor(message: string, opts?: NamewiseErrorOptions);
|
|
13
|
+
}
|
|
14
|
+
export declare class NetworkError extends NamewiseError {
|
|
15
|
+
constructor(message: string, opts?: NamewiseErrorOptions);
|
|
16
|
+
}
|
|
17
|
+
export declare class RateLimitError extends NamewiseError {
|
|
18
|
+
constructor(message: string, opts?: NamewiseErrorOptions);
|
|
19
|
+
}
|
|
20
|
+
export declare class ParseError extends NamewiseError {
|
|
21
|
+
constructor(message: string, opts?: NamewiseErrorOptions);
|
|
22
|
+
}
|
|
23
|
+
export declare class FileSizeError extends NamewiseError {
|
|
24
|
+
constructor(message: string, opts?: NamewiseErrorOptions);
|
|
25
|
+
}
|
|
26
|
+
export declare class UnsupportedTypeError extends NamewiseError {
|
|
27
|
+
constructor(message: string, opts?: NamewiseErrorOptions);
|
|
28
|
+
}
|
|
29
|
+
export declare class ConfigError extends NamewiseError {
|
|
30
|
+
constructor(message: string, opts?: NamewiseErrorOptions);
|
|
31
|
+
}
|
|
32
|
+
export declare class VisionError extends NamewiseError {
|
|
33
|
+
constructor(message: string, opts?: NamewiseErrorOptions);
|
|
34
|
+
}
|
|
35
|
+
//# sourceMappingURL=errors.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,oBAAoB;IACnC,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,qBAAa,aAAc,SAAQ,KAAK;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAE/B,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,oBAAoB;CAMzD;AAED,qBAAa,SAAU,SAAQ,aAAa;gBAC9B,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,oBAAoB;CAMzD;AAED,qBAAa,YAAa,SAAQ,aAAa;gBACjC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,oBAAoB;CAMzD;AAED,qBAAa,cAAe,SAAQ,aAAa;gBACnC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,oBAAoB;CAMzD;AAED,qBAAa,UAAW,SAAQ,aAAa;gBAC/B,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,oBAAoB;CAMzD;AAED,qBAAa,aAAc,SAAQ,aAAa;gBAClC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,oBAAoB;CAMzD;AAED,qBAAa,oBAAqB,SAAQ,aAAa;gBACzC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,oBAAoB;CAMzD;AAED,qBAAa,WAAY,SAAQ,aAAa;gBAChC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,oBAAoB;CAMzD;AAED,qBAAa,WAAY,SAAQ,aAAa;gBAChC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,oBAAoB;CAMzD"}
|
package/dist/errors.js
ADDED
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
export class NamewiseError extends Error {
|
|
2
|
+
hint;
|
|
3
|
+
details;
|
|
4
|
+
constructor(message, opts) {
|
|
5
|
+
super(message, { cause: opts?.cause });
|
|
6
|
+
this.name = this.constructor.name;
|
|
7
|
+
this.hint = opts?.hint;
|
|
8
|
+
this.details = opts?.details;
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
export class AuthError extends NamewiseError {
|
|
12
|
+
constructor(message, opts) {
|
|
13
|
+
super(message, {
|
|
14
|
+
hint: 'Check your API key — ensure ANTHROPIC_API_KEY or OPENAI_API_KEY is set, or run: namewise config set apiKey YOUR_KEY',
|
|
15
|
+
...opts
|
|
16
|
+
});
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
export class NetworkError extends NamewiseError {
|
|
20
|
+
constructor(message, opts) {
|
|
21
|
+
super(message, {
|
|
22
|
+
hint: 'Check your internet connection or try --provider ollama for local processing',
|
|
23
|
+
...opts
|
|
24
|
+
});
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
export class RateLimitError extends NamewiseError {
|
|
28
|
+
constructor(message, opts) {
|
|
29
|
+
super(message, {
|
|
30
|
+
hint: 'You have hit the provider rate limit — wait a moment and try again, or reduce concurrency with --concurrency 1',
|
|
31
|
+
...opts
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
export class ParseError extends NamewiseError {
|
|
36
|
+
constructor(message, opts) {
|
|
37
|
+
super(message, {
|
|
38
|
+
hint: 'The file may be corrupt or in an unsupported format',
|
|
39
|
+
...opts
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
export class FileSizeError extends NamewiseError {
|
|
44
|
+
constructor(message, opts) {
|
|
45
|
+
super(message, {
|
|
46
|
+
hint: 'Use --max-size to increase the limit, e.g. --max-size 20',
|
|
47
|
+
...opts
|
|
48
|
+
});
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
export class UnsupportedTypeError extends NamewiseError {
|
|
52
|
+
constructor(message, opts) {
|
|
53
|
+
super(message, {
|
|
54
|
+
hint: 'Run namewise info <file> to see which file types are supported',
|
|
55
|
+
...opts
|
|
56
|
+
});
|
|
57
|
+
}
|
|
58
|
+
}
|
|
59
|
+
export class ConfigError extends NamewiseError {
|
|
60
|
+
constructor(message, opts) {
|
|
61
|
+
super(message, {
|
|
62
|
+
hint: 'Run namewise config list to see valid configuration keys and values',
|
|
63
|
+
...opts
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
export class VisionError extends NamewiseError {
|
|
68
|
+
constructor(message, opts) {
|
|
69
|
+
super(message, {
|
|
70
|
+
hint: 'Use --provider claude or --provider openai for vision support',
|
|
71
|
+
...opts
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"errors.js","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"AAMA,MAAM,OAAO,aAAc,SAAQ,KAAK;IAC7B,IAAI,CAAU;IACd,OAAO,CAA2B;IAE3C,YAAY,OAAe,EAAE,IAA2B;QACtD,KAAK,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QACvC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC;QAClC,IAAI,CAAC,IAAI,GAAG,IAAI,EAAE,IAAI,CAAC;QACvB,IAAI,CAAC,OAAO,GAAG,IAAI,EAAE,OAAO,CAAC;IAC/B,CAAC;CACF;AAED,MAAM,OAAO,SAAU,SAAQ,aAAa;IAC1C,YAAY,OAAe,EAAE,IAA2B;QACtD,KAAK,CAAC,OAAO,EAAE;YACb,IAAI,EAAE,qHAAqH;YAC3H,GAAG,IAAI;SACR,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,OAAO,YAAa,SAAQ,aAAa;IAC7C,YAAY,OAAe,EAAE,IAA2B;QACtD,KAAK,CAAC,OAAO,EAAE;YACb,IAAI,EAAE,8EAA8E;YACpF,GAAG,IAAI;SACR,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,OAAO,cAAe,SAAQ,aAAa;IAC/C,YAAY,OAAe,EAAE,IAA2B;QACtD,KAAK,CAAC,OAAO,EAAE;YACb,IAAI,EAAE,gHAAgH;YACtH,GAAG,IAAI;SACR,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,OAAO,UAAW,SAAQ,aAAa;IAC3C,YAAY,OAAe,EAAE,IAA2B;QACtD,KAAK,CAAC,OAAO,EAAE;YACb,IAAI,EAAE,qDAAqD;YAC3D,GAAG,IAAI;SACR,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,OAAO,aAAc,SAAQ,aAAa;IAC9C,YAAY,OAAe,EAAE,IAA2B;QACtD,KAAK,CAAC,OAAO,EAAE;YACb,IAAI,EAAE,0DAA0D;YAChE,GAAG,IAAI;SACR,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,OAAO,oBAAqB,SAAQ,aAAa;IACrD,YAAY,OAAe,EAAE,IAA2B;QACtD,KAAK,CAAC,OAAO,EAAE;YACb,IAAI,EAAE,gEAAgE;YACtE,GAAG,IAAI;SACR,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,aAAa;IAC5C,YAAY,OAAe,EAAE,IAA2B;QACtD,KAAK,CAAC,OAAO,EAAE;YACb,IAAI,EAAE,qEAAqE;YAC3E,GAAG,IAAI;SACR,CAAC,CAAC;IACL,CAAC;CACF;AAED,MAAM,OAAO,WAAY,SAAQ,aAAa;IAC5C,YAAY,OAAe,EAAE,IAA2B;QACtD,KAAK,CAAC,OAAO,EAAE;YACb,IAAI,EAAE,+DAA+D;YACrE,GAAG,IAAI;SACR,CAAC,CAAC;IACL,CAAC;CACF"}
|
package/dist/index.js
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
+
import { readFileSync } from 'fs';
|
|
2
3
|
import { program } from 'commander';
|
|
3
4
|
import { setupCommands } from './cli/commands.js';
|
|
5
|
+
const { version } = JSON.parse(readFileSync(new URL('../package.json', import.meta.url), 'utf-8'));
|
|
4
6
|
async function main() {
|
|
5
7
|
program
|
|
6
8
|
.name('namewise')
|
|
7
9
|
.description('🤖 AI-powered CLI tool that intelligently renames, organises, and cleans up files')
|
|
8
|
-
.version(
|
|
10
|
+
.version(version)
|
|
9
11
|
.addHelpText('after', `
|
|
10
12
|
|
|
11
13
|
📋 Supported File Types:
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,KAAK,UAAU,IAAI;IACjB,OAAO;SACJ,IAAI,CAAC,UAAU,CAAC;SAChB,WAAW,CAAC,mFAAmF,CAAC;SAChG,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CzB,CAAC,CAAC;IAED,aAAa,CAAC,OAAO,CAAC,CAAC;IAEvB,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAElD,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,CAC5B,YAAY,CAAC,IAAI,GAAG,CAAC,iBAAiB,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,OAAO,CAAC,CACnE,CAAC;AAEF,KAAK,UAAU,IAAI;IACjB,OAAO;SACJ,IAAI,CAAC,UAAU,CAAC;SAChB,WAAW,CAAC,mFAAmF,CAAC;SAChG,OAAO,CAAC,OAAO,CAAC;SAChB,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CA0CzB,CAAC,CAAC;IAED,aAAa,CAAC,OAAO,CAAC,CAAC;IAEvB,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,IAAI,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"excel-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/excel-parser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAoB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"excel-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/excel-parser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAoB,MAAM,mBAAmB,CAAC;AAGlF,qBAAa,WAAY,YAAW,cAAc;IAChD,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAK7B,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;CAyDpD"}
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import path from 'path';
|
|
2
2
|
import Excel from 'exceljs';
|
|
3
|
+
import { ParseError } from '../errors.js';
|
|
3
4
|
export class ExcelParser {
|
|
4
5
|
supports(filePath) {
|
|
5
6
|
const ext = path.extname(filePath).toLowerCase();
|
|
@@ -50,7 +51,10 @@ export class ExcelParser {
|
|
|
50
51
|
return { content, metadata };
|
|
51
52
|
}
|
|
52
53
|
catch (error) {
|
|
53
|
-
throw
|
|
54
|
+
// Re-throw if already typed — prevents double-wrapping by future nested calls
|
|
55
|
+
if (error instanceof ParseError)
|
|
56
|
+
throw error;
|
|
57
|
+
throw new ParseError(`Failed to parse Excel file: ${error instanceof Error ? error.message : 'Unknown error'}`, { cause: error });
|
|
54
58
|
}
|
|
55
59
|
}
|
|
56
60
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"excel-parser.js","sourceRoot":"","sources":["../../src/parsers/excel-parser.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,KAAK,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"excel-parser.js","sourceRoot":"","sources":["../../src/parsers/excel-parser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { DocumentParser, Config } from '../types/index.js';
|
|
2
2
|
export declare class DocumentParserFactory {
|
|
3
3
|
private parsers;
|
|
4
|
-
constructor(
|
|
4
|
+
constructor(_config?: Config);
|
|
5
5
|
getParser(filePath: string): DocumentParser | null;
|
|
6
6
|
getSupportedExtensions(): string[];
|
|
7
7
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/parsers/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAO3D,qBAAa,qBAAqB;IAChC,OAAO,CAAC,OAAO,CAAmB;gBAEtB,
|
|
1
|
+
{"version":3,"file":"factory.d.ts","sourceRoot":"","sources":["../../src/parsers/factory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,MAAM,mBAAmB,CAAC;AAO3D,qBAAa,qBAAqB;IAChC,OAAO,CAAC,OAAO,CAAmB;gBAEtB,OAAO,CAAC,EAAE,MAAM;IAU5B,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,GAAG,IAAI;IAIlD,sBAAsB,IAAI,MAAM,EAAE;CASnC"}
|
package/dist/parsers/factory.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/parsers/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,OAAO,qBAAqB;IACxB,OAAO,CAAmB;IAElC,YAAY,
|
|
1
|
+
{"version":3,"file":"factory.js","sourceRoot":"","sources":["../../src/parsers/factory.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAC5C,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAEhD,MAAM,OAAO,qBAAqB;IACxB,OAAO,CAAmB;IAElC,YAAY,OAAgB;QAC1B,IAAI,CAAC,OAAO,GAAG;YACb,IAAI,SAAS,EAAE;YACf,IAAI,UAAU,EAAE;YAChB,IAAI,WAAW,EAAE;YACjB,IAAI,UAAU,EAAE;YAChB,IAAI,WAAW,EAAE;SAClB,CAAC;IACJ,CAAC;IAED,SAAS,CAAC,QAAgB;QACxB,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,IAAI,IAAI,CAAC;IACxE,CAAC;IAED,sBAAsB;QACpB,MAAM,UAAU,GAAG;YACjB,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM;YAC/D,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO;SACnE,CAAC;QACF,OAAO,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAC7B,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAC3D,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pdf-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/pdf-parser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAoB,MAAM,mBAAmB,CAAC;
|
|
1
|
+
{"version":3,"file":"pdf-parser.d.ts","sourceRoot":"","sources":["../../src/parsers/pdf-parser.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,cAAc,EAAE,WAAW,EAAoB,MAAM,mBAAmB,CAAC;AAIlF,qBAAa,SAAU,YAAW,cAAc;;IAK9C,QAAQ,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO;IAI7B,KAAK,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA4DnD,OAAO,CAAC,SAAS;CAmBlB"}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import fs from 'fs';
|
|
2
2
|
import path from 'path';
|
|
3
3
|
import { PDFToImageConverter } from '../utils/pdf-to-image.js';
|
|
4
|
+
import { ParseError } from '../errors.js';
|
|
4
5
|
export class PDFParser {
|
|
5
6
|
constructor() {
|
|
6
7
|
// No constructor parameters needed anymore
|
|
@@ -10,30 +11,37 @@ export class PDFParser {
|
|
|
10
11
|
}
|
|
11
12
|
async parse(filePath) {
|
|
12
13
|
try {
|
|
13
|
-
// Dynamic import for pdf-extraction (default export)
|
|
14
14
|
const pdfExtraction = await import('pdf-extraction');
|
|
15
15
|
const extract = pdfExtraction.default;
|
|
16
16
|
const dataBuffer = fs.readFileSync(filePath);
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
//
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
17
|
+
// Suppress pdfjs noise (both stderr and console.warn) for the entire PDF
|
|
18
|
+
// pipeline — the "TT: undefined function" warning can come from either
|
|
19
|
+
// pdf-extraction (text path) or pdf-to-png-converter (scanned path).
|
|
20
|
+
const origStderrWrite = process.stderr.write?.bind(process.stderr);
|
|
21
|
+
const origConsoleWarn = console.warn;
|
|
22
|
+
process.stderr.write = () => true;
|
|
23
|
+
console.warn = () => { };
|
|
24
|
+
let data;
|
|
25
|
+
let content = '';
|
|
26
|
+
try {
|
|
27
|
+
data = await extract(dataBuffer, {});
|
|
28
|
+
content = data.text?.trim() || '';
|
|
29
|
+
if (PDFToImageConverter.isScannedPDF(content)) {
|
|
30
|
+
try {
|
|
31
|
+
const imageBase64 = await PDFToImageConverter.convertFirstPageToBase64(dataBuffer);
|
|
32
|
+
content = `[SCANNED_PDF_IMAGE]:${imageBase64}`;
|
|
33
|
+
}
|
|
34
|
+
catch {
|
|
35
|
+
// Conversion failed; continue with empty content — AI handles gracefully
|
|
36
|
+
}
|
|
32
37
|
}
|
|
33
38
|
}
|
|
34
|
-
|
|
39
|
+
finally {
|
|
40
|
+
if (origStderrWrite)
|
|
41
|
+
process.stderr.write = origStderrWrite;
|
|
42
|
+
console.warn = origConsoleWarn;
|
|
43
|
+
}
|
|
35
44
|
const metadata = {};
|
|
36
|
-
// Cast data to any to access potentially existing metadata properties
|
|
37
45
|
const pdfData = data;
|
|
38
46
|
if (pdfData.meta) {
|
|
39
47
|
if (pdfData.meta.info) {
|
|
@@ -41,26 +49,23 @@ export class PDFParser {
|
|
|
41
49
|
metadata.author = pdfData.meta.info.Author;
|
|
42
50
|
metadata.creator = pdfData.meta.info.Creator;
|
|
43
51
|
metadata.subject = pdfData.meta.info.Subject;
|
|
44
|
-
|
|
45
|
-
if (pdfData.meta.info.CreationDate) {
|
|
52
|
+
if (pdfData.meta.info.CreationDate)
|
|
46
53
|
metadata.creationDate = this.parseDate(pdfData.meta.info.CreationDate);
|
|
47
|
-
|
|
48
|
-
if (pdfData.meta.info.ModDate) {
|
|
54
|
+
if (pdfData.meta.info.ModDate)
|
|
49
55
|
metadata.modificationDate = this.parseDate(pdfData.meta.info.ModDate);
|
|
50
|
-
}
|
|
51
56
|
}
|
|
52
|
-
if (pdfData.numpages)
|
|
57
|
+
if (pdfData.numpages)
|
|
53
58
|
metadata.pages = pdfData.numpages;
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
// Estimate word count from text content
|
|
57
|
-
if (content) {
|
|
58
|
-
metadata.wordCount = content.split(/\s+/).filter(word => word.length > 0).length;
|
|
59
59
|
}
|
|
60
|
+
if (content)
|
|
61
|
+
metadata.wordCount = content.split(/\s+/).filter((w) => w.length > 0).length;
|
|
60
62
|
return { content, metadata };
|
|
61
63
|
}
|
|
62
64
|
catch (error) {
|
|
63
|
-
throw
|
|
65
|
+
// Re-throw if already typed — prevents double-wrapping by future nested calls
|
|
66
|
+
if (error instanceof ParseError)
|
|
67
|
+
throw error;
|
|
68
|
+
throw new ParseError(`Failed to parse PDF: ${error instanceof Error ? error.message : 'Unknown error'}`, { cause: error });
|
|
64
69
|
}
|
|
65
70
|
}
|
|
66
71
|
parseDate(dateStr) {
|