@opendataloader/pdf 1.1.1 → 1.1.3
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 +44 -45
- package/dist/cli.cjs +131 -163
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.js +131 -163
- package/dist/cli.js.map +1 -1
- package/dist/index.cjs +89 -53
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -1
- package/dist/index.d.ts +11 -1
- package/dist/index.js +88 -53
- package/dist/index.js.map +1 -1
- package/lib/opendataloader-pdf-cli.jar +0 -0
- package/package.json +4 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { spawn } from 'child_process';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nconst JAR_NAME = 'opendataloader-pdf-cli.jar';\n\nfunction
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { spawn } from 'child_process';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nconst JAR_NAME = 'opendataloader-pdf-cli.jar';\n\ninterface JarExecutionOptions {\n debug?: boolean;\n streamOutput?: boolean;\n}\n\nfunction executeJar(args: string[], executionOptions: JarExecutionOptions = {}): Promise<string> {\n const { debug = false, streamOutput = false } = executionOptions;\n\n return new Promise((resolve, reject) => {\n const jarPath = path.join(__dirname, '..', 'lib', JAR_NAME);\n\n if (!fs.existsSync(jarPath)) {\n return reject(\n new Error(`JAR file not found at ${jarPath}. Please run the build script first.`),\n );\n }\n\n const command = 'java';\n const commandArgs = ['-jar', jarPath, ...args];\n\n const javaProcess = spawn(command, commandArgs);\n\n let stdout = '';\n let stderr = '';\n\n javaProcess.stdout.on('data', (data) => {\n const chunk = data.toString();\n if (streamOutput) {\n process.stdout.write(chunk);\n }\n stdout += chunk;\n });\n\n javaProcess.stderr.on('data', (data) => {\n const chunk = data.toString();\n if (streamOutput) {\n process.stderr.write(chunk);\n }\n stderr += chunk;\n });\n\n javaProcess.on('close', (code) => {\n if (code === 0) {\n resolve(stdout);\n } else {\n const errorOutput = stderr || stdout;\n const error = new Error(\n `The opendataloader-pdf CLI exited with code ${code}.\\n\\n${errorOutput}`,\n );\n reject(error);\n }\n });\n\n javaProcess.on('error', (err: Error) => {\n if (err.message.includes('ENOENT')) {\n reject(\n new Error(\n \"'java' command not found. Please ensure Java is installed and in your system's PATH.\",\n ),\n );\n } else {\n reject(err);\n }\n });\n });\n}\n\nexport interface RunOptions {\n outputFolder?: string;\n password?: string;\n replaceInvalidChars?: string;\n generateMarkdown?: boolean;\n generateHtml?: boolean;\n generateAnnotatedPdf?: boolean;\n keepLineBreaks?: boolean;\n contentSafetyOff?: string;\n htmlInMarkdown?: boolean;\n addImageToMarkdown?: boolean;\n noJson?: boolean;\n debug?: boolean;\n}\n\nexport function run(inputPath: string, options: RunOptions = {}): Promise<string> {\n return new Promise((resolve, reject) => {\n if (!fs.existsSync(inputPath)) {\n return reject(new Error(`Input file or folder not found: ${inputPath}`));\n }\n\n const args: string[] = [];\n if (options.outputFolder) {\n args.push('--output-dir', options.outputFolder);\n }\n if (options.password) {\n args.push('--password', options.password);\n }\n if (options.replaceInvalidChars) {\n args.push('--replace-invalid-chars', options.replaceInvalidChars);\n }\n if (options.generateMarkdown) {\n args.push('--markdown');\n }\n if (options.generateHtml) {\n args.push('--html');\n }\n if (options.generateAnnotatedPdf) {\n args.push('--pdf');\n }\n if (options.keepLineBreaks) {\n args.push('--keep-line-breaks');\n }\n if (options.contentSafetyOff) {\n args.push('--content-safety-off', options.contentSafetyOff);\n }\n if (options.htmlInMarkdown) {\n args.push('--markdown-with-html');\n }\n if (options.addImageToMarkdown) {\n args.push('--markdown-with-images');\n }\n if (options.noJson) {\n args.push('--no-json');\n }\n\n args.push(inputPath);\n executeJar(args, {\n debug: options.debug,\n streamOutput: Boolean(options.debug),\n })\n .then(resolve)\n .catch(reject);\n });\n}\n\nexport interface ConvertOptions {\n outputDir?: string;\n password?: string;\n format?: string[];\n quiet?: boolean;\n contentSafetyOff?: string[];\n keepLineBreaks?: boolean;\n replaceInvalidChars?: string;\n}\n\nexport function convert(inputPaths: string[], options: ConvertOptions = {}): Promise<string> {\n if (inputPaths.length === 0) {\n return Promise.reject(new Error('At least one input path must be provided.'));\n }\n\n for (const input of inputPaths) {\n if (!fs.existsSync(input)) {\n return Promise.reject(new Error(`Input file or folder not found: ${input}`));\n }\n }\n\n const args: string[] = [...inputPaths];\n if (options.outputDir) {\n args.push('--output-dir', options.outputDir);\n }\n if (options.password) {\n args.push('--password', options.password);\n }\n if (options.format && options.format.length > 0) {\n args.push('--format', ...options.format);\n }\n if (options.quiet) {\n args.push('--quiet');\n }\n if (options.contentSafetyOff && options.contentSafetyOff.length > 0) {\n args.push('--content-safety-off', ...options.contentSafetyOff);\n }\n if (options.keepLineBreaks) {\n args.push('--keep-line-breaks');\n }\n if (options.replaceInvalidChars) {\n args.push('--replace-invalid-chars', options.replaceInvalidChars);\n }\n\n return executeJar(args, {\n streamOutput: !options.quiet,\n });\n}\n"],"mappings":"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","names":[]}
|
package/dist/index.d.cts
CHANGED
|
@@ -13,5 +13,15 @@ interface RunOptions {
|
|
|
13
13
|
debug?: boolean;
|
|
14
14
|
}
|
|
15
15
|
declare function run(inputPath: string, options?: RunOptions): Promise<string>;
|
|
16
|
+
interface ConvertOptions {
|
|
17
|
+
outputDir?: string;
|
|
18
|
+
password?: string;
|
|
19
|
+
format?: string[];
|
|
20
|
+
quiet?: boolean;
|
|
21
|
+
contentSafetyOff?: string[];
|
|
22
|
+
keepLineBreaks?: boolean;
|
|
23
|
+
replaceInvalidChars?: string;
|
|
24
|
+
}
|
|
25
|
+
declare function convert(inputPaths: string[], options?: ConvertOptions): Promise<string>;
|
|
16
26
|
|
|
17
|
-
export { type RunOptions, run };
|
|
27
|
+
export { type ConvertOptions, type RunOptions, convert, run };
|
package/dist/index.d.ts
CHANGED
|
@@ -13,5 +13,15 @@ interface RunOptions {
|
|
|
13
13
|
debug?: boolean;
|
|
14
14
|
}
|
|
15
15
|
declare function run(inputPath: string, options?: RunOptions): Promise<string>;
|
|
16
|
+
interface ConvertOptions {
|
|
17
|
+
outputDir?: string;
|
|
18
|
+
password?: string;
|
|
19
|
+
format?: string[];
|
|
20
|
+
quiet?: boolean;
|
|
21
|
+
contentSafetyOff?: string[];
|
|
22
|
+
keepLineBreaks?: boolean;
|
|
23
|
+
replaceInvalidChars?: string;
|
|
24
|
+
}
|
|
25
|
+
declare function convert(inputPaths: string[], options?: ConvertOptions): Promise<string>;
|
|
16
26
|
|
|
17
|
-
export { type RunOptions, run };
|
|
27
|
+
export { type ConvertOptions, type RunOptions, convert, run };
|
package/dist/index.js
CHANGED
|
@@ -6,54 +6,9 @@ import { fileURLToPath } from "url";
|
|
|
6
6
|
var __filename = fileURLToPath(import.meta.url);
|
|
7
7
|
var __dirname = path.dirname(__filename);
|
|
8
8
|
var JAR_NAME = "opendataloader-pdf-cli.jar";
|
|
9
|
-
function
|
|
10
|
-
const
|
|
11
|
-
const passwordIndex = commandArgsForLogging.indexOf("--password");
|
|
12
|
-
if (passwordIndex > -1 && passwordIndex + 1 < commandArgsForLogging.length) {
|
|
13
|
-
commandArgsForLogging[passwordIndex + 1] = "[REDACTED]";
|
|
14
|
-
}
|
|
15
|
-
return `${command} ${commandArgsForLogging.join(" ")}`;
|
|
16
|
-
}
|
|
17
|
-
function run(inputPath, options = {}) {
|
|
9
|
+
function executeJar(args, executionOptions = {}) {
|
|
10
|
+
const { debug = false, streamOutput = false } = executionOptions;
|
|
18
11
|
return new Promise((resolve, reject) => {
|
|
19
|
-
if (!fs.existsSync(inputPath)) {
|
|
20
|
-
return reject(new Error(`Input file or folder not found: ${inputPath}`));
|
|
21
|
-
}
|
|
22
|
-
const args = [];
|
|
23
|
-
if (options.outputFolder) {
|
|
24
|
-
args.push("--output-dir", options.outputFolder);
|
|
25
|
-
}
|
|
26
|
-
if (options.password) {
|
|
27
|
-
args.push("--password", options.password);
|
|
28
|
-
}
|
|
29
|
-
if (options.replaceInvalidChars) {
|
|
30
|
-
args.push("--replace-invalid-chars", options.replaceInvalidChars);
|
|
31
|
-
}
|
|
32
|
-
if (options.generateMarkdown) {
|
|
33
|
-
args.push("--markdown");
|
|
34
|
-
}
|
|
35
|
-
if (options.generateHtml) {
|
|
36
|
-
args.push("--html");
|
|
37
|
-
}
|
|
38
|
-
if (options.generateAnnotatedPdf) {
|
|
39
|
-
args.push("--pdf");
|
|
40
|
-
}
|
|
41
|
-
if (options.keepLineBreaks) {
|
|
42
|
-
args.push("--keep-line-breaks");
|
|
43
|
-
}
|
|
44
|
-
if (options.contentSafetyOff) {
|
|
45
|
-
args.push("--content-safety-off", options.contentSafetyOff);
|
|
46
|
-
}
|
|
47
|
-
if (options.htmlInMarkdown) {
|
|
48
|
-
args.push("--markdown-with-html");
|
|
49
|
-
}
|
|
50
|
-
if (options.addImageToMarkdown) {
|
|
51
|
-
args.push("--markdown-with-images");
|
|
52
|
-
}
|
|
53
|
-
if (options.noJson) {
|
|
54
|
-
args.push("--no-json");
|
|
55
|
-
}
|
|
56
|
-
args.push(inputPath);
|
|
57
12
|
const jarPath = path.join(__dirname, "..", "lib", JAR_NAME);
|
|
58
13
|
if (!fs.existsSync(jarPath)) {
|
|
59
14
|
return reject(
|
|
@@ -62,22 +17,19 @@ function run(inputPath, options = {}) {
|
|
|
62
17
|
}
|
|
63
18
|
const command = "java";
|
|
64
19
|
const commandArgs = ["-jar", jarPath, ...args];
|
|
65
|
-
if (options.debug) {
|
|
66
|
-
console.error(`Running command: ${getRedactedCommandString(command, commandArgs)}`);
|
|
67
|
-
}
|
|
68
20
|
const javaProcess = spawn(command, commandArgs);
|
|
69
21
|
let stdout = "";
|
|
70
22
|
let stderr = "";
|
|
71
23
|
javaProcess.stdout.on("data", (data) => {
|
|
72
24
|
const chunk = data.toString();
|
|
73
|
-
if (
|
|
25
|
+
if (streamOutput) {
|
|
74
26
|
process.stdout.write(chunk);
|
|
75
27
|
}
|
|
76
28
|
stdout += chunk;
|
|
77
29
|
});
|
|
78
30
|
javaProcess.stderr.on("data", (data) => {
|
|
79
31
|
const chunk = data.toString();
|
|
80
|
-
if (
|
|
32
|
+
if (streamOutput) {
|
|
81
33
|
process.stderr.write(chunk);
|
|
82
34
|
}
|
|
83
35
|
stderr += chunk;
|
|
@@ -86,10 +38,11 @@ function run(inputPath, options = {}) {
|
|
|
86
38
|
if (code === 0) {
|
|
87
39
|
resolve(stdout);
|
|
88
40
|
} else {
|
|
41
|
+
const errorOutput = stderr || stdout;
|
|
89
42
|
const error = new Error(
|
|
90
43
|
`The opendataloader-pdf CLI exited with code ${code}.
|
|
91
44
|
|
|
92
|
-
${
|
|
45
|
+
${errorOutput}`
|
|
93
46
|
);
|
|
94
47
|
reject(error);
|
|
95
48
|
}
|
|
@@ -107,7 +60,89 @@ ${stderr}`
|
|
|
107
60
|
});
|
|
108
61
|
});
|
|
109
62
|
}
|
|
63
|
+
function run(inputPath, options = {}) {
|
|
64
|
+
return new Promise((resolve, reject) => {
|
|
65
|
+
if (!fs.existsSync(inputPath)) {
|
|
66
|
+
return reject(new Error(`Input file or folder not found: ${inputPath}`));
|
|
67
|
+
}
|
|
68
|
+
const args = [];
|
|
69
|
+
if (options.outputFolder) {
|
|
70
|
+
args.push("--output-dir", options.outputFolder);
|
|
71
|
+
}
|
|
72
|
+
if (options.password) {
|
|
73
|
+
args.push("--password", options.password);
|
|
74
|
+
}
|
|
75
|
+
if (options.replaceInvalidChars) {
|
|
76
|
+
args.push("--replace-invalid-chars", options.replaceInvalidChars);
|
|
77
|
+
}
|
|
78
|
+
if (options.generateMarkdown) {
|
|
79
|
+
args.push("--markdown");
|
|
80
|
+
}
|
|
81
|
+
if (options.generateHtml) {
|
|
82
|
+
args.push("--html");
|
|
83
|
+
}
|
|
84
|
+
if (options.generateAnnotatedPdf) {
|
|
85
|
+
args.push("--pdf");
|
|
86
|
+
}
|
|
87
|
+
if (options.keepLineBreaks) {
|
|
88
|
+
args.push("--keep-line-breaks");
|
|
89
|
+
}
|
|
90
|
+
if (options.contentSafetyOff) {
|
|
91
|
+
args.push("--content-safety-off", options.contentSafetyOff);
|
|
92
|
+
}
|
|
93
|
+
if (options.htmlInMarkdown) {
|
|
94
|
+
args.push("--markdown-with-html");
|
|
95
|
+
}
|
|
96
|
+
if (options.addImageToMarkdown) {
|
|
97
|
+
args.push("--markdown-with-images");
|
|
98
|
+
}
|
|
99
|
+
if (options.noJson) {
|
|
100
|
+
args.push("--no-json");
|
|
101
|
+
}
|
|
102
|
+
args.push(inputPath);
|
|
103
|
+
executeJar(args, {
|
|
104
|
+
debug: options.debug,
|
|
105
|
+
streamOutput: Boolean(options.debug)
|
|
106
|
+
}).then(resolve).catch(reject);
|
|
107
|
+
});
|
|
108
|
+
}
|
|
109
|
+
function convert(inputPaths, options = {}) {
|
|
110
|
+
if (inputPaths.length === 0) {
|
|
111
|
+
return Promise.reject(new Error("At least one input path must be provided."));
|
|
112
|
+
}
|
|
113
|
+
for (const input of inputPaths) {
|
|
114
|
+
if (!fs.existsSync(input)) {
|
|
115
|
+
return Promise.reject(new Error(`Input file or folder not found: ${input}`));
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const args = [...inputPaths];
|
|
119
|
+
if (options.outputDir) {
|
|
120
|
+
args.push("--output-dir", options.outputDir);
|
|
121
|
+
}
|
|
122
|
+
if (options.password) {
|
|
123
|
+
args.push("--password", options.password);
|
|
124
|
+
}
|
|
125
|
+
if (options.format && options.format.length > 0) {
|
|
126
|
+
args.push("--format", ...options.format);
|
|
127
|
+
}
|
|
128
|
+
if (options.quiet) {
|
|
129
|
+
args.push("--quiet");
|
|
130
|
+
}
|
|
131
|
+
if (options.contentSafetyOff && options.contentSafetyOff.length > 0) {
|
|
132
|
+
args.push("--content-safety-off", ...options.contentSafetyOff);
|
|
133
|
+
}
|
|
134
|
+
if (options.keepLineBreaks) {
|
|
135
|
+
args.push("--keep-line-breaks");
|
|
136
|
+
}
|
|
137
|
+
if (options.replaceInvalidChars) {
|
|
138
|
+
args.push("--replace-invalid-chars", options.replaceInvalidChars);
|
|
139
|
+
}
|
|
140
|
+
return executeJar(args, {
|
|
141
|
+
streamOutput: !options.quiet
|
|
142
|
+
});
|
|
143
|
+
}
|
|
110
144
|
export {
|
|
145
|
+
convert,
|
|
111
146
|
run
|
|
112
147
|
};
|
|
113
148
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { spawn } from 'child_process';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nconst JAR_NAME = 'opendataloader-pdf-cli.jar';\n\nfunction
|
|
1
|
+
{"version":3,"sources":["../src/index.ts"],"sourcesContent":["import { spawn } from 'child_process';\nimport * as path from 'path';\nimport * as fs from 'fs';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = path.dirname(__filename);\n\nconst JAR_NAME = 'opendataloader-pdf-cli.jar';\n\ninterface JarExecutionOptions {\n debug?: boolean;\n streamOutput?: boolean;\n}\n\nfunction executeJar(args: string[], executionOptions: JarExecutionOptions = {}): Promise<string> {\n const { debug = false, streamOutput = false } = executionOptions;\n\n return new Promise((resolve, reject) => {\n const jarPath = path.join(__dirname, '..', 'lib', JAR_NAME);\n\n if (!fs.existsSync(jarPath)) {\n return reject(\n new Error(`JAR file not found at ${jarPath}. Please run the build script first.`),\n );\n }\n\n const command = 'java';\n const commandArgs = ['-jar', jarPath, ...args];\n\n const javaProcess = spawn(command, commandArgs);\n\n let stdout = '';\n let stderr = '';\n\n javaProcess.stdout.on('data', (data) => {\n const chunk = data.toString();\n if (streamOutput) {\n process.stdout.write(chunk);\n }\n stdout += chunk;\n });\n\n javaProcess.stderr.on('data', (data) => {\n const chunk = data.toString();\n if (streamOutput) {\n process.stderr.write(chunk);\n }\n stderr += chunk;\n });\n\n javaProcess.on('close', (code) => {\n if (code === 0) {\n resolve(stdout);\n } else {\n const errorOutput = stderr || stdout;\n const error = new Error(\n `The opendataloader-pdf CLI exited with code ${code}.\\n\\n${errorOutput}`,\n );\n reject(error);\n }\n });\n\n javaProcess.on('error', (err: Error) => {\n if (err.message.includes('ENOENT')) {\n reject(\n new Error(\n \"'java' command not found. Please ensure Java is installed and in your system's PATH.\",\n ),\n );\n } else {\n reject(err);\n }\n });\n });\n}\n\nexport interface RunOptions {\n outputFolder?: string;\n password?: string;\n replaceInvalidChars?: string;\n generateMarkdown?: boolean;\n generateHtml?: boolean;\n generateAnnotatedPdf?: boolean;\n keepLineBreaks?: boolean;\n contentSafetyOff?: string;\n htmlInMarkdown?: boolean;\n addImageToMarkdown?: boolean;\n noJson?: boolean;\n debug?: boolean;\n}\n\nexport function run(inputPath: string, options: RunOptions = {}): Promise<string> {\n return new Promise((resolve, reject) => {\n if (!fs.existsSync(inputPath)) {\n return reject(new Error(`Input file or folder not found: ${inputPath}`));\n }\n\n const args: string[] = [];\n if (options.outputFolder) {\n args.push('--output-dir', options.outputFolder);\n }\n if (options.password) {\n args.push('--password', options.password);\n }\n if (options.replaceInvalidChars) {\n args.push('--replace-invalid-chars', options.replaceInvalidChars);\n }\n if (options.generateMarkdown) {\n args.push('--markdown');\n }\n if (options.generateHtml) {\n args.push('--html');\n }\n if (options.generateAnnotatedPdf) {\n args.push('--pdf');\n }\n if (options.keepLineBreaks) {\n args.push('--keep-line-breaks');\n }\n if (options.contentSafetyOff) {\n args.push('--content-safety-off', options.contentSafetyOff);\n }\n if (options.htmlInMarkdown) {\n args.push('--markdown-with-html');\n }\n if (options.addImageToMarkdown) {\n args.push('--markdown-with-images');\n }\n if (options.noJson) {\n args.push('--no-json');\n }\n\n args.push(inputPath);\n executeJar(args, {\n debug: options.debug,\n streamOutput: Boolean(options.debug),\n })\n .then(resolve)\n .catch(reject);\n });\n}\n\nexport interface ConvertOptions {\n outputDir?: string;\n password?: string;\n format?: string[];\n quiet?: boolean;\n contentSafetyOff?: string[];\n keepLineBreaks?: boolean;\n replaceInvalidChars?: string;\n}\n\nexport function convert(inputPaths: string[], options: ConvertOptions = {}): Promise<string> {\n if (inputPaths.length === 0) {\n return Promise.reject(new Error('At least one input path must be provided.'));\n }\n\n for (const input of inputPaths) {\n if (!fs.existsSync(input)) {\n return Promise.reject(new Error(`Input file or folder not found: ${input}`));\n }\n }\n\n const args: string[] = [...inputPaths];\n if (options.outputDir) {\n args.push('--output-dir', options.outputDir);\n }\n if (options.password) {\n args.push('--password', options.password);\n }\n if (options.format && options.format.length > 0) {\n args.push('--format', ...options.format);\n }\n if (options.quiet) {\n args.push('--quiet');\n }\n if (options.contentSafetyOff && options.contentSafetyOff.length > 0) {\n args.push('--content-safety-off', ...options.contentSafetyOff);\n }\n if (options.keepLineBreaks) {\n args.push('--keep-line-breaks');\n }\n if (options.replaceInvalidChars) {\n args.push('--replace-invalid-chars', options.replaceInvalidChars);\n }\n\n return executeJar(args, {\n streamOutput: !options.quiet,\n });\n}\n"],"mappings":"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","names":[]}
|
|
Binary file
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@opendataloader/pdf",
|
|
3
|
-
"version": "1.1.
|
|
3
|
+
"version": "1.1.3",
|
|
4
4
|
"description": "A Node.js wrapper for the opendataloader-pdf Java CLI.",
|
|
5
5
|
"main": "./dist/index.cjs",
|
|
6
6
|
"module": "./dist/index.js",
|
|
@@ -40,6 +40,9 @@
|
|
|
40
40
|
"publishConfig": {
|
|
41
41
|
"access": "public"
|
|
42
42
|
},
|
|
43
|
+
"dependencies": {
|
|
44
|
+
"commander": "^14.0.1"
|
|
45
|
+
},
|
|
43
46
|
"devDependencies": {
|
|
44
47
|
"@types/glob": "^8.1.0",
|
|
45
48
|
"@types/node": "^24.3.3",
|