| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 | /** * @author Toru Nagashima * See LICENSE file in root directory for full license. */"use strict"const path = require("path")const getConvertPath = require("../util/get-convert-path")const getNpmignore = require("../util/get-npmignore")const getPackageJson = require("../util/get-package-json")/** * Checks whether or not a given path is a `bin` file. * * @param {string} filePath - A file path to check. * @param {string|object|undefined} binField - A value of the `bin` field of `package.json`. * @param {string} basedir - A directory path that `package.json` exists. * @returns {boolean} `true` if the file is a `bin` file. */function isBinFile(filePath, binField, basedir) {    if (!binField) {        return false    }    if (typeof binField === "string") {        return filePath === path.resolve(basedir, binField)    }    return Object.keys(binField).some(        key => filePath === path.resolve(basedir, binField[key])    )}module.exports = {    meta: {        docs: {            description: "disallow 'bin' files which are ignored by npm",            category: "Possible Errors",            recommended: true,            url:                "https://github.com/mysticatea/eslint-plugin-node/blob/v8.0.1/docs/rules/no-unpublished-bin.md",        },        type: "problem",        fixable: null,        schema: [            {                type: "object",                properties: {                    //                    convertPath: getConvertPath.schema,                },            },        ],    },    create(context) {        return {            Program(node) {                // Check file path.                let rawFilePath = context.getFilename()                if (rawFilePath === "<input>") {                    return                }                rawFilePath = path.resolve(rawFilePath)                // Find package.json                const p = getPackageJson(rawFilePath)                if (!p) {                    return                }                // Convert by convertPath option                const basedir = path.dirname(p.filePath)                const relativePath = getConvertPath(context)(                    path.relative(basedir, rawFilePath).replace(/\\/gu, "/")                )                const filePath = path.join(basedir, relativePath)                // Check this file is bin.                if (!isBinFile(filePath, p.bin, basedir)) {                    return                }                // Check ignored or not                const npmignore = getNpmignore(filePath)                if (!npmignore.match(relativePath)) {                    return                }                // Report.                context.report({                    node,                    message:                        "npm ignores '{{name}}'. Check 'files' field of 'package.json' or '.npmignore'.",                    data: { name: relativePath },                })            },        }    },}
 |