mirror of
https://github.com/getpaseo/paseo.git
synced 2026-10-14 13:22:37 +00:00
Sort What's new plugins by submission time (#6713)
Co-authored-by: paseo-bot[bot] <paseo-bot[bot]@users.noreply.github.com>
This commit is contained in:
co-authored by
paseo-bot[bot]
parent
acb3a8f207
commit
8d03ccfbf0
@@ -76,33 +76,38 @@ describe("plugin registry", () => {
|
||||
]);
|
||||
expect(featuredPlugins(listed, ["acme/not-published"])).toEqual([]);
|
||||
});
|
||||
it("lists what's new by first-listing date, not submission or update dates", () => {
|
||||
const listedFirst = {
|
||||
it("lists what's new by submission time, not review, listing or update dates", () => {
|
||||
const submittedFirst = {
|
||||
...plugin,
|
||||
id: "acme/listed-first",
|
||||
submittedAt: "2026-09-20",
|
||||
reviewedAt: "2026-09-21",
|
||||
updatedAt: "2026-10-02",
|
||||
publishedAt: "2026-09-02",
|
||||
id: "acme/submitted-first",
|
||||
submittedAt: "2026-09-02T00:00:00.000Z",
|
||||
reviewedAt: "2026-10-02T00:00:00.000Z",
|
||||
updatedAt: "2026-10-02T00:00:00.000Z",
|
||||
publishedAt: "2026-10-02T00:00:00.000Z",
|
||||
};
|
||||
const listedLater = {
|
||||
const submittedLater = {
|
||||
...plugin,
|
||||
id: "acme/listed-later",
|
||||
submittedAt: "2026-09-01",
|
||||
reviewedAt: "2026-09-01",
|
||||
updatedAt: "2026-09-01",
|
||||
publishedAt: "2026-09-30",
|
||||
id: "acme/submitted-later",
|
||||
submittedAt: "2026-09-30T00:00:00.000Z",
|
||||
reviewedAt: "2026-09-30T00:00:00.000Z",
|
||||
updatedAt: "2026-09-30T00:00:00.000Z",
|
||||
publishedAt: "2026-09-30T00:00:00.000Z",
|
||||
};
|
||||
expect(newestFirst([listedFirst, listedLater]).map((p) => p.id)).toEqual([
|
||||
"acme/listed-later",
|
||||
"acme/listed-first",
|
||||
expect(newestFirst([submittedFirst, submittedLater]).map((p) => p.id)).toEqual([
|
||||
"acme/submitted-later",
|
||||
"acme/submitted-first",
|
||||
]);
|
||||
const now = "2026-10-03T12:00:00.000Z";
|
||||
expect(addedAgo(listedLater, now)).toBe("3d ago");
|
||||
expect(addedAgo(listedFirst, now)).toBe("4w ago");
|
||||
expect(addedAgo(submittedLater, now)).toBe("3d ago");
|
||||
expect(addedAgo(submittedFirst, now)).toBe("4w ago");
|
||||
});
|
||||
it("orders by listing date and by installs in a window, keeping index order for ties", () => {
|
||||
const older = { ...plugin, id: "acme/older", publishedAt: "2026-09-01" };
|
||||
it("orders same-day submissions by their time", () => {
|
||||
const morning = { ...plugin, id: "acme/morning", submittedAt: "2026-10-12T00:00:00.000Z" };
|
||||
const noon = { ...plugin, id: "acme/noon", submittedAt: "2026-10-12T11:38:00.000Z" };
|
||||
expect(newestFirst([morning, noon]).map((p) => p.id)).toEqual(["acme/noon", "acme/morning"]);
|
||||
});
|
||||
it("orders by submission time and by installs in a window, keeping index order for ties", () => {
|
||||
const older = { ...plugin, id: "acme/older", submittedAt: "2026-09-01" };
|
||||
const twin = { ...plugin, id: "acme/twin" };
|
||||
expect(newestFirst([older, plugin, twin]).map((p) => p.id)).toEqual([
|
||||
"acme/example",
|
||||
|
||||
@@ -106,9 +106,9 @@ export function featuredPlugins(plugins: Plugin[], featured: string[]): Plugin[]
|
||||
const byId = new Map(plugins.map((plugin) => [plugin.id, plugin]));
|
||||
return [...new Set(featured)].flatMap((id) => byId.get(id) ?? []);
|
||||
}
|
||||
/** Most recently listed first; equal dates keep index order. */
|
||||
/** Most recently submitted first, so updates never resurface a plugin; equal times keep index order. */
|
||||
export function newestFirst(plugins: Plugin[]): Plugin[] {
|
||||
return [...plugins].sort((a, b) => b.publishedAt.localeCompare(a.publishedAt));
|
||||
return [...plugins].sort((a, b) => Date.parse(b.submittedAt) - Date.parse(a.submittedAt));
|
||||
}
|
||||
/** Most installs in the window first; equal counts keep index order. */
|
||||
export function mostInstalled(
|
||||
@@ -119,9 +119,9 @@ export function mostInstalled(
|
||||
const count = (plugin: Plugin) => installs[plugin.id]?.[window] ?? 0;
|
||||
return [...plugins].sort((a, b) => count(b) - count(a));
|
||||
}
|
||||
/** How long ago the plugin was first listed, relative to the loader's clock. */
|
||||
/** How long ago the plugin was submitted, relative to the loader's clock. */
|
||||
export function addedAgo(plugin: Plugin, now: string): string {
|
||||
const days = Math.floor((Date.parse(now) - Date.parse(plugin.publishedAt)) / DAY_MS);
|
||||
const days = Math.floor((Date.parse(now) - Date.parse(plugin.submittedAt)) / DAY_MS);
|
||||
if (days <= 0) return "today";
|
||||
if (days === 1) return "yesterday";
|
||||
if (days < 14) return `${days}d ago`;
|
||||
|
||||
Reference in New Issue
Block a user