# Bug report <!-- ⚠️ We receive a lot of bug reports which have already been solved or discussed. If you are looking for help, please try these first: - Docs: https://docs.supabase.com - Discussions: https://github.com/supabase/supabase/discussions - Discord: https://discord.supabase.com Before opening a bug report, please verify the following: --> - [x] I confirm this is a bug with Supabase, not with my own application. - [x] I confirm I have searched the [Docs](https://docs.supabase.com), GitHub [Discussions](https://github.com/supabase/supabase/discussions), and [Discord](https://discord.supabase.com). ## Describe the bug For both input and input types, typescript generation of SQL functions is invalid in some cases : - Primitive types are generated as non-nullable (`type` instead of `type | null`) even though the function may accept NULL as input or output - Domain types are generated as `unknown` I think that this bug is not caused by a PostgreSQL limitation as views produce the correct typing : primitives are nullable, domains generate as their underlying type and when domains are marked `NOT NULL` they are even non-nullable in typescript. ## To Reproduce ```sql CREATE DOMAIN strict_text AS text NOT NULL; CREATE FUNCTION some_function(arg strict_text) RETURNS table (nulltext text, stricttext strict_text) LANGUAGE SQL AS $$ SELECT NULL::uuid, arg $$; ``` Generated type with `supabase gen types typescript --local` ```typescript export interface Database { public: { Functions: { some_function: { Args: { arg: unknown } Returns: { nulltext: string stricttext: unknown }[] } } } } ``` ## Expected behavior Generated types should be ```typescript export interface Database { public: { Functions: { some_function: { Args: { arg: string } Returns: { nulltext: string | null stricttext: string }[] } } } } ``` ## System information - OS: [e.g. Linux NixOS] - Version of supabase CLI: 1.50.8 - Version of Node.js: 18.15.0 ## Additional context I :heart: the work being done and the mindset at Supabase. I believe strict typing is crucial to the success of a "backend in the DB" and I could help with a PR if I'm being given some pointers to the code responsible of the TS generation :wave: