From bb8e43567fccf695e8fd966254b739038ddabd5b Mon Sep 17 00:00:00 2001 From: herr kaste Date: Wed, 24 Jun 2026 16:10:12 +0200 Subject: [PATCH] Gate magic search details Keep magic_score in the compact search index for relevance sorting, but omit the detailed magic breakdown from production builds by default. Allow the detailed data with RANKING_EASTER_EGG=true, while leaving development builds unchanged. --- eleventy.config.mjs | 11 +++++++++++ eleventy.filters.mjs | 16 +++++++++++----- search-index.11ty.mjs | 6 ++++-- static/package-search.js | 21 ++++++++++++++++++--- 4 files changed, 44 insertions(+), 10 deletions(-) diff --git a/eleventy.config.mjs b/eleventy.config.mjs index 731a27ed0..55ab337f9 100644 --- a/eleventy.config.mjs +++ b/eleventy.config.mjs @@ -370,6 +370,7 @@ const vendorModules = [ export default async function (eleventyConfig) { const isProd = process.env.NODE_ENV === 'production' || process.env.ELEVENTY_ENV === 'production' + const rankingEasterEgg = rankingEasterEggEnabled(isProd) const prodOrigin = 'https://packages.sublimetext.io' const devOrigin = process.env.DEV_ORIGIN || 'http://localhost:8080' const siteOrigin = isProd ? prodOrigin : devOrigin @@ -628,6 +629,7 @@ export default async function (eleventyConfig) { prodOrigin, devOrigin, disableLiveLink: Boolean(process.env.DISABLE_L_LINK), + rankingEasterEgg, }) // Send the full tag history so the browser can decide what is visible and @@ -686,6 +688,15 @@ export default async function (eleventyConfig) { } } +function rankingEasterEggEnabled(isProd) { + const override = process.env.RANKING_EASTER_EGG + if (typeof override === 'string') { + return override.trim().toLowerCase() === 'true' + } + + return !isProd +} + async function bundleJs(staticOutputDir, entries, isProd) { if (!entries.size) { return diff --git a/eleventy.filters.mjs b/eleventy.filters.mjs index ec8247587..be693f6a3 100644 --- a/eleventy.filters.mjs +++ b/eleventy.filters.mjs @@ -98,15 +98,15 @@ export function label_normalization_note(changes) { return `

* ${heading}

` } -export function search_index_json(packages) { +export function search_index_json(packages, options = {}) { return JSON.stringify({ - packages: packages.map(compactSearchPackage), + packages: packages.map(pkg => compactSearchPackage(pkg, options)), label_icon_aliases: labelIconAliases, label_icon_tints: labelIconTints, }) } -function compactSearchPackage(pkg) { +function compactSearchPackage(pkg, { includeMagicDetails = true } = {}) { const row = [ pkg.name, htmlDescription(pkg.description ?? ''), @@ -116,11 +116,17 @@ function compactSearchPackage(pkg) { timestamp(pkg.first_seen) || 0, timestamp(pkg.last_modified) || 0, pkg.magic_score ?? 0, - compactMagicBreakdown(pkg.magic), + ] + + if (includeMagicDetails) { + row.push(compactMagicBreakdown(pkg.magic)) + } + + row.push( (pkg.platforms ?? []).join(','), pkg.platform_statement ?? '', (pkg.labels ?? []).join(','), - ] + ) if (pkg.outdated || pkg.st3_only || pkg.removed || pkg.archived_at) { row.push( diff --git a/search-index.11ty.mjs b/search-index.11ty.mjs index d040eefb6..ba86e49b6 100644 --- a/search-index.11ty.mjs +++ b/search-index.11ty.mjs @@ -7,7 +7,9 @@ export default class SearchIndex { } } - render({ collections }) { - return search_index_json(collections.searchable_packages) + render({ collections, site }) { + return search_index_json(collections.searchable_packages, { + includeMagicDetails: site.rankingEasterEgg, + }) } } diff --git a/static/package-search.js b/static/package-search.js index f5c01a882..cc23f86ec 100644 --- a/static/package-search.js +++ b/static/package-search.js @@ -63,7 +63,18 @@ function expandSearchPackage(row) { first_seen, last_modified, magic_score, - magic, + ] = row + + let offset = 8 + const hasMagicDetails = Array.isArray(row[offset]) + const magic = hasMagicDetails + ? row[offset] + : undefined + if (hasMagicDetails) { + offset += 1 + } + + const [ platforms, platform_statement, labels, @@ -71,7 +82,7 @@ function expandSearchPackage(row) { st3_only, removed, archived_at, - ] = row + ] = row.slice(offset) return { name, @@ -93,7 +104,11 @@ function expandSearchPackage(row) { } } -function expandMagicBreakdown(values = []) { +function expandMagicBreakdown(values) { + if (!Array.isArray(values)) { + return null + } + const [popularity, stars, freshness, longevity, recency, penalty] = values return { popularity, stars, freshness, longevity, recency, penalty } }