Coder Social home page Coder Social logo

Comments (4)

devunt avatar devunt commented on June 1, 2024 2

Found a more better alternative.

// type WithImportant<T> = T extends string ? `${T}${Important}${string}` : T;
// type WithImportant<T> = T extends string ? `${T}${Important}` & { __important?: true } : T;

type WithImportant<T extends U, U = any> = U extends string ? `${U}${Important}` & { __important?: true } : T;

Above code is neither (1) drops the performance, nor (2) pollutes the autocomplete.
With above code svelte-check takes 12s to complete.

I think we can settle on this solution.

Also: this solution also makes gray.900!aaa an invalid token. The original code did not raise type error on a such case, so this way we can have a more type safety.

If this code looks ok to maintainers, I'll file a pull request for this. Please have a look. Thanks.

from panda.

devunt avatar devunt commented on June 1, 2024 1

I've narrowed down the issue and identified the root cause.

type WithImportant<T> = T extends string ? `${T}${Important}${string}` : T;
//                                                          ^^^^^^^^^

If I remove the trailing ${string} in the WithImportant<T> definition, the perf problem instantly goes away.

I don't see why the trailing ${string} is needed as there will be no token following the ! or !important since they should be at the last position of the css value declaration. Is there something am I missing?
I found why: it is needed to hide it from typescript autocomplete. I think there's a way to hide it from autocomplete without sacrificing the performance. I'll update the issue if I find the way to do it.

from panda.

astahmer avatar astahmer commented on June 1, 2024 1

ohh, I had the feeling that branded types could solve this somehow but when I tried I couldnt find a working solution, glad you did !

this looks great, would you like to send a PR or would you prefer I do it ? I'd love to help/guide you if needed in the codebase if you want to contribute, no pressure if that's not the case you already helped a lot 🙏

if you want to contribute:

same in this file and also this one

see the README in sandbox/codegen for more infos

from panda.

devunt avatar devunt commented on June 1, 2024

Found a better alternative.

// type WithImportant<T> = T extends string ? `${T}${Important}${string}` : T;

type WithImportant<T> = T extends string ? `${T}${Important}` & { __important?: true } : T;

Above code is neither (1) drastically drops the performance, nor (2) pollutes the autocomplete.
With above code svelte-check takes 21s to complete.

I'll keep find a better way that does not drop the performance at all.
Meanwhile, I think we can utilize the above code for now since 5m to 20s is still a huge improvement.

from panda.

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.