diff --git a/mirage/serializers/crate.js b/mirage/serializers/crate.js index 9ad52c25a70..12a38b32918 100644 --- a/mirage/serializers/crate.js +++ b/mirage/serializers/crate.js @@ -53,10 +53,18 @@ export default BaseSerializer.extend({ _adjust(hash) { let versions = this.schema.versions.where({ crateId: hash.id }); assert(`crate \`${hash.name}\` has no associated versions`, versions.length !== 0); - versions = versions.filter(it => !it.yanked); - let versionNums = versions.models.map(it => it.num); + let versionsByNum = Object.fromEntries(versions.models.map(it => [it.num, it])); + let versionNums = Object.keys(versionsByNum); semverSort(versionNums, { loose: true }); + hash.default_version = + versionNums.find(it => !prerelease(it, { loose: true }) && !versionsByNum[it].yanked) ?? + versionNums.find(it => !versionsByNum[it].yanked) ?? + versionNums[0]; + hash.yanked = versionsByNum[hash.default_version]?.yanked ?? false; + + versions = versions.filter(it => !it.yanked); + versionNums = versionNums.filter(it => !versionsByNum[it].yanked); hash.max_version = versionNums[0] ?? '0.0.0'; hash.max_stable_version = versionNums.find(it => !prerelease(it, { loose: true })) ?? null; diff --git a/tests/mirage/crates/get-by-id-test.js b/tests/mirage/crates/get-by-id-test.js index 5bd96e413c1..d43075b07ff 100644 --- a/tests/mirage/crates/get-by-id-test.js +++ b/tests/mirage/crates/get-by-id-test.js @@ -27,6 +27,7 @@ module('Mirage | GET /api/v1/crates/:id', function (hooks) { badges: [], categories: [], created_at: '2010-06-16T21:30:45Z', + default_version: '1.0.0-beta.1', description: 'This is the description for the crate called "rand"', documentation: null, downloads: 0, @@ -47,6 +48,7 @@ module('Mirage | GET /api/v1/crates/:id', function (hooks) { repository: null, updated_at: '2017-02-24T12:34:56Z', versions: ['1'], + yanked: false, }, keywords: [], versions: [ diff --git a/tests/mirage/crates/list-test.js b/tests/mirage/crates/list-test.js index 6c1e7ec7bde..23e4f630432 100644 --- a/tests/mirage/crates/list-test.js +++ b/tests/mirage/crates/list-test.js @@ -44,6 +44,7 @@ module('Mirage | GET /api/v1/crates', function (hooks) { badges: [], categories: [], created_at: '2010-06-16T21:30:45Z', + default_version: '1.0.0', description: 'This is the description for the crate called "rand"', documentation: null, downloads: 0, @@ -63,6 +64,7 @@ module('Mirage | GET /api/v1/crates', function (hooks) { repository: null, updated_at: '2017-02-24T12:34:56Z', versions: ['1', '2'], + yanked: false, }, ], meta: { diff --git a/tests/mirage/summary-test.js b/tests/mirage/summary-test.js index 5fb246a418f..5686aeb128d 100644 --- a/tests/mirage/summary-test.js +++ b/tests/mirage/summary-test.js @@ -42,6 +42,7 @@ module('Mirage | GET /api/v1/summary', function (hooks) { badges: [], categories: [], created_at: '2010-06-16T21:30:45Z', + default_version: '1.0.0', description: 'This is the description for the crate called "crate-0"', documentation: null, downloads: 0, @@ -61,6 +62,7 @@ module('Mirage | GET /api/v1/summary', function (hooks) { repository: null, updated_at: '2017-02-24T12:34:56Z', versions: null, + yanked: false, }); assert.strictEqual(responsePayload.most_downloaded.length, 10); @@ -69,6 +71,7 @@ module('Mirage | GET /api/v1/summary', function (hooks) { badges: [], categories: [], created_at: '2010-06-16T21:30:45Z', + default_version: '1.0.4', description: 'This is the description for the crate called "crate-4"', documentation: null, downloads: 148_140, @@ -88,6 +91,7 @@ module('Mirage | GET /api/v1/summary', function (hooks) { repository: null, updated_at: '2017-02-24T12:34:56Z', versions: null, + yanked: false, }); assert.strictEqual(responsePayload.most_recently_downloaded.length, 10); @@ -96,6 +100,7 @@ module('Mirage | GET /api/v1/summary', function (hooks) { badges: [], categories: [], created_at: '2010-06-16T21:30:45Z', + default_version: '1.0.0', description: 'This is the description for the crate called "crate-0"', documentation: null, downloads: 0, @@ -115,6 +120,7 @@ module('Mirage | GET /api/v1/summary', function (hooks) { repository: null, updated_at: '2017-02-24T12:34:56Z', versions: null, + yanked: false, }); assert.strictEqual(responsePayload.new_crates.length, 10); @@ -123,6 +129,7 @@ module('Mirage | GET /api/v1/summary', function (hooks) { badges: [], categories: [], created_at: '2010-06-16T21:30:45Z', + default_version: '1.0.0', description: 'This is the description for the crate called "crate-0"', documentation: null, downloads: 0, @@ -142,6 +149,7 @@ module('Mirage | GET /api/v1/summary', function (hooks) { repository: null, updated_at: '2017-02-24T12:34:56Z', versions: null, + yanked: false, }); assert.strictEqual(responsePayload.num_crates, 20);