4.6.0 • Published 10 months ago
@chubbyts/chubbyts-api v4.6.0
chubbyts-api
Description
Requirements
- node: 18
- @chubbyts/chubbyts-decode-encode: ^1.4.1
- @chubbyts/chubbyts-http-error: ^2.4.1
- @chubbyts/chubbyts-http-types: ^1.3.1 || ^2.0.0
- @chubbyts/chubbyts-log-types: ^1.4.3 || ^2.0.1
- @chubbyts/chubbyts-negotiation: ^3.3.1
- @chubbyts/chubbyts-throwable-to-error: ^1.3.2
- qs: ^6.14.0
- uuid: ^11.0.5
- zod: ^3.24.1
Installation
Through NPM as @chubbyts/chubbyts-api.
npm i @chubbyts/chubbyts-api@^4.6.0Usage
Handler
createListHandler
import { createListHandler } from '@chubbyts/chubbyts-api/dist/handler/list';
import { createEncoder } from '@chubbyts/chubbyts-decode-encode/dist/encoder';
import { createJsonTypeEncoder } from '@chubbyts/chubbyts-decode-encode/dist/encoder/json-type-encoder';
import { z } from 'zod';
import { ResolveModelList } from '@chubbyts/chubbyts-api/dist/repository';
import { List, Model } from '@chubbyts/chubbyts-api/dist/model';
import {
createResponseFactory,
createServerRequestFactory,
} from '@chubbyts/chubbyts-http/dist/message-factory'; // any implementation can be used
const querySchema = z.object({ name: z.string() }).strict();
const resolveModelList: ResolveModelList<MyModel> = (list: List<Model<MyModel>>): Promise<List<Model<MyModel>>> => {};
const responseFactory = createResponseFactory();
const modelListResponseSchema = z.object({ id: z.string(), createdAt: z.date(), name: z.string() }).strict();
const encoder = createEncoder([createJsonTypeEncoder()]);
const serverRequestFactory = createServerRequestFactory();
const listHandler = createListHandler<MyModel>(
querySchema,
resolveModelList,
responseFactory,
modelListResponseSchema,
encoder
);
(async () => {
const request = serverRequestFactory('GET', 'http://localhost:8080/api/pets');
const response = await listHandler(request);
})();createCreateHandler
import { createCreateHandler } from '@chubbyts/chubbyts-api/dist/handler/create';
import { createDecoder } from '@chubbyts/chubbyts-decode-encode/dist/decoder';
import { createJsonTypeDecoder } from '@chubbyts/chubbyts-decode-encode/dist/decoder/json-type-decoder';
import { createEncoder } from '@chubbyts/chubbyts-decode-encode/dist/encoder';
import { createJsonTypeEncoder } from '@chubbyts/chubbyts-decode-encode/dist/encoder/json-type-encoder';
import { z } from 'zod';
import { PersistModel } from '@chubbyts/chubbyts-api/dist/repository';
import { Model } from '@chubbyts/chubbyts-api/dist/model';
import {
createResponseFactory,
createServerRequestFactory,
} from '@chubbyts/chubbyts-http/dist/message-factory'; // any implementation can be used
const decoder = createDecoder([createJsonTypeDecoder()]);
const modelRequestSchema = z.object({ name: z.string() }).strict();
const persistModel: PersistModel<MyModel> = (model: Model<MyModel>): Promise<Model<MyModel>> => {};
const responseFactory = createResponseFactory();
const modelResponseSchema = z.object({ id: z.string(), createdAt: z.date(), name: z.string() }).strict();
const encoder = createEncoder([createJsonTypeEncoder()]);
const serverRequestFactory = createServerRequestFactory();
const createHandler = createCreateHandler<Model>(
decoder,
modelRequestSchema,
persistModel,
responseFactory,
modelResponseSchema,
encoder
);
(async () => {
const request = serverRequestFactory('POST', 'http://localhost:8080/api/pets');
const response = await createHandler(request);
})();createReadHandler
import { createReadHandler } from '@chubbyts/chubbyts-api/dist/handler/read';
import { createEncoder } from '@chubbyts/chubbyts-decode-encode/dist/encoder';
import { createJsonTypeEncoder } from '@chubbyts/chubbyts-decode-encode/dist/encoder/json-type-encoder';
import { z } from 'zod';
import { FindModelById } from '@chubbyts/chubbyts-api/dist/repository';
import { Model } from '@chubbyts/chubbyts-api/dist/model';
import {
createResponseFactory,
createServerRequestFactory,
} from '@chubbyts/chubbyts-http/dist/message-factory'; // any implementation can be used
const findModelById: FindModelById<MyModel> = async (id: string): Promise<Model<MyModel>|undefined> => {};
const responseFactory = createResponseFactory();
const modelResponseSchema = z.object({ id: z.string(), createdAt: z.date(), name: z.string() }).strict();
const encoder = createEncoder([createJsonTypeEncoder()]);
const serverRequestFactory = createServerRequestFactory();
const readHandler = createReadHandler<Model>(
findModelById,
responseFactory,
modelResponseSchema,
encoder
);
(async () => {
const request = serverRequestFactory('GET', 'http://localhost:8080/api/pets/8ba9661b-ba7f-436b-bd25-c0606f911f7d');
const response = await readHandler(request);
})();createUpdateHandler
import { createUpdateHandler } from '@chubbyts/chubbyts-api/dist/handler/update';
import { createDecoder } from '@chubbyts/chubbyts-decode-encode/dist/decoder';
import { createJsonTypeDecoder } from '@chubbyts/chubbyts-decode-encode/dist/decoder/json-type-decoder';
import { createEncoder } from '@chubbyts/chubbyts-decode-encode/dist/encoder';
import { createJsonTypeEncoder } from '@chubbyts/chubbyts-decode-encode/dist/encoder/json-type-encoder';
import { z } from 'zod';
import { FindModelById, PersistModel } from '@chubbyts/chubbyts-api/dist/repository';
import { Model } from '@chubbyts/chubbyts-api/dist/model';
import {
createResponseFactory,
createServerRequestFactory,
} from '@chubbyts/chubbyts-http/dist/message-factory'; // any implementation can be used
const findModelById: FindModelById<MyModel> = async (id: string): Promise<Model<MyModel>|undefined> => {};
const decoder = createDecoder([createJsonTypeDecoder()]);
const modelRequestSchema = z.object({ name: z.string() }).strict();
const persistModel: PersistModel<MyModel> = (model: Model<MyModel>): Promise<Model<MyModel>> => {};
const responseFactory = createResponseFactory();
const modelResponseSchema = z.object({ id: z.string(), createdAt: z.date(), name: z.string() }).strict();
const encoder = createEncoder([createJsonTypeEncoder()]);
const serverRequestFactory = createServerRequestFactory();
const updateHandler = createUpdateHandler<Model>(
findModelById,
decoder,
modelRequestSchema,
persistModel,
responseFactory,
modelResponseSchema,
encoder
);
(async () => {
const request = serverRequestFactory('PUT', 'http://localhost:8080/api/pets/8ba9661b-ba7f-436b-bd25-c0606f911f7d');
const response = await updateHandler(request);
})();createDeleteHandler
import { createDeleteHandler } from '@chubbyts/chubbyts-api/dist/handler/delete';
import { FindModelById, RemoveModel } from '@chubbyts/chubbyts-api/dist/repository';
import { Model } from '@chubbyts/chubbyts-api/dist/model';
import {
createResponseFactory,
createServerRequestFactory,
} from '@chubbyts/chubbyts-http/dist/message-factory'; // any implementation can be used
const findModelById: FindModelById<MyModel> = async (id: string): Promise<Model<MyModel>|undefined> => {};
const removeModel: RemoveModel<MyModel> = (model: Model<MyModel>): Promise<void> => {};
const responseFactory = createResponseFactory();
const serverRequestFactory = createServerRequestFactory();
const deleteHandler = createDeleteHandler<Model>(
findModelById,
removeModel,
responseFactory,
);
(async () => {
const request = serverRequestFactory('DELETE', 'http://localhost:8080/api/pets/8ba9661b-ba7f-436b-bd25-c0606f911f7d');
const response = await deleteHandler(request);
})();Middleware
createAcceptLanguageNegotiationMiddleware
createAcceptNegotiationMiddleware
createContentTypeNegotiationMiddleware
createErrorMiddleware
Copyright
2025 Dominik Zogg
4.5.0
11 months ago
4.4.0
11 months ago
4.6.0
10 months ago
4.3.0
11 months ago
4.2.1
12 months ago
4.2.0
12 months ago
4.0.1
2 years ago
4.1.0
2 years ago
4.1.1
2 years ago
4.0.0
2 years ago
3.4.0
2 years ago
3.3.1
2 years ago
3.3.0
2 years ago
3.2.1
2 years ago
3.2.0
3 years ago
3.1.1
3 years ago
3.1.0
3 years ago
3.0.4
3 years ago
3.0.3
3 years ago
3.0.2
3 years ago
3.0.1
3 years ago
3.0.0
3 years ago
2.2.2
3 years ago
2.2.1
3 years ago
2.2.0
3 years ago
2.1.0
3 years ago
2.0.0
3 years ago
1.4.0
3 years ago
1.3.0
3 years ago
1.2.0
3 years ago
1.1.0
3 years ago
1.0.3
4 years ago
1.0.2
4 years ago
1.0.1
4 years ago
1.0.0
4 years ago