@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.
Files changed (134) hide show
  1. package/LICENSE +21 -0
  2. package/dist/cli/commands/config.d.ts +3 -0
  3. package/dist/cli/commands/config.d.ts.map +1 -0
  4. package/dist/cli/commands/config.js +165 -0
  5. package/dist/cli/commands/config.js.map +1 -0
  6. package/dist/cli/commands/filter.d.ts +4 -0
  7. package/dist/cli/commands/filter.d.ts.map +1 -0
  8. package/dist/cli/commands/filter.js +102 -0
  9. package/dist/cli/commands/filter.js.map +1 -0
  10. package/dist/cli/commands/generate.d.ts +3 -0
  11. package/dist/cli/commands/generate.d.ts.map +1 -0
  12. package/dist/cli/commands/generate.js +49 -0
  13. package/dist/cli/commands/generate.js.map +1 -0
  14. package/dist/cli/commands/mcp.d.ts +3 -0
  15. package/dist/cli/commands/mcp.d.ts.map +1 -0
  16. package/dist/cli/commands/mcp.js +88 -0
  17. package/dist/cli/commands/mcp.js.map +1 -0
  18. package/dist/cli/commands/plugins.d.ts +3 -0
  19. package/dist/cli/commands/plugins.d.ts.map +1 -0
  20. package/dist/cli/commands/plugins.js +66 -0
  21. package/dist/cli/commands/plugins.js.map +1 -0
  22. package/dist/cli/commands/run.d.ts +3 -0
  23. package/dist/cli/commands/run.d.ts.map +1 -0
  24. package/dist/cli/commands/run.js +45 -0
  25. package/dist/cli/commands/run.js.map +1 -0
  26. package/dist/cli/commands/save.d.ts +3 -0
  27. package/dist/cli/commands/save.d.ts.map +1 -0
  28. package/dist/cli/commands/save.js +54 -0
  29. package/dist/cli/commands/save.js.map +1 -0
  30. package/dist/cli/commands/text.d.ts +3 -0
  31. package/dist/cli/commands/text.d.ts.map +1 -0
  32. package/dist/cli/commands/text.js +143 -0
  33. package/dist/cli/commands/text.js.map +1 -0
  34. package/dist/cli/commands/transform.d.ts +3 -0
  35. package/dist/cli/commands/transform.d.ts.map +1 -0
  36. package/dist/cli/commands/transform.js +59 -0
  37. package/dist/cli/commands/transform.js.map +1 -0
  38. package/dist/cli/commands/upload.d.ts +3 -0
  39. package/dist/cli/commands/upload.d.ts.map +1 -0
  40. package/dist/cli/commands/upload.js +59 -0
  41. package/dist/cli/commands/upload.js.map +1 -0
  42. package/dist/cli/index.d.ts +3 -0
  43. package/dist/cli/index.d.ts.map +1 -0
  44. package/dist/cli/index.js +139 -0
  45. package/dist/cli/index.js.map +1 -0
  46. package/dist/config/index.d.ts +10 -0
  47. package/dist/config/index.d.ts.map +1 -0
  48. package/dist/config/index.js +38 -0
  49. package/dist/config/index.js.map +1 -0
  50. package/dist/config/loader.d.ts +23 -0
  51. package/dist/config/loader.d.ts.map +1 -0
  52. package/dist/config/loader.js +189 -0
  53. package/dist/config/loader.js.map +1 -0
  54. package/dist/core/client.d.ts +63 -0
  55. package/dist/core/client.d.ts.map +1 -0
  56. package/dist/core/client.js +318 -0
  57. package/dist/core/client.js.map +1 -0
  58. package/dist/core/errors.d.ts +38 -0
  59. package/dist/core/errors.d.ts.map +1 -0
  60. package/dist/core/errors.js +75 -0
  61. package/dist/core/errors.js.map +1 -0
  62. package/dist/core/logger.d.ts +12 -0
  63. package/dist/core/logger.d.ts.map +1 -0
  64. package/dist/core/logger.js +26 -0
  65. package/dist/core/logger.js.map +1 -0
  66. package/dist/core/pipeline-runner.d.ts +64 -0
  67. package/dist/core/pipeline-runner.d.ts.map +1 -0
  68. package/dist/core/pipeline-runner.js +109 -0
  69. package/dist/core/pipeline-runner.js.map +1 -0
  70. package/dist/core/types.d.ts +392 -0
  71. package/dist/core/types.d.ts.map +1 -0
  72. package/dist/core/types.js +5 -0
  73. package/dist/core/types.js.map +1 -0
  74. package/dist/index.d.ts +18 -0
  75. package/dist/index.d.ts.map +1 -0
  76. package/dist/index.js +49 -0
  77. package/dist/index.js.map +1 -0
  78. package/dist/mcp/server.d.ts +3 -0
  79. package/dist/mcp/server.d.ts.map +1 -0
  80. package/dist/mcp/server.js +731 -0
  81. package/dist/mcp/server.js.map +1 -0
  82. package/dist/providers/ai/index.d.ts +3 -0
  83. package/dist/providers/ai/index.d.ts.map +1 -0
  84. package/dist/providers/ai/index.js +2 -0
  85. package/dist/providers/ai/index.js.map +1 -0
  86. package/dist/providers/ai/openai.d.ts +44 -0
  87. package/dist/providers/ai/openai.d.ts.map +1 -0
  88. package/dist/providers/ai/openai.js +133 -0
  89. package/dist/providers/ai/openai.js.map +1 -0
  90. package/dist/providers/save/FsSaveProvider.d.ts +20 -0
  91. package/dist/providers/save/FsSaveProvider.d.ts.map +1 -0
  92. package/dist/providers/save/FsSaveProvider.js +34 -0
  93. package/dist/providers/save/FsSaveProvider.js.map +1 -0
  94. package/dist/providers/save/S3SaveProvider.d.ts +26 -0
  95. package/dist/providers/save/S3SaveProvider.d.ts.map +1 -0
  96. package/dist/providers/save/S3SaveProvider.js +42 -0
  97. package/dist/providers/save/S3SaveProvider.js.map +1 -0
  98. package/dist/providers/store/fs.d.ts +20 -0
  99. package/dist/providers/store/fs.d.ts.map +1 -0
  100. package/dist/providers/store/fs.js +42 -0
  101. package/dist/providers/store/fs.js.map +1 -0
  102. package/dist/providers/store/index.d.ts +3 -0
  103. package/dist/providers/store/index.d.ts.map +1 -0
  104. package/dist/providers/store/index.js +3 -0
  105. package/dist/providers/store/index.js.map +1 -0
  106. package/dist/providers/store/s3.d.ts +62 -0
  107. package/dist/providers/store/s3.d.ts.map +1 -0
  108. package/dist/providers/store/s3.js +92 -0
  109. package/dist/providers/store/s3.js.map +1 -0
  110. package/dist/providers/svg/index.d.ts +2 -0
  111. package/dist/providers/svg/index.d.ts.map +1 -0
  112. package/dist/providers/svg/index.js +2 -0
  113. package/dist/providers/svg/index.js.map +1 -0
  114. package/dist/providers/svg/shapes.d.ts +18 -0
  115. package/dist/providers/svg/shapes.d.ts.map +1 -0
  116. package/dist/providers/svg/shapes.js +161 -0
  117. package/dist/providers/svg/shapes.js.map +1 -0
  118. package/dist/providers/transform/index.d.ts +2 -0
  119. package/dist/providers/transform/index.d.ts.map +1 -0
  120. package/dist/providers/transform/index.js +2 -0
  121. package/dist/providers/transform/index.js.map +1 -0
  122. package/dist/providers/transform/presets.d.ts +44 -0
  123. package/dist/providers/transform/presets.d.ts.map +1 -0
  124. package/dist/providers/transform/presets.js +205 -0
  125. package/dist/providers/transform/presets.js.map +1 -0
  126. package/dist/providers/transform/sharp.d.ts +64 -0
  127. package/dist/providers/transform/sharp.d.ts.map +1 -0
  128. package/dist/providers/transform/sharp.js +732 -0
  129. package/dist/providers/transform/sharp.js.map +1 -0
  130. package/dist/providers/transform/text.d.ts +38 -0
  131. package/dist/providers/transform/text.d.ts.map +1 -0
  132. package/dist/providers/transform/text.js +116 -0
  133. package/dist/providers/transform/text.js.map +1 -0
  134. package/package.json +84 -0
@@ -0,0 +1,189 @@
1
+ import { readFile, access } from "fs/promises";
2
+ import { join } from "path";
3
+ import { homedir } from "os";
4
+ /**
5
+ * Configuration search paths (in order of priority)
6
+ */
7
+ const CONFIG_SEARCH_PATHS = [
8
+ // 1. Current directory configs
9
+ "./floimg.config.ts",
10
+ "./floimg.config.js",
11
+ "./floimg.config.mjs",
12
+ "./.floimgrc.json",
13
+ "./.floimgrc",
14
+ // 2. Global config in home directory
15
+ join(homedir(), ".floimg", "config.json"),
16
+ join(homedir(), ".floimgrc.json"),
17
+ ];
18
+ /**
19
+ * Load configuration from multiple sources with priority:
20
+ * 1. Explicit config file path (if provided)
21
+ * 2. Config file in current directory
22
+ * 3. Global config file in ~/.floimg/
23
+ * 4. Environment variables
24
+ */
25
+ export async function loadConfig(explicitPath) {
26
+ const config = {};
27
+ // Step 1: Try explicit path if provided
28
+ if (explicitPath) {
29
+ try {
30
+ const loadedConfig = await loadConfigFile(explicitPath);
31
+ Object.assign(config, loadedConfig);
32
+ }
33
+ catch (error) {
34
+ throw new Error(`Failed to load config from ${explicitPath}: ${error instanceof Error ? error.message : String(error)}`);
35
+ }
36
+ }
37
+ else {
38
+ // Step 2: Search for config files
39
+ for (const path of CONFIG_SEARCH_PATHS) {
40
+ try {
41
+ const exists = await fileExists(path);
42
+ if (exists) {
43
+ const loadedConfig = await loadConfigFile(path);
44
+ Object.assign(config, loadedConfig);
45
+ break; // Use first found config
46
+ }
47
+ }
48
+ catch {
49
+ // Continue to next path
50
+ }
51
+ }
52
+ }
53
+ // Step 3: Layer in environment variables as fallbacks
54
+ const envConfig = loadEnvConfig();
55
+ // Merge env config but don't override existing config
56
+ if (!config.save && envConfig.save) {
57
+ config.save = envConfig.save;
58
+ }
59
+ if (!config.ai && envConfig.ai) {
60
+ config.ai = envConfig.ai;
61
+ }
62
+ return config;
63
+ }
64
+ /**
65
+ * Load config from a specific file
66
+ */
67
+ async function loadConfigFile(path) {
68
+ if (path.endsWith('.json')) {
69
+ // JSON config
70
+ const content = await readFile(path, 'utf-8');
71
+ return JSON.parse(content);
72
+ }
73
+ else if (path.endsWith('.ts') || path.endsWith('.js') || path.endsWith('.mjs')) {
74
+ // TypeScript/JavaScript config - convert to absolute file:// URL for import()
75
+ const { resolve } = await import("path");
76
+ const absolutePath = resolve(process.cwd(), path);
77
+ const fileUrl = `file://${absolutePath}`;
78
+ const module = await import(fileUrl);
79
+ return module.default || module;
80
+ }
81
+ else {
82
+ // Try as JSON first
83
+ try {
84
+ const content = await readFile(path, 'utf-8');
85
+ return JSON.parse(content);
86
+ }
87
+ catch {
88
+ // Try as module - convert to absolute file:// URL
89
+ const { resolve } = await import("path");
90
+ const absolutePath = resolve(process.cwd(), path);
91
+ const fileUrl = `file://${absolutePath}`;
92
+ const module = await import(fileUrl);
93
+ return module.default || module;
94
+ }
95
+ }
96
+ }
97
+ /**
98
+ * Load configuration from environment variables
99
+ * Supports multiple S3-compatible services via environment variables
100
+ */
101
+ function loadEnvConfig() {
102
+ const config = {};
103
+ // S3-compatible storage configuration
104
+ // Support standard AWS env vars, plus Tigris-specific ones
105
+ const hasS3Config = process.env.S3_BUCKET ||
106
+ process.env.AWS_REGION ||
107
+ process.env.TIGRIS_BUCKET_NAME ||
108
+ process.env.TIGRIS_ACCESS_KEY_ID;
109
+ if (hasS3Config) {
110
+ const bucket = process.env.TIGRIS_BUCKET_NAME || process.env.S3_BUCKET;
111
+ const region = process.env.TIGRIS_REGION || process.env.AWS_REGION || 'auto';
112
+ const accessKeyId = process.env.TIGRIS_ACCESS_KEY_ID || process.env.AWS_ACCESS_KEY_ID;
113
+ const secretAccessKey = process.env.TIGRIS_SECRET_ACCESS_KEY || process.env.AWS_SECRET_ACCESS_KEY;
114
+ const endpoint = process.env.S3_ENDPOINT ||
115
+ (process.env.TIGRIS_BUCKET_NAME ? 'https://fly.storage.tigris.dev' : undefined);
116
+ config.save = {
117
+ default: 's3',
118
+ s3: {
119
+ bucket,
120
+ region,
121
+ ...(endpoint && { endpoint }),
122
+ ...(accessKeyId && secretAccessKey && {
123
+ credentials: {
124
+ accessKeyId,
125
+ secretAccessKey,
126
+ },
127
+ }),
128
+ },
129
+ };
130
+ }
131
+ // AI configuration
132
+ if (process.env.OPENAI_API_KEY) {
133
+ config.ai = {
134
+ default: 'openai',
135
+ openai: {
136
+ apiKey: process.env.OPENAI_API_KEY,
137
+ },
138
+ };
139
+ }
140
+ return config;
141
+ }
142
+ /**
143
+ * Check if a file exists
144
+ */
145
+ async function fileExists(path) {
146
+ try {
147
+ await access(path);
148
+ return true;
149
+ }
150
+ catch {
151
+ return false;
152
+ }
153
+ }
154
+ /**
155
+ * Merge CLI arguments into config (CLI args have highest priority)
156
+ */
157
+ export function mergeCliArgs(config, cliArgs) {
158
+ const merged = { ...config };
159
+ // Override S3 settings from CLI
160
+ if (cliArgs.bucket || cliArgs.region) {
161
+ merged.save = {
162
+ ...merged.save,
163
+ s3: {
164
+ ...merged.save?.s3,
165
+ ...(cliArgs.bucket && { bucket: cliArgs.bucket }),
166
+ ...(cliArgs.region && { region: cliArgs.region }),
167
+ },
168
+ };
169
+ }
170
+ // Override storage provider
171
+ if (cliArgs.provider) {
172
+ merged.save = {
173
+ ...merged.save,
174
+ default: cliArgs.provider,
175
+ };
176
+ }
177
+ return merged;
178
+ }
179
+ /**
180
+ * Save config to global config file
181
+ */
182
+ export async function saveGlobalConfig(config) {
183
+ const { mkdir, writeFile } = await import("fs/promises");
184
+ const configDir = join(homedir(), ".floimg");
185
+ const configPath = join(configDir, "config.json");
186
+ await mkdir(configDir, { recursive: true });
187
+ await writeFile(configPath, JSON.stringify(config, null, 2), "utf-8");
188
+ }
189
+ //# sourceMappingURL=loader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,63 @@
1
+ import type { FloimgConfig, ImageGenerator, TransformProvider, SaveProvider, GenerateInput, TransformInput, SaveInput, ImageBlob, SaveResult, Pipeline, PipelineResult, ClientCapabilities } from "./types.js";
2
+ /**
3
+ * Main floimg client for image generation, transformation, and upload
4
+ */
5
+ export declare class Floimg {
6
+ private logger;
7
+ private config;
8
+ /**
9
+ * Registry of available providers
10
+ */
11
+ providers: {
12
+ generators: Record<string, ImageGenerator>;
13
+ transform: Record<string, TransformProvider>;
14
+ save: Record<string, SaveProvider>;
15
+ };
16
+ constructor(config?: FloimgConfig);
17
+ /**
18
+ * Generate an image using any registered generator
19
+ */
20
+ generate(input: GenerateInput): Promise<ImageBlob>;
21
+ /**
22
+ * Transform an image (convert format, resize, etc.)
23
+ */
24
+ transform(input: TransformInput): Promise<ImageBlob>;
25
+ /**
26
+ * Save an image (filesystem or cloud) with smart destination routing
27
+ */
28
+ save(blob: ImageBlob, destination: string | SaveInput): Promise<SaveResult>;
29
+ /**
30
+ * Parse destination string or object into provider and path
31
+ */
32
+ private parseDestination;
33
+ /**
34
+ * Run a declarative pipeline of operations
35
+ *
36
+ * Steps are analyzed for dependencies and executed in parallel where possible.
37
+ * The `concurrency` option controls maximum parallel steps (default: Infinity).
38
+ */
39
+ run(pipeline: Pipeline): Promise<PipelineResult[]>;
40
+ /**
41
+ * Execute a single pipeline step
42
+ * @internal
43
+ */
44
+ private executeStep;
45
+ /**
46
+ * Get capabilities of all registered providers
47
+ * This allows consumers to discover available generators, transforms, and save providers
48
+ */
49
+ getCapabilities(): ClientCapabilities;
50
+ /**
51
+ * Register a custom generator
52
+ */
53
+ registerGenerator(generator: ImageGenerator): void;
54
+ /**
55
+ * Register a custom transform provider
56
+ */
57
+ registerTransformProvider(provider: TransformProvider): void;
58
+ /**
59
+ * Register a custom save provider
60
+ */
61
+ registerSaveProvider(provider: SaveProvider): void;
62
+ }
63
+ //# sourceMappingURL=client.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.d.ts","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,YAAY,EACZ,cAAc,EACd,iBAAiB,EAEjB,YAAY,EACZ,aAAa,EACb,cAAc,EAEd,SAAS,EACT,SAAS,EAET,UAAU,EACV,QAAQ,EAER,cAAc,EACd,kBAAkB,EAInB,MAAM,YAAY,CAAC;AAapB;;GAEG;AACH,qBAAa,MAAM;IACjB,OAAO,CAAC,MAAM,CAAS;IACvB,OAAO,CAAC,MAAM,CAAe;IAE7B;;OAEG;IACI,SAAS,EAAE;QAChB,UAAU,EAAE,MAAM,CAAC,MAAM,EAAE,cAAc,CAAC,CAAC;QAC3C,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,iBAAiB,CAAC,CAAC;QAC7C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;KACpC,CAAC;gBAEU,MAAM,GAAE,YAAiB;IAiBrC;;OAEG;IACG,QAAQ,CAAC,KAAK,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC;IAsBxD;;OAEG;IACG,SAAS,CAAC,KAAK,EAAE,cAAc,GAAG,OAAO,CAAC,SAAS,CAAC;IAwK1D;;OAEG;IACG,IAAI,CACR,IAAI,EAAE,SAAS,EACf,WAAW,EAAE,MAAM,GAAG,SAAS,GAC9B,OAAO,CAAC,UAAU,CAAC;IAkBtB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAkCxB;;;;;OAKG;IACG,GAAG,CAAC,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC;IA4CxD;;;OAGG;YACW,WAAW;IA+CzB;;;OAGG;IACH,eAAe,IAAI,kBAAkB;IA2BrC;;OAEG;IACH,iBAAiB,CAAC,SAAS,EAAE,cAAc,GAAG,IAAI;IAKlD;;OAEG;IACH,yBAAyB,CAAC,QAAQ,EAAE,iBAAiB,GAAG,IAAI;IAK5D;;OAEG;IACH,oBAAoB,CAAC,QAAQ,EAAE,YAAY,GAAG,IAAI;CAInD"}
@@ -0,0 +1,318 @@
1
+ import { Logger } from "./logger.js";
2
+ import { ProviderNotFoundError, ConfigurationError, } from "./errors.js";
3
+ import { buildDependencyGraph, computeExecutionWaves, executeWithConcurrency, } from "./pipeline-runner.js";
4
+ /**
5
+ * Main floimg client for image generation, transformation, and upload
6
+ */
7
+ export class Floimg {
8
+ logger;
9
+ config;
10
+ /**
11
+ * Registry of available providers
12
+ */
13
+ providers;
14
+ constructor(config = {}) {
15
+ this.config = {
16
+ cacheDir: ".floimg",
17
+ verbose: false,
18
+ ...config,
19
+ };
20
+ this.logger = new Logger(this.config.verbose);
21
+ this.providers = {
22
+ generators: {},
23
+ transform: {},
24
+ save: {},
25
+ };
26
+ this.logger.info("Floimg client initialized");
27
+ }
28
+ /**
29
+ * Generate an image using any registered generator
30
+ */
31
+ async generate(input) {
32
+ const { generator, params = {} } = input;
33
+ // Use default generator if configured
34
+ const generatorName = generator || this.config.generators?.default;
35
+ if (!generatorName) {
36
+ throw new ConfigurationError("No generator specified and no default configured");
37
+ }
38
+ this.logger.info(`Generating image with generator: ${generatorName}`, params);
39
+ const imageGenerator = this.providers.generators[generatorName];
40
+ if (!imageGenerator) {
41
+ throw new ProviderNotFoundError("generator", generatorName);
42
+ }
43
+ return imageGenerator.generate(params);
44
+ }
45
+ /**
46
+ * Transform an image (convert format, resize, etc.)
47
+ */
48
+ async transform(input) {
49
+ const { blob, op, to, params = {} } = input;
50
+ this.logger.info(`Transforming image with operation: ${op}`);
51
+ // Get default transform provider
52
+ const providerName = this.config.transform?.default || "sharp";
53
+ const transformProvider = this.providers.transform[providerName];
54
+ if (!transformProvider) {
55
+ throw new ProviderNotFoundError("transform", providerName);
56
+ }
57
+ switch (op) {
58
+ case "convert":
59
+ if (!to) {
60
+ throw new ConfigurationError("Convert operation requires 'to' parameter");
61
+ }
62
+ return transformProvider.convert(blob, to);
63
+ case "resize":
64
+ if (!transformProvider.resize) {
65
+ throw new ConfigurationError(`Transform provider "${providerName}" does not support resize operation`);
66
+ }
67
+ return transformProvider.resize(blob, params);
68
+ case "composite":
69
+ if (!transformProvider.composite) {
70
+ throw new ConfigurationError(`Transform provider "${providerName}" does not support composite operation`);
71
+ }
72
+ return transformProvider.composite(blob, params.overlays);
73
+ case "optimizeSvg":
74
+ if (!transformProvider.optimizeSvg) {
75
+ throw new ConfigurationError(`Transform provider "${providerName}" does not support optimizeSvg operation`);
76
+ }
77
+ return transformProvider.optimizeSvg(blob);
78
+ // Filter operations
79
+ case "blur":
80
+ if (!transformProvider.blur) {
81
+ throw new ConfigurationError(`Transform provider "${providerName}" does not support blur operation`);
82
+ }
83
+ return transformProvider.blur(blob, params.sigma);
84
+ case "sharpen":
85
+ if (!transformProvider.sharpen) {
86
+ throw new ConfigurationError(`Transform provider "${providerName}" does not support sharpen operation`);
87
+ }
88
+ return transformProvider.sharpen(blob, params);
89
+ case "grayscale":
90
+ if (!transformProvider.grayscale) {
91
+ throw new ConfigurationError(`Transform provider "${providerName}" does not support grayscale operation`);
92
+ }
93
+ return transformProvider.grayscale(blob);
94
+ case "negate":
95
+ if (!transformProvider.negate) {
96
+ throw new ConfigurationError(`Transform provider "${providerName}" does not support negate operation`);
97
+ }
98
+ return transformProvider.negate(blob);
99
+ case "normalize":
100
+ if (!transformProvider.normalize) {
101
+ throw new ConfigurationError(`Transform provider "${providerName}" does not support normalize operation`);
102
+ }
103
+ return transformProvider.normalize(blob);
104
+ case "threshold":
105
+ if (!transformProvider.threshold) {
106
+ throw new ConfigurationError(`Transform provider "${providerName}" does not support threshold operation`);
107
+ }
108
+ return transformProvider.threshold(blob, params.value);
109
+ case "modulate":
110
+ if (!transformProvider.modulate) {
111
+ throw new ConfigurationError(`Transform provider "${providerName}" does not support modulate operation`);
112
+ }
113
+ return transformProvider.modulate(blob, params);
114
+ case "tint":
115
+ if (!transformProvider.tint) {
116
+ throw new ConfigurationError(`Transform provider "${providerName}" does not support tint operation`);
117
+ }
118
+ return transformProvider.tint(blob, params.color);
119
+ // Border & frame operations
120
+ case "extend":
121
+ if (!transformProvider.extend) {
122
+ throw new ConfigurationError(`Transform provider "${providerName}" does not support extend operation`);
123
+ }
124
+ return transformProvider.extend(blob, params);
125
+ case "extract":
126
+ if (!transformProvider.extract) {
127
+ throw new ConfigurationError(`Transform provider "${providerName}" does not support extract operation`);
128
+ }
129
+ return transformProvider.extract(blob, params);
130
+ case "roundCorners":
131
+ if (!transformProvider.roundCorners) {
132
+ throw new ConfigurationError(`Transform provider "${providerName}" does not support roundCorners operation`);
133
+ }
134
+ return transformProvider.roundCorners(blob, params.radius);
135
+ // Text operations
136
+ case "addText":
137
+ if (!transformProvider.addText) {
138
+ throw new ConfigurationError(`Transform provider "${providerName}" does not support addText operation`);
139
+ }
140
+ return transformProvider.addText(blob, params);
141
+ case "addCaption":
142
+ if (!transformProvider.addCaption) {
143
+ throw new ConfigurationError(`Transform provider "${providerName}" does not support addCaption operation`);
144
+ }
145
+ return transformProvider.addCaption(blob, params);
146
+ // Preset filters
147
+ case "preset":
148
+ if (!transformProvider.preset) {
149
+ throw new ConfigurationError(`Transform provider "${providerName}" does not support preset operation`);
150
+ }
151
+ return transformProvider.preset(blob, params.name);
152
+ default:
153
+ throw new ConfigurationError(`Unknown transform operation: ${op}`);
154
+ }
155
+ }
156
+ /**
157
+ * Save an image (filesystem or cloud) with smart destination routing
158
+ */
159
+ async save(blob, destination) {
160
+ // Parse destination
161
+ const parsed = this.parseDestination(destination);
162
+ this.logger.info(`Saving image with provider: ${parsed.provider} to ${parsed.path}`);
163
+ // Get save provider
164
+ const saveProvider = this.providers.save[parsed.provider];
165
+ if (!saveProvider) {
166
+ throw new ProviderNotFoundError("save", parsed.provider);
167
+ }
168
+ return saveProvider.save({
169
+ blob,
170
+ ...parsed,
171
+ });
172
+ }
173
+ /**
174
+ * Parse destination string or object into provider and path
175
+ */
176
+ parseDestination(destination) {
177
+ // If it's an object, use it directly
178
+ if (typeof destination === "object") {
179
+ return {
180
+ provider: destination.provider || this.config.save?.default || "fs",
181
+ ...destination,
182
+ };
183
+ }
184
+ // Protocol-based routing (s3://, r2://, file://)
185
+ if (destination.includes("://")) {
186
+ const [protocol, rest] = destination.split("://");
187
+ return { provider: protocol, path: rest };
188
+ }
189
+ // Local path detection (starts with ./, /, ../)
190
+ if (destination.startsWith("./") ||
191
+ destination.startsWith("/") ||
192
+ destination.startsWith("../")) {
193
+ return { provider: "fs", path: destination };
194
+ }
195
+ // Use default provider from config
196
+ const defaultProvider = this.config.save?.default || "fs";
197
+ return { provider: defaultProvider, path: destination };
198
+ }
199
+ /**
200
+ * Run a declarative pipeline of operations
201
+ *
202
+ * Steps are analyzed for dependencies and executed in parallel where possible.
203
+ * The `concurrency` option controls maximum parallel steps (default: Infinity).
204
+ */
205
+ async run(pipeline) {
206
+ this.logger.info(`Running pipeline: ${pipeline.name || "unnamed"}`);
207
+ const results = [];
208
+ const variables = new Map();
209
+ const concurrency = pipeline.concurrency ?? Infinity;
210
+ // Build dependency graph and compute execution waves
211
+ const nodes = buildDependencyGraph(pipeline.steps);
212
+ const waves = computeExecutionWaves(nodes);
213
+ this.logger.debug(`Pipeline has ${waves.length} execution waves, concurrency: ${concurrency}`);
214
+ // Execute waves sequentially, steps within each wave in parallel
215
+ for (const wave of waves) {
216
+ this.logger.debug(`Executing wave with ${wave.steps.length} steps`);
217
+ // Execute all steps in this wave in parallel (bounded by concurrency)
218
+ const waveResults = await executeWithConcurrency(wave.steps.map((node) => () => this.executeStep(node.step, variables)), concurrency);
219
+ // Collect results and update variables map
220
+ for (let i = 0; i < wave.steps.length; i++) {
221
+ const node = wave.steps[i];
222
+ const result = waveResults[i];
223
+ results.push(result);
224
+ // Store output in variables map for dependent steps
225
+ if (result.value && result.out) {
226
+ variables.set(result.out, result.value);
227
+ }
228
+ }
229
+ }
230
+ this.logger.info(`Pipeline completed with ${results.length} steps`);
231
+ return results;
232
+ }
233
+ /**
234
+ * Execute a single pipeline step
235
+ * @internal
236
+ */
237
+ async executeStep(step, variables) {
238
+ this.logger.debug(`Executing step: ${step.kind}`);
239
+ if (step.kind === "generate") {
240
+ const blob = await this.generate({
241
+ generator: step.generator,
242
+ params: step.params,
243
+ });
244
+ return { step, out: step.out, value: blob };
245
+ }
246
+ else if (step.kind === "transform") {
247
+ const inputBlob = variables.get(step.in);
248
+ if (!inputBlob || !("bytes" in inputBlob)) {
249
+ throw new ConfigurationError(`Transform step references undefined or invalid variable: ${step.in}`);
250
+ }
251
+ const blob = await this.transform({
252
+ blob: inputBlob,
253
+ op: step.op,
254
+ params: step.params,
255
+ });
256
+ return { step, out: step.out, value: blob };
257
+ }
258
+ else if (step.kind === "save") {
259
+ const inputBlob = variables.get(step.in);
260
+ if (!inputBlob || !("bytes" in inputBlob)) {
261
+ throw new ConfigurationError(`Save step references undefined or invalid variable: ${step.in}`);
262
+ }
263
+ const result = await this.save(inputBlob, step.provider
264
+ ? { path: step.destination, provider: step.provider }
265
+ : step.destination);
266
+ return { step, out: step.out || step.destination, value: result };
267
+ }
268
+ throw new ConfigurationError(`Unknown step kind: ${step.kind}`);
269
+ }
270
+ /**
271
+ * Get capabilities of all registered providers
272
+ * This allows consumers to discover available generators, transforms, and save providers
273
+ */
274
+ getCapabilities() {
275
+ const generators = [];
276
+ const transforms = [];
277
+ const saveProviders = [];
278
+ // Collect generator schemas
279
+ for (const generator of Object.values(this.providers.generators)) {
280
+ generators.push(generator.schema);
281
+ }
282
+ // Collect transform operation schemas
283
+ for (const provider of Object.values(this.providers.transform)) {
284
+ transforms.push(...Object.values(provider.operationSchemas));
285
+ }
286
+ // Collect save provider info
287
+ for (const provider of Object.values(this.providers.save)) {
288
+ // SaveProvider doesn't have schema yet, create minimal info
289
+ saveProviders.push({
290
+ name: provider.name,
291
+ description: `Save provider: ${provider.name}`,
292
+ });
293
+ }
294
+ return { generators, transforms, saveProviders };
295
+ }
296
+ /**
297
+ * Register a custom generator
298
+ */
299
+ registerGenerator(generator) {
300
+ this.providers.generators[generator.name] = generator;
301
+ this.logger.debug(`Registered generator: ${generator.name}`);
302
+ }
303
+ /**
304
+ * Register a custom transform provider
305
+ */
306
+ registerTransformProvider(provider) {
307
+ this.providers.transform[provider.name] = provider;
308
+ this.logger.debug(`Registered transform provider: ${provider.name}`);
309
+ }
310
+ /**
311
+ * Register a custom save provider
312
+ */
313
+ registerSaveProvider(provider) {
314
+ this.providers.save[provider.name] = provider;
315
+ this.logger.debug(`Registered save provider: ${provider.name}`);
316
+ }
317
+ }
318
+ //# sourceMappingURL=client.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../src/core/client.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,38 @@
1
+ /**
2
+ * Base error class for floimg errors
3
+ */
4
+ export declare class FloimgError extends Error {
5
+ code?: string | undefined;
6
+ constructor(message: string, code?: string | undefined);
7
+ }
8
+ /**
9
+ * Error thrown when a provider is not found
10
+ */
11
+ export declare class ProviderNotFoundError extends FloimgError {
12
+ constructor(providerType: string, providerName: string);
13
+ }
14
+ /**
15
+ * Error thrown when provider configuration is invalid
16
+ */
17
+ export declare class ConfigurationError extends FloimgError {
18
+ constructor(message: string);
19
+ }
20
+ /**
21
+ * Error thrown when an image transformation fails
22
+ */
23
+ export declare class TransformError extends FloimgError {
24
+ constructor(message: string);
25
+ }
26
+ /**
27
+ * Error thrown when an upload operation fails
28
+ */
29
+ export declare class UploadError extends FloimgError {
30
+ constructor(message: string);
31
+ }
32
+ /**
33
+ * Error thrown when image generation fails
34
+ */
35
+ export declare class GenerationError extends FloimgError {
36
+ constructor(message: string);
37
+ }
38
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../../src/core/errors.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACA,IAAI,CAAC,EAAE,MAAM;gBAArC,OAAO,EAAE,MAAM,EAAS,IAAI,CAAC,EAAE,MAAM,YAAA;CAIlD;AAED;;GAEG;AACH,qBAAa,qBAAsB,SAAQ,WAAW;gBACxC,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM;CAwBvD;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,WAAW;gBACrC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,cAAe,SAAQ,WAAW;gBACjC,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,WAAY,SAAQ,WAAW;gBAC9B,OAAO,EAAE,MAAM;CAI5B;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,WAAW;gBAClC,OAAO,EAAE,MAAM;CAI5B"}