GIF89; GIF89; %PDF- %PDF-
__ __ __ __ _____ _ _ _____ _ _ _ | \/ | \ \ / / | __ \ (_) | | / ____| | | | | | \ / |_ __\ V / | |__) | __ ___ ____ _| |_ ___ | (___ | |__ ___| | | | |\/| | '__|> < | ___/ '__| \ \ / / _` | __/ _ \ \___ \| '_ \ / _ \ | | | | | | |_ / . \ | | | | | |\ V / (_| | || __/ ____) | | | | __/ | | |_| |_|_(_)_/ \_\ |_| |_| |_| \_/ \__,_|\__\___| |_____/|_| |_|\___V 2.1 if you need WebShell for Seo everyday contact me on Telegram Telegram Address : @jackleetFor_More_Tools:
const tar = require('tar')
const ssri = require('ssri')
const { log, output } = require('proc-log')
const formatBytes = require('./format-bytes.js')
const localeCompare = require('@isaacs/string-locale-compare')('en', {
sensitivity: 'case',
numeric: true,
})
const logTar = (tarball, { unicode = false, json, key } = {}) => {
if (json) {
output.buffer(key == null ? tarball : { [key]: tarball })
return
}
log.notice('')
log.notice('', `${unicode ? '📦 ' : 'package:'} ${tarball.name}@${tarball.version}`)
log.notice('Tarball Contents')
if (tarball.files.length) {
log.notice(
'',
tarball.files.map(f =>
/^node_modules\//.test(f.path) ? null : `${formatBytes(f.size, false)} ${f.path}`
).filter(f => f).join('\n')
)
}
if (tarball.bundled.length) {
log.notice('Bundled Dependencies')
tarball.bundled.forEach(name => log.notice('', name))
}
log.notice('Tarball Details')
log.notice('', `name: ${tarball.name}`)
log.notice('', `version: ${tarball.version}`)
if (tarball.filename) {
log.notice('', `filename: ${tarball.filename}`)
}
log.notice('', `package size: ${formatBytes(tarball.size)}`)
log.notice('', `unpacked size: ${formatBytes(tarball.unpackedSize)}`)
log.notice('', `shasum: ${tarball.shasum}`)
/* eslint-disable-next-line max-len */
log.notice('', `integrity: ${tarball.integrity.toString().slice(0, 20)}[...]${tarball.integrity.toString().slice(80)}`)
if (tarball.bundled.length) {
log.notice('', `bundled deps: ${tarball.bundled.length}`)
log.notice('', `bundled files: ${tarball.entryCount - tarball.files.length}`)
log.notice('', `own files: ${tarball.files.length}`)
}
log.notice('', `total files: ${tarball.entryCount}`)
log.notice('', '')
}
const getContents = async (manifest, tarball) => {
const files = []
const bundled = new Set()
let totalEntries = 0
let totalEntrySize = 0
// reads contents of tarball
const stream = tar.t({
onentry (entry) {
totalEntries++
totalEntrySize += entry.size
const p = entry.path
if (p.startsWith('package/node_modules/') && p !== 'package/node_modules/') {
const name = p.match(/^package\/node_modules\/((?:@[^/]+\/)?[^/]+)/)[1]
bundled.add(name)
}
files.push({
path: entry.path.replace(/^package\//, ''),
size: entry.size,
mode: entry.mode,
})
},
})
stream.end(tarball)
const integrity = ssri.fromData(tarball, {
algorithms: ['sha1', 'sha512'],
})
const comparator = ({ path: a }, { path: b }) => localeCompare(a, b)
const isUpper = str => {
const ch = str.charAt(0)
return ch === ch.toUpperCase()
}
const uppers = files.filter(file => isUpper(file.path))
const others = files.filter(file => !isUpper(file.path))
uppers.sort(comparator)
others.sort(comparator)
const shasum = integrity.sha1[0].hexDigest()
return {
id: manifest._id || `${manifest.name}@${manifest.version}`,
name: manifest.name,
version: manifest.version,
size: tarball.length,
unpackedSize: totalEntrySize,
shasum,
integrity: ssri.parse(integrity.sha512[0]),
// @scope/packagename.tgz => scope-packagename.tgz
// we can safely use these global replace rules due to npm package naming rules
filename: `${manifest.name.replace('@', '').replace('/', '-')}-${manifest.version}.tgz`,
files: uppers.concat(others),
entryCount: totalEntries,
bundled: Array.from(bundled),
}
}
module.exports = { logTar, getContents }
| Name | Type | Size | Permission | Actions |
|---|---|---|---|---|
| audit-error.js | File | 1.02 KB | 0644 |
|
| auth.js | File | 3.21 KB | 0644 |
|
| cmd-list.js | File | 2.89 KB | 0644 |
|
| completion.fish | File | 1.56 KB | 0644 |
|
| completion.sh | File | 1.85 KB | 0755 |
|
| did-you-mean.js | File | 1.16 KB | 0644 |
|
| display.js | File | 15.38 KB | 0644 |
|
| error-message.js | File | 14.79 KB | 0644 |
|
| explain-dep.js | File | 3.03 KB | 0644 |
|
| explain-eresolve.js | File | 2.56 KB | 0644 |
|
| format-bytes.js | File | 629 B | 0644 |
|
| format-search-stream.js | File | 4.7 KB | 0644 |
|
| format.js | File | 1.91 KB | 0644 |
|
| get-identity.js | File | 802 B | 0644 |
|
| get-workspaces.js | File | 1.71 KB | 0644 |
|
| installed-deep.js | File | 1.1 KB | 0644 |
|
| installed-shallow.js | File | 583 B | 0644 |
|
| is-windows.js | File | 177 B | 0644 |
|
| log-file.js | File | 7.78 KB | 0644 |
|
| npm-usage.js | File | 2.02 KB | 0644 |
|
| open-url.js | File | 2.36 KB | 0644 |
|
| output-error.js | File | 767 B | 0644 |
|
| ping.js | File | 262 B | 0644 |
|
| queryable.js | File | 9.56 KB | 0644 |
|
| read-user-info.js | File | 1.91 KB | 0644 |
|
| reify-finish.js | File | 886 B | 0644 |
|
| reify-output.js | File | 5.65 KB | 0644 |
|
| sbom-cyclonedx.js | File | 5.21 KB | 0644 |
|
| sbom-spdx.js | File | 4.59 KB | 0644 |
|
| tar.js | File | 3.47 KB | 0644 |
|
| timers.js | File | 2.07 KB | 0644 |
|
| update-workspaces.js | File | 1013 B | 0644 |
|
| validate-lockfile.js | File | 1023 B | 0644 |
|
| verify-signatures.js | File | 11.94 KB | 0644 |
|