From a038d8c5142adfeb97aded2109a0956d94a8b77a Mon Sep 17 00:00:00 2001 From: Yue JIN Date: Wed, 6 Aug 2025 12:12:46 +0800 Subject: [PATCH] chore: use pnpm CLI to get versions --- README.md | 2 +- README.zh-Hans.md | 2 +- package.json | 2 +- scripts/{docs.js => docs.ts} | 16 ++++++++--- scripts/utils.js | 52 ------------------------------------ scripts/utils.ts | 20 ++++++++++++++ tsconfig.node.json | 2 +- 7 files changed, 36 insertions(+), 60 deletions(-) rename scripts/{docs.js => docs.ts} (73%) delete mode 100644 scripts/utils.js create mode 100644 scripts/utils.ts diff --git a/README.md b/README.md index 4655a74..2bec422 100644 --- a/README.md +++ b/README.md @@ -119,8 +119,8 @@ Drop ` + ``` diff --git a/README.zh-Hans.md b/README.zh-Hans.md index fd5d81b..a90c694 100644 --- a/README.zh-Hans.md +++ b/README.zh-Hans.md @@ -119,8 +119,8 @@ import "echarts"; ```html - + ``` diff --git a/package.json b/package.json index 12499bd..9b138a1 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "dev:build": "vite build", "dev:preview": "vite preview", "dev:typecheck": "vue-tsc -p ./demo", - "docs": "node ./scripts/docs.js", + "docs": "jiti ./scripts/docs.ts", "prepublishOnly": "pnpm run typecheck && pnpm run dev:typecheck && pnpm run build && publint" }, "packageManager": "pnpm@10.14.0", diff --git a/scripts/docs.js b/scripts/docs.ts similarity index 73% rename from scripts/docs.js rename to scripts/docs.ts index 7603e97..5e6dee9 100644 --- a/scripts/docs.js +++ b/scripts/docs.ts @@ -1,13 +1,21 @@ import { readFileSync, writeFileSync } from "node:fs"; import { commentMark } from "comment-mark"; -import { getPackageMeta, resolvePath, getVersions } from "./utils.js"; +import { getPackageVersions, resolvePath } from "./utils"; -const { name, version, devDependencies } = getPackageMeta(); +const { name, version, devDependencies } = getPackageVersions([ + "echarts", + "vue", +]); const CDN_PREFIX = "https://cdn.jsdelivr.net/npm/"; const DEP_VERSIONS = { - ...getVersions(["vue", "echarts"], devDependencies), + ...Object.fromEntries( + Object.entries(devDependencies).map(([name, { version }]) => [ + name, + version, + ]), + ), [name]: version, }; @@ -20,7 +28,7 @@ function getScripts() { .join("\n"); } -function getCodeBlock(code) { +function getCodeBlock(code: string) { return "\n```html\n" + code + "\n```\n"; } diff --git a/scripts/utils.js b/scripts/utils.js deleted file mode 100644 index 0be70e9..0000000 --- a/scripts/utils.js +++ /dev/null @@ -1,52 +0,0 @@ -import { readFileSync } from "node:fs"; -import { resolve, dirname } from "node:path"; -import { fileURLToPath } from "node:url"; - -export function resolvePath(url, ...parts) { - return resolve(dirname(fileURLToPath(url)), ...parts); -} - -export function getPackageMeta() { - return JSON.parse( - readFileSync(resolvePath(import.meta.url, "../package.json"), "utf8"), - ); -} - -/** - * Get package versions from version record object (like dependencies or devDependencies) - * @param {string|string[]} packageNames - Package name or array of package names - * @param {Object} versionRecord - Version record object (e.g., dependencies, devDependencies) - * @returns {Object|string} - Returns version string for single package, or {packageName: version} object for array - */ -export function getVersions(packageNames, versionRecord) { - if (!versionRecord || typeof versionRecord !== "object") { - return null; - } - - // Helper function to extract clean version number - const extractVersion = (versionString) => { - if (!versionString) return null; - // Remove prefixes like ^, ~, >=, etc. and return clean version - return versionString.replace(/^[\^~>=<]+/, ""); - }; - - // If single string, return single version - if (typeof packageNames === "string") { - const version = extractVersion(versionRecord[packageNames]); - return version || null; - } - - // If array, return object with package names as keys - if (Array.isArray(packageNames)) { - const result = {}; - for (const pkg of packageNames) { - const version = extractVersion(versionRecord[pkg]); - if (version) { - result[pkg] = version; - } - } - return result; - } - - return null; -} diff --git a/scripts/utils.ts b/scripts/utils.ts new file mode 100644 index 0000000..d098097 --- /dev/null +++ b/scripts/utils.ts @@ -0,0 +1,20 @@ +import { execSync } from "node:child_process"; +import { resolve, dirname } from "node:path"; +import { fileURLToPath } from "node:url"; + +export function resolvePath(url: string, ...parts: string[]) { + return resolve(dirname(fileURLToPath(url)), ...parts); +} + +type PackageVersions = { + name: string; + version: string; + devDependencies: Record; +}; + +export function getPackageVersions(devDeps?: string[]): PackageVersions { + const stdOut = execSync(`pnpm ls ${devDeps?.join(" ") || ""} --json`, { + encoding: "utf-8", + }); + return JSON.parse(stdOut)[0]; +} diff --git a/tsconfig.node.json b/tsconfig.node.json index 695006f..76b9563 100644 --- a/tsconfig.node.json +++ b/tsconfig.node.json @@ -1,5 +1,5 @@ { - "include": ["*.config.*"], + "include": ["*.config.*", "scripts/**/*"], "compilerOptions": { "composite": true, "lib": ["ESNext"],