UNPKG

derw

Version:

An Elm-inspired language that transpiles to TypeScript

109 lines (106 loc) 3.93 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.init = init; const baner_1 = require("@eeue56/baner"); const promises_1 = require("fs/promises"); const path_1 = __importDefault(require("path")); const package_1 = require("../package"); const utils_1 = require("./utils"); const initParser = (0, baner_1.parser)([ (0, baner_1.longFlag)("dir", "name of a directory to use as package name e.g stdlib. Defaults to current directory's name", (0, baner_1.string)()), (0, baner_1.bothFlag)("h", "help", "This help text", (0, baner_1.empty)()), ]); function showInfoHelp() { console.log("Initialize a directory as a Derw project."); console.log((0, baner_1.help)(initParser)); } async function copyTSconfig(dir) { const tsconfig = { compilerOptions: { target: "es2017", module: "commonjs", declaration: true, outDir: "./build/", rootDirs: ["src"], strict: true, moduleResolution: "node", types: ["node"], esModuleInterop: true, skipLibCheck: true, forceConsistentCasingInFileNames: true, }, include: ["src/**/*"], exclude: ["node_modules/**"], }; if (await (0, utils_1.fileExists)(path_1.default.join(dir, "tsconfig.json"))) { console.log("Already got a tsconfig!"); process.exit(1); } await (0, promises_1.writeFile)(path_1.default.join(dir, "tsconfig.json"), JSON.stringify(tsconfig, null, 4)); } async function appendGitIgnore(dir) { let gitIgnore = ""; const gitIgnorePath = path_1.default.join(dir, ".gitignore"); try { gitIgnore = await (await (0, promises_1.readFile)(gitIgnorePath)).toString(); } catch (e) { } gitIgnore = gitIgnore + ` # derw derw-packages/ src/**/*.ts `; await (0, promises_1.writeFile)(gitIgnorePath, gitIgnore); } async function appendGitAttributes(dir) { let gitAttributes = ""; const gitAttributesPath = path_1.default.join(dir, ".gitattributes"); try { gitAttributes = await (await (0, promises_1.readFile)(gitAttributesPath)).toString(); } catch (e) { } gitAttributes = gitAttributes + ` *.derw linguist-language=Elm *.derw gitlab-language=elm `.trim(); await (0, promises_1.writeFile)(gitAttributesPath, gitAttributes); } async function init(isInPackageDirectory, argv) { const program = (0, baner_1.parse)(initParser, argv); if (program.flags["h/help"].isPresent) { showInfoHelp(); return; } const errors = (0, baner_1.allErrors)(program); if (errors.length > 0) { console.log("Errors:"); console.log(errors.join("\n")); process.exit(1); } const dir = program.flags.dir.isPresent && program.flags.dir.arguments.kind === "Ok" ? program.flags.dir.arguments.value : process.cwd(); const packageName = path_1.default.basename(dir); const package_ = (0, package_1.Package)(packageName, [], []); const isAlreadyAPackage = await (0, utils_1.fileExists)(path_1.default.join(dir, "derw-package.json")); if (isAlreadyAPackage) { console.log("Package already initialized!"); process.exit(-1); } await (0, promises_1.writeFile)(path_1.default.join(dir, "derw-package.json"), (0, package_1.exportPackage)(package_)); await copyTSconfig(dir); await appendGitIgnore(dir); await appendGitAttributes(dir); await (0, utils_1.ensureDirectoryExists)(path_1.default.join(dir, "src")); console.log("Project initialized!"); console.log("Put your files in `src`"); console.log("Compile your project via `derw compile`"); console.log("Run tests via `derw test`"); }