@gallop.software/studio 1.4.7 → 1.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/{StudioUI-TP2Y3ZEL.mjs → StudioUI-7QQIKNTF.mjs} +48 -1
- package/dist/{StudioUI-TP2Y3ZEL.mjs.map → StudioUI-7QQIKNTF.mjs.map} +1 -1
- package/dist/{StudioUI-FROMYB7Y.js → StudioUI-MZENRXN3.js} +48 -1
- package/dist/StudioUI-MZENRXN3.js.map +1 -0
- package/dist/handlers/index.js +91 -7
- package/dist/handlers/index.js.map +1 -1
- package/dist/handlers/index.mjs +97 -13
- package/dist/handlers/index.mjs.map +1 -1
- package/dist/index.js +1 -1
- package/dist/index.mjs +1 -1
- package/package.json +1 -1
- package/dist/StudioUI-FROMYB7Y.js.map +0 -1
package/dist/handlers/index.js
CHANGED
|
@@ -2085,8 +2085,8 @@ async function handleDeleteOrphans(request) {
|
|
|
2085
2085
|
function parseImageUrl(url) {
|
|
2086
2086
|
const parsed = new URL(url);
|
|
2087
2087
|
const base = `${parsed.protocol}//${parsed.host}`;
|
|
2088
|
-
const
|
|
2089
|
-
return { base, path:
|
|
2088
|
+
const path10 = parsed.pathname;
|
|
2089
|
+
return { base, path: path10 };
|
|
2090
2090
|
}
|
|
2091
2091
|
async function processRemoteImage(url) {
|
|
2092
2092
|
const response = await fetch(url);
|
|
@@ -2135,20 +2135,20 @@ async function handleImportUrls(request) {
|
|
|
2135
2135
|
currentFile: url
|
|
2136
2136
|
});
|
|
2137
2137
|
try {
|
|
2138
|
-
const { base, path:
|
|
2139
|
-
const existingEntry = getMetaEntry(meta,
|
|
2138
|
+
const { base, path: path10 } = parseImageUrl(url);
|
|
2139
|
+
const existingEntry = getMetaEntry(meta, path10);
|
|
2140
2140
|
if (existingEntry) {
|
|
2141
|
-
skipped.push(
|
|
2141
|
+
skipped.push(path10);
|
|
2142
2142
|
continue;
|
|
2143
2143
|
}
|
|
2144
2144
|
const cdnIndex = getOrAddCdnIndex(meta, base);
|
|
2145
2145
|
const imageData = await processRemoteImage(url);
|
|
2146
|
-
setMetaEntry(meta,
|
|
2146
|
+
setMetaEntry(meta, path10, {
|
|
2147
2147
|
o: imageData.o,
|
|
2148
2148
|
b: imageData.b,
|
|
2149
2149
|
c: cdnIndex
|
|
2150
2150
|
});
|
|
2151
|
-
added.push(
|
|
2151
|
+
added.push(path10);
|
|
2152
2152
|
} catch (error) {
|
|
2153
2153
|
console.error(`Failed to import ${url}:`, error);
|
|
2154
2154
|
errors.push(url);
|
|
@@ -2203,6 +2203,87 @@ async function handleUpdateCdns(request) {
|
|
|
2203
2203
|
}
|
|
2204
2204
|
}
|
|
2205
2205
|
|
|
2206
|
+
// src/handlers/favicon.ts
|
|
2207
|
+
|
|
2208
|
+
|
|
2209
|
+
|
|
2210
|
+
var _promises = require('fs/promises'); var _promises2 = _interopRequireDefault(_promises);
|
|
2211
|
+
var FAVICON_CONFIGS = [
|
|
2212
|
+
{ name: "favicon.ico", size: 48 },
|
|
2213
|
+
{ name: "icon.png", size: 32 },
|
|
2214
|
+
{ name: "apple-icon.png", size: 180 }
|
|
2215
|
+
];
|
|
2216
|
+
async function handleGenerateFavicon(request) {
|
|
2217
|
+
try {
|
|
2218
|
+
const body = await request.json();
|
|
2219
|
+
const { imagePath } = body;
|
|
2220
|
+
if (!imagePath) {
|
|
2221
|
+
return _server.NextResponse.json({ error: "No image path provided" }, { status: 400 });
|
|
2222
|
+
}
|
|
2223
|
+
const fileName = _path2.default.basename(imagePath).toLowerCase();
|
|
2224
|
+
if (fileName !== "favicon.png" && fileName !== "favicon.jpg") {
|
|
2225
|
+
return _server.NextResponse.json({
|
|
2226
|
+
error: "Source file must be named favicon.png or favicon.jpg"
|
|
2227
|
+
}, { status: 400 });
|
|
2228
|
+
}
|
|
2229
|
+
const sourcePath = _path2.default.join(process.cwd(), "public", imagePath.replace(/^\//, ""));
|
|
2230
|
+
try {
|
|
2231
|
+
await _promises2.default.access(sourcePath);
|
|
2232
|
+
} catch (e45) {
|
|
2233
|
+
return _server.NextResponse.json({ error: "Source file not found" }, { status: 404 });
|
|
2234
|
+
}
|
|
2235
|
+
let metadata;
|
|
2236
|
+
try {
|
|
2237
|
+
metadata = await _sharp2.default.call(void 0, sourcePath).metadata();
|
|
2238
|
+
} catch (e46) {
|
|
2239
|
+
return _server.NextResponse.json({ error: "Source file is not a valid image" }, { status: 400 });
|
|
2240
|
+
}
|
|
2241
|
+
const outputDir = _path2.default.join(process.cwd(), "src", "app");
|
|
2242
|
+
try {
|
|
2243
|
+
await _promises2.default.access(outputDir);
|
|
2244
|
+
} catch (e47) {
|
|
2245
|
+
return _server.NextResponse.json({
|
|
2246
|
+
error: "Output directory src/app/ not found"
|
|
2247
|
+
}, { status: 500 });
|
|
2248
|
+
}
|
|
2249
|
+
const results = [];
|
|
2250
|
+
for (const config of FAVICON_CONFIGS) {
|
|
2251
|
+
try {
|
|
2252
|
+
const outputPath = _path2.default.join(outputDir, config.name);
|
|
2253
|
+
await _sharp2.default.call(void 0, sourcePath).resize(config.size, config.size, {
|
|
2254
|
+
fit: "cover",
|
|
2255
|
+
position: "center"
|
|
2256
|
+
}).png({ quality: 100 }).toFile(outputPath);
|
|
2257
|
+
results.push({
|
|
2258
|
+
name: config.name,
|
|
2259
|
+
size: config.size,
|
|
2260
|
+
success: true
|
|
2261
|
+
});
|
|
2262
|
+
} catch (error) {
|
|
2263
|
+
results.push({
|
|
2264
|
+
name: config.name,
|
|
2265
|
+
size: config.size,
|
|
2266
|
+
success: false,
|
|
2267
|
+
error: error instanceof Error ? error.message : "Unknown error"
|
|
2268
|
+
});
|
|
2269
|
+
}
|
|
2270
|
+
}
|
|
2271
|
+
const successCount = results.filter((r) => r.success).length;
|
|
2272
|
+
const failCount = results.filter((r) => !r.success).length;
|
|
2273
|
+
return _server.NextResponse.json({
|
|
2274
|
+
success: failCount === 0,
|
|
2275
|
+
message: `Generated ${successCount} favicon${successCount !== 1 ? "s" : ""}${failCount > 0 ? `, ${failCount} failed` : ""}.`,
|
|
2276
|
+
sourceSize: `${metadata.width}x${metadata.height}`,
|
|
2277
|
+
results
|
|
2278
|
+
});
|
|
2279
|
+
} catch (error) {
|
|
2280
|
+
console.error("Favicon generation error:", error);
|
|
2281
|
+
return _server.NextResponse.json({
|
|
2282
|
+
error: "Failed to generate favicons"
|
|
2283
|
+
}, { status: 500 });
|
|
2284
|
+
}
|
|
2285
|
+
}
|
|
2286
|
+
|
|
2206
2287
|
// src/handlers/index.ts
|
|
2207
2288
|
async function GET(request) {
|
|
2208
2289
|
if (process.env.NODE_ENV !== "development") {
|
|
@@ -2278,6 +2359,9 @@ async function POST(request) {
|
|
|
2278
2359
|
if (route === "cdns") {
|
|
2279
2360
|
return handleUpdateCdns(request);
|
|
2280
2361
|
}
|
|
2362
|
+
if (route === "generate-favicon") {
|
|
2363
|
+
return handleGenerateFavicon(request);
|
|
2364
|
+
}
|
|
2281
2365
|
return _server.NextResponse.json({ error: "Not found" }, { status: 404 });
|
|
2282
2366
|
}
|
|
2283
2367
|
async function DELETE(request) {
|