1.4.1 • Published 1 year ago

stencil-qs v1.4.1

Weekly downloads
-
License
MIT
Repository
github
Last release
1 year ago

Why was this build?

Since version V4 of Strapi we have more control over filtering and controlling relations when using the REST API, this also introduces some complexity to requesting an API. Stencil aims to reduce this complexity.

Installation

npm install stencil-qs

or if you are using yarn

yarn add stencil-qs

Usage

You can use Stencil to either create or read query strings used to interact with the REST API.

interface Test {
    id: number;
    // array types are also supported
    images: Array<{ url: string }>;
    relation: {  property: string; }
}

const query = Stencil.stringify<Test>({
    filters: {
      id: { 
       $ne: 21 
      },
      images: {
        url: { $contains: "placehold.it" }, 
      },
      relation: { 
        property: { $in: ["example"] }
      }
    }
});

Helpers

The current version of Stencil.qs not only includes the type safe query string builder but some brand new features like:

Response Helper

A new function that can be used to flatten any response from the API. The response is usually a deeply nested object (unified response format). This function will loop through each property of the object and remove all nesting.

  • Supports nested objects
  • Supports arrays
  • Supports null values
  • Supports components
  • Supports dynamic zones

Keep in mind When using this function, that the response is not always in the unified response format, like in the users-permissions plugin, if no data key is found in the response the function will throw accordingly.

Localization Helper

With the new i18n.single and i18n.array you are able to not only flatten but automatically localize your content types received from the API.

Both of the new helpers are completely type safe and you can pass the available locales as well as the content type that the response represents after being flattenend.

import Stencil from 'stencil-qs';

type Locales = "de" | "en";
type Article = { id: string, title: string, description: string };

// create query and include localizations
const query = Stencil.stringify<Article[]>({ populate["localizations"] });
const response = await (await fetch(`/articles?${query}`)).json();

// would return Record<Locale, Article>[];
const articles = Stencil.i18n.array<Locales, Article>(response); 
1.4.1

1 year ago

1.4.0

2 years ago

1.3.2

2 years ago

1.3.1

2 years ago

1.3.0

2 years ago

1.2.0

2 years ago

1.1.3

2 years ago

1.1.2

2 years ago

1.1.1

2 years ago

1.1.0

2 years ago

1.0.3

2 years ago

1.0.2

2 years ago

1.0.1

2 years ago

1.0.0

2 years ago