@veztraa/report-cli 0.1.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/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,143 @@
1
+ #!/usr/bin/env node
2
+ import { readFileSync, writeFileSync, existsSync } from "fs";
3
+ import { resolve } from "path";
4
+ import { render } from "@veztraa/report-renderer";
5
+ import { TemplateSchema } from "@veztraa/report-core";
6
+ /* ── Minimal spinner (replaces ora) ──────────────────────────────────────── */
7
+ const SPIN_FRAMES = ["⠋", "⠙", "⠹", "⠸", "⠼", "⠴", "⠦", "⠧", "⠇", "⠏"];
8
+ function spinner(initial) {
9
+ let frame = 0;
10
+ const timer = setInterval(() => {
11
+ process.stdout.write(`\r${SPIN_FRAMES[frame++ % SPIN_FRAMES.length]} ${initial}`);
12
+ }, 80);
13
+ process.stdout.write("\x1b[?25l"); // hide cursor
14
+ return {
15
+ succeed(msg) {
16
+ clearInterval(timer);
17
+ process.stdout.write(`\r\x1b[32m✓\x1b[0m ${msg}\n\x1b[?25h`);
18
+ },
19
+ fail(msg) {
20
+ clearInterval(timer);
21
+ process.stdout.write(`\r\x1b[31m✗\x1b[0m ${msg}\n\x1b[?25h`);
22
+ },
23
+ };
24
+ }
25
+ /* ── Minimal arg parser (replaces commander) ─────────────────────────────── */
26
+ function parseArgs(argv) {
27
+ const opts = {};
28
+ const positional = [];
29
+ for (let i = 0; i < argv.length; i++) {
30
+ if (argv[i].startsWith("--")) {
31
+ const key = argv[i].slice(2);
32
+ const next = argv[i + 1];
33
+ if (next && !next.startsWith("--")) {
34
+ opts[key] = next;
35
+ i++;
36
+ }
37
+ else
38
+ opts[key] = true;
39
+ }
40
+ else {
41
+ positional.push(argv[i]);
42
+ }
43
+ }
44
+ return { opts, positional };
45
+ }
46
+ const [, , command, ...rest] = process.argv;
47
+ const { opts, positional } = parseArgs(rest);
48
+ function printHelp() {
49
+ console.log(`
50
+ report-designer v0.1.0 — Advanced PDF report generator
51
+
52
+ USAGE
53
+ report-designer render <template> [data] [options]
54
+ report-designer validate <template>
55
+
56
+ COMMANDS
57
+ render Render a report template to PDF
58
+ validate Validate a report template JSON file
59
+
60
+ OPTIONS (render)
61
+ --output <path> Output PDF file path (default: output.pdf)
62
+ --watch Watch for changes and re-render
63
+ `);
64
+ }
65
+ /* ── render command ──────────────────────────────────────────────────────── */
66
+ if (command === "render") {
67
+ const [templatePath, dataPath] = positional;
68
+ const outputArg = typeof opts["output"] === "string" ? opts["output"] : "output.pdf";
69
+ const watchMode = opts["watch"] === true;
70
+ if (!templatePath) {
71
+ console.error("Usage: report-designer render <template> [data]");
72
+ process.exit(1);
73
+ }
74
+ const doRender = async () => {
75
+ const spin = spinner("Rendering PDF...");
76
+ try {
77
+ const templateFile = resolve(process.cwd(), templatePath);
78
+ if (!existsSync(templateFile)) {
79
+ spin.fail(`Template file not found: ${templateFile}`);
80
+ process.exit(1);
81
+ }
82
+ const template = TemplateSchema.parse(JSON.parse(readFileSync(templateFile, "utf-8")));
83
+ let data = {};
84
+ if (dataPath) {
85
+ const dataFile = resolve(process.cwd(), dataPath);
86
+ if (existsSync(dataFile))
87
+ data = JSON.parse(readFileSync(dataFile, "utf-8"));
88
+ }
89
+ const pdfBuffer = await render(template, data);
90
+ const outputPath = resolve(process.cwd(), outputArg);
91
+ writeFileSync(outputPath, pdfBuffer);
92
+ spin.succeed(`PDF saved to: ${outputPath}`);
93
+ }
94
+ catch (err) {
95
+ spin.fail(`Render failed: ${err.message}`);
96
+ if (!watchMode)
97
+ process.exit(1);
98
+ }
99
+ };
100
+ await doRender();
101
+ if (watchMode) {
102
+ const { watch } = await import("fs");
103
+ const templateFile = resolve(process.cwd(), templatePath);
104
+ console.log(`\nWatching for changes: ${templateFile}`);
105
+ watch(templateFile, async () => { console.log("\nChange detected, re-rendering..."); await doRender(); });
106
+ }
107
+ /* ── validate command ────────────────────────────────────────────────────── */
108
+ }
109
+ else if (command === "validate") {
110
+ const [templatePath] = positional;
111
+ if (!templatePath) {
112
+ console.error("Usage: report-designer validate <template>");
113
+ process.exit(1);
114
+ }
115
+ const spin = spinner("Validating template...");
116
+ try {
117
+ const templateFile = resolve(process.cwd(), templatePath);
118
+ if (!existsSync(templateFile)) {
119
+ spin.fail(`File not found: ${templateFile}`);
120
+ process.exit(1);
121
+ }
122
+ const result = TemplateSchema.safeParse(JSON.parse(readFileSync(templateFile, "utf-8")));
123
+ if (result.success) {
124
+ spin.succeed("Template is valid");
125
+ }
126
+ else {
127
+ spin.fail("Template validation failed:");
128
+ result.error.errors.forEach((e) => console.error(` [${e.path.join(".")}] ${e.message}`));
129
+ process.exit(1);
130
+ }
131
+ }
132
+ catch (err) {
133
+ spin.fail(`Error: ${err.message}`);
134
+ process.exit(1);
135
+ }
136
+ /* ── help / unknown ──────────────────────────────────────────────────────── */
137
+ }
138
+ else {
139
+ printHelp();
140
+ if (command && command !== "--help" && command !== "-h")
141
+ process.exit(1);
142
+ }
143
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ export { render, renderStream } from "@veztraa/report-renderer";
2
+ export { TemplateSchema } from "@veztraa/report-core";
3
+ export type { Template } from "@veztraa/report-core";
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AACtD,YAAY,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,3 @@
1
+ export { render, renderStream } from "@veztraa/report-renderer";
2
+ export { TemplateSchema } from "@veztraa/report-core";
3
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,0BAA0B,CAAC;AAChE,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC"}
package/package.json ADDED
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "@veztraa/report-cli",
3
+ "version": "0.1.0",
4
+ "description": "CLI tool for ReportForge — render PDFs from the command line",
5
+ "license": "MIT",
6
+ "type": "module",
7
+ "main": "dist/index.js",
8
+ "files": ["dist"],
9
+ "publishConfig": { "access": "public" },
10
+ "bin": {
11
+ "report-designer": "dist/cli.js"
12
+ },
13
+ "scripts": {
14
+ "build": "tsc",
15
+ "dev": "tsc --watch",
16
+ "clean": "rm -rf dist"
17
+ },
18
+ "dependencies": {
19
+ "@veztraa/report-core": "workspace:*",
20
+ "@veztraa/report-renderer": "workspace:*"
21
+ },
22
+ "devDependencies": {
23
+ "typescript": "^5.7.2",
24
+ "@types/node": "^22.10.2"
25
+ }
26
+ }