esprima
jscodeshift
esprima | jscodeshift | |
---|---|---|
9 | 28 | |
7,093 | 9,708 | |
0.0% | 0.7% | |
0.0 | 7.6 | |
about 2 years ago | about 1 month ago | |
TypeScript | JavaScript | |
BSD 2-clause "Simplified" License | MIT License |
Stars - the number of stars that a project has on GitHub. Growth - month over month growth in stars.
Activity is a relative number indicating how actively a project is being developed. Recent commits have higher weight than older ones.
For example, an activity of 9.0 indicates that a project is amongst the top 10% of the most actively developed projects that we are tracking.
esprima
-
Running Untrusted JavaScript Code
I'm particularly fond of Firecracker, but itβs a bit of work to set up, so if you cannot afford the time yet, you want to be on the safe side, do a combination of static analysis and time-boxing execution. You can use esprima to parse the code and check for any malicious act.
-
ESLint: under the hood
Focusing again on ESLint, the parser used by the linter is called Espree. This is an in-house parser built by the ESLint folks to fully support ECMAScript 6 and JSX on top of the already existing Esprima. The Espree module provide APIs for both tokenization and parsing that you can easily test out.
-
Why you donβt need TypeScript
For TypeScript we have used AST transforms from their compiler API, and for plain JavaScript we did a similar thing using ESPrima. This helped us implement some simple optimizations like stream fusion (combining .filter and .map into a single operation) or avoiding extra object allocations in vector math, which led to nice performance improvements in code that does heavy computation (we process large amounts of data on the server and store results of physics simulations).
-
Algorithm to simplify a 100-variable Boolean expression?
I used ESPrima, but any parser would do in this case. I then wrote a simple function to extract all "atomic" non-boolean expressions from it.
-
How to make your own programming language in JavaScript
AST is an acronym for Abstract Syntax Tree. It's the way to represent code in a format that tools can understand. Usually in form of tree data structure. We will use AST in the format of an Esprima, which is a JavaScript parser that outputs AST.
-
What the heck is an Abstract Syntax Tree (AST) ?
esprima
-
Abstract Syntax Trees: They're Actually Used Everywhere -- But What Are They?
Create an AST: Esprima
-
We Switched from Webpack to Vite
The thread was originally about CRA vs Vite size on disk (or implicitly, if we're applying it to real world applications, network cost in CI job startup times). And like I said, surrogate pairs don't apply to ASCII.
See this[0] for reference. Note how the first byte must fall within a certain range in order to signal being a surrogate pair. This fact is taken advantage of by JS parsers to make parsing of ASCII code faster by special casing that range, since checking for a valid character in the entire unicode range is quite a bit more expensive[1].
[0] https://github.com/jquery/esprima/blob/0911ad869928fd218371b...
[1] https://github.com/jquery/esprima/blob/0911ad869928fd218371b...
-
How to create your own language that compile to JavaScript
If you want to learn more about parsing, reading the code of an actual recursive parser might be a better idea. Esprima is a decent place to start if you're interested in JS grammar. Then you can look at the babel handbook to learn more about AST transformations. From there, the literature gets quite a bit more heavy. If you get this far and are willing to push further, you'll probably want to grab yourself a copy of the dragon book at a minimum.
jscodeshift
-
Building a JSON Parser from scratch with JS π€―
A parser can have various applications in everyday life, and you probably use some parser daily. Babel, webpack, eslint, prettier, and jscodeshift. All of them, behind the scenes, run a parser that manipulates an Abstract Syntax Tree (AST) to do what you need - we'll talk about that later, don't worry.
-
[AskJS] Can anyone recommend a test runner with ESM and Custom Loader Support?
OP: If this is an avenue you feel like entertaining, here are some nice codemod tools that could ease the transition for you: CodeQue, Subsecond, and the old standard jscodeshift.
-
[AskJS] Are there any tools to help automatically update imports when splitting typescript libraries in a Monorepo?
If that isn't enough or you find issues with it, the current de-facto standard for codemods is jscodeshift. You'll write more code, but at least you only have to write it once.
-
env: node\r: No such file or directory
Here is the pull request https://github.com/facebook/jscodeshift/pull/549
- Criando um Parser de JSON do zero
-
Show HN: Starter.place β Gumroad for Starter Repos
Those are important but tough problems!
1. I feel like codemods and a setup shell prompt are the best solution to this, but this looks different for each language (eg, in JS there is https://github.com/facebook/jscodeshift). I could make UI around that for listers to provide parts of the app that should replaced and buyers to provide values for it, but it could be quite a rabbit hole. This is actually why I show the README for the repos, so users can see if the setup steps are comprehensive before buying (for paid ones).
2. I agree atomic commits can help someone navigate a new codebase. In the same spirit as my response to #1, I don't feel confident I could enforce this, but I could surface the commits on the starter repo page so potential buyers could see if the author laid things out well.
Thanks for the ideas!
-
Automatic Dependency Upgrade Tool (with auto-resolve breaking changes)
That's why I've been working on a tool that automatically upgrades major versions of libraries with breaking changes, the idea is to simplify the process and save developers time and effort by having a bank of transformers (using codemod & jscodeshift) and open source them:
-
Effective Refactoring with Codemods
JSCodeshift: A toolkit for running and writing codemods.
- Launch HN: FlyCode (YC S22) β Let product teams edit web apps without coding
-
JARVIS β Write me a Codemod
jscodeshift
What are some alternatives?
estree - The ESTree Spec
putout - π Pluggable and configurable JavaScript Linter, code transformer and formatter, drop-in ESLint superpower replacement πͺ with built-in support for js, jsx, typescript, markdown, yaml and json. Write declarative codemods in a simplest possible way π
escodegen - ECMAScript code generator
react-codemod - React codemod scripts
babel-handbook - :blue_book: A guided handbook on how to use Babel and how to create plugins for Babel.
codemod - Codemod is a tool/library to assist you with large-scale codebase refactors that can be partially automated but still require human oversight and occasional intervention. Codemod was developed at Facebook and released as open source.