Skip to content

Commit bebfe95

Browse files
committed
models/crate: Decouple getters from loadVersionsTask
This decouple `versionIdsByDate`, `versionIdsBySemver` and `versionsObj` getters from `loadVersionsTask` and computes values from all loaded versions.
1 parent a04288b commit bebfe95

File tree

2 files changed

+12
-17
lines changed

2 files changed

+12
-17
lines changed

app/controllers/crate/versions.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,6 @@ export default class SearchController extends Controller {
1616
get sortedVersions() {
1717
let { versionIdsBySemver, versionIdsByDate, versionsObj: versions } = this.crate;
1818

19-
return (this.sort === 'semver' ? versionIdsBySemver : versionIdsByDate).map(id => versions[id]);
19+
return (this.sort === 'semver' ? versionIdsBySemver : versionIdsByDate).map(id => versions.get(id));
2020
}
2121
}

app/models/crate.js

Lines changed: 11 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -38,30 +38,25 @@ export default class Crate extends Model {
3838
@hasMany('dependency', { async: true, inverse: null }) reverse_dependencies;
3939

4040
@cached get versionIdsBySemver() {
41-
let { last } = this.loadVersionsTask;
42-
assert('`loadVersionsTask.perform()` must be called before calling `versionIdsBySemver`', last != null);
43-
let versions = last?.value ?? [];
44-
return versions
45-
.slice()
41+
let versions = this.versionsObj.values();
42+
return Array.from(versions)
4643
.sort(compareVersionBySemver)
4744
.map(v => v.id);
4845
}
4946

5047
@cached get versionIdsByDate() {
51-
let { last } = this.loadVersionsTask;
52-
assert('`loadVersionsTask.perform()` must be called before calling `versionIdsByDate`', last != null);
53-
let versions = last?.value ?? [];
54-
return versions
55-
.slice()
48+
let versions = this.versionsObj.values();
49+
return Array.from(versions)
5650
.sort(compareVersionByDate)
5751
.map(v => v.id);
5852
}
5953

60-
@cached get versionsObj() {
61-
let { last } = this.loadVersionsTask;
62-
assert('`loadVersionsTask.perform()` must be called before calling `versionsObj`', last != null);
63-
let versions = last?.value ?? [];
64-
return Object.fromEntries(versions.slice().map(v => [v.id, v]));
54+
/** @return {Map<number, import("../models/version").default>} */
55+
@cached
56+
get versionsObj() {
57+
let versionsRef = this.hasMany('versions');
58+
let values = versionsRef.value();
59+
return new Map(values?.map(ref => [ref.id, ref]));
6560
}
6661

6762
/** @return {Map<string, import("../models/version").default>} */
@@ -76,7 +71,7 @@ export default class Crate extends Model {
7671
let map = new Map();
7772
let { versionsObj: versions, versionIdsBySemver } = this;
7873
for (let id of versionIdsBySemver) {
79-
let { releaseTrack, isPrerelease, yanked } = versions[id];
74+
let { releaseTrack, isPrerelease, yanked } = versions.get(id);
8075
if (releaseTrack && !isPrerelease && !yanked && !map.has(releaseTrack)) {
8176
map.set(releaseTrack, id);
8277
}

0 commit comments

Comments
 (0)