Comments (6)
Yes, definitely. I will support this at least as a pass-through transformation, and maybe also with a lowering pass (using WeakMap
like TypeScript). Just haven't gotten to it yet.
from esbuild.
This should be working as of esbuild version 0.5.7. I have added support for all kinds of private names (fields, methods, and getters/setters both non-static and static, including interactions with optional chaining). Please try it out and report bugs if you find any.
from esbuild.
Small update: the private name syntax can now be parsed in the latest release (version 0.4.9). I haven't implemented the transform for older browsers yet, however.
from esbuild.
I'd too love this feature
from esbuild.
Given that the readme goes out of it's way to point out how slow WeakMap
can be I'm curious what other approaches were evaluated? One pattern that I've seen for private fields is to use Symbol
, like so:
const privateField = Symbol("MyClass/privateField");
class MyClass {
constructor() {
this.publicField = 0;
this[privateField] = 1;
}
}
Some quick benchmarking show that this performs closer to regular fields than the WeakMap
approach. I know that it's observable via use of Object.getOwnPropertySymbols()
, however, which may be the reason enough to avoid this approach if esbuild requires strict semantic equivalence.
from esbuild.
Some quick benchmarking show that this performs closer to regular fields than the
WeakMap
approach. I know that it's observable via use ofObject.getOwnPropertySymbols()
, however, which may be the reason enough to avoid this approach if esbuild requires strict semantic equivalence.
Yes, I have considered that too, but I avoided it for the reason you mentioned. Turning private fields into something that's not private seems like an invalid transformation to me. I could see it being an opt-in transform perhaps.
Part of my hesitation is I've never seen this feature actually used in real-world code. If this feature makes it into more real-world code and 99% of the uses out there don't actually have to do with privacy, then I could see changing the default transformation and have privacy be opt-in instead. But I think it remains to be seen how this feature will actually be used once it gets more wide-spread adoption.
Edit: I see that Babel has a loose option that does this, so it's not without precedent. It would be interesting to hear from others that are using this feature in their code what they are using it for and why they are using it.
from esbuild.
Related Issues (20)
- esbuild not work well with package.json has "exports:{"./*": "./*"}" HOT 2
- Allow destructuring for all target environments HOT 1
- re-create package.json with only externalized dependencies
- SyntaxError: The requested module X does not provide an export named Y since code modification HOT 1
- Cross-Platform Development Problem HOT 6
- CSS media query range syntax not downleveled
- Object rest and function scope HOT 4
- DCE doesn't remove unreferenced `new Regexp`. HOT 1
- CVE-2023-45288 HOT 3
- Throwing an error within a plugin does not stop the build
- Metafile not output to the `outdir` HOT 2
- Output is incorrect when there is an import declaration with an import clause that has one type only import specifier HOT 3
- invalid code generation HOT 3
- Building on top of esbuild Analyze HOT 1
- Strategy to determine visiting browser's inclusion or exclusion from the esbuild bundle target? HOT 3
- Incorrect import order causes errors HOT 2
- Feature request: Implement the Decorator Metadata proposal HOT 3
- ES Decorators no binding to `this`
- Missing `es2023` target HOT 1
- Question error [ERROR] Two output files share the same path but have different contents HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from esbuild.