Security News
New Python Packaging Proposal Aims to Solve Phantom Dependency Problem with SBOMs
PEP 770 proposes adding SBOM support to Python packages to improve transparency and catch hidden non-Python dependencies that security tools often miss.
π Pluggable and configurable code transformer with built-in ESLint, Babel and support of js, jsx, typescript, flow, markdown, yaml and json
Perfection is finally attained not when there is no longer anything to add, but when there is no longer anything to take away.
(c) Antoine de Saint ExupΓ©ry
πPutout is a JavaScript Linter, pluggable and configurable code transformer, drop-in ESLint replacement with built-in code printer and ability to fix syntax errors. It has a lot of transformations that keeps your codebase in a clean state, removing any code smell and making code readable according to best practices.
The main target is JavaScript, but:
are also supported. Here is how it looks like:
Check out couple variants of plugins that does the same: linting debugger statement:
'use strict';
module.exports.report = () => 'Unexpected "debugger" statement';
module.exports.replace = () => ({
debugger: '',
});
Choose wisely, competitors cannot even fixβ¦ π€«
If I have seen further, it is by standing upon the shoulders of giants.
(c) Isaak Newton
API
.API
documented in Handbook
and responsiveness of a team.config
and plugins
support.βοΈ πPutout on the other hand can make more drastic code transformations that directly affects your codebase making it a better place to code π».
variables
;for-of variables
;typescripts
types;variables
;private fields
;expressions
;variables
;Object.assign()
;replace()
;map
;mapped types
;mapping modifiers
;continue
;operand
;array constructor
;conditions
;type conversion
;functions
;Array.from
;spread
;arguments
;escape
;async
;await
;typeof
;template expressions
;for-of
;array.entries()
;debugger
statement;iife
;process.exit
call;console.log
calls;empty block statements
;empty patterns
;strict mode
directive from esm
;constant conditions
;boolean
from assertion
;boolean
from logical expressions
;duplicates
from TypeScript Union
;unreachable code
;duplicate keys
;typescripts
types;typescripts
interface keys;test.only
to test
calls;test.skip
to test
calls;init
;variable declarations
;nested destructuring
;assignment
;ternary
;logical expressions
;strict mode
directive in commonjs
add it;const
to let
(when needed to avoid TypeError
);apply
to spread
;bitwise
to logical
operator;concat
to flat
;esm
to commonjs
(enabled for *.cjs
);commonjs
to esm
(enabled for *.mjs
);template
with one expression
to string
;equal
to strict equal
;indexOf
to includes
;replace
to replaceAll
;assignment
to arrow function
;forEach
to for...of
;map
to for...of
;reduce
to for...of
;Math.sqrt()
to Math.hypot()
;return await
;Promise.resolve
;Promise.reject
to throw
;reference
;undefined variables
;imports
first;as
type assertions;utility types
;array.at
;filter(Boolean)
;if condition
;await import
;flatMap()
;template literals
;imports
;functions
;npm i putout -D
Usage: putout [options] [path]
Options:
-h, --help display this help and exit
-v, --version output version information and exit
-f, --format [formatter] use a specific output format, the default is: 'progress-bar' locally and 'dump' on CI
-s, --staged add staged files when in git repository
-i, --interactive set lint options using interactive menu
--fix apply fixes of errors to code
--fix-count [count = 10] count of fixes rounds
--rulesdir use additional rules from directory
--transform [replacer] apply Replacer, for example 'var __a = __b -> const __a = __b', read about Replacer https://git.io/JqcMn
--plugins [plugins] a comma-separated list of plugins to use
--enable [rule] enable the rule and save it to '.putout.json' walking up parent directories
--disable [rule] disable the rule and save it to '.putout.json' walking up parent directories
--enable-all enable all found rules and save them to '.putout.json' walking up parent directories
--disable-all disable all found rules (set baseline) and save them to '.putout.json' walking up parent directories
--match [pattern] read '.putout.json' and convert 'rules' to 'match' according to 'pattern'
--flow enable flow
--fresh generate a fresh cache
--no-config avoid reading '.putout.json'
--no-ci disable the CI detection
--no-cache disable the cache
--no-worker disable worker thread
To find errors:
putout lib test
To fix errors:
putout lib test --fix
By default πPutout uses all enabled by default plugins, anyways it can be run with a couple mentioned plugins (split with ","):
putout lib --plugins remove-debugger,remove-unused-variables
πPutout supports next environment variables
:
PUTOUT_FILES
- files that should be processed by putout, divided by ",";PUTOUT_CONFIG_FILE
- path to πPutout config file;ESLINT_CONFIG_FILE
- path to ESLint config file;NO_ESLINT
- do not run ESLint after πPutout;NO_ESLINT_WARNINGS
- do not show ESLint warnings;PUTOUT_FILES=lib,test putout --fix
To configure create .putout.json
file and override any of default options.
When you need to match paths to rules you can use match
section for this purpose in .putout.json
:
{
"match": {
"server": {
"remove-process-exit": true
}
}
}
When you need to ignore some routes no metter what, you can use ignore
section in .putout.json
:
{
"ignore": ["test/fixture"]
}
πPutout supports two types of plugins
, prefix with:
@putout/plugin-
;putout-plugin-
;To use your plugin createnpm
package with keywords putout
, putout-plugin
and add it to .putout.json
.
For example if you need to remove-something
create πPutout plugin with name putout-plugin-remove-something
and it to package.json
:
{
"plugins": ["remove-something"]
}
πPutout supports codemodes
in the similar to plugins way, just create a directory ~/.putout
and put your plugins there. Here is example: convert-tape-to-supertape and this is examples of work.
All examples works both in ESM and CommonJS.
CommonJS:
const putout = require('putout');
ESM:
import {putout} from 'putout';
import {putout} from 'putout';
const source = `
const t = 'hello';
const m = t + '!';
console.log(t);
`;
putout(source, {
plugins: ['remove-unused-variables'],
});
// returns
`
const t = 'hello';
console.log(t);
`;
import {putoutAsync} from 'putout';
const source = `
const t = 'hello';
const m = t + '!';
console.log(t);
`;
await putoutAsync(source, {
plugins: ['remove-unused-variables'],
});
// returns
`
const t = 'hello';
console.log(t);
`;
MIT
FAQs
π Pluggable and configurable code transformer with built-in ESLint, Babel and support of js, jsx, typescript, flow, markdown, yaml and json
The npm package putout receives a total of 7,374 weekly downloads. As such, putout popularity was classified as popular.
We found that putout demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago.Β It has 0 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
PEP 770 proposes adding SBOM support to Python packages to improve transparency and catch hidden non-Python dependencies that security tools often miss.
Security News
Socket CEO Feross Aboukhadijeh discusses open source security challenges, including zero-day attacks and supply chain risks, on the Cyber Security Council podcast.
Security News
Research
Socket researchers uncover how threat actors weaponize Out-of-Band Application Security Testing (OAST) techniques across the npm, PyPI, and RubyGems ecosystems to exfiltrate sensitive data.