diff --git a/package-lock.json b/package-lock.json index 7a2b90cb15..838aa4d9d1 100644 --- a/package-lock.json +++ b/package-lock.json @@ -31,7 +31,7 @@ "dotenv": "^8.2.0", "eventsource": "^1.0.7", "express": "^4.17.1", - "hbs": "^4.2.0", + "express-handlebars": "^6.0.3", "ioredis": "^4.27.8", "js-yaml": "^3.14.1", "lru-cache": "^6.0.0", @@ -2430,8 +2430,7 @@ "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "node_modules/base": { "version": "0.11.2", @@ -2656,7 +2655,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -3232,8 +3230,7 @@ "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "node_modules/configstore": { "version": "5.0.1", @@ -4255,6 +4252,19 @@ "node": ">= 0.10.0" } }, + "node_modules/express-handlebars": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-6.0.3.tgz", + "integrity": "sha512-cG6/CeriAhAYKC9+VivXtj41+HNDB6xnigwzcXv/m9BBtijR2Yg5I5VWsK6nPc1+E06FIS23nGfr2COUv8sG3A==", + "dependencies": { + "glob": "^7.2.0", + "graceful-fs": "^4.2.9", + "handlebars": "^4.7.7" + }, + "engines": { + "node": ">=v12.22.9" + } + }, "node_modules/express/node_modules/cookie": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", @@ -4564,11 +4574,6 @@ "node": ">=0.10.0" } }, - "node_modules/foreachasync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", - "integrity": "sha1-VQKYfchxS+M5IJfzLgBxyd7gfPY=" - }, "node_modules/form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", @@ -4707,8 +4712,7 @@ "node_modules/fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "node_modules/fsevents": { "version": "2.3.2", @@ -4869,7 +4873,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -5113,9 +5116,9 @@ } }, "node_modules/graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "node_modules/growly": { "version": "1.3.0", @@ -5255,19 +5258,6 @@ "node": ">=8" } }, - "node_modules/hbs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hbs/-/hbs-4.2.0.tgz", - "integrity": "sha512-dQwHnrfWlTk5PvG9+a45GYpg0VpX47ryKF8dULVd6DtwOE6TEcYQXQ5QM6nyOx/h7v3bvEQbdn19EDAcfUAgZg==", - "dependencies": { - "handlebars": "4.7.7", - "walk": "2.3.15" - }, - "engines": { - "node": ">= 0.8", - "npm": "1.2.8000 || >= 1.4.16" - } - }, "node_modules/hook-std": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-2.0.0.tgz", @@ -5475,7 +5465,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "dependencies": { "once": "^1.3.0", "wrappy": "1" @@ -7375,7 +7364,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "dependencies": { "brace-expansion": "^1.1.7" }, @@ -10996,7 +10984,6 @@ "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, "engines": { "node": ">=0.10.0" } @@ -14279,14 +14266,6 @@ "node": ">=10" } }, - "node_modules/walk": { - "version": "2.3.15", - "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.15.tgz", - "integrity": "sha512-4eRTBZljBfIISK1Vnt69Gvr2w/wc3U6Vtrw7qiN5iqYJPH7LElcYh/iU4XWhdCy2dZqv1ToMyYlybDylfG/5Vg==", - "dependencies": { - "foreachasync": "^3.0.0" - } - }, "node_modules/walker": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", @@ -16578,8 +16557,7 @@ "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" }, "base": { "version": "0.11.2", @@ -16764,7 +16742,6 @@ "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, "requires": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -17207,8 +17184,7 @@ "concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=" }, "configstore": { "version": "5.0.1", @@ -18038,6 +18014,16 @@ } } }, + "express-handlebars": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/express-handlebars/-/express-handlebars-6.0.3.tgz", + "integrity": "sha512-cG6/CeriAhAYKC9+VivXtj41+HNDB6xnigwzcXv/m9BBtijR2Yg5I5VWsK6nPc1+E06FIS23nGfr2COUv8sG3A==", + "requires": { + "glob": "^7.2.0", + "graceful-fs": "^4.2.9", + "handlebars": "^4.7.7" + } + }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -18270,11 +18256,6 @@ "integrity": "sha1-gQaNKVqBQuwKxybG4iAMMPttXoA=", "dev": true }, - "foreachasync": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/foreachasync/-/foreachasync-3.0.0.tgz", - "integrity": "sha1-VQKYfchxS+M5IJfzLgBxyd7gfPY=" - }, "form-data": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/form-data/-/form-data-3.0.1.tgz", @@ -18381,8 +18362,7 @@ "fs.realpath": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true + "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=" }, "fsevents": { "version": "2.3.2", @@ -18514,7 +18494,6 @@ "version": "7.2.0", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", - "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -18685,9 +18664,9 @@ } }, "graceful-fs": { - "version": "4.2.6", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.6.tgz", - "integrity": "sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==" + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.9.tgz", + "integrity": "sha512-NtNxqUcXgpW2iMrfqSfR73Glt39K+BLwWsPs94yR63v45T0Wbej7eRmL5cWfwEgqXnmjQp3zaJTshdRW/qC2ZQ==" }, "growly": { "version": "1.3.0", @@ -18790,15 +18769,6 @@ "resolved": "https://registry.npmjs.org/has-yarn/-/has-yarn-2.1.0.tgz", "integrity": "sha512-UqBRqi4ju7T+TqGNdqAO0PaSVGsDGJUBQvk9eUWNGRY1CFGDzYhLWoM7JQEemnlvVcv/YEmc2wNW8BC24EnUsw==" }, - "hbs": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/hbs/-/hbs-4.2.0.tgz", - "integrity": "sha512-dQwHnrfWlTk5PvG9+a45GYpg0VpX47ryKF8dULVd6DtwOE6TEcYQXQ5QM6nyOx/h7v3bvEQbdn19EDAcfUAgZg==", - "requires": { - "handlebars": "4.7.7", - "walk": "2.3.15" - } - }, "hook-std": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-2.0.0.tgz", @@ -18956,7 +18926,6 @@ "version": "1.0.6", "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -20423,7 +20392,6 @@ "version": "3.0.4", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.0.4.tgz", "integrity": "sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==", - "dev": true, "requires": { "brace-expansion": "^1.1.7" } @@ -23068,8 +23036,7 @@ "path-is-absolute": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true + "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=" }, "path-key": { "version": "3.1.1", @@ -25617,14 +25584,6 @@ "xml-name-validator": "^3.0.0" } }, - "walk": { - "version": "2.3.15", - "resolved": "https://registry.npmjs.org/walk/-/walk-2.3.15.tgz", - "integrity": "sha512-4eRTBZljBfIISK1Vnt69Gvr2w/wc3U6Vtrw7qiN5iqYJPH7LElcYh/iU4XWhdCy2dZqv1ToMyYlybDylfG/5Vg==", - "requires": { - "foreachasync": "^3.0.0" - } - }, "walker": { "version": "1.0.7", "resolved": "https://registry.npmjs.org/walker/-/walker-1.0.7.tgz", diff --git a/package.json b/package.json index 595ca61d59..6cc006bfc0 100644 --- a/package.json +++ b/package.json @@ -57,7 +57,7 @@ "dotenv": "^8.2.0", "eventsource": "^1.0.7", "express": "^4.17.1", - "hbs": "^4.2.0", + "express-handlebars": "^6.0.3", "ioredis": "^4.27.8", "js-yaml": "^3.14.1", "lru-cache": "^6.0.0", diff --git a/src/apps/default.ts b/src/apps/default.ts index 388935fa0c..27f8870bb9 100644 --- a/src/apps/default.ts +++ b/src/apps/default.ts @@ -19,7 +19,7 @@ export function defaultApp( pkg = {}; } - res.render("probot.hbs", pkg); + res.render("probot.handlebars", pkg); }); router.get("/", (req, res, next) => res.redirect("/probot")); } diff --git a/src/apps/setup.ts b/src/apps/setup.ts index a42f09ff7f..f42f430346 100644 --- a/src/apps/setup.ts +++ b/src/apps/setup.ts @@ -47,7 +47,7 @@ export const setupAppFactory = ( const manifest = setup.getManifest(pkg, baseUrl); const createAppUrl = setup.createAppUrl; // Pass the manifest to be POST'd - res.render("setup.hbs", { pkg, createAppUrl, manifest }); + res.render("setup.handlebars", { pkg, createAppUrl, manifest }); }); route.get("/probot/setup", async (req: Request, res: Response) => { @@ -71,7 +71,7 @@ export const setupAppFactory = ( route.get("/probot/import", async (_req, res) => { const { WEBHOOK_PROXY_URL, GHE_HOST } = process.env; const GH_HOST = `https://${GHE_HOST ?? "github.com"}`; - res.render("import.hbs", { WEBHOOK_PROXY_URL, GH_HOST }); + res.render("import.handlebars", { WEBHOOK_PROXY_URL, GH_HOST }); }); route.post("/probot/import", bodyParser.json(), async (req, res) => { @@ -90,7 +90,7 @@ export const setupAppFactory = ( }); route.get("/probot/success", async (req, res) => { - res.render("success.hbs"); + res.render("success.handlebars"); }); route.get("/", (req, res, next) => res.redirect("/probot")); diff --git a/src/server/server.ts b/src/server/server.ts index 58b63e6ed7..abf22b0d92 100644 --- a/src/server/server.ts +++ b/src/server/server.ts @@ -11,6 +11,7 @@ import { createWebhookProxy } from "../helpers/webhook-proxy"; import { VERSION } from "../version"; import { ApplicationFunction, ServerOptions } from "../types"; import { Probot } from "../"; +import { engine } from "express-handlebars"; type State = { httpServer?: HttpServer; @@ -55,7 +56,13 @@ export class Server { }) ); - this.expressApp.set("view engine", "hbs"); + this.expressApp.engine( + "handlebars", + engine({ + defaultLayout: false, + }) + ); + this.expressApp.set("view engine", "handlebars"); this.expressApp.set("views", join(__dirname, "..", "..", "views")); this.expressApp.get("/ping", (req, res) => res.end("PONG")); } diff --git a/test/apps/setup.test.ts b/test/apps/setup.test.ts index 9184c3fc90..931549dc7f 100644 --- a/test/apps/setup.test.ts +++ b/test/apps/setup.test.ts @@ -114,7 +114,7 @@ describe("Setup app", () => { }); describe("GET /probot/import", () => { - it("renders import.hbs", async () => { + it("renders import.handlebars", async () => { await request(server.expressApp).get("/probot/import").expect(200); }); }); diff --git a/views/import.hbs b/views/import.handlebars similarity index 100% rename from views/import.hbs rename to views/import.handlebars diff --git a/views/probot.hbs b/views/probot.handlebars similarity index 100% rename from views/probot.hbs rename to views/probot.handlebars diff --git a/views/setup.hbs b/views/setup.handlebars similarity index 100% rename from views/setup.hbs rename to views/setup.handlebars diff --git a/views/success.hbs b/views/success.handlebars similarity index 100% rename from views/success.hbs rename to views/success.handlebars