@autobe/filesystem
Version:
AI backend server code generator
93 lines (84 loc) • 2.63 kB
text/typescript
import { OpenApi } from "@samchon/openapi";
import cp from "child_process";
import fs from "fs";
import { VariadicSingleton } from "tstl";
import { FileSystemIterator } from "./FileSystemIterator";
/** @internal */
export namespace RepositoryFileSystem {
export const analyze = async (
account: string,
project: string,
): Promise<Record<string, string>> => {
await vs.get(account, project);
return FileSystemIterator.read({
root: `${ROOT}/internals/repositories/${account}/${project}/docs/requirements`,
extension: "md",
});
};
export const prisma = async (
account: string,
project: string,
): Promise<Record<string, string>> => {
await vs.get(account, project);
const result: Record<string, string> = await FileSystemIterator.read({
root: `${ROOT}/internals/repositories/${account}/${project}/prisma/schema`,
extension: "prisma",
});
for (const [key, value] of Object.entries(result))
result[key] = value.split("@author Samchon").join("@author AutoBE");
return result;
};
export const src = async (
account: string,
project: string,
): Promise<Record<string, string>> => {
await vs.get(account, project);
return FileSystemIterator.read({
root: `${ROOT}/internals/repositories/${account}/${project}/src`,
prefix: "src/",
extension: "ts",
});
};
export const swagger = async (
account: string,
project: string,
): Promise<OpenApi.IDocument> => {
await vs.get(account, project);
return OpenApi.convert(
JSON.parse(
await fs.promises.readFile(
`${ROOT}/internals/repositories/${account}/${project}/packages/api/swagger.json`,
"utf8",
),
),
);
};
export const clone = async (
account: string,
project: string,
): Promise<void> => {
await vs.get(account, project);
};
const vs = new VariadicSingleton(
async (account: string, project: string): Promise<void> => {
const location: string = `${ROOT}/internals/repositories/${account}/${project}`;
if (fs.existsSync(location))
cp.execSync("git pull", {
cwd: location,
stdio: "ignore",
});
else {
try {
await fs.promises.mkdir(`${ROOT}/internals/repositories/${account}`, {
recursive: true,
});
} catch {}
cp.execSync(`git clone https://github.com/${account}/${project}`, {
cwd: `${ROOT}/internals/repositories/${account}`,
stdio: "ignore",
});
}
},
);
const ROOT = `${__dirname}/../../..`;
}