chore: cleanup of code
This commit is contained in:
parent
28a441d98a
commit
ae51fc763c
3 changed files with 264 additions and 275 deletions
321
index.js
321
index.js
|
|
@ -28,6 +28,11 @@ let routes = { GET: [], POST: [], PUT: [], DELETE: [] };
|
|||
const wsRoutes = {}
|
||||
const wsConnections = {}
|
||||
|
||||
const INSPECT_OPTS = { showHidden: false, depth: null, colors: false, compact: false };
|
||||
function inspectArgs(args) {
|
||||
return args.map((v) => util.inspect(v, INSPECT_OPTS)).join(" ");
|
||||
}
|
||||
|
||||
app.use(bodyParser.urlencoded({ extended: true }));
|
||||
app.use(bodyParser.json());
|
||||
app.use(express.static("public"));
|
||||
|
|
@ -64,7 +69,6 @@ async function saveFile(structureId, req, uploadedFile, asset=false) {
|
|||
|
||||
await uploadedFile.mv(path.join(uploadPath, name));
|
||||
let id = model.createFile(
|
||||
db,
|
||||
structureId,
|
||||
name,
|
||||
storedPath,
|
||||
|
|
@ -73,13 +77,13 @@ async function saveFile(structureId, req, uploadedFile, asset=false) {
|
|||
asset,
|
||||
);
|
||||
|
||||
let file = model.getFile(db, id);
|
||||
let file = model.getFile(id);
|
||||
file.url = prefixUrlWithHost(req, file.path);
|
||||
|
||||
return file
|
||||
}
|
||||
|
||||
function bootstrapContext(db, structureId, routeId, initContext) {
|
||||
function bootstrapContext(structureId, routeId, initContext) {
|
||||
const allDbInstances = {};
|
||||
function getDb(alias) {
|
||||
return allDbInstances[alias];
|
||||
|
|
@ -88,12 +92,12 @@ function bootstrapContext(db, structureId, routeId, initContext) {
|
|||
// todo wrap template in data-bliss-edit-template thing since ws can't take us to the editor on a component basis?? maybe...
|
||||
// for now just designing with component approach
|
||||
const eta = model.getTemplater(structureId);
|
||||
const structure = model.getStructure(db, structureId)
|
||||
const structure = model.getStructure(structureId)
|
||||
const __urlPrefix = structure.route_prefix;
|
||||
|
||||
const libs = { eta, db: getDb, push: webPush, files: { saveFile: (...args) => saveFile(structureId, ...args) } };
|
||||
|
||||
let dbs = model.getDbsForStructure(db, structureId);
|
||||
let dbs = model.getDbsForStructure(structureId);
|
||||
let context = vm.createContext({
|
||||
...initContext,
|
||||
require: function (str) {
|
||||
|
|
@ -102,21 +106,8 @@ function bootstrapContext(db, structureId, routeId, initContext) {
|
|||
module: { exports: null },
|
||||
console: {
|
||||
log: function (...content) {
|
||||
const s = content.reduce((acc, curr) => {
|
||||
console.log(curr);
|
||||
return (
|
||||
acc +
|
||||
(acc ? " " : "") +
|
||||
`${util.inspect(curr, {
|
||||
showHidden: false,
|
||||
depth: null, // `null` lets you see the full depth of the object
|
||||
colors: false, // Setting this to true uses ANSI color codes
|
||||
compact: false,
|
||||
})}`
|
||||
);
|
||||
}, "");
|
||||
|
||||
model.createLog(db, structureId, routeId, s);
|
||||
content.forEach((c) => console.log(c));
|
||||
model.createLog(structureId, routeId, inspectArgs(content));
|
||||
},
|
||||
},
|
||||
vapidPublicKey: vapidPublicKey,
|
||||
|
|
@ -124,7 +115,7 @@ function bootstrapContext(db, structureId, routeId, initContext) {
|
|||
clearTimeout: clearTimeout,
|
||||
setTimeout: setTimeout,
|
||||
route: function (url) {
|
||||
return __urlPrefix ? path.join(__urlPrefix, url) : url;
|
||||
return withPrefix(__urlPrefix, url);
|
||||
},
|
||||
});
|
||||
for (let appDb of dbs) {
|
||||
|
|
@ -141,9 +132,12 @@ function bootstrapContext(db, structureId, routeId, initContext) {
|
|||
return context;
|
||||
}
|
||||
|
||||
function withPrefix(prefix, url) {
|
||||
return prefix ? path.join(prefix, url) : url;
|
||||
}
|
||||
|
||||
function routeWithPrefix(route) {
|
||||
const prefix = route.route_prefix;
|
||||
return prefix ? path.join(prefix, route.path) : route.path;
|
||||
return withPrefix(route.route_prefix, route.path);
|
||||
}
|
||||
|
||||
|
||||
|
|
@ -151,7 +145,7 @@ function bootstrapWebsocketHandler(route) {
|
|||
// todo only expose app when running the handler, should not be available to the handler itself
|
||||
// need to move to runscript or whatever...or remove app because we can just call it using the handler?
|
||||
try {
|
||||
const context = bootstrapContext(db, route.structure_id, route.id, { app });
|
||||
const context = bootstrapContext(route.structure_id, route.id, { app });
|
||||
let handler = vm.runInContext(`${route.handler}\n\nhandler;`, context);
|
||||
|
||||
if (!wsRoutes[routeWithPrefix(route)]) {
|
||||
|
|
@ -167,17 +161,17 @@ function bootstrapWebsocketHandler(route) {
|
|||
}
|
||||
catch (e) {
|
||||
const error = e.stack ? `${e}\n\n${e.stack}` : `${e}`;
|
||||
model.createLog(db, route.structure_id, route.id, error, true);
|
||||
model.createLog(route.structure_id, route.id, error, true);
|
||||
}
|
||||
})
|
||||
}
|
||||
ws.render = (template, context) => {
|
||||
context = context || {};
|
||||
context.route = function (url) {
|
||||
return __urlPrefix ? path.join(__urlPrefix, url) : url;
|
||||
};
|
||||
const eta = model.getTemplater(route.structure_id);
|
||||
const structure = model.getStructure(db, route.structure_id);
|
||||
const structure = model.getStructure(route.structure_id);
|
||||
context.route = function (url) {
|
||||
return withPrefix(structure.route_prefix, url);
|
||||
};
|
||||
|
||||
ws.send(
|
||||
bootstrapTemplateWithHTMXetc(
|
||||
|
|
@ -202,14 +196,14 @@ function bootstrapWebsocketHandler(route) {
|
|||
return handler(ws, req)
|
||||
} catch (e) {
|
||||
const error = e.stack ? `${e}\n\n${e.stack}` : `${e}`;
|
||||
model.createLog(db, route.structure_id, route.id, error, true);
|
||||
model.createLog(route.structure_id, route.id, error, true);
|
||||
}
|
||||
}
|
||||
model.updateRoute(db, { ...route, error: null });
|
||||
model.updateRoute({ ...route, error: null });
|
||||
} catch (e) {
|
||||
const error = e.stack ? `${e}\n\n${e.stack}` : `${e}`;
|
||||
model.createLog(db, route.structure_id, route.id, error, true);
|
||||
model.updateRoute(db, { ...route, error: e.stack });
|
||||
model.createLog(route.structure_id, route.id, error, true);
|
||||
model.updateRoute({ ...route, error: e.stack });
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -221,7 +215,7 @@ function buildRoutes() {
|
|||
DELETE: [],
|
||||
};
|
||||
|
||||
for (let route of model.getAllRoutes(db)) {
|
||||
for (let route of model.getAllRoutes()) {
|
||||
const p = routeWithPrefix(route);
|
||||
if (route.verb == "WS") {
|
||||
bootstrapWebsocketHandler(route);
|
||||
|
|
@ -251,7 +245,7 @@ app.post("/register", async (req, res) => {
|
|||
try {
|
||||
const { username, password } = req.body;
|
||||
const hashedPassword = await bcrypt.hash(password, 10); // 10 is the saltRounds
|
||||
userId = model.createUser(db, username, hashedPassword);
|
||||
const userId = model.createUser(username, hashedPassword);
|
||||
req.session.userId = userId;
|
||||
res.redirect("/workshop");
|
||||
} catch (e) {
|
||||
|
|
@ -261,7 +255,7 @@ app.post("/register", async (req, res) => {
|
|||
|
||||
app.post("/login", async (req, res) => {
|
||||
const { username, password } = req.body;
|
||||
const user = model.getUser(db, username);
|
||||
const user = model.getUser(username);
|
||||
|
||||
if (user && (await bcrypt.compare(password, user.password))) {
|
||||
req.session.userId = user.id;
|
||||
|
|
@ -386,20 +380,20 @@ function bootstrapTemplateWithHTMXetc(
|
|||
}
|
||||
|
||||
app.post("/workshop", (req, res) => {
|
||||
let structId = model.createStructure(db, req.body.name);
|
||||
let structId = model.createStructure(req.body.name);
|
||||
return res.redirect("/workshop/" + structId);
|
||||
});
|
||||
|
||||
app.get("/workshop", (req, res) => {
|
||||
return res.send(
|
||||
bootstrapTemplateWithHTMXetc(
|
||||
eta.render("workshop/index", {
|
||||
structures: model.getStructures(db),
|
||||
}),
|
||||
),
|
||||
);
|
||||
return renderWorkshop(res, "workshop/index", {
|
||||
structures: model.getStructures(),
|
||||
});
|
||||
});
|
||||
|
||||
function renderWorkshop(res, template, context) {
|
||||
res.send(bootstrapTemplateWithHTMXetc(eta.render(template, context)));
|
||||
}
|
||||
|
||||
function smartRedirect(req, res, redirectUrl) {
|
||||
if (req.headers["hx-request"]) {
|
||||
res.set("HX-Redirect", redirectUrl);
|
||||
|
|
@ -409,21 +403,17 @@ function smartRedirect(req, res, redirectUrl) {
|
|||
}
|
||||
}
|
||||
|
||||
function sidebarStuff(db, structId) {
|
||||
function sidebarStuff(structId) {
|
||||
return {
|
||||
structure: model.getStructure(db, structId),
|
||||
routes: model.getRoutes(db, structId),
|
||||
templates: model.getTemplates(db, structId),
|
||||
dbs: model.getDbsForStructure(db, structId),
|
||||
structure: model.getStructure(structId),
|
||||
routes: model.getRoutes(structId),
|
||||
templates: model.getTemplates(structId),
|
||||
dbs: model.getDbsForStructure(structId),
|
||||
};
|
||||
}
|
||||
|
||||
app.get("/workshop/:structure_id", (req, res) => {
|
||||
return res.send(
|
||||
bootstrapTemplateWithHTMXetc(
|
||||
eta.render("workshop/editor", sidebarStuff(db, req.params.structure_id)),
|
||||
),
|
||||
);
|
||||
return renderWorkshop(res, "workshop/editor", sidebarStuff(req.params.structure_id));
|
||||
});
|
||||
|
||||
app.post("/workshop/:structure_id/clone", (req, res) => {
|
||||
|
|
@ -447,34 +437,29 @@ app.post("/workshop/:structure_id/clone", (req, res) => {
|
|||
});
|
||||
|
||||
app.post("/workshop/:structure_id/db", (req, res) => {
|
||||
const dbId = model.createDb(db, req.params.structure_id, req.body.name);
|
||||
const dbId = model.createDb(req.params.structure_id, req.body.name);
|
||||
const redirectUrl = `/workshop/${req.params.structure_id}/db/${dbId}`;
|
||||
return smartRedirect(req, res, redirectUrl);
|
||||
});
|
||||
|
||||
app.post("/workshop/:structure_id/db/attach", (req, res) => {
|
||||
model.attachDb(db, req.params.structure_id, req.body.db_id, req.body.alias);
|
||||
model.attachDb(req.params.structure_id, req.body.db_id, req.body.alias);
|
||||
const redirectUrl = `/workshop/${req.params.structure_id}/db/${req.body.db_id}`;
|
||||
return smartRedirect(req, res, redirectUrl);
|
||||
});
|
||||
|
||||
app.get("/workshop/:structure_id/db/:db_id", (req, res) => {
|
||||
const structdb = model.getDbForStructure(
|
||||
db,
|
||||
req.params.structure_id,
|
||||
req.params.db_id,
|
||||
);
|
||||
if (!structdb) {
|
||||
return res.send("uh oh");
|
||||
}
|
||||
return res.send(
|
||||
bootstrapTemplateWithHTMXetc(
|
||||
eta.render("workshop/db_garden", {
|
||||
db: structdb,
|
||||
...sidebarStuff(db, req.params.structure_id),
|
||||
}),
|
||||
),
|
||||
);
|
||||
return renderWorkshop(res, "workshop/db_garden", {
|
||||
db: structdb,
|
||||
...sidebarStuff(req.params.structure_id),
|
||||
});
|
||||
});
|
||||
|
||||
app.post("/workshop/:structure_id/route", (req, res) => {
|
||||
|
|
@ -494,7 +479,6 @@ app.post("/workshop/:structure_id/route", (req, res) => {
|
|||
p = p.substring(0, p.length - 1);
|
||||
}
|
||||
const route = model.createRoute(
|
||||
db,
|
||||
req.body.verb,
|
||||
p[0] == "/" ? p.substring(1) : "/" + p,
|
||||
req.params.structure_id,
|
||||
|
|
@ -510,12 +494,12 @@ app.post("/workshop/:structure_id/route", (req, res) => {
|
|||
});
|
||||
|
||||
app.put("/workshop/:structure_id/route/:route_id", (req, res) => {
|
||||
const route = model.getRoute(db, req.params.route_id);
|
||||
model.updateRoute(db, { ...route, ...req.body });
|
||||
const route = model.getRoute(req.params.route_id);
|
||||
model.updateRoute({ ...route, ...req.body });
|
||||
if (req.body.scaffold_page) {
|
||||
// TODO: make this send over scaffold page id too someday
|
||||
const latestPage = model.getLatestScaffoldPage(db, req.params.route_id)
|
||||
model.updateScaffoldPage(db, { ...latestPage, content: req.body.scaffold_page })
|
||||
const latestPage = model.getLatestScaffoldPage(req.params.route_id)
|
||||
model.updateScaffoldPage({ ...latestPage, content: req.body.scaffold_page })
|
||||
}
|
||||
if (route.verb == "WS") {
|
||||
bootstrapWebsocketHandler({ ...route, ...req.body })
|
||||
|
|
@ -526,9 +510,9 @@ app.put("/workshop/:structure_id/route/:route_id", (req, res) => {
|
|||
app.put("/workshop/:structure_id/db/:db_id/library", (req, res) => {
|
||||
try {
|
||||
let dbId = req.params.db_id;
|
||||
let appDb = model.getDb(db, dbId);
|
||||
model.updateDb(db, { ...appDb, library: req.body.library });
|
||||
appDb = model.getDb(db, dbId);
|
||||
let appDb = model.getDb(dbId);
|
||||
model.updateDb({ ...appDb, library: req.body.library });
|
||||
appDb = model.getDb(dbId);
|
||||
|
||||
let dbInstance = model.getDbInstance(dbId);
|
||||
let capturedOutput = [];
|
||||
|
|
@ -536,20 +520,11 @@ app.put("/workshop/:structure_id/db/:db_id/library", (req, res) => {
|
|||
module: { exports: null },
|
||||
sql: dbInstance,
|
||||
console: {
|
||||
log: (...args) => capturedOutput.push(args.join(" ")),
|
||||
log: (...args) => capturedOutput.push(inspectArgs(args)),
|
||||
},
|
||||
});
|
||||
let evaledCode = vm.runInContext(appDb.library, context);
|
||||
let stdout = capturedOutput
|
||||
.map((v) => {
|
||||
return util.inspect(v, {
|
||||
showHidden: false,
|
||||
depth: null, // `null` lets you see the full depth of the object
|
||||
colors: false, // Setting this to true uses ANSI color codes
|
||||
compact: false,
|
||||
});
|
||||
})
|
||||
.join("\n");
|
||||
let stdout = capturedOutput.join("\n");
|
||||
return res.send(`${stdout}\n\n> ${evaledCode}`.trim());
|
||||
} catch (e) {
|
||||
return res.send(`${e}\n\n${e.stack}`);
|
||||
|
|
@ -559,26 +534,14 @@ app.put("/workshop/:structure_id/db/:db_id/library", (req, res) => {
|
|||
app.post("/workshop/:structure_id/db/:db_id/repl", (req, res) => {
|
||||
try {
|
||||
let dbId = req.params.db_id;
|
||||
let appDb = model.getDb(db, dbId);
|
||||
let appDb = model.getDb(dbId);
|
||||
let dbInstance = model.getDbInstance(dbId);
|
||||
let capturedOutput = [];
|
||||
let context = vm.createContext({
|
||||
module: { exports: null },
|
||||
sql: dbInstance,
|
||||
console: {
|
||||
log: (...args) =>
|
||||
capturedOutput.push(
|
||||
args
|
||||
.map((v) => {
|
||||
return util.inspect(v, {
|
||||
showHidden: false,
|
||||
depth: null, // `null` lets you see the full depth of the object
|
||||
colors: false, // Setting this to true uses ANSI color codes
|
||||
compact: false,
|
||||
});
|
||||
})
|
||||
.join(" "),
|
||||
),
|
||||
log: (...args) => capturedOutput.push(inspectArgs(args)),
|
||||
},
|
||||
});
|
||||
const libraryScript = new vm.Script(appDb.library);
|
||||
|
|
@ -597,7 +560,6 @@ app.post("/workshop/:structure_id/template", (req, res) => {
|
|||
let name = req.body.name;
|
||||
|
||||
const template = model.createTemplate(
|
||||
db,
|
||||
req.params.structure_id,
|
||||
name,
|
||||
"<div>henlo <%= it.name %></div>",
|
||||
|
|
@ -616,8 +578,8 @@ app.put("/workshop/:structure_id/template/:template_id", (req, res) => {
|
|||
let content = req.body.content;
|
||||
let test_object = req.body.test_object;
|
||||
|
||||
model.updateTemplate(db, {
|
||||
...model.getTemplate(db, id),
|
||||
model.updateTemplate({
|
||||
...model.getTemplate(id),
|
||||
content,
|
||||
test_object,
|
||||
});
|
||||
|
|
@ -626,28 +588,24 @@ app.put("/workshop/:structure_id/template/:template_id", (req, res) => {
|
|||
});
|
||||
|
||||
app.get("/workshop/:structure_id/template/:template_id", (req, res) => {
|
||||
const template = model.getTemplate(db, req.params.template_id);
|
||||
const template = model.getTemplate(req.params.template_id);
|
||||
|
||||
return res.send(
|
||||
bootstrapTemplateWithHTMXetc(
|
||||
eta.render("workshop/template", {
|
||||
template: template,
|
||||
...sidebarStuff(db, req.params.structure_id),
|
||||
}),
|
||||
),
|
||||
);
|
||||
return renderWorkshop(res, "workshop/template", {
|
||||
template: template,
|
||||
...sidebarStuff(req.params.structure_id),
|
||||
});
|
||||
});
|
||||
|
||||
app.get("/workshop/:structure_id/template/:template_id/preview", (req, res) => {
|
||||
const template = model.getTemplate(db, req.params.template_id);
|
||||
const struct = model.getStructure(db, req.params.structure_id);
|
||||
const template = model.getTemplate(req.params.template_id);
|
||||
const struct = model.getStructure(req.params.structure_id);
|
||||
const eta = model.getTemplater(req.params.structure_id);
|
||||
|
||||
const context = vm.createContext({ it: null });
|
||||
vm.runInContext(template.test_object, context);
|
||||
|
||||
context.it.route = function (url) {
|
||||
return struct.route_prefix ? path.join(struct.route_prefix, url) : url;
|
||||
return withPrefix(struct.route_prefix, url);
|
||||
};
|
||||
|
||||
return res.send(
|
||||
|
|
@ -663,11 +621,8 @@ app.get("/workshop/:structure_id/template/:template_id/preview", (req, res) => {
|
|||
});
|
||||
|
||||
app.get("/workshop/:structure_id/route/:id", (req, res) => {
|
||||
const route = model.getRoute(db, req.params.id);
|
||||
let routePrefix = model.getStructure(
|
||||
db,
|
||||
req.params.structure_id,
|
||||
).route_prefix;
|
||||
const route = model.getRoute(req.params.id);
|
||||
let routePrefix = model.getStructure(req.params.structure_id).route_prefix;
|
||||
let previewUrl = null;
|
||||
|
||||
if (route["verb"] == "GET" ) {
|
||||
|
|
@ -679,26 +634,22 @@ app.get("/workshop/:structure_id/route/:id", (req, res) => {
|
|||
previewUrl = `/workshop/${req.params.structure_id}/route/${req.params.id}/preview`;
|
||||
}
|
||||
|
||||
template = route["verb"] == "GET" ? "workshop/route" : "workshop/cud_route";
|
||||
const template = route["verb"] == "GET" ? "workshop/route" : "workshop/cud_route";
|
||||
|
||||
return res.send(
|
||||
bootstrapTemplateWithHTMXetc(
|
||||
eta.render(template, {
|
||||
route: route,
|
||||
previewUrl: previewUrl,
|
||||
...sidebarStuff(db, req.params.structure_id),
|
||||
}),
|
||||
),
|
||||
);
|
||||
return renderWorkshop(res, template, {
|
||||
route: route,
|
||||
previewUrl: previewUrl,
|
||||
...sidebarStuff(req.params.structure_id),
|
||||
});
|
||||
});
|
||||
|
||||
app.get("/workshop/:structure_id/route/:route_id/preview", (req, res) => {
|
||||
const route = model.getRoute(db, req.params.route_id);
|
||||
const struct = model.getStructure(db, req.params.structure_id);
|
||||
const route = model.getRoute(req.params.route_id);
|
||||
const struct = model.getStructure(req.params.structure_id);
|
||||
|
||||
const it = {
|
||||
route: function (url) {
|
||||
return struct.route_prefix ? path.join(struct.route_prefix, url) : url;
|
||||
return withPrefix(struct.route_prefix, url);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -718,23 +669,19 @@ app.get("/workshop/:structure_id/route/:route_id/logs", (req, res) => {
|
|||
const since = req.query.since;
|
||||
let logs = [];
|
||||
if (since != undefined) {
|
||||
logs = model.getNewLogsByRoute(db, req.params.route_id, since);
|
||||
logs = model.getNewLogsByRoute(req.params.route_id, since);
|
||||
} else {
|
||||
logs = model.getLogsByRoute(db, req.params.route_id);
|
||||
logs = model.getLogsByRoute(req.params.route_id);
|
||||
}
|
||||
|
||||
const lastId = model.getMostRecentLogIdByRoute(db, req.params.route_id);
|
||||
const lastId = model.getMostRecentLogIdByRoute(req.params.route_id);
|
||||
|
||||
return res.send(
|
||||
bootstrapTemplateWithHTMXetc(
|
||||
eta.render("workshop/logs", {
|
||||
logs: logs,
|
||||
structId: req.params.structure_id,
|
||||
routeId: req.params.route_id,
|
||||
since: lastId,
|
||||
}),
|
||||
),
|
||||
);
|
||||
return renderWorkshop(res, "workshop/logs", {
|
||||
logs: logs,
|
||||
structId: req.params.structure_id,
|
||||
routeId: req.params.route_id,
|
||||
since: lastId,
|
||||
});
|
||||
});
|
||||
|
||||
// POST route to handle file upload
|
||||
|
|
@ -766,34 +713,26 @@ function prefixUrlWithHost(req, path) {
|
|||
app.get("/workshop/:structure_id/files", (req, res) => {
|
||||
const { structure_id } = req.params;
|
||||
|
||||
const files = model.getFilesForStruct(db, structure_id);
|
||||
const files = model.getFilesForStruct(structure_id);
|
||||
files.map((it) => {
|
||||
it.url = prefixUrlWithHost(req, it.path);
|
||||
});
|
||||
|
||||
return res.send(
|
||||
bootstrapTemplateWithHTMXetc(
|
||||
eta.render("workshop/files", {
|
||||
files,
|
||||
...sidebarStuff(db, structure_id),
|
||||
}),
|
||||
),
|
||||
);
|
||||
return renderWorkshop(res, "workshop/files", {
|
||||
files,
|
||||
...sidebarStuff(structure_id),
|
||||
});
|
||||
});
|
||||
|
||||
app.get("/workshop/:structure_id/settings", (req, res) => {
|
||||
return res.send(
|
||||
bootstrapTemplateWithHTMXetc(
|
||||
eta.render("workshop/settings", {
|
||||
...sidebarStuff(db, req.params.structure_id),
|
||||
}),
|
||||
),
|
||||
);
|
||||
return renderWorkshop(res, "workshop/settings", {
|
||||
...sidebarStuff(req.params.structure_id),
|
||||
});
|
||||
});
|
||||
|
||||
app.put("/workshop/:structure_id/settings", (req, res) => {
|
||||
let structId = req.params.structure_id;
|
||||
let struct = model.getStructure(db, structId);
|
||||
let struct = model.getStructure(structId);
|
||||
let routePrefix = req.body.route_prefix;
|
||||
|
||||
if (routePrefix[0] != "/") {
|
||||
|
|
@ -803,59 +742,43 @@ app.put("/workshop/:structure_id/settings", (req, res) => {
|
|||
routePrefix = routePrefix.substring(0, routePrefix.length - 1);
|
||||
}
|
||||
|
||||
model.updateStruct(db, {
|
||||
model.updateStruct({
|
||||
...struct,
|
||||
route_prefix: routePrefix,
|
||||
head_injection: req.body.head_injection,
|
||||
});
|
||||
struct = model.getStructure(db, structId);
|
||||
struct = model.getStructure(structId);
|
||||
|
||||
res.send("success!");
|
||||
});
|
||||
|
||||
app.get("/workshop/:structure_id/new_template_modal", (req, res) => {
|
||||
return res.send(
|
||||
bootstrapTemplateWithHTMXetc(
|
||||
eta.render("workshop/new_template_modal", {
|
||||
structure: model.getStructure(db, req.params.structure_id),
|
||||
}),
|
||||
),
|
||||
);
|
||||
return renderWorkshop(res, "workshop/new_template_modal", {
|
||||
structure: model.getStructure(req.params.structure_id),
|
||||
});
|
||||
});
|
||||
|
||||
app.get("/workshop/:structure_id/new_route_modal", (req, res) => {
|
||||
return res.send(
|
||||
bootstrapTemplateWithHTMXetc(
|
||||
eta.render("workshop/new_route_modal", {
|
||||
structure: model.getStructure(db, req.params.structure_id),
|
||||
}),
|
||||
),
|
||||
);
|
||||
return renderWorkshop(res, "workshop/new_route_modal", {
|
||||
structure: model.getStructure(req.params.structure_id),
|
||||
});
|
||||
});
|
||||
|
||||
app.get("/workshop/:structure_id/new_db_modal", (req, res) => {
|
||||
return res.send(
|
||||
bootstrapTemplateWithHTMXetc(
|
||||
eta.render("workshop/new_db_modal", {
|
||||
structure: model.getStructure(db, req.params.structure_id),
|
||||
}),
|
||||
),
|
||||
);
|
||||
return renderWorkshop(res, "workshop/new_db_modal", {
|
||||
structure: model.getStructure(req.params.structure_id),
|
||||
});
|
||||
});
|
||||
|
||||
app.get("/workshop/:structure_id/clone_modal", (req, res) => {
|
||||
const structure = model.getStructure(db, req.params.structure_id);
|
||||
const dbs = model.getDbsForStructure(db, req.params.structure_id);
|
||||
const structure = model.getStructure(req.params.structure_id);
|
||||
const dbs = model.getDbsForStructure(req.params.structure_id);
|
||||
|
||||
return res.send(
|
||||
bootstrapTemplateWithHTMXetc(
|
||||
eta.render("workshop/clone_structure_modal", {
|
||||
structure,
|
||||
dbs,
|
||||
defaultRoutePrefix: path.join(structure.route_prefix || "", "clone"),
|
||||
}),
|
||||
),
|
||||
);
|
||||
return renderWorkshop(res, "workshop/clone_structure_modal", {
|
||||
structure,
|
||||
dbs,
|
||||
defaultRoutePrefix: path.join(structure.route_prefix || "", "clone"),
|
||||
});
|
||||
});
|
||||
|
||||
function embedHTML(url) {
|
||||
|
|
@ -882,13 +805,13 @@ app.all("*", async (req, res) => {
|
|||
.prepare("SELECT * FROM routes WHERE id = ?")
|
||||
.get(routeMatch.id);
|
||||
|
||||
const structure = model.getStructure(db, route.structure_id);
|
||||
const structure = model.getStructure(route.structure_id);
|
||||
const __urlPrefix = structure.route_prefix;
|
||||
|
||||
try {
|
||||
// todo: only add req res to contexst when running the handler()
|
||||
// which means moving to runscript instead of runincontext for that
|
||||
let context = bootstrapContext(db, route.structure_id, route.id, {
|
||||
let context = bootstrapContext(route.structure_id, route.id, {
|
||||
req,
|
||||
res,
|
||||
eta,
|
||||
|
|
@ -897,7 +820,7 @@ app.all("*", async (req, res) => {
|
|||
res.render = (template, context) => {
|
||||
context = context || {};
|
||||
context.route = function (url) {
|
||||
return __urlPrefix ? path.join(__urlPrefix, url) : url;
|
||||
return withPrefix(__urlPrefix, url);
|
||||
};
|
||||
const eta = model.getTemplater(route.structure_id);
|
||||
res.send(
|
||||
|
|
@ -918,7 +841,7 @@ app.all("*", async (req, res) => {
|
|||
const result = await executionScript.runInContext(context);
|
||||
} catch (e) {
|
||||
const error = e.stack ? `${e}\n\n${e.stack}` : `${e}`;
|
||||
model.createLog(db, structure.id, route.id, error, true);
|
||||
model.createLog(structure.id, route.id, error, true);
|
||||
return res.status(500).send(error);
|
||||
}
|
||||
} else {
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue