hof 21.0.20-axios-beta → 21.1.0-deindex-toggle-beta.1
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/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 +19 -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/model/index.js
    CHANGED
    
    | @@ -5,9 +5,7 @@ const _ = require('lodash'); | |
| 5 5 | 
             
            const axios = require('axios').default;
         | 
| 6 6 | 
             
            const url = require('url');
         | 
| 7 7 | 
             
            const EventEmitter = require('events').EventEmitter;
         | 
| 8 | 
            -
             | 
| 9 8 | 
             
            const axiosSetting = require('./apis/axios-settings');
         | 
| 10 | 
            -
             | 
| 11 9 | 
             
            const REFERENCE = /^\$ref:/;
         | 
| 12 10 |  | 
| 13 11 | 
             
            function timeDiff(from, to, d) {
         | 
| @@ -32,7 +30,7 @@ module.exports = class Model extends EventEmitter { | |
| 32 30 | 
             
                this._request = axios;
         | 
| 33 31 | 
             
              }
         | 
| 34 32 |  | 
| 35 | 
            -
              save(options, callback) {
         | 
| 33 | 
            +
              async save(options, callback) {
         | 
| 36 34 | 
             
                if (typeof options === 'function' && arguments.length === 1) {
         | 
| 37 35 | 
             
                  callback = options;
         | 
| 38 36 | 
             
                  options = {};
         | 
| @@ -40,20 +38,18 @@ module.exports = class Model extends EventEmitter { | |
| 40 38 | 
             
                  options = {};
         | 
| 41 39 | 
             
                }
         | 
| 42 40 |  | 
| 43 | 
            -
                 | 
| 44 | 
            -
             | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
                   | 
| 49 | 
            -
             | 
| 50 | 
            -
             | 
| 51 | 
            -
             | 
| 52 | 
            -
                  return this.request(reqConf, data, callback);
         | 
| 53 | 
            -
                });
         | 
| 41 | 
            +
                let data = await this.prepare();
         | 
| 42 | 
            +
                data = JSON.stringify(data);
         | 
| 43 | 
            +
                const reqConf = this.requestConfig(options);
         | 
| 44 | 
            +
                reqConf.method = options.method || 'POST';
         | 
| 45 | 
            +
                reqConf.headers = Object.assign({
         | 
| 46 | 
            +
                  'Content-Type': 'application/json',
         | 
| 47 | 
            +
                  'Content-Length': Buffer.byteLength(data)
         | 
| 48 | 
            +
                }, reqConf.headers || {});
         | 
| 49 | 
            +
                return await this.request(reqConf, data, callback);
         | 
| 54 50 | 
             
              }
         | 
| 55 51 |  | 
| 56 | 
            -
              fetch(options, callback) {
         | 
| 52 | 
            +
              async fetch(options, callback) {
         | 
| 57 53 | 
             
                if (typeof options === 'function' && arguments.length === 1) {
         | 
| 58 54 | 
             
                  callback = options;
         | 
| 59 55 | 
             
                  options = {};
         | 
| @@ -62,10 +58,10 @@ module.exports = class Model extends EventEmitter { | |
| 62 58 | 
             
                }
         | 
| 63 59 | 
             
                const reqConf = this.requestConfig(options);
         | 
| 64 60 | 
             
                reqConf.method = options.method || 'GET';
         | 
| 65 | 
            -
                return this.request(reqConf, callback);
         | 
| 61 | 
            +
                return await this.request(reqConf, callback);
         | 
| 66 62 | 
             
              }
         | 
| 67 63 |  | 
| 68 | 
            -
              delete(options, callback) {
         | 
| 64 | 
            +
              async delete(options, callback) {
         | 
| 69 65 | 
             
                if (typeof options === 'function' && arguments.length === 1) {
         | 
| 70 66 | 
             
                  callback = options;
         | 
| 71 67 | 
             
                  options = {};
         | 
| @@ -74,7 +70,7 @@ module.exports = class Model extends EventEmitter { | |
| 74 70 | 
             
                }
         | 
| 75 71 | 
             
                const reqConf = this.requestConfig(options);
         | 
| 76 72 | 
             
                reqConf.method = options.method || 'DELETE';
         | 
| 77 | 
            -
                return this.request(reqConf, callback);
         | 
| 73 | 
            +
                return await this.request(reqConf, callback);
         | 
| 78 74 | 
             
              }
         | 
| 79 75 |  | 
| 80 76 | 
             
              requestConfig(options) {
         | 
| @@ -87,7 +83,7 @@ module.exports = class Model extends EventEmitter { | |
| 87 83 | 
             
                });
         | 
| 88 84 | 
             
              }
         | 
| 89 85 |  | 
| 90 | 
            -
              request(originalSettings, body, callback) {
         | 
| 86 | 
            +
              async request(originalSettings, body, callback) {
         | 
| 91 87 | 
             
                if (typeof body === 'function' && arguments.length === 2) {
         | 
| 92 88 | 
             
                  callback = body;
         | 
| 93 89 | 
             
                  body = undefined;
         | 
| @@ -99,92 +95,110 @@ module.exports = class Model extends EventEmitter { | |
| 99 95 | 
             
                settings = _.omit(settings, urlKeys);
         | 
| 100 96 | 
             
                this.emit('sync', originalSettings);
         | 
| 101 97 |  | 
| 102 | 
            -
                 | 
| 98 | 
            +
                try {
         | 
| 99 | 
            +
                  const authData = await this.auth();
         | 
| 103 100 | 
             
                  let authVal = authData;
         | 
| 104 101 | 
             
                  if (typeof authVal === 'string') {
         | 
| 105 | 
            -
                    const  | 
| 102 | 
            +
                    const [user, ...rest] = authVal.split(':');
         | 
| 106 103 | 
             
                    authVal = {
         | 
| 107 | 
            -
                      user | 
| 108 | 
            -
                      pass:  | 
| 104 | 
            +
                      user,
         | 
| 105 | 
            +
                      pass: rest.join(':'),
         | 
| 109 106 | 
             
                      sendImmediately: true
         | 
| 110 107 | 
             
                    };
         | 
| 111 108 | 
             
                  }
         | 
| 112 | 
            -
                  if(authVal) {
         | 
| 113 | 
            -
                    settings.headers =  | 
| 109 | 
            +
                  if (authVal) {
         | 
| 110 | 
            +
                    settings.headers = {
         | 
| 111 | 
            +
                      ...settings.headers,
         | 
| 112 | 
            +
                      Authorization: `Bearer ${authVal.bearer}`
         | 
| 113 | 
            +
                    };
         | 
| 114 114 | 
             
                  }
         | 
| 115 | 
            -
                })
         | 
| 116 | 
            -
                  .then(() => {
         | 
| 117 | 
            -
                    const startTime = process.hrtime();
         | 
| 118 | 
            -
                    let timeoutTimer;
         | 
| 119 | 
            -
             | 
| 120 | 
            -
                    return new Promise((resolve, reject) => {
         | 
| 121 | 
            -
                      const _callback = (err, data, statusCode) => {
         | 
| 122 | 
            -
                        if (timeoutTimer) {
         | 
| 123 | 
            -
                          clearTimeout(timeoutTimer);
         | 
| 124 | 
            -
                          timeoutTimer = null;
         | 
| 125 | 
            -
                        }
         | 
| 126 115 |  | 
| 127 | 
            -
             | 
| 128 | 
            -
             | 
| 129 | 
            -
             | 
| 130 | 
            -
             | 
| 131 | 
            -
             | 
| 132 | 
            -
             | 
| 133 | 
            -
             | 
| 134 | 
            -
             | 
| 135 | 
            -
             | 
| 136 | 
            -
             | 
| 137 | 
            -
             | 
| 138 | 
            -
                         | 
| 139 | 
            -
             | 
| 140 | 
            -
                       | 
| 141 | 
            -
             | 
| 142 | 
            -
             | 
| 143 | 
            -
             | 
| 144 | 
            -
             | 
| 145 | 
            -
             | 
| 146 | 
            -
             | 
| 147 | 
            -
             | 
| 116 | 
            +
                  const startTime = process.hrtime();
         | 
| 117 | 
            +
                  let timeoutTimer;
         | 
| 118 | 
            +
             | 
| 119 | 
            +
                  if (timeoutTimer) {
         | 
| 120 | 
            +
                    clearTimeout(timeoutTimer);
         | 
| 121 | 
            +
                    timeoutTimer = null;
         | 
| 122 | 
            +
                  }
         | 
| 123 | 
            +
             | 
| 124 | 
            +
                  const data = await new Promise((resolve, reject) => {
         | 
| 125 | 
            +
                    const _callback = (err, responseData, statusCode) => {
         | 
| 126 | 
            +
                      if (timeoutTimer) {
         | 
| 127 | 
            +
                        clearTimeout(timeoutTimer);
         | 
| 128 | 
            +
                        timeoutTimer = null;
         | 
| 129 | 
            +
                      }
         | 
| 130 | 
            +
             | 
| 131 | 
            +
                      const endTime = process.hrtime();
         | 
| 132 | 
            +
                      const responseTime = timeDiff(startTime, endTime);
         | 
| 133 | 
            +
                      if (err) {
         | 
| 134 | 
            +
                        this.emit('fail', err, responseData, originalSettings, statusCode, responseTime);
         | 
| 135 | 
            +
                        reject(err);
         | 
| 136 | 
            +
                      } else {
         | 
| 137 | 
            +
                        this.emit('success', responseData, originalSettings, statusCode, responseTime);
         | 
| 138 | 
            +
                        resolve(responseData);
         | 
| 139 | 
            +
                      }
         | 
| 140 | 
            +
                    };
         | 
| 141 | 
            +
             | 
| 142 | 
            +
                    this._request(settings)
         | 
| 143 | 
            +
                      .then(response => {
         | 
| 144 | 
            +
                        return this.handleResponse(response)
         | 
| 145 | 
            +
                          .then(responseData => _callback(null, responseData, response.status))
         | 
| 146 | 
            +
                          .catch(error => {
         | 
| 147 | 
            +
                            error.headers = response.headers;
         | 
| 148 | 
            +
                            _callback(error, null, response.status);
         | 
| 148 149 | 
             
                          });
         | 
| 149 | 
            -
             | 
| 150 | 
            -
             | 
| 151 | 
            -
             | 
| 152 | 
            -
             | 
| 153 | 
            -
                           | 
| 154 | 
            -
             | 
| 155 | 
            -
             | 
| 156 | 
            -
                         | 
| 157 | 
            -
             | 
| 150 | 
            +
                      })
         | 
| 151 | 
            +
                      .catch(err => {
         | 
| 152 | 
            +
                        if (err.code === 'ETIMEDOUT' || err.code === 'ESOCKETTIMEDOUT') {
         | 
| 153 | 
            +
                          err.message = 'Connection timed out';
         | 
| 154 | 
            +
                          err.status = 504;
         | 
| 155 | 
            +
                        }
         | 
| 156 | 
            +
                        err.status = err.status || 503;
         | 
| 157 | 
            +
                        return _callback(err, null, err.status);
         | 
| 158 | 
            +
                      });
         | 
| 158 159 | 
             
                  });
         | 
| 159 160 |  | 
| 160 | 
            -
             | 
| 161 | 
            -
             | 
| 161 | 
            +
                  if (typeof callback === 'function') {
         | 
| 162 | 
            +
                    callback(null, data);
         | 
| 163 | 
            +
                  }
         | 
| 164 | 
            +
                  return data;
         | 
| 165 | 
            +
                } catch (error) {
         | 
| 166 | 
            +
                  if (typeof callback === 'function') {
         | 
| 167 | 
            +
                    callback(error);
         | 
| 168 | 
            +
                  }
         | 
| 169 | 
            +
                  return error;
         | 
| 162 170 | 
             
                }
         | 
| 163 | 
            -
                return promise;
         | 
| 164 171 | 
             
              }
         | 
| 165 172 |  | 
| 166 | 
            -
              handleResponse(response | 
| 167 | 
            -
                let data =  | 
| 173 | 
            +
              async handleResponse(response) {
         | 
| 174 | 
            +
                let data = null;
         | 
| 168 175 | 
             
                try {
         | 
| 169 | 
            -
                   | 
| 176 | 
            +
                  if (typeof response.data === 'object') {
         | 
| 177 | 
            +
                    data = response.data;
         | 
| 178 | 
            +
                  } else if (typeof response.data === 'string' && response.data.trim() !== '') {
         | 
| 179 | 
            +
                    data = JSON.parse(response.data);
         | 
| 180 | 
            +
                  } else {
         | 
| 181 | 
            +
                    data = {};
         | 
| 182 | 
            +
                  }
         | 
| 170 183 | 
             
                } catch (err) {
         | 
| 184 | 
            +
                  err.message = 'Failed to parse response data';
         | 
| 171 185 | 
             
                  err.status = response.status;
         | 
| 172 186 | 
             
                  err.body = response.data;
         | 
| 173 | 
            -
                   | 
| 187 | 
            +
                  throw err;
         | 
| 174 188 | 
             
                }
         | 
| 175 | 
            -
                return this.parseResponse(response.status, data | 
| 189 | 
            +
                return await this.parseResponse(response.status, data);
         | 
| 176 190 | 
             
              }
         | 
| 177 191 |  | 
| 178 | 
            -
              parseResponse(statusCode, data | 
| 192 | 
            +
              async parseResponse(statusCode, data) {
         | 
| 179 193 | 
             
                if (statusCode < 400) {
         | 
| 180 194 | 
             
                  try {
         | 
| 181 | 
            -
                    data = this.parse(data);
         | 
| 182 | 
            -
                     | 
| 195 | 
            +
                    data = await this.parse(data);
         | 
| 196 | 
            +
                    return data;
         | 
| 183 197 | 
             
                  } catch (err) {
         | 
| 184 | 
            -
                     | 
| 198 | 
            +
                    throw err;
         | 
| 185 199 | 
             
                  }
         | 
| 186 200 | 
             
                } else {
         | 
| 187 | 
            -
                   | 
| 201 | 
            +
                  throw this.parseError(statusCode, data);
         | 
| 188 202 | 
             
                }
         | 
| 189 203 | 
             
              }
         | 
| 190 204 |  | 
    
        package/package.json
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            {
         | 
| 2 2 | 
             
              "name": "hof",
         | 
| 3 3 | 
             
              "description": "A bootstrap for HOF projects",
         | 
| 4 | 
            -
              "version": "21.0 | 
| 4 | 
            +
              "version": "21.1.0-deindex-toggle-beta.1",
         | 
| 5 5 | 
             
              "license": "MIT",
         | 
| 6 6 | 
             
              "main": "index.js",
         | 
| 7 7 | 
             
              "author": "HomeOffice",
         | 
| @@ -32,8 +32,7 @@ | |
| 32 32 | 
             
                "test:acceptance_browser": "ACCEPTANCE_WITH_BROWSER=true TAGS=\"${TAGS:=@feature}\" yarn run test:cucumber",
         | 
| 33 33 | 
             
                "test:cucumber": "cucumber-js -f @cucumber/pretty-formatter \"sandbox/test/_features/**/*.feature\" --require sandbox/test/_features/test.setup.js --require \"sandbox/test/_features/step_definitions/**/*.js\" --tags $TAGS",
         | 
| 34 34 | 
             
                "ci": "travis-conditions",
         | 
| 35 | 
            -
                "postversion": "git push && git push --tags" | 
| 36 | 
            -
                "test-single": "mocha"
         | 
| 35 | 
            +
                "postversion": "git push && git push --tags"
         | 
| 37 36 | 
             
              },
         | 
| 38 37 | 
             
              "dependencies": {
         | 
| 39 38 | 
             
                "aliasify": "^2.1.0",
         | 
| @@ -54,12 +53,12 @@ | |
| 54 53 | 
             
                "duplexify": "^3.5.0",
         | 
| 55 54 | 
             
                "express": "^4.17.1",
         | 
| 56 55 | 
             
                "express-healthcheck": "^0.1.0",
         | 
| 57 | 
            -
                "express-partial-templates": "^0.2. | 
| 56 | 
            +
                "express-partial-templates": "^0.2.1",
         | 
| 58 57 | 
             
                "express-session": "^1.13.0",
         | 
| 59 58 | 
             
                "findup": "^0.1.5",
         | 
| 60 59 | 
             
                "glob": "^7.2.0",
         | 
| 61 60 | 
             
                "govuk-elements-sass": "^3.1.3",
         | 
| 62 | 
            -
                "govuk-frontend": "3. | 
| 61 | 
            +
                "govuk-frontend": "3.15",
         | 
| 63 62 | 
             
                "govuk_template_mustache": "^0.26.0",
         | 
| 64 63 | 
             
                "helmet": "^3.22.0",
         | 
| 65 64 | 
             
                "hogan-express-strict": "^0.5.4",
         | 
| @@ -68,7 +67,7 @@ | |
| 68 67 | 
             
                "i18n-future": "^2.0.0",
         | 
| 69 68 | 
             
                "i18n-lookup": "^0.1.0",
         | 
| 70 69 | 
             
                "is-pdf": "^1.0.0",
         | 
| 71 | 
            -
                "libphonenumber-js": "^1.9. | 
| 70 | 
            +
                "libphonenumber-js": "^1.9.44",
         | 
| 72 71 | 
             
                "lodash": "^4.17.21",
         | 
| 73 72 | 
             
                "markdown-it": "^12.3.2",
         | 
| 74 73 | 
             
                "minimatch": "^3.0.7",
         | 
| @@ -81,8 +80,7 @@ | |
| 81 80 | 
             
                "nodemailer-ses-transport": "^1.5.1",
         | 
| 82 81 | 
             
                "nodemailer-smtp-transport": "^2.7.4",
         | 
| 83 82 | 
             
                "nodemailer-stub-transport": "^1.1.0",
         | 
| 84 | 
            -
                "notifications-node-client": "^ | 
| 85 | 
            -
                "object-mapper": "^6.2.0",
         | 
| 83 | 
            +
                "notifications-node-client": "^8.2.0",
         | 
| 86 84 | 
             
                "redis": "^3.1.2",
         | 
| 87 85 | 
             
                "reqres": "^3.0.1",
         | 
| 88 86 | 
             
                "rimraf": "^3.0.2",
         | 
    
        package/pull_request.md
    ADDED
    
    | @@ -0,0 +1,16 @@ | |
| 1 | 
            +
            ## What? 
         | 
| 2 | 
            +
            ## Why? 
         | 
| 3 | 
            +
            ## How? 
         | 
| 4 | 
            +
            ## Testing?
         | 
| 5 | 
            +
            ## Screenshots (optional)
         | 
| 6 | 
            +
            ## Anything Else? (optional)
         | 
| 7 | 
            +
            ## Check list
         | 
| 8 | 
            +
             | 
| 9 | 
            +
            - [ ] I have reviewed my own pull request for linting issues (e.g. adding new lines)
         | 
| 10 | 
            +
            - [ ] I have written tests (if relevant)
         | 
| 11 | 
            +
            - [ ] I have created a JIRA number for my branch
         | 
| 12 | 
            +
            - [ ] I have created a JIRA number for my commit
         | 
| 13 | 
            +
            - [ ] I have followed the chris beams method for my commit https://cbea.ms/git-commit/
         | 
| 14 | 
            +
            here is an [example commit](https://github.com/UKHomeOfficeForms/hof/commit/810959f391187c7c4af6db262bcd143b50093a6e)
         | 
| 15 | 
            +
            - [ ] Ensure drone builds are green especially tests
         | 
| 16 | 
            +
            - [ ] I will squash the commits before merging
         | 
    
        package/sandbox/package.json
    CHANGED
    
    
| @@ -5627,6 +5627,11 @@ input[type=number] { | |
| 5627 5627 | 
             
              vertical-align: top;
         | 
| 5628 5628 | 
             
            }
         | 
| 5629 5629 |  | 
| 5630 | 
            +
            .govuk-header__logotype-crown[width="32"] {
         | 
| 5631 | 
            +
              top: -3px;
         | 
| 5632 | 
            +
              margin-right: 2px;
         | 
| 5633 | 
            +
            }
         | 
| 5634 | 
            +
             | 
| 5630 5635 | 
             
            .govuk-header__logotype-crown-fallback-image {
         | 
| 5631 5636 | 
             
              width: 36px;
         | 
| 5632 5637 | 
             
              height: 32px;
         | 
| @@ -5634,6 +5639,11 @@ input[type=number] { | |
| 5634 5639 | 
             
              vertical-align: bottom;
         | 
| 5635 5640 | 
             
            }
         | 
| 5636 5641 |  | 
| 5642 | 
            +
            .govuk-header__logotype-crown-fallback-image[width="32"] {
         | 
| 5643 | 
            +
              width: 32px;
         | 
| 5644 | 
            +
              height: 30px;
         | 
| 5645 | 
            +
            }
         | 
| 5646 | 
            +
             | 
| 5637 5647 | 
             
            .govuk-header__product-name {
         | 
| 5638 5648 | 
             
              font-family: "GDS Transport", arial, sans-serif;
         | 
| 5639 5649 | 
             
              -webkit-font-smoothing: antialiased;
         |