@teamflojo/floimg 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/LICENSE +21 -0
- package/dist/cli/commands/config.d.ts +3 -0
- package/dist/cli/commands/config.d.ts.map +1 -0
- package/dist/cli/commands/config.js +165 -0
- package/dist/cli/commands/config.js.map +1 -0
- package/dist/cli/commands/filter.d.ts +4 -0
- package/dist/cli/commands/filter.d.ts.map +1 -0
- package/dist/cli/commands/filter.js +102 -0
- package/dist/cli/commands/filter.js.map +1 -0
- package/dist/cli/commands/generate.d.ts +3 -0
- package/dist/cli/commands/generate.d.ts.map +1 -0
- package/dist/cli/commands/generate.js +49 -0
- package/dist/cli/commands/generate.js.map +1 -0
- package/dist/cli/commands/mcp.d.ts +3 -0
- package/dist/cli/commands/mcp.d.ts.map +1 -0
- package/dist/cli/commands/mcp.js +88 -0
- package/dist/cli/commands/mcp.js.map +1 -0
- package/dist/cli/commands/plugins.d.ts +3 -0
- package/dist/cli/commands/plugins.d.ts.map +1 -0
- package/dist/cli/commands/plugins.js +66 -0
- package/dist/cli/commands/plugins.js.map +1 -0
- package/dist/cli/commands/run.d.ts +3 -0
- package/dist/cli/commands/run.d.ts.map +1 -0
- package/dist/cli/commands/run.js +45 -0
- package/dist/cli/commands/run.js.map +1 -0
- package/dist/cli/commands/save.d.ts +3 -0
- package/dist/cli/commands/save.d.ts.map +1 -0
- package/dist/cli/commands/save.js +54 -0
- package/dist/cli/commands/save.js.map +1 -0
- package/dist/cli/commands/text.d.ts +3 -0
- package/dist/cli/commands/text.d.ts.map +1 -0
- package/dist/cli/commands/text.js +143 -0
- package/dist/cli/commands/text.js.map +1 -0
- package/dist/cli/commands/transform.d.ts +3 -0
- package/dist/cli/commands/transform.d.ts.map +1 -0
- package/dist/cli/commands/transform.js +59 -0
- package/dist/cli/commands/transform.js.map +1 -0
- package/dist/cli/commands/upload.d.ts +3 -0
- package/dist/cli/commands/upload.d.ts.map +1 -0
- package/dist/cli/commands/upload.js +59 -0
- package/dist/cli/commands/upload.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +139 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/config/index.d.ts +10 -0
- package/dist/config/index.d.ts.map +1 -0
- package/dist/config/index.js +38 -0
- package/dist/config/index.js.map +1 -0
- package/dist/config/loader.d.ts +23 -0
- package/dist/config/loader.d.ts.map +1 -0
- package/dist/config/loader.js +189 -0
- package/dist/config/loader.js.map +1 -0
- package/dist/core/client.d.ts +63 -0
- package/dist/core/client.d.ts.map +1 -0
- package/dist/core/client.js +318 -0
- package/dist/core/client.js.map +1 -0
- package/dist/core/errors.d.ts +38 -0
- package/dist/core/errors.d.ts.map +1 -0
- package/dist/core/errors.js +75 -0
- package/dist/core/errors.js.map +1 -0
- package/dist/core/logger.d.ts +12 -0
- package/dist/core/logger.d.ts.map +1 -0
- package/dist/core/logger.js +26 -0
- package/dist/core/logger.js.map +1 -0
- package/dist/core/pipeline-runner.d.ts +64 -0
- package/dist/core/pipeline-runner.d.ts.map +1 -0
- package/dist/core/pipeline-runner.js +109 -0
- package/dist/core/pipeline-runner.js.map +1 -0
- package/dist/core/types.d.ts +392 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +5 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +18 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/server.d.ts +3 -0
- package/dist/mcp/server.d.ts.map +1 -0
- package/dist/mcp/server.js +731 -0
- package/dist/mcp/server.js.map +1 -0
- package/dist/providers/ai/index.d.ts +3 -0
- package/dist/providers/ai/index.d.ts.map +1 -0
- package/dist/providers/ai/index.js +2 -0
- package/dist/providers/ai/index.js.map +1 -0
- package/dist/providers/ai/openai.d.ts +44 -0
- package/dist/providers/ai/openai.d.ts.map +1 -0
- package/dist/providers/ai/openai.js +133 -0
- package/dist/providers/ai/openai.js.map +1 -0
- package/dist/providers/save/FsSaveProvider.d.ts +20 -0
- package/dist/providers/save/FsSaveProvider.d.ts.map +1 -0
- package/dist/providers/save/FsSaveProvider.js +34 -0
- package/dist/providers/save/FsSaveProvider.js.map +1 -0
- package/dist/providers/save/S3SaveProvider.d.ts +26 -0
- package/dist/providers/save/S3SaveProvider.d.ts.map +1 -0
- package/dist/providers/save/S3SaveProvider.js +42 -0
- package/dist/providers/save/S3SaveProvider.js.map +1 -0
- package/dist/providers/store/fs.d.ts +20 -0
- package/dist/providers/store/fs.d.ts.map +1 -0
- package/dist/providers/store/fs.js +42 -0
- package/dist/providers/store/fs.js.map +1 -0
- package/dist/providers/store/index.d.ts +3 -0
- package/dist/providers/store/index.d.ts.map +1 -0
- package/dist/providers/store/index.js +3 -0
- package/dist/providers/store/index.js.map +1 -0
- package/dist/providers/store/s3.d.ts +62 -0
- package/dist/providers/store/s3.d.ts.map +1 -0
- package/dist/providers/store/s3.js +92 -0
- package/dist/providers/store/s3.js.map +1 -0
- package/dist/providers/svg/index.d.ts +2 -0
- package/dist/providers/svg/index.d.ts.map +1 -0
- package/dist/providers/svg/index.js +2 -0
- package/dist/providers/svg/index.js.map +1 -0
- package/dist/providers/svg/shapes.d.ts +18 -0
- package/dist/providers/svg/shapes.d.ts.map +1 -0
- package/dist/providers/svg/shapes.js +161 -0
- package/dist/providers/svg/shapes.js.map +1 -0
- package/dist/providers/transform/index.d.ts +2 -0
- package/dist/providers/transform/index.d.ts.map +1 -0
- package/dist/providers/transform/index.js +2 -0
- package/dist/providers/transform/index.js.map +1 -0
- package/dist/providers/transform/presets.d.ts +44 -0
- package/dist/providers/transform/presets.d.ts.map +1 -0
- package/dist/providers/transform/presets.js +205 -0
- package/dist/providers/transform/presets.js.map +1 -0
- package/dist/providers/transform/sharp.d.ts +64 -0
- package/dist/providers/transform/sharp.d.ts.map +1 -0
- package/dist/providers/transform/sharp.js +732 -0
- package/dist/providers/transform/sharp.js.map +1 -0
- package/dist/providers/transform/text.d.ts +38 -0
- package/dist/providers/transform/text.d.ts.map +1 -0
- package/dist/providers/transform/text.js +116 -0
- package/dist/providers/transform/text.js.map +1 -0
- package/package.json +84 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2024 Brett Cooke
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SA6KvB,CAAC"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { saveGlobalConfig, loadConfig } from "../../config/loader.js";
|
|
3
|
+
import { join } from "path";
|
|
4
|
+
import { homedir } from "os";
|
|
5
|
+
export const configCommand = new Command("config")
|
|
6
|
+
.description("Manage imgflo configuration")
|
|
7
|
+
.addCommand(new Command("set")
|
|
8
|
+
.description("Set a configuration value")
|
|
9
|
+
.argument("<key>", "Configuration key (e.g., s3.bucket, s3.region)")
|
|
10
|
+
.argument("<value>", "Configuration value")
|
|
11
|
+
.action(async (key, value) => {
|
|
12
|
+
try {
|
|
13
|
+
const config = await loadConfig();
|
|
14
|
+
// Parse the key path (e.g., "s3.bucket" -> save.s3.bucket)
|
|
15
|
+
const parts = key.split(".");
|
|
16
|
+
if (parts[0] === "s3") {
|
|
17
|
+
if (!config.save)
|
|
18
|
+
config.save = {};
|
|
19
|
+
if (!config.save.s3)
|
|
20
|
+
config.save.s3 = {};
|
|
21
|
+
if (parts[1] === "bucket") {
|
|
22
|
+
config.save.s3.bucket = value;
|
|
23
|
+
}
|
|
24
|
+
else if (parts[1] === "region") {
|
|
25
|
+
config.save.s3.region = value;
|
|
26
|
+
}
|
|
27
|
+
else {
|
|
28
|
+
config.save.s3[parts[1]] = value;
|
|
29
|
+
}
|
|
30
|
+
// Set default save provider to s3
|
|
31
|
+
if (!config.save.default) {
|
|
32
|
+
config.save.default = "s3";
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
else if (parts[0] === "openai") {
|
|
36
|
+
if (!config.ai)
|
|
37
|
+
config.ai = {};
|
|
38
|
+
if (!config.ai.openai)
|
|
39
|
+
config.ai.openai = { apiKey: '' };
|
|
40
|
+
if (parts[1] === "apiKey" || parts[1] === "key") {
|
|
41
|
+
config.ai.openai.apiKey = value;
|
|
42
|
+
}
|
|
43
|
+
else {
|
|
44
|
+
config.ai.openai[parts[1]] = value;
|
|
45
|
+
}
|
|
46
|
+
if (!config.ai.default) {
|
|
47
|
+
config.ai.default = "openai";
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else {
|
|
51
|
+
console.error(`Unknown configuration key: ${key}`);
|
|
52
|
+
console.error('Valid keys: s3.bucket, s3.region, openai.apiKey');
|
|
53
|
+
process.exit(1);
|
|
54
|
+
}
|
|
55
|
+
await saveGlobalConfig(config);
|
|
56
|
+
console.log(`ā Configuration saved: ${key} = ${value.includes('key') || value.includes('secret') ? '***' : value}`);
|
|
57
|
+
console.log(` Location: ${join(homedir(), ".imgflo", "config.json")}`);
|
|
58
|
+
}
|
|
59
|
+
catch (error) {
|
|
60
|
+
console.error("Error saving configuration:", error instanceof Error ? error.message : error);
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
}))
|
|
64
|
+
.addCommand(new Command("get")
|
|
65
|
+
.description("Get a configuration value")
|
|
66
|
+
.argument("[key]", "Configuration key (omit to show all)")
|
|
67
|
+
.action(async (key) => {
|
|
68
|
+
try {
|
|
69
|
+
const config = await loadConfig();
|
|
70
|
+
if (!key) {
|
|
71
|
+
console.log("Current configuration:");
|
|
72
|
+
console.log(JSON.stringify(config, null, 2));
|
|
73
|
+
return;
|
|
74
|
+
}
|
|
75
|
+
const parts = key.split(".");
|
|
76
|
+
let value = config;
|
|
77
|
+
for (const part of parts) {
|
|
78
|
+
if (value && typeof value === 'object') {
|
|
79
|
+
value = value[part];
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
value = undefined;
|
|
83
|
+
break;
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
if (value !== undefined) {
|
|
87
|
+
console.log(`${key} = ${JSON.stringify(value, null, 2)}`);
|
|
88
|
+
}
|
|
89
|
+
else {
|
|
90
|
+
console.log(`Configuration key not found: ${key}`);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
catch (error) {
|
|
94
|
+
console.error("Error reading configuration:", error instanceof Error ? error.message : error);
|
|
95
|
+
process.exit(1);
|
|
96
|
+
}
|
|
97
|
+
}))
|
|
98
|
+
.addCommand(new Command("init")
|
|
99
|
+
.description("Initialize imgflo configuration interactively")
|
|
100
|
+
.action(async () => {
|
|
101
|
+
console.log("imgflo configuration setup");
|
|
102
|
+
console.log("=========================\n");
|
|
103
|
+
const readline = await import('readline');
|
|
104
|
+
const rl = readline.createInterface({
|
|
105
|
+
input: process.stdin,
|
|
106
|
+
output: process.stdout
|
|
107
|
+
});
|
|
108
|
+
const question = (prompt) => {
|
|
109
|
+
return new Promise((resolve) => {
|
|
110
|
+
rl.question(prompt, resolve);
|
|
111
|
+
});
|
|
112
|
+
};
|
|
113
|
+
try {
|
|
114
|
+
const config = {};
|
|
115
|
+
console.log("S3 Configuration (optional - press Enter to skip):");
|
|
116
|
+
const s3Bucket = await question(" S3 Bucket name: ");
|
|
117
|
+
if (s3Bucket) {
|
|
118
|
+
const s3Region = await question(" S3 Region [us-east-1]: ") || "us-east-1";
|
|
119
|
+
config.save = {
|
|
120
|
+
default: "s3",
|
|
121
|
+
s3: {
|
|
122
|
+
bucket: s3Bucket,
|
|
123
|
+
region: s3Region
|
|
124
|
+
}
|
|
125
|
+
};
|
|
126
|
+
}
|
|
127
|
+
console.log("\nOpenAI Configuration (optional - press Enter to skip):");
|
|
128
|
+
const openaiKey = await question(" OpenAI API Key: ");
|
|
129
|
+
if (openaiKey) {
|
|
130
|
+
config.ai = {
|
|
131
|
+
default: "openai",
|
|
132
|
+
openai: {
|
|
133
|
+
apiKey: openaiKey
|
|
134
|
+
}
|
|
135
|
+
};
|
|
136
|
+
}
|
|
137
|
+
if (Object.keys(config).length === 0) {
|
|
138
|
+
console.log("\nNo configuration provided. Exiting.");
|
|
139
|
+
rl.close();
|
|
140
|
+
return;
|
|
141
|
+
}
|
|
142
|
+
await saveGlobalConfig(config);
|
|
143
|
+
console.log("\nā Configuration saved to:", join(homedir(), ".imgflo", "config.json"));
|
|
144
|
+
console.log("\nYou can now use imgflo without setting environment variables!");
|
|
145
|
+
console.log("\nTry it:");
|
|
146
|
+
console.log(" imgflo generate --provider svg --params '{\"type\":\"gradient\"}' --out test.svg");
|
|
147
|
+
rl.close();
|
|
148
|
+
}
|
|
149
|
+
catch (error) {
|
|
150
|
+
rl.close();
|
|
151
|
+
console.error("\nError during configuration:", error instanceof Error ? error.message : error);
|
|
152
|
+
process.exit(1);
|
|
153
|
+
}
|
|
154
|
+
}))
|
|
155
|
+
.addCommand(new Command("path")
|
|
156
|
+
.description("Show configuration file location")
|
|
157
|
+
.action(() => {
|
|
158
|
+
console.log("Configuration file locations (in order of priority):");
|
|
159
|
+
console.log(" 1. ./imgflo.config.ts (current directory)");
|
|
160
|
+
console.log(" 2. ./.imgflorc.json (current directory)");
|
|
161
|
+
console.log(" 3. ~/.imgflo/config.json (global)");
|
|
162
|
+
console.log(" 4. Environment variables");
|
|
163
|
+
console.log("\nGlobal config location:", join(homedir(), ".imgflo", "config.json"));
|
|
164
|
+
}));
|
|
165
|
+
//# sourceMappingURL=config.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/cli/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/filter.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SAgDtB,CAAC;AAGL,eAAO,MAAM,aAAa,SA6CtB,CAAC"}
|
|
@@ -0,0 +1,102 @@
|
|
|
1
|
+
import { readFile, writeFile } from "fs/promises";
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import createClient from "../../index.js";
|
|
4
|
+
import { loadConfig } from "../../config/loader.js";
|
|
5
|
+
export const filterCommand = new Command("filter")
|
|
6
|
+
.description("Apply filters and effects to images")
|
|
7
|
+
.requiredOption("--in <path>", "Input file path")
|
|
8
|
+
.requiredOption("--op <operation>", "Filter operation: blur, sharpen, grayscale, negate, normalize, threshold, modulate, tint")
|
|
9
|
+
.option("--params <json>", "JSON parameters for the operation", "{}")
|
|
10
|
+
.option("--out <path>", "Output file path (if not provided, outputs to stdout)")
|
|
11
|
+
.option("--config <path>", "Path to config file")
|
|
12
|
+
.action(async (options) => {
|
|
13
|
+
try {
|
|
14
|
+
const config = await loadConfig(options.config);
|
|
15
|
+
const client = createClient(config);
|
|
16
|
+
// Read input file
|
|
17
|
+
const inputBytes = await readFile(options.in);
|
|
18
|
+
// Detect MIME type from file extension
|
|
19
|
+
const ext = options.in.split(".").pop()?.toLowerCase();
|
|
20
|
+
let mime = "image/png";
|
|
21
|
+
if (ext === "svg")
|
|
22
|
+
mime = "image/svg+xml";
|
|
23
|
+
else if (ext === "jpg" || ext === "jpeg")
|
|
24
|
+
mime = "image/jpeg";
|
|
25
|
+
else if (ext === "webp")
|
|
26
|
+
mime = "image/webp";
|
|
27
|
+
else if (ext === "avif")
|
|
28
|
+
mime = "image/avif";
|
|
29
|
+
const inputBlob = {
|
|
30
|
+
bytes: inputBytes,
|
|
31
|
+
mime,
|
|
32
|
+
};
|
|
33
|
+
const params = JSON.parse(options.params);
|
|
34
|
+
const result = await client.transform({
|
|
35
|
+
blob: inputBlob,
|
|
36
|
+
op: options.op,
|
|
37
|
+
params,
|
|
38
|
+
});
|
|
39
|
+
if (options.out) {
|
|
40
|
+
await writeFile(options.out, result.bytes);
|
|
41
|
+
console.log(`Filtered image saved to: ${options.out}`);
|
|
42
|
+
console.log(`Format: ${result.mime}`);
|
|
43
|
+
}
|
|
44
|
+
else {
|
|
45
|
+
// Write to stdout
|
|
46
|
+
process.stdout.write(result.bytes);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
console.error("Error applying filter:", error instanceof Error ? error.message : error);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
// Add preset subcommand
|
|
55
|
+
export const presetCommand = new Command("preset")
|
|
56
|
+
.description("Apply preset filters to images")
|
|
57
|
+
.requiredOption("--in <path>", "Input file path")
|
|
58
|
+
.requiredOption("--name <preset>", "Preset name: vintage, vibrant, blackAndWhite, dramatic, soft, cool, warm, highContrast")
|
|
59
|
+
.option("--out <path>", "Output file path (if not provided, outputs to stdout)")
|
|
60
|
+
.option("--config <path>", "Path to config file")
|
|
61
|
+
.action(async (options) => {
|
|
62
|
+
try {
|
|
63
|
+
const config = await loadConfig(options.config);
|
|
64
|
+
const client = createClient(config);
|
|
65
|
+
// Read input file
|
|
66
|
+
const inputBytes = await readFile(options.in);
|
|
67
|
+
// Detect MIME type from file extension
|
|
68
|
+
const ext = options.in.split(".").pop()?.toLowerCase();
|
|
69
|
+
let mime = "image/png";
|
|
70
|
+
if (ext === "svg")
|
|
71
|
+
mime = "image/svg+xml";
|
|
72
|
+
else if (ext === "jpg" || ext === "jpeg")
|
|
73
|
+
mime = "image/jpeg";
|
|
74
|
+
else if (ext === "webp")
|
|
75
|
+
mime = "image/webp";
|
|
76
|
+
else if (ext === "avif")
|
|
77
|
+
mime = "image/avif";
|
|
78
|
+
const inputBlob = {
|
|
79
|
+
bytes: inputBytes,
|
|
80
|
+
mime,
|
|
81
|
+
};
|
|
82
|
+
const result = await client.transform({
|
|
83
|
+
blob: inputBlob,
|
|
84
|
+
op: "preset",
|
|
85
|
+
params: { name: options.name },
|
|
86
|
+
});
|
|
87
|
+
if (options.out) {
|
|
88
|
+
await writeFile(options.out, result.bytes);
|
|
89
|
+
console.log(`Preset '${options.name}' applied to: ${options.out}`);
|
|
90
|
+
console.log(`Format: ${result.mime}`);
|
|
91
|
+
}
|
|
92
|
+
else {
|
|
93
|
+
// Write to stdout
|
|
94
|
+
process.stdout.write(result.bytes);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
console.error("Error applying preset:", error instanceof Error ? error.message : error);
|
|
99
|
+
process.exit(1);
|
|
100
|
+
}
|
|
101
|
+
});
|
|
102
|
+
//# sourceMappingURL=filter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"filter.js","sourceRoot":"","sources":["../../../src/cli/commands/filter.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,eAAO,MAAM,eAAe,SA2CxB,CAAC"}
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
import { writeFile } from "fs/promises";
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import createClient from "../../index.js";
|
|
4
|
+
import { loadConfig } from "../../config/loader.js";
|
|
5
|
+
export const generateCommand = new Command("generate")
|
|
6
|
+
.description("Generate an image using any registered generator")
|
|
7
|
+
.option("-g, --generator <name>", "Generator to use (e.g., shapes, openai)", "shapes")
|
|
8
|
+
.option("--params <json>", "JSON parameters for generation", "{}")
|
|
9
|
+
.option("--out <path>", "Output file path")
|
|
10
|
+
.option("--config <path>", "Path to config file")
|
|
11
|
+
.action(async (options) => {
|
|
12
|
+
try {
|
|
13
|
+
const config = await loadConfig(options.config);
|
|
14
|
+
const client = createClient(config);
|
|
15
|
+
const params = JSON.parse(options.params);
|
|
16
|
+
const blob = await client.generate({
|
|
17
|
+
generator: options.generator,
|
|
18
|
+
params,
|
|
19
|
+
});
|
|
20
|
+
if (options.out) {
|
|
21
|
+
// Check if destination is cloud storage (s3://, r2://, etc.) or local file
|
|
22
|
+
if (options.out.includes('://')) {
|
|
23
|
+
// Use imgflo's save provider (supports S3, etc.)
|
|
24
|
+
const result = await client.save(blob, options.out);
|
|
25
|
+
console.log(`Generated image saved to cloud storage!`);
|
|
26
|
+
console.log(`Provider: ${result.provider}`);
|
|
27
|
+
console.log(`Location: ${result.location}`);
|
|
28
|
+
console.log(`Format: ${blob.mime}`);
|
|
29
|
+
console.log(`Size: ${blob.width}x${blob.height}`);
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
// Local filesystem
|
|
33
|
+
await writeFile(options.out, blob.bytes);
|
|
34
|
+
console.log(`Generated image saved to: ${options.out}`);
|
|
35
|
+
console.log(`Format: ${blob.mime}`);
|
|
36
|
+
console.log(`Size: ${blob.width}x${blob.height}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
else {
|
|
40
|
+
// Write to stdout
|
|
41
|
+
process.stdout.write(blob.bytes);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
catch (error) {
|
|
45
|
+
console.error("Error generating image:", error instanceof Error ? error.message : error);
|
|
46
|
+
process.exit(1);
|
|
47
|
+
}
|
|
48
|
+
});
|
|
49
|
+
//# sourceMappingURL=generate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"generate.js","sourceRoot":"","sources":["../../../src/cli/commands/generate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,aAAa,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAEpD,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KACnD,WAAW,CAAC,kDAAkD,CAAC;KAC/D,MAAM,CAAC,wBAAwB,EAAE,yCAAyC,EAAE,QAAQ,CAAC;KACrF,MAAM,CAAC,iBAAiB,EAAE,gCAAgC,EAAE,IAAI,CAAC;KACjE,MAAM,CAAC,cAAc,EAAE,kBAAkB,CAAC;KAC1C,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;KAChD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAEpC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE1C,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,QAAQ,CAAC;YACjC,SAAS,EAAE,OAAO,CAAC,SAAS;YAC5B,MAAM;SACP,CAAC,CAAC;QAEH,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;YAChB,2EAA2E;YAC3E,IAAI,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;gBAChC,iDAAiD;gBACjD,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;gBACpD,OAAO,CAAC,GAAG,CAAC,yCAAyC,CAAC,CAAC;gBACvD,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;gBAC5C,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACpD,CAAC;iBAAM,CAAC;gBACN,mBAAmB;gBACnB,MAAM,SAAS,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;gBACzC,OAAO,CAAC,GAAG,CAAC,6BAA6B,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;gBACxD,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;gBACpC,OAAO,CAAC,GAAG,CAAC,SAAS,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;YACpD,CAAC;QACH,CAAC;aAAM,CAAC;YACN,kBAAkB;YAClB,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACnC,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,yBAAyB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACzF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,UAAU,SAC2C,CAAC"}
|
|
@@ -0,0 +1,88 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { join, resolve } from "path";
|
|
3
|
+
import { writeFile } from "fs/promises";
|
|
4
|
+
export const mcpCommand = new Command("mcp")
|
|
5
|
+
.description("MCP (Model Context Protocol) integration helpers");
|
|
6
|
+
mcpCommand
|
|
7
|
+
.command("install")
|
|
8
|
+
.description("Generate MCP configuration for Claude Code")
|
|
9
|
+
.option("--global", "Install to global Claude Code config")
|
|
10
|
+
.option("--output <path>", "Output path for MCP config snippet")
|
|
11
|
+
.action(async (options) => {
|
|
12
|
+
console.log("imgflo MCP Setup");
|
|
13
|
+
console.log("================\n");
|
|
14
|
+
// Get the path to the built MCP server
|
|
15
|
+
// When imgflo is installed globally, use require.resolve to find it
|
|
16
|
+
let serverPath;
|
|
17
|
+
try {
|
|
18
|
+
serverPath = require.resolve("imgflo/dist/mcp/server.js");
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
// Fallback to local path if not found via require.resolve
|
|
22
|
+
serverPath = resolve(join(process.cwd(), "node_modules/imgflo/dist/mcp/server.js"));
|
|
23
|
+
}
|
|
24
|
+
const mcpConfig = {
|
|
25
|
+
mcpServers: {
|
|
26
|
+
imgflo: {
|
|
27
|
+
command: "node",
|
|
28
|
+
args: [serverPath],
|
|
29
|
+
env: {
|
|
30
|
+
// These will be read from the user's environment or .env
|
|
31
|
+
OPENAI_API_KEY: "${OPENAI_API_KEY}",
|
|
32
|
+
AWS_ACCESS_KEY_ID: "${AWS_ACCESS_KEY_ID}",
|
|
33
|
+
AWS_SECRET_ACCESS_KEY: "${AWS_SECRET_ACCESS_KEY}",
|
|
34
|
+
AWS_REGION: "${AWS_REGION}",
|
|
35
|
+
S3_BUCKET: "${S3_BUCKET}",
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
if (options.output) {
|
|
41
|
+
// Write to specified file
|
|
42
|
+
await writeFile(options.output, JSON.stringify(mcpConfig, null, 2));
|
|
43
|
+
console.log(`ā MCP configuration written to: ${options.output}\n`);
|
|
44
|
+
}
|
|
45
|
+
else {
|
|
46
|
+
// Just print to console
|
|
47
|
+
console.log("Add this to your Claude Code MCP configuration:\n");
|
|
48
|
+
console.log(JSON.stringify(mcpConfig, null, 2));
|
|
49
|
+
console.log("\n");
|
|
50
|
+
}
|
|
51
|
+
console.log("š Claude Code MCP config locations:");
|
|
52
|
+
console.log(" - macOS: ~/Library/Application Support/Claude/claude_desktop_config.json");
|
|
53
|
+
console.log(" - Windows: %APPDATA%\\Claude\\claude_desktop_config.json");
|
|
54
|
+
console.log(" - Linux: ~/.config/claude/claude_desktop_config.json");
|
|
55
|
+
console.log("\nš” Next steps:");
|
|
56
|
+
console.log(" 1. Set up your credentials (AWS, OpenAI) in environment or .env");
|
|
57
|
+
console.log(" 2. Add the config above to your Claude Code config file");
|
|
58
|
+
console.log(" 3. Restart Claude Code");
|
|
59
|
+
console.log(" 4. Try: 'Create a QR code for https://example.com'");
|
|
60
|
+
console.log("\nš Documentation:");
|
|
61
|
+
console.log(" https://github.com/bcooke/imgflo/blob/main/packages/imgflo/docs/guides/MCP_SERVER.md");
|
|
62
|
+
});
|
|
63
|
+
mcpCommand
|
|
64
|
+
.command("test")
|
|
65
|
+
.description("Test MCP server with inspector (opens browser)")
|
|
66
|
+
.action(async () => {
|
|
67
|
+
console.log("Starting MCP Inspector...\n");
|
|
68
|
+
console.log("This will open a web interface to test imgflo's MCP tools.");
|
|
69
|
+
console.log("Press Ctrl+C to stop.\n");
|
|
70
|
+
const { spawn } = await import("child_process");
|
|
71
|
+
// Get the path to the built MCP server
|
|
72
|
+
let serverPath;
|
|
73
|
+
try {
|
|
74
|
+
serverPath = require.resolve("imgflo/dist/mcp/server.js");
|
|
75
|
+
}
|
|
76
|
+
catch {
|
|
77
|
+
// Fallback to local path if not found via require.resolve
|
|
78
|
+
serverPath = resolve(join(process.cwd(), "node_modules/imgflo/dist/mcp/server.js"));
|
|
79
|
+
}
|
|
80
|
+
const inspector = spawn("npx", ["@modelcontextprotocol/inspector", "node", serverPath], {
|
|
81
|
+
stdio: "inherit",
|
|
82
|
+
env: process.env,
|
|
83
|
+
});
|
|
84
|
+
inspector.on("close", (code) => {
|
|
85
|
+
console.log(`\nMCP Inspector exited with code ${code}`);
|
|
86
|
+
});
|
|
87
|
+
});
|
|
88
|
+
//# sourceMappingURL=mcp.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../../src/cli/commands/mcp.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/plugins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,eAAO,MAAM,cAAc,SAqEvB,CAAC"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
export const pluginsCommand = new Command("plugins")
|
|
3
|
+
.description("Manage and view available imgflo plugins")
|
|
4
|
+
.action(async () => {
|
|
5
|
+
console.log("imgflo Plugins");
|
|
6
|
+
console.log("==============\n");
|
|
7
|
+
// Try to load each known plugin
|
|
8
|
+
const knownPlugins = [
|
|
9
|
+
{
|
|
10
|
+
name: "imgflo-quickchart",
|
|
11
|
+
generator: "quickchart",
|
|
12
|
+
description: "Chart.js charts (bar, line, pie, etc.)",
|
|
13
|
+
docs: "https://github.com/bcooke/imgflo/tree/main/packages/imgflo-quickchart",
|
|
14
|
+
},
|
|
15
|
+
{
|
|
16
|
+
name: "imgflo-d3",
|
|
17
|
+
generator: "d3",
|
|
18
|
+
description: "D3 data visualizations (custom charts, complex viz)",
|
|
19
|
+
docs: "https://github.com/bcooke/imgflo/tree/main/packages/imgflo-d3",
|
|
20
|
+
},
|
|
21
|
+
{
|
|
22
|
+
name: "imgflo-mermaid",
|
|
23
|
+
generator: "mermaid",
|
|
24
|
+
description: "Mermaid diagrams (flowcharts, sequence, gantt)",
|
|
25
|
+
docs: "https://github.com/bcooke/imgflo/tree/main/packages/imgflo-mermaid",
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: "imgflo-qr",
|
|
29
|
+
generator: "qr",
|
|
30
|
+
description: "QR code generation",
|
|
31
|
+
docs: "https://github.com/bcooke/imgflo/tree/main/packages/imgflo-qr",
|
|
32
|
+
},
|
|
33
|
+
{
|
|
34
|
+
name: "imgflo-screenshot",
|
|
35
|
+
generator: "screenshot",
|
|
36
|
+
description: "Website screenshots (Playwright)",
|
|
37
|
+
docs: "https://github.com/bcooke/imgflo/tree/main/packages/imgflo-screenshot",
|
|
38
|
+
},
|
|
39
|
+
];
|
|
40
|
+
console.log("Built-in generators:");
|
|
41
|
+
console.log(" ā shapes - Simple SVG shapes and gradients");
|
|
42
|
+
console.log(" ā openai - DALL-E image generation (requires API key)\n");
|
|
43
|
+
console.log("Available plugin generators:");
|
|
44
|
+
const installedPlugins = [];
|
|
45
|
+
const notInstalledPlugins = [];
|
|
46
|
+
for (const plugin of knownPlugins) {
|
|
47
|
+
try {
|
|
48
|
+
await import(plugin.name);
|
|
49
|
+
console.log(` ā ${plugin.generator.padEnd(12)} - ${plugin.description}`);
|
|
50
|
+
installedPlugins.push(plugin.name);
|
|
51
|
+
}
|
|
52
|
+
catch {
|
|
53
|
+
console.log(` ā ${plugin.generator.padEnd(12)} - ${plugin.description} (not installed)`);
|
|
54
|
+
notInstalledPlugins.push(plugin.name);
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
if (notInstalledPlugins.length > 0) {
|
|
58
|
+
console.log("\nš” To install plugins:");
|
|
59
|
+
console.log(` npm install ${notInstalledPlugins.join(' ')}`);
|
|
60
|
+
console.log("\n Or install all at once:");
|
|
61
|
+
console.log(" npm install imgflo-quickchart imgflo-d3 imgflo-mermaid imgflo-qr imgflo-screenshot");
|
|
62
|
+
}
|
|
63
|
+
console.log("\nš Documentation:");
|
|
64
|
+
console.log(" https://github.com/bcooke/imgflo");
|
|
65
|
+
});
|
|
66
|
+
//# sourceMappingURL=plugins.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugins.js","sourceRoot":"","sources":["../../../src/cli/commands/plugins.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,MAAM,CAAC,MAAM,cAAc,GAAG,IAAI,OAAO,CAAC,SAAS,CAAC;KACjD,WAAW,CAAC,0CAA0C,CAAC;KACvD,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,OAAO,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;IAEhC,gCAAgC;IAChC,MAAM,YAAY,GAAG;QACnB;YACE,IAAI,EAAE,mBAAmB;YACzB,SAAS,EAAE,YAAY;YACvB,WAAW,EAAE,wCAAwC;YACrD,IAAI,EAAE,uEAAuE;SAC9E;QACD;YACE,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,qDAAqD;YAClE,IAAI,EAAE,+DAA+D;SACtE;QACD;YACE,IAAI,EAAE,gBAAgB;YACtB,SAAS,EAAE,SAAS;YACpB,WAAW,EAAE,gDAAgD;YAC7D,IAAI,EAAE,oEAAoE;SAC3E;QACD;YACE,IAAI,EAAE,WAAW;YACjB,SAAS,EAAE,IAAI;YACf,WAAW,EAAE,oBAAoB;YACjC,IAAI,EAAE,+DAA+D;SACtE;QACD;YACE,IAAI,EAAE,mBAAmB;YACzB,SAAS,EAAE,YAAY;YACvB,WAAW,EAAE,kCAAkC;YAC/C,IAAI,EAAE,uEAAuE;SAC9E;KACF,CAAC;IAEF,OAAO,CAAC,GAAG,CAAC,sBAAsB,CAAC,CAAC;IACpC,OAAO,CAAC,GAAG,CAAC,iDAAiD,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,8DAA8D,CAAC,CAAC;IAE5E,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAE5C,MAAM,gBAAgB,GAAa,EAAE,CAAC;IACtC,MAAM,mBAAmB,GAAa,EAAE,CAAC;IAEzC,KAAK,MAAM,MAAM,IAAI,YAAY,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,WAAW,EAAE,CAAC,CAAC;YAC1E,gBAAgB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,CAAC,GAAG,CAAC,OAAO,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,MAAM,CAAC,WAAW,kBAAkB,CAAC,CAAC;YAC1F,mBAAmB,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACxC,CAAC;IACH,CAAC;IAED,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QACnC,OAAO,CAAC,GAAG,CAAC,0BAA0B,CAAC,CAAC;QACxC,OAAO,CAAC,GAAG,CAAC,kBAAkB,mBAAmB,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAC/D,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,uFAAuF,CAAC,CAAC;IACvG,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC;IACnC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;AACrD,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAOpC,eAAO,MAAM,UAAU,SA0CnB,CAAC"}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
import { Command } from "commander";
|
|
2
|
+
import { readFile } from "fs/promises";
|
|
3
|
+
import { parse } from "yaml";
|
|
4
|
+
import createClient from "../../index.js";
|
|
5
|
+
import { loadConfig } from "../../config/loader.js";
|
|
6
|
+
export const runCommand = new Command("run")
|
|
7
|
+
.description("Run a YAML pipeline")
|
|
8
|
+
.argument("<file>", "Path to YAML pipeline file")
|
|
9
|
+
.option("--config <path>", "Path to config file")
|
|
10
|
+
.action(async (file, options) => {
|
|
11
|
+
try {
|
|
12
|
+
const config = await loadConfig(options.config);
|
|
13
|
+
const client = createClient(config);
|
|
14
|
+
// Read and parse YAML
|
|
15
|
+
const yamlContent = await readFile(file, "utf-8");
|
|
16
|
+
const pipeline = parse(yamlContent);
|
|
17
|
+
console.log(`š Running pipeline: ${pipeline.name || file}`);
|
|
18
|
+
// Execute pipeline
|
|
19
|
+
const results = await client.run(pipeline);
|
|
20
|
+
console.log(`\nā Pipeline completed with ${results.length} steps\n`);
|
|
21
|
+
// Output results
|
|
22
|
+
for (const result of results) {
|
|
23
|
+
if ('location' in result.value) {
|
|
24
|
+
// SaveResult
|
|
25
|
+
console.log(` ${result.out}:`);
|
|
26
|
+
console.log(` Location: ${result.value.location}`);
|
|
27
|
+
console.log(` Provider: ${result.value.provider}`);
|
|
28
|
+
console.log(` Size: ${result.value.size} bytes`);
|
|
29
|
+
}
|
|
30
|
+
else if ('bytes' in result.value) {
|
|
31
|
+
// ImageBlob
|
|
32
|
+
console.log(` ${result.out}:`);
|
|
33
|
+
console.log(` Type: ${result.value.mime}`);
|
|
34
|
+
console.log(` Size: ${result.value.width}x${result.value.height}`);
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
console.log('\n⨠Done!');
|
|
38
|
+
}
|
|
39
|
+
catch (error) {
|
|
40
|
+
console.error("\nā Error running pipeline:");
|
|
41
|
+
console.error(error instanceof Error ? error.message : error);
|
|
42
|
+
process.exit(1);
|
|
43
|
+
}
|
|
44
|
+
});
|
|
45
|
+
//# sourceMappingURL=run.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"run.js","sourceRoot":"","sources":["../../../src/cli/commands/run.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,KAAK,EAAE,MAAM,MAAM,CAAC;AAC7B,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AAGpD,MAAM,CAAC,MAAM,UAAU,GAAG,IAAI,OAAO,CAAC,KAAK,CAAC;KACzC,WAAW,CAAC,qBAAqB,CAAC;KAClC,QAAQ,CAAC,QAAQ,EAAE,4BAA4B,CAAC;KAChD,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;KAChD,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE;IAC9B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAChD,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAEpC,sBAAsB;QACtB,MAAM,WAAW,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAClD,MAAM,QAAQ,GAAa,KAAK,CAAC,WAAW,CAAC,CAAC;QAE9C,OAAO,CAAC,GAAG,CAAC,wBAAwB,QAAQ,CAAC,IAAI,IAAI,IAAI,EAAE,CAAC,CAAC;QAE7D,mBAAmB;QACnB,MAAM,OAAO,GAAG,MAAM,MAAM,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QAE3C,OAAO,CAAC,GAAG,CAAC,+BAA+B,OAAO,CAAC,MAAM,UAAU,CAAC,CAAC;QAErE,iBAAiB;QACjB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;YAC7B,IAAI,UAAU,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAC/B,aAAa;gBACb,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACtD,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;gBACtD,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,KAAK,CAAC,IAAI,QAAQ,CAAC,CAAC;YACtD,CAAC;iBAAM,IAAI,OAAO,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBACnC,YAAY;gBACZ,OAAO,CAAC,GAAG,CAAC,KAAK,MAAM,CAAC,GAAG,GAAG,CAAC,CAAC;gBAChC,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC;gBAC9C,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,MAAM,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC;YACxE,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,CAAC;IAC3B,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAC;QAC7C,OAAO,CAAC,KAAK,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|