This is a parody of leetcode.com for designers. It's being developed live on Twitch.tv/zedashaw to demonstrate how to make a parody of a website.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pixelperfectionist/commands/init.js

93 lines
2.7 KiB

import { knex } from "../lib/ormish.js";
import { question } from "readline-sync";
import { main as devsvc } from "./devsvc.js";
import { glob, exec, mkdir, copy } from "../lib/builderator.js";
import path from "path";
import { existsSync as exists } from "fs";
export const description = "Initializes a fresh bando project";
export const options = [
["--force", "DANGER! overwite config files with templates"],
["--templates", "what to use as a template directory", "./commands/templates"],
];
// I did have chalk here but not sure so removed it for now
const warn = console.warn;
const good = console.log;
const error = console.error;
const dirs = ["./debug/emails","./debug/errors","./secrets"];
const copy_templates = (templates, force) => {
good("Copying templates to your project. You can commit these to git.");
const source_files = glob(`${templates}/**/*`);
for(let template of source_files) {
// need to add a . for the path to be local
const dest = "." + template.slice(templates.length);
if(force || !exists(dest)) {
good(template, "->", dest);
copy(template, dest);
} else {
good("SKIPPING", dest);
}
}
}
export const main = async (opts) => {
good("Creating configuration directories.");
dirs.forEach(d => mkdir(d));
warn("!!! WARNING!: Do not add the contents of secrets to your git repository.");
copy_templates(opts.templates, opts.force);
good("Starting redis for your OS so you can register an admin.");
devsvc({start: true, noexit: true});
//good("Generating the documentation first time...");
// exec("npm run docs");
//good("Documentation done.");
good("Migrating your database just in case.");
exec("npm run knex migrate:latest")
good("In another window start the app server with: npm run DANGER_ADMIN");
question("When you're done hit ENTER.");
// open the registration page
const url = "http://127.0.0.1:5001/client/#/register/"
good(`Opening ${url}`);
if(process.platform === "win32") {
exec(`start ${url}`);
} else if(process.platform === "darwin") {
exec(`open ${url}`);
} else {
warn(`\nOn linux you just open the link yourself:\n${url}\n`);
}
question("Register your admin user and hit ENTER.");
// run a sql command to update the first user to admin
warn("Changing user id 1 to admin: true");
let result = await knex("user").where({id: 1}).update({admin: 1});
if(result !== 1) {
error(`Expected to only change one record in user but changed ${result}. You'll have to change your user to admin manually.`);
} else {
good("Updated the user at id 1 to have admin access.");
}
knex.destroy();
good("FINISHED! You can now edit the project to make what you want.");
process.exit(0);
}