Git Product home page Git Product logo

Comments (3)

lukeed avatar lukeed commented on September 23, 2024 1

Hi, thanks!

I have considered this -- mostly in terms of routing. I've had this internal battle about it for Polka, too.

The problem is that decorator support is spotty & spooky to a large number of people still. It also raises a bunch of TS typing implications, which I've not really looked into as this is my first framework claiming 1st class TS support.

I don't want to say much about this right now, but I will mention that I've been toying around with compile-time optimizations. So, again with routing, the regexparam code should/will not be in the generated bundle at all. Most of the router class will disappear too actually.

I'll leave this issue open to collect feedback from others, but my personal take on decorators has been a mixture of 🤩 + 😬 for years now -- haven't seen much happen to alleviate the concerns.

from worktop.

lukeed avatar lukeed commented on September 23, 2024

To be clear, I'm not interested in the proposed example snippet (or plugins), as that can be done w/o a decorator:

const API = new Router;

API.setSeveralHeaders = function (res, [header, value] = []) {
	res.setHeader('foo','bar')
	res.setHeader('biz','baz')
	res.setHeader('wing','bird')
	if (header && value) {
		res.setHeader(header, value)
	}
};

I also think this particular snippet could just be replaced with the Router.prepare hook, if need be.

In any event, a core motive for worktop is to do as little runtime work as possible. That should be every framework's goal -- but it's especially true here given that there's a CPU limit. This is why plugins (in the Fastify sense) aren't going to be considered either... it's runtime code that builds up a state only to be thrown away immediately after. All it really does is eat away at that CPU budget. And finally, on this point, it's why worktop offers tree-shakable submodules. Functions are cheap & easily composed. Because you have to involve a bundle-step with worktop (intentional, no way around this), all your methods/utilities should be set up this way.

The decorator API I was considering was something like this:

@GET('/hello/:name')
const list: Handler = async (req, res) => {
  // I can skip assigning this to Router
  res.end(`hello ${req.params.name}`);
}

So, I think I'll actually close this issue to avoid the confusion. I'll open another to gather feedback about ^this line of thinking for decorators.

What do you think?

from worktop.

lukeed avatar lukeed commented on September 23, 2024

Will close this for now. Only recently discovered that decorators are meant to be with/on classes only 💔
Relevant Proposal: https://github.com/wycats/javascript-decorators

Worst case scenario – I implement my idea via typedocs or comments... but maybe there's something else can wiggle together.

from worktop.

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.