mirror of
https://github.com/khairul169/code-share.git
synced 2025-04-28 16:49:36 +07:00
52 lines
1.2 KiB
TypeScript
52 lines
1.2 KiB
TypeScript
import fs from "node:fs/promises";
|
|
import path from "node:path";
|
|
import { and, eq, isNull } from "drizzle-orm";
|
|
import db from "../db";
|
|
import { file } from "../db/schema/file";
|
|
import { fileExists, getProjectDir } from "./utils";
|
|
import { getFileExt } from "~/lib/utils";
|
|
|
|
type UnpackProjectOptions = {
|
|
ext: string;
|
|
};
|
|
|
|
export const unpackProject = async (
|
|
opt: Partial<UnpackProjectOptions> = {}
|
|
) => {
|
|
const files = await db.query.file.findMany({
|
|
where: and(
|
|
eq(file.isDirectory, false),
|
|
eq(file.isFile, false),
|
|
isNull(file.deletedAt)
|
|
),
|
|
});
|
|
|
|
const projectDir = getProjectDir();
|
|
if (!fileExists(projectDir)) {
|
|
console.log("not exist", projectDir);
|
|
await fs.mkdir(projectDir, { recursive: true });
|
|
}
|
|
|
|
for (const file of files) {
|
|
const ext = getFileExt(file.filename);
|
|
|
|
// skip file if not in included extension list
|
|
if (opt.ext && opt.ext.length > 0 && !opt.ext.split(",").includes(ext)) {
|
|
continue;
|
|
}
|
|
|
|
const fpath = path.resolve(
|
|
projectDir,
|
|
file.path.replace(/(\.{2})(\/+)/g, "")
|
|
);
|
|
const dir = path.dirname(fpath);
|
|
if (!fileExists(dir)) {
|
|
await fs.mkdir(dir, { recursive: true });
|
|
}
|
|
|
|
await fs.writeFile(fpath, file.content || "");
|
|
}
|
|
|
|
return projectDir;
|
|
};
|