
Security News
npm Adopts OIDC for Trusted Publishing in CI/CD Workflows
npm now supports Trusted Publishing with OIDC, enabling secure package publishing directly from CI/CD workflows without relying on long-lived tokens.
decaffeinate
Advanced tools
Goodbye CoffeeScript, hello JavaScript!
JavaScript is the future, in part thanks to CoffeeScript. Now that it has served its purpose, it's time to move on. Convert your CoffeeScript source to modern JavaScript with decaffeinate.
# via yarn
$ yarn global add decaffeinate
# via npm
$ npm install -g decaffeinate
$ decaffeinate input.coffee
input.coffee → input.js
# convert all files in directory and subdirectories
$ decaffeinate .
input.coffee → input.js
subfolder/input.coffee → subfolder/input.js
Alternatively, paste code into the online repl to immediately see the output.
For real-world use cases, you'll likely want to spend some time understanding the different options and nuances of the decaffeinate tool. You'll also likely want to run decaffeinate using the bulk-decaffeinate wrapper tool, or write your own wrapper script. See the Conversion Guide for more information and advice on running decaffeinate on real-world code, and see Cleanup suggestions after running decaffeinate for advice on cleaning up the converted JavaScript code and other things to keep in mind.
Feel free to join the gitter chat room to ask questions, or you can file an issue on the issues page:
Complete. The project is stable enough for production use, and has been used to convert hundreds of thousands (probably millions) of lines of production code. The conversion process has been extensively tested and there are few or no known correctness bugs, although no guarantees are made.
Here are some popular open source CoffeeScript projects and their current status when run through decaffeinate. Each project has a decaffeinate-specific fork that is re-created from the original repo once per day.
Project | Lines of CoffeeScript | Conversion status | Test status |
---|---|---|---|
chroma.js | 3.3K | ||
hubot [1] | 3.7K | ||
autoprefixer [1] | 4.8K | ||
coffeelint | 8.8K | ||
vimium [2] | 11K | ||
coffeescript [2] | 17K | ||
coffeescript2 [2] | 17K | ||
atom [1] | 51K | ||
atom-org | 170K | ||
codecombat | 230K |
Notes:
To contribute to this list, send a pull request to the decaffeinate-examples project.
In addition, decaffeinate has been used on private codebases within various companies, such as Square, Benchling, Bugsnag, and DataFox.
Some blog posts on using decaffeinate:
If you run into crashes or correctness issues, or you have suggestions on how decaffeinate could be improved, feel free to file an issue on the issues page.
--use-cs2
: Treat the input as CoffeeScript 2 code. CoffeeScript 2 has some
small breaking changes and differences in behavior compared with CS1, so
decaffeinate assumes CS1 by default and allows CS2 via this flag.--use-js-modules
: Convert require
and module.exports
to import
and
export
. Note that this may result in incorrect import statements because
decaffeinate does not know the export style used by the other file. To
generate correct imports, use bulk-decaffeinate and
enable the useJSModules
option.--modernize-js
: Treat the input as JavaScript and only run the
JavaScript-to-JavaScript transforms, modifying the file(s) in-place.--literate
: Treat the input file as Literate CoffeeScript.--disable-suggestion-comment
: Do not include a comment with followup
suggestions at the top of the output file.--no-array-includes
: Do not use Array.prototype.includes
in generated
code.--safe-import-function-identifiers
: Comma-separated list of function names
that may safely be in the import
/require
section of the file. All other
function calls will disqualify later require
s from being converted to
import
s.--prefer-let
: Use let
instead of const
for most variables in output
code.--loose
: Enable all --loose...
options.--loose-default-params
: Convert CS default params to JS default params.--loose-for-expressions
: Do not wrap expression loop targets in Array.from
.--loose-for-of
: Do not wrap JS for...of
loop targets in Array.from
.--loose-includes
: Do not wrap in Array.from
when converting in
to includes
.--loose-comparison-negation
: Allow unsafe simplifications like !(a > b)
to a <= b
.--loose-js-modules
: Allow named exports when converting to JS modules.--disallow-invalid-constructors
: Give an error when constructors use this
before super
or omit the super
call in a subclass.--optional-chaining
: Target JavaScript optional chaining. Note the semantics may not match exactly.--nullish-coalescing
: Target JavaScript nullish coalescing. Note the semantics may not match exactly.--logical-assignment
: Use the ES2021 logical
assignment operators
&&=
, ||=
, and ??=
.For more usage details, see the output of decaffeinate --help
.
FAQs
Move your CoffeeScript source to modern JavaScript.
We found that decaffeinate demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 2 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
npm now supports Trusted Publishing with OIDC, enabling secure package publishing directly from CI/CD workflows without relying on long-lived tokens.
Research
/Security News
A RubyGems malware campaign used 60 malicious packages posing as automation tools to steal credentials from social media and marketing tool users.
Security News
The CNA Scorecard ranks CVE issuers by data completeness, revealing major gaps in patch info and software identifiers across thousands of vulnerabilities.