Press n or j to go to the next uncovered block, b, p or k for the previous block.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 | 2x 2x 2x 2x 2x 2x 2x 2x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 1x 2x | import fs from "fs-extra";
import path from "path";
import os from "os";
import stripInvalidFilenameCharacters from "shared/lib/helpers/stripInvalidFilenameCharacters";
import { ERR_PROJECT_EXISTS, projectTemplatesRoot } from "consts";
import copy from "lib/helpers/fsCopy";
import { getGlobalPluginsPath } from "lib/pluginManager/globalPlugins";
export interface CreateProjectInput {
name: string;
template: string;
path: string;
}
const createProject = async (options: CreateProjectInput) => {
const projectFolderName = stripInvalidFilenameCharacters(options.name);
const projectPath = path.join(options.path, projectFolderName);
const globalPluginsPath = getGlobalPluginsPath();
const isPlugin = path.basename(options.template) === "project.gbsproj";
const templatePath = isPlugin
? path.join(globalPluginsPath, path.dirname(options.template))
: path.join(projectTemplatesRoot, options.template);
const projectTmpDataPath = `${projectPath}/project.gbsproj`;
const projectDataPath = `${projectPath}/${projectFolderName}.gbsproj`;
const { username } = os.userInfo();
Iif (fs.existsSync(projectPath)) {
throw ERR_PROJECT_EXISTS;
}
await fs.ensureDir(projectPath);
await copy(templatePath, projectPath);
// Replace placeholders in data file
const dataFile = (await fs.readFile(projectTmpDataPath, "utf8"))
.replace(/___PROJECT_NAME___/g, projectFolderName)
.replace(/___AUTHOR___/g, username);
await fs.unlink(projectTmpDataPath);
await fs.writeFile(projectDataPath, dataFile);
return projectDataPath;
};
export default createProject;
|