3 Commits

2 changed files with 59 additions and 16 deletions
+1 -1
View File
@@ -1,6 +1,6 @@
{
"name": "shsf-cli",
"version": "2.2.3",
"version": "2.2.5",
"description": "",
"type": "module",
"files": [
+52 -9
View File
@@ -4,6 +4,30 @@ import fs from "fs";
import path from "path";
import { createHash } from "crypto";
const unpushableFiles = [
".png",
".jpg",
".jpeg",
".gif",
".bmp",
".ico",
".zip",
".tar",
".gz",
".7z",
".pdf",
".doc",
".docx",
".xls",
".xlsx",
".ppt",
".pptx",
".exe",
".dll",
".so",
".dylib"
];
async function deleteNonexistentFiles(
currentFiles: any[],
files: any[],
@@ -19,7 +43,8 @@ async function deleteNonexistentFiles(
{
data: { filename: currentFile.name },
},
);} catch (error: any) {
);
} catch (error: any) {
throw error;
}
console.log(
@@ -54,9 +79,17 @@ export const pushDefinition = {
);
const currentFiles = currentFilesResponse.data.data; // Expecting { name: string, id: string [...] }[]
const files = fs.readdirSync(options.from).map((file) => ({
filename: file,
content: fs.readFileSync(path.join(options.from, file), "utf-8"),
// Read local files and filter to only include files (exclude directories)
const files = fs
.readdirSync(options.from)
.map((file) => {
const filePath = path.join(options.from, file);
return { filename: file, filePath };
})
.filter(({ filePath }) => fs.statSync(filePath).isFile())
.map(({ filename, filePath }) => ({
filename,
content: fs.readFileSync(filePath, "utf-8"),
}));
if (!options.force && files.length > 5) {
@@ -76,9 +109,6 @@ export const pushDefinition = {
(f: any) => f.name === file.filename,
);
if (currentFile) {
// If the file content exists in the response, we can hash it.
// Note: currentFiles from /api/function/:id/files might not have content by default depending on API,
// but the original code assumes it does.
const currentFileHash = createHash("md5")
.update(currentFile.content || "")
.digest("hex");
@@ -92,14 +122,27 @@ export const pushDefinition = {
}
}
const filenameLower = file.filename.toLowerCase();
// Unpushable file check
if (unpushableFiles.some((suffix) => filenameLower.endsWith(suffix))) {
console.log(
chalk.yellow(
`Skipping ${file.filename}, it matches unpushable patterns for function ${options.id}`,
),
);
continue;
}
await client.put(`/api/function/${options.id}/file`, {
filename: file.filename,
code: file.content,
});
const byteSize = Buffer.byteLength(file.content, 'utf8');
const byteSize = Buffer.byteLength(file.content, "utf8");
console.log(
chalk.green(`Pushed ${file.filename} (${byteSize} bytes) to function ${options.id}`),
chalk.green(
`Pushed ${file.filename} (${byteSize} bytes) to function ${options.id}`,
),
);
pushedFilesCount++;
}