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)
- ERROR: Expected "*/" to terminate multi-line comment HOT 2
- Expected ";" but found "const" - typescript transformer HOT 2
- Option to disable injected comment of input path file HOT 2
- Additional directories to watch HOT 3
- esbuild does not fail with undefined functions HOT 5
- Segmentation fault when using with vite and sveltekit project HOT 1
- Glob imports must match exactly
- Pass argument to IIFE HOT 2
- Esbuild causing bundle breakage when applied twice to the same bundle
- Splitting results in `Dynamic require of "<filename>" is not supported` when targeting `chrome62`
- [Feature Request] Add built-in HTML loader HOT 1
- Imports from stdio entrypoint don't have a namespace set
- DCE is not removed when value is from a const in another module.
- Get metafile info from a `watch()` rebuild HOT 2
- removes the backslash "\" when minify option is false HOT 4
- [Sourcemap] Private properties don't get sourcemapped correctly HOT 3
- ENV Secrets accessible from js code in a React + Rails APP. HOT 7
- [Feature] Ability to save charts from Bundle Size Analyzer as svg files
- TypeError: Cannot set property X of #<Object> which has only a getter HOT 1
- Line limit option (lineLimit) breaks code HOT 3
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.