Skip to content

Latest commit

 

History

History

Folders and files

NameName
Last commit message
Last commit date

parent directory

..
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

README.md

@putout/plugin-package-json NPM version

🐊Putout plugin helps to automate fixing package.json.

Install

npm i @putout/plugin-package-json -D

Rules

Filesystem rules

Config

{
    "rules": {
        "package-json/add-type": "on",
        "package-json/apply-js-extension": "on",
        "package-json/apply-https-to-repository-url": "on",
        "package-json/remove-nyc": "on",
        "package-json/remove-commit-type": "on",
        "package-json/remove-imports-nesting": "on",
        "package-json/remove-dot-slash-from-bin": "bin",
        "package-json/remove-exports-with-missing-files": "off",
        "package-json/find-file": "off"
    }
}

add-type

Add type field to package.json:

{
    "name": "hello",
    "version": "1.0.0",
+   "type": "commonjs"
}

apply-js-extension

Checkout in 🐊Putout Editor.

{
  "type": "module",
- "main": "./lib/putout.mjs",
+ "main": "./lib/putout.js",
  "exports": {
    ".": {
      "require": "./lib/index.cjs",
-     "import": "./lib/index.mjs"
+     "import": "./lib/index.js"
    },
    "./parse-error": "./lib/parse-error.cjs",
-   "./ignores": "./lib/ignores.mjs",
+   "./ignores": "./lib/ignores.js",
  },
  "bin": {
-   "putout": "bin/tracer.mjs"
+   "putout": "bin/tracer.js"
  }
};

apply-https-to-repository-url

The git:// protocol for GitHub repos should not be used due security concerns.

Checkout in 🐊Putout Editor.

{
  "repository": {
    "type": "git",
-   "url": "git://github.com/coderaiser/putout.git"
+   "url": "git+https://github.com/coderaiser/putout.git"
  }

remove-nyc

  • additional fields in package.json produces more traffic then users of your package really need;
  • c8 uses same config name and format so transition between tools will be much easier;

❌ Example of incorrect code

nyc section in package.json:

{
    "nyc": {
        "check-coverage": "on",
        "all": "on",
        "exclude": [
            "**/*.spec.js",
            "**/fixture",
            "test",
            ".*.js"
        ],
        "branches": 100,
        "lines": 100,
        "functions": 100,
        "statements": 100
    }
}

✅ Example of correct code

File .nycrc.json:

{
    "check-coverage": "on",
    "all": "on",
    "exclude": [
        "**/*.spec.js",
        "**/fixture",
        "test",
        ".*.js"
    ],
    "branches": 100,
    "lines": 100,
    "functions": 100,
    "statements": 100
}

remove-commit-type

Since 🎁Wisdom v14 commitType set to colon be default, so it can be dropped from package.json if it's value not paren: Check out in 🐊Putout Editor.

{
    "name": "hello",
    "version": "1.0.0",
    "commitType": "colon"
}

remove-duplicate-keywords

Check out in 🐊Putout Editor.

{
    "keywords": [
     "putout",
     "putout-plugin",
-    "plugin",
-    "putout"
+    "plugin"
   ],
}

remove-dot-slash-from-bin

Fixes npm warnings:

"npm warn publish bin[c8]" script name was cleaned

Check out in 🐊Putout Editor.

{
    "bin": {
-       "c8": "./bin/c8.js"
+       "c8": "bin/c8.js"
    }
}

remove-imports-nesting

Check out in 🐊Putout Editor.

{
    "imports": {
-       "#get-imports": {
-         "default": "./lib/shorten-imported-file/get-imports/index.js"
-       }
+       "#get-imports": "./lib/shorten-imported-file/get-imports/index.js"
    }
}

find-file

Find package.json inside of .filesystem.json and applies all other package-json rules. Checkout in 🐊Putout Editor.

{
    "name": "hello",
    "version": "1.0.0",
+   "type": "commonjs"
}

remove-exports-with-missing-files

Find package.json inside of .filesystem.json and removes exports with missing files.

Checkout in 🐊Putout Editor:

__putout_processor_filesystem([
    "/",
    ["/package.json", `{
        "exports": {
            "./parse-options": "./lib/parse-options/index.js",
-            "./loader": "./lib/loader.mjs"
        }
    }`],
    "/lib/",
    "/lib/parse-options/",
    ["/lib/parse-options/index.js", "export const a = 5"],
]);

License

MIT