@defra/forms-engine-plugin 5.0.0-alpha.24 → 5.0.0-alpha.26
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/.public/javascripts/shared.min.js +1 -1
- package/.public/javascripts/shared.min.js.map +1 -1
- package/.server/client/javascripts/geospatial-map.d.ts +6 -0
- package/.server/client/javascripts/geospatial-map.js +2 -2
- package/.server/client/javascripts/geospatial-map.js.map +1 -1
- package/.server/client/javascripts/geospatial-map.test.js +152 -0
- package/.server/client/javascripts/geospatial-map.test.js.map +1 -0
- package/.server/client/javascripts/map.d.ts +2 -2
- package/.server/client/javascripts/map.js +0 -1
- package/.server/client/javascripts/map.js.map +1 -1
- package/.server/server/plugins/engine/components/ComponentCollection.js +1 -1
- package/.server/server/plugins/engine/components/ComponentCollection.js.map +1 -1
- package/.server/server/plugins/engine/components/helpers/geospatial.js +4 -4
- package/.server/server/plugins/engine/components/helpers/geospatial.js.map +1 -1
- package/.server/server/plugins/map/routes/index.d.ts +4 -0
- package/.server/server/plugins/map/routes/index.js +12 -4
- package/.server/server/plugins/map/routes/index.js.map +1 -1
- package/.server/server/plugins/map/routes/vts/README.md +38 -0
- package/.server/server/plugins/map/routes/vts/countries-5dp.geojson +4 -0
- package/.server/server/plugins/map/routes/vts/countries.geojson +10 -39283
- package/.server/server/plugins/map/types.d.ts +24 -2
- package/.server/server/plugins/map/types.js +9 -2
- package/.server/server/plugins/map/types.js.map +1 -1
- package/.server/server/plugins/nunjucks/enviroment.test.js +11 -4
- package/.server/server/plugins/nunjucks/enviroment.test.js.map +1 -1
- package/.server/server/plugins/postcode-lookup/models/index.js +16 -3
- package/.server/server/plugins/postcode-lookup/models/index.js.map +1 -1
- package/.server/server/plugins/postcode-lookup/routes/index.js +17 -3
- package/.server/server/plugins/postcode-lookup/routes/index.js.map +1 -1
- package/.server/typings/geodesy/index.d.js +2 -0
- package/.server/typings/geodesy/index.d.js.map +1 -0
- package/package.json +1 -1
- package/src/client/javascripts/geospatial-map.js +2 -2
- package/src/client/javascripts/map.js +0 -1
- package/src/server/plugins/engine/components/ComponentCollection.ts +1 -4
- package/src/server/plugins/engine/components/helpers/geospatial.ts +6 -6
- package/src/server/plugins/map/routes/index.js +26 -4
- package/src/server/plugins/map/routes/vts/README.md +38 -0
- package/src/server/plugins/map/routes/vts/countries-5dp.geojson +4 -0
- package/src/server/plugins/map/routes/vts/countries.geojson +10 -39283
- package/src/server/plugins/map/types.js +9 -2
- package/src/server/plugins/postcode-lookup/models/index.js +16 -3
- package/src/server/plugins/postcode-lookup/routes/index.js +23 -8
- package/src/typings/geodesy/index.d.ts +18 -0
|
@@ -21,11 +21,18 @@
|
|
|
21
21
|
* @property {string} query - name query
|
|
22
22
|
*/
|
|
23
23
|
|
|
24
|
+
export const CountryMap = {
|
|
25
|
+
england: 1,
|
|
26
|
+
'northern-ireland': 3,
|
|
27
|
+
scotland: 2,
|
|
28
|
+
wales: 4
|
|
29
|
+
}
|
|
30
|
+
|
|
24
31
|
/**
|
|
25
32
|
* Geospatial countries query params
|
|
26
33
|
* @typedef {object} GeospatialCountriesQuery
|
|
27
|
-
* @property {
|
|
28
|
-
* @property {
|
|
34
|
+
* @property {keyof typeof CountryMap} [omit] - the country to omit
|
|
35
|
+
* @property {keyof typeof CountryMap} [only] - the country to include
|
|
29
36
|
*/
|
|
30
37
|
|
|
31
38
|
/**
|
|
@@ -298,6 +298,19 @@ export const stepSchema = Joi.string()
|
|
|
298
298
|
.valid(...Object.keys(steps))
|
|
299
299
|
.required()
|
|
300
300
|
|
|
301
|
+
/**
|
|
302
|
+
* Joi object schema factories typed with their payload, as JavaScript files
|
|
303
|
+
* cannot pass type arguments to `Joi.object<T>()`
|
|
304
|
+
*/
|
|
305
|
+
/** @type {() => ObjectSchema<PostcodeLookupDetailsPayload>} */
|
|
306
|
+
const detailsObjectSchema = Joi.object.bind(Joi)
|
|
307
|
+
|
|
308
|
+
/** @type {() => ObjectSchema<PostcodeLookupSelectPayload>} */
|
|
309
|
+
const selectObjectSchema = Joi.object.bind(Joi)
|
|
310
|
+
|
|
311
|
+
/** @type {() => ObjectSchema<PostcodeLookupManualPayload>} */
|
|
312
|
+
const manualObjectSchema = Joi.object.bind(Joi)
|
|
313
|
+
|
|
301
314
|
const sharedPayloadSchemaKeys = {
|
|
302
315
|
crumb: crumbSchema,
|
|
303
316
|
step: stepSchema
|
|
@@ -309,7 +322,7 @@ const sharedPayloadSchemaKeys = {
|
|
|
309
322
|
* @returns {ObjectSchema<PostcodeLookupDetailsPayload>}
|
|
310
323
|
*/
|
|
311
324
|
export function createDetailsPayloadSchema(language = 'en-GB') {
|
|
312
|
-
return
|
|
325
|
+
return detailsObjectSchema()
|
|
313
326
|
.keys({
|
|
314
327
|
...sharedPayloadSchemaKeys,
|
|
315
328
|
[postcodeQueryFieldName]: Joi.string()
|
|
@@ -338,7 +351,7 @@ export function createDetailsPayloadSchema(language = 'en-GB') {
|
|
|
338
351
|
* @returns {ObjectSchema<PostcodeLookupSelectPayload>}
|
|
339
352
|
*/
|
|
340
353
|
export function createSelectPayloadSchema(language = 'en-GB') {
|
|
341
|
-
return
|
|
354
|
+
return selectObjectSchema()
|
|
342
355
|
.keys({
|
|
343
356
|
...sharedPayloadSchemaKeys,
|
|
344
357
|
[uprnFieldName]: Joi.string()
|
|
@@ -356,7 +369,7 @@ export function createSelectPayloadSchema(language = 'en-GB') {
|
|
|
356
369
|
* @returns {ObjectSchema<PostcodeLookupManualPayload>}
|
|
357
370
|
*/
|
|
358
371
|
export function createManualPayloadSchema(language = 'en-GB') {
|
|
359
|
-
return
|
|
372
|
+
return manualObjectSchema()
|
|
360
373
|
.keys({
|
|
361
374
|
...sharedPayloadSchemaKeys,
|
|
362
375
|
[line1FieldName]: Joi.string()
|
|
@@ -198,6 +198,19 @@ function postRoute(options) {
|
|
|
198
198
|
}
|
|
199
199
|
}
|
|
200
200
|
|
|
201
|
+
/**
|
|
202
|
+
* Validate a payload against a schema. Joi types the value as `any` when
|
|
203
|
+
* validation fails, so it is typed here as the partially converted payload.
|
|
204
|
+
* @template TSchema
|
|
205
|
+
* @param {ObjectSchema<TSchema>} schema
|
|
206
|
+
* @param {unknown} payload
|
|
207
|
+
* @param {ValidationOptions} [options]
|
|
208
|
+
* @returns {{ value: TSchema, error: undefined } | { value: TSchema | undefined, error: ValidationError }}
|
|
209
|
+
*/
|
|
210
|
+
function validatePayload(schema, payload, options) {
|
|
211
|
+
return schema.validate(payload, options)
|
|
212
|
+
}
|
|
213
|
+
|
|
201
214
|
/**
|
|
202
215
|
* Post handler for the details step
|
|
203
216
|
* @param {PostcodeLookupPostRequest} request
|
|
@@ -214,9 +227,10 @@ async function detailsPostHandler(request, h, options) {
|
|
|
214
227
|
)
|
|
215
228
|
const language = translator.language
|
|
216
229
|
|
|
217
|
-
const { value: details, error } =
|
|
218
|
-
language
|
|
219
|
-
|
|
230
|
+
const { value: details, error } = validatePayload(
|
|
231
|
+
createDetailsPayloadSchema(language),
|
|
232
|
+
request.payload
|
|
233
|
+
)
|
|
220
234
|
|
|
221
235
|
let model
|
|
222
236
|
|
|
@@ -252,7 +266,8 @@ async function selectPostHandler(request, h, options) {
|
|
|
252
266
|
request.query.language
|
|
253
267
|
)
|
|
254
268
|
const language = translator.language
|
|
255
|
-
const { value: select, error } =
|
|
269
|
+
const { value: select, error } = validatePayload(
|
|
270
|
+
createSelectPayloadSchema(language),
|
|
256
271
|
request.payload
|
|
257
272
|
)
|
|
258
273
|
|
|
@@ -295,11 +310,10 @@ async function manualPostHandler(request, h) {
|
|
|
295
310
|
)
|
|
296
311
|
const language = translator.language
|
|
297
312
|
|
|
298
|
-
const { value: manual, error } =
|
|
313
|
+
const { value: manual, error } = validatePayload(
|
|
314
|
+
createManualPayloadSchema(language),
|
|
299
315
|
request.payload,
|
|
300
|
-
{
|
|
301
|
-
abortEarly: false
|
|
302
|
-
}
|
|
316
|
+
{ abortEarly: false }
|
|
303
317
|
)
|
|
304
318
|
|
|
305
319
|
if (error) {
|
|
@@ -317,6 +331,7 @@ async function manualPostHandler(request, h) {
|
|
|
317
331
|
|
|
318
332
|
/**
|
|
319
333
|
* @import { ResponseToolkit, ServerRoute } from '@hapi/hapi'
|
|
334
|
+
* @import { ObjectSchema, ValidationError, ValidationOptions } from 'joi'
|
|
320
335
|
* @import { FormMetadata } from '@defra/forms-model'
|
|
321
336
|
* @import { PostcodeLookupManualPayload, Address, PostcodeLookupGetRequestRefs, PostcodeLookupPostRequestRefs, PostcodeLookupRequest, PostcodeLookupPostRequest, PostcodeLookupConfiguration, PostcodeLookupDispatchData, PostcodeLookupSessionData } from '../types.js'
|
|
322
337
|
* @import { FormRequestPayload, FormResponseToolkit } from '../../../routes/types.js'
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
declare module 'geodesy/osgridref.js' {
|
|
2
|
+
export class LatLon {
|
|
3
|
+
constructor(lat: number, lon: number, height?: number)
|
|
4
|
+
get latitude(): number
|
|
5
|
+
get longitude(): number
|
|
6
|
+
get height(): number
|
|
7
|
+
toOsGrid(): OsGridRef
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
export default class OsGridRef {
|
|
11
|
+
constructor(easting: number, northing: number)
|
|
12
|
+
easting: number
|
|
13
|
+
northing: number
|
|
14
|
+
toLatLon(): LatLon
|
|
15
|
+
toString(digits?: number): string
|
|
16
|
+
static parse(gridref: string): OsGridRef
|
|
17
|
+
}
|
|
18
|
+
}
|