estilo
Version:
Create color schemes for Vim, NeoVim, Airline and Lightline
66 lines (65 loc) • 2.63 kB
JavaScript
import * as dntShim from "../_dnt.shims.js";
import { ensureDir } from "./util.js";
import { basename, resolve } from "../deps/jsr.io/@std/path/1.0.8/mod.js";
import { Eta } from "../deps/jsr.io/@eta-dev/eta/3.5.0/src/index.js";
import assets from "./assets.js";
const eta = new Eta();
const decoder = new TextDecoder();
const defaultPalette = "myblue: '#99ccff'";
export async function createProject(projectPath, noQuestions) {
const options = noQuestions
? getDefaultConfig(projectPath)
: await askConfig(projectPath);
await createBoilerplate(projectPath, options);
}
function getDefaultConfig(projectPath) {
return {
name: basename(projectPath),
author: "",
version: "1.0.0",
url: "",
license: "MIT",
};
}
async function ask(question, defaultAnswer = "") {
console.log(`%c${question}%c${defaultAnswer ? " (" + defaultAnswer + ")" : ""}`, "font-weight: bold; color: green;", "font-weight: normal");
const buffer = new Uint8Array(1024);
await dntShim.Deno.stdin.read(buffer);
const answer = decoder.decode(buffer);
return answer.split("\n")[0].trim() || defaultAnswer;
}
async function askConfig(projectPath) {
const folderName = basename(projectPath);
const defConfig = {
name: folderName,
author: "",
version: "1.0.0",
url: "",
license: "MIT",
};
const config = {
name: await ask("Project name:", defConfig.name),
version: await ask("Version:", defConfig.version),
license: await ask("License:", defConfig.license),
author: await ask("Author:"),
url: await ask("URL:"),
};
return config;
}
async function createBoilerplate(projectPath, options) {
const estiloStr = renderConfigFile(options);
const estilosFolder = resolve(projectPath, "estilos");
const syntaxFolder = resolve(estilosFolder, "syntax");
const palettesFolder = resolve(estilosFolder, "palettes");
await ensureDir(estilosFolder);
await ensureDir(syntaxFolder);
await ensureDir(palettesFolder);
dntShim.Deno.writeTextFileSync(resolve(projectPath, "estilo.yml"), estiloStr);
dntShim.Deno.writeTextFileSync(resolve(estilosFolder, "terminal.yml"), assets.syntax.terminal);
dntShim.Deno.writeTextFileSync(resolve(palettesFolder, options.name + ".yml"), defaultPalette);
dntShim.Deno.writeTextFileSync(resolve(syntaxFolder, "base.yml"), assets.syntax.base);
console.log("%c✓ Your project is ready\n", "color: green");
}
function renderConfigFile(options) {
return eta.renderString(assets.mustaches["project"], options);
}