hof 21.0.20-axios-beta → 21.1.0-deindex-toggle-beta
Sign up to get free protection for your applications and to get access to all the features.
- package/CHANGELOG.md +21 -0
- package/codeReviewChecklist.md +22 -0
- package/config/hof-defaults.js +9 -1
- package/frontend/govuk-template/build/govuk_template.html +3 -4
- package/frontend/govuk-template/govuk_template_generated.html +3 -4
- package/frontend/template-mixins/mixins/template-mixins.js +1 -0
- package/frontend/template-mixins/partials/forms/checkbox.html +5 -0
- package/frontend/template-mixins/partials/forms/input-text-group.html +1 -1
- package/frontend/template-mixins/partials/forms/select.html +6 -6
- package/frontend/template-mixins/partials/forms/textarea-group.html +1 -1
- package/frontend/template-partials/views/partials/head.html +8 -10
- package/index.js +2 -0
- package/lib/deindex.js +17 -0
- package/lib/ga-tag.js +22 -13
- package/model/apis/axios-settings.js +17 -5
- package/model/apis/html-to-pdf-converter.js +10 -8
- package/model/index.js +93 -79
- package/package.json +6 -8
- package/pull_request.md +16 -0
- package/sandbox/package.json +1 -1
- package/sandbox/public/css/app.css +10 -0
- package/sandbox/public/js/bundle.js +1130 -965
- package/sandbox/yarn.lock +14 -9
- package/.nyc_output/9651d42a-59d8-48e6-949c-655d9fa6db21.json +0 -1
- package/.nyc_output/processinfo/9651d42a-59d8-48e6-949c-655d9fa6db21.json +0 -1
- package/.nyc_output/processinfo/index.json +0 -1
package/CHANGELOG.md
CHANGED
@@ -1,3 +1,24 @@
|
|
1
|
+
## 2024-07-22, Version 21.0.0 (Stable), @Rhodine-orleans-lindsay
|
2
|
+
* Replaces deprecated request module with axios
|
3
|
+
- refactors the hof model and apis to use axios instead of request
|
4
|
+
* Updates patch and minor dependency versions
|
5
|
+
|
6
|
+
## 2024-04-24, Version 20.5.0 (Stable), @mislam987
|
7
|
+
* Add hint property to checkboxes to align with govuk design guidelines
|
8
|
+
|
9
|
+
## 2024-02-29, Version 20.4.0 (Stable), @sulthan-ahmed
|
10
|
+
* Update version of govuk-frontend to 3.15
|
11
|
+
- this adds the new crown for the King
|
12
|
+
- this supports a lot of changes from the govuk design system
|
13
|
+
* Adds support for Google tag manager
|
14
|
+
* Fixes accessibility issues
|
15
|
+
* Sandbox area for testing hof changes
|
16
|
+
* Updates patch and minor versions including
|
17
|
+
- libphonenumber to 1.9.44
|
18
|
+
- nodemailer to 6.9.9
|
19
|
+
- ip to 1.1.9
|
20
|
+
- es5-ext to 0.10.63
|
21
|
+
|
1
22
|
## 2020-06-02, Version 16.0.0 (Stable), @andymoody
|
2
23
|
* Update version of helmet to 3.22.0
|
3
24
|
* Update version of i18n-future to 2.0.0
|
@@ -0,0 +1,22 @@
|
|
1
|
+
# HOF code review checklist v1.0
|
2
|
+
|
3
|
+
This is a general guide on what you should check for when reviewing another team member's code.
|
4
|
+
|
5
|
+
## Fundamental checks
|
6
|
+
- [ ] Check for code format
|
7
|
+
- [ ] Check for duplicate code
|
8
|
+
- [ ] Check for if there are existing components in the framework already
|
9
|
+
- [ ] Check for copy and paste
|
10
|
+
- [ ] Check code readability (if the class, function and variable names are making sense, avoid using acronyms, check for simplicity, avoid complexity)
|
11
|
+
- [ ] Check if user inputs are sanitized
|
12
|
+
- [ ] Check if errors are handled
|
13
|
+
- [ ] Check if null / undefined values are checked before actions are performed on a variable (May not always be necessary)
|
14
|
+
- [ ] Check for performance (are there logic in loops that doesn't have to be executed each time? Could some tasks be added to a queue and performed later? etc)
|
15
|
+
|
16
|
+
## Advanced (optional if the ticket is low / medium impact) checks
|
17
|
+
- [ ] Check if the code is following SOLID principle, code maintainability
|
18
|
+
- [ ] Check if none functional requirements are needed (for example, should an audit log be stored for an action performed)
|
19
|
+
- [ ] Check the performance and efficiency of the tests
|
20
|
+
- [ ] Check to avoid the use of operations that only work in javascript (e.g. using && to return the object on the right if the statement on the left is true)
|
21
|
+
|
22
|
+
|
package/config/hof-defaults.js
CHANGED
@@ -22,7 +22,15 @@ const defaults = {
|
|
22
22
|
env: process.env.NODE_ENV || 'development',
|
23
23
|
gaTagId: process.env.GA_TAG || 'Test-GA-Tag',
|
24
24
|
ga4TagId: process.env.GA_4_TAG,
|
25
|
-
|
25
|
+
// added to allow support for multiple HOF forms using GTM to customize how they track page views
|
26
|
+
gtm: {
|
27
|
+
tagId: process.env.GTM_TAG || false,
|
28
|
+
config: {},
|
29
|
+
composePageName: function (page, convertPage) {
|
30
|
+
return convertPage(page);
|
31
|
+
}
|
32
|
+
},
|
33
|
+
deIndexForm: process.env.DEINDEX_FORM || 'false',
|
26
34
|
gaCrossDomainTrackingTagId: process.env.GDS_CROSS_DOMAIN_GA_TAG,
|
27
35
|
loglevel: process.env.LOG_LEVEL || 'info',
|
28
36
|
ignoreMiddlewareLogs: ['/healthz'],
|
@@ -41,13 +41,12 @@
|
|
41
41
|
<a href="{{{ homepageUrl }}}" title="{{ logoLinkTitle }}" id="logo" class="govuk-header__link govuk-header__link--homepage" target="_blank" data-module="track-click" data-track-category="homeLinkClicked" data-track-action="homeHeader">
|
42
42
|
<span class="govuk-header__logotype">
|
43
43
|
<!--[if gt IE 8]><!-->
|
44
|
-
<svg aria-hidden="true" focusable="false" class="govuk-header__logotype-crown" xmlns="http://www.w3.org/2000/svg" viewBox="0 0
|
45
|
-
<path fill="currentColor" fill-rule="evenodd"
|
44
|
+
<svg aria-hidden="true" focusable="false" class="govuk-header__logotype-crown" xmlns="http://www.w3.org/2000/svg\" viewBox="0 0 32 30" height="30" width="32">
|
45
|
+
<path fill="currentColor" fill-rule="evenodd" d="M22.6 10.4c-1 .4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s-.1 2-1 2.4m-5.9 6.7c-.9.4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s-.1 2-1 2.4m10.8-3.7c-1 .4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s0 2-1 2.4m3.3 4.8c-1 .4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s-.1 2-1 2.4M17 4.7l2.3 1.2V2.5l-2.3.7-.2-.2.9-3h-3.4l.9 3-.2.2c-.1.1-2.3-.7-2.3-.7v3.4L15 4.7c.1.1.1.2.2.2l-1.3 4c-.1.2-.1.4-.1.6 0 1.1.8 2 1.9 2.2h.7c1-.2 1.9-1.1 1.9-2.1 0-.2 0-.4-.1-.6l-1.3-4c-.1-.2 0-.2.1-.3m-7.6 5.7c.9.4 2-.1 2.4-1 .4-.9-.1-2-1-2.4-.9-.4-2 .1-2.4 1s0 2 1 2.4m-5 3c.9.4 2-.1 2.4-1 .4-.9-.1-2-1-2.4-.9-.4-2 .1-2.4 1s.1 2 1 2.4m-3.2 4.8c.9.4 2-.1 2.4-1 .4-.9-.1-2-1-2.4-.9-.4-2 .1-2.4 1s0 2 1 2.4m14.8 11c4.4 0 8.6.3 12.3.8 1.1-4.5 2.4-7 3.7-8.8l-2.5-.9c.2 1.3.3 1.9 0 2.7-.4-.4-.8-1.1-1.1-2.3l-1.2 4c.7-.5 1.3-.8 2-.9-1.1 2.5-2.6 3.1-3.5 3-1.1-.2-1.7-1.2-1.5-2.1.3-1.2 1.5-1.5 2.1-.1 1.1-2.3-.8-3-2-2.3 1.9-1.9 2.1-3.5.6-5.6-2.1 1.6-2.1 3.2-1.2 5.5-1.2-1.4-3.2-.6-2.5 1.6.9-1.4 2.1-.5 1.9.8-.2 1.1-1.7 2.1-3.5 1.9-2.7-.2-2.9-2.1-2.9-3.6.7-.1 1.9.5 2.9 1.9l.4-4.3c-1.1 1.1-2.1 1.4-3.2 1.4.4-1.2 2.1-3 2.1-3h-5.4s1.7 1.9 2.1 3c-1.1 0-2.1-.2-3.2-1.4l.4 4.3c1-1.4 2.2-2 2.9-1.9-.1 1.5-.2 3.4-2.9 3.6-1.9.2-3.4-.8-3.5-1.9-.2-1.3 1-2.2 1.9-.8.7-2.3-1.2-3-2.5-1.6.9-2.2.9-3.9-1.2-5.5-1.5 2-1.3 3.7.6 5.6-1.2-.7-3.1 0-2 2.3.6-1.4 1.8-1.1 2.1.1.2.9-.3 1.9-1.5 2.1-.9.2-2.4-.5-3.5-3 .6 0 1.2.3 2 .9l-1.2-4c-.3 1.1-.7 1.9-1.1 2.3-.3-.8-.2-1.4 0-2.7l-2.9.9C1.3 23 2.6 25.5 3.7 30c3.7-.5 7.9-.8 12.3-.8\"></path>
|
46
46
|
</svg>
|
47
47
|
<!--<![endif]-->
|
48
|
-
<!--<![endif]-->
|
49
48
|
<!--[if IE 8]>
|
50
|
-
<img src="{{ assetPath }}images/govuk-logotype-crown.png" class="govuk-header__logotype-crown-fallback-image" width="
|
49
|
+
<img src="{{ assetPath }}images/govuk-logotype-tudor-crown.png" class="govuk-header__logotype-crown-fallback-image" width="32" height="30" alt="">
|
51
50
|
<![endif]-->
|
52
51
|
</span>
|
53
52
|
<span class="govuk-header__logotype-text">
|
@@ -41,13 +41,12 @@
|
|
41
41
|
<a href="{{$homepageUrl}}https://www.gov.uk{{/homepageUrl}}" title="{{$logoLinkTitle}}Go to the GOV.UK homepage{{/logoLinkTitle}}" id="logo" class="govuk-header__link govuk-header__link--homepage" target="_blank" data-module="track-click" data-track-category="homeLinkClicked" data-track-action="homeHeader">
|
42
42
|
<span class="govuk-header__logotype">
|
43
43
|
<!--[if gt IE 8]><!-->
|
44
|
-
<svg aria-hidden="true" focusable="false" class="govuk-header__logotype-crown" xmlns="http://www.w3.org/2000/svg" viewBox="0 0
|
45
|
-
<path fill="currentColor" fill-rule="evenodd"
|
44
|
+
<svg aria-hidden="true" focusable="false" class="govuk-header__logotype-crown" xmlns="http://www.w3.org/2000/svg\" viewBox="0 0 32 30" height="30" width="32">
|
45
|
+
<path fill="currentColor" fill-rule="evenodd" d="M22.6 10.4c-1 .4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s-.1 2-1 2.4m-5.9 6.7c-.9.4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s-.1 2-1 2.4m10.8-3.7c-1 .4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s0 2-1 2.4m3.3 4.8c-1 .4-2-.1-2.4-1-.4-.9.1-2 1-2.4.9-.4 2 .1 2.4 1s-.1 2-1 2.4M17 4.7l2.3 1.2V2.5l-2.3.7-.2-.2.9-3h-3.4l.9 3-.2.2c-.1.1-2.3-.7-2.3-.7v3.4L15 4.7c.1.1.1.2.2.2l-1.3 4c-.1.2-.1.4-.1.6 0 1.1.8 2 1.9 2.2h.7c1-.2 1.9-1.1 1.9-2.1 0-.2 0-.4-.1-.6l-1.3-4c-.1-.2 0-.2.1-.3m-7.6 5.7c.9.4 2-.1 2.4-1 .4-.9-.1-2-1-2.4-.9-.4-2 .1-2.4 1s0 2 1 2.4m-5 3c.9.4 2-.1 2.4-1 .4-.9-.1-2-1-2.4-.9-.4-2 .1-2.4 1s.1 2 1 2.4m-3.2 4.8c.9.4 2-.1 2.4-1 .4-.9-.1-2-1-2.4-.9-.4-2 .1-2.4 1s0 2 1 2.4m14.8 11c4.4 0 8.6.3 12.3.8 1.1-4.5 2.4-7 3.7-8.8l-2.5-.9c.2 1.3.3 1.9 0 2.7-.4-.4-.8-1.1-1.1-2.3l-1.2 4c.7-.5 1.3-.8 2-.9-1.1 2.5-2.6 3.1-3.5 3-1.1-.2-1.7-1.2-1.5-2.1.3-1.2 1.5-1.5 2.1-.1 1.1-2.3-.8-3-2-2.3 1.9-1.9 2.1-3.5.6-5.6-2.1 1.6-2.1 3.2-1.2 5.5-1.2-1.4-3.2-.6-2.5 1.6.9-1.4 2.1-.5 1.9.8-.2 1.1-1.7 2.1-3.5 1.9-2.7-.2-2.9-2.1-2.9-3.6.7-.1 1.9.5 2.9 1.9l.4-4.3c-1.1 1.1-2.1 1.4-3.2 1.4.4-1.2 2.1-3 2.1-3h-5.4s1.7 1.9 2.1 3c-1.1 0-2.1-.2-3.2-1.4l.4 4.3c1-1.4 2.2-2 2.9-1.9-.1 1.5-.2 3.4-2.9 3.6-1.9.2-3.4-.8-3.5-1.9-.2-1.3 1-2.2 1.9-.8.7-2.3-1.2-3-2.5-1.6.9-2.2.9-3.9-1.2-5.5-1.5 2-1.3 3.7.6 5.6-1.2-.7-3.1 0-2 2.3.6-1.4 1.8-1.1 2.1.1.2.9-.3 1.9-1.5 2.1-.9.2-2.4-.5-3.5-3 .6 0 1.2.3 2 .9l-1.2-4c-.3 1.1-.7 1.9-1.1 2.3-.3-.8-.2-1.4 0-2.7l-2.9.9C1.3 23 2.6 25.5 3.7 30c3.7-.5 7.9-.8 12.3-.8\"></path>
|
46
46
|
</svg>
|
47
47
|
<!--<![endif]-->
|
48
|
-
<!--<![endif]-->
|
49
48
|
<!--[if IE 8]>
|
50
|
-
<img src="{{govukAssetPath}}images/govuk-logotype-crown.png" class="govuk-header__logotype-crown-fallback-image" width="
|
49
|
+
<img src="{{govukAssetPath}}images/govuk-logotype-tudor-crown.png" class="govuk-header__logotype-crown-fallback-image" width="32" height="30" alt="">
|
51
50
|
<![endif]-->
|
52
51
|
</span>
|
53
52
|
<span class="govuk-header__logotype-text">
|
@@ -319,6 +319,7 @@ module.exports = function (options) {
|
|
319
319
|
error: this.errors && this.errors[key],
|
320
320
|
invalid: this.errors && this.errors[key] && opts.required,
|
321
321
|
label: t(fieldLabel || 'fields.' + key + '.label'),
|
322
|
+
hint: conditionalTranslate(getTranslationKey(field, key, 'hint')),
|
322
323
|
selected: selected,
|
323
324
|
className: classNames(field) || 'govuk-label govuk-checkboxes__label',
|
324
325
|
child: field.child,
|
@@ -6,6 +6,11 @@
|
|
6
6
|
{{{label}}}
|
7
7
|
{{#error}}<span class="visuallyhidden">{{error.message}}</span>{{/error}}
|
8
8
|
</label>
|
9
|
+
{{#hint}}
|
10
|
+
<div id="{{key}}-hint" class="govuk-hint govuk-checkboxes__hint">
|
11
|
+
{{hint}}
|
12
|
+
</div>
|
13
|
+
{{/hint}}
|
9
14
|
</div>
|
10
15
|
{{#renderChild}}{{/renderChild}}
|
11
16
|
</div>
|
@@ -1,5 +1,5 @@
|
|
1
1
|
<div id="{{id}}-group" class="{{#compound}} form-group-compound{{/compound}}{{#formGroupClassName}}{{formGroupClassName}}{{/formGroupClassName}}{{#error}} govuk-form-group--error{{/error}}">
|
2
|
-
{{#isPageHeading}}<h1 class="govuk-label-wrapper">{{/isPageHeading}}<label for="{{id}}" class="{{labelClassName}}{{#isPageHeading}}govuk-label--l{{/isPageHeading}}">
|
2
|
+
{{#isPageHeading}}<h1 class="govuk-label-wrapper">{{/isPageHeading}}<label for="{{id}}" class="{{labelClassName}} {{#isPageHeading}}govuk-label--l{{/isPageHeading}}">
|
3
3
|
{{{label}}}
|
4
4
|
</label>
|
5
5
|
{{#isPageHeading}}</h1>{{/isPageHeading}}
|
@@ -1,14 +1,14 @@
|
|
1
1
|
<div id="{{id}}-group" class="{{#compound}} form-group-compound{{/compound}}{{#formGroupClassName}} {{formGroupClassName}}{{/formGroupClassName}}{{#error}} govuk-form-group--error{{/error}}">
|
2
2
|
{{#isPageHeading}}<h1 class="govuk-label-wrapper">{{/isPageHeading}}<label for="{{id}}" class="{{labelClassName}}{{#isPageHeading}}govuk-label--l{{/isPageHeading}}">
|
3
3
|
{{{label}}}
|
4
|
-
{{#hint}}<span {{$hintId}}id="{{hintId}}" {{/hintId}}class="govuk-hint">{{hint}}</span>{{/hint}}
|
5
|
-
{{#error}}
|
6
|
-
<p class="govuk-error-message">
|
7
|
-
<span class="govuk-visually-hidden">Error:</span> {{error.message}}
|
8
|
-
</p>
|
9
|
-
{{/error}}
|
10
4
|
</label>
|
11
5
|
{{#isPageHeading}}</h1>{{/isPageHeading}}
|
6
|
+
{{#hint}}<div {{$hintId}}id="{{hintId}}" {{/hintId}}class="govuk-hint">{{hint}}</div>{{/hint}}
|
7
|
+
{{#error}}
|
8
|
+
<p class="govuk-error-message">
|
9
|
+
<span class="govuk-visually-hidden">Error:</span> {{error.message}}
|
10
|
+
</p>
|
11
|
+
{{/error}}
|
12
12
|
<select id="{{id}}" class="govuk-select{{#className}} {{className}}{{/className}}{{#error}} govuk-select--error{{/error}}" name="{{id}}" aria-required="{{required}}">
|
13
13
|
{{#options}}
|
14
14
|
<option value="{{value}}" {{#selected}}selected{{/selected}}>{{label}}</option>
|
@@ -4,7 +4,7 @@
|
|
4
4
|
<div id="{{id}}-group" class="govuk-form-group {{#formGroupClassName}}{{formGroupClassName}}{{/formGroupClassName}}{{#error}} govuk-form-group--error{{/error}}">
|
5
5
|
{{#isPageHeading}}<h1 class="govuk-label-wrapper">{{/isPageHeading}}
|
6
6
|
<label for="{{id}}"
|
7
|
-
class="{{labelClassName}}{{#isPageHeading}}govuk-label--l{{/isPageHeading}}">
|
7
|
+
class="{{labelClassName}} {{#isPageHeading}}govuk-label--l{{/isPageHeading}}">
|
8
8
|
{{{label}}}
|
9
9
|
{{#error}}
|
10
10
|
<p id="{{id}}-error" class="govuk-error-message">
|
@@ -1,18 +1,13 @@
|
|
1
1
|
{{#gtmTagId}}
|
2
2
|
{{#cookiesAccepted}}
|
3
|
-
|
4
|
-
<!-- Google Tag Manager Data Layer for ETA -->
|
3
|
+
<!-- Google Tag Manager Data Layer -->
|
5
4
|
<script {{#nonce}}nonce="{{nonce}}"{{/nonce}}>
|
6
5
|
var dataLayer = window.dataLayer || [];
|
7
|
-
dataLayer.push(
|
8
|
-
|
9
|
-
|
10
|
-
'applicationType': 'ETA | Customer Contact',
|
11
|
-
'environmentType': '{{environmentType}}'
|
12
|
-
});
|
6
|
+
dataLayer.push(
|
7
|
+
{{{gtmConfig}}}
|
8
|
+
);
|
13
9
|
</script>
|
14
|
-
<!-- End Google Tag Manager Data Layer
|
15
|
-
{{/isETA}}
|
10
|
+
<!-- End Google Tag Manager Data Layer -->
|
16
11
|
|
17
12
|
<!-- Google Tag Manager -->
|
18
13
|
<script {{#nonce}}nonce="{{nonce}}"{{/nonce}}>
|
@@ -26,5 +21,8 @@
|
|
26
21
|
{{/cookiesAccepted}}
|
27
22
|
{{/gtmTagId}}
|
28
23
|
|
24
|
+
{{#deIndex}}
|
25
|
+
<meta name="robots" content="noindex">
|
26
|
+
{{/deIndex}}
|
29
27
|
<meta name="format-detection" content="telephone=no">
|
30
28
|
<link rel="stylesheet" href="{{assetPath}}/css/app.css">
|
package/index.js
CHANGED
@@ -14,6 +14,7 @@ const router = require('./lib/router');
|
|
14
14
|
const health = require('./lib/health');
|
15
15
|
const serveStatic = require('./lib/serve-static');
|
16
16
|
const gaTagSetup = require('./lib/ga-tag');
|
17
|
+
const deIndexer = require('./lib/deindex');
|
17
18
|
const sessionStore = require('./lib/sessions');
|
18
19
|
const settings = require('./lib/settings');
|
19
20
|
const defaults = require('./config/hof-defaults');
|
@@ -198,6 +199,7 @@ function bootstrap(options) {
|
|
198
199
|
serveStatic(app, config);
|
199
200
|
settings(app, config);
|
200
201
|
gaTagSetup(app, config);
|
202
|
+
deIndexer(app, config);
|
201
203
|
|
202
204
|
const sessions = sessionStore(app, config);
|
203
205
|
app.use('/healthz', health(sessions));
|
package/lib/deindex.js
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
module.exports = (app, config) => {
|
4
|
+
const deIndex = config.deIndexForm;
|
5
|
+
|
6
|
+
app.use((req, res, next) => {
|
7
|
+
|
8
|
+
// Preparing common res.locals properties
|
9
|
+
const properties = {
|
10
|
+
deIndex: deIndex
|
11
|
+
};
|
12
|
+
res.locals = Object.assign(res.locals, properties);
|
13
|
+
next();
|
14
|
+
});
|
15
|
+
|
16
|
+
return app;
|
17
|
+
}
|
package/lib/ga-tag.js
CHANGED
@@ -52,26 +52,35 @@ const setupPageMap = routes => {
|
|
52
52
|
module.exports = (app, config) => {
|
53
53
|
const gaTagId = config.gaTagId;
|
54
54
|
const ga4TagId = config.ga4TagId;
|
55
|
-
const
|
56
|
-
const environmentType = config.environmentType ? config.environmentType : 'dev';
|
55
|
+
const gtm = config.gtm;
|
57
56
|
const gaCrossDomainTrackingTagId = config.gaCrossDomainTrackingTagId;
|
58
57
|
const routes = config.routes;
|
59
58
|
|
60
|
-
if (gaTagId || ga4TagId) {
|
59
|
+
if (gaTagId || ga4TagId || gtm.tagId) {
|
61
60
|
const pageMap = setupPageMap(routes);
|
62
61
|
|
63
62
|
app.use((req, res, next) => {
|
64
63
|
const page = pageView(req.path, pageMap);
|
65
|
-
|
66
|
-
res.locals
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
64
|
+
|
65
|
+
// Preparing common res.locals properties
|
66
|
+
const properties = {
|
67
|
+
gaAllowDebug: config.env === 'development',
|
68
|
+
gaTagId: gaTagId,
|
69
|
+
ga4TagId: ga4TagId,
|
70
|
+
gaCrossDomainTrackingTagId: gaCrossDomainTrackingTagId,
|
71
|
+
'ga-id': gaTagId,
|
72
|
+
'ga-page': page
|
73
|
+
};
|
74
|
+
|
75
|
+
// Adding extra properties if a GTM TAG is available
|
76
|
+
if (gtm.tagId) {
|
77
|
+
gtm.config.pageName = gtm.composePageName(page, convertToGTMPage);
|
78
|
+
Object.assign(properties, {
|
79
|
+
gtmConfig: JSON.stringify(gtm.config),
|
80
|
+
gtmTagId: gtm.tagId
|
81
|
+
});
|
82
|
+
}
|
83
|
+
res.locals = Object.assign(res.locals, properties);
|
75
84
|
next();
|
76
85
|
});
|
77
86
|
}
|
@@ -1,9 +1,21 @@
|
|
1
1
|
'use strict';
|
2
|
-
const
|
2
|
+
const { format } = require('url'); // Destructure 'format' from 'url' module
|
3
3
|
|
4
|
-
module.exports = (settings, body) => {
|
5
|
-
|
6
|
-
|
7
|
-
|
4
|
+
module.exports = (settings = {}, body = null) => {
|
5
|
+
if (typeof settings !== 'object' || settings === null) {
|
6
|
+
throw new TypeError('settings must be a non-null object');
|
7
|
+
}
|
8
|
+
|
9
|
+
const {
|
10
|
+
uri,
|
11
|
+
url,
|
12
|
+
body: settingsBody,
|
13
|
+
data: settingsData,
|
14
|
+
...restSettings
|
15
|
+
} = settings;
|
16
|
+
|
17
|
+
return Object.assign({}, restSettings, {
|
18
|
+
url: uri || url || format(settings),
|
19
|
+
data: settingsBody || body || settingsData
|
8
20
|
});
|
9
21
|
};
|
@@ -9,6 +9,7 @@ module.exports = class PDFModel extends Model {
|
|
9
9
|
const settings = super.requestConfig(options);
|
10
10
|
settings.encoding = null;
|
11
11
|
settings.rejectUnauthorized = false;
|
12
|
+
settings.responseType = 'arraybuffer';
|
12
13
|
return settings;
|
13
14
|
}
|
14
15
|
|
@@ -17,17 +18,18 @@ module.exports = class PDFModel extends Model {
|
|
17
18
|
}
|
18
19
|
|
19
20
|
handleResponse(response, callback) {
|
20
|
-
if (isPdf(Buffer.from(response.
|
21
|
-
return this.parseResponse(response.
|
21
|
+
if (isPdf(Buffer.from(response.data))) {
|
22
|
+
return this.parseResponse(response.status, response.data, callback);
|
22
23
|
}
|
23
24
|
const err = new Error();
|
24
|
-
|
25
|
-
|
26
|
-
err.
|
25
|
+
|
26
|
+
if (parseInt(response.status, 10) === 400) {
|
27
|
+
err.title = response.status;
|
28
|
+
err.message = response.statusText;
|
27
29
|
} else {
|
28
|
-
err.body = response.
|
30
|
+
err.body = response.data;
|
29
31
|
}
|
30
|
-
err.status = response.
|
31
|
-
return callback(err, null, response.
|
32
|
+
err.status = response.status;
|
33
|
+
return callback(err, null, response.status);
|
32
34
|
}
|
33
35
|
};
|