From 65e600a539ad6d17b204ecc54b5e92aa5a5217a3 Mon Sep 17 00:00:00 2001 From: fisker Cheung Date: Wed, 31 Dec 2025 00:01:20 +0800 Subject: [PATCH] Use `cm6-graphql` from CDN (#18552) --- website/vite.config.mjs | 29 +++++++++++++++++++---------- 1 file changed, 19 insertions(+), 10 deletions(-) diff --git a/website/vite.config.mjs b/website/vite.config.mjs index b5d3a478c..b0210d73c 100644 --- a/website/vite.config.mjs +++ b/website/vite.config.mjs @@ -9,10 +9,7 @@ import packageJson from "./package.json" with { type: "json" }; const IS_PRODUCTION = process.env.NODE_ENV === "production"; const IS_CI = Boolean(process.env.CI); const OUT_DIRECTORY = "./static/playground/"; -const DEPENDENCIES_EXCLUDE_FROM_CDN = new Set([ - "cm6-graphql", - "@docusaurus/preset-classic", -]); +const DEPENDENCIES_EXCLUDE_FROM_CDN = new Set(["@docusaurus/preset-classic"]); // Local develop requires `vue` for HMR if (!IS_PRODUCTION) { @@ -57,18 +54,27 @@ async function buildCdnAlias() { async function getPackageCdnUrl(name) { const version = packageJson.dependencies[name]; const url = new URL(`https://esm.sh/${name}@${version}`); - let deps = await getPackageDependencies(name, import.meta.url); - deps = deps + let dependencies = await getPackageDependencies(name, import.meta.url); + + dependencies = dependencies // Exclude self .filter((dependency) => dependency.name !== name) // Sort alphabetically - .toSorted(({ name: nameA }, { name: nameB }) => nameA.localeCompare(nameB)); + .toSorted(({ name: nameA }, { name: nameB }) => nameA.localeCompare(nameB)) + // Dedupe + .filter( + ({ name, version }, index, dependencies) => + dependencies.findIndex( + (searching) => + searching.name === name && searching.version === version, + ) === index, + ); - if (deps.length > 0) { + if (dependencies.length > 0) { url.searchParams.set( "deps", - deps.map(({ name, version }) => `${name}@${version}`).join(","), + dependencies.map(({ name, version }) => `${name}@${version}`).join(","), ); } @@ -87,7 +93,10 @@ async function getPackageJson(name, base) { async function getPackageDependenciesWithoutCache(name, base) { const { url, packageJson } = await getPackageJson(name, base); const dependencies = [{ name, version: packageJson.version }]; - for (const name of Object.keys(packageJson.dependencies ?? {})) { + for (const name of Object.keys({ + ...packageJson.dependencies, + ...packageJson.peerDependencies, + })) { dependencies.push(...(await getPackageDependencies(name, url))); } return dependencies;