@codemarc/blt 1.3.4 → 1.4.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/dist/blt +2 -0
- package/dist/blt.d.ts.map +1 -1
- package/dist/blt.js.map +1 -1
- package/dist/commands/pdf/binder.d.ts +9 -0
- package/dist/commands/pdf/binder.d.ts.map +1 -0
- package/dist/commands/pdf/binder.js +151 -0
- package/dist/commands/pdf/binder.js.map +1 -0
- package/dist/commands/pdf/folio.d.ts +11 -0
- package/dist/commands/pdf/folio.d.ts.map +1 -0
- package/dist/commands/pdf/folio.js +255 -0
- package/dist/commands/pdf/folio.js.map +1 -0
- package/dist/commands/pdf.d.ts +3 -0
- package/dist/commands/pdf.d.ts.map +1 -0
- package/dist/commands/pdf.js +61 -0
- package/dist/commands/pdf.js.map +1 -0
- package/dist/commands/show/repo.js +6 -6
- package/dist/commands/show/repo.js.map +1 -1
- package/package.json +8 -7
package/dist/blt
CHANGED
|
@@ -4,6 +4,7 @@ import bucketCommand from "./commands/bucket";
|
|
|
4
4
|
import buildCommand from "./commands/build";
|
|
5
5
|
import deployCommand from "./commands/deploy";
|
|
6
6
|
import imageCommand from "./commands/image";
|
|
7
|
+
import pdfCommand from "./commands/pdf";
|
|
7
8
|
import versionCommand from "./commands/version";
|
|
8
9
|
import showCommand from "./commands/show";
|
|
9
10
|
import cleanupCommand from "./commands/cleanup";
|
|
@@ -21,6 +22,7 @@ program.name("blt")
|
|
|
21
22
|
.version(getPackageVersion())
|
|
22
23
|
.description("BLT Core Cli");
|
|
23
24
|
imageCommand(program);
|
|
25
|
+
pdfCommand(program);
|
|
24
26
|
versionCommand(program);
|
|
25
27
|
buildCommand(program);
|
|
26
28
|
deployCommand(program);
|
package/dist/blt.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blt.d.ts","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";
|
|
1
|
+
{"version":3,"file":"blt.d.ts","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AAmBA,wBAAgB,iBAAiB,IAAI,MAAM,CAG1C"}
|
package/dist/blt.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"blt.js","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAChD,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAG,IAAI,EAAE,cAAc,CAAC,CAAC;AAE/D,MAAM,UAAU,iBAAiB;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;KACjB,OAAO,CAAC,iBAAiB,EAAE,CAAC;KAC5B,WAAW,CAAC,cAAc,CAAC,CAAC;AAE5B,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,cAAc,CAAC,OAAO,CAAC,CAAC;AAE1B,uCAAuC;AACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IACtB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AACD,OAAO,CAAC,GAAG,EAAE,CAAC"}
|
|
1
|
+
{"version":3,"file":"blt.js","sourceRoot":"","sources":["../src/blt.ts"],"names":[],"mappings":";AACA,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,aAAa,MAAM,mBAAmB,CAAC;AAC9C,OAAO,YAAY,MAAM,kBAAkB,CAAC;AAC5C,OAAO,UAAU,MAAM,gBAAgB,CAAC;AACxC,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAChD,OAAO,WAAW,MAAM,iBAAiB,CAAC;AAC1C,OAAO,cAAc,MAAM,oBAAoB,CAAC;AAEhD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAC1C,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AACvC,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AACtC,MAAM,eAAe,GAAG,IAAI,CAAC,SAAS,EAAG,IAAI,EAAE,cAAc,CAAC,CAAC;AAE/D,MAAM,UAAU,iBAAiB;IAC/B,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;IACtE,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC;KACjB,OAAO,CAAC,iBAAiB,EAAE,CAAC;KAC5B,WAAW,CAAC,cAAc,CAAC,CAAC;AAE5B,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,UAAU,CAAC,OAAO,CAAC,CAAC;AACpB,cAAc,CAAC,OAAO,CAAC,CAAC;AACxB,YAAY,CAAC,OAAO,CAAC,CAAC;AACtB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,aAAa,CAAC,OAAO,CAAC,CAAC;AACvB,WAAW,CAAC,OAAO,CAAC,CAAC;AACrB,cAAc,CAAC,OAAO,CAAC,CAAC;AAE1B,uCAAuC;AACvC,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;AACnC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IACtB,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,CAAC;AACD,OAAO,CAAC,GAAG,EAAE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import type { Logger } from "@caporal/core";
|
|
2
|
+
export declare function pdfBinderCommand(args: {
|
|
3
|
+
output?: string;
|
|
4
|
+
inputs?: string[];
|
|
5
|
+
}, options: {
|
|
6
|
+
recursive?: boolean;
|
|
7
|
+
overwrite?: boolean;
|
|
8
|
+
}, logger: Logger): Promise<void>;
|
|
9
|
+
//# sourceMappingURL=binder.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binder.d.ts","sourceRoot":"","sources":["../../../src/commands/pdf/binder.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AA4E5C,wBAAsB,gBAAgB,CACpC,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,EAC5C,OAAO,EAAE;IACP,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB,EACD,MAAM,EAAE,MAAM,iBA6Ff"}
|
|
@@ -0,0 +1,151 @@
|
|
|
1
|
+
import debug from "debug";
|
|
2
|
+
import { readdirSync, statSync, existsSync } from "fs";
|
|
3
|
+
import { join, extname, basename } from "path";
|
|
4
|
+
const log = debug("blt:pdf:binder");
|
|
5
|
+
// Helper functions
|
|
6
|
+
function isPdfFile(filePath) {
|
|
7
|
+
const ext = extname(filePath).toLowerCase();
|
|
8
|
+
return ext === ".pdf";
|
|
9
|
+
}
|
|
10
|
+
function getPdfFiles(dirPath) {
|
|
11
|
+
const files = readdirSync(dirPath);
|
|
12
|
+
return files
|
|
13
|
+
.filter((file) => file !== '.DS_Store' && !file.startsWith('._'))
|
|
14
|
+
.map((file) => join(dirPath, file))
|
|
15
|
+
.filter((filePath) => {
|
|
16
|
+
try {
|
|
17
|
+
return statSync(filePath).isFile() && isPdfFile(filePath);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
})
|
|
23
|
+
.sort(); // Sort alphabetically
|
|
24
|
+
}
|
|
25
|
+
function getAllPdfFiles(dirPath, arrayOfFiles = []) {
|
|
26
|
+
const files = readdirSync(dirPath);
|
|
27
|
+
files.forEach((file) => {
|
|
28
|
+
// Skip .DS_Store and other hidden system files
|
|
29
|
+
if (file === '.DS_Store' || file.startsWith('._')) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const filePath = join(dirPath, file);
|
|
33
|
+
try {
|
|
34
|
+
if (statSync(filePath).isDirectory()) {
|
|
35
|
+
arrayOfFiles = getAllPdfFiles(filePath, arrayOfFiles);
|
|
36
|
+
}
|
|
37
|
+
else if (isPdfFile(filePath)) {
|
|
38
|
+
arrayOfFiles.push(filePath);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Skip files we can't access
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
return arrayOfFiles.sort(); // Sort alphabetically
|
|
46
|
+
}
|
|
47
|
+
function collectPdfFiles(inputs, recursive) {
|
|
48
|
+
const pdfFiles = [];
|
|
49
|
+
for (const input of inputs) {
|
|
50
|
+
try {
|
|
51
|
+
const stat = statSync(input);
|
|
52
|
+
if (stat.isDirectory()) {
|
|
53
|
+
const files = recursive ? getAllPdfFiles(input) : getPdfFiles(input);
|
|
54
|
+
pdfFiles.push(...files);
|
|
55
|
+
}
|
|
56
|
+
else if (stat.isFile() && isPdfFile(input)) {
|
|
57
|
+
pdfFiles.push(input);
|
|
58
|
+
}
|
|
59
|
+
else if (stat.isFile()) {
|
|
60
|
+
console.log(`⊘ Skipping non-PDF file: ${basename(input)}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
console.log(`⊘ Skipping invalid path: ${input}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return pdfFiles;
|
|
68
|
+
}
|
|
69
|
+
// Entry point for the PDF binder command
|
|
70
|
+
export async function pdfBinderCommand(args, options, logger) {
|
|
71
|
+
try {
|
|
72
|
+
// Caporal bundles all arguments when using variadic syntax
|
|
73
|
+
// Extract output (first) and inputs (rest) from the args
|
|
74
|
+
let outputPath;
|
|
75
|
+
let inputs;
|
|
76
|
+
if (Array.isArray(args.output)) {
|
|
77
|
+
// All arguments are in the output field as an array
|
|
78
|
+
[outputPath, ...inputs] = args.output;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
// Fallback to standard parsing
|
|
82
|
+
outputPath = args.output;
|
|
83
|
+
inputs = args.inputs || [];
|
|
84
|
+
}
|
|
85
|
+
const recursive = options.recursive;
|
|
86
|
+
const overwrite = options.overwrite;
|
|
87
|
+
log("Binding PDFs to: %s", outputPath);
|
|
88
|
+
// Check if inputs are provided
|
|
89
|
+
if (!inputs || inputs.length === 0) {
|
|
90
|
+
logger.error("At least one input file or directory is required");
|
|
91
|
+
process.exit(1);
|
|
92
|
+
}
|
|
93
|
+
// Check if output file already exists
|
|
94
|
+
if (!overwrite && existsSync(outputPath)) {
|
|
95
|
+
logger.error(`Output file already exists: ${outputPath}. Use --overwrite to replace it.`);
|
|
96
|
+
process.exit(1);
|
|
97
|
+
}
|
|
98
|
+
// Collect all PDF files from inputs
|
|
99
|
+
const pdfFiles = collectPdfFiles(inputs, recursive);
|
|
100
|
+
if (pdfFiles.length === 0) {
|
|
101
|
+
logger.error("No PDF files found in the specified inputs");
|
|
102
|
+
process.exit(1);
|
|
103
|
+
}
|
|
104
|
+
console.log(`Found ${pdfFiles.length} PDF file(s) to combine:\n`);
|
|
105
|
+
for (const file of pdfFiles) {
|
|
106
|
+
console.log(` • ${file}`);
|
|
107
|
+
}
|
|
108
|
+
console.log("");
|
|
109
|
+
// Import pdf-lib dynamically
|
|
110
|
+
let PDFDocument;
|
|
111
|
+
try {
|
|
112
|
+
const pdfLib = await import("pdf-lib");
|
|
113
|
+
PDFDocument = pdfLib.PDFDocument;
|
|
114
|
+
}
|
|
115
|
+
catch {
|
|
116
|
+
logger.error("pdf-lib library not found. Install with: bun add pdf-lib");
|
|
117
|
+
process.exit(1);
|
|
118
|
+
}
|
|
119
|
+
// Create a new PDF document
|
|
120
|
+
const mergedPdf = await PDFDocument.create();
|
|
121
|
+
let totalPages = 0;
|
|
122
|
+
// Process each PDF file
|
|
123
|
+
for (const filePath of pdfFiles) {
|
|
124
|
+
try {
|
|
125
|
+
const pdfBytes = await Bun.file(filePath).arrayBuffer();
|
|
126
|
+
const pdf = await PDFDocument.load(new Uint8Array(pdfBytes));
|
|
127
|
+
const pageCount = pdf.getPageCount();
|
|
128
|
+
const copiedPages = await mergedPdf.copyPages(pdf, Array.from({ length: pageCount }, (_, i) => i));
|
|
129
|
+
for (const page of copiedPages) {
|
|
130
|
+
mergedPdf.addPage(page);
|
|
131
|
+
}
|
|
132
|
+
totalPages += pageCount;
|
|
133
|
+
console.log(` ✓ Added ${basename(filePath)} (${pageCount} page${pageCount !== 1 ? 's' : ''})`);
|
|
134
|
+
}
|
|
135
|
+
catch (error) {
|
|
136
|
+
logger.error(` ✗ Failed to process ${basename(filePath)}: ${error.message}`);
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
// Save the merged PDF
|
|
140
|
+
const mergedPdfBytes = await mergedPdf.save();
|
|
141
|
+
await Bun.write(outputPath, mergedPdfBytes);
|
|
142
|
+
console.log("");
|
|
143
|
+
console.log(`✓ Successfully created ${outputPath}`);
|
|
144
|
+
console.log(` Total: ${totalPages} page${totalPages !== 1 ? 's' : ''} from ${pdfFiles.length} file${pdfFiles.length !== 1 ? 's' : ''}`);
|
|
145
|
+
}
|
|
146
|
+
catch (error) {
|
|
147
|
+
logger.error("Error:", error.message);
|
|
148
|
+
process.exit(1);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
//# sourceMappingURL=binder.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"binder.js","sourceRoot":"","sources":["../../../src/commands/pdf/binder.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import type { Logger } from "@caporal/core";
|
|
2
|
+
export declare function pdfFolioCommand(args: {
|
|
3
|
+
output?: string;
|
|
4
|
+
inputs?: string[];
|
|
5
|
+
}, options: {
|
|
6
|
+
recursive?: boolean;
|
|
7
|
+
overwrite?: boolean;
|
|
8
|
+
noToc?: boolean;
|
|
9
|
+
startPage?: number;
|
|
10
|
+
}, logger: Logger): Promise<void>;
|
|
11
|
+
//# sourceMappingURL=folio.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folio.d.ts","sourceRoot":"","sources":["../../../src/commands/pdf/folio.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,eAAe,CAAC;AA4E5C,wBAAsB,eAAe,CACnC,IAAI,EAAE;IAAE,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,EAC5C,OAAO,EAAE;IACP,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB,EACD,MAAM,EAAE,MAAM,iBAwNf"}
|
|
@@ -0,0 +1,255 @@
|
|
|
1
|
+
import debug from "debug";
|
|
2
|
+
import { readdirSync, statSync, existsSync } from "fs";
|
|
3
|
+
import { join, extname, basename } from "path";
|
|
4
|
+
const log = debug("blt:pdf:folio");
|
|
5
|
+
// Helper functions
|
|
6
|
+
function isPdfFile(filePath) {
|
|
7
|
+
const ext = extname(filePath).toLowerCase();
|
|
8
|
+
return ext === ".pdf";
|
|
9
|
+
}
|
|
10
|
+
function getPdfFiles(dirPath) {
|
|
11
|
+
const files = readdirSync(dirPath);
|
|
12
|
+
return files
|
|
13
|
+
.filter((file) => file !== '.DS_Store' && !file.startsWith('._'))
|
|
14
|
+
.map((file) => join(dirPath, file))
|
|
15
|
+
.filter((filePath) => {
|
|
16
|
+
try {
|
|
17
|
+
return statSync(filePath).isFile() && isPdfFile(filePath);
|
|
18
|
+
}
|
|
19
|
+
catch {
|
|
20
|
+
return false;
|
|
21
|
+
}
|
|
22
|
+
})
|
|
23
|
+
.sort(); // Sort alphabetically
|
|
24
|
+
}
|
|
25
|
+
function getAllPdfFiles(dirPath, arrayOfFiles = []) {
|
|
26
|
+
const files = readdirSync(dirPath);
|
|
27
|
+
files.forEach((file) => {
|
|
28
|
+
// Skip .DS_Store and other hidden system files
|
|
29
|
+
if (file === '.DS_Store' || file.startsWith('._')) {
|
|
30
|
+
return;
|
|
31
|
+
}
|
|
32
|
+
const filePath = join(dirPath, file);
|
|
33
|
+
try {
|
|
34
|
+
if (statSync(filePath).isDirectory()) {
|
|
35
|
+
arrayOfFiles = getAllPdfFiles(filePath, arrayOfFiles);
|
|
36
|
+
}
|
|
37
|
+
else if (isPdfFile(filePath)) {
|
|
38
|
+
arrayOfFiles.push(filePath);
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
// Skip files we can't access
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
return arrayOfFiles.sort(); // Sort alphabetically
|
|
46
|
+
}
|
|
47
|
+
function collectPdfFiles(inputs, recursive) {
|
|
48
|
+
const pdfFiles = [];
|
|
49
|
+
for (const input of inputs) {
|
|
50
|
+
try {
|
|
51
|
+
const stat = statSync(input);
|
|
52
|
+
if (stat.isDirectory()) {
|
|
53
|
+
const files = recursive ? getAllPdfFiles(input) : getPdfFiles(input);
|
|
54
|
+
pdfFiles.push(...files);
|
|
55
|
+
}
|
|
56
|
+
else if (stat.isFile() && isPdfFile(input)) {
|
|
57
|
+
pdfFiles.push(input);
|
|
58
|
+
}
|
|
59
|
+
else if (stat.isFile()) {
|
|
60
|
+
console.log(`⊘ Skipping non-PDF file: ${basename(input)}`);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
63
|
+
catch (error) {
|
|
64
|
+
console.log(`⊘ Skipping invalid path: ${input}`);
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
return pdfFiles;
|
|
68
|
+
}
|
|
69
|
+
// Entry point for the PDF folio command
|
|
70
|
+
export async function pdfFolioCommand(args, options, logger) {
|
|
71
|
+
try {
|
|
72
|
+
// Caporal bundles all arguments when using variadic syntax
|
|
73
|
+
// Extract output (first) and inputs (rest) from the args
|
|
74
|
+
let outputPath;
|
|
75
|
+
let inputs;
|
|
76
|
+
if (Array.isArray(args.output)) {
|
|
77
|
+
// All arguments are in the output field as an array
|
|
78
|
+
[outputPath, ...inputs] = args.output;
|
|
79
|
+
}
|
|
80
|
+
else {
|
|
81
|
+
// Fallback to standard parsing
|
|
82
|
+
outputPath = args.output;
|
|
83
|
+
inputs = args.inputs || [];
|
|
84
|
+
}
|
|
85
|
+
const recursive = options.recursive;
|
|
86
|
+
const overwrite = options.overwrite;
|
|
87
|
+
const noToc = options.noToc;
|
|
88
|
+
const startPage = options.startPage;
|
|
89
|
+
log("Creating folio PDF: %s", outputPath);
|
|
90
|
+
// Check if inputs are provided
|
|
91
|
+
if (!inputs || inputs.length === 0) {
|
|
92
|
+
logger.error("At least one input file or directory is required");
|
|
93
|
+
process.exit(1);
|
|
94
|
+
}
|
|
95
|
+
// Check if output file already exists
|
|
96
|
+
if (!overwrite && existsSync(outputPath)) {
|
|
97
|
+
logger.error(`Output file already exists: ${outputPath}. Use --overwrite to replace it.`);
|
|
98
|
+
process.exit(1);
|
|
99
|
+
}
|
|
100
|
+
// Collect all PDF files from inputs
|
|
101
|
+
const pdfFiles = collectPdfFiles(inputs, recursive);
|
|
102
|
+
if (pdfFiles.length === 0) {
|
|
103
|
+
logger.error("No PDF files found in the specified inputs");
|
|
104
|
+
process.exit(1);
|
|
105
|
+
}
|
|
106
|
+
console.log(`Found ${pdfFiles.length} PDF file(s) to combine:\n`);
|
|
107
|
+
for (const file of pdfFiles) {
|
|
108
|
+
console.log(` • ${file}`);
|
|
109
|
+
}
|
|
110
|
+
console.log("");
|
|
111
|
+
// Import pdf-lib dynamically
|
|
112
|
+
let PDFDocument;
|
|
113
|
+
let StandardFonts;
|
|
114
|
+
let rgb;
|
|
115
|
+
try {
|
|
116
|
+
const pdfLib = await import("pdf-lib");
|
|
117
|
+
PDFDocument = pdfLib.PDFDocument;
|
|
118
|
+
StandardFonts = pdfLib.StandardFonts;
|
|
119
|
+
rgb = pdfLib.rgb;
|
|
120
|
+
}
|
|
121
|
+
catch {
|
|
122
|
+
logger.error("pdf-lib library not found. Install with: bun add pdf-lib");
|
|
123
|
+
process.exit(1);
|
|
124
|
+
}
|
|
125
|
+
// Create a new PDF document
|
|
126
|
+
const mergedPdf = await PDFDocument.create();
|
|
127
|
+
const font = await mergedPdf.embedFont(StandardFonts.Helvetica);
|
|
128
|
+
const boldFont = await mergedPdf.embedFont(StandardFonts.HelveticaBold);
|
|
129
|
+
// Track TOC entries
|
|
130
|
+
const tocEntries = [];
|
|
131
|
+
let currentPageNumber = startPage;
|
|
132
|
+
// Process each PDF file
|
|
133
|
+
for (const filePath of pdfFiles) {
|
|
134
|
+
try {
|
|
135
|
+
const pdfBytes = await Bun.file(filePath).arrayBuffer();
|
|
136
|
+
const pdf = await PDFDocument.load(new Uint8Array(pdfBytes));
|
|
137
|
+
const pageCount = pdf.getPageCount();
|
|
138
|
+
const startPageForFile = currentPageNumber;
|
|
139
|
+
const copiedPages = await mergedPdf.copyPages(pdf, Array.from({ length: pageCount }, (_, i) => i));
|
|
140
|
+
// Add pages and page numbers
|
|
141
|
+
for (const page of copiedPages) {
|
|
142
|
+
const addedPage = mergedPdf.addPage(page);
|
|
143
|
+
// Add page number at the bottom center
|
|
144
|
+
const { width, height } = addedPage.getSize();
|
|
145
|
+
addedPage.drawText(`${currentPageNumber}`, {
|
|
146
|
+
x: width / 2 - 10,
|
|
147
|
+
y: 20,
|
|
148
|
+
size: 10,
|
|
149
|
+
color: rgb(0.5, 0.5, 0.5),
|
|
150
|
+
});
|
|
151
|
+
currentPageNumber++;
|
|
152
|
+
}
|
|
153
|
+
// Add to TOC
|
|
154
|
+
tocEntries.push({
|
|
155
|
+
title: basename(filePath, '.pdf'),
|
|
156
|
+
page: startPageForFile,
|
|
157
|
+
pageCount: pageCount,
|
|
158
|
+
});
|
|
159
|
+
console.log(` ✓ Added ${basename(filePath)} (${pageCount} page${pageCount !== 1 ? 's' : ''}, starting at page ${startPageForFile})`);
|
|
160
|
+
}
|
|
161
|
+
catch (error) {
|
|
162
|
+
logger.error(` ✗ Failed to process ${basename(filePath)}: ${error.message}`);
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
// Add TOC at the beginning if requested
|
|
166
|
+
if (!noToc && tocEntries.length > 0) {
|
|
167
|
+
console.log("");
|
|
168
|
+
console.log("Adding table of contents...");
|
|
169
|
+
// Calculate how many TOC pages we need (roughly 40 entries per page)
|
|
170
|
+
const entriesPerPage = 40;
|
|
171
|
+
const tocPageCount = Math.ceil(tocEntries.length / entriesPerPage);
|
|
172
|
+
for (let tocPageIndex = 0; tocPageIndex < tocPageCount; tocPageIndex++) {
|
|
173
|
+
const tocPage = mergedPdf.addPage([612, 792]); // US Letter size
|
|
174
|
+
const startIndex = tocPageIndex * entriesPerPage;
|
|
175
|
+
const endIndex = Math.min(startIndex + entriesPerPage, tocEntries.length);
|
|
176
|
+
let yPosition = 750;
|
|
177
|
+
// Title on first page only
|
|
178
|
+
if (tocPageIndex === 0) {
|
|
179
|
+
tocPage.drawText('Table of Contents', {
|
|
180
|
+
x: 50,
|
|
181
|
+
y: yPosition,
|
|
182
|
+
size: 18,
|
|
183
|
+
color: rgb(0, 0, 0),
|
|
184
|
+
});
|
|
185
|
+
yPosition -= 40;
|
|
186
|
+
}
|
|
187
|
+
// Add entries for this page
|
|
188
|
+
for (let i = startIndex; i < endIndex; i++) {
|
|
189
|
+
const entry = tocEntries[i];
|
|
190
|
+
const entryText = `${entry.title}`;
|
|
191
|
+
const pageText = `${entry.page}`;
|
|
192
|
+
tocPage.drawText(entryText, {
|
|
193
|
+
x: 50,
|
|
194
|
+
y: yPosition,
|
|
195
|
+
size: 11,
|
|
196
|
+
color: rgb(0, 0, 0),
|
|
197
|
+
});
|
|
198
|
+
tocPage.drawText(pageText, {
|
|
199
|
+
x: 550,
|
|
200
|
+
y: yPosition,
|
|
201
|
+
size: 11,
|
|
202
|
+
color: rgb(0, 0, 0),
|
|
203
|
+
});
|
|
204
|
+
yPosition -= 18;
|
|
205
|
+
}
|
|
206
|
+
// Add page number to TOC page
|
|
207
|
+
tocPage.drawText(`${tocPageIndex + 1}`, {
|
|
208
|
+
x: 300,
|
|
209
|
+
y: 20,
|
|
210
|
+
size: 10,
|
|
211
|
+
color: rgb(0.5, 0.5, 0.5),
|
|
212
|
+
});
|
|
213
|
+
}
|
|
214
|
+
// Move TOC pages to the beginning
|
|
215
|
+
const allPages = mergedPdf.getPages();
|
|
216
|
+
const contentPages = allPages.slice(0, -tocPageCount);
|
|
217
|
+
const tocPages = allPages.slice(-tocPageCount);
|
|
218
|
+
// This is a workaround since pdf-lib doesn't have a reorder method
|
|
219
|
+
// We'll need to create a new document with pages in the right order
|
|
220
|
+
const finalPdf = await PDFDocument.create();
|
|
221
|
+
const finalFont = await finalPdf.embedFont(StandardFonts.Helvetica);
|
|
222
|
+
// Copy TOC pages first
|
|
223
|
+
for (const tocPage of tocPages) {
|
|
224
|
+
const copiedPages = await finalPdf.copyPages(mergedPdf, [allPages.indexOf(tocPage)]);
|
|
225
|
+
finalPdf.addPage(copiedPages[0]);
|
|
226
|
+
}
|
|
227
|
+
// Then copy content pages
|
|
228
|
+
for (const contentPage of contentPages) {
|
|
229
|
+
const copiedPages = await finalPdf.copyPages(mergedPdf, [allPages.indexOf(contentPage)]);
|
|
230
|
+
finalPdf.addPage(copiedPages[0]);
|
|
231
|
+
}
|
|
232
|
+
// Save the final PDF
|
|
233
|
+
const finalPdfBytes = await finalPdf.save();
|
|
234
|
+
await Bun.write(outputPath, finalPdfBytes);
|
|
235
|
+
console.log(` ✓ Added ${tocPageCount} table of contents page${tocPageCount !== 1 ? 's' : ''}`);
|
|
236
|
+
}
|
|
237
|
+
else {
|
|
238
|
+
// Save without TOC
|
|
239
|
+
const mergedPdfBytes = await mergedPdf.save();
|
|
240
|
+
await Bun.write(outputPath, mergedPdfBytes);
|
|
241
|
+
}
|
|
242
|
+
const totalPages = currentPageNumber - startPage;
|
|
243
|
+
console.log("");
|
|
244
|
+
console.log(`✓ Successfully created ${outputPath}`);
|
|
245
|
+
console.log(` Total: ${totalPages} page${totalPages !== 1 ? 's' : ''} from ${pdfFiles.length} file${pdfFiles.length !== 1 ? 's' : ''}`);
|
|
246
|
+
if (!noToc) {
|
|
247
|
+
console.log(` TOC: Table of contents included`);
|
|
248
|
+
}
|
|
249
|
+
}
|
|
250
|
+
catch (error) {
|
|
251
|
+
logger.error("Error:", error.message);
|
|
252
|
+
process.exit(1);
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
//# sourceMappingURL=folio.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"folio.js","sourceRoot":"","sources":["../../../src/commands/pdf/folio.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf.d.ts","sourceRoot":"","sources":["../../src/commands/pdf.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,OAAO,EAAE,OAAO,QA4DlD"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { pdfBinderCommand } from "./pdf/binder";
|
|
2
|
+
import { pdfFolioCommand } from "./pdf/folio";
|
|
3
|
+
export default function pdfCommand(program) {
|
|
4
|
+
// Main PDF command - shows help when no operation is specified
|
|
5
|
+
const pdfHelpText = `
|
|
6
|
+
PDF manipulation utilities
|
|
7
|
+
|
|
8
|
+
Usage:
|
|
9
|
+
blt pdf <operation>
|
|
10
|
+
|
|
11
|
+
Available operations:
|
|
12
|
+
binder Combine multiple PDFs into a single file
|
|
13
|
+
folio Create a folio with page numbers and table of contents
|
|
14
|
+
|
|
15
|
+
Run 'blt pdf <operation> --help' for more information on a specific command.
|
|
16
|
+
`;
|
|
17
|
+
program
|
|
18
|
+
.command("pdf", "PDF manipulation")
|
|
19
|
+
.help(pdfHelpText)
|
|
20
|
+
.action(() => {
|
|
21
|
+
console.log(pdfHelpText);
|
|
22
|
+
});
|
|
23
|
+
// Binder - combine PDFs
|
|
24
|
+
program
|
|
25
|
+
.command("pdf binder", "Combine multiple PDFs into a single file")
|
|
26
|
+
.hide()
|
|
27
|
+
.argument("<output>", "Output PDF filename")
|
|
28
|
+
.argument("[inputs...]", "Input files or directories (can be mixed)")
|
|
29
|
+
.option("-r, --recursive", "Process directories recursively", {
|
|
30
|
+
default: false,
|
|
31
|
+
})
|
|
32
|
+
.option("--overwrite", "Overwrite existing output file", {
|
|
33
|
+
default: false,
|
|
34
|
+
})
|
|
35
|
+
.action(async ({ args, options, logger }) => {
|
|
36
|
+
await pdfBinderCommand(args, options, logger);
|
|
37
|
+
});
|
|
38
|
+
// Folio - create folio with page numbers and TOC
|
|
39
|
+
program
|
|
40
|
+
.command("pdf folio", "Create a folio with page numbers and table of contents")
|
|
41
|
+
.hide()
|
|
42
|
+
.argument("<output>", "Output PDF filename")
|
|
43
|
+
.argument("[inputs...]", "Input files or directories (can be mixed)")
|
|
44
|
+
.option("-r, --recursive", "Process directories recursively", {
|
|
45
|
+
default: false,
|
|
46
|
+
})
|
|
47
|
+
.option("--overwrite", "Overwrite existing output file", {
|
|
48
|
+
default: false,
|
|
49
|
+
})
|
|
50
|
+
.option("--no-toc", "Skip table of contents generation", {
|
|
51
|
+
default: false,
|
|
52
|
+
})
|
|
53
|
+
.option("--start-page <number>", "Starting page number", {
|
|
54
|
+
default: 1,
|
|
55
|
+
validator: program.NUMBER,
|
|
56
|
+
})
|
|
57
|
+
.action(async ({ args, options, logger }) => {
|
|
58
|
+
await pdfFolioCommand(args, options, logger);
|
|
59
|
+
});
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=pdf.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pdf.js","sourceRoot":"","sources":["../../src/commands/pdf.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,gBAAgB,EAAE,MAAM,cAAc,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,MAAM,CAAC,OAAO,UAAU,UAAU,CAAC,OAAgB;IAClD,+DAA+D;IAC/D,MAAM,WAAW,GAAG;;;;;;;;;;;CAWpB,CAAC;IAED,OAAO;SACL,OAAO,CAAC,KAAK,EAAE,kBAAkB,CAAC;SAClC,IAAI,CAAC,WAAW,CAAC;SACjB,MAAM,CAAC,GAAG,EAAE;QACZ,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC1B,CAAC,CAAC,CAAC;IAEJ,wBAAwB;IACxB,OAAO;SACL,OAAO,CAAC,YAAY,EAAE,0CAA0C,CAAC;SACjE,IAAI,EAAE;SACN,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;SAC3C,QAAQ,CAAC,aAAa,EAAE,2CAA2C,CAAC;SACpE,MAAM,CAAC,iBAAiB,EAAE,iCAAiC,EAAE;QAC7D,OAAO,EAAE,KAAK;KACd,CAAC;SACD,MAAM,CAAC,aAAa,EAAE,gCAAgC,EAAE;QACxD,OAAO,EAAE,KAAK;KACd,CAAC;SACD,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QAC3C,MAAM,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC/C,CAAC,CAAC,CAAC;IAEJ,iDAAiD;IACjD,OAAO;SACL,OAAO,CAAC,WAAW,EAAE,wDAAwD,CAAC;SAC9E,IAAI,EAAE;SACN,QAAQ,CAAC,UAAU,EAAE,qBAAqB,CAAC;SAC3C,QAAQ,CAAC,aAAa,EAAE,2CAA2C,CAAC;SACpE,MAAM,CAAC,iBAAiB,EAAE,iCAAiC,EAAE;QAC7D,OAAO,EAAE,KAAK;KACd,CAAC;SACD,MAAM,CAAC,aAAa,EAAE,gCAAgC,EAAE;QACxD,OAAO,EAAE,KAAK;KACd,CAAC;SACD,MAAM,CAAC,UAAU,EAAE,mCAAmC,EAAE;QACxD,OAAO,EAAE,KAAK;KACd,CAAC;SACD,MAAM,CAAC,uBAAuB,EAAE,sBAAsB,EAAE;QACxD,OAAO,EAAE,CAAC;QACV,SAAS,EAAE,OAAO,CAAC,MAAM;KACzB,CAAC;SACD,MAAM,CAAC,KAAK,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,EAAE,EAAE;QAC3C,MAAM,eAAe,CAAC,IAAI,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -26,18 +26,18 @@ const REPOSITORIES = [
|
|
|
26
26
|
sshUrl: "git@github.com:bltcore-com/blt-device-gateway.git",
|
|
27
27
|
description: "device gateway",
|
|
28
28
|
},
|
|
29
|
-
{
|
|
30
|
-
name: "devops",
|
|
31
|
-
url: "https://github.com/bltcore-com/blt-core-devops.git",
|
|
32
|
-
sshUrl: "git@github.com:bltcore-com/blt-core-devops.git",
|
|
33
|
-
description: "devops scripts",
|
|
34
|
-
},
|
|
35
29
|
{
|
|
36
30
|
name: "deploy",
|
|
37
31
|
url: "https://github.com/bltcore-com/deploy.git",
|
|
38
32
|
sshUrl: "git@github.com:bltcore-com/deploy.git",
|
|
39
33
|
description: "deployment scripts",
|
|
40
34
|
},
|
|
35
|
+
{
|
|
36
|
+
name: "customers",
|
|
37
|
+
url: "https://github.com/bltcore-com/customers.git",
|
|
38
|
+
sshUrl: "git@github.com:bltcore-com/customers.git",
|
|
39
|
+
description: "customer repository",
|
|
40
|
+
},
|
|
41
41
|
];
|
|
42
42
|
/**
|
|
43
43
|
* Render a table row for ASCII table display
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"repo.js","sourceRoot":"","sources":["../../../src/commands/show/repo.ts"],"names":[],"mappings":"AASA;;GAEG;AACH,MAAM,YAAY,GAAiB;IACjC;QACE,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,yCAAyC;QAC9C,MAAM,EAAE,qCAAqC;QAC7C,WAAW,EAAE,4BAA4B;KAC1C;IAED;QACE,IAAI,EAAE,KAAK;QACX,GAAG,EAAE,iDAAiD;QACtD,MAAM,EAAE,6CAA6C;QACrD,WAAW,EAAE,sBAAsB;KACpC;IAED;QACE,IAAI,EAAE,MAAM;QACZ,GAAG,EAAE,kDAAkD;QACvD,MAAM,EAAE,8CAA8C;QACtD,WAAW,EAAE,2BAA2B;KACzC;IAED;QACE,IAAI,EAAE,SAAS;QACf,GAAG,EAAE,uDAAuD;QAC5D,MAAM,EAAE,mDAAmD;QAC3D,WAAW,EAAE,gBAAgB;KAC9B;IACD;QACE,IAAI,EAAE,QAAQ;QACd,GAAG,EAAE,
|
|
1
|
+
{"version":3,"file":"repo.js","sourceRoot":"","sources":["../../../src/commands/show/repo.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@codemarc/blt",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "blt cli",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/blt",
|
|
@@ -44,21 +44,22 @@
|
|
|
44
44
|
},
|
|
45
45
|
"dependencies": {
|
|
46
46
|
"@caporal/core": "^2.0.7",
|
|
47
|
-
"@supabase/supabase-js": "^2.
|
|
47
|
+
"@supabase/supabase-js": "^2.93.1",
|
|
48
48
|
"build-number-generator": "^3.0.0",
|
|
49
49
|
"debug": "^4.4.3",
|
|
50
50
|
"dotenv": "^17.2.3",
|
|
51
51
|
"file-type": "^17.1.6",
|
|
52
52
|
"js-yaml": "^4.1.1",
|
|
53
|
-
"
|
|
53
|
+
"pdf-lib": "^1.17.1",
|
|
54
|
+
"pg": "^8.17.2"
|
|
54
55
|
},
|
|
55
56
|
"devDependencies": {
|
|
56
57
|
"@types/debug": "^4.1.12",
|
|
57
58
|
"@types/js-yaml": "^4.0.9",
|
|
58
|
-
"@types/node": "^20.
|
|
59
|
-
"@types/pg": "^8.
|
|
60
|
-
"bun-types": "^1.
|
|
61
|
-
"typescript": "^5.
|
|
59
|
+
"@types/node": "^20.19.30",
|
|
60
|
+
"@types/pg": "^8.16.0",
|
|
61
|
+
"bun-types": "^1.3.7",
|
|
62
|
+
"typescript": "^5.9.3"
|
|
62
63
|
},
|
|
63
64
|
"optionalDependencies": {
|
|
64
65
|
"sharp": "^0.34.5"
|