@defra/forms-engine-plugin 1.3.1 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.server/server/plugins/engine/index.js +1 -1
- package/.server/server/plugins/engine/index.js.map +1 -1
- package/.server/server/plugins/engine/models/SummaryViewModel.d.ts +1 -0
- package/.server/server/plugins/engine/models/SummaryViewModel.js +1 -0
- package/.server/server/plugins/engine/models/SummaryViewModel.js.map +1 -1
- package/.server/server/plugins/engine/options.js +4 -1
- package/.server/server/plugins/engine/options.js.map +1 -1
- package/.server/server/plugins/engine/options.test.js +20 -0
- package/.server/server/plugins/engine/options.test.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.d.ts +5 -0
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.js +27 -1
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/StartPageController.d.ts +2 -0
- package/.server/server/plugins/engine/pageControllers/StartPageController.js +3 -0
- package/.server/server/plugins/engine/pageControllers/StartPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.d.ts +1 -0
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.js +4 -0
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.js.map +1 -1
- package/.server/server/plugins/engine/plugin.js +5 -2
- package/.server/server/plugins/engine/plugin.js.map +1 -1
- package/.server/server/plugins/engine/routes/exit.d.ts +46 -0
- package/.server/server/plugins/engine/routes/exit.js +36 -0
- package/.server/server/plugins/engine/routes/exit.js.map +1 -0
- package/.server/server/plugins/engine/types.d.ts +6 -2
- package/.server/server/plugins/engine/types.js.map +1 -1
- package/.server/server/plugins/engine/views/exit.html +31 -0
- package/.server/server/plugins/engine/views/partials/form.html +17 -6
- package/.server/server/routes/types.d.ts +2 -1
- package/.server/server/routes/types.js +1 -0
- package/.server/server/routes/types.js.map +1 -1
- package/.server/server/schemas/index.js +1 -1
- package/.server/server/schemas/index.js.map +1 -1
- package/.server/server/services/cacheService.d.ts +2 -0
- package/.server/server/services/cacheService.js +9 -5
- package/.server/server/services/cacheService.js.map +1 -1
- package/package.json +1 -1
- package/src/server/index.test.ts +39 -0
- package/src/server/plugins/engine/components/helpers.test.ts +31 -0
- package/src/server/plugins/engine/index.ts +1 -3
- package/src/server/plugins/engine/models/SummaryViewModel.test.ts +59 -0
- package/src/server/plugins/engine/models/SummaryViewModel.ts +1 -0
- package/src/server/plugins/engine/options.js +4 -1
- package/src/server/plugins/engine/options.test.js +20 -0
- package/src/server/plugins/engine/pageControllers/PageController.test.ts +25 -0
- package/src/server/plugins/engine/pageControllers/QuestionPageController.test.ts +178 -1
- package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +28 -1
- package/src/server/plugins/engine/pageControllers/StartPageController.ts +4 -0
- package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +5 -0
- package/src/server/plugins/engine/plugin.ts +5 -1
- package/src/server/plugins/engine/routes/exit.ts +47 -0
- package/src/server/plugins/engine/types.ts +10 -4
- package/src/server/plugins/engine/views/exit.html +31 -0
- package/src/server/plugins/engine/views/partials/form.html +17 -6
- package/src/server/routes/types.ts +2 -1
- package/src/server/schemas/index.ts +2 -1
- package/src/server/services/cacheService.test.ts +45 -0
- package/src/server/services/cacheService.ts +20 -9
|
@@ -30,6 +30,12 @@ export class CacheService {
|
|
|
30
30
|
request: Request | FormRequest | FormRequestPayload
|
|
31
31
|
) => Promise<FormSubmissionState | null>
|
|
32
32
|
|
|
33
|
+
customPersister?: (
|
|
34
|
+
key: string,
|
|
35
|
+
state: FormSubmissionState,
|
|
36
|
+
request: Request | FormRequest | FormRequestPayload
|
|
37
|
+
) => Promise<void>
|
|
38
|
+
|
|
33
39
|
logger: Server['logger']
|
|
34
40
|
|
|
35
41
|
constructor({
|
|
@@ -46,9 +52,14 @@ export class CacheService {
|
|
|
46
52
|
sessionHydrator?: (
|
|
47
53
|
request: Request | FormRequest | FormRequestPayload
|
|
48
54
|
) => Promise<FormSubmissionState | null>
|
|
55
|
+
sessionPersister?: (
|
|
56
|
+
key: string,
|
|
57
|
+
state: FormSubmissionState,
|
|
58
|
+
request: Request | FormRequest | FormRequestPayload
|
|
59
|
+
) => Promise<void>
|
|
49
60
|
}
|
|
50
61
|
}) {
|
|
51
|
-
const { keyGenerator, sessionHydrator } = options ?? {}
|
|
62
|
+
const { keyGenerator, sessionHydrator, sessionPersister } = options ?? {}
|
|
52
63
|
if (!cacheName) {
|
|
53
64
|
server.log(
|
|
54
65
|
'warn',
|
|
@@ -57,6 +68,7 @@ export class CacheService {
|
|
|
57
68
|
}
|
|
58
69
|
this.generateKey = keyGenerator ?? this.defaultKeyGenerator.bind(this)
|
|
59
70
|
this.customFetcher = sessionHydrator ?? undefined
|
|
71
|
+
this.customPersister = sessionPersister ?? undefined
|
|
60
72
|
this.cache = server.cache({ cache: cacheName, segment: 'formSubmission' })
|
|
61
73
|
this.logger = server.logger
|
|
62
74
|
}
|
|
@@ -64,18 +76,16 @@ export class CacheService {
|
|
|
64
76
|
async getState(
|
|
65
77
|
request: Request | FormRequest | FormRequestPayload
|
|
66
78
|
): Promise<FormSubmissionState> {
|
|
67
|
-
|
|
79
|
+
const key = this.Key(request)
|
|
80
|
+
|
|
81
|
+
let cached = await this.cache.get(key)
|
|
68
82
|
|
|
69
83
|
// If nothing in Redis, attempt to rehydrate from backend DB
|
|
70
84
|
if (!cached && this.customFetcher) {
|
|
71
85
|
const rehydrated = await this.customFetcher(request)
|
|
72
86
|
|
|
73
87
|
if (rehydrated != null) {
|
|
74
|
-
await this.cache.set(
|
|
75
|
-
this.Key(request),
|
|
76
|
-
rehydrated,
|
|
77
|
-
config.get('sessionTimeout')
|
|
78
|
-
)
|
|
88
|
+
await this.cache.set(key, rehydrated, config.get('sessionTimeout'))
|
|
79
89
|
cached = await this.getState(request)
|
|
80
90
|
}
|
|
81
91
|
}
|
|
@@ -91,6 +101,7 @@ export class CacheService {
|
|
|
91
101
|
const ttl = config.get('sessionTimeout')
|
|
92
102
|
|
|
93
103
|
await this.cache.set(key, state, ttl)
|
|
104
|
+
|
|
94
105
|
return this.getState(request)
|
|
95
106
|
}
|
|
96
107
|
|
|
@@ -146,8 +157,8 @@ export class CacheService {
|
|
|
146
157
|
throw new Error('No session ID found')
|
|
147
158
|
}
|
|
148
159
|
|
|
149
|
-
const state = request.params.state
|
|
150
|
-
const slug = request.params.slug
|
|
160
|
+
const state = (request.params.state as string) || ''
|
|
161
|
+
const slug = (request.params.slug as string) || ''
|
|
151
162
|
return `${request.yar.id}:${state}:${slug}:`
|
|
152
163
|
}
|
|
153
164
|
|