@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
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"save.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/save.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,WAAW,SAkDpB,CAAC"}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
import { readFile } from "fs/promises";
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import createClient from "../../index.js";
|
|
4
|
+
import { loadConfig, mergeCliArgs } from "../../config/loader.js";
|
|
5
|
+
export const saveCommand = new Command("save")
|
|
6
|
+
.description("Save an image to filesystem or cloud storage")
|
|
7
|
+
.requiredOption("--in <path>", "Input file path")
|
|
8
|
+
.requiredOption("--out <destination>", "Output destination (file path, s3://bucket/key, etc.)")
|
|
9
|
+
.option("--provider <name>", "Storage provider name (overrides auto-detection)")
|
|
10
|
+
.option("--bucket <name>", "S3 bucket name (overrides config)")
|
|
11
|
+
.option("--region <region>", "S3 region (overrides config)")
|
|
12
|
+
.option("--config <path>", "Path to config file")
|
|
13
|
+
.action(async (options) => {
|
|
14
|
+
try {
|
|
15
|
+
let config = await loadConfig(options.config);
|
|
16
|
+
// Merge CLI arguments (they have highest priority)
|
|
17
|
+
config = mergeCliArgs(config, {
|
|
18
|
+
provider: options.provider,
|
|
19
|
+
bucket: options.bucket,
|
|
20
|
+
region: options.region,
|
|
21
|
+
});
|
|
22
|
+
const client = createClient(config);
|
|
23
|
+
// Read input file
|
|
24
|
+
const inputBytes = await readFile(options.in);
|
|
25
|
+
// Detect MIME type from file extension
|
|
26
|
+
const ext = options.in.split(".").pop()?.toLowerCase();
|
|
27
|
+
let mime = "image/png";
|
|
28
|
+
if (ext === "svg")
|
|
29
|
+
mime = "image/svg+xml";
|
|
30
|
+
else if (ext === "jpg" || ext === "jpeg")
|
|
31
|
+
mime = "image/jpeg";
|
|
32
|
+
else if (ext === "webp")
|
|
33
|
+
mime = "image/webp";
|
|
34
|
+
else if (ext === "avif")
|
|
35
|
+
mime = "image/avif";
|
|
36
|
+
const inputBlob = {
|
|
37
|
+
bytes: inputBytes,
|
|
38
|
+
mime,
|
|
39
|
+
};
|
|
40
|
+
const result = await client.save(inputBlob, options.out);
|
|
41
|
+
console.log(`Image saved successfully!`);
|
|
42
|
+
console.log(`Provider: ${result.provider}`);
|
|
43
|
+
console.log(`Location: ${result.location}`);
|
|
44
|
+
console.log(`Size: ${result.size} bytes`);
|
|
45
|
+
if (result.metadata?.etag) {
|
|
46
|
+
console.log(`ETag: ${result.metadata.etag}`);
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
catch (error) {
|
|
50
|
+
console.error("Error saving image:", error instanceof Error ? error.message : error);
|
|
51
|
+
process.exit(1);
|
|
52
|
+
}
|
|
53
|
+
});
|
|
54
|
+
//# sourceMappingURL=save.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"save.js","sourceRoot":"","sources":["../../../src/cli/commands/save.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGlE,MAAM,CAAC,MAAM,WAAW,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC;KAC3C,WAAW,CAAC,8CAA8C,CAAC;KAC3D,cAAc,CAAC,aAAa,EAAE,iBAAiB,CAAC;KAChD,cAAc,CAAC,qBAAqB,EAAE,uDAAuD,CAAC;KAC9F,MAAM,CAAC,mBAAmB,EAAE,kDAAkD,CAAC;KAC/E,MAAM,CAAC,iBAAiB,EAAE,mCAAmC,CAAC;KAC9D,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,CAAC;KAC3D,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;KAChD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,IAAI,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE9C,mDAAmD;QACnD,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAEpC,kBAAkB;QAClB,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE9C,uCAAuC;QACvC,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC;QACvD,IAAI,IAAI,GAAa,WAAW,CAAC;QACjC,IAAI,GAAG,KAAK,KAAK;YAAE,IAAI,GAAG,eAAe,CAAC;aACrC,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM;YAAE,IAAI,GAAG,YAAY,CAAC;aACzD,IAAI,GAAG,KAAK,MAAM;YAAE,IAAI,GAAG,YAAY,CAAC;aACxC,IAAI,GAAG,KAAK,MAAM;YAAE,IAAI,GAAG,YAAY,CAAC;QAE7C,MAAM,SAAS,GAAG;YAChB,KAAK,EAAE,UAAU;YACjB,IAAI;SACL,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC;QAEzD,OAAO,CAAC,GAAG,CAAC,2BAA2B,CAAC,CAAC;QACzC,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,IAAI,QAAQ,CAAC,CAAC;QAC1C,IAAI,MAAM,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC;YAC1B,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAC;QAC/C,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,qBAAqB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACrF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/text.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,WAAW,SACwB,CAAC"}
|
|
@@ -0,0 +1,143 @@
|
|
|
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 textCommand = new Command("text")
|
|
6
|
+
.description("Add text or captions to images");
|
|
7
|
+
// Add text subcommand
|
|
8
|
+
textCommand
|
|
9
|
+
.command("add")
|
|
10
|
+
.description("Add text to an image")
|
|
11
|
+
.requiredOption("--in <path>", "Input file path")
|
|
12
|
+
.requiredOption("--text <text>", "Text to add")
|
|
13
|
+
.requiredOption("--x <number>", "X position", parseInt)
|
|
14
|
+
.requiredOption("--y <number>", "Y position", parseInt)
|
|
15
|
+
.option("--font <family>", "Font family", "Arial")
|
|
16
|
+
.option("--size <number>", "Font size in pixels", "24")
|
|
17
|
+
.option("--color <color>", "Text color (hex)", "#000000")
|
|
18
|
+
.option("--align <alignment>", "Text alignment: left, center, right", "left")
|
|
19
|
+
.option("--shadow", "Add text shadow")
|
|
20
|
+
.option("--stroke-color <color>", "Stroke color (hex)")
|
|
21
|
+
.option("--stroke-width <number>", "Stroke width", parseFloat)
|
|
22
|
+
.option("--out <path>", "Output file path (if not provided, outputs to stdout)")
|
|
23
|
+
.option("--config <path>", "Path to config file")
|
|
24
|
+
.action(async (options) => {
|
|
25
|
+
try {
|
|
26
|
+
const config = await loadConfig(options.config);
|
|
27
|
+
const client = createClient(config);
|
|
28
|
+
// Read input file
|
|
29
|
+
const inputBytes = await readFile(options.in);
|
|
30
|
+
// Detect MIME type from file extension
|
|
31
|
+
const ext = options.in.split(".").pop()?.toLowerCase();
|
|
32
|
+
let mime = "image/png";
|
|
33
|
+
if (ext === "svg")
|
|
34
|
+
mime = "image/svg+xml";
|
|
35
|
+
else if (ext === "jpg" || ext === "jpeg")
|
|
36
|
+
mime = "image/jpeg";
|
|
37
|
+
else if (ext === "webp")
|
|
38
|
+
mime = "image/webp";
|
|
39
|
+
else if (ext === "avif")
|
|
40
|
+
mime = "image/avif";
|
|
41
|
+
const inputBlob = {
|
|
42
|
+
bytes: inputBytes,
|
|
43
|
+
mime,
|
|
44
|
+
};
|
|
45
|
+
const params = {
|
|
46
|
+
text: options.text,
|
|
47
|
+
x: options.x,
|
|
48
|
+
y: options.y,
|
|
49
|
+
font: options.font,
|
|
50
|
+
size: parseInt(options.size),
|
|
51
|
+
color: options.color,
|
|
52
|
+
align: options.align,
|
|
53
|
+
shadow: options.shadow || false,
|
|
54
|
+
};
|
|
55
|
+
if (options.strokeColor && options.strokeWidth) {
|
|
56
|
+
params.stroke = {
|
|
57
|
+
color: options.strokeColor,
|
|
58
|
+
width: options.strokeWidth,
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
const result = await client.transform({
|
|
62
|
+
blob: inputBlob,
|
|
63
|
+
op: "addText",
|
|
64
|
+
params,
|
|
65
|
+
});
|
|
66
|
+
if (options.out) {
|
|
67
|
+
await writeFile(options.out, result.bytes);
|
|
68
|
+
console.log(`Text added to image: ${options.out}`);
|
|
69
|
+
console.log(`Format: ${result.mime}`);
|
|
70
|
+
}
|
|
71
|
+
else {
|
|
72
|
+
// Write to stdout
|
|
73
|
+
process.stdout.write(result.bytes);
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
console.error("Error adding text:", error instanceof Error ? error.message : error);
|
|
78
|
+
process.exit(1);
|
|
79
|
+
}
|
|
80
|
+
});
|
|
81
|
+
// Add caption subcommand
|
|
82
|
+
textCommand
|
|
83
|
+
.command("caption")
|
|
84
|
+
.description("Add caption bar to an image")
|
|
85
|
+
.requiredOption("--in <path>", "Input file path")
|
|
86
|
+
.requiredOption("--text <text>", "Caption text")
|
|
87
|
+
.option("--position <pos>", "Caption position: top, bottom", "bottom")
|
|
88
|
+
.option("--bg-color <color>", "Background color", "rgba(0, 0, 0, 0.8)")
|
|
89
|
+
.option("--text-color <color>", "Text color", "#ffffff")
|
|
90
|
+
.option("--font-size <number>", "Font size in pixels", "32")
|
|
91
|
+
.option("--padding <number>", "Padding in pixels", "20")
|
|
92
|
+
.option("--out <path>", "Output file path (if not provided, outputs to stdout)")
|
|
93
|
+
.option("--config <path>", "Path to config file")
|
|
94
|
+
.action(async (options) => {
|
|
95
|
+
try {
|
|
96
|
+
const config = await loadConfig(options.config);
|
|
97
|
+
const client = createClient(config);
|
|
98
|
+
// Read input file
|
|
99
|
+
const inputBytes = await readFile(options.in);
|
|
100
|
+
// Detect MIME type from file extension
|
|
101
|
+
const ext = options.in.split(".").pop()?.toLowerCase();
|
|
102
|
+
let mime = "image/png";
|
|
103
|
+
if (ext === "svg")
|
|
104
|
+
mime = "image/svg+xml";
|
|
105
|
+
else if (ext === "jpg" || ext === "jpeg")
|
|
106
|
+
mime = "image/jpeg";
|
|
107
|
+
else if (ext === "webp")
|
|
108
|
+
mime = "image/webp";
|
|
109
|
+
else if (ext === "avif")
|
|
110
|
+
mime = "image/avif";
|
|
111
|
+
const inputBlob = {
|
|
112
|
+
bytes: inputBytes,
|
|
113
|
+
mime,
|
|
114
|
+
};
|
|
115
|
+
const params = {
|
|
116
|
+
text: options.text,
|
|
117
|
+
position: options.position,
|
|
118
|
+
backgroundColor: options.bgColor,
|
|
119
|
+
textColor: options.textColor,
|
|
120
|
+
fontSize: parseInt(options.fontSize),
|
|
121
|
+
padding: parseInt(options.padding),
|
|
122
|
+
};
|
|
123
|
+
const result = await client.transform({
|
|
124
|
+
blob: inputBlob,
|
|
125
|
+
op: "addCaption",
|
|
126
|
+
params,
|
|
127
|
+
});
|
|
128
|
+
if (options.out) {
|
|
129
|
+
await writeFile(options.out, result.bytes);
|
|
130
|
+
console.log(`Caption added to image: ${options.out}`);
|
|
131
|
+
console.log(`Format: ${result.mime}`);
|
|
132
|
+
}
|
|
133
|
+
else {
|
|
134
|
+
// Write to stdout
|
|
135
|
+
process.stdout.write(result.bytes);
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
catch (error) {
|
|
139
|
+
console.error("Error adding caption:", error instanceof Error ? error.message : error);
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
});
|
|
143
|
+
//# sourceMappingURL=text.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"text.js","sourceRoot":"","sources":["../../../src/cli/commands/text.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/transform.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,gBAAgB,SAqDzB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
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 transformCommand = new Command("transform")
|
|
6
|
+
.description("Transform an image (convert, resize, filters, effects, text, etc.)")
|
|
7
|
+
.requiredOption("--in <path>", "Input file path")
|
|
8
|
+
.requiredOption("--op <operation>", "Operation: convert, resize, composite, optimizeSvg, blur, sharpen, grayscale, negate, normalize, threshold, modulate, tint, extend, extract, roundCorners, addText, addCaption, preset")
|
|
9
|
+
.option("--to <format>", "Target format for convert operation")
|
|
10
|
+
.option("--params <json>", "JSON parameters for the operation", "{}")
|
|
11
|
+
.option("--out <path>", "Output file path")
|
|
12
|
+
.option("--config <path>", "Path to config file")
|
|
13
|
+
.action(async (options) => {
|
|
14
|
+
try {
|
|
15
|
+
const config = await loadConfig(options.config);
|
|
16
|
+
const client = createClient(config);
|
|
17
|
+
// Read input file
|
|
18
|
+
const inputBytes = await readFile(options.in);
|
|
19
|
+
// Detect MIME type from file extension
|
|
20
|
+
const ext = options.in.split(".").pop()?.toLowerCase();
|
|
21
|
+
let mime = "image/png";
|
|
22
|
+
if (ext === "svg")
|
|
23
|
+
mime = "image/svg+xml";
|
|
24
|
+
else if (ext === "jpg" || ext === "jpeg")
|
|
25
|
+
mime = "image/jpeg";
|
|
26
|
+
else if (ext === "webp")
|
|
27
|
+
mime = "image/webp";
|
|
28
|
+
else if (ext === "avif")
|
|
29
|
+
mime = "image/avif";
|
|
30
|
+
const inputBlob = {
|
|
31
|
+
bytes: inputBytes,
|
|
32
|
+
mime,
|
|
33
|
+
};
|
|
34
|
+
const params = JSON.parse(options.params);
|
|
35
|
+
if (options.to) {
|
|
36
|
+
params.to = options.to;
|
|
37
|
+
}
|
|
38
|
+
const result = await client.transform({
|
|
39
|
+
blob: inputBlob,
|
|
40
|
+
op: options.op,
|
|
41
|
+
to: options.to,
|
|
42
|
+
params,
|
|
43
|
+
});
|
|
44
|
+
if (options.out) {
|
|
45
|
+
await writeFile(options.out, result.bytes);
|
|
46
|
+
console.log(`Transformed image saved to: ${options.out}`);
|
|
47
|
+
console.log(`Format: ${result.mime}`);
|
|
48
|
+
}
|
|
49
|
+
else {
|
|
50
|
+
// Write to stdout
|
|
51
|
+
process.stdout.write(result.bytes);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
console.error("Error transforming image:", error instanceof Error ? error.message : error);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=transform.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"transform.js","sourceRoot":"","sources":["../../../src/cli/commands/transform.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/upload.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,eAAO,MAAM,aAAa,SAuDtB,CAAC"}
|
|
@@ -0,0 +1,59 @@
|
|
|
1
|
+
import { readFile } from "fs/promises";
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import createClient from "../../index.js";
|
|
4
|
+
import { loadConfig, mergeCliArgs } from "../../config/loader.js";
|
|
5
|
+
export const uploadCommand = new Command("upload")
|
|
6
|
+
.description("Upload an image to cloud storage")
|
|
7
|
+
.requiredOption("--in <path>", "Input file path")
|
|
8
|
+
.requiredOption("--key <key>", "Storage key/path")
|
|
9
|
+
.option("--provider <name>", "Storage provider name (overrides config)")
|
|
10
|
+
.option("--bucket <name>", "S3 bucket name (overrides config)")
|
|
11
|
+
.option("--region <region>", "S3 region (overrides config)")
|
|
12
|
+
.option("--config <path>", "Path to config file")
|
|
13
|
+
.action(async (options) => {
|
|
14
|
+
try {
|
|
15
|
+
let config = await loadConfig(options.config);
|
|
16
|
+
// Merge CLI arguments (they have highest priority)
|
|
17
|
+
config = mergeCliArgs(config, {
|
|
18
|
+
provider: options.provider,
|
|
19
|
+
bucket: options.bucket,
|
|
20
|
+
region: options.region,
|
|
21
|
+
});
|
|
22
|
+
const client = createClient(config);
|
|
23
|
+
// Read input file
|
|
24
|
+
const inputBytes = await readFile(options.in);
|
|
25
|
+
// Detect MIME type from file extension
|
|
26
|
+
const ext = options.in.split(".").pop()?.toLowerCase();
|
|
27
|
+
let mime = "image/png";
|
|
28
|
+
if (ext === "svg")
|
|
29
|
+
mime = "image/svg+xml";
|
|
30
|
+
else if (ext === "jpg" || ext === "jpeg")
|
|
31
|
+
mime = "image/jpeg";
|
|
32
|
+
else if (ext === "webp")
|
|
33
|
+
mime = "image/webp";
|
|
34
|
+
else if (ext === "avif")
|
|
35
|
+
mime = "image/avif";
|
|
36
|
+
const inputBlob = {
|
|
37
|
+
bytes: inputBytes,
|
|
38
|
+
mime,
|
|
39
|
+
};
|
|
40
|
+
const result = await client.upload({
|
|
41
|
+
blob: inputBlob,
|
|
42
|
+
key: options.key,
|
|
43
|
+
provider: options.provider,
|
|
44
|
+
});
|
|
45
|
+
console.log(`Image uploaded successfully!`);
|
|
46
|
+
console.log(`Key: ${result.key}`);
|
|
47
|
+
if (result.url) {
|
|
48
|
+
console.log(`URL: ${result.url}`);
|
|
49
|
+
}
|
|
50
|
+
if (result.etag) {
|
|
51
|
+
console.log(`ETag: ${result.etag}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
catch (error) {
|
|
55
|
+
console.error("Error uploading image:", error instanceof Error ? error.message : error);
|
|
56
|
+
process.exit(1);
|
|
57
|
+
}
|
|
58
|
+
});
|
|
59
|
+
//# sourceMappingURL=upload.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"upload.js","sourceRoot":"","sources":["../../../src/cli/commands/upload.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,YAAY,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,wBAAwB,CAAC;AAGlE,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,OAAO,CAAC,QAAQ,CAAC;KAC/C,WAAW,CAAC,kCAAkC,CAAC;KAC/C,cAAc,CAAC,aAAa,EAAE,iBAAiB,CAAC;KAChD,cAAc,CAAC,aAAa,EAAE,kBAAkB,CAAC;KACjD,MAAM,CAAC,mBAAmB,EAAE,0CAA0C,CAAC;KACvE,MAAM,CAAC,iBAAiB,EAAE,mCAAmC,CAAC;KAC9D,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,CAAC;KAC3D,MAAM,CAAC,iBAAiB,EAAE,qBAAqB,CAAC;KAChD,MAAM,CAAC,KAAK,EAAE,OAAO,EAAE,EAAE;IACxB,IAAI,CAAC;QACH,IAAI,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;QAE9C,mDAAmD;QACnD,MAAM,GAAG,YAAY,CAAC,MAAM,EAAE;YAC5B,QAAQ,EAAE,OAAO,CAAC,QAAQ;YAC1B,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;SACvB,CAAC,CAAC;QAEH,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,CAAC;QAEpC,kBAAkB;QAClB,MAAM,UAAU,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;QAE9C,uCAAuC;QACvC,MAAM,GAAG,GAAG,OAAO,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,WAAW,EAAE,CAAC;QACvD,IAAI,IAAI,GAAa,WAAW,CAAC;QACjC,IAAI,GAAG,KAAK,KAAK;YAAE,IAAI,GAAG,eAAe,CAAC;aACrC,IAAI,GAAG,KAAK,KAAK,IAAI,GAAG,KAAK,MAAM;YAAE,IAAI,GAAG,YAAY,CAAC;aACzD,IAAI,GAAG,KAAK,MAAM;YAAE,IAAI,GAAG,YAAY,CAAC;aACxC,IAAI,GAAG,KAAK,MAAM;YAAE,IAAI,GAAG,YAAY,CAAC;QAE7C,MAAM,SAAS,GAAG;YAChB,KAAK,EAAE,UAAU;YACjB,IAAI;SACL,CAAC;QAEF,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,MAAM,CAAC;YACjC,IAAI,EAAE,SAAS;YACf,GAAG,EAAE,OAAO,CAAC,GAAG;YAChB,QAAQ,EAAE,OAAO,CAAC,QAAQ;SAC3B,CAAC,CAAC;QAEH,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAC5C,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QAClC,IAAI,MAAM,CAAC,GAAG,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,QAAQ,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC;QACpC,CAAC;QACD,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;YAChB,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;QACtC,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;QACxF,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import { Command } from "commander";
|
|
3
|
+
import { generateCommand } from "./commands/generate.js";
|
|
4
|
+
import { transformCommand } from "./commands/transform.js";
|
|
5
|
+
import { saveCommand } from "./commands/save.js";
|
|
6
|
+
import { runCommand } from "./commands/run.js";
|
|
7
|
+
import { configCommand } from "./commands/config.js";
|
|
8
|
+
import { pluginsCommand } from "./commands/plugins.js";
|
|
9
|
+
import { mcpCommand } from "./commands/mcp.js";
|
|
10
|
+
import { filterCommand, presetCommand } from "./commands/filter.js";
|
|
11
|
+
import { textCommand } from "./commands/text.js";
|
|
12
|
+
import { readFile } from "fs/promises";
|
|
13
|
+
import { fileURLToPath } from "url";
|
|
14
|
+
import { dirname, join, resolve } from "path";
|
|
15
|
+
import { homedir } from "os";
|
|
16
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
17
|
+
const __dirname = dirname(__filename);
|
|
18
|
+
// Read package.json for version
|
|
19
|
+
const packageJsonPath = join(__dirname, "../../package.json");
|
|
20
|
+
let version = "0.1.0";
|
|
21
|
+
try {
|
|
22
|
+
const packageJson = JSON.parse(await readFile(packageJsonPath, "utf-8"));
|
|
23
|
+
version = packageJson.version;
|
|
24
|
+
}
|
|
25
|
+
catch {
|
|
26
|
+
// Use default version
|
|
27
|
+
}
|
|
28
|
+
const program = new Command();
|
|
29
|
+
program
|
|
30
|
+
.name("floimg")
|
|
31
|
+
.description("Universal image workflow engine for developers and AI agents")
|
|
32
|
+
.version(version);
|
|
33
|
+
program.addCommand(generateCommand);
|
|
34
|
+
program.addCommand(transformCommand);
|
|
35
|
+
program.addCommand(saveCommand);
|
|
36
|
+
program.addCommand(runCommand);
|
|
37
|
+
program.addCommand(configCommand);
|
|
38
|
+
program.addCommand(pluginsCommand);
|
|
39
|
+
program.addCommand(mcpCommand);
|
|
40
|
+
program.addCommand(filterCommand);
|
|
41
|
+
program.addCommand(presetCommand);
|
|
42
|
+
program.addCommand(textCommand);
|
|
43
|
+
// Enhanced doctor command
|
|
44
|
+
program
|
|
45
|
+
.command("doctor")
|
|
46
|
+
.description("Check floimg configuration and environment")
|
|
47
|
+
.action(async () => {
|
|
48
|
+
console.log("floimg doctor");
|
|
49
|
+
console.log("==============\n");
|
|
50
|
+
console.log("Version:", version);
|
|
51
|
+
console.log("Node version:", process.version);
|
|
52
|
+
// Check for config files
|
|
53
|
+
console.log("\nConfiguration file search:");
|
|
54
|
+
const configPaths = [
|
|
55
|
+
{ path: "./floimg.config.ts", desc: "Local TypeScript config" },
|
|
56
|
+
{ path: "./.floimgrc.json", desc: "Local JSON config" },
|
|
57
|
+
{ path: join(homedir(), ".floimg", "config.json"), desc: "Global config" },
|
|
58
|
+
];
|
|
59
|
+
let foundConfig = false;
|
|
60
|
+
for (const { path, desc } of configPaths) {
|
|
61
|
+
const { access } = await import("fs/promises");
|
|
62
|
+
try {
|
|
63
|
+
await access(resolve(path));
|
|
64
|
+
console.log(` ✓ ${desc}: ${path}`);
|
|
65
|
+
foundConfig = true;
|
|
66
|
+
}
|
|
67
|
+
catch {
|
|
68
|
+
console.log(` ✗ ${desc}: not found`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
if (!foundConfig) {
|
|
72
|
+
console.log("\n💡 Tip: Run 'floimg config init' to set up configuration");
|
|
73
|
+
}
|
|
74
|
+
// Load and display config
|
|
75
|
+
try {
|
|
76
|
+
const { loadConfig } = await import("../config/loader.js");
|
|
77
|
+
const config = await loadConfig();
|
|
78
|
+
console.log("\nCurrent configuration:");
|
|
79
|
+
if (config.save?.s3) {
|
|
80
|
+
console.log(" S3 Storage:");
|
|
81
|
+
console.log(` - Bucket: ${config.save.s3.bucket || "not set"}`);
|
|
82
|
+
console.log(` - Region: ${config.save.s3.region || "not set"}`);
|
|
83
|
+
console.log(` - Endpoint: ${config.save.s3.endpoint || "default (AWS)"}`);
|
|
84
|
+
console.log(` - Credentials: ${config.save.s3.credentials ? "configured" : "not set"}`);
|
|
85
|
+
}
|
|
86
|
+
if (config.ai?.openai) {
|
|
87
|
+
console.log(" OpenAI:");
|
|
88
|
+
console.log(` - API Key: ${config.ai.openai.apiKey ? "set" : "not set"}`);
|
|
89
|
+
}
|
|
90
|
+
if (!config.save && !config.ai) {
|
|
91
|
+
console.log(" No configuration found");
|
|
92
|
+
}
|
|
93
|
+
}
|
|
94
|
+
catch (error) {
|
|
95
|
+
console.log("\n⚠️ Error loading configuration:", error instanceof Error ? error.message : error);
|
|
96
|
+
}
|
|
97
|
+
console.log("\nEnvironment variables:");
|
|
98
|
+
console.log(" AWS/S3:");
|
|
99
|
+
console.log(" - AWS_REGION:", process.env.AWS_REGION || "not set");
|
|
100
|
+
console.log(" - S3_BUCKET:", process.env.S3_BUCKET || "not set");
|
|
101
|
+
console.log(" - AWS_ACCESS_KEY_ID:", process.env.AWS_ACCESS_KEY_ID ? "set" : "not set");
|
|
102
|
+
console.log(" Tigris:");
|
|
103
|
+
console.log(" - TIGRIS_BUCKET_NAME:", process.env.TIGRIS_BUCKET_NAME || "not set");
|
|
104
|
+
console.log(" - TIGRIS_REGION:", process.env.TIGRIS_REGION || "not set");
|
|
105
|
+
console.log(" - TIGRIS_ACCESS_KEY_ID:", process.env.TIGRIS_ACCESS_KEY_ID ? "set" : "not set");
|
|
106
|
+
console.log(" AI:");
|
|
107
|
+
console.log(" - OPENAI_API_KEY:", process.env.OPENAI_API_KEY ? "set" : "not set");
|
|
108
|
+
// Check plugins
|
|
109
|
+
console.log("\nInstalled plugins:");
|
|
110
|
+
const plugins = [
|
|
111
|
+
"@teamflojo/floimg-quickchart",
|
|
112
|
+
"@teamflojo/floimg-d3",
|
|
113
|
+
"@teamflojo/floimg-mermaid",
|
|
114
|
+
"@teamflojo/floimg-qr",
|
|
115
|
+
"@teamflojo/floimg-screenshot",
|
|
116
|
+
];
|
|
117
|
+
let hasPlugins = false;
|
|
118
|
+
for (const plugin of plugins) {
|
|
119
|
+
try {
|
|
120
|
+
await import(plugin);
|
|
121
|
+
console.log(` ✓ ${plugin}`);
|
|
122
|
+
hasPlugins = true;
|
|
123
|
+
}
|
|
124
|
+
catch {
|
|
125
|
+
// Not installed
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
if (!hasPlugins) {
|
|
129
|
+
console.log(" (none installed)");
|
|
130
|
+
console.log("\n💡 Install plugins: floimg plugins");
|
|
131
|
+
}
|
|
132
|
+
console.log("\n✨ Ready to use! Try:");
|
|
133
|
+
console.log(" floimg plugins # See available plugins");
|
|
134
|
+
console.log(" floimg config init # Interactive setup");
|
|
135
|
+
console.log(" floimg mcp install # Set up MCP for Claude Code");
|
|
136
|
+
console.log(" floimg generate --generator shapes --params '{\"type\":\"gradient\"}' --out test.svg");
|
|
137
|
+
});
|
|
138
|
+
program.parse();
|
|
139
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { FloimgConfig } from "../core/types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Helper to define floimg configuration with TypeScript support
|
|
4
|
+
*/
|
|
5
|
+
export declare function defineConfig(config: FloimgConfig): FloimgConfig;
|
|
6
|
+
/**
|
|
7
|
+
* Load configuration from a file or object
|
|
8
|
+
*/
|
|
9
|
+
export declare function loadConfig(configPath?: string): Promise<FloimgConfig | undefined>;
|
|
10
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD;;GAEG;AACH,wBAAgB,YAAY,CAAC,MAAM,EAAE,YAAY,GAAG,YAAY,CAE/D;AAED;;GAEG;AACH,wBAAsB,UAAU,CAC9B,UAAU,CAAC,EAAE,MAAM,GAClB,OAAO,CAAC,YAAY,GAAG,SAAS,CAAC,CA8BnC"}
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Helper to define floimg configuration with TypeScript support
|
|
3
|
+
*/
|
|
4
|
+
export function defineConfig(config) {
|
|
5
|
+
return config;
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Load configuration from a file or object
|
|
9
|
+
*/
|
|
10
|
+
export async function loadConfig(configPath) {
|
|
11
|
+
if (!configPath) {
|
|
12
|
+
// Try to find config in common locations
|
|
13
|
+
const possiblePaths = [
|
|
14
|
+
"./floimg.config.ts",
|
|
15
|
+
"./floimg.config.js",
|
|
16
|
+
"./floimg.config.mjs",
|
|
17
|
+
];
|
|
18
|
+
for (const path of possiblePaths) {
|
|
19
|
+
try {
|
|
20
|
+
const module = await import(path);
|
|
21
|
+
return module.default || module;
|
|
22
|
+
}
|
|
23
|
+
catch {
|
|
24
|
+
// Continue to next path
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
return undefined;
|
|
28
|
+
}
|
|
29
|
+
// Load from specified path
|
|
30
|
+
try {
|
|
31
|
+
const module = await import(configPath);
|
|
32
|
+
return module.default || module;
|
|
33
|
+
}
|
|
34
|
+
catch (error) {
|
|
35
|
+
throw new Error(`Failed to load config from ${configPath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
36
|
+
}
|
|
37
|
+
}
|
|
38
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/config/index.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,MAAoB;IAC/C,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,UAAmB;IAEnB,IAAI,CAAC,UAAU,EAAE,CAAC;QAChB,yCAAyC;QACzC,MAAM,aAAa,GAAG;YACpB,oBAAoB;YACpB,oBAAoB;YACpB,qBAAqB;SACtB,CAAC;QAEF,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,IAAI,CAAC;gBACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,IAAI,CAAC,CAAC;gBAClC,OAAO,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;YAClC,CAAC;YAAC,MAAM,CAAC;gBACP,wBAAwB;YAC1B,CAAC;QACH,CAAC;QAED,OAAO,SAAS,CAAC;IACnB,CAAC;IAED,2BAA2B;IAC3B,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,UAAU,CAAC,CAAC;QACxC,OAAO,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC;IAClC,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CACb,8BAA8B,UAAU,KAAK,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CACtG,CAAC;IACJ,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { FloimgConfig } from "../core/types.js";
|
|
2
|
+
/**
|
|
3
|
+
* Load configuration from multiple sources with priority:
|
|
4
|
+
* 1. Explicit config file path (if provided)
|
|
5
|
+
* 2. Config file in current directory
|
|
6
|
+
* 3. Global config file in ~/.floimg/
|
|
7
|
+
* 4. Environment variables
|
|
8
|
+
*/
|
|
9
|
+
export declare function loadConfig(explicitPath?: string): Promise<FloimgConfig>;
|
|
10
|
+
/**
|
|
11
|
+
* Merge CLI arguments into config (CLI args have highest priority)
|
|
12
|
+
*/
|
|
13
|
+
export declare function mergeCliArgs(config: FloimgConfig, cliArgs: {
|
|
14
|
+
bucket?: string;
|
|
15
|
+
region?: string;
|
|
16
|
+
provider?: string;
|
|
17
|
+
[key: string]: unknown;
|
|
18
|
+
}): FloimgConfig;
|
|
19
|
+
/**
|
|
20
|
+
* Save config to global config file
|
|
21
|
+
*/
|
|
22
|
+
export declare function saveGlobalConfig(config: FloimgConfig): Promise<void>;
|
|
23
|
+
//# sourceMappingURL=loader.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAkBrD;;;;;;GAMG;AACH,wBAAsB,UAAU,CAC9B,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,YAAY,CAAC,CAyCvB;AAiGD;;GAEG;AACH,wBAAgB,YAAY,CAC1B,MAAM,EAAE,YAAY,EACpB,OAAO,EAAE;IACP,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC;CACxB,GACA,YAAY,CAwBd;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CAO1E"}
|