UNPKG

derw

Version:

An Elm-inspired language that transpiles to TypeScript

117 lines (109 loc) 3.36 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.template = void 0; const baner_1 = require("@eeue56/baner"); const promises_1 = require("fs/promises"); const install_1 = require("./install"); const utils_1 = require("./utils"); const validTemplates = ["web", "html"]; const templateParser = (0, baner_1.parser)([ (0, baner_1.longFlag)("path", "path of Derw file to create", (0, baner_1.string)()), (0, baner_1.longFlag)("template", "Template to use", (0, baner_1.oneOf)(validTemplates)), (0, baner_1.bothFlag)("h", "help", "This help text", (0, baner_1.empty)()), ]); function showInfoHelp() { console.log("Generate a Derw file from a template."); console.log("Also installs required packages."); console.log((0, baner_1.help)(templateParser)); } async function copyWebTemplate(path) { const template = ` import "../derw-packages/derw-lang/html/src/Html" exposing ( HtmlNode, RunningProgram, div, text, program, attribute, class_ ) type alias Model = { } initialModel: Model initialModel = { } type Msg = Noop update: Msg -> Model -> (Msg -> void) -> Model update msg model send = case msg of Noop -> model view: Model -> HtmlNode Msg view model = div [ ] [ ] [ text "Hello" ] root: any root = document.getElementById "root" main: RunningProgram Model Msg main = program { initialModel: initialModel, view: view, update: update, root: root } `.trim() + "\n"; if (await (0, utils_1.fileExists)(path)) { console.log("Already a file!"); process.exit(1); } await (0, promises_1.writeFile)(path, template); } async function copyHtmlTemplate(path) { const template = ` <!doctype html> <html> <body> <div id="root"></div> <script type="text/javascript" src="build.js"></script> </body> </html> `.trim() + "\n"; if (await (0, utils_1.fileExists)(path)) { console.log("Already a file!"); process.exit(1); } await (0, promises_1.writeFile)(path, template); } async function template(isInPackageDirectory, argv) { const program = (0, baner_1.parse)(templateParser, 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 path = program.flags.path.isPresent && program.flags.path.arguments.kind === "Ok" && program.flags.path.arguments.value; const template = program.flags.template.isPresent && program.flags.template.arguments.kind === "Ok" && program.flags.template.arguments.value; if (!path) { console.log("You must provide a path via --path"); return; } if (template === "web") { await copyWebTemplate(path); await (0, install_1.install)(isInPackageDirectory, [ "--name", "derw-lang/html", "--version", "main", ]); } else if (template === "html") { await copyHtmlTemplate(path); } else { console.log(`Template ${template} is unknown. Try one of: ${validTemplates.join(", ")}`); } } exports.template = template;