|
| 1 | +#!/usr/bin/env node |
| 2 | + |
| 3 | +import { run } from "envinfo"; |
| 4 | +import { readFileSync } from "fs"; |
| 5 | +import { resolve } from "path"; |
| 6 | + |
| 7 | +interface IPackageJSON { |
| 8 | + dependencies?: any; |
| 9 | + devDependencies?: any; |
| 10 | +} |
| 11 | + |
| 12 | +function readPackageJSON(): IPackageJSON { |
| 13 | + try { |
| 14 | + return JSON.parse( |
| 15 | + readFileSync(resolve(process.cwd(), "package.json")).toString() |
| 16 | + ); |
| 17 | + } catch (err) { |
| 18 | + return {}; |
| 19 | + } |
| 20 | +} |
| 21 | + |
| 22 | +async function main() { |
| 23 | + const res = JSON.parse( |
| 24 | + await run( |
| 25 | + { |
| 26 | + System: ["OS", "CPU", "Shell"], |
| 27 | + Binaries: ["Node", "npm"], |
| 28 | + Managers: ["CocoaPods"], |
| 29 | + IDEs: ["Xcode"], |
| 30 | + SDKs: ["iOS SDK", "Android SDK"], |
| 31 | + Languages: ["Java", "Ruby", "Python", "Python3"], |
| 32 | + npmGlobalPackages: ["nativescript"], |
| 33 | + }, |
| 34 | + { json: true, showNotFound: true } |
| 35 | + ) |
| 36 | + ); |
| 37 | + |
| 38 | + const packageJSON = readPackageJSON(); |
| 39 | + const dependencies = packageJSON?.dependencies ?? {}; |
| 40 | + const devDependencies = packageJSON?.devDependencies ?? {}; |
| 41 | + |
| 42 | + const get = (key: string, defaultValue: any = "Not Found") => { |
| 43 | + try { |
| 44 | + return key.split(".").reduce((res, key) => res[key], res) ?? defaultValue; |
| 45 | + } catch (err) { |
| 46 | + return defaultValue; |
| 47 | + } |
| 48 | + }; |
| 49 | + |
| 50 | + const asList = (key: string) => { |
| 51 | + const list = get(key); |
| 52 | + |
| 53 | + if (Array.isArray(list)) { |
| 54 | + return "\n" + list.map((image: string) => ` - ${image}`).join("\n"); |
| 55 | + } |
| 56 | + |
| 57 | + return list ?? "Not Found"; |
| 58 | + }; |
| 59 | + |
| 60 | + console.log( |
| 61 | + [ |
| 62 | + `<!-- COPY START -->`, |
| 63 | + "```yaml", |
| 64 | + `OS: ${get("System.OS")}`, |
| 65 | + `CPU: ${get("System.CPU")}`, |
| 66 | + `Shell: ${get("System.Shell.path")}`, |
| 67 | + `node: ${get("Binaries.Node.version")}`, |
| 68 | + `npm: ${get("Binaries.npm.version")}`, |
| 69 | + `nativescript: ${get("npmGlobalPackages.nativescript")}`, |
| 70 | + // `git: ${sysInfo.gitVer}`, |
| 71 | + ``, |
| 72 | + `# android`, |
| 73 | + `java: ${get("Languages.Java.version")}`, |
| 74 | + `ndk: ${get("SDKs.Android SDK.Android NDK")}`, |
| 75 | + `apis: ${ |
| 76 | + get("SDKs.Android SDK.API Levels")?.join?.(", ") ?? "Not Found" |
| 77 | + }`, |
| 78 | + `build_tools: ${ |
| 79 | + get("SDKs.Android SDK.Build Tools")?.join?.(", ") ?? "Not Found" |
| 80 | + }`, |
| 81 | + `system_images: ` + asList("SDKs.Android SDK.System Images"), |
| 82 | + ``, |
| 83 | + `# ios`, |
| 84 | + `xcode: ${get("IDEs.Xcode.version")}`, |
| 85 | + `cocoapods: ${get("Managers.CocoaPods.version")}`, |
| 86 | + `python: ${get("Languages.Python.version")}`, |
| 87 | + `python3: ${get("Languages.Python3.version")}`, |
| 88 | + `ruby: ${get("Languages.Ruby.version")}`, |
| 89 | + `platforms: ` + asList("SDKs.iOS SDK.Platforms"), |
| 90 | + "```", |
| 91 | + ``, |
| 92 | + `### Dependencies`, |
| 93 | + ``, |
| 94 | + "```json", |
| 95 | + '"dependencies": ' + JSON.stringify(dependencies, null, 2) + ",", |
| 96 | + '"devDependencies": ' + JSON.stringify(devDependencies, null, 2), |
| 97 | + "```", |
| 98 | + `<!-- COPY END -->`, |
| 99 | + ].join("\n") |
| 100 | + ); |
| 101 | +} |
| 102 | + |
| 103 | +main(); |
0 commit comments