@dwp/govuk-casa 9.6.6 → 10.0.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.
Files changed (287) hide show
  1. package/dist/assets/css/casa.css +1 -1
  2. package/dist/assets/css/casa.css.map +1 -1
  3. package/dist/casa.d.ts +81 -41
  4. package/dist/casa.d.ts.map +1 -0
  5. package/dist/casa.js +72 -99
  6. package/dist/core-plugins/edit-snapshot/src/configure.d.ts +1 -0
  7. package/dist/core-plugins/edit-snapshot/src/configure.d.ts.map +1 -0
  8. package/dist/core-plugins/edit-snapshot/src/configure.js +7 -14
  9. package/dist/core-plugins/edit-snapshot/src/index.d.ts +1 -0
  10. package/dist/core-plugins/edit-snapshot/src/index.d.ts.map +1 -0
  11. package/dist/core-plugins/edit-snapshot/src/index.js +3 -9
  12. package/dist/core-plugins/edit-snapshot/src/post-steer-hook.d.ts +2 -1
  13. package/dist/core-plugins/edit-snapshot/src/post-steer-hook.d.ts.map +1 -0
  14. package/dist/core-plugins/edit-snapshot/src/post-steer-hook.js +8 -13
  15. package/dist/core-plugins/edit-snapshot/src/pre-steer-hook.d.ts +2 -1
  16. package/dist/core-plugins/edit-snapshot/src/pre-steer-hook.d.ts.map +1 -0
  17. package/dist/core-plugins/edit-snapshot/src/pre-steer-hook.js +13 -18
  18. package/dist/core-plugins/edit-snapshot/src/utils.d.ts +8 -5
  19. package/dist/core-plugins/edit-snapshot/src/utils.d.ts.map +1 -0
  20. package/dist/core-plugins/edit-snapshot/src/utils.js +37 -19
  21. package/dist/core-plugins/index.d.ts +1 -0
  22. package/dist/core-plugins/index.d.ts.map +1 -0
  23. package/dist/core-plugins/index.js +1 -9
  24. package/dist/lib/CasaTemplateLoader.d.ts +1 -0
  25. package/dist/lib/CasaTemplateLoader.d.ts.map +1 -0
  26. package/dist/lib/CasaTemplateLoader.js +2 -6
  27. package/dist/lib/JourneyContext.d.ts +22 -11
  28. package/dist/lib/JourneyContext.d.ts.map +1 -0
  29. package/dist/lib/JourneyContext.js +40 -45
  30. package/dist/lib/MutableRouter.d.ts +74 -55
  31. package/dist/lib/MutableRouter.d.ts.map +1 -0
  32. package/dist/lib/MutableRouter.js +48 -45
  33. package/dist/lib/NullObject.d.ts +3 -0
  34. package/dist/lib/NullObject.d.ts.map +1 -0
  35. package/dist/lib/NullObject.js +3 -0
  36. package/dist/lib/Plan.d.ts +2 -1
  37. package/dist/lib/Plan.d.ts.map +1 -0
  38. package/dist/lib/Plan.js +44 -62
  39. package/dist/lib/ValidationError.d.ts +2 -1
  40. package/dist/lib/ValidationError.d.ts.map +1 -0
  41. package/dist/lib/ValidationError.js +3 -11
  42. package/dist/lib/ValidatorFactory.d.ts +5 -6
  43. package/dist/lib/ValidatorFactory.d.ts.map +1 -0
  44. package/dist/lib/ValidatorFactory.js +4 -12
  45. package/dist/lib/configuration-ingestor.d.ts +10 -22
  46. package/dist/lib/configuration-ingestor.d.ts.map +1 -0
  47. package/dist/lib/configuration-ingestor.js +61 -143
  48. package/dist/lib/configure.d.ts +2 -1
  49. package/dist/lib/configure.d.ts.map +1 -0
  50. package/dist/lib/configure.js +40 -52
  51. package/dist/lib/constants.d.ts +1 -0
  52. package/dist/lib/constants.d.ts.map +1 -0
  53. package/dist/lib/constants.js +8 -12
  54. package/dist/lib/context-id-generators.d.ts +1 -0
  55. package/dist/lib/context-id-generators.d.ts.map +1 -0
  56. package/dist/lib/context-id-generators.js +4 -9
  57. package/dist/lib/end-session.d.ts +2 -1
  58. package/dist/lib/end-session.d.ts.map +1 -0
  59. package/dist/lib/end-session.js +4 -11
  60. package/dist/lib/field.d.ts +2 -1
  61. package/dist/lib/field.d.ts.map +1 -0
  62. package/dist/lib/field.js +11 -21
  63. package/dist/lib/index.d.ts +1 -0
  64. package/dist/lib/index.d.ts.map +1 -0
  65. package/dist/lib/index.js +13 -65
  66. package/dist/lib/logger.d.ts +25 -2
  67. package/dist/lib/logger.d.ts.map +1 -0
  68. package/dist/lib/logger.js +18 -9
  69. package/dist/lib/mount.d.ts +1 -0
  70. package/dist/lib/mount.d.ts.map +1 -0
  71. package/dist/lib/mount.js +10 -16
  72. package/dist/lib/nunjucks-filters.d.ts +7 -3
  73. package/dist/lib/nunjucks-filters.d.ts.map +1 -0
  74. package/dist/lib/nunjucks-filters.js +58 -71
  75. package/dist/lib/nunjucks.d.ts +2 -2
  76. package/dist/lib/nunjucks.d.ts.map +1 -0
  77. package/dist/lib/nunjucks.js +12 -25
  78. package/dist/lib/utils.d.ts +4 -2
  79. package/dist/lib/utils.d.ts.map +1 -0
  80. package/dist/lib/utils.js +14 -28
  81. package/dist/lib/validators/dateObject.d.ts +1 -0
  82. package/dist/lib/validators/dateObject.d.ts.map +1 -0
  83. package/dist/lib/validators/dateObject.js +14 -21
  84. package/dist/lib/validators/email.d.ts +1 -0
  85. package/dist/lib/validators/email.d.ts.map +1 -0
  86. package/dist/lib/validators/email.js +8 -15
  87. package/dist/lib/validators/inArray.d.ts +1 -0
  88. package/dist/lib/validators/inArray.d.ts.map +1 -0
  89. package/dist/lib/validators/inArray.js +8 -15
  90. package/dist/lib/validators/index.d.ts +1 -0
  91. package/dist/lib/validators/index.d.ts.map +1 -0
  92. package/dist/lib/validators/index.js +21 -27
  93. package/dist/lib/validators/nino.d.ts +1 -0
  94. package/dist/lib/validators/nino.d.ts.map +1 -0
  95. package/dist/lib/validators/nino.js +6 -13
  96. package/dist/lib/validators/postalAddressObject.d.ts +1 -0
  97. package/dist/lib/validators/postalAddressObject.d.ts.map +1 -0
  98. package/dist/lib/validators/postalAddressObject.js +12 -19
  99. package/dist/lib/validators/range.d.ts +1 -0
  100. package/dist/lib/validators/range.d.ts.map +1 -0
  101. package/dist/lib/validators/range.js +6 -13
  102. package/dist/lib/validators/regex.d.ts +1 -0
  103. package/dist/lib/validators/regex.d.ts.map +1 -0
  104. package/dist/lib/validators/regex.js +6 -13
  105. package/dist/lib/validators/required.d.ts +1 -0
  106. package/dist/lib/validators/required.d.ts.map +1 -0
  107. package/dist/lib/validators/required.js +9 -17
  108. package/dist/lib/validators/strlen.d.ts +1 -0
  109. package/dist/lib/validators/strlen.d.ts.map +1 -0
  110. package/dist/lib/validators/strlen.js +6 -13
  111. package/dist/lib/validators/wordCount.d.ts +1 -0
  112. package/dist/lib/validators/wordCount.d.ts.map +1 -0
  113. package/dist/lib/validators/wordCount.js +6 -13
  114. package/dist/lib/waypoint-url.d.ts +3 -2
  115. package/dist/lib/waypoint-url.d.ts.map +1 -0
  116. package/dist/lib/waypoint-url.js +12 -19
  117. package/dist/middleware/body-parser.d.ts +1 -0
  118. package/dist/middleware/body-parser.d.ts.map +1 -0
  119. package/dist/middleware/body-parser.js +4 -9
  120. package/dist/middleware/csrf.d.ts +1 -0
  121. package/dist/middleware/csrf.d.ts.map +1 -0
  122. package/dist/middleware/csrf.js +4 -8
  123. package/dist/middleware/data.d.ts +2 -3
  124. package/dist/middleware/data.d.ts.map +1 -0
  125. package/dist/middleware/data.js +23 -25
  126. package/dist/middleware/gather-fields.d.ts +3 -1
  127. package/dist/middleware/gather-fields.d.ts.map +1 -0
  128. package/dist/middleware/gather-fields.js +13 -14
  129. package/dist/middleware/i18n.d.ts +1 -0
  130. package/dist/middleware/i18n.d.ts.map +1 -0
  131. package/dist/middleware/i18n.js +26 -31
  132. package/dist/middleware/post.d.ts +1 -0
  133. package/dist/middleware/post.d.ts.map +1 -0
  134. package/dist/middleware/post.js +3 -10
  135. package/dist/middleware/pre.d.ts +2 -1
  136. package/dist/middleware/pre.d.ts.map +1 -0
  137. package/dist/middleware/pre.js +6 -12
  138. package/dist/middleware/progress-journey.d.ts +5 -3
  139. package/dist/middleware/progress-journey.d.ts.map +1 -0
  140. package/dist/middleware/progress-journey.js +20 -18
  141. package/dist/middleware/sanitise-fields.d.ts +5 -3
  142. package/dist/middleware/sanitise-fields.d.ts.map +1 -0
  143. package/dist/middleware/sanitise-fields.js +25 -17
  144. package/dist/middleware/serve-first-waypoint.d.ts +1 -0
  145. package/dist/middleware/serve-first-waypoint.d.ts.map +1 -0
  146. package/dist/middleware/serve-first-waypoint.js +3 -6
  147. package/dist/middleware/session.d.ts +15 -0
  148. package/dist/middleware/session.d.ts.map +1 -0
  149. package/dist/middleware/session.js +53 -57
  150. package/dist/middleware/skip-waypoint.d.ts +3 -2
  151. package/dist/middleware/skip-waypoint.d.ts.map +1 -0
  152. package/dist/middleware/skip-waypoint.js +15 -14
  153. package/dist/middleware/steer-journey.d.ts +2 -1
  154. package/dist/middleware/steer-journey.d.ts.map +1 -0
  155. package/dist/middleware/steer-journey.js +7 -13
  156. package/dist/middleware/strip-proxy-path.d.ts +3 -2
  157. package/dist/middleware/strip-proxy-path.d.ts.map +1 -0
  158. package/dist/middleware/strip-proxy-path.js +24 -24
  159. package/dist/middleware/validate-fields.d.ts +7 -4
  160. package/dist/middleware/validate-fields.d.ts.map +1 -0
  161. package/dist/middleware/validate-fields.js +22 -11
  162. package/dist/routes/ancillary.d.ts +1 -0
  163. package/dist/routes/ancillary.d.ts.map +1 -0
  164. package/dist/routes/ancillary.js +3 -10
  165. package/dist/routes/journey.d.ts +7 -2
  166. package/dist/routes/journey.d.ts.map +1 -0
  167. package/dist/routes/journey.js +56 -55
  168. package/dist/routes/static.d.ts +1 -0
  169. package/dist/routes/static.d.ts.map +1 -0
  170. package/dist/routes/static.js +15 -23
  171. package/locales/cy/error.json +1 -0
  172. package/locales/en/error.json +1 -0
  173. package/package.json +32 -38
  174. package/src/casa.js +49 -29
  175. package/src/core-plugins/edit-snapshot/src/post-steer-hook.js +1 -0
  176. package/src/core-plugins/edit-snapshot/src/pre-steer-hook.js +2 -1
  177. package/src/core-plugins/edit-snapshot/src/utils.js +29 -1
  178. package/src/lib/JourneyContext.js +31 -28
  179. package/src/lib/MutableRouter.js +47 -38
  180. package/src/lib/NullObject.js +4 -0
  181. package/src/lib/Plan.js +41 -55
  182. package/src/lib/ValidationError.js +2 -4
  183. package/src/lib/ValidatorFactory.js +3 -5
  184. package/src/lib/configuration-ingestor.js +18 -38
  185. package/src/lib/configure.js +7 -10
  186. package/src/lib/end-session.js +1 -1
  187. package/src/lib/field.js +7 -12
  188. package/src/lib/logger.js +16 -0
  189. package/src/lib/mount.js +1 -1
  190. package/src/lib/nunjucks-filters.js +51 -61
  191. package/src/lib/nunjucks.js +3 -12
  192. package/src/lib/utils.js +2 -1
  193. package/src/lib/validators/dateObject.js +3 -4
  194. package/src/lib/validators/postalAddressObject.js +6 -7
  195. package/src/lib/validators/required.js +1 -3
  196. package/src/lib/waypoint-url.js +15 -19
  197. package/src/middleware/csrf.js +1 -1
  198. package/src/middleware/data.js +13 -13
  199. package/src/middleware/gather-fields.js +8 -2
  200. package/src/middleware/i18n.js +9 -6
  201. package/src/middleware/pre.js +1 -1
  202. package/src/middleware/progress-journey.js +8 -0
  203. package/src/middleware/sanitise-fields.js +17 -2
  204. package/src/middleware/session.js +53 -12
  205. package/src/middleware/skip-waypoint.js +8 -1
  206. package/src/middleware/steer-journey.js +1 -1
  207. package/src/middleware/strip-proxy-path.js +21 -16
  208. package/src/middleware/validate-fields.js +19 -0
  209. package/src/routes/journey.js +18 -8
  210. package/src/routes/static.js +5 -4
  211. package/views/casa/components/character-count/template.njk +1 -0
  212. package/views/casa/components/checkboxes/template.njk +1 -0
  213. package/views/casa/components/date-input/template.njk +1 -0
  214. package/views/casa/components/input/template.njk +1 -0
  215. package/views/casa/components/postal-address-object/template.njk +5 -0
  216. package/views/casa/components/radios/template.njk +1 -0
  217. package/views/casa/components/select/template.njk +1 -0
  218. package/views/casa/components/textarea/template.njk +1 -0
  219. package/views/casa/layouts/journey.njk +1 -1
  220. package/views/casa/layouts/main.njk +11 -21
  221. package/dist/casa.js.map +0 -1
  222. package/dist/core-plugins/edit-snapshot/src/configure.js.map +0 -1
  223. package/dist/core-plugins/edit-snapshot/src/index.js.map +0 -1
  224. package/dist/core-plugins/edit-snapshot/src/post-steer-hook.js.map +0 -1
  225. package/dist/core-plugins/edit-snapshot/src/pre-steer-hook.js.map +0 -1
  226. package/dist/core-plugins/edit-snapshot/src/utils.js.map +0 -1
  227. package/dist/core-plugins/index.js.map +0 -1
  228. package/dist/lib/CasaTemplateLoader.js.map +0 -1
  229. package/dist/lib/JourneyContext.js.map +0 -1
  230. package/dist/lib/MutableRouter.js.map +0 -1
  231. package/dist/lib/Plan.js.map +0 -1
  232. package/dist/lib/ValidationError.js.map +0 -1
  233. package/dist/lib/ValidatorFactory.js.map +0 -1
  234. package/dist/lib/configuration-ingestor.js.map +0 -1
  235. package/dist/lib/configure.js.map +0 -1
  236. package/dist/lib/constants.js.map +0 -1
  237. package/dist/lib/context-id-generators.js.map +0 -1
  238. package/dist/lib/dirname.cjs +0 -1
  239. package/dist/lib/dirname.d.cts +0 -2
  240. package/dist/lib/end-session.js.map +0 -1
  241. package/dist/lib/field.js.map +0 -1
  242. package/dist/lib/index.js.map +0 -1
  243. package/dist/lib/logger.js.map +0 -1
  244. package/dist/lib/mount.js.map +0 -1
  245. package/dist/lib/nunjucks-filters.js.map +0 -1
  246. package/dist/lib/nunjucks.js.map +0 -1
  247. package/dist/lib/utils.js.map +0 -1
  248. package/dist/lib/validators/dateObject.js.map +0 -1
  249. package/dist/lib/validators/email.js.map +0 -1
  250. package/dist/lib/validators/inArray.js.map +0 -1
  251. package/dist/lib/validators/index.js.map +0 -1
  252. package/dist/lib/validators/nino.js.map +0 -1
  253. package/dist/lib/validators/postalAddressObject.js.map +0 -1
  254. package/dist/lib/validators/range.js.map +0 -1
  255. package/dist/lib/validators/regex.js.map +0 -1
  256. package/dist/lib/validators/required.js.map +0 -1
  257. package/dist/lib/validators/strlen.js.map +0 -1
  258. package/dist/lib/validators/wordCount.js.map +0 -1
  259. package/dist/lib/waypoint-url.js.map +0 -1
  260. package/dist/middleware/body-parser.js.map +0 -1
  261. package/dist/middleware/csrf.js.map +0 -1
  262. package/dist/middleware/data.js.map +0 -1
  263. package/dist/middleware/dirname.cjs +0 -1
  264. package/dist/middleware/dirname.d.cts +0 -2
  265. package/dist/middleware/gather-fields.js.map +0 -1
  266. package/dist/middleware/i18n.js.map +0 -1
  267. package/dist/middleware/post.js.map +0 -1
  268. package/dist/middleware/pre.js.map +0 -1
  269. package/dist/middleware/progress-journey.js.map +0 -1
  270. package/dist/middleware/sanitise-fields.js.map +0 -1
  271. package/dist/middleware/serve-first-waypoint.js.map +0 -1
  272. package/dist/middleware/session.js.map +0 -1
  273. package/dist/middleware/skip-waypoint.js.map +0 -1
  274. package/dist/middleware/steer-journey.js.map +0 -1
  275. package/dist/middleware/strip-proxy-path.js.map +0 -1
  276. package/dist/middleware/validate-fields.js.map +0 -1
  277. package/dist/mjs/esm-wrapper.js +0 -20
  278. package/dist/mjs/package.json +0 -3
  279. package/dist/package.json +0 -3
  280. package/dist/routes/ancillary.js.map +0 -1
  281. package/dist/routes/dirname.cjs +0 -1
  282. package/dist/routes/dirname.d.cts +0 -2
  283. package/dist/routes/journey.js.map +0 -1
  284. package/dist/routes/static.js.map +0 -1
  285. package/src/lib/dirname.cjs +0 -1
  286. package/src/middleware/dirname.cjs +0 -1
  287. package/src/routes/dirname.cjs +0 -1
@@ -1,33 +1,28 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- const logger_js_1 = __importDefault(require("../../../lib/logger.js"));
7
- const utils_js_1 = require("./utils.js");
8
- const log = (0, logger_js_1.default)("lib:internal-plugin:edit-snapshot:pre-steer-hook");
9
- exports.default = (req, res, next) => {
10
- if (req.query.editcancel && (0, utils_js_1.snapshotExists)(req)) {
1
+ import logger from "../../../lib/logger.js";
2
+ import { FLAG_FOR_PURGING, snapshotExists, recoverSnapshot, createSnapshot, reachedEditOrigin, } from "./utils.js";
3
+ const log = logger("lib:internal-plugin:edit-snapshot:pre-steer-hook");
4
+ /** @type {import("express").RequestHandler} */
5
+ export default (req, res, next) => {
6
+ if (req.query?.editcancel && snapshotExists(req)) {
11
7
  log.debug("Edit workflow was actively canceled. Snapshot will be recovered.");
12
- (0, utils_js_1.recoverSnapshot)(log, req);
8
+ recoverSnapshot(log, req);
13
9
  return req.session.save(next);
14
10
  }
15
- if (!req.casa.editMode && (0, utils_js_1.snapshotExists)(req)) {
11
+ if (!req.casa.editMode && snapshotExists(req)) {
16
12
  log.debug("Edit workflow passively canceled. Snapshot will be recovered.");
17
- (0, utils_js_1.recoverSnapshot)(log, req);
13
+ recoverSnapshot(log, req);
18
14
  return req.session.save(next);
19
15
  }
20
- if (req.casa.editMode && (0, utils_js_1.reachedEditOrigin)(log, req)) {
16
+ if (req.casa.editMode && reachedEditOrigin(log, req)) {
21
17
  log.trace(`Editing workflow has reached editorigin. Purge MAY be carried out in poststeer hook on context '${req.casa.journeyContext.identity.id}'.`);
22
18
  // eslint-disable-next-line security/detect-object-injection
23
- req.casa[utils_js_1.FLAG_FOR_PURGING] = true;
19
+ req.casa[FLAG_FOR_PURGING] = true;
24
20
  return next();
25
21
  }
26
- if (req.casa.editMode && !(0, utils_js_1.snapshotExists)(req)) {
22
+ if (req.casa.editMode && !snapshotExists(req)) {
27
23
  log.debug("Editing workflow has just started. Will create snapshot.");
28
- (0, utils_js_1.createSnapshot)(log, req);
24
+ createSnapshot(log, req);
29
25
  return req.session.save(next);
30
26
  }
31
27
  next();
32
28
  };
33
- //# sourceMappingURL=pre-steer-hook.js.map
@@ -1,6 +1,9 @@
1
1
  export const FLAG_FOR_PURGING: unique symbol;
2
- export function snapshotExists(req: any): any;
3
- export function reachedEditOrigin(log: any, req: any): boolean;
4
- export function createSnapshot(log: any, req: any): void;
5
- export function recoverSnapshot(log: any, req: any): void;
6
- export function deleteSnapshot(log: any, req: any): void;
2
+ export function snapshotExists(req: ExpressRequest): undefined | boolean;
3
+ export function reachedEditOrigin(log: CASADebugLogger, req: ExpressRequest): boolean;
4
+ export function createSnapshot(log: CASADebugLogger, req: ExpressRequest): void;
5
+ export function recoverSnapshot(log: CASADebugLogger, req: ExpressRequest): void;
6
+ export function deleteSnapshot(log: CASADebugLogger, req: ExpressRequest): void;
7
+ export type CASADebugLogger = import("../../../lib/logger.js").CASADebugLogger;
8
+ export type ExpressRequest = import("express").Request;
9
+ //# sourceMappingURL=utils.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../../../../src/core-plugins/edit-snapshot/src/utils.js"],"names":[],"mappings":"AAMA,6CAAsE;AAM/D,oCAHI,cAAc,GACZ,SAAS,GAAG,OAAO,CAO/B;AAOM,uCAJI,eAAe,OACf,cAAc,GACZ,OAAO,CAanB;AAOM,oCAJI,eAAe,OACf,cAAc,GACZ,IAAI,CAShB;AAOM,qCAJI,eAAe,OACf,cAAc,GACZ,IAAI,CAWhB;AAOM,oCAJI,eAAe,OACf,cAAc,GACZ,IAAI,CAOhB;8BAEa,OAAO,wBAAwB,EAAE,eAAe;6BAChD,OAAO,SAAS,EAAE,OAAO"}
@@ -1,38 +1,56 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.deleteSnapshot = exports.recoverSnapshot = exports.createSnapshot = exports.reachedEditOrigin = exports.snapshotExists = exports.FLAG_FOR_PURGING = void 0;
4
1
  /* eslint-disable security/detect-object-injection */
5
- const casa_js_1 = require("../../../casa.js");
2
+ import { JourneyContext } from "../../../casa.js";
3
+ import NullObject from "../../../lib/NullObject.js";
6
4
  const SESSION_KEY = "casa_edit_snapshots";
7
- exports.FLAG_FOR_PURGING = Symbol("flag_to_purge_edit_snapshot");
8
- const snapshotExists = (req) => {
5
+ export const FLAG_FOR_PURGING = Symbol("flag_to_purge_edit_snapshot");
6
+ /**
7
+ * @param {ExpressRequest} req Express request
8
+ * @returns {undefined | boolean} Whether the snapshot exists
9
+ */
10
+ export const snapshotExists = (req) => {
9
11
  return (req?.session[SESSION_KEY] &&
10
12
  Object.hasOwn(req.session[SESSION_KEY], req.casa.journeyContext.identity.id));
11
13
  };
12
- exports.snapshotExists = snapshotExists;
13
- const reachedEditOrigin = (log, req) => {
14
+ /**
15
+ * @param {CASADebugLogger} log Express request
16
+ * @param {ExpressRequest} req Express request
17
+ * @returns {boolean} Reached edit origin
18
+ */
19
+ export const reachedEditOrigin = (log, req) => {
14
20
  const { pathname: currentPathname } = new URL(req.originalUrl, "https://placeholder.test/");
15
21
  const { pathname: editOriginPathname } = new URL(req.casa.editOrigin, "https://placeholder.test/");
16
22
  return editOriginPathname === currentPathname;
17
23
  };
18
- exports.reachedEditOrigin = reachedEditOrigin;
19
- const createSnapshot = (log, req) => {
24
+ /**
25
+ * @param {CASADebugLogger} log Express request
26
+ * @param {ExpressRequest} req Express request
27
+ * @returns {void}
28
+ */
29
+ export const createSnapshot = (log, req) => {
20
30
  log.debug(`Creating a new edit snapshot for context '${req.casa.journeyContext.identity.id}'`);
21
- req.session[SESSION_KEY] ??= Object.create(null);
31
+ req.session[SESSION_KEY] ??= new NullObject();
22
32
  req.session[SESSION_KEY][req.casa.journeyContext.identity.id] =
23
33
  req.casa.journeyContext.toObject();
24
34
  };
25
- exports.createSnapshot = createSnapshot;
26
- const recoverSnapshot = (log, req) => {
35
+ /**
36
+ * @param {CASADebugLogger} log Express request
37
+ * @param {ExpressRequest} req Express request
38
+ * @returns {void}
39
+ */
40
+ export const recoverSnapshot = (log, req) => {
27
41
  log.debug(`Recovering snapshot for context '${req.casa.journeyContext.identity.id}'`);
28
42
  req.casa.journeyContext.configureFromObject(req.session[SESSION_KEY][req.casa.journeyContext.identity.id]);
29
- casa_js_1.JourneyContext.putContext(req.session, req.casa.journeyContext);
30
- (0, exports.deleteSnapshot)(log, req);
43
+ JourneyContext.putContext(req.session, req.casa.journeyContext);
44
+ deleteSnapshot(log, req);
31
45
  };
32
- exports.recoverSnapshot = recoverSnapshot;
33
- const deleteSnapshot = (log, req) => {
46
+ /**
47
+ * @param {CASADebugLogger} log Express request
48
+ * @param {ExpressRequest} req Express request
49
+ * @returns {void}
50
+ */
51
+ export const deleteSnapshot = (log, req) => {
34
52
  log.debug(`Purging edit snapshot for context '${req.casa.journeyContext.identity.id}'`);
35
53
  req.session[SESSION_KEY][req.casa.journeyContext.identity.id] = undefined;
36
54
  };
37
- exports.deleteSnapshot = deleteSnapshot;
38
- //# sourceMappingURL=utils.js.map
55
+ /** @typedef {import("../../../lib/logger.js").CASADebugLogger} CASADebugLogger */
56
+ /** @typedef {import("express").Request} ExpressRequest */
@@ -1 +1,2 @@
1
1
  export { default as editSnapshot } from "./edit-snapshot/src/index.js";
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core-plugins/index.js"],"names":[],"mappings":""}
@@ -1,10 +1,2 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.editSnapshot = void 0;
7
1
  // Convenience for exporting all plugins as "corePlugins" from main casa module
8
- var index_js_1 = require("./edit-snapshot/src/index.js");
9
- Object.defineProperty(exports, "editSnapshot", { enumerable: true, get: function () { return __importDefault(index_js_1).default; } });
10
- //# sourceMappingURL=index.js.map
2
+ export { default as editSnapshot } from "./edit-snapshot/src/index.js";
@@ -30,3 +30,4 @@ export type FileSystemLoaderOptions = import("nunjucks").FileSystemLoaderOptions
30
30
  export type LoaderSource = import("nunjucks").LoaderSource;
31
31
  export type BlockModifier = (templateName: string) => string;
32
32
  import { FileSystemLoader } from "nunjucks";
33
+ //# sourceMappingURL=CasaTemplateLoader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"CasaTemplateLoader.d.ts","sourceRoot":"","sources":["../../src/lib/CasaTemplateLoader.js"],"names":[],"mappings":"AA4BA;;;;GAIG;AAEH;;;GAGG;AACH;IAGE;;;;;OAKG;IACH,yBAHW,MAAM,EAAE,QACR,uBAAuB,EAMjC;IAaD;;;;;;;OAOG;IACH,mBALW,MAAM,YACN,aAAa,GACX,IAAI,CAehB;;CAuBF;sCAxGY,OAAO,UAAU,EAAE,uBAAuB;2BAK1C,OAAO,UAAU,EAAE,YAAY;2CAsBjC,MAAM,KACJ,MAAM;iCA/Bc,UAAU"}
@@ -1,6 +1,4 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- const nunjucks_1 = require("nunjucks");
1
+ import { FileSystemLoader } from "nunjucks";
4
2
  /**
5
3
  * @typedef {import("nunjucks").FileSystemLoaderOptions} FileSystemLoaderOptions
6
4
  * @access private
@@ -33,7 +31,7 @@ const VALID_BLOCKS = [
33
31
  * @augments FileSystemLoader
34
32
  * @access private
35
33
  */
36
- class CasaTemplateLoader extends nunjucks_1.FileSystemLoader {
34
+ export default class CasaTemplateLoader extends FileSystemLoader {
37
35
  #blockModifiers;
38
36
  /**
39
37
  * Constructor.
@@ -92,5 +90,3 @@ class CasaTemplateLoader extends nunjucks_1.FileSystemLoader {
92
90
  return source;
93
91
  }
94
92
  }
95
- exports.default = CasaTemplateLoader;
96
- //# sourceMappingURL=CasaTemplateLoader.js.map
@@ -18,16 +18,20 @@
18
18
  * @typedef {import("../casa").JourneyContextObject} JourneyContextObject
19
19
  * @access private
20
20
  */
21
+ /**
22
+ * @typedef {import("../casa").JourneyContextIdentity} JourneyContextIdentity
23
+ * @access private
24
+ */
21
25
  /**
22
26
  * @typedef {import("express").Request} ExpressRequest
23
27
  * @access private
24
28
  */
25
29
  /**
26
- * @param {any} key Object key to validate
30
+ * @param {string} key Object key to validate
27
31
  * @returns {string} Validated key
28
32
  */
29
- export function validateObjectKey(key?: any): string;
30
- /** @memberof module:@dwp/govuk-casa */
33
+ export function validateObjectKey(key?: string): string;
34
+ /** @memberof module:"@dwp/govuk-casa" */
31
35
  export default class JourneyContext {
32
36
  static DEFAULT_CONTEXT_ID: string;
33
37
  /** @type {symbol} */
@@ -214,12 +218,15 @@ export default class JourneyContext {
214
218
  * among a group of contexts stored in the session.
215
219
  *
216
220
  * @param {Record<string, any>} data Entire journey data.
217
- * @param {object} validation Page errors (indexed by waypoint id).
218
- * @param {object} nav Navigation context.
219
- * @param {object} identity Some metadata for identifying this context among
220
- * others.
221
+ * @param {Record<string, ValidationError[] | null>} validation Page errors
222
+ * (indexed by waypoint id).
223
+ * @param {{ language?: string }} nav Navigation context.
224
+ * @param {JourneyContextIdentity} identity Some metadata for identifying this
225
+ * context among others.
221
226
  */
222
- constructor(data?: Record<string, any>, validation?: object, nav?: object, identity?: object);
227
+ constructor(data?: Record<string, any>, validation?: Record<string, ValidationError[] | null>, nav?: {
228
+ language?: string;
229
+ }, identity?: JourneyContextIdentity);
223
230
  /**
224
231
  * Clone into an object that can be stringified.
225
232
  *
@@ -229,9 +236,11 @@ export default class JourneyContext {
229
236
  configureFromObject(object: any): void;
230
237
  set data(value: Record<string, any>);
231
238
  get data(): Record<string, any>;
232
- get validation(): object;
233
- get nav(): object;
234
- get identity(): object;
239
+ get validation(): Record<string, ValidationError[] | null>;
240
+ get nav(): {
241
+ language?: string;
242
+ };
243
+ get identity(): import("../casa").JourneyContextIdentity;
235
244
  /**
236
245
  * Get data context for a specific a specific page.
237
246
  *
@@ -413,5 +422,7 @@ export type Page = import("../casa").Page;
413
422
  export type ContextEventHandler = import("../casa").ContextEventHandler;
414
423
  export type ContextEvent = import("../casa").ContextEvent;
415
424
  export type JourneyContextObject = import("../casa").JourneyContextObject;
425
+ export type JourneyContextIdentity = import("../casa").JourneyContextIdentity;
416
426
  export type ExpressRequest = import("express").Request;
417
427
  import ValidationError from "./ValidationError.js";
428
+ //# sourceMappingURL=JourneyContext.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"JourneyContext.d.ts","sourceRoot":"","sources":["../../src/lib/JourneyContext.js"],"names":[],"mappings":"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"}
@@ -1,9 +1,3 @@
1
- "use strict";
2
- var __importDefault = (this && this.__importDefault) || function (mod) {
3
- return (mod && mod.__esModule) ? mod : { "default": mod };
4
- };
5
- Object.defineProperty(exports, "__esModule", { value: true });
6
- exports.validateObjectKey = validateObjectKey;
7
1
  /**
8
2
  * Represents the state of a user's journey through the Plan. It contains
9
3
  * information about:
@@ -12,16 +6,17 @@ exports.validateObjectKey = validateObjectKey;
12
6
  * - Validation errors on that data
13
7
  * - Navigation information about how the user got where they are.
14
8
  */
15
- const lodash_1 = __importDefault(require("lodash"));
16
- const rfdc_1 = __importDefault(require("rfdc"));
17
- const ValidationError_js_1 = __importDefault(require("./ValidationError.js"));
18
- const logger_js_1 = __importDefault(require("./logger.js"));
19
- const utils_js_1 = require("./utils.js");
20
- const context_id_generators_js_1 = require("./context-id-generators.js");
21
- const { isPlainObject, isObject, isEqual } = lodash_1.default; // CommonJS
22
- const log = (0, logger_js_1.default)("lib:journey-context");
23
- const uuid = (0, context_id_generators_js_1.uuid)();
24
- const clone = (0, rfdc_1.default)({ proto: false });
9
+ import isPlainObject from "is-plain-obj";
10
+ import { deepEqual } from "fast-equals";
11
+ import rfdc from "rfdc";
12
+ import NullObject from "./NullObject.js";
13
+ import ValidationError from "./ValidationError.js";
14
+ import logger from "./logger.js";
15
+ import { notProto } from "./utils.js";
16
+ import { uuid as uuidGenerator } from "./context-id-generators.js";
17
+ const log = logger("lib:journey-context");
18
+ const uuid = uuidGenerator();
19
+ const clone = rfdc({ proto: false });
25
20
  /**
26
21
  * @typedef {import("../casa").ContextEventUserInfo} ContextEventUserInfo
27
22
  * @access private
@@ -42,15 +37,19 @@ const clone = (0, rfdc_1.default)({ proto: false });
42
37
  * @typedef {import("../casa").JourneyContextObject} JourneyContextObject
43
38
  * @access private
44
39
  */
40
+ /**
41
+ * @typedef {import("../casa").JourneyContextIdentity} JourneyContextIdentity
42
+ * @access private
43
+ */
45
44
  /**
46
45
  * @typedef {import("express").Request} ExpressRequest
47
46
  * @access private
48
47
  */
49
48
  /**
50
- * @param {any} key Object key to validate
49
+ * @param {string} key Object key to validate
51
50
  * @returns {string} Validated key
52
51
  */
53
- function validateObjectKey(key = "") {
52
+ export function validateObjectKey(key = "") {
54
53
  const keyLower = String.prototype.toLowerCase.call(key);
55
54
  if (keyLower === "prototype" ||
56
55
  keyLower === "__proto__" ||
@@ -59,8 +58,8 @@ function validateObjectKey(key = "") {
59
58
  }
60
59
  return String(key);
61
60
  }
62
- /** @memberof module:@dwp/govuk-casa */
63
- class JourneyContext {
61
+ /** @memberof module:"@dwp/govuk-casa" */
62
+ export default class JourneyContext {
64
63
  // Private properties
65
64
  #data;
66
65
  #validation;
@@ -92,10 +91,11 @@ class JourneyContext {
92
91
  * among a group of contexts stored in the session.
93
92
  *
94
93
  * @param {Record<string, any>} data Entire journey data.
95
- * @param {object} validation Page errors (indexed by waypoint id).
96
- * @param {object} nav Navigation context.
97
- * @param {object} identity Some metadata for identifying this context among
98
- * others.
94
+ * @param {Record<string, ValidationError[] | null>} validation Page errors
95
+ * (indexed by waypoint id).
96
+ * @param {{ language?: string }} nav Navigation context.
97
+ * @param {JourneyContextIdentity} identity Some metadata for identifying this
98
+ * context among others.
99
99
  */
100
100
  constructor(data = {}, validation = {}, nav = {}, identity = {}) {
101
101
  this.#data = data;
@@ -111,7 +111,7 @@ class JourneyContext {
111
111
  * @returns {JourneyContextObject} Plain object.
112
112
  */
113
113
  toObject() {
114
- return Object.assign(Object.create(null), {
114
+ return Object.assign(new NullObject(), {
115
115
  data: clone(this.#data),
116
116
  validation: clone(this.#validation),
117
117
  nav: clone(this.#nav),
@@ -124,16 +124,16 @@ class JourneyContext {
124
124
  * @param {JourneyContextObject} obj Object.
125
125
  * @returns {JourneyContext} Instance.
126
126
  */
127
- static fromObject({ data = Object.create(null), validation = Object.create(null), nav = Object.create(null), identity = Object.create(null), } = {}) {
127
+ static fromObject({ data = new NullObject(), validation = new NullObject(), nav = new NullObject(), identity = new NullObject(), } = {}) {
128
128
  // As we're constructing a JourneyContext from a plain JS object, we need to
129
129
  // ensure any validation errors are instances of ValidationError.
130
- const deserialisedValidation = Object.create(null);
130
+ const deserialisedValidation = new NullObject();
131
131
  for (const [waypoint, errors] of Object.entries(validation)) {
132
132
  let dErrors = errors;
133
133
  if (Array.isArray(errors)) {
134
- dErrors = errors.map((e) => e instanceof ValidationError_js_1.default ? e : new ValidationError_js_1.default(e));
134
+ dErrors = errors.map((e) => e instanceof ValidationError ? e : new ValidationError(e));
135
135
  }
136
- deserialisedValidation[(0, utils_js_1.notProto)(waypoint)] = dErrors;
136
+ deserialisedValidation[notProto(waypoint)] = dErrors;
137
137
  }
138
138
  return new JourneyContext(data, deserialisedValidation, nav, identity);
139
139
  }
@@ -260,7 +260,7 @@ class JourneyContext {
260
260
  throw new SyntaxError(`Errors must be an Array. Received ${Object.prototype.toString.call(errors)}`);
261
261
  }
262
262
  for (const error of errors) {
263
- if (!(error instanceof ValidationError_js_1.default)) {
263
+ if (!(error instanceof ValidationError)) {
264
264
  throw new SyntaxError("Field errors must be a ValidationError");
265
265
  }
266
266
  }
@@ -288,7 +288,7 @@ class JourneyContext {
288
288
  */
289
289
  getValidationErrorsForPageByField(pageId) {
290
290
  const errors = this.getValidationErrorsForPage(pageId);
291
- const obj = Object.create(null);
291
+ const obj = new NullObject();
292
292
  // ESLint disabled as `i` is an integer
293
293
  /* eslint-disable security/detect-object-injection */
294
294
  for (let i = 0, l = errors.length; i < l; i++) {
@@ -335,8 +335,8 @@ class JourneyContext {
335
335
  * @param {string[]} waypoints Waypoints to be removed
336
336
  */
337
337
  purge(waypoints = []) {
338
- const newData = Object.create(null);
339
- const newValidation = Object.create(null);
338
+ const newData = new NullObject();
339
+ const newValidation = new NullObject();
340
340
  const toKeep = Object.keys(this.#data).filter((w) => !waypoints.includes(w));
341
341
  // ESLint disabled as `i` is an integer
342
342
  /* eslint-disable security/detect-object-injection */
@@ -413,13 +413,13 @@ class JourneyContext {
413
413
  logMessage = `Calling waypoint-specific event handler on "${waypoint}"`;
414
414
  runHandler =
415
415
  previousContext.data?.[waypoint] !== undefined &&
416
- !isEqual(this.data?.[waypoint], previousContext.data?.[waypoint]);
416
+ !deepEqual(this.data?.[waypoint], previousContext.data?.[waypoint]);
417
417
  }
418
418
  else if (waypoint && field) {
419
419
  logMessage = `Calling field-specific event handler on "${waypoint} : ${field}"`;
420
420
  runHandler =
421
421
  previousContext.data?.[waypoint]?.[field] !== undefined &&
422
- !isEqual(this.data?.[waypoint]?.[field], previousContext.data?.[waypoint]?.[field]);
422
+ !deepEqual(this.data?.[waypoint]?.[field], previousContext.data?.[waypoint]?.[field]);
423
423
  }
424
424
  if (runHandler) {
425
425
  log.trace(logMessage);
@@ -654,7 +654,7 @@ class JourneyContext {
654
654
  * @throws {TypeError} When session is not a valid type, or context has no ID
655
655
  */
656
656
  static putContext(session, context, options = {}) {
657
- if (!isObject(session)) {
657
+ if (typeof session !== "object" || session === null) {
658
658
  throw new TypeError("Session must be an object");
659
659
  }
660
660
  else if (!(context instanceof JourneyContext)) {
@@ -795,20 +795,17 @@ class JourneyContext {
795
795
  /* eslint-disable security/detect-object-injection */
796
796
  // Unset, with setSkipped(a, false)
797
797
  if (opts === false) {
798
- this.data[waypoint] ??= Object.create(null);
799
- this.data[waypoint].__skipped__ = undefined;
798
+ this.data[waypoint] ??= new NullObject();
800
799
  this.data[waypoint].__skip__ = undefined;
801
800
  }
802
801
  // Set, with setSkipped(a, true) and clear data
803
802
  else if (opts === true) {
804
- this.data[waypoint] = Object.create(null);
805
- this.data[waypoint].__skipped__ = true;
803
+ this.data[waypoint] = new NullObject();
806
804
  this.data[waypoint].__skip__ = { to: null };
807
805
  }
808
806
  // Set, with setSkipped(a, { to: b }) and clear data
809
807
  else if (typeof opts?.to === "string") {
810
- this.data[waypoint] = Object.create(null);
811
- this.data[waypoint].__skipped__ = true;
808
+ this.data[waypoint] = new NullObject();
812
809
  this.data[waypoint].__skip__ = { to: opts.to };
813
810
  }
814
811
  else {
@@ -828,12 +825,10 @@ class JourneyContext {
828
825
  isSkipped(waypoint, opts) {
829
826
  const wpData = this.data[String(waypoint)];
830
827
  if (opts === undefined) {
831
- return wpData?.__skipped__ === true || wpData?.__skip__ !== undefined;
828
+ return wpData?.__skip__ !== undefined;
832
829
  }
833
830
  else if (typeof opts.to === "string") {
834
831
  return wpData?.__skip__?.to === opts.to;
835
832
  }
836
833
  }
837
834
  }
838
- exports.default = JourneyContext;
839
- //# sourceMappingURL=JourneyContext.js.map