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.
93 lines
2.7 KiB
93 lines
2.7 KiB
2 years ago
|
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);
|
||
|
}
|