fixed untranslated strings breaking the site

This commit is contained in:
Danny Coates 2017-12-19 10:06:45 -08:00
parent 3a7677b46d
commit 0f8c3caf18
No known key found for this signature in database
GPG Key ID: 4C442633C62E00CB
3 changed files with 460 additions and 72 deletions

View File

@ -1,26 +1,45 @@
const { MessageContext } = require('fluent'); const { MessageContext } = require('fluent');
const fs = require('fs');
function toJSON(map) { function toJSON(map) {
return JSON.stringify(Array.from(map)); return JSON.stringify(Array.from(map));
} }
function merge(m1, m2) {
const result = new Map(m1);
for (const [k, v] of m2) {
result.set(k, v);
}
return result;
}
module.exports = function(source) { module.exports = function(source) {
const localeExp = this.options.locale || /([^/]+)\/[^/]+\.ftl$/; const localeExp = this.options.locale || /([^/]+)\/[^/]+\.ftl$/;
const result = localeExp.exec(this.resourcePath); const result = localeExp.exec(this.resourcePath);
const locale = result && result[1]; const locale = result && result[1];
// pre-parse the ftl
const context = new MessageContext(locale);
context.addMessages(source);
if (!locale) { if (!locale) {
throw new Error(`couldn't find locale in: ${this.resourcePath}`); throw new Error(`couldn't find locale in: ${this.resourcePath}`);
} }
// load default language and "merge" contexts
// TODO: make this configurable
const en_ftl = fs.readFileSync(
require.resolve('../public/locales/en-US/send.ftl'),
'utf8'
);
const en = new MessageContext('en-US');
en.addMessages(en_ftl);
// pre-parse the ftl
const context = new MessageContext(locale);
context.addMessages(source);
const merged = merge(en._messages, context._messages);
return ` return `
module.exports = \` module.exports = \`
if (typeof window === 'undefined') { if (typeof window === 'undefined') {
var fluent = require('fluent'); var fluent = require('fluent');
} }
var ctx = new fluent.MessageContext('${locale}', {useIsolating: false}); var ctx = new fluent.MessageContext('${locale}', {useIsolating: false});
ctx._messages = new Map(${toJSON(context._messages)}); ctx._messages = new Map(${toJSON(merged)});
function translate(id, data) { function translate(id, data) {
var msg = ctx.getMessage(id); var msg = ctx.getMessage(id);
if (typeof(msg) !== 'string' && !msg.val && msg.attrs) { if (typeof(msg) !== 'string' && !msg.val && msg.attrs) {

485
package-lock.json generated
View File

@ -191,6 +191,12 @@
"integrity": "sha1-GTxfCoZUGkxm+6Hi3DhYM2LqXo8=", "integrity": "sha1-GTxfCoZUGkxm+6Hi3DhYM2LqXo8=",
"dev": true "dev": true
}, },
"aproba": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/aproba/-/aproba-1.2.0.tgz",
"integrity": "sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw==",
"dev": true
},
"argparse": { "argparse": {
"version": "1.0.9", "version": "1.0.9",
"resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz", "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.9.tgz",
@ -350,31 +356,47 @@
"dev": true "dev": true
}, },
"autoprefixer": { "autoprefixer": {
"version": "7.2.1", "version": "7.2.3",
"resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.1.tgz", "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-7.2.3.tgz",
"integrity": "sha512-lTbsa2X03maxG45xCNh30sJaRKDn8JPnanOeQOW3wvD9yPGmIsf041LHqlrZ1lXPF/1M3yTZKXqqYfmxU69xuQ==", "integrity": "sha512-dqzVGiz3v934+s3YZA6nk7tAs9xuTz5wMJbX1M+L4cY/MTNkOUqP61c1GWkEVlUL/PEy1pKRSCFuoRZrXYx9qA==",
"dev": true, "dev": true,
"requires": { "requires": {
"browserslist": "2.9.1", "browserslist": "2.10.0",
"caniuse-lite": "1.0.30000777", "caniuse-lite": "1.0.30000783",
"normalize-range": "0.1.2", "normalize-range": "0.1.2",
"num2fraction": "1.2.2", "num2fraction": "1.2.2",
"postcss": "6.0.14", "postcss": "6.0.14",
"postcss-value-parser": "3.3.0" "postcss-value-parser": "3.3.0"
}, },
"dependencies": { "dependencies": {
"browserslist": {
"version": "2.10.0",
"resolved": "https://registry.npmjs.org/browserslist/-/browserslist-2.10.0.tgz",
"integrity": "sha512-WyvzSLsuAVPOjbljXnyeWl14Ae+ukAT8MUuagKVzIDvwBxl4UAwD1xqtyQs2eWYPGUKMeC3Ol62goqYuKqTTcw==",
"dev": true,
"requires": {
"caniuse-lite": "1.0.30000783",
"electron-to-chromium": "1.3.28"
}
},
"caniuse-lite": { "caniuse-lite": {
"version": "1.0.30000777", "version": "1.0.30000783",
"resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000777.tgz", "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30000783.tgz",
"integrity": "sha1-McGKSozUl4LrswXI6Kk+azs+TxM=", "integrity": "sha1-m1SZ+xtQPSNF0SqmuGEoUvQnb/0=",
"dev": true
},
"electron-to-chromium": {
"version": "1.3.28",
"resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.3.28.tgz",
"integrity": "sha1-jdTmRYCGZE6fnwoc8y4qH53/2e4=",
"dev": true "dev": true
} }
} }
}, },
"aws-sdk": { "aws-sdk": {
"version": "2.162.0", "version": "2.171.0",
"resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.162.0.tgz", "resolved": "https://registry.npmjs.org/aws-sdk/-/aws-sdk-2.171.0.tgz",
"integrity": "sha1-GxYhX8m1mbp80s/nzgUMf5NDgaY=", "integrity": "sha1-acJWXpjjU9Q3QCR3zDBkoTyu3Jw=",
"requires": { "requires": {
"buffer": "4.9.1", "buffer": "4.9.1",
"crypto-browserify": "1.0.9", "crypto-browserify": "1.0.9",
@ -1527,6 +1549,27 @@
"resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz", "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.0.0.tgz",
"integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg=" "integrity": "sha1-0ygVQE1olpn4Wk6k+odV3ROpYEg="
}, },
"cacache": {
"version": "10.0.1",
"resolved": "https://registry.npmjs.org/cacache/-/cacache-10.0.1.tgz",
"integrity": "sha512-dRHYcs9LvG9cHgdPzjiI+/eS7e1xRhULrcyOx04RZQsszNJXU2SL9CyG60yLnge282Qq5nwTv+ieK2fH+WPZmA==",
"dev": true,
"requires": {
"bluebird": "3.5.1",
"chownr": "1.0.1",
"glob": "7.1.2",
"graceful-fs": "4.1.11",
"lru-cache": "4.1.1",
"mississippi": "1.3.0",
"mkdirp": "0.5.1",
"move-concurrently": "1.0.1",
"promise-inflight": "1.0.1",
"rimraf": "2.6.2",
"ssri": "5.0.0",
"unique-filename": "1.1.0",
"y18n": "3.2.1"
}
},
"call-matcher": { "call-matcher": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/call-matcher/-/call-matcher-1.0.1.tgz", "resolved": "https://registry.npmjs.org/call-matcher/-/call-matcher-1.0.1.tgz",
@ -1739,6 +1782,12 @@
"xtend": "4.0.1" "xtend": "4.0.1"
} }
}, },
"chownr": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/chownr/-/chownr-1.0.1.tgz",
"integrity": "sha1-4qdQQqlVGQi+vSW4Uj1fl2nXkYE=",
"dev": true
},
"ci-info": { "ci-info": {
"version": "1.1.2", "version": "1.1.2",
"resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.2.tgz", "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-1.1.2.tgz",
@ -2162,20 +2211,52 @@
"integrity": "sha1-Qa1XsbVVlR7BcUEqgZQrHoIA00o=", "integrity": "sha1-Qa1XsbVVlR7BcUEqgZQrHoIA00o=",
"dev": true "dev": true
}, },
"copy-webpack-plugin": { "copy-concurrently": {
"version": "4.2.3", "version": "1.0.5",
"resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.2.3.tgz", "resolved": "https://registry.npmjs.org/copy-concurrently/-/copy-concurrently-1.0.5.tgz",
"integrity": "sha512-cL/Wl3Y1QmmKThl/mWeGB+HH3YH+25tn8nhqEGsZda4Yn7GqGnDZ+TbeKJ7A6zvrxyNhhuviYAxn/tCyyAqh8Q==", "integrity": "sha512-f2domd9fsVDFtaFcbaRZuYXwtdmnzqbADSwhSWYxYB/Q8zsdUUFMXVRwXGDMWmbEzAn1kdRrtI1T/KTFOL4X2A==",
"dev": true, "dev": true,
"requires": { "requires": {
"bluebird": "3.5.1", "aproba": "1.2.0",
"glob": "7.1.2", "fs-write-stream-atomic": "1.0.10",
"iferr": "0.1.5",
"mkdirp": "0.5.1",
"rimraf": "2.6.2",
"run-queue": "1.0.3"
}
},
"copy-webpack-plugin": {
"version": "4.3.0",
"resolved": "https://registry.npmjs.org/copy-webpack-plugin/-/copy-webpack-plugin-4.3.0.tgz",
"integrity": "sha512-5o1/xyWm8OYDmLFKAWMuPU3A/jZ4Z6kZSZGh36KD2XmtxnRa8lQyLx7bCNQm08BPaR/oqUdtJOr9jWfnYINp9g==",
"dev": true,
"requires": {
"cacache": "10.0.1",
"find-cache-dir": "1.0.0",
"globby": "7.1.1",
"is-glob": "4.0.0", "is-glob": "4.0.0",
"loader-utils": "0.2.17", "loader-utils": "0.2.17",
"lodash": "4.17.4", "lodash": "4.17.4",
"minimatch": "3.0.4" "minimatch": "3.0.4",
"p-limit": "1.1.0",
"pify": "3.0.0",
"serialize-javascript": "1.4.0"
}, },
"dependencies": { "dependencies": {
"globby": {
"version": "7.1.1",
"resolved": "https://registry.npmjs.org/globby/-/globby-7.1.1.tgz",
"integrity": "sha1-+yzP+UAfhgCUXfral0QMypcrhoA=",
"dev": true,
"requires": {
"array-union": "1.0.2",
"dir-glob": "2.0.0",
"glob": "7.1.2",
"ignore": "3.3.7",
"pify": "3.0.0",
"slash": "1.0.0"
}
},
"loader-utils": { "loader-utils": {
"version": "0.2.17", "version": "0.2.17",
"resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz", "resolved": "https://registry.npmjs.org/loader-utils/-/loader-utils-0.2.17.tgz",
@ -2597,6 +2678,12 @@
"array-find-index": "1.0.2" "array-find-index": "1.0.2"
} }
}, },
"cyclist": {
"version": "0.2.2",
"resolved": "https://registry.npmjs.org/cyclist/-/cyclist-0.2.2.tgz",
"integrity": "sha1-GzN5LhHpFKL9bW7WRHRkRE5fpkA=",
"dev": true
},
"d": { "d": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz", "resolved": "https://registry.npmjs.org/d/-/d-1.0.0.tgz",
@ -2964,6 +3051,44 @@
"readable-stream": "1.1.14" "readable-stream": "1.1.14"
} }
}, },
"duplexify": {
"version": "3.5.1",
"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-3.5.1.tgz",
"integrity": "sha512-j5goxHTwVED1Fpe5hh3q9R93Kip0Bg2KVAt4f8CEYM3UEwYcPSvWbXaUQOzdX/HtiNomipv+gU7ASQPDbV7pGQ==",
"dev": true,
"requires": {
"end-of-stream": "1.4.0",
"inherits": "2.0.3",
"readable-stream": "2.3.3",
"stream-shift": "1.0.0"
},
"dependencies": {
"readable-stream": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
"integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
"dev": true,
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "1.0.0",
"process-nextick-args": "1.0.7",
"safe-buffer": "5.1.1",
"string_decoder": "1.0.3",
"util-deprecate": "1.0.2"
}
},
"string_decoder": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
"dev": true,
"requires": {
"safe-buffer": "5.1.1"
}
}
}
},
"ee-first": { "ee-first": {
"version": "1.1.1", "version": "1.1.1",
"resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz",
@ -3007,6 +3132,15 @@
"resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz", "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.1.tgz",
"integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA=" "integrity": "sha1-eePVhlU0aQn+bw9Fpd5oEDspTSA="
}, },
"end-of-stream": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.0.tgz",
"integrity": "sha1-epDYM+/abPpurA9JSduw+tOmMgY=",
"dev": true,
"requires": {
"once": "1.4.0"
}
},
"enhanced-resolve": { "enhanced-resolve": {
"version": "3.4.1", "version": "3.4.1",
"resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz", "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-3.4.1.tgz",
@ -3204,9 +3338,9 @@
} }
}, },
"eslint": { "eslint": {
"version": "4.12.1", "version": "4.13.1",
"resolved": "https://registry.npmjs.org/eslint/-/eslint-4.12.1.tgz", "resolved": "https://registry.npmjs.org/eslint/-/eslint-4.13.1.tgz",
"integrity": "sha512-28hOYej+NZ/R5H1yMvyKa1+bPlu+fnsIAQffK6hxXgvmXnImos2bA5XfCn5dYv2k2mrKj+/U/Z4L5ICWxC7TQw==", "integrity": "sha512-UCJVV50RtLHYzBp1DZ8CMPtRSg4iVZvjgO9IJHIKyWU/AnJVjtdRikoUPLB29n5pzMB7TnsLQWf0V6VUJfoPfw==",
"dev": true, "dev": true,
"requires": { "requires": {
"ajv": "5.5.0", "ajv": "5.5.0",
@ -3224,11 +3358,11 @@
"file-entry-cache": "2.0.0", "file-entry-cache": "2.0.0",
"functional-red-black-tree": "1.0.1", "functional-red-black-tree": "1.0.1",
"glob": "7.1.2", "glob": "7.1.2",
"globals": "11.0.1", "globals": "11.1.0",
"ignore": "3.3.7", "ignore": "3.3.7",
"imurmurhash": "0.1.4", "imurmurhash": "0.1.4",
"inquirer": "3.3.0", "inquirer": "3.3.0",
"is-resolvable": "1.0.0", "is-resolvable": "1.0.1",
"js-yaml": "3.10.0", "js-yaml": "3.10.0",
"json-stable-stringify-without-jsonify": "1.0.1", "json-stable-stringify-without-jsonify": "1.0.1",
"levn": "0.3.0", "levn": "0.3.0",
@ -3290,9 +3424,9 @@
"dev": true "dev": true
}, },
"globals": { "globals": {
"version": "11.0.1", "version": "11.1.0",
"resolved": "https://registry.npmjs.org/globals/-/globals-11.0.1.tgz", "resolved": "https://registry.npmjs.org/globals/-/globals-11.1.0.tgz",
"integrity": "sha1-Eqh7sBDlFUOWrMU14eQ/x1Ow5eg=", "integrity": "sha512-uEuWt9mqTlPDwSqi+sHjD4nWU/1N+q0fiWI9T1mZpD2UENqX20CFD5T/ziLZvztPaBKl7ZylUi1q6Qfm7E2CiQ==",
"dev": true "dev": true
}, },
"js-yaml": { "js-yaml": {
@ -3713,9 +3847,9 @@
} }
}, },
"file-loader": { "file-loader": {
"version": "1.1.5", "version": "1.1.6",
"resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.5.tgz", "resolved": "https://registry.npmjs.org/file-loader/-/file-loader-1.1.6.tgz",
"integrity": "sha512-RzGHDatcVNpGISTvCpfUfOGpYuSR7HSsSg87ki+wF6rw1Hm0RALPTiAdsxAq1UwLf0RRhbe22/eHK6nhXspiOQ==", "integrity": "sha512-873ztuL+/hfvXbLDJ262PGO6XjERnybJu2gW1/5j8HUfxSiFJI9Hj/DhZ50ZGRUxBvuNiazb/cM2rh9pqrxP6Q==",
"dev": true, "dev": true,
"requires": { "requires": {
"loader-utils": "1.1.0", "loader-utils": "1.1.0",
@ -3837,6 +3971,42 @@
"resolved": "https://registry.npmjs.org/fluent-langneg/-/fluent-langneg-0.1.0.tgz", "resolved": "https://registry.npmjs.org/fluent-langneg/-/fluent-langneg-0.1.0.tgz",
"integrity": "sha512-SzRtXNaIcCyRabIpcv+AQd0gn+tXv1wfDDvej3wtBo1/XV0iDnCw5XzbARRRmZMW+IEg+Q26jup6vYgnDam4dg==" "integrity": "sha512-SzRtXNaIcCyRabIpcv+AQd0gn+tXv1wfDDvej3wtBo1/XV0iDnCw5XzbARRRmZMW+IEg+Q26jup6vYgnDam4dg=="
}, },
"flush-write-stream": {
"version": "1.0.2",
"resolved": "https://registry.npmjs.org/flush-write-stream/-/flush-write-stream-1.0.2.tgz",
"integrity": "sha1-yBuQ2HRnZvGmCaRoCZRsRd2K5Bc=",
"dev": true,
"requires": {
"inherits": "2.0.3",
"readable-stream": "2.3.3"
},
"dependencies": {
"readable-stream": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
"integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
"dev": true,
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "1.0.0",
"process-nextick-args": "1.0.7",
"safe-buffer": "5.1.1",
"string_decoder": "1.0.3",
"util-deprecate": "1.0.2"
}
},
"string_decoder": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
"dev": true,
"requires": {
"safe-buffer": "5.1.1"
}
}
}
},
"for-in": { "for-in": {
"version": "1.0.2", "version": "1.0.2",
"resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz", "resolved": "https://registry.npmjs.org/for-in/-/for-in-1.0.2.tgz",
@ -3919,6 +4089,42 @@
"integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=", "integrity": "sha1-g8YK/Fi5xWmXAH7Rp2izqzA6RP4=",
"dev": true "dev": true
}, },
"from2": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz",
"integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=",
"dev": true,
"requires": {
"inherits": "2.0.3",
"readable-stream": "2.3.3"
},
"dependencies": {
"readable-stream": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
"integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
"dev": true,
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "1.0.0",
"process-nextick-args": "1.0.7",
"safe-buffer": "5.1.1",
"string_decoder": "1.0.3",
"util-deprecate": "1.0.2"
}
},
"string_decoder": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
"dev": true,
"requires": {
"safe-buffer": "5.1.1"
}
}
}
},
"fs-extra": { "fs-extra": {
"version": "0.30.0", "version": "0.30.0",
"resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-0.30.0.tgz",
@ -3932,6 +4138,18 @@
"rimraf": "2.6.2" "rimraf": "2.6.2"
} }
}, },
"fs-write-stream-atomic": {
"version": "1.0.10",
"resolved": "https://registry.npmjs.org/fs-write-stream-atomic/-/fs-write-stream-atomic-1.0.10.tgz",
"integrity": "sha1-tH31NJPvkR33VzHnCp3tAYnbQMk=",
"dev": true,
"requires": {
"graceful-fs": "4.1.11",
"iferr": "0.1.5",
"imurmurhash": "0.1.4",
"readable-stream": "1.1.14"
}
},
"fs.realpath": { "fs.realpath": {
"version": "1.0.0", "version": "1.0.0",
"resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz",
@ -5524,6 +5742,12 @@
"resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.0.0.tgz", "resolved": "https://registry.npmjs.org/ienoopen/-/ienoopen-1.0.0.tgz",
"integrity": "sha1-NGpCj0dKrI9QzzeE6i0PFvYr2ms=" "integrity": "sha1-NGpCj0dKrI9QzzeE6i0PFvYr2ms="
}, },
"iferr": {
"version": "0.1.5",
"resolved": "https://registry.npmjs.org/iferr/-/iferr-0.1.5.tgz",
"integrity": "sha1-xg7taebY/bazEEofy8ocGS3FtQE=",
"dev": true
},
"ignore": { "ignore": {
"version": "3.3.7", "version": "3.3.7",
"resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz", "resolved": "https://registry.npmjs.org/ignore/-/ignore-3.3.7.tgz",
@ -5954,13 +6178,10 @@
"dev": true "dev": true
}, },
"is-resolvable": { "is-resolvable": {
"version": "1.0.0", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.0.tgz", "resolved": "https://registry.npmjs.org/is-resolvable/-/is-resolvable-1.0.1.tgz",
"integrity": "sha1-jfV8YeouPFAUCNEA+wE8+NbgzGI=", "integrity": "sha512-y5CXYbzvB3jTnWAZH1Nl7ykUWb6T3BcTs56HUruwBf8MhF56n1HWqhDWnVFo8GHrUPDgvUUNVhrc2U8W7iqz5g==",
"dev": true, "dev": true
"requires": {
"tryit": "1.0.3"
}
}, },
"is-stream": { "is-stream": {
"version": "1.1.0", "version": "1.1.0",
@ -7271,6 +7492,24 @@
"resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz", "resolved": "https://registry.npmjs.org/minimist/-/minimist-0.0.8.tgz",
"integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0=" "integrity": "sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0="
}, },
"mississippi": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/mississippi/-/mississippi-1.3.0.tgz",
"integrity": "sha1-0gFYPrEjJ+PFwWQqQEqcrPlONPU=",
"dev": true,
"requires": {
"concat-stream": "1.6.0",
"duplexify": "3.5.1",
"end-of-stream": "1.4.0",
"flush-write-stream": "1.0.2",
"from2": "2.3.0",
"parallel-transform": "1.1.0",
"pump": "1.0.3",
"pumpify": "1.3.5",
"stream-each": "1.2.2",
"through2": "2.0.3"
}
},
"mkdirp": { "mkdirp": {
"version": "0.5.1", "version": "0.5.1",
"resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.1.tgz",
@ -7368,6 +7607,20 @@
"moment": "2.19.3" "moment": "2.19.3"
} }
}, },
"move-concurrently": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/move-concurrently/-/move-concurrently-1.0.1.tgz",
"integrity": "sha1-viwAX9oy4LKa8fBdfEszIUxwH5I=",
"dev": true,
"requires": {
"aproba": "1.2.0",
"copy-concurrently": "1.0.5",
"fs-write-stream-atomic": "1.0.10",
"mkdirp": "0.5.1",
"rimraf": "2.6.2",
"run-queue": "1.0.3"
}
},
"mozlog": { "mozlog": {
"version": "2.2.0", "version": "2.2.0",
"resolved": "https://registry.npmjs.org/mozlog/-/mozlog-2.2.0.tgz", "resolved": "https://registry.npmjs.org/mozlog/-/mozlog-2.2.0.tgz",
@ -8042,6 +8295,43 @@
"integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==", "integrity": "sha512-lQe48YPsMJAig+yngZ87Lus+NF+3mtu7DVOBu6b/gHO1YpKwIj5AWjZ/TOS7i46HD/UixzWb1zeWDZfGZ3iYcg==",
"dev": true "dev": true
}, },
"parallel-transform": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/parallel-transform/-/parallel-transform-1.1.0.tgz",
"integrity": "sha1-1BDwZbBdojCB/NEPKIVMKb2jOwY=",
"dev": true,
"requires": {
"cyclist": "0.2.2",
"inherits": "2.0.3",
"readable-stream": "2.3.3"
},
"dependencies": {
"readable-stream": {
"version": "2.3.3",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.3.tgz",
"integrity": "sha512-m+qzzcn7KUxEmd1gMbchF+Y2eIUbieUaxkWtptyHywrX0rE8QEYqPC07Vuy4Wm32/xE16NcdBctb8S0Xe/5IeQ==",
"dev": true,
"requires": {
"core-util-is": "1.0.2",
"inherits": "2.0.3",
"isarray": "1.0.0",
"process-nextick-args": "1.0.7",
"safe-buffer": "5.1.1",
"string_decoder": "1.0.3",
"util-deprecate": "1.0.2"
}
},
"string_decoder": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.0.3.tgz",
"integrity": "sha512-4AH6Z5fzNNBcH+6XDMfA/BTt87skxqJlO0lAh3Dker5zThcAxG6mKz+iGu308UKoPPQ8Dcqx/4JhujzltRa+hQ==",
"dev": true,
"requires": {
"safe-buffer": "5.1.1"
}
}
}
},
"param-case": { "param-case": {
"version": "2.1.1", "version": "2.1.1",
"resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz", "resolved": "https://registry.npmjs.org/param-case/-/param-case-2.1.1.tgz",
@ -9818,9 +10108,9 @@
"dev": true "dev": true
}, },
"prettier": { "prettier": {
"version": "1.8.2", "version": "1.9.2",
"resolved": "https://registry.npmjs.org/prettier/-/prettier-1.8.2.tgz", "resolved": "https://registry.npmjs.org/prettier/-/prettier-1.9.2.tgz",
"integrity": "sha512-fHWjCwoRZgjP1rvLP7OGqOznq7xH1sHMQUFLX8qLRO79hI57+6xbc5vB904LxEkCfgFgyr3vv06JkafgCSzoZg==", "integrity": "sha512-piXx9N2WT8hWb7PBbX1glAuJVIkEyUV9F5fMXFINpZ0x3otVOFKKeGmeuiclFJlP/UrgTckyV606VjH2rNK4bw==",
"dev": true "dev": true
}, },
"pretty-format": { "pretty-format": {
@ -9874,6 +10164,12 @@
"integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=", "integrity": "sha1-ihvjZr+Pwj2yvSPxDG/pILQ4nR8=",
"dev": true "dev": true
}, },
"promise-inflight": {
"version": "1.0.1",
"resolved": "https://registry.npmjs.org/promise-inflight/-/promise-inflight-1.0.1.tgz",
"integrity": "sha1-mEcocL8igTL8vdhoEputEsPAKeM=",
"dev": true
},
"proxy-addr": { "proxy-addr": {
"version": "2.0.2", "version": "2.0.2",
"resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz", "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.2.tgz",
@ -9936,6 +10232,27 @@
"randombytes": "2.0.5" "randombytes": "2.0.5"
} }
}, },
"pump": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/pump/-/pump-1.0.3.tgz",
"integrity": "sha512-8k0JupWme55+9tCVE+FS5ULT3K6AbgqrGa58lTT49RpyfwwcGedHqaC5LlQNdEAumn/wFsu6aPwkuPMioy8kqw==",
"dev": true,
"requires": {
"end-of-stream": "1.4.0",
"once": "1.4.0"
}
},
"pumpify": {
"version": "1.3.5",
"resolved": "https://registry.npmjs.org/pumpify/-/pumpify-1.3.5.tgz",
"integrity": "sha1-G2ccYZlAq8rqwK0OOjwWS+dgmTs=",
"dev": true,
"requires": {
"duplexify": "3.5.1",
"inherits": "2.0.3",
"pump": "1.0.3"
}
},
"punycode": { "punycode": {
"version": "1.3.2", "version": "1.3.2",
"resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz", "resolved": "https://registry.npmjs.org/punycode/-/punycode-1.3.2.tgz",
@ -10051,9 +10368,9 @@
"integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4=" "integrity": "sha1-9JvmtIeJTdxA3MlKMi9hEJLgDV4="
}, },
"raven": { "raven": {
"version": "2.2.1", "version": "2.3.0",
"resolved": "https://registry.npmjs.org/raven/-/raven-2.2.1.tgz", "resolved": "https://registry.npmjs.org/raven/-/raven-2.3.0.tgz",
"integrity": "sha1-V8f75oqAFH7FJ97z18AVdc+Uj+M=", "integrity": "sha1-lvFTRr2qQzs7bUcTCARQYVWDPWk=",
"requires": { "requires": {
"cookie": "0.3.1", "cookie": "0.3.1",
"lsmod": "1.0.0", "lsmod": "1.0.0",
@ -10075,9 +10392,9 @@
} }
}, },
"raven-js": { "raven-js": {
"version": "3.20.1", "version": "3.21.0",
"resolved": "https://registry.npmjs.org/raven-js/-/raven-js-3.20.1.tgz", "resolved": "https://registry.npmjs.org/raven-js/-/raven-js-3.21.0.tgz",
"integrity": "sha512-Wr973Ipmd+dWUPQ6mSru/gyteavriEyP6G3iDZ2jpI3sBAWejtVtoXO5BHujEWB1z+/dqCLn+Zezgdc30xZcVA==", "integrity": "sha512-6/DICF3ndYy1mxli88NG1wVtwGnzyalZZVNf/qQeiCDpNKJIyY5bsGZ2GAGcUE+nWg+9G3tQ1KL/UbG4U6vNBA==",
"dev": true "dev": true
}, },
"raw-body": { "raw-body": {
@ -10663,6 +10980,15 @@
"is-promise": "2.1.0" "is-promise": "2.1.0"
} }
}, },
"run-queue": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/run-queue/-/run-queue-1.0.3.tgz",
"integrity": "sha1-6Eg5bwV9Ij8kOGkkYY4laUFh7Ec=",
"dev": true,
"requires": {
"aproba": "1.2.0"
}
},
"rx-lite": { "rx-lite": {
"version": "4.0.8", "version": "4.0.8",
"resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz",
@ -10797,6 +11123,12 @@
} }
} }
}, },
"serialize-javascript": {
"version": "1.4.0",
"resolved": "https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-1.4.0.tgz",
"integrity": "sha1-fJWFFNtqwkQ6irwGLcn3iGp/YAU=",
"dev": true
},
"serve-index": { "serve-index": {
"version": "1.9.1", "version": "1.9.1",
"resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz", "resolved": "https://registry.npmjs.org/serve-index/-/serve-index-1.9.1.tgz",
@ -10901,9 +11233,9 @@
"dev": true "dev": true
}, },
"sinon": { "sinon": {
"version": "4.1.2", "version": "4.1.3",
"resolved": "https://registry.npmjs.org/sinon/-/sinon-4.1.2.tgz", "resolved": "https://registry.npmjs.org/sinon/-/sinon-4.1.3.tgz",
"integrity": "sha512-5uLBZPdCWl59Lpbf45ygKj7Z0LVol+ftBe7RDIXOQV/sF58pcFmbK8raA7bt6eljNuGnvBP+/ZxlicVn0emDjA==", "integrity": "sha512-c7u0ZuvBRX1eXuB4jN3BRCAOGiUTlM8SE3TxbJHrNiHUKL7wonujMOB6Fi1gQc00U91IscFORQHDga/eccqpbw==",
"dev": true, "dev": true,
"requires": { "requires": {
"diff": "3.2.0", "diff": "3.2.0",
@ -11175,6 +11507,15 @@
"integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=",
"dev": true "dev": true
}, },
"ssri": {
"version": "5.0.0",
"resolved": "https://registry.npmjs.org/ssri/-/ssri-5.0.0.tgz",
"integrity": "sha512-728D4yoQcQm1ooZvSbywLkV1RjfITZXh0oWrhM/lnsx3nAHx7LsRGJWB/YyvoceAYRq98xqbstiN4JBv1/wNHg==",
"dev": true,
"requires": {
"safe-buffer": "5.1.1"
}
},
"stack-trace": { "stack-trace": {
"version": "0.0.10", "version": "0.0.10",
"resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz", "resolved": "https://registry.npmjs.org/stack-trace/-/stack-trace-0.0.10.tgz",
@ -11242,6 +11583,16 @@
"duplexer": "0.1.1" "duplexer": "0.1.1"
} }
}, },
"stream-each": {
"version": "1.2.2",
"resolved": "https://registry.npmjs.org/stream-each/-/stream-each-1.2.2.tgz",
"integrity": "sha512-mc1dbFhGBxvTM3bIWmAAINbqiuAk9TATcfIQC8P+/+HJefgaiTlMn2dHvkX8qlI12KeYKSQ1Ua9RrIqrn1VPoA==",
"dev": true,
"requires": {
"end-of-stream": "1.4.0",
"stream-shift": "1.0.0"
}
},
"stream-http": { "stream-http": {
"version": "2.7.2", "version": "2.7.2",
"resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz", "resolved": "https://registry.npmjs.org/stream-http/-/stream-http-2.7.2.tgz",
@ -11281,6 +11632,12 @@
} }
} }
}, },
"stream-shift": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.0.tgz",
"integrity": "sha1-1cdSgl5TZ+eG944Y5EXqIjoVWVI=",
"dev": true
},
"stream-to-observable": { "stream-to-observable": {
"version": "0.1.0", "version": "0.1.0",
"resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.1.0.tgz", "resolved": "https://registry.npmjs.org/stream-to-observable/-/stream-to-observable-0.1.0.tgz",
@ -11419,7 +11776,7 @@
"integrity": "sha512-v5K6tv+Ky3SoJfNqGOvgzRDLqZV133CZ7Wtu3y5aAGjQHVi+6dixFLgI82VrJZJdC4HwZplafJcRP+4r7EUt5g==", "integrity": "sha512-v5K6tv+Ky3SoJfNqGOvgzRDLqZV133CZ7Wtu3y5aAGjQHVi+6dixFLgI82VrJZJdC4HwZplafJcRP+4r7EUt5g==",
"dev": true, "dev": true,
"requires": { "requires": {
"autoprefixer": "7.2.1", "autoprefixer": "7.2.3",
"balanced-match": "1.0.0", "balanced-match": "1.0.0",
"chalk": "2.3.0", "chalk": "2.3.0",
"cosmiconfig": "3.1.0", "cosmiconfig": "3.1.0",
@ -11916,12 +12273,6 @@
"integrity": "sha1-qf2LA5Swro//guBjOgo2zK1bX4Y=", "integrity": "sha1-qf2LA5Swro//guBjOgo2zK1bX4Y=",
"dev": true "dev": true
}, },
"tryit": {
"version": "1.0.3",
"resolved": "https://registry.npmjs.org/tryit/-/tryit-1.0.3.tgz",
"integrity": "sha1-OTvnMKlEb9Hq1tpZoBQwjzbCics=",
"dev": true
},
"tty-browserify": { "tty-browserify": {
"version": "0.0.0", "version": "0.0.0",
"resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz", "resolved": "https://registry.npmjs.org/tty-browserify/-/tty-browserify-0.0.0.tgz",
@ -12121,6 +12472,24 @@
"integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=", "integrity": "sha1-/+3ks2slKQaW5uFl1KWe25mOawI=",
"dev": true "dev": true
}, },
"unique-filename": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/unique-filename/-/unique-filename-1.1.0.tgz",
"integrity": "sha1-0F8v5AMlYIcfMOk8vnNe6iAVFPM=",
"dev": true,
"requires": {
"unique-slug": "2.0.0"
}
},
"unique-slug": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/unique-slug/-/unique-slug-2.0.0.tgz",
"integrity": "sha1-22Z258fMBimHj/GWCXx4hVrp9Ks=",
"dev": true,
"requires": {
"imurmurhash": "0.1.4"
}
},
"unist-util-find-all-after": { "unist-util-find-all-after": {
"version": "1.0.1", "version": "1.0.1",
"resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.1.tgz", "resolved": "https://registry.npmjs.org/unist-util-find-all-after/-/unist-util-find-all-after-1.0.1.tgz",
@ -12366,9 +12735,9 @@
} }
}, },
"webpack": { "webpack": {
"version": "3.9.1", "version": "3.10.0",
"resolved": "https://registry.npmjs.org/webpack/-/webpack-3.9.1.tgz", "resolved": "https://registry.npmjs.org/webpack/-/webpack-3.10.0.tgz",
"integrity": "sha512-jONJ0l8nqgiQVkqs15O9TFWLozbFkCgVodVrBXBK/PIBFeGkaOGo30Ov57iQqYRwAWNDM5vyLPZYmAIpPa5QSw==", "integrity": "sha512-fxxKXoicjdXNUMY7LIdY89tkJJJ0m1Oo8PQutZ5rLgWbV5QVKI15Cn7+/IHnRTd3vfKfiwBx6SBqlorAuNA8LA==",
"dev": true, "dev": true,
"requires": { "requires": {
"acorn": "5.2.1", "acorn": "5.2.1",

View File

@ -43,7 +43,7 @@
"node": ">=8.2.0" "node": ">=8.2.0"
}, },
"devDependencies": { "devDependencies": {
"autoprefixer": "^7.2.1", "autoprefixer": "^7.2.3",
"babel-core": "^6.26.0", "babel-core": "^6.26.0",
"babel-loader": "^7.1.2", "babel-loader": "^7.1.2",
"babel-plugin-yo-yoify": "^1.0.2", "babel-plugin-yo-yoify": "^1.0.2",
@ -52,18 +52,18 @@
"babel-preset-es2015": "^6.24.1", "babel-preset-es2015": "^6.24.1",
"babel-preset-stage-2": "^6.24.1", "babel-preset-stage-2": "^6.24.1",
"base64-js": "^1.2.1", "base64-js": "^1.2.1",
"copy-webpack-plugin": "^4.2.3", "copy-webpack-plugin": "^4.3.0",
"cross-env": "^5.1.1", "cross-env": "^5.1.1",
"css-loader": "^0.28.7", "css-loader": "^0.28.7",
"css-mqpacker": "^6.0.1", "css-mqpacker": "^6.0.1",
"cssnano": "^3.10.0", "cssnano": "^3.10.0",
"eslint": "^4.12.0", "eslint": "^4.13.1",
"eslint-plugin-mocha": "^4.11.0", "eslint-plugin-mocha": "^4.11.0",
"eslint-plugin-node": "^5.2.1", "eslint-plugin-node": "^5.2.1",
"eslint-plugin-security": "^1.4.0", "eslint-plugin-security": "^1.4.0",
"expose-loader": "^0.7.4", "expose-loader": "^0.7.4",
"extract-loader": "^1.0.1", "extract-loader": "^1.0.1",
"file-loader": "^1.1.5", "file-loader": "^1.1.6",
"fluent-intl-polyfill": "^0.1.0", "fluent-intl-polyfill": "^0.1.0",
"git-rev-sync": "^1.9.1", "git-rev-sync": "^1.9.1",
"github-changes": "^1.1.1", "github-changes": "^1.1.1",
@ -74,27 +74,27 @@
"nanobus": "^4.3.1", "nanobus": "^4.3.1",
"npm-run-all": "^4.1.2", "npm-run-all": "^4.1.2",
"postcss-loader": "^2.0.9", "postcss-loader": "^2.0.9",
"prettier": "^1.8.2", "prettier": "^1.9.2",
"proxyquire": "^1.8.0", "proxyquire": "^1.8.0",
"raven-js": "^3.20.1", "raven-js": "^3.21.0",
"redis-mock": "^0.20.0", "redis-mock": "^0.20.0",
"require-from-string": "^2.0.1", "require-from-string": "^2.0.1",
"rimraf": "^2.6.2", "rimraf": "^2.6.2",
"selenium-webdriver": "^3.6.0", "selenium-webdriver": "^3.6.0",
"sinon": "^4.1.2", "sinon": "^4.1.3",
"string-hash": "^1.1.3", "string-hash": "^1.1.3",
"stylelint-config-standard": "^17.0.0", "stylelint-config-standard": "^17.0.0",
"stylelint-no-unsupported-browser-features": "^1.0.1", "stylelint-no-unsupported-browser-features": "^1.0.1",
"supertest": "^3.0.0", "supertest": "^3.0.0",
"testpilot-ga": "^0.3.0", "testpilot-ga": "^0.3.0",
"val-loader": "^1.1.0", "val-loader": "^1.1.0",
"webpack": "^3.8.1", "webpack": "^3.10.0",
"webpack-dev-server": "2.9.1", "webpack-dev-server": "2.9.1",
"webpack-manifest-plugin": "^1.3.2", "webpack-manifest-plugin": "^1.3.2",
"webpack-unassert-loader": "^1.2.0" "webpack-unassert-loader": "^1.2.0"
}, },
"dependencies": { "dependencies": {
"aws-sdk": "^2.162.0", "aws-sdk": "^2.171.0",
"body-parser": "^1.18.2", "body-parser": "^1.18.2",
"choo": "^6.6.0", "choo": "^6.6.0",
"cldr-core": "^32.0.0", "cldr-core": "^32.0.0",
@ -106,7 +106,7 @@
"helmet": "^3.9.0", "helmet": "^3.9.0",
"mkdirp": "^0.5.1", "mkdirp": "^0.5.1",
"mozlog": "^2.2.0", "mozlog": "^2.2.0",
"raven": "^2.2.1", "raven": "^2.3.0",
"redis": "^2.8.0" "redis": "^2.8.0"
}, },
"availableLanguages": [ "availableLanguages": [