graphql / graphql-scalars

GraphQL Scalars specifications repo.
41 stars 7 forks source link

Regex based custom scalas + automatic discovery #18

Open andimarek opened 1 year ago

andimarek commented 1 year ago

Idea: we could add another custom scalar spec which is a subclass of the string template, which is regex based.

This means the input and output would be fully described with a regex (or two different regex for different input and output).

The main goal of this would be to offer some kind of automatic discovery of the regex. For example via dedicated URL. This would allow tools like GraphiQL to dynamically discover custom scalar specs and validate them and offer code completion.

Example:

spec for LocalDate. The format is "yyyy-mm-dd"

regex for input and output is: "\d{4}-\d{2}-\d{2}".

The patterns for input and output could be reachable via: scalars.graphql.org/andimarek/local-date/input-regex scalars.graphql.org/andimarek/local-date/output-regex

Both endpoint would just return HTTP text with "\d{4}-\d{2}-\d{2}". Nothing else.

One implementation detail I am not sure is how we automatically could get the patterns from the template or maybe we just expect contributors to specify them in extra files?

@dondonz @leebyron what do you think? Would love to hear some ideas how to implement this. Maybe spec-md could help here even?

dondonz commented 1 year ago

100% I think we should do this.

Most exciting bit for me is validation & code completion in a tool like GraphiQL!! I use GraphiQL all the time.

Maybe to start with, we manually add the patterns? Can automate later if there ends up being many regex based specifications

leebyron commented 1 year ago

It's very interesting at surface but it presents a bunch of problems. I had considered this for custom scalars when we first introduced the ability to have them, but decided not to.

A few reasons:

andimarek commented 1 year ago

I think the challenges you pointed out are true @leebyron.

The question would be: how much value does the automatic discovery of regex patterns provide or none at all?

For example if there is indeed no standard of regex engine or at least popular enough implementation that we could leverage, I would argue it is not worth it.