Team Ai
Datasetpublic

codekingpro/portable-devtools

sourceHugging Faceupdated 5mo agoView on Hugging Face
1likes14kdownloads
current-env.js92 linesDownload Raw Back to lib
1const process = require('node:process')
2const nodeOs = require('node:os')
3const fs = require('node:fs')
4
5function isMusl (file) {
6  return file.includes('libc.musl-') || file.includes('ld-musl-')
7}
8
9function os () {
10  return process.platform
11}
12
13function cpu () {
14  return process.arch
15}
16
17const LDD_PATH = '/usr/bin/ldd'
18function getFamilyFromFilesystem () {
19  try {
20    const content = fs.readFileSync(LDD_PATH, 'utf-8')
21    if (content.includes('musl')) {
22      return 'musl'
23    }
24    if (content.includes('GNU C Library')) {
25      return 'glibc'
26    }
27    return null
28  } catch {
29    return undefined
30  }
31}
32
33function getFamilyFromReport () {
34  const originalExclude = process.report.excludeNetwork
35  process.report.excludeNetwork = true
36  const report = process.report.getReport()
37  process.report.excludeNetwork = originalExclude
38  if (report.header?.glibcVersionRuntime) {
39    family = 'glibc'
40  } else if (Array.isArray(report.sharedObjects) && report.sharedObjects.some(isMusl)) {
41    family = 'musl'
42  } else {
43    family = null
44  }
45  return family
46}
47
48let family
49function libc (osName) {
50  if (osName !== 'linux') {
51    return undefined
52  }
53  if (family === undefined) {
54    family = getFamilyFromFilesystem()
55    if (family === undefined) {
56      family = getFamilyFromReport()
57    }
58  }
59  return family
60}
61
62function devEngines (env = {}) {
63  const osName = env.os || os()
64  return {
65    cpu: {
66      name: env.cpu || cpu(),
67    },
68    libc: {
69      name: env.libc || libc(osName),
70    },
71    os: {
72      name: osName,
73      version: env.osVersion || nodeOs.release(),
74    },
75    packageManager: {
76      name: 'npm',
77      version: env.npmVersion,
78    },
79    runtime: {
80      name: 'node',
81      version: env.nodeVersion || process.version,
82    },
83  }
84}
85
86module.exports = {
87  cpu,
88  libc,
89  os,
90  devEngines,
91}
92 
codekingpro/portable-devtools · Team Ai