From d6952ea687beb5b9aff1eae26076fa98ac94818b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Donny/=EA=B0=95=EB=8F=99=EC=9C=A4?= Date: Sat, 26 Aug 2023 07:11:34 +0900 Subject: [PATCH] feat(swc-info): Add a CLI to help issue reporting (#7871) --- .github/ISSUE_TEMPLATE/bug_report.yml | 5 ++ packages/swc-info/.gitignore | 8 +++ packages/swc-info/.npmignore | 10 ++++ packages/swc-info/README.md | 9 ++++ packages/swc-info/bin/swc-info.js | 2 + packages/swc-info/lib/index.ts | 71 +++++++++++++++++++++++++++ packages/swc-info/package.json | 37 ++++++++++++++ packages/swc-info/tsconfig.json | 25 ++++++++++ packages/types/package.json | 2 +- packages/yarn.lock | 26 ++++++---- 10 files changed, 185 insertions(+), 10 deletions(-) create mode 100644 packages/swc-info/.gitignore create mode 100644 packages/swc-info/.npmignore create mode 100644 packages/swc-info/README.md create mode 100755 packages/swc-info/bin/swc-info.js create mode 100644 packages/swc-info/lib/index.ts create mode 100644 packages/swc-info/package.json create mode 100644 packages/swc-info/tsconfig.json diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index c3594a9ea3e7..dee10b780481 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -30,6 +30,11 @@ body: attributes: label: Playground link description: You can use [swc playground](https://play.swc.rs/) to create a reproduction link, then paste the link here. + - type: input + id: swc-info + attributes: + label: SWC Info output + description: Please run `npx -y swc-info@latest` and paste the output here. - type: textarea id: expected-behavior attributes: diff --git a/packages/swc-info/.gitignore b/packages/swc-info/.gitignore new file mode 100644 index 000000000000..067df2adf9f9 --- /dev/null +++ b/packages/swc-info/.gitignore @@ -0,0 +1,8 @@ +yarn.lock +node_modules +_/ +*.tgz +lib/*.js +tests/*.js +*.d.ts +*.map \ No newline at end of file diff --git a/packages/swc-info/.npmignore b/packages/swc-info/.npmignore new file mode 100644 index 000000000000..2c1c6d14934d --- /dev/null +++ b/packages/swc-info/.npmignore @@ -0,0 +1,10 @@ +examples/ +node_modules/ +package-lock.json +*.log +.swcrc +.yarn +*.tgz +.dprint.json +out/ +tests/ \ No newline at end of file diff --git a/packages/swc-info/README.md b/packages/swc-info/README.md new file mode 100644 index 000000000000..dd063489f430 --- /dev/null +++ b/packages/swc-info/README.md @@ -0,0 +1,9 @@ +# swc-info + +## Usage + +```sh +npx -y swc-info@latest +``` + +then copy the output to the issue;. diff --git a/packages/swc-info/bin/swc-info.js b/packages/swc-info/bin/swc-info.js new file mode 100755 index 000000000000..7dee241c542b --- /dev/null +++ b/packages/swc-info/bin/swc-info.js @@ -0,0 +1,2 @@ +#!/usr/bin/env node +require("../lib/index.js"); diff --git a/packages/swc-info/lib/index.ts b/packages/swc-info/lib/index.ts new file mode 100644 index 000000000000..80ffa75c79a0 --- /dev/null +++ b/packages/swc-info/lib/index.ts @@ -0,0 +1,71 @@ +import os from "node:os"; +import process from "node:process"; +import childProcess from "child_process"; + +function getUniqueCpuNames(): string { + return os + .cpus() + .map((cpu) => cpu.model) + .filter((model, index, models) => models.indexOf(model) === index) + .join(", "); +} + +function getBinaryVersion(binaryName: string): string { + try { + return childProcess + .execFileSync(binaryName, ["--version"]) + .toString() + .trim(); + } catch { + return "N/A"; + } +} + +function getPackageVersion(packageName: string) { + try { + return require(`${packageName}/package.json`).version; + } catch { + return null; + } +} + +function interestingPackage(name: string): string | null { + const version = getPackageVersion(name); + if (version) { + return `${name}: ${version}`; + } else { + return null; + } +} +function interestingPackages(names: string[]): string { + return names.map(interestingPackage).filter(Boolean).join("\n "); +} + +console.log(` + Operating System: + Platform: ${os.platform()} + Arch: ${os.arch()} + Machine Type: ${os.machine()} + Version: ${os.version()} + CPU: (${os.cpus().length} cores) + Models: ${getUniqueCpuNames()} + + Binaries: + Node: ${process.versions.node} + npm: ${getBinaryVersion("npm")} + Yarn: ${getBinaryVersion("yarn")} + pnpm: ${getBinaryVersion("pnpm")} + + Relevant Packages: + @swc/core: ${getPackageVersion("@swc/core") ?? "N/A"} + @swc/helpers: ${getPackageVersion("@swc/helpers") ?? "N/A"} + @swc/types: ${getPackageVersion("@swc/types") ?? "N/A"} + ${interestingPackages(["typescript", "next"])} + + SWC Config: + output: N/A + .swcrc path: N/A + + Next.js info: + output: N/A +`); diff --git a/packages/swc-info/package.json b/packages/swc-info/package.json new file mode 100644 index 000000000000..c6717b3b2340 --- /dev/null +++ b/packages/swc-info/package.json @@ -0,0 +1,37 @@ +{ + "name": "swc-info", + "packageManager": "yarn@3.2.3", + "version": "0.1.11", + "description": "CLI tool to help issue reporting for swc", + "sideEffects": false, + "scripts": { + "build": "tsc", + "prepublishOnly": "yarn build", + "prepack": "yarn build" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/swc-project/swc.git" + }, + "publishConfig": { + "registry": "https://registry.npmjs.org/", + "access": "public" + }, + "keywords": [ + "swc", + "info", + "cli" + ], + "author": "강동윤 ", + "license": "Apache-2.0", + "bugs": { + "url": "https://github.com/swc-project/swc/issues" + }, + "homepage": "https://swc.rs", + "devDependencies": { + "typescript": "^5.2.2" + }, + "bin": { + "swc-info": "bin/swc-info.js" + } +} diff --git a/packages/swc-info/tsconfig.json b/packages/swc-info/tsconfig.json new file mode 100644 index 000000000000..65036bebcb9b --- /dev/null +++ b/packages/swc-info/tsconfig.json @@ -0,0 +1,25 @@ +{ + "compilerOptions": { + "target": "es2019", + "useDefineForClassFields": true, + "module": "commonjs", + "baseUrl": "./", + "paths": {}, + "resolveJsonModule": true, + "declaration": true, + "sourceMap": true, + "downlevelIteration": true, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "strict": true, + "skipLibCheck": true, + "rootDir": "." + }, + "include": [ + "lib", + "tests" + ], + "exclude": [ + "examples" + ] +} \ No newline at end of file diff --git a/packages/types/package.json b/packages/types/package.json index b4a29d6a9078..49d98f10a880 100644 --- a/packages/types/package.json +++ b/packages/types/package.json @@ -28,6 +28,6 @@ "homepage": "https://swc.rs", "packageManager": "yarn@3.2.3", "devDependencies": { - "typescript": "^5.1.6" + "typescript": "^5.2.2" } } diff --git a/packages/yarn.lock b/packages/yarn.lock index db3e5818734c..7f20eaef58ed 100644 --- a/packages/yarn.lock +++ b/packages/yarn.lock @@ -124,7 +124,7 @@ __metadata: version: 0.0.0-use.local resolution: "@swc/types@workspace:types" dependencies: - typescript: ^5.1.6 + typescript: ^5.2.2 languageName: unknown linkType: soft @@ -611,6 +611,14 @@ __metadata: languageName: node linkType: hard +"swc-info@workspace:swc-info": + version: 0.0.0-use.local + resolution: "swc-info@workspace:swc-info" + dependencies: + typescript: ^5.2.2 + languageName: unknown + linkType: soft + "through@npm:2, through@npm:~2.3, through@npm:~2.3.1": version: 2.3.8 resolution: "through@npm:2.3.8" @@ -634,23 +642,23 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^5.1.6": - version: 5.1.6 - resolution: "typescript@npm:5.1.6" +"typescript@npm:^5.2.2": + version: 5.2.2 + resolution: "typescript@npm:5.2.2" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: b2f2c35096035fe1f5facd1e38922ccb8558996331405eb00a5111cc948b2e733163cc22fab5db46992aba7dd520fff637f2c1df4996ff0e134e77d3249a7350 + checksum: 7912821dac4d962d315c36800fe387cdc0a6298dba7ec171b350b4a6e988b51d7b8f051317786db1094bd7431d526b648aba7da8236607febb26cf5b871d2d3c languageName: node linkType: hard -"typescript@patch:typescript@^5.1.6#~builtin": - version: 5.1.6 - resolution: "typescript@patch:typescript@npm%3A5.1.6#~builtin::version=5.1.6&hash=a1c5e5" +"typescript@patch:typescript@^5.2.2#~builtin": + version: 5.2.2 + resolution: "typescript@patch:typescript@npm%3A5.2.2#~builtin::version=5.2.2&hash=a1c5e5" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 21e88b0a0c0226f9cb9fd25b9626fb05b4c0f3fddac521844a13e1f30beb8f14e90bd409a9ac43c812c5946d714d6e0dee12d5d02dfc1c562c5aacfa1f49b606 + checksum: 07106822b4305de3f22835cbba949a2b35451cad50888759b6818421290ff95d522b38ef7919e70fb381c5fe9c1c643d7dea22c8b31652a717ddbd57b7f4d554 languageName: node linkType: hard