<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Vladislav</title>
    <description>The latest articles on Forem by Vladislav (@iamguid).</description>
    <link>https://forem.com/iamguid</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F892598%2Fd97def73-01f8-4699-b8b4-729fba155de2.jpeg</url>
      <title>Forem: Vladislav</title>
      <link>https://forem.com/iamguid</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/iamguid"/>
    <language>en</language>
    <item>
      <title>Fully customizable client side (TypeScript) code generation tool for gRPC</title>
      <dc:creator>Vladislav</dc:creator>
      <pubDate>Wed, 01 Nov 2023 10:41:27 +0000</pubDate>
      <link>https://forem.com/iamguid/fully-customizable-client-side-typescript-code-generation-tool-for-grpc-5ek</link>
      <guid>https://forem.com/iamguid/fully-customizable-client-side-typescript-code-generation-tool-for-grpc-5ek</guid>
      <description>&lt;p&gt;Hello everyone. I want to present experimental project which helps you to use gRPC-web on client side.&lt;/p&gt;

&lt;p&gt;Catfish is first fully customizable client side (TypeScript) code generation tool for gRPC.&lt;/p&gt;

&lt;p&gt;With Catfish you can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extend every code generation plugin using very friendly, simple and powerful syntax&lt;/li&gt;
&lt;li&gt;Write your own code generation plugins without pain&lt;/li&gt;
&lt;li&gt;Use library without dependencies like protoc, buf or java&lt;/li&gt;
&lt;li&gt;Use with protoc or buf (in progress)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Catfish packages:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Parser - Based on ANTL4 .proto files parser (currently works only with protobuf V3)&lt;/li&gt;
&lt;li&gt;Generator - Basic classes &amp;amp; types for code generation and many ready to use plugins&lt;/li&gt;
&lt;li&gt;Runtime - Some logic that you might need in generated fiels&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Catfish plugins:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;protobuf - generates protobuf messages&lt;/li&gt;
&lt;li&gt;grpc-web - generates grpc-web compatible clients&lt;/li&gt;
&lt;li&gt;grpc-web-rxjs - generates grpc-web compatible clients based on rxjs library&lt;/li&gt;
&lt;li&gt;grpc-web-catfish - generates extensions for grpc-web clients that you can use to reduce boilerplate (currently implemented only paginators)&lt;/li&gt;
&lt;li&gt;grpc-web-tanstack - generates extensions for grpc-web clients that you can use with reqct-query library&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I will be really happy if you leave feedback here &lt;a href="https://github.com/iamguid/catfish/discussions/1"&gt;https://github.com/iamguid/catfish/discussions/1&lt;/a&gt; Thank You!&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/iamguid"&gt;
        iamguid
      &lt;/a&gt; / &lt;a href="https://github.com/iamguid/catfish"&gt;
        catfish
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Easy to use gRPC client code generation tool
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1 id="user-content-catfish"&gt;&lt;a class="heading-link" href="https://github.com/iamguid/catfish#catfish"&gt;Catfish&lt;/a&gt;&lt;/h1&gt;
&lt;p&gt;️⚠️ Experimental ️⚠️&lt;/p&gt;
&lt;h2 id="user-content-what-is-catfish-"&gt;&lt;a class="heading-link" href="https://github.com/iamguid/catfish#what-is-catfish-"&gt;What is Catfish ?&lt;/a&gt;&lt;/h2&gt;
&lt;p&gt;Catfish is first fully customizable client side (TypeScript) code generation tool for gRPC.&lt;/p&gt;
&lt;p&gt;With Catfish you can:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Extend every code generation plugin using very friendly, simple and powerfull syntax&lt;/li&gt;
&lt;li&gt;Write your own code generation plugins without pain&lt;/li&gt;
&lt;li&gt;Use library without dependencies like protoc, buf or java&lt;/li&gt;
&lt;li&gt;Use with protoc or buf (in progress)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Catfish packages:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Parser - Based on ANTL4 .proto files parser (currently works only with protobuf V3)&lt;/li&gt;
&lt;li&gt;Generator - Basic classes &amp;amp; types for code generation and many ready to use plugins&lt;/li&gt;
&lt;li&gt;Runtime - Some logic that you might need in generated fiels&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Catfish plugins:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;protobuf - generates protobuf messages&lt;/li&gt;
&lt;li&gt;grpc-web - generates grpc-web compatible clients&lt;/li&gt;
&lt;li&gt;grpc-web-rxjs - generates grpc-web compatible clients based on rxjs library&lt;/li&gt;
&lt;li&gt;grpc-web-catfish - generates extensions for grpc-web clients that you can use to reduce boilerplate (currently implemented only paginators)&lt;/li&gt;
&lt;li&gt;grpc-web-tanstack - generates extensions…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/iamguid/catfish"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>opensource</category>
      <category>typescript</category>
      <category>frontend</category>
      <category>grpc</category>
    </item>
    <item>
      <title>New way to cook angular 14 typed forms</title>
      <dc:creator>Vladislav</dc:creator>
      <pubDate>Fri, 15 Jul 2022 18:16:58 +0000</pubDate>
      <link>https://forem.com/iamguid/new-way-to-cook-angular-14-typed-forms-1g7h</link>
      <guid>https://forem.com/iamguid/new-way-to-cook-angular-14-typed-forms-1g7h</guid>
      <description>&lt;p&gt;Hello everyone, I want to show you a library with which you can conveniently declare forms and describe the type of form according to your models, this will be useful to everyone who deals with forms in angular 14. &lt;a href="https://github.com/iamguid/ngx-mf"&gt;ngx-mf&lt;/a&gt; i want to get some feedback from you, thanks! You can try it on &lt;a href="https://stackblitz.com/edit/angular-ngx-mf"&gt;stackblitz&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;You can do something like this:&lt;/p&gt;

&lt;p&gt;We define some model:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
enum ContactType {
    Email,
    Telephone,
}

interface IContactModel {
    type: ContactType;
    contact: string;
}

interface IUserModel {
    id: number;
    firstName: string;
    lastName: string;
    nickname: string;
    birthday: Date;
    contacts: IContactModel[];
}

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then we define some magic type like:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Type Form = FormModel&amp;lt;IUserModel, { contacts: ['group'] }&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then we have type based on our model before form will be init:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;FormGroup&amp;lt;{
    firstName: FormControl&amp;lt;string | null&amp;gt;;
    lastName: FormControl&amp;lt;string | null&amp;gt;;
    nickname: FormControl&amp;lt;string | null&amp;gt;;
    birthday: FormControl&amp;lt;Date | null&amp;gt;;
    contacts: FormArray&amp;lt;FormGroup&amp;lt;{
        type: FormControl&amp;lt;ContactType | null&amp;gt;;
        contact: FormControl&amp;lt;string | null&amp;gt;;
    }&amp;gt;&amp;gt;;
}&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



</description>
      <category>angular</category>
      <category>typescript</category>
    </item>
  </channel>
</rss>
