Also refactor several files to avoid code duplication. Change-type: minor
Address security advisory https://www.npmjs.com/advisories/1512 Change-type: patch