diff --git a/app/components/crate-row.hbs b/app/components/crate-row.hbs index 33673898a1d..c33ebe657b6 100644 --- a/app/components/crate-row.hbs +++ b/app/components/crate-row.hbs @@ -35,8 +35,8 @@ {{svg-jar "latest-updates" height="32" width="32"}} Updated: - diff --git a/app/components/crate-row.module.css b/app/components/crate-row.module.css index f634d236745..d1deb4bdc72 100644 --- a/app/components/crate-row.module.css +++ b/app/components/crate-row.module.css @@ -7,7 +7,7 @@ padding-top: 5px; display: flex; flex-direction: column; - width: 75%; + width: 70%; } .name { @@ -51,7 +51,7 @@ } .stats { - width: 25%; + width: 30%; color: var(--main-color-light); } diff --git a/app/components/download-graph.js b/app/components/download-graph.js index 8bd0821eee9..b44661ab309 100644 --- a/app/components/download-graph.js +++ b/app/components/download-graph.js @@ -30,7 +30,7 @@ export default class DownloadGraph extends Component { padding: 10, }, scales: { - xAxes: [{ type: 'time', time: { stepSize: 7, tooltipFormat: 'MMM D', unit: 'day' } }], + xAxes: [{ type: 'time', time: { stepSize: 7, tooltipFormat: 'MMM d', unit: 'day' } }], yAxes: [{ stacked: true, ticks: { min: 0, precision: 0 } }], }, tooltips: { diff --git a/app/components/pending-owner-invite-row.hbs b/app/components/pending-owner-invite-row.hbs index 0c43d2d05a4..bc6f50f9345 100644 --- a/app/components/pending-owner-invite-row.hbs +++ b/app/components/pending-owner-invite-row.hbs @@ -26,11 +26,11 @@

- {{moment-from-now @invite.created_at}} + {{date-format-distance-to-now @invite.created_at addSuffix=true}}
-{{/if}} +{{/if}} \ No newline at end of file diff --git a/app/components/settings/api-tokens.hbs b/app/components/settings/api-tokens.hbs index 0656f54b577..78a602f2e9c 100644 --- a/app/components/settings/api-tokens.hbs +++ b/app/components/settings/api-tokens.hbs @@ -62,11 +62,11 @@
- Created {{moment-from-now token.created_at}} + Created {{date-format-distance-to-now token.created_at addSuffix=true}} {{#if token.last_used_at}} - Last used {{moment-from-now token.last_used_at}} + Last used {{date-format-distance-to-now token.last_used_at addSuffix=true}} {{else}} Never used {{/if}} diff --git a/app/controllers/crate/version.js b/app/controllers/crate/version.js index 7a8d89aaa7b..94670265fc0 100644 --- a/app/controllers/crate/version.js +++ b/app/controllers/crate/version.js @@ -3,8 +3,8 @@ import { computed } from '@ember/object'; import { alias, gt, readOnly } from '@ember/object/computed'; import { inject as service } from '@ember/service'; +import subDays from 'date-fns/subDays'; import { task } from 'ember-concurrency'; -import moment from 'moment'; import ajax from '../../utils/ajax'; @@ -53,9 +53,11 @@ export default class CrateVersionController extends Controller { let dates = {}; let versions = []; + + let now = new Date(); for (let i = 0; i < 90; i++) { - let now = moment().subtract(i, 'days'); - dates[now.toISOString().slice(0, 10)] = { date: now, cnt: {} }; + let date = subDays(now, i); + dates[date.toISOString().slice(0, 10)] = { date, cnt: {} }; } downloads.forEach(d => { @@ -95,7 +97,7 @@ export default class CrateVersionController extends Controller { } let data = [headers]; for (let date in dates) { - let row = [dates[date].date.toDate()]; + let row = [dates[date].date]; for (let version of versions) { row.push(dates[date].cnt[version.id] || 0); } diff --git a/app/helpers/date-format-distance-to-now.js b/app/helpers/date-format-distance-to-now.js new file mode 100644 index 00000000000..0749aeb41be --- /dev/null +++ b/app/helpers/date-format-distance-to-now.js @@ -0,0 +1,9 @@ +import { helper } from '@ember/component/helper'; + +import formatDistanceToNow from 'date-fns/formatDistanceToNow'; + +export default helper(function ([date], options) { + if (date) { + return formatDistanceToNow(date, { ...options }); + } +}); diff --git a/app/helpers/date-format-iso.js b/app/helpers/date-format-iso.js new file mode 100644 index 00000000000..a6cd33dc1e8 --- /dev/null +++ b/app/helpers/date-format-iso.js @@ -0,0 +1,9 @@ +import { helper } from '@ember/component/helper'; + +import formatISO from 'date-fns/formatISO'; + +export default helper(function ([date], options) { + if (date) { + return formatISO(date, { ...options }); + } +}); diff --git a/app/helpers/date-format.js b/app/helpers/date-format.js new file mode 100644 index 00000000000..ddc0dd29ae1 --- /dev/null +++ b/app/helpers/date-format.js @@ -0,0 +1,9 @@ +import { helper } from '@ember/component/helper'; + +import format from 'date-fns/format'; + +export default helper(function ([date, pattern], options) { + if (date) { + return format(date, pattern, { ...options }); + } +}); diff --git a/app/services/chartjs.js b/app/services/chartjs.js index 12129e5ccec..52b9651b821 100644 --- a/app/services/chartjs.js +++ b/app/services/chartjs.js @@ -1,10 +1,57 @@ +import { assert } from '@ember/debug'; import Service from '@ember/service'; +import addDays from 'date-fns/addDays'; +import differenceInDays from 'date-fns/differenceInDays'; +import endOfDay from 'date-fns/endOfDay'; +import format from 'date-fns/format'; +import startOfDay from 'date-fns/startOfDay'; import { task } from 'ember-concurrency'; export default class ChartJsLoader extends Service { @(task(function* () { let Chart = yield import('chart.js').then(module => module.default); + + Chart._adapters._date.override({ + _id: 'date-fns', // DEBUG + + formats() { + return { day: 'MMM d' }; + }, + + parse(value) { + if (value === null || value === undefined) { + return null; + } + assert('`value` must be a `Date`', value instanceof Date); + return !isNaN(value) ? value.getTime() : null; + }, + + format(time, fmt) { + return format(time, fmt, this.options); + }, + + add(time, amount, unit) { + assert('This basic Chart.js adapter only supports `unit: day`', unit === 'day'); + return addDays(time, amount); + }, + + diff(max, min, unit) { + assert('This basic Chart.js adapter only supports `unit: day`', unit === 'day'); + return differenceInDays(max, min); + }, + + startOf(time, unit) { + assert('This basic Chart.js adapter only supports `unit: day`', unit === 'day'); + return startOfDay(time); + }, + + endOf(time, unit) { + assert('This basic Chart.js adapter only supports `unit: day`', unit === 'day'); + return endOfDay(time); + }, + }); + Chart.platform.disableCSSInjection = true; return Chart; }).drop()) diff --git a/app/templates/crate/version.hbs b/app/templates/crate/version.hbs index ec6d4d4b765..3fc16718859 100644 --- a/app/templates/crate/version.hbs +++ b/app/templates/crate/version.hbs @@ -84,7 +84,9 @@
Last Updated
-
{{moment-from-now this.crate.updated_at}}
+
+ {{date-format-distance-to-now this.crate.updated_at addSuffix=true}} +
{{#if this.currentVersion.crate_size}} @@ -176,7 +178,7 @@ {{ version.num }} - {{moment-format version.created_at 'll'}} + {{date-format version.created_at "PP"}} {{#if version.yanked}} yanked {{/if}} diff --git a/app/templates/crate/versions.hbs b/app/templates/crate/versions.hbs index bb3f491f168..d404d932d79 100644 --- a/app/templates/crate/versions.hbs +++ b/app/templates/crate/versions.hbs @@ -3,7 +3,7 @@ All {{ this.model.versions.length }} versions of {{ this.model.name }} since - {{moment-format this.model.created_at 'LL'}} + {{date-format this.model.created_at 'PPP'}}
@@ -12,7 +12,7 @@
{{ version.num }} - {{moment-format version.created_at 'LL'}} + {{date-format version.created_at 'PPP'}} {{#if version.yanked}} yanked {{/if}} diff --git a/app/templates/dashboard.hbs b/app/templates/dashboard.hbs index 728d43ecda2..bb270d46a19 100644 --- a/app/templates/dashboard.hbs +++ b/app/templates/dashboard.hbs @@ -54,7 +54,7 @@ {{ version.num }} - {{moment-from-now version.created_at}} + {{date-format-distance-to-now version.created_at addSuffix=true}}
{{/each}} diff --git a/ember-cli-build.js b/ember-cli-build.js index ff3b93a91ca..15797ed9171 100644 --- a/ember-cli-build.js +++ b/ember-cli-build.js @@ -28,6 +28,7 @@ module.exports = function (defaults) { autoImport: { webpack: { externals: { + // prevent Chart.js from bundling Moment.js moment: 'moment', }, }, diff --git a/package.json b/package.json index 2849392283a..4cbf6acd763 100644 --- a/package.json +++ b/package.json @@ -41,6 +41,7 @@ "@sentry/integrations": "6.0.3", "chart.js": "2.9.4", "copy-text-to-clipboard": "3.0.0", + "date-fns": "2.16.1", "fastboot-app-server": "3.0.0", "morgan": "1.10.0", "pretty-bytes": "5.5.0" @@ -73,7 +74,6 @@ "ember-cli-inject-live-reload": "2.0.2", "ember-cli-meta-tags": "6.1.2", "ember-cli-mirage": "2.0.1", - "ember-cli-moment-shim": "3.8.0", "ember-cli-notifications": "6.3.2", "ember-cli-sri": "2.1.1", "ember-cli-terser": "4.0.1", @@ -91,7 +91,6 @@ "ember-load-initializers": "2.1.2", "ember-maybe-import-regenerator": "0.1.6", "ember-modifier": "2.1.1", - "ember-moment": "8.0.1", "ember-page-title": "6.2.0", "ember-prism": "0.9.0", "ember-promise-helpers": "1.0.9", diff --git a/tests/acceptance/api-token-test.js b/tests/acceptance/api-token-test.js index bae5e2fd296..299740991aa 100644 --- a/tests/acceptance/api-token-test.js +++ b/tests/acceptance/api-token-test.js @@ -46,7 +46,7 @@ module('Acceptance | api-tokens', function (hooks) { let [row1, row2] = findAll('[data-test-api-token]'); assert.dom('[data-test-name]', row1).hasText('BAR'); - assert.dom('[data-test-created-at]', row1).hasText('Created 18 hours ago'); + assert.dom('[data-test-created-at]', row1).hasText('Created about 18 hours ago'); assert.dom('[data-test-last-used-at]', row1).hasText('Never used'); assert.dom('[data-test-save-token-button]', row1).doesNotExist(); assert.dom('[data-test-revoke-token-button]', row1).exists(); diff --git a/tests/acceptance/crate-test.js b/tests/acceptance/crate-test.js index 93dc1e0fbd9..09a52cc9a5a 100644 --- a/tests/acceptance/crate-test.js +++ b/tests/acceptance/crate-test.js @@ -100,7 +100,7 @@ module('Acceptance | crate page', function (hooks) { await visit('/crates/nanomsg'); await click('[data-test-all-versions-link]'); - assert.dom('[data-test-page-description]').hasText(/All 13\s+versions of nanomsg since\s+December \d+, 2014/); + assert.dom('[data-test-page-description]').hasText(/All 13\s+versions of nanomsg since\s+December \d+th, 2014/); }); test('navigating to the reverse dependencies page', async function (assert) { diff --git a/tests/acceptance/invites-test.js b/tests/acceptance/invites-test.js index 988129de8bc..04bcd1766ad 100644 --- a/tests/acceptance/invites-test.js +++ b/tests/acceptance/invites-test.js @@ -47,7 +47,7 @@ module('Acceptance | /me/pending-invites', function (hooks) { assert.equal(currentURL(), '/me/pending-invites'); assert.dom('[data-test-invite]').exists({ count: 2 }); assert.dom('[data-test-invite="nanomsg"]').exists(); - assert.dom('[data-test-invite="nanomsg"] [data-test-date]').hasText('a year ago'); + assert.dom('[data-test-invite="nanomsg"] [data-test-date]').hasText('11 months ago'); assert.dom('[data-test-invite="nanomsg"] [data-test-accept-button]').exists(); assert.dom('[data-test-invite="nanomsg"] [data-test-decline-button]').exists(); assert.dom('[data-test-invite="ember-rs"]').exists(); @@ -55,7 +55,7 @@ module('Acceptance | /me/pending-invites', function (hooks) { assert.dom('[data-test-invite="ember-rs"] [data-test-crate-link]').hasAttribute('href', '/crates/ember-rs'); assert.dom('[data-test-invite="ember-rs"] [data-test-inviter-link]').hasText('wycats'); assert.dom('[data-test-invite="ember-rs"] [data-test-inviter-link]').hasAttribute('href', '/users/wycats'); - assert.dom('[data-test-invite="ember-rs"] [data-test-date]').hasText('in 3 years'); + assert.dom('[data-test-invite="ember-rs"] [data-test-date]').hasText('in about 3 years'); assert.dom('[data-test-invite="ember-rs"] [data-test-accept-button]').exists(); assert.dom('[data-test-invite="ember-rs"] [data-test-decline-button]').exists(); assert.dom('[data-test-error-message]').doesNotExist(); diff --git a/yarn.lock b/yarn.lock index aa15ca34f26..e642a93c781 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5627,6 +5627,11 @@ data-urls@^2.0.0: whatwg-mimetype "^2.3.0" whatwg-url "^8.0.0" +date-fns@2.16.1: + version "2.16.1" + resolved "https://registry.yarnpkg.com/date-fns/-/date-fns-2.16.1.tgz#05775792c3f3331da812af253e1a935851d3834b" + integrity sha512-sAJVKx/FqrLYHAQeN7VpJrPhagZc9R4ImZIWYRFZaaohR3KzmuK88touwsSwSVT8Qcbd4zoDsnGfX4GFB4imyQ== + date-time@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/date-time/-/date-time-2.1.0.tgz#0286d1b4c769633b3ca13e1e62558d2dbdc2eba2" @@ -6101,7 +6106,7 @@ ember-cli-babel@7.21.0: rimraf "^3.0.1" semver "^5.5.0" -ember-cli-babel@7.23.1, ember-cli-babel@^7.0.0, ember-cli-babel@^7.1.0, ember-cli-babel@^7.1.2, ember-cli-babel@^7.1.3, ember-cli-babel@^7.10.0, ember-cli-babel@^7.11.1, ember-cli-babel@^7.12.0, ember-cli-babel@^7.13.0, ember-cli-babel@^7.18.0, ember-cli-babel@^7.19.0, ember-cli-babel@^7.20.5, ember-cli-babel@^7.21.0, ember-cli-babel@^7.22.1, ember-cli-babel@^7.23.0, ember-cli-babel@^7.4.0, ember-cli-babel@^7.5.0, ember-cli-babel@^7.7.3: +ember-cli-babel@7.23.1, ember-cli-babel@^7.0.0, ember-cli-babel@^7.1.0, ember-cli-babel@^7.1.3, ember-cli-babel@^7.10.0, ember-cli-babel@^7.11.1, ember-cli-babel@^7.12.0, ember-cli-babel@^7.13.0, ember-cli-babel@^7.18.0, ember-cli-babel@^7.19.0, ember-cli-babel@^7.20.5, ember-cli-babel@^7.21.0, ember-cli-babel@^7.22.1, ember-cli-babel@^7.23.0, ember-cli-babel@^7.4.0, ember-cli-babel@^7.5.0, ember-cli-babel@^7.7.3: version "7.23.1" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-7.23.1.tgz#d1517228ede08a5d4b045c78a7429728e956b30b" integrity sha512-qYggmt3hRs6QJ6cRkww3ahMpyP8IEV2KFrIRO/Z6hu9MkE/8Y28Xd5NjQl6fPV3oLoG0vwuHzhNe3Jr7Wec8zw== @@ -6133,7 +6138,7 @@ ember-cli-babel@7.23.1, ember-cli-babel@^7.0.0, ember-cli-babel@^7.1.0, ember-cl rimraf "^3.0.1" semver "^5.5.0" -ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.16.0, ember-cli-babel@^6.3.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.7.2, ember-cli-babel@^6.8.1: +ember-cli-babel@^6.0.0-beta.4, ember-cli-babel@^6.16.0, ember-cli-babel@^6.3.0, ember-cli-babel@^6.6.0, ember-cli-babel@^6.8.1: version "6.18.0" resolved "https://registry.yarnpkg.com/ember-cli-babel/-/ember-cli-babel-6.18.0.tgz#3f6435fd275172edeff2b634ee7b29ce74318957" integrity sha512-7ceC8joNYxY2wES16iIBlbPSxwKDBhYwC8drU3ZEvuPDMwVv1KzxCNu1fvxyFEBWhwaRNTUxSCsEVoTd9nosGA== @@ -6337,11 +6342,6 @@ ember-cli-htmlbars@^4.0.9, ember-cli-htmlbars@^4.2.0, ember-cli-htmlbars@^4.2.2, strip-bom "^4.0.0" walk-sync "^2.0.2" -ember-cli-import-polyfill@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/ember-cli-import-polyfill/-/ember-cli-import-polyfill-0.2.0.tgz#c1a08a8affb45c97b675926272fe78cf4ca166f2" - integrity sha1-waCKiv+0XJe2dZJicv54z0yhZvI= - ember-cli-inject-live-reload@2.0.2: version "2.0.2" resolved "https://registry.yarnpkg.com/ember-cli-inject-live-reload/-/ember-cli-inject-live-reload-2.0.2.tgz#95edb543b386239d35959e5ea9579f5382976ac7" @@ -6386,23 +6386,6 @@ ember-cli-mirage@2.0.1: lodash-es "^4.17.11" miragejs "^0.1.31" -ember-cli-moment-shim@3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ember-cli-moment-shim/-/ember-cli-moment-shim-3.8.0.tgz#dc61bbac9dce4963394e60dd42726d4ba38e2bc1" - integrity sha512-dN5ImjrjZevEqB7xhwFXaPWwxdKGSFiR1kqy9gDVB+A5EGnhCL1uveKugcyJE/MICVhXUAHBUu6G2LFWEPF2YA== - dependencies: - broccoli-funnel "^2.0.0" - broccoli-merge-trees "^2.0.0" - broccoli-source "^1.1.0" - broccoli-stew "^1.5.0" - chalk "^1.1.3" - ember-cli-babel "^7.1.2" - ember-cli-import-polyfill "^0.2.0" - ember-get-config "" - lodash.defaults "^4.2.0" - moment "^2.19.3" - moment-timezone "^0.5.13" - ember-cli-node-assets@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/ember-cli-node-assets/-/ember-cli-node-assets-0.2.2.tgz#d2d55626e7cc6619f882d7fe55751f9266022708" @@ -6802,13 +6785,6 @@ ember-export-application-global@2.0.1: resolved "https://registry.yarnpkg.com/ember-export-application-global/-/ember-export-application-global-2.0.1.tgz#b120a70e322ab208defc9e2daebe8d0dfc2dcd46" integrity sha512-B7wiurPgsxsSGzJuPFkpBWnaeuCu2PGpG2BjyrfA1VcL7//o+5RSnZqiCEY326y7qmxb2GoCgo0ft03KBU0rRw== -ember-factory-for-polyfill@^1.3.1: - version "1.3.1" - resolved "https://registry.yarnpkg.com/ember-factory-for-polyfill/-/ember-factory-for-polyfill-1.3.1.tgz#b446ed64916d293c847a4955240eb2c993b86eae" - integrity sha512-y3iG2iCzH96lZMTWQw6LWNLAfOmDC4pXKbZP6FxG8lt7GGaNFkZjwsf+Z5GAe7kxfD7UG4lVkF7x37K82rySGA== - dependencies: - ember-cli-version-checker "^2.1.0" - ember-fetch@8.0.4: version "8.0.4" resolved "https://registry.yarnpkg.com/ember-fetch/-/ember-fetch-8.0.4.tgz#b9a3239e9d188ada18a4448ccb4fea2a091e3952" @@ -6828,7 +6804,7 @@ ember-fetch@8.0.4: node-fetch "^2.6.1" whatwg-fetch "^3.4.0" -ember-get-config@, ember-get-config@0.2.4, ember-get-config@^0.2.4, "ember-get-config@^0.2.4 || ^0.3.0": +ember-get-config@0.2.4, ember-get-config@^0.2.4, "ember-get-config@^0.2.4 || ^0.3.0": version "0.2.4" resolved "https://registry.yarnpkg.com/ember-get-config/-/ember-get-config-0.2.4.tgz#118492a2a03d73e46004ed777928942021fe1ecd" integrity sha1-EYSSoqA9c+RgBO13eSiUICH+Hs0= @@ -6836,14 +6812,6 @@ ember-get-config@, ember-get-config@0.2.4, ember-get-config@^0.2.4, "ember-get-c broccoli-file-creator "^1.1.1" ember-cli-babel "^6.3.0" -ember-getowner-polyfill@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/ember-getowner-polyfill/-/ember-getowner-polyfill-2.2.0.tgz#38e7dccbcac69d5ec694000329ec0b2be651d2b2" - integrity sha512-rwGMJgbGzxIAiWYjdpAh04Abvt0s3HuS/VjHzUFhVyVg2pzAuz45B9AzOxYXzkp88vFC7FPaiA4kE8NxNk4A4Q== - dependencies: - ember-cli-version-checker "^2.1.0" - ember-factory-for-polyfill "^1.3.1" - ember-in-element-polyfill@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/ember-in-element-polyfill/-/ember-in-element-polyfill-1.0.0.tgz#10365af6fe31bc59e71ec463ed209d4ba4caecda" @@ -6891,15 +6859,6 @@ ember-load-initializers@2.1.2: ember-cli-babel "^7.13.0" ember-cli-typescript "^2.0.2" -ember-macro-helpers@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/ember-macro-helpers/-/ember-macro-helpers-4.2.2.tgz#dfb28b2b21f9fd49ade599f68c99e73ce5692cdc" - integrity sha512-E46MnpjMu+ZXRw/5A1tADZKFJADGpSAcsclcaBNfV/B1aRPV3PTTnCpDvYC1wfJ4kwwUh0DRLDH/OpBv+/41pQ== - dependencies: - ember-cli-babel "^7.7.3" - ember-cli-string-utils "^1.1.0" - ember-cli-test-info "^1.0.0" - ember-maybe-import-regenerator@0.1.6, ember-maybe-import-regenerator@^0.1.6: version "0.1.6" resolved "https://registry.yarnpkg.com/ember-maybe-import-regenerator/-/ember-maybe-import-regenerator-0.1.6.tgz#35d41828afa6d6a59bc0da3ce47f34c573d776ca" @@ -6931,15 +6890,6 @@ ember-modifier@2.1.1, ember-modifier@^2.1.0, ember-modifier@^2.1.1: ember-destroyable-polyfill "^2.0.2" ember-modifier-manager-polyfill "^1.2.0" -ember-moment@8.0.1: - version "8.0.1" - resolved "https://registry.yarnpkg.com/ember-moment/-/ember-moment-8.0.1.tgz#3a11929efeb7fb6bc5c1cc2c9e4c43bd9c500f80" - integrity sha512-YmhcMkH4OUwk1ynypxgWb8/O0E+v2HaZ49rk7yPbsf7EkzAyHn2tXrQPbFW4eWCKgHl+VoRoocLU9ShSIDI7qg== - dependencies: - ember-cli-babel "^6.7.2" - ember-getowner-polyfill "^2.2.0" - ember-macro-helpers "^4.2.2" - ember-page-title@6.2.0: version "6.2.0" resolved "https://registry.yarnpkg.com/ember-page-title/-/ember-page-title-6.2.0.tgz#d79f7422299ebb8f8ac819399596e8f54f01a0e9" @@ -10104,7 +10054,7 @@ lodash.debounce@^3.1.1: dependencies: lodash._getnative "^3.0.0" -lodash.defaults@^4.0.1, lodash.defaults@^4.2.0: +lodash.defaults@^4.0.1: version "4.2.0" resolved "https://registry.yarnpkg.com/lodash.defaults/-/lodash.defaults-4.2.0.tgz#d09178716ffea4dde9e5fb7b37f6f0802274580c" integrity sha1-0JF4cW/+pN3p5ft7N/bwgCJ0WAw= @@ -10767,14 +10717,7 @@ mktemp@~0.4.0: resolved "https://registry.yarnpkg.com/mktemp/-/mktemp-0.4.0.tgz#6d0515611c8a8c84e484aa2000129b98e981ff0b" integrity sha1-bQUVYRyKjITkhKogABKbmOmB/ws= -moment-timezone@^0.5.13: - version "0.5.31" - resolved "https://registry.yarnpkg.com/moment-timezone/-/moment-timezone-0.5.31.tgz#9c40d8c5026f0c7ab46eda3d63e49c155148de05" - integrity sha512-+GgHNg8xRhMXfEbv81iDtrVeTcWt0kWmTEY1XQK14dICTXnWJnT0dxdlPspwqF3keKMVPXwayEsk1DI0AA/jdA== - dependencies: - moment ">= 2.9.0" - -"moment@>= 2.9.0", moment@^2.10.2, moment@^2.19.3: +moment@^2.10.2: version "2.29.1" resolved "https://registry.yarnpkg.com/moment/-/moment-2.29.1.tgz#b2be769fa31940be9eeea6469c075e35006fa3d3" integrity sha512-kHmoybcPV8Sqy59DwNDY3Jefr64lK/by/da0ViFcuA4DH0vQg5Q6Ze5VimxkfQNSC+Mls/Kx53s7TjP1RhFEDQ==