Split index file into src/ folder components
This commit is contained in:
78
index.js
78
index.js
@@ -1,78 +0,0 @@
|
|||||||
const figlet = require("figlet");
|
|
||||||
const express = require("express");
|
|
||||||
|
|
||||||
const app = express();
|
|
||||||
const port = 3000;
|
|
||||||
|
|
||||||
const defaultFontOptions = {
|
|
||||||
font: "Larry 3D",
|
|
||||||
horizontalLayout: "default",
|
|
||||||
verticalLayout: "default",
|
|
||||||
width: 80,
|
|
||||||
whitespaceBreak: true,
|
|
||||||
};
|
|
||||||
|
|
||||||
function generateLarryMessage(message) {
|
|
||||||
return new Promise((resolve, reject) => {
|
|
||||||
figlet.text(
|
|
||||||
message,
|
|
||||||
{
|
|
||||||
...defaultFontOptions,
|
|
||||||
},
|
|
||||||
(err, data) => {
|
|
||||||
if (err) {
|
|
||||||
console.error("error from figlet:", error);
|
|
||||||
return reject(err);
|
|
||||||
}
|
|
||||||
|
|
||||||
resolve(data.replaceAll("L", "_"));
|
|
||||||
}
|
|
||||||
);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
function generateCatOutput(ascii) {
|
|
||||||
return `#!/bin/bash
|
|
||||||
cat << 'EOF'
|
|
||||||
|
|
||||||
${ascii}
|
|
||||||
|
|
||||||
EOF
|
|
||||||
`;
|
|
||||||
}
|
|
||||||
|
|
||||||
const asciiFontController = (req, res) => {
|
|
||||||
const { message } = req.query;
|
|
||||||
console.log(`generating ascii for: ${message}`);
|
|
||||||
|
|
||||||
return generateLarryMessage(message)
|
|
||||||
.then((ascii) => res.send(ascii))
|
|
||||||
.catch((error) =>
|
|
||||||
res.status(500).send({
|
|
||||||
success: false,
|
|
||||||
message: "Unexpected error from font generation",
|
|
||||||
})
|
|
||||||
);
|
|
||||||
};
|
|
||||||
|
|
||||||
const modtFontController = (req, res) => {
|
|
||||||
const { message } = req.query;
|
|
||||||
console.log(`generating motd for: ${message}`);
|
|
||||||
|
|
||||||
return generateLarryMessage(message)
|
|
||||||
.then((ascii) => generateCatOutput(ascii))
|
|
||||||
.then((motd) => res.send(motd))
|
|
||||||
.catch((error) => {
|
|
||||||
return res.status(500).send({
|
|
||||||
success: false,
|
|
||||||
message: "Unexpected error from font generation",
|
|
||||||
});
|
|
||||||
});
|
|
||||||
};
|
|
||||||
|
|
||||||
app.get("/ascii", asciiFontController);
|
|
||||||
app.get("/motd", modtFontController);
|
|
||||||
|
|
||||||
app.listen(port, () => {
|
|
||||||
console.log(`Font generation application listening on port ${port}.`);
|
|
||||||
});
|
|
||||||
@@ -1,4 +1,7 @@
|
|||||||
{
|
{
|
||||||
|
"scripts": {
|
||||||
|
"start": "node src/app.js"
|
||||||
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"express": "^4.18.2",
|
"express": "^4.18.2",
|
||||||
"figlet": "^1.5.2"
|
"figlet": "^1.5.2"
|
||||||
|
|||||||
15
src/app.js
Normal file
15
src/app.js
Normal file
@@ -0,0 +1,15 @@
|
|||||||
|
const express = require("express");
|
||||||
|
|
||||||
|
const asciiFontController = require("./controllers/asciiController.js");
|
||||||
|
const modtFontController = require("./controllers/motdController.js");
|
||||||
|
const requiredQueryMiddleware = require("./requiredQueryMiddleware");
|
||||||
|
|
||||||
|
const app = express();
|
||||||
|
const port = 3000;
|
||||||
|
|
||||||
|
app.get("/ascii", requiredQueryMiddleware, asciiFontController);
|
||||||
|
app.get("/motd", requiredQueryMiddleware, modtFontController);
|
||||||
|
|
||||||
|
app.listen(port, () => {
|
||||||
|
console.log(`Font generation application listening on port ${port}.`);
|
||||||
|
});
|
||||||
33
src/ascii.js
Normal file
33
src/ascii.js
Normal file
@@ -0,0 +1,33 @@
|
|||||||
|
const figlet = require("figlet");
|
||||||
|
|
||||||
|
const defaultFontOptions = {
|
||||||
|
font: "Larry 3D",
|
||||||
|
horizontalLayout: "default",
|
||||||
|
verticalLayout: "default",
|
||||||
|
width: 80,
|
||||||
|
whitespaceBreak: true,
|
||||||
|
};
|
||||||
|
|
||||||
|
function generateAscii(message, options) {
|
||||||
|
const _options = {
|
||||||
|
...defaultFontOptions,
|
||||||
|
...options,
|
||||||
|
};
|
||||||
|
|
||||||
|
return new Promise((resolve, reject) => {
|
||||||
|
figlet.text(message, _options, (err, data) => {
|
||||||
|
if (err) {
|
||||||
|
console.error("error from figlet:", error);
|
||||||
|
return reject(err);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (_options.font === "Larry 3D") {
|
||||||
|
data = data.replaceAll("L", "_");
|
||||||
|
}
|
||||||
|
|
||||||
|
resolve(data);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = generateAscii;
|
||||||
16
src/controllers/asciiController.js
Normal file
16
src/controllers/asciiController.js
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
const generateAscii = require("../ascii.js");
|
||||||
|
|
||||||
|
const asciiFontController = (req, res) => {
|
||||||
|
const { text } = req.query;
|
||||||
|
|
||||||
|
return generateAscii(text)
|
||||||
|
.then((ascii) => res.send(ascii))
|
||||||
|
.catch((error) =>
|
||||||
|
res.status(error?.statusCode || 500).send({
|
||||||
|
success: false,
|
||||||
|
message: error?.message || "Unexpected error from font generation",
|
||||||
|
})
|
||||||
|
);
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = asciiFontController;
|
||||||
17
src/controllers/motdController.js
Normal file
17
src/controllers/motdController.js
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
const generateAscii = require("../ascii.js");
|
||||||
|
|
||||||
|
const modtFontController = (req, res) => {
|
||||||
|
const { text } = req.query;
|
||||||
|
|
||||||
|
return generateAscii(message)
|
||||||
|
.then((ascii) => generateCatOutput(ascii))
|
||||||
|
.then((motd) => res.send(motd))
|
||||||
|
.catch((error) => {
|
||||||
|
return res.status(500).send({
|
||||||
|
success: false,
|
||||||
|
message: "Unexpected error from font generation",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = modtFontController;
|
||||||
13
src/errors.js
Normal file
13
src/errors.js
Normal file
@@ -0,0 +1,13 @@
|
|||||||
|
class MissingTextError extends Error {
|
||||||
|
constructor(error = null) {
|
||||||
|
const message = `Missing query parameter 'text'`;
|
||||||
|
super(message);
|
||||||
|
|
||||||
|
this.error = error;
|
||||||
|
this.statusCode = 400;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = {
|
||||||
|
MissingTextError,
|
||||||
|
};
|
||||||
14
src/requiredQueryMiddleware.js
Normal file
14
src/requiredQueryMiddleware.js
Normal file
@@ -0,0 +1,14 @@
|
|||||||
|
const { MissingTextError } = require("./errors.js");
|
||||||
|
|
||||||
|
const requiredQueryMiddleware = (req, res, next) => {
|
||||||
|
const { text } = req.query;
|
||||||
|
|
||||||
|
if (!text || text?.length === 0) {
|
||||||
|
const error = new MissingTextError();
|
||||||
|
return res.status(error?.statusCode || 500).send(error?.message);
|
||||||
|
}
|
||||||
|
|
||||||
|
next();
|
||||||
|
};
|
||||||
|
|
||||||
|
module.exports = requiredQueryMiddleware;
|
||||||
Reference in New Issue
Block a user