Giter VIP home page Giter VIP logo

Comments (6)

evanw avatar evanw commented on April 28, 2024 5

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.

evanw avatar evanw commented on April 28, 2024 4

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.

evanw avatar evanw commented on April 28, 2024 3

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.

Sceat avatar Sceat commented on April 28, 2024

I'd too love this feature

from esbuild.

toji avatar toji commented on April 28, 2024

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.

evanw avatar evanw commented on April 28, 2024

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.

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)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo 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.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.