1.1.3 • Published 12 months ago
@puppup/strapi-share v1.1.3
Содержание
О проекте
В проекте представлено решение, помогающее получить доступ к типам Strapi извне.
Проект построен на базе
Strapi 5.
Перенос типов из Strapi
- Создать в корне проекта файл
copyTypes.ts
// copyTypes.js
const copyStrapiTypes = require('@puppup/strapi-share').copyStrapiTypes;
copyStrapiTypes({
// путь до папки проекта Strapi
strapiPath: 'path/to/strapi',
// путь, куда будут помещены сгенерированные типы
destPath: './src/types/strapi',
});- Добавить скрипт в
package.json
// package.json
{
...
"scripts": {
"types": "node copyTypes.js"
}
...
}- Запустить скрипт в терминале
npm run typesИспользование типов
Для правильного подтягивания типов необходимо установить пакет @strapi/strapi
import { APIResponse, APIResponseCollection, GetStrapiType } from '@puppup/strapi-share';
import { UID } from '@strapi/strapi'
// Использование типа, описывающего UID моделей
type StrapiModelUID = UID.ContentType | UID.Component;
const userSchemaUID: StrapiModelUID = 'plugin::users-permissions.user';
// Получение типа модели по его UID
type User = GetStrapiType<'plugin::users-permissions.user'>;
// Получение типа ответа Strapi на запрос по UID модели (одиночный)
type UserApi = APIResponse<'plugin::users-permissions.user'>;
// Получение типа ответа Strapi на запрос по UID модели (коллекция)
type UsersApi = APIResponseCollection<'plugin::users-permissions.user'>;Интеграция с нашими продуктами
@puppup/api-factory
ApiStrapiTypes создает типы, которые можно использовать для типизации ApiFactory на базе стандартных ответов Strapi
import { Api, ApiFactory, ... } from '@puppup/api-factory';
import { ApiStrapiTypes } from '@pupppup/strapi-share';
...
// Использование утилиты для создания кастомных типов под Strapi
type ApiTypes = ApiStrapiTypes<'plugin::users-permissions.user'>;
// ApiFactory (singleton)
const apiFactory = new ApiFactory({
baseUrl: 'base_url'
});
class UsersApi extends apiFactory.getApi<ApiTypes>('users') {}
// ApiFactory (no-singleton)
const { apis } = new ApiFactory({
httpConfig: HTTP_CONFIG,
apisConfig: {
usersApi: {
instance: Api<ApiTypes>,
endpoint: 'users',
},
},
});