|
1 | | -// External dependencies |
2 | | -import express from 'express' |
3 | | -import nunjucks from 'nunjucks' |
4 | 1 | import sessionInDatabase from 'connect-pg-simple' |
| 2 | +import express from 'express' |
5 | 3 | import session from 'express-session' |
6 | | -import { Pool } from 'pg' |
7 | | - |
8 | | -import { join } from 'node:path' |
9 | | - |
10 | 4 | import NHSPrototypeKit from 'nhsuk-prototype-kit' |
| 5 | +import { Pool } from 'pg' |
11 | 6 |
|
12 | | -const serviceName = 'Manage vaccinations in schools' |
13 | | - |
14 | | -// Local dependencies |
15 | | -import routes from './app/routes.js' |
16 | | -import filters from './app/filters.js' |
17 | 7 | import sessionDataDefaults from './app/data.js' |
| 8 | +import filters from './app/filters.js' |
| 9 | +import globals from './app/globals.js' |
| 10 | +import routes from './app/routes.js' |
18 | 11 |
|
19 | | -// Set configuration variables |
20 | | -const port = parseInt(process.env.PORT, 10) || 2000 |
| 12 | +const { DATABASE_URL, NODE_ENV } = process.env |
21 | 13 |
|
22 | | -// Initialise applications |
23 | 14 | const app = express() |
24 | 15 |
|
25 | | - |
26 | | -const sessionName = `manage-vaccinations-in-schools-prototype` |
27 | | -const sessionOptions = { |
28 | | - secret: sessionName, |
29 | | - cookie: { |
30 | | - maxAge: 1000 * 60 * 60 * 4, // 4 hours |
31 | | - secure: process.env.NODE_ENV === 'production' |
32 | | - } |
33 | | -} |
34 | | - |
35 | | -const PgSession = sessionInDatabase(session) |
36 | | -const pool = new Pool({ |
37 | | - connectionString: process.env.DATABASE_URL, |
38 | | - ssl: |
39 | | - process.env.NODE_ENV === 'production' |
40 | | - ? { |
41 | | - rejectUnauthorized: false |
42 | | - } |
43 | | - : false |
44 | | -}) |
45 | | - |
46 | 16 | app.use( |
47 | | - session( |
48 | | - Object.assign(sessionOptions, { |
49 | | - store: new PgSession({ pool }), |
50 | | - resave: false, |
51 | | - saveUninitialized: false |
| 17 | + session({ |
| 18 | + cookie: { |
| 19 | + maxAge: 1000 * 60 * 60 * 4, // 4 hours |
| 20 | + secure: process.env.NODE_ENV === 'production' |
| 21 | + }, |
| 22 | + resave: false, |
| 23 | + saveUninitialized: false, |
| 24 | + secret: 'manage-vaccinations-in-schools-prototype', |
| 25 | + store: new (sessionInDatabase(session))({ |
| 26 | + pool: new Pool({ |
| 27 | + connectionString: DATABASE_URL, |
| 28 | + ssl: NODE_ENV === 'production' ? { rejectUnauthorized: false } : false |
| 29 | + }) |
52 | 30 | }) |
53 | | - ) |
| 31 | + }) |
54 | 32 | ) |
55 | 33 |
|
56 | | -// Nunjucks configuration for application |
57 | | -const appViews = [ |
58 | | - join(import.meta.dirname, 'app/views/'), |
59 | | - join(import.meta.dirname, 'node_modules/nhsuk-frontend/dist/nhsuk/components'), |
60 | | - join(import.meta.dirname, 'node_modules/nhsuk-frontend/dist/nhsuk/macros'), |
61 | | - join(import.meta.dirname, 'node_modules/nhsuk-frontend/dist/nhsuk'), |
62 | | - join(import.meta.dirname, 'node_modules/nhsuk-frontend/dist'), |
63 | | - join(import.meta.dirname, 'node_modules/nhsuk-decorated-components') |
64 | | -] |
65 | | - |
66 | | -const nunjucksConfig = { |
67 | | - autoescape: true, |
68 | | - noCache: true |
69 | | -} |
70 | | - |
71 | | -nunjucksConfig.express = app |
72 | | - |
73 | | -let nunjucksAppEnv = nunjucks.configure(appViews, nunjucksConfig) |
74 | | - |
75 | | -// Use public folder for static assets |
76 | | -app.use(express.static(join(import.meta.dirname, 'public'))) |
77 | | - |
78 | | -// Use assets from NHS frontend |
79 | | -app.use( |
80 | | - '/nhsuk-frontend', |
81 | | - express.static(join(import.meta.dirname, 'node_modules/nhsuk-frontend/dist/nhsuk')) |
82 | | -) |
83 | | - |
84 | | -const prototype = NHSPrototypeKit.init({ |
85 | | - serviceName: serviceName, |
86 | | - express: app, |
87 | | - nunjucks: nunjucksAppEnv, |
88 | | - routes: routes, |
| 34 | +const prototype = await NHSPrototypeKit.init({ |
| 35 | + serviceName: 'Manage vaccinations in schools', |
| 36 | + app, |
89 | 37 | buildOptions: { |
90 | | - entryPoints: ['app/assets/stylesheets/application.scss', 'app/assets/stylesheets/prototype.scss', 'app/assets/stylesheets/public.scss'] |
91 | | - } |
| 38 | + entryPoints: [ |
| 39 | + 'app/assets/stylesheets/*.scss', |
| 40 | + 'app/assets/javascripts/*.js' |
| 41 | + ] |
| 42 | + }, |
| 43 | + viewsPath: ['app/views', 'node_modules/nhsuk-decorated-components'], |
| 44 | + routes, |
| 45 | + filters, |
| 46 | + sessionDataDefaults |
92 | 47 | }) |
93 | 48 |
|
94 | | -prototype.start() |
| 49 | +for (const [key, value] of Object.entries(globals())) { |
| 50 | + prototype.nunjucks?.addGlobal(key, value) |
| 51 | +} |
| 52 | + |
| 53 | +prototype.start(2000) |
0 commit comments