Skip to content

Commit 86d3657

Browse files
committed
Auto merge of #3222 - Turbo87:date-fns, r=locks
Replace Moment.js with date-fns see https://momentjs.com/docs/#/-project-status/ ### Before - cargo.js: 337.66 KB (46.46 KB gzipped) - vendor.js: 994.86 KB (267.9 KB gzipped) ### After - cargo.js: 333.25 KB (46.21 KB gzipped) - vendor.js: 928.56 KB (251.39 KB gzipped) r? `@locks`
2 parents c036210 + 4be3870 commit 86d3657

19 files changed

+112
-91
lines changed

app/components/crate-row.hbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@
3535
{{svg-jar "latest-updates" height="32" width="32"}}
3636
<span>
3737
<abbr title="The last time crate was updated">Updated:</abbr>
38-
<time title="Last updated: {{ @crate.updated_at }}" datetime="{{ moment-format @crate.updated_at 'YYYY-MM-DDTHH:mm:ssZ' }}" data-test-updated-at>
39-
{{ moment-from-now @crate.updated_at }}
38+
<time title="Last updated: {{ @crate.updated_at }}" datetime="{{date-format-iso @crate.updated_at}}" data-test-updated-at>
39+
{{date-format-distance-to-now @crate.updated_at addSuffix=true}}
4040
</time>
4141
</span>
4242
</div>

app/components/crate-row.module.css

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
padding-top: 5px;
88
display: flex;
99
flex-direction: column;
10-
width: 75%;
10+
width: 70%;
1111
}
1212

1313
.name {
@@ -51,7 +51,7 @@
5151
}
5252

5353
.stats {
54-
width: 25%;
54+
width: 30%;
5555
color: var(--main-color-light);
5656
}
5757

app/components/download-graph.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ export default class DownloadGraph extends Component {
3030
padding: 10,
3131
},
3232
scales: {
33-
xAxes: [{ type: 'time', time: { stepSize: 7, tooltipFormat: 'MMM D', unit: 'day' } }],
33+
xAxes: [{ type: 'time', time: { stepSize: 7, tooltipFormat: 'MMM d', unit: 'day' } }],
3434
yAxes: [{ stacked: true, ticks: { min: 0, precision: 0 } }],
3535
},
3636
tooltips: {

app/components/pending-owner-invite-row.hbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -26,11 +26,11 @@
2626
</p>
2727
</div>
2828
<div local-class="date-column" data-test-date>
29-
{{moment-from-now @invite.created_at}}
29+
{{date-format-distance-to-now @invite.created_at addSuffix=true}}
3030
</div>
3131
<div>
3232
<button type="button" local-class="accept-button" data-test-accept-button {{on "click" (perform this.acceptInvitationTask)}}>Accept</button>
3333
<button type="button" local-class="decline-button" data-test-decline-button {{on "click" (perform this.declineInvitationTask)}}>Decline</button>
3434
</div>
3535
</div>
36-
{{/if}}
36+
{{/if}}

app/components/settings/api-tokens.hbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -62,11 +62,11 @@
6262

6363
<div local-class="dates">
6464
<span title={{token.created_at}} local-class="created-at" data-test-created-at>
65-
Created {{moment-from-now token.created_at}}
65+
Created {{date-format-distance-to-now token.created_at addSuffix=true}}
6666
</span>
6767
<span title={{token.last_used_at}} local-class="last-used-at" data-test-last-used-at>
6868
{{#if token.last_used_at}}
69-
Last used {{moment-from-now token.last_used_at}}
69+
Last used {{date-format-distance-to-now token.last_used_at addSuffix=true}}
7070
{{else}}
7171
Never used
7272
{{/if}}

app/controllers/crate/version.js

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,8 @@ import { computed } from '@ember/object';
33
import { alias, gt, readOnly } from '@ember/object/computed';
44
import { inject as service } from '@ember/service';
55

6+
import subDays from 'date-fns/subDays';
67
import { task } from 'ember-concurrency';
7-
import moment from 'moment';
88

99
import ajax from '../../utils/ajax';
1010

@@ -53,9 +53,11 @@ export default class CrateVersionController extends Controller {
5353

5454
let dates = {};
5555
let versions = [];
56+
57+
let now = new Date();
5658
for (let i = 0; i < 90; i++) {
57-
let now = moment().subtract(i, 'days');
58-
dates[now.toISOString().slice(0, 10)] = { date: now, cnt: {} };
59+
let date = subDays(now, i);
60+
dates[date.toISOString().slice(0, 10)] = { date, cnt: {} };
5961
}
6062

6163
downloads.forEach(d => {
@@ -95,7 +97,7 @@ export default class CrateVersionController extends Controller {
9597
}
9698
let data = [headers];
9799
for (let date in dates) {
98-
let row = [dates[date].date.toDate()];
100+
let row = [dates[date].date];
99101
for (let version of versions) {
100102
row.push(dates[date].cnt[version.id] || 0);
101103
}
Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { helper } from '@ember/component/helper';
2+
3+
import formatDistanceToNow from 'date-fns/formatDistanceToNow';
4+
5+
export default helper(function ([date], options) {
6+
if (date) {
7+
return formatDistanceToNow(date, { ...options });
8+
}
9+
});

app/helpers/date-format-iso.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { helper } from '@ember/component/helper';
2+
3+
import formatISO from 'date-fns/formatISO';
4+
5+
export default helper(function ([date], options) {
6+
if (date) {
7+
return formatISO(date, { ...options });
8+
}
9+
});

app/helpers/date-format.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
import { helper } from '@ember/component/helper';
2+
3+
import format from 'date-fns/format';
4+
5+
export default helper(function ([date, pattern], options) {
6+
if (date) {
7+
return format(date, pattern, { ...options });
8+
}
9+
});

app/services/chartjs.js

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,57 @@
1+
import { assert } from '@ember/debug';
12
import Service from '@ember/service';
23

4+
import addDays from 'date-fns/addDays';
5+
import differenceInDays from 'date-fns/differenceInDays';
6+
import endOfDay from 'date-fns/endOfDay';
7+
import format from 'date-fns/format';
8+
import startOfDay from 'date-fns/startOfDay';
39
import { task } from 'ember-concurrency';
410

511
export default class ChartJsLoader extends Service {
612
@(task(function* () {
713
let Chart = yield import('chart.js').then(module => module.default);
14+
15+
Chart._adapters._date.override({
16+
_id: 'date-fns', // DEBUG
17+
18+
formats() {
19+
return { day: 'MMM d' };
20+
},
21+
22+
parse(value) {
23+
if (value === null || value === undefined) {
24+
return null;
25+
}
26+
assert('`value` must be a `Date`', value instanceof Date);
27+
return !isNaN(value) ? value.getTime() : null;
28+
},
29+
30+
format(time, fmt) {
31+
return format(time, fmt, this.options);
32+
},
33+
34+
add(time, amount, unit) {
35+
assert('This basic Chart.js adapter only supports `unit: day`', unit === 'day');
36+
return addDays(time, amount);
37+
},
38+
39+
diff(max, min, unit) {
40+
assert('This basic Chart.js adapter only supports `unit: day`', unit === 'day');
41+
return differenceInDays(max, min);
42+
},
43+
44+
startOf(time, unit) {
45+
assert('This basic Chart.js adapter only supports `unit: day`', unit === 'day');
46+
return startOfDay(time);
47+
},
48+
49+
endOf(time, unit) {
50+
assert('This basic Chart.js adapter only supports `unit: day`', unit === 'day');
51+
return endOfDay(time);
52+
},
53+
});
54+
855
Chart.platform.disableCSSInjection = true;
956
return Chart;
1057
}).drop())

app/templates/crate/version.hbs

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -84,7 +84,9 @@
8484
<div local-class='top'>
8585
<div>
8686
<div local-class='last-update'>Last Updated</div>
87-
<div local-class='{{if this.currentVersion.crate_size 'date-with-small-margin-bot' 'date'}}'>{{moment-from-now this.crate.updated_at}}</div>
87+
<div local-class='{{if this.currentVersion.crate_size 'date-with-small-margin-bot' 'date'}}'>
88+
{{date-format-distance-to-now this.crate.updated_at addSuffix=true}}
89+
</div>
8890
</div>
8991

9092
{{#if this.currentVersion.crate_size}}
@@ -176,7 +178,7 @@
176178
<LinkTo @route="crate.version" @model={{version.num}} data-test-version-link={{version.num}}>
177179
{{ version.num }}
178180
</LinkTo>
179-
{{moment-format version.created_at 'll'}}
181+
{{date-format version.created_at "PP"}}
180182
{{#if version.yanked}}
181183
<span local-class='yanked'>yanked</span>
182184
{{/if}}

app/templates/crate/versions.hbs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
<span local-class="page-description" data-test-page-description>
44
All <strong>{{ this.model.versions.length }}</strong>
55
versions of <strong>{{ this.model.name }}</strong> since
6-
{{moment-format this.model.created_at 'LL'}}
6+
{{date-format this.model.created_at 'PPP'}}
77
</span>
88

99
<div local-class="list">
@@ -12,7 +12,7 @@
1212
<div>
1313
<LinkTo @route="crate.version" @model={{version.num}}>{{ version.num }}</LinkTo>
1414

15-
<span local-class="date">{{moment-format version.created_at 'LL'}}</span>
15+
<span local-class="date">{{date-format version.created_at 'PPP'}}</span>
1616
{{#if version.yanked}}
1717
<span local-class='yanked'>yanked</span>
1818
{{/if}}

app/templates/dashboard.hbs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@
5454
<span local-class="feed-version">{{ version.num }}</span>
5555
</LinkTo>
5656
<span local-class="feed-date">
57-
{{moment-from-now version.created_at}}
57+
{{date-format-distance-to-now version.created_at addSuffix=true}}
5858
</span>
5959
</div>
6060
{{/each}}

ember-cli-build.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ module.exports = function (defaults) {
2828
autoImport: {
2929
webpack: {
3030
externals: {
31+
// prevent Chart.js from bundling Moment.js
3132
moment: 'moment',
3233
},
3334
},

package.json

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@
4141
"@sentry/integrations": "6.0.3",
4242
"chart.js": "2.9.4",
4343
"copy-text-to-clipboard": "3.0.0",
44+
"date-fns": "2.16.1",
4445
"fastboot-app-server": "3.0.0",
4546
"morgan": "1.10.0",
4647
"pretty-bytes": "5.5.0"
@@ -73,7 +74,6 @@
7374
"ember-cli-inject-live-reload": "2.0.2",
7475
"ember-cli-meta-tags": "6.1.2",
7576
"ember-cli-mirage": "2.0.1",
76-
"ember-cli-moment-shim": "3.8.0",
7777
"ember-cli-notifications": "6.3.2",
7878
"ember-cli-sri": "2.1.1",
7979
"ember-cli-terser": "4.0.1",
@@ -91,7 +91,6 @@
9191
"ember-load-initializers": "2.1.2",
9292
"ember-maybe-import-regenerator": "0.1.6",
9393
"ember-modifier": "2.1.1",
94-
"ember-moment": "8.0.1",
9594
"ember-page-title": "6.2.0",
9695
"ember-prism": "0.9.0",
9796
"ember-promise-helpers": "1.0.9",

tests/acceptance/api-token-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ module('Acceptance | api-tokens', function (hooks) {
4646

4747
let [row1, row2] = findAll('[data-test-api-token]');
4848
assert.dom('[data-test-name]', row1).hasText('BAR');
49-
assert.dom('[data-test-created-at]', row1).hasText('Created 18 hours ago');
49+
assert.dom('[data-test-created-at]', row1).hasText('Created about 18 hours ago');
5050
assert.dom('[data-test-last-used-at]', row1).hasText('Never used');
5151
assert.dom('[data-test-save-token-button]', row1).doesNotExist();
5252
assert.dom('[data-test-revoke-token-button]', row1).exists();

tests/acceptance/crate-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -100,7 +100,7 @@ module('Acceptance | crate page', function (hooks) {
100100
await visit('/crates/nanomsg');
101101
await click('[data-test-all-versions-link]');
102102

103-
assert.dom('[data-test-page-description]').hasText(/All 13\s+versions of nanomsg since\s+December \d+, 2014/);
103+
assert.dom('[data-test-page-description]').hasText(/All 13\s+versions of nanomsg since\s+December \d+th, 2014/);
104104
});
105105

106106
test('navigating to the reverse dependencies page', async function (assert) {

tests/acceptance/invites-test.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -47,15 +47,15 @@ module('Acceptance | /me/pending-invites', function (hooks) {
4747
assert.equal(currentURL(), '/me/pending-invites');
4848
assert.dom('[data-test-invite]').exists({ count: 2 });
4949
assert.dom('[data-test-invite="nanomsg"]').exists();
50-
assert.dom('[data-test-invite="nanomsg"] [data-test-date]').hasText('a year ago');
50+
assert.dom('[data-test-invite="nanomsg"] [data-test-date]').hasText('11 months ago');
5151
assert.dom('[data-test-invite="nanomsg"] [data-test-accept-button]').exists();
5252
assert.dom('[data-test-invite="nanomsg"] [data-test-decline-button]').exists();
5353
assert.dom('[data-test-invite="ember-rs"]').exists();
5454
assert.dom('[data-test-invite="ember-rs"] [data-test-crate-link]').hasText('ember-rs');
5555
assert.dom('[data-test-invite="ember-rs"] [data-test-crate-link]').hasAttribute('href', '/crates/ember-rs');
5656
assert.dom('[data-test-invite="ember-rs"] [data-test-inviter-link]').hasText('wycats');
5757
assert.dom('[data-test-invite="ember-rs"] [data-test-inviter-link]').hasAttribute('href', '/users/wycats');
58-
assert.dom('[data-test-invite="ember-rs"] [data-test-date]').hasText('in 3 years');
58+
assert.dom('[data-test-invite="ember-rs"] [data-test-date]').hasText('in about 3 years');
5959
assert.dom('[data-test-invite="ember-rs"] [data-test-accept-button]').exists();
6060
assert.dom('[data-test-invite="ember-rs"] [data-test-decline-button]').exists();
6161
assert.dom('[data-test-error-message]').doesNotExist();

0 commit comments

Comments
 (0)