From f624033565c6571f168edf488dd4d3b4627f7e47 Mon Sep 17 00:00:00 2001 From: eth3lbert Date: Fri, 25 Oct 2024 18:22:03 +0800 Subject: [PATCH 1/2] mirage: Add `default_version` to `crate` serializer --- mirage/serializers/crate.js | 11 +++++++++-- tests/mirage/crates/get-by-id-test.js | 1 + tests/mirage/crates/list-test.js | 1 + tests/mirage/summary-test.js | 4 ++++ 4 files changed, 15 insertions(+), 2 deletions(-) diff --git a/mirage/serializers/crate.js b/mirage/serializers/crate.js index 9ad52c25a70..ee5b550214f 100644 --- a/mirage/serializers/crate.js +++ b/mirage/serializers/crate.js @@ -53,10 +53,17 @@ 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]; + + 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..c5cdd72640d 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, diff --git a/tests/mirage/crates/list-test.js b/tests/mirage/crates/list-test.js index 6c1e7ec7bde..5a02d7a6e79 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, diff --git a/tests/mirage/summary-test.js b/tests/mirage/summary-test.js index 5fb246a418f..895f9657916 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, @@ -69,6 +70,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, @@ -96,6 +98,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, @@ -123,6 +126,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, From 80d8f97730bc1e8aad0b7de1c35a4cc6d375881a Mon Sep 17 00:00:00 2001 From: eth3lbert Date: Mon, 4 Nov 2024 21:28:01 +0800 Subject: [PATCH 2/2] mirage: Add `yanked` to `crate` serializer --- mirage/serializers/crate.js | 1 + tests/mirage/crates/get-by-id-test.js | 1 + tests/mirage/crates/list-test.js | 1 + tests/mirage/summary-test.js | 4 ++++ 4 files changed, 7 insertions(+) diff --git a/mirage/serializers/crate.js b/mirage/serializers/crate.js index ee5b550214f..12a38b32918 100644 --- a/mirage/serializers/crate.js +++ b/mirage/serializers/crate.js @@ -61,6 +61,7 @@ export default BaseSerializer.extend({ 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); diff --git a/tests/mirage/crates/get-by-id-test.js b/tests/mirage/crates/get-by-id-test.js index c5cdd72640d..d43075b07ff 100644 --- a/tests/mirage/crates/get-by-id-test.js +++ b/tests/mirage/crates/get-by-id-test.js @@ -48,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 5a02d7a6e79..23e4f630432 100644 --- a/tests/mirage/crates/list-test.js +++ b/tests/mirage/crates/list-test.js @@ -64,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 895f9657916..5686aeb128d 100644 --- a/tests/mirage/summary-test.js +++ b/tests/mirage/summary-test.js @@ -62,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); @@ -90,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); @@ -118,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); @@ -146,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);