%PDF- %PDF-
| Direktori : /usr/lib/node_modules/ncm-ng/workers/certifyBasic/ |
| Current File : //usr/lib/node_modules/ncm-ng/workers/certifyBasic/readme.js |
'use strict'
const COMMAND_TIMEOUT_SECONDS = 5
const worker = require('../../lib/worker')
exports.worker = worker.create({
run: run,
fileName: __filename,
description: 'get the readme for a package/version',
time: COMMAND_TIMEOUT_SECONDS * 1000,
input: {
name: 'name of the package',
version: 'version of the package',
dir: 'unpacked tarball directory'
},
output: {
certName: 'name of the cert',
certData: 'data of the cert'
}
})
const fs = require('fs')
const path = require('path')
const util = require('util')
const nsUtil = require('../../util')
const logger = nsUtil.logger.getLogger(__filename)
const fsPromises = {
stat: util.promisify(fs.stat),
readdir: util.promisify(fs.readdir),
readFile: util.promisify(fs.readFile)
}
async function run (context, input) {
// npm matches anything that has 'readme' in the name and takes the first (valid?) item.
let files = []
try {
files = await fsPromises.readdir(input.dir)
} catch (err) {
logger.error(`error running fs.readdir("${input.dir}": ${err}`)
}
let readmeFile
let readmeFileSize = readmeFile || null
for (const fileName of files) {
if (fileName.toLowerCase().includes('readme')) {
const filePath = path.join(input.dir, fileName)
let stats
try {
stats = await fsPromises.stat(filePath)
} catch (err) {
logger.error(`error running fs.stat("${fileName}": ${err}`)
continue
}
if (stats.isFile()) {
logger.debug(`Found 'readme' file: ${fileName}`)
readmeFileSize = stats.size
readmeFile = await fsPromises.readFile(filePath)
break
} else {
logger.debug(`${fileName} was not a file. Directory? ${stats.isDirectory()}`)
}
}
}
const hasReadme = typeof readmeFileSize === 'number' && Number.isFinite(readmeFileSize)
const certData = {
hasReadme
}
if (hasReadme) {
certData.size = readmeFileSize
}
return Object.assign({}, input, {
certName: 'readme',
certData,
worker: context.worker.name
})
}