@dwp/govuk-casa 8.16.1 → 8.16.3
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/dist/assets/css/casa-ie8.css +1 -1
- package/dist/assets/css/casa.css +1 -1
- package/dist/casa.d.ts +13 -13
- package/dist/casa.js +17 -7
- package/dist/casa.js.map +1 -1
- package/dist/lib/CasaTemplateLoader.d.ts +1 -1
- package/dist/lib/CasaTemplateLoader.js +13 -14
- package/dist/lib/CasaTemplateLoader.js.map +1 -1
- package/dist/lib/JourneyContext.d.ts +10 -4
- package/dist/lib/JourneyContext.js +57 -47
- package/dist/lib/JourneyContext.js.map +1 -1
- package/dist/lib/MutableRouter.d.ts +1 -1
- package/dist/lib/MutableRouter.js +22 -23
- package/dist/lib/MutableRouter.js.map +1 -1
- package/dist/lib/Plan.d.ts +5 -5
- package/dist/lib/Plan.js +49 -36
- package/dist/lib/Plan.js.map +1 -1
- package/dist/lib/ValidationError.d.ts +1 -1
- package/dist/lib/ValidationError.js +9 -9
- package/dist/lib/ValidationError.js.map +1 -1
- package/dist/lib/ValidatorFactory.js +4 -7
- package/dist/lib/ValidatorFactory.js.map +1 -1
- package/dist/lib/configuration-ingestor.d.ts +75 -14
- package/dist/lib/configuration-ingestor.js +156 -64
- package/dist/lib/configuration-ingestor.js.map +1 -1
- package/dist/lib/configure.js +11 -10
- package/dist/lib/configure.js.map +1 -1
- package/dist/lib/constants.js +8 -8
- package/dist/lib/context-id-generators.d.ts +1 -1
- package/dist/lib/context-id-generators.js +7 -4
- package/dist/lib/context-id-generators.js.map +1 -1
- package/dist/lib/end-session.js +2 -2
- package/dist/lib/field.d.ts +6 -6
- package/dist/lib/field.js +15 -21
- package/dist/lib/field.js.map +1 -1
- package/dist/lib/index.d.ts +13 -13
- package/dist/lib/index.js +17 -7
- package/dist/lib/index.js.map +1 -1
- package/dist/lib/logger.js +7 -7
- package/dist/lib/logger.js.map +1 -1
- package/dist/lib/mount.js +3 -3
- package/dist/lib/mount.js.map +1 -1
- package/dist/lib/nunjucks-filters.d.ts +5 -1
- package/dist/lib/nunjucks-filters.js +37 -23
- package/dist/lib/nunjucks-filters.js.map +1 -1
- package/dist/lib/nunjucks.d.ts +2 -2
- package/dist/lib/nunjucks.js +6 -7
- package/dist/lib/nunjucks.js.map +1 -1
- package/dist/lib/utils.js +52 -42
- package/dist/lib/utils.js.map +1 -1
- package/dist/lib/validators/dateObject.d.ts +3 -3
- package/dist/lib/validators/dateObject.js +44 -37
- package/dist/lib/validators/dateObject.js.map +1 -1
- package/dist/lib/validators/email.d.ts +2 -2
- package/dist/lib/validators/email.js +4 -5
- package/dist/lib/validators/email.js.map +1 -1
- package/dist/lib/validators/inArray.d.ts +2 -2
- package/dist/lib/validators/inArray.js +5 -6
- package/dist/lib/validators/inArray.js.map +1 -1
- package/dist/lib/validators/index.d.ts +10 -10
- package/dist/lib/validators/index.js.map +1 -1
- package/dist/lib/validators/nino.d.ts +2 -2
- package/dist/lib/validators/nino.js +10 -7
- package/dist/lib/validators/nino.js.map +1 -1
- package/dist/lib/validators/postalAddressObject.d.ts +2 -2
- package/dist/lib/validators/postalAddressObject.js +52 -39
- package/dist/lib/validators/postalAddressObject.js.map +1 -1
- package/dist/lib/validators/range.d.ts +2 -2
- package/dist/lib/validators/range.js +6 -7
- package/dist/lib/validators/range.js.map +1 -1
- package/dist/lib/validators/regex.d.ts +2 -2
- package/dist/lib/validators/regex.js +4 -5
- package/dist/lib/validators/regex.js.map +1 -1
- package/dist/lib/validators/required.d.ts +2 -2
- package/dist/lib/validators/required.js +6 -9
- package/dist/lib/validators/required.js.map +1 -1
- package/dist/lib/validators/strlen.d.ts +2 -2
- package/dist/lib/validators/strlen.js +8 -9
- package/dist/lib/validators/strlen.js.map +1 -1
- package/dist/lib/validators/wordCount.d.ts +2 -2
- package/dist/lib/validators/wordCount.js +10 -9
- package/dist/lib/validators/wordCount.js.map +1 -1
- package/dist/lib/waypoint-url.d.ts +4 -4
- package/dist/lib/waypoint-url.js +23 -23
- package/dist/lib/waypoint-url.js.map +1 -1
- package/dist/middleware/body-parser.d.ts +27 -5
- package/dist/middleware/body-parser.js +37 -6
- package/dist/middleware/body-parser.js.map +1 -1
- package/dist/middleware/csrf.d.ts +3 -0
- package/dist/middleware/csrf.js +3 -0
- package/dist/middleware/csrf.js.map +1 -1
- package/dist/middleware/data.d.ts +22 -5
- package/dist/middleware/data.js +37 -7
- package/dist/middleware/data.js.map +1 -1
- package/dist/middleware/gather-fields.d.ts +1 -1
- package/dist/middleware/gather-fields.js +4 -3
- package/dist/middleware/gather-fields.js.map +1 -1
- package/dist/middleware/i18n.d.ts +11 -2
- package/dist/middleware/i18n.js +26 -17
- package/dist/middleware/i18n.js.map +1 -1
- package/dist/middleware/post.d.ts +3 -1
- package/dist/middleware/post.js +35 -18
- package/dist/middleware/post.js.map +1 -1
- package/dist/middleware/pre.d.ts +1 -1
- package/dist/middleware/pre.js +44 -21
- package/dist/middleware/pre.js.map +1 -1
- package/dist/middleware/progress-journey.d.ts +1 -1
- package/dist/middleware/progress-journey.js +5 -5
- package/dist/middleware/progress-journey.js.map +1 -1
- package/dist/middleware/sanitise-fields.d.ts +2 -2
- package/dist/middleware/sanitise-fields.js +13 -11
- package/dist/middleware/sanitise-fields.js.map +1 -1
- package/dist/middleware/serve-first-waypoint.d.ts +1 -1
- package/dist/middleware/serve-first-waypoint.js +6 -4
- package/dist/middleware/serve-first-waypoint.js.map +1 -1
- package/dist/middleware/session.d.ts +27 -8
- package/dist/middleware/session.js +53 -25
- package/dist/middleware/session.js.map +1 -1
- package/dist/middleware/skip-waypoint.d.ts +1 -1
- package/dist/middleware/skip-waypoint.js +3 -3
- package/dist/middleware/skip-waypoint.js.map +1 -1
- package/dist/middleware/steer-journey.d.ts +1 -1
- package/dist/middleware/steer-journey.js +15 -13
- package/dist/middleware/steer-journey.js.map +1 -1
- package/dist/middleware/strip-proxy-path.d.ts +1 -1
- package/dist/middleware/strip-proxy-path.js +3 -3
- package/dist/middleware/strip-proxy-path.js.map +1 -1
- package/dist/middleware/validate-fields.d.ts +2 -2
- package/dist/middleware/validate-fields.js +2 -5
- package/dist/middleware/validate-fields.js.map +1 -1
- package/dist/routes/ancillary.d.ts +2 -2
- package/dist/routes/ancillary.js +3 -3
- package/dist/routes/ancillary.js.map +1 -1
- package/dist/routes/journey.d.ts +1 -1
- package/dist/routes/journey.js +85 -31
- package/dist/routes/journey.js.map +1 -1
- package/dist/routes/static.d.ts +2 -2
- package/dist/routes/static.js +18 -18
- package/dist/routes/static.js.map +1 -1
- package/package.json +39 -42
- package/src/casa.js +13 -13
- package/src/lib/CasaTemplateLoader.js +21 -17
- package/src/lib/JourneyContext.js +118 -79
- package/src/lib/MutableRouter.js +30 -26
- package/src/lib/Plan.js +109 -62
- package/src/lib/ValidationError.js +13 -10
- package/src/lib/ValidatorFactory.js +7 -8
- package/src/lib/configuration-ingestor.js +200 -74
- package/src/lib/configure.js +31 -30
- package/src/lib/constants.js +8 -8
- package/src/lib/context-id-generators.js +39 -38
- package/src/lib/end-session.js +3 -3
- package/src/lib/field.js +48 -32
- package/src/lib/index.js +12 -12
- package/src/lib/logger.js +9 -9
- package/src/lib/mount.js +68 -73
- package/src/lib/nunjucks-filters.js +57 -44
- package/src/lib/nunjucks.js +20 -16
- package/src/lib/utils.js +69 -44
- package/src/lib/validators/dateObject.js +57 -48
- package/src/lib/validators/email.js +8 -9
- package/src/lib/validators/inArray.js +8 -9
- package/src/lib/validators/index.js +11 -11
- package/src/lib/validators/nino.js +25 -12
- package/src/lib/validators/postalAddressObject.js +73 -55
- package/src/lib/validators/range.js +9 -11
- package/src/lib/validators/regex.js +7 -8
- package/src/lib/validators/required.js +13 -14
- package/src/lib/validators/strlen.js +11 -12
- package/src/lib/validators/wordCount.js +17 -12
- package/src/lib/waypoint-url.js +48 -33
- package/src/middleware/body-parser.js +44 -10
- package/src/middleware/csrf.js +4 -1
- package/src/middleware/data.js +62 -25
- package/src/middleware/gather-fields.js +8 -8
- package/src/middleware/i18n.js +49 -39
- package/src/middleware/post.js +47 -21
- package/src/middleware/pre.js +60 -35
- package/src/middleware/progress-journey.js +32 -18
- package/src/middleware/sanitise-fields.js +43 -20
- package/src/middleware/serve-first-waypoint.js +12 -10
- package/src/middleware/session.js +97 -65
- package/src/middleware/skip-waypoint.js +7 -9
- package/src/middleware/steer-journey.js +39 -27
- package/src/middleware/strip-proxy-path.js +8 -7
- package/src/middleware/validate-fields.js +5 -12
- package/src/routes/ancillary.js +4 -6
- package/src/routes/journey.js +158 -78
- package/src/routes/static.js +61 -28
|
@@ -19,7 +19,7 @@ const combineMerge = (target, source, options) => {
|
|
|
19
19
|
source.forEach((item, index) => {
|
|
20
20
|
// ESLint disabled as `index` is only an integer
|
|
21
21
|
/* eslint-disable security/detect-object-injection */
|
|
22
|
-
if (typeof destination[index] ===
|
|
22
|
+
if (typeof destination[index] === "undefined") {
|
|
23
23
|
destination[index] = options.cloneUnlessOtherwiseSpecified(item, options);
|
|
24
24
|
}
|
|
25
25
|
else if (options.isMergeableObject(item)) {
|
|
@@ -34,9 +34,17 @@ const combineMerge = (target, source, options) => {
|
|
|
34
34
|
};
|
|
35
35
|
// Allows objects to be deepmerged and retain their type, without becoming [object Object]
|
|
36
36
|
// ref: https://github.com/jonschlinkert/is-plain-object/blob/master/is-plain-object.js
|
|
37
|
+
/**
|
|
38
|
+
* @param {any} o Value to test
|
|
39
|
+
* @returns {boolean} True if an object
|
|
40
|
+
*/
|
|
37
41
|
function isObject(o) {
|
|
38
|
-
return Object.prototype.toString.call(o) ===
|
|
42
|
+
return Object.prototype.toString.call(o) === "[object Object]";
|
|
39
43
|
}
|
|
44
|
+
/**
|
|
45
|
+
* @param {any} o Value to test
|
|
46
|
+
* @returns {boolean} True if a plain object or array
|
|
47
|
+
*/
|
|
40
48
|
function isPlainObjectOrArray(o) {
|
|
41
49
|
if (Array.isArray(o)) {
|
|
42
50
|
return true;
|
|
@@ -53,13 +61,17 @@ function isPlainObjectOrArray(o) {
|
|
|
53
61
|
return false;
|
|
54
62
|
}
|
|
55
63
|
// eslint-disable-next-line no-prototype-builtins
|
|
56
|
-
return prot.hasOwnProperty(
|
|
64
|
+
return prot.hasOwnProperty("isPrototypeOf");
|
|
57
65
|
}
|
|
66
|
+
/**
|
|
67
|
+
* @param {...any} objects Objects to merge
|
|
68
|
+
* @returns {object} Merged object
|
|
69
|
+
*/
|
|
58
70
|
function mergeObjects(...objects) {
|
|
59
|
-
return deepmergeAll([
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
71
|
+
return deepmergeAll([Object.create(null), ...objects], {
|
|
72
|
+
arrayMerge: combineMerge,
|
|
73
|
+
isMergeableObject: isPlainObjectOrArray,
|
|
74
|
+
});
|
|
63
75
|
}
|
|
64
76
|
/**
|
|
65
77
|
* Determine whether a value exists in a list.
|
|
@@ -69,7 +81,7 @@ function mergeObjects(...objects) {
|
|
|
69
81
|
* @param {any} search Item to search within the `source`
|
|
70
82
|
* @returns {boolean} True if the search item was found
|
|
71
83
|
*/
|
|
72
|
-
function includes(source = [], search =
|
|
84
|
+
function includes(source = [], search = "") {
|
|
73
85
|
return source.includes(search);
|
|
74
86
|
}
|
|
75
87
|
/**
|
|
@@ -91,18 +103,20 @@ function includes(source = [], search = '') {
|
|
|
91
103
|
* @returns {string} Formatted date
|
|
92
104
|
*/
|
|
93
105
|
function formatDateObject(date, config = {}) {
|
|
94
|
-
const { locale =
|
|
95
|
-
if (Object.prototype.toString.call(date) ===
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
106
|
+
const { locale = "en", format = "d MMMM yyyy" } = config;
|
|
107
|
+
if (Object.prototype.toString.call(date) === "[object Object]" &&
|
|
108
|
+
"yyyy" in date &&
|
|
109
|
+
"mm" in date &&
|
|
110
|
+
"dd" in date) {
|
|
99
111
|
return luxon_1.DateTime.fromObject({
|
|
100
112
|
year: Math.max(0, parseInt(date.yyyy, 10)),
|
|
101
113
|
month: Math.max(0, parseInt(date.mm, 10)),
|
|
102
114
|
day: Math.max(1, parseInt(date.dd, 10)),
|
|
103
|
-
})
|
|
115
|
+
})
|
|
116
|
+
.setLocale(locale)
|
|
117
|
+
.toFormat(format);
|
|
104
118
|
}
|
|
105
|
-
return
|
|
119
|
+
return "INVALID DATE OBJECT";
|
|
106
120
|
}
|
|
107
121
|
/**
|
|
108
122
|
* Attribute values will be HTML/attribute escaped.
|
|
@@ -117,23 +131,23 @@ function formatDateObject(date, config = {}) {
|
|
|
117
131
|
*/
|
|
118
132
|
function renderAsAttributes(attrsObject) {
|
|
119
133
|
const attrsList = [];
|
|
120
|
-
if (typeof attrsObject ===
|
|
134
|
+
if (typeof attrsObject === "object") {
|
|
121
135
|
Object.keys(attrsObject).forEach((key) => {
|
|
122
136
|
// ESLint disable as `attrsObject` is dev-controlled, `Object.keys()` has
|
|
123
137
|
// been used (to get "own" properties) and `m` is one of the characters
|
|
124
138
|
// found by the regex.
|
|
125
139
|
/* eslint-disable security/detect-object-injection */
|
|
126
140
|
const value = String(attrsObject[key]).replace(/[<>"'&]/g, (m) => ({
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
'"':
|
|
130
|
-
'
|
|
131
|
-
|
|
132
|
-
}[m])
|
|
141
|
+
"<": "<",
|
|
142
|
+
">": ">",
|
|
143
|
+
'"': """,
|
|
144
|
+
"'": "'",
|
|
145
|
+
"&": "&",
|
|
146
|
+
})[m]);
|
|
133
147
|
/* eslint-enable security/detect-object-injection */
|
|
134
148
|
attrsList.push(`${key}="${value}"`);
|
|
135
149
|
});
|
|
136
150
|
}
|
|
137
|
-
return new nunjucks_1.default.runtime.SafeString(attrsList.join(
|
|
151
|
+
return new nunjucks_1.default.runtime.SafeString(attrsList.join(" "));
|
|
138
152
|
}
|
|
139
153
|
//# sourceMappingURL=nunjucks-filters.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nunjucks-filters.js","sourceRoot":"","sources":["../../src/lib/nunjucks-filters.js"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"nunjucks-filters.js","sourceRoot":"","sources":["../../src/lib/nunjucks-filters.js"],"names":[],"mappings":"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"}
|
package/dist/lib/nunjucks.d.ts
CHANGED
|
@@ -9,11 +9,11 @@
|
|
|
9
9
|
* @param {NunjucksOptions} options Nunjucks options
|
|
10
10
|
* @returns {Environment} Nunjucks Environment instance
|
|
11
11
|
*/
|
|
12
|
-
export default function nunjucksConfig({ views
|
|
12
|
+
export default function nunjucksConfig({ views }: NunjucksOptions): Environment;
|
|
13
13
|
export type NunjucksOptions = {
|
|
14
14
|
/**
|
|
15
15
|
* Template file directories (optional, default [])
|
|
16
16
|
*/
|
|
17
17
|
views?: string[] | undefined;
|
|
18
18
|
};
|
|
19
|
-
import { Environment } from
|
|
19
|
+
import { Environment } from "nunjucks";
|
package/dist/lib/nunjucks.js
CHANGED
|
@@ -21,7 +21,7 @@ const nunjucks_filters_js_1 = require("./nunjucks-filters.js");
|
|
|
21
21
|
* @param {NunjucksOptions} options Nunjucks options
|
|
22
22
|
* @returns {Environment} Nunjucks Environment instance
|
|
23
23
|
*/
|
|
24
|
-
function nunjucksConfig({ views = []
|
|
24
|
+
function nunjucksConfig({ views = [] }) {
|
|
25
25
|
// Prepare a single Nunjucks environment for all responses to use. Note that
|
|
26
26
|
// we cannot prepare response-specific global functions/filters if we use a
|
|
27
27
|
// single environment, but the performance gains of doing so are significant.
|
|
@@ -39,12 +39,11 @@ function nunjucksConfig({ views = [], }) {
|
|
|
39
39
|
env.modifyBlock = loader.modifyBlock.bind(loader);
|
|
40
40
|
// Globals
|
|
41
41
|
// These can't be modified once set. But they can be overridden by res.locals.
|
|
42
|
-
|
|
43
|
-
env.addGlobal(
|
|
44
|
-
env.addGlobal(
|
|
45
|
-
env.addGlobal(
|
|
46
|
-
env.addGlobal(
|
|
47
|
-
env.addGlobal('renderAsAttributes', nunjucks_filters_js_1.renderAsAttributes);
|
|
42
|
+
env.addGlobal("casaVersion", JSON.parse((0, fs_1.readFileSync)((0, path_1.resolve)(dirname_cjs_1.default, "../../package.json"))).version);
|
|
43
|
+
env.addGlobal("mergeObjects", nunjucks_filters_js_1.mergeObjects);
|
|
44
|
+
env.addGlobal("includes", nunjucks_filters_js_1.includes);
|
|
45
|
+
env.addGlobal("formatDateObject", nunjucks_filters_js_1.formatDateObject);
|
|
46
|
+
env.addGlobal("renderAsAttributes", nunjucks_filters_js_1.renderAsAttributes);
|
|
48
47
|
return env;
|
|
49
48
|
}
|
|
50
49
|
//# sourceMappingURL=nunjucks.js.map
|
package/dist/lib/nunjucks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"nunjucks.js","sourceRoot":"","sources":["../../src/lib/nunjucks.js"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"nunjucks.js","sourceRoot":"","sources":["../../src/lib/nunjucks.js"],"names":[],"mappings":";;;;;AAwBA,iCAiCC;AAzDD,2BAAkC;AAClC,+BAA+B;AAC/B,uCAAuC;AACvC,gEAAoC;AACpC,oFAAyD;AACzD,+DAK+B;AAE/B;;;GAGG;AAEH;;;;;;GAMG;AACH,SAAwB,cAAc,CAAC,EAAE,KAAK,GAAG,EAAE,EAAE;IACnD,4EAA4E;IAC5E,2EAA2E;IAC3E,6EAA6E;IAC7E,MAAM,MAAM,GAAG,IAAI,+BAAkB,CAAC,KAAK,EAAE;QAC3C,KAAK,EAAE,KAAK;QACZ,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IAEH,MAAM,GAAG,GAAG,IAAI,sBAAW,CAAC,MAAM,EAAE;QAClC,UAAU,EAAE,IAAI;QAChB,gBAAgB,EAAE,KAAK;QACvB,UAAU,EAAE,KAAK;QACjB,YAAY,EAAE,KAAK;KACpB,CAAC,CAAC;IAEH,yCAAyC;IACzC,GAAG,CAAC,WAAW,GAAG,MAAM,CAAC,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IAElD,UAAU;IACV,8EAA8E;IAE9E,GAAG,CAAC,SAAS,CACX,aAAa,EACb,IAAI,CAAC,KAAK,CAAC,IAAA,iBAAY,EAAC,IAAA,cAAO,EAAC,qBAAO,EAAE,oBAAoB,CAAC,CAAC,CAAC,CAAC,OAAO,CACzE,CAAC;IAEF,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,kCAAY,CAAC,CAAC;IAC5C,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,8BAAQ,CAAC,CAAC;IACpC,GAAG,CAAC,SAAS,CAAC,kBAAkB,EAAE,sCAAgB,CAAC,CAAC;IACpD,GAAG,CAAC,SAAS,CAAC,oBAAoB,EAAE,wCAAkB,CAAC,CAAC;IAExD,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/lib/utils.js
CHANGED
|
@@ -24,12 +24,12 @@ exports.validateWaypoint = validateWaypoint;
|
|
|
24
24
|
* @returns {boolean} True if the object is empty
|
|
25
25
|
*/
|
|
26
26
|
function isEmpty(val) {
|
|
27
|
-
if (val === null
|
|
28
|
-
|
|
29
|
-
|
|
27
|
+
if (val === null ||
|
|
28
|
+
typeof val === "undefined" ||
|
|
29
|
+
(typeof val === "string" && val === "")) {
|
|
30
30
|
return true;
|
|
31
31
|
}
|
|
32
|
-
if (Array.isArray(val) || typeof val ===
|
|
32
|
+
if (Array.isArray(val) || typeof val === "object") {
|
|
33
33
|
// ESLint disabled as `k` is an "own property" (thanks to `Object.keys()`)
|
|
34
34
|
/* eslint-disable-next-line security/detect-object-injection */
|
|
35
35
|
return Object.keys(val).filter((k) => !isEmpty(val[k])).length === 0;
|
|
@@ -44,7 +44,7 @@ function isEmpty(val) {
|
|
|
44
44
|
* @returns {boolean} Whether the value is stringable or not
|
|
45
45
|
*/
|
|
46
46
|
function isStringable(value) {
|
|
47
|
-
return typeof value ===
|
|
47
|
+
return typeof value === "string" || typeof value === "number";
|
|
48
48
|
}
|
|
49
49
|
/**
|
|
50
50
|
* Extract the middleware functions that are relevant for the given hook and
|
|
@@ -57,9 +57,13 @@ function isStringable(value) {
|
|
|
57
57
|
* @returns {Function[]} An array of middleware that should be applied
|
|
58
58
|
*/
|
|
59
59
|
function resolveMiddlewareHooks(hookName, path, hooks = []) {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
60
|
+
const pathMatch = (h) => h.path === undefined ||
|
|
61
|
+
(h.path instanceof RegExp && h.path.test(path)) ||
|
|
62
|
+
h.path === path;
|
|
63
|
+
return hooks
|
|
64
|
+
.filter((h) => h.hook === hookName)
|
|
65
|
+
.filter(pathMatch)
|
|
66
|
+
.map((h) => h.middleware);
|
|
63
67
|
}
|
|
64
68
|
/**
|
|
65
69
|
* Coerce an input to a string.
|
|
@@ -71,7 +75,9 @@ function resolveMiddlewareHooks(hookName, path, hooks = []) {
|
|
|
71
75
|
*/
|
|
72
76
|
function stringifyInput(input, fallback) {
|
|
73
77
|
// Not using param defaults here as the fallback may be explicitly "undefined"
|
|
74
|
-
const fb = arguments.length === 2 && (isStringable(fallback) || fallback === undefined)
|
|
78
|
+
const fb = arguments.length === 2 && (isStringable(fallback) || fallback === undefined)
|
|
79
|
+
? fallback
|
|
80
|
+
: "";
|
|
75
81
|
return isStringable(input) ? String(input) : fb;
|
|
76
82
|
}
|
|
77
83
|
/**
|
|
@@ -93,23 +99,27 @@ function coerceInputToInteger(input) {
|
|
|
93
99
|
* @throws {TypeError}
|
|
94
100
|
*/
|
|
95
101
|
function stripWhitespace(value, options) {
|
|
96
|
-
const opts = Object.assign({ leading:
|
|
97
|
-
if (typeof value !==
|
|
98
|
-
throw new TypeError(
|
|
102
|
+
const opts = Object.assign({ leading: "", trailing: "", nested: " " }, options);
|
|
103
|
+
if (typeof value !== "string") {
|
|
104
|
+
throw new TypeError("value must be a string");
|
|
99
105
|
}
|
|
100
|
-
if (typeof opts.leading !==
|
|
101
|
-
throw new TypeError(
|
|
106
|
+
if (typeof opts.leading !== "string") {
|
|
107
|
+
throw new TypeError("leading must be a string");
|
|
102
108
|
}
|
|
103
|
-
if (typeof opts.trailing !==
|
|
104
|
-
throw new TypeError(
|
|
109
|
+
if (typeof opts.trailing !== "string") {
|
|
110
|
+
throw new TypeError("trailing must be a string");
|
|
105
111
|
}
|
|
106
|
-
if (typeof opts.nested !==
|
|
107
|
-
throw new TypeError(
|
|
112
|
+
if (typeof opts.nested !== "string") {
|
|
113
|
+
throw new TypeError("nested must be a string");
|
|
108
114
|
}
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
115
|
+
// This approach avoids using `/s+$/` regex, which triggers the
|
|
116
|
+
// `sonarjs/slow-regex` eslint rule
|
|
117
|
+
let newValue = value.replace(/^\s+/, opts.leading);
|
|
118
|
+
if (newValue.match(/\s$/)) {
|
|
119
|
+
newValue = `${newValue.trimEnd()}${opts.trailing}`;
|
|
120
|
+
}
|
|
121
|
+
newValue = newValue.replace(/\s+/g, opts.nested);
|
|
122
|
+
return newValue;
|
|
113
123
|
}
|
|
114
124
|
/* ------------------------------------------------ validation / sanitisation */
|
|
115
125
|
/**
|
|
@@ -121,8 +131,8 @@ function stripWhitespace(value, options) {
|
|
|
121
131
|
* @throws {Error} if proposed key is an invalid keyword
|
|
122
132
|
*/
|
|
123
133
|
function notProto(key) {
|
|
124
|
-
if ([
|
|
125
|
-
throw new Error(
|
|
134
|
+
if (["__proto__", "constructor", "prototype"].includes(String(key).toLowerCase())) {
|
|
135
|
+
throw new Error("Attempt to use prototype key disallowed");
|
|
126
136
|
}
|
|
127
137
|
return key;
|
|
128
138
|
}
|
|
@@ -136,14 +146,14 @@ function notProto(key) {
|
|
|
136
146
|
* @throws {SyntaxError}
|
|
137
147
|
*/
|
|
138
148
|
function validateHookName(hookName) {
|
|
139
|
-
if (typeof hookName !==
|
|
140
|
-
throw new TypeError(
|
|
149
|
+
if (typeof hookName !== "string") {
|
|
150
|
+
throw new TypeError("Hook name must be a string");
|
|
141
151
|
}
|
|
142
152
|
if (!hookName.length) {
|
|
143
|
-
throw new SyntaxError(
|
|
153
|
+
throw new SyntaxError("Hook name must not be empty");
|
|
144
154
|
}
|
|
145
155
|
if (!hookName.match(/^([a-z_]+\.|)[a-z_]+$/i)) {
|
|
146
|
-
throw new SyntaxError(
|
|
156
|
+
throw new SyntaxError("Hook name must match either <scope>.<hookname> or <hookname> formats");
|
|
147
157
|
}
|
|
148
158
|
}
|
|
149
159
|
/**
|
|
@@ -155,8 +165,8 @@ function validateHookName(hookName) {
|
|
|
155
165
|
* @throws {TypeError}
|
|
156
166
|
*/
|
|
157
167
|
function validateHookPath(path) {
|
|
158
|
-
if (typeof path !==
|
|
159
|
-
throw new TypeError(
|
|
168
|
+
if (typeof path !== "string" && !(path instanceof RegExp)) {
|
|
169
|
+
throw new TypeError("Hook path must be a string or RegExp");
|
|
160
170
|
}
|
|
161
171
|
}
|
|
162
172
|
/**
|
|
@@ -169,14 +179,14 @@ function validateHookPath(path) {
|
|
|
169
179
|
* @throws {SyntaxError}
|
|
170
180
|
*/
|
|
171
181
|
function validateUrlPath(path) {
|
|
172
|
-
if (typeof path !==
|
|
173
|
-
throw new TypeError(
|
|
182
|
+
if (typeof path !== "string") {
|
|
183
|
+
throw new TypeError("URL path must be a string");
|
|
174
184
|
}
|
|
175
185
|
if (path.match(/[^/a-z0-9_-]/)) {
|
|
176
|
-
throw new SyntaxError(
|
|
186
|
+
throw new SyntaxError("URL path must contain only a-z, 0-9, -, _ and / characters");
|
|
177
187
|
}
|
|
178
188
|
if (path.match(/\/{2,}/)) {
|
|
179
|
-
throw new SyntaxError(
|
|
189
|
+
throw new SyntaxError("URL path must not contain consecutive /");
|
|
180
190
|
}
|
|
181
191
|
return path;
|
|
182
192
|
}
|
|
@@ -190,14 +200,14 @@ function validateUrlPath(path) {
|
|
|
190
200
|
* @throws {SyntaxError}
|
|
191
201
|
*/
|
|
192
202
|
function validateView(view) {
|
|
193
|
-
if (typeof view !==
|
|
194
|
-
throw new TypeError(
|
|
203
|
+
if (typeof view !== "string") {
|
|
204
|
+
throw new TypeError("View must be a string");
|
|
195
205
|
}
|
|
196
206
|
if (!view.length) {
|
|
197
|
-
throw new SyntaxError(
|
|
207
|
+
throw new SyntaxError("View must not be empty");
|
|
198
208
|
}
|
|
199
209
|
if (!view.match(/^[a-z0-9/_-]+\.njk$/i)) {
|
|
200
|
-
throw new SyntaxError(
|
|
210
|
+
throw new SyntaxError("View must contain only a-z, 0-9, -, _ and / characters, and end in .njk");
|
|
201
211
|
}
|
|
202
212
|
}
|
|
203
213
|
/**
|
|
@@ -210,14 +220,14 @@ function validateView(view) {
|
|
|
210
220
|
* @throws {SyntaxError}
|
|
211
221
|
*/
|
|
212
222
|
function validateWaypoint(waypoint) {
|
|
213
|
-
if (typeof waypoint !==
|
|
214
|
-
throw new TypeError(
|
|
223
|
+
if (typeof waypoint !== "string") {
|
|
224
|
+
throw new TypeError("Waypoint must be a string");
|
|
215
225
|
}
|
|
216
226
|
if (!waypoint.length) {
|
|
217
|
-
throw new SyntaxError(
|
|
227
|
+
throw new SyntaxError("Waypoint must not be empty");
|
|
218
228
|
}
|
|
219
229
|
if (waypoint.match(/[^/a-z0-9_-]/)) {
|
|
220
|
-
throw new SyntaxError(
|
|
230
|
+
throw new SyntaxError("Waypoint must contain only a-z, 0-9, -, _ and / characters");
|
|
221
231
|
}
|
|
222
232
|
}
|
|
223
233
|
//# sourceMappingURL=utils.js.map
|
package/dist/lib/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.js"],"names":[],"mappings":";AAAA;;;GAGG;;AASH,0BAcC;AASD,oCAEC;AAYD,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/lib/utils.js"],"names":[],"mappings":"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"}
|
|
@@ -73,7 +73,7 @@ export type DateObjectConfigOptions = {
|
|
|
73
73
|
/**
|
|
74
74
|
* Override the notion of "now" (useful for testing)
|
|
75
75
|
*/
|
|
76
|
-
now?:
|
|
76
|
+
now?: DateTime;
|
|
77
77
|
};
|
|
78
|
-
import ValidatorFactory from
|
|
79
|
-
import ValidationError from
|
|
78
|
+
import ValidatorFactory from "../ValidatorFactory.js";
|
|
79
|
+
import ValidationError from "../ValidationError.js";
|
|
@@ -3,7 +3,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
/* eslint-disable class-methods-use-this */
|
|
7
6
|
const luxon_1 = require("luxon");
|
|
8
7
|
const lodash_1 = __importDefault(require("lodash"));
|
|
9
8
|
const ValidationError_js_1 = __importDefault(require("../ValidationError.js"));
|
|
@@ -46,49 +45,55 @@ class DateObject extends ValidatorFactory_js_1.default {
|
|
|
46
45
|
constructor() {
|
|
47
46
|
super(...arguments);
|
|
48
47
|
/** @property {string} name Validator name ("dateObject") */
|
|
49
|
-
this.name =
|
|
48
|
+
this.name = "dateObject";
|
|
50
49
|
}
|
|
51
50
|
validate(value, dataContext = {}) {
|
|
52
51
|
const config = Object.assign({ errorMsg: {
|
|
53
|
-
inline:
|
|
54
|
-
summary:
|
|
52
|
+
inline: "validation:rule.dateObject.inline",
|
|
53
|
+
summary: "validation:rule.dateObject.summary",
|
|
55
54
|
}, errorMsgAfterOffset: {
|
|
56
|
-
inline:
|
|
57
|
-
summary:
|
|
55
|
+
inline: "validation:rule.dateObject.afterOffset.inline",
|
|
56
|
+
summary: "validation:rule.dateObject.afterOffset.summary",
|
|
58
57
|
}, errorMsgBeforeOffset: {
|
|
59
|
-
inline:
|
|
60
|
-
summary:
|
|
58
|
+
inline: "validation:rule.dateObject.beforeOffset.inline",
|
|
59
|
+
summary: "validation:rule.dateObject.beforeOffset.summary",
|
|
61
60
|
}, now: luxon_1.DateTime.local(), allowSingleDigitDay: false, allowSingleDigitMonth: false, allowMonthNames: false, afterOffsetFromNow: undefined, beforeOffsetFromNow: undefined }, this.config);
|
|
62
61
|
let valid = false;
|
|
63
62
|
let { errorMsg } = config;
|
|
64
63
|
let luxonDate;
|
|
65
|
-
const NOW = config.now.startOf(
|
|
64
|
+
const NOW = config.now.startOf("day");
|
|
66
65
|
// Accepted formats
|
|
67
|
-
let formats = [
|
|
68
|
-
const formatTests = [
|
|
66
|
+
let formats = ["dd-MM-yyyy"];
|
|
67
|
+
const formatTests = [
|
|
68
|
+
{
|
|
69
69
|
flags: [config.allowSingleDigitDay],
|
|
70
|
-
formats: [
|
|
71
|
-
},
|
|
70
|
+
formats: ["d-MM-yyyy"],
|
|
71
|
+
},
|
|
72
|
+
{
|
|
72
73
|
flags: [config.allowSingleDigitDay, config.allowSingleDigitMonth],
|
|
73
|
-
formats: [
|
|
74
|
-
},
|
|
74
|
+
formats: ["d-M-yyyy"],
|
|
75
|
+
},
|
|
76
|
+
{
|
|
75
77
|
flags: [config.allowSingleDigitDay, config.allowMonthNames],
|
|
76
|
-
formats: [
|
|
77
|
-
},
|
|
78
|
+
formats: ["d-MMM-yyyy", "d-MMMM-yyyy"],
|
|
79
|
+
},
|
|
80
|
+
{
|
|
78
81
|
flags: [config.allowSingleDigitMonth],
|
|
79
|
-
formats: [
|
|
80
|
-
},
|
|
82
|
+
formats: ["dd-M-yyyy"],
|
|
83
|
+
},
|
|
84
|
+
{
|
|
81
85
|
flags: [config.allowMonthNames],
|
|
82
|
-
formats: [
|
|
83
|
-
}
|
|
86
|
+
formats: ["dd-MMM-yyyy", "dd-MMMM-yyyy"],
|
|
87
|
+
},
|
|
88
|
+
];
|
|
84
89
|
formatTests.forEach((test) => {
|
|
85
90
|
if (test.flags.every((v) => v === true)) {
|
|
86
91
|
formats = [...formats, ...test.formats];
|
|
87
92
|
}
|
|
88
93
|
});
|
|
89
|
-
if (typeof value ===
|
|
94
|
+
if (typeof value === "object") {
|
|
90
95
|
formats.find((format) => {
|
|
91
|
-
luxonDate = luxon_1.DateTime.fromFormat([value.dd, value.mm, value.yyyy].join(
|
|
96
|
+
luxonDate = luxon_1.DateTime.fromFormat([value.dd, value.mm, value.yyyy].join("-"), format).startOf("day");
|
|
92
97
|
valid = luxonDate.isValid;
|
|
93
98
|
return valid;
|
|
94
99
|
});
|
|
@@ -96,7 +101,7 @@ class DateObject extends ValidatorFactory_js_1.default {
|
|
|
96
101
|
// Check date is after the specified duration from now.
|
|
97
102
|
// Need to use UTC() otherwise DST shifts can affect the calculated offset
|
|
98
103
|
if (config.afterOffsetFromNow) {
|
|
99
|
-
const offsetDate = NOW.plus(config.afterOffsetFromNow).startOf(
|
|
104
|
+
const offsetDate = NOW.plus(config.afterOffsetFromNow).startOf("day");
|
|
100
105
|
if (luxonDate <= offsetDate) {
|
|
101
106
|
valid = false;
|
|
102
107
|
errorMsg = config.errorMsgAfterOffset;
|
|
@@ -105,7 +110,7 @@ class DateObject extends ValidatorFactory_js_1.default {
|
|
|
105
110
|
// Check date is before the specified duration from now
|
|
106
111
|
// Need to use UTC() otherwise DST shifts can affect the calculated offset
|
|
107
112
|
if (config.beforeOffsetFromNow) {
|
|
108
|
-
const offsetDate = NOW.plus(config.beforeOffsetFromNow).startOf(
|
|
113
|
+
const offsetDate = NOW.plus(config.beforeOffsetFromNow).startOf("day");
|
|
109
114
|
if (luxonDate >= offsetDate) {
|
|
110
115
|
valid = false;
|
|
111
116
|
errorMsg = config.errorMsgBeforeOffset;
|
|
@@ -115,30 +120,32 @@ class DateObject extends ValidatorFactory_js_1.default {
|
|
|
115
120
|
// Check presence of each object component (dd, mm, yyyy) in order to log
|
|
116
121
|
// which specific parts are in error
|
|
117
122
|
errorMsg.focusSuffix = [];
|
|
118
|
-
if (!Object.prototype.hasOwnProperty.call(value,
|
|
119
|
-
errorMsg.focusSuffix.push(
|
|
123
|
+
if (!Object.prototype.hasOwnProperty.call(value, "dd") || !value.dd) {
|
|
124
|
+
errorMsg.focusSuffix.push("[dd]");
|
|
120
125
|
}
|
|
121
|
-
if (!Object.prototype.hasOwnProperty.call(value,
|
|
122
|
-
errorMsg.focusSuffix.push(
|
|
126
|
+
if (!Object.prototype.hasOwnProperty.call(value, "mm") || !value.mm) {
|
|
127
|
+
errorMsg.focusSuffix.push("[mm]");
|
|
123
128
|
}
|
|
124
|
-
if (!Object.prototype.hasOwnProperty.call(value,
|
|
125
|
-
errorMsg.focusSuffix.push(
|
|
129
|
+
if (!Object.prototype.hasOwnProperty.call(value, "yyyy") || !value.yyyy) {
|
|
130
|
+
errorMsg.focusSuffix.push("[yyyy]");
|
|
126
131
|
}
|
|
127
132
|
// If the date is invalid, but not specific parts have been highlighted in
|
|
128
133
|
// error, then highlight all inputs, focusing on the [dd] first
|
|
129
134
|
if (!valid && !errorMsg.focusSuffix.length) {
|
|
130
|
-
errorMsg.focusSuffix = [
|
|
135
|
+
errorMsg.focusSuffix = ["[dd]", "[mm]", "[yyyy]"];
|
|
131
136
|
}
|
|
132
137
|
}
|
|
133
138
|
return valid ? [] : [ValidationError_js_1.default.make({ errorMsg, dataContext })];
|
|
134
139
|
}
|
|
135
140
|
sanitise(value) {
|
|
136
141
|
if (value !== undefined) {
|
|
137
|
-
return isPlainObject(value)
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
+
return isPlainObject(value)
|
|
143
|
+
? {
|
|
144
|
+
dd: (0, utils_js_1.stripWhitespace)((0, utils_js_1.stringifyInput)(value.dd)),
|
|
145
|
+
mm: (0, utils_js_1.stripWhitespace)((0, utils_js_1.stringifyInput)(value.mm)),
|
|
146
|
+
yyyy: (0, utils_js_1.stripWhitespace)((0, utils_js_1.stringifyInput)(value.yyyy)),
|
|
147
|
+
}
|
|
148
|
+
: Object.create(null);
|
|
142
149
|
}
|
|
143
150
|
return undefined;
|
|
144
151
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dateObject.js","sourceRoot":"","sources":["../../../src/lib/validators/dateObject.js"],"names":[],"mappings":";;;;;AAAA,
|
|
1
|
+
{"version":3,"file":"dateObject.js","sourceRoot":"","sources":["../../../src/lib/validators/dateObject.js"],"names":[],"mappings":"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"}
|
|
@@ -29,5 +29,5 @@ export type EmailConfigOptions = {
|
|
|
29
29
|
*/
|
|
30
30
|
errorMsg: ErrorMessageConfig;
|
|
31
31
|
};
|
|
32
|
-
import ValidatorFactory from
|
|
33
|
-
import ValidationError from
|
|
32
|
+
import ValidatorFactory from "../ValidatorFactory.js";
|
|
33
|
+
import ValidationError from "../ValidationError.js";
|
|
@@ -3,7 +3,6 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
/* eslint-disable class-methods-use-this */
|
|
7
6
|
const validator_1 = __importDefault(require("validator"));
|
|
8
7
|
const ValidationError_js_1 = __importDefault(require("../ValidationError.js"));
|
|
9
8
|
const ValidatorFactory_js_1 = __importDefault(require("../ValidatorFactory.js"));
|
|
@@ -31,19 +30,19 @@ class Email extends ValidatorFactory_js_1.default {
|
|
|
31
30
|
constructor() {
|
|
32
31
|
super(...arguments);
|
|
33
32
|
/** @property {string} name Validator name ("email") */
|
|
34
|
-
this.name =
|
|
33
|
+
this.name = "email";
|
|
35
34
|
}
|
|
36
35
|
validate(value, dataContext = {}) {
|
|
37
36
|
let isValid;
|
|
38
37
|
try {
|
|
39
38
|
isValid = isEmail(value);
|
|
40
39
|
}
|
|
41
|
-
catch (
|
|
40
|
+
catch (_a) {
|
|
42
41
|
isValid = false;
|
|
43
42
|
}
|
|
44
43
|
const errorMsg = this.config.errorMsg || {
|
|
45
|
-
summary:
|
|
46
|
-
inline:
|
|
44
|
+
summary: "validation:rule.email.summary",
|
|
45
|
+
inline: "validation:rule.email.inline",
|
|
47
46
|
};
|
|
48
47
|
return isValid ? [] : [ValidationError_js_1.default.make({ errorMsg, dataContext })];
|
|
49
48
|
}
|