1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- /**
- * @author Toru Nagashima
- * See LICENSE file in root directory for full license.
- */
- "use strict"
- const path = require("path")
- const getAllowModules = require("./get-allow-modules")
- const getConvertPath = require("./get-convert-path")
- const getNpmignore = require("./get-npmignore")
- const getPackageJson = require("./get-package-json")
- /**
- * Checks whether or not each requirement target is published via package.json.
- *
- * It reads package.json and checks the target exists in `dependencies`.
- *
- * @param {RuleContext} context - A context to report.
- * @param {string} filePath - The current file path.
- * @param {ImportTarget[]} targets - A list of target information to check.
- * @returns {void}
- */
- module.exports = function checkForPublish(context, filePath, targets) {
- const packageInfo = getPackageJson(filePath)
- if (!packageInfo) {
- return
- }
- const allowed = new Set(getAllowModules(context))
- const convertPath = getConvertPath(context)
- const basedir = path.dirname(packageInfo.filePath)
- // eslint-disable-next-line func-style
- const toRelative = fullPath => {
- const retv = path.relative(basedir, fullPath).replace(/\\/gu, "/")
- return convertPath(retv)
- }
- const npmignore = getNpmignore(filePath)
- const devDependencies = new Set(
- Object.keys(packageInfo.devDependencies || {})
- )
- const dependencies = new Set(
- [].concat(
- Object.keys(packageInfo.dependencies || {}),
- Object.keys(packageInfo.peerDependencies || {}),
- Object.keys(packageInfo.optionalDependencies || {})
- )
- )
- if (!npmignore.match(toRelative(filePath))) {
- // This file is published, so this cannot import private files.
- for (const target of targets) {
- const isPrivateFile =
- target.moduleName == null &&
- npmignore.match(toRelative(target.filePath))
- const isDevPackage =
- target.moduleName != null &&
- devDependencies.has(target.moduleName) &&
- !dependencies.has(target.moduleName) &&
- !allowed.has(target.moduleName)
- if (isPrivateFile || isDevPackage) {
- context.report({
- node: target.node,
- loc: target.node.loc,
- message: '"{{name}}" is not published.',
- data: { name: target.moduleName || target.name },
- })
- }
- }
- }
- }
|