@dwp/govuk-casa 9.7.0 → 10.1.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/dist/assets/css/casa.css +1 -1
- package/dist/assets/css/casa.css.map +1 -1
- package/dist/casa.d.ts +90 -44
- package/dist/casa.d.ts.map +1 -0
- package/dist/casa.js +85 -101
- package/dist/core-plugins/edit-snapshot/src/configure.d.ts +1 -0
- package/dist/core-plugins/edit-snapshot/src/configure.d.ts.map +1 -0
- package/dist/core-plugins/edit-snapshot/src/configure.js +7 -14
- package/dist/core-plugins/edit-snapshot/src/index.d.ts +1 -0
- package/dist/core-plugins/edit-snapshot/src/index.d.ts.map +1 -0
- package/dist/core-plugins/edit-snapshot/src/index.js +3 -9
- package/dist/core-plugins/edit-snapshot/src/post-steer-hook.d.ts +2 -1
- package/dist/core-plugins/edit-snapshot/src/post-steer-hook.d.ts.map +1 -0
- package/dist/core-plugins/edit-snapshot/src/post-steer-hook.js +8 -13
- package/dist/core-plugins/edit-snapshot/src/pre-steer-hook.d.ts +2 -1
- package/dist/core-plugins/edit-snapshot/src/pre-steer-hook.d.ts.map +1 -0
- package/dist/core-plugins/edit-snapshot/src/pre-steer-hook.js +13 -18
- package/dist/core-plugins/edit-snapshot/src/utils.d.ts +8 -5
- package/dist/core-plugins/edit-snapshot/src/utils.d.ts.map +1 -0
- package/dist/core-plugins/edit-snapshot/src/utils.js +37 -19
- package/dist/core-plugins/index.d.ts +1 -0
- package/dist/core-plugins/index.d.ts.map +1 -0
- package/dist/core-plugins/index.js +1 -9
- package/dist/lib/CasaTemplateLoader.d.ts +1 -0
- package/dist/lib/CasaTemplateLoader.d.ts.map +1 -0
- package/dist/lib/CasaTemplateLoader.js +2 -6
- package/dist/lib/JourneyContext.d.ts +22 -11
- package/dist/lib/JourneyContext.d.ts.map +1 -0
- package/dist/lib/JourneyContext.js +40 -45
- package/dist/lib/MutableRouter.d.ts +79 -55
- package/dist/lib/MutableRouter.d.ts.map +1 -0
- package/dist/lib/MutableRouter.js +53 -45
- package/dist/lib/NullObject.d.ts +3 -0
- package/dist/lib/NullObject.d.ts.map +1 -0
- package/dist/lib/NullObject.js +3 -0
- package/dist/lib/Plan.d.ts +2 -1
- package/dist/lib/Plan.d.ts.map +1 -0
- package/dist/lib/Plan.js +44 -62
- package/dist/lib/ValidationError.d.ts +2 -1
- package/dist/lib/ValidationError.d.ts.map +1 -0
- package/dist/lib/ValidationError.js +3 -11
- package/dist/lib/ValidatorFactory.d.ts +5 -6
- package/dist/lib/ValidatorFactory.d.ts.map +1 -0
- package/dist/lib/ValidatorFactory.js +4 -12
- package/dist/lib/configuration-ingestor.d.ts +10 -22
- package/dist/lib/configuration-ingestor.d.ts.map +1 -0
- package/dist/lib/configuration-ingestor.js +61 -143
- package/dist/lib/configure.d.ts +2 -1
- package/dist/lib/configure.d.ts.map +1 -0
- package/dist/lib/configure.js +40 -52
- package/dist/lib/constants.d.ts +1 -0
- package/dist/lib/constants.d.ts.map +1 -0
- package/dist/lib/constants.js +8 -12
- package/dist/lib/context-id-generators.d.ts +1 -0
- package/dist/lib/context-id-generators.d.ts.map +1 -0
- package/dist/lib/context-id-generators.js +4 -9
- package/dist/lib/end-session.d.ts +2 -1
- package/dist/lib/end-session.d.ts.map +1 -0
- package/dist/lib/end-session.js +4 -11
- package/dist/lib/field.d.ts +2 -1
- package/dist/lib/field.d.ts.map +1 -0
- package/dist/lib/field.js +11 -21
- package/dist/lib/index.d.ts +1 -0
- package/dist/lib/index.d.ts.map +1 -0
- package/dist/lib/index.js +13 -65
- package/dist/lib/logger.d.ts +25 -2
- package/dist/lib/logger.d.ts.map +1 -0
- package/dist/lib/logger.js +18 -9
- package/dist/lib/mount.d.ts +1 -0
- package/dist/lib/mount.d.ts.map +1 -0
- package/dist/lib/mount.js +10 -16
- package/dist/lib/nunjucks-filters.d.ts +7 -3
- package/dist/lib/nunjucks-filters.d.ts.map +1 -0
- package/dist/lib/nunjucks-filters.js +58 -71
- package/dist/lib/nunjucks.d.ts +4 -4
- package/dist/lib/nunjucks.d.ts.map +1 -0
- package/dist/lib/nunjucks.js +14 -26
- package/dist/lib/utils.d.ts +4 -2
- package/dist/lib/utils.d.ts.map +1 -0
- package/dist/lib/utils.js +14 -28
- package/dist/lib/validators/dateObject.d.ts +1 -0
- package/dist/lib/validators/dateObject.d.ts.map +1 -0
- package/dist/lib/validators/dateObject.js +14 -21
- package/dist/lib/validators/email.d.ts +1 -0
- package/dist/lib/validators/email.d.ts.map +1 -0
- package/dist/lib/validators/email.js +8 -15
- package/dist/lib/validators/inArray.d.ts +1 -0
- package/dist/lib/validators/inArray.d.ts.map +1 -0
- package/dist/lib/validators/inArray.js +8 -15
- package/dist/lib/validators/index.d.ts +1 -0
- package/dist/lib/validators/index.d.ts.map +1 -0
- package/dist/lib/validators/index.js +21 -27
- package/dist/lib/validators/nino.d.ts +1 -0
- package/dist/lib/validators/nino.d.ts.map +1 -0
- package/dist/lib/validators/nino.js +6 -13
- package/dist/lib/validators/postalAddressObject.d.ts +1 -0
- package/dist/lib/validators/postalAddressObject.d.ts.map +1 -0
- package/dist/lib/validators/postalAddressObject.js +12 -19
- package/dist/lib/validators/range.d.ts +1 -0
- package/dist/lib/validators/range.d.ts.map +1 -0
- package/dist/lib/validators/range.js +6 -13
- package/dist/lib/validators/regex.d.ts +1 -0
- package/dist/lib/validators/regex.d.ts.map +1 -0
- package/dist/lib/validators/regex.js +6 -13
- package/dist/lib/validators/required.d.ts +1 -0
- package/dist/lib/validators/required.d.ts.map +1 -0
- package/dist/lib/validators/required.js +9 -17
- package/dist/lib/validators/strlen.d.ts +1 -0
- package/dist/lib/validators/strlen.d.ts.map +1 -0
- package/dist/lib/validators/strlen.js +6 -13
- package/dist/lib/validators/wordCount.d.ts +1 -0
- package/dist/lib/validators/wordCount.d.ts.map +1 -0
- package/dist/lib/validators/wordCount.js +6 -13
- package/dist/lib/waypoint-url.d.ts +3 -2
- package/dist/lib/waypoint-url.d.ts.map +1 -0
- package/dist/lib/waypoint-url.js +12 -19
- package/dist/middleware/body-parser.d.ts +1 -0
- package/dist/middleware/body-parser.d.ts.map +1 -0
- package/dist/middleware/body-parser.js +4 -9
- package/dist/middleware/csrf.d.ts +1 -0
- package/dist/middleware/csrf.d.ts.map +1 -0
- package/dist/middleware/csrf.js +4 -8
- package/dist/middleware/data.d.ts +2 -3
- package/dist/middleware/data.d.ts.map +1 -0
- package/dist/middleware/data.js +23 -25
- package/dist/middleware/gather-fields.d.ts +3 -1
- package/dist/middleware/gather-fields.d.ts.map +1 -0
- package/dist/middleware/gather-fields.js +13 -14
- package/dist/middleware/i18n.d.ts +1 -0
- package/dist/middleware/i18n.d.ts.map +1 -0
- package/dist/middleware/i18n.js +26 -31
- package/dist/middleware/post.d.ts +4 -2
- package/dist/middleware/post.d.ts.map +1 -0
- package/dist/middleware/post.js +6 -11
- package/dist/middleware/pre.d.ts +2 -1
- package/dist/middleware/pre.d.ts.map +1 -0
- package/dist/middleware/pre.js +6 -12
- package/dist/middleware/progress-journey.d.ts +5 -3
- package/dist/middleware/progress-journey.d.ts.map +1 -0
- package/dist/middleware/progress-journey.js +20 -18
- package/dist/middleware/sanitise-fields.d.ts +5 -3
- package/dist/middleware/sanitise-fields.d.ts.map +1 -0
- package/dist/middleware/sanitise-fields.js +25 -17
- package/dist/middleware/serve-first-waypoint.d.ts +1 -0
- package/dist/middleware/serve-first-waypoint.d.ts.map +1 -0
- package/dist/middleware/serve-first-waypoint.js +3 -6
- package/dist/middleware/session.d.ts +15 -0
- package/dist/middleware/session.d.ts.map +1 -0
- package/dist/middleware/session.js +53 -57
- package/dist/middleware/skip-waypoint.d.ts +3 -2
- package/dist/middleware/skip-waypoint.d.ts.map +1 -0
- package/dist/middleware/skip-waypoint.js +15 -14
- package/dist/middleware/steer-journey.d.ts +2 -1
- package/dist/middleware/steer-journey.d.ts.map +1 -0
- package/dist/middleware/steer-journey.js +7 -13
- package/dist/middleware/strip-proxy-path.d.ts +3 -2
- package/dist/middleware/strip-proxy-path.d.ts.map +1 -0
- package/dist/middleware/strip-proxy-path.js +24 -24
- package/dist/middleware/validate-fields.d.ts +7 -4
- package/dist/middleware/validate-fields.d.ts.map +1 -0
- package/dist/middleware/validate-fields.js +22 -11
- package/dist/routes/ancillary.d.ts +1 -0
- package/dist/routes/ancillary.d.ts.map +1 -0
- package/dist/routes/ancillary.js +3 -10
- package/dist/routes/journey.d.ts +7 -2
- package/dist/routes/journey.d.ts.map +1 -0
- package/dist/routes/journey.js +56 -55
- package/dist/routes/static.d.ts +1 -0
- package/dist/routes/static.d.ts.map +1 -0
- package/dist/routes/static.js +15 -23
- package/package.json +30 -36
- package/src/casa.js +63 -31
- package/src/core-plugins/edit-snapshot/src/post-steer-hook.js +1 -0
- package/src/core-plugins/edit-snapshot/src/pre-steer-hook.js +2 -1
- package/src/core-plugins/edit-snapshot/src/utils.js +29 -1
- package/src/lib/JourneyContext.js +31 -28
- package/src/lib/MutableRouter.js +52 -38
- package/src/lib/NullObject.js +4 -0
- package/src/lib/Plan.js +41 -55
- package/src/lib/ValidationError.js +2 -4
- package/src/lib/ValidatorFactory.js +3 -5
- package/src/lib/configuration-ingestor.js +18 -38
- package/src/lib/configure.js +7 -10
- package/src/lib/end-session.js +1 -1
- package/src/lib/field.js +7 -12
- package/src/lib/logger.js +16 -0
- package/src/lib/mount.js +1 -1
- package/src/lib/nunjucks-filters.js +51 -61
- package/src/lib/nunjucks.js +5 -13
- package/src/lib/utils.js +2 -1
- package/src/lib/validators/dateObject.js +3 -4
- package/src/lib/validators/postalAddressObject.js +6 -7
- package/src/lib/validators/required.js +1 -3
- package/src/lib/waypoint-url.js +15 -19
- package/src/middleware/csrf.js +1 -1
- package/src/middleware/data.js +13 -13
- package/src/middleware/gather-fields.js +8 -2
- package/src/middleware/i18n.js +9 -6
- package/src/middleware/post.js +3 -1
- package/src/middleware/pre.js +1 -1
- package/src/middleware/progress-journey.js +8 -0
- package/src/middleware/sanitise-fields.js +17 -2
- package/src/middleware/session.js +53 -12
- package/src/middleware/skip-waypoint.js +8 -1
- package/src/middleware/steer-journey.js +1 -1
- package/src/middleware/strip-proxy-path.js +21 -16
- package/src/middleware/validate-fields.js +19 -0
- package/src/routes/journey.js +18 -8
- package/src/routes/static.js +5 -4
- package/views/casa/layouts/journey.njk +1 -1
- package/views/casa/layouts/main.njk +11 -21
- package/dist/casa.js.map +0 -1
- package/dist/core-plugins/edit-snapshot/src/configure.js.map +0 -1
- package/dist/core-plugins/edit-snapshot/src/index.js.map +0 -1
- package/dist/core-plugins/edit-snapshot/src/post-steer-hook.js.map +0 -1
- package/dist/core-plugins/edit-snapshot/src/pre-steer-hook.js.map +0 -1
- package/dist/core-plugins/edit-snapshot/src/utils.js.map +0 -1
- package/dist/core-plugins/index.js.map +0 -1
- package/dist/lib/CasaTemplateLoader.js.map +0 -1
- package/dist/lib/JourneyContext.js.map +0 -1
- package/dist/lib/MutableRouter.js.map +0 -1
- package/dist/lib/Plan.js.map +0 -1
- package/dist/lib/ValidationError.js.map +0 -1
- package/dist/lib/ValidatorFactory.js.map +0 -1
- package/dist/lib/configuration-ingestor.js.map +0 -1
- package/dist/lib/configure.js.map +0 -1
- package/dist/lib/constants.js.map +0 -1
- package/dist/lib/context-id-generators.js.map +0 -1
- package/dist/lib/dirname.cjs +0 -1
- package/dist/lib/dirname.d.cts +0 -2
- package/dist/lib/end-session.js.map +0 -1
- package/dist/lib/field.js.map +0 -1
- package/dist/lib/index.js.map +0 -1
- package/dist/lib/logger.js.map +0 -1
- package/dist/lib/mount.js.map +0 -1
- package/dist/lib/nunjucks-filters.js.map +0 -1
- package/dist/lib/nunjucks.js.map +0 -1
- package/dist/lib/utils.js.map +0 -1
- package/dist/lib/validators/dateObject.js.map +0 -1
- package/dist/lib/validators/email.js.map +0 -1
- package/dist/lib/validators/inArray.js.map +0 -1
- package/dist/lib/validators/index.js.map +0 -1
- package/dist/lib/validators/nino.js.map +0 -1
- package/dist/lib/validators/postalAddressObject.js.map +0 -1
- package/dist/lib/validators/range.js.map +0 -1
- package/dist/lib/validators/regex.js.map +0 -1
- package/dist/lib/validators/required.js.map +0 -1
- package/dist/lib/validators/strlen.js.map +0 -1
- package/dist/lib/validators/wordCount.js.map +0 -1
- package/dist/lib/waypoint-url.js.map +0 -1
- package/dist/middleware/body-parser.js.map +0 -1
- package/dist/middleware/csrf.js.map +0 -1
- package/dist/middleware/data.js.map +0 -1
- package/dist/middleware/dirname.cjs +0 -1
- package/dist/middleware/dirname.d.cts +0 -2
- package/dist/middleware/gather-fields.js.map +0 -1
- package/dist/middleware/i18n.js.map +0 -1
- package/dist/middleware/post.js.map +0 -1
- package/dist/middleware/pre.js.map +0 -1
- package/dist/middleware/progress-journey.js.map +0 -1
- package/dist/middleware/sanitise-fields.js.map +0 -1
- package/dist/middleware/serve-first-waypoint.js.map +0 -1
- package/dist/middleware/session.js.map +0 -1
- package/dist/middleware/skip-waypoint.js.map +0 -1
- package/dist/middleware/steer-journey.js.map +0 -1
- package/dist/middleware/strip-proxy-path.js.map +0 -1
- package/dist/middleware/validate-fields.js.map +0 -1
- package/dist/mjs/esm-wrapper.js +0 -20
- package/dist/mjs/package.json +0 -3
- package/dist/package.json +0 -3
- package/dist/routes/ancillary.js.map +0 -1
- package/dist/routes/dirname.cjs +0 -1
- package/dist/routes/dirname.d.cts +0 -2
- package/dist/routes/journey.js.map +0 -1
- package/dist/routes/static.js.map +0 -1
- package/src/lib/dirname.cjs +0 -1
- package/src/middleware/dirname.cjs +0 -1
- package/src/routes/dirname.cjs +0 -1
|
@@ -1,2 +1,3 @@
|
|
|
1
|
-
declare
|
|
1
|
+
declare const _default: (req: import("express-serve-static-core").Request<import("express-serve-static-core").ParamsDictionary, any, any, import("qs").ParsedQs, Record<string, any>>, res: import("express-serve-static-core").Response<any, Record<string, any>, number>, next: import("express-serve-static-core").NextFunction) => unknown;
|
|
2
2
|
export default _default;
|
|
3
|
+
//# sourceMappingURL=pre-steer-hook.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pre-steer-hook.d.ts","sourceRoot":"","sources":["../../../../src/core-plugins/edit-snapshot/src/pre-steer-hook.js"],"names":[],"mappings":"yBAYgB,4JAAG,EAAE,mFAAG,EAAE,sDAAI"}
|
|
@@ -1,33 +1,28 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
}
|
|
5
|
-
|
|
6
|
-
|
|
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
|
-
|
|
8
|
+
recoverSnapshot(log, req);
|
|
13
9
|
return req.session.save(next);
|
|
14
10
|
}
|
|
15
|
-
if (!req.casa.editMode &&
|
|
11
|
+
if (!req.casa.editMode && snapshotExists(req)) {
|
|
16
12
|
log.debug("Edit workflow passively canceled. Snapshot will be recovered.");
|
|
17
|
-
|
|
13
|
+
recoverSnapshot(log, req);
|
|
18
14
|
return req.session.save(next);
|
|
19
15
|
}
|
|
20
|
-
if (req.casa.editMode &&
|
|
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[
|
|
19
|
+
req.casa[FLAG_FOR_PURGING] = true;
|
|
24
20
|
return next();
|
|
25
21
|
}
|
|
26
|
-
if (req.casa.editMode && !
|
|
22
|
+
if (req.casa.editMode && !snapshotExists(req)) {
|
|
27
23
|
log.debug("Editing workflow has just started. Will create snapshot.");
|
|
28
|
-
|
|
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:
|
|
3
|
-
export function reachedEditOrigin(log:
|
|
4
|
-
export function createSnapshot(log:
|
|
5
|
-
export function recoverSnapshot(log:
|
|
6
|
-
export function deleteSnapshot(log:
|
|
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
|
-
|
|
2
|
+
import { JourneyContext } from "../../../casa.js";
|
|
3
|
+
import NullObject from "../../../lib/NullObject.js";
|
|
6
4
|
const SESSION_KEY = "casa_edit_snapshots";
|
|
7
|
-
|
|
8
|
-
|
|
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
|
-
|
|
13
|
-
|
|
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
|
-
|
|
19
|
-
|
|
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] ??=
|
|
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
|
-
|
|
26
|
-
|
|
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
|
-
|
|
30
|
-
|
|
43
|
+
JourneyContext.putContext(req.session, req.casa.journeyContext);
|
|
44
|
+
deleteSnapshot(log, req);
|
|
31
45
|
};
|
|
32
|
-
|
|
33
|
-
|
|
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
|
-
|
|
38
|
-
|
|
55
|
+
/** @typedef {import("../../../lib/logger.js").CASADebugLogger} CASADebugLogger */
|
|
56
|
+
/** @typedef {import("express").Request} ExpressRequest */
|
|
@@ -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
|
-
|
|
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
|
-
|
|
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
|
|
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 {
|
|
30
|
+
* @param {string} key Object key to validate
|
|
27
31
|
* @returns {string} Validated key
|
|
28
32
|
*/
|
|
29
|
-
export function validateObjectKey(key?:
|
|
30
|
-
/** @memberof module
|
|
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 {
|
|
218
|
-
*
|
|
219
|
-
* @param {
|
|
220
|
-
*
|
|
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?:
|
|
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():
|
|
233
|
-
get nav():
|
|
234
|
-
|
|
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":"AAuBA;;;GAGG;AAEH;;;GAGG;AAEH;;;GAGG;AAEH;;;GAGG;AAEH;;;GAGG;AAEH;;;GAGG;AAEH;;;GAGG;AAEH;;;GAGG;AACH,wCAHW,MAAM,GACJ,MAAM,CAYlB;AAED,yCAAyC;AACzC;IAcE,kCAAsC;IAEtC,qBAAqB;IACrB,6BADW,MAAM,CAC2C;IAE5D,qBAAqB;IACrB,6BADW,MAAM,CACyC;IAkD1D;;;;;OAKG;IACH,yDAHW,oBAAoB,GAClB,cAAc,CAwB1B;IA0VD;;;;;;;OAOG;IACH,oCAHW,cAAc,GACZ,cAAc,CAQ1B;IAED;;;;;;;;;OASG;IACH,4BALW,cAAc,QACd,cAAc,GACZ,cAAc,CAY1B;IAWD;;;;;OAKG;IACH,iCAHW,MAAM,GACJ,IAAI,CAwBhB;IAED;;;;;;;;;;OAUG;IACH,6BALW,MAAM,GACJ,MAAM,CAgBlB;IAED;;;;;;;;;;OAUG;IACH,+BAJW,cAAc,GACZ,MAAM,CAsDlB;IAED;;;;;;OAMG;IACH,kCAHW,MAAM,GACJ,cAAc,CAO1B;IAED;;;;;;OAMG;IACH,+BAJW,MAAM,MACN,MAAM,GACJ,cAAc,CAW1B;IAED;;;;;;OAMG;IACH,iCAJW,MAAM,QACN,MAAM,GACJ,cAAc,CAY1B;IAED;;;;;;OAMG;IACH,iCAJW,MAAM,OACN,MAAM,GACJ,cAAc,EAAE,CAW5B;IAED;;;;;OAKG;IACH,4BAHW,MAAM,SAWhB;IAED;;;;;;;;;;OAUG;IACH,2BARW,MAAM,WACN,cAAc,YAEtB;QAAgD,QAAQ;KAExD,GAAU,IAAI,CAoChB;IAED;;;;;;OAMG;IACH,8BAJW,MAAM,WACN,cAAc,GACZ,IAAI,CAMhB;IAED;;;;;;OAMG;IACH,kCAJW,MAAM,MACN,MAAM,GACJ,IAAI,CAShB;IAED;;;;;;OAMG;IACH,oCAJW,MAAM,QACN,MAAM,GACJ,IAAI,CAOhB;IAED;;;;;;OAMG;IACH,oCAJW,MAAM,OACN,MAAM,GACJ,IAAI,CAMhB;IAED;;;;;OAKG;IACH,+BAHW,MAAM,GACJ,IAAI,CAMhB;IAED;;;;;;;;;OASG;IACH,sCAHW,cAAc,GACZ,cAAc,CAqC1B;IA/zBD;;;;;;;;;;;;;;;;;;;;;;;;OAwBG;IACH,mBAPW,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,eACnB,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,IAAI,CAAC,QAExC;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,aACrB,sBAAsB,EAUhC;IAED;;;;OAIG;IACH,YAFa,oBAAoB,CAShC;IAgCD,uCAKC;IAMD,qCAEC;IAND,gCAEC;IAMD,2DAEC;IAED;mBA5EwB,MAAM;MA8E7B;IAED,yDAEC;IAED;;;;;;OAMG;IACH,qBAJW,MAAM,GAAG,IAAI,GACX,MAAM,CAalB;IAED;;;;OAIG;IACH,WAFa,MAAM,CAIlB;IAED;;;;;OAKG;IACH,cAHW,MAAM,GACJ,cAAc,CAK1B;IAED;;;;;;;OAOG;IACH,qBALW,MAAM,GAAG,IAAI,eACb,MAAM,GACJ,cAAc,CAe1B;IAED;;;;OAIG;IACH,uBAFa,MAAM,CAIlB;IAED;;;;;;;OAOG;IACH,qCAHW,MAAM,GACJ,cAAc,CAO1B;IAED;;;;;;;;OAQG;IACH,qCAHW,MAAM,GACJ,cAAc,CAK1B;IAED;;;;;;;OAOG;IACH,mCALW,MAAM,WACN,eAAe,EAAE,GACf,cAAc,CAmB1B;IAED;;;;;;OAMG;IACH,mCAHW,MAAM,GACJ,eAAe,EAAE,CAI7B;IAED;;;;;;;;OAQG;IACH,0CAJW,MAAM,GACJ,MAAM,CAkBlB;IAED;;;;;;OAMG;IACH,mCAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;;OAKG;IACH,iCAHW,MAAM,GACJ,cAAc,CAK1B;IAED;;;;;OAKG;IACH,oBAHW,MAAM,GACJ,OAAO,CAInB;IAED;;;;OAIG;IACH,kBAFW,MAAM,EAAE,QAkBlB;IAED;;;;;;OAMG;IACH,uBAHW,MAAM,EAAE,GACN,IAAI,CAQhB;IAED;;;;;;;;;;;OAWG;IACH,0BAHW,YAAY,EAAE,GACZ,cAAc,CAM1B;IAED;;;;;;;;;;;OAWG;IACH,kDALG;QAAuB,KAAK,EAApB,MAAM;QACS,OAAO,EAAtB,MAAM;QACiC,QAAQ;KACvD,GAAU,cAAc,CAqD1B;IAyCD;;;;OAIG;IACH,aAFa,OAAO,CAInB;IA+WD;;;;;;OAMG;IACH,qBAJW,MAAM,QACN,OAAO,GAAG,MAAM,QAyB1B;IAED;;;;;;;;OAQG;IACH,oBANW,MAAM,QAEd;QAAqB,EAAE,EAAf,MAAM;KACd,GAAU,OAAO,CAWnB;;CACF;mCA37BY,OAAO,SAAS,EAAE,oBAAoB;mBAKtC,OAAO,SAAS,EAAE,IAAI;kCAKtB,OAAO,SAAS,EAAE,mBAAmB;2BAKrC,OAAO,SAAS,EAAE,YAAY;mCAK9B,OAAO,SAAS,EAAE,oBAAoB;qCAKtC,OAAO,SAAS,EAAE,sBAAsB;6BAKxC,OAAO,SAAS,EAAE,OAAO;4BA1CV,sBAAsB"}
|
|
@@ -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
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
const
|
|
24
|
-
const
|
|
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 {
|
|
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
|
|
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 {
|
|
96
|
-
*
|
|
97
|
-
* @param {
|
|
98
|
-
*
|
|
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(
|
|
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 =
|
|
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 =
|
|
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
|
|
134
|
+
dErrors = errors.map((e) => e instanceof ValidationError ? e : new ValidationError(e));
|
|
135
135
|
}
|
|
136
|
-
deserialisedValidation[
|
|
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
|
|
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 =
|
|
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 =
|
|
339
|
-
const newValidation =
|
|
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
|
-
!
|
|
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
|
-
!
|
|
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 (
|
|
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] ??=
|
|
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] =
|
|
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] =
|
|
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?.
|
|
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
|