captbaritone / grats

Implementation-First GraphQL for TypeScript
https://grats.capt.dev
MIT License
297 stars 16 forks source link

__typename must be const #122

Closed captbaritone closed 1 month ago

captbaritone commented 6 months ago

Currently we allow this, but it's not technically safe since the __typename could be mutated.

class User implements IPerson {
  __typename = "User";
}

We should require either:

class User implements IPerson {
  __typename = "User" as const;
}

or

class User implements IPerson {
  __typename: "User" = "User";
}
Rash-Hit commented 6 months ago

@captbaritone can i take this ?? what all other things needs to in mind while doing this . ???

captbaritone commented 6 months ago

@Rash-Hit Sorry I missed your message! I think all we need to do here is update the code here to expect an "AsExpression" with an expression that is the expected string literal and a type that is const (I think there's a keyword constant exported by TypeScript somewhere).

Then you should be sure to update/add test fixtures showing the "happy" path as well as demonstrating exactly what the error messages look like. You can read more here: https://github.com/captbaritone/grats/blob/2f7323fb43a31ed1895b394bbdbc01fba583cc0c/CONTRIBUTING.md#automated-tests

captbaritone commented 6 months ago

@Rash-Hit Following up here. Are you still interested in working on this? No worries if not.

Rash-Hit commented 5 months ago

i am really sorry @captbaritone , is this something we need to do ?? image

captbaritone commented 5 months ago

@Rash-Hit Yeah, that looks about right. We probably also need to check that it's as const (look at the .identifier of the as expression. You'll also need to make sure that in the as const case you look for the literal name string as the .expression of the as expression node.

Here's what it looks like in the correct case:

Screenshot 2024-03-23 at 12 22 04 PM

https://astexplorer.net/#/gist/615fac072e169328425c18cb9d88ba66/bea0aafa2f40091c2d62bf65dae3b3834d8bdf0a

captbaritone commented 1 month ago

Closed in https://github.com/captbaritone/grats/pull/137